From 82154d756a660e8671b7a30e224443865d833e7a Mon Sep 17 00:00:00 2001 From: Prakash Dhavali Date: Fri, 27 Dec 2013 15:07:45 -0800 Subject: Release 4.0.0.62 Release 4.0.0.62. Switch over from qcacld-2.0 to qcacld-new internally --- Android.mk | 40 +- CORE/BAP/src/bapApiLinkCntl.c | 2 +- CORE/BAP/src/bapApiStatus.c | 2 +- CORE/BAP/src/bapRsnTxRx.c | 4 +- CORE/DXE/src/wlan_qct_dxe.c | 525 +- CORE/DXE/src/wlan_qct_dxe_cfg_i.c | 14 +- CORE/DXE/src/wlan_qct_dxe_i.h | 2 + CORE/HDD/inc/qc_sap_ioctl.h | 2 + CORE/HDD/inc/wlan_hdd_assoc.h | 17 +- CORE/HDD/inc/wlan_hdd_cfg.h | 438 +- CORE/HDD/inc/wlan_hdd_cfg80211.h | 30 +- CORE/HDD/inc/wlan_hdd_debugfs.h | 44 + CORE/HDD/inc/wlan_hdd_dev_pwr.h | 59 +- CORE/HDD/inc/wlan_hdd_ftm.h | 5 +- CORE/HDD/inc/wlan_hdd_hostapd.h | 1 - CORE/HDD/inc/wlan_hdd_main.h | 299 +- CORE/HDD/inc/wlan_hdd_p2p.h | 1 - CORE/HDD/inc/wlan_hdd_packet_filtering.h | 14 +- CORE/HDD/inc/wlan_hdd_softap_tx_rx.h | 35 +- CORE/HDD/inc/wlan_hdd_tdls.h | 18 +- CORE/HDD/inc/wlan_hdd_tgt_cfg.h | 67 +- CORE/HDD/inc/wlan_hdd_tx_rx.h | 34 + CORE/HDD/inc/wlan_hdd_wext.h | 39 +- CORE/HDD/inc/wlan_hdd_wmm.h | 16 + CORE/HDD/inc/wlan_hdd_wowl.h | 31 +- CORE/HDD/src/test.c | 10032 ++++++++++++++++++++++++++ CORE/HDD/src/wlan_hdd_assoc.c | 836 ++- CORE/HDD/src/wlan_hdd_cfg.c | 1016 ++- CORE/HDD/src/wlan_hdd_cfg80211.c | 2533 +++++-- CORE/HDD/src/wlan_hdd_debugfs.c | 480 ++ CORE/HDD/src/wlan_hdd_dev_pwr.c | 127 +- CORE/HDD/src/wlan_hdd_early_suspend.c | 260 +- CORE/HDD/src/wlan_hdd_ftm.c | 1232 +++- CORE/HDD/src/wlan_hdd_hostapd.c | 435 +- CORE/HDD/src/wlan_hdd_main.c | 6843 +++++++++++++++--- CORE/HDD/src/wlan_hdd_oemdata.c | 10 +- CORE/HDD/src/wlan_hdd_p2p.c | 118 +- CORE/HDD/src/wlan_hdd_scan.c | 5 +- CORE/HDD/src/wlan_hdd_softap_tx_rx.c | 261 +- CORE/HDD/src/wlan_hdd_tdls.c | 512 +- CORE/HDD/src/wlan_hdd_tx_rx.c | 412 +- CORE/HDD/src/wlan_hdd_wext.c | 1442 +++- CORE/HDD/src/wlan_hdd_wmm.c | 218 +- CORE/HDD/src/wlan_hdd_wowl.c | 225 +- CORE/MAC/inc/aniGlobal.h | 46 +- CORE/MAC/inc/aniSystemDefs.h | 28 +- CORE/MAC/inc/macTrace.h | 11 + CORE/MAC/inc/qwlan_version.h | 4 +- CORE/MAC/inc/sirApi.h | 1101 ++- CORE/MAC/inc/sirMacProtDef.h | 138 +- CORE/MAC/inc/wniApi.h | 25 +- CORE/MAC/inc/wniCfgAp.h | 269 +- CORE/MAC/inc/wniCfgSta.h | 220 +- CORE/MAC/src/cfg/cfgApi.c | 64 +- CORE/MAC/src/cfg/cfgParamName.c | 16 + CORE/MAC/src/cfg/cfgProcMsg.c | 6 +- CORE/MAC/src/cfg/cfgSendMsg.c | 5 +- CORE/MAC/src/cfg/cfgUtil/cfg.txt | 164 +- CORE/MAC/src/dph/dphHashTable.c | 5 +- CORE/MAC/src/include/dot11f.h | 210 +- CORE/MAC/src/include/parserApi.h | 48 +- CORE/MAC/src/include/sirParams.h | 94 +- CORE/MAC/src/include/utilsApi.h | 2 + CORE/MAC/src/pe/include/limAdmitControl.h | 21 +- CORE/MAC/src/pe/include/limApi.h | 2 - CORE/MAC/src/pe/include/limFT.h | 1 - CORE/MAC/src/pe/include/limGlobal.h | 9 +- CORE/MAC/src/pe/include/limSession.h | 13 +- CORE/MAC/src/pe/include/rrmApi.h | 5 +- CORE/MAC/src/pe/include/rrmGlobal.h | 10 +- CORE/MAC/src/pe/lim/limAdmitControl.c | 46 +- CORE/MAC/src/pe/lim/limApi.c | 286 +- CORE/MAC/src/pe/lim/limAssocUtils.c | 796 +- CORE/MAC/src/pe/lim/limAssocUtils.h | 21 +- CORE/MAC/src/pe/lim/limFT.c | 415 +- CORE/MAC/src/pe/lim/limIbssPeerMgmt.c | 416 +- CORE/MAC/src/pe/lim/limIbssPeerMgmt.h | 5 +- CORE/MAC/src/pe/lim/limLinkMonitoringAlgo.c | 31 +- CORE/MAC/src/pe/lim/limLogDump.c | 468 +- CORE/MAC/src/pe/lim/limP2P.c | 149 +- CORE/MAC/src/pe/lim/limRMC.c | 1893 +++++ CORE/MAC/src/pe/lim/limRMC.h | 113 + CORE/SME/inc/sme_Trace.h | 110 + CORE/SME/src/sme_common/sme_Trace.c | 179 + CORE/VOSS/inc/wlan_nv_parser.h | 35 + CORE/VOSS/inc/wlan_nv_parser_internal.h | 93 + CORE/VOSS/inc/wlan_nv_stream.h | 56 + CORE/VOSS/inc/wlan_nv_template_api.h | 48 + CORE/VOSS/inc/wlan_nv_template_builtin.h | 176 + CORE/VOSS/inc/wlan_nv_template_internal.h | 331 + CORE/VOSS/inc/wlan_nv_types.h | 48 + CORE/VOSS/src/wlan_nv_parser.c | 2145 ++++++ CORE/VOSS/src/wlan_nv_stream_read.c | 117 + CORE/VOSS/src/wlan_nv_template_builtin.c | 831 +++ Kbuild | 154 +- Kconfig | 52 + Makefile | 67 +- riva/inc/halCompiler.h | 158 + riva/inc/halLegacyPalTypes.h | 41 + riva/inc/pttFrameGen.h | 71 + riva/inc/pttModule.h | 160 + riva/inc/pttMsgApi.h | 948 +++ riva/inc/wlan_hal_cfg.h | 917 +++ riva/inc/wlan_hal_msg.h | 7062 ++++++++++++++++++ riva/inc/wlan_nv.h | 792 ++ riva/inc/wlan_phy.h | 898 +++ riva/inc/wlan_qct_dev_defs.h | 360 + riva/inc/wlan_status_code.h | 160 + wcnss/inc/pttModule.h | 23 +- wcnss/inc/pttMsgApi.h | 21 + wcnss/inc/wlan_hal_cfg.h | 236 +- wcnss/inc/wlan_hal_msg.h | 1297 +++- wcnss/inc/wlan_nv.h | 78 +- wcnss/inc/wlan_phy.h | 5 + wcnss/inc/wlan_qct_dev_defs.h | 7 +- wcnss/inc/wlan_status_code.h | 9 + wcnss/riva/inc/halCompiler.h | 179 + wcnss/riva/inc/halLegacyPalTypes.h | 62 + wcnss/riva/inc/pttFrameGen.h | 71 + wcnss/riva/inc/pttModule.h | 160 + wcnss/riva/inc/pttMsgApi.h | 969 +++ wcnss/riva/inc/wlan_hal_cfg.h | 938 +++ wcnss/riva/inc/wlan_hal_msg.h | 7083 ++++++++++++++++++ wcnss/riva/inc/wlan_nv.h | 813 +++ wcnss/riva/inc/wlan_phy.h | 919 +++ wcnss/riva/inc/wlan_qct_dev_defs.h | 381 + wcnss/riva/inc/wlan_status_code.h | 181 + 127 files changed, 59885 insertions(+), 5448 deletions(-) create mode 100644 CORE/HDD/inc/wlan_hdd_debugfs.h create mode 100644 CORE/HDD/src/test.c create mode 100644 CORE/HDD/src/wlan_hdd_debugfs.c create mode 100644 CORE/MAC/src/pe/lim/limRMC.c create mode 100644 CORE/MAC/src/pe/lim/limRMC.h create mode 100644 CORE/SME/inc/sme_Trace.h create mode 100644 CORE/SME/src/sme_common/sme_Trace.c create mode 100644 CORE/VOSS/inc/wlan_nv_parser.h create mode 100644 CORE/VOSS/inc/wlan_nv_parser_internal.h create mode 100644 CORE/VOSS/inc/wlan_nv_stream.h create mode 100644 CORE/VOSS/inc/wlan_nv_template_api.h create mode 100644 CORE/VOSS/inc/wlan_nv_template_builtin.h create mode 100644 CORE/VOSS/inc/wlan_nv_template_internal.h create mode 100644 CORE/VOSS/inc/wlan_nv_types.h create mode 100644 CORE/VOSS/src/wlan_nv_parser.c create mode 100644 CORE/VOSS/src/wlan_nv_stream_read.c create mode 100644 CORE/VOSS/src/wlan_nv_template_builtin.c mode change 100755 => 100644 Kbuild create mode 100644 Kconfig create mode 100644 riva/inc/halCompiler.h create mode 100644 riva/inc/halLegacyPalTypes.h create mode 100644 riva/inc/pttFrameGen.h create mode 100644 riva/inc/pttModule.h create mode 100644 riva/inc/pttMsgApi.h create mode 100644 riva/inc/wlan_hal_cfg.h create mode 100644 riva/inc/wlan_hal_msg.h create mode 100644 riva/inc/wlan_nv.h create mode 100644 riva/inc/wlan_phy.h create mode 100644 riva/inc/wlan_qct_dev_defs.h create mode 100644 riva/inc/wlan_status_code.h create mode 100644 wcnss/riva/inc/halCompiler.h create mode 100644 wcnss/riva/inc/halLegacyPalTypes.h create mode 100644 wcnss/riva/inc/pttFrameGen.h create mode 100644 wcnss/riva/inc/pttModule.h create mode 100644 wcnss/riva/inc/pttMsgApi.h create mode 100644 wcnss/riva/inc/wlan_hal_cfg.h create mode 100644 wcnss/riva/inc/wlan_hal_msg.h create mode 100644 wcnss/riva/inc/wlan_nv.h create mode 100644 wcnss/riva/inc/wlan_phy.h create mode 100644 wcnss/riva/inc/wlan_qct_dev_defs.h create mode 100644 wcnss/riva/inc/wlan_status_code.h diff --git a/Android.mk b/Android.mk index ef9927de11c7..49998e72862a 100644 --- a/Android.mk +++ b/Android.mk @@ -5,9 +5,18 @@ WLAN_CHIPSET := # Build/Package options for 8084 target ifeq ($(call is-board-platform,apq8084),true) -WLAN_CHIPSET := qca_cld -WLAN_SELECT := CONFIG_QCA_CLD_WLAN=m -WLAN_ISOC_SELECT := WLAN_ISOC=n + WLAN_CHIPSET := qca_cld + WLAN_SELECT := CONFIG_QCA_CLD_WLAN=m + WLAN_ISOC_SELECT := CONFIG_QCA_WIFI_ISOC=0 + WLAN_ISOC_SELECT += CONFIG_QCA_WIFI_2_0=1 +endif + +# Build/Package options for 8974, 8226, 8610 targets +ifeq ($(call is-board-platform-in-list,msm8974 msm8226 msm8610),true) + WLAN_CHIPSET := qca_cld + WLAN_SELECT := CONFIG_QCA_CLD_WLAN=m + WLAN_ISOC_SELECT := CONFIG_QCA_WIFI_ISOC=1 + WLAN_ISOC_SELECT += CONFIG_QCA_WIFI_2_0=0 endif # Build/Package only in case of supported target @@ -31,12 +40,17 @@ else WLAN_BLD_DIR := vendor/qcom/opensource/wlan endif +# DLKM_DIR was moved for JELLY_BEAN (PLATFORM_SDK 16) ifeq ($(call is-platform-sdk-version-at-least,16),true) DLKM_DIR := $(TOP)/device/qcom/common/dlkm else DLKM_DIR := build/dlkm endif + +# Build wlan.ko as either qca_cld_wlan.ko +########################################################### + # This is set once per LOCAL_PATH, not per (kernel) module KBUILD_OPTIONS := WLAN_ROOT=../$(WLAN_BLD_DIR)/qcacld-2.0 # We are actually building wlan.ko here, as per the @@ -49,30 +63,14 @@ KBUILD_OPTIONS += $(WLAN_SELECT) KBUILD_OPTIONS += $(WLAN_ISOC_SELECT) include $(CLEAR_VARS) -LOCAL_MODULE := $(WLAN_CHIPSET)_wlan.ko +LOCAL_MODULE := proprietary_$(WLAN_CHIPSET)_wlan.ko LOCAL_MODULE_KBUILD_NAME := wlan.ko -LOCAL_MODULE_TAGS := debug +LOCAL_MODULE_TAGS := optional LOCAL_MODULE_DEBUG_ENABLE := true LOCAL_MODULE_PATH := $(TARGET_OUT)/lib/modules/$(WLAN_CHIPSET) include $(DLKM_DIR)/AndroidKernelModule.mk ########################################################### -# Create Symbolic link -$(shell mkdir -p $(TARGET_OUT)/lib/modules; \ - ln -sf /system/lib/modules/$(WLAN_CHIPSET)/$(WLAN_CHIPSET)_wlan.ko \ - $(TARGET_OUT)/lib/modules/wlan.ko) - -# Copy config ini files to target -ifeq ($(WLAN_PROPRIETARY),1) -$(shell mkdir -p $(TARGET_OUT)/etc/firmware/wlan/$(WLAN_CHIPSET)) -$(shell rm -f $(TARGET_OUT)/etc/firmware/wlan/$(WLAN_SHIPSET)/WCNSS_qcom_cfg.ini) -$(shell rm -f $(TARGET_OUT)/etc/firmware/wlan/$(WLAN_SHIPSET)/WCNSS_cfg.dat) -$(shell rm -f $(TARGET_OUT)/etc/firmware/wlan/$(WLAN_SHIPSET)/WCNSS_qcom_wlan_nv.bin) -$(shell cp $(LOCAL_PATH)/firmware_bin/WCNSS_qcom_cfg.ini $(TARGET_OUT)/etc/firmware/wlan/$(WLAN_CHIPSET)) -$(shell cp $(LOCAL_PATH)/firmware_bin/WCNSS_cfg.dat $(TARGET_OUT)/etc/firmware/wlan/$(WLAN_CHIPSET)) -$(shell cp $(LOCAL_PATH)/firmware_bin/WCNSS_qcom_wlan_nv.bin $(TARGET_OUT)/etc/firmware/wlan/$(WLAN_CHIPSET)) -endif - endif # DLKM check endif # supported target check diff --git a/CORE/BAP/src/bapApiLinkCntl.c b/CORE/BAP/src/bapApiLinkCntl.c index adae61c0a408..c2bcd0cd8a16 100644 --- a/CORE/BAP/src/bapApiLinkCntl.c +++ b/CORE/BAP/src/bapApiLinkCntl.c @@ -1558,7 +1558,7 @@ WLAN_BAPLogicalLinkDisconnect /* Derive logical link index from handle */ log_link_index = ((pBapHCILogLinkDisconnect->log_link_handle) >> 8); - if( log_link_index > WLANBAP_MAX_LOG_LINKS ) + if( log_link_index >= WLANBAP_MAX_LOG_LINKS ) { VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_ERROR, "Critical error: Invalid input parameter on %s", diff --git a/CORE/BAP/src/bapApiStatus.c b/CORE/BAP/src/bapApiStatus.c index 6f0dca3cc252..ff5b1184729b 100644 --- a/CORE/BAP/src/bapApiStatus.c +++ b/CORE/BAP/src/bapApiStatus.c @@ -377,7 +377,7 @@ WLAN_BAPReadRSSI { /* Get the RSSI value for this station (physical link) */ vosStatus = WLANTL_GetRssi(btampContext->pvosGCtx, btampContext->ucSTAId, - &pBapHCIEvent->u.btampCommandCompleteEvent.cc_event.Read_RSSI.rssi); + &pBapHCIEvent->u.btampCommandCompleteEvent.cc_event.Read_RSSI.rssi,NULL); if (VOS_STATUS_SUCCESS == vosStatus) { diff --git a/CORE/BAP/src/bapRsnTxRx.c b/CORE/BAP/src/bapRsnTxRx.c index 24dbfa1454c4..33f3eb4d9c2b 100644 --- a/CORE/BAP/src/bapRsnTxRx.c +++ b/CORE/BAP/src/bapRsnTxRx.c @@ -209,7 +209,7 @@ static VOS_STATUS bapRsnTxFrame( v_PVOID_t pvosGCtx, vos_pkt_t *pPacket ) VOS_STATUS bapRsnSendEapolFrame( v_PVOID_t pvosGCtx, tAniPacket *pAniPkt ) { VOS_STATUS status; - vos_pkt_t *pPacket; + vos_pkt_t *pPacket = NULL; v_U8_t *pData, *pSrc; int pktLen = aniAsfPacketGetBytes( pAniPkt, &pSrc ); @@ -218,7 +218,7 @@ VOS_STATUS bapRsnSendEapolFrame( v_PVOID_t pvosGCtx, tAniPacket *pAniPkt ) return VOS_STATUS_E_EMPTY; } status = bapRsnAcquirePacket( &pPacket, &pData, pktLen ); - if( VOS_IS_STATUS_SUCCESS( status ) ) + if( VOS_IS_STATUS_SUCCESS( status ) && ( NULL != pPacket )) { vos_mem_copy( pData, pSrc, pktLen ); //Send the packet, need to check whether we have an outstanding packet first. diff --git a/CORE/DXE/src/wlan_qct_dxe.c b/CORE/DXE/src/wlan_qct_dxe.c index 4590d9347091..78f05eb9473b 100644 --- a/CORE/DXE/src/wlan_qct_dxe.c +++ b/CORE/DXE/src/wlan_qct_dxe.c @@ -154,7 +154,8 @@ static wpt_status dxeNotifySmsm static wpt_status dxeChannelMonitor ( char *monitorDescription, - WLANDXE_ChannelCBType *channelEntry + WLANDXE_ChannelCBType *channelEntry, + wpt_log_data_stall_channel_type *channelLog ) { wpt_status status = eWLAN_PAL_STATUS_SUCCESS; @@ -173,24 +174,33 @@ static wpt_status dxeChannelMonitor return eWLAN_PAL_STATUS_E_INVAL; } - HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL, - "=== %s Channel Number %d, Channel Type %s", - monitorDescription, channelEntry->assignedDMAChannel, channelType[channelEntry->channelType]); - HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL, - "numDesc %d, numFreeDesc %d, numResvDesc %d", - channelEntry->numDesc, channelEntry->numFreeDesc, channelEntry->numRsvdDesc); - HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL, - "headCB 0x%x, next 0x%x, DESC 0x%x", - channelEntry->headCtrlBlk, channelEntry->headCtrlBlk->nextCtrlBlk, channelEntry->headCtrlBlk->linkedDescPhyAddr); - HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL, - "tailCB 0x%x, next 0x%x, DESC 0x%x", - channelEntry->tailCtrlBlk, channelEntry->tailCtrlBlk->nextCtrlBlk, channelEntry->tailCtrlBlk->linkedDescPhyAddr); - HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL, - "headCB Order %d, tailCB Order %d", - channelEntry->headCtrlBlk->ctrlBlkOrder, channelEntry->tailCtrlBlk->ctrlBlkOrder); - HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL, - "numFragmentCurrentChain %d, numTotalFrame %d ===", - channelEntry->numFragmentCurrentChain, channelEntry->numTotalFrame); + wpalTrace(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL, + "%11s : HCBO %d, HCBDP 0x%x, HCBDC 0x%x,", + channelType[channelEntry->channelType], + channelEntry->headCtrlBlk->ctrlBlkOrder, + channelEntry->headCtrlBlk->linkedDescPhyAddr, + channelEntry->headCtrlBlk->linkedDesc->descCtrl.ctrl); + wpalTrace(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL, + "%11s : TCBO %d, TCBDP 0x%x, TCBDC 0x%x", + channelType[channelEntry->channelType], + channelEntry->tailCtrlBlk->ctrlBlkOrder, + channelEntry->tailCtrlBlk->linkedDescPhyAddr, + channelEntry->tailCtrlBlk->linkedDesc->descCtrl.ctrl); + wpalTrace(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL, + "%11s : FDC %d, RDC %d, TFC %d", + channelType[channelEntry->channelType], + channelEntry->numFreeDesc, + channelEntry->numRsvdDesc, + channelEntry->numTotalFrame); + + if(channelLog) + { + channelLog->numDesc = channelEntry->numDesc; + channelLog->numFreeDesc = channelEntry->numFreeDesc; + channelLog->numRsvdDesc = channelEntry->numRsvdDesc; + channelLog->headDescOrder = channelEntry->headCtrlBlk->ctrlBlkOrder; + channelLog->tailDescOrder = channelEntry->tailCtrlBlk->ctrlBlkOrder; + } return status; } @@ -317,11 +327,19 @@ wpt_status dxeDescriptorDump wpt_status dxeChannelRegisterDump ( WLANDXE_ChannelCBType *channelEntry, - char *dumpTarget + char *dumpTarget, + wpt_log_data_stall_channel_type *channelLog ) { - wpt_status status = eWLAN_PAL_STATUS_SUCCESS; - wpt_uint32 regValue = 0; + wpt_status status = eWLAN_PAL_STATUS_SUCCESS; + wpt_uint32 chStatusReg, chControlReg, chDescReg, chLDescReg; + + /* Whatever RIVA power condition try to wakeup RIVA through SMSM + * This will not simply wakeup RIVA + * Just incase TX not wanted stuck, Trigger TX again */ + dxeNotifySmsm(eWLAN_PAL_FALSE, eWLAN_PAL_TRUE); + dxeNotifySmsm(eWLAN_PAL_TRUE, eWLAN_PAL_FALSE); + wpalSleep(10); if(channelEntry->channelType > WDTS_CHANNEL_RX_HIGH_PRI) { @@ -330,39 +348,21 @@ wpt_status dxeChannelRegisterDump return eWLAN_PAL_STATUS_E_INVAL; } - HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL, - "%s Channel register dump for %s, base address 0x%x", - channelType[channelEntry->channelType], - dumpTarget, - channelEntry->channelRegister.chDXEBaseAddr); - regValue = 0; - wpalReadRegister(channelEntry->channelRegister.chDXECtrlRegAddr, ®Value); - HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL, - "Control Register 0x%x", regValue); + wpalReadRegister(channelEntry->channelRegister.chDXEDesclRegAddr, &chDescReg); + wpalReadRegister(channelEntry->channelRegister.chDXELstDesclRegAddr, &chLDescReg); + wpalReadRegister(channelEntry->channelRegister.chDXECtrlRegAddr, &chControlReg); + wpalReadRegister(channelEntry->channelRegister.chDXEStatusRegAddr, &chStatusReg); - regValue = 0; - wpalReadRegister(channelEntry->channelRegister.chDXEStatusRegAddr, ®Value); - HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL, - "Status Register 0x%x", regValue); - regValue = 0; + wpalTrace(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL, + "%11s : CCR 0x%x, CSR 0x%x, CDR 0x%x, CLDR 0x%x", + channelType[channelEntry->channelType], + chControlReg, chStatusReg, chDescReg, chLDescReg); - wpalReadRegister(channelEntry->channelRegister.chDXESadrlRegAddr, ®Value); - HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL, - "Source Address Register 0x%x", regValue); - regValue = 0; - - wpalReadRegister(channelEntry->channelRegister.chDXEDadrlRegAddr, ®Value); - HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL, - "Destination Address Register 0x%x", regValue); - regValue = 0; - - wpalReadRegister(channelEntry->channelRegister.chDXELstDesclRegAddr, ®Value); - HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL, - "Last Descriptor Address Register 0x%x", regValue); - - wpalReadRegister(channelEntry->channelRegister.chDXEDesclRegAddr, ®Value); - HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL, - "Next Descriptor Address Register 0x%x", regValue); + if(channelLog) + { + channelLog->ctrlRegVal = chControlReg; + channelLog->statRegVal = chStatusReg; + } return status; } @@ -384,17 +384,22 @@ wpt_status dxeChannelRegisterDump void dxeChannelAllDescDump ( WLANDXE_ChannelCBType *channelEntry, - WDTS_ChannelType channel + WDTS_ChannelType channel, + wpt_log_data_stall_channel_type *channelLog ) { wpt_uint32 channelLoop; WLANDXE_DescCtrlBlkType *targetCtrlBlk; wpt_uint32 previousCtrlValue = 0; + wpt_uint32 previousCtrlValid = 0; + wpt_uint32 currentCtrlValid = 0; + wpt_uint32 valDescCount = 0; + wpt_uint32 invalDescCount = 0; targetCtrlBlk = channelEntry->headCtrlBlk; HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL, - "%s %d descriptor chains, head desc ctrl 0x%x", + "%11s : %d descriptor chains, head desc ctrl 0x%x", channelType[channelEntry->channelType], channelEntry->numDesc, targetCtrlBlk->linkedDesc->descCtrl.ctrl); @@ -411,28 +416,91 @@ void dxeChannelAllDescDump "%5d : 0x%x", targetCtrlBlk->ctrlBlkOrder, targetCtrlBlk->linkedDesc->descCtrl.ctrl); } + if(targetCtrlBlk->linkedDesc->descCtrl.ctrl & WLANDXE_DESC_CTRL_VALID) + { + valDescCount++; + } + else + { + invalDescCount++; + } previousCtrlValue = targetCtrlBlk->linkedDesc->descCtrl.ctrl; targetCtrlBlk = (WLANDXE_DescCtrlBlkType *)targetCtrlBlk->nextCtrlBlk; } } else { + /* Head Descriptor is valid or not */ + previousCtrlValid = targetCtrlBlk->linkedDesc->descCtrl.ctrl & WLANDXE_DESC_CTRL_VALID; + targetCtrlBlk = (WLANDXE_DescCtrlBlkType *)targetCtrlBlk->nextCtrlBlk; for(channelLoop = 0; channelLoop < channelEntry->numDesc; channelLoop++) { - if(targetCtrlBlk->linkedDesc->descCtrl.ctrl & WLANDXE_DESC_CTRL_VALID) + currentCtrlValid = targetCtrlBlk->linkedDesc->descCtrl.ctrl & WLANDXE_DESC_CTRL_VALID; + if(currentCtrlValid) + { + valDescCount++; + } + else + { + invalDescCount++; + } + if(currentCtrlValid != previousCtrlValid) { HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL, "%5d : 0x%x", targetCtrlBlk->ctrlBlkOrder, targetCtrlBlk->linkedDesc->descCtrl.ctrl); } + previousCtrlValid = currentCtrlValid; targetCtrlBlk = (WLANDXE_DescCtrlBlkType *)targetCtrlBlk->nextCtrlBlk; } } + + if(channelLog) + { + channelLog->numValDesc = valDescCount; + channelLog->numInvalDesc = invalDescCount; + } + return; } /*========================================================================== - @ Function Name + @ Function Name + dxeErrChannelDebug + + @ Description + Dump channel information for which Error interrupt has occured + + @ Parameters + WLANDXE_ChannelCBType *channelCb + + @ Return + NONE + +===========================================================================*/ +void dxeErrChannelDebug +( + WLANDXE_ChannelCBType *channelCb +) +{ + wpt_log_data_stall_channel_type channelLog; + + dxeChannelMonitor("INT_ERR", channelCb, &channelLog); + dxeDescriptorDump(channelCb, channelCb->headCtrlBlk->linkedDesc, 0); + dxeChannelRegisterDump(channelCb, "INT_ERR", &channelLog); + dxeChannelAllDescDump(channelCb, channelCb->channelType, &channelLog); + wpalMemoryCopy(channelLog.channelName, + "INT_ERR", + WPT_TRPT_CHANNEL_NAME); + wpalPacketStallUpdateInfo(NULL, NULL, &channelLog, channelCb->channelType); +#ifdef FEATURE_WLAN_DIAG_SUPPORT + wpalPacketStallDumpLog(); +#endif /* FEATURE_WLAN_DIAG_SUPPORT */ + + wpalFwDumpReq(17, 0, 0, 0, 0); +} +/*========================================================================== + @ Function Name dxeTxThreadChannelDebugHandler @ Description @@ -451,6 +519,7 @@ void dxeTxThreadChannelDebugHandler ) { wpt_uint8 channelLoop; + wpt_log_data_stall_channel_type channelLog; HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW, "%s Enter", __func__); @@ -458,20 +527,31 @@ void dxeTxThreadChannelDebugHandler /* Whatever RIVA power condition try to wakeup RIVA through SMSM * This will not simply wakeup RIVA * Just incase TX not wanted stuck, Trigger TX again */ - dxeNotifySmsm(eWLAN_PAL_FALSE, eWLAN_PAL_FALSE); for(channelLoop = 0; channelLoop < WDTS_CHANNEL_RX_LOW_PRI; channelLoop++) { dxeChannelMonitor("******** Get Descriptor Snapshot ", - &tempDxeCtrlBlk->dxeChannel[channelLoop]); - dxeDescriptorDump(&tempDxeCtrlBlk->dxeChannel[channelLoop], - tempDxeCtrlBlk->dxeChannel[channelLoop].tailCtrlBlk->linkedDesc, - 0); + &tempDxeCtrlBlk->dxeChannel[channelLoop], + &channelLog); dxeChannelRegisterDump(&tempDxeCtrlBlk->dxeChannel[channelLoop], - "Abnormal successive empty interrupt"); - dxeChannelAllDescDump(&tempDxeCtrlBlk->dxeChannel[channelLoop], channelLoop); + "Abnormal successive empty interrupt", + &channelLog); + dxeChannelAllDescDump(&tempDxeCtrlBlk->dxeChannel[channelLoop], + channelLoop, + &channelLog); + + wpalMemoryCopy(channelLog.channelName, + channelType[channelLoop], + WPT_TRPT_CHANNEL_NAME); + wpalPacketStallUpdateInfo(NULL, NULL, &channelLog, channelLoop); } + HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL, + "================== DXE Dump End ======================"); wpalMemoryFree(msgPtr); + +#ifdef FEATURE_WLAN_DIAG_SUPPORT + wpalPacketStallDumpLog(); +#endif /* FEATURE_WLAN_DIAG_SUPPORT */ HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW, "%s Exit", __func__); return; @@ -498,6 +578,7 @@ void dxeRxThreadChannelDebugHandler { wpt_status status = eWLAN_PAL_STATUS_SUCCESS; wpt_uint8 channelLoop; + wpt_log_data_stall_channel_type channelLog; HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW, "%s Enter", __func__); @@ -505,17 +586,22 @@ void dxeRxThreadChannelDebugHandler /* Whatever RIVA power condition try to wakeup RIVA through SMSM * This will not simply wakeup RIVA * Just incase TX not wanted stuck, Trigger TX again */ - dxeNotifySmsm(eWLAN_PAL_FALSE, eWLAN_PAL_FALSE); for(channelLoop = WDTS_CHANNEL_RX_LOW_PRI; channelLoop < WDTS_CHANNEL_MAX; channelLoop++) { dxeChannelMonitor("******** Get Descriptor Snapshot ", - &tempDxeCtrlBlk->dxeChannel[channelLoop]); - dxeDescriptorDump(&tempDxeCtrlBlk->dxeChannel[channelLoop], - tempDxeCtrlBlk->dxeChannel[channelLoop].headCtrlBlk->linkedDesc, - 0); + &tempDxeCtrlBlk->dxeChannel[channelLoop], + &channelLog); dxeChannelRegisterDump(&tempDxeCtrlBlk->dxeChannel[channelLoop], - "Abnormal successive empty interrupt"); - dxeChannelAllDescDump(&tempDxeCtrlBlk->dxeChannel[channelLoop], channelLoop); + "Abnormal successive empty interrupt", + &channelLog); + dxeChannelAllDescDump(&tempDxeCtrlBlk->dxeChannel[channelLoop], + channelLoop, &channelLog); + + wpalMemoryCopy(channelLog.channelName, + channelType[channelLoop], + WPT_TRPT_CHANNEL_NAME); + wpalPacketStallUpdateInfo(NULL, NULL, &channelLog, channelLoop); + } /* Now serialise the message through Tx thread also to make sure @@ -528,7 +614,7 @@ void dxeRxThreadChannelDebugHandler { HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR, "Tx thread state dump req serialize fail status=%d", - status, 0, 0); + status); } HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW, @@ -584,7 +670,7 @@ void dxeRXHealthMonitor HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_WARN, "Scheduled RX, num free BD/PDU %d, loop Count %d", - regValue, hwWakeLoop, 0); + regValue, hwWakeLoop); for(chLoop = WDTS_CHANNEL_RX_LOW_PRI; chLoop < WDTS_CHANNEL_MAX; chLoop++) { @@ -616,7 +702,7 @@ void dxeRXHealthMonitor testCHCtrlBlk->tailCtrlBlk->ctrlBlkOrder, testCHCtrlBlk->tailCtrlBlk->linkedDescPhyAddr, testCHCtrlBlk->tailCtrlBlk->linkedDesc->descCtrl.ctrl); HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_WARN, - "%11s : RX CH EN Descriptor Async, resync it", channelType[chLoop], 0, 0); + "%11s : RX CH EN Descriptor Async, resync it", channelType[chLoop]); wpalWriteRegister(testCHCtrlBlk->channelRegister.chDXELstDesclRegAddr, testCHCtrlBlk->headCtrlBlk->linkedDescPhyAddr); } @@ -633,7 +719,7 @@ void dxeRXHealthMonitor testCHCtrlBlk->tailCtrlBlk->ctrlBlkOrder, testCHCtrlBlk->tailCtrlBlk->linkedDescPhyAddr, testCHCtrlBlk->tailCtrlBlk->linkedDesc->descCtrl.ctrl); HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_WARN, - "%11s : RX CH DIS Descriptor Async, resync it", channelType[chLoop], 0, 0); + "%11s : RX CH DIS Descriptor Async, resync it", channelType[chLoop]); wpalWriteRegister(testCHCtrlBlk->channelRegister.chDXEDesclRegAddr, testCHCtrlBlk->headCtrlBlk->linkedDescPhyAddr); } @@ -644,7 +730,7 @@ void dxeRXHealthMonitor { HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_WARN, "%11s : Still Low Resource, kick DXE TX and restart timer", - channelType[channelCtrlBlk->channelType], 0, 0); + channelType[channelCtrlBlk->channelType]); /* Still Low Resource, Kick DXE again and start timer again */ wpalTimerStart(&channelCtrlBlk->healthMonitorTimer, T_WLANDXE_PERIODIC_HEALTH_M_TIME); @@ -653,7 +739,7 @@ void dxeRXHealthMonitor { HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_WARN, "%11s : Out from Low resource condition, do nothing", - channelType[channelCtrlBlk->channelType], 0, 0); + channelType[channelCtrlBlk->channelType]); /* Recovered from low resource condition * Not need to do anything */ } @@ -708,14 +794,14 @@ void dxeTXHealthMonitor { HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_WARN, "num free BD/PDU %d, loop Count %d", - regValue, hwWakeLoop, 0); + regValue, hwWakeLoop); break; } } HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_WARN, "Scheduled TX, num free BD/PDU %d, loop Count %d", - regValue, hwWakeLoop, 0); + regValue, hwWakeLoop); for(chLoop = 0; chLoop < WDTS_CHANNEL_RX_LOW_PRI; chLoop++) { @@ -747,7 +833,7 @@ void dxeTXHealthMonitor testCHCtrlBlk->tailCtrlBlk->ctrlBlkOrder, testCHCtrlBlk->tailCtrlBlk->linkedDescPhyAddr, testCHCtrlBlk->tailCtrlBlk->linkedDesc->descCtrl.ctrl); HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_WARN, - "%11s : TX CH EN Descriptor Async, resync it", channelType[chLoop], 0, 0); + "%11s : TX CH EN Descriptor Async, resync it", channelType[chLoop]); wpalWriteRegister(testCHCtrlBlk->channelRegister.chDXELstDesclRegAddr, testCHCtrlBlk->tailCtrlBlk->linkedDescPhyAddr); } @@ -764,7 +850,7 @@ void dxeTXHealthMonitor testCHCtrlBlk->tailCtrlBlk->ctrlBlkOrder, testCHCtrlBlk->tailCtrlBlk->linkedDescPhyAddr, testCHCtrlBlk->tailCtrlBlk->linkedDesc->descCtrl.ctrl); HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_WARN, - "%11s : TX CH DIS Descriptor Async, resync it", channelType[chLoop], 0, 0); + "%11s : TX CH DIS Descriptor Async, resync it", channelType[chLoop]); wpalWriteRegister(testCHCtrlBlk->channelRegister.chDXEDesclRegAddr, testCHCtrlBlk->tailCtrlBlk->linkedDescPhyAddr); } @@ -778,8 +864,8 @@ void dxeTXHealthMonitor if (eWLAN_PAL_STATUS_SUCCESS != status) { HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR, - "TX Low resource Kick DXE MSG Serialize fail", - status, 0, 0); + "TX Low resource Kick DXE MSG Serialize fail status=%d", + status); } return; @@ -819,7 +905,7 @@ void dxeHealthMonitorTimeout channelCtrlBlk = (WLANDXE_ChannelCBType *)channelCtxt; HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO, "%11s : Health Monitor timer expired", - channelType[channelCtrlBlk->channelType], 0, 0); + channelType[channelCtrlBlk->channelType]); channelCtrlBlk->healthMonitorMsg->callback = dxeTXHealthMonitor; status = wpalPostTxMsg(WDI_GET_PAL_CTX(), @@ -827,8 +913,8 @@ void dxeHealthMonitorTimeout if (eWLAN_PAL_STATUS_SUCCESS != status) { HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR, - "TX Low resource Kick DXE MSG Serialize fail", - status, 0, 0); + "TX Low resource Kick DXE MSG Serialize fail status=%d", + status); } return; @@ -1019,7 +1105,7 @@ static wpt_status dxeDescAllocAndLink // descriptors were allocated in a chunk -- use the current one memset((wpt_uint8 *)currentDesc, 0, sizeof(WLANDXE_DescType)); HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW, - "Allocated Descriptor VA 0x%x, PA 0x%x", currentDesc, physAddress); + "Allocated Descriptor VA %p, PA %p", currentDesc, physAddress); #else if(WDTS_CHANNEL_H2H_TEST_RX != channelEntry->channelType) { @@ -1040,14 +1126,14 @@ static wpt_status dxeDescAllocAndLink currentDesc = (WLANDXE_DescType *)wpalAcpuDdrDxeDescMemoryAllocate(&physAddress); memset((wpt_uint8 *)currentDesc, 0, sizeof(WLANDXE_DescType)); HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW, - "Allocated Descriptor VA 0x%x, PA 0x%x", currentDesc, physAddress); + "Allocated Descriptor VA %p, PA %p", currentDesc, physAddress); #else if(WDTS_CHANNEL_H2H_TEST_RX != channelEntry->channelType) { currentDesc = (WLANDXE_DescType *)wpalAcpuDdrDxeDescMemoryAllocate(&physAddress); memset((wpt_uint8 *)currentDesc, 0, sizeof(WLANDXE_DescType)); HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW, - "Allocated Descriptor VA 0x%x, PA 0x%x", currentDesc, physAddress); + "Allocated Descriptor VA %p, PA %p", currentDesc, physAddress); } else { @@ -1065,24 +1151,6 @@ static wpt_status dxeDescAllocAndLink return eWLAN_PAL_STATUS_E_FAULT; } - if((WDTS_CHANNEL_TX_LOW_PRI == channelEntry->channelType) || - (WDTS_CHANNEL_TX_HIGH_PRI == channelEntry->channelType)) - { - currentDesc->descCtrl.ctrl = channelEntry->extraConfig.cw_ctrl_write; - currentDesc->dxedesc.dxe_short_desc.dstMemAddrL = channelEntry->extraConfig.refWQ_swapped; - } - else if((WDTS_CHANNEL_RX_LOW_PRI == channelEntry->channelType) || - (WDTS_CHANNEL_RX_HIGH_PRI == channelEntry->channelType)) - { - currentDesc->descCtrl.ctrl = channelEntry->extraConfig.cw_ctrl_read; - currentDesc->dxedesc.dxe_short_desc.srcMemAddrL = channelEntry->extraConfig.refWQ_swapped; - } - else - { - /* Just in case. H2H Test RX channel, do nothing - * By Definition this must not happen */ - } - currentCtrlBlk->linkedDesc = currentDesc; currentCtrlBlk->linkedDescPhyAddr = (unsigned int)physAddress; /* First descriptor, next none @@ -1137,6 +1205,24 @@ static wpt_status dxeDescAllocAndLink --channelEntry->numFreeDesc; } + if((WDTS_CHANNEL_TX_LOW_PRI == channelEntry->channelType) || + (WDTS_CHANNEL_TX_HIGH_PRI == channelEntry->channelType)) + { + currentDesc->descCtrl.ctrl = channelEntry->extraConfig.cw_ctrl_write; + currentDesc->dxedesc.dxe_short_desc.dstMemAddrL = channelEntry->extraConfig.refWQ_swapped; + } + else if((WDTS_CHANNEL_RX_LOW_PRI == channelEntry->channelType) || + (WDTS_CHANNEL_RX_HIGH_PRI == channelEntry->channelType)) + { + currentDesc->descCtrl.ctrl = channelEntry->extraConfig.cw_ctrl_read; + currentDesc->dxedesc.dxe_short_desc.srcMemAddrL = channelEntry->extraConfig.refWQ_swapped; + } + else + { + /* Just in case. H2H Test RX channel, do nothing + * By Definition this must not happen */ + } + currentCtrlBlk = currentCtrlBlk->nextCtrlBlk; prevDesc = currentDesc; @@ -1756,6 +1842,35 @@ static wpt_status dxeChannelCleanInt return status; } +/*========================================================================== + @ Function Name + dxeRXResourceAvailableTimerExpHandler + + @ Description + During pre-set timeperiod, if free available RX buffer is not allocated + Trigger Driver re-loading to recover RX dead end + + @ Parameters + v_VOID_t *usrData + DXE context + + @ Return + NONE + +===========================================================================*/ +void dxeRXResourceAvailableTimerExpHandler +( + void *usrData +) +{ + HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL, + "RX Low resource, Durign wait time period %d, RX resource not allocated", + T_WLANDXE_MAX_RX_PACKET_WAIT); + wpalWlanReload(); + + return; +} + /*========================================================================== @ Function Name dxeRXPacketAvailableCB @@ -1870,6 +1985,13 @@ static wpt_status dxeRXFrameSingleBufferAlloc currentDesc = currentCtrlBlock->linkedDesc; + if(currentDesc->descCtrl.valid) + { + HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR, + "This Descriptor is valid, Do not refill"); + return eWLAN_PAL_STATUS_E_EXISTS; + } + /* First check if a packet pointer has already been provided by a previously invoked Rx packet available callback. If so use that packet. */ if(dxeCtxt->rxPalPacketUnavailable && (NULL != dxeCtxt->freeRXPacket)) @@ -1880,8 +2002,8 @@ static wpt_status dxeRXFrameSingleBufferAlloc } else if(!dxeCtxt->rxPalPacketUnavailable) { - /* Allocate platform Packet buffer and OS Frame Buffer at here */ - currentPalPacketBuffer = wpalPacketAlloc(eWLAN_PAL_PKT_TYPE_RX_RAW, + /* Allocate platform Packet buffer and OS Frame Buffer at here */ + currentPalPacketBuffer = wpalPacketAlloc(eWLAN_PAL_PKT_TYPE_RX_RAW, WLANDXE_DEFAULT_RX_OS_BUFFER_SIZE, dxeRXPacketAvailableCB, (void *)dxeCtxt); @@ -1889,6 +2011,16 @@ static wpt_status dxeRXFrameSingleBufferAlloc if(NULL == currentPalPacketBuffer) { dxeCtxt->rxPalPacketUnavailable = eWLAN_PAL_TRUE; + /* Out of RX free buffer, + * Start timer to recover from RX dead end */ + if(VOS_TIMER_STATE_RUNNING != + wpalTimerGetCurStatus(&dxeCtxt->rxResourceAvailableTimer)) + { + HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_WARN, + "RX Low resource, wait available resource"); + wpalTimerStart(&dxeCtxt->rxResourceAvailableTimer, + T_WLANDXE_MAX_RX_PACKET_WAIT); + } } } @@ -1994,13 +2126,20 @@ static wpt_status dxeRXFrameRefillRing channelEntry, currentCtrlBlk); - if(eWLAN_PAL_STATUS_SUCCESS != status) + if((eWLAN_PAL_STATUS_SUCCESS != status) && + (eWLAN_PAL_STATUS_E_EXISTS != status)) { HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_WARN, "dxeRXFrameRefillRing, out of RX buffer pool, break here"); break; } + if(eWLAN_PAL_STATUS_E_EXISTS == status) + { + HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR, + "dxeRXFrameRefillRing, Descriptor Non-Empry"); + } + currentDesc = currentCtrlBlk->linkedDesc; currentDesc->descCtrl.ctrl = channelEntry->extraConfig.cw_ctrl_read; @@ -2019,7 +2158,10 @@ static wpt_status dxeRXFrameRefillRing 1 << channelEntry->assignedDMAChannel); } currentCtrlBlk = currentCtrlBlk->nextCtrlBlk; - --channelEntry->numFreeDesc; + if(eWLAN_PAL_STATUS_E_EXISTS != status) + { + --channelEntry->numFreeDesc; + } } channelEntry->tailCtrlBlk = currentCtrlBlk; @@ -2202,10 +2344,13 @@ static wpt_status dxeRXFrameReady * Do not try reload driver at here*/ if(!(chStat & WLANDXE_CH_CTRL_EN_MASK)) { - HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR, + HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_WARN, "dxeRXFrameReady %s RING Wrapped, RX Free Low 0x%x", channelType[channelEntry->channelType], chStat); - channelEntry->numFragmentCurrentChain = 0; + /* This is not empty interrupt case + * If handle this as empty interrupt, false SSR might be issued + * Frame count '1' is dummy frame count to avoid SSR */ + channelEntry->numFragmentCurrentChain = 1; return eWLAN_PAL_STATUS_SUCCESS; } @@ -2226,21 +2371,20 @@ static wpt_status dxeRXFrameReady * or first interrupt empty, this should not happen */ if(0 == channelEntry->numFragmentCurrentChain) { - dxeChannelMonitor("RX Ready", channelEntry); + dxeChannelMonitor("RX Ready", channelEntry, NULL); dxeDescriptorDump(channelEntry, channelEntry->headCtrlBlk->linkedDesc, 0); - dxeChannelRegisterDump(channelEntry, "RX successive empty interrupt"); - dxeChannelAllDescDump(channelEntry, channelEntry->channelType); - + dxeChannelRegisterDump(channelEntry, "RX successive empty interrupt", NULL); + dxeChannelAllDescDump(channelEntry, channelEntry->channelType, NULL); /* Abnormal interrupt detected, try to find not validated descriptor */ for(descLoop = 0; descLoop < channelEntry->numDesc; descLoop++) { if(!(WLANDXE_U32_SWAP_ENDIAN(descCtrl) & WLANDXE_DESC_CTRL_VALID)) { - HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR, + HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_WARN, "Found Invalidated Descriptor %d", (int)descLoop); if(eWLAN_PAL_STATUS_SUCCESS == wpalIsPacketLocked(currentCtrlBlk->xfrFrame)) { - HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR, + HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_WARN, "Packet locked, Resync Host and HW"); channelEntry->headCtrlBlk = currentCtrlBlk; invalidatedFound = 1; @@ -2248,7 +2392,7 @@ static wpt_status dxeRXFrameReady } else { - HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR, + HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_WARN, "Packet Not Locked, cannot transfer frame"); } } @@ -2539,6 +2683,9 @@ void dxeRXEventHandler HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL, "%11s : 0x%x Error Reported, Reload Driver", channelType[channelCb->channelType], chHighStat); + + dxeErrChannelDebug(channelCb); + dxeCtxt->driverReloadInProcessing = eWLAN_PAL_TRUE; wpalWlanReload(); } @@ -2588,6 +2735,9 @@ void dxeRXEventHandler HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL, "%11s : 0x%x Error Reported, Reload Driver", channelType[channelCb->channelType], chStat); + + dxeErrChannelDebug(channelCb); + dxeCtxt->driverReloadInProcessing = eWLAN_PAL_TRUE; wpalWlanReload(); } @@ -2632,6 +2782,9 @@ void dxeRXEventHandler HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL, "%11s : 0x%x Error Reported, Reload Driver", channelType[channelCb->channelType], chLowStat); + + dxeErrChannelDebug(channelCb); + dxeCtxt->driverReloadInProcessing = eWLAN_PAL_TRUE; wpalWlanReload(); } @@ -2663,16 +2816,6 @@ void dxeRXEventHandler return; } - /* Enable system level ISR */ - /* Enable RX ready Interrupt at here */ - status = wpalEnableInterrupt(DXE_INTERRUPT_RX_READY); - if(eWLAN_PAL_STATUS_SUCCESS != status) - { - HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR, - "dxeRXEventHandler Enable RX Ready interrupt fail"); - return; - } - /* Prepare Control Register EN Channel */ if(!(dxeCtxt->dxeChannel[WDTS_CHANNEL_RX_HIGH_PRI].extraConfig.chan_mask & WLANDXE_CH_CTRL_EN_MASK)) { @@ -2696,6 +2839,16 @@ void dxeRXEventHandler regValue &= WLANDXE_RX_INTERRUPT_PRO_UNMASK; wpalWriteRegister(WLANDXE_INT_MASK_REG_ADDRESS, regValue); + /* Enable system level ISR */ + /* Enable RX ready Interrupt at here */ + status = wpalEnableInterrupt(DXE_INTERRUPT_RX_READY); + if(eWLAN_PAL_STATUS_SUCCESS != status) + { + HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR, + "dxeRXEventHandler Enable RX Ready interrupt fail"); + return; + } + HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW, "%s Exit", __func__); return; @@ -2741,6 +2894,13 @@ void dxeRXPacketAvailableEventHandler } dxeCtxt = (WLANDXE_CtrlBlkType *)(rxPktAvailMsg->pContext); + /* Available resource allocated + * Stop timer not needed */ + if(VOS_TIMER_STATE_RUNNING == + wpalTimerGetCurStatus(&dxeCtxt->rxResourceAvailableTimer)) + { + wpalTimerStop(&dxeCtxt->rxResourceAvailableTimer); + } do { @@ -2887,14 +3047,16 @@ static wpt_status dxeTXPushFrame #else wpt_iterator iterator; #endif /* FEATURE_R33D */ + wpt_uint32 isEmpty = 0; HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW, "%s Enter", __func__); - if(WLANDXE_POWER_STATE_BMPS == tempDxeCtrlBlk->hostPowerState) + tempDxeCtrlBlk->smsmToggled = eWLAN_PAL_FALSE; + if((0 == tempDxeCtrlBlk->dxeChannel[WDTS_CHANNEL_TX_LOW_PRI].numRsvdDesc) && + (0 == tempDxeCtrlBlk->dxeChannel[WDTS_CHANNEL_TX_HIGH_PRI].numRsvdDesc)) { - tempDxeCtrlBlk->rivaPowerState = WLANDXE_RIVA_POWER_STATE_BMPS_UNKNOWN; - dxeNotifySmsm(eWLAN_PAL_FALSE, eWLAN_PAL_TRUE); + isEmpty = 1; } channelEntry->numFragmentCurrentChain = 0; @@ -3037,10 +3199,16 @@ static wpt_status dxeTXPushFrame { /* Update channel head as next avaliable linked slot */ channelEntry->headCtrlBlk = currentCtrlBlk; - tempDxeCtrlBlk->ringNotEmpty = eWLAN_PAL_TRUE; - HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW, "SMSM_ret LO=%d HI=%d", tempDxeCtrlBlk->dxeChannel[WDTS_CHANNEL_TX_LOW_PRI].numRsvdDesc, - tempDxeCtrlBlk->dxeChannel[WDTS_CHANNEL_TX_HIGH_PRI].numRsvdDesc ); - dxeNotifySmsm(eWLAN_PAL_TRUE, eWLAN_PAL_FALSE); + if(isEmpty) + { + tempDxeCtrlBlk->ringNotEmpty = eWLAN_PAL_TRUE; + HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW, + "SMSM_ret LO=%d HI=%d", + tempDxeCtrlBlk->dxeChannel[WDTS_CHANNEL_TX_LOW_PRI].numRsvdDesc, + tempDxeCtrlBlk->dxeChannel[WDTS_CHANNEL_TX_HIGH_PRI].numRsvdDesc ); + dxeNotifySmsm(eWLAN_PAL_TRUE, eWLAN_PAL_FALSE); + tempDxeCtrlBlk->smsmToggled = eWLAN_PAL_TRUE; + } return status; } @@ -3296,6 +3464,7 @@ static wpt_status dxeTXCompFrame return eWLAN_PAL_STATUS_SUCCESS; } + /* */ while(1) { // HDXE_ASSERT(WLAN_PAL_IS_STATUS_SUCCESS(WLAN_RivaValidateDesc(currentDesc))); @@ -3520,6 +3689,9 @@ void dxeTXEventHandler HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL, "%11s : 0x%x Error Reported, Reload Driver", channelType[channelCb->channelType], chStat); + + dxeErrChannelDebug(channelCb); + dxeCtxt->driverReloadInProcessing = eWLAN_PAL_TRUE; wpalWlanReload(); } @@ -3570,6 +3742,9 @@ void dxeTXEventHandler HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL, "%11s : 0x%x Error Reported, Reload Driver", channelType[channelCb->channelType], chStat); + + dxeErrChannelDebug(channelCb); + dxeCtxt->driverReloadInProcessing = eWLAN_PAL_TRUE; wpalWlanReload(); } @@ -3622,6 +3797,9 @@ void dxeTXEventHandler HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL, "%11s : 0x%x Error Reported, Reload Driver", channelType[channelCb->channelType], chStat); + + dxeErrChannelDebug(channelCb); + dxeCtxt->driverReloadInProcessing = eWLAN_PAL_TRUE; wpalWlanReload(); } @@ -3719,6 +3897,18 @@ void dxeTXCompleteProcessing dxeCtxt->dxeChannel[WDTS_CHANNEL_TX_HIGH_PRI].numRsvdDesc, channelType[dxeCtxt->dxeChannel[WDTS_CHANNEL_TX_LOW_PRI].channelType], dxeCtxt->dxeChannel[WDTS_CHANNEL_TX_LOW_PRI].numRsvdDesc); + + if((WLANDXE_POWER_STATE_FULL != dxeCtxt->hostPowerState) && + (eWLAN_PAL_FALSE == tempDxeCtrlBlk->smsmToggled)) + { + /* After TX Comp processing, still remaining frame on the DXE TX ring + * And when push frame, RING was not empty marked + * Then when push frame, no SMSM toggle happen + * To avoid permanent TX stall, SMSM toggle is needed at here + * With this toggle, host should gaurantee SMSM state should be changed */ + dxeNotifySmsm(eWLAN_PAL_FALSE, eWLAN_PAL_TRUE); + dxeNotifySmsm(eWLAN_PAL_TRUE, eWLAN_PAL_FALSE); + } } /*Kicking the DXE after the TX Complete interrupt was enabled - to avoid @@ -3784,8 +3974,10 @@ void dxeTXReSyncDesc { HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL, "TX Async no Pending frame"); - dxeChannelMonitor("!!! TX Async no Pending frame !!!", channelEntry); - dxeChannelRegisterDump(channelEntry, "!!! TX Async no Pending frame !!!"); + + dxeChannelMonitor("!!! TX Async no Pending frame !!!", channelEntry, NULL); + dxeChannelRegisterDump(channelEntry, "!!! TX Async no Pending frame !!!", NULL); + wpalWriteRegister(channelEntry->channelRegister.chDXEDesclRegAddr, channelEntry->tailCtrlBlk->linkedDescPhyAddr); } @@ -3803,8 +3995,10 @@ void dxeTXReSyncDesc { HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL, "TX Async"); - dxeChannelMonitor("!!! TX Async !!!", channelEntry); - dxeChannelRegisterDump(channelEntry, "!!! TX Async !!!"); + + dxeChannelMonitor("!!! TX Async !!!", channelEntry, NULL); + dxeChannelRegisterDump(channelEntry, "!!! TX Async !!!", NULL); + wpalWriteRegister(channelEntry->channelRegister.chDXEDesclRegAddr, validCtrlBlk->linkedDescPhyAddr); } @@ -3822,8 +4016,10 @@ void dxeTXReSyncDesc { HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL, "TX Async with not completed transferred frames, next descriptor must be head"); - dxeChannelMonitor("!!! TX Async !!!", channelEntry); - dxeChannelRegisterDump(channelEntry, "!!! TX Async !!!"); + + dxeChannelMonitor("!!! TX Async !!!", channelEntry, NULL); + dxeChannelRegisterDump(channelEntry, "!!! TX Async !!!", NULL); + wpalWriteRegister(channelEntry->channelRegister.chDXEDesclRegAddr, validCtrlBlk->linkedDescPhyAddr); } @@ -4171,6 +4367,7 @@ void *WLANDXE_Open tempDxeCtrlBlk->rxIntDisabledByIMPS = eWLAN_PAL_FALSE; tempDxeCtrlBlk->txIntDisabledByIMPS = eWLAN_PAL_FALSE; tempDxeCtrlBlk->driverReloadInProcessing = eWLAN_PAL_FALSE; + tempDxeCtrlBlk->smsmToggled = eWLAN_PAL_FALSE; /* Initialize SMSM state * Init State is @@ -4192,6 +4389,10 @@ void *WLANDXE_Open return NULL; } + wpalTimerInit(&tempDxeCtrlBlk->rxResourceAvailableTimer, + dxeRXResourceAvailableTimerExpHandler, + tempDxeCtrlBlk); + HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_WARN, "WLANDXE_Open Success"); HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW, @@ -4694,7 +4895,6 @@ wpt_status WLANDXE_Stop { HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR, "WLANDXE_Stop Channel %d Stop Fail", idx); - return status; } } @@ -4702,6 +4902,12 @@ wpt_status WLANDXE_Stop wpalUnRegisterInterrupt(DXE_INTERRUPT_TX_COMPLE); wpalUnRegisterInterrupt(DXE_INTERRUPT_RX_READY); + if(VOS_TIMER_STATE_STOPPED != + wpalTimerGetCurStatus(&dxeCtxt->rxResourceAvailableTimer)) + { + wpalTimerStop(&dxeCtxt->rxResourceAvailableTimer); + } + HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW, "%s Exit", __func__); return status; @@ -4751,6 +4957,7 @@ wpt_status WLANDXE_Close } dxeCtxt = (WLANDXE_CtrlBlkType *)pDXEContext; + wpalTimerDelete(&dxeCtxt->rxResourceAvailableTimer); for(idx = 0; idx < WDTS_CHANNEL_MAX; idx++) { wpalMutexDelete(&dxeCtxt->dxeChannel[idx].dxeChannelLock); @@ -4953,7 +5160,7 @@ void dxeRxThreadSetPowerStateEventHandler { HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR, "Tx thread Set power state req serialize fail status=%d", - status, 0, 0); + status); } HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_INFO_LOW, @@ -4992,7 +5199,7 @@ wpt_status WLANDXE_SetPowerState if(NULL == pDXEContext) { HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR, - "NULL pDXEContext passed by caller", 0, 0, 0); + "NULL pDXEContext passed by caller"); return eWLAN_PAL_STATUS_E_FAILURE; } pDxeCtrlBlk = (WLANDXE_CtrlBlkType *)pDXEContext; @@ -5074,7 +5281,7 @@ wpt_status WLANDXE_SetPowerState { HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR, "Rx thread Set power state req serialize fail status=%d", - status, 0, 0); + status); } } else @@ -5158,7 +5365,7 @@ wpt_uint32 WLANDXE_GetFreeTxDataResNumber if(NULL == pDXEContext) { HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR, - "NULL parameter passed by caller", 0, 0, 0); + "NULL parameter passed by caller"); return (0); } @@ -5201,15 +5408,20 @@ void WLANDXE_ChannelDebug /* Whatever RIVA power condition try to wakeup RIVA through SMSM * This will not simply wakeup RIVA * Just incase TX not wanted stuck, Trigger TX again */ - dxeNotifySmsm(eWLAN_PAL_TRUE, eWLAN_PAL_TRUE); - HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL, - "Host power state %d, RIVA power state %d", - tempDxeCtrlBlk->hostPowerState, tempDxeCtrlBlk->rivaPowerState); + dxeNotifySmsm(eWLAN_PAL_FALSE, eWLAN_PAL_TRUE); + dxeNotifySmsm(eWLAN_PAL_TRUE, eWLAN_PAL_FALSE); /* Get free BD count */ + wpalSleep(10); wpalReadRegister(WLANDXE_BMU_AVAILABLE_BD_PDU, ®Value); HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL, - "TX Pending frames count %d, Current available BD %d", - tempDxeCtrlBlk->txCompletedFrames, (int)regValue); + "===== DXE Dump Start HPS %d, FWS %d, TX PFC %d, ABD %d =====", + tempDxeCtrlBlk->hostPowerState, tempDxeCtrlBlk->rivaPowerState, + tempDxeCtrlBlk->txCompletedFrames, regValue); + + wpalPacketStallUpdateInfo((wpt_uint32 *)&tempDxeCtrlBlk->rivaPowerState, + ®Value, + NULL, + 0); channelDebugMsg = (wpt_msg *)wpalMemoryAllocate(sizeof(wpt_msg)); if(NULL == channelDebugMsg) @@ -5225,7 +5437,7 @@ void WLANDXE_ChannelDebug { HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR, "Tx thread Set power state req serialize fail status=%d", - status, 0, 0); + status); } } @@ -5233,8 +5445,7 @@ void WLANDXE_ChannelDebug if(enableStallDetect) { HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_WARN, - "DXE TX Stall detect", - 0, 0, 0); + "DXE TX Stall detect"); /* Start Stall detect timer and detect stall */ wpalTimerStart(&tempDxeCtrlBlk->dxeChannel[WDTS_CHANNEL_TX_LOW_PRI].healthMonitorTimer, T_WLANDXE_PERIODIC_HEALTH_M_TIME); diff --git a/CORE/DXE/src/wlan_qct_dxe_cfg_i.c b/CORE/DXE/src/wlan_qct_dxe_cfg_i.c index c6bde9a1cf66..7aeff9be3c4e 100644 --- a/CORE/DXE/src/wlan_qct_dxe_cfg_i.c +++ b/CORE/DXE/src/wlan_qct_dxe_cfg_i.c @@ -372,7 +372,7 @@ wpt_status dxeCommonDefaultConfig All the channels must have it's own configurations @ Parameters - WLANDXE_CtrlBlkType *dxeCtrlBlk, + WLANDXE_CtrlBlkType: *dxeCtrlBlk, DXE host driver main control block WLANDXE_ChannelCBType *channelEntry Channel specific control block @@ -395,6 +395,7 @@ wpt_status dxeChannelDefaultConfig wpt_uint32 dxeControlWriteEop = 0; wpt_uint32 dxeControlWriteEopInt = 0; wpt_uint32 idx; + wpt_uint32 rxResourceCount = 0; WLANDXE_ChannelMappingType *mappedChannel = NULL; /* Sanity Check */ @@ -607,7 +608,16 @@ wpt_status dxeChannelDefaultConfig channelEntry->extraConfig.intMask = channelInterruptMask[mappedChannel->DMAChannel]; - channelEntry->numDesc = mappedChannel->channelConfig->nDescs; + wpalGetNumRxRawPacket(&rxResourceCount); + if((WDTS_CHANNEL_TX_LOW_PRI == channelEntry->channelType) || + (0 == rxResourceCount)) + { + channelEntry->numDesc = mappedChannel->channelConfig->nDescs; + } + else + { + channelEntry->numDesc = rxResourceCount / 4; + } channelEntry->assignedDMAChannel = mappedChannel->DMAChannel; channelEntry->numFreeDesc = 0; channelEntry->numRsvdDesc = 0; diff --git a/CORE/DXE/src/wlan_qct_dxe_i.h b/CORE/DXE/src/wlan_qct_dxe_i.h index d02e09990d99..48ff3b1e818c 100644 --- a/CORE/DXE/src/wlan_qct_dxe_i.h +++ b/CORE/DXE/src/wlan_qct_dxe_i.h @@ -628,6 +628,8 @@ typedef struct wpt_packet *freeRXPacket; wpt_boolean rxPalPacketUnavailable; wpt_boolean driverReloadInProcessing; + wpt_boolean smsmToggled; + wpt_timer rxResourceAvailableTimer; } WLANDXE_CtrlBlkType; /*========================================================================== diff --git a/CORE/HDD/inc/qc_sap_ioctl.h b/CORE/HDD/inc/qc_sap_ioctl.h index c3e4ed7f2a62..f07a34b3423b 100644 --- a/CORE/HDD/inc/qc_sap_ioctl.h +++ b/CORE/HDD/inc/qc_sap_ioctl.h @@ -242,6 +242,8 @@ typedef struct #define QCSAP_IOCTL_SET_TX_POWER (SIOCIWFIRSTPRIV+20) #define QCSAP_IOCTL_GET_STA_INFO (SIOCIWFIRSTPRIV+21) #define QCSAP_IOCTL_SET_MAX_TX_POWER (SIOCIWFIRSTPRIV+22) +#define QCSAP_IOCTL_DATAPATH_SNAP_SHOT (SIOCIWFIRSTPRIV+23) +#define QCSAP_IOCTL_SET_TRAFFIC_MONITOR (SIOCIWFIRSTPRIV+24) #define MAX_VAR_ARGS 7 #define QCSAP_IOCTL_PRIV_GET_SOFTAP_LINK_SPEED (SIOCIWFIRSTPRIV + 31) diff --git a/CORE/HDD/inc/wlan_hdd_assoc.h b/CORE/HDD/inc/wlan_hdd_assoc.h index 43b88d53b9b9..78ba41c8985d 100644 --- a/CORE/HDD/inc/wlan_hdd_assoc.h +++ b/CORE/HDD/inc/wlan_hdd_assoc.h @@ -28,9 +28,9 @@ #if !defined( HDD_CONNECTION_H__ ) #define HDD_CONNECTION_H__ #include -#define HDD_MAX_NUM_IBSS_STA ( 9 ) +#define HDD_MAX_NUM_IBSS_STA ( 32 ) #ifdef FEATURE_WLAN_TDLS -#define HDD_MAX_NUM_TDLS_STA ( HDD_MAX_NUM_IBSS_STA - 1 ) // up to 3 as 1 is assigned to AP +#define HDD_MAX_NUM_TDLS_STA ( 8 ) #define TDLS_STA_INDEX_VALID(staId) \ (((staId) >= 4) && ((staId) < 0xFF)) #endif @@ -38,7 +38,20 @@ #define TKIP_COUNTER_MEASURE_STOPED 0 /* Timeout (in ms) for Link to Up before Registering Station */ #define ASSOC_LINKUP_TIMEOUT 60 + +/* In pronto case, IBSS owns the first peer for bss peer. + In Rome case, IBSS uses the 2nd peer as bss peer */ +#ifdef CONFIG_QCA_WIFI_ISOC +#define IBSS_BROADCAST_STAID 0 +#else #define IBSS_BROADCAST_STAID 1 +#endif + +#ifdef FEATURE_CESIUM_PROPRIETARY +/* Timeout in ms for peer info request commpletion */ +#define IBSS_PEER_INFO_REQ_TIMOEUT 1000 +#endif + typedef enum { /** Not associated in Infra or participating in an IBSS / Ad-hoc network.*/ diff --git a/CORE/HDD/inc/wlan_hdd_cfg.h b/CORE/HDD/inc/wlan_hdd_cfg.h index 9a99ee25729b..b935056e4967 100644 --- a/CORE/HDD/inc/wlan_hdd_cfg.h +++ b/CORE/HDD/inc/wlan_hdd_cfg.h @@ -265,6 +265,14 @@ #define CFG_MAX_RX_AMPDU_FACTOR_MAX WNI_CFG_MAX_RX_AMPDU_FACTOR_STAMAX #define CFG_MAX_RX_AMPDU_FACTOR_DEFAULT WNI_CFG_MAX_RX_AMPDU_FACTOR_STADEF +//Configuration added to enable/disable CTS2SELF in +//Adaptive RX drain feature +#define CFG_ENABLE_ADAPT_RX_DRAIN_NAME "gEnableAdaptRxDrain" +#define CFG_ENABLE_ADAPT_RX_DRAIN_MIN WNI_CFG_ENABLE_ADAPT_RX_DRAIN_STAMIN +#define CFG_ENABLE_ADAPT_RX_DRAIN_MAX WNI_CFG_ENABLE_ADAPT_RX_DRAIN_STAMAX +#define CFG_ENABLE_ADAPT_RX_DRAIN_DEFAULT WNI_CFG_ENABLE_ADAPT_RX_DRAIN_STADEF + + typedef enum { eHDD_DOT11_MODE_AUTO = 0, //covers all things we support @@ -354,17 +362,16 @@ typedef enum #define CFG_ROAM_PREFER_5GHZ_MAX ( 1 ) #define CFG_ROAM_PREFER_5GHZ_DEFAULT ( 1 ) +/* + To enable, set gRoamIntraBand=1 (Roaming within band) + To disable, set gRoamIntraBand=0 (Roaming across band) +*/ #define CFG_ROAM_INTRA_BAND "gRoamIntraBand" #define CFG_ROAM_INTRA_BAND_MIN ( 0 ) #define CFG_ROAM_INTRA_BAND_MAX ( 1 ) #define CFG_ROAM_INTRA_BAND_DEFAULT ( 0 ) #endif -#define CFG_STAT_TIMER_INTERVAL_NAME "gStatTimerInterval" -#define CFG_STAT_TIMER_INTERVAL_MIN ( 50 ) //ms -#define CFG_STAT_TIMER_INTERVAL_MAX ( 10000 ) -#define CFG_STAT_TIMER_INTERVAL_DEFAULT ( 500 ) - #define CFG_SHORT_PREAMBLE_NAME "gShortPreamble" #define CFG_SHORT_PREAMBLE_MIN WNI_CFG_SHORT_PREAMBLE_STAMIN #define CFG_SHORT_PREAMBLE_MAX WNI_CFG_SHORT_PREAMBLE_STAMAX @@ -400,11 +407,6 @@ typedef enum #define CFG_INTF3_MAC_ADDR_MAX "ffffffffffff" #define CFG_INTF3_MAC_ADDR_DEFAULT "000AF5898983" -#define CFG_CRDA_DEFAULT_COUNTRY_CODE "gCrdaDefaultCountryCode" -#define CFG_CRDA_DEFAULT_COUNTRY_CODE_MIN "00" -#define CFG_CRDA_DEFAULT_COUNTRY_CODE_MAX "ZZ" -#define CFG_CRDA_DEFAULT_COUNTRY_CODE_DEFAULT "ZZ" - #define CFG_AP_QOS_UAPSD_MODE_NAME "gEnableApUapsd" // ACs to setup U-APSD for at assoc #define CFG_AP_QOS_UAPSD_MODE_MIN ( 0 ) #define CFG_AP_QOS_UAPSD_MODE_MAX ( 1 ) @@ -489,32 +491,34 @@ typedef enum #define CFG_ENABLE_LTE_COEX_DEFAULT ( 0 ) #define CFG_AP_KEEP_ALIVE_PERIOD_NAME "gApKeepAlivePeriod" -#define CFG_AP_KEEP_ALIVE_PERIOD_MIN ( 0 ) -#define CFG_AP_KEEP_ALIVE_PERIOD_MAX ( 255) -#define CFG_AP_KEEP_ALIVE_PERIOD_DEFAULT ( 20 ) +#define CFG_AP_KEEP_ALIVE_PERIOD_MIN ( 3 ) +#define CFG_AP_KEEP_ALIVE_PERIOD_MAX ( 20 ) +#define CFG_AP_KEEP_ALIVE_PERIOD_DEFAULT ( 5 ) #define CFG_GO_KEEP_ALIVE_PERIOD_NAME "gGoKeepAlivePeriod" -#define CFG_GO_KEEP_ALIVE_PERIOD_MIN ( 0 ) -#define CFG_GO_KEEP_ALIVE_PERIOD_MAX ( 255) -#define CFG_GO_KEEP_ALIVE_PERIOD_DEFAULT ( 20 ) +#define CFG_GO_KEEP_ALIVE_PERIOD_MIN ( 3 ) +#define CFG_GO_KEEP_ALIVE_PERIOD_MAX ( 20 ) +#define CFG_GO_KEEP_ALIVE_PERIOD_DEFAULT ( 5 ) #define CFG_AP_LINK_MONITOR_PERIOD_NAME "gApLinkMonitorPeriod" -#define CFG_AP_LINK_MONITOR_PERIOD_MIN ( 0 ) -#define CFG_AP_LINK_MONITOR_PERIOD_MAX ( 255) -#define CFG_AP_LINK_MONITOR_PERIOD_DEFAULT ( 3 ) +#define CFG_AP_LINK_MONITOR_PERIOD_MIN ( 3 ) +#define CFG_AP_LINK_MONITOR_PERIOD_MAX ( 50 ) +#define CFG_AP_LINK_MONITOR_PERIOD_DEFAULT ( 10 ) + +/* gGoLinkMonitorPeriod is period where link is idle and where + * we send NULL frame + */ +#define CFG_GO_LINK_MONITOR_PERIOD_NAME "gGoLinkMonitorPeriod" +#define CFG_GO_LINK_MONITOR_PERIOD_MIN ( 3 ) +#define CFG_GO_LINK_MONITOR_PERIOD_MAX ( 50 ) +#define CFG_GO_LINK_MONITOR_PERIOD_DEFAULT ( 10 ) + #define CFG_BEACON_INTERVAL_NAME "gBeaconInterval" #define CFG_BEACON_INTERVAL_MIN WNI_CFG_BEACON_INTERVAL_STAMIN #define CFG_BEACON_INTERVAL_MAX WNI_CFG_BEACON_INTERVAL_STAMAX #define CFG_BEACON_INTERVAL_DEFAULT WNI_CFG_BEACON_INTERVAL_STADEF -//Handoff Configuration Parameters -#define CFG_ENABLE_HANDOFF_NAME "gEnableHandoff" -#define CFG_ENABLE_HANDOFF_MIN ( 0 ) -#define CFG_ENABLE_HANDOFF_MAX ( 1 ) -#define CFG_ENABLE_HANDOFF_DEFAULT ( 1 ) - - //Additional Handoff related Parameters #define CFG_ENABLE_IDLE_SCAN_NAME "gEnableIdleScan" #define CFG_ENABLE_IDLE_SCAN_MIN ( 0 ) @@ -581,6 +585,11 @@ typedef enum #define CFG_RETRY_LIMIT_TWO_MAX ( 15 ) #define CFG_RETRY_LIMIT_TWO_DEFAULT ( 15 ) +#define CFG_DISABLE_AGG_WITH_BTC_NAME "gDisableAggWithBTC" +#define CFG_DISABLE_AGG_WITH_BTC_MIN ( 0 ) +#define CFG_DISABLE_AGG_WITH_BTC_MAX ( 1 ) +#define CFG_DISABLE_AGG_WITH_BTC_DEFAULT ( 1 ) + #ifdef WLAN_AP_STA_CONCURRENCY #define CFG_PASSIVE_MAX_CHANNEL_TIME_CONC_NAME "gPassiveMaxChannelTimeConc" @@ -608,10 +617,15 @@ typedef enum #define CFG_REST_TIME_CONC_MAX ( 10000 ) #define CFG_REST_TIME_CONC_DEFAULT ( 100 ) -#define CFG_NUM_CHAN_COMBINED_CONC_NAME "gNumChanCombinedConc" -#define CFG_NUM_CHAN_COMBINED_CONC_MIN ( 1 ) -#define CFG_NUM_CHAN_COMBINED_CONC_MAX ( 255 ) -#define CFG_NUM_CHAN_COMBINED_CONC_DEFAULT ( 1 ) +#define CFG_NUM_STA_CHAN_COMBINED_CONC_NAME "gNumStaChanCombinedConc" +#define CFG_NUM_STA_CHAN_COMBINED_CONC_MIN ( 1 ) +#define CFG_NUM_STA_CHAN_COMBINED_CONC_MAX ( 255 ) +#define CFG_NUM_STA_CHAN_COMBINED_CONC_DEFAULT ( 3 ) + +#define CFG_NUM_P2P_CHAN_COMBINED_CONC_NAME "gNumP2PChanCombinedConc" +#define CFG_NUM_P2P_CHAN_COMBINED_CONC_MIN ( 1 ) +#define CFG_NUM_P2P_CHAN_COMBINED_CONC_MAX ( 255 ) +#define CFG_NUM_P2P_CHAN_COMBINED_CONC_DEFAULT ( 1 ) #endif @@ -668,7 +682,7 @@ typedef enum #define CFG_FW_RSSI_MONITORING_NAME "gEnableFWRssiMonitoring" #define CFG_FW_RSSI_MONITORING_MIN ( 0 ) #define CFG_FW_RSSI_MONITORING_MAX ( 1 ) -#define CFG_FW_RSSI_MONITORING_DEFAULT WNI_CFG_PS_ENABLE_RSSI_MONITOR_STADEF +#define CFG_FW_RSSI_MONITORING_DEFAULT ( 1 ) #define CFG_DATA_INACTIVITY_TIMEOUT_NAME "gDataInactivityTimeout" #define CFG_DATA_INACTIVITY_TIMEOUT_MIN ( 1 ) @@ -706,11 +720,6 @@ typedef enum #define CFG_QOS_WMM_UAPSD_MASK_MAX (0xFF) #define CFG_QOS_WMM_UAPSD_MASK_DEFAULT (0x00) -#define CFG_QOS_WMM_MAX_SP_LEN_NAME "MaxSpLength" -#define CFG_QOS_WMM_MAX_SP_LEN_MIN (0) -#define CFG_QOS_WMM_MAX_SP_LEN_MAX (3) -#define CFG_QOS_WMM_MAX_SP_LEN_DEFAULT (0) - #define CFG_QOS_WMM_INFRA_UAPSD_VO_SRV_INTV_NAME "InfraUapsdVoSrvIntv" #define CFG_QOS_WMM_INFRA_UAPSD_VO_SRV_INTV_MIN (0) #define CFG_QOS_WMM_INFRA_UAPSD_VO_SRV_INTV_MAX (4294967295UL ) @@ -768,6 +777,11 @@ typedef enum #define CFG_LFR_FEATURE_ENABLED_MIN (0) #define CFG_LFR_FEATURE_ENABLED_MAX (1) #define CFG_LFR_FEATURE_ENABLED_DEFAULT (0) //disabled + +#define CFG_LFR_MAWC_FEATURE_ENABLED_NAME "MAWCEnabled" +#define CFG_LFR_MAWC_FEATURE_ENABLED_MIN (0) +#define CFG_LFR_MAWC_FEATURE_ENABLED_MAX (1) +#define CFG_LFR_MAWC_FEATURE_ENABLED_DEFAULT (0) /* disabled */ #endif // FEATURE_WLAN_LFR #if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR) @@ -791,7 +805,7 @@ typedef enum #define CFG_ROAM_RSSI_DIFF_NAME "RoamRssiDiff" #define CFG_ROAM_RSSI_DIFF_MIN (0) #define CFG_ROAM_RSSI_DIFF_MAX (30) -#define CFG_ROAM_RSSI_DIFF_DEFAULT (0) +#define CFG_ROAM_RSSI_DIFF_DEFAULT (5) /* * Following a scan and if potential roam candidate(s) are found, @@ -800,17 +814,28 @@ typedef enum * of any available candidate is better than the currently associated * AP by at least gImmediateRoamRssiDiff, then being to roam * immediately. + * NOTE: Value of 0 means that immediate roaming is enabled by default */ #define CFG_IMMEDIATE_ROAM_RSSI_DIFF_NAME "gImmediateRoamRssiDiff" #define CFG_IMMEDIATE_ROAM_RSSI_DIFF_MIN (0) #define CFG_IMMEDIATE_ROAM_RSSI_DIFF_MAX (125) -#define CFG_IMMEDIATE_ROAM_RSSI_DIFF_DEFAULT (3) +#define CFG_IMMEDIATE_ROAM_RSSI_DIFF_DEFAULT (0) /*This parameter is used to set Wireless Extended Security Mode.*/ #define CFG_ENABLE_WES_MODE_NAME "gWESModeEnabled" #define CFG_ENABLE_WES_MODE_NAME_MIN (0) #define CFG_ENABLE_WES_MODE_NAME_MAX (1) #define CFG_ENABLE_WES_MODE_NAME_DEFAULT (0) + +#define CFG_ROAM_SCAN_N_PROBES "gRoamScanNProbes" +#define CFG_ROAM_SCAN_N_PROBES_MIN (1) +#define CFG_ROAM_SCAN_N_PROBES_MAX (10) +#define CFG_ROAM_SCAN_N_PROBES_DEFAULT (2) + +#define CFG_ROAM_SCAN_HOME_AWAY_TIME "gRoamScanHomeAwayTime" +#define CFG_ROAM_SCAN_HOME_AWAY_TIME_MIN (3) +#define CFG_ROAM_SCAN_HOME_AWAY_TIME_MAX (300) +#define CFG_ROAM_SCAN_HOME_AWAY_TIME_DEFAULT (CFG_ROAM_SCAN_HOME_AWAY_TIME_MIN) #endif /* (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR) */ #ifdef FEATURE_WLAN_OKC @@ -989,11 +1014,6 @@ typedef enum #define CFG_QOS_IMPLICIT_SETUP_ENABLED_MAX (1) #define CFG_QOS_IMPLICIT_SETUP_ENABLED_DEFAULT (1) -#define CFG_19P2_MHZ_PMIC_CLK_ENABLED_NAME "19p2MhzPmicClkEnabled" -#define CFG_19P2_MHZ_PMIC_CLK_ENABLED_MIN (0) -#define CFG_19P2_MHZ_PMIC_CLK_ENABLED_MAX (1) -#define CFG_19P2_MHZ_PMIC_CLK_ENABLED_DEFAULT (0) - #define CFG_ENABLE_LOGP_NAME "gEnableLogp" #define CFG_ENABLE_LOGP_MIN ( 0 ) #define CFG_ENABLE_LOGP_MAX ( 1 ) @@ -1022,17 +1042,17 @@ typedef enum #define CFG_BTC_STATIC_LEN_PAGE_BT_NAME "btcStaticLenPageBt" #define CFG_BTC_STATIC_LEN_PAGE_BT_MIN ( 5000 ) #define CFG_BTC_STATIC_LEN_PAGE_BT_MAX ( 500000 ) -#define CFG_BTC_STATIC_LEN_PAGE_BT_DEFAULT ( 10000 ) +#define CFG_BTC_STATIC_LEN_PAGE_BT_DEFAULT ( 120000 ) #define CFG_BTC_STATIC_LEN_CONN_BT_NAME "btcStaticLenConnBt" #define CFG_BTC_STATIC_LEN_CONN_BT_MIN ( 5000 ) #define CFG_BTC_STATIC_LEN_CONN_BT_MAX ( 500000 ) -#define CFG_BTC_STATIC_LEN_CONN_BT_DEFAULT ( 10000 ) +#define CFG_BTC_STATIC_LEN_CONN_BT_DEFAULT ( 120000 ) #define CFG_BTC_STATIC_LEN_LE_BT_NAME "btcStaticLenLeBt" #define CFG_BTC_STATIC_LEN_LE_BT_MIN ( 5000 ) #define CFG_BTC_STATIC_LEN_LE_BT_MAX ( 500000 ) -#define CFG_BTC_STATIC_LEN_LE_BT_DEFAULT ( 10000 ) +#define CFG_BTC_STATIC_LEN_LE_BT_DEFAULT ( 120000 ) #define CFG_BTC_STATIC_LEN_INQ_WLAN_NAME "btcStaticLenInqWlan" #define CFG_BTC_STATIC_LEN_INQ_WLAN_MIN ( 0 ) @@ -1042,17 +1062,17 @@ typedef enum #define CFG_BTC_STATIC_LEN_PAGE_WLAN_NAME "btcStaticLenPageWlan" #define CFG_BTC_STATIC_LEN_PAGE_WLAN_MIN ( 0 ) #define CFG_BTC_STATIC_LEN_PAGE_WLAN_MAX ( 500000 ) -#define CFG_BTC_STATIC_LEN_PAGE_WLAN_DEFAULT ( 0 ) +#define CFG_BTC_STATIC_LEN_PAGE_WLAN_DEFAULT ( 30000 ) #define CFG_BTC_STATIC_LEN_CONN_WLAN_NAME "btcStaticLenConnWlan" #define CFG_BTC_STATIC_LEN_CONN_WLAN_MIN ( 0 ) #define CFG_BTC_STATIC_LEN_CONN_WLAN_MAX ( 500000 ) -#define CFG_BTC_STATIC_LEN_CONN_WLAN_DEFAULT ( 0 ) +#define CFG_BTC_STATIC_LEN_CONN_WLAN_DEFAULT ( 30000 ) #define CFG_BTC_STATIC_LEN_LE_WLAN_NAME "btcStaticLenLeWlan" #define CFG_BTC_STATIC_LEN_LE_WLAN_MIN ( 0 ) #define CFG_BTC_STATIC_LEN_LE_WLAN_MAX ( 500000 ) -#define CFG_BTC_STATIC_LEN_LE_WLAN_DEFAULT ( 0 ) +#define CFG_BTC_STATIC_LEN_LE_WLAN_DEFAULT ( 30000 ) #define CFG_BTC_DYN_MAX_LEN_BT_NAME "btcDynMaxLenBt" #define CFG_BTC_DYN_MAX_LEN_BT_MIN ( 25000 ) @@ -1079,12 +1099,80 @@ typedef enum #define CFG_BTC_DHCP_PROT_ON_SCO_MAX ( 1 ) #define CFG_BTC_DHCP_PROT_ON_SCO_DEFAULT ( 0 ) -#if defined WLAN_FEATURE_VOWIFI_11R -#define CFG_FT_ENABLE_NAME "gFtEnabled" -#define CFG_FT_ENABLE_MIN (0) -#define CFG_FT_ENABLE_MAX (1) -#define CFG_FT_ENABLE_DEFAULT (0) +#define CFG_MWS_COEX_V1_WAN_FREQ_NAME "mwsCoexVictim1WANFreq" +#define CFG_MWS_COEX_VX_WAN_FREQ_MIN ( 0 ) +#define CFG_MWS_COEX_VX_WAN_FREQ_MAX ( 0xFFFFFFFF ) +#define CFG_MWS_COEX_VX_WAN_FREQ_DEFAULT ( 0 ) + +#define CFG_MWS_COEX_V1_WLAN_FREQ_NAME "mwsCoexVictim1WLANFreq" +#define CFG_MWS_COEX_VX_WLAN_FREQ_MIN ( 0 ) +#define CFG_MWS_COEX_VX_WLAN_FREQ_MAX ( 0xFFFFFFFF ) +#define CFG_MWS_COEX_VX_WLAN_FREQ_DEFAULT ( 0 ) + +#define CFG_MWS_COEX_V1_CONFIG_NAME "mwsCoexVictim1Config" +#define CFG_MWS_COEX_V1_CONFIG2_NAME "mwsCoexVictim1Config2" +#define CFG_MWS_COEX_VX_CONFIG_MIN ( 0 ) +#define CFG_MWS_COEX_VX_CONFIG_MAX ( 0xFFFFFFFF ) +#define CFG_MWS_COEX_VX_CONFIG_DEFAULT ( 0 ) + +#define CFG_MWS_COEX_V2_WAN_FREQ_NAME "mwsCoexVictim2WANFreq" +#define CFG_MWS_COEX_V2_WLAN_FREQ_NAME "mwsCoexVictim2WLANFreq" +#define CFG_MWS_COEX_V2_CONFIG_NAME "mwsCoexVictim2Config" +#define CFG_MWS_COEX_V2_CONFIG2_NAME "mwsCoexVictim2Config2" +#define CFG_MWS_COEX_V3_WAN_FREQ_NAME "mwsCoexVictim3WANFreq" +#define CFG_MWS_COEX_V3_WLAN_FREQ_NAME "mwsCoexVictim3WLANFreq" +#define CFG_MWS_COEX_V3_CONFIG_NAME "mwsCoexVictim3Config" +#define CFG_MWS_COEX_V3_CONFIG2_NAME "mwsCoexVictim3Config2" +#define CFG_MWS_COEX_V4_WAN_FREQ_NAME "mwsCoexVictim4WANFreq" +#define CFG_MWS_COEX_V4_WLAN_FREQ_NAME "mwsCoexVictim4WLANFreq" +#define CFG_MWS_COEX_V4_CONFIG_NAME "mwsCoexVictim4Config" +#define CFG_MWS_COEX_V4_CONFIG2_NAME "mwsCoexVictim4Config2" +#define CFG_MWS_COEX_V5_WAN_FREQ_NAME "mwsCoexVictim5WANFreq" +#define CFG_MWS_COEX_V5_WLAN_FREQ_NAME "mwsCoexVictim5WLANFreq" +#define CFG_MWS_COEX_V5_CONFIG_NAME "mwsCoexVictim5Config" +#define CFG_MWS_COEX_V5_CONFIG2_NAME "mwsCoexVictim5Config2" +#define CFG_MWS_COEX_V6_WAN_FREQ_NAME "mwsCoexVictim6WANFreq" +#define CFG_MWS_COEX_V6_WLAN_FREQ_NAME "mwsCoexVictim6WLANFreq" +#define CFG_MWS_COEX_V6_CONFIG_NAME "mwsCoexVictim6Config" +#define CFG_MWS_COEX_V6_CONFIG2_NAME "mwsCoexVictim6Config2" +#define CFG_MWS_COEX_V7_WAN_FREQ_NAME "mwsCoexVictim7WANFreq" +#define CFG_MWS_COEX_V7_WLAN_FREQ_NAME "mwsCoexVictim7WLANFreq" +#define CFG_MWS_COEX_V7_CONFIG_NAME "mwsCoexVictim7Config" +#define CFG_MWS_COEX_V7_CONFIG2_NAME "mwsCoexVictim7Config2" +#define CFG_MWS_COEX_V8_WAN_FREQ_NAME "mwsCoexVictim8WANFreq" +#define CFG_MWS_COEX_V8_WLAN_FREQ_NAME "mwsCoexVictim8WLANFreq" +#define CFG_MWS_COEX_V8_CONFIG_NAME "mwsCoexVictim8Config" +#define CFG_MWS_COEX_V8_CONFIG2_NAME "mwsCoexVictim8Config2" +#define CFG_MWS_COEX_V9_WAN_FREQ_NAME "mwsCoexVictim9WANFreq" +#define CFG_MWS_COEX_V9_WLAN_FREQ_NAME "mwsCoexVictim9WLANFreq" +#define CFG_MWS_COEX_V9_CONFIG_NAME "mwsCoexVictim9Config" +#define CFG_MWS_COEX_V9_CONFIG2_NAME "mwsCoexVictim9Config2" +#define CFG_MWS_COEX_V10_WAN_FREQ_NAME "mwsCoexVictim10WANFreq" +#define CFG_MWS_COEX_V10_WLAN_FREQ_NAME "mwsCoexVictim10WLANFreq" +#define CFG_MWS_COEX_V10_CONFIG_NAME "mwsCoexVictim10Config" +#define CFG_MWS_COEX_V10_CONFIG2_NAME "mwsCoexVictim10Config2" + +#define CFG_MWS_COEX_MODEM_BACKOFF_NAME "mwsCoexModemBackoff" +#define CFG_MWS_COEX_MODEM_BACKOFF_MIN ( 0 ) +#define CFG_MWS_COEX_MODEM_BACKOFF_MAX ( 0xFFFFFFFF ) +#define CFG_MWS_COEX_MODEM_BACKOFF_DEFAULT ( 0 ) + +#define CFG_MWS_COEX_CONFIG1_NAME "mwsCoexConfig1" +#define CFG_MWS_COEX_CONFIGX_MIN ( 0 ) +#define CFG_MWS_COEX_CONFIGX_MAX ( 0xFFFFFFFF ) +#define CFG_MWS_COEX_CONFIGX_DEFAULT ( 0 ) +#define CFG_MWS_COEX_CONFIG2_NAME "mwsCoexConfig2" +#define CFG_MWS_COEX_CONFIG3_NAME "mwsCoexConfig3" +#define CFG_MWS_COEX_CONFIG4_NAME "mwsCoexConfig4" +#define CFG_MWS_COEX_CONFIG5_NAME "mwsCoexConfig5" +#define CFG_MWS_COEX_CONFIG6_NAME "mwsCoexConfig6" + +#define CFG_SAR_POWER_BACKOFF_NAME "SARPowerBackoff" +#define CFG_SAR_POWER_BACKOFF_MIN ( 0 ) +#define CFG_SAR_POWER_BACKOFF_MAX ( 0xFFFFFFFF ) +#define CFG_SAR_POWER_BACKOFF_DEFAULT ( 0 ) +#if defined WLAN_FEATURE_VOWIFI_11R #define CFG_FT_RESOURCE_REQ_NAME "gFTResourceReqSupported" #define CFG_FT_RESOURCE_REQ_MIN (0) #define CFG_FT_RESOURCE_REQ_MAX (1) @@ -1118,19 +1206,19 @@ typedef enum #ifdef WLAN_FEATURE_NEIGHBOR_ROAMING #define CFG_NEIGHBOR_SCAN_TIMER_PERIOD_NAME "gNeighborScanTimerPeriod" -#define CFG_NEIGHBOR_SCAN_TIMER_PERIOD_MIN (0) -#define CFG_NEIGHBOR_SCAN_TIMER_PERIOD_MAX (1000) +#define CFG_NEIGHBOR_SCAN_TIMER_PERIOD_MIN (3) +#define CFG_NEIGHBOR_SCAN_TIMER_PERIOD_MAX (300) #define CFG_NEIGHBOR_SCAN_TIMER_PERIOD_DEFAULT (200) #define CFG_NEIGHBOR_REASSOC_RSSI_THRESHOLD_NAME "gNeighborReassocThreshold" #define CFG_NEIGHBOR_REASSOC_RSSI_THRESHOLD_MIN (10) #define CFG_NEIGHBOR_REASSOC_RSSI_THRESHOLD_MAX (125) -#define CFG_NEIGHBOR_REASSOC_RSSI_THRESHOLD_DEFAULT (125) +#define CFG_NEIGHBOR_REASSOC_RSSI_THRESHOLD_DEFAULT (83) #define CFG_NEIGHBOR_LOOKUP_RSSI_THRESHOLD_NAME "gNeighborLookupThreshold" #define CFG_NEIGHBOR_LOOKUP_RSSI_THRESHOLD_MIN (10) #define CFG_NEIGHBOR_LOOKUP_RSSI_THRESHOLD_MAX (120) -#define CFG_NEIGHBOR_LOOKUP_RSSI_THRESHOLD_DEFAULT (120) +#define CFG_NEIGHBOR_LOOKUP_RSSI_THRESHOLD_DEFAULT (78) #define CFG_NEIGHBOR_SCAN_CHAN_LIST_NAME "gNeighborScanChannelList" #define CFG_NEIGHBOR_SCAN_CHAN_LIST_DEFAULT "" @@ -1141,14 +1229,14 @@ typedef enum #define CFG_NEIGHBOR_SCAN_MIN_CHAN_TIME_DEFAULT (20) #define CFG_NEIGHBOR_SCAN_MAX_CHAN_TIME_NAME "gNeighborScanChannelMaxTime" -#define CFG_NEIGHBOR_SCAN_MAX_CHAN_TIME_MIN (10) -#define CFG_NEIGHBOR_SCAN_MAX_CHAN_TIME_MAX (40) +#define CFG_NEIGHBOR_SCAN_MAX_CHAN_TIME_MIN (3) +#define CFG_NEIGHBOR_SCAN_MAX_CHAN_TIME_MAX (300) #define CFG_NEIGHBOR_SCAN_MAX_CHAN_TIME_DEFAULT (30) #define CFG_11R_NEIGHBOR_REQ_MAX_TRIES_NAME "gMaxNeighborReqTries" #define CFG_11R_NEIGHBOR_REQ_MAX_TRIES_MIN (1) #define CFG_11R_NEIGHBOR_REQ_MAX_TRIES_MAX (4) -#define CFG_11R_NEIGHBOR_REQ_MAX_TRIES_DEFAULT (1) +#define CFG_11R_NEIGHBOR_REQ_MAX_TRIES_DEFAULT (3) #define CFG_NEIGHBOR_SCAN_RESULTS_REFRESH_PERIOD_NAME "gNeighborScanRefreshPeriod" @@ -1355,14 +1443,8 @@ typedef enum #define CFG_P2P_DEVICE_ADDRESS_ADMINISTRATED_NAME "isP2pDeviceAddrAdministrated" #define CFG_P2P_DEVICE_ADDRESS_ADMINISTRATED_MIN ( 0 ) #define CFG_P2P_DEVICE_ADDRESS_ADMINISTRATED_MAX ( 1 ) -#define CFG_P2P_DEVICE_ADDRESS_ADMINISTRATED_DEFAULT ( 0 ) +#define CFG_P2P_DEVICE_ADDRESS_ADMINISTRATED_DEFAULT ( 1 ) -#ifdef WLAN_FEATURE_PACKET_FILTERING -#define CFG_MC_ADDR_LIST_FILTER_NAME "isMcAddrListFilter" -#define CFG_MC_ADDR_LIST_FILTER_MIN ( 0 ) -#define CFG_MC_ADDR_LIST_FILTER_MAX ( 1 ) -#define CFG_MC_ADDR_LIST_FILTER_DEFAULT ( 0 ) -#endif #define CFG_ENABLE_SSR "gEnableSSR" #define CFG_ENABLE_SSR_MIN ( 0 ) @@ -1396,6 +1478,7 @@ typedef enum #define CFG_VOS_TRACE_ENABLE_HDD_NAME "vosTraceEnableHDD" #define CFG_VOS_TRACE_ENABLE_SME_NAME "vosTraceEnableSME" #define CFG_VOS_TRACE_ENABLE_PE_NAME "vosTraceEnablePE" +#define CFG_VOS_TRACE_ENABLE_PMC_NAME "vosTraceEnablePMC" #define CFG_VOS_TRACE_ENABLE_WDA_NAME "vosTraceEnableWDA" #define CFG_VOS_TRACE_ENABLE_SYS_NAME "vosTraceEnableSYS" #define CFG_VOS_TRACE_ENABLE_VOSS_NAME "vosTraceEnableVOSS" @@ -1677,6 +1760,26 @@ typedef enum #define CFG_TDLS_RSSI_TEARDOWN_THRESHOLD_MIN ( -120 ) #define CFG_TDLS_RSSI_TEARDOWN_THRESHOLD_MAX ( 0 ) #define CFG_TDLS_RSSI_TEARDOWN_THRESHOLD_DEFAULT ( -75 ) + +#define CFG_TDLS_QOS_WMM_UAPSD_MASK_NAME "gTDLSUapsdMask" // ACs to setup U-APSD for TDLS Sta +#define CFG_TDLS_QOS_WMM_UAPSD_MASK_MIN (0) +#define CFG_TDLS_QOS_WMM_UAPSD_MASK_MAX (15) +#define CFG_TDLS_QOS_WMM_UAPSD_MASK_DEFAULT (0) + +#define CFG_TDLS_BUFFER_STA_SUPPORT_ENABLE "gEnableTDLSBufferSta" +#define CFG_TDLS_BUFFER_STA_SUPPORT_ENABLE_MIN (0) +#define CFG_TDLS_BUFFER_STA_SUPPORT_ENABLE_MAX (1) +#define CFG_TDLS_BUFFER_STA_SUPPORT_ENABLE_DEFAULT (1) + +#define CFG_TDLS_PUAPSD_INACTIVITY_TIME "gTDLSPuapsdInactivityTime" +#define CFG_TDLS_PUAPSD_INACTIVITY_TIME_MIN (0) +#define CFG_TDLS_PUAPSD_INACTIVITY_TIME_MAX (10) +#define CFG_TDLS_PUAPSD_INACTIVITY_TIME_DEFAULT (0) + +#define CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD "gTDLSPuapsdRxFrameThreshold" +#define CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_MIN (10) +#define CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_MAX (20) +#define CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_DEFAULT (10) #endif #ifdef WLAN_ACTIVEMODE_OFFLOAD_FEATURE @@ -1718,7 +1821,7 @@ typedef enum #define CFG_ENABLE_MCC_ADATIVE_SCHEDULER_ENABLED_NAME "gEnableMCCAdaptiveScheduler" #define CFG_ENABLE_MCC_ADATIVE_SCHEDULER_ENABLED_MIN ( 0 ) #define CFG_ENABLE_MCC_ADATIVE_SCHEDULER_ENABLED_MAX ( 1 ) -#define CFG_ENABLE_MCC_ADATIVE_SCHEDULER_ENABLED_DEFAULT ( 0 ) +#define CFG_ENABLE_MCC_ADATIVE_SCHEDULER_ENABLED_DEFAULT ( 1 ) #ifdef WLAN_FEATURE_11AC #define CFG_VHT_SU_BEAMFORMEE_CAP_FEATURE "gTxBFEnable" @@ -1766,8 +1869,8 @@ typedef enum #define CFG_IBSS_ADHOC_CHANNEL_24GHZ_MAX ( 14 ) #define CFG_IBSS_ADHOC_CHANNEL_24GHZ_DEFAULT ( 6 ) -#define CFG_LIST_OF_NON_11AC_COUNTRY_CODE "gListOfNon11acCountryCode" -#define CFG_LIST_OF_NON_11AC_COUNTRY_CODE_DEFAULT "RU,UA,ZA" +#define CFG_LIST_OF_NON_11AC_COUNTRY_CODE "gListOfNon11acCountryCode" +#define CFG_LIST_OF_NON_11AC_COUNTRY_CODE_DEFAULT "RU,UA,ZA" /* Parameter to control VHT support in 2.4 GHz band */ #define CFG_ENABLE_VHT_FOR_24GHZ_NAME "gEnableVhtFor24GHzBand" @@ -1775,6 +1878,25 @@ typedef enum #define CFG_ENABLE_VHT_FOR_24GHZ_MAX (1) #define CFG_ENABLE_VHT_FOR_24GHZ_DEFAULT (0) + +#define CFG_MAX_MEDIUM_TIME "gMaxMediumTime" +#define CFG_MAX_MEDIUM_TIME_STAMIN WNI_CFG_MAX_MEDIUM_TIME_STAMIN +#define CFG_MAX_MEDIUM_TIME_STAMAX WNI_CFG_MAX_MEDIUM_TIME_STAMAX +#define CFG_MAX_MEDIUM_TIME_STADEFAULT WNI_CFG_MAX_MEDIUM_TIME_STADEF + +/* + * SAP/P2P-GO mode traffic monitor + */ +#define CFG_ENABLE_TRAFFIC_MONITOR "gEnableTrafficMonitor" +#define CFG_ENABLE_TRAFFIC_MONITOR_MIN ( 0 ) +#define CFG_ENABLE_TRAFFIC_MONITOR_MAX ( 1 ) +#define CFG_ENABLE_TRAFFIC_MONITOR_DEFAULT ( 0 ) + +#define CFG_TRAFFIC_IDLE_TIMEOUT "gTrafficIdleTimeout" +#define CFG_TRAFFIC_IDLE_TIMEOUT_MIN ( 3000 ) +#define CFG_TRAFFIC_IDLE_TIMEOUT_MAX ( 10000 ) +#define CFG_TRAFFIC_IDLE_TIMEOUT_DEFAULT ( 5000 ) + /* * SCAN Offload */ @@ -1783,6 +1905,85 @@ typedef enum #define CFG_SCAN_OFFLOAD_ENABLE ( 1 ) #define CFG_SCAN_OFFLOAD_DEFAULT ( CFG_SCAN_OFFLOAD_DISABLE ) +/* + * Enable legacy fast roaming (LFR) on STA link during concurrent sessions + */ +#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD +#define CFG_ENABLE_FAST_ROAM_IN_CONCURRENCY "gEnableFastRoamInConcurrency" +#define CFG_ENABLE_FAST_ROAM_IN_CONCURRENCY_MIN ( 0 ) +#define CFG_ENABLE_FAST_ROAM_IN_CONCURRENCY_MAX ( 1 ) +#define CFG_ENABLE_FAST_ROAM_IN_CONCURRENCY_DEFAULT ( 1 ) +#endif + +/* + * FlexConnectPowerFactor parameter + * Default: Disable (0) + */ +#define CFG_FLEX_CONNECT_POWER_FACTOR_NAME "gFlexConnectPowerFactor" +#define CFG_FLEX_CONNECT_POWER_FACTOR_MIN ( 0 ) +#define CFG_FLEX_CONNECT_POWER_FACTOR_MAX ( 9 ) +#define CFG_FLEX_CONNECT_POWER_FACTOR_DEFAULT ( 0 ) + +/* + * Enable heart beat monitoring offload to FW + */ +#define CFG_ENABLE_HEART_BEAT_OFFLOAD "gEnableIbssHeartBeatOffload" +#define CFG_ENABLE_HEART_BEAT_OFFLOAD_MIN ( 0 ) +#define CFG_ENABLE_HEART_BEAT_OFFLOAD_MAX ( 1 ) +#define CFG_ENABLE_HEART_BEAT_OFFLOAD_DEFAULT ( 1 ) + +#define CFG_ANTENNA_DIVERSITY_PARAM_NAME "gAntennaDiversity" +#define CFG_ANTENNA_DIVERSITY_PARAM_MIN ( 0 ) +#define CFG_ANTENNA_DIVERSITY_PARAM_MAX ( 3 ) +#define CFG_ANTENNA_DIVERSITY_PARAM_DEFAULT ( 0 ) + +#define CFG_ENABLE_SNR_MONITORING_NAME "gEnableSNRMonitoring" +#define CFG_ENABLE_SNR_MONITORING_MIN ( 0 ) +#define CFG_ENABLE_SNR_MONITORING_MAX ( 1 ) +#define CFG_ENABLE_SNR_MONITORING_DEFAULT ( 0 ) +//Macro to enable/disable dynamic timer +#define CFG_DYNAMIC_SPLIT_SCAN_NAME "gEnableDynSplitScan" +#define CFG_DYNAMIC_SPLIT_SCAN_MIN ( 0 ) +#define CFG_DYNAMIC_SPLIT_SCAN_MAX ( 1 ) +#define CFG_DYNAMIC_SPLIT_SCAN_DEFAULT ( 1 ) + +//Macro to monitor the packet count +#define CFG_SPLIT_SCAN_TRAFFIC_MONITOR_THRSHLD_NAME "gSplitScanTxRxThreshold" +#define CFG_SPLIT_SCAN_TRAFFIC_MONITOR_THRSHLD_MIN ( 10 ) +#define CFG_SPLIT_SCAN_TRAFFIC_MONITOR_THRSHLD_MAX ( 100 ) +#define CFG_SPLIT_SCAN_TRAFFIC_MONITOR_THRSHLD_DEFAULT ( 50 ) + +//Macro to handle the monitor timer value in milliseconds +#define CFG_SPLIT_SCAN_TRAFFIC_MONITOR_TIMER_NAME "gSplitScanTxRxTimer" +#define CFG_SPLIT_SCAN_TRAFFIC_MONITOR_TIMER_MIN ( 1000 ) +#define CFG_SPLIT_SCAN_TRAFFIC_MONITOR_TIMER_MAX ( 10000 ) +#define CFG_SPLIT_SCAN_TRAFFIC_MONITOR_TIMER_DEFAULT ( 5000 ) + +#ifdef FEATURE_WLAN_SCAN_PNO +#define CFG_PNO_SCAN_SUPPORT "gPNOScanSupport" +#define CFG_PNO_SCAN_SUPPORT_ENABLE ( 1 ) +#define CFG_PNO_SCAN_SUPPORT_DISABLE ( 0 ) +#define CFG_PNO_SCAN_SUPPORT_DEFAULT ( 1 ) + +#define CFG_PNO_SCAN_TIMER_REPEAT_VALUE "gPNOScanTimerRepeatValue" +#define CFG_PNO_SCAN_TIMER_REPEAT_VALUE_DEFAULT ( 6 ) +#define CFG_PNO_SCAN_TIMER_REPEAT_VALUE_MIN ( 0 ) +#define CFG_PNO_SCAN_TIMER_REPEAT_VALUE_MAX ( 0xffffffff ) +#endif + +#define CFG_AMSDU_SUPPORT_IN_AMPDU_NAME "gAmsduSupportInAMPDU" +#define CFG_AMSDU_SUPPORT_IN_AMPDU_MIN (0) +#define CFG_AMSDU_SUPPORT_IN_AMPDU_MAX (1) +#define CFG_AMSDU_SUPPORT_IN_AMPDU_DEFAULT (0) //disabled + +/* Prefer connecting to 5G AP even if its RSSI is lower by + gSelect5GHzMargin dBm than 2.4G AP. +This feature requires the dependent cfg.ini "gRoamPrefer5GHz" set to 1 */ +#define CFG_STRICT_5GHZ_PREF_BY_MARGIN "gSelect5GHzMargin" +#define CFG_STRICT_5GHZ_PREF_BY_MARGIN_MIN (0) +#define CFG_STRICT_5GHZ_PREF_BY_MARGIN_MAX (60) +#define CFG_STRICT_5GHZ_PREF_BY_MARGIN_DEFAULT (0) //set 0 to disable + #define CFG_ENABLE_TCP_CHKSUM_OFFLOAD "gEnableTCPChkSumOffld" #define CFG_ENABLE_TCP_CHKSUM_OFFLOAD_MAX ( 1 ) #define CFG_ENABLE_TCP_CHKSUM_OFFLOAD_MIN ( 0 ) @@ -1801,6 +2002,14 @@ typedef enum #define CFG_POWERSAVE_OFFLOAD_MAX ( 4 ) #define CFG_POWERSAVE_OFFLOAD_DEFAULT ( CFG_POWERSAVE_OFFLOAD_MIN ) +/* + * P2P Listen Offload + */ +#define CFG_P2P_LISTEN_OFFLOAD_NAME "gEnableP2pListenOffload" +#define CFG_P2P_LISTEN_OFFLOAD_DISABLE ( 0 ) +#define CFG_P2P_LISTEN_OFFLOAD_ENABLE ( 1 ) +#define CFG_P2P_LISTEN_OFFLOAD_DEFAULT ( CFG_P2P_LISTEN_OFFLOAD_DISABLE ) + /* * Firmware uart print */ @@ -1817,14 +2026,6 @@ typedef enum #define CFG_ENABLE_FW_LOG_ENABLE ( 1 ) #define CFG_ENABLE_FW_LOG_DEFAULT ( CFG_ENABLE_FW_LOG_DISABLE ) -/* - * P2P Listen Offload - */ -#define CFG_P2P_LISTEN_OFFLOAD_NAME "gEnableP2pListenOffload" -#define CFG_P2P_LISTEN_OFFLOAD_DISABLE ( 0 ) -#define CFG_P2P_LISTEN_OFFLOAD_ENABLE ( 1 ) -#define CFG_P2P_LISTEN_OFFLOAD_DEFAULT ( CFG_P2P_LISTEN_OFFLOAD_DISABLE ) - #ifdef WLAN_FEATURE_11AC //Macro to handle maximum receive AMPDU size configuration #define CFG_VHT_AMPDU_LEN_EXPONENT_NAME "gVhtAmpduLenExponent" @@ -1855,10 +2056,10 @@ typedef enum #define CFG_WOW_ENABLE_MAX ( 3 ) #define CFG_WOW_STATUS_DEFAULT ( 3 ) -#define CFG_COALESING_IN_IBSS_NAME "gCoalesingInIBSS" -#define CFG_COALESING_IN_IBSS_MIN (0) -#define CFG_COALESING_IN_IBSS_MAX (1) -#define CFG_COALESING_IN_IBSS_DEFAULT (0) //disabled +#define CFG_COALESING_IN_IBSS_NAME "gCoalesingInIBSS" +#define CFG_COALESING_IN_IBSS_MIN (0) +#define CFG_COALESING_IN_IBSS_MAX (1) +#define CFG_COALESING_IN_IBSS_DEFAULT (0) //disabled /*--------------------------------------------------------------------------- Type declarations @@ -1915,6 +2116,13 @@ typedef struct v_U32_t btcMaxScoBlockPerc; v_U32_t btcDhcpProtOnA2dp; v_U32_t btcDhcpProtOnSco; + v_U32_t mwsCoexVictimWANFreq[10]; + v_U32_t mwsCoexVictimWLANFreq[10]; + v_U32_t mwsCoexVictimConfig[10]; + v_U32_t mwsCoexVictimConfig2[10]; + v_U32_t mwsCoexModemBackoff; + v_U32_t mwsCoexConfig[6]; + v_U32_t SARPowerBackoff; v_U32_t nImpsModSleepTime; v_U32_t nImpsMaxSleepTime; v_U32_t nImpsMinSleepTime; @@ -1939,16 +2147,13 @@ typedef struct v_U32_t nScanAgeTimeCNPS; v_U32_t nScanAgeTimeCPS; v_U8_t nRssiCatGap; - v_U32_t nStatTimerInterval; v_BOOL_t fIsShortPreamble; v_BOOL_t fIsAutoIbssBssid; v_MACADDR_t IbssBssid; v_U32_t AdHocChannel5G; v_U32_t AdHocChannel24G; - v_U8_t intfAddrMask; v_MACADDR_t intfMacAddr[VOS_MAX_CONCURRENCY_PERSONA]; - v_U8_t crdaDefaultCountryCode [3]; v_BOOL_t apUapsdEnabled; v_BOOL_t apRandomBssidEnabled; @@ -1958,7 +2163,7 @@ typedef struct v_U8_t MinFramesProcThres; v_U8_t apCntryCode[4]; v_BOOL_t apDisableIntraBssFwd; - v_U8_t nEnableListenMode; + v_U8_t nEnableListenMode; v_U32_t nAPAutoShutOff; v_U8_t apStartChannelNum; v_U8_t apEndChannelNum; @@ -1968,6 +2173,7 @@ typedef struct v_U32_t apKeepAlivePeriod; v_U32_t goKeepAlivePeriod; v_U32_t apLinkMonitorPeriod; + v_U32_t goLinkMonitorPeriod; v_U32_t nBeaconInterval; v_U8_t nTxPowerCap; //In dBm v_BOOL_t fIsLowGainOverride; @@ -1981,7 +2187,6 @@ typedef struct #ifdef WLAN_FEATURE_VOWIFI_11R //Vowifi 11r params - v_BOOL_t fFTEnable; v_BOOL_t fFTResourceReqSupported; #endif @@ -1997,9 +2202,6 @@ typedef struct v_U16_t nEmptyScanRefreshPeriod; #endif - //Handoff Parameters - v_BOOL_t fIsHandoffEnabled; - //Additional Handoff params v_BOOL_t nEnableIdleScan; v_U32_t nRoamingTime; @@ -2019,8 +2221,10 @@ typedef struct v_U32_t nActiveMinChnTimeConc; //in units of milliseconds v_U32_t nActiveMaxChnTimeConc; //in units of milliseconds v_U32_t nRestTimeConc; //in units of milliseconds - v_U8_t nNumChanCombinedConc; //number of channels combined - //in each split scan operation + v_U8_t nNumStaChanCombinedConc; //number of channels combined for + //STA in each split scan operation + v_U8_t nNumP2PChanCombinedConc; //number of channels combined for + //P2P in each split scan operation #endif v_U8_t nMaxPsPoll; @@ -2040,7 +2244,6 @@ typedef struct hdd_wmm_user_mode_t WmmMode; v_BOOL_t b80211eIsEnabled; v_U8_t UapsdMask; // what ACs to setup U-APSD for at assoc - v_U8_t MaxSpLength; v_U32_t InfraUapsdVoSrvIntv; v_U32_t InfraUapsdVoSuspIntv; v_U32_t InfraUapsdViSrvIntv; @@ -2051,6 +2254,7 @@ typedef struct v_U32_t InfraUapsdBkSuspIntv; #ifdef FEATURE_WLAN_LFR v_BOOL_t isFastRoamIniFeatureEnabled; + v_BOOL_t MAWCEnabled; #endif #ifdef FEATURE_WLAN_CCX v_U32_t InfraInactivityInterval; @@ -2108,7 +2312,6 @@ typedef struct /* Wowl pattern */ char wowlPattern[1024]; - v_BOOL_t b19p2MhzPmicClkEnabled; /* Control for Replay counetr. value 1 means single replay counter for all TID*/ @@ -2148,6 +2351,7 @@ typedef struct v_U16_t vosTraceEnableHDD; v_U16_t vosTraceEnableSME; v_U16_t vosTraceEnablePE; + v_U16_t vosTraceEnablePMC; v_U16_t vosTraceEnableWDA; v_U16_t vosTraceEnableSYS; v_U16_t vosTraceEnableVOSS; @@ -2175,6 +2379,8 @@ typedef struct #if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR) v_BOOL_t nRoamPrefer5GHz; v_BOOL_t nRoamIntraBand; + v_U8_t nProbes; + v_U16_t nRoamScanHomeAwayTime; #endif v_S31_t linkSpeedRssiMid; v_S31_t linkSpeedRssiLow; @@ -2182,9 +2388,6 @@ typedef struct v_U8_t allowMCCGODiffBI; v_BOOL_t isP2pDeviceAddrAdministrated; v_U8_t thermalMitigationEnable; -#ifdef WLAN_FEATURE_PACKET_FILTERING - v_BOOL_t isMcAddrListFilter; -#endif #ifdef WLAN_FEATURE_11AC v_U8_t vhtChannelWidth; v_U8_t vhtRxMCS; @@ -2194,7 +2397,6 @@ typedef struct v_U8_t vhtRxMCS2x2; v_U8_t vhtTxMCS2x2; v_BOOL_t enable2x2; - v_BOOL_t enableVhtFor24GHzBand; v_BOOL_t enableMuBformee; v_BOOL_t enableVhtpAid; v_BOOL_t enableVhtGid; @@ -2224,6 +2426,10 @@ typedef struct v_U32_t fTDLSRSSIHysteresis; v_S31_t fTDLSRSSITriggerThreshold; v_S31_t fTDLSRSSITeardownThreshold; + v_U32_t fTDLSUapsdMask; // what ACs to setup U-APSD for TDLS + v_U32_t fEnableTDLSBufferSta; + v_U32_t fTDLSPuapsdInactivityTimer; + v_U32_t fTDLSRxFrameThreshold; #endif #ifdef WLAN_SOFTAP_VSTA_FEATURE v_BOOL_t fEnableVSTASupport; @@ -2241,10 +2447,38 @@ typedef struct v_U8_t retryLimitZero; v_U8_t retryLimitOne; v_U8_t retryLimitTwo; + v_U8_t disableAggWithBtc; char listOfNonDfsCountryCode[128]; v_BOOL_t enableSSR; char listOfNon11acCountryCode[128]; + v_U32_t cfgMaxMediumTime; + v_U8_t enableTrafficMonitor; + v_U32_t trafficIdleTimeout; + v_BOOL_t enableVhtFor24GHzBand; v_U8_t fScanOffload; +#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD + /* Flag indicating whether legacy fast roam during concurrency is enabled in cfg.ini or not */ + v_BOOL_t bFastRoamInConIniFeatureEnabled; +#endif + v_BOOL_t fEnableAdaptRxDrain; + //TX and RX traffic threshold for split scan + v_U8_t txRxThresholdForSplitScan; + v_U8_t dynSplitscan; //Enable/Disable dynamic + //splitscan + //Traffic monitor timer for split scan + v_U32_t trafficMntrTmrForSplitScan; + v_U8_t flexConnectPowerFactor; + v_BOOL_t enableIbssHeartBeatOffload; + v_U32_t antennaDiversity; + v_BOOL_t fEnableSNRMonitoring; + /*PNO related parameters */ +#ifdef FEATURE_WLAN_SCAN_PNO + v_BOOL_t configPNOScanSupport; + v_U32_t configPNOScanTimerRepeatValue; +#endif + v_U8_t isAmsduSupportInAMPDU; + v_U8_t nSelect5GHzMargin; + v_U8_t isCoalesingInIBSSAllowed; v_BOOL_t enableTCPChkSumOffld; v_BOOL_t enableIPChecksumOffload; v_BOOL_t enablePowersaveOffload; @@ -2257,7 +2491,6 @@ typedef struct #endif v_U8_t maxWoWFilters; v_U8_t wowEnable; - v_U8_t isCoalesingInIBSSAllowed; } hdd_config_t; /*--------------------------------------------------------------------------- Function declarations and documenation @@ -2272,9 +2505,8 @@ VOS_STATUS hdd_execute_config_command(hdd_context_t *pHddCtx, char *command); tANI_BOOLEAN hdd_is_okc_mode_enabled(hdd_context_t *pHddCtx); VOS_STATUS hdd_set_idle_ps_config(hdd_context_t *pHddCtx, v_U32_t val); -#define FIELD_OFFSET(__type, __field) ((unsigned int)(&((__type *)0)->__field)) -#define VAR_OFFSET( _Struct, _Var ) ( (unsigned int) FIELD_OFFSET(_Struct, _Var ) ) -#define VAR_SIZE( _Struct, _Var ) sizeof( ((_Struct *)0)->_Var ) +#define VAR_OFFSET( _Struct, _Var ) (offsetof(_Struct, _Var)) +#define VAR_SIZE( _Struct, _Var ) (sizeof(((_Struct *)0)->_Var)) #define VAR_FLAGS_NONE ( 0 ) #define VAR_FLAGS_REQUIRED ( 1 << 0 ) // bit 0 is Required or Optional diff --git a/CORE/HDD/inc/wlan_hdd_cfg80211.h b/CORE/HDD/inc/wlan_hdd_cfg80211.h index 4faec258e1a6..09b5557099c5 100644 --- a/CORE/HDD/inc/wlan_hdd_cfg80211.h +++ b/CORE/HDD/inc/wlan_hdd_cfg80211.h @@ -119,11 +119,22 @@ int wlan_hdd_cfg80211_pmksa_candidate_notify( int index, bool preauth ); #endif +#ifdef FEATURE_WLAN_LFR_METRICS +VOS_STATUS wlan_hdd_cfg80211_roam_metrics_preauth(hdd_adapter_t *pAdapter, + tCsrRoamInfo *pRoamInfo); + +VOS_STATUS wlan_hdd_cfg80211_roam_metrics_preauth_status( + hdd_adapter_t *pAdapter, tCsrRoamInfo *pRoamInfo, bool preauth_status); + +VOS_STATUS wlan_hdd_cfg80211_roam_metrics_handover(hdd_adapter_t *pAdapter, + tCsrRoamInfo *pRoamInfo); +#endif + #ifdef FEATURE_WLAN_WAPI void wlan_hdd_cfg80211_set_key_wapi(hdd_adapter_t* pAdapter, u8 key_index, const u8 *mac_addr, u8 *key , int key_Len); #endif -struct wiphy *wlan_hdd_cfg80211_init(int priv_size); +struct wiphy *wlan_hdd_cfg80211_wiphy_alloc(int priv_size); int wlan_hdd_cfg80211_scan( struct wiphy *wiphy, #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,6,0)) @@ -131,23 +142,33 @@ int wlan_hdd_cfg80211_scan( struct wiphy *wiphy, #endif struct cfg80211_scan_request *request); -int wlan_hdd_cfg80211_register(struct device *dev, +int wlan_hdd_cfg80211_init(struct device *dev, struct wiphy *wiphy, hdd_config_t *pCfg ); +int wlan_hdd_cfg80211_register( struct wiphy *wiphy); void wlan_hdd_cfg80211_post_voss_start(hdd_adapter_t* pAdapter); void wlan_hdd_cfg80211_pre_voss_stop(hdd_adapter_t* pAdapter); +#ifdef CONFIG_ENABLE_LINUX_REG +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0)) +void wlan_hdd_linux_reg_notifier(struct wiphy *wiphy, struct regulatory_request *request); +#else +int wlan_hdd_linux_reg_notifier(struct wiphy *wiphy, struct regulatory_request *request); +#endif +#else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0)) void wlan_hdd_crda_reg_notifier(struct wiphy *wiphy, struct regulatory_request *request); #else int wlan_hdd_crda_reg_notifier(struct wiphy *wiphy, struct regulatory_request *request); #endif -int wlan_hdd_get_crda_regd_entry(struct wiphy *wiphy, hdd_config_t *pCfg); +#endif + extern v_VOID_t hdd_connSetConnectionState( hdd_station_ctx_t *pHddStaCtx, eConnectionState connState ); +VOS_STATUS wlan_hdd_validate_operation_channel(hdd_adapter_t *pAdapter,int channel); #ifdef FEATURE_WLAN_TDLS int wlan_hdd_cfg80211_send_tdls_discover_req(struct wiphy *wiphy, struct net_device *dev, u8 *peer); @@ -156,9 +177,10 @@ int wlan_hdd_cfg80211_send_tdls_discover_req(struct wiphy *wiphy, extern void wlan_hdd_cfg80211_update_replayCounterCallback(void *callbackContext, tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp); #endif - +void* wlan_hdd_change_country_code_cb(void *pAdapter); void hdd_select_cbmode( hdd_adapter_t *pAdapter,v_U8_t operationChannel); +v_U8_t* wlan_hdd_cfg80211_get_ie_ptr(v_U8_t *pIes, int length, v_U8_t eid); #if defined(QCA_WIFI_2_0) && defined(QCA_WIFI_FTM) \ && !defined(QCA_WIFI_ISOC) && defined(CONFIG_NL80211_TESTMODE) diff --git a/CORE/HDD/inc/wlan_hdd_debugfs.h b/CORE/HDD/inc/wlan_hdd_debugfs.h new file mode 100644 index 000000000000..557b76163270 --- /dev/null +++ b/CORE/HDD/inc/wlan_hdd_debugfs.h @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2013, The Linux Foundation. All rights reserved. + * + * Previously licensed under the ISC license by Qualcomm Atheros, Inc. + * + * + * Permission to use, copy, modify, and/or distribute this software for + * any purpose with or without fee is hereby granted, provided that the + * above copyright notice and this permission notice appear in all + * copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL + * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE + * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +/* + * This file was originally distributed by Qualcomm Atheros, Inc. + * under proprietary terms before Copyright ownership was assigned + * to the Linux Foundation. + */ + +#ifndef _WLAN_HDD_DEBUGFS_H +#define _WLAN_HDD_DEBUGFS_H + +#ifdef WLAN_OPEN_SOURCE +VOS_STATUS hdd_debugfs_init(hdd_adapter_t *pAdapter); +void hdd_debugfs_exit(hdd_context_t *pHddCtx); +#else +inline VOS_STATUS hdd_debugfs_init(hdd_adapter_t *pAdapter) +{ + return VOS_STATUS_SUCCESS; +} +inline void hdd_debugfs_exit(hdd_context_t *pHddCtx) +{ +} +#endif /* #ifdef WLAN_OPEN_SOURCE */ +#endif /* #ifndef _WLAN_HDD_DEBUGFS_H */ + diff --git a/CORE/HDD/inc/wlan_hdd_dev_pwr.h b/CORE/HDD/inc/wlan_hdd_dev_pwr.h index ef16e0331a72..e963922fe0f2 100644 --- a/CORE/HDD/inc/wlan_hdd_dev_pwr.h +++ b/CORE/HDD/inc/wlan_hdd_dev_pwr.h @@ -33,6 +33,7 @@ #include #include +#ifdef QCA_WIFI_ISOC /*---------------------------------------------------------------------------- @brief Registration function. @@ -71,11 +72,67 @@ VOS_STATUS hddDeregisterPmOps(hdd_context_t *pHddCtx); @param dev : Device context changedTmLevel : Changed new TM level - @return + @return ----------------------------------------------------------------------------*/ void hddDevTmLevelChangedHandler(struct device *dev, int changedTmLevel); +#else + +/*---------------------------------------------------------------------------- + + @brief Registration function. + Register suspend, resume callback functions with platform driver. + + @param hdd_context_t pHddCtx + Global hdd context + + @return General status code + VOS_STATUS_SUCCESS Registration Success + VOS_STATUS_E_FAILURE Registration Fail + +----------------------------------------------------------------------------*/ +static inline VOS_STATUS hddRegisterPmOps(hdd_context_t *pHddCtx) +{ + return VOS_STATUS_SUCCESS; +} + +/*---------------------------------------------------------------------------- + + @brief De-registration function. + Deregister the suspend, resume callback functions with platform driver + + @param hdd_context_t pHddCtx + Global hdd context + + @return General status code + VOS_STATUS_SUCCESS De-Registration Success + VOS_STATUS_E_FAILURE De-Registration Fail + +----------------------------------------------------------------------------*/ +static inline VOS_STATUS hddDeregisterPmOps(hdd_context_t *pHddCtx) +{ + return VOS_STATUS_SUCCESS; +} + +/*---------------------------------------------------------------------------- + + @brief TM Level Change handler + Received Tm Level changed notification + + @param dev : Device context + changedTmLevel : Changed new TM level + + @return + +----------------------------------------------------------------------------*/ +static inline void hddDevTmLevelChangedHandler(struct device *dev, + int changedTmLevel) +{ + return; +} +#endif /*QCA_WIFI_ISOC*/ + /*---------------------------------------------------------------------------- @brief Register function diff --git a/CORE/HDD/inc/wlan_hdd_ftm.h b/CORE/HDD/inc/wlan_hdd_ftm.h index b108ecccdb87..730b67c8ec81 100644 --- a/CORE/HDD/inc/wlan_hdd_ftm.h +++ b/CORE/HDD/inc/wlan_hdd_ftm.h @@ -60,6 +60,9 @@ #define WE_CLEAR_RX_PKT_CNT 8 #define WE_RX 9 #define WE_ENABLE_CHAIN 10 +#define WE_SET_PWR_CNTL_MODE 11 +#define WE_ENABLE_DPD 12 +#define WE_SET_CB 13 /* Private ioctls and their sub-ioctls */ #define WLAN_FTM_PRIV_SET_NONE_GET_INT (SIOCIWFIRSTPRIV + 1) @@ -93,7 +96,7 @@ #define WE_FTM_MAX_STR_LEN 1024 -#define MAX_NV_TABLE_SIZE 30000 +#define MAX_NV_TABLE_SIZE 40000 typedef enum { WLAN_FTM_CMD_START = 1, diff --git a/CORE/HDD/inc/wlan_hdd_hostapd.h b/CORE/HDD/inc/wlan_hdd_hostapd.h index b09437b92f31..dccdfed1f51e 100644 --- a/CORE/HDD/inc/wlan_hdd_hostapd.h +++ b/CORE/HDD/inc/wlan_hdd_hostapd.h @@ -89,5 +89,4 @@ int hdd_softap_unpackIE( tHalHandle halHandle, VOS_STATUS hdd_hostapd_SAPEventCB( tpSap_Event pSapEvent, v_PVOID_t usrDataForCallback); VOS_STATUS hdd_init_ap_mode( hdd_adapter_t *pAdapter ); void hdd_set_ap_ops( struct net_device *pWlanHostapdDev ); - #endif // end #if !defined( WLAN_HDD_HOSTAPD_H ) diff --git a/CORE/HDD/inc/wlan_hdd_main.h b/CORE/HDD/inc/wlan_hdd_main.h index 851d46584569..3f124b4d3d54 100644 --- a/CORE/HDD/inc/wlan_hdd_main.h +++ b/CORE/HDD/inc/wlan_hdd_main.h @@ -69,8 +69,6 @@ #define LIBRA_CARD_REMOVE_DETECT_MAX_COUNT 5 /** Number of Tx Queues */ #define NUM_TX_QUEUES 4 -/** Queue length specified to OS in the net_device */ -#define NET_DEV_TX_QUEUE_LEN 100 /** HDD's internal Tx Queue Length. Needs to be a power of 2 */ #define HDD_TX_QUEUE_MAX_LEN 128 /** HDD internal Tx Queue Low Watermark. Net Device TX queue is disabled @@ -101,6 +99,8 @@ #define WLAN_WAIT_TIME_DISCONNECT 500 #define WLAN_WAIT_TIME_STATS 800 #define WLAN_WAIT_TIME_POWER 800 +#define WLAN_WAIT_TIME_COUNTRY 1000 +#define WLAN_WAIT_TIME_CHANNEL_UPDATE 600 /* Amount of time to wait for sme close session callback. This value should be larger than the timeout used by WDI to wait for a response from WCNSS */ @@ -123,13 +123,21 @@ /** Maximum time(ms) to wait for tdls del sta to complete **/ #define WAIT_TIME_TDLS_DEL_STA 1500 +/** Maximum time(ms) to wait for Link Establish Req to complete **/ +#define WAIT_TIME_TDLS_LINK_ESTABLISH_REQ 1500 + /** Maximum time(ms) to wait for tdls mgmt to complete **/ #define WAIT_TIME_TDLS_MGMT 11000 /** Maximum time(ms) to wait for tdls initiator to start direct communication **/ -#define WAIT_TIME_TDLS_INITIATOR 300 -/* Maximum time to get crda entry settings */ +#define WAIT_TIME_TDLS_INITIATOR 600 + +/* Maximum time to get linux regulatory entry settings */ +#ifdef CONFIG_ENABLE_LINUX_REG +#define LINUX_REG_WAIT_TIME 300 +#else #define CRDA_WAIT_TIME 300 +#endif /* Scan Req Timeout */ #define WLAN_WAIT_TIME_SCAN_REQ 100 @@ -141,6 +149,7 @@ #define MAC_ADDR_ARRAY(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5] /** Mac Address string **/ #define MAC_ADDRESS_STR "%02x:%02x:%02x:%02x:%02x:%02x" +#define MAC_ADDRESS_STR_LEN 18 /* Including null terminator */ #define MAX_GENIE_LEN 255 #define WLAN_CHIP_VERSION "WCNSS" @@ -161,6 +170,13 @@ #define WLAN_HDD_P2P_SOCIAL_CHANNELS 3 #define WLAN_HDD_P2P_SINGLE_CHANNEL_SCAN 1 +#define WLAN_HDD_IS_SOCIAL_CHANNEL(center_freq) \ +(((center_freq) == 2412) || ((center_freq) == 2437) || ((center_freq) == 2462)) + +#define WLAN_HDD_CHANNEL_IN_UNII_1_BAND(center_freq) \ +(((center_freq) == 5180 ) || ((center_freq) == 5200) \ +|| ((center_freq) == 5220) || ((center_freq) == 5240)) + #ifdef WLAN_FEATURE_11W #define WLAN_HDD_SA_QUERY_ACTION_FRAME 8 #endif @@ -168,22 +184,62 @@ #define WLAN_HDD_PUBLIC_ACTION_TDLS_DISC_RESP 14 #define WLAN_HDD_TDLS_ACTION_FRAME 12 #ifdef WLAN_FEATURE_HOLD_RX_WAKELOCK -#define HDD_WAKE_LOCK_DURATION 500 //in msecs +#define HDD_WAKE_LOCK_DURATION 50 //in msecs #endif #define HDD_SAP_WAKE_LOCK_DURATION 10000 //in msecs +#define HDD_MOD_EXIT_SSR_MAX_RETRIES 30 + /* Maximum number of interfaces allowed(STA, P2P Device, P2P Interfaces) */ +#ifndef QCA_WIFI_2_0 +#define WLAN_MAX_INTERFACES 3 +#else #define WLAN_MAX_INTERFACES 4 +#endif #ifdef WLAN_FEATURE_GTK_OFFLOAD #define GTK_OFFLOAD_ENABLE 0 #define GTK_OFFLOAD_DISABLE 1 #endif +#ifdef FEATURE_WLAN_SCAN_PNO +#define HDD_PNO_SCAN_TIMERS_SET_ONE 1 +/* value should not be greater than PNO_MAX_SCAN_TIMERS */ +#define HDD_PNO_SCAN_TIMERS_SET_MULTIPLE 6 +#endif + #define HDD_MAC_ADDR_LEN 6 +#define HDD_ROAM_SCAN_CHANNEL_SWITCH_TIME 3 +#define HDD_SESSION_ID_ANY 50 //This should be same as CSR_SESSION_ID_ANY typedef v_U8_t tWlanHddMacAddr[HDD_MAC_ADDR_LEN]; +struct statsContext +{ + struct completion completion; + hdd_adapter_t *pAdapter; + unsigned int magic; +}; + +#define STATS_CONTEXT_MAGIC 0x53544154 //STAT + +#ifdef FEATURE_WLAN_BATCH_SCAN +#define HDD_BATCH_SCAN_VERSION (17) +#define HDD_SET_BATCH_SCAN_DEFAULT_FREQ (30)/*batch scan frequency default 30s*/ +#define HDD_SET_BATCH_SCAN_BEST_NETWORK (16)/*best network default value*/ +#define HDD_SET_BATCH_SCAN_DEFAULT_BAND (0)/*auto means both 2.4GHz and 5GHz*/ +#define HDD_SET_BATCH_SCAN_24GHz_BAND_ONLY (1)/*only 2.4GHz band*/ +#define HDD_SET_BATCH_SCAN_5GHz_BAND_ONLY (2)/*only 5GHz band*/ +#define HDD_SET_BATCH_SCAN_REQ_TIME_OUT (15000) /*Batch scan req timeout in ms*/ +#define HDD_GET_BATCH_SCAN_RSP_TIME_OUT (15000) /*Batch scan req timeout in ms*/ +#define HDD_BATCH_SCAN_AP_META_INFO_SIZE (150) /*AP meta info size in string*/ + +#ifndef QCA_WIFI_2_0 +#define MIN(a, b) (a > b ? b : a) +#endif +#endif + + typedef struct hdd_tx_rx_stats_s { // start_xmit stats @@ -216,6 +272,9 @@ typedef struct hdd_tx_rx_stats_s __u32 rxDropped; __u32 rxDelivered; __u32 rxRefused; + __u32 pkt_tx_count; //TX pkt Counter used for dynamic splitscan + __u32 pkt_rx_count; //RX pkt Counter used for dynamic splitscan + } hdd_tx_rx_stats_t; typedef struct hdd_chip_reset_stats_s @@ -509,6 +568,32 @@ typedef enum{ HDD_SSR_DISABLED, }e_hdd_ssr_required; +#ifdef FEATURE_CESIUM_PROPRIETARY +/*--------------------------------------------------------------------------- + hdd_ibss_peer_info_params_t +---------------------------------------------------------------------------*/ +typedef struct +{ + v_U8_t staIdx; //StaIdx + v_U32_t txRate; //Current Tx Rate + v_U32_t mcsIndex; //MCS Index + v_U32_t txRateFlags; //TxRate Flags + v_S7_t rssi; //RSSI +}hdd_ibss_peer_info_params_t; + +typedef struct +{ + /** Request status */ + v_U32_t status; + + /** Number of peers */ + v_U8_t numIBSSPeers; + + /** Peer Info parameters */ + hdd_ibss_peer_info_params_t ibssPeerList[HDD_MAX_NUM_IBSS_STA]; +}hdd_ibss_peer_info_t; +#endif + struct hdd_station_ctx { /** Handle to the Wireless Extension State */ @@ -524,8 +609,6 @@ struct hdd_station_ctx roaming_info_t roam_info; - v_BOOL_t bSendDisconnect; - #if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR) int ft_carrier_on; #endif @@ -535,6 +618,14 @@ struct hdd_station_ctx #endif /*Increment whenever ibss New peer joins and departs the network */ int ibss_sta_generation; + + /*Save the wep/wpa-none keys*/ + tCsrRoamSetKey ibss_enc_key; +#ifdef FEATURE_CESIUM_PROPRIETARY + hdd_ibss_peer_info_t ibss_peer_info; +#endif + + v_BOOL_t hdd_ReassocScenario; }; #define BSS_STOP 0 @@ -576,6 +667,9 @@ typedef struct { /**Track whether OS TX queue has been disabled.*/ v_BOOL_t txSuspended[NUM_TX_QUEUES]; + /**Track whether 3/4th of resources are used */ + v_BOOL_t vosLowResource; + /** Track QoS status of station */ v_BOOL_t isQosEnabled; @@ -638,6 +732,10 @@ typedef struct hdd_scaninfo_s /* The scan pending */ v_U32_t mScanPending; + /* Counter for mScanPending so that the scan pending + error log is not printed for more than 5 times */ + v_U32_t mScanPendingCounter; + /* Client Wait Scan Result */ v_U32_t waitScanResult; @@ -670,6 +768,53 @@ typedef struct multicast_addr_list } t_multicast_add_list; #endif +#ifdef FEATURE_WLAN_BATCH_SCAN + +/*Batch scan repsonse AP info*/ +typedef struct +{ + /*Batch ID*/ + tANI_U32 batchId; + /*is it last AP in GET BATCH SCAN RSP*/ + v_BOOL_t isLastAp; + /*BSSID*/ + tANI_U8 bssid[SIR_MAC_ADDR_LEN]; + /*SSID*/ + tANI_U8 ssid[SIR_MAX_SSID_SIZE]; + /*Channel*/ + tANI_U8 ch; + /*RSSI or Level*/ + tANI_U8 rssi; + /*Age*/ + tANI_U32 age; +}tHDDbatchScanRspApInfo; + +/*Batch scan response list*/ +struct tHDDBatchScanRspList +{ + tHDDbatchScanRspApInfo ApInfo; + struct tHDDBatchScanRspList *pNext; +}; + +typedef struct tHDDBatchScanRspList tHddBatchScanRsp; + +/*Batch Scan state*/ +typedef enum +{ + /*Batch scan is started this means WLS_BATCHING SET command is issued + from framework*/ + eHDD_BATCH_SCAN_STATE_STARTED, + + /*Batch scan is stopped this means WLS_BATCHING STOP command is issued + from framework*/ + eHDD_BATCH_SCAN_STATE_STOPPED, + + eHDD_BATCH_SCAN_STATE_MAX, +} eHDD_BATCH_SCAN_STATE; + +#endif + + #define WLAN_HDD_ADAPTER_MAGIC 0x574c414e //ASCII "WLAN" struct hdd_adapter_s { @@ -742,8 +887,14 @@ struct hdd_adapter_s struct completion tdls_add_station_comp; struct completion tdls_del_station_comp; struct completion tdls_mgmt_comp; + struct completion tdls_link_establish_req_comp; eHalStatus tdlsAddStaStatus; #endif + +#ifdef FEATURE_CESIUM_PROPRIETARY + struct completion ibss_peer_info_comp; +#endif /* FEATURE_CESIUM_PROPRIETARY */ + /* Track whether the linkup handling is needed */ v_BOOL_t isLinkUpSvcNeeded; @@ -757,6 +908,9 @@ struct hdd_adapter_s hdd_list_t wmm_tx_queue[NUM_TX_QUEUES]; /**Track whether VOS is in a low resource state*/ v_BOOL_t isVosOutOfResource; + + /**Track whether 3/4th of resources are used */ + v_BOOL_t isVosLowResource; /**Track whether OS TX queue has been disabled.*/ v_BOOL_t isTxSuspended[NUM_TX_QUEUES]; @@ -783,6 +937,9 @@ struct hdd_adapter_s #endif v_S7_t rssi; + + tANI_U8 snr; + struct work_struct monTxWorkQueue; struct sk_buff *skb_to_tx; @@ -801,8 +958,49 @@ struct hdd_adapter_s //Magic cookie for adapter sanity verification v_U32_t magic; v_BOOL_t higherDtimTransition; + v_BOOL_t survey_idx; + +#ifdef FEATURE_WLAN_BATCH_SCAN + /*Completion variable for set batch scan request*/ + struct completion hdd_set_batch_scan_req_var; + /*Completion variable for get batch scan request*/ + struct completion hdd_get_batch_scan_req_var; + /*HDD batch scan lock*/ + struct mutex hdd_batch_scan_lock; + /*HDD set batch scan request*/ + tSirSetBatchScanReq hddSetBatchScanReq; + /*HDD set batch scan response*/ + tSirSetBatchScanRsp hddSetBatchScanRsp; + /*HDD stop batch scan indication*/ + tSirStopBatchScanInd hddStopBatchScanInd; + /*HDD get batch scan request*/ + tSirTriggerBatchScanResultInd hddTriggerBatchScanResultInd; + /*Batched scan reponse queue: new batch scan results added at the tail + and old batch scan results are deleted from head*/ + tHddBatchScanRsp *pBatchScanRsp; + /*No of scans in batch scan rsp(MSCAN)*/ + v_U32_t numScanList; + /*isTruncated = 1 batch scan rsp is truncated + isTruncated = 0 batch scan rsp is complete*/ + v_BOOL_t isTruncated; + /*Wait for get batch scan response from FW or not*/ + volatile v_BOOL_t hdd_wait_for_get_batch_scan_rsp; + /*Wait for set batch scan response from FW or not*/ + volatile v_BOOL_t hdd_wait_for_set_batch_scan_rsp; + /*Previous batch scan ID*/ + v_U32_t prev_batch_id; + /*Batch scan state*/ + eHDD_BATCH_SCAN_STATE batchScanState; +#endif hdd_scaninfo_t scan_info; +#if defined(FEATURE_WLAN_CCX) && defined(FEATURE_WLAN_CCX_UPLOAD) + tAniTrafStrmMetrics tsmStats; +#endif + /* Flag to ensure PSB is configured through framework */ + v_U8_t psbChanged; + /* UAPSD psb value configured through framework */ + v_U8_t configuredPsb; #ifdef QCA_WIFI_2_0 v_BOOL_t internalCancelRemainOnChReq; #endif @@ -816,10 +1014,12 @@ struct hdd_adapter_s #define WLAN_HDD_GET_HOSTAP_STATE_PTR(pAdapter) (&(pAdapter)->sessionCtx.ap.HostapdState) #define WLAN_HDD_GET_CFG_STATE_PTR(pAdapter) (&(pAdapter)->cfg80211State) #ifdef FEATURE_WLAN_TDLS -#define WLAN_HDD_GET_TDLS_CTX_PTR(pAdapter) \ +#define WLAN_HDD_IS_TDLS_SUPPORTED_ADAPTER(pAdapter) \ (((WLAN_HDD_INFRA_STATION != pAdapter->device_mode) && \ - (WLAN_HDD_P2P_CLIENT != pAdapter->device_mode)) ? NULL : \ - (tdlsCtx_t*)(pAdapter)->sessionCtx.station.pHddTdlsCtx) + (WLAN_HDD_P2P_CLIENT != pAdapter->device_mode)) ? 0 : 1) +#define WLAN_HDD_GET_TDLS_CTX_PTR(pAdapter) \ + ((WLAN_HDD_IS_TDLS_SUPPORTED_ADAPTER(pAdapter)) ? \ + (tdlsCtx_t*)(pAdapter)->sessionCtx.station.pHddTdlsCtx : NULL) #endif typedef struct hdd_adapter_list_node @@ -835,6 +1035,15 @@ typedef struct hdd_priv_data_s int total_len; }hdd_priv_data_t; +typedef struct +{ + vos_timer_t trafficTimer; + atomic_t isActiveMode; + v_U8_t isInitialized; + vos_lock_t trafficLock; + v_TIME_t lastFrameTs; +}hdd_traffic_monitor_t; + /** Adapter stucture definition */ struct hdd_context_s @@ -887,8 +1096,17 @@ struct hdd_context_s /* Completion variable to indicate Mc Thread Suspended */ struct completion mc_sus_event_var; - /* Completion variable to wlan_hdd_get_crda_regd_entry */ + /* Completion variable for regulatory hint */ +#ifdef CONFIG_ENABLE_LINUX_REG + struct completion linux_reg_req; +#else struct completion driver_crda_req; +#endif + + /* Completion variable to indicate updation of channel */ + struct completion wiphy_channel_update_event; + + v_BOOL_t nEnableStrictRegulatoryForFCC; v_BOOL_t isWlanSuspended; @@ -923,6 +1141,9 @@ struct hdd_context_s /** ptt Process ID*/ v_SINT_t ptt_pid; +#ifdef WLAN_KD_READY_NOTIFIER + v_BOOL_t kd_nl_init; +#endif /* WLAN_KD_READY_NOTIFIER */ #ifdef FEATURE_OEM_DATA_SUPPORT #ifdef QCA_WIFI_2_0 @@ -939,7 +1160,7 @@ struct hdd_context_s /** Concurrency Parameters*/ tVOS_CONCURRENCY_MODE concurrency_mode; - v_U16_t no_of_sessions[VOS_MAX_NO_OF_MODE]; + v_U16_t no_of_sessions[VOS_MAX_NO_OF_MODE + 1]; hdd_chip_reset_stats_t hddChipResetStats; /* Number of times riva restarted */ @@ -986,8 +1207,12 @@ struct hdd_context_s /* TDLS peer connected count */ tANI_U16 connected_peer_count; tdls_scan_context_t tdls_scan_ctxt; + /* Lock to avoid race condition during TDLS operations*/ + struct mutex tdls_lock; #endif + hdd_traffic_monitor_t traffic_monitor; + /* MC/BC Filter state variable * This always contains the value that is currently * configured @@ -995,10 +1220,36 @@ struct hdd_context_s v_U8_t configuredMcastBcastFilter; v_U8_t sus_res_mcastbcast_filter; + + v_BOOL_t sus_res_mcastbcast_filter_valid; + + /* debugfs entry */ + struct dentry *debugfs_phy; + + /* Use below lock to protect access to isSchedScanUpdatePending + * since it will be accessed in two different contexts. + */ + spinlock_t schedScan_lock; + + // Flag keeps track of wiphy suspend/resume + v_BOOL_t isWiphySuspended; + + // Indicates about pending sched_scan results + v_BOOL_t isSchedScanUpdatePending; + /* + * TX_rx_pkt_count_timer + */ + vos_timer_t tx_rx_trafficTmr; + v_U8_t drvr_miracast; + v_U8_t issplitscan_enabled; + + /* VHT80 allowed*/ + v_BOOL_t isVHT80Allowed; + + struct completion ready_to_suspend; #ifdef QCA_WIFI_2_0 v_U32_t target_type; v_U32_t target_fw_version; - struct completion ready_to_suspend; #endif }; @@ -1057,7 +1308,7 @@ v_BOOL_t hdd_is_suspend_notify_allowed(hdd_context_t* pHddCtx); void hdd_abort_mac_scan(hdd_context_t *pHddCtx, tANI_U8 sessionId); void wlan_hdd_set_monitor_tx_adapter( hdd_context_t *pHddCtx, hdd_adapter_t *pAdapter ); void hdd_cleanup_actionframe( hdd_context_t *pHddCtx, hdd_adapter_t *pAdapter ); -v_BOOL_t is_crda_regulatory_entry_valid(void); + void crda_regulatory_entry_default(v_U8_t *countryCode, int domain_id); void wlan_hdd_set_concurrency_mode(hdd_context_t *pHddCtx, tVOS_CON_MODE mode); void wlan_hdd_clear_concurrency_mode(hdd_context_t *pHddCtx, tVOS_CON_MODE mode); @@ -1071,8 +1322,28 @@ void hdd_set_ssr_required(e_hdd_ssr_required value); VOS_STATUS hdd_enable_bmps_imps(hdd_context_t *pHddCtx); VOS_STATUS hdd_disable_bmps_imps(hdd_context_t *pHddCtx, tANI_U8 session_type); +#ifdef QCA_WIFI_2_0 +void wlan_hdd_cfg80211_update_wiphy_caps(struct wiphy *wiphy); +#endif +void wlan_hdd_cfg80211_update_reg_info(struct wiphy *wiphy); VOS_STATUS wlan_hdd_restart_driver(hdd_context_t *pHddCtx); void hdd_exchange_version_and_caps(hdd_context_t *pHddCtx); void hdd_set_pwrparams(hdd_context_t *pHddCtx); void hdd_reset_pwrparams(hdd_context_t *pHddCtx); +int wlan_hdd_validate_context(hdd_context_t *pHddCtx); +v_BOOL_t hdd_is_valid_mac_address(const tANI_U8* pMacAddr); +VOS_STATUS hdd_issta_p2p_clientconnected(hdd_context_t *pHddCtx); +#ifdef WLAN_FEATURE_PACKET_FILTERING +int wlan_hdd_setIPv6Filter(hdd_context_t *pHddCtx, tANI_U8 filterType, tANI_U8 sessionId); +#endif + +#ifdef FEATURE_CESIUM_PROPRIETARY +v_MACADDR_t* hdd_wlan_get_ibss_mac_addr_from_staid(hdd_adapter_t *pAdapter, v_U8_t staIdx); +#endif /* FEATURE_CESIUM_PROPRIETARY */ + +#ifdef CONFIG_ENABLE_LINUX_REG +void hdd_checkandupdate_phymode( hdd_context_t *pHddCtx); +#endif + +int hdd_wmmps_helper(hdd_adapter_t *pAdapter, tANI_U8 *ptr); #endif // end #if !defined( WLAN_HDD_MAIN_H ) diff --git a/CORE/HDD/inc/wlan_hdd_p2p.h b/CORE/HDD/inc/wlan_hdd_p2p.h index a603eb545236..7af644ad9fb2 100644 --- a/CORE/HDD/inc/wlan_hdd_p2p.h +++ b/CORE/HDD/inc/wlan_hdd_p2p.h @@ -191,5 +191,4 @@ int wlan_hdd_del_virtual_intf( struct wiphy *wiphy, struct wireless_dev *wdev ); int wlan_hdd_del_virtual_intf( struct wiphy *wiphy, struct net_device *dev ); #endif - #endif // __P2P_H diff --git a/CORE/HDD/inc/wlan_hdd_packet_filtering.h b/CORE/HDD/inc/wlan_hdd_packet_filtering.h index 843800b80505..98634e7e4359 100644 --- a/CORE/HDD/inc/wlan_hdd_packet_filtering.h +++ b/CORE/HDD/inc/wlan_hdd_packet_filtering.h @@ -42,10 +42,20 @@ #ifdef WLAN_FEATURE_PACKET_FILTERING + #define HDD_MAX_CMP_PER_PACKET_FILTER 5 +#define HDD_FILTER_IPV6_MC_UC 1 +#define HDD_FILTER_IPV6_MC 0 +#define HDD_FILTER_ID_IPV6_MC 10 +#define HDD_FILTER_ID_IPV6_UC 11 + +#define HDD_IPV6_MC_CMP_DATA 0x33 +#define HDD_IPV6_UC_CMP_DATA 0x01 +#define HDD_IPV6_CMP_DATA_0 0x86 +#define HDD_IPV6_CMP_DATA_1 0xDD -#define HDD_WLAN_MAC_ADDR_LEN 6 -#define HDD_MAX_NUM_MULTICAST_ADDRESS 10 +#define HDD_WLAN_MAC_ADDR_LEN 6 +#define HDD_MAX_NUM_MULTICAST_ADDRESS 10 typedef enum { diff --git a/CORE/HDD/inc/wlan_hdd_softap_tx_rx.h b/CORE/HDD/inc/wlan_hdd_softap_tx_rx.h index c80678a8f6e2..ff436df4ca67 100644 --- a/CORE/HDD/inc/wlan_hdd_softap_tx_rx.h +++ b/CORE/HDD/inc/wlan_hdd_softap_tx_rx.h @@ -25,7 +25,6 @@ * to the Linux Foundation. */ - #if !defined( WLAN_HDD_SOFTAP_TX_RX_H ) #define WLAN_HDD_SOFTAP_TX_RX_H @@ -324,4 +323,38 @@ extern VOS_STATUS hdd_softap_change_STA_state( hdd_adapter_t *pAdapter, v_MACADD =========================================================================== */ extern VOS_STATUS hdd_softap_GetStaId( hdd_adapter_t *pAdapter, v_MACADDR_t *pMacAddress, v_U8_t *staId); +/**============================================================================ + @brief hdd_softap_GetConnectedStaId - Helper function to get station Id of the connected device + + @param pAdapter : [in] pointer to adapter context + @param staId : [out] station id + @return : VOS_STATUS_E_FAILURE if any errors encountered + : VOS_STATUS_SUCCESS otherwise + =========================================================================== */ +extern VOS_STATUS hdd_softap_GetConnectedStaId( hdd_adapter_t *pAdapter, v_U8_t *staId); + +/**========================================================================== + + \brief hdd_start_trafficMonitor() - + This function dynamically enable traffic monitor functonality + the command iwpriv wlanX setTrafficMon . + + @param pAdapter : [in] pointer to adapter context + @return : VOS_STATUS_E_FAILURE if any errors encountered + + ========================================================================== */ +VOS_STATUS hdd_start_trafficMonitor( hdd_adapter_t *pAdapter ); + +/**========================================================================== + + \brief hdd_stop_trafficMonitor() - + This function dynamically disable traffic monitor functonality + the command iwpriv wlanX setTrafficMon . + + @param pAdapter : [in] pointer to adapter context + @return : VOS_STATUS_E_FAILURE if any errors encountered + + ========================================================================== */ +VOS_STATUS hdd_stop_trafficMonitor( hdd_adapter_t *pAdapter ); + #endif // end #if !defined( WLAN_HDD_SOFTAP_TX_RX_H ) diff --git a/CORE/HDD/inc/wlan_hdd_tdls.h b/CORE/HDD/inc/wlan_hdd_tdls.h index 6f6c65281221..ae46a619ee9d 100644 --- a/CORE/HDD/inc/wlan_hdd_tdls.h +++ b/CORE/HDD/inc/wlan_hdd_tdls.h @@ -33,6 +33,9 @@ \brief Linux HDD TDLS include file +Copyright (c) 2012-2013 Qualcomm Atheros, Inc. +All Rights Reserved. +Qualcomm Atheros Confidential and Proprietary. ==========================================================================*/ #define MAX_NUM_TDLS_PEER 3 @@ -163,6 +166,9 @@ typedef struct _hddTdlsPeer_t { tANI_U16 discovery_attempt; tANI_U16 tx_pkt; tANI_U16 rx_pkt; + tANI_U8 uapsdQueues; + tANI_U8 maxSp; + tANI_U8 isBufSta; vos_timer_t peerIdleTimer; vos_timer_t initiatorWaitTimeoutTimer; } hddTdlsPeer_t; @@ -188,10 +194,12 @@ int wlan_hdd_tdls_increment_pkt_count(hdd_adapter_t *pAdapter, u8 *mac, u8 tx); int wlan_hdd_tdls_set_sta_id(hdd_adapter_t *pAdapter, u8 *mac, u8 staId); -hddTdlsPeer_t *wlan_hdd_tdls_find_peer(hdd_adapter_t *pAdapter, u8 *mac); +hddTdlsPeer_t *wlan_hdd_tdls_find_peer(hdd_adapter_t *pAdapter, u8 *mac, tANI_BOOLEAN mutexLock); hddTdlsPeer_t *wlan_hdd_tdls_find_all_peer(hdd_context_t *pHddCtx, u8 *mac); +int wlan_hdd_tdls_get_link_establish_params(hdd_adapter_t *pAdapter, u8 *mac, + tCsrTdlsLinkEstablishParams* tdlsLinkEstablishParams); hddTdlsPeer_t *wlan_hdd_tdls_get_peer(hdd_adapter_t *pAdapter, u8 *mac); int wlan_hdd_tdls_set_cap(hdd_adapter_t *pAdapter, u8* mac, tTDLSCapType cap); @@ -202,6 +210,12 @@ void wlan_hdd_tdls_set_link_status(hdd_adapter_t *pAdapter, u8* mac, tTDLSLinkSt int wlan_hdd_tdls_recv_discovery_resp(hdd_adapter_t *pAdapter, u8 *mac); +int wlan_hdd_tdls_set_peer_caps(hdd_adapter_t *pAdapter, + u8 *mac, + tANI_U8 uapsdQueues, + tANI_U8 maxSp, + tANI_BOOLEAN isBufSta); + int wlan_hdd_tdls_set_rssi(hdd_adapter_t *pAdapter, u8 *mac, tANI_S8 rxRssi); int wlan_hdd_tdls_set_responder(hdd_adapter_t *pAdapter, u8 *mac, tANI_U8 responder); @@ -232,7 +246,7 @@ void wlan_hdd_tdls_check_bmps(hdd_adapter_t *pAdapter); u8 wlan_hdd_tdls_is_peer_progress(hdd_adapter_t *pAdapter, u8 *mac); -hddTdlsPeer_t *wlan_hdd_tdls_is_progress(hdd_context_t *pHddCtx, u8* mac, u8 skip_self, tANI_BOOLEAN mutexLock); +hddTdlsPeer_t *wlan_hdd_tdls_is_progress(hdd_context_t *pHddCtx, u8* mac, u8 skip_self); void wlan_hdd_tdls_set_mode(hdd_context_t *pHddCtx, eTDLSSupportMode tdls_mode, diff --git a/CORE/HDD/inc/wlan_hdd_tgt_cfg.h b/CORE/HDD/inc/wlan_hdd_tgt_cfg.h index b36a863b8bd0..dbae06d7136e 100644 --- a/CORE/HDD/inc/wlan_hdd_tgt_cfg.h +++ b/CORE/HDD/inc/wlan_hdd_tgt_cfg.h @@ -32,53 +32,54 @@ #define INTF_MACADDR_MASK 0x7 struct hdd_tgt_services { - u_int32_t sta_power_save; - u_int32_t uapsd; - u_int32_t ap_dfs; - u_int32_t en_11ac; - u_int32_t arp_offload; + u_int32_t sta_power_save; + u_int32_t uapsd; + u_int32_t ap_dfs; + u_int32_t en_11ac; + u_int32_t arp_offload; #ifdef FEATURE_WLAN_SCAN_PNO - v_BOOL_t pno_offload; + v_BOOL_t pno_offload; #endif + u_int32_t lte_coex_ant_share; }; struct hdd_tgt_ht_cap { - u_int32_t mpdu_density; - bool ht_rx_stbc; - bool ht_tx_stbc; - bool ht_rx_ldpc; - bool ht_sgi_20; - bool ht_sgi_40; - u_int32_t num_rf_chains; + u_int32_t mpdu_density; + bool ht_rx_stbc; + bool ht_tx_stbc; + bool ht_rx_ldpc; + bool ht_sgi_20; + bool ht_sgi_40; + u_int32_t num_rf_chains; }; #ifdef WLAN_FEATURE_11AC struct hdd_tgt_vht_cap { - u_int32_t vht_max_mpdu; - u_int32_t supp_chan_width; - u_int32_t vht_rx_ldpc; - u_int32_t vht_short_gi_80; - u_int32_t vht_short_gi_160; - u_int32_t vht_tx_stbc; - u_int32_t vht_rx_stbc; - u_int32_t vht_su_bformer; - u_int32_t vht_su_bformee; - u_int32_t vht_mu_bformer; - u_int32_t vht_mu_bformee; - u_int32_t vht_max_ampdu_len_exp; - u_int32_t vht_txop_ps; + u_int32_t vht_max_mpdu; + u_int32_t supp_chan_width; + u_int32_t vht_rx_ldpc; + u_int32_t vht_short_gi_80; + u_int32_t vht_short_gi_160; + u_int32_t vht_tx_stbc; + u_int32_t vht_rx_stbc; + u_int32_t vht_su_bformer; + u_int32_t vht_su_bformee; + u_int32_t vht_mu_bformer; + u_int32_t vht_mu_bformee; + u_int32_t vht_max_ampdu_len_exp; + u_int32_t vht_txop_ps; }; #endif struct hdd_tgt_cfg { - u_int32_t target_fw_version; - u_int8_t band_cap; - u_int8_t alpha2[3]; - v_MACADDR_t hw_macaddr; - struct hdd_tgt_services services; - struct hdd_tgt_ht_cap ht_cap; + u_int32_t target_fw_version; + u_int8_t band_cap; + u_int8_t alpha2[3]; + v_MACADDR_t hw_macaddr; + struct hdd_tgt_services services; + struct hdd_tgt_ht_cap ht_cap; #ifdef WLAN_FEATURE_11AC - struct hdd_tgt_vht_cap vht_cap; + struct hdd_tgt_vht_cap vht_cap; #endif }; diff --git a/CORE/HDD/inc/wlan_hdd_tx_rx.h b/CORE/HDD/inc/wlan_hdd_tx_rx.h index 6c8840f777bb..8747a5f27434 100644 --- a/CORE/HDD/inc/wlan_hdd_tx_rx.h +++ b/CORE/HDD/inc/wlan_hdd_tx_rx.h @@ -70,6 +70,14 @@ #define HDD_DEST_ADDR_OFFSET 6 #define HDD_MAC_HDR_SIZE 6 + +#define HDD_PSB_CFG_INVALID 0xFF +#define HDD_PSB_CHANGED 0xFF +#define SME_QOS_UAPSD_CFG_BK_CHANGED_MASK 0xF1 +#define SME_QOS_UAPSD_CFG_BE_CHANGED_MASK 0xF2 +#define SME_QOS_UAPSD_CFG_VI_CHANGED_MASK 0xF4 +#define SME_QOS_UAPSD_CFG_VO_CHANGED_MASK 0xF8 + /*--------------------------------------------------------------------------- Type declarations -------------------------------------------------------------------------*/ @@ -261,4 +269,30 @@ void hdd_mon_tx_work_queue(struct work_struct *work); VOS_STATUS hdd_Ibss_GetStaId(hdd_station_ctx_t *pHddStaCtx, v_MACADDR_t *pMacAddress, v_U8_t *staId); +/**============================================================================ + @brief hdd_tx_rx_pkt_cnt_stat_timer_handler() - + Timer handler to check enable/disable split scan + @param pHddStaCtx : Hdd adapter + @return : VOS_STATUS_SUCCESS/VOS_STATUS_E_FAILURE + ===========================================================================*/ +void hdd_tx_rx_pkt_cnt_stat_timer_handler( void *pAdapter); + +/**============================================================================ + @brief hdd_flush_ibss_tx_queues() - + Flush tx queues in IBSS mode + @param pHddStaCtx : Hdd adapter + @param STAId: Sta index + @return : VOS_STATUS_SUCCESS/VOS_STATUS_E_FAILURE + ===========================================================================*/ +void hdd_flush_ibss_tx_queues( hdd_adapter_t *pAdapter, v_U8_t STAId); + +/**========================================================================= + @brief hdd_wmm_acquire_access_required()- + Determine whether wmm ac acquire access is required + @param pAdapter : pointer to Adapter context + @param acType : AC + @return : void + ========================================================================*/ +void hdd_wmm_acquire_access_required(hdd_adapter_t *pAdapter, + WLANTL_ACEnumType acType); #endif // end #if !defined( WLAN_HDD_TX_RX_H ) diff --git a/CORE/HDD/inc/wlan_hdd_wext.h b/CORE/HDD/inc/wlan_hdd_wext.h index 5b1ccef966b7..da0963c63ca1 100644 --- a/CORE/HDD/inc/wlan_hdd_wext.h +++ b/CORE/HDD/inc/wlan_hdd_wext.h @@ -42,22 +42,23 @@ #define HDD_WLAN_WMM_PARAM_HANDLE 0 #define HDD_WLAN_WMM_PARAM_TID 1 #define HDD_WLAN_WMM_PARAM_DIRECTION 2 -#define HDD_WLAN_WMM_PARAM_USER_PRIORITY 3 -#define HDD_WLAN_WMM_PARAM_NOMINAL_MSDU_SIZE 4 -#define HDD_WLAN_WMM_PARAM_MAXIMUM_MSDU_SIZE 5 -#define HDD_WLAN_WMM_PARAM_MINIMUM_DATA_RATE 6 -#define HDD_WLAN_WMM_PARAM_MEAN_DATA_RATE 7 -#define HDD_WLAN_WMM_PARAM_PEAK_DATA_RATE 8 -#define HDD_WLAN_WMM_PARAM_MAX_BURST_SIZE 9 -#define HDD_WLAN_WMM_PARAM_MINIMUM_PHY_RATE 10 -#define HDD_WLAN_WMM_PARAM_SURPLUS_BANDWIDTH_ALLOWANCE 11 -#define HDD_WLAN_WMM_PARAM_SERVICE_INTERVAL 12 -#define HDD_WLAN_WMM_PARAM_SUSPENSION_INTERVAL 13 -#define HDD_WLAN_WMM_PARAM_BURST_SIZE_DEFN 14 -#define HDD_WLAN_WMM_PARAM_ACK_POLICY 15 -#define HDD_WLAN_WMM_PARAM_INACTIVITY_INTERVAL 16 -#define HDD_WLAN_WMM_PARAM_MAX_SERVICE_INTERVAL 17 -#define HDD_WLAN_WMM_PARAM_COUNT 18 +#define HDD_WLAN_WMM_PARAM_APSD 3 +#define HDD_WLAN_WMM_PARAM_USER_PRIORITY 4 +#define HDD_WLAN_WMM_PARAM_NOMINAL_MSDU_SIZE 5 +#define HDD_WLAN_WMM_PARAM_MAXIMUM_MSDU_SIZE 6 +#define HDD_WLAN_WMM_PARAM_MINIMUM_DATA_RATE 7 +#define HDD_WLAN_WMM_PARAM_MEAN_DATA_RATE 8 +#define HDD_WLAN_WMM_PARAM_PEAK_DATA_RATE 9 +#define HDD_WLAN_WMM_PARAM_MAX_BURST_SIZE 10 +#define HDD_WLAN_WMM_PARAM_MINIMUM_PHY_RATE 11 +#define HDD_WLAN_WMM_PARAM_SURPLUS_BANDWIDTH_ALLOWANCE 12 +#define HDD_WLAN_WMM_PARAM_SERVICE_INTERVAL 13 +#define HDD_WLAN_WMM_PARAM_SUSPENSION_INTERVAL 14 +#define HDD_WLAN_WMM_PARAM_BURST_SIZE_DEFN 15 +#define HDD_WLAN_WMM_PARAM_ACK_POLICY 16 +#define HDD_WLAN_WMM_PARAM_INACTIVITY_INTERVAL 17 +#define HDD_WLAN_WMM_PARAM_MAX_SERVICE_INTERVAL 18 +#define HDD_WLAN_WMM_PARAM_COUNT 19 #define MHZ 6 @@ -398,6 +399,11 @@ VOS_STATUS wlan_hdd_get_classAstats(hdd_adapter_t *pAdapter); VOS_STATUS wlan_hdd_get_station_stats(hdd_adapter_t *pAdapter); VOS_STATUS wlan_hdd_get_rssi(hdd_adapter_t *pAdapter, v_S7_t *rssi_value); + +VOS_STATUS wlan_hdd_get_snr(hdd_adapter_t *pAdapter, v_S7_t *snr); + +void hdd_wmm_tx_snapshot(hdd_adapter_t *pAdapter); + #ifdef FEATURE_WLAN_TDLS VOS_STATUS iw_set_tdls_params(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra, int nOffset); #endif @@ -408,6 +414,7 @@ VOS_STATUS wlan_hdd_get_roam_rssi(hdd_adapter_t *pAdapter, v_S7_t *rssi_value); #ifdef WLAN_FEATURE_PACKET_FILTERING void wlan_hdd_set_mc_addr_list(hdd_adapter_t *pAdapter, v_U8_t set); #endif +void* wlan_hdd_change_country_code_callback(void *pAdapter); VOS_STATUS wlan_hdd_set_powersave(hdd_adapter_t *pAdapter, int mode); diff --git a/CORE/HDD/inc/wlan_hdd_wmm.h b/CORE/HDD/inc/wlan_hdd_wmm.h index 79edbd20e11f..615364220d49 100644 --- a/CORE/HDD/inc/wlan_hdd_wmm.h +++ b/CORE/HDD/inc/wlan_hdd_wmm.h @@ -124,6 +124,12 @@ typedef enum } hdd_wmm_user_mode_t; +// UAPSD Mask bits +// (Bit0:VO; Bit1:VI; Bit2:BK; Bit3:BE all other bits are ignored) +#define HDD_AC_VO 0x1 +#define HDD_AC_VI 0x2 +#define HDD_AC_BK 0x4 +#define HDD_AC_BE 0x8 /*! @brief WMM Qos instance control block */ @@ -173,6 +179,7 @@ typedef struct sme_QosWmmTspecInfo wmmAcTspecInfo; // current U-APSD parameters + v_BOOL_t wmmAcIsUapsdEnabled; v_U32_t wmmAcUapsdServiceInterval; v_U32_t wmmAcUapsdSuspensionInterval; sme_QosWmmDirType wmmAcUapsdDirection; @@ -388,5 +395,14 @@ hdd_wlan_wmm_status_e hdd_wmm_delts( hdd_adapter_t* pAdapter, ===========================================================================*/ hdd_wlan_wmm_status_e hdd_wmm_checkts( hdd_adapter_t* pAdapter, v_U32_t handle ); +/**============================================================================ + @brief hdd_wmm_adapter_clear() - Function which will clear the WMM status + of all ACs + @param pAdapter : [in] pointer to adapter context + + @return : VOS_STATUS_SUCCESS if succssful + : other values if failure + ===========================================================================*/ +VOS_STATUS hdd_wmm_adapter_clear( hdd_adapter_t *pAdapter ); #endif /* #ifndef _WLAN_HDD_WMM_H */ diff --git a/CORE/HDD/inc/wlan_hdd_wowl.h b/CORE/HDD/inc/wlan_hdd_wowl.h index 546e1e564eef..5b906bc41c45 100644 --- a/CORE/HDD/inc/wlan_hdd_wowl.h +++ b/CORE/HDD/inc/wlan_hdd_wowl.h @@ -118,7 +118,7 @@ #else #define WOWL_PTRN_MAX_SIZE 128 #define WOWL_PTRN_MASK_MAX_SIZE 16 -#define WOWL_MAX_PTRNS_ALLOWED 8 +#define WOWL_MAX_PTRNS_ALLOWED 16 #endif /*---------------------------------------------------------------------------- @@ -146,6 +146,35 @@ v_BOOL_t hdd_add_wowl_ptrn (hdd_adapter_t *pAdapter, const char * ptrn); ===========================================================================*/ v_BOOL_t hdd_del_wowl_ptrn (hdd_adapter_t *pAdapter, const char * ptrn); +/**============================================================================ + @brief hdd_add_wowl_ptrn_debugfs() - Function which will add a WoW pattern + sent from debugfs interface + + @param pAdapter : [in] pointer to the adapter + pattern_idx : [in] index of the pattern to be added + pattern_offset : [in] offset of the pattern in the frame payload + pattern_buf : [in] pointer to the pattern hex string to be added + pattern_mask : [in] pointer to the pattern mask hex string + + @return : FALSE if any errors encountered + : TRUE otherwise + ===========================================================================*/ +v_BOOL_t hdd_add_wowl_ptrn_debugfs(hdd_adapter_t *pAdapter, v_U8_t pattern_idx, + v_U8_t pattern_offset, char *pattern_buf, + char *pattern_mask); + +/**============================================================================ + @brief hdd_del_wowl_ptrn_debugfs() - Function which will remove a WoW pattern + sent from debugfs interface + + @param pAdapter : [in] pointer to the adapter + pattern_idx : [in] index of the pattern to be removed + + @return : FALSE if any errors encountered + : TRUE otherwise + ===========================================================================*/ +v_BOOL_t hdd_del_wowl_ptrn_debugfs(hdd_adapter_t *pAdapter, v_U8_t pattern_idx); + /**============================================================================ @brief hdd_enter_wowl() - Function which will enable WoWL. Atleast one of MP and PBM must be enabled diff --git a/CORE/HDD/src/test.c b/CORE/HDD/src/test.c new file mode 100644 index 000000000000..9f895d2a6c61 --- /dev/null +++ b/CORE/HDD/src/test.c @@ -0,0 +1,10032 @@ +/* + * Copyright (c) 2013, The Linux Foundation. All rights reserved. + * + * Previously licensed under the ISC license by Qualcomm Atheros, Inc. + * + * + * Permission to use, copy, modify, and/or distribute this software for + * any purpose with or without fee is hereby granted, provided that the + * above copyright notice and this permission notice appear in all + * copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL + * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE + * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +/* + * This file was originally distributed by Qualcomm Atheros, Inc. + * under proprietary terms before Copyright ownership was assigned + * to the Linux Foundation. + */ + +/** ------------------------------------------------------------------------ * + ------------------------------------------------------------------------ * + + + \file wlan_hdd_wext.c + + \brief Airgo Linux Wireless Extensions Common Control Plane Types and + interfaces. + + $Id: wlan_hdd_wext.c,v 1.34 2007/04/14 01:49:23 jimz Exp jimz $ + + Copyright (C) 2007 Airgo Networks, Incorporated + + This file defines all of the types that are utilized by the CCP module + of the "Portable" HDD. This file also includes the underlying Linux + Wireless Extensions Data types referred to by CCP. + + ======================================================================== */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifdef WLAN_BTAMP_FEATURE +#include +#endif +#include +#include +#include "ccmApi.h" +#include "sirParams.h" +#include "csrApi.h" +#include "csrInsideApi.h" +#if defined WLAN_FEATURE_VOWIFI +#include "smeRrmInternal.h" +#endif +#include +#include "dot11f.h" +#include +#include +#include +#include "utilsApi.h" +#include "wlan_hdd_p2p.h" +#ifdef FEATURE_WLAN_TDLS +#include "wlan_hdd_tdls.h" +#endif + +#ifdef QCA_WIFI_2_0 +#include "ieee80211_common.h" +#include "ol_if_athvar.h" +#include "dbglog_host.h" +#include "wma.h" +#endif + +#ifdef CONFIG_HAS_EARLYSUSPEND +#include +#endif +#include "wlan_hdd_power.h" +#include "qwlan_version.h" +#include +#include "wlan_hdd_host_offload.h" +#include "wlan_hdd_keep_alive.h" +#ifdef WLAN_FEATURE_PACKET_FILTERING +#include "wlan_hdd_packet_filtering.h" +#endif + +#include +#include +#include "wlan_qct_pal_trace.h" +#include "wlan_qct_tl.h" + +#include "wlan_hdd_misc.h" +#include "bap_hdd_misc.h" + +#include "wlan_hdd_dev_pwr.h" +#include "qc_sap_ioctl.h" +#include "sme_Api.h" +#include "wlan_qct_wda.h" +#ifdef CONFIG_HAS_EARLYSUSPEND +extern void hdd_suspend_wlan(struct early_suspend *wlan_suspend); +extern void hdd_resume_wlan(struct early_suspend *wlan_suspend); +#endif + +#ifdef FEATURE_OEM_DATA_SUPPORT +#define MAX_OEM_DATA_RSP_LEN 2047 +#endif + +#define HDD_FINISH_ULA_TIME_OUT 800 + +extern int wlan_hdd_cfg80211_update_band(struct wiphy *wiphy, eCsrBand eBand); +int hdd_setBand_helper(struct net_device *dev, tANI_U8* ptr); + +static int ioctl_debug; +module_param(ioctl_debug, int, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); + +#define STATS_CONTEXT_MAGIC 0x53544154 //STAT +#define RSSI_CONTEXT_MAGIC 0x52535349 //RSSI +#define POWER_CONTEXT_MAGIC 0x504F5752 //POWR +#define SNR_CONTEXT_MAGIC 0x534E5200 //SNR + +/* To Validate Channel against the Frequency and Vice-Versa */ +static const hdd_freq_chan_map_t freq_chan_map[] = { {2412, 1}, {2417, 2}, + {2422, 3}, {2427, 4}, {2432, 5}, {2437, 6}, {2442, 7}, {2447, 8}, + {2452, 9}, {2457, 10}, {2462, 11}, {2467 ,12}, {2472, 13}, + {2484, 14}, {4920, 240}, {4940, 244}, {4960, 248}, {4980, 252}, + {5040, 208}, {5060, 212}, {5080, 216}, {5180, 36}, {5200, 40}, {5220, 44}, + {5240, 48}, {5260, 52}, {5280, 56}, {5300, 60}, {5320, 64}, {5500, 100}, + {5520, 104}, {5540, 108}, {5560, 112}, {5580, 116}, {5600, 120}, + {5620, 124}, {5640, 128}, {5660, 132}, {5680, 136}, {5700, 140}, + {5745, 149}, {5765, 153}, {5785, 157}, {5805, 161}, {5825, 165} }; + +#define FREQ_CHAN_MAP_TABLE_SIZE (sizeof(freq_chan_map)/sizeof(freq_chan_map[0])) + +#define RC_2_RATE_IDX(_rc) ((_rc) & 0x7) +#define HT_RC_2_STREAMS(_rc) ((((_rc) & 0x78) >> 3) + 1) + +#define RC_2_RATE_IDX_11AC(_rc) ((_rc) & 0xf) +#define HT_RC_2_STREAMS_11AC(_rc) ((((_rc) & 0x30) >> 4) + 1) + +/* Private ioctls and their sub-ioctls */ +#define WLAN_PRIV_SET_INT_GET_NONE (SIOCIWFIRSTPRIV + 0) +#define WE_SET_11D_STATE 1 +#define WE_WOWL 2 +#define WE_SET_POWER 3 +#define WE_SET_MAX_ASSOC 4 +#define WE_SET_SAP_AUTO_CHANNEL_SELECTION 5 +#define WE_SET_DATA_INACTIVITY_TO 6 +#define WE_SET_MAX_TX_POWER 7 +#define WE_SET_HIGHER_DTIM_TRANSITION 8 +#define WE_SET_TM_LEVEL 9 +#define WE_SET_PHYMODE 10 +#define WE_SET_NSS 11 +#define WE_SET_LDPC 12 +#define WE_SET_TX_STBC 13 +#define WE_SET_RX_STBC 14 +#define WE_SET_SHORT_GI 15 +#define WE_SET_RTSCTS 16 +#define WE_SET_CHWIDTH 17 +#define WE_SET_ANI_EN_DIS 18 +#define WE_SET_ANI_POLL_PERIOD 19 +#define WE_SET_ANI_LISTEN_PERIOD 20 +#define WE_SET_ANI_OFDM_LEVEL 21 +#define WE_SET_ANI_CCK_LEVEL 22 +#define WE_SET_DYNAMIC_BW 23 +#define WE_SET_TX_CHAINMASK 24 +#define WE_SET_RX_CHAINMASK 25 +#define WE_SET_11N_RATE 26 +#define WE_SET_AMPDU 27 +#define WE_SET_AMSDU 28 +#define WE_SET_TXPOW_2G 29 +#define WE_SET_TXPOW_5G 30 +/* Private ioctl for firmware debug log */ +#define WE_DBGLOG_LOG_LEVEL 31 +#define WE_DBGLOG_VAP_ENABLE 32 +#define WE_DBGLOG_VAP_DISABLE 33 +#define WE_DBGLOG_MODULE_ENABLE 34 +#define WE_DBGLOG_MODULE_DISABLE 35 +#define WE_DBGLOG_MOD_LOG_LEVEL 36 +#define WE_DBGLOG_TYPE 37 +#define WE_SET_TXRX_FWSTATS 38 +#define WE_SET_VHT_RATE 39 +#define WE_DBGLOG_REPORT_ENABLE 40 +#define WE_TXRX_FWSTATS_RESET 41 +#define WE_SET_MAX_TX_POWER_2_4 42 +#define WE_SET_MAX_TX_POWER_5_0 43 +#define WE_SET_POWER_GATING 44 +/* Private ioctl for packet powe save */ +#define WE_PPS_PAID_MATCH 45 +#define WE_PPS_GID_MATCH 46 +#define WE_PPS_EARLY_TIM_CLEAR 47 +#define WE_PPS_EARLY_DTIM_CLEAR 48 +#define WE_PPS_EOF_PAD_DELIM 49 +#define WE_PPS_MACADDR_MISMATCH 50 +#define WE_PPS_DELIM_CRC_FAIL 51 +#define WE_PPS_GID_NSTS_ZERO 52 +#define WE_PPS_RSSI_CHECK 53 +#define WE_ENABLE_STRICT_FCC_REG 54 + +/* Private ioctls and their sub-ioctls */ +#define WLAN_PRIV_SET_NONE_GET_INT (SIOCIWFIRSTPRIV + 1) +#define WE_GET_11D_STATE 1 +#define WE_IBSS_STATUS 2 +#define WE_PMC_STATE 3 +#define WE_GET_WLAN_DBG 4 +#define WE_MODULE_DOWN_IND 5 +#define WE_GET_MAX_ASSOC 6 +#define WE_GET_WDI_DBG 7 +#define WE_GET_SAP_AUTO_CHANNEL_SELECTION 8 +#define WE_GET_CONCURRENCY_MODE 9 +#ifdef QCA_WIFI_2_0 +#define WE_GET_NSS 11 +#define WE_GET_LDPC 12 +#define WE_GET_TX_STBC 13 +#define WE_GET_RX_STBC 14 +#define WE_GET_SHORT_GI 15 +#define WE_GET_RTSCTS 16 +#define WE_GET_CHWIDTH 17 +#define WE_GET_ANI_EN_DIS 18 +#define WE_GET_ANI_POLL_PERIOD 19 +#define WE_GET_ANI_LISTEN_PERIOD 20 +#define WE_GET_ANI_OFDM_LEVEL 21 +#define WE_GET_ANI_CCK_LEVEL 22 +#define WE_GET_DYNAMIC_BW 23 +#define WE_GET_TX_CHAINMASK 24 +#define WE_GET_RX_CHAINMASK 25 +#define WE_GET_11N_RATE 26 +#define WE_GET_AMPDU 27 +#define WE_GET_AMSDU 28 +#define WE_GET_TXPOW_2G 29 +#define WE_GET_TXPOW_5G 30 +#define WE_GET_POWER_GATING 31 +#define WE_GET_PPS_PAID_MATCH 32 +#define WE_GET_PPS_GID_MATCH 33 +#define WE_GET_PPS_EARLY_TIM_CLEAR 34 +#define WE_GET_PPS_EARLY_DTIM_CLEAR 35 +#define WE_GET_PPS_EOF_PAD_DELIM 36 +#define WE_GET_PPS_MACADDR_MISMATCH 37 +#define WE_GET_PPS_DELIM_CRC_FAIL 38 +#define WE_GET_PPS_GID_NSTS_ZERO 39 +#define WE_GET_PPS_RSSI_CHECK 40 +#endif + +/* Private ioctls and their sub-ioctls */ +#define WLAN_PRIV_SET_INT_GET_INT (SIOCIWFIRSTPRIV + 2) + +/* Private ioctls and their sub-ioctls */ +#define WLAN_PRIV_SET_CHAR_GET_NONE (SIOCIWFIRSTPRIV + 3) +#define WE_WOWL_ADD_PTRN 1 +#define WE_WOWL_DEL_PTRN 2 +#if defined WLAN_FEATURE_VOWIFI +#define WE_NEIGHBOR_REPORT_REQUEST 3 +#endif +#define WE_SET_AP_WPS_IE 4 //This is called in station mode to set probe rsp ie. +#define WE_SET_CONFIG 5 + +/* Private ioctls and their sub-ioctls */ +#define WLAN_PRIV_SET_THREE_INT_GET_NONE (SIOCIWFIRSTPRIV + 4) +#define WE_SET_WLAN_DBG 1 +#define WE_SET_WDI_DBG 2 +#define WE_SET_SAP_CHANNELS 3 + +/* Private ioctls and their sub-ioctls */ +#define WLAN_PRIV_GET_CHAR_SET_NONE (SIOCIWFIRSTPRIV + 5) +#define WE_WLAN_VERSION 1 +#define WE_GET_STATS 2 +#define WE_GET_CFG 3 +#define WE_GET_WMM_STATUS 4 +#define WE_GET_CHANNEL_LIST 5 +#ifdef WLAN_FEATURE_11AC +#define WE_GET_RSSI 6 +#endif +#define WE_GET_ROAM_RSSI 7 +#ifdef FEATURE_WLAN_TDLS +#define WE_GET_TDLS_PEERS 8 +#endif +#ifdef WLAN_FEATURE_11W +#define WE_GET_11W_INFO 9 +#endif +#define WE_GET_STATES 10 +#ifdef FEATURE_CESIUM_PROPRIETARY +#define WE_GET_IBSS_STA_INFO 11 +#endif +#ifdef QCA_WIFI_2_0 +#define WE_GET_PHYMODE 12 +#endif + +/* Private ioctls and their sub-ioctls */ +#define WLAN_PRIV_SET_NONE_GET_NONE (SIOCIWFIRSTPRIV + 6) +#define WE_CLEAR_STATS 1 +#define WE_INIT_AP 2 +#define WE_STOP_AP 3 +#define WE_ENABLE_AMP 4 +#define WE_DISABLE_AMP 5 +#define WE_ENABLE_DXE_STALL_DETECT 6 +#define WE_DISPLAY_DXE_SNAP_SHOT 7 +#define WE_SET_REASSOC_TRIGGER 8 +#define WE_DISPLAY_DATAPATH_SNAP_SHOT 9 +#ifdef FEATURE_CESIUM_PROPRIETARY +#define WE_IBSS_GET_PEER_INFO_ALL 10 +#endif +#ifdef QCA_WIFI_2_0 +#define WE_DUMP_AGC_START 11 +#define WE_DUMP_AGC 12 +#define WE_DUMP_CHANINFO_START 13 +#define WE_DUMP_CHANINFO 14 +#define WE_DUMP_WATCHDOG 15 +#ifdef DEBUG +#define WE_SET_FW_CRASH_INJECT 16 +#endif +#endif + +/* Private ioctls and their sub-ioctls */ +#define WLAN_PRIV_SET_VAR_INT_GET_NONE (SIOCIWFIRSTPRIV + 7) +#define WE_LOG_DUMP_CMD 1 + +#define WE_P2P_NOA_CMD 2 +//IOCTL to configure MCC params +#define WE_MCC_CONFIG_CREDENTIAL 3 +#define WE_MCC_CONFIG_PARAMS 4 + +#ifdef FEATURE_WLAN_TDLS +#define WE_TDLS_CONFIG_PARAMS 5 +#endif +#ifdef FEATURE_CESIUM_PROPRIETARY +#define WE_IBSS_GET_PEER_INFO 6 +#endif +#ifdef FEATURE_WLAN_TDLS +#undef MAX_VAR_ARGS +#define MAX_VAR_ARGS 10 +#else +#define MAX_VAR_ARGS 7 +#endif + + +/* Private ioctls (with no sub-ioctls) */ +/* note that they must be odd so that they have "get" semantics */ +#define WLAN_PRIV_ADD_TSPEC (SIOCIWFIRSTPRIV + 9) +#define WLAN_PRIV_DEL_TSPEC (SIOCIWFIRSTPRIV + 11) +#define WLAN_PRIV_GET_TSPEC (SIOCIWFIRSTPRIV + 13) + +#ifdef FEATURE_WLAN_WAPI +/* Private ioctls EVEN NO: SET, ODD NO:GET */ +#define WLAN_PRIV_SET_WAPI_MODE (SIOCIWFIRSTPRIV + 8) +#define WLAN_PRIV_GET_WAPI_MODE (SIOCIWFIRSTPRIV + 16) +#define WLAN_PRIV_SET_WAPI_ASSOC_INFO (SIOCIWFIRSTPRIV + 10) +#define WLAN_PRIV_SET_WAPI_KEY (SIOCIWFIRSTPRIV + 12) +#define WLAN_PRIV_SET_WAPI_BKID (SIOCIWFIRSTPRIV + 14) +#define WLAN_PRIV_GET_WAPI_BKID (SIOCIWFIRSTPRIV + 15) +#define WAPI_PSK_AKM_SUITE 0x02721400 +#define WAPI_CERT_AKM_SUITE 0x01721400 +#endif + +#ifdef FEATURE_OEM_DATA_SUPPORT +/* Private ioctls for setting the measurement configuration */ +#define WLAN_PRIV_SET_OEM_DATA_REQ (SIOCIWFIRSTPRIV + 17) +#define WLAN_PRIV_GET_OEM_DATA_RSP (SIOCIWFIRSTPRIV + 19) +#endif + +#ifdef WLAN_FEATURE_VOWIFI_11R +#define WLAN_PRIV_SET_FTIES (SIOCIWFIRSTPRIV + 20) +#endif + +/* Private ioctl for setting the host offload feature */ +#define WLAN_PRIV_SET_HOST_OFFLOAD (SIOCIWFIRSTPRIV + 18) + +/* Private ioctl to get the statistics */ +#define WLAN_GET_WLAN_STATISTICS (SIOCIWFIRSTPRIV + 21) + +/* Private ioctl to set the Keep Alive Params */ +#define WLAN_SET_KEEPALIVE_PARAMS (SIOCIWFIRSTPRIV + 22) +#ifdef WLAN_FEATURE_PACKET_FILTERING +/* Private ioctl to set the Packet Filtering Params */ +#define WLAN_SET_PACKET_FILTER_PARAMS (SIOCIWFIRSTPRIV + 23) +#endif + +#ifdef FEATURE_WLAN_SCAN_PNO +/* Private ioctl to get the statistics */ +#define WLAN_SET_PNO (SIOCIWFIRSTPRIV + 24) +#endif + +#define WLAN_SET_BAND_CONFIG (SIOCIWFIRSTPRIV + 25) /*Don't change this number*/ + +#define WLAN_PRIV_SET_MCBC_FILTER (SIOCIWFIRSTPRIV + 26) +#define WLAN_PRIV_CLEAR_MCBC_FILTER (SIOCIWFIRSTPRIV + 27) +/* Private ioctl to trigger reassociation */ + +#define WLAN_SET_POWER_PARAMS (SIOCIWFIRSTPRIV + 29) +#ifdef FEATURE_OEM_DATA_SUPPORT +#ifdef QCA_WIFI_2_0 +/* Private ioctl to get capability information for OEM Data Request/Response */ +#define WLAN_PRIV_GET_OEM_DATA_CAP (SIOCIWFIRSTPRIV + 30) +#endif +#endif +#define WLAN_GET_LINK_SPEED (SIOCIWFIRSTPRIV + 31) + +#define WLAN_STATS_INVALID 0 +#define WLAN_STATS_RETRY_CNT 1 +#define WLAN_STATS_MUL_RETRY_CNT 2 +#define WLAN_STATS_TX_FRM_CNT 3 +#define WLAN_STATS_RX_FRM_CNT 4 +#define WLAN_STATS_FRM_DUP_CNT 5 +#define WLAN_STATS_FAIL_CNT 6 +#define WLAN_STATS_RTS_FAIL_CNT 7 +#define WLAN_STATS_ACK_FAIL_CNT 8 +#define WLAN_STATS_RTS_SUC_CNT 9 +#define WLAN_STATS_RX_DISCARD_CNT 10 +#define WLAN_STATS_RX_ERROR_CNT 11 +#define WLAN_STATS_TX_BYTE_CNT 12 + +#define WLAN_STATS_RX_BYTE_CNT 13 +#define WLAN_STATS_RX_RATE 14 +#define WLAN_STATS_TX_RATE 15 + +#define WLAN_STATS_RX_UC_BYTE_CNT 16 +#define WLAN_STATS_RX_MC_BYTE_CNT 17 +#define WLAN_STATS_RX_BC_BYTE_CNT 18 +#define WLAN_STATS_TX_UC_BYTE_CNT 19 +#define WLAN_STATS_TX_MC_BYTE_CNT 20 +#define WLAN_STATS_TX_BC_BYTE_CNT 21 + +#define FILL_TLV(__p, __type, __size, __val, __tlen) do { \ + if ((__tlen + __size + 2) < WE_MAX_STR_LEN) \ + { \ + *__p++ = __type; \ + *__p++ = __size; \ + memcpy(__p, __val, __size); \ + __p += __size; \ + __tlen += __size + 2; \ + } \ + else \ + { \ + hddLog(VOS_TRACE_LEVEL_ERROR, "FILL_TLV Failed!!!\n"); \ + } \ + } while(0); + +#define VERSION_VALUE_MAX_LEN 32 + +#define TX_PER_TRACKING_DEFAULT_RATIO 5 +#define TX_PER_TRACKING_MAX_RATIO 10 +#define TX_PER_TRACKING_DEFAULT_WATERMARK 5 + +#define WLAN_ADAPTER 0 +#define P2P_ADAPTER 1 + +/*MCC Configuration parameters */ +enum { + MCC_SCHEDULE_TIME_SLICE_CFG_PARAM = 1, + MCC_MAX_NULL_SEND_TIME_CFG_PARAM, + MCC_TX_EARLY_STOP_TIME_CFG_PARAM, + MCC_RX_DRAIN_TIME_CFG_PARAM, + MCC_CHANNEL_SWITCH_TIME_CFG_PARAM, + MCC_MIN_CHANNEL_TIME_CFG_PARAM, + MCC_PARK_BEFORE_TBTT_CFG_PARAM, + MCC_MIN_AFTER_DTIM_CFG_PARAM, + MCC_TOO_CLOSE_MARGIN_CFG_PARAM, +}; + +int hdd_validate_mcc_config(hdd_adapter_t *pAdapter, v_UINT_t staId, + v_UINT_t arg1, v_UINT_t arg2, v_UINT_t arg3); + +#ifdef WLAN_FEATURE_PACKET_FILTERING +int wlan_hdd_set_filter(hdd_context_t *pHddCtx, tpPacketFilterCfg pRequest, + v_U8_t sessionId); +#endif + +/**--------------------------------------------------------------------------- + + \brief hdd_wlan_get_version() - + + This function use to get Wlan Driver, Firmware, & Hardware Version. + + \param - pAdapter Pointer to the adapter. + wrqu - Pointer to IOCTL REQUEST Data. + extra - Pointer to char + + \return - none + + --------------------------------------------------------------------------*/ +void hdd_wlan_get_version(hdd_adapter_t *pAdapter, union iwreq_data *wrqu, + char *extra) +{ + VOS_STATUS status; + tSirVersionString wcnss_SW_version; + tSirVersionString wcnss_HW_version; + char *pSWversion; + char *pHWversion; + tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(pAdapter); + + status = sme_GetWcnssSoftwareVersion(hHal, wcnss_SW_version, + sizeof(wcnss_SW_version)); + if (VOS_IS_STATUS_SUCCESS(status)) + { + pSWversion = wcnss_SW_version; + } + else + { + pSWversion = "Unknown"; + } + + status = sme_GetWcnssHardwareVersion(hHal, wcnss_HW_version, + sizeof(wcnss_HW_version)); + if (VOS_IS_STATUS_SUCCESS(status)) + { + pHWversion = wcnss_HW_version; + } + else + { + pHWversion = "Unknown"; + } + + wrqu->data.length = scnprintf(extra, WE_MAX_STR_LEN, + "Host SW:%s, FW:%s, HW:%s", + QWLAN_VERSIONSTR, + pSWversion, + pHWversion); + + return; +} + +#ifdef FEATURE_CESIUM_PROPRIETARY +void hdd_get_ibss_peer_info_cb(v_VOID_t *pUserData, v_VOID_t *pPeerInfoRsp) +{ + hdd_adapter_t *pAdapter = (hdd_adapter_t *)pUserData; + hdd_ibss_peer_info_t *pPeerInfo = (hdd_ibss_peer_info_t *)pPeerInfoRsp; + hdd_station_ctx_t *pStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); + v_U8_t i; + + if (NULL != pPeerInfo && eHAL_STATUS_SUCCESS == pPeerInfo->status) + { + pStaCtx->ibss_peer_info.status = pPeerInfo->status; + pStaCtx->ibss_peer_info.numIBSSPeers = pPeerInfo->numIBSSPeers; + for (i = 0; i < pPeerInfo->numIBSSPeers; i++) + { + memcpy(&pStaCtx->ibss_peer_info.ibssPeerList[i], + &pPeerInfo->ibssPeerList[i], sizeof(hdd_ibss_peer_info_params_t)); + } + } + else + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s] PEER_INFO_CMD_STATUS is not SUCCESS\n", __func__); + } + + complete(&pAdapter->ibss_peer_info_comp); +} + +v_MACADDR_t* hdd_wlan_get_ibss_mac_addr_from_staid(hdd_adapter_t *pAdapter, v_U8_t staIdx) +{ + v_U8_t idx; + hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); + + for ( idx = 0; idx < HDD_MAX_NUM_IBSS_STA; idx++ ) + { + if ( 0 != pHddStaCtx->conn_info.staId[ idx ] && + staIdx == pHddStaCtx->conn_info.staId[ idx ]) + { + return (&pHddStaCtx->conn_info.peerMacAddress[ idx ]); + } + } + return NULL; +} + +eHalStatus hdd_wlan_get_ibss_peer_info(hdd_adapter_t *pAdapter, v_U8_t staIdx) +{ + eHalStatus status = eHAL_STATUS_FAILURE; + tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(pAdapter); + hdd_station_ctx_t *pStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); + hdd_ibss_peer_info_t *pPeerInfo = &pStaCtx->ibss_peer_info; + + status = sme_RequestIBSSPeerInfo(hHal, pAdapter, hdd_get_ibss_peer_info_cb, + VOS_FALSE, staIdx); + + INIT_COMPLETION(pAdapter->ibss_peer_info_comp); + + if (eHAL_STATUS_SUCCESS == status) + { + status = wait_for_completion_interruptible_timeout + (&pAdapter->ibss_peer_info_comp, + msecs_to_jiffies(IBSS_PEER_INFO_REQ_TIMOEUT)); + if(!status) + { + hddLog(VOS_TRACE_LEVEL_WARN, "%s: Warning: IBSS_PEER_INFO_TIMEOUT", + __func__); + return status; + } + + /** Print the peer info */ + pr_info("pPeerInfo->numIBSSPeers = %d ", pPeerInfo->numIBSSPeers); + pr_info("============================================================"); + { + v_MACADDR_t *macAddr = hdd_wlan_get_ibss_mac_addr_from_staid(pAdapter, + staIdx); + v_U32_t txRateMbps = ((pPeerInfo->ibssPeerList[0].txRate)*500*1000)/1000000; + + if (NULL != macAddr) + { + pr_info("PEER ADDR :" MAC_ADDRESS_STR " TxRate: %d Mbps RSSI: %d", + MAC_ADDR_ARRAY(macAddr->bytes), + (int)txRateMbps, (int)pPeerInfo->ibssPeerList[0].rssi); + } + else + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + " ERROR: PEER MAC ADDRESS NOT FOUND "); + } + } + } + else + { + hddLog(VOS_TRACE_LEVEL_WARN, + "%s: Warning: sme_RequestIBSSPeerInfo Request failed", __func__); + } + + return status; +} + +eHalStatus hdd_wlan_get_ibss_peer_info_all(hdd_adapter_t *pAdapter) +{ + eHalStatus status = eHAL_STATUS_FAILURE; + tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(pAdapter); + hdd_station_ctx_t *pStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); + hdd_ibss_peer_info_t *pPeerInfo = &pStaCtx->ibss_peer_info; + int i; + + status = sme_RequestIBSSPeerInfo(hHal, pAdapter, hdd_get_ibss_peer_info_cb, + VOS_TRUE, 0xFF); + INIT_COMPLETION(pAdapter->ibss_peer_info_comp); + + if (eHAL_STATUS_SUCCESS == status) + { + status = wait_for_completion_interruptible_timeout + (&pAdapter->ibss_peer_info_comp, + msecs_to_jiffies(IBSS_PEER_INFO_REQ_TIMOEUT)); + if(!status) + { + hddLog(VOS_TRACE_LEVEL_WARN, "%s: Warning: IBSS_PEER_INFO_TIMEOUT", + __func__); + return status; + } + + /** Print the peer info */ + pr_info("pPeerInfo->numIBSSPeers = %d ", (int)pPeerInfo->numIBSSPeers); + pr_info("============================================================"); + for (i = 0; i < pPeerInfo->numIBSSPeers; i++) + { + v_U8_t staIdx = pPeerInfo->ibssPeerList[i].staIdx; + v_MACADDR_t *macAddr = hdd_wlan_get_ibss_mac_addr_from_staid(pAdapter, + staIdx); + v_U32_t txRateMbps = ((pPeerInfo->ibssPeerList[0].txRate)*500*1000)/1000000; + + pr_info("STAIDX:%d ", (int)pPeerInfo->ibssPeerList[i].staIdx); + if (NULL != macAddr) + { + pr_info(" PEER ADDR :" MAC_ADDRESS_STR " TxRate: %d Mbps RSSI: %d", + MAC_ADDR_ARRAY(macAddr->bytes), + (int)txRateMbps, (int)pPeerInfo->ibssPeerList[i].rssi); + } + else + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + " ERROR: PEER MAC ADDRESS NOT FOUND "); + } + } + } + else + { + hddLog(VOS_TRACE_LEVEL_WARN, + "%s: Warning: sme_RequestIBSSPeerInfo Request failed", __func__); + } + + return status; +} +#endif /* FEATURE_CESIUM_PROPRIETARY */ + +int hdd_wlan_get_rts_threshold(hdd_adapter_t *pAdapter, union iwreq_data *wrqu) +{ + tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(pAdapter); + v_U32_t threshold = 0,status = 0; + + ENTER(); + + if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s:LOGP in Progress. Ignore!!!",__func__); + return status; + } + + if ( eHAL_STATUS_SUCCESS != + ccmCfgGetInt(hHal, WNI_CFG_RTS_THRESHOLD, &threshold) ) + { + return -EIO; + } + wrqu->rts.value = threshold; + + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + ("Rts-Threshold=%ld!!\n"), wrqu->rts.value); + + EXIT(); + + return 0; +} + +int hdd_wlan_get_frag_threshold(hdd_adapter_t *pAdapter, union iwreq_data *wrqu) +{ + tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(pAdapter); + v_U32_t threshold = 0,status = 0; + + ENTER(); + + if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s:LOGP in Progress. Ignore!!!",__func__); + return status; + } + + if ( ccmCfgGetInt(hHal, WNI_CFG_FRAGMENTATION_THRESHOLD, &threshold) + != eHAL_STATUS_SUCCESS ) + { + return -EIO; + } + wrqu->frag.value = threshold; + + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + ("Frag-Threshold=%ld!!\n"), wrqu->frag.value); + + EXIT(); + + return 0; +} + +int hdd_wlan_get_freq(v_U32_t channel, v_U32_t *pfreq) +{ + int i; + if (channel > 0) + { + for (i=0; i < FREQ_CHAN_MAP_TABLE_SIZE; i++) + { + if (channel == freq_chan_map[i].chan) + { + *pfreq = freq_chan_map[i].freq; + return 1; + } + } + } + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + ("Invalid channel no=%d!!\n"), channel); + return -EINVAL; +} + +static v_BOOL_t +hdd_IsAuthTypeRSN( tHalHandle halHandle, eCsrAuthType authType) +{ + v_BOOL_t rsnType = VOS_FALSE; + // is the authType supported? + switch (authType) + { + case eCSR_AUTH_TYPE_NONE: //never used + rsnType = eANI_BOOLEAN_FALSE; + break; + // MAC layer authentication types + case eCSR_AUTH_TYPE_OPEN_SYSTEM: + rsnType = eANI_BOOLEAN_FALSE; + break; + case eCSR_AUTH_TYPE_SHARED_KEY: + rsnType = eANI_BOOLEAN_FALSE; + break; + case eCSR_AUTH_TYPE_AUTOSWITCH: + rsnType = eANI_BOOLEAN_FALSE; + break; + + // Upper layer authentication types + case eCSR_AUTH_TYPE_WPA: + rsnType = eANI_BOOLEAN_TRUE; + break; + case eCSR_AUTH_TYPE_WPA_PSK: + rsnType = eANI_BOOLEAN_TRUE; + break; + case eCSR_AUTH_TYPE_WPA_NONE: + rsnType = eANI_BOOLEAN_TRUE; + break; +#ifdef WLAN_FEATURE_VOWIFI_11R + case eCSR_AUTH_TYPE_FT_RSN: +#endif + case eCSR_AUTH_TYPE_RSN: + rsnType = eANI_BOOLEAN_TRUE; + break; +#ifdef WLAN_FEATURE_VOWIFI_11R + case eCSR_AUTH_TYPE_FT_RSN_PSK: +#endif + case eCSR_AUTH_TYPE_RSN_PSK: +#ifdef WLAN_FEATURE_11W + case eCSR_AUTH_TYPE_RSN_PSK_SHA256: +#endif + rsnType = eANI_BOOLEAN_TRUE; + break; + //case eCSR_AUTH_TYPE_FAILED: + case eCSR_AUTH_TYPE_UNKNOWN: + rsnType = eANI_BOOLEAN_FALSE; + break; + default: + hddLog(LOGE, FL("%s called with unknown authType - default to Open, None\n"), + __func__); + rsnType = eANI_BOOLEAN_FALSE; + break; + } + hddLog(LOGE, FL("%s called with authType: %d, returned: %d\n"), + __func__, authType, rsnType); + return rsnType; +} + +static void hdd_GetRssiCB( v_S7_t rssi, tANI_U32 staId, void *pContext ) +{ + struct statsContext *pStatsContext; + hdd_adapter_t *pAdapter; + + if (ioctl_debug) + { + pr_info("%s: rssi [%d] STA [%d] pContext [%p]\n", + __func__, (int)rssi, (int)staId, pContext); + } + + if (NULL == pContext) + { + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s: Bad param, pContext [%p]", + __func__, pContext); + return; + } + + /* there is a race condition that exists between this callback function + and the caller since the caller could time out either before or + while this code is executing. we'll assume the timeout hasn't + occurred, but we'll verify that right before we save our work */ + + pStatsContext = pContext; + pAdapter = pStatsContext->pAdapter; + if ((NULL == pAdapter) || (RSSI_CONTEXT_MAGIC != pStatsContext->magic)) + { + /* the caller presumably timed out so there is nothing we can do */ + hddLog(VOS_TRACE_LEVEL_WARN, + "%s: Invalid context, pAdapter [%p] magic [%08x]", + __func__, pAdapter, pStatsContext->magic); + if (ioctl_debug) + { + pr_info("%s: Invalid context, pAdapter [%p] magic [%08x]\n", + __func__, pAdapter, pStatsContext->magic); + } + return; + } + + /* the race is on. caller could have timed out immediately after + we verified the magic, but if so, caller will wait a short time + for us to copy over the rssi */ + pAdapter->rssi = rssi; + + /* and notify the caller */ + complete(&pStatsContext->completion); +} + +static void hdd_GetSnrCB(tANI_S8 snr, tANI_U32 staId, void *pContext) +{ + struct statsContext *pStatsContext; + hdd_adapter_t *pAdapter; + + if (ioctl_debug) + { + pr_info("%s: snr [%d] STA [%d] pContext [%p]\n", + __func__, (int)snr, (int)staId, pContext); + } + + if (NULL == pContext) + { + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s: Bad param, pContext [%p]", + __func__, pContext); + return; + } + + /* there is a race condition that exists between this callback function + * and the caller since the caller could time out either before or + * while this code is executing. we'll assume the timeout hasn't + * occurred, but we'll verify that right before we save our work + */ + + pStatsContext = pContext; + pAdapter = pStatsContext->pAdapter; + if ((NULL == pAdapter) || (SNR_CONTEXT_MAGIC != pStatsContext->magic)) + { + /* the caller presumably timed out so there is nothing we can do */ + hddLog(VOS_TRACE_LEVEL_WARN, + "%s: Invalid context, pAdapter [%p] magic [%08x]", + __func__, pAdapter, pStatsContext->magic); + if (ioctl_debug) + { + pr_info("%s: Invalid context, pAdapter [%p] magic [%08x]\n", + __func__, pAdapter, pStatsContext->magic); + } + return; + } + + /* the race is on. caller could have timed out immediately after + * we verified the magic, but if so, caller will wait a short time + * for us to copy over the snr + */ + pAdapter->snr = snr; + + /* and notify the caller */ + complete(&pStatsContext->completion); +} + +VOS_STATUS wlan_hdd_get_rssi(hdd_adapter_t *pAdapter, v_S7_t *rssi_value) +{ + struct statsContext context; + hdd_context_t *pHddCtx; + hdd_station_ctx_t *pHddStaCtx; + eHalStatus hstatus; + long lrc; + + if (NULL == pAdapter) + { + hddLog(VOS_TRACE_LEVEL_WARN, + "%s: Invalid context, pAdapter", __func__); + return VOS_STATUS_E_FAULT; + } + if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, "%s:LOGP in Progress. Ignore!!!",__func__); + /* return a cached value */ + *rssi_value = pAdapter->rssi; + return VOS_STATUS_SUCCESS; + } + + pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); + + init_completion(&context.completion); + context.pAdapter = pAdapter; + context.magic = RSSI_CONTEXT_MAGIC; + + hstatus = sme_GetRssi(pHddCtx->hHal, hdd_GetRssiCB, + pHddStaCtx->conn_info.staId[ 0 ], + pHddStaCtx->conn_info.bssId, + &context, pHddCtx->pvosContext); + if (eHAL_STATUS_SUCCESS != hstatus) + { + hddLog(VOS_TRACE_LEVEL_ERROR,"%s: Unable to retrieve RSSI", + __func__); + /* we'll returned a cached value below */ + } + else + { + /* request was sent -- wait for the response */ + lrc = wait_for_completion_interruptible_timeout(&context.completion, + msecs_to_jiffies(WLAN_WAIT_TIME_STATS)); + /* either we have a response or we timed out + either way, first invalidate our magic */ + context.magic = 0; + if (lrc <= 0) + { + hddLog(VOS_TRACE_LEVEL_ERROR,"%s: SME %s while retrieving RSSI ", + __func__, (0 == lrc) ? "timeout" : "interrupt"); + /* there is a race condition such that the callback + function could be executing at the same time we are. of + primary concern is if the callback function had already + verified the "magic" but hasn't yet set the completion + variable. Since the completion variable is on our + stack, we'll delay just a bit to make sure the data is + still valid if that is the case */ + msleep(50); + /* we'll now returned a cached value below */ + } + } + *rssi_value = pAdapter->rssi; + + return VOS_STATUS_SUCCESS; +} + +VOS_STATUS wlan_hdd_get_snr(hdd_adapter_t *pAdapter, v_S7_t *snr) +{ + struct statsContext context; + hdd_context_t *pHddCtx; + hdd_station_ctx_t *pHddStaCtx; + eHalStatus hstatus; + long lrc; + int valid; + + if (NULL == pAdapter) + { + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s: Invalid context, pAdapter", __func__); + return VOS_STATUS_E_FAULT; + } + + pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + + valid = wlan_hdd_validate_context(pHddCtx); + if (0 != valid) + { + hddLog(VOS_TRACE_LEVEL_ERROR, FL("HDD context is not valid")); + return VOS_STATUS_E_FAULT; + } + + pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); + if (NULL == pHddStaCtx) + { + hddLog(VOS_TRACE_LEVEL_ERROR, FL("HDD STA context is not valid")); + return VOS_STATUS_E_FAULT; + } + + init_completion(&context.completion); + context.pAdapter = pAdapter; + context.magic = SNR_CONTEXT_MAGIC; + + hstatus = sme_GetSnr(pHddCtx->hHal, hdd_GetSnrCB, + pHddStaCtx->conn_info.staId[ 0 ], + pHddStaCtx->conn_info.bssId, + &context); + if (eHAL_STATUS_SUCCESS != hstatus) + { + hddLog(VOS_TRACE_LEVEL_ERROR,"%s: Unable to retrieve RSSI", + __func__); + /* we'll returned a cached value below */ + } + else + { + /* request was sent -- wait for the response */ + lrc = wait_for_completion_interruptible_timeout(&context.completion, + msecs_to_jiffies(WLAN_WAIT_TIME_STATS)); + /* either we have a response or we timed out + * either way, first invalidate our magic + */ + context.magic = 0; + if (lrc <= 0) + { + hddLog(VOS_TRACE_LEVEL_ERROR,"%s: SME %s while retrieving SNR ", + __func__, (0 == lrc) ? "timeout" : "interrupt"); + /* there is a race condition such that the callback + * function could be executing at the same time we are. Of + * primary concern is if the callback function had already + * verified the "magic" but hasn't yet set the completion + * variable. Since the completion variable is on our + * stack, we'll delay just a bit to make sure the data is + * still valid if that is the case + */ + msleep(50); + /* we'll now returned a cached value below */ + } + } + *snr = pAdapter->snr; + + return VOS_STATUS_SUCCESS; +} +#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR) + +static void hdd_GetRoamRssiCB( v_S7_t rssi, tANI_U32 staId, void *pContext ) +{ + struct statsContext *pStatsContext; + hdd_adapter_t *pAdapter; + if (ioctl_debug) + { + pr_info("%s: rssi [%d] STA [%d] pContext [%p]\n", + __func__, (int)rssi, (int)staId, pContext); + } + + if (NULL == pContext) + { + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s: Bad param, pContext [%p]", + __func__, pContext); + return; + } + + /* there is a race condition that exists between this callback function + and the caller since the caller could time out either before or + while this code is executing. we'll assume the timeout hasn't + occurred, but we'll verify that right before we save our work */ + + pStatsContext = pContext; + pAdapter = pStatsContext->pAdapter; + if ((NULL == pAdapter) || (RSSI_CONTEXT_MAGIC != pStatsContext->magic)) + { + /* the caller presumably timed out so there is nothing we can do */ + hddLog(VOS_TRACE_LEVEL_WARN, + "%s: Invalid context, pAdapter [%p] magic [%08x]", + __func__, pAdapter, pStatsContext->magic); + if (ioctl_debug) + { + pr_info("%s: Invalid context, pAdapter [%p] magic [%08x]\n", + __func__, pAdapter, pStatsContext->magic); + } + return; + } + + /* the race is on. caller could have timed out immediately after + we verified the magic, but if so, caller will wait a short time + for us to copy over the rssi */ + pAdapter->rssi = rssi; + + /* and notify the caller */ + complete(&pStatsContext->completion); +} + + + +VOS_STATUS wlan_hdd_get_roam_rssi(hdd_adapter_t *pAdapter, v_S7_t *rssi_value) +{ + struct statsContext context; + hdd_context_t *pHddCtx = NULL; + hdd_station_ctx_t *pHddStaCtx = NULL; + eHalStatus hstatus; + long lrc; + + if (NULL == pAdapter) + { + hddLog(VOS_TRACE_LEVEL_WARN, + "%s: Invalid context, pAdapter", __func__); + return VOS_STATUS_E_FAULT; + } + if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, "%s:LOGP in Progress. Ignore!!!",__func__); + /* return a cached value */ + *rssi_value = pAdapter->rssi; + return VOS_STATUS_SUCCESS; + } + + pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); + + if(eConnectionState_Associated != pHddStaCtx->conn_info.connState) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "%s:Not associated!",__func__); + /* return a cached value */ + *rssi_value = 0; + return VOS_STATUS_SUCCESS; + } + init_completion(&context.completion); + context.pAdapter = pAdapter; + context.magic = RSSI_CONTEXT_MAGIC; + + hstatus = sme_GetRoamRssi(pHddCtx->hHal, hdd_GetRoamRssiCB, + pHddStaCtx->conn_info.staId[ 0 ], + pHddStaCtx->conn_info.bssId, + &context, pHddCtx->pvosContext); + if (eHAL_STATUS_SUCCESS != hstatus) + { + hddLog(VOS_TRACE_LEVEL_ERROR,"%s: Unable to retrieve RSSI", + __func__); + /* we'll returned a cached value below */ + } + else + { + /* request was sent -- wait for the response */ + lrc = wait_for_completion_interruptible_timeout(&context.completion, + msecs_to_jiffies(WLAN_WAIT_TIME_STATS)); + /* either we have a response or we timed out + either way, first invalidate our magic */ + context.magic = 0; + if (lrc <= 0) + { + hddLog(VOS_TRACE_LEVEL_ERROR,"%s: SME %s while retrieving RSSI ", + __func__, (0 == lrc) ? "timeout" : "interrupt"); + /* there is a race condition such that the callback + function could be executing at the same time we are. of + primary concern is if the callback function had already + verified the "magic" but hasn't yet set the completion + variable. Since the completion variable is on our + stack, we'll delay just a bit to make sure the data is + still valid if that is the case */ + msleep(50); + /* we'll now returned a cached value below */ + } + } + *rssi_value = pAdapter->rssi; + + return VOS_STATUS_SUCCESS; +} +#endif + + +void hdd_StatisticsCB( void *pStats, void *pContext ) +{ + hdd_adapter_t *pAdapter = (hdd_adapter_t *)pContext; + hdd_stats_t *pStatsCache = NULL; + hdd_wext_state_t *pWextState; + VOS_STATUS vos_status = VOS_STATUS_SUCCESS; + + tCsrSummaryStatsInfo *pSummaryStats = NULL; + tCsrGlobalClassAStatsInfo *pClassAStats = NULL; + tCsrGlobalClassBStatsInfo *pClassBStats = NULL; + tCsrGlobalClassCStatsInfo *pClassCStats = NULL; + tCsrGlobalClassDStatsInfo *pClassDStats = NULL; + tCsrPerStaStatsInfo *pPerStaStats = NULL; + + if (pAdapter!= NULL) + pStatsCache = &pAdapter->hdd_stats; + + + pSummaryStats = (tCsrSummaryStatsInfo *)pStats; + pClassAStats = (tCsrGlobalClassAStatsInfo *)( pSummaryStats + 1 ); + pClassBStats = (tCsrGlobalClassBStatsInfo *)( pClassAStats + 1 ); + pClassCStats = (tCsrGlobalClassCStatsInfo *)( pClassBStats + 1 ); + pClassDStats = (tCsrGlobalClassDStatsInfo *)( pClassCStats + 1 ); + pPerStaStats = (tCsrPerStaStatsInfo *)( pClassDStats + 1 ); + + if (pStatsCache!=NULL) + { + // and copy the stats into the cache we keep in the adapter instance structure + vos_mem_copy( &pStatsCache->summary_stat, pSummaryStats, sizeof( pStatsCache->summary_stat ) ); + vos_mem_copy( &pStatsCache->ClassA_stat, pClassAStats, sizeof( pStatsCache->ClassA_stat ) ); + vos_mem_copy( &pStatsCache->ClassB_stat, pClassBStats, sizeof( pStatsCache->ClassB_stat ) ); + vos_mem_copy( &pStatsCache->ClassC_stat, pClassCStats, sizeof( pStatsCache->ClassC_stat ) ); + vos_mem_copy( &pStatsCache->ClassD_stat, pClassDStats, sizeof( pStatsCache->ClassD_stat ) ); + vos_mem_copy( &pStatsCache->perStaStats, pPerStaStats, sizeof( pStatsCache->perStaStats ) ); + } + + if(pAdapter) + { + pWextState = WLAN_HDD_GET_WEXT_STATE_PTR(pAdapter); + if(pWextState) + { + vos_status = vos_event_set(&pWextState->vosevent); + if (!VOS_IS_STATUS_SUCCESS(vos_status)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: vos_event_set failed", __func__); + return; + } + } + } +} + +void ccmCfgSetCallback(tHalHandle halHandle, tANI_S32 result) +{ + v_CONTEXT_t pVosContext; + hdd_context_t *pHddCtx; + VOS_STATUS hdd_reconnect_all_adapters( hdd_context_t *pHddCtx ); +#if 0 + hdd_wext_state_t *pWextState; + v_U32_t roamId; +#endif + + ENTER(); + + pVosContext = vos_get_global_context(VOS_MODULE_ID_SYS,NULL); + + pHddCtx = (hdd_context_t*) vos_get_context(VOS_MODULE_ID_HDD,pVosContext); + if (NULL == pHddCtx) + { + hddLog(VOS_TRACE_LEVEL_ERROR, "%s: Invalid pHddCtx", __func__); + return; + } +#if 0 + pWextState = pAdapter->pWextState; +#endif + + if (WNI_CFG_NEED_RESTART == result || WNI_CFG_NEED_RELOAD == result) + { + //TODO Verify is this is really used. If yes need to fix it. + hdd_reconnect_all_adapters( pHddCtx ); +#if 0 + pAdapter->conn_info.connState = eConnectionState_NotConnected; + INIT_COMPLETION(pAdapter->disconnect_comp_var); + vosStatus = sme_RoamDisconnect(halHandle, pAdapter->sessionId, eCSR_DISCONNECT_REASON_UNSPECIFIED); + + if(VOS_STATUS_SUCCESS == vosStatus) + wait_for_completion_interruptible_timeout(&pAdapter->disconnect_comp_var, + msecs_to_jiffies(WLAN_WAIT_TIME_DISCONNECT)); + + sme_RoamConnect(halHandle, + pAdapter->sessionId, &(pWextState->roamProfile), + &roamId); +#endif + } + + EXIT(); + +} + +void hdd_clearRoamProfileIe( hdd_adapter_t *pAdapter) +{ + int i = 0; + hdd_wext_state_t *pWextState= WLAN_HDD_GET_WEXT_STATE_PTR(pAdapter); + + /* clear WPA/RSN/WSC IE information in the profile */ + pWextState->roamProfile.nWPAReqIELength = 0; + pWextState->roamProfile.pWPAReqIE = (tANI_U8 *)NULL; + pWextState->roamProfile.nRSNReqIELength = 0; + pWextState->roamProfile.pRSNReqIE = (tANI_U8 *)NULL; + +#ifdef FEATURE_WLAN_WAPI + pWextState->roamProfile.nWAPIReqIELength = 0; + pWextState->roamProfile.pWAPIReqIE = (tANI_U8 *)NULL; +#endif + + pWextState->roamProfile.bWPSAssociation = VOS_FALSE; + pWextState->roamProfile.pAddIEScan = (tANI_U8 *)NULL; + pWextState->roamProfile.nAddIEScanLength = 0; + pWextState->roamProfile.pAddIEAssoc = (tANI_U8 *)NULL; + pWextState->roamProfile.nAddIEAssocLength = 0; + + pWextState->roamProfile.EncryptionType.numEntries = 1; + pWextState->roamProfile.EncryptionType.encryptionType[0] + = eCSR_ENCRYPT_TYPE_NONE; + + pWextState->roamProfile.mcEncryptionType.numEntries = 1; + pWextState->roamProfile.mcEncryptionType.encryptionType[0] + = eCSR_ENCRYPT_TYPE_NONE; + + pWextState->roamProfile.AuthType.numEntries = 1; + pWextState->roamProfile.AuthType.authType[0] = eCSR_AUTH_TYPE_OPEN_SYSTEM; + +#ifdef WLAN_FEATURE_11W + pWextState->roamProfile.MFPEnabled = eANI_BOOLEAN_FALSE; + pWextState->roamProfile.MFPRequired = 0; + pWextState->roamProfile.MFPCapable = 0; +#endif + + pWextState->authKeyMgmt = 0; + + for (i=0; i < CSR_MAX_NUM_KEY; i++) + { + if (pWextState->roamProfile.Keys.KeyMaterial[i]) + { + pWextState->roamProfile.Keys.KeyLength[i] = 0; + } + } +#ifdef FEATURE_WLAN_WAPI + pAdapter->wapi_info.wapiAuthMode = WAPI_AUTH_MODE_OPEN; + pAdapter->wapi_info.nWapiMode = 0; +#endif + + vos_mem_zero((void *)(pWextState->req_bssId), WNI_CFG_BSSID_LEN); + +} + +void wlan_hdd_ula_done_cb(v_VOID_t *callbackContext) +{ + hdd_adapter_t *pAdapter = (hdd_adapter_t*)callbackContext; + + if (WLAN_HDD_ADAPTER_MAGIC != pAdapter->magic) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: Invalid pAdapter magic", __func__); + } + else + { + complete(&pAdapter->ula_complete); + } +} + +VOS_STATUS wlan_hdd_check_ula_done(hdd_adapter_t *pAdapter) +{ + hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); + VOS_STATUS vos_status; + unsigned long rc; + + if (VOS_FALSE == pHddStaCtx->conn_info.uIsAuthenticated) + { + INIT_COMPLETION(pAdapter->ula_complete); + + /*To avoid race condition between the set key and the last EAPOL + packet, notify TL to finish upper layer authentication incase if the + last EAPOL packet pending in the TL queue.*/ + vos_status = WLANTL_Finish_ULA(wlan_hdd_ula_done_cb, pAdapter); + + if ( vos_status != VOS_STATUS_SUCCESS ) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "[%4d] WLANTL_Finish_ULA returned ERROR status= %d", + __LINE__, vos_status ); + return vos_status; + + } + + rc = wait_for_completion_timeout(&pAdapter->ula_complete, + msecs_to_jiffies(HDD_FINISH_ULA_TIME_OUT)); + if (0 == rc) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: Timeout waiting for ULA to complete", __func__); + /* we'll still fall through and return success since the + * connection may still get established but is just taking + * too long for us to wait */ + } + } + return VOS_STATUS_SUCCESS; +} + +v_U8_t* wlan_hdd_get_vendor_oui_ie_ptr(v_U8_t *oui, v_U8_t oui_size, v_U8_t *ie, int ie_len) +{ + + int left = ie_len; + v_U8_t *ptr = ie; + v_U8_t elem_id,elem_len; + v_U8_t eid = 0xDD; + + if ( NULL == ie || 0 == ie_len ) + return NULL; + + while(left >= 2) + { + elem_id = ptr[0]; + elem_len = ptr[1]; + left -= 2; + if(elem_len > left) + { + hddLog(VOS_TRACE_LEVEL_FATAL, + FL("****Invalid IEs eid = %d elem_len=%d left=%d*****"), + eid,elem_len,left); + return NULL; + } + if (elem_id == eid) + { + if(memcmp( &ptr[2], oui, oui_size)==0) + return ptr; + } + + left -= elem_len; + ptr += (elem_len + 2); + } + return NULL; +} + +static int iw_set_commit(struct net_device *dev, struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + hddLog( LOG1, "In %s\n", __func__); + /* Do nothing for now */ + return 0; +} + +static int iw_get_name(struct net_device *dev, + struct iw_request_info *info, + char *wrqu, char *extra) +{ + + ENTER(); + strlcpy(wrqu, "Qcom:802.11n", IFNAMSIZ); + EXIT(); + return 0; +} + +static int iw_set_mode(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + hdd_wext_state_t *pWextState; + hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + tCsrRoamProfile *pRoamProfile; + eCsrRoamBssType LastBSSType; + eMib_dot11DesiredBssType connectedBssType; + hdd_config_t *pConfig; + struct wireless_dev *wdev; + + ENTER(); + + if (NULL == pAdapter) + { + hddLog(VOS_TRACE_LEVEL_WARN, + "%s: Invalid context, pAdapter", __func__); + return 0; + } + + if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:LOGP in Progress. Ignore!!!", __func__); + return 0; + } + + pWextState = WLAN_HDD_GET_WEXT_STATE_PTR(pAdapter); + if (pWextState == NULL) + { + hddLog(LOGE, "%s ERROR: Data Storage Corruption", __func__); + return -EINVAL; + } + + wdev = dev->ieee80211_ptr; + pRoamProfile = &pWextState->roamProfile; + LastBSSType = pRoamProfile->BSSType; + + hddLog(LOG1, "%s Old Bss type = %d", __func__, LastBSSType); + + switch (wrqu->mode) + { + case IW_MODE_ADHOC: + hddLog(LOG1, "%s Setting AP Mode as IW_MODE_ADHOC", __func__); + pRoamProfile->BSSType = eCSR_BSS_TYPE_START_IBSS; + // Set the phymode correctly for IBSS. + pConfig = (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini; + pWextState->roamProfile.phyMode = hdd_cfg_xlate_to_csr_phy_mode(pConfig->dot11Mode); + pAdapter->device_mode = WLAN_HDD_IBSS; + wdev->iftype = NL80211_IFTYPE_ADHOC; + break; + case IW_MODE_INFRA: + hddLog(LOG1, "%s Setting AP Mode as IW_MODE_INFRA", __func__); + pRoamProfile->BSSType = eCSR_BSS_TYPE_INFRASTRUCTURE; + wdev->iftype = NL80211_IFTYPE_STATION; + break; + case IW_MODE_AUTO: + hddLog(LOG1, "%s Setting AP Mode as IW_MODE_AUTO", __func__); + pRoamProfile->BSSType = eCSR_BSS_TYPE_ANY; + break; + default: + hddLog(LOG1, "%s Unknown AP Mode value", __func__); + return -EOPNOTSUPP; + } + + if ( LastBSSType != pRoamProfile->BSSType ) + { + //the BSS mode changed + // We need to issue disconnect if connected or in IBSS disconnect state + if ( hdd_connGetConnectedBssType( WLAN_HDD_GET_STATION_CTX_PTR(pAdapter), &connectedBssType ) || + ( eCSR_BSS_TYPE_START_IBSS == LastBSSType ) ) + { + VOS_STATUS vosStatus; + // need to issue a disconnect to CSR. + INIT_COMPLETION(pAdapter->disconnect_comp_var); + vosStatus = sme_RoamDisconnect( WLAN_HDD_GET_HAL_CTX(pAdapter), + pAdapter->sessionId, + eCSR_DISCONNECT_REASON_IBSS_LEAVE ); + if(VOS_STATUS_SUCCESS == vosStatus) + wait_for_completion_interruptible_timeout(&pAdapter->disconnect_comp_var, + msecs_to_jiffies(WLAN_WAIT_TIME_DISCONNECT)); + } + } + + EXIT(); + return 0; +} + + +static int iw_get_mode(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, + char *extra) +{ + + hdd_wext_state_t *pWextState; + hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + + hddLog(LOG1, "In %s", __func__); + + if (NULL == pAdapter) + { + hddLog(VOS_TRACE_LEVEL_WARN, + "%s: Invalid context, pAdapter", __func__); + return 0; + } + + if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:LOGP in Progress. Ignore!!!", __func__); + return 0; + } + + pWextState = WLAN_HDD_GET_WEXT_STATE_PTR(pAdapter); + if (pWextState == NULL) + { + hddLog(LOGE, "%s ERROR: Data Storage Corruption", __func__); + return -EINVAL; + } + + switch (pWextState->roamProfile.BSSType) + { + case eCSR_BSS_TYPE_INFRASTRUCTURE: + hddLog(LOG1, "%s returns IW_MODE_INFRA\n", __func__); + wrqu->mode = IW_MODE_INFRA; + break; + case eCSR_BSS_TYPE_IBSS: + case eCSR_BSS_TYPE_START_IBSS: + hddLog(LOG1, "%s returns IW_MODE_ADHOC\n", __func__); + wrqu->mode = IW_MODE_ADHOC; + break; + case eCSR_BSS_TYPE_ANY: + hddLog(LOG1, "%s returns IW_MODE_AUTO\n", __func__); + wrqu->mode = IW_MODE_AUTO; + break; + default: + hddLog(LOG1, "%s returns APMODE_UNKNOWN\n", __func__); + break; + } + + return 0; +} + +static int iw_set_freq(struct net_device *dev, struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + v_U32_t numChans = 0; + v_U8_t validChan[WNI_CFG_VALID_CHANNEL_LIST_LEN]; + v_U32_t indx = 0; + v_U32_t status = 0; + + hdd_wext_state_t *pWextState; + hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(pAdapter); + hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); + tCsrRoamProfile * pRoamProfile; + ENTER(); + + if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:LOGP in Progress. Ignore!!!",__func__); + return status; + } + + pWextState = WLAN_HDD_GET_WEXT_STATE_PTR(pAdapter); + + pRoamProfile = &pWextState->roamProfile; + + hddLog(LOG1,"setCHANNEL ioctl\n"); + + /* Link is up then return cant set channel*/ + if(eConnectionState_IbssConnected == pHddStaCtx->conn_info.connState || + eConnectionState_Associated == pHddStaCtx->conn_info.connState) + { + hddLog( LOGE, "IBSS Associated\n"); + return -EOPNOTSUPP; + } + + /* Settings by Frequency as input */ + if((wrqu->freq.e == 1) && (wrqu->freq.m >= (tANI_U32)2.412e8) && + (wrqu->freq.m <= (tANI_U32)5.825e8)) + { + tANI_U32 freq = wrqu->freq.m / 100000; + + while ((indx < FREQ_CHAN_MAP_TABLE_SIZE) && (freq != freq_chan_map[indx].freq)) + indx++; + if (indx >= FREQ_CHAN_MAP_TABLE_SIZE) + { + return -EINVAL; + } + wrqu->freq.e = 0; + wrqu->freq.m = freq_chan_map[indx].chan; + + } + + if (wrqu->freq.e == 0) + { + if((wrqu->freq.m < WNI_CFG_CURRENT_CHANNEL_STAMIN) || + (wrqu->freq.m > WNI_CFG_CURRENT_CHANNEL_STAMAX)) + { + hddLog(LOG1,"%s: Channel [%d] is outside valid range from %d to %d\n", + __func__, wrqu->freq.m, WNI_CFG_CURRENT_CHANNEL_STAMIN, + WNI_CFG_CURRENT_CHANNEL_STAMAX); + return -EINVAL; + } + + numChans = WNI_CFG_VALID_CHANNEL_LIST_LEN; + + if (ccmCfgGetStr(hHal, WNI_CFG_VALID_CHANNEL_LIST, + validChan, &numChans) != eHAL_STATUS_SUCCESS){ + return -EIO; + } + + for (indx = 0; indx < numChans; indx++) { + if (wrqu->freq.m == validChan[indx]){ + break; + } + } + } + else{ + + return -EINVAL; + } + + if(indx >= numChans) + { + return -EINVAL; + } + + /* Set the Operational Channel */ + numChans = pRoamProfile->ChannelInfo.numOfChannels = 1; + pHddStaCtx->conn_info.operationChannel = wrqu->freq.m; + pRoamProfile->ChannelInfo.ChannelList = &pHddStaCtx->conn_info.operationChannel; + + hddLog(LOG1,"pRoamProfile->operationChannel = %d\n", wrqu->freq.m); + + EXIT(); + + return status; +} + +static int iw_get_freq(struct net_device *dev, struct iw_request_info *info, + struct iw_freq *fwrq, char *extra) +{ + v_U32_t status = FALSE, channel = 0, freq = 0; + hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + tHalHandle hHal; + hdd_wext_state_t *pWextState; + tCsrRoamProfile * pRoamProfile; + hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); + + ENTER(); + + if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:LOGP in Progress. Ignore!!!",__func__); + return status; + } + + pWextState = WLAN_HDD_GET_WEXT_STATE_PTR(pAdapter); + hHal = WLAN_HDD_GET_HAL_CTX(pAdapter); + + pRoamProfile = &pWextState->roamProfile; + + if( pHddStaCtx->conn_info.connState== eConnectionState_Associated ) + { + if (sme_GetOperationChannel(hHal, &channel, pAdapter->sessionId) != eHAL_STATUS_SUCCESS) + { + return -EIO; + } + else + { + status = hdd_wlan_get_freq(channel, &freq); + if( TRUE == status ) + { + /* Set Exponent parameter as 6 (MHZ) in struct iw_freq + * iwlist & iwconfig command shows frequency into proper + * format (2.412 GHz instead of 246.2 MHz)*/ + fwrq->m = freq; + fwrq->e = MHZ; + } + } + } + else + { + /* Set Exponent parameter as 6 (MHZ) in struct iw_freq + * iwlist & iwconfig command shows frequency into proper + * format (2.412 GHz instead of 246.2 MHz)*/ + fwrq->m = 0; + fwrq->e = MHZ; + } + return 0; +} + +static int iw_get_tx_power(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + + hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); + + if (pHddCtx->isLogpInProgress) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:LOGP in Progress. Ignore!!!",__func__); + return -EBUSY; + } + + if(eConnectionState_Associated != pHddStaCtx->conn_info.connState) + { + wrqu->txpower.value = 0; + return 0; + } + wlan_hdd_get_classAstats(pAdapter); + wrqu->txpower.value = pAdapter->hdd_stats.ClassA_stat.max_pwr; + + return 0; +} + +static int iw_set_tx_power(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(pAdapter); + + if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:LOGP in Progress. Ignore!!!",__func__); + return 0; + } + + ENTER(); + + if ( ccmCfgSetInt(hHal, WNI_CFG_CURRENT_TX_POWER_LEVEL, wrqu->txpower.value, ccmCfgSetCallback, eANI_BOOLEAN_TRUE) != eHAL_STATUS_SUCCESS ) + { + return -EIO; + } + + EXIT(); + + return 0; +} + +static int iw_get_bitrate(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + VOS_STATUS vos_status = VOS_STATUS_SUCCESS; + eHalStatus status = eHAL_STATUS_SUCCESS; + hdd_wext_state_t *pWextState; + hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); + + ENTER(); + + if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:LOGP in Progress. Ignore!!!",__func__); + return status; + } + + if(eConnectionState_Associated != pHddStaCtx->conn_info.connState) { + wrqu->bitrate.value = 0; + } + else { + status = sme_GetStatistics( WLAN_HDD_GET_HAL_CTX(pAdapter), eCSR_HDD, + SME_SUMMARY_STATS | + SME_GLOBAL_CLASSA_STATS | + SME_GLOBAL_CLASSB_STATS | + SME_GLOBAL_CLASSC_STATS | + SME_GLOBAL_CLASSD_STATS | + SME_PER_STA_STATS, + hdd_StatisticsCB, 0, FALSE, + pHddStaCtx->conn_info.staId[0], pAdapter ); + + if(eHAL_STATUS_SUCCESS != status) + { + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s: Unable to retrieve statistics", + __func__); + return status; + } + + pWextState = WLAN_HDD_GET_WEXT_STATE_PTR(pAdapter); + + vos_status = vos_wait_single_event(&pWextState->vosevent, WLAN_WAIT_TIME_STATS); + + if (!VOS_IS_STATUS_SUCCESS(vos_status)) + { + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s: SME timeout while retrieving statistics", + __func__); + return VOS_STATUS_E_FAILURE; + } + + wrqu->bitrate.value = pAdapter->hdd_stats.ClassA_stat.tx_rate*500*1000; + } + + EXIT(); + + return vos_status; +} +/* ccm call back function */ + +static int iw_set_bitrate(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, + char *extra) +{ + hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + hdd_wext_state_t *pWextState; + hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); + v_U8_t supp_rates[WNI_CFG_SUPPORTED_RATES_11A_LEN]; + v_U32_t a_len = WNI_CFG_SUPPORTED_RATES_11A_LEN; + v_U32_t b_len = WNI_CFG_SUPPORTED_RATES_11B_LEN; + v_U32_t i, rate; + v_U32_t valid_rate = FALSE, active_phy_mode = 0; + + ENTER(); + + if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:LOGP in Progress. Ignore!!!",__func__); + return 0; + } + + pWextState = WLAN_HDD_GET_WEXT_STATE_PTR(pAdapter); + + if (eConnectionState_Associated != pHddStaCtx->conn_info.connState) + { + return -ENXIO ; + } + + rate = wrqu->bitrate.value; + + if (rate == -1) + { + rate = WNI_CFG_FIXED_RATE_AUTO; + valid_rate = TRUE; + } + else if (ccmCfgGetInt(WLAN_HDD_GET_HAL_CTX(pAdapter), + WNI_CFG_DOT11_MODE, &active_phy_mode) == eHAL_STATUS_SUCCESS) + { + if (active_phy_mode == WNI_CFG_DOT11_MODE_11A || active_phy_mode == WNI_CFG_DOT11_MODE_11G + || active_phy_mode == WNI_CFG_DOT11_MODE_11B) + { + if ((ccmCfgGetStr(WLAN_HDD_GET_HAL_CTX(pAdapter), + WNI_CFG_SUPPORTED_RATES_11A, + supp_rates, &a_len) == eHAL_STATUS_SUCCESS) && + (ccmCfgGetStr(WLAN_HDD_GET_HAL_CTX(pAdapter), + WNI_CFG_SUPPORTED_RATES_11B, + supp_rates, &b_len) == eHAL_STATUS_SUCCESS)) + { + for (i = 0; i < (b_len + a_len); ++i) + { + /* supported rates returned is double the actual rate so we divide it by 2 */ + if ((supp_rates[i]&0x7F)/2 == rate) + { + valid_rate = TRUE; + rate = i + WNI_CFG_FIXED_RATE_1MBPS; + break; + } + } + } + } + } + if (valid_rate != TRUE) + { + return -EINVAL; + } + if (ccmCfgSetInt(WLAN_HDD_GET_HAL_CTX(pAdapter), + WNI_CFG_FIXED_RATE, rate, + ccmCfgSetCallback,eANI_BOOLEAN_FALSE) != eHAL_STATUS_SUCCESS) + { + return -EIO; + } + return 0; +} + + +static int iw_set_genie(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, + char *extra) +{ + hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + hdd_wext_state_t *pWextState = WLAN_HDD_GET_WEXT_STATE_PTR(pAdapter); + u_int8_t *genie = (u_int8_t *)extra; + v_U16_t remLen; + + ENTER(); + if(!wrqu->data.length) { + hdd_clearRoamProfileIe(pAdapter); + EXIT(); + return 0; + } + + if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:LOGP in Progress. Ignore!!!",__func__); + return 0; + } + + remLen = wrqu->data.length; + + hddLog(LOG1,"iw_set_genie ioctl IE[0x%X], LEN[%d]\n", genie[0], genie[1]); + + /* clear any previous genIE before this call */ + memset( &pWextState->genIE, 0, sizeof(pWextState->genIE) ); + + while (remLen >= 2) + { + v_U16_t eLen = 0; + v_U8_t elementId; + elementId = *genie++; + eLen = *genie++; + remLen -= 2; + + hddLog(VOS_TRACE_LEVEL_INFO, "%s: IE[0x%X], LEN[%d]\n", + __func__, elementId, eLen); + + switch ( elementId ) + { + case IE_EID_VENDOR: + if ((IE_LEN_SIZE+IE_EID_SIZE+IE_VENDOR_OUI_SIZE) > eLen) /* should have at least OUI */ + return -EINVAL; + + if (0 == memcmp(&genie[0], "\x00\x50\xf2\x04", 4)) + { + v_U16_t curGenIELen = pWextState->genIE.length; + hddLog (VOS_TRACE_LEVEL_INFO, "%s Set WPS OUI(%02x %02x %02x %02x) IE(len %d)", + __func__, genie[0], genie[1], genie[2], genie[3], eLen + 2); + + if( SIR_MAC_MAX_IE_LENGTH < (pWextState->genIE.length + eLen) ) + { + hddLog(VOS_TRACE_LEVEL_FATAL, "Cannot accommodate genIE. " + "Need bigger buffer space\n"); + VOS_ASSERT(0); + return -ENOMEM; + } + // save to Additional IE ; it should be accumulated to handle WPS IE + other IE + memcpy( pWextState->genIE.addIEdata + curGenIELen, genie - 2, eLen + 2); + pWextState->genIE.length += eLen + 2; + } + else if (0 == memcmp(&genie[0], "\x00\x50\xf2", 3)) + { + hddLog (VOS_TRACE_LEVEL_INFO, "%s Set WPA IE (len %d)",__func__, eLen + 2); + memset( pWextState->WPARSNIE, 0, MAX_WPA_RSN_IE_LEN ); + memcpy( pWextState->WPARSNIE, genie - 2, (eLen + 2)); + pWextState->roamProfile.pWPAReqIE = pWextState->WPARSNIE; + pWextState->roamProfile.nWPAReqIELength = eLen + 2; + } + else /* any vendorId except WPA IE should be accumulated to genIE */ + { + v_U16_t curGenIELen = pWextState->genIE.length; + hddLog (VOS_TRACE_LEVEL_INFO, "%s Set OUI(%02x %02x %02x %02x) IE(len %d)", + __func__, genie[0], genie[1], genie[2], genie[3], eLen + 2); + + if( SIR_MAC_MAX_IE_LENGTH < (pWextState->genIE.length + eLen) ) + { + hddLog(VOS_TRACE_LEVEL_FATAL, "Cannot accommodate genIE. " + "Need bigger buffer space\n"); + VOS_ASSERT(0); + return -ENOMEM; + } + // save to Additional IE ; it should be accumulated to handle WPS IE + other IE + memcpy( pWextState->genIE.addIEdata + curGenIELen, genie - 2, eLen + 2); + pWextState->genIE.length += eLen + 2; + } + break; + case DOT11F_EID_RSN: + hddLog (LOG1, "%s Set RSN IE (len %d)",__func__, eLen+2); + memset( pWextState->WPARSNIE, 0, MAX_WPA_RSN_IE_LEN ); + memcpy( pWextState->WPARSNIE, genie - 2, (eLen + 2)); + pWextState->roamProfile.pRSNReqIE = pWextState->WPARSNIE; + pWextState->roamProfile.nRSNReqIELength = eLen + 2; + break; + + default: + hddLog (LOGE, "%s Set UNKNOWN IE %X",__func__, elementId); + return 0; + } + genie += eLen; + remLen -= eLen; + } + EXIT(); + return 0; +} + +static int iw_get_genie(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, + char *extra) +{ + hdd_wext_state_t *pWextState; + hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); + eHalStatus status; + v_U32_t length = DOT11F_IE_RSN_MAX_LEN; + v_U8_t genIeBytes[DOT11F_IE_RSN_MAX_LEN]; + + ENTER(); + + if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:LOGP in Progress. Ignore!!!",__func__); + return 0; + } + + + hddLog(LOG1,"getGEN_IE ioctl\n"); + + pWextState = WLAN_HDD_GET_WEXT_STATE_PTR(pAdapter); + + if( pHddStaCtx->conn_info.connState == eConnectionState_NotConnected) + { + return -ENXIO; + } + + // Return something ONLY if we are associated with an RSN or WPA network + if ( VOS_TRUE != hdd_IsAuthTypeRSN(WLAN_HDD_GET_HAL_CTX(pAdapter), + pWextState->roamProfile.negotiatedAuthType)) + { + return -ENXIO; + } + + // Actually retrieve the RSN IE from CSR. (We previously sent it down in the CSR Roam Profile.) + status = csrRoamGetWpaRsnReqIE(WLAN_HDD_GET_HAL_CTX(pAdapter), + pAdapter->sessionId, + &length, + genIeBytes); + length = VOS_MIN((u_int16_t) length, DOT11F_IE_RSN_MAX_LEN); + if (wrqu->data.length < length) + { + hddLog(LOG1, "%s: failed to copy data to user buffer", __func__); + return -EFAULT; + } + vos_mem_copy( extra, (v_VOID_t*)genIeBytes, wrqu->data.length); + wrqu->data.length = length; + + hddLog(LOG1,"%s: RSN IE of %d bytes returned\n", __func__, wrqu->data.length ); + + EXIT(); + + return 0; +} + +static int iw_get_encode(struct net_device *dev, + struct iw_request_info *info, + struct iw_point *dwrq, char *extra) +{ + hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + hdd_wext_state_t *pWextState = WLAN_HDD_GET_WEXT_STATE_PTR(pAdapter); + tCsrRoamProfile *pRoamProfile = &(pWextState->roamProfile); + int keyId; + eCsrAuthType authType = eCSR_AUTH_TYPE_NONE; + int i; + + ENTER(); + + if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:LOGP in Progress. Ignore!!!",__func__); + return 0; + } + + keyId = pRoamProfile->Keys.defaultIndex; + + if(keyId < 0 || keyId >= MAX_WEP_KEYS) + { + hddLog(LOG1,"%s: Invalid keyId : %d\n",__func__,keyId); + return -EINVAL; + } + + if(pRoamProfile->Keys.KeyLength[keyId] > 0) + { + dwrq->flags |= IW_ENCODE_ENABLED; + dwrq->length = pRoamProfile->Keys.KeyLength[keyId]; + vos_mem_copy(extra,&(pRoamProfile->Keys.KeyMaterial[keyId][0]),pRoamProfile->Keys.KeyLength[keyId]); + + dwrq->flags |= (keyId + 1); + + } + else + { + dwrq->flags |= IW_ENCODE_DISABLED; + } + + for(i=0; i < MAX_WEP_KEYS; i++) + { + if(pRoamProfile->Keys.KeyMaterial[i] == NULL) + { + continue; + } + else + { + break; + } + } + + if(MAX_WEP_KEYS == i) + { + dwrq->flags |= IW_ENCODE_NOKEY; + } + + authType = ((hdd_station_ctx_t*)WLAN_HDD_GET_STATION_CTX_PTR(pAdapter))->conn_info.authType; + + if(eCSR_AUTH_TYPE_OPEN_SYSTEM == authType) + { + dwrq->flags |= IW_ENCODE_OPEN; + } + else + { + dwrq->flags |= IW_ENCODE_RESTRICTED; + } + EXIT(); + return 0; +} + +#define PAE_ROLE_AUTHENTICATOR 1 // =1 for authenticator, +#define PAE_ROLE_SUPPLICANT 0 // =0 for supplicant + + +/* + * This function sends a single 'key' to LIM at all time. + */ + +static int iw_get_rts_threshold(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + v_U32_t status = 0; + + status = hdd_wlan_get_rts_threshold(pAdapter,wrqu); + + return status; +} + +static int iw_set_rts_threshold(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(pAdapter); + + ENTER(); + + if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:LOGP in Progress. Ignore!!!", __func__); + return -EAGAIN; + } + if ( wrqu->rts.value < WNI_CFG_RTS_THRESHOLD_STAMIN || wrqu->rts.value > WNI_CFG_RTS_THRESHOLD_STAMAX ) + { + return -EINVAL; + } + + if ( ccmCfgSetInt(hHal, WNI_CFG_RTS_THRESHOLD, wrqu->rts.value, ccmCfgSetCallback, eANI_BOOLEAN_TRUE) != eHAL_STATUS_SUCCESS ) + { + return -EIO; + } + + EXIT(); + + return 0; +} + +static int iw_get_frag_threshold(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + v_U32_t status = 0; + + status = hdd_wlan_get_frag_threshold(pAdapter,wrqu); + + return status; +} + +static int iw_set_frag_threshold(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(pAdapter); + + ENTER(); + + if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s:LOGP in Progress. Ignore!!!", __func__); + return -EBUSY; + } + if ( wrqu->frag.value < WNI_CFG_FRAGMENTATION_THRESHOLD_STAMIN || wrqu->frag.value > WNI_CFG_FRAGMENTATION_THRESHOLD_STAMAX ) + { + return -EINVAL; + } + + if ( ccmCfgSetInt(hHal, WNI_CFG_FRAGMENTATION_THRESHOLD, wrqu->frag.value, ccmCfgSetCallback, eANI_BOOLEAN_TRUE) != eHAL_STATUS_SUCCESS ) + { + return -EIO; + } + + EXIT(); + + return 0; +} + +static int iw_get_power_mode(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + ENTER(); + return -EOPNOTSUPP; +} + +static int iw_set_power_mode(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + ENTER(); + return -EOPNOTSUPP; +} + +static int iw_get_range(struct net_device *dev, struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(pAdapter); + struct iw_range *range = (struct iw_range *) extra; + + v_U8_t channels[WNI_CFG_VALID_CHANNEL_LIST_LEN]; + + v_U32_t num_channels = sizeof(channels); + v_U8_t supp_rates[WNI_CFG_SUPPORTED_RATES_11A_LEN]; + v_U32_t a_len; + v_U32_t b_len; + v_U32_t active_phy_mode = 0; + v_U8_t index = 0, i; + + ENTER(); + + wrqu->data.length = sizeof(struct iw_range); + memset(range, 0, sizeof(struct iw_range)); + + if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s:LOGP in Progress. Ignore!!!", __func__); + return -EBUSY; + } + + /*Get the phy mode*/ + if (ccmCfgGetInt(hHal, + WNI_CFG_DOT11_MODE, &active_phy_mode) == eHAL_STATUS_SUCCESS) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "active_phy_mode = %ld", active_phy_mode); + + if (active_phy_mode == WNI_CFG_DOT11_MODE_11A || active_phy_mode == WNI_CFG_DOT11_MODE_11G) + { + /*Get the supported rates for 11G band*/ + a_len = WNI_CFG_SUPPORTED_RATES_11A_LEN; + if (ccmCfgGetStr(hHal, + WNI_CFG_SUPPORTED_RATES_11A, + supp_rates, &a_len) == eHAL_STATUS_SUCCESS) + { + if (a_len > WNI_CFG_SUPPORTED_RATES_11A_LEN) + { + a_len = WNI_CFG_SUPPORTED_RATES_11A_LEN; + } + for (i = 0; i < a_len; i++) + { + range->bitrate[i] = ((supp_rates[i] & 0x7F) / 2) * 1000000; + } + range->num_bitrates = a_len; + } + else + { + return -EIO; + } + } + else if (active_phy_mode == WNI_CFG_DOT11_MODE_11B) + { + /*Get the supported rates for 11B band*/ + b_len = WNI_CFG_SUPPORTED_RATES_11B_LEN; + if (ccmCfgGetStr(hHal, + WNI_CFG_SUPPORTED_RATES_11B, + supp_rates, &b_len) == eHAL_STATUS_SUCCESS) + { + if (b_len > WNI_CFG_SUPPORTED_RATES_11B_LEN) + { + b_len = WNI_CFG_SUPPORTED_RATES_11B_LEN; + } + for (i = 0; i < b_len; i++) + { + range->bitrate[i] = ((supp_rates[i] & 0x7F) / 2) * 1000000; + } + range->num_bitrates = b_len; + } + else + { + return -EIO; + } + } + } + + range->max_rts = WNI_CFG_RTS_THRESHOLD_STAMAX; + range->min_frag = WNI_CFG_FRAGMENTATION_THRESHOLD_STAMIN; + range->max_frag = WNI_CFG_FRAGMENTATION_THRESHOLD_STAMAX; + + range->encoding_size[0] = 5; + range->encoding_size[1] = 13; + range->num_encoding_sizes = 2; + range->max_encoding_tokens = MAX_WEP_KEYS; + + // we support through Wireless Extensions 22 + range->we_version_compiled = WIRELESS_EXT; + range->we_version_source = 22; + + /*Supported Channels and Frequencies*/ + if (ccmCfgGetStr((hHal), WNI_CFG_VALID_CHANNEL_LIST, channels, &num_channels) != eHAL_STATUS_SUCCESS) + { + return -EIO; + } + if (num_channels > IW_MAX_FREQUENCIES) + { + num_channels = IW_MAX_FREQUENCIES; + } + + range->num_channels = num_channels; + range->num_frequency = num_channels; + + for (index=0; index < num_channels; index++) + { + v_U32_t frq_indx = 0; + + range->freq[index].i = channels[index]; + while (frq_indx < FREQ_CHAN_MAP_TABLE_SIZE) + { + if(channels[index] == freq_chan_map[frq_indx].chan) + { + range->freq[index].m = freq_chan_map[frq_indx].freq * 100000; + range->freq[index].e = 1; + break; + } + frq_indx++; + } + } + + /* Event capability (kernel + driver) */ + 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; + + /*Encryption capability*/ + range->enc_capa = IW_ENC_CAPA_WPA | IW_ENC_CAPA_WPA2 | + IW_ENC_CAPA_CIPHER_TKIP | IW_ENC_CAPA_CIPHER_CCMP; + + /* Txpower capability */ + range->txpower_capa = IW_TXPOW_MWATT; + + /*Scanning capability*/ + #if WIRELESS_EXT >= 22 + range->scan_capa = IW_SCAN_CAPA_ESSID | IW_SCAN_CAPA_TYPE | IW_SCAN_CAPA_CHANNEL; + #endif + + EXIT(); + return 0; +} + +/* Callback function registered with PMC to know status of PMC request */ +static void iw_power_callback_fn (void *pContext, eHalStatus status) +{ + struct statsContext *pStatsContext; + hdd_adapter_t *pAdapter; + + if (NULL == pContext) + { + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s: Bad param, pContext [%p]", + __func__, pContext); + return; + } + + /* there is a race condition that exists between this callback function + and the caller since the caller could time out either before or + while this code is executing. we'll assume the timeout hasn't + occurred, but we'll verify that right before we save our work */ + + pStatsContext = (struct statsContext *)pContext; + pAdapter = pStatsContext->pAdapter; + + if ((NULL == pAdapter) || (POWER_CONTEXT_MAGIC != pStatsContext->magic)) + { + /* the caller presumably timed out so there is nothing we can do */ + hddLog(VOS_TRACE_LEVEL_WARN, + "%s: Invalid context, pAdapter [%p] magic [%08x]", + __func__, pAdapter, pStatsContext->magic); + + if (ioctl_debug) + { + pr_info("%s: Invalid context, pAdapter [%p] magic [%08x]\n", + __func__, pAdapter, pStatsContext->magic); + } + return; + } + + /* and notify the caller */ + complete(&pStatsContext->completion); +} + +/* Callback function for tx per hit */ +void hdd_tx_per_hit_cb (void *pCallbackContext) +{ + hdd_adapter_t *pAdapter = (hdd_adapter_t *)pCallbackContext; + unsigned char tx_fail[16]; + union iwreq_data wrqu; + + if (NULL == pAdapter) + { + hddLog(LOGE, "hdd_tx_per_hit_cb: pAdapter is NULL\n"); + return; + } + memset(&wrqu, 0, sizeof(wrqu)); + wrqu.data.length = strlcpy(tx_fail, "TX_FAIL", sizeof(tx_fail)); + wireless_send_event(pAdapter->dev, IWEVCUSTOM, &wrqu, tx_fail); +} + +void hdd_GetClassA_statisticsCB(void *pStats, void *pContext) +{ + struct statsContext *pStatsContext; + tCsrGlobalClassAStatsInfo *pClassAStats; + hdd_adapter_t *pAdapter; + + if (ioctl_debug) + { + pr_info("%s: pStats [%p] pContext [%p]\n", + __func__, pStats, pContext); + } + + if ((NULL == pStats) || (NULL == pContext)) + { + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s: Bad param, pStats [%p] pContext [%p]", + __func__, pStats, pContext); + return; + } + + /* there is a race condition that exists between this callback function + and the caller since the caller could time out either before or + while this code is executing. we'll assume the timeout hasn't + occurred, but we'll verify that right before we save our work */ + + pClassAStats = pStats; + pStatsContext = pContext; + pAdapter = pStatsContext->pAdapter; + if ((NULL == pAdapter) || (STATS_CONTEXT_MAGIC != pStatsContext->magic)) + { + /* the caller presumably timed out so there is nothing we can do */ + hddLog(VOS_TRACE_LEVEL_WARN, + "%s: Invalid context, pAdapter [%p] magic [%08x]", + __func__, pAdapter, pStatsContext->magic); + if (ioctl_debug) + { + pr_info("%s: Invalid context, pAdapter [%p] magic [%08x]\n", + __func__, pAdapter, pStatsContext->magic); + } + return; + } + + /* the race is on. caller could have timed out immediately after + we verified the magic, but if so, caller will wait a short time + for us to copy over the stats. do so as a struct copy */ + pAdapter->hdd_stats.ClassA_stat = *pClassAStats; + + /* and notify the caller */ + complete(&pStatsContext->completion); +} + +VOS_STATUS wlan_hdd_get_classAstats(hdd_adapter_t *pAdapter) +{ + hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); + eHalStatus hstatus; + long lrc; + struct statsContext context; + + if (NULL == pAdapter) + { + hddLog(VOS_TRACE_LEVEL_ERROR, "%s: Padapter is NULL", __func__); + return VOS_STATUS_E_FAULT; + } + if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, "%s:LOGP in Progress. Ignore!!!",__func__); + return VOS_STATUS_SUCCESS; + } + + /* we are connected + prepare our callback context */ + init_completion(&context.completion); + context.pAdapter = pAdapter; + context.magic = STATS_CONTEXT_MAGIC; + /* query only for Class A statistics (which include link speed) */ + hstatus = sme_GetStatistics( WLAN_HDD_GET_HAL_CTX(pAdapter), + eCSR_HDD, + SME_GLOBAL_CLASSA_STATS, + hdd_GetClassA_statisticsCB, + 0, // not periodic + FALSE, //non-cached results + pHddStaCtx->conn_info.staId[0], + &context); + if (eHAL_STATUS_SUCCESS != hstatus) + { + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s: Unable to retrieve Class A statistics ", + __func__); + /* we'll returned a cached value below */ + } + else + { + /* request was sent -- wait for the response */ + lrc = wait_for_completion_interruptible_timeout(&context.completion, + msecs_to_jiffies(WLAN_WAIT_TIME_STATS)); + /* either we have a response or we timed out + either way, first invalidate our magic */ + context.magic = 0; + if (lrc <= 0) + { + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s: SME %s while retrieving Class A statistics", + __func__, (0 == lrc) ? "timeout" : "interrupt"); + /* there is a race condition such that the callback + function could be executing at the same time we are. of + primary concern is if the callback function had already + verified the "magic" but hasn't yet set the completion + variable. Since the completion variable is on our + stack, we'll delay just a bit to make sure the data is + still valid if that is the case */ + msleep(50); + } + } + return VOS_STATUS_SUCCESS; +} + +static void hdd_get_station_statisticsCB(void *pStats, void *pContext) +{ + struct statsContext *pStatsContext; + tCsrSummaryStatsInfo *pSummaryStats; + tCsrGlobalClassAStatsInfo *pClassAStats; + hdd_adapter_t *pAdapter; + + if (ioctl_debug) + { + pr_info("%s: pStats [%p] pContext [%p]\n", + __func__, pStats, pContext); + } + + if ((NULL == pStats) || (NULL == pContext)) + { + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s: Bad param, pStats [%p] pContext [%p]", + __func__, pStats, pContext); + return; + } + + /* there is a race condition that exists between this callback function + and the caller since the caller could time out either before or + while this code is executing. we'll assume the timeout hasn't + occurred, but we'll verify that right before we save our work */ + + pSummaryStats = (tCsrSummaryStatsInfo *)pStats; + pClassAStats = (tCsrGlobalClassAStatsInfo *)( pSummaryStats + 1 ); + pStatsContext = pContext; + pAdapter = pStatsContext->pAdapter; + if ((NULL == pAdapter) || (STATS_CONTEXT_MAGIC != pStatsContext->magic)) + { + /* the caller presumably timed out so there is nothing we can do */ + hddLog(VOS_TRACE_LEVEL_WARN, + "%s: Invalid context, pAdapter [%p] magic [%08x]", + __func__, pAdapter, pStatsContext->magic); + if (ioctl_debug) + { + pr_info("%s: Invalid context, pAdapter [%p] magic [%08x]\n", + __func__, pAdapter, pStatsContext->magic); + } + return; + } + + /* the race is on. caller could have timed out immediately after + we verified the magic, but if so, caller will wait a short time + for us to copy over the stats. do so as a struct copy */ + pAdapter->hdd_stats.summary_stat = *pSummaryStats; + pAdapter->hdd_stats.ClassA_stat = *pClassAStats; + + /* and notify the caller */ + complete(&pStatsContext->completion); +} + +VOS_STATUS wlan_hdd_get_station_stats(hdd_adapter_t *pAdapter) +{ + hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); + eHalStatus hstatus; + long lrc; + struct statsContext context; + + if (NULL == pAdapter) + { + hddLog(VOS_TRACE_LEVEL_ERROR, "%s: Padapter is NULL", __func__); + return VOS_STATUS_SUCCESS; + } + + /* we are connected + prepare our callback context */ + init_completion(&context.completion); + context.pAdapter = pAdapter; + context.magic = STATS_CONTEXT_MAGIC; + + /* query only for Summary & Class A statistics */ + hstatus = sme_GetStatistics(WLAN_HDD_GET_HAL_CTX(pAdapter), + eCSR_HDD, + SME_SUMMARY_STATS | + SME_GLOBAL_CLASSA_STATS, + hdd_get_station_statisticsCB, + 0, // not periodic + FALSE, //non-cached results + pHddStaCtx->conn_info.staId[0], + &context); + if (eHAL_STATUS_SUCCESS != hstatus) + { + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s: Unable to retrieve statistics", + __func__); + /* we'll return with cached values */ + } + else + { + /* request was sent -- wait for the response */ + lrc = wait_for_completion_interruptible_timeout(&context.completion, + msecs_to_jiffies(WLAN_WAIT_TIME_STATS)); + /* either we have a response or we timed out + either way, first invalidate our magic */ + context.magic = 0; + if (lrc <= 0) + { + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s: SME %s while retrieving statistics", + __func__, (0 == lrc) ? "timeout" : "interrupt"); + /* there is a race condition such that the callback + function could be executing at the same time we are. of + primary concern is if the callback function had already + verified the "magic" but hasn't yet set the completion + variable. Since the completion variable is on our + stack, we'll delay just a bit to make sure the data is + still valid if that is the case */ + msleep(50); + } + } + return VOS_STATUS_SUCCESS; +} + + +/* + * Support for the LINKSPEED private command + * Per the WiFi framework the response must be of the form + * "LinkSpeed xx" + */ +static int iw_get_linkspeed(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + hdd_context_t *pHddCtx; + char *pLinkSpeed = (char*)extra; + int len = sizeof(v_U32_t) + 1; + v_U32_t link_speed = 0; + hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); + VOS_STATUS status; + int rc, valid; + + pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + + valid = wlan_hdd_validate_context(pHddCtx); + + if (0 != valid) + { + hddLog(VOS_TRACE_LEVEL_ERROR, FL("HDD context is not valid")); + return valid; + } + + if (eConnectionState_Associated != pHddStaCtx->conn_info.connState) + { + /* we are not connected so we don't have a classAstats */ + link_speed = 0; + } + else + { + status = wlan_hdd_get_classAstats(pAdapter); + + if (!VOS_IS_STATUS_SUCCESS(status )) + { + hddLog(VOS_TRACE_LEVEL_ERROR, FL("Unable to retrieve SME statistics")); + return -EINVAL; + } + + /* Unit of link capacity is obtained from the TL API is MbpsX10 */ + WLANTL_GetSTALinkCapacity(WLAN_HDD_GET_CTX(pAdapter)->pvosContext, + (WLAN_HDD_GET_STATION_CTX_PTR(pAdapter))->conn_info.staId[0], + &link_speed); + + link_speed = link_speed / 10; + + if (0 == link_speed) + { + /* The linkspeed returned by HAL is in units of 500kbps. + * converting it to mbps. + * This is required to support legacy firmware which does + * not return link capacity. + */ + link_speed = pAdapter->hdd_stats.ClassA_stat.tx_rate/2; + } + + } + + wrqu->data.length = len; + // return the linkspeed in the format required by the WiFi Framework + rc = snprintf(pLinkSpeed, len, "%u", link_speed); + if ((rc < 0) || (rc >= len)) + { + // encoding or length error? + hddLog(VOS_TRACE_LEVEL_ERROR,FL("Unable to encode link speed")); + return -EIO; + } + + /* a value is being successfully returned */ + return 0; +} + + +/* + * Support for the RSSI & RSSI-APPROX private commands + * Per the WiFi framework the response must be of the form + * " rssi " + * unless we are not associated, in which case the response is + * "OK" + */ +static int iw_get_rssi(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + char *cmd = extra; + int len = wrqu->data.length; + v_S7_t s7Rssi = 0; + hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); + int ssidlen = pHddStaCtx->conn_info.SSID.SSID.length; + VOS_STATUS vosStatus; + int rc; + + if ((eConnectionState_Associated != pHddStaCtx->conn_info.connState) || + (0 == ssidlen) || (ssidlen >= len)) + { + /* we are not connected or our SSID is too long + so we cannot report an rssi */ + rc = scnprintf(cmd, len, "OK"); + } + else + { + /* we are connected with a valid SSID + so we can write the SSID into the return buffer + (note that it is not NUL-terminated) */ + memcpy(cmd, pHddStaCtx->conn_info.SSID.SSID.ssId, ssidlen ); + + vosStatus = wlan_hdd_get_rssi(pAdapter, &s7Rssi); + + if (VOS_STATUS_SUCCESS == vosStatus) + { + /* append the rssi to the ssid in the format required by + the WiFI Framework */ + rc = scnprintf(&cmd[ssidlen], len - ssidlen, " rssi %d", s7Rssi); + } + else + { + rc = -1; + } + } + + /* verify that we wrote a valid response */ + if ((rc < 0) || (rc >= len)) + { + // encoding or length error? + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s: Unable to encode RSSI, got [%s]", + __func__, cmd); + return -EIO; + } + + /* a value is being successfully returned */ + return 0; +} + +/* + * Support for SoftAP channel range private command + */ +static int iw_softap_set_channel_range( struct net_device *dev, + int startChannel, + int endChannel, + int band) +{ + VOS_STATUS status; + int ret = 0; + hdd_adapter_t *pHostapdAdapter = (netdev_priv(dev)); + tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(pHostapdAdapter); + hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pHostapdAdapter); + + + status = WLANSAP_SetChannelRange(hHal, startChannel, endChannel, band); + if (VOS_STATUS_SUCCESS != status) + { + ret = -EINVAL; + } + pHddCtx->is_dynamic_channel_range_set = 1; + return ret; +} + +VOS_STATUS wlan_hdd_enter_bmps(hdd_adapter_t *pAdapter, int mode) +{ + struct statsContext context; + eHalStatus status; + hdd_context_t *pHddCtx; + + if (NULL == pAdapter) + { + hddLog(VOS_TRACE_LEVEL_FATAL, "Adapter NULL"); + return VOS_STATUS_E_FAULT; + } + + hddLog(VOS_TRACE_LEVEL_INFO_HIGH, "power mode=%d", mode); + pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + init_completion(&context.completion); + + context.pAdapter = pAdapter; + context.magic = POWER_CONTEXT_MAGIC; + + if (DRIVER_POWER_MODE_ACTIVE == mode) + { + hddLog(VOS_TRACE_LEVEL_INFO_HIGH, "%s:Wlan driver Entering " + "Full Power", __func__); + status = sme_RequestFullPower(WLAN_HDD_GET_HAL_CTX(pAdapter), + iw_power_callback_fn, &context, + eSME_FULL_PWR_NEEDED_BY_HDD); + // Enter Full power command received from GUI this means we are disconnected + // Set PMC remainInPowerActiveTillDHCP flag to disable auto BMPS entry by PMC + sme_SetDHCPTillPowerActiveFlag(pHddCtx->hHal, TRUE); + if (eHAL_STATUS_PMC_PENDING == status) + { + int lrc = wait_for_completion_interruptible_timeout( + &context.completion, + msecs_to_jiffies(WLAN_WAIT_TIME_POWER)); + context.magic = 0; + if (lrc <= 0) + { + hddLog(VOS_TRACE_LEVEL_ERROR,"%s: SME %s while requesting fullpower ", + __func__, (0 == lrc) ? "timeout" : "interrupt"); + /* there is a race condition such that the callback + function could be executing at the same time we are. of + primary concern is if the callback function had already + verified the "magic" but hasn't yet set the completion + variable. Since the completion variable is on our + stack, we'll delay just a bit to make sure the data is + still valid if that is the case */ + msleep(50); + /* we'll now returned a cached value below */ + } + } + } + else if (DRIVER_POWER_MODE_AUTO == mode) + { + if (pHddCtx->cfg_ini->fIsBmpsEnabled) + { + hddLog(VOS_TRACE_LEVEL_INFO_HIGH, "%s:Wlan driver Entering Bmps ", + __func__); + // Enter BMPS command received from GUI this means DHCP is completed + // Clear PMC remainInPowerActiveTillDHCP flag to enable auto BMPS entry + sme_SetDHCPTillPowerActiveFlag(WLAN_HDD_GET_HAL_CTX(pAdapter), + FALSE); + status = sme_RequestBmps(WLAN_HDD_GET_HAL_CTX(pAdapter), + iw_power_callback_fn, &context); + if (eHAL_STATUS_PMC_PENDING == status) + { + int lrc = wait_for_completion_interruptible_timeout( + &context.completion, + msecs_to_jiffies(WLAN_WAIT_TIME_POWER)); + context.magic = 0; + if (lrc <= 0) + { + hddLog(VOS_TRACE_LEVEL_ERROR,"%s: SME %s while requesting BMPS ", + __func__, (0 == lrc) ? "timeout" : "interrupt"); + /* there is a race condition such that the callback + function could be executing at the same time we are. of + primary concern is if the callback function had already + verified the "magic" but hasn't yet set the completion + variable. Since the completion variable is on our + stack, we'll delay just a bit to make sure the data is + still valid if that is the case */ + msleep(50); + /* we'll now returned a cached value below */ + } + } + } + else + { + hddLog(VOS_TRACE_LEVEL_INFO_HIGH, "BMPS is not " + "enabled in the cfg"); + } + } + return VOS_STATUS_SUCCESS; +} + +VOS_STATUS wlan_hdd_set_powersave(hdd_adapter_t *pAdapter, int mode) +{ + hdd_context_t *pHddCtx; + + if (NULL == pAdapter) + { + hddLog(VOS_TRACE_LEVEL_FATAL, "Adapter NULL"); + return VOS_STATUS_E_FAULT; + } + + hddLog(VOS_TRACE_LEVEL_INFO_HIGH, "power mode=%d", mode); + + pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + + if (DRIVER_POWER_MODE_ACTIVE == mode) + { + hddLog(VOS_TRACE_LEVEL_INFO_HIGH, "%s:Wlan driver Entering " + "Full Power", __func__); + + /* + * Enter Full power command received from GUI + * this means we are disconnected + */ + sme_PsOffloadDisablePowerSave(WLAN_HDD_GET_HAL_CTX(pAdapter), + pAdapter->sessionId); + } + else if (DRIVER_POWER_MODE_AUTO == mode) + { + if (pHddCtx->cfg_ini->fIsBmpsEnabled) + { + hddLog(VOS_TRACE_LEVEL_INFO_HIGH, "%s:Wlan driver Entering Bmps ", + __func__); + + /* + * Enter BMPS command received from GUI + * this means DHCP is completed + */ + sme_PsOffloadEnablePowerSave(WLAN_HDD_GET_HAL_CTX(pAdapter), + pAdapter->sessionId); + } + else + { + hddLog(VOS_TRACE_LEVEL_INFO_HIGH, "BMPS is not " + "enabled in the cfg"); + } + } + return VOS_STATUS_SUCCESS; +} + +VOS_STATUS wlan_hdd_exit_lowpower(hdd_context_t *pHddCtx, + hdd_adapter_t *pAdapter) +{ + VOS_STATUS vos_Status; + + if ((NULL == pAdapter) || (NULL == pHddCtx)) + { + hddLog(VOS_TRACE_LEVEL_FATAL, "Invalid pointer"); + return VOS_STATUS_E_FAULT; + } + + /**Exit from Deep sleep or standby if we get the driver + START cmd from android GUI + */ + if (WLAN_MAP_DRIVER_STOP_TO_STANDBY == pHddCtx->cfg_ini->nEnableDriverStop) + { + hddLog(VOS_TRACE_LEVEL_INFO_HIGH, "%s: WLAN being exit " + "from Stand by",__func__); + vos_Status = hdd_exit_standby(pHddCtx); + } + else if (eHDD_SUSPEND_DEEP_SLEEP == pHddCtx->hdd_ps_state) + { + hddLog(VOS_TRACE_LEVEL_INFO_HIGH, "%s: WLAN being exit " + "from deep sleep",__func__); + vos_Status = hdd_exit_deep_sleep(pHddCtx, pAdapter); + } + else + { + hddLog(VOS_TRACE_LEVEL_WARN, "%s: Not in standby or deep sleep. " + "Ignore start cmd %d", __func__, pHddCtx->hdd_ps_state); + vos_Status = VOS_STATUS_SUCCESS; + } + + return vos_Status; +} + +VOS_STATUS wlan_hdd_enter_lowpower(hdd_context_t *pHddCtx) +{ + VOS_STATUS vos_Status = VOS_STATUS_E_FAILURE; + + if (NULL == pHddCtx) + { + hddLog(VOS_TRACE_LEVEL_INFO_HIGH, "HDD context NULL"); + return VOS_STATUS_E_FAULT; + } + + if (WLAN_MAP_DRIVER_STOP_TO_STANDBY == pHddCtx->cfg_ini->nEnableDriverStop) + { + //Execute standby procedure. + //Executing standby procedure will cause the STA to + //disassociate first and then the chip will be put into standby. + hddLog(VOS_TRACE_LEVEL_INFO_HIGH, "Wlan driver entering Stand by mode"); + vos_Status = hdd_enter_standby(pHddCtx); + } + else if (WLAN_MAP_DRIVER_STOP_TO_DEEP_SLEEP == + pHddCtx->cfg_ini->nEnableDriverStop) + { + //Execute deep sleep procedure + hddLog(VOS_TRACE_LEVEL_INFO_HIGH, "Wlan driver entering " + "deep sleep mode\n"); + //Deep sleep not supported + vos_Status = hdd_enter_standby(pHddCtx); + } + else + { + hddLog(VOS_TRACE_LEVEL_INFO_LOW, "%s: Driver stop is not enabled %d", + __func__, pHddCtx->cfg_ini->nEnableDriverStop); + vos_Status = VOS_STATUS_SUCCESS; + } + + return vos_Status; +} + + +void* wlan_hdd_change_country_code_callback(void *pAdapter) +{ + + hdd_adapter_t *call_back_pAdapter = pAdapter; + complete(&call_back_pAdapter->change_country_code); + + return NULL; +} + +static int iw_set_priv(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + char *cmd = extra; + int cmd_len = wrqu->data.length; + int ret = 0; + int status = 0; + hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + + ENTER(); + + if (ioctl_debug) + { + pr_info("%s: req [%s] len [%d]\n", __func__, cmd, cmd_len); + } + + hddLog(VOS_TRACE_LEVEL_INFO_MED, + "%s: ***Received %s cmd from Wi-Fi GUI***", __func__, cmd); + + if (pHddCtx->isLogpInProgress) { + if (ioctl_debug) + { + pr_info("%s: RESTART in progress\n", __func__); + } + + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:LOGP in Progress. Ignore!!!",__func__); + return status; + } + + if(strncmp(cmd, "CSCAN",5) == 0 ) + { + status = iw_set_cscan(dev, info, wrqu, extra); + } + else if( strcasecmp(cmd, "start") == 0 ) { + + hddLog(VOS_TRACE_LEVEL_INFO_HIGH, "Start command\n"); + /*Exit from Deep sleep or standby if we get the driver START cmd from android GUI*/ + status = wlan_hdd_exit_lowpower(pHddCtx, pAdapter); + + if(status == VOS_STATUS_SUCCESS) + { + union iwreq_data wrqu; + char buf[10]; + + memset(&wrqu, 0, sizeof(wrqu)); + wrqu.data.length = strlcpy(buf, "START", sizeof(buf)); + wireless_send_event(pAdapter->dev, IWEVCUSTOM, &wrqu, buf); + } + else + { + hddLog(VOS_TRACE_LEVEL_FATAL, "%s: START CMD Status %d", __func__, status); + } + goto done; + } + else if( strcasecmp(cmd, "stop") == 0 ) + { + union iwreq_data wrqu; + char buf[10]; + + hddLog(VOS_TRACE_LEVEL_INFO_HIGH, "Stop command\n"); + + wlan_hdd_enter_lowpower(pHddCtx); + memset(&wrqu, 0, sizeof(wrqu)); + wrqu.data.length = strlcpy(buf, "STOP", sizeof(buf)); + wireless_send_event(pAdapter->dev, IWEVCUSTOM, &wrqu, buf); + status = VOS_STATUS_SUCCESS; + goto done; + } + else if (strcasecmp(cmd, "macaddr") == 0) + { + ret = snprintf(cmd, cmd_len, "Macaddr = " MAC_ADDRESS_STR, + MAC_ADDR_ARRAY(pAdapter->macAddressCurrent.bytes)); + } + else if (strcasecmp(cmd, "scan-active") == 0) + { + pAdapter->scan_info.scan_mode = eSIR_ACTIVE_SCAN; + ret = snprintf(cmd, cmd_len, "OK"); + } + else if (strcasecmp(cmd, "scan-passive") == 0) + { + pAdapter->scan_info.scan_mode = eSIR_PASSIVE_SCAN; + ret = snprintf(cmd, cmd_len, "OK"); + } + else if( strcasecmp(cmd, "scan-mode") == 0 ) + { + ret = snprintf(cmd, cmd_len, "ScanMode = %u", pAdapter->scan_info.scan_mode); + } + else if( strcasecmp(cmd, "linkspeed") == 0 ) + { + status = iw_get_linkspeed(dev, info, wrqu, extra); + } + else if( strncasecmp(cmd, "COUNTRY", 7) == 0 ) { + char *country_code; + long lrc; + + country_code = cmd + 8; + + init_completion(&pAdapter->change_country_code); + + status = (int)sme_ChangeCountryCode(pHddCtx->hHal, + (void *)(tSmeChangeCountryCallback)wlan_hdd_change_country_code_callback, + country_code, + pAdapter, + pHddCtx->pvosContext, + eSIR_TRUE, + eSIR_TRUE); + + /* Wait for completion */ + lrc = wait_for_completion_interruptible_timeout(&pAdapter->change_country_code, + msecs_to_jiffies(WLAN_WAIT_TIME_STATS)); + + if (lrc <= 0) + { + hddLog(VOS_TRACE_LEVEL_ERROR,"%s: SME %s while setting country code ", + __func__, "Timed out"); + } + + if( 0 != status ) + { + VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + "%s: SME Change Country code fail \n",__func__); + return VOS_STATUS_E_FAILURE; + } + } + else if( strncasecmp(cmd, "rssi", 4) == 0 ) + { + status = iw_get_rssi(dev, info, wrqu, extra); + } + else if( strncasecmp(cmd, "powermode", 9) == 0 ) { + int mode; + char *ptr; + + if (9 < cmd_len) + { + ptr = (char*)(cmd + 9); + + }else{ + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "CMD LENGTH %d is not correct",cmd_len); + return VOS_STATUS_E_FAILURE; + } + + if (1 != sscanf(ptr,"%d",&mode)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "powermode input %s is not correct",ptr); + return VOS_STATUS_E_FAILURE; + } + + if(!pHddCtx->cfg_ini->enablePowersaveOffload) + wlan_hdd_enter_bmps(pAdapter, mode); + else + wlan_hdd_set_powersave(pAdapter, mode); + } + else if (strncasecmp(cmd, "getpower", 8) == 0 ) { + v_U32_t pmc_state; + v_U16_t value; + + pmc_state = pmcGetPmcState(WLAN_HDD_GET_HAL_CTX(pAdapter)); + if(pmc_state == BMPS) { + value = DRIVER_POWER_MODE_AUTO; + } + else { + value = DRIVER_POWER_MODE_ACTIVE; + } + ret = snprintf(cmd, cmd_len, "powermode = %u", value); + } + else if( strncasecmp(cmd, "btcoexmode", 10) == 0 ) { + hddLog( VOS_TRACE_LEVEL_INFO, "btcoexmode\n"); + /*TODO: set the btcoexmode*/ + } + else if( strcasecmp(cmd, "btcoexstat") == 0 ) { + + hddLog(VOS_TRACE_LEVEL_INFO, "BtCoex Status\n"); + /*TODO: Return the btcoex status*/ + } + else if( strcasecmp(cmd, "rxfilter-start") == 0 ) { + + hddLog(VOS_TRACE_LEVEL_INFO, "Rx Data Filter Start command\n"); + + /*TODO: Enable Rx data Filter*/ + } + else if( strcasecmp(cmd, "rxfilter-stop") == 0 ) { + + hddLog(VOS_TRACE_LEVEL_INFO, "Rx Data Filter Stop command\n"); + + /*TODO: Disable Rx data Filter*/ + } + else if( strcasecmp(cmd, "rxfilter-statistics") == 0 ) { + + hddLog( VOS_TRACE_LEVEL_INFO, "Rx Data Filter Statistics command\n"); + /*TODO: rxfilter-statistics*/ + } + else if( strncasecmp(cmd, "rxfilter-add", 12) == 0 ) { + + hddLog( VOS_TRACE_LEVEL_INFO, "rxfilter-add\n"); + /*TODO: rxfilter-add*/ + } + else if( strncasecmp(cmd, "rxfilter-remove",15) == 0 ) { + + hddLog( VOS_TRACE_LEVEL_INFO, "rxfilter-remove\n"); + /*TODO: rxfilter-remove*/ + } +#ifdef FEATURE_WLAN_SCAN_PNO + else if( strncasecmp(cmd, "pnosetup", 8) == 0 ) { + hddLog( VOS_TRACE_LEVEL_INFO, "pnosetup"); + /*TODO: support pnosetup*/ + } + else if( strncasecmp(cmd, "pnoforce", 8) == 0 ) { + hddLog( VOS_TRACE_LEVEL_INFO, "pnoforce"); + /*TODO: support pnoforce*/ + } + else if( strncasecmp(cmd, "pno",3) == 0 ) { + + hddLog( VOS_TRACE_LEVEL_INFO, "pno\n"); + status = iw_set_pno(dev, info, wrqu, extra, 3); + return status; + } + else if( strncasecmp(cmd, "rssifilter",10) == 0 ) { + + hddLog( VOS_TRACE_LEVEL_INFO, "rssifilter\n"); + status = iw_set_rssi_filter(dev, info, wrqu, extra, 10); + return status; + } +#endif /*FEATURE_WLAN_SCAN_PNO*/ + else if( strncasecmp(cmd, "powerparams",11) == 0 ) { + hddLog( VOS_TRACE_LEVEL_INFO, "powerparams\n"); + status = iw_set_power_params(dev, info, wrqu, extra, 11); + return status; + } + else if( 0 == strncasecmp(cmd, "CONFIG-TX-TRACKING", 18) ) { + tSirTxPerTrackingParam tTxPerTrackingParam; + char *ptr; + + if (18 < cmd_len) + { + ptr = (char*)(cmd + 18); + }else{ + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "CMD LENGTH %d is not correct",cmd_len); + return VOS_STATUS_E_FAILURE; + } + + if (4 != sscanf(ptr,"%hhu %hhu %hhu %u", + &(tTxPerTrackingParam.ucTxPerTrackingEnable), + &(tTxPerTrackingParam.ucTxPerTrackingPeriod), + &(tTxPerTrackingParam.ucTxPerTrackingRatio), + &(tTxPerTrackingParam.uTxPerTrackingWatermark))) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "CONFIG-TX-TRACKING %s input is not correct",ptr); + return VOS_STATUS_E_FAILURE; + } + + // parameters checking + // period has to be larger than 0 + if (0 == tTxPerTrackingParam.ucTxPerTrackingPeriod) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, "Period input is not correct"); + return VOS_STATUS_E_FAILURE; + } + + // use default value 5 is the input is not reasonable. in unit of 10% + if ((tTxPerTrackingParam.ucTxPerTrackingRatio > TX_PER_TRACKING_MAX_RATIO) || (0 == tTxPerTrackingParam.ucTxPerTrackingRatio)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, "Ratio input is not good. use default 5"); + tTxPerTrackingParam.ucTxPerTrackingRatio = TX_PER_TRACKING_DEFAULT_RATIO; + } + + // default is 5 + if (0 == tTxPerTrackingParam.uTxPerTrackingWatermark) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, "Tx Packet number input is not good. use default 5"); + tTxPerTrackingParam.uTxPerTrackingWatermark = TX_PER_TRACKING_DEFAULT_WATERMARK; + } + + status = sme_SetTxPerTracking(pHddCtx->hHal, hdd_tx_per_hit_cb, (void*)pAdapter, &tTxPerTrackingParam); + if(status != eHAL_STATUS_SUCCESS){ + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, "Set Tx PER Tracking Failed!"); + } + } + else { + hddLog( VOS_TRACE_LEVEL_WARN, "%s: Unsupported GUI command %s", + __func__, cmd); + } +done: + /* many of the commands write information back into the command + string using snprintf(). check the return value here in one + place */ + if ((ret < 0) || (ret >= cmd_len)) + { + /* there was an encoding error or overflow */ + status = -EIO; + } + else if (ret > 0) + { + if (copy_to_user(wrqu->data.pointer, cmd, ret)) + { + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s: failed to copy data to user buffer", __func__); + return -EFAULT; + } + wrqu->data.length = ret; + } + + if (ioctl_debug) + { + pr_info("%s: rsp [%s] len [%d] status %d\n", + __func__, cmd, wrqu->data.length, status); + } + return status; +} + +static int iw_set_nick(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + ENTER(); + return 0; +} + +static int iw_get_nick(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + ENTER(); + return 0; +} + +static struct iw_statistics *get_wireless_stats(struct net_device *dev) +{ + ENTER(); + return NULL; +} + +static int iw_set_encode(struct net_device *dev,struct iw_request_info *info, + union iwreq_data *wrqu,char *extra) + +{ + hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); + hdd_wext_state_t *pWextState = WLAN_HDD_GET_WEXT_STATE_PTR(pAdapter); + struct iw_point *encoderq = &(wrqu->encoding); + v_U32_t keyId; + v_U8_t key_length; + eCsrEncryptionType encryptionType = eCSR_ENCRYPT_TYPE_NONE; + v_BOOL_t fKeyPresent = 0; + int i; + eHalStatus status = eHAL_STATUS_SUCCESS; + + + ENTER(); + + if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:LOGP in Progress. Ignore!!!",__func__); + return 0; + } + + + keyId = encoderq->flags & IW_ENCODE_INDEX; + + if(keyId) + { + if(keyId > MAX_WEP_KEYS) + { + return -EINVAL; + } + + fKeyPresent = 1; + keyId--; + } + else + { + fKeyPresent = 0; + } + + + if(wrqu->data.flags & IW_ENCODE_DISABLED) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "****iwconfig wlan0 key off*****\n"); + if(!fKeyPresent) { + + for(i=0;i < CSR_MAX_NUM_KEY; i++) { + + if(pWextState->roamProfile.Keys.KeyMaterial[i]) + pWextState->roamProfile.Keys.KeyLength[i] = 0; + } + } + pHddStaCtx->conn_info.authType = eCSR_AUTH_TYPE_OPEN_SYSTEM; + pWextState->wpaVersion = IW_AUTH_WPA_VERSION_DISABLED; + pWextState->roamProfile.EncryptionType.encryptionType[0] = eCSR_ENCRYPT_TYPE_NONE; + pWextState->roamProfile.mcEncryptionType.encryptionType[0] = eCSR_ENCRYPT_TYPE_NONE; + + pHddStaCtx->conn_info.ucEncryptionType = eCSR_ENCRYPT_TYPE_NONE; + pHddStaCtx->conn_info.mcEncryptionType = eCSR_ENCRYPT_TYPE_NONE; + + if(eConnectionState_Associated == pHddStaCtx->conn_info.connState) + { + INIT_COMPLETION(pAdapter->disconnect_comp_var); + status = sme_RoamDisconnect( WLAN_HDD_GET_HAL_CTX(pAdapter), pAdapter->sessionId, eCSR_DISCONNECT_REASON_UNSPECIFIED ); + if(eHAL_STATUS_SUCCESS == status) + wait_for_completion_interruptible_timeout(&pAdapter->disconnect_comp_var, + msecs_to_jiffies(WLAN_WAIT_TIME_DISCONNECT)); + } + + return status; + + } + + if (wrqu->data.flags & (IW_ENCODE_OPEN | IW_ENCODE_RESTRICTED)) + { + hddLog(VOS_TRACE_LEVEL_INFO, "iwconfig wlan0 key on"); + + pHddStaCtx->conn_info.authType = (encoderq->flags & IW_ENCODE_RESTRICTED) ? eCSR_AUTH_TYPE_SHARED_KEY : eCSR_AUTH_TYPE_OPEN_SYSTEM; + + } + + + if(wrqu->data.length > 0) + { + hddLog(VOS_TRACE_LEVEL_INFO, "%s : wrqu->data.length : %d",__func__,wrqu->data.length); + + key_length = wrqu->data.length; + + /* IW_ENCODING_TOKEN_MAX is the value that is set for wrqu->data.length by iwconfig.c when 'iwconfig wlan0 key on' is issued.*/ + + if(5 == key_length) + { + hddLog(VOS_TRACE_LEVEL_INFO, "%s: Call with WEP40,key_len=%d",__func__,key_length); + + if((IW_AUTH_KEY_MGMT_802_1X == pWextState->authKeyMgmt) && (eCSR_AUTH_TYPE_OPEN_SYSTEM == pHddStaCtx->conn_info.authType)) + { + encryptionType = eCSR_ENCRYPT_TYPE_WEP40; + } + else + { + encryptionType = eCSR_ENCRYPT_TYPE_WEP40_STATICKEY; + } + } + else if(13 == key_length) + { + hddLog(VOS_TRACE_LEVEL_INFO, "%s:Call with WEP104,key_len:%d",__func__,key_length); + + if((IW_AUTH_KEY_MGMT_802_1X == pWextState->authKeyMgmt) && (eCSR_AUTH_TYPE_OPEN_SYSTEM == pHddStaCtx->conn_info.authType)) + { + encryptionType = eCSR_ENCRYPT_TYPE_WEP104; + } + else + { + encryptionType = eCSR_ENCRYPT_TYPE_WEP104_STATICKEY; + } + } + else + { + hddLog(VOS_TRACE_LEVEL_WARN, "%s: Invalid WEP key length :%d", + __func__, key_length); + return -EINVAL; + } + + pHddStaCtx->conn_info.ucEncryptionType = encryptionType; + pHddStaCtx->conn_info.mcEncryptionType = encryptionType; + pWextState->roamProfile.EncryptionType.numEntries = 1; + pWextState->roamProfile.EncryptionType.encryptionType[0] = encryptionType; + pWextState->roamProfile.mcEncryptionType.numEntries = 1; + pWextState->roamProfile.mcEncryptionType.encryptionType[0] = encryptionType; + + if((eConnectionState_NotConnected == pHddStaCtx->conn_info.connState) && + ((eCSR_AUTH_TYPE_OPEN_SYSTEM == pHddStaCtx->conn_info.authType) || + (eCSR_AUTH_TYPE_SHARED_KEY == pHddStaCtx->conn_info.authType))) + { + + vos_mem_copy(&pWextState->roamProfile.Keys.KeyMaterial[keyId][0],extra,key_length); + + pWextState->roamProfile.Keys.KeyLength[keyId] = (v_U8_t)key_length; + pWextState->roamProfile.Keys.defaultIndex = (v_U8_t)keyId; + + return status; + } + } + + return 0; +} + +static int iw_get_encodeext(struct net_device *dev, + struct iw_request_info *info, + struct iw_point *dwrq, + char *extra) +{ + hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + hdd_wext_state_t *pWextState = WLAN_HDD_GET_WEXT_STATE_PTR(pAdapter); + tCsrRoamProfile *pRoamProfile = &(pWextState->roamProfile); + int keyId; + eCsrEncryptionType encryptionType = eCSR_ENCRYPT_TYPE_NONE; + eCsrAuthType authType = eCSR_AUTH_TYPE_NONE; + int i; + + ENTER(); + + if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:LOGP in Progress. Ignore!!!", __func__); + return -EBUSY; + } + + keyId = pRoamProfile->Keys.defaultIndex; + + if(keyId < 0 || keyId >= MAX_WEP_KEYS) + { + hddLog(LOG1,"%s: Invalid keyId : %d\n",__func__,keyId); + return -EINVAL; + } + + if(pRoamProfile->Keys.KeyLength[keyId] > 0) + { + dwrq->flags |= IW_ENCODE_ENABLED; + dwrq->length = pRoamProfile->Keys.KeyLength[keyId]; + vos_mem_copy(extra, &(pRoamProfile->Keys.KeyMaterial[keyId][0]), + pRoamProfile->Keys.KeyLength[keyId]); + } + else + { + dwrq->flags |= IW_ENCODE_DISABLED; + } + + for(i=0; i < MAX_WEP_KEYS; i++) + { + if(pRoamProfile->Keys.KeyMaterial[i] == NULL) + { + continue; + } + else + { + break; + } + } + + if(MAX_WEP_KEYS == i) + { + dwrq->flags |= IW_ENCODE_NOKEY; + } + else + { + dwrq->flags |= IW_ENCODE_ENABLED; + } + + encryptionType = pRoamProfile->EncryptionType.encryptionType[0]; + + if(eCSR_ENCRYPT_TYPE_NONE == encryptionType) + { + dwrq->flags |= IW_ENCODE_DISABLED; + } + + authType = (WLAN_HDD_GET_STATION_CTX_PTR(pAdapter))->conn_info.authType; + + if(IW_AUTH_ALG_OPEN_SYSTEM == authType) + { + dwrq->flags |= IW_ENCODE_OPEN; + } + else + { + dwrq->flags |= IW_ENCODE_RESTRICTED; + } + EXIT(); + return 0; + +} + +static int iw_set_encodeext(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); + hdd_wext_state_t *pWextState = WLAN_HDD_GET_WEXT_STATE_PTR(pAdapter); + eHalStatus halStatus= eHAL_STATUS_SUCCESS; + + tCsrRoamProfile *pRoamProfile = &pWextState->roamProfile; + v_U32_t status = 0; + + struct iw_encode_ext *ext = (struct iw_encode_ext*)extra; + + v_U8_t groupmacaddr[WNI_CFG_BSSID_LEN] = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}; + + int key_index; + struct iw_point *encoding = &wrqu->encoding; + tCsrRoamSetKey setKey; + v_U32_t roamId= 0xFF; + VOS_STATUS vos_status; + + ENTER(); + + if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:LOGP in Progress. Ignore!!!",__func__); + return 0; + } + + key_index = encoding->flags & IW_ENCODE_INDEX; + + if(key_index > 0) { + + /*Convert from 1-based to 0-based keying*/ + key_index--; + } + if(!ext->key_len) { + + /*Set the encrytion type to NONE*/ + pRoamProfile->EncryptionType.encryptionType[0] = eCSR_ENCRYPT_TYPE_NONE; + return status; + } + + if(eConnectionState_NotConnected == pHddStaCtx->conn_info.connState && + (IW_ENCODE_ALG_WEP == ext->alg)) + { + if(IW_AUTH_KEY_MGMT_802_1X == pWextState->authKeyMgmt) { + + VOS_TRACE (VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO,("Invalid Configuration:%s \n"),__func__); + return -EINVAL; + } + else { + /*Static wep, update the roam profile with the keys */ + if(ext->key && (ext->key_len <= eCSR_SECURITY_WEP_KEYSIZE_MAX_BYTES) && + key_index < CSR_MAX_NUM_KEY) { + vos_mem_copy(&pRoamProfile->Keys.KeyMaterial[key_index][0],ext->key,ext->key_len); + pRoamProfile->Keys.KeyLength[key_index] = (v_U8_t)ext->key_len; + + if(ext->ext_flags & IW_ENCODE_EXT_SET_TX_KEY) + pRoamProfile->Keys.defaultIndex = (v_U8_t)key_index; + + } + } + return status; + } + + vos_mem_zero(&setKey,sizeof(tCsrRoamSetKey)); + + setKey.keyId = key_index; + setKey.keyLength = ext->key_len; + + if(ext->key_len <= CSR_MAX_KEY_LEN) { + vos_mem_copy(&setKey.Key[0],ext->key,ext->key_len); + } + + if(ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY) { + /*Key direction for group is RX only*/ + setKey.keyDirection = eSIR_RX_ONLY; + vos_mem_copy(setKey.peerMac,groupmacaddr,WNI_CFG_BSSID_LEN); + } + else { + + setKey.keyDirection = eSIR_TX_RX; + vos_mem_copy(setKey.peerMac,ext->addr.sa_data,WNI_CFG_BSSID_LEN); + } + + /*For supplicant pae role is zero*/ + setKey.paeRole = 0; + + switch(ext->alg) + { + case IW_ENCODE_ALG_NONE: + setKey.encType = eCSR_ENCRYPT_TYPE_NONE; + break; + + case IW_ENCODE_ALG_WEP: + setKey.encType = (ext->key_len== 5) ? eCSR_ENCRYPT_TYPE_WEP40:eCSR_ENCRYPT_TYPE_WEP104; + break; + + case IW_ENCODE_ALG_TKIP: + { + v_U8_t *pKey = &setKey.Key[0]; + + setKey.encType = eCSR_ENCRYPT_TYPE_TKIP; + + vos_mem_zero(pKey, CSR_MAX_KEY_LEN); + + /*Supplicant sends the 32bytes key in this order + + |--------------|----------|----------| + | Tk1 |TX-MIC | RX Mic | + |--------------|----------|----------| + <---16bytes---><--8bytes--><--8bytes--> + + */ + /*Sme expects the 32 bytes key to be in the below order + + |--------------|----------|----------| + | Tk1 |RX-MIC | TX Mic | + |--------------|----------|----------| + <---16bytes---><--8bytes--><--8bytes--> + */ + /* Copy the Temporal Key 1 (TK1) */ + vos_mem_copy(pKey,ext->key,16); + + /*Copy the rx mic first*/ + vos_mem_copy(&pKey[16],&ext->key[24],8); + + /*Copy the tx mic */ + vos_mem_copy(&pKey[24],&ext->key[16],8); + + } + break; + + case IW_ENCODE_ALG_CCMP: + setKey.encType = eCSR_ENCRYPT_TYPE_AES; + break; + +#ifdef FEATURE_WLAN_CCX +#define IW_ENCODE_ALG_KRK 6 + case IW_ENCODE_ALG_KRK: + setKey.encType = eCSR_ENCRYPT_TYPE_KRK; + break; +#endif /* FEATURE_WLAN_CCX */ + + default: + setKey.encType = eCSR_ENCRYPT_TYPE_NONE; + break; + } + + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + ("%s:cipher_alg:%d key_len[%d] *pEncryptionType :%d \n"),__func__,(int)ext->alg,(int)ext->key_len,setKey.encType); + +#ifdef WLAN_FEATURE_VOWIFI_11R + /* The supplicant may attempt to set the PTK once pre-authentication + is done. Save the key in the UMAC and include it in the ADD + BSS request */ + halStatus = sme_FTUpdateKey( WLAN_HDD_GET_HAL_CTX(pAdapter), &setKey); + if ( halStatus == eHAL_STATUS_FT_PREAUTH_KEY_SUCCESS ) + { + hddLog(VOS_TRACE_LEVEL_INFO_MED, + "%s: Update PreAuth Key success", __func__); + return 0; + } + else if ( halStatus == eHAL_STATUS_FT_PREAUTH_KEY_FAILED ) + { + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s: Update PreAuth Key failed", __func__); + return -EINVAL; + } +#endif /* WLAN_FEATURE_VOWIFI_11R */ + + pHddStaCtx->roam_info.roamingState = HDD_ROAM_STATE_SETTING_KEY; + + vos_status = wlan_hdd_check_ula_done(pAdapter); + if ( vos_status != VOS_STATUS_SUCCESS ) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "[%4d] wlan_hdd_check_ula_done returned ERROR status= %d", + __LINE__, vos_status ); + + pHddStaCtx->roam_info.roamingState = HDD_ROAM_STATE_NONE; + } + + halStatus = sme_RoamSetKey( WLAN_HDD_GET_HAL_CTX(pAdapter),pAdapter->sessionId, &setKey, &roamId ); + + if ( halStatus != eHAL_STATUS_SUCCESS ) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "[%4d] sme_RoamSetKey returned ERROR status= %d", + __LINE__, halStatus ); + + pHddStaCtx->roam_info.roamingState = HDD_ROAM_STATE_NONE; + } + + return halStatus; +} + +static int iw_set_retry(struct net_device *dev, struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(pAdapter); + + ENTER(); + + if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:LOGP in Progress. Ignore!!!", __func__); + return -EBUSY; + } + + if(wrqu->retry.value < WNI_CFG_LONG_RETRY_LIMIT_STAMIN || + wrqu->retry.value > WNI_CFG_LONG_RETRY_LIMIT_STAMAX) { + + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, ("Invalid Retry-Limit=%ld!!\n"),wrqu->retry.value); + + return -EINVAL; + } + + if(wrqu->retry.flags & IW_RETRY_LIMIT) { + + if((wrqu->retry.flags & IW_RETRY_LONG)) + { + if ( ccmCfgSetInt(hHal, WNI_CFG_LONG_RETRY_LIMIT, wrqu->retry.value, ccmCfgSetCallback, eANI_BOOLEAN_TRUE) != eHAL_STATUS_SUCCESS ) + { + return -EIO; + } + } + else if((wrqu->retry.flags & IW_RETRY_SHORT)) + { + if ( ccmCfgSetInt(hHal, WNI_CFG_SHORT_RETRY_LIMIT, wrqu->retry.value, ccmCfgSetCallback, eANI_BOOLEAN_TRUE) != eHAL_STATUS_SUCCESS ) + { + return -EIO; + } + } + } + else + { + return -EOPNOTSUPP; + } + + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, ("Set Retry-Limit=%ld!!\n"),wrqu->retry.value); + + EXIT(); + + return 0; + +} + +static int iw_get_retry(struct net_device *dev, struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(pAdapter); + v_U32_t retry = 0; + + ENTER(); + + if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:LOGP in Progress. Ignore!!!", __func__); + return -EBUSY; + } + + if((wrqu->retry.flags & IW_RETRY_LONG)) + { + wrqu->retry.flags = IW_RETRY_LIMIT | IW_RETRY_LONG; + + if ( ccmCfgGetInt(hHal, WNI_CFG_LONG_RETRY_LIMIT, &retry) != eHAL_STATUS_SUCCESS ) + { + return -EIO; + } + + wrqu->retry.value = retry; + } + else if ((wrqu->retry.flags & IW_RETRY_SHORT)) + { + wrqu->retry.flags = IW_RETRY_LIMIT | IW_RETRY_SHORT; + + if ( ccmCfgGetInt(hHal, WNI_CFG_SHORT_RETRY_LIMIT, &retry) != eHAL_STATUS_SUCCESS ) + { + return -EIO; + } + + wrqu->retry.value = retry; + } + else { + return -EOPNOTSUPP; + } + + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, ("Retry-Limit=%ld!!\n"),retry); + + EXIT(); + + return 0; +} + +static int iw_set_mlme(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, + char *extra) +{ + hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); + struct iw_mlme *mlme = (struct iw_mlme *)extra; + eHalStatus status = eHAL_STATUS_SUCCESS; + + ENTER(); + + if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:LOGP in Progress. Ignore!!!",__func__); + return 0; + } + + //reason_code is unused. By default it is set to eCSR_DISCONNECT_REASON_UNSPECIFIED + switch (mlme->cmd) { + case IW_MLME_DISASSOC: + case IW_MLME_DEAUTH: + + if( pHddStaCtx->conn_info.connState == eConnectionState_Associated ) + { + eCsrRoamDisconnectReason reason = eCSR_DISCONNECT_REASON_UNSPECIFIED; + + if( mlme->reason_code == HDD_REASON_MICHAEL_MIC_FAILURE ) + reason = eCSR_DISCONNECT_REASON_MIC_ERROR; + + INIT_COMPLETION(pAdapter->disconnect_comp_var); + status = sme_RoamDisconnect( WLAN_HDD_GET_HAL_CTX(pAdapter), pAdapter->sessionId,reason); + + if(eHAL_STATUS_SUCCESS == status) + wait_for_completion_interruptible_timeout(&pAdapter->disconnect_comp_var, + msecs_to_jiffies(WLAN_WAIT_TIME_DISCONNECT)); + else + hddLog(LOGE,"%s %d Command Disassociate/Deauthenticate : csrRoamDisconnect failure returned %d \n", + __func__, (int)mlme->cmd, (int)status ); + + /* Resetting authKeyMgmt */ + (WLAN_HDD_GET_WEXT_STATE_PTR(pAdapter))->authKeyMgmt = 0; + + netif_tx_disable(dev); + netif_carrier_off(dev); + + } + else + { + hddLog(LOGE,"%s %d Command Disassociate/Deauthenticate called but station is not in associated state \n", __func__, (int)mlme->cmd ); + } + break; + default: + hddLog(LOGE,"%s %d Command should be Disassociate/Deauthenticate \n", __func__, (int)mlme->cmd ); + return -EINVAL; + }//end of switch + + EXIT(); + + return status; + +} + +#ifdef QCA_WIFI_2_0 +int process_wma_set_command(int sessid, int paramid, + int sval, int vpdev) +{ + int ret = 0; + vos_msg_t msg = {0}; + + wda_cli_set_cmd_t *iwcmd = (wda_cli_set_cmd_t *)vos_mem_malloc( + sizeof(wda_cli_set_cmd_t)); + if (NULL == iwcmd) { + hddLog(VOS_TRACE_LEVEL_FATAL, "%s: vos_mem_alloc failed", __func__); + return -EINVAL; + } + vos_mem_zero((void *)iwcmd, sizeof(wda_cli_set_cmd_t)); + iwcmd->param_value = sval; + iwcmd->param_vdev_id = sessid; + iwcmd->param_id = paramid; + iwcmd->param_vp_dev = vpdev; + msg.type = WDA_CLI_SET_CMD; + msg.reserved = 0; + msg.bodyptr = (void *)iwcmd; + if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MODULE_ID_WDA, + &msg)) { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, "%s: " + "Not able to post wda_cli_set_cmd message to WDA", + __func__); + vos_mem_free(iwcmd); + ret = -EIO; + } + return ret; +} +#endif + +#ifdef QCA_WIFI_2_0 +static int wlan_hdd_update_phymode(struct net_device *net, tHalHandle hal, + int new_phymode, + hdd_context_t *phddctx) +{ + v_BOOL_t band_24 = VOS_FALSE, band_5g = VOS_FALSE; + v_BOOL_t ch_bond24 = VOS_FALSE, ch_bond5g = VOS_FALSE; + tSmeConfigParams smeconfig; + tANI_U32 vhtchanwidth, chwidth = WNI_CFG_CHANNEL_BONDING_MODE_DISABLE; + eCsrPhyMode phymode = -EIO, old_phymode; + eCsrBand curr_band = eCSR_BAND_ALL; + + old_phymode = sme_GetPhyMode(hal); + + if (WNI_CFG_CHANNEL_BONDING_MODE_DISABLE != + sme_GetCBPhyStateFromCBIniValue( + phddctx->cfg_ini->nChannelBondingMode24GHz)) + ch_bond24 = VOS_TRUE; + + if (WNI_CFG_CHANNEL_BONDING_MODE_DISABLE != + sme_GetCBPhyStateFromCBIniValue( + phddctx->cfg_ini->nChannelBondingMode5GHz)) + ch_bond5g = VOS_TRUE; + + if (phddctx->cfg_ini->nBandCapability == eCSR_BAND_ALL) { + band_24 = band_5g = VOS_TRUE; + } else if (phddctx->cfg_ini->nBandCapability == eCSR_BAND_24) { + band_24 = VOS_TRUE; + } else if (phddctx->cfg_ini->nBandCapability == eCSR_BAND_5G) { + band_5g = VOS_TRUE; + } + + vhtchanwidth = phddctx->cfg_ini->vhtChannelWidth; + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_DEBUG, ("ch_bond24=%d " + "ch_bond5g=%d band_24=%d band_5g=%d VHT_ch_width=%u"), ch_bond24, + ch_bond5g, band_24, band_5g, vhtchanwidth); + switch (new_phymode) { + case IEEE80211_MODE_11A: + if (band_5g) { + sme_SetPhyMode(hal, eCSR_DOT11_MODE_11a); + if ((hdd_setBand_helper(net, "SETBAND 1") == 0)) + phymode = eCSR_DOT11_MODE_11a; + else { + sme_SetPhyMode(hal, old_phymode); + return -EIO; + } + } + break; + case IEEE80211_MODE_11B: + if (band_24) { + sme_SetPhyMode(hal, eCSR_DOT11_MODE_11b); + if ((hdd_setBand_helper(net, "SETBAND 2") == 0)) + phymode = eCSR_DOT11_MODE_11b; + else { + sme_SetPhyMode(hal, old_phymode); + return -EIO; + } + } + break; + case IEEE80211_MODE_11G: + if (band_24) { + sme_SetPhyMode(hal, eCSR_DOT11_MODE_11g); + if ((hdd_setBand_helper(net, "SETBAND 2") == 0)) + phymode = eCSR_DOT11_MODE_11g; + else { + sme_SetPhyMode(hal, old_phymode); + return -EIO; + } + } + break; + /* UMAC doesnt have option to set MODE_11NA/MODE_11NG as phymode + * so setting phymode as eCSR_DOT11_MODE_11n and updating the band + * and channel bonding in configuration to reflect MODE_11NA/MODE_11NG + */ + case IEEE80211_MODE_11NA_HT20: + if (band_5g) { + sme_SetPhyMode(hal, eCSR_DOT11_MODE_11n); + if ((hdd_setBand_helper(net, "SETBAND 1") == 0)) { + phymode = eCSR_DOT11_MODE_11n; + chwidth = WNI_CFG_CHANNEL_BONDING_MODE_DISABLE; + curr_band = eCSR_BAND_5G; + } else { + sme_SetPhyMode(hal, old_phymode); + return -EIO; + } + } + break; + case IEEE80211_MODE_11NA_HT40: + if (band_5g && ch_bond5g) { + sme_SetPhyMode(hal, eCSR_DOT11_MODE_11n); + if ((hdd_setBand_helper(net, "SETBAND 1") == 0)) { + phymode = eCSR_DOT11_MODE_11n; + chwidth = WNI_CFG_CHANNEL_BONDING_MODE_ENABLE; + curr_band = eCSR_BAND_5G; + } else { + sme_SetPhyMode(hal, old_phymode); + return -EIO; + } + } + break; + case IEEE80211_MODE_11NG_HT20: + if (band_24) { + sme_SetPhyMode(hal, eCSR_DOT11_MODE_11n); + if ((hdd_setBand_helper(net, "SETBAND 2") == 0)) { + phymode = eCSR_DOT11_MODE_11n; + chwidth = WNI_CFG_CHANNEL_BONDING_MODE_DISABLE; + curr_band = eCSR_BAND_24; + } else { + sme_SetPhyMode(hal, old_phymode); + return -EIO; + } + } + break; + case IEEE80211_MODE_11NG_HT40: + if (band_24 && ch_bond24) { + sme_SetPhyMode(hal, eCSR_DOT11_MODE_11n); + if ((hdd_setBand_helper(net, "SETBAND 2") == 0)) { + phymode = eCSR_DOT11_MODE_11n; + chwidth = WNI_CFG_CHANNEL_BONDING_MODE_ENABLE; + curr_band = eCSR_BAND_24; + } else { + sme_SetPhyMode(hal, old_phymode); + return -EIO; + } + } + break; +#ifdef WLAN_FEATURE_11AC + case IEEE80211_MODE_11AC_VHT20: + case IEEE80211_MODE_11AC_VHT40: + if ((vhtchanwidth == eHT_CHANNEL_WIDTH_20MHZ || + vhtchanwidth == eHT_CHANNEL_WIDTH_40MHZ) && + band_5g) { + sme_SetPhyMode(hal, eCSR_DOT11_MODE_11ac); + if ((hdd_setBand_helper(net, "SETBAND 1") == 0)) { + phymode = eCSR_DOT11_MODE_11ac; + } else { + sme_SetPhyMode(hal, old_phymode); + return -EIO; + } + } + break; + case IEEE80211_MODE_11AC_VHT80: + if ((vhtchanwidth == eHT_CHANNEL_WIDTH_80MHZ) && + band_5g) { + sme_SetPhyMode(hal, eCSR_DOT11_MODE_11ac); + if ((hdd_setBand_helper(net, "SETBAND 1") == 0)) { + phymode = eCSR_DOT11_MODE_11ac; + } else { + sme_SetPhyMode(hal, old_phymode); + return -EIO; + } + } + break; +#endif + default: + return -EIO; + } + + if (phymode != -EIO) { + sme_GetConfigParam(hal, &smeconfig); + smeconfig.csrConfig.phyMode = phymode; + if (phymode == eCSR_DOT11_MODE_11n && + chwidth == WNI_CFG_CHANNEL_BONDING_MODE_DISABLE) { + if (curr_band == eCSR_BAND_24) + smeconfig.csrConfig.channelBondingMode24GHz = + WNI_CFG_CHANNEL_BONDING_MODE_DISABLE; + else + smeconfig.csrConfig.channelBondingMode5GHz = + WNI_CFG_CHANNEL_BONDING_MODE_DISABLE; + } else if (phymode == eCSR_DOT11_MODE_11n && + chwidth == WNI_CFG_CHANNEL_BONDING_MODE_ENABLE) { + if (curr_band == eCSR_BAND_24) + smeconfig.csrConfig.channelBondingMode24GHz = + phddctx->cfg_ini->nChannelBondingMode24GHz; + else + smeconfig.csrConfig.channelBondingMode5GHz = + phddctx->cfg_ini->nChannelBondingMode5GHz; + } + + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "SET PHY MODE=%d", + smeconfig.csrConfig.phyMode); + sme_UpdateConfig(hal, &smeconfig); + } + + return 0; +} +#endif +/* set param sub-ioctls */ +static int iw_setint_getnone(struct net_device *dev, struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(pAdapter); + hdd_wext_state_t *pWextState = WLAN_HDD_GET_WEXT_STATE_PTR(pAdapter); + tSmeConfigParams smeConfig; + int *value = (int *)extra; + int sub_cmd = value[0]; + int set_value = value[1]; + int ret = 0; /* success */ + int enable_pbm, enable_mp; + +#ifdef CONFIG_HAS_EARLYSUSPEND + v_U8_t nEnableSuspendOld; +#endif + INIT_COMPLETION(pWextState->completion_var); + + if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:LOGP in Progress. Ignore!!!", __func__); + return -EBUSY; + } + + switch(sub_cmd) + { + case WE_SET_11D_STATE: + { + if((ENABLE_11D == set_value) || (DISABLE_11D == set_value)) { + + memset(&smeConfig, 0x00, sizeof(smeConfig)); + sme_GetConfigParam(hHal, &smeConfig); + smeConfig.csrConfig.Is11dSupportEnabled = (v_BOOL_t)set_value; + + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + ("11D state=%ld!!\n"), + smeConfig.csrConfig.Is11dSupportEnabled); + + sme_UpdateConfig(hHal, &smeConfig); + } + else { + return -EINVAL; + } + break; + } + + case WE_WOWL: + { + switch (set_value) + { + case 0x00: + hdd_exit_wowl(pAdapter); + break; + case 0x01: + case 0x02: + case 0x03: + enable_mp = (set_value & 0x01) ? 1 : 0; + enable_pbm = (set_value & 0x02) ? 1 : 0; + hddLog(LOGE, "magic packet ? = %s pattern byte matching ? = %s\n", + (enable_mp ? "YES":"NO"), (enable_pbm ? "YES":"NO")); + hdd_enter_wowl(pAdapter, enable_mp, enable_pbm); + break; + default: + hddLog(LOGE, "Invalid arg %d in WE_WOWL IOCTL\n", set_value); + ret = -EINVAL; + break; + } + + break; + } + case WE_SET_POWER: + { + switch (set_value) + { + case 0: //Full Power + { + struct statsContext context; + eHalStatus status; + + init_completion(&context.completion); + + context.pAdapter = pAdapter; + context.magic = POWER_CONTEXT_MAGIC; + + status = sme_RequestFullPower(WLAN_HDD_GET_HAL_CTX(pAdapter), + iw_power_callback_fn, &context, + eSME_FULL_PWR_NEEDED_BY_HDD); + if(eHAL_STATUS_PMC_PENDING == status) + { + int lrc = wait_for_completion_interruptible_timeout( + &context.completion, + msecs_to_jiffies(WLAN_WAIT_TIME_POWER)); + context.magic = 0; + if (lrc <= 0) + { + hddLog(VOS_TRACE_LEVEL_ERROR,"%s: SME %s while " + "requesting fullpower ", + __func__, (0 == lrc) ? + "timeout" : "interrupt"); + /* there is a race condition such that the callback + function could be executing at the same time we are. of + primary concern is if the callback function had already + verified the "magic" but hasn't yet set the completion + variable. Since the completion variable is on our + stack, we'll delay just a bit to make sure the data is + still valid if that is the case */ + msleep(50); + /* we'll now returned a cached value below */ + } + } + hddLog(LOGE, "iwpriv Full Power completed\n"); + break; + } + case 1: //Enable BMPS + sme_EnablePowerSave(hHal, ePMC_BEACON_MODE_POWER_SAVE); + break; + case 2: //Disable BMPS + sme_DisablePowerSave(hHal, ePMC_BEACON_MODE_POWER_SAVE); + break; + case 3: //Request Bmps + { + struct statsContext context; + eHalStatus status; + + init_completion(&context.completion); + + context.pAdapter = pAdapter; + context.magic = POWER_CONTEXT_MAGIC; + + status = sme_RequestBmps(WLAN_HDD_GET_HAL_CTX(pAdapter), + iw_power_callback_fn, &context); + if(eHAL_STATUS_PMC_PENDING == status) + { + int lrc = wait_for_completion_interruptible_timeout( + &context.completion, + msecs_to_jiffies(WLAN_WAIT_TIME_POWER)); + context.magic = 0; + if (lrc <= 0) + { + hddLog(VOS_TRACE_LEVEL_ERROR,"%s: SME %s while " + "requesting BMPS", + __func__, (0 == lrc) ? "timeout" : + "interrupt"); + /* there is a race condition such that the callback + function could be executing at the same time we are. of + primary concern is if the callback function had already + verified the "magic" but hasn't yet set the completion + variable. Since the completion variable is on our + stack, we'll delay just a bit to make sure the data is + still valid if that is the case */ + msleep(50); + /* we'll now returned a cached value below */ + } + } + hddLog(LOGE, "iwpriv Request BMPS completed\n"); + break; + } + case 4: //Enable IMPS + sme_EnablePowerSave(hHal, ePMC_IDLE_MODE_POWER_SAVE); + break; + case 5: //Disable IMPS + sme_DisablePowerSave(hHal, ePMC_IDLE_MODE_POWER_SAVE); + break; + case 6: //Enable Standby + sme_EnablePowerSave(hHal, ePMC_STANDBY_MODE_POWER_SAVE); + break; + case 7: //Disable Standby + sme_DisablePowerSave(hHal, ePMC_STANDBY_MODE_POWER_SAVE); + break; + case 8: //Request Standby +#ifdef CONFIG_HAS_EARLYSUSPEND +#endif + break; + case 9: //Start Auto Bmps Timer + sme_StartAutoBmpsTimer(hHal); + break; + case 10://Stop Auto BMPS Timer + sme_StopAutoBmpsTimer(hHal); + break; +#ifdef CONFIG_HAS_EARLYSUSPEND + case 11://suspend to standby +#ifdef CONFIG_HAS_EARLYSUSPEND + nEnableSuspendOld = (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini->nEnableSuspend; + (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini->nEnableSuspend = 1; + (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini->nEnableSuspend = nEnableSuspendOld; +#endif + break; + case 12://suspend to deep sleep +#ifdef CONFIG_HAS_EARLYSUSPEND + nEnableSuspendOld = (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini->nEnableSuspend; + (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini->nEnableSuspend = 2; + (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini->nEnableSuspend = nEnableSuspendOld; +#endif + break; + case 13://resume from suspend +#ifdef CONFIG_HAS_EARLYSUSPEND +#endif + break; +#endif + case 14://reset wlan (power down/power up) + vos_chipReset(NULL, VOS_FALSE, NULL, NULL, VOS_CHIP_RESET_UNKNOWN_EXCEPTION); + break; + default: + hddLog(LOGE, "Invalid arg %d in WE_SET_POWER IOCTL\n", set_value); + ret = -EINVAL; + break; + } + break; + } + + case WE_SET_MAX_ASSOC: + { + if ((WNI_CFG_ASSOC_STA_LIMIT_STAMIN > set_value) || + (WNI_CFG_ASSOC_STA_LIMIT_STAMAX < set_value)) + { + ret = -EINVAL; + } + else if ( ccmCfgSetInt(hHal, WNI_CFG_ASSOC_STA_LIMIT, + set_value, NULL, eANI_BOOLEAN_FALSE) + != eHAL_STATUS_SUCCESS ) + { + ret = -EIO; + } + break; + } + + case WE_SET_SAP_AUTO_CHANNEL_SELECTION: + { + if( 0 == set_value ) + { + (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini->apAutoChannelSelection = 0; + } + else if ( 1 == set_value ) + { + (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini->apAutoChannelSelection = 1; + } + else + { + hddLog(LOGE, "Invalid arg %d in WE_SET_SAP_AUTO_CHANNEL_SELECTION IOCTL\n", set_value); + ret = -EINVAL; + } + break; + } + + case WE_SET_DATA_INACTIVITY_TO: + { + if ((set_value < CFG_DATA_INACTIVITY_TIMEOUT_MIN) || + (set_value > CFG_DATA_INACTIVITY_TIMEOUT_MAX) || + (ccmCfgSetInt((WLAN_HDD_GET_CTX(pAdapter))->hHal, + WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT, + set_value, + NULL, eANI_BOOLEAN_FALSE)==eHAL_STATUS_FAILURE)) + { + hddLog(LOGE,"Failure: Could not pass on " + "WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT configuration info " + "to CCM\n"); + ret = -EINVAL; + } + break; + } + case WE_SET_MAX_TX_POWER: + { + tSirMacAddr bssid; + tSirMacAddr selfMac; + + hddLog(VOS_TRACE_LEVEL_INFO, "%s: Setting maximum tx power %d dBm", + __func__, set_value); + vos_mem_copy(bssid, pAdapter->macAddressCurrent.bytes, + VOS_MAC_ADDR_SIZE); + vos_mem_copy(selfMac, pAdapter->macAddressCurrent.bytes, + VOS_MAC_ADDR_SIZE); + + if( sme_SetMaxTxPower(hHal, bssid, selfMac, set_value) != + eHAL_STATUS_SUCCESS ) + { + hddLog(VOS_TRACE_LEVEL_ERROR, "%s: Setting maximum tx power failed", + __func__); + return -EIO; + } + + break; + } + case WE_SET_MAX_TX_POWER_2_4: + { + hddLog(VOS_TRACE_LEVEL_INFO, + "%s: Setting maximum tx power %d dBm for 2.4 GHz band", + __func__, set_value); + if (sme_SetMaxTxPowerPerBand(eCSR_BAND_24, set_value) != + eHAL_STATUS_SUCCESS) + { + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s: Setting maximum tx power failed for 2.4 GHz band", + __func__); + return -EIO; + } + + break; + } + case WE_SET_MAX_TX_POWER_5_0: + { + hddLog(VOS_TRACE_LEVEL_INFO, + "%s: Setting maximum tx power %d dBm for 5.0 GHz band", + __func__, set_value); + if (sme_SetMaxTxPowerPerBand(eCSR_BAND_5G, set_value) != + eHAL_STATUS_SUCCESS) + { + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s: Setting maximum tx power failed for 5.0 GHz band", + __func__); + return -EIO; + } + + break; + } + case WE_SET_HIGHER_DTIM_TRANSITION: + { + if(!((set_value == eANI_BOOLEAN_FALSE) || + (set_value == eANI_BOOLEAN_TRUE))) + { + hddLog(LOGE, "Dynamic DTIM Incorrect data:%d", set_value); + ret = -EINVAL; + } + else + { + if(pAdapter->higherDtimTransition != set_value) + { + pAdapter->higherDtimTransition = set_value; + hddLog(LOG1, "%s: higherDtimTransition set to :%d", __func__, pAdapter->higherDtimTransition); + } + } + + break; + } + + case WE_SET_TM_LEVEL: + { +#ifdef QCA_WIFI_ISOC + hdd_context_t *hddCtxt = WLAN_HDD_GET_CTX(pAdapter); + hddLog(VOS_TRACE_LEVEL_INFO, "Set Thermal Mitigation Level %d", (int)set_value); + hddDevTmLevelChangedHandler(hddCtxt->parent_dev, set_value); +#else + hddLog(VOS_TRACE_LEVEL_INFO, "Thermal Mitigation Level %d not set for discrete", + (int)set_value); +#endif + break; + } + + case WE_ENABLE_STRICT_FCC_REG: + { + hdd_context_t *hddCtxt = WLAN_HDD_GET_CTX(pAdapter); + struct wiphy *wiphy = NULL; + long lrc; + int status; + + wiphy = hddCtxt->wiphy; + if(wiphy == NULL) + { + hddLog(VOS_TRACE_LEVEL_ERROR,"%s: wiphy is NULL ", __func__); + break; + } + init_completion(&hddCtxt->wiphy_channel_update_event); + + hddCtxt->nEnableStrictRegulatoryForFCC = set_value; + + status = regulatory_hint(wiphy, "00"); + if(status < 0) + { + hddLog(VOS_TRACE_LEVEL_ERROR,"%s: Failure in setting regulatory rule ", __func__); + break; + } + + /* Wait for completion */ + lrc = wait_for_completion_interruptible_timeout(&hddCtxt->wiphy_channel_update_event, + msecs_to_jiffies(WLAN_WAIT_TIME_CHANNEL_UPDATE)); + if (lrc <= 0) + { + hddLog(VOS_TRACE_LEVEL_ERROR,"%s: SME %s while setting strict FCC regulatory rule ", + __func__, (0 == lrc) ? "Timeout" : "Interrupt"); + return (0 == lrc) ? -ETIMEDOUT : -EINTR; + } + hddLog(VOS_TRACE_LEVEL_INFO,"%s: SUCCESS in setting strict FCC regulatory rule", __func__); + + break; + } +#ifdef QCA_WIFI_2_0 + case WE_SET_PHYMODE: + { + hdd_context_t *phddctx = WLAN_HDD_GET_CTX(pAdapter); + + ret = wlan_hdd_update_phymode(dev, hHal, set_value, phddctx); + break; + } + + case WE_SET_NSS: + { + hddLog(LOG1, "WMI_VDEV_PARAM_NSS val %d", set_value); + ret = process_wma_set_command((int)pAdapter->sessionId, + (int)WMI_VDEV_PARAM_NSS, + set_value, VDEV_CMD); + break; + } + + case WE_SET_LDPC: + { + tANI_U32 value; + union { + tANI_U16 nCfgValue16; + tSirMacHTCapabilityInfo htCapInfo; + }uHTCapabilityInfo; + + hddLog(LOG1, "LDPC val %d", set_value); + /* get the HT capability info*/ + ret = ccmCfgGetInt(hHal, WNI_CFG_HT_CAP_INFO, &value); + if (eHAL_STATUS_SUCCESS != ret) { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: could not get HT capability info", + __func__); + return -EIO; + } + + uHTCapabilityInfo.nCfgValue16 = 0xFFFF & value; + if ((set_value && (uHTCapabilityInfo.htCapInfo.advCodingCap)) || + (!set_value)) { + ret = sme_UpdateHTConfig(hHal, pAdapter->sessionId, + WNI_CFG_HT_CAP_INFO_ADVANCE_CODING, + set_value); + } + + if (ret) + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "Failed to set LDPC value"); + + break; + } + + case WE_SET_TX_STBC: + { + tANI_U32 value; + union { + tANI_U16 nCfgValue16; + tSirMacHTCapabilityInfo htCapInfo; + }uHTCapabilityInfo; + + hddLog(LOG1, "TX_STBC val %d", set_value); + /* get the HT capability info*/ + ret = ccmCfgGetInt(hHal, WNI_CFG_HT_CAP_INFO, &value); + if (eHAL_STATUS_SUCCESS != ret) { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: could not get HT capability info", + __func__); + return -EIO; + } + + uHTCapabilityInfo.nCfgValue16 = 0xFFFF & value; + if ((set_value && (uHTCapabilityInfo.htCapInfo.txSTBC)) || + (!set_value)) { + ret = sme_UpdateHTConfig(hHal, pAdapter->sessionId, + WNI_CFG_HT_CAP_INFO_TX_STBC, + set_value); + } + + if (ret) + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "Failed to set TX STBC value"); + + break; + } + + case WE_SET_RX_STBC: + { + tANI_U32 value; + union { + tANI_U16 nCfgValue16; + tSirMacHTCapabilityInfo htCapInfo; + }uHTCapabilityInfo; + + hddLog(LOG1, "WMI_VDEV_PARAM_RX_STBC val %d", set_value); + /* get the HT capability info*/ + ret = ccmCfgGetInt(hHal, WNI_CFG_HT_CAP_INFO, &value); + if (eHAL_STATUS_SUCCESS != ret) { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + "%s: could not get HT capability info", + __func__); + return -EIO; + } + + uHTCapabilityInfo.nCfgValue16 = 0xFFFF & value; + if ((set_value && (uHTCapabilityInfo.htCapInfo.rxSTBC)) || + (!set_value)) { + ret = sme_UpdateHTConfig(hHal, pAdapter->sessionId, + WNI_CFG_HT_CAP_INFO_RX_STBC, + (!set_value)? set_value : + uHTCapabilityInfo.htCapInfo.rxSTBC); + } + + if (ret) + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "Failed to set RX STBC value"); + break; + } + + case WE_SET_SHORT_GI: + { + hddLog(LOG1, "WMI_VDEV_PARAM_SGI val %d", set_value); + ret = sme_UpdateHTConfig(hHal, pAdapter->sessionId, + WNI_CFG_HT_CAP_INFO_SHORT_GI_20MHZ, + set_value); + if (ret) + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "Failed to set ShortGI value"); + break; + } + + case WE_SET_RTSCTS: + { + u_int32_t value; + + hddLog(LOG1, "WMI_VDEV_PARAM_ENABLE_RTSCTS val %d", set_value); + if (set_value == 1) + value = (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini->RTSThreshold; + else if (set_value == 0) + value = WNI_CFG_RTS_THRESHOLD_STAMAX; + else + return -EIO; + + ret = process_wma_set_command((int)pAdapter->sessionId, + (int)WMI_VDEV_PARAM_ENABLE_RTSCTS, + set_value, VDEV_CMD); + if (!ret) { + if (ccmCfgSetInt(hHal, WNI_CFG_RTS_THRESHOLD, value, + ccmCfgSetCallback, eANI_BOOLEAN_TRUE) != + eHAL_STATUS_SUCCESS) { + hddLog(LOGE, "FAILED TO SET RTSCTS"); + return -EIO; + } + } + + break; + } + + case WE_SET_CHWIDTH: + { + bool chwidth; + hdd_context_t *phddctx = WLAN_HDD_GET_CTX(pAdapter); + /*updating channel bonding only on 5Ghz*/ + hddLog(LOG1, "WMI_VDEV_PARAM_CHWIDTH val %d", set_value); + if (set_value > eHT_CHANNEL_WIDTH_80MHZ) { + hddLog(LOGE, "Invalid channel width 0->20 1->40 2->80"); + return -EINVAL; + } + + if ((WNI_CFG_CHANNEL_BONDING_MODE_DISABLE != + csrConvertCBIniValueToPhyCBState( + phddctx->cfg_ini->nChannelBondingMode5GHz))) + chwidth = true; + + memset(&smeConfig, 0x00, sizeof(smeConfig)); + sme_GetConfigParam(hHal, &smeConfig); + switch (set_value) { + case eHT_CHANNEL_WIDTH_20MHZ: + smeConfig.csrConfig.channelBondingMode5GHz = + WNI_CFG_CHANNEL_BONDING_MODE_DISABLE; + break; + case eHT_CHANNEL_WIDTH_40MHZ: + if (chwidth) + smeConfig.csrConfig.channelBondingMode5GHz = + phddctx->cfg_ini->nChannelBondingMode5GHz; + else + return -EINVAL; + + break; +#ifdef WLAN_FEATURE_11AC + case eHT_CHANNEL_WIDTH_80MHZ: + if (chwidth) + smeConfig.csrConfig.channelBondingMode5GHz = + phddctx->cfg_ini->nChannelBondingMode5GHz; + else + return -EINVAL; + + break; +#endif + + default: + return -EINVAL; + } + + ret = process_wma_set_command((int)pAdapter->sessionId, + (int)WMI_VDEV_PARAM_CHWIDTH, + set_value, VDEV_CMD); + if (!ret) + sme_UpdateConfig(hHal, &smeConfig); + + break; + } + + case WE_SET_ANI_EN_DIS: + { + hddLog(LOG1, "WMI_PDEV_PARAM_ANI_ENABLE val %d", set_value); + ret = process_wma_set_command((int)pAdapter->sessionId, + (int)WMI_PDEV_PARAM_ANI_ENABLE, + set_value, PDEV_CMD); + break; + } + + case WE_SET_ANI_POLL_PERIOD: + { + hddLog(LOG1, "WMI_PDEV_PARAM_ANI_POLL_PERIOD val %d", set_value); + ret = process_wma_set_command((int)pAdapter->sessionId, + (int)WMI_PDEV_PARAM_ANI_POLL_PERIOD, + set_value, PDEV_CMD); + break; + } + + case WE_SET_ANI_LISTEN_PERIOD: + { + hddLog(LOG1, "WMI_PDEV_PARAM_ANI_LISTEN_PERIOD val %d", set_value); + ret = process_wma_set_command((int)pAdapter->sessionId, + (int)WMI_PDEV_PARAM_ANI_LISTEN_PERIOD, + set_value, PDEV_CMD); + break; + } + + case WE_SET_ANI_OFDM_LEVEL: + { + hddLog(LOG1, "WMI_PDEV_PARAM_ANI_OFDM_LEVEL val %d", set_value); + ret = process_wma_set_command((int)pAdapter->sessionId, + (int)WMI_PDEV_PARAM_ANI_OFDM_LEVEL, + set_value, PDEV_CMD); + break; + } + + case WE_SET_ANI_CCK_LEVEL: + { + hddLog(LOG1, "WMI_PDEV_PARAM_ANI_CCK_LEVEL val %d", set_value); + ret = process_wma_set_command((int)pAdapter->sessionId, + (int)WMI_PDEV_PARAM_ANI_CCK_LEVEL, + set_value, PDEV_CMD); + break; + } + + case WE_SET_DYNAMIC_BW: + { + hddLog(LOG1, "WMI_PDEV_PARAM_DYNAMIC_BW val %d", set_value); + ret = process_wma_set_command((int)pAdapter->sessionId, + (int)WMI_PDEV_PARAM_DYNAMIC_BW, + set_value, PDEV_CMD); + break; + } + + case WE_SET_11N_RATE: + { + u_int8_t preamble, nss, rix; + hddLog(LOG1, "WMI_VDEV_PARAM_FIXED_RATE val %d", set_value); + + rix = RC_2_RATE_IDX(set_value); + if (set_value & 0x80) { + preamble = WMI_RATE_PREAMBLE_HT; + nss = HT_RC_2_STREAMS(set_value) -1; + } else { + nss = 0; + rix = RC_2_RATE_IDX(set_value); + if (set_value & 0x10) { + preamble = WMI_RATE_PREAMBLE_CCK; + rix |= 0x4; /* Enable Short preamble always for CCK */ + } else + preamble = WMI_RATE_PREAMBLE_OFDM; + } + + hddLog(LOG1, "WMI_VDEV_PARAM_FIXED_RATE val %d rix %d preamble %x\ + nss %d", set_value, rix, preamble, nss); + + set_value = (preamble << 6) | (nss << 4) | rix; + ret = process_wma_set_command((int)pAdapter->sessionId, + (int)WMI_VDEV_PARAM_FIXED_RATE, + set_value, VDEV_CMD); + break; + } + + case WE_SET_VHT_RATE: + { + u_int8_t preamble, nss, rix; + + rix = RC_2_RATE_IDX_11AC(set_value); + preamble = WMI_RATE_PREAMBLE_VHT; + nss = HT_RC_2_STREAMS_11AC(set_value) -1; + + hddLog(LOG1, "WMI_VDEV_PARAM_FIXED_RATE val %d rix %d preamble %x\ + nss %d", set_value, rix, preamble, nss); + + set_value = (preamble << 6) | (nss << 4) | rix; + ret = process_wma_set_command((int)pAdapter->sessionId, + (int)WMI_VDEV_PARAM_FIXED_RATE, + set_value, VDEV_CMD); + break; + } + + case WE_SET_AMPDU: + { + hddLog(LOG1, "SET AMPDU val %d", set_value); + ret = process_wma_set_command((int)pAdapter->sessionId, + (int)GEN_VDEV_PARAM_AMPDU, + set_value, GEN_CMD); + break; + } + + case WE_SET_AMSDU: + { + hddLog(LOG1, "SET AMSDU val %d", set_value); + ret = process_wma_set_command((int)pAdapter->sessionId, + (int)GEN_VDEV_PARAM_AMSDU, + set_value, GEN_CMD); + break; + } + + case WE_SET_TX_CHAINMASK: + { + hddLog(LOG1, "WMI_PDEV_PARAM_TX_CHAIN_MASK val %d", set_value); + ret = process_wma_set_command((int)pAdapter->sessionId, + (int)WMI_PDEV_PARAM_TX_CHAIN_MASK, + set_value, PDEV_CMD); + break; + } + + case WE_SET_RX_CHAINMASK: + { + hddLog(LOG1, "WMI_PDEV_PARAM_RX_CHAIN_MASK val %d", set_value); + ret = process_wma_set_command((int)pAdapter->sessionId, + (int)WMI_PDEV_PARAM_RX_CHAIN_MASK, + set_value, PDEV_CMD); + break; + } + + case WE_SET_TXPOW_2G: + { + hddLog(LOG1, "WMI_PDEV_PARAM_TXPOWER_LIMIT2G val %d", set_value); + ret = process_wma_set_command((int)pAdapter->sessionId, + (int)WMI_PDEV_PARAM_TXPOWER_LIMIT2G, + set_value, PDEV_CMD); + break; + } + + case WE_SET_TXPOW_5G: + { + hddLog(LOG1, "WMI_PDEV_PARAM_TXPOWER_LIMIT5G val %d", set_value); + ret = process_wma_set_command((int)pAdapter->sessionId, + (int)WMI_PDEV_PARAM_TXPOWER_LIMIT5G, + set_value, PDEV_CMD); + break; + } + + case WE_SET_POWER_GATING: + { + hddLog(LOG1, "WMI_PDEV_PARAM_POWER_GATING_SLEEP val %d", + set_value); + ret = process_wma_set_command((int)pAdapter->sessionId, + (int)WMI_PDEV_PARAM_POWER_GATING_SLEEP, + (set_value)? true:false, PDEV_CMD); + break; + } + + /* Firmware debug log */ + case WE_DBGLOG_LOG_LEVEL: + { + hddLog(LOG1, "WE_DBGLOG_LOG_LEVEL val %d", set_value); + ret = process_wma_set_command((int)pAdapter->sessionId, + (int)WMI_DBGLOG_LOG_LEVEL, + set_value, DBG_CMD); + break; + } + + case WE_DBGLOG_VAP_ENABLE: + { + hddLog(LOG1, "WE_DBGLOG_VAP_ENABLE val %d", set_value); + ret = process_wma_set_command((int)pAdapter->sessionId, + (int)WMI_DBGLOG_VAP_ENABLE, + set_value, DBG_CMD); + break; + } + + case WE_DBGLOG_VAP_DISABLE: + { + hddLog(LOG1, "WE_DBGLOG_VAP_DISABLE val %d", set_value); + ret = process_wma_set_command((int)pAdapter->sessionId, + (int)WMI_DBGLOG_VAP_DISABLE, + set_value, DBG_CMD); + break; + } + + case WE_DBGLOG_MODULE_ENABLE: + { + hddLog(LOG1, "WE_DBGLOG_MODULE_ENABLE val %d", set_value); + ret = process_wma_set_command((int)pAdapter->sessionId, + (int)WMI_DBGLOG_MODULE_ENABLE, + set_value, DBG_CMD); + break; + } + + case WE_DBGLOG_MODULE_DISABLE: + { + hddLog(LOG1, "WE_DBGLOG_MODULE_DISABLE val %d", set_value); + ret = process_wma_set_command((int)pAdapter->sessionId, + (int)WMI_DBGLOG_MODULE_DISABLE, + set_value, DBG_CMD); + break; + } + + case WE_DBGLOG_MOD_LOG_LEVEL: + { + hddLog(LOG1, "WE_DBGLOG_MOD_LOG_LEVEL val %d", set_value); + ret = process_wma_set_command((int)pAdapter->sessionId, + (int)WMI_DBGLOG_MOD_LOG_LEVEL, + set_value, DBG_CMD); + break; + } + + case WE_DBGLOG_TYPE: + { + hddLog(LOG1, "WE_DBGLOG_TYPE val %d", set_value); + ret = process_wma_set_command((int)pAdapter->sessionId, + (int)WMI_DBGLOG_TYPE, + set_value, DBG_CMD); + break; + } + case WE_DBGLOG_REPORT_ENABLE: + { + hddLog(LOG1, "WE_DBGLOG_REPORT_ENABLE val %d", set_value); + ret = process_wma_set_command((int)pAdapter->sessionId, + (int)WMI_DBGLOG_REPORT_ENABLE, + set_value, DBG_CMD); + break; + } + + case WE_SET_TXRX_FWSTATS: + { + hddLog(LOG1, "WE_SET_TXRX_FWSTATS val %d", set_value); + ret = process_wma_set_command((int)pAdapter->sessionId, + (int)WMA_VDEV_TXRX_FWSTATS_ENABLE_CMDID, + set_value, VDEV_CMD); + break; + } + + case WE_TXRX_FWSTATS_RESET: + { + hddLog(LOG1, "WE_TXRX_FWSTATS_RESET val %d", set_value); + ret = process_wma_set_command((int)pAdapter->sessionId, + (int)WMA_VDEV_TXRX_FWSTATS_RESET_CMDID, + set_value, VDEV_CMD); + break; + } + + case WE_PPS_PAID_MATCH: + { + if(pAdapter->device_mode != WLAN_HDD_INFRA_STATION) + return EINVAL; + + hddLog(LOG1, "WMI_VDEV_PPS_PAID_MATCH val %d ", set_value); + ret = process_wma_set_command((int)pAdapter->sessionId, + (int)WMI_VDEV_PPS_PAID_MATCH, + set_value, VDEV_CMD); + break; + } + + case WE_PPS_GID_MATCH: + { + if(pAdapter->device_mode != WLAN_HDD_INFRA_STATION) + return EINVAL; + hddLog(LOG1, "WMI_VDEV_PPS_GID_MATCH val %d ", set_value); + ret = process_wma_set_command((int)pAdapter->sessionId, + (int)WMI_VDEV_PPS_GID_MATCH, + set_value, VDEV_CMD); + break; + } + + case WE_PPS_EARLY_TIM_CLEAR: + { + if(pAdapter->device_mode != WLAN_HDD_INFRA_STATION) + return EINVAL; + hddLog(LOG1, " WMI_VDEV_PPS_EARLY_TIM_CLEAR val %d ", set_value); + ret = process_wma_set_command((int)pAdapter->sessionId, + (int)WMI_VDEV_PPS_EARLY_TIM_CLEAR, + set_value, VDEV_CMD); + break; + } + + case WE_PPS_EARLY_DTIM_CLEAR: + { + if(pAdapter->device_mode != WLAN_HDD_INFRA_STATION) + return EINVAL; + hddLog(LOG1, "WMI_VDEV_PPS_EARLY_DTIM_CLEAR val %d", set_value); + ret = process_wma_set_command((int)pAdapter->sessionId, + (int)WMI_VDEV_PPS_EARLY_DTIM_CLEAR, + set_value, VDEV_CMD); + break; + } + + case WE_PPS_EOF_PAD_DELIM: + { + if(pAdapter->device_mode != WLAN_HDD_INFRA_STATION) + return EINVAL; + hddLog(LOG1, "WMI_VDEV_PPS_EOF_PAD_DELIM val %d ", set_value); + ret = process_wma_set_command((int)pAdapter->sessionId, + (int)WMI_VDEV_PPS_EOF_PAD_DELIM, + set_value, VDEV_CMD); + break; + } + + case WE_PPS_MACADDR_MISMATCH: + { + if(pAdapter->device_mode != WLAN_HDD_INFRA_STATION) + return EINVAL; + hddLog(LOG1, "WMI_VDEV_PPS_MACADDR_MISMATCH val %d ", set_value); + ret = process_wma_set_command((int)pAdapter->sessionId, + (int)WMI_VDEV_PPS_MACADDR_MISMATCH, + set_value, VDEV_CMD); + break; + } + + case WE_PPS_DELIM_CRC_FAIL: + { + if(pAdapter->device_mode != WLAN_HDD_INFRA_STATION) + return EINVAL; + hddLog(LOG1, "WMI_VDEV_PPS_DELIM_CRC_FAIL val %d ", set_value); + ret = process_wma_set_command((int)pAdapter->sessionId, + (int)WMI_VDEV_PPS_DELIM_CRC_FAIL, + set_value, VDEV_CMD); + break; + } + + + case WE_PPS_GID_NSTS_ZERO: + { + if(pAdapter->device_mode != WLAN_HDD_INFRA_STATION) + return EINVAL; + hddLog(LOG1, "WMI_VDEV_PPS_GID_NSTS_ZERO val %d ", set_value); + ret = process_wma_set_command((int)pAdapter->sessionId, + (int)WMI_VDEV_PPS_GID_NSTS_ZERO, + set_value, VDEV_CMD); + break; + } + + + case WE_PPS_RSSI_CHECK: + { + if(pAdapter->device_mode != WLAN_HDD_INFRA_STATION) + return EINVAL; + hddLog(LOG1, "WMI_VDEV_PPS_RSSI_CHECK val %d ", set_value); + ret = process_wma_set_command((int)pAdapter->sessionId, + (int)WMI_VDEV_PPS_RSSI_CHECK, + set_value, VDEV_CMD); + break; + } + +#endif + default: + { + hddLog(LOGE, "%s: Invalid sub command %d", __func__, sub_cmd); + ret = -EINVAL; + break; + } + } + return ret; +} + +/* set param sub-ioctls */ +static int iw_setchar_getnone(struct net_device *dev, struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + VOS_STATUS vstatus; + int sub_cmd = wrqu->data.flags; + int ret = 0; /* success */ + hdd_adapter_t *pAdapter = (netdev_priv(dev)); + hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); +#ifdef WLAN_FEATURE_VOWIFI + hdd_config_t *pConfig = pHddCtx->cfg_ini; +#endif /* WLAN_FEATURE_VOWIFI */ + + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "%s: Received length %d", __func__, wrqu->data.length); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "%s: Received data %s", __func__, extra); + + if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:LOGP in Progress. Ignore!!!", __func__); + return -EBUSY; + } + + switch(sub_cmd) + { + case WE_WOWL_ADD_PTRN: + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "ADD_PTRN\n"); + hdd_add_wowl_ptrn(pAdapter, extra); + break; + case WE_WOWL_DEL_PTRN: + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "DEL_PTRN\n"); + hdd_del_wowl_ptrn(pAdapter, extra); + break; +#if defined WLAN_FEATURE_VOWIFI + case WE_NEIGHBOR_REPORT_REQUEST: + { + tRrmNeighborReq neighborReq; + tRrmNeighborRspCallbackInfo callbackInfo; + + if (pConfig->fRrmEnable) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "Neighbor Request\n"); + neighborReq.no_ssid = (wrqu->data.length - 1) ? false : true ; + if( !neighborReq.no_ssid ) + { + neighborReq.ssid.length = (wrqu->data.length - 1) > 32 ? 32 : (wrqu->data.length - 1) ; + vos_mem_copy( neighborReq.ssid.ssId, extra, neighborReq.ssid.length ); + } + + callbackInfo.neighborRspCallback = NULL; + callbackInfo.neighborRspCallbackContext = NULL; + callbackInfo.timeout = 5000; //5 seconds + sme_NeighborReportRequest( WLAN_HDD_GET_HAL_CTX(pAdapter), pAdapter->sessionId, &neighborReq, &callbackInfo ); + } + else + { + hddLog(LOGE, "%s: Ignoring neighbor request as RRM is not enabled\n", __func__); + ret = -EINVAL; + } + } + break; +#endif + case WE_SET_AP_WPS_IE: + hddLog( LOGE, "Received WE_SET_AP_WPS_IE" ); + sme_updateP2pIe( WLAN_HDD_GET_HAL_CTX(pAdapter), extra, wrqu->data.length ); + break; + case WE_SET_CONFIG: + vstatus = hdd_execute_config_command(pHddCtx, extra); + if (VOS_STATUS_SUCCESS != vstatus) + { + ret = -EINVAL; + } + break; + default: + { + hddLog(LOGE, "%s: Invalid sub command %d", __func__, sub_cmd); + ret = -EINVAL; + break; + } + } + return ret; +} + +/* get param sub-ioctls */ +static int iw_setnone_getint(struct net_device *dev, struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(pAdapter); + int *value = (int *)extra; + int ret = 0; /* success */ +#ifdef QCA_WIFI_2_0 + hdd_context_t *wmahddCtxt = WLAN_HDD_GET_CTX(pAdapter); + void *wmapvosContext = wmahddCtxt->pvosContext; +#endif + + if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:LOGP in Progress. Ignore!!!", __func__); + return -EBUSY; + } + + switch (value[0]) + { + case WE_GET_11D_STATE: + { + tSmeConfigParams smeConfig; + sme_GetConfigParam(hHal,&smeConfig); + + *value = smeConfig.csrConfig.Is11dSupportEnabled; + + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, ("11D state=%ld!!\n"),*value); + + break; + } + + case WE_IBSS_STATUS: + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "****Return IBSS Status*****\n"); + break; + + case WE_PMC_STATE: + { + *value = pmcGetPmcState(hHal); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, ("PMC state=%ld!!\n"),*value); + break; + } + case WE_GET_WLAN_DBG: + { + vos_trace_display(); + *value = 0; + break; + } + case WE_MODULE_DOWN_IND: + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO,"%s: sending WLAN_MODULE_DOWN_IND", __func__); + send_btc_nlink_msg(WLAN_MODULE_DOWN_IND, 0); +#ifdef WLAN_BTAMP_FEATURE + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO,"%s: Take down AMP PAL", __func__); + BSL_Deinit(vos_get_global_context(VOS_MODULE_ID_HDD, NULL)); +#endif + //WLANBAP_Close(vos_get_global_context(VOS_MODULE_ID_HDD, NULL)); + + *value = 0; + break; + } + case WE_GET_MAX_ASSOC: + { + if (ccmCfgGetInt(hHal, WNI_CFG_ASSOC_STA_LIMIT, (tANI_U32 *)value) != eHAL_STATUS_SUCCESS) + { + ret = -EIO; + } + break; + } + + case WE_GET_WDI_DBG: + { + wpalTraceDisplay(); + *value = 0; + break; + } + + case WE_GET_SAP_AUTO_CHANNEL_SELECTION: + { + *value = (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini->apAutoChannelSelection; + break; + } + case WE_GET_CONCURRENCY_MODE: + { + *value = hdd_get_concurrency_mode ( ); + + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, ("concurrency mode=%d \n"),*value); + break; + } + +#ifdef QCA_WIFI_2_0 + case WE_GET_NSS: + { + hddLog(LOG1, "GET WMI_VDEV_PARAM_NSS"); + *value = wma_cli_get_command(wmapvosContext, + (int)pAdapter->sessionId, + (int)WMI_VDEV_PARAM_NSS, + VDEV_CMD); + break; + } + + case WE_GET_LDPC: + { + hddLog(LOG1, "GET WMI_VDEV_PARAM_LDPC"); + *value = sme_GetHTConfig(hHal, pAdapter->sessionId, + WNI_CFG_HT_CAP_INFO_ADVANCE_CODING); + break; + } + + case WE_GET_TX_STBC: + { + hddLog(LOG1, "GET WMI_VDEV_PARAM_TX_STBC"); + *value = sme_GetHTConfig(hHal, pAdapter->sessionId, + WNI_CFG_HT_CAP_INFO_TX_STBC); + break; + } + + case WE_GET_RX_STBC: + { + hddLog(LOG1, "GET WMI_VDEV_PARAM_RX_STBC"); + *value = sme_GetHTConfig(hHal, pAdapter->sessionId, + WNI_CFG_HT_CAP_INFO_RX_STBC); + break; + } + + case WE_GET_SHORT_GI: + { + hddLog(LOG1, "GET WMI_VDEV_PARAM_SGI"); + *value = sme_GetHTConfig(hHal, pAdapter->sessionId, + WNI_CFG_HT_CAP_INFO_SHORT_GI_20MHZ); + break; + } + + case WE_GET_RTSCTS: + { + hddLog(LOG1, "GET WMI_VDEV_PARAM_ENABLE_RTSCTS"); + *value = wma_cli_get_command(wmapvosContext, + (int)pAdapter->sessionId, + (int)WMI_VDEV_PARAM_ENABLE_RTSCTS, + VDEV_CMD); + break; + } + + case WE_GET_CHWIDTH: + { + hddLog(LOG1, "GET WMI_VDEV_PARAM_CHWIDTH"); + *value = wma_cli_get_command(wmapvosContext, + (int)pAdapter->sessionId, + (int)WMI_VDEV_PARAM_CHWIDTH, + VDEV_CMD); + break; + } + + case WE_GET_ANI_EN_DIS: + { + hddLog(LOG1, "GET WMI_PDEV_PARAM_ANI_ENABLE"); + *value = wma_cli_get_command(wmapvosContext, + (int)pAdapter->sessionId, + (int)WMI_PDEV_PARAM_ANI_ENABLE, + PDEV_CMD); + break; + } + + case WE_GET_ANI_POLL_PERIOD: + { + hddLog(LOG1, "GET WMI_PDEV_PARAM_ANI_POLL_PERIOD"); + *value = wma_cli_get_command(wmapvosContext, + (int)pAdapter->sessionId, + (int)WMI_PDEV_PARAM_ANI_POLL_PERIOD, + PDEV_CMD); + break; + } + + case WE_GET_ANI_LISTEN_PERIOD: + { + hddLog(LOG1, "GET WMI_PDEV_PARAM_ANI_LISTEN_PERIOD"); + *value = wma_cli_get_command(wmapvosContext, + (int)pAdapter->sessionId, + (int)WMI_PDEV_PARAM_ANI_LISTEN_PERIOD, + PDEV_CMD); + break; + } + + case WE_GET_ANI_OFDM_LEVEL: + { + hddLog(LOG1, "GET WMI_PDEV_PARAM_ANI_OFDM_LEVEL"); + *value = wma_cli_get_command(wmapvosContext, + (int)pAdapter->sessionId, + (int)WMI_PDEV_PARAM_ANI_OFDM_LEVEL, + PDEV_CMD); + break; + } + + case WE_GET_ANI_CCK_LEVEL: + { + hddLog(LOG1, "GET WMI_PDEV_PARAM_ANI_CCK_LEVEL"); + *value = wma_cli_get_command(wmapvosContext, + (int)pAdapter->sessionId, + (int)WMI_PDEV_PARAM_ANI_CCK_LEVEL, + PDEV_CMD); + break; + } + + case WE_GET_DYNAMIC_BW: + { + hddLog(LOG1, "GET WMI_PDEV_PARAM_ANI_CCK_LEVEL"); + *value = wma_cli_get_command(wmapvosContext, + (int)pAdapter->sessionId, + (int)WMI_PDEV_PARAM_DYNAMIC_BW, + PDEV_CMD); + break; + } + + case WE_GET_11N_RATE: + { + hddLog(LOG1, "GET WMI_VDEV_PARAM_FIXED_RATE"); + *value = wma_cli_get_command(wmapvosContext, + (int)pAdapter->sessionId, + (int)WMI_VDEV_PARAM_FIXED_RATE, + VDEV_CMD); + break; + } + + case WE_GET_AMPDU: + { + hddLog(LOG1, "GET AMPDU"); + *value = wma_cli_get_command(wmapvosContext, + (int)pAdapter->sessionId, + (int)GEN_VDEV_PARAM_AMPDU, + GEN_CMD); + break; + } + + case WE_GET_AMSDU: + { + hddLog(LOG1, "GET AMSDU"); + *value = wma_cli_get_command(wmapvosContext, + (int)pAdapter->sessionId, + (int)GEN_VDEV_PARAM_AMSDU, + GEN_CMD); + break; + } + + case WE_GET_TX_CHAINMASK: + { + hddLog(LOG1, "GET WMI_PDEV_PARAM_TX_CHAIN_MASK"); + *value = wma_cli_get_command(wmapvosContext, + (int)pAdapter->sessionId, + (int)WMI_PDEV_PARAM_TX_CHAIN_MASK, + PDEV_CMD); + break; + } + + case WE_GET_RX_CHAINMASK: + { + hddLog(LOG1, "GET WMI_PDEV_PARAM_RX_CHAIN_MASK"); + *value = wma_cli_get_command(wmapvosContext, + (int)pAdapter->sessionId, + (int)WMI_PDEV_PARAM_RX_CHAIN_MASK, + PDEV_CMD); + break; + } + + case WE_GET_TXPOW_2G: + { + tANI_U32 txpow2g = 0; + tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(pAdapter); + hddLog(LOG1, "GET WMI_PDEV_PARAM_TXPOWER_LIMIT2G"); + *value = wma_cli_get_command(wmapvosContext, + (int)pAdapter->sessionId, + (int)WMI_PDEV_PARAM_TXPOWER_LIMIT2G, + PDEV_CMD); + if ( eHAL_STATUS_SUCCESS != ccmCfgGetInt(hHal, + WNI_CFG_CURRENT_TX_POWER_LEVEL, &txpow2g) ) + { + return -EIO; + } + hddLog(LOG1, "2G tx_power %d", txpow2g); + break; + } + + case WE_GET_TXPOW_5G: + { + tANI_U32 txpow5g = 0; + tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(pAdapter); + hddLog(LOG1, "GET WMI_PDEV_PARAM_TXPOWER_LIMIT5G"); + *value = wma_cli_get_command(wmapvosContext, + (int)pAdapter->sessionId, + (int)WMI_PDEV_PARAM_TXPOWER_LIMIT5G, + PDEV_CMD); + if ( eHAL_STATUS_SUCCESS != ccmCfgGetInt(hHal, + WNI_CFG_CURRENT_TX_POWER_LEVEL, &txpow5g) ) + { + return -EIO; + } + hddLog(LOG1, "5G tx_power %d", txpow5g); + break; + } + + case WE_GET_POWER_GATING: + { + hddLog(LOG1, "GET WMI_PDEV_PARAM_POWER_GATING_SLEEP"); + *value = wma_cli_get_command(wmapvosContext, + (int)pAdapter->sessionId, + (int)WMI_PDEV_PARAM_POWER_GATING_SLEEP, + PDEV_CMD); + break; + } + +#endif + + default: + { + hddLog(LOGE, "Invalid IOCTL get_value command %d", value[0]); + break; + } + } + + return ret; +} + +/* set param sub-ioctls */ +int iw_set_three_ints_getnone(struct net_device *dev, struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + int *value = (int *)extra; + int sub_cmd = value[0]; + int ret = 0; + + if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:LOGP in Progress. Ignore!!!", __func__); + return -EBUSY; + } + + switch(sub_cmd) + { + case WE_SET_WLAN_DBG: + { + vos_trace_setValue( value[1], value[2], value[3]); + break; + } + case WE_SET_WDI_DBG: + { + wpalTraceSetLevel( value[1], value[2], value[3]); + break; + } + case WE_SET_SAP_CHANNELS: + { + ret = iw_softap_set_channel_range( dev, value[1], value[2], value[3]); + break; + } + + + default: + { + hddLog(LOGE, "Invalid IOCTL command %d", sub_cmd); + break; + } + } + return ret; +} + +static int iw_get_char_setnone(struct net_device *dev, struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + int sub_cmd = wrqu->data.flags; +#ifdef WLAN_FEATURE_11W + hdd_wext_state_t *pWextState = WLAN_HDD_GET_WEXT_STATE_PTR(pAdapter); +#endif + + if (NULL == WLAN_HDD_GET_CTX(pAdapter)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: HDD Context is NULL!", __func__); + + return -EINVAL; + } + + if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:LOGP in Progress. Ignore!!!", __func__); + return -EBUSY; + } + + switch(sub_cmd) + { + case WE_WLAN_VERSION: + { + hdd_wlan_get_version(pAdapter, wrqu, extra); + break; + } + + case WE_GET_STATS: + { + hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + hdd_tx_rx_stats_t *pStats = &pAdapter->hdd_stats.hddTxRxStats; + hdd_chip_reset_stats_t *pResetStats = &pHddCtx->hddChipResetStats; + + snprintf(extra, WE_MAX_STR_LEN, + "\nTransmit" + "\ncalled %u, dropped %u, backpressured %u, queued %u" + "\n dropped BK %u, BE %u, VI %u, VO %u" + "\n classified BK %u, BE %u, VI %u, VO %u" + "\nbackpressured BK %u, BE %u, VI %u, VO %u" + "\n queued BK %u, BE %u, VI %u, VO %u" + "\nfetched %u, empty %u, lowres %u, deqerr %u" + "\ndequeued %u, depressured %u, completed %u, flushed %u" + "\n fetched BK %u, BE %u, VI %u, VO %u" + "\n dequeued BK %u, BE %u, VI %u, VO %u" + "\n depressured BK %u, BE %u, VI %u, VO %u" + "\n flushed BK %u, BE %u, VI %u, VO %u" + "\n\nReceive" + "\nchains %u, packets %u, dropped %u, delivered %u, refused %u" + "\n\nResetsStats" + "\n TotalLogp %u Cmd53 %u MutexRead %u MIF-Error %u FW-Heartbeat %u Others %u" + "\n", + pStats->txXmitCalled, + pStats->txXmitDropped, + pStats->txXmitBackPressured, + pStats->txXmitQueued, + + pStats->txXmitDroppedAC[WLANTL_AC_BK], + pStats->txXmitDroppedAC[WLANTL_AC_BE], + pStats->txXmitDroppedAC[WLANTL_AC_VI], + pStats->txXmitDroppedAC[WLANTL_AC_VO], + + pStats->txXmitClassifiedAC[WLANTL_AC_BK], + pStats->txXmitClassifiedAC[WLANTL_AC_BE], + pStats->txXmitClassifiedAC[WLANTL_AC_VI], + pStats->txXmitClassifiedAC[WLANTL_AC_VO], + + pStats->txXmitBackPressuredAC[WLANTL_AC_BK], + pStats->txXmitBackPressuredAC[WLANTL_AC_BE], + pStats->txXmitBackPressuredAC[WLANTL_AC_VI], + pStats->txXmitBackPressuredAC[WLANTL_AC_VO], + + pStats->txXmitQueuedAC[WLANTL_AC_BK], + pStats->txXmitQueuedAC[WLANTL_AC_BE], + pStats->txXmitQueuedAC[WLANTL_AC_VI], + pStats->txXmitQueuedAC[WLANTL_AC_VO], + + pStats->txFetched, + pStats->txFetchEmpty, + pStats->txFetchLowResources, + pStats->txFetchDequeueError, + + pStats->txFetchDequeued, + pStats->txFetchDePressured, + pStats->txCompleted, + pStats->txFlushed, + + pStats->txFetchedAC[WLANTL_AC_BK], + pStats->txFetchedAC[WLANTL_AC_BE], + pStats->txFetchedAC[WLANTL_AC_VI], + pStats->txFetchedAC[WLANTL_AC_VO], + + pStats->txFetchDequeuedAC[WLANTL_AC_BK], + pStats->txFetchDequeuedAC[WLANTL_AC_BE], + pStats->txFetchDequeuedAC[WLANTL_AC_VI], + pStats->txFetchDequeuedAC[WLANTL_AC_VO], + + pStats->txFetchDePressuredAC[WLANTL_AC_BK], + pStats->txFetchDePressuredAC[WLANTL_AC_BE], + pStats->txFetchDePressuredAC[WLANTL_AC_VI], + pStats->txFetchDePressuredAC[WLANTL_AC_VO], + + pStats->txFlushedAC[WLANTL_AC_BK], + pStats->txFlushedAC[WLANTL_AC_BE], + pStats->txFlushedAC[WLANTL_AC_VI], + pStats->txFlushedAC[WLANTL_AC_VO], + + pStats->rxChains, + pStats->rxPackets, + pStats->rxDropped, + pStats->rxDelivered, + pStats->rxRefused, + + pResetStats->totalLogpResets, + pResetStats->totalCMD53Failures, + pResetStats->totalMutexReadFailures, + pResetStats->totalMIFErrorFailures, + pResetStats->totalFWHearbeatFailures, + pResetStats->totalUnknownExceptions + ); + wrqu->data.length = strlen(extra)+1; + break; + } + +/* The case prints the current state of the HDD, SME, CSR, PE, TL + *it can be extended for WDI Global State as well. + *And currently it only checks P2P_CLIENT adapter. + *P2P_DEVICE and P2P_GO have not been added as of now. +*/ + case WE_GET_STATES: + { + int buf = 0, len = 0; + int adapter_num = 0; + int count = 0, check = 1; + + tANI_U16 tlState; + tHalHandle hHal; + tpAniSirGlobal pMac; + hdd_station_ctx_t *pHddStaCtx; + + hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX( pAdapter ); + hdd_adapter_t *useAdapter = NULL; + + /* Print wlan0 or p2p0 states based on the adapter_num + *by using the correct adapter + */ + while ( adapter_num < 2 ) + { + if ( WLAN_ADAPTER == adapter_num ) + { + useAdapter = pAdapter; + buf = scnprintf(extra + len, WE_MAX_STR_LEN - len, + "\n\n wlan0 States:-"); + len += buf; + } + else if ( P2P_ADAPTER == adapter_num ) + { + buf = scnprintf(extra + len, WE_MAX_STR_LEN - len, + "\n\n p2p0 States:-"); + len += buf; + + if( !pHddCtx ) + { + buf = scnprintf(extra + len, WE_MAX_STR_LEN - len, + "\n pHddCtx is NULL"); + len += buf; + break; + } + + /*Printing p2p0 states only in the case when the device is + configured as a p2p_client*/ + useAdapter = hdd_get_adapter(pHddCtx, WLAN_HDD_P2P_CLIENT); + if ( !useAdapter ) + { + buf = scnprintf(extra + len, WE_MAX_STR_LEN - len, + "\n Device not configured as P2P_CLIENT."); + len += buf; + break; + } + } + + hHal = WLAN_HDD_GET_HAL_CTX( useAdapter ); + pMac = PMAC_STRUCT( hHal ); + pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR( useAdapter ); + if( !pHddStaCtx ) + { + buf = scnprintf(extra + len, WE_MAX_STR_LEN - len, + "\n pHddStaCtx is NULL"); + len += buf; + break; + } + + tlState = smeGetTLSTAState(hHal, pHddStaCtx->conn_info.staId[0]); + + buf = scnprintf(extra + len, WE_MAX_STR_LEN - len, + "\n HDD Conn State - %s " + "\n \n SME State:" + "\n Neighbour Roam State - %s" + "\n CSR State - %s" + "\n CSR Substate - %s" + "\n \n TL STA %d State: %s", + macTraceGetHDDWlanConnState( + pHddStaCtx->conn_info.connState), + macTraceGetNeighbourRoamState( + pMac->roam.neighborRoamInfo.neighborRoamState), + macTraceGetcsrRoamState( + pMac->roam.curState[useAdapter->sessionId]), + macTraceGetcsrRoamSubState( + pMac->roam.curSubState[useAdapter->sessionId]), + pHddStaCtx->conn_info.staId[0], + macTraceGetTLState(tlState) + ); + len += buf; + adapter_num++; + } + + /* Printing Lim State starting with global lim states */ + buf = scnprintf(extra + len, WE_MAX_STR_LEN - len, + "\n \n LIM STATES:-" + "\n Global Sme State - %s "\ + "\n Global mlm State - %s "\ + "\n", + macTraceGetLimSmeState(pMac->lim.gLimSmeState), + macTraceGetLimMlmState(pMac->lim.gLimMlmState) + ); + len += buf; + + /*printing the PE Sme and Mlm states for valid lim sessions*/ + while ( check < 3 && count < 255) + { + if ( pMac->lim.gpSession[count].valid ) + { + buf = scnprintf(extra + len, WE_MAX_STR_LEN - len, + "\n Lim Valid Session %d:-" + "\n PE Sme State - %s " + "\n PE Mlm State - %s " + "\n", + check, + macTraceGetLimSmeState(pMac->lim.gpSession[count].limSmeState), + macTraceGetLimMlmState(pMac->lim.gpSession[count].limMlmState) + ); + + len += buf; + check++; + } + count++; + } + + wrqu->data.length = strlen(extra)+1; + break; + } + + case WE_GET_CFG: + { + hdd_cfg_get_config(WLAN_HDD_GET_CTX(pAdapter), extra, WE_MAX_STR_LEN); + wrqu->data.length = strlen(extra)+1; + break; + } +#ifdef WLAN_FEATURE_11AC + case WE_GET_RSSI: + { + v_S7_t s7Rssi = 0; + wlan_hdd_get_rssi(pAdapter, &s7Rssi); + snprintf(extra, WE_MAX_STR_LEN, "rssi=%d",s7Rssi); + wrqu->data.length = strlen(extra)+1; + break; + } +#endif + +#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR) + case WE_GET_ROAM_RSSI: + { + v_S7_t s7Rssi = 0; + wlan_hdd_get_roam_rssi(pAdapter, &s7Rssi); + snprintf(extra, WE_MAX_STR_LEN, "rssi=%d", s7Rssi); + wrqu->data.length = strlen(extra)+1; + break; + } +#endif + case WE_GET_WMM_STATUS: + { + snprintf(extra, WE_MAX_STR_LEN, + "\nDir: 0=up, 1=down, 3=both\n" + "|------------------------|\n" + "|AC | ACM |Admitted| Dir |\n" + "|------------------------|\n" + "|VO | %d | %3s | %d |\n" + "|VI | %d | %3s | %d |\n" + "|BE | %d | %3s | %d |\n" + "|BK | %d | %3s | %d |\n" + "|------------------------|\n", + pAdapter->hddWmmStatus.wmmAcStatus[WLANTL_AC_VO].wmmAcAccessRequired, + pAdapter->hddWmmStatus.wmmAcStatus[WLANTL_AC_VO].wmmAcAccessAllowed?"YES":"NO", + pAdapter->hddWmmStatus.wmmAcStatus[WLANTL_AC_VO].wmmAcTspecInfo.ts_info.direction, + pAdapter->hddWmmStatus.wmmAcStatus[WLANTL_AC_VI].wmmAcAccessRequired, + pAdapter->hddWmmStatus.wmmAcStatus[WLANTL_AC_VI].wmmAcAccessAllowed?"YES":"NO", + pAdapter->hddWmmStatus.wmmAcStatus[WLANTL_AC_VI].wmmAcTspecInfo.ts_info.direction, + pAdapter->hddWmmStatus.wmmAcStatus[WLANTL_AC_BE].wmmAcAccessRequired, + pAdapter->hddWmmStatus.wmmAcStatus[WLANTL_AC_BE].wmmAcAccessAllowed?"YES":"NO", + pAdapter->hddWmmStatus.wmmAcStatus[WLANTL_AC_BE].wmmAcTspecInfo.ts_info.direction, + pAdapter->hddWmmStatus.wmmAcStatus[WLANTL_AC_BK].wmmAcAccessRequired, + pAdapter->hddWmmStatus.wmmAcStatus[WLANTL_AC_BK].wmmAcAccessAllowed?"YES":"NO", + pAdapter->hddWmmStatus.wmmAcStatus[WLANTL_AC_BK].wmmAcTspecInfo.ts_info.direction); + + + wrqu->data.length = strlen(extra)+1; + break; + } + case WE_GET_CHANNEL_LIST: + { + VOS_STATUS status; + v_U8_t i, len; + char* buf ; + + tChannelListInfo channel_list; + + status = iw_softap_get_channel_list(dev, info, wrqu, (char *)&channel_list); + if ( !VOS_IS_STATUS_SUCCESS( status ) ) + { + hddLog(VOS_TRACE_LEVEL_ERROR, "%s GetChannelList Failed!!!\n",__func__); + return -EINVAL; + } + buf = extra; + + /** + * Maximum channels = WNI_CFG_VALID_CHANNEL_LIST_LEN. Maximum buffer + * needed = 5 * number of channels. Check ifsufficient + * buffer is available and then proceed to fill the buffer. + */ + if(WE_MAX_STR_LEN < (5 * WNI_CFG_VALID_CHANNEL_LIST_LEN)) + { + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s Insufficient Buffer to populate channel list\n", + __func__); + return -EINVAL; + } + len = scnprintf(buf, WE_MAX_STR_LEN, "%u ", + channel_list.num_channels); + for(i = 0 ; i < channel_list.num_channels; i++) + { + len += scnprintf(buf + len, WE_MAX_STR_LEN - len, + "%u ", channel_list.channels[i]); + } + wrqu->data.length = strlen(extra)+1; + + break; + } +#ifdef FEATURE_WLAN_TDLS + case WE_GET_TDLS_PEERS: + { + wrqu->data.length = wlan_hdd_tdls_get_all_peers(pAdapter, extra, WE_MAX_STR_LEN)+1; + break; + } +#endif +#ifdef WLAN_FEATURE_11W + case WE_GET_11W_INFO: + { + hddLog(LOGE, "WE_GET_11W_ENABLED = %d", pWextState->roamProfile.MFPEnabled ); + + snprintf(extra, WE_MAX_STR_LEN, + "\n BSSID %02X:%02X:%02X:%02X:%02X:%02X, Is PMF Assoc? %d" + "\n Number of Unprotected Disassocs %d" + "\n Number of Unprotected Deauths %d", + (*pWextState->roamProfile.BSSIDs.bssid)[0], (*pWextState->roamProfile.BSSIDs.bssid)[1], + (*pWextState->roamProfile.BSSIDs.bssid)[2], (*pWextState->roamProfile.BSSIDs.bssid)[3], + (*pWextState->roamProfile.BSSIDs.bssid)[4], (*pWextState->roamProfile.BSSIDs.bssid)[5], + pWextState->roamProfile.MFPEnabled, pAdapter->hdd_stats.hddPmfStats.numUnprotDisassocRx, + pAdapter->hdd_stats.hddPmfStats.numUnprotDeauthRx); + + wrqu->data.length = strlen(extra)+1; + break; + } +#endif +#ifdef FEATURE_CESIUM_PROPRIETARY + case WE_GET_IBSS_STA_INFO: + { + hdd_station_ctx_t *pHddStaCtx = + WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); + int idx = 0; + int length = 0, buf = 0; + + for (idx = 0; idx < HDD_MAX_NUM_IBSS_STA; idx++) + { + if (0 != pHddStaCtx->conn_info.staId[ idx ]) + { + buf = snprintf + ( + (extra + length), WE_MAX_STR_LEN - length, + "\n%d .%02x:%02x:%02x:%02x:%02x:%02x\n", + pHddStaCtx->conn_info.staId[ idx ], + pHddStaCtx->conn_info.peerMacAddress[idx].bytes[0], + pHddStaCtx->conn_info.peerMacAddress[idx].bytes[1], + pHddStaCtx->conn_info.peerMacAddress[idx].bytes[2], + pHddStaCtx->conn_info.peerMacAddress[idx].bytes[3], + pHddStaCtx->conn_info.peerMacAddress[idx].bytes[4], + pHddStaCtx->conn_info.peerMacAddress[idx].bytes[5] + ); + length += buf; + } + } + wrqu->data.length = strlen(extra)+1; + break; + } +#endif +#ifdef QCA_WIFI_2_0 + case WE_GET_PHYMODE: + { + v_BOOL_t ch_bond24 = VOS_FALSE, ch_bond5g = VOS_FALSE; + hdd_context_t *hddctx = WLAN_HDD_GET_CTX(pAdapter); + tHalHandle hal = WLAN_HDD_GET_HAL_CTX(pAdapter); + eCsrPhyMode phymode; + eCsrBand currBand; + tSmeConfigParams smeconfig; + + sme_GetConfigParam(hal, &smeconfig); + if (WNI_CFG_CHANNEL_BONDING_MODE_DISABLE != + smeconfig.csrConfig.channelBondingMode24GHz) + ch_bond24 = VOS_TRUE; + + if (WNI_CFG_CHANNEL_BONDING_MODE_DISABLE != + smeconfig.csrConfig.channelBondingMode5GHz) + ch_bond5g = VOS_TRUE; + + phymode = sme_GetPhyMode(hal); + if ((eHAL_STATUS_SUCCESS != sme_GetFreqBand(hal, &currBand))) { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s: Failed to get current band config", + __func__); + return -EIO; + } + + + switch (phymode) { + case eCSR_DOT11_MODE_AUTO: + snprintf(extra, WE_MAX_STR_LEN, "AUTO MODE"); + break; + case eCSR_DOT11_MODE_TAURUS: + case eCSR_DOT11_MODE_POLARIS: + case eCSR_DOT11_MODE_TAURUS_ONLY: + case eCSR_DOT11_MODE_TITAN: + case eCSR_DOT11_MODE_11n: + case eCSR_DOT11_MODE_11n_ONLY: + if (currBand == eCSR_BAND_24) { + if (ch_bond24) + snprintf(extra, WE_MAX_STR_LEN, "11NGHT40"); + else + snprintf(extra, WE_MAX_STR_LEN, "11NGHT20"); + } + else if(currBand == eCSR_BAND_5G) { + if (ch_bond5g) + snprintf(extra, WE_MAX_STR_LEN, "11NAHT40"); + else + snprintf(extra, WE_MAX_STR_LEN, "11NAHT20"); + } else { + snprintf(extra, WE_MAX_STR_LEN, "11N"); + } + break; + case eCSR_DOT11_MODE_abg: + snprintf(extra, WE_MAX_STR_LEN, "11ABG"); + break; + case eCSR_DOT11_MODE_11a: + case eCSR_DOT11_MODE_11a_ONLY: + snprintf(extra, WE_MAX_STR_LEN, "11A"); + break; + case eCSR_DOT11_MODE_11b: + case eCSR_DOT11_MODE_11b_ONLY: + snprintf(extra, WE_MAX_STR_LEN, "11B"); + break; + case eCSR_DOT11_MODE_11g: + case eCSR_DOT11_MODE_11g_ONLY: + snprintf(extra, WE_MAX_STR_LEN, "11G"); + break; +#ifdef WLAN_FEATURE_11AC + case eCSR_DOT11_MODE_11ac: + case eCSR_DOT11_MODE_11ac_ONLY: + if (hddctx->cfg_ini->vhtChannelWidth == + eHT_CHANNEL_WIDTH_20MHZ) + snprintf(extra, WE_MAX_STR_LEN, "11ACVHT20"); + else if (hddctx->cfg_ini->vhtChannelWidth == + eHT_CHANNEL_WIDTH_40MHZ) + snprintf(extra, WE_MAX_STR_LEN, "11ACVHT40"); + else if (hddctx->cfg_ini->vhtChannelWidth == + eHT_CHANNEL_WIDTH_80MHZ) + snprintf(extra, WE_MAX_STR_LEN, "11ACVHT80"); + else if (hddctx->cfg_ini->vhtChannelWidth == + eHT_CHANNEL_WIDTH_160MHZ) + snprintf(extra, WE_MAX_STR_LEN, "11ACVHT160"); + break; +#endif + } + + wrqu->data.length = strlen(extra)+1; + break; + } +#endif + default: + { + hddLog(LOGE, "Invalid IOCTL command %d", sub_cmd); + break; + } + } + + return 0; +} + +/* action sub-ioctls */ +static int iw_setnone_getnone(struct net_device *dev, struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + int sub_cmd = wrqu->data.flags; + int ret = 0; /* success */ + + if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:LOGP in Progress. Ignore!!!", __func__); + return -EBUSY; + } + + switch (sub_cmd) + { + case WE_CLEAR_STATS: + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO,"%s: clearing", __func__); + memset(&pAdapter->stats, 0, sizeof(pAdapter->stats)); + memset(&pAdapter->hdd_stats, 0, sizeof(pAdapter->hdd_stats)); + break; + } + case WE_INIT_AP: + { + pr_info("Init AP trigger\n"); + hdd_open_adapter( WLAN_HDD_GET_CTX(pAdapter), WLAN_HDD_SOFTAP, "softap.%d", + wlan_hdd_get_intf_addr( WLAN_HDD_GET_CTX(pAdapter) ),TRUE); + break; + } +#ifdef FEATURE_CESIUM_PROPRIETARY + case WE_IBSS_GET_PEER_INFO_ALL: + { + hdd_wlan_get_ibss_peer_info_all(pAdapter); + break; + } +#endif + case WE_STOP_AP: + { + /*FIX ME: Need to be revisited if multiple SAPs to be supported */ + /* As Soft AP mode has been changed to STA already with killing of Hostapd, + * this is a dead code and need to find the adpater by name rather than mode */ + hdd_adapter_t* pAdapter_to_stop = + hdd_get_adapter_by_name(WLAN_HDD_GET_CTX(pAdapter), "softap.0"); + if( pAdapter_to_stop ) + { + hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + + pr_info("Stopping AP mode\n"); + + if (TRUE == sme_IsPmcBmps(WLAN_HDD_GET_HAL_CTX(pAdapter))) + { + /* EXIT BMPS as fw cannot handle DEL_STA when its in BMPS */ + wlan_hdd_enter_bmps(pAdapter, DRIVER_POWER_MODE_ACTIVE); + } + + /*Make sure that pAdapter cleaned properly*/ + hdd_stop_adapter( pHddCtx, pAdapter_to_stop ); + hdd_deinit_adapter( pHddCtx, pAdapter_to_stop ); + memset(&pAdapter_to_stop->sessionCtx, 0, sizeof(pAdapter_to_stop->sessionCtx)); + + wlan_hdd_release_intf_addr(WLAN_HDD_GET_CTX(pAdapter), + pAdapter_to_stop->macAddressCurrent.bytes); + hdd_close_adapter(WLAN_HDD_GET_CTX(pAdapter), pAdapter_to_stop, + TRUE); + + if (FALSE == sme_IsPmcBmps(WLAN_HDD_GET_HAL_CTX(pAdapter))) + { + /* put the device back into BMPS */ + wlan_hdd_enter_bmps(pAdapter, DRIVER_POWER_MODE_AUTO); + } + } + else + { + printk(KERN_ERR"SAP adapter not found to stop it!\n"); + } + + break; + } +#ifdef WLAN_BTAMP_FEATURE + case WE_ENABLE_AMP: + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO,"%s: enabling AMP", __func__); + WLANBAP_RegisterWithHCI(pAdapter); + break; + } + case WE_DISABLE_AMP: + { + hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX( pAdapter ); + VOS_STATUS status; + + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO,"%s: disabling AMP", __func__); + + pHddCtx = WLAN_HDD_GET_CTX( pAdapter ); + status = WLANBAP_StopAmp(); + if(VOS_STATUS_SUCCESS != status ) + { + pHddCtx->isAmpAllowed = VOS_TRUE; + hddLog(VOS_TRACE_LEVEL_FATAL, + "%s: Failed to stop AMP", __func__); + } + else + { + //a state m/c implementation in PAL is TBD to avoid this delay + msleep(500); + pHddCtx->isAmpAllowed = VOS_FALSE; + WLANBAP_DeregisterFromHCI(); + } + + break; + } + case WE_GET_PPS_PAID_MATCH: + { + hddLog(LOG1, "GET WMI_VDEV_PPS_PAID_MATCH"); + *value = wma_cli_get_command(wmapvosContext, + (int)pAdapter->sessionId, + (int)WMI_VDEV_PPS_PAID_MATCH, + VDEV_CMD); + break; + } + case WE_GET_PPS_GID_MATCH: + { + hddLog(LOG1, "GET WMI_VDEV_PPS_GID_MATCH"); + *value = wma_cli_get_command(wmapvosContext, + (int)pAdapter->sessionId, + (int)WMI_VDEV_PPS_GID_MATCH, + VDEV_CMD); + break; + } + case WE_GET_PPS_EARLY_TIM_CLEAR: + { + hddLog(LOG1, "GET WMI_VDEV_PPS_EARLY_TIM_CLEAR"); + *value = wma_cli_get_command(wmapvosContext, + (int)pAdapter->sessionId, + (int)WMI_VDEV_PPS_EARLY_TIM_CLEAR, + VDEV_CMD); + break; + } + case WE_GET_PPS_EARLY_DTIM_CLEAR: + { + hddLog(LOG1, "GET WMI_VDEV_PPS_EARLY_DTIM_CLEAR"); + *value = wma_cli_get_command(wmapvosContext, + (int)pAdapter->sessionId, + (int)WMI_VDEV_PPS_EARLY_DTIM_CLEAR, + VDEV_CMD); + break; + } + case WE_GET_PPS_EOF_PAD_DELIM: + { + hddLog(LOG1, "GET WMI_VDEV_PPS_EOF_PAD_DELIM"); + *value = wma_cli_get_command(wmapvosContext, + (int)pAdapter->sessionId, + (int)WMI_VDEV_PPS_EOF_PAD_DELIM, + VDEV_CMD); + break; + } + case WE_GET_PPS_MACADDR_MISMATCH: + { + hddLog(LOG1, "GET WMI_VDEV_PPS_MACADDR_MISMATCH"); + *value = wma_cli_get_command(wmapvosContext, + (int)pAdapter->sessionId, + (int)WMI_VDEV_PPS_MACADDR_MISMATCH, + VDEV_CMD); + break; + } + case WE_GET_PPS_DELIM_CRC_FAIL: + { + hddLog(LOG1, "GET WMI_VDEV_PPS_DELIM_CRC_FAIL"); + *value = wma_cli_get_command(wmapvosContext, + (int)pAdapter->sessionId, + (int)WMI_VDEV_PPS_DELIM_CRC_FAIL, + VDEV_CMD); + break; + } + case WE_GET_PPS_GID_NSTS_ZERO: + { + hddLog(LOG1, "GET WMI_VDEV_PPS_GID_NSTS_ZERO"); + *value = wma_cli_get_command(wmapvosContext, + (int)pAdapter->sessionId, + (int)WMI_VDEV_PPS_GID_NSTS_ZERO, + VDEV_CMD); + break; + } + case WE_GET_PPS_RSSI_CHECK: + { + + hddLog(LOG1, "GET WMI_VDEV_PPS_RSSI_CHECK"); + *value = wma_cli_get_command(wmapvosContext, + (int)pAdapter->sessionId, + (int)WMI_VDEV_PPS_RSSI_CHECK, + VDEV_CMD); + break; + } +#endif + + case WE_ENABLE_DXE_STALL_DETECT: + { + tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(pAdapter); + sme_transportDebug(hHal, VOS_FALSE, VOS_TRUE); + break; + } + case WE_DISPLAY_DXE_SNAP_SHOT: + { + tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(pAdapter); + sme_transportDebug(hHal, VOS_TRUE, VOS_FALSE); + break; + } + case WE_DISPLAY_DATAPATH_SNAP_SHOT: + { + hddLog(LOGE, "%s: called %d",__func__, sub_cmd); + hdd_wmm_tx_snapshot(pAdapter); + WLANTL_TLDebugMessage(VOS_TRUE); + break; + } + case WE_SET_REASSOC_TRIGGER: + { + hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + tpAniSirGlobal pMac = WLAN_HDD_GET_HAL_CTX(pAdapter); + v_U32_t roamId = 0; + tCsrRoamModifyProfileFields modProfileFields; + sme_GetModifyProfileFields(pMac, pAdapter->sessionId, &modProfileFields); + sme_RoamReassoc(pMac, pAdapter->sessionId, NULL, modProfileFields, &roamId, 1); + return 0; + } + +#ifdef QCA_WIFI_2_0 + case WE_DUMP_AGC_START: + { + hddLog(LOG1, "WE_DUMP_AGC_START"); + ret = process_wma_set_command((int)pAdapter->sessionId, + (int)GEN_PARAM_DUMP_AGC_START, + 0, GEN_CMD); + break; + } + case WE_DUMP_AGC: + { + hddLog(LOG1, "WE_DUMP_AGC"); + ret = process_wma_set_command((int)pAdapter->sessionId, + (int)GEN_PARAM_DUMP_AGC, + 0, GEN_CMD); + break; + } + + case WE_DUMP_CHANINFO_START: + { + hddLog(LOG1, "WE_DUMP_CHANINFO_START"); + ret = process_wma_set_command((int)pAdapter->sessionId, + (int)GEN_PARAM_DUMP_CHANINFO_START, + 0, GEN_CMD); + break; + } + case WE_DUMP_CHANINFO: + { + hddLog(LOG1, "WE_DUMP_CHANINFO_START"); + ret = process_wma_set_command((int)pAdapter->sessionId, + (int)GEN_PARAM_DUMP_CHANINFO, + 0, GEN_CMD); + break; + } + case WE_DUMP_WATCHDOG: + { + hddLog(LOG1, "WE_DUMP_WATCHDOG"); + ret = process_wma_set_command((int)pAdapter->sessionId, + (int)GEN_PARAM_DUMP_WATCHDOG, + 0, GEN_CMD); + break; + } +#ifdef DEBUG + case WE_SET_FW_CRASH_INJECT: + { + hddLog(LOGE, "WE_FW_CRASH_INJECT"); + ret = process_wma_set_command((int) pAdapter->sessionId, + (int) GEN_PARAM_CRASH_INJECT, + 0, GEN_CMD); + break; + } +#endif +#endif + default: + { + hddLog(LOGE, "%s: unknown ioctl %d", __func__, sub_cmd); + break; + } + } + + return ret; +} + +void hdd_wmm_tx_snapshot(hdd_adapter_t *pAdapter) +{ + /* + * Function to display HDD WMM information + * for Tx Queues. + * Prints globala as well as per client depending + * whether the clients are registered or not. + */ + int i = 0, j = 0; + for ( i=0; i< NUM_TX_QUEUES; i++) + { + spin_lock_bh(&pAdapter->wmm_tx_queue[i].lock); + hddLog(LOGE, "HDD WMM TxQueue Info For AC: %d Count: %d PrevAdress:0x%x, NextAddress:0x%x", + i, pAdapter->wmm_tx_queue[i].count, + pAdapter->wmm_tx_queue[i].anchor.prev, pAdapter->wmm_tx_queue[i].anchor.next); + spin_unlock_bh(&pAdapter->wmm_tx_queue[i].lock); + } + + for(i =0; iaStaInfo[i].isUsed) + { + hddLog(LOGE, "******STAIndex: %d*********", i); + for ( j=0; j< NUM_TX_QUEUES; j++) + { + spin_lock_bh(&pAdapter->aStaInfo[i].wmm_tx_queue[j].lock); + hddLog(LOGE, "HDD TxQueue Info For AC: %d Count: %d PrevAdress:0x%x, NextAddress:0x%x", + j, pAdapter->aStaInfo[i].wmm_tx_queue[j].count, + pAdapter->aStaInfo[i].wmm_tx_queue[j].anchor.prev, + pAdapter->aStaInfo[i].wmm_tx_queue[j].anchor.next); + spin_unlock_bh(&pAdapter->aStaInfo[i].wmm_tx_queue[j].lock); + } + } + } + +} +int iw_set_var_ints_getnone(struct net_device *dev, struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(pAdapter); + int sub_cmd = wrqu->data.flags; + int *value = (int*)extra; + int apps_args[MAX_VAR_ARGS] = {0}; + int num_args = wrqu->data.length; + hdd_station_ctx_t *pStaCtx = NULL ; + hdd_ap_ctx_t *pAPCtx = NULL; + int cmd = 0; + int staId = 0; + + hddLog(LOG1, "%s: Received length %d", __func__, wrqu->data.length); + + if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:LOGP in Progress. Ignore!!!", __func__); + return -EBUSY; + } + + if (num_args > MAX_VAR_ARGS) + { + num_args = MAX_VAR_ARGS; + } + vos_mem_copy(apps_args, value, (sizeof(int)) * num_args); + + if(( sub_cmd == WE_MCC_CONFIG_CREDENTIAL ) || + (sub_cmd == WE_MCC_CONFIG_PARAMS )) + { + if(( pAdapter->device_mode == WLAN_HDD_INFRA_STATION )|| + ( pAdapter->device_mode == WLAN_HDD_P2P_CLIENT )) + { + pStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); + staId = pStaCtx->conn_info.staId[0]; + } + else if (( pAdapter->device_mode == WLAN_HDD_P2P_GO ) || + ( pAdapter->device_mode == WLAN_HDD_SOFTAP )) + { + pAPCtx = WLAN_HDD_GET_AP_CTX_PTR(pAdapter); + staId = pAPCtx->uBCStaId; + } + else + { + hddLog(LOGE, "%s: Device mode %d not recognised", __FUNCTION__, pAdapter->device_mode); + return 0; + } + } + + switch (sub_cmd) + { + case WE_LOG_DUMP_CMD: + { + hddLog(LOG1, "%s: LOG_DUMP %d arg1 %d arg2 %d arg3 %d arg4 %d", + __func__, apps_args[0], apps_args[1], apps_args[2], + apps_args[3], apps_args[4]); + + logPrintf(hHal, apps_args[0], apps_args[1], apps_args[2], + apps_args[3], apps_args[4]); + + } + break; +#ifdef FEATURE_CESIUM_PROPRIETARY + case WE_IBSS_GET_PEER_INFO: + { + pr_info ( "Station ID = %d\n",apps_args[0]); + hdd_wlan_get_ibss_peer_info(pAdapter, apps_args[0]); + } + break; +#endif + + case WE_P2P_NOA_CMD: + { + p2p_app_setP2pPs_t p2pNoA; + + p2pNoA.opp_ps = apps_args[0]; + p2pNoA.ctWindow = apps_args[1]; + p2pNoA.duration = apps_args[2]; + p2pNoA.interval = apps_args[3]; + p2pNoA.count = apps_args[4]; + p2pNoA.single_noa_duration = apps_args[5]; + p2pNoA.psSelection = apps_args[6]; + + hddLog(LOG1, "%s: P2P_NOA_ATTR:oppPS %d ctWindow %d duration %d " + "interval %d count %d single noa duration %d PsSelection %x", + __func__, apps_args[0], apps_args[1], apps_args[2], + apps_args[3], apps_args[4], apps_args[5], apps_args[6]); + + hdd_setP2pPs(dev, &p2pNoA); + + } + break; + + case WE_MCC_CONFIG_CREDENTIAL : + { + cmd = 287; //Command should be updated if there is any change + // in the Riva dump command + if((apps_args[0] >= 40 ) && (apps_args[0] <= 160 )) + { + logPrintf(hHal, cmd, staId, apps_args[0], apps_args[1], apps_args[2]); + } + else + { + hddLog(LOGE, "%s : Enter valid MccCredential value between MIN :40 and MAX:160\n", __func__); + return 0; + } + } + break; + + case WE_MCC_CONFIG_PARAMS : + { + cmd = 288; //command Should be updated if there is any change + // in the Riva dump command + hdd_validate_mcc_config(pAdapter, staId, apps_args[0], apps_args[1],apps_args[2]); + } + break; + +#ifdef FEATURE_WLAN_TDLS + case WE_TDLS_CONFIG_PARAMS : + { + tdls_config_params_t tdlsParams; + + tdlsParams.tdls = apps_args[0]; + tdlsParams.tx_period_t = apps_args[1]; + tdlsParams.tx_packet_n = apps_args[2]; + tdlsParams.discovery_period_t = apps_args[3]; + tdlsParams.discovery_tries_n = apps_args[4]; + tdlsParams.idle_timeout_t = apps_args[5]; + tdlsParams.idle_packet_n = apps_args[6]; + tdlsParams.rssi_hysteresis = apps_args[7]; + tdlsParams.rssi_trigger_threshold = apps_args[8]; + tdlsParams.rssi_teardown_threshold = apps_args[9]; + + wlan_hdd_tdls_set_params(dev, &tdlsParams); + } + break; +#endif + default: + { + hddLog(LOGE, "Invalid IOCTL command %d", sub_cmd ); + } + break; + } + + return 0; +} + + +static int iw_add_tspec(struct net_device *dev, struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); + hdd_wlan_wmm_status_e *pStatus = (hdd_wlan_wmm_status_e *)extra; + int params[HDD_WLAN_WMM_PARAM_COUNT]; + sme_QosWmmTspecInfo tSpec; + v_U32_t handle; + + // make sure the application is sufficiently priviledged + // note that the kernel will do this for "set" ioctls, but since + // this ioctl wants to return status to user space it must be + // defined as a "get" ioctl + if (!capable(CAP_NET_ADMIN)) + { + return -EPERM; + } + + if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:LOGP in Progress. Ignore!!!", __func__); + return -EBUSY; + } + + // we must be associated in order to add a tspec + if (eConnectionState_Associated != pHddStaCtx->conn_info.connState) + { + *pStatus = HDD_WLAN_WMM_STATUS_SETUP_FAILED_BAD_PARAM; + return 0; + } + + // since we are defined to be a "get" ioctl, and since the number + // of params exceeds the number of params that wireless extensions + // will pass down in the iwreq_data, we must copy the "set" params + // from user space ourselves + if (copy_from_user(¶ms, wrqu->data.pointer, sizeof(params))) + { + // hmmm, can't get them + return -EIO; + } + + // clear the tspec + memset(&tSpec, 0, sizeof(tSpec)); + + // validate the handle + handle = params[HDD_WLAN_WMM_PARAM_HANDLE]; + if (HDD_WMM_HANDLE_IMPLICIT == handle) + { + // that one is reserved + *pStatus = HDD_WLAN_WMM_STATUS_SETUP_FAILED_BAD_PARAM; + return 0; + } + + // validate the TID + if (params[HDD_WLAN_WMM_PARAM_TID] > 7) + { + // out of range + *pStatus = HDD_WLAN_WMM_STATUS_SETUP_FAILED_BAD_PARAM; + return 0; + } + tSpec.ts_info.tid = params[HDD_WLAN_WMM_PARAM_TID]; + + // validate the direction + switch (params[HDD_WLAN_WMM_PARAM_DIRECTION]) + { + case HDD_WLAN_WMM_DIRECTION_UPSTREAM: + tSpec.ts_info.direction = SME_QOS_WMM_TS_DIR_UPLINK; + break; + + case HDD_WLAN_WMM_DIRECTION_DOWNSTREAM: + tSpec.ts_info.direction = SME_QOS_WMM_TS_DIR_DOWNLINK; + break; + + case HDD_WLAN_WMM_DIRECTION_BIDIRECTIONAL: + tSpec.ts_info.direction = SME_QOS_WMM_TS_DIR_BOTH; + break; + + default: + // unknown + *pStatus = HDD_WLAN_WMM_STATUS_SETUP_FAILED_BAD_PARAM; + return 0; + } + + tSpec.ts_info.psb = params[HDD_WLAN_WMM_PARAM_APSD]; + + // validate the user priority + if (params[HDD_WLAN_WMM_PARAM_USER_PRIORITY] >= SME_QOS_WMM_UP_MAX) + { + // out of range + *pStatus = HDD_WLAN_WMM_STATUS_SETUP_FAILED_BAD_PARAM; + return 0; + } + tSpec.ts_info.up = params[HDD_WLAN_WMM_PARAM_USER_PRIORITY]; + if(0 > tSpec.ts_info.up || SME_QOS_WMM_UP_MAX < tSpec.ts_info.up) + { + hddLog(VOS_TRACE_LEVEL_ERROR,"***ts_info.up out of bounds***"); + return 0; + } + + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, + "%s:TS_INFO PSB %d UP %d !!!", __func__, + tSpec.ts_info.psb, tSpec.ts_info.up); + + tSpec.nominal_msdu_size = params[HDD_WLAN_WMM_PARAM_NOMINAL_MSDU_SIZE]; + tSpec.maximum_msdu_size = params[HDD_WLAN_WMM_PARAM_MAXIMUM_MSDU_SIZE]; + tSpec.min_data_rate = params[HDD_WLAN_WMM_PARAM_MINIMUM_DATA_RATE]; + tSpec.mean_data_rate = params[HDD_WLAN_WMM_PARAM_MEAN_DATA_RATE]; + tSpec.peak_data_rate = params[HDD_WLAN_WMM_PARAM_PEAK_DATA_RATE]; + tSpec.max_burst_size = params[HDD_WLAN_WMM_PARAM_MAX_BURST_SIZE]; + tSpec.min_phy_rate = params[HDD_WLAN_WMM_PARAM_MINIMUM_PHY_RATE]; + tSpec.surplus_bw_allowance = params[HDD_WLAN_WMM_PARAM_SURPLUS_BANDWIDTH_ALLOWANCE]; + tSpec.min_service_interval = params[HDD_WLAN_WMM_PARAM_SERVICE_INTERVAL]; + tSpec.max_service_interval = params[HDD_WLAN_WMM_PARAM_MAX_SERVICE_INTERVAL]; + tSpec.suspension_interval = params[HDD_WLAN_WMM_PARAM_SUSPENSION_INTERVAL]; + tSpec.inactivity_interval = params[HDD_WLAN_WMM_PARAM_INACTIVITY_INTERVAL]; + + tSpec.ts_info.burst_size_defn = params[HDD_WLAN_WMM_PARAM_BURST_SIZE_DEFN]; + + // validate the ts info ack policy + switch (params[HDD_WLAN_WMM_PARAM_ACK_POLICY]) + { + case HDD_WLAN_WMM_TS_INFO_ACK_POLICY_NORMAL_ACK: + tSpec.ts_info.ack_policy = SME_QOS_WMM_TS_ACK_POLICY_NORMAL_ACK; + break; + + case HDD_WLAN_WMM_TS_INFO_ACK_POLICY_HT_IMMEDIATE_BLOCK_ACK: + tSpec.ts_info.ack_policy = SME_QOS_WMM_TS_ACK_POLICY_HT_IMMEDIATE_BLOCK_ACK; + break; + + default: + // unknown + *pStatus = HDD_WLAN_WMM_STATUS_SETUP_FAILED_BAD_PARAM; + return 0; + } + + *pStatus = hdd_wmm_addts(pAdapter, handle, &tSpec); + return 0; +} + + +static int iw_del_tspec(struct net_device *dev, struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + int *params = (int *)extra; + hdd_wlan_wmm_status_e *pStatus = (hdd_wlan_wmm_status_e *)extra; + v_U32_t handle; + + // make sure the application is sufficiently priviledged + // note that the kernel will do this for "set" ioctls, but since + // this ioctl wants to return status to user space it must be + // defined as a "get" ioctl + if (!capable(CAP_NET_ADMIN)) + { + return -EPERM; + } + + if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:LOGP in Progress. Ignore!!!", __func__); + return -EBUSY; + } + + // although we are defined to be a "get" ioctl, the params we require + // will fit in the iwreq_data, therefore unlike iw_add_tspec() there + // is no need to copy the params from user space + + // validate the handle + handle = params[HDD_WLAN_WMM_PARAM_HANDLE]; + if (HDD_WMM_HANDLE_IMPLICIT == handle) + { + // that one is reserved + *pStatus = HDD_WLAN_WMM_STATUS_SETUP_FAILED_BAD_PARAM; + return 0; + } + + *pStatus = hdd_wmm_delts(pAdapter, handle); + return 0; +} + + +static int iw_get_tspec(struct net_device *dev, struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + int *params = (int *)extra; + hdd_wlan_wmm_status_e *pStatus = (hdd_wlan_wmm_status_e *)extra; + v_U32_t handle; + + // although we are defined to be a "get" ioctl, the params we require + // will fit in the iwreq_data, therefore unlike iw_add_tspec() there + // is no need to copy the params from user space + + // validate the handle + handle = params[HDD_WLAN_WMM_PARAM_HANDLE]; + if (HDD_WMM_HANDLE_IMPLICIT == handle) + { + // that one is reserved + *pStatus = HDD_WLAN_WMM_STATUS_SETUP_FAILED_BAD_PARAM; + return 0; + } + + if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:LOGP in Progress. Ignore!!!", __func__); + return -EBUSY; + } + + *pStatus = hdd_wmm_checkts(pAdapter, handle); + return 0; +} + + +#ifdef FEATURE_WLAN_WAPI +static int iw_qcom_set_wapi_mode(struct net_device *dev, struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + hdd_wext_state_t *pWextState = WLAN_HDD_GET_WEXT_STATE_PTR(pAdapter); + hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); + tCsrRoamProfile *pRoamProfile = &pWextState->roamProfile; + + WAPI_FUNCTION_MODE *pWapiMode = (WAPI_FUNCTION_MODE *)extra; + + hddLog(LOG1, "The function iw_qcom_set_wapi_mode called"); + hddLog(LOG1, "%s: Received data %s", __func__, extra); + hddLog(LOG1, "%s: Received length %d", __func__, wrqu->data.length); + hddLog(LOG1, "%s: Input Data (wreq) WAPI Mode:%02d", __func__, pWapiMode->wapiMode); + + if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:LOGP in Progress. Ignore!!!", __func__); + return -EBUSY; + } + + if(WZC_ORIGINAL == pWapiMode->wapiMode) { + hddLog(LOG1, "%s: WAPI Mode Set to OFF", __func__); + /* Set Encryption mode to defualt , this allows next successfull non-WAPI Association */ + pRoamProfile->EncryptionType.numEntries = 1; + pRoamProfile->EncryptionType.encryptionType[0] = eCSR_ENCRYPT_TYPE_NONE; + pRoamProfile->mcEncryptionType.numEntries = 1; + pRoamProfile->mcEncryptionType.encryptionType[0] = eCSR_ENCRYPT_TYPE_NONE; + + pRoamProfile->AuthType.numEntries = 1; + pHddStaCtx->conn_info.authType = eCSR_AUTH_TYPE_OPEN_SYSTEM; + pRoamProfile->AuthType.authType[0] = pHddStaCtx->conn_info.authType; + } + else if(WAPI_EXTENTION == pWapiMode->wapiMode) { + hddLog(LOG1, "%s: WAPI Mode Set to ON", __func__); + } + else + return -EINVAL; + + pAdapter->wapi_info.nWapiMode = pWapiMode->wapiMode; + + return 0; +} + +static int iw_qcom_get_wapi_mode(struct net_device *dev, struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + WAPI_FUNCTION_MODE *pWapiMode = (WAPI_FUNCTION_MODE *)(extra); + + if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:LOGP in Progress. Ignore!!!", __func__); + return -EBUSY; + } + hddLog(LOG1, "The function iw_qcom_get_wapi_mode called"); + + pWapiMode->wapiMode = pAdapter->wapi_info.nWapiMode; + hddLog(LOG1, "%s: GET WAPI Mode Value:%02d", __func__, pWapiMode->wapiMode); + printk("\nGET WAPI MODE:%d",pWapiMode->wapiMode); + return 0; +} + +static int iw_qcom_set_wapi_assoc_info(struct net_device *dev, struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); +// WAPI_AssocInfo *pWapiAssocInfo = (WAPI_AssocInfo *)(wrqu->data.pointer); + WAPI_AssocInfo *pWapiAssocInfo = (WAPI_AssocInfo *)(extra); + int i = 0, j = 0; + hddLog(LOG1, "The function iw_qcom_set_wapi_assoc_info called"); + hddLog(LOG1, "%s: Received length %d", __func__, wrqu->data.length); + hddLog(LOG1, "%s: Received data %s", __func__, (char*)extra); + + if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:LOGP in Progress. Ignore!!!", __func__); + return -EBUSY; + } + VOS_ASSERT(pWapiAssocInfo); + + hddLog(LOG1, "%s: INPUT DATA:\nElement ID:0x%02x Length:0x%02x Version:0x%04x\n",__func__,pWapiAssocInfo->elementID,pWapiAssocInfo->length,pWapiAssocInfo->version); + hddLog(LOG1,"%s: akm Suite Cnt:0x%04x",__func__,pWapiAssocInfo->akmSuiteCount); + for(i =0 ; i < 16 ; i++) + hddLog(LOG1,"akm suite[%02d]:0x%08lx",i,pWapiAssocInfo->akmSuite[i]); + + hddLog(LOG1,"%s: Unicast Suite Cnt:0x%04x",__func__,pWapiAssocInfo->unicastSuiteCount); + for(i =0 ; i < 16 ; i++) + hddLog(LOG1, "Unicast suite[%02d]:0x%08lx",i,pWapiAssocInfo->unicastSuite[i]); + + hddLog(LOG1,"%s: Multicast suite:0x%08lx Wapi capa:0x%04x",__func__,pWapiAssocInfo->multicastSuite,pWapiAssocInfo->wapiCability); + hddLog(LOG1, "%s: BKID Cnt:0x%04x\n",__func__,pWapiAssocInfo->bkidCount); + for(i = 0 ; i < 16 ; i++) { + hddLog(LOG1, "BKID List[%02d].bkid:0x",i); + for(j = 0 ; j < 16 ; j++) + hddLog(LOG1,"%02x",pWapiAssocInfo->bkidList[i].bkid[j]); + } + + /* We are not using the entire IE as provided by the supplicant. + * This is being calculated by SME. This is the same as in the + * case of WPA. Only the auth mode information needs to be + * extracted here*/ + if ( pWapiAssocInfo->akmSuite[0] == WAPI_PSK_AKM_SUITE ) { + hddLog(LOG1, "%s: WAPI AUTH MODE SET TO PSK",__func__); + pAdapter->wapi_info.wapiAuthMode = WAPI_AUTH_MODE_PSK; + } + + if ( pWapiAssocInfo->akmSuite[0] == WAPI_CERT_AKM_SUITE) { + hddLog(LOG1, "%s: WAPI AUTH MODE SET TO CERTIFICATE",__func__); + pAdapter->wapi_info.wapiAuthMode = WAPI_AUTH_MODE_CERT; + } + return 0; +} + +static int iw_qcom_set_wapi_key(struct net_device *dev, struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); + eHalStatus halStatus = eHAL_STATUS_SUCCESS; + tANI_U32 roamId = 0xFF; + tANI_U8 *pKeyPtr = NULL; + v_BOOL_t isConnected = TRUE; + tCsrRoamSetKey setKey; + int i = 0; + WLAN_WAPI_KEY *pWapiKey = (WLAN_WAPI_KEY *)(extra); + + if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:LOGP in Progress. Ignore!!!", __func__); + return -EBUSY; + } + + hddLog(LOG1, "The function iw_qcom_set_wapi_key called "); + hddLog(LOG1, "%s: Received length %d", __func__, wrqu->data.length); + hddLog(LOG1, "%s: Received data %s", __func__, (char*)extra); + + hddLog(LOG1,":%s: INPUT DATA:\nKey Type:0x%02x Key Direction:0x%02x KEY ID:0x%02x\n", __func__, pWapiKey->keyType, pWapiKey->keyDirection, pWapiKey->keyId); + hddLog(LOG1,"Add Index:0x"); + for(i =0 ; i < 12 ; i++) + hddLog(LOG1,"%02x",pWapiKey->addrIndex[i]); + + hddLog(LOG1,"\n%s: WAPI ENCRYPTION KEY LENGTH:0x%04x", __func__,pWapiKey->wpiekLen); + hddLog(LOG1, "WAPI ENCRYPTION KEY:0x"); + for(i =0 ; i < 16 ; i++) + hddLog(LOG1,"%02x",pWapiKey->wpiek[i]); + + hddLog(LOG1,"\n%s: WAPI INTEGRITY CHECK KEY LENGTH:0x%04x", __func__,pWapiKey->wpickLen); + hddLog(LOG1,"WAPI INTEGRITY CHECK KEY:0x"); + for(i =0 ; i < 16 ; i++) + hddLog(LOG1,"%02x",pWapiKey->wpick[i]); + + hddLog(LOG1,"\nWAPI PN NUMBER:0x"); + for(i = 0 ; i < 16 ; i++) + hddLog(LOG1,"%02x",pWapiKey->pn[i]); + + // Clear the setkey memory + vos_mem_zero(&setKey,sizeof(tCsrRoamSetKey)); + // Store Key ID + setKey.keyId = (unsigned char)( pWapiKey->keyId ); + // SET WAPI Encryption + setKey.encType = eCSR_ENCRYPT_TYPE_WPI; + // Key Directionn both TX and RX + setKey.keyDirection = eSIR_TX_RX; // Do WE NEED to update this based on Key Type as GRP/UNICAST?? + // the PAE role + setKey.paeRole = 0 ; + + switch ( pWapiKey->keyType ) + { + case PAIRWISE_KEY: + { + isConnected = hdd_connIsConnected(pHddStaCtx); + vos_mem_copy(setKey.peerMac,&pHddStaCtx->conn_info.bssId,WNI_CFG_BSSID_LEN); + break; + } + case GROUP_KEY: + { + vos_set_macaddr_broadcast( (v_MACADDR_t *)setKey.peerMac ); + break; + } + default: + { + //Any other option is invalid. + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "[%4d] %s() failed to Set Key. Invalid key type %d", __LINE__,__func__ , -1 ); + + hddLog(LOGE," %s: Error WAPI Key Add Type",__func__); + halStatus = !eHAL_STATUS_SUCCESS; // NEED TO UPDATE THIS WITH CORRECT VALUE + break; // NEED RETURN FROM HERE ???? + } + } + + // Concatenating the Encryption Key (EK) and the MIC key (CK): EK followed by CK + setKey.keyLength = (v_U16_t)((pWapiKey->wpiekLen)+(pWapiKey->wpickLen)); + pKeyPtr = setKey.Key; + memcpy( pKeyPtr, pWapiKey->wpiek, pWapiKey->wpiekLen ); + pKeyPtr += pWapiKey->wpiekLen; + memcpy( pKeyPtr, pWapiKey->wpick, pWapiKey->wpickLen ); + + // Set the new key with SME. + pHddStaCtx->roam_info.roamingState = HDD_ROAM_STATE_SETTING_KEY; + + if ( isConnected ) { + halStatus = sme_RoamSetKey( WLAN_HDD_GET_HAL_CTX(pAdapter), pAdapter->sessionId, &setKey, &roamId ); + if ( halStatus != eHAL_STATUS_SUCCESS ) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "[%4d] sme_RoamSetKey returned ERROR status= %d", __LINE__, halStatus ); + + pHddStaCtx->roam_info.roamingState = HDD_ROAM_STATE_NONE; + } + } +#if 0 /// NEED TO CHECK ON THIS + else + { + // Store the keys in the adapter to be moved to the profile & passed to + // SME in the ConnectRequest if we are not yet in connected state. + memcpy( &pAdapter->setKey[ setKey.keyId ], &setKey, sizeof( setKey ) ); + pAdapter->fKeySet[ setKey.keyId ] = TRUE; + + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_MED, + " Saving key [idx= %d] to apply when moving to connected state ", + setKey.keyId ); + + } +#endif + return halStatus; +} + +static int iw_qcom_set_wapi_bkid(struct net_device *dev, struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); +#ifdef WLAN_DEBUG + int i = 0; + WLAN_BKID_LIST *pBkid = ( WLAN_BKID_LIST *) extra; +#endif + + hddLog(LOG1, "The function iw_qcom_set_wapi_bkid called"); + hddLog(LOG1, "%s: Received length %d", __func__, wrqu->data.length); + hddLog(LOG1, "%s: Received data %s", __func__, (char*)extra); + + hddLog(LOG1,"%s: INPUT DATA:\n BKID Length:0x%08lx\n", __func__,pBkid->length); + hddLog(LOG1,"%s: BKID Cnt:0x%04lx",pBkid->BKIDCount); + + hddLog(LOG1,"BKID KEY LIST[0]:0x"); + + if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:LOGP in Progress. Ignore!!!", __func__); + return -EBUSY; + } + +#ifdef WLAN_DEBUG + for(i =0 ; i < 16 ; i++) + hddLog(LOG1,"%02x",pBkid->BKID[0].bkid[i]); +#endif + + return 0; +} + +static int iw_qcom_get_wapi_bkid(struct net_device *dev, struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + /* Yet to implement this function, 19th April 2010 */ + hddLog(LOG1, "The function iw_qcom_get_wapi_bkid called "); + + return 0; +} +#endif /* FEATURE_WLAN_WAPI */ + +#ifdef WLAN_FEATURE_VOWIFI_11R +// +// +// Each time the supplicant has the auth_request or reassoc request +// IEs ready. This is pushed to the driver. The driver will inturn use +// it to send out the auth req and reassoc req for 11r FT Assoc. +// +static int iw_set_fties(struct net_device *dev, struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); + //v_CONTEXT_t pVosContext; + + if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:LOGP in Progress. Ignore!!!", __func__); + return -EBUSY; + } + if (!wrqu->data.length) + { + hddLog(LOGE, FL("called with 0 length IEs\n")); + return -EINVAL; + } + if (wrqu->data.pointer == NULL) + { + hddLog(LOGE, FL("called with NULL IE\n")); + return -EINVAL; + } + + // Added for debug on reception of Re-assoc Req. + if (eConnectionState_Associated != pHddStaCtx->conn_info.connState) + { + hddLog(LOGE, FL("Called with Ie of length = %d when not associated\n"), + wrqu->data.length); + hddLog(LOGE, FL("Should be Re-assoc Req IEs\n")); + } + +#ifdef WLAN_FEATURE_VOWIFI_11R_DEBUG + hddLog(LOGE, FL("%s called with Ie of length = %d\n"), __func__, wrqu->data.length); +#endif + + // Pass the received FT IEs to SME + sme_SetFTIEs( WLAN_HDD_GET_HAL_CTX(pAdapter), pAdapter->sessionId, extra, + wrqu->data.length); + + return 0; +} +#endif + +static int iw_set_dynamic_mcbc_filter(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + tpRcvFltMcAddrList pRequest = (tpRcvFltMcAddrList)extra; + hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + tpSirWlanSetRxpFilters wlanRxpFilterParam; + tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(pAdapter); + tpSirRcvFltMcAddrList mc_addr_list_ptr; + int idx; + eHalStatus ret_val; + + if (pHddCtx->isLogpInProgress) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:LOGP in Progress. Ignore!!!", __func__); + return -EBUSY; + } + if ((HDD_MULTICAST_FILTER_LIST == pRequest->mcastBcastFilterSetting) || + (HDD_MULTICAST_FILTER_LIST_CLEAR == pRequest->mcastBcastFilterSetting)) + { +#ifdef WLAN_FEATURE_PACKET_FILTERING + + mc_addr_list_ptr = vos_mem_malloc(sizeof(tSirRcvFltMcAddrList)); + if (NULL == mc_addr_list_ptr) + { + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s: vos_mem_alloc failed", __func__); + return -ENOMEM; + } + + mc_addr_list_ptr->ulMulticastAddrCnt = pRequest->mcast_addr_cnt; + + if (mc_addr_list_ptr->ulMulticastAddrCnt > HDD_MAX_NUM_MULTICAST_ADDRESS) + mc_addr_list_ptr->ulMulticastAddrCnt = HDD_MAX_NUM_MULTICAST_ADDRESS; + + hddLog(VOS_TRACE_LEVEL_INFO_HIGH, "%s MC Addr List Cnt %d", __func__, + mc_addr_list_ptr->ulMulticastAddrCnt); + + for (idx = 0; idx < mc_addr_list_ptr->ulMulticastAddrCnt; idx++) + { + memcpy(&mc_addr_list_ptr->multicastAddr[idx], + pRequest->multicastAddr[idx], HDD_WLAN_MAC_ADDR_LEN); + + hddLog(VOS_TRACE_LEVEL_INFO_HIGH, "%s MC Addr for Idx %d ="MAC_ADDRESS_STR, __func__, + idx, MAC_ADDR_ARRAY(mc_addr_list_ptr->multicastAddr[idx])); + } + + if (HDD_MULTICAST_FILTER_LIST_CLEAR == pRequest->mcastBcastFilterSetting) + mc_addr_list_ptr->action = 1; //clear + else + mc_addr_list_ptr->action = 0; //set + + ret_val = sme_8023MulticastList(hHal, pAdapter->sessionId, mc_addr_list_ptr); + vos_mem_free(mc_addr_list_ptr); + if (eHAL_STATUS_SUCCESS != ret_val) + { + hddLog(VOS_TRACE_LEVEL_ERROR, "%s: Failure to Set MC Address List", + __func__); + return -EINVAL; + } +#endif //WLAN_FEATURE_PACKET_FILTERING + } + else + { + + hddLog(VOS_TRACE_LEVEL_INFO_HIGH, + "%s: Set MC BC Filter Config request: %d suspend %d", + __func__, pRequest->mcastBcastFilterSetting, + pHddCtx->hdd_wlan_suspended); + + pHddCtx->configuredMcastBcastFilter = pRequest->mcastBcastFilterSetting; + + if (pHddCtx->hdd_wlan_suspended) + { + wlanRxpFilterParam = vos_mem_malloc(sizeof(tSirWlanSetRxpFilters)); + if (NULL == wlanRxpFilterParam) + { + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s: vos_mem_alloc failed", __func__); + return -EINVAL; + } + + wlanRxpFilterParam->configuredMcstBcstFilterSetting = + pRequest->mcastBcastFilterSetting; + wlanRxpFilterParam->setMcstBcstFilter = TRUE; + + hdd_conf_hostoffload(pAdapter, TRUE); + wlanRxpFilterParam->configuredMcstBcstFilterSetting = + pHddCtx->configuredMcastBcastFilter; + + hddLog(VOS_TRACE_LEVEL_INFO, "%s:MC/BC changed Req %d Set %d En %d", + __func__, + pHddCtx->configuredMcastBcastFilter, + wlanRxpFilterParam->configuredMcstBcstFilterSetting, + wlanRxpFilterParam->setMcstBcstFilter); + + if (eHAL_STATUS_SUCCESS != + sme_ConfigureRxpFilter(WLAN_HDD_GET_HAL_CTX(pAdapter), + wlanRxpFilterParam)) + { + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s: Failure to execute set HW MC/BC Filter request", + __func__); + vos_mem_free(wlanRxpFilterParam); + return -EINVAL; + } + + } + } + + return 0; +} + +static int iw_clear_dynamic_mcbc_filter(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + tpSirWlanSetRxpFilters wlanRxpFilterParam; + hddLog(VOS_TRACE_LEVEL_INFO_HIGH, "%s: ", __func__); + + //Reset the filter to INI value as we have to clear the dynamic filter + pHddCtx->configuredMcastBcastFilter = pHddCtx->cfg_ini->mcastBcastFilterSetting; + + //Configure FW with new setting + if (pHddCtx->hdd_wlan_suspended) + { + wlanRxpFilterParam = vos_mem_malloc(sizeof(tSirWlanSetRxpFilters)); + if (NULL == wlanRxpFilterParam) + { + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s: vos_mem_alloc failed", __func__); + return -EINVAL; + } + + wlanRxpFilterParam->configuredMcstBcstFilterSetting = + pHddCtx->configuredMcastBcastFilter; + wlanRxpFilterParam->setMcstBcstFilter = TRUE; + + hdd_conf_hostoffload(pAdapter, TRUE); + wlanRxpFilterParam->configuredMcstBcstFilterSetting = + pHddCtx->configuredMcastBcastFilter; + + if (eHAL_STATUS_SUCCESS != + sme_ConfigureRxpFilter(WLAN_HDD_GET_HAL_CTX(pAdapter), + wlanRxpFilterParam)) + { + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s: Failure to execute set HW MC/BC Filter request", + __func__); + vos_mem_free(wlanRxpFilterParam); + return -EINVAL; + } + } + return 0; +} + +static int iw_set_host_offload(struct net_device *dev, struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + tpHostOffloadRequest pRequest = (tpHostOffloadRequest) extra; + tSirHostOffloadReq offloadRequest; + + if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:LOGP in Progress. Ignore!!!", __func__); + return -EBUSY; + } + + /* Debug display of request components. */ + switch (pRequest->offloadType) + { + case WLAN_IPV4_ARP_REPLY_OFFLOAD: + hddLog(VOS_TRACE_LEVEL_WARN, "%s: Host offload request: ARP reply", __func__); + switch (pRequest->enableOrDisable) + { + case WLAN_OFFLOAD_DISABLE: + hddLog(VOS_TRACE_LEVEL_WARN, " disable"); + break; + case WLAN_OFFLOAD_ARP_AND_BC_FILTER_ENABLE: + hddLog(VOS_TRACE_LEVEL_WARN, " BC Filtering enable"); + case WLAN_OFFLOAD_ENABLE: + hddLog(VOS_TRACE_LEVEL_WARN, " ARP offload enable"); + hddLog(VOS_TRACE_LEVEL_WARN, " IP address: %d.%d.%d.%d", + pRequest->params.hostIpv4Addr[0], pRequest->params.hostIpv4Addr[1], + pRequest->params.hostIpv4Addr[2], pRequest->params.hostIpv4Addr[3]); + } + break; + + case WLAN_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD: + hddLog(VOS_TRACE_LEVEL_INFO_HIGH, "%s: Host offload request: neighbor discovery\n", + __func__); + switch (pRequest->enableOrDisable) + { + case WLAN_OFFLOAD_DISABLE: + hddLog(VOS_TRACE_LEVEL_INFO_HIGH, " disable"); + break; + case WLAN_OFFLOAD_ENABLE: + hddLog(VOS_TRACE_LEVEL_INFO_HIGH, " enable"); + hddLog(VOS_TRACE_LEVEL_INFO_HIGH, " IP address: %x:%x:%x:%x:%x:%x:%x:%x", + *(v_U16_t *)(pRequest->params.hostIpv6Addr), + *(v_U16_t *)(pRequest->params.hostIpv6Addr + 2), + *(v_U16_t *)(pRequest->params.hostIpv6Addr + 4), + *(v_U16_t *)(pRequest->params.hostIpv6Addr + 6), + *(v_U16_t *)(pRequest->params.hostIpv6Addr + 8), + *(v_U16_t *)(pRequest->params.hostIpv6Addr + 10), + *(v_U16_t *)(pRequest->params.hostIpv6Addr + 12), + *(v_U16_t *)(pRequest->params.hostIpv6Addr + 14)); + } + } + + /* Execute offload request. The reason that we can copy the request information + from the ioctl structure to the SME structure is that they are laid out + exactly the same. Otherwise, each piece of information would have to be + copied individually. */ + memcpy(&offloadRequest, pRequest, wrqu->data.length); + if (eHAL_STATUS_SUCCESS != sme_SetHostOffload(WLAN_HDD_GET_HAL_CTX(pAdapter), + pAdapter->sessionId, &offloadRequest)) + { + hddLog(VOS_TRACE_LEVEL_ERROR, "%s: Failure to execute host offload request\n", + __func__); + return -EINVAL; + } + + return 0; +} + +static int iw_set_keepalive_params(struct net_device *dev, struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + tpKeepAliveRequest pRequest = (tpKeepAliveRequest) extra; + tSirKeepAliveReq keepaliveRequest; + + if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:LOGP in Progress. Ignore!!!", __func__); + return 0; + } + + /* Debug display of request components. */ + hddLog(VOS_TRACE_LEVEL_INFO, + "%s: Set Keep Alive Request : TimePeriod %d size %zu", + __func__, pRequest->timePeriod, sizeof(tKeepAliveRequest)); + + switch (pRequest->packetType) + { + case WLAN_KEEP_ALIVE_NULL_PKT: + hddLog(VOS_TRACE_LEVEL_WARN, "%s: Keep Alive Request: Tx NULL", __func__); + break; + + case WLAN_KEEP_ALIVE_UNSOLICIT_ARP_RSP: + hddLog(VOS_TRACE_LEVEL_INFO_HIGH, "%s: Keep Alive Request: Tx UnSolicited ARP RSP\n", + __func__); + + hddLog(VOS_TRACE_LEVEL_WARN, " Host IP address: %d.%d.%d.%d", + pRequest->hostIpv4Addr[0], pRequest->hostIpv4Addr[1], + pRequest->hostIpv4Addr[2], pRequest->hostIpv4Addr[3]); + + hddLog(VOS_TRACE_LEVEL_WARN, " Dest IP address: %d.%d.%d.%d", + pRequest->destIpv4Addr[0], pRequest->destIpv4Addr[1], + pRequest->destIpv4Addr[2], pRequest->destIpv4Addr[3]); + + hddLog(VOS_TRACE_LEVEL_WARN, " Dest MAC address: %d:%d:%d:%d:%d:%d", + pRequest->destMacAddr[0], pRequest->destMacAddr[1], + pRequest->destMacAddr[2], pRequest->destMacAddr[3], + pRequest->destMacAddr[4], pRequest->destMacAddr[5]); + break; + } + + /* Execute keep alive request. The reason that we can copy the request information + from the ioctl structure to the SME structure is that they are laid out + exactly the same. Otherwise, each piece of information would have to be + copied individually. */ + memcpy(&keepaliveRequest, pRequest, wrqu->data.length); + + hddLog(VOS_TRACE_LEVEL_ERROR, "set Keep: TP before SME %d\n", keepaliveRequest.timePeriod); + + if (eHAL_STATUS_SUCCESS != sme_SetKeepAlive(WLAN_HDD_GET_HAL_CTX(pAdapter), + pAdapter->sessionId, &keepaliveRequest)) + { + hddLog(VOS_TRACE_LEVEL_ERROR, "%s: Failure to execute Keep Alive\n", + __func__); + return -EINVAL; + } + + return 0; +} + +#ifdef WLAN_FEATURE_PACKET_FILTERING +int wlan_hdd_set_filter(hdd_context_t *pHddCtx, tpPacketFilterCfg pRequest, + tANI_U8 sessionId) +{ + tSirRcvPktFilterCfgType packetFilterSetReq = {0}; + tSirRcvFltPktClearParam packetFilterClrReq = {0}; + int i=0; + + if (pHddCtx->cfg_ini->disablePacketFilter) + { + hddLog(VOS_TRACE_LEVEL_FATAL, "%s: Packet Filtering Disabled. Returning ", + __func__ ); + return 0; + } + if (pHddCtx->isLogpInProgress) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:LOGP in Progress. Ignore!!!", __func__); + return -EBUSY; + } + /* Debug display of request components. */ + hddLog(VOS_TRACE_LEVEL_ERROR, "%s: Packet Filter Request : FA %d params %d", + __func__, pRequest->filterAction, pRequest->numParams); + + switch (pRequest->filterAction) + { + case HDD_RCV_FILTER_SET: + hddLog(VOS_TRACE_LEVEL_INFO, "%s: Set Packet Filter Request for Id: %d", + __func__, pRequest->filterId); + + packetFilterSetReq.filterId = pRequest->filterId; + if ( pRequest->numParams >= HDD_MAX_CMP_PER_PACKET_FILTER) + { + hddLog(VOS_TRACE_LEVEL_ERROR, "%s: Number of Params exceed Max limit %d\n", + __func__, pRequest->numParams); + return -EINVAL; + } + packetFilterSetReq.numFieldParams = pRequest->numParams; + packetFilterSetReq.coalesceTime = 0; + packetFilterSetReq.filterType = 1; + for (i=0; i < pRequest->numParams; i++) + { + packetFilterSetReq.paramsData[i].protocolLayer = pRequest->paramsData[i].protocolLayer; + packetFilterSetReq.paramsData[i].cmpFlag = pRequest->paramsData[i].cmpFlag; + packetFilterSetReq.paramsData[i].dataOffset = pRequest->paramsData[i].dataOffset; + packetFilterSetReq.paramsData[i].dataLength = pRequest->paramsData[i].dataLength; + packetFilterSetReq.paramsData[i].reserved = 0; + + hddLog(VOS_TRACE_LEVEL_INFO, "Proto %d Comp Flag %d Filter Type %d\n", + pRequest->paramsData[i].protocolLayer, pRequest->paramsData[i].cmpFlag, + packetFilterSetReq.filterType); + + hddLog(VOS_TRACE_LEVEL_INFO, "Data Offset %d Data Len %d\n", + pRequest->paramsData[i].dataOffset, pRequest->paramsData[i].dataLength); + + memcpy(&packetFilterSetReq.paramsData[i].compareData, + pRequest->paramsData[i].compareData, pRequest->paramsData[i].dataLength); + memcpy(&packetFilterSetReq.paramsData[i].dataMask, + pRequest->paramsData[i].dataMask, pRequest->paramsData[i].dataLength); + + hddLog(VOS_TRACE_LEVEL_INFO, "CData %d CData %d CData %d CData %d CData %d CData %d\n", + pRequest->paramsData[i].compareData[0], pRequest->paramsData[i].compareData[1], + pRequest->paramsData[i].compareData[2], pRequest->paramsData[i].compareData[3], + pRequest->paramsData[i].compareData[4], pRequest->paramsData[i].compareData[5]); + + hddLog(VOS_TRACE_LEVEL_INFO, "MData %d MData %d MData %d MData %d MData %d MData %d\n", + pRequest->paramsData[i].dataMask[0], pRequest->paramsData[i].dataMask[1], + pRequest->paramsData[i].dataMask[2], pRequest->paramsData[i].dataMask[3], + pRequest->paramsData[i].dataMask[4], pRequest->paramsData[i].dataMask[5]); + } + + if (eHAL_STATUS_SUCCESS != sme_ReceiveFilterSetFilter(pHddCtx->hHal, &packetFilterSetReq, sessionId)) + { + hddLog(VOS_TRACE_LEVEL_ERROR, "%s: Failure to execute Set Filter\n", + __func__); + return -EINVAL; + } + + break; + + case HDD_RCV_FILTER_CLEAR: + + hddLog(VOS_TRACE_LEVEL_INFO_HIGH, "%s: Clear Packet Filter Request for Id: %d\n", + __func__, pRequest->filterId); + packetFilterClrReq.filterId = pRequest->filterId; + if (eHAL_STATUS_SUCCESS != sme_ReceiveFilterClearFilter(pHddCtx->hHal, &packetFilterClrReq, sessionId)) + { + hddLog(VOS_TRACE_LEVEL_ERROR, "%s: Failure to execute Clear Filter\n", + __func__); + return -EINVAL; + } + break; + + default : + hddLog(VOS_TRACE_LEVEL_INFO_HIGH, "%s: Packet Filter Request: Invalid %d\n", + __func__, pRequest->filterAction); + return -EINVAL; + } + return 0; +} + +int wlan_hdd_setIPv6Filter(hdd_context_t *pHddCtx, tANI_U8 filterType, + tANI_U8 sessionId) +{ + tSirRcvPktFilterCfgType packetFilterSetReq = {0}; + tSirRcvFltPktClearParam packetFilterClrReq = {0}; + + if (NULL == pHddCtx) + { + hddLog(VOS_TRACE_LEVEL_ERROR, FL(" NULL HDD Context Passed")); + return -EINVAL; + } + + if (pHddCtx->isLogpInProgress) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:LOGP in Progress. Ignore!!!", __func__); + return -EBUSY; + } + + if (pHddCtx->cfg_ini->disablePacketFilter) + { + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s: Packet Filtering Disabled. Returning ", + __func__ ); + return -EINVAL; + } + + switch (filterType) + { + /* For setting IPV6 MC and UC Filter we need to configure + * 2 filters, one for MC and one for UC. + * The Filter ID shouldn't be swapped, which results in making + * UC Filter ineffective. + * We have Hardcode all the values + * + * Reason for a seperate UC filter is because, driver need to + * specify the FW that the specific filter is for unicast + * otherwise FW will not pass the unicast frames by default + * through the filter. This is required to avoid any performance + * hits when no unicast filter is set and only MC/BC are set. + * The way driver informs host is by using the MAC protocol + * layer, CMP flag set to MAX, CMP Data set to 1. + */ + + case HDD_FILTER_IPV6_MC_UC: + /* Setting IPV6 MC Filter below + */ + packetFilterSetReq.filterType = HDD_RCV_FILTER_SET; + packetFilterSetReq.filterId = HDD_FILTER_ID_IPV6_MC; + packetFilterSetReq.numFieldParams = 2; + packetFilterSetReq.paramsData[0].protocolLayer = + HDD_FILTER_PROTO_TYPE_MAC; + packetFilterSetReq.paramsData[0].cmpFlag = + HDD_FILTER_CMP_TYPE_NOT_EQUAL; + packetFilterSetReq.paramsData[0].dataOffset = + WLAN_HDD_80211_FRM_DA_OFFSET; + packetFilterSetReq.paramsData[0].dataLength = 1; + packetFilterSetReq.paramsData[0].compareData[0] = + HDD_IPV6_MC_CMP_DATA; + + packetFilterSetReq.paramsData[1].protocolLayer = + HDD_FILTER_PROTO_TYPE_ARP; + packetFilterSetReq.paramsData[1].cmpFlag = + HDD_FILTER_CMP_TYPE_NOT_EQUAL; + packetFilterSetReq.paramsData[1].dataOffset = ETH_ALEN; + packetFilterSetReq.paramsData[1].dataLength = 2; + packetFilterSetReq.paramsData[1].compareData[0] = + HDD_IPV6_CMP_DATA_0; + packetFilterSetReq.paramsData[1].compareData[1] = + HDD_IPV6_CMP_DATA_1; + + + if (eHAL_STATUS_SUCCESS != sme_ReceiveFilterSetFilter(pHddCtx->hHal, + &packetFilterSetReq, sessionId)) + { + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s: Failure to execute Set IPv6 Mulicast Filter", + __func__); + return -EINVAL; + } + + memset( &packetFilterSetReq, 0, sizeof(tSirRcvPktFilterCfgType)); + + /* + * Setting IPV6 UC Filter below + */ + packetFilterSetReq.filterType = HDD_RCV_FILTER_SET; + packetFilterSetReq.filterId = HDD_FILTER_ID_IPV6_UC; + packetFilterSetReq.numFieldParams = 2; + packetFilterSetReq.paramsData[0].protocolLayer = + HDD_FILTER_PROTO_TYPE_MAC; + packetFilterSetReq.paramsData[0].cmpFlag = + HDD_FILTER_CMP_TYPE_MAX; + packetFilterSetReq.paramsData[0].dataOffset = 0; + packetFilterSetReq.paramsData[0].dataLength = 1; + packetFilterSetReq.paramsData[0].compareData[0] = + HDD_IPV6_UC_CMP_DATA; + + packetFilterSetReq.paramsData[1].protocolLayer = + HDD_FILTER_PROTO_TYPE_ARP; + packetFilterSetReq.paramsData[1].cmpFlag = + HDD_FILTER_CMP_TYPE_NOT_EQUAL; + packetFilterSetReq.paramsData[1].dataOffset = ETH_ALEN; + packetFilterSetReq.paramsData[1].dataLength = 2; + packetFilterSetReq.paramsData[1].compareData[0] = + HDD_IPV6_CMP_DATA_0; + packetFilterSetReq.paramsData[1].compareData[1] = + HDD_IPV6_CMP_DATA_1; + + if (eHAL_STATUS_SUCCESS != sme_ReceiveFilterSetFilter(pHddCtx->hHal, + &packetFilterSetReq, sessionId)) + { + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s: Failure to execute Set IPv6 Unicast Filter", + __func__); + return -EINVAL; + } + + break; + + case HDD_FILTER_IPV6_MC: + /* + * IPV6 UC Filter might be already set, + * clear the UC Filter. As the Filter + * IDs are static, we can directly clear it. + */ + packetFilterSetReq.filterType = HDD_RCV_FILTER_SET; + packetFilterClrReq.filterId = HDD_FILTER_ID_IPV6_UC; + if (eHAL_STATUS_SUCCESS != sme_ReceiveFilterClearFilter(pHddCtx->hHal, + &packetFilterClrReq, sessionId)) + { + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s: Failure to execute Clear IPv6 Unicast Filter", + __func__); + return -EINVAL; + } + + /* + * Setting IPV6 MC Filter below + */ + packetFilterSetReq.filterId = HDD_FILTER_ID_IPV6_MC; + packetFilterSetReq.numFieldParams = 2; + packetFilterSetReq.paramsData[0].protocolLayer = + HDD_FILTER_PROTO_TYPE_MAC; + packetFilterSetReq.paramsData[0].cmpFlag = + HDD_FILTER_CMP_TYPE_NOT_EQUAL; + packetFilterSetReq.paramsData[0].dataOffset = + WLAN_HDD_80211_FRM_DA_OFFSET; + packetFilterSetReq.paramsData[0].dataLength = 1; + packetFilterSetReq.paramsData[0].compareData[0] = + HDD_IPV6_MC_CMP_DATA; + + packetFilterSetReq.paramsData[1].protocolLayer = + HDD_FILTER_PROTO_TYPE_ARP; + packetFilterSetReq.paramsData[1].cmpFlag = + HDD_FILTER_CMP_TYPE_NOT_EQUAL; + packetFilterSetReq.paramsData[1].dataOffset = ETH_ALEN; + packetFilterSetReq.paramsData[1].dataLength = 2; + packetFilterSetReq.paramsData[1].compareData[0] = + HDD_IPV6_CMP_DATA_0; + packetFilterSetReq.paramsData[1].compareData[1] = + HDD_IPV6_CMP_DATA_1; + + + if (eHAL_STATUS_SUCCESS != sme_ReceiveFilterSetFilter(pHddCtx->hHal, + &packetFilterSetReq, sessionId)) + { + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s: Failure to execute Set IPv6 Multicast Filter", + __func__); + return -EINVAL; + } + break; + + default : + hddLog(VOS_TRACE_LEVEL_INFO_HIGH, + "%s: Packet Filter Request: Invalid", + __func__); + return -EINVAL; + } + return 0; +} + +void wlan_hdd_set_mc_addr_list(hdd_adapter_t *pAdapter, v_U8_t set) +{ + v_U8_t i; + tpSirRcvFltMcAddrList pMulticastAddrs = NULL; + tHalHandle hHal = NULL; + hdd_context_t* pHddCtx = (hdd_context_t*)pAdapter->pHddCtx; + + if (NULL == pHddCtx) + { + hddLog(VOS_TRACE_LEVEL_ERROR, FL("HDD CTX is NULL")); + return; + } + + hHal = pHddCtx->hHal; + + if (NULL == hHal) + { + hddLog(VOS_TRACE_LEVEL_ERROR, FL("HAL Handle is NULL")); + return; + } + + /* Check if INI is enabled or not, other wise just return + */ + if (pHddCtx->cfg_ini->fEnableMCAddrList) + { + pMulticastAddrs = vos_mem_malloc(sizeof(tSirRcvFltMcAddrList)); + if (NULL == pMulticastAddrs) + { + hddLog(VOS_TRACE_LEVEL_ERROR, FL("Could not allocate Memory")); + return; + } + + if (set) + { + /* Following pre-conditions should be satisfied before wei + * configure the MC address list. + */ + if (((pAdapter->device_mode == WLAN_HDD_INFRA_STATION) || + (pAdapter->device_mode == WLAN_HDD_P2P_CLIENT)) + && pAdapter->mc_addr_list.mc_cnt + && (eConnectionState_Associated == + (WLAN_HDD_GET_STATION_CTX_PTR(pAdapter))->conn_info.connState)) + { + pMulticastAddrs->ulMulticastAddrCnt = + pAdapter->mc_addr_list.mc_cnt; + for (i = 0; i < pAdapter->mc_addr_list.mc_cnt; i++) + { + memcpy(&(pMulticastAddrs->multicastAddr[i][0]), + &(pAdapter->mc_addr_list.addr[i][0]), + sizeof(pAdapter->mc_addr_list.addr[i])); + hddLog(VOS_TRACE_LEVEL_INFO, + "%s: %s multicast filter: addr =" + MAC_ADDRESS_STR, + __func__, set ? "setting" : "clearing", + MAC_ADDR_ARRAY(pMulticastAddrs->multicastAddr[i])); + } + /* Set multicast filter */ + sme_8023MulticastList(hHal, pAdapter->sessionId, + pMulticastAddrs); + } + } + else + { + /* Need to clear only if it was previously configured + */ + if (pAdapter->mc_addr_list.isFilterApplied) + { + pMulticastAddrs->ulMulticastAddrCnt = 0; + sme_8023MulticastList(hHal, pAdapter->sessionId, + pMulticastAddrs); + } + + } + pAdapter->mc_addr_list.isFilterApplied = set ? TRUE : FALSE; + vos_mem_free(pMulticastAddrs); + } + else + { + hddLog(VOS_TRACE_LEVEL_INFO, + FL("gMCAddrListEnable is not enabled in INI")); + } + return; +} + +static int iw_set_packet_filter_params(struct net_device *dev, struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + tpPacketFilterCfg pRequest = (tpPacketFilterCfg) extra; + + return wlan_hdd_set_filter(WLAN_HDD_GET_CTX(pAdapter), pRequest, pAdapter->sessionId); +} +#endif +static int iw_get_statistics(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + + VOS_STATUS vos_status = VOS_STATUS_SUCCESS; + eHalStatus status = eHAL_STATUS_SUCCESS; + hdd_wext_state_t *pWextState; + hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + char *p = extra; + int tlen = 0; + tCsrSummaryStatsInfo *pStats = &(pAdapter->hdd_stats.summary_stat); + + tCsrGlobalClassAStatsInfo *aStats = &(pAdapter->hdd_stats.ClassA_stat); + tCsrGlobalClassDStatsInfo *dStats = &(pAdapter->hdd_stats.ClassD_stat); + + ENTER(); + + if (pHddCtx->isLogpInProgress) { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:LOGP in Progress. Ignore!!!",__func__); + return -EINVAL; + } + + if (eConnectionState_Associated != (WLAN_HDD_GET_STATION_CTX_PTR(pAdapter))->conn_info.connState) { + + wrqu->txpower.value = 0; + } + else { + status = sme_GetStatistics( pHddCtx->hHal, eCSR_HDD, + SME_SUMMARY_STATS | + SME_GLOBAL_CLASSA_STATS | + SME_GLOBAL_CLASSB_STATS | + SME_GLOBAL_CLASSC_STATS | + SME_GLOBAL_CLASSD_STATS | + SME_PER_STA_STATS, + hdd_StatisticsCB, 0, FALSE, + (WLAN_HDD_GET_STATION_CTX_PTR(pAdapter))->conn_info.staId[0], pAdapter ); + + if (eHAL_STATUS_SUCCESS != status) + { + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s: Unable to retrieve SME statistics", + __func__); + return -EINVAL; + } + + pWextState = WLAN_HDD_GET_WEXT_STATE_PTR(pAdapter); + + vos_status = vos_wait_single_event(&pWextState->vosevent, WLAN_WAIT_TIME_STATS); + if (!VOS_IS_STATUS_SUCCESS(vos_status)) + { + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s: SME timeout while retrieving statistics", + __func__); + /*Remove the SME statistics list by passing NULL in callback argument*/ + status = sme_GetStatistics( pHddCtx->hHal, eCSR_HDD, + SME_SUMMARY_STATS | + SME_GLOBAL_CLASSA_STATS | + SME_GLOBAL_CLASSB_STATS | + SME_GLOBAL_CLASSC_STATS | + SME_GLOBAL_CLASSD_STATS | + SME_PER_STA_STATS, + NULL, 0, FALSE, + (WLAN_HDD_GET_STATION_CTX_PTR(pAdapter))->conn_info.staId[0], pAdapter ); + + return -EINVAL; + } + FILL_TLV(p, (tANI_U8)WLAN_STATS_RETRY_CNT, + (tANI_U8) sizeof (pStats->retry_cnt), + (char*) &(pStats->retry_cnt[0]), + tlen); + + FILL_TLV(p, (tANI_U8)WLAN_STATS_MUL_RETRY_CNT, + (tANI_U8) sizeof (pStats->multiple_retry_cnt), + (char*) &(pStats->multiple_retry_cnt[0]), + tlen); + + FILL_TLV(p, (tANI_U8)WLAN_STATS_TX_FRM_CNT, + (tANI_U8) sizeof (pStats->tx_frm_cnt), + (char*) &(pStats->tx_frm_cnt[0]), + tlen); + + FILL_TLV(p, (tANI_U8)WLAN_STATS_RX_FRM_CNT, + (tANI_U8) sizeof (pStats->rx_frm_cnt), + (char*) &(pStats->rx_frm_cnt), + tlen); + + FILL_TLV(p, (tANI_U8)WLAN_STATS_FRM_DUP_CNT, + (tANI_U8) sizeof (pStats->frm_dup_cnt), + (char*) &(pStats->frm_dup_cnt), + tlen); + + FILL_TLV(p, (tANI_U8)WLAN_STATS_FAIL_CNT, + (tANI_U8) sizeof (pStats->fail_cnt), + (char*) &(pStats->fail_cnt[0]), + tlen); + + FILL_TLV(p, (tANI_U8)WLAN_STATS_RTS_FAIL_CNT, + (tANI_U8) sizeof (pStats->rts_fail_cnt), + (char*) &(pStats->rts_fail_cnt), + tlen); + + FILL_TLV(p, (tANI_U8)WLAN_STATS_ACK_FAIL_CNT, + (tANI_U8) sizeof (pStats->ack_fail_cnt), + (char*) &(pStats->ack_fail_cnt), + tlen); + + FILL_TLV(p, (tANI_U8)WLAN_STATS_RTS_SUC_CNT, + (tANI_U8) sizeof (pStats->rts_succ_cnt), + (char*) &(pStats->rts_succ_cnt), + tlen); + + FILL_TLV(p, (tANI_U8)WLAN_STATS_RX_DISCARD_CNT, + (tANI_U8) sizeof (pStats->rx_discard_cnt), + (char*) &(pStats->rx_discard_cnt), + tlen); + + FILL_TLV(p, (tANI_U8)WLAN_STATS_RX_ERROR_CNT, + (tANI_U8) sizeof (pStats->rx_error_cnt), + (char*) &(pStats->rx_error_cnt), + tlen); + + FILL_TLV(p, (tANI_U8)WLAN_STATS_TX_BYTE_CNT, + (tANI_U8) sizeof (dStats->tx_uc_byte_cnt[0]), + (char*) &(dStats->tx_uc_byte_cnt[0]), + tlen); + + FILL_TLV(p, (tANI_U8)WLAN_STATS_RX_BYTE_CNT, + (tANI_U8) sizeof (dStats->rx_byte_cnt), + (char*) &(dStats->rx_byte_cnt), + tlen); + + FILL_TLV(p, (tANI_U8)WLAN_STATS_RX_RATE, + (tANI_U8) sizeof (dStats->rx_rate), + (char*) &(dStats->rx_rate), + tlen); + + /* Transmit rate, in units of 500 kbit/sec */ + FILL_TLV(p, (tANI_U8)WLAN_STATS_TX_RATE, + (tANI_U8) sizeof (aStats->tx_rate), + (char*) &(aStats->tx_rate), + tlen); + + FILL_TLV(p, (tANI_U8)WLAN_STATS_RX_UC_BYTE_CNT, + (tANI_U8) sizeof (dStats->rx_uc_byte_cnt[0]), + (char*) &(dStats->rx_uc_byte_cnt[0]), + tlen); + FILL_TLV(p, (tANI_U8)WLAN_STATS_RX_MC_BYTE_CNT, + (tANI_U8) sizeof (dStats->rx_mc_byte_cnt), + (char*) &(dStats->rx_mc_byte_cnt), + tlen); + FILL_TLV(p, (tANI_U8)WLAN_STATS_RX_BC_BYTE_CNT, + (tANI_U8) sizeof (dStats->rx_bc_byte_cnt), + (char*) &(dStats->rx_bc_byte_cnt), + tlen); + FILL_TLV(p, (tANI_U8)WLAN_STATS_TX_UC_BYTE_CNT, + (tANI_U8) sizeof (dStats->tx_uc_byte_cnt[0]), + (char*) &(dStats->tx_uc_byte_cnt[0]), + tlen); + FILL_TLV(p, (tANI_U8)WLAN_STATS_TX_MC_BYTE_CNT, + (tANI_U8) sizeof (dStats->tx_mc_byte_cnt), + (char*) &(dStats->tx_mc_byte_cnt), + tlen); + FILL_TLV(p, (tANI_U8)WLAN_STATS_TX_BC_BYTE_CNT, + (tANI_U8) sizeof (dStats->tx_bc_byte_cnt), + (char*) &(dStats->tx_bc_byte_cnt), + tlen); + + wrqu->data.length = tlen; + + } + + EXIT(); + + return 0; +} + + +#ifdef FEATURE_WLAN_SCAN_PNO + +/*Max Len for PNO notification*/ +#define MAX_PNO_NOTIFY_LEN 100 +void found_pref_network_cb (void *callbackContext, + tSirPrefNetworkFoundInd *pPrefNetworkFoundInd) +{ + hdd_adapter_t* pAdapter = (hdd_adapter_t*)callbackContext; + union iwreq_data wrqu; + char buf[MAX_PNO_NOTIFY_LEN+1]; + + hddLog(VOS_TRACE_LEVEL_WARN, "A preferred network was found: %s with rssi: -%d", + pPrefNetworkFoundInd->ssId.ssId, pPrefNetworkFoundInd->rssi); + + // create the event + memset(&wrqu, 0, sizeof(wrqu)); + memset(buf, 0, sizeof(buf)); + + snprintf(buf, MAX_PNO_NOTIFY_LEN, "QCOM: Found preferred network: %s with RSSI of -%u", + pPrefNetworkFoundInd->ssId.ssId, + (unsigned int)pPrefNetworkFoundInd->rssi); + + wrqu.data.pointer = buf; + wrqu.data.length = strlen(buf); + + // send the event + + wireless_send_event(pAdapter->dev, IWEVCUSTOM, &wrqu, buf); + +} + + +/*string based input*/ +VOS_STATUS iw_set_pno(struct net_device *dev, struct iw_request_info *info, + union iwreq_data *wrqu, char *extra, int nOffset) +{ + hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + /* pnoRequest is a large struct, so we make it static to avoid stack + overflow. This API is only invoked via ioctl, so it is + serialized by the kernel rtnl_lock and hence does not need to be + reentrant */ + static tSirPNOScanReq pnoRequest; + char *ptr; + v_U8_t i,j, ucParams, ucMode; + /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "PNO data len %d data %s", + wrqu->data.length, + extra); + + if (wrqu->data.length <= nOffset ) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, "PNO input is not correct"); + return VOS_STATUS_E_FAILURE; + } + + pnoRequest.enable = 0; + pnoRequest.ucNetworksCount = 0; + /*----------------------------------------------------------------------- + Input is string based and expected to be like this: + + + for each network: + + + + + e.g: + 1 2 4 test 0 0 3 1 6 11 2 40 5 test2 4 4 6 1 2 3 4 5 6 1 0 2 5 2 300 0 + + this translates into: + ----------------------------- + enable PNO + look for 2 networks: + test - with authentication type 0 and encryption type 0, + that can be found on 3 channels: 1 6 and 11 , + SSID bcast type is unknown (directed probe will be sent if AP not found) + and must meet -40dBm RSSI + + test2 - with auth and enrytption type 4/4 + that can be found on 6 channels 1, 2, 3, 4, 5 and 6 + bcast type is non-bcast (directed probe will be sent) + and must not meet any RSSI threshold + + scan every 5 seconds 2 times, scan every 300 seconds until stopped + -----------------------------------------------------------------------*/ + ptr = extra + nOffset; + + if (1 != sscanf(ptr,"%hhu%n", &(pnoRequest.enable), &nOffset)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "PNO enable input is not valid %s",ptr); + return VOS_STATUS_E_FAILURE; + } + + if ( 0 == pnoRequest.enable ) + { + /*Disable PNO*/ + memset(&pnoRequest, 0, sizeof(pnoRequest)); + sme_SetPreferredNetworkList(WLAN_HDD_GET_HAL_CTX(pAdapter), &pnoRequest, + pAdapter->sessionId, + found_pref_network_cb, pAdapter); + return VOS_STATUS_SUCCESS; + } + + ptr += nOffset; + + if (1 != sscanf(ptr,"%hhu %n", &(pnoRequest.ucNetworksCount), &nOffset)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "PNO count input not valid %s",ptr); + return VOS_STATUS_E_FAILURE; + + } + + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "PNO enable %d networks count %d offset %d", + pnoRequest.enable, + pnoRequest.ucNetworksCount, + nOffset); + + /* Parameters checking: + ucNetworksCount has to be larger than 0*/ + if (( 0 == pnoRequest.ucNetworksCount ) || + ( pnoRequest.ucNetworksCount > SIR_PNO_MAX_SUPP_NETWORKS )) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, "Network input is not correct"); + return VOS_STATUS_E_FAILURE; + } + + ptr += nOffset; + + for ( i = 0; i < pnoRequest.ucNetworksCount; i++ ) + { + + pnoRequest.aNetworks[i].ssId.length = 0; + + ucParams = sscanf(ptr,"%hhu %n", + &(pnoRequest.aNetworks[i].ssId.length),&nOffset); + + if (1 != ucParams) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "PNO ssid length input is not valid %s",ptr); + return VOS_STATUS_E_FAILURE; + } + + if (( 0 == pnoRequest.aNetworks[i].ssId.length ) || + ( pnoRequest.aNetworks[i].ssId.length > 32 ) ) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "SSID Len %d is not correct for network %d", + pnoRequest.aNetworks[i].ssId.length, i); + return VOS_STATUS_E_FAILURE; + } + + /*Advance to SSID*/ + ptr += nOffset; + + memcpy(pnoRequest.aNetworks[i].ssId.ssId, ptr, + pnoRequest.aNetworks[i].ssId.length); + ptr += pnoRequest.aNetworks[i].ssId.length; + + ucParams = sscanf(ptr,"%u %u %hhu %n", + &(pnoRequest.aNetworks[i].authentication), + &(pnoRequest.aNetworks[i].encryption), + &(pnoRequest.aNetworks[i].ucChannelCount), + &nOffset); + + if ( 3 != ucParams ) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, + "Incorrect cmd %s",ptr); + return VOS_STATUS_E_FAILURE; + } + + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "PNO len %d ssid 0x%08lx%08lx%08lx%08lx%08lx%08lx%08lx%08lx" + "auth %d encry %d channel count %d offset %d", + pnoRequest.aNetworks[i].ssId.length, + *((v_U32_t *) &pnoRequest.aNetworks[i].ssId.ssId[0]), + *((v_U32_t *) &pnoRequest.aNetworks[i].ssId.ssId[4]), + *((v_U32_t *) &pnoRequest.aNetworks[i].ssId.ssId[8]), + *((v_U32_t *) &pnoRequest.aNetworks[i].ssId.ssId[12]), + *((v_U32_t *) &pnoRequest.aNetworks[i].ssId.ssId[16]), + *((v_U32_t *) &pnoRequest.aNetworks[i].ssId.ssId[20]), + *((v_U32_t *) &pnoRequest.aNetworks[i].ssId.ssId[24]), + *((v_U32_t *) &pnoRequest.aNetworks[i].ssId.ssId[28]), + pnoRequest.aNetworks[i].authentication, + pnoRequest.aNetworks[i].encryption, + pnoRequest.aNetworks[i].ucChannelCount, + nOffset ); + + /*Advance to channel list*/ + ptr += nOffset; + + if (SIR_PNO_MAX_NETW_CHANNELS < pnoRequest.aNetworks[i].ucChannelCount) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, + "Incorrect number of channels"); + return VOS_STATUS_E_FAILURE; + } + + if ( 0 != pnoRequest.aNetworks[i].ucChannelCount) + { + for ( j = 0; j < pnoRequest.aNetworks[i].ucChannelCount; j++) + { + if (1 != sscanf(ptr,"%hhu %n", + &(pnoRequest.aNetworks[i].aChannels[j]), + &nOffset)) + { VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "PNO network channel input is not valid %s",ptr); + return VOS_STATUS_E_FAILURE; + } + /*Advance to next channel number*/ + ptr += nOffset; + } + } + + if (1 != sscanf(ptr,"%u %n", + &(pnoRequest.aNetworks[i].bcastNetwType), + &nOffset)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "PNO broadcast network type input is not valid %s",ptr); + return VOS_STATUS_E_FAILURE; + } + + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "PNO bcastNetwType %d offset %d", + pnoRequest.aNetworks[i].bcastNetwType, + nOffset ); + + /*Advance to rssi Threshold*/ + ptr += nOffset; + + if (1 != sscanf(ptr,"%d %n", + &(pnoRequest.aNetworks[i].rssiThreshold), + &nOffset)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "PNO rssi threshold input is not valid %s",ptr); + return VOS_STATUS_E_FAILURE; + } + + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "PNO rssi %d offset %d", + pnoRequest.aNetworks[i].rssiThreshold, + nOffset ); + /*Advance to next network*/ + ptr += nOffset; + }/*For ucNetworkCount*/ + + ucParams = sscanf(ptr,"%hhu %n", + &(pnoRequest.scanTimers.ucScanTimersCount), + &nOffset); + + /*Read the scan timers*/ + if (( 1 == ucParams ) && ( pnoRequest.scanTimers.ucScanTimersCount > 0 )) + { + ptr += nOffset; + + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "Scan timer count %d offset %d", + pnoRequest.scanTimers.ucScanTimersCount, + nOffset ); + + if ( SIR_PNO_MAX_SCAN_TIMERS < pnoRequest.scanTimers.ucScanTimersCount ) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "Incorrect cmd - too many scan timers"); + return VOS_STATUS_E_FAILURE; + } + + for ( i = 0; i < pnoRequest.scanTimers.ucScanTimersCount; i++ ) + { + ucParams = sscanf(ptr,"%u %u %n", + &(pnoRequest.scanTimers.aTimerValues[i].uTimerValue), + &( pnoRequest.scanTimers.aTimerValues[i].uTimerRepeat), + &nOffset); + + if (2 != ucParams) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "Incorrect cmd - diff params then expected %d", ucParams); + return VOS_STATUS_E_FAILURE; + } + + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "PNO Timer value %d Timer repeat %d offset %d", + pnoRequest.scanTimers.aTimerValues[i].uTimerValue, + pnoRequest.scanTimers.aTimerValues[i].uTimerRepeat, + nOffset ); + + ptr += nOffset; + } + + } + else + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "No scan timers provided param count %d scan timers %d", + ucParams, pnoRequest.scanTimers.ucScanTimersCount ); + + /*Scan timers defaults to 5 minutes*/ + pnoRequest.scanTimers.ucScanTimersCount = 1; + pnoRequest.scanTimers.aTimerValues[0].uTimerValue = 60; + pnoRequest.scanTimers.aTimerValues[0].uTimerRepeat = 0; + } + + ucParams = sscanf(ptr,"%hhu %n",&(ucMode), &nOffset); + + pnoRequest.modePNO = ucMode; + /*for LA we just expose suspend option*/ + if (( 1 != ucParams )||( ucMode >= SIR_PNO_MODE_MAX )) + { + pnoRequest.modePNO = SIR_PNO_MODE_ON_SUSPEND; + } + + sme_SetPreferredNetworkList(WLAN_HDD_GET_HAL_CTX(pAdapter), &pnoRequest, + pAdapter->sessionId, + found_pref_network_cb, pAdapter); + + return VOS_STATUS_SUCCESS; +}/*iw_set_pno*/ + +VOS_STATUS iw_set_rssi_filter(struct net_device *dev, struct iw_request_info *info, + union iwreq_data *wrqu, char *extra, int nOffset) +{ + hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + v_U8_t rssiThreshold = 0; + v_U8_t nRead; + + nRead = sscanf(extra + nOffset,"%hhu", + &rssiThreshold); + + if ( 1 != nRead ) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, + "Incorrect format"); + return VOS_STATUS_E_FAILURE; + } + + sme_SetRSSIFilter(WLAN_HDD_GET_HAL_CTX(pAdapter), rssiThreshold); + return VOS_STATUS_SUCCESS; +} + + +static int iw_set_pno_priv(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "Set PNO Private"); + + if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:LOGP in Progress. Ignore!!!", __func__); + return -EBUSY; + } + return iw_set_pno(dev,info,wrqu,extra,0); +} +#endif /*FEATURE_WLAN_SCAN_PNO*/ + +//Common function to SetBand +int hdd_setBand_helper(struct net_device *dev, tANI_U8* ptr) +{ + hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(pAdapter); + hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + tANI_U8 band = 0; + eCsrBand currBand = eCSR_BAND_MAX; + + band = ptr[WLAN_HDD_UI_SET_BAND_VALUE_OFFSET] - '0'; /*convert the band value from ascii to integer*/ + + switch(band) + { + case WLAN_HDD_UI_BAND_AUTO: + band = eCSR_BAND_ALL; + break; + case WLAN_HDD_UI_BAND_5_GHZ: + band = eCSR_BAND_5G; + break; + case WLAN_HDD_UI_BAND_2_4_GHZ: + band = eCSR_BAND_24; + break; + default: + band = eCSR_BAND_MAX; + } + + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "%s: change band to %u", + __func__, band); + + if (band == eCSR_BAND_MAX) + { + /* Received change band request with invalid band value */ + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: Invalid band value %u", __func__, band); + return -EIO; + } + + if ( (band == eCSR_BAND_24 && pHddCtx->cfg_ini->nBandCapability==2) || + (band == eCSR_BAND_5G && pHddCtx->cfg_ini->nBandCapability==1) || + (band == eCSR_BAND_ALL && pHddCtx->cfg_ini->nBandCapability!=0)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s: band value %u violate INI settings %u", __func__, + band, pHddCtx->cfg_ini->nBandCapability); + return -EIO; + } + + if (eHAL_STATUS_SUCCESS != sme_GetFreqBand(hHal, &currBand)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s: Failed to get current band config", + __func__); + return -EIO; + } + + if (currBand != band) + { + /* Change band request received. + * Abort pending scan requests, flush the existing scan results, + * and change the band capability + */ + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s: Current band value = %u, new setting %u ", + __func__, currBand, band); + + if (hdd_connIsConnected(WLAN_HDD_GET_STATION_CTX_PTR(pAdapter))) + { + hdd_station_ctx_t *pHddStaCtx = &(pAdapter)->sessionCtx.station; + eHalStatus status = eHAL_STATUS_SUCCESS; + long lrc; + + /* STA already connected on current band, So issue disconnect first, + * then change the band*/ + + hddLog(VOS_TRACE_LEVEL_INFO, + "%s STA connected in band %u, Changing band to %u, Issuing Disconnect", + __func__, csrGetCurrentBand(hHal), band); + + pHddStaCtx->conn_info.connState = eConnectionState_NotConnected; + INIT_COMPLETION(pAdapter->disconnect_comp_var); + + status = sme_RoamDisconnect( WLAN_HDD_GET_HAL_CTX(pAdapter), + pAdapter->sessionId, eCSR_DISCONNECT_REASON_UNSPECIFIED); + + if ( eHAL_STATUS_SUCCESS != status) + { + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s csrRoamDisconnect failure, returned %d \n", + __func__, (int)status ); + return -EINVAL; + } + + lrc = wait_for_completion_interruptible_timeout( + &pAdapter->disconnect_comp_var, + msecs_to_jiffies(WLAN_WAIT_TIME_DISCONNECT)); + + if (lrc <= 0) { + + hddLog(VOS_TRACE_LEVEL_ERROR,"%s: %s while waiting for csrRoamDisconnect ", + __func__, (0 == lrc) ? "Timeout" : "Interrupt"); + + return (0 == lrc) ? -ETIMEDOUT : -EINTR; + } + } + + hdd_abort_mac_scan(pHddCtx, pAdapter->sessionId); + sme_ScanFlushResult(hHal, pAdapter->sessionId); +#if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR) + sme_UpdateBgScanConfigIniChannelList(hHal, (eCsrBand) band); +#endif + if (eHAL_STATUS_SUCCESS != sme_SetFreqBand(hHal, (eCsrBand)band)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s: failed to set the band value to %u ", + __func__, band); + return -EINVAL; + } + wlan_hdd_cfg80211_update_band(pHddCtx->wiphy, (eCsrBand)band); + } + return 0; +} + +static int iw_set_band_config(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + tANI_U8 *ptr = extra; + int ret = 0; + + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,"%s: ", __func__); + + if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:LOGP in Progress. Ignore!!!", __func__); + return -EBUSY; + } + + if (memcmp(ptr, "SETBAND ", 8) == 0) + { + /* Change band request received */ + ret = hdd_setBand_helper(dev, ptr); + return ret; + + } + return 0; +} + +static int iw_set_power_params_priv(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "Set power params Private"); + return iw_set_power_params(dev,info,wrqu,extra,0); +} + + + +/*string based input*/ +VOS_STATUS iw_set_power_params(struct net_device *dev, struct iw_request_info *info, + union iwreq_data *wrqu, char *extra, int nOffset) +{ + hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + tSirSetPowerParamsReq powerRequest; + char *ptr; + v_U8_t ucType; + v_U32_t uTotalSize, uValue; + /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "Power Params data len %d data %s", + wrqu->data.length, + extra); + + if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:LOGP in Progress. Ignore!!!", __func__); + return -EBUSY; + } + + if (wrqu->data.length <= nOffset ) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, "set power param input is not correct"); + return VOS_STATUS_E_FAILURE; + } + + uTotalSize = wrqu->data.length - nOffset; + + /*----------------------------------------------------------------------- + Input is string based and expected to be like this: + + ... + + e.g: + 1 2 2 3 3 0 4 1 5 1 + + e.g. setting just a few: + 1 2 4 1 + + parameter types: + ----------------------------- + 1 - Ignore DTIM + 2 - Listen Interval + 3 - Broadcast Multicas Filter + 4 - Beacon Early Termination + 5 - Beacon Early Termination Interval + -----------------------------------------------------------------------*/ + powerRequest.uIgnoreDTIM = SIR_NOCHANGE_POWER_VALUE; + powerRequest.uListenInterval = SIR_NOCHANGE_POWER_VALUE; + powerRequest.uBcastMcastFilter = SIR_NOCHANGE_POWER_VALUE; + powerRequest.uEnableBET = SIR_NOCHANGE_POWER_VALUE; + powerRequest.uBETInterval = SIR_NOCHANGE_POWER_VALUE; + + ptr = extra + nOffset; + + while ( uTotalSize ) + { + if (1 != sscanf(ptr,"%hhu %n", &(ucType), &nOffset)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "Invalid input parameter type %s",ptr); + return VOS_STATUS_E_FAILURE; + } + + uTotalSize -= nOffset; + + if (!uTotalSize) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "Invalid input parameter type : %d with no value at offset %d", + ucType, nOffset); + return VOS_STATUS_E_FAILURE; + } + + ptr += nOffset; + + if (1 != sscanf(ptr,"%u %n", &(uValue), &nOffset)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "Invalid input parameter value %s",ptr); + return VOS_STATUS_E_FAILURE; + } + + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "Power request parameter %d value %d offset %d", + ucType, uValue, nOffset); + + switch (ucType) + { + case eSIR_IGNORE_DTIM: + powerRequest.uIgnoreDTIM = uValue; + break; + case eSIR_LISTEN_INTERVAL: + powerRequest.uListenInterval = uValue; + break; + case eSIR_MCAST_BCAST_FILTER: + powerRequest.uBcastMcastFilter = uValue; + break; + case eSIR_ENABLE_BET: + powerRequest.uEnableBET = uValue; + break; + case eSIR_BET_INTERVAL: + powerRequest.uBETInterval = uValue; + break; + default: + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "Invalid input parameter type : %d with value: %d at offset %d", + ucType, uValue, nOffset); + return VOS_STATUS_E_FAILURE; + } + + uTotalSize -= nOffset; + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "Power request parameter %d Total size", + uTotalSize); + ptr += nOffset; + /* This is added for dynamic Tele LI enable (0xF1) /disable (0xF0)*/ + if(!(uTotalSize - nOffset) && + (powerRequest.uListenInterval != SIR_NOCHANGE_POWER_VALUE)) + { + uTotalSize = 0; + } + + }/*Go for as long as we have a valid string*/ + + /* put the device into full power*/ + wlan_hdd_enter_bmps(pAdapter, DRIVER_POWER_MODE_ACTIVE); + + /* Apply the power save params*/ + sme_SetPowerParams( WLAN_HDD_GET_HAL_CTX(pAdapter), &powerRequest, FALSE); + + /* put the device back to power save*/ + wlan_hdd_enter_bmps(pAdapter, DRIVER_POWER_MODE_AUTO); + + return VOS_STATUS_SUCCESS; +}/*iw_set_power_params*/ + + +// Define the Wireless Extensions to the Linux Network Device structure +// A number of these routines are NULL (meaning they are not implemented.) + +static const iw_handler we_handler[] = +{ + (iw_handler) iw_set_commit, /* SIOCSIWCOMMIT */ + (iw_handler) iw_get_name, /* SIOCGIWNAME */ + (iw_handler) NULL, /* SIOCSIWNWID */ + (iw_handler) NULL, /* SIOCGIWNWID */ + (iw_handler) iw_set_freq, /* SIOCSIWFREQ */ + (iw_handler) iw_get_freq, /* SIOCGIWFREQ */ + (iw_handler) iw_set_mode, /* SIOCSIWMODE */ + (iw_handler) iw_get_mode, /* SIOCGIWMODE */ + (iw_handler) NULL, /* SIOCSIWSENS */ + (iw_handler) NULL, /* SIOCGIWSENS */ + (iw_handler) NULL, /* SIOCSIWRANGE */ + (iw_handler) iw_get_range, /* SIOCGIWRANGE */ + (iw_handler) iw_set_priv, /* SIOCSIWPRIV */ + (iw_handler) NULL, /* SIOCGIWPRIV */ + (iw_handler) NULL, /* SIOCSIWSTATS */ + (iw_handler) NULL, /* SIOCGIWSTATS */ + iw_handler_set_spy, /* SIOCSIWSPY */ + iw_handler_get_spy, /* SIOCGIWSPY */ + iw_handler_set_thrspy, /* SIOCSIWTHRSPY */ + iw_handler_get_thrspy, /* SIOCGIWTHRSPY */ + (iw_handler) iw_set_ap_address, /* SIOCSIWAP */ + (iw_handler) iw_get_ap_address, /* SIOCGIWAP */ + (iw_handler) iw_set_mlme, /* SIOCSIWMLME */ + (iw_handler) NULL, /* SIOCGIWAPLIST */ + (iw_handler) iw_set_scan, /* SIOCSIWSCAN */ + (iw_handler) iw_get_scan, /* SIOCGIWSCAN */ + (iw_handler) iw_set_essid, /* SIOCSIWESSID */ + (iw_handler) iw_get_essid, /* SIOCGIWESSID */ + (iw_handler) iw_set_nick, /* SIOCSIWNICKN */ + (iw_handler) iw_get_nick, /* SIOCGIWNICKN */ + (iw_handler) NULL, /* -- hole -- */ + (iw_handler) NULL, /* -- hole -- */ + (iw_handler) iw_set_bitrate, /* SIOCSIWRATE */ + (iw_handler) iw_get_bitrate, /* SIOCGIWRATE */ + (iw_handler) iw_set_rts_threshold,/* SIOCSIWRTS */ + (iw_handler) iw_get_rts_threshold,/* SIOCGIWRTS */ + (iw_handler) iw_set_frag_threshold, /* SIOCSIWFRAG */ + (iw_handler) iw_get_frag_threshold, /* SIOCGIWFRAG */ + (iw_handler) iw_set_tx_power, /* SIOCSIWTXPOW */ + (iw_handler) iw_get_tx_power, /* SIOCGIWTXPOW */ + (iw_handler) iw_set_retry, /* SIOCSIWRETRY */ + (iw_handler) iw_get_retry, /* SIOCGIWRETRY */ + (iw_handler) iw_set_encode, /* SIOCSIWENCODE */ + (iw_handler) iw_get_encode, /* SIOCGIWENCODE */ + (iw_handler) iw_set_power_mode, /* SIOCSIWPOWER */ + (iw_handler) iw_get_power_mode, /* SIOCGIWPOWER */ + (iw_handler) NULL, /* -- hole -- */ + (iw_handler) NULL, /* -- hole -- */ + (iw_handler) iw_set_genie, /* SIOCSIWGENIE */ + (iw_handler) iw_get_genie, /* SIOCGIWGENIE */ + (iw_handler) iw_set_auth, /* SIOCSIWAUTH */ + (iw_handler) iw_get_auth, /* SIOCGIWAUTH */ + (iw_handler) iw_set_encodeext, /* SIOCSIWENCODEEXT */ + (iw_handler) iw_get_encodeext, /* SIOCGIWENCODEEXT */ + (iw_handler) NULL, /* SIOCSIWPMKSA */ +}; + +static const iw_handler we_private[] = { + + [WLAN_PRIV_SET_INT_GET_NONE - SIOCIWFIRSTPRIV] = iw_setint_getnone, //set priv ioctl + [WLAN_PRIV_SET_NONE_GET_INT - SIOCIWFIRSTPRIV] = iw_setnone_getint, //get priv ioctl + [WLAN_PRIV_SET_CHAR_GET_NONE - SIOCIWFIRSTPRIV] = iw_setchar_getnone, //get priv ioctl + [WLAN_PRIV_SET_THREE_INT_GET_NONE - SIOCIWFIRSTPRIV] = iw_set_three_ints_getnone, + [WLAN_PRIV_GET_CHAR_SET_NONE - SIOCIWFIRSTPRIV] = iw_get_char_setnone, + [WLAN_PRIV_SET_NONE_GET_NONE - SIOCIWFIRSTPRIV] = iw_setnone_getnone, //action priv ioctl + [WLAN_PRIV_SET_VAR_INT_GET_NONE - SIOCIWFIRSTPRIV] = iw_set_var_ints_getnone, + [WLAN_PRIV_ADD_TSPEC - SIOCIWFIRSTPRIV] = iw_add_tspec, + [WLAN_PRIV_DEL_TSPEC - SIOCIWFIRSTPRIV] = iw_del_tspec, + [WLAN_PRIV_GET_TSPEC - SIOCIWFIRSTPRIV] = iw_get_tspec, +#ifdef FEATURE_OEM_DATA_SUPPORT + [WLAN_PRIV_SET_OEM_DATA_REQ - SIOCIWFIRSTPRIV] = iw_set_oem_data_req, //oem data req Specifc + [WLAN_PRIV_GET_OEM_DATA_RSP - SIOCIWFIRSTPRIV] = iw_get_oem_data_rsp, //oem data req Specifc +#endif + +#ifdef FEATURE_WLAN_WAPI + [WLAN_PRIV_SET_WAPI_MODE - SIOCIWFIRSTPRIV] = iw_qcom_set_wapi_mode, + [WLAN_PRIV_GET_WAPI_MODE - SIOCIWFIRSTPRIV] = iw_qcom_get_wapi_mode, + [WLAN_PRIV_SET_WAPI_ASSOC_INFO - SIOCIWFIRSTPRIV] = iw_qcom_set_wapi_assoc_info, + [WLAN_PRIV_SET_WAPI_KEY - SIOCIWFIRSTPRIV] = iw_qcom_set_wapi_key, + [WLAN_PRIV_SET_WAPI_BKID - SIOCIWFIRSTPRIV] = iw_qcom_set_wapi_bkid, + [WLAN_PRIV_GET_WAPI_BKID - SIOCIWFIRSTPRIV] = iw_qcom_get_wapi_bkid, +#endif /* FEATURE_WLAN_WAPI */ +#ifdef WLAN_FEATURE_VOWIFI_11R + [WLAN_PRIV_SET_FTIES - SIOCIWFIRSTPRIV] = iw_set_fties, +#endif + [WLAN_PRIV_SET_HOST_OFFLOAD - SIOCIWFIRSTPRIV] = iw_set_host_offload, + [WLAN_GET_WLAN_STATISTICS - SIOCIWFIRSTPRIV] = iw_get_statistics, + [WLAN_SET_KEEPALIVE_PARAMS - SIOCIWFIRSTPRIV] = iw_set_keepalive_params +#ifdef WLAN_FEATURE_PACKET_FILTERING + , + [WLAN_SET_PACKET_FILTER_PARAMS - SIOCIWFIRSTPRIV] = iw_set_packet_filter_params +#endif +#ifdef FEATURE_WLAN_SCAN_PNO + , + [WLAN_SET_PNO - SIOCIWFIRSTPRIV] = iw_set_pno_priv +#endif + , + [WLAN_SET_BAND_CONFIG - SIOCIWFIRSTPRIV] = iw_set_band_config, + [WLAN_PRIV_SET_MCBC_FILTER - SIOCIWFIRSTPRIV] = iw_set_dynamic_mcbc_filter, + [WLAN_PRIV_CLEAR_MCBC_FILTER - SIOCIWFIRSTPRIV] = iw_clear_dynamic_mcbc_filter, + [WLAN_SET_POWER_PARAMS - SIOCIWFIRSTPRIV] = iw_set_power_params_priv, +#ifdef FEATURE_OEM_DATA_SUPPORT +#ifdef QCA_WIFI_2_0 + [WLAN_PRIV_GET_OEM_DATA_CAP - SIOCIWFIRSTPRIV] = iw_get_oem_data_cap, +#endif +#endif + [WLAN_GET_LINK_SPEED - SIOCIWFIRSTPRIV] = iw_get_linkspeed, +}; + +/*Maximum command length can be only 15 */ +static const struct iw_priv_args we_private_args[] = { + + { WE_ENABLE_STRICT_FCC_REG, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, + "setStrictFCCreg" }, + + /* handlers for main ioctl */ + { WLAN_PRIV_SET_INT_GET_NONE, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, + "" }, + + /* handlers for sub-ioctl */ + { WE_SET_11D_STATE, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, + "set11Dstate" }, + + { WE_WOWL, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, + "wowl" }, + + { WE_SET_POWER, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, + "setPower" }, + + { WE_SET_MAX_ASSOC, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, + "setMaxAssoc" }, + + { WE_SET_SAP_AUTO_CHANNEL_SELECTION, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, + "setAutoChannel" }, + + { WE_SET_DATA_INACTIVITY_TO, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, + "inactivityTO" }, + + { WE_SET_MAX_TX_POWER, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, + "setMaxTxPower" }, + + { WE_SET_MAX_TX_POWER_2_4, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, + "setTxMaxPower2G" }, + + { WE_SET_MAX_TX_POWER_5_0, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, + "setTxMaxPower5G" }, + + /* SAP has TxMax whereas STA has MaxTx, adding TxMax for STA + * as well to keep same syntax as in SAP. Now onwards, STA + * will support both */ + { WE_SET_MAX_TX_POWER, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, + "setTxMaxPower" }, + + /* set Higher DTIM Transition (DTIM1 to DTIM3) + * 1 = enable and 0 = disable */ + { + WE_SET_HIGHER_DTIM_TRANSITION, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, + "setHDtimTransn" }, + + { WE_SET_TM_LEVEL, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, + "setTmLevel" }, + +#ifdef QCA_WIFI_2_0 + { WE_SET_PHYMODE, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, + "setphymode" }, + + { WE_SET_NSS, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, + "nss" }, + + { WE_SET_LDPC, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, + "ldpc" }, + + { WE_SET_TX_STBC, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, + "tx_stbc" }, + + { WE_SET_RX_STBC, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, + "rx_stbc" }, + + { WE_SET_SHORT_GI, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, + "shortgi" }, + + { WE_SET_RTSCTS, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, + "enablertscts" }, + + { WE_SET_CHWIDTH, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, + "chwidth" }, + + { WE_SET_ANI_EN_DIS, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, + "anienable" }, + + { WE_SET_ANI_POLL_PERIOD, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, + "aniplen" }, + + { WE_SET_ANI_LISTEN_PERIOD, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, + "anilislen" }, + + { WE_SET_ANI_OFDM_LEVEL, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, + "aniofdmlvl" }, + + { WE_SET_ANI_CCK_LEVEL, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, + "aniccklvl" }, + + { WE_SET_DYNAMIC_BW, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, + "cwmenable" }, + + { WE_SET_TX_CHAINMASK, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, + "txchainmask" }, + + { WE_SET_RX_CHAINMASK, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, + "rxchainmask" }, + + { WE_SET_11N_RATE, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, + "set11NRates" }, + + { WE_SET_VHT_RATE, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, + "set11ACRates" }, + + { WE_SET_AMPDU, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, + "ampdu" }, + + { WE_SET_AMSDU, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, + "amsdu" }, + + { WE_SET_TXPOW_2G, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, + "txpow2g" }, + + { WE_SET_TXPOW_5G, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, + "txpow5g" }, + + { WE_SET_POWER_GATING, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, + "pwrgating" }, + + /* Sub-cmds DBGLOG specific commands */ + { WE_DBGLOG_LOG_LEVEL , + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, + "dl_loglevel" }, + + { WE_DBGLOG_VAP_ENABLE , + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, + "dl_vapon" }, + + { WE_DBGLOG_VAP_DISABLE , + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, + "dl_vapoff" }, + + { WE_DBGLOG_MODULE_ENABLE , + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, + "dl_modon" }, + + { WE_DBGLOG_MODULE_DISABLE, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, + "dl_modoff" }, + + { WE_DBGLOG_MOD_LOG_LEVEL, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, + "dl_mod_loglevel" }, + + { WE_DBGLOG_TYPE, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, + "dl_type" }, + { WE_DBGLOG_REPORT_ENABLE, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, + "dl_report" }, + + { WE_SET_TXRX_FWSTATS, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, + "txrx_fw_stats" }, + + { WE_TXRX_FWSTATS_RESET, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, + "txrx_fw_st_rst" }, + + { WE_PPS_PAID_MATCH, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, "paid_match" }, + + + { WE_PPS_GID_MATCH, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, "gid_match" }, + + + { WE_PPS_EARLY_TIM_CLEAR, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, "tim_clear" }, + + + { WE_PPS_EARLY_DTIM_CLEAR, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, "dtim_clear" }, + + + { WE_PPS_EOF_PAD_DELIM, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, "eof_delim" }, + + + { WE_PPS_MACADDR_MISMATCH, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, "mac_match" }, + + + { WE_PPS_DELIM_CRC_FAIL, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, "delim_fail" }, + + + { WE_PPS_GID_NSTS_ZERO, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, "nsts_zero" }, + + + { WE_PPS_RSSI_CHECK, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, "rssi_chk" }, +#endif + + { WLAN_PRIV_SET_NONE_GET_INT, + 0, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + "" }, + + /* handlers for sub-ioctl */ + { WE_GET_11D_STATE, + 0, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + "get11Dstate" }, + + { WE_IBSS_STATUS, + 0, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + "getAdhocStatus" }, + + { WE_PMC_STATE, + 0, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + "pmcState" }, + + { WE_GET_WLAN_DBG, + 0, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + "getwlandbg" }, + + { WE_MODULE_DOWN_IND, + 0, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + "moduleDownInd" }, + + { WE_GET_MAX_ASSOC, + 0, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + "getMaxAssoc" }, + + { WE_GET_WDI_DBG, + 0, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + "getwdidbg" }, + + { WE_GET_SAP_AUTO_CHANNEL_SELECTION, + 0, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + "getAutoChannel" }, + + { WE_GET_CONCURRENCY_MODE, + 0, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + "getconcurrency" }, + +#ifdef QCA_WIFI_2_0 + { WE_GET_NSS, + 0, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + "get_nss" }, + + { WE_GET_LDPC, + 0, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + "get_ldpc" }, + + { WE_GET_TX_STBC, + 0, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + "get_tx_stbc" }, + + { WE_GET_RX_STBC, + 0, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + "get_rx_stbc" }, + + { WE_GET_SHORT_GI, + 0, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + "get_shortgi" }, + + { WE_GET_RTSCTS, + 0, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + "get_rtscts" }, + + { WE_GET_CHWIDTH, + 0, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + "get_chwidth" }, + + { WE_GET_ANI_EN_DIS, + 0, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + "get_anienable" }, + + { WE_GET_ANI_POLL_PERIOD, + 0, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + "get_aniplen" }, + + { WE_GET_ANI_LISTEN_PERIOD, + 0, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + "get_anilislen" }, + + { WE_GET_ANI_OFDM_LEVEL, + 0, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + "get_aniofdmlvl" }, + + { WE_GET_ANI_CCK_LEVEL, + 0, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + "get_aniccklvl" }, + + { WE_GET_DYNAMIC_BW, + 0, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + "get_cwmenable" }, + + { WE_GET_TX_CHAINMASK, + 0, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + "get_txchainmask" }, + + { WE_GET_RX_CHAINMASK, + 0, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + "get_rxchainmask" }, + + { WE_GET_11N_RATE, + 0, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + "get_11nrate" }, + + { WE_GET_AMPDU, + 0, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + "get_ampdu" }, + + { WE_GET_AMSDU, + 0, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + "get_amsdu" }, + + { WE_GET_TXPOW_2G, + 0, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + "get_txpow2g" }, + + { WE_GET_TXPOW_5G, + 0, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + "get_txpow5g" }, + + { WE_GET_POWER_GATING, + 0, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + "get_pwrgating" }, + + { WE_GET_PPS_PAID_MATCH, + 0, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + "get_paid_match"}, + + + { WE_GET_PPS_GID_MATCH, + 0, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + "get_gid_match"}, + + + { WE_GET_PPS_EARLY_TIM_CLEAR, + 0, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + "get_tim_clear"}, + + + { WE_GET_PPS_EARLY_DTIM_CLEAR, + 0, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + "get_dtim_clear"}, + + + { WE_GET_PPS_EOF_PAD_DELIM, + 0, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + "get_eof_delim"}, + + + { WE_GET_PPS_MACADDR_MISMATCH, + 0, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + "get_mac_match"}, + + + { WE_GET_PPS_DELIM_CRC_FAIL, + 0, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + "get_delim_fail"}, + + + { WE_GET_PPS_GID_NSTS_ZERO, + 0, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + "get_nsts_zero"}, + + + { WE_GET_PPS_RSSI_CHECK, + 0, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + "get_rssi_chk"}, +#endif + + /* handlers for main ioctl */ + { WLAN_PRIV_SET_CHAR_GET_NONE, + IW_PRIV_TYPE_CHAR| 512, + 0, + "" }, + + /* handlers for sub-ioctl */ + { WE_WOWL_ADD_PTRN, + IW_PRIV_TYPE_CHAR| 512, + 0, + "wowlAddPtrn" }, + + { WE_WOWL_DEL_PTRN, + IW_PRIV_TYPE_CHAR| 512, + 0, + "wowlDelPtrn" }, + +#if defined WLAN_FEATURE_VOWIFI + /* handlers for sub-ioctl */ + { WE_NEIGHBOR_REPORT_REQUEST, + IW_PRIV_TYPE_CHAR | 512, + 0, + "neighbor" }, +#endif + { WE_SET_AP_WPS_IE, + IW_PRIV_TYPE_CHAR| 512, + 0, + "set_ap_wps_ie" }, + + { WE_SET_CONFIG, + IW_PRIV_TYPE_CHAR| 512, + 0, + "setConfig" }, + + /* handlers for main ioctl */ + { WLAN_PRIV_SET_THREE_INT_GET_NONE, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 3, + 0, + "" }, + + /* handlers for sub-ioctl */ + { WE_SET_WLAN_DBG, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 3, + 0, + "setwlandbg" }, + + { WE_SET_WDI_DBG, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 3, + 0, + "setwdidbg" }, + + { WE_SET_SAP_CHANNELS, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 3, + 0, + "setsapchannels" }, + + /* handlers for main ioctl */ + { WLAN_PRIV_GET_CHAR_SET_NONE, + 0, + IW_PRIV_TYPE_CHAR| WE_MAX_STR_LEN, + "" }, + + /* handlers for sub-ioctl */ + { WE_WLAN_VERSION, + 0, + IW_PRIV_TYPE_CHAR| WE_MAX_STR_LEN, + "version" }, + { WE_GET_STATS, + 0, + IW_PRIV_TYPE_CHAR| WE_MAX_STR_LEN, + "getStats" }, + { WE_GET_STATES, + 0, + IW_PRIV_TYPE_CHAR| WE_MAX_STR_LEN, + "getHostStates" }, + { WE_GET_CFG, + 0, + IW_PRIV_TYPE_CHAR| WE_MAX_STR_LEN, + "getConfig" }, +#ifdef WLAN_FEATURE_11AC + { WE_GET_RSSI, + 0, + IW_PRIV_TYPE_CHAR| WE_MAX_STR_LEN, + "getRSSI" }, +#endif +#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR) + { WE_GET_ROAM_RSSI, + 0, + IW_PRIV_TYPE_CHAR| WE_MAX_STR_LEN, + "getRoamRSSI" }, +#endif + { WE_GET_WMM_STATUS, + 0, + IW_PRIV_TYPE_CHAR| WE_MAX_STR_LEN, + "getWmmStatus" }, + { + WE_GET_CHANNEL_LIST, + 0, + IW_PRIV_TYPE_CHAR| WE_MAX_STR_LEN, + "getChannelList" }, +#ifdef FEATURE_WLAN_TDLS + { + WE_GET_TDLS_PEERS, + 0, + IW_PRIV_TYPE_CHAR| WE_MAX_STR_LEN, + "getTdlsPeers" }, +#endif +#ifdef WLAN_FEATURE_11W + { + WE_GET_11W_INFO, + 0, + IW_PRIV_TYPE_CHAR| WE_MAX_STR_LEN, + "getPMFInfo" }, +#endif +#ifdef FEATURE_CESIUM_PROPRIETARY + { + WE_GET_IBSS_STA_INFO, + 0, + IW_PRIV_TYPE_CHAR| WE_MAX_STR_LEN, + "getIbssSTAs" }, +#endif +#ifdef QCA_WIFI_2_0 + { WE_GET_PHYMODE, + 0, + IW_PRIV_TYPE_CHAR| WE_MAX_STR_LEN, + "getphymode" }, +#endif + + /* handlers for main ioctl */ + { WLAN_PRIV_SET_NONE_GET_NONE, + 0, + 0, + "" }, + + /* handlers for sub-ioctl */ + { WE_CLEAR_STATS, + 0, + 0, + "clearStats" }, + { WE_INIT_AP, + 0, + 0, + "initAP" }, +#ifdef FEATURE_CESIUM_PROPRIETARY + { + WE_IBSS_GET_PEER_INFO_ALL, + 0, + 0, + "ibssPeerInfoAll" }, +#endif + { WE_STOP_AP, + 0, + 0, + "exitAP" }, + { WE_ENABLE_AMP, + 0, + 0, + "enableAMP" }, + { WE_DISABLE_AMP, + 0, + 0, + "disableAMP" }, + { WE_ENABLE_DXE_STALL_DETECT, + 0, + 0, + "dxeStallDetect" }, + { WE_DISPLAY_DXE_SNAP_SHOT, + 0, + 0, + "dxeSnapshot" }, + { WE_DISPLAY_DATAPATH_SNAP_SHOT, + 0, + 0, + "dataSnapshot"}, + { + WE_SET_REASSOC_TRIGGER, + 0, + 0, + "reassoc" }, +#ifdef QCA_WIFI_2_0 + { WE_DUMP_AGC_START, + 0, + 0, + "dump_agc_start" }, + + { WE_DUMP_AGC, + 0, + 0, + "dump_agc" }, + + { WE_DUMP_CHANINFO_START, + 0, + 0, + "dump_chninfo_en" }, + + { WE_DUMP_CHANINFO, + 0, + 0, + "dump_chninfo" }, + + { WE_DUMP_WATCHDOG, + 0, + 0, + "dump_watchdog" }, +#ifdef DEBUG + { WE_SET_FW_CRASH_INJECT, + 0, + 0, + "crash_inject" }, +#endif +#endif + /* handlers for main ioctl */ + { WLAN_PRIV_SET_VAR_INT_GET_NONE, + IW_PRIV_TYPE_INT | MAX_VAR_ARGS, + 0, + "" }, + + /* handlers for sub-ioctl */ + { WE_LOG_DUMP_CMD, + IW_PRIV_TYPE_INT | MAX_VAR_ARGS, + 0, + "dump" }, +#ifdef FEATURE_CESIUM_PROPRIETARY + { WE_IBSS_GET_PEER_INFO, + IW_PRIV_TYPE_INT | MAX_VAR_ARGS, + 0, + "ibssPeerInfo" }, +#endif + /* handlers for sub ioctl */ + { + WE_MCC_CONFIG_CREDENTIAL, + IW_PRIV_TYPE_INT | MAX_VAR_ARGS, + 0, + "setMccCrdnl" }, + + /* handlers for sub ioctl */ + { + WE_MCC_CONFIG_PARAMS, + IW_PRIV_TYPE_INT | MAX_VAR_ARGS, + 0, + "setMccConfig" }, + +#ifdef FEATURE_WLAN_TDLS + /* handlers for sub ioctl */ + { + WE_TDLS_CONFIG_PARAMS, + IW_PRIV_TYPE_INT | MAX_VAR_ARGS, + 0, + "setTdlsConfig" }, +#endif + + /* handlers for main ioctl */ + { WLAN_PRIV_ADD_TSPEC, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | HDD_WLAN_WMM_PARAM_COUNT, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + "addTspec" }, + + /* handlers for main ioctl */ + { WLAN_PRIV_DEL_TSPEC, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + "delTspec" }, + + /* handlers for main ioctl */ + { WLAN_PRIV_GET_TSPEC, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + "getTspec" }, + +#ifdef FEATURE_OEM_DATA_SUPPORT + /* handlers for main ioctl - OEM DATA */ + { + WLAN_PRIV_SET_OEM_DATA_REQ, + IW_PRIV_TYPE_BYTE | sizeof(struct iw_oem_data_req) | IW_PRIV_SIZE_FIXED, + 0, + "set_oem_data_req" }, + + /* handlers for main ioctl - OEM DATA */ + { + WLAN_PRIV_GET_OEM_DATA_RSP, + 0, + IW_PRIV_TYPE_BYTE | MAX_OEM_DATA_RSP_LEN, + "get_oem_data_rsp" }, +#endif + +#ifdef FEATURE_WLAN_WAPI + /* handlers for main ioctl SET_WAPI_MODE */ + { WLAN_PRIV_SET_WAPI_MODE, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, + "SET_WAPI_MODE" }, + + /* handlers for main ioctl GET_WAPI_MODE */ + { WLAN_PRIV_GET_WAPI_MODE, + 0, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + "GET_WAPI_MODE" }, + + /* handlers for main ioctl SET_ASSOC_INFO */ + { WLAN_PRIV_SET_WAPI_ASSOC_INFO, + IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | 400, + 0, + "SET_WAPI_ASSOC" }, + + /* handlers for main ioctl SET_WAPI_KEY */ + { WLAN_PRIV_SET_WAPI_KEY, + IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | 71, + 0, + "SET_WAPI_KEY" }, + + /* handlers for main ioctl SET_WAPI_BKID */ + { WLAN_PRIV_SET_WAPI_BKID, + IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | 24, + 0, + "SET_WAPI_BKID" }, + + /* handlers for main ioctl GET_WAPI_BKID */ + { WLAN_PRIV_GET_WAPI_BKID, + 0, + IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | 24, + "GET_WAPI_BKID" }, +#endif /* FEATURE_WLAN_WAPI */ + + /* handlers for main ioctl - host offload */ + { + WLAN_PRIV_SET_HOST_OFFLOAD, + IW_PRIV_TYPE_BYTE | sizeof(tHostOffloadRequest), + 0, + "setHostOffload" }, + + { + WLAN_GET_WLAN_STATISTICS, + 0, + IW_PRIV_TYPE_BYTE | WE_MAX_STR_LEN, + "getWlanStats" }, + + { + WLAN_SET_KEEPALIVE_PARAMS, + IW_PRIV_TYPE_BYTE | WE_MAX_STR_LEN, + 0, + "setKeepAlive" }, +#ifdef WLAN_FEATURE_PACKET_FILTERING + { + WLAN_SET_PACKET_FILTER_PARAMS, + IW_PRIV_TYPE_BYTE | sizeof(tPacketFilterCfg), + 0, + "setPktFilter" }, +#endif +#ifdef FEATURE_WLAN_SCAN_PNO + { + WLAN_SET_PNO, + IW_PRIV_TYPE_CHAR| WE_MAX_STR_LEN, + 0, + "setpno" }, +#endif + { + WLAN_SET_BAND_CONFIG, + IW_PRIV_TYPE_CHAR| WE_MAX_STR_LEN, + 0, + "SETBAND" }, + /* handlers for dynamic MC BC ioctl */ + { + WLAN_PRIV_SET_MCBC_FILTER, + IW_PRIV_TYPE_BYTE | sizeof(tRcvFltMcAddrList), + 0, + "setMCBCFilter" }, + { + WLAN_PRIV_CLEAR_MCBC_FILTER, + 0, + 0, + "clearMCBCFilter" }, + { + WLAN_SET_POWER_PARAMS, + IW_PRIV_TYPE_CHAR| WE_MAX_STR_LEN, + 0, + "setpowerparams" }, +#ifdef FEATURE_OEM_DATA_SUPPORT +#ifdef QCA_WIFI_2_0 + { + WLAN_PRIV_GET_OEM_DATA_CAP, + 0, + IW_PRIV_TYPE_BYTE | sizeof(struct iw_oem_data_cap), + "getOemDataCap" }, +#endif +#endif + { + WLAN_GET_LINK_SPEED, + IW_PRIV_TYPE_CHAR | 18, + IW_PRIV_TYPE_CHAR | 5, "getLinkSpeed" }, +}; + + + +const struct iw_handler_def we_handler_def = { + .num_standard = sizeof(we_handler) / sizeof(we_handler[0]), + .num_private = sizeof(we_private) / sizeof(we_private[0]), + .num_private_args = sizeof(we_private_args) / sizeof(we_private_args[0]), + + .standard = (iw_handler *)we_handler, + .private = (iw_handler *)we_private, + .private_args = we_private_args, + .get_wireless_stats = get_wireless_stats, +}; + +int hdd_validate_mcc_config(hdd_adapter_t *pAdapter, v_UINT_t staId, v_UINT_t arg1, v_UINT_t arg2, v_UINT_t arg3) +{ + v_U32_t cmd = 288; //Command to RIVA + hdd_context_t *pHddCtx = NULL; + tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(pAdapter); + pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + /* + *configMccParam : specify the bit which needs to be modified + *allowed to update based on wlan_qcom_cfg.ini + * configuration + * Bit 0 : SCHEDULE_TIME_SLICE MIN : 5 MAX : 20 + * Bit 1 : MAX_NULL_SEND_TIME MIN : 1 MAX : 10 + * Bit 2 : TX_EARLY_STOP_TIME MIN : 1 MAX : 10 + * Bit 3 : RX_DRAIN_TIME MIN : 1 MAX : 10 + * Bit 4 : CHANNEL_SWITCH_TIME MIN : 1 MAX : 20 + * Bit 5 : MIN_CHANNEL_TIME MIN : 5 MAX : 20 + * Bit 6 : PARK_BEFORE_TBTT MIN : 1 MAX : 5 + * Bit 7 : MIN_AFTER_DTIM MIN : 5 MAX : 15 + * Bit 8 : TOO_CLOSE_MARGIN MIN : 1 MAX : 3 + * Bit 9 : Reserved + */ + switch (arg1) + { + //Update MCC SCHEDULE_TIME_SLICE parameter + case MCC_SCHEDULE_TIME_SLICE_CFG_PARAM : + if( pHddCtx->cfg_ini->configMccParam & 0x0001) + { + if((arg2 >= 5) && (arg2 <= 20)) + { + logPrintf(hHal, cmd, staId, arg1, arg2, arg3); + } + else + { + hddLog(LOGE, "%s : Enter a valid MCC configuration value\n",__FUNCTION__); + return 0; + } + } + break; + + //Update MCC MAX_NULL_SEND_TIME parameter + case MCC_MAX_NULL_SEND_TIME_CFG_PARAM : + if( pHddCtx->cfg_ini->configMccParam & 0x0002) + { + if((arg2 >= 1) && (arg2 <= 10)) + { + logPrintf(hHal, cmd, staId, arg1, arg2, arg3); + } + else + { + hddLog(LOGE, "%s : Enter a valid MCC configuration value\n",__FUNCTION__); + return 0; + } + } + break; + + //Update MCC TX_EARLY_STOP_TIME parameter + case MCC_TX_EARLY_STOP_TIME_CFG_PARAM : + if( pHddCtx->cfg_ini->configMccParam & 0x0004) + { + if((arg2 >= 1) && (arg2 <= 10)) + { + logPrintf(hHal, cmd, staId, arg1, arg2, arg3); + } + else + { + hddLog(LOGE, "%s : Enter a valid MCC configuration value\n",__FUNCTION__); + return 0; + } + } + break; + + //Update MCC RX_DRAIN_TIME parameter + case MCC_RX_DRAIN_TIME_CFG_PARAM : + if( pHddCtx->cfg_ini->configMccParam & 0x0008) + { + if((arg2 >= 1) && (arg2 <= 10)) + { + logPrintf(hHal, cmd, staId, arg1, arg2, arg3); + } + else + { + hddLog(LOGE, "%s : Enter a valid MCC configuration value\n",__FUNCTION__); + return 0; + } + } + break; + + //Update MCC CHANNEL_SWITCH_TIME parameter + case MCC_CHANNEL_SWITCH_TIME_CFG_PARAM : + if( pHddCtx->cfg_ini->configMccParam & 0x0010) + { + if((arg2 >= 1) && (arg2 <= 20)) + { + logPrintf(hHal, cmd, staId, arg1, arg2, arg3); + } + else + { + hddLog(LOGE, "%s : Enter a valid MCC configuration value\n",__FUNCTION__); + return 0; + } + } + break; + + //Update MCC MIN_CHANNEL_TIME parameter + case MCC_MIN_CHANNEL_TIME_CFG_PARAM : + if( pHddCtx->cfg_ini->configMccParam & 0x0020) + { + if((arg2 >= 5) && (arg2 <= 20)) + { + logPrintf(hHal, cmd, staId, arg1, arg2, arg3); + } + else + { + hddLog(LOGE, "%s : Enter a valid MCC configuration value\n",__FUNCTION__); + return 0; + } + } + break; + + //Update MCC PARK_BEFORE_TBTT parameter + case MCC_PARK_BEFORE_TBTT_CFG_PARAM : + if( pHddCtx->cfg_ini->configMccParam & 0x0040) + { + if((arg2 >= 1) && (arg2 <= 5)) + { + logPrintf(hHal, cmd, staId, arg1, arg2, arg3); + } + else + { + hddLog(LOGE, "%s : Enter a valid MCC configuration value\n",__FUNCTION__); + return 0; + } + } + break; + + //Update MCC MIN_AFTER_DTIM parameter + case MCC_MIN_AFTER_DTIM_CFG_PARAM : + if( pHddCtx->cfg_ini->configMccParam & 0x0080) + { + if((arg2 >= 5) && (arg2 <= 15)) + { + logPrintf(hHal, cmd, staId, arg1, arg2, arg3); + } + else + { + hddLog(LOGE, "%s : Enter a valid MCC configuration value\n",__FUNCTION__); + return 0; + } + } + break; + + //Update MCC TOO_CLOSE_MARGIN parameter + case MCC_TOO_CLOSE_MARGIN_CFG_PARAM : + if( pHddCtx->cfg_ini->configMccParam & 0x0100) + { + if((arg2 >= 1) && (arg2 <= 3)) + { + logPrintf(hHal, cmd, staId, arg1, arg2, arg3); + } + else + { + hddLog(LOGE, "%s : Enter a valid MCC configuration value\n",__FUNCTION__); + return 0; + } + } + break; + + default : + hddLog(LOGE, "%s : Uknown / Not allowed to configure parameter : %d\n", + __FUNCTION__,arg1); + break; + } + return 0; +} + +int hdd_set_wext(hdd_adapter_t *pAdapter) +{ + hdd_wext_state_t *pwextBuf; + hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); + + pwextBuf = WLAN_HDD_GET_WEXT_STATE_PTR(pAdapter); + + // Now configure the roaming profile links. To SSID and bssid. + pwextBuf->roamProfile.SSIDs.numOfSSIDs = 0; + pwextBuf->roamProfile.SSIDs.SSIDList = &pHddStaCtx->conn_info.SSID; + + pwextBuf->roamProfile.BSSIDs.numOfBSSIDs = 0; + pwextBuf->roamProfile.BSSIDs.bssid = &pHddStaCtx->conn_info.bssId; + + /*Set the numOfChannels to zero to scan all the channels*/ + pwextBuf->roamProfile.ChannelInfo.numOfChannels = 0; + pwextBuf->roamProfile.ChannelInfo.ChannelList = NULL; + + /* Default is no encryption */ + pwextBuf->roamProfile.EncryptionType.numEntries = 1; + pwextBuf->roamProfile.EncryptionType.encryptionType[0] = eCSR_ENCRYPT_TYPE_NONE; + + pwextBuf->roamProfile.mcEncryptionType.numEntries = 1; + pwextBuf->roamProfile.mcEncryptionType.encryptionType[0] = eCSR_ENCRYPT_TYPE_NONE; + + pwextBuf->roamProfile.BSSType = eCSR_BSS_TYPE_INFRASTRUCTURE; + + /* Default is no authentication */ + pwextBuf->roamProfile.AuthType.numEntries = 1; + pwextBuf->roamProfile.AuthType.authType[0] = eCSR_AUTH_TYPE_OPEN_SYSTEM; + + pwextBuf->roamProfile.phyMode = eCSR_DOT11_MODE_TAURUS; + pwextBuf->wpaVersion = IW_AUTH_WPA_VERSION_DISABLED; + + /*Set the default scan mode*/ + pAdapter->scan_info.scan_mode = eSIR_ACTIVE_SCAN; + + hdd_clearRoamProfileIe(pAdapter); + + return VOS_STATUS_SUCCESS; + + } + +int hdd_register_wext(struct net_device *dev) + { + hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + hdd_wext_state_t *pwextBuf = WLAN_HDD_GET_WEXT_STATE_PTR(pAdapter); + VOS_STATUS status; + + ENTER(); + + // Zero the memory. This zeros the profile structure. + memset(pwextBuf, 0,sizeof(hdd_wext_state_t)); + + init_completion(&(WLAN_HDD_GET_WEXT_STATE_PTR(pAdapter))->completion_var); + + + status = hdd_set_wext(pAdapter); + + if(!VOS_IS_STATUS_SUCCESS(status)) { + + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, ("ERROR: hdd_set_wext failed!!\n")); + return eHAL_STATUS_FAILURE; + } + + if (!VOS_IS_STATUS_SUCCESS(vos_event_init(&pwextBuf->vosevent))) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, ("ERROR: HDD vos event init failed!!\n")); + return eHAL_STATUS_FAILURE; + } + + if (!VOS_IS_STATUS_SUCCESS(vos_event_init(&pwextBuf->scanevent))) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, ("ERROR: HDD scan event init failed!!\n")); + return eHAL_STATUS_FAILURE; + } + + // Register as a wireless device + dev->wireless_handlers = (struct iw_handler_def *)&we_handler_def; + + EXIT(); + return 0; +} + +int hdd_UnregisterWext(struct net_device *dev) +{ +#if 0 + hdd_wext_state_t *wextBuf; + hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + + ENTER(); + // Set up the pointer to the Wireless Extensions state structure + wextBuf = pAdapter->pWextState; + + // De-allocate the Wireless Extensions state structure + kfree(wextBuf); + + // Clear out the pointer to the Wireless Extensions state structure + pAdapter->pWextState = NULL; + + EXIT(); +#endif + dev->wireless_handlers = NULL; + return 0; +} + + diff --git a/CORE/HDD/src/wlan_hdd_assoc.c b/CORE/HDD/src/wlan_hdd_assoc.c index 433387ceb799..e40699ecb8ff 100644 --- a/CORE/HDD/src/wlan_hdd_assoc.c +++ b/CORE/HDD/src/wlan_hdd_assoc.c @@ -107,8 +107,6 @@ v_U8_t ccpRSNOui07[ HDD_RSN_OUI_SIZE ] = { 0x00, 0x0F, 0xAC, 0x06 }; // RSN-PSK- #define BEACON_FRAME_IES_OFFSET 12 -void hdd_ResetCountryCodeAfterDisAssoc(hdd_adapter_t *pAdapter); - #ifdef WLAN_FEATURE_11W void hdd_indicateUnprotMgmtFrame(hdd_adapter_t *pAdapter, tANI_U32 nFrameLength, @@ -116,6 +114,19 @@ void hdd_indicateUnprotMgmtFrame(hdd_adapter_t *pAdapter, tANI_U8 frameType ); #endif +#if defined(FEATURE_WLAN_CCX) && defined(FEATURE_WLAN_CCX_UPLOAD) +static void hdd_indicateTsmIe(hdd_adapter_t *pAdapter, tANI_U8 tid, + tANI_U8 state, + tANI_U16 measInterval ); +static void hdd_indicateCckmPreAuth(hdd_adapter_t *pAdapter, + tCsrRoamInfo *pRoamInfo); +static void hdd_indicateCcxAdjApRepInd(hdd_adapter_t *pAdapter, + tCsrRoamInfo *pRoamInfo); +static void hdd_indicateCcxBcnReportInd(const hdd_adapter_t *pAdapter, + const tCsrRoamInfo *pRoamInfo); + +#endif /* FEATURE_WLAN_CCX && FEATURE_WLAN_CCX_UPLOAD */ + static eHalStatus hdd_RoamSetKeyCompleteHandler( hdd_adapter_t *pAdapter, tCsrRoamInfo *pRoamInfo, tANI_U32 roamId, @@ -143,7 +154,8 @@ static inline v_BOOL_t hdd_connGetConnectionState( hdd_station_ctx_t *pHddStaCtx connState = pHddStaCtx->conn_info.connState; // Set the fConnected return variable based on the Connected State. if ( eConnectionState_Associated == connState || - eConnectionState_IbssConnected == connState ) + eConnectionState_IbssConnected == connState || + eConnectionState_IbssDisconnected == connState) { fConnected = VOS_TRUE; } @@ -429,8 +441,9 @@ void hdd_SendFTEvent(hdd_adapter_t *pAdapter) ftEvent.ies = (u8 *)(ftIe + SIR_MAC_ADDR_LENGTH); ftEvent.ies_len = auth_resp_len - SIR_MAC_ADDR_LENGTH; - hddLog(LOG1, "%s ftEvent.ies_len %d",__FUNCTION__, ftEvent.ies_len); - hddLog(LOG1, "%s ftEvent.ric_ies_len %d",__FUNCTION__, ftEvent.ric_ies_len ); + hddLog(LOG1, "%s ftEvent.ies_len %zu", __FUNCTION__, ftEvent.ies_len); + hddLog(LOG1, "%s ftEvent.ric_ies_len %zu", + __FUNCTION__, ftEvent.ric_ies_len ); hddLog(LOG1, "%s ftEvent.target_ap %2x-%2x-%2x-%2x-%2x-%2x ", __FUNCTION__, ftEvent.target_ap[0], ftEvent.target_ap[1], ftEvent.target_ap[2], ftEvent.target_ap[3], ftEvent.target_ap[4], @@ -703,6 +716,7 @@ void hdd_connRemoveConnectInfo( hdd_station_ctx_t *pHddStaCtx ) pHddStaCtx->conn_info.ucEncryptionType = eCSR_ENCRYPT_TYPE_NONE; vos_mem_zero( &pHddStaCtx->conn_info.Keys, sizeof( tCsrKeys ) ); + vos_mem_zero( &pHddStaCtx->ibss_enc_key, sizeof(tCsrRoamSetKey) ); // Set not-connected state pHddStaCtx->conn_info.connDot11DesiredBssType = eCSR_BSS_TYPE_ANY; @@ -714,7 +728,28 @@ void hdd_connRemoveConnectInfo( hdd_station_ctx_t *pHddStaCtx ) static VOS_STATUS hdd_roamDeregisterSTA( hdd_adapter_t *pAdapter, tANI_U8 staId ) { VOS_STATUS vosStatus; - hdd_disconnect_tx_rx(pAdapter); + hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); + + if (WLAN_HDD_IBSS != pAdapter->device_mode) + { + hdd_disconnect_tx_rx(pAdapter); + } + else + { + // Need to cleanup all queues only if the last peer leaves + if (eConnectionState_IbssDisconnected == pHddStaCtx->conn_info.connState) + { + netif_tx_disable(pAdapter->dev); + netif_carrier_off(pAdapter->dev); + hdd_disconnect_tx_rx(pAdapter); + } + else + { + // There is atleast one more peer, do not cleanup all queues + hdd_flush_ibss_tx_queues(pAdapter, staId); + } + } + vosStatus = WLANTL_ClearSTAClient( (WLAN_HDD_GET_CTX(pAdapter))->pvosContext, staId ); if ( !VOS_IS_STATUS_SUCCESS( vosStatus ) ) { @@ -736,6 +771,7 @@ static eHalStatus hdd_DisConnectHandler( hdd_adapter_t *pAdapter, tCsrRoamInfo * struct net_device *dev = pAdapter->dev; hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); + v_U8_t sta_id; // Sanity check if(dev == NULL) @@ -802,76 +838,65 @@ static eHalStatus hdd_DisConnectHandler( hdd_adapter_t *pAdapter, tCsrRoamInfo * cfg80211_disconnected(dev, WLAN_REASON_UNSPECIFIED, NULL, 0, GFP_KERNEL); } - /* - * If Powersave Offload is enabled - * Fw will take care of powersave - * incase of concurrency - */ - if(!pHddCtx->cfg_ini->enablePowersaveOffload) + //If the Device Mode is Station + // and the P2P Client is Connected + //Enable BMPS + + // In case of JB, as Change-Iface may or maynot be called for p2p0 + // Enable BMPS/IMPS in case P2P_CLIENT disconnected + // If power save offload is enabled, Fw will take care + // of power save in case of concurrency. + if((VOS_STATUS_SUCCESS == hdd_issta_p2p_clientconnected(pHddCtx)) + && !pHddCtx->cfg_ini->enablePowersaveOffload) { - /* - * If the Device Mode is Station - * and the P2P Client is Connected - * Enable BMPS - * In case of JB, as Change-Iface may or maynot - * be called for p2p0 - * Enable BMPS/IMPS in case P2P_CLIENT disconnected - */ - if(((WLAN_HDD_INFRA_STATION == pAdapter->device_mode) || - (WLAN_HDD_P2P_CLIENT == pAdapter->device_mode)) && - (vos_concurrent_sessions_running())) + //Enable BMPS only of other Session is P2P Client + hdd_context_t *pHddCtx = NULL; + v_CONTEXT_t pVosContext = vos_get_global_context( VOS_MODULE_ID_HDD, NULL ); + + if (NULL != pVosContext) { - //Enable BMPS only of other Session is P2P Client - hdd_context_t *pHddCtx = NULL; - v_CONTEXT_t pVosContext = - vos_get_global_context( VOS_MODULE_ID_HDD, NULL ); - - if (NULL != pVosContext) - { - pHddCtx = vos_get_context(VOS_MODULE_ID_HDD, pVosContext); - - if(NULL != pHddCtx) - { - //Only P2P Client is there Enable Bmps back - if((0 == pHddCtx->no_of_sessions[VOS_STA_SAP_MODE]) && - (0 == pHddCtx->no_of_sessions[VOS_P2P_GO_MODE])) - { - if (pHddCtx->hdd_wlan_suspended) - { - if(WLAN_HDD_INFRA_STATION - == pAdapter->device_mode) - { - hdd_reset_pwrparams(pHddCtx); - } - else - { - hdd_set_pwrparams(pHddCtx); - } - } - - hdd_enable_bmps_imps(pHddCtx); - } + pHddCtx = vos_get_context( VOS_MODULE_ID_HDD, pVosContext); + + if(NULL != pHddCtx) + { + //Only P2P Client is there Enable Bmps back + if((0 == pHddCtx->no_of_sessions[VOS_STA_SAP_MODE]) && + (0 == pHddCtx->no_of_sessions[VOS_P2P_GO_MODE])) + { + if (pHddCtx->hdd_wlan_suspended) + { + hdd_set_pwrparams(pHddCtx); + } + hdd_enable_bmps_imps(pHddCtx); } - } + } } } } } - + if (eCSR_ROAM_IBSS_LEAVE == roamStatus) + { + sta_id = IBSS_BROADCAST_STAID; + } + else + { + sta_id = pHddStaCtx->conn_info.staId[0]; + } + hdd_wmm_adapter_clear(pAdapter); //We should clear all sta register with TL, for now, only one. - vstatus = hdd_roamDeregisterSTA( pAdapter, pHddStaCtx->conn_info.staId [0] ); + vstatus = hdd_roamDeregisterSTA( pAdapter, sta_id ); if ( !VOS_IS_STATUS_SUCCESS(vstatus ) ) { VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, "hdd_roamDeregisterSTA() failed to for staID %d. " "Status= %d [0x%x]", - pHddStaCtx->conn_info.staId[0], status, status ); + sta_id, status, status ); status = eHAL_STATUS_FAILURE; } - pHddCtx->sta_to_adapter[pHddStaCtx->conn_info.staId[0]] = NULL; + pHddCtx->sta_to_adapter[sta_id] = NULL; // Clear saved connection information in HDD hdd_connRemoveConnectInfo( pHddStaCtx ); #ifdef WLAN_FEATURE_GTK_OFFLOAD @@ -885,7 +910,10 @@ static eHalStatus hdd_DisConnectHandler( hdd_adapter_t *pAdapter, tCsrRoamInfo * #endif #ifdef FEATURE_WLAN_TDLS - wlan_hdd_tdls_disconnection_callback(pAdapter); + if (eCSR_ROAM_IBSS_LEAVE != roamStatus) + { + wlan_hdd_tdls_disconnection_callback(pAdapter); + } #endif //Unblock anyone waiting for disconnect to complete @@ -904,6 +932,7 @@ static VOS_STATUS hdd_roamRegisterSTA( hdd_adapter_t *pAdapter, v_BOOL_t fConnected; hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + hdd_config_t *cfg_param = pHddCtx->cfg_ini; if ( NULL == pBssDesc) { @@ -1024,6 +1053,14 @@ static VOS_STATUS hdd_roamRegisterSTA( hdd_adapter_t *pAdapter, return vosStatus; } + if ( cfg_param->dynSplitscan && + ( VOS_TIMER_STATE_RUNNING != + vos_timer_getCurrentState(&pHddCtx->tx_rx_trafficTmr))) + { + vos_timer_start(&pHddCtx->tx_rx_trafficTmr, + cfg_param->trafficMntrTmrForSplitScan); + } + // if (WPA), tell TL to go to 'connected' and after keys come to the driver, // then go to 'authenticated'. For all other authentication types // (those that donot require upper layer authentication) we can put @@ -1031,7 +1068,7 @@ static VOS_STATUS hdd_roamRegisterSTA( hdd_adapter_t *pAdapter, if (staDesc.wSTAType != WLAN_STA_IBSS) VOS_ASSERT( fConnected ); - if ( !pRoamInfo->fAuthRequired && (WLAN_STA_IBSS == staDesc.wSTAType) ) + if ( !pRoamInfo->fAuthRequired ) { // Connections that do not need Upper layer auth, transition TL directly // to 'Authenticated' state. @@ -1049,7 +1086,6 @@ static VOS_STATUS hdd_roamRegisterSTA( hdd_adapter_t *pAdapter, WLANTL_STA_CONNECTED ); pHddStaCtx->conn_info.uIsAuthenticated = VOS_FALSE; } - return( vosStatus ); } @@ -1320,12 +1356,6 @@ static eHalStatus hdd_AssociationCompletionHandler( hdd_adapter_t *pAdapter, tCs pFTAssocRsp, assocRsplen, WLAN_STATUS_SUCCESS, GFP_KERNEL); - cfg80211_put_bss( -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0)) - pHddCtx->wiphy, -#endif - bss); - } } else @@ -1354,14 +1384,13 @@ static eHalStatus hdd_AssociationCompletionHandler( hdd_adapter_t *pAdapter, tCs rspRsnIe, rspRsnLength, WLAN_STATUS_SUCCESS, GFP_KERNEL); - + } + } cfg80211_put_bss( #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0)) pHddCtx->wiphy, #endif bss); - } - } // Register the Station with TL after associated... vosStatus = hdd_roamRegisterSTA( pAdapter, pRoamInfo, @@ -1442,59 +1471,48 @@ static eHalStatus hdd_AssociationCompletionHandler( hdd_adapter_t *pAdapter, tCs pHddCtx->isAmpAllowed = VOS_TRUE; } - /* - * If Powersave Offload is enabled - * Fw will take care incase of concurrency - */ - if(!pHddCtx->cfg_ini->enablePowersaveOffload) + //If the Device Mode is Station + // and the P2P Client is Connected + //Enable BMPS + + // In case of JB, as Change-Iface may or maynot be called for p2p0 + // Enable BMPS/IMPS in case P2P_CLIENT disconnected + // If ps offload is enabled, fw will take care in case of concurrency. + if(((WLAN_HDD_INFRA_STATION == pAdapter->device_mode) || + (WLAN_HDD_P2P_CLIENT == pAdapter->device_mode)) && + (vos_concurrent_sessions_running()) && + !pHddCtx->cfg_ini->enablePowersaveOffload) { - //If the Device Mode is Station - // and the P2P Client is Connected - //Enable BMPS + //Enable BMPS only of other Session is P2P Client + hdd_context_t *pHddCtx = NULL; + v_CONTEXT_t pVosContext = vos_get_global_context( VOS_MODULE_ID_HDD, NULL ); - // In case of JB, as Change-Iface may or maynot be called for p2p0 - // Enable BMPS/IMPS in case P2P_CLIENT disconnected - if(((WLAN_HDD_INFRA_STATION == pAdapter->device_mode) || - (WLAN_HDD_P2P_CLIENT == pAdapter->device_mode)) && - (vos_concurrent_sessions_running())) - { - //Enable BMPS only of other Session is P2P Client - hdd_context_t *pHddCtx = NULL; - v_CONTEXT_t pVosContext = - vos_get_global_context( VOS_MODULE_ID_HDD, NULL ); + if (NULL != pVosContext) + { + pHddCtx = vos_get_context( VOS_MODULE_ID_HDD, pVosContext); - if (NULL != pVosContext) + if(NULL != pHddCtx) { - pHddCtx = vos_get_context( VOS_MODULE_ID_HDD, pVosContext); - - if(NULL != pHddCtx) - { - //Only P2P Client is there Enable Bmps back - if((0 == pHddCtx->no_of_sessions[VOS_STA_SAP_MODE]) && - (0 == pHddCtx->no_of_sessions[VOS_P2P_GO_MODE])) - { - if (pHddCtx->hdd_wlan_suspended) - { - if(WLAN_HDD_INFRA_STATION == pAdapter->device_mode) - { - hdd_reset_pwrparams(pHddCtx); - } - else - { - hdd_set_pwrparams(pHddCtx); - } - } - - hdd_enable_bmps_imps(pHddCtx); - } - } + //Only P2P Client is there Enable Bmps back + if((0 == pHddCtx->no_of_sessions[VOS_STA_SAP_MODE]) && + (0 == pHddCtx->no_of_sessions[VOS_P2P_GO_MODE])) + { + if (pHddCtx->hdd_wlan_suspended) + { + hdd_set_pwrparams(pHddCtx); + } + hdd_enable_bmps_imps(pHddCtx); + } } - } + } } /* CR465478: Only send up a connection failure result when CSR has - * completed operation - with a ASSOCIATION_FAILURE status. */ - if ( eCSR_ROAM_ASSOCIATION_FAILURE == roamStatus ) + * completed operation - with a ASSOCIATION_FAILURE status. + * or an ASSOCIATION_COMPLETION with RESULT_NOT_ASSOCIATED */ + if (( eCSR_ROAM_ASSOCIATION_FAILURE == roamStatus ) || + (( eCSR_ROAM_ASSOCIATION_COMPLETION == roamStatus ) + && ( eCSR_ROAM_RESULT_NOT_ASSOCIATED == roamResult ))) { /* inform association failure event to nl80211 */ if ( eCSR_ROAM_RESULT_ASSOC_FAIL_CON_CHANNEL == roamResult ) @@ -1531,12 +1549,6 @@ static eHalStatus hdd_AssociationCompletionHandler( hdd_adapter_t *pAdapter, tCs netif_tx_disable(dev); netif_carrier_off(dev); - if (WLAN_HDD_P2P_CLIENT != pAdapter->device_mode) - { - /* Association failed; Reset the country code information - * so that it re-initialize the valid channel list*/ - hdd_ResetCountryCodeAfterDisAssoc(pAdapter); - } } return eHAL_STATUS_SUCCESS; @@ -1612,8 +1624,6 @@ static void hdd_RoamIbssIndicationHandler( hdd_adapter_t *pAdapter, bss); } - netif_carrier_on(pAdapter->dev); - netif_tx_start_all_queues(pAdapter->dev); break; } @@ -1669,12 +1679,14 @@ static int roamSaveIbssStation( hdd_station_ctx_t *pHddStaCtx, v_U8_t staId, v_M return FALSE. ===========================================================================*/ -static int roamRemoveIbssStation( hdd_station_ctx_t *pHddStaCtx, v_U8_t staId ) +static int roamRemoveIbssStation( hdd_adapter_t *pAdapter, v_U8_t staId ) { int fSuccess = FALSE; int idx = 0; v_U8_t valid_idx = 0; v_U8_t del_idx = 0; + v_U8_t empty_slots = 0; + hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); for ( idx = 0; idx < HDD_MAX_NUM_IBSS_STA; idx++ ) { @@ -1685,8 +1697,11 @@ static int roamRemoveIbssStation( hdd_station_ctx_t *pHddStaCtx, v_U8_t staId ) vos_zero_macaddr( &pHddStaCtx->conn_info.peerMacAddress[ idx ] ); fSuccess = TRUE; + // Note the deleted Index, if its 0 we need special handling del_idx = idx; + + empty_slots++; } else { @@ -1694,9 +1709,22 @@ static int roamRemoveIbssStation( hdd_station_ctx_t *pHddStaCtx, v_U8_t staId ) { valid_idx = idx; } + else + { + // Found an empty slot + empty_slots++; + } } } + if (HDD_MAX_NUM_IBSS_STA == empty_slots) + { + // Last peer departed, set the IBSS state appropriately + pHddStaCtx->conn_info.connState = eConnectionState_IbssDisconnected; + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "Last IBSS Peer Departed!!!" ); + } + // Find next active staId, to have a valid sta trigger for TL. if (fSuccess == TRUE) { @@ -1724,6 +1752,7 @@ static int roamRemoveIbssStation( hdd_station_ctx_t *pHddStaCtx, v_U8_t staId ) ===========================================================================*/ static eHalStatus roamIbssConnectHandler( hdd_adapter_t *pAdapter, tCsrRoamInfo *pRoamInfo ) { + struct cfg80211_bss *bss; VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "IBSS Connect Indication from SME!!!" ); // Set the internal connection state to show 'IBSS Connected' (IBSS with a partner stations)... hdd_connSetConnectionState( WLAN_HDD_GET_STATION_CTX_PTR(pAdapter), eConnectionState_IbssConnected ); @@ -1734,9 +1763,21 @@ static eHalStatus roamIbssConnectHandler( hdd_adapter_t *pAdapter, tCsrRoamInfo // Send the bssid address to the wext. hdd_SendAssociationEvent(pAdapter->dev, pRoamInfo); /* add bss_id to cfg80211 data base */ - wlan_hdd_cfg80211_update_bss_db(pAdapter, pRoamInfo); + bss = wlan_hdd_cfg80211_update_bss_db(pAdapter, pRoamInfo); + if (NULL == bss) + { + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s: %s: unable to create IBSS entry", + __func__, pAdapter->dev->name); + return eHAL_STATUS_FAILURE; + } /* send ibss join indication to nl80211 */ cfg80211_ibss_joined(pAdapter->dev, &pRoamInfo->bssid[0], GFP_KERNEL); + cfg80211_put_bss( +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0)) + WLAN_HDD_GET_CTX(pAdapter)->wiphy, +#endif + bss); return( eHAL_STATUS_SUCCESS ); } @@ -1755,10 +1796,19 @@ static eHalStatus hdd_RoamSetKeyCompleteHandler( hdd_adapter_t *pAdapter, tCsrRo hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); ENTER(); + + if (NULL == pRoamInfo) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "pRoamInfo is NULL"); + return eHAL_STATUS_FAILURE; + } // if ( WPA ), tell TL to go to 'authenticated' after the keys are set. // then go to 'authenticated'. For all other authentication types (those that do // not require upper layer authentication) we can put TL directly into 'authenticated' // state. + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, + "Set Key completion roamStatus =%d roamResult=%d " MAC_ADDRESS_STR, + roamStatus, roamResult, MAC_ADDR_ARRAY(pRoamInfo->peerMac)); fConnected = hdd_connGetConnectedCipherAlgo( pHddStaCtx, &connectedCipherAlgo ); if( fConnected ) @@ -1898,7 +1948,7 @@ static eHalStatus roamRoamConnectStatusUpdateHandler( hdd_adapter_t *pAdapter, t hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); struct station_info staInfo; - pr_info ( "IBSS New Peer indication from SME " + pr_info ( "IBSS New Peer indication from SME " "with peerMac " MAC_ADDRESS_STR " BSSID: " MAC_ADDRESS_STR " and stationID= %d", MAC_ADDR_ARRAY(pRoamInfo->peerMac), MAC_ADDR_ARRAY(pHddStaCtx->conn_info.bssId), @@ -1935,9 +1985,33 @@ static eHalStatus roamRoamConnectStatusUpdateHandler( hdd_adapter_t *pAdapter, t staInfo.generation = pHddStaCtx->ibss_sta_generation; cfg80211_new_sta(pAdapter->dev, - (const u8 *)pRoamInfo->peerMac, - &staInfo, GFP_KERNEL); + (const u8 *)pRoamInfo->peerMac, + &staInfo, GFP_KERNEL); + + if ( eCSR_ENCRYPT_TYPE_WEP40_STATICKEY == pHddStaCtx->ibss_enc_key.encType + ||eCSR_ENCRYPT_TYPE_WEP104_STATICKEY == pHddStaCtx->ibss_enc_key.encType + ||eCSR_ENCRYPT_TYPE_TKIP == pHddStaCtx->ibss_enc_key.encType + ||eCSR_ENCRYPT_TYPE_AES == pHddStaCtx->ibss_enc_key.encType ) + { + pHddStaCtx->ibss_enc_key.keyDirection = eSIR_TX_RX; + memcpy(&pHddStaCtx->ibss_enc_key.peerMac, + pRoamInfo->peerMac, WNI_CFG_BSSID_LEN); + VOS_TRACE( VOS_MODULE_ID_HDD, + VOS_TRACE_LEVEL_INFO_HIGH, "New peer joined set PTK encType=%d\n", + pHddStaCtx->ibss_enc_key.encType); + + vosStatus = sme_RoamSetKey( WLAN_HDD_GET_HAL_CTX(pAdapter), + pAdapter->sessionId, &pHddStaCtx->ibss_enc_key, &roamId ); + + if ( VOS_STATUS_SUCCESS != vosStatus ) + { + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s: sme_RoamSetKey failed, returned %d", + __func__, vosStatus); + return VOS_STATUS_E_FAILURE; + } + } netif_carrier_on(pAdapter->dev); netif_tx_start_all_queues(pAdapter->dev); break; @@ -1954,14 +2028,13 @@ static eHalStatus roamRoamConnectStatusUpdateHandler( hdd_adapter_t *pAdapter, t { hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); - if ( !roamRemoveIbssStation( pHddStaCtx, pRoamInfo->staId ) ) + if ( !roamRemoveIbssStation(pAdapter, pRoamInfo->staId ) ) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, "IBSS peer departed by cannot find peer in our registration table with TL" ); } pr_info ( "IBSS Peer Departed from SME " - "IBSS Peer Departed from SME " "with peerMac " MAC_ADDRESS_STR " BSSID: " MAC_ADDRESS_STR " and stationID= %d", MAC_ADDR_ARRAY(pRoamInfo->peerMac), MAC_ADDR_ARRAY(pHddStaCtx->conn_info.bssId), @@ -1971,10 +2044,10 @@ static eHalStatus roamRoamConnectStatusUpdateHandler( hdd_adapter_t *pAdapter, t pHddCtx->sta_to_adapter[pRoamInfo->staId] = NULL; pHddStaCtx->ibss_sta_generation++; - cfg80211_del_sta(pAdapter->dev, - (const u8 *)&pRoamInfo->peerMac, - GFP_KERNEL); + cfg80211_del_sta(pAdapter->dev, + (const u8 *)&pRoamInfo->peerMac, + GFP_KERNEL); break; } case eCSR_ROAM_RESULT_IBSS_INACTIVE: @@ -2017,6 +2090,8 @@ VOS_STATUS hdd_roamRegisterTDLSSTA( hdd_adapter_t *pAdapter, WLAN_STADescType staDesc = {0}; eCsrEncryptionType connectedCipherAlgo = eCSR_ENCRYPT_TYPE_UNKNOWN; v_BOOL_t fConnected = FALSE; + hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + hdd_config_t *cfg_param = pHddCtx->cfg_ini; fConnected = hdd_connGetConnectedCipherAlgo( pHddStaCtx, &connectedCipherAlgo ); if (!fConnected) { @@ -2071,7 +2146,7 @@ VOS_STATUS hdd_roamRegisterTDLSSTA( hdd_adapter_t *pAdapter, staDesc.ucIsReplayCheckValid = VOS_FALSE; #endif - staDesc.ucInitState = WLANTL_STA_AUTHENTICATED ; + staDesc.ucInitState = WLANTL_STA_CONNECTED ; /* Register the Station with TL... */ vosStatus = WLANTL_RegisterSTAClient( pVosContext, @@ -2087,6 +2162,13 @@ VOS_STATUS hdd_roamRegisterTDLSSTA( hdd_adapter_t *pAdapter, return vosStatus; } + if ( cfg_param->dynSplitscan && + ( VOS_TIMER_STATE_RUNNING != + vos_timer_getCurrentState(&pHddCtx->tx_rx_trafficTmr)) ) + { + vos_timer_start(&pHddCtx->tx_rx_trafficTmr, + cfg_param->trafficMntrTmrForSplitScan); + } return( vosStatus ); } @@ -2129,6 +2211,7 @@ eHalStatus hdd_RoamTdlsStatusUpdateHandler(hdd_adapter_t *pAdapter, roamResult == eCSR_ROAM_RESULT_TEARDOWN_TDLS_PEER_IND ? "DEL_TDLS_PEER_IND" : roamResult == eCSR_ROAM_RESULT_DELETE_ALL_TDLS_PEER_IND? "DEL_ALL_TDLS_PEER_IND" : roamResult == eCSR_ROAM_RESULT_UPDATE_TDLS_PEER? "UPDATE_TDLS_PEER" : + roamResult == eCSR_ROAM_RESULT_LINK_ESTABLISH_REQ_RSP? "LINK_ESTABLISH_REQ_RSP" : "UNKNOWN", pRoamInfo->staId, pRoamInfo->peerMac[0], @@ -2184,10 +2267,14 @@ eHalStatus hdd_RoamTdlsStatusUpdateHandler(hdd_adapter_t *pAdapter, } (WLAN_HDD_GET_CTX(pAdapter))->sta_to_adapter[pRoamInfo->staId] = pAdapter; - /* store the ucast signature which will be used later when - registering to TL - */ + /* store the ucast signature , if required for further reference. */ + wlan_hdd_tdls_set_signature( pAdapter, pRoamInfo->peerMac, pRoamInfo->ucastSig ); + /* start TDLS client registration with TL */ + status = hdd_roamRegisterTDLSSTA( pAdapter, + pRoamInfo->peerMac, + pRoamInfo->staId, + pRoamInfo->ucastSig); } else { @@ -2214,6 +2301,16 @@ eHalStatus hdd_RoamTdlsStatusUpdateHandler(hdd_adapter_t *pAdapter, complete(&pAdapter->tdls_add_station_comp); break; } + case eCSR_ROAM_RESULT_LINK_ESTABLISH_REQ_RSP: + { + if (eSIR_SME_SUCCESS != pRoamInfo->statusCode) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: Link Establish Request failed. %d", __func__, pRoamInfo->statusCode); + } + complete(&pAdapter->tdls_link_establish_req_comp); + break; + } case eCSR_ROAM_RESULT_DELETE_TDLS_PEER: { hddTdlsPeer_t *curr_peer; @@ -2225,7 +2322,7 @@ eHalStatus hdd_RoamTdlsStatusUpdateHandler(hdd_adapter_t *pAdapter, VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, ("HDD: del STA IDX = %x"), pRoamInfo->staId) ; - curr_peer = wlan_hdd_tdls_find_peer(pAdapter, pRoamInfo->peerMac); + curr_peer = wlan_hdd_tdls_find_peer(pAdapter, pRoamInfo->peerMac, TRUE); if (NULL != curr_peer && TDLS_IS_CONNECTED(curr_peer)) { hdd_roamDeregisterTDLSSTA ( pAdapter, pRoamInfo->staId ); @@ -2254,7 +2351,7 @@ eHalStatus hdd_RoamTdlsStatusUpdateHandler(hdd_adapter_t *pAdapter, __func__, pRoamInfo->reasonCode); #ifdef CONFIG_TDLS_IMPLICIT - curr_peer = wlan_hdd_tdls_find_peer(pAdapter, pRoamInfo->peerMac); + curr_peer = wlan_hdd_tdls_find_peer(pAdapter, pRoamInfo->peerMac, TRUE); wlan_hdd_tdls_indicate_teardown(pAdapter, curr_peer, pRoamInfo->reasonCode); #endif status = eHAL_STATUS_SUCCESS ; @@ -2311,6 +2408,7 @@ eHalStatus hdd_smeRoamCallback( void *pContext, tCsrRoamInfo *pRoamInfo, tANI_U3 hdd_wext_state_t *pWextState = NULL; hdd_station_ctx_t *pHddStaCtx = NULL; VOS_STATUS status = VOS_STATUS_SUCCESS; + hdd_context_t *pHddCtx = NULL; VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "CSR Callback: status= %d result= %d roamID=%ld", @@ -2393,6 +2491,7 @@ eHalStatus hdd_smeRoamCallback( void *pContext, tCsrRoamInfo *pRoamInfo, tANI_U3 } } pHddStaCtx->ft_carrier_on = TRUE; + pHddStaCtx->hdd_ReassocScenario = VOS_TRUE; break; #endif @@ -2423,8 +2522,6 @@ eHalStatus hdd_smeRoamCallback( void *pContext, tCsrRoamInfo *pRoamInfo, tANI_U3 halStatus = eHAL_STATUS_FAILURE; } #endif - // Clear saved connection information in HDD - hdd_connRemoveConnectInfo( WLAN_HDD_GET_STATION_CTX_PTR(pAdapter) ); } break; case eCSR_ROAM_LOSTLINK: @@ -2437,7 +2534,6 @@ eHalStatus hdd_smeRoamCallback( void *pContext, tCsrRoamInfo *pRoamInfo, tANI_U3 } case eCSR_ROAM_DISASSOCIATED: { - hdd_context_t* pHddCtx = (hdd_context_t*)pAdapter->pHddCtx; VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "****eCSR_ROAM_DISASSOCIATED****"); halStatus = hdd_DisConnectHandler( pAdapter, pRoamInfo, roamId, roamStatus, roamResult ); @@ -2448,28 +2544,22 @@ eHalStatus hdd_smeRoamCallback( void *pContext, tCsrRoamInfo *pRoamInfo, tANI_U3 hdd_conf_mcastbcast_filter(pHddCtx, FALSE); pHddCtx->configuredMcastBcastFilter = pHddCtx->sus_res_mcastbcast_filter; - + pHddCtx->sus_res_mcastbcast_filter_valid = VOS_FALSE; + + hddLog(VOS_TRACE_LEVEL_INFO, + "offload: disassociation happening, restoring configuredMcastBcastFilter"); + hddLog(VOS_TRACE_LEVEL_INFO,"McastBcastFilter = %d", + pHddCtx->configuredMcastBcastFilter); + hddLog(VOS_TRACE_LEVEL_INFO, + "offload: already called mcastbcast filter"); (WLAN_HDD_GET_CTX(pAdapter))->hdd_mcastbcast_filter_set = FALSE; } #ifdef WLAN_FEATURE_PACKET_FILTERING - if (pHddCtx->cfg_ini->isMcAddrListFilter) - { - /*Multicast addr filtering is enabled*/ - if (pAdapter->mc_addr_list.isFilterApplied) - { - /*Filter applied during suspend mode*/ - /*Clear it here*/ - wlan_hdd_set_mc_addr_list(pAdapter, FALSE); - } - } + /* Call to clear any MC Addr List filter applied after + * successful connection. + */ + wlan_hdd_set_mc_addr_list(pAdapter, FALSE); #endif - - if (WLAN_HDD_P2P_CLIENT != pAdapter->device_mode) - { - /* Disconnected from current AP. Reset the country code information - * so that it re-initialize the valid channel list*/ - hdd_ResetCountryCodeAfterDisAssoc(pAdapter); - } } break; case eCSR_ROAM_IBSS_LEAVE: @@ -2499,6 +2589,8 @@ eHalStatus hdd_smeRoamCallback( void *pContext, tCsrRoamInfo *pRoamInfo, tANI_U3 } else { + // Clear saved connection information in HDD + hdd_connRemoveConnectInfo( WLAN_HDD_GET_STATION_CTX_PTR(pAdapter) ); halStatus = hdd_AssociationCompletionHandler( pAdapter, pRoamInfo, roamId, roamStatus, roamResult ); } @@ -2521,7 +2613,40 @@ eHalStatus hdd_smeRoamCallback( void *pContext, tCsrRoamInfo *pRoamInfo, tANI_U3 break; case eCSR_ROAM_SET_KEY_COMPLETE: - halStatus = hdd_RoamSetKeyCompleteHandler( pAdapter, pRoamInfo, roamId, roamStatus, roamResult ); + { + hdd_context_t* pHddCtx = (hdd_context_t*)pAdapter->pHddCtx; + + if((pHddCtx) && + (VOS_TRUE == pHddStaCtx->hdd_ReassocScenario) && + (TRUE == pHddCtx->hdd_wlan_suspended) && + (eCSR_ROAM_RESULT_NONE == roamResult)) + { + /* Send DTIM period to the FW; only if the wlan is already + in suspend. This is the case with roaming (reassoc), + DELETE_BSS_REQ zeroes out Modulated/Dynamic DTIM sent in + previous suspend_wlan. Sending SET_POWER_PARAMS_REQ + before the ENTER_BMPS_REQ ensures Listen Interval is + regained back to LI * Modulated DTIM */ + hdd_set_pwrparams(pHddCtx); + pHddStaCtx->hdd_ReassocScenario = VOS_FALSE; + + /* At this point, device should not be in BMPS; + if due to unexpected scenario, if we are in BMPS, + then trigger Exit and Enter BMPS to take DTIM period + effective */ + if (BMPS == pmcGetPmcState(pHddCtx->hHal)) + { + hddLog( LOGE, FL("Not expected: device is already in BMPS mode, Exit & Enter BMPS again!")); + + /* put the device into full power */ + wlan_hdd_enter_bmps(pAdapter, DRIVER_POWER_MODE_ACTIVE); + + /* put the device back into BMPS */ + wlan_hdd_enter_bmps(pAdapter, DRIVER_POWER_MODE_AUTO); + } + } + halStatus = hdd_RoamSetKeyCompleteHandler( pAdapter, pRoamInfo, roamId, roamStatus, roamResult ); + } break; #ifdef WLAN_FEATURE_VOWIFI_11R case eCSR_ROAM_FT_RESPONSE: @@ -2538,6 +2663,44 @@ eHalStatus hdd_smeRoamCallback( void *pContext, tCsrRoamInfo *pRoamInfo, tANI_U3 break; #endif +#ifdef FEATURE_WLAN_LFR_METRICS + case eCSR_ROAM_PREAUTH_INIT_NOTIFY: + /* This event is to notify pre-auth initiation */ + if (VOS_STATUS_SUCCESS != + wlan_hdd_cfg80211_roam_metrics_preauth(pAdapter, pRoamInfo)) + { + halStatus = eHAL_STATUS_FAILURE; + } + break; + case eCSR_ROAM_PREAUTH_STATUS_SUCCESS: + /* This event will notify pre-auth completion in case of success */ + if (VOS_STATUS_SUCCESS != + wlan_hdd_cfg80211_roam_metrics_preauth_status(pAdapter, + pRoamInfo, 1)) + { + halStatus = eHAL_STATUS_FAILURE; + } + break; + case eCSR_ROAM_PREAUTH_STATUS_FAILURE: + /* This event will notify pre-auth completion in case of failure. */ + if (VOS_STATUS_SUCCESS != + wlan_hdd_cfg80211_roam_metrics_preauth_status(pAdapter, + pRoamInfo, 0)) + { + halStatus = eHAL_STATUS_FAILURE; + } + break; + case eCSR_ROAM_HANDOVER_SUCCESS: + /* This event is to notify handover success. + It will be only invoked on success */ + if (VOS_STATUS_SUCCESS != + wlan_hdd_cfg80211_roam_metrics_handover(pAdapter, pRoamInfo)) + { + halStatus = eHAL_STATUS_FAILURE; + } + break; +#endif + case eCSR_ROAM_INDICATE_MGMT_FRAME: hdd_indicateMgmtFrame( pAdapter, pRoamInfo->nFrameLength, @@ -2569,6 +2732,34 @@ eHalStatus hdd_smeRoamCallback( void *pContext, tCsrRoamInfo *pRoamInfo, tANI_U3 pRoamInfo->frameType); break; #endif +#if defined(FEATURE_WLAN_CCX) && defined(FEATURE_WLAN_CCX_UPLOAD) + case eCSR_ROAM_TSM_IE_IND: + hdd_indicateTsmIe(pAdapter, pRoamInfo->tsmIe.tsid, + pRoamInfo->tsmIe.state, pRoamInfo->tsmIe.msmt_interval); + break; + + case eCSR_ROAM_CCKM_PREAUTH_NOTIFY: + { + if (eCSR_AUTH_TYPE_CCKM_WPA == pHddStaCtx->conn_info.authType || + eCSR_AUTH_TYPE_CCKM_RSN == pHddStaCtx->conn_info.authType) + { + hdd_indicateCckmPreAuth(pAdapter, pRoamInfo); + } + break; + } + + case eCSR_ROAM_CCX_ADJ_AP_REPORT_IND: + { + hdd_indicateCcxAdjApRepInd(pAdapter, pRoamInfo); + break; + } + + case eCSR_ROAM_CCX_BCN_REPORT_IND: + { + hdd_indicateCcxBcnReportInd(pAdapter, pRoamInfo); + break; + } +#endif /* FEATURE_WLAN_CCX && FEATURE_WLAN_CCX_UPLOAD */ default: break; } @@ -2899,6 +3090,20 @@ int hdd_SetGENIEToCsr( hdd_adapter_t *pAdapter, eCsrAuthType *RSNAuthType) pWextState->roamProfile.EncryptionType.encryptionType[0] = RSNEncryptType; // Use the cipher type in the RSN IE pWextState->roamProfile.mcEncryptionType.encryptionType[0] = mcRSNEncryptType; + if ( (WLAN_HDD_IBSS == pAdapter->device_mode) && + ((eCSR_ENCRYPT_TYPE_AES == mcRSNEncryptType) || + (eCSR_ENCRYPT_TYPE_TKIP == mcRSNEncryptType))) + { + /*For wpa none supplicant sends the WPA IE with unicast cipher as + eCSR_ENCRYPT_TYPE_NONE ,where as the multicast cipher as + either AES/TKIP based on group cipher configuration + mentioned in the wpa_supplicant.conf.*/ + + /*Set the unicast cipher same as multicast cipher*/ + pWextState->roamProfile.EncryptionType.encryptionType[0] + = mcRSNEncryptType; + } + #ifdef WLAN_FEATURE_11W pWextState->roamProfile.MFPRequired = RSNMfpRequired; pWextState->roamProfile.MFPCapable = RSNMfpCapable; @@ -3178,10 +3383,10 @@ int iw_set_essid(struct net_device *dev, if ( eCSR_BSS_TYPE_START_IBSS == pRoamProfile->BSSType ) { hdd_select_cbmode(pAdapter, - (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini->AdHocChannel5G); + (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini->AdHocChannel5G); } status = sme_RoamConnect( hHal,pAdapter->sessionId, - &(pWextState->roamProfile),&roamId); + &(pWextState->roamProfile), &roamId); pRoamProfile->ChannelInfo.ChannelList = NULL; pRoamProfile->ChannelInfo.numOfChannels = 0; @@ -3649,70 +3854,6 @@ int iw_get_ap_address(struct net_device *dev, return 0; } - -/**--------------------------------------------------------------------------- - - \brief hdd_ResetCountryCodeAfterDisAssoc - - This function reset the country code to default - \param - pAdapter - Pointer to HDD adapter - \return - nothing - - --------------------------------------------------------------------------*/ -void hdd_ResetCountryCodeAfterDisAssoc(hdd_adapter_t *pAdapter) -{ - hdd_context_t* pHddCtx = (hdd_context_t*)pAdapter->pHddCtx; - tSmeConfigParams smeConfig; - eHalStatus status = eHAL_STATUS_SUCCESS; - tANI_U8 defaultCountryCode[3] = SME_INVALID_COUNTRY_CODE; - tANI_U8 currentCountryCode[3] = SME_INVALID_COUNTRY_CODE; - - sme_GetConfigParam(pHddCtx->hHal, &smeConfig); - - VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO, - "%s: 11d is %s\n",__func__, - smeConfig.csrConfig.Is11dSupportEnabled ? "Enabled" : "Disabled"); - /* Reset country code only when 11d is enabled - */ - if (smeConfig.csrConfig.Is11dSupportEnabled) - { - sme_GetDefaultCountryCodeFrmNv(pHddCtx->hHal, &defaultCountryCode[0]); - sme_GetCurrentCountryCode(pHddCtx->hHal, ¤tCountryCode[0]); - - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: Default country code: %c%c%c, Current Country code: %c%c%c \n", - __func__, - defaultCountryCode[0], defaultCountryCode[1], defaultCountryCode[2], - currentCountryCode[0], currentCountryCode[1], currentCountryCode[2]); - /* Reset country code only when there is a mismatch - * between current country code and default country code - */ - if ((defaultCountryCode[0] != currentCountryCode[0]) || - (defaultCountryCode[1] != currentCountryCode[1])) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: Disconnected from the AP/Assoc failed and " - "resetting the country code to default\n",__func__); - /*reset the country code of previous connection*/ - status = (int)sme_ChangeCountryCode(pHddCtx->hHal, NULL, - &defaultCountryCode[0], pAdapter, - pHddCtx->pvosContext - ); - if( 0 != status ) - { - VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, - "%s: failed to Reset the Country Code\n",__func__); - } - } - } - else if (smeConfig.csrConfig.Is11hSupportEnabled) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: Disconnected from the AP/Assoc failed and " - "resetting the 5G power values to default", __func__); - sme_ResetPowerValuesFor5G (pHddCtx->hHal); - } -} - #ifdef WLAN_FEATURE_11W /**--------------------------------------------------------------------------- @@ -3787,3 +3928,244 @@ void hdd_indicateUnprotMgmtFrame( hdd_adapter_t *pAdapter, } } #endif + +#if defined (FEATURE_WLAN_CCX) && defined(FEATURE_WLAN_CCX_UPLOAD) +void hdd_indicateTsmIe(hdd_adapter_t *pAdapter, tANI_U8 tid, + tANI_U8 state, + tANI_U16 measInterval ) +{ + union iwreq_data wrqu; + char buf[IW_CUSTOM_MAX + 1]; + int nBytes = 0; + + if (NULL == pAdapter) + return; + + // create the event + memset(&wrqu, '\0', sizeof(wrqu)); + memset(buf, '\0', sizeof(buf)); + + hddLog(VOS_TRACE_LEVEL_INFO, "TSM Ind tid(%d) state(%d) MeasInt(%d)", + tid, state, measInterval); + + nBytes = snprintf(buf, IW_CUSTOM_MAX, "TSMIE=%d:%d:%d",tid,state,measInterval); + + wrqu.data.pointer = buf; + wrqu.data.length = nBytes; + // send the event + wireless_send_event(pAdapter->dev, IWEVCUSTOM, &wrqu, buf); +} + +void hdd_indicateCckmPreAuth(hdd_adapter_t *pAdapter, tCsrRoamInfo *pRoamInfo) +{ + union iwreq_data wrqu; + char buf[IW_CUSTOM_MAX + 1]; + char *pos = buf; + int nBytes = 0, freeBytes = IW_CUSTOM_MAX; + + if ((NULL == pAdapter) || (NULL == pRoamInfo)) + return; + + // create the event + memset(&wrqu, '\0', sizeof(wrqu)); + memset(buf, '\0', sizeof(buf)); + + /* Timestamp0 is lower 32 bits and Timestamp1 is upper 32 bits */ + hddLog(VOS_TRACE_LEVEL_INFO, + "CCXPREAUTHNOTIFY=%02x:%02x:%02x:%02x:%02x:%02x %lu:%lu", + pRoamInfo->bssid[0], + pRoamInfo->bssid[1], + pRoamInfo->bssid[2], + pRoamInfo->bssid[3], + pRoamInfo->bssid[4], + pRoamInfo->bssid[5], + pRoamInfo->timestamp[0], + pRoamInfo->timestamp[1]); + + nBytes = snprintf(pos, freeBytes, "CCXPREAUTHNOTIFY="); + pos += nBytes; + freeBytes -= nBytes; + + vos_mem_copy(pos, pRoamInfo->bssid, WNI_CFG_BSSID_LEN); + pos += WNI_CFG_BSSID_LEN; + freeBytes -= WNI_CFG_BSSID_LEN; + + nBytes = snprintf(pos, freeBytes, " %lu:%lu", + pRoamInfo->timestamp[0], pRoamInfo->timestamp[1]); + freeBytes -= nBytes; + + wrqu.data.pointer = buf; + wrqu.data.length = (IW_CUSTOM_MAX - freeBytes); + + // send the event + wireless_send_event(pAdapter->dev, IWEVCUSTOM, &wrqu, buf); +} + +void hdd_indicateCcxAdjApRepInd(hdd_adapter_t *pAdapter, + tCsrRoamInfo *pRoamInfo) +{ + union iwreq_data wrqu; + char buf[IW_CUSTOM_MAX + 1]; + int nBytes = 0; + + if ((NULL == pAdapter) || (NULL == pRoamInfo)) + return; + + // create the event + memset(&wrqu, '\0', sizeof(wrqu)); + memset(buf, '\0', sizeof(buf)); + + hddLog(VOS_TRACE_LEVEL_INFO, "CCXADJAPREP=%u", pRoamInfo->tsmRoamDelay); + + nBytes = snprintf(buf, IW_CUSTOM_MAX, "CCXADJAPREP=%u", pRoamInfo->tsmRoamDelay); + + wrqu.data.pointer = buf; + wrqu.data.length = nBytes; + + // send the event + wireless_send_event(pAdapter->dev, IWEVCUSTOM, &wrqu, buf); +} + +void hdd_indicateCcxBcnReportInd(const hdd_adapter_t *pAdapter, + const tCsrRoamInfo *pRoamInfo) +{ + union iwreq_data wrqu; + char buf[IW_CUSTOM_MAX]; + char *pos = buf; + int nBytes = 0, freeBytes = IW_CUSTOM_MAX; + tANI_U8 i = 0, len = 0; + tANI_U8 tot_bcn_ieLen = 0; /* total size of the beacon report data */ + tANI_U8 lastSent = 0, sendBss = 0; + int bcnRepFieldSize = sizeof(pRoamInfo->pCcxBcnReportRsp->bcnRepBssInfo[0].bcnReportFields); + tANI_U8 ieLenByte = 1; + /* CCXBCNREP=meas_tokflagno_of_bsstot_bcn_ie_len = 18 bytes */ +#define CCXBCNREPHEADER_LEN (18) + + if ((NULL == pAdapter) || (NULL == pRoamInfo)) + return; + + /* Custom event can pass maximum of 256 bytes of data, + based on the IE len we need to identify how many BSS info can + be filled in to custom event data */ + /* + meas_tokflagno_of_bsstot_bcn_ie_len bcn_rep_data + bcn_rep_data will have bcn_rep_fields,ie_len,ie without any spaces + CCXBCNREP=meas_tokflagno_of_bsstot_bcn_ie_len = 18 bytes + */ + + if ((pRoamInfo->pCcxBcnReportRsp->flag >> 1) && (!pRoamInfo->pCcxBcnReportRsp->numBss)) + { + hddLog(VOS_TRACE_LEVEL_INFO, "Measurement Done but no scan results"); + /* If the measurement is none and no scan results found, + indicate the supplicant about measurement done */ + memset(&wrqu, '\0', sizeof(wrqu)); + memset(buf, '\0', sizeof(buf)); + + hddLog(VOS_TRACE_LEVEL_INFO, "CCXBCNREP=%d %d %d %d", + pRoamInfo->pCcxBcnReportRsp->measurementToken, pRoamInfo->pCcxBcnReportRsp->flag, + pRoamInfo->pCcxBcnReportRsp->numBss, tot_bcn_ieLen); + + nBytes = snprintf(pos, freeBytes, "CCXBCNREP=%d %d %d", + pRoamInfo->pCcxBcnReportRsp->measurementToken, pRoamInfo->pCcxBcnReportRsp->flag, + pRoamInfo->pCcxBcnReportRsp->numBss); + + wrqu.data.pointer = buf; + wrqu.data.length = nBytes; + // send the event + wireless_send_event(pAdapter->dev, IWEVCUSTOM, &wrqu, buf); + } + else + { + while (lastSent < pRoamInfo->pCcxBcnReportRsp->numBss) + { + memset(&wrqu, '\0', sizeof(wrqu)); + memset(buf, '\0', sizeof(buf)); + tot_bcn_ieLen = 0; + sendBss = 0; + pos = buf; + freeBytes = IW_CUSTOM_MAX; + + for (i = lastSent; i < pRoamInfo->pCcxBcnReportRsp->numBss; i++) + { + len = bcnRepFieldSize + ieLenByte + pRoamInfo->pCcxBcnReportRsp->bcnRepBssInfo[i].ieLen; + if ((len + tot_bcn_ieLen) > (IW_CUSTOM_MAX - CCXBCNREPHEADER_LEN)) + { + break; + } + tot_bcn_ieLen += len; + sendBss++; + hddLog(VOS_TRACE_LEVEL_INFO, "i(%d) sizeof bcnReportFields(%d)" + "IeLength(%d) Length of Ie(%d) totLen(%d)", + i, bcnRepFieldSize, 1, + pRoamInfo->pCcxBcnReportRsp->bcnRepBssInfo[i].ieLen, + tot_bcn_ieLen); + } + + hddLog(VOS_TRACE_LEVEL_INFO, "Sending %d BSS Info", sendBss); + hddLog(VOS_TRACE_LEVEL_INFO, "CCXBCNREP=%d %d %d %d", + pRoamInfo->pCcxBcnReportRsp->measurementToken, pRoamInfo->pCcxBcnReportRsp->flag, + sendBss, tot_bcn_ieLen); + + nBytes = snprintf(pos, freeBytes, "CCXBCNREP=%d %d %d ", + pRoamInfo->pCcxBcnReportRsp->measurementToken, pRoamInfo->pCcxBcnReportRsp->flag, + sendBss); + pos += nBytes; + freeBytes -= nBytes; + + /* Copy total Beacon report data length */ + vos_mem_copy(pos, (char*)&tot_bcn_ieLen, sizeof(tot_bcn_ieLen)); + pos += sizeof(tot_bcn_ieLen); + freeBytes -= sizeof(tot_bcn_ieLen); + + for (i = 0; i < sendBss; i++) + { + hddLog(VOS_TRACE_LEVEL_INFO, "ChanNum(%d) Spare(%d) MeasDuration(%d)" + " PhyType(%d) RecvSigPower(%d) ParentTSF(%lu)" + " TargetTSF[0](%lu) TargetTSF[1](%lu) BeaconInterval(%u)" + " CapabilityInfo(%d) BSSID(%02X:%02X:%02X:%02X:%02X:%02X)", + pRoamInfo->pCcxBcnReportRsp->bcnRepBssInfo[i+lastSent].bcnReportFields.ChanNum, + pRoamInfo->pCcxBcnReportRsp->bcnRepBssInfo[i+lastSent].bcnReportFields.Spare, + pRoamInfo->pCcxBcnReportRsp->bcnRepBssInfo[i+lastSent].bcnReportFields.MeasDuration, + pRoamInfo->pCcxBcnReportRsp->bcnRepBssInfo[i+lastSent].bcnReportFields.PhyType, + pRoamInfo->pCcxBcnReportRsp->bcnRepBssInfo[i+lastSent].bcnReportFields.RecvSigPower, + pRoamInfo->pCcxBcnReportRsp->bcnRepBssInfo[i+lastSent].bcnReportFields.ParentTsf, + pRoamInfo->pCcxBcnReportRsp->bcnRepBssInfo[i+lastSent].bcnReportFields.TargetTsf[0], + pRoamInfo->pCcxBcnReportRsp->bcnRepBssInfo[i+lastSent].bcnReportFields.TargetTsf[1], + pRoamInfo->pCcxBcnReportRsp->bcnRepBssInfo[i+lastSent].bcnReportFields.BcnInterval, + pRoamInfo->pCcxBcnReportRsp->bcnRepBssInfo[i+lastSent].bcnReportFields.CapabilityInfo, + pRoamInfo->pCcxBcnReportRsp->bcnRepBssInfo[i+lastSent].bcnReportFields.Bssid[0], + pRoamInfo->pCcxBcnReportRsp->bcnRepBssInfo[i+lastSent].bcnReportFields.Bssid[1], + pRoamInfo->pCcxBcnReportRsp->bcnRepBssInfo[i+lastSent].bcnReportFields.Bssid[2], + pRoamInfo->pCcxBcnReportRsp->bcnRepBssInfo[i+lastSent].bcnReportFields.Bssid[3], + pRoamInfo->pCcxBcnReportRsp->bcnRepBssInfo[i+lastSent].bcnReportFields.Bssid[4], + pRoamInfo->pCcxBcnReportRsp->bcnRepBssInfo[i+lastSent].bcnReportFields.Bssid[5]); + + /* bcn report fields are copied */ + len = sizeof(pRoamInfo->pCcxBcnReportRsp->bcnRepBssInfo[i+lastSent].bcnReportFields); + vos_mem_copy(pos, (char*)&pRoamInfo->pCcxBcnReportRsp->bcnRepBssInfo[i+lastSent].bcnReportFields, len); + pos += len; + freeBytes -= len; + + /* Add 1 byte of ie len */ + len = pRoamInfo->pCcxBcnReportRsp->bcnRepBssInfo[i+lastSent].ieLen; + vos_mem_copy(pos, (char*)&len, sizeof(len)); + pos += sizeof(len); + freeBytes -= sizeof(len); + + /* copy IE from scan results */ + vos_mem_copy(pos, (char*)pRoamInfo->pCcxBcnReportRsp->bcnRepBssInfo[i+lastSent].pBuf, len); + pos += len; + freeBytes -= len; + } + + wrqu.data.pointer = buf; + wrqu.data.length = IW_CUSTOM_MAX - freeBytes; + + // send the event + wireless_send_event(pAdapter->dev, IWEVCUSTOM, &wrqu, buf); + lastSent += sendBss; + } + } +} + +#endif /* FEATURE_WLAN_CCX && FEATURE_WLAN_CCX_UPLOAD */ diff --git a/CORE/HDD/src/wlan_hdd_cfg.c b/CORE/HDD/src/wlan_hdd_cfg.c index 7fbff5fa704c..a39caa310a3c 100644 --- a/CORE/HDD/src/wlan_hdd_cfg.c +++ b/CORE/HDD/src/wlan_hdd_cfg.c @@ -74,6 +74,25 @@ static void cbNotifySetImmediateRoamRssiDiff(hdd_context_t *pHddCtx, unsigned lo static void cbNotifySetRoamRssiDiff(hdd_context_t *pHddCtx, unsigned long NotifyId) { + if (pHddCtx->cfg_ini->nSelect5GHzMargin) + { + /* + LFR2.0 firmware posts roam candidates whose RSSI is above the + look down threshold and RoamRssiDiff better than current AP Rssi. + if gSelect5GHzMargin is non-zero; then the expectation is firmware + should post all the roam candidates whose RSSI is above lookdown + threshold and don't ignore the APs in RoamRssiDiff zone. + + For ex: RoamRssiDiff=5, Lookdown threshold=-78 and + gSelect5GHzMargin=30 then firmware selects APs + with Rssi -73 or better as roam candidates. + if the 5G AP Rssi is -75 it will be ignored. + if 2.4G AP Rssi is -45 and 5G AP with -75 is available, + STA should connect to 5G AP, hence RoamRssiDiff is set to 0. + */ + pHddCtx->cfg_ini->RoamRssiDiff = 0; + } + sme_UpdateRoamRssiDiff((tHalHandle)(pHddCtx->hHal), pHddCtx->cfg_ini->RoamRssiDiff); } @@ -93,6 +112,32 @@ static void cbNotifySetWESMode(hdd_context_t *pHddCtx, unsigned long NotifyId) // at the point this routine is called, the value in the cfg_ini table has already been updated sme_UpdateWESMode((tHalHandle)(pHddCtx->hHal), pHddCtx->cfg_ini->isWESModeEnabled); } + +static void cbNotifySetRoamScanNProbes(hdd_context_t *pHddCtx, unsigned long NotifyId) +{ + sme_UpdateRoamScanNProbes((tHalHandle)(pHddCtx->hHal), pHddCtx->cfg_ini->nProbes); +} + +static void cbNotifySetRoamScanHomeAwayTime(hdd_context_t *pHddCtx, unsigned long NotifyId) +{ + tANI_U16 scanChannelMaxTime = 0; + + /* Home Away Time should be atleast equal to (MaxDwell time + (2*RFS)), + * where RFS is the RF Switching time. It is twice RFS to consider the + * time to go off channel and return to the home channel. */ + + scanChannelMaxTime = sme_getNeighborScanMaxChanTime((tHalHandle)(pHddCtx->hHal)); + if (pHddCtx->cfg_ini->nRoamScanHomeAwayTime < (scanChannelMaxTime + (2 * HDD_ROAM_SCAN_CHANNEL_SWITCH_TIME))) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, + "%s: Invalid config, Home away time(%d) is less than (twice RF switching time + channel max time)(%d)" + " Hence enforcing home away time to disable (0)", + __func__, pHddCtx->cfg_ini->nRoamScanHomeAwayTime, (scanChannelMaxTime + (2 * HDD_ROAM_SCAN_CHANNEL_SWITCH_TIME))); + pHddCtx->cfg_ini->nRoamScanHomeAwayTime = 0; + } + + sme_UpdateRoamScanHomeAwayTime((tHalHandle)(pHddCtx->hHal), pHddCtx->cfg_ini->nRoamScanHomeAwayTime, eANI_BOOLEAN_TRUE); +} #endif #ifdef FEATURE_WLAN_OKC @@ -108,6 +153,12 @@ static void NotifyIsFastRoamIniFeatureEnabled(hdd_context_t *pHddCtx, unsigned l // at the point this routine is called, the value in the cfg_ini table has already been updated sme_UpdateIsFastRoamIniFeatureEnabled((tHalHandle)(pHddCtx->hHal), pHddCtx->cfg_ini->isFastRoamIniFeatureEnabled ); } + +static void NotifyIsMAWCIniFeatureEnabled(hdd_context_t *pHddCtx, unsigned long NotifyId) +{ + /* at the point this routine is called, the value in the cfg_ini table has already been updated */ + sme_UpdateIsMAWCIniFeatureEnabled((tHalHandle)(pHddCtx->hHal), pHddCtx->cfg_ini->MAWCEnabled ); +} #endif #ifdef FEATURE_WLAN_CCX @@ -157,7 +208,22 @@ static void cbNotifySetNeighborScanMinChanTime(hdd_context_t *pHddCtx, unsigned static void cbNotifySetNeighborScanMaxChanTime(hdd_context_t *pHddCtx, unsigned long NotifyId) { - // at the point this routine is called, the value in the cfg_ini table has already been updated + tANI_U16 homeAwayTime = 0; + + /* Home Away Time should be atleast equal to (MaxDwell time + (2*RFS)), + * where RFS is the RF Switching time. It is twice RFS to consider the + * time to go off channel and return to the home channel. */ + homeAwayTime = sme_getRoamScanHomeAwayTime((tHalHandle)(pHddCtx->hHal)); + if (homeAwayTime < (pHddCtx->cfg_ini->nNeighborScanMaxChanTime + (2 * HDD_ROAM_SCAN_CHANNEL_SWITCH_TIME))) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, + "%s: Invalid config, Home away time(%d) is less than (twice RF switching time + channel max time)(%d)" + " Hence enforcing home away time to disable (0)", + __func__, homeAwayTime, (pHddCtx->cfg_ini->nNeighborScanMaxChanTime + (2 * HDD_ROAM_SCAN_CHANNEL_SWITCH_TIME))); + homeAwayTime = 0; + pHddCtx->cfg_ini->nRoamScanHomeAwayTime = homeAwayTime; + sme_UpdateRoamScanHomeAwayTime((tHalHandle)(pHddCtx->hHal), homeAwayTime, eANI_BOOLEAN_FALSE); + } sme_setNeighborScanMaxChanTime((tHalHandle)(pHddCtx->hHal), pHddCtx->cfg_ini->nNeighborScanMaxChanTime); } #endif @@ -171,7 +237,18 @@ static void cbNotifySetEnableSSR(hdd_context_t *pHddCtx, unsigned long NotifyId) static void cbNotifyUpdateRoamScanOffloadEnabled(hdd_context_t *pHddCtx, unsigned long NotifyId) { sme_UpdateRoamScanOffloadEnabled((tHalHandle)(pHddCtx->hHal), pHddCtx->cfg_ini->isRoamOffloadScanEnabled); + if (0 == pHddCtx->cfg_ini->isRoamOffloadScanEnabled) + { + pHddCtx->cfg_ini->bFastRoamInConIniFeatureEnabled = 0; + sme_UpdateEnableFastRoamInConcurrency((tHalHandle)(pHddCtx->hHal), pHddCtx->cfg_ini->bFastRoamInConIniFeatureEnabled ); + } } + +static void cbNotifySetEnableFastRoamInConcurrency(hdd_context_t *pHddCtx, unsigned long NotifyId) +{ + sme_UpdateEnableFastRoamInConcurrency((tHalHandle)(pHddCtx->hHal), pHddCtx->cfg_ini->bFastRoamInConIniFeatureEnabled ); +} + #endif REG_TABLE_ENTRY g_registry_table[] = @@ -524,13 +601,6 @@ REG_TABLE_ENTRY g_registry_table[] = CFG_RSSI_CATEGORY_GAP_MIN, CFG_RSSI_CATEGORY_GAP_MAX ), - REG_VARIABLE( CFG_STAT_TIMER_INTERVAL_NAME, WLAN_PARAM_Integer, - hdd_config_t, nStatTimerInterval, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_STAT_TIMER_INTERVAL_DEFAULT, - CFG_STAT_TIMER_INTERVAL_MIN, - CFG_STAT_TIMER_INTERVAL_MAX ), - REG_VARIABLE( CFG_SHORT_PREAMBLE_NAME, WLAN_PARAM_Integer, hdd_config_t, fIsShortPreamble, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, @@ -570,11 +640,6 @@ REG_TABLE_ENTRY g_registry_table[] = VAR_FLAGS_OPTIONAL, (void *)CFG_INTF3_MAC_ADDR_DEFAULT ), - REG_VARIABLE_STRING( CFG_CRDA_DEFAULT_COUNTRY_CODE, WLAN_PARAM_String, - hdd_config_t, crdaDefaultCountryCode, - VAR_FLAGS_OPTIONAL, - (void *)CFG_CRDA_DEFAULT_COUNTRY_CODE_DEFAULT ), - REG_VARIABLE( CFG_AP_QOS_UAPSD_MODE_NAME , WLAN_PARAM_Integer, hdd_config_t, apUapsdEnabled, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, @@ -685,6 +750,13 @@ REG_TABLE_ENTRY g_registry_table[] = CFG_AP_LINK_MONITOR_PERIOD_MIN, CFG_AP_LINK_MONITOR_PERIOD_MAX), + REG_VARIABLE( CFG_GO_LINK_MONITOR_PERIOD_NAME, WLAN_PARAM_Integer, + hdd_config_t, goLinkMonitorPeriod, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_GO_LINK_MONITOR_PERIOD_DEFAULT, + CFG_GO_LINK_MONITOR_PERIOD_MIN, + CFG_GO_LINK_MONITOR_PERIOD_MAX), + REG_VARIABLE(CFG_DISABLE_PACKET_FILTER , WLAN_PARAM_Integer, hdd_config_t, disablePacketFilter, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, @@ -699,14 +771,6 @@ REG_TABLE_ENTRY g_registry_table[] = CFG_BEACON_INTERVAL_MIN, CFG_BEACON_INTERVAL_MAX ), - REG_VARIABLE( CFG_ENABLE_HANDOFF_NAME, WLAN_PARAM_Integer, - hdd_config_t, fIsHandoffEnabled, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_ENABLE_HANDOFF_DEFAULT, - CFG_ENABLE_HANDOFF_MIN, - CFG_ENABLE_HANDOFF_MAX ), - - REG_VARIABLE( CFG_ENABLE_IDLE_SCAN_NAME , WLAN_PARAM_Integer, hdd_config_t, nEnableIdleScan, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, @@ -798,6 +862,13 @@ REG_TABLE_ENTRY g_registry_table[] = CFG_RETRY_LIMIT_TWO_MIN, CFG_RETRY_LIMIT_TWO_MAX ), + REG_VARIABLE( CFG_DISABLE_AGG_WITH_BTC_NAME, WLAN_PARAM_Integer, + hdd_config_t, disableAggWithBtc, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_DISABLE_AGG_WITH_BTC_DEFAULT, + CFG_DISABLE_AGG_WITH_BTC_MIN, + CFG_DISABLE_AGG_WITH_BTC_MAX ), + #ifdef WLAN_AP_STA_CONCURRENCY REG_VARIABLE( CFG_PASSIVE_MAX_CHANNEL_TIME_CONC_NAME, WLAN_PARAM_Integer, hdd_config_t, nPassiveMaxChnTimeConc, @@ -834,12 +905,19 @@ REG_TABLE_ENTRY g_registry_table[] = CFG_REST_TIME_CONC_MIN, CFG_REST_TIME_CONC_MAX ), - REG_VARIABLE( CFG_NUM_CHAN_COMBINED_CONC_NAME, WLAN_PARAM_Integer, - hdd_config_t, nNumChanCombinedConc, + REG_VARIABLE( CFG_NUM_STA_CHAN_COMBINED_CONC_NAME, WLAN_PARAM_Integer, + hdd_config_t, nNumStaChanCombinedConc, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_NUM_CHAN_COMBINED_CONC_DEFAULT, - CFG_NUM_CHAN_COMBINED_CONC_MIN, - CFG_NUM_CHAN_COMBINED_CONC_MAX ), + CFG_NUM_STA_CHAN_COMBINED_CONC_DEFAULT, + CFG_NUM_STA_CHAN_COMBINED_CONC_MIN, + CFG_NUM_STA_CHAN_COMBINED_CONC_MAX ), + + REG_VARIABLE( CFG_NUM_P2P_CHAN_COMBINED_CONC_NAME, WLAN_PARAM_Integer, + hdd_config_t, nNumP2PChanCombinedConc, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_NUM_P2P_CHAN_COMBINED_CONC_DEFAULT, + CFG_NUM_P2P_CHAN_COMBINED_CONC_MIN, + CFG_NUM_P2P_CHAN_COMBINED_CONC_MAX ), #endif REG_VARIABLE( CFG_MAX_PS_POLL_NAME, WLAN_PARAM_Integer, @@ -948,13 +1026,6 @@ REG_TABLE_ENTRY g_registry_table[] = CFG_QOS_WMM_UAPSD_MASK_MIN, CFG_QOS_WMM_UAPSD_MASK_MAX ), - REG_VARIABLE( CFG_QOS_WMM_MAX_SP_LEN_NAME , WLAN_PARAM_Integer, - hdd_config_t, MaxSpLength, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_QOS_WMM_MAX_SP_LEN_DEFAULT, - CFG_QOS_WMM_MAX_SP_LEN_MIN, - CFG_QOS_WMM_MAX_SP_LEN_MAX ), - REG_VARIABLE( CFG_QOS_WMM_INFRA_UAPSD_VO_SRV_INTV_NAME , WLAN_PARAM_Integer, hdd_config_t, InfraUapsdVoSrvIntv, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, @@ -1036,6 +1107,16 @@ REG_TABLE_ENTRY g_registry_table[] = CFG_LFR_FEATURE_ENABLED_MIN, CFG_LFR_FEATURE_ENABLED_MAX, NotifyIsFastRoamIniFeatureEnabled, 0 ), + + /* flag to turn ON/OFF Motion assistance for Legacy Fast Roaming */ + REG_DYNAMIC_VARIABLE( CFG_LFR_MAWC_FEATURE_ENABLED_NAME, WLAN_PARAM_Integer, + hdd_config_t, MAWCEnabled, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_LFR_MAWC_FEATURE_ENABLED_DEFAULT, + CFG_LFR_MAWC_FEATURE_ENABLED_MIN, + CFG_LFR_MAWC_FEATURE_ENABLED_MAX, + NotifyIsMAWCIniFeatureEnabled, 0 ), + #endif // FEATURE_WLAN_LFR #if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR) @@ -1286,13 +1367,6 @@ REG_TABLE_ENTRY g_registry_table[] = CFG_QOS_IMPLICIT_SETUP_ENABLED_MIN, CFG_QOS_IMPLICIT_SETUP_ENABLED_MAX ), - REG_VARIABLE( CFG_19P2_MHZ_PMIC_CLK_ENABLED_NAME , WLAN_PARAM_Integer, - hdd_config_t, b19p2MhzPmicClkEnabled, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_19P2_MHZ_PMIC_CLK_ENABLED_DEFAULT, - CFG_19P2_MHZ_PMIC_CLK_ENABLED_MIN, - CFG_19P2_MHZ_PMIC_CLK_ENABLED_MAX ), - REG_VARIABLE( CFG_BTC_EXECUTION_MODE_NAME , WLAN_PARAM_Integer, hdd_config_t, btcExecutionMode, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, @@ -1405,6 +1479,342 @@ REG_TABLE_ENTRY g_registry_table[] = CFG_BTC_DHCP_PROT_ON_SCO_MIN, CFG_BTC_DHCP_PROT_ON_SCO_MAX ), + REG_VARIABLE( CFG_MWS_COEX_V1_WAN_FREQ_NAME , WLAN_PARAM_Integer, + hdd_config_t, mwsCoexVictimWANFreq[0], + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_MWS_COEX_VX_WAN_FREQ_DEFAULT, + CFG_MWS_COEX_VX_WAN_FREQ_MIN, + CFG_MWS_COEX_VX_WAN_FREQ_MAX ), + + REG_VARIABLE( CFG_MWS_COEX_V1_WLAN_FREQ_NAME , WLAN_PARAM_Integer, + hdd_config_t, mwsCoexVictimWLANFreq[0], + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_MWS_COEX_VX_WLAN_FREQ_DEFAULT, + CFG_MWS_COEX_VX_WLAN_FREQ_MIN, + CFG_MWS_COEX_VX_WLAN_FREQ_MAX ), + + REG_VARIABLE( CFG_MWS_COEX_V1_CONFIG_NAME , WLAN_PARAM_Integer, + hdd_config_t, mwsCoexVictimConfig[0], + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_MWS_COEX_VX_CONFIG_DEFAULT, + CFG_MWS_COEX_VX_CONFIG_MIN, + CFG_MWS_COEX_VX_CONFIG_MAX ), + + REG_VARIABLE( CFG_MWS_COEX_V1_CONFIG2_NAME , WLAN_PARAM_Integer, + hdd_config_t, mwsCoexVictimConfig2[0], + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_MWS_COEX_VX_CONFIG_DEFAULT, + CFG_MWS_COEX_VX_CONFIG_MIN, + CFG_MWS_COEX_VX_CONFIG_MAX ), + + REG_VARIABLE( CFG_MWS_COEX_V2_WAN_FREQ_NAME , WLAN_PARAM_Integer, + hdd_config_t, mwsCoexVictimWANFreq[1], + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_MWS_COEX_VX_WAN_FREQ_DEFAULT, + CFG_MWS_COEX_VX_WAN_FREQ_MIN, + CFG_MWS_COEX_VX_WAN_FREQ_MAX ), + + REG_VARIABLE( CFG_MWS_COEX_V2_WLAN_FREQ_NAME , WLAN_PARAM_Integer, + hdd_config_t, mwsCoexVictimWLANFreq[1], + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_MWS_COEX_VX_WLAN_FREQ_DEFAULT, + CFG_MWS_COEX_VX_WLAN_FREQ_MIN, + CFG_MWS_COEX_VX_WLAN_FREQ_MAX ), + + REG_VARIABLE( CFG_MWS_COEX_V2_CONFIG_NAME , WLAN_PARAM_Integer, + hdd_config_t, mwsCoexVictimConfig[1], + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_MWS_COEX_VX_CONFIG_DEFAULT, + CFG_MWS_COEX_VX_CONFIG_MIN, + CFG_MWS_COEX_VX_CONFIG_MAX ), + + REG_VARIABLE( CFG_MWS_COEX_V2_CONFIG2_NAME , WLAN_PARAM_Integer, + hdd_config_t, mwsCoexVictimConfig2[1], + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_MWS_COEX_VX_CONFIG_DEFAULT, + CFG_MWS_COEX_VX_CONFIG_MIN, + CFG_MWS_COEX_VX_CONFIG_MAX ), + + REG_VARIABLE( CFG_MWS_COEX_V3_WAN_FREQ_NAME , WLAN_PARAM_Integer, + hdd_config_t, mwsCoexVictimWANFreq[2], + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_MWS_COEX_VX_WAN_FREQ_DEFAULT, + CFG_MWS_COEX_VX_WAN_FREQ_MIN, + CFG_MWS_COEX_VX_WAN_FREQ_MAX ), + + REG_VARIABLE( CFG_MWS_COEX_V3_WLAN_FREQ_NAME , WLAN_PARAM_Integer, + hdd_config_t, mwsCoexVictimWLANFreq[2], + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_MWS_COEX_VX_WLAN_FREQ_DEFAULT, + CFG_MWS_COEX_VX_WLAN_FREQ_MIN, + CFG_MWS_COEX_VX_WLAN_FREQ_MAX ), + + REG_VARIABLE( CFG_MWS_COEX_V3_CONFIG_NAME , WLAN_PARAM_Integer, + hdd_config_t, mwsCoexVictimConfig[2], + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_MWS_COEX_VX_CONFIG_DEFAULT, + CFG_MWS_COEX_VX_CONFIG_MIN, + CFG_MWS_COEX_VX_CONFIG_MAX ), + + REG_VARIABLE( CFG_MWS_COEX_V3_CONFIG2_NAME , WLAN_PARAM_Integer, + hdd_config_t, mwsCoexVictimConfig2[2], + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_MWS_COEX_VX_CONFIG_DEFAULT, + CFG_MWS_COEX_VX_CONFIG_MIN, + CFG_MWS_COEX_VX_CONFIG_MAX ), + + REG_VARIABLE( CFG_MWS_COEX_V4_WAN_FREQ_NAME , WLAN_PARAM_Integer, + hdd_config_t, mwsCoexVictimWANFreq[3], + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_MWS_COEX_VX_WAN_FREQ_DEFAULT, + CFG_MWS_COEX_VX_WAN_FREQ_MIN, + CFG_MWS_COEX_VX_WAN_FREQ_MAX ), + + REG_VARIABLE( CFG_MWS_COEX_V4_WLAN_FREQ_NAME , WLAN_PARAM_Integer, + hdd_config_t, mwsCoexVictimWLANFreq[3], + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_MWS_COEX_VX_WLAN_FREQ_DEFAULT, + CFG_MWS_COEX_VX_WLAN_FREQ_MIN, + CFG_MWS_COEX_VX_WLAN_FREQ_MAX ), + + REG_VARIABLE( CFG_MWS_COEX_V4_CONFIG_NAME , WLAN_PARAM_Integer, + hdd_config_t, mwsCoexVictimConfig[3], + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_MWS_COEX_VX_CONFIG_DEFAULT, + CFG_MWS_COEX_VX_CONFIG_MIN, + CFG_MWS_COEX_VX_CONFIG_MAX ), + + REG_VARIABLE( CFG_MWS_COEX_V4_CONFIG2_NAME , WLAN_PARAM_Integer, + hdd_config_t, mwsCoexVictimConfig2[3], + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_MWS_COEX_VX_CONFIG_DEFAULT, + CFG_MWS_COEX_VX_CONFIG_MIN, + CFG_MWS_COEX_VX_CONFIG_MAX ), + + REG_VARIABLE( CFG_MWS_COEX_V5_WAN_FREQ_NAME , WLAN_PARAM_Integer, + hdd_config_t, mwsCoexVictimWANFreq[4], + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_MWS_COEX_VX_WAN_FREQ_DEFAULT, + CFG_MWS_COEX_VX_WAN_FREQ_MIN, + CFG_MWS_COEX_VX_WAN_FREQ_MAX ), + + REG_VARIABLE( CFG_MWS_COEX_V5_WLAN_FREQ_NAME , WLAN_PARAM_Integer, + hdd_config_t, mwsCoexVictimWLANFreq[4], + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_MWS_COEX_VX_WLAN_FREQ_DEFAULT, + CFG_MWS_COEX_VX_WLAN_FREQ_MIN, + CFG_MWS_COEX_VX_WLAN_FREQ_MAX ), + + REG_VARIABLE( CFG_MWS_COEX_V5_CONFIG_NAME , WLAN_PARAM_Integer, + hdd_config_t, mwsCoexVictimConfig[4], + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_MWS_COEX_VX_CONFIG_DEFAULT, + CFG_MWS_COEX_VX_CONFIG_MIN, + CFG_MWS_COEX_VX_CONFIG_MAX ), + + REG_VARIABLE( CFG_MWS_COEX_V5_CONFIG2_NAME , WLAN_PARAM_Integer, + hdd_config_t, mwsCoexVictimConfig2[4], + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_MWS_COEX_VX_CONFIG_DEFAULT, + CFG_MWS_COEX_VX_CONFIG_MIN, + CFG_MWS_COEX_VX_CONFIG_MAX ), + + REG_VARIABLE( CFG_MWS_COEX_V6_WAN_FREQ_NAME , WLAN_PARAM_Integer, + hdd_config_t, mwsCoexVictimWANFreq[5], + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_MWS_COEX_VX_WAN_FREQ_DEFAULT, + CFG_MWS_COEX_VX_WAN_FREQ_MIN, + CFG_MWS_COEX_VX_WAN_FREQ_MAX ), + + REG_VARIABLE( CFG_MWS_COEX_V6_WLAN_FREQ_NAME , WLAN_PARAM_Integer, + hdd_config_t, mwsCoexVictimWLANFreq[5], + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_MWS_COEX_VX_WLAN_FREQ_DEFAULT, + CFG_MWS_COEX_VX_WLAN_FREQ_MIN, + CFG_MWS_COEX_VX_WLAN_FREQ_MAX ), + + REG_VARIABLE( CFG_MWS_COEX_V6_CONFIG_NAME , WLAN_PARAM_Integer, + hdd_config_t, mwsCoexVictimConfig[5], + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_MWS_COEX_VX_CONFIG_DEFAULT, + CFG_MWS_COEX_VX_CONFIG_MIN, + CFG_MWS_COEX_VX_CONFIG_MAX ), + + REG_VARIABLE( CFG_MWS_COEX_V6_CONFIG2_NAME , WLAN_PARAM_Integer, + hdd_config_t, mwsCoexVictimConfig2[5], + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_MWS_COEX_VX_CONFIG_DEFAULT, + CFG_MWS_COEX_VX_CONFIG_MIN, + CFG_MWS_COEX_VX_CONFIG_MAX ), + + REG_VARIABLE( CFG_MWS_COEX_V7_WAN_FREQ_NAME , WLAN_PARAM_Integer, + hdd_config_t, mwsCoexVictimWANFreq[6], + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_MWS_COEX_VX_WAN_FREQ_DEFAULT, + CFG_MWS_COEX_VX_WAN_FREQ_MIN, + CFG_MWS_COEX_VX_WAN_FREQ_MAX ), + + REG_VARIABLE( CFG_MWS_COEX_V7_WLAN_FREQ_NAME , WLAN_PARAM_Integer, + hdd_config_t, mwsCoexVictimWLANFreq[6], + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_MWS_COEX_VX_WLAN_FREQ_DEFAULT, + CFG_MWS_COEX_VX_WLAN_FREQ_MIN, + CFG_MWS_COEX_VX_WLAN_FREQ_MAX ), + + REG_VARIABLE( CFG_MWS_COEX_V7_CONFIG_NAME , WLAN_PARAM_Integer, + hdd_config_t, mwsCoexVictimConfig[6], + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_MWS_COEX_VX_CONFIG_DEFAULT, + CFG_MWS_COEX_VX_CONFIG_MIN, + CFG_MWS_COEX_VX_CONFIG_MAX ), + + REG_VARIABLE( CFG_MWS_COEX_V7_CONFIG2_NAME , WLAN_PARAM_Integer, + hdd_config_t, mwsCoexVictimConfig2[6], + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_MWS_COEX_VX_CONFIG_DEFAULT, + CFG_MWS_COEX_VX_CONFIG_MIN, + CFG_MWS_COEX_VX_CONFIG_MAX ), + + REG_VARIABLE( CFG_MWS_COEX_V8_WAN_FREQ_NAME , WLAN_PARAM_Integer, + hdd_config_t, mwsCoexVictimWANFreq[7], + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_MWS_COEX_VX_WAN_FREQ_DEFAULT, + CFG_MWS_COEX_VX_WAN_FREQ_MIN, + CFG_MWS_COEX_VX_WAN_FREQ_MAX ), + + REG_VARIABLE( CFG_MWS_COEX_V8_WLAN_FREQ_NAME , WLAN_PARAM_Integer, + hdd_config_t, mwsCoexVictimWLANFreq[7], + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_MWS_COEX_VX_WLAN_FREQ_DEFAULT, + CFG_MWS_COEX_VX_WLAN_FREQ_MIN, + CFG_MWS_COEX_VX_WLAN_FREQ_MAX ), + + REG_VARIABLE( CFG_MWS_COEX_V8_CONFIG_NAME , WLAN_PARAM_Integer, + hdd_config_t, mwsCoexVictimConfig[7], + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_MWS_COEX_VX_CONFIG_DEFAULT, + CFG_MWS_COEX_VX_CONFIG_MIN, + CFG_MWS_COEX_VX_CONFIG_MAX ), + + REG_VARIABLE( CFG_MWS_COEX_V8_CONFIG2_NAME , WLAN_PARAM_Integer, + hdd_config_t, mwsCoexVictimConfig2[7], + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_MWS_COEX_VX_CONFIG_DEFAULT, + CFG_MWS_COEX_VX_CONFIG_MIN, + CFG_MWS_COEX_VX_CONFIG_MAX ), + + REG_VARIABLE( CFG_MWS_COEX_V9_WAN_FREQ_NAME , WLAN_PARAM_Integer, + hdd_config_t, mwsCoexVictimWANFreq[8], + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_MWS_COEX_VX_WAN_FREQ_DEFAULT, + CFG_MWS_COEX_VX_WAN_FREQ_MIN, + CFG_MWS_COEX_VX_WAN_FREQ_MAX ), + + REG_VARIABLE( CFG_MWS_COEX_V9_WLAN_FREQ_NAME , WLAN_PARAM_Integer, + hdd_config_t, mwsCoexVictimWLANFreq[8], + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_MWS_COEX_VX_WLAN_FREQ_DEFAULT, + CFG_MWS_COEX_VX_WLAN_FREQ_MIN, + CFG_MWS_COEX_VX_WLAN_FREQ_MAX ), + + REG_VARIABLE( CFG_MWS_COEX_V9_CONFIG_NAME , WLAN_PARAM_Integer, + hdd_config_t, mwsCoexVictimConfig[8], + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_MWS_COEX_VX_CONFIG_DEFAULT, + CFG_MWS_COEX_VX_CONFIG_MIN, + CFG_MWS_COEX_VX_CONFIG_MAX ), + + REG_VARIABLE( CFG_MWS_COEX_V9_CONFIG2_NAME , WLAN_PARAM_Integer, + hdd_config_t, mwsCoexVictimConfig2[8], + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_MWS_COEX_VX_CONFIG_DEFAULT, + CFG_MWS_COEX_VX_CONFIG_MIN, + CFG_MWS_COEX_VX_CONFIG_MAX ), + + REG_VARIABLE( CFG_MWS_COEX_V10_WAN_FREQ_NAME , WLAN_PARAM_Integer, + hdd_config_t, mwsCoexVictimWANFreq[9], + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_MWS_COEX_VX_WAN_FREQ_DEFAULT, + CFG_MWS_COEX_VX_WAN_FREQ_MIN, + CFG_MWS_COEX_VX_WAN_FREQ_MAX ), + + REG_VARIABLE( CFG_MWS_COEX_V10_WLAN_FREQ_NAME , WLAN_PARAM_Integer, + hdd_config_t, mwsCoexVictimWLANFreq[9], + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_MWS_COEX_VX_WLAN_FREQ_DEFAULT, + CFG_MWS_COEX_VX_WLAN_FREQ_MIN, + CFG_MWS_COEX_VX_WLAN_FREQ_MAX ), + + REG_VARIABLE( CFG_MWS_COEX_V10_CONFIG_NAME , WLAN_PARAM_Integer, + hdd_config_t, mwsCoexVictimConfig[9], + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_MWS_COEX_VX_CONFIG_DEFAULT, + CFG_MWS_COEX_VX_CONFIG_MIN, + CFG_MWS_COEX_VX_CONFIG_MAX ), + + REG_VARIABLE( CFG_MWS_COEX_V10_CONFIG2_NAME , WLAN_PARAM_Integer, + hdd_config_t, mwsCoexVictimConfig2[9], + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_MWS_COEX_VX_CONFIG_DEFAULT, + CFG_MWS_COEX_VX_CONFIG_MIN, + CFG_MWS_COEX_VX_CONFIG_MAX ), + + REG_VARIABLE( CFG_MWS_COEX_MODEM_BACKOFF_NAME , WLAN_PARAM_Integer, + hdd_config_t, mwsCoexModemBackoff, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_MWS_COEX_MODEM_BACKOFF_DEFAULT, + CFG_MWS_COEX_MODEM_BACKOFF_MIN, + CFG_MWS_COEX_MODEM_BACKOFF_MAX ), + + REG_VARIABLE( CFG_MWS_COEX_CONFIG1_NAME , WLAN_PARAM_Integer, + hdd_config_t, mwsCoexConfig[0], + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_MWS_COEX_CONFIGX_DEFAULT, + CFG_MWS_COEX_CONFIGX_MIN, + CFG_MWS_COEX_CONFIGX_MAX ), + + REG_VARIABLE( CFG_MWS_COEX_CONFIG2_NAME , WLAN_PARAM_Integer, + hdd_config_t, mwsCoexConfig[1], + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_MWS_COEX_CONFIGX_DEFAULT, + CFG_MWS_COEX_CONFIGX_MIN, + CFG_MWS_COEX_CONFIGX_MAX ), + + REG_VARIABLE( CFG_MWS_COEX_CONFIG3_NAME , WLAN_PARAM_Integer, + hdd_config_t, mwsCoexConfig[2], + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_MWS_COEX_CONFIGX_DEFAULT, + CFG_MWS_COEX_CONFIGX_MIN, + CFG_MWS_COEX_CONFIGX_MAX ), + + REG_VARIABLE( CFG_MWS_COEX_CONFIG4_NAME , WLAN_PARAM_Integer, + hdd_config_t, mwsCoexConfig[3], + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_MWS_COEX_CONFIGX_DEFAULT, + CFG_MWS_COEX_CONFIGX_MIN, + CFG_MWS_COEX_CONFIGX_MAX ), + + REG_VARIABLE( CFG_MWS_COEX_CONFIG5_NAME , WLAN_PARAM_Integer, + hdd_config_t, mwsCoexConfig[4], + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_MWS_COEX_CONFIGX_DEFAULT, + CFG_MWS_COEX_CONFIGX_MIN, + CFG_MWS_COEX_CONFIGX_MAX ), + + REG_VARIABLE( CFG_MWS_COEX_CONFIG6_NAME , WLAN_PARAM_Integer, + hdd_config_t, mwsCoexConfig[5], + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_MWS_COEX_CONFIGX_DEFAULT, + CFG_MWS_COEX_CONFIGX_MIN, + CFG_MWS_COEX_CONFIGX_MAX ), + + REG_VARIABLE( CFG_SAR_POWER_BACKOFF_NAME , WLAN_PARAM_Integer, + hdd_config_t, SARPowerBackoff, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_SAR_POWER_BACKOFF_DEFAULT, + CFG_SAR_POWER_BACKOFF_MIN, + CFG_SAR_POWER_BACKOFF_MAX ), + REG_VARIABLE( CFG_AP_LISTEN_MODE_NAME , WLAN_PARAM_Integer, hdd_config_t, nEnableListenMode, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, @@ -1450,13 +1860,6 @@ REG_TABLE_ENTRY g_registry_table[] = #endif #ifdef WLAN_FEATURE_VOWIFI_11R - REG_VARIABLE( CFG_FT_ENABLE_NAME, WLAN_PARAM_Integer, - hdd_config_t, fFTEnable, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_FT_ENABLE_DEFAULT, - CFG_FT_ENABLE_MIN, - CFG_FT_ENABLE_MAX ), - REG_VARIABLE( CFG_FT_RESOURCE_REQ_NAME, WLAN_PARAM_Integer, hdd_config_t, fFTResourceReqSupported, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, @@ -1697,6 +2100,13 @@ REG_TABLE_ENTRY g_registry_table[] = CFG_VOS_TRACE_ENABLE_MIN, CFG_VOS_TRACE_ENABLE_MAX ), + REG_VARIABLE( CFG_VOS_TRACE_ENABLE_PMC_NAME, WLAN_PARAM_Integer, + hdd_config_t, vosTraceEnablePMC, + VAR_FLAGS_OPTIONAL, + CFG_VOS_TRACE_ENABLE_DEFAULT, + CFG_VOS_TRACE_ENABLE_MIN, + CFG_VOS_TRACE_ENABLE_MAX ), + REG_VARIABLE( CFG_VOS_TRACE_ENABLE_WDA_NAME, WLAN_PARAM_Integer, hdd_config_t, vosTraceEnableWDA, VAR_FLAGS_OPTIONAL, @@ -1762,42 +2172,42 @@ REG_TABLE_ENTRY g_registry_table[] = CFG_WDI_TRACE_ENABLE_MIN, CFG_WDI_TRACE_ENABLE_MAX ), - REG_VARIABLE( CFG_TELE_BCN_TRANS_LI_NAME, WLAN_PARAM_Integer, + REG_VARIABLE( CFG_TELE_BCN_TRANS_LI_NAME, WLAN_PARAM_Integer, hdd_config_t, nTeleBcnTransListenInterval, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_TELE_BCN_TRANS_LI_DEFAULT, CFG_TELE_BCN_TRANS_LI_MIN, CFG_TELE_BCN_TRANS_LI_MAX ), - REG_VARIABLE( CFG_TELE_BCN_TRANS_LI_NUM_IDLE_BCNS_NAME, WLAN_PARAM_Integer, + REG_VARIABLE( CFG_TELE_BCN_TRANS_LI_NUM_IDLE_BCNS_NAME, WLAN_PARAM_Integer, hdd_config_t, nTeleBcnTransLiNumIdleBeacons, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_TELE_BCN_TRANS_LI_NUM_IDLE_BCNS_DEFAULT, CFG_TELE_BCN_TRANS_LI_NUM_IDLE_BCNS_MIN, CFG_TELE_BCN_TRANS_LI_NUM_IDLE_BCNS_MAX ), - REG_VARIABLE( CFG_TELE_BCN_MAX_LI_NAME, WLAN_PARAM_Integer, + REG_VARIABLE( CFG_TELE_BCN_MAX_LI_NAME, WLAN_PARAM_Integer, hdd_config_t, nTeleBcnMaxListenInterval, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_TELE_BCN_MAX_LI_DEFAULT, CFG_TELE_BCN_MAX_LI_MIN, CFG_TELE_BCN_MAX_LI_MAX ), - REG_VARIABLE( CFG_TELE_BCN_MAX_LI_NUM_IDLE_BCNS_NAME, WLAN_PARAM_Integer, + REG_VARIABLE( CFG_TELE_BCN_MAX_LI_NUM_IDLE_BCNS_NAME, WLAN_PARAM_Integer, hdd_config_t, nTeleBcnMaxLiNumIdleBeacons, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_TELE_BCN_MAX_LI_NUM_IDLE_BCNS_DEFAULT, CFG_TELE_BCN_MAX_LI_NUM_IDLE_BCNS_MIN, CFG_TELE_BCN_MAX_LI_NUM_IDLE_BCNS_MAX ), - REG_VARIABLE( CFG_BCN_EARLY_TERM_WAKE_NAME, WLAN_PARAM_Integer, + REG_VARIABLE( CFG_BCN_EARLY_TERM_WAKE_NAME, WLAN_PARAM_Integer, hdd_config_t, bcnEarlyTermWakeInterval, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_BCN_EARLY_TERM_WAKE_DEFAULT, CFG_BCN_EARLY_TERM_WAKE_MIN, CFG_BCN_EARLY_TERM_WAKE_MAX ), - REG_VARIABLE( CFG_AP_DATA_AVAIL_POLL_PERIOD_NAME, WLAN_PARAM_Integer, + REG_VARIABLE( CFG_AP_DATA_AVAIL_POLL_PERIOD_NAME, WLAN_PARAM_Integer, hdd_config_t, apDataAvailPollPeriodInMs, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_AP_DATA_AVAIL_POLL_PERIOD_DEFAULT, @@ -1811,42 +2221,42 @@ REG_TABLE_ENTRY g_registry_table[] = CFG_ENABLE_CLOSE_LOOP_MIN, CFG_ENABLE_CLOSE_LOOP_MAX ), - REG_VARIABLE( CFG_ENABLE_BYPASS_11D_NAME, WLAN_PARAM_Integer, + REG_VARIABLE( CFG_ENABLE_BYPASS_11D_NAME, WLAN_PARAM_Integer, hdd_config_t, enableBypass11d, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_ENABLE_BYPASS_11D_DEFAULT, CFG_ENABLE_BYPASS_11D_MIN, CFG_ENABLE_BYPASS_11D_MAX ), - REG_VARIABLE( CFG_ENABLE_DFS_CHNL_SCAN_NAME, WLAN_PARAM_Integer, + REG_VARIABLE( CFG_ENABLE_DFS_CHNL_SCAN_NAME, WLAN_PARAM_Integer, hdd_config_t, enableDFSChnlScan, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_ENABLE_DFS_CHNL_SCAN_DEFAULT, CFG_ENABLE_DFS_CHNL_SCAN_MIN, CFG_ENABLE_DFS_CHNL_SCAN_MAX ), - REG_VARIABLE( CFG_ENABLE_DYNAMIC_DTIM_NAME, WLAN_PARAM_Integer, + REG_VARIABLE( CFG_ENABLE_DYNAMIC_DTIM_NAME, WLAN_PARAM_Integer, hdd_config_t, enableDynamicDTIM, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_ENABLE_DYNAMIC_DTIM_DEFAULT, CFG_ENABLE_DYNAMIC_DTIM_MIN, CFG_ENABLE_DYNAMIC_DTIM_MAX ), - REG_VARIABLE( CFG_ENABLE_AUTOMATIC_TX_POWER_CONTROL_NAME, WLAN_PARAM_Integer, + REG_VARIABLE( CFG_ENABLE_AUTOMATIC_TX_POWER_CONTROL_NAME, WLAN_PARAM_Integer, hdd_config_t, enableAutomaticTxPowerControl, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_ENABLE_AUTOMATIC_TX_POWER_CONTROL_DEFAULT, CFG_ENABLE_AUTOMATIC_TX_POWER_CONTROL_MIN, CFG_ENABLE_AUTOMATIC_TX_POWER_CONTROL_MAX ), - REG_VARIABLE( CFG_SHORT_GI_40MHZ_NAME, WLAN_PARAM_Integer, + REG_VARIABLE( CFG_SHORT_GI_40MHZ_NAME, WLAN_PARAM_Integer, hdd_config_t, ShortGI40MhzEnable, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_SHORT_GI_40MHZ_DEFAULT, CFG_SHORT_GI_40MHZ_MIN, CFG_SHORT_GI_40MHZ_MAX ), - REG_DYNAMIC_VARIABLE( CFG_REPORT_MAX_LINK_SPEED, WLAN_PARAM_Integer, + REG_DYNAMIC_VARIABLE( CFG_REPORT_MAX_LINK_SPEED, WLAN_PARAM_Integer, hdd_config_t, reportMaxLinkSpeed, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_REPORT_MAX_LINK_SPEED_DEFAULT, @@ -1854,7 +2264,7 @@ REG_TABLE_ENTRY g_registry_table[] = CFG_REPORT_MAX_LINK_SPEED_MAX, NULL, 0 ), - REG_DYNAMIC_VARIABLE( CFG_LINK_SPEED_RSSI_HIGH, WLAN_PARAM_SignedInteger, + REG_DYNAMIC_VARIABLE( CFG_LINK_SPEED_RSSI_HIGH, WLAN_PARAM_SignedInteger, hdd_config_t, linkSpeedRssiHigh, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_LINK_SPEED_RSSI_HIGH_DEFAULT, @@ -1862,7 +2272,7 @@ REG_TABLE_ENTRY g_registry_table[] = CFG_LINK_SPEED_RSSI_HIGH_MAX, NULL, 0 ), - REG_DYNAMIC_VARIABLE( CFG_LINK_SPEED_RSSI_MID, WLAN_PARAM_SignedInteger, + REG_DYNAMIC_VARIABLE( CFG_LINK_SPEED_RSSI_MID, WLAN_PARAM_SignedInteger, hdd_config_t, linkSpeedRssiMid, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_LINK_SPEED_RSSI_MID_DEFAULT, @@ -1870,7 +2280,7 @@ REG_TABLE_ENTRY g_registry_table[] = CFG_LINK_SPEED_RSSI_MID_MAX, NULL, 0 ), - REG_DYNAMIC_VARIABLE( CFG_LINK_SPEED_RSSI_LOW, WLAN_PARAM_SignedInteger, + REG_DYNAMIC_VARIABLE( CFG_LINK_SPEED_RSSI_LOW, WLAN_PARAM_SignedInteger, hdd_config_t, linkSpeedRssiLow, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_LINK_SPEED_RSSI_LOW_DEFAULT, @@ -1879,7 +2289,7 @@ REG_TABLE_ENTRY g_registry_table[] = NULL, 0 ), #if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR) - REG_DYNAMIC_VARIABLE( CFG_ROAM_PREFER_5GHZ, WLAN_PARAM_Integer, + REG_DYNAMIC_VARIABLE( CFG_ROAM_PREFER_5GHZ, WLAN_PARAM_Integer, hdd_config_t, nRoamPrefer5GHz, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_ROAM_PREFER_5GHZ_DEFAULT, @@ -1887,7 +2297,7 @@ REG_TABLE_ENTRY g_registry_table[] = CFG_ROAM_PREFER_5GHZ_MAX, cbNotifySetRoamPrefer5GHz, 0 ), - REG_DYNAMIC_VARIABLE( CFG_ROAM_INTRA_BAND, WLAN_PARAM_Integer, + REG_DYNAMIC_VARIABLE( CFG_ROAM_INTRA_BAND, WLAN_PARAM_Integer, hdd_config_t, nRoamIntraBand, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_ROAM_INTRA_BAND_DEFAULT, @@ -1895,52 +2305,60 @@ REG_TABLE_ENTRY g_registry_table[] = CFG_ROAM_INTRA_BAND_MAX, cbNotifySetRoamIntraBand, 0 ), + REG_DYNAMIC_VARIABLE( CFG_ROAM_SCAN_N_PROBES, WLAN_PARAM_Integer, + hdd_config_t, nProbes, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_ROAM_SCAN_N_PROBES_DEFAULT, + CFG_ROAM_SCAN_N_PROBES_MIN, + CFG_ROAM_SCAN_N_PROBES_MAX, + cbNotifySetRoamScanNProbes, 0 ), + + REG_DYNAMIC_VARIABLE( CFG_ROAM_SCAN_HOME_AWAY_TIME, WLAN_PARAM_Integer, + hdd_config_t, nRoamScanHomeAwayTime, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_ROAM_SCAN_HOME_AWAY_TIME_DEFAULT, + CFG_ROAM_SCAN_HOME_AWAY_TIME_MIN, + CFG_ROAM_SCAN_HOME_AWAY_TIME_MAX, + cbNotifySetRoamScanHomeAwayTime, 0 ), + #endif - REG_VARIABLE( CFG_P2P_DEVICE_ADDRESS_ADMINISTRATED_NAME, WLAN_PARAM_Integer, + REG_VARIABLE( CFG_P2P_DEVICE_ADDRESS_ADMINISTRATED_NAME, WLAN_PARAM_Integer, hdd_config_t, isP2pDeviceAddrAdministrated, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_P2P_DEVICE_ADDRESS_ADMINISTRATED_DEFAULT, CFG_P2P_DEVICE_ADDRESS_ADMINISTRATED_MIN, CFG_P2P_DEVICE_ADDRESS_ADMINISTRATED_MAX ), -REG_VARIABLE( CFG_ENABLE_MCC_ENABLED_NAME, WLAN_PARAM_Integer, + REG_VARIABLE( CFG_ENABLE_MCC_ENABLED_NAME, WLAN_PARAM_Integer, hdd_config_t, enableMCC, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_ENABLE_MCC_ENABLED_DEFAULT, CFG_ENABLE_MCC_ENABLED_MIN, CFG_ENABLE_MCC_ENABLED_MAX ), -REG_VARIABLE( CFG_ALLOW_MCC_GO_DIFF_BI_NAME, WLAN_PARAM_Integer, + REG_VARIABLE( CFG_ALLOW_MCC_GO_DIFF_BI_NAME, WLAN_PARAM_Integer, hdd_config_t, allowMCCGODiffBI, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_ALLOW_MCC_GO_DIFF_BI_DEFAULT, CFG_ALLOW_MCC_GO_DIFF_BI_MIN, CFG_ALLOW_MCC_GO_DIFF_BI_MAX ), -REG_VARIABLE( CFG_THERMAL_MIGRATION_ENABLE_NAME, WLAN_PARAM_Integer, + REG_VARIABLE( CFG_THERMAL_MIGRATION_ENABLE_NAME, WLAN_PARAM_Integer, hdd_config_t, thermalMitigationEnable, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_THERMAL_MIGRATION_ENABLE_DEFAULT, CFG_THERMAL_MIGRATION_ENABLE_MIN, CFG_THERMAL_MIGRATION_ENABLE_MAX ), -#ifdef WLAN_FEATURE_PACKET_FILTERING - REG_VARIABLE( CFG_MC_ADDR_LIST_FILTER_NAME, WLAN_PARAM_Integer, - hdd_config_t, isMcAddrListFilter, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_MC_ADDR_LIST_FILTER_DEFAULT, - CFG_MC_ADDR_LIST_FILTER_MIN, - CFG_MC_ADDR_LIST_FILTER_MAX ), -#endif -REG_VARIABLE( CFG_ENABLE_MODULATED_DTIM_NAME, WLAN_PARAM_Integer, + REG_VARIABLE( CFG_ENABLE_MODULATED_DTIM_NAME, WLAN_PARAM_Integer, hdd_config_t, enableModulatedDTIM, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_ENABLE_MODULATED_DTIM_DEFAULT, CFG_ENABLE_MODULATED_DTIM_MIN, CFG_ENABLE_MODULATED_DTIM_MAX ), - REG_VARIABLE( CFG_MC_ADDR_LIST_ENABLE_NAME, WLAN_PARAM_Integer, + REG_VARIABLE( CFG_MC_ADDR_LIST_ENABLE_NAME, WLAN_PARAM_Integer, hdd_config_t, fEnableMCAddrList, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_MC_ADDR_LIST_ENABLE_DEFAULT, @@ -1948,21 +2366,21 @@ REG_VARIABLE( CFG_ENABLE_MODULATED_DTIM_NAME, WLAN_PARAM_Integer, CFG_MC_ADDR_LIST_ENABLE_MAX ), #ifdef WLAN_FEATURE_11AC -REG_VARIABLE( CFG_VHT_CHANNEL_WIDTH, WLAN_PARAM_Integer, + REG_VARIABLE( CFG_VHT_CHANNEL_WIDTH, WLAN_PARAM_Integer, hdd_config_t, vhtChannelWidth, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK, CFG_VHT_CHANNEL_WIDTH_DEFAULT, CFG_VHT_CHANNEL_WIDTH_MIN, CFG_VHT_CHANNEL_WIDTH_MAX), -REG_VARIABLE( CFG_VHT_ENABLE_RX_MCS_8_9, WLAN_PARAM_Integer, + REG_VARIABLE( CFG_VHT_ENABLE_RX_MCS_8_9, WLAN_PARAM_Integer, hdd_config_t, vhtRxMCS, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK, CFG_VHT_ENABLE_RX_MCS_8_9_DEFAULT, CFG_VHT_ENABLE_RX_MCS_8_9_MIN, CFG_VHT_ENABLE_RX_MCS_8_9_MAX), -REG_VARIABLE( CFG_VHT_ENABLE_TX_MCS_8_9, WLAN_PARAM_Integer, + REG_VARIABLE( CFG_VHT_ENABLE_TX_MCS_8_9, WLAN_PARAM_Integer, hdd_config_t, vhtTxMCS, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK, CFG_VHT_ENABLE_TX_MCS_8_9_DEFAULT, @@ -1990,12 +2408,6 @@ REG_VARIABLE( CFG_VHT_ENABLE_2x2_CAP_FEATURE, WLAN_PARAM_Integer, CFG_VHT_ENABLE_2x2_CAP_FEATURE_MIN, CFG_VHT_ENABLE_2x2_CAP_FEATURE_MAX ), -REG_VARIABLE( CFG_ENABLE_VHT_FOR_24GHZ_NAME, WLAN_PARAM_Integer, - hdd_config_t, enableVhtFor24GHzBand, - VAR_FLAGS_OPTIONAL, - CFG_ENABLE_VHT_FOR_24GHZ_DEFAULT, - CFG_ENABLE_VHT_FOR_24GHZ_MIN, - CFG_ENABLE_VHT_FOR_24GHZ_MAX), REG_VARIABLE( CFG_VHT_ENABLE_MU_BFORMEE_CAP_FEATURE, WLAN_PARAM_Integer, hdd_config_t, enableMuBformee, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, @@ -2039,41 +2451,41 @@ REG_VARIABLE( CFG_HT_SMPS_CAP_FEATURE, WLAN_PARAM_Integer, CFG_HT_SMPS_CAP_FEATURE_MIN, CFG_HT_SMPS_CAP_FEATURE_MAX ), -REG_VARIABLE( CFG_ENABLE_FIRST_SCAN_2G_ONLY_NAME, WLAN_PARAM_Integer, + REG_VARIABLE( CFG_ENABLE_FIRST_SCAN_2G_ONLY_NAME, WLAN_PARAM_Integer, hdd_config_t, enableFirstScan2GOnly, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_ENABLE_FIRST_SCAN_2G_ONLY_DEFAULT, CFG_ENABLE_FIRST_SCAN_2G_ONLY_MIN, CFG_ENABLE_FIRST_SCAN_2G_ONLY_MAX ), -REG_VARIABLE( CFG_ENABLE_SKIP_DFS_IN_P2P_SEARCH_NAME, WLAN_PARAM_Integer, + REG_VARIABLE( CFG_ENABLE_SKIP_DFS_IN_P2P_SEARCH_NAME, WLAN_PARAM_Integer, hdd_config_t, skipDfsChnlInP2pSearch, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_ENABLE_SKIP_DFS_IN_P2P_SEARCH_DEFAULT, CFG_ENABLE_SKIP_DFS_IN_P2P_SEARCH_MIN, CFG_ENABLE_SKIP_DFS_IN_P2P_SEARCH_MAX ), -REG_VARIABLE( CFG_IGNORE_DYNAMIC_DTIM_IN_P2P_MODE_NAME, WLAN_PARAM_Integer, + REG_VARIABLE( CFG_IGNORE_DYNAMIC_DTIM_IN_P2P_MODE_NAME, WLAN_PARAM_Integer, hdd_config_t, ignoreDynamicDtimInP2pMode, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_IGNORE_DYNAMIC_DTIM_IN_P2P_MODE_DEFAULT, CFG_IGNORE_DYNAMIC_DTIM_IN_P2P_MODE_MIN, CFG_IGNORE_DYNAMIC_DTIM_IN_P2P_MODE_MAX ), -REG_VARIABLE( CFG_NUM_BUFF_ADVERT_NAME, WLAN_PARAM_Integer, + REG_VARIABLE( CFG_NUM_BUFF_ADVERT_NAME, WLAN_PARAM_Integer, hdd_config_t,numBuffAdvert , VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK, CFG_NUM_BUFF_ADVERT_DEFAULT, CFG_NUM_BUFF_ADVERT_MIN, CFG_NUM_BUFF_ADVERT_MAX ), -REG_VARIABLE( CFG_MCC_CONFIG_PARAM_NAME, WLAN_PARAM_Integer, + REG_VARIABLE( CFG_MCC_CONFIG_PARAM_NAME, WLAN_PARAM_Integer, hdd_config_t, configMccParam, VAR_FLAGS_OPTIONAL, CFG_MCC_CONFIG_PARAM_DEFAULT, CFG_MCC_CONFIG_PARAM_MIN, CFG_MCC_CONFIG_PARAM_MAX ), -REG_VARIABLE( CFG_ENABLE_RX_STBC, WLAN_PARAM_Integer, + REG_VARIABLE( CFG_ENABLE_RX_STBC, WLAN_PARAM_Integer, hdd_config_t, enableRxSTBC, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_ENABLE_RX_STBC_DEFAULT, @@ -2094,93 +2506,121 @@ REG_VARIABLE( CFG_ENABLE_RX_LDPC, WLAN_PARAM_Integer, CFG_ENABLE_RX_LDPC_MAX ), #ifdef FEATURE_WLAN_TDLS -REG_VARIABLE( CFG_TDLS_SUPPORT_ENABLE, WLAN_PARAM_Integer, + REG_VARIABLE( CFG_TDLS_SUPPORT_ENABLE, WLAN_PARAM_Integer, hdd_config_t, fEnableTDLSSupport, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_TDLS_SUPPORT_ENABLE_DEFAULT, CFG_TDLS_SUPPORT_ENABLE_MIN, CFG_TDLS_SUPPORT_ENABLE_MAX ), -REG_VARIABLE( CFG_TDLS_IMPLICIT_TRIGGER, WLAN_PARAM_Integer, + REG_VARIABLE( CFG_TDLS_IMPLICIT_TRIGGER, WLAN_PARAM_Integer, hdd_config_t, fEnableTDLSImplicitTrigger, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_TDLS_IMPLICIT_TRIGGER_DEFAULT, CFG_TDLS_IMPLICIT_TRIGGER_MIN, CFG_TDLS_IMPLICIT_TRIGGER_MAX ), -REG_VARIABLE( CFG_TDLS_TX_STATS_PERIOD, WLAN_PARAM_Integer, + REG_VARIABLE( CFG_TDLS_TX_STATS_PERIOD, WLAN_PARAM_Integer, hdd_config_t, fTDLSTxStatsPeriod, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_TDLS_TX_STATS_PERIOD_DEFAULT, CFG_TDLS_TX_STATS_PERIOD_MIN, CFG_TDLS_TX_STATS_PERIOD_MAX ), -REG_VARIABLE( CFG_TDLS_TX_PACKET_THRESHOLD, WLAN_PARAM_Integer, + REG_VARIABLE( CFG_TDLS_TX_PACKET_THRESHOLD, WLAN_PARAM_Integer, hdd_config_t, fTDLSTxPacketThreshold, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_TDLS_TX_PACKET_THRESHOLD_DEFAULT, CFG_TDLS_TX_PACKET_THRESHOLD_MIN, CFG_TDLS_TX_PACKET_THRESHOLD_MAX ), -REG_VARIABLE( CFG_TDLS_DISCOVERY_PERIOD, WLAN_PARAM_Integer, + REG_VARIABLE( CFG_TDLS_DISCOVERY_PERIOD, WLAN_PARAM_Integer, hdd_config_t, fTDLSDiscoveryPeriod, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_TDLS_DISCOVERY_PERIOD_DEFAULT, CFG_TDLS_DISCOVERY_PERIOD_MIN, CFG_TDLS_DISCOVERY_PERIOD_MAX ), -REG_VARIABLE( CFG_TDLS_MAX_DISCOVERY_ATTEMPT, WLAN_PARAM_Integer, + REG_VARIABLE( CFG_TDLS_MAX_DISCOVERY_ATTEMPT, WLAN_PARAM_Integer, hdd_config_t, fTDLSMaxDiscoveryAttempt, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_TDLS_MAX_DISCOVERY_ATTEMPT_DEFAULT, CFG_TDLS_MAX_DISCOVERY_ATTEMPT_MIN, CFG_TDLS_MAX_DISCOVERY_ATTEMPT_MAX ), -REG_VARIABLE( CFG_TDLS_IDLE_TIMEOUT, WLAN_PARAM_Integer, + REG_VARIABLE( CFG_TDLS_IDLE_TIMEOUT, WLAN_PARAM_Integer, hdd_config_t, fTDLSIdleTimeout, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_TDLS_IDLE_TIMEOUT_DEFAULT, CFG_TDLS_IDLE_TIMEOUT_MIN, CFG_TDLS_IDLE_TIMEOUT_MAX ), -REG_VARIABLE( CFG_TDLS_IDLE_PACKET_THRESHOLD, WLAN_PARAM_Integer, + REG_VARIABLE( CFG_TDLS_IDLE_PACKET_THRESHOLD, WLAN_PARAM_Integer, hdd_config_t, fTDLSIdlePacketThreshold, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_TDLS_IDLE_PACKET_THRESHOLD_DEFAULT, CFG_TDLS_IDLE_PACKET_THRESHOLD_MIN, CFG_TDLS_IDLE_PACKET_THRESHOLD_MAX ), -REG_VARIABLE( CFG_TDLS_RSSI_HYSTERESIS, WLAN_PARAM_Integer, + REG_VARIABLE( CFG_TDLS_RSSI_HYSTERESIS, WLAN_PARAM_Integer, hdd_config_t, fTDLSRSSIHysteresis, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_TDLS_RSSI_HYSTERESIS_DEFAULT, CFG_TDLS_RSSI_HYSTERESIS_MIN, CFG_TDLS_RSSI_HYSTERESIS_MAX ), -REG_VARIABLE( CFG_TDLS_RSSI_TRIGGER_THRESHOLD, WLAN_PARAM_SignedInteger, + REG_VARIABLE( CFG_TDLS_RSSI_TRIGGER_THRESHOLD, WLAN_PARAM_SignedInteger, hdd_config_t, fTDLSRSSITriggerThreshold, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_TDLS_RSSI_TRIGGER_THRESHOLD_DEFAULT, CFG_TDLS_RSSI_TRIGGER_THRESHOLD_MIN, CFG_TDLS_RSSI_TRIGGER_THRESHOLD_MAX ), -REG_VARIABLE( CFG_TDLS_RSSI_TEARDOWN_THRESHOLD, WLAN_PARAM_SignedInteger, + REG_VARIABLE( CFG_TDLS_RSSI_TEARDOWN_THRESHOLD, WLAN_PARAM_SignedInteger, hdd_config_t, fTDLSRSSITeardownThreshold, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_TDLS_RSSI_TEARDOWN_THRESHOLD_DEFAULT, CFG_TDLS_RSSI_TEARDOWN_THRESHOLD_MIN, CFG_TDLS_RSSI_TEARDOWN_THRESHOLD_MAX ), + +REG_VARIABLE( CFG_TDLS_QOS_WMM_UAPSD_MASK_NAME , WLAN_PARAM_HexInteger, + hdd_config_t, fTDLSUapsdMask, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_TDLS_QOS_WMM_UAPSD_MASK_DEFAULT, + CFG_TDLS_QOS_WMM_UAPSD_MASK_MIN, + CFG_TDLS_QOS_WMM_UAPSD_MASK_MAX ), + +REG_VARIABLE( CFG_TDLS_BUFFER_STA_SUPPORT_ENABLE, WLAN_PARAM_Integer, + hdd_config_t, fEnableTDLSBufferSta, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_TDLS_BUFFER_STA_SUPPORT_ENABLE_DEFAULT, + CFG_TDLS_BUFFER_STA_SUPPORT_ENABLE_MIN, + CFG_TDLS_BUFFER_STA_SUPPORT_ENABLE_MAX ), + +REG_VARIABLE( CFG_TDLS_PUAPSD_INACTIVITY_TIME, WLAN_PARAM_Integer, + hdd_config_t, fTDLSPuapsdInactivityTimer, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_TDLS_PUAPSD_INACTIVITY_TIME_DEFAULT, + CFG_TDLS_PUAPSD_INACTIVITY_TIME_MIN, + CFG_TDLS_PUAPSD_INACTIVITY_TIME_MAX ), + +REG_VARIABLE( CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD, WLAN_PARAM_Integer, + hdd_config_t, fTDLSRxFrameThreshold, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_DEFAULT, + CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_MIN, + CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_MAX ), #endif #ifdef WLAN_SOFTAP_VSTA_FEATURE -REG_VARIABLE( CFG_VSTA_SUPPORT_ENABLE, WLAN_PARAM_Integer, + REG_VARIABLE( CFG_VSTA_SUPPORT_ENABLE, WLAN_PARAM_Integer, hdd_config_t, fEnableVSTASupport, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_VSTA_SUPPORT_ENABLE_DEFAULT, CFG_VSTA_SUPPORT_ENABLE_MIN, CFG_VSTA_SUPPORT_ENABLE_MAX ), #endif -REG_VARIABLE( CFG_ENABLE_LPWR_IMG_TRANSITION_NAME, WLAN_PARAM_Integer, + REG_VARIABLE( CFG_ENABLE_LPWR_IMG_TRANSITION_NAME, WLAN_PARAM_Integer, hdd_config_t, enableLpwrImgTransition, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_ENABLE_LPWR_IMG_TRANSITION_DEFAULT, @@ -2188,14 +2628,14 @@ REG_VARIABLE( CFG_ENABLE_LPWR_IMG_TRANSITION_NAME, WLAN_PARAM_Integer, CFG_ENABLE_LPWR_IMG_TRANSITION_MAX ), #ifdef WLAN_ACTIVEMODE_OFFLOAD_FEATURE -REG_VARIABLE( CFG_ACTIVEMODE_OFFLOAD_ENABLE, WLAN_PARAM_Integer, + REG_VARIABLE( CFG_ACTIVEMODE_OFFLOAD_ENABLE, WLAN_PARAM_Integer, hdd_config_t, fEnableActiveModeOffload, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_ACTIVEMODE_OFFLOAD_ENABLE_DEFAULT, CFG_ACTIVEMODE_OFFLOAD_ENABLE_MIN, CFG_ACTIVEMODE_OFFLOAD_ENABLE_MAX ), #endif -REG_VARIABLE( CFG_ENABLE_LPWR_IMG_TRANSITION_NAME, WLAN_PARAM_Integer, + REG_VARIABLE( CFG_ENABLE_LPWR_IMG_TRANSITION_NAME, WLAN_PARAM_Integer, hdd_config_t, enableLpwrImgTransition, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_ENABLE_LPWR_IMG_TRANSITION_DEFAULT, @@ -2203,42 +2643,42 @@ REG_VARIABLE( CFG_ENABLE_LPWR_IMG_TRANSITION_NAME, WLAN_PARAM_Integer, CFG_ENABLE_LPWR_IMG_TRANSITION_MAX ), -REG_VARIABLE( CFG_SCAN_AGING_PARAM_NAME, WLAN_PARAM_Integer, + REG_VARIABLE( CFG_SCAN_AGING_PARAM_NAME, WLAN_PARAM_Integer, hdd_config_t, scanAgingTimeout, VAR_FLAGS_OPTIONAL, CFG_SCAN_AGING_PARAM_DEFAULT, CFG_SCAN_AGING_PARAM_MIN, CFG_SCAN_AGING_PARAM_MAX ), -REG_VARIABLE( CFG_TX_LDPC_ENABLE_FEATURE, WLAN_PARAM_Integer, + REG_VARIABLE( CFG_TX_LDPC_ENABLE_FEATURE, WLAN_PARAM_Integer, hdd_config_t, enableTxLdpc, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_TX_LDPC_ENABLE_FEATURE_DEFAULT, CFG_TX_LDPC_ENABLE_FEATURE_MIN, CFG_TX_LDPC_ENABLE_FEATURE_MAX ), -REG_VARIABLE( CFG_ENABLE_MCC_ADATIVE_SCHEDULER_ENABLED_NAME, WLAN_PARAM_Integer, + REG_VARIABLE( CFG_ENABLE_MCC_ADATIVE_SCHEDULER_ENABLED_NAME, WLAN_PARAM_Integer, hdd_config_t, enableMCCAdaptiveScheduler, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_ENABLE_MCC_ADATIVE_SCHEDULER_ENABLED_DEFAULT, CFG_ENABLE_MCC_ADATIVE_SCHEDULER_ENABLED_MIN, CFG_ENABLE_MCC_ADATIVE_SCHEDULER_ENABLED_MAX ), -REG_VARIABLE( CFG_ANDRIOD_POWER_SAVE_NAME, WLAN_PARAM_Integer, + REG_VARIABLE( CFG_ANDRIOD_POWER_SAVE_NAME, WLAN_PARAM_Integer, hdd_config_t, isAndroidPsEn, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_ANDRIOD_POWER_SAVE_DEFAULT, CFG_ANDRIOD_POWER_SAVE_MIN, CFG_ANDRIOD_POWER_SAVE_MAX), -REG_VARIABLE( CFG_IBSS_ADHOC_CHANNEL_5GHZ_NAME, WLAN_PARAM_Integer, + REG_VARIABLE( CFG_IBSS_ADHOC_CHANNEL_5GHZ_NAME, WLAN_PARAM_Integer, hdd_config_t, AdHocChannel5G, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_IBSS_ADHOC_CHANNEL_5GHZ_DEFAULT, CFG_IBSS_ADHOC_CHANNEL_5GHZ_MIN, CFG_IBSS_ADHOC_CHANNEL_5GHZ_MAX), -REG_VARIABLE( CFG_IBSS_ADHOC_CHANNEL_24GHZ_NAME, WLAN_PARAM_Integer, + REG_VARIABLE( CFG_IBSS_ADHOC_CHANNEL_24GHZ_NAME, WLAN_PARAM_Integer, hdd_config_t, AdHocChannel24G, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_IBSS_ADHOC_CHANNEL_24GHZ_DEFAULT, @@ -2247,14 +2687,14 @@ REG_VARIABLE( CFG_IBSS_ADHOC_CHANNEL_24GHZ_NAME, WLAN_PARAM_Integer, #ifdef WLAN_FEATURE_11AC -REG_VARIABLE( CFG_VHT_SU_BEAMFORMEE_CAP_FEATURE, WLAN_PARAM_Integer, + REG_VARIABLE( CFG_VHT_SU_BEAMFORMEE_CAP_FEATURE, WLAN_PARAM_Integer, hdd_config_t, enableTxBF, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_VHT_SU_BEAMFORMEE_CAP_FEATURE_DEFAULT, CFG_VHT_SU_BEAMFORMEE_CAP_FEATURE_MIN, CFG_VHT_SU_BEAMFORMEE_CAP_FEATURE_MAX ), -REG_VARIABLE( CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED, WLAN_PARAM_Integer, + REG_VARIABLE( CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED, WLAN_PARAM_Integer, hdd_config_t, txBFCsnValue, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED_DEFAULT, @@ -2263,14 +2703,15 @@ REG_VARIABLE( CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED, WLAN_PARAM_Integer, #endif -REG_VARIABLE( CFG_SAP_ALLOW_ALL_CHANNEL_PARAM_NAME, WLAN_PARAM_Integer, + REG_VARIABLE( CFG_SAP_ALLOW_ALL_CHANNEL_PARAM_NAME, WLAN_PARAM_Integer, hdd_config_t, sapAllowAllChannel, VAR_FLAGS_OPTIONAL, CFG_SAP_ALLOW_ALL_CHANNEL_PARAM_DEFAULT, CFG_SAP_ALLOW_ALL_CHANNEL_PARAM_MIN, CFG_SAP_ALLOW_ALL_CHANNEL_PARAM_MAX ), + #ifdef WLAN_FEATURE_11AC -REG_VARIABLE( CFG_DISABLE_LDPC_WITH_TXBF_AP, WLAN_PARAM_Integer, + REG_VARIABLE( CFG_DISABLE_LDPC_WITH_TXBF_AP, WLAN_PARAM_Integer, hdd_config_t, disableLDPCWithTxbfAP, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, CFG_DISABLE_LDPC_WITH_TXBF_AP_DEFAULT, @@ -2278,7 +2719,7 @@ REG_VARIABLE( CFG_DISABLE_LDPC_WITH_TXBF_AP, WLAN_PARAM_Integer, CFG_DISABLE_LDPC_WITH_TXBF_AP_MAX ), #endif -REG_VARIABLE_STRING( CFG_LIST_OF_NON_DFS_COUNTRY_CODE, WLAN_PARAM_String, + REG_VARIABLE_STRING( CFG_LIST_OF_NON_DFS_COUNTRY_CODE, WLAN_PARAM_String, hdd_config_t, listOfNonDfsCountryCode, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, (void *)CFG_LIST_OF_NON_DFS_COUNTRY_CODE_DEFAULT), @@ -2291,17 +2732,142 @@ REG_VARIABLE_STRING( CFG_LIST_OF_NON_DFS_COUNTRY_CODE, WLAN_PARAM_String, CFG_ENABLE_SSR_MAX, cbNotifySetEnableSSR, 0 ), -REG_VARIABLE_STRING( CFG_LIST_OF_NON_11AC_COUNTRY_CODE, WLAN_PARAM_String, + REG_VARIABLE_STRING( CFG_LIST_OF_NON_11AC_COUNTRY_CODE, WLAN_PARAM_String, hdd_config_t, listOfNon11acCountryCode, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, (void *)CFG_LIST_OF_NON_11AC_COUNTRY_CODE_DEFAULT), -REG_VARIABLE( CFG_SCAN_OFFLOAD_NAME, WLAN_PARAM_Integer, - hdd_config_t, fScanOffload, + REG_VARIABLE(CFG_MAX_MEDIUM_TIME, WLAN_PARAM_Integer, + hdd_config_t, cfgMaxMediumTime, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_SCAN_OFFLOAD_DEFAULT, - CFG_SCAN_OFFLOAD_DISABLE, - CFG_SCAN_OFFLOAD_ENABLE ), + CFG_MAX_MEDIUM_TIME_STADEFAULT, + CFG_MAX_MEDIUM_TIME_STAMIN, + CFG_MAX_MEDIUM_TIME_STAMAX ), + + REG_VARIABLE( CFG_ENABLE_TRAFFIC_MONITOR, WLAN_PARAM_Integer, + hdd_config_t, enableTrafficMonitor, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_ENABLE_TRAFFIC_MONITOR_DEFAULT, + CFG_ENABLE_TRAFFIC_MONITOR_MIN, + CFG_ENABLE_TRAFFIC_MONITOR_MAX), + + REG_VARIABLE( CFG_TRAFFIC_IDLE_TIMEOUT, WLAN_PARAM_Integer, + hdd_config_t, trafficIdleTimeout, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_TRAFFIC_IDLE_TIMEOUT_DEFAULT, + CFG_TRAFFIC_IDLE_TIMEOUT_MIN, + CFG_TRAFFIC_IDLE_TIMEOUT_MAX), + +#ifdef WLAN_FEATURE_11AC + REG_VARIABLE( CFG_ENABLE_VHT_FOR_24GHZ_NAME, WLAN_PARAM_Integer, + hdd_config_t, enableVhtFor24GHzBand, + VAR_FLAGS_OPTIONAL, + CFG_ENABLE_VHT_FOR_24GHZ_DEFAULT, + CFG_ENABLE_VHT_FOR_24GHZ_MIN, + CFG_ENABLE_VHT_FOR_24GHZ_MAX), +#endif + + REG_VARIABLE( CFG_SCAN_OFFLOAD_NAME, WLAN_PARAM_Integer, + hdd_config_t, fScanOffload, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_SCAN_OFFLOAD_DEFAULT, + CFG_SCAN_OFFLOAD_DISABLE, + CFG_SCAN_OFFLOAD_ENABLE ), + +#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD + REG_DYNAMIC_VARIABLE( CFG_ENABLE_FAST_ROAM_IN_CONCURRENCY, WLAN_PARAM_Integer, + hdd_config_t, bFastRoamInConIniFeatureEnabled, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_ENABLE_FAST_ROAM_IN_CONCURRENCY_DEFAULT, + CFG_ENABLE_FAST_ROAM_IN_CONCURRENCY_MIN, + CFG_ENABLE_FAST_ROAM_IN_CONCURRENCY_MAX, + cbNotifySetEnableFastRoamInConcurrency, 0 ), +#endif + + REG_VARIABLE( CFG_ENABLE_ADAPT_RX_DRAIN_NAME, WLAN_PARAM_Integer, + hdd_config_t, fEnableAdaptRxDrain, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK , + CFG_ENABLE_ADAPT_RX_DRAIN_DEFAULT, + CFG_ENABLE_ADAPT_RX_DRAIN_MIN, + CFG_ENABLE_ADAPT_RX_DRAIN_MAX), + + REG_VARIABLE( CFG_DYNAMIC_SPLIT_SCAN_NAME, WLAN_PARAM_Integer, + hdd_config_t, dynSplitscan, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_DYNAMIC_SPLIT_SCAN_DEFAULT, + CFG_DYNAMIC_SPLIT_SCAN_MIN, + CFG_DYNAMIC_SPLIT_SCAN_MAX ), + + REG_VARIABLE( CFG_SPLIT_SCAN_TRAFFIC_MONITOR_THRSHLD_NAME, WLAN_PARAM_Integer, + hdd_config_t, txRxThresholdForSplitScan, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_SPLIT_SCAN_TRAFFIC_MONITOR_THRSHLD_DEFAULT, + CFG_SPLIT_SCAN_TRAFFIC_MONITOR_THRSHLD_MIN, + CFG_SPLIT_SCAN_TRAFFIC_MONITOR_THRSHLD_MAX ), + + REG_VARIABLE( CFG_SPLIT_SCAN_TRAFFIC_MONITOR_TIMER_NAME, WLAN_PARAM_Integer, + hdd_config_t, trafficMntrTmrForSplitScan, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_SPLIT_SCAN_TRAFFIC_MONITOR_TIMER_DEFAULT, + CFG_SPLIT_SCAN_TRAFFIC_MONITOR_TIMER_MIN, + CFG_SPLIT_SCAN_TRAFFIC_MONITOR_TIMER_MAX ), + + REG_VARIABLE( CFG_FLEX_CONNECT_POWER_FACTOR_NAME, WLAN_PARAM_Integer, + hdd_config_t, flexConnectPowerFactor, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_MINMAX, + CFG_FLEX_CONNECT_POWER_FACTOR_DEFAULT, + CFG_FLEX_CONNECT_POWER_FACTOR_MIN, + CFG_FLEX_CONNECT_POWER_FACTOR_MAX ), + + REG_VARIABLE( CFG_ENABLE_HEART_BEAT_OFFLOAD, WLAN_PARAM_Integer, + hdd_config_t, enableIbssHeartBeatOffload, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_ENABLE_HEART_BEAT_OFFLOAD_DEFAULT, + CFG_ENABLE_HEART_BEAT_OFFLOAD_MIN, + CFG_ENABLE_HEART_BEAT_OFFLOAD_MAX), + + REG_VARIABLE( CFG_ANTENNA_DIVERSITY_PARAM_NAME, WLAN_PARAM_Integer, + hdd_config_t, antennaDiversity, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_ANTENNA_DIVERSITY_PARAM_DEFAULT, + CFG_ANTENNA_DIVERSITY_PARAM_MIN, + CFG_ANTENNA_DIVERSITY_PARAM_MAX), + + REG_VARIABLE( CFG_ENABLE_SNR_MONITORING_NAME, WLAN_PARAM_Integer, + hdd_config_t, fEnableSNRMonitoring, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK , + CFG_ENABLE_SNR_MONITORING_DEFAULT, + CFG_ENABLE_SNR_MONITORING_MIN, + CFG_ENABLE_SNR_MONITORING_MAX), + +#ifdef FEATURE_WLAN_SCAN_PNO + REG_VARIABLE( CFG_PNO_SCAN_SUPPORT, WLAN_PARAM_Integer, + hdd_config_t, configPNOScanSupport, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_PNO_SCAN_SUPPORT_DEFAULT, + CFG_PNO_SCAN_SUPPORT_DISABLE, + CFG_PNO_SCAN_SUPPORT_ENABLE), + + REG_VARIABLE( CFG_PNO_SCAN_TIMER_REPEAT_VALUE, WLAN_PARAM_Integer, + hdd_config_t, configPNOScanTimerRepeatValue, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_PNO_SCAN_TIMER_REPEAT_VALUE_DEFAULT, + CFG_PNO_SCAN_TIMER_REPEAT_VALUE_MIN, + CFG_PNO_SCAN_TIMER_REPEAT_VALUE_MAX), +#endif + REG_VARIABLE( CFG_AMSDU_SUPPORT_IN_AMPDU_NAME , WLAN_PARAM_Integer, + hdd_config_t, isAmsduSupportInAMPDU, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_AMSDU_SUPPORT_IN_AMPDU_DEFAULT, + CFG_AMSDU_SUPPORT_IN_AMPDU_MIN, + CFG_AMSDU_SUPPORT_IN_AMPDU_MAX ), + + REG_VARIABLE( CFG_STRICT_5GHZ_PREF_BY_MARGIN , WLAN_PARAM_Integer, + hdd_config_t, nSelect5GHzMargin, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_STRICT_5GHZ_PREF_BY_MARGIN_DEFAULT, + CFG_STRICT_5GHZ_PREF_BY_MARGIN_MIN, + CFG_STRICT_5GHZ_PREF_BY_MARGIN_MAX ), REG_VARIABLE( CFG_ENABLE_TCP_CHKSUM_OFFLOAD, WLAN_PARAM_Integer, hdd_config_t, enableTCPChkSumOffld, @@ -2375,12 +2941,12 @@ REG_VARIABLE( CFG_WOW_STATUS_NAME, WLAN_PARAM_Integer, CFG_WOW_ENABLE_MIN, CFG_WOW_ENABLE_MAX), -REG_VARIABLE( CFG_COALESING_IN_IBSS_NAME , WLAN_PARAM_Integer, - hdd_config_t, isCoalesingInIBSSAllowed, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_COALESING_IN_IBSS_DEFAULT, - CFG_COALESING_IN_IBSS_MIN, - CFG_COALESING_IN_IBSS_MAX ), + REG_VARIABLE( CFG_COALESING_IN_IBSS_NAME , WLAN_PARAM_Integer, + hdd_config_t, isCoalesingInIBSSAllowed, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_COALESING_IN_IBSS_DEFAULT, + CFG_COALESING_IN_IBSS_MIN, + CFG_COALESING_IN_IBSS_MAX ), }; /* @@ -2509,7 +3075,7 @@ VOS_STATUS hdd_parse_config_ini(hdd_context_t* pHddCtx) goto config_exit; } - hddLog(LOG1, "%s: qcom_cfg.ini Size %d\n",__func__, fw->size); + hddLog(LOG1, "%s: qcom_cfg.ini Size %zu", __func__, fw->size); buffer = (char*)vos_mem_malloc(fw->size); @@ -2669,6 +3235,7 @@ static void print_hdd_cfg(hdd_context_t *pHddCtx) #endif #ifdef FEATURE_WLAN_LFR VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [FastRoamEnabled] Value = [%lu] ",pHddCtx->cfg_ini->isFastRoamIniFeatureEnabled); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [MAWCEnabled] Value = [%u] ",pHddCtx->cfg_ini->MAWCEnabled); #endif #if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR) VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [RoamRssiDiff] Value = [%lu] ",pHddCtx->cfg_ini->RoamRssiDiff); @@ -2710,7 +3277,6 @@ static void print_hdd_cfg(hdd_context_t *pHddCtx) VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [mcastBcastFilterSetting] Value = [%u] ",pHddCtx->cfg_ini->mcastBcastFilterSetting); VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [fhostArpOffload] Value = [%u] ",pHddCtx->cfg_ini->fhostArpOffload); #ifdef WLAN_FEATURE_VOWIFI_11R - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [fFTEnable] Value = [%lu] ",pHddCtx->cfg_ini->fFTEnable); VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [fFTResourceReqSupported] Value = [%lu] ",pHddCtx->cfg_ini->fFTResourceReqSupported); #endif @@ -2753,7 +3319,6 @@ static void print_hdd_cfg(hdd_context_t *pHddCtx) VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [thermalMitigationEnable] Value = [%u] ",pHddCtx->cfg_ini->thermalMitigationEnable); #ifdef WLAN_FEATURE_11AC VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gVhtChannelWidth] value = [%u]\n",pHddCtx->cfg_ini->vhtChannelWidth); - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gEnableVhtFor24GHzBand] Value = [%u] ",pHddCtx->cfg_ini->enableVhtFor24GHzBand); #endif VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [enableFirstScan2GOnly] Value = [%u] ",pHddCtx->cfg_ini->enableFirstScan2GOnly); VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [skipDfsChnlInP2pSearch] Value = [%u] ",pHddCtx->cfg_ini->skipDfsChnlInP2pSearch); @@ -2761,7 +3326,20 @@ static void print_hdd_cfg(hdd_context_t *pHddCtx) VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [enableRxSTBC] Value = [%u] ",pHddCtx->cfg_ini->enableRxSTBC); VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gEnableLpwrImgTransition] Value = [%u] ",pHddCtx->cfg_ini->enableLpwrImgTransition); VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gEnableSSR] Value = [%u] ",pHddCtx->cfg_ini->enableSSR); - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gCoalesingInIBSS] Value = [%lu] " ,pHddCtx->cfg_ini->isCoalesingInIBSSAllowed); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gEnableVhtFor24GHzBand] Value = [%u] ",pHddCtx->cfg_ini->enableVhtFor24GHzBand); + + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gEnableTrafficMonitor] Value = [%u] ", pHddCtx->cfg_ini->enableTrafficMonitor); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gTrafficIdleTimeout] Value = [%u] ", pHddCtx->cfg_ini->trafficIdleTimeout); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gFlexConnectPowerFactor] Value = [%u] ", pHddCtx->cfg_ini->flexConnectPowerFactor); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gEnableIbssHeartBeatOffload] Value = [%u] ", pHddCtx->cfg_ini->enableIbssHeartBeatOffload); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gAntennaDiversity] Value = [%u] ", pHddCtx->cfg_ini->antennaDiversity); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gGoLinkMonitorPeriod] Value = [%u]",pHddCtx->cfg_ini->goLinkMonitorPeriod); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gApLinkMonitorPeriod] Value = [%u]",pHddCtx->cfg_ini->apLinkMonitorPeriod); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gGoKeepAlivePeriod] Value = [%u]",pHddCtx->cfg_ini->goKeepAlivePeriod); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gApKeepAlivePeriod]Value = [%u]",pHddCtx->cfg_ini->apKeepAlivePeriod); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gAmsduSupportInAMPDU] Value = [%lu] ",pHddCtx->cfg_ini->isAmsduSupportInAMPDU); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [nSelect5GHzMargin] Value = [%lu] ",pHddCtx->cfg_ini->nSelect5GHzMargin); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gCoalesingInIBSS] Value = [%u] ",pHddCtx->cfg_ini->isCoalesingInIBSSAllowed); } @@ -2830,7 +3408,7 @@ VOS_STATUS hdd_cfg_get_config(hdd_context_t *pHddCtx, char *pBuf, int buflen) { snprintf(valueStr, CFG_VALUE_MAX_LEN, "(unhandled)"); } - curlen = snprintf(configStr, CFG_ENTRY_MAX_LEN, + curlen = scnprintf(configStr, CFG_ENTRY_MAX_LEN, "%s=[%s]%s\n", pRegEntry->RegName, valueStr, @@ -2946,7 +3524,7 @@ static VOS_STATUS hdd_apply_cfg_ini( hdd_context_t *pHddCtx, tCfgIniEntry* iniTa // If successfully read from the registry, use the value read. // If not, use the default value. if ( match_status == VOS_STATUS_SUCCESS && (WLAN_PARAM_Integer == pRegEntry->RegType)) { - rv = kstrtoul(value_str, 10, &value); + rv = kstrtou32(value_str, 10, &value); if (rv < 0) { hddLog(LOGE, "%s: Reg Parameter %s invalid. Enforcing default", __func__, pRegEntry->RegName); @@ -2954,7 +3532,7 @@ static VOS_STATUS hdd_apply_cfg_ini( hdd_context_t *pHddCtx, tCfgIniEntry* iniTa } } else if ( match_status == VOS_STATUS_SUCCESS && (WLAN_PARAM_HexInteger == pRegEntry->RegType)) { - rv = kstrtoul(value_str, 16, &value); + rv = kstrtou32(value_str, 16, &value); if (rv < 0) { hddLog(LOGE, "%s: Reg paramter %s invalid. Enforcing default", __func__, pRegEntry->RegName); @@ -3009,7 +3587,7 @@ static VOS_STATUS hdd_apply_cfg_ini( hdd_context_t *pHddCtx, tCfgIniEntry* iniTa // If not, use the default value. if (VOS_STATUS_SUCCESS == match_status) { - rv = kstrtol(value_str, 10, &svalue); + rv = kstrtos32(value_str, 10, &svalue); if (rv < 0) { hddLog(VOS_TRACE_LEVEL_WARN, "%s: Reg Parameter %s invalid. Enforcing Default", __func__, pRegEntry->RegName); @@ -3138,6 +3716,10 @@ static VOS_STATUS hdd_apply_cfg_ini( hdd_context_t *pHddCtx, tCfgIniEntry* iniTa } } + // Keep qcacld-2.0 specific ini params disabled for non-qcacld-2.0 +#ifndef QCA_WIFI_2_0 + pHddCtx->cfg_ini->enablePowersaveOffload = 0; +#endif print_hdd_cfg(pHddCtx); return( ret_status ); @@ -3178,6 +3760,7 @@ static void hdd_set_btc_config(hdd_context_t *pHddCtx) { hdd_config_t *pConfig = pHddCtx->cfg_ini; tSmeBtcConfig btcParams; + int i; sme_BtcGetConfig(pHddCtx->hHal, &btcParams); @@ -3199,6 +3782,20 @@ static void hdd_set_btc_config(hdd_context_t *pHddCtx) btcParams.btcDhcpProtOnA2dp = pConfig->btcDhcpProtOnA2dp; btcParams.btcDhcpProtOnSco = pConfig->btcDhcpProtOnSco; + for (i = 0; i < 10; i++) + { + btcParams.mwsCoexVictimWANFreq[i] = pConfig->mwsCoexVictimWANFreq[i]; + btcParams.mwsCoexVictimWLANFreq[i] = pConfig->mwsCoexVictimWLANFreq[i]; + btcParams.mwsCoexVictimConfig[i] = pConfig->mwsCoexVictimConfig[i]; + btcParams.mwsCoexVictimConfig2[i] = pConfig->mwsCoexVictimConfig2[i]; + } + for (i = 0; i < 6; i++) + { + btcParams.mwsCoexConfig[i] = pConfig->mwsCoexConfig[i]; + } + btcParams.mwsCoexModemBackoff = pConfig->mwsCoexModemBackoff; + btcParams.SARPowerBackoff = pConfig->SARPowerBackoff; + sme_BtcSetConfig(pHddCtx->hHal, &btcParams); } @@ -3562,18 +4159,6 @@ v_BOOL_t hdd_update_config_dat( hdd_context_t *pHddCtx ) hddLog(LOGE, "Failure: Could not pass on WNI_CFG_PS_BCN_FILTER configuration info to CCM\n"); } -#ifdef FEATURE_WLAN_LFR - if (pConfig->isFastRoamIniFeatureEnabled) - { - pConfig->fEnableFwRssiMonitoring = TRUE; - } -#endif -#ifdef FEATURE_WLAN_CCX - if (pConfig->isCcxIniFeatureEnabled) - { - pConfig->fEnableFwRssiMonitoring = TRUE; - } -#endif if (ccmCfgSetInt(pHddCtx->hHal, WNI_CFG_PS_ENABLE_RSSI_MONITOR, pConfig->fEnableFwRssiMonitoring, NULL, eANI_BOOLEAN_FALSE)==eHAL_STATUS_FAILURE) { @@ -3630,6 +4215,14 @@ v_BOOL_t hdd_update_config_dat( hdd_context_t *pHddCtx ) hddLog(LOGE, "Could not pass on WNI_CFG_AP_LINK_MONITOR_TIMEOUT to CCM\n"); } + if (ccmCfgSetInt(pHddCtx->hHal, WNI_CFG_GO_LINK_MONITOR_TIMEOUT, pConfig->goLinkMonitorPeriod, + NULL, eANI_BOOLEAN_FALSE)==eHAL_STATUS_FAILURE) + { + fStatus = FALSE; + hddLog(LOGE, "Could not pass on WNI_CFG_GO_LINK_MONITOR_TIMEOUT to CCM\n"); + } + + #if defined WLAN_FEATURE_VOWIFI if (ccmCfgSetInt(pHddCtx->hHal, WNI_CFG_RRM_ENABLED, pConfig->fRrmEnable, NULL, eANI_BOOLEAN_FALSE)==eHAL_STATUS_FAILURE) @@ -4004,6 +4597,70 @@ v_BOOL_t hdd_update_config_dat( hdd_context_t *pHddCtx ) hddLog(LOGE, "Could not pass on WNI_CFG_DYNAMIC_THRESHOLD_TWO to CCM"); } + if (ccmCfgSetInt(pHddCtx->hHal, WNI_CFG_MAX_MEDIUM_TIME, pConfig->cfgMaxMediumTime, + NULL, eANI_BOOLEAN_FALSE) == eHAL_STATUS_FAILURE) + { + fStatus = FALSE; + hddLog(LOGE, "Could not pass on WNI_CFG_MAX_MEDIUM_TIME to CCM"); + } + +#ifdef FEATURE_WLAN_TDLS + + if (ccmCfgSetInt(pHddCtx->hHal, WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK, + pConfig->fTDLSUapsdMask, NULL, + eANI_BOOLEAN_FALSE) == eHAL_STATUS_FAILURE) + { + fStatus = FALSE; + hddLog(LOGE, "Could not pass on WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK to CCM"); + } + if (ccmCfgSetInt(pHddCtx->hHal, WNI_CFG_TDLS_BUF_STA_ENABLED, + pConfig->fEnableTDLSBufferSta, NULL, + eANI_BOOLEAN_FALSE) == eHAL_STATUS_FAILURE) + { + fStatus = FALSE; + hddLog(LOGE, "Could not pass on WNI_CFG_TDLS_BUF_STA_ENABLED to CCM"); + } + if (ccmCfgSetInt(pHddCtx->hHal, WNI_CFG_TDLS_PUAPSD_INACT_TIME, + pConfig->fTDLSPuapsdInactivityTimer, NULL, + eANI_BOOLEAN_FALSE) == eHAL_STATUS_FAILURE) + { + fStatus = FALSE; + hddLog(LOGE, "Could not pass on WNI_CFG_TDLS_PUAPSD_INACT_TIME to CCM"); + } + if (ccmCfgSetInt(pHddCtx->hHal, WNI_CFG_TDLS_RX_FRAME_THRESHOLD, + pConfig->fTDLSRxFrameThreshold, NULL, + eANI_BOOLEAN_FALSE) == eHAL_STATUS_FAILURE) + { + fStatus = FALSE; + hddLog(LOGE, "Could not pass on WNI_CFG_TDLS_RX_FRAME_THRESHOLD to CCM"); + } +#endif + + if (ccmCfgSetInt(pHddCtx->hHal, WNI_CFG_ENABLE_ADAPT_RX_DRAIN, + pConfig->fEnableAdaptRxDrain, NULL, + eANI_BOOLEAN_FALSE) == eHAL_STATUS_FAILURE) + { + fStatus = FALSE; + hddLog(LOGE, "Could not pass on WNI_CFG_ENABLE_ADAPT_RX_DRAIN to CCM"); + } + + if (ccmCfgSetInt(pHddCtx->hHal, WNI_CFG_FLEX_CONNECT_POWER_FACTOR, + pConfig->flexConnectPowerFactor, NULL, + eANI_BOOLEAN_FALSE) == eHAL_STATUS_FAILURE) + { + fStatus = FALSE; + hddLog(LOGE, "Failure: Could not pass on " + "WNI_CFG_FLEX_CONNECT_POWER_FACTOR to CCM"); + } + + if (ccmCfgSetInt(pHddCtx->hHal, WNI_CFG_ANTENNA_DIVESITY, + pConfig->antennaDiversity, NULL, + eANI_BOOLEAN_FALSE)==eHAL_STATUS_FAILURE) + { + fStatus = FALSE; + hddLog(LOGE, "Could not pass on WNI_CFG_ANTENNA_DIVESITY to CCM"); + } + return fStatus; } @@ -4028,6 +4685,7 @@ VOS_STATUS hdd_set_sme_config( hdd_context_t *pHddCtx ) hdd_config_t *pConfig = pHddCtx->cfg_ini; + vos_mem_zero( &smeConfig, sizeof( smeConfig ) ); VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, @@ -4035,8 +4693,9 @@ VOS_STATUS hdd_set_sme_config( hdd_context_t *pHddCtx ) pConfig->WmmMode, pConfig->b80211eIsEnabled, pConfig->dot11Mode); // Config params obtained from the registry - if (is_crda_regulatory_entry_valid() == VOS_TRUE) - sme_setRegInfo(pHddCtx->hHal, pConfig->crdaDefaultCountryCode); + /* To Do */ + // set regulatory information here + smeConfig.csrConfig.RTSThreshold = pConfig->RTSThreshold; smeConfig.csrConfig.FragmentationThreshold = pConfig->FragmentationThreshold; smeConfig.csrConfig.shortSlotTime = pConfig->ShortSlotTimeEnabled; @@ -4069,13 +4728,16 @@ VOS_STATUS hdd_set_sme_config( hdd_context_t *pHddCtx ) smeConfig.csrConfig.nPassiveMinChnTime = pConfig->nPassiveMinChnTime; smeConfig.csrConfig.nActiveMaxChnTimeBtc = pConfig->nActiveMaxChnTimeBtc; smeConfig.csrConfig.nActiveMinChnTimeBtc = pConfig->nActiveMinChnTimeBtc; + smeConfig.csrConfig.disableAggWithBtc = pConfig->disableAggWithBtc; #ifdef WLAN_AP_STA_CONCURRENCY smeConfig.csrConfig.nActiveMaxChnTimeConc = pConfig->nActiveMaxChnTimeConc; smeConfig.csrConfig.nActiveMinChnTimeConc = pConfig->nActiveMinChnTimeConc; smeConfig.csrConfig.nPassiveMaxChnTimeConc = pConfig->nPassiveMaxChnTimeConc; smeConfig.csrConfig.nPassiveMinChnTimeConc = pConfig->nPassiveMinChnTimeConc; smeConfig.csrConfig.nRestTimeConc = pConfig->nRestTimeConc; - smeConfig.csrConfig.nNumChanCombinedConc = pConfig->nNumChanCombinedConc; + smeConfig.csrConfig.nNumStaChanCombinedConc = pConfig->nNumStaChanCombinedConc; + smeConfig.csrConfig.nNumP2PChanCombinedConc = pConfig->nNumP2PChanCombinedConc; + #endif smeConfig.csrConfig.Is11eSupportEnabled = pConfig->b80211eIsEnabled; smeConfig.csrConfig.WMMSupportMode = pConfig->WmmMode; @@ -4119,6 +4781,18 @@ VOS_STATUS hdd_set_sme_config( hdd_context_t *pHddCtx ) #if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR) smeConfig.csrConfig.nRoamPrefer5GHz = pConfig->nRoamPrefer5GHz; smeConfig.csrConfig.nRoamIntraBand = pConfig->nRoamIntraBand; + smeConfig.csrConfig.nProbes = pConfig->nProbes; + + if (pConfig->nRoamScanHomeAwayTime < (pConfig->nNeighborScanMaxChanTime + (2 * HDD_ROAM_SCAN_CHANNEL_SWITCH_TIME))) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, + "%s: Invalid config, Home away time(%d) is less than twice RF switching time + channel max time(%d)" + " Hence enforcing home away time to disable (0)", + __func__, pConfig->nRoamScanHomeAwayTime, + (pConfig->nNeighborScanMaxChanTime + (2 * HDD_ROAM_SCAN_CHANNEL_SWITCH_TIME))); + pConfig->nRoamScanHomeAwayTime = 0; + } + smeConfig.csrConfig.nRoamScanHomeAwayTime = pConfig->nRoamScanHomeAwayTime; #endif smeConfig.csrConfig.fFirstScanOnly2GChnl = pConfig->enableFirstScan2GOnly; @@ -4158,10 +4832,7 @@ VOS_STATUS hdd_set_sme_config( hdd_context_t *pHddCtx ) #endif #ifdef FEATURE_WLAN_LFR smeConfig.csrConfig.isFastRoamIniFeatureEnabled = pConfig->isFastRoamIniFeatureEnabled; - if( pConfig->isFastRoamIniFeatureEnabled ) - { - pConfig->isFastTransitionEnabled = TRUE; - } + smeConfig.csrConfig.MAWCEnabled = pConfig->MAWCEnabled; #endif #ifdef FEATURE_WLAN_CCX smeConfig.csrConfig.isCcxIniFeatureEnabled = pConfig->isCcxIniFeatureEnabled; @@ -4172,12 +4843,23 @@ VOS_STATUS hdd_set_sme_config( hdd_context_t *pHddCtx ) #endif #if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR) smeConfig.csrConfig.isFastTransitionEnabled = pConfig->isFastTransitionEnabled; + if (pConfig->nSelect5GHzMargin) + { + pConfig->RoamRssiDiff = 0; + } smeConfig.csrConfig.RoamRssiDiff = pConfig->RoamRssiDiff; smeConfig.csrConfig.nImmediateRoamRssiDiff = pConfig->nImmediateRoamRssiDiff; smeConfig.csrConfig.isWESModeEnabled = pConfig->isWESModeEnabled; #endif #ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD smeConfig.csrConfig.isRoamOffloadScanEnabled = pConfig->isRoamOffloadScanEnabled; + smeConfig.csrConfig.bFastRoamInConIniFeatureEnabled = pConfig->bFastRoamInConIniFeatureEnabled; + + if (0 == smeConfig.csrConfig.isRoamOffloadScanEnabled) + { + /* Disable roaming in concurrency if roam scan offload is disabled */ + smeConfig.csrConfig.bFastRoamInConIniFeatureEnabled = 0; + } #endif #ifdef WLAN_FEATURE_NEIGHBOR_ROAMING smeConfig.csrConfig.neighborRoamConfig.nNeighborReassocRssiThreshold = pConfig->nNeighborReassocRssiThreshold; @@ -4206,9 +4888,11 @@ VOS_STATUS hdd_set_sme_config( hdd_context_t *pHddCtx ) smeConfig.csrConfig.enableTxLdpc = pConfig->enableTxLdpc; - smeConfig.csrConfig.isCoalesingInIBSSAllowed = - pHddCtx->cfg_ini->isCoalesingInIBSSAllowed; + smeConfig.csrConfig.isAmsduSupportInAMPDU = pConfig->isAmsduSupportInAMPDU; + smeConfig.csrConfig.nSelect5GHzMargin = pConfig->nSelect5GHzMargin; + smeConfig.csrConfig.isCoalesingInIBSSAllowed = + pHddCtx->cfg_ini->isCoalesingInIBSSAllowed; /* update SSR config */ @@ -4216,8 +4900,10 @@ VOS_STATUS hdd_set_sme_config( hdd_context_t *pHddCtx ) /* Update the Directed scan offload setting */ smeConfig.fScanOffload = pHddCtx->cfg_ini->fScanOffload; +#ifdef QCA_WIFI_2_0 /* Update the p2p listen offload setting */ smeConfig.fP2pListenOffload = pHddCtx->cfg_ini->fP2pListenOffload; +#endif #ifdef FEATURE_WLAN_SCAN_PNO /* Update PNO offoad status */ @@ -4357,7 +5043,7 @@ VOS_STATUS hdd_execute_config_command(hdd_context_t *pHddCtx, char *command) switch (pRegEntry->RegType) { case WLAN_PARAM_Integer: - rv = kstrtoul(value_str, 10, &value); + rv = kstrtou32(value_str, 10, &value); if (rv < 0) goto done; if (value < pRegEntry->VarMin) @@ -4378,7 +5064,7 @@ VOS_STATUS hdd_execute_config_command(hdd_context_t *pHddCtx, char *command) break; case WLAN_PARAM_HexInteger: - rv = kstrtoul(value_str, 16, &value); + rv = kstrtou32(value_str, 16, &value); if (rv < 0) goto done; if (value < pRegEntry->VarMin) @@ -4399,7 +5085,7 @@ VOS_STATUS hdd_execute_config_command(hdd_context_t *pHddCtx, char *command) break; case WLAN_PARAM_SignedInteger: - rv = kstrtol(value_str, 10, &svalue); + rv = kstrtos32(value_str, 10, &svalue); if (rv < 0) goto done; if (svalue < (v_S31_t)pRegEntry->VarMin) @@ -4426,7 +5112,7 @@ VOS_STATUS hdd_execute_config_command(hdd_context_t *pHddCtx, char *command) // too big hddLog(LOGE, "%s: invalid command, string [%s] length " - "%u exceeds maximum length %u", + "%zu exceeds maximum length %u", __func__, value_str, len_value_str, (pRegEntry->VarSize - 1)); goto done; @@ -4442,7 +5128,7 @@ VOS_STATUS hdd_execute_config_command(hdd_context_t *pHddCtx, char *command) // out of range hddLog(LOGE, "%s: invalid command, MAC address [%s] length " - "%u is not expected length %u", + "%zu is not expected length %u", __func__, value_str, len_value_str, (VOS_MAC_ADDR_SIZE * 2)); goto done; diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c index 17ee8926a8b4..59730c50bad8 100644 --- a/CORE/HDD/src/wlan_hdd_cfg80211.c +++ b/CORE/HDD/src/wlan_hdd_cfg80211.c @@ -89,20 +89,18 @@ #include #ifdef FEATURE_WLAN_TDLS #include "wlan_hdd_tdls.h" +#include "wlan_hdd_wmm.h" +#include "wlan_qct_wda.h" #endif #include "wlan_nv.h" -#ifdef QCA_WIFI_2_0 -#include "vos_sched.h" -#endif -#if defined(QCA_WIFI_2_0) && defined(QCA_WIFI_FTM) && !defined(QCA_WIFI_ISOC) -#include "testmode.h" -#endif +#include "wlan_hdd_dev_pwr.h" #define g_mode_rates_size (12) #define a_mode_rates_size (8) #define FREQ_BASE_80211G (2407) #define FREQ_BAND_DIFF_80211G (5) #define MAX_SCAN_SSID 9 +#define MAX_PENDING_LOG 5 #define GET_IE_LEN_IN_BSS_DESC(lenInBss) ( lenInBss + sizeof(lenInBss) - \ ((int) OFFSET_OF( tSirBssDescription, ieFields))) @@ -162,11 +160,13 @@ static const u32 hdd_cipher_suites[] = #endif }; +#ifndef QCA_WIFI_2_0 static inline int is_broadcast_ether_addr(const u8 *addr) { return ((addr[0] == 0xff) && (addr[1] == 0xff) && (addr[2] == 0xff) && (addr[3] == 0xff) && (addr[4] == 0xff) && (addr[5] == 0xff)); } +#endif static struct ieee80211_channel hdd_channels_2_4_GHZ[] = { @@ -313,6 +313,14 @@ static struct ieee80211_supported_band wlan_hdd_band_5_GHZ = .ht_cap.mcs.rx_mask = { 0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, .ht_cap.mcs.rx_highest = cpu_to_le16( 72 ), .ht_cap.mcs.tx_params = IEEE80211_HT_MCS_TX_DEFINED, + .vht_cap.vht_supported = 1, + .vht_cap.cap = IEEE80211_VHT_CAP_MAX_MPDU_LENGTH_11454 + | IEEE80211_VHT_CAP_SHORT_GI_80 + | IEEE80211_VHT_CAP_TXSTBC + | (IEEE80211_VHT_CAP_RXSTBC_MASK & + ( IEEE80211_VHT_CAP_RXSTBC_1 + | IEEE80211_VHT_CAP_RXSTBC_2)) + | IEEE80211_VHT_CAP_RXLDPC }; /* This structure contain information what kind of frame are expected in @@ -385,7 +393,11 @@ wlan_hdd_iface_limit[] = { * interface type to 4 to support both p2p client and p2p GO * combinations. */ +#ifndef QCA_WIFI_2_0 + .max = 3, +#else .max = 4, +#endif .types = BIT(NL80211_IFTYPE_STATION), }, { @@ -393,7 +405,11 @@ wlan_hdd_iface_limit[] = { .types = BIT(NL80211_IFTYPE_ADHOC) | BIT(NL80211_IFTYPE_AP), }, { +#ifndef QCA_WIFI_2_0 + .max = 1, +#else .max = 2, +#endif .types = BIT(NL80211_IFTYPE_P2P_GO) | BIT(NL80211_IFTYPE_P2P_CLIENT), }, @@ -514,13 +530,41 @@ static struct index_vht_data_rate_type supported_vht_mcs_rate[] = extern struct net_device_ops net_ops_struct; +#ifdef WLAN_NL80211_TESTMODE +enum wlan_hdd_tm_attr +{ + WLAN_HDD_TM_ATTR_INVALID = 0, + WLAN_HDD_TM_ATTR_CMD = 1, + WLAN_HDD_TM_ATTR_DATA = 2, + WLAN_HDD_TM_ATTR_TYPE = 3, + /* keep last */ + WLAN_HDD_TM_ATTR_AFTER_LAST, + WLAN_HDD_TM_ATTR_MAX = WLAN_HDD_TM_ATTR_AFTER_LAST - 1, +}; + +enum wlan_hdd_tm_cmd +{ + WLAN_HDD_TM_CMD_WLAN_FTM = 0, + WLAN_HDD_TM_CMD_WLAN_HB = 1, +}; + +#define WLAN_HDD_TM_DATA_MAX_LEN 5000 + +static const struct nla_policy wlan_hdd_tm_policy[WLAN_HDD_TM_ATTR_MAX + 1] = +{ + [WLAN_HDD_TM_ATTR_CMD] = { .type = NLA_U32 }, + [WLAN_HDD_TM_ATTR_DATA] = { .type = NLA_BINARY, + .len = WLAN_HDD_TM_DATA_MAX_LEN }, +}; +#endif /* WLAN_NL80211_TESTMODE */ + /* - * FUNCTION: wlan_hdd_cfg80211_init + * FUNCTION: wlan_hdd_cfg80211_wiphy_alloc * This function is called by hdd_wlan_startup() * during initialization. - * This function is used to initialize and register wiphy structure. + * This function is used to allocate wiphy structure. */ -struct wiphy *wlan_hdd_cfg80211_init(int priv_size) +struct wiphy *wlan_hdd_cfg80211_wiphy_alloc(int priv_size) { struct wiphy *wiphy; ENTER(); @@ -547,21 +591,59 @@ struct wiphy *wlan_hdd_cfg80211_init(int priv_size) */ int wlan_hdd_cfg80211_update_band(struct wiphy *wiphy, eCsrBand eBand) { + int i, j; + eNVChannelEnabledType channelEnabledState; + ENTER(); - switch(eBand) + for (i = 0; i < IEEE80211_NUM_BANDS; i++) { - case eCSR_BAND_24: - wiphy->bands[IEEE80211_BAND_2GHZ] = &wlan_hdd_band_2_4_GHZ; - wiphy->bands[IEEE80211_BAND_5GHZ] = NULL; - break; - case eCSR_BAND_5G: - wiphy->bands[IEEE80211_BAND_2GHZ] = &wlan_hdd_band_p2p_2_4_GHZ; - wiphy->bands[IEEE80211_BAND_5GHZ] = &wlan_hdd_band_5_GHZ; - break; - case eCSR_BAND_ALL: - default: - wiphy->bands[IEEE80211_BAND_2GHZ] = &wlan_hdd_band_2_4_GHZ; - wiphy->bands[IEEE80211_BAND_5GHZ] = &wlan_hdd_band_5_GHZ; + + if (NULL == wiphy->bands[i]) + { + hddLog(VOS_TRACE_LEVEL_ERROR,"%s: wiphy->bands[i] is NULL, i = %d", + __func__, i); + continue; + } + + for (j = 0; j < wiphy->bands[i]->n_channels; j++) + { + struct ieee80211_supported_band *band = wiphy->bands[i]; + + channelEnabledState = vos_nv_getChannelEnabledState( + band->channels[j].hw_value); + + if (IEEE80211_BAND_2GHZ == i && eCSR_BAND_5G == eBand) // 5G only + { + // Enable Social channels for P2P + if (WLAN_HDD_IS_SOCIAL_CHANNEL(band->channels[j].center_freq) && + NV_CHANNEL_ENABLE == channelEnabledState) + band->channels[j].flags &= ~IEEE80211_CHAN_DISABLED; + else + band->channels[j].flags |= IEEE80211_CHAN_DISABLED; + continue; + } + else if (IEEE80211_BAND_5GHZ == i && eCSR_BAND_24 == eBand) // 2G only + { + band->channels[j].flags |= IEEE80211_CHAN_DISABLED; + continue; + } + + if (NV_CHANNEL_DISABLE == channelEnabledState || + NV_CHANNEL_INVALID == channelEnabledState) + { + band->channels[j].flags |= IEEE80211_CHAN_DISABLED; + } + else if (NV_CHANNEL_DFS == channelEnabledState) + { + band->channels[j].flags &= ~IEEE80211_CHAN_DISABLED; + band->channels[j].flags |= IEEE80211_CHAN_RADAR; + } + else + { + band->channels[j].flags &= ~(IEEE80211_CHAN_DISABLED + |IEEE80211_CHAN_RADAR); + } + } } return 0; } @@ -571,11 +653,12 @@ int wlan_hdd_cfg80211_update_band(struct wiphy *wiphy, eCsrBand eBand) * during initialization. * This function is used to initialize and register wiphy structure. */ -int wlan_hdd_cfg80211_register(struct device *dev, +int wlan_hdd_cfg80211_init(struct device *dev, struct wiphy *wiphy, hdd_config_t *pCfg ) { + int i, j; ENTER(); /* Now bind the underlying wlan device with wiphy */ @@ -583,7 +666,16 @@ int wlan_hdd_cfg80211_register(struct device *dev, wiphy->mgmt_stypes = wlan_hdd_txrx_stypes; - wiphy->flags |= WIPHY_FLAG_CUSTOM_REGULATORY; +#ifndef QCA_WIFI_2_0 + wiphy->flags |= WIPHY_FLAG_STRICT_REGULATORY; +#else + wiphy->flags |= WIPHY_FLAG_CUSTOM_REGULATORY; +#endif + + /* This will disable updating of NL channels from passive to + * active if a beacon is received on passive channel. */ + wiphy->flags |= WIPHY_FLAG_DISABLE_BEACON_HINTS; + #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0)) wiphy->flags |= WIPHY_FLAG_HAVE_AP_SME @@ -615,31 +707,32 @@ int wlan_hdd_cfg80211_register(struct device *dev, | WIPHY_FLAG_TDLS_EXTERNAL_SETUP; #endif #ifdef FEATURE_WLAN_SCAN_PNO -#if defined (QCA_WIFI_2_0) - if (pCfg->PnoOffload) { -#endif + if (pCfg->configPNOScanSupport) + { wiphy->flags |= WIPHY_FLAG_SUPPORTS_SCHED_SCAN; - wiphy->max_sched_scan_ssids = MAX_SCAN_SSID; + wiphy->max_sched_scan_ssids = SIR_PNO_MAX_SUPP_NETWORKS; wiphy->max_match_sets = SIR_PNO_MAX_SUPP_NETWORKS; -#if defined (QCA_WIFI_2_0) - wiphy->max_sched_scan_ie_len = SIR_PNO_MAX_IE_LEN; + wiphy->max_sched_scan_ie_len = SIR_MAC_MAX_IE_LENGTH; } -#endif -#endif /* FEATURE_WLAN_SCAN_PNO */ +#endif/*FEATURE_WLAN_SCAN_PNO*/ + +#ifdef CONFIG_ENABLE_LINUX_REG /* even with WIPHY_FLAG_CUSTOM_REGULATORY, driver can still register regulatory callback and - it will get CRDA setting in wiphy->band[], but + it will get regulatory settings in wiphy->band[], but driver need to determine what to do with both regulatory settings */ + + wiphy->reg_notifier = wlan_hdd_linux_reg_notifier; +#else wiphy->reg_notifier = wlan_hdd_crda_reg_notifier; +#endif wiphy->max_scan_ssids = MAX_SCAN_SSID; - wiphy->max_scan_ie_len = 200 ; //TODO: define a macro + wiphy->max_scan_ie_len = SIR_MAC_MAX_IE_LENGTH; -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0)) - wiphy->max_acl_mac_addrs = MAX_MAC_ADDRESS_ACCEPTED; -#endif + wiphy->max_acl_mac_addrs = MAX_ACL_MAC_ADDRESS; /* Supports STATION & AD-HOC modes right now */ wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) @@ -681,20 +774,38 @@ int wlan_hdd_cfg80211_register(struct device *dev, wlan_hdd_band_5_GHZ.ht_cap.cap &= ~IEEE80211_HT_CAP_SUP_WIDTH_20_40; } - /*Initialize band capability*/ - switch(pCfg->nBandCapability) - { - case eCSR_BAND_24: - wiphy->bands[IEEE80211_BAND_2GHZ] = &wlan_hdd_band_2_4_GHZ; - break; - case eCSR_BAND_5G: - wiphy->bands[IEEE80211_BAND_2GHZ] = &wlan_hdd_band_p2p_2_4_GHZ; - wiphy->bands[IEEE80211_BAND_5GHZ] = &wlan_hdd_band_5_GHZ; - break; - case eCSR_BAND_ALL: - default: - wiphy->bands[IEEE80211_BAND_2GHZ] = &wlan_hdd_band_2_4_GHZ; - wiphy->bands[IEEE80211_BAND_5GHZ] = &wlan_hdd_band_5_GHZ; + wiphy->bands[IEEE80211_BAND_2GHZ] = &wlan_hdd_band_2_4_GHZ; + wiphy->bands[IEEE80211_BAND_5GHZ] = &wlan_hdd_band_5_GHZ; + + for (i = 0; i < IEEE80211_NUM_BANDS; i++) + { + + if (NULL == wiphy->bands[i]) + { + hddLog(VOS_TRACE_LEVEL_ERROR,"%s: wiphy->bands[i] is NULL, i = %d", + __func__, i); + continue; + } + + for (j = 0; j < wiphy->bands[i]->n_channels; j++) + { + struct ieee80211_supported_band *band = wiphy->bands[i]; + + if (IEEE80211_BAND_2GHZ == i && eCSR_BAND_5G == pCfg->nBandCapability) // 5G only + { + // Enable social channels for P2P + if (WLAN_HDD_IS_SOCIAL_CHANNEL(band->channels[j].center_freq)) + band->channels[j].flags &= ~IEEE80211_CHAN_DISABLED; + else + band->channels[j].flags |= IEEE80211_CHAN_DISABLED; + continue; + } + else if (IEEE80211_BAND_5GHZ == i && eCSR_BAND_24 == pCfg->nBandCapability) // 2G only + { + band->channels[j].flags |= IEEE80211_CHAN_DISABLED; + continue; + } + } } /*Initialise the supported cipher suite details*/ wiphy->cipher_suites = hdd_cipher_suites; @@ -707,10 +818,18 @@ int wlan_hdd_cfg80211_register(struct device *dev, wiphy->max_remain_on_channel_duration = 1000; #endif - /* Register our wiphy dev with cfg80211 */ + EXIT(); + return 0; +} + +/* In this function we are registering wiphy. */ +int wlan_hdd_cfg80211_register(struct wiphy *wiphy) +{ + ENTER(); + /* Register our wiphy dev with cfg80211 */ if (0 > wiphy_register(wiphy)) { - /* print eror */ + /* print error */ hddLog(VOS_TRACE_LEVEL_ERROR,"%s: wiphy register failed", __func__); return -EIO; } @@ -719,37 +838,65 @@ int wlan_hdd_cfg80211_register(struct device *dev, return 0; } -/* In this function we will try to get default country code from crda. - If the gCrdaDefaultCountryCode is configured in ini file, - we will try to call user space crda to get the regulatory settings for - that country. We will timeout if we can't get it from crda. - It's called by hdd_wlan_startup() after wlan_hdd_cfg80211_register. +#ifdef QCA_WIFI_2_0 +/* + HDD function to update wiphy capability based on target offload status. + + wlan_hdd_cfg80211_init() does initialization of all wiphy related + capability even before downloading firmware to the target. In discrete + case, host will get know certain offload capability (say sched_scan + caps) only after downloading firmware to the target and target boots up. + This function is used to override setting done in wlan_hdd_cfg80211_init() + based on target capability. */ -int wlan_hdd_get_crda_regd_entry(struct wiphy *wiphy, hdd_config_t *pCfg) +void wlan_hdd_cfg80211_update_wiphy_caps(struct wiphy *wiphy) { hdd_context_t *pHddCtx = wiphy_priv(wiphy); - int status; - - if (memcmp(pCfg->crdaDefaultCountryCode, - CFG_CRDA_DEFAULT_COUNTRY_CODE_DEFAULT , 2) != 0) - { - INIT_COMPLETION(pHddCtx->driver_crda_req); - regulatory_hint(wiphy, pCfg->crdaDefaultCountryCode); - status = wait_for_completion_interruptible_timeout( - &pHddCtx->driver_crda_req, - msecs_to_jiffies(CRDA_WAIT_TIME)); - if (!status) - { - hddLog(VOS_TRACE_LEVEL_ERROR,"%s: timeout waiting for CRDA REQ", - __func__); - } - - /* if the country is not found from current regulatory.bin, - fall back to world domain */ - if (is_crda_regulatory_entry_valid() == VOS_FALSE) - crda_regulatory_entry_default(pCfg->crdaDefaultCountryCode, NUM_REG_DOMAINS-1); + hdd_config_t *pCfg = pHddCtx->cfg_ini; + + /* wlan_hdd_cfg80211_init() sets sched_scan caps already in wiphy before + * control comes here. Here just we need to clear it if firmware doesn't + * have PNO support. */ + if (!pCfg->PnoOffload) { + wiphy->flags &= ~WIPHY_FLAG_SUPPORTS_SCHED_SCAN; + wiphy->max_sched_scan_ssids = 0; + wiphy->max_match_sets = 0; + wiphy->max_sched_scan_ie_len = 0; } - return 0; +} +#endif + +/* In this function we are updating channel list when, + regulatory domain is FCC and country code is US. + Here In FCC standard 5GHz UNII-1 Bands are indoor only. + As per FCC smart phone is not a indoor device. + GO should not opeate on indoor channels */ +void wlan_hdd_cfg80211_update_reg_info(struct wiphy *wiphy) +{ + int j; + hdd_context_t *pHddCtx = wiphy_priv(wiphy); + tANI_U8 defaultCountryCode[3] = SME_INVALID_COUNTRY_CODE; + //Default counrtycode from NV at the time of wiphy initialization. + if (eHAL_STATUS_SUCCESS != sme_GetDefaultCountryCodeFrmNv(pHddCtx->hHal, + &defaultCountryCode[0])) + { + hddLog(LOGE, FL("%s Failed to get default country code from NV")); + } + if ((defaultCountryCode[0]== 'U') && (defaultCountryCode[1]=='S')) + { + if (NULL == wiphy->bands[IEEE80211_BAND_5GHZ]) + { + hddLog(VOS_TRACE_LEVEL_ERROR,"%s: wiphy->bands[IEEE80211_BAND_5GHZ] is NULL",__func__ ); + return; + } + for (j = 0; j < wiphy->bands[IEEE80211_BAND_5GHZ]->n_channels; j++) + { + struct ieee80211_supported_band *band = wiphy->bands[IEEE80211_BAND_5GHZ]; + // Mark UNII -1 band channel as passive + if (WLAN_HDD_CHANNEL_IN_UNII_1_BAND(band->channels[j].center_freq)) + band->channels[j].flags |= IEEE80211_CHAN_PASSIVE_SCAN; + } + } } /* In this function we will do all post VOS start initialization. @@ -768,39 +915,39 @@ void wlan_hdd_cfg80211_post_voss_start(hdd_adapter_t* pAdapter) initialized. Once we will move to 2.6.37 kernel, in which we have frame register ops, we will move this code as a part of that */ /* GAS Initial Request */ - sme_RegisterMgmtFrame(hHal, pAdapter->sessionId, type, + sme_RegisterMgmtFrame(hHal, HDD_SESSION_ID_ANY, type, (v_U8_t*)GAS_INITIAL_REQ, GAS_INITIAL_REQ_SIZE ); /* GAS Initial Response */ - sme_RegisterMgmtFrame(hHal, pAdapter->sessionId, type, + sme_RegisterMgmtFrame(hHal, HDD_SESSION_ID_ANY, type, (v_U8_t*)GAS_INITIAL_RSP, GAS_INITIAL_RSP_SIZE ); /* GAS Comeback Request */ - sme_RegisterMgmtFrame(hHal, pAdapter->sessionId, type, + sme_RegisterMgmtFrame(hHal, HDD_SESSION_ID_ANY, type, (v_U8_t*)GAS_COMEBACK_REQ, GAS_COMEBACK_REQ_SIZE ); /* GAS Comeback Response */ - sme_RegisterMgmtFrame(hHal, pAdapter->sessionId, type, + sme_RegisterMgmtFrame(hHal, HDD_SESSION_ID_ANY, type, (v_U8_t*)GAS_COMEBACK_RSP, GAS_COMEBACK_RSP_SIZE ); /* P2P Public Action */ - sme_RegisterMgmtFrame(hHal, pAdapter->sessionId, type, + sme_RegisterMgmtFrame(hHal, HDD_SESSION_ID_ANY, type, (v_U8_t*)P2P_PUBLIC_ACTION_FRAME, P2P_PUBLIC_ACTION_FRAME_SIZE ); /* P2P Action */ - sme_RegisterMgmtFrame(hHal, pAdapter->sessionId, type, + sme_RegisterMgmtFrame(hHal, HDD_SESSION_ID_ANY, type, (v_U8_t*)P2P_ACTION_FRAME, P2P_ACTION_FRAME_SIZE ); /* WNM BSS Transition Request frame */ - sme_RegisterMgmtFrame(hHal, pAdapter->sessionId, type, + sme_RegisterMgmtFrame(hHal, HDD_SESSION_ID_ANY, type, (v_U8_t*)WNM_BSS_ACTION_FRAME, WNM_BSS_ACTION_FRAME_SIZE ); #ifdef WLAN_FEATURE_11W /* SA Query Response Action Frame */ - sme_RegisterMgmtFrame(hHal, pAdapter->sessionId, type, + sme_RegisterMgmtFrame(hHal, HDD_SESSION_ID_ANY, type, (v_U8_t*)SA_QUERY_FRAME_RSP, SA_QUERY_FRAME_RSP_SIZE ); #endif /* WLAN_FEATURE_11W */ @@ -819,34 +966,34 @@ void wlan_hdd_cfg80211_pre_voss_stop(hdd_adapter_t* pAdapter) frame register ops, we will move this code as a part of that */ /* GAS Initial Request */ - sme_DeregisterMgmtFrame(hHal, pAdapter->sessionId, type, + sme_DeregisterMgmtFrame(hHal, HDD_SESSION_ID_ANY, type, (v_U8_t*)GAS_INITIAL_REQ, GAS_INITIAL_REQ_SIZE ); /* GAS Initial Response */ - sme_DeregisterMgmtFrame(hHal, pAdapter->sessionId, type, + sme_DeregisterMgmtFrame(hHal, HDD_SESSION_ID_ANY, type, (v_U8_t*)GAS_INITIAL_RSP, GAS_INITIAL_RSP_SIZE ); /* GAS Comeback Request */ - sme_DeregisterMgmtFrame(hHal, pAdapter->sessionId, type, + sme_DeregisterMgmtFrame(hHal, HDD_SESSION_ID_ANY, type, (v_U8_t*)GAS_COMEBACK_REQ, GAS_COMEBACK_REQ_SIZE ); /* GAS Comeback Response */ - sme_DeregisterMgmtFrame(hHal, pAdapter->sessionId, type, + sme_DeregisterMgmtFrame(hHal, HDD_SESSION_ID_ANY, type, (v_U8_t*)GAS_COMEBACK_RSP, GAS_COMEBACK_RSP_SIZE ); /* P2P Public Action */ - sme_DeregisterMgmtFrame(hHal, pAdapter->sessionId, type, + sme_DeregisterMgmtFrame(hHal, HDD_SESSION_ID_ANY, type, (v_U8_t*)P2P_PUBLIC_ACTION_FRAME, P2P_PUBLIC_ACTION_FRAME_SIZE ); /* P2P Action */ - sme_DeregisterMgmtFrame(hHal, pAdapter->sessionId, type, + sme_DeregisterMgmtFrame(hHal, HDD_SESSION_ID_ANY, type, (v_U8_t*)P2P_ACTION_FRAME, P2P_ACTION_FRAME_SIZE ); #ifdef WLAN_FEATURE_11W /* SA Query Response Action Frame */ - sme_DeregisterMgmtFrame(hHal, pAdapter->sessionId, type, + sme_DeregisterMgmtFrame(hHal, HDD_SESSION_ID_ANY, type, (v_U8_t*)SA_QUERY_FRAME_RSP, SA_QUERY_FRAME_RSP_SIZE ); #endif /* WLAN_FEATURE_11W */ @@ -1028,7 +1175,7 @@ v_U8_t* wlan_hdd_cfg80211_get_ie_ptr(v_U8_t *pIes, int length, v_U8_t eid) /* Check if rate is 11g rate or not */ static int wlan_hdd_rate_is_11g(u8 rate) { - u8 gRateArray[8] = {12, 18, 24, 36, 48, 72, 96, 104}; /* actual rate * 2 */ + static const u8 gRateArray[8] = {12, 18, 24, 36, 48, 72, 96, 108}; /* actual rate * 2 */ u8 i; for (i = 0; i < 8; i++) { @@ -1117,7 +1264,7 @@ static void wlan_hdd_set_sapHwmode(hdd_adapter_t *pHostapdAdapter) static int wlan_hdd_add_ie(hdd_adapter_t* pHostapdAdapter, v_U8_t *genie, v_U8_t *total_ielen, v_U8_t *oui, v_U8_t oui_size) { - v_U8_t ielen = 0; + v_U16_t ielen = 0; v_U8_t *pIe = NULL; beacon_data_t *pBeacon = pHostapdAdapter->sessionCtx.ap.beacon; @@ -1141,6 +1288,67 @@ static int wlan_hdd_add_ie(hdd_adapter_t* pHostapdAdapter, v_U8_t *genie, return 0; } +static void wlan_hdd_add_hostapd_conf_vsie(hdd_adapter_t* pHostapdAdapter, + v_U8_t *genie, v_U8_t *total_ielen) +{ + beacon_data_t *pBeacon = pHostapdAdapter->sessionCtx.ap.beacon; + int left = pBeacon->tail_len; + v_U8_t *ptr = pBeacon->tail; + v_U8_t elem_id, elem_len; + v_U16_t ielen = 0; + + if ( NULL == ptr || 0 == left ) + return; + + while (left >= 2) + { + elem_id = ptr[0]; + elem_len = ptr[1]; + left -= 2; + if (elem_len > left) + { + hddLog( VOS_TRACE_LEVEL_ERROR, + "****Invalid IEs eid = %d elem_len=%d left=%d*****", + elem_id, elem_len, left); + return; + } + if (IE_EID_VENDOR == elem_id) + { + /* skipping the VSIE's which we don't want to include or + * it will be included by existing code + */ + if ((memcmp( &ptr[2], WPS_OUI_TYPE, WPS_OUI_TYPE_SIZE) != 0 ) && +#ifdef WLAN_FEATURE_WFD + (memcmp( &ptr[2], WFD_OUI_TYPE, WFD_OUI_TYPE_SIZE) != 0) && +#endif + (memcmp( &ptr[2], WHITELIST_OUI_TYPE, WPA_OUI_TYPE_SIZE) != 0) && + (memcmp( &ptr[2], BLACKLIST_OUI_TYPE, WPA_OUI_TYPE_SIZE) != 0) && + (memcmp( &ptr[2], "\x00\x50\xf2\x02", WPA_OUI_TYPE_SIZE) != 0) && + (memcmp( &ptr[2], WPA_OUI_TYPE, WPA_OUI_TYPE_SIZE) != 0) && + (memcmp( &ptr[2], P2P_OUI_TYPE, P2P_OUI_TYPE_SIZE) != 0)) + { + ielen = ptr[1] + 2; + if ((*total_ielen + ielen) <= MAX_GENIE_LEN) + { + vos_mem_copy(&genie[*total_ielen], ptr, ielen); + *total_ielen += ielen; + } + else + { + hddLog( VOS_TRACE_LEVEL_ERROR, + "IE Length is too big " + "IEs eid=%d elem_len=%d total_ie_lent=%d", + elem_id, elem_len, *total_ielen); + } + } + } + + left -= elem_len; + ptr += (elem_len + 2); + } + return; +} + #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,4,0)) static int wlan_hdd_cfg80211_update_apies(hdd_adapter_t* pHostapdAdapter, struct beacon_parameters *params) @@ -1186,12 +1394,7 @@ static int wlan_hdd_cfg80211_update_apies(hdd_adapter_t* pHostapdAdapter, if (WLAN_HDD_SOFTAP == pHostapdAdapter->device_mode) { - if (0 != wlan_hdd_add_ie(pHostapdAdapter, genie, - &total_ielen, SS_OUI_TYPE, SS_OUI_TYPE_SIZE)) - { - ret = -EINVAL; - goto done; - } + wlan_hdd_add_hostapd_conf_vsie(pHostapdAdapter, genie, &total_ielen); } if (ccmCfgSetStr((WLAN_HDD_GET_CTX(pHostapdAdapter))->hHal, @@ -1388,7 +1591,7 @@ done: * This function validates whether given channel is part of valid * channel list. */ -static VOS_STATUS wlan_hdd_validate_operation_channel(hdd_adapter_t *pAdapter,int channel) +VOS_STATUS wlan_hdd_validate_operation_channel(hdd_adapter_t *pAdapter,int channel) { v_U32_t num_ch = 0; @@ -1459,6 +1662,8 @@ static int wlan_hdd_cfg80211_set_channel( struct wiphy *wiphy, struct net_device int channel = 0; hdd_adapter_t *pAdapter = NULL; int freq = chan->center_freq; /* freq is in MHZ */ + hdd_context_t *pHddCtx; + int status; ENTER(); @@ -1473,10 +1678,15 @@ static int wlan_hdd_cfg80211_set_channel( struct wiphy *wiphy, struct net_device hddLog(VOS_TRACE_LEVEL_INFO, "%s: device_mode = %d freq = %d \n",__func__, pAdapter->device_mode, chan->center_freq); - if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) + + pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + status = wlan_hdd_validate_context(pHddCtx); + + if (0 != status) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:LOGP in Progress. Ignore!!!",__func__); - return -EAGAIN; + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: HDD context is not valid", __func__); + return status; } /* @@ -1484,7 +1694,7 @@ static int wlan_hdd_cfg80211_set_channel( struct wiphy *wiphy, struct net_device * TODO: for 11a */ - channel = ieee80211_frequency_to_channel(freq); + channel = ieee80211_frequency_to_channel(freq); /* Check freq range */ if ((WNI_CFG_CURRENT_CHANNEL_STAMIN > channel) || @@ -1583,7 +1793,7 @@ static int wlan_hdd_cfg80211_set_channel( struct wiphy *wiphy, struct net_device return -EINVAL; } EXIT(); - return 0; + return status; } #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,4,0)) @@ -1643,7 +1853,15 @@ static int wlan_hdd_cfg80211_start_bss(hdd_adapter_t *pHostapdAdapter, { pIe = wlan_hdd_cfg80211_get_ie_ptr(pBeacon->tail, pBeacon->tail_len, WLAN_EID_COUNTRY); - if(pIe) + if(memcmp(pHddCtx->cfg_ini->apCntryCode, CFG_AP_COUNTRY_CODE_DEFAULT, 3) != 0) + { + tANI_BOOLEAN restartNeeded; + pConfig->ieee80211d = 1; + vos_mem_copy(pConfig->countryCode, pHddCtx->cfg_ini->apCntryCode, 3); + sme_setRegInfo(hHal, pConfig->countryCode); + sme_ResetCountryCodeInformation(hHal, &restartNeeded); + } + else if(pIe) { tANI_BOOLEAN restartNeeded; pConfig->ieee80211d = 1; @@ -1881,8 +2099,8 @@ static int wlan_hdd_cfg80211_start_bss(hdd_adapter_t *pHostapdAdapter, pConfig->num_deny_mac = pIe[7]; hddLog(VOS_TRACE_LEVEL_INFO,"acl type = %d no deny mac = %d\n", pIe[6], pIe[7]); - if (pConfig->num_deny_mac > MAX_MAC_ADDRESS_DENIED) - pConfig->num_deny_mac = MAX_MAC_ADDRESS_DENIED; + if (pConfig->num_deny_mac > MAX_ACL_MAC_ADDRESS) + pConfig->num_deny_mac = MAX_ACL_MAC_ADDRESS; acl_entry = (struct qc_mac_acl_entry *)(pIe + 8); for (i = 0; i < pConfig->num_deny_mac; i++) { @@ -1907,8 +2125,8 @@ static int wlan_hdd_cfg80211_start_bss(hdd_adapter_t *pHostapdAdapter, pConfig->num_accept_mac = pIe[7]; hddLog(VOS_TRACE_LEVEL_INFO,"acl type = %d no accept mac = %d\n", pIe[6], pIe[7]); - if (pConfig->num_accept_mac > MAX_MAC_ADDRESS_ACCEPTED) - pConfig->num_accept_mac = MAX_MAC_ADDRESS_ACCEPTED; + if (pConfig->num_accept_mac > MAX_ACL_MAC_ADDRESS) + pConfig->num_accept_mac = MAX_ACL_MAC_ADDRESS; acl_entry = (struct qc_mac_acl_entry *)(pIe + 8); for (i = 0; i < pConfig->num_accept_mac; i++) { @@ -1916,6 +2134,7 @@ static int wlan_hdd_cfg80211_start_bss(hdd_adapter_t *pHostapdAdapter, acl_entry++; } } + wlan_hdd_set_sapHwmode(pHostapdAdapter); #ifdef WLAN_FEATURE_11AC @@ -2003,6 +2222,7 @@ static int wlan_hdd_cfg80211_start_bss(hdd_adapter_t *pHostapdAdapter, { VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, ("ERROR: HDD vos wait for single_event failed!!\n")); + smeGetCommandQStatus(hHal); VOS_ASSERT(0); } @@ -2039,17 +2259,21 @@ static int wlan_hdd_cfg80211_add_beacon(struct wiphy *wiphy, struct beacon_parameters *params) { hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); - int status=VOS_STATUS_SUCCESS; + hdd_context_t *pHddCtx; + int status; ENTER(); hddLog(VOS_TRACE_LEVEL_INFO_HIGH, "device mode=%d\n",pAdapter->device_mode); - if ( (WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress ) + pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + status = wlan_hdd_validate_context(pHddCtx); + + if (0 != status) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s:LOGP in Progress. Ignore!!!", __func__); - return -EAGAIN; + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: HDD context is not valid", __func__); + return status; } if ( (pAdapter->device_mode == WLAN_HDD_SOFTAP) @@ -2086,18 +2310,22 @@ static int wlan_hdd_cfg80211_set_beacon(struct wiphy *wiphy, struct beacon_parameters *params) { hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); - int status=VOS_STATUS_SUCCESS; + hdd_context_t *pHddCtx; + int status; ENTER(); hddLog(VOS_TRACE_LEVEL_INFO, "%s: device_mode = %d\n", __func__,pAdapter->device_mode); - if ( (WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress ) + pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + status = wlan_hdd_validate_context(pHddCtx); + + if (0 != status) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s:LOGP in Progress. Ignore!!!", __func__); - return -EAGAIN; + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: HDD context is not valid", __func__); + return status; } if ((pAdapter->device_mode == WLAN_HDD_SOFTAP) @@ -2142,7 +2370,7 @@ static int wlan_hdd_cfg80211_stop_ap (struct wiphy *wiphy, hdd_context_t *pHddCtx = NULL; hdd_scaninfo_t *pScanInfo = NULL; hdd_adapter_t *staAdapter = NULL; - VOS_STATUS status = 0; + VOS_STATUS status; ENTER(); @@ -2153,18 +2381,14 @@ static int wlan_hdd_cfg80211_stop_ap (struct wiphy *wiphy, return -ENODEV; } - pHddCtx = WLAN_HDD_GET_CTX(pAdapter); - if (NULL == pHddCtx) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s: HDD context is Null", __func__); - return -ENODEV; - } - if (pHddCtx->isLogpInProgress) + pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + status = wlan_hdd_validate_context(pHddCtx); + + if (0 != status) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s:LOGP in Progress. Ignore!!!", __func__); - return -EAGAIN; + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: HDD context is not valid", __func__); + return status; } staAdapter = hdd_get_adapter(pAdapter->pHddCtx, WLAN_HDD_INFRA_STATION); @@ -2173,26 +2397,18 @@ static int wlan_hdd_cfg80211_stop_ap (struct wiphy *wiphy, staAdapter = hdd_get_adapter(pAdapter->pHddCtx, WLAN_HDD_P2P_CLIENT); if (NULL == staAdapter) { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s: HDD adapter context is Null", __func__); - return -ENODEV; + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, + "%s: HDD adapter context for STA/P2P-CLI is Null", + __func__); } } pScanInfo = &pAdapter->scan_info; - if (pHddCtx->isLogpInProgress) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:LOGP in Progress. Ignore!!!",__func__); - return -EAGAIN; - } - - pHddCtx = (hdd_context_t*)pAdapter->pHddCtx; - hddLog(VOS_TRACE_LEVEL_INFO, "%s: device_mode = %d\n", __func__,pAdapter->device_mode); - if ((pScanInfo != NULL) && pScanInfo->mScanPending) + if ((pScanInfo != NULL) && pScanInfo->mScanPending && staAdapter) { INIT_COMPLETION(pScanInfo->abortscan_event_var); hdd_abort_mac_scan(staAdapter->pHddCtx, pAdapter->sessionId); @@ -2201,11 +2417,10 @@ static int wlan_hdd_cfg80211_stop_ap (struct wiphy *wiphy, msecs_to_jiffies(WLAN_WAIT_TIME_ABORTSCAN)); if (!status) { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, "%s: Timeout occurred while waiting for abortscan" , __func__); VOS_ASSERT(pScanInfo->mScanPending); - return 0; } } @@ -2292,13 +2507,13 @@ static int wlan_hdd_cfg80211_start_ap(struct wiphy *wiphy, { hdd_adapter_t *pAdapter; hdd_context_t *pHddCtx; - int status = 0; + int status; ENTER(); if (NULL == dev) { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, "%s: Device is Null", __func__); return -ENODEV; } @@ -2306,38 +2521,26 @@ static int wlan_hdd_cfg80211_start_ap(struct wiphy *wiphy, pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); if (NULL == pAdapter) { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, "%s: HDD adapter is Null", __func__); return -ENODEV; } if (WLAN_HDD_ADAPTER_MAGIC != pAdapter->magic) { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, "%s: HDD adapter magic is invalid", __func__); return -ENODEV; } pHddCtx = WLAN_HDD_GET_CTX(pAdapter); - if (NULL == pHddCtx) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s: HDD context is Null", __func__); - return -ENODEV; - } - - if (pHddCtx->isLogpInProgress) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s: LOGP in Progress. Ignore!!!", __func__); - return -EAGAIN; - } + status = wlan_hdd_validate_context(pHddCtx); - if (pHddCtx->isLoadUnloadInProgress) + if (0 != status) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s: Unloading/Loading in Progress. Ignore!!!", __func__); - return -EAGAIN; + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: HDD context is not valid", __func__); + return status; } hddLog(VOS_TRACE_LEVEL_INFO_HIGH, "%s: device mode = %d", @@ -2385,16 +2588,22 @@ static int wlan_hdd_cfg80211_change_beacon(struct wiphy *wiphy, struct cfg80211_beacon_data *params) { hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); - int status=VOS_STATUS_SUCCESS; + hdd_context_t *pHddCtx; + int status; ENTER(); hddLog(VOS_TRACE_LEVEL_INFO, "%s: device_mode = %d\n", __func__, pAdapter->device_mode); - if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) + + pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + status = wlan_hdd_validate_context(pHddCtx); + + if (0 != status) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:LOGP in Progress. Ignore!!!",__func__); - return -EAGAIN; + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: HDD context is not valid", __func__); + return status; } if ((pAdapter->device_mode == WLAN_HDD_SOFTAP) @@ -2489,6 +2698,16 @@ static int wlan_hdd_change_iface_to_sta_mode(struct net_device *ndev, return status; } +/* FUNCTION: wlan_hdd_change_country_code_cd +* to wait for contry code completion +*/ +void* wlan_hdd_change_country_code_cb(void *pAdapter) +{ + hdd_adapter_t *call_back_pAdapter = pAdapter; + complete(&call_back_pAdapter->change_country_code); + return NULL; +} + /* * FUNCTION: wlan_hdd_cfg80211_change_iface * This function is used to set the interface type (INFRASTRUCTURE/ADHOC) @@ -2506,21 +2725,25 @@ int wlan_hdd_cfg80211_change_iface( struct wiphy *wiphy, hdd_adapter_t *pP2pAdapter = NULL; tCsrRoamProfile *pRoamProfile = NULL; eCsrRoamBssType LastBSSType; - hdd_config_t *pConfig = pHddCtx->cfg_ini; + hdd_config_t *pConfig = NULL; eMib_dot11DesiredBssType connectedBssType; VOS_STATUS status; ENTER(); - if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) + status = wlan_hdd_validate_context(pHddCtx); + + if (0 != status) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:LOGP in Progress. Ignore!!!",__func__); - return -EAGAIN; + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: HDD context is not valid", __func__); + return status; } hddLog(VOS_TRACE_LEVEL_INFO, "%s: device_mode = %d", __func__, pAdapter->device_mode); + pConfig = pHddCtx->cfg_ini; wdev = ndev->ieee80211_ptr; #ifdef WLAN_BTAMP_FEATURE @@ -2581,6 +2804,23 @@ int wlan_hdd_cfg80211_change_iface( struct wiphy *wiphy, pAdapter->device_mode = (type == NL80211_IFTYPE_STATION) ? WLAN_HDD_INFRA_STATION: WLAN_HDD_P2P_CLIENT; } +#ifdef FEATURE_WLAN_TDLS + /* The open adapter for the p2p shall skip initializations in + * tdls_init if the device mode is WLAN_HDD_P2P_DEVICE, for + * TDLS is supported only on WLAN_HDD_P2P_CLIENT. Hence invoke + * tdls_init when the change_iface sets the device mode to + * WLAN_HDD_P2P_CLIENT. + */ + + if ( pAdapter->device_mode == WLAN_HDD_P2P_CLIENT) + { + if (0 != wlan_hdd_tdls_init (pAdapter)) + { + return -EINVAL; + } + } +#endif + break; #else status = wlan_hdd_change_iface_to_sta_mode(ndev, type); @@ -2630,13 +2870,28 @@ int wlan_hdd_cfg80211_change_iface( struct wiphy *wiphy, hdd_close_adapter(pHddCtx, pP2pAdapter, VOS_TRUE); } } +#ifdef FEATURE_WLAN_TDLS + /* A Mutex Lock is introduced while changing the mode to + * protect the concurrent access for the Adapters by TDLS + * module. + */ + if (mutex_lock_interruptible(&pHddCtx->tdls_lock)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: unable to lock list", __func__); + return -EINVAL; + } +#endif //De-init the adapter. hdd_stop_adapter( pHddCtx, pAdapter ); hdd_deinit_adapter( pHddCtx, pAdapter ); memset(&pAdapter->sessionCtx, 0, sizeof(pAdapter->sessionCtx)); pAdapter->device_mode = (type == NL80211_IFTYPE_AP) ? WLAN_HDD_SOFTAP : WLAN_HDD_P2P_GO; +#ifdef FEATURE_WLAN_TDLS + mutex_unlock(&pHddCtx->tdls_lock); +#endif /* * If Powersave Offload is enabled @@ -2682,6 +2937,44 @@ int wlan_hdd_cfg80211_change_iface( struct wiphy *wiphy, hdd_set_ap_ops( pAdapter->dev ); + /* This is for only SAP mode where users can + * control country through ini. + * P2P GO follows station country code + * acquired during the STA scanning. */ + if((NL80211_IFTYPE_AP == type) && + (memcmp(pConfig->apCntryCode, CFG_AP_COUNTRY_CODE_DEFAULT, 3) != 0)) + { + int status = 0; + VOS_TRACE(VOS_MODULE_ID_HDD,VOS_TRACE_LEVEL_INFO, + "%s: setting country code from INI ", __func__); + init_completion(&pAdapter->change_country_code); + status = (int)sme_ChangeCountryCode(pHddCtx->hHal, + (void *)(tSmeChangeCountryCallback) + wlan_hdd_change_country_code_cb, + pConfig->apCntryCode, pAdapter, + pHddCtx->pvosContext, + eSIR_FALSE, + eSIR_TRUE); + if (eHAL_STATUS_SUCCESS == status) + { + /* Wait for completion */ + status = wait_for_completion_interruptible_timeout( + &pAdapter->change_country_code, + msecs_to_jiffies(WLAN_WAIT_TIME_COUNTRY)); + if (status <= 0) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: SME Timed out while setting country code ", + __func__); + } + } + else + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: SME Change Country code failed \n",__func__); + return -EINVAL; + } + } status = hdd_init_ap_mode(pAdapter); if(status != VOS_STATUS_SUCCESS) { @@ -2721,23 +3014,37 @@ int wlan_hdd_cfg80211_change_iface( struct wiphy *wiphy, case NL80211_IFTYPE_STATION: case NL80211_IFTYPE_P2P_CLIENT: case NL80211_IFTYPE_ADHOC: +#ifdef FEATURE_WLAN_TDLS + + /* A Mutex Lock is introduced while changing the mode to + * protect the concurrent access for the Adapters by TDLS + * module. + */ + if (mutex_lock_interruptible(&pHddCtx->tdls_lock)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: unable to lock list", __func__); + return -EINVAL; + } +#endif status = wlan_hdd_change_iface_to_sta_mode(ndev, type); +#ifdef FEATURE_WLAN_TDLS + mutex_unlock(&pHddCtx->tdls_lock); +#endif if (status != VOS_STATUS_SUCCESS) return status; - /* - * If Powersave Offload is enabled - * Fw will take care incase of concurrency + + // fw will take care if PS offload is enabled. + if (!pHddCtx->cfg_ini->enablePowersaveOffload) + goto done; + /* In case of JB, for P2P-GO, only change interface will be called, + * This is the right place to enable back bmps_imps() */ - if(!pHddCtx->cfg_ini->enablePowersaveOffload) + if (pHddCtx->hdd_wlan_suspended) { - - /* - * In case of JB, for P2P-GO, - * only change interface will be called, - * This is the right place to enable back bmps_imps() - */ - hdd_enable_bmps_imps(pHddCtx); + hdd_set_pwrparams(pHddCtx); } + hdd_enable_bmps_imps(pHddCtx); goto done; case NL80211_IFTYPE_AP: case NL80211_IFTYPE_P2P_GO: @@ -2791,6 +3098,15 @@ int wlan_hdd_cfg80211_change_iface( struct wiphy *wiphy, done: /*set bitmask based on updated value*/ wlan_hdd_set_concurrency_mode(pHddCtx, pAdapter->device_mode); + + /* Only STA mode support TM now + * all other mode, TM feature should be disabled */ + if ( (pHddCtx->cfg_ini->thermalMitigationEnable) && + (~VOS_STA & pHddCtx->concurrency_mode) ) + { + hddDevTmLevelChangedHandler(pHddCtx->parent_dev, 0); + } + #ifdef WLAN_BTAMP_FEATURE if((NL80211_IFTYPE_STATION == type) && (pHddCtx->concurrency_mode <= 1) && (pHddCtx->no_of_sessions[WLAN_HDD_INFRA_STATION] <=1)) @@ -2839,7 +3155,7 @@ static int wlan_hdd_tdls_add_station(struct wiphy *wiphy, return -EBUSY; } - pTdlsPeer = wlan_hdd_tdls_find_peer(pAdapter, mac); + pTdlsPeer = wlan_hdd_tdls_find_peer(pAdapter, mac, TRUE); if ( NULL == pTdlsPeer ) { VOS_TRACE( VOS_MODULE_ID_HDD, TDLS_LOG_LEVEL, @@ -2873,7 +3189,7 @@ static int wlan_hdd_tdls_add_station(struct wiphy *wiphy, } /* when others are on-going, we want to change link_status to idle */ - if (NULL != wlan_hdd_tdls_is_progress(pHddCtx, mac, TRUE, TRUE)) + if (NULL != wlan_hdd_tdls_is_progress(pHddCtx, mac, TRUE)) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, "%s: " MAC_ADDRESS_STR @@ -2896,7 +3212,7 @@ static int wlan_hdd_tdls_add_station(struct wiphy *wiphy, else { hddTdlsPeer_t *pTdlsPeer; - pTdlsPeer = wlan_hdd_tdls_find_peer(pAdapter, mac); + pTdlsPeer = wlan_hdd_tdls_find_peer(pAdapter, mac, TRUE); if (pTdlsPeer && TDLS_IS_CONNECTED(pTdlsPeer)) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, @@ -3098,13 +3414,13 @@ static int wlan_hdd_change_station(struct wiphy *wiphy, isBufSta = 1; } } - //status = wlan_hdd_tdls_set_peer_caps( mac, params->uapsd_queues, - // params->max_sp, isBufSta); - //if (VOS_STATUS_SUCCESS != status) { - // VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - // "%s: wlan_hdd_tdls_set_peer_caps failed!", __func__); - // return -EINVAL; - //} + status = wlan_hdd_tdls_set_peer_caps( pAdapter, mac, params->uapsd_queues, + params->max_sp, isBufSta); + if (VOS_STATUS_SUCCESS != status) { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: wlan_hdd_tdls_set_peer_caps failed!", __func__); + return -EINVAL; + } status = wlan_hdd_tdls_add_station(wiphy, dev, mac, 1, &StaParams); if (VOS_STATUS_SUCCESS != status) { @@ -3141,7 +3457,7 @@ static int wlan_hdd_cfg80211_add_key( struct wiphy *wiphy, hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR( ndev ); tCsrRoamSetKey setKey; u8 groupmacaddr[WNI_CFG_BSSID_LEN] = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}; - int status = 0; + int status; v_U32_t roamId= 0xFF; v_CONTEXT_t pVosContext = (WLAN_HDD_GET_CTX(pAdapter))->pvosContext; hdd_hostapd_state_t *pHostapdState; @@ -3149,14 +3465,18 @@ static int wlan_hdd_cfg80211_add_key( struct wiphy *wiphy, VOS_STATUS vos_status; #endif eHalStatus halStatus; + hdd_context_t *pHddCtx; ENTER(); - if ( (WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress ) + pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + status = wlan_hdd_validate_context(pHddCtx); + + if (0 != status) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s:LOGP in Progress. Ignore!!!", __func__); - return -EAGAIN; + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: HDD context is not valid", __func__); + return status; } hddLog(VOS_TRACE_LEVEL_INFO, "%s: device_mode = %d", @@ -3268,31 +3588,49 @@ static int wlan_hdd_cfg80211_add_key( struct wiphy *wiphy, hddLog(VOS_TRACE_LEVEL_INFO_MED, "%s: encryption type %d", __func__, setKey.encType); - if ( + if ( #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) (!pairwise) #else (!mac_addr || is_broadcast_ether_addr(mac_addr)) #endif - ) - { - /* set group key*/ - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s- %d: setting Broadcast key", - __func__, __LINE__); - setKey.keyDirection = eSIR_RX_ONLY; - vos_mem_copy(setKey.peerMac,groupmacaddr,WNI_CFG_BSSID_LEN); - } - else + ) + { + /* set group key*/ + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s- %d: setting Broadcast key", + __func__, __LINE__); + setKey.keyDirection = eSIR_RX_ONLY; + vos_mem_copy(setKey.peerMac,groupmacaddr,WNI_CFG_BSSID_LEN); + } + else + { + /* set pairwise key*/ + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s- %d: setting pairwise key", + __func__, __LINE__); + setKey.keyDirection = eSIR_TX_RX; + vos_mem_copy(setKey.peerMac, mac_addr,WNI_CFG_BSSID_LEN); + } + if ((WLAN_HDD_IBSS == pAdapter->device_mode) && !pairwise) + { + setKey.keyDirection = eSIR_TX_RX; + /*Set the group key*/ + status = sme_RoamSetKey( WLAN_HDD_GET_HAL_CTX(pAdapter), + pAdapter->sessionId, &setKey, &roamId ); + + if ( 0 != status ) { - /* set pairwise key*/ - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s- %d: setting pairwise key", - __func__, __LINE__); - setKey.keyDirection = eSIR_TX_RX; - vos_mem_copy(setKey.peerMac, mac_addr,WNI_CFG_BSSID_LEN); + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s: sme_RoamSetKey failed, returned %d", __func__, status); + return -EINVAL; } - + /*Save the keys here and call sme_RoamSetKey for setting + the PTK after peer joins the IBSS network*/ + vos_mem_copy(&pAdapter->sessionCtx.station.ibss_enc_key, + &setKey, sizeof(tCsrRoamSetKey)); + return status; + } if ((pAdapter->device_mode == WLAN_HDD_SOFTAP) || (pAdapter->device_mode == WLAN_HDD_P2P_GO)) { @@ -3385,7 +3723,13 @@ static int wlan_hdd_cfg80211_add_key( struct wiphy *wiphy, is done. Save the key in the UMAC and include it in the ADD BSS request */ halStatus = sme_FTUpdateKey( WLAN_HDD_GET_HAL_CTX(pAdapter), &setKey); - if ( halStatus == eHAL_STATUS_FT_PREAUTH_KEY_FAILED ) + if ( halStatus == eHAL_STATUS_FT_PREAUTH_KEY_SUCCESS ) + { + hddLog(VOS_TRACE_LEVEL_INFO_MED, + "%s: Update PreAuth Key success", __func__); + return 0; + } + else if ( halStatus == eHAL_STATUS_FT_PREAUTH_KEY_FAILED ) { hddLog(VOS_TRACE_LEVEL_ERROR, "%s: Update PreAuth Key failed", __func__); @@ -3647,9 +3991,10 @@ static int wlan_hdd_cfg80211_set_default_key( struct wiphy *wiphy, #endif { hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR( ndev ); - int status = 0; + int status; hdd_wext_state_t *pWextState; hdd_station_ctx_t *pHddStaCtx; + hdd_context_t *pHddCtx; ENTER(); @@ -3681,11 +4026,14 @@ static int wlan_hdd_cfg80211_set_default_key( struct wiphy *wiphy, return -EINVAL; } - if ( (WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress ) + pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + status = wlan_hdd_validate_context(pHddCtx); + + if (0 != status) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s:LOGP in Progress. Ignore!!!", __func__); - return -EAGAIN; + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: HDD context is not valid", __func__); + return status; } if ((pAdapter->device_mode == WLAN_HDD_INFRA_STATION) @@ -3693,9 +4041,9 @@ static int wlan_hdd_cfg80211_set_default_key( struct wiphy *wiphy, ) { if ( (eCSR_ENCRYPT_TYPE_TKIP != - pWextState->roamProfile.EncryptionType.encryptionType[0]) && + pHddStaCtx->conn_info.ucEncryptionType) && (eCSR_ENCRYPT_TYPE_AES != - pWextState->roamProfile.EncryptionType.encryptionType[0]) + pHddStaCtx->conn_info.ucEncryptionType) ) { /* if default key index is not same as previous one, @@ -3882,14 +4230,40 @@ wlan_hdd_cfg80211_inform_bss_frame( hdd_adapter_t *pAdapter, struct cfg80211_bss *bss_status = NULL; size_t frame_len = sizeof (struct ieee80211_mgmt) + ie_length; int rssi = 0; + hdd_context_t *pHddCtx; + int status; #ifdef WLAN_OPEN_SOURCE struct timespec ts; #endif ENTER(); + pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + status = wlan_hdd_validate_context(pHddCtx); + + /*bss_update is not allowed during wlan driver loading or unloading*/ + if (pHddCtx->isLoadUnloadInProgress) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s:Loading_unloading in Progress. Ignore!!!",__func__); + return NULL; + } + + + if (0 != status) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: HDD context is not valid", __func__); + return NULL; + } + + if (!mgmt) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: memory allocation failed ", __func__); return NULL; + } memcpy(mgmt->bssid, bss_desc->bssId, ETH_ALEN); @@ -3924,9 +4298,16 @@ wlan_hdd_cfg80211_inform_bss_frame( hdd_adapter_t *pAdapter, #endif memcpy(mgmt->u.probe_resp.variable, ie, ie_length); - - mgmt->frame_control |= - (u16)(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_PROBE_RESP); + if (bss_desc->fProbeRsp) + { + mgmt->frame_control |= + (u16)(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_PROBE_RESP); + } + else + { + mgmt->frame_control |= + (u16)(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_BEACON); + } #if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,38)) if (chan_no <= ARRAY_SIZE(hdd_channels_2_4_GHZ) && @@ -3974,7 +4355,8 @@ wlan_hdd_cfg80211_inform_bss_frame( hdd_adapter_t *pAdapter, pAdapter->sessionCtx.station.conn_info.connState ) && ( VOS_TRUE == vos_mem_compare(bss_desc->bssId, pAdapter->sessionCtx.station.conn_info.bssId, - WNI_CFG_BSSID_LEN))) + WNI_CFG_BSSID_LEN)) && + (pHddCtx->hdd_wlan_suspended == FALSE)) { /* supplicant takes the signal strength in terms of mBm(100*dBm) */ rssi = (pAdapter->rssi * 100); @@ -4040,15 +4422,29 @@ static int wlan_hdd_cfg80211_update_bss( struct wiphy *wiphy, eHalStatus status = 0; tScanResultHandle pResult; struct cfg80211_bss *bss_status = NULL; + hdd_context_t *pHddCtx; ENTER(); - if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) + pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + + if (pHddCtx->isLogpInProgress) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:LOGP in Progress. Ignore!!!",__func__); + return -EAGAIN; + } + + + /*bss_update is not allowed during wlan driver loading or unloading*/ + if (pHddCtx->isLoadUnloadInProgress) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:LOGP in Progress. Ignore!!!",__func__); - return -EAGAIN; + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s:Loading_unloading in Progress. Ignore!!!",__func__); + return VOS_STATUS_E_PERM; } + /* * start getting scan results and populate cgf80211 BSS database */ @@ -4174,6 +4570,121 @@ int wlan_hdd_cfg80211_pmksa_candidate_notify( } #endif //FEATURE_WLAN_LFR +#ifdef FEATURE_WLAN_LFR_METRICS +/* + * FUNCTION: wlan_hdd_cfg80211_roam_metrics_preauth + * 802.11r/LFR metrics reporting function to report preauth initiation + * + */ +#define MAX_LFR_METRICS_EVENT_LENGTH 100 +VOS_STATUS wlan_hdd_cfg80211_roam_metrics_preauth(hdd_adapter_t *pAdapter, + tCsrRoamInfo *pRoamInfo) +{ + unsigned char metrics_notification[MAX_LFR_METRICS_EVENT_LENGTH + 1]; + union iwreq_data wrqu; + + ENTER(); + + if (NULL == pAdapter) + { + hddLog(LOGE, "%s: pAdapter is NULL!", __func__); + return VOS_STATUS_E_FAILURE; + } + + /* create the event */ + memset(&wrqu, 0, sizeof(wrqu)); + memset(metrics_notification, 0, sizeof(metrics_notification)); + + wrqu.data.pointer = metrics_notification; + wrqu.data.length = scnprintf(metrics_notification, + sizeof(metrics_notification), "QCOM: LFR_PREAUTH_INIT " + MAC_ADDRESS_STR, MAC_ADDR_ARRAY(pRoamInfo->bssid)); + + wireless_send_event(pAdapter->dev, IWEVCUSTOM, &wrqu, metrics_notification); + + EXIT(); + + return VOS_STATUS_SUCCESS; +} + +/* + * FUNCTION: wlan_hdd_cfg80211_roam_metrics_preauth_status + * 802.11r/LFR metrics reporting function to report preauth completion + * or failure + */ +VOS_STATUS wlan_hdd_cfg80211_roam_metrics_preauth_status( + hdd_adapter_t *pAdapter, tCsrRoamInfo *pRoamInfo, bool preauth_status) +{ + unsigned char metrics_notification[MAX_LFR_METRICS_EVENT_LENGTH + 1]; + union iwreq_data wrqu; + + ENTER(); + + if (NULL == pAdapter) + { + hddLog(LOGE, "%s: pAdapter is NULL!", __func__); + return VOS_STATUS_E_FAILURE; + } + + /* create the event */ + memset(&wrqu, 0, sizeof(wrqu)); + memset(metrics_notification, 0, sizeof(metrics_notification)); + + scnprintf(metrics_notification, sizeof(metrics_notification), + "QCOM: LFR_PREAUTH_STATUS "MAC_ADDRESS_STR, + MAC_ADDR_ARRAY(pRoamInfo->bssid)); + + if (1 == preauth_status) + strncat(metrics_notification, " TRUE", 5); + else + strncat(metrics_notification, " FALSE", 6); + + wrqu.data.pointer = metrics_notification; + wrqu.data.length = strlen(metrics_notification); + + wireless_send_event(pAdapter->dev, IWEVCUSTOM, &wrqu, metrics_notification); + + EXIT(); + + return VOS_STATUS_SUCCESS; +} + +/* + * FUNCTION: wlan_hdd_cfg80211_roam_metrics_handover + * 802.11r/LFR metrics reporting function to report handover initiation + * + */ +VOS_STATUS wlan_hdd_cfg80211_roam_metrics_handover(hdd_adapter_t * pAdapter, + tCsrRoamInfo *pRoamInfo) +{ + unsigned char metrics_notification[MAX_LFR_METRICS_EVENT_LENGTH + 1]; + union iwreq_data wrqu; + + ENTER(); + + if (NULL == pAdapter) + { + hddLog(LOGE, "%s: pAdapter is NULL!", __func__); + return VOS_STATUS_E_FAILURE; + } + + /* create the event */ + memset(&wrqu, 0, sizeof(wrqu)); + memset(metrics_notification, 0, sizeof(metrics_notification)); + + wrqu.data.pointer = metrics_notification; + wrqu.data.length = scnprintf(metrics_notification, + sizeof(metrics_notification), "QCOM: LFR_PREAUTH_HANDOVER " + MAC_ADDRESS_STR, MAC_ADDR_ARRAY(pRoamInfo->bssid)); + + wireless_send_event(pAdapter->dev, IWEVCUSTOM, &wrqu, metrics_notification); + + EXIT(); + + return VOS_STATUS_SUCCESS; +} +#endif + /* * FUNCTION: hdd_cfg80211_scan_done_callback * scanning callback function, called after finishing scan @@ -4196,6 +4707,8 @@ static eHalStatus hdd_cfg80211_scan_done_callback(tHalHandle halHandle, "scanID = %d, returned status = %d\n", __func__, halHandle, pContext, (int) scanId, (int) status); + pScanInfo->mScanPendingCounter = 0; + //Block on scan req completion variable. Can't wait forever though. ret = wait_for_completion_interruptible_timeout( &pScanInfo->scan_req_completion_event, @@ -4206,7 +4719,7 @@ static eHalStatus hdd_cfg80211_scan_done_callback(tHalHandle halHandle, goto allow_suspend; } - if(pScanInfo->mScanPending != VOS_TRUE) + if (pScanInfo->mScanPending != VOS_TRUE) { VOS_ASSERT(pScanInfo->mScanPending); goto allow_suspend; @@ -4387,12 +4900,12 @@ int wlan_hdd_cfg80211_scan( struct wiphy *wiphy, hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR( dev ); hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX( pAdapter ); hdd_wext_state_t *pwextBuf = WLAN_HDD_GET_WEXT_STATE_PTR(pAdapter); - hdd_config_t *cfg_param = (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini; + hdd_config_t *cfg_param = NULL; tCsrScanRequest scanRequest; tANI_U8 *channelList = NULL, i; v_U32_t scanId = 0; - int status = 0; - hdd_scaninfo_t *pScanInfo = &pAdapter->scan_info; + int status; + hdd_scaninfo_t *pScanInfo = NULL; v_U8_t* pP2pIe = NULL; ENTER(); @@ -4400,6 +4913,18 @@ int wlan_hdd_cfg80211_scan( struct wiphy *wiphy, hddLog(VOS_TRACE_LEVEL_INFO, "%s: device_mode = %d\n", __func__,pAdapter->device_mode); + status = wlan_hdd_validate_context(pHddCtx); + + if (0 != status) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: HDD context is not valid", __func__); + return status; + } + + cfg_param = pHddCtx->cfg_ini; + pScanInfo = &pAdapter->scan_info; + if ((WLAN_HDD_INFRA_STATION == pAdapter->device_mode) && (eConnectionState_Connecting == (WLAN_HDD_GET_STATION_CTX_PTR(pAdapter))->conn_info.connState)) @@ -4430,30 +4955,20 @@ int wlan_hdd_cfg80211_scan( struct wiphy *wiphy, if (TRUE == pScanInfo->mScanPending) { - hddLog(VOS_TRACE_LEVEL_INFO, "%s: mScanPending is TRUE", __func__); + if ( MAX_PENDING_LOG > pScanInfo->mScanPendingCounter++ ) + { + hddLog(VOS_TRACE_LEVEL_ERROR, "%s: mScanPending is TRUE", __func__); + } return -EBUSY; } - if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:LOGP in Progress. Ignore!!!", __func__); - return -EAGAIN; - } - - if ((WLAN_HDD_GET_CTX(pAdapter))->isLoadUnloadInProgress) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:Unloading/Loading in Progress. Ignore!!!", __func__); - return -EAGAIN; - } //Don't Allow Scan and return busy if Remain On //Channel and action frame is pending //Otherwise Cancel Remain On Channel and allow Scan //If no action frame pending if (0 != wlan_hdd_check_remain_on_channel(pAdapter)) { - hddLog(VOS_TRACE_LEVEL_INFO, "%s: Remain On Channel Pending", __func__); + hddLog(VOS_TRACE_LEVEL_ERROR, "%s: Remain On Channel Pending", __func__); return -EBUSY; } #ifdef FEATURE_WLAN_TDLS @@ -4741,6 +5256,7 @@ free_mem: return status; } + void hdd_select_cbmode( hdd_adapter_t *pAdapter,v_U8_t operationChannel) { v_U8_t iniDot11Mode = @@ -4749,24 +5265,24 @@ void hdd_select_cbmode( hdd_adapter_t *pAdapter,v_U8_t operationChannel) switch ( iniDot11Mode ) { - case eHDD_DOT11_MODE_AUTO: - case eHDD_DOT11_MODE_11ac: - case eHDD_DOT11_MODE_11ac_ONLY: + case eHDD_DOT11_MODE_AUTO: + case eHDD_DOT11_MODE_11ac: + case eHDD_DOT11_MODE_11ac_ONLY: #ifdef WLAN_FEATURE_11AC - hddDot11Mode = eHDD_DOT11_MODE_11ac; + hddDot11Mode = eHDD_DOT11_MODE_11ac; #else - hddDot11Mode = eHDD_DOT11_MODE_11n; + hddDot11Mode = eHDD_DOT11_MODE_11n; #endif - break; + break; case eHDD_DOT11_MODE_11n: case eHDD_DOT11_MODE_11n_ONLY: - hddDot11Mode = eHDD_DOT11_MODE_11n; - break; + hddDot11Mode = eHDD_DOT11_MODE_11n; + break; default: - hddDot11Mode = iniDot11Mode; - break; + hddDot11Mode = iniDot11Mode; + break; } - /* This call decides required channel bonding mode */ + /* This call decides required channel bonding mode */ sme_SelectCBMode((WLAN_HDD_GET_CTX(pAdapter)->hHal), hdd_cfg_xlate_to_csr_phy_mode(hddDot11Mode), operationChannel); @@ -4936,7 +5452,7 @@ int wlan_hdd_cfg80211_connect_start( hdd_adapter_t *pAdapter, pRoamProfile->ChannelInfo.ChannelList = NULL; pRoamProfile->ChannelInfo.numOfChannels = 0; } - if ( (WLAN_HDD_IBSS == pAdapter->device_mode) && operatingChannel ) + if ( (WLAN_HDD_IBSS == pAdapter->device_mode) && operatingChannel) { hdd_select_cbmode(pAdapter,operatingChannel); } @@ -4946,15 +5462,17 @@ int wlan_hdd_cfg80211_connect_start( hdd_adapter_t *pAdapter, * by either hdd_AssociationCompletionHandler() or hdd_DisConnectHandler() in sme_RoamCallback() * if sme_RomConnect is to be queued, Connecting state will remain until it is completed. */ - if (WLAN_HDD_INFRA_STATION == pAdapter->device_mode) + if (WLAN_HDD_INFRA_STATION == pAdapter->device_mode || + WLAN_HDD_P2P_CLIENT == pAdapter->device_mode) hdd_connSetConnectionState(WLAN_HDD_GET_STATION_CTX_PTR(pAdapter), eConnectionState_Connecting); status = sme_RoamConnect( WLAN_HDD_GET_HAL_CTX(pAdapter), pAdapter->sessionId, pRoamProfile, &roamId); - if( (eHAL_STATUS_SUCCESS != status) && - (WLAN_HDD_INFRA_STATION == pAdapter->device_mode) ) + if ((eHAL_STATUS_SUCCESS != status) && + (WLAN_HDD_INFRA_STATION == pAdapter->device_mode || + WLAN_HDD_P2P_CLIENT == pAdapter->device_mode)) { hddLog(VOS_TRACE_LEVEL_ERROR, "%s: sme_RoamConnect (session %d) failed with " @@ -5247,9 +5765,7 @@ int wlan_hdd_cfg80211_set_ie( hdd_adapter_t *pAdapter, pWextState->roamProfile.nWPAReqIELength = eLen + 2;//ie_len; } else if ( (0 == memcmp(&genie[0], P2P_OUI_TYPE, - P2P_OUI_TYPE_SIZE)) - /*Consider P2P IE, only for P2P Client */ - && (WLAN_HDD_P2P_CLIENT == pAdapter->device_mode) ) + P2P_OUI_TYPE_SIZE))) { v_U16_t curAddIELen = pWextState->assocAddIE.length; hddLog (VOS_TRACE_LEVEL_INFO, "%s Set P2P IE(len %d)", @@ -5317,6 +5833,123 @@ int wlan_hdd_cfg80211_set_ie( hdd_adapter_t *pAdapter, pWextState->roamProfile.nAddIEAssocLength = pWextState->assocAddIE.length; } + if (WLAN_HDD_IBSS == pAdapter->device_mode) { + + /* populating as ADDIE in beacon frames */ + if (ccmCfgSetStr(WLAN_HDD_GET_HAL_CTX(pAdapter), + WNI_CFG_PROBE_RSP_BCN_ADDNIE_DATA, genie - 2, eLen + 2, + NULL, eANI_BOOLEAN_FALSE)== eHAL_STATUS_SUCCESS) + { + if (ccmCfgSetInt(WLAN_HDD_GET_HAL_CTX(pAdapter), + WNI_CFG_PROBE_RSP_BCN_ADDNIE_FLAG, 1,NULL, + eANI_BOOLEAN_FALSE) == eHAL_STATUS_FAILURE) + { + hddLog(LOGE, + "Coldn't pass " + "WNI_CFG_PROBE_RSP_BCN_ADDNIE_FLAG to CCM"); + } + }/* ccmCfgSetStr(,WNI_CFG_PROBE_RSP_BCN_ADDNIE_DATA, , )*/ + else + hddLog(LOGE, + "Could not pass on " + "WNI_CFG_PROBE_RSP_BCN_ADDNIE_DATA to CCM"); + + /* IBSS mode doesn't contain params->proberesp_ies still + beaconIE's need to be populated in probe response frames */ + if ( (NULL != (genie - 2)) && (0 != eLen + 2) ) + { + u16 rem_probe_resp_ie_len = eLen + 2; + u8 probe_rsp_ie_len[3] = {0}; + u8 counter = 0; + + /* Check Probe Resp Length if it is greater then 255 then + Store Probe Rsp IEs into WNI_CFG_PROBE_RSP_ADDNIE_DATA1 + & WNI_CFG_PROBE_RSP_ADDNIE_DATA2 CFG Variable As We are + not able Store More then 255 bytes into One Variable */ + + while ((rem_probe_resp_ie_len > 0) && (counter < 3)) + { + if (rem_probe_resp_ie_len > MAX_CFG_STRING_LEN) + { + probe_rsp_ie_len[counter++] = MAX_CFG_STRING_LEN; + rem_probe_resp_ie_len -= MAX_CFG_STRING_LEN; + } + else + { + probe_rsp_ie_len[counter++] = rem_probe_resp_ie_len; + rem_probe_resp_ie_len = 0; + } + } + + rem_probe_resp_ie_len = 0; + + if (probe_rsp_ie_len[0] > 0) + { + if (ccmCfgSetStr(WLAN_HDD_GET_HAL_CTX(pAdapter), + WNI_CFG_PROBE_RSP_ADDNIE_DATA1, + (tANI_U8*)(genie - 2), + probe_rsp_ie_len[0], NULL, + eANI_BOOLEAN_FALSE) + == eHAL_STATUS_FAILURE) + { + hddLog(LOGE, + "Could not pass" + "on WNI_CFG_PROBE_RSP_ADDNIE_DATA1 to CCM"); + } + rem_probe_resp_ie_len += probe_rsp_ie_len[0]; + } + + if (probe_rsp_ie_len[1] > 0) + { + if (ccmCfgSetStr(WLAN_HDD_GET_HAL_CTX(pAdapter), + WNI_CFG_PROBE_RSP_ADDNIE_DATA2, + (tANI_U8*)(genie - (2 + rem_probe_resp_ie_len)), + probe_rsp_ie_len[1], NULL, + eANI_BOOLEAN_FALSE) + == eHAL_STATUS_FAILURE) + { + hddLog(LOGE, + "Could not pass" + "on WNI_CFG_PROBE_RSP_ADDNIE_DATA2 to CCM"); + } + rem_probe_resp_ie_len += probe_rsp_ie_len[1]; + } + + if (probe_rsp_ie_len[2] > 0) + { + if (ccmCfgSetStr(WLAN_HDD_GET_HAL_CTX(pAdapter), + WNI_CFG_PROBE_RSP_ADDNIE_DATA3, + (tANI_U8*)(genie - (2 + rem_probe_resp_ie_len)), + probe_rsp_ie_len[2], NULL, + eANI_BOOLEAN_FALSE) + == eHAL_STATUS_FAILURE) + { + hddLog(LOGE, + "Could not pass" + "on WNI_CFG_PROBE_RSP_ADDNIE_DATA3 to CCM"); + } + rem_probe_resp_ie_len += probe_rsp_ie_len[2]; + } + + if (ccmCfgSetInt(WLAN_HDD_GET_HAL_CTX(pAdapter), + WNI_CFG_PROBE_RSP_ADDNIE_FLAG, 1,NULL, + eANI_BOOLEAN_FALSE) == eHAL_STATUS_FAILURE) + { + hddLog(LOGE, + "Could not pass" + "on WNI_CFG_PROBE_RSP_ADDNIE_FLAG to CCM"); + } + } + else + { + // Reset WNI_CFG_PROBE_RSP Flags + wlan_hdd_reset_prob_rspies(pAdapter); + + hddLog(VOS_TRACE_LEVEL_INFO, + "%s: No Probe Response IE received in set beacon", + __func__); + } + } /* end of if (WLAN_HDD_IBSS == pAdapter->device_mode) */ break; case DOT11F_EID_RSN: hddLog (VOS_TRACE_LEVEL_INFO, "%s Set RSN IE(len %d)",__func__, eLen + 2); @@ -5450,13 +6083,7 @@ int wlan_hdd_cfg80211_set_privacy( hdd_adapter_t *pAdapter, if (req->crypto.wpa_versions) { - if ( (NL80211_WPA_VERSION_1 == req->crypto.wpa_versions) - && ( (req->ie_len) - && (hdd_isWPAIEPresent(req->ie, req->ie_len) ) ) ) - // Make sure that it is including a WPA IE. - /* Currently NL is putting WPA version 1 even for open, - * since p2p ie is also put in same buffer. - * */ + if (NL80211_WPA_VERSION_1 == req->crypto.wpa_versions) { pWextState->wpaVersion = IW_AUTH_WPA_VERSION_WPA; } @@ -5592,7 +6219,7 @@ static int wlan_hdd_cfg80211_connect( struct wiphy *wiphy, struct cfg80211_connect_params *req ) { - int status = 0; + int status; hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR( ndev ); VOS_STATUS exitbmpsStatus = VOS_STATUS_E_INVAL; hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); @@ -5602,11 +6229,14 @@ static int wlan_hdd_cfg80211_connect( struct wiphy *wiphy, hddLog(VOS_TRACE_LEVEL_INFO, "%s: device_mode = %d\n",__func__,pAdapter->device_mode); - if ( (WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress ) + pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + status = wlan_hdd_validate_context(pHddCtx); + + if (0 != status) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s:LOGP in Progress. Ignore!!!", __func__); - return -EAGAIN; + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: HDD context is not valid", __func__); + return status; } #ifdef WLAN_BTAMP_FEATURE @@ -5628,30 +6258,13 @@ static int wlan_hdd_cfg80211_connect( struct wiphy *wiphy, return status; } - /* - * If Powersave Offload is enabled - * Fw will take care incase of concurrency - */ - if(!pHddCtx->cfg_ini->enablePowersaveOffload) + //If Device Mode is Station Concurrent Sessions Exit BMps + //P2P Mode will be taken care in Open/close adapter + if(!pHddCtx->cfg_ini->enablePowersaveOffload && + (WLAN_HDD_INFRA_STATION == pAdapter->device_mode) && + (vos_concurrent_sessions_running())) { - //If Device Mode is Station Concurrent Sessions Exit BMps - //P2P Mode will be taken care in Open/close adapter - if((WLAN_HDD_INFRA_STATION == pAdapter->device_mode) && - (vos_concurrent_sessions_running())) - { - v_CONTEXT_t pVosContext = - vos_get_global_context( VOS_MODULE_ID_HDD, NULL ); - - if (NULL != pVosContext) - { - pHddCtx = vos_get_context( VOS_MODULE_ID_HDD, pVosContext); - if(NULL != pHddCtx) - { - exitbmpsStatus = hdd_disable_bmps_imps(pHddCtx, - WLAN_HDD_INFRA_STATION); - } - } - } + exitbmpsStatus = hdd_disable_bmps_imps(pHddCtx, WLAN_HDD_INFRA_STATION); } if ( req->channel ) @@ -5663,30 +6276,29 @@ static int wlan_hdd_cfg80211_connect( struct wiphy *wiphy, else { status = wlan_hdd_cfg80211_connect_start(pAdapter, req->ssid, - req->ssid_len, req->bssid, - 0); + req->ssid_len, req->bssid, 0); } if (0 > status) { - /* - * If Powersave Offload is enabled - * Fw will take care incase of concurrency - */ - if(!pHddCtx->cfg_ini->enablePowersaveOffload) + //ReEnable BMPS if disabled + // If PS offload is enabled, fw will take care of +// ps in cae of concurrency. + if((VOS_STATUS_SUCCESS == exitbmpsStatus) && + (NULL != pHddCtx) && !pHddCtx->cfg_ini->enablePowersaveOffload) { - //ReEnable BMPS if disabled - if((VOS_STATUS_SUCCESS == exitbmpsStatus) && - (NULL != pHddCtx)) + if (pHddCtx->hdd_wlan_suspended) { - //ReEnable Bmps and Imps back - hdd_enable_bmps_imps(pHddCtx); + hdd_set_pwrparams(pHddCtx); } + //ReEnable Bmps and Imps back + hdd_enable_bmps_imps(pHddCtx); } + hddLog(VOS_TRACE_LEVEL_ERROR, "%s: connect failed", __func__); return status; } - (WLAN_HDD_GET_CTX(pAdapter))->isAmpAllowed = VOS_FALSE; + pHddCtx->isAmpAllowed = VOS_FALSE; EXIT(); return status; } @@ -5698,15 +6310,26 @@ static int wlan_hdd_cfg80211_connect( struct wiphy *wiphy, */ int wlan_hdd_disconnect( hdd_adapter_t *pAdapter, u16 reason ) { - int status = 0; + int status; hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); + hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + + status = wlan_hdd_validate_context(pHddCtx); + + if (0 != status) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: HDD context is not valid", __func__); + return status; + } /*stop tx queues*/ netif_tx_disable(pAdapter->dev); netif_carrier_off(pAdapter->dev); + pHddCtx->isAmpAllowed = VOS_TRUE; pHddStaCtx->conn_info.connState = eConnectionState_Disconnecting; - (WLAN_HDD_GET_CTX(pAdapter))->isAmpAllowed = VOS_TRUE; INIT_COMPLETION(pAdapter->disconnect_comp_var); + /*issue disconnect*/ status = sme_RoamDisconnect( WLAN_HDD_GET_HAL_CTX(pAdapter), pAdapter->sessionId, reason); @@ -5737,10 +6360,10 @@ static int wlan_hdd_cfg80211_disconnect( struct wiphy *wiphy, hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR( dev ); tCsrRoamProfile *pRoamProfile = &(WLAN_HDD_GET_WEXT_STATE_PTR(pAdapter))->roamProfile; - int status = 0; + int status; hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); -#ifdef FEATURE_WLAN_TDLS hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); +#ifdef FEATURE_WLAN_TDLS tANI_U8 staIdx; #endif @@ -5752,12 +6375,15 @@ static int wlan_hdd_cfg80211_disconnect( struct wiphy *wiphy, hddLog(VOS_TRACE_LEVEL_INFO, "%s: Disconnect called with reason code %d", __func__, reason); - if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) + status = wlan_hdd_validate_context(pHddCtx); + + if (0 != status) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s:LOGP in Progress. Ignore!!!",__func__); - return -EAGAIN; + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: HDD context is not valid", __func__); + return status; } + if (NULL != pRoamProfile) { /*issue disconnect request to SME, if station is in connected state*/ @@ -5765,6 +6391,7 @@ static int wlan_hdd_cfg80211_disconnect( struct wiphy *wiphy, { eCsrRoamDisconnectReason reasonCode = eCSR_DISCONNECT_REASON_UNSPECIFIED; + hdd_scaninfo_t *pScanInfo; switch(reason) { case WLAN_REASON_MIC_FAILURE: @@ -5787,6 +6414,14 @@ static int wlan_hdd_cfg80211_disconnect( struct wiphy *wiphy, reasonCode = eCSR_DISCONNECT_REASON_UNSPECIFIED; break; } + pHddStaCtx->conn_info.connState = eConnectionState_NotConnected; + pScanInfo = &pAdapter->scan_info; + if (pScanInfo->mScanPending) + { + hddLog(VOS_TRACE_LEVEL_INFO, "Disconnect is in progress, " + "Aborting Scan"); + hdd_abort_mac_scan(pHddCtx, pAdapter->sessionId); + } #ifdef FEATURE_WLAN_TDLS /* First clean up the tdls peers if any */ @@ -5844,19 +6479,41 @@ static int wlan_hdd_cfg80211_set_privacy_ibss( ENTER(); pWextState->wpaVersion = IW_AUTH_WPA_VERSION_DISABLED; + vos_mem_zero(&pHddStaCtx->ibss_enc_key, sizeof(tCsrRoamSetKey)); if (params->ie_len && ( NULL != params->ie) ) { - if (WLAN_EID_RSN == params->ie[0]) + if (wlan_hdd_cfg80211_get_ie_ptr (params->ie, + params->ie_len, WLAN_EID_RSN )) { pWextState->wpaVersion = IW_AUTH_WPA_VERSION_WPA2; encryptionType = eCSR_ENCRYPT_TYPE_AES; } - else + else if ( hdd_isWPAIEPresent (params->ie, params->ie_len )) { - pWextState->wpaVersion = IW_AUTH_WPA_VERSION_WPA; - encryptionType = eCSR_ENCRYPT_TYPE_TKIP; + tDot11fIEWPA dot11WPAIE; + tHalHandle halHandle = WLAN_HDD_GET_HAL_CTX(pAdapter); + u8 *ie; + + memset(&dot11WPAIE, 0, sizeof(dot11WPAIE)); + ie = wlan_hdd_cfg80211_get_ie_ptr (params->ie, + params->ie_len, DOT11F_EID_WPA); + if ( NULL != ie ) + { + pWextState->wpaVersion = IW_AUTH_WPA_VERSION_WPA; + // Unpack the WPA IE + //Skip past the EID byte and length byte - and four byte WiFi OUI + dot11fUnpackIeWPA((tpAniSirGlobal) halHandle, + &ie[2+4], + ie[1] - 4, + &dot11WPAIE); + /*Extract the multicast cipher, the encType for unicast + cipher for wpa-none is none*/ + encryptionType = + hdd_TranslateWPAToCsrEncryptionType(dot11WPAIE.multicast_cipher); + } } + status = wlan_hdd_cfg80211_set_ie(pAdapter, params->ie, params->ie_len); if (0 > status) @@ -5883,11 +6540,11 @@ static int wlan_hdd_cfg80211_set_privacy_ibss( encryptionType = eCSR_ENCRYPT_TYPE_WEP40_STATICKEY; } - + VOS_TRACE (VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, + "encryptionType=%d", encryptionType); pHddStaCtx->conn_info.ucEncryptionType = encryptionType; pWextState->roamProfile.EncryptionType.numEntries = 1; pWextState->roamProfile.EncryptionType.encryptionType[0] = encryptionType; - return status; } @@ -5913,11 +6570,13 @@ static int wlan_hdd_cfg80211_join_ibss( struct wiphy *wiphy, hddLog(VOS_TRACE_LEVEL_INFO, "%s: device_mode = %d\n",__func__,pAdapter->device_mode); - if ( (WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress ) + status = wlan_hdd_validate_context(pHddCtx); + + if (0 != status) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s:LOGP in Progress. Ignore!!!", __func__); - return -EAGAIN; + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: HDD context is not valid", __func__); + return status; } if (NULL == pWextState) @@ -5938,12 +6597,12 @@ static int wlan_hdd_cfg80211_join_ibss( struct wiphy *wiphy, /* BSSID is provided by upper layers hence no need to AUTO generate */ if (NULL != params->bssid) { - if (ccmCfgSetInt(pHddCtx->hHal, WNI_CFG_IBSS_AUTO_BSSID, 0, - NULL, eANI_BOOLEAN_FALSE)==eHAL_STATUS_FAILURE) { - hddLog (VOS_TRACE_LEVEL_ERROR, - "%s:ccmCfgStInt faild for WNI_CFG_IBSS_AUTO_BSSID", __func__); - return -EIO; - } + if (ccmCfgSetInt(pHddCtx->hHal, WNI_CFG_IBSS_AUTO_BSSID, 0, + NULL, eANI_BOOLEAN_FALSE)==eHAL_STATUS_FAILURE) { + hddLog (VOS_TRACE_LEVEL_ERROR, + "%s:ccmCfgStInt faild for WNI_CFG_IBSS_AUTO_BSSID", __func__); + return -EIO; + } } else if(pHddCtx->cfg_ini->isCoalesingInIBSSAllowed == 0) { @@ -5991,10 +6650,10 @@ static int wlan_hdd_cfg80211_join_ibss( struct wiphy *wiphy, #endif if (0 != ccmCfgGetStr(hHal, WNI_CFG_VALID_CHANNEL_LIST, - validChan, &numChans)) + validChan, &numChans)) { hddLog(VOS_TRACE_LEVEL_ERROR, "%s: No valid channel list", - __func__); + __func__); return -EOPNOTSUPP; } @@ -6013,7 +6672,7 @@ static int wlan_hdd_cfg80211_join_ibss( struct wiphy *wiphy, } /* Set the Operational Channel */ hddLog(VOS_TRACE_LEVEL_INFO_HIGH, "%s: set channel %d", __func__, - channelNum); + channelNum); pRoamProfile->ChannelInfo.numOfChannels = 1; pHddStaCtx->conn_info.operationChannel = channelNum; pRoamProfile->ChannelInfo.ChannelList = @@ -6031,15 +6690,8 @@ static int wlan_hdd_cfg80211_join_ibss( struct wiphy *wiphy, /* Issue connect start */ status = wlan_hdd_cfg80211_connect_start(pAdapter, params->ssid, - params->ssid_len, params->bssid, - pHddStaCtx->conn_info.operationChannel); - - if (NULL != params->bssid && - pHddCtx->cfg_ini->isCoalesingInIBSSAllowed == 0 && - alloc_bssid == VOS_TRUE) - { - vos_mem_free(params->bssid); - } + params->ssid_len, params->bssid, + pHddStaCtx->conn_info.operationChannel); if (0 > status) { @@ -6047,7 +6699,13 @@ static int wlan_hdd_cfg80211_join_ibss( struct wiphy *wiphy, return status; } - return 0; + if (NULL != params->bssid && + pHddCtx->cfg_ini->isCoalesingInIBSSAllowed == 0 && + alloc_bssid == VOS_TRUE) + { + vos_mem_free(params->bssid); + } + return 0; } /* @@ -6061,14 +6719,19 @@ static int wlan_hdd_cfg80211_leave_ibss( struct wiphy *wiphy, hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR( dev ); hdd_wext_state_t *pWextState = WLAN_HDD_GET_WEXT_STATE_PTR(pAdapter); tCsrRoamProfile *pRoamProfile; + hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + int status; + tANI_U8 addIE[WNI_CFG_PROBE_RSP_BCN_ADDNIE_DATA_LEN] = {0}; ENTER(); - if ( (WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress ) + status = wlan_hdd_validate_context(pHddCtx); + + if (0 != status) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s:LOGP in Progress. Ignore!!!", __func__); - return -EAGAIN; + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: HDD context is not valid", __func__); + return status; } hddLog(VOS_TRACE_LEVEL_INFO, "%s: device_mode = %d\n",__func__,pAdapter->device_mode); @@ -6089,6 +6752,41 @@ static int wlan_hdd_cfg80211_leave_ibss( struct wiphy *wiphy, return -EINVAL; } +#ifdef FEATURE_CESIUM_PROPRIETARY + /* Clearing add IE of beacon */ + if (ccmCfgSetStr(pHddCtx->hHal, + WNI_CFG_PROBE_RSP_BCN_ADDNIE_DATA, &addIE[0], + WNI_CFG_PROBE_RSP_BCN_ADDNIE_DATA_LEN, + NULL, eANI_BOOLEAN_FALSE) != eHAL_STATUS_SUCCESS) + { + hddLog (VOS_TRACE_LEVEL_ERROR, + "%s: unable to clear PROBE_RSP_BCN_ADDNIE_DATA", __func__); + return -EINVAL; + } + if (ccmCfgSetInt(pHddCtx->hHal, + WNI_CFG_PROBE_RSP_BCN_ADDNIE_FLAG, 0, NULL, + eANI_BOOLEAN_FALSE) != eHAL_STATUS_SUCCESS) + { + hddLog (VOS_TRACE_LEVEL_ERROR, + "%s: unable to clear WNI_CFG_PROBE_RSP_BCN_ADDNIE_FLAG", + __func__); + return -EINVAL; + } + + // Reset WNI_CFG_PROBE_RSP Flags + wlan_hdd_reset_prob_rspies(pAdapter); + + if (ccmCfgSetInt(WLAN_HDD_GET_HAL_CTX(pAdapter), + WNI_CFG_PROBE_RSP_ADDNIE_FLAG, 0,NULL, + eANI_BOOLEAN_FALSE) == eHAL_STATUS_FAILURE) + { + hddLog (VOS_TRACE_LEVEL_ERROR, + "%s: unable to clear WNI_CFG_PROBE_RSP_ADDNIE_FLAG", + __func__); + return -EINVAL; + } +#endif + /* Issue Disconnect request */ INIT_COMPLETION(pAdapter->disconnect_comp_var); sme_RoamDisconnect( WLAN_HDD_GET_HAL_CTX(pAdapter), pAdapter->sessionId, @@ -6107,14 +6805,17 @@ static int wlan_hdd_cfg80211_set_wiphy_params(struct wiphy *wiphy, { hdd_context_t *pHddCtx = wiphy_priv(wiphy); tHalHandle hHal = pHddCtx->hHal; + int status; ENTER(); - if ( pHddCtx->isLogpInProgress ) + status = wlan_hdd_validate_context(pHddCtx); + + if (0 != status) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s:LOGP in Progress. Ignore!!!", __func__); - return -EAGAIN; + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: HDD context is not valid", __func__); + return status; } if (changed & WIPHY_PARAM_RTS_THRESHOLD) @@ -6239,12 +6940,24 @@ static int wlan_hdd_cfg80211_set_txpower(struct wiphy *wiphy, int dbm) { hdd_context_t *pHddCtx = (hdd_context_t*) wiphy_priv(wiphy); - tHalHandle hHal = pHddCtx->hHal; + tHalHandle hHal = NULL; tSirMacAddr bssid = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}; tSirMacAddr selfMac = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}; + int status; ENTER(); + status = wlan_hdd_validate_context(pHddCtx); + + if (0 != status) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: HDD context is not valid", __func__); + return status; + } + + hHal = pHddCtx->hHal; + if (0 != ccmCfgSetInt(hHal, WNI_CFG_CURRENT_TX_POWER_LEVEL, dbm, ccmCfgSetCallback, eANI_BOOLEAN_TRUE)) @@ -6254,13 +6967,6 @@ static int wlan_hdd_cfg80211_set_txpower(struct wiphy *wiphy, return -EIO; } - if ( pHddCtx->isLogpInProgress ) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s:LOGP in Progress. Ignore!!!", __func__); - return -EAGAIN; - } - hddLog(VOS_TRACE_LEVEL_INFO_MED, "%s: set tx power level %d dbm", __func__, dbm); @@ -6303,21 +7009,18 @@ static int wlan_hdd_cfg80211_get_txpower(struct wiphy *wiphy, hdd_adapter_t *pAdapter; hdd_context_t *pHddCtx = (hdd_context_t*) wiphy_priv(wiphy); + int status; ENTER(); - if (NULL == pHddCtx) - { - hddLog(VOS_TRACE_LEVEL_FATAL,"%s: HDD context is Null",__func__); - *dbm = 0; - return -ENOENT; - } + status = wlan_hdd_validate_context(pHddCtx); - if ( pHddCtx->isLogpInProgress ) + if (0 != status) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s:LOGP in Progress. Ignore!!!", __func__); - return -EAGAIN; + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: HDD context is not valid", __func__); + *dbm = 0; + return status; } pAdapter = hdd_get_adapter(pHddCtx, WLAN_HDD_INFRA_STATION); @@ -6337,9 +7040,9 @@ static int wlan_hdd_cfg80211_get_txpower(struct wiphy *wiphy, static int wlan_hdd_cfg80211_get_station(struct wiphy *wiphy, struct net_device *dev, u8* mac, struct station_info *sinfo) { - hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); - hdd_station_ctx_t *pHddStaCtx; - int ssidlen; + hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR( dev ); + hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); + int ssidlen = pHddStaCtx->conn_info.SSID.SSID.length; tANI_U8 rate_flags; hdd_context_t *pHddCtx = (hdd_context_t*) wiphy_priv(wiphy); @@ -6359,6 +7062,7 @@ static int wlan_hdd_cfg80211_get_station(struct wiphy *wiphy, struct net_device tANI_U8 rateFlag = 1; tANI_U8 i, j, rssidx; tANI_U16 temp; + int status; #ifdef WLAN_FEATURE_11AC tANI_U32 vht_mcs_map; @@ -6367,27 +7071,6 @@ static int wlan_hdd_cfg80211_get_station(struct wiphy *wiphy, struct net_device ENTER(); - if (pHddCtx->isLogpInProgress) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s:LOGP in Progress. Ignore!!!", __func__); - return -EAGAIN; - } - - if (NULL == pAdapter) - { - hddLog(VOS_TRACE_LEVEL_FATAL, "%s: pAdapter is NULL!", __func__); - return -EINVAL;; - } - - pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); - if (NULL == pHddStaCtx) - { - hddLog(VOS_TRACE_LEVEL_FATAL, "%s: pHddStaCtx is NULL!", __func__); - return -EINVAL;; - } - - ssidlen = pHddStaCtx->conn_info.SSID.SSID.length; if ((eConnectionState_Associated != pHddStaCtx->conn_info.connState) || (0 == ssidlen)) { @@ -6397,6 +7080,15 @@ static int wlan_hdd_cfg80211_get_station(struct wiphy *wiphy, struct net_device return 0; } + status = wlan_hdd_validate_context(pHddCtx); + + if (0 != status) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: HDD context is not valid", __func__); + return status; + } + wlan_hdd_get_rssi(pAdapter, &sinfo->signal); sinfo->filled |= STATION_INFO_SIGNAL; @@ -6507,10 +7199,12 @@ static int wlan_hdd_cfg80211_get_station(struct wiphy *wiphy, struct net_device /* Update MAX rate */ maxRate = (currentRate > maxRate)?currentRate:maxRate; } - /* Get MCS Rate Set -- but only if we are connected at MCS - rates or if we are always reporting max speed or if we have - good rssi */ - if ((0 == rssidx) && !(rate_flags & eHAL_TX_RATE_LEGACY)) + /* Get MCS Rate Set -- + only if we are connected at MCS rates (or) + if we are always reporting max speed (or) + if we have good rssi */ + if (((0 == rssidx) && !(rate_flags & eHAL_TX_RATE_LEGACY)) || + (eHDD_LINK_SPEED_REPORT_MAX == pCfg->reportMaxLinkSpeed)) { if (0 != ccmCfgGetStr(WLAN_HDD_GET_HAL_CTX(pAdapter), WNI_CFG_CURRENT_MCS_SET, MCSRates, &MCSLeng)) @@ -6763,11 +7457,12 @@ static int wlan_hdd_cfg80211_get_station(struct wiphy *wiphy, struct net_device } static int wlan_hdd_cfg80211_set_power_mgmt(struct wiphy *wiphy, - struct net_device *dev, bool mode, v_SINT_t timeout) + struct net_device *dev, bool mode, int timeout) { hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); hdd_context_t *pHddCtx; - VOS_STATUS vos_status = VOS_STATUS_SUCCESS; + VOS_STATUS vos_status; + int status; ENTER(); @@ -6778,17 +7473,13 @@ static int wlan_hdd_cfg80211_set_power_mgmt(struct wiphy *wiphy, } pHddCtx = WLAN_HDD_GET_CTX(pAdapter); - if (NULL == pHddCtx) - { - hddLog(VOS_TRACE_LEVEL_FATAL, "%s: HDD context is NULL\n", __func__); - return -ENODEV; - } + status = wlan_hdd_validate_context(pHddCtx); - if ( pHddCtx->isLogpInProgress ) + if (0 != status) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s:LOGP in Progress. Ignore!!!", __func__); - return -EAGAIN; + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: HDD context is not valid", __func__); + return status; } if ((DRIVER_POWER_MODE_AUTO == !mode) && @@ -6797,6 +7488,9 @@ static int wlan_hdd_cfg80211_set_power_mgmt(struct wiphy *wiphy, (eConnectionState_Associated == (WLAN_HDD_GET_STATION_CTX_PTR(pAdapter))->conn_info.connState)) { + + hddLog(VOS_TRACE_LEVEL_INFO, + "offload: in cfg80211_set_power_mgmt, calling arp offload"); vos_status = hdd_conf_arp_offload(pAdapter, TRUE); if (!VOS_IS_STATUS_SUCCESS(vos_status)) { @@ -6855,28 +7549,26 @@ static int wlan_hdd_cfg80211_del_station(struct wiphy *wiphy, struct net_device *dev, u8 *mac) { hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + hdd_context_t *pHddCtx; VOS_STATUS vos_status; + int status; v_U8_t staId; ENTER(); - if ( NULL == pAdapter || NULL == pAdapter->pHddCtx) + if ( NULL == pAdapter ) { - hddLog(VOS_TRACE_LEVEL_FATAL, "%s: Invalid Adapter or HDD Context " ,__func__); + hddLog(VOS_TRACE_LEVEL_ERROR, "%s: Invalid Adapter" ,__func__); return -EINVAL; } - if (((hdd_context_t*)pAdapter->pHddCtx)->isLoadUnloadInProgress) - { - hddLog( LOGE, - "%s: Wlan Load/Unload is in progress", __func__); - return -EBUSY; - } + pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + status = wlan_hdd_validate_context(pHddCtx); - if ( (WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress ) + if (0 != status) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s:LOGP in Progress. Ignore!!!", __func__); - return -EAGAIN; + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: HDD context is not valid", __func__); + return status; } if ( (WLAN_HDD_SOFTAP == pAdapter->device_mode) @@ -6888,7 +7580,8 @@ static int wlan_hdd_cfg80211_del_station(struct wiphy *wiphy, v_U16_t i; for(i = 0; i < WLAN_MAX_STA_COUNT; i++) { - if(pAdapter->aStaInfo[i].isUsed) + if ((pAdapter->aStaInfo[i].isUsed) && + (!pAdapter->aStaInfo[i].isDeauthInProgress)) { u8 *macAddr = pAdapter->aStaInfo[i].macAddrSTA.bytes; hddLog(VOS_TRACE_LEVEL_INFO, @@ -6897,7 +7590,9 @@ static int wlan_hdd_cfg80211_del_station(struct wiphy *wiphy, __func__, macAddr[0], macAddr[1], macAddr[2], macAddr[3], macAddr[4], macAddr[5]); - hdd_softap_sta_deauth(pAdapter, macAddr); + vos_status = hdd_softap_sta_deauth(pAdapter, macAddr); + if (VOS_IS_STATUS_SUCCESS(vos_status)) + pAdapter->aStaInfo[i].isDeauthInProgress = TRUE; } } } @@ -6998,29 +7693,27 @@ static int wlan_hdd_cfg80211_set_pmksa(struct wiphy *wiphy, struct net_device *d hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); tHalHandle halHandle; eHalStatus result; + int status; tANI_U8 BSSIDMatched = 0; + hdd_context_t *pHddCtx; ENTER(); // Validate pAdapter - if ( NULL == pAdapter || NULL == pAdapter->pHddCtx) + if ( NULL == pAdapter ) { - hddLog(VOS_TRACE_LEVEL_FATAL, "%s: Invalid Adapter or HDD Context " ,__func__); + hddLog(VOS_TRACE_LEVEL_ERROR, "%s: Invalid Adapter" ,__func__); return -EINVAL; } - if (((hdd_context_t*)pAdapter->pHddCtx)->isLoadUnloadInProgress) - { - hddLog( LOGE, - "%s: Wlan Load/Unload is in progress", __func__); - return -EBUSY; - } + pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + status = wlan_hdd_validate_context(pHddCtx); - if ( (WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress ) + if (0 != status) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s:LOGP in Progress. Ignore!!!", __func__); - return -EAGAIN; + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: HDD context is not valid", __func__); + return status; } // Retrieve halHandle @@ -7087,6 +7780,7 @@ static int wlan_hdd_cfg80211_del_pmksa(struct wiphy *wiphy, struct net_device *d tANI_U32 j=0; hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); tHalHandle halHandle; + int status; tANI_U8 BSSIDMatched = 0; hdd_context_t *pHddCtx; int result = 0; @@ -7102,6 +7796,14 @@ static int wlan_hdd_cfg80211_del_pmksa(struct wiphy *wiphy, struct net_device *d } pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + status = wlan_hdd_validate_context(pHddCtx); + + if (0 != status) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: HDD context is not valid", __func__); + return status; + } /*Retrieve halHandle*/ halHandle = WLAN_HDD_GET_HAL_CTX(pAdapter); @@ -7180,6 +7882,7 @@ static int wlan_hdd_cfg80211_flush_pmksa(struct wiphy *wiphy, struct net_device tHalHandle halHandle; hdd_context_t *pHddCtx; tANI_U8 *pBSSId; + int status; int result; hddLog(VOS_TRACE_LEVEL_DEBUG, "%s: flushing PMKSA ",__func__); @@ -7193,6 +7896,14 @@ static int wlan_hdd_cfg80211_flush_pmksa(struct wiphy *wiphy, struct net_device } pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + status = wlan_hdd_validate_context(pHddCtx); + + if (0 != status) + { + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s: HDD context is not valid", __func__); + return status; + } /*Retrieve halHandle*/ halHandle = WLAN_HDD_GET_HAL_CTX(pAdapter); @@ -7246,13 +7957,13 @@ static int wlan_hdd_cfg80211_update_ft_ies(struct wiphy *wiphy, // Added for debug on reception of Re-assoc Req. if (eConnectionState_Associated != pHddStaCtx->conn_info.connState) { - hddLog(LOGE, FL("Called with Ie of length = %d when not associated\n"), + hddLog(LOGE, FL("Called with Ie of length = %zu when not associated\n"), ftie->ie_len); hddLog(LOGE, FL("Should be Re-assoc Req IEs\n")); } #ifdef WLAN_FEATURE_VOWIFI_11R_DEBUG - hddLog(LOGE, FL("%s called with Ie of length = %d\n"), __func__, + hddLog(LOGE, FL("%s called with Ie of length = %zu\n"), __func__, ftie->ie_len); #endif @@ -7288,12 +7999,59 @@ void hdd_cfg80211_sched_scan_done_callback(void *callbackContext, return ; } + spin_lock(&pHddCtx->schedScan_lock); + if (TRUE == pHddCtx->isWiphySuspended) + { + pHddCtx->isSchedScanUpdatePending = TRUE; + spin_unlock(&pHddCtx->schedScan_lock); + hddLog(VOS_TRACE_LEVEL_INFO, + "%s: Update cfg80211 scan database after it resume", __func__); + return ; + } + spin_unlock(&pHddCtx->schedScan_lock); + ret = wlan_hdd_cfg80211_update_bss(pHddCtx->wiphy, pAdapter); if (0 > ret) hddLog(VOS_TRACE_LEVEL_INFO, "%s: NO SCAN result", __func__); cfg80211_sched_scan_results(pHddCtx->wiphy); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s: cfg80211 scan result database updated", __func__); +} + +/* + * FUNCTION: wlan_hdd_is_pno_allowed + * To check is there any P2P GO/SAP or P2P Client/STA + * session is active + */ +static eHalStatus wlan_hdd_is_pno_allowed(hdd_adapter_t *pAdapter) +{ + hdd_adapter_list_node_t *pAdapterNode = NULL, *pNext = NULL; + hdd_adapter_t *pTempAdapter = NULL; + hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + int status = 0; + status = hdd_get_front_adapter(pHddCtx, &pAdapterNode); + + while ((NULL != pAdapterNode) && (VOS_STATUS_SUCCESS == status)) + { + pTempAdapter = pAdapterNode->pAdapter; + + if (pTempAdapter != pAdapter) + { + if (((WLAN_HDD_INFRA_STATION == pTempAdapter->device_mode) && + (eConnectionState_NotConnected != (WLAN_HDD_GET_STATION_CTX_PTR(pTempAdapter))->conn_info.connState)) || + (WLAN_HDD_P2P_CLIENT == pTempAdapter->device_mode) || + (WLAN_HDD_P2P_GO == pTempAdapter->device_mode) || + (WLAN_HDD_SOFTAP == pTempAdapter->device_mode)) + { + return eHAL_STATUS_SUCCESS; + } + } + status = hdd_get_next_adapter ( pHddCtx, pAdapterNode, &pNext ); + pAdapterNode = pNext; + } + return eHAL_STATUS_FAILURE; } /* @@ -7307,11 +8065,12 @@ static int wlan_hdd_cfg80211_sched_scan_start(struct wiphy *wiphy, tpSirPNOScanReq pPnoRequest = NULL; hdd_context_t *pHddCtx; tHalHandle hHal; - v_U32_t i, indx, num_ch; + v_U32_t i, indx, num_ch, tempInterval; u8 valid_ch[WNI_CFG_VALID_CHANNEL_LIST_LEN]; u8 channels_allowed[WNI_CFG_VALID_CHANNEL_LIST_LEN]; v_U32_t num_channels_allowed = WNI_CFG_VALID_CHANNEL_LIST_LEN; eHalStatus status = eHAL_STATUS_FAILURE; + int ret = 0; if (NULL == pAdapter) { @@ -7321,18 +8080,13 @@ static int wlan_hdd_cfg80211_sched_scan_start(struct wiphy *wiphy, } pHddCtx = WLAN_HDD_GET_CTX(pAdapter); - if (NULL == pHddCtx) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: HDD context is Null!!!", __func__); - return -ENODEV; - } + ret = wlan_hdd_validate_context(pHddCtx); - if (pHddCtx->isLogpInProgress) + if (0 != ret) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s: LOGP in Progress. Ignore!!!", __func__); - return -EAGAIN; + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: HDD context is not valid", __func__); + return -EINVAL; } hHal = WLAN_HDD_GET_HAL_CTX(pAdapter); @@ -7340,7 +8094,29 @@ static int wlan_hdd_cfg80211_sched_scan_start(struct wiphy *wiphy, { VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, "%s: HAL context is Null!!!", __func__); - return -EAGAIN; + return -EINVAL; + } + + if ((WLAN_HDD_INFRA_STATION == pAdapter->device_mode) && + (eConnectionState_Connecting == + (WLAN_HDD_GET_STATION_CTX_PTR(pAdapter))->conn_info.connState)) + { + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s: %p(%d) Connection in progress: sched_scan_start denied (EBUSY)", __func__, \ + WLAN_HDD_GET_STATION_CTX_PTR(pAdapter), pAdapter->sessionId); + return -EBUSY; + } + + /* The current firmware design for PNO does not consider concurrent + * active sessions.Hence , determine the concurrent active sessions + * and return a failure to the framework on a request for schedule + * scan. + */ + if (eHAL_STATUS_SUCCESS == wlan_hdd_is_pno_allowed(pAdapter)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: Cannot handle sched_scan as p2p session is active", __func__); + return -EBUSY; } pPnoRequest = (tpSirPNOScanReq) vos_mem_malloc(sizeof (tSirPNOScanReq)); @@ -7348,9 +8124,10 @@ static int wlan_hdd_cfg80211_sched_scan_start(struct wiphy *wiphy, { VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s: vos_mem_malloc failed", __func__); - return -ENODEV; + return -ENOMEM; } + memset(pPnoRequest, 0, sizeof (tSirPNOScanReq)); pPnoRequest->enable = 1; /*Enable PNO */ pPnoRequest->ucNetworksCount = request->n_match_sets; @@ -7359,6 +8136,7 @@ static int wlan_hdd_cfg80211_sched_scan_start(struct wiphy *wiphy, { VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, "Network input is not correct"); + ret = -EINVAL; goto error; } @@ -7366,6 +8144,7 @@ static int wlan_hdd_cfg80211_sched_scan_start(struct wiphy *wiphy, { VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, "Incorrect number of channels"); + ret = -EINVAL; goto error; } @@ -7376,6 +8155,7 @@ static int wlan_hdd_cfg80211_sched_scan_start(struct wiphy *wiphy, { VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, "%s: failed to get valid channel list", __func__); + ret = -EINVAL; goto error; } /* Checking each channel against allowed channel list */ @@ -7404,6 +8184,7 @@ static int wlan_hdd_cfg80211_sched_scan_start(struct wiphy *wiphy, VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, "SSID Len %d is not correct for network %d", pPnoRequest->aNetworks[i].ssId.length, i); + ret = -EINVAL; goto error; } @@ -7424,12 +8205,49 @@ static int wlan_hdd_cfg80211_sched_scan_start(struct wiphy *wiphy, #endif } - /* framework provides interval in ms */ - pPnoRequest->scanTimers.ucScanTimersCount = 1; - pPnoRequest->scanTimers.aTimerValues[0].uTimerValue = - (request->interval)/1000; - pPnoRequest->scanTimers.aTimerValues[0].uTimerRepeat = 0; - pPnoRequest->modePNO = SIR_PNO_MODE_ON_SUSPEND; + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "request->ie_len = %zu", request->ie_len); + if ((0 < request->ie_len) && (NULL != request->ie)) + { + pPnoRequest->us24GProbeTemplateLen = request->ie_len; + memcpy(&pPnoRequest->p24GProbeTemplate, request->ie, + pPnoRequest->us24GProbeTemplateLen); + + pPnoRequest->us5GProbeTemplateLen = request->ie_len; + memcpy(&pPnoRequest->p5GProbeTemplate, request->ie, + pPnoRequest->us5GProbeTemplateLen); + } + + /* Driver gets only one time interval which is hardcoded in + * supplicant for 10000ms. Taking power consumption into account 6 timers + * will be used, Timervalue is increased exponentially i.e 10,20,40, + * 80,160,320 secs. And number of scan cycle for each timer + * is configurable through INI param gPNOScanTimerRepeatValue. + * If it is set to 0 only one timer will be used and PNO scan cycle + * will be repeated after each interval specified by supplicant + * till PNO is disabled. + */ + if (0 == pHddCtx->cfg_ini->configPNOScanTimerRepeatValue) + pPnoRequest->scanTimers.ucScanTimersCount = HDD_PNO_SCAN_TIMERS_SET_ONE; + else + pPnoRequest->scanTimers.ucScanTimersCount = + HDD_PNO_SCAN_TIMERS_SET_MULTIPLE; + + tempInterval = (request->interval)/1000; + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "Base scan interval = %d PNOScanTimerRepeatValue = %d", + tempInterval, pHddCtx->cfg_ini->configPNOScanTimerRepeatValue); + for ( i = 0; i < pPnoRequest->scanTimers.ucScanTimersCount; i++) + { + pPnoRequest->scanTimers.aTimerValues[i].uTimerRepeat = + pHddCtx->cfg_ini->configPNOScanTimerRepeatValue; + pPnoRequest->scanTimers.aTimerValues[i].uTimerValue = tempInterval; + tempInterval *= 2; + } + //Repeat last timer until pno disabled. + pPnoRequest->scanTimers.aTimerValues[i-1].uTimerRepeat = 0; + + pPnoRequest->modePNO = SIR_PNO_MODE_IMMEDIATE; status = sme_SetPreferredNetworkList(WLAN_HDD_GET_HAL_CTX(pAdapter), pPnoRequest, pAdapter->sessionId, @@ -7438,12 +8256,16 @@ static int wlan_hdd_cfg80211_sched_scan_start(struct wiphy *wiphy, { VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, "Failed to enable PNO"); + ret = -EINVAL; goto error; } + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "PNO scanRequest offloaded"); + error: vos_mem_free(pPnoRequest); - return status; + return ret; } /* @@ -7458,6 +8280,7 @@ static int wlan_hdd_cfg80211_sched_scan_stop(struct wiphy *wiphy, hdd_context_t *pHddCtx; tHalHandle hHal; tpSirPNOScanReq pPnoRequest = NULL; + int ret = 0; ENTER(); @@ -7469,18 +8292,35 @@ static int wlan_hdd_cfg80211_sched_scan_stop(struct wiphy *wiphy, } pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + if (NULL == pHddCtx) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: HDD context is Null!!!", __func__); + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: HDD context is Null", __func__); return -ENODEV; } + /* The return 0 is intentional when isLogpInProgress and + * isLoadUnloadInProgress. We did observe a crash due to a return of + * failure in sched_scan_stop , especially for a case where the unload + * of the happens at the same time. The function __cfg80211_stop_sched_scan + * was clearing rdev->sched_scan_req only when the sched_scan_stop returns + * success. If it returns a failure , then its next invocation due to the + * clean up of the second interface will have the dev pointer corresponding + * to the first one leading to a crash. + */ if (pHddCtx->isLogpInProgress) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s: LOGP in Progress. Ignore!!!", __func__); - return -EAGAIN; + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: LOGP in Progress. Ignore!!!", __func__); + return ret; + } + + if (pHddCtx->isLoadUnloadInProgress) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: Unloading/Loading in Progress. Ignore!!!", __func__); + return ret; } hHal = WLAN_HDD_GET_HAL_CTX(pAdapter); @@ -7488,7 +8328,7 @@ static int wlan_hdd_cfg80211_sched_scan_stop(struct wiphy *wiphy, { VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, "%s: HAL context is Null!!!", __func__); - return -EAGAIN; + return -EINVAL; } pPnoRequest = (tpSirPNOScanReq) vos_mem_malloc(sizeof (tSirPNOScanReq)); @@ -7496,7 +8336,7 @@ static int wlan_hdd_cfg80211_sched_scan_stop(struct wiphy *wiphy, { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s: vos_mem_malloc failed", __func__); - return -ENODEV; + return -ENOMEM; } memset(pPnoRequest, 0, sizeof (tSirPNOScanReq)); @@ -7510,12 +8350,16 @@ static int wlan_hdd_cfg80211_sched_scan_stop(struct wiphy *wiphy, { VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, "Failed to disabled PNO"); + ret = -EINVAL; } + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s: PNO scan disabled", __func__); + vos_mem_free(pPnoRequest); EXIT(); - return status; + return ret; } #endif /*FEATURE_WLAN_SCAN_PNO*/ @@ -7576,7 +8420,7 @@ static int wlan_hdd_cfg80211_tdls_mgmt(struct wiphy *wiphy, struct net_device *d if (WLAN_IS_TDLS_SETUP_ACTION(action_code)) { - if (NULL != wlan_hdd_tdls_is_progress(pHddCtx, peer, TRUE, TRUE)) + if (NULL != wlan_hdd_tdls_is_progress(pHddCtx, peer, TRUE)) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, "%s: " MAC_ADDRESS_STR @@ -7620,7 +8464,7 @@ static int wlan_hdd_cfg80211_tdls_mgmt(struct wiphy *wiphy, struct net_device *d else { hddTdlsPeer_t *pTdlsPeer; - pTdlsPeer = wlan_hdd_tdls_find_peer(pAdapter, peer); + pTdlsPeer = wlan_hdd_tdls_find_peer(pAdapter, peer, TRUE); if (pTdlsPeer && TDLS_IS_CONNECTED(pTdlsPeer)) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, @@ -7645,7 +8489,7 @@ static int wlan_hdd_cfg80211_tdls_mgmt(struct wiphy *wiphy, struct net_device *d { hddTdlsPeer_t *pTdlsPeer; - pTdlsPeer = wlan_hdd_tdls_find_peer(pAdapter, peerMac); + pTdlsPeer = wlan_hdd_tdls_find_peer(pAdapter, peerMac, TRUE); if(pTdlsPeer && TDLS_IS_CONNECTED(pTdlsPeer)) responder = pTdlsPeer->is_responder; @@ -7659,24 +8503,22 @@ static int wlan_hdd_cfg80211_tdls_mgmt(struct wiphy *wiphy, struct net_device *d } } - if ((SIR_MAC_TDLS_SETUP_RSP == action_code) || - (SIR_MAC_TDLS_DIS_RSP == action_code)) + /* For explicit trigger of DIS_REQ come out of BMPS for + successfully receiving DIS_RSP from peer. + Fw will take care if PS offload is enabled. */ + if (((SIR_MAC_TDLS_SETUP_RSP == action_code) || + (SIR_MAC_TDLS_DIS_RSP == action_code) || + (SIR_MAC_TDLS_DIS_REQ == action_code)) && + !pHddCtx->cfg_ini->enablePowersaveOffload) { - /* - * If Powersave Offload is enabled - * Fw will take care incase of concurrency - */ - if(!pHddCtx->cfg_ini->enablePowersaveOffload) + if (TRUE == sme_IsPmcBmps(WLAN_HDD_GET_HAL_CTX(pAdapter))) { - if (TRUE == sme_IsPmcBmps(WLAN_HDD_GET_HAL_CTX(pAdapter))) - { - VOS_TRACE( VOS_MODULE_ID_HDD, TDLS_LOG_LEVEL, - "%s: Sending Disc/Setup Rsp Frame.Disable BMPS", - __func__); - hdd_disable_bmps_imps(pHddCtx, WLAN_HDD_INFRA_STATION); - } + VOS_TRACE( VOS_MODULE_ID_HDD, TDLS_LOG_LEVEL, + "%s: Sending frame action_code %u.Disable BMPS", __func__, action_code); + hdd_disable_bmps_imps(pHddCtx, WLAN_HDD_INFRA_STATION); } - wlan_hdd_tdls_set_cap(pAdapter, peerMac, eTDLS_CAP_SUPPORTED); + if (SIR_MAC_TDLS_DIS_REQ != action_code) + wlan_hdd_tdls_set_cap(pAdapter, peerMac, eTDLS_CAP_SUPPORTED); } /* make sure doesn't call send_mgmt() while it is pending */ @@ -7749,6 +8591,7 @@ static int wlan_hdd_cfg80211_tdls_oper(struct wiphy *wiphy, struct net_device *d { hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); hdd_context_t *pHddCtx = wiphy_priv(wiphy); + int status; #ifdef WLAN_FEATURE_TDLS_DEBUG const char *tdls_oper_str[]= { "NL80211_TDLS_DISCOVERY_REQ", @@ -7756,25 +8599,27 @@ static int wlan_hdd_cfg80211_tdls_oper(struct wiphy *wiphy, struct net_device *d "NL80211_TDLS_TEARDOWN", "NL80211_TDLS_ENABLE_LINK", "NL80211_TDLS_DISABLE_LINK", - "NL80211_TDLS_UNKONW_OPER"}; + "NL80211_TDLS_UNKNOWN_OPER"}; #endif hddTdlsPeer_t *pTdlsPeer; - if ( NULL == pHddCtx || NULL == pHddCtx->cfg_ini || NULL == peer ) + if ( NULL == peer ) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, "%s: Invalid arguments", __func__); return -EINVAL; } - if (pHddCtx->isLogpInProgress) + status = wlan_hdd_validate_context(pHddCtx); + + if (0 != status) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s:LOGP in Progress. Ignore!!!", __func__); - return -EBUSY; + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: HDD context is not valid", __func__); + return status; } - pTdlsPeer = wlan_hdd_tdls_find_peer(pAdapter, peer); + pTdlsPeer = wlan_hdd_tdls_find_peer(pAdapter, peer, TRUE); if ( NULL == pTdlsPeer ) { hddLog(VOS_TRACE_LEVEL_ERROR, "%s: " MAC_ADDRESS_STR " (oper %d) not exsting. ignored", @@ -7805,6 +8650,7 @@ static int wlan_hdd_cfg80211_tdls_oper(struct wiphy *wiphy, struct net_device *d case NL80211_TDLS_ENABLE_LINK: { VOS_STATUS status; + tCsrTdlsLinkEstablishParams tdlsLinkEstablishParams; if (!TDLS_STA_INDEX_VALID(pTdlsPeer->staId)) { @@ -7816,9 +8662,37 @@ static int wlan_hdd_cfg80211_tdls_oper(struct wiphy *wiphy, struct net_device *d if (eTDLS_LINK_CONNECTED != pTdlsPeer->link_status) { + long ret; + if (IS_ADVANCE_TDLS_ENABLE) { + + if (0 != wlan_hdd_tdls_get_link_establish_params( + pAdapter, peer,&tdlsLinkEstablishParams)) { + return -EINVAL; + } + INIT_COMPLETION(pAdapter->tdls_link_establish_req_comp); + + sme_SendTdlsLinkEstablishParams(WLAN_HDD_GET_HAL_CTX(pAdapter), + pAdapter->sessionId, peer, &tdlsLinkEstablishParams); + /* Send TDLS peer UAPSD capabilities to the firmware and + * register with the TL on after the response for this operation + * is received . + */ + ret = wait_for_completion_interruptible_timeout( + &pAdapter->tdls_link_establish_req_comp, + msecs_to_jiffies(WAIT_TIME_TDLS_LINK_ESTABLISH_REQ)); + if (ret <= 0) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: Link Establish Request Faled Status %ld", + __func__, ret); + return -EINVAL; + } + } wlan_hdd_tdls_set_peer_link_status(pTdlsPeer, eTDLS_LINK_CONNECTED); - /* start TDLS client registration with TL */ - status = hdd_roamRegisterTDLSSTA( pAdapter, peer, pTdlsPeer->staId, pTdlsPeer->signature); + /* Mark TDLS client Authenticated .*/ + status = WLANTL_ChangeSTAState( pHddCtx->pvosContext, + pTdlsPeer->staId, + WLANTL_STA_AUTHENTICATED); if (VOS_STATUS_SUCCESS == status) { if (pTdlsPeer->is_responder == 0) @@ -7836,6 +8710,30 @@ static int wlan_hdd_cfg80211_tdls_oper(struct wiphy *wiphy, struct net_device *d wlan_hdd_tdls_increment_peer_count(pAdapter); } wlan_hdd_tdls_check_bmps(pAdapter); + + /* Update TL about the UAPSD masks , to route the packets to firmware */ + if ((TRUE == pHddCtx->cfg_ini->fEnableTDLSBufferSta) + || pHddCtx->cfg_ini->fTDLSUapsdMask ) + { + int ac; + uint8 ucAc[4] = { WLANTL_AC_VO, + WLANTL_AC_VI, + WLANTL_AC_BK, + WLANTL_AC_BE }; + uint8 tlTid[4] = { 7, 5, 2, 3 } ; + for(ac=0; ac < 4; ac++) + { + status = WLANTL_EnableUAPSDForAC( (WLAN_HDD_GET_CTX(pAdapter))->pvosContext, + pTdlsPeer->staId, ucAc[ac], + tlTid[ac], tlTid[ac], 0, 0, +#ifdef QCA_WIFI_2_0 + WLANTL_BI_DIR, + pAdapter->sessionId ); +#else + WLANTL_BI_DIR ); +#endif + } + } } } @@ -7964,6 +8862,7 @@ int wlan_hdd_cfg80211_set_rekey_data(struct wiphy *wiphy, struct net_device *dev hdd_context_t *pHddCtx = wiphy_priv(wiphy); hdd_station_ctx_t *pHddStaCtx; tHalHandle hHal; + int result; tSirGtkOffloadParams hddGtkOffloadReqParams; eHalStatus status = eHAL_STATUS_FAILURE; @@ -7976,25 +8875,13 @@ int wlan_hdd_cfg80211_set_rekey_data(struct wiphy *wiphy, struct net_device *dev return -ENODEV; } - if (NULL == pHddCtx) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: HDD context is Null!!!", __func__); - return -ENODEV; - } - - if (pHddCtx->isLogpInProgress) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s: LOGP in Progress. Ignore!!!", __func__); - return -EAGAIN; - } + result = wlan_hdd_validate_context(pHddCtx); - if (pHddCtx->isLoadUnloadInProgress) + if (0 != result) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s: Unloading/Loading in Progress. Ignore!!!", __func__); - return -EAGAIN; + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: HDD context is not valid", __func__); + return result; } pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); @@ -8054,69 +8941,304 @@ int wlan_hdd_cfg80211_set_rekey_data(struct wiphy *wiphy, struct net_device *dev } #endif /*WLAN_FEATURE_GTK_OFFLOAD*/ -#if defined(QCA_WIFI_2_0) && !defined(QCA_WIFI_ISOC) \ - && defined(QCA_WIFI_FTM) && defined(CONFIG_NL80211_TESTMODE) -static const -struct nla_policy wlan_hdd_tm_policy[AR6K_TM_ATTR_MAX + 1] = { - [AR6K_TM_ATTR_CMD] = { .type = NLA_U32 }, - [AR6K_TM_ATTR_DATA] = { .type = NLA_BINARY, - .len = AR6K_TM_DATA_MAX_LEN }, -}; - -static int wlan_hdd_cfg80211_testmode_cmd(struct wiphy *wiphy, - void *data, - int len) +/* + * FUNCTION: wlan_hdd_cfg80211_set_mac_acl + * This function is used to set access control policy + */ +static int wlan_hdd_cfg80211_set_mac_acl(struct wiphy *wiphy, + struct net_device *dev, const struct cfg80211_acl_data *params) { - struct nlattr *tb[AR6K_TM_ATTR_MAX + 1]; - int err, buf_len; - void *buf; - VOS_STATUS status; + int i; + hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + hdd_hostapd_state_t *pHostapdState; + tsap_Config_t *pConfig; + v_CONTEXT_t pVosContext = NULL; + hdd_context_t *pHddCtx; + int status; - err = nla_parse(tb, AR6K_TM_ATTR_MAX, data, len, - wlan_hdd_tm_policy); - if (err) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: testmode command parse error", - __func__); - return err; + ENTER(); + + if (NULL == pAdapter) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s: HDD adapter is Null", __func__); + return -ENODEV; } - if (!tb[AR6K_TM_ATTR_CMD]) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: AR6K_TM_ATTR_CMD attribute is invalid", - __func__); + if (NULL == params) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s: params is Null", __func__); return -EINVAL; } - switch (nla_get_u32(tb[AR6K_TM_ATTR_CMD])) { - case AR6K_TM_CMD_TCMD: - if (!tb[AR6K_TM_ATTR_DATA]) { + pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + status = wlan_hdd_validate_context(pHddCtx); + + if (0 != status) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: HDD context is not valid", __func__); + return status; + } + + pVosContext = pHddCtx->pvosContext; + pHostapdState = WLAN_HDD_GET_HOSTAP_STATE_PTR(pAdapter); + + if (NULL == pHostapdState) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s: pHostapdState is Null", __func__); + return -EINVAL; + } + + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO,"acl policy: = %d" + "no acl entries = %d", params->acl_policy, params->n_acl_entries); + + if (WLAN_HDD_SOFTAP == pAdapter->device_mode) + { + pConfig = &pAdapter->sessionCtx.ap.sapConfig; + + /* default value */ + pConfig->num_accept_mac = 0; + pConfig->num_deny_mac = 0; + + /** + * access control policy + * @NL80211_ACL_POLICY_ACCEPT_UNLESS_LISTED: Deny stations which are + * listed in hostapd.deny file. + * @NL80211_ACL_POLICY_DENY_UNLESS_LISTED: Allow stations which are + * listed in hostapd.accept file. + */ + if (NL80211_ACL_POLICY_DENY_UNLESS_LISTED == params->acl_policy) + { + pConfig->SapMacaddr_acl = eSAP_DENY_UNLESS_ACCEPTED; + } + else if (NL80211_ACL_POLICY_ACCEPT_UNLESS_LISTED == params->acl_policy) + { + pConfig->SapMacaddr_acl = eSAP_ACCEPT_UNLESS_DENIED; + } + else + { VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: AR6K_TM_ATTR_DATA attribute is invalid", - __func__); + "%s:Acl Policy : %d is not supported", + __func__, params->acl_policy); + return -ENOTSUPP; + } + + if (eSAP_DENY_UNLESS_ACCEPTED == pConfig->SapMacaddr_acl) + { + pConfig->num_accept_mac = params->n_acl_entries; + for (i = 0; i < params->n_acl_entries; i++) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "** Add ACL MAC entry %i in WhiletList :" + MAC_ADDRESS_STR, i, + MAC_ADDR_ARRAY(params->mac_addrs[i].addr)); + + vos_mem_copy(&pConfig->accept_mac[i], params->mac_addrs[i].addr, + sizeof(qcmacaddr)); + } + } + else if (eSAP_ACCEPT_UNLESS_DENIED == pConfig->SapMacaddr_acl) + { + pConfig->num_deny_mac = params->n_acl_entries; + for (i = 0; i < params->n_acl_entries; i++) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "** Add ACL MAC entry %i in BlackList :" + MAC_ADDRESS_STR, i, + MAC_ADDR_ARRAY(params->mac_addrs[i].addr)); + + vos_mem_copy(&pConfig->deny_mac[i], params->mac_addrs[i].addr, + sizeof(qcmacaddr)); + } + } + + if (VOS_STATUS_SUCCESS != WLANSAP_SetMacACL(pVosContext, pConfig)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: SAP Set Mac Acl fail", __func__); return -EINVAL; } + } + else + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: Invalid device_mode = %d", + __func__, pAdapter->device_mode); + return -EINVAL; + } - buf = nla_data(tb[AR6K_TM_ATTR_DATA]); - buf_len = nla_len(tb[AR6K_TM_ATTR_DATA]); + return 0; +} - status = wlan_hdd_ftm_testmode_cmd(buf, buf_len); +#ifdef WLAN_NL80211_TESTMODE +#ifdef FEATURE_WLAN_LPHB +void wlan_hdd_cfg80211_lphb_ind_handler +( + void *pAdapter, + void *indCont +) +{ + tSirLPHBInd *lphbInd; + struct sk_buff *skb; - if (status != VOS_STATUS_SUCCESS) - err = -EBUSY; - break; + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "LPHB indication arrived"); - case AR6K_TM_CMD_WMI_CMD: - default: + if (NULL == indCont) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "LPHB IND, invalid argument"); + return; + } + + lphbInd = (tSirLPHBInd *)indCont; + skb = cfg80211_testmode_alloc_event_skb( + ((hdd_adapter_t *)pAdapter)->wdev.wiphy, + sizeof(tSirLPHBInd), + GFP_ATOMIC); + if (!skb) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "LPHB timeout, NL buffer alloc fail"); + return; + } + + if(nla_put_u32(skb, WLAN_HDD_TM_ATTR_CMD, WLAN_HDD_TM_CMD_WLAN_HB)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "WLAN_HDD_TM_ATTR_CMD put fail"); + goto nla_put_failure; + } + if(nla_put_u32(skb, WLAN_HDD_TM_ATTR_TYPE, lphbInd->protocolType)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "WLAN_HDD_TM_ATTR_TYPE put fail"); + goto nla_put_failure; + } + if(nla_put(skb, WLAN_HDD_TM_ATTR_DATA, + sizeof(tSirLPHBInd), lphbInd)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "WLAN_HDD_TM_ATTR_DATA put fail"); + goto nla_put_failure; + } + cfg80211_testmode_event(skb, GFP_ATOMIC); + return; + +nla_put_failure: + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "NLA Put fail"); + kfree_skb(skb); + + return; +} +#endif /* FEATURE_WLAN_LPHB */ + +static int wlan_hdd_cfg80211_testmode(struct wiphy *wiphy, void *data, int len) +{ + struct nlattr *tb[WLAN_HDD_TM_ATTR_MAX + 1]; + int err = 0; +#ifdef FEATURE_WLAN_LPHB + hdd_context_t *pHddCtx = wiphy_priv(wiphy); + eHalStatus smeStatus; +#endif /* FEATURE_WLAN_LPHB */ + + err = nla_parse(tb, WLAN_HDD_TM_ATTR_MAX, data, len, wlan_hdd_tm_policy); + if (err) + { VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: command %d not supported", - __func__, nla_get_u32(tb[AR6K_TM_ATTR_CMD])); - err = -EOPNOTSUPP; + "%s Testmode INV ATTR", __func__); + return err; } - return err; + if (!tb[WLAN_HDD_TM_ATTR_CMD]) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s Testmode INV CMD", __func__); + return -EINVAL; + } + + switch (nla_get_u32(tb[WLAN_HDD_TM_ATTR_CMD])) + { +#ifdef FEATURE_WLAN_LPHB + /* Low Power Heartbeat configuration request */ + case WLAN_HDD_TM_CMD_WLAN_HB: + { + int buf_len; + void *buf; + tSirLPHBReq *hb_params = NULL; + + if (!tb[WLAN_HDD_TM_ATTR_DATA]) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s Testmode INV DATA", __func__); + return -EINVAL; + } + + buf = nla_data(tb[WLAN_HDD_TM_ATTR_DATA]); + buf_len = nla_len(tb[WLAN_HDD_TM_ATTR_DATA]); + hb_params = (tSirLPHBReq *)vos_mem_malloc(sizeof(tSirLPHBReq)); + if (NULL == hb_params) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s Request Buffer Alloc Fail", __func__); + return -EINVAL; + } + + vos_mem_copy(hb_params, buf, buf_len); + smeStatus = sme_LPHBConfigReq((tHalHandle)(pHddCtx->hHal), + hb_params, + wlan_hdd_cfg80211_lphb_ind_handler); + if (eHAL_STATUS_SUCCESS != smeStatus) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "LPHB Config Fail, disable"); + vos_mem_free(hb_params); + } + return 0; + } +#endif /* FEATURE_WLAN_LPHB */ + +#if defined(QCA_WIFI_2_0) && !defined(QCA_WIFI_ISOC) \ + && defined(QCA_WIFI_FTM) + case WLAN_HDD_TM_CMD_WLAN_FTM: + { + int buf_len; + void *buf; + VOS_STATUS status; + if (!tb[WLAN_HDD_TM_ATTR_DATA]) { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: WLAN_HDD_TM_ATTR_DATA attribute is invalid", + __func__); + return -EINVAL; + } + + buf = nla_data(tb[WLAN_HDD_TM_ATTR_DATA]); + buf_len = nla_len(tb[WLAN_HDD_TM_ATTR_DATA]); + + status = wlan_hdd_ftm_testmode_cmd(buf, buf_len); + + if (status != VOS_STATUS_SUCCESS) + err = -EBUSY; + break; + } +#endif + + default: + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: command %d not supported", + __func__, nla_get_u32(tb[WLAN_HDD_TM_ATTR_CMD])); + return -EOPNOTSUPP; + } + + return err; } +#if defined(QCA_WIFI_2_0) && !defined(QCA_WIFI_ISOC) \ + && defined(QCA_WIFI_FTM) void wlan_hdd_testmode_rx_event(void *buf, size_t buf_len) { struct sk_buff *skb; @@ -8157,8 +9279,8 @@ void wlan_hdd_testmode_rx_event(void *buf, size_t buf_len) return; } - if (nla_put_u32(skb, AR6K_TM_ATTR_CMD, AR6K_TM_CMD_TCMD) || - nla_put(skb, AR6K_TM_ATTR_DATA, buf_len, buf)) + if (nla_put_u32(skb, WLAN_HDD_TM_ATTR_CMD, WLAN_HDD_TM_CMD_WLAN_FTM) || + nla_put(skb, WLAN_HDD_TM_ATTR_DATA, buf_len, buf)) goto nla_put_failure; cfg80211_testmode_event(skb, GFP_KERNEL); @@ -8171,26 +9293,23 @@ nla_put_failure: __func__); } #endif +#endif /* CONFIG_NL80211_TESTMODE */ - -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0)) -/* - * FUNCTION: wlan_hdd_cfg80211_set_mac_acl - * This function is used to set access control policy - */ -static int wlan_hdd_cfg80211_set_mac_acl(struct wiphy *wiphy, - struct net_device *dev, const struct cfg80211_acl_data *params) +static int wlan_hdd_cfg80211_dump_survey(struct wiphy *wiphy, + struct net_device *dev, + int idx, struct survey_info *survey) { - int i; - hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); - hdd_hostapd_state_t *pHostapdState; - tsap_Config_t *pConfig; - v_CONTEXT_t pVosContext = NULL; + hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); hdd_context_t *pHddCtx; - void* pAclList = NULL; + hdd_station_ctx_t *pHddStaCtx; + tHalHandle halHandle; + v_U32_t channel = 0, freq = 0; /* Initialization Required */ + v_S7_t snr,rssi; + int status, i, j, filled = 0; ENTER(); + if (NULL == pAdapter) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, @@ -8198,118 +9317,212 @@ static int wlan_hdd_cfg80211_set_mac_acl(struct wiphy *wiphy, return -ENODEV; } - if (NULL == params) + if (NULL == wiphy) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s: params is Null", __func__); - return -EINVAL; + "%s: wiphy is Null", __func__); + return -ENODEV; } pHddCtx = WLAN_HDD_GET_CTX(pAdapter); - if (NULL == pHddCtx) + status = wlan_hdd_validate_context(pHddCtx); + + if (0 != status) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: HDD context is NULL", __func__); - return -ENODEV; + "%s: HDD context is not valid", __func__); + return status; } - pVosContext = pHddCtx->pvosContext; - pHostapdState = WLAN_HDD_GET_HOSTAP_STATE_PTR(pAdapter); + pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); - if (NULL == pHostapdState) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s: pHostapdState is Null", __func__); - return -EINVAL; + if (0 == pHddCtx->cfg_ini->fEnableSNRMonitoring || + 0 != pAdapter->survey_idx || + eConnectionState_Associated != pHddStaCtx->conn_info.connState) + { + /* The survey dump ops when implemented completely is expected to + * return a survey of all channels and the ops is called by the + * kernel with incremental values of the argument 'idx' till it + * returns -ENONET. But we can only support the survey for the + * operating channel for now. survey_idx is used to track + * that the ops is called only once and then return -ENONET for + * the next iteration + */ + pAdapter->survey_idx = 0; + return -ENONET; } - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO,"acl policy: = %d" - "no acl entries = %d", params->acl_policy, params->n_acl_entries); + halHandle = WLAN_HDD_GET_HAL_CTX(pAdapter); - if (WLAN_HDD_SOFTAP != pAdapter->device_mode) + wlan_hdd_get_snr(pAdapter, &snr); + wlan_hdd_get_rssi(pAdapter, &rssi); + + sme_GetOperationChannel(halHandle, &channel, pAdapter->sessionId); + hdd_wlan_get_freq(channel, &freq); + + + for (i = 0; i < IEEE80211_NUM_BANDS; i++) { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: Invalid device_mode = %d", - __func__, pAdapter->device_mode); - return -EINVAL; - } + if (NULL == wiphy->bands[i]) + { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO, + "%s: wiphy->bands[i] is NULL, i = %d", __func__, i); + continue; + } - pConfig = &pAdapter->sessionCtx.ap.sapConfig; + for (j = 0; j < wiphy->bands[i]->n_channels; j++) + { + struct ieee80211_supported_band *band = wiphy->bands[i]; - /* default value */ - pConfig->num_accept_mac = 0; - pConfig->num_deny_mac = 0; + if (band->channels[j].center_freq == (v_U16_t)freq) + { + survey->channel = &band->channels[j]; + /* The Rx BDs contain SNR values in dB for the received frames + * while the supplicant expects noise. So we calculate and + * return the value of noise (dBm) + * SNR (dB) = RSSI (dBm) - NOISE (dBm) + */ + survey->noise = rssi - snr; + survey->filled = SURVEY_INFO_NOISE_DBM; + filled = 1; + } + } + } - /** - * access control policy - * @NL80211_ACL_POLICY_ACCEPT_UNLESS_LISTED: Deny stations which are - * listed in hostapd.deny file. - * @NL80211_ACL_POLICY_DENY_UNLESS_LISTED: Allow stations which are - * listed in hostapd.accept file. - */ + if (filled) + pAdapter->survey_idx = 1; + else + { + pAdapter->survey_idx = 0; + return -ENONET; + } + + return 0; +} + +/* + * FUNCTION: wlan_hdd_cfg80211_resume_wlan + * this is called when cfg80211 driver resume + * driver updates latest sched_scan scan result(if any) to cfg80211 database + */ +int wlan_hdd_cfg80211_resume_wlan(struct wiphy *wiphy) +{ + hdd_context_t *pHddCtx = wiphy_priv(wiphy); + hdd_adapter_t *pAdapter; + hdd_adapter_list_node_t *pAdapterNode, *pNext; + VOS_STATUS status = VOS_STATUS_SUCCESS; +#ifdef QCA_WIFI_2_0 + pVosSchedContext vosSchedContext = get_vos_sched_ctxt(); +#endif - if (NL80211_ACL_POLICY_DENY_UNLESS_LISTED == params->acl_policy) + ENTER(); + + if ( NULL == pHddCtx ) { - pConfig->SapMacaddr_acl = eSAP_DENY_UNLESS_ACCEPTED; - pConfig->num_accept_mac = params->n_acl_entries; - pAclList = &pConfig->accept_mac[0]; + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s: HddCtx validation failed", __func__); + return 0; } - else if (NL80211_ACL_POLICY_ACCEPT_UNLESS_LISTED == params->acl_policy) + + if (pHddCtx->isLogpInProgress) { - pConfig->SapMacaddr_acl = eSAP_ACCEPT_UNLESS_DENIED; - pConfig->num_deny_mac = params->n_acl_entries; - pAclList = &pConfig->deny_mac[0]; + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: LOGP in Progress. Ignore!!!", __func__); + return 0; } - else + + if (pHddCtx->isLoadUnloadInProgress) { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s:Acl Policy : %d is not supported", - __func__, params->acl_policy); - return -ENOTSUPP; + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: Unloading/Loading in Progress. Ignore!!!", __func__); + return 0; } - for (i = 0; i < params->n_acl_entries; i++) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "** Add ACL MAC entry %i in Acl List :" - MAC_ADDRESS_STR, i, - MAC_ADDR_ARRAY(params->mac_addrs[i].addr)); +#ifdef QCA_WIFI_2_0 + /* Resume MC thread */ + complete(&vosSchedContext->ResumeMcEvent); + pHddCtx->isMcThreadSuspended = FALSE; + + hdd_resume_wlan(); +#endif - vos_mem_copy(pAclList, params->mac_addrs[i].addr, ETH_ALEN); - pAclList += ETH_ALEN; + spin_lock(&pHddCtx->schedScan_lock); + pHddCtx->isWiphySuspended = FALSE; + if (TRUE != pHddCtx->isSchedScanUpdatePending) + { + spin_unlock(&pHddCtx->schedScan_lock); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s: Return resume is not due to PNO indication", __func__); + return 0; } + // Reset flag to avoid updatating cfg80211 data old results again + pHddCtx->isSchedScanUpdatePending = FALSE; + spin_unlock(&pHddCtx->schedScan_lock); - if (VOS_STATUS_SUCCESS != WLANSAP_SetMacACL(pVosContext, pConfig)) + status = hdd_get_front_adapter ( pHddCtx, &pAdapterNode ); + + while ( NULL != pAdapterNode && VOS_STATUS_SUCCESS == status ) { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: SAP Set Mac Acl fail", __func__); - return -EINVAL; + pAdapter = pAdapterNode->pAdapter; + if ( (NULL != pAdapter) && + (WLAN_HDD_INFRA_STATION == pAdapter->device_mode) ) + { + if (0 != wlan_hdd_cfg80211_update_bss(pHddCtx->wiphy, pAdapter)) + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, + "%s: NO SCAN result", __func__); + else + cfg80211_sched_scan_results(pHddCtx->wiphy); + + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s : cfg80211 scan result database updated", __func__); + + return 0; + + } + status = hdd_get_next_adapter ( pHddCtx, pAdapterNode, &pNext ); + pAdapterNode = pNext; } + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s: Failed to find Adapter", __func__); return 0; } -#endif #ifdef QCA_WIFI_2_0 - void wlan_hdd_cfg80211_ready_to_suspend(void *callbackContext) { hdd_context_t *pHddCtx = (hdd_context_t *)callbackContext; complete(&pHddCtx->ready_to_suspend); } +#endif +/* + * FUNCTION: wlan_hdd_cfg80211_suspend_wlan + * this is called when cfg80211 driver suspends + */ int wlan_hdd_cfg80211_suspend_wlan(struct wiphy *wiphy, struct cfg80211_wowlan *wow) { hdd_context_t *pHddCtx = wiphy_priv(wiphy); +#ifdef QCA_WIFI_2_0 pVosSchedContext vosSchedContext = get_vos_sched_ctxt(); hdd_adapter_list_node_t *pAdapterNode = NULL, *pNext = NULL; hdd_adapter_t *pAdapter; hdd_scaninfo_t *pScanInfo; VOS_STATUS status; int rc; +#endif + + ENTER(); + if (NULL == pHddCtx) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s: HddCtx validation failed", __func__); + return 0; + } +#ifdef QCA_WIFI_2_0 /* Stop ongoing scan on each interface */ status = hdd_get_front_adapter ( pHddCtx, &pAdapterNode ); while ( NULL != pAdapterNode && VOS_STATUS_SUCCESS == status ) @@ -8367,25 +9580,13 @@ int wlan_hdd_cfg80211_suspend_wlan(struct wiphy *wiphy, } pHddCtx->isMcThreadSuspended = TRUE; +#endif + pHddCtx->isWiphySuspended = TRUE; - return 0; -} - -int wlan_hdd_cfg80211_resume_wlan(struct wiphy *wiphy) -{ - hdd_context_t *pHddCtx = wiphy_priv(wiphy); - pVosSchedContext vosSchedContext = get_vos_sched_ctxt(); - - /* Resume MC thread */ - complete(&vosSchedContext->ResumeMcEvent); - - pHddCtx->isMcThreadSuspended = FALSE; - - hdd_resume_wlan(); + EXIT(); return 0; } -#endif /* cfg80211_ops */ static struct cfg80211_ops wlan_hdd_cfg80211_ops = @@ -8446,20 +9647,16 @@ static struct cfg80211_ops wlan_hdd_cfg80211_ops = #ifdef WLAN_FEATURE_GTK_OFFLOAD .set_rekey_data = wlan_hdd_cfg80211_set_rekey_data, #endif /* WLAN_FEATURE_GTK_OFFLOAD */ -#if defined(QCA_WIFI_2_0) && !defined(QCA_WIFI_ISOC) \ - && defined(QCA_WIFI_FTM) && defined(CONFIG_NL80211_TESTMODE) - .testmode_cmd = wlan_hdd_cfg80211_testmode_cmd, -#endif #ifdef FEATURE_WLAN_SCAN_PNO .sched_scan_start = wlan_hdd_cfg80211_sched_scan_start, .sched_scan_stop = wlan_hdd_cfg80211_sched_scan_stop, #endif /*FEATURE_WLAN_SCAN_PNO */ -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0)) - .set_mac_acl = wlan_hdd_cfg80211_set_mac_acl, -#endif -#ifdef QCA_WIFI_2_0 - .suspend = wlan_hdd_cfg80211_suspend_wlan, .resume = wlan_hdd_cfg80211_resume_wlan, + .suspend = wlan_hdd_cfg80211_suspend_wlan, + .set_mac_acl = wlan_hdd_cfg80211_set_mac_acl, +#ifdef WLAN_NL80211_TESTMODE + .testmode_cmd = wlan_hdd_cfg80211_testmode, #endif + .dump_survey = wlan_hdd_cfg80211_dump_survey, }; diff --git a/CORE/HDD/src/wlan_hdd_debugfs.c b/CORE/HDD/src/wlan_hdd_debugfs.c new file mode 100644 index 000000000000..51ebb0f1b3b1 --- /dev/null +++ b/CORE/HDD/src/wlan_hdd_debugfs.c @@ -0,0 +1,480 @@ +/* + * Copyright (c) 2013, The Linux Foundation. All rights reserved. + * + * Previously licensed under the ISC license by Qualcomm Atheros, Inc. + * + * + * Permission to use, copy, modify, and/or distribute this software for + * any purpose with or without fee is hereby granted, provided that the + * above copyright notice and this permission notice appear in all + * copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL + * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE + * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +/* + * This file was originally distributed by Qualcomm Atheros, Inc. + * under proprietary terms before Copyright ownership was assigned + * to the Linux Foundation. + */ + +#ifdef WLAN_OPEN_SOURCE +#include +#include + +#define MAX_USER_COMMAND_SIZE_WOWL_ENABLE 8 +#define MAX_USER_COMMAND_SIZE_WOWL_PATTERN 512 +#define MAX_USER_COMMAND_SIZE_FRAME 4096 + +static ssize_t wcnss_wowenable_write(struct file *file, + const char __user *buf, size_t count, loff_t *ppos) +{ + hdd_adapter_t *pAdapter = (hdd_adapter_t *)file->private_data; + + char cmd[MAX_USER_COMMAND_SIZE_WOWL_ENABLE + 1]; + char *sptr, *token; + v_U8_t wow_enable = 0; + v_U8_t wow_mp = 0; + v_U8_t wow_pbm = 0; + + if ((NULL == pAdapter) || (WLAN_HDD_ADAPTER_MAGIC != pAdapter->magic)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s: Invalid adapter or adapter has invalid magic.", + __func__); + + return -EINVAL; + } + + if (!sme_IsFeatureSupportedByFW(WOW)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: Wake-on-Wireless feature is not supported " + "in firmware!", __func__); + + return -EINVAL; + } + + if (count > MAX_USER_COMMAND_SIZE_WOWL_ENABLE) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: Command length is larger than %d bytes.", + __func__, MAX_USER_COMMAND_SIZE_WOWL_ENABLE); + + return -EINVAL; + } + + /* Get command from user */ + if (copy_from_user(cmd, buf, count)) + return -EFAULT; + cmd[count] = '\0'; + sptr = cmd; + + /* Get enable or disable wow */ + token = strsep(&sptr, " "); + if (!token) + return -EINVAL; + if (kstrtou8(token, 0, &wow_enable)) + return -EINVAL; + + /* Disable wow */ + if (!wow_enable) { + if (!hdd_exit_wowl(pAdapter)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: hdd_exit_wowl failed!", __func__); + + return -EFAULT; + } + + return count; + } + + /* Get enable or disable magic packet mode */ + token = strsep(&sptr, " "); + if (!token) + return -EINVAL; + if (kstrtou8(token, 0, &wow_mp)) + return -EINVAL; + if (wow_mp > 1) + wow_mp = 1; + + /* Get enable or disable pattern byte matching mode */ + token = strsep(&sptr, " "); + if (!token) + return -EINVAL; + if (kstrtou8(token, 0, &wow_pbm)) + return -EINVAL; + if (wow_pbm > 1) + wow_pbm = 1; + + if (!hdd_enter_wowl(pAdapter, wow_mp, wow_pbm)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: hdd_enter_wowl failed!", __func__); + + return -EFAULT; + } + + return count; +} + +static ssize_t wcnss_wowpattern_write(struct file *file, + const char __user *buf, size_t count, loff_t *ppos) +{ + hdd_adapter_t *pAdapter = (hdd_adapter_t *)file->private_data; + + char cmd[MAX_USER_COMMAND_SIZE_WOWL_PATTERN + 1]; + char *sptr, *token; + v_U8_t pattern_idx = 0; + v_U8_t pattern_offset = 0; + char *pattern_buf; + char *pattern_mask; + + if ((NULL == pAdapter) || (WLAN_HDD_ADAPTER_MAGIC != pAdapter->magic)) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s: Invalid adapter or adapter has invalid magic.", + __func__); + + return -EINVAL; + } + + if (!sme_IsFeatureSupportedByFW(WOW)) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: Wake-on-Wireless feature is not supported " + "in firmware!", __func__); + + return -EINVAL; + } + + if (count > MAX_USER_COMMAND_SIZE_WOWL_PATTERN) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: Command length is larger than %d bytes.", + __func__, MAX_USER_COMMAND_SIZE_WOWL_PATTERN); + + return -EINVAL; + } + + /* Get command from user */ + if (copy_from_user(cmd, buf, count)) + return -EFAULT; + cmd[count] = '\0'; + sptr = cmd; + + /* Get pattern idx */ + token = strsep(&sptr, " "); + if (!token) + return -EINVAL; + + if (kstrtou8(token, 0, &pattern_idx)) + return -EINVAL; + + /* Get pattern offset */ + token = strsep(&sptr, " "); + + /* Delete pattern if no further argument */ + if (!token) { + hdd_del_wowl_ptrn_debugfs(pAdapter, pattern_idx); + + return count; + } + + if (kstrtou8(token, 0, &pattern_offset)) + return -EINVAL; + + /* Get pattern */ + token = strsep(&sptr, " "); + if (!token) + return -EINVAL; + + pattern_buf = token; + + /* Get pattern mask */ + token = strsep(&sptr, " "); + if (!token) + return -EINVAL; + + pattern_mask = token; + pattern_mask[strlen(pattern_mask) - 1] = '\0'; + + hdd_add_wowl_ptrn_debugfs(pAdapter, pattern_idx, pattern_offset, + pattern_buf, pattern_mask); + + return count; +} + +static ssize_t wcnss_patterngen_write(struct file *file, + const char __user *buf, size_t count, loff_t *ppos) +{ + hdd_adapter_t *pAdapter = (hdd_adapter_t *)file->private_data; + hdd_context_t *pHddCtx; + tSirAddPeriodicTxPtrn *addPeriodicTxPtrnParams; + tSirDelPeriodicTxPtrn *delPeriodicTxPtrnParams; + + char *cmd, *sptr, *token; + v_U8_t pattern_idx = 0; + v_U8_t pattern_duration = 0; + char *pattern_buf; + v_U16_t pattern_len = 0; + v_U16_t i = 0; + + if ((NULL == pAdapter) || (WLAN_HDD_ADAPTER_MAGIC != pAdapter->magic)) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s: Invalid adapter or adapter has invalid magic.", + __func__); + + return -EINVAL; + } + + pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + + if (!sme_IsFeatureSupportedByFW(WLAN_PERIODIC_TX_PTRN)) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: Periodic Tx Pattern Offload feature is not supported " + "in firmware!", __func__); + + return -EINVAL; + } + + /* Get command from user */ + if (count <= MAX_USER_COMMAND_SIZE_FRAME) + cmd = vos_mem_malloc(count + 1); + else + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: Command length is larger than %d bytes.", + __func__, MAX_USER_COMMAND_SIZE_FRAME); + + return -EINVAL; + } + + if (!cmd) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: Memory allocation for cmd failed!", __func__); + + return -EFAULT; + } + + if (copy_from_user(cmd, buf, count)) + { + vos_mem_free(cmd); + return -EFAULT; + } + cmd[count] = '\0'; + sptr = cmd; + + /* Get pattern idx */ + token = strsep(&sptr, " "); + if (!token) + goto failure; + if (kstrtou8(token, 0, &pattern_idx)) + goto failure; + + if (pattern_idx > (MAXNUM_PERIODIC_TX_PTRNS - 1)) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: Pattern index %d is not in the range (0 ~ %d).", + __func__, pattern_idx, MAXNUM_PERIODIC_TX_PTRNS - 1); + + goto failure; + } + + /* Get pattern duration */ + token = strsep(&sptr, " "); + if (!token) + goto failure; + if (kstrtou8(token, 0, &pattern_duration)) + goto failure; + + /* Delete pattern using index if duration is 0 */ + if (!pattern_duration) + { + delPeriodicTxPtrnParams = + vos_mem_malloc(sizeof(tSirDelPeriodicTxPtrn)); + if (!delPeriodicTxPtrnParams) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: Memory allocation for delPeriodicTxPtrnParams " + "failed!", __func__); + + vos_mem_free(cmd); + return -EFAULT; + } + + delPeriodicTxPtrnParams->ucPatternIdBitmap = 1 << pattern_idx; + vos_mem_copy(delPeriodicTxPtrnParams->macAddress, + pAdapter->macAddressCurrent.bytes, 6); + + /* Delete pattern */ + if (eHAL_STATUS_SUCCESS != sme_DelPeriodicTxPtrn(pHddCtx->hHal, + delPeriodicTxPtrnParams)) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: sme_DelPeriodicTxPtrn() failed!", __func__); + + vos_mem_free(delPeriodicTxPtrnParams); + goto failure; + } + + vos_mem_free(delPeriodicTxPtrnParams); + vos_mem_free(cmd); + return count; + } + + /* Check if it's in connected state only when adding patterns */ + if (!hdd_connIsConnected(WLAN_HDD_GET_STATION_CTX_PTR(pAdapter))) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: Not in Connected state!", __func__); + + goto failure; + } + + /* Get pattern */ + token = strsep(&sptr, " "); + if (!token) + goto failure; + + pattern_buf = token; + pattern_buf[strlen(pattern_buf) - 1] = '\0'; + pattern_len = strlen(pattern_buf); + + /* Since the pattern is a hex string, 2 characters represent 1 byte. */ + if (pattern_len % 2) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: Malformed pattern!", __func__); + + goto failure; + } + else + pattern_len >>= 1; + + if (pattern_len < 14 || pattern_len > PERIODIC_TX_PTRN_MAX_SIZE) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: Not an 802.3 frame!", __func__); + + goto failure; + } + + addPeriodicTxPtrnParams = vos_mem_malloc(sizeof(tSirAddPeriodicTxPtrn)); + if (!addPeriodicTxPtrnParams) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: Memory allocation for addPeriodicTxPtrnParams " + "failed!", __func__); + + vos_mem_free(cmd); + return -EFAULT; + } + + addPeriodicTxPtrnParams->ucPtrnId = pattern_idx; + addPeriodicTxPtrnParams->usPtrnIntervalMs = pattern_duration * 500; + addPeriodicTxPtrnParams->ucPtrnSize = pattern_len; + vos_mem_copy(addPeriodicTxPtrnParams->macAddress, + pAdapter->macAddressCurrent.bytes, 6); + + /* Extract the pattern */ + for(i = 0; i < addPeriodicTxPtrnParams->ucPtrnSize; i++) + { + addPeriodicTxPtrnParams->ucPattern[i] = + (hdd_parse_hex(pattern_buf[0]) << 4) + hdd_parse_hex(pattern_buf[1]); + + /* Skip to next byte */ + pattern_buf += 2; + } + + /* Add pattern */ + if (eHAL_STATUS_SUCCESS != sme_AddPeriodicTxPtrn(pHddCtx->hHal, + addPeriodicTxPtrnParams)) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: sme_AddPeriodicTxPtrn() failed!", __func__); + + vos_mem_free(addPeriodicTxPtrnParams); + goto failure; + } + + vos_mem_free(addPeriodicTxPtrnParams); + vos_mem_free(cmd); + return count; + +failure: + vos_mem_free(cmd); + return -EINVAL; +} + +static int wcnss_debugfs_open(struct inode *inode, struct file *file) +{ + if (inode->i_private) + { + file->private_data = inode->i_private; + } + + return 0; +} + +static const struct file_operations fops_wowenable = { + .write = wcnss_wowenable_write, + .open = wcnss_debugfs_open, + .owner = THIS_MODULE, + .llseek = default_llseek, +}; + +static const struct file_operations fops_wowpattern = { + .write = wcnss_wowpattern_write, + .open = wcnss_debugfs_open, + .owner = THIS_MODULE, + .llseek = default_llseek, +}; + +static const struct file_operations fops_patterngen = { + .write = wcnss_patterngen_write, + .open = wcnss_debugfs_open, + .owner = THIS_MODULE, + .llseek = default_llseek, +}; + +VOS_STATUS hdd_debugfs_init(hdd_adapter_t *pAdapter) +{ + hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + pHddCtx->debugfs_phy = debugfs_create_dir("wlan_wcnss", 0); + + if (NULL == pHddCtx->debugfs_phy) + return VOS_STATUS_E_FAILURE; + + if (NULL == debugfs_create_file("wow_enable", S_IRUSR | S_IWUSR, + pHddCtx->debugfs_phy, pAdapter, &fops_wowenable)) + return VOS_STATUS_E_FAILURE; + + if (NULL == debugfs_create_file("wow_pattern", S_IRUSR | S_IWUSR, + pHddCtx->debugfs_phy, pAdapter, &fops_wowpattern)) + return VOS_STATUS_E_FAILURE; + + if (NULL == debugfs_create_file("pattern_gen", S_IRUSR | S_IWUSR, + pHddCtx->debugfs_phy, pAdapter, &fops_patterngen)) + return VOS_STATUS_E_FAILURE; + + return VOS_STATUS_SUCCESS; +} + +void hdd_debugfs_exit(hdd_context_t *pHddCtx) +{ + debugfs_remove_recursive(pHddCtx->debugfs_phy); +} +#endif /* #ifdef WLAN_OPEN_SOURCE */ + diff --git a/CORE/HDD/src/wlan_hdd_dev_pwr.c b/CORE/HDD/src/wlan_hdd_dev_pwr.c index 0e159af3e849..2aa5b450ad48 100644 --- a/CORE/HDD/src/wlan_hdd_dev_pwr.c +++ b/CORE/HDD/src/wlan_hdd_dev_pwr.c @@ -125,7 +125,7 @@ static int wlan_suspend(hdd_context_t* pHddCtx) */ VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "%s: Suspending Mc, Rx and Tx Threads",__func__); - init_completion(&pHddCtx->tx_sus_event_var); + INIT_COMPLETION(pHddCtx->tx_sus_event_var); /* Indicate Tx Thread to Suspend */ set_bit(TX_SUSPEND_EVENT_MASK, &vosSchedContext->txEventFlag); @@ -145,7 +145,7 @@ static int wlan_suspend(hdd_context_t* pHddCtx) /* Set the Tx Thread as Suspended */ pHddCtx->isTxThreadSuspended = TRUE; - init_completion(&pHddCtx->rx_sus_event_var); + INIT_COMPLETION(pHddCtx->rx_sus_event_var); /* Indicate Rx Thread to Suspend */ set_bit(RX_SUSPEND_EVENT_MASK, &vosSchedContext->rxEventFlag); @@ -173,7 +173,7 @@ static int wlan_suspend(hdd_context_t* pHddCtx) /* Set the Rx Thread as Suspended */ pHddCtx->isRxThreadSuspended = TRUE; - init_completion(&pHddCtx->mc_sus_event_var); + INIT_COMPLETION(pHddCtx->mc_sus_event_var); /* Indicate MC Thread to Suspend */ set_bit(MC_SUSPEND_EVENT_MASK, &vosSchedContext->mcEventFlag); @@ -399,58 +399,6 @@ VOS_STATUS hddDeregisterPmOps(hdd_context_t *pHddCtx) #endif /* FEATURE_R33D */ return VOS_STATUS_SUCCESS; } -#endif/*QCA_WIFI_ISOC*/ - -/*---------------------------------------------------------------------------- - - @brief TX frame block timeout handler - Resume TX, and reset TX frame count - - @param hdd_context_t pHddCtx - Global hdd context - - @return NONE - -----------------------------------------------------------------------------*/ -void hddDevTmTxBlockTimeoutHandler(void *usrData) -{ - hdd_context_t *pHddCtx = (hdd_context_t *)usrData; - hdd_adapter_t *staAdapater; - /* Sanity, This should not happen */ - if(NULL == pHddCtx) - { - VOS_TRACE(VOS_MODULE_ID_HDD,VOS_TRACE_LEVEL_ERROR, - "%s: NULL Context", __func__); - VOS_ASSERT(0); - return; - } - - staAdapater = hdd_get_adapter(pHddCtx, WLAN_HDD_INFRA_STATION); - - if(NULL == staAdapater) - { - VOS_TRACE(VOS_MODULE_ID_HDD,VOS_TRACE_LEVEL_ERROR, - "%s: NULL Adapter", __func__); - VOS_ASSERT(0); - return; - } - - if(mutex_lock_interruptible(&pHddCtx->tmInfo.tmOperationLock)) - { - VOS_TRACE(VOS_MODULE_ID_HDD,VOS_TRACE_LEVEL_ERROR, - "%s: Acquire lock fail", __func__); - return; - } - pHddCtx->tmInfo.txFrameCount = 0; - - /* Resume TX flow */ - - netif_tx_wake_all_queues(staAdapater->dev); - pHddCtx->tmInfo.qBlocked = VOS_FALSE; - mutex_unlock(&pHddCtx->tmInfo.tmOperationLock); - - return; -} /*---------------------------------------------------------------------------- @@ -483,6 +431,16 @@ void hddDevTmLevelChangedHandler(struct device *dev, int changedTmLevel) return; } + /* Only STA mode support TM now + * all other mode, TM feature should be disabled */ + if (~VOS_STA & pHddCtx->concurrency_mode) + { + VOS_TRACE(VOS_MODULE_ID_HDD,VOS_TRACE_LEVEL_ERROR, + "%s: CMODE 0x%x, TM disable", + __func__, pHddCtx->concurrency_mode); + newTmLevel = WLAN_HDD_TM_LEVEL_0; + } + if ((newTmLevel < WLAN_HDD_TM_LEVEL_0) || (newTmLevel >= WLAN_HDD_TM_LEVEL_MAX)) { @@ -492,8 +450,8 @@ void hddDevTmLevelChangedHandler(struct device *dev, int changedTmLevel) return; } - if (changedTmLevel != WLAN_HDD_TM_LEVEL_4) - sme_SetTmLevel(pHddCtx->hHal, changedTmLevel, 0); + if (newTmLevel != WLAN_HDD_TM_LEVEL_4) + sme_SetTmLevel(pHddCtx->hHal, newTmLevel, 0); if (mutex_lock_interruptible(&pHddCtx->tmInfo.tmOperationLock)) { @@ -502,7 +460,7 @@ void hddDevTmLevelChangedHandler(struct device *dev, int changedTmLevel) return; } - pHddCtx->tmInfo.currentTmLevel = changedTmLevel; + pHddCtx->tmInfo.currentTmLevel = newTmLevel; pHddCtx->tmInfo.txFrameCount = 0; vos_mem_copy(&pHddCtx->tmInfo.tmAction, &thermalMigrationAction[newTmLevel], @@ -528,6 +486,59 @@ void hddDevTmLevelChangedHandler(struct device *dev, int changedTmLevel) return; } +#endif/*QCA_WIFI_ISOC*/ + +/*---------------------------------------------------------------------------- + + @brief TX frame block timeout handler + Resume TX, and reset TX frame count + + @param hdd_context_t pHddCtx + Global hdd context + + @return NONE + +----------------------------------------------------------------------------*/ +void hddDevTmTxBlockTimeoutHandler(void *usrData) +{ + hdd_context_t *pHddCtx = (hdd_context_t *)usrData; + hdd_adapter_t *staAdapater; + /* Sanity, This should not happen */ + if(NULL == pHddCtx) + { + VOS_TRACE(VOS_MODULE_ID_HDD,VOS_TRACE_LEVEL_ERROR, + "%s: NULL Context", __func__); + VOS_ASSERT(0); + return; + } + + staAdapater = hdd_get_adapter(pHddCtx, WLAN_HDD_INFRA_STATION); + + if(NULL == staAdapater) + { + VOS_TRACE(VOS_MODULE_ID_HDD,VOS_TRACE_LEVEL_ERROR, + "%s: NULL Adapter", __func__); + VOS_ASSERT(0); + return; + } + + if(mutex_lock_interruptible(&pHddCtx->tmInfo.tmOperationLock)) + { + VOS_TRACE(VOS_MODULE_ID_HDD,VOS_TRACE_LEVEL_ERROR, + "%s: Acquire lock fail", __func__); + return; + } + pHddCtx->tmInfo.txFrameCount = 0; + + /* Resume TX flow */ + + netif_tx_wake_all_queues(staAdapater->dev); + pHddCtx->tmInfo.qBlocked = VOS_FALSE; + mutex_unlock(&pHddCtx->tmInfo.tmOperationLock); + + return; +} + /*---------------------------------------------------------------------------- @brief Register function diff --git a/CORE/HDD/src/wlan_hdd_early_suspend.c b/CORE/HDD/src/wlan_hdd_early_suspend.c index 3796f8fce2fa..38dc661a2046 100644 --- a/CORE/HDD/src/wlan_hdd_early_suspend.c +++ b/CORE/HDD/src/wlan_hdd_early_suspend.c @@ -97,8 +97,7 @@ #include #include #endif - -#define HDD_SSR_BRING_UP_TIME 10000 +#define HDD_SSR_BRING_UP_TIME 180000 static eHalStatus g_full_pwr_status; static eHalStatus g_standby_status; @@ -414,13 +413,13 @@ VOS_STATUS hdd_exit_deep_sleep(hdd_context_t *pHddCtx, hdd_adapter_t *pAdapter) goto err_voss_stop; } - vosStatus = vos_get_vdev_types(pAdapter->device_mode, &type, &subType); if (VOS_STATUS_SUCCESS != vosStatus) { hddLog(VOS_TRACE_LEVEL_ERROR, "failed to get vdev type"); goto err_voss_stop; } + //Open a SME session for future operation halStatus = sme_OpenSession( pHddCtx->hHal, hdd_smeRoamCallback, pAdapter, (tANI_U8 *)&pAdapter->macAddressCurrent, &pAdapter->sessionId, @@ -651,10 +650,11 @@ void hdd_conf_ns_offload(hdd_adapter_t *pAdapter, v_BOOL_t fenable) hddLog (VOS_TRACE_LEVEL_INFO, "configuredMcastBcastFilter: %d",pHddCtx->configuredMcastBcastFilter); - if((HDD_MCASTBCASTFILTER_FILTER_ALL_MULTICAST == - pHddCtx->configuredMcastBcastFilter) || - (HDD_MCASTBCASTFILTER_FILTER_ALL_MULTICAST_BROADCAST == - pHddCtx->configuredMcastBcastFilter)) + if ((VOS_TRUE == pHddCtx->sus_res_mcastbcast_filter_valid) + && ((HDD_MCASTBCASTFILTER_FILTER_ALL_MULTICAST == + pHddCtx->sus_res_mcastbcast_filter) || + (HDD_MCASTBCASTFILTER_FILTER_ALL_MULTICAST_BROADCAST == + pHddCtx->sus_res_mcastbcast_filter))) { hddLog (VOS_TRACE_LEVEL_INFO, "Set offLoadRequest with SIR_OFFLOAD_NS_AND_MCAST_FILTER_ENABLE \n", __func__); @@ -740,15 +740,21 @@ VOS_STATUS hdd_conf_arp_offload(hdd_adapter_t *pAdapter, v_BOOL_t fenable) hddLog(VOS_TRACE_LEVEL_INFO, "%s: Enabled \n", __func__); - if((HDD_MCASTBCASTFILTER_FILTER_ALL_BROADCAST == - pHddCtx->configuredMcastBcastFilter) || - (HDD_MCASTBCASTFILTER_FILTER_ALL_MULTICAST_BROADCAST == - pHddCtx->configuredMcastBcastFilter)) + if (((HDD_MCASTBCASTFILTER_FILTER_ALL_BROADCAST == + pHddCtx->sus_res_mcastbcast_filter) || + (HDD_MCASTBCASTFILTER_FILTER_ALL_MULTICAST_BROADCAST == + pHddCtx->sus_res_mcastbcast_filter)) && + (VOS_TRUE == pHddCtx->sus_res_mcastbcast_filter_valid)) { offLoadRequest.enableOrDisable = - SIR_OFFLOAD_ARP_AND_BCAST_FILTER_ENABLE; + SIR_OFFLOAD_ARP_AND_BCAST_FILTER_ENABLE; + hddLog(VOS_TRACE_LEVEL_INFO, + "offload: inside arp offload conditional check"); } - + + hddLog(VOS_TRACE_LEVEL_INFO, "offload: arp filter programmed = %d", + offLoadRequest.enableOrDisable); + //converting u32 to IPV4 address for(i = 0 ; i < 4; i++) { @@ -876,8 +882,16 @@ static void hdd_conf_suspend_ind(hdd_context_t* pHddCtx, tpSirWlanSuspendParam wlanSuspendParam = vos_mem_malloc(sizeof(tSirWlanSuspendParam)); - pHddCtx->sus_res_mcastbcast_filter = - pHddCtx->configuredMcastBcastFilter; + if (VOS_FALSE == pHddCtx->sus_res_mcastbcast_filter_valid) { + pHddCtx->sus_res_mcastbcast_filter = + pHddCtx->configuredMcastBcastFilter; + pHddCtx->sus_res_mcastbcast_filter_valid = VOS_TRUE; + hddLog(VOS_TRACE_LEVEL_INFO, "offload: hdd_conf_suspend_ind"); + hddLog(VOS_TRACE_LEVEL_INFO, "configuredMCastBcastFilter saved = %d", + pHddCtx->configuredMcastBcastFilter); + + } + if(NULL == wlanSuspendParam) { @@ -886,7 +900,7 @@ static void hdd_conf_suspend_ind(hdd_context_t* pHddCtx, return; } - hddLog(VOS_TRACE_LEVEL_INFO, + hddLog(VOS_TRACE_LEVEL_INFO, "%s: send wlan suspend indication", __func__); if((pHddCtx->cfg_ini->nEnableSuspend == WLAN_MAP_SUSPEND_TO_MCAST_BCAST_FILTER)) @@ -896,19 +910,11 @@ static void hdd_conf_suspend_ind(hdd_context_t* pHddCtx, wlanSuspendParam->configuredMcstBcstFilterSetting = pHddCtx->configuredMcastBcastFilter; #ifdef WLAN_FEATURE_PACKET_FILTERING - if (pHddCtx->cfg_ini->isMcAddrListFilter) - { - /*Multicast addr list filter is enabled during suspend*/ - if (((pAdapter->device_mode == WLAN_HDD_INFRA_STATION) || - (pAdapter->device_mode == WLAN_HDD_P2P_CLIENT)) - && pAdapter->mc_addr_list.mc_cnt - && (eConnectionState_Associated == - (WLAN_HDD_GET_STATION_CTX_PTR(pAdapter))->conn_info.connState)) - { - /*set the filter*/ - wlan_hdd_set_mc_addr_list(pAdapter, TRUE); - } - } + /* During suspend, configure MC Addr list filter to the firmware + * function takes care of checking necessary conditions before + * configuring. + */ + wlan_hdd_set_mc_addr_list(pAdapter, TRUE); #endif } @@ -940,43 +946,42 @@ static void hdd_conf_resume_ind(hdd_adapter_t *pAdapter) hddLog(VOS_TRACE_LEVEL_INFO, "%s: send wlan resume indication", __func__); - if (pHddCtx->hdd_mcastbcast_filter_set == TRUE) - { - wlanResumeParam = vos_mem_malloc(sizeof(tSirWlanResumeParam)); + wlanResumeParam = vos_mem_malloc(sizeof(tSirWlanResumeParam)); - if(NULL == wlanResumeParam) - { - hddLog(VOS_TRACE_LEVEL_FATAL, - "%s: vos_mem_alloc failed ", __func__); - return; - } - - wlanResumeParam->configuredMcstBcstFilterSetting = - pHddCtx->configuredMcastBcastFilter; - halStatus = sme_ConfigureResumeReq(pHddCtx->hHal, wlanResumeParam); - if (eHAL_STATUS_SUCCESS != halStatus) - vos_mem_free(wlanResumeParam); + if (NULL == wlanResumeParam) + { + hddLog(VOS_TRACE_LEVEL_FATAL, + "%s: memory allocation failed for wlanResumeParam ", __func__); + return; + } - /* Disable supported OffLoads */ - hdd_conf_hostoffload(pAdapter, FALSE); - pHddCtx->hdd_mcastbcast_filter_set = FALSE; + wlanResumeParam->configuredMcstBcstFilterSetting = + pHddCtx->configuredMcastBcastFilter; + halStatus = sme_ConfigureResumeReq(pHddCtx->hHal, wlanResumeParam); + if (eHAL_STATUS_SUCCESS != halStatus) + { + vos_mem_free(wlanResumeParam); } + /* Disable supported OffLoads */ + hdd_conf_hostoffload(pAdapter, FALSE); + pHddCtx->hdd_mcastbcast_filter_set = FALSE; + pHddCtx->configuredMcastBcastFilter = pHddCtx->sus_res_mcastbcast_filter; + pHddCtx->sus_res_mcastbcast_filter_valid = VOS_FALSE; + hddLog(VOS_TRACE_LEVEL_INFO, + "offload: in hdd_conf_resume_ind, restoring configuredMcastBcastFilter"); + hddLog(VOS_TRACE_LEVEL_INFO, "configuredMcastBcastFilter = %d", + pHddCtx->configuredMcastBcastFilter); -#ifdef WLAN_FEATURE_PACKET_FILTERING - if (pHddCtx->cfg_ini->isMcAddrListFilter) - { - /*Multicast addr filtering is enabled*/ - if (pAdapter->mc_addr_list.isFilterApplied) - { - /*Filter applied during suspend mode*/ - /*Clear it here*/ - wlan_hdd_set_mc_addr_list(pAdapter, FALSE); - } - } + +#ifdef WLAN_FEATURE_PACKET_FILTERING + /* Filer was applied during suspend inditication + * clear it when we resume. + */ + wlan_hdd_set_mc_addr_list(pAdapter, FALSE); #endif } @@ -987,9 +992,10 @@ void hdd_suspend_wlan(void (*callback)(void *callbackContext), hdd_context_t *pHddCtx = NULL; v_CONTEXT_t pVosContext = NULL; - hdd_adapter_t *pAdapter = NULL; - hdd_adapter_list_node_t *pAdapterNode = NULL, *pNext = NULL; VOS_STATUS status; + hdd_adapter_t *pAdapter = NULL; + hdd_adapter_list_node_t *pAdapterNode = NULL, *pNext = NULL; + bool hdd_enter_bmps = FALSE; hddLog(VOS_TRACE_LEVEL_INFO, "%s: WLAN being suspended by Android OS",__func__); @@ -1014,7 +1020,7 @@ void hdd_suspend_wlan(void (*callback)(void *callbackContext), return; } - /*loop through all adapters. TBD fix for Concurrency */ + hdd_set_pwrparams(pHddCtx); status = hdd_get_front_adapter ( pHddCtx, &pAdapterNode ); while ( NULL != pAdapterNode && VOS_STATUS_SUCCESS == status ) { @@ -1033,7 +1039,22 @@ void hdd_suspend_wlan(void (*callback)(void *callbackContext), goto send_suspend_ind; #endif } + /* Avoid multiple enter/exit BMPS in this while loop using + * hdd_enter_bmps flag + */ + if (FALSE == hdd_enter_bmps && (BMPS == pmcGetPmcState(pHddCtx->hHal))) + { + hdd_enter_bmps = TRUE; + /* If device was already in BMPS, and dynamic DTIM is set, + * exit(set the device to full power) and enter BMPS again + * to reflect new DTIM value */ + wlan_hdd_enter_bmps(pAdapter, DRIVER_POWER_MODE_ACTIVE); + + wlan_hdd_enter_bmps(pAdapter, DRIVER_POWER_MODE_AUTO); + + pHddCtx->hdd_ignore_dtim_enabled = TRUE; + } #ifdef SUPPORT_EARLY_SUSPEND_STANDBY_DEEPSLEEP if (pHddCtx->cfg_ini->nEnableSuspend == WLAN_MAP_SUSPEND_TO_STANDBY) { @@ -1041,7 +1062,7 @@ void hdd_suspend_wlan(void (*callback)(void *callbackContext), netif_tx_disable(pAdapter->dev); netif_carrier_off(pAdapter->dev); } - else if (pHddCtx->cfg_ini->nEnableSuspend == + else if (pHddCtx->cfg_ini->nEnableSuspend == WLAN_MAP_SUSPEND_TO_DEEP_SLEEP) { //Execute deep sleep procedure @@ -1049,78 +1070,22 @@ void hdd_suspend_wlan(void (*callback)(void *callbackContext), } #endif - //Apply Dynamic Dtim For P2P - //Only if ignoreDynamicDtimInP2pMode is not set in ini - if((pHddCtx->cfg_ini->enableDynamicDTIM || - pHddCtx->cfg_ini->enableModulatedDTIM) && - ((WLAN_HDD_INFRA_STATION == pAdapter->device_mode) || - ((WLAN_HDD_P2P_CLIENT == pAdapter->device_mode) && - !(pHddCtx->cfg_ini->ignoreDynamicDtimInP2pMode))) && - (eANI_BOOLEAN_TRUE == pAdapter->higherDtimTransition) && - (eConnectionState_Associated == - (WLAN_HDD_GET_STATION_CTX_PTR(pAdapter))->conn_info.connState) && - (pHddCtx->cfg_ini->fIsBmpsEnabled)) - { - tSirSetPowerParamsReq powerRequest = { 0 }; - - powerRequest.uIgnoreDTIM = 1; - powerRequest.uMaxLIModulatedDTIM = pHddCtx->cfg_ini->fMaxLIModulatedDTIM; - - /*Back up the actual values from CFG */ - wlan_cfgGetInt(pHddCtx->hHal, WNI_CFG_IGNORE_DTIM, - &pHddCtx->hdd_actual_ignore_DTIM_value); - wlan_cfgGetInt(pHddCtx->hHal, WNI_CFG_LISTEN_INTERVAL, - &pHddCtx->hdd_actual_LI_value); - - if(pHddCtx->cfg_ini->enableModulatedDTIM) - { - powerRequest.uDTIMPeriod = pHddCtx->cfg_ini->enableModulatedDTIM; - powerRequest.uListenInterval = pHddCtx->hdd_actual_LI_value; - } - else - { - powerRequest.uListenInterval = pHddCtx->cfg_ini->enableDynamicDTIM; - } - - /* Update ignoreDTIM and ListedInterval in CFG to remain at the DTIM - *specified during Enter/Exit BMPS when LCD off*/ - ccmCfgSetInt(pHddCtx->hHal, WNI_CFG_IGNORE_DTIM, powerRequest.uIgnoreDTIM, - NULL, eANI_BOOLEAN_FALSE); - ccmCfgSetInt(pHddCtx->hHal, WNI_CFG_LISTEN_INTERVAL, powerRequest.uListenInterval, - NULL, eANI_BOOLEAN_FALSE); - - /* switch to the DTIM specified in cfg.ini */ - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "Switch to DTIM%d \n", powerRequest.uListenInterval); - sme_SetPowerParams( WLAN_HDD_GET_HAL_CTX(pAdapter), &powerRequest, FALSE); - - if (BMPS == pmcGetPmcState(pHddCtx->hHal)) - { - /* put the device into full power */ - wlan_hdd_enter_bmps(pAdapter, DRIVER_POWER_MODE_ACTIVE); - - /* put the device back into BMPS */ - wlan_hdd_enter_bmps(pAdapter, DRIVER_POWER_MODE_AUTO); - - pHddCtx->hdd_ignore_dtim_enabled = TRUE; - } - } - #ifdef QCA_WIFI_2_0 send_suspend_ind: - //stop all TX queues before suspend - netif_tx_disable(pAdapter->dev); + //stop all TX queues before suspend + netif_tx_disable(pAdapter->dev); + /* Keep this suspend indication at the end (before processing next adaptor) + * for discrete. This indication is considered as trigger point to start + * WOW (if wow is enabled). */ #endif - /* Keep this suspend indication at the end (before processing next adaptor) - * for discrete. This indication is considered as trigger point to start - * WOW (if wow is enabled). */ - hdd_conf_suspend_ind(pHddCtx, pAdapter, callback, callbackContext); + /*Suspend notification sent down to driver*/ + hdd_conf_suspend_ind(pHddCtx, pAdapter, callback, callbackContext); - status = hdd_get_next_adapter ( pHddCtx, pAdapterNode, &pNext ); - pAdapterNode = pNext; - } - pHddCtx->hdd_wlan_suspended = TRUE; + status = hdd_get_next_adapter ( pHddCtx, pAdapterNode, &pNext ); + pAdapterNode = pNext; + } + pHddCtx->hdd_wlan_suspended = TRUE; #ifdef SUPPORT_EARLY_SUSPEND_STANDBY_DEEPSLEEP if(pHddCtx->cfg_ini->nEnableSuspend == WLAN_MAP_SUSPEND_TO_STANDBY) @@ -1150,7 +1115,19 @@ static void hdd_PowerStateChangedCB spin_lock(&pHddCtx->filter_lock); if((newState == BMPS) && pHddCtx->hdd_wlan_suspended) { spin_unlock(&pHddCtx->filter_lock); - pHddCtx->sus_res_mcastbcast_filter = pHddCtx->configuredMcastBcastFilter; + if (VOS_FALSE == pHddCtx->sus_res_mcastbcast_filter_valid) { + pHddCtx->sus_res_mcastbcast_filter = + pHddCtx->configuredMcastBcastFilter; + pHddCtx->sus_res_mcastbcast_filter_valid = VOS_TRUE; + + hddLog(VOS_TRACE_LEVEL_INFO, "offload: callback to associated"); + hddLog(VOS_TRACE_LEVEL_INFO, "saving configuredMcastBcastFilter = %d", + pHddCtx->configuredMcastBcastFilter); + hddLog(VOS_TRACE_LEVEL_INFO, + "offload: calling hdd_conf_mcastbcast_filter"); + + } + hdd_conf_mcastbcast_filter(pHddCtx, TRUE); if(pHddCtx->hdd_mcastbcast_filter_set != TRUE) hddLog(VOS_TRACE_LEVEL_ERROR, "%s: Not able to set mcast/bcast filter ", __func__); @@ -1464,6 +1441,14 @@ static void hdd_ssr_timer_del(void) static void hdd_ssr_timer_cb(unsigned long data) { hddLog(VOS_TRACE_LEVEL_FATAL, "%s: HDD SSR timer expired", __func__); + +#ifndef QCA_WIFI_2_0 +#ifdef WCN_PRONTO + if (wcnss_hardware_type() == WCNSS_PRONTO_HW) + wcnss_pronto_log_debug_regs(); +#endif +#endif + VOS_BUG(0); } @@ -1614,7 +1599,7 @@ VOS_STATUS hdd_wlan_shutdown(void) /* Stop SME - Cannot invoke vos_stop as vos_stop relies * on threads being running to process the SYS Stop */ - vosStatus = sme_Stop(pHddCtx->hHal, TRUE); + vosStatus = sme_Stop(pHddCtx->hHal, HAL_STOP_TYPE_SYS_RESET); VOS_ASSERT(VOS_IS_STATUS_SUCCESS(vosStatus)); hddLog(VOS_TRACE_LEVEL_FATAL, "%s: Doing MAC STOP",__func__); @@ -1703,6 +1688,8 @@ VOS_STATUS hdd_wlan_re_init(void *hif_sc) #endif #endif + vos_set_reinit_in_progress(VOS_MODULE_ID_VOSS, TRUE); + /* Get the VOS context */ pVosContext = vos_get_global_context(VOS_MODULE_ID_SYS, NULL); if(pVosContext == NULL) @@ -1732,9 +1719,6 @@ VOS_STATUS hdd_wlan_re_init(void *hif_sc) hif_init_adf_ctx(adf_ctx, hif_sc); ((VosContextType*)pVosContext)->pHIFContext = hif_sc; - - /* Store target type and target version info in HDD ctx */ - pHddCtx->target_type = ((struct ol_softc *)hif_sc)->target_type; ((VosContextType*)(pVosContext))->adf_ctx = adf_ctx; #endif @@ -1864,6 +1848,7 @@ VOS_STATUS hdd_wlan_re_init(void *hif_sc) /* Restart all adapters */ hdd_start_all_adapters(pHddCtx); pHddCtx->isLogpInProgress = FALSE; + vos_set_logp_in_progress(VOS_MODULE_ID_VOSS, FALSE); pHddCtx->hdd_mcastbcast_filter_set = FALSE; hdd_register_mcast_bcast_filter(pHddCtx); @@ -1886,6 +1871,7 @@ VOS_STATUS hdd_wlan_re_init(void *hif_sc) __func__); goto err_unregister_pmops; } + vos_set_reinit_in_progress(VOS_MODULE_ID_VOSS, FALSE); goto success; err_unregister_pmops: @@ -1919,7 +1905,11 @@ err_vosclose: unregister_netdevice_notifier(&hdd_netdev_notifier); /* Clean up HDD Nlink Service */ send_btc_nlink_msg(WLAN_MODULE_DOWN_IND, 0); +#ifdef WLAN_KD_READY_NOTIFIER + nl_srv_exit(pHddCtx->ptt_pid); +#else nl_srv_exit(); +#endif /* WLAN_KD_READY_NOTIFIER */ /* Free up dynamically allocated members inside HDD Adapter */ kfree(pHddCtx->cfg_ini); pHddCtx->cfg_ini= NULL; @@ -1936,6 +1926,8 @@ err_vosclose: err_re_init: /* Allow the phone to go to sleep */ hdd_allow_suspend(); + vos_set_reinit_in_progress(VOS_MODULE_ID_VOSS, FALSE); + VOS_BUG(0); return -EPERM; success: diff --git a/CORE/HDD/src/wlan_hdd_ftm.c b/CORE/HDD/src/wlan_hdd_ftm.c index 0db2bf880376..9911e32f4725 100644 --- a/CORE/HDD/src/wlan_hdd_ftm.c +++ b/CORE/HDD/src/wlan_hdd_ftm.c @@ -144,6 +144,9 @@ /* To set 4MAC addresses from given first MAC address, * Last byte value within given MAC address must less than 0xFF - 3 */ #define QWLAN_MAX_MAC_LAST_BYTE_VALUE 0xFC +#define NV_EMBEDDED_VERSION 0x80 + +#define QWLAN_TXFIR_CFG_DPD_BYPASS_MASK 0x8 typedef struct { tANI_U32 tableSize; /* Whole NV Table Size */ @@ -156,14 +159,16 @@ typedef struct { tANI_U32 tableSize; /* Whole NV Table Size */ tANI_U32 chunkSize; /* Current Chunk Size < 2K */ eNvTable nvTable; - tANI_U8 tableData; + tANI_U8 tableData; } pttSetNvTable; extern const sHalNv nvDefaults; static int wlan_ftm_register_wext(hdd_adapter_t *pAdapter); +static int wlan_ftm_stop(hdd_context_t *pHddCtx); +VOS_STATUS wlan_write_to_efs (v_U8_t *pData, v_U16_t data_len); -/* for PRIMA: all the available frequency, channal pair i the table are defined for channel frequency @ RF center frequency +/* for PRIMA: all the available frequency, channal pair i the table are defined for channel frequency @ RF center frequency Since it is associated to agc.channel_freq register for mapping. For channel bonding, the channel number is +2 or -2 for CB with primary high, or with primary low respectively. */ @@ -200,7 +205,27 @@ static rateStr2rateIndex_t rateName_rateIndex_tbl[] = { HAL_PHY_RATE_MCS_1NSS_52_MBPS, "MCS_52_MBPS"}, { HAL_PHY_RATE_MCS_1NSS_58_5_MBPS, "MCS_58_5_MBPS"}, { HAL_PHY_RATE_MCS_1NSS_65_MBPS, "MCS_65_MBPS"}, - { HAL_PHY_RATE_MCS_1NSS_MM_SG_72_2_MBPS, "MCS_72_2_MBPS"} + { HAL_PHY_RATE_MCS_1NSS_MM_SG_72_2_MBPS, "MCS_72_2_MBPS"}, + +//MCS Index #8-15 (40MHz) + + { HAL_PHY_RATE_MCS_1NSS_CB_13_5_MBPS, "MCS_CB_13_B_MBPS" }, + { HAL_PHY_RATE_MCS_1NSS_CB_27_MBPS, "MCS_CB_27_MBPS" }, + { HAL_PHY_RATE_MCS_1NSS_CB_40_5_MBPS, "MCS_CB_40_5_MBPS" }, + { HAL_PHY_RATE_MCS_1NSS_CB_54_MBPS, "MCS_CB_54_MBPS"}, + { HAL_PHY_RATE_MCS_1NSS_CB_81_MBPS, "MCS_CB_81_MBPS"}, + { HAL_PHY_RATE_MCS_1NSS_CB_108_MBPS, "MCS_CB_108_MBPS"}, + { HAL_PHY_RATE_MCS_1NSS_CB_121_5_MBPS, "MCS_CB_121_5_MBPS"}, + { HAL_PHY_RATE_MCS_1NSS_CB_135_MBPS, "MCS_CB_135_MBPS"}, + { HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_15_MBPS, "MCS_CB_15_MBPS"}, + { HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_30_MBPS, "MCS_CB_30_MBPS"}, + { HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_45_MBPS, "MCS_CB_45_MBPS"}, + { HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_60_MBPS, "MCS_CB_60_MBPS"}, + { HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_90_MBPS, "MCS_CB_90_MBPS"}, + { HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_120_MBPS, "MCS_CB_120_MBPS"}, + { HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_135_MBPS, "MCS_CB_135_MBPS"}, + { HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_150_MBPS, "MCS_CB_150_MBPS"} + }; static rateIndex2Preamble_t rate_index_2_preamble_table[] = @@ -225,6 +250,16 @@ static rateIndex2Preamble_t rate_index_2_preamble_table[] = { HAL_PHY_RATE_11A_48_MBPS, PHYDBG_PREAMBLE_OFDM}, { HAL_PHY_RATE_11A_54_MBPS, PHYDBG_PREAMBLE_OFDM}, + // 11A 20MHz Rates + { HAL_PHY_RATE_11A_DUP_6_MBPS, PHYDBG_PREAMBLE_OFDM}, + { HAL_PHY_RATE_11A_DUP_9_MBPS, PHYDBG_PREAMBLE_OFDM}, + { HAL_PHY_RATE_11A_DUP_12_MBPS, PHYDBG_PREAMBLE_OFDM}, + { HAL_PHY_RATE_11A_DUP_18_MBPS, PHYDBG_PREAMBLE_OFDM}, + { HAL_PHY_RATE_11A_DUP_24_MBPS, PHYDBG_PREAMBLE_OFDM}, + { HAL_PHY_RATE_11A_DUP_36_MBPS, PHYDBG_PREAMBLE_OFDM}, + { HAL_PHY_RATE_11A_DUP_48_MBPS, PHYDBG_PREAMBLE_OFDM}, + { HAL_PHY_RATE_11A_DUP_54_MBPS, PHYDBG_PREAMBLE_OFDM}, + //MCS Index #0-15 (20MHz) { HAL_PHY_RATE_MCS_1NSS_6_5_MBPS, PHYDBG_PREAMBLE_MIXED}, { HAL_PHY_RATE_MCS_1NSS_13_MBPS, PHYDBG_PREAMBLE_MIXED}, @@ -242,8 +277,43 @@ static rateIndex2Preamble_t rate_index_2_preamble_table[] = { HAL_PHY_RATE_MCS_1NSS_MM_SG_57_8_MBPS,PHYDBG_PREAMBLE_NOT_SUPPORTED}, { HAL_PHY_RATE_MCS_1NSS_MM_SG_65_MBPS, PHYDBG_PREAMBLE_NOT_SUPPORTED}, { HAL_PHY_RATE_MCS_1NSS_MM_SG_72_2_MBPS, PHYDBG_PREAMBLE_MIXED}, + + //MCS index (40MHz) + { HAL_PHY_RATE_MCS_1NSS_CB_13_5_MBPS, PHYDBG_PREAMBLE_MIXED}, + { HAL_PHY_RATE_MCS_1NSS_CB_27_MBPS, PHYDBG_PREAMBLE_MIXED}, + { HAL_PHY_RATE_MCS_1NSS_CB_40_5_MBPS, PHYDBG_PREAMBLE_MIXED}, + { HAL_PHY_RATE_MCS_1NSS_CB_54_MBPS, PHYDBG_PREAMBLE_MIXED}, + { HAL_PHY_RATE_MCS_1NSS_CB_81_MBPS, PHYDBG_PREAMBLE_MIXED}, + { HAL_PHY_RATE_MCS_1NSS_CB_108_MBPS, PHYDBG_PREAMBLE_MIXED}, + { HAL_PHY_RATE_MCS_1NSS_CB_121_5_MBPS, PHYDBG_PREAMBLE_MIXED}, + { HAL_PHY_RATE_MCS_1NSS_CB_135_MBPS, PHYDBG_PREAMBLE_MIXED}, + { HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_15_MBPS, PHYDBG_PREAMBLE_MIXED}, + { HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_30_MBPS, PHYDBG_PREAMBLE_MIXED}, + { HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_45_MBPS, PHYDBG_PREAMBLE_MIXED}, + { HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_60_MBPS, PHYDBG_PREAMBLE_MIXED}, + { HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_90_MBPS, PHYDBG_PREAMBLE_MIXED}, + { HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_120_MBPS, PHYDBG_PREAMBLE_MIXED}, + { HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_135_MBPS, PHYDBG_PREAMBLE_MIXED}, + { HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_150_MBPS, PHYDBG_PREAMBLE_MIXED} + }; +static unsigned int valid_channel[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, + 11, 12, 13, 14, 36, 40, 44, 48, + 52, 56, 60, 64, 100, 104, 108, + 112, 116, 120, 124, 128, 132, + 136, 140, 149, 153, 157, 161, + 165, 208, 212, 216, 240, 244, + 248, 252, 0 }; +static unsigned int valid_channel_cb40[] = { 3, 4, 5, 6, 7, 8, 9, 10, 11, 38, + 42, 46, 50, 54, 58, 62, 102, 106, + 110, 114, 118, 122, 126, 130, 134, + 138, 151, 155, 159, 163, 210, 214, + 242, 246, 250, 0 }; +static unsigned int valid_channel_cb80[] = { 7, 42, 46, 50, 54, 58, 106, 110, + 114, 118, 122, 126, 130, 134, 155, + 159, 246, 0 }; + typedef struct { tANI_BOOLEAN frameGenEnabled; @@ -252,11 +322,13 @@ typedef struct v_U16_t txpower; v_U16_t rxmode; v_U16_t chainSelect; + ePhyChanBondState cbmode; } FTM_STATUS ; static FTM_STATUS ftm_status; //tpAniSirGlobal pMac; +static tPttMsgbuffer *pMsgBuf; static void _ftm_status_init(void) { @@ -282,6 +354,7 @@ static void _ftm_status_init(void) ftm_status.txpower = 2 ; ftm_status.rxmode = RXMODE_ENABLE_ALL; /* macStart() enables all receive pkt types */ ftm_status.chainSelect = FTM_CHAIN_SEL_R0_T0_ON; + ftm_status.cbmode = 0 ; //none channel bonding return; } @@ -394,7 +467,7 @@ static VOS_STATUS wlan_ftm_vos_open( v_CONTEXT_t pVosContext, v_SIZE_t hddContex VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: Unable to init wdaCompleteEvent",__func__); VOS_ASSERT(0); - + goto err_probe_event; } @@ -525,6 +598,15 @@ static VOS_STATUS wlan_ftm_vos_open( v_CONTEXT_t pVosContext, v_SIZE_t hddContex goto err_wda_close; } + vStatus = vos_nv_get_dictionary_data(); + + if (!VOS_IS_STATUS_SUCCESS(vStatus)) + { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + "%s : failed to get dictionary data for NV", __func__); + goto err_wda_close; + } + /* If we arrive here, both threads dispacthing messages correctly */ /* Now proceed to open the MAC */ @@ -806,12 +888,9 @@ static VOS_STATUS wlan_ftm_priv_set_txpktlen(hdd_adapter_t *pAdapter,v_U32_t len return VOS_STATUS_SUCCESS; } -/**--------------------------------------------------------------------------- - --------------------------------------------------------------------------*/ static VOS_STATUS wlan_ftm_priv_enable_chain(hdd_adapter_t *pAdapter,v_U16_t chainSelect) { - tPttMsgbuffer *pMsgBuf; uPttMsgs *pMsgBody; VOS_STATUS status; v_U16_t chainSelect_save = chainSelect; @@ -851,12 +930,7 @@ static VOS_STATUS wlan_ftm_priv_enable_chain(hdd_adapter_t *pAdapter,v_U16_t cha break; } - pMsgBuf = (tPttMsgbuffer *)vos_mem_malloc(sizeof(tPttMsgbuffer)); - if(pMsgBuf == NULL) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:pMsgBuf is NULL",__func__); - return VOS_STATUS_E_NOMEM; - } + vos_mem_set(pMsgBuf, sizeof(tPttMsgbuffer), 0); init_completion(&pHddCtx->ftm.ftm_comp_var); pMsgBuf->msgId = PTT_MSG_ENABLE_CHAINS; pMsgBuf->msgBodyLength = sizeof(tMsgPttEnableChains) + PTT_HEADER_LENGTH; @@ -866,23 +940,25 @@ static VOS_STATUS wlan_ftm_priv_enable_chain(hdd_adapter_t *pAdapter,v_U16_t cha status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf,pMsgBuf->msgBodyLength); - if(status != VOS_STATUS_SUCCESS) + if (status != VOS_STATUS_SUCCESS) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:wlan_ftm_postmsg failed",__func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:wlan_ftm_postmsg failed", __func__); status = VOS_STATUS_E_FAILURE; goto done; } - wait_for_completion_interruptible_timeout(&pHddCtx->ftm.ftm_comp_var, msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); + wait_for_completion_interruptible_timeout(&pHddCtx->ftm.ftm_comp_var, + msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); - if(pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) + if (pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Ptt response status failed",__func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:Ptt response status failed", __func__); status = VOS_STATUS_E_FAILURE; goto done; } ftm_status.chainSelect = chainSelect_save; done: - vos_mem_free((v_VOID_t * )pMsgBuf); return status; } @@ -921,9 +997,9 @@ static VOS_STATUS wlan_ftm_priv_get_status(hdd_adapter_t *pAdapter,char *buf) } lenRes = snprintf(buf, lenBuf, "\n chainSelect: %s\n rxmode: %s\n " - "txpktgen: %s\n txifs: %ld\n txrate: ", - chain[ftm_status.chainSelect], rx[ftm_status.rxmode], - tx[ftm_status.frameGenEnabled], + "txpktgen: %s\n txifs: %d\n txrate: ", + chain[ftm_status.chainSelect], rx[ftm_status.rxmode], + tx[ftm_status.frameGenEnabled], ftm_status.frameParams.interFrameSpace); if ((lenRes < 0) || (lenRes >= lenBuf)) { @@ -955,9 +1031,9 @@ static VOS_STATUS wlan_ftm_priv_get_status(hdd_adapter_t *pAdapter,char *buf) buf += lenRes; lenBuf -= lenRes; - lenRes = snprintf(buf, lenBuf, "\n txpower: %d\n txpktcnt: %ld\n " - "txpktlen: %d\n", ftm_status.txpower, - ftm_status.frameParams.numTestPackets, + lenRes = snprintf(buf, lenBuf, "\n txpower: %d\n txpktcnt: %d\n " + "txpktlen: %d\n", ftm_status.txpower, + ftm_status.frameParams.numTestPackets, ftm_status.frameParams.payloadLength); if ((lenRes < 0) || (lenRes >= lenBuf)) @@ -971,11 +1047,21 @@ static VOS_STATUS wlan_ftm_priv_get_status(hdd_adapter_t *pAdapter,char *buf) void HEXDUMP(char *s0, char *s1, int len) { - int tmp; + int i = 0, j = 0; printk(KERN_EMERG "%s\n :", s0); - for (tmp = 0; tmp< len; tmp++) { - printk(KERN_EMERG "%02x ", *s1++); + if (len > 8) + { + for (j = 0; j < len/8; j++) + { + printk(KERN_EMERG "%02x %02x %02x %02x %02x %02x %02x %02x", + s1[j*8], s1[j*8+1], s1[j*8+2], s1[j*8+3], s1[j*8+4], + s1[j*8+5],s1[j*8+6],s1[j*8+7] ); + } + len = len - j*8; + } + for (i = 0; i< len; i++) { + printk(KERN_EMERG "%02x ", s1[j*8+i]); } printk("\n"); } @@ -1014,7 +1100,7 @@ VOS_STATUS vos_ftm_preStart( v_CONTEXT_t vosContext ) pVosContextType gpVosContext = vos_get_global_context(VOS_MODULE_ID_VOSS, NULL); #endif - + VOS_TRACE(VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_INFO, "vos prestart"); @@ -1034,8 +1120,8 @@ VOS_STATUS vos_ftm_preStart( v_CONTEXT_t vosContext ) ccmStart(pVosContext->pMACContext); /* Reset wda wait event */ - vos_event_reset(&pVosContext->wdaCompleteEvent); - + vos_event_reset(&pVosContext->wdaCompleteEvent); + /*call WDA pre start*/ vStatus = WDA_preStart(pVosContext); @@ -1107,7 +1193,7 @@ int wlan_hdd_ftm_open(hdd_context_t *pHddCtx) VOS_STATUS vStatus = VOS_STATUS_SUCCESS; pVosContextType pVosContext= NULL; hdd_adapter_t *pAdapter; - + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "%s: Opening VOSS", __func__); @@ -1164,6 +1250,10 @@ int wlan_hdd_ftm_open(hdd_context_t *pHddCtx) goto err_ftm_register_wext_close; } +#ifdef WLAN_KD_READY_NOTIFIER + pHddCtx->kd_nl_init = 1; +#endif /* WLAN_KD_READY_NOTIFIER */ + #ifdef PTT_SOCK_SVC_ENABLE //Initialize the PTT service if(ptt_sock_activate_svc(pHddCtx) != 0) @@ -1197,7 +1287,7 @@ int wlan_hdd_ftm_open(hdd_context_t *pHddCtx) VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, "%s: NV Table Buffer Alloc Fail", __func__); VOS_ASSERT(0); - goto err_nl_srv_init; + goto err_nl_srv_init; } vos_mem_zero((v_VOID_t *)pHddCtx->ftm.tempNVTableBuffer, MAX_NV_TABLE_SIZE); @@ -1218,7 +1308,11 @@ int wlan_hdd_ftm_open(hdd_context_t *pHddCtx) err_nl_srv_init: #ifndef QCA_WIFI_FTM +#ifdef WLAN_KD_READY_NOTIFIER +nl_srv_exit(pHddCtx->ptt_pid); +#else nl_srv_exit(); +#endif /* WLAN_KD_READY_NOTIFIER */ #endif #ifndef QCA_WIFI_FTM @@ -1251,6 +1345,12 @@ int wlan_hdd_ftm_close(hdd_context_t *pHddCtx) return VOS_STATUS_E_NOMEM; } + if(WLAN_FTM_STARTED == pHddCtx->ftm.ftm_state) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s: Ftm has been started. stopping ftm", __func__); + wlan_ftm_stop(pHddCtx); + } //Assert Deep sleep signal now to put Libra HW in lowest power state vosStatus = vos_chipAssertDeepSleep( NULL, NULL, NULL ); @@ -1261,15 +1361,18 @@ int wlan_hdd_ftm_close(hdd_context_t *pHddCtx) vos_chipVoteOffXOBuffer(NULL, NULL, NULL); +#ifdef WLAN_KD_READY_NOTIFIER + nl_srv_exit(pHddCtx->ptt_pid); +#else nl_srv_exit(); - +#endif /* WLAN_KD_READY_NOTIFIER */ //TODO---------- //Deregister the device with the kernel hdd_UnregisterWext(pAdapter->dev); hdd_close_all_adapters( pHddCtx ); #if 0 - if(test_bit(NET_DEVICE_REGISTERED, &pAdapter->event_flags)) + if(test_bit(NET_DEVICE_REGISTERED, &pAdapter->event_flags)) { unregister_netdev(pAdapter->dev); clear_bit(NET_DEVICE_REGISTERED, &pAdapter->event_flags); @@ -1349,9 +1452,9 @@ static int wlan_hdd_ftm_start(hdd_context_t *pHddCtx) VOS_STATUS vStatus = VOS_STATUS_SUCCESS; #ifdef QCA_WIFI_ISOC tSirRetStatus sirStatus = eSIR_SUCCESS; + tHalMacStartParameters halStartParams; #endif pVosContextType pVosContext = (pVosContextType)(pHddCtx->pvosContext); - tHalMacStartParameters halStartParams; if (WLAN_FTM_STARTED == pHddCtx->ftm.ftm_state) { @@ -1369,9 +1472,9 @@ static int wlan_hdd_ftm_start(hdd_context_t *pHddCtx) goto err_status_failure; } - + if (pVosContext->pMACContext == NULL) - { + { VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, "%s: MAC NULL context",__func__); goto err_status_failure; @@ -1414,7 +1517,7 @@ static int wlan_hdd_ftm_start(hdd_context_t *pHddCtx) "%s: WDA_NVDownload_Start reporting other error \n",__func__); } VOS_ASSERT(0); - goto err_wda_stop; + goto err_status_failure; } #endif /* #ifdef QCA_WIFI_ISOC */ @@ -1425,15 +1528,14 @@ static int wlan_hdd_ftm_start(hdd_context_t *pHddCtx) "%s: Failed to start WDA",__func__); goto err_status_failure; } - +#ifdef QCA_WIFI_ISOC /* Start the MAC */ vos_mem_zero((v_PVOID_t)&halStartParams, sizeof(tHalMacStartParameters)); halStartParams.driverType = eDRIVER_TYPE_MFG; -#ifdef QCA_WIFI_ISOC /* Start the MAC */ sirStatus = macStart(pVosContext->pMACContext,(v_PVOID_t)&halStartParams); @@ -1445,7 +1547,7 @@ static int wlan_hdd_ftm_start(hdd_context_t *pHddCtx) goto err_wda_stop; } -#endif /* #ifdef QCA_WIFI_ISOC */ +#endif /* #ifdef QCA_WIFI_ISOC */ VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "%s: MAC correctly started",__func__); @@ -1456,7 +1558,7 @@ static int wlan_hdd_ftm_start(hdd_context_t *pHddCtx) return VOS_STATUS_SUCCESS; #ifdef QCA_WIFI_ISOC -err_wda_stop: +err_wda_stop: vos_event_reset(&(pVosContext->wdaCompleteEvent)); WDA_stop(pVosContext, HAL_STOP_TYPE_RF_KILL); vStatus = vos_wait_single_event(&(pVosContext->wdaCompleteEvent), 1000); @@ -1475,7 +1577,7 @@ err_wda_stop: } VOS_ASSERT(0); } -#endif /* #ifdef QCA_WIFI_ISOC */ +#endif /* #ifdef QCA_WIFI_ISOC */ err_status_failure: @@ -1486,7 +1588,7 @@ err_status_failure: #if defined(QCA_WIFI_2_0) && defined(QCA_WIFI_FTM) int hdd_ftm_start(hdd_context_t *pHddCtx) { - return wlan_hdd_ftm_start(pHddCtx); + return wlan_hdd_ftm_start(pHddCtx); } #endif @@ -1535,7 +1637,7 @@ static int wlan_ftm_stop(hdd_context_t *pHddCtx) #if defined(QCA_WIFI_2_0) && defined(QCA_WIFI_FTM) int hdd_ftm_stop(hdd_context_t *pHddCtx) { - return wlan_ftm_stop(pHddCtx); + return wlan_ftm_stop(pHddCtx); } #endif @@ -1679,12 +1781,12 @@ int wlan_hdd_ftm_get_nv_table pHddCtx->ftm.targetNVTableSize = 0; pHddCtx->ftm.processedNVTableSize = 0; vos_mem_zero(pHddCtx->ftm.tempNVTableBuffer, MAX_NV_TABLE_SIZE); - + return -EINVAL; } /* Copy next chunk of NV table value into response buffer */ - vos_mem_copy(&nvTable->tableData, + vos_mem_copy(&nvTable->tableData, pHddCtx->ftm.tempNVTableBuffer + pHddCtx->ftm.processedNVTableSize, nvTable->chunkSize); /* Update processed pointer to prepare next chunk copy */ @@ -1834,7 +1936,7 @@ int wlan_hdd_ftm_set_nv_table return -EINVAL; } vos_mem_copy(pHddCtx->ftm.tempNVTableBuffer + pHddCtx->ftm.processedNVTableSize, - &nvTable->tableData, + &nvTable->tableData, nvTable->chunkSize); pHddCtx->ftm.processedNVTableSize += nvTable->chunkSize; @@ -2138,9 +2240,22 @@ int wlan_hdd_ftm_get_nv_field break; case NV_COMMON_NV_VERSION: - memcpy((void *)&nvField->fieldData, - &nvFieldDataBuffer.nvVersion, - sizeof(nvFieldDataBuffer.nvVersion)); + { + VOS_STATUS nvEmbededStatus = VOS_STATUS_SUCCESS; + v_U8_t nvVersion = nvFieldDataBuffer.nvVersion; + + nvEmbededStatus = vos_nv_isEmbeddedNV(); + + if ( nvEmbededStatus == VOS_STATUS_SUCCESS ) + { + // High bit is set to indicate embedded NV.. + nvVersion = nvVersion | NV_EMBEDDED_VERSION; + } + + memcpy((void *)&nvField->fieldData, + &nvVersion, + sizeof(nvFieldDataBuffer.nvVersion)); + } break; default: @@ -2178,7 +2293,7 @@ int wlan_hdd_ftm_set_nv_field v_U8_t *pNVMac; v_U8_t lastByteMAC; - + nvStatus = vos_nv_getNVBuffer((void **)&nvContents, &nvSize); if((VOS_STATUS_SUCCESS != nvStatus) || (NULL == nvContents)) { @@ -2217,22 +2332,22 @@ int wlan_hdd_ftm_set_nv_field /* If Last byte is larger than 252 (0xFC), return Error, * Since 3MACs should be derived from first MAC */ if(QWLAN_MAX_MAC_LAST_BYTE_VALUE < - nvField->fieldData.macAddr[VOS_MAC_ADDRESS_LEN - 1]) + nvField->fieldData.macAddr.macAddr1[VOS_MAC_ADDRESS_LEN - 1]) { VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "Last Byte of the seed MAC is too large 0x%x", - nvField->fieldData.macAddr[VOS_MAC_ADDRESS_LEN - 1]); + nvField->fieldData.macAddr.macAddr1[VOS_MAC_ADDRESS_LEN - 1]); return -EILSEQ; } pNVMac = (v_U8_t *)nvContents->fields.macAddr; - lastByteMAC = nvField->fieldData.macAddr[VOS_MAC_ADDRESS_LEN - 1]; + lastByteMAC = nvField->fieldData.macAddr.macAddr1[VOS_MAC_ADDRESS_LEN - 1]; for(macLoop = 0; macLoop < VOS_MAX_CONCURRENCY_PERSONA; macLoop++) { - nvField->fieldData.macAddr[VOS_MAC_ADDRESS_LEN - 1] = + nvField->fieldData.macAddr.macAddr1[VOS_MAC_ADDRESS_LEN - 1] = lastByteMAC + macLoop; vos_mem_copy(pNVMac + (macLoop * NV_FIELD_MAC_ADDR_SIZE), - &nvField->fieldData.macAddr[0], + &nvField->fieldData.macAddr.macAddr1[0], NV_FIELD_MAC_ADDR_SIZE); } break; @@ -2365,7 +2480,7 @@ int wlan_hdd_ftm_store_nv_table tablePtr = (void *)&nvContents->tables.fwConfig; tableSize = sizeof(nvContents->tables.fwConfig); tableVNVType = VNV_FW_CONFIG; - break; + break; case NV_TABLE_ANTENNA_PATH_LOSS: tablePtr = (void *)&nvContents->tables.antennaPathLoss[0]; @@ -2384,7 +2499,7 @@ int wlan_hdd_ftm_store_nv_table "Not Supported Table Type %d", nvTable->nvTable); return -EIO; break; - + } nvStatus = vos_nv_write(tableVNVType, @@ -2398,6 +2513,241 @@ int wlan_hdd_ftm_store_nv_table return 1; } +/* -------------------------------------------------------------------------- + \brief wlan_hdd_ftm_get_nv_bin() - + Get NV bin read from Flash Memory, file + + \param - ftmCmd - Pointer FTM Commad Buffer + + \return - int + -1, Process Host command fail, vail out + 0, Process Host command success +--------------------------------------------------------------------------*/ + +static int wlan_hdd_ftm_get_nv_bin +( + v_U16_t msgId, + hdd_context_t *pHddCtx, + tPttMsgbuffer *ftmCmd +) +{ + VOS_STATUS nvStatus = VOS_STATUS_SUCCESS; + pttGetNvTable *nvTable = (pttGetNvTable *)&ftmCmd->msgBody.GetNvBin; + v_SIZE_t nvSize; + v_U8_t *nvContents; + v_U16_t offset = 0; + + + if ((NV_MAX_TABLE == pHddCtx->ftm.processingNVTable) || + (0 == pHddCtx->ftm.processedNVTableSize)) + { + if ( msgId == PTT_MSG_GET_NV_BIN ) + { + nvStatus = vos_nv_getNVEncodedBuffer((void **)&nvContents, &nvSize); + } + else + { + nvStatus = vos_nv_getNVDictionary((void **)&nvContents, &nvSize); + } + + if ((VOS_STATUS_SUCCESS != nvStatus) || (NULL == nvContents)) + { + VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, + "Fail to get cached NV value Status %d", nvStatus); + return -EIO; + } + + switch (nvTable->nvTable) + { + case NV_BINARY_IMAGE: + pHddCtx->ftm.targetNVTablePointer = (v_U8_t *)nvContents; + break; + default: + VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + "Not Valid NV Table %d", nvTable->nvTable); + return -EIO; + break; + } + + /* Set Current Processing NV table type */ + pHddCtx->ftm.processingNVTable = nvTable->nvTable; + if ( msgId == PTT_MSG_GET_NV_BIN ) + { + pHddCtx->ftm.targetNVTableSize = nvSize + sizeof(v_U32_t); + /* Validity Period */ + pHddCtx->ftm.tempNVTableBuffer[0] = 0xFF; + pHddCtx->ftm.tempNVTableBuffer[1] = 0xFF; + pHddCtx->ftm.tempNVTableBuffer[2] = 0xFF; + pHddCtx->ftm.tempNVTableBuffer[3] = 0xFF; + offset = sizeof(v_U32_t); + } + else + { + pHddCtx->ftm.targetNVTableSize = nvSize; + offset = 0; + } + + /* Copy target NV table value into temp context buffer */ + vos_mem_copy(&pHddCtx->ftm.tempNVTableBuffer[offset], + pHddCtx->ftm.targetNVTablePointer, + pHddCtx->ftm.targetNVTableSize); + } + + + if (pHddCtx->ftm.processingNVTable != nvTable->nvTable) + { + /* Invalid table type */ + VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, + "Invalid NV Table, now Processing %d, not %d", + pHddCtx->ftm.processingNVTable, nvTable->nvTable); + + pHddCtx->ftm.processingNVTable = NV_MAX_TABLE; + pHddCtx->ftm.targetNVTableSize = 0; + pHddCtx->ftm.processedNVTableSize = 0; + vos_mem_zero(pHddCtx->ftm.tempNVTableBuffer, MAX_NV_TABLE_SIZE); + + return -EINVAL; + } + + nvTable->tableSize = pHddCtx->ftm.targetNVTableSize; + + /* Update processed pointer to prepare next chunk copy */ + if ( (nvTable->chunkSize + pHddCtx->ftm.processedNVTableSize) > + pHddCtx->ftm.targetNVTableSize ) + { + nvTable->chunkSize = + (pHddCtx->ftm.targetNVTableSize - pHddCtx->ftm.processedNVTableSize); + } + + /* Copy next chunk of NV table value into response buffer */ + vos_mem_copy( + &nvTable->tableData, + pHddCtx->ftm.tempNVTableBuffer + pHddCtx->ftm.processedNVTableSize, + nvTable->chunkSize); + + pHddCtx->ftm.processedNVTableSize += nvTable->chunkSize; + + if (pHddCtx->ftm.targetNVTableSize == pHddCtx->ftm.processedNVTableSize) + { + /* Finished to process last chunk of data, initialize buffer */ + pHddCtx->ftm.processingNVTable = NV_MAX_TABLE; + pHddCtx->ftm.targetNVTableSize = 0; + pHddCtx->ftm.processedNVTableSize = 0; + vos_mem_zero(pHddCtx->ftm.tempNVTableBuffer, MAX_NV_TABLE_SIZE); + } + + return 1; +} + +/**--------------------------------------------------------------------------- + + \brief wlan_hdd_ftm_set_nv_bin() - + Set NV bin to Flash Memory, file + + \param - ftmCmd - Pointer FTM Commad Buffer + + \return - int + -1, Process Host command fail, vail out + 0, Process Host command success + ++----------------------------------------------------------------------------*/ + +static int wlan_hdd_ftm_set_nv_bin +( + hdd_context_t *pHddCtx, + tPttMsgbuffer *ftmCmd +) +{ + VOS_STATUS nvStatus = VOS_STATUS_SUCCESS; + pttSetNvTable *nvTable = (pttSetNvTable *)&ftmCmd->msgBody.SetNvBin; + + /* Test first chunk of NV table */ + if ((NV_MAX_TABLE == pHddCtx->ftm.processingNVTable) || + (0 == pHddCtx->ftm.processedNVTableSize)) + { + switch (nvTable->nvTable) + { + case NV_BINARY_IMAGE: + pHddCtx->ftm.targetNVTableSize = nvTable->tableSize; + break; + default: + VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + "Not Valid NV Table %d", nvTable->nvTable); + return -EIO; + break; + } + + /* Set Current Processing NV table type */ + pHddCtx->ftm.processingNVTable = nvTable->nvTable; + pHddCtx->ftm.processedNVTableSize = 0; + + if (pHddCtx->ftm.targetNVTableSize != nvTable->tableSize) + { + VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, + "Invalid Table Size %d", nvTable->tableSize); + pHddCtx->ftm.processingNVTable = NV_MAX_TABLE; + pHddCtx->ftm.targetNVTableSize = 0; + pHddCtx->ftm.processedNVTableSize = 0; + vos_mem_zero(pHddCtx->ftm.tempNVTableBuffer, MAX_NV_TABLE_SIZE); + return -EINVAL; + } + } + + if (pHddCtx->ftm.processingNVTable != nvTable->nvTable) + { + VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + "Invalid NV Table, now Processing %d, not %d", + pHddCtx->ftm.processingNVTable, nvTable->nvTable); + pHddCtx->ftm.processingNVTable = NV_MAX_TABLE; + pHddCtx->ftm.targetNVTableSize = 0; + pHddCtx->ftm.processedNVTableSize = 0; + vos_mem_zero(pHddCtx->ftm.tempNVTableBuffer, MAX_NV_TABLE_SIZE); + return -EINVAL; + } + + vos_mem_copy( + pHddCtx->ftm.tempNVTableBuffer + pHddCtx->ftm.processedNVTableSize, + &nvTable->tableData, + nvTable->chunkSize); + + pHddCtx->ftm.processedNVTableSize += nvTable->chunkSize; + + if (pHddCtx->ftm.targetNVTableSize == pHddCtx->ftm.processedNVTableSize) + { + VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + "Processing Done!! write encoded Buffer %d", + pHddCtx->ftm.targetNVTableSize); + + nvStatus = wlan_write_to_efs ((v_U8_t*)pHddCtx->ftm.tempNVTableBuffer, + (v_U16_t)pHddCtx->ftm.targetNVTableSize); + + if ((VOS_STATUS_SUCCESS != nvStatus)) + { + VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, + "Fail to set NV Binary %d", nvStatus); + return -EIO; + } + + nvStatus = vos_nv_setNVEncodedBuffer( + (v_U8_t*)pHddCtx->ftm.tempNVTableBuffer, + (v_SIZE_t)pHddCtx->ftm.targetNVTableSize); + + if ((VOS_STATUS_SUCCESS != nvStatus)) + { + VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, + "Fail to set NV Binary %d", nvStatus); + return -EIO; + } + + pHddCtx->ftm.processingNVTable = NV_MAX_TABLE; + pHddCtx->ftm.targetNVTableSize = 0; + pHddCtx->ftm.processedNVTableSize = 0; + vos_mem_zero(pHddCtx->ftm.tempNVTableBuffer, MAX_NV_TABLE_SIZE); + } + + return 1; +} + /**--------------------------------------------------------------------------- \brief wlan_hdd_ftm_temp_get_rel_num() - @@ -2490,6 +2840,17 @@ int wlan_hdd_process_ftm_host_cmd needToRouteHal = 0; break; + case PTT_MSG_GET_NV_BIN: + case PTT_MSG_GET_DICTIONARY: + hostState = wlan_hdd_ftm_get_nv_bin(pFTMCmd->msgId, pHddCtx, pFTMCmd); + needToRouteHal = 0; + break; + + case PTT_MSG_SET_NV_BIN: + hostState = wlan_hdd_ftm_set_nv_bin(pHddCtx, pFTMCmd); + needToRouteHal = 0; + break; + case PTT_MSG_DBG_READ_REGISTER: wpalReadRegister(pFTMCmd->msgBody.DbgReadRegister.regAddr, &pFTMCmd->msgBody.DbgReadRegister.regValue); @@ -2747,7 +3108,7 @@ static VOS_STATUS wlan_ftm_priv_start_stop_ftm(hdd_adapter_t *pAdapter, VOS_STATUS status; hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx; - if (start) + if (start) { pHddCtx->ftm.cmd_iwpriv = TRUE; status = wlan_hdd_ftm_start(pHddCtx); @@ -2758,6 +3119,16 @@ static VOS_STATUS wlan_ftm_priv_start_stop_ftm(hdd_adapter_t *pAdapter, "FTM Start Failed"); return VOS_STATUS_E_FAILURE; } + if (NULL == pMsgBuf) + { + pMsgBuf = (tPttMsgbuffer *)vos_mem_malloc(sizeof(tPttMsgbuffer)); + if (NULL == pMsgBuf) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:pMsgBuf is NULL", __func__); + return VOS_STATUS_E_FAILURE; + } + } } else { @@ -2769,17 +3140,88 @@ static VOS_STATUS wlan_ftm_priv_start_stop_ftm(hdd_adapter_t *pAdapter, "FTM Stop Failed"); return VOS_STATUS_E_FAILURE; } + pHddCtx->ftm.ftm_state = WLAN_FTM_STOPPED; + if (pMsgBuf) + { + vos_mem_free((v_VOID_t * )pMsgBuf); + pMsgBuf = NULL; + } } return VOS_STATUS_SUCCESS; } -/**--------------------------------------------------------------------------- - \brief wlan_ftm_priv_set_channel() - +static VOS_STATUS validate_channel(unsigned int channel,unsigned int cb) +{ + unsigned int *table = NULL; + int index = 0; + + if (PHY_SINGLE_CHANNEL_CENTERED == cb) + table = valid_channel; + else if (cb >= PHY_DOUBLE_CHANNEL_LOW_PRIMARY && + cb <= PHY_DOUBLE_CHANNEL_HIGH_PRIMARY) + table = valid_channel_cb40; + else if (cb >= PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_CENTERED && + cb <= PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_HIGH) + table = valid_channel_cb80; + + if (NULL == table) + return VOS_STATUS_E_FAILURE; - This function is used for setting the channel to the halphy ptt module. + while (table[index] != 0) + { + if (table[index] == channel) + return VOS_STATUS_SUCCESS; - \param - pAdapter - Pointer HDD Context. + index++; + } + + return VOS_STATUS_E_FAILURE; +} + + +static unsigned int get_primary_channel(unsigned int center_channel,unsigned int cb) +{ + unsigned int primary_channel = center_channel; + + if (center_channel <= 14) + return primary_channel ; + + switch (cb) + { + case PHY_DOUBLE_CHANNEL_LOW_PRIMARY: + case PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_CENTERED: + case PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_LOW: + primary_channel -= 2; + break; + + + case PHY_DOUBLE_CHANNEL_HIGH_PRIMARY: + case PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_CENTERED: + case PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_HIGH: + primary_channel += 2; + break; + + case PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_LOW: + primary_channel -= 6; + break; + + case PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_HIGH: + primary_channel += 6; + break; + } + + return primary_channel; + +} + +/**--------------------------------------------------------------------------- + + \brief wlan_ftm_priv_set_channel() - + + This function is used for setting the channel to the halphy ptt module. + + \param - pAdapter - Pointer HDD Context. - channel - Channel Number 1-14. \return - 0 for success, non zero for failure @@ -2788,135 +3230,176 @@ static VOS_STATUS wlan_ftm_priv_start_stop_ftm(hdd_adapter_t *pAdapter, static VOS_STATUS wlan_ftm_priv_set_channel(hdd_adapter_t *pAdapter,v_U16_t channel) { - tPttMsgbuffer *pMsgBuf; uPttMsgs *pMsgBody; VOS_STATUS status; hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx; - if(pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) + if (pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Ftm has not started. Please start the ftm. ",__func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:Ftm has not started. Please start the ftm. ", __func__); return VOS_STATUS_E_FAILURE; } - if(!(channel >= 1 && channel <= 14)) + if (VOS_STATUS_SUCCESS != validate_channel(channel, ftm_status.cbmode)) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Invalid Channel Number. ",__func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:Invalid Channel Number. ", __func__); return VOS_STATUS_E_FAILURE; } - pMsgBuf = (tPttMsgbuffer *)vos_mem_malloc(sizeof(tPttMsgbuffer)); - if(pMsgBuf == NULL) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:pMsgBuf is NULL",__func__); - return VOS_STATUS_E_NOMEM; - } + vos_mem_set(pMsgBuf, sizeof(*pMsgBuf), 0); init_completion(&pHddCtx->ftm.ftm_comp_var); pMsgBuf->msgId = PTT_MSG_SET_CHANNEL; pMsgBuf->msgBodyLength = sizeof(tMsgPttSetChannel) + PTT_HEADER_LENGTH; pMsgBody = &pMsgBuf->msgBody; - pMsgBody->SetChannel.chId = channel; + pMsgBody->SetChannel.chId = get_primary_channel(channel, ftm_status.cbmode); VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Channel =%d\n",pMsgBody->SetChannel.chId); - pMsgBody->SetChannel.cbState = PHY_SINGLE_CHANNEL_CENTERED; + pMsgBody->SetChannel.cbState = ftm_status.cbmode ; status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf,pMsgBuf->msgBodyLength); - if(status != VOS_STATUS_SUCCESS) + if (status != VOS_STATUS_SUCCESS) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:wlan_ftm_postmsg failed",__func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:wlan_ftm_postmsg failed", __func__); status = VOS_STATUS_E_FAILURE; goto done; } - wait_for_completion_interruptible_timeout(&pHddCtx->ftm.ftm_comp_var, msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); + wait_for_completion_interruptible_timeout(&pHddCtx->ftm.ftm_comp_var, + msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); - if(pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) + if (pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Ptt response status failed",__func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:Ptt response status failed", __func__); status = VOS_STATUS_E_FAILURE; goto done; } done: - vos_mem_free((v_VOID_t * )pMsgBuf); return status; } + /**--------------------------------------------------------------------------- - \brief wlan_ftm_priv_set_txpower() - + \brief wlan_ftm_priv_set_pwr_cntl_mode() - - This function is used for setting the txpower to the halphy ptt module. + This function is used for setting the power control mode for tx. \param - pAdapter - Pointer HDD Context. - - txpower - txpower Number 1-18. + - pwr_mode - power control mode 0-2. \return - 0 for success, non zero for failure --------------------------------------------------------------------------*/ -static VOS_STATUS wlan_ftm_priv_set_txpower(hdd_adapter_t *pAdapter,v_U16_t txpower) +static VOS_STATUS wlan_ftm_priv_set_pwr_cntl_mode(hdd_adapter_t *pAdapter, + v_U16_t pwr_mode) { - tPttMsgbuffer *pMsgBuf; uPttMsgs *pMsgBody; VOS_STATUS status; hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx; - if(pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) + if (pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Ftm has not started. Please start the ftm. ",__func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:Ftm has not started. Please start the ftm. ", __func__); return VOS_STATUS_E_FAILURE; } - /* do not allow to change setting when tx pktgen is enabled, although halphy does allow changing tx power - * when tx pktgen is enabled - */ - if (ftm_status.frameGenEnabled) + if (pwr_mode > 2) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:cannot set txpower when pktgen is enabled.",__func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:invalid control mode.valid mode is 0 , 1, 2.", __func__); return VOS_STATUS_E_FAILURE; } - if(!(txpower >= 9 && txpower <= 24)) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Invalid tx power. ",__func__); - return VOS_STATUS_E_FAILURE; - } - pMsgBuf = (tPttMsgbuffer *)vos_mem_malloc(sizeof(tPttMsgbuffer)); - if(pMsgBuf == NULL) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:pMsgBuf is NULL",__func__); - return VOS_STATUS_E_NOMEM; - } + vos_mem_set(pMsgBuf, sizeof(tPttMsgbuffer), 0); init_completion(&pHddCtx->ftm.ftm_comp_var); - pMsgBuf->msgId = PTT_MSG_CLOSE_TPC_LOOP; + pMsgBody = &pMsgBuf->msgBody; + pMsgBuf->msgId = PTT_MSG_CLOSE_TPC_LOOP_PRIMA_V1; pMsgBuf->msgBodyLength = sizeof(tMsgPttCloseTpcLoop) + PTT_HEADER_LENGTH; - pMsgBody = &pMsgBuf->msgBody; - pMsgBody->CloseTpcLoop.tpcClose = TRUE; + pMsgBody->CloseTpcLoop.tpcClose = pwr_mode; + status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf, pMsgBuf->msgBodyLength); - status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf,pMsgBuf->msgBodyLength); - - if(status != VOS_STATUS_SUCCESS) + if (status != VOS_STATUS_SUCCESS) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:wlan_ftm_postmsg failed",__func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:wlan_ftm_postmsg failed", __func__); status = VOS_STATUS_E_FAILURE; goto done; } - wait_for_completion_interruptible_timeout(&pHddCtx->ftm.ftm_comp_var, msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); + wait_for_completion_interruptible_timeout(&pHddCtx->ftm.ftm_comp_var, + msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); - if(pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) + if (pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Ptt response status failed",__func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:Ptt response status failed", __func__); status = VOS_STATUS_E_FAILURE; goto done; } + done: + return status; + +} + +/**--------------------------------------------------------------------------- + + \brief wlan_ftm_priv_set_txpower() - + + This function is used for setting the txpower to the halphy ptt module. + + \param - pAdapter - Pointer HDD Context. + - txpower - txpower Number 1-18. + + \return - 0 for success, non zero for failure + + --------------------------------------------------------------------------*/ + +static VOS_STATUS wlan_ftm_priv_set_txpower(hdd_adapter_t *pAdapter, + v_U16_t txpower) +{ + uPttMsgs *pMsgBody; + VOS_STATUS status; + hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx; + + if (pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:Ftm has not started. Please start the ftm. ", __func__); + return VOS_STATUS_E_FAILURE; + } + + /* do not allow to change setting when tx pktgen is enabled, although halphy does allow changing tx power + * when tx pktgen is enabled + */ + if (ftm_status.frameGenEnabled) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:cannot set txpower when pktgen is enabled.", __func__); + return VOS_STATUS_E_FAILURE; + } + + if(!(txpower >= 9 && txpower <= 24)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:Invalid tx power. ", __func__); + return VOS_STATUS_E_FAILURE; + } + + vos_mem_set(pMsgBuf, sizeof(tPttMsgbuffer), 0); init_completion(&pHddCtx->ftm.ftm_comp_var); + pMsgBody = &pMsgBuf->msgBody; pMsgBuf->msgId = PTT_MSG_SET_TX_POWER; pMsgBuf->msgBodyLength = sizeof(tMsgPttSetTxPower) + PTT_HEADER_LENGTH; @@ -2924,28 +3407,66 @@ static VOS_STATUS wlan_ftm_priv_set_txpower(hdd_adapter_t *pAdapter,v_U16_t txpo status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf,pMsgBuf->msgBodyLength); - if(status != VOS_STATUS_SUCCESS) + if (status != VOS_STATUS_SUCCESS) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:wlan_ftm_postmsg failed",__func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:wlan_ftm_postmsg failed", __func__); status = VOS_STATUS_E_FAILURE; goto done; } - wait_for_completion_interruptible_timeout(&pHddCtx->ftm.ftm_comp_var, msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); + wait_for_completion_interruptible_timeout(&pHddCtx->ftm.ftm_comp_var, + msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); - if(pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) + if (pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Ptt response status failed",__func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:Ptt response status failed", __func__); status = VOS_STATUS_E_FAILURE; goto done; } ftm_status.txpower = txpower ; done: - vos_mem_free((v_VOID_t * )pMsgBuf); return status; } + + +static VOS_STATUS wlan_ftm_priv_enable_dpd(hdd_adapter_t *pAdapter, + v_U16_t enable) +{ + tANI_U32 value = 0; + tANI_U32 reg_addr; + hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx; + if (pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:Ftm has not started. Please start the ftm. ", __func__); + return VOS_STATUS_E_FAILURE; + } + +#ifdef WCN_PRONTO + reg_addr = 0xfb018000; +#else + reg_addr = 0x03018000; +#endif + wpalReadRegister(reg_addr, &value); + if (enable) + { + value &= (~QWLAN_TXFIR_CFG_DPD_BYPASS_MASK); + } + else + { + value |= QWLAN_TXFIR_CFG_DPD_BYPASS_MASK; + } + + wpalWriteRegister(reg_addr, value); + + return VOS_STATUS_SUCCESS; +} + + /**--------------------------------------------------------------------------- \brief wlan_ftm_priv_set_txrate() - @@ -3009,20 +3530,21 @@ static VOS_STATUS wlan_ftm_priv_set_txrate(hdd_adapter_t *pAdapter,char *txrate) static VOS_STATUS wlan_ftm_priv_start_stop_tx_pktgen(hdd_adapter_t *pAdapter,v_U16_t startStop) { - tPttMsgbuffer *pMsgBuf; uPttMsgs *pMsgBody; VOS_STATUS status; hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx; - if(pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) + if (pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Ftm has not started. Please start the ftm. ",__func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:Ftm has not started. Please start the ftm. ", __func__); return VOS_STATUS_E_FAILURE; } - if(startStop != 1 && startStop != 0) + if (startStop != 1 && startStop != 0) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Tx value is invalid ",__func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:Tx value is invalid ", __func__); return VOS_STATUS_E_FAILURE; } @@ -3031,13 +3553,8 @@ static VOS_STATUS wlan_ftm_priv_start_stop_tx_pktgen(hdd_adapter_t *pAdapter,v_U { return VOS_STATUS_SUCCESS ; } + vos_mem_set(pMsgBuf, sizeof(tPttMsgbuffer), 0); - pMsgBuf = (tPttMsgbuffer *)vos_mem_malloc(sizeof(tPttMsgbuffer)); - if(pMsgBuf == NULL) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:pMsgBuf is NULL",__func__); - return VOS_STATUS_E_NOMEM; - } if (startStop == 1) { init_completion(&pHddCtx->ftm.ftm_comp_var); @@ -3047,17 +3564,20 @@ static VOS_STATUS wlan_ftm_priv_start_stop_tx_pktgen(hdd_adapter_t *pAdapter,v_U pMsgBody->ConfigTxPacketGen.frameParams = ftm_status.frameParams ; status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf,pMsgBuf->msgBodyLength); - if(status != VOS_STATUS_SUCCESS) + if (status != VOS_STATUS_SUCCESS) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:posting PTT_MSG_CONFIG_TX_PACKET_GEN failed",__func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:posting PTT_MSG_CONFIG_TX_PACKET_GEN failed", __func__); status = VOS_STATUS_E_FAILURE; goto done; } - wait_for_completion_interruptible_timeout(&pHddCtx->ftm.ftm_comp_var, msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); - if(pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) + wait_for_completion_interruptible_timeout(&pHddCtx->ftm.ftm_comp_var, + msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); + if (pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s: PTT_MSG_CONFIG_TX_PACKET_GEN failed",__func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s: PTT_MSG_CONFIG_TX_PACKET_GEN failed", __func__); status = VOS_STATUS_E_FAILURE; goto done; } @@ -3086,17 +3606,16 @@ static VOS_STATUS wlan_ftm_priv_start_stop_tx_pktgen(hdd_adapter_t *pAdapter,v_U } done: - vos_mem_free((v_VOID_t * )pMsgBuf); if (status == VOS_STATUS_SUCCESS) { if (startStop == 1) { - ftm_status.frameGenEnabled = eANI_BOOLEAN_TRUE ; + ftm_status.frameGenEnabled = eANI_BOOLEAN_TRUE; } else { - ftm_status.frameGenEnabled = eANI_BOOLEAN_FALSE ; + ftm_status.frameGenEnabled = eANI_BOOLEAN_FALSE; } } @@ -3104,6 +3623,31 @@ done: } + +static VOS_STATUS wlan_ftm_priv_set_cb(hdd_adapter_t *pAdapter, v_U16_t cbmode) +{ + + hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx; + if (pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:Ftm has not started. Please start the ftm. ", __func__); + return VOS_STATUS_E_FAILURE; + } + + if (cbmode > PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_HIGH) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:cb mode value is invalid ", __func__); + return VOS_STATUS_E_FAILURE; + } + + ftm_status.cbmode = cbmode; + + return VOS_STATUS_SUCCESS; + +} + /**--------------------------------------------------------------------------- \brief wlan_ftm_rx_mode() - @@ -3122,29 +3666,25 @@ done: static VOS_STATUS wlan_ftm_priv_rx_mode(hdd_adapter_t *pAdapter,v_U16_t rxmode) { - tPttMsgbuffer *pMsgBuf; uPttMsgs *pMsgBody; VOS_STATUS status; hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx; - if(pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) + if (pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Ftm has not started. Please start the ftm. ",__func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:Ftm has not started. Please start the ftm. ", __func__); return VOS_STATUS_E_FAILURE; } - if(rxmode > 3) + if (rxmode > 3) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Rx mode value is invalid ",__func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:Rx mode value is invalid ", __func__); return VOS_STATUS_E_FAILURE; } - pMsgBuf = (tPttMsgbuffer *)vos_mem_malloc(sizeof(tPttMsgbuffer)); - if(pMsgBuf == NULL) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:pMsgBuf is NULL",__func__); - return VOS_STATUS_E_NOMEM; - } + vos_mem_set(pMsgBuf, sizeof(tPttMsgbuffer), 0); init_completion(&pHddCtx->ftm.ftm_comp_var); pMsgBuf->msgId = PTT_MSG_SET_RX_DISABLE_MODE; @@ -3182,23 +3722,25 @@ static VOS_STATUS wlan_ftm_priv_rx_mode(hdd_adapter_t *pAdapter,v_U16_t rxmode) status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf,pMsgBuf->msgBodyLength); - if(status != VOS_STATUS_SUCCESS) + if (status != VOS_STATUS_SUCCESS) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:wlan_ftm_postmsg failed",__func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:wlan_ftm_postmsg failed", __func__); status = VOS_STATUS_E_FAILURE; goto done; } - wait_for_completion_interruptible_timeout(&pHddCtx->ftm.ftm_comp_var, msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); + wait_for_completion_interruptible_timeout(&pHddCtx->ftm.ftm_comp_var, + msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); - if(pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) + if (pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Ptt response status failed",__func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:Ptt response status failed", __func__); status = VOS_STATUS_E_FAILURE; goto done; } ftm_status.rxmode = rxmode ; done: - vos_mem_free((v_VOID_t * )pMsgBuf); return status; } @@ -3218,54 +3760,48 @@ done: static VOS_STATUS wlan_ftm_priv_rx_pkt_clear(hdd_adapter_t *pAdapter,v_U16_t rx_pkt_clear) { - tPttMsgbuffer *pMsgBuf; - uPttMsgs *pMsgBody; VOS_STATUS status; hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx; - if(pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) + if (pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Ftm has not started. Please start the ftm. ",__func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:Ftm has not started. Please start the ftm. ", __func__); return VOS_STATUS_E_FAILURE; } - if(rx_pkt_clear != 1) + if (rx_pkt_clear != 1) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Invalid rx_pkt_clear value ",__func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:Invalid rx_pkt_clear value ", __func__); return VOS_STATUS_E_FAILURE; } - pMsgBuf = (tPttMsgbuffer *)vos_mem_malloc(sizeof(tPttMsgbuffer)); - if(pMsgBuf == NULL) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:pMsgBuf is NULL",__func__); - return VOS_STATUS_E_NOMEM; - } + vos_mem_set(pMsgBuf, sizeof(tPttMsgbuffer), 0); init_completion(&pHddCtx->ftm.ftm_comp_var); pMsgBuf->msgId = PTT_MSG_RESET_RX_PACKET_STATISTICS; pMsgBuf->msgBodyLength = sizeof(tMsgPttResetRxPacketStatistics) + PTT_HEADER_LENGTH; - pMsgBody = &pMsgBuf->msgBody; - pMsgBody->ResetRxPacketStatistics.notUsed= rx_pkt_clear; - status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf,pMsgBuf->msgBodyLength); - if(status != VOS_STATUS_SUCCESS) + if (status != VOS_STATUS_SUCCESS) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:wlan_ftm_postmsg failed",__func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:wlan_ftm_postmsg failed", __func__); status = VOS_STATUS_E_FAILURE; goto done; } - wait_for_completion_interruptible_timeout(&pHddCtx->ftm.ftm_comp_var, msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); + wait_for_completion_interruptible_timeout(&pHddCtx->ftm.ftm_comp_var, + msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); - if(pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) + if (pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Ptt response status failed",__func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:Ptt response status failed", __func__); status = VOS_STATUS_E_FAILURE; goto done; } done: - vos_mem_free((v_VOID_t * )pMsgBuf); return status; } @@ -3286,7 +3822,6 @@ done: static VOS_STATUS wlan_ftm_priv_get_channel(hdd_adapter_t *pAdapter,v_U16_t *pChannel) { - tPttMsgbuffer *pMsgBuf; uPttMsgs *pMsgBody; VOS_STATUS status; v_U16_t freq; @@ -3294,17 +3829,13 @@ static VOS_STATUS wlan_ftm_priv_get_channel(hdd_adapter_t *pAdapter,v_U16_t *pCh hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx; - if(pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) + if (pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Ftm has not started. Please start the ftm. ",__func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:Ftm has not started. Please start the ftm. ", __func__); return VOS_STATUS_E_FAILURE; } - pMsgBuf = (tPttMsgbuffer *)vos_mem_malloc(sizeof(tPttMsgbuffer)); - if(pMsgBuf == NULL) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:pMsgBuf is NULL",__func__); - return VOS_STATUS_E_NOMEM; - } + vos_mem_set(pMsgBuf, sizeof(tPttMsgbuffer), 0); init_completion(&pHddCtx->ftm.ftm_comp_var); pMsgBuf->msgId = PTT_MSG_DBG_READ_REGISTER; pMsgBuf->msgBodyLength = sizeof(tMsgPttDbgReadRegister) + PTT_HEADER_LENGTH; @@ -3314,18 +3845,21 @@ static VOS_STATUS wlan_ftm_priv_get_channel(hdd_adapter_t *pAdapter,v_U16_t *pCh status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf,pMsgBuf->msgBodyLength); - if(status != VOS_STATUS_SUCCESS) + if (status != VOS_STATUS_SUCCESS) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:wlan_ftm_postmsg failed",__func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:wlan_ftm_postmsg failed", __func__); status = VOS_STATUS_E_FAILURE; goto done; } - wait_for_completion_interruptible_timeout(&pHddCtx->ftm.ftm_comp_var, msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); + wait_for_completion_interruptible_timeout(&pHddCtx->ftm.ftm_comp_var, + msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); - if(pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) + if (pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Ptt response status failed",__func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:Ptt response status failed", __func__); status = VOS_STATUS_E_FAILURE; goto done; } @@ -3341,11 +3875,10 @@ static VOS_STATUS wlan_ftm_priv_get_channel(hdd_adapter_t *pAdapter,v_U16_t *pCh goto done; } - *pChannel = freq_chan_tbl[indx].chan; + *pChannel = freq_chan_tbl[indx].chan; VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Channel = %d freq = %d\n",*pChannel, freq); done: - vos_mem_free((v_VOID_t * )pMsgBuf); return status; } @@ -3366,22 +3899,17 @@ static VOS_STATUS wlan_ftm_priv_get_channel(hdd_adapter_t *pAdapter,v_U16_t *pCh static VOS_STATUS wlan_ftm_priv_get_txpower(hdd_adapter_t *pAdapter,v_U16_t *pTxPwr) { - tPttMsgbuffer *pMsgBuf; uPttMsgs *pMsgBody; VOS_STATUS status; hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx; - if(pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) + if (pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Ftm has not started. Please start the ftm. ",__func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:Ftm has not started. Please start the ftm. ", __func__); return VOS_STATUS_E_FAILURE; } - pMsgBuf = (tPttMsgbuffer *)vos_mem_malloc(sizeof(tPttMsgbuffer)); - if(pMsgBuf == NULL) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:pMsgBuf is NULL",__func__); - return VOS_STATUS_E_NOMEM; - } + vos_mem_set(pMsgBuf, sizeof(tPttMsgbuffer), 0); init_completion(&pHddCtx->ftm.ftm_comp_var); pMsgBuf->msgId = PTT_MSG_GET_TX_POWER_REPORT; pMsgBuf->msgBodyLength = sizeof(tMsgPttGetTxPowerReport) + PTT_HEADER_LENGTH; @@ -3390,24 +3918,26 @@ static VOS_STATUS wlan_ftm_priv_get_txpower(hdd_adapter_t *pAdapter,v_U16_t *pTx status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf,pMsgBuf->msgBodyLength); - if(status != VOS_STATUS_SUCCESS) + if (status != VOS_STATUS_SUCCESS) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:wlan_ftm_postmsg failed",__func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:wlan_ftm_postmsg failed", __func__); status = VOS_STATUS_E_FAILURE; goto done; } - wait_for_completion_interruptible_timeout(&pHddCtx->ftm.ftm_comp_var, msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); + wait_for_completion_interruptible_timeout(&pHddCtx->ftm.ftm_comp_var, + msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); - if(pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) + if (pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s: PTT_MSG_GET_TX_POWER_REPORT failed",__func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s: PTT_MSG_GET_TX_POWER_REPORT failed", __func__); status = VOS_STATUS_E_FAILURE; goto done; } *pTxPwr = ((((pMsgBody->GetTxPowerReport.pwrTemplateIndex & 0x1F) + 4)*50)/100); done: - vos_mem_free((v_VOID_t * )pMsgBuf); return status; } @@ -3427,7 +3957,6 @@ static VOS_STATUS wlan_ftm_priv_get_txpower(hdd_adapter_t *pAdapter,v_U16_t *pTx VOS_STATUS wlan_ftm_priv_get_ftm_version(hdd_adapter_t *pAdapter,char *pftmVer) { - tPttMsgbuffer *pMsgBuf; uPttMsgs *pMsgBody; VOS_STATUS status; v_U32_t reg_val; @@ -3436,18 +3965,14 @@ VOS_STATUS wlan_ftm_priv_get_ftm_version(hdd_adapter_t *pAdapter,char *pftmVer) int lenRes = 0; int lenBuf = WE_FTM_MAX_STR_LEN; - if(pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) + if (pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Ftm has not started. Please start the ftm. ",__func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:Ftm has not started. Please start the ftm. ", __func__); return VOS_STATUS_E_FAILURE; } - pMsgBuf = (tPttMsgbuffer *)vos_mem_malloc(sizeof(tPttMsgbuffer)); - if(pMsgBuf == NULL) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:pMsgBuf is NULL",__func__); - return VOS_STATUS_E_NOMEM; - } + vos_mem_set(pMsgBuf, sizeof(tPttMsgbuffer), 0); init_completion(&pHddCtx->ftm.ftm_comp_var); pMsgBuf->msgId = PTT_MSG_DBG_READ_REGISTER; pMsgBuf->msgBodyLength = sizeof(tMsgPttDbgReadRegister) + PTT_HEADER_LENGTH; @@ -3457,18 +3982,21 @@ VOS_STATUS wlan_ftm_priv_get_ftm_version(hdd_adapter_t *pAdapter,char *pftmVer) status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf,pMsgBuf->msgBodyLength); - if(status != VOS_STATUS_SUCCESS) + if (status != VOS_STATUS_SUCCESS) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:wlan_ftm_postmsg failed",__func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:wlan_ftm_postmsg failed", __func__); status = VOS_STATUS_E_FAILURE; goto done; } - wait_for_completion_interruptible_timeout(&pHddCtx->ftm.ftm_comp_var, msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); + wait_for_completion_interruptible_timeout(&pHddCtx->ftm.ftm_comp_var, + msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); - if(pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) + if (pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Ptt response status failed",__func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:Ptt response status failed", __func__); status = VOS_STATUS_E_FAILURE; goto done; } @@ -3484,13 +4012,15 @@ VOS_STATUS wlan_ftm_priv_get_ftm_version(hdd_adapter_t *pAdapter,char *pftmVer) status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf,pMsgBuf->msgBodyLength); - if(status != VOS_STATUS_SUCCESS) + if (status != VOS_STATUS_SUCCESS) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:wlan_ftm_postmsg failed",__func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:wlan_ftm_postmsg failed", __func__); status = VOS_STATUS_E_FAILURE; goto done; } - wait_for_completion_interruptible_timeout(&pHddCtx->ftm.ftm_comp_var, msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); + wait_for_completion_interruptible_timeout(&pHddCtx->ftm.ftm_comp_var, + msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); lenRes = snprintf(buf, lenBuf, "%s_",WLAN_CHIP_VERSION); @@ -3504,7 +4034,7 @@ VOS_STATUS wlan_ftm_priv_get_ftm_version(hdd_adapter_t *pAdapter,char *pftmVer) lenBuf -= lenRes; /*Read the RevID*/ - lenRes = snprintf(buf, lenBuf, "%x.%x-",(v_U8_t)(reg_val >> 8), (v_U8_t)(reg_val &0x000000FF)); + lenRes = snprintf(buf, lenBuf, "%x.%x-",(v_U8_t)(reg_val >> 8), (v_U8_t)(reg_val &0x000000FF)); if(lenRes < 0 || lenRes >= lenBuf) { status = VOS_STATUS_E_FAILURE; @@ -3526,7 +4056,6 @@ VOS_STATUS wlan_ftm_priv_get_ftm_version(hdd_adapter_t *pAdapter,char *pftmVer) done: - vos_mem_free((v_VOID_t * )pMsgBuf); return status; @@ -3548,24 +4077,19 @@ done: static VOS_STATUS wlan_ftm_priv_get_txrate(hdd_adapter_t *pAdapter,char *pTxRate) { - tPttMsgbuffer *pMsgBuf; uPttMsgs *pMsgBody; VOS_STATUS status; v_U16_t rate_index,ii; hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx; - if(pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) + if (pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Ftm has not started. Please start the ftm. ",__func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:Ftm has not started. Please start the ftm. ", __func__); return VOS_STATUS_E_FAILURE; } - pMsgBuf = (tPttMsgbuffer *)vos_mem_malloc(sizeof(tPttMsgbuffer)); - if(pMsgBuf == NULL) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:pMsgBuf is NULL",__func__); - return VOS_STATUS_E_NOMEM; - } + vos_mem_set(pMsgBuf, sizeof(tPttMsgbuffer), 0); init_completion(&pHddCtx->ftm.ftm_comp_var); pMsgBuf->msgId = PTT_MSG_GET_TX_POWER_REPORT; pMsgBuf->msgBodyLength = sizeof(tMsgPttGetTxPowerReport) + PTT_HEADER_LENGTH; @@ -3574,22 +4098,25 @@ static VOS_STATUS wlan_ftm_priv_get_txrate(hdd_adapter_t *pAdapter,char *pTxRate status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf,pMsgBuf->msgBodyLength); - if(status != VOS_STATUS_SUCCESS) + if (status != VOS_STATUS_SUCCESS) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:wlan_ftm_postmsg failed",__func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:wlan_ftm_postmsg failed", __func__); status = VOS_STATUS_E_FAILURE; goto done; } - wait_for_completion_interruptible_timeout(&pHddCtx->ftm.ftm_comp_var, msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); + wait_for_completion_interruptible_timeout(&pHddCtx->ftm.ftm_comp_var, + msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); - if(pMsgBuf->msgResponse == PTT_STATUS_SUCCESS) { + if (pMsgBuf->msgResponse == PTT_STATUS_SUCCESS) { rate_index = pMsgBody->GetTxPowerReport.rate; } else { /*Return the default rate*/ //rate_index = HAL_PHY_RATE_11A_6_MBPS; - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s: PTT_MSG_GET_TX_POWER_REPORT failed",__func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s: PTT_MSG_GET_TX_POWER_REPORT failed", __func__); status = VOS_STATUS_E_FAILURE; goto done; } @@ -3606,7 +4133,6 @@ static VOS_STATUS wlan_ftm_priv_get_txrate(hdd_adapter_t *pAdapter,char *pTxRate } strlcpy(pTxRate,rateName_rateIndex_tbl[ii].rate_str, WE_FTM_MAX_STR_LEN); done: - vos_mem_free((v_VOID_t * )pMsgBuf); return status; @@ -3628,22 +4154,17 @@ done: static VOS_STATUS wlan_ftm_priv_get_rx_pkt_count(hdd_adapter_t *pAdapter,v_U16_t *pRxPktCnt) { - tPttMsgbuffer *pMsgBuf; uPttMsgs *pMsgBody; VOS_STATUS status; hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx; - if(pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) + if (pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Ftm has not started. Please start the ftm. ",__func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:Ftm has not started. Please start the ftm. ", __func__); return VOS_STATUS_E_FAILURE; } - pMsgBuf = (tPttMsgbuffer *)vos_mem_malloc(sizeof(tPttMsgbuffer)); - if(pMsgBuf == NULL) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:pMsgBuf is NULL",__func__); - return VOS_STATUS_E_NOMEM; - } + vos_mem_set(pMsgBuf, sizeof(tPttMsgbuffer), 0); init_completion(&pHddCtx->ftm.ftm_comp_var); pMsgBuf->msgId = PTT_MSG_GET_RX_PKT_COUNTS; pMsgBuf->msgBodyLength = sizeof(tMsgPttGetRxPktCounts) + PTT_HEADER_LENGTH; @@ -3652,23 +4173,25 @@ static VOS_STATUS wlan_ftm_priv_get_rx_pkt_count(hdd_adapter_t *pAdapter,v_U16_t status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf,pMsgBuf->msgBodyLength); - if(status != VOS_STATUS_SUCCESS) + if (status != VOS_STATUS_SUCCESS) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:wlan_ftm_postmsg failed",__func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:wlan_ftm_postmsg failed", __func__); status = VOS_STATUS_E_FAILURE; goto done; } - wait_for_completion_interruptible_timeout(&pHddCtx->ftm.ftm_comp_var, msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); + wait_for_completion_interruptible_timeout(&pHddCtx->ftm.ftm_comp_var, + msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); - if(pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) + if (pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Ptt response status failed",__func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:Ptt response status failed", __func__); status = VOS_STATUS_E_FAILURE; goto done; } *pRxPktCnt = pMsgBody->GetRxPktCounts.counters.totalRxPackets; done: - vos_mem_free((v_VOID_t * )pMsgBuf); return status; } @@ -3689,23 +4212,18 @@ done: static VOS_STATUS wlan_ftm_priv_get_rx_rssi(hdd_adapter_t *pAdapter,char *buf) { - tPttMsgbuffer *pMsgBuf; uPttMsgs *pMsgBody; VOS_STATUS status; hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx; int ret; - - if(pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) + + if (pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Ftm has not started. Please start the ftm. ",__func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:Ftm has not started. Please start the ftm. ", __func__); return VOS_STATUS_E_FAILURE; } - pMsgBuf = (tPttMsgbuffer *)vos_mem_malloc(sizeof(tPttMsgbuffer)); - if(pMsgBuf == NULL) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:pMsgBuf is NULL",__func__); - return VOS_STATUS_E_NOMEM; - } + vos_mem_set(pMsgBuf, sizeof(tPttMsgbuffer), 0); init_completion(&pHddCtx->ftm.ftm_comp_var); pMsgBuf->msgId = PTT_MSG_GET_RX_RSSI; pMsgBuf->msgBodyLength = sizeof(tMsgPttGetRxRssi) + PTT_HEADER_LENGTH; @@ -3714,32 +4232,34 @@ static VOS_STATUS wlan_ftm_priv_get_rx_rssi(hdd_adapter_t *pAdapter,char *buf) status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf,pMsgBuf->msgBodyLength); - if(status != VOS_STATUS_SUCCESS) + if (status != VOS_STATUS_SUCCESS) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:wlan_ftm_postmsg failed",__func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:wlan_ftm_postmsg failed", __func__); status = VOS_STATUS_E_FAILURE; goto done; } - wait_for_completion_interruptible_timeout(&pHddCtx->ftm.ftm_comp_var, msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); + wait_for_completion_interruptible_timeout(&pHddCtx->ftm.ftm_comp_var, + msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); - if(pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) + if (pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Ptt response status failed",__func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:Ptt response status failed", __func__); status = VOS_STATUS_E_FAILURE; goto done; } - ret = snprintf(buf, WE_FTM_MAX_STR_LEN, " R0:%d, R1:%d", - pMsgBody->GetRxRssi.rssi.rx[0], + ret = snprintf(buf, WE_FTM_MAX_STR_LEN, " R0:%d, R1:%d", + pMsgBody->GetRxRssi.rssi.rx[0], pMsgBody->GetRxRssi.rssi.rx[1]); if( ret < 0 || ret >= WE_FTM_MAX_STR_LEN ) { status = VOS_STATUS_E_FAILURE; } - + done: - vos_mem_free((v_VOID_t * )pMsgBuf); return status; } @@ -3763,7 +4283,7 @@ static VOS_STATUS wlan_ftm_priv_get_mac_address(hdd_adapter_t *pAdapter,char *bu v_BOOL_t itemIsValid = VOS_FALSE; v_U8_t macAddr[VOS_MAC_ADDRESS_LEN] = {0, 0x0a, 0xf5, 4,5, 6}; int ret; - + hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx; if(pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) @@ -3774,12 +4294,12 @@ static VOS_STATUS wlan_ftm_priv_get_mac_address(hdd_adapter_t *pAdapter,char *bu /*Check the NV FIELD is valid or not*/ if (vos_nv_getValidity(VNV_FIELD_IMAGE, &itemIsValid) == VOS_STATUS_SUCCESS) { - if (itemIsValid == VOS_TRUE) + if (itemIsValid == VOS_TRUE) { vos_nv_readMacAddress(macAddr); - ret = snprintf(buf, WE_FTM_MAX_STR_LEN, - "%02x:%02x:%02x:%02x:%02x:%02x", + ret = snprintf(buf, WE_FTM_MAX_STR_LEN, + "%02x:%02x:%02x:%02x:%02x:%02x", MAC_ADDR_ARRAY(macAddr)); if( ret < 0 || ret >= WE_FTM_MAX_STR_LEN ) { @@ -3787,11 +4307,11 @@ static VOS_STATUS wlan_ftm_priv_get_mac_address(hdd_adapter_t *pAdapter,char *bu } } } - else + else { /*Return Hard coded mac address*/ - ret = snprintf(buf, WE_FTM_MAX_STR_LEN, - "%02x:%02x:%02x:%02x:%02x:%02x", + ret = snprintf(buf, WE_FTM_MAX_STR_LEN, + "%02x:%02x:%02x:%02x:%02x:%02x", MAC_ADDR_ARRAY(macAddr)); if( ret < 0 || ret >= WE_FTM_MAX_STR_LEN ) @@ -3819,7 +4339,6 @@ static VOS_STATUS wlan_ftm_priv_get_mac_address(hdd_adapter_t *pAdapter,char *bu static VOS_STATUS wlan_ftm_priv_set_mac_address(hdd_adapter_t *pAdapter,char *buf) { - tPttMsgbuffer *pMsgBuf; uPttMsgs *pMsgBody; VOS_STATUS status; int macAddr[VOS_MAC_ADDRESS_LEN]; @@ -3827,17 +4346,13 @@ static VOS_STATUS wlan_ftm_priv_set_mac_address(hdd_adapter_t *pAdapter,char *bu v_U8_t ii; hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx; - if(pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) + if (pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Ftm has not started. Please start the ftm. ",__func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:Ftm has not started. Please start the ftm. ", __func__); return VOS_STATUS_E_FAILURE; } - pMsgBuf = (tPttMsgbuffer *)vos_mem_malloc(sizeof(tPttMsgbuffer)); - if(pMsgBuf == NULL) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:pMsgBuf is NULL",__func__); - return VOS_STATUS_E_NOMEM; - } + vos_mem_set(pMsgBuf, sizeof(tPttMsgbuffer), 0); init_completion(&pHddCtx->ftm.ftm_comp_var); pMsgBuf->msgId = PTT_MSG_SET_NV_FIELD; pMsgBuf->msgBodyLength = sizeof(tMsgPttSetNvField) + PTT_HEADER_LENGTH; @@ -3846,12 +4361,17 @@ static VOS_STATUS wlan_ftm_priv_set_mac_address(hdd_adapter_t *pAdapter,char *bu pMsgBody->SetNvField.nvField = NV_COMMON_MAC_ADDR; /*We get the mac address in string format "XX:XX:XX:XX:XX:XX" convert to hex*/ - sscanf(buf,"%02x:%02x:%02x:%02x:%02x:%02x",&macAddr[0],(int*)&macAddr[1],(int*)&macAddr[2],(int*)&macAddr[3],(int*)&macAddr[4],(int*)&macAddr[5]); + if (6 != sscanf(buf,"%02x:%02x:%02x:%02x:%02x:%02x",&macAddr[0],(int*)&macAddr[1],(int*)&macAddr[2],(int*)&macAddr[3],(int*)&macAddr[4],(int*)&macAddr[5])) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "Invalid MacAddress Input %s", buf); + return VOS_STATUS_E_FAILURE; + } VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "MacAddress = %02x:%02x:%02x:%02x:%02x:%02x",MAC_ADDR_ARRAY(macAddr)); - pMacAddress = &pMsgBody->SetNvField.fieldData.macAddr[0]; + pMacAddress = &pMsgBody->SetNvField.fieldData.macAddr.macAddr1[0]; for(ii = 0; ii < VOS_MAC_ADDRESS_LEN; ii++) pMacAddress[ii] = (v_U8_t)macAddr[ii]; @@ -3860,17 +4380,20 @@ static VOS_STATUS wlan_ftm_priv_set_mac_address(hdd_adapter_t *pAdapter,char *bu VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "pMacAddress = %02x:%02x:%02x:%02x:%02x:%02x",MAC_ADDR_ARRAY(pMacAddress)); status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf,pMsgBuf->msgBodyLength); - if(status != VOS_STATUS_SUCCESS) + if (status != VOS_STATUS_SUCCESS) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:wlan_ftm_postmsg failed!!",__func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:wlan_ftm_postmsg failed!!", __func__); status = VOS_STATUS_E_FAILURE; goto done; } - wait_for_completion_interruptible_timeout(&pHddCtx->ftm.ftm_comp_var, msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); + wait_for_completion_interruptible_timeout(&pHddCtx->ftm.ftm_comp_var, + msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); - if(pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) + if (pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Ptt response status failed",__func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:Ptt response status failed", __func__); status = VOS_STATUS_E_FAILURE; goto done; } @@ -3889,16 +4412,17 @@ static VOS_STATUS wlan_ftm_priv_set_mac_address(hdd_adapter_t *pAdapter,char *bu status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf,pMsgBuf->msgBodyLength); - if(status != VOS_STATUS_SUCCESS) + if (status != VOS_STATUS_SUCCESS) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:wlan_ftm_postmsg failed!!!!",__func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:wlan_ftm_postmsg failed!!!!", __func__); status = VOS_STATUS_E_FAILURE; goto done; } - wait_for_completion_interruptible_timeout(&pHddCtx->ftm.ftm_comp_var, msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); + wait_for_completion_interruptible_timeout(&pHddCtx->ftm.ftm_comp_var, + msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); done: - vos_mem_free((v_VOID_t * )pMsgBuf); return VOS_STATUS_SUCCESS; } @@ -3907,26 +4431,44 @@ done: static int iw_ftm_setchar_getnone(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra) { - int sub_cmd = wrqu->data.flags; - int ret = 0; /* success */ + int ret,sub_cmd; + unsigned int length; VOS_STATUS status; - hdd_adapter_t *pAdapter = (netdev_priv(dev)); + hdd_adapter_t *pAdapter; + + ret =0; + length = wrqu->data.length; + sub_cmd = wrqu->data.flags; + pAdapter = (hdd_adapter_t *)netdev_priv(dev); - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "%s: Received length %d", __func__, wrqu->data.length); - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "%s: Received data %s", __func__, (char*)wrqu->data.pointer); + /*we can only accept input falling between 1 and length bytes, + *and ensure extra is null delimited string + */ + if (wrqu->data.length>=512) + return -EINVAL; + vos_mem_zero(extra + length,512 - length); + + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s: Received length %d", __func__, length); + + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s: Received data %s", __func__, extra); switch(sub_cmd) { case WE_SET_MAC_ADDRESS: { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "SET MAC ADDRESS\n"); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "SET MAC ADDRESS\n"); - status = wlan_ftm_priv_set_mac_address(pAdapter,(char*)wrqu->data.pointer); + status = wlan_ftm_priv_set_mac_address(pAdapter,extra); if(status != VOS_STATUS_SUCCESS) { - hddLog(VOS_TRACE_LEVEL_FATAL,"wlan_ftm_priv_set_mac_address Failed =%d\n",status); + hddLog(VOS_TRACE_LEVEL_FATAL, + "wlan_ftm_priv_set_mac_address Failed =%d\n",status); + ret = -EINVAL; } @@ -3934,12 +4476,14 @@ static int iw_ftm_setchar_getnone(struct net_device *dev, struct iw_request_info break; case WE_SET_TX_RATE: { - status = wlan_ftm_priv_set_txrate(pAdapter,(char*)wrqu->data.pointer); + status = wlan_ftm_priv_set_txrate(pAdapter,extra); if(status != VOS_STATUS_SUCCESS) { - hddLog(VOS_TRACE_LEVEL_FATAL,"wlan_ftm_priv_set_txrate Failed =%d\n",status); - ret = -EINVAL; + hddLog(VOS_TRACE_LEVEL_FATAL, + "wlan_ftm_priv_set_txrate Failed =%d\n",status); + + ret = -EINVAL; } break; @@ -4075,6 +4619,40 @@ static int iw_ftm_setint_getnone(struct net_device *dev, struct iw_request_info break; } + case WE_SET_PWR_CNTL_MODE: + { + status = wlan_ftm_priv_set_pwr_cntl_mode(pAdapter, set_value); + if (status != VOS_STATUS_SUCCESS) + { + hddLog(VOS_TRACE_LEVEL_FATAL, "set_pwr_cntl_mode failed = %d", + status); + ret = -EINVAL; + } + break; + } + + case WE_ENABLE_DPD: + { + status = wlan_ftm_priv_enable_dpd(pAdapter, set_value); + if (status != VOS_STATUS_SUCCESS) + { + hddLog(VOS_TRACE_LEVEL_FATAL, "enable_dpd failed = %d", status); + ret = -EINVAL; + } + break; + } + + case WE_SET_CB: + { + status = wlan_ftm_priv_set_cb(pAdapter, set_value); + if (status != VOS_STATUS_SUCCESS) + { + hddLog(VOS_TRACE_LEVEL_FATAL, "set_cb failed = %d", status); + ret = -EINVAL; + } + break; + } + default: { hddLog(LOGE, "Invalid IOCTL setvalue command %d value %d \n", @@ -4388,6 +4966,21 @@ static const struct iw_priv_args we_ftm_private_args[] = { 0, "ena_chain" }, + { WE_SET_PWR_CNTL_MODE, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, + "pwr_cntl_mode" }, + + { WE_ENABLE_DPD, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, + "ena_dpd" }, + + { WE_SET_CB, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, + "set_cb" }, + /* handlers for main ioctl */ { WLAN_FTM_PRIV_SET_NONE_GET_INT, 0, @@ -4488,7 +5081,7 @@ static int wlan_ftm_register_wext(hdd_adapter_t *pAdapter) // Zero the memory. This zeros the profile structure. //memset(pwextBuf, 0,sizeof(hdd_wext_state_t)); - + pAdapter->dev->wireless_handlers = (struct iw_handler_def *)&we_ftm_handler_def; return 0; @@ -4575,6 +5168,7 @@ VOS_STATUS WLANFTM_McProcessMsg (v_VOID_t *message) if (pHddCtx->ftm.cmd_iwpriv == TRUE) { + memcpy((char*)pMsgBuf, (char*)message, pFtmMsgRsp->msgBodyLength); complete(&pHddCtx->ftm.ftm_comp_var); } else { @@ -4585,7 +5179,7 @@ VOS_STATUS WLANFTM_McProcessMsg (v_VOID_t *message) pHddCtx->ftm.wnl->wmsg.length = FTM_SWAP16(pHddCtx->ftm.wnl->wmsg.length); /*Response expects the length to be in */ - pHddCtx->ftm.pResponseBuf->ftm_hdr.data_len = pHddCtx->ftm.pRequestBuf->ftm_hdr.data_len - + pHddCtx->ftm.pResponseBuf->ftm_hdr.data_len = pHddCtx->ftm.pRequestBuf->ftm_hdr.data_len - sizeof(pHddCtx->ftm.pRequestBuf->ftm_hdr.data_len); /*Copy the message*/ diff --git a/CORE/HDD/src/wlan_hdd_hostapd.c b/CORE/HDD/src/wlan_hdd_hostapd.c index 3f2ff86cc49e..9531927aaf3f 100644 --- a/CORE/HDD/src/wlan_hdd_hostapd.c +++ b/CORE/HDD/src/wlan_hdd_hostapd.c @@ -77,12 +77,16 @@ #include "wlan_btc_svc.h" #include #include "wlan_hdd_p2p.h" +#include "cfgApi.h" +#include "wniCfgAp.h" #ifdef QCA_WIFI_2_0 #include "wma.h" #ifdef DEBUG #include "wma_api.h" #endif +extern int process_wma_set_command(int sessid, int paramid, + int sval, int vpdev); #endif /* QCA_WIFI_2_0 */ #define IS_UP(_dev) \ @@ -97,13 +101,8 @@ */ #define WE_SAP_MAX_STA_INFO 0x7FF -struct statsContext -{ - struct completion completion; - hdd_adapter_t *pAdapter; - unsigned int magic; -}; #define SAP_24GHZ_CH_COUNT (14) + /*--------------------------------------------------------------------------- * Function definitions *-------------------------------------------------------------------------*/ @@ -231,7 +230,19 @@ int hdd_hostapd_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) goto exit; } - command = kmalloc(priv_data.total_len, GFP_KERNEL); + if (priv_data.total_len <= 0 || + priv_data.total_len == INT_MAX) + { + /* below we allocate one more byte for command buffer. + * To avoid addition overflow total_len should be + * smaller than INT_MAX. */ + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s: integer out of range\n", __func__); + ret = -EFAULT; + goto exit; + } + + command = kmalloc((priv_data.total_len + 1), GFP_KERNEL); if (!command) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, @@ -246,6 +257,8 @@ int hdd_hostapd_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) goto exit; } + command[priv_data.total_len] = '\0'; + if ((SIOCDEVPRIVATE + 1) == cmd) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, @@ -453,6 +466,15 @@ VOS_STATUS hdd_hostapd_SAPEventCB( tpSap_Event pSapEvent, v_PVOID_t usrDataForCa dev = (struct net_device *)usrDataForCallback; pHostapdAdapter = netdev_priv(dev); + + if ((NULL == pHostapdAdapter) || + (WLAN_HDD_ADAPTER_MAGIC != pHostapdAdapter->magic)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "invalid adapter or adapter has invalid magic"); + return eHAL_STATUS_FAILURE; + } + pHostapdState = WLAN_HDD_GET_HOSTAP_STATE_PTR(pHostapdAdapter); pHddApCtx = WLAN_HDD_GET_AP_CTX_PTR(pHostapdAdapter); sapEvent = pSapEvent->sapHddEventCode; @@ -839,6 +861,20 @@ stopbss : * we don't want interfaces to become re-enabled */ pHostapdState->bssState = BSS_STOP; + if (0 != (WLAN_HDD_GET_CTX(pHostapdAdapter))->cfg_ini->nAPAutoShutOff) + { + if (VOS_TIMER_STATE_RUNNING == pHddApCtx->hdd_ap_inactivity_timer.state) + { + vos_status = vos_timer_stop(&pHddApCtx->hdd_ap_inactivity_timer); + if (!VOS_IS_STATUS_SUCCESS(vos_status)) + hddLog(LOGE, FL("Failed to stop AP inactivity timer")); + } + + vos_status = vos_timer_destroy(&pHddApCtx->hdd_ap_inactivity_timer); + if (!VOS_IS_STATUS_SUCCESS(vos_status)) + hddLog(LOGE, FL("Failed to Destroy AP inactivity timer")); + } + /* Stop the pkts from n/w stack as we are going to free all of * the TX WMM queues for all STAID's */ hdd_hostapd_stop(dev); @@ -961,6 +997,7 @@ int hdd_softap_unpackIE( } return VOS_STATUS_SUCCESS; } + int static iw_softap_setparam(struct net_device *dev, struct iw_request_info *info, @@ -1325,6 +1362,7 @@ static iw_softap_set_max_tx_power(struct net_device *dev, if (NULL == value) return -ENOMEM; + /* Assign correct slef MAC address */ vos_mem_copy(bssid, pHostapdAdapter->macAddressCurrent.bytes, VOS_MAC_ADDR_SIZE); vos_mem_copy(selfMac, pHostapdAdapter->macAddressCurrent.bytes, @@ -1341,6 +1379,24 @@ static iw_softap_set_max_tx_power(struct net_device *dev, return 0; } +int +static iw_display_data_path_snapshot(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + + /* Function intitiating dumping states of + * HDD(WMM Tx Queues) + * TL State (with Per Client infor) + * DXE Snapshot (Called at the end of TL Snapshot) + */ + hdd_adapter_t *pHostapdAdapter = (netdev_priv(dev)); + hddLog(LOGE, "%s: called for SAP",__func__); + hdd_wmm_tx_snapshot(pHostapdAdapter); + WLANTL_TLDebugMessage(VOS_TRUE); + return 0; +} + int static iw_softap_set_tx_power(struct net_device *dev, struct iw_request_info *info, @@ -1375,6 +1431,78 @@ static iw_softap_set_tx_power(struct net_device *dev, return 0; } +/**--------------------------------------------------------------------------- + + \brief iw_softap_set_trafficmonitor() - + This function dynamically enable/disable traffic monitor functonality + the command iwpriv wlanX setTrafficMon . + + \param - dev - Pointer to the net device. + - addr - Pointer to the sockaddr. + \return - 0 for success, non zero for failure + + --------------------------------------------------------------------------*/ + +static int iw_softap_set_trafficmonitor(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + int *isSetTrafficMon = (int *)wrqu->data.pointer; + hdd_context_t *pHddCtx; + int status; + + if (NULL == pAdapter) + { + VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR, + "%s: HDD adapter is Null", __func__); + return -ENODEV; + } + + pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + + status = wlan_hdd_validate_context(pHddCtx); + + if (0 != status) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: HDD context is not valid", __func__); + return status; + } + + hddLog(VOS_TRACE_LEVEL_INFO, "%s : ", __func__); + + if (NULL == isSetTrafficMon) + { + VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR, + "%s: Invalid SAP pointer from extra", __func__); + return -ENOMEM; + } + + if (TRUE == *isSetTrafficMon) + { + pHddCtx->cfg_ini->enableTrafficMonitor= TRUE; + if (VOS_STATUS_SUCCESS != hdd_start_trafficMonitor(pAdapter)) + { + VOS_TRACE( VOS_MODULE_ID_HDD_SOFTAP, VOS_TRACE_LEVEL_ERROR, + "%s: failed to Start Traffic Monitor timer ", __func__ ); + return -EIO; + } + } + else if (FALSE == *isSetTrafficMon) + { + pHddCtx->cfg_ini->enableTrafficMonitor= FALSE; + if (VOS_STATUS_SUCCESS != hdd_stop_trafficMonitor(pAdapter)) + { + VOS_TRACE( VOS_MODULE_ID_HDD_SOFTAP, VOS_TRACE_LEVEL_ERROR, + "%s: failed to Stop Traffic Monitor timer ", __func__ ); + return -EIO; + } + + } + return 0; +} + #define IS_BROADCAST_MAC(x) (((x[0] & x[1] & x[2] & x[3] & x[4] & x[5]) == 0xff) ? 1 : 0) int @@ -1383,12 +1511,13 @@ static iw_softap_getassoc_stamacaddr(struct net_device *dev, union iwreq_data *wrqu, char *extra) { hdd_adapter_t *pHostapdAdapter = (netdev_priv(dev)); - unsigned char *pmaclist; + unsigned int maclist_index; hdd_station_info_t *pStaInfo = pHostapdAdapter->aStaInfo; + char maclist_null = '\0'; int cnt = 0, len; - pmaclist = wrqu->data.pointer + sizeof(unsigned long int); + maclist_index = sizeof(unsigned long int); len = wrqu->data.length; spin_lock_bh( &pHostapdAdapter->staInfo_lock ); @@ -1396,8 +1525,13 @@ static iw_softap_getassoc_stamacaddr(struct net_device *dev, if (TRUE == pStaInfo[cnt].isUsed) { if(!IS_BROADCAST_MAC(pStaInfo[cnt].macAddrSTA.bytes)) { - memcpy((void *)pmaclist, (void *)&(pStaInfo[cnt].macAddrSTA), sizeof(v_MACADDR_t)); - pmaclist += sizeof(v_MACADDR_t); + if (copy_to_user((void *)wrqu->data.pointer + maclist_index, + (void *)&(pStaInfo[cnt].macAddrSTA), sizeof(v_MACADDR_t))) + { + hddLog(LOG1, "%s: failed to copy data to user buffer", __func__); + return -EFAULT; + } + maclist_index += sizeof(v_MACADDR_t); len -= sizeof(v_MACADDR_t); } } @@ -1405,8 +1539,14 @@ static iw_softap_getassoc_stamacaddr(struct net_device *dev, } spin_unlock_bh( &pHostapdAdapter->staInfo_lock ); - *pmaclist = '\0'; - + if (copy_to_user((void *)wrqu->data.pointer + maclist_index, + (void *)&maclist_null, sizeof(maclist_null)) || + copy_to_user((void *)wrqu->data.pointer, + (void *)&wrqu->data.length, sizeof(wrqu->data.length))) + { + hddLog(LOG1, "%s: failed to copy data to user buffer", __func__); + return -EFAULT; + } wrqu->data.length -= len; *(unsigned long int *)(wrqu->data.pointer) = wrqu->data.length; @@ -1460,20 +1600,35 @@ static iw_softap_ap_stats(struct net_device *dev, int len = wrqu->data.length; pstatbuf = wrqu->data.pointer; - WLANSAP_GetStatistics((WLAN_HDD_GET_CTX(pHostapdAdapter))->pvosContext, &statBuffer, (v_BOOL_t)wrqu->data.flags); - - len = snprintf(pstatbuf, len, - "RUF=%d RMF=%d RBF=%d " - "RUB=%d RMB=%d RBB=%d " - "TUF=%d TMF=%d TBF=%d " - "TUB=%d TMB=%d TBB=%d", - (int)statBuffer.rxUCFcnt, (int)statBuffer.rxMCFcnt, (int)statBuffer.rxBCFcnt, - (int)statBuffer.rxUCBcnt, (int)statBuffer.rxMCBcnt, (int)statBuffer.rxBCBcnt, - (int)statBuffer.txUCFcnt, (int)statBuffer.txMCFcnt, (int)statBuffer.txBCFcnt, - (int)statBuffer.txUCBcnt, (int)statBuffer.txMCBcnt, (int)statBuffer.txBCBcnt - ); + WLANSAP_GetStatistics((WLAN_HDD_GET_CTX(pHostapdAdapter))->pvosContext, + &statBuffer, (v_BOOL_t)wrqu->data.flags); + pstatbuf = kmalloc(wrqu->data.length, GFP_KERNEL); + if(NULL == pstatbuf) { + hddLog(LOG1, "unable to allocate memory"); + return -ENOMEM; + } + len = scnprintf(pstatbuf, wrqu->data.length, + "RUF=%d RMF=%d RBF=%d " + "RUB=%d RMB=%d RBB=%d " + "TUF=%d TMF=%d TBF=%d " + "TUB=%d TMB=%d TBB=%d", + (int)statBuffer.rxUCFcnt, (int)statBuffer.rxMCFcnt, + (int)statBuffer.rxBCFcnt, (int)statBuffer.rxUCBcnt, + (int)statBuffer.rxMCBcnt, (int)statBuffer.rxBCBcnt, + (int)statBuffer.txUCFcnt, (int)statBuffer.txMCFcnt, + (int)statBuffer.txBCFcnt, (int)statBuffer.txUCBcnt, + (int)statBuffer.txMCBcnt, (int)statBuffer.txBCBcnt); + + if (len > wrqu->data.length || + copy_to_user((void *)wrqu->data.pointer, (void *)pstatbuf, len)) + { + hddLog(LOG1, "%s: failed to copy data to user buffer", __func__); + kfree(pstatbuf); + return -EFAULT; + } wrqu->data.length -= len; + kfree(pstatbuf); return 0; } @@ -1600,8 +1755,8 @@ static iw_softap_commit(struct net_device *dev, // ht_capab is not what the name conveys,this is used for protection bitmap pConfig->ht_capab = (WLAN_HDD_GET_CTX(pHostapdAdapter))->cfg_ini->apProtection; - if (pCommitConfig->num_accept_mac > MAX_MAC_ADDRESS_ACCEPTED) - num_mac = pConfig->num_accept_mac = MAX_MAC_ADDRESS_ACCEPTED; + if (pCommitConfig->num_accept_mac > MAX_ACL_MAC_ADDRESS) + num_mac = pConfig->num_accept_mac = MAX_ACL_MAC_ADDRESS; else num_mac = pConfig->num_accept_mac = pCommitConfig->num_accept_mac; acl_entry = pCommitConfig->accept_mac; @@ -1610,8 +1765,8 @@ static iw_softap_commit(struct net_device *dev, vos_mem_copy(&pConfig->accept_mac[i], acl_entry->addr, sizeof(v_MACADDR_t)); acl_entry++; } - if (pCommitConfig->num_deny_mac > MAX_MAC_ADDRESS_DENIED) - num_mac = pConfig->num_deny_mac = MAX_MAC_ADDRESS_DENIED; + if (pCommitConfig->num_deny_mac > MAX_ACL_MAC_ADDRESS) + num_mac = pConfig->num_deny_mac = MAX_ACL_MAC_ADDRESS; else num_mac = pConfig->num_deny_mac = pCommitConfig->num_deny_mac; acl_entry = pCommitConfig->deny_mac; @@ -1742,7 +1897,6 @@ int iw_softap_get_channel_list(struct net_device *dev, v_U8_t bandEndChannel = RF_CHAN_165; v_U32_t temp_num_channels = 0; hdd_adapter_t *pHostapdAdapter = (netdev_priv(dev)); - hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pHostapdAdapter); tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(pHostapdAdapter); v_REGDOMAIN_t domainIdCurrentSoftap; tpChannelListInfo channel_list = (tpChannelListInfo) extra; @@ -1767,8 +1921,8 @@ int iw_softap_get_channel_list(struct net_device *dev, bandEndChannel = RF_CHAN_165; } - hddLog(LOG1, FL("\n nBandCapability = %d, bandStartChannel = %hu, " - "bandEndChannel = %hu \n"), pHddCtx->cfg_ini->nBandCapability, + hddLog(LOG1, FL("\n curBand = %d, bandStartChannel = %hu, " + "bandEndChannel = %hu "), curBand, bandStartChannel, bandEndChannel ); for( i = bandStartChannel; i <= bandEndChannel; i++ ) @@ -1837,9 +1991,16 @@ int iw_get_genie(struct net_device *dev, status = WLANSap_getstationIE_information(pVosContext, &length, genIeBytes); - wrqu->data.length = VOS_MIN((u_int16_t) length, DOT11F_IE_RSN_MAX_LEN); - vos_mem_copy( wrqu->data.pointer, (v_VOID_t*)genIeBytes, wrqu->data.length); - + length = VOS_MIN((u_int16_t) length, DOT11F_IE_RSN_MAX_LEN); + if (wrqu->data.length < length || + copy_to_user(wrqu->data.pointer, + (v_VOID_t*)genIeBytes, length)) + { + hddLog(LOG1, "%s: failed to copy data to user buffer", __func__); + return -EFAULT; + } + wrqu->data.length = length; + hddLog(LOG1,FL(" RSN IE of %d bytes returned\n"), wrqu->data.length ); @@ -1852,18 +2013,30 @@ int iw_get_WPSPBCProbeReqIEs(struct net_device *dev, union iwreq_data *wrqu, char *extra) { hdd_adapter_t *pHostapdAdapter = (netdev_priv(dev)); - sQcSapreq_WPSPBCProbeReqIES_t *pWPSPBCProbeReqIEs; + sQcSapreq_WPSPBCProbeReqIES_t WPSPBCProbeReqIEs; hdd_ap_ctx_t *pHddApCtx = WLAN_HDD_GET_AP_CTX_PTR(pHostapdAdapter); ENTER(); hddLog(LOG1,FL("get_WPSPBCProbeReqIEs ioctl\n")); - - pWPSPBCProbeReqIEs = (sQcSapreq_WPSPBCProbeReqIES_t *)(wrqu->data.pointer); - pWPSPBCProbeReqIEs->probeReqIELen = pHddApCtx->WPSPBCProbeReq.probeReqIELen; - vos_mem_copy(pWPSPBCProbeReqIEs->probeReqIE, pHddApCtx->WPSPBCProbeReq.probeReqIE, pWPSPBCProbeReqIEs->probeReqIELen); - vos_mem_copy(pWPSPBCProbeReqIEs->macaddr, pHddApCtx->WPSPBCProbeReq.peerMacAddr, sizeof(v_MACADDR_t)); - wrqu->data.length = 12 + pWPSPBCProbeReqIEs->probeReqIELen; - hddLog(LOG1, FL("Macaddress : "MAC_ADDRESS_STR"\n"), MAC_ADDR_ARRAY(pWPSPBCProbeReqIEs->macaddr)); + memset((void*)&WPSPBCProbeReqIEs, 0, sizeof(WPSPBCProbeReqIEs)); + + WPSPBCProbeReqIEs.probeReqIELen = pHddApCtx->WPSPBCProbeReq.probeReqIELen; + vos_mem_copy(&WPSPBCProbeReqIEs.probeReqIE, + pHddApCtx->WPSPBCProbeReq.probeReqIE, + WPSPBCProbeReqIEs.probeReqIELen); + vos_mem_copy(&WPSPBCProbeReqIEs.macaddr, + pHddApCtx->WPSPBCProbeReq.peerMacAddr, + sizeof(v_MACADDR_t)); + if (copy_to_user(wrqu->data.pointer, + (void *)&WPSPBCProbeReqIEs, + sizeof(WPSPBCProbeReqIEs))) + { + hddLog(LOG1, "%s: failed to copy data to user buffer", __func__); + return -EFAULT; + } + wrqu->data.length = 12 + WPSPBCProbeReqIEs.probeReqIELen; + hddLog(LOG1, FL("Macaddress : "MAC_ADDRESS_STR"\n"), + MAC_ADDR_ARRAY(WPSPBCProbeReqIEs.macaddr)); up(&pHddApCtx->semWpsPBCOverlapInd); EXIT(); return 0; @@ -2228,6 +2401,18 @@ static int iw_get_ap_freq(struct net_device *dev, struct iw_request_info *info, return 0; } +static int iw_get_mode(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, + char *extra) +{ + int status = 0; + + wrqu->mode = IW_MODE_MASTER; + + return status; +} + static int iw_softap_setwpsie(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, @@ -2237,20 +2422,37 @@ static int iw_softap_setwpsie(struct net_device *dev, v_CONTEXT_t pVosContext = (WLAN_HDD_GET_CTX(pHostapdAdapter))->pvosContext; hdd_hostapd_state_t *pHostapdState; eHalStatus halStatus= eHAL_STATUS_SUCCESS; - u_int8_t *wps_genie = wrqu->data.pointer; + u_int8_t *wps_genie; + u_int8_t *fwps_genie; u_int8_t *pos; tpSap_WPSIE pSap_WPSIe; u_int8_t WPSIeType; u_int16_t length; ENTER(); - if(!wrqu->data.length) + if(!wrqu->data.length || wrqu->data.length <= QCSAP_MAX_WSC_IE) return 0; + wps_genie = kmalloc(wrqu->data.length, GFP_KERNEL); + + if(NULL == wps_genie) { + hddLog(LOG1, "unable to allocate memory"); + return -ENOMEM; + } + fwps_genie = wps_genie; + if (copy_from_user((void *)wps_genie, + wrqu->data.pointer, wrqu->data.length)) + { + hddLog(LOG1, "%s: failed to copy data to user buffer", __func__); + kfree(fwps_genie); + return -EFAULT; + } + pSap_WPSIe = vos_mem_malloc(sizeof(tSap_WPSIE)); if (NULL == pSap_WPSIe) { hddLog(LOGE, "VOS unable to allocate memory\n"); + kfree(fwps_genie); return -ENOMEM; } vos_mem_zero(pSap_WPSIe, sizeof(tSap_WPSIE)); @@ -2267,6 +2469,7 @@ static int iw_softap_setwpsie(struct net_device *dev, if (wps_genie[1] < 2 + 4) { vos_mem_free(pSap_WPSIe); + kfree(fwps_genie); return -EINVAL; } else if (memcmp(&wps_genie[2], "\x00\x50\xf2\x04", 4) == 0) @@ -2340,6 +2543,7 @@ static int iw_softap_setwpsie(struct net_device *dev, default: hddLog (LOGW, "UNKNOWN TLV in WPS IE(%x)\n", (*pos<<8 | *(pos+1))); vos_mem_free(pSap_WPSIe); + kfree(fwps_genie); return -EINVAL; } } @@ -2353,6 +2557,7 @@ static int iw_softap_setwpsie(struct net_device *dev, default: hddLog (LOGE, "%s Set UNKNOWN IE %X",__func__, wps_genie[0]); vos_mem_free(pSap_WPSIe); + kfree(fwps_genie); return 0; } } @@ -2366,6 +2571,7 @@ static int iw_softap_setwpsie(struct net_device *dev, if (wps_genie[1] < 2 + 4) { vos_mem_free(pSap_WPSIe); + kfree(fwps_genie); return -EINVAL; } else if (memcmp(&wps_genie[2], "\x00\x50\xf2\x04", 4) == 0) @@ -2530,6 +2736,7 @@ static int iw_softap_setwpsie(struct net_device *dev, } vos_mem_free(pSap_WPSIe); + kfree(fwps_genie); EXIT(); return halStatus; } @@ -2582,7 +2789,7 @@ VOS_STATUS hdd_softap_get_sta_info(hdd_adapter_t *pAdapter, v_U8_t *pBuf, int bu int len = 0; const char sta_info_header[] = "staId staAddress\n"; - len = snprintf(pBuf, buf_len, sta_info_header); + len = scnprintf(pBuf, buf_len, sta_info_header); pBuf += len; buf_len -= len; @@ -2590,8 +2797,7 @@ VOS_STATUS hdd_softap_get_sta_info(hdd_adapter_t *pAdapter, v_U8_t *pBuf, int bu { if(pAdapter->aStaInfo[i].isUsed) { - len = snprintf(pBuf, buf_len, "%*d .%02x:%02x:%02x:%02x:%02x:%02x\n", - strlen("staId"), + len = scnprintf(pBuf, buf_len, "%5d .%02x:%02x:%02x:%02x:%02x:%02x\n", pAdapter->aStaInfo[i].ucSTAId, pAdapter->aStaInfo[i].macAddrSTA.bytes[0], pAdapter->aStaInfo[i].macAddrSTA.bytes[1], @@ -2637,8 +2843,8 @@ static int iw_set_ap_genie(struct net_device *dev, hdd_adapter_t *pHostapdAdapter = (netdev_priv(dev)); v_CONTEXT_t pVosContext = (WLAN_HDD_GET_CTX(pHostapdAdapter))->pvosContext; eHalStatus halStatus= eHAL_STATUS_SUCCESS; - u_int8_t *genie = wrqu->data.pointer; - + u_int8_t *genie = (u_int8_t *)extra; + ENTER(); if(!wrqu->data.length) @@ -2646,7 +2852,7 @@ static int iw_set_ap_genie(struct net_device *dev, EXIT(); return 0; } - + switch (genie[0]) { case DOT11F_EID_WPA: @@ -2657,7 +2863,7 @@ static int iw_set_ap_genie(struct net_device *dev, hdd_softap_Register_BC_STA(pHostapdAdapter, 1); } (WLAN_HDD_GET_AP_CTX_PTR(pHostapdAdapter))->uPrivacy = 1; - halStatus = WLANSAP_Set_WPARSNIes(pVosContext, wrqu->data.pointer, wrqu->data.length); + halStatus = WLANSAP_Set_WPARSNIes(pVosContext, genie, wrqu->data.length); break; default: @@ -2721,46 +2927,104 @@ int iw_get_softap_linkspeed(struct net_device *dev, { hdd_adapter_t *pHostapdAdapter = (netdev_priv(dev)); + hdd_context_t *pHddCtx; char *pLinkSpeed = (char*)extra; - v_U16_t link_speed; + char *pmacAddress; + v_U32_t link_speed = 0; unsigned short staId; - int len = sizeof(v_U16_t)+1; + int len = sizeof(v_U32_t)+1; v_BYTE_t macAddress[VOS_MAC_ADDR_SIZE]; VOS_STATUS status; - int rc; + int rc, valid; + + pHddCtx = WLAN_HDD_GET_CTX(pHostapdAdapter); - if ( hdd_string_to_hex ((char *)wrqu->data.pointer, wrqu->data.length, macAddress ) ) + valid = wlan_hdd_validate_context(pHddCtx); + + if (0 != valid) { - hddLog(VOS_TRACE_LEVEL_FATAL, "ERROR: Command not found"); - return -EINVAL; + hddLog(VOS_TRACE_LEVEL_ERROR, FL("HDD context not valid")); + return valid; } - status = hdd_softap_GetStaId(pHostapdAdapter, (v_MACADDR_t *)macAddress, (void *)(&staId)); + hddLog(VOS_TRACE_LEVEL_INFO, "%s wrqu->data.length= %d\n", __func__, wrqu->data.length); + if (wrqu->data.length != MAC_ADDRESS_STR_LEN) + { + hddLog(LOG1, "Invalid length"); + return -EINVAL; + } + pmacAddress = kmalloc(MAC_ADDRESS_STR_LEN, GFP_KERNEL); + if(NULL == pmacAddress) { + hddLog(LOG1, "unable to allocate memory"); + return -ENOMEM; + } + if (copy_from_user((void *)pmacAddress, + wrqu->data.pointer, wrqu->data.length)) + { + hddLog(LOG1, "%s: failed to copy data to user buffer", __func__); + kfree(pmacAddress); + return -EFAULT; + } + + status = hdd_string_to_hex (pmacAddress, wrqu->data.length, macAddress ); + kfree(pmacAddress); if (!VOS_IS_STATUS_SUCCESS(status )) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, FL("ERROR: HDD Failed to find sta id!!")); + hddLog(VOS_TRACE_LEVEL_ERROR, FL("String to Hex conversion Failed")); + } + + /* If no mac address is passed and/or its length is less than 17, + * link speed for first connected client will be returned. + */ + if (!VOS_IS_STATUS_SUCCESS(status ) || wrqu->data.length < 17) + { + status = hdd_softap_GetConnectedStaId(pHostapdAdapter, (void *)(&staId)); + } + else + { + status = hdd_softap_GetStaId(pHostapdAdapter, + (v_MACADDR_t *)macAddress, (void *)(&staId)); + } + + if (!VOS_IS_STATUS_SUCCESS(status)) + { + hddLog(VOS_TRACE_LEVEL_ERROR, FL("ERROR: HDD Failed to find sta id!!")); link_speed = 0; } else { status = wlan_hdd_get_classAstats_for_station(pHostapdAdapter , staId); + if (!VOS_IS_STATUS_SUCCESS(status )) { - hddLog(VOS_TRACE_LEVEL_ERROR, "%s: Unable to retrieve SME statistics", __func__); + hddLog(VOS_TRACE_LEVEL_ERROR, FL("Unable to retrieve SME statistics")); return -EINVAL; } - link_speed =(int)pHostapdAdapter->hdd_stats.ClassA_stat.tx_rate/2; + + WLANTL_GetSTALinkCapacity(pHddCtx->pvosContext, + staId, &link_speed); + + link_speed = link_speed / 10; + + if (0 == link_speed) + { + /* The linkspeed returned by HAL is in units of 500kbps. + * converting it to mbps. + * This is required to support legacy firmware which does + * not return link capacity. + */ + link_speed =(int)pHostapdAdapter->hdd_stats.ClassA_stat.tx_rate/2; + } } wrqu->data.length = len; rc = snprintf(pLinkSpeed, len, "%u", link_speed); + if ((rc < 0) || (rc >= len)) { // encoding or length error? - hddLog(VOS_TRACE_LEVEL_ERROR, - "%s: Unable to encode link speed, got [%s]", - __func__, pLinkSpeed); + hddLog(VOS_TRACE_LEVEL_ERROR,FL( "Unable to encode link speed")); return -EIO; } @@ -2776,7 +3040,7 @@ static const iw_handler hostapd_handler[] = (iw_handler) NULL, /* SIOCSIWFREQ */ (iw_handler) iw_get_ap_freq, /* SIOCGIWFREQ */ (iw_handler) NULL, /* SIOCSIWMODE */ - (iw_handler) NULL, /* SIOCGIWMODE */ + (iw_handler) iw_get_mode, /* SIOCGIWMODE */ (iw_handler) NULL, /* SIOCSIWSENS */ (iw_handler) NULL, /* SIOCGIWSENS */ (iw_handler) NULL, /* SIOCSIWRANGE */ @@ -2922,7 +3186,7 @@ static const struct iw_priv_args hostapd_private_args[] = { { QCSAP_IOCTL_GET_STA_INFO, 0, IW_PRIV_TYPE_CHAR | WE_SAP_MAX_STA_INFO, "get_sta_info" }, { QCSAP_IOCTL_GET_WPS_PBC_PROBE_REQ_IES, - IW_PRIV_TYPE_BYTE | sizeof(sQcSapreq_WPSPBCProbeReqIES_t) | IW_PRIV_SIZE_FIXED | 1, 0, "getProbeReqIEs" }, + IW_PRIV_TYPE_BYTE | sizeof(sQcSapreq_WPSPBCProbeReqIES_t) | IW_PRIV_SIZE_FIXED, 0, "getProbeReqIEs" }, { QCSAP_IOCTL_GET_CHANNEL, 0, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "getchannel" }, { QCSAP_IOCTL_ASSOC_STA_MACADDR, 0, @@ -2933,7 +3197,7 @@ static const struct iw_priv_args hostapd_private_args[] = { IW_PRIV_TYPE_BYTE | QCSAP_MAX_WSC_IE, 0, "ap_stats" }, { QCSAP_IOCTL_PRIV_GET_SOFTAP_LINK_SPEED, IW_PRIV_TYPE_CHAR | 18, - IW_PRIV_TYPE_CHAR | 3, "getLinkSpeed" }, + IW_PRIV_TYPE_CHAR | 5, "getLinkSpeed" }, { QCSAP_IOCTL_PRIV_SET_THREE_INT_GET_NONE, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 3, 0, "" }, @@ -2995,6 +3259,17 @@ static const struct iw_priv_args hostapd_private_args[] = { IW_PRIV_TYPE_INT| IW_PRIV_SIZE_FIXED | 1, 0, "setTxMaxPower" }, + + { QCSAP_IOCTL_DATAPATH_SNAP_SHOT, + IW_PRIV_TYPE_NONE | IW_PRIV_TYPE_NONE, + 0, + "dataSnapshot" }, + + /* handlers for main ioctl */ + { QCSAP_IOCTL_SET_TRAFFIC_MONITOR, + IW_PRIV_TYPE_INT| IW_PRIV_SIZE_FIXED | 1, + 0, + "setTrafficMon" }, }; static const iw_handler hostapd_private[] = { @@ -3020,6 +3295,8 @@ static const iw_handler hostapd_private[] = { [QCSAP_IOCTL_PRIV_GET_SOFTAP_LINK_SPEED - SIOCIWFIRSTPRIV] = iw_get_softap_linkspeed, [QCSAP_IOCTL_SET_TX_POWER - SIOCIWFIRSTPRIV] = iw_softap_set_tx_power, [QCSAP_IOCTL_SET_MAX_TX_POWER - SIOCIWFIRSTPRIV] = iw_softap_set_max_tx_power, + [QCSAP_IOCTL_DATAPATH_SNAP_SHOT - SIOCIWFIRSTPRIV] = iw_display_data_path_snapshot, + [QCSAP_IOCTL_SET_TRAFFIC_MONITOR - SIOCIWFIRSTPRIV] = iw_softap_set_trafficmonitor, }; const struct iw_handler_def hostapd_handler_def = { .num_standard = sizeof(hostapd_handler) / sizeof(hostapd_handler[0]), @@ -3070,11 +3347,14 @@ VOS_STATUS hdd_init_ap_mode( hdd_adapter_t *pAdapter ) { hdd_hostapd_state_t * phostapdBuf; struct net_device *dev = pAdapter->dev; + hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); VOS_STATUS status; ENTER(); // Allocate the Wireless Extensions state structure phostapdBuf = WLAN_HDD_GET_HOSTAP_STATE_PTR( pAdapter ); + sme_SetCurrDeviceMode(pHddCtx->hHal, pAdapter->device_mode); + // Zero the memory. This zeros the profile structure. memset(phostapdBuf, 0,sizeof(hdd_hostapd_state_t)); @@ -3107,8 +3387,24 @@ VOS_STATUS hdd_init_ap_mode( hdd_adapter_t *pAdapter ) { hddLog(VOS_TRACE_LEVEL_FATAL, "%s: hdd_softap_init_tx_rx failed", __func__); } - + + status = hdd_wmm_adapter_init( pAdapter ); + if (!VOS_IS_STATUS_SUCCESS(status)) + { + hddLog(VOS_TRACE_LEVEL_ERROR, + "hdd_wmm_adapter_init() failed with status code %08d [x%08lx]", + status, status ); + goto error_wmm_init; + } + + set_bit(WMM_INIT_DONE, &pAdapter->event_flags); + wlan_hdd_set_monitor_tx_adapter( WLAN_HDD_GET_CTX(pAdapter), pAdapter ); + + return status; + +error_wmm_init: + hdd_softap_deinit_tx_rx( pAdapter ); EXIT(); return status; } @@ -3144,7 +3440,6 @@ hdd_adapter_t* hdd_wlan_create_ap_dev( hdd_context_t *pHddCtx, tSirMacAddr macAd hdd_set_ap_ops( pHostapdAdapter->dev ); - pWlanHostapdDev->tx_queue_len = NET_DEV_TX_QUEUE_LEN; pWlanHostapdDev->watchdog_timeo = HDD_TX_TIMEOUT; pWlanHostapdDev->mtu = HDD_DEFAULT_MTU; diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c index 031019a5e601..87fe454bf264 100644 --- a/CORE/HDD/src/wlan_hdd_main.c +++ b/CORE/HDD/src/wlan_hdd_main.c @@ -90,6 +90,7 @@ int wlan_hdd_ftm_start(hdd_context_t *pAdapter); #include "sapApi.h" #include +#include #ifdef MSM_PLATFORM #include #endif @@ -106,6 +107,7 @@ int wlan_hdd_ftm_start(hdd_context_t *pAdapter); #ifdef FEATURE_WLAN_TDLS #include "wlan_hdd_tdls.h" #endif +#include "wlan_hdd_debugfs.h" #if defined(QCA_WIFI_2_0) && !defined(QCA_WIFI_ISOC) #include "if_pci.h" @@ -136,6 +138,11 @@ static struct kparam_string fwpath = { .string = fwpath_buffer, .maxlen = BUF_LEN, }; + +static char *country_code; +static int enable_11d = -1; +static int enable_dfs_chan_scan = -1; + #ifndef MODULE static int wlan_hdd_inited; #endif @@ -147,6 +154,55 @@ static int wlan_hdd_inited; */ #define WLAN_HDD_RESTART_RETRY_DELAY_MS 5000 /* 5 second */ #define WLAN_HDD_RESTART_RETRY_MAX_CNT 5 /* 5 retries */ + +/* + * Size of Driver command strings from upper layer + */ +#define SIZE_OF_SETROAMMODE 11 /* size of SETROAMMODE */ +#define SIZE_OF_GETROAMMODE 11 /* size of GETROAMMODE */ + +#ifdef FEATURE_CESIUM_PROPRIETARY +/* + * Ibss prop IE from command will be of size 5 + 1(Element ID) + 1(length) + */ +#define WLAN_HDD_IBSS_PROP_IE_SIZE 7 +#define WLAN_HDD_IBSS_PROP_VENDOR_ID 0xDD +#define WLAN_HDD_IBSS_PROP_OUI_DATA_LEN 0x05 +static tANI_U8 ibssPropIe[3] = {0x00,0x16,0x32}; +#endif + +#if defined(FEATURE_WLAN_CCX) && defined(FEATURE_WLAN_CCX_UPLOAD) +#define TID_MIN_VALUE 0 +#define TID_MAX_VALUE 15 +static VOS_STATUS hdd_get_tsm_stats(hdd_adapter_t *pAdapter, + const tANI_U8 tid, + tAniTrafStrmMetrics* pTsmMetrics); +static VOS_STATUS hdd_parse_ccx_beacon_req(tANI_U8 *pValue, + tCsrCcxBeaconReq *pCcxBcnReq); +#endif /* FEATURE_WLAN_CCX && FEATURE_WLAN_CCX_UPLOAD */ + +/* + * Maximum buffer size used for returning the data back to user space + */ +#define WLAN_MAX_BUF_SIZE 1024 + +/* + * Driver miracast parameters 0-Disabled + * 1-Source, 2-Sink + */ +#define WLAN_HDD_DRIVER_MIRACAST_CFG_MIN_VAL 0 +#define WLAN_HDD_DRIVER_MIRACAST_CFG_MAX_VAL 2 + +/* + * When ever we need to print IBSSPEERINFOALL for morethan 16 STA + * we will split the printing. + */ +#define NUM_OF_STA_DATA_TO_PRINT 16 + +#ifdef FEATURE_CESIUM_PROPRIETARY +#define WLAN_NLINK_CESIUM 30 +#endif + #ifdef WLAN_OPEN_SOURCE static struct wake_lock wlan_wake_lock; #endif @@ -157,12 +213,32 @@ static e_hdd_ssr_required isSsrRequired = HDD_SSR_NOT_REQUIRED; static VOS_STATUS wlan_hdd_framework_restart(hdd_context_t *pHddCtx); static void wlan_hdd_restart_init(hdd_context_t *pHddCtx); static void wlan_hdd_restart_deinit(hdd_context_t *pHddCtx); + +#ifdef FEATURE_CESIUM_PROPRIETARY +static void hdd_tx_fail_ind_callback(v_U8_t *MacAddr, v_U8_t seqNo); + +static int hdd_open_cesium_nl_sock(void); +static void hdd_close_cesium_nl_sock(void); +static struct sock *cesium_nl_srv_sock; +static v_U16_t cesium_pid; + +static int hdd_ParseIBSSTXFailEventParams(tANI_U8 *pValue, + tANI_U8 *tx_fail_count, + tANI_U16 *pid); + +static int hdd_ParseUserParams(tANI_U8 *pValue, tANI_U8 **ppArg); + +#endif /* FEATURE_CESIUM_PROPRIETARY */ void wlan_hdd_restart_timer_cb(v_PVOID_t usrDataForCallback); void hdd_set_wlan_suspend_mode(bool suspend); v_U16_t hdd_select_queue(struct net_device *dev, struct sk_buff *skb); +#ifdef FEATURE_CESIUM_PROPRIETARY +int hdd_updateIbssRouteTable(tHalHandle hHal, tANI_U8 *ptr); +#endif + #ifdef WLAN_FEATURE_PACKET_FILTERING static void hdd_set_multicast_list(struct net_device *dev); #endif @@ -171,13 +247,16 @@ void hdd_wlan_initial_scan(hdd_adapter_t *pAdapter); int isWDresetInProgress(void); extern int hdd_setBand_helper(struct net_device *dev, tANI_U8* ptr); + #if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR) void hdd_getBand_helper(hdd_context_t *pHddCtx, int *pBand); static VOS_STATUS hdd_parse_channellist(tANI_U8 *pValue, tANI_U8 *pChannelList, tANI_U8 *pNumChannels); -static VOS_STATUS hdd_parse_countryrev(tANI_U8 *pValue, tANI_U8 *pChannelList, tANI_U8 *pNumChannels); static VOS_STATUS hdd_parse_send_action_frame_data(tANI_U8 *pValue, tANI_U8 *pTargetApBssid, tANI_U8 *pChannel, tANI_U8 *pDwellTime, tANI_U8 **pBuf, tANI_U8 *pBufLen); +static VOS_STATUS hdd_parse_reassoc_command_data(tANI_U8 *pValue, + tANI_U8 *pTargetApBssid, + tANI_U8 *pChannel); #endif #if defined (QCA_WIFI_2_0) && \ @@ -186,14 +265,19 @@ struct completion wlan_start_comp; extern void hif_init_adf_ctx(adf_os_device_t adf_ctx, v_VOID_t *hif_sc); extern int hif_register_driver(void); extern void hif_unregister_driver(void); - -#if defined(QCA_WIFI_2_0) && defined(QCA_WIFI_FTM) +#ifdef QCA_WIFI_FTM extern int hdd_ftm_start(hdd_context_t *pHddCtx); extern int hdd_ftm_stop(hdd_context_t *pHddCtx); #endif - #endif + +#if defined(FEATURE_WLAN_CCX) && defined(FEATURE_WLAN_CCX_UPLOAD) +VOS_STATUS hdd_parse_get_cckm_ie(tANI_U8 *pValue, + tANI_U8 **pCckmIe, + tANI_U8 *pCckmIeLen); +#endif /* FEATURE_WLAN_CCX && FEATURE_WLAN_CCX_UPLOAD */ + static int hdd_netdev_notifier_call(struct notifier_block * nb, unsigned long state, void *ndev) @@ -203,7 +287,6 @@ static int hdd_netdev_notifier_call(struct notifier_block * nb, hdd_context_t *pHddCtx; #ifdef WLAN_BTAMP_FEATURE VOS_STATUS status; - hdd_context_t *pHddCtx; #endif //Make sure that this callback corresponds to our device. @@ -408,6 +491,115 @@ static void hdd_wdi_trace_enable(wpt_moduleid moduleId, v_U32_t bitmask) } } +/* + * FUNCTION: wlan_hdd_validate_context + * This function is used to check the HDD context + */ +int wlan_hdd_validate_context(hdd_context_t *pHddCtx) +{ + ENTER(); + + if (NULL == pHddCtx || NULL == pHddCtx->cfg_ini) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: HDD context is Null", __func__); + return -ENODEV; + } + + if (pHddCtx->isLogpInProgress) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: LOGP in Progress. Ignore!!!", __func__); + return -EAGAIN; + } + + if (pHddCtx->isLoadUnloadInProgress) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: Unloading/Loading in Progress. Ignore!!!", __func__); + return -EAGAIN; + } + return 0; +} +#ifdef CONFIG_ENABLE_LINUX_REG +void hdd_checkandupdate_phymode( hdd_context_t *pHddCtx) +{ + hdd_adapter_t *pAdapter = NULL; + hdd_station_ctx_t *pHddStaCtx = NULL; + eCsrPhyMode phyMode; + hdd_config_t *cfg_param = NULL; + + if (NULL == pHddCtx) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "HDD Context is null !!"); + return ; + } + + pAdapter = hdd_get_adapter(pHddCtx, WLAN_HDD_INFRA_STATION); + if (NULL == pAdapter) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "pAdapter is null !!"); + return ; + } + + pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); + if (NULL == pHddStaCtx) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "pHddStaCtx is null !!"); + return ; + } + + cfg_param = pHddCtx->cfg_ini; + if (NULL == cfg_param) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "cfg_params not available !!"); + return ; + } + + phyMode = sme_GetPhyMode(WLAN_HDD_GET_HAL_CTX(pAdapter)); + + if (!pHddCtx->isVHT80Allowed) + { + if ((eCSR_DOT11_MODE_AUTO == phyMode) || + (eCSR_DOT11_MODE_11ac == phyMode) || + (eCSR_DOT11_MODE_11ac_ONLY == phyMode)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "Setting phymode to 11n!!"); + sme_SetPhyMode(WLAN_HDD_GET_HAL_CTX(pAdapter), eCSR_DOT11_MODE_11n); + } + } + else + { + /*New country Supports 11ac as well resetting value back from .ini*/ + sme_SetPhyMode(WLAN_HDD_GET_HAL_CTX(pAdapter), + hdd_cfg_xlate_to_csr_phy_mode(cfg_param->dot11Mode)); + return ; + } + + if ((eConnectionState_Associated == pHddStaCtx->conn_info.connState) && + ((eCSR_CFG_DOT11_MODE_11AC_ONLY == pHddStaCtx->conn_info.dot11Mode) || + (eCSR_CFG_DOT11_MODE_11AC == pHddStaCtx->conn_info.dot11Mode))) + { + VOS_STATUS vosStatus; + + // need to issue a disconnect to CSR. + INIT_COMPLETION(pAdapter->disconnect_comp_var); + vosStatus = sme_RoamDisconnect(WLAN_HDD_GET_HAL_CTX(pAdapter), + pAdapter->sessionId, + eCSR_DISCONNECT_REASON_UNSPECIFIED ); + + if (VOS_STATUS_SUCCESS == vosStatus) + wait_for_completion_interruptible_timeout(&pAdapter->disconnect_comp_var, + msecs_to_jiffies(WLAN_WAIT_TIME_DISCONNECT)); + + } +} +#else void hdd_checkandupdate_phymode( hdd_adapter_t *pAdapter, char *country_code) { hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); @@ -470,6 +662,7 @@ void hdd_checkandupdate_phymode( hdd_adapter_t *pAdapter, char *country_code) } } +#endif //CONFIG_ENABLE_LINUX_REG void hdd_checkandupdate_dfssetting( hdd_adapter_t *pAdapter, char *country_code) { @@ -505,240 +698,2885 @@ void hdd_checkandupdate_dfssetting( hdd_adapter_t *pAdapter, char *country_code) } -int hdd_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) -{ - hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); - hdd_priv_data_t priv_data; - tANI_U8 *command = NULL; - int ret = 0; +#ifdef WLAN_FEATURE_RELIABLE_MCAST +/**--------------------------------------------------------------------------- - if (NULL == pAdapter) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s: HDD adapter context is Null", __func__); - ret = -ENODEV; - goto exit; - } + \brief hdd_parse_setrmc_command() - HDD Parse reliable multicast command - if ((!ifr) || (!ifr->ifr_data)) - { - ret = -EINVAL; - goto exit; - } + This function parses the setrmcenable command passed in the format + SETRMCENABLE1(to enable RMC) OR 0(to disable RMC) if no value is + defined then default 0 is assumed + For example input commands: + 1) SETRMCENABLE 1 -> This is translated into enable reliable multicast + 2) SETRMCENABLE 0 -> This is translated into disable reliable multicast + 2) SETRMCENABLE -> This is translated into disable reliable multicast - if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s:LOGP in Progress. Ignore!!!", __func__); - ret = -EBUSY; - goto exit; - } + \param - pValue Pointer to setrmcenable command + \param - pRmcEnable Pointer to local RMC enable variable - if (copy_from_user(&priv_data, ifr->ifr_data, sizeof(hdd_priv_data_t))) - { - ret = -EFAULT; - goto exit; - } + \return - 0 for success non-zero for failure - command = kmalloc(priv_data.total_len, GFP_KERNEL); - if (!command) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s: failed to allocate memory\n", __func__); - ret = -ENOMEM; - goto exit; - } + --------------------------------------------------------------------------*/ +static int hdd_parse_setrmcenable_command(tANI_U8 *pValue, tANI_U8 *pRmcEnable) +{ + tANI_U8 *inPtr = pValue; + int tempInt; + int v = 0; + char buf[32]; + *pRmcEnable = 0; - if (copy_from_user(command, priv_data.buf, priv_data.total_len)) - { - ret = -EFAULT; - goto exit; - } + inPtr = strnchr(pValue, strlen(pValue), SPACE_ASCII_VALUE); + /*no argument after the command*/ + if (NULL == inPtr) + { + return 0; + } - if ((SIOCDEVPRIVATE + 1) == cmd) - { - hdd_context_t *pHddCtx = (hdd_context_t*)pAdapter->pHddCtx; + /*no space after the command*/ + else if (SPACE_ASCII_VALUE != *inPtr) + { + return 0; + } - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: Received %s cmd from Wi-Fi GUI***", __func__, command); + /*removing empty spaces*/ + while ((SPACE_ASCII_VALUE == *inPtr) && ('\0' != *inPtr)) inPtr++; - if (strncmp(command, "P2P_DEV_ADDR", 12) == 0 ) - { - if (copy_to_user(priv_data.buf, pHddCtx->p2pDeviceAddress.bytes, - sizeof(tSirMacAddr))) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s: failed to copy data to user buffer\n", __func__); - ret = -EFAULT; - } - } - else if(strncmp(command, "SETBAND", 7) == 0) - { - tANI_U8 *ptr = command ; - int ret = 0 ; + /*no argument followed by spaces*/ + if ('\0' == *inPtr) + { + return 0; + } - /* Change band request received */ + /*getting the first argument which enables or disables reliable + multicast for input IP v4 address*/ + sscanf(inPtr, "%32s ", buf); + v = kstrtos32(buf, 10, &tempInt); + if ( v < 0) + { + return -EINVAL; + } - /* First 8 bytes will have "SETBAND " and - * 9 byte will have band setting value */ - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: SetBandCommand Info comm %s UL %d, TL %d", __func__, command, priv_data.used_len, priv_data.total_len); - /* Change band request received */ - ret = hdd_setBand_helper(dev, ptr); - } - else if ( strncasecmp(command, "COUNTRY", 7) == 0 ) - { - char *country_code; + *pRmcEnable = tempInt; - country_code = command + 8; + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "ucRmcEnable: %d", *pRmcEnable); - hdd_checkandupdate_dfssetting(pAdapter, country_code); - hdd_checkandupdate_phymode(pAdapter, country_code); - ret = (int)sme_ChangeCountryCode(pHddCtx->hHal, NULL, country_code, - pAdapter, pHddCtx->pvosContext); - if( 0 != ret ) - { - VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, - "%s: SME Change Country code fail ret=%d\n",__func__, ret); + return 0; +} +/**--------------------------------------------------------------------------- - } - } -#if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR) - else if ( strncasecmp(command, "SETCOUNTRYREV", 13) == 0 ) - { - tANI_U8 *value = command; - tANI_U8 countryCode[WNI_CFG_COUNTRY_CODE_LEN] = {0}; - tANI_U8 revision = 0; - eHalStatus status = eHAL_STATUS_SUCCESS; - v_REGDOMAIN_t regId; + \brief hdd_parse_setrmcactionperiod_command() - HDD Parse reliable multicast + action period command - status = hdd_parse_countryrev(value, countryCode, &revision); - if (eHAL_STATUS_SUCCESS != status) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: Failed to parse country revision information", __func__); - ret = -EINVAL; - goto exit; - } + This function parses the setrmcactionperiod command passed in the format + SETRMCACTIONPERIODX(action period X) + For example input commands: + 1) SETRMCACTIONPERIOD 20 -> This is translated into set RMC action period + frequency to 20 + 1) SETRMCACTIONPERIOD 10 -> This is translated into set RMC action period + frequency to 10 - /* Validate country code */ - status = sme_GetRegulatoryDomainForCountry(pHddCtx->hHal, countryCode, ®Id); - if (eHAL_STATUS_SUCCESS != status) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: Invalid country code %s", __func__, countryCode); - ret = -EINVAL; - goto exit; - } + \param - pValue Pointer to setrmcactionperiod command + \param - pActionPeriod Pointer to local RMC action period variable - /* Validate revision */ - if ((SME_KR_3 != revision) && (SME_KR_24 != revision) && (SME_KR_25 != revision)) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: Invalid revision %d", __func__, revision); - ret = -EINVAL; - goto exit; - } + \return - 0 for success non-zero for failure - hdd_checkandupdate_dfssetting(pAdapter, countryCode); - hdd_checkandupdate_phymode(pAdapter, countryCode); - ret = (int)sme_ChangeCountryCode(pHddCtx->hHal, NULL, countryCode, - pAdapter, pHddCtx->pvosContext); - if (0 != ret) - { - VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, - "%s: SME Change Country code fail ret=%d", __func__, ret); - ret = -EINVAL; - goto exit; - } + --------------------------------------------------------------------------*/ +static int hdd_parse_setrmcactionperiod_command(tANI_U8 *pValue, + tANI_U32 *pActionPeriod) +{ + tANI_U8 *inPtr = pValue; + int tempInt; + int v = 0; + char buf[32]; + *pActionPeriod = 0; - if (0 == strncmp(countryCode, "KR", 2)) - { - status = sme_ChangeCountryValidChannelListByRevision((tHalHandle)(pHddCtx->hHal), - revision); - if (eHAL_STATUS_SUCCESS != status) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: Failed to build valid channel list", __func__); - ret = -EINVAL; - goto exit; - } - } - } -#endif - /* - command should be a string having format - SET_SAP_CHANNEL_LIST - */ - else if(strncmp(command, "SET_SAP_CHANNEL_LIST", 20) == 0) - { - tANI_U8 *ptr = command; + inPtr = strnchr(pValue, strlen(pValue), SPACE_ASCII_VALUE); + /*no argument after the command*/ + if (NULL == inPtr) + { + return -EINVAL; + } - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - " Received Command to Set Preferred Channels for SAP in %s", __func__); + /*no space after the command*/ + else if (SPACE_ASCII_VALUE != *inPtr) + { + return -EINVAL; + } - ret = sapSetPreferredChannel(ptr); - } - else if(strncmp(command, "SETSUSPENDMODE", 14) == 0) - { + /*removing empty spaces*/ + while ((SPACE_ASCII_VALUE == *inPtr) && ('\0' != *inPtr)) inPtr++; + + /*no argument followed by spaces*/ + if ('\0' == *inPtr) + { + return 0; + } + + /*getting the first argument which enables or disables reliable + multicast for input IP v4 address*/ + sscanf(inPtr, "%32s ", buf); + v = kstrtos32(buf, 10, &tempInt); + if ( v < 0) + { + return -EINVAL; + } + + /* Range checking for passed paramter */ + if (tempInt < WNI_CFG_RMC_ACTION_PERIOD_FREQUENCY_STAMIN) + { + return -EINVAL; + } + + *pActionPeriod = tempInt; + + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "uActionPeriod: %d", *pActionPeriod); + + return 0; +} + +/**--------------------------------------------------------------------------- + + \brief hdd_parse_setrmcrate_command() - HDD Parse reliable multicast + set rate command + + This function parses the SETRMCTXRATE command passed in the format + SETRMCTXRATEX(multicast rate in Mbps) + For example input commands: + 1) SETRMCTXRATE 6 -> This is translated into set RMC multicast rate + to 6 Mbps + 1) SETRMCTXRATE 0 -> This is translated into disabling fixed multicast rate + and enabling multicast RA in firmware + + \param - pValue Pointer to SETRMCTXRATE command + \param - pRate Pointer to local RMC multicast rate variable + \param - pTxFlags Pointer to local RMC multicast rate variable + + \return - 0 for success non-zero for failure + + --------------------------------------------------------------------------*/ +static int hdd_parse_setrmcrate_command(tANI_U8 *pValue, + tANI_U32 *pRate, tTxrateinfoflags *pTxFlags) +{ + tANI_U8 *inPtr = pValue; + int tempInt; + int v = 0; + char buf[32]; + *pRate = 0; + *pTxFlags = 0; + + inPtr = strnchr(pValue, strlen(pValue), SPACE_ASCII_VALUE); + /*no argument after the command*/ + if (NULL == inPtr) + { + return -EINVAL; + } + + /*no space after the command*/ + else if (SPACE_ASCII_VALUE != *inPtr) + { + return -EINVAL; + } + + /*removing empty spaces*/ + while ((SPACE_ASCII_VALUE == *inPtr) && ('\0' != *inPtr)) inPtr++; + + /*no argument followed by spaces*/ + if ('\0' == *inPtr) + { + return 0; + } + + /* + * getting the first argument which sets multicast rate. + */ + sscanf(inPtr, "%32s ", buf); + v = kstrtos32(buf, 10, &tempInt); + if ( v < 0) + { + return -EINVAL; + } + + /* + * Validate the multicast rate. + */ + switch (tempInt) + { + default: + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, + "Unsupported rate: %d", tempInt); + return -EINVAL; + case 0: + case 6: + case 9: + case 12: + case 18: + case 24: + case 36: + case 48: + case 54: + *pTxFlags = eHAL_TX_RATE_LEGACY; + *pRate = tempInt * 10; + break; + case 65: + *pTxFlags = eHAL_TX_RATE_HT20; + *pRate = tempInt * 10; + break; + case 72: + *pTxFlags = eHAL_TX_RATE_HT20 | eHAL_TX_RATE_SGI; + *pRate = 722; /* fractional rate 72.2 Mbps */ + break; + } + + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "Rate: %d", *pRate); + + return 0; +} +#endif /*End WLAN_FEATURE_RELIABLE_MCAST*/ + +#ifdef FEATURE_CESIUM_PROPRIETARY +/**--------------------------------------------------------------------------- + + \brief hdd_cfg80211_get_ibss_peer_info_cb() - Callback function for IBSS + Peer Info request + + This is an asynchronous callback function from SME when the peer info + is received + + \pUserData -> Adapter private data + \pPeerInfoRsp -> Peer info response + + \return - 0 for success non-zero for failure + --------------------------------------------------------------------------*/ +static void +hdd_cfg80211_get_ibss_peer_info_cb(v_VOID_t *pUserData, v_VOID_t *pPeerInfoRsp) +{ + hdd_adapter_t *pAdapter = (hdd_adapter_t *)pUserData; + hdd_ibss_peer_info_t *pPeerInfo = (hdd_ibss_peer_info_t *)pPeerInfoRsp; + hdd_station_ctx_t *pStaCtx; + v_U8_t i; + + /*Sanity check*/ + if ((NULL == pAdapter) || (WLAN_HDD_ADAPTER_MAGIC != pAdapter->magic)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "invalid adapter or adapter has invalid magic"); + return; + } + + pStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); + if (NULL != pStaCtx && NULL != pPeerInfo && + eHAL_STATUS_SUCCESS == pPeerInfo->status) + { + pStaCtx->ibss_peer_info.status = pPeerInfo->status; + pStaCtx->ibss_peer_info.numIBSSPeers = pPeerInfo->numIBSSPeers; + + /* Paranoia check */ + if (pPeerInfo->numIBSSPeers < HDD_MAX_NUM_IBSS_STA) + { + for (i = 0; i < pPeerInfo->numIBSSPeers; i++) + { + memcpy(&pStaCtx->ibss_peer_info.ibssPeerList[i], + &pPeerInfo->ibssPeerList[i], + sizeof(hdd_ibss_peer_info_params_t)); + } + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s] Peer Info copied in HDD"); + } + else + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s] Number of peers %d returned is more than limit %d", + __func__, pPeerInfo->numIBSSPeers, HDD_MAX_NUM_IBSS_STA); + } + } + else + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s] peerInfo returned is NULL", __func__); + } + + complete(&pAdapter->ibss_peer_info_comp); +} + +/**--------------------------------------------------------------------------- + + \brief hdd_cfg80211_get_ibss_peer_info_all() - + + Request function to get IBSS peer info from lower layers + + \pAdapter -> Adapter context + + \return - 0 for success non-zero for failure + --------------------------------------------------------------------------*/ +static +VOS_STATUS hdd_cfg80211_get_ibss_peer_info_all(hdd_adapter_t *pAdapter) +{ + tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(pAdapter); + int status; + VOS_STATUS retStatus = VOS_STATUS_E_FAILURE; + + INIT_COMPLETION(pAdapter->ibss_peer_info_comp); + + retStatus = sme_RequestIBSSPeerInfo(hHal, pAdapter, + hdd_cfg80211_get_ibss_peer_info_cb, + VOS_TRUE, 0xFF); + + if (VOS_STATUS_SUCCESS == retStatus) + { + status = wait_for_completion_interruptible_timeout + (&pAdapter->ibss_peer_info_comp, + msecs_to_jiffies(IBSS_PEER_INFO_REQ_TIMOEUT)); + + /* status will be 0 if timed out */ + if (status <= 0) + { + hddLog(VOS_TRACE_LEVEL_WARN, "%s: Warning: IBSS_PEER_INFO_TIMEOUT", + __func__); + retStatus = VOS_STATUS_E_FAILURE; + return retStatus; + } + } + else + { + hddLog(VOS_TRACE_LEVEL_WARN, + "%s: Warning: sme_RequestIBSSPeerInfo Request failed", __func__); + } + + return retStatus; +} + +/**--------------------------------------------------------------------------- + + \brief hdd_cfg80211_get_ibss_peer_info() - + + Request function to get IBSS peer info from lower layers + + \pAdapter -> Adapter context + \staIdx -> Sta index for which the peer info is requested + + \return - 0 for success non-zero for failure + --------------------------------------------------------------------------*/ +static VOS_STATUS +hdd_cfg80211_get_ibss_peer_info(hdd_adapter_t *pAdapter, v_U8_t staIdx) +{ + int status; + tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(pAdapter); + VOS_STATUS retStatus = VOS_STATUS_E_FAILURE; + + INIT_COMPLETION(pAdapter->ibss_peer_info_comp); + + retStatus = sme_RequestIBSSPeerInfo(hHal, pAdapter, + hdd_cfg80211_get_ibss_peer_info_cb, + VOS_FALSE, staIdx); + + if (VOS_STATUS_SUCCESS == retStatus) + { + status = wait_for_completion_interruptible_timeout + (&pAdapter->ibss_peer_info_comp, + msecs_to_jiffies(IBSS_PEER_INFO_REQ_TIMOEUT)); + + /* status = 0 on timeout */ + if (status <= 0) + { + hddLog(VOS_TRACE_LEVEL_WARN, "%s: Warning: IBSS_PEER_INFO_TIMEOUT", + __func__); + retStatus = VOS_STATUS_E_FAILURE; + return retStatus; + } + } + else + { + hddLog(VOS_TRACE_LEVEL_WARN, + "%s: Warning: sme_RequestIBSSPeerInfo Request failed", __func__); + } + + return retStatus; +} + +/**--------------------------------------------------------------------------- + + \brief hdd_parse_get_ibss_peer_info - HDD Parse get ibss peer info all + + This function parses the send action frame data passed in the format + GETIBSSPEERINFOALL + + \param - pValue Pointer to input data + \param - pPeerMacAddr pointer to peer mac address + \return - 0 for success non-zero for failure + + --------------------------------------------------------------------------*/ +VOS_STATUS +hdd_parse_get_ibss_peer_info(tANI_U8 *pValue, v_MACADDR_t *pPeerMacAddr) +{ + tANI_U8 *inPtr = pValue; + inPtr = strnchr(pValue, strlen(pValue), SPACE_ASCII_VALUE); + + /*no argument after the command*/ + if (NULL == inPtr) + { + return VOS_STATUS_E_FAILURE;; + } + + /*no space after the command*/ + else if (SPACE_ASCII_VALUE != *inPtr) + { + return VOS_STATUS_E_FAILURE;; + } + + /*removing empty spaces*/ + while ((SPACE_ASCII_VALUE == *inPtr) && ('\0' != *inPtr) ) inPtr++; + + /*no argument followed by spaces*/ + if ('\0' == *inPtr) + { + return VOS_STATUS_E_FAILURE;; + } + + /*getting the first argument ie the peer mac address */ + if (inPtr[2] != ':' || inPtr[5] != ':' || inPtr[8] != ':' || + inPtr[11] != ':' || inPtr[14] != ':') + { + return VOS_STATUS_E_FAILURE;; + } + sscanf(inPtr, "%2x:%2x:%2x:%2x:%2x:%2x", + (unsigned int *)&pPeerMacAddr->bytes[0], + (unsigned int *)&pPeerMacAddr->bytes[1], + (unsigned int *)&pPeerMacAddr->bytes[2], + (unsigned int *)&pPeerMacAddr->bytes[3], + (unsigned int *)&pPeerMacAddr->bytes[4], + (unsigned int *)&pPeerMacAddr->bytes[5]); + + /* The command buffer seems to be fine */ + return VOS_STATUS_SUCCESS; +} + +/**--------------------------------------------------------------------------- + + \brief hdd_updateIbssRouteTable - update IBSS route table in f/w. + + This function parses the sends IBSS table command to f/w. + + \param - hHal: HAL handle + \ptr - pointer having the command followed by the arguments in + string format + \return - return 0 when success else returns error code. + + --------------------------------------------------------------------------*/ +int hdd_updateIbssRouteTable(tHalHandle hHal, tANI_U8 *ptr) +{ + tANI_U8 *param; + int numOfEntries; + tAniIbssRouteTable *pIbssRouteTable = NULL; + tAniDestIpNextHopMacPair *pairPtr = NULL; + tANI_U32 usAniIbssRouteTableSize; + int j; + int ret = 0; + eHalStatus status = eHAL_STATUS_FAILURE; + + if (!hHal) + return -EINVAL; + + param = strchr(ptr, ' '); + if (NULL == param) + { + /* no argument after the command */ + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: no arguments after command name", __func__); + return -EINVAL; + } + else if (SPACE_ASCII_VALUE != *param) + { + /* no space after the command */ + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: no space after command name", __func__); + return -EINVAL; + } + + param++; + + /* remove empty spaces */ + while ((SPACE_ASCII_VALUE == *param) && ('\0' != *param)) + { + param++; + } + + /* no argument followed by spaces */ + if ('\0' == *param) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: no arguments followed by space after command name", + __func__); + return -EINVAL; + } + + /* get the first argument, i.e. the number of entries */ + sscanf(param, "%d ", &numOfEntries); + + if (ANI_MAX_IBSS_ROUTE_TABLE_ENTRY < numOfEntries) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: numOfEntries(%d) is greater than max allowed value (%d)", + numOfEntries, ANI_MAX_IBSS_ROUTE_TABLE_ENTRY); + return -EINVAL; + } + + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s: Number of entries: %d", __func__, numOfEntries); + + usAniIbssRouteTableSize = sizeof(tAniIbssRouteTable) + ((numOfEntries - 1) + * sizeof(tAniDestIpNextHopMacPair)); + + pIbssRouteTable = vos_mem_malloc(usAniIbssRouteTableSize); + + if (!pIbssRouteTable) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: mem alloc failed", __func__); + return -EINVAL; + } + + pIbssRouteTable->numEntries = numOfEntries; + + for (j = 0; j < numOfEntries; j++) + { + pairPtr = &pIbssRouteTable->destIpNextHopPair[j]; + + /* param points to the beginning of first space after num of entries */ + param = strpbrk(param, " "); + + /* no argument after the number of entries argument */ + if (NULL == param) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: no argument after the number of entries argument", + __func__); + ret = -EINVAL; + break; + } + + param++; + + /* remove empty spaces */ + while ((SPACE_ASCII_VALUE == *param) && ('\0' != *param)) + { + param++; + } + + /* no ip address after the num of entries argument and spaces */ + if ('\0' == *param) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: no IP address after the num of entries and space", + __func__); + ret = -EINVAL; + break; + } + + sscanf(param, "%d.%d.%d.%d", + (int*) &pairPtr->destIpv4Addr[0], + (int*) &pairPtr->destIpv4Addr[1], + (int*) &pairPtr->destIpv4Addr[2], + (int*) &pairPtr->destIpv4Addr[3]); + + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s: IP Address: %d.%d.%d.%d", + __func__, pairPtr->destIpv4Addr[0], pairPtr->destIpv4Addr[1], + pairPtr->destIpv4Addr[2], pairPtr->destIpv4Addr[3]); + + /* param points to the beginning of first space after ip addr */ + param = strpbrk(param, " "); + + /* no argument after ip address */ + if (NULL == param) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: no argument after IP address", __func__); + ret = -EINVAL; + break; + } + + param++; + + /* remove empty spaces */ + while ((SPACE_ASCII_VALUE == *param) && ('\0' != *param)) + { + param++; + } + + /* no mac address after ip address and spaces */ + if ('\0' == *param) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: no MAC address after ip address and space", + __func__); + ret = -EINVAL; + break; + } + + sscanf(param, "%02x:%02x:%02x:%02x:%02x:%02x", + (int*) &pairPtr->nextHopMacAddr[0], + (int*) &pairPtr->nextHopMacAddr[1], + (int*) &pairPtr->nextHopMacAddr[2], + (int*) &pairPtr->nextHopMacAddr[3], + (int*) &pairPtr->nextHopMacAddr[4], + (int*) &pairPtr->nextHopMacAddr[5]); + + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s: MAC Address: %02x:%02x:%02x:%02x:%02x:%02x", + __func__, MAC_ADDR_ARRAY(pairPtr->nextHopMacAddr)); + } + + if (ret) + { + vos_mem_free(pIbssRouteTable); + } + else + { + status = sme_IBSSRouteTableUpdateInd(hHal, pIbssRouteTable); + if (eHAL_STATUS_SUCCESS != status) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: SME cmd to update IBSS Route table failed", + __func__); + ret = -EBUSY; + } + } + return ret; +} + +#endif /* FEATURE_CESIUM_PROPRIETARY */ + +#ifdef FEATURE_WLAN_BATCH_SCAN + +/**--------------------------------------------------------------------------- + + \brief hdd_extract_assigned_int_from_str() - Extracts assigned integer from + input string + + This function extracts assigned integer from string in below format: + "STRING=10" : extracts integer 10 from this string + + \param - pInPtr Pointer to input string + \param - base Base for string to int conversion(10 for decimal 16 for hex) + \param - pOutPtr Pointer to variable in which extracted integer needs to be + assigned + \param - pLastArg to tell whether it is last arguement in input string or + not + + \return - NULL for failure cases + pointer to next arguement in input string for success cases + --------------------------------------------------------------------------*/ +static tANI_U8 * +hdd_extract_assigned_int_from_str +( + tANI_U8 *pInPtr, + tANI_U8 base, + tANI_U32 *pOutPtr, + tANI_U8 *pLastArg +) +{ + int tempInt; + int v = 0; + char buf[32]; + int val = 0; + *pLastArg = FALSE; + + pInPtr = strnchr(pInPtr, strlen(pInPtr), EQUALS_TO_ASCII_VALUE); + if (NULL == pInPtr) + { + return NULL; + } + + pInPtr++; + + while ((SPACE_ASCII_VALUE == *pInPtr) && ('\0' != *pInPtr)) pInPtr++; + + val = sscanf(pInPtr, "%32s ", buf); + if (val < 0 && val > strlen(pInPtr)) + { + return NULL; + } + pInPtr += val; + v = kstrtos32(buf, base, &tempInt); + if (v < 0) + { + return NULL; + } + *pOutPtr = tempInt; + + pInPtr = strnchr(pInPtr, strlen(pInPtr), SPACE_ASCII_VALUE); + if (NULL == pInPtr) + { + *pLastArg = TRUE; + return NULL; + } + while ((SPACE_ASCII_VALUE == *pInPtr) && ('\0' != *pInPtr)) pInPtr++; + + return pInPtr; +} + +/**--------------------------------------------------------------------------- + + \brief hdd_extract_assigned_char_from_str() - Extracts assigned char from + input string + + This function extracts assigned character from string in below format: + "STRING=A" : extracts char 'A' from this string + + \param - pInPtr Pointer to input string + \param - pOutPtr Pointer to variable in which extracted char needs to be + assigned + \param - pLastArg to tell whether it is last arguement in input string or + not + + \return - NULL for failure cases + pointer to next arguement in input string for success cases + --------------------------------------------------------------------------*/ +static tANI_U8 * +hdd_extract_assigned_char_from_str +( + tANI_U8 *pInPtr, + tANI_U8 *pOutPtr, + tANI_U8 *pLastArg +) +{ + *pLastArg = FALSE; + + pInPtr = strnchr(pInPtr, strlen(pInPtr), EQUALS_TO_ASCII_VALUE); + if (NULL == pInPtr) + { + return NULL; + } + + pInPtr++; + + while ((SPACE_ASCII_VALUE == *pInPtr) && ('\0' != *pInPtr)) pInPtr++; + + *pOutPtr = *pInPtr; + + pInPtr = strnchr(pInPtr, strlen(pInPtr), SPACE_ASCII_VALUE); + if (NULL == pInPtr) + { + *pLastArg = TRUE; + return NULL; + } + while ((SPACE_ASCII_VALUE == *pInPtr) && ('\0' != *pInPtr)) pInPtr++; + + return pInPtr; +} + + +/**--------------------------------------------------------------------------- + + \brief hdd_parse_set_batchscan_command () - HDD parse set batch scan command + + This function parses set batch scan command in below format: + WLS_BATCHING_SET followed by below arguements + "SCANFREQ=XX" : Optional defaults to 30 sec + "MSCAN=XX" : Required number of scans to attempt to batch + "BESTN=XX" : Best Network (RSSI) defaults to 16 + "CHANNEL=" : optional defaults to all channels, can list 'A'or` B. + A. implies only 5 GHz , B. implies only 2.4GHz + "RTT=X" : optional defaults to 0 + returns the MIN of MSCAN or the max # of scans firmware can cache or -1 on + error + + For example input commands: + 1) WLS_BATCHING_SET SCANFREQ=60 MSCAN=10 BESTN=20 CHANNEL=A RTT=0 -> This is + translated into set batch scan with following parameters: + a) Frequence 60 seconds + b) Batch 10 scans together + c) Best RSSI to be 20 + d) 5GHz band only + e) RTT is equal to 0 + + \param - pValue Pointer to input channel list + \param - pHddSetBatchScanReq Pointer to HDD batch scan request structure + + \return - 0 for success non-zero for failure + + --------------------------------------------------------------------------*/ +static int +hdd_parse_set_batchscan_command +( + tANI_U8 *pValue, + tSirSetBatchScanReq *pHddSetBatchScanReq +) +{ + tANI_U8 *inPtr = pValue; + tANI_U8 val = 0; + tANI_U8 lastArg = 0; + tANI_U32 nScanFreq = HDD_SET_BATCH_SCAN_DEFAULT_FREQ; + tANI_U32 nMscan; + tANI_U32 nBestN = HDD_SET_BATCH_SCAN_BEST_NETWORK; + tANI_U8 ucRfBand = HDD_SET_BATCH_SCAN_DEFAULT_BAND; + tANI_U32 nRtt = 0; + tANI_U32 temp; + + /*go to space after WLS_BATCHING_SET command*/ + inPtr = strnchr(pValue, strlen(pValue), SPACE_ASCII_VALUE); + /*no argument after the command*/ + if (NULL == inPtr) + { + return -EINVAL; + } + + /*no space after the command*/ + else if (SPACE_ASCII_VALUE != *inPtr) + { + return -EINVAL; + } + + /*removing empty spaces*/ + while ((SPACE_ASCII_VALUE == *inPtr) && ('\0' != *inPtr)) inPtr++; + + /*no argument followed by spaces*/ + if ('\0' == *inPtr) + { + return -EINVAL; + } + + /*check and parse SCANFREQ*/ + if ((strncmp(inPtr, "SCANFREQ", 8) == 0)) + { + inPtr = hdd_extract_assigned_int_from_str(inPtr, 10, + &temp, &lastArg); + + if (0 != temp) + { + nScanFreq = temp; + } + + if ( (NULL == inPtr) || (TRUE == lastArg)) + { + return -EINVAL; + } + } + + /*check and parse MSCAN*/ + if ((strncmp(inPtr, "MSCAN", 5) == 0)) + { + inPtr = hdd_extract_assigned_int_from_str(inPtr, 10, + &nMscan, &lastArg); + + if (0 == nMscan) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "invalid MSCAN=%d", nMscan); + return -EINVAL; + } + + if (TRUE == lastArg) + { + goto done; + } + else if (NULL == inPtr) + { + return -EINVAL; + } + } + else + { + return -EINVAL; + } + + /*check and parse BESTN*/ + if ((strncmp(inPtr, "BESTN", 5) == 0)) + { + inPtr = hdd_extract_assigned_int_from_str(inPtr, 10, + &temp, &lastArg); + + if (0 != temp) + { + nBestN = temp; + } + + if (TRUE == lastArg) + { + goto done; + } + else if (NULL == inPtr) + { + return -EINVAL; + } + } + + /*check and parse CHANNEL*/ + if ((strncmp(inPtr, "CHANNEL", 7) == 0)) + { + inPtr = hdd_extract_assigned_char_from_str(inPtr, &val, &lastArg); + + if (('A' == val) || ('a' == val)) + { + ucRfBand = HDD_SET_BATCH_SCAN_24GHz_BAND_ONLY; + } + else if (('B' == val) || ('b' == val)) + { + ucRfBand = HDD_SET_BATCH_SCAN_5GHz_BAND_ONLY; + } + else + { + ucRfBand = HDD_SET_BATCH_SCAN_DEFAULT_BAND; + } + + if (TRUE == lastArg) + { + goto done; + } + else if (NULL == inPtr) + { + return -EINVAL; + } + } + + /*check and parse RTT*/ + if ((strncmp(inPtr, "RTT", 3) == 0)) + { + inPtr = hdd_extract_assigned_int_from_str(inPtr, 10, + &nRtt, &lastArg); + if (TRUE == lastArg) + { + goto done; + } + if (NULL == inPtr) + { + return -EINVAL; + } + } + + +done: + + pHddSetBatchScanReq->scanFrequency = nScanFreq; + pHddSetBatchScanReq->numberOfScansToBatch = nMscan; + pHddSetBatchScanReq->bestNetwork = nBestN; + pHddSetBatchScanReq->rfBand = ucRfBand; + pHddSetBatchScanReq->rtt = nRtt; + + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "Received WLS_BATCHING_SET with SCANFREQ=%d " + "MSCAN=%d BESTN=%d CHANNEL=%d RTT=%d", + pHddSetBatchScanReq->scanFrequency, + pHddSetBatchScanReq->numberOfScansToBatch, + pHddSetBatchScanReq->bestNetwork, + pHddSetBatchScanReq->rfBand, + pHddSetBatchScanReq->rtt); + + return 0; +}/*End of hdd_parse_set_batchscan_command*/ + +/**--------------------------------------------------------------------------- + + \brief hdd_set_batch_scan_req_callback () - This function is called after + receiving set batch scan response from FW and it saves set batch scan + response data FW to HDD context and sets the completion event on + which hdd_ioctl is waiting + + \param - callbackContext Pointer to HDD adapter + \param - pRsp Pointer to set batch scan response data received from FW + + \return - nothing + + --------------------------------------------------------------------------*/ +static void hdd_set_batch_scan_req_callback +( + void *callbackContext, + tSirSetBatchScanRsp *pRsp +) +{ + hdd_adapter_t* pAdapter = (hdd_adapter_t*)callbackContext; + tSirSetBatchScanRsp *pHddSetBatchScanRsp; + + /*sanity check*/ + if (WLAN_HDD_ADAPTER_MAGIC != pAdapter->magic) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: Invalid pAdapter magic", __func__); + VOS_ASSERT(0); + return; + } + pHddSetBatchScanRsp = &pAdapter->hddSetBatchScanRsp; + + /*save set batch scan response*/ + pHddSetBatchScanRsp->nScansToBatch = pRsp->nScansToBatch; + + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, + "Received set batch scan rsp from FW with nScansToBatch=%d", + pHddSetBatchScanRsp->nScansToBatch); + + pAdapter->hdd_wait_for_set_batch_scan_rsp = FALSE; + complete(&pAdapter->hdd_set_batch_scan_req_var); + + return; +}/*End of hdd_set_batch_scan_req_callback*/ + + +/**--------------------------------------------------------------------------- + + \brief hdd_populate_batch_scan_rsp_queue () - This function stores AP meta + info in hdd batch scan response queue + + \param - pAdapter Pointer to hdd adapter + \param - pAPMetaInfo Pointer to access point meta info + \param - scanId scan ID of batch scan response + \param - isLastAp tells whether AP is last AP in batch scan response or not + + \return - nothing + + --------------------------------------------------------------------------*/ +static void hdd_populate_batch_scan_rsp_queue( hdd_adapter_t* pAdapter, + tpSirBatchScanNetworkInfo pApMetaInfo, tANI_U32 scanId, v_BOOL_t isLastAp) +{ + tHddBatchScanRsp *pHead; + tHddBatchScanRsp *pNode; + tHddBatchScanRsp *pPrev; + tHddBatchScanRsp *pTemp; + tANI_U8 ssidLen; + + /*head of hdd batch scan response queue*/ + pHead = pAdapter->pBatchScanRsp; + + pNode = (tHddBatchScanRsp *)vos_mem_malloc(sizeof(tHddBatchScanRsp)); + if (NULL == pNode) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: Could not allocate memory", __func__); + VOS_ASSERT(0); + return; + } + + vos_mem_copy(pNode->ApInfo.bssid, pApMetaInfo->bssid, + sizeof(pNode->ApInfo.bssid)); + ssidLen = strlen(pApMetaInfo->ssid); + if (SIR_MAX_SSID_SIZE < ssidLen) + { + /*invalid scan result*/ + vos_mem_free(pNode); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: Invalid AP meta info ssidlen %d", __func__, ssidLen); + return; + } + vos_mem_copy(pNode->ApInfo.ssid, pApMetaInfo->ssid, ssidLen); + /*null terminate ssid*/ + pNode->ApInfo.ssid[ssidLen] = '\0'; + pNode->ApInfo.ch = pApMetaInfo->ch; + pNode->ApInfo.rssi = pApMetaInfo->rssi; + pNode->ApInfo.age = pApMetaInfo->timestamp; + pNode->ApInfo.batchId = scanId; + pNode->ApInfo.isLastAp = isLastAp; + + pNode->pNext = NULL; + if (NULL == pHead) + { + pAdapter->pBatchScanRsp = pNode; + } + else + { + pTemp = pHead; + while (NULL != pTemp) + { + pPrev = pTemp; + pTemp = pTemp->pNext; + } + pPrev->pNext = pNode; + } + + return; +}/*End of hdd_populate_batch_scan_rsp_queue*/ + +/**--------------------------------------------------------------------------- + + \brief hdd_batch_scan_result_ind_callback () - This function is called after + receiving batch scan response indication from FW. It saves get batch scan + response data in HDD batch scan response queue. This callback sets the + completion event on which hdd_ioctl is waiting only after getting complete + batch scan response data from FW + + \param - callbackContext Pointer to HDD adapter + \param - pRsp Pointer to get batch scan response data received from FW + + \return - nothing + + --------------------------------------------------------------------------*/ +static void hdd_batch_scan_result_ind_callback +( + void *callbackContext, + void *pRsp +) +{ + v_BOOL_t isLastAp; + tANI_U32 numApMetaInfo; + tANI_U32 numberScanList; + tANI_U32 nextScanListOffset; + tANI_U32 nextApMetaInfoOffset; + hdd_adapter_t* pAdapter; + tpSirBatchScanList pScanList; + tpSirBatchScanNetworkInfo pApMetaInfo; + tpSirBatchScanResultIndParam pBatchScanRsp;/*batch scan rsp data from FW*/ + tSirSetBatchScanReq *pReq; + + pAdapter = (hdd_adapter_t *)callbackContext; + /*sanity check*/ + if ((NULL != pAdapter) && (WLAN_HDD_ADAPTER_MAGIC != pAdapter->magic)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: Invalid pAdapter magic", __func__); + VOS_ASSERT(0); + return; + } + + /*initialize locals*/ + pReq = &pAdapter->hddSetBatchScanReq; + pBatchScanRsp = (tpSirBatchScanResultIndParam)pRsp; + isLastAp = FALSE; + numApMetaInfo = 0; + numberScanList = 0; + nextScanListOffset = 0; + nextApMetaInfoOffset = 0; + pScanList = NULL; + pApMetaInfo = NULL; + + if ((NULL == pBatchScanRsp) || (NULL == pReq)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: pBatchScanRsp is %p pReq %p", __func__, pBatchScanRsp, pReq); + isLastAp = TRUE; + goto done; + } + + pAdapter->numScanList = numberScanList = pBatchScanRsp->numScanLists; + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "Batch scan rsp: numberScalList %d", numberScanList); + + if ((!numberScanList) || (numberScanList > pReq->numberOfScansToBatch)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: numberScanList %d", __func__, numberScanList); + isLastAp = TRUE; + goto done; + } + + while (numberScanList) + { + pScanList = (tpSirBatchScanList)(pBatchScanRsp->scanResults + + nextScanListOffset); + if (NULL == pScanList) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: pScanList is %p", __func__, pScanList); + isLastAp = TRUE; + goto done; + } + numApMetaInfo = pScanList->numNetworksInScanList; + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "Batch scan rsp: numApMetaInfo %d", numApMetaInfo); + + if ((!numApMetaInfo) || (numApMetaInfo > pReq->bestNetwork)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: numApMetaInfo %d", __func__, numApMetaInfo); + isLastAp = TRUE; + goto done; + } + + while (numApMetaInfo) + { + pApMetaInfo = (tpSirBatchScanNetworkInfo)(pScanList->scanList + + nextApMetaInfoOffset); + if (NULL == pApMetaInfo) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: pApMetaInfo is %p", __func__, pApMetaInfo); + isLastAp = TRUE; + goto done; + } + /*calculate AP age*/ + pApMetaInfo->timestamp = + pBatchScanRsp->timestamp - pApMetaInfo->timestamp; + + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, + "%s: bssId 0x%x:0x%x:0x%x:0x%x:0x%x:0x%x " + "ch %d rssi %d timestamp %d", __func__, + pApMetaInfo->bssid[0],pApMetaInfo->bssid[1], + pApMetaInfo->bssid[2],pApMetaInfo->bssid[3], + pApMetaInfo->bssid[4],pApMetaInfo->bssid[5], + pApMetaInfo->ch, pApMetaInfo->rssi, + pApMetaInfo->timestamp); + + /*mark last AP in batch scan response*/ + if ((TRUE == pBatchScanRsp->isLastResult) && + (1 == numberScanList) && (1 == numApMetaInfo)) + { + isLastAp = TRUE; + } + + mutex_lock(&pAdapter->hdd_batch_scan_lock); + /*store batch scan repsonse in hdd queue*/ + hdd_populate_batch_scan_rsp_queue(pAdapter, pApMetaInfo, + pScanList->scanId, isLastAp); + mutex_unlock(&pAdapter->hdd_batch_scan_lock); + + nextApMetaInfoOffset += sizeof(tSirBatchScanNetworkInfo); + numApMetaInfo--; + } + + nextScanListOffset += (sizeof(tSirBatchScanList) - (sizeof(tANI_U8))); + numberScanList--; + } + +done: + + /*notify hdd_ioctl only if complete batch scan rsp is received and it was + requested from hdd_ioctl*/ + if ((TRUE == pAdapter->hdd_wait_for_get_batch_scan_rsp) && + (TRUE == isLastAp)) + { + pAdapter->hdd_wait_for_get_batch_scan_rsp = FALSE; + complete(&pAdapter->hdd_get_batch_scan_req_var); + } + + return; +}/*End of hdd_batch_scan_result_ind_callback*/ + +/**--------------------------------------------------------------------------- + + \brief hdd_format_batch_scan_rsp () - This function formats batch scan + response as per batch scan FR request format by putting proper markers + + \param - pDest pointer to destination buffer + \param - cur_len current length + \param - tot_len total remaining size which can be written to user space + \param - pApMetaInfo Pointer to get batch scan response AP meta info + \param - pAdapter Pointer to HDD adapter + + \return - ret no of characters written + + --------------------------------------------------------------------------*/ +static tANI_U32 +hdd_format_batch_scan_rsp +( + tANI_U8 *pDest, + tANI_U32 cur_len, + tANI_U32 tot_len, + tHddBatchScanRsp *pApMetaInfo, + hdd_adapter_t* pAdapter +) +{ + tANI_U32 ret = 0; + tANI_U32 rem_len = 0; + tANI_U8 temp_len = 0; + tANI_U8 temp_total_len = 0; + tANI_U8 temp[HDD_BATCH_SCAN_AP_META_INFO_SIZE]; + tANI_U8 *pTemp = temp; + + /*Batch scan reponse needs to be returned to user space in + following format: + "scancount=X\n" where X is the number of scans in current batch + batch + "trunc\n" optional present if current scan truncated + "bssid=XX:XX:XX:XX:XX:XX\n" + "ssid=XXXX\n" + "freq=X\n" frequency in Mhz + "level=XX\n" + "age=X\n" ms + "dist=X\n" cm (-1 if not available) + "errror=X\n" (-1if not available) + "====\n" (end of ap marker) + "####\n" (end of scan marker) + "----\n" (end of results)*/ + /*send scan result in above format to user space based on + available length*/ + /*The GET response may have more data than the driver can return in its + buffer. In that case the buffer should be filled to the nearest complete + scan, ending with "%%%%".Subsequent callsshould return the remaining data + starting with the next scan (optional .trunc\n., .apcount=X\n., etc). + The final buffer should end with "----\n"*/ + + /*sanity*/ + if (cur_len > tot_len) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: invaid cur_len %d tot_len %d", __func__, cur_len, tot_len); + return 0; + } + else + { + rem_len = (tot_len - cur_len); + } + + /*end scan marker*/ + if (pApMetaInfo->ApInfo.batchId != pAdapter->prev_batch_id) + { + temp_len = snprintf(pTemp, sizeof(temp), "####\n"); + pTemp += temp_len; + temp_total_len += temp_len; + } + + /*bssid*/ + temp_len = snprintf(pTemp, sizeof(temp), + "bssid=0x%x:0x%x:0x%x:0x%x:0x%x:0x%x\n", + pApMetaInfo->ApInfo.bssid[0], pApMetaInfo->ApInfo.bssid[1], + pApMetaInfo->ApInfo.bssid[2], pApMetaInfo->ApInfo.bssid[3], + pApMetaInfo->ApInfo.bssid[4], pApMetaInfo->ApInfo.bssid[5]); + pTemp += temp_len; + temp_total_len += temp_len; + + /*ssid*/ + temp_len = snprintf(pTemp, (sizeof(temp) - temp_total_len), "ssid=%s\n", + pApMetaInfo->ApInfo.ssid); + pTemp += temp_len; + temp_total_len += temp_len; + + /*freq*/ + temp_len = snprintf(pTemp, (sizeof(temp) - temp_total_len), "freq=%d\n", + sme_ChnToFreq(pApMetaInfo->ApInfo.ch)); + pTemp += temp_len; + temp_total_len += temp_len; + + /*level*/ + temp_len = snprintf(pTemp, (sizeof(temp) - temp_total_len), "level=%d\n", + pApMetaInfo->ApInfo.rssi); + pTemp += temp_len; + temp_total_len += temp_len; + + /*age*/ + temp_len = snprintf(pTemp, (sizeof(temp) - temp_total_len), "age=%d\n", + pApMetaInfo->ApInfo.age); + pTemp += temp_len; + temp_total_len += temp_len; + + /*dist*/ + temp_len = snprintf(pTemp, (sizeof(temp) - temp_total_len), "dist=-1\n"); + pTemp += temp_len; + temp_total_len += temp_len; + + /*error*/ + temp_len = snprintf(pTemp, (sizeof(temp) - temp_total_len), "error=-1\n"); + pTemp += temp_len; + temp_total_len += temp_len; + + /*end AP marker*/ + temp_len = snprintf(pTemp, (sizeof(temp) - temp_total_len), "====\n"); + pTemp += temp_len; + temp_total_len += temp_len; + + /*last AP in batch scan response*/ + if(TRUE == pApMetaInfo->ApInfo.isLastAp) + { + /*end scan marker*/ + temp_len = snprintf(pTemp, (sizeof(temp) - temp_total_len), "####\n"); + pTemp += temp_len; + temp_total_len += temp_len; + + /*end batch scan result marker*/ + temp_len = snprintf(pTemp, (sizeof(temp) - temp_total_len), "----\n"); + pTemp += temp_len; + temp_total_len += temp_len; + + pAdapter->prev_batch_id = 0; + } + + if (temp_total_len < rem_len) + { + ret = temp_total_len + 1; + strlcpy(pDest, temp, ret); + pAdapter->isTruncated = FALSE; + } + else + { + pAdapter->isTruncated = TRUE; + if (rem_len >= strlen("%%%%")) + { + ret = snprintf(pDest, sizeof(temp), "%%%%"); + } + else + { + ret = 0; + } + } + + return ret; + +}/*End of hdd_format_batch_scan_rsp*/ + +/**--------------------------------------------------------------------------- + + \brief hdd_populate_user_batch_scan_rsp() - This function populates user data + buffer starting with head of hdd batch scan response queue + + \param - pAdapter Pointer to HDD adapter + \param - pDest Pointer to user data buffer + \param - cur_len current offset in user buffer + \param - rem_len remaining no of bytes in user buffer + + \return - number of bytes written in user buffer + + --------------------------------------------------------------------------*/ + +tANI_U32 hdd_populate_user_batch_scan_rsp +( + hdd_adapter_t* pAdapter, + tANI_U8 *pDest, + tANI_U32 cur_len, + tANI_U32 rem_len +) +{ + tHddBatchScanRsp *pHead; + tHddBatchScanRsp *pPrev; + tANI_U32 len; + + pAdapter->isTruncated = FALSE; + + /*head of hdd batch scan response queue*/ + pHead = pAdapter->pBatchScanRsp; + while (pHead) + { + len = hdd_format_batch_scan_rsp(pDest, cur_len, rem_len, pHead, + pAdapter); + pDest += len; + pDest--; + cur_len += len; + if(TRUE == pAdapter->isTruncated) + { + /*result is truncated return rest of scan rsp in next req*/ + cur_len = rem_len; + break; + } + pPrev = pHead; + pHead = pHead->pNext; + pAdapter->pBatchScanRsp = pHead; + pAdapter->prev_batch_id = pPrev->ApInfo.batchId; + vos_mem_free(pPrev); + } + + return cur_len; +}/*End of hdd_populate_user_batch_scan_rsp*/ + +/**--------------------------------------------------------------------------- + + \brief hdd_return_batch_scan_rsp_to_user () - This function returns batch + scan response data from HDD queue to user space + It does following in detail: + a) if HDD has enough data in its queue then it 1st copies data to user + space and then send get batch scan indication message to FW. In this + case it does not wait on any event and batch scan response data will + be populated in HDD response queue in MC thread context after receiving + indication from FW + b) else send get batch scan indication message to FW and wait on an event + which will be set once HDD receives complete batch scan response from + FW and then this function returns batch scan response to user space + + \param - pAdapter Pointer to HDD adapter + \param - pPrivData Pointer to priv_data + + \return - 0 for success -EFAULT for failure + + --------------------------------------------------------------------------*/ + +int hdd_return_batch_scan_rsp_to_user +( + hdd_adapter_t* pAdapter, + hdd_priv_data_t *pPrivData, + tANI_U8 *command +) +{ + tANI_U8 *pDest; + tANI_U32 count = 0; + tANI_U32 len = 0; + tANI_U32 cur_len = 0; + tANI_U32 rem_len = 0; + eHalStatus halStatus; + unsigned long rc; + tSirTriggerBatchScanResultInd *pReq; + + pReq = &pAdapter->hddTriggerBatchScanResultInd; + pReq->param = 0;/*batch scan client*/ + pDest = (tANI_U8 *)(command + pPrivData->used_len); + pAdapter->hdd_wait_for_get_batch_scan_rsp = FALSE; + + cur_len = pPrivData->used_len; + if (pPrivData->total_len > pPrivData->used_len) + { + rem_len = pPrivData->total_len - pPrivData->used_len; + } + else + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: Invalid user data buffer total_len %d used_len %d", + __func__, pPrivData->total_len, pPrivData->used_len); + return -EFAULT; + } + + mutex_lock(&pAdapter->hdd_batch_scan_lock); + len = hdd_populate_user_batch_scan_rsp(pAdapter, pDest, + cur_len, rem_len); + mutex_unlock(&pAdapter->hdd_batch_scan_lock); + + /*enough scan result available in cache to return to user space or + scan result needs to be fetched 1st from fw and then return*/ + if (len == cur_len) + { + pAdapter->hdd_wait_for_get_batch_scan_rsp = TRUE; + halStatus = sme_TriggerBatchScanResultInd( + WLAN_HDD_GET_HAL_CTX(pAdapter), pReq, + pAdapter->sessionId, hdd_batch_scan_result_ind_callback, + pAdapter); + if ( eHAL_STATUS_SUCCESS == halStatus ) + { + if (TRUE == pAdapter->hdd_wait_for_get_batch_scan_rsp) + { + INIT_COMPLETION(pAdapter->hdd_get_batch_scan_req_var); + rc = wait_for_completion_timeout( + &pAdapter->hdd_get_batch_scan_req_var, + msecs_to_jiffies(HDD_GET_BATCH_SCAN_RSP_TIME_OUT)); + if (0 == rc) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: Timeout waiting to fetch batch scan rsp from fw", + __func__); + return -EFAULT; + } + } + + len = snprintf(pDest, HDD_BATCH_SCAN_AP_META_INFO_SIZE, + "scancount=%u\n", pAdapter->numScanList); + pDest += len; + cur_len += len; + + mutex_lock(&pAdapter->hdd_batch_scan_lock); + len = hdd_populate_user_batch_scan_rsp(pAdapter, pDest, + cur_len, rem_len); + mutex_unlock(&pAdapter->hdd_batch_scan_lock); + + count = 0; + len = (len - pPrivData->used_len); + pDest = (command + pPrivData->used_len); + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "NEW BATCH SCAN RESULT:"); + while(count < len) + { + printk("%c", *(pDest + count)); + count++; + } + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: copy %d data to user buffer", __func__, len); + if (copy_to_user(pPrivData->buf, pDest, len)) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: failed to copy data to user buffer", __func__); + return -EFAULT; + } + } + else + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "sme_GetBatchScanScan returned failure halStatus %d", + halStatus); + return -EINVAL; + } + } + else + { + count = 0; + len = (len - pPrivData->used_len); + pDest = (command + pPrivData->used_len); + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "REMAINING TRUNCATED BATCH SCAN RESULT:"); + while(count < len) + { + printk("%c", *(pDest + count)); + count++; + } + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: copy %d data to user buffer", __func__, len); + if (copy_to_user(pPrivData->buf, pDest, len)) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: failed to copy data to user buffer", __func__); + return -EFAULT; + } + } + + return 0; +} /*End of hdd_return_batch_scan_rsp_to_user*/ + +#endif/*End of FEATURE_WLAN_BATCH_SCAN*/ + +#ifdef FEATURE_CESIUM_PROPRIETARY +static tANI_BOOLEAN hdd_find_ibss_prop_ie(tANI_U8 *addIePtr, tANI_U32 addIeLen) +{ + v_U8_t *iePtr = addIePtr; + tANI_U32 ieLen = addIeLen; + + while (ieLen > 2) { + /* Clear the IBSS prop IE if present in beacon and probe rsp ADD IE */ + if ((iePtr = (v_U8_t *)wlan_hdd_cfg80211_get_ie_ptr(iePtr, + ieLen, WLAN_HDD_IBSS_PROP_VENDOR_ID)) != NULL) { + + if (WLAN_HDD_IBSS_PROP_OUI_DATA_LEN == *(iePtr + 1)) { + if ((ibssPropIe[0] == *(iePtr + 2)) && + (ibssPropIe[1] == *(iePtr + 3)) && + (ibssPropIe[2] == *(iePtr + 4))) { + + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s:clearing IBSS_PROP_IE", __func__); + + vos_mem_zero((iePtr + 2), *(iePtr + 1)); + return 1; + } + } // End of if (0x5 == *(iePtr + 1)) + } // End of if ((iePtr = (v_U8_t *) + else { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: IBSS_PROP_IE is not present in IE", __func__); + return 0; + } + ieLen -= (*(iePtr + 1) + 2); + iePtr += (*(iePtr + 1) + 2); + } // while + return 0; +} +#endif + +int hdd_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) +{ + hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + hdd_priv_data_t priv_data; + tANI_U8 *command = NULL; + int ret = 0; + + if (NULL == pAdapter) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s: HDD adapter context is Null", __func__); + ret = -ENODEV; + goto exit; + } + + if ((!ifr) || (!ifr->ifr_data)) + { + ret = -EINVAL; + goto exit; + } + + if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s:LOGP in Progress. Ignore!!!", __func__); + ret = -EBUSY; + goto exit; + } + + if (copy_from_user(&priv_data, ifr->ifr_data, sizeof(hdd_priv_data_t))) + { + ret = -EFAULT; + goto exit; + } + + if (priv_data.total_len <= 0) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, + "%s:invalid priv_data.total_len(%d)!!!", __func__, + priv_data.total_len); + ret = -EINVAL; + goto exit; + } + + /* Allocate +1 for '\0' */ + command = kmalloc(priv_data.total_len + 1, GFP_KERNEL); + if (!command) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s: failed to allocate memory\n", __func__); + ret = -ENOMEM; + goto exit; + } + + if (copy_from_user(command, priv_data.buf, priv_data.total_len)) + { + ret = -EFAULT; + goto exit; + } + + /* Making sure the command is NUL-terminated */ + command[priv_data.total_len] = '\0'; + + if ((SIOCDEVPRIVATE + 1) == cmd) + { + hdd_context_t *pHddCtx = (hdd_context_t*)pAdapter->pHddCtx; + + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s: Received %s cmd from Wi-Fi GUI***", __func__, command); + + if (strncmp(command, "P2P_DEV_ADDR", 12) == 0 ) + { + if (copy_to_user(priv_data.buf, pHddCtx->p2pDeviceAddress.bytes, + sizeof(tSirMacAddr))) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s: failed to copy data to user buffer\n", __func__); + ret = -EFAULT; + } + } + else if(strncmp(command, "SETBAND", 7) == 0) + { + tANI_U8 *ptr = command ; + int ret = 0 ; + + /* Change band request received */ + + /* First 8 bytes will have "SETBAND " and + * 9 byte will have band setting value */ + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s: SetBandCommand Info comm %s UL %d, TL %d", __func__, command, priv_data.used_len, priv_data.total_len); + /* Change band request received */ + ret = hdd_setBand_helper(dev, ptr); + } + else if(strncmp(command, "SETWMMPS", 8) == 0) + { + tANI_U8 *ptr = command; + ret = hdd_wmmps_helper(pAdapter, ptr); + } + else if ( strncasecmp(command, "COUNTRY", 7) == 0 ) + { + char *country_code; + + country_code = command + 8; + + INIT_COMPLETION(pAdapter->change_country_code); + hdd_checkandupdate_dfssetting(pAdapter, country_code); +#ifndef CONFIG_ENABLE_LINUX_REG + hdd_checkandupdate_phymode(pAdapter, country_code); +#endif + ret = (int)sme_ChangeCountryCode(pHddCtx->hHal, + (void *)(tSmeChangeCountryCallback) + wlan_hdd_change_country_code_callback, + country_code, pAdapter, pHddCtx->pvosContext, eSIR_TRUE, eSIR_TRUE); + if (eHAL_STATUS_SUCCESS == ret) + { + ret = wait_for_completion_interruptible_timeout( + &pAdapter->change_country_code, + msecs_to_jiffies(WLAN_WAIT_TIME_COUNTRY)); + if (0 >= ret) + { + hddLog(VOS_TRACE_LEVEL_ERROR, "%s: SME while setting country code timed out", + __func__); + } + } + else + { + VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, + "%s: SME Change Country code fail ret=%d", __func__, ret); + ret = -EINVAL; + } + + } + /* + command should be a string having format + SET_SAP_CHANNEL_LIST + */ + else if(strncmp(command, "SET_SAP_CHANNEL_LIST", 20) == 0) + { + tANI_U8 *ptr = command; + + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + " Received Command to Set Preferred Channels for SAP in %s", __func__); + + ret = sapSetPreferredChannel(ptr); + } + else if(strncmp(command, "SETSUSPENDMODE", 14) == 0) + { #ifndef QCA_WIFI_2_0 int suspend = 0; tANI_U8 *ptr = (tANI_U8*)command + 15; - suspend = *ptr - '0'; - hdd_set_wlan_suspend_mode(suspend); + suspend = *ptr - '0'; + hdd_set_wlan_suspend_mode(suspend); +#endif + } +#ifdef WLAN_FEATURE_NEIGHBOR_ROAMING + else if (strncmp(command, "SETROAMTRIGGER", 14) == 0) + { + tANI_U8 *value = command; + tANI_S8 rssi = 0; + tANI_U8 lookUpThreshold = CFG_NEIGHBOR_LOOKUP_RSSI_THRESHOLD_DEFAULT; + eHalStatus status = eHAL_STATUS_SUCCESS; + + /* Move pointer to ahead of SETROAMTRIGGER */ + value = value + 15; + + /* Convert the value from ascii to integer */ + ret = kstrtos8(value, 10, &rssi); + if (ret < 0) + { + /* If the input value is greater than max value of datatype, then also + kstrtou8 fails */ + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: kstrtou8 failed Input value may be out of range[%d - %d]", + __func__, + CFG_NEIGHBOR_LOOKUP_RSSI_THRESHOLD_MIN, + CFG_NEIGHBOR_LOOKUP_RSSI_THRESHOLD_MAX); + ret = -EINVAL; + goto exit; + } + + lookUpThreshold = abs(rssi); + + if ((lookUpThreshold < CFG_NEIGHBOR_LOOKUP_RSSI_THRESHOLD_MIN) || + (lookUpThreshold > CFG_NEIGHBOR_LOOKUP_RSSI_THRESHOLD_MAX)) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "Neighbor lookup threshold value %d is out of range" + " (Min: %d Max: %d)", lookUpThreshold, + CFG_NEIGHBOR_LOOKUP_RSSI_THRESHOLD_MIN, + CFG_NEIGHBOR_LOOKUP_RSSI_THRESHOLD_MAX); + ret = -EINVAL; + goto exit; + } + + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s: Received Command to Set Roam trigger" + " (Neighbor lookup threshold) = %d", __func__, lookUpThreshold); + + pHddCtx->cfg_ini->nNeighborLookupRssiThreshold = lookUpThreshold; + status = sme_setNeighborLookupRssiThreshold((tHalHandle)(pHddCtx->hHal), lookUpThreshold); + if (eHAL_STATUS_SUCCESS != status) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: Failed to set roam trigger, try again", __func__); + ret = -EPERM; + goto exit; + } + + /* Set Reassoc threshold to (lookup rssi threshold + 5 dBm) */ + sme_setNeighborReassocRssiThreshold((tHalHandle)(pHddCtx->hHal), lookUpThreshold + 5); + } + else if (strncmp(command, "GETROAMTRIGGER", 14) == 0) + { + tANI_U8 lookUpThreshold = sme_getNeighborLookupRssiThreshold((tHalHandle)(pHddCtx->hHal)); + int rssi = (-1) * lookUpThreshold; + char extra[32]; + tANI_U8 len = 0; + + len = scnprintf(extra, sizeof(extra), "%s %d", command, rssi); + if (copy_to_user(priv_data.buf, &extra, len + 1)) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: failed to copy data to user buffer", __func__); + ret = -EFAULT; + goto exit; + } + } + else if (strncmp(command, "SETROAMSCANPERIOD", 17) == 0) + { + tANI_U8 *value = command; + tANI_U8 roamScanPeriod = 0; + tANI_U16 neighborEmptyScanRefreshPeriod = CFG_EMPTY_SCAN_REFRESH_PERIOD_DEFAULT; + + /* input refresh period is in terms of seconds */ + /* Move pointer to ahead of SETROAMSCANPERIOD */ + value = value + 18; + /* Convert the value from ascii to integer */ + ret = kstrtou8(value, 10, &roamScanPeriod); + if (ret < 0) + { + /* If the input value is greater than max value of datatype, then also + kstrtou8 fails */ + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: kstrtou8 failed Input value may be out of range[%d - %d]", + __func__, + (CFG_EMPTY_SCAN_REFRESH_PERIOD_MIN/1000), + (CFG_EMPTY_SCAN_REFRESH_PERIOD_MAX/1000)); + ret = -EINVAL; + goto exit; + } + + if ((roamScanPeriod < (CFG_EMPTY_SCAN_REFRESH_PERIOD_MIN/1000)) || + (roamScanPeriod > (CFG_EMPTY_SCAN_REFRESH_PERIOD_MAX/1000))) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "Roam scan period value %d is out of range" + " (Min: %d Max: %d)", roamScanPeriod, + (CFG_EMPTY_SCAN_REFRESH_PERIOD_MIN/1000), + (CFG_EMPTY_SCAN_REFRESH_PERIOD_MAX/1000)); + ret = -EINVAL; + goto exit; + } + neighborEmptyScanRefreshPeriod = roamScanPeriod * 1000; + + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s: Received Command to Set roam scan period" + " (Empty Scan refresh period) = %d", __func__, roamScanPeriod); + + pHddCtx->cfg_ini->nEmptyScanRefreshPeriod = neighborEmptyScanRefreshPeriod; + sme_UpdateEmptyScanRefreshPeriod((tHalHandle)(pHddCtx->hHal), neighborEmptyScanRefreshPeriod); + } + else if (strncmp(command, "GETROAMSCANPERIOD", 17) == 0) + { + tANI_U16 nEmptyScanRefreshPeriod = sme_getEmptyScanRefreshPeriod((tHalHandle)(pHddCtx->hHal)); + char extra[32]; + tANI_U8 len = 0; + + len = scnprintf(extra, sizeof(extra), "%s %d", + "GETROAMSCANPERIOD", (nEmptyScanRefreshPeriod/1000)); + /* Returned value is in units of seconds */ + if (copy_to_user(priv_data.buf, &extra, len + 1)) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: failed to copy data to user buffer", __func__); + ret = -EFAULT; + goto exit; + } + } + else if (strncmp(command, "SETROAMSCANREFRESHPERIOD", 24) == 0) + { + tANI_U8 *value = command; + tANI_U8 roamScanRefreshPeriod = 0; + tANI_U16 neighborScanRefreshPeriod = CFG_NEIGHBOR_SCAN_RESULTS_REFRESH_PERIOD_DEFAULT; + + /* input refresh period is in terms of seconds */ + /* Move pointer to ahead of SETROAMSCANREFRESHPERIOD */ + value = value + 25; + + /* Convert the value from ascii to integer */ + ret = kstrtou8(value, 10, &roamScanRefreshPeriod); + if (ret < 0) + { + /* If the input value is greater than max value of datatype, then also + kstrtou8 fails */ + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: kstrtou8 failed Input value may be out of range[%d - %d]", + __func__, + (CFG_NEIGHBOR_SCAN_RESULTS_REFRESH_PERIOD_MIN/1000), + (CFG_NEIGHBOR_SCAN_RESULTS_REFRESH_PERIOD_MAX/1000)); + ret = -EINVAL; + goto exit; + } + + if ((roamScanRefreshPeriod < (CFG_NEIGHBOR_SCAN_RESULTS_REFRESH_PERIOD_MIN/1000)) || + (roamScanRefreshPeriod > (CFG_NEIGHBOR_SCAN_RESULTS_REFRESH_PERIOD_MAX/1000))) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "Neighbor scan results refresh period value %d is out of range" + " (Min: %d Max: %d)", roamScanRefreshPeriod, + (CFG_NEIGHBOR_SCAN_RESULTS_REFRESH_PERIOD_MIN/1000), + (CFG_NEIGHBOR_SCAN_RESULTS_REFRESH_PERIOD_MAX/1000)); + ret = -EINVAL; + goto exit; + } + neighborScanRefreshPeriod = roamScanRefreshPeriod * 1000; + + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s: Received Command to Set roam scan refresh period" + " (Scan refresh period) = %d", __func__, roamScanRefreshPeriod); + + pHddCtx->cfg_ini->nNeighborResultsRefreshPeriod = neighborScanRefreshPeriod; + sme_setNeighborScanRefreshPeriod((tHalHandle)(pHddCtx->hHal), neighborScanRefreshPeriod); + } + else if (strncmp(command, "GETROAMSCANREFRESHPERIOD", 24) == 0) + { + tANI_U16 value = sme_getNeighborScanRefreshPeriod((tHalHandle)(pHddCtx->hHal)); + char extra[32]; + tANI_U8 len = 0; + + len = scnprintf(extra, sizeof(extra), "%s %d", + "GETROAMSCANREFRESHPERIOD", (value/1000)); + /* Returned value is in units of seconds */ + if (copy_to_user(priv_data.buf, &extra, len + 1)) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: failed to copy data to user buffer", __func__); + ret = -EFAULT; + goto exit; + } + } +#ifdef FEATURE_WLAN_LFR + /* SETROAMMODE */ + else if (strncmp(command, "SETROAMMODE", SIZE_OF_SETROAMMODE) == 0) + { + tANI_U8 *value = command; + tANI_BOOLEAN roamMode = CFG_LFR_FEATURE_ENABLED_DEFAULT; + + /* Move pointer to ahead of SETROAMMODE */ + value = value + SIZE_OF_SETROAMMODE + 1; + + /* Convert the value from ascii to integer */ + ret = kstrtou8(value, SIZE_OF_SETROAMMODE, &roamMode); + if (ret < 0) + { + /* If the input value is greater than max value of datatype, then also + kstrtou8 fails */ + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: kstrtou8 failed range [%d - %d]", __func__, + CFG_LFR_FEATURE_ENABLED_MIN, + CFG_LFR_FEATURE_ENABLED_MAX); + ret = -EINVAL; + goto exit; + } + if ((roamMode < CFG_LFR_FEATURE_ENABLED_MIN) || + (roamMode > CFG_LFR_FEATURE_ENABLED_MAX)) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "Roam Mode value %d is out of range" + " (Min: %d Max: %d)", roamMode, + CFG_LFR_FEATURE_ENABLED_MIN, + CFG_LFR_FEATURE_ENABLED_MAX); + ret = -EINVAL; + goto exit; + } + + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s: Received Command to Set Roam Mode = %d", __func__, roamMode); + /* + * Note that + * SETROAMMODE 0 is to enable LFR while + * SETROAMMODE 1 is to disable LFR, but + * NotifyIsFastRoamIniFeatureEnabled 0/1 is to enable/disable. + * So, we have to invert the value to call sme_UpdateIsFastRoamIniFeatureEnabled. + */ + if (CFG_LFR_FEATURE_ENABLED_MIN == roamMode) + roamMode = CFG_LFR_FEATURE_ENABLED_MAX; /* Roam enable */ + else + roamMode = CFG_LFR_FEATURE_ENABLED_MIN; /* Roam disable */ + + pHddCtx->cfg_ini->isFastRoamIniFeatureEnabled = roamMode; + sme_UpdateIsFastRoamIniFeatureEnabled((tHalHandle)(pHddCtx->hHal), roamMode); + } + /* GETROAMMODE */ + else if (strncmp(priv_data.buf, "GETROAMMODE", SIZE_OF_GETROAMMODE) == 0) + { + tANI_BOOLEAN roamMode = sme_getIsLfrFeatureEnabled((tHalHandle)(pHddCtx->hHal)); + char extra[32]; + tANI_U8 len = 0; + + /* + * roamMode value shall be inverted because the sementics is different. + */ + if (CFG_LFR_FEATURE_ENABLED_MIN == roamMode) + roamMode = CFG_LFR_FEATURE_ENABLED_MAX; + else + roamMode = CFG_LFR_FEATURE_ENABLED_MIN; + + len = scnprintf(extra, sizeof(extra), "%s %d", command, roamMode); + if (copy_to_user(priv_data.buf, &extra, len + 1)) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: failed to copy data to user buffer", __func__); + ret = -EFAULT; + goto exit; + } + } +#endif +#endif +#if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR) + else if (strncmp(command, "SETROAMDELTA", 12) == 0) + { + tANI_U8 *value = command; + tANI_U8 roamRssiDiff = CFG_ROAM_RSSI_DIFF_DEFAULT; + + /* Move pointer to ahead of SETROAMDELTA */ + value = value + 13; + /* Convert the value from ascii to integer */ + ret = kstrtou8(value, 10, &roamRssiDiff); + if (ret < 0) + { + /* If the input value is greater than max value of datatype, then also + kstrtou8 fails */ + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: kstrtou8 failed range [%d - %d]", __func__, + CFG_ROAM_RSSI_DIFF_MIN, + CFG_ROAM_RSSI_DIFF_MAX); + ret = -EINVAL; + goto exit; + } + + if ((roamRssiDiff < CFG_ROAM_RSSI_DIFF_MIN) || + (roamRssiDiff > CFG_ROAM_RSSI_DIFF_MAX)) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "Roam rssi diff value %d is out of range" + " (Min: %d Max: %d)", roamRssiDiff, + CFG_ROAM_RSSI_DIFF_MIN, + CFG_ROAM_RSSI_DIFF_MAX); + ret = -EINVAL; + goto exit; + } + + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s: Received Command to Set roam rssi diff = %d", __func__, roamRssiDiff); + + pHddCtx->cfg_ini->RoamRssiDiff = roamRssiDiff; + sme_UpdateRoamRssiDiff((tHalHandle)(pHddCtx->hHal), roamRssiDiff); + } + else if (strncmp(priv_data.buf, "GETROAMDELTA", 12) == 0) + { + tANI_U8 roamRssiDiff = sme_getRoamRssiDiff((tHalHandle)(pHddCtx->hHal)); + char extra[32]; + tANI_U8 len = 0; + + len = scnprintf(extra, sizeof(extra), "%s %d", + command, roamRssiDiff); + if (copy_to_user(priv_data.buf, &extra, len + 1)) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: failed to copy data to user buffer", __func__); + ret = -EFAULT; + goto exit; + } + } +#endif +#if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR) + else if (strncmp(command, "GETBAND", 7) == 0) + { + int band = -1; + char extra[32]; + tANI_U8 len = 0; + hdd_getBand_helper(pHddCtx, &band); + + len = scnprintf(extra, sizeof(extra), "%s %d", command, band); + if (copy_to_user(priv_data.buf, &extra, len + 1)) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: failed to copy data to user buffer", __func__); + ret = -EFAULT; + goto exit; + } + } + else if (strncmp(command, "SETROAMSCANCHANNELS", 19) == 0) + { + tANI_U8 *value = command; + tANI_U8 ChannelList[WNI_CFG_VALID_CHANNEL_LIST_LEN] = {0}; + tANI_U8 numChannels = 0; + eHalStatus status = eHAL_STATUS_SUCCESS; + + status = hdd_parse_channellist(value, ChannelList, &numChannels); + if (eHAL_STATUS_SUCCESS != status) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: Failed to parse channel list information", __func__); + ret = -EINVAL; + goto exit; + } + + if (numChannels > WNI_CFG_VALID_CHANNEL_LIST_LEN) + { + VOS_TRACE( VOS_MODULE_ID_HDD, + VOS_TRACE_LEVEL_ERROR, + "%s: number of channels (%d) supported exceeded max (%d)", + __func__, + numChannels, + WNI_CFG_VALID_CHANNEL_LIST_LEN); + ret = -EINVAL; + goto exit; + } + status = sme_ChangeRoamScanChannelList((tHalHandle)(pHddCtx->hHal), ChannelList, + numChannels); + if (eHAL_STATUS_SUCCESS != status) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: Failed to update channel list information", __func__); + ret = -EINVAL; + goto exit; + } + } + else if (strncmp(command, "GETROAMSCANCHANNELS", 19) == 0) + { + tANI_U8 ChannelList[WNI_CFG_VALID_CHANNEL_LIST_LEN] = {0}; + tANI_U8 numChannels = 0; + tANI_U8 j = 0; + char extra[128] = {0}; + int len; + + if (eHAL_STATUS_SUCCESS != sme_getRoamScanChannelList( (tHalHandle)(pHddCtx->hHal), + ChannelList, &numChannels )) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s: failed to get roam scan channel list", __func__); + ret = -EFAULT; + goto exit; + } + /* output channel list is of the format + [Number of roam scan channels][Channel1][Channel2]... */ + /* copy the number of channels in the 0th index */ + len = scnprintf(extra, sizeof(extra), "%s %d", command, numChannels); + for (j = 0; (j < numChannels); j++) + { + len += scnprintf(extra + len, sizeof(extra) - len, " %d", + ChannelList[j]); + } + + if (copy_to_user(priv_data.buf, &extra, len + 1)) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: failed to copy data to user buffer", __func__); + ret = -EFAULT; + goto exit; + } + } + else if (strncmp(command, "GETCCXMODE", 10) == 0) + { + tANI_BOOLEAN ccxMode = sme_getIsCcxFeatureEnabled((tHalHandle)(pHddCtx->hHal)); + char extra[32]; + tANI_U8 len = 0; + + /* Check if the features OKC/CCX/11R are supported simultaneously, + then this operation is not permitted (return FAILURE) */ + if (ccxMode && + hdd_is_okc_mode_enabled(pHddCtx) && + sme_getIsFtFeatureEnabled((tHalHandle)(pHddCtx->hHal))) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, + "%s: OKC/CCX/11R are supported simultaneously" + " hence this operation is not permitted!", __func__); + ret = -EPERM; + goto exit; + } + + len = scnprintf(extra, sizeof(extra), "%s %d", + "GETCCXMODE", ccxMode); + if (copy_to_user(priv_data.buf, &extra, len + 1)) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: failed to copy data to user buffer", __func__); + ret = -EFAULT; + goto exit; + } + } + else if (strncmp(command, "GETOKCMODE", 10) == 0) + { + tANI_BOOLEAN okcMode = hdd_is_okc_mode_enabled(pHddCtx); + char extra[32]; + tANI_U8 len = 0; + + /* Check if the features OKC/CCX/11R are supported simultaneously, + then this operation is not permitted (return FAILURE) */ + if (okcMode && + sme_getIsCcxFeatureEnabled((tHalHandle)(pHddCtx->hHal)) && + sme_getIsFtFeatureEnabled((tHalHandle)(pHddCtx->hHal))) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, + "%s: OKC/CCX/11R are supported simultaneously" + " hence this operation is not permitted!", __func__); + ret = -EPERM; + goto exit; + } + + len = scnprintf(extra, sizeof(extra), "%s %d", + "GETOKCMODE", okcMode); + if (copy_to_user(priv_data.buf, &extra, len + 1)) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: failed to copy data to user buffer", __func__); + ret = -EFAULT; + goto exit; + } + } + else if (strncmp(command, "GETFASTROAM", 11) == 0) + { + tANI_BOOLEAN lfrMode = sme_getIsLfrFeatureEnabled((tHalHandle)(pHddCtx->hHal)); + char extra[32]; + tANI_U8 len = 0; + + len = scnprintf(extra, sizeof(extra), "%s %d", + "GETFASTROAM", lfrMode); + if (copy_to_user(priv_data.buf, &extra, len + 1)) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: failed to copy data to user buffer", __func__); + ret = -EFAULT; + goto exit; + } + } + else if (strncmp(command, "GETFASTTRANSITION", 17) == 0) + { + tANI_BOOLEAN ft = sme_getIsFtFeatureEnabled((tHalHandle)(pHddCtx->hHal)); + char extra[32]; + tANI_U8 len = 0; + + len = scnprintf(extra, sizeof(extra), "%s %d", + "GETFASTTRANSITION", ft); + if (copy_to_user(priv_data.buf, &extra, len + 1)) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: failed to copy data to user buffer", __func__); + ret = -EFAULT; + goto exit; + } + } + else if (strncmp(command, "SETROAMSCANCHANNELMINTIME", 25) == 0) + { + tANI_U8 *value = command; + tANI_U8 minTime = CFG_NEIGHBOR_SCAN_MIN_CHAN_TIME_DEFAULT; + + /* Move pointer to ahead of SETROAMSCANCHANNELMINTIME */ + value = value + 26; + /* Convert the value from ascii to integer */ + ret = kstrtou8(value, 10, &minTime); + if (ret < 0) + { + /* If the input value is greater than max value of datatype, then also + kstrtou8 fails */ + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: kstrtou8 failed range [%d - %d]", __func__, + CFG_NEIGHBOR_SCAN_MIN_CHAN_TIME_MIN, + CFG_NEIGHBOR_SCAN_MIN_CHAN_TIME_MAX); + ret = -EINVAL; + goto exit; + } + if ((minTime < CFG_NEIGHBOR_SCAN_MIN_CHAN_TIME_MIN) || + (minTime > CFG_NEIGHBOR_SCAN_MIN_CHAN_TIME_MAX)) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "scan min channel time value %d is out of range" + " (Min: %d Max: %d)", minTime, + CFG_NEIGHBOR_SCAN_MIN_CHAN_TIME_MIN, + CFG_NEIGHBOR_SCAN_MIN_CHAN_TIME_MAX); + ret = -EINVAL; + goto exit; + } + + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s: Received Command to change channel min time = %d", __func__, minTime); + + pHddCtx->cfg_ini->nNeighborScanMinChanTime = minTime; + sme_setNeighborScanMinChanTime((tHalHandle)(pHddCtx->hHal), minTime); + } + else if (strncmp(command, "SENDACTIONFRAME", 15) == 0) + { + tANI_U8 *value = command; + tANI_U8 channel = 0; + tANI_U8 dwellTime = 0; + tANI_U8 bufLen = 0; + tANI_U8 *buf = NULL; + tSirMacAddr targetApBssid; + eHalStatus status = eHAL_STATUS_SUCCESS; + struct ieee80211_channel chan; + tANI_U8 finalLen = 0; + tANI_U8 *finalBuf = NULL; + tANI_U8 temp = 0; + u64 cookie; + hdd_station_ctx_t *pHddStaCtx = NULL; + pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); + + /* if not associated, no need to send action frame */ + if (eConnectionState_Associated != pHddStaCtx->conn_info.connState) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "%s:Not associated!",__func__); + ret = -EINVAL; + goto exit; + } + + status = hdd_parse_send_action_frame_data(value, targetApBssid, &channel, + &dwellTime, &buf, &bufLen); + if (eHAL_STATUS_SUCCESS != status) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: Failed to parse send action frame data", __func__); + ret = -EINVAL; + goto exit; + } + + /* if the target bssid is different from currently associated AP, + then no need to send action frame */ + if (VOS_TRUE != vos_mem_compare(targetApBssid, + pHddStaCtx->conn_info.bssId, sizeof(tSirMacAddr))) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "%s:STA is not associated to this AP!",__func__); + ret = -EINVAL; + vos_mem_free(buf); + goto exit; + } + + /* if the channel number is different from operating channel then + no need to send action frame */ + if (channel != pHddStaCtx->conn_info.operationChannel) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s: channel(%d) is different from operating channel(%d)", + __func__, channel, pHddStaCtx->conn_info.operationChannel); + ret = -EINVAL; + vos_mem_free(buf); + goto exit; + } + chan.center_freq = sme_ChnToFreq(channel); + + finalLen = bufLen + 24; + finalBuf = vos_mem_malloc(finalLen); + if (NULL == finalBuf) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, "%s:memory allocation failed",__func__); + ret = -ENOMEM; + vos_mem_free(buf); + goto exit; + } + vos_mem_zero(finalBuf, finalLen); + + /* Fill subtype */ + temp = SIR_MAC_MGMT_ACTION << 4; + vos_mem_copy(finalBuf + 0, &temp, sizeof(temp)); + + /* Fill type */ + temp = SIR_MAC_MGMT_FRAME; + vos_mem_copy(finalBuf + 2, &temp, sizeof(temp)); + + /* Fill destination address (bssid of the AP) */ + vos_mem_copy(finalBuf + 4, targetApBssid, sizeof(targetApBssid)); + + /* Fill source address (STA mac address) */ + vos_mem_copy(finalBuf + 10, pAdapter->macAddressCurrent.bytes, sizeof(pAdapter->macAddressCurrent.bytes)); + + /* Fill BSSID (AP mac address) */ + vos_mem_copy(finalBuf + 16, targetApBssid, sizeof(targetApBssid)); + + /* Fill received buffer from 24th address */ + vos_mem_copy(finalBuf + 24, buf, bufLen); + + /* done with the parsed buffer */ + vos_mem_free(buf); + + wlan_hdd_action( NULL, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0)) + &(pAdapter->wdev), +#else + dev, +#endif + &chan, 0, +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,8,0)) + NL80211_CHAN_HT20, 1, #endif + dwellTime, finalBuf, finalLen, 1, + 1, &cookie ); + vos_mem_free(finalBuf); + } + else if (strncmp(command, "GETROAMSCANCHANNELMINTIME", 25) == 0) + { + tANI_U16 val = sme_getNeighborScanMinChanTime((tHalHandle)(pHddCtx->hHal)); + char extra[32]; + tANI_U8 len = 0; + + /* value is interms of msec */ + len = scnprintf(extra, sizeof(extra), "%s %d", + "GETROAMSCANCHANNELMINTIME", val); + if (copy_to_user(priv_data.buf, &extra, len + 1)) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: failed to copy data to user buffer", __func__); + ret = -EFAULT; + goto exit; + } + } + else if (strncmp(command, "SETSCANCHANNELTIME", 18) == 0) + { + tANI_U8 *value = command; + tANI_U16 maxTime = CFG_NEIGHBOR_SCAN_MAX_CHAN_TIME_DEFAULT; + tANI_U16 homeAwayTime = 0; + + /* Move pointer to ahead of SETSCANCHANNELTIME */ + value = value + 19; + /* Convert the value from ascii to integer */ + ret = kstrtou16(value, 10, &maxTime); + if (ret < 0) + { + /* If the input value is greater than max value of datatype, then also + kstrtou16 fails */ + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: kstrtou16 failed range [%d - %d]", __func__, + CFG_NEIGHBOR_SCAN_MAX_CHAN_TIME_MIN, + CFG_NEIGHBOR_SCAN_MAX_CHAN_TIME_MAX); + ret = -EINVAL; + goto exit; + } + + if ((maxTime < CFG_NEIGHBOR_SCAN_MAX_CHAN_TIME_MIN) || + (maxTime > CFG_NEIGHBOR_SCAN_MAX_CHAN_TIME_MAX)) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "lfr mode value %d is out of range" + " (Min: %d Max: %d)", maxTime, + CFG_NEIGHBOR_SCAN_MAX_CHAN_TIME_MIN, + CFG_NEIGHBOR_SCAN_MAX_CHAN_TIME_MAX); + ret = -EINVAL; + goto exit; + } + + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s: Received Command to change channel max time = %d", __func__, maxTime); + + pHddCtx->cfg_ini->nNeighborScanMaxChanTime = maxTime; + + /* Home Away Time should be atleast equal to (MaxDwell time + (2*RFS)), + * where RFS is the RF Switching time. It is twice RFS to consider the + * time to go off channel and return to the home channel. */ + homeAwayTime = sme_getRoamScanHomeAwayTime((tHalHandle)(pHddCtx->hHal)); + if (homeAwayTime < (maxTime + (2 * HDD_ROAM_SCAN_CHANNEL_SWITCH_TIME))) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, + "%s: Invalid config, Home away time(%d) is less than (twice RF switching time + channel max time)(%d)" + " Hence enforcing home away time to disable (0)", + __func__, homeAwayTime, (maxTime + (2 * HDD_ROAM_SCAN_CHANNEL_SWITCH_TIME))); + homeAwayTime = 0; + pHddCtx->cfg_ini->nRoamScanHomeAwayTime = homeAwayTime; + sme_UpdateRoamScanHomeAwayTime((tHalHandle)(pHddCtx->hHal), homeAwayTime, eANI_BOOLEAN_FALSE); + } + sme_setNeighborScanMaxChanTime((tHalHandle)(pHddCtx->hHal), maxTime); + } + else if (strncmp(command, "GETSCANCHANNELTIME", 18) == 0) + { + tANI_U16 val = sme_getNeighborScanMaxChanTime((tHalHandle)(pHddCtx->hHal)); + char extra[32]; + tANI_U8 len = 0; + + /* value is interms of msec */ + len = scnprintf(extra, sizeof(extra), "%s %d", + "GETSCANCHANNELTIME", val); + if (copy_to_user(priv_data.buf, &extra, len + 1)) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: failed to copy data to user buffer", __func__); + ret = -EFAULT; + goto exit; + } + } + else if (strncmp(command, "SETSCANHOMETIME", 15) == 0) + { + tANI_U8 *value = command; + tANI_U16 val = CFG_NEIGHBOR_SCAN_TIMER_PERIOD_DEFAULT; + + /* Move pointer to ahead of SETSCANHOMETIME */ + value = value + 16; + /* Convert the value from ascii to integer */ + ret = kstrtou16(value, 10, &val); + if (ret < 0) + { + /* If the input value is greater than max value of datatype, then also + kstrtou16 fails */ + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: kstrtou16 failed range [%d - %d]", __func__, + CFG_NEIGHBOR_SCAN_TIMER_PERIOD_MIN, + CFG_NEIGHBOR_SCAN_TIMER_PERIOD_MAX); + ret = -EINVAL; + goto exit; + } + + if ((val < CFG_NEIGHBOR_SCAN_TIMER_PERIOD_MIN) || + (val > CFG_NEIGHBOR_SCAN_TIMER_PERIOD_MAX)) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "scan home time value %d is out of range" + " (Min: %d Max: %d)", val, + CFG_NEIGHBOR_SCAN_TIMER_PERIOD_MIN, + CFG_NEIGHBOR_SCAN_TIMER_PERIOD_MAX); + ret = -EINVAL; + goto exit; + } + + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s: Received Command to change scan home time = %d", __func__, val); + + pHddCtx->cfg_ini->nNeighborScanPeriod = val; + sme_setNeighborScanPeriod((tHalHandle)(pHddCtx->hHal), val); + } + else if (strncmp(command, "GETSCANHOMETIME", 15) == 0) + { + tANI_U16 val = sme_getNeighborScanPeriod((tHalHandle)(pHddCtx->hHal)); + char extra[32]; + tANI_U8 len = 0; + + /* value is interms of msec */ + len = scnprintf(extra, sizeof(extra), "%s %d", + "GETSCANHOMETIME", val); + if (copy_to_user(priv_data.buf, &extra, len + 1)) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: failed to copy data to user buffer", __func__); + ret = -EFAULT; + goto exit; + } + } + else if (strncmp(command, "SETROAMINTRABAND", 16) == 0) + { + tANI_U8 *value = command; + tANI_U8 val = CFG_ROAM_INTRA_BAND_DEFAULT; + + /* Move pointer to ahead of SETROAMINTRABAND */ + value = value + 17; + /* Convert the value from ascii to integer */ + ret = kstrtou8(value, 10, &val); + if (ret < 0) + { + /* If the input value is greater than max value of datatype, then also + kstrtou8 fails */ + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: kstrtou8 failed range [%d - %d]", __func__, + CFG_ROAM_INTRA_BAND_MIN, + CFG_ROAM_INTRA_BAND_MAX); + ret = -EINVAL; + goto exit; + } + + if ((val < CFG_ROAM_INTRA_BAND_MIN) || + (val > CFG_ROAM_INTRA_BAND_MAX)) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "intra band mode value %d is out of range" + " (Min: %d Max: %d)", val, + CFG_ROAM_INTRA_BAND_MIN, + CFG_ROAM_INTRA_BAND_MAX); + ret = -EINVAL; + goto exit; + } + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s: Received Command to change intra band = %d", __func__, val); + + pHddCtx->cfg_ini->nRoamIntraBand = val; + sme_setRoamIntraBand((tHalHandle)(pHddCtx->hHal), val); + } + else if (strncmp(command, "GETROAMINTRABAND", 16) == 0) + { + tANI_U16 val = sme_getRoamIntraBand((tHalHandle)(pHddCtx->hHal)); + char extra[32]; + tANI_U8 len = 0; + + /* value is interms of msec */ + len = scnprintf(extra, sizeof(extra), "%s %d", + "GETROAMINTRABAND", val); + if (copy_to_user(priv_data.buf, &extra, len + 1)) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: failed to copy data to user buffer", __func__); + ret = -EFAULT; + goto exit; + } + } + else if (strncmp(command, "SETSCANNPROBES", 14) == 0) + { + tANI_U8 *value = command; + tANI_U8 nProbes = CFG_ROAM_SCAN_N_PROBES_DEFAULT; + + /* Move pointer to ahead of SETSCANNPROBES */ + value = value + 15; + /* Convert the value from ascii to integer */ + ret = kstrtou8(value, 10, &nProbes); + if (ret < 0) + { + /* If the input value is greater than max value of datatype, then also + kstrtou8 fails */ + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: kstrtou8 failed range [%d - %d]", __func__, + CFG_ROAM_SCAN_N_PROBES_MIN, + CFG_ROAM_SCAN_N_PROBES_MAX); + ret = -EINVAL; + goto exit; + } + + if ((nProbes < CFG_ROAM_SCAN_N_PROBES_MIN) || + (nProbes > CFG_ROAM_SCAN_N_PROBES_MAX)) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "NProbes value %d is out of range" + " (Min: %d Max: %d)", nProbes, + CFG_ROAM_SCAN_N_PROBES_MIN, + CFG_ROAM_SCAN_N_PROBES_MAX); + ret = -EINVAL; + goto exit; + } + + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s: Received Command to Set nProbes = %d", __func__, nProbes); + + pHddCtx->cfg_ini->nProbes = nProbes; + sme_UpdateRoamScanNProbes((tHalHandle)(pHddCtx->hHal), nProbes); + } + else if (strncmp(priv_data.buf, "GETSCANNPROBES", 14) == 0) + { + tANI_U8 val = sme_getRoamScanNProbes((tHalHandle)(pHddCtx->hHal)); + char extra[32]; + tANI_U8 len = 0; + + len = scnprintf(extra, sizeof(extra), "%s %d", command, val); + if (copy_to_user(priv_data.buf, &extra, len + 1)) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: failed to copy data to user buffer", __func__); + ret = -EFAULT; + goto exit; + } } -#ifdef WLAN_FEATURE_NEIGHBOR_ROAMING - else if (strncmp(command, "SETROAMTRIGGER", 14) == 0) + else if (strncmp(command, "SETSCANHOMEAWAYTIME", 19) == 0) { tANI_U8 *value = command; - int rssi = 0; - tANI_U8 lookUpThreshold = CFG_NEIGHBOR_LOOKUP_RSSI_THRESHOLD_DEFAULT; - eHalStatus status = eHAL_STATUS_SUCCESS; + tANI_U16 homeAwayTime = CFG_ROAM_SCAN_HOME_AWAY_TIME_DEFAULT; + tANI_U16 scanChannelMaxTime = 0; - /* Move pointer to ahead of SETROAMTRIGGER */ - value = value + 15; + /* Move pointer to ahead of SETSCANHOMEAWAYTIME */ + /* input value is in units of msec */ + value = value + 20; + /* Convert the value from ascii to integer */ + ret = kstrtou16(value, 10, &homeAwayTime); + if (ret < 0) + { + /* If the input value is greater than max value of datatype, then also + kstrtou8 fails */ + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: kstrtou8 failed range [%d - %d]", __func__, + CFG_ROAM_SCAN_HOME_AWAY_TIME_MIN, + CFG_ROAM_SCAN_HOME_AWAY_TIME_MAX); + ret = -EINVAL; + goto exit; + } - sscanf(value, "%d", &rssi); - lookUpThreshold = abs(rssi); - if ((lookUpThreshold < CFG_NEIGHBOR_LOOKUP_RSSI_THRESHOLD_MIN) || - (lookUpThreshold > CFG_NEIGHBOR_LOOKUP_RSSI_THRESHOLD_MAX)) + if ((homeAwayTime < CFG_ROAM_SCAN_HOME_AWAY_TIME_MIN) || + (homeAwayTime > CFG_ROAM_SCAN_HOME_AWAY_TIME_MAX)) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "Neighbor lookup threshold value %d is out of range" - " (Min: %d Max: %d)", lookUpThreshold, - CFG_NEIGHBOR_LOOKUP_RSSI_THRESHOLD_MIN, - CFG_NEIGHBOR_LOOKUP_RSSI_THRESHOLD_MAX); + "homeAwayTime value %d is out of range" + " (Min: %d Max: %d)", homeAwayTime, + CFG_ROAM_SCAN_HOME_AWAY_TIME_MIN, + CFG_ROAM_SCAN_HOME_AWAY_TIME_MAX); ret = -EINVAL; goto exit; } VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: Received Command to Set Roam trigger" - " (Neighbor lookup threshold) = %d", __func__, lookUpThreshold); + "%s: Received Command to Set scan away time = %d", __func__, homeAwayTime); - pHddCtx->cfg_ini->nNeighborLookupRssiThreshold = lookUpThreshold; - status = sme_setNeighborLookupRssiThreshold((tHalHandle)(pHddCtx->hHal), lookUpThreshold); + /* Home Away Time should be atleast equal to (MaxDwell time + (2*RFS)), + * where RFS is the RF Switching time. It is twice RFS to consider the + * time to go off channel and return to the home channel. */ + scanChannelMaxTime = sme_getNeighborScanMaxChanTime((tHalHandle)(pHddCtx->hHal)); + if (homeAwayTime < (scanChannelMaxTime + (2 * HDD_ROAM_SCAN_CHANNEL_SWITCH_TIME))) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, + "%s: Invalid config, Home away time(%d) is less than (twice RF switching time + channel max time)(%d)" + " Hence enforcing home away time to disable (0)", + __func__, homeAwayTime, (scanChannelMaxTime + (2 * HDD_ROAM_SCAN_CHANNEL_SWITCH_TIME))); + homeAwayTime = 0; + } + + if (pHddCtx->cfg_ini->nRoamScanHomeAwayTime != homeAwayTime) + { + pHddCtx->cfg_ini->nRoamScanHomeAwayTime = homeAwayTime; + sme_UpdateRoamScanHomeAwayTime((tHalHandle)(pHddCtx->hHal), homeAwayTime, eANI_BOOLEAN_TRUE); + } + } + else if (strncmp(priv_data.buf, "GETSCANHOMEAWAYTIME", 19) == 0) + { + tANI_U16 val = sme_getRoamScanHomeAwayTime((tHalHandle)(pHddCtx->hHal)); + char extra[32]; + tANI_U8 len = 0; + + len = scnprintf(extra, sizeof(extra), "%s %d", command, val); + if (copy_to_user(priv_data.buf, &extra, len + 1)) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: failed to copy data to user buffer", __func__); + ret = -EFAULT; + goto exit; + } + } + else if (strncmp(command, "REASSOC", 7) == 0) + { + tANI_U8 *value = command; + tANI_U8 channel = 0; + tSirMacAddr targetApBssid; + eHalStatus status = eHAL_STATUS_SUCCESS; +#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD + tCsrHandoffRequest handoffInfo; +#endif + hdd_station_ctx_t *pHddStaCtx = NULL; + pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); + + /* if not associated, no need to proceed with reassoc */ + if (eConnectionState_Associated != pHddStaCtx->conn_info.connState) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "%s:Not associated!",__func__); + ret = -EINVAL; + goto exit; + } + + status = hdd_parse_reassoc_command_data(value, targetApBssid, &channel); if (eHAL_STATUS_SUCCESS != status) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: Failed to set roam trigger, try again", __func__); - ret = -EPERM; + "%s: Failed to parse reassoc command data", __func__); + ret = -EINVAL; goto exit; } - /* Set Reassoc threshold to (lookup rssi threshold + 5 dBm) */ - sme_setNeighborReassocRssiThreshold((tHalHandle)(pHddCtx->hHal), lookUpThreshold + 5); + /* if the target bssid is same as currently associated AP, + then no need to proceed with reassoc */ + if (VOS_TRUE == vos_mem_compare(targetApBssid, + pHddStaCtx->conn_info.bssId, sizeof(tSirMacAddr))) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "%s:Reassoc BSSID is same as currently associated AP bssid",__func__); + ret = -EINVAL; + goto exit; + } + + /* Check channel number is a valid channel number */ + if(VOS_STATUS_SUCCESS != + wlan_hdd_validate_operation_channel(pAdapter, channel)) + { + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s: Invalid Channel [%d] \n", __func__, channel); + return -EINVAL; + } + + /* Proceed with reassoc */ +#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD + handoffInfo.channel = channel; + vos_mem_copy(handoffInfo.bssid, targetApBssid, sizeof(tSirMacAddr)); + sme_HandoffRequest(pHddCtx->hHal, &handoffInfo); +#endif } - else if (strncmp(command, "GETROAMTRIGGER", 14) == 0) + else if (strncmp(command, "SETWESMODE", 10) == 0) { - tANI_U8 lookUpThreshold = sme_getNeighborLookupRssiThreshold((tHalHandle)(pHddCtx->hHal)); - int rssi = (-1) * lookUpThreshold; + tANI_U8 *value = command; + tANI_BOOLEAN wesMode = CFG_ENABLE_WES_MODE_NAME_DEFAULT; + + /* Move pointer to ahead of SETWESMODE */ + value = value + 11; + /* Convert the value from ascii to integer */ + ret = kstrtou8(value, 10, &wesMode); + if (ret < 0) + { + /* If the input value is greater than max value of datatype, then also + kstrtou8 fails */ + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: kstrtou8 failed range [%d - %d]", __func__, + CFG_ENABLE_WES_MODE_NAME_MIN, + CFG_ENABLE_WES_MODE_NAME_MAX); + ret = -EINVAL; + goto exit; + } + + if ((wesMode < CFG_ENABLE_WES_MODE_NAME_MIN) || + (wesMode > CFG_ENABLE_WES_MODE_NAME_MAX)) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "WES Mode value %d is out of range" + " (Min: %d Max: %d)", wesMode, + CFG_ENABLE_WES_MODE_NAME_MIN, + CFG_ENABLE_WES_MODE_NAME_MAX); + ret = -EINVAL; + goto exit; + } + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s: Received Command to Set WES Mode rssi diff = %d", __func__, wesMode); + + pHddCtx->cfg_ini->isWESModeEnabled = wesMode; + sme_UpdateWESMode((tHalHandle)(pHddCtx->hHal), wesMode); + } + else if (strncmp(priv_data.buf, "GETWESMODE", 10) == 0) + { + tANI_BOOLEAN wesMode = sme_GetWESMode((tHalHandle)(pHddCtx->hHal)); char extra[32]; tANI_U8 len = 0; - len = snprintf(extra, sizeof(extra), "%s %d", command, rssi); + len = scnprintf(extra, sizeof(extra), "%s %d", command, wesMode); if (copy_to_user(priv_data.buf, &extra, len + 1)) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, @@ -747,223 +3585,278 @@ int hdd_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) goto exit; } } - else if (strncmp(command, "SETROAMSCANPERIOD", 17) == 0) +#endif /* WLAN_FEATURE_VOWIFI_11R || FEATURE_WLAN_CCX || FEATURE_WLAN_LFR */ +#ifdef FEATURE_WLAN_LFR + else if (strncmp(command, "SETFASTROAM", 11) == 0) { tANI_U8 *value = command; - tANI_U16 neighborEmptyScanRefreshPeriod = CFG_EMPTY_SCAN_REFRESH_PERIOD_DEFAULT; - /* input refresh period is in terms of seconds */ - /* Move pointer to ahead of SETROAMSCANPERIOD */ + tANI_U8 lfrMode = CFG_LFR_FEATURE_ENABLED_DEFAULT; + + /* Move pointer to ahead of SETFASTROAM */ + value = value + 12; + /* Convert the value from ascii to integer */ + ret = kstrtou8(value, 10, &lfrMode); + if (ret < 0) + { + /* If the input value is greater than max value of datatype, then also + kstrtou8 fails */ + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: kstrtou8 failed range [%d - %d]", __func__, + CFG_LFR_FEATURE_ENABLED_MIN, + CFG_LFR_FEATURE_ENABLED_MAX); + ret = -EINVAL; + goto exit; + } + + if ((lfrMode < CFG_LFR_FEATURE_ENABLED_MIN) || + (lfrMode > CFG_LFR_FEATURE_ENABLED_MAX)) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "lfr mode value %d is out of range" + " (Min: %d Max: %d)", lfrMode, + CFG_LFR_FEATURE_ENABLED_MIN, + CFG_LFR_FEATURE_ENABLED_MAX); + ret = -EINVAL; + goto exit; + } + + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s: Received Command to change lfr mode = %d", __func__, lfrMode); + + pHddCtx->cfg_ini->isFastRoamIniFeatureEnabled = lfrMode; + sme_UpdateIsFastRoamIniFeatureEnabled((tHalHandle)(pHddCtx->hHal), lfrMode); + } +#endif +#ifdef WLAN_FEATURE_VOWIFI_11R + else if (strncmp(command, "SETFASTTRANSITION", 17) == 0) + { + tANI_U8 *value = command; + tANI_U8 ft = CFG_FAST_TRANSITION_ENABLED_NAME_DEFAULT; + + /* Move pointer to ahead of SETFASTROAM */ value = value + 18; /* Convert the value from ascii to integer */ - ret = kstrtou16(value, 10, &neighborEmptyScanRefreshPeriod); + ret = kstrtou8(value, 10, &ft); if (ret < 0) { /* If the input value is greater than max value of datatype, then also - kstrtou16 fails */ + kstrtou8 fails */ + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: kstrtou8 failed range [%d - %d]", __func__, + CFG_FAST_TRANSITION_ENABLED_NAME_MIN, + CFG_FAST_TRANSITION_ENABLED_NAME_MAX); + ret = -EINVAL; + goto exit; + } + + if ((ft < CFG_FAST_TRANSITION_ENABLED_NAME_MIN) || + (ft > CFG_FAST_TRANSITION_ENABLED_NAME_MAX)) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "ft mode value %d is out of range" + " (Min: %d Max: %d)", ft, + CFG_FAST_TRANSITION_ENABLED_NAME_MIN, + CFG_FAST_TRANSITION_ENABLED_NAME_MAX); + ret = -EINVAL; + goto exit; + } + + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s: Received Command to change ft mode = %d", __func__, ft); + + pHddCtx->cfg_ini->isFastTransitionEnabled = ft; + sme_UpdateFastTransitionEnabled((tHalHandle)(pHddCtx->hHal), ft); + } + + else if (strncmp(command, "FASTREASSOC", 11) == 0) + { + tANI_U8 *value = command; + tSirMacAddr targetApBssid; + tANI_U8 trigger = 0; + eHalStatus status = eHAL_STATUS_SUCCESS; + hdd_station_ctx_t *pHddStaCtx = NULL; + pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); + + /* if not associated, no need to proceed with reassoc */ + if (eConnectionState_Associated != pHddStaCtx->conn_info.connState) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "%s:Not associated!",__func__); + ret = -EINVAL; + goto exit; + } + + status = hdd_parse_reassoc_command_data(value, targetApBssid, &trigger); + if (eHAL_STATUS_SUCCESS != status) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: Failed to parse reassoc command data", __func__); + ret = -EINVAL; + goto exit; + } + + /* if the target bssid is same as currently associated AP, + then no need to proceed with reassoc */ + if (VOS_TRUE == vos_mem_compare(targetApBssid, + pHddStaCtx->conn_info.bssId, sizeof(tSirMacAddr))) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s:11r Reassoc BSSID is same as currently associated AP bssid", + __func__); + ret = -EINVAL; + goto exit; + } + + /* Proceed with scan/roam */ + smeIssueFastRoamNeighborAPEvent(WLAN_HDD_GET_HAL_CTX(pAdapter), + &targetApBssid[0], + (tSmeFastRoamTrigger)(trigger)); + } +#endif +#ifdef FEATURE_WLAN_CCX + else if (strncmp(command, "SETCCXMODE", 10) == 0) + { + tANI_U8 *value = command; + tANI_U8 ccxMode = CFG_CCX_FEATURE_ENABLED_DEFAULT; + + /* Check if the features OKC/CCX/11R are supported simultaneously, + then this operation is not permitted (return FAILURE) */ + if (sme_getIsCcxFeatureEnabled((tHalHandle)(pHddCtx->hHal)) && + hdd_is_okc_mode_enabled(pHddCtx) && + sme_getIsFtFeatureEnabled((tHalHandle)(pHddCtx->hHal))) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, + "%s: OKC/CCX/11R are supported simultaneously" + " hence this operation is not permitted!", __func__); + ret = -EPERM; + goto exit; + } + + /* Move pointer to ahead of SETCCXMODE */ + value = value + 11; + /* Convert the value from ascii to integer */ + ret = kstrtou8(value, 10, &ccxMode); + if (ret < 0) + { + /* If the input value is greater than max value of datatype, then also + kstrtou8 fails */ VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: kstrtou16 failed ", - "Input value may be out of range[%d - %d]", - __func__, - (CFG_EMPTY_SCAN_REFRESH_PERIOD_MIN/1000), - (CFG_EMPTY_SCAN_REFRESH_PERIOD_MAX/1000)); + "%s: kstrtou8 failed range [%d - %d]", __func__, + CFG_CCX_FEATURE_ENABLED_MIN, + CFG_CCX_FEATURE_ENABLED_MAX); ret = -EINVAL; goto exit; } - - neighborEmptyScanRefreshPeriod = neighborEmptyScanRefreshPeriod * 1000; - if ((neighborEmptyScanRefreshPeriod < CFG_EMPTY_SCAN_REFRESH_PERIOD_MIN) || - (neighborEmptyScanRefreshPeriod > CFG_EMPTY_SCAN_REFRESH_PERIOD_MAX)) + if ((ccxMode < CFG_CCX_FEATURE_ENABLED_MIN) || + (ccxMode > CFG_CCX_FEATURE_ENABLED_MAX)) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "Neighbor empty scan results refresh period value %d is out of range" - " (Min: %d Max: %d)", neighborEmptyScanRefreshPeriod/1000, - (CFG_EMPTY_SCAN_REFRESH_PERIOD_MIN/1000), - (CFG_EMPTY_SCAN_REFRESH_PERIOD_MAX/1000)); + "Ccx mode value %d is out of range" + " (Min: %d Max: %d)", ccxMode, + CFG_CCX_FEATURE_ENABLED_MIN, + CFG_CCX_FEATURE_ENABLED_MAX); ret = -EINVAL; goto exit; } - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: Received Command to Set roam scan period" - " (Empty Scan refresh period) = %d", __func__, neighborEmptyScanRefreshPeriod/1000); - - pHddCtx->cfg_ini->nEmptyScanRefreshPeriod = neighborEmptyScanRefreshPeriod; - sme_UpdateEmptyScanRefreshPeriod((tHalHandle)(pHddCtx->hHal), neighborEmptyScanRefreshPeriod); - } - else if (strncmp(command, "GETROAMSCANPERIOD", 17) == 0) - { - tANI_U16 nEmptyScanRefreshPeriod = sme_getEmptyScanRefreshPeriod((tHalHandle)(pHddCtx->hHal)); - char extra[32]; - tANI_U8 len = 0; + "%s: Received Command to change ccx mode = %d", __func__, ccxMode); - len = snprintf(extra, sizeof(extra), "%s %d", "GETROAMSCANPERIOD", (nEmptyScanRefreshPeriod/1000)); - /* Returned value is in units of seconds */ - if (copy_to_user(priv_data.buf, &extra, len + 1)) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: failed to copy data to user buffer", __func__); - ret = -EFAULT; - goto exit; - } + pHddCtx->cfg_ini->isCcxIniFeatureEnabled = ccxMode; + sme_UpdateIsCcxFeatureEnabled((tHalHandle)(pHddCtx->hHal), ccxMode); } - else if (strncmp(command, "SETROAMSCANREFRESHPERIOD", 24) == 0) +#endif + else if (strncmp(command, "SETROAMSCANCONTROL", 18) == 0) { tANI_U8 *value = command; - tANI_U16 neighborScanRefreshPeriod = CFG_NEIGHBOR_SCAN_RESULTS_REFRESH_PERIOD_DEFAULT; - /* input refresh period is in terms of seconds */ - /* Move pointer to ahead of SETROAMSCANREFRESHPERIOD */ - value = value + 25; + tANI_BOOLEAN roamScanControl = 0; + + /* Move pointer to ahead of SETROAMSCANCONTROL */ + value = value + 19; /* Convert the value from ascii to integer */ - ret = kstrtou16(value, 10, &neighborScanRefreshPeriod); + ret = kstrtou8(value, 10, &roamScanControl); if (ret < 0) { /* If the input value is greater than max value of datatype, then also - kstrtou16 fails */ + kstrtou8 fails */ VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: kstrtou16 failed ", - "Input value may be out of range[%d - %d]", - __func__, - (CFG_EMPTY_SCAN_REFRESH_PERIOD_MIN/1000), - (CFG_EMPTY_SCAN_REFRESH_PERIOD_MAX/1000)); + "%s: kstrtou8 failed ", __func__); ret = -EINVAL; goto exit; } - neighborScanRefreshPeriod = neighborScanRefreshPeriod * 1000; - if ((neighborScanRefreshPeriod < CFG_EMPTY_SCAN_REFRESH_PERIOD_MIN) || - (neighborScanRefreshPeriod > CFG_EMPTY_SCAN_REFRESH_PERIOD_MAX)) + if (0 != roamScanControl) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "Neighbor scan results refresh period value %d is out of range" - " (Min: %d Max: %d)", neighborScanRefreshPeriod/1000, - (CFG_NEIGHBOR_SCAN_RESULTS_REFRESH_PERIOD_MIN/1000), - (CFG_NEIGHBOR_SCAN_RESULTS_REFRESH_PERIOD_MAX/1000)); + "roam scan control invalid value = %d", + roamScanControl); ret = -EINVAL; goto exit; } - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: Received Command to Set roam scan refresh period" - " (Scan refresh period) = %d", __func__, neighborScanRefreshPeriod/1000); + "%s: Received Command to Set roam scan control = %d", __func__, roamScanControl); - pHddCtx->cfg_ini->nNeighborResultsRefreshPeriod = neighborScanRefreshPeriod; - sme_setNeighborScanRefreshPeriod((tHalHandle)(pHddCtx->hHal), neighborScanRefreshPeriod); + sme_SetRoamScanControl((tHalHandle)(pHddCtx->hHal), roamScanControl); } - else if (strncmp(command, "GETROAMSCANREFRESHPERIOD", 24) == 0) +#ifdef FEATURE_WLAN_OKC + else if (strncmp(command, "SETOKCMODE", 10) == 0) { - tANI_U16 value = sme_getNeighborScanRefreshPeriod((tHalHandle)(pHddCtx->hHal)); - char extra[32]; - tANI_U8 len = 0; + tANI_U8 *value = command; + tANI_U8 okcMode = CFG_OKC_FEATURE_ENABLED_DEFAULT; - len = snprintf(extra, sizeof(extra), "%s %d", "GETROAMSCANREFRESHPERIOD", (value/1000)); - /* Returned value is in units of seconds */ - if (copy_to_user(priv_data.buf, &extra, len + 1)) + /* Check if the features OKC/CCX/11R are supported simultaneously, + then this operation is not permitted (return FAILURE) */ + if (sme_getIsCcxFeatureEnabled((tHalHandle)(pHddCtx->hHal)) && + hdd_is_okc_mode_enabled(pHddCtx) && + sme_getIsFtFeatureEnabled((tHalHandle)(pHddCtx->hHal))) { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: failed to copy data to user buffer", __func__); - ret = -EFAULT; + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, + "%s: OKC/CCX/11R are supported simultaneously" + " hence this operation is not permitted!", __func__); + ret = -EPERM; goto exit; } - } -#endif -#if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR) - else if (strncmp(command, "SETROAMDELTA", 12) == 0) - { - tANI_U8 *value = command; - tANI_U8 roamRssiDiff = CFG_ROAM_RSSI_DIFF_DEFAULT; - /* Move pointer to ahead of SETROAMDELTA */ - value = value + 13; + /* Move pointer to ahead of SETOKCMODE */ + value = value + 11; /* Convert the value from ascii to integer */ - ret = kstrtou8(value, 10, &roamRssiDiff); + ret = kstrtou8(value, 10, &okcMode); if (ret < 0) { /* If the input value is greater than max value of datatype, then also kstrtou8 fails */ VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, "%s: kstrtou8 failed range [%d - %d]", __func__, - CFG_ROAM_RSSI_DIFF_MIN, - CFG_ROAM_RSSI_DIFF_MAX); + CFG_OKC_FEATURE_ENABLED_MIN, + CFG_OKC_FEATURE_ENABLED_MAX); ret = -EINVAL; goto exit; } - if ((roamRssiDiff < CFG_ROAM_RSSI_DIFF_MIN) || - (roamRssiDiff > CFG_ROAM_RSSI_DIFF_MAX)) + if ((okcMode < CFG_OKC_FEATURE_ENABLED_MIN) || + (okcMode > CFG_OKC_FEATURE_ENABLED_MAX)) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "Roam rssi diff value %d is out of range" - " (Min: %d Max: %d)", roamRssiDiff, - CFG_ROAM_RSSI_DIFF_MIN, - CFG_ROAM_RSSI_DIFF_MAX); + "Okc mode value %d is out of range" + " (Min: %d Max: %d)", okcMode, + CFG_OKC_FEATURE_ENABLED_MIN, + CFG_OKC_FEATURE_ENABLED_MAX); ret = -EINVAL; goto exit; } VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: Received Command to Set roam rssi diff = %d", __func__, roamRssiDiff); - - pHddCtx->cfg_ini->RoamRssiDiff = roamRssiDiff; - sme_UpdateRoamRssiDiff((tHalHandle)(pHddCtx->hHal), roamRssiDiff); - } - else if (strncmp(priv_data.buf, "GETROAMDELTA", 12) == 0) - { - tANI_U8 roamRssiDiff = sme_getRoamRssiDiff((tHalHandle)(pHddCtx->hHal)); - char extra[32]; - tANI_U8 len = 0; + "%s: Received Command to change okc mode = %d", __func__, okcMode); - len = snprintf(extra, sizeof(extra), "%s %d", command, roamRssiDiff); - if (copy_to_user(priv_data.buf, &extra, len + 1)) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: failed to copy data to user buffer", __func__); - ret = -EFAULT; - goto exit; - } + pHddCtx->cfg_ini->isOkcIniFeatureEnabled = okcMode; } -#endif -#if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR) - else if (strncmp(command, "GETBAND", 7) == 0) +#endif /* FEATURE_WLAN_OKC */ + else if (strncmp(priv_data.buf, "GETROAMSCANCONTROL", 18) == 0) { - int band = -1; + tANI_BOOLEAN roamScanControl = sme_GetRoamScanControl((tHalHandle)(pHddCtx->hHal)); char extra[32]; tANI_U8 len = 0; - hdd_getBand_helper(pHddCtx, &band); - - len = snprintf(extra, sizeof(extra), "%s %d", command, band); - if (copy_to_user(priv_data.buf, &extra, len + 1)) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: failed to copy data to user buffer", __func__); - ret = -EFAULT; - goto exit; - } - } - else if (strncmp(command, "GETCOUNTRYREV", 13) == 0) - { - tANI_U8 pBuf[WNI_CFG_COUNTRY_CODE_LEN]; - tANI_U8 uBufLen = WNI_CFG_COUNTRY_CODE_LEN; - tANI_U8 revision = 0; - /* The format of the data copied to the user is GETCOUNTRYREV KR 25, - hence size of the array is country code + whitespace + 2 byte revision + ASCII NUL */ - char extra[32] = {0}; - tANI_U8 len = 0; - - if (eHAL_STATUS_SUCCESS != sme_GetCountryCode( (tHalHandle)(pHddCtx->hHal), pBuf, &uBufLen )) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s: failed to get country code", __func__); - ret = -EFAULT; - goto exit; - } - pBuf[uBufLen] = '\0'; - sme_GetCountryRevision((tHalHandle)(pHddCtx->hHal), &revision); - - if (0 == strncmp(pBuf, "KR", 2)) - len = snprintf(extra, sizeof(extra), "%s %s %u", command, pBuf, revision); - else - len = snprintf(extra, sizeof(extra), "%s %s", command, pBuf); + len = scnprintf(extra, sizeof(extra), "%s %d", + command, roamScanControl); if (copy_to_user(priv_data.buf, &extra, len + 1)) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, @@ -972,110 +3865,70 @@ int hdd_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) goto exit; } } - else if (strncmp(command, "SETROAMSCANCHANNELS", 19) == 0) +#ifdef WLAN_FEATURE_PACKET_FILTERING + else if (strncmp(command, "ENABLE_PKTFILTER_IPV6", 21) == 0) { + tANI_U8 filterType = 0; tANI_U8 *value = command; - tANI_U8 ChannelList[WNI_CFG_VALID_CHANNEL_LIST_LEN] = {0}; - tANI_U8 numChannels = 0; - eHalStatus status = eHAL_STATUS_SUCCESS; - status = hdd_parse_channellist(value, ChannelList, &numChannels); - if (eHAL_STATUS_SUCCESS != status) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: Failed to parse channel list information", __func__); - ret = -EINVAL; - goto exit; - } + /* Move pointer to ahead of ENABLE_PKTFILTER_IPV6 */ + value = value + 22; - if (numChannels > WNI_CFG_VALID_CHANNEL_LIST_LEN) + /* Convert the value from ascii to integer */ + ret = kstrtou8(value, 10, &filterType); + if (ret < 0) { + /* If the input value is greater than max value of datatype, + * then also kstrtou8 fails + */ VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: number of channels (%d) supported exceeded max (%d)", __func__, - numChannels, WNI_CFG_VALID_CHANNEL_LIST_LEN); + "%s: kstrtou8 failed range ", __func__); ret = -EINVAL; goto exit; } - status = sme_ChangeRoamScanChannelList((tHalHandle)(pHddCtx->hHal), ChannelList, - numChannels); - if (eHAL_STATUS_SUCCESS != status) + + if (filterType != 0 && filterType != 1) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: Failed to update channel list information", __func__); + "%s: Accepted Values are 0 and 1 ", __func__); ret = -EINVAL; goto exit; } + wlan_hdd_setIPv6Filter(WLAN_HDD_GET_CTX(pAdapter), filterType, + pAdapter->sessionId); } - else if (strncmp(command, "GETROAMSCANCHANNELS", 19) == 0) +#endif + else if (strncmp(command, "BTCOEXMODE", 10) == 0 ) { - tANI_U8 ChannelList[WNI_CFG_VALID_CHANNEL_LIST_LEN] = {0}; - tANI_U8 numChannels = 0; - tANI_U8 j = 0; - char extra[128] = {0}; - int len; - - if (eHAL_STATUS_SUCCESS != sme_getRoamScanChannelList( (tHalHandle)(pHddCtx->hHal), - ChannelList, &numChannels )) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s: failed to get roam scan channel list", __func__); - ret = -EFAULT; - goto exit; - } - /* output channel list is of the format - [Number of roam scan channels][Channel1][Channel2]... */ - /* copy the number of channels in the 0th index */ - len = snprintf(extra, sizeof(extra), "%s %d", command, numChannels); - for (j = 0; (j < numChannels); j++) + char *dhcpPhase; + dhcpPhase = command + 12; + if ('1' == *dhcpPhase) { - len += snprintf(extra + len, sizeof(extra) - len, " %d", ChannelList[j]); + sme_DHCPStartInd(pHddCtx->hHal, pAdapter->device_mode, + pAdapter->macAddressCurrent.bytes); } - - if (copy_to_user(priv_data.buf, &extra, len + 1)) + else if ('2' == *dhcpPhase) { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: failed to copy data to user buffer", __func__); - ret = -EFAULT; - goto exit; + sme_DHCPStopInd(pHddCtx->hHal, pAdapter->device_mode, + pAdapter->macAddressCurrent.bytes); } } - else if (strncmp(command, "GETCCXMODE", 10) == 0) + else if (strncmp(command, "SCAN-ACTIVE", 11) == 0) { - tANI_BOOLEAN ccxMode = sme_getIsCcxFeatureEnabled((tHalHandle)(pHddCtx->hHal)); - char extra[32]; - tANI_U8 len = 0; - - len = snprintf(extra, sizeof(extra), "%s %d", "GETCCXMODE", ccxMode); - if (copy_to_user(priv_data.buf, &extra, len + 1)) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: failed to copy data to user buffer", __func__); - ret = -EFAULT; - goto exit; - } + pAdapter->scan_info.scan_mode = eSIR_ACTIVE_SCAN; } - else if (strncmp(command, "GETOKCMODE", 10) == 0) + else if (strncmp(command, "SCAN-PASSIVE", 12) == 0) { - tANI_BOOLEAN okcMode = hdd_is_okc_mode_enabled(pHddCtx); - char extra[32]; - tANI_U8 len = 0; - - len = snprintf(extra, sizeof(extra), "%s %d", "GETOKCMODE", okcMode); - if (copy_to_user(priv_data.buf, &extra, len + 1)) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: failed to copy data to user buffer", __func__); - ret = -EFAULT; - goto exit; - } + pAdapter->scan_info.scan_mode = eSIR_PASSIVE_SCAN; } - else if (strncmp(command, "GETFASTROAM", 10) == 0) + else if (strncmp(command, "GETDWELLTIME", 12) == 0) { - tANI_BOOLEAN lfrMode = sme_getIsLfrFeatureEnabled((tHalHandle)(pHddCtx->hHal)); + hdd_config_t *pCfg = (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini; char extra[32]; tANI_U8 len = 0; - len = snprintf(extra, sizeof(extra), "%s %d", "GETFASTROAM", lfrMode); + len = scnprintf(extra, sizeof(extra), "GETDWELLTIME %u\n", + (int)pCfg->nActiveMaxChnTime); if (copy_to_user(priv_data.buf, &extra, len + 1)) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, @@ -1083,285 +3936,745 @@ int hdd_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) ret = -EFAULT; goto exit; } + ret = len; } - else if (strncmp(command, "GETFASTTRANSITION", 17) == 0) + else if (strncmp(command, "SETDWELLTIME", 12) == 0) { - tANI_BOOLEAN ft = sme_getIsFtFeatureEnabled((tHalHandle)(pHddCtx->hHal)); - char extra[32]; - tANI_U8 len = 0; + tANI_U8 *value = command; + hdd_config_t *pCfg = (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini; + int val = 0, temp; - len = snprintf(extra, sizeof(extra), "%s %d", "GETFASTTRANSITION", ft); - if (copy_to_user(priv_data.buf, &extra, len + 1)) + value = value + 13; + temp = kstrtou32(value, 10, &val); + if ( temp != 0 || val < CFG_ACTIVE_MAX_CHANNEL_TIME_MIN || + val > CFG_ACTIVE_MAX_CHANNEL_TIME_MAX ) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: failed to copy data to user buffer", __func__); + "%s: argument passed for SETDWELLTIME is incorrect", __func__); ret = -EFAULT; goto exit; } + pCfg->nActiveMaxChnTime = val; } - else if (strncmp(command, "SETROAMSCANCHANNELMINTIME", 25) == 0) + else if ( strncasecmp(command, "MIRACAST", 8) == 0 ) { - tANI_U8 *value = command; - tANI_U8 minTime = CFG_NEIGHBOR_SCAN_MIN_CHAN_TIME_DEFAULT; + tANI_U8 filterType = 0; + tANI_U8 *value; + value = command + 9; - /* Move pointer to ahead of SETROAMSCANCHANNELMINTIME */ - value = value + 26; /* Convert the value from ascii to integer */ - ret = kstrtou8(value, 10, &minTime); + ret = kstrtou8(value, 10, &filterType); if (ret < 0) { - /* If the input value is greater than max value of datatype, then also - kstrtou8 fails */ - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: kstrtou8 failed range [%d - %d]", __func__, - CFG_NEIGHBOR_SCAN_MIN_CHAN_TIME_MIN, - CFG_NEIGHBOR_SCAN_MIN_CHAN_TIME_MAX); - ret = -EINVAL; - goto exit; + /* If the input value is greater than max value of datatype, + * then also kstrtou8 fails + */ + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: kstrtou8 failed range ", __func__); + ret = -EINVAL; + goto exit; } - if ((minTime < CFG_NEIGHBOR_SCAN_MIN_CHAN_TIME_MIN) || - (minTime > CFG_NEIGHBOR_SCAN_MIN_CHAN_TIME_MAX)) + if ((filterType < WLAN_HDD_DRIVER_MIRACAST_CFG_MIN_VAL ) || + (filterType > WLAN_HDD_DRIVER_MIRACAST_CFG_MAX_VAL)) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "scan min channel time value %d is out of range" - " (Min: %d Max: %d)", minTime, - CFG_NEIGHBOR_SCAN_MIN_CHAN_TIME_MIN, - CFG_NEIGHBOR_SCAN_MIN_CHAN_TIME_MAX); + "%s: Accepted Values are 0 to 2. 0-Disabled, 1-Source," + " 2-Sink ", __func__); ret = -EINVAL; goto exit; } - - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: Received Command to change channel min time = %d", __func__, minTime); - - pHddCtx->cfg_ini->nNeighborScanMinChanTime = minTime; - sme_setNeighborScanMinChanTime((tHalHandle)(pHddCtx->hHal), minTime); + //Filtertype value should be either 0-Disabled, 1-Source, 2-sink + pHddCtx->drvr_miracast = filterType; + hdd_tx_rx_pkt_cnt_stat_timer_handler(pHddCtx); } - else if (strncmp(command, "SENDACTIONFRAME", 15) == 0) +#ifdef FEATURE_CESIUM_PROPRIETARY + else if ((strncmp(command, "SETIBSSBEACONOUIDATA", 20) == 0) && + (WLAN_HDD_IBSS == pAdapter->device_mode)) { tANI_U8 *value = command; - tANI_U8 channel = 0; - tANI_U8 dwellTime = 0; - tANI_U8 bufLen = 0; - tANI_U8 *buf = NULL; - tSirMacAddr targetApBssid; - eHalStatus status = eHAL_STATUS_SUCCESS; - struct ieee80211_channel chan; - tANI_U8 finalLen = 0; - tANI_U8 *finalBuf = NULL; - tANI_U8 temp = 0; - u64 cookie; - hdd_station_ctx_t *pHddStaCtx = NULL; - pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); + unsigned int oui_data; + unsigned int data; + tANI_BOOLEAN found; + tHalHandle hHal = WLAN_HDD_GET_CTX(pAdapter)->hHal; + tpAniSirGlobal pMac = PMAC_STRUCT(hHal); + tANI_U32 present, len, len1, len2, len3; + tANI_U32 cfgId; + tANI_U8 addIE[WNI_CFG_PROBE_RSP_BCN_ADDNIE_DATA_LEN] = {0}; + tANI_U8 addIEData[WNI_CFG_PROBE_RSP_ADDNIE_DATA1_LEN] = {0}; + tANI_U8 ibssPropIe[WLAN_HDD_IBSS_PROP_IE_SIZE] = {0xDD,0x05,0x00,0x00,0x00,0x00,0x00}; - /* if not associated, no need to send action frame */ - if (eConnectionState_Associated != pHddStaCtx->conn_info.connState) + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s: received command %s", __func__, ((char *) value)); + + /* moving to arguments of commands */ + value = value + 21; + + sscanf(value, "%06x %04x", (unsigned int *)&oui_data, + (unsigned int *)&data); + + if (!oui_data) { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: cmd args are not provided populating existing IE", __func__); + ret = -EFAULT; + goto exit; + } + + ibssPropIe[2] = (oui_data & 0x00ff0000) >> 16; + ibssPropIe[3] = (oui_data & 0x0000ff00) >> 8; + ibssPropIe[4] = (oui_data & 0x000000ff); + + ibssPropIe[5] = (data & 0x0000ff00) >> 8; + ibssPropIe[6] = (data & 0x000000ff); + + if ((ccmCfgGetInt((WLAN_HDD_GET_CTX(pAdapter))->hHal, + WNI_CFG_PROBE_RSP_BCN_ADDNIE_FLAG, + &present)) != eHAL_STATUS_SUCCESS) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "%s:Not associated!",__func__); - ret = -EINVAL; - goto exit; + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: unable to ftch WNI_CFG_PROBE_RSP_BCN_ADDNIE_FLAG", + __func__); + ret = -EFAULT; + goto exit; } - status = hdd_parse_send_action_frame_data(value, targetApBssid, &channel, - &dwellTime, &buf, &bufLen); - if (eHAL_STATUS_SUCCESS != status) + if (present) { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: Failed to parse send action frame data", __func__); - ret = -EINVAL; - goto exit; + if((wlan_cfgGetStrLen(PMAC_STRUCT((WLAN_HDD_GET_CTX(pAdapter))->hHal), + WNI_CFG_PROBE_RSP_BCN_ADDNIE_DATA, &len)) != eSIR_SUCCESS) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s:unable to fetch WNI_CFG_PROBE_RSP_BCN_ADDNIE_LEN", + __func__); + ret = -EFAULT; + goto exit; + } + + if(len <= WNI_CFG_PROBE_RSP_BCN_ADDNIE_DATA_LEN && len && + ((len + WLAN_HDD_IBSS_PROP_IE_SIZE) <= SCH_MAX_BEACON_SIZE)) + { + + if ((ccmCfgGetStr((WLAN_HDD_GET_CTX(pAdapter))->hHal, + WNI_CFG_PROBE_RSP_BCN_ADDNIE_DATA, &addIE[0], &len)) + != eHAL_STATUS_SUCCESS) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s:unable to fetch WNI_PROBE_RSP_BCN_ADDNIE_DATA", + __func__); + ret = -EFAULT; + goto exit; + } + else { + found = hdd_find_ibss_prop_ie(addIE, len); + if (found) { + // pointing to IBSS prop IE + len -= WLAN_HDD_IBSS_PROP_IE_SIZE; + } + } + } + } + else { + len = 0; } - /* if the target bssid is different from currently associated AP, - then no need to send action frame */ - if (VOS_TRUE != vos_mem_compare(targetApBssid, - pHddStaCtx->conn_info.bssId, sizeof(tSirMacAddr))) + if (len <= WNI_CFG_PROBE_RSP_BCN_ADDNIE_DATA_LEN && + ((len + WLAN_HDD_IBSS_PROP_IE_SIZE) <= SCH_MAX_BEACON_SIZE)) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "%s:STA is not associated to this AP!",__func__); - ret = -EINVAL; - vos_mem_free(buf); - goto exit; + vos_mem_copy (&addIE[len], ibssPropIe, WLAN_HDD_IBSS_PROP_IE_SIZE); + len += WLAN_HDD_IBSS_PROP_IE_SIZE; } - /* if the channel number is different from operating channel then - no need to send action frame */ - if (channel != pHddStaCtx->conn_info.operationChannel) + if (ccmCfgSetStr((WLAN_HDD_GET_CTX(pAdapter))->hHal, + WNI_CFG_PROBE_RSP_BCN_ADDNIE_DATA, &addIE[0], len, NULL, + eANI_BOOLEAN_FALSE) != eHAL_STATUS_SUCCESS) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: channel(%d) is different from operating channel(%d)", - __func__, channel, pHddStaCtx->conn_info.operationChannel); - ret = -EINVAL; - vos_mem_free(buf); - goto exit; + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s:unable to set WNI_CFG_PRBE_RSP_BCN_ADDNIE_DATA", __func__); + ret = -EFAULT; + goto exit; + } + if (ccmCfgSetInt((WLAN_HDD_GET_CTX(pAdapter))->hHal, + WNI_CFG_PROBE_RSP_BCN_ADDNIE_FLAG, 1,NULL, + eANI_BOOLEAN_FALSE) != eHAL_STATUS_SUCCESS) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s:unble to set WNI_CFG_PROBE_RSP_BCN_ADDNIE_FLAG", __func__); + ret = -EFAULT; + goto exit; } - chan.center_freq = sme_ChnToFreq(channel); - finalLen = bufLen + 24; - finalBuf = vos_mem_malloc(finalLen); - if (NULL == finalBuf) + /* Populating probe resp frame */ + if ((ccmCfgGetInt((WLAN_HDD_GET_CTX(pAdapter))->hHal, + WNI_CFG_PROBE_RSP_ADDNIE_FLAG, + &present)) != eHAL_STATUS_SUCCESS) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, "%s:memory allocation failed",__func__); - ret = -ENOMEM; - vos_mem_free(buf); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s:unable to fetch WNI_CFG_PROBE_RSP_ADDNIE_FLAG", __func__); + ret = -EFAULT; goto exit; } - vos_mem_zero(finalBuf, finalLen); - - /* Fill subtype */ - temp = SIR_MAC_MGMT_ACTION << 4; - vos_mem_copy(finalBuf + 0, &temp, sizeof(temp)); - /* Fill type */ - temp = SIR_MAC_MGMT_FRAME; - vos_mem_copy(finalBuf + 2, &temp, sizeof(temp)); + if (present) { - /* Fill destination address (bssid of the AP) */ - vos_mem_copy(finalBuf + 4, targetApBssid, sizeof(targetApBssid)); + len1 = 0; + if (eSIR_SUCCESS != wlan_cfgGetStrLen(pMac, + WNI_CFG_PROBE_RSP_ADDNIE_DATA1, &len1)) { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: unable to fetch WNI_CFG_PROBE_RSP_ADDNIE_DATA1", + __func__); + ret = -EFAULT; + goto exit; + } + if (len1 < WNI_CFG_PROBE_RSP_ADDNIE_DATA1_LEN && len1 && + (WLAN_HDD_IBSS_PROP_IE_SIZE + len1) <= SIR_MAX_PACKET_SIZE) { + + if ((ccmCfgGetStr((WLAN_HDD_GET_CTX(pAdapter))->hHal, + WNI_CFG_PROBE_RSP_ADDNIE_DATA1, &addIEData[0], &len1)) + != eHAL_STATUS_SUCCESS) { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s:unable fetch WNI_CFG_PROBE_RSP_ADDNIE_DATA1", + __func__); + ret = -EFAULT; + goto exit; + } + else { + found = hdd_find_ibss_prop_ie(addIEData, len1); + if (found) { + // moving back to IBSS PROP IE + len1 -= WLAN_HDD_IBSS_PROP_IE_SIZE; + } + } + len = len1; + cfgId = WNI_CFG_PROBE_RSP_ADDNIE_DATA1; + goto setcfg; + } /* data 1 */ + /* reading data 2 and 3 */ + else if (WNI_CFG_PROBE_RSP_ADDNIE_DATA1_LEN == len1) { + + len2 = 0; + if (eSIR_SUCCESS != wlan_cfgGetStrLen(pMac, + WNI_CFG_PROBE_RSP_ADDNIE_DATA2, &len2) ) { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: unable to fetch PROBE_RSP_ADDNIE_DATA2", __func__); + ret = -EFAULT; + goto exit; + } + if (len2 < WNI_CFG_PROBE_RSP_ADDNIE_DATA2_LEN && len2 && + (WLAN_HDD_IBSS_PROP_IE_SIZE + len1 + len2) + <= SIR_MAX_PACKET_SIZE) { + + if ((ccmCfgGetStr((WLAN_HDD_GET_CTX(pAdapter))->hHal, + WNI_CFG_PROBE_RSP_ADDNIE_DATA2, &addIEData[0], &len2)) + != eHAL_STATUS_SUCCESS) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s:unable to fetch PROBE_RSP_ADDNIE_DATA2", __func__); + ret = -EFAULT; + goto exit; + } + else { + found = hdd_find_ibss_prop_ie(addIEData, len2); + if (found) { + // moving back to IBSS PROP IE + len2 -= WLAN_HDD_IBSS_PROP_IE_SIZE; + } + } + len = len2; + cfgId = WNI_CFG_PROBE_RSP_ADDNIE_DATA2; + goto setcfg; + } /* data 2 */ + /* reading data 3 */ + else if (WNI_CFG_PROBE_RSP_ADDNIE_DATA2_LEN == len2) { + len3 = 0; + if (eSIR_SUCCESS != wlan_cfgGetStrLen(pMac, + WNI_CFG_PROBE_RSP_ADDNIE_DATA3, &len3)) { + + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: unable to fetch PROBE_RSP_ADDNIE_DATA3", __func__); + ret = -EFAULT; + goto exit; + } + if (len3 < WNI_CFG_PROBE_RSP_ADDNIE_DATA3_LEN && len3 && + (WLAN_HDD_IBSS_PROP_IE_SIZE + len1 + len2 + len3) + <= SIR_MAX_PACKET_SIZE) { + + if ((ccmCfgGetStr((WLAN_HDD_GET_CTX(pAdapter))->hHal, + WNI_CFG_PROBE_RSP_ADDNIE_DATA3, &addIEData[0], &len3)) + != eHAL_STATUS_SUCCESS) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s:unable to ftch PROBE_RSP_ADDNIE_DATA3", __func__); + ret = -EFAULT; + goto exit; + } + else { + found = hdd_find_ibss_prop_ie(addIEData, len3); + if (found) { + // moving back to IBSS PROP IE + len3 -= WLAN_HDD_IBSS_PROP_IE_SIZE; + } + } + len = len3; + cfgId = WNI_CFG_PROBE_RSP_ADDNIE_DATA3; + goto setcfg; + } + else if (WNI_CFG_PROBE_RSP_ADDNIE_DATA3_LEN == len3) { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: cannot accomoodate in data3", __func__); + ret = -EFAULT; + goto exit; + } + } /* data 3 */ + } /* data 2 and 3 */ + } /* probe rsp ADD IE present */ + else { + /* probe rsp add IE is not present */ + len = 0; + cfgId = WNI_CFG_PROBE_RSP_ADDNIE_DATA1; + } /* else */ +setcfg: + vos_mem_copy(&addIEData[len], ibssPropIe, WLAN_HDD_IBSS_PROP_IE_SIZE); + len += WLAN_HDD_IBSS_PROP_IE_SIZE; + + if (ccmCfgSetStr(WLAN_HDD_GET_HAL_CTX(pAdapter), + cfgId, + (tANI_U8*)(&addIEData[0]), + len, NULL, + eANI_BOOLEAN_FALSE) + == eHAL_STATUS_FAILURE) { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: unable to copy to cfgID %ld", __func__, cfgId); + ret = -EFAULT; + goto exit; + } + if (ccmCfgSetInt(WLAN_HDD_GET_HAL_CTX(pAdapter), + WNI_CFG_PROBE_RSP_ADDNIE_FLAG, 1,NULL, + eANI_BOOLEAN_FALSE) == eHAL_STATUS_FAILURE) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: unable to copy WNI_CFG_PROBE_RSP_ADDNIE_FLAG", __func__); + ret = -EFAULT; + goto exit; + } + } +#endif +#ifdef WLAN_FEATURE_RELIABLE_MCAST + else if (strncmp(command, "SETRMCENABLE", 12) == 0) + { + tANI_U8 *value = command; + tANI_U8 ucRmcEnable = 0; + int status; - /* Fill BSSID (STA mac address) */ - vos_mem_copy(finalBuf + 10, pAdapter->macAddressCurrent.bytes, sizeof(pAdapter->macAddressCurrent.bytes)); + if ((WLAN_HDD_IBSS != pAdapter->device_mode) && + (WLAN_HDD_SOFTAP != pAdapter->device_mode)) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "Received SETRMCENABLE command in invalid mode %d \n" + "SETRMCENABLE command is only allowed in IBSS or SOFTAP mode", + pAdapter->device_mode); + ret = -EINVAL; + goto exit; + } - /* Fill source address (STA mac address) */ - vos_mem_copy(finalBuf + 16, pAdapter->macAddressCurrent.bytes, sizeof(pAdapter->macAddressCurrent.bytes)); + status = hdd_parse_setrmcenable_command(value, &ucRmcEnable); + if (status) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "Invalid SETRMCENABLE command "); + ret = -EINVAL; + goto exit; + } - /* Fill received buffer from 24th address */ - vos_mem_copy(finalBuf + 24, buf, bufLen); + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s: ucRmcEnable %d ", __func__, ucRmcEnable); - /* done with the parsed buffer */ - vos_mem_free(buf); + if (TRUE == ucRmcEnable) + { + status = sme_EnableReliableMcast( (tHalHandle)(pHddCtx->hHal), + pAdapter->sessionId ); + } + else if(FALSE == ucRmcEnable) + { + status = sme_DisableReliableMcast( (tHalHandle)(pHddCtx->hHal), + pAdapter->sessionId ); + } + else + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "Invalid SETRMCENABLE command %d", ucRmcEnable); + ret = -EINVAL; + goto exit; + } - wlan_hdd_action( NULL, -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0)) - &(pAdapter->wdev), -#else - dev, -#endif - &chan, 0, -#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,8,0)) - NL80211_CHAN_HT20, 1, -#endif - dwellTime, finalBuf, finalLen, 1, - 1, &cookie ); - vos_mem_free(finalBuf); + if (VOS_STATUS_SUCCESS != status) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: SETRMC %d failed status %d", __func__, ucRmcEnable, + status); + ret = -EINVAL; + goto exit; + } } - else if (strncmp(command, "GETROAMSCANCHANNELMINTIME", 25) == 0) + else if (strncmp(command, "SETRMCACTIONPERIOD", 18) == 0) { - tANI_U16 val = sme_getNeighborScanMinChanTime((tHalHandle)(pHddCtx->hHal)); - char extra[32]; - tANI_U8 len = 0; + tANI_U8 *value = command; + tANI_U32 uActionPeriod = 0; + int status; - /* value is interms of msec */ - len = snprintf(extra, sizeof(extra), "%s %d", "GETROAMSCANCHANNELMINTIME", val); - if (copy_to_user(priv_data.buf, &extra, len + 1)) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: failed to copy data to user buffer", __func__); - ret = -EFAULT; - goto exit; - } - } - else if (strncmp(command, "SETSCANCHANNELTIME", 18) == 0) - { - tANI_U8 *value = command; - tANI_U8 maxTime = CFG_NEIGHBOR_SCAN_MAX_CHAN_TIME_DEFAULT; + if ((WLAN_HDD_IBSS != pAdapter->device_mode) && + (WLAN_HDD_SOFTAP != pAdapter->device_mode)) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "Received SETRMC command in invalid mode %d \n" + "SETRMC command is only allowed in IBSS or SOFTAP mode", + pAdapter->device_mode); + ret = -EINVAL; + goto exit; + } - /* Move pointer to ahead of SETSCANCHANNELTIME */ - value = value + 19; - /* Convert the value from ascii to integer */ - ret = kstrtou8(value, 10, &maxTime); - if (ret < 0) - { - /* If the input value is greater than max value of datatype, then also - kstrtou8 fails */ - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: kstrtou8 failed range [%d - %d]", __func__, - CFG_NEIGHBOR_SCAN_MAX_CHAN_TIME_MIN, - CFG_NEIGHBOR_SCAN_MAX_CHAN_TIME_MAX); + status = hdd_parse_setrmcactionperiod_command(value, &uActionPeriod); + if (status) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "Invalid SETRMCACTIONPERIOD command "); + ret = -EINVAL; + goto exit; + } + + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s: uActionPeriod %d ", __func__, uActionPeriod); + + if (ccmCfgSetInt(pHddCtx->hHal, WNI_CFG_RMC_ACTION_PERIOD_FREQUENCY, + uActionPeriod, NULL, eANI_BOOLEAN_FALSE)) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: Could not set SETRMCACTIONPERIOD %d", __func__, uActionPeriod); + ret = -EINVAL; + goto exit; + } + + } +#ifdef FEATURE_CESIUM_PROPRIETARY + else if (strncmp(command, "GETIBSSPEERINFOALL", 18) == 0) + { + /* Peer Info All Command */ + int status = eHAL_STATUS_SUCCESS; + hdd_station_ctx_t *pHddStaCtx = NULL; + char *extra = NULL; + int idx = 0, length = 0; + v_MACADDR_t *macAddr; + v_U32_t txRateMbps = 0, numOfBytestoPrint = 0; + + if (WLAN_HDD_IBSS == pAdapter->device_mode) + { + pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); + } + else + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s: pAdapter is not valid for this device mode", + __func__); + ret = -EINVAL; + goto exit; + } + + /* if there are no peers, no need to continue with the command */ + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s: Received GETIBSSPEERINFOALL Command", __func__); + + if (eConnectionState_IbssConnected != pHddStaCtx->conn_info.connState) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s:No IBSS Peers coalesced", __func__); + ret = -EINVAL; + goto exit; + } + + /* Handle the command */ + status = hdd_cfg80211_get_ibss_peer_info_all(pAdapter); + if (VOS_STATUS_SUCCESS == status) + { + /* The variable extra needed to be allocated on the heap since + * amount of memory required to copy the data for 32 devices + * exceeds the size of 1024 bytes of default stack size. On + * 64 bit devices, the default max stack size of 2048 bytes + */ + extra = kmalloc(WLAN_MAX_BUF_SIZE, GFP_KERNEL); + + if (NULL == extra) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s:kmalloc failed", __func__); ret = -EINVAL; goto exit; - } + } - if ((maxTime < CFG_NEIGHBOR_SCAN_MAX_CHAN_TIME_MIN) || - (maxTime > CFG_NEIGHBOR_SCAN_MAX_CHAN_TIME_MAX)) - { + /* Copy number of stations */ + length = scnprintf( extra, WLAN_MAX_BUF_SIZE, "%d ", + pHddStaCtx->ibss_peer_info.numIBSSPeers); + + for (idx = 0; idx < pHddStaCtx->ibss_peer_info.numIBSSPeers; idx++) + { + macAddr = + hdd_wlan_get_ibss_mac_addr_from_staid(pAdapter, + pHddStaCtx->ibss_peer_info.ibssPeerList[idx].staIdx); + if (NULL != macAddr) + { + txRateMbps = + ((pHddStaCtx->ibss_peer_info.ibssPeerList[idx].txRate)*500*1000)/1000000; + + length += scnprintf( (extra + length), WLAN_MAX_BUF_SIZE - length, + "%02x:%02x:%02x:%02x:%02x:%02x %d %d ", + macAddr->bytes[0], macAddr->bytes[1], macAddr->bytes[2], + macAddr->bytes[3], macAddr->bytes[4], macAddr->bytes[5], + (int)txRateMbps, + (int)pHddStaCtx->ibss_peer_info.ibssPeerList[idx].rssi); + } + else + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: MAC ADDR is NULL for staIdx: %d", __func__, + pHddStaCtx->ibss_peer_info.ibssPeerList[idx].staIdx); + } + + /* + * VOS_TRACE() macro has limitation of 512 bytes for the print + * buffer. Hence printing the data in two chunks. The first chunk + * will have the data for 16 devices and the second chunk will + * have the rest. + */ + if (idx < NUM_OF_STA_DATA_TO_PRINT) + { + numOfBytestoPrint = length; + } + } + + /* + * Copy the data back into buffer, if the data to copy is + * morethan 512 bytes than we will split the data and do + * it in two shots + */ + if (copy_to_user(priv_data.buf, extra, numOfBytestoPrint)) + { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "lfr mode value %d is out of range" - " (Min: %d Max: %d)", maxTime, - CFG_NEIGHBOR_SCAN_MAX_CHAN_TIME_MIN, - CFG_NEIGHBOR_SCAN_MAX_CHAN_TIME_MAX); - ret = -EINVAL; + "%s: Copy into user data buffer failed ", __func__); + ret = -EFAULT; goto exit; - } + } + priv_data.buf[numOfBytestoPrint] = '\0'; + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_MED, + "%s", priv_data.buf); - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: Received Command to change channel max time = %d", __func__, maxTime); + if (length > numOfBytestoPrint) + { + if (copy_to_user(priv_data.buf + numOfBytestoPrint, + extra + numOfBytestoPrint, + length - numOfBytestoPrint + 1)) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: Copy into user data buffer failed ", __func__); + ret = -EFAULT; + goto exit; + } + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_MED, + "%s", &priv_data.buf[numOfBytestoPrint]); + } + + /* Free temporary buffer */ + kfree(extra); + } + + else + { + /* Command failed, log error */ + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "GETIBSSPEERINFOALL command failed with status code %d", + __func__, status); + ret = -EINVAL; + goto exit; + } + ret = 0; + } + else if(strncmp(command, "GETIBSSPEERINFO", 15) == 0) + { + /* Peer Info command */ + tANI_U8 *value = command; + VOS_STATUS status; + hdd_station_ctx_t *pHddStaCtx = NULL; + char extra[128] = { 0 }; + v_U32_t length = 0; + v_U8_t staIdx = 0; + v_U32_t txRateMbps = 0; + v_MACADDR_t peerMacAddr; + + if (WLAN_HDD_IBSS == pAdapter->device_mode) + { + pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); + } + else + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s: pAdapter is not valid for this device mode", + __func__); + ret = -EINVAL; + goto exit; + } + + /* if there are no peers, no need to continue with the command */ + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s: Received GETIBSSPEERINFO Command", __func__); + + if (eConnectionState_IbssConnected != pHddStaCtx->conn_info.connState) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s:No IBSS Peers coalesced", __func__); + ret = -EINVAL; + goto exit; + } + + /* Parse the incoming command buffer */ + status = hdd_parse_get_ibss_peer_info(value, &peerMacAddr); + if (VOS_STATUS_SUCCESS != status) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "Invalid GETIBSSPEERINFO command", __func__); + ret = -EINVAL; + goto exit; + } + + /* Get station index for the peer mac address */ + hdd_Ibss_GetStaId(pHddStaCtx, &peerMacAddr, &staIdx); + + if (staIdx < 0 || staIdx > HDD_MAX_NUM_IBSS_STA) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "Invalid StaIdx %d returned", __func__, staIdx); + ret = -EINVAL; + goto exit; + } + + /* Handle the command */ + status = hdd_cfg80211_get_ibss_peer_info(pAdapter, staIdx); + if (VOS_STATUS_SUCCESS == status) + { + v_U32_t txRate = pHddStaCtx->ibss_peer_info.ibssPeerList[0].txRate; + txRateMbps = (txRate * 500 * 1000)/1000000; - pHddCtx->cfg_ini->nNeighborScanMaxChanTime = maxTime; - sme_setNeighborScanMaxChanTime((tHalHandle)(pHddCtx->hHal), maxTime); - } - else if (strncmp(command, "GETSCANCHANNELTIME", 18) == 0) - { - tANI_U16 val = sme_getNeighborScanMaxChanTime((tHalHandle)(pHddCtx->hHal)); - char extra[32]; - tANI_U8 len = 0; + length = scnprintf( extra, sizeof(extra), "%d %d", (int)txRateMbps, + (int)pHddStaCtx->ibss_peer_info.ibssPeerList[0].rssi); - /* value is interms of msec */ - len = snprintf(extra, sizeof(extra), "%s %d", "GETSCANCHANNELTIME", val); - if (copy_to_user(priv_data.buf, &extra, len + 1)) - { + /* Copy the data back into buffer */ + if (copy_to_user(priv_data.buf, &extra, length+ 1)) + { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: failed to copy data to user buffer", __func__); + "%s: copy data to user buffer failed GETIBSSPEERINFO command", + __func__); ret = -EFAULT; goto exit; - } - } - else if (strncmp(command, "SETSCANHOMETIME", 15) == 0) + } + } + else + { + /* Command failed, log error */ + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "GETIBSSPEERINFO command failed with status code %d", + __func__, status); + ret = -EINVAL; + goto exit; + } + + /* Success ! */ + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_MED, + "%s", priv_data.buf); + ret = 0; + } +#endif /* FEATURE_CESIUM_PROPRIETARY */ + + else if (strncmp(command, "SETRMCTXRATE", 12) == 0) { - tANI_U8 *value = command; - tANI_U16 val = CFG_NEIGHBOR_SCAN_TIMER_PERIOD_DEFAULT; + tANI_U8 *value = command; + tANI_U32 uRate = 0; + tTxrateinfoflags txFlags = 0; + tSirRateUpdateInd *rateUpdateParams; + int status; + hdd_config_t *pConfig = pHddCtx->cfg_ini; + + if ((WLAN_HDD_IBSS != pAdapter->device_mode) && + (WLAN_HDD_SOFTAP != pAdapter->device_mode)) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "Received SETRMCTXRATE command in invalid mode %d \n" + "SETRMC command is only allowed in IBSS or SOFTAP mode", + pAdapter->device_mode); + ret = -EINVAL; + goto exit; + } - /* Move pointer to ahead of SETSCANHOMETIME */ - value = value + 16; - /* Convert the value from ascii to integer */ - ret = kstrtou16(value, 10, &val); - if (ret < 0) - { - /* If the input value is greater than max value of datatype, then also - kstrtou16 fails */ - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: kstrtou16 failed range [%d - %d]", __func__, - CFG_NEIGHBOR_SCAN_TIMER_PERIOD_MIN, - CFG_NEIGHBOR_SCAN_TIMER_PERIOD_MAX); - ret = -EINVAL; - goto exit; - } + status = hdd_parse_setrmcrate_command(value, &uRate, &txFlags); + if (status) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "Invalid SETRMCTXRATE command "); + ret = -EINVAL; + goto exit; + } - if ((val < CFG_NEIGHBOR_SCAN_TIMER_PERIOD_MIN) || - (val > CFG_NEIGHBOR_SCAN_TIMER_PERIOD_MAX)) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "scan home time value %d is out of range" - " (Min: %d Max: %d)", val, - CFG_NEIGHBOR_SCAN_TIMER_PERIOD_MIN, - CFG_NEIGHBOR_SCAN_TIMER_PERIOD_MAX); - ret = -EINVAL; - goto exit; - } + rateUpdateParams = vos_mem_malloc(sizeof(tSirRateUpdateInd)); + if (NULL == rateUpdateParams) + { + ret = -EINVAL; + goto exit; + } - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: Received Command to change scan home time = %d", __func__, val); + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s: uRate %d ", __func__, uRate); - pHddCtx->cfg_ini->nNeighborScanPeriod = val; - sme_setNeighborScanPeriod((tHalHandle)(pHddCtx->hHal), val); + vos_mem_zero(rateUpdateParams, sizeof(tSirRateUpdateInd )); + + /* -1 implies ignore this param */ + rateUpdateParams->ucastDataRate = -1; + + /* + * Fill the user specifieed RMC rate param + * and the derived tx flags. + */ + rateUpdateParams->nss = (pConfig->enable2x2 == 0) ? 0 : 1; + rateUpdateParams->reliableMcastDataRate = uRate; + rateUpdateParams->reliableMcastDataRateTxFlag = txFlags; + rateUpdateParams->dev_mode = pAdapter->device_mode; + rateUpdateParams->bcastDataRate = -1; + + status = sme_SendRateUpdateInd((tHalHandle)(pHddCtx->hHal), rateUpdateParams); } - else if (strncmp(command, "GETSCANHOMETIME", 15) == 0) +#endif +#ifdef FEATURE_WLAN_BATCH_SCAN + else if (strncmp(command, "WLS_BATCHING VERSION", 20) == 0) { - tANI_U16 val = sme_getNeighborScanPeriod((tHalHandle)(pHddCtx->hHal)); - char extra[32]; + char extra[32]; tANI_U8 len = 0; + tANI_U8 version = HDD_BATCH_SCAN_VERSION; - /* value is interms of msec */ - len = snprintf(extra, sizeof(extra), "%s %d", "GETSCANHOMETIME", val); + if (FALSE == sme_IsFeatureSupportedByFW(BATCH_SCAN)) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: Batch scan feature is not supported by FW", __func__); + ret = -EINVAL; + goto exit; + } + + if ((WLAN_HDD_INFRA_STATION != pAdapter->device_mode) && + (WLAN_HDD_P2P_CLIENT != pAdapter->device_mode)) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "Received WLS_BATCHING_VERSION command in invalid mode %d " + "WLS_BATCHING_VERSION is only allowed in infra STA/P2P client" + " mode", + pAdapter->device_mode); + ret = -EINVAL; + goto exit; + } + + len = scnprintf(extra, sizeof(extra), "WLS_BATCHING_VERSION %d", + version); if (copy_to_user(priv_data.buf, &extra, len + 1)) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, @@ -1369,323 +4682,462 @@ int hdd_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) ret = -EFAULT; goto exit; } + ret = HDD_BATCH_SCAN_VERSION; } - else if (strncmp(command, "SETROAMINTRABAND", 16) == 0) + else if (strncmp(command, "WLS_BATCHING SET", 16) == 0) { - tANI_U8 *value = command; - tANI_U8 val = CFG_ROAM_INTRA_BAND_DEFAULT; + int status; + tANI_U8 *value = (command + 16); + eHalStatus halStatus; + unsigned long rc; + tSirSetBatchScanReq *pReq = &pAdapter->hddSetBatchScanReq; + tSirSetBatchScanRsp *pRsp = &pAdapter->hddSetBatchScanRsp; + + if (FALSE == sme_IsFeatureSupportedByFW(BATCH_SCAN)) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: Batch scan feature is not supported by FW", __func__); + ret = -EINVAL; + goto exit; + } - /* Move pointer to ahead of SETROAMINTRABAND */ - value = value + 17; - /* Convert the value from ascii to integer */ - ret = kstrtou8(value, 10, &val); - if (ret < 0) - { - /* If the input value is greater than max value of datatype, then also - kstrtou8 fails */ - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: kstrtou8 failed range [%d - %d]", __func__, - CFG_ROAM_INTRA_BAND_MIN, - CFG_ROAM_INTRA_BAND_MAX); - ret = -EINVAL; - goto exit; - } + if ((WLAN_HDD_INFRA_STATION != pAdapter->device_mode) && + (WLAN_HDD_P2P_CLIENT != pAdapter->device_mode)) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "Received WLS_BATCHING SET command in invalid mode %d " + "WLS_BATCHING_SET is only allowed in infra STA/P2P client mode", + pAdapter->device_mode); + ret = -EINVAL; + goto exit; + } - if ((val < CFG_ROAM_INTRA_BAND_MIN) || - (val > CFG_ROAM_INTRA_BAND_MAX)) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "intra band mode value %d is out of range" - " (Min: %d Max: %d)", val, - CFG_ROAM_INTRA_BAND_MIN, - CFG_ROAM_INTRA_BAND_MAX); - ret = -EINVAL; - goto exit; - } - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: Received Command to change intra band = %d", __func__, val); + status = hdd_parse_set_batchscan_command(value, pReq); + if (status) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "Invalid WLS_BATCHING SET command"); + ret = -EINVAL; + goto exit; + } + pAdapter->hdd_wait_for_set_batch_scan_rsp = TRUE; + halStatus = sme_SetBatchScanReq(WLAN_HDD_GET_HAL_CTX(pAdapter), pReq, + pAdapter->sessionId, hdd_set_batch_scan_req_callback, + pAdapter); - pHddCtx->cfg_ini->nRoamIntraBand = val; - sme_setRoamIntraBand((tHalHandle)(pHddCtx->hHal), val); + if ( eHAL_STATUS_SUCCESS == halStatus ) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "sme_SetBatchScanReq returned success halStatus %d", + halStatus); + if (TRUE == pAdapter->hdd_wait_for_set_batch_scan_rsp) + { + INIT_COMPLETION(pAdapter->hdd_set_batch_scan_req_var); + rc = wait_for_completion_timeout( + &pAdapter->hdd_set_batch_scan_req_var, + msecs_to_jiffies(HDD_SET_BATCH_SCAN_REQ_TIME_OUT)); + if (0 == rc) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: Timeout waiting for set batch scan to complete", + __func__); + ret = -EINVAL; + goto exit; + } + } + if ( !pRsp->nScansToBatch ) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: Received set batch scan failure response from FW", + __func__, pRsp->nScansToBatch); + ret = -EINVAL; + goto exit; + } + /*As per the Batch Scan Framework API we should return the MIN of + either MSCAN or the max # of scans firmware can cache*/ + ret = MIN(pReq->numberOfScansToBatch , pRsp->nScansToBatch); + + pAdapter->batchScanState = eHDD_BATCH_SCAN_STATE_STARTED; + + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: request MSCAN %d response MSCAN %d ret %d", + __func__, pReq->numberOfScansToBatch, pRsp->nScansToBatch, ret); + } + else + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "sme_SetBatchScanReq returned failure halStatus %d", + halStatus); + ret = -EINVAL; + goto exit; + } } - else if (strncmp(command, "SETWESMODE", 10) == 0) + else if (strncmp(command, "WLS_BATCHING STOP", 17) == 0) { - tANI_U8 *value = command; - tANI_BOOLEAN wesMode = CFG_ENABLE_WES_MODE_NAME_DEFAULT; + eHalStatus halStatus; + tSirStopBatchScanInd *pInd = &pAdapter->hddStopBatchScanInd; + pInd->param = 0; - /* Move pointer to ahead of SETWESMODE */ - value = value + 11; - /* Convert the value from ascii to integer */ - ret = kstrtou8(value, 10, &wesMode); - if (ret < 0) - { - /* If the input value is greater than max value of datatype, then also - kstrtou8 fails */ - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: kstrtou8 failed range [%d - %d]", __func__, - CFG_ENABLE_WES_MODE_NAME_MIN, - CFG_ENABLE_WES_MODE_NAME_MAX); - ret = -EINVAL; - goto exit; - } + if (FALSE == sme_IsFeatureSupportedByFW(BATCH_SCAN)) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: Batch scan feature is not supported by FW", __func__); + ret = -EINVAL; + goto exit; + } - if ((wesMode < CFG_ENABLE_WES_MODE_NAME_MIN) || - (wesMode > CFG_ENABLE_WES_MODE_NAME_MAX)) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "WES Mode value %d is out of range" - " (Min: %d Max: %d)", wesMode, - CFG_ENABLE_WES_MODE_NAME_MIN, - CFG_ENABLE_WES_MODE_NAME_MAX); - ret = -EINVAL; - goto exit; - } - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: Received Command to Set WES Mode rssi diff = %d", __func__, wesMode); + if (eHDD_BATCH_SCAN_STATE_STARTED != pAdapter->batchScanState) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "Batch scan is not yet enabled batch scan state %d", + pAdapter->batchScanState); + ret = -EINVAL; + goto exit; + } - pHddCtx->cfg_ini->isWESModeEnabled = wesMode; - sme_UpdateWESMode((tHalHandle)(pHddCtx->hHal), wesMode); + pAdapter->batchScanState = eHDD_BATCH_SCAN_STATE_STOPPED; + + halStatus = sme_StopBatchScanInd(WLAN_HDD_GET_HAL_CTX(pAdapter), pInd, + pAdapter->sessionId); + if ( eHAL_STATUS_SUCCESS == halStatus ) + { + ret = 0; + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "sme_StopBatchScanInd returned success halStatus %d", + halStatus); + } + else + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "sme_StopBatchScanInd returned failure halStatus %d", + halStatus); + ret = -EINVAL; + goto exit; + } } - else if (strncmp(command, "GETROAMINTRABAND", 16) == 0) + else if (strncmp(command, "WLS_BATCHING GET", 16) == 0) { - tANI_U16 val = sme_getRoamIntraBand((tHalHandle)(pHddCtx->hHal)); - char extra[32]; - tANI_U8 len = 0; + tANI_U32 remain_len; - /* value is interms of msec */ - len = snprintf(extra, sizeof(extra), "%s %d", "GETROAMINTRABAND", val); - if (copy_to_user(priv_data.buf, &extra, len + 1)) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: failed to copy data to user buffer", __func__); - ret = -EFAULT; - goto exit; - } + if (FALSE == sme_IsFeatureSupportedByFW(BATCH_SCAN)) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: Batch scan feature is not supported by FW", __func__); + ret = -EINVAL; + goto exit; + } + + if (eHDD_BATCH_SCAN_STATE_STARTED != pAdapter->batchScanState) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "Batch scan is not yet enabled could not return results" + "Batch Scan state %d", + pAdapter->batchScanState); + ret = -EINVAL; + goto exit; + } + + priv_data.used_len = 16; + remain_len = priv_data.total_len - priv_data.used_len; + if (remain_len < priv_data.total_len) + { + /*Clear previous batch scan response data if any*/ + vos_mem_zero((tANI_U8 *)(command + priv_data.used_len), remain_len); + } + else + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "Invalid total length from user space can't fetch batch" + " scan response total_len %ld used_len %ld remain len %ld", + priv_data.total_len, priv_data.used_len, remain_len); + ret = -EINVAL; + goto exit; + } + ret = hdd_return_batch_scan_rsp_to_user(pAdapter, &priv_data, command); } - else if (strncmp(priv_data.buf, "GETWESMODE", 10) == 0) +#endif +#ifdef FEATURE_CESIUM_PROPRIETARY + /* command should be a string having format + * SETIBSSROUTETABLE + * Where, pair " " shall be repeated + * numOfEntries time + */ + else if (strncmp(command, "SETIBSSROUTETABLE", 17) == 0) { - tANI_BOOLEAN wesMode = sme_GetWESMode((tHalHandle)(pHddCtx->hHal)); - char extra[32]; - tANI_U8 len = 0; + tANI_U8 *ptr = command; - len = snprintf(extra, sizeof(extra), "%s %d", command, wesMode); - if (copy_to_user(priv_data.buf, &extra, len + 1)) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: failed to copy data to user buffer", __func__); - ret = -EFAULT; - goto exit; - } + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s: Received command to set IBSS Route Table", __func__); + + ret = hdd_updateIbssRouteTable(pHddCtx->hHal, ptr); } -#endif -#ifdef FEATURE_WLAN_LFR - else if (strncmp(command, "SETFASTROAM", 11) == 0) + else if (strncmp(command, "SETIBSSTXFAILEVENT", 18) == 0 ) { - tANI_U8 *value = command; - tANI_U8 lfrMode = CFG_LFR_FEATURE_ENABLED_DEFAULT; + char *value; + tANI_U8 tx_fail_count = 0; + tANI_U16 pid = 0; - /* Move pointer to ahead of SETFASTROAM */ - value = value + 12; - /* Convert the value from ascii to integer */ - ret = kstrtou8(value, 10, &lfrMode); - if (ret < 0) - { - /* If the input value is greater than max value of datatype, then also - kstrtou8 fails */ - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: kstrtou8 failed range [%d - %d]", __func__, - CFG_LFR_FEATURE_ENABLED_MIN, - CFG_LFR_FEATURE_ENABLED_MAX); - ret = -EINVAL; - goto exit; - } + value = command; - if ((lfrMode < CFG_LFR_FEATURE_ENABLED_MIN) || - (lfrMode > CFG_LFR_FEATURE_ENABLED_MAX)) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "lfr mode value %d is out of range" - " (Min: %d Max: %d)", lfrMode, - CFG_LFR_FEATURE_ENABLED_MIN, - CFG_LFR_FEATURE_ENABLED_MAX); - ret = -EINVAL; - goto exit; + ret = hdd_ParseIBSSTXFailEventParams(value, &tx_fail_count, &pid); + + if (0 != ret) + { + hddLog(VOS_TRACE_LEVEL_INFO, + "%s: Failed to parse SETIBSSTXFAILEVENT arguments", + __func__); + goto exit; } - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: Received Command to change lfr mode = %d", __func__, lfrMode); + hddLog(VOS_TRACE_LEVEL_INFO, "%s: tx_fail_cnt=%hhu, pid=%hu", + __func__, tx_fail_count, pid); - pHddCtx->cfg_ini->isFastRoamIniFeatureEnabled = lfrMode; - sme_UpdateIsFastRoamIniFeatureEnabled((tHalHandle)(pHddCtx->hHal), lfrMode); + if (0 == tx_fail_count) + { + // Disable TX Fail Indication + if (eHAL_STATUS_SUCCESS == + sme_TXFailMonitorStartStopInd(pHddCtx->hHal, + tx_fail_count, + NULL)) + { + cesium_pid = 0; + } + else + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: failed to disable TX Fail Event ", __func__); + ret = -EINVAL; + } + } + else + { + if (eHAL_STATUS_SUCCESS == + sme_TXFailMonitorStartStopInd(pHddCtx->hHal, + tx_fail_count, + (void*)hdd_tx_fail_ind_callback)) + { + cesium_pid = pid; + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s: Registered Cesium pid %u", __func__, + cesium_pid); + } + else + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: Failed to enable TX Fail Monitoring", __func__); + ret = -EINVAL; + } + } } -#endif -#ifdef WLAN_FEATURE_VOWIFI_11R - else if (strncmp(command, "SETFASTTRANSITION", 17) == 0) + +#endif /* FEATURE_CESIUM_PROPRIETARY */ +#if defined(FEATURE_WLAN_CCX) && defined(FEATURE_WLAN_CCX_UPLOAD) + else if (strncmp(command, "SETCCXROAMSCANCHANNELS", 22) == 0) { tANI_U8 *value = command; - tANI_U8 ft = CFG_FAST_TRANSITION_ENABLED_NAME_DEFAULT; - - /* Move pointer to ahead of SETFASTROAM */ - value = value + 18; - /* Convert the value from ascii to integer */ - ret = kstrtou8(value, 10, &ft); - if (ret < 0) + tANI_U8 ChannelList[WNI_CFG_VALID_CHANNEL_LIST_LEN] = {0}; + tANI_U8 numChannels = 0; + eHalStatus status = eHAL_STATUS_SUCCESS; + status = hdd_parse_channellist(value, ChannelList, &numChannels); + if (eHAL_STATUS_SUCCESS != status) { - /* If the input value is greater than max value of datatype, then also - kstrtou8 fails */ VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: kstrtou8 failed range [%d - %d]", __func__, - CFG_FAST_TRANSITION_ENABLED_NAME_MIN, - CFG_FAST_TRANSITION_ENABLED_NAME_MAX); + "%s: Failed to parse channel list information", __func__); ret = -EINVAL; goto exit; } - - if ((ft < CFG_FAST_TRANSITION_ENABLED_NAME_MIN) || - (ft > CFG_FAST_TRANSITION_ENABLED_NAME_MAX)) + if (numChannels > WNI_CFG_VALID_CHANNEL_LIST_LEN) + { + VOS_TRACE( VOS_MODULE_ID_HDD, + VOS_TRACE_LEVEL_ERROR, + "%s: number of channels (%d) supported exceeded max (%d)", + __func__, + numChannels, + WNI_CFG_VALID_CHANNEL_LIST_LEN); + ret = -EINVAL; + goto exit; + } + status = sme_SetCcxRoamScanChannelList((tHalHandle)(pHddCtx->hHal), + ChannelList, + numChannels); + if (eHAL_STATUS_SUCCESS != status) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "ft mode value %d is out of range" - " (Min: %d Max: %d)", ft, - CFG_FAST_TRANSITION_ENABLED_NAME_MIN, - CFG_FAST_TRANSITION_ENABLED_NAME_MAX); + "%s: Failed to update channel list information", __func__); ret = -EINVAL; goto exit; } - - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: Received Command to change ft mode = %d", __func__, ft); - - pHddCtx->cfg_ini->isFastTransitionEnabled = ft; - sme_UpdateFastTransitionEnabled((tHalHandle)(pHddCtx->hHal), ft); } -#endif -#ifdef FEATURE_WLAN_CCX - else if (strncmp(command, "SETCCXMODE", 10) == 0) + else if (strncmp(command, "GETTSMSTATS", 11) == 0) { - tANI_U8 *value = command; - tANI_U8 ccxMode = CFG_CCX_FEATURE_ENABLED_DEFAULT; - - /* Move pointer to ahead of SETCCXMODE */ - value = value + 11; + tANI_U8 *value = command; + char extra[128] = {0}; + int len = 0; + tANI_U8 tid = 0; + hdd_station_ctx_t *pHddStaCtx = NULL; + tAniTrafStrmMetrics tsmMetrics; + pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); + /* if not associated, return error */ + if (eConnectionState_Associated != pHddStaCtx->conn_info.connState) + { + VOS_TRACE(VOS_MODULE_ID_HDD, + VOS_TRACE_LEVEL_ERROR, + "%s:Not associated!", + __func__); + ret = -EINVAL; + goto exit; + } + /* Move pointer to ahead of GETTSMSTATS */ + value = value + 12; /* Convert the value from ascii to integer */ - ret = kstrtou8(value, 10, &ccxMode); + ret = kstrtou8(value, 10, &tid); if (ret < 0) { - /* If the input value is greater than max value of datatype, then also - kstrtou8 fails */ + /* If the input value is greater than max value of datatype, + * then also + * kstrtou8 fails + */ VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, "%s: kstrtou8 failed range [%d - %d]", __func__, - CFG_CCX_FEATURE_ENABLED_MIN, - CFG_CCX_FEATURE_ENABLED_MAX); + TID_MIN_VALUE, + TID_MAX_VALUE); ret = -EINVAL; goto exit; } - if ((ccxMode < CFG_CCX_FEATURE_ENABLED_MIN) || - (ccxMode > CFG_CCX_FEATURE_ENABLED_MAX)) + if ((tid < TID_MIN_VALUE) || (tid > TID_MAX_VALUE)) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "Ccx mode value %d is out of range" - " (Min: %d Max: %d)", ccxMode, - CFG_CCX_FEATURE_ENABLED_MIN, - CFG_CCX_FEATURE_ENABLED_MAX); + "tid value %d is out of range" + " (Min: %d Max: %d)", tid, + TID_MIN_VALUE, + TID_MAX_VALUE); ret = -EINVAL; goto exit; } - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: Received Command to change ccx mode = %d", __func__, ccxMode); - - pHddCtx->cfg_ini->isCcxIniFeatureEnabled = ccxMode; - sme_UpdateIsCcxFeatureEnabled((tHalHandle)(pHddCtx->hHal), ccxMode); - } -#endif - else if (strncmp(command, "SETROAMSCANCONTROL", 18) == 0) - { - tANI_U8 *value = command; - tANI_BOOLEAN roamScanControl = 0; - - /* Move pointer to ahead of SETROAMSCANCONTROL */ - value = value + 19; - /* Convert the value from ascii to integer */ - ret = kstrtou8(value, 10, &roamScanControl); - if (ret < 0) + VOS_TRACE( VOS_MODULE_ID_HDD, + VOS_TRACE_LEVEL_INFO, + "%s: Received Command to get tsm stats tid = %d", + __func__, + tid); + if (VOS_STATUS_SUCCESS != hdd_get_tsm_stats(pAdapter, tid, &tsmMetrics)) { - /* If the input value is greater than max value of datatype, then also - kstrtou8 fails */ VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: kstrtou8 failed ", __func__); - ret = -EINVAL; + "%s: failed to get tsm stats", __func__); + ret = -EFAULT; goto exit; } - - if (0 != roamScanControl) + VOS_TRACE( VOS_MODULE_ID_HDD, + VOS_TRACE_LEVEL_INFO, + "UplinkPktQueueDly(%d)\n" + "UplinkPktQueueDlyHist[0](%d)\n" + "UplinkPktQueueDlyHist[1](%d)\n" + "UplinkPktQueueDlyHist[2](%d)\n" + "UplinkPktQueueDlyHist[3](%d)\n" + "UplinkPktTxDly(%lu)\n" + "UplinkPktLoss(%d)\n" + "UplinkPktCount(%d)\n" + "RoamingCount(%d)\n" + "RoamingDly(%d)", + tsmMetrics.UplinkPktQueueDly, + tsmMetrics.UplinkPktQueueDlyHist[0], + tsmMetrics.UplinkPktQueueDlyHist[1], + tsmMetrics.UplinkPktQueueDlyHist[2], + tsmMetrics.UplinkPktQueueDlyHist[3], + tsmMetrics.UplinkPktTxDly, + tsmMetrics.UplinkPktLoss, + tsmMetrics.UplinkPktCount, + tsmMetrics.RoamingCount, + tsmMetrics.RoamingDly); + /* Output TSM stats is of the format + * GETTSMSTATS [PktQueueDly] + * [PktQueueDlyHist[0]]:[PktQueueDlyHist[1]] ...[RoamingDly] + * eg., GETTSMSTATS 10 1:0:0:161 20 1 17 8 39800 */ + len = scnprintf(extra, + sizeof(extra), + "%s %d %d:%d:%d:%d %lu %d %d %d %d", + command, + tsmMetrics.UplinkPktQueueDly, + tsmMetrics.UplinkPktQueueDlyHist[0], + tsmMetrics.UplinkPktQueueDlyHist[1], + tsmMetrics.UplinkPktQueueDlyHist[2], + tsmMetrics.UplinkPktQueueDlyHist[3], + tsmMetrics.UplinkPktTxDly, + tsmMetrics.UplinkPktLoss, + tsmMetrics.UplinkPktCount, + tsmMetrics.RoamingCount, + tsmMetrics.RoamingDly); + if (copy_to_user(priv_data.buf, &extra, len + 1)) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "roam scan control invalid value = %d", - roamScanControl); - ret = -EINVAL; + "%s: failed to copy data to user buffer", __func__); + ret = -EFAULT; goto exit; } - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: Received Command to Set roam scan control = %d", __func__, roamScanControl); - - sme_SetRoamScanControl((tHalHandle)(pHddCtx->hHal), roamScanControl); } -#ifdef FEATURE_WLAN_OKC - else if (strncmp(command, "SETOKCMODE", 10) == 0) + else if (strncmp(command, "SETCCKMIE", 9) == 0) { tANI_U8 *value = command; - tANI_U8 okcMode = CFG_OKC_FEATURE_ENABLED_DEFAULT; - - /* Move pointer to ahead of SETOKCMODE */ - value = value + 11; - /* Convert the value from ascii to integer */ - ret = kstrtou8(value, 10, &okcMode); - if (ret < 0) + tANI_U8 *cckmIe = NULL; + tANI_U8 cckmIeLen = 0; + eHalStatus status = eHAL_STATUS_SUCCESS; + status = hdd_parse_get_cckm_ie(value, &cckmIe, &cckmIeLen); + if (eHAL_STATUS_SUCCESS != status) { - /* If the input value is greater than max value of datatype, then also - kstrtou8 fails */ VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: kstrtou8 failed range [%d - %d]", __func__, - CFG_OKC_FEATURE_ENABLED_MIN, - CFG_OKC_FEATURE_ENABLED_MAX); + "%s: Failed to parse cckm ie data", __func__); ret = -EINVAL; goto exit; } - - if ((okcMode < CFG_OKC_FEATURE_ENABLED_MIN) || - (okcMode > CFG_OKC_FEATURE_ENABLED_MAX)) + if (cckmIeLen > DOT11F_IE_RSN_MAX_LEN) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "Okc mode value %d is out of range" - " (Min: %d Max: %d)", okcMode, - CFG_OKC_FEATURE_ENABLED_MIN, - CFG_OKC_FEATURE_ENABLED_MAX); + "%s: CCKM Ie input length is more than max[%d]", __func__, + DOT11F_IE_RSN_MAX_LEN); + if (NULL != cckmIe) + { + vos_mem_free(cckmIe); + } ret = -EINVAL; goto exit; } - - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: Received Command to change okc mode = %d", __func__, okcMode); - - pHddCtx->cfg_ini->isOkcIniFeatureEnabled = okcMode; + sme_SetCCKMIe((tHalHandle)(pHddCtx->hHal), + pAdapter->sessionId, + cckmIe, + cckmIeLen); + if (NULL != cckmIe) + { + vos_mem_free(cckmIe); + } } - else if (strncmp(priv_data.buf, "GETROAMSCANCONTROL", 18) == 0) + else if (strncmp(command, "CCXBEACONREQ", 12) == 0) { - tANI_BOOLEAN roamScanControl = sme_GetRoamScanControl((tHalHandle)(pHddCtx->hHal)); - char extra[32]; - tANI_U8 len = 0; - - len = snprintf(extra, sizeof(extra), "%s %d", command, roamScanControl); - if (copy_to_user(priv_data.buf, &extra, len + 1)) + tANI_U8 *value = command; + tCsrCcxBeaconReq ccxBcnReq; + eHalStatus status = eHAL_STATUS_SUCCESS; + status = hdd_parse_ccx_beacon_req(value, &ccxBcnReq); + if (eHAL_STATUS_SUCCESS != status) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: failed to copy data to user buffer", __func__); - ret = -EFAULT; + "%s: Failed to parse ccx beacon req", __func__); + ret = -EINVAL; goto exit; } + + status = sme_SetCcxBeaconRequest((tHalHandle)(pHddCtx->hHal), + pAdapter->sessionId, + &ccxBcnReq); + if (eHAL_STATUS_SUCCESS != status) + { + VOS_TRACE( VOS_MODULE_ID_HDD, + VOS_TRACE_LEVEL_ERROR, + "%s: sme_SetCcxBeaconRequest failed (%d)", + __func__, + status); + ret = -EINVAL; + goto exit; + } } -#endif +#endif /* FEATURE_WLAN_CCX && FEATURE_WLAN_CCX_UPLOAD */ else if (strncmp(command, "SETMCRATE", 9) == 0) { tANI_U8 *value = command; @@ -1710,39 +5162,295 @@ int hdd_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) } vos_mem_zero(rateUpdate, sizeof(tSirRateUpdateInd )); - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "MC Target rate %d", targetRate); - rateUpdate->nss = (pConfig->enable2x2 == 0) ? 0 : 1; - rateUpdate->dev_mode = pAdapter->device_mode; - rateUpdate->mcastDataRate24GHz = targetRate; - rateUpdate->mcastDataRate5GHz = targetRate; - rateUpdate->bcastDataRate = -1; - memcpy(rateUpdate->bssid, pHddStaCtx->conn_info.bssId, - sizeof(rateUpdate->bssid)); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "MC Target rate %d", targetRate); + + rateUpdate->nss = (pConfig->enable2x2 == 0) ? 0 : 1; + rateUpdate->dev_mode = pAdapter->device_mode; + rateUpdate->mcastDataRate24GHz = targetRate; + rateUpdate->mcastDataRate5GHz = targetRate; + rateUpdate->bcastDataRate = -1; + memcpy(rateUpdate->bssid, pHddStaCtx->conn_info.bssId, + sizeof(rateUpdate->bssid)); + + status = sme_SendRateUpdateInd(pHddCtx->hHal, rateUpdate); + if (eHAL_STATUS_SUCCESS != status) + { + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s: SET_MC_RATE failed", __func__); + vos_mem_free(rateUpdate); + ret = -EFAULT; + goto exit; + } + } + else { + hddLog( VOS_TRACE_LEVEL_WARN, "%s: Unsupported GUI command %s", + __func__, command); + } + + } +exit: + if (command) + { + kfree(command); + } + return ret; +} + +#if defined(FEATURE_WLAN_CCX) && defined(FEATURE_WLAN_CCX_UPLOAD) +/**--------------------------------------------------------------------------- + + \brief hdd_parse_ccx_beacon_req() - Parse ccx beacon request + + This function parses the ccx beacon request passed in the format + CCXBEACONREQ + Channel 1Scan Mode Meas DurationChannel N + Scan Mode NMeas Duration N + if the Number of bcn req fields (N) does not match with the actual number of fields passed + then take N. + and are treated as one pair + For example, CCXBEACONREQ 2 1 1 1 30 2 44 0 40. + This function does not take care of removing duplicate channels from the list + + \param - pValue Pointer to data + \param - pCcxBcnReq output pointer to store parsed ie information + + \return - 0 for success non-zero for failure + + --------------------------------------------------------------------------*/ +static VOS_STATUS hdd_parse_ccx_beacon_req(tANI_U8 *pValue, + tCsrCcxBeaconReq *pCcxBcnReq) +{ + tANI_U8 *inPtr = pValue; + int tempInt = 0; + int j = 0, i = 0, v = 0; + char buf[32]; + + inPtr = strnchr(pValue, strlen(pValue), SPACE_ASCII_VALUE); + /*no argument after the command*/ + if (NULL == inPtr) + { + return -EINVAL; + } + /*no space after the command*/ + else if (SPACE_ASCII_VALUE != *inPtr) + { + return -EINVAL; + } + + /*removing empty spaces*/ + while ((SPACE_ASCII_VALUE == *inPtr) && ('\0' != *inPtr)) inPtr++; + + /*no argument followed by spaces*/ + if ('\0' == *inPtr) return -EINVAL; + + /*getting the first argument ie measurement token*/ + v = sscanf(inPtr, "%32s ", buf); + if (1 != v) return -EINVAL; + + v = kstrtos32(buf, 10, &tempInt); + if ( v < 0) return -EINVAL; + + pCcxBcnReq->numBcnReqIe = tempInt; + + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, + "Number of Bcn Req Ie fields(%d)", pCcxBcnReq->numBcnReqIe); + + for (j = 0; j < (pCcxBcnReq->numBcnReqIe); j++) + { + for (i = 0; i < 4; i++) + { + /*inPtr pointing to the beginning of first space after number of ie fields*/ + inPtr = strpbrk( inPtr, " " ); + /*no ie data after the number of ie fields argument*/ + if (NULL == inPtr) return -EINVAL; + + /*removing empty space*/ + while ((SPACE_ASCII_VALUE == *inPtr) && ('\0' != *inPtr)) inPtr++; + + /*no ie data after the number of ie fields argument and spaces*/ + if ( '\0' == *inPtr ) return -EINVAL; + + v = sscanf(inPtr, "%32s ", buf); + if (1 != v) return -EINVAL; + + v = kstrtos32(buf, 10, &tempInt); + if (v < 0) return -EINVAL; + + switch (i) + { + case 0: /* Measurement token */ + if (tempInt <= 0) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "Invalid Measurement Token(%d)", tempInt); + return -EINVAL; + } + pCcxBcnReq->bcnReq[j].measurementToken = tempInt; + break; + + case 1: /* Channel number */ + if ((tempInt <= 0) || + (tempInt > WNI_CFG_CURRENT_CHANNEL_STAMAX)) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "Invalid Channel Number(%d)", tempInt); + return -EINVAL; + } + pCcxBcnReq->bcnReq[j].channel = tempInt; + break; + + case 2: /* Scan mode */ + if ((tempInt < eSIR_PASSIVE_SCAN) || (tempInt > eSIR_BEACON_TABLE)) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "Invalid Scan Mode(%d) Expected{0|1|2}", tempInt); + return -EINVAL; + } + pCcxBcnReq->bcnReq[j].scanMode= tempInt; + break; + + case 3: /* Measurement duration */ + if (((tempInt <= 0) && (pCcxBcnReq->bcnReq[j].scanMode != eSIR_BEACON_TABLE)) || + ((tempInt < 0) && (pCcxBcnReq->bcnReq[j].scanMode == eSIR_BEACON_TABLE))) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "Invalid Measurement Duration(%d)", tempInt); + return -EINVAL; + } + pCcxBcnReq->bcnReq[j].measurementDuration = tempInt; + break; + } + } + } + + for (j = 0; j < pCcxBcnReq->numBcnReqIe; j++) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "Index(%d) Measurement Token(%lu)Channel(%lu) Scan Mode(%lu) Measurement Duration(%lu)\n", + j, + pCcxBcnReq->bcnReq[j].measurementToken, + pCcxBcnReq->bcnReq[j].channel, + pCcxBcnReq->bcnReq[j].scanMode, + pCcxBcnReq->bcnReq[j].measurementDuration); + } - status = sme_SendRateUpdateInd(pHddCtx->hHal, rateUpdate); - if (eHAL_STATUS_SUCCESS != status) - { - hddLog(VOS_TRACE_LEVEL_ERROR, - "%s: SET_MC_RATE failed", __func__); - vos_mem_free(rateUpdate); - ret = -EFAULT; - goto exit; - } - } - else { - hddLog( VOS_TRACE_LEVEL_WARN, "%s: Unsupported GUI command %s", - __func__, command); - } + return VOS_STATUS_SUCCESS; +} +static void hdd_GetTsmStatsCB( tAniTrafStrmMetrics tsmMetrics, + const tANI_U32 staId, + void *pContext ) +{ + struct statsContext *pStatsContext = NULL; + hdd_adapter_t *pAdapter = NULL; + if (NULL == pContext) + { + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s: Bad param, pContext [%p]", + __func__, pContext); + return; } -exit: - if (command) + /* there is a race condition that exists between this callback function + and the caller since the caller could time out either before or + while this code is executing. we'll assume the timeout hasn't + occurred, but we'll verify that right before we save our work */ + pStatsContext = pContext; + pAdapter = pStatsContext->pAdapter; + if ((NULL == pAdapter) || (STATS_CONTEXT_MAGIC != pStatsContext->magic)) { - kfree(command); + /* the caller presumably timed out so there is nothing we can do */ + hddLog(VOS_TRACE_LEVEL_WARN, + "%s: Invalid context, pAdapter [%p] magic [%08x]", + __func__, pAdapter, pStatsContext->magic); + return; } - return ret; + /* the race is on. caller could have timed out immediately after + we verified the magic, but if so, caller will wait a short time + for us to copy over the tsm stats */ + pAdapter->tsmStats.UplinkPktQueueDly = tsmMetrics.UplinkPktQueueDly; + vos_mem_copy(pAdapter->tsmStats.UplinkPktQueueDlyHist, + tsmMetrics.UplinkPktQueueDlyHist, + sizeof(pAdapter->tsmStats.UplinkPktQueueDlyHist)/ + sizeof(pAdapter->tsmStats.UplinkPktQueueDlyHist[0])); + pAdapter->tsmStats.UplinkPktTxDly = tsmMetrics.UplinkPktTxDly; + pAdapter->tsmStats.UplinkPktLoss = tsmMetrics.UplinkPktLoss; + pAdapter->tsmStats.UplinkPktCount = tsmMetrics.UplinkPktCount; + pAdapter->tsmStats.RoamingCount = tsmMetrics.RoamingCount; + pAdapter->tsmStats.RoamingDly = tsmMetrics.RoamingDly; + /* and notify the caller */ + complete(&pStatsContext->completion); +} + +static VOS_STATUS hdd_get_tsm_stats(hdd_adapter_t *pAdapter, + const tANI_U8 tid, + tAniTrafStrmMetrics* pTsmMetrics) +{ + hdd_station_ctx_t *pHddStaCtx = NULL; + eHalStatus hstatus; + long lrc; + struct statsContext context; + hdd_context_t *pHddCtx = NULL; + if (NULL == pAdapter) + { + hddLog(VOS_TRACE_LEVEL_ERROR, "%s: pAdapter is NULL", __func__); + return VOS_STATUS_E_FAULT; + } + pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); + /* we are connected prepare our callback context */ + init_completion(&context.completion); + context.pAdapter = pAdapter; + context.magic = STATS_CONTEXT_MAGIC; + /* query tsm stats */ + hstatus = sme_GetTsmStats(pHddCtx->hHal, hdd_GetTsmStatsCB, + pHddStaCtx->conn_info.staId[ 0 ], + pHddStaCtx->conn_info.bssId, + &context, pHddCtx->pvosContext, tid); + if (eHAL_STATUS_SUCCESS != hstatus) + { + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s: Unable to retrieve statistics", + __func__); + return hstatus; + } + else + { + /* request was sent -- wait for the response */ + lrc = wait_for_completion_interruptible_timeout(&context.completion, + msecs_to_jiffies(WLAN_WAIT_TIME_STATS)); + /* either we have a response or we timed out + either way, first invalidate our magic */ + context.magic = 0; + if (lrc <= 0) + { + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s: SME %s while retrieving statistics", + __func__, (0 == lrc) ? "timeout" : "interrupt"); + /* there is a race condition such that the callback + function could be executing at the same time we are. of + primary concern is if the callback function had already + verified the "magic" but hasn't yet set the completion + variable. Since the completion variable is on our + stack, we'll delay just a bit to make sure the data is + still valid if that is the case */ + msleep(50); + return (VOS_STATUS_E_TIMEOUT); + } + } + pTsmMetrics->UplinkPktQueueDly = pAdapter->tsmStats.UplinkPktQueueDly; + vos_mem_copy(pTsmMetrics->UplinkPktQueueDlyHist, + pAdapter->tsmStats.UplinkPktQueueDlyHist, + sizeof(pAdapter->tsmStats.UplinkPktQueueDlyHist)/ + sizeof(pAdapter->tsmStats.UplinkPktQueueDlyHist[0])); + pTsmMetrics->UplinkPktTxDly = pAdapter->tsmStats.UplinkPktTxDly; + pTsmMetrics->UplinkPktLoss = pAdapter->tsmStats.UplinkPktLoss; + pTsmMetrics->UplinkPktCount = pAdapter->tsmStats.UplinkPktCount; + pTsmMetrics->RoamingCount = pAdapter->tsmStats.RoamingCount; + pTsmMetrics->RoamingDly = pAdapter->tsmStats.RoamingDly; + return VOS_STATUS_SUCCESS; } +#endif /*FEATURE_WLAN_CCX && FEATURE_WLAN_CCX_UPLOAD */ #if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR) void hdd_getBand_helper(hdd_context_t *pHddCtx, int *pBand) @@ -1804,6 +5512,7 @@ static void hdd_update_tgt_services(hdd_context_t *hdd_ctx, struct hdd_tgt_services *cfg) { hdd_config_t *cfg_ini = hdd_ctx->cfg_ini; + tpAniSirGlobal pMac = PMAC_STRUCT(hdd_ctx->hHal); /* Set up UAPSD */ cfg_ini->apUapsdEnabled &= cfg->uapsd; @@ -1818,11 +5527,13 @@ static void hdd_update_tgt_services(hdd_context_t *hdd_ctx, /* ARP offload: override user setting if invalid */ cfg_ini->fhostArpOffload &= cfg->arp_offload; + #ifdef FEATURE_WLAN_SCAN_PNO /* PNO offload */ if (cfg->pno_offload) cfg_ini->PnoOffload = TRUE; #endif + pMac->lteCoexAntShare = cfg->lte_coex_ant_share; } static void hdd_update_tgt_ht_cap(hdd_context_t *hdd_ctx, @@ -2264,18 +5975,16 @@ static void hdd_update_tgt_vht_cap(hdd_context_t *hdd_ctx, } } } -#endif /* #ifdef WLAN_FEATURE_11AC */ +#endif /* #ifdef WLAN_FEATURE_11AC */ void hdd_update_tgt_cfg(void *context, void *param) { hdd_context_t *hdd_ctx = (hdd_context_t *)context; struct hdd_tgt_cfg *cfg = (struct hdd_tgt_cfg *)param; + hdd_ctx->cfg_ini->nBandCapability = cfg->band_cap; + /* To Do */ + // Update the country code from target to ini - /*if FW supports both the bands then prioritize user configuration*/ - if (cfg->band_cap != eCSR_BAND_ALL) - hdd_ctx->cfg_ini->nBandCapability = cfg->band_cap; - - memcpy(hdd_ctx->cfg_ini->crdaDefaultCountryCode, cfg->alpha2, 2); /* This can be extended to other configurations like ht, vht cap... */ if (!vos_is_macaddr_zero(&cfg->hw_macaddr)) @@ -2295,9 +6004,9 @@ void hdd_update_tgt_cfg(void *context, void *param) #ifdef WLAN_FEATURE_11AC hdd_update_tgt_vht_cap(hdd_ctx, &cfg->vht_cap); -#endif /* #ifdef WLAN_FEATURE_11AC */ +#endif /* #ifdef WLAN_FEATURE_11AC */ } -#endif /* QCA_WIFI_2_0 && !QCA_WIFI_ISOC */ +#endif /* QCA_WIFI_2_0 && !QCA_WIFI_ISOC */ /**--------------------------------------------------------------------------- @@ -2306,7 +6015,7 @@ void hdd_update_tgt_cfg(void *context, void *param) This function parses the send action frame data passed in the format SENDACTIONFRAME - \param - pValue Pointer to input country code revision + \param - pValue Pointer to input data \param - pTargetApBssid Pointer to target Ap bssid \param - pChannel Pointer to the Target AP channel \param - pDwellTime Pointer to the time to stay off-channel after transmitting action frame @@ -2327,6 +6036,9 @@ VOS_STATUS hdd_parse_send_action_frame_data(tANI_U8 *pValue, tANI_U8 *pTargetApB int v = 0; tANI_U8 tempBuf[32]; tANI_U8 tempByte = 0; + /* 12 hexa decimal digits and 5 ':' */ + tANI_U8 macAddress[17]; + inPtr = strnchr(pValue, strlen(pValue), SPACE_ASCII_VALUE); /*no argument after the command*/ @@ -2350,14 +6062,20 @@ VOS_STATUS hdd_parse_send_action_frame_data(tANI_U8 *pValue, tANI_U8 *pTargetApB return -EINVAL; } - /*getting the first argument ie the target AP bssid */ - if (inPtr[2] != ':' || inPtr[5] != ':' || inPtr[8] != ':' || inPtr[11] != ':' || inPtr[14] != ':') + v = sscanf(inPtr, "%17s", macAddress); + if (!((1 == v) && hdd_is_valid_mac_address(macAddress))) { - return -EINVAL; + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "Invalid MAC address or All hex inputs are not read (%d)", v); + return -EINVAL; } - j = sscanf(inPtr, "%2x:%2x:%2x:%2x:%2x:%2x", (unsigned int *)&pTargetApBssid[0], (unsigned int *)&pTargetApBssid[1], - (unsigned int *)&pTargetApBssid[2], (unsigned int *)&pTargetApBssid[3], - (unsigned int *)&pTargetApBssid[4], (unsigned int *)&pTargetApBssid[5]); + + pTargetApBssid[0] = hdd_parse_hex(macAddress[0]) << 4 | hdd_parse_hex(macAddress[1]); + pTargetApBssid[1] = hdd_parse_hex(macAddress[3]) << 4 | hdd_parse_hex(macAddress[4]); + pTargetApBssid[2] = hdd_parse_hex(macAddress[6]) << 4 | hdd_parse_hex(macAddress[7]); + pTargetApBssid[3] = hdd_parse_hex(macAddress[9]) << 4 | hdd_parse_hex(macAddress[10]); + pTargetApBssid[4] = hdd_parse_hex(macAddress[12]) << 4 | hdd_parse_hex(macAddress[13]); + pTargetApBssid[5] = hdd_parse_hex(macAddress[15]) << 4 | hdd_parse_hex(macAddress[16]); /* point to the next argument */ inPtr = strnchr(inPtr, strlen(inPtr), SPACE_ASCII_VALUE); @@ -2374,9 +6092,12 @@ VOS_STATUS hdd_parse_send_action_frame_data(tANI_U8 *pValue, tANI_U8 *pTargetApB } /*getting the next argument ie the channel number */ - j = sscanf(inPtr, "%32s ", tempBuf); + v = sscanf(inPtr, "%32s ", tempBuf); + if (1 != v) return -EINVAL; + v = kstrtos32(tempBuf, 10, &tempInt); - if ( v < 0) return -EINVAL; + if ( v < 0 || tempInt <= 0 || tempInt > WNI_CFG_CURRENT_CHANNEL_STAMAX ) + return -EINVAL; *pChannel = tempInt; @@ -2394,9 +6115,11 @@ VOS_STATUS hdd_parse_send_action_frame_data(tANI_U8 *pValue, tANI_U8 *pTargetApB } /*getting the next argument ie the dwell time */ - j = sscanf(inPtr, "%32s ", tempBuf); + v = sscanf(inPtr, "%32s ", tempBuf); + if (1 != v) return -EINVAL; + v = kstrtos32(tempBuf, 10, &tempInt); - if ( v < 0) return -EINVAL; + if ( v < 0 || tempInt <= 0) return -EINVAL; *pDwellTime = tempInt; @@ -2418,11 +6141,18 @@ VOS_STATUS hdd_parse_send_action_frame_data(tANI_U8 *pValue, tANI_U8 *pTargetApB while(('\0' != *dataEnd) ) { dataEnd++; - ++(*pBufLen); } + *pBufLen = dataEnd - inPtr ; if ( *pBufLen <= 0) return -EINVAL; - *pBuf = vos_mem_malloc(sizeof(*pBufLen)); + /* Allocate the number of bytes based on the number of input characters + whether it is even or odd. + if the number of input characters are even, then we need N/2 byte. + if the number of input characters are odd, then we need do (N+1)/2 to + compensate rounding off. + For example, if N = 18, then (18 + 1)/2 = 9 bytes are enough. + If N = 19, then we need 10 bytes, hence (19 + 1)/2 = 10 bytes */ + *pBuf = vos_mem_malloc((*pBufLen + 1)/2); if (NULL == *pBuf) { hddLog(VOS_TRACE_LEVEL_FATAL, @@ -2436,32 +6166,46 @@ VOS_STATUS hdd_parse_send_action_frame_data(tANI_U8 *pValue, tANI_U8 *pTargetApB and f0 in 3rd location */ for (i = 0, j = 0; j < *pBufLen; j += 2) { - tempByte = (hdd_parse_hex(inPtr[j]) << 4) | (hdd_parse_hex(inPtr[j + 1])); + if( j+1 == *pBufLen) + { + tempByte = hdd_parse_hex(inPtr[j]); + } + else + { + tempByte = (hdd_parse_hex(inPtr[j]) << 4) | (hdd_parse_hex(inPtr[j + 1])); + } (*pBuf)[i++] = tempByte; } *pBufLen = i; return VOS_STATUS_SUCCESS; } -#endif /**--------------------------------------------------------------------------- - \brief hdd_parse_countryrev() - HDD Parse country code revision + \brief hdd_parse_channellist() - HDD Parse channel list - This function parses the country code revision passed in the format - SETCOUNTRYREVrevision + This function parses the channel list passed in the format + SETROAMSCANCHANNELSChannel 1Channel 2Channel N + if the Number of channels (N) does not match with the actual number of channels passed + then take the minimum of N and count of (Ch1, Ch2, ...Ch M) + For example, if SETROAMSCANCHANNELS 3 36 40 44 48, only 36, 40 and 44 shall be taken. + If SETROAMSCANCHANNELS 5 36 40 44 48, ignore 5 and take 36, 40, 44 and 48. + This function does not take care of removing duplicate channels from the list - \param - pValue Pointer to input country code revision - \param - pCountryCode Pointer to local output array to record country code - \param - pRevision Pointer to store revision integer number + \param - pValue Pointer to input channel list + \param - ChannelList Pointer to local output array to record channel list + \param - pNumChannels Pointer to number of roam scan channels \return - 0 for success non-zero for failure --------------------------------------------------------------------------*/ -VOS_STATUS hdd_parse_countryrev(tANI_U8 *pValue, tANI_U8 *pCountryCode, tANI_U8 *pRevision) +VOS_STATUS hdd_parse_channellist(tANI_U8 *pValue, tANI_U8 *pChannelList, tANI_U8 *pNumChannels) { tANI_U8 *inPtr = pValue; int tempInt; + int j = 0; + int v = 0; + char buf[32]; inPtr = strnchr(pValue, strlen(pValue), SPACE_ASCII_VALUE); /*no argument after the command*/ @@ -2477,7 +6221,7 @@ VOS_STATUS hdd_parse_countryrev(tANI_U8 *pValue, tANI_U8 *pCountryCode, tANI_U8 } /*removing empty spaces*/ - while ((SPACE_ASCII_VALUE == *inPtr)&& ('\0' != *inPtr) ) inPtr++; + while ((SPACE_ASCII_VALUE == *inPtr) && ('\0' != *inPtr)) inPtr++; /*no argument followed by spaces*/ if ('\0' == *inPtr) @@ -2485,71 +6229,103 @@ VOS_STATUS hdd_parse_countryrev(tANI_U8 *pValue, tANI_U8 *pCountryCode, tANI_U8 return -EINVAL; } - /*getting the first argument ie the country code */ - sscanf(inPtr, "%3s ", pCountryCode); - - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, - "Country code is : %s", pCountryCode); + /*getting the first argument ie the number of channels*/ + v = sscanf(inPtr, "%32s ", buf); + if (1 != v) return -EINVAL; - /*inPtr pointing to the beginning of first space after country code */ - inPtr = strpbrk( inPtr, " " ); - /*no revision number after the country code argument */ - if (NULL == inPtr) + v = kstrtos32(buf, 10, &tempInt); + if ((v < 0) || + (tempInt <= 0) || + (tempInt > WNI_CFG_VALID_CHANNEL_LIST_LEN)) { - return -EINVAL; + return -EINVAL; } - inPtr++; + *pNumChannels = tempInt; - /*removing empty space*/ - while ((SPACE_ASCII_VALUE == *inPtr) && ('\0' != *inPtr) ) inPtr++; + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, + "Number of channels are: %d", *pNumChannels); - /*no channel list after the number of channels argument and spaces*/ - if (0 == strncmp(pCountryCode, "KR", 2)) + for (j = 0; j < (*pNumChannels); j++) { - if ('\0' == *inPtr) + /*inPtr pointing to the beginning of first space after number of channels*/ + inPtr = strpbrk( inPtr, " " ); + /*no channel list after the number of channels argument*/ + if (NULL == inPtr) { - return -EINVAL; + if (0 != j) + { + *pNumChannels = j; + return VOS_STATUS_SUCCESS; + } + else + { + return -EINVAL; + } } - sscanf(inPtr, "%d", &tempInt); - *pRevision = tempInt; - } - else - { + /*removing empty space*/ + while ((SPACE_ASCII_VALUE == *inPtr) && ('\0' != *inPtr)) inPtr++; + + /*no channel list after the number of channels argument and spaces*/ + if ( '\0' == *inPtr ) + { + if (0 != j) + { + *pNumChannels = j; + return VOS_STATUS_SUCCESS; + } + else + { + return -EINVAL; + } + } + + v = sscanf(inPtr, "%32s ", buf); + if (1 != v) return -EINVAL; + + v = kstrtos32(buf, 10, &tempInt); + if ((v < 0) || + (tempInt <= 0) || + (tempInt > WNI_CFG_CURRENT_CHANNEL_STAMAX)) + { + return -EINVAL; + } + pChannelList[j] = tempInt; + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, - "Revision input is required only for Country KR"); - return -EINVAL; + "Channel %d added to preferred channel list", + pChannelList[j] ); } + return VOS_STATUS_SUCCESS; } + /**--------------------------------------------------------------------------- - \brief hdd_parse_channellist() - HDD Parse channel list + \brief hdd_parse_reassoc_command_data() - HDD Parse reassoc command data - This function parses the channel list passed in the format - SETROAMSCANCHANNELSChannel 1Channel 2Channel N - if the Number of channels (N) does not match with the actual number of channels passed - then take the minimum of N and count of (Ch1, Ch2, ...Ch M) - For example, if SETROAMSCANCHANNELS 3 36 40 44 48, only 36, 40 and 44 shall be taken. - If SETROAMSCANCHANNELS 5 36 40 44 48, ignore 5 and take 36, 40, 44 and 48. - This function does not take care of removing duplicate channels from the list + This function parses the reasoc command data passed in the format + REASSOC - \param - pValue Pointer to input channel list - \param - ChannelList Pointer to local output array to record channel list - \param - pNumChannels Pointer to number of roam scan channels + \param - pValue Pointer to input data (its a NUL terminated string) + \param - pTargetApBssid Pointer to target Ap bssid + \param - pChannel Pointer to the Target AP channel \return - 0 for success non-zero for failure --------------------------------------------------------------------------*/ -VOS_STATUS hdd_parse_channellist(tANI_U8 *pValue, tANI_U8 *pChannelList, tANI_U8 *pNumChannels) +VOS_STATUS hdd_parse_reassoc_command_data(tANI_U8 *pValue, + tANI_U8 *pTargetApBssid, tANI_U8 *pChannel) { tANI_U8 *inPtr = pValue; int tempInt; - int j = 0; int v = 0; - char buf[32]; + tANI_U8 tempBuf[32]; + /* 12 hexa decimal digits and 5 ':' */ + tANI_U8 macAddress[17]; + inPtr = strnchr(pValue, strlen(pValue), SPACE_ASCII_VALUE); /*no argument after the command*/ @@ -2565,7 +6341,7 @@ VOS_STATUS hdd_parse_channellist(tANI_U8 *pValue, tANI_U8 *pChannelList, tANI_U8 } /*removing empty spaces*/ - while ((SPACE_ASCII_VALUE == *inPtr) && ('\0' != *inPtr)) inPtr++; + while ((SPACE_ASCII_VALUE == *inPtr) && ('\0' != *inPtr) ) inPtr++; /*no argument followed by spaces*/ if ('\0' == *inPtr) @@ -2573,72 +6349,175 @@ VOS_STATUS hdd_parse_channellist(tANI_U8 *pValue, tANI_U8 *pChannelList, tANI_U8 return -EINVAL; } - /*getting the first argument ie the number of channels*/ - sscanf(inPtr, "%32s ", buf); - v = kstrtos32(buf, 10, &tempInt); + v = sscanf(inPtr, "%17s", macAddress); + if (!((1 == v) && hdd_is_valid_mac_address(macAddress))) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "Invalid MAC address or All hex inputs are not read (%d)", v); + return -EINVAL; + } + + pTargetApBssid[0] = hdd_parse_hex(macAddress[0]) << 4 | hdd_parse_hex(macAddress[1]); + pTargetApBssid[1] = hdd_parse_hex(macAddress[3]) << 4 | hdd_parse_hex(macAddress[4]); + pTargetApBssid[2] = hdd_parse_hex(macAddress[6]) << 4 | hdd_parse_hex(macAddress[7]); + pTargetApBssid[3] = hdd_parse_hex(macAddress[9]) << 4 | hdd_parse_hex(macAddress[10]); + pTargetApBssid[4] = hdd_parse_hex(macAddress[12]) << 4 | hdd_parse_hex(macAddress[13]); + pTargetApBssid[5] = hdd_parse_hex(macAddress[15]) << 4 | hdd_parse_hex(macAddress[16]); + + /* point to the next argument */ + inPtr = strnchr(inPtr, strlen(inPtr), SPACE_ASCII_VALUE); + /*no argument after the command*/ + if (NULL == inPtr) return -EINVAL; + + /*removing empty spaces*/ + while ((SPACE_ASCII_VALUE == *inPtr) && ('\0' != *inPtr) ) inPtr++; + + /*no argument followed by spaces*/ + if ('\0' == *inPtr) + { + return -EINVAL; + } + + /*getting the next argument ie the channel number */ + v = sscanf(inPtr, "%32s ", tempBuf); + if (1 != v) return -EINVAL; + + v = kstrtos32(tempBuf, 10, &tempInt); if ((v < 0) || (tempInt <= 0) || - (tempInt > WNI_CFG_VALID_CHANNEL_LIST_LEN)) + (tempInt > WNI_CFG_CURRENT_CHANNEL_STAMAX)) + { + return -EINVAL; + } + + *pChannel = tempInt; + return VOS_STATUS_SUCCESS; +} + +#endif + +#if defined(FEATURE_WLAN_CCX) && defined(FEATURE_WLAN_CCX_UPLOAD) +/**--------------------------------------------------------------------------- + \brief hdd_parse_get_cckm_ie() - HDD Parse and fetch the CCKM IE + This function parses the SETCCKM IE command + SETCCKMIE + \param - pValue Pointer to input data + \param - pCckmIe Pointer to output cckm Ie + \param - pCckmIeLen Pointer to output cckm ie length + \return - 0 for success non-zero for failure + --------------------------------------------------------------------------*/ +VOS_STATUS hdd_parse_get_cckm_ie(tANI_U8 *pValue, tANI_U8 **pCckmIe, + tANI_U8 *pCckmIeLen) +{ + tANI_U8 *inPtr = pValue; + tANI_U8 *dataEnd; + int j = 0; + int i = 0; + tANI_U8 tempByte = 0; + inPtr = strnchr(pValue, strlen(pValue), SPACE_ASCII_VALUE); + /*no argument after the command*/ + if (NULL == inPtr) + { + return -EINVAL; + } + /*no space after the command*/ + else if (SPACE_ASCII_VALUE != *inPtr) + { + return -EINVAL; + } + /*removing empty spaces*/ + while ((SPACE_ASCII_VALUE == *inPtr) && ('\0' != *inPtr) ) inPtr++; + /*no argument followed by spaces*/ + if ('\0' == *inPtr) + { + return -EINVAL; + } + /* find the length of data */ + dataEnd = inPtr; + while(('\0' != *dataEnd) ) + { + dataEnd++; + ++(*pCckmIeLen); + } + if ( *pCckmIeLen <= 0) return -EINVAL; + /* + * Allocate the number of bytes based on the number of input characters + * whether it is even or odd. + * if the number of input characters are even, then we need N/2 byte. + * if the number of input characters are odd, then we need do (N+1)/2 to + * compensate rounding off. + * For example, if N = 18, then (18 + 1)/2 = 9 bytes are enough. + * If N = 19, then we need 10 bytes, hence (19 + 1)/2 = 10 bytes + */ + *pCckmIe = vos_mem_malloc((*pCckmIeLen + 1)/2); + if (NULL == *pCckmIe) + { + hddLog(VOS_TRACE_LEVEL_FATAL, + "%s: vos_mem_alloc failed ", __func__); + return -EINVAL; + } + vos_mem_zero(*pCckmIe, (*pCckmIeLen + 1)/2); + /* + * the buffer received from the upper layer is character buffer, + * we need to prepare the buffer taking 2 characters in to a U8 hex + * decimal number for example 7f0000f0...form a buffer to contain + * 7f in 0th location, 00 in 1st and f0 in 3rd location + */ + for (i = 0, j = 0; j < *pCckmIeLen; j += 2) { - return -EINVAL; + tempByte = (hdd_parse_hex(inPtr[j]) << 4) + | (hdd_parse_hex(inPtr[j + 1])); + (*pCckmIe)[i++] = tempByte; } + *pCckmIeLen = i; + return VOS_STATUS_SUCCESS; +} +#endif /* FEATURE_WLAN_CCX && FEATURE_WLAN_CCX_UPLOAD */ - *pNumChannels = tempInt; +/**--------------------------------------------------------------------------- - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, - "Number of channels are: %d", *pNumChannels); + \brief hdd_is_valid_mac_address() - Validate MAC address - for (j = 0; j < (*pNumChannels); j++) - { - /*inPtr pointing to the beginning of first space after number of channels*/ - inPtr = strpbrk( inPtr, " " ); - /*no channel list after the number of channels argument*/ - if (NULL == inPtr) - { - if (0 != j) - { - *pNumChannels = j; - return VOS_STATUS_SUCCESS; - } - else - { - return -EINVAL; - } - } + This function validates whether the given MAC address is valid or not + Expected MAC address is of the format XX:XX:XX:XX:XX:XX + where X is the hexa decimal digit character and separated by ':' + This algorithm works even if MAC address is not separated by ':' - /*removing empty space*/ - while ((SPACE_ASCII_VALUE == *inPtr) && ('\0' != *inPtr)) inPtr++; + This code checks given input string mac contains exactly 12 hexadecimal digits. + and a separator colon : appears in the input string only after + an even number of hex digits. - /*no channel list after the number of channels argument and spaces*/ - if ( '\0' == *inPtr ) + \param - pMacAddr pointer to the input MAC address + \return - 1 for valid and 0 for invalid + + --------------------------------------------------------------------------*/ + +v_BOOL_t hdd_is_valid_mac_address(const tANI_U8 *pMacAddr) +{ + int xdigit = 0; + int separator = 0; + while (*pMacAddr) + { + if (isxdigit(*pMacAddr)) { - if (0 != j) - { - *pNumChannels = j; - return VOS_STATUS_SUCCESS; - } - else - { - return -EINVAL; - } + xdigit++; } + else if (':' == *pMacAddr) + { + if (0 == xdigit || ((xdigit / 2) - 1) != separator) + break; - sscanf(inPtr, "%32s ", buf); - v = kstrtos32(buf, 10, &tempInt); - if ((v < 0) || - (tempInt <= 0) || - (tempInt > WNI_CFG_CURRENT_CHANNEL_STAMAX)) + ++separator; + } + else { - return -EINVAL; + separator = -1; + /* Invalid MAC found */ + return 0; } - pChannelList[j] = tempInt; - - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, - "Channel %d added to preferred channel list", - pChannelList[j] ); + ++pMacAddr; } - - return VOS_STATUS_SUCCESS; + return (xdigit == 12 && (separator == 5 || separator == 0)); } /**--------------------------------------------------------------------------- @@ -2770,7 +6649,6 @@ int hdd_stop (struct net_device *dev) netif_tx_disable(pAdapter->dev); netif_carrier_off(pAdapter->dev); - /* SoftAP ifaces should never go in power save mode making sure same here. */ if ( (WLAN_HDD_SOFTAP == pAdapter->device_mode ) @@ -3007,6 +6885,193 @@ void hdd_full_pwr_cbk(void *callbackContext, eHalStatus status) } } +#ifdef FEATURE_CESIUM_PROPRIETARY +static void hdd_tx_fail_ind_callback(v_U8_t *MacAddr, v_U8_t seqNo) +{ + int payload_len; + struct sk_buff *skb; + struct nlmsghdr *nlh; + v_U8_t *data; + + payload_len = ETH_ALEN; + + if (0 == cesium_pid) + { + hddLog(VOS_TRACE_LEVEL_ERROR, "%s: cesium process not registered", + __func__); + return; + } + + if ((skb = nlmsg_new(payload_len,GFP_ATOMIC)) == NULL) + { + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s: nlmsg_new() failed for msg size[%d]", + __func__, NLMSG_SPACE(payload_len)); + return; + } + + nlh = nlmsg_put(skb, cesium_pid, seqNo, 0, payload_len, NLM_F_REQUEST); + + if (NULL == nlh) + { + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s: nlmsg_put() failed for msg size[%d]", + __func__, NLMSG_SPACE(payload_len)); + + kfree_skb(skb); + return; + } + + data = nlmsg_data(nlh); + memcpy(data, MacAddr, ETH_ALEN); + + if (nlmsg_unicast(cesium_nl_srv_sock, skb, cesium_pid) < 0) + { + hddLog(VOS_TRACE_LEVEL_ERROR, "%s: nlmsg_unicast() failed for msg size[%d]", + __func__, NLMSG_SPACE(payload_len)); + } + + return; +} + +/**--------------------------------------------------------------------------- + \brief hdd_ParseuserParams - return a pointer to the next argument + + \return - status + +--------------------------------------------------------------------------*/ +static int hdd_ParseUserParams(tANI_U8 *pValue, tANI_U8 **ppArg) +{ + tANI_U8 *pVal; + + pVal = strchr(pValue, ' '); + + if (NULL == pVal) + { + /* no argument remains */ + return -EINVAL; + } + else if (SPACE_ASCII_VALUE != *pVal) + { + /* no space after the current argument */ + return -EINVAL; + } + + pVal++; + + /* remove empty spaces */ + while ((SPACE_ASCII_VALUE == *pVal) && ('\0' != *pVal)) + { + pVal++; + } + + /* no argument followed by spaces */ + if ('\0' == *pVal) + { + return -EINVAL; + } + + *ppArg = pVal; + + return 0; +} + +/**---------------------------------------------------------------------------- + \brief hdd_ParseIBSSTXFailEventParams - Parse params for SETIBSSTXFAILEVENT + + \return - status + +------------------------------------------------------------------------------*/ +static int hdd_ParseIBSSTXFailEventParams(tANI_U8 *pValue, + tANI_U8 *tx_fail_count, + tANI_U16 *pid) +{ + tANI_U8 *param = NULL; + int ret; + + ret = hdd_ParseUserParams(pValue, ¶m); + + if (0 == ret && NULL != param) + { + if (1 != sscanf(param, "%hhu", tx_fail_count)) + { + ret = -EINVAL; + goto done; + } + } + else + { + goto done; + } + + if (0 == *tx_fail_count) + { + *pid = 0; + goto done; + } + + pValue = param; + pValue++; + + ret = hdd_ParseUserParams(pValue, ¶m); + + if (0 == ret) + { + if (1 != sscanf(param, "%hu", pid)) + { + ret = -EINVAL; + goto done; + } + } + else + { + goto done; + } + +done: + return ret; +} + +static int hdd_open_cesium_nl_sock() +{ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0)) + struct netlink_kernel_cfg cfg = { + .groups = WLAN_NLINK_MCAST_GRP_ID, + .input = NULL + }; +#endif + int ret = 0; + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0)) + cesium_nl_srv_sock = netlink_kernel_create(&init_net, WLAN_NLINK_CESIUM, +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,7,0)) + THIS_MODULE, +#endif + &cfg); +#else + cesium_nl_srv_sock = netlink_kernel_create(&init_net, WLAN_NLINK_CESIUM, + WLAN_NLINK_MCAST_GRP_ID, NULL, NULL, THIS_MODULE); +#endif + + if (cesium_nl_srv_sock == NULL) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "NLINK: cesium netlink_kernel_create failed"); + ret = -ECONNREFUSED; + } + + return ret; +} + +static void hdd_close_cesium_nl_sock() +{ + if (NULL != cesium_nl_srv_sock) + { + netlink_kernel_release(cesium_nl_srv_sock); + cesium_nl_srv_sock = NULL; + } +} +#endif /* FEATURE_CESIUM_PROPRIETARY */ /**--------------------------------------------------------------------------- \brief hdd_req_bmps_cbk() - HDD Request BMPS callback function @@ -3239,8 +7304,6 @@ void hdd_set_station_ops( struct net_device *pWlanDev ) #ifdef QCA_WIFI_2_0 pWlanDev->tx_queue_len = 0; -#else - pWlanDev->tx_queue_len = NET_DEV_TX_QUEUE_LEN; #endif } @@ -3279,15 +7342,33 @@ static hdd_adapter_t* hdd_alloc_station_adapter( hdd_context_t *pHddCtx, tSirMac init_completion(&pAdapter->tdls_add_station_comp); init_completion(&pAdapter->tdls_del_station_comp); init_completion(&pAdapter->tdls_mgmt_comp); + init_completion(&pAdapter->tdls_link_establish_req_comp); #endif + +#ifdef FEATURE_CESIUM_PROPRIETARY + init_completion(&pAdapter->ibss_peer_info_comp); +#endif /* FEATURE_CESIUM_PROPRIETARY */ init_completion(&pHddCtx->mc_sus_event_var); init_completion(&pHddCtx->tx_sus_event_var); + init_completion(&pHddCtx->rx_sus_event_var); #ifdef QCA_WIFI_2_0 init_completion(&pHddCtx->ready_to_suspend); #endif init_completion(&pAdapter->ula_complete); + init_completion(&pAdapter->change_country_code); + +#ifdef FEATURE_WLAN_BATCH_SCAN + init_completion(&pAdapter->hdd_set_batch_scan_req_var); + init_completion(&pAdapter->hdd_get_batch_scan_req_var); + pAdapter->pBatchScanRsp = NULL; + pAdapter->numScanList = 0; + pAdapter->batchScanState = eHDD_BATCH_SCAN_STATE_STOPPED; + pAdapter->prev_batch_id = 0; + mutex_init(&pAdapter->hdd_batch_scan_lock); +#endif init_completion(&pAdapter->scan_info.scan_req_completion_event); init_completion(&pAdapter->scan_info.abortscan_event_var); + init_completion(&pHddCtx->wiphy_channel_update_event); vos_event_init(&pAdapter->scan_info.scan_finished_event); pAdapter->scan_info.scan_pending_option = WEXT_SCAN_PENDING_GIVEUP; @@ -3302,15 +7383,15 @@ static hdd_adapter_t* hdd_alloc_station_adapter( hdd_context_t *pHddCtx, tSirMac pWlanDev->watchdog_timeo = HDD_TX_TIMEOUT; pWlanDev->hard_header_len += LIBRA_HW_NEEDED_HEADROOM; +#ifdef QCA_WIFI_2_0 if (pHddCtx->cfg_ini->enableIPChecksumOffload) pWlanDev->features |= NETIF_F_HW_CSUM; else if (pHddCtx->cfg_ini->enableTCPChkSumOffld) pWlanDev->features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM; - -#if defined (QCA_WIFI_2_0) && !defined (QCA_WIFI_ISOC) - pWlanDev->features |= NETIF_F_RXCSUM; +#ifndef QCA_WIFI_ISOC + pWlanDev->features |= NETIF_F_RXCSUM; +#endif #endif - hdd_set_station_ops( pAdapter->dev ); pWlanDev->destructor = free_netdev; @@ -3381,9 +7462,17 @@ static eHalStatus hdd_smeCloseSessionCallback(void *pContext) /* need to make sure all of our scheduled work has completed. * This callback is called from MC thread context, so it is safe to * to call below flush workqueue API from here. + * + * Even though this is called from MC thread context, if there is a faulty + * work item in the system, that can hang this call forever. So flushing + * this global work queue is not safe; and now we make sure that + * individual work queues are stopped correctly. But the cancel work queue + * is a GPL only API, so the proprietary version of the driver would still + * rely on the global work queue flush. */ flush_scheduled_work(); #endif + /* We can be blocked while waiting for scheduled work to be * flushed, and the adapter structure can potentially be freed, in * which case the magic will have been reset. So make sure the @@ -3408,6 +7497,7 @@ VOS_STATUS hdd_init_station_mode( hdd_adapter_t *pAdapter ) int rc = 0; INIT_COMPLETION(pAdapter->session_open_comp_var); + sme_SetCurrDeviceMode(pHddCtx->hHal, pAdapter->device_mode); status = vos_get_vdev_types(pAdapter->device_mode, &type, &subType); if (VOS_STATUS_SUCCESS != status) { @@ -3582,6 +7672,13 @@ void hdd_deinit_adapter( hdd_context_t *pHddCtx, hdd_adapter_t *pAdapter ) case WLAN_HDD_SOFTAP: case WLAN_HDD_P2P_GO: { + + if (test_bit(WMM_INIT_DONE, &pAdapter->event_flags)) + { + hdd_wmm_adapter_close( pAdapter ); + clear_bit(WMM_INIT_DONE, &pAdapter->event_flags); + } + hdd_cleanup_actionframe(pHddCtx, pAdapter); hdd_unregister_hostapd(pAdapter); @@ -3617,6 +7714,24 @@ void hdd_cleanup_adapter( hdd_context_t *pHddCtx, hdd_adapter_t *pAdapter, tANI_ { struct net_device *pWlanDev = pAdapter->dev; +#ifdef FEATURE_WLAN_BATCH_SCAN + tHddBatchScanRsp *pNode; + tHddBatchScanRsp *pPrev; + if (pAdapter) + { + mutex_lock(&pAdapter->hdd_batch_scan_lock); + pNode = pAdapter->pBatchScanRsp; + while (pNode) + { + pPrev = pNode; + pNode = pNode->pNext; + vos_mem_free((v_VOID_t * )pPrev); + } + pAdapter->pBatchScanRsp = NULL; + mutex_unlock(&pAdapter->hdd_batch_scan_lock); + } +#endif + if(test_bit(NET_DEVICE_REGISTERED, &pAdapter->event_flags)) { if( rtnl_held ) { @@ -3634,33 +7749,70 @@ void hdd_cleanup_adapter( hdd_context_t *pHddCtx, hdd_adapter_t *pAdapter, tANI_ void hdd_set_pwrparams(hdd_context_t *pHddCtx) { - tSirSetPowerParamsReq powerRequest = { 0 }; + VOS_STATUS status; + hdd_adapter_t *pAdapter = NULL; + hdd_adapter_list_node_t *pAdapterNode = NULL, *pNext = NULL; - powerRequest.uIgnoreDTIM = 1; - powerRequest.uMaxLIModulatedDTIM = pHddCtx->cfg_ini->fMaxLIModulatedDTIM; + status = hdd_get_front_adapter ( pHddCtx, &pAdapterNode ); - if (pHddCtx->cfg_ini->enableModulatedDTIM) - { - powerRequest.uDTIMPeriod = pHddCtx->cfg_ini->enableModulatedDTIM; - powerRequest.uListenInterval = pHddCtx->hdd_actual_LI_value; - } - else + /*loop through all adapters.*/ + while ( NULL != pAdapterNode && VOS_STATUS_SUCCESS == status ) { - powerRequest.uListenInterval = pHddCtx->cfg_ini->enableDynamicDTIM; - } + pAdapter = pAdapterNode->pAdapter; + if ( (WLAN_HDD_INFRA_STATION != pAdapter->device_mode) + && (WLAN_HDD_P2P_CLIENT != pAdapter->device_mode) ) - /* Update ignoreDTIM and ListedInterval in CFG to remain at the DTIM - *specified during Enter/Exit BMPS when LCD off*/ - ccmCfgSetInt(pHddCtx->hHal, WNI_CFG_IGNORE_DTIM, powerRequest.uIgnoreDTIM, - NULL, eANI_BOOLEAN_FALSE); - ccmCfgSetInt(pHddCtx->hHal, WNI_CFG_LISTEN_INTERVAL, powerRequest.uListenInterval, - NULL, eANI_BOOLEAN_FALSE); + { // we skip this registration for modes other than STA and P2P client modes. + status = hdd_get_next_adapter ( pHddCtx, pAdapterNode, &pNext ); + pAdapterNode = pNext; + continue; + } - /* switch to the DTIM specified in cfg.ini */ - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "Switch to DTIM%d", powerRequest.uListenInterval); - sme_SetPowerParams( pHddCtx->hHal, &powerRequest, TRUE); + //Apply Dynamic DTIM For P2P + //Only if ignoreDynamicDtimInP2pMode is not set in ini + if ((pHddCtx->cfg_ini->enableDynamicDTIM || + pHddCtx->cfg_ini->enableModulatedDTIM) && + ((WLAN_HDD_INFRA_STATION == pAdapter->device_mode) || + ((WLAN_HDD_P2P_CLIENT == pAdapter->device_mode) && + !(pHddCtx->cfg_ini->ignoreDynamicDtimInP2pMode))) && + (eANI_BOOLEAN_TRUE == pAdapter->higherDtimTransition) && + (eConnectionState_Associated == + (WLAN_HDD_GET_STATION_CTX_PTR(pAdapter))->conn_info.connState) && + (pHddCtx->cfg_ini->fIsBmpsEnabled)) + { + tSirSetPowerParamsReq powerRequest = { 0 }; + powerRequest.uIgnoreDTIM = 1; + powerRequest.uMaxLIModulatedDTIM = pHddCtx->cfg_ini->fMaxLIModulatedDTIM; + + if (pHddCtx->cfg_ini->enableModulatedDTIM) + { + powerRequest.uDTIMPeriod = pHddCtx->cfg_ini->enableModulatedDTIM; + powerRequest.uListenInterval = pHddCtx->hdd_actual_LI_value; + } + else + { + powerRequest.uListenInterval = pHddCtx->cfg_ini->enableDynamicDTIM; + } + + /* Update ignoreDTIM and ListedInterval in CFG to remain at the DTIM + * specified during Enter/Exit BMPS when LCD off*/ + ccmCfgSetInt(pHddCtx->hHal, WNI_CFG_IGNORE_DTIM, powerRequest.uIgnoreDTIM, + NULL, eANI_BOOLEAN_FALSE); + ccmCfgSetInt(pHddCtx->hHal, WNI_CFG_LISTEN_INTERVAL, powerRequest.uListenInterval, + NULL, eANI_BOOLEAN_FALSE); + + /* switch to the DTIM specified in cfg.ini */ + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "Switch to DTIM %d", powerRequest.uListenInterval); + sme_SetPowerParams( pHddCtx->hHal, &powerRequest, TRUE); + break; + + } + + status = hdd_get_next_adapter ( pHddCtx, pAdapterNode, &pNext ); + pAdapterNode = pNext; + } } void hdd_reset_pwrparams(hdd_context_t *pHddCtx) @@ -3852,6 +8004,18 @@ hdd_adapter_t* hdd_open_adapter( hdd_context_t *pHddCtx, tANI_U8 session_type, if( NULL == pAdapter ) return NULL; +#ifdef FEATURE_WLAN_TDLS + /* A Mutex Lock is introduced while changing/initializing the mode to + * protect the concurrent access for the Adapters by TDLS module. + */ + if (mutex_lock_interruptible(&pHddCtx->tdls_lock)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: unable to lock list", __func__); + return NULL; + } +#endif + pAdapter->wdev.iftype = (session_type == WLAN_HDD_P2P_CLIENT) ? NL80211_IFTYPE_P2P_CLIENT: NL80211_IFTYPE_STATION; @@ -3859,6 +8023,9 @@ hdd_adapter_t* hdd_open_adapter( hdd_context_t *pHddCtx, tANI_U8 session_type, pAdapter->device_mode = session_type; status = hdd_init_station_mode( pAdapter ); +#ifdef FEATURE_WLAN_TDLS + mutex_unlock(&pHddCtx->tdls_lock); +#endif if( VOS_STATUS_SUCCESS != status ) goto err_free_netdev; @@ -3952,6 +8119,12 @@ hdd_adapter_t* hdd_open_adapter( hdd_context_t *pHddCtx, tANI_U8 session_type, pAdapter->wdev.iftype = NL80211_IFTYPE_STATION; pAdapter->device_mode = session_type; status = hdd_register_interface( pAdapter, rtnl_held ); + + hdd_init_tx_rx( pAdapter ); + + //Stop the Interface TX queue. + netif_tx_disable(pAdapter->dev); + netif_carrier_off(pAdapter->dev); } break; default: @@ -4012,18 +8185,19 @@ err_free_netdev: pAdapter->macAddressCurrent.bytes ); resume_bmps: - /* - * If Powersave Offload is enabled - * Fw will take care incase of concurrency - */ - if(!pHddCtx->cfg_ini->enablePowersaveOffload) + //If bmps disabled enable it + if (!pHddCtx->cfg_ini->enablePowersaveOffload) { - //If bmps disabled enable it if(VOS_STATUS_SUCCESS == exitbmpsStatus) { + if (pHddCtx->hdd_wlan_suspended) + { + hdd_set_pwrparams(pHddCtx); + } hdd_enable_bmps_imps(pHddCtx); } } + return NULL; } @@ -4050,21 +8224,38 @@ VOS_STATUS hdd_close_adapter( hdd_context_t *pHddCtx, hdd_adapter_t *pAdapter, { wlan_hdd_clear_concurrency_mode(pHddCtx, pAdapter->device_mode); hdd_cleanup_adapter( pHddCtx, pAdapterNode->pAdapter, rtnl_held ); - hdd_remove_adapter( pHddCtx, pAdapterNode ); - vos_mem_free( pAdapterNode ); - /* - * If Powersave Offload is enabled - * Fw will take care incase of concurrency + +#ifdef FEATURE_WLAN_TDLS + + /* A Mutex Lock is introduced while changing/initializing the mode to + * protect the concurrent access for the Adapters by TDLS module. */ - if(!pHddCtx->cfg_ini->enablePowersaveOffload) + if (mutex_lock_interruptible(&pHddCtx->tdls_lock)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: unable to lock list", __func__); + return VOS_STATUS_E_FAILURE; + } +#endif + + hdd_remove_adapter( pHddCtx, pAdapterNode ); + vos_mem_free( pAdapterNode ); + +#ifdef FEATURE_WLAN_TDLS + mutex_unlock(&pHddCtx->tdls_lock); +#endif + + + /* If there is a single session of STA/P2P client, re-enable BMPS */ + if ((!vos_concurrent_sessions_running()) && + ((pHddCtx->no_of_sessions[VOS_STA_MODE] >= 1) || + (pHddCtx->no_of_sessions[VOS_P2P_CLIENT_MODE] >= 1))) { - /* If there is a single session of STA/P2P client, re-enable BMPS */ - if ((!vos_concurrent_sessions_running()) && - ((pHddCtx->no_of_sessions[VOS_STA_MODE] >= 1) || - (pHddCtx->no_of_sessions[VOS_P2P_CLIENT_MODE] >= 1))) + if (pHddCtx->hdd_wlan_suspended) { - hdd_enable_bmps_imps(pHddCtx); + hdd_set_pwrparams(pHddCtx); } + hdd_enable_bmps_imps(pHddCtx); } return VOS_STATUS_SUCCESS; @@ -4233,8 +8424,13 @@ VOS_STATUS hdd_stop_adapter( hdd_context_t *pHddCtx, hdd_adapter_t *pAdapter ) } mutex_unlock(&pHddCtx->sap_lock); break; + case WLAN_HDD_MONITOR: +#ifdef WLAN_OPEN_SOURCE + cancel_work_sync(&pAdapter->sessionCtx.monitor.pAdapterForTx->monTxWorkQueue); +#endif break; + default: break; } @@ -4286,13 +8482,14 @@ VOS_STATUS hdd_reset_all_adapters( hdd_context_t *pHddCtx ) netif_tx_disable(pAdapter->dev); netif_carrier_off(pAdapter->dev); - //Record whether STA is associated - pAdapter->sessionCtx.station.bSendDisconnect = - hdd_connIsConnected( WLAN_HDD_GET_STATION_CTX_PTR( pAdapter )) ? - VOS_TRUE : VOS_FALSE; + pAdapter->sessionCtx.station.hdd_ReassocScenario = VOS_FALSE; hdd_deinit_tx_rx(pAdapter); - hdd_wmm_adapter_close(pAdapter); + if (test_bit(WMM_INIT_DONE, &pAdapter->event_flags)) + { + hdd_wmm_adapter_close( pAdapter ); + clear_bit(WMM_INIT_DONE, &pAdapter->event_flags); + } status = hdd_get_next_adapter ( pHddCtx, pAdapterNode, &pNext ); pAdapterNode = pNext; @@ -4308,7 +8505,10 @@ VOS_STATUS hdd_start_all_adapters( hdd_context_t *pHddCtx ) hdd_adapter_list_node_t *pAdapterNode = NULL, *pNext = NULL; VOS_STATUS status; hdd_adapter_t *pAdapter; +#ifndef MSM_PLATFORM v_MACADDR_t bcastMac = VOS_MAC_ADDR_BROADCAST_INITIALIZER; +#endif + eConnectionState connState; ENTER(); @@ -4323,6 +8523,9 @@ VOS_STATUS hdd_start_all_adapters( hdd_context_t *pHddCtx ) case WLAN_HDD_INFRA_STATION: case WLAN_HDD_P2P_CLIENT: case WLAN_HDD_P2P_DEVICE: + + connState = (WLAN_HDD_GET_STATION_CTX_PTR(pAdapter))->conn_info.connState; + hdd_init_station_mode(pAdapter); /* Open the gates for HDD to receive Wext commands */ pAdapter->isLinkUpSvcNeeded = FALSE; @@ -4333,19 +8536,31 @@ VOS_STATUS hdd_start_all_adapters( hdd_context_t *pHddCtx ) hdd_wlan_initial_scan(pAdapter); //Indicate disconnect event to supplicant if associated previously - if(pAdapter->sessionCtx.station.bSendDisconnect) + if (eConnectionState_Associated == connState || + eConnectionState_IbssConnected == connState ) { union iwreq_data wrqu; memset(&wrqu, '\0', sizeof(wrqu)); wrqu.ap_addr.sa_family = ARPHRD_ETHER; memset(wrqu.ap_addr.sa_data,'\0',ETH_ALEN); wireless_send_event(pAdapter->dev, SIOCGIWAP, &wrqu, NULL); - pAdapter->sessionCtx.station.bSendDisconnect = VOS_FALSE; + pAdapter->sessionCtx.station.hdd_ReassocScenario = VOS_FALSE; /* indicate disconnected event to nl80211 */ cfg80211_disconnected(pAdapter->dev, WLAN_REASON_UNSPECIFIED, NULL, 0, GFP_KERNEL); } + else if (eConnectionState_Connecting == connState) + { + /* + * Indicate connect failure to supplicant if we were in the + * process of connecting + */ + cfg80211_connect_result(pAdapter->dev, NULL, + NULL, 0, NULL, 0, + WLAN_STATUS_ASSOC_DENIED_UNSPEC, + GFP_KERNEL); + } break; case WLAN_HDD_SOFTAP: @@ -4353,11 +8568,17 @@ VOS_STATUS hdd_start_all_adapters( hdd_context_t *pHddCtx ) break; case WLAN_HDD_P2P_GO: - hddLog(VOS_TRACE_LEVEL_ERROR, "%s [SSR] send restart supplicant", +#ifdef MSM_PLATFORM + hddLog(VOS_TRACE_LEVEL_ERROR, "%s [SSR] send stop ap to supplicant", + __func__); + cfg80211_ap_stopped(pAdapter->dev, GFP_KERNEL); +#else + hddLog(VOS_TRACE_LEVEL_ERROR, "%s [SSR] send restart supplicant", __func__); - /* event supplicant to restart */ - cfg80211_del_sta(pAdapter->dev, - (const u8 *)&bcastMac.bytes[0], GFP_KERNEL); + /* event supplicant to restart */ + cfg80211_del_sta(pAdapter->dev, + (const u8 *)&bcastMac.bytes[0], GFP_KERNEL); +#endif break; case WLAN_HDD_MONITOR: @@ -4852,7 +9073,7 @@ void hdd_wlan_initial_scan(hdd_adapter_t *pAdapter) tCsrScanRequest scanReq; tCsrChannelInfo channelInfo; eHalStatus halStatus; - unsigned long scanId; + tANI_U32 scanId; hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); vos_mem_zero(&scanReq, sizeof(tCsrScanRequest)); @@ -5009,14 +9230,14 @@ void hdd_wlan_exit(hdd_context_t *pHddCtx) if (VOS_FTM_MODE == hdd_get_conparam()) { -#if defined(QCA_WIFI_2_0) && defined(QCA_WIFI_FTM) +#if defined(QCA_WIFI_2_0) && !defined(QCA_WIFI_ISOC) && defined(QCA_WIFI_FTM) if (hdd_ftm_stop(pHddCtx)) { hddLog(VOS_TRACE_LEVEL_FATAL,"%s: hdd_ftm_stop Failed",__func__); } #endif wlan_hdd_ftm_close(pHddCtx); - hddLog(VOS_TRACE_LEVEL_FATAL,"%s: FTM driver unloaded",__func__); + hddLog(VOS_TRACE_LEVEL_FATAL,"%s: FTM driver unloaded", __func__); goto free_hdd_ctx; } //Stop the Interface TX queue. @@ -5034,10 +9255,11 @@ void hdd_wlan_exit(hdd_context_t *pHddCtx) { pAdapter = hdd_get_adapter(pHddCtx, WLAN_HDD_INFRA_STATION); + if (pAdapter == NULL) + pAdapter = hdd_get_adapter(pHddCtx, WLAN_HDD_IBSS); } } -#ifdef QCA_WIFI_ISOC /* DeRegister with platform driver as client for Suspend/Resume */ vosStatus = hddDeregisterPmOps(pHddCtx); if ( !VOS_IS_STATUS_SUCCESS( vosStatus ) ) @@ -5045,7 +9267,7 @@ void hdd_wlan_exit(hdd_context_t *pHddCtx) hddLog(VOS_TRACE_LEVEL_FATAL,"%s: hddDeregisterPmOps failed",__func__); VOS_ASSERT(0); } -#endif + vosStatus = hddDevTmUnregisterNotifyCallback(pHddCtx); if ( !VOS_IS_STATUS_SUCCESS( vosStatus ) ) { @@ -5065,8 +9287,26 @@ void hdd_wlan_exit(hdd_context_t *pHddCtx) // we are about to Request Full Power, and since that is synchronized, // the expectation is that by the time Request Full Power has completed, // all scans will be cancelled. - if(pAdapter) - hdd_abort_mac_scan(pHddCtx, pAdapter->sessionId); + if (NULL != pAdapter) + hdd_abort_mac_scan( pHddCtx, pAdapter->sessionId); + else + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s: pAdapter is NULL, cannot Abort scan", __func__); + + //Stop the traffic monitor timer + if ( VOS_TIMER_STATE_RUNNING == + vos_timer_getCurrentState(&pHddCtx->tx_rx_trafficTmr)) + { + vos_timer_stop(&pHddCtx->tx_rx_trafficTmr); + } + + // Destroy the traffic monitor timer + if (!VOS_IS_STATUS_SUCCESS(vos_timer_destroy( + &pHddCtx->tx_rx_trafficTmr))) + { + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s: Cannot deallocate Traffic monitor timer", __func__); + } if(!pConfig->enablePowersaveOffload) { @@ -5130,6 +9370,8 @@ void hdd_wlan_exit(hdd_context_t *pHddCtx) hdd_set_idle_ps_config(pHddCtx, FALSE); } + hdd_debugfs_exit(pHddCtx); + // Unregister the Net Device Notifier unregister_netdevice_notifier(&hdd_netdev_notifier); @@ -5162,9 +9404,6 @@ void hdd_wlan_exit(hdd_context_t *pHddCtx) vos_chipVoteOffXOBuffer(NULL, NULL, NULL); - //Clean up HDD Nlink Service - send_btc_nlink_msg(WLAN_MODULE_DOWN_IND, 0); - nl_srv_exit(); //This requires pMac access, Call this before vos_close(). hdd_unregister_mcast_bcast_filter(pHddCtx); @@ -5195,6 +9434,18 @@ void hdd_wlan_exit(hdd_context_t *pHddCtx) if(pHddCtx->cfg_ini->fIsLogpEnabled) vos_watchdog_close(pVosContext); + //Clean up HDD Nlink Service + send_btc_nlink_msg(WLAN_MODULE_DOWN_IND, 0); +#ifdef WLAN_KD_READY_NOTIFIER + nl_srv_exit(pHddCtx->ptt_pid); +#else + nl_srv_exit(); +#endif /* WLAN_KD_READY_NOTIFIER */ + +#ifdef FEATURE_CESIUM_PROPRIETARY + hdd_close_cesium_nl_sock(); +#endif /* FEATURE_CESIUM_PROPRIETARY */ + /* Cancel the vote for XO Core ON. * This is done here to ensure there is no race condition since MC, TX and WD threads have * exited at this point @@ -5233,7 +9484,12 @@ void hdd_wlan_exit(hdd_context_t *pHddCtx) } free_hdd_ctx: - wiphy_unregister(wiphy) ; + /* FTM mode, WIPHY did not registered + If un-register here, system crash will happen */ + if (VOS_FTM_MODE != hdd_get_conparam()) + { + wiphy_unregister(wiphy) ; + } wiphy_free(wiphy) ; if (hdd_is_ssr_required()) { @@ -5250,35 +9506,35 @@ free_hdd_ctx: !defined (QCA_WIFI_ISOC) void __hdd_wlan_exit(void) { - hdd_context_t *pHddCtx = NULL; - v_CONTEXT_t pVosContext = NULL; + hdd_context_t *pHddCtx = NULL; + v_CONTEXT_t pVosContext = NULL; - //Get the global vos context - pVosContext = vos_get_global_context(VOS_MODULE_ID_SYS, NULL); + //Get the global vos context + pVosContext = vos_get_global_context(VOS_MODULE_ID_SYS, NULL); - if(!pVosContext) - return; + if(!pVosContext) + return; - //Get the HDD context. - pHddCtx = (hdd_context_t *)vos_get_context(VOS_MODULE_ID_HDD, - pVosContext); + //Get the HDD context. + pHddCtx = (hdd_context_t *)vos_get_context(VOS_MODULE_ID_HDD, + pVosContext); - if(!pHddCtx) - return; + if(!pHddCtx) + return; - /* module exit should never proceed if SSR is not completed */ - while(pHddCtx->isLogpInProgress){ - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:SSR in Progress; block rmmod for 1 second!!!", - __func__); - msleep(1000); - } + /* module exit should never proceed if SSR is not completed */ + while(pHddCtx->isLogpInProgress){ + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:SSR in Progress; block rmmod for 1 second!!!", + __func__); + msleep(1000); + } - pHddCtx->isLoadUnloadInProgress = TRUE; - vos_set_load_unload_in_progress(VOS_MODULE_ID_VOSS, TRUE); + pHddCtx->isLoadUnloadInProgress = TRUE; + vos_set_load_unload_in_progress(VOS_MODULE_ID_VOSS, TRUE); - //Do all the cleanup before deregistering the driver - hdd_wlan_exit(pHddCtx); + //Do all the cleanup before deregistering the driver + hdd_wlan_exit(pHddCtx); } #endif /* QCA_WIFI_2_0 && !QCA_WIFI_ISOC */ @@ -5369,6 +9625,7 @@ VOS_STATUS hdd_post_voss_start_config(hdd_context_t* pHddCtx) { eHalStatus halStatus; v_U32_t listenInterval; + tANI_U32 ignoreDtim; // Send ready indication to the HDD. This will kick off the MAC @@ -5381,12 +9638,15 @@ VOS_STATUS hdd_post_voss_start_config(hdd_context_t* pHddCtx) return VOS_STATUS_E_FAILURE; } - // Set default LI into HDD context, + // Set default LI and ignoreDtim into HDD context, // otherwise under some race condition, HDD will set 0 LI value into RIVA, // And RIVA will crash wlan_cfgGetInt(pHddCtx->hHal, WNI_CFG_LISTEN_INTERVAL, &listenInterval); pHddCtx->hdd_actual_LI_value = listenInterval; - + wlan_cfgGetInt(pHddCtx->hHal, WNI_CFG_IGNORE_DTIM, &ignoreDtim); + pHddCtx->hdd_actual_ignore_DTIM_value = ignoreDtim; + + return VOS_STATUS_SUCCESS; } @@ -5542,6 +9802,12 @@ void hdd_exchange_version_and_caps(hdd_context_t *pHddCtx) if(!pHddCtx->cfg_ini->fEnableActiveModeOffload) sme_disableFeatureCapablity(WLANACTIVE_OFFLOAD); #endif + /* Indicate if IBSS heartbeat monitoring needs to be offloaded */ + if (!pHddCtx->cfg_ini->enableIbssHeartBeatOffload) + { + sme_disableFeatureCapablity(IBSS_HEARTBEAT_OFFLOAD); + } + sme_featureCapsExchange(pHddCtx->hHal); } @@ -5552,15 +9818,41 @@ void hdd_exchange_version_and_caps(hdd_context_t *pHddCtx) /* Initialize channel list in sme based on the country code */ VOS_STATUS hdd_set_sme_chan_list(hdd_context_t *hdd_ctx) { - /* - * call crda before sme_init_chan_list which will read NV and store - * the default country code. - */ - wlan_hdd_get_crda_regd_entry(hdd_ctx->wiphy, hdd_ctx->cfg_ini); - return sme_init_chan_list(hdd_ctx->hHal); } +/**--------------------------------------------------------------------------- + + \brief hdd_is_5g_supported() - HDD function to know if hardware supports 5GHz + + \param - pHddCtx - Pointer to the hdd context + + \return - true if hardware supports 5GHz + + --------------------------------------------------------------------------*/ +static boolean hdd_is_5g_supported(hdd_context_t * pHddCtx) +{ + /* If wcnss_wlan_iris_xo_mode() returns WCNSS_XO_48MHZ(1); + * then hardware support 5Ghz. + */ +#ifdef QCA_WIFI_ISOC + if (WCNSS_XO_48MHZ == wcnss_wlan_iris_xo_mode()) + { + hddLog(VOS_TRACE_LEVEL_INFO, "%s: Hardware supports 5Ghz", __func__); + return true; + } + else + { + hddLog(VOS_TRACE_LEVEL_INFO, "%s: Hardware doesn't supports 5Ghz", + __func__); + return false; + } +#else + return true; +#endif +} + + /**--------------------------------------------------------------------------- \brief hdd_wlan_startup() - HDD init function @@ -5595,7 +9887,7 @@ int hdd_wlan_startup(struct device *dev, v_VOID_t *hif_sc) /* * cfg80211: wiphy allocation */ - wiphy = wlan_hdd_cfg80211_init(sizeof(hdd_context_t)) ; + wiphy = wlan_hdd_cfg80211_wiphy_alloc(sizeof(hdd_context_t)) ; if(wiphy == NULL) { @@ -5634,10 +9926,25 @@ int hdd_wlan_startup(struct device *dev, v_VOID_t *hif_sc) init_completion(&pHddCtx->full_pwr_comp_var); init_completion(&pHddCtx->standby_comp_var); init_completion(&pHddCtx->req_bmps_comp_var); + +#ifdef CONFIG_ENABLE_LINUX_REG + init_completion(&pHddCtx->linux_reg_req); +#else init_completion(&pHddCtx->driver_crda_req); +#endif + + spin_lock_init(&pHddCtx->schedScan_lock); hdd_list_init( &pHddCtx->hddAdapters, MAX_NUMBER_OF_ADAPTERS ); +#ifdef FEATURE_WLAN_TDLS + /* tdls_lock is initialized before an hdd_open_adapter ( which is + * invoked by other instances also) to protect the concurrent + * access for the Adapters by TDLS module. + */ + mutex_init(&pHddCtx->tdls_lock); +#endif + #ifdef QCA_WIFI_2_0 /* Initialize the adf_ctx handle */ adf_ctx = vos_mem_malloc(sizeof(*adf_ctx)); @@ -5659,6 +9966,7 @@ int hdd_wlan_startup(struct device *dev, v_VOID_t *hif_sc) ((VosContextType*)(pVosContext))->adf_ctx = adf_ctx; #endif /* QCA_WIFI_2_0 */ + pHddCtx->nEnableStrictRegulatoryForFCC = TRUE; // Load all config first as TL config is needed during vos_open pHddCtx->cfg_ini = (hdd_config_t*) kmalloc(sizeof(hdd_config_t), GFP_KERNEL); if(pHddCtx->cfg_ini == NULL) @@ -5688,6 +9996,41 @@ int hdd_wlan_startup(struct device *dev, v_VOID_t *hif_sc) hddLog(VOS_TRACE_LEVEL_INFO, "Setting configuredMcastBcastFilter: %d", pHddCtx->cfg_ini->mcastBcastFilterSetting); + if (false == hdd_is_5g_supported(pHddCtx)) + { + //5Ghz is not supported. + if (1 != pHddCtx->cfg_ini->nBandCapability) + { + hddLog(VOS_TRACE_LEVEL_INFO, + "%s: Setting pHddCtx->cfg_ini->nBandCapability = 1", __func__); + pHddCtx->cfg_ini->nBandCapability = 1; + } + } + + /* If SNR Monitoring is enabled, FW has to parse all beacons + * for calcaluting and storing the average SNR, so set Nth beacon + * filter to 1 to enable FW to parse all the beaocons + */ + if (1 == pHddCtx->cfg_ini->fEnableSNRMonitoring) + { + /* The log level is deliberately set to WARN as overriding + * nthBeaconFilter to 1 will increase power cosumption and this + * might just prove helpful to detect the power issue. + */ + hddLog(VOS_TRACE_LEVEL_WARN, + "%s: Setting pHddCtx->cfg_ini->nthBeaconFilter = 1", __func__); + pHddCtx->cfg_ini->nthBeaconFilter = 1; + } + /* + * cfg80211: Initialization ... + */ + if (0 < wlan_hdd_cfg80211_init(dev, wiphy, pHddCtx->cfg_ini)) + { + hddLog(VOS_TRACE_LEVEL_FATAL, + "%s: wlan_hdd_cfg80211_init return failure", __func__); + goto err_config; + } + // Update VOS trace levels based upon the cfg.ini hdd_vos_trace_enable(VOS_MODULE_ID_BAP, pHddCtx->cfg_ini->vosTraceEnableBAP); @@ -5701,6 +10044,8 @@ int hdd_wlan_startup(struct device *dev, v_VOID_t *hif_sc) pHddCtx->cfg_ini->vosTraceEnableSME); hdd_vos_trace_enable(VOS_MODULE_ID_PE, pHddCtx->cfg_ini->vosTraceEnablePE); + hdd_vos_trace_enable(VOS_MODULE_ID_PMC, + pHddCtx->cfg_ini->vosTraceEnablePMC); hdd_vos_trace_enable(VOS_MODULE_ID_WDA, pHddCtx->cfg_ini->vosTraceEnableWDA); hdd_vos_trace_enable(VOS_MODULE_ID_SYS, @@ -5734,7 +10079,7 @@ int hdd_wlan_startup(struct device *dev, v_VOID_t *hif_sc) if(!VOS_IS_STATUS_SUCCESS( status )) { hddLog(VOS_TRACE_LEVEL_FATAL,"%s: vos_watchdog_open failed",__func__); - goto err_config; + goto err_wdclose; } } @@ -5748,11 +10093,43 @@ int hdd_wlan_startup(struct device *dev, v_VOID_t *hif_sc) goto err_wdclose; } +#ifdef CONFIG_ENABLE_LINUX_REG + /* initialize the NV module. This is required so that + we can initialize the channel information in wiphy + from the NV.bin data. The channel information in + wiphy needs to be initialized before wiphy registration */ + + status = vos_nv_open(); + if (!VOS_IS_STATUS_SUCCESS(status)) + { + /* NV module cannot be initialized */ + hddLog( VOS_TRACE_LEVEL_FATAL, + "%s: vos_nv_open failed", __func__); + goto err_clkvote; + } + + status = vos_init_wiphy_from_nv_bin(); + if (!VOS_IS_STATUS_SUCCESS(status)) + { + /* NV module cannot be initialized */ + hddLog( VOS_TRACE_LEVEL_FATAL, + "%s: vos_init_wiphy failed", __func__); + goto err_vos_nv_close; + } + + /* registration of wiphy dev with cfg80211 */ + if (0 > wlan_hdd_cfg80211_register(wiphy)) + { + hddLog(VOS_TRACE_LEVEL_ERROR,"%s: wiphy register failed", __func__); + goto err_vos_nv_close; + } +#endif + status = vos_open( &pVosContext, 0); if ( !VOS_IS_STATUS_SUCCESS( status )) { hddLog(VOS_TRACE_LEVEL_FATAL, "%s: vos_open failed", __func__); - goto err_clkvote; + goto err_wiphy_unregister; } #if defined(QCA_WIFI_2_0) && !defined(QCA_WIFI_ISOC) && \ @@ -5776,50 +10153,11 @@ int hdd_wlan_startup(struct device *dev, v_VOID_t *hif_sc) goto err_vosclose; } -register_wiphy: - /* - * cfg80211: Initialization and registration ... - */ - if (0 < wlan_hdd_cfg80211_register(dev, wiphy, pHddCtx->cfg_ini)) - { - hddLog(VOS_TRACE_LEVEL_FATAL, - "%s: wlan_hdd_cfg80211_register return failure", __func__); - if (hdd_get_conparam() == VOS_FTM_MODE) - goto err_config; - else - goto err_vosclose; - } - - if (VOS_FTM_MODE == hdd_get_conparam()) - { - if ( VOS_STATUS_SUCCESS != wlan_hdd_ftm_open(pHddCtx) ) - { - wiphy_unregister(wiphy); - hddLog(VOS_TRACE_LEVEL_FATAL,"%s: wlan_hdd_ftm_open Failed",__func__); - goto err_free_hdd_context; - } - -#if defined(QCA_WIFI_2_0) && defined(QCA_WIFI_FTM) - if (hdd_ftm_start(pHddCtx)) - { - wiphy_unregister(wiphy); - hddLog(VOS_TRACE_LEVEL_FATAL,"%s: hdd_ftm_start Failed",__func__); - goto err_free_hdd_context; - } -#endif - hddLog(VOS_TRACE_LEVEL_FATAL,"%s: FTM driver loaded",__func__); - -#if defined(QCA_WIFI_2_0) && !defined(QCA_WIFI_ISOC) - complete(&wlan_start_comp); -#endif - return VOS_STATUS_SUCCESS; - } - status = hdd_set_sme_chan_list(pHddCtx); if (status != VOS_STATUS_SUCCESS) { hddLog(VOS_TRACE_LEVEL_FATAL, "%s: Failed to init channel list", __func__); - goto err_wiphy_reg; + goto err_vosclose; } /* Note that the vos_preStart() sequence triggers the cfg download. @@ -5830,7 +10168,7 @@ register_wiphy: if ( VOS_STATUS_SUCCESS != status ) { hddLog(VOS_TRACE_LEVEL_FATAL, "%s: Failed hdd_set_sme_config", __func__); - goto err_wiphy_reg; + goto err_vosclose; } //Initialize the WMM module @@ -5838,18 +10176,31 @@ register_wiphy: if (!VOS_IS_STATUS_SUCCESS(status)) { hddLog(VOS_TRACE_LEVEL_FATAL, "%s: hdd_wmm_init failed", __func__); - goto err_wiphy_reg; + goto err_vosclose; } /* In the integrated architecture we update the configuration from the INI file and from NV before vOSS has been started so that the final contents are available to send down to the cCPU */ + if (0 == enable_dfs_chan_scan || 1 == enable_dfs_chan_scan) + { + pHddCtx->cfg_ini->enableDFSChnlScan = enable_dfs_chan_scan; + hddLog(VOS_TRACE_LEVEL_INFO, "%s: module enable_dfs_chan_scan set to %d", + __func__, enable_dfs_chan_scan); + } + if (0 == enable_11d || 1 == enable_11d) + { + pHddCtx->cfg_ini->Is11dSupportEnabled = enable_11d; + hddLog(VOS_TRACE_LEVEL_INFO, "%s: module enable_11d set to %d", + __func__, enable_11d); + } + // Apply the cfg.ini to cfg.dat if (FALSE == hdd_update_config_dat(pHddCtx)) { hddLog(VOS_TRACE_LEVEL_FATAL,"%s: config update failed",__func__ ); - goto err_wiphy_reg; + goto err_vosclose; } // Apply the NV to cfg.dat @@ -5922,7 +10273,7 @@ register_wiphy: { hddLog(VOS_TRACE_LEVEL_ERROR,"%s: Failed to set MAC Address. " "HALStatus is %08d [x%08x]",__func__, halStatus, halStatus ); - goto err_wiphy_reg; + goto err_vosclose; } } @@ -5932,7 +10283,7 @@ register_wiphy: if ( !VOS_IS_STATUS_SUCCESS( status ) ) { hddLog(VOS_TRACE_LEVEL_FATAL,"%s: vos_start failed",__func__); - goto err_wiphy_reg; + goto err_vosclose; } /* Exchange capability info between Host and FW and also get versioning info from FW */ @@ -5946,6 +10297,45 @@ register_wiphy: goto err_vosstop; } +#ifndef CONFIG_ENABLE_LINUX_REG + wlan_hdd_cfg80211_update_reg_info( wiphy ); + +#ifdef QCA_WIFI_2_0 + wlan_hdd_cfg80211_update_wiphy_caps( wiphy ); +#endif + +register_wiphy: + /* registration of wiphy dev with cfg80211 */ + if (0 > wlan_hdd_cfg80211_register(wiphy)) + { + hddLog(VOS_TRACE_LEVEL_ERROR,"%s: wiphy register failed", __func__); + goto err_vosstop; + } +#endif + + if (VOS_FTM_MODE == hdd_get_conparam()) + { + if ( VOS_STATUS_SUCCESS != wlan_hdd_ftm_open(pHddCtx) ) + { + wiphy_unregister(wiphy); + hddLog(VOS_TRACE_LEVEL_FATAL,"%s: wlan_hdd_ftm_open Failed",__func__); + goto err_free_hdd_context; + } +#if defined(QCA_WIFI_2_0) && !defined(QCA_WIFI_ISOC) && defined(QCA_WIFI_FTM) + if (hdd_ftm_start(pHddCtx)) + { + wiphy_unregister(wiphy); + hddLog(VOS_TRACE_LEVEL_FATAL,"%s: hdd_ftm_start Failed",__func__); + goto err_free_hdd_context; + } +#endif + hddLog(VOS_TRACE_LEVEL_FATAL,"%s: FTM driver loaded", __func__); +#if defined(QCA_WIFI_2_0) && !defined(QCA_WIFI_ISOC) + complete(&wlan_start_comp); +#endif + return VOS_STATUS_SUCCESS; + } + if (VOS_STA_SAP_MODE == hdd_get_conparam()) { pAdapter = hdd_open_adapter( pHddCtx, WLAN_HDD_SOFTAP, "softap.%d", @@ -6003,6 +10393,30 @@ register_wiphy: goto err_close_adapter; } + if (country_code) + { + eHalStatus ret; + hdd_checkandupdate_dfssetting(pAdapter, country_code); +#ifndef CONFIG_ENABLE_LINUX_REG + hdd_checkandupdate_phymode(pAdapter, country_code); +#endif + ret = sme_ChangeCountryCode(pHddCtx->hHal, NULL, + country_code, + pAdapter, pHddCtx->pvosContext, + eSIR_TRUE, eSIR_TRUE); + if (eHAL_STATUS_SUCCESS == ret) + { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + "%s: SME Change Country code from module param fail ret=%d", + __func__, ret); + } + else + { + hddLog(VOS_TRACE_LEVEL_INFO, "%s: module country code set to %c%c", + __func__, country_code[0], country_code[1]); + } + } + #ifdef WLAN_BTAMP_FEATURE vStatus = WLANBAP_Open(pVosContext); if(!VOS_IS_STATUS_SUCCESS(vStatus)) @@ -6047,7 +10461,6 @@ register_wiphy: sme_UpdateChannelConfig(pHddCtx->hHal); #endif -#ifdef QCA_WIFI_ISOC /* Register with platform driver as client for Suspend/Resume */ status = hddRegisterPmOps(pHddCtx); if ( !VOS_IS_STATUS_SUCCESS( status ) ) @@ -6059,7 +10472,14 @@ register_wiphy: goto err_close_adapter; #endif //WLAN_BTAMP_FEATURE } -#endif + + /* Open debugfs interface */ + if (VOS_STATUS_SUCCESS != hdd_debugfs_init(pAdapter)) + { + VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + "%s: hdd_debugfs_init failed!", __func__); + } + /* Register TM level change handler function to the platform */ status = hddDevTmRegisterNotifyCallback(pHddCtx); if ( !VOS_IS_STATUS_SUCCESS( status ) ) @@ -6092,6 +10512,10 @@ register_wiphy: goto err_reg_netdev; } +#ifdef WLAN_KD_READY_NOTIFIER + pHddCtx->kd_nl_init = 1; +#endif /* WLAN_KD_READY_NOTIFIER */ + //Initialize the BTC service if(btc_activate_service(pHddCtx) != 0) { @@ -6120,6 +10544,14 @@ register_wiphy: } #endif +#ifdef FEATURE_CESIUM_PROPRIETARY + if (hdd_open_cesium_nl_sock() < 0) + { + hddLog(VOS_TRACE_LEVEL_FATAL,"%s: hdd_open_cesium_nl_sock failed", __func__); + goto err_nl_srv; + } +#endif + hdd_register_mcast_bcast_filter(pHddCtx); if (VOS_STA_SAP_MODE != hdd_get_conparam()) { @@ -6148,10 +10580,25 @@ register_wiphy: vos_set_load_unload_in_progress(VOS_MODULE_ID_VOSS, FALSE); hdd_allow_suspend(); - +#ifndef CONFIG_ENABLE_LINUX_REG + /*updating wiphy so that regulatory user hints can be processed*/ + if (wiphy) + { + regulatory_hint(wiphy, "00"); + } +#endif // Initialize the restart logic wlan_hdd_restart_init(pHddCtx); + //Register the traffic monitor timer now + if ( pHddCtx->cfg_ini->dynSplitscan) + { + vos_timer_init(&pHddCtx->tx_rx_trafficTmr, + VOS_TIMER_TYPE_SW, + hdd_tx_rx_pkt_cnt_stat_timer_handler, + (void *)pHddCtx); + } + if(pHddCtx->cfg_ini->enablePowersaveOffload) { hdd_set_idle_ps_config(pHddCtx, TRUE); @@ -6163,8 +10610,11 @@ register_wiphy: goto success; err_nl_srv: +#ifdef WLAN_KD_READY_NOTIFIER + nl_srv_exit(pHddCtx->ptt_pid); +#else nl_srv_exit(); - +#endif /* WLAN_KD_READY_NOTIFIER */ err_reg_netdev: unregister_netdevice_notifier(&hdd_netdev_notifier); @@ -6173,9 +10623,9 @@ err_free_power_on_lock: err_unregister_pmops: hddDevTmUnregisterNotifyCallback(pHddCtx); -#ifdef QCA_WIFI_ISOC hddDeregisterPmOps(pHddCtx); -#endif + + hdd_debugfs_exit(pHddCtx); #ifdef WLAN_BTAMP_FEATURE err_bap_stop: @@ -6190,22 +10640,34 @@ err_bap_close: err_close_adapter: hdd_close_all_adapters( pHddCtx ); +#ifndef CONFIG_ENABLE_LINUX_REG + wiphy_unregister(wiphy) ; +#endif + err_vosstop: vos_stop(pVosContext); -err_wiphy_reg: - wiphy_unregister(wiphy); - -err_vosclose: +err_vosclose: status = vos_sched_close( pVosContext ); if (!VOS_IS_STATUS_SUCCESS(status)) { VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, "%s: Failed to close VOSS Scheduler", __func__); VOS_ASSERT( VOS_IS_STATUS_SUCCESS( status ) ); } - vos_close(pVosContext ); + vos_close(pVosContext ); + +err_wiphy_unregister: + +#ifdef CONFIG_ENABLE_LINUX_REG + wiphy_unregister(wiphy); + +err_vos_nv_close: + + vos_nv_close(); err_clkvote: +#endif + vos_chipVoteOffXOBuffer(NULL, NULL, NULL); err_wdclose: @@ -6264,6 +10726,10 @@ static int hdd_driver_init( void) int max_retries = 0; #endif +#ifdef WCONN_TRACE_KMSG_LOG_BUFF + vos_wconn_trace_init(); +#endif + ENTER(); #ifdef WLAN_OPEN_SOURCE @@ -6279,6 +10745,9 @@ static int hdd_driver_init( void) { hddLog(VOS_TRACE_LEVEL_FATAL, "%s: Libra WLAN not Powered Up. " "exiting", __func__); +#ifdef WLAN_OPEN_SOURCE + wake_lock_destroy(&wlan_wake_lock); +#endif return -EIO; } @@ -6297,6 +10766,9 @@ static int hdd_driver_init( void) } if (max_retries >= 5) { hddLog(VOS_TRACE_LEVEL_FATAL,"%s: WCNSS driver not ready", __func__); +#ifdef WLAN_OPEN_SOURCE + wake_lock_destroy(&wlan_wake_lock); +#endif return -ENODEV; } #endif @@ -6421,7 +10893,6 @@ static int hdd_driver_init( void) send_btc_nlink_msg(WLAN_MODULE_UP_IND, 0); pr_info("%s: driver loaded\n", WLAN_MODULE_NAME); - } EXIT(); @@ -6470,6 +10941,7 @@ static void hdd_driver_exit(void) { #ifdef QCA_WIFI_ISOC hdd_context_t *pHddCtx = NULL; + int retry = 0; #else adf_os_device_t adf_ctx; #endif @@ -6496,11 +10968,18 @@ static void hdd_driver_exit(void) } else { - /* module exit should never proceed if SSR is not completed */ - while(isWDresetInProgress()){ - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:SSR in Progress; block rmmod for 1 second!!!",__func__); + while(isWDresetInProgress()) { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:SSR in Progress; block rmmod for 1 second!!!", __func__); msleep(1000); - } + + if (retry++ == HDD_MOD_EXIT_SSR_MAX_RETRIES) { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:SSR never completed, fatal error", __func__); + VOS_BUG(0); + } + } + pHddCtx->isLoadUnloadInProgress = TRUE; vos_set_load_unload_in_progress(VOS_MODULE_ID_VOSS, TRUE); @@ -6528,6 +11007,10 @@ static void hdd_driver_exit(void) vos_mem_exit(); #endif +#ifdef WCONN_TRACE_KMSG_LOG_BUFF + vos_wconn_trace_exit(); +#endif + done: #ifdef WLAN_OPEN_SOURCE wake_lock_destroy(&wlan_wake_lock); @@ -6687,7 +11170,8 @@ VOS_STATUS hdd_softap_sta_deauth(hdd_adapter_t *pAdapter, v_U8_t *pDestMacAddres ENTER(); - hddLog( LOGE, "hdd_softap_sta_deauth:(%p, false)", (WLAN_HDD_GET_CTX(pAdapter))->pvosContext); + hddLog(LOG1, "hdd_softap_sta_deauth:(%p, false)", + (WLAN_HDD_GET_CTX(pAdapter))->pvosContext); //Ignore request to deauth bcmc station if( pDestMacAddress[0] & 0x1 ) @@ -7056,11 +11540,19 @@ VOS_STATUS wlan_hdd_restart_driver(hdd_context_t *pHddCtx) return status; } +/* + * API to find if there is any STA or P2P-Client is connected + */ +VOS_STATUS hdd_issta_p2p_clientconnected(hdd_context_t *pHddCtx) +{ + return sme_isSta_p2p_clientConnected(pHddCtx->hHal); +} + //Register the module init/exit functions module_init(hdd_module_init); module_exit(hdd_module_exit); -MODULE_LICENSE("Dual BSD/GPL"); +MODULE_LICENSE("Proprietary"); MODULE_AUTHOR("Qualcomm Atheros, Inc."); MODULE_DESCRIPTION("WLAN HOST DEVICE DRIVER"); @@ -7073,3 +11565,12 @@ module_param_call(con_mode, con_mode_handler, param_get_int, &con_mode, module_param_call(fwpath, fwpath_changed_handler, param_get_string, &fwpath, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); + +module_param(enable_dfs_chan_scan, int, + S_IRUSR | S_IRGRP | S_IROTH); + +module_param(enable_11d, int, + S_IRUSR | S_IRGRP | S_IROTH); + +module_param(country_code, charp, + S_IRUSR | S_IRGRP | S_IROTH); diff --git a/CORE/HDD/src/wlan_hdd_oemdata.c b/CORE/HDD/src/wlan_hdd_oemdata.c index 7ab47b9e02e9..2279a87c9e39 100644 --- a/CORE/HDD/src/wlan_hdd_oemdata.c +++ b/CORE/HDD/src/wlan_hdd_oemdata.c @@ -218,8 +218,14 @@ int iw_set_oem_data_req( vos_mem_zero(&oemDataReqConfig, sizeof(tOemDataReqConfig)); - vos_mem_copy((&oemDataReqConfig)->oemDataReq, pOemDataReq->oemDataReq, OEM_DATA_REQ_SIZE); - + if (copy_from_user((&oemDataReqConfig)->oemDataReq, + pOemDataReq->oemDataReq, OEM_DATA_REQ_SIZE)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s: copy_from_user() failed!", __func__); + return -EFAULT; + } + status = sme_OemDataReq(WLAN_HDD_GET_HAL_CTX(pAdapter), pAdapter->sessionId, &oemDataReqConfig, diff --git a/CORE/HDD/src/wlan_hdd_p2p.c b/CORE/HDD/src/wlan_hdd_p2p.c index a41a65886795..ac3c46d8721a 100644 --- a/CORE/HDD/src/wlan_hdd_p2p.c +++ b/CORE/HDD/src/wlan_hdd_p2p.c @@ -25,6 +25,7 @@ * to the Linux Foundation. */ + /**======================================================================== \file wlan_hdd_p2p.c @@ -43,6 +44,7 @@ #include "sme_Api.h" #include "wlan_hdd_p2p.h" #include "sapApi.h" +#include "wlan_hdd_main.h" #include #include @@ -337,7 +339,7 @@ static int wlan_hdd_request_remain_on_channel( struct wiphy *wiphy, #endif pRemainChanCtx->duration = duration; pRemainChanCtx->dev = dev; - *cookie = (tANI_U32) pRemainChanCtx; + *cookie = (uintptr_t) pRemainChanCtx; pRemainChanCtx->cookie = *cookie; pRemainChanCtx->rem_on_chan_request = request_type; cfgState->remain_on_chan_ctx = pRemainChanCtx; @@ -356,7 +358,8 @@ static int wlan_hdd_request_remain_on_channel( struct wiphy *wiphy, sme_RemainOnChannel( WLAN_HDD_GET_HAL_CTX(pAdapter), sessionId, chan->hw_value, duration, - wlan_hdd_remain_on_channel_callback, pAdapter ); + wlan_hdd_remain_on_channel_callback, pAdapter, + (tANI_U8)(request_type == REMAIN_ON_CHANNEL_REQUEST)? TRUE:FALSE); if( REMAIN_ON_CHANNEL_REQUEST == request_type) { @@ -443,7 +446,7 @@ void hdd_remainChanReadyHandler( hdd_adapter_t *pAdapter ) #else pAdapter->dev, #endif - (tANI_U32)pRemainChanCtx, + (uintptr_t)pRemainChanCtx, &pRemainChanCtx->chan, #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,8,0)) pRemainChanCtx->chan_type, @@ -478,15 +481,18 @@ int wlan_hdd_cfg80211_cancel_remain_on_channel( struct wiphy *wiphy, #endif hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); hdd_cfg80211_state_t *cfgState = WLAN_HDD_GET_CFG_STATE_PTR( pAdapter ); - int status = 0; + hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX( pAdapter ); + int status; hddLog( LOG1, "Cancel remain on channel req"); - if (((hdd_context_t*)pAdapter->pHddCtx)->isLogpInProgress) + status = wlan_hdd_validate_context(pHddCtx); + + if (0 != status) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s:LOGP in Progress. Ignore!!!", __func__); - return -EAGAIN; + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: HDD context is not valid", __func__); + return status; } /* FIXME cancel currently running remain on chan. * Need to check cookie and cancel accordingly @@ -499,8 +505,8 @@ int wlan_hdd_cfg80211_cancel_remain_on_channel( struct wiphy *wiphy, __func__); return -EINVAL; } - - /* wait until remain on channel ready event received + + /* wait until remain on channel ready event received * for already issued remain on channel request */ status = wait_for_completion_interruptible_timeout(&pAdapter->rem_on_chan_ready_event, msecs_to_jiffies(WAIT_REM_CHAN_READY)); @@ -578,11 +584,13 @@ int wlan_hdd_action( struct wiphy *wiphy, struct net_device *dev, #endif hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR( dev ); hdd_cfg80211_state_t *cfgState = WLAN_HDD_GET_CFG_STATE_PTR( pAdapter ); + hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX( pAdapter ); tANI_U16 extendedWait = 0; tANI_U8 type = WLAN_HDD_GET_TYPE_FRM_FC(buf[0]); tANI_U8 subType = WLAN_HDD_GET_SUBTYPE_FRM_FC(buf[0]); tActionFrmType actionFrmType; bool noack = 0; + int status; #ifdef WLAN_FEATURE_11W tANI_U8 *pTxFrmBuf = (tANI_U8 *) buf; // For SA Query, we have to set protect bit #endif @@ -591,12 +599,15 @@ int wlan_hdd_action( struct wiphy *wiphy, struct net_device *dev, hdd_adapter_t *goAdapter; #endif - if (((hdd_context_t*)pAdapter->pHddCtx)->isLogpInProgress) + status = wlan_hdd_validate_context(pHddCtx); + + if (0 != status) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s:LOGP in Progress. Ignore!!!", __func__); - return -EBUSY; + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: HDD context is not valid", __func__); + return status; } + #ifdef WLAN_FEATURE_P2P_DEBUG if ((type == SIR_MAC_MGMT_FRAME) && (subType == SIR_MAC_MGMT_ACTION) && @@ -742,7 +753,7 @@ int wlan_hdd_action( struct wiphy *wiphy, struct net_device *dev, extendedWait = (tANI_U16)wait; goto send_frame; } - + remain_on_channel: INIT_COMPLETION(pAdapter->offchannel_tx_event); status = wlan_hdd_request_remain_on_channel(wiphy, dev, @@ -762,7 +773,11 @@ int wlan_hdd_action( struct wiphy *wiphy, struct net_device *dev, } goto err_rem_channel; } - + /* This will extend timer in LIM when sending Any action frame + * It will cover remain on channel timer till next action frame + * in rx direction. + */ + extendedWait = (tANI_U16)wait; /* Wait for driver to be ready on the requested channel */ status = wait_for_completion_interruptible_timeout( &pAdapter->offchannel_tx_event, @@ -805,8 +820,17 @@ int wlan_hdd_action( struct wiphy *wiphy, struct net_device *dev, else { #endif - *cookie = (tANI_U32) cfgState->buf; + *cookie = (uintptr_t) cfgState->buf; cfgState->action_cookie = *cookie; + /*There is race between expiration of remain on channel + in driver and also sending an action frame in wlan_hdd_action. + As the remain on chan context is NULL here , which means + LIM remain on channel timer expired and + wlan_hdd_remain_on_channel_callback has cleared + cfgState->remain_on_chan_ctx to NULL so let's + do a fresh remain on channel. + */ + goto remain_on_channel; #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) } #endif @@ -878,7 +902,7 @@ err: } return 0; err_rem_channel: - *cookie = (tANI_U32)cfgState; + *cookie = (uintptr_t)cfgState; cfg80211_mgmt_tx_status( #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0)) pAdapter->dev->ieee80211_ptr, @@ -1239,20 +1263,22 @@ int wlan_hdd_add_virtual_intf( struct wiphy *wiphy, char *name, } /*Allow addition multiple interface for WLAN_HDD_P2P_CLIENT session type*/ - if (WLAN_HDD_P2P_CLIENT != wlan_hdd_get_session_type(type) && - WLAN_HDD_INFRA_STATION != wlan_hdd_get_session_type(type) && - hdd_get_adapter(pHddCtx, wlan_hdd_get_session_type(type)) != NULL) + if ((hdd_get_adapter(pHddCtx, wlan_hdd_get_session_type(type)) != NULL) +#ifdef QCA_WIFI_2_0 + && WLAN_HDD_P2P_CLIENT != wlan_hdd_get_session_type(type) + && WLAN_HDD_INFRA_STATION != wlan_hdd_get_session_type(type) +#endif + ) { hddLog(VOS_TRACE_LEVEL_ERROR,"%s: Interface type %d already exists. Two" "interfaces of same type are not supported currently.",__func__, type); return NULL; } - if ( pHddCtx->cfg_ini->isP2pDeviceAddrAdministrated ) + if (pHddCtx->cfg_ini->isP2pDeviceAddrAdministrated && + ((NL80211_IFTYPE_P2P_GO == type) || + (NL80211_IFTYPE_P2P_CLIENT == type))) { - if( (NL80211_IFTYPE_P2P_GO == type) || - (NL80211_IFTYPE_P2P_CLIENT == type) ) - { /* Generate the P2P Interface Address. this address must be * different from the P2P Device Address. */ @@ -1262,7 +1288,6 @@ int wlan_hdd_add_virtual_intf( struct wiphy *wiphy, char *name, wlan_hdd_get_session_type(type), name, p2pDeviceAddress.bytes, VOS_TRUE ); - } } else { @@ -1298,26 +1323,30 @@ int wlan_hdd_del_virtual_intf( struct wiphy *wiphy, struct net_device *dev ) #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0)) struct net_device *dev = wdev->netdev; #endif - hdd_context_t *pHddCtx = (hdd_context_t*) wiphy_priv(wiphy); - hdd_adapter_t *pVirtAdapter = WLAN_HDD_GET_PRIV_PTR(dev); - ENTER(); + hdd_context_t *pHddCtx = (hdd_context_t*) wiphy_priv(wiphy); + hdd_adapter_t *pVirtAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + int status; + ENTER(); - hddLog(VOS_TRACE_LEVEL_INFO, "%s: device_mode = %d", - __func__,pVirtAdapter->device_mode); - if (pHddCtx->isLogpInProgress) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s:LOGP in Progress. Ignore!!!", __func__); - return -EAGAIN; - } + hddLog(VOS_TRACE_LEVEL_INFO, "%s: device_mode = %d", + __func__,pVirtAdapter->device_mode); + + status = wlan_hdd_validate_context(pHddCtx); - wlan_hdd_release_intf_addr( pHddCtx, + if (0 != status) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: HDD context is not valid", __func__); + return status; + } + + wlan_hdd_release_intf_addr( pHddCtx, pVirtAdapter->macAddressCurrent.bytes ); - hdd_stop_adapter( pHddCtx, pVirtAdapter ); - hdd_close_adapter( pHddCtx, pVirtAdapter, TRUE ); - EXIT(); - return 0; + hdd_stop_adapter( pHddCtx, pVirtAdapter ); + hdd_close_adapter( pHddCtx, pVirtAdapter, TRUE ); + EXIT(); + return 0; } void hdd_sendMgmtFrameOverMonitorIface( hdd_adapter_t *pMonAdapter, @@ -1675,7 +1704,7 @@ static void hdd_wlan_tx_complete( hdd_adapter_t* pAdapter, if (data == NULL) { - hddLog( LOGE, FL("Not Able to Push %d byte to skb"), cfgState->len); + hddLog( LOGE, FL("Not Able to Push %zu byte to skb"), cfgState->len); kfree_skb( cfgState->skb ); return; } @@ -1724,6 +1753,7 @@ static void hdd_wlan_tx_complete( hdd_adapter_t* pAdapter, netif_rx_ni( skb ); /* Enable Queues which we have disabled earlier */ - netif_tx_start_all_queues( pAdapter->dev ); + netif_tx_start_all_queues( pAdapter->dev ); } + diff --git a/CORE/HDD/src/wlan_hdd_scan.c b/CORE/HDD/src/wlan_hdd_scan.c index d80382c161c7..20c9f10d992d 100644 --- a/CORE/HDD/src/wlan_hdd_scan.c +++ b/CORE/HDD/src/wlan_hdd_scan.c @@ -520,7 +520,7 @@ static eHalStatus hdd_IndicateScanResult(hdd_scan_info_t *scanInfo, tCsrScanResu /* AGE */ event.cmd = IWEVCUSTOM; p = custom; - p += snprintf(p, MAX_CUSTOM_LEN, " Age: %lu", + p += scnprintf(p, MAX_CUSTOM_LEN, " Age: %lu", vos_timer_get_system_ticks() - descriptor->nReceivedTime); event.u.data.length = p - custom; current_event = iwe_stream_add_point (scanInfo->info,current_event, end, @@ -931,8 +931,7 @@ int iw_set_cscan(struct net_device *dev, struct iw_request_info *info, int i, j, ssid_start; hdd_scan_pending_option_e scanPendingOption = WEXT_SCAN_PENDING_GIVEUP; - /* save the original buffer */ - str_ptr = wrqu->data.pointer; + str_ptr = extra; i = WEXT_CSCAN_HEADER_SIZE; diff --git a/CORE/HDD/src/wlan_hdd_softap_tx_rx.c b/CORE/HDD/src/wlan_hdd_softap_tx_rx.c index d489bbbc6368..14b8e9826d96 100644 --- a/CORE/HDD/src/wlan_hdd_softap_tx_rx.c +++ b/CORE/HDD/src/wlan_hdd_softap_tx_rx.c @@ -25,6 +25,7 @@ * to the Linux Foundation. */ + /**=========================================================================== \file wlan_hdd_softap_tx_rx.c @@ -84,6 +85,120 @@ static void hdd_softap_dump_sk_buff(struct sk_buff * skb) skb->data[13], skb->data[14], skb->data[15]); } #endif + +extern void hdd_set_wlan_suspend_mode(bool suspend); + +/**============================================================================ + @brief hdd_softap_traffic_monitor_timeout_handler() - + SAP/P2P GO traffin monitor timeout handler function + If no traffic during programmed time, trigger suspand mode + + @param pUsrData : [in] pointer to hdd context + @return : NONE + ===========================================================================*/ +void hdd_softap_traffic_monitor_timeout_handler( void *pUsrData ) +{ + hdd_context_t *pHddCtx = (hdd_context_t *)pUsrData; + v_TIME_t currentTS; + + if (NULL == pHddCtx) + { + VOS_TRACE( VOS_MODULE_ID_HDD_SOFTAP, VOS_TRACE_LEVEL_ERROR, + "%s: Invalid user data, context", __func__); + return; + } + + currentTS = vos_timer_get_system_time(); + if (pHddCtx->cfg_ini->trafficIdleTimeout < + (currentTS - pHddCtx->traffic_monitor.lastFrameTs)) + { + VOS_TRACE( VOS_MODULE_ID_HDD_SOFTAP, VOS_TRACE_LEVEL_INFO, + "%s: No Data Activity calling Wlan Suspend", __func__ ); + hdd_set_wlan_suspend_mode(1); + atomic_set(&pHddCtx->traffic_monitor.isActiveMode, 0); + } + else + { + vos_timer_start(&pHddCtx->traffic_monitor.trafficTimer, + pHddCtx->cfg_ini->trafficIdleTimeout); + } + + return; +} + +VOS_STATUS hdd_start_trafficMonitor( hdd_adapter_t *pAdapter ) +{ + + hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + VOS_STATUS status = VOS_STATUS_SUCCESS; + + status = wlan_hdd_validate_context(pHddCtx); + + if (0 != status) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: HDD context is not valid", __func__); + return status; + } + + if ((pHddCtx->cfg_ini->enableTrafficMonitor) && + (!pHddCtx->traffic_monitor.isInitialized)) + { + atomic_set(&pHddCtx->traffic_monitor.isActiveMode, 1); + vos_timer_init(&pHddCtx->traffic_monitor.trafficTimer, + VOS_TIMER_TYPE_SW, + hdd_softap_traffic_monitor_timeout_handler, + pHddCtx); + vos_lock_init(&pHddCtx->traffic_monitor.trafficLock); + pHddCtx->traffic_monitor.isInitialized = 1; + pHddCtx->traffic_monitor.lastFrameTs = 0; + /* Start traffic monitor timer here + * If no AP assoc, immediatly go into suspend */ + VOS_TRACE( VOS_MODULE_ID_HDD_SOFTAP, VOS_TRACE_LEVEL_INFO, + "%s Start Traffic Monitor Timer", __func__); + vos_timer_start(&pHddCtx->traffic_monitor.trafficTimer, + pHddCtx->cfg_ini->trafficIdleTimeout); + } + else + { + VOS_TRACE( VOS_MODULE_ID_HDD_SOFTAP, VOS_TRACE_LEVEL_INFO, + "%s Traffic Monitor is not Enable in ini file", __func__); + } + return status; +} + +VOS_STATUS hdd_stop_trafficMonitor( hdd_adapter_t *pAdapter ) +{ + hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + VOS_STATUS status = VOS_STATUS_SUCCESS; + + status = wlan_hdd_validate_context(pHddCtx); + + if (-ENODEV == status) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: HDD context is not valid", __func__); + return status; + } + + if (pHddCtx->traffic_monitor.isInitialized) + { + if (VOS_TIMER_STATE_STOPPED != + vos_timer_getCurrentState(&pHddCtx->traffic_monitor.trafficTimer)) + { + VOS_TRACE( VOS_MODULE_ID_HDD_SOFTAP, VOS_TRACE_LEVEL_INFO, + "%s Stop Traffic Monitor Timer", __func__); + vos_timer_stop(&pHddCtx->traffic_monitor.trafficTimer); + } + VOS_TRACE( VOS_MODULE_ID_HDD_SOFTAP, VOS_TRACE_LEVEL_INFO, + "%s Destroy Traffic Monitor Timer", __func__); + vos_timer_destroy(&pHddCtx->traffic_monitor.trafficTimer); + vos_lock_destroy(&pHddCtx->traffic_monitor.trafficLock); + pHddCtx->traffic_monitor.isInitialized = 0; + } + return VOS_STATUS_SUCCESS; +} + /**============================================================================ @brief hdd_softap_flush_tx_queues() - Utility function to flush the TX queues @@ -133,6 +248,7 @@ static VOS_STATUS hdd_softap_flush_tx_queues( hdd_adapter_t *pAdapter ) pAdapter->aStaInfo[STAId].txSuspended[i] = VOS_FALSE; spin_unlock_bh(&pAdapter->aStaInfo[STAId].wmm_tx_queue[i].lock); } + pAdapter->aStaInfo[STAId].vosLowResource = VOS_FALSE; } spin_unlock_bh( &pAdapter->staInfo_lock ); @@ -246,7 +362,7 @@ int hdd_softap_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) // If the memory differentiation mode is enabled, the memory limit of each queue will be // checked. Over-limit packets will be dropped. - spin_lock(&pAdapter->aStaInfo[STAId].wmm_tx_queue[ac].lock); + spin_lock_bh(&pAdapter->aStaInfo[STAId].wmm_tx_queue[ac].lock); hdd_list_size(&pAdapter->aStaInfo[STAId].wmm_tx_queue[ac], &pktListSize); if(pktListSize >= pAdapter->aTxQueueLimit[ac]) { @@ -256,7 +372,23 @@ int hdd_softap_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) netif_stop_subqueue(dev, skb_get_queue_mapping(skb)); txSuspended = VOS_TRUE; } - spin_unlock(&pAdapter->aStaInfo[STAId].wmm_tx_queue[ac].lock); + + /* If 3/4th of the max queue size is used then enable the flag. + * This flag indicates to place the DHCP packets in VOICE AC queue.*/ + if (WLANTL_AC_BE == ac) + { + if (pAdapter->aStaInfo[STAId].wmm_tx_queue[ac].count >= HDD_TX_QUEUE_LOW_WATER_MARK) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, + "%s: TX queue for Best Effort AC is 3/4th full", __func__); + pAdapter->aStaInfo[STAId].vosLowResource = VOS_TRUE; + } + else + { + pAdapter->aStaInfo[STAId].vosLowResource = VOS_FALSE; + } + } + spin_unlock_bh(&pAdapter->aStaInfo[STAId].wmm_tx_queue[ac].lock); if (VOS_TRUE == txSuspended) { @@ -278,9 +410,9 @@ int hdd_softap_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) INIT_LIST_HEAD(&pktNode->anchor); - spin_lock(&pAdapter->aStaInfo[STAId].wmm_tx_queue[ac].lock); + spin_lock_bh(&pAdapter->aStaInfo[STAId].wmm_tx_queue[ac].lock); status = hdd_list_insert_back_size(&pAdapter->aStaInfo[STAId].wmm_tx_queue[ac], &pktNode->anchor, &pktListSize ); - spin_unlock(&pAdapter->aStaInfo[STAId].wmm_tx_queue[ac].lock); + spin_unlock_bh(&pAdapter->aStaInfo[STAId].wmm_tx_queue[ac].lock); if ( !VOS_IS_STATUS_SUCCESS( status ) ) { @@ -619,7 +751,9 @@ VOS_STATUS hdd_softap_init_tx_rx( hdd_adapter_t *pAdapter ) HDD_SOFTAP_VI_WEIGHT_DEFAULT, HDD_SOFTAP_VO_WEIGHT_DEFAULT }; + pAdapter->isVosOutOfResource = VOS_FALSE; + pAdapter->isVosLowResource = VOS_FALSE; vos_mem_zero(&pAdapter->stats, sizeof(struct net_device_stats)); @@ -648,6 +782,12 @@ VOS_STATUS hdd_softap_init_tx_rx( hdd_adapter_t *pAdapter ) /* Update the AC weights suitable for SoftAP mode of operation */ WLANTL_SetACWeights((WLAN_HDD_GET_CTX(pAdapter))->pvosContext, pACWeights); + if (VOS_STATUS_SUCCESS != hdd_start_trafficMonitor(pAdapter)) + { + VOS_TRACE( VOS_MODULE_ID_HDD_SOFTAP, VOS_TRACE_LEVEL_ERROR, + "%s: failed to start Traffic Monito timer ", __func__ ); + return VOS_STATUS_E_INVAL; + } return status; } @@ -663,6 +803,13 @@ VOS_STATUS hdd_softap_deinit_tx_rx( hdd_adapter_t *pAdapter ) { VOS_STATUS status = VOS_STATUS_SUCCESS; + if (VOS_STATUS_SUCCESS != hdd_stop_trafficMonitor(pAdapter)) + { + VOS_TRACE( VOS_MODULE_ID_HDD_SOFTAP, VOS_TRACE_LEVEL_ERROR, + "%s: Fail to Stop Traffic Monito timer", __func__ ); + return VOS_STATUS_E_INVAL; + } + status = hdd_softap_flush_tx_queues(pAdapter); return status; @@ -770,6 +917,7 @@ VOS_STATUS hdd_softap_deinit_tx_rx_sta ( hdd_adapter_t *pAdapter, v_U8_t STAId ) v_BOOL_t txSuspended[NUM_TX_QUEUES]; v_U8_t tlAC; hdd_hostapd_state_t *pHostapdState; + v_U8_t i; pHostapdState = WLAN_HDD_GET_HOSTAP_STATE_PTR(pAdapter); @@ -804,6 +952,15 @@ VOS_STATUS hdd_softap_deinit_tx_rx_sta ( hdd_adapter_t *pAdapter, v_U8_t STAId ) } vos_mem_zero(&pAdapter->aStaInfo[STAId], sizeof(hdd_station_info_t)); + /* re-init spin lock, since netdev can still open adapter until + * driver gets unloaded + */ + for (i = 0; i < NUM_TX_QUEUES; i ++) + { + hdd_list_init(&pAdapter->aStaInfo[STAId].wmm_tx_queue[i], + HDD_TX_QUEUE_MAX_LEN); + } + if (BSS_START == pHostapdState->bssState) { for (ac = HDD_LINUX_AC_VO; ac <= HDD_LINUX_AC_BK; ac++) @@ -951,6 +1108,26 @@ VOS_STATUS hdd_softap_tx_fetch_packet_cbk( v_VOID_t *vosContext, return VOS_STATUS_E_FAILURE; } + /* Monitor traffic */ + if ( pHddCtx->cfg_ini->enableTrafficMonitor ) + { + pHddCtx->traffic_monitor.lastFrameTs = vos_timer_get_system_time(); + if ( !atomic_read(&pHddCtx->traffic_monitor.isActiveMode) ) + { + vos_lock_acquire(&pHddCtx->traffic_monitor.trafficLock); + /* It was IDLE mode, + * this is new state, then switch mode from suspend to resume */ + if ( !atomic_read(&pHddCtx->traffic_monitor.isActiveMode) ) + { + hdd_set_wlan_suspend_mode(0); + vos_timer_start(&pHddCtx->traffic_monitor.trafficTimer, + pHddCtx->cfg_ini->trafficIdleTimeout); + atomic_set(&pHddCtx->traffic_monitor.isActiveMode, 1); + } + vos_lock_release(&pHddCtx->traffic_monitor.trafficLock); + } + } + ++pAdapter->hdd_stats.hddTxRxStats.txFetched; STAId = *pStaId; @@ -1247,7 +1424,27 @@ VOS_STATUS hdd_softap_rx_packet_cbk( v_VOID_t *vosContext, VOS_ASSERT(0); return VOS_STATUS_E_FAILURE; } - + + /* Monitor traffic */ + if ( pHddCtx->cfg_ini->enableTrafficMonitor ) + { + pHddCtx->traffic_monitor.lastFrameTs = vos_timer_get_system_time(); + if ( !atomic_read(&pHddCtx->traffic_monitor.isActiveMode) ) + { + vos_lock_acquire(&pHddCtx->traffic_monitor.trafficLock); + /* It was IDLE mode, + * this is new state, then switch mode from suspend to resume */ + if ( !atomic_read(&pHddCtx->traffic_monitor.isActiveMode) ) + { + hdd_set_wlan_suspend_mode(0); + vos_timer_start(&pHddCtx->traffic_monitor.trafficTimer, + pHddCtx->cfg_ini->trafficIdleTimeout); + atomic_set(&pHddCtx->traffic_monitor.isActiveMode, 1); + } + vos_lock_release(&pHddCtx->traffic_monitor.trafficLock); + } + } + ++pAdapter->hdd_stats.hddTxRxStats.rxChains; // walk the chain until all are processed @@ -1331,6 +1528,7 @@ VOS_STATUS hdd_softap_rx_packet_cbk( v_VOID_t *vosContext, if (NET_RX_SUCCESS == rxstat) { ++pAdapter->hdd_stats.hddTxRxStats.rxDelivered; + ++pAdapter->hdd_stats.hddTxRxStats.pkt_rx_count; } else { @@ -1454,11 +1652,25 @@ VOS_STATUS hdd_softap_rx_packet_cbk(v_VOID_t *vosContext, VOS_STATUS hdd_softap_DeregisterSTA( hdd_adapter_t *pAdapter, tANI_U8 staId ) { VOS_STATUS vosStatus = VOS_STATUS_SUCCESS; - hdd_context_t *pHddCtx = pAdapter->pHddCtx; + hdd_context_t *pHddCtx; + if (NULL == pAdapter) + { + VOS_TRACE(VOS_MODULE_ID_HDD_SOFTAP, VOS_TRACE_LEVEL_ERROR, + "%s: pAdapter is NULL", __func__); + return VOS_STATUS_E_INVAL; + } + + if (WLAN_HDD_ADAPTER_MAGIC != pAdapter->magic) + { + VOS_TRACE(VOS_MODULE_ID_HDD_SOFTAP, VOS_TRACE_LEVEL_ERROR, + "%s: Invalid pAdapter magic", __func__); + return VOS_STATUS_E_INVAL; + } + pHddCtx = (hdd_context_t*)(pAdapter->pHddCtx); //Clear station in TL and then update HDD data structures. This helps //to block RX frames from other station to this station. - vosStatus = WLANTL_ClearSTAClient( (WLAN_HDD_GET_CTX(pAdapter))->pvosContext, staId ); + vosStatus = WLANTL_ClearSTAClient( pHddCtx->pvosContext, staId ); if ( !VOS_IS_STATUS_SUCCESS( vosStatus ) ) { VOS_TRACE( VOS_MODULE_ID_HDD_SOFTAP, VOS_TRACE_LEVEL_ERROR, @@ -1594,6 +1806,15 @@ VOS_STATUS hdd_softap_RegisterSTA( hdd_adapter_t *pAdapter, return vosStatus; } + //Timer value should be in milliseconds + if ( pHddCtx->cfg_ini->dynSplitscan && + ( VOS_TIMER_STATE_RUNNING != + vos_timer_getCurrentState(&pHddCtx->tx_rx_trafficTmr))) + { + vos_timer_start(&pHddCtx->tx_rx_trafficTmr, + pHddCtx->cfg_ini->trafficMntrTmrForSplitScan); + } + // if ( WPA ), tell TL to go to 'connected' and after keys come to the driver, // then go to 'authenticated'. For all other authentication types (those that do // not require upper layer authentication) we can put TL directly into 'authenticated' @@ -1667,6 +1888,16 @@ VOS_STATUS hdd_softap_stop_bss( hdd_adapter_t *pAdapter) { VOS_STATUS vosStatus = VOS_STATUS_E_FAILURE; v_U8_t staId = 0; + hdd_context_t *pHddCtx; + pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + + /*bss deregister is not allowed during wlan driver loading or unloading*/ + if (pHddCtx->isLoadUnloadInProgress) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s:Loading_unloading in Progress. Ignore!!!",__func__); + return VOS_STATUS_E_PERM; + } vosStatus = hdd_softap_Deregister_BC_STA( pAdapter); @@ -1747,3 +1978,19 @@ VOS_STATUS hdd_softap_GetStaId(hdd_adapter_t *pAdapter, v_MACADDR_t *pMacAddress return VOS_STATUS_E_FAILURE; } +VOS_STATUS hdd_softap_GetConnectedStaId(hdd_adapter_t *pAdapter, v_U8_t *staId) +{ + v_U8_t i; + + for (i = 0; i < WLAN_MAX_STA_COUNT; i++) + { + if (pAdapter->aStaInfo[i].isUsed && + (!vos_is_macaddr_broadcast(&pAdapter->aStaInfo[i].macAddrSTA))) + { + *staId = i; + return VOS_STATUS_SUCCESS; + } + } + + return VOS_STATUS_E_FAILURE; +} diff --git a/CORE/HDD/src/wlan_hdd_tdls.c b/CORE/HDD/src/wlan_hdd_tdls.c index 6767e20c6fbd..d70444d74c4e 100644 --- a/CORE/HDD/src/wlan_hdd_tdls.c +++ b/CORE/HDD/src/wlan_hdd_tdls.c @@ -45,10 +45,10 @@ #include "wlan_hdd_cfg80211.h" -static struct mutex tdls_lock; static tANI_S32 wlan_hdd_get_tdls_discovery_peer_cnt(tdlsCtx_t *pHddTdlsCtx); static tANI_S32 wlan_hdd_tdls_peer_reset_discovery_processed(tdlsCtx_t *pHddTdlsCtx); static void wlan_hdd_tdls_timers_destroy(tdlsCtx_t *pHddTdlsCtx); +static void wlan_hdd_tdls_peer_timers_destroy(tdlsCtx_t *pHddTdlsCtx); #ifdef CONFIG_TDLS_IMPLICIT static void wlan_hdd_tdls_pre_setup(struct work_struct *work); #endif @@ -89,29 +89,28 @@ static v_VOID_t wlan_hdd_tdls_start_peer_discover_timer(tdlsCtx_t *pHddTdlsCtx, v_U32_t discoveryExpiry) { hdd_station_ctx_t *pHddStaCtx; + hdd_context_t *pHddCtx; + + if ((NULL == pHddTdlsCtx)) + return; + + if ((NULL == pHddTdlsCtx->pAdapter) ) + return; + + pHddCtx = WLAN_HDD_GET_CTX( pHddTdlsCtx->pAdapter ); + + if (NULL == pHddCtx) + return; if ( mutexLock ) { - if (mutex_lock_interruptible(&tdls_lock)) + if (mutex_lock_interruptible(&pHddCtx->tdls_lock)) { VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, "%s: unable to lock list: %d", __func__, __LINE__); return; } } - if (NULL == pHddTdlsCtx) - { - if ( mutexLock ) - mutex_unlock(&tdls_lock); - return; - } - - if (NULL == pHddTdlsCtx->pAdapter) - { - if ( mutexLock ) - mutex_unlock(&tdls_lock); - return; - } pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pHddTdlsCtx->pAdapter); #ifdef FEATURE_WLAN_TDLS_INTERNAL @@ -123,7 +122,7 @@ static v_VOID_t wlan_hdd_tdls_start_peer_discover_timer(tdlsCtx_t *pHddTdlsCtx, pHddTdlsCtx->ap_rssi); if ( mutexLock ) - mutex_unlock(&tdls_lock); + mutex_unlock(&pHddCtx->tdls_lock); return; } @@ -136,28 +135,29 @@ static v_VOID_t wlan_hdd_tdls_discover_peer_cb( v_PVOID_t userData ) struct list_head *pos; hddTdlsPeer_t *curr_peer; hdd_station_ctx_t *pHddStaCtx; + hdd_context_t *pHddCtx; tdlsCtx_t *pHddTdlsCtx = (tdlsCtx_t *)userData; int discover_req_sent = 0; v_U32_t discover_expiry = TDLS_SUB_DISCOVERY_PERIOD; tANI_BOOLEAN doMutexLock = eANI_BOOLEAN_TRUE; - if (mutex_lock_interruptible(&tdls_lock)) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: unable to lock list : %d", __func__, __LINE__); - return; - } - - if (NULL == pHddTdlsCtx) - { - mutex_unlock(&tdls_lock); + if ((NULL == pHddTdlsCtx)) return; - } if (NULL == pHddTdlsCtx->pAdapter) - { - mutex_unlock(&tdls_lock); return; + + pHddCtx = WLAN_HDD_GET_CTX( pHddTdlsCtx->pAdapter ); + + if (NULL == pHddCtx) + return; + + + if (mutex_lock_interruptible(&pHddCtx->tdls_lock)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: unable to lock list : %d", __func__, __LINE__); + return; } pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pHddTdlsCtx->pAdapter); @@ -232,7 +232,7 @@ exit_loop: wlan_hdd_tdls_peer_reset_discovery_processed(pHddTdlsCtx); - mutex_unlock(&tdls_lock); + mutex_unlock(&pHddCtx->tdls_lock); /* Commenting out the following function as it was introducing * a race condition when pHddTdlsCtx is deleted. Also , this @@ -248,7 +248,7 @@ done: wlan_hdd_tdls_start_peer_discover_timer(pHddTdlsCtx, doMutexLock, discover_expiry); if ( !doMutexLock ) - mutex_unlock(&tdls_lock); + mutex_unlock(&pHddCtx->tdls_lock); return; } #endif @@ -259,25 +259,25 @@ static v_VOID_t wlan_hdd_tdls_update_peer_cb( v_PVOID_t userData ) struct list_head *head; struct list_head *pos; hddTdlsPeer_t *curr_peer; - tdlsCtx_t *pHddTdlsCtx; + tdlsCtx_t *pHddTdlsCtx = (tdlsCtx_t *)userData; + hdd_context_t *pHddCtx; - if (mutex_lock_interruptible(&tdls_lock)) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: unable to lock list", __func__); - return; - } - pHddTdlsCtx = (tdlsCtx_t *)userData; - if (NULL == pHddTdlsCtx) - { - mutex_unlock(&tdls_lock); + if ((NULL == pHddTdlsCtx)) return; - } if (NULL == pHddTdlsCtx->pAdapter) - { - mutex_unlock(&tdls_lock); return; + + pHddCtx = WLAN_HDD_GET_CTX( pHddTdlsCtx->pAdapter ); + + if (NULL == pHddCtx) + return; + + if (mutex_lock_interruptible(&pHddCtx->tdls_lock)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: unable to lock list", __func__); + return; } for (i = 0; i < 256; i++) { @@ -405,13 +405,15 @@ next_peer: wlan_hdd_tdls_timer_restart(pHddTdlsCtx->pAdapter, &pHddTdlsCtx->peerUpdateTimer, pHddTdlsCtx->threshold_config.tx_period_t); - mutex_unlock(&tdls_lock); + mutex_unlock(&pHddCtx->tdls_lock); } static v_VOID_t wlan_hdd_tdls_idle_cb( v_PVOID_t userData ) { #ifdef CONFIG_TDLS_IMPLICIT hddTdlsPeer_t *curr_peer = (hddTdlsPeer_t *)userData; + tdlsCtx_t *pHddTdlsCtx; + hdd_context_t *pHddCtx; if (NULL == curr_peer) { @@ -419,6 +421,16 @@ static v_VOID_t wlan_hdd_tdls_idle_cb( v_PVOID_t userData ) "%s: Invalid tdls idle timer expired", __func__); return; } + pHddTdlsCtx = curr_peer->pHddTdlsCtx; + + if ((NULL == pHddTdlsCtx) || (NULL == pHddTdlsCtx->pAdapter) ) + return; + + pHddCtx = WLAN_HDD_GET_CTX( pHddTdlsCtx->pAdapter ); + + if (NULL == pHddCtx) + return; + VOS_TRACE(VOS_MODULE_ID_HDD, TDLS_LOG_LEVEL, "%s: Tx/Rx Idle " MAC_ADDRESS_STR " tx_pkt: %d, rx_pkt: %d, idle_packet_n: %d\n", @@ -427,7 +439,7 @@ static v_VOID_t wlan_hdd_tdls_idle_cb( v_PVOID_t userData ) curr_peer->rx_pkt, curr_peer->pHddTdlsCtx->threshold_config.idle_packet_n); - if (mutex_lock_interruptible(&tdls_lock)) + if (mutex_lock_interruptible(&pHddCtx->tdls_lock)) { VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, "%s: unable to lock list", __func__); @@ -455,7 +467,7 @@ static v_VOID_t wlan_hdd_tdls_idle_cb( v_PVOID_t userData ) curr_peer, eSIR_MAC_TDLS_TEARDOWN_UNSPEC_REASON); } - mutex_unlock(&tdls_lock); + mutex_unlock(&pHddCtx->tdls_lock); #endif } @@ -466,18 +478,22 @@ static v_VOID_t wlan_hdd_tdls_discovery_timeout_peer_cb(v_PVOID_t userData) hddTdlsPeer_t *tmp; struct list_head *pos, *q; tdlsCtx_t *pHddTdlsCtx; + hdd_context_t *pHddCtx; - if (mutex_lock_interruptible(&tdls_lock)) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: unable to lock list", __func__); - return ; - } pHddTdlsCtx = (tdlsCtx_t *)userData; - if ( NULL == pHddTdlsCtx ) + if ((NULL == pHddTdlsCtx) || (NULL == pHddTdlsCtx->pAdapter) ) + return; + + pHddCtx = WLAN_HDD_GET_CTX( pHddTdlsCtx->pAdapter ); + + if (NULL == pHddCtx) + return; + + if (mutex_lock_interruptible(&pHddCtx->tdls_lock)) { - mutex_unlock(&tdls_lock); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: unable to lock list", __func__); return ; } @@ -498,7 +514,7 @@ static v_VOID_t wlan_hdd_tdls_discovery_timeout_peer_cb(v_PVOID_t userData) pHddTdlsCtx->discovery_sent_cnt = 0; wlan_hdd_tdls_check_power_save_prohibited(pHddTdlsCtx->pAdapter); - mutex_unlock(&tdls_lock); + mutex_unlock(&pHddCtx->tdls_lock); wlan_hdd_tdls_check_bmps(pHddTdlsCtx->pAdapter); @@ -562,6 +578,7 @@ static void wlan_hdd_tdls_schedule_scan(struct work_struct *work) scan_ctx->scan_request); } + int wlan_hdd_tdls_init(hdd_adapter_t *pAdapter) { hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX( pAdapter ); @@ -569,8 +586,6 @@ int wlan_hdd_tdls_init(hdd_adapter_t *pAdapter) int i; v_U8_t staIdx; - mutex_init(&tdls_lock); - if ((FALSE == pHddCtx->cfg_ini->fEnableTDLSSupport) || (FALSE == sme_IsFeatureSupportedByFW(TDLS))) { @@ -581,16 +596,57 @@ int wlan_hdd_tdls_init(hdd_adapter_t *pAdapter) sme_IsFeatureSupportedByFW(TDLS)); return 0; } + /* TDLS is supported only in STA / P2P Client modes, + * hence the check for TDLS support in a specific Device mode. + * Do not return a failure rather do not continue further + * with the initialization as tdls_init would be called + * during the open adapter for a p2p interface at which point + * the device mode would be a P2P_DEVICE. The point here is to + * continue initialization for STA / P2P Client modes. + * TDLS exit also check for the device mode for clean up hence + * there is no issue even if success is returned. + */ + if (0 == WLAN_HDD_IS_TDLS_SUPPORTED_ADAPTER(pAdapter)) + { + return 0; + } + /* Check for the valid pHddTdlsCtx. If valid do not further + * allocate the memory, rather continue with the initialization. + * If tdls_initialization would get reinvoked without tdls_exit + * getting invoked (SSR) there is no point to further proceed + * with the memory allocations. + */ + if (NULL == pAdapter->sessionCtx.station.pHddTdlsCtx) + { + pHddTdlsCtx = vos_mem_malloc(sizeof(tdlsCtx_t)); + + if (NULL == pHddTdlsCtx) { + hddLog(VOS_TRACE_LEVEL_ERROR, "%s malloc failed!", __func__); + pAdapter->sessionCtx.station.pHddTdlsCtx = NULL; + return -1; + } + /* initialize TDLS pAdater context */ + vos_mem_zero(pHddTdlsCtx, sizeof(tdlsCtx_t)); +#ifdef TDLS_USE_SEPARATE_DISCOVERY_TIMER + vos_timer_init(&pHddTdlsCtx->peerDiscoverTimer, + VOS_TIMER_TYPE_SW, + wlan_hdd_tdls_discover_peer_cb, + pHddTdlsCtx); +#endif - pHddTdlsCtx = vos_mem_malloc(sizeof(tdlsCtx_t)); + vos_timer_init(&pHddTdlsCtx->peerUpdateTimer, + VOS_TIMER_TYPE_SW, + wlan_hdd_tdls_update_peer_cb, + pHddTdlsCtx); + vos_timer_init(&pHddTdlsCtx->peerDiscoveryTimeoutTimer, + VOS_TIMER_TYPE_SW, + wlan_hdd_tdls_discovery_timeout_peer_cb, + pHddTdlsCtx); - if (NULL == pHddTdlsCtx) { - hddLog(VOS_TRACE_LEVEL_ERROR, "%s malloc failed!", __func__); - pAdapter->sessionCtx.station.pHddTdlsCtx = NULL; - return -1; + pAdapter->sessionCtx.station.pHddTdlsCtx = pHddTdlsCtx; } - pAdapter->sessionCtx.station.pHddTdlsCtx = pHddTdlsCtx; + pHddTdlsCtx = pAdapter->sessionCtx.station.pHddTdlsCtx; /* initialize TDLS global context */ pHddCtx->connected_peer_count = 0; @@ -610,9 +666,6 @@ int wlan_hdd_tdls_init(hdd_adapter_t *pAdapter) sizeof(v_MACADDR_t)) ; } - /* initialize TDLS pAdater context */ - vos_mem_zero(pHddTdlsCtx, sizeof(tdlsCtx_t)); - pHddTdlsCtx->pAdapter = pAdapter; for (i = 0; i < 256; i++) @@ -623,22 +676,6 @@ int wlan_hdd_tdls_init(hdd_adapter_t *pAdapter) pHddTdlsCtx->curr_candidate = NULL; pHddTdlsCtx->magic = 0; -#ifdef TDLS_USE_SEPARATE_DISCOVERY_TIMER - vos_timer_init(&pHddTdlsCtx->peerDiscoverTimer, - VOS_TIMER_TYPE_SW, - wlan_hdd_tdls_discover_peer_cb, - pHddTdlsCtx); -#endif - - vos_timer_init(&pHddTdlsCtx->peerUpdateTimer, - VOS_TIMER_TYPE_SW, - wlan_hdd_tdls_update_peer_cb, - pHddTdlsCtx); - vos_timer_init(&pHddTdlsCtx->peerDiscoveryTimeoutTimer, - VOS_TIMER_TYPE_SW, - wlan_hdd_tdls_discovery_timeout_peer_cb, - pHddTdlsCtx); - /* remember configuration even if it is not used right now. it could be used later */ pHddTdlsCtx->threshold_config.tx_period_t = pHddCtx->cfg_ini->fTDLSTxStatsPeriod; pHddTdlsCtx->threshold_config.tx_packet_n = pHddCtx->cfg_ini->fTDLSTxPacketThreshold; @@ -659,9 +696,9 @@ int wlan_hdd_tdls_init(hdd_adapter_t *pAdapter) { pHddCtx->tdls_mode = eTDLS_SUPPORT_ENABLED; } - INIT_WORK(&pHddTdlsCtx->implicit_setup, wlan_hdd_tdls_pre_setup); INIT_DELAYED_WORK(&pHddCtx->tdls_scan_ctxt.tdls_scan_work, wlan_hdd_tdls_schedule_scan); + return 0; } @@ -670,28 +707,23 @@ void wlan_hdd_tdls_exit(hdd_adapter_t *pAdapter) tdlsCtx_t *pHddTdlsCtx; hdd_context_t *pHddCtx; - if (mutex_lock_interruptible(&tdls_lock)) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: unable to lock list", __func__); - return; - } + /* + * NOTE: The Callers of this function should ensure to acquire the + * tdls_lock to avoid any concurrent access to the Adapter. + */ pHddCtx = WLAN_HDD_GET_CTX( pAdapter ); if (NULL == pHddCtx) { - mutex_unlock(&tdls_lock); return; } pHddTdlsCtx = WLAN_HDD_GET_TDLS_CTX_PTR(pAdapter); if (NULL == pHddTdlsCtx) { - mutex_unlock(&tdls_lock); hddLog(VOS_TRACE_LEVEL_WARN, "%s TDLS not enabled, exiting!", __func__); return; } - #ifdef WLAN_OPEN_SOURCE cancel_work_sync(&pHddTdlsCtx->implicit_setup); cancel_delayed_work_sync(&pHddCtx->tdls_scan_ctxt.tdls_scan_work); @@ -706,30 +738,30 @@ void wlan_hdd_tdls_exit(hdd_adapter_t *pAdapter) vos_mem_free(pHddTdlsCtx); pHddTdlsCtx = NULL; - mutex_unlock(&tdls_lock); } -/* stop all the tdls timers running */ -static void wlan_hdd_tdls_timers_stop(tdlsCtx_t *pHddTdlsCtx) +/* stop all monitoring timers per Adapter */ +static void wlan_hdd_tdls_monitor_timers_stop(tdlsCtx_t *pHddTdlsCtx) { - int i; - struct list_head *head; - struct list_head *pos; - hddTdlsPeer_t *curr_peer; - #ifdef TDLS_USE_SEPARATE_DISCOVERY_TIMER vos_timer_stop(&pHddTdlsCtx->peerDiscoverTimer); #endif vos_timer_stop(&pHddTdlsCtx->peerUpdateTimer); vos_timer_stop(&pHddTdlsCtx->peerDiscoveryTimeoutTimer); +} +/* stop all per peer timers */ +static void wlan_hdd_tdls_peer_timers_stop(tdlsCtx_t *pHddTdlsCtx) +{ + int i; + struct list_head *head; + struct list_head *pos; + hddTdlsPeer_t *curr_peer; for (i = 0; i < 256; i++) { head = &pHddTdlsCtx->peer_list[i]; - list_for_each (pos, head) { curr_peer = list_entry (pos, hddTdlsPeer_t, node); - VOS_TRACE( VOS_MODULE_ID_HDD, TDLS_LOG_LEVEL, "%s: " MAC_ADDRESS_STR " -> stop idle timer", __func__, @@ -740,14 +772,15 @@ static void wlan_hdd_tdls_timers_stop(tdlsCtx_t *pHddTdlsCtx) } } -/* destroy all the tdls timers running */ -static void wlan_hdd_tdls_timers_destroy(tdlsCtx_t *pHddTdlsCtx) +/* stop all the tdls timers running */ +static void wlan_hdd_tdls_timers_stop(tdlsCtx_t *pHddTdlsCtx) { - int i; - struct list_head *head; - struct list_head *pos; - hddTdlsPeer_t *curr_peer; + wlan_hdd_tdls_monitor_timers_stop(pHddTdlsCtx); + wlan_hdd_tdls_peer_timers_stop(pHddTdlsCtx); +} +static void wlan_hdd_tdls_monitor_timers_destroy(tdlsCtx_t *pHddTdlsCtx) +{ #ifdef TDLS_USE_SEPARATE_DISCOVERY_TIMER vos_timer_stop(&pHddTdlsCtx->peerDiscoverTimer); vos_timer_destroy(&pHddTdlsCtx->peerDiscoverTimer); @@ -756,7 +789,14 @@ static void wlan_hdd_tdls_timers_destroy(tdlsCtx_t *pHddTdlsCtx) vos_timer_destroy(&pHddTdlsCtx->peerUpdateTimer); vos_timer_stop(&pHddTdlsCtx->peerDiscoveryTimeoutTimer); vos_timer_destroy(&pHddTdlsCtx->peerDiscoveryTimeoutTimer); - +} +/*Free all the timers related to the TDLS peer */ +static void wlan_hdd_tdls_peer_timers_destroy(tdlsCtx_t *pHddTdlsCtx) +{ + int i; + struct list_head *head; + struct list_head *pos; + hddTdlsPeer_t *curr_peer; for (i = 0; i < 256; i++) { head = &pHddTdlsCtx->peer_list[i]; @@ -774,6 +814,14 @@ static void wlan_hdd_tdls_timers_destroy(tdlsCtx_t *pHddTdlsCtx) vos_timer_destroy(&curr_peer->initiatorWaitTimeoutTimer); } } + +} + +/* destroy all the tdls timers running */ +static void wlan_hdd_tdls_timers_destroy(tdlsCtx_t *pHddTdlsCtx) +{ + wlan_hdd_tdls_monitor_timers_destroy(pHddTdlsCtx); + wlan_hdd_tdls_peer_timers_destroy(pHddTdlsCtx); } /* if mac address exist, return pointer @@ -786,9 +834,12 @@ hddTdlsPeer_t *wlan_hdd_tdls_get_peer(hdd_adapter_t *pAdapter, u8 *mac) hddTdlsPeer_t *peer; u8 key; tdlsCtx_t *pHddTdlsCtx; + hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + + if ((NULL == pHddCtx)) return NULL; /* if already there, just update */ - peer = wlan_hdd_tdls_find_peer(pAdapter, mac); + peer = wlan_hdd_tdls_find_peer(pAdapter, mac, TRUE); if (peer != NULL) { return peer; @@ -801,7 +852,7 @@ hddTdlsPeer_t *wlan_hdd_tdls_get_peer(hdd_adapter_t *pAdapter, u8 *mac) return NULL; } - if (mutex_lock_interruptible(&tdls_lock)) + if (mutex_lock_interruptible(&pHddCtx->tdls_lock)) { VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, "%s: unable to lock list", __func__); @@ -813,7 +864,7 @@ hddTdlsPeer_t *wlan_hdd_tdls_get_peer(hdd_adapter_t *pAdapter, u8 *mac) if (NULL == pHddTdlsCtx) { vos_mem_free(peer); - mutex_unlock(&tdls_lock); + mutex_unlock(&pHddCtx->tdls_lock); return NULL; } @@ -835,7 +886,7 @@ hddTdlsPeer_t *wlan_hdd_tdls_get_peer(hdd_adapter_t *pAdapter, u8 *mac) peer); list_add_tail(&peer->node, head); - mutex_unlock(&tdls_lock); + mutex_unlock(&pHddCtx->tdls_lock); return peer; } @@ -873,7 +924,7 @@ void wlan_hdd_tdls_set_link_status(hdd_adapter_t *pAdapter, { hddTdlsPeer_t *curr_peer; - curr_peer = wlan_hdd_tdls_find_peer(pAdapter, mac); + curr_peer = wlan_hdd_tdls_find_peer(pAdapter, mac, TRUE); if (curr_peer == NULL) return; @@ -886,6 +937,15 @@ int wlan_hdd_tdls_recv_discovery_resp(hdd_adapter_t *pAdapter, u8 *mac) { hddTdlsPeer_t *curr_peer; tdlsCtx_t *pHddTdlsCtx = WLAN_HDD_GET_TDLS_CTX_PTR(pAdapter); + hdd_context_t *pHddCtx; + + if ( NULL == pHddTdlsCtx ) + return -1; + + pHddCtx = WLAN_HDD_GET_CTX(pHddTdlsCtx->pAdapter); + + if (NULL == pHddCtx) + return -1; curr_peer = wlan_hdd_tdls_get_peer(pAdapter, mac); @@ -895,7 +955,16 @@ int wlan_hdd_tdls_recv_discovery_resp(hdd_adapter_t *pAdapter, u8 *mac) if (pHddTdlsCtx->discovery_sent_cnt) pHddTdlsCtx->discovery_sent_cnt--; + if (mutex_lock_interruptible(&pHddCtx->tdls_lock)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: unable to lock list", __func__); + return -1; + } + wlan_hdd_tdls_check_power_save_prohibited(pAdapter); + + mutex_unlock(&pHddCtx->tdls_lock); if (0 == pHddTdlsCtx->discovery_sent_cnt) { vos_timer_stop(&pHddTdlsCtx->peerDiscoveryTimeoutTimer); @@ -937,11 +1006,45 @@ int wlan_hdd_tdls_recv_discovery_resp(hdd_adapter_t *pAdapter, u8 *mac) return 0; } +int wlan_hdd_tdls_set_peer_caps(hdd_adapter_t *pAdapter, + u8 *mac, + tANI_U8 uapsdQueues, + tANI_U8 maxSp, + tANI_BOOLEAN isBufSta) +{ + hddTdlsPeer_t *curr_peer; + + curr_peer = wlan_hdd_tdls_get_peer(pAdapter, mac); + if (curr_peer == NULL) + return -1; + + curr_peer->uapsdQueues = uapsdQueues; + curr_peer->maxSp = maxSp; + curr_peer->isBufSta = isBufSta; + return 0; +} + +int wlan_hdd_tdls_get_link_establish_params(hdd_adapter_t *pAdapter, u8 *mac, + tCsrTdlsLinkEstablishParams* tdlsLinkEstablishParams) +{ + hddTdlsPeer_t *curr_peer; + + curr_peer = wlan_hdd_tdls_get_peer(pAdapter, mac); + if (curr_peer == NULL) + return -1; + + tdlsLinkEstablishParams->isResponder = curr_peer->is_responder; + tdlsLinkEstablishParams->uapsdQueues = curr_peer->uapsdQueues; + tdlsLinkEstablishParams->maxSp = curr_peer->maxSp; + tdlsLinkEstablishParams->isBufSta = curr_peer->isBufSta; + return 0; +} + int wlan_hdd_tdls_set_rssi(hdd_adapter_t *pAdapter, u8 *mac, tANI_S8 rxRssi) { hddTdlsPeer_t *curr_peer; - curr_peer = wlan_hdd_tdls_find_peer(pAdapter, mac); + curr_peer = wlan_hdd_tdls_find_peer(pAdapter, mac, TRUE); if (curr_peer == NULL) return -1; @@ -967,7 +1070,7 @@ int wlan_hdd_tdls_get_responder(hdd_adapter_t *pAdapter, u8 *mac) { hddTdlsPeer_t *curr_peer; - curr_peer = wlan_hdd_tdls_find_peer(pAdapter, mac); + curr_peer = wlan_hdd_tdls_find_peer(pAdapter, mac, TRUE); if (curr_peer == NULL) return -1; @@ -1157,25 +1260,32 @@ int wlan_hdd_tdls_set_sta_id(hdd_adapter_t *pAdapter, u8 *mac, u8 staId) /* if peerMac is found, then it returns pointer to hddTdlsPeer_t otherwise, it returns NULL */ -hddTdlsPeer_t *wlan_hdd_tdls_find_peer(hdd_adapter_t *pAdapter, u8 *mac) +hddTdlsPeer_t *wlan_hdd_tdls_find_peer(hdd_adapter_t *pAdapter, u8 *mac, + tANI_BOOLEAN mutexLock) { u8 key; struct list_head *pos; struct list_head *head; hddTdlsPeer_t *curr_peer; tdlsCtx_t *pHddTdlsCtx; + hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + if ((NULL == pHddCtx)) return NULL; - if (mutex_lock_interruptible(&tdls_lock)) + if ( mutexLock ) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: unable to lock list", __func__); - return NULL; + if (mutex_lock_interruptible(&pHddCtx->tdls_lock)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: unable to lock list", __func__); + return NULL; + } } pHddTdlsCtx = WLAN_HDD_GET_TDLS_CTX_PTR(pAdapter); if (NULL == pHddTdlsCtx) { - mutex_unlock(&tdls_lock); + if ( mutexLock ) + mutex_unlock(&pHddCtx->tdls_lock); return NULL; } @@ -1188,12 +1298,13 @@ hddTdlsPeer_t *wlan_hdd_tdls_find_peer(hdd_adapter_t *pAdapter, u8 *mac) if (!memcmp(mac, curr_peer->peerMac, 6)) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "findTdlsPeer: found staId %d", curr_peer->staId); - mutex_unlock(&tdls_lock); + if ( mutexLock ) + mutex_unlock(&pHddCtx->tdls_lock); return curr_peer; } } - - mutex_unlock(&tdls_lock); + if ( mutexLock ) + mutex_unlock(&pHddCtx->tdls_lock); return NULL; } @@ -1205,6 +1316,12 @@ hddTdlsPeer_t *wlan_hdd_tdls_find_all_peer(hdd_context_t *pHddCtx, u8 *mac) hddTdlsPeer_t *curr_peer= NULL; VOS_STATUS status = 0; + if (mutex_lock_interruptible(&pHddCtx->tdls_lock)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: unable to lock list", __func__); + return NULL; + } status = hdd_get_front_adapter ( pHddCtx, &pAdapterNode ); while ( NULL != pAdapterNode && VOS_STATUS_SUCCESS == status ) { @@ -1213,13 +1330,17 @@ hddTdlsPeer_t *wlan_hdd_tdls_find_all_peer(hdd_context_t *pHddCtx, u8 *mac) pHddTdlsCtx = WLAN_HDD_GET_TDLS_CTX_PTR(pAdapter); if (NULL != pHddTdlsCtx) { - curr_peer = wlan_hdd_tdls_find_peer(pAdapter, mac); + curr_peer = wlan_hdd_tdls_find_peer(pAdapter, mac, FALSE); if (curr_peer) + { + mutex_unlock(&pHddCtx->tdls_lock); return curr_peer; + } } status = hdd_get_next_adapter ( pHddCtx, pAdapterNode, &pNext ); pAdapterNode = pNext; } + mutex_unlock(&pHddCtx->tdls_lock); return curr_peer; } @@ -1328,18 +1449,25 @@ int wlan_hdd_tdls_get_all_peers(hdd_adapter_t *pAdapter, char *buf, int buflen) struct list_head *pos; hddTdlsPeer_t *curr_peer; tdlsCtx_t *pHddTdlsCtx; + hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + + if ((NULL == pHddCtx)) { + len = snprintf(buf, buflen, "NULL HddCtx\n"); + return len; + } init_len = buflen; - len = snprintf(buf, buflen, "\n%-18s%-3s%-4s%-3s%-5s\n", "MAC", "Id", "cap", "up", "RSSI"); + len = scnprintf(buf, buflen, "\n%-18s%-3s%-4s%-3s%-5s\n", + "MAC", "Id", "cap", "up", "RSSI"); buf += len; buflen -= len; /* 1234567890123456789012345678901234567 */ - len = snprintf(buf, buflen, "---------------------------------\n"); + len = scnprintf(buf, buflen, "---------------------------------\n"); buf += len; buflen -= len; - if (mutex_lock_interruptible(&tdls_lock)) + if (mutex_lock_interruptible(&pHddCtx->tdls_lock)) { VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, "%s: unable to lock list", __func__); @@ -1347,8 +1475,8 @@ int wlan_hdd_tdls_get_all_peers(hdd_adapter_t *pAdapter, char *buf, int buflen) } pHddTdlsCtx = WLAN_HDD_GET_TDLS_CTX_PTR(pAdapter); if (NULL == pHddTdlsCtx) { - mutex_unlock(&tdls_lock); - len = snprintf(buf, buflen, "TDLS not enabled\n"); + mutex_unlock(&pHddCtx->tdls_lock); + len = scnprintf(buf, buflen, "TDLS not enabled\n"); return len; } for (i = 0; i < 256; i++) { @@ -1359,7 +1487,7 @@ int wlan_hdd_tdls_get_all_peers(hdd_adapter_t *pAdapter, char *buf, int buflen) if (buflen < 32+1) break; - len = snprintf(buf, buflen, + len = scnprintf(buf, buflen, MAC_ADDRESS_STR"%3d%4s%3s%5d\n", MAC_ADDR_ARRAY(curr_peer->peerMac), curr_peer->staId, @@ -1370,28 +1498,24 @@ int wlan_hdd_tdls_get_all_peers(hdd_adapter_t *pAdapter, char *buf, int buflen) buflen -= len; } } - mutex_unlock(&tdls_lock); + mutex_unlock(&pHddCtx->tdls_lock); return init_len-buflen; } void wlan_hdd_tdls_connection_callback(hdd_adapter_t *pAdapter) { - hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX( pAdapter ); tdlsCtx_t *pHddTdlsCtx = WLAN_HDD_GET_TDLS_CTX_PTR(pAdapter); + hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + + if ((NULL == pHddCtx) || (NULL == pHddTdlsCtx)) return; - if (mutex_lock_interruptible(&tdls_lock)) + if (mutex_lock_interruptible(&pHddCtx->tdls_lock)) { VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, "%s: unable to lock list", __func__); return; } - if (NULL == pHddCtx || NULL == pHddTdlsCtx) - { - mutex_unlock(&tdls_lock); - return; - } - VOS_TRACE( VOS_MODULE_ID_HDD, TDLS_LOG_LEVEL, "%s, update %d discover %d", __func__, pHddTdlsCtx->threshold_config.tx_period_t, @@ -1412,17 +1536,20 @@ void wlan_hdd_tdls_connection_callback(hdd_adapter_t *pAdapter) &pHddTdlsCtx->peerUpdateTimer, pHddTdlsCtx->threshold_config.tx_period_t); } - mutex_unlock(&tdls_lock); + mutex_unlock(&pHddCtx->tdls_lock); } void wlan_hdd_tdls_disconnection_callback(hdd_adapter_t *pAdapter) { tdlsCtx_t *pHddTdlsCtx = WLAN_HDD_GET_TDLS_CTX_PTR(pAdapter); + hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + + if ((NULL == pHddCtx) || (NULL == pHddTdlsCtx)) return; VOS_TRACE( VOS_MODULE_ID_HDD, TDLS_LOG_LEVEL,"%s", __func__); - if (mutex_lock_interruptible(&tdls_lock)) + if (mutex_lock_interruptible(&pHddCtx->tdls_lock)) { VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, "%s: unable to lock list", __func__); @@ -1430,16 +1557,17 @@ void wlan_hdd_tdls_disconnection_callback(hdd_adapter_t *pAdapter) } if (NULL == pHddTdlsCtx) { - mutex_unlock(&tdls_lock); + mutex_unlock(&pHddCtx->tdls_lock); return; } pHddTdlsCtx->discovery_sent_cnt = 0; wlan_hdd_tdls_check_power_save_prohibited(pHddTdlsCtx->pAdapter); - wlan_hdd_tdls_timers_stop(pHddTdlsCtx); + wlan_hdd_tdls_monitor_timers_stop(pHddTdlsCtx); + wlan_hdd_tdls_peer_timers_destroy(pHddTdlsCtx); wlan_hdd_tdls_free_list(pHddTdlsCtx); - mutex_unlock(&tdls_lock); + mutex_unlock(&pHddCtx->tdls_lock); } void wlan_hdd_tdls_mgmt_completion_callback(hdd_adapter_t *pAdapter, tANI_U32 statusCode) @@ -1456,11 +1584,20 @@ void wlan_hdd_tdls_increment_peer_count(hdd_adapter_t *pAdapter) if (NULL == pHddCtx) return; + if (mutex_lock_interruptible(&pHddCtx->tdls_lock)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: unable to lock list", __func__); + return; + } + pHddCtx->connected_peer_count++; wlan_hdd_tdls_check_power_save_prohibited(pAdapter); VOS_TRACE( VOS_MODULE_ID_HDD, TDLS_LOG_LEVEL, "%s: %d", __func__, pHddCtx->connected_peer_count); + + mutex_unlock(&pHddCtx->tdls_lock); } void wlan_hdd_tdls_decrement_peer_count(hdd_adapter_t *pAdapter) @@ -1469,6 +1606,13 @@ void wlan_hdd_tdls_decrement_peer_count(hdd_adapter_t *pAdapter) if (NULL == pHddCtx) return; + if (mutex_lock_interruptible(&pHddCtx->tdls_lock)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: unable to lock list", __func__); + return; + } + if (pHddCtx->connected_peer_count) pHddCtx->connected_peer_count--; wlan_hdd_tdls_check_power_save_prohibited(pAdapter); @@ -1476,6 +1620,8 @@ void wlan_hdd_tdls_decrement_peer_count(hdd_adapter_t *pAdapter) VOS_TRACE( VOS_MODULE_ID_HDD, TDLS_LOG_LEVEL, "%s: %d", __func__, pHddCtx->connected_peer_count); + mutex_unlock(&pHddCtx->tdls_lock); + } void wlan_hdd_tdls_check_bmps(hdd_adapter_t *pAdapter) @@ -1486,7 +1632,7 @@ void wlan_hdd_tdls_check_bmps(hdd_adapter_t *pAdapter) if ((NULL == pHddCtx) || (NULL == pHddTdlsCtx)) return; - curr_peer = wlan_hdd_tdls_is_progress(pHddCtx, NULL, 0, TRUE); + curr_peer = wlan_hdd_tdls_is_progress(pHddCtx, NULL, 0); if (NULL != curr_peer) { VOS_TRACE(VOS_MODULE_ID_HDD, TDLS_LOG_LEVEL, @@ -1554,7 +1700,7 @@ u8 wlan_hdd_tdls_is_peer_progress(hdd_adapter_t *pAdapter, u8 *mac) { hddTdlsPeer_t *curr_peer; - curr_peer = wlan_hdd_tdls_find_peer(pAdapter, mac); + curr_peer = wlan_hdd_tdls_find_peer(pAdapter, mac, TRUE); if (curr_peer == NULL) return 0; @@ -1566,30 +1712,16 @@ u8 wlan_hdd_tdls_is_peer_progress(hdd_adapter_t *pAdapter, u8 *mac) * skip_self - if TRUE, skip this mac. otherwise, check all the peer list. if mac is NULL, this argument is ignored, and check for all the peer list. */ -static hddTdlsPeer_t *wlan_hdd_tdls_find_progress_peer(hdd_adapter_t *pAdapter, u8 *mac, u8 skip_self, tANI_BOOLEAN mutexLock) +static hddTdlsPeer_t *wlan_hdd_tdls_find_progress_peer(hdd_adapter_t *pAdapter, u8 *mac, u8 skip_self) { int i; struct list_head *head; hddTdlsPeer_t *curr_peer; struct list_head *pos; - tdlsCtx_t *pHddTdlsCtx; + tdlsCtx_t *pHddTdlsCtx = WLAN_HDD_GET_TDLS_CTX_PTR(pAdapter);; - if (mutexLock) - { - if (mutex_lock_interruptible(&tdls_lock)) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: unable to lock list", __func__); - return NULL; - } - } - pHddTdlsCtx = WLAN_HDD_GET_TDLS_CTX_PTR(pAdapter); if (NULL == pHddTdlsCtx) - { - if (mutexLock) - mutex_unlock(&tdls_lock); return NULL; - } for (i = 0; i < 256; i++) { head = &pHddTdlsCtx->peer_list[i]; @@ -1605,20 +1737,15 @@ static hddTdlsPeer_t *wlan_hdd_tdls_find_progress_peer(hdd_adapter_t *pAdapter, VOS_TRACE(VOS_MODULE_ID_HDD, TDLS_LOG_LEVEL, "%s:" MAC_ADDRESS_STR " eTDLS_LINK_CONNECTING", __func__, MAC_ADDR_ARRAY(curr_peer->peerMac)); - if (mutexLock) - mutex_unlock(&tdls_lock); return curr_peer; } } } } - - if (mutexLock) - mutex_unlock(&tdls_lock); return NULL; } -hddTdlsPeer_t *wlan_hdd_tdls_is_progress(hdd_context_t *pHddCtx, u8 *mac, u8 skip_self, tANI_BOOLEAN mutexLock) +hddTdlsPeer_t *wlan_hdd_tdls_is_progress(hdd_context_t *pHddCtx, u8 *mac, u8 skip_self) { hdd_adapter_list_node_t *pAdapterNode = NULL, *pNext = NULL; hdd_adapter_t *pAdapter = NULL; @@ -1626,6 +1753,13 @@ hddTdlsPeer_t *wlan_hdd_tdls_is_progress(hdd_context_t *pHddCtx, u8 *mac, u8 ski hddTdlsPeer_t *curr_peer= NULL; VOS_STATUS status = 0; + if (mutex_lock_interruptible(&pHddCtx->tdls_lock)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: unable to lock list", __func__); + return NULL; + } + status = hdd_get_front_adapter ( pHddCtx, &pAdapterNode ); while ( NULL != pAdapterNode && VOS_STATUS_SUCCESS == status ) { @@ -1634,13 +1768,17 @@ hddTdlsPeer_t *wlan_hdd_tdls_is_progress(hdd_context_t *pHddCtx, u8 *mac, u8 ski pHddTdlsCtx = WLAN_HDD_GET_TDLS_CTX_PTR(pAdapter); if (NULL != pHddTdlsCtx) { - curr_peer = wlan_hdd_tdls_find_progress_peer(pAdapter, mac, skip_self, mutexLock); + curr_peer = wlan_hdd_tdls_find_progress_peer(pAdapter, mac, skip_self); if (curr_peer) + { + mutex_unlock(&pHddCtx->tdls_lock); return curr_peer; + } } status = hdd_get_next_adapter ( pHddCtx, pAdapterNode, &pNext ); pAdapterNode = pNext; } + mutex_unlock(&pHddCtx->tdls_lock); return NULL; } @@ -1677,24 +1815,21 @@ void wlan_hdd_tdls_set_mode(hdd_context_t *pHddCtx, tdlsCtx_t *pHddTdlsCtx; VOS_TRACE( VOS_MODULE_ID_HDD, TDLS_LOG_LEVEL,"%s mode %d", __func__, (int)tdls_mode); + if (NULL == pHddCtx) + return; - if (mutex_lock_interruptible(&tdls_lock)) + if (mutex_lock_interruptible(&pHddCtx->tdls_lock)) { VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, "%s: unable to lock list", __func__); return; } - if (NULL == pHddCtx) - { - mutex_unlock(&tdls_lock); - return; - } if (pHddCtx->tdls_mode == tdls_mode) { hddLog(TDLS_LOG_LEVEL, "%s already in mode %d", __func__, (int)tdls_mode); - mutex_unlock(&tdls_lock); + mutex_unlock(&pHddCtx->tdls_lock); return; } @@ -1725,7 +1860,7 @@ void wlan_hdd_tdls_set_mode(hdd_context_t *pHddCtx, } pHddCtx->tdls_mode = tdls_mode; - mutex_unlock(&tdls_lock); + mutex_unlock(&pHddCtx->tdls_lock); } static void wlan_hdd_tdls_pre_setup(struct work_struct *work) @@ -1766,7 +1901,7 @@ static void wlan_hdd_tdls_pre_setup(struct work_struct *work) } } - temp_peer = wlan_hdd_tdls_is_progress(pHddCtx, NULL, 0, FALSE); + temp_peer = wlan_hdd_tdls_is_progress(pHddCtx, NULL, 0); if (NULL != temp_peer) { VOS_TRACE( VOS_MODULE_ID_HDD, TDLS_LOG_LEVEL, "%s: " MAC_ADDRESS_STR " ongoing. pre_setup ignored\n", @@ -1791,7 +1926,17 @@ static void wlan_hdd_tdls_pre_setup(struct work_struct *work) } pHddTdlsCtx->discovery_sent_cnt++; + + if (mutex_lock_interruptible(&pHddCtx->tdls_lock)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: unable to lock list", __func__); + return; + } + wlan_hdd_tdls_check_power_save_prohibited(pHddTdlsCtx->pAdapter); + + mutex_unlock(&pHddCtx->tdls_lock); VOS_TRACE( VOS_MODULE_ID_HDD, TDLS_LOG_LEVEL, "%s: discovery count %lu timeout %lu msec", __func__, pHddTdlsCtx->discovery_sent_cnt, pHddTdlsCtx->threshold_config.tx_period_t - TDLS_DISCOVERY_TIMEOUT_BEFORE_UPDATE); @@ -1903,7 +2048,6 @@ static void wlan_hdd_tdls_scan_init_work(hdd_context_t *pHddCtx, pHddCtx->tdls_scan_ctxt.attempt = 0; pHddCtx->tdls_scan_ctxt.magic = TDLS_CTX_MAGIC; } - schedule_delayed_work(&pHddCtx->tdls_scan_ctxt.tdls_scan_work, delay); } @@ -1930,7 +2074,7 @@ int wlan_hdd_tdls_scan_callback (hdd_adapter_t *pAdapter, if (eTDLS_SUPPORT_NOT_ENABLED == pHddCtx->tdls_mode) return 1; - curr_peer = wlan_hdd_tdls_is_progress(pHddCtx, NULL, 0, TRUE); + curr_peer = wlan_hdd_tdls_is_progress(pHddCtx, NULL, 0); if (NULL != curr_peer) { if (pHddCtx->tdls_scan_ctxt.reject++ >= TDLS_MAX_SCAN_REJECT) diff --git a/CORE/HDD/src/wlan_hdd_tx_rx.c b/CORE/HDD/src/wlan_hdd_tx_rx.c index 1cfb6a270eca..92c578c29685 100644 --- a/CORE/HDD/src/wlan_hdd_tx_rx.c +++ b/CORE/HDD/src/wlan_hdd_tx_rx.c @@ -167,6 +167,8 @@ static VOS_STATUS hdd_flush_tx_queues( hdd_adapter_t *pAdapter ) skb_list_node_t *pktNode = NULL; struct sk_buff *skb = NULL; + pAdapter->isVosLowResource = VOS_FALSE; + while (++i != NUM_TX_QUEUES) { //Free up any packets in the Tx queue @@ -195,6 +197,75 @@ static VOS_STATUS hdd_flush_tx_queues( hdd_adapter_t *pAdapter ) return status; } +/**============================================================================ + @brief hdd_flush_ibss_tx_queues() - Utility function to flush the TX queues + in IBSS mode + + @param pAdapter : [in] pointer to adapter context + : [in] Staion Id + @return : VOS_STATUS_E_FAILURE if any errors encountered + : VOS_STATUS_SUCCESS otherwise + ===========================================================================*/ +void hdd_flush_ibss_tx_queues( hdd_adapter_t *pAdapter, v_U8_t STAId) +{ + v_U8_t i; + skb_list_node_t *pktNode = NULL; + struct sk_buff *skb = NULL; + v_U8_t skbStaIdx; + hdd_list_node_t *tmp = NULL; + struct netdev_queue *txq; + + for (i = 0; i < NUM_TX_QUEUES; i++) + { + spin_lock_bh(&pAdapter->wmm_tx_queue[i].lock); + + if ( list_empty( &pAdapter->wmm_tx_queue[i].anchor ) ) + { + spin_unlock_bh(&pAdapter->wmm_tx_queue[i].lock); + continue; + } + + /* Iterate through the queue and identify the data for STAId */ + list_for_each(tmp, &pAdapter->wmm_tx_queue[i].anchor) + { + hdd_list_node_t *tmpNext = NULL; + + pktNode = list_entry(tmp, skb_list_node_t, anchor); + if (pktNode != NULL) + { + skb = pktNode->skb; + + /* Get the STAId from data */ + skbStaIdx = *(v_U8_t *)(((v_U8_t *)(skb->data)) - 1); + if (skbStaIdx == STAId) + { + tmpNext = tmp->next; + + /* Data for STAId is freed along with the queue node */ + kfree_skb(skb); + list_del(tmp); + tmp = tmpNext; + + ++pAdapter->hdd_stats.hddTxRxStats.txFlushed; + ++pAdapter->hdd_stats.hddTxRxStats.txFlushedAC[i]; + pAdapter->wmm_tx_queue[i].count--; + } + } + } + + /* Restart the queue only-if suspend and the queue was flushed */ + txq = netdev_get_tx_queue(pAdapter->dev, i); + if ( (pAdapter->wmm_tx_queue[i].count < + pAdapter->wmm_tx_queue[i].max_size) && + (netif_tx_queue_stopped(txq))) + { + netif_tx_start_queue(txq); + } + + spin_unlock_bh(&pAdapter->wmm_tx_queue[i].lock); + } +} + static struct sk_buff* hdd_mon_tx_fetch_pkt(hdd_adapter_t* pAdapter) { skb_list_node_t *pktNode = NULL; @@ -300,7 +371,7 @@ void hdd_mon_tx_mgmt_pkt(hdd_adapter_t* pAdapter) vos_mem_copy( cfgState->buf, skb->data, skb->len); cfgState->skb = skb; //buf; - cfgState->action_cookie = (tANI_U32)cfgState->buf; + cfgState->action_cookie = (uintptr_t)cfgState->buf; hdr = (struct ieee80211_hdr *)skb->data; if( (hdr->frame_control & HDD_FRAME_TYPE_MASK) @@ -506,14 +577,14 @@ fail: #ifndef QCA_WIFI_2_0 /**============================================================================ - @brief hdd_hard_start_xmit() - Function registered with the Linux OS for + @brief hdd_hard_start_xmit() - Function registered with the Linux OS for transmitting packets. There are 2 versions of this function. One that uses locked queue and other that uses lockless queues. Both have been retained to do some performance testing @param skb : [in] pointer to OS packet (sk_buff) @param dev : [in] pointer to Libra network device - + @return : NET_XMIT_DROP if packets are dropped : NET_XMIT_SUCCESS if packet is enqueued succesfully ===========================================================================*/ @@ -529,15 +600,35 @@ int hdd_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) v_BOOL_t granted; v_U8_t STAId = WLAN_MAX_STA_COUNT; hdd_station_ctx_t *pHddStaCtx = &pAdapter->sessionCtx.station; - v_BOOL_t txSuspended = VOS_FALSE; ++pAdapter->hdd_stats.hddTxRxStats.txXmitCalled; + if (unlikely(netif_subqueue_stopped(dev, skb))) { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s is called when netif TX %d is disabled", + __func__, skb->queue_mapping); + return NETDEV_TX_BUSY; + } + + //Get TL AC corresponding to Qdisc queue index/AC. + ac = hdd_QdiscAcToTlAC[skb->queue_mapping]; + if (WLAN_HDD_IBSS == pAdapter->device_mode) { v_MACADDR_t *pDestMacAddress = (v_MACADDR_t*)skb->data; + if (eConnectionState_IbssDisconnected == pHddStaCtx->conn_info.connState) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s: Tx frame in disconnected state in IBSS mode", __func__); + ++pAdapter->stats.tx_dropped; + ++pAdapter->hdd_stats.hddTxRxStats.txXmitDropped; + ++pAdapter->hdd_stats.hddTxRxStats.txXmitDroppedAC[ac]; + kfree_skb(skb); + return NETDEV_TX_OK; + } + STAId = *(v_U8_t *)(((v_U8_t *)(skb->data)) - 1); if ((STAId == HDD_WLAN_INVALID_STA_ID) && @@ -546,14 +637,15 @@ int hdd_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) { STAId = IBSS_BROADCAST_STAID; VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_LOW, - "%s: BC/MC packet", __func__); + "%s: BC/MC packet", __func__); } else if (STAId == HDD_WLAN_INVALID_STA_ID) { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, - "%s: Received Unicast frame with invalid staID", __func__); + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s: Received Unicast frame with invalid staID", __func__); ++pAdapter->stats.tx_dropped; ++pAdapter->hdd_stats.hddTxRxStats.txXmitDropped; + ++pAdapter->hdd_stats.hddTxRxStats.txXmitDroppedAC[ac]; kfree_skb(skb); return NETDEV_TX_OK; } @@ -562,10 +654,8 @@ int hdd_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) { STAId = pHddStaCtx->conn_info.staId[0]; } - //Get TL AC corresponding to Qdisc queue index/AC. - ac = hdd_QdiscAcToTlAC[skb->queue_mapping]; - //user priority from IP header, which is already extracted and set from + //user priority from IP header, which is already extracted and set from //select_queue call back function up = skb->priority; @@ -587,28 +677,55 @@ int hdd_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) * if it is in the mainline code and if the log level is enabled by someone for debugging VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO,"%s:Queue is Filling up.Inform TL again about pending packets", __func__);*/ - WLANTL_STAPktPending( (WLAN_HDD_GET_CTX(pAdapter))->pvosContext, - STAId, ac - ); + status = WLANTL_STAPktPending( (WLAN_HDD_GET_CTX(pAdapter))->pvosContext, + STAId, ac + ); + if ( !VOS_IS_STATUS_SUCCESS( status ) ) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: WLANTL_STAPktPending() returned error code %d", + __func__, status); + ++pAdapter->stats.tx_dropped; + ++pAdapter->hdd_stats.hddTxRxStats.txXmitDropped; + ++pAdapter->hdd_stats.hddTxRxStats.txXmitDroppedAC[ac]; + kfree_skb(skb); + spin_unlock(&pAdapter->wmm_tx_queue[ac].lock); + return NETDEV_TX_OK; + } } //If we have already reached the max queue size, disable the TX queue if ( pAdapter->wmm_tx_queue[ac].count == pAdapter->wmm_tx_queue[ac].max_size) { - ++pAdapter->hdd_stats.hddTxRxStats.txXmitBackPressured; - ++pAdapter->hdd_stats.hddTxRxStats.txXmitBackPressuredAC[ac]; + ++pAdapter->hdd_stats.hddTxRxStats.txXmitBackPressured; + ++pAdapter->hdd_stats.hddTxRxStats.txXmitBackPressuredAC[ac]; + netif_tx_stop_queue(netdev_get_tx_queue(dev, skb_get_queue_mapping(skb))); + pAdapter->isTxSuspended[ac] = VOS_TRUE; + txSuspended = VOS_TRUE; + } - netif_tx_stop_queue(netdev_get_tx_queue(dev, skb_get_queue_mapping(skb))); - pAdapter->isTxSuspended[ac] = VOS_TRUE; - txSuspended = VOS_TRUE; + /* If 3/4th of the max queue size is used then enable the flag. + * This flag indicates to place the DHCP packets in VOICE AC queue.*/ + if (WLANTL_AC_BE == ac) + { + if (pAdapter->wmm_tx_queue[ac].count >= HDD_TX_QUEUE_LOW_WATER_MARK) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s: Best Effort AC Tx queue is 3/4th full", __func__); + pAdapter->isVosLowResource = VOS_TRUE; + } + else + { + pAdapter->isVosLowResource = VOS_FALSE; + } } - spin_unlock(&pAdapter->wmm_tx_queue[ac].lock); + spin_unlock(&pAdapter->wmm_tx_queue[ac].lock); if (VOS_TRUE == txSuspended) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: TX queue full for AC=%d Disable OS TX queue", + "%s: TX queue full for AC=%d Disable OS TX queue", __func__, ac ); - return NETDEV_TX_BUSY; + return NETDEV_TX_BUSY; } //Use the skb->cb field to hold the list node information @@ -617,7 +734,7 @@ int hdd_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) //Stick the OS packet inside this node. pktNode->skb = skb; - //Stick the User Priority inside this node + //Stick the User Priority inside this node pktNode->userPriority = up; @@ -640,16 +757,27 @@ int hdd_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) ++pAdapter->hdd_stats.hddTxRxStats.txXmitQueued; ++pAdapter->hdd_stats.hddTxRxStats.txXmitQueuedAC[ac]; + ++pAdapter->hdd_stats.hddTxRxStats.pkt_tx_count; + + if (HDD_PSB_CHANGED == pAdapter->psbChanged) + { + /* Function which will determine acquire admittance for a + * WMM AC is required or not based on psb configuration done + * in the framework + */ + hdd_wmm_acquire_access_required(pAdapter, ac); + } //Make sure we have access to this access category - if (likely(pAdapter->hddWmmStatus.wmmAcStatus[ac].wmmAcAccessAllowed) || - ( pHddStaCtx->conn_info.uIsAuthenticated == VOS_FALSE)) + if (((pAdapter->psbChanged & (1 << ac)) && likely(pAdapter->hddWmmStatus.wmmAcStatus[ac].wmmAcAccessAllowed)) || + (pHddStaCtx->conn_info.uIsAuthenticated == VOS_FALSE)) { granted = VOS_TRUE; } else { status = hdd_wmm_acquire_access( pAdapter, ac, &granted ); + pAdapter->psbChanged |= (1 << ac); } if ( granted && ( pktListSize == 1 )) { @@ -770,15 +898,25 @@ int hdd_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) ++pAdapter->hdd_stats.hddTxRxStats.txXmitQueued; ++pAdapter->hdd_stats.hddTxRxStats.txXmitQueuedAC[ac]; + if (HDD_PSB_CHANGED == pAdapter->psbChanged) + { + /* Function which will determine acquire admittance for a + * WMM AC is required or not based on psb configuration done + * in the framework + */ + hdd_wmm_acquire_access_required(pAdapter, ac); + } + //Make sure we have access to this access category - if (likely(pAdapter->hddWmmStatus.wmmAcStatus[ac].wmmAcAccessAllowed) || - ( pHddStaCtx->conn_info.uIsAuthenticated == VOS_FALSE)) + if (((pAdapter->psbChanged & (1 << ac)) && likely(pAdapter->hddWmmStatus.wmmAcStatus[ac].wmmAcAccessAllowed)) || + (pHddStaCtx->conn_info.uIsAuthenticated == VOS_FALSE)) { granted = VOS_TRUE; } else { status = hdd_wmm_acquire_access( pAdapter, ac, &granted ); + pAdapter->psbChanged |= (1 << ac); } if (!granted) { @@ -806,7 +944,6 @@ int hdd_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) skb->queue_mapping = hddLinuxUpToAcMap[up]; } - /* * TODO: Should we stop net queues when txrx returns non-NULL?. */ @@ -867,12 +1004,40 @@ VOS_STATUS hdd_Ibss_GetStaId(hdd_station_ctx_t *pHddStaCtx, v_MACADDR_t *pMacAdd ===========================================================================*/ void hdd_tx_timeout(struct net_device *dev) { + hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + struct netdev_queue *txq; + int i = 0; + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, "%s: Transmission timeout occurred", __func__); //Getting here implies we disabled the TX queues for too long. Queues are //disabled either because of disassociation or low resource scenarios. In //case of disassociation it is ok to ignore this. But if associated, we have //do possible recovery here + + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "num_bytes AC0: %d AC1: %d AC2: %d AC3: %d", + pAdapter->wmm_tx_queue[0].count, + pAdapter->wmm_tx_queue[1].count, + pAdapter->wmm_tx_queue[2].count, + pAdapter->wmm_tx_queue[3].count); + + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "tx_suspend AC0: %d AC1: %d AC2: %d AC3: %d", + pAdapter->isTxSuspended[0], + pAdapter->isTxSuspended[1], + pAdapter->isTxSuspended[2], + pAdapter->isTxSuspended[3]); + + for (i = 0; i < 8; i++) + { + txq = netdev_get_tx_queue(dev, i); + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "Queue%d status: %d", i, netif_tx_queue_stopped(txq)); + } + + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "carrier state: %d", netif_carrier_ok(dev)); } @@ -906,6 +1071,7 @@ VOS_STATUS hdd_init_tx_rx( hdd_adapter_t *pAdapter ) v_SINT_t i = -1; pAdapter->isVosOutOfResource = VOS_FALSE; + pAdapter->isVosLowResource = VOS_FALSE; //vos_mem_zero(&pAdapter->stats, sizeof(struct net_device_stats)); //Will be zeroed out during alloc @@ -1536,7 +1702,8 @@ VOS_STATUS hdd_rx_packet_cbk( v_VOID_t *vosContext, pAdapter = pHddCtx->sta_to_adapter[staId]; if( NULL == pAdapter ) { - VOS_ASSERT(0); + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,"%s: pAdapter is Null for staId %u", + __func__, staId); return VOS_STATUS_E_FAILURE; } @@ -1593,8 +1760,9 @@ VOS_STATUS hdd_rx_packet_cbk( v_VOID_t *vosContext, VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_MED, "rx extract mac:" MAC_ADDRESS_STR, MAC_ADDR_ARRAY(mac) ); - curr_peer = wlan_hdd_tdls_find_peer(pAdapter, mac); - if ((NULL != curr_peer) && (eTDLS_LINK_CONNECTED == curr_peer->link_status)) + curr_peer = wlan_hdd_tdls_find_peer(pAdapter, mac, TRUE); + if ((NULL != curr_peer) && (eTDLS_LINK_CONNECTED == curr_peer->link_status) + && (TRUE == pRxMetaInfo->isStaTdls)) { wlan_hdd_tdls_increment_pkt_count(pAdapter, mac, 0); VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO,"rssi is %d", pRxMetaInfo->rssiAvg); @@ -1622,6 +1790,7 @@ VOS_STATUS hdd_rx_packet_cbk( v_VOID_t *vosContext, if (NET_RX_SUCCESS == rxstat) { ++pAdapter->hdd_stats.hddTxRxStats.rxDelivered; + ++pAdapter->hdd_stats.hddTxRxStats.pkt_rx_count; } else { @@ -1643,6 +1812,122 @@ VOS_STATUS hdd_rx_packet_cbk( v_VOID_t *vosContext, return status; } +/**============================================================================ + @brief hdd_tx_rx_pkt_cnt_stat_timer_handler() - + Enable/Disable split scan based on TX and RX traffic. + @param HddContext : [in] pointer to Hdd context + @return : None + ===========================================================================*/ +void hdd_tx_rx_pkt_cnt_stat_timer_handler( void *phddctx) +{ + hdd_adapter_list_node_t *pAdapterNode = NULL, *pNext = NULL; + hdd_adapter_t *pAdapter = NULL; + hdd_station_ctx_t *pHddStaCtx = NULL; + hdd_context_t *pHddCtx = (hdd_context_t *)phddctx; + hdd_config_t *cfg_param = pHddCtx->cfg_ini; + VOS_STATUS status; + v_U8_t staId = 0; + v_U8_t fconnected = 0; + + if (!cfg_param->dynSplitscan) + { + hddLog(VOS_TRACE_LEVEL_INFO, + "%s: Error : Dynamic split scan is not Enabled : %d", + __func__, pHddCtx->cfg_ini->dynSplitscan); + return; + } + + status = hdd_get_front_adapter ( pHddCtx, &pAdapterNode ); + while ( NULL != pAdapterNode && VOS_STATUS_SUCCESS == status ) + { + pAdapter = pAdapterNode->pAdapter; + + if ( pAdapter ) + { + hddLog(VOS_TRACE_LEVEL_INFO, + "%s: Adapter with device mode %d exists", + __func__, pAdapter->device_mode); + + if ((WLAN_HDD_INFRA_STATION == pAdapter->device_mode) || + (WLAN_HDD_P2P_CLIENT == pAdapter->device_mode)) + { + pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); + if ((eConnectionState_Associated == + pHddStaCtx->conn_info.connState) && + (VOS_TRUE == pHddStaCtx->conn_info.uIsAuthenticated)) + { + fconnected = TRUE; + } + } + else if ((WLAN_HDD_SOFTAP == pAdapter->device_mode) || + (WLAN_HDD_P2P_GO == pAdapter->device_mode)) + { + for (staId = 0; staId < WLAN_MAX_STA_COUNT; staId++) + { + if ((pAdapter->aStaInfo[staId].isUsed) && + (WLANTL_STA_AUTHENTICATED == + pAdapter->aStaInfo[staId].tlSTAState)) + { + fconnected = TRUE; + } + } + } + if ( fconnected ) + { + hddLog(VOS_TRACE_LEVEL_INFO, + "%s: One of the interface is connected check for scan", + __func__); + hddLog(VOS_TRACE_LEVEL_INFO, + "%s: pkt_tx_count: %d, pkt_rx_count: %d", __func__, + pAdapter->hdd_stats.hddTxRxStats.pkt_tx_count, + pAdapter->hdd_stats.hddTxRxStats.pkt_rx_count); + + vos_timer_start(&pHddCtx->tx_rx_trafficTmr, + cfg_param->trafficMntrTmrForSplitScan); + //Check for the previous statistics count + if ((pAdapter->hdd_stats.hddTxRxStats.pkt_tx_count > + cfg_param->txRxThresholdForSplitScan) || + (pAdapter->hdd_stats.hddTxRxStats.pkt_rx_count > + cfg_param->txRxThresholdForSplitScan) || + pHddCtx->drvr_miracast) + { + pAdapter->hdd_stats.hddTxRxStats.pkt_tx_count = 0; + pAdapter->hdd_stats.hddTxRxStats.pkt_rx_count = 0; + + if (!pHddCtx->issplitscan_enabled) + { + pHddCtx->issplitscan_enabled = TRUE; + sme_enable_disable_split_scan( + WLAN_HDD_GET_HAL_CTX(pAdapter), + cfg_param->nNumStaChanCombinedConc, + cfg_param->nNumP2PChanCombinedConc); + } + return; + } + else + { + pAdapter->hdd_stats.hddTxRxStats.pkt_tx_count = 0; + pAdapter->hdd_stats.hddTxRxStats.pkt_rx_count = 0; + } + fconnected = FALSE; + } + } + status = hdd_get_next_adapter( pHddCtx, pAdapterNode, &pNext); + pAdapterNode = pNext; + } + + if (pHddCtx->issplitscan_enabled) + { + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s: Disable split scan", __func__); + pHddCtx->issplitscan_enabled = FALSE; + sme_enable_disable_split_scan( + pHddCtx->hHal, + SME_DISABLE_SPLIT_SCAN, + SME_DISABLE_SPLIT_SCAN); + } + return; +} #else /**============================================================================ @@ -1698,34 +1983,34 @@ VOS_STATUS hdd_rx_packet_cbk(v_VOID_t *vosContext, } #ifdef FEATURE_WLAN_TDLS - if ((eTDLS_SUPPORT_ENABLED == pHddCtx->tdls_mode) && - 0 != pHddCtx->connected_peer_count) - { - hdd_station_ctx_t *pHddStaCtx = &pAdapter->sessionCtx.station; - u8 mac[6]; - - wlan_hdd_tdls_extract_sa(skb, mac); - - if (vos_is_macaddr_group((v_MACADDR_t *)mac)) { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_MED, - "rx broadcast packet, not adding to peer list"); - } else if (memcmp(pHddStaCtx->conn_info.bssId, - mac, 6) != 0) { - hddTdlsPeer_t *curr_peer; - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_MED, - "rx extract mac:" MAC_ADDRESS_STR, - MAC_ADDR_ARRAY(mac) ); - curr_peer = wlan_hdd_tdls_find_peer(pAdapter, mac); - if ((NULL != curr_peer) && (eTDLS_LINK_CONNECTED == curr_peer->link_status)) - { - wlan_hdd_tdls_increment_pkt_count(pAdapter, mac, 0); - /* TODO: Update the rssi by using wlan_hdd_tdls_set_rssi() */ - } - } else { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_MED, - "rx packet sa is bssid, not adding to peer list"); - } - } + if ((eTDLS_SUPPORT_ENABLED == pHddCtx->tdls_mode) && + 0 != pHddCtx->connected_peer_count) + { + hdd_station_ctx_t *pHddStaCtx = &pAdapter->sessionCtx.station; + u8 mac[6]; + + wlan_hdd_tdls_extract_sa(skb, mac); + + if (vos_is_macaddr_group((v_MACADDR_t *)mac)) { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_MED, + "rx broadcast packet, not adding to peer list"); + } else if (memcmp(pHddStaCtx->conn_info.bssId, + mac, 6) != 0) { + hddTdlsPeer_t *curr_peer; + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_MED, + "rx extract mac:" MAC_ADDRESS_STR, + MAC_ADDR_ARRAY(mac) ); + curr_peer = wlan_hdd_tdls_find_peer(pAdapter, mac, TRUE); + if ((NULL != curr_peer) && (eTDLS_LINK_CONNECTED == curr_peer->link_status)) + { + wlan_hdd_tdls_increment_pkt_count(pAdapter, mac, 0); + /* TODO: Update the rssi by using wlan_hdd_tdls_set_rssi() */ + } + } else { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_MED, + "rx packet sa is bssid, not adding to peer list"); + } + } #endif skb->dev = pAdapter->dev; @@ -1752,4 +2037,15 @@ VOS_STATUS hdd_rx_packet_cbk(v_VOID_t *vosContext, return VOS_STATUS_SUCCESS; } + +/**============================================================================ + @brief hdd_tx_rx_pkt_cnt_stat_timer_handler() - + Enable/Disable split scan based on TX and RX traffic. + @param HddContext : [in] pointer to Hdd context + @return : None + ===========================================================================*/ +void hdd_tx_rx_pkt_cnt_stat_timer_handler( void *phddctx) +{ + +} #endif /* QCA_WIFI_2_0 */ diff --git a/CORE/HDD/src/wlan_hdd_wext.c b/CORE/HDD/src/wlan_hdd_wext.c index 97ca37511644..9f895d2a6c61 100644 --- a/CORE/HDD/src/wlan_hdd_wext.c +++ b/CORE/HDD/src/wlan_hdd_wext.c @@ -49,6 +49,7 @@ #include #include #include +#include #include #include #include @@ -78,8 +79,8 @@ #ifdef QCA_WIFI_2_0 #include "ieee80211_common.h" #include "ol_if_athvar.h" - #include "dbglog_host.h" +#include "wma.h" #endif #ifdef CONFIG_HAS_EARLYSUSPEND @@ -97,17 +98,15 @@ #include #include #include "wlan_qct_pal_trace.h" +#include "wlan_qct_tl.h" #include "wlan_hdd_misc.h" #include "bap_hdd_misc.h" #include "wlan_hdd_dev_pwr.h" #include "qc_sap_ioctl.h" +#include "sme_Api.h" #include "wlan_qct_wda.h" -#ifdef QCA_WIFI_2_0 -#include "ieee80211_common.h" -#include "wma.h" -#endif #ifdef CONFIG_HAS_EARLYSUSPEND extern void hdd_suspend_wlan(struct early_suspend *wlan_suspend); extern void hdd_resume_wlan(struct early_suspend *wlan_suspend); @@ -125,16 +124,10 @@ int hdd_setBand_helper(struct net_device *dev, tANI_U8* ptr); static int ioctl_debug; module_param(ioctl_debug, int, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); -struct statsContext -{ - struct completion completion; - hdd_adapter_t *pAdapter; - unsigned int magic; -}; - #define STATS_CONTEXT_MAGIC 0x53544154 //STAT #define RSSI_CONTEXT_MAGIC 0x52535349 //RSSI -#define POWER_CONTEXT_MAGIC 0x504F5752 // POWR +#define POWER_CONTEXT_MAGIC 0x504F5752 //POWR +#define SNR_CONTEXT_MAGIC 0x534E5200 //SNR /* To Validate Channel against the Frequency and Vice-Versa */ static const hdd_freq_chan_map_t freq_chan_map[] = { {2412, 1}, {2417, 2}, @@ -166,7 +159,6 @@ static const hdd_freq_chan_map_t freq_chan_map[] = { {2412, 1}, {2417, 2}, #define WE_SET_MAX_TX_POWER 7 #define WE_SET_HIGHER_DTIM_TRANSITION 8 #define WE_SET_TM_LEVEL 9 -#ifdef QCA_WIFI_2_0 #define WE_SET_PHYMODE 10 #define WE_SET_NSS 11 #define WE_SET_LDPC 12 @@ -200,18 +192,20 @@ static const hdd_freq_chan_map_t freq_chan_map[] = { {2412, 1}, {2417, 2}, #define WE_SET_VHT_RATE 39 #define WE_DBGLOG_REPORT_ENABLE 40 #define WE_TXRX_FWSTATS_RESET 41 -#define WE_SET_POWER_GATING 42 +#define WE_SET_MAX_TX_POWER_2_4 42 +#define WE_SET_MAX_TX_POWER_5_0 43 +#define WE_SET_POWER_GATING 44 /* Private ioctl for packet powe save */ -#define WE_PPS_PAID_MATCH 43 -#define WE_PPS_GID_MATCH 44 -#define WE_PPS_EARLY_TIM_CLEAR 45 -#define WE_PPS_EARLY_DTIM_CLEAR 46 -#define WE_PPS_EOF_PAD_DELIM 47 -#define WE_PPS_MACADDR_MISMATCH 48 -#define WE_PPS_DELIM_CRC_FAIL 49 -#define WE_PPS_GID_NSTS_ZERO 50 -#define WE_PPS_RSSI_CHECK 51 -#endif +#define WE_PPS_PAID_MATCH 45 +#define WE_PPS_GID_MATCH 46 +#define WE_PPS_EARLY_TIM_CLEAR 47 +#define WE_PPS_EARLY_DTIM_CLEAR 48 +#define WE_PPS_EOF_PAD_DELIM 49 +#define WE_PPS_MACADDR_MISMATCH 50 +#define WE_PPS_DELIM_CRC_FAIL 51 +#define WE_PPS_GID_NSTS_ZERO 52 +#define WE_PPS_RSSI_CHECK 53 +#define WE_ENABLE_STRICT_FCC_REG 54 /* Private ioctls and their sub-ioctls */ #define WLAN_PRIV_SET_NONE_GET_INT (SIOCIWFIRSTPRIV + 1) @@ -293,8 +287,12 @@ static const hdd_freq_chan_map_t freq_chan_map[] = { {2412, 1}, {2417, 2}, #ifdef WLAN_FEATURE_11W #define WE_GET_11W_INFO 9 #endif +#define WE_GET_STATES 10 +#ifdef FEATURE_CESIUM_PROPRIETARY +#define WE_GET_IBSS_STA_INFO 11 +#endif #ifdef QCA_WIFI_2_0 -#define WE_GET_PHYMODE 10 +#define WE_GET_PHYMODE 12 #endif /* Private ioctls and their sub-ioctls */ @@ -307,16 +305,21 @@ static const hdd_freq_chan_map_t freq_chan_map[] = { {2412, 1}, {2417, 2}, #define WE_ENABLE_DXE_STALL_DETECT 6 #define WE_DISPLAY_DXE_SNAP_SHOT 7 #define WE_SET_REASSOC_TRIGGER 8 +#define WE_DISPLAY_DATAPATH_SNAP_SHOT 9 +#ifdef FEATURE_CESIUM_PROPRIETARY +#define WE_IBSS_GET_PEER_INFO_ALL 10 +#endif #ifdef QCA_WIFI_2_0 -#define WE_DUMP_AGC_START 9 -#define WE_DUMP_AGC 10 -#define WE_DUMP_CHANINFO_START 11 -#define WE_DUMP_CHANINFO 12 -#define WE_DUMP_WATCHDOG 13 +#define WE_DUMP_AGC_START 11 +#define WE_DUMP_AGC 12 +#define WE_DUMP_CHANINFO_START 13 +#define WE_DUMP_CHANINFO 14 +#define WE_DUMP_WATCHDOG 15 #ifdef DEBUG -#define WE_SET_FW_CRASH_INJECT 14 +#define WE_SET_FW_CRASH_INJECT 16 #endif #endif + /* Private ioctls and their sub-ioctls */ #define WLAN_PRIV_SET_VAR_INT_GET_NONE (SIOCIWFIRSTPRIV + 7) #define WE_LOG_DUMP_CMD 1 @@ -329,7 +332,9 @@ static const hdd_freq_chan_map_t freq_chan_map[] = { {2412, 1}, {2417, 2}, #ifdef FEATURE_WLAN_TDLS #define WE_TDLS_CONFIG_PARAMS 5 #endif - +#ifdef FEATURE_CESIUM_PROPRIETARY +#define WE_IBSS_GET_PEER_INFO 6 +#endif #ifdef FEATURE_WLAN_TDLS #undef MAX_VAR_ARGS #define MAX_VAR_ARGS 10 @@ -392,9 +397,11 @@ static const hdd_freq_chan_map_t freq_chan_map[] = { {2412, 1}, {2417, 2}, #define WLAN_SET_POWER_PARAMS (SIOCIWFIRSTPRIV + 29) #ifdef FEATURE_OEM_DATA_SUPPORT +#ifdef QCA_WIFI_2_0 /* Private ioctl to get capability information for OEM Data Request/Response */ #define WLAN_PRIV_GET_OEM_DATA_CAP (SIOCIWFIRSTPRIV + 30) #endif +#endif #define WLAN_GET_LINK_SPEED (SIOCIWFIRSTPRIV + 31) #define WLAN_STATS_INVALID 0 @@ -443,6 +450,9 @@ static const hdd_freq_chan_map_t freq_chan_map[] = { {2412, 1}, {2417, 2}, #define TX_PER_TRACKING_MAX_RATIO 10 #define TX_PER_TRACKING_DEFAULT_WATERMARK 5 +#define WLAN_ADAPTER 0 +#define P2P_ADAPTER 1 + /*MCC Configuration parameters */ enum { MCC_SCHEDULE_TIME_SLICE_CFG_PARAM = 1, @@ -509,7 +519,7 @@ void hdd_wlan_get_version(hdd_adapter_t *pAdapter, union iwreq_data *wrqu, pHWversion = "Unknown"; } - wrqu->data.length = snprintf(extra, WE_MAX_STR_LEN, + wrqu->data.length = scnprintf(extra, WE_MAX_STR_LEN, "Host SW:%s, FW:%s, HW:%s", QWLAN_VERSIONSTR, pSWversion, @@ -518,6 +528,161 @@ void hdd_wlan_get_version(hdd_adapter_t *pAdapter, union iwreq_data *wrqu, return; } +#ifdef FEATURE_CESIUM_PROPRIETARY +void hdd_get_ibss_peer_info_cb(v_VOID_t *pUserData, v_VOID_t *pPeerInfoRsp) +{ + hdd_adapter_t *pAdapter = (hdd_adapter_t *)pUserData; + hdd_ibss_peer_info_t *pPeerInfo = (hdd_ibss_peer_info_t *)pPeerInfoRsp; + hdd_station_ctx_t *pStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); + v_U8_t i; + + if (NULL != pPeerInfo && eHAL_STATUS_SUCCESS == pPeerInfo->status) + { + pStaCtx->ibss_peer_info.status = pPeerInfo->status; + pStaCtx->ibss_peer_info.numIBSSPeers = pPeerInfo->numIBSSPeers; + for (i = 0; i < pPeerInfo->numIBSSPeers; i++) + { + memcpy(&pStaCtx->ibss_peer_info.ibssPeerList[i], + &pPeerInfo->ibssPeerList[i], sizeof(hdd_ibss_peer_info_params_t)); + } + } + else + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s] PEER_INFO_CMD_STATUS is not SUCCESS\n", __func__); + } + + complete(&pAdapter->ibss_peer_info_comp); +} + +v_MACADDR_t* hdd_wlan_get_ibss_mac_addr_from_staid(hdd_adapter_t *pAdapter, v_U8_t staIdx) +{ + v_U8_t idx; + hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); + + for ( idx = 0; idx < HDD_MAX_NUM_IBSS_STA; idx++ ) + { + if ( 0 != pHddStaCtx->conn_info.staId[ idx ] && + staIdx == pHddStaCtx->conn_info.staId[ idx ]) + { + return (&pHddStaCtx->conn_info.peerMacAddress[ idx ]); + } + } + return NULL; +} + +eHalStatus hdd_wlan_get_ibss_peer_info(hdd_adapter_t *pAdapter, v_U8_t staIdx) +{ + eHalStatus status = eHAL_STATUS_FAILURE; + tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(pAdapter); + hdd_station_ctx_t *pStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); + hdd_ibss_peer_info_t *pPeerInfo = &pStaCtx->ibss_peer_info; + + status = sme_RequestIBSSPeerInfo(hHal, pAdapter, hdd_get_ibss_peer_info_cb, + VOS_FALSE, staIdx); + + INIT_COMPLETION(pAdapter->ibss_peer_info_comp); + + if (eHAL_STATUS_SUCCESS == status) + { + status = wait_for_completion_interruptible_timeout + (&pAdapter->ibss_peer_info_comp, + msecs_to_jiffies(IBSS_PEER_INFO_REQ_TIMOEUT)); + if(!status) + { + hddLog(VOS_TRACE_LEVEL_WARN, "%s: Warning: IBSS_PEER_INFO_TIMEOUT", + __func__); + return status; + } + + /** Print the peer info */ + pr_info("pPeerInfo->numIBSSPeers = %d ", pPeerInfo->numIBSSPeers); + pr_info("============================================================"); + { + v_MACADDR_t *macAddr = hdd_wlan_get_ibss_mac_addr_from_staid(pAdapter, + staIdx); + v_U32_t txRateMbps = ((pPeerInfo->ibssPeerList[0].txRate)*500*1000)/1000000; + + if (NULL != macAddr) + { + pr_info("PEER ADDR :" MAC_ADDRESS_STR " TxRate: %d Mbps RSSI: %d", + MAC_ADDR_ARRAY(macAddr->bytes), + (int)txRateMbps, (int)pPeerInfo->ibssPeerList[0].rssi); + } + else + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + " ERROR: PEER MAC ADDRESS NOT FOUND "); + } + } + } + else + { + hddLog(VOS_TRACE_LEVEL_WARN, + "%s: Warning: sme_RequestIBSSPeerInfo Request failed", __func__); + } + + return status; +} + +eHalStatus hdd_wlan_get_ibss_peer_info_all(hdd_adapter_t *pAdapter) +{ + eHalStatus status = eHAL_STATUS_FAILURE; + tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(pAdapter); + hdd_station_ctx_t *pStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); + hdd_ibss_peer_info_t *pPeerInfo = &pStaCtx->ibss_peer_info; + int i; + + status = sme_RequestIBSSPeerInfo(hHal, pAdapter, hdd_get_ibss_peer_info_cb, + VOS_TRUE, 0xFF); + INIT_COMPLETION(pAdapter->ibss_peer_info_comp); + + if (eHAL_STATUS_SUCCESS == status) + { + status = wait_for_completion_interruptible_timeout + (&pAdapter->ibss_peer_info_comp, + msecs_to_jiffies(IBSS_PEER_INFO_REQ_TIMOEUT)); + if(!status) + { + hddLog(VOS_TRACE_LEVEL_WARN, "%s: Warning: IBSS_PEER_INFO_TIMEOUT", + __func__); + return status; + } + + /** Print the peer info */ + pr_info("pPeerInfo->numIBSSPeers = %d ", (int)pPeerInfo->numIBSSPeers); + pr_info("============================================================"); + for (i = 0; i < pPeerInfo->numIBSSPeers; i++) + { + v_U8_t staIdx = pPeerInfo->ibssPeerList[i].staIdx; + v_MACADDR_t *macAddr = hdd_wlan_get_ibss_mac_addr_from_staid(pAdapter, + staIdx); + v_U32_t txRateMbps = ((pPeerInfo->ibssPeerList[0].txRate)*500*1000)/1000000; + + pr_info("STAIDX:%d ", (int)pPeerInfo->ibssPeerList[i].staIdx); + if (NULL != macAddr) + { + pr_info(" PEER ADDR :" MAC_ADDRESS_STR " TxRate: %d Mbps RSSI: %d", + MAC_ADDR_ARRAY(macAddr->bytes), + (int)txRateMbps, (int)pPeerInfo->ibssPeerList[i].rssi); + } + else + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + " ERROR: PEER MAC ADDRESS NOT FOUND "); + } + } + } + else + { + hddLog(VOS_TRACE_LEVEL_WARN, + "%s: Warning: sme_RequestIBSSPeerInfo Request failed", __func__); + } + + return status; +} +#endif /* FEATURE_CESIUM_PROPRIETARY */ + int hdd_wlan_get_rts_threshold(hdd_adapter_t *pAdapter, union iwreq_data *wrqu) { tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(pAdapter); @@ -703,6 +868,57 @@ static void hdd_GetRssiCB( v_S7_t rssi, tANI_U32 staId, void *pContext ) complete(&pStatsContext->completion); } +static void hdd_GetSnrCB(tANI_S8 snr, tANI_U32 staId, void *pContext) +{ + struct statsContext *pStatsContext; + hdd_adapter_t *pAdapter; + + if (ioctl_debug) + { + pr_info("%s: snr [%d] STA [%d] pContext [%p]\n", + __func__, (int)snr, (int)staId, pContext); + } + + if (NULL == pContext) + { + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s: Bad param, pContext [%p]", + __func__, pContext); + return; + } + + /* there is a race condition that exists between this callback function + * and the caller since the caller could time out either before or + * while this code is executing. we'll assume the timeout hasn't + * occurred, but we'll verify that right before we save our work + */ + + pStatsContext = pContext; + pAdapter = pStatsContext->pAdapter; + if ((NULL == pAdapter) || (SNR_CONTEXT_MAGIC != pStatsContext->magic)) + { + /* the caller presumably timed out so there is nothing we can do */ + hddLog(VOS_TRACE_LEVEL_WARN, + "%s: Invalid context, pAdapter [%p] magic [%08x]", + __func__, pAdapter, pStatsContext->magic); + if (ioctl_debug) + { + pr_info("%s: Invalid context, pAdapter [%p] magic [%08x]\n", + __func__, pAdapter, pStatsContext->magic); + } + return; + } + + /* the race is on. caller could have timed out immediately after + * we verified the magic, but if so, caller will wait a short time + * for us to copy over the snr + */ + pAdapter->snr = snr; + + /* and notify the caller */ + complete(&pStatsContext->completion); +} + VOS_STATUS wlan_hdd_get_rssi(hdd_adapter_t *pAdapter, v_S7_t *rssi_value) { struct statsContext context; @@ -770,6 +986,81 @@ VOS_STATUS wlan_hdd_get_rssi(hdd_adapter_t *pAdapter, v_S7_t *rssi_value) return VOS_STATUS_SUCCESS; } +VOS_STATUS wlan_hdd_get_snr(hdd_adapter_t *pAdapter, v_S7_t *snr) +{ + struct statsContext context; + hdd_context_t *pHddCtx; + hdd_station_ctx_t *pHddStaCtx; + eHalStatus hstatus; + long lrc; + int valid; + + if (NULL == pAdapter) + { + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s: Invalid context, pAdapter", __func__); + return VOS_STATUS_E_FAULT; + } + + pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + + valid = wlan_hdd_validate_context(pHddCtx); + if (0 != valid) + { + hddLog(VOS_TRACE_LEVEL_ERROR, FL("HDD context is not valid")); + return VOS_STATUS_E_FAULT; + } + + pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); + if (NULL == pHddStaCtx) + { + hddLog(VOS_TRACE_LEVEL_ERROR, FL("HDD STA context is not valid")); + return VOS_STATUS_E_FAULT; + } + + init_completion(&context.completion); + context.pAdapter = pAdapter; + context.magic = SNR_CONTEXT_MAGIC; + + hstatus = sme_GetSnr(pHddCtx->hHal, hdd_GetSnrCB, + pHddStaCtx->conn_info.staId[ 0 ], + pHddStaCtx->conn_info.bssId, + &context); + if (eHAL_STATUS_SUCCESS != hstatus) + { + hddLog(VOS_TRACE_LEVEL_ERROR,"%s: Unable to retrieve RSSI", + __func__); + /* we'll returned a cached value below */ + } + else + { + /* request was sent -- wait for the response */ + lrc = wait_for_completion_interruptible_timeout(&context.completion, + msecs_to_jiffies(WLAN_WAIT_TIME_STATS)); + /* either we have a response or we timed out + * either way, first invalidate our magic + */ + context.magic = 0; + if (lrc <= 0) + { + hddLog(VOS_TRACE_LEVEL_ERROR,"%s: SME %s while retrieving SNR ", + __func__, (0 == lrc) ? "timeout" : "interrupt"); + /* there is a race condition such that the callback + * function could be executing at the same time we are. Of + * primary concern is if the callback function had already + * verified the "magic" but hasn't yet set the completion + * variable. Since the completion variable is on our + * stack, we'll delay just a bit to make sure the data is + * still valid if that is the case + */ + msleep(50); + /* we'll now returned a cached value below */ + } + } + *snr = pAdapter->snr; + + return VOS_STATUS_SUCCESS; +} #if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR) static void hdd_GetRoamRssiCB( v_S7_t rssi, tANI_U32 staId, void *pContext ) @@ -1183,14 +1474,15 @@ static int iw_set_mode(struct net_device *dev, } if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:LOGP in Progress. Ignore!!!",__func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:LOGP in Progress. Ignore!!!", __func__); return 0; } pWextState = WLAN_HDD_GET_WEXT_STATE_PTR(pAdapter); if (pWextState == NULL) { - hddLog (LOGE, "%s ERROR: Data Storage Corruption", __func__); + hddLog(LOGE, "%s ERROR: Data Storage Corruption", __func__); return -EINVAL; } @@ -1198,12 +1490,12 @@ static int iw_set_mode(struct net_device *dev, pRoamProfile = &pWextState->roamProfile; LastBSSType = pRoamProfile->BSSType; - hddLog( LOG1,"%s Old Bss type = %d", __func__, LastBSSType); + hddLog(LOG1, "%s Old Bss type = %d", __func__, LastBSSType); switch (wrqu->mode) { case IW_MODE_ADHOC: - hddLog( LOG1,"%s Setting AP Mode as IW_MODE_ADHOC", __func__); + hddLog(LOG1, "%s Setting AP Mode as IW_MODE_ADHOC", __func__); pRoamProfile->BSSType = eCSR_BSS_TYPE_START_IBSS; // Set the phymode correctly for IBSS. pConfig = (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini; @@ -1212,16 +1504,16 @@ static int iw_set_mode(struct net_device *dev, wdev->iftype = NL80211_IFTYPE_ADHOC; break; case IW_MODE_INFRA: - hddLog( LOG1, "%s Setting AP Mode as IW_MODE_INFRA", __func__); + hddLog(LOG1, "%s Setting AP Mode as IW_MODE_INFRA", __func__); pRoamProfile->BSSType = eCSR_BSS_TYPE_INFRASTRUCTURE; wdev->iftype = NL80211_IFTYPE_STATION; break; case IW_MODE_AUTO: - hddLog(LOG1,"%s Setting AP Mode as IW_MODE_AUTO", __func__); + hddLog(LOG1, "%s Setting AP Mode as IW_MODE_AUTO", __func__); pRoamProfile->BSSType = eCSR_BSS_TYPE_ANY; break; default: - hddLog(LOG1,"%s Unknown AP Mode value", __func__); + hddLog(LOG1, "%s Unknown AP Mode value", __func__); return -EOPNOTSUPP; } @@ -1244,8 +1536,6 @@ static int iw_set_mode(struct net_device *dev, } } - - EXIT(); return 0; } @@ -1253,13 +1543,14 @@ static int iw_set_mode(struct net_device *dev, static int iw_get_mode(struct net_device *dev, struct iw_request_info *info, - v_U32_t *uwrq, char *extra) + union iwreq_data *wrqu, + char *extra) { hdd_wext_state_t *pWextState; hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); - hddLog (LOG1, "In %s",__func__); + hddLog(LOG1, "In %s", __func__); if (NULL == pAdapter) { @@ -1269,14 +1560,15 @@ static int iw_get_mode(struct net_device *dev, } if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:LOGP in Progress. Ignore!!!",__func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:LOGP in Progress. Ignore!!!", __func__); return 0; } pWextState = WLAN_HDD_GET_WEXT_STATE_PTR(pAdapter); if (pWextState == NULL) { - hddLog (LOGE, "%s ERROR: Data Storage Corruption", __func__); + hddLog(LOGE, "%s ERROR: Data Storage Corruption", __func__); return -EINVAL; } @@ -1284,21 +1576,22 @@ static int iw_get_mode(struct net_device *dev, { case eCSR_BSS_TYPE_INFRASTRUCTURE: hddLog(LOG1, "%s returns IW_MODE_INFRA\n", __func__); - *uwrq = IW_MODE_INFRA ; + wrqu->mode = IW_MODE_INFRA; break; case eCSR_BSS_TYPE_IBSS: case eCSR_BSS_TYPE_START_IBSS: - hddLog( LOG1,"%s returns IW_MODE_ADHOC\n", __func__); - *uwrq= IW_MODE_ADHOC; + hddLog(LOG1, "%s returns IW_MODE_ADHOC\n", __func__); + wrqu->mode = IW_MODE_ADHOC; break; case eCSR_BSS_TYPE_ANY: - hddLog( LOG1,"%s returns IW_MODE_AUTO\n", __func__); - *uwrq= IW_MODE_AUTO; + hddLog(LOG1, "%s returns IW_MODE_AUTO\n", __func__); + wrqu->mode = IW_MODE_AUTO; break; default: - hddLog( LOG1,"%s returns APMODE_UNKNOWN\n", __func__); + hddLog(LOG1, "%s returns APMODE_UNKNOWN\n", __func__); break; } + return 0; } @@ -1645,7 +1938,7 @@ static int iw_set_genie(struct net_device *dev, { hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); hdd_wext_state_t *pWextState = WLAN_HDD_GET_WEXT_STATE_PTR(pAdapter); - u_int8_t *genie; + u_int8_t *genie = (u_int8_t *)extra; v_U16_t remLen; ENTER(); @@ -1660,7 +1953,6 @@ static int iw_set_genie(struct net_device *dev, return 0; } - genie = wrqu->data.pointer; remLen = wrqu->data.length; hddLog(LOG1,"iw_set_genie ioctl IE[0x%X], LEN[%d]\n", genie[0], genie[1]); @@ -1788,9 +2080,14 @@ static int iw_get_genie(struct net_device *dev, pAdapter->sessionId, &length, genIeBytes); - wrqu->data.length = VOS_MIN((u_int16_t) length, DOT11F_IE_RSN_MAX_LEN); - - vos_mem_copy( wrqu->data.pointer, (v_VOID_t*)genIeBytes, wrqu->data.length); + length = VOS_MIN((u_int16_t) length, DOT11F_IE_RSN_MAX_LEN); + if (wrqu->data.length < length) + { + hddLog(LOG1, "%s: failed to copy data to user buffer", __func__); + return -EFAULT; + } + vos_mem_copy( extra, (v_VOID_t*)genIeBytes, wrqu->data.length); + wrqu->data.length = length; hddLog(LOG1,"%s: RSN IE of %d bytes returned\n", __func__, wrqu->data.length ); @@ -2427,17 +2724,22 @@ static int iw_get_linkspeed(struct net_device *dev, union iwreq_data *wrqu, char *extra) { hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + hdd_context_t *pHddCtx; char *pLinkSpeed = (char*)extra; - int len = sizeof(v_U16_t) + 1; - v_U16_t link_speed; + int len = sizeof(v_U32_t) + 1; + v_U32_t link_speed = 0; hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); - int rc; + VOS_STATUS status; + int rc, valid; - if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) + pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + + valid = wlan_hdd_validate_context(pHddCtx); + + if (0 != valid) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:LOGP in Progress. Ignore!!!", __func__); - return -EBUSY; + hddLog(VOS_TRACE_LEVEL_ERROR, FL("HDD context is not valid")); + return valid; } if (eConnectionState_Associated != pHddStaCtx->conn_info.connState) @@ -2447,10 +2749,31 @@ static int iw_get_linkspeed(struct net_device *dev, } else { - wlan_hdd_get_classAstats(pAdapter); - //The linkspeed returned by HAL is in units of 500kbps. - //converting it to mbps - link_speed = pAdapter->hdd_stats.ClassA_stat.tx_rate/2; + status = wlan_hdd_get_classAstats(pAdapter); + + if (!VOS_IS_STATUS_SUCCESS(status )) + { + hddLog(VOS_TRACE_LEVEL_ERROR, FL("Unable to retrieve SME statistics")); + return -EINVAL; + } + + /* Unit of link capacity is obtained from the TL API is MbpsX10 */ + WLANTL_GetSTALinkCapacity(WLAN_HDD_GET_CTX(pAdapter)->pvosContext, + (WLAN_HDD_GET_STATION_CTX_PTR(pAdapter))->conn_info.staId[0], + &link_speed); + + link_speed = link_speed / 10; + + if (0 == link_speed) + { + /* The linkspeed returned by HAL is in units of 500kbps. + * converting it to mbps. + * This is required to support legacy firmware which does + * not return link capacity. + */ + link_speed = pAdapter->hdd_stats.ClassA_stat.tx_rate/2; + } + } wrqu->data.length = len; @@ -2459,9 +2782,7 @@ static int iw_get_linkspeed(struct net_device *dev, if ((rc < 0) || (rc >= len)) { // encoding or length error? - hddLog(VOS_TRACE_LEVEL_ERROR, - "%s: Unable to encode link speed, got [%s]", - __func__,pLinkSpeed); + hddLog(VOS_TRACE_LEVEL_ERROR,FL("Unable to encode link speed")); return -EIO; } @@ -2469,6 +2790,7 @@ static int iw_get_linkspeed(struct net_device *dev, return 0; } + /* * Support for the RSSI & RSSI-APPROX private commands * Per the WiFi framework the response must be of the form @@ -2481,7 +2803,7 @@ static int iw_get_rssi(struct net_device *dev, union iwreq_data *wrqu, char *extra) { hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); - char *cmd = (char*)wrqu->data.pointer; + char *cmd = extra; int len = wrqu->data.length; v_S7_t s7Rssi = 0; hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); @@ -2494,7 +2816,7 @@ static int iw_get_rssi(struct net_device *dev, { /* we are not connected or our SSID is too long so we cannot report an rssi */ - rc = snprintf(cmd, len, "OK"); + rc = scnprintf(cmd, len, "OK"); } else { @@ -2509,7 +2831,7 @@ static int iw_get_rssi(struct net_device *dev, { /* append the rssi to the ssid in the format required by the WiFI Framework */ - rc = snprintf(&cmd[ssidlen], len - ssidlen, " rssi %d", s7Rssi); + rc = scnprintf(&cmd[ssidlen], len - ssidlen, " rssi %d", s7Rssi); } else { @@ -2776,7 +3098,6 @@ void* wlan_hdd_change_country_code_callback(void *pAdapter) { hdd_adapter_t *call_back_pAdapter = pAdapter; - complete(&call_back_pAdapter->change_country_code); return NULL; @@ -2787,7 +3108,7 @@ static int iw_set_priv(struct net_device *dev, union iwreq_data *wrqu, char *extra) { hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); - char *cmd = (char*)wrqu->data.pointer; + char *cmd = extra; int cmd_len = wrqu->data.length; int ret = 0; int status = 0; @@ -2888,7 +3209,9 @@ static int iw_set_priv(struct net_device *dev, (void *)(tSmeChangeCountryCallback)wlan_hdd_change_country_code_callback, country_code, pAdapter, - pHddCtx->pvosContext); + pHddCtx->pvosContext, + eSIR_TRUE, + eSIR_TRUE); /* Wait for completion */ lrc = wait_for_completion_interruptible_timeout(&pAdapter->change_country_code, @@ -2913,9 +3236,25 @@ static int iw_set_priv(struct net_device *dev, } else if( strncasecmp(cmd, "powermode", 9) == 0 ) { int mode; - char *ptr = (char*)(cmd + 9); + char *ptr; + + if (9 < cmd_len) + { + ptr = (char*)(cmd + 9); + + }else{ + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "CMD LENGTH %d is not correct",cmd_len); + return VOS_STATUS_E_FAILURE; + } + + if (1 != sscanf(ptr,"%d",&mode)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "powermode input %s is not correct",ptr); + return VOS_STATUS_E_FAILURE; + } - sscanf(ptr,"%d",&mode); if(!pHddCtx->cfg_ini->enablePowersaveOffload) wlan_hdd_enter_bmps(pAdapter, mode); else @@ -2999,9 +3338,27 @@ static int iw_set_priv(struct net_device *dev, } else if( 0 == strncasecmp(cmd, "CONFIG-TX-TRACKING", 18) ) { tSirTxPerTrackingParam tTxPerTrackingParam; - char *ptr = (char*)(cmd + 18); - sscanf(ptr,"%hhu %hhu %hhu %lu",&(tTxPerTrackingParam.ucTxPerTrackingEnable), &(tTxPerTrackingParam.ucTxPerTrackingPeriod), - &(tTxPerTrackingParam.ucTxPerTrackingRatio), &(tTxPerTrackingParam.uTxPerTrackingWatermark)); + char *ptr; + + if (18 < cmd_len) + { + ptr = (char*)(cmd + 18); + }else{ + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "CMD LENGTH %d is not correct",cmd_len); + return VOS_STATUS_E_FAILURE; + } + + if (4 != sscanf(ptr,"%hhu %hhu %hhu %u", + &(tTxPerTrackingParam.ucTxPerTrackingEnable), + &(tTxPerTrackingParam.ucTxPerTrackingPeriod), + &(tTxPerTrackingParam.ucTxPerTrackingRatio), + &(tTxPerTrackingParam.uTxPerTrackingWatermark))) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "CONFIG-TX-TRACKING %s input is not correct",ptr); + return VOS_STATUS_E_FAILURE; + } // parameters checking // period has to be larger than 0 @@ -3043,6 +3400,16 @@ done: /* there was an encoding error or overflow */ status = -EIO; } + else if (ret > 0) + { + if (copy_to_user(wrqu->data.pointer, cmd, ret)) + { + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s: failed to copy data to user buffer", __func__); + return -EFAULT; + } + wrqu->data.length = ret; + } if (ioctl_debug) { @@ -3050,7 +3417,6 @@ done: __func__, cmd, wrqu->data.length, status); } return status; - } static int iw_set_nick(struct net_device *dev, @@ -3259,7 +3625,8 @@ static int iw_get_encodeext(struct net_device *dev, { dwrq->flags |= IW_ENCODE_ENABLED; dwrq->length = pRoamProfile->Keys.KeyLength[keyId]; - palCopyMemory(dev,extra,&(pRoamProfile->Keys.KeyMaterial[keyId][0]),pRoamProfile->Keys.KeyLength[keyId]); + vos_mem_copy(extra, &(pRoamProfile->Keys.KeyMaterial[keyId][0]), + pRoamProfile->Keys.KeyLength[keyId]); } else { @@ -3469,7 +3836,13 @@ static int iw_set_encodeext(struct net_device *dev, is done. Save the key in the UMAC and include it in the ADD BSS request */ halStatus = sme_FTUpdateKey( WLAN_HDD_GET_HAL_CTX(pAdapter), &setKey); - if ( halStatus == eHAL_STATUS_FT_PREAUTH_KEY_FAILED ) + if ( halStatus == eHAL_STATUS_FT_PREAUTH_KEY_SUCCESS ) + { + hddLog(VOS_TRACE_LEVEL_INFO_MED, + "%s: Update PreAuth Key success", __func__); + return 0; + } + else if ( halStatus == eHAL_STATUS_FT_PREAUTH_KEY_FAILED ) { hddLog(VOS_TRACE_LEVEL_ERROR, "%s: Update PreAuth Key failed", __func__); @@ -3922,6 +4295,7 @@ static int iw_setint_getnone(struct net_device *dev, struct iw_request_info *inf { if((ENABLE_11D == set_value) || (DISABLE_11D == set_value)) { + memset(&smeConfig, 0x00, sizeof(smeConfig)); sme_GetConfigParam(hHal, &smeConfig); smeConfig.csrConfig.Is11dSupportEnabled = (v_BOOL_t)set_value; @@ -4153,11 +4527,16 @@ static int iw_setint_getnone(struct net_device *dev, struct iw_request_info *inf } case WE_SET_MAX_TX_POWER: { - tSirMacAddr bssid = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}; - tSirMacAddr selfMac = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}; + tSirMacAddr bssid; + tSirMacAddr selfMac; hddLog(VOS_TRACE_LEVEL_INFO, "%s: Setting maximum tx power %d dBm", __func__, set_value); + vos_mem_copy(bssid, pAdapter->macAddressCurrent.bytes, + VOS_MAC_ADDR_SIZE); + vos_mem_copy(selfMac, pAdapter->macAddressCurrent.bytes, + VOS_MAC_ADDR_SIZE); + if( sme_SetMaxTxPower(hHal, bssid, selfMac, set_value) != eHAL_STATUS_SUCCESS ) { @@ -4168,10 +4547,42 @@ static int iw_setint_getnone(struct net_device *dev, struct iw_request_info *inf break; } - case WE_SET_HIGHER_DTIM_TRANSITION: + case WE_SET_MAX_TX_POWER_2_4: { - if(!((set_value == eANI_BOOLEAN_FALSE) || - (set_value == eANI_BOOLEAN_TRUE))) + hddLog(VOS_TRACE_LEVEL_INFO, + "%s: Setting maximum tx power %d dBm for 2.4 GHz band", + __func__, set_value); + if (sme_SetMaxTxPowerPerBand(eCSR_BAND_24, set_value) != + eHAL_STATUS_SUCCESS) + { + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s: Setting maximum tx power failed for 2.4 GHz band", + __func__); + return -EIO; + } + + break; + } + case WE_SET_MAX_TX_POWER_5_0: + { + hddLog(VOS_TRACE_LEVEL_INFO, + "%s: Setting maximum tx power %d dBm for 5.0 GHz band", + __func__, set_value); + if (sme_SetMaxTxPowerPerBand(eCSR_BAND_5G, set_value) != + eHAL_STATUS_SUCCESS) + { + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s: Setting maximum tx power failed for 5.0 GHz band", + __func__); + return -EIO; + } + + break; + } + case WE_SET_HIGHER_DTIM_TRANSITION: + { + if(!((set_value == eANI_BOOLEAN_FALSE) || + (set_value == eANI_BOOLEAN_TRUE))) { hddLog(LOGE, "Dynamic DTIM Incorrect data:%d", set_value); ret = -EINVAL; @@ -4196,11 +4607,48 @@ static int iw_setint_getnone(struct net_device *dev, struct iw_request_info *inf hddDevTmLevelChangedHandler(hddCtxt->parent_dev, set_value); #else hddLog(VOS_TRACE_LEVEL_INFO, "Thermal Mitigation Level %d not set for discrete", - (int)set_value); + (int)set_value); #endif break; } + case WE_ENABLE_STRICT_FCC_REG: + { + hdd_context_t *hddCtxt = WLAN_HDD_GET_CTX(pAdapter); + struct wiphy *wiphy = NULL; + long lrc; + int status; + + wiphy = hddCtxt->wiphy; + if(wiphy == NULL) + { + hddLog(VOS_TRACE_LEVEL_ERROR,"%s: wiphy is NULL ", __func__); + break; + } + init_completion(&hddCtxt->wiphy_channel_update_event); + + hddCtxt->nEnableStrictRegulatoryForFCC = set_value; + + status = regulatory_hint(wiphy, "00"); + if(status < 0) + { + hddLog(VOS_TRACE_LEVEL_ERROR,"%s: Failure in setting regulatory rule ", __func__); + break; + } + + /* Wait for completion */ + lrc = wait_for_completion_interruptible_timeout(&hddCtxt->wiphy_channel_update_event, + msecs_to_jiffies(WLAN_WAIT_TIME_CHANNEL_UPDATE)); + if (lrc <= 0) + { + hddLog(VOS_TRACE_LEVEL_ERROR,"%s: SME %s while setting strict FCC regulatory rule ", + __func__, (0 == lrc) ? "Timeout" : "Interrupt"); + return (0 == lrc) ? -ETIMEDOUT : -EINTR; + } + hddLog(VOS_TRACE_LEVEL_INFO,"%s: SUCCESS in setting strict FCC regulatory rule", __func__); + + break; + } #ifdef QCA_WIFI_2_0 case WE_SET_PHYMODE: { @@ -4373,6 +4821,7 @@ static int iw_setint_getnone(struct net_device *dev, struct iw_request_info *inf phddctx->cfg_ini->nChannelBondingMode5GHz))) chwidth = true; + memset(&smeConfig, 0x00, sizeof(smeConfig)); sme_GetConfigParam(hHal, &smeConfig); switch (set_value) { case eHT_CHANNEL_WIDTH_20MHZ: @@ -4387,6 +4836,7 @@ static int iw_setint_getnone(struct net_device *dev, struct iw_request_info *inf return -EINVAL; break; +#ifdef WLAN_FEATURE_11AC case eHT_CHANNEL_WIDTH_80MHZ: if (chwidth) smeConfig.csrConfig.channelBondingMode5GHz = @@ -4395,6 +4845,7 @@ static int iw_setint_getnone(struct net_device *dev, struct iw_request_info *inf return -EINVAL; break; +#endif default: return -EINVAL; @@ -4791,7 +5242,7 @@ static int iw_setchar_getnone(struct net_device *dev, struct iw_request_info *in #endif /* WLAN_FEATURE_VOWIFI */ VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "%s: Received length %d", __func__, wrqu->data.length); - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "%s: Received data %s", __func__, (char*)wrqu->data.pointer); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "%s: Received data %s", __func__, extra); if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) { @@ -4804,11 +5255,11 @@ static int iw_setchar_getnone(struct net_device *dev, struct iw_request_info *in { case WE_WOWL_ADD_PTRN: VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "ADD_PTRN\n"); - hdd_add_wowl_ptrn(pAdapter, (char*)wrqu->data.pointer); + hdd_add_wowl_ptrn(pAdapter, extra); break; case WE_WOWL_DEL_PTRN: VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "DEL_PTRN\n"); - hdd_del_wowl_ptrn(pAdapter, (char*)wrqu->data.pointer); + hdd_del_wowl_ptrn(pAdapter, extra); break; #if defined WLAN_FEATURE_VOWIFI case WE_NEIGHBOR_REPORT_REQUEST: @@ -4823,7 +5274,7 @@ static int iw_setchar_getnone(struct net_device *dev, struct iw_request_info *in if( !neighborReq.no_ssid ) { neighborReq.ssid.length = (wrqu->data.length - 1) > 32 ? 32 : (wrqu->data.length - 1) ; - vos_mem_copy( neighborReq.ssid.ssId, wrqu->data.pointer, neighborReq.ssid.length ); + vos_mem_copy( neighborReq.ssid.ssId, extra, neighborReq.ssid.length ); } callbackInfo.neighborRspCallback = NULL; @@ -4841,10 +5292,10 @@ static int iw_setchar_getnone(struct net_device *dev, struct iw_request_info *in #endif case WE_SET_AP_WPS_IE: hddLog( LOGE, "Received WE_SET_AP_WPS_IE" ); - sme_updateP2pIe( WLAN_HDD_GET_HAL_CTX(pAdapter), wrqu->data.pointer, wrqu->data.length ); + sme_updateP2pIe( WLAN_HDD_GET_HAL_CTX(pAdapter), extra, wrqu->data.length ); break; case WE_SET_CONFIG: - vstatus = hdd_execute_config_command(pHddCtx, wrqu->data.pointer); + vstatus = hdd_execute_config_command(pHddCtx, extra); if (VOS_STATUS_SUCCESS != vstatus) { ret = -EINVAL; @@ -4885,9 +5336,8 @@ static int iw_setnone_getint(struct net_device *dev, struct iw_request_info *inf case WE_GET_11D_STATE: { tSmeConfigParams smeConfig; - sme_GetConfigParam(hHal,&smeConfig); - + *value = smeConfig.csrConfig.Is11dSupportEnabled; VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, ("11D state=%ld!!\n"),*value); @@ -5218,6 +5668,7 @@ int iw_set_three_ints_getnone(struct net_device *dev, struct iw_request_info *in break; } + default: { hddLog(LOGE, "Invalid IOCTL command %d", sub_cmd); @@ -5236,6 +5687,14 @@ static int iw_get_char_setnone(struct net_device *dev, struct iw_request_info *i hdd_wext_state_t *pWextState = WLAN_HDD_GET_WEXT_STATE_PTR(pAdapter); #endif + if (NULL == WLAN_HDD_GET_CTX(pAdapter)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: HDD Context is NULL!", __func__); + + return -EINVAL; + } + if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) { VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, @@ -5347,6 +5806,134 @@ static int iw_get_char_setnone(struct net_device *dev, struct iw_request_info *i break; } +/* The case prints the current state of the HDD, SME, CSR, PE, TL + *it can be extended for WDI Global State as well. + *And currently it only checks P2P_CLIENT adapter. + *P2P_DEVICE and P2P_GO have not been added as of now. +*/ + case WE_GET_STATES: + { + int buf = 0, len = 0; + int adapter_num = 0; + int count = 0, check = 1; + + tANI_U16 tlState; + tHalHandle hHal; + tpAniSirGlobal pMac; + hdd_station_ctx_t *pHddStaCtx; + + hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX( pAdapter ); + hdd_adapter_t *useAdapter = NULL; + + /* Print wlan0 or p2p0 states based on the adapter_num + *by using the correct adapter + */ + while ( adapter_num < 2 ) + { + if ( WLAN_ADAPTER == adapter_num ) + { + useAdapter = pAdapter; + buf = scnprintf(extra + len, WE_MAX_STR_LEN - len, + "\n\n wlan0 States:-"); + len += buf; + } + else if ( P2P_ADAPTER == adapter_num ) + { + buf = scnprintf(extra + len, WE_MAX_STR_LEN - len, + "\n\n p2p0 States:-"); + len += buf; + + if( !pHddCtx ) + { + buf = scnprintf(extra + len, WE_MAX_STR_LEN - len, + "\n pHddCtx is NULL"); + len += buf; + break; + } + + /*Printing p2p0 states only in the case when the device is + configured as a p2p_client*/ + useAdapter = hdd_get_adapter(pHddCtx, WLAN_HDD_P2P_CLIENT); + if ( !useAdapter ) + { + buf = scnprintf(extra + len, WE_MAX_STR_LEN - len, + "\n Device not configured as P2P_CLIENT."); + len += buf; + break; + } + } + + hHal = WLAN_HDD_GET_HAL_CTX( useAdapter ); + pMac = PMAC_STRUCT( hHal ); + pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR( useAdapter ); + if( !pHddStaCtx ) + { + buf = scnprintf(extra + len, WE_MAX_STR_LEN - len, + "\n pHddStaCtx is NULL"); + len += buf; + break; + } + + tlState = smeGetTLSTAState(hHal, pHddStaCtx->conn_info.staId[0]); + + buf = scnprintf(extra + len, WE_MAX_STR_LEN - len, + "\n HDD Conn State - %s " + "\n \n SME State:" + "\n Neighbour Roam State - %s" + "\n CSR State - %s" + "\n CSR Substate - %s" + "\n \n TL STA %d State: %s", + macTraceGetHDDWlanConnState( + pHddStaCtx->conn_info.connState), + macTraceGetNeighbourRoamState( + pMac->roam.neighborRoamInfo.neighborRoamState), + macTraceGetcsrRoamState( + pMac->roam.curState[useAdapter->sessionId]), + macTraceGetcsrRoamSubState( + pMac->roam.curSubState[useAdapter->sessionId]), + pHddStaCtx->conn_info.staId[0], + macTraceGetTLState(tlState) + ); + len += buf; + adapter_num++; + } + + /* Printing Lim State starting with global lim states */ + buf = scnprintf(extra + len, WE_MAX_STR_LEN - len, + "\n \n LIM STATES:-" + "\n Global Sme State - %s "\ + "\n Global mlm State - %s "\ + "\n", + macTraceGetLimSmeState(pMac->lim.gLimSmeState), + macTraceGetLimMlmState(pMac->lim.gLimMlmState) + ); + len += buf; + + /*printing the PE Sme and Mlm states for valid lim sessions*/ + while ( check < 3 && count < 255) + { + if ( pMac->lim.gpSession[count].valid ) + { + buf = scnprintf(extra + len, WE_MAX_STR_LEN - len, + "\n Lim Valid Session %d:-" + "\n PE Sme State - %s " + "\n PE Mlm State - %s " + "\n", + check, + macTraceGetLimSmeState(pMac->lim.gpSession[count].limSmeState), + macTraceGetLimMlmState(pMac->lim.gpSession[count].limMlmState) + ); + + len += buf; + check++; + } + count++; + } + + wrqu->data.length = strlen(extra)+1; + break; + } + case WE_GET_CFG: { hdd_cfg_get_config(WLAN_HDD_GET_CTX(pAdapter), extra, WE_MAX_STR_LEN); @@ -5363,7 +5950,7 @@ static int iw_get_char_setnone(struct net_device *dev, struct iw_request_info *i break; } #endif - + #if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR) case WE_GET_ROAM_RSSI: { @@ -5408,6 +5995,7 @@ static int iw_get_char_setnone(struct net_device *dev, struct iw_request_info *i VOS_STATUS status; v_U8_t i, len; char* buf ; + tChannelListInfo channel_list; status = iw_softap_get_channel_list(dev, info, wrqu, (char *)&channel_list); @@ -5419,22 +6007,23 @@ static int iw_get_char_setnone(struct net_device *dev, struct iw_request_info *i buf = extra; /** - * Maximum channels = WNI_CFG_VALID_CHANNEL_LIST_LEN. Maximum buffer - * needed = 5 * number of channels. Check if sufficient buffer is available and - * then proceed to fill the buffer. - */ + * Maximum channels = WNI_CFG_VALID_CHANNEL_LIST_LEN. Maximum buffer + * needed = 5 * number of channels. Check ifsufficient + * buffer is available and then proceed to fill the buffer. + */ if(WE_MAX_STR_LEN < (5 * WNI_CFG_VALID_CHANNEL_LIST_LEN)) { - hddLog(VOS_TRACE_LEVEL_ERROR, "%s Insufficient Buffer to populate channel list\n",__func__); + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s Insufficient Buffer to populate channel list\n", + __func__); return -EINVAL; } - len = snprintf(buf, 5, "%u ", channel_list.num_channels); - buf += len; + len = scnprintf(buf, WE_MAX_STR_LEN, "%u ", + channel_list.num_channels); for(i = 0 ; i < channel_list.num_channels; i++) { - len = snprintf(buf, 5, + len += scnprintf(buf + len, WE_MAX_STR_LEN - len, "%u ", channel_list.channels[i]); - buf += len; } wrqu->data.length = strlen(extra)+1; @@ -5466,6 +6055,37 @@ static int iw_get_char_setnone(struct net_device *dev, struct iw_request_info *i break; } #endif +#ifdef FEATURE_CESIUM_PROPRIETARY + case WE_GET_IBSS_STA_INFO: + { + hdd_station_ctx_t *pHddStaCtx = + WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); + int idx = 0; + int length = 0, buf = 0; + + for (idx = 0; idx < HDD_MAX_NUM_IBSS_STA; idx++) + { + if (0 != pHddStaCtx->conn_info.staId[ idx ]) + { + buf = snprintf + ( + (extra + length), WE_MAX_STR_LEN - length, + "\n%d .%02x:%02x:%02x:%02x:%02x:%02x\n", + pHddStaCtx->conn_info.staId[ idx ], + pHddStaCtx->conn_info.peerMacAddress[idx].bytes[0], + pHddStaCtx->conn_info.peerMacAddress[idx].bytes[1], + pHddStaCtx->conn_info.peerMacAddress[idx].bytes[2], + pHddStaCtx->conn_info.peerMacAddress[idx].bytes[3], + pHddStaCtx->conn_info.peerMacAddress[idx].bytes[4], + pHddStaCtx->conn_info.peerMacAddress[idx].bytes[5] + ); + length += buf; + } + } + wrqu->data.length = strlen(extra)+1; + break; + } +#endif #ifdef QCA_WIFI_2_0 case WE_GET_PHYMODE: { @@ -5557,7 +6177,7 @@ static int iw_get_char_setnone(struct net_device *dev, struct iw_request_info *i break; } #endif - default: + default: { hddLog(LOGE, "Invalid IOCTL command %d", sub_cmd); break; @@ -5598,6 +6218,13 @@ static int iw_setnone_getnone(struct net_device *dev, struct iw_request_info *in wlan_hdd_get_intf_addr( WLAN_HDD_GET_CTX(pAdapter) ),TRUE); break; } +#ifdef FEATURE_CESIUM_PROPRIETARY + case WE_IBSS_GET_PEER_INFO_ALL: + { + hdd_wlan_get_ibss_peer_info_all(pAdapter); + break; + } +#endif case WE_STOP_AP: { /*FIX ME: Need to be revisited if multiple SAPs to be supported */ @@ -5611,6 +6238,12 @@ static int iw_setnone_getnone(struct net_device *dev, struct iw_request_info *in pr_info("Stopping AP mode\n"); + if (TRUE == sme_IsPmcBmps(WLAN_HDD_GET_HAL_CTX(pAdapter))) + { + /* EXIT BMPS as fw cannot handle DEL_STA when its in BMPS */ + wlan_hdd_enter_bmps(pAdapter, DRIVER_POWER_MODE_ACTIVE); + } + /*Make sure that pAdapter cleaned properly*/ hdd_stop_adapter( pHddCtx, pAdapter_to_stop ); hdd_deinit_adapter( pHddCtx, pAdapter_to_stop ); @@ -5620,6 +6253,12 @@ static int iw_setnone_getnone(struct net_device *dev, struct iw_request_info *in pAdapter_to_stop->macAddressCurrent.bytes); hdd_close_adapter(WLAN_HDD_GET_CTX(pAdapter), pAdapter_to_stop, TRUE); + + if (FALSE == sme_IsPmcBmps(WLAN_HDD_GET_HAL_CTX(pAdapter))) + { + /* put the device back into BMPS */ + wlan_hdd_enter_bmps(pAdapter, DRIVER_POWER_MODE_AUTO); + } } else { @@ -5756,6 +6395,13 @@ static int iw_setnone_getnone(struct net_device *dev, struct iw_request_info *in sme_transportDebug(hHal, VOS_TRUE, VOS_FALSE); break; } + case WE_DISPLAY_DATAPATH_SNAP_SHOT: + { + hddLog(LOGE, "%s: called %d",__func__, sub_cmd); + hdd_wmm_tx_snapshot(pAdapter); + WLANTL_TLDebugMessage(VOS_TRUE); + break; + } case WE_SET_REASSOC_TRIGGER: { hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); @@ -5766,6 +6412,7 @@ static int iw_setnone_getnone(struct net_device *dev, struct iw_request_info *in sme_RoamReassoc(pMac, pAdapter->sessionId, NULL, modProfileFields, &roamId, 1); return 0; } + #ifdef QCA_WIFI_2_0 case WE_DUMP_AGC_START: { @@ -5829,13 +6476,49 @@ static int iw_setnone_getnone(struct net_device *dev, struct iw_request_info *in return ret; } +void hdd_wmm_tx_snapshot(hdd_adapter_t *pAdapter) +{ + /* + * Function to display HDD WMM information + * for Tx Queues. + * Prints globala as well as per client depending + * whether the clients are registered or not. + */ + int i = 0, j = 0; + for ( i=0; i< NUM_TX_QUEUES; i++) + { + spin_lock_bh(&pAdapter->wmm_tx_queue[i].lock); + hddLog(LOGE, "HDD WMM TxQueue Info For AC: %d Count: %d PrevAdress:0x%x, NextAddress:0x%x", + i, pAdapter->wmm_tx_queue[i].count, + pAdapter->wmm_tx_queue[i].anchor.prev, pAdapter->wmm_tx_queue[i].anchor.next); + spin_unlock_bh(&pAdapter->wmm_tx_queue[i].lock); + } + + for(i =0; iaStaInfo[i].isUsed) + { + hddLog(LOGE, "******STAIndex: %d*********", i); + for ( j=0; j< NUM_TX_QUEUES; j++) + { + spin_lock_bh(&pAdapter->aStaInfo[i].wmm_tx_queue[j].lock); + hddLog(LOGE, "HDD TxQueue Info For AC: %d Count: %d PrevAdress:0x%x, NextAddress:0x%x", + j, pAdapter->aStaInfo[i].wmm_tx_queue[j].count, + pAdapter->aStaInfo[i].wmm_tx_queue[j].anchor.prev, + pAdapter->aStaInfo[i].wmm_tx_queue[j].anchor.next); + spin_unlock_bh(&pAdapter->aStaInfo[i].wmm_tx_queue[j].lock); + } + } + } + +} int iw_set_var_ints_getnone(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra) { hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(pAdapter); int sub_cmd = wrqu->data.flags; - int *value = (int*)wrqu->data.pointer; + int *value = (int*)extra; int apps_args[MAX_VAR_ARGS] = {0}; int num_args = wrqu->data.length; hdd_station_ctx_t *pStaCtx = NULL ; @@ -5893,6 +6576,14 @@ int iw_set_var_ints_getnone(struct net_device *dev, struct iw_request_info *info } break; +#ifdef FEATURE_CESIUM_PROPRIETARY + case WE_IBSS_GET_PEER_INFO: + { + pr_info ( "Station ID = %d\n",apps_args[0]); + hdd_wlan_get_ibss_peer_info(pAdapter, apps_args[0]); + } + break; +#endif case WE_P2P_NOA_CMD: { @@ -6056,6 +6747,8 @@ static int iw_add_tspec(struct net_device *dev, struct iw_request_info *info, return 0; } + tSpec.ts_info.psb = params[HDD_WLAN_WMM_PARAM_APSD]; + // validate the user priority if (params[HDD_WLAN_WMM_PARAM_USER_PRIORITY] >= SME_QOS_WMM_UP_MAX) { @@ -6064,6 +6757,15 @@ static int iw_add_tspec(struct net_device *dev, struct iw_request_info *info, return 0; } tSpec.ts_info.up = params[HDD_WLAN_WMM_PARAM_USER_PRIORITY]; + if(0 > tSpec.ts_info.up || SME_QOS_WMM_UP_MAX < tSpec.ts_info.up) + { + hddLog(VOS_TRACE_LEVEL_ERROR,"***ts_info.up out of bounds***"); + return 0; + } + + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, + "%s:TS_INFO PSB %d UP %d !!!", __func__, + tSpec.ts_info.psb, tSpec.ts_info.up); tSpec.nominal_msdu_size = params[HDD_WLAN_WMM_PARAM_NOMINAL_MSDU_SIZE]; tSpec.maximum_msdu_size = params[HDD_WLAN_WMM_PARAM_MAXIMUM_MSDU_SIZE]; @@ -6186,10 +6888,10 @@ static int iw_qcom_set_wapi_mode(struct net_device *dev, struct iw_request_info hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); tCsrRoamProfile *pRoamProfile = &pWextState->roamProfile; - WAPI_FUNCTION_MODE *pWapiMode = (WAPI_FUNCTION_MODE *)wrqu->data.pointer; + WAPI_FUNCTION_MODE *pWapiMode = (WAPI_FUNCTION_MODE *)extra; hddLog(LOG1, "The function iw_qcom_set_wapi_mode called"); - hddLog(LOG1, "%s: Received data %s", __func__, (char*)wrqu->data.pointer); + hddLog(LOG1, "%s: Received data %s", __func__, extra); hddLog(LOG1, "%s: Received length %d", __func__, wrqu->data.length); hddLog(LOG1, "%s: Input Data (wreq) WAPI Mode:%02d", __func__, pWapiMode->wapiMode); @@ -6252,7 +6954,6 @@ static int iw_qcom_set_wapi_assoc_info(struct net_device *dev, struct iw_request int i = 0, j = 0; hddLog(LOG1, "The function iw_qcom_set_wapi_assoc_info called"); hddLog(LOG1, "%s: Received length %d", __func__, wrqu->data.length); - hddLog(LOG1, "%s: Received data %s", __func__, (char*)wrqu->data.pointer); hddLog(LOG1, "%s: Received data %s", __func__, (char*)extra); if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) @@ -6318,7 +7019,6 @@ static int iw_qcom_set_wapi_key(struct net_device *dev, struct iw_request_info * hddLog(LOG1, "The function iw_qcom_set_wapi_key called "); hddLog(LOG1, "%s: Received length %d", __func__, wrqu->data.length); - hddLog(LOG1, "%s: Received data %s", __func__, (char*)wrqu->data.pointer); hddLog(LOG1, "%s: Received data %s", __func__, (char*)extra); hddLog(LOG1,":%s: INPUT DATA:\nKey Type:0x%02x Key Direction:0x%02x KEY ID:0x%02x\n", __func__, pWapiKey->keyType, pWapiKey->keyDirection, pWapiKey->keyId); @@ -6419,12 +7119,11 @@ static int iw_qcom_set_wapi_bkid(struct net_device *dev, struct iw_request_info hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); #ifdef WLAN_DEBUG int i = 0; - WLAN_BKID_LIST *pBkid = ( WLAN_BKID_LIST *) (wrqu->data.pointer); + WLAN_BKID_LIST *pBkid = ( WLAN_BKID_LIST *) extra; #endif hddLog(LOG1, "The function iw_qcom_set_wapi_bkid called"); hddLog(LOG1, "%s: Received length %d", __func__, wrqu->data.length); - hddLog(LOG1, "%s: Received data %s", __func__, (char*)wrqu->data.pointer); hddLog(LOG1, "%s: Received data %s", __func__, (char*)extra); hddLog(LOG1,"%s: INPUT DATA:\n BKID Length:0x%08lx\n", __func__,pBkid->length); @@ -6501,7 +7200,7 @@ static int iw_set_fties(struct net_device *dev, struct iw_request_info *info, #endif // Pass the received FT IEs to SME - sme_SetFTIEs( WLAN_HDD_GET_HAL_CTX(pAdapter), pAdapter->sessionId, wrqu->data.pointer, + sme_SetFTIEs( WLAN_HDD_GET_HAL_CTX(pAdapter), pAdapter->sessionId, extra, wrqu->data.length); return 0; @@ -6513,7 +7212,7 @@ static int iw_set_dynamic_mcbc_filter(struct net_device *dev, union iwreq_data *wrqu, char *extra) { hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); - tpRcvFltMcAddrList pRequest = (tpRcvFltMcAddrList)wrqu->data.pointer; + tpRcvFltMcAddrList pRequest = (tpRcvFltMcAddrList)extra; hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); tpSirWlanSetRxpFilters wlanRxpFilterParam; tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(pAdapter); @@ -6527,7 +7226,6 @@ static int iw_set_dynamic_mcbc_filter(struct net_device *dev, "%s:LOGP in Progress. Ignore!!!", __func__); return -EBUSY; } - if ((HDD_MULTICAST_FILTER_LIST == pRequest->mcastBcastFilterSetting) || (HDD_MULTICAST_FILTER_LIST_CLEAR == pRequest->mcastBcastFilterSetting)) { @@ -6666,7 +7364,6 @@ static int iw_clear_dynamic_mcbc_filter(struct net_device *dev, return -EINVAL; } } - return 0; } @@ -6674,7 +7371,7 @@ static int iw_set_host_offload(struct net_device *dev, struct iw_request_info *i union iwreq_data *wrqu, char *extra) { hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); - tpHostOffloadRequest pRequest = (tpHostOffloadRequest)wrqu->data.pointer; + tpHostOffloadRequest pRequest = (tpHostOffloadRequest) extra; tSirHostOffloadReq offloadRequest; if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) @@ -6746,7 +7443,7 @@ static int iw_set_keepalive_params(struct net_device *dev, struct iw_request_inf union iwreq_data *wrqu, char *extra) { hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); - tpKeepAliveRequest pRequest = (tpKeepAliveRequest)wrqu->data.pointer; + tpKeepAliveRequest pRequest = (tpKeepAliveRequest) extra; tSirKeepAliveReq keepaliveRequest; if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) @@ -6757,8 +7454,9 @@ static int iw_set_keepalive_params(struct net_device *dev, struct iw_request_inf } /* Debug display of request components. */ - hddLog(VOS_TRACE_LEVEL_INFO, "%s: Set Keep Alive Request : TimePeriod %d size %d", - __func__,pRequest->timePeriod, sizeof(tKeepAliveRequest)); + hddLog(VOS_TRACE_LEVEL_INFO, + "%s: Set Keep Alive Request : TimePeriod %d size %zu", + __func__, pRequest->timePeriod, sizeof(tKeepAliveRequest)); switch (pRequest->packetType) { @@ -6905,47 +7603,278 @@ int wlan_hdd_set_filter(hdd_context_t *pHddCtx, tpPacketFilterCfg pRequest, return 0; } +int wlan_hdd_setIPv6Filter(hdd_context_t *pHddCtx, tANI_U8 filterType, + tANI_U8 sessionId) +{ + tSirRcvPktFilterCfgType packetFilterSetReq = {0}; + tSirRcvFltPktClearParam packetFilterClrReq = {0}; + + if (NULL == pHddCtx) + { + hddLog(VOS_TRACE_LEVEL_ERROR, FL(" NULL HDD Context Passed")); + return -EINVAL; + } + + if (pHddCtx->isLogpInProgress) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:LOGP in Progress. Ignore!!!", __func__); + return -EBUSY; + } + + if (pHddCtx->cfg_ini->disablePacketFilter) + { + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s: Packet Filtering Disabled. Returning ", + __func__ ); + return -EINVAL; + } + + switch (filterType) + { + /* For setting IPV6 MC and UC Filter we need to configure + * 2 filters, one for MC and one for UC. + * The Filter ID shouldn't be swapped, which results in making + * UC Filter ineffective. + * We have Hardcode all the values + * + * Reason for a seperate UC filter is because, driver need to + * specify the FW that the specific filter is for unicast + * otherwise FW will not pass the unicast frames by default + * through the filter. This is required to avoid any performance + * hits when no unicast filter is set and only MC/BC are set. + * The way driver informs host is by using the MAC protocol + * layer, CMP flag set to MAX, CMP Data set to 1. + */ + + case HDD_FILTER_IPV6_MC_UC: + /* Setting IPV6 MC Filter below + */ + packetFilterSetReq.filterType = HDD_RCV_FILTER_SET; + packetFilterSetReq.filterId = HDD_FILTER_ID_IPV6_MC; + packetFilterSetReq.numFieldParams = 2; + packetFilterSetReq.paramsData[0].protocolLayer = + HDD_FILTER_PROTO_TYPE_MAC; + packetFilterSetReq.paramsData[0].cmpFlag = + HDD_FILTER_CMP_TYPE_NOT_EQUAL; + packetFilterSetReq.paramsData[0].dataOffset = + WLAN_HDD_80211_FRM_DA_OFFSET; + packetFilterSetReq.paramsData[0].dataLength = 1; + packetFilterSetReq.paramsData[0].compareData[0] = + HDD_IPV6_MC_CMP_DATA; + + packetFilterSetReq.paramsData[1].protocolLayer = + HDD_FILTER_PROTO_TYPE_ARP; + packetFilterSetReq.paramsData[1].cmpFlag = + HDD_FILTER_CMP_TYPE_NOT_EQUAL; + packetFilterSetReq.paramsData[1].dataOffset = ETH_ALEN; + packetFilterSetReq.paramsData[1].dataLength = 2; + packetFilterSetReq.paramsData[1].compareData[0] = + HDD_IPV6_CMP_DATA_0; + packetFilterSetReq.paramsData[1].compareData[1] = + HDD_IPV6_CMP_DATA_1; + + + if (eHAL_STATUS_SUCCESS != sme_ReceiveFilterSetFilter(pHddCtx->hHal, + &packetFilterSetReq, sessionId)) + { + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s: Failure to execute Set IPv6 Mulicast Filter", + __func__); + return -EINVAL; + } + + memset( &packetFilterSetReq, 0, sizeof(tSirRcvPktFilterCfgType)); + + /* + * Setting IPV6 UC Filter below + */ + packetFilterSetReq.filterType = HDD_RCV_FILTER_SET; + packetFilterSetReq.filterId = HDD_FILTER_ID_IPV6_UC; + packetFilterSetReq.numFieldParams = 2; + packetFilterSetReq.paramsData[0].protocolLayer = + HDD_FILTER_PROTO_TYPE_MAC; + packetFilterSetReq.paramsData[0].cmpFlag = + HDD_FILTER_CMP_TYPE_MAX; + packetFilterSetReq.paramsData[0].dataOffset = 0; + packetFilterSetReq.paramsData[0].dataLength = 1; + packetFilterSetReq.paramsData[0].compareData[0] = + HDD_IPV6_UC_CMP_DATA; + + packetFilterSetReq.paramsData[1].protocolLayer = + HDD_FILTER_PROTO_TYPE_ARP; + packetFilterSetReq.paramsData[1].cmpFlag = + HDD_FILTER_CMP_TYPE_NOT_EQUAL; + packetFilterSetReq.paramsData[1].dataOffset = ETH_ALEN; + packetFilterSetReq.paramsData[1].dataLength = 2; + packetFilterSetReq.paramsData[1].compareData[0] = + HDD_IPV6_CMP_DATA_0; + packetFilterSetReq.paramsData[1].compareData[1] = + HDD_IPV6_CMP_DATA_1; + + if (eHAL_STATUS_SUCCESS != sme_ReceiveFilterSetFilter(pHddCtx->hHal, + &packetFilterSetReq, sessionId)) + { + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s: Failure to execute Set IPv6 Unicast Filter", + __func__); + return -EINVAL; + } + + break; + + case HDD_FILTER_IPV6_MC: + /* + * IPV6 UC Filter might be already set, + * clear the UC Filter. As the Filter + * IDs are static, we can directly clear it. + */ + packetFilterSetReq.filterType = HDD_RCV_FILTER_SET; + packetFilterClrReq.filterId = HDD_FILTER_ID_IPV6_UC; + if (eHAL_STATUS_SUCCESS != sme_ReceiveFilterClearFilter(pHddCtx->hHal, + &packetFilterClrReq, sessionId)) + { + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s: Failure to execute Clear IPv6 Unicast Filter", + __func__); + return -EINVAL; + } + + /* + * Setting IPV6 MC Filter below + */ + packetFilterSetReq.filterId = HDD_FILTER_ID_IPV6_MC; + packetFilterSetReq.numFieldParams = 2; + packetFilterSetReq.paramsData[0].protocolLayer = + HDD_FILTER_PROTO_TYPE_MAC; + packetFilterSetReq.paramsData[0].cmpFlag = + HDD_FILTER_CMP_TYPE_NOT_EQUAL; + packetFilterSetReq.paramsData[0].dataOffset = + WLAN_HDD_80211_FRM_DA_OFFSET; + packetFilterSetReq.paramsData[0].dataLength = 1; + packetFilterSetReq.paramsData[0].compareData[0] = + HDD_IPV6_MC_CMP_DATA; + + packetFilterSetReq.paramsData[1].protocolLayer = + HDD_FILTER_PROTO_TYPE_ARP; + packetFilterSetReq.paramsData[1].cmpFlag = + HDD_FILTER_CMP_TYPE_NOT_EQUAL; + packetFilterSetReq.paramsData[1].dataOffset = ETH_ALEN; + packetFilterSetReq.paramsData[1].dataLength = 2; + packetFilterSetReq.paramsData[1].compareData[0] = + HDD_IPV6_CMP_DATA_0; + packetFilterSetReq.paramsData[1].compareData[1] = + HDD_IPV6_CMP_DATA_1; + + + if (eHAL_STATUS_SUCCESS != sme_ReceiveFilterSetFilter(pHddCtx->hHal, + &packetFilterSetReq, sessionId)) + { + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s: Failure to execute Set IPv6 Multicast Filter", + __func__); + return -EINVAL; + } + break; + + default : + hddLog(VOS_TRACE_LEVEL_INFO_HIGH, + "%s: Packet Filter Request: Invalid", + __func__); + return -EINVAL; + } + return 0; +} + void wlan_hdd_set_mc_addr_list(hdd_adapter_t *pAdapter, v_U8_t set) { - v_U8_t filterAction; - tPacketFilterCfg request; v_U8_t i; - hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + tpSirRcvFltMcAddrList pMulticastAddrs = NULL; + tHalHandle hHal = NULL; + hdd_context_t* pHddCtx = (hdd_context_t*)pAdapter->pHddCtx; + + if (NULL == pHddCtx) + { + hddLog(VOS_TRACE_LEVEL_ERROR, FL("HDD CTX is NULL")); + return; + } - filterAction = set ? HDD_RCV_FILTER_SET : HDD_RCV_FILTER_CLEAR; + hHal = pHddCtx->hHal; - /*set mulitcast addr list*/ - for (i = 0; i < pAdapter->mc_addr_list.mc_cnt; i++) + if (NULL == hHal) { - memset(&request, 0, sizeof (tPacketFilterCfg)); - request.filterAction = filterAction; - request.filterId = i; + hddLog(VOS_TRACE_LEVEL_ERROR, FL("HAL Handle is NULL")); + return; + } + + /* Check if INI is enabled or not, other wise just return + */ + if (pHddCtx->cfg_ini->fEnableMCAddrList) + { + pMulticastAddrs = vos_mem_malloc(sizeof(tSirRcvFltMcAddrList)); + if (NULL == pMulticastAddrs) + { + hddLog(VOS_TRACE_LEVEL_ERROR, FL("Could not allocate Memory")); + return; + } + if (set) { - request.numParams = 1; - request.paramsData[0].protocolLayer = HDD_FILTER_PROTO_TYPE_MAC; - request.paramsData[0].cmpFlag = HDD_FILTER_CMP_TYPE_EQUAL; - request.paramsData[0].dataOffset = WLAN_HDD_80211_FRM_DA_OFFSET; - request.paramsData[0].dataLength = ETH_ALEN; - memcpy(&(request.paramsData[0].compareData[0]), - &(pAdapter->mc_addr_list.addr[i][0]), ETH_ALEN); - /*set mulitcast filters*/ - hddLog(VOS_TRACE_LEVEL_INFO, - "%s: %s multicast filter: addr =" - MAC_ADDRESS_STR, - __func__, set ? "setting" : "clearing", - MAC_ADDR_ARRAY(request.paramsData[0].compareData)); - } - wlan_hdd_set_filter(pHddCtx, &request, pAdapter->sessionId); - } - pAdapter->mc_addr_list.isFilterApplied = set ? TRUE : FALSE; + /* Following pre-conditions should be satisfied before wei + * configure the MC address list. + */ + if (((pAdapter->device_mode == WLAN_HDD_INFRA_STATION) || + (pAdapter->device_mode == WLAN_HDD_P2P_CLIENT)) + && pAdapter->mc_addr_list.mc_cnt + && (eConnectionState_Associated == + (WLAN_HDD_GET_STATION_CTX_PTR(pAdapter))->conn_info.connState)) + { + pMulticastAddrs->ulMulticastAddrCnt = + pAdapter->mc_addr_list.mc_cnt; + for (i = 0; i < pAdapter->mc_addr_list.mc_cnt; i++) + { + memcpy(&(pMulticastAddrs->multicastAddr[i][0]), + &(pAdapter->mc_addr_list.addr[i][0]), + sizeof(pAdapter->mc_addr_list.addr[i])); + hddLog(VOS_TRACE_LEVEL_INFO, + "%s: %s multicast filter: addr =" + MAC_ADDRESS_STR, + __func__, set ? "setting" : "clearing", + MAC_ADDR_ARRAY(pMulticastAddrs->multicastAddr[i])); + } + /* Set multicast filter */ + sme_8023MulticastList(hHal, pAdapter->sessionId, + pMulticastAddrs); + } + } + else + { + /* Need to clear only if it was previously configured + */ + if (pAdapter->mc_addr_list.isFilterApplied) + { + pMulticastAddrs->ulMulticastAddrCnt = 0; + sme_8023MulticastList(hHal, pAdapter->sessionId, + pMulticastAddrs); + } + + } + pAdapter->mc_addr_list.isFilterApplied = set ? TRUE : FALSE; + vos_mem_free(pMulticastAddrs); + } + else + { + hddLog(VOS_TRACE_LEVEL_INFO, + FL("gMCAddrListEnable is not enabled in INI")); + } + return; } static int iw_set_packet_filter_params(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra) -{ +{ hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); - tpPacketFilterCfg pRequest = (tpPacketFilterCfg)wrqu->data.pointer; + tpPacketFilterCfg pRequest = (tpPacketFilterCfg) extra; return wlan_hdd_set_filter(WLAN_HDD_GET_CTX(pAdapter), pRequest, pAdapter->sessionId); } @@ -7178,7 +8107,7 @@ VOS_STATUS iw_set_pno(struct net_device *dev, struct iw_request_info *info, VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "PNO data len %d data %s", wrqu->data.length, - (char *)wrqu->data.pointer); + extra); if (wrqu->data.length <= nOffset ) { @@ -7216,9 +8145,14 @@ VOS_STATUS iw_set_pno(struct net_device *dev, struct iw_request_info *info, scan every 5 seconds 2 times, scan every 300 seconds until stopped -----------------------------------------------------------------------*/ - ptr = (char*)(wrqu->data.pointer + nOffset); + ptr = extra + nOffset; - sscanf(ptr,"%hhu%n", &(pnoRequest.enable), &nOffset); + if (1 != sscanf(ptr,"%hhu%n", &(pnoRequest.enable), &nOffset)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "PNO enable input is not valid %s",ptr); + return VOS_STATUS_E_FAILURE; + } if ( 0 == pnoRequest.enable ) { @@ -7231,7 +8165,14 @@ VOS_STATUS iw_set_pno(struct net_device *dev, struct iw_request_info *info, } ptr += nOffset; - sscanf(ptr,"%hhu %n", &(pnoRequest.ucNetworksCount), &nOffset); + + if (1 != sscanf(ptr,"%hhu %n", &(pnoRequest.ucNetworksCount), &nOffset)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "PNO count input not valid %s",ptr); + return VOS_STATUS_E_FAILURE; + + } VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "PNO enable %d networks count %d offset %d", @@ -7255,8 +8196,15 @@ VOS_STATUS iw_set_pno(struct net_device *dev, struct iw_request_info *info, pnoRequest.aNetworks[i].ssId.length = 0; - sscanf(ptr,"%hhu %n", - &(pnoRequest.aNetworks[i].ssId.length), &nOffset); + ucParams = sscanf(ptr,"%hhu %n", + &(pnoRequest.aNetworks[i].ssId.length),&nOffset); + + if (1 != ucParams) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "PNO ssid length input is not valid %s",ptr); + return VOS_STATUS_E_FAILURE; + } if (( 0 == pnoRequest.aNetworks[i].ssId.length ) || ( pnoRequest.aNetworks[i].ssId.length > 32 ) ) @@ -7274,12 +8222,19 @@ VOS_STATUS iw_set_pno(struct net_device *dev, struct iw_request_info *info, pnoRequest.aNetworks[i].ssId.length); ptr += pnoRequest.aNetworks[i].ssId.length; - ucParams = sscanf(ptr,"%lu %lu %hhu %n", + ucParams = sscanf(ptr,"%u %u %hhu %n", &(pnoRequest.aNetworks[i].authentication), &(pnoRequest.aNetworks[i].encryption), &(pnoRequest.aNetworks[i].ucChannelCount), &nOffset); + if ( 3 != ucParams ) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, + "Incorrect cmd %s",ptr); + return VOS_STATUS_E_FAILURE; + } + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "PNO len %d ssid 0x%08lx%08lx%08lx%08lx%08lx%08lx%08lx%08lx" "auth %d encry %d channel count %d offset %d", @@ -7297,17 +8252,10 @@ VOS_STATUS iw_set_pno(struct net_device *dev, struct iw_request_info *info, pnoRequest.aNetworks[i].ucChannelCount, nOffset ); - if ( 3 != ucParams ) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, - "Incorrect cmd"); - return VOS_STATUS_E_FAILURE; - } - /*Advance to channel list*/ ptr += nOffset; - if ( SIR_PNO_MAX_NETW_CHANNELS < pnoRequest.aNetworks[i].ucChannelCount ) + if (SIR_PNO_MAX_NETW_CHANNELS < pnoRequest.aNetworks[i].ucChannelCount) { VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, "Incorrect number of channels"); @@ -7318,15 +8266,26 @@ VOS_STATUS iw_set_pno(struct net_device *dev, struct iw_request_info *info, { for ( j = 0; j < pnoRequest.aNetworks[i].ucChannelCount; j++) { - sscanf(ptr,"%hhu %n", - &(pnoRequest.aNetworks[i].aChannels[j]), &nOffset); - /*Advance to next channel number*/ - ptr += nOffset; + if (1 != sscanf(ptr,"%hhu %n", + &(pnoRequest.aNetworks[i].aChannels[j]), + &nOffset)) + { VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "PNO network channel input is not valid %s",ptr); + return VOS_STATUS_E_FAILURE; + } + /*Advance to next channel number*/ + ptr += nOffset; } } - sscanf(ptr,"%lu %n", - &(pnoRequest.aNetworks[i].bcastNetwType), &nOffset); + if (1 != sscanf(ptr,"%u %n", + &(pnoRequest.aNetworks[i].bcastNetwType), + &nOffset)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "PNO broadcast network type input is not valid %s",ptr); + return VOS_STATUS_E_FAILURE; + } VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "PNO bcastNetwType %d offset %d", @@ -7336,8 +8295,14 @@ VOS_STATUS iw_set_pno(struct net_device *dev, struct iw_request_info *info, /*Advance to rssi Threshold*/ ptr += nOffset; - sscanf(ptr,"%ld %n", - &(pnoRequest.aNetworks[i].rssiThreshold), &nOffset); + if (1 != sscanf(ptr,"%d %n", + &(pnoRequest.aNetworks[i].rssiThreshold), + &nOffset)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "PNO rssi threshold input is not valid %s",ptr); + return VOS_STATUS_E_FAILURE; + } VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "PNO rssi %d offset %d", @@ -7348,7 +8313,8 @@ VOS_STATUS iw_set_pno(struct net_device *dev, struct iw_request_info *info, }/*For ucNetworkCount*/ ucParams = sscanf(ptr,"%hhu %n", - &(pnoRequest.scanTimers.ucScanTimersCount), &nOffset); + &(pnoRequest.scanTimers.ucScanTimersCount), + &nOffset); /*Read the scan timers*/ if (( 1 == ucParams ) && ( pnoRequest.scanTimers.ucScanTimersCount > 0 )) @@ -7369,24 +8335,24 @@ VOS_STATUS iw_set_pno(struct net_device *dev, struct iw_request_info *info, for ( i = 0; i < pnoRequest.scanTimers.ucScanTimersCount; i++ ) { - ucParams = sscanf(ptr,"%lu %lu %n", + ucParams = sscanf(ptr,"%u %u %n", &(pnoRequest.scanTimers.aTimerValues[i].uTimerValue), &( pnoRequest.scanTimers.aTimerValues[i].uTimerRepeat), &nOffset); + if (2 != ucParams) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "Incorrect cmd - diff params then expected %d", ucParams); + return VOS_STATUS_E_FAILURE; + } + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "PNO Timer value %d Timer repeat %d offset %d", pnoRequest.scanTimers.aTimerValues[i].uTimerValue, pnoRequest.scanTimers.aTimerValues[i].uTimerRepeat, nOffset ); - if ( 2 != ucParams ) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "Incorrect cmd - diff params then expected %d", ucParams); - return VOS_STATUS_E_FAILURE; - } - ptr += nOffset; } @@ -7403,8 +8369,7 @@ VOS_STATUS iw_set_pno(struct net_device *dev, struct iw_request_info *info, pnoRequest.scanTimers.aTimerValues[0].uTimerRepeat = 0; } - ucParams = sscanf(ptr,"%hhu %n", - &(ucMode), &nOffset); + ucParams = sscanf(ptr,"%hhu %n",&(ucMode), &nOffset); pnoRequest.modePNO = ucMode; /*for LA we just expose suspend option*/ @@ -7427,7 +8392,7 @@ VOS_STATUS iw_set_rssi_filter(struct net_device *dev, struct iw_request_info *in v_U8_t rssiThreshold = 0; v_U8_t nRead; - nRead = sscanf(wrqu->data.pointer + nOffset,"%hhu", + nRead = sscanf(extra + nOffset,"%hhu", &rssiThreshold); if ( 1 != nRead ) @@ -7498,11 +8463,11 @@ int hdd_setBand_helper(struct net_device *dev, tANI_U8* ptr) return -EIO; } - if ( (band == eCSR_BAND_24 && pHddCtx->cfg_ini->nBandCapability==2) || - (band == eCSR_BAND_5G && pHddCtx->cfg_ini->nBandCapability==1) || - (band == eCSR_BAND_ALL && pHddCtx->cfg_ini->nBandCapability!=0)) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + if ( (band == eCSR_BAND_24 && pHddCtx->cfg_ini->nBandCapability==2) || + (band == eCSR_BAND_5G && pHddCtx->cfg_ini->nBandCapability==1) || + (band == eCSR_BAND_ALL && pHddCtx->cfg_ini->nBandCapability!=0)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "%s: band value %u violate INI settings %u", __func__, band, pHddCtx->cfg_ini->nBandCapability); return -EIO; @@ -7557,9 +8522,9 @@ int hdd_setBand_helper(struct net_device *dev, tANI_U8* ptr) &pAdapter->disconnect_comp_var, msecs_to_jiffies(WLAN_WAIT_TIME_DISCONNECT)); - if(lrc <= 0) { + if (lrc <= 0) { - hddLog(VOS_TRACE_LEVEL_ERROR,"%s: %s while while waiting for csrRoamDisconnect ", + hddLog(VOS_TRACE_LEVEL_ERROR,"%s: %s while waiting for csrRoamDisconnect ", __func__, (0 == lrc) ? "Timeout" : "Interrupt"); return (0 == lrc) ? -ETIMEDOUT : -EINTR; @@ -7571,7 +8536,7 @@ int hdd_setBand_helper(struct net_device *dev, tANI_U8* ptr) #if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR) sme_UpdateBgScanConfigIniChannelList(hHal, (eCsrBand) band); #endif - if(eHAL_STATUS_SUCCESS != sme_SetFreqBand(hHal, (eCsrBand)band)) + if (eHAL_STATUS_SUCCESS != sme_SetFreqBand(hHal, (eCsrBand)band)) { VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s: failed to set the band value to %u ", @@ -7588,7 +8553,7 @@ static int iw_set_band_config(struct net_device *dev, union iwreq_data *wrqu, char *extra) { hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); - tANI_U8 *ptr = (tANI_U8*)wrqu->data.pointer; + tANI_U8 *ptr = extra; int ret = 0; VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,"%s: ", __func__); @@ -7635,7 +8600,7 @@ VOS_STATUS iw_set_power_params(struct net_device *dev, struct iw_request_info *i VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "Power Params data len %d data %s", wrqu->data.length, - (char *)wrqu->data.pointer); + extra); if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) { @@ -7677,11 +8642,16 @@ VOS_STATUS iw_set_power_params(struct net_device *dev, struct iw_request_info *i powerRequest.uEnableBET = SIR_NOCHANGE_POWER_VALUE; powerRequest.uBETInterval = SIR_NOCHANGE_POWER_VALUE; - ptr = (char*)(wrqu->data.pointer + nOffset); + ptr = extra + nOffset; while ( uTotalSize ) { - sscanf(ptr,"%hhu %n", &(ucType), &nOffset); + if (1 != sscanf(ptr,"%hhu %n", &(ucType), &nOffset)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "Invalid input parameter type %s",ptr); + return VOS_STATUS_E_FAILURE; + } uTotalSize -= nOffset; @@ -7694,7 +8664,13 @@ VOS_STATUS iw_set_power_params(struct net_device *dev, struct iw_request_info *i } ptr += nOffset; - sscanf(ptr,"%lu %n", &(uValue), &nOffset); + + if (1 != sscanf(ptr,"%u %n", &(uValue), &nOffset)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "Invalid input parameter value %s",ptr); + return VOS_STATUS_E_FAILURE; + } VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "Power request parameter %d value %d offset %d", @@ -7858,7 +8834,9 @@ static const iw_handler we_private[] = { [WLAN_PRIV_CLEAR_MCBC_FILTER - SIOCIWFIRSTPRIV] = iw_clear_dynamic_mcbc_filter, [WLAN_SET_POWER_PARAMS - SIOCIWFIRSTPRIV] = iw_set_power_params_priv, #ifdef FEATURE_OEM_DATA_SUPPORT +#ifdef QCA_WIFI_2_0 [WLAN_PRIV_GET_OEM_DATA_CAP - SIOCIWFIRSTPRIV] = iw_get_oem_data_cap, +#endif #endif [WLAN_GET_LINK_SPEED - SIOCIWFIRSTPRIV] = iw_get_linkspeed, }; @@ -7866,6 +8844,11 @@ static const iw_handler we_private[] = { /*Maximum command length can be only 15 */ static const struct iw_priv_args we_private_args[] = { + { WE_ENABLE_STRICT_FCC_REG, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, + "setStrictFCCreg" }, + /* handlers for main ioctl */ { WLAN_PRIV_SET_INT_GET_NONE, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, @@ -7907,6 +8890,25 @@ static const struct iw_priv_args we_private_args[] = { IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "setMaxTxPower" }, + + { WE_SET_MAX_TX_POWER_2_4, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, + "setTxMaxPower2G" }, + + { WE_SET_MAX_TX_POWER_5_0, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, + "setTxMaxPower5G" }, + + /* SAP has TxMax whereas STA has MaxTx, adding TxMax for STA + * as well to keep same syntax as in SAP. Now onwards, STA + * will support both */ + { WE_SET_MAX_TX_POWER, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, + "setTxMaxPower" }, + /* set Higher DTIM Transition (DTIM1 to DTIM3) * 1 = enable and 0 = disable */ { @@ -8413,6 +9415,10 @@ static const struct iw_priv_args we_private_args[] = { 0, IW_PRIV_TYPE_CHAR| WE_MAX_STR_LEN, "getStats" }, + { WE_GET_STATES, + 0, + IW_PRIV_TYPE_CHAR| WE_MAX_STR_LEN, + "getHostStates" }, { WE_GET_CFG, 0, IW_PRIV_TYPE_CHAR| WE_MAX_STR_LEN, @@ -8435,7 +9441,7 @@ static const struct iw_priv_args we_private_args[] = { "getWmmStatus" }, { WE_GET_CHANNEL_LIST, - 0, + 0, IW_PRIV_TYPE_CHAR| WE_MAX_STR_LEN, "getChannelList" }, #ifdef FEATURE_WLAN_TDLS @@ -8452,12 +9458,20 @@ static const struct iw_priv_args we_private_args[] = { IW_PRIV_TYPE_CHAR| WE_MAX_STR_LEN, "getPMFInfo" }, #endif +#ifdef FEATURE_CESIUM_PROPRIETARY + { + WE_GET_IBSS_STA_INFO, + 0, + IW_PRIV_TYPE_CHAR| WE_MAX_STR_LEN, + "getIbssSTAs" }, +#endif #ifdef QCA_WIFI_2_0 { WE_GET_PHYMODE, 0, IW_PRIV_TYPE_CHAR| WE_MAX_STR_LEN, "getphymode" }, #endif + /* handlers for main ioctl */ { WLAN_PRIV_SET_NONE_GET_NONE, 0, @@ -8473,6 +9487,13 @@ static const struct iw_priv_args we_private_args[] = { 0, 0, "initAP" }, +#ifdef FEATURE_CESIUM_PROPRIETARY + { + WE_IBSS_GET_PEER_INFO_ALL, + 0, + 0, + "ibssPeerInfoAll" }, +#endif { WE_STOP_AP, 0, 0, @@ -8493,6 +9514,10 @@ static const struct iw_priv_args we_private_args[] = { 0, 0, "dxeSnapshot" }, + { WE_DISPLAY_DATAPATH_SNAP_SHOT, + 0, + 0, + "dataSnapshot"}, { WE_SET_REASSOC_TRIGGER, 0, @@ -8541,7 +9566,12 @@ static const struct iw_priv_args we_private_args[] = { IW_PRIV_TYPE_INT | MAX_VAR_ARGS, 0, "dump" }, - +#ifdef FEATURE_CESIUM_PROPRIETARY + { WE_IBSS_GET_PEER_INFO, + IW_PRIV_TYPE_INT | MAX_VAR_ARGS, + 0, + "ibssPeerInfo" }, +#endif /* handlers for sub ioctl */ { WE_MCC_CONFIG_CREDENTIAL, @@ -8691,16 +9721,18 @@ static const struct iw_priv_args we_private_args[] = { 0, "setpowerparams" }, #ifdef FEATURE_OEM_DATA_SUPPORT +#ifdef QCA_WIFI_2_0 { WLAN_PRIV_GET_OEM_DATA_CAP, 0, IW_PRIV_TYPE_BYTE | sizeof(struct iw_oem_data_cap), "getOemDataCap" }, +#endif #endif { WLAN_GET_LINK_SPEED, IW_PRIV_TYPE_CHAR | 18, - IW_PRIV_TYPE_CHAR | 3, "getLinkSpeed" }, + IW_PRIV_TYPE_CHAR | 5, "getLinkSpeed" }, }; diff --git a/CORE/HDD/src/wlan_hdd_wmm.c b/CORE/HDD/src/wlan_hdd_wmm.c index 0b0f28d2ca90..b0138f08178c 100644 --- a/CORE/HDD/src/wlan_hdd_wmm.c +++ b/CORE/HDD/src/wlan_hdd_wmm.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /*============================================================================ @file wlan_hdd_wmm.c @@ -86,15 +85,12 @@ #endif -// UAPSD Mask bits -// (Bit0:VO; Bit1:VI; Bit2:BK; Bit3:BE all other bits are ignored) -#define HDD_AC_VO 0x1 -#define HDD_AC_VI 0x2 -#define HDD_AC_BK 0x4 -#define HDD_AC_BE 0x8 - #define WLAN_HDD_MAX_DSCP 0x3f +// DHCP Port number +#define DHCP_SOURCE_PORT 0x4400 +#define DHCP_DESTINATION_PORT 0x4300 + static sme_QosWmmUpType hddWmmDscpToUpMap[WLAN_HDD_MAX_DSCP+1]; const v_U8_t hddWmmUpToAcMap[] = { @@ -139,6 +135,7 @@ static void hdd_wmm_enable_tl_uapsd (hdd_wmm_qos_context_t* pQosContext) v_U32_t service_interval; v_U32_t suspension_interval; sme_QosWmmDirType direction; + v_BOOL_t psb; // The TSPEC must be valid @@ -166,18 +163,20 @@ static void hdd_wmm_enable_tl_uapsd (hdd_wmm_qos_context_t* pQosContext) VOS_TRACE(VOS_MODULE_ID_HDD, WMM_TRACE_LEVEL_INFO, "%s: No service interval supplied", __func__); - return; + service_interval = 0; } // determine the suspension interval & direction suspension_interval = pAc->wmmAcTspecInfo.suspension_interval; direction = pAc->wmmAcTspecInfo.ts_info.direction; + psb = pAc->wmmAcTspecInfo.ts_info.psb; // if we have previously enabled U-APSD, have any params changed? if ((pAc->wmmAcUapsdInfoValid) && (pAc->wmmAcUapsdServiceInterval == service_interval) && (pAc->wmmAcUapsdSuspensionInterval == suspension_interval) && - (pAc->wmmAcUapsdDirection == direction)) + (pAc->wmmAcUapsdDirection == direction) && + (pAc->wmmAcIsUapsdEnabled == psb)) { VOS_TRACE(VOS_MODULE_ID_HDD, WMM_TRACE_LEVEL_INFO, "%s: No change in U-APSD parameters", @@ -210,8 +209,12 @@ static void hdd_wmm_enable_tl_uapsd (hdd_wmm_qos_context_t* pQosContext) pAc->wmmAcTspecInfo.ts_info.up, service_interval, suspension_interval, +#ifdef QCA_WIFI_2_0 direction, pAdapter->sessionId); +#else + direction); +#endif if ( !VOS_IS_STATUS_SUCCESS( status ) ) { @@ -226,6 +229,7 @@ static void hdd_wmm_enable_tl_uapsd (hdd_wmm_qos_context_t* pQosContext) pAc->wmmAcUapsdServiceInterval = service_interval; pAc->wmmAcUapsdSuspensionInterval = suspension_interval; pAc->wmmAcUapsdDirection = direction; + pAc->wmmAcIsUapsdEnabled = psb; VOS_TRACE(VOS_MODULE_ID_HDD, WMM_TRACE_LEVEL_INFO, "%s: Enabled UAPSD in TL srv_int=%ld " @@ -260,8 +264,12 @@ static void hdd_wmm_disable_tl_uapsd (hdd_wmm_qos_context_t* pQosContext) { status = WLANTL_DisableUAPSDForAC((WLAN_HDD_GET_CTX(pAdapter))->pvosContext, (WLAN_HDD_GET_STATION_CTX_PTR(pAdapter))->conn_info.staId[0], +#ifdef QCA_WIFI_2_0 acType, pAdapter->sessionId); +#else + acType); +#endif if ( !VOS_IS_STATUS_SUCCESS( status ) ) { @@ -1223,6 +1231,36 @@ static eHalStatus hdd_wmm_sme_callback (tHalHandle hHal, } #endif +/**======================================================================== + @brief hdd_wmmps_helper() - Function to set uapsd psb dynamically + + @param pAdapter : [in] pointer to adapter structure + + @param ptr : [in] pointer to command buffer + + @return : Zero on success, appropriate error on failure. + =======================================================================*/ +int hdd_wmmps_helper(hdd_adapter_t *pAdapter, tANI_U8 *ptr) +{ + if (NULL == pAdapter) + { + VOS_TRACE(VOS_MODULE_ID_HDD, WMM_TRACE_LEVEL_ERROR, + "%s: pAdapter is NULL", __func__); + return -EINVAL; + } + if (NULL == ptr) + { + VOS_TRACE(VOS_MODULE_ID_HDD, WMM_TRACE_LEVEL_ERROR, + "%s: ptr is NULL", __func__); + return -EINVAL; + } + /* convert ASCII to integer */ + pAdapter->configuredPsb = ptr[9] - '0'; + pAdapter->psbChanged = HDD_PSB_CHANGED; + + return 0; +} + /**============================================================================ @brief hdd_wmm_do_implicit_qos() - Function which will attempt to setup QoS for any AC requiring it @@ -1279,11 +1317,18 @@ static void hdd_wmm_do_implicit_qos(struct work_struct *work) memset(&qosInfo, 0, sizeof(qosInfo)); + qosInfo.ts_info.psb = pAdapter->configuredPsb; + switch (acType) { case WLANTL_AC_VO: qosInfo.ts_info.up = SME_QOS_WMM_UP_VO; - qosInfo.ts_info.psb = (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini->UapsdMask & 0x01; + /* Check if there is any valid configuration from framework */ + if (HDD_PSB_CFG_INVALID == pAdapter->configuredPsb) + { + qosInfo.ts_info.psb = ((WLAN_HDD_GET_CTX(pAdapter))->cfg_ini->UapsdMask & + SME_QOS_UAPSD_VO) ? 1 : 0; + } qosInfo.ts_info.direction = (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini->InfraDirAcVo; qosInfo.ts_info.tid = 255; qosInfo.mean_data_rate = (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini->InfraMeanDataRateAcVo; @@ -1295,7 +1340,12 @@ static void hdd_wmm_do_implicit_qos(struct work_struct *work) break; case WLANTL_AC_VI: qosInfo.ts_info.up = SME_QOS_WMM_UP_VI; - qosInfo.ts_info.psb = (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini->UapsdMask & 0x02; + /* Check if there is any valid configuration from framework */ + if (HDD_PSB_CFG_INVALID == pAdapter->configuredPsb) + { + qosInfo.ts_info.psb = ((WLAN_HDD_GET_CTX(pAdapter))->cfg_ini->UapsdMask & + SME_QOS_UAPSD_VI) ? 1 : 0; + } qosInfo.ts_info.direction = (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini->InfraDirAcVi; qosInfo.ts_info.tid = 255; qosInfo.mean_data_rate = (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini->InfraMeanDataRateAcVi; @@ -1308,7 +1358,12 @@ static void hdd_wmm_do_implicit_qos(struct work_struct *work) default: case WLANTL_AC_BE: qosInfo.ts_info.up = SME_QOS_WMM_UP_BE; - qosInfo.ts_info.psb = (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini->UapsdMask & 0x08; + /* Check if there is any valid configuration from framework */ + if (HDD_PSB_CFG_INVALID == pAdapter->configuredPsb) + { + qosInfo.ts_info.psb = ((WLAN_HDD_GET_CTX(pAdapter))->cfg_ini->UapsdMask & + SME_QOS_UAPSD_BE) ? 1 : 0; + } qosInfo.ts_info.direction = (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini->InfraDirAcBe; qosInfo.ts_info.tid = 255; qosInfo.mean_data_rate = (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini->InfraMeanDataRateAcBe; @@ -1320,7 +1375,12 @@ static void hdd_wmm_do_implicit_qos(struct work_struct *work) break; case WLANTL_AC_BK: qosInfo.ts_info.up = SME_QOS_WMM_UP_BK; - qosInfo.ts_info.psb = (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini->UapsdMask & 0x04; + /* Check if there is any valid configuration from framework */ + if (HDD_PSB_CFG_INVALID == pAdapter->configuredPsb) + { + qosInfo.ts_info.psb = ((WLAN_HDD_GET_CTX(pAdapter))->cfg_ini->UapsdMask & + SME_QOS_UAPSD_BK) ? 1 : 0; + } qosInfo.ts_info.direction = (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini->InfraDirAcBk; qosInfo.ts_info.tid = 255; qosInfo.mean_data_rate = (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini->InfraMeanDataRateAcBk; @@ -1507,9 +1567,43 @@ VOS_STATUS hdd_wmm_adapter_init( hdd_adapter_t *pAdapter ) pAcStatus->wmmAcTspecValid = VOS_FALSE; pAcStatus->wmmAcUapsdInfoValid = VOS_FALSE; } + // Invalid value(0xff) to indicate psb not configured through framework initially. + pAdapter->configuredPsb = HDD_PSB_CFG_INVALID; return VOS_STATUS_SUCCESS; } + +/**============================================================================ + @brief hdd_wmm_adapter_clear() - Function which will clear the WMM status + for all the ACs + + @param pAdapter : [in] pointer to Adapter context + + @return : VOS_STATUS_SUCCESS if succssful + : other values if failure + + ===========================================================================*/ +VOS_STATUS hdd_wmm_adapter_clear( hdd_adapter_t *pAdapter ) +{ + hdd_wmm_ac_status_t *pAcStatus; + WLANTL_ACEnumType acType; + VOS_TRACE(VOS_MODULE_ID_HDD, WMM_TRACE_LEVEL_INFO_LOW, + "%s: Entered", __func__); + for (acType = 0; acType < WLANTL_MAX_AC; acType++) + { + pAcStatus = &pAdapter->hddWmmStatus.wmmAcStatus[acType]; + pAcStatus->wmmAcAccessRequired = VOS_FALSE; + pAcStatus->wmmAcAccessNeeded = VOS_FALSE; + pAcStatus->wmmAcAccessPending = VOS_FALSE; + pAcStatus->wmmAcAccessFailed = VOS_FALSE; + pAcStatus->wmmAcAccessGranted = VOS_FALSE; + pAcStatus->wmmAcAccessAllowed = VOS_FALSE; + pAcStatus->wmmAcTspecValid = VOS_FALSE; + pAcStatus->wmmAcUapsdInfoValid = VOS_FALSE; + } + return VOS_STATUS_SUCCESS; +} + /**============================================================================ @brief hdd_wmm_close() - Function which will perform any necessary work to to clean up the WMM functionality prior to the kernel module unload @@ -1532,13 +1626,11 @@ VOS_STATUS hdd_wmm_adapter_close ( hdd_adapter_t* pAdapter ) { pQosContext = list_first_entry(&pAdapter->hddWmmStatus.wmmContextList, hdd_wmm_qos_context_t, node); -#ifdef WLAN_OPEN_SOURCE - /* cancel all scheduled work queues */ - cancel_work_sync(&pQosContext->wmmAcSetupImplicitQos); -#endif - #ifdef FEATURE_WLAN_CCX hdd_wmm_disable_inactivity_timer(pQosContext); +#endif +#ifdef WLAN_OPEN_SOURCE + cancel_work_sync(&pQosContext->wmmAcSetupImplicitQos); #endif hdd_wmm_free_context(pQosContext); } @@ -1546,6 +1638,23 @@ VOS_STATUS hdd_wmm_adapter_close ( hdd_adapter_t* pAdapter ) return VOS_STATUS_SUCCESS; } +/**============================================================================ + @brief is_dhcp_packet() - Function which will check OS packet for + DHCP packet + + @param skb : [in] pointer to OS packet (sk_buff) + @return : VOS_TRUE if the OS packet is DHCP packet + : otherwise VOS_FALSE + ===========================================================================*/ +v_BOOL_t is_dhcp_packet(struct sk_buff *skb) +{ + if (*((u16*)((u8*)skb->data+34)) == DHCP_SOURCE_PORT || + *((u16*)((u8*)skb->data+34)) == DHCP_DESTINATION_PORT) + return VOS_TRUE; + + return VOS_FALSE; +} + /**============================================================================ @brief hdd_wmm_classify_pkt() - Function which will classify an OS packet into a WMM AC based on either 802.1Q or DSCP @@ -1776,6 +1885,14 @@ v_U16_t hdd_hostapd_select_queue(struct net_device * dev, struct sk_buff *skb) { /* Get the user priority from IP header & corresponding AC */ hdd_wmm_classify_pkt (pAdapter, skb, &ac, &up); + //If 3/4th of Tx queue is used then place the DHCP packet in VOICE AC queue + if (pAdapter->aStaInfo[STAId].vosLowResource && is_dhcp_packet(skb)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, WMM_TRACE_LEVEL_WARN, + "%s: Making priority of DHCP packet as VOICE", __func__); + up = SME_QOS_WMM_UP_VO; + ac = hddWmmUpToAcMap[up]; + } } *pSTAId = STAId; @@ -1828,6 +1945,14 @@ v_U16_t hdd_wmm_select_queue(struct net_device * dev, struct sk_buff *skb) if( hdd_wmm_is_active(pAdapter) ) { /* Get the user priority from IP header & corresponding AC */ hdd_wmm_classify_pkt (pAdapter, skb, &ac, &up); + //If 3/4th of BE AC Tx queue is full, then place the DHCP packet in VOICE AC queue + if (pAdapter->isVosLowResource && is_dhcp_packet(skb)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, WMM_TRACE_LEVEL_WARN, + "%s: Making priority of DHCP packet as VOICE", __func__); + up = SME_QOS_WMM_UP_VO; + ac = hddWmmUpToAcMap[up]; + } } done: skb->priority = up; @@ -1836,6 +1961,45 @@ done: return queueIndex; } +/**========================================================================== + @brief hdd_wmm_acquire_access_required() - Function which will determine + acquire admittance for a WMM AC is required or not based on psb configuration + done in framework + + @param pAdapter : [in] pointer to adapter structure + + @param acType : [in] WMM AC type of OS packet + + @return : void + ===========================================================================*/ +void hdd_wmm_acquire_access_required(hdd_adapter_t *pAdapter, + WLANTL_ACEnumType acType) +{ +/* Each bit in the LSB nibble indicates 1 AC. + * Clearing the particular bit in LSB nibble to indicate + * access required + */ + switch(acType) + { + case WLANTL_AC_BK: + pAdapter->psbChanged &= ~SME_QOS_UAPSD_CFG_BK_CHANGED_MASK; /* clear first bit */ + break; + case WLANTL_AC_BE: + pAdapter->psbChanged &= ~SME_QOS_UAPSD_CFG_BE_CHANGED_MASK; /* clear second bit */ + break; + case WLANTL_AC_VI: + pAdapter->psbChanged &= ~SME_QOS_UAPSD_CFG_VI_CHANGED_MASK; /* clear third bit */ + break; + case WLANTL_AC_VO: + pAdapter->psbChanged &= ~SME_QOS_UAPSD_CFG_VO_CHANGED_MASK; /* clear fourth bit */ + break; + default: + VOS_TRACE(VOS_MODULE_ID_HDD, WMM_TRACE_LEVEL_ERROR, + "%s: Invalid AC Type", __func__); + break; + } +} + /**============================================================================ @brief hdd_wmm_acquire_access() - Function which will attempt to acquire admittance for a WMM AC @@ -1989,8 +2153,12 @@ VOS_STATUS hdd_wmm_assoc( hdd_adapter_t* pAdapter, 7, (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini->InfraUapsdVoSrvIntv, (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini->InfraUapsdVoSuspIntv, +#ifdef QCA_WIFI_2_0 WLANTL_BI_DIR, pAdapter->sessionId); +#else + WLANTL_BI_DIR); +#endif VOS_ASSERT( VOS_IS_STATUS_SUCCESS( status )); } @@ -2004,8 +2172,12 @@ VOS_STATUS hdd_wmm_assoc( hdd_adapter_t* pAdapter, 5, (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini->InfraUapsdViSrvIntv, (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini->InfraUapsdViSuspIntv, +#ifdef QCA_WIFI_2_0 WLANTL_BI_DIR, pAdapter->sessionId); +#else + WLANTL_BI_DIR); +#endif VOS_ASSERT( VOS_IS_STATUS_SUCCESS( status )); } @@ -2019,8 +2191,12 @@ VOS_STATUS hdd_wmm_assoc( hdd_adapter_t* pAdapter, 2, (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini->InfraUapsdBkSrvIntv, (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini->InfraUapsdBkSuspIntv, +#ifdef QCA_WIFI_2_0 WLANTL_BI_DIR, pAdapter->sessionId); +#else + WLANTL_BI_DIR); +#endif VOS_ASSERT( VOS_IS_STATUS_SUCCESS( status )); } @@ -2034,8 +2210,12 @@ VOS_STATUS hdd_wmm_assoc( hdd_adapter_t* pAdapter, 3, (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini->InfraUapsdBeSrvIntv, (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini->InfraUapsdBeSuspIntv, +#ifdef QCA_WIFI_2_0 WLANTL_BI_DIR, pAdapter->sessionId); +#else + WLANTL_BI_DIR); +#endif VOS_ASSERT( VOS_IS_STATUS_SUCCESS( status )); } diff --git a/CORE/HDD/src/wlan_hdd_wowl.c b/CORE/HDD/src/wlan_hdd_wowl.c index b686de67ffe5..d5ea3fb00dd5 100644 --- a/CORE/HDD/src/wlan_hdd_wowl.c +++ b/CORE/HDD/src/wlan_hdd_wowl.c @@ -44,7 +44,6 @@ /*---------------------------------------------------------------------------- * Preprocessor Definitions and Constants * -------------------------------------------------------------------------*/ - #define WOWL_INTER_PTRN_TOKENIZER ';' #define WOWL_INTRA_PTRN_TOKENIZER ':' @@ -52,7 +51,9 @@ * Type Declarations * -------------------------------------------------------------------------*/ -char *g_hdd_wowl_ptrns[WOWL_MAX_PTRNS_ALLOWED]; //Patterns 0-7 +static char *g_hdd_wowl_ptrns[WOWL_MAX_PTRNS_ALLOWED]; //Patterns 0-15 +static v_BOOL_t g_hdd_wowl_ptrns_debugfs[WOWL_MAX_PTRNS_ALLOWED] = {0}; +static v_U8_t g_hdd_wowl_ptrns_count = 0; int hdd_parse_hex(unsigned char c) { @@ -78,9 +79,19 @@ static inline int find_ptrn_len(const char* ptrn) static void hdd_wowl_callback( void *pContext, eHalStatus halStatus ) { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: Return code = (%ld)\n", __func__, halStatus ); + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s: Return code = (%ld)\n", __func__, halStatus ); +} + +#ifdef WLAN_WAKEUP_EVENTS +static void hdd_wowl_wakeIndication_callback( void *pContext, + tpSirWakeReasonInd pWakeReasonInd ) +{ + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "%s: Wake Reason %d", + __func__, pWakeReasonInd->ulReason ); + hdd_exit_wowl((hdd_adapter_t *)pContext); } +#endif static void dump_hdd_wowl_ptrn(tSirWowlAddBcastPtrn *ptrn) { @@ -128,6 +139,21 @@ v_BOOL_t hdd_add_wowl_ptrn (hdd_adapter_t *pAdapter, const char * ptrn) * pattern, mask) e.g. PP:QQ:RR:SS ==> 11 chars */ while ( len >= 11 ) { + // Detect duplicate pattern + for (i=0; icfg_ini->maxWoWFilters; i++) + { + if(g_hdd_wowl_ptrns[i] == NULL) continue; + + if(!memcmp(ptrn, g_hdd_wowl_ptrns[i], len)) + { + // Pattern Already configured, skip to next pattern + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "Trying to add duplicate WoWL pattern. Skip it!"); + ptrn += len; + goto next_ptrn; + } + } + first_empty_slot = -1; // Find an empty slot to store the pattern @@ -147,21 +173,6 @@ v_BOOL_t hdd_add_wowl_ptrn (hdd_adapter_t *pAdapter, const char * ptrn) return VOS_FALSE; } - // Detect duplicate pattern - for (i=0; icfg_ini->maxWoWFilters; i++) - { - if(g_hdd_wowl_ptrns[i] == NULL) continue; - - if(!memcmp(ptrn, g_hdd_wowl_ptrns[i], len)) - { - // Pattern Already configured, skip to next pattern - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "Trying to add duplicate WoWL pattern. Skip it!"); - ptrn += len; - goto next_ptrn; - } - } - //Validate the pattern if(ptrn[2] != WOWL_INTRA_PTRN_TOKENIZER || ptrn[5] != WOWL_INTRA_PTRN_TOKENIZER) @@ -321,6 +332,175 @@ v_BOOL_t hdd_del_wowl_ptrn (hdd_adapter_t *pAdapter, const char * ptrn) return VOS_FALSE; } +/**============================================================================ + @brief hdd_add_wowl_ptrn_debugfs() - Function which will add a WoW pattern + sent from debugfs interface + + @param pAdapter : [in] pointer to the adapter + pattern_idx : [in] index of the pattern to be added + pattern_offset : [in] offset of the pattern in the frame payload + pattern_buf : [in] pointer to the pattern hex string to be added + pattern_mask : [in] pointer to the pattern mask hex string + + @return : FALSE if any errors encountered + : TRUE otherwise + ===========================================================================*/ +v_BOOL_t hdd_add_wowl_ptrn_debugfs(hdd_adapter_t *pAdapter, v_U8_t pattern_idx, + v_U8_t pattern_offset, char *pattern_buf, + char *pattern_mask) +{ + tSirWowlAddBcastPtrn localPattern; + eHalStatus halStatus; + tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(pAdapter); + v_U8_t sessionId = pAdapter->sessionId; + v_U16_t pattern_len, mask_len, i; + + if (pattern_idx > (WOWL_MAX_PTRNS_ALLOWED - 1)) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: WoW pattern index %d is out of range (0 ~ %d).", + __func__, pattern_idx, WOWL_MAX_PTRNS_ALLOWED - 1); + + return VOS_FALSE; + } + + pattern_len = strlen(pattern_buf); + + /* Since the pattern is a hex string, 2 characters represent 1 byte. */ + if (pattern_len % 2) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: Malformed WoW pattern!", __func__); + + return VOS_FALSE; + } + else + pattern_len >>= 1; + + if (!pattern_len || pattern_len > WOWL_PTRN_MAX_SIZE) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: WoW pattern length %d is out of range (1 ~ %d).", + __func__, pattern_len, WOWL_PTRN_MAX_SIZE); + + return VOS_FALSE; + } + + localPattern.ucPatternId = pattern_idx; + localPattern.ucPatternByteOffset = pattern_offset; + localPattern.ucPatternSize = pattern_len; + + /* Extract the pattern */ + for (i = 0; i < localPattern.ucPatternSize; i++) + { + localPattern.ucPattern[i] = + (hdd_parse_hex(pattern_buf[0]) << 4) + hdd_parse_hex(pattern_buf[1]); + + /* Skip to next byte */ + pattern_buf += 2; + } + + /* Get pattern mask size by pattern length */ + localPattern.ucPatternMaskSize = pattern_len >> 3; + if (pattern_len % 8) + localPattern.ucPatternMaskSize += 1; + + mask_len = strlen(pattern_mask); + if ((mask_len % 2) || (localPattern.ucPatternMaskSize != (mask_len >> 1))) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: Malformed WoW pattern mask!", __func__); + + return VOS_FALSE; + } + + /* Extract the pattern mask */ + for (i = 0; i < localPattern.ucPatternMaskSize; i++) + { + localPattern.ucPatternMask[i] = + (hdd_parse_hex(pattern_mask[0]) << 4) + hdd_parse_hex(pattern_mask[1]); + + /* Skip to next byte */ + pattern_mask += 2; + } + + /* Register the pattern downstream */ + halStatus = sme_WowlAddBcastPattern(hHal, &localPattern, sessionId); + + if (!HAL_STATUS_SUCCESS(halStatus)) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: sme_WowlAddBcastPattern failed with error code (%ld).", + __func__, halStatus); + + return VOS_FALSE; + } + + /* All is good. */ + if (!g_hdd_wowl_ptrns_debugfs[pattern_idx]) + { + g_hdd_wowl_ptrns_debugfs[pattern_idx] = 1; + g_hdd_wowl_ptrns_count++; + } + + dump_hdd_wowl_ptrn(&localPattern); + + return VOS_TRUE; +} + +/**============================================================================ + @brief hdd_del_wowl_ptrn_debugfs() - Function which will remove a WoW pattern + sent from debugfs interface + + @param pAdapter : [in] pointer to the adapter + pattern_idx : [in] index of the pattern to be removed + + @return : FALSE if any errors encountered + : TRUE otherwise + ===========================================================================*/ +v_BOOL_t hdd_del_wowl_ptrn_debugfs(hdd_adapter_t *pAdapter, v_U8_t pattern_idx) +{ + tSirWowlDelBcastPtrn delPattern; + tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(pAdapter); + eHalStatus halStatus; + v_U8_t sessionId = pAdapter->sessionId; + + if (pattern_idx > (WOWL_MAX_PTRNS_ALLOWED - 1)) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: WoW pattern index %d is not in the range (0 ~ %d).", + __func__, pattern_idx, WOWL_MAX_PTRNS_ALLOWED - 1); + + return VOS_FALSE; + } + + if (!g_hdd_wowl_ptrns_debugfs[pattern_idx]) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: WoW pattern %d is not in the table.", + __func__, pattern_idx); + + return VOS_FALSE; + } + + delPattern.ucPatternId = pattern_idx; + halStatus = sme_WowlDelBcastPattern(hHal, &delPattern, sessionId); + + if (!HAL_STATUS_SUCCESS(halStatus)) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: sme_WowlDelBcastPattern failed with error code (%ld).", + __func__, halStatus); + + return VOS_FALSE; + } + + g_hdd_wowl_ptrns_debugfs[pattern_idx] = 0; + g_hdd_wowl_ptrns_count--; + + return VOS_TRUE; +} + /**============================================================================ @brief hdd_enter_wowl() - Function which will enable WoWL. Atleast one of MP and PBM must be enabled @@ -348,7 +528,12 @@ v_BOOL_t hdd_enter_wowl (hdd_adapter_t *pAdapter, v_BOOL_t enable_mp, v_BOOL_t e // Request to put Libra into WoWL halStatus = sme_EnterWowl( hHal, hdd_wowl_callback, - pAdapter, &wowParams, pAdapter->sessionId); + pAdapter, +#ifdef WLAN_WAKEUP_EVENTS + hdd_wowl_wakeIndication_callback, + pAdapter, +#endif // WLAN_WAKEUP_EVENTS + &wowParams, pAdapter->sessionId); if ( !HAL_STATUS_SUCCESS( halStatus ) ) { diff --git a/CORE/MAC/inc/aniGlobal.h b/CORE/MAC/inc/aniGlobal.h index b21549c5d2fc..1ce66c551f28 100644 --- a/CORE/MAC/inc/aniGlobal.h +++ b/CORE/MAC/inc/aniGlobal.h @@ -84,12 +84,14 @@ typedef struct sAniSirGlobal *tpAniSirGlobal; #include "smeRrmInternal.h" #include "rrmGlobal.h" #endif -#if defined FEATURE_WLAN_CCX +#if defined(FEATURE_WLAN_CCX) && !defined(FEATURE_WLAN_CCX_UPLOAD) #include "ccxApi.h" #include "ccxGlobal.h" #endif #include "p2p_Api.h" +#include "limRMC.h" + #if defined WLAN_FEATURE_VOWIFI_11R #include #endif @@ -137,6 +139,19 @@ typedef struct sAniSirGlobal *tpAniSirGlobal; #define SPACE_ASCII_VALUE 32 +#ifdef WLAN_FEATURE_RELIABLE_MCAST +#define WLAN_IP_V4_ADDR_SIZE 4 +/* Multicast IP address in IPv4 ranges from 224.0.0.0 through 239.255.255.255 + (Previous class D) are reserved as multicast IP addresses */ +#define WLAN_IP_V4_MCAST_ADDR_START 224 +#define WLAN_IP_V4_MCAST_ADDR_END 239 +#endif + +#ifdef FEATURE_WLAN_BATCH_SCAN +#define EQUALS_TO_ASCII_VALUE (61) +#endif + + // ------------------------------------------------------------------- // Change channel generic scheme typedef void (*CHANGE_CHANNEL_CALLBACK)(tpAniSirGlobal pMac, eHalStatus status, tANI_U32 *data, @@ -240,6 +255,11 @@ typedef struct sLimTimers TX_TIMER gLimDeauthAckTimer; // This timer is started when single shot NOA insert msg is sent to FW for scan in P2P GO mode TX_TIMER gLimP2pSingleShotNoaInsertTimer; + /* This timer is used to convert active channel to + * passive channel when there is no beacon + * for a period of time on a particular DFS channel + */ + TX_TIMER gLimActiveToPassiveChannelTimer; //********************TIMER SECTION ENDS************************************************** // ALL THE FIELDS BELOW THIS CAN BE ZEROED OUT in limInitialize //**************************************************************************************** @@ -646,6 +666,10 @@ typedef struct sAniSirLim tLimAdmitPolicyInfo admitPolicyInfo; vos_lock_t lkPeGlobalLock; tANI_U8 disableLDPCWithTxbfAP; +#ifdef FEATURE_WLAN_TDLS + tANI_U8 gLimTDLSBufStaEnabled; + tANI_U8 gLimTDLSUapsdMask; +#endif @@ -896,6 +920,9 @@ tLimMlmOemDataRsp *gpLimMlmOemDataRsp; #endif tLimDisassocDeauthCnfReq limDisassocDeauthCnfReq; tANI_U8 deferredMsgCnt; + tSirDFSChannelList dfschannelList; + tANI_U8 deauthMsgCnt; + tANI_U8 gLimIbssStaLimit; } tAniSirLim, *tpAniSirLim; typedef struct sLimMgmtFrameRegistration @@ -956,18 +983,11 @@ typedef struct sMacOpenParameters tANI_U16 maxBssId; tANI_U32 frameTransRequired; tANI_U8 powersaveOffloadEnabled; - tANI_U8 wowEnable; tDriverType driverType; tANI_U8 maxWoWFilters; + tANI_U8 wowEnable; } tMacOpenParameters; -typedef enum -{ - HAL_STOP_TYPE_SYS_RESET, - HAL_STOP_TYPE_SYS_DEEP_SLEEP, - HAL_STOP_TYPE_RF_KILL -}tHalStopType; - typedef struct sHalMacStartParameters { // parametes for the Firmware @@ -1045,7 +1065,10 @@ typedef struct sAniSirGlobal v_BOOL_t isTdlsPowerSaveProhibited; #endif tANI_U8 fScanOffload; - /* Based on ini variable or Fw Capability */ +#if defined WLAN_FEATURE_RELIABLE_MCAST + tLimRmcContext rmcContext; +#endif /* WLAN_FEATURE_RELIABLE_MCAST */ + tANI_U8 isCoalesingInIBSSAllowed; tANI_U8 psOffloadEnabled; /* Power Save offload Info */ @@ -1059,8 +1082,7 @@ typedef struct sAniSirGlobal csrReadyToSuspendCallback readyToSuspendCallback; void *readyToSuspendContext; - - tANI_U8 isCoalesingInIBSSAllowed; + tANI_U8 lteCoexAntShare; } tAniSirGlobal; diff --git a/CORE/MAC/inc/aniSystemDefs.h b/CORE/MAC/inc/aniSystemDefs.h index 61a558eaedaf..adec7414ef10 100644 --- a/CORE/MAC/inc/aniSystemDefs.h +++ b/CORE/MAC/inc/aniSystemDefs.h @@ -26,7 +26,6 @@ */ /* - * * Airgo Networks, Inc proprietary. All rights reserved. * This file aniSystemDefs.h contains definitions used by * various ANI entities @@ -230,5 +229,32 @@ typedef struct sBoaCommand tANI_U8 cmd[64]; }tBoaCommand; +typedef __ani_attr_pre_packed struct sTrafStrmMetrics +{ + tANI_U16 UplinkPktQueueDly; + tANI_U16 UplinkPktQueueDlyHist[4]; + tANI_U32 UplinkPktTxDly; + tANI_U16 UplinkPktLoss; + tANI_U16 UplinkPktCount; + tANI_U8 RoamingCount; + tANI_U16 RoamingDly; +} __ani_attr_packed tTrafStrmMetrics, *tpTrafStrmMetrics; + + +typedef __ani_attr_pre_packed struct sBcnReportFields +{ + tANI_U8 ChanNum; + tANI_U8 Spare; + tANI_U16 MeasDuration; + tANI_U8 PhyType; + tANI_U8 RecvSigPower; + tSirMacAddr Bssid; + tANI_U32 ParentTsf; + tANI_U32 TargetTsf[2]; + tANI_U16 BcnInterval; + tANI_U16 CapabilityInfo; +} __ani_attr_packed tBcnReportFields, *tpBcnReportFields; + + #endif /* __ANI_SYSTEM_DEFS_H */ diff --git a/CORE/MAC/inc/macTrace.h b/CORE/MAC/inc/macTrace.h index 3656eab50b2f..54171a44c730 100644 --- a/CORE/MAC/inc/macTrace.h +++ b/CORE/MAC/inc/macTrace.h @@ -109,7 +109,18 @@ tANI_U8* macTraceGetInfoLogString( tANI_U16 infoLog ); eHalStatus pe_AcquireGlobalLock( tAniSirLim *psPe); eHalStatus pe_ReleaseGlobalLock( tAniSirLim *psPe); +tANI_U8* macTraceGetHDDWlanConnState(tANI_U16 connState); +#ifdef WLAN_FEATURE_P2P_DEBUG +tANI_U8* macTraceGetP2PConnState(tANI_U16 connState); +#endif + +tANI_U8* macTraceGetNeighbourRoamState(tANI_U16 neighbourRoamState); +tANI_U8* macTraceGetcsrRoamState(tANI_U16 csrRoamState); +tANI_U8* macTraceGetcsrRoamSubState(tANI_U16 csrRoamSubState); +tANI_U8* macTraceGetLimSmeState(tANI_U16 limState); +tANI_U8* macTraceGetLimMlmState(tANI_U16 mlmState); +tANI_U8* macTraceGetTLState(tANI_U16 tlState); #endif diff --git a/CORE/MAC/inc/qwlan_version.h b/CORE/MAC/inc/qwlan_version.h index f28ffcb57e8a..2864e3ae1689 100644 --- a/CORE/MAC/inc/qwlan_version.h +++ b/CORE/MAC/inc/qwlan_version.h @@ -46,8 +46,8 @@ BRIEF DESCRIPTION: #define QWLAN_VERSION_MINOR 0 #define QWLAN_VERSION_PATCH 0 #define QWLAN_VERSION_EXTRA "" -#define QWLAN_VERSION_BUILD 56 +#define QWLAN_VERSION_BUILD 62 -#define QWLAN_VERSIONSTR "4.0.0.56E" +#define QWLAN_VERSIONSTR "4.0.0.62" #endif /* QWLAN_VERSION_H */ diff --git a/CORE/MAC/inc/sirApi.h b/CORE/MAC/inc/sirApi.h index 63622976e4dc..af1943dc3396 100644 --- a/CORE/MAC/inc/sirApi.h +++ b/CORE/MAC/inc/sirApi.h @@ -44,7 +44,7 @@ #include "aniSystemDefs.h" #include "sirParams.h" -#ifdef FEATURE_WLAN_CCX +#if defined(FEATURE_WLAN_CCX) && !defined(FEATURE_WLAN_CCX_UPLOAD) #include "ccxGlobal.h" #endif @@ -76,6 +76,16 @@ #define SIR_MDIE_SIZE 3 +/* Max number of channels are 165, but to access 165th element of array, + *array of 166 is required. + */ +#define SIR_MAX_24G_5G_CHANNEL_RANGE 166 +#define SIR_BCN_REPORT_MAX_BSS_DESC 4 + + +#ifdef FEATURE_WLAN_BATCH_SCAN +#define SIR_MAX_SSID_SIZE (32) +#endif #define SIR_NUM_11B_RATES 4 //1,2,5.5,11 @@ -120,6 +130,10 @@ typedef tANI_U8 tSirIpv4Addr[SIR_IPV4_ADDR_LEN]; #define SIR_VERSION_STRING_LEN 64 typedef tANI_U8 tSirVersionString[SIR_VERSION_STRING_LEN]; +/* Periodic Tx pattern offload feature */ +#define PERIODIC_TX_PTRN_MAX_SIZE 1536 +#define MAXNUM_PERIODIC_TX_PTRNS 6 + enum eSirHostMsgTypes { SIR_HAL_APP_SETUP_NTF = SIR_HAL_HOST_MSG_START, @@ -129,14 +143,14 @@ enum eSirHostMsgTypes SIR_HAL_SHUTDOWN_REQ, SIR_HAL_SHUTDOWN_CNF, SIR_HAL_RESET_REQ, - SIR_HAL_RADIO_ON_OFF_IND, + SIR_HAL_RADIO_ON_OFF_IND, SIR_HAL_RESET_CNF, SIR_WRITE_TO_TD, SIR_HAL_HDD_ADDBA_REQ, // MAC -> HDD - SIR_HAL_HDD_ADDBA_RSP, // HDD -> HAL + SIR_HAL_HDD_ADDBA_RSP, // HDD -> HAL SIR_HAL_DELETEBA_IND, // MAC -> HDD SIR_HAL_BA_FAIL_IND, // HDD -> MAC - SIR_TL_HAL_FLUSH_AC_REQ, + SIR_TL_HAL_FLUSH_AC_REQ, SIR_HAL_TL_FLUSH_AC_RSP }; @@ -185,6 +199,7 @@ typedef enum eSirScanType { eSIR_PASSIVE_SCAN, eSIR_ACTIVE_SCAN, + eSIR_BEACON_TABLE, } tSirScanType; /// Result codes Firmware return to Host SW @@ -321,11 +336,11 @@ typedef enum eSirResultCodes #ifdef WLAN_FEATURE_PACKET_FILTERING eSIR_SME_PC_FILTER_MATCH_COUNT_REQ_FAILED, #endif // WLAN_FEATURE_PACKET_FILTERING - + #ifdef WLAN_FEATURE_GTK_OFFLOAD eSIR_SME_GTK_OFFLOAD_GETINFO_REQ_FAILED, #endif // WLAN_FEATURE_GTK_OFFLOAD - eSIR_DONOT_USE_RESULT_CODE = SIR_MAX_ENUM_SIZE + eSIR_DONOT_USE_RESULT_CODE = SIR_MAX_ENUM_SIZE } tSirResultCodes; /* each station added has a rate mode which specifies the sta attributes */ @@ -433,6 +448,7 @@ typedef struct sSirRemainOnChnReq tANI_U8 chnNum; tANI_U8 phyMode; tANI_U32 duration; + tANI_U8 isProbeRequestAllowed; tANI_U8 probeRspIe[1]; }tSirRemainOnChnReq, *tpSirRemainOnChnReq; @@ -479,10 +495,10 @@ typedef struct sSirSmeRsp typedef struct sSirSmeStartReq { tANI_U16 messageType; // eWNI_SME_START_REQ - tANI_U16 length; + tANI_U16 length; tANI_U8 sessionId; //Added for BT-AMP Support tANI_U16 transcationId; //Added for BT-AMP Support - tSirMacAddr bssId; //Added For BT-AMP Support + tSirMacAddr bssId; //Added For BT-AMP Support tANI_U32 roamingAtPolaris; tANI_U32 sendNewBssInd; } tSirSmeStartReq, *tpSirSmeStartReq; @@ -492,7 +508,7 @@ typedef struct sSirSmeReadyReq { tANI_U16 messageType; // eWNI_SME_SYS_READY_IND tANI_U16 length; - tANI_U16 transactionId; + tANI_U16 transactionId; } tSirSmeReadyReq, *tpSirSmeReadyReq; /// Definition for response message to previously issued start request @@ -501,7 +517,7 @@ typedef struct sSirSmeStartRsp tANI_U16 messageType; // eWNI_SME_START_RSP tANI_U16 length; tSirResultCodes statusCode; - tANI_U16 transactionId; + tANI_U16 transactionId; } tSirSmeStartRsp, *tpSirSmeStartRsp; @@ -622,7 +638,7 @@ typedef struct sSirSmeStartBssReq tSirMacSSid ssId; tANI_U8 channelId; ePhyChanBondState cbMode; - + tANI_U8 privacy; tANI_U8 apUapsdEnable; tANI_U8 ssidHidden; @@ -682,7 +698,7 @@ typedef struct sSirBssDescription #endif #ifdef FEATURE_WLAN_CCX tANI_U16 QBSSLoad_present; - tANI_U16 QBSSLoad_avail; + tANI_U16 QBSSLoad_avail; #endif // Please keep the structure 4 bytes aligned above the ieFields @@ -693,7 +709,7 @@ typedef struct sSirBssDescription tANI_U32 WscIeLen; tANI_U8 WscIeProbeRsp[WSCIE_PROBE_RSP_LEN]; tANI_U8 reservedPadding4; - + tANI_U32 ieFields[1]; } tSirBssDescription, *tpSirBssDescription; @@ -709,7 +725,7 @@ typedef struct sSirSmeStartBssRsp tSirResultCodes statusCode; tSirBssType bssType;//Add new type for WDS mode tANI_U16 beaconInterval;//Beacon Interval for both type - tANI_U32 staId;//Staion ID for Self + tANI_U32 staId;//Staion ID for Self tSirBssDescription bssDescription;//Peer BSS description } tSirSmeStartBssRsp, *tpSirSmeStartBssRsp; @@ -717,9 +733,15 @@ typedef struct sSirSmeStartBssRsp typedef struct sSirChannelList { tANI_U8 numChannels; - tANI_U8 channelNumber[1]; + tANI_U8 channelNumber[SIR_CCX_MAX_MEAS_IE_REQS]; } tSirChannelList, *tpSirChannelList; +typedef struct sSirDFSChannelList +{ + tANI_U32 timeStamp[SIR_MAX_24G_5G_CHANNEL_RANGE]; + +} tSirDFSChannelList, *tpSirDFSChannelList; + #ifdef FEATURE_WLAN_CCX typedef struct sTspecInfo { tANI_U8 valid; @@ -763,7 +785,7 @@ typedef enum eSirLinkTrafficCheck #define SIR_BG_SCAN_RETURN_CACHED_RESULTS 0x0 #define SIR_BG_SCAN_PURGE_RESUTLS 0x80 #define SIR_BG_SCAN_RETURN_FRESH_RESULTS 0x01 -#define SIR_SCAN_MAX_NUM_SSID 0x09 +#define SIR_SCAN_MAX_NUM_SSID 0x09 #define SIR_BG_SCAN_RETURN_LFR_CACHED_RESULTS 0x02 #define SIR_BG_SCAN_PURGE_LFR_RESULTS 0x40 @@ -790,7 +812,7 @@ typedef struct sSirSmeScanReq /** * maxChannelTime. * 0x0 - Invalid. In case of active scan. - * In case of passive scan, MAX( maxChannelTime, WNI_CFG_PASSIVE_MAXIMUM_CHANNEL_TIME) is used. + * In case of passive scan, MAX( maxChannelTime, WNI_CFG_PASSIVE_MAXIMUM_CHANNEL_TIME) is used. * */ tANI_U32 maxChannelTime; @@ -833,7 +855,7 @@ typedef struct sSirSmeScanReq /* backgroundScanMode can take following values: * 0x0 - agressive scan - * 0x1 - normal scan where HAL will check for link traffic + * 0x1 - normal scan where HAL will check for link traffic * prior to proceeding with the scan */ tSirBackgroundScanMode backgroundScanMode; @@ -842,11 +864,11 @@ typedef struct sSirSmeScanReq /* Number of SSIDs to scan */ tANI_U8 numSsid; - + //channelList has to be the last member of this structure. Check tSirChannelList for the reason. /* This MUST be the last field of the structure */ - - + + tANI_BOOLEAN p2pSearch; tANI_U16 uIEFieldLen; tANI_U16 uIEFieldOffset; @@ -856,7 +878,7 @@ typedef struct sSirSmeScanReq /*----------------------------- tSirSmeScanReq.... ----------------------------- - uIEFiledLen + uIEFiledLen ----------------------------- uIEFiledOffset ----+ ----------------------------- | @@ -867,7 +889,7 @@ typedef struct sSirSmeScanReq This can be zero, if | numChannel is zero. | ----------------------------- <--+ - ... variable size uIEFiled + ... variable size uIEFiled up to uIEFieldLen (can be 0) -----------------------------*/ } tSirSmeScanReq, *tpSirSmeScanReq; @@ -917,7 +939,7 @@ typedef struct sSirOemDataRsp tANI_U16 length; tANI_U8 oemDataRsp[OEM_DATA_RSP_SIZE]; } tSirOemDataRsp, *tpSirOemDataRsp; - + #endif //FEATURE_OEM_DATA_SUPPORT /// Definition for response message to previously issued scan request @@ -925,9 +947,9 @@ typedef struct sSirSmeScanRsp { tANI_U16 messageType; // eWNI_SME_SCAN_RSP tANI_U16 length; - tANI_U8 sessionId; + tANI_U8 sessionId; tSirResultCodes statusCode; - tANI_U16 transcationId; + tANI_U16 transcationId; tSirBssDescription bssDescription[1]; } tSirSmeScanRsp, *tpSirSmeScanRsp; @@ -988,9 +1010,9 @@ typedef struct sJoinReassocInfo /// Definition for join request /// ---> MAC -/// WARNING! If you add a field in JOIN REQ. -/// Make sure to add it in REASSOC REQ -/// The Serdes function is the same and its +/// WARNING! If you add a field in JOIN REQ. +/// Make sure to add it in REASSOC REQ +/// The Serdes function is the same and its /// shared with REASSOC. So if we add a field // here and dont add it in REASSOC REQ. It will BREAK!!! REASSOC. typedef struct sSirSmeJoinReq @@ -998,11 +1020,11 @@ typedef struct sSirSmeJoinReq tANI_U16 messageType; // eWNI_SME_JOIN_REQ tANI_U16 length; tANI_U8 sessionId; - tANI_U16 transactionId; + tANI_U16 transactionId; tSirMacSSid ssId; tSirMacAddr selfMacAddr; // self Mac address tSirBssType bsstype; // add new type for BT -AMP STA and AP Modules - tANI_U8 dot11mode; // to support BT-AMP + tANI_U8 dot11mode; // to support BT-AMP tVOS_CON_MODE staPersona; //Persona ePhyChanBondState cbMode; // Pass CB mode value in Join. @@ -1019,15 +1041,15 @@ typedef struct sSirSmeJoinReq tSirRSNie rsnIE; // RSN IE to be sent in // (Re) Association Request #ifdef FEATURE_WLAN_CCX - tSirCCKMie cckmIE; // CCMK IE to be included as handler for join and reassoc is + tSirCCKMie cckmIE; // CCMK IE to be included as handler for join and reassoc is // the same. The join will never carry cckm, but will be set to - // 0. + // 0. #endif tSirAddie addIEScan; // Additional IE to be sent in // (unicast) Probe Request at the time of join - tSirAddie addIEAssoc; // Additional IE to be sent in + tSirAddie addIEAssoc; // Additional IE to be sent in // (Re) Association Request tAniEdType UCEncryptionType; @@ -1042,10 +1064,11 @@ typedef struct sSirSmeJoinReq tAniBool is11Rconnection; #endif #ifdef FEATURE_WLAN_CCX + tAniBool isCCXFeatureIniEnabled; tAniBool isCCXconnection; tCCXTspecInfo ccxTspecInfo; #endif - + #if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR) tAniBool isFastTransitionEnabled; #endif @@ -1066,11 +1089,14 @@ typedef struct sSirSmeJoinReq tANI_U8 enableHtSmps; tANI_U8 htSmps; + tANI_U8 isAmsduSupportInAMPDU; + tAniTitanCBNeighborInfo cbNeighbors; tAniBool spectrumMgtIndicator; tSirMacPowerCapInfo powerCap; tSirSupChnl supportedChannels; tSirBssDescription bssDescription; + } tSirSmeJoinReq, *tpSirSmeJoinReq; /// Definition for reponse message to previously issued join request @@ -1097,7 +1123,7 @@ typedef struct sSirSmeJoinRsp #endif tANI_U32 staId;//Station ID for peer - /*The DPU signatures will be sent eventually to TL to help it determine the + /*The DPU signatures will be sent eventually to TL to help it determine the association to which a packet belongs to*/ /*Unicast DPU signature*/ tANI_U8 ucastSig; @@ -1112,7 +1138,7 @@ typedef struct sSirSmeJoinRsp typedef struct sSirSmeAuthInd { tANI_U16 messageType; // eWNI_SME_AUTH_IND - tANI_U16 length; + tANI_U16 length; tANI_U8 sessionId; tSirMacAddr bssId; // Self BSSID tSirMacAddr peerMacAddr; @@ -1142,7 +1168,7 @@ typedef struct sSirSmeAssocInd tANI_U16 staId; // Station ID for peer tANI_U8 uniSig; // DPU signature for unicast packets tANI_U8 bcastSig; // DPU signature for broadcast packets - tAniAuthType authType; + tAniAuthType authType; tAniSSID ssId; // SSID used by STA to associate tSirRSNie rsnIE;// RSN IE received from peer tSirAddie addIE;// Additional IE received from peer, which possibly include WSC IE and/or P2P IE @@ -1192,7 +1218,7 @@ typedef struct sSirSmeReassocInd tSirRSNie rsnIE; // RSN IE received from peer tSirAddie addIE; // Additional IE received from peer - + // powerCap & supportedChannels are present only when // spectrumMgtIndicator flag is set tAniBool spectrumMgtIndicator; @@ -1358,7 +1384,7 @@ typedef struct sAniSecurityStat typedef struct sAniTxRxCounters { tANI_U32 txFrames; // Incremented for every packet tx - tANI_U32 rxFrames; + tANI_U32 rxFrames; tANI_U32 nRcvBytes; tANI_U32 nXmitBytes; }tAniTxRxCounters, *tpAniTxRxCounters; @@ -1386,7 +1412,7 @@ typedef struct sAniSecStats tAni64BitCounters wpiReplays; tAni64BitCounters wpiMicError; #endif -}tAniSecStats, *tpAniSecStats; +}tAniSecStats, *tpAniSecStats; #define SIR_MAX_RX_CHAINS 3 @@ -1445,13 +1471,13 @@ typedef struct sAniStaStatStruct //Multicast frames and bytes. tAniTxRxStats mcStats; - tANI_U32 currentTxRate; + tANI_U32 currentTxRate; tANI_U32 currentRxRate; //Rate in 100Kbps tANI_U32 maxTxRate; tANI_U32 maxRxRate; - tANI_S8 rssi[SIR_MAX_RX_CHAINS]; + tANI_S8 rssi[SIR_MAX_RX_CHAINS]; tAniSecStats securityStats; @@ -1486,7 +1512,7 @@ typedef struct sAniGlobalStatStruct tAniTxRxStats mcStats; tAniTxRxStats bcStats; - + }tAniGlobalStatStruct,*tpAniGlobalStatStruct; typedef enum sPacketType @@ -1571,7 +1597,7 @@ typedef struct sSirSmeDisassocInd tANI_U8 sessionId; // Session Identifier tANI_U16 transactionId; // Transaction Identifier with PE tSirResultCodes statusCode; - tSirMacAddr bssId; + tSirMacAddr bssId; tSirMacAddr peerMacAddr; tAniStaStatStruct perStaStats; // STA stats tANI_U16 staId; @@ -1585,7 +1611,7 @@ typedef struct sSirSmeDisassocCnf tANI_U16 messageType; // eWNI_SME_DISASSOC_CNF tANI_U16 length; tSirResultCodes statusCode; - tSirMacAddr bssId; + tSirMacAddr bssId; tSirMacAddr peerMacAddr; } tSirSmeDisassocCnf, *tpSirSmeDisassocCnf; @@ -2067,8 +2093,8 @@ typedef enum }ePEStatsMask; /* - * tpAniGetPEStatsReq is tied to - * for SME ==> PE eWNI_SME_GET_STATISTICS_REQ msgId and + * tpAniGetPEStatsReq is tied to + * for SME ==> PE eWNI_SME_GET_STATISTICS_REQ msgId and * for PE ==> HAL SIR_HAL_GET_STATISTICS_REQ msgId */ typedef struct sAniGetPEStatsReq @@ -2081,8 +2107,8 @@ typedef struct sAniGetPEStatsReq } tAniGetPEStatsReq, *tpAniGetPEStatsReq; /* - * tpAniGetPEStatsRsp is tied to - * for PE ==> SME eWNI_SME_GET_STATISTICS_RSP msgId and + * tpAniGetPEStatsRsp is tied to + * for PE ==> SME eWNI_SME_GET_STATISTICS_RSP msgId and * for HAL ==> PE SIR_HAL_GET_STATISTICS_RSP msgId */ typedef struct sAniGetPEStatsRsp @@ -2096,10 +2122,10 @@ typedef struct sAniGetPEStatsRsp tANI_U32 statsMask; // categories of stats requested. look at ePEStatsMask /********************************************************************************************** //void *pStatsBuf; - The Stats buffer starts here and can be an aggregate of more than one statistics - structure depending on statsMask.The void pointer "pStatsBuf" is commented out - intentionally and the src code that uses this structure should take that into account. -**********************************************************************************************/ + The Stats buffer starts here and can be an aggregate of more than one statistics + structure depending on statsMask.The void pointer "pStatsBuf" is commented out + intentionally and the src code that uses this structure should take that into account. +**********************************************************************************************/ } tAniGetPEStatsRsp, *tpAniGetPEStatsRsp; typedef struct sAniGetRssiReq @@ -2108,13 +2134,24 @@ typedef struct sAniGetRssiReq tANI_U16 msgType; // message type is same as the request type tANI_U16 msgLen; // length of the entire request tANI_U8 sessionId; - tANI_U8 staId; + tANI_U8 staId; void *rssiCallback; void *pDevContext; //device context void *pVosContext; //voss context - + } tAniGetRssiReq, *tpAniGetRssiReq; +typedef struct sAniGetSnrReq +{ + // Common for all types are requests + tANI_U16 msgType; // message type is same as the request type + tANI_U16 msgLen; // length of the entire request + tANI_U8 sessionId; + tANI_U8 staId; + void *snrCallback; + void *pDevContext; //device context +} tAniGetSnrReq, *tpAniGetSnrReq; + #if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR) typedef struct sAniGetRoamRssiRsp { @@ -2130,6 +2167,79 @@ typedef struct sAniGetRoamRssiRsp } tAniGetRoamRssiRsp, *tpAniGetRoamRssiRsp; #endif + +#if defined(FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_CCX_UPLOAD) +typedef struct sSirTsmIE +{ + tANI_U8 tsid; + tANI_U8 state; + tANI_U16 msmt_interval; +} tSirTsmIE, *tpSirTsmIE; +typedef struct sSirSmeTsmIEInd +{ + tSirTsmIE tsmIe; + tANI_U8 sessionId; +} tSirSmeTsmIEInd, *tpSirSmeTsmIEInd; +typedef struct sAniTrafStrmMetrics +{ + tANI_U16 UplinkPktQueueDly; + tANI_U16 UplinkPktQueueDlyHist[4]; + tANI_U32 UplinkPktTxDly; + tANI_U16 UplinkPktLoss; + tANI_U16 UplinkPktCount; + tANI_U8 RoamingCount; + tANI_U16 RoamingDly; +} tAniTrafStrmMetrics, *tpAniTrafStrmMetrics; +typedef struct sAniGetTsmStatsReq +{ + // Common for all types are requests + tANI_U16 msgType; // message type is same as the request type + tANI_U16 msgLen; // length of the entire request + tANI_U8 staId; + tANI_U8 tid; // traffic id + tSirMacAddr bssId; + void *tsmStatsCallback; + void *pDevContext; //device context + void *pVosContext; //voss context +} tAniGetTsmStatsReq, *tpAniGetTsmStatsReq; +typedef struct sAniGetTsmStatsRsp +{ + // Common for all types are responses + tANI_U16 msgType; /* + * message type is same as + * the request type + */ + tANI_U16 msgLen; /* + * length of the entire request, + * includes the pStatsBuf length too + */ + tANI_U8 sessionId; + tANI_U32 rc; /* success/failure */ + tANI_U32 staId; /* + * Per STA stats request must + * contain valid + */ + tAniTrafStrmMetrics tsmMetrics; + void *tsmStatsReq; /* tsm stats request backup */ +} tAniGetTsmStatsRsp, *tpAniGetTsmStatsRsp; + +typedef struct sSirCcxBcnReportBssInfo +{ + tBcnReportFields bcnReportFields; + tANI_U8 ieLen; + tANI_U8 *pBuf; +} tSirCcxBcnReportBssInfo, *tpSirCcxBcnReportBssInfo; + +typedef struct sSirCcxBcnReportRsp +{ + tANI_U16 measurementToken; + tANI_U8 flag; /* Flag to report measurement done and more data */ + tANI_U8 numBss; + tSirCcxBcnReportBssInfo bcnRepBssInfo[SIR_BCN_REPORT_MAX_BSS_DESC]; +} tSirCcxBcnReportRsp, *tpSirCcxBcnReportRsp; + +#endif /* FEATURE_WLAN_CCX || FEATURE_WLAN_CCX_UPLOAD */ + /* Change country code request MSG structure */ typedef struct sAniChangeCountryCodeReq { @@ -2137,38 +2247,69 @@ typedef struct sAniChangeCountryCodeReq tANI_U16 msgType; // message type is same as the request type tANI_U16 msgLen; // length of the entire request tANI_U8 countryCode[WNI_CFG_COUNTRY_CODE_LEN]; //3 char country code + tAniBool countryFromUserSpace; + tAniBool sendRegHint; //TRUE if we want to send hint to NL80211 void *changeCCCallback; void *pDevContext; //device context void *pVosContext; //voss context } tAniChangeCountryCodeReq, *tpAniChangeCountryCodeReq; +/* generic country code change request MSG structure */ +typedef struct sAniGenericChangeCountryCodeReq +{ + // Common for all types are requests + tANI_U16 msgType; // message type is same as the request type + tANI_U16 msgLen; // length of the entire request + tANI_U8 countryCode[WNI_CFG_COUNTRY_CODE_LEN]; //3 char country code + tANI_U16 domain_index; +} tAniGenericChangeCountryCodeReq, *tpAniGenericChangeCountryCodeReq; + +typedef struct sAniDHCPStopInd +{ + tANI_U16 msgType; // message type is same as the request type + tANI_U16 msgLen; // length of the entire request + tANI_U8 device_mode; // Mode of the device(ex:STA, AP) + tSirMacAddr macAddr; + +} tAniDHCPInd, *tpAniDHCPInd; + +#ifdef FEATURE_CESIUM_PROPRIETARY +typedef struct sAniTXFailMonitorInd +{ + tANI_U16 msgType; // message type is same as the request type + tANI_U16 msgLen; // length of the entire request + tANI_U8 tx_fail_count; + void *txFailIndCallback; +} tAniTXFailMonitorInd, *tpAniTXFailMonitorInd; +#endif /* FEATURE_CESIUM_PROPRIETARY */ + typedef struct sAniSummaryStatsInfo { tANI_U32 retry_cnt[4]; //Total number of packets(per AC) that were successfully transmitted with retries - tANI_U32 multiple_retry_cnt[4];//The number of MSDU packets and MMPDU frames per AC that the 802.11 + tANI_U32 multiple_retry_cnt[4];//The number of MSDU packets and MMPDU frames per AC that the 802.11 // station successfully transmitted after more than one retransmission attempt - tANI_U32 tx_frm_cnt[4]; //Total number of packets(per AC) that were successfully transmitted - //(with and without retries, including multi-cast, broadcast) + tANI_U32 tx_frm_cnt[4]; //Total number of packets(per AC) that were successfully transmitted + //(with and without retries, including multi-cast, broadcast) //tANI_U32 tx_fail_cnt; //tANI_U32 num_rx_frm_crc_err; //Total number of received frames with CRC Error //tANI_U32 num_rx_frm_crc_ok; //Total number of successfully received frames with out CRC Error - tANI_U32 rx_frm_cnt; //Total number of packets that were successfully received - //(after appropriate filter rules including multi-cast, broadcast) + tANI_U32 rx_frm_cnt; //Total number of packets that were successfully received + //(after appropriate filter rules including multi-cast, broadcast) tANI_U32 frm_dup_cnt; //Total number of duplicate frames received successfully tANI_U32 fail_cnt[4]; //Total number packets(per AC) failed to transmit tANI_U32 rts_fail_cnt; //Total number of RTS/CTS sequence failures for transmission of a packet tANI_U32 ack_fail_cnt; //Total number packets failed transmit because of no ACK from the remote entity - tANI_U32 rts_succ_cnt; //Total number of RTS/CTS sequence success for transmission of a packet - tANI_U32 rx_discard_cnt; //The sum of the receive error count and dropped-receive-buffer error count. + tANI_U32 rts_succ_cnt; //Total number of RTS/CTS sequence success for transmission of a packet + tANI_U32 rx_discard_cnt; //The sum of the receive error count and dropped-receive-buffer error count. //HAL will provide this as a sum of (FCS error) + (Fail get BD/PDU in HW) tANI_U32 rx_error_cnt; //The receive error count. HAL will provide the RxP FCS error global counter. - tANI_U32 tx_byte_cnt; //The sum of the transmit-directed byte count, transmit-multicast byte count - //and transmit-broadcast byte count. HAL will sum TPE UC/MC/BCAST global counters + tANI_U32 tx_byte_cnt; //The sum of the transmit-directed byte count, transmit-multicast byte count + //and transmit-broadcast byte count. HAL will sum TPE UC/MC/BCAST global counters //to provide this. -#if 0 - //providing the following stats, in case of wrap around for tx_byte_cnt +#if 0 + //providing the following stats, in case of wrap around for tx_byte_cnt tANI_U32 tx_unicast_lower_byte_cnt; tANI_U32 tx_unicast_upper_byte_cnt; tANI_U32 tx_multicast_lower_byte_cnt; @@ -2193,24 +2334,24 @@ typedef enum eTxRateInfo typedef struct sAniGlobalClassAStatsInfo { - tANI_U32 rx_frag_cnt; //The number of MPDU frames received by the 802.11 station for MSDU packets + tANI_U32 rx_frag_cnt; //The number of MPDU frames received by the 802.11 station for MSDU packets //or MMPDU frames - tANI_U32 promiscuous_rx_frag_cnt; //The number of MPDU frames received by the 802.11 station for MSDU packets + tANI_U32 promiscuous_rx_frag_cnt; //The number of MPDU frames received by the 802.11 station for MSDU packets //or MMPDU frames when a promiscuous packet filter was enabled //tANI_U32 rx_fcs_err; //The number of MPDU frames that the 802.11 station received with FCS errors - tANI_U32 rx_input_sensitivity; //The receiver input sensitivity referenced to a FER of 8% at an MPDU length - //of 1024 bytes at the antenna connector. Each element of the array shall correspond + tANI_U32 rx_input_sensitivity; //The receiver input sensitivity referenced to a FER of 8% at an MPDU length + //of 1024 bytes at the antenna connector. Each element of the array shall correspond //to a supported rate and the order shall be the same as the supporteRates parameter. - tANI_U32 max_pwr; //The maximum transmit power in dBm upto one decimal. - //for eg: if it is 10.5dBm, the value would be 105 + tANI_U32 max_pwr; //The maximum transmit power in dBm upto one decimal. + //for eg: if it is 10.5dBm, the value would be 105 //tANI_U32 default_pwr; //The nominal transmit level used after normal power on sequence - tANI_U32 sync_fail_cnt; //Number of times the receiver failed to synchronize with the incoming signal - //after detecting the sync in the preamble of the transmitted PLCP protocol data unit. - tANI_U32 tx_rate; //Legacy transmit rate, in units of - //500 kbit/sec, for the most - //recently transmitted frame + tANI_U32 sync_fail_cnt; //Number of times the receiver failed to synchronize with the incoming signal + //after detecting the sync in the preamble of the transmitted PLCP protocol data unit. + tANI_U32 tx_rate; //Legacy transmit rate, in units of + //500 kbit/sec, for the most + //recently transmitted frame tANI_U32 mcs_index; //mcs index for HT20 and HT40 rates - tANI_U32 tx_rate_flags; //to differentiate between HT20 and + tANI_U32 tx_rate_flags; //to differentiate between HT20 and //HT40 rates; short and long guard interval }tAniGlobalClassAStatsInfo, *tpAniGlobalClassAStatsInfo; @@ -2218,29 +2359,29 @@ typedef struct sAniGlobalClassAStatsInfo typedef struct sAniGlobalSecurityStats { - tANI_U32 rx_wep_unencrypted_frm_cnt; //The number of unencrypted received MPDU frames that the MAC layer discarded when - //the IEEE 802.11 dot11ExcludeUnencrypted management information base (MIB) object + tANI_U32 rx_wep_unencrypted_frm_cnt; //The number of unencrypted received MPDU frames that the MAC layer discarded when + //the IEEE 802.11 dot11ExcludeUnencrypted management information base (MIB) object //is enabled - tANI_U32 rx_mic_fail_cnt; //The number of received MSDU packets that that the 802.11 station discarded + tANI_U32 rx_mic_fail_cnt; //The number of received MSDU packets that that the 802.11 station discarded //because of MIC failures - tANI_U32 tkip_icv_err; //The number of encrypted MPDU frames that the 802.11 station failed to decrypt + tANI_U32 tkip_icv_err; //The number of encrypted MPDU frames that the 802.11 station failed to decrypt //because of a TKIP ICV error - tANI_U32 aes_ccmp_format_err; //The number of received MPDU frames that the 802.11 discarded because of an + tANI_U32 aes_ccmp_format_err; //The number of received MPDU frames that the 802.11 discarded because of an //invalid AES-CCMP format - tANI_U32 aes_ccmp_replay_cnt; //The number of received MPDU frames that the 802.11 station discarded because of + tANI_U32 aes_ccmp_replay_cnt; //The number of received MPDU frames that the 802.11 station discarded because of //the AES-CCMP replay protection procedure - tANI_U32 aes_ccmp_decrpt_err; //The number of received MPDU frames that the 802.11 station discarded because of + tANI_U32 aes_ccmp_decrpt_err; //The number of received MPDU frames that the 802.11 station discarded because of //errors detected by the AES-CCMP decryption algorithm - tANI_U32 wep_undecryptable_cnt; //The number of encrypted MPDU frames received for which a WEP decryption key was + tANI_U32 wep_undecryptable_cnt; //The number of encrypted MPDU frames received for which a WEP decryption key was //not available on the 802.11 station - tANI_U32 wep_icv_err; //The number of encrypted MPDU frames that the 802.11 station failed to decrypt + tANI_U32 wep_icv_err; //The number of encrypted MPDU frames that the 802.11 station failed to decrypt //because of a WEP ICV error - tANI_U32 rx_decrypt_succ_cnt; //The number of received encrypted packets that the 802.11 station successfully + tANI_U32 rx_decrypt_succ_cnt; //The number of received encrypted packets that the 802.11 station successfully //decrypted tANI_U32 rx_decrypt_fail_cnt; //The number of encrypted packets that the 802.11 station failed to decrypt }tAniGlobalSecurityStats, *tpAniGlobalSecurityStats; - + typedef struct sAniGlobalClassBStatsInfo { tAniGlobalSecurityStats ucStats; @@ -2249,27 +2390,27 @@ typedef struct sAniGlobalClassBStatsInfo typedef struct sAniGlobalClassCStatsInfo { - tANI_U32 rx_amsdu_cnt; //This counter shall be incremented for a received A-MSDU frame with the stations - //MAC address in the address 1 field or an A-MSDU frame with a group address in the + tANI_U32 rx_amsdu_cnt; //This counter shall be incremented for a received A-MSDU frame with the stations + //MAC address in the address 1 field or an A-MSDU frame with a group address in the //address 1 field tANI_U32 rx_ampdu_cnt; //This counter shall be incremented when the MAC receives an AMPDU from the PHY - tANI_U32 tx_20_frm_cnt; //This counter shall be incremented when a Frame is transmitted only on the + tANI_U32 tx_20_frm_cnt; //This counter shall be incremented when a Frame is transmitted only on the //primary channel tANI_U32 rx_20_frm_cnt; //This counter shall be incremented when a Frame is received only on the primary channel - tANI_U32 rx_mpdu_in_ampdu_cnt; //This counter shall be incremented by the number of MPDUs received in the A-MPDU + tANI_U32 rx_mpdu_in_ampdu_cnt; //This counter shall be incremented by the number of MPDUs received in the A-MPDU //when an A-MPDU is received - tANI_U32 ampdu_delimiter_crc_err;//This counter shall be incremented when an MPDU delimiter has a CRC error when this - //is the first CRC error in the received AMPDU or when the previous delimiter has been + tANI_U32 ampdu_delimiter_crc_err;//This counter shall be incremented when an MPDU delimiter has a CRC error when this + //is the first CRC error in the received AMPDU or when the previous delimiter has been //decoded correctly }tAniGlobalClassCStatsInfo, *tpAniGlobalClassCStatsInfo; typedef struct sAniPerStaStatsInfo { - tANI_U32 tx_frag_cnt[4]; //The number of MPDU frames that the 802.11 station transmitted and acknowledged + tANI_U32 tx_frag_cnt[4]; //The number of MPDU frames that the 802.11 station transmitted and acknowledged //through a received 802.11 ACK frame - tANI_U32 tx_ampdu_cnt; //This counter shall be incremented when an A-MPDU is transmitted - tANI_U32 tx_mpdu_in_ampdu_cnt; //This counter shall increment by the number of MPDUs in the AMPDU when an A-MPDU + tANI_U32 tx_ampdu_cnt; //This counter shall be incremented when an A-MPDU is transmitted + tANI_U32 tx_mpdu_in_ampdu_cnt; //This counter shall increment by the number of MPDUs in the AMPDU when an A-MPDU //is transmitted }tAniPerStaStatsInfo, *tpAniPerStaStatsInfo; @@ -2327,7 +2468,7 @@ typedef struct sSirRSSINotification tANI_U32 bRssiThres1NegCross : 1; tANI_U32 bRssiThres1PosCross : 1; #endif - + }tSirRSSINotification, *tpSirRSSINotification; @@ -2337,6 +2478,14 @@ typedef struct sSirP2PNoaStart tANI_U32 bssIdx; } tSirP2PNoaStart, *tpSirP2PNoaStart; +typedef struct sSirTdlsInd +{ + tANI_U16 status; + tANI_U16 assocId; + tANI_U16 staIdx; + tANI_U16 reasonCode; +} tSirTdlsInd, *tpSirTdlsInd; + typedef struct sSirP2PNoaAttr { #ifdef ANI_BIG_BYTE_ENDIAN @@ -2386,6 +2535,41 @@ typedef __ani_attr_pre_packed struct sSirTclasInfo }__ani_attr_packed tclasParams; } __ani_attr_packed tSirTclasInfo; +#if defined(FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_CCX_UPLOAD) +#define TSRS_11AG_RATE_6MBPS 0xC +#define TSRS_11B_RATE_5_5MBPS 0xB +typedef struct sSirMacCCXTSRSIE +{ + tANI_U8 tsid; + tANI_U8 rates[8]; +} tSirMacCCXTSRSIE; +typedef struct sSirMacCCXTSMIE +{ + tANI_U8 tsid; + tANI_U8 state; + tANI_U16 msmt_interval; +} tSirMacCCXTSMIE; +typedef struct sTSMStats +{ + tANI_U8 tid; + tSirMacAddr bssId; + tTrafStrmMetrics tsmMetrics; +} tTSMStats, *tpTSMStats; +typedef struct sCcxTSMContext +{ + tANI_U8 tid; + tSirMacCCXTSMIE tsmInfo; + tTrafStrmMetrics tsmMetrics; +} tCcxTSMContext, *tpCcxTSMContext; +typedef struct sCcxPEContext +{ +#if defined(FEATURE_WLAN_CCX) && !defined(FEATURE_WLAN_CCX_UPLOAD) + tCcxMeasReq curMeasReq; +#endif + tCcxTSMContext tsm; +} tCcxPEContext, *tpCcxPEContext; +#endif /* FEATURE_WLAN_CCX && FEATURE_WLAN_CCX_UPLOAD */ + typedef struct sSirAddtsReqInfo { tANI_U8 dialogToken; @@ -2394,7 +2578,7 @@ typedef struct sSirAddtsReqInfo tANI_U8 numTclas; // number of Tclas elements tSirTclasInfo tclasInfo[SIR_MAC_TCLASIE_MAXNUM]; tANI_U8 tclasProc; -#ifdef FEATURE_WLAN_CCX +#if defined(FEATURE_WLAN_CCX) tSirMacCCXTSRSIE tsrsIE; tANI_U8 tsrsPresent:1; #endif @@ -2415,7 +2599,7 @@ typedef struct sSirAddtsRspInfo tSirTclasInfo tclasInfo[SIR_MAC_TCLASIE_MAXNUM]; tANI_U8 tclasProc; tSirMacScheduleIE schedule; -#ifdef FEATURE_WLAN_CCX +#if defined(FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_CCX_UPLOAD) tSirMacCCXTSMIE tsmIE; tANI_U8 tsmPresent:1; #endif @@ -2452,8 +2636,8 @@ typedef struct sSirAddtsRsp { tANI_U16 messageType; // eWNI_SME_ADDTS_RSP tANI_U16 length; - tANI_U8 sessionId; // sme sessionId Added for BT-AMP support - tANI_U16 transactionId; //sme transaction Id Added for BT-AMP Support + tANI_U8 sessionId; // sme sessionId Added for BT-AMP support + tANI_U16 transactionId; //sme transaction Id Added for BT-AMP Support tANI_U32 rc; // return code tSirAddtsRspInfo rsp; } tSirAddtsRsp, *tpSirAddtsRsp; @@ -2475,8 +2659,8 @@ typedef struct sSirDeltsRsp { tANI_U16 messageType; // eWNI_SME_DELTS_RSP tANI_U16 length; - tANI_U8 sessionId; // sme sessionId Added for BT-AMP support - tANI_U16 transactionId; //sme transaction Id Added for BT-AMP Support + tANI_U8 sessionId; // sme sessionId Added for BT-AMP support + tANI_U16 transactionId; //sme transaction Id Added for BT-AMP Support tANI_U32 rc; tANI_U16 aid; // use 0 if macAddr is being specified tANI_U8 macAddr[6]; // only on AP to specify the STA @@ -2556,10 +2740,10 @@ typedef struct sSirGetTxPowerRsp typedef tANI_U32 tSirMacNoise[3]; -typedef struct sSirGetNoiseRsp +typedef struct sSirGetNoiseRsp { tANI_U16 messageType; - tANI_U16 length; + tANI_U16 length; tSirMacNoise noise; } tSirGetNoiseRsp, *tpSirGetNoiseRsp; @@ -2571,9 +2755,9 @@ typedef struct sSirGetNoiseRsp typedef struct sSirPowerSaveCfg { tANI_U16 listenInterval; - - /* Number of consecutive missed beacons before - * hardware generates an interrupt to wake up + + /* Number of consecutive missed beacons before + * hardware generates an interrupt to wake up * the host. In units of listen interval. */ tANI_U32 HeartBeatCount; @@ -2584,35 +2768,35 @@ typedef struct sSirPowerSaveCfg */ tANI_U32 nthBeaconFilter; - /* Maximum number of PS-Poll send before + /* Maximum number of PS-Poll send before * firmware sends data null with PM set to 0. */ - tANI_U32 maxPsPoll; + tANI_U32 maxPsPoll; - /* If the average RSSI value falls below the - * minRssiThreshold, then FW will send an - * interrupt to wake up the host. + /* If the average RSSI value falls below the + * minRssiThreshold, then FW will send an + * interrupt to wake up the host. */ - tANI_U32 minRssiThreshold; + tANI_U32 minRssiThreshold; - /* Number of beacons for which firmware will + /* Number of beacons for which firmware will * collect the RSSI values and compute the average. */ - tANI_U8 numBeaconPerRssiAverage; + tANI_U8 numBeaconPerRssiAverage; /* FW collects the RSSI stats for this period - * in BMPS mode. + * in BMPS mode. */ tANI_U8 rssiFilterPeriod; // Enabling/disabling broadcast frame filter feature - tANI_U8 broadcastFrameFilter; + tANI_U8 broadcastFrameFilter; // Enabling/disabling the ignore DTIM feature tANI_U8 ignoreDtim; /* The following configuration parameters are kept - * in order to be backward compatible for Gen5. + * in order to be backward compatible for Gen5. * These will NOT be used for Gen6 Libra chip */ tBeaconForwarding beaconFwd; @@ -2621,12 +2805,12 @@ typedef struct sSirPowerSaveCfg tANI_U8 fPSPoll; // Enabling/disabling Beacon Early Termination feature - tANI_U8 fEnableBeaconEarlyTermination; - tANI_U8 bcnEarlyTermWakeInterval; + tANI_U8 fEnableBeaconEarlyTermination; + tANI_U8 bcnEarlyTermWakeInterval; }tSirPowerSaveCfg, *tpSirPowerSaveCfg; -/* Reason code for requesting Full Power. This reason code is used by +/* Reason code for requesting Full Power. This reason code is used by any module requesting full power from PMC and also by PE when it sends the eWNI_PMC_EXIT_BMPS_IND to PMC*/ typedef enum eRequestFullPowerReason @@ -2644,7 +2828,7 @@ typedef enum eRequestFullPowerReason #ifdef FEATURE_WLAN_TDLS eSME_FULL_PWR_NEEDED_BY_TDLS_PEER_SETUP, /* TDLS peer setup*/ #endif - eSME_REASON_OTHER /* No specific reason. General reason code */ + eSME_REASON_OTHER /* No specific reason. General reason code */ } tRequestFullPowerReason, tExitBmpsReason; @@ -2688,7 +2872,7 @@ typedef struct sSmeDelBAPeerInd // Message Type tANI_U16 mesgType; - tSirMacAddr bssId;//BSSID + tSirMacAddr bssId;//BSSID // Message Length tANI_U16 mesgLen; @@ -2714,7 +2898,7 @@ typedef struct sSmeIbssPeerInd tSirMacAddr peerAddr; tANI_U16 staId; - /*The DPU signatures will be sent eventually to TL to help it determine the + /*The DPU signatures will be sent eventually to TL to help it determine the association to which a packet belongs to*/ /*Unicast DPU signature*/ tANI_U8 ucastSig; @@ -2725,6 +2909,14 @@ typedef struct sSmeIbssPeerInd //Beacon will be appended for new Peer indication. }tSmeIbssPeerInd, *tpSmeIbssPeerInd; +typedef struct sSirIbssPeerInactivityInd +{ + tANI_U8 bssIdx; + tANI_U8 staIdx; + tSirMacAddr peerAddr; +}tSirIbssPeerInactivityInd, *tpSirIbssPeerInactivityInd; + + typedef struct sLimScanChn { tANI_U16 numTimeScan; //how many time this channel is scan @@ -2751,7 +2943,7 @@ typedef struct sLimScanChnInfo typedef struct sSirSmeGetAssocSTAsReq { tANI_U16 messageType; // eWNI_SME_GET_ASSOC_STAS_REQ - tANI_U16 length; + tANI_U16 length; tSirMacAddr bssId; // BSSID tANI_U16 modId; void *pUsrContext; @@ -2762,8 +2954,8 @@ typedef struct sSirSmeGetAssocSTAsReq typedef struct sSmeMaxAssocInd { tANI_U16 mesgType; // eWNI_SME_MAX_ASSOC_EXCEEDED - tANI_U16 mesgLen; - tANI_U8 sessionId; + tANI_U16 mesgLen; + tANI_U8 sessionId; tSirMacAddr peerMac; // the new peer that got rejected due to softap max assoc limit reached } tSmeMaxAssocInd, *tpSmeMaxAssocInd; @@ -2932,7 +3124,7 @@ typedef __ani_attr_pre_packed struct sSirBoardCapabilities #define SIR_WOWL_BCAST_PATTERN_MAX_SIZE 128 #define SIR_WOWL_BCAST_MAX_NUM_PATTERNS 16 -// SME -> PE -> HAL - This is to add WOWL BCAST wake-up pattern. +// SME -> PE -> HAL - This is to add WOWL BCAST wake-up pattern. // SME/HDD maintains the list of the BCAST wake-up patterns. // This is a pass through message for PE typedef struct sSirWowlAddBcastPtrn @@ -2940,7 +3132,7 @@ typedef struct sSirWowlAddBcastPtrn tANI_U8 ucPatternId; // Pattern ID // Pattern byte offset from beginning of the 802.11 packet to start of the // wake-up pattern - tANI_U8 ucPatternByteOffset; + tANI_U8 ucPatternByteOffset; tANI_U8 ucPatternSize; // Non-Zero Pattern size tANI_U8 ucPattern[SIR_WOWL_BCAST_PATTERN_MAX_SIZE]; // Pattern tANI_U8 ucPatternMaskSize; // Non-zero pattern mask size @@ -2953,7 +3145,7 @@ typedef struct sSirWowlAddBcastPtrn } tSirWowlAddBcastPtrn, *tpSirWowlAddBcastPtrn; -// SME -> PE -> HAL - This is to delete WOWL BCAST wake-up pattern. +// SME -> PE -> HAL - This is to delete WOWL BCAST wake-up pattern. // SME/HDD maintains the list of the BCAST wake-up patterns. // This is a pass through message for PE typedef struct sSirWowlDelBcastPtrn @@ -2964,19 +3156,19 @@ typedef struct sSirWowlDelBcastPtrn }tSirWowlDelBcastPtrn, *tpSirWowlDelBcastPtrn; -// SME->PE: Enter WOWLAN parameters +// SME->PE: Enter WOWLAN parameters typedef struct sSirSmeWowlEnterParams { tANI_U8 sessionId; /* Enables/disables magic packet filtering */ - tANI_U8 ucMagicPktEnable; + tANI_U8 ucMagicPktEnable; /* Magic pattern */ tSirMacAddr magicPtrn; /* Enables/disables packet pattern filtering */ - tANI_U8 ucPatternFilteringEnable; + tANI_U8 ucPatternFilteringEnable; #ifdef WLAN_WAKEUP_EVENTS /* This configuration directs the WoW packet filtering to look for EAP-ID @@ -3006,62 +3198,62 @@ typedef struct sSirSmeWowlEnterParams } tSirSmeWowlEnterParams, *tpSirSmeWowlEnterParams; -// PE<->HAL: Enter WOWLAN parameters +// PE<->HAL: Enter WOWLAN parameters typedef struct sSirHalWowlEnterParams { tANI_U8 sessionId; /* Enables/disables magic packet filtering */ - tANI_U8 ucMagicPktEnable; + tANI_U8 ucMagicPktEnable; /* Magic pattern */ tSirMacAddr magicPtrn; - /* Enables/disables packet pattern filtering in firmware. - Enabling this flag enables broadcast pattern matching - in Firmware. If unicast pattern matching is also desired, - ucUcastPatternFilteringEnable flag must be set tot true - as well + /* Enables/disables packet pattern filtering in firmware. + Enabling this flag enables broadcast pattern matching + in Firmware. If unicast pattern matching is also desired, + ucUcastPatternFilteringEnable flag must be set tot true + as well */ tANI_U8 ucPatternFilteringEnable; - /* Enables/disables unicast packet pattern filtering. - This flag specifies whether we want to do pattern match - on unicast packets as well and not just broadcast packets. - This flag has no effect if the ucPatternFilteringEnable + /* Enables/disables unicast packet pattern filtering. + This flag specifies whether we want to do pattern match + on unicast packets as well and not just broadcast packets. + This flag has no effect if the ucPatternFilteringEnable (main controlling flag) is set to false */ - tANI_U8 ucUcastPatternFilteringEnable; + tANI_U8 ucUcastPatternFilteringEnable; - /* This configuration is valid only when magicPktEnable=1. - * It requests hardware to wake up when it receives the + /* This configuration is valid only when magicPktEnable=1. + * It requests hardware to wake up when it receives the * Channel Switch Action Frame. */ tANI_U8 ucWowChnlSwitchRcv; - /* This configuration is valid only when magicPktEnable=1. - * It requests hardware to wake up when it receives the - * Deauthentication Frame. + /* This configuration is valid only when magicPktEnable=1. + * It requests hardware to wake up when it receives the + * Deauthentication Frame. */ tANI_U8 ucWowDeauthRcv; - /* This configuration is valid only when magicPktEnable=1. - * It requests hardware to wake up when it receives the - * Disassociation Frame. + /* This configuration is valid only when magicPktEnable=1. + * It requests hardware to wake up when it receives the + * Disassociation Frame. */ tANI_U8 ucWowDisassocRcv; - /* This configuration is valid only when magicPktEnable=1. + /* This configuration is valid only when magicPktEnable=1. * It requests hardware to wake up when it has missed * consecutive beacons. This is a hardware register - * configuration (NOT a firmware configuration). + * configuration (NOT a firmware configuration). */ tANI_U8 ucWowMaxMissedBeacons; - /* This configuration is valid only when magicPktEnable=1. + /* This configuration is valid only when magicPktEnable=1. * This is a timeout value in units of microsec. It requests * hardware to unconditionally wake up after it has stayed - * in WoWLAN mode for some time. Set 0 to disable this feature. + * in WoWLAN mode for some time. Set 0 to disable this feature. */ tANI_U8 ucWowMaxSleepUsec; @@ -3090,8 +3282,8 @@ typedef struct sSirHalWowlEnterParams #endif // WLAN_WAKEUP_EVENTS /* Status code to be filled by HAL when it sends - * SIR_HAL_WOWL_ENTER_RSP to PE. - */ + * SIR_HAL_WOWL_ENTER_RSP to PE. + */ eHalStatus status; /*BSSID to find the current session @@ -3106,14 +3298,14 @@ typedef struct sSirSmeWowlExitParams } tSirSmeWowlExitParams, *tpSirSmeWowlExitParams; -// PE<->HAL: Exit WOWLAN parameters +// PE<->HAL: Exit WOWLAN parameters typedef struct sSirHalWowlExitParams { tANI_U8 sessionId; /* Status code to be filled by HAL when it sends - * SIR_HAL_WOWL_EXIT_RSP to PE. - */ + * SIR_HAL_WOWL_EXIT_RSP to PE. + */ eHalStatus status; /*BSSIDX to find the current session @@ -3157,7 +3349,7 @@ typedef struct sSirText { typedef struct sSirWPSProbeRspIE { v_U32_t FieldPresent; v_U32_t Version; // Version. 0x10 = version 1.0, 0x11 = etc. - v_U32_t wpsState; // 1 = unconfigured, 2 = configured. + v_U32_t wpsState; // 1 = unconfigured, 2 = configured. v_BOOL_t APSetupLocked; // Must be included if value is TRUE v_BOOL_t SelectedRegistra; //BOOL: indicates if the user has recently activated a Registrar to add an Enrollee. v_U16_t DevicePasswordID; // Device Password ID @@ -3188,7 +3380,7 @@ typedef struct sSirWPSProbeRspIE { typedef struct sSirWPSBeaconIE { v_U32_t FieldPresent; v_U32_t Version; // Version. 0x10 = version 1.0, 0x11 = etc. - v_U32_t wpsState; // 1 = unconfigured, 2 = configured. + v_U32_t wpsState; // 1 = unconfigured, 2 = configured. v_BOOL_t APSetupLocked; // Must be included if value is TRUE v_BOOL_t SelectedRegistra; //BOOL: indicates if the user has recently activated a Registrar to add an Enrollee. v_U16_t DevicePasswordID; // Device Password ID @@ -3224,7 +3416,7 @@ typedef struct sSirUpdateAPWPSIEsReq typedef struct sSirUpdateParams { - tANI_U16 messageType; + tANI_U16 messageType; tANI_U16 length; tANI_U8 sessionId; // Session ID tANI_U8 ssidHidden; // Hide SSID @@ -3233,7 +3425,7 @@ typedef struct sSirUpdateParams //Beacon Interval typedef struct sSirChangeBIParams { - tANI_U16 messageType; + tANI_U16 messageType; tANI_U16 length; tANI_U16 beaconInterval; // Beacon Interval tSirMacAddr bssId; @@ -3280,15 +3472,26 @@ typedef struct sSirSmeProbeReqInd typedef struct sSirUpdateAPWPARSNIEsReq { tANI_U16 messageType; // eWNI_SME_SET_APWPARSNIEs_REQ - tANI_U16 length; + tANI_U16 length; tANI_U16 transactionId; //Transaction ID for cmd tSirMacAddr bssId; // BSSID - tANI_U8 sessionId; //Session ID + tANI_U8 sessionId; //Session ID tSirRSNie APWPARSNIEs; } tSirUpdateAPWPARSNIEsReq, *tpSirUpdateAPWPARSNIEsReq; +#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD +#define SIR_ROAM_MAX_CHANNELS NUM_RF_CHANNELS +#define SIR_ROAM_SCAN_MAX_PB_REQ_SIZE 450 +#define CHANNEL_LIST_STATIC 1 /* Occupied channel list remains static */ +#define CHANNEL_LIST_DYNAMIC_INIT 2 /* Occupied channel list can be learnt after init */ +#define CHANNEL_LIST_DYNAMIC_FLUSH 3 /* Occupied channel list can be learnt after flush */ +#define CHANNEL_LIST_DYNAMIC_UPDATE 4 /* Occupied channel list can be learnt after update */ +#define SIR_ROAM_SCAN_24G_DEFAULT_CH 1 +#define SIR_ROAM_SCAN_5G_DEFAULT_CH 36 +#define SIR_ROAM_SCAN_RESERVED_BYTES 61 +#endif //WLAN_FEATURE_ROAM_SCAN_OFFLOAD -// SME -> HAL - This is the host offload request. +// SME -> HAL - This is the host offload request. #define SIR_IPV4_ARP_REPLY_OFFLOAD 0 #define SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD 1 #define SIR_IPV6_NS_OFFLOAD 2 @@ -3341,7 +3544,7 @@ typedef struct sSirKeepAliveReq { v_U8_t packetType; v_U32_t timePeriod; - tSirIpv4Addr hostIpv4Addr; + tSirIpv4Addr hostIpv4Addr; tSirIpv4Addr destIpv4Addr; tSirMacAddr destMacAddr; tSirMacAddr bssId; @@ -3353,6 +3556,7 @@ typedef struct sSirSmeAddStaSelfReq tANI_U16 mesgType; tANI_U16 mesgLen; tSirMacAddr selfMacAddr; + tVOS_CON_MODE currDeviceMode; tANI_U32 type; tANI_U32 subType; tANI_U8 sessionId; @@ -3382,15 +3586,17 @@ typedef struct sSirSmeDelStaSelfRsp tSirMacAddr selfMacAddr; }tSirSmeDelStaSelfRsp, *tpSirSmeDelStaSelfRsp; -/* Coex Indication defines - - should match WLAN_COEX_IND_DATA_SIZE - should match WLAN_COEX_IND_TYPE_DISABLE_HB_MONITOR +/* Coex Indication defines - + should match WLAN_COEX_IND_DATA_SIZE + should match WLAN_COEX_IND_TYPE_DISABLE_HB_MONITOR should match WLAN_COEX_IND_TYPE_ENABLE_HB_MONITOR */ #define SIR_COEX_IND_DATA_SIZE (4) #define SIR_COEX_IND_TYPE_DISABLE_HB_MONITOR (0) #define SIR_COEX_IND_TYPE_ENABLE_HB_MONITOR (1) #define SIR_COEX_IND_TYPE_SCAN_COMPROMISED (2) #define SIR_COEX_IND_TYPE_SCAN_NOT_COMPROMISED (3) +#define SIR_COEX_IND_TYPE_DISABLE_AGGREGATION_IN_2p4 (4) +#define SIR_COEX_IND_TYPE_ENABLE_AGGREGATION_IN_2p4 (5) typedef struct sSirSmeCoexInd { @@ -3458,87 +3664,127 @@ typedef struct sSirWlanSetRxpFilters tANI_U8 setMcstBcstFilter; }tSirWlanSetRxpFilters,*tpSirWlanSetRxpFilters; +#ifdef FEATURE_CESIUM_PROPRIETARY + +#define ANI_MAX_IBSS_ROUTE_TABLE_ENTRY 100 + +typedef struct sAniDestIpNextHopMacPair +{ + tANI_U8 destIpv4Addr[VOS_IPV4_ADDR_SIZE]; + tANI_U8 nextHopMacAddr[VOS_MAC_ADDR_SIZE]; +}tAniDestIpNextHopMacPair; + +typedef struct sAniIbssRouteTable +{ + tANI_U16 numEntries; + tAniDestIpNextHopMacPair destIpNextHopPair[1]; +}tAniIbssRouteTable; +#endif /* FEATURE_CESIUM_PROPRIETARY */ #ifdef FEATURE_WLAN_SCAN_PNO // // PNO Messages // -// Set PNO +// Set PNO #define SIR_PNO_MAX_NETW_CHANNELS 26 #define SIR_PNO_MAX_NETW_CHANNELS_EX 60 #define SIR_PNO_MAX_SUPP_NETWORKS 16 #define SIR_PNO_MAX_SCAN_TIMERS 10 -#ifdef FEATURE_WLAN_SCAN_PNO + /* TODO: Need to sync max ie len size with FW */ #define SIR_PNO_MAX_IE_LEN 500 -#endif /*size based of dot11 declaration without extra IEs as we will not carry those for PNO*/ -#define SIR_PNO_MAX_PB_REQ_SIZE 450 +#define SIR_PNO_MAX_PB_REQ_SIZE 450 #define SIR_PNO_24G_DEFAULT_CH 1 #define SIR_PNO_5G_DEFAULT_CH 36 -#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD -#define SIR_ROAM_MAX_CHANNELS NUM_RF_CHANNELS -#define SIR_ROAM_SCAN_MAX_PB_REQ_SIZE 450 -#define CHANNEL_LIST_STATIC 1 /* Occupied channel list remains static */ -#define CHANNEL_LIST_DYNAMIC_INIT 2 /* Occupied channel list can be learnt after init */ -#define CHANNEL_LIST_DYNAMIC_FLUSH 3 /* Occupied channel list can be learnt after flush */ -#define CHANNEL_LIST_DYNAMIC_UPDATE 4 /* Occupied channel list can be learnt after update */ -#define SIR_ROAM_SCAN_24G_DEFAULT_CH 1 -#define SIR_ROAM_SCAN_5G_DEFAULT_CH 36 -#define SIR_ROAM_SCAN_RESERVED_BYTES 64 -#endif - typedef enum { SIR_PNO_MODE_IMMEDIATE, SIR_PNO_MODE_ON_SUSPEND, SIR_PNO_MODE_ON_RESUME, - SIR_PNO_MODE_MAX + SIR_PNO_MODE_MAX } eSirPNOMode; -typedef struct +typedef struct { tSirMacSSid ssId; - tANI_U32 authentication; - tANI_U32 encryption; - tANI_U32 bcastNetwType; + tANI_U32 authentication; + tANI_U32 encryption; + tANI_U32 bcastNetwType; tANI_U8 ucChannelCount; tANI_U8 aChannels[SIR_PNO_MAX_NETW_CHANNELS_EX]; tANI_S32 rssiThreshold; -} tSirNetworkType; +} tSirNetworkType; -typedef struct +typedef struct { - tANI_U32 uTimerValue; - tANI_U32 uTimerRepeat; -}tSirScanTimer; + tANI_U32 uTimerValue; + tANI_U32 uTimerRepeat; +}tSirScanTimer; typedef struct { - tANI_U8 ucScanTimersCount; - tSirScanTimer aTimerValues[SIR_PNO_MAX_SCAN_TIMERS]; + tANI_U8 ucScanTimersCount; + tSirScanTimer aTimerValues[SIR_PNO_MAX_SCAN_TIMERS]; } tSirScanTimersType; typedef struct sSirPNOScanReq { tANI_U8 enable; eSirPNOMode modePNO; - tANI_U8 ucNetworksCount; + tANI_U8 ucNetworksCount; tSirNetworkType aNetworks[SIR_PNO_MAX_SUPP_NETWORKS]; tSirScanTimersType scanTimers; tANI_U8 sessionId; - + /*added by SME*/ - tANI_U16 us24GProbeTemplateLen; + tANI_U16 us24GProbeTemplateLen; tANI_U8 p24GProbeTemplate[SIR_PNO_MAX_PB_REQ_SIZE]; - tANI_U16 us5GProbeTemplateLen; - tANI_U8 p5GProbeTemplate[SIR_PNO_MAX_PB_REQ_SIZE]; + tANI_U16 us5GProbeTemplateLen; + tANI_U8 p5GProbeTemplate[SIR_PNO_MAX_PB_REQ_SIZE]; } tSirPNOScanReq, *tpSirPNOScanReq; +typedef struct sSirSetRSSIFilterReq +{ + tANI_U8 rssiThreshold; +} tSirSetRSSIFilterReq, *tpSirSetRSSIFilterReq; + + +// Update Scan Params +typedef struct { + tANI_U8 b11dEnabled; + tANI_U8 b11dResolved; + tANI_U8 ucChannelCount; + tANI_U8 aChannels[SIR_PNO_MAX_NETW_CHANNELS_EX]; + tANI_U16 usPassiveMinChTime; + tANI_U16 usPassiveMaxChTime; + tANI_U16 usActiveMinChTime; + tANI_U16 usActiveMaxChTime; + tANI_U8 ucCBState; +} tSirUpdateScanParams, * tpSirUpdateScanParams; + +// Preferred Network Found Indication +typedef struct +{ + tANI_U16 mesgType; + tANI_U16 mesgLen; + /* Network that was found with the highest RSSI*/ + tSirMacSSid ssId; + /* Indicates the RSSI */ + tANI_U8 rssi; + /* Length of the beacon or probe response + * corresponding to the candidate found by PNO */ + tANI_U32 frameLength; + /* Index to memory location where the contents of + * beacon or probe response frame will be copied */ + tANI_U8 data[1]; +} tSirPrefNetworkFoundInd, *tpSirPrefNetworkFoundInd; +#endif //FEATURE_WLAN_SCAN_PNO + #ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD typedef struct { @@ -3561,6 +3807,7 @@ typedef struct SirMobilityDomainInfo typedef struct sSirRoamOffloadScanReq { eAniBoolean RoamScanOffloadEnabled; + eAniBoolean MAWCEnabled; tANI_S8 LookupThreshold; tANI_U8 RoamRssiDiff; tANI_U8 ChannelCacheType; @@ -3578,51 +3825,23 @@ typedef struct sSirRoamOffloadScanReq tANI_U8 p24GProbeTemplate[SIR_ROAM_SCAN_MAX_PB_REQ_SIZE]; tANI_U16 us5GProbeTemplateLen; tANI_U8 p5GProbeTemplate[SIR_ROAM_SCAN_MAX_PB_REQ_SIZE]; - tANI_U8 ReservedBytes[SIR_ROAM_SCAN_RESERVED_BYTES]; /*This is to add any additional data in future - without changing the interface params on Host - and firmware.*/ + tANI_U8 ReservedBytes[SIR_ROAM_SCAN_RESERVED_BYTES]; + /*ReservedBytes is to add any further params in future + without changing the interface params on Host + and firmware.The firmware right now checks + if the size of this structure matches and then + proceeds with the processing of the command. + So, in future, if there is any need to add + more params, pick the memory from reserved + bytes and keep deducting the reserved bytes + by the amount of bytes picked.*/ + tANI_U8 nProbes; + tANI_U16 HomeAwayTime; tSirRoamNetworkType ConnectedNetwork; tSirMobilityDomainInfo MDID; tANI_U8 sessionId; } tSirRoamOffloadScanReq, *tpSirRoamOffloadScanReq; -#endif - -typedef struct sSirSetRSSIFilterReq -{ - tANI_U8 rssiThreshold; -} tSirSetRSSIFilterReq, *tpSirSetRSSIFilterReq; - - -// Update Scan Params -typedef struct { - tANI_U8 b11dEnabled; - tANI_U8 b11dResolved; - tANI_U8 ucChannelCount; - tANI_U8 aChannels[SIR_PNO_MAX_NETW_CHANNELS_EX]; - tANI_U16 usPassiveMinChTime; - tANI_U16 usPassiveMaxChTime; - tANI_U16 usActiveMinChTime; - tANI_U16 usActiveMaxChTime; - tANI_U8 ucCBState; -} tSirUpdateScanParams, * tpSirUpdateScanParams; - -// Preferred Network Found Indication -typedef struct -{ - tANI_U16 mesgType; - tANI_U16 mesgLen; - /* Network that was found with the highest RSSI*/ - tSirMacSSid ssId; - /* Indicates the RSSI */ - tANI_U8 rssi; - /* Length of the beacon or probe response - * corresponding to the candidate found by PNO */ - tANI_U32 frameLength; - /* Index to memory location where the contents of - * beacon or probe response frame will be copied */ - tANI_U8 data[1]; -} tSirPrefNetworkFoundInd, *tpSirPrefNetworkFoundInd; -#endif // FEATURE_WLAN_SCAN_PNO +#endif //WLAN_FEATURE_ROAM_SCAN_OFFLOAD #define SIR_NOCHANGE_POWER_VALUE 0xFFFFFFFF @@ -3630,20 +3849,20 @@ typedef struct typedef enum { eSIR_IGNORE_DTIM = 1, - eSIR_LISTEN_INTERVAL = 2, - eSIR_MCAST_BCAST_FILTER = 3, - eSIR_ENABLE_BET = 4, - eSIR_BET_INTERVAL = 5 + eSIR_LISTEN_INTERVAL = 2, + eSIR_MCAST_BCAST_FILTER = 3, + eSIR_ENABLE_BET = 4, + eSIR_BET_INTERVAL = 5 }tPowerParamType; //Power Parameters Value s -typedef struct +typedef struct { /* Ignore DTIM */ tANI_U32 uIgnoreDTIM; /* DTIM Period */ - tANI_U32 uDTIMPeriod; + tANI_U32 uDTIMPeriod; /* Listen Interval */ tANI_U32 uListenInterval; @@ -3655,7 +3874,7 @@ typedef struct tANI_U32 uEnableBET; /* Beacon Early Termination Interval */ - tANI_U32 uBETInterval; + tANI_U32 uBETInterval; /* MAX LI for modulated DTIM */ tANI_U32 uMaxLIModulatedDTIM; @@ -3678,8 +3897,8 @@ typedef struct sSirTxPerTrackingParam #define SIR_MAC_ADDR_LEN 6 #define SIR_MAX_FILTER_TEST_DATA_LEN 8 #define SIR_MAX_NUM_MULTICAST_ADDRESS 240 -#define SIR_MAX_NUM_FILTERS 20 -#define SIR_MAX_NUM_TESTS_PER_FILTER 10 +#define SIR_MAX_NUM_FILTERS 20 +#define SIR_MAX_NUM_TESTS_PER_FILTER 10 // // Receive Filter Parameters @@ -3692,7 +3911,7 @@ typedef enum SIR_RCV_FILTER_TYPE_MAX_ENUM_SIZE }eSirReceivePacketFilterType; -typedef enum +typedef enum { SIR_FILTER_HDR_TYPE_INVALID, SIR_FILTER_HDR_TYPE_MAC, @@ -3703,7 +3922,7 @@ typedef enum SIR_FILTER_HDR_TYPE_MAX }eSirRcvPktFltProtocolType; -typedef enum +typedef enum { SIR_FILTER_CMP_TYPE_INVALID, SIR_FILTER_CMP_TYPE_EQUAL, @@ -3718,20 +3937,20 @@ typedef struct sSirRcvPktFilterFieldParams eSirRcvPktFltProtocolType protocolLayer; eSirRcvPktFltCmpFlagType cmpFlag; /* Length of the data to compare */ - tANI_U16 dataLength; + tANI_U16 dataLength; /* from start of the respective frame header */ - tANI_U8 dataOffset; + tANI_U8 dataOffset; /* Reserved field */ - tANI_U8 reserved; + tANI_U8 reserved; /* Data to compare */ tANI_U8 compareData[SIR_MAX_FILTER_TEST_DATA_LEN]; /* Mask to be applied on the received packet data before compare */ - tANI_U8 dataMask[SIR_MAX_FILTER_TEST_DATA_LEN]; + tANI_U8 dataMask[SIR_MAX_FILTER_TEST_DATA_LEN]; }tSirRcvPktFilterFieldParams, *tpSirRcvPktFilterFieldParams; typedef struct sSirRcvPktFilterCfg { - tANI_U8 filterId; + tANI_U8 filterId; eSirReceivePacketFilterType filterType; tANI_U32 numFieldParams; tANI_U32 coalesceTime; @@ -3753,7 +3972,7 @@ typedef struct sSirRcvFltPktMatchRsp { tANI_U16 mesgType; tANI_U16 mesgLen; - + /* Success or Failure */ tANI_U32 status; tSirRcvFltPktMatchCnt filterMatchCnt[SIR_MAX_NUM_FILTERS]; @@ -3802,7 +4021,7 @@ typedef struct sAniBtAmpLogLinkReq tANI_U16 msgLen; // length of the entire request tANI_U8 sessionId; //sme Session Id void *btampHandle; //AMP context - + } tAniBtAmpLogLinkReq, *tpAniBtAmpLogLinkReq; #ifdef WLAN_FEATURE_GTK_OFFLOAD @@ -3812,7 +4031,7 @@ typedef struct sAniBtAmpLogLinkReq typedef struct { tANI_U32 ulFlags; /* optional flags */ - tANI_U8 aKCK[16]; /* Key confirmation key */ + tANI_U8 aKCK[16]; /* Key confirmation key */ tANI_U8 aKEK[16]; /* key encryption key */ tANI_U64 ullKeyReplayCounter; /* replay counter */ tSirMacAddr bssId; @@ -3837,10 +4056,10 @@ typedef struct #ifdef WLAN_WAKEUP_EVENTS /*--------------------------------------------------------------------------- - tSirWakeReasonInd + tSirWakeReasonInd ---------------------------------------------------------------------------*/ typedef struct -{ +{ tANI_U16 mesgType; tANI_U16 mesgLen; tANI_U32 ulReason; /* see tWakeReasonType */ @@ -3850,12 +4069,12 @@ typedef struct will be less than the actual length */ tANI_U32 ulActualDataLen; /* actual length of data */ tANI_U8 aDataStart[1]; /* variable length start of data (length == storedDataLen) - see specific wake type */ + see specific wake type */ } tSirWakeReasonInd, *tpSirWakeReasonInd; #endif // WLAN_WAKEUP_EVENTS /*--------------------------------------------------------------------------- - sAniSetTmLevelReq + sAniSetTmLevelReq ---------------------------------------------------------------------------*/ typedef struct sAniSetTmLevelReq { @@ -3923,6 +4142,33 @@ typedef struct sSirTdlsAddStaRsp tANI_U8 bcastSig; eTdlsAddOper tdlsAddOper; } tSirTdlsAddStaRsp ; + +/* TDLS Request struct SME-->PE */ +typedef struct +{ + tANI_U16 messageType; // eWNI_SME_TDLS_LINK_ESTABLISH_REQ + tANI_U16 length; + tANI_U8 sessionId; // Session ID + tANI_U16 transactionId; // Transaction ID for cmd + tANI_U8 uapsdQueues; // Peer's uapsd Queues Information + tANI_U8 maxSp; // Peer's Supported Maximum Service Period + tANI_U8 isBufSta; // Does Peer Support as Buffer Station. + tANI_U8 isResponder; // Is Peer a responder. + tSirMacAddr bssid; // For multi-session, for PE to locate peSession ID + tSirMacAddr peerMac; +}tSirTdlsLinkEstablishReq, *tpSirTdlsLinkEstablishReq; + +/* TDLS Request struct SME-->PE */ +typedef struct +{ + tANI_U16 messageType; // eWNI_SME_TDLS_LINK_ESTABLISH_RSP + tANI_U16 length; + tANI_U8 sessionId; // Session ID + tANI_U16 transactionId; // Transaction ID for cmd + tSirResultCodes statusCode; + tSirMacAddr peerMac; +}tSirTdlsLinkEstablishReqRsp, *tpSirTdlsLinkEstablishReqRsp; + /* TDLS Request struct SME-->PE */ typedef struct sSirTdlsDelStaReq { @@ -3959,6 +4205,16 @@ typedef struct sSirTdlsDelAllPeerInd tANI_U16 length; tANI_U8 sessionId; // Session ID } tSirTdlsDelAllPeerInd, *tpSirTdlsDelAllPeerInd; +#ifdef FEATURE_WLAN_TDLS_DISAPPEAR_AP +typedef struct sSirTdlsDisappearAPInd +{ + tANI_U16 messageType; + tANI_U16 length; + tANI_U8 sessionId; // Session ID + tANI_U16 staId; + tSirMacAddr staAddr; +} tSirTdlsDisappearAPInd, *tpSirTdlsDisappearAPInd; +#endif typedef struct sSirMgmtTxCompletionInd { tANI_U16 messageType; @@ -4115,9 +4371,9 @@ typedef struct sSirTdlsLinkEstablishInd tANI_U8 ptiTemplateLen; tANI_U8 ptiTemplateBuf[64]; tANI_U8 extCapability[8]; -/* This will be part of PTI template when sent by PE +/* This will be part of PTI template when sent by PE tANI_U8 linkIdentifier[20]; -*/ +*/ } tSirTdlsLinkEstablishInd, *tpSirTdlsLinkEstablishInd; typedef struct sSirTdlsLinkTeardownInd @@ -4164,6 +4420,16 @@ typedef enum { P2P_SCAN_TYPE_LISTEN /* P2P Listen */ }tSirP2pScanType; +typedef struct sAniHandoffReq +{ + // Common for all types are requests + tANI_U16 msgType; // message type is same as the request type + tANI_U16 msgLen; // length of the entire request + tANI_U8 sessionId; + tANI_U8 bssid[WNI_CFG_BSSID_LEN]; + tANI_U8 channel; +} tAniHandoffReq, *tpAniHandoffReq; + typedef struct sSirScanOffloadReq { tANI_U8 sessionId; tSirMacAddr bssId; @@ -4251,6 +4517,283 @@ typedef struct sSirPsReqData tSirAddonPsReq addOnReq; } tSirPsReqData,*tpSirPsReqData; +#ifdef FEATURE_WLAN_LPHB +#define SIR_LPHB_FILTER_LEN 64 + +typedef enum +{ + LPHB_SET_EN_PARAMS_INDID, + LPHB_SET_TCP_PARAMS_INDID, + LPHB_SET_TCP_PKT_FILTER_INDID, + LPHB_SET_UDP_PARAMS_INDID, + LPHB_SET_UDP_PKT_FILTER_INDID, + LPHB_SET_NETWORK_INFO_INDID, +} LPHBIndType; + +typedef struct sSirLPHBEnableStruct +{ + v_U8_t enable; + v_U8_t item; + v_U8_t session; +} tSirLPHBEnableStruct; + +typedef struct sSirLPHBTcpParamStruct +{ + v_U32_t srv_ip; + v_U32_t dev_ip; + v_U16_t src_port; + v_U16_t dst_port; + v_U16_t timeout; + v_U8_t session; + tSirMacAddr gateway_mac; + uint16 timePeriodSec; // in seconds + uint32 tcpSn; +} tSirLPHBTcpParamStruct; + +typedef struct sSirLPHBTcpFilterStruct +{ + v_U16_t length; + v_U8_t offset; + v_U8_t session; + v_U8_t filter[SIR_LPHB_FILTER_LEN]; +} tSirLPHBTcpFilterStruct; + +typedef struct sSirLPHBUdpParamStruct +{ + v_U32_t srv_ip; + v_U32_t dev_ip; + v_U16_t src_port; + v_U16_t dst_port; + v_U16_t interval; + v_U16_t timeout; + v_U8_t session; + tSirMacAddr gateway_mac; +} tSirLPHBUdpParamStruct; + +typedef struct sSirLPHBUdpFilterStruct +{ + v_U16_t length; + v_U8_t offset; + v_U8_t session; + v_U8_t filter[SIR_LPHB_FILTER_LEN]; +} tSirLPHBUdpFilterStruct; + +typedef struct sSirLPHBReq +{ + v_U16_t cmd; + v_U16_t dummy; + union + { + tSirLPHBEnableStruct lphbEnableReq; + tSirLPHBTcpParamStruct lphbTcpParamReq; + tSirLPHBTcpFilterStruct lphbTcpFilterReq; + tSirLPHBUdpParamStruct lphbUdpParamReq; + tSirLPHBUdpFilterStruct lphbUdpFilterReq; + } params; +} tSirLPHBReq; + +typedef struct sSirLPHBInd +{ + v_U8_t sessionIdx; + v_U8_t protocolType; /*TCP or UDP*/ + v_U8_t eventReason; +} tSirLPHBInd; +#endif /* FEATURE_WLAN_LPHB */ + +typedef struct sSirAddPeriodicTxPtrn +{ + /* MAC Address for the adapter */ + tSirMacAddr macAddress; + + tANI_U8 ucPtrnId; // Pattern ID + tANI_U16 ucPtrnSize; // Pattern size + tANI_U32 usPtrnIntervalMs; // In msec + tANI_U8 ucPattern[PERIODIC_TX_PTRN_MAX_SIZE]; // Pattern buffer +} tSirAddPeriodicTxPtrn, *tpSirAddPeriodicTxPtrn; + +typedef struct sSirDelPeriodicTxPtrn +{ + /* MAC Address for the adapter */ + tSirMacAddr macAddress; + + /* Bitmap of pattern IDs that need to be deleted */ + tANI_U32 ucPatternIdBitmap; +} tSirDelPeriodicTxPtrn, *tpSirDelPeriodicTxPtrn; + +#if defined WLAN_FEATURE_RELIABLE_MCAST + +#define SIR_RMC_NUM_MAX_LEADERS 8 /* HAL_NUM_MAX_LEADERS */ +typedef struct sSirSetRMCReq +{ + tANI_U16 msgType; + tANI_U16 msgLen; + tSirMacAddr mcastTransmitter; +} tSirSetRMCReq, *tpSirSetRMCReq; + +typedef struct sSirRMCInfo +{ + tANI_U32 dialogToken; + tANI_U8 action; + tSirMacAddr mcastLeader; +} tSirRMCInfo, *tpSirRMCInfo; + +typedef struct sSirRmcLeaderSelectInd +{ + tANI_U16 status; + tSirMacAddr mcastTransmitter; + tSirMacAddr mcastGroup; + tSirMacAddr leader[SIR_RMC_NUM_MAX_LEADERS]; +} tSirRmcLeaderSelectInd, *tpSirRmcLeaderSelectInd; + +typedef struct sSirRmcBecomeLeaderInd +{ + tANI_U16 status; + tSirMacAddr mcastTransmitter; + tSirMacAddr mcastGroup; +} tSirRmcBecomeLeaderInd, *tpSirRmcBecomeLeaderInd; + +typedef struct sSirRmcLeaderReq +{ + // Common for all types are requests + tANI_U16 msgType; // message type is same as the request type + tANI_U16 msgLen; // length of the entire request + tANI_U8 cmd; // tLeaderReqCmdType + tSirMacAddr mcastTransmitter; + tSirMacAddr mcastGroup; + tSirMacAddr blacklist[SIR_RMC_NUM_MAX_LEADERS]; +} tSirRmcLeaderReq, *tpSirRmcLeaderReq; + +typedef struct sSirRmcUpdateInd +{ + // Common for all types are requests + tANI_U16 msgType; // message type is same as the request type + tANI_U16 msgLen; // length of the entire request + tANI_U8 indication; // tLbpUpdateIndType + tANI_U8 role; // tLbpRoleType + tSirMacAddr mcastTransmitter; + tSirMacAddr mcastGroup; + tSirMacAddr mcastLeader; + tSirMacAddr leader[SIR_RMC_NUM_MAX_LEADERS]; +} tSirRmcUpdateInd, *tpSirRmcUpdateInd; + +#endif /* WLAN_FEATURE_RELIABLE_MCAST */ + +#ifdef FEATURE_CESIUM_PROPRIETARY +/*--------------------------------------------------------------------------- +* tSirIbssGetPeerInfoReqParams +*--------------------------------------------------------------------------*/ +typedef struct +{ + tANI_BOOLEAN allPeerInfoReqd; // If set, all IBSS peers stats are reported + tANI_U8 staIdx; // If allPeerInfoReqd is not set, only stats + // of peer with staIdx is reported +}tSirIbssGetPeerInfoReqParams, *tpSirIbssGetPeerInfoReqParams; + +/*--------------------------------------------------------------------------- +* tSirIbssGetPeerInfoParams +*--------------------------------------------------------------------------*/ +typedef struct +{ + tANI_U8 staIdx; //StaIdx + tANI_U32 txRate; //Tx Rate + tANI_U32 mcsIndex; //MCS Index + tANI_U32 txRateFlags; //TxRate Flags + tANI_S8 rssi; //RSSI +}tSirIbssPeerInfoParams; + +typedef struct +{ + tANI_U32 status; + tANI_U8 numPeers; + tSirIbssPeerInfoParams peerInfoParams[32]; +}tSirPeerInfoRspParams, *tpSirIbssPeerInfoRspParams; + +/*--------------------------------------------------------------------------- +* tSirIbssGetPeerInfoRspParams +*--------------------------------------------------------------------------*/ +typedef struct +{ + tANI_U16 mesgType; + tANI_U16 mesgLen; + tSirPeerInfoRspParams ibssPeerInfoRspParams; +} tSirIbssGetPeerInfoRspParams, *tpSirIbssGetPeerInfoRspParams; +#endif /* FEATURE_CESIUM_PROPRIETARY */ + +#ifdef FEATURE_WLAN_BATCH_SCAN +// Set batch scan resposne from FW +typedef struct +{ + /*maximum number of scans which FW can cache*/ + tANI_U32 nScansToBatch; +} tSirSetBatchScanRsp, *tpSirSetBatchScanRsp; + +// Set batch scan request to FW +typedef struct +{ + tANI_U32 scanFrequency; /* how frequent to do scan - default 30Sec*/ + tANI_U32 numberOfScansToBatch; /* number of scans to batch */ + tANI_U32 bestNetwork; /* best networks in terms of rssi */ + tANI_U8 rfBand; /* band to scan : + 0 ->both Band, 1->2.4Ghz Only + and 2-> 5GHz Only */ + tANI_U32 rtt; /* set if required to do RTT it is not + supported in current version */ +} tSirSetBatchScanReq, *tpSirSetBatchScanReq; + + +// Stop batch scan request to FW +typedef struct +{ + tANI_U32 param; +} tSirStopBatchScanInd, *tpSirStopBatchScanInd; + +// Trigger batch scan result indication to FW +typedef struct +{ + tANI_U32 param; +} tSirTriggerBatchScanResultInd, *tpSirTriggerBatchScanResultInd; + +// Batch scan result indication from FW +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 bssid[6]; /* BSSID */ + tANI_U8 ssid[32]; /* SSID */ + tANI_U8 ch; /* Channel */ + tANI_U8 rssi; /* RSSI or Level */ + /*Timestamp when Network was found. Used to calculate age based on timestamp + in GET_RSP msg header */ + tANI_U32 timestamp; +} tSirBatchScanNetworkInfo, *tpSirBatchScanNetworkInfo; + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U32 scanId; /* Scan List ID. */ + /*No of AP in a Scan Result. Should be same as bestNetwork in SET_REQ msg*/ + tANI_U32 numNetworksInScanList; + /*Variable data ptr: Number of AP in Scan List*/ + /*Following numNetworkInScanList is data of type tSirBatchScanNetworkInfo + *of sizeof(tSirBatchScanNetworkInfo) * numNetworkInScanList */ + tANI_U8 scanList[1]; +} tSirBatchScanList, *tpSirBatchScanList; + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U32 timestamp; + tANI_U32 numScanLists; + boolean isLastResult; + /* Variable Data ptr: Number of Scan Lists*/ + /* following isLastResult is data of type tSirBatchScanList + * of sizeof(tSirBatchScanList) * numScanLists*/ + tANI_U8 scanResults[1]; +} tSirBatchScanResultIndParam, *tpSirBatchScanResultIndParam; + +#endif // FEATURE_WLAN_BATCH_SCAN + +typedef struct +{ + tANI_U16 mesgType; + tANI_U16 mesgLen; +} tSirReadyToSuspendInd, *tpSirReadyToSuspendInd; typedef struct sSirRateUpdateInd { tANI_U8 nss; /* 0: 1x1, 1: 2x2 */ @@ -4294,10 +4837,4 @@ typedef struct sSirRateUpdateInd } tSirRateUpdateInd, *tpSirRateUpdateInd; -typedef struct -{ - tANI_U16 mesgType; - tANI_U16 mesgLen; -} tSirReadyToSuspendInd, *tpSirReadyToSuspendInd; - #endif /* __SIR_API_H */ diff --git a/CORE/MAC/inc/sirMacProtDef.h b/CORE/MAC/inc/sirMacProtDef.h index 4c4b1183fba1..76714369dd53 100644 --- a/CORE/MAC/inc/sirMacProtDef.h +++ b/CORE/MAC/inc/sirMacProtDef.h @@ -381,7 +381,11 @@ #define SIR_MAC_EXTENDED_RATE_EID 50 #define SIR_MAC_EXTENDED_RATE_EID_MIN 0 #define SIR_MAC_EXTENDED_RATE_EID_MAX 255 -// reserved 51-220 +// reserved 51-69 +#define SIR_MAC_RM_ENABLED_CAPABILITY_EID 70 +#define SIR_MAC_RM_ENABLED_CAPABILITY_EID_MIN 5 +#define SIR_MAC_RM_ENABLED_CAPABILITY_EID_MAX 5 +// reserved 71-220 #define SIR_MAC_WPA_EID 221 #define SIR_MAC_WPA_EID_MIN 0 #define SIR_MAC_WPA_EID_MAX 255 @@ -615,15 +619,20 @@ #endif #define SIR_MAC_SET_GROUP_ACK(x) (((tANI_U16) x) | 0x4000) +#ifdef WLAN_FEATURE_11AC +#define SIR_MAC_GET_VHT_MAX_AMPDU_EXPO(x) ((((tANI_U32) x) & 0x03800000) >> 23) +#endif + // bitname must be one of the above, eg ESS, CF_POLLABLE, etc. #define SIR_MAC_CLEAR_CAPABILITY(u16value, bitname) \ ((u16value) &= (~(SIR_MAC_SET_##bitname(0)))) #define IS_WES_MODE_ENABLED(x) \ ((x)->roam.configParam.isWESModeEnabled) -#ifdef WLAN_FEATURE_11AC -#define SIR_MAC_GET_VHT_MAX_AMPDU_EXPO(x) ((((tANI_U32) x) & 0x03800000) >> 23) -#endif + +#define BA_RECIPIENT 1 +#define BA_INITIATOR 2 +#define BA_BOTH_DIRECTIONS 3 /// Status Code (present in Management response frames) enum @@ -747,7 +756,10 @@ typedef enum eSirMacReasonCodes eSIR_MAC_TDLS_TEARDOWN_PEER_UNREACHABLE = 25, //TDLS direct link teardown due to TDLS peer STA unreachable via the TDLS direct link eSIR_MAC_TDLS_TEARDOWN_UNSPEC_REASON = 26, //TDLS direct link teardown for unspecified reason #endif - // reserved 27 - 31 + // reserved 27 - 30 +#ifdef WLAN_FEATURE_11W + eSIR_MAC_ROBUST_MGMT_FRAMES_POLICY_VIOLATION = 31, //Robust management frames policy violation +#endif eSIR_MAC_QOS_UNSPECIFIED_REASON = 32, //Disassociated for unspecified, QoS-related reason eSIR_MAC_QAP_NO_BANDWIDTH_REASON = 33, //Disassociated because QoS AP lacks sufficient bandwidth for this QoS STA eSIR_MAC_XS_UNACKED_FRAMES_REASON = 34, //Disassociated because excessive number of frames need to be acknowledged, but are not @@ -1067,6 +1079,86 @@ typedef __ani_attr_pre_packed struct sSirMacWpaInfo tANI_U8 info[SIR_MAC_MAX_IE_LENGTH]; } __ani_attr_packed tSirMacWpaInfo, *tpSirMacWpaInfo, tSirMacRsnInfo, *tpSirMacRsnInfo; +typedef __ani_attr_pre_packed struct sSirMacFHParamSet +{ + tANI_U16 dwellTime; + tANI_U8 hopSet; + tANI_U8 hopPattern; + tANI_U8 hopIndex; +} tSirMacFHParamSet, *tpSirMacFHParamSet; + +typedef __ani_attr_pre_packed struct sSirMacIBSSParams +{ + tANI_U16 atim; +} tSirMacIBSSParams, *tpSirMacIBSSParams; + +typedef __ani_attr_pre_packed struct sSirMacRRMEnabledCap +{ +#ifndef ANI_LITTLE_BIT_ENDIAN + tANI_U8 reserved: 6; + tANI_U8 AntennaInformation: 1; + tANI_U8 BSSAvailAdmission: 1; + tANI_U8 BssAvgAccessDelay: 1; + tANI_U8 RSNIMeasurement: 1; + tANI_U8 RCPIMeasurement: 1; + tANI_U8 NeighborTSFOffset: 1; + tANI_U8 MeasurementPilotEnabled: 1; + tANI_U8 MeasurementPilot: 3; + tANI_U8 nonOperatinChanMax: 3; + tANI_U8 operatingChanMax: 3; + tANI_U8 RRMMIBEnabled: 1; + tANI_U8 APChanReport: 1; + tANI_U8 triggeredTCM: 1; + tANI_U8 TCMCapability: 1; + tANI_U8 LCIAzimuth: 1; + tANI_U8 LCIMeasurement: 1; + tANI_U8 statistics: 1; + tANI_U8 NoiseHistogram: 1; + tANI_U8 ChannelLoad: 1; + tANI_U8 FrameMeasurement: 1; + tANI_U8 BeaconRepCond: 1; + tANI_U8 BeaconTable: 1; + tANI_U8 BeaconActive: 1; + tANI_U8 BeaconPassive: 1; + tANI_U8 repeated: 1; + tANI_U8 parallel: 1; + tANI_U8 NeighborRpt: 1; + tANI_U8 LinkMeasurement: 1; + tANI_U8 present; +#else + tANI_U8 present; + tANI_U8 LinkMeasurement: 1; + tANI_U8 NeighborRpt: 1; + tANI_U8 parallel: 1; + tANI_U8 repeated: 1; + tANI_U8 BeaconPassive: 1; + tANI_U8 BeaconActive: 1; + tANI_U8 BeaconTable: 1; + tANI_U8 BeaconRepCond: 1; + tANI_U8 FrameMeasurement: 1; + tANI_U8 ChannelLoad: 1; + tANI_U8 NoiseHistogram: 1; + tANI_U8 statistics: 1; + tANI_U8 LCIMeasurement: 1; + tANI_U8 LCIAzimuth: 1; + tANI_U8 TCMCapability: 1; + tANI_U8 triggeredTCM: 1; + tANI_U8 APChanReport: 1; + tANI_U8 RRMMIBEnabled: 1; + tANI_U8 operatingChanMax: 3; + tANI_U8 nonOperatinChanMax: 3; + tANI_U8 MeasurementPilot: 3; + tANI_U8 MeasurementPilotEnabled: 1; + tANI_U8 NeighborTSFOffset: 1; + tANI_U8 RCPIMeasurement: 1; + tANI_U8 RSNIMeasurement: 1; + tANI_U8 BssAvgAccessDelay: 1; + tANI_U8 BSSAvailAdmission: 1; + tANI_U8 AntennaInformation: 1; + tANI_U8 reserved: 6; +#endif +} tSirMacRRMEnabledCap, *tpSirMacRRMEnabledCap; + /* ---------------- * EDCA Profiles @@ -2333,6 +2425,18 @@ typedef __ani_attr_pre_packed struct sSirMacVendorSpecificFrameHdr } __ani_attr_packed tSirMacVendorSpecificFrameHdr, *tpSirMacVendorSpecificFrameHdr; #endif +#if defined (WLAN_FEATURE_RELIABLE_MCAST) +typedef __ani_attr_pre_packed struct sSirMacOxygenNetworkFrameHdr +{ + tANI_U8 category; + tANI_U8 Oui[3]; + tANI_U8 MagicCode[6]; + tANI_U8 version; + tANI_U8 actionID; + tANI_U32 dialogToken; +} __ani_attr_packed tSirMacOxygenNetworkFrameHdr, *tpSirMacOxygenNetworkFrameHdr; +#endif /* WLAN_FEATURE_RELIABLE_MCAST */ + typedef __ani_attr_pre_packed struct sSirMacVendorSpecificPublicActionFrameHdr { tANI_U8 category; @@ -2751,4 +2855,28 @@ typedef __ani_attr_pre_packed struct sSirPhy11aHdr } __ani_attr_packed tSirPhy11aHdr, *tpSirPhy11aHdr; #define SIR_MAC_MIN_IE_LEN 2 // Minimum IE length for IE validation + +#if defined WLAN_FEATURE_RELIABLE_MCAST + +// Reliable Multicast action codes +#define SIR_MAC_RMC_ENABLE_REQ 0 +#define SIR_MAC_RMC_DISABLE_REQ 1 +#define SIR_MAC_RMC_LEADER_INFORM_SELECTED 2 +#define SIR_MAC_RMC_LEADER_INFORM_CANCELLED 3 + +// Reliable multicast protocol version +#define SIR_MAC_RMC_VER 0x01 + +// Organization Identifier +#define SIR_MAC_RMC_OUI "\x00\x16\x32" +#define SIR_MAC_RMC_OUI_SIZE 3 + +// Magic code for Oxygen network +#define SIR_MAC_OXYGEN_MAGIC_CODE "OXYGEN" +#define SIR_MAC_OXYGEN_MAGIC_CODE_SIZE 6 + +#define SIR_MAC_RMC_MCAST_ADDRESS "\x01\x00\x5E\x00\x02\x0A" + +#endif /* WLAN_FEATURE_RELIABLE_MCAST */ + #endif /* __MAC_PROT_DEFS_H */ diff --git a/CORE/MAC/inc/wniApi.h b/CORE/MAC/inc/wniApi.h index 2fecff450451..d80aba337045 100644 --- a/CORE/MAC/inc/wniApi.h +++ b/CORE/MAC/inc/wniApi.h @@ -230,7 +230,9 @@ enum eWniMsgTypes eWNI_SME_ACTION_FRAME_SEND_CNF, eWNI_SME_ABORT_REMAIN_ON_CHAN_IND, eWNI_SME_UPDATE_NOA, + eWNI_SME_CLEAR_DFS_CHANNEL_LIST, eWNI_SME_PRE_CHANNEL_SWITCH_FULL_POWER, + eWNI_SME_GET_SNR_REQ, //General Power Save Messages eWNI_PMC_MSG_TYPES_BEGIN, eWNI_PMC_PWR_SAVE_CFG, @@ -306,6 +308,7 @@ enum eWniMsgTypes eWNI_SME_TX_PER_HIT_IND, eWNI_SME_CHANGE_COUNTRY_CODE, + eWNI_SME_GENERIC_CHANGE_COUNTRY_CODE, eWNI_SME_PRE_SWITCH_CHL_IND, eWNI_SME_POST_SWITCH_CHL_IND, @@ -329,6 +332,8 @@ enum eWniMsgTypes eWNI_SME_TDLS_DEL_STA_IND, eWNI_SME_TDLS_DEL_ALL_PEER_IND, eWNI_SME_MGMT_FRM_TX_COMPLETION_IND, + eWNI_SME_TDLS_LINK_ESTABLISH_REQ, + eWNI_SME_TDLS_LINK_ESTABLISH_RSP, #endif //NOTE: If you are planning to add more mesages, please make sure that //SIR_LIM_ITC_MSG_TYPES_BEGIN is moved appropriately. It is set as @@ -357,7 +362,24 @@ enum eWniMsgTypes #ifdef WLAN_FEATURE_GTK_OFFLOAD eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP, #endif // WLAN_FEATURE_GTK_OFFLOAD - eWNI_SME_CANDIDATE_FOUND_IND, //ROAM candidate indication from FW + eWNI_SME_CANDIDATE_FOUND_IND, /*ROAM candidate indication from FW*/ + eWNI_SME_HANDOFF_REQ,/*upper layer requested handoff to driver in STA mode*/ + eWNI_SME_ROAM_SCAN_OFFLOAD_RSP,/*Fwd the LFR scan offload rsp from FW to SME*/ +#ifdef FEATURE_WLAN_LPHB + eWNI_SME_LPHB_IND, +#endif /* FEATURE_WLAN_LPHB */ +#if defined WLAN_FEATURE_RELIABLE_MCAST + eWNI_SME_ENABLE_RMC_REQ, + eWNI_SME_DISABLE_RMC_REQ, +#endif /* WLAN_FEATURE_RELIABLE_MCAST */ + +#ifdef FEATURE_CESIUM_PROPRIETARY + eWNI_SME_IBSS_PEER_INFO_RSP, +#endif /* FEATURE_CESIUM_PROPRIETARY */ + eWNI_SME_GET_TSM_STATS_REQ, + eWNI_SME_GET_TSM_STATS_RSP, + eWNI_SME_TSM_IE_IND, + eWNI_SME_READY_TO_SUSPEND_IND, eWNI_SME_MSG_TYPES_END }; @@ -398,6 +420,7 @@ enum eWniMsgTypes /*---------------------------------------------------------------------*/ /* CFG to HDD message paramter indices */ +/* */ /* The followings are word indices starting from the message body */ /* */ /* WNI_CFG_xxxx_xxxx_xxxx: index of parameter */ diff --git a/CORE/MAC/inc/wniCfgAp.h b/CORE/MAC/inc/wniCfgAp.h index bfdb2f10627b..06cef8a7799d 100644 --- a/CORE/MAC/inc/wniCfgAp.h +++ b/CORE/MAC/inc/wniCfgAp.h @@ -25,6 +25,11 @@ * to the Linux Foundation. */ +/* + * Copyright (C) 2007-2009 Qualcomm Technologies, Inc. + * All rights reserved. Proprietary and Confidential. + */ + /* * DO NOT EDIT - This file is generated automatically */ @@ -272,75 +277,86 @@ #define WNI_CFG_MAX_BA_SESSIONS 225 #define WNI_CFG_BA_AUTO_SETUP 226 #define WNI_CFG_ADDBA_REQ_DECLINE 227 -#define WNI_CFG_BG_SCAN_CHANNEL_LIST 228 -#define WNI_CFG_MAX_MEDIUM_TIME 229 -#define WNI_CFG_MAX_MPDUS_IN_AMPDU 230 -#define WNI_CFG_IBSS_AUTO_BSSID 231 -#define WNI_CFG_PROBE_REQ_ADDNIE_FLAG 232 -#define WNI_CFG_PROBE_REQ_ADDNIE_DATA 233 -#define WNI_CFG_PROBE_RSP_ADDNIE_FLAG 234 -#define WNI_CFG_PROBE_RSP_ADDNIE_DATA1 235 -#define WNI_CFG_PROBE_RSP_ADDNIE_DATA2 236 -#define WNI_CFG_PROBE_RSP_ADDNIE_DATA3 237 -#define WNI_CFG_ASSOC_RSP_ADDNIE_FLAG 238 -#define WNI_CFG_ASSOC_RSP_ADDNIE_DATA 239 -#define WNI_CFG_PROBE_REQ_ADDNP2PIE_FLAG 240 -#define WNI_CFG_PROBE_REQ_ADDNP2PIE_DATA 241 -#define WNI_CFG_PROBE_RSP_BCN_ADDNIE_FLAG 242 -#define WNI_CFG_PROBE_RSP_BCN_ADDNIE_DATA 243 -#define WNI_CFG_WPS_ENABLE 244 -#define WNI_CFG_WPS_STATE 245 -#define WNI_CFG_WPS_PROBE_REQ_FLAG 246 -#define WNI_CFG_WPS_VERSION 247 -#define WNI_CFG_WPS_REQUEST_TYPE 248 -#define WNI_CFG_WPS_CFG_METHOD 249 -#define WNI_CFG_WPS_UUID 250 -#define WNI_CFG_WPS_PRIMARY_DEVICE_CATEGORY 251 -#define WNI_CFG_WPS_PIMARY_DEVICE_OUI 252 -#define WNI_CFG_WPS_DEVICE_SUB_CATEGORY 253 -#define WNI_CFG_WPS_ASSOCIATION_STATE 254 -#define WNI_CFG_WPS_CONFIGURATION_ERROR 255 -#define WNI_CFG_WPS_DEVICE_PASSWORD_ID 256 -#define WNI_CFG_WPS_ASSOC_METHOD 257 -#define WNI_CFG_LOW_GAIN_OVERRIDE 258 -#define WNI_CFG_ENABLE_PHY_AGC_LISTEN_MODE 259 -#define WNI_CFG_RPE_POLLING_THRESHOLD 260 -#define WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC0_REG 261 -#define WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC1_REG 262 -#define WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC2_REG 263 -#define WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC3_REG 264 -#define WNI_CFG_NO_OF_ONCHIP_REORDER_SESSIONS 265 -#define WNI_CFG_SINGLE_TID_RC 266 -#define WNI_CFG_RRM_ENABLED 267 -#define WNI_CFG_RRM_OPERATING_CHAN_MAX 268 -#define WNI_CFG_RRM_NON_OPERATING_CHAN_MAX 269 -#define WNI_CFG_TX_PWR_CTRL_ENABLE 270 -#define WNI_CFG_MCAST_BCAST_FILTER_SETTING 271 -#define WNI_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK 272 -#define WNI_CFG_DYNAMIC_PS_POLL_VALUE 273 -#define WNI_CFG_PS_NULLDATA_AP_RESP_TIMEOUT 274 -#define WNI_CFG_TELE_BCN_WAKEUP_EN 275 -#define WNI_CFG_TELE_BCN_TRANS_LI 276 -#define WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS 277 -#define WNI_CFG_TELE_BCN_MAX_LI 278 -#define WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS 279 -#define WNI_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS 280 -#define WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD 281 -#define WNI_CFG_ASSOC_STA_LIMIT 282 -#define WNI_CFG_SAP_CHANNEL_SELECT_START_CHANNEL 283 -#define WNI_CFG_SAP_CHANNEL_SELECT_END_CHANNEL 284 -#define WNI_CFG_SAP_CHANNEL_SELECT_OPERATING_BAND 285 -#define WNI_CFG_AP_DATA_AVAIL_POLL_PERIOD 286 -#define WNI_CFG_ENABLE_CLOSE_LOOP 287 -#define WNI_CFG_ENABLE_LTE_COEX 288 -#define WNI_CFG_AP_KEEP_ALIVE_TIMEOUT 289 -#define WNI_CFG_GO_KEEP_ALIVE_TIMEOUT 290 -#define WNI_CFG_ENABLE_MC_ADDR_LIST 291 -#define WNI_CFG_ENABLE_UC_FILTER 292 -#define WNI_CFG_ENABLE_LPWR_IMG_TRANSITION 293 -#define WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED 294 -#define WNI_CFG_DISABLE_LDPC_WITH_TXBF_AP 295 -#define WNI_CFG_AP_LINK_MONITOR_TIMEOUT 296 +#define WNI_CFG_DEL_ALL_RX_BA_SESSIONS_2_4_G_BTC 228 +#define WNI_CFG_BG_SCAN_CHANNEL_LIST 229 +#define WNI_CFG_MAX_MEDIUM_TIME 230 +#define WNI_CFG_MAX_MPDUS_IN_AMPDU 231 +#define WNI_CFG_IBSS_AUTO_BSSID 232 +#define WNI_CFG_PROBE_REQ_ADDNIE_FLAG 233 +#define WNI_CFG_PROBE_REQ_ADDNIE_DATA 234 +#define WNI_CFG_PROBE_RSP_ADDNIE_FLAG 235 +#define WNI_CFG_PROBE_RSP_ADDNIE_DATA1 236 +#define WNI_CFG_PROBE_RSP_ADDNIE_DATA2 237 +#define WNI_CFG_PROBE_RSP_ADDNIE_DATA3 238 +#define WNI_CFG_ASSOC_RSP_ADDNIE_FLAG 239 +#define WNI_CFG_ASSOC_RSP_ADDNIE_DATA 240 +#define WNI_CFG_PROBE_REQ_ADDNP2PIE_FLAG 241 +#define WNI_CFG_PROBE_REQ_ADDNP2PIE_DATA 242 +#define WNI_CFG_PROBE_RSP_BCN_ADDNIE_FLAG 243 +#define WNI_CFG_PROBE_RSP_BCN_ADDNIE_DATA 244 +#define WNI_CFG_WPS_ENABLE 245 +#define WNI_CFG_WPS_STATE 246 +#define WNI_CFG_WPS_PROBE_REQ_FLAG 247 +#define WNI_CFG_WPS_VERSION 248 +#define WNI_CFG_WPS_REQUEST_TYPE 249 +#define WNI_CFG_WPS_CFG_METHOD 250 +#define WNI_CFG_WPS_UUID 251 +#define WNI_CFG_WPS_PRIMARY_DEVICE_CATEGORY 252 +#define WNI_CFG_WPS_PIMARY_DEVICE_OUI 253 +#define WNI_CFG_WPS_DEVICE_SUB_CATEGORY 254 +#define WNI_CFG_WPS_ASSOCIATION_STATE 255 +#define WNI_CFG_WPS_CONFIGURATION_ERROR 256 +#define WNI_CFG_WPS_DEVICE_PASSWORD_ID 257 +#define WNI_CFG_WPS_ASSOC_METHOD 258 +#define WNI_CFG_LOW_GAIN_OVERRIDE 259 +#define WNI_CFG_ENABLE_PHY_AGC_LISTEN_MODE 260 +#define WNI_CFG_RPE_POLLING_THRESHOLD 261 +#define WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC0_REG 262 +#define WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC1_REG 263 +#define WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC2_REG 264 +#define WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC3_REG 265 +#define WNI_CFG_NO_OF_ONCHIP_REORDER_SESSIONS 266 +#define WNI_CFG_SINGLE_TID_RC 267 +#define WNI_CFG_RRM_ENABLED 268 +#define WNI_CFG_RRM_OPERATING_CHAN_MAX 269 +#define WNI_CFG_RRM_NON_OPERATING_CHAN_MAX 270 +#define WNI_CFG_TX_PWR_CTRL_ENABLE 271 +#define WNI_CFG_MCAST_BCAST_FILTER_SETTING 272 +#define WNI_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK 273 +#define WNI_CFG_DYNAMIC_PS_POLL_VALUE 274 +#define WNI_CFG_PS_NULLDATA_AP_RESP_TIMEOUT 275 +#define WNI_CFG_TELE_BCN_WAKEUP_EN 276 +#define WNI_CFG_TELE_BCN_TRANS_LI 277 +#define WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS 278 +#define WNI_CFG_TELE_BCN_MAX_LI 279 +#define WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS 280 +#define WNI_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS 281 +#define WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD 282 +#define WNI_CFG_ASSOC_STA_LIMIT 283 +#define WNI_CFG_SAP_CHANNEL_SELECT_START_CHANNEL 284 +#define WNI_CFG_SAP_CHANNEL_SELECT_END_CHANNEL 285 +#define WNI_CFG_SAP_CHANNEL_SELECT_OPERATING_BAND 286 +#define WNI_CFG_AP_DATA_AVAIL_POLL_PERIOD 287 +#define WNI_CFG_ENABLE_CLOSE_LOOP 288 +#define WNI_CFG_ENABLE_LTE_COEX 289 +#define WNI_CFG_AP_KEEP_ALIVE_TIMEOUT 290 +#define WNI_CFG_GO_KEEP_ALIVE_TIMEOUT 291 +#define WNI_CFG_ENABLE_MC_ADDR_LIST 292 +#define WNI_CFG_ENABLE_UC_FILTER 293 +#define WNI_CFG_ENABLE_LPWR_IMG_TRANSITION 294 +#define WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED 295 +#define WNI_CFG_DISABLE_LDPC_WITH_TXBF_AP 296 +#define WNI_CFG_AP_LINK_MONITOR_TIMEOUT 297 +#define WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK 298 +#define WNI_CFG_TDLS_BUF_STA_ENABLED 299 +#define WNI_CFG_TDLS_PUAPSD_INACT_TIME 300 +#define WNI_CFG_TDLS_RX_FRAME_THRESHOLD 301 +#define WNI_CFG_ENABLE_ADAPT_RX_DRAIN 302 +#define WNI_CFG_FLEX_CONNECT_POWER_FACTOR 303 +#define WNI_CFG_ANTENNA_DIVESITY 304 +#define WNI_CFG_GO_LINK_MONITOR_TIMEOUT 305 +#define WNI_CFG_RMC_ACTION_PERIOD_FREQUENCY 306 +#define WNI_CFG_CURRENT_RSSI 307 /* * String parameter lengths @@ -687,11 +703,11 @@ #define WNI_CFG_RATE_ADAPTATION_TYPE_SNR_BASED 2 #define WNI_CFG_FIXED_RATE_STAMIN 0 -#define WNI_CFG_FIXED_RATE_STAMAX 31 +#define WNI_CFG_FIXED_RATE_STAMAX 44 #define WNI_CFG_FIXED_RATE_STADEF 0 #define WNI_CFG_FIXED_RATE_APMIN 0 -#define WNI_CFG_FIXED_RATE_APMAX 31 +#define WNI_CFG_FIXED_RATE_APMAX 44 #define WNI_CFG_FIXED_RATE_APDEF 0 #define WNI_CFG_FIXED_RATE_AUTO 0 @@ -726,6 +742,19 @@ #define WNI_CFG_FIXED_RATE_0_25MBPS_SLR_20MHZ_SIMO 29 #define WNI_CFG_FIXED_RATE_0_5MBPS_SLR_20MHZ_SIMO 30 #define WNI_CFG_FIXED_RATE_68_25MBPS_QC_PROP_20MHZ_SIMO 31 +#define WNI_CFG_FIXED_RATE_54MBPS_MCS3_40MHZ_SIMO 32 +#define WNI_CFG_FIXED_RATE_81MBPS_MCS4_40MHZ_SIMO 33 +#define WNI_CFG_FIXED_RATE_108MBPS_MCS5_40MHZ_SIMO 34 +#define WNI_CFG_FIXED_RATE_121_5MBPS_MCS6_40MHZ_SIMO 35 +#define WNI_CFG_FIXED_RATE_135MBPS_MCS7_40MHZ_SIMO 36 +#define WNI_CFG_FIXED_RATE_15MBPS_MCS0_40MHZ_SIMO_SGI 37 +#define WNI_CFG_FIXED_RATE_30MBPS_MCS1_40MHZ_SIMO_SGI 38 +#define WNI_CFG_FIXED_RATE_45MBPS_MCS2_40MHZ_SIMO_SGI 39 +#define WNI_CFG_FIXED_RATE_60MBPS_MCS3_40MHZ_SIMO_SGI 40 +#define WNI_CFG_FIXED_RATE_90MBPS_MCS4_40MHZ_SIMO_SGI 41 +#define WNI_CFG_FIXED_RATE_120MBPS_MCS5_40MHZ_SIMO_SGI 42 +#define WNI_CFG_FIXED_RATE_135MBPS_MCS6_40MHZ_SIMO_SGI 43 +#define WNI_CFG_FIXED_RATE_150MBPS_MCS7_40MHZ_SIMO_SGI 44 #define WNI_CFG_FIXED_RATE_MULTICAST_24GHZ_STAMIN 0 #define WNI_CFG_FIXED_RATE_MULTICAST_24GHZ_STAMAX 31 @@ -1708,19 +1737,19 @@ #define WNI_CFG_VHT_TX_MCS_MAP_APMAX 65535 #define WNI_CFG_VHT_TX_MCS_MAP_APDEF 65534 -#define WNI_CFG_VHT_RX_HIGHEST_SUPPORTED_DATA_RATE_STAMIN 1 +#define WNI_CFG_VHT_RX_HIGHEST_SUPPORTED_DATA_RATE_STAMIN 0 #define WNI_CFG_VHT_RX_HIGHEST_SUPPORTED_DATA_RATE_STAMAX 780 #define WNI_CFG_VHT_RX_HIGHEST_SUPPORTED_DATA_RATE_STADEF 780 -#define WNI_CFG_VHT_RX_HIGHEST_SUPPORTED_DATA_RATE_APMIN 1 +#define WNI_CFG_VHT_RX_HIGHEST_SUPPORTED_DATA_RATE_APMIN 0 #define WNI_CFG_VHT_RX_HIGHEST_SUPPORTED_DATA_RATE_APMAX 780 #define WNI_CFG_VHT_RX_HIGHEST_SUPPORTED_DATA_RATE_APDEF 780 -#define WNI_CFG_VHT_TX_HIGHEST_SUPPORTED_DATA_RATE_STAMIN 1 +#define WNI_CFG_VHT_TX_HIGHEST_SUPPORTED_DATA_RATE_STAMIN 0 #define WNI_CFG_VHT_TX_HIGHEST_SUPPORTED_DATA_RATE_STAMAX 780 #define WNI_CFG_VHT_TX_HIGHEST_SUPPORTED_DATA_RATE_STADEF 780 -#define WNI_CFG_VHT_TX_HIGHEST_SUPPORTED_DATA_RATE_APMIN 1 +#define WNI_CFG_VHT_TX_HIGHEST_SUPPORTED_DATA_RATE_APMIN 0 #define WNI_CFG_VHT_TX_HIGHEST_SUPPORTED_DATA_RATE_APMAX 780 #define WNI_CFG_VHT_TX_HIGHEST_SUPPORTED_DATA_RATE_APDEF 780 @@ -1984,6 +2013,14 @@ #define WNI_CFG_ADDBA_REQ_DECLINE_APMAX 255 #define WNI_CFG_ADDBA_REQ_DECLINE_APDEF 0 +#define WNI_CFG_DEL_ALL_RX_BA_SESSIONS_2_4_G_BTC_STAMIN 0 +#define WNI_CFG_DEL_ALL_RX_BA_SESSIONS_2_4_G_BTC_STAMAX 1 +#define WNI_CFG_DEL_ALL_RX_BA_SESSIONS_2_4_G_BTC_STADEF 0 + +#define WNI_CFG_DEL_ALL_RX_BA_SESSIONS_2_4_G_BTC_APMIN 0 +#define WNI_CFG_DEL_ALL_RX_BA_SESSIONS_2_4_G_BTC_APMAX 1 +#define WNI_CFG_DEL_ALL_RX_BA_SESSIONS_2_4_G_BTC_APDEF 0 + #define WNI_CFG_MAX_MEDIUM_TIME_STAMIN 0 #define WNI_CFG_MAX_MEDIUM_TIME_STAMAX 65535 #define WNI_CFG_MAX_MEDIUM_TIME_STADEF 2048 @@ -2459,10 +2496,86 @@ #define WNI_CFG_AP_LINK_MONITOR_TIMEOUT_APMAX 255 #define WNI_CFG_AP_LINK_MONITOR_TIMEOUT_APDEF 3 -#define CFG_PARAM_MAX_NUM 297 -#define CFG_AP_IBUF_MAX_SIZE 236 +#define WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK_STAMIN 0 +#define WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK_STAMAX 15 +#define WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK_STADEF 0 + +#define WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK_APMIN 0 +#define WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK_APMAX 15 +#define WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK_APDEF 0 + +#define WNI_CFG_TDLS_BUF_STA_ENABLED_STAMIN 0 +#define WNI_CFG_TDLS_BUF_STA_ENABLED_STAMAX 1 +#define WNI_CFG_TDLS_BUF_STA_ENABLED_STADEF 0 + +#define WNI_CFG_TDLS_BUF_STA_ENABLED_APMIN 0 +#define WNI_CFG_TDLS_BUF_STA_ENABLED_APMAX 1 +#define WNI_CFG_TDLS_BUF_STA_ENABLED_APDEF 0 + +#define WNI_CFG_TDLS_PUAPSD_INACT_TIME_STAMIN 0 +#define WNI_CFG_TDLS_PUAPSD_INACT_TIME_STAMAX 10 +#define WNI_CFG_TDLS_PUAPSD_INACT_TIME_STADEF 0 + +#define WNI_CFG_TDLS_PUAPSD_INACT_TIME_APMIN 0 +#define WNI_CFG_TDLS_PUAPSD_INACT_TIME_APMAX 10 +#define WNI_CFG_TDLS_PUAPSD_INACT_TIME_APDEF 0 + +#define WNI_CFG_TDLS_RX_FRAME_THRESHOLD_STAMIN 10 +#define WNI_CFG_TDLS_RX_FRAME_THRESHOLD_STAMAX 20 +#define WNI_CFG_TDLS_RX_FRAME_THRESHOLD_STADEF 10 + +#define WNI_CFG_TDLS_RX_FRAME_THRESHOLD_APMIN 10 +#define WNI_CFG_TDLS_RX_FRAME_THRESHOLD_APMAX 20 +#define WNI_CFG_TDLS_RX_FRAME_THRESHOLD_APDEF 10 + +#define WNI_CFG_ENABLE_ADAPT_RX_DRAIN_STAMIN 0 +#define WNI_CFG_ENABLE_ADAPT_RX_DRAIN_STAMAX 1 +#define WNI_CFG_ENABLE_ADAPT_RX_DRAIN_STADEF 1 + +#define WNI_CFG_FLEX_CONNECT_POWER_FACTOR_STAMIN 0 +#define WNI_CFG_FLEX_CONNECT_POWER_FACTOR_STAMAX 9 +#define WNI_CFG_FLEX_CONNECT_POWER_FACTOR_STADEF 0 + +#define WNI_CFG_FLEX_CONNECT_POWER_FACTOR_APMIN 0 +#define WNI_CFG_FLEX_CONNECT_POWER_FACTOR_APMAX 9 +#define WNI_CFG_FLEX_CONNECT_POWER_FACTOR_APDEF 0 + +#define WNI_CFG_ANTENNA_DIVESITY_STAMIN 0 +#define WNI_CFG_ANTENNA_DIVESITY_STAMAX 3 +#define WNI_CFG_ANTENNA_DIVESITY_STADEF 0 + +#define WNI_CFG_ANTENNA_DIVESITY_APMIN 0 +#define WNI_CFG_ANTENNA_DIVESITY_APMAX 3 +#define WNI_CFG_ANTENNA_DIVESITY_APDEF 0 + +#define WNI_CFG_GO_LINK_MONITOR_TIMEOUT_STAMIN 3 +#define WNI_CFG_GO_LINK_MONITOR_TIMEOUT_STAMAX 50 +#define WNI_CFG_GO_LINK_MONITOR_TIMEOUT_STADEF 10 + +#define WNI_CFG_GO_LINK_MONITOR_TIMEOUT_APMIN 3 +#define WNI_CFG_GO_LINK_MONITOR_TIMEOUT_APMAX 50 +#define WNI_CFG_GO_LINK_MONITOR_TIMEOUT_APDEF 10 + +#define WNI_CFG_RMC_ACTION_PERIOD_FREQUENCY_STAMIN 10 +#define WNI_CFG_RMC_ACTION_PERIOD_FREQUENCY_STAMAX 4294967295 +#define WNI_CFG_RMC_ACTION_PERIOD_FREQUENCY_STADEF 300 + +#define WNI_CFG_RMC_ACTION_PERIOD_FREQUENCY_APMIN 10 +#define WNI_CFG_RMC_ACTION_PERIOD_FREQUENCY_APMAX 4294967295 +#define WNI_CFG_RMC_ACTION_PERIOD_FREQUENCY_APDEF 300 + +#define WNI_CFG_CURRENT_RSSI_STAMIN 0 +#define WNI_CFG_CURRENT_RSSI_STAMAX 127 +#define WNI_CFG_CURRENT_RSSI_STADEF 0 + +#define WNI_CFG_CURRENT_RSSI_APMIN 0 +#define WNI_CFG_CURRENT_RSSI_APMAX 127 +#define WNI_CFG_CURRENT_RSSI_APDEF 0 + +#define CFG_PARAM_MAX_NUM 308 +#define CFG_AP_IBUF_MAX_SIZE 247 #define CFG_AP_SBUF_MAX_SIZE 3422 -#define CFG_STA_IBUF_MAX_SIZE 231 +#define CFG_STA_IBUF_MAX_SIZE 242 #define CFG_STA_SBUF_MAX_SIZE 3388 #define CFG_SEM_MAX_NUM 19 diff --git a/CORE/MAC/inc/wniCfgSta.h b/CORE/MAC/inc/wniCfgSta.h index 0e6e96d2c9d2..2489e2e46ee6 100644 --- a/CORE/MAC/inc/wniCfgSta.h +++ b/CORE/MAC/inc/wniCfgSta.h @@ -25,6 +25,10 @@ * to the Linux Foundation. */ +/* + * Copyright (C) 2007-2009 Qualcomm Technologies, Inc. + * All rights reserved. Proprietary and Confidential. + */ /* * DO NOT EDIT - This file is generated automatically @@ -267,75 +271,86 @@ #define WNI_CFG_MAX_BA_SESSIONS 225 #define WNI_CFG_BA_AUTO_SETUP 226 #define WNI_CFG_ADDBA_REQ_DECLINE 227 -#define WNI_CFG_BG_SCAN_CHANNEL_LIST 228 -#define WNI_CFG_MAX_MEDIUM_TIME 229 -#define WNI_CFG_MAX_MPDUS_IN_AMPDU 230 -#define WNI_CFG_IBSS_AUTO_BSSID 231 -#define WNI_CFG_PROBE_REQ_ADDNIE_FLAG 232 -#define WNI_CFG_PROBE_REQ_ADDNIE_DATA 233 -#define WNI_CFG_PROBE_RSP_ADDNIE_FLAG 234 -#define WNI_CFG_PROBE_RSP_ADDNIE_DATA1 235 -#define WNI_CFG_PROBE_RSP_ADDNIE_DATA2 236 -#define WNI_CFG_PROBE_RSP_ADDNIE_DATA3 237 -#define WNI_CFG_ASSOC_RSP_ADDNIE_FLAG 238 -#define WNI_CFG_ASSOC_RSP_ADDNIE_DATA 239 -#define WNI_CFG_PROBE_REQ_ADDNP2PIE_FLAG 240 -#define WNI_CFG_PROBE_REQ_ADDNP2PIE_DATA 241 -#define WNI_CFG_PROBE_RSP_BCN_ADDNIE_FLAG 242 -#define WNI_CFG_PROBE_RSP_BCN_ADDNIE_DATA 243 -#define WNI_CFG_WPS_ENABLE 244 -#define WNI_CFG_WPS_STATE 245 -#define WNI_CFG_WPS_PROBE_REQ_FLAG 246 -#define WNI_CFG_WPS_VERSION 247 -#define WNI_CFG_WPS_REQUEST_TYPE 248 -#define WNI_CFG_WPS_CFG_METHOD 249 -#define WNI_CFG_WPS_UUID 250 -#define WNI_CFG_WPS_PRIMARY_DEVICE_CATEGORY 251 -#define WNI_CFG_WPS_PIMARY_DEVICE_OUI 252 -#define WNI_CFG_WPS_DEVICE_SUB_CATEGORY 253 -#define WNI_CFG_WPS_ASSOCIATION_STATE 254 -#define WNI_CFG_WPS_CONFIGURATION_ERROR 255 -#define WNI_CFG_WPS_DEVICE_PASSWORD_ID 256 -#define WNI_CFG_WPS_ASSOC_METHOD 257 -#define WNI_CFG_LOW_GAIN_OVERRIDE 258 -#define WNI_CFG_ENABLE_PHY_AGC_LISTEN_MODE 259 -#define WNI_CFG_RPE_POLLING_THRESHOLD 260 -#define WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC0_REG 261 -#define WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC1_REG 262 -#define WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC2_REG 263 -#define WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC3_REG 264 -#define WNI_CFG_NO_OF_ONCHIP_REORDER_SESSIONS 265 -#define WNI_CFG_SINGLE_TID_RC 266 -#define WNI_CFG_RRM_ENABLED 267 -#define WNI_CFG_RRM_OPERATING_CHAN_MAX 268 -#define WNI_CFG_RRM_NON_OPERATING_CHAN_MAX 269 -#define WNI_CFG_TX_PWR_CTRL_ENABLE 270 -#define WNI_CFG_MCAST_BCAST_FILTER_SETTING 271 -#define WNI_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK 272 -#define WNI_CFG_DYNAMIC_PS_POLL_VALUE 273 -#define WNI_CFG_PS_NULLDATA_AP_RESP_TIMEOUT 274 -#define WNI_CFG_TELE_BCN_WAKEUP_EN 275 -#define WNI_CFG_TELE_BCN_TRANS_LI 276 -#define WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS 277 -#define WNI_CFG_TELE_BCN_MAX_LI 278 -#define WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS 279 -#define WNI_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS 280 -#define WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD 281 -#define WNI_CFG_ASSOC_STA_LIMIT 282 -#define WNI_CFG_SAP_CHANNEL_SELECT_START_CHANNEL 283 -#define WNI_CFG_SAP_CHANNEL_SELECT_END_CHANNEL 284 -#define WNI_CFG_SAP_CHANNEL_SELECT_OPERATING_BAND 285 -#define WNI_CFG_AP_DATA_AVAIL_POLL_PERIOD 286 -#define WNI_CFG_ENABLE_CLOSE_LOOP 287 -#define WNI_CFG_ENABLE_LTE_COEX 288 -#define WNI_CFG_AP_KEEP_ALIVE_TIMEOUT 289 -#define WNI_CFG_GO_KEEP_ALIVE_TIMEOUT 290 -#define WNI_CFG_ENABLE_MC_ADDR_LIST 291 -#define WNI_CFG_ENABLE_UC_FILTER 292 -#define WNI_CFG_ENABLE_LPWR_IMG_TRANSITION 293 -#define WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED 294 -#define WNI_CFG_DISABLE_LDPC_WITH_TXBF_AP 295 -#define WNI_CFG_AP_LINK_MONITOR_TIMEOUT 296 +#define WNI_CFG_DEL_ALL_RX_BA_SESSIONS_2_4_G_BTC 228 +#define WNI_CFG_BG_SCAN_CHANNEL_LIST 229 +#define WNI_CFG_MAX_MEDIUM_TIME 230 +#define WNI_CFG_MAX_MPDUS_IN_AMPDU 231 +#define WNI_CFG_IBSS_AUTO_BSSID 232 +#define WNI_CFG_PROBE_REQ_ADDNIE_FLAG 233 +#define WNI_CFG_PROBE_REQ_ADDNIE_DATA 234 +#define WNI_CFG_PROBE_RSP_ADDNIE_FLAG 235 +#define WNI_CFG_PROBE_RSP_ADDNIE_DATA1 236 +#define WNI_CFG_PROBE_RSP_ADDNIE_DATA2 237 +#define WNI_CFG_PROBE_RSP_ADDNIE_DATA3 238 +#define WNI_CFG_ASSOC_RSP_ADDNIE_FLAG 239 +#define WNI_CFG_ASSOC_RSP_ADDNIE_DATA 240 +#define WNI_CFG_PROBE_REQ_ADDNP2PIE_FLAG 241 +#define WNI_CFG_PROBE_REQ_ADDNP2PIE_DATA 242 +#define WNI_CFG_PROBE_RSP_BCN_ADDNIE_FLAG 243 +#define WNI_CFG_PROBE_RSP_BCN_ADDNIE_DATA 244 +#define WNI_CFG_WPS_ENABLE 245 +#define WNI_CFG_WPS_STATE 246 +#define WNI_CFG_WPS_PROBE_REQ_FLAG 247 +#define WNI_CFG_WPS_VERSION 248 +#define WNI_CFG_WPS_REQUEST_TYPE 249 +#define WNI_CFG_WPS_CFG_METHOD 250 +#define WNI_CFG_WPS_UUID 251 +#define WNI_CFG_WPS_PRIMARY_DEVICE_CATEGORY 252 +#define WNI_CFG_WPS_PIMARY_DEVICE_OUI 253 +#define WNI_CFG_WPS_DEVICE_SUB_CATEGORY 254 +#define WNI_CFG_WPS_ASSOCIATION_STATE 255 +#define WNI_CFG_WPS_CONFIGURATION_ERROR 256 +#define WNI_CFG_WPS_DEVICE_PASSWORD_ID 257 +#define WNI_CFG_WPS_ASSOC_METHOD 258 +#define WNI_CFG_LOW_GAIN_OVERRIDE 259 +#define WNI_CFG_ENABLE_PHY_AGC_LISTEN_MODE 260 +#define WNI_CFG_RPE_POLLING_THRESHOLD 261 +#define WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC0_REG 262 +#define WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC1_REG 263 +#define WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC2_REG 264 +#define WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC3_REG 265 +#define WNI_CFG_NO_OF_ONCHIP_REORDER_SESSIONS 266 +#define WNI_CFG_SINGLE_TID_RC 267 +#define WNI_CFG_RRM_ENABLED 268 +#define WNI_CFG_RRM_OPERATING_CHAN_MAX 269 +#define WNI_CFG_RRM_NON_OPERATING_CHAN_MAX 270 +#define WNI_CFG_TX_PWR_CTRL_ENABLE 271 +#define WNI_CFG_MCAST_BCAST_FILTER_SETTING 272 +#define WNI_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK 273 +#define WNI_CFG_DYNAMIC_PS_POLL_VALUE 274 +#define WNI_CFG_PS_NULLDATA_AP_RESP_TIMEOUT 275 +#define WNI_CFG_TELE_BCN_WAKEUP_EN 276 +#define WNI_CFG_TELE_BCN_TRANS_LI 277 +#define WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS 278 +#define WNI_CFG_TELE_BCN_MAX_LI 279 +#define WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS 280 +#define WNI_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS 281 +#define WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD 282 +#define WNI_CFG_ASSOC_STA_LIMIT 283 +#define WNI_CFG_SAP_CHANNEL_SELECT_START_CHANNEL 284 +#define WNI_CFG_SAP_CHANNEL_SELECT_END_CHANNEL 285 +#define WNI_CFG_SAP_CHANNEL_SELECT_OPERATING_BAND 286 +#define WNI_CFG_AP_DATA_AVAIL_POLL_PERIOD 287 +#define WNI_CFG_ENABLE_CLOSE_LOOP 288 +#define WNI_CFG_ENABLE_LTE_COEX 289 +#define WNI_CFG_AP_KEEP_ALIVE_TIMEOUT 290 +#define WNI_CFG_GO_KEEP_ALIVE_TIMEOUT 291 +#define WNI_CFG_ENABLE_MC_ADDR_LIST 292 +#define WNI_CFG_ENABLE_UC_FILTER 293 +#define WNI_CFG_ENABLE_LPWR_IMG_TRANSITION 294 +#define WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED 295 +#define WNI_CFG_DISABLE_LDPC_WITH_TXBF_AP 296 +#define WNI_CFG_AP_LINK_MONITOR_TIMEOUT 297 +#define WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK 298 +#define WNI_CFG_TDLS_BUF_STA_ENABLED 299 +#define WNI_CFG_TDLS_PUAPSD_INACT_TIME 300 +#define WNI_CFG_TDLS_RX_FRAME_THRESHOLD 301 +#define WNI_CFG_ENABLE_ADAPT_RX_DRAIN 302 +#define WNI_CFG_FLEX_CONNECT_POWER_FACTOR 303 +#define WNI_CFG_ANTENNA_DIVESITY 304 +#define WNI_CFG_GO_LINK_MONITOR_TIMEOUT 305 +#define WNI_CFG_RMC_ACTION_PERIOD_FREQUENCY 306 +#define WNI_CFG_CURRENT_RSSI 307 /* * String parameter lengths @@ -569,7 +584,7 @@ #define WNI_CFG_RATE_ADAPTATION_TYPE_SNR_BASED 2 #define WNI_CFG_FIXED_RATE_STAMIN 0 -#define WNI_CFG_FIXED_RATE_STAMAX 31 +#define WNI_CFG_FIXED_RATE_STAMAX 44 #define WNI_CFG_FIXED_RATE_STADEF 0 #define WNI_CFG_FIXED_RATE_AUTO 0 @@ -604,6 +619,19 @@ #define WNI_CFG_FIXED_RATE_0_25MBPS_SLR_20MHZ_SIMO 29 #define WNI_CFG_FIXED_RATE_0_5MBPS_SLR_20MHZ_SIMO 30 #define WNI_CFG_FIXED_RATE_68_25MBPS_QC_PROP_20MHZ_SIMO 31 +#define WNI_CFG_FIXED_RATE_54MBPS_MCS3_40MHZ_SIMO 32 +#define WNI_CFG_FIXED_RATE_81MBPS_MCS4_40MHZ_SIMO 33 +#define WNI_CFG_FIXED_RATE_108MBPS_MCS5_40MHZ_SIMO 34 +#define WNI_CFG_FIXED_RATE_121_5MBPS_MCS6_40MHZ_SIMO 35 +#define WNI_CFG_FIXED_RATE_135MBPS_MCS7_40MHZ_SIMO 36 +#define WNI_CFG_FIXED_RATE_15MBPS_MCS0_40MHZ_SIMO_SGI 37 +#define WNI_CFG_FIXED_RATE_30MBPS_MCS1_40MHZ_SIMO_SGI 38 +#define WNI_CFG_FIXED_RATE_45MBPS_MCS2_40MHZ_SIMO_SGI 39 +#define WNI_CFG_FIXED_RATE_60MBPS_MCS3_40MHZ_SIMO_SGI 40 +#define WNI_CFG_FIXED_RATE_90MBPS_MCS4_40MHZ_SIMO_SGI 41 +#define WNI_CFG_FIXED_RATE_120MBPS_MCS5_40MHZ_SIMO_SGI 42 +#define WNI_CFG_FIXED_RATE_135MBPS_MCS6_40MHZ_SIMO_SGI 43 +#define WNI_CFG_FIXED_RATE_150MBPS_MCS7_40MHZ_SIMO_SGI 44 #define WNI_CFG_FIXED_RATE_MULTICAST_24GHZ_STAMIN 0 #define WNI_CFG_FIXED_RATE_MULTICAST_24GHZ_STAMAX 31 @@ -1178,11 +1206,11 @@ #define WNI_CFG_VHT_TX_MCS_MAP_STAMAX 65535 #define WNI_CFG_VHT_TX_MCS_MAP_STADEF 65534 -#define WNI_CFG_VHT_RX_HIGHEST_SUPPORTED_DATA_RATE_STAMIN 1 +#define WNI_CFG_VHT_RX_HIGHEST_SUPPORTED_DATA_RATE_STAMIN 0 #define WNI_CFG_VHT_RX_HIGHEST_SUPPORTED_DATA_RATE_STAMAX 780 #define WNI_CFG_VHT_RX_HIGHEST_SUPPORTED_DATA_RATE_STADEF 780 -#define WNI_CFG_VHT_TX_HIGHEST_SUPPORTED_DATA_RATE_STAMIN 1 +#define WNI_CFG_VHT_TX_HIGHEST_SUPPORTED_DATA_RATE_STAMIN 0 #define WNI_CFG_VHT_TX_HIGHEST_SUPPORTED_DATA_RATE_STAMAX 780 #define WNI_CFG_VHT_TX_HIGHEST_SUPPORTED_DATA_RATE_STADEF 780 @@ -1350,6 +1378,10 @@ #define WNI_CFG_ADDBA_REQ_DECLINE_STAMAX 255 #define WNI_CFG_ADDBA_REQ_DECLINE_STADEF 0 +#define WNI_CFG_DEL_ALL_RX_BA_SESSIONS_2_4_G_BTC_STAMIN 0 +#define WNI_CFG_DEL_ALL_RX_BA_SESSIONS_2_4_G_BTC_STAMAX 1 +#define WNI_CFG_DEL_ALL_RX_BA_SESSIONS_2_4_G_BTC_STADEF 0 + #define WNI_CFG_MAX_MEDIUM_TIME_STAMIN 0 #define WNI_CFG_MAX_MEDIUM_TIME_STAMAX 65535 #define WNI_CFG_MAX_MEDIUM_TIME_STADEF 2048 @@ -1593,8 +1625,48 @@ #define WNI_CFG_AP_LINK_MONITOR_TIMEOUT_STAMAX 255 #define WNI_CFG_AP_LINK_MONITOR_TIMEOUT_STADEF 3 -#define CFG_PARAM_MAX_NUM 297 -#define CFG_STA_IBUF_MAX_SIZE 231 +#define WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK_STAMIN 0 +#define WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK_STAMAX 15 +#define WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK_STADEF 0 + +#define WNI_CFG_TDLS_BUF_STA_ENABLED_STAMIN 0 +#define WNI_CFG_TDLS_BUF_STA_ENABLED_STAMAX 1 +#define WNI_CFG_TDLS_BUF_STA_ENABLED_STADEF 0 + +#define WNI_CFG_TDLS_PUAPSD_INACT_TIME_STAMIN 0 +#define WNI_CFG_TDLS_PUAPSD_INACT_TIME_STAMAX 10 +#define WNI_CFG_TDLS_PUAPSD_INACT_TIME_STADEF 0 + +#define WNI_CFG_TDLS_RX_FRAME_THRESHOLD_STAMIN 10 +#define WNI_CFG_TDLS_RX_FRAME_THRESHOLD_STAMAX 20 +#define WNI_CFG_TDLS_RX_FRAME_THRESHOLD_STADEF 10 + +#define WNI_CFG_ENABLE_ADAPT_RX_DRAIN_STAMIN 0 +#define WNI_CFG_ENABLE_ADAPT_RX_DRAIN_STAMAX 1 +#define WNI_CFG_ENABLE_ADAPT_RX_DRAIN_STADEF 1 + +#define WNI_CFG_FLEX_CONNECT_POWER_FACTOR_STAMIN 0 +#define WNI_CFG_FLEX_CONNECT_POWER_FACTOR_STAMAX 9 +#define WNI_CFG_FLEX_CONNECT_POWER_FACTOR_STADEF 0 + +#define WNI_CFG_ANTENNA_DIVESITY_STAMIN 0 +#define WNI_CFG_ANTENNA_DIVESITY_STAMAX 3 +#define WNI_CFG_ANTENNA_DIVESITY_STADEF 0 + +#define WNI_CFG_GO_LINK_MONITOR_TIMEOUT_STAMIN 3 +#define WNI_CFG_GO_LINK_MONITOR_TIMEOUT_STAMAX 50 +#define WNI_CFG_GO_LINK_MONITOR_TIMEOUT_STADEF 10 + +#define WNI_CFG_RMC_ACTION_PERIOD_FREQUENCY_STAMIN 10 +#define WNI_CFG_RMC_ACTION_PERIOD_FREQUENCY_STAMAX 4294967295 +#define WNI_CFG_RMC_ACTION_PERIOD_FREQUENCY_STADEF 300 + +#define WNI_CFG_CURRENT_RSSI_STAMIN 0 +#define WNI_CFG_CURRENT_RSSI_STAMAX 127 +#define WNI_CFG_CURRENT_RSSI_STADEF 0 + +#define CFG_PARAM_MAX_NUM 308 +#define CFG_STA_IBUF_MAX_SIZE 242 #define CFG_STA_SBUF_MAX_SIZE 3388 #define CFG_SEM_MAX_NUM 19 diff --git a/CORE/MAC/src/cfg/cfgApi.c b/CORE/MAC/src/cfg/cfgApi.c index f1712e55ebf9..d0664da82201 100644 --- a/CORE/MAC/src/cfg/cfgApi.c +++ b/CORE/MAC/src/cfg/cfgApi.c @@ -26,7 +26,6 @@ */ /* - * * Airgo Networks, Inc proprietary. All rights reserved. * This file contains the source code for CFG API functions. * @@ -60,12 +59,22 @@ static void Notify(tpAniSirGlobal, tANI_U16, tANI_U32); // --------------------------------------------------------------------- tANI_U32 cfgNeedRestart(tpAniSirGlobal pMac, tANI_U16 cfgId) { + if (!pMac->cfg.gCfgEntry) + { + PELOGE(cfgLog(pMac, LOGE, FL("gCfgEntry is NULL"));) + return 0; + } return !!(pMac->cfg.gCfgEntry[cfgId].control & CFG_CTL_RESTART) ; } // --------------------------------------------------------------------- tANI_U32 cfgNeedReload(tpAniSirGlobal pMac, tANI_U16 cfgId) { + if (!pMac->cfg.gCfgEntry) + { + PELOGE(cfgLog(pMac, LOGE, FL("gCfgEntry is NULL"));) + return 0; + } return !!(pMac->cfg.gCfgEntry[cfgId].control & CFG_CTL_RELOAD) ; } @@ -169,6 +178,11 @@ cfgSetInt(tpAniSirGlobal pMac, tANI_U16 cfgId, tANI_U32 value) PELOGE(cfgLog(pMac, LOGE, FL("Invalid cfg id %d"), cfgId);) return eSIR_CFG_INVALID_ID; } + if (!pMac->cfg.gCfgEntry) + { + PELOGE(cfgLog(pMac, LOGE, FL("gCfgEntry is NULL"));) + return eSIR_CFG_INVALID_ID; + } control = pMac->cfg.gCfgEntry[cfgId].control; index = control & CFG_BUF_INDX_MASK; @@ -244,6 +258,11 @@ cfgCheckValid(tpAniSirGlobal pMac, tANI_U16 cfgId) PELOG3(cfgLog(pMac, LOG3, FL("Invalid cfg id %d"), cfgId);) return(eSIR_CFG_INVALID_ID); } + if (!pMac->cfg.gCfgEntry) + { + PELOGE(cfgLog(pMac, LOGE, FL("gCfgEntry is NULL"));) + return eSIR_CFG_INVALID_ID; + } control = pMac->cfg.gCfgEntry[cfgId].control; @@ -291,6 +310,11 @@ wlan_cfgGetInt(tpAniSirGlobal pMac, tANI_U16 cfgId, tANI_U32 *pValue) retVal = eSIR_CFG_INVALID_ID; return retVal; } + if (!pMac->cfg.gCfgEntry) + { + PELOGE(cfgLog(pMac, LOGE, FL("gCfgEntry is NULL"));) + return eSIR_CFG_INVALID_ID; + } control = pMac->cfg.gCfgEntry[cfgId].control; index = control & CFG_BUF_INDX_MASK; @@ -355,6 +379,11 @@ cfgIncrementInt(tpAniSirGlobal pMac, tANI_U16 cfgId, tANI_U32 value) PELOGE(cfgLog(pMac, LOGE, FL("Invalid cfg id %d"), cfgId);) retVal = eSIR_CFG_INVALID_ID; } + if (!pMac->cfg.gCfgEntry) + { + PELOGE(cfgLog(pMac, LOGE, FL("gCfgEntry is NULL"));) + return eSIR_CFG_INVALID_ID; + } control = pMac->cfg.gCfgEntry[cfgId].control; index = control & CFG_BUF_INDX_MASK; @@ -453,6 +482,11 @@ cfgSetStrNotify(tpAniSirGlobal pMac, tANI_U16 cfgId, tANI_U8 *pStr, PELOGE(cfgLog(pMac, LOGE, FL("Invalid cfg id %d"), cfgId);) return eSIR_CFG_INVALID_ID; } + if (!pMac->cfg.gCfgEntry) + { + PELOGE(cfgLog(pMac, LOGE, FL("gCfgEntry is NULL"));) + return eSIR_CFG_INVALID_ID; + } control = pMac->cfg.gCfgEntry[cfgId].control; index = control & CFG_BUF_INDX_MASK; @@ -551,6 +585,11 @@ wlan_cfgGetStr(tpAniSirGlobal pMac, tANI_U16 cfgId, tANI_U8 *pBuf, tANI_U32 *pLe retVal = eSIR_CFG_INVALID_ID; return retVal; } + if (!pMac->cfg.gCfgEntry) + { + PELOGE(cfgLog(pMac, LOGE, FL("gCfgEntry is NULL"));) + return eSIR_CFG_INVALID_ID; + } control = pMac->cfg.gCfgEntry[cfgId].control; index = control & CFG_BUF_INDX_MASK; @@ -627,6 +666,11 @@ wlan_cfgGetStrMaxLen(tpAniSirGlobal pMac, tANI_U16 cfgId, tANI_U32 *pLength) PELOGE(cfgLog(pMac, LOGE, FL("Invalid cfg id %d"), cfgId);) retVal = eSIR_CFG_INVALID_ID; } + if (!pMac->cfg.gCfgEntry) + { + PELOGE(cfgLog(pMac, LOGE, FL("gCfgEntry is NULL"));) + return eSIR_CFG_INVALID_ID; + } control = pMac->cfg.gCfgEntry[cfgId].control; index = control & CFG_BUF_INDX_MASK; @@ -688,6 +732,11 @@ wlan_cfgGetStrLen(tpAniSirGlobal pMac, tANI_U16 cfgId, tANI_U32 *pLength) PELOGE(cfgLog(pMac, LOGE, FL("Invalid cfg id %d"), cfgId);) retVal = eSIR_CFG_INVALID_ID; } + if (!pMac->cfg.gCfgEntry) + { + PELOGE(cfgLog(pMac, LOGE, FL("gCfgEntry is NULL"));) + return eSIR_CFG_INVALID_ID; + } control = pMac->cfg.gCfgEntry[cfgId].control; index = control & CFG_BUF_INDX_MASK; @@ -730,7 +779,6 @@ cfgGetDot11dTransmitPower(tpAniSirGlobal pMac, tANI_U16 cfgId, tANI_U8 *pCountryInfo = NULL; tANI_U8 count = 0; tPowerdBm maxTxPwr = WDA_MAX_TXPOWER_INVALID; - eHalStatus status; /* At least one element is present */ if(cfgLength < sizeof(tSirMacChanInfo)) @@ -739,10 +787,10 @@ cfgGetDot11dTransmitPower(tpAniSirGlobal pMac, tANI_U16 cfgId, goto error; } - status = palAllocateMemory(pMac->hHdd, (void **)&pCountryInfo, cfgLength); - if (status != eHAL_STATUS_SUCCESS) + pCountryInfo = vos_mem_malloc(cfgLength); + if ( NULL == pCountryInfo ) { - cfgLog(pMac, LOGP, FL(" palAllocateMemory() failed, status = %d"), status); + cfgLog(pMac, LOGP, FL(" failed to allocate memory")); goto error; } /* The CSR will always update this CFG. The contents will be from country IE if regulatory domain @@ -750,7 +798,7 @@ cfgGetDot11dTransmitPower(tpAniSirGlobal pMac, tANI_U16 cfgId, */ if (wlan_cfgGetStr(pMac, cfgId, pCountryInfo, &cfgLength) != eSIR_SUCCESS) { - palFreeMemory(pMac->hHdd, pCountryInfo); + vos_mem_free(pCountryInfo); pCountryInfo = NULL; cfgLog(pMac, LOGP, FL("Failed to retrieve 11d configuration parameters while retrieving 11d tuples")); @@ -773,8 +821,8 @@ cfgGetDot11dTransmitPower(tpAniSirGlobal pMac, tANI_U16 cfgId, } error: - if(NULL != pCountryInfo) - palFreeMemory(pMac->hHdd, pCountryInfo); + if (NULL != pCountryInfo) + vos_mem_free(pCountryInfo); return maxTxPwr; } diff --git a/CORE/MAC/src/cfg/cfgParamName.c b/CORE/MAC/src/cfg/cfgParamName.c index 9bce0496de49..0e75b0a4389e 100644 --- a/CORE/MAC/src/cfg/cfgParamName.c +++ b/CORE/MAC/src/cfg/cfgParamName.c @@ -25,6 +25,11 @@ * to the Linux Foundation. */ +/* + * Copyright (C) 2007-2009 Qualcomm Technologies, Inc. + * All rights reserved. Proprietary and Confidential. + */ + /* * DO NOT EDIT - This file is generated automatically */ @@ -263,6 +268,7 @@ unsigned char *gCfgParamName[] = { (unsigned char *)"MAX_BA_SESSIONS", (unsigned char *)"BA_AUTO_SETUP", (unsigned char *)"ADDBA_REQ_DECLINE", + (unsigned char *)"DEL_ALL_RX_BA_SESSIONS_2_4_G_BTC", (unsigned char *)"BG_SCAN_CHANNEL_LIST", (unsigned char *)"MAX_MEDIUM_TIME", (unsigned char *)"MAX_MPDUS_IN_AMPDU", @@ -332,6 +338,16 @@ unsigned char *gCfgParamName[] = { (unsigned char *)"ENABLE_MCC_ADAPTIVE_SCHED", (unsigned char *)"DISABLE_LDPC_WITH_TXBF_AP", (unsigned char *)"AP_LINK_MONITOR_TIMEOUT", + (unsigned char *)"TDLS_QOS_WMM_UAPSD_MASK", + (unsigned char *)"TDLS_BUF_STA_ENABLED", + (unsigned char *)"TDLS_PUAPSD_INACT_TIME", + (unsigned char *)"TDLS_RX_FRAME_THRESHOLD", + (unsigned char *)"ENABLE_ADAPT_RX_DRAIN", + (unsigned char *)"FLEX_CONNECT_POWER_FACTOR", + (unsigned char *)"ANTENNA_DIVESITY", + (unsigned char *)"GO_LINK_MONITOR_TIMEOUT", + (unsigned char *)"RMC_ACTION_PERIOD_FREQUENCY", + (unsigned char *)"CURRENT_RSSI", }; diff --git a/CORE/MAC/src/cfg/cfgProcMsg.c b/CORE/MAC/src/cfg/cfgProcMsg.c index 40c30dd2f4d7..a8a40d309597 100644 --- a/CORE/MAC/src/cfg/cfgProcMsg.c +++ b/CORE/MAC/src/cfg/cfgProcMsg.c @@ -26,7 +26,6 @@ */ /* - * * Airgo Networks, Inc proprietary. All rights reserved. * This file contains CFG functions for processing host messages. * @@ -96,7 +95,10 @@ cfgProcessMbMsg(tpAniSirGlobal pMac, tSirMbMsg *pMsg) index = CFG_GET_FUNC_INDX(pMsg->type); if (index >= (sizeof(gCfgFunc) / sizeof(gCfgFunc[0]))) + { + vos_mem_free(pMsg); return; + } len = pMsg->msgLen - WNI_CFG_MB_HDR_LEN; pParam = ((tANI_U32*)pMsg) + 1; @@ -104,7 +106,7 @@ cfgProcessMbMsg(tpAniSirGlobal pMac, tSirMbMsg *pMsg) gCfgFunc[index](pMac, len, pParam); // Free up buffer - palFreeMemory( pMac->hHdd, (void*)pMsg); + vos_mem_free(pMsg); } /*** end cfgProcessMbMsg() ***/ diff --git a/CORE/MAC/src/cfg/cfgSendMsg.c b/CORE/MAC/src/cfg/cfgSendMsg.c index c734f474bb1d..a6d7308b0b75 100644 --- a/CORE/MAC/src/cfg/cfgSendMsg.c +++ b/CORE/MAC/src/cfg/cfgSendMsg.c @@ -95,7 +95,8 @@ cfgSendHostMsg(tpAniSirGlobal pMac, tANI_U16 msgType, tANI_U32 msgLen, tANI_U32 } // Allocate message buffer - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pMsg, msgLen)) + pMsg = vos_mem_malloc(msgLen); + if ( NULL == pMsg ) { PELOGE(cfgLog(pMac, LOGE, FL("Memory allocation failure!"));) @@ -140,7 +141,7 @@ cfgSendHostMsg(tpAniSirGlobal pMac, tANI_U16 msgType, tANI_U32 msgLen, tANI_U32 default: PELOGE(cfgLog(pMac, LOGE, FL("Unknown msg %d!"), (int) msgType);) - palFreeMemory( pMac->hHdd, pMsg); + vos_mem_free( pMsg); return; } diff --git a/CORE/MAC/src/cfg/cfgUtil/cfg.txt b/CORE/MAC/src/cfg/cfgUtil/cfg.txt index 0a2debcda2cb..238eac257dc7 100644 --- a/CORE/MAC/src/cfg/cfgUtil/cfg.txt +++ b/CORE/MAC/src/cfg/cfgUtil/cfg.txt @@ -17,6 +17,10 @@ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. +* This file was originally distributed by Qualcomm Atheros, Inc. +* under proprietary terms before Copyright ownership was assigned +* to the Linux Foundation. + * * Woodside Networks, Inc proprietary. All rights reserved. * This is the data definition file for the CFG module. @@ -769,10 +773,10 @@ SCH WNI_CFG_FIXED_RATE I 4 0 V RW NP HAL -0 31 0 +0 44 0 V RW NP HAL -0 31 0 +0 44 0 #ENUM AUTO 0 @@ -812,6 +816,19 @@ HAL #ENUM 0_5MBPS_SLR_20MHZ_SIMO 30 #ENUM 68_25MBPS_QC_PROP_20MHZ_SIMO 31 +#ENUM 54MBPS_MCS3_40MHZ_SIMO 32 +#ENUM 81MBPS_MCS4_40MHZ_SIMO 33 +#ENUM 108MBPS_MCS5_40MHZ_SIMO 34 +#ENUM 121_5MBPS_MCS6_40MHZ_SIMO 35 +#ENUM 135MBPS_MCS7_40MHZ_SIMO 36 +#ENUM 15MBPS_MCS0_40MHZ_SIMO_SGI 37 +#ENUM 30MBPS_MCS1_40MHZ_SIMO_SGI 38 +#ENUM 45MBPS_MCS2_40MHZ_SIMO_SGI 39 +#ENUM 60MBPS_MCS3_40MHZ_SIMO_SGI 40 +#ENUM 90MBPS_MCS4_40MHZ_SIMO_SGI 41 +#ENUM 120MBPS_MCS5_40MHZ_SIMO_SGI 42 +#ENUM 135MBPS_MCS6_40MHZ_SIMO_SGI 43 +#ENUM 150MBPS_MCS7_40MHZ_SIMO_SGI 44 * ********************************************************* * @@ -2968,10 +2985,10 @@ LIM WNI_CFG_VHT_RX_HIGHEST_SUPPORTED_DATA_RATE I 4 19 V RW NP LIM -1 780 780 +0 780 780 V RW NP LIM -1 780 780 +0 780 780 * * Tx Highest supported data rate. @@ -2979,10 +2996,10 @@ LIM WNI_CFG_VHT_TX_HIGHEST_SUPPORTED_DATA_RATE I 4 19 V RW NP LIM -1 780 780 +0 780 780 V RW NP LIM -1 780 780 +0 780 780 * * VHT Operation Information @@ -3439,6 +3456,19 @@ V RW NP RESTART LIM 0 0xff 0 +* +* Delete all Rx BA sessions in 2.4 GHz +* when BTC requests to disable agg. +* +WNI_CFG_DEL_ALL_RX_BA_SESSIONS_2_4_G_BTC I 4 7 +V RW NP +LIM +0 1 0 +V RW NP +LIM +0 1 0 + + * * Valid Channel List * @@ -4465,3 +4495,125 @@ HAL V RW NP HAL 1 255 3 + +* +*TDLS Station's UAPSD MASK Configuration +* +* +* +WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK I 4 7 +V RW NP +LIM +0 15 0 +V RW NP +LIM +0 15 0 +* +*TDLS Stations Buffer STA Capability +* +* +* +WNI_CFG_TDLS_BUF_STA_ENABLED I 4 7 +V RW NP +LIM +0 1 0 +V RW NP +LIM +0 1 0 +*TDLS Stations PUAPSD Inactivity Timer +* +* +* +WNI_CFG_TDLS_PUAPSD_INACT_TIME I 4 7 +V RW NP +LIM +0 10 0 +V RW NP +LIM +0 10 0 +*TDLS Stations PUAPSD RX Frame Threshold +* +* +* +WNI_CFG_TDLS_RX_FRAME_THRESHOLD I 4 7 +V RW NP +LIM +10 20 10 +V RW NP +LIM +10 20 10 +* +*MCC ENABLE/DISABLE ADAPTIVE RX Drain feature +* +* +* +WNI_CFG_ENABLE_ADAPT_RX_DRAIN I 4 7 +V RW NP +HAL +0 1 1 +NV RW NP +HAL +0 1 1 + +* +* FlexConnect Power Factor +* Default is set to 0 (disable) +* +* +WNI_CFG_FLEX_CONNECT_POWER_FACTOR I 4 0 +V RW NP +NONE +0 9 0 +V RW NP +NONE +0 9 0 + +* +* Antenna Diversity +* +* 0 = disabled +* 1 = Ant 1 +* 2 = Ant 2 +* 3 = Adaptive +* +WNI_CFG_ANTENNA_DIVESITY I 4 7 +V RW NP +HAL +0 3 0 +V RW NP +HAL +0 3 0 + +* GO Link Monitor Timeout (TU) +* +WNI_CFG_GO_LINK_MONITOR_TIMEOUT I 4 7 +V RW NP +HAL +3 50 10 +V RW NP +HAL +3 50 10 +* +* + +* RMC action period frequency (milli seconds) +* +WNI_CFG_RMC_ACTION_PERIOD_FREQUENCY I 4 7 +V RW NP +HAL +10 0xFFFFFFFF 300 +V RW NP +HAL +10 0xFFFFFFFF 300 +* +* + +* Current RSSI value (of connected AP) +* +WNI_CFG_CURRENT_RSSI I 4 7 +V RW NP +NONE +0 127 0 +V RW NP +NONE +0 127 0 diff --git a/CORE/MAC/src/dph/dphHashTable.c b/CORE/MAC/src/dph/dphHashTable.c index 0810485943c1..410b7f21682b 100644 --- a/CORE/MAC/src/dph/dphHashTable.c +++ b/CORE/MAC/src/dph/dphHashTable.c @@ -26,7 +26,6 @@ */ /* - * * Airgo Networks, Inc proprietary. All rights reserved. * This file dphHashTable.cc implements the member functions of * DPH hash table class. @@ -259,7 +258,7 @@ tpDphHashNode dphInitStaState(tpAniSirGlobal pMac, tSirMacAddr staAddr, PELOG1(limLog(pMac, LOG1, FL("Assoc Id %d, Addr %08X"), assocId, pStaDs);) // Clear the STA node except for the next pointer (last 4 bytes) - palZeroMemory( pMac->hHdd, (tANI_U8 *) pStaDs, sizeof(tDphHashNode) - sizeof(tpDphHashNode)); + vos_mem_set( (tANI_U8 *) pStaDs, sizeof(tDphHashNode) - sizeof(tpDphHashNode), 0); // Initialize the assocId pStaDs->assocId = assocId; @@ -269,7 +268,7 @@ tpDphHashNode dphInitStaState(tpAniSirGlobal pMac, tSirMacAddr staAddr, pStaDs->staIndex = HAL_STA_INVALID_IDX; // Initialize STA mac address - palCopyMemory( pMac->hHdd, pStaDs->staAddr, staAddr, sizeof(tSirMacAddr)); + vos_mem_copy( pStaDs->staAddr, staAddr, sizeof(tSirMacAddr)); // Initialize fragmentation threshold if (wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD, &val) != eSIR_SUCCESS) diff --git a/CORE/MAC/src/include/dot11f.h b/CORE/MAC/src/include/dot11f.h index ba690cf82e96..4cb003cb3d52 100644 --- a/CORE/MAC/src/include/dot11f.h +++ b/CORE/MAC/src/include/dot11f.h @@ -25,9 +25,6 @@ * to the Linux Foundation. */ -/** - */ - #ifndef DOT11F_H #define DOT11F_H /** @@ -41,10 +38,10 @@ * * * This file was automatically generated by 'framesc' - * Fri Sep 27 20:26:57 2013 from the following file(s): + * Tue Dec 3 15:04:59 2013 from the following file(s): * * dot11f.frms - * + * * PLEASE DON'T EDIT THIS FILE BY HAND! * * Instead, please update the input files & re-run @@ -307,6 +304,16 @@ void dot11fUnpackFfDialogToken(tpAniSirGlobal, tANI_U8*, tDot11fFfDialogToken*); void dot11fPackFfDialogToken(tpAniSirGlobal, tDot11fFfDialogToken*, tANI_U8*); +typedef struct sDot11fFfLeader { + tANI_U8 mac[6]; +} tDot11fFfLeader; + +#define DOT11F_FF_LEADER_LEN ( 6 ) + +void dot11fUnpackFfLeader(tpAniSirGlobal, tANI_U8*, tDot11fFfLeader*); + +void dot11fPackFfLeader(tpAniSirGlobal, tDot11fFfLeader*, tANI_U8*); + typedef struct sDot11fFfLinkMargin { tANI_U8 linkMargin; } tDot11fFfLinkMargin; @@ -327,6 +334,16 @@ void dot11fUnpackFfListenInterval(tpAniSirGlobal, tANI_U8*, tDot11fFfListenInter void dot11fPackFfListenInterval(tpAniSirGlobal, tDot11fFfListenInterval*, tANI_U8*); +typedef struct sDot11fFfMagicCode { + tANI_U8 magic[6]; +} tDot11fFfMagicCode; + +#define DOT11F_FF_MAGICCODE_LEN ( 6 ) + +void dot11fUnpackFfMagicCode(tpAniSirGlobal, tANI_U8*, tDot11fFfMagicCode*); + +void dot11fPackFfMagicCode(tpAniSirGlobal, tDot11fFfMagicCode*, tANI_U8*); + typedef struct sDot11fFfMaxTxPower { tANI_U8 maxTxPower; } tDot11fFfMaxTxPower; @@ -399,6 +416,36 @@ void dot11fUnpackFfRCPI(tpAniSirGlobal, tANI_U8*, tDot11fFfRCPI*); void dot11fPackFfRCPI(tpAniSirGlobal, tDot11fFfRCPI*, tANI_U8*); +typedef struct sDot11fFfRMCDialogToken { + tANI_U32 token; +} tDot11fFfRMCDialogToken; + +#define DOT11F_FF_RMCDIALOGTOKEN_LEN ( 4 ) + +void dot11fUnpackFfRMCDialogToken(tpAniSirGlobal, tANI_U8*, tDot11fFfRMCDialogToken*); + +void dot11fPackFfRMCDialogToken(tpAniSirGlobal, tDot11fFfRMCDialogToken*, tANI_U8*); + +typedef struct sDot11fFfRMCOUI { + tANI_U8 oui[3]; +} tDot11fFfRMCOUI; + +#define DOT11F_FF_RMCOUI_LEN ( 3 ) + +void dot11fUnpackFfRMCOUI(tpAniSirGlobal, tANI_U8*, tDot11fFfRMCOUI*); + +void dot11fPackFfRMCOUI(tpAniSirGlobal, tDot11fFfRMCOUI*, tANI_U8*); + +typedef struct sDot11fFfRMCVersion { + tANI_U8 version; +} tDot11fFfRMCVersion; + +#define DOT11F_FF_RMCVERSION_LEN ( 1 ) + +void dot11fUnpackFfRMCVersion(tpAniSirGlobal, tANI_U8*, tDot11fFfRMCVersion*); + +void dot11fPackFfRMCVersion(tpAniSirGlobal, tDot11fFfRMCVersion*, tANI_U8*); + typedef struct sDot11fFfRSNI { tANI_U8 rsni; } tDot11fFfRSNI; @@ -1857,6 +1904,34 @@ tANI_U32 dot11fPackIeHCF(tpAniSirGlobal, tDot11fIEHCF*, tANI_U8*, tANI_U32, tANI tANI_U32 dot11fGetPackedIEHCF(tpAniSirGlobal, tDot11fIEHCF*, tANI_U32*); +#ifdef __cplusplus +}; /* End extern "C". */ +#endif /* C++ */ +// EID 4 (0x04) +typedef struct sDot11fIEIGTK { + tANI_U8 present; + tANI_U8 keyID[2]; + tANI_U8 IPN[6]; + tANI_U8 keyLength; + tANI_U8 key[24]; +} tDot11fIEIGTK; + +#define DOT11F_EID_IGTK ( 4 ) + +// N.B. These #defines do *not* include the EID & length +#define DOT11F_IE_IGTK_MIN_LEN ( 33 ) + +#define DOT11F_IE_IGTK_MAX_LEN ( 33 ) + +#ifdef __cplusplus +extern "C" { +#endif /* C++ */ +tANI_U32 dot11fUnpackIeIGTK(tpAniSirGlobal, tANI_U8*,tANI_U8, tDot11fIEIGTK*); + +tANI_U32 dot11fPackIeIGTK(tpAniSirGlobal, tDot11fIEIGTK*, tANI_U8*, tANI_U32, tANI_U32*); + +tANI_U32 dot11fGetPackedIEIGTK(tpAniSirGlobal, tDot11fIEIGTK*, tANI_U32*); + #ifdef __cplusplus }; /* End extern "C". */ #endif /* C++ */ @@ -3711,6 +3786,7 @@ typedef struct sDot11fIEFTInfo { tDot11fIER1KH_ID R1KH_ID; tDot11fIEGTK GTK; tDot11fIER0KH_ID R0KH_ID; + tDot11fIEIGTK IGTK; } tDot11fIEFTInfo; #define DOT11F_EID_FTINFO ( 55 ) @@ -3718,7 +3794,7 @@ typedef struct sDot11fIEFTInfo { // N.B. These #defines do *not* include the EID & length #define DOT11F_IE_FTINFO_MIN_LEN ( 82 ) -#define DOT11F_IE_FTINFO_MAX_LEN ( 185 ) +#define DOT11F_IE_FTINFO_MAX_LEN ( 220 ) #ifdef __cplusplus extern "C" { @@ -4175,6 +4251,31 @@ tANI_U32 dot11fPackIeOperatingMode(tpAniSirGlobal, tDot11fIEOperatingMode*, tANI tANI_U32 dot11fGetPackedIEOperatingMode(tpAniSirGlobal, tDot11fIEOperatingMode*, tANI_U32*); +#ifdef __cplusplus +}; /* End extern "C". */ +#endif /* C++ */ +// EID 221 (0xdd) {OUI 0x00, 0x16, 0x32} +typedef struct sDot11fIEOxygenNetwork { + tANI_U8 present; + tANI_U16 data; +} tDot11fIEOxygenNetwork; + +#define DOT11F_EID_OXYGENNETWORK ( 221 ) + +// N.B. These #defines do *not* include the EID & length +#define DOT11F_IE_OXYGENNETWORK_MIN_LEN ( 5 ) + +#define DOT11F_IE_OXYGENNETWORK_MAX_LEN ( 5 ) + +#ifdef __cplusplus +extern "C" { +#endif /* C++ */ +tANI_U32 dot11fUnpackIeOxygenNetwork(tpAniSirGlobal, tANI_U8*,tANI_U8, tDot11fIEOxygenNetwork*); + +tANI_U32 dot11fPackIeOxygenNetwork(tpAniSirGlobal, tDot11fIEOxygenNetwork*, tANI_U8*, tANI_U32, tANI_U32*); + +tANI_U32 dot11fGetPackedIEOxygenNetwork(tpAniSirGlobal, tDot11fIEOxygenNetwork*, tANI_U32*); + #ifdef __cplusplus }; /* End extern "C". */ #endif /* C++ */ @@ -4893,11 +4994,11 @@ tANI_U32 dot11fGetPackedIEQBSSLoad(tpAniSirGlobal, tDot11fIEQBSSLoad*, tANI_U32* // EID 46 (0x2e) typedef struct sDot11fIEQOSCapsAp { tANI_U8 present; - tANI_U8 reserved: 1; - tANI_U8 txopreq: 1; - tANI_U8 qreq: 1; - tANI_U8 qack: 1; tANI_U8 count: 4; + tANI_U8 qack: 1; + tANI_U8 qreq: 1; + tANI_U8 txopreq: 1; + tANI_U8 reserved: 1; } tDot11fIEQOSCapsAp; #define DOT11F_EID_QOSCAPSAP ( 46 ) @@ -4922,13 +5023,13 @@ tANI_U32 dot11fGetPackedIEQOSCapsAp(tpAniSirGlobal, tDot11fIEQOSCapsAp*, tANI_U3 // EID 46 (0x2e) typedef struct sDot11fIEQOSCapsStation { tANI_U8 present; - tANI_U8 more_data_ack: 1; - tANI_U8 max_sp_length: 2; - tANI_U8 qack: 1; - tANI_U8 acbe_uapsd: 1; - tANI_U8 acbk_uapsd: 1; - tANI_U8 acvi_uapsd: 1; tANI_U8 acvo_uapsd: 1; + tANI_U8 acvi_uapsd: 1; + tANI_U8 acbk_uapsd: 1; + tANI_U8 acbe_uapsd: 1; + tANI_U8 qack: 1; + tANI_U8 max_sp_length: 2; + tANI_U8 more_data_ack: 1; } tDot11fIEQOSCapsStation; #define DOT11F_EID_QOSCAPSSTATION ( 46 ) @@ -5053,6 +5154,7 @@ typedef struct sDot11fIERSN { tANI_U8 RSN_Cap[2]; tANI_U16 pmkid_count; tANI_U8 pmkid[4][16]; + tANI_U8 gp_mgmt_cipher_suite[4]; } tDot11fIERSN; #define DOT11F_EID_RSN ( 48 ) @@ -5060,7 +5162,7 @@ typedef struct sDot11fIERSN { // N.B. These #defines do *not* include the EID & length #define DOT11F_IE_RSN_MIN_LEN ( 6 ) -#define DOT11F_IE_RSN_MAX_LEN ( 110 ) +#define DOT11F_IE_RSN_MAX_LEN ( 114 ) #ifdef __cplusplus extern "C" { @@ -6300,6 +6402,7 @@ typedef struct sDot11fBeacon{ tDot11fIEExtCap ExtCap; tDot11fIEOperatingMode OperatingMode; tDot11fIEWiderBWChanSwitchAnn WiderBWChanSwitchAnn; + tDot11fIEOxygenNetwork OxygenNetwork; } tDot11fBeacon; #define DOT11F_BEACON ( 8 ) @@ -6348,7 +6451,7 @@ typedef struct sDot11fBeacon2{ tDot11fIETPCReport TPCReport; tDot11fIEERPInfo ERPInfo; tDot11fIEExtSuppRates ExtSuppRates; - tDot11fIERSN RSN; + tDot11fIERSNOpaque RSNOpaque; tDot11fIEEDCAParamSet EDCAParamSet; tDot11fIEAPChannelReport APChannelReport; tDot11fIERRMEnabledCap RRMEnabledCap; @@ -6373,6 +6476,7 @@ typedef struct sDot11fBeacon2{ tDot11fIEExtCap ExtCap; tDot11fIEOperatingMode OperatingMode; tDot11fIEWiderBWChanSwitchAnn WiderBWChanSwitchAnn; + tDot11fIEOxygenNetwork OxygenNetwork; } tDot11fBeacon2; #define DOT11F_BEACON2 ( 10 ) @@ -6434,6 +6538,7 @@ typedef struct sDot11fBeaconIEs{ tDot11fIEExtCap ExtCap; tDot11fIEOperatingMode OperatingMode; tDot11fIEWiderBWChanSwitchAnn WiderBWChanSwitchAnn; + tDot11fIEOxygenNetwork OxygenNetwork; } tDot11fBeaconIEs; #define DOT11F_BEACONIES ( 11 ) @@ -7004,7 +7109,7 @@ typedef struct sDot11fProbeResponse{ tDot11fIETPCReport TPCReport; tDot11fIEERPInfo ERPInfo; tDot11fIEExtSuppRates ExtSuppRates; - tDot11fIERSN RSN; + tDot11fIERSNOpaque RSNOpaque; tDot11fIEQBSSLoad QBSSLoad; tDot11fIEEDCAParamSet EDCAParamSet; tDot11fIERRMEnabledCap RRMEnabledCap; @@ -7028,6 +7133,7 @@ typedef struct sDot11fProbeResponse{ tDot11fIEVHTOperation VHTOperation; tDot11fIEVHTExtBssLoad VHTExtBssLoad; tDot11fIEExtCap ExtCap; + tDot11fIEOxygenNetwork OxygenNetwork; } tDot11fProbeResponse; #define DOT11F_PROBERESPONSE ( 36 ) @@ -7090,6 +7196,30 @@ tANI_U32 dot11fGetPackedProvisionDiscoveryResSize(tpAniSirGlobal pCtx, tDot11fPr } /* End extern "C". */ #endif /* C++ */ +typedef struct sDot11fRMC{ + tDot11fFfCategory Category; + tDot11fFfRMCOUI RMCOUI; + tDot11fFfMagicCode MagicCode; + tDot11fFfRMCVersion RMCVersion; + tDot11fFfAction Action; + tDot11fFfRMCDialogToken RMCDialogToken; + tDot11fFfLeader Leader; +} tDot11fRMC; + +#define DOT11F_RMC ( 39 ) + +#ifdef __cplusplus +extern "C" { +#endif /* C++ */ + +tANI_U32 dot11fUnpackRMC(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 nBuf, tDot11fRMC *pFrm); +tANI_U32 dot11fPackRMC(tpAniSirGlobal pCtx, tDot11fRMC *pFrm, tANI_U8 *pBuf, tANI_U32 nBuf, tANI_U32 *pnConsumed); +tANI_U32 dot11fGetPackedRMCSize(tpAniSirGlobal pCtx, tDot11fRMC *pFrm, tANI_U32 *pnNeeded); + +#ifdef __cplusplus +} /* End extern "C". */ +#endif /* C++ */ + typedef struct sDot11fRadioMeasurementReport{ tDot11fFfCategory Category; tDot11fFfAction Action; @@ -7098,7 +7228,7 @@ typedef struct sDot11fRadioMeasurementReport{ tDot11fIEMeasurementReport MeasurementReport[4]; } tDot11fRadioMeasurementReport; -#define DOT11F_RADIOMEASUREMENTREPORT ( 39 ) +#define DOT11F_RADIOMEASUREMENTREPORT ( 40 ) #ifdef __cplusplus extern "C" { @@ -7121,7 +7251,7 @@ typedef struct sDot11fRadioMeasurementRequest{ tDot11fIEMeasurementRequest MeasurementRequest[2]; } tDot11fRadioMeasurementRequest; -#define DOT11F_RADIOMEASUREMENTREQUEST ( 40 ) +#define DOT11F_RADIOMEASUREMENTREQUEST ( 41 ) #ifdef __cplusplus extern "C" { @@ -7171,7 +7301,7 @@ typedef struct sDot11fReAssocRequest{ tDot11fIEOperatingMode OperatingMode; } tDot11fReAssocRequest; -#define DOT11F_REASSOCREQUEST ( 41 ) +#define DOT11F_REASSOCREQUEST ( 42 ) #ifdef __cplusplus extern "C" { @@ -7218,7 +7348,7 @@ typedef struct sDot11fReAssocResponse{ tDot11fIEExtCap ExtCap; } tDot11fReAssocResponse; -#define DOT11F_REASSOCRESPONSE ( 42 ) +#define DOT11F_REASSOCRESPONSE ( 43 ) #ifdef __cplusplus extern "C" { @@ -7238,7 +7368,7 @@ typedef struct sDot11fSMPowerSave{ tDot11fFfSMPowerModeSet SMPowerModeSet; } tDot11fSMPowerSave; -#define DOT11F_SMPOWERSAVE ( 43 ) +#define DOT11F_SMPOWERSAVE ( 44 ) #ifdef __cplusplus extern "C" { @@ -7258,7 +7388,7 @@ typedef struct sDot11fSaQueryRsp{ tDot11fFfTransactionId TransactionId; } tDot11fSaQueryRsp; -#define DOT11F_SAQUERYRSP ( 44 ) +#define DOT11F_SAQUERYRSP ( 45 ) #ifdef __cplusplus extern "C" { @@ -7279,7 +7409,7 @@ typedef struct sDot11fTDLSDisReq{ tDot11fIELinkIdentifier LinkIdentifier; } tDot11fTDLSDisReq; -#define DOT11F_TDLSDISREQ ( 45 ) +#define DOT11F_TDLSDISREQ ( 46 ) #ifdef __cplusplus extern "C" { @@ -7311,7 +7441,7 @@ typedef struct sDot11fTDLSDisRsp{ tDot11fIEVHTCaps VHTCaps; } tDot11fTDLSDisRsp; -#define DOT11F_TDLSDISRSP ( 46 ) +#define DOT11F_TDLSDISRSP ( 47 ) #ifdef __cplusplus extern "C" { @@ -7334,7 +7464,7 @@ typedef struct sDot11fTDLSPeerTrafficInd{ tDot11fIEPUBufferStatus PUBufferStatus; } tDot11fTDLSPeerTrafficInd; -#define DOT11F_TDLSPEERTRAFFICIND ( 47 ) +#define DOT11F_TDLSPEERTRAFFICIND ( 48 ) #ifdef __cplusplus extern "C" { @@ -7355,7 +7485,7 @@ typedef struct sDot11fTDLSPeerTrafficRsp{ tDot11fIELinkIdentifier LinkIdentifier; } tDot11fTDLSPeerTrafficRsp; -#define DOT11F_TDLSPEERTRAFFICRSP ( 48 ) +#define DOT11F_TDLSPEERTRAFFICRSP ( 49 ) #ifdef __cplusplus extern "C" { @@ -7382,9 +7512,10 @@ typedef struct sDot11fTDLSSetupCnf{ tDot11fIELinkIdentifier LinkIdentifier; tDot11fIEWMMInfoStation WMMInfoStation; tDot11fIEVHTOperation VHTOperation; + tDot11fIEOperatingMode OperatingMode; } tDot11fTDLSSetupCnf; -#define DOT11F_TDLSSETUPCNF ( 49 ) +#define DOT11F_TDLSSETUPCNF ( 50 ) #ifdef __cplusplus extern "C" { @@ -7420,7 +7551,7 @@ typedef struct sDot11fTDLSSetupReq{ tDot11fIEVHTCaps VHTCaps; } tDot11fTDLSSetupReq; -#define DOT11F_TDLSSETUPREQ ( 50 ) +#define DOT11F_TDLSSETUPREQ ( 51 ) #ifdef __cplusplus extern "C" { @@ -7455,9 +7586,10 @@ typedef struct sDot11fTDLSSetupRsp{ tDot11fIEWMMInfoStation WMMInfoStation; tDot11fIEAID AID; tDot11fIEVHTCaps VHTCaps; + tDot11fIEOperatingMode OperatingMode; } tDot11fTDLSSetupRsp; -#define DOT11F_TDLSSETUPRSP ( 51 ) +#define DOT11F_TDLSSETUPRSP ( 52 ) #ifdef __cplusplus extern "C" { @@ -7479,7 +7611,7 @@ typedef struct sDot11fTDLSTeardown{ tDot11fIELinkIdentifier LinkIdentifier; } tDot11fTDLSTeardown; -#define DOT11F_TDLSTEARDOWN ( 52 ) +#define DOT11F_TDLSTEARDOWN ( 53 ) #ifdef __cplusplus extern "C" { @@ -7500,7 +7632,7 @@ typedef struct sDot11fTPCReport{ tDot11fIETPCReport TPCReport; } tDot11fTPCReport; -#define DOT11F_TPCREPORT ( 53 ) +#define DOT11F_TPCREPORT ( 54 ) #ifdef __cplusplus extern "C" { @@ -7521,7 +7653,7 @@ typedef struct sDot11fTPCRequest{ tDot11fIETPCRequest TPCRequest; } tDot11fTPCRequest; -#define DOT11F_TPCREQUEST ( 54 ) +#define DOT11F_TPCREQUEST ( 55 ) #ifdef __cplusplus extern "C" { @@ -7542,7 +7674,7 @@ typedef struct sDot11fVHTGidManagementActionFrame{ tDot11fFfVhtUserPositionArray VhtUserPositionArray; } tDot11fVHTGidManagementActionFrame; -#define DOT11F_VHTGIDMANAGEMENTACTIONFRAME ( 55 ) +#define DOT11F_VHTGIDMANAGEMENTACTIONFRAME ( 56 ) #ifdef __cplusplus extern "C" { @@ -7565,7 +7697,7 @@ typedef struct sDot11fWMMAddTSRequest{ tDot11fIECCXTrafStrmRateSet CCXTrafStrmRateSet; } tDot11fWMMAddTSRequest; -#define DOT11F_WMMADDTSREQUEST ( 56 ) +#define DOT11F_WMMADDTSREQUEST ( 57 ) #ifdef __cplusplus extern "C" { @@ -7588,7 +7720,7 @@ typedef struct sDot11fWMMAddTSResponse{ tDot11fIECCXTrafStrmMet CCXTrafStrmMet; } tDot11fWMMAddTSResponse; -#define DOT11F_WMMADDTSRESPONSE ( 57 ) +#define DOT11F_WMMADDTSRESPONSE ( 58 ) #ifdef __cplusplus extern "C" { @@ -7610,7 +7742,7 @@ typedef struct sDot11fWMMDelTS{ tDot11fIEWMMTSPEC WMMTSPEC; } tDot11fWMMDelTS; -#define DOT11F_WMMDELTS ( 58 ) +#define DOT11F_WMMDELTS ( 59 ) #ifdef __cplusplus extern "C" { diff --git a/CORE/MAC/src/include/parserApi.h b/CORE/MAC/src/include/parserApi.h index c3e6543c451a..62f02ef34ac9 100644 --- a/CORE/MAC/src/include/parserApi.h +++ b/CORE/MAC/src/include/parserApi.h @@ -49,6 +49,11 @@ #define MAX_SIZE_OF_TRIPLETS_IN_COUNTRY_IE (COUNTRY_STRING_LENGTH * COUNTRY_INFO_MAX_CHANNEL) #define HIGHEST_24GHZ_CHANNEL_NUM ( 14 ) +#define IS_24G_CH(__chNum) ((__chNum > 0) && (__chNum < 15)) +#define IS_5G_CH(__chNum) ((__chNum >= 36) && (__chNum <= 165)) +#define IS_2X2_CHAIN(__chain) ((__chain & 0x3) == 0x3) +#define DISABLE_NSS2_MCS 0xC + typedef struct sSirCountryInformation { tANI_U8 countryString[COUNTRY_STRING_LENGTH]; @@ -261,6 +266,29 @@ typedef struct sSirAssocRsp #endif } tSirAssocRsp, *tpSirAssocRsp; +#if defined(FEATURE_WLAN_CCX_UPLOAD) +// Structure to hold CCX Beacon report mandatory IEs +typedef struct sSirCcxBcnReportMandatoryIe +{ + tSirMacSSid ssId; + tSirMacRateSet supportedRates; + tSirMacFHParamSet fhParamSet; + tSirMacDsParamSetIE dsParamSet; + tSirMacCfParamSet cfParamSet; + tSirMacIBSSParams ibssParamSet; + tSirMacTim tim; + tSirMacRRMEnabledCap rmEnabledCapabilities; + + tANI_U8 ssidPresent; + tANI_U8 suppRatesPresent; + tANI_U8 fhParamPresent; + tANI_U8 dsParamsPresent; + tANI_U8 cfPresent; + tANI_U8 ibssParamPresent; + tANI_U8 timPresent; +} tSirCcxBcnReportMandatoryIe, *tpSirCcxBcnReportMandatoryIe; +#endif /* FEATURE_WLAN_CCX_UPLOAD */ + tANI_U8 sirIsPropCapabilityEnabled(struct sAniSirGlobal *pMac, tANI_U32 bitnum); @@ -356,6 +384,15 @@ sirParseBeaconIE(struct sAniSirGlobal *pMac, tANI_U8 *pPayload, tANI_U32 payloadLength); +#if defined(FEATURE_WLAN_CCX_UPLOAD) +tSirRetStatus +sirFillBeaconMandatoryIEforCcxBcnReport(tpAniSirGlobal pMac, + tANI_U8 *pPayload, + const tANI_U32 payloadLength, + tANI_U8 **outIeBuf, + tANI_U32 *pOutIeLen); +#endif /* FEATURE_WLAN_CCX_UPLOAD */ + tSirRetStatus sirConvertBeaconFrame2Struct(struct sAniSirGlobal *pMac, tANI_U8 *pBeaconFrame, @@ -691,7 +728,16 @@ void PopulateDot11fWMM(tpAniSirGlobal pMac, void PopulateDot11fWMMCaps(tDot11fIEWMMCaps *pCaps); -#ifdef FEATURE_WLAN_CCX +#if defined(FEATURE_WLAN_CCX) +// Fill the CCX version IE +void PopulateDot11fCCXVersion(tDot11fIECCXVersion *pCCXVersion); +// Fill the Radio Management Capability +void PopulateDot11fCCXRadMgmtCap(tDot11fIECCXRadMgmtCap *pCCXRadMgmtCap); +// Fill the CCKM IE +tSirRetStatus PopulateDot11fCCXCckmOpaque( tpAniSirGlobal pMac, + tpSirCCKMie pCCKMie, + tDot11fIECCXCckmOpaque *pDot11f ); + void PopulateDot11TSRSIE(tpAniSirGlobal pMac, tSirMacCCXTSRSIE *pOld, tDot11fIECCXTrafStrmRateSet *pDot11f, diff --git a/CORE/MAC/src/include/sirParams.h b/CORE/MAC/src/include/sirParams.h index 1d4b1700ffd5..9788fa654a66 100644 --- a/CORE/MAC/src/include/sirParams.h +++ b/CORE/MAC/src/include/sirParams.h @@ -49,6 +49,7 @@ #define SIR_MAX_NUM_CHANNELS 64 #define SIR_MAX_NUM_STA_IN_IBSS 16 #define SIR_MAX_NUM_STA_IN_BSS 256 +#define SIR_CCX_MAX_MEAS_IE_REQS 8 typedef enum { @@ -80,9 +81,20 @@ typedef enum { TDLS = 6, P2P_GO_NOA_DECOUPLE_INIT_SCAN = 7, WLANACTIVE_OFFLOAD = 8, + WOW = 22, #ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD WLAN_ROAM_SCAN_OFFLOAD = 23, #endif + IBSS_HEARTBEAT_OFFLOAD = 26, + WLAN_PERIODIC_TX_PTRN = 28, +#ifdef FEATURE_WLAN_TDLS + ADVANCE_TDLS = 29, +#endif + +#ifdef FEATURE_WLAN_BATCH_SCAN + BATCH_SCAN = 30, +#endif + //MAX_FEATURE_SUPPORTED = 128 } placeHolderInCapBitmap; @@ -104,8 +116,9 @@ typedef enum eSriLinkState { eSIR_LINK_FINISH_SCAN_STATE = 11, eSIR_LINK_INIT_CAL_STATE = 12, eSIR_LINK_FINISH_CAL_STATE = 13, - eSIR_LINK_LISTEN_STATE = 14, - eSIR_LINK_DOWN_STATE = 15 + eSIR_LINK_LISTEN_STATE = 14, + eSIR_LINK_SEND_ACTION_STATE = 15, + eSIR_LINK_DOWN_STATE = 16, } tSirLinkState; @@ -544,7 +557,8 @@ typedef struct sSirMbMsgP2p #define SIR_HAL_TDLS_LINK_TEARDOWN (SIR_HAL_ITC_MSG_TYPES_BEGIN + 190) #endif #ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD -#define SIR_HAL_START_ROAM_CANDIDATE_LOOKUP_REQ (SIR_HAL_ITC_MSG_TYPES_BEGIN + 191) +#define SIR_HAL_ROAM_SCAN_OFFLOAD_REQ (SIR_HAL_ITC_MSG_TYPES_BEGIN + 191) +#define SIR_HAL_ROAM_SCAN_OFFLOAD_RSP (SIR_HAL_ITC_MSG_TYPES_BEGIN + 192) #endif #define SIR_HAL_GET_ROAM_RSSI_REQ (SIR_HAL_ITC_MSG_TYPES_BEGIN + 193) #define SIR_HAL_GET_ROAM_RSSI_RSP (SIR_HAL_ITC_MSG_TYPES_BEGIN + 194) @@ -554,27 +568,78 @@ typedef struct sSirMbMsgP2p #ifdef WLAN_FEATURE_11W #define SIR_HAL_EXCLUDE_UNENCRYPTED_IND (SIR_HAL_ITC_MSG_TYPES_BEGIN + 196) #endif +#ifdef FEATURE_WLAN_TDLS +/// PE <-> HAL TDLS messages +#define SIR_HAL_TDLS_LINK_ESTABLISH_REQ (SIR_HAL_ITC_MSG_TYPES_BEGIN + 197) +#define SIR_HAL_TDLS_LINK_ESTABLISH_REQ_RSP (SIR_HAL_ITC_MSG_TYPES_BEGIN + 198) +#define SIR_HAL_TDLS_IND (SIR_HAL_ITC_MSG_TYPES_BEGIN + 199) +#endif -#define SIR_HAL_START_SCAN_OFFLOAD_REQ (SIR_HAL_ITC_MSG_TYPES_BEGIN + 197) -#define SIR_HAL_START_SCAN_OFFLOAD_RSP (SIR_HAL_ITC_MSG_TYPES_BEGIN + 198) -#define SIR_HAL_UPDATE_CHAN_LIST_REQ (SIR_HAL_ITC_MSG_TYPES_BEGIN + 199) #define SIR_HAL_UPDATE_CHAN_LIST_RSP (SIR_HAL_ITC_MSG_TYPES_BEGIN + 200) #define SIR_HAL_STOP_SCAN_OFFLOAD_REQ (SIR_HAL_ITC_MSG_TYPES_BEGIN + 201) #define SIR_HAL_STOP_SCAN_OFFLOAD_RSP (SIR_HAL_ITC_MSG_TYPES_BEGIN + 202) #define SIR_HAL_RX_SCAN_EVENT (SIR_HAL_ITC_MSG_TYPES_BEGIN + 203) +#define SIR_HAL_DHCP_START_IND (SIR_HAL_ITC_MSG_TYPES_BEGIN + 204) +#define SIR_HAL_DHCP_STOP_IND (SIR_HAL_ITC_MSG_TYPES_BEGIN + 205) +#define SIR_HAL_IBSS_PEER_INACTIVITY_IND (SIR_HAL_ITC_MSG_TYPES_BEGIN + 206) + +#define SIR_HAL_LPHB_CONF_IND (SIR_HAL_ITC_MSG_TYPES_BEGIN + 207) +#define SIR_HAL_LPHB_WAIT_EXPIRE_IND (SIR_HAL_ITC_MSG_TYPES_BEGIN + 208) + +#define SIR_HAL_ADD_PERIODIC_TX_PTRN_IND (SIR_HAL_ITC_MSG_TYPES_BEGIN + 209) +#define SIR_HAL_DEL_PERIODIC_TX_PTRN_IND (SIR_HAL_ITC_MSG_TYPES_BEGIN + 210) + +#if defined WLAN_FEATURE_RELIABLE_MCAST +#define SIR_HAL_RMC_BECOME_LEADER (SIR_HAL_ITC_MSG_TYPES_BEGIN + 211) +#define SIR_HAL_RMC_LEADER_SELECT_RESP (SIR_HAL_ITC_MSG_TYPES_BEGIN + 212) +#define SIR_HAL_RMC_LEADER_REQ (SIR_HAL_ITC_MSG_TYPES_BEGIN + 213) +#define SIR_HAL_RMC_UPDATE_IND (SIR_HAL_ITC_MSG_TYPES_BEGIN + 214) +#endif /* defined WLAN_FEATURE_RELIABLE_MCAST */ + +#ifdef FEATURE_CESIUM_PROPRIETARY +/* For IBSS peer info related messages */ +#define SIR_HAL_IBSS_PEER_INFO_REQ (SIR_HAL_ITC_MSG_TYPES_BEGIN + 215) +#define SIR_HAL_IBSS_PEER_INFO_RSP (SIR_HAL_ITC_MSG_TYPES_BEGIN + 216) +#endif /* FEATURE_CESIUM_PROPRIETARY */ + +#define SIR_HAL_RATE_UPDATE_IND (SIR_HAL_ITC_MSG_TYPES_BEGIN + 217) + +#ifdef FEATURE_WLAN_BATCH_SCAN +#define SIR_HAL_SET_BATCH_SCAN_REQ (SIR_HAL_ITC_MSG_TYPES_BEGIN + 218) +#define SIR_HAL_SET_BATCH_SCAN_RSP (SIR_HAL_ITC_MSG_TYPES_BEGIN + 219) +#define SIR_HAL_STOP_BATCH_SCAN_IND (SIR_HAL_ITC_MSG_TYPES_BEGIN + 220) +#define SIR_HAL_TRIGGER_BATCH_SCAN_RESULT_IND (SIR_HAL_ITC_MSG_TYPES_BEGIN + 221) +#endif + + +#define SIR_HAL_START_ROAM_CANDIDATE_LOOKUP_REQ (SIR_HAL_ITC_MSG_TYPES_BEGIN + 222) + #ifdef QCA_WIFI_2_0 -#define SIR_HAL_CLI_SET_CMD (SIR_HAL_ITC_MSG_TYPES_BEGIN + 204) -#define SIR_HAL_CLI_GET_CMD (SIR_HAL_ITC_MSG_TYPES_BEGIN + 205) +#define SIR_HAL_CLI_SET_CMD (SIR_HAL_ITC_MSG_TYPES_BEGIN + 223) +#define SIR_HAL_CLI_GET_CMD (SIR_HAL_ITC_MSG_TYPES_BEGIN + 224) #ifndef REMOVE_PKT_LOG -#define SIR_HAL_PKTLOG_ENABLE_REQ (SIR_HAL_ITC_MSG_TYPES_BEGIN + 206) +#define SIR_HAL_PKTLOG_ENABLE_REQ (SIR_HAL_ITC_MSG_TYPES_BEGIN + 225) #endif -#ifdef FEATURE_WLAN_SCAN_PNO -#define SIR_HAL_SME_SCAN_CACHE_UPDATED (SIR_HAL_ITC_MSG_TYPES_BEGIN + 207) #endif +#ifdef FEATURE_WLAN_SCAN_PNO +#define SIR_HAL_SME_SCAN_CACHE_UPDATED (SIR_HAL_ITC_MSG_TYPES_BEGIN + 226) #endif -#define SIR_CSA_OFFLOAD_EVENT (SIR_HAL_ITC_MSG_TYPES_BEGIN + 208) - -#define SIR_HAL_RATE_UPDATE_IND (SIR_HAL_ITC_MSG_TYPES_BEGIN + 208) +#define SIR_HAL_START_SCAN_OFFLOAD_REQ (SIR_HAL_ITC_MSG_TYPES_BEGIN + 227) +#define SIR_HAL_START_SCAN_OFFLOAD_RSP (SIR_HAL_ITC_MSG_TYPES_BEGIN + 228) +#define SIR_HAL_UPDATE_CHAN_LIST_REQ (SIR_HAL_ITC_MSG_TYPES_BEGIN + 229) +#ifdef FEATURE_CESIUM_PROPRIETARY +#define SIR_HAL_IBSS_ROUTE_TABLE_UPDATE_IND (SIR_HAL_ITC_MSG_TYPES_BEGIN + 230) +#endif /* FEATURE_CESIUM_PROPRIETARY */ +#define SIR_CSA_OFFLOAD_EVENT (SIR_HAL_ITC_MSG_TYPES_BEGIN + 231) + +#define SIR_HAL_SET_MAX_TX_POWER_PER_BAND_REQ \ + (SIR_HAL_ITC_MSG_TYPES_BEGIN + 231) +#define SIR_HAL_SET_MAX_TX_POWER_PER_BAND_RSP \ + (SIR_HAL_ITC_MSG_TYPES_BEGIN + 232) + +#ifdef FEATURE_CESIUM_PROPRIETARY +#define SIR_HAL_TX_FAIL_MONITOR_IND (SIR_HAL_ITC_MSG_TYPES_BEGIN + 233) +#endif /* FEATURE_CESIUM_PROPRIETARY */ #ifdef WLAN_FEATURE_11AC #define SIR_HAL_UPDATE_MEMBERSHIP (SIR_HAL_ITC_MSG_TYPES_BEGIN + 210) @@ -682,6 +747,7 @@ typedef struct sSirMbMsgP2p #define SIR_LIM_TDLS_LINK_SETUP_RSP_TIMEOUT (SIR_LIM_TIMEOUT_MSG_START + 0x2A) #define SIR_LIM_TDLS_LINK_SETUP_CNF_TIMEOUT (SIR_LIM_TIMEOUT_MSG_START + 0x2B) #endif +#define SIR_LIM_CONVERT_ACTIVE_CHANNEL_TO_PASSIVE (SIR_LIM_TIMEOUT_MSG_START + 0x2C) #define SIR_LIM_MSG_TYPES_END (SIR_LIM_MSG_TYPES_BEGIN+0xFF) // SCH message types diff --git a/CORE/MAC/src/include/utilsApi.h b/CORE/MAC/src/include/utilsApi.h index 1baba9b9eb7b..4be2d86c91c9 100644 --- a/CORE/MAC/src/include/utilsApi.h +++ b/CORE/MAC/src/include/utilsApi.h @@ -55,6 +55,8 @@ extern void logDbg(tpAniSirGlobal pMac, tANI_U8 modId, tANI_U32 debugLevel, cons extern tANI_U32 gPktAllocCnt, gPktFreeCnt; +extern VOS_TRACE_LEVEL getVosDebugLevel(tANI_U32 debugLevel); + /// Debug dumps extern void logPrintf(tpAniSirGlobal, tANI_U32, tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3, tANI_U32 arg4); diff --git a/CORE/MAC/src/pe/include/limAdmitControl.h b/CORE/MAC/src/pe/include/limAdmitControl.h index e1ea2e0b1e72..f0a199f6d689 100644 --- a/CORE/MAC/src/pe/include/limAdmitControl.h +++ b/CORE/MAC/src/pe/include/limAdmitControl.h @@ -26,7 +26,6 @@ */ /* - * * Airgo Networks, Inc proprietary. All rights reserved. * Author: Dinesh Upadhyay * Date: 10/24/06 @@ -97,12 +96,26 @@ limUpdateAdmitPolicy( tSirRetStatus limAdmitControlInit(tpAniSirGlobal pMac); #ifdef FEATURE_WLAN_CCX -tSirRetStatus limSendHalMsgAddTs(tpAniSirGlobal pMac, tANI_U16 staIdx, tANI_U8 tspecIdx, tSirMacTspecIE tspecIE, tANI_U8 sessionId, tANI_U16 tsm_interval); +tSirRetStatus limSendHalMsgAddTs(tpAniSirGlobal pMac, + tANI_U16 staIdx, + tANI_U8 tspecIdx, + tSirMacTspecIE tspecIE, + tANI_U8 sessionId, + tANI_U16 tsm_interval); #else -tSirRetStatus limSendHalMsgAddTs(tpAniSirGlobal pMac, tANI_U16 staIdx, tANI_U8 tspecIdx, tSirMacTspecIE tspecIE, tANI_U8 sessionId); +tSirRetStatus limSendHalMsgAddTs(tpAniSirGlobal pMac, + tANI_U16 staIdx, + tANI_U8 tspecIdx, + tSirMacTspecIE tspecIE, + tANI_U8 sessionId); #endif -tSirRetStatus limSendHalMsgDelTs(tpAniSirGlobal pMac, tANI_U16 staIdx, tANI_U8 tspecIdx, tSirDeltsReqInfo delts, tANI_U8 sessionId); +tSirRetStatus limSendHalMsgDelTs(tpAniSirGlobal pMac, + tANI_U16 staIdx, + tANI_U8 tspecIdx, + tSirDeltsReqInfo delts, + tANI_U8 sessionId, + tANI_U8 *bssId); void limProcessHalAddTsRsp(tpAniSirGlobal pMac, tpSirMsgQ limMsg); #endif diff --git a/CORE/MAC/src/pe/include/limApi.h b/CORE/MAC/src/pe/include/limApi.h index 2d9ed7baba72..8be67edc72c3 100644 --- a/CORE/MAC/src/pe/include/limApi.h +++ b/CORE/MAC/src/pe/include/limApi.h @@ -26,7 +26,6 @@ */ /* - * * Airgo Networks, Inc proprietary. All rights reserved. * This file limApi.h contains the definitions exported by * LIM module. @@ -185,7 +184,6 @@ tSirRetStatus limUpdateGlobalChannelBonding(tpAniSirGlobal pMac, tHalBitVal cbBi #endif /* 0 */ void limHandleLowRssiInd(tpAniSirGlobal pMac); -void limHandleBmpsStatusInd(tpAniSirGlobal pMac); void limHandleMissedBeaconInd(tpAniSirGlobal pMac, tpSirMsgQ pMsg); void limPsOffloadHandleMissedBeaconInd(tpAniSirGlobal pMac, tpSirMsgQ pMsg); void diff --git a/CORE/MAC/src/pe/include/limFT.h b/CORE/MAC/src/pe/include/limFT.h index 8652bf7ab6f3..388a4094eaa6 100644 --- a/CORE/MAC/src/pe/include/limFT.h +++ b/CORE/MAC/src/pe/include/limFT.h @@ -68,7 +68,6 @@ void limProcessMlmFTReassocReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf, tpPESession psessionEntry); void limProcessFTPreauthRspTimeout(tpAniSirGlobal pMac); -int limisFastTransitionRequired(tpAniSirGlobal pMac, int SessionId); tANI_BOOLEAN limProcessFTUpdateKey(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf ); tSirRetStatus limProcessFTAggrQosReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf ); void limProcessFTAggrQoSRsp(tpAniSirGlobal pMac, tpSirMsgQ limMsg); diff --git a/CORE/MAC/src/pe/include/limGlobal.h b/CORE/MAC/src/pe/include/limGlobal.h index 28163fa62255..237e226bd06c 100644 --- a/CORE/MAC/src/pe/include/limGlobal.h +++ b/CORE/MAC/src/pe/include/limGlobal.h @@ -26,7 +26,6 @@ */ /* - * * Airgo Networks, Inc proprietary. All rights reserved. * This file limGlobal.h contains the definitions exported by * LIM module. @@ -86,6 +85,8 @@ #define GET_TIM_WAIT_COUNT(LIntrvl) ((LIntrvl * LIM_TIM_WAIT_COUNT_FACTOR) > LIM_MIN_TIM_WAIT_COUNT ? \ (LIntrvl * LIM_TIM_WAIT_COUNT_FACTOR) : LIM_MIN_TIM_WAIT_COUNT) +#define IS_5G_BAND(__rfBand) ((__rfBand & 0x3) == 0x2) +#define IS_24G_BAND(__rfBand) ((__rfBand & 0x3) == 0x1) // enums exported by LIM are as follows @@ -100,7 +101,7 @@ typedef enum eLimSystemRole eLIM_BT_AMP_AP_ROLE, eLIM_P2P_DEVICE_ROLE, eLIM_P2P_DEVICE_GO, - eLIM_P2P_DEVICE_CLINET + eLIM_P2P_DEVICE_CLIENT } tLimSystemRole; /** @@ -296,9 +297,9 @@ typedef struct sLimMlmScanReq tANI_U16 uIEFieldLen; tANI_U16 uIEFieldOffset; + tANI_U8 sessionId; //channelList MUST be the last field of this structure tSirChannelList channelList; - tANI_U8 sessionId; /*----------------------------- tLimMlmScanReq.... ----------------------------- @@ -327,7 +328,7 @@ struct tLimScanResultNode #ifdef FEATURE_OEM_DATA_SUPPORT -#ifndef OEM_DATA_REQ_SIZE +#ifndef OEM_DATA_REQ_SIZE #ifdef QCA_WIFI_2_0 #define OEM_DATA_REQ_SIZE 276 #else diff --git a/CORE/MAC/src/pe/include/limSession.h b/CORE/MAC/src/pe/include/limSession.h index c0b976fbd794..6720fbbc1b0f 100644 --- a/CORE/MAC/src/pe/include/limSession.h +++ b/CORE/MAC/src/pe/include/limSession.h @@ -36,6 +36,7 @@ \brief prototype for lim Session related APIs \author Sunit Bhatia + Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. Qualcomm Technologies Confidential and Proprietary. @@ -346,7 +347,6 @@ typedef struct sPESession // Added to Support BT-AMP tANI_BOOLEAN LimHBFailureStatus; tANI_U32 gLimPhyMode; tANI_U8 amsduSupportedInBA; - tANI_U8 txLdpcIniFeatureEnabled; /** * Following is the place holder for free peer index pool. @@ -362,6 +362,13 @@ typedef struct sPESession // Added to Support BT-AMP #endif tANI_BOOLEAN fWaitForProbeRsp; tANI_BOOLEAN fIgnoreCapsChange; + tANI_BOOLEAN fDeauthReceived; +#ifdef FEATURE_WLAN_DIAG_SUPPORT_LIM + tANI_S8 rssi; +#endif + tANI_U8 isAmsduSupportInAMPDU; + tANI_U8 isCoalesingInIBSSAllowed; + tSirHTConfig htConfig; /* @@ -406,8 +413,10 @@ typedef struct sPESession // Added to Support BT-AMP /* Power Save Off load Parameters */ tPowersaveoffloadInfo pmmOffloadInfo; - tANI_U8 isCoalesingInIBSSAllowed; + /* SMPS mode */ + tANI_U8 smpsMode; + tANI_U8 chainMask; }tPESession, *tpPESession; #define LIM_MAX_ACTIVE_SESSIONS 4 diff --git a/CORE/MAC/src/pe/include/rrmApi.h b/CORE/MAC/src/pe/include/rrmApi.h index 9cbba136d5a1..044acf842215 100644 --- a/CORE/MAC/src/pe/include/rrmApi.h +++ b/CORE/MAC/src/pe/include/rrmApi.h @@ -25,8 +25,6 @@ * to the Linux Foundation. */ -/* - * */ /**========================================================================= \file rrmApi.h @@ -47,6 +45,9 @@ #define RRM_MIN_TX_PWR_CAP 13 #define RRM_MAX_TX_PWR_CAP 19 +#define RRM_BCN_RPT_NO_BSS_INFO 0 +#define RRM_BCN_RPT_MIN_RPT 1 + tANI_U8 rrmGetMinOfMaxTxPower(tPowerdBm regMax, tPowerdBm apTxPower); extern tSirRetStatus rrmInitialize(tpAniSirGlobal pMac); diff --git a/CORE/MAC/src/pe/include/rrmGlobal.h b/CORE/MAC/src/pe/include/rrmGlobal.h index e97df4bec584..6d6fb10286b2 100644 --- a/CORE/MAC/src/pe/include/rrmGlobal.h +++ b/CORE/MAC/src/pe/include/rrmGlobal.h @@ -25,7 +25,6 @@ * to the Linux Foundation. */ - #if !defined( __RRMGLOBAL_H ) #define __RRMGLOBAL_H @@ -41,9 +40,6 @@ ========================================================================*/ -#define SIR_BCN_REPORT_MAX_BSS_DESC_PER_ACTION_FRAME 3 -#define SIR_BCN_REPORT_MAX_BSS_PER_CHANNEL 15 - typedef enum eRrmRetStatus { eRRM_SUCCESS, @@ -63,11 +59,11 @@ typedef struct sSirBeaconReportReqInd tANI_U16 messageType; // eWNI_SME_BEACON_REPORT_REQ_IND tANI_U16 length; tSirMacAddr bssId; - tANI_U16 measurementDuration; //ms + tANI_U16 measurementDuration[SIR_CCX_MAX_MEAS_IE_REQS]; //ms tANI_U16 randomizationInterval; //ms tSirChannelInfo channelInfo; tSirMacAddr macaddrBssid; //0: wildcard - tANI_U8 fMeasurementtype; //0:Passive, 1: Active, 2: table mode + tANI_U8 fMeasurementtype[SIR_CCX_MAX_MEAS_IE_REQS]; //0:Passive, 1: Active, 2: table mode tAniSSID ssId; //May be wilcard. tANI_U16 uDialogToken; tSirChannelList channelList; //From AP channel report. @@ -84,7 +80,7 @@ typedef struct sSirBeaconReportXmitInd tANI_U16 duration; tANI_U8 regClass; tANI_U8 numBssDesc; - tpSirBssDescription pBssDescription[SIR_BCN_REPORT_MAX_BSS_DESC_PER_ACTION_FRAME]; + tpSirBssDescription pBssDescription[SIR_BCN_REPORT_MAX_BSS_DESC]; } tSirBeaconReportXmitInd, * tpSirBeaconReportXmitInd; typedef struct sSirNeighborReportReqInd diff --git a/CORE/MAC/src/pe/lim/limAdmitControl.c b/CORE/MAC/src/pe/lim/limAdmitControl.c index 17496131fd61..d15a5a13d2eb 100644 --- a/CORE/MAC/src/pe/lim/limAdmitControl.c +++ b/CORE/MAC/src/pe/lim/limAdmitControl.c @@ -556,7 +556,7 @@ void limTspecDelete(tpAniSirGlobal pMac, tpLimTspecInfo pInfo) return; //pierre limLog(pMac, ADMIT_CONTROL_LOGLEVEL, FL("tspec entry = %d"), pInfo->idx); - limLog(pMac, ADMIT_CONTROL_LOGLEVEL, FL("delete tspec %08X"),pInfo); + limLog(pMac, ADMIT_CONTROL_LOGLEVEL, FL("delete tspec %p"), pInfo); pInfo->inuse = 0; // clear the hcca/parameterized queue indicator @@ -596,8 +596,9 @@ limTspecFindByStaAddr( for (ctspec = 0; ctspec < LIM_NUM_TSPEC_MAX; ctspec++, pTspecList++) { if ((pTspecList->inuse) - && (palEqualMemory( pMac->hHdd,pAddr, pTspecList->staAddr, sizeof(pTspecList->staAddr))) - && (palEqualMemory( pMac->hHdd,(tANI_U8 *) pTspecIE, (tANI_U8 *) &pTspecList->tspec, sizeof(tSirMacTspecIE)))) + && (vos_mem_compare(pAddr, pTspecList->staAddr, sizeof(pTspecList->staAddr))) + && (vos_mem_compare((tANI_U8 *) pTspecIE, (tANI_U8 *) &pTspecList->tspec, + sizeof(tSirMacTspecIE)))) { *ppInfo = pTspecList; return eSIR_SUCCESS; @@ -637,7 +638,8 @@ limTspecFindByAssocId( { if ((pTspecList->inuse) && (assocId == pTspecList->assocId) - && (palEqualMemory( pMac->hHdd,(tANI_U8 *) pTspecIE, (tANI_U8 *) &pTspecList->tspec, sizeof(tSirMacTspecIE)))) + && (vos_mem_compare((tANI_U8 *)pTspecIE, (tANI_U8 *)&pTspecList->tspec, + sizeof(tSirMacTspecIE)))) { *ppInfo = pTspecList; return eSIR_SUCCESS; @@ -754,7 +756,7 @@ tSirRetStatus limTspecAdd( // update the tspec info pTspecList->tspec = *pTspec; pTspecList->assocId = assocId; - palCopyMemory( pMac->hHdd, pTspecList->staAddr, pAddr, sizeof(pTspecList->staAddr)); + vos_mem_copy(pTspecList->staAddr, pAddr, sizeof(pTspecList->staAddr)); // for edca tspec's, we are all done if (pTspec->tsinfo.traffic.accessPolicy == SIR_MAC_ACCESSPOLICY_EDCA) @@ -915,7 +917,7 @@ tSirRetStatus limAdmitControlAddTS( // fill in a schedule if requested if (pSch != NULL) { - palZeroMemory( pMac->hHdd, (tANI_U8 *) pSch, sizeof(*pSch)); + vos_mem_set((tANI_U8 *) pSch, sizeof(*pSch), 0); pSch->svcStartTime = pAddts->tspec.svcStartTime; pSch->svcInterval = svcInterval; pSch->maxSvcDuration = (tANI_U16) pSch->svcInterval; // use SP = SI @@ -1028,7 +1030,7 @@ limAdmitControlDeleteSta( -------------------------------------------------------------*/ tSirRetStatus limAdmitControlInit(tpAniSirGlobal pMac) { - palZeroMemory(pMac->hHdd, pMac->lim.tspecInfo , LIM_NUM_TSPEC_MAX * sizeof(tLimTspecInfo)); + vos_mem_set(pMac->lim.tspecInfo, LIM_NUM_TSPEC_MAX * sizeof(tLimTspecInfo), 0); return eSIR_SUCCESS; } @@ -1096,16 +1098,17 @@ limSendHalMsgAddTs( tSirMsgQ msg; tpAddTsParams pAddTsParam; - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pAddTsParam, sizeof(tAddTsParams))) + pAddTsParam = vos_mem_malloc(sizeof(tAddTsParams)); + if (NULL == pAddTsParam) { - PELOGW(limLog(pMac, LOGW, FL("palAllocateMemory() failed"));) + PELOGW(limLog(pMac, LOGW, FL("AllocateMemory() failed"));) return eSIR_MEM_ALLOC_FAILED; } - palZeroMemory( pMac->hHdd, (tANI_U8 *)pAddTsParam, sizeof(tAddTsParams)); + vos_mem_set((tANI_U8 *)pAddTsParam, sizeof(tAddTsParams), 0); pAddTsParam->staIdx = staIdx; pAddTsParam->tspecIdx = tspecIdx; - palCopyMemory(pMac->hHdd, &pAddTsParam->tspec, &tspecIE, sizeof(tSirMacTspecIE)); + vos_mem_copy(&pAddTsParam->tspec, &tspecIE, sizeof(tSirMacTspecIE)); pAddTsParam->sessionId = sessionId; #ifdef FEATURE_WLAN_CCX @@ -1126,7 +1129,7 @@ limSendHalMsgAddTs( { PELOGW(limLog(pMac, LOGW, FL("wdaPostCtrlMsg() failed"));) SET_LIM_PROCESS_DEFD_MESGS(pMac, true); - palFreeMemory(pMac->hHdd, (tANI_U8*)pAddTsParam); + vos_mem_free(pAddTsParam); return eSIR_FAILURE; } return eSIR_SUCCESS; @@ -1148,26 +1151,29 @@ limSendHalMsgDelTs( tANI_U16 staIdx, tANI_U8 tspecIdx, tSirDeltsReqInfo delts, - tANI_U8 sessionId) + tANI_U8 sessionId, + tANI_U8 *bssId) { tSirMsgQ msg; tpDelTsParams pDelTsParam; tpPESession psessionEntry = NULL; - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pDelTsParam, sizeof(tDelTsParams))) + pDelTsParam = vos_mem_malloc(sizeof(tDelTsParams)); + if (NULL == pDelTsParam) { - limLog(pMac, LOGP, FL("palAllocateMemory() failed")); + limLog(pMac, LOGP, FL("AllocateMemory() failed")); return eSIR_MEM_ALLOC_FAILED; } msg.type = WDA_DEL_TS_REQ; msg.bodyptr = pDelTsParam; msg.bodyval = 0; - palZeroMemory( pMac->hHdd, (tANI_U8 *)pDelTsParam, sizeof(tDelTsParams)); + vos_mem_set((tANI_U8 *)pDelTsParam, sizeof(tDelTsParams), 0); //filling message parameters. pDelTsParam->staIdx = staIdx; pDelTsParam->tspecIdx = tspecIdx; + vos_mem_copy(&pDelTsParam->bssId, bssId, sizeof(tSirMacAddr)); psessionEntry = peFindSessionBySessionId(pMac, sessionId); if(psessionEntry == NULL) @@ -1188,10 +1194,10 @@ limSendHalMsgDelTs( PELOGW(limLog(pMac, LOGW, FL("wdaPostCtrlMsg() failed"));) goto err; } - return eSIR_SUCCESS; + return eSIR_SUCCESS; err: - palFreeMemory(pMac->hHdd, (tANI_U8*)pDelTsParam); + vos_mem_free(pDelTsParam); return eSIR_FAILURE; } @@ -1284,8 +1290,8 @@ void limProcessHalAddTsRsp(tpAniSirGlobal pMac, tpSirMsgQ limMsg) } end: - if( pAddTsRspMsg != NULL ) - palFreeMemory( pMac->hHdd, (void *)pAddTsRspMsg ); + if (pAddTsRspMsg != NULL) + vos_mem_free(pAddTsRspMsg); return; } diff --git a/CORE/MAC/src/pe/lim/limApi.c b/CORE/MAC/src/pe/lim/limApi.c index 4fc5aaa2821e..6404dd566e9b 100644 --- a/CORE/MAC/src/pe/lim/limApi.c +++ b/CORE/MAC/src/pe/lim/limApi.c @@ -102,22 +102,23 @@ static void __limInitScanVars(tpAniSirGlobal pMac) pMac->lim.gLimMlmScanResultLength = 0; pMac->lim.gLimSmeScanResultLength = 0; - palZeroMemory(pMac->hHdd, pMac->lim.gLimCachedScanHashTable, - sizeof(pMac->lim.gLimCachedScanHashTable)); + vos_mem_set(pMac->lim.gLimCachedScanHashTable, + sizeof(pMac->lim.gLimCachedScanHashTable), 0); #ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD pMac->lim.gLimMlmLfrScanResultLength = 0; pMac->lim.gLimSmeLfrScanResultLength = 0; - palZeroMemory(pMac->hHdd, pMac->lim.gLimCachedLfrScanHashTable, - sizeof(pMac->lim.gLimCachedLfrScanHashTable)); + vos_mem_set(pMac->lim.gLimCachedLfrScanHashTable, + sizeof(pMac->lim.gLimCachedLfrScanHashTable), 0); #endif pMac->lim.gLimBackgroundScanChannelId = 0; pMac->lim.gLimBackgroundScanStarted = 0; pMac->lim.gLimRestoreCBNumScanInterval = LIM_RESTORE_CB_NUM_SCAN_INTERVAL_DEFAULT; pMac->lim.gLimRestoreCBCount = 0; - palZeroMemory(pMac->hHdd, pMac->lim.gLimLegacyBssidList, sizeof(pMac->lim.gLimLegacyBssidList)); + vos_mem_set(pMac->lim.gLimLegacyBssidList, + sizeof(pMac->lim.gLimLegacyBssidList), 0); /* Fill in default values */ pMac->lim.gLimTriggerBackgroundScanDuringQuietBss = 0; @@ -125,7 +126,8 @@ static void __limInitScanVars(tpAniSirGlobal pMac) // abort scan is used to abort an on-going scan pMac->lim.abortScan = 0; - palZeroMemory(pMac->hHdd, &pMac->lim.scanChnInfo, sizeof(tLimScanChnInfo)); + vos_mem_set(&pMac->lim.scanChnInfo, sizeof(tLimScanChnInfo), 0); + vos_mem_set(&pMac->lim.dfschannelList, sizeof(tSirDFSChannelList), 0); //WLAN_SUSPEND_LINK Related pMac->lim.gpLimSuspendCallback = NULL; @@ -137,7 +139,8 @@ static void __limInitScanVars(tpAniSirGlobal pMac) static void __limInitBssVars(tpAniSirGlobal pMac) { - palZeroMemory(pMac->hHdd, (void*)pMac->lim.gpSession, sizeof(*pMac->lim.gpSession)*pMac->lim.maxBssId); + vos_mem_set((void*)pMac->lim.gpSession, + sizeof(*pMac->lim.gpSession)*pMac->lim.maxBssId, 0); //pMac->lim.gpLimStartBssReq = NULL; @@ -150,9 +153,9 @@ static void __limInitBssVars(tpAniSirGlobal pMac) // Place holder for BSS description that we're // currently joined with - palZeroMemory(pMac->hHdd, &pMac->lim.gLimCurrentBssId, sizeof(tSirMacAddr)); + vos_mem_set(&pMac->lim.gLimCurrentBssId, sizeof(tSirMacAddr), 0); pMac->lim.gLimCurrentChannelId = HAL_INVALID_CHANNEL_ID; - palZeroMemory(pMac->hHdd, &pMac->lim.gLimCurrentSSID, sizeof(tSirMacSSid)); + vos_mem_set(&pMac->lim.gLimCurrentSSID, sizeof(tSirMacSSid), 0); pMac->lim.gLimCurrentBssCaps = 0; QosCaps is a bit map of various qos capabilities - see defn above pMac->lim.gLimCurrentBssQosCaps = 0; @@ -161,9 +164,9 @@ static void __limInitBssVars(tpAniSirGlobal pMac) // Place holder for BSS description that // we're currently Reassociating - palZeroMemory(pMac->hHdd, &pMac->lim.gLimReassocBssId, sizeof(tSirMacAddr)); + vos_mem_set(&pMac->lim.gLimReassocBssId, sizeof(tSirMacAddr), 0); pMac->lim.gLimReassocChannelId = 0; - palZeroMemory(pMac->hHdd, &pMac->lim.gLimReassocSSID, sizeof(tSirMacSSid)); + vos_mem_set(&pMac->lim.gLimReassocSSID, sizeof(tSirMacSSid), 0); pMac->lim.gLimReassocBssCaps = 0; pMac->lim.gLimReassocBssQosCaps = 0; pMac->lim.gLimReassocBssPropCap = 0; @@ -199,7 +202,8 @@ static void __limInitStatsVars(tpAniSirGlobal pMac) pMac->lim.gLimHeartBeatCount = 0; // Statistics to keep track of no. beacons rcvd in heart beat interval - palZeroMemory(pMac->hHdd, pMac->lim.gLimHeartBeatBeaconStats, sizeof(pMac->lim.gLimHeartBeatBeaconStats)); + vos_mem_set(pMac->lim.gLimHeartBeatBeaconStats, + sizeof(pMac->lim.gLimHeartBeatBeaconStats), 0); #ifdef WLAN_DEBUG // Debug counters @@ -209,7 +213,7 @@ static void __limInitStatsVars(tpAniSirGlobal pMac) pMac->lim.numLearn = 0; pMac->lim.numLearnIgnore = 0; pMac->lim.numSme = 0; - palZeroMemory(pMac->hHdd, pMac->lim.numMAC, sizeof(pMac->lim.numMAC)); + vos_mem_set(pMac->lim.numMAC, sizeof(pMac->lim.numMAC), 0); pMac->lim.gLimNumAssocReqDropInvldState = 0; pMac->lim.gLimNumAssocReqDropACRejectTS = 0; pMac->lim.gLimNumAssocReqDropACRejectSta = 0; @@ -256,17 +260,17 @@ static void __limInitStates(tpAniSirGlobal pMac) * when SME_START_BSS_REQ is received. */ - palZeroMemory(pMac->hHdd, &pMac->lim.gLimOverlap11gParams, sizeof(tLimProtStaParams)); - palZeroMemory(pMac->hHdd, &pMac->lim.gLimOverlap11aParams, sizeof(tLimProtStaParams)); - palZeroMemory(pMac->hHdd, &pMac->lim.gLimOverlapHt20Params, sizeof(tLimProtStaParams)); - palZeroMemory(pMac->hHdd, &pMac->lim.gLimOverlapNonGfParams, sizeof(tLimProtStaParams)); - palZeroMemory(pMac->hHdd, &pMac->lim.gLimNoShortParams, sizeof(tLimNoShortParams)); - palZeroMemory(pMac->hHdd, &pMac->lim.gLimNoShortSlotParams, sizeof(tLimNoShortSlotParams)); + vos_mem_set(&pMac->lim.gLimOverlap11gParams, sizeof(tLimProtStaParams), 0); + vos_mem_set(&pMac->lim.gLimOverlap11aParams, sizeof(tLimProtStaParams), 0); + vos_mem_set(&pMac->lim.gLimOverlapHt20Params, sizeof(tLimProtStaParams), 0); + vos_mem_set(&pMac->lim.gLimOverlapNonGfParams, sizeof(tLimProtStaParams), 0); + vos_mem_set(&pMac->lim.gLimNoShortParams, sizeof(tLimNoShortParams), 0); + vos_mem_set(&pMac->lim.gLimNoShortSlotParams, sizeof(tLimNoShortSlotParams), 0); pMac->lim.gLimPhyMode = 0; pMac->lim.scanStartTime = 0; // used to measure scan time - palZeroMemory(pMac->hHdd, pMac->lim.gLimMyMacAddr, sizeof(pMac->lim.gLimMyMacAddr)); + vos_mem_set(pMac->lim.gLimMyMacAddr, sizeof(pMac->lim.gLimMyMacAddr), 0); pMac->lim.ackPolicy = 0; #if 0 /* Moving all these to session specific elements */ @@ -289,22 +293,22 @@ static void __limInitVars(tpAniSirGlobal pMac) // WDS info pMac->lim.gLimNumWdsInfoInd = 0; pMac->lim.gLimNumWdsInfoSet = 0; - palZeroMemory(pMac->hHdd, &pMac->lim.gLimWdsInfo, sizeof(tSirWdsInfo)); + vos_mem_set(&pMac->lim.gLimWdsInfo, sizeof(tSirWdsInfo), 0); /* initialize some parameters */ limInitWdsInfoParams(pMac); // Deferred Queue Paramters - palZeroMemory(pMac->hHdd, &pMac->lim.gLimDeferredMsgQ, sizeof(tSirAddtsReq)); + vos_mem_set(&pMac->lim.gLimDeferredMsgQ, sizeof(tSirAddtsReq), 0); // addts request if any - only one can be outstanding at any time - palZeroMemory(pMac->hHdd, &pMac->lim.gLimAddtsReq, sizeof(tSirAddtsReq)); + vos_mem_set(&pMac->lim.gLimAddtsReq, sizeof(tSirAddtsReq) , 0); pMac->lim.gLimAddtsSent = 0; pMac->lim.gLimAddtsRspTimerCount = 0; //protection related config cache - palZeroMemory(pMac->hHdd, &pMac->lim.cfgProtection, sizeof(tCfgProtection)); + vos_mem_set(&pMac->lim.cfgProtection, sizeof(tCfgProtection), 0); pMac->lim.gLimProtectionControl = 0; - palZeroMemory(pMac->hHdd, &pMac->lim.gLimAlternateRadio, sizeof(tSirAlternateRadioInfo)); + vos_mem_set(&pMac->lim.gLimAlternateRadio, sizeof(tSirAlternateRadioInfo), 0); SET_LIM_PROCESS_DEFD_MESGS(pMac, true); #if 0 @@ -326,10 +330,11 @@ static void __limInitVars(tpAniSirGlobal pMac) pMac->lim.pDialogueTokenHead = NULL; pMac->lim.pDialogueTokenTail = NULL; - palZeroMemory(pMac->hHdd, &pMac->lim.tspecInfo, sizeof(tLimTspecInfo) * LIM_NUM_TSPEC_MAX); + vos_mem_set(&pMac->lim.tspecInfo, + sizeof(tLimTspecInfo) * LIM_NUM_TSPEC_MAX, 0); // admission control policy information - palZeroMemory(pMac->hHdd, &pMac->lim.admitPolicyInfo, sizeof(tLimAdmitPolicyInfo)); + vos_mem_set(&pMac->lim.admitPolicyInfo, sizeof(tLimAdmitPolicyInfo), 0); pMac->lim.gLastBeaconDtimCount = 0; pMac->lim.gLastBeaconDtimPeriod = 0; @@ -342,8 +347,8 @@ static void __limInitAssocVars(tpAniSirGlobal pMac) { tANI_U32 val; #if 0 - palZeroMemory(pMac->hHdd, pMac->lim.gpLimAIDpool, - sizeof(*pMac->lim.gpLimAIDpool) * (WNI_CFG_ASSOC_STA_LIMIT_STAMAX+1)); + vos_mem_set(pMac->lim.gpLimAIDpool, + sizeof(*pMac->lim.gpLimAIDpool) * (WNI_CFG_ASSOC_STA_LIMIT_STAMAX+1), 0); pMac->lim.freeAidHead = 0; pMac->lim.freeAidTail = 0; #endif @@ -352,6 +357,7 @@ static void __limInitAssocVars(tpAniSirGlobal pMac) limLog( pMac, LOGP, FL( "cfg get assoc sta limit failed" )); } pMac->lim.gLimAssocStaLimit = val; + pMac->lim.gLimIbssStaLimit = val; // Place holder for current authentication request // being handled @@ -361,9 +367,9 @@ static void __limInitAssocVars(tpAniSirGlobal pMac) /// MAC level Pre-authentication related globals pMac->lim.gLimPreAuthChannelNumber = 0; pMac->lim.gLimPreAuthType = eSIR_OPEN_SYSTEM; - palZeroMemory(pMac->hHdd, &pMac->lim.gLimPreAuthPeerAddr, sizeof(tSirMacAddr)); + vos_mem_set(&pMac->lim.gLimPreAuthPeerAddr, sizeof(tSirMacAddr), 0); pMac->lim.gLimNumPreAuthContexts = 0; - palZeroMemory(pMac->hHdd, &pMac->lim.gLimPreAuthTimerTable, sizeof(tLimPreAuthTable)); + vos_mem_set(&pMac->lim.gLimPreAuthTimerTable, sizeof(tLimPreAuthTable), 0); // Placed holder to deauth reason pMac->lim.gLimDeauthReasonCode = 0; @@ -376,8 +382,10 @@ static void __limInitAssocVars(tpAniSirGlobal pMac) pMac->lim.gLimDisassocFrameCredit = 0; //One cache for each overlap and associated case. - palZeroMemory(pMac->hHdd, pMac->lim.protStaOverlapCache, sizeof(tCacheParams) * LIM_PROT_STA_OVERLAP_CACHE_SIZE); - palZeroMemory(pMac->hHdd, pMac->lim.protStaCache, sizeof(tCacheParams) * LIM_PROT_STA_CACHE_SIZE); + vos_mem_set(pMac->lim.protStaOverlapCache, + sizeof(tCacheParams) * LIM_PROT_STA_OVERLAP_CACHE_SIZE, 0); + vos_mem_set(pMac->lim.protStaCache, + sizeof(tCacheParams) * LIM_PROT_STA_CACHE_SIZE, 0); #if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR) pMac->lim.pSessionEntry = NULL; @@ -390,7 +398,7 @@ static void __limInitAssocVars(tpAniSirGlobal pMac) static void __limInitTitanVars(tpAniSirGlobal pMac) { #if 0 - palZeroMemory(pMac->hHdd, &pMac->lim.gLimChannelSwitch, sizeof(tLimChannelSwitchInfo)); + vos_mem_set(&pMac->lim.gLimChannelSwitch, sizeof(tLimChannelSwitchInfo), 0); pMac->lim.gLimChannelSwitch.state = eLIM_CHANNEL_SWITCH_IDLE; pMac->lim.gLimChannelSwitch.secondarySubBand = PHY_SINGLE_CHANNEL_CENTERED; #endif @@ -568,34 +576,30 @@ static tSirRetStatus __limInitConfig( tpAniSirGlobal pMac ) /* WNI_CFG_MAX_PS_POLL */ /* Allocate and fill in power save configuration. */ - if (palAllocateMemory(pMac->hHdd, (void **)&pPowerSaveConfig, - sizeof(tSirPowerSaveCfg)) != eHAL_STATUS_SUCCESS) + pPowerSaveConfig = vos_mem_malloc(sizeof(tSirPowerSaveCfg)); + if (NULL == pPowerSaveConfig) { PELOGE(limLog(pMac, LOGE, FL("LIM: Cannot allocate memory for power save " "configuration"));) return eSIR_FAILURE; } - - if(!pMac->psOffloadEnabled) + + /* This context should be valid if power-save configuration message has been + * already dispatched during initialization process. Re-using the present + * configuration mask + */ + if (!pMac->psOffloadEnabled) { - /* - * This context should be valid if power-save configuration - * message has been - * already dispatched during initialization process. - * Re-using the present - * configuration mask - */ - palCopyMemory(pMac->hHdd, pPowerSaveConfig, - (tANI_U8 *)&pMac->pmm.gPmmCfg, - sizeof(tSirPowerSaveCfg)); - - /* Note: it is okay to do this since DAL/HAL is alrady started */ - if ( (pmmSendPowerSaveCfg(pMac, pPowerSaveConfig)) != eSIR_SUCCESS) - { - PELOGE(limLog(pMac, LOGE, - FL("LIM: pmmSendPowerSaveCfg() failed "));) + vos_mem_copy(pPowerSaveConfig, (tANI_U8 *)&pMac->pmm.gPmmCfg, + sizeof(tSirPowerSaveCfg)); + + /* Note: it is okay to do this since DAL/HAL is alrady started */ + if ( (pmmSendPowerSaveCfg(pMac, pPowerSaveConfig)) != eSIR_SUCCESS) + { + PELOGE(limLog(pMac, LOGE, + FL("LIM: pmmSendPowerSaveCfg() failed "));) return eSIR_FAILURE; - } + } } /* WNI_CFG_BG_SCAN_CHANNEL_LIST_CHANNEL_LIST */ @@ -614,7 +618,18 @@ static tSirRetStatus __limInitConfig( tpAniSirGlobal pMac ) limLog(pMac, LOGP, FL("cfg get disableLDPCWithTxbfAP failed")); return eSIR_FAILURE; } - +#ifdef FEATURE_WLAN_TDLS + if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_BUF_STA_ENABLED,(tANI_U32 *) &pMac->lim.gLimTDLSBufStaEnabled) != eSIR_SUCCESS) + { + limLog(pMac, LOGP, FL("cfg get LimTDLSBufStaEnabled failed")); + return eSIR_FAILURE; + } + if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK,(tANI_U32 *) &pMac->lim.gLimTDLSUapsdMask) != eSIR_SUCCESS) + { + limLog(pMac, LOGP, FL("cfg get LimTDLSUapsdMask failed")); + return eSIR_FAILURE; + } +#endif return eSIR_SUCCESS; } @@ -723,6 +738,10 @@ limInitialize(tpAniSirGlobal pMac) limFTOpen(pMac); #endif +#if defined WLAN_FEATURE_RELIABLE_MCAST + limRmcInit(pMac); +#endif /* WLAN_FEATURE_RELIABLE_MCAST */ + vos_list_init(&pMac->lim.gLimMgmtFrameRegistratinQueue); #if 0 @@ -811,7 +830,7 @@ limCleanup(tpAniSirGlobal pMac) VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO, FL("Fixing leak! Deallocating pLimMgmtRegistration node")); - palFreeMemory(pMac, pLimMgmtRegistration); + vos_mem_free(pLimMgmtRegistration); } vos_list_destroy(&pMac->lim.gLimMgmtFrameRegistratinQueue); @@ -819,10 +838,14 @@ limCleanup(tpAniSirGlobal pMac) limCleanupMlm(pMac); limCleanupLmm(pMac); +#if defined WLAN_FEATURE_RELIABLE_MCAST + limRmcCleanup(pMac); +#endif /* WLAN_FEATURE_RELIABLE_MCAST */ + // free up preAuth table if (pMac->lim.gLimPreAuthTimerTable.pTable != NULL) { - palFreeMemory(pMac->hHdd, pMac->lim.gLimPreAuthTimerTable.pTable); + vos_mem_free(pMac->lim.gLimPreAuthTimerTable.pTable); pMac->lim.gLimPreAuthTimerTable.pTable = NULL; pMac->lim.gLimPreAuthTimerTable.numEntry = 0; } @@ -834,42 +857,42 @@ limCleanup(tpAniSirGlobal pMac) if(NULL != pMac->lim.pDialogueTokenTail) { - palFreeMemory(pMac->hHdd, (void *) pMac->lim.pDialogueTokenTail); + vos_mem_free(pMac->lim.pDialogueTokenTail); pMac->lim.pDialogueTokenTail = NULL; } # if 0 if (pMac->lim.gpLimStartBssReq != NULL) { - palFreeMemory(pMac->hHdd, pMac->lim.gpLimStartBssReq); + vos_mem_free(pMac->lim.gpLimStartBssReq); pMac->lim.gpLimStartBssReq = NULL; } #endif if (pMac->lim.gpLimMlmSetKeysReq != NULL) { - palFreeMemory(pMac->hHdd, pMac->lim.gpLimMlmSetKeysReq); + vos_mem_free(pMac->lim.gpLimMlmSetKeysReq); pMac->lim.gpLimMlmSetKeysReq = NULL; } #if 0 if (pMac->lim.gpLimJoinReq != NULL) { - palFreeMemory(pMac->hHdd, pMac->lim.gpLimJoinReq); + vos_mem_free(pMac->lim.gpLimJoinReq); pMac->lim.gpLimJoinReq = NULL; } #endif if (pMac->lim.gpLimMlmAuthReq != NULL) { - palFreeMemory(pMac->hHdd, pMac->lim.gpLimMlmAuthReq); + vos_mem_free(pMac->lim.gpLimMlmAuthReq); pMac->lim.gpLimMlmAuthReq = NULL; } #if 0 if (pMac->lim.gpLimMlmJoinReq != NULL) { - palFreeMemory(pMac->hHdd, pMac->lim.gpLimMlmJoinReq); + vos_mem_free(pMac->lim.gpLimMlmJoinReq); pMac->lim.gpLimMlmJoinReq = NULL; } #endif @@ -877,40 +900,40 @@ limCleanup(tpAniSirGlobal pMac) #if 0 if (pMac->lim.gpLimReassocReq != NULL) { - palFreeMemory(pMac->hHdd, pMac->lim.gpLimReassocReq); + vos_mem_free(pMac->lim.gpLimReassocReq); pMac->lim.gpLimReassocReq = NULL; } #endif if (pMac->lim.gpLimMlmRemoveKeyReq != NULL) { - palFreeMemory(pMac->hHdd, pMac->lim.gpLimMlmRemoveKeyReq); + vos_mem_free(pMac->lim.gpLimMlmRemoveKeyReq); pMac->lim.gpLimMlmRemoveKeyReq = NULL; } if (pMac->lim.gpDefdSmeMsgForNOA != NULL) { - palFreeMemory(pMac->hHdd, pMac->lim.gpDefdSmeMsgForNOA); + vos_mem_free(pMac->lim.gpDefdSmeMsgForNOA); pMac->lim.gpDefdSmeMsgForNOA = NULL; } if (pMac->lim.gpLimMlmScanReq != NULL) { - palFreeMemory(pMac->hHdd, pMac->lim.gpLimMlmScanReq); + vos_mem_free(pMac->lim.gpLimMlmScanReq); pMac->lim.gpLimMlmScanReq = NULL; } #if 0 if(NULL != pMac->lim.beacon) { - palFreeMemory(pMac->hHdd, (void*) pMac->lim.beacon); + vos_mem_free((void*) pMac->lim.beacon); pMac->lim.beacon = NULL; } #endif #if 0 if(NULL != pMac->lim.assocReq) { - palFreeMemory(pMac->hHdd, (void*) pMac->lim.assocReq); + vos_mem_free((void*) pMac->lim.assocReq); pMac->lim.assocReq= NULL; } #endif @@ -918,7 +941,7 @@ limCleanup(tpAniSirGlobal pMac) #if 0 if(NULL != pMac->lim.assocRsp) { - palFreeMemory(pMac->hHdd, (void*) pMac->lim.assocRsp); + vos_mem_free((void*) pMac->lim.assocRsp); pMac->lim.assocRsp= NULL; } #endif @@ -961,55 +984,53 @@ tSirRetStatus peOpen(tpAniSirGlobal pMac, tMacOpenParameters *pMacOpenParam) return eSIR_FAILURE; } - if (eHAL_STATUS_SUCCESS != palAllocateMemory(pMac->hHdd, - (void **) &pMac->lim.limTimers.gpLimCnfWaitTimer, sizeof(TX_TIMER)*pMac->lim.maxStation)) + pMac->lim.limTimers.gpLimCnfWaitTimer = vos_mem_malloc(sizeof(TX_TIMER) * pMac->lim.maxStation); + if (NULL == pMac->lim.limTimers.gpLimCnfWaitTimer) { PELOGE(limLog(pMac, LOGE, FL("memory allocate failed!"));) return eSIR_FAILURE; } #if 0 - if (eHAL_STATUS_SUCCESS != palAllocateMemory(pMac->hHdd, - (void **) &pMac->lim.gpLimAIDpool, - sizeof(*pMac->lim.gpLimAIDpool) * (WNI_CFG_ASSOC_STA_LIMIT_STAMAX+1))) + pMac->lim.gpLimAIDpool = vos_mem_malloc(sizeof(*pMac->lim.gpLimAIDpool) * (WNI_CFG_ASSOC_STA_LIMIT_STAMAX+1)); + if (NULL == pMac->lim.gpLimAIDpool) { PELOGE(limLog(pMac, LOGE, FL("memory allocate failed!"));) return eSIR_FAILURE; } #endif - if (eHAL_STATUS_SUCCESS != palAllocateMemory(pMac->hHdd, - (void **) &pMac->lim.gpSession, sizeof(tPESession)* pMac->lim.maxBssId)) + pMac->lim.gpSession = vos_mem_malloc(sizeof(tPESession)* pMac->lim.maxBssId); + if (NULL == pMac->lim.gpSession) { limLog(pMac, LOGE, FL("memory allocate failed!")); return eSIR_FAILURE; } - palZeroMemory(pMac->hHdd, pMac->lim.gpSession, sizeof(tPESession)*pMac->lim.maxBssId); + vos_mem_set(pMac->lim.gpSession, sizeof(tPESession)*pMac->lim.maxBssId, 0); /* - if (eHAL_STATUS_SUCCESS != palAllocateMemory(pMac->hHdd, - (void **) &pMac->dph.dphHashTable.pHashTable, sizeof(tpDphHashNode)*pMac->lim.maxStation)) + pMac->dph.dphHashTable.pHashTable = vos_mem_malloc(sizeof(tpDphHashNode)*pMac->lim.maxStation); + if (NULL == pMac->dph.dphHashTable.pHashTable) { PELOGE(limLog(pMac, LOGE, FL("memory allocate failed!"));) return eSIR_FAILURE; } - if (eHAL_STATUS_SUCCESS != palAllocateMemory(pMac->hHdd, - (void **) &pMac->dph.dphHashTable.pDphNodeArray, sizeof(tDphHashNode)*pMac->lim.maxStation)) + pMac->dph.dphHashTable.pDphNodeArray = vos_mem_malloc(sizeof(tDphHashNode)*pMac->lim.maxStation); + if (NULL == pMac->dph.dphHashTable.pDphNodeArray) { PELOGE(limLog(pMac, LOGE, FL("memory allocate failed!"));) return eSIR_FAILURE; } */ - - if (eHAL_STATUS_SUCCESS != palAllocateMemory(pMac->hHdd, - (void **) &pMac->pmm.gPmmTim.pTim, sizeof(tANI_U8)*pMac->lim.maxStation)) + pMac->pmm.gPmmTim.pTim = vos_mem_malloc(sizeof(tANI_U8)*pMac->lim.maxStation); + if (NULL == pMac->pmm.gPmmTim.pTim) { PELOGE(limLog(pMac, LOGE, FL("memory allocate failed for pTim!"));) return eSIR_FAILURE; } - palZeroMemory(pMac->hHdd, pMac->pmm.gPmmTim.pTim, sizeof(tANI_U8)*pMac->lim.maxStation); + vos_mem_set(pMac->pmm.gPmmTim.pTim, sizeof(tANI_U8)*pMac->lim.maxStation, 0); pMac->lim.mgmtFrameSessionId = 0xff; pMac->lim.deferredMsgCnt = 0; @@ -1019,6 +1040,7 @@ tSirRetStatus peOpen(tpAniSirGlobal pMac, tMacOpenParameters *pMacOpenParam) PELOGE(limLog(pMac, LOGE, FL("pe lock init failed!"));) return eSIR_FAILURE; } + pMac->lim.deauthMsgCnt = 0; return eSIR_SUCCESS; } @@ -1043,22 +1065,22 @@ tSirRetStatus peClose(tpAniSirGlobal pMac) peDeleteSession(pMac,&pMac->lim.gpSession[i]); } } - palFreeMemory(pMac->hHdd, pMac->lim.limTimers.gpLimCnfWaitTimer); + vos_mem_free(pMac->lim.limTimers.gpLimCnfWaitTimer); pMac->lim.limTimers.gpLimCnfWaitTimer = NULL; #if 0 - palFreeMemory(pMac->hHdd, pMac->lim.gpLimAIDpool); + vos_mem_free(pMac->lim.gpLimAIDpool); pMac->lim.gpLimAIDpool = NULL; #endif - palFreeMemory(pMac->hHdd, pMac->lim.gpSession); + vos_mem_free(pMac->lim.gpSession); pMac->lim.gpSession = NULL; /* - palFreeMemory(pMac->hHdd, pMac->dph.dphHashTable.pHashTable); + vos_mem_free(pMac->dph.dphHashTable.pHashTable); pMac->dph.dphHashTable.pHashTable = NULL; - palFreeMemory(pMac->hHdd, pMac->dph.dphHashTable.pDphNodeArray); + vos_mem_free(pMac->dph.dphHashTable.pDphNodeArray); pMac->dph.dphHashTable.pDphNodeArray = NULL; */ - palFreeMemory(pMac->hHdd, pMac->pmm.gPmmTim.pTim); + vos_mem_free(pMac->pmm.gPmmTim.pTim); pMac->pmm.gPmmTim.pTim = NULL; if( !VOS_IS_STATUS_SUCCESS( vos_lock_destroy( &pMac->lim.lkPeGlobalLock ) ) ) { @@ -1592,9 +1614,9 @@ limUpdateOverlapStaParam(tpAniSirGlobal pMac, tSirMacAddr bssId, tpLimProtStaPar int i; if (!pStaParams->numSta) { - palCopyMemory( pMac->hHdd, pMac->lim.protStaOverlapCache[0].addr, - bssId, - sizeof(tSirMacAddr)); + vos_mem_copy(pMac->lim.protStaOverlapCache[0].addr, + bssId, + sizeof(tSirMacAddr)); pMac->lim.protStaOverlapCache[0].active = true; pStaParams->numSta = 1; @@ -1606,7 +1628,7 @@ limUpdateOverlapStaParam(tpAniSirGlobal pMac, tSirMacAddr bssId, tpLimProtStaPar { if (pMac->lim.protStaOverlapCache[i].active) { - if (palEqualMemory( pMac->hHdd,pMac->lim.protStaOverlapCache[i].addr, + if (vos_mem_compare( pMac->lim.protStaOverlapCache[i].addr, bssId, sizeof(tSirMacAddr))) { return; } @@ -1621,9 +1643,9 @@ limUpdateOverlapStaParam(tpAniSirGlobal pMac, tSirMacAddr bssId, tpLimProtStaPar } else { - palCopyMemory( pMac->hHdd, pMac->lim.protStaOverlapCache[i].addr, - bssId, - sizeof(tSirMacAddr)); + vos_mem_copy(pMac->lim.protStaOverlapCache[i].addr, + bssId, + sizeof(tSirMacAddr)); pMac->lim.protStaOverlapCache[i].active = true; pStaParams->numSta++; @@ -1661,7 +1683,9 @@ limHandleIBSScoalescing( tSirRetStatus retCode; pHdr = WDA_GET_RX_MAC_HEADER(pRxPacketInfo); - if ( (!pBeacon->capabilityInfo.ibss) || (limCmpSSid(pMac, &pBeacon->ssId,psessionEntry) != true) ) + if ( (!pBeacon->capabilityInfo.ibss) || + (limCmpSSid(pMac, &pBeacon->ssId,psessionEntry) != true) || + (psessionEntry->currentOperChannel != pBeacon->channelNumber) ) /* Received SSID does not match => Ignore received Beacon frame. */ retCode = eSIR_LIM_IGNORE_BEACON; else @@ -1717,9 +1741,13 @@ limDetectChangeInApCapabilities(tpAniSirGlobal pMac, /* Some APs are not setting privacy bit when hidden ssid enabled. * So LIM was keep on sending eSIR_SME_AP_CAPS_CHANGED event to SME */ - if (limIsNullSsid(&pBeacon->ssId) && + if ((limIsNullSsid(&pBeacon->ssId) && (SIR_MAC_GET_PRIVACY(apNewCaps.capabilityInfo) != - SIR_MAC_GET_PRIVACY(psessionEntry->limCurrentBssCaps)) + SIR_MAC_GET_PRIVACY(psessionEntry->limCurrentBssCaps))) || + (SIR_MAC_GET_SHORT_PREAMBLE(apNewCaps.capabilityInfo) != + SIR_MAC_GET_SHORT_PREAMBLE(psessionEntry->limCurrentBssCaps)) || + (SIR_MAC_GET_QOS(apNewCaps.capabilityInfo) != + SIR_MAC_GET_QOS(psessionEntry->limCurrentBssCaps)) ) { /* If Hidden SSID and privacy bit is not matching with the current capability, @@ -1732,6 +1760,7 @@ limDetectChangeInApCapabilities(tpAniSirGlobal pMac, } psessionEntry->fWaitForProbeRsp = true; limLog(pMac, LOGW, FL("Hidden SSID and privacy bit is not matching," + " Or Short preamble bit is not matching ," "sending directed probe request.. ")); status = limSendProbeReqMgmtFrame(pMac, &psessionEntry->ssId, psessionEntry->bssId, psessionEntry->currentOperChannel,psessionEntry->selfMacAddr, @@ -1750,10 +1779,15 @@ limDetectChangeInApCapabilities(tpAniSirGlobal pMac, * or probe response frame */ if (psessionEntry->fWaitForProbeRsp == true) { - if (((!limIsNullSsid(&pBeacon->ssId)) && + if ((((!limIsNullSsid(&pBeacon->ssId)) && (limCmpSSid(pMac, &pBeacon->ssId, psessionEntry) == true)) && (SIR_MAC_GET_PRIVACY(apNewCaps.capabilityInfo) == - SIR_MAC_GET_PRIVACY(psessionEntry->limCurrentBssCaps))) + SIR_MAC_GET_PRIVACY(psessionEntry->limCurrentBssCaps))) && + (SIR_MAC_GET_SHORT_PREAMBLE(apNewCaps.capabilityInfo) == + SIR_MAC_GET_SHORT_PREAMBLE(psessionEntry->limCurrentBssCaps)) && + (SIR_MAC_GET_QOS(apNewCaps.capabilityInfo) == + SIR_MAC_GET_QOS(psessionEntry->limCurrentBssCaps)) + ) { /* Only for probe response frames the control will come here */ /* If beacon with broadcast ssid then fWaitForProbeRsp will be false, @@ -1787,9 +1821,9 @@ limDetectChangeInApCapabilities(tpAniSirGlobal pMac, 3 * sizeof(tANI_U8) + // reserved fields pBeacon->ssId.length + 1; - palCopyMemory( pMac->hHdd, apNewCaps.bssId, - psessionEntry->bssId, - sizeof(tSirMacAddr)); + vos_mem_copy(apNewCaps.bssId, + psessionEntry->bssId, + sizeof(tSirMacAddr)); if (newChannel != psessionEntry->currentOperChannel) { PELOGE(limLog(pMac, LOGE, FL("Channel Change from %d --> %d - " @@ -1817,8 +1851,8 @@ limDetectChangeInApCapabilities(tpAniSirGlobal pMac, } else apNewCaps.channelId = psessionEntry->currentOperChannel; - palCopyMemory( pMac->hHdd, (tANI_U8 *) &apNewCaps.ssId, - (tANI_U8 *) &pBeacon->ssId, + vos_mem_copy((tANI_U8 *) &apNewCaps.ssId, + (tANI_U8 *) &pBeacon->ssId, pBeacon->ssId.length + 1); psessionEntry->fIgnoreCapsChange = false; @@ -1977,8 +2011,8 @@ void limHandleMissedBeaconInd(tpAniSirGlobal pMac, tpSirMsgQ pMsg) (pMac->pmm.gPmmState == ePMM_STATE_WOWLAN) ) { pMac->pmm.inMissedBeaconScenario = TRUE; - PELOG1(limLog(pMac, LOG1, FL("Sending EXIT_BMPS_IND to SME "));) - + PELOGE(limLog(pMac, LOGE, + FL("Sending EXIT_BMPS_IND to SME due to Missed beacon from FW"));) limSendExitBmpsInd(pMac, eSME_MISSED_BEACON_IND_RCVD, psessionEntry); } /* ACTIVE_MODE_HB_OFFLOAD */ @@ -2099,10 +2133,8 @@ void limMicFailureInd(tpAniSirGlobal pMac, tpSirMsgQ pMsg) return; } - if (eHAL_STATUS_SUCCESS != - palAllocateMemory(pMac->hHdd, - (void **) &pSirSmeMicFailureInd, - sizeof(tSirSmeMicFailureInd))) + pSirSmeMicFailureInd = vos_mem_malloc(sizeof(tSirSmeMicFailureInd)); + if (NULL == pSirSmeMicFailureInd) { // Log error limLog(pMac, LOGP, @@ -2115,24 +2147,24 @@ void limMicFailureInd(tpAniSirGlobal pMac, tpSirMsgQ pMsg) pSirSmeMicFailureInd->sessionId = psessionEntry->smeSessionId; vos_mem_copy(pSirSmeMicFailureInd->bssId, - pSirMicFailureInd->bssId, - sizeof(tSirMacAddr)); + pSirMicFailureInd->bssId, + sizeof(tSirMacAddr)); vos_mem_copy(pSirSmeMicFailureInd->info.srcMacAddr, - pSirMicFailureInd->info.srcMacAddr, - sizeof(tSirMacAddr)); + pSirMicFailureInd->info.srcMacAddr, + sizeof(tSirMacAddr)); vos_mem_copy(pSirSmeMicFailureInd->info.taMacAddr, - pSirMicFailureInd->info.taMacAddr, - sizeof(tSirMacAddr)); + pSirMicFailureInd->info.taMacAddr, + sizeof(tSirMacAddr)); vos_mem_copy(pSirSmeMicFailureInd->info.dstMacAddr, - pSirMicFailureInd->info.dstMacAddr, - sizeof(tSirMacAddr)); + pSirMicFailureInd->info.dstMacAddr, + sizeof(tSirMacAddr)); vos_mem_copy(pSirSmeMicFailureInd->info.rxMacAddr, - pSirMicFailureInd->info.rxMacAddr, - sizeof(tSirMacAddr)); + pSirMicFailureInd->info.rxMacAddr, + sizeof(tSirMacAddr)); pSirSmeMicFailureInd->info.multicast = pSirMicFailureInd->info.multicast; @@ -2144,7 +2176,7 @@ void limMicFailureInd(tpAniSirGlobal pMac, tpSirMsgQ pMsg) pSirMicFailureInd->info.IV1; vos_mem_copy(pSirSmeMicFailureInd->info.TSC, - pSirMicFailureInd->info.TSC,SIR_CIPHER_SEQ_CTR_SIZE); + pSirMicFailureInd->info.TSC,SIR_CIPHER_SEQ_CTR_SIZE); mmhMsg.type = eWNI_SME_MIC_FAILURE_IND; mmhMsg.bodyptr = pSirSmeMicFailureInd; diff --git a/CORE/MAC/src/pe/lim/limAssocUtils.c b/CORE/MAC/src/pe/lim/limAssocUtils.c index bb43b258d37c..8d6df6f5d687 100644 --- a/CORE/MAC/src/pe/lim/limAssocUtils.c +++ b/CORE/MAC/src/pe/lim/limAssocUtils.c @@ -107,8 +107,8 @@ tANI_U8 limCmpSSid(tpAniSirGlobal pMac, tSirMacSSid *prxSSid,tpPESession psessionEntry) { - if( palEqualMemory( pMac->hHdd, (tANI_U8* ) prxSSid, (tANI_U8 *) &psessionEntry->ssId, - (tANI_U8) (psessionEntry->ssId.length + 1))) + if (vos_mem_compare((tANI_U8* ) prxSSid, (tANI_U8 *) &psessionEntry->ssId, + (tANI_U8) (psessionEntry->ssId.length + 1))) return true; else return false; @@ -263,10 +263,11 @@ limCheckRxBasicRates(tpAniSirGlobal pMac, tSirMacRateSet rxRateSet,tpPESession p tSirMacRateSet *pRateSet, basicRate; tANI_U8 i, j, k, match; - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pRateSet, sizeof(tSirMacRateSet))) + pRateSet = vos_mem_malloc(sizeof(tSirMacRateSet)); + if (NULL == pRateSet) { // Log error - limLog(pMac, LOGP, FL("call to palAllocateMemory failed for RATESET")); + limLog(pMac, LOGP, FL("call to AllocateMemory failed for RATESET")); return false; } @@ -281,14 +282,15 @@ limCheckRxBasicRates(tpAniSirGlobal pMac, tSirMacRateSet rxRateSet,tpPESession p limLog(pMac, LOGP, FL("could not retrieve Operational rateset")); // Free up memory allocated for rateset - palFreeMemory( pMac->hHdd, (tANI_U8 *) pRateSet); + vos_mem_free((tANI_U8 *) pRateSet); return false; } #endif //TO SUPPORT BT-AMP /* Copy operational rate set from session Entry */ - palCopyMemory(pMac->hHdd, pRateSet->rate, (psessionEntry->rateSet.rate), psessionEntry->rateSet.numRates); + vos_mem_copy(pRateSet->rate, (psessionEntry->rateSet.rate), + psessionEntry->rateSet.numRates); pRateSet->numRates = psessionEntry->rateSet.numRates; @@ -318,14 +320,14 @@ limCheckRxBasicRates(tpAniSirGlobal pMac, tSirMacRateSet rxRateSet,tpPESession p if (!match) { // Free up memory allocated for rateset - palFreeMemory( pMac->hHdd, (tANI_U8 *) pRateSet); + vos_mem_free((tANI_U8 *)pRateSet); return false; } } // Free up memory allocated for rateset - palFreeMemory( pMac->hHdd, (tANI_U8 *) pRateSet); + vos_mem_free((tANI_U8 *)pRateSet); return true; } /****** end limCheckRxBasicRates() ******/ @@ -427,10 +429,17 @@ limCheckMCSSet(tpAniSirGlobal pMac, tANI_U8* supportedMCSSet) */ tANI_U8 -limCheckRxRSNIeMatch(tpAniSirGlobal pMac, tDot11fIERSN rxRSNIe,tpPESession pSessionEntry, tANI_U8 staIsHT) +limCheckRxRSNIeMatch(tpAniSirGlobal pMac, tDot11fIERSN rxRSNIe,tpPESession pSessionEntry, + tANI_U8 staIsHT, tANI_BOOLEAN *pmfConnection) { tDot11fIERSN *pRSNIe; tANI_U8 i, j, match, onlyNonHtCipher = 1; +#ifdef WLAN_FEATURE_11W + tANI_BOOLEAN weRequirePMF; + tANI_BOOLEAN weArePMFCapable; + tANI_BOOLEAN theyRequirePMF; + tANI_BOOLEAN theyArePMFCapable; +#endif //RSN IE should be received from PE @@ -454,9 +463,9 @@ limCheckRxRSNIeMatch(tpAniSirGlobal pMac, tDot11fIERSN rxRSNIe,tpPESession pSess { for(j = 0; j < pRSNIe->pwise_cipher_suite_count; j++) { - if(palEqualMemory(pMac,&rxRSNIe.pwise_cipher_suites[i], - &pRSNIe->pwise_cipher_suites[j], - sizeof(pRSNIe->pwise_cipher_suites[j]))) + if (vos_mem_compare(&rxRSNIe.pwise_cipher_suites[i], + &pRSNIe->pwise_cipher_suites[j], + sizeof(pRSNIe->pwise_cipher_suites[j]))) { match = 1; break; @@ -487,6 +496,24 @@ limCheckRxRSNIeMatch(tpAniSirGlobal pMac, tDot11fIERSN rxRSNIe,tpPESession pSess return eSIR_MAC_INVALID_RSN_IE_CAPABILITIES_STATUS; } + *pmfConnection = eANI_BOOLEAN_FALSE; +#ifdef WLAN_FEATURE_11W + weRequirePMF = (pRSNIe->RSN_Cap[0] >> 6) & 0x1; + weArePMFCapable = (pRSNIe->RSN_Cap[0] >> 7) & 0x1; + theyRequirePMF = (rxRSNIe.RSN_Cap[0] >> 6) & 0x1; + theyArePMFCapable = (rxRSNIe.RSN_Cap[0] >> 7) & 0x1; + + if ((theyRequirePMF && theyArePMFCapable && !weArePMFCapable) || + (weRequirePMF && !theyArePMFCapable)) + { + limLog(pMac, LOG1, FL("Association fail, robust management frames policy violation")); + return eSIR_MAC_ROBUST_MGMT_FRAMES_POLICY_VIOLATION; + } + + if(theyArePMFCapable && weArePMFCapable) + *pmfConnection = eANI_BOOLEAN_TRUE; +#endif + return eSIR_SUCCESS; } /****** end limCheckRxRSNIeMatch() ******/ @@ -539,9 +566,9 @@ limCheckRxWPAIeMatch(tpAniSirGlobal pMac, tDot11fIEWPA rxWPAIe,tpPESession pSess { for(j = 0; j < pWPAIe->unicast_cipher_count; j++) { - if(palEqualMemory(pMac,rxWPAIe.unicast_ciphers[i], - pWPAIe->unicast_ciphers[j], - 4)) + if (vos_mem_compare(rxWPAIe.unicast_ciphers[i], + pWPAIe->unicast_ciphers[j], + 4)) { match = 1; break; @@ -655,13 +682,18 @@ limCleanupRxPath(tpAniSirGlobal pMac, tpDphHashNode pStaDs,tpPESession psessionE psessionEntry->limMlmState = eLIM_MLM_WT_DEL_STA_RSP_STATE; /* Deactivating probe after heart beat timer */ limDeactivateAndChangeTimer(pMac, eLIM_PROBE_AFTER_HB_TIMER); + limDeactivateAndChangeTimer(pMac, eLIM_JOIN_FAIL_TIMER); limHeartBeatDeactivateAndChangeTimer(pMac, psessionEntry); limDeactivateAndChangeTimer(pMac, eLIM_KEEPALIVE_TIMER); pMac->lim.gLastBeaconDtimCount = 0; pMac->lim.gLastBeaconDtimPeriod = 0; #ifdef FEATURE_WLAN_CCX +#ifdef FEATURE_WLAN_CCX_UPLOAD + limSendSmeTsmIEInd(pMac, psessionEntry, 0, 0, 0); +#else limDeactivateAndChangeTimer(pMac,eLIM_TSM_TIMER); +#endif /* FEATURE_WLAN_CCX_UPLOAD */ #endif /** @@ -740,7 +772,7 @@ limSendDelStaCnf(tpAniSirGlobal pMac, tSirMacAddr staDsAddr, // MLM state machine if (psessionEntry->pLimMlmJoinReq) { - palFreeMemory( pMac->hHdd, (tANI_U8 *) psessionEntry->pLimMlmJoinReq); + vos_mem_free(psessionEntry->pLimMlmJoinReq); psessionEntry->pLimMlmJoinReq = NULL; } @@ -763,10 +795,9 @@ limSendDelStaCnf(tpAniSirGlobal pMac, tSirMacAddr staDsAddr, limLog( pMac, LOGW, FL("Lim Posting DISASSOC_CNF to Sme. Trigger: %X"), mlmStaContext.cleanupTrigger); - palCopyMemory( pMac->hHdd, - (tANI_U8 *) &mlmDisassocCnf.peerMacAddr, - (tANI_U8 *) staDsAddr, - sizeof(tSirMacAddr)); + vos_mem_copy((tANI_U8 *) &mlmDisassocCnf.peerMacAddr, + (tANI_U8 *) staDsAddr, + sizeof(tSirMacAddr)); mlmDisassocCnf.resultCode = statusCode; mlmDisassocCnf.disassocTrigger = mlmStaContext.cleanupTrigger; @@ -787,8 +818,8 @@ limSendDelStaCnf(tpAniSirGlobal pMac, tSirMacAddr staDsAddr, * Issue Deauth Confirm to SME. */ limLog( pMac, LOGW, FL("Lim Posting DEAUTH_CNF to Sme. Trigger: %X"), mlmStaContext.cleanupTrigger); - palCopyMemory( pMac->hHdd, (tANI_U8 *) &mlmDeauthCnf.peerMacAddr, - (tANI_U8 *) staDsAddr, + vos_mem_copy((tANI_U8 *) &mlmDeauthCnf.peerMacAddr, + (tANI_U8 *) staDsAddr, sizeof(tSirMacAddr)); mlmDeauthCnf.resultCode = statusCode; mlmDeauthCnf.deauthTrigger = @@ -810,9 +841,9 @@ limSendDelStaCnf(tpAniSirGlobal pMac, tSirMacAddr staDsAddr, * Issue Purge Ind to SME. */ limLog( pMac, LOGW, FL("Lim Posting PURGE_STA_IND to Sme. Trigger: %X"), mlmStaContext.cleanupTrigger) ; - palCopyMemory( pMac->hHdd, (tANI_U8 *) &mlmPurgeStaInd.peerMacAddr, - (tANI_U8 *) staDsAddr, - sizeof(tSirMacAddr)); + vos_mem_copy((tANI_U8 *) &mlmPurgeStaInd.peerMacAddr, + (tANI_U8 *) staDsAddr, + sizeof(tSirMacAddr)); mlmPurgeStaInd.reasonCode = (tANI_U8) mlmStaContext.disassocReason; mlmPurgeStaInd.aid = staDsAssocId; mlmPurgeStaInd.purgeTrigger = mlmStaContext.cleanupTrigger; @@ -851,7 +882,7 @@ limSendDelStaCnf(tpAniSirGlobal pMac, tSirMacAddr staDsAddr, } else { - palFreeMemory( pMac->hHdd, psessionEntry->pLimJoinReq); + vos_mem_free(psessionEntry->pLimJoinReq); psessionEntry->pLimJoinReq = NULL; if(mlmStaContext.resultCode != eSIR_SME_SUCCESS) @@ -924,7 +955,7 @@ limRejectAssociation(tpAniSirGlobal pMac, tSirMacAddr peerAddr, tANI_U8 subType, if (pAuthNode) { - palCopyMemory( pMac->hHdd, (tANI_U8 *) pAuthNode->peerMacAddr, + vos_mem_copy((tANI_U8 *) pAuthNode->peerMacAddr, peerAddr, sizeof(tSirMacAddr)); pAuthNode->fTimerStarted = 0; @@ -968,10 +999,10 @@ limRejectAssociation(tpAniSirGlobal pMac, tSirMacAddr peerAddr, tANI_U8 subType, // Assoction confirmation is complete, free the copy of association request frame if ( ((tpSirAssocReq)(psessionEntry->parsedAssocReq[pStaDs->assocId]))->assocReqFrame) { - palFreeMemory(pMac->hHdd,((tpSirAssocReq)(psessionEntry->parsedAssocReq[pStaDs->assocId]))->assocReqFrame); + vos_mem_free(((tpSirAssocReq)(psessionEntry->parsedAssocReq[pStaDs->assocId]))->assocReqFrame); ((tpSirAssocReq)(psessionEntry->parsedAssocReq[pStaDs->assocId]))->assocReqFrame = NULL; } - palFreeMemory(pMac->hHdd, psessionEntry->parsedAssocReq[pStaDs->assocId]); + vos_mem_free(psessionEntry->parsedAssocReq[pStaDs->assocId]); psessionEntry->parsedAssocReq[pStaDs->assocId] = NULL; } } @@ -1013,7 +1044,7 @@ limDecideApProtectionOnHt20Delete(tpAniSirGlobal pMac, { if (psessionEntry->protStaCache[i].active) { - if (palEqualMemory( pMac->hHdd,psessionEntry->protStaCache[i].addr, + if (vos_mem_compare(psessionEntry->protStaCache[i].addr, pStaDs->staAddr, sizeof(tSirMacAddr))) { psessionEntry->gLimHt20Params.numSta--; @@ -1071,7 +1102,7 @@ limDecideApProtectionOnDelete(tpAniSirGlobal pMac, { if (psessionEntry->protStaCache[i].active) { - if (palEqualMemory( pMac->hHdd,psessionEntry->protStaCache[i].addr, + if (vos_mem_compare( psessionEntry->protStaCache[i].addr, pStaDs->staAddr, sizeof(tSirMacAddr))) { psessionEntry->gLim11aParams.numSta--; @@ -1109,7 +1140,7 @@ limDecideApProtectionOnDelete(tpAniSirGlobal pMac, { if (psessionEntry->protStaCache[i].active) { - if (palEqualMemory( pMac->hHdd,psessionEntry->protStaCache[i].addr, + if (vos_mem_compare( psessionEntry->protStaCache[i].addr, pStaDs->staAddr, sizeof(tSirMacAddr))) { psessionEntry->gLim11bParams.numSta--; @@ -1143,7 +1174,7 @@ limDecideApProtectionOnDelete(tpAniSirGlobal pMac, { if (psessionEntry->protStaCache[i].active) { - if (palEqualMemory( pMac->hHdd,psessionEntry->protStaCache[i].addr, + if (vos_mem_compare( psessionEntry->protStaCache[i].addr, pStaDs->staAddr, sizeof(tSirMacAddr))) { psessionEntry->gLim11gParams.numSta--; @@ -1179,7 +1210,7 @@ limDecideApProtectionOnDelete(tpAniSirGlobal pMac, { if (psessionEntry->protStaCache[i].active) { - if (palEqualMemory( pMac->hHdd,psessionEntry->protStaCache[i].addr, + if (vos_mem_compare( psessionEntry->protStaCache[i].addr, pStaDs->staAddr, sizeof(tSirMacAddr))) { psessionEntry->gLimNonGfParams.numSta--; @@ -1215,7 +1246,7 @@ limDecideApProtectionOnDelete(tpAniSirGlobal pMac, { if (psessionEntry->protStaCache[i].active) { - if (palEqualMemory( pMac->hHdd,psessionEntry->protStaCache[i].addr, + if (vos_mem_compare( psessionEntry->protStaCache[i].addr, pStaDs->staAddr, sizeof(tSirMacAddr))) { psessionEntry->gLimLsigTxopParams.numSta--; @@ -1261,7 +1292,7 @@ void limDecideShortPreamble(tpAniSirGlobal pMac, { if (psessionEntry->gLimNoShortParams.staNoShortCache[i].active) { - if (palEqualMemory( pMac->hHdd, psessionEntry->gLimNoShortParams.staNoShortCache[i].addr, + if (vos_mem_compare( psessionEntry->gLimNoShortParams.staNoShortCache[i].addr, pStaDs->staAddr, sizeof(tSirMacAddr))) { psessionEntry->gLimNoShortParams.numNonShortPreambleSta--; @@ -1277,7 +1308,8 @@ void limDecideShortPreamble(tpAniSirGlobal pMac, // enable short preamble PELOG1(limLog(pMac, LOG1, FL("All associated STAs have short preamble support now."));) //reset the cache - palZeroMemory( pMac->hHdd, (tANI_U8 *)&psessionEntry->gLimNoShortParams , sizeof(tLimNoShortParams)); + vos_mem_set((tANI_U8 *)&psessionEntry->gLimNoShortParams, + sizeof(tLimNoShortParams), 0); if (limEnableShortPreamble(pMac, true, pBeaconParams, psessionEntry) != eSIR_SUCCESS) PELOGE(limLog(pMac, LOGE, FL("Cannot enable short preamble"));) } @@ -1310,7 +1342,7 @@ limDecideShortSlot(tpAniSirGlobal pMac, tpDphHashNode pStaDs, { if (psessionEntry->gLimNoShortSlotParams.staNoShortSlotCache[i].active) { - if (palEqualMemory( pMac->hHdd, psessionEntry->gLimNoShortSlotParams.staNoShortSlotCache[i].addr, + if (vos_mem_compare(psessionEntry->gLimNoShortSlotParams.staNoShortSlotCache[i].addr, pStaDs->staAddr, sizeof(tSirMacAddr))) { psessionEntry->gLimNoShortSlotParams.numNonShortSlotSta--; @@ -1328,7 +1360,7 @@ limDecideShortSlot(tpAniSirGlobal pMac, tpDphHashNode pStaDs, { if (pMac->lim.gLimNoShortSlotParams.staNoShortSlotCache[i].active) { - if (palEqualMemory( pMac->hHdd, pMac->lim.gLimNoShortSlotParams.staNoShortSlotCache[i].addr, + if (vos_mem_compare(pMac->lim.gLimNoShortSlotParams.staNoShortSlotCache[i].addr, pStaDs->staAddr, sizeof(tSirMacAddr))) { pMac->lim.gLimNoShortSlotParams.numNonShortSlotSta--; @@ -1348,7 +1380,8 @@ limDecideShortSlot(tpAniSirGlobal pMac, tpDphHashNode pStaDs, // enable short slot time PELOG1(limLog(pMac, LOG1, FL("All associated STAs have short slot time support now."));) //reset the cache - palZeroMemory( pMac->hHdd, (tANI_U8 *)&psessionEntry->gLimNoShortSlotParams , sizeof(tLimNoShortSlotParams)); + vos_mem_set((tANI_U8 *)&psessionEntry->gLimNoShortSlotParams, + sizeof(tLimNoShortSlotParams), 0); // in case of AP set SHORT_SLOT_TIME to enable if (psessionEntry->limSystemRole == eLIM_AP_ROLE) { @@ -1364,7 +1397,8 @@ limDecideShortSlot(tpAniSirGlobal pMac, tpDphHashNode pStaDs, // enable short slot time PELOG1(limLog(pMac, LOG1, FL("All associated STAs have short slot time support now."));) //reset the cache - palZeroMemory( pMac->hHdd, (tANI_U8 *)&pMac->lim.gLimNoShortSlotParams , sizeof(tLimNoShortSlotParams)); + vos_mem_set((tANI_U8 *)&pMac->lim.gLimNoShortSlotParams, + sizeof(tLimNoShortSlotParams), 0); // in case of AP set SHORT_SLOT_TIME to enable if (psessionEntry->limSystemRole == eLIM_AP_ROLE) { @@ -1553,7 +1587,25 @@ tSirRetStatus limPopulateVhtMcsSet(tpAniSirGlobal pMac, pRates->vhtRxHighestDataRate = SIR_MIN(pRates->vhtRxHighestDataRate, pPeerVHTCaps->rxHighSupDataRate); if (pMac->roam.configParam.enable2x2) - mcsMapMask = MCSMAPMASK2x2; + { + if (psessionEntry) + { + if ((pMac->lteCoexAntShare) && + (IS_24G_CH(psessionEntry->currentOperChannel))) + { + if(IS_2X2_CHAIN(psessionEntry->chainMask)) + mcsMapMask = MCSMAPMASK2x2; + } + else + { + mcsMapMask = MCSMAPMASK2x2; + } + } + else + { + mcsMapMask = MCSMAPMASK2x2; + } + } if ((pPeerVHTCaps->rxMCSMap & mcsMapMask) < (pRates->vhtRxMCSMap & mcsMapMask)) { pRates->vhtRxMCSMap &= ~(mcsMapMask); @@ -1618,68 +1670,42 @@ limPopulateOwnRateSet(tpAniSirGlobal pMac, { tSirMacRateSet tempRateSet; tSirMacRateSet tempRateSet2; - tANI_U32 i,j,val,min,isArate; + tANI_U32 i,j,val,min,isArate; tANI_U32 phyMode = 0; - tANI_U32 selfStaDot11Mode=0; + isArate = 0; wlan_cfgGetInt(pMac, WNI_CFG_DOT11_MODE, &selfStaDot11Mode); limGetPhyMode(pMac, &phyMode, psessionEntry); - // Get own rate set - #if 0 - val = WNI_CFG_OPERATIONAL_RATE_SET_LEN; - if (wlan_cfgGetStr(pMac, WNI_CFG_OPERATIONAL_RATE_SET, - (tANI_U8 *) &tempRateSet.rate, - &val) != eSIR_SUCCESS) - { - /// Could not get rateset from CFG. Log error. - limLog(pMac, LOGP, FL("could not retrieve rateset")); - } - #endif // TO SUPPORT BT-AMP - - /* copy operational rate set from psessionEntry */ - if ( psessionEntry->rateSet.numRates < SIR_MAC_RATESET_EID_MAX ) + /* Include 11b rates only when the device configured in + auto, 11a/b/g or 11b_only */ + if ( (selfStaDot11Mode == WNI_CFG_DOT11_MODE_ALL) || + (selfStaDot11Mode == WNI_CFG_DOT11_MODE_11A) || + (selfStaDot11Mode == WNI_CFG_DOT11_MODE_11AC) || + (selfStaDot11Mode == WNI_CFG_DOT11_MODE_11N) || + (selfStaDot11Mode == WNI_CFG_DOT11_MODE_11G) || + (selfStaDot11Mode == WNI_CFG_DOT11_MODE_11B) ) { - palCopyMemory(pMac->hHdd,(tANI_U8 *)tempRateSet.rate,(tANI_U8*)(psessionEntry->rateSet.rate), psessionEntry->rateSet.numRates); - tempRateSet.numRates = psessionEntry->rateSet.numRates; + val = WNI_CFG_SUPPORTED_RATES_11B_LEN; + wlan_cfgGetStr( pMac, WNI_CFG_SUPPORTED_RATES_11B, + (tANI_U8 *)&tempRateSet.rate, &val ); + tempRateSet.numRates = (tANI_U8) val; } else - { - limLog(pMac, LOGE, FL("more than SIR_MAC_RATESET_EID_MAX rates\n")); - goto error; - } + tempRateSet.numRates = 0; - if (phyMode == WNI_CFG_PHY_MODE_11G) + /* Include 11a rates when the device configured in non-11b mode */ + if (!IS_DOT11_MODE_11B(selfStaDot11Mode)) { - - // get own extended rate set - #if 0 - val = WNI_CFG_EXTENDED_OPERATIONAL_RATE_SET_LEN; - if (wlan_cfgGetStr(pMac, WNI_CFG_EXTENDED_OPERATIONAL_RATE_SET, - (tANI_U8 *) &tempRateSet2.rate, - &val) != eSIR_SUCCESS) - { - /// Could not get extended rateset from CFG. Log error. - limLog(pMac, LOGP, FL("could not retrieve extended rateset")); - } + val = WNI_CFG_SUPPORTED_RATES_11A_LEN; + wlan_cfgGetStr( pMac, WNI_CFG_SUPPORTED_RATES_11A, + (tANI_U8 *)&tempRateSet2.rate, &val ); tempRateSet2.numRates = (tANI_U8) val; - #endif - if (psessionEntry->extRateSet.numRates < SIR_MAC_RATESET_EID_MAX) - { - palCopyMemory(pMac->hHdd,(tANI_U8 *)tempRateSet2.rate, (tANI_U8*)(psessionEntry->extRateSet.rate), psessionEntry->extRateSet.numRates); - tempRateSet2.numRates = psessionEntry->extRateSet.numRates; - } - else { - limLog(pMac, LOGE, FL("psessionEntry->extRateSet.numRates more than SIR_MAC_RATESET_EID_MAX rates\n")); - goto error; - } - } else - tempRateSet2.numRates = 0; - + tempRateSet2.numRates = 0; if ((tempRateSet.numRates + tempRateSet2.numRates) > 12) { @@ -1689,7 +1715,6 @@ limPopulateOwnRateSet(tpAniSirGlobal pMac, goto error; } - //copy all rates in tempRateSet, there are 12 rates max for (i = 0;i < tempRateSet2.numRates; i++) tempRateSet.rate[i + tempRateSet.numRates] = tempRateSet2.rate[i]; @@ -1703,7 +1728,7 @@ limPopulateOwnRateSet(tpAniSirGlobal pMac, tANI_U8 aRateIndex = 0; tANI_U8 bRateIndex = 0; - palZeroMemory( pMac->hHdd, (tANI_U8 *) pRates, sizeof(tSirSupportedRates)); + vos_mem_set((tANI_U8 *) pRates, sizeof(tSirSupportedRates), 0); for(i = 0;i < tempRateSet.numRates; i++) { min = 0; @@ -1790,6 +1815,152 @@ limPopulateOwnRateSet(tpAniSirGlobal pMac, return eSIR_FAILURE; } /*** limPopulateOwnRateSet() ***/ +#ifdef WLAN_FEATURE_11AC +tSirRetStatus +limPopulatePeerRateSet(tpAniSirGlobal pMac, + + tpSirSupportedRates pRates, + tANI_U8* pSupportedMCSSet, + tANI_U8 basicOnly, + tpPESession psessionEntry, + tDot11fIEVHTCaps *pVHTCaps) +#else +tSirRetStatus +limPopulatePeerRateSet(tpAniSirGlobal pMac, + tpSirSupportedRates pRates, + tANI_U8* pSupportedMCSSet, + tANI_U8 basicOnly, + tpPESession psessionEntry) +#endif +{ + tSirMacRateSet tempRateSet; + tSirMacRateSet tempRateSet2; + tANI_U32 i,j,val,min,isArate; + isArate = 0; + + /* copy operational rate set from psessionEntry */ + if ( psessionEntry->rateSet.numRates <= SIR_MAC_RATESET_EID_MAX ) + { + vos_mem_copy((tANI_U8 *)tempRateSet.rate, + (tANI_U8*)(psessionEntry->rateSet.rate), + psessionEntry->rateSet.numRates); + tempRateSet.numRates = psessionEntry->rateSet.numRates; + } + else + { + limLog(pMac, LOGE, FL("more than SIR_MAC_RATESET_EID_MAX rates\n")); + goto error; + } + if (psessionEntry->dot11mode == WNI_CFG_DOT11_MODE_11G) + { + + if (psessionEntry->extRateSet.numRates <= SIR_MAC_RATESET_EID_MAX) + { + vos_mem_copy((tANI_U8 *)tempRateSet2.rate, + (tANI_U8*)(psessionEntry->extRateSet.rate), + psessionEntry->extRateSet.numRates); + tempRateSet2.numRates = psessionEntry->extRateSet.numRates; + } + else { + limLog(pMac, LOGE, FL("psessionEntry->extRateSet.numRates more than SIR_MAC_RATESET_EID_MAX rates\n")); + goto error; + } + } + else + tempRateSet2.numRates = 0; + if ((tempRateSet.numRates + tempRateSet2.numRates) > SIR_MAC_RATESET_EID_MAX) + { + //we are in big trouble + limLog(pMac, LOGP, FL("more than 12 rates in CFG")); + goto error; + } + + + //copy all rates in tempRateSet, there are 12 rates max + for (i = 0;i < tempRateSet2.numRates; i++) + tempRateSet.rate[i + tempRateSet.numRates] = tempRateSet2.rate[i]; + tempRateSet.numRates += tempRateSet2.numRates; + /** + * Sort rates in tempRateSet (they are likely to be already sorted) + * put the result in pSupportedRates + */ + { + tANI_U8 aRateIndex = 0; + tANI_U8 bRateIndex = 0; + vos_mem_set((tANI_U8 *) pRates, sizeof(tSirSupportedRates), 0); + for(i = 0;i < tempRateSet.numRates; i++) + { + min = 0; + val = 0xff; + isArate = 0; + for(j = 0; (j < tempRateSet.numRates) && (j < SIR_MAC_RATESET_EID_MAX); j++) + { + if ((tANI_U32) (tempRateSet.rate[j] & 0x7f) < val) + { + val = tempRateSet.rate[j] & 0x7f; + min = j; + } + } + if (sirIsArate(tempRateSet.rate[min] & 0x7f)) + isArate = 1; + /* + * HAL needs to know whether the rate is basic rate or not, as it needs to + * update the response rate table accordingly. e.g. if one of the 11a rates is + * basic rate, then that rate can be used for sending control frames. + * HAL updates the response rate table whenever basic rate set is changed. + */ + if (basicOnly) + { + if (tempRateSet.rate[min] & 0x80) + { + if (isArate) + pRates->llaRates[aRateIndex++] = tempRateSet.rate[min]; + else + pRates->llbRates[bRateIndex++] = tempRateSet.rate[min]; + } + } + else + { + if (isArate) + pRates->llaRates[aRateIndex++] = tempRateSet.rate[min]; + else + pRates->llbRates[bRateIndex++] = tempRateSet.rate[min]; + } + tempRateSet.rate[min] = 0xff; + } + } + + + if (IS_DOT11_MODE_HT(psessionEntry->dot11mode)) + { + val = SIZE_OF_SUPPORTED_MCS_SET; + if (wlan_cfgGetStr(pMac, WNI_CFG_SUPPORTED_MCS_SET, + pRates->supportedMCSSet, + &val) != eSIR_SUCCESS) + { + /// Could not get rateset from CFG. Log error. + PELOGE(limLog(pMac, LOGE, FL("could not retrieve supportedMCSSet"));) + goto error; + } + //if supported MCS Set of the peer is passed in, then do the intersection + //else use the MCS set from local CFG. + if(pSupportedMCSSet != NULL) + { + for(i=0; isupportedMCSSet[i] &= pSupportedMCSSet[i]; + } + PELOG2(limLog(pMac, LOG2, FL("MCS Rate Set Bitmap: "));) + for(i=0; isupportedMCSSet[i]);) + } +#ifdef WLAN_FEATURE_11AC + limPopulateVhtMcsSet(pMac, pRates , pVHTCaps,psessionEntry); +#endif + return eSIR_SUCCESS; + error: + return eSIR_FAILURE; +} /*** limPopulatePeerRateSet() ***/ + /** * limPopulateMatchingRateSet * FUNCTION: @@ -1866,7 +2037,8 @@ limPopulateMatchingRateSet(tpAniSirGlobal pMac, #endif // TO SUPPORT BT-AMP /* copy operational rate set from psessionEntry */ - palCopyMemory(pMac->hHdd,(tempRateSet.rate),(psessionEntry->rateSet.rate),psessionEntry->rateSet.numRates); + vos_mem_copy((tempRateSet.rate), (psessionEntry->rateSet.rate), + psessionEntry->rateSet.numRates); tempRateSet.numRates = (tANI_U8) psessionEntry->rateSet.numRates; if (phyMode == WNI_CFG_PHY_MODE_11G) @@ -1879,7 +2051,8 @@ limPopulateMatchingRateSet(tpAniSirGlobal pMac, (tANI_U8 *) &tempRateSet2.rate, &val) != eSIR_SUCCESS) #endif - palCopyMemory(pMac->hHdd,(tempRateSet2.rate),(psessionEntry->extRateSet.rate),psessionEntry->extRateSet.numRates); + vos_mem_copy((tempRateSet2.rate), (psessionEntry->extRateSet.rate), + psessionEntry->extRateSet.numRates); tempRateSet2.numRates = (tANI_U8) psessionEntry->extRateSet.numRates; } else @@ -1992,7 +2165,7 @@ limPopulateMatchingRateSet(tpAniSirGlobal pMac, tpSirSupportedRates rates = &pStaDs->supportedRates; tANI_U8 aRateIndex = 0; tANI_U8 bRateIndex = 0; - palZeroMemory( pMac->hHdd, (tANI_U8 *) rates, sizeof(tSirSupportedRates)); + vos_mem_set((tANI_U8 *) rates, sizeof(tSirSupportedRates), 0); for(i = 0;(i < tempRateSet2.numRates && i < SIR_MAC_RATESET_EID_MAX ); i++) { for(j = 0;(j < tempRateSet.numRates && j < SIR_MAC_RATESET_EID_MAX); j++) @@ -2123,13 +2296,13 @@ limAddSta( sirCopyMacAddr(staMac,psessionEntry->selfMacAddr); - if( eHAL_STATUS_SUCCESS != - palAllocateMemory( pMac->hHdd, (void **) &pAddStaParams, sizeof( tAddStaParams ))) - { - limLog( pMac, LOGP, FL( "Unable to allocate memory during ADD_STA" )); - return eSIR_MEM_ALLOC_FAILED; - } - palZeroMemory( pMac->hHdd, (tANI_U8 *) pAddStaParams, sizeof(tAddStaParams)); + pAddStaParams = vos_mem_malloc(sizeof(tAddStaParams)); + if (NULL == pAddStaParams) + { + limLog( pMac, LOGP, FL( "Unable to allocate memory during ADD_STA" )); + return eSIR_MEM_ALLOC_FAILED; + } + vos_mem_set((tANI_U8 *) pAddStaParams, sizeof(tAddStaParams), 0); if ((limGetSystemRole(psessionEntry) == eLIM_AP_ROLE) || (limGetSystemRole(psessionEntry) == eLIM_STA_IN_IBSS_ROLE) || @@ -2145,15 +2318,15 @@ limAddSta( else pStaAddr = &staMac; - palCopyMemory( pMac->hHdd, (tANI_U8 *) pAddStaParams->staMac, - (tANI_U8 *) *pStaAddr, sizeof(tSirMacAddr)); - palCopyMemory( pMac->hHdd, (tANI_U8 *) pAddStaParams->bssId, - psessionEntry->bssId, sizeof(tSirMacAddr)); + vos_mem_copy((tANI_U8 *) pAddStaParams->staMac, + (tANI_U8 *) *pStaAddr, sizeof(tSirMacAddr)); + vos_mem_copy((tANI_U8 *) pAddStaParams->bssId, + psessionEntry->bssId, sizeof(tSirMacAddr)); limFillSupportedRatesInfo(pMac, pStaDs, &pStaDs->supportedRates,psessionEntry); //Copy legacy rates - palCopyMemory(pMac->hHdd, (tANI_U8*)&pAddStaParams->supportedRates, + vos_mem_copy ((tANI_U8*)&pAddStaParams->supportedRates, (tANI_U8*)&pStaDs->supportedRates, sizeof(tSirSupportedRates)); pAddStaParams->assocId = pStaDs->assocId; @@ -2321,7 +2494,14 @@ limAddSta( limLog( pMac, LOG1, FL( "uAPSD = 0x%x, maxSpLen = %d" ), pAddStaParams->uAPSD, pAddStaParams->maxSPLen); } - //we need to defer the message until we get the response back from HAL. + +#ifdef WLAN_FEATURE_11W + pAddStaParams->rmfEnabled = pStaDs->rmfEnabled; + limLog( pMac, LOG1, FL( "Adding station, station index %d, PMF enabled %d"), + pAddStaParams->staIdx, pAddStaParams->rmfEnabled); +#endif + + //we need to defer the message until we get the response back from HAL. if (pAddStaParams->respReqd) SET_LIM_PROCESS_DEFD_MESGS(pMac, false); @@ -2344,7 +2524,7 @@ limAddSta( SET_LIM_PROCESS_DEFD_MESGS(pMac, true); limLog( pMac, LOGE, FL("ADD_STA_REQ for aId %d failed (reason %X)"), pStaDs->assocId, retCode ); - palFreeMemory(pMac->hHdd, (void*)pAddStaParams); + vos_mem_free(pAddStaParams); } return retCode; @@ -2385,13 +2565,14 @@ limDelSta( tSirMsgQ msgQ; tSirRetStatus retCode = eSIR_SUCCESS; - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **) &pDelStaParams, sizeof( tDeleteStaParams ))) + pDelStaParams = vos_mem_malloc(sizeof( tDeleteStaParams )); + if (NULL == pDelStaParams) { - limLog( pMac, LOGP, FL( "Unable to PAL allocate memory during ADD_STA" )); + limLog( pMac, LOGP, FL( "Unable to allocate memory during ADD_STA" )); return eSIR_MEM_ALLOC_FAILED; } - palZeroMemory( pMac->hHdd, (tANI_U8 *) pDelStaParams, sizeof(tDeleteStaParams)); + vos_mem_set((tANI_U8 *) pDelStaParams, sizeof(tDeleteStaParams), 0); // // DPH contains the STA index only for "peer" STA entries. @@ -2467,7 +2648,7 @@ limDelSta( SET_LIM_PROCESS_DEFD_MESGS(pMac, true); limLog( pMac, LOGE, FL("Posting DELETE_STA_REQ to HAL failed, reason=%X"), retCode ); - palFreeMemory(pMac->hHdd, (void*)pDelStaParams); + vos_mem_free(pDelStaParams); } return retCode; @@ -2503,7 +2684,7 @@ tSirRetStatus limAddFTStaSelf(tpAniSirGlobal pMac, tANI_U16 assocId, tpPESession #if defined WLAN_FEATURE_VOWIFI_11R_DEBUG - limLog( pMac, LOGE, FL( "Sending SIR_HAL_ADD_STA_REQ... (aid %d)" ), pAddStaParams->assocId); + limLog( pMac, LOG1, FL( "Sending SIR_HAL_ADD_STA_REQ... (aid %d)" ), pAddStaParams->assocId); #endif MTRACE(macTraceMsgTx(pMac, psessionEntry->peSessionId, msgQ.type)); @@ -2513,7 +2694,7 @@ tSirRetStatus limAddFTStaSelf(tpAniSirGlobal pMac, tANI_U16 assocId, tpPESession if( eSIR_SUCCESS != (retCode = wdaPostCtrlMsg( pMac, &msgQ ))) { limLog( pMac, LOGE, FL("Posting ADD_STA_REQ to HAL failed, reason=%X"), retCode ); - palFreeMemory(pMac->hHdd, (void*)pAddStaParams); + vos_mem_free(pAddStaParams); } // // Dont need it any more @@ -2552,8 +2733,9 @@ limAddStaSelf(tpAniSirGlobal pMac,tANI_U16 staIdx, tANI_U8 updateSta, tpPESessio tSirRetStatus retCode = eSIR_SUCCESS; tSirMacAddr staMac; tANI_U32 listenInterval = WNI_CFG_LISTEN_INTERVAL_STADEF; + tANI_U32 shortGi20MhzSupport; + tANI_U32 shortGi40MhzSupport; tANI_U32 ampduLenExponent = 0; - /*This self Sta dot 11 mode comes from the cfg and the expectation here is * that cfg carries the systemwide capability that device under * consideration can support. This capability gets plumbed into the cfg @@ -2579,20 +2761,20 @@ limAddStaSelf(tpAniSirGlobal pMac,tANI_U16 staIdx, tANI_U8 updateSta, tpPESessio #endif //TO SUPPORT BT-AMP sirCopyMacAddr(staMac,psessionEntry->selfMacAddr); - if( eHAL_STATUS_SUCCESS != - palAllocateMemory( pMac->hHdd, (void **) &pAddStaParams, sizeof( tAddStaParams ))) + pAddStaParams = vos_mem_malloc(sizeof(tAddStaParams)); + if (NULL == pAddStaParams) { - limLog( pMac, LOGP, FL( "Unable to PAL allocate memory during ADD_STA" )); + limLog( pMac, LOGP, FL( "Unable to allocate memory during ADD_STA" )); return eSIR_MEM_ALLOC_FAILED; } - palZeroMemory( pMac->hHdd, (tANI_U8 *) pAddStaParams, sizeof(tAddStaParams)); + vos_mem_set((tANI_U8 *) pAddStaParams, sizeof(tAddStaParams), 0); /// Add STA context at MAC HW (BMU, RHP & TFP) - palCopyMemory( pMac->hHdd, (tANI_U8 *) pAddStaParams->staMac, - (tANI_U8 *) staMac, sizeof(tSirMacAddr)); + vos_mem_copy((tANI_U8 *) pAddStaParams->staMac, + (tANI_U8 *) staMac, sizeof(tSirMacAddr)); - palCopyMemory( pMac->hHdd, (tANI_U8 *) pAddStaParams->bssId, - psessionEntry->bssId, sizeof(tSirMacAddr)); + vos_mem_copy((tANI_U8 *) pAddStaParams->bssId, + psessionEntry->bssId, sizeof(tSirMacAddr)); pAddStaParams->assocId = psessionEntry->limAID; pAddStaParams->staType = STA_ENTRY_SELF; @@ -2651,10 +2833,61 @@ limAddStaSelf(tpAniSirGlobal pMac,tANI_U16 staIdx, tANI_U8 updateSta, tpPESessio pAddStaParams->maxAmpduSize = limGetHTCapability(pMac, eHT_MAX_RX_AMPDU_FACTOR, psessionEntry); pAddStaParams->maxAmsduSize = limGetHTCapability( pMac, eHT_MAX_AMSDU_LENGTH, psessionEntry ); pAddStaParams->fDsssCckMode40Mhz = limGetHTCapability( pMac, eHT_DSSS_CCK_MODE_40MHZ, psessionEntry); - pAddStaParams->fShortGI20Mhz = WNI_CFG_SHORT_GI_20MHZ_STAMAX; - // pAddStaParams->fShortGI20Mhz = limGetHTCapability( pMac, eHT_SHORT_GI_20MHZ, psessionEntry); - pAddStaParams->fShortGI40Mhz = WNI_CFG_SHORT_GI_40MHZ_STAMAX; - // pAddStaParams->fShortGI40Mhz = limGetHTCapability( pMac, eHT_SHORT_GI_40MHZ, psessionEntry); + /* + * We will read the gShortGI20Mhz from ini file, and if it is set + * to 1 then we will tell Peer that we support 40Mhz short GI + */ + if (HAL_STATUS_SUCCESS(ccmCfgGetInt + (pMac, WNI_CFG_SHORT_GI_20MHZ, + &shortGi20MhzSupport))) + { + if (VOS_TRUE == shortGi20MhzSupport) + { + pAddStaParams->fShortGI20Mhz = + WNI_CFG_SHORT_GI_20MHZ_STAMAX; + //pAddStaParams->fShortGI20Mhz = + //limGetHTCapability(pMac, eHT_SHORT_GI_20MHZ, + // psessionEntry); + } + else + { + pAddStaParams->fShortGI20Mhz = VOS_FALSE; + } + } + else + { + PELOGE(limLog(pMac, LOGE, FL("could not retrieve shortGI 20Mhz" + "CFG,setting value to default"));) + pAddStaParams->fShortGI20Mhz = WNI_CFG_SHORT_GI_20MHZ_STADEF; + } + + /* + * We will read the gShortGI40Mhz from ini file, and if it is set + * to 1 then we will tell Peer that we support 40Mhz short GI + */ + if (HAL_STATUS_SUCCESS(ccmCfgGetInt + (pMac, WNI_CFG_SHORT_GI_40MHZ, + &shortGi40MhzSupport))) + { + if (VOS_TRUE == shortGi40MhzSupport) + { + pAddStaParams->fShortGI40Mhz = + WNI_CFG_SHORT_GI_40MHZ_STAMAX; + //pAddStaParams->fShortGI40Mhz = + //limGetHTCapability(pMac, eHT_SHORT_GI_40MHZ, + // psessionEntry); + } + else + { + pAddStaParams->fShortGI40Mhz = VOS_FALSE; + } + } + else + { + PELOGE(limLog(pMac, LOGE, FL("could not retrieve shortGI 40Mhz" + "CFG,setting value to default"));) + pAddStaParams->fShortGI40Mhz = WNI_CFG_SHORT_GI_40MHZ_STADEF; + } } } #ifdef WLAN_FEATURE_11AC @@ -2717,7 +2950,7 @@ limAddStaSelf(tpAniSirGlobal pMac,tANI_U16 staIdx, tANI_U8 updateSta, tpPESessio if( eSIR_SUCCESS != (retCode = wdaPostCtrlMsg( pMac, &msgQ ))) { limLog( pMac, LOGE, FL("Posting ADD_STA_REQ to HAL failed, reason=%X"), retCode ); - palFreeMemory(pMac->hHdd, (void*)pAddStaParams); + vos_mem_free(pAddStaParams); } return retCode; } @@ -2930,9 +3163,9 @@ limCheckAndAnnounceJoinSuccess(tpAniSirGlobal pMac, tANI_U32 noa; tANI_U32 TotalNum_NoADesc = 0; - palCopyMemory( pMac->hHdd, currentSSID.ssId, - psessionEntry->ssId.ssId, - psessionEntry->ssId.length); + vos_mem_copy(currentSSID.ssId, + psessionEntry->ssId.ssId, + psessionEntry->ssId.length); currentSSID.length = (tANI_U8)psessionEntry->ssId.length ; @@ -2942,7 +3175,7 @@ limCheckAndAnnounceJoinSuccess(tpAniSirGlobal pMac, ( (SIR_MAC_MGMT_FRAME == pHdr->fc.type) && (SIR_MAC_MGMT_PROBE_RSP == pHdr->fc.subType) ) && currentSSID.length && - (!palEqualMemory( pMac->hHdd,(tANI_U8 *) &pBPR->ssId, + (!vos_mem_compare((tANI_U8 *) &pBPR->ssId, (tANI_U8 *) ¤tSSID, (tANI_U8) (1 + currentSSID.length)) )) { @@ -3051,7 +3284,7 @@ tSirRetStatus limExtractApCapabilities( tpAniSirGlobal pMac, tANI_U16 ieLen, tpSirProbeRespBeacon beaconStruct ) { - palZeroMemory( pMac->hHdd, (tANI_U8 *) beaconStruct, sizeof( tSirProbeRespBeacon )); + vos_mem_set((tANI_U8 *) beaconStruct, sizeof( tSirProbeRespBeacon ), 0); PELOG3(limLog( pMac, LOG3, FL( "In limExtractApCapabilities: The IE's being received are:" )); @@ -3098,13 +3331,13 @@ limDelBss(tpAniSirGlobal pMac, tpDphHashNode pStaDs, tANI_U16 bssIdx,tpPESession tSirMsgQ msgQ; tSirRetStatus retCode = eSIR_SUCCESS; - if( eHAL_STATUS_SUCCESS != - palAllocateMemory( pMac->hHdd, (void **) &pDelBssParams, sizeof( tDeleteBssParams ))) - { - limLog( pMac, LOGP, FL( "Unable to PAL allocate memory during ADD_BSS" )); + pDelBssParams = vos_mem_malloc(sizeof(tDeleteBssParams)); + if (NULL == pDelBssParams) + { + limLog( pMac, LOGP, FL( "Unable to allocate memory during ADD_BSS" )); return eSIR_MEM_ALLOC_FAILED; - } - palZeroMemory( pMac->hHdd, (tANI_U8 *) pDelBssParams, sizeof(tDeleteBssParams)); + } + vos_mem_set((tANI_U8 *) pDelBssParams, sizeof(tDeleteBssParams), 0); pDelBssParams->sessionId = psessionEntry->peSessionId; //update PE session Id @@ -3149,7 +3382,7 @@ limDelBss(tpAniSirGlobal pMac, tpDphHashNode pStaDs, tANI_U16 bssIdx,tpPESession { SET_LIM_PROCESS_DEFD_MESGS(pMac, true); limLog( pMac, LOGE, FL("Posting DELETE_BSS_REQ to HAL failed, reason=%X"), retCode ); - palFreeMemory(pMac->hHdd, (void*)pDelBssParams); + vos_mem_free(pDelBssParams); } return retCode; @@ -3195,25 +3428,26 @@ tSirRetStatus limStaSendAddBss( tpAniSirGlobal pMac, tpSirAssocRsp pAssocRsp, tANI_U8 i; tpDphHashNode pStaDs = NULL; tANI_U8 chanWidthSupp = 0; + tANI_U32 shortGi20MhzSupport; + tANI_U32 shortGi40MhzSupport; // Package SIR_HAL_ADD_BSS_REQ message parameters - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, - (void **) &pAddBssParams, - sizeof( tAddBssParams ))) + pAddBssParams = vos_mem_malloc(sizeof( tAddBssParams )); + if (NULL == pAddBssParams) { limLog( pMac, LOGP, - FL( "Unable to PAL allocate memory during ADD_BSS" )); + FL( "Unable to allocate memory during ADD_BSS" )); retCode = eSIR_MEM_ALLOC_FAILED; goto returnFailure; } else - palZeroMemory( pMac->hHdd, (tANI_U8 *) pAddBssParams, sizeof( tAddBssParams )); + vos_mem_set((tANI_U8 *) pAddBssParams, sizeof( tAddBssParams ), 0); - palCopyMemory( pMac->hHdd, pAddBssParams->bssId,bssDescription->bssId, - sizeof( tSirMacAddr )); + vos_mem_copy(pAddBssParams->bssId,bssDescription->bssId, + sizeof(tSirMacAddr)); // Fill in tAddBssParams selfMacAddr - palCopyMemory( pMac->hHdd, pAddBssParams->selfMacAddr, - psessionEntry->selfMacAddr, - sizeof( tSirMacAddr )); + vos_mem_copy(pAddBssParams->selfMacAddr, + psessionEntry->selfMacAddr, + sizeof(tSirMacAddr)); if(psessionEntry->bssType == eSIR_BTAMP_AP_MODE) { @@ -3241,17 +3475,10 @@ tSirRetStatus limStaSendAddBss( tpAniSirGlobal pMac, tpSirAssocRsp pAssocRsp, pAddBssParams->cfParamSet.cfpDurRemaining = pBeaconStruct->cfParamSet.cfpDurRemaining; pAddBssParams->rateSet.numRates = pAssocRsp->supportedRates.numRates; - palCopyMemory( pMac->hHdd, pAddBssParams->rateSet.rate, - pAssocRsp->supportedRates.rate, pAssocRsp->supportedRates.numRates ); + vos_mem_copy(pAddBssParams->rateSet.rate, + pAssocRsp->supportedRates.rate, pAssocRsp->supportedRates.numRates); - if (psessionEntry->dot11mode == WNI_CFG_DOT11_MODE_11B) - { - pAddBssParams->nwType = eSIR_11B_NW_TYPE; - } - else - { - pAddBssParams->nwType = bssDescription->nwType; - } + pAddBssParams->nwType = bssDescription->nwType; pAddBssParams->shortSlotTimeSupported = (tANI_U8)pAssocRsp->capabilityInfo.shortSlotTime; pAddBssParams->llaCoexist = (tANI_U8) psessionEntry->beaconParams.llaCoexist; @@ -3321,9 +3548,9 @@ tSirRetStatus limStaSendAddBss( tpAniSirGlobal pMac, tpSirAssocRsp pAssocRsp, /* staType = PEER*/ pAddBssParams->staContext.staType = STA_ENTRY_OTHER; // Identifying AP as an STA - palCopyMemory( pMac->hHdd, pAddBssParams->staContext.bssId, - bssDescription->bssId, - sizeof( tSirMacAddr )); + vos_mem_copy(pAddBssParams->staContext.bssId, + bssDescription->bssId, + sizeof( tSirMacAddr)); pAddBssParams->staContext.listenInterval = bssDescription->beaconInterval; /* Fill Assoc id from the dph table */ @@ -3355,8 +3582,7 @@ tSirRetStatus limStaSendAddBss( tpAniSirGlobal pMac, tpSirAssocRsp pAssocRsp, pAddBssParams->staContext.maxSPLen = 0; pAddBssParams->staContext.shortPreambleSupported = (tANI_U8)pAssocRsp->capabilityInfo.shortPreamble; pAddBssParams->staContext.updateSta = updateEntry; - - if (IS_DOT11_MODE_HT(psessionEntry->dot11mode) && ( pBeaconStruct->HTCaps.present )) + if (IS_DOT11_MODE_HT(psessionEntry->dot11mode) && pBeaconStruct->HTCaps.present) { pAddBssParams->staContext.us32MaxAmpduDuration = 0; pAddBssParams->staContext.htCapable = 1; @@ -3380,7 +3606,6 @@ tSirRetStatus limStaSendAddBss( tpAniSirGlobal pMac, tpSirAssocRsp pAssocRsp, } } #endif - if( (pAssocRsp->HTCaps.supportedChannelWidthSet) && (chanWidthSupp) ) { @@ -3401,8 +3626,56 @@ tSirRetStatus limStaSendAddBss( tpAniSirGlobal pMac, tpSirAssocRsp pAssocRsp, pAddBssParams->staContext.maxAmsduSize = ( tANI_U8 )pAssocRsp->HTCaps.maximalAMSDUsize; pAddBssParams->staContext.maxAmpduDensity = pAssocRsp->HTCaps.mpduDensity; pAddBssParams->staContext.fDsssCckMode40Mhz = (tANI_U8)pAssocRsp->HTCaps.dsssCckMode40MHz; - pAddBssParams->staContext.fShortGI20Mhz = (tANI_U8)pAssocRsp->HTCaps.shortGI20MHz; - pAddBssParams->staContext.fShortGI40Mhz = (tANI_U8)pAssocRsp->HTCaps.shortGI40MHz; + /* + * We will check gShortGI20Mhz and gShortGI40Mhz from ini file. + * if they are set then we will use what ever Assoc response coming + * from AP supports. If these values are set as 0 in ini file then + * we will hardcode this values to 0. + */ + if (HAL_STATUS_SUCCESS(ccmCfgGetInt + (pMac, WNI_CFG_SHORT_GI_20MHZ, + &shortGi20MhzSupport))) + { + if (VOS_TRUE == shortGi20MhzSupport) + { + pAddBssParams->staContext.fShortGI20Mhz = + (tANI_U8)pAssocRsp->HTCaps.shortGI20MHz; + } + else + { + pAddBssParams->staContext.fShortGI20Mhz = VOS_FALSE; + } + } + else + { + PELOGE(limLog(pMac, LOGE, FL("could not retrieve shortGI 20Mhz" + "CFG,setting value to default"));) + pAddBssParams->staContext.fShortGI20Mhz = + WNI_CFG_SHORT_GI_20MHZ_STADEF; + } + + if (HAL_STATUS_SUCCESS(ccmCfgGetInt + (pMac, WNI_CFG_SHORT_GI_40MHZ, + &shortGi40MhzSupport))) + { + if (VOS_TRUE == shortGi40MhzSupport) + { + pAddBssParams->staContext.fShortGI40Mhz = + (tANI_U8)pAssocRsp->HTCaps.shortGI40MHz; + } + else + { + pAddBssParams->staContext.fShortGI40Mhz = VOS_FALSE; + } + } + else + { + PELOGE(limLog(pMac, LOGE, FL("could not retrieve shortGI 40Mhz" + "CFG,setting value to default"));) + pAddBssParams->staContext.fShortGI40Mhz = + WNI_CFG_SHORT_GI_40MHZ_STADEF; + } + #ifdef WLAN_FEATURE_11AC if (!pAddBssParams->staContext.vhtCapable) // Use max ampd factor advertised in HTCAP for non-vht connection @@ -3447,7 +3720,7 @@ tSirRetStatus limStaSendAddBss( tpAniSirGlobal pMac, tpSirAssocRsp pAssocRsp, if (pStaDs != NULL) { limFillSupportedRatesInfo(pMac, pStaDs, &pStaDs->supportedRates,psessionEntry); - palCopyMemory(pMac->hHdd, (tANI_U8*)&pAddBssParams->staContext.supportedRates, + vos_mem_copy((tANI_U8*)&pAddBssParams->staContext.supportedRates, (tANI_U8*)&pStaDs->supportedRates, sizeof(tSirSupportedRates)); } @@ -3481,8 +3754,7 @@ tSirRetStatus limStaSendAddBss( tpAniSirGlobal pMac, tpSirAssocRsp pAssocRsp, pAddBssParams->staContext.p2pCapableSta = 1; } - pAddBssParams->bSpectrumMgtEnabled = psessionEntry->spectrumMgtEnabled || - limIsconnectedOnDFSChannel(bssDescription->channelId); + pAddBssParams->bSpectrumMgtEnabled = psessionEntry->spectrumMgtEnabled; #if defined WLAN_FEATURE_VOWIFI_11R pAddBssParams->extSetStaKeyParamValid = 0; @@ -3519,7 +3791,7 @@ tSirRetStatus limStaSendAddBss( tpAniSirGlobal pMac, tpSirAssocRsp pAssocRsp, if( eSIR_SUCCESS != retCode) { SET_LIM_PROCESS_DEFD_MESGS(pMac, true); - palFreeMemory(pMac->hHdd, pAddBssParams); + vos_mem_free(pAddBssParams); limLog( pMac, LOGE, FL("Posting ADD_BSS_REQ to HAL failed, reason=%X"), retCode ); goto returnFailure; @@ -3544,28 +3816,29 @@ tSirRetStatus limStaSendAddBssPreAssoc( tpAniSirGlobal pMac, tANI_U8 updateEntry tANI_U8 i; tSchBeaconStruct *pBeaconStruct; tANI_U8 chanWidthSupp = 0; + tANI_U32 shortGi20MhzSupport; + tANI_U32 shortGi40MhzSupport; tpSirBssDescription bssDescription = &psessionEntry->pLimJoinReq->bssDescription; - if(eHAL_STATUS_SUCCESS != palAllocateMemory(pMac->hHdd, - (void **)&pBeaconStruct, sizeof(tSchBeaconStruct))) + pBeaconStruct = vos_mem_malloc(sizeof(tSchBeaconStruct)); + if (NULL == pBeaconStruct) { - limLog(pMac, LOGE, FL("Unable to PAL allocate memory during ADD_BSS") ); + limLog(pMac, LOGE, FL("Unable to allocate memory during ADD_BSS") ); return eSIR_MEM_ALLOC_FAILED; } // Package SIR_HAL_ADD_BSS_REQ message parameters - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, - (void **) &pAddBssParams, - sizeof( tAddBssParams ))) + pAddBssParams = vos_mem_malloc(sizeof(tAddBssParams)); + if (NULL == pAddBssParams) { limLog( pMac, LOGP, - FL( "Unable to PAL allocate memory during ADD_BSS" )); + FL( "Unable to allocate memory during ADD_BSS" )); retCode = eSIR_MEM_ALLOC_FAILED; goto returnFailure; } - palZeroMemory( pMac->hHdd, (tANI_U8 *) pAddBssParams, sizeof( tAddBssParams )); + vos_mem_set((tANI_U8 *) pAddBssParams, sizeof( tAddBssParams ), 0); limExtractApCapabilities( pMac, @@ -3575,13 +3848,13 @@ tSirRetStatus limStaSendAddBssPreAssoc( tpAniSirGlobal pMac, tANI_U8 updateEntry if(pMac->lim.gLimProtectionControl != WNI_CFG_FORCE_POLICY_PROTECTION_DISABLE) limDecideStaProtectionOnAssoc(pMac, pBeaconStruct, psessionEntry); - palCopyMemory( pMac->hHdd, pAddBssParams->bssId,bssDescription->bssId, - sizeof( tSirMacAddr )); + vos_mem_copy(pAddBssParams->bssId, bssDescription->bssId, + sizeof(tSirMacAddr)); // Fill in tAddBssParams selfMacAddr - palCopyMemory( pMac->hHdd, pAddBssParams->selfMacAddr, - psessionEntry->selfMacAddr, - sizeof( tSirMacAddr )); + vos_mem_copy(pAddBssParams->selfMacAddr, + psessionEntry->selfMacAddr, + sizeof(tSirMacAddr)); /* Incorrect BSS Type which caused UMA Descriptor to be overwritten on * top of an already established Infra link. This lead to issues in @@ -3604,8 +3877,8 @@ tSirRetStatus limStaSendAddBssPreAssoc( tpAniSirGlobal pMac, tANI_U8 updateEntry pAddBssParams->rateSet.numRates = pBeaconStruct->supportedRates.numRates; - palCopyMemory( pMac->hHdd, pAddBssParams->rateSet.rate, - pBeaconStruct->supportedRates.rate, pBeaconStruct->supportedRates.numRates ); + vos_mem_copy(pAddBssParams->rateSet.rate, + pBeaconStruct->supportedRates.rate, pBeaconStruct->supportedRates.numRates); pAddBssParams->nwType = bssDescription->nwType; @@ -3655,6 +3928,9 @@ tSirRetStatus limStaSendAddBssPreAssoc( tpAniSirGlobal pMac, tANI_U8 updateEntry pAddBssParams->currentExtChannel, psessionEntry->apCenterChan, psessionEntry); + pAddBssParams->staContext.maxAmpduSize = + SIR_MAC_GET_VHT_MAX_AMPDU_EXPO( + pAddBssParams->staContext.vht_caps); } else { @@ -3667,9 +3943,9 @@ tSirRetStatus limStaSendAddBssPreAssoc( tpAniSirGlobal pMac, tANI_U8 updateEntry { pAddBssParams->staContext.staType = STA_ENTRY_OTHER; // Identifying AP as an STA - palCopyMemory( pMac->hHdd, pAddBssParams->staContext.bssId, - bssDescription->bssId, - sizeof( tSirMacAddr )); + vos_mem_copy(pAddBssParams->staContext.bssId, + bssDescription->bssId, + sizeof(tSirMacAddr)); pAddBssParams->staContext.listenInterval = bssDescription->beaconInterval; pAddBssParams->staContext.assocId = 0; // Is SMAC OK with this? @@ -3723,8 +3999,56 @@ tSirRetStatus limStaSendAddBssPreAssoc( tpAniSirGlobal pMac, tANI_U8 updateEntry pAddBssParams->staContext.maxAmsduSize = ( tANI_U8 ) pBeaconStruct->HTCaps.maximalAMSDUsize; pAddBssParams->staContext.maxAmpduDensity = pBeaconStruct->HTCaps.mpduDensity; pAddBssParams->staContext.fDsssCckMode40Mhz = (tANI_U8)pBeaconStruct->HTCaps.dsssCckMode40MHz; - pAddBssParams->staContext.fShortGI20Mhz = (tANI_U8)pBeaconStruct->HTCaps.shortGI20MHz; - pAddBssParams->staContext.fShortGI40Mhz = (tANI_U8)pBeaconStruct->HTCaps.shortGI40MHz; + /* + * We will check gShortGI20Mhz and gShortGI40Mhz from ini file. + * if they are set then we will use what ever Beacon coming from AP + * supports. If these values are set as 0 in ini file then + * we will hardcode this values to 0. + */ + if (HAL_STATUS_SUCCESS(ccmCfgGetInt + (pMac, WNI_CFG_SHORT_GI_20MHZ, + &shortGi20MhzSupport))) + { + if (VOS_TRUE == shortGi20MhzSupport) + { + pAddBssParams->staContext.fShortGI20Mhz = + (tANI_U8)pBeaconStruct->HTCaps.shortGI20MHz; + } + else + { + pAddBssParams->staContext.fShortGI20Mhz = VOS_FALSE; + } + } + else + { + PELOGE(limLog(pMac, LOGE, FL("could not retrieve shortGI 20Mhz" + "CFG,setting value to default"));) + pAddBssParams->staContext.fShortGI20Mhz = + WNI_CFG_SHORT_GI_20MHZ_STADEF; + } + + if (HAL_STATUS_SUCCESS(ccmCfgGetInt + (pMac, WNI_CFG_SHORT_GI_40MHZ, + &shortGi40MhzSupport))) + { + if (VOS_TRUE == shortGi40MhzSupport) + { + pAddBssParams->staContext.fShortGI40Mhz = + (tANI_U8)pBeaconStruct->HTCaps.shortGI40MHz; + } + else + { + pAddBssParams->staContext.fShortGI40Mhz = VOS_FALSE; + } + } + else + { + PELOGE(limLog(pMac, LOGE, FL("could not retrieve shortGI 40Mhz" + "CFG,setting value to default"));) + pAddBssParams->staContext.fShortGI40Mhz = + WNI_CFG_SHORT_GI_40MHZ_STADEF; + } + pAddBssParams->staContext.maxAmpduSize= pBeaconStruct->HTCaps.maxRxAMPDUFactor; if( pAddBssParams->staContext.vhtTxBFCapable && pMac->lim.disableLDPCWithTxbfAP ) { @@ -3750,11 +4074,11 @@ tSirRetStatus limStaSendAddBssPreAssoc( tpAniSirGlobal pMac, tANI_U8 updateEntry //Update the rates #ifdef WLAN_FEATURE_11AC - limPopulateOwnRateSet(pMac, &pAddBssParams->staContext.supportedRates, + limPopulatePeerRateSet(pMac, &pAddBssParams->staContext.supportedRates, pBeaconStruct->HTCaps.supportedMCSSet, false,psessionEntry, &pBeaconStruct->VHTCaps); #else - limPopulateOwnRateSet(pMac, &pAddBssParams->staContext.supportedRates, + limPopulatePeerRateSet(pMac, &pAddBssParams->staContext.supportedRates, pBeaconStruct->HTCaps.supportedMCSSet, false,psessionEntry); #endif limFillSupportedRatesInfo(pMac, NULL, &pAddBssParams->staContext.supportedRates,psessionEntry); @@ -3786,8 +4110,7 @@ tSirRetStatus limStaSendAddBssPreAssoc( tpAniSirGlobal pMac, tANI_U8 updateEntry pAddBssParams->halPersona = (tANI_U8)psessionEntry->pePersona; //update persona - pAddBssParams->bSpectrumMgtEnabled = psessionEntry->spectrumMgtEnabled || - limIsconnectedOnDFSChannel(bssDescription->channelId); + pAddBssParams->bSpectrumMgtEnabled = psessionEntry->spectrumMgtEnabled; #if defined WLAN_FEATURE_VOWIFI_11R pAddBssParams->extSetStaKeyParamValid = 0; @@ -3824,7 +4147,7 @@ tSirRetStatus limStaSendAddBssPreAssoc( tpAniSirGlobal pMac, tANI_U8 updateEntry if( eSIR_SUCCESS != retCode) { SET_LIM_PROCESS_DEFD_MESGS(pMac, true); - palFreeMemory(pMac->hHdd, pAddBssParams); + vos_mem_free(pAddBssParams); limLog( pMac, LOGE, FL("Posting ADD_BSS_REQ to HAL failed, reason=%X"), retCode ); goto returnFailure; @@ -3832,13 +4155,13 @@ tSirRetStatus limStaSendAddBssPreAssoc( tpAniSirGlobal pMac, tANI_U8 updateEntry } else { - palFreeMemory(pMac->hHdd, pBeaconStruct); + vos_mem_free(pBeaconStruct); return retCode; } returnFailure: // Clean-up will be done by the caller... - palFreeMemory(pMac->hHdd, pBeaconStruct); + vos_mem_free(pBeaconStruct); return retCode; } @@ -3871,27 +4194,25 @@ limPrepareAndSendDelStaCnf(tpAniSirGlobal pMac, tpDphHashNode pStaDs, tSirResult return; } staDsAssocId = pStaDs->assocId; - palCopyMemory( pMac->hHdd, (tANI_U8 *)staDsAddr, + vos_mem_copy((tANI_U8 *)staDsAddr, pStaDs->staAddr, sizeof(tSirMacAddr)); mlmStaContext = pStaDs->mlmStaContext; - if(eSIR_SME_SUCCESS == statusCode) + if ((psessionEntry->limSystemRole == eLIM_AP_ROLE) || + (psessionEntry->limSystemRole == eLIM_BT_AMP_AP_ROLE)) { - if ((psessionEntry->limSystemRole == eLIM_AP_ROLE) || - (psessionEntry->limSystemRole == eLIM_BT_AMP_AP_ROLE)) - { - limReleasePeerIdx(pMac, pStaDs->assocId, psessionEntry); - } - - limDeleteDphHashEntry(pMac, pStaDs->staAddr, pStaDs->assocId,psessionEntry); + limReleasePeerIdx(pMac, pStaDs->assocId, psessionEntry); } - if ( (psessionEntry->limSystemRole == eLIM_STA_ROLE)||(psessionEntry->limSystemRole == eLIM_BT_AMP_STA_ROLE)) + limDeleteDphHashEntry(pMac, pStaDs->staAddr, pStaDs->assocId, psessionEntry); + + if ( (psessionEntry->limSystemRole == eLIM_STA_ROLE)|| + (psessionEntry->limSystemRole == eLIM_BT_AMP_STA_ROLE)) { psessionEntry->limMlmState = eLIM_MLM_IDLE_STATE; - MTRACE(macTrace(pMac, TRACE_CODE_MLM_STATE, psessionEntry->peSessionId, psessionEntry->limMlmState)); + MTRACE(macTrace(pMac, TRACE_CODE_MLM_STATE, + psessionEntry->peSessionId, psessionEntry->limMlmState)); } - limSendDelStaCnf(pMac, staDsAddr, staDsAssocId, mlmStaContext, statusCode,psessionEntry); } @@ -4104,14 +4425,14 @@ void limSendSmeUnprotectedMgmtFrameInd( length = sizeof(tSirSmeUnprotMgmtFrameInd) + frameLen; - if (eHAL_STATUS_SUCCESS != - palAllocateMemory(pMac->hHdd, (void **)&pSirSmeMgmtFrame, length)) + pSirSmeMgmtFrame = vos_mem_malloc(length); + if (NULL == pSirSmeMgmtFrame) { limLog(pMac, LOGP, - FL("palAllocateMemory failed for tSirSmeUnprotectedMgmtFrameInd")); + FL("AllocateMemory failed for tSirSmeUnprotectedMgmtFrameInd")); return; } - palZeroMemory(pMac->hHdd, (void*)pSirSmeMgmtFrame, length); + vos_mem_set((void*)pSirSmeMgmtFrame, length, 0); pSirSmeMgmtFrame->sessionId = sessionId; pSirSmeMgmtFrame->frameType = frameType; @@ -4127,3 +4448,48 @@ void limSendSmeUnprotectedMgmtFrameInd( return; } #endif + +#if defined(FEATURE_WLAN_CCX) && defined(FEATURE_WLAN_CCX_UPLOAD) +/** ------------------------------------------------------------- +\fn limSendSmeTsmIEInd +\brief Forwards the TSM IE information to SME. +\param tpAniSirGlobal pMac +\param psessionEntry - PE session context +\param tid - traffic id +\param state - tsm state (enabled/disabled) +\param measurementInterval - measurement interval +\return none + -------------------------------------------------------------*/ +void limSendSmeTsmIEInd(tpAniSirGlobal pMac, tpPESession psessionEntry, + tANI_U8 tid, tANI_U8 state, tANI_U16 measInterval) +{ + tSirMsgQ mmhMsg; + tpSirSmeTsmIEInd pSirSmeTsmIeInd = NULL; + + if (!pMac || !psessionEntry) + { + return; + } + pSirSmeTsmIeInd = vos_mem_malloc(sizeof(tSirSmeTsmIEInd)); + if (NULL == pSirSmeTsmIeInd) + { + limLog(pMac, LOGP, + FL("AllocateMemory failed for tSirSmeTsmIEInd")); + return; + } + vos_mem_set((void*)pSirSmeTsmIeInd, sizeof(tSirSmeTsmIEInd), 0); + + pSirSmeTsmIeInd->sessionId = psessionEntry->smeSessionId; + pSirSmeTsmIeInd->tsmIe.tsid = tid; + pSirSmeTsmIeInd->tsmIe.state= state; + pSirSmeTsmIeInd->tsmIe.msmt_interval= measInterval; + + mmhMsg.type = eWNI_SME_TSM_IE_IND; + mmhMsg.bodyptr = pSirSmeTsmIeInd; + mmhMsg.bodyval = 0; + + limSysProcessMmhMsgApi(pMac, &mmhMsg, ePROT); + return; +} +#endif /* FEATURE_WLAN_CCX && FEATURE_WLAN_CCX_UPLOAD */ + diff --git a/CORE/MAC/src/pe/lim/limAssocUtils.h b/CORE/MAC/src/pe/lim/limAssocUtils.h index 43aaadf461d5..c3e769e69cd4 100644 --- a/CORE/MAC/src/pe/lim/limAssocUtils.h +++ b/CORE/MAC/src/pe/lim/limAssocUtils.h @@ -51,7 +51,7 @@ tANI_U8 limCompareCapabilities(tpAniSirGlobal, tSirAssocReq *, tSirMacCapabilityInfo *,tpPESession); tANI_U8 limCheckRxBasicRates(tpAniSirGlobal, tSirMacRateSet,tpPESession); -tANI_U8 limCheckRxRSNIeMatch(tpAniSirGlobal, tDot11fIERSN, tpPESession, tANI_U8); +tANI_U8 limCheckRxRSNIeMatch(tpAniSirGlobal, tDot11fIERSN, tpPESession, tANI_U8, tANI_BOOLEAN *); tANI_U8 limCheckRxWPAIeMatch(tpAniSirGlobal, tDot11fIEWPA, tpPESession, tANI_U8); tANI_U8 limCheckMCSSet(tpAniSirGlobal pMac, tANI_U8* supportedMCSSet); void limPostDummyToTmRing(tpAniSirGlobal, tpDphHashNode); @@ -63,6 +63,21 @@ void limRejectAssociation(tpAniSirGlobal , tSirMacAddr, tANI_U8, tANI_U8 , tAniAuthType, tANI_U16, tANI_U8, tSirResultCodes, tpPESession); +#ifdef WLAN_FEATURE_11AC +tSirRetStatus limPopulatePeerRateSet(tpAniSirGlobal pMac, + tpSirSupportedRates pRates, + tANI_U8* pSupportedMCSSet, + tANI_U8 basicOnly, + tpPESession psessionEntry, + tDot11fIEVHTCaps *pVHTCaps); +#else +tSirRetStatus limPopulatePeerRateSet(tpAniSirGlobal pMac, + tpSirSupportedRates pRates, + tANI_U8* pSupportedMCSSet, + tANI_U8 basicOnly, + tpPESession psessionEntry); +#endif + #ifdef WLAN_FEATURE_11AC tSirRetStatus limPopulateOwnRateSet(tpAniSirGlobal pMac, tpSirSupportedRates pRates, @@ -174,6 +189,10 @@ void limSendSmeUnprotectedMgmtFrameInd(tpAniSirGlobal pMac, tANI_U8 frameType, tANI_U8 *frame, tANI_U32 frameLen, tANI_U16 sessionId, tpPESession psessionEntry); #endif +#if defined(FEATURE_WLAN_CCX) && defined(FEATURE_WLAN_CCX_UPLOAD) +void limSendSmeTsmIEInd( tpAniSirGlobal pMac, tpPESession psessionEntry, + tANI_U8 tid, tANI_U8 state, tANI_U16 measInterval); +#endif /* FEATURE_WLAN_CCX && FEATURE_WLAN_CCX_UPLOAD */ #endif /* __LIM_ASSOC_UTILS_H */ diff --git a/CORE/MAC/src/pe/lim/limFT.c b/CORE/MAC/src/pe/lim/limFT.c index b29a303e5c9c..68f4cb638d50 100644 --- a/CORE/MAC/src/pe/lim/limFT.c +++ b/CORE/MAC/src/pe/lim/limFT.c @@ -27,13 +27,13 @@ #ifdef WLAN_FEATURE_VOWIFI_11R /**========================================================================= - - \brief implementation for PE 11r VoWiFi FT Protocol - + + \brief implementation for PE 11r VoWiFi FT Protocol + Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - + Qualcomm Technologies Confidential and Proprietary. - + ========================================================================*/ /* $Header$ */ @@ -59,7 +59,7 @@ #define LIM_FT_RIC_DESCRIPTOR_MAX_VAR_DATA_LEN 255 /*-------------------------------------------------------------------------- - Initialize the FT variables. + Initialize the FT variables. ------------------------------------------------------------------------*/ void limFTOpen(tpAniSirGlobal pMac) { @@ -68,15 +68,15 @@ void limFTOpen(tpAniSirGlobal pMac) } /*-------------------------------------------------------------------------- - Cleanup FT variables. + Cleanup FT variables. ------------------------------------------------------------------------*/ void limFTCleanup(tpAniSirGlobal pMac) { - if (pMac->ft.ftPEContext.pFTPreAuthReq) + if (pMac->ft.ftPEContext.pFTPreAuthReq) { #if defined WLAN_FEATURE_VOWIFI_11R_DEBUG PELOGE(limLog( pMac, LOGE, "%s: Freeing pFTPreAuthReq= %p", - __func__, pMac->ft.ftPEContext.pFTPreAuthReq);) + __func__, pMac->ft.ftPEContext.pFTPreAuthReq);) #endif if (pMac->ft.ftPEContext.pFTPreAuthReq->pbssDescription) { @@ -93,7 +93,7 @@ void limFTCleanup(tpAniSirGlobal pMac) { #if defined WLAN_FEATURE_VOWIFI_11R_DEBUG PELOGE(limLog( pMac, LOGE, "%s: Setting psavedsessionEntry= %p to NULL", - __func__, pMac->ft.ftPEContext.psavedsessionEntry);) + __func__, pMac->ft.ftPEContext.psavedsessionEntry);) #endif pMac->ft.ftPEContext.psavedsessionEntry = NULL; } @@ -111,7 +111,7 @@ void limFTCleanup(tpAniSirGlobal pMac) pMac->ft.ftPEContext.pftSessionEntry = NULL; #if defined WLAN_FEATURE_VOWIFI_11R_DEBUG PELOGE(limLog( pMac, LOGE, "%s: Setting psavedsessionEntry= %p to NULL", - __func__, pMac->ft.ftPEContext.psavedsessionEntry);) + __func__, pMac->ft.ftPEContext.psavedsessionEntry);) #endif } @@ -127,20 +127,20 @@ void limFTCleanup(tpAniSirGlobal pMac) pMac->ft.ftPEContext.pAddStaReq = NULL; } - pMac->ft.ftPEContext.ftPreAuthStatus = eSIR_SUCCESS; + pMac->ft.ftPEContext.ftPreAuthStatus = eSIR_SUCCESS; } /*-------------------------------------------------------------------------- - Init FT variables. + Init FT variables. ------------------------------------------------------------------------*/ void limFTInit(tpAniSirGlobal pMac) { - if (pMac->ft.ftPEContext.pFTPreAuthReq) + if (pMac->ft.ftPEContext.pFTPreAuthReq) { #if defined WLAN_FEATURE_VOWIFI_11R_DEBUG PELOGE(limLog( pMac, LOGE, "%s: Freeing pFTPreAuthReq= %p", - __func__, pMac->ft.ftPEContext.pFTPreAuthReq);) + __func__, pMac->ft.ftPEContext.pFTPreAuthReq);) #endif if (pMac->ft.ftPEContext.pFTPreAuthReq->pbssDescription) { @@ -158,7 +158,7 @@ void limFTInit(tpAniSirGlobal pMac) { #if defined WLAN_FEATURE_VOWIFI_11R_DEBUG PELOGE(limLog( pMac, LOGE, "%s: Setting psavedsessionEntry= %p to NULL", - __func__, pMac->ft.ftPEContext.psavedsessionEntry);) + __func__, pMac->ft.ftPEContext.psavedsessionEntry);) #endif pMac->ft.ftPEContext.psavedsessionEntry = NULL; } @@ -170,7 +170,7 @@ void limFTInit(tpAniSirGlobal pMac) /* Cannot delete sessions across associations */ #if defined WLAN_FEATURE_VOWIFI_11R_DEBUG PELOGE(limLog( pMac, LOGE, "%s: Deleting session = %p ", - __func__, pMac->ft.ftPEContext.pftSessionEntry);) + __func__, pMac->ft.ftPEContext.pftSessionEntry);) #endif pMac->ft.ftPEContext.pftSessionEntry = NULL; } @@ -179,7 +179,7 @@ void limFTInit(tpAniSirGlobal pMac) { #if defined WLAN_FEATURE_VOWIFI_11R_DEBUG PELOGE(limLog( pMac, LOGE, "%s: Freeing AddBssReq = %p ", - __func__, pMac->ft.ftPEContext.pAddBssReq);) + __func__, pMac->ft.ftPEContext.pAddBssReq);) #endif vos_mem_free(pMac->ft.ftPEContext.pAddBssReq); pMac->ft.ftPEContext.pAddBssReq = NULL; @@ -190,18 +190,18 @@ void limFTInit(tpAniSirGlobal pMac) { #if defined WLAN_FEATURE_VOWIFI_11R_DEBUG PELOGE(limLog( pMac, LOGE, "%s: Freeing AddStaReq = %p ", - __func__, pMac->ft.ftPEContext.pAddStaReq);) + __func__, pMac->ft.ftPEContext.pAddStaReq);) #endif vos_mem_free(pMac->ft.ftPEContext.pAddStaReq); pMac->ft.ftPEContext.pAddStaReq = NULL; } - pMac->ft.ftPEContext.ftPreAuthStatus = eSIR_SUCCESS; + pMac->ft.ftPEContext.ftPreAuthStatus = eSIR_SUCCESS; } /*------------------------------------------------------------------ - * + * * This is the handler after suspending the link. * We suspend the link and then now proceed to switch channel. * @@ -209,9 +209,9 @@ void limFTInit(tpAniSirGlobal pMac) void FTPreAuthSuspendLinkHandler(tpAniSirGlobal pMac, eHalStatus status, tANI_U32 *data) { tpPESession psessionEntry; - + // The link is suspended of not ? - if (status != eHAL_STATUS_SUCCESS) + if (status != eHAL_STATUS_SUCCESS) { PELOGE(limLog( pMac, LOGE, "%s: Returning ", __func__);) // Post the FT Pre Auth Response to SME @@ -225,7 +225,7 @@ void FTPreAuthSuspendLinkHandler(tpAniSirGlobal pMac, eHalStatus status, tANI_U3 // Perform some sanity check before proceeding. if ((pMac->ft.ftPEContext.pFTPreAuthReq) && psessionEntry) { - limChangeChannelWithCallback(pMac, + limChangeChannelWithCallback(pMac, pMac->ft.ftPEContext.pFTPreAuthReq->preAuthchannelNum, limPerformFTPreAuth, NULL, psessionEntry); return; @@ -255,7 +255,15 @@ int limProcessFTPreAuthReq(tpAniSirGlobal pMac, tpSirMsgQ pMsg) // Now we are starting fresh make sure all's cleanup. limFTInit(pMac); - pMac->ft.ftPEContext.ftPreAuthStatus = eSIR_FAILURE; // Can set it only after sending auth + // Can set it only after sending auth + pMac->ft.ftPEContext.ftPreAuthStatus = eSIR_FAILURE; + + if( pMac->ft.ftPEContext.pFTPreAuthReq && + pMac->ft.ftPEContext.pFTPreAuthReq->pbssDescription) + { + vos_mem_free(pMac->ft.ftPEContext.pFTPreAuthReq->pbssDescription); + pMac->ft.ftPEContext.pFTPreAuthReq->pbssDescription = NULL; + } // We need information from the Pre-Auth Req. Lets save that pMac->ft.ftPEContext.pFTPreAuthReq = (tpSirFTPreAuthReq)pMsg->bodyptr; @@ -268,7 +276,7 @@ int limProcessFTPreAuthReq(tpAniSirGlobal pMac, tpSirMsgQ pMsg) #endif // Get the current session entry - psessionEntry = peFindSessionByBssid(pMac, + psessionEntry = peFindSessionByBssid(pMac, pMac->ft.ftPEContext.pFTPreAuthReq->currbssId, &sessionId); if (psessionEntry == NULL) { @@ -277,20 +285,28 @@ int limProcessFTPreAuthReq(tpAniSirGlobal pMac, tpSirMsgQ pMsg) limPrintMacAddr( pMac, pMac->ft.ftPEContext.pFTPreAuthReq->currbssId, LOGE ); // Post the FT Pre Auth Response to SME limPostFTPreAuthRsp(pMac, eSIR_FAILURE, NULL, 0, NULL); + if (pMac->ft.ftPEContext.pFTPreAuthReq->pbssDescription) + { + vos_mem_free(pMac->ft.ftPEContext.pFTPreAuthReq->pbssDescription); + pMac->ft.ftPEContext.pFTPreAuthReq->pbssDescription = NULL; + } pMac->ft.ftPEContext.pFTPreAuthReq = NULL; return TRUE; } +#ifdef FEATURE_WLAN_DIAG_SUPPORT_LIM //FEATURE_WLAN_DIAG_SUPPORT + limDiagEventReport(pMac, WLAN_PE_DIAG_PRE_AUTH_REQ_EVENT, psessionEntry, 0, 0); +#endif // Dont need to suspend if APs are in same channel - if (psessionEntry->currentOperChannel != pMac->ft.ftPEContext.pFTPreAuthReq->preAuthchannelNum) + if (psessionEntry->currentOperChannel != pMac->ft.ftPEContext.pFTPreAuthReq->preAuthchannelNum) { // Need to suspend link only if the channels are different PELOG2(limLog(pMac,LOG2,"%s: Performing pre-auth on different" " channel (session %p)", __func__, psessionEntry);) - limSuspendLink(pMac, eSIR_CHECK_ROAMING_SCAN, FTPreAuthSuspendLinkHandler, - (tANI_U32 *)psessionEntry); + limSuspendLink(pMac, eSIR_CHECK_ROAMING_SCAN, FTPreAuthSuspendLinkHandler, + (tANI_U32 *)psessionEntry); } - else + else { PELOG2(limLog(pMac,LOG2,"%s: Performing pre-auth on same" " channel (session %p)", __func__, psessionEntry);) @@ -302,10 +318,10 @@ int limProcessFTPreAuthReq(tpAniSirGlobal pMac, tpSirMsgQ pMsg) } /*------------------------------------------------------------------ - * Send the Auth1 + * Send the Auth1 * Receive back Auth2 *------------------------------------------------------------------*/ -void limPerformFTPreAuth(tpAniSirGlobal pMac, eHalStatus status, tANI_U32 *data, +void limPerformFTPreAuth(tpAniSirGlobal pMac, eHalStatus status, tANI_U32 *data, tpPESession psessionEntry) { tSirMacAuthFrameBody authFrame; @@ -313,15 +329,19 @@ void limPerformFTPreAuth(tpAniSirGlobal pMac, eHalStatus status, tANI_U32 *data, if (psessionEntry->is11Rconnection) { // Only 11r assoc has FT IEs. - if (pMac->ft.ftPEContext.pFTPreAuthReq->ft_ies == NULL) + if (pMac->ft.ftPEContext.pFTPreAuthReq->ft_ies == NULL) { - PELOGE(limLog( pMac, LOGE, "%s: FTIEs for Auth Req Seq 1 is absent");) + PELOGE(limLog( pMac, LOGE, + "%s: FTIEs for Auth Req Seq 1 is absent", + __func__);) return; } } - if (status != eHAL_STATUS_SUCCESS) + if (status != eHAL_STATUS_SUCCESS) { - PELOGE(limLog( pMac, LOGE, "%s: Change channel not successful for FT pre-auth");) + PELOGE(limLog( pMac, LOGE, + "%s: Change channel not successful for FT pre-auth", + __func__);) return; } pMac->ft.ftPEContext.psavedsessionEntry = psessionEntry; @@ -335,7 +355,7 @@ void limPerformFTPreAuth(tpAniSirGlobal pMac, eHalStatus status, tANI_U32 *data, if (psessionEntry->is11Rconnection) { - // Now we are on the right channel and need to send out Auth1 and + // Now we are on the right channel and need to send out Auth1 and // receive Auth2. authFrame.authAlgoNumber = eSIR_FT_AUTH; // Set the auth type to FT } @@ -344,7 +364,7 @@ void limPerformFTPreAuth(tpAniSirGlobal pMac, eHalStatus status, tANI_U32 *data, { // Will need to make isCCXconnection a enum may be for further // improvements to this to match this algorithm number - authFrame.authAlgoNumber = eSIR_OPEN_SYSTEM; // For now if its CCX and 11r FT. + authFrame.authAlgoNumber = eSIR_OPEN_SYSTEM; // For now if its CCX and 11r FT. } #endif authFrame.authTransactionSeqNumber = SIR_MAC_AUTH_FRAME_1; @@ -379,8 +399,8 @@ MTRACE(macTrace(pMac, TRACE_CODE_TIMER_ACTIVATE, psessionEntry->peSessionId, eLI * The newly created ft Session entry is passed to this function * *------------------------------------------------------------------*/ -tSirRetStatus limFTPrepareAddBssReq( tpAniSirGlobal pMac, - tANI_U8 updateEntry, tpPESession pftSessionEntry, +tSirRetStatus limFTPrepareAddBssReq( tpAniSirGlobal pMac, + tANI_U8 updateEntry, tpPESession pftSessionEntry, tpSirBssDescription bssDescription ) { tpAddBssParams pAddBssParams = NULL; @@ -388,24 +408,24 @@ tSirRetStatus limFTPrepareAddBssReq( tpAniSirGlobal pMac, tANI_U8 chanWidthSupp = 0; tSchBeaconStruct *pBeaconStruct; - if(eHAL_STATUS_SUCCESS != palAllocateMemory(pMac->hHdd, - (void **)&pBeaconStruct, sizeof(tSchBeaconStruct))) + pBeaconStruct = vos_mem_malloc(sizeof(tSchBeaconStruct)); + if (NULL == pBeaconStruct) { - limLog(pMac, LOGE, FL("Unable to PAL allocate memory for creating ADD_BSS") ); + limLog(pMac, LOGE, FL("Unable to allocate memory for creating ADD_BSS") ); return eSIR_MEM_ALLOC_FAILED; } // Package SIR_HAL_ADD_BSS_REQ message parameters - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, - (void **) &pAddBssParams, sizeof( tAddBssParams ))) + pAddBssParams = vos_mem_malloc(sizeof( tAddBssParams )); + if (NULL == pAddBssParams) { - palFreeMemory(pMac->hHdd, pBeaconStruct); + vos_mem_free(pBeaconStruct); limLog( pMac, LOGP, - FL( "Unable to PAL allocate memory for creating ADD_BSS" )); + FL( "Unable to allocate memory for creating ADD_BSS" )); return (eSIR_MEM_ALLOC_FAILED); } - - palZeroMemory( pMac->hHdd, (tANI_U8 *) pAddBssParams, sizeof( tAddBssParams )); + + vos_mem_set((tANI_U8 *) pAddBssParams, sizeof( tAddBssParams ), 0); limExtractApCapabilities( pMac, @@ -415,20 +435,21 @@ tSirRetStatus limFTPrepareAddBssReq( tpAniSirGlobal pMac, if (pMac->lim.gLimProtectionControl != WNI_CFG_FORCE_POLICY_PROTECTION_DISABLE) limDecideStaProtectionOnAssoc(pMac, pBeaconStruct, pftSessionEntry); - palCopyMemory( pMac->hHdd, pAddBssParams->bssId, bssDescription->bssId, - sizeof( tSirMacAddr )); + vos_mem_copy(pAddBssParams->bssId, bssDescription->bssId, + sizeof(tSirMacAddr)); // Fill in tAddBssParams selfMacAddr - palCopyMemory( pMac->hHdd, pAddBssParams->selfMacAddr, pftSessionEntry->selfMacAddr, - sizeof( tSirMacAddr )); + vos_mem_copy(pAddBssParams->selfMacAddr, pftSessionEntry->selfMacAddr, + sizeof(tSirMacAddr)); pAddBssParams->bssType = pftSessionEntry->bssType;//eSIR_INFRASTRUCTURE_MODE; pAddBssParams->operMode = BSS_OPERATIONAL_MODE_STA; pAddBssParams->beaconInterval = bssDescription->beaconInterval; - + pAddBssParams->dtimPeriod = pBeaconStruct->tim.dtimPeriod; pAddBssParams->updateBss = updateEntry; + pAddBssParams->reassocReq = true; pAddBssParams->cfParamSet.cfpCount = pBeaconStruct->cfParamSet.cfpCount; @@ -438,12 +459,12 @@ tSirRetStatus limFTPrepareAddBssReq( tpAniSirGlobal pMac, pAddBssParams->rateSet.numRates = pBeaconStruct->supportedRates.numRates; - palCopyMemory( pMac->hHdd, pAddBssParams->rateSet.rate, - pBeaconStruct->supportedRates.rate, pBeaconStruct->supportedRates.numRates ); + vos_mem_copy(pAddBssParams->rateSet.rate, + pBeaconStruct->supportedRates.rate, pBeaconStruct->supportedRates.numRates); pAddBssParams->nwType = bssDescription->nwType; - - pAddBssParams->shortSlotTimeSupported = (tANI_U8)pBeaconStruct->capabilityInfo.shortSlotTime; + + pAddBssParams->shortSlotTimeSupported = (tANI_U8)pBeaconStruct->capabilityInfo.shortSlotTime; pAddBssParams->llaCoexist = (tANI_U8) pftSessionEntry->beaconParams.llaCoexist; pAddBssParams->llbCoexist = (tANI_U8) pftSessionEntry->beaconParams.llbCoexist; pAddBssParams->llgCoexist = (tANI_U8) pftSessionEntry->beaconParams.llgCoexist; @@ -480,7 +501,7 @@ tSirRetStatus limFTPrepareAddBssReq( tpAniSirGlobal pMac, pAddBssParams->currentOperChannel = bssDescription->channelId; #if defined WLAN_FEATURE_VOWIFI_11R_DEBUG - limLog( pMac, LOGE, FL( "SIR_HAL_ADD_BSS_REQ with channel = %d..." ), + limLog( pMac, LOG1, FL( "SIR_HAL_ADD_BSS_REQ with channel = %d..." ), pAddBssParams->currentOperChannel); #endif @@ -490,9 +511,9 @@ tSirRetStatus limFTPrepareAddBssReq( tpAniSirGlobal pMac, { pAddBssParams->staContext.staType = STA_ENTRY_OTHER; // Identifying AP as an STA - palCopyMemory( pMac->hHdd, pAddBssParams->staContext.bssId, - bssDescription->bssId, - sizeof( tSirMacAddr )); + vos_mem_copy(pAddBssParams->staContext.bssId, + bssDescription->bssId, + sizeof(tSirMacAddr)); pAddBssParams->staContext.listenInterval = bssDescription->beaconInterval; pAddBssParams->staContext.assocId = 0; // Is SMAC OK with this? @@ -516,7 +537,7 @@ tSirRetStatus limFTPrepareAddBssReq( tpAniSirGlobal pMac, else { pAddBssParams->staContext.txChannelWidthSet = WNI_CFG_CHANNEL_BONDING_MODE_DISABLE; - } + } pAddBssParams->staContext.mimoPS = (tSirMacHTMIMOPowerSaveState)pBeaconStruct->HTCaps.mimoPowerSave; pAddBssParams->staContext.delBASupport = ( tANI_U8 ) pBeaconStruct->HTCaps.delayedBA; pAddBssParams->staContext.maxAmsduSize = ( tANI_U8 ) pBeaconStruct->HTCaps.maximalAMSDUsize; @@ -525,7 +546,7 @@ tSirRetStatus limFTPrepareAddBssReq( tpAniSirGlobal pMac, pAddBssParams->staContext.fShortGI20Mhz = (tANI_U8)pBeaconStruct->HTCaps.shortGI20MHz; pAddBssParams->staContext.fShortGI40Mhz = (tANI_U8)pBeaconStruct->HTCaps.shortGI40MHz; pAddBssParams->staContext.maxAmpduSize= pBeaconStruct->HTCaps.maxRxAMPDUFactor; - + if( pBeaconStruct->HTInfo.present ) pAddBssParams->staContext.rifsMode = pBeaconStruct->HTInfo.rifsMode; } @@ -533,16 +554,16 @@ tSirRetStatus limFTPrepareAddBssReq( tpAniSirGlobal pMac, if ((pftSessionEntry->limWmeEnabled && pBeaconStruct->wmeEdcaPresent) || (pftSessionEntry->limQosEnabled && pBeaconStruct->edcaPresent)) pAddBssParams->staContext.wmmEnabled = 1; - else + else pAddBssParams->staContext.wmmEnabled = 0; //Update the rates #ifdef WLAN_FEATURE_11AC - limPopulateOwnRateSet(pMac, &pAddBssParams->staContext.supportedRates, + limPopulatePeerRateSet(pMac, &pAddBssParams->staContext.supportedRates, pBeaconStruct->HTCaps.supportedMCSSet, false,pftSessionEntry,&pBeaconStruct->VHTCaps); #else - limPopulateOwnRateSet(pMac, &pAddBssParams->staContext.supportedRates, + limPopulatePeerRateSet(pMac, &pAddBssParams->staContext.supportedRates, beaconStruct.HTCaps.supportedMCSSet, false,pftSessionEntry); #endif limFillSupportedRatesInfo(pMac, NULL, &pAddBssParams->staContext.supportedRates,pftSessionEntry); @@ -559,7 +580,7 @@ tSirRetStatus limFTPrepareAddBssReq( tpAniSirGlobal pMac, pAddBssParams->staContext.staTCParams[i].rxBApolicy = eBA_POLICY_IMMEDIATE; } -#if defined WLAN_FEATURE_VOWIFI +#if defined WLAN_FEATURE_VOWIFI pAddBssParams->maxTxPower = pftSessionEntry->maxTxPower; #endif @@ -568,26 +589,26 @@ tSirRetStatus limFTPrepareAddBssReq( tpAniSirGlobal pMac, pAddBssParams->staContext.sessionId = pftSessionEntry->peSessionId; pAddBssParams->sessionId = pftSessionEntry->peSessionId; - + // Set a new state for MLME pftSessionEntry->limMlmState = eLIM_MLM_WT_ADD_BSS_RSP_FT_REASSOC_STATE; MTRACE(macTrace(pMac, TRACE_CODE_MLM_STATE, pftSessionEntry->peSessionId, eLIM_MLM_WT_ADD_BSS_RSP_FT_REASSOC_STATE)); pAddBssParams->halPersona=(tANI_U8)pftSessionEntry->pePersona; //pass on the session persona to hal - + pMac->ft.ftPEContext.pAddBssReq = pAddBssParams; #if defined WLAN_FEATURE_VOWIFI_11R_DEBUG limLog( pMac, LOG1, FL( "Saving SIR_HAL_ADD_BSS_REQ for pre-auth ap..." )); #endif - palFreeMemory(pMac->hHdd, pBeaconStruct); + vos_mem_free(pBeaconStruct); return 0; } /*------------------------------------------------------------------ * - * Setup the new session for the pre-auth AP. + * Setup the new session for the pre-auth AP. * Return the newly created session entry. * *------------------------------------------------------------------*/ @@ -600,19 +621,19 @@ tpPESession limFillFTSession(tpAniSirGlobal pMac, tPowerdBm regMax; tSchBeaconStruct *pBeaconStruct; - if(eHAL_STATUS_SUCCESS != palAllocateMemory(pMac->hHdd, - (void **)&pBeaconStruct, sizeof(tSchBeaconStruct))) + pBeaconStruct = vos_mem_malloc(sizeof(tSchBeaconStruct)); + if (NULL == pBeaconStruct) { - limLog(pMac, LOGE, FL("Unable to PAL allocate memory for creating limFillFTSession") ); + limLog(pMac, LOGE, FL("Unable to allocate memory for creating limFillFTSession") ); return NULL; } - + /* Retrieve the session that has already been created and update the entry */ pftSessionEntry = pMac->ft.ftPEContext.pftSessionEntry; #if defined WLAN_FEATURE_VOWIFI_11R_DEBUG || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR) - limPrintMacAddr(pMac, pbssDescription->bssId, LOGE); + limPrintMacAddr(pMac, pbssDescription->bssId, LOG1); #endif pftSessionEntry->dot11mode = psessionEntry->dot11mode; @@ -624,9 +645,9 @@ tpPESession limFillFTSession(tpAniSirGlobal pMac, pftSessionEntry->lim11hEnable = psessionEntry->lim11hEnable; // Fields to be filled later - pftSessionEntry->pLimJoinReq = NULL; - pftSessionEntry->smeSessionId = 0; - pftSessionEntry->transactionId = 0; + pftSessionEntry->pLimJoinReq = NULL; + pftSessionEntry->smeSessionId = 0; + pftSessionEntry->transactionId = 0; limExtractApCapabilities( pMac, (tANI_U8 *) pbssDescription->ieFields, @@ -634,16 +655,16 @@ tpPESession limFillFTSession(tpAniSirGlobal pMac, pBeaconStruct ); pftSessionEntry->rateSet.numRates = pBeaconStruct->supportedRates.numRates; - palCopyMemory( pMac->hHdd, pftSessionEntry->rateSet.rate, - pBeaconStruct->supportedRates.rate, pBeaconStruct->supportedRates.numRates ); + vos_mem_copy(pftSessionEntry->rateSet.rate, + pBeaconStruct->supportedRates.rate, pBeaconStruct->supportedRates.numRates); pftSessionEntry->extRateSet.numRates = pBeaconStruct->extendedRates.numRates; - palCopyMemory(pMac->hHdd, pftSessionEntry->extRateSet.rate, + vos_mem_copy(pftSessionEntry->extRateSet.rate, pBeaconStruct->extendedRates.rate, pftSessionEntry->extRateSet.numRates); pftSessionEntry->ssId.length = pBeaconStruct->ssId.length; - palCopyMemory( pMac->hHdd, pftSessionEntry->ssId.ssId, pBeaconStruct->ssId.ssId, + vos_mem_copy(pftSessionEntry->ssId.ssId, pBeaconStruct->ssId.ssId, pftSessionEntry->ssId.length); @@ -651,7 +672,7 @@ tpPESession limFillFTSession(tpAniSirGlobal pMac, sirCopyMacAddr(pftSessionEntry->selfMacAddr, psessionEntry->selfMacAddr); sirCopyMacAddr(pftSessionEntry->limReAssocbssId, pbssDescription->bssId); #if defined WLAN_FEATURE_VOWIFI_11R_DEBUG || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR) - limPrintMacAddr(pMac, pftSessionEntry->limReAssocbssId, LOGE); + limPrintMacAddr(pMac, pftSessionEntry->limReAssocbssId, LOG1); #endif /* Store beaconInterval */ @@ -664,8 +685,8 @@ tpPESession limFillFTSession(tpAniSirGlobal pMac, /* Copy The channel Id to the session Table */ pftSessionEntry->limReassocChannelId = pbssDescription->channelId; pftSessionEntry->currentOperChannel = pbssDescription->channelId; - - + + if (pftSessionEntry->bssType == eSIR_INFRASTRUCTURE_MODE) { pftSessionEntry->limSystemRole = eLIM_STA_ROLE; @@ -675,11 +696,11 @@ tpPESession limFillFTSession(tpAniSirGlobal pMac, pftSessionEntry->limSystemRole = eLIM_BT_AMP_STA_ROLE; } else - { + { /* Throw an error and return and make sure to delete the session.*/ limLog(pMac, LOGE, FL("Invalid bss type")); - } - + } + pftSessionEntry->limCurrentBssCaps = pbssDescription->capabilityInfo; pftSessionEntry->limReassocBssCaps = pbssDescription->capabilityInfo; if( pMac->roam.configParam.shortSlotTime && @@ -688,9 +709,9 @@ tpPESession limFillFTSession(tpAniSirGlobal pMac, pftSessionEntry->shortSlotTimeSupported = TRUE; } - regMax = cfgGetRegulatoryMaxTransmitPower( pMac, pftSessionEntry->currentOperChannel ); + regMax = cfgGetRegulatoryMaxTransmitPower( pMac, pftSessionEntry->currentOperChannel ); localPowerConstraint = regMax; - limExtractApCapability( pMac, (tANI_U8 *) pbssDescription->ieFields, + limExtractApCapability( pMac, (tANI_U8 *) pbssDescription->ieFields, limGetIElenFromBssDescription(pbssDescription), &pftSessionEntry->limCurrentBssQosCaps, &pftSessionEntry->limCurrentBssPropCap, @@ -721,13 +742,13 @@ tpPESession limFillFTSession(tpAniSirGlobal pMac, pftSessionEntry->encryptType = psessionEntry->encryptType; - palFreeMemory(pMac->hHdd, pBeaconStruct); + vos_mem_free(pBeaconStruct); return pftSessionEntry; } /*------------------------------------------------------------------ * - * Setup the session and the add bss req for the pre-auth AP. + * Setup the session and the add bss req for the pre-auth AP. * *------------------------------------------------------------------*/ void limFTSetupAuthSession(tpAniSirGlobal pMac, tpPESession psessionEntry) @@ -748,21 +769,24 @@ void limFTSetupAuthSession(tpAniSirGlobal pMac, tpPESession psessionEntry) #endif #ifdef FEATURE_WLAN_LFR - pftSessionEntry->isFastRoamIniFeatureEnabled = psessionEntry->isFastRoamIniFeatureEnabled; + pftSessionEntry->isFastRoamIniFeatureEnabled = psessionEntry->isFastRoamIniFeatureEnabled; #endif - limFTPrepareAddBssReq( pMac, FALSE, pftSessionEntry, + limFTPrepareAddBssReq( pMac, FALSE, pftSessionEntry, pMac->ft.ftPEContext.pFTPreAuthReq->pbssDescription ); pMac->ft.ftPEContext.pftSessionEntry = pftSessionEntry; } } /*------------------------------------------------------------------ - * Resume Link Call Back + * Resume Link Call Back *------------------------------------------------------------------*/ void limFTProcessPreAuthResult(tpAniSirGlobal pMac, eHalStatus status, tANI_U32 *data) { tpPESession psessionEntry; + if (!pMac->ft.ftPEContext.pFTPreAuthReq) + return; + psessionEntry = (tpPESession)data; if (pMac->ft.ftPEContext.ftPreAuthStatus == eSIR_SUCCESS) @@ -778,18 +802,18 @@ void limFTProcessPreAuthResult(tpAniSirGlobal pMac, eHalStatus status, tANI_U32 } /*------------------------------------------------------------------ - * Resume Link Call Back + * Resume Link Call Back *------------------------------------------------------------------*/ -void limPerformPostFTPreAuthAndChannelChange(tpAniSirGlobal pMac, eHalStatus status, tANI_U32 *data, +void limPerformPostFTPreAuthAndChannelChange(tpAniSirGlobal pMac, eHalStatus status, tANI_U32 *data, tpPESession psessionEntry) { - //Set the resume channel to Any valid channel (invalid). + //Set the resume channel to Any valid channel (invalid). //This will instruct HAL to set it to any previous valid channel. peSetResumeChannel(pMac, 0, 0); limResumeLink(pMac, limFTProcessPreAuthResult, (tANI_U32 *)psessionEntry); } -tSirRetStatus limCreateRICBlockAckIE(tpAniSirGlobal pMac, tANI_U8 tid, tCfgTrafficClass *pTrafficClass, +tSirRetStatus limCreateRICBlockAckIE(tpAniSirGlobal pMac, tANI_U8 tid, tCfgTrafficClass *pTrafficClass, tANI_U8 *ric_ies, tANI_U32 *ieLength) { /* BlockACK + RIC is not supported now, TODO later to support this */ @@ -845,18 +869,18 @@ tSirRetStatus limFTFillRICBlockAckInfo(tpAniSirGlobal pMac, tANI_U8 *ric_ies, tA tpPESession psessionEntry = pMac->ft.ftPEContext.psavedsessionEntry; tANI_U32 offset = 0, ieLength = 0; tSirRetStatus status = eSIR_SUCCESS; - + // First, extract the DPH entry pSta = dphLookupHashEntry( pMac, pMac->ft.ftPEContext.pFTPreAuthReq->currbssId, &aid, &psessionEntry->dph.dphHashTable); if( NULL == pSta ) { PELOGE(limLog( pMac, LOGE, FL( "STA context not found for saved session's BSSID %02x:%02x:%02x:%02x:%02x:%02x" ), - pMac->ft.ftPEContext.pFTPreAuthReq->currbssId[0], - pMac->ft.ftPEContext.pFTPreAuthReq->currbssId[1], - pMac->ft.ftPEContext.pFTPreAuthReq->currbssId[2], - pMac->ft.ftPEContext.pFTPreAuthReq->currbssId[3], - pMac->ft.ftPEContext.pFTPreAuthReq->currbssId[4], + pMac->ft.ftPEContext.pFTPreAuthReq->currbssId[0], + pMac->ft.ftPEContext.pFTPreAuthReq->currbssId[1], + pMac->ft.ftPEContext.pFTPreAuthReq->currbssId[2], + pMac->ft.ftPEContext.pFTPreAuthReq->currbssId[3], + pMac->ft.ftPEContext.pFTPreAuthReq->currbssId[4], pMac->ft.ftPEContext.pFTPreAuthReq->currbssId[5] );) return eSIR_FAILURE; } @@ -900,12 +924,12 @@ void limPostFTPreAuthRsp(tpAniSirGlobal pMac, tSirRetStatus status, { tpSirFTPreAuthRsp pFTPreAuthRsp; tSirMsgQ mmhMsg; - tANI_U16 rspLen = sizeof(tSirFTPreAuthRsp); + tANI_U16 rspLen = sizeof(tSirFTPreAuthRsp); // TODO: RIC Support //tSirRetStatus sirStatus = eSIR_SUCCESS; pFTPreAuthRsp = (tpSirFTPreAuthRsp)vos_mem_malloc(rspLen); - if(NULL == pFTPreAuthRsp) + if (NULL == pFTPreAuthRsp) { PELOGE(limLog( pMac, LOGE, "Failed to allocate memory");) VOS_ASSERT(pFTPreAuthRsp != NULL); @@ -913,10 +937,10 @@ void limPostFTPreAuthRsp(tpAniSirGlobal pMac, tSirRetStatus status, } vos_mem_zero( pFTPreAuthRsp, rspLen); #if defined WLAN_FEATURE_VOWIFI_11R_DEBUG - PELOGE(limLog( pMac, LOG1, "%s: Auth Rsp = %p", pFTPreAuthRsp);) + PELOGE(limLog( pMac, LOG1, FL("Auth Rsp = %p"), pFTPreAuthRsp);) #endif - - palZeroMemory(pMac, (tANI_U8*)pFTPreAuthRsp, rspLen); + + vos_mem_set((tANI_U8*)pFTPreAuthRsp, rspLen, 0); pFTPreAuthRsp->messageType = eWNI_SME_FT_PRE_AUTH_RSP; pFTPreAuthRsp->length = (tANI_U16) rspLen; pFTPreAuthRsp->status = status; @@ -925,24 +949,24 @@ void limPostFTPreAuthRsp(tpAniSirGlobal pMac, tSirRetStatus status, // The bssid of the AP we are sending Auth1 to. if (pMac->ft.ftPEContext.pFTPreAuthReq) - sirCopyMacAddr(pFTPreAuthRsp->preAuthbssId, + sirCopyMacAddr(pFTPreAuthRsp->preAuthbssId, pMac->ft.ftPEContext.pFTPreAuthReq->preAuthbssId); - + // Attach the auth response now back to SME pFTPreAuthRsp->ft_ies_length = 0; if ((auth_rsp != NULL) && (auth_rsp_length < MAX_FTIE_SIZE)) { // Only 11r assoc has FT IEs. - vos_mem_copy(pFTPreAuthRsp->ft_ies, auth_rsp, auth_rsp_length); + vos_mem_copy(pFTPreAuthRsp->ft_ies, auth_rsp, auth_rsp_length); pFTPreAuthRsp->ft_ies_length = auth_rsp_length; } - + #ifdef WLAN_FEATURE_VOWIFI_11R if ((psessionEntry) && (psessionEntry->is11Rconnection)) { /* TODO: RIC SUPPORT Fill in the Block Ack RIC IEs in the preAuthRsp */ /* - sirStatus = limFTFillRICBlockAckInfo(pMac, pFTPreAuthRsp->ric_ies, + sirStatus = limFTFillRICBlockAckInfo(pMac, pFTPreAuthRsp->ric_ies, (tANI_U32 *)&pFTPreAuthRsp->ric_ies_length); if (eSIR_SUCCESS != sirStatus) { @@ -951,13 +975,18 @@ void limPostFTPreAuthRsp(tpAniSirGlobal pMac, tSirRetStatus status, */ } #endif - + mmhMsg.type = pFTPreAuthRsp->messageType; mmhMsg.bodyptr = pFTPreAuthRsp; mmhMsg.bodyval = 0; #if defined WLAN_FEATURE_VOWIFI_11R_DEBUG - PELOGE(limLog( pMac, LOGE, "Posted Auth Rsp to SME with status of 0x%x", status);) + PELOGE(limLog( pMac, LOG1, "Posted Auth Rsp to SME with status of 0x%x", status);) +#endif +#ifdef FEATURE_WLAN_DIAG_SUPPORT_LIM //FEATURE_WLAN_DIAG_SUPPORT + if (status == eSIR_SUCCESS) + limDiagEventReport(pMac, WLAN_PE_DIAG_PREAUTH_DONE, psessionEntry, + status, 0); #endif limSysProcessMmhMsgApi(pMac, &mmhMsg, ePROT); } @@ -967,7 +996,7 @@ void limPostFTPreAuthRsp(tpAniSirGlobal pMac, tSirRetStatus status, * Send the FT Pre Auth Response to SME when ever we have a status * ready to be sent to SME * - * SME will be the one to send it up to the supplicant to receive + * SME will be the one to send it up to the supplicant to receive * FTIEs which will be required for Reassoc Req. * *------------------------------------------------------------------*/ @@ -979,17 +1008,20 @@ void limHandleFTPreAuthRsp(tpAniSirGlobal pMac, tSirRetStatus status, tpPESession pftSessionEntry; tANI_U8 sessionId; tpSirBssDescription pbssDescription; +#ifdef FEATURE_WLAN_DIAG_SUPPORT_LIM //FEATURE_WLAN_DIAG_SUPPORT + limDiagEventReport(pMac, WLAN_PE_DIAG_PRE_AUTH_RSP_EVENT, psessionEntry, (tANI_U16)status, 0); +#endif // Save the status of pre-auth - pMac->ft.ftPEContext.ftPreAuthStatus = status; + pMac->ft.ftPEContext.ftPreAuthStatus = status; - // Save the auth rsp, so we can send it to - // SME once we resume link. - pMac->ft.ftPEContext.saved_auth_rsp_length = 0; + // Save the auth rsp, so we can send it to + // SME once we resume link. + pMac->ft.ftPEContext.saved_auth_rsp_length = 0; if ((auth_rsp != NULL) && (auth_rsp_length < MAX_FTIE_SIZE)) { vos_mem_copy(pMac->ft.ftPEContext.saved_auth_rsp, - auth_rsp, auth_rsp_length); + auth_rsp, auth_rsp_length); pMac->ft.ftPEContext.saved_auth_rsp_length = auth_rsp_length; } @@ -1026,25 +1058,25 @@ void limHandleFTPreAuthRsp(tpAniSirGlobal pMac, tSirRetStatus status, sizeof(psessionEntry->htConfig)); pftSessionEntry->limSmeState = eLIM_SME_WT_REASSOC_STATE; pMac->ft.ftPEContext.pftSessionEntry = pftSessionEntry; - PELOGE(limLog(pMac,LOGE,"%s:created session (%p) with id = %d", + PELOGE(limLog(pMac, LOG1, "%s:created session (%p) with id = %d", __func__, pftSessionEntry, pftSessionEntry->peSessionId);) /* Update the ReAssoc BSSID of the current session */ sirCopyMacAddr(psessionEntry->limReAssocbssId, pbssDescription->bssId); - limPrintMacAddr(pMac, psessionEntry->limReAssocbssId, LOGE); + limPrintMacAddr(pMac, psessionEntry->limReAssocbssId, LOG1); } - if (psessionEntry->currentOperChannel != - pMac->ft.ftPEContext.pFTPreAuthReq->preAuthchannelNum) + if (psessionEntry->currentOperChannel != + pMac->ft.ftPEContext.pFTPreAuthReq->preAuthchannelNum) { // Need to move to the original AP channel - limChangeChannelWithCallback(pMac, psessionEntry->currentOperChannel, + limChangeChannelWithCallback(pMac, psessionEntry->currentOperChannel, limPerformPostFTPreAuthAndChannelChange, NULL, psessionEntry); } - else + else { #ifdef WLAN_FEATURE_VOWIFI_11R_DEBUG - PELOGE(limLog( pMac, LOGE, "Pre auth on same channel as connected AP channel %d", + PELOGE(limLog( pMac, LOG1, "Pre auth on same channel as connected AP channel %d", pMac->ft.ftPEContext.pFTPreAuthReq->preAuthchannelNum);) #endif limFTProcessPreAuthResult(pMac, status, (tANI_U32 *)psessionEntry); @@ -1074,19 +1106,26 @@ void limProcessMlmFTReassocReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf, psessionEntry->smeSessionId = smeSessionId; psessionEntry->transactionId = transactionId; +#ifdef FEATURE_WLAN_DIAG_SUPPORT_LIM //FEATURE_WLAN_DIAG_SUPPORT + limDiagEventReport(pMac, WLAN_PE_DIAG_REASSOCIATING, psessionEntry, 0, 0); +#endif - - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pMlmReassocReq, - sizeof(tLimMlmReassocReq))) + if (NULL == pMac->ft.ftPEContext.pAddBssReq) + { + limLog(pMac, LOGE, FL("pAddBssReq is NULL")); + return; + } + pMlmReassocReq = vos_mem_malloc(sizeof(tLimMlmReassocReq)); + if (NULL == pMlmReassocReq) { // Log error - limLog(pMac, LOGE, FL("call to palAllocateMemory failed for mlmReassocReq")); + limLog(pMac, LOGE, FL("call to AllocateMemory failed for mlmReassocReq")); return; } - palCopyMemory( pMac->hHdd, pMlmReassocReq->peerMacAddr, - psessionEntry->bssId, - sizeof(tSirMacAddr)); + vos_mem_copy(pMlmReassocReq->peerMacAddr, + psessionEntry->bssId, + sizeof(tSirMacAddr)); if (wlan_cfgGetInt(pMac, WNI_CFG_REASSOCIATION_FAILURE_TIMEOUT, (tANI_U32 *) &pMlmReassocReq->reassocFailureTimeout) @@ -1097,7 +1136,7 @@ void limProcessMlmFTReassocReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf, * from CFG. Log error. */ limLog(pMac, LOGE, FL("could not retrieve ReassocFailureTimeout value")); - palFreeMemory(pMac->hHdd, pMlmReassocReq); + vos_mem_free(pMlmReassocReq); return; } @@ -1108,7 +1147,7 @@ void limProcessMlmFTReassocReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf, * from CFG. Log error. */ limLog(pMac, LOGE, FL("could not retrieve Capabilities value")); - palFreeMemory(pMac->hHdd, pMlmReassocReq); + vos_mem_free(pMlmReassocReq); return; } pMlmReassocReq->capabilityInfo = caps; @@ -1121,7 +1160,7 @@ void limProcessMlmFTReassocReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf, eSIR_SUCCESS) { limLog(pMac, LOGP, FL("Couldn't get WNI_CFG_TELE_BCN_WAKEUP_EN")); - palFreeMemory(pMac->hHdd, pMlmReassocReq); + vos_mem_free(pMlmReassocReq); return; } @@ -1134,7 +1173,7 @@ void limProcessMlmFTReassocReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf, * from CFG. Log error. */ limLog(pMac, LOGE, FL("could not retrieve ListenInterval")); - palFreeMemory(pMac->hHdd, pMlmReassocReq); + vos_mem_free(pMlmReassocReq); return; } } @@ -1147,14 +1186,14 @@ void limProcessMlmFTReassocReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf, * from CFG. Log error. */ limLog(pMac, LOGE, FL("could not retrieve ListenInterval")); - palFreeMemory(pMac->hHdd, pMlmReassocReq); + vos_mem_free(pMlmReassocReq); return; } } if (limSetLinkState(pMac, eSIR_LINK_PREASSOC_STATE, psessionEntry->bssId, psessionEntry->selfMacAddr, NULL, NULL) != eSIR_SUCCESS) { - palFreeMemory(pMac->hHdd, pMlmReassocReq); + vos_mem_free(pMlmReassocReq); return; } @@ -1173,7 +1212,7 @@ void limProcessMlmFTReassocReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf, #if defined WLAN_FEATURE_VOWIFI_11R_DEBUG - limLog( pMac, LOGE, FL( "Sending SIR_HAL_ADD_BSS_REQ..." )); + limLog( pMac, LOG1, FL( "Sending SIR_HAL_ADD_BSS_REQ..." )); #endif MTRACE(macTraceMsgTx(pMac, psessionEntry->peSessionId, msgQ.type)); @@ -1201,8 +1240,9 @@ void limProcessFTPreauthRspTimeout(tpAniSirGlobal pMac) // We have failed pre auth. We need to resume link and get back on // home channel. + limLog(pMac, LOG1, FL("FT Pre-Auth Time Out!!!!")); - if((psessionEntry = peFindSessionBySessionId(pMac, pMac->lim.limTimers.gLimFTPreAuthRspTimer.sessionId))== NULL) + if((psessionEntry = peFindSessionBySessionId(pMac, pMac->lim.limTimers.gLimFTPreAuthRspTimer.sessionId))== NULL) { limLog(pMac, LOGE, FL("Session Does not exist for given sessionID")); return; @@ -1243,8 +1283,8 @@ tANI_BOOLEAN limProcessFTUpdateKey(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf ) /* Store the key information in the ADD BSS parameters */ pAddBssParams->extSetStaKeyParamValid = 1; pAddBssParams->extSetStaKeyParam.encType = pKeyInfo->keyMaterial.edType; - palCopyMemory( pMac->hHdd, (tANI_U8 *) &pAddBssParams->extSetStaKeyParam.key, - (tANI_U8 *) &pKeyInfo->keyMaterial.key, sizeof( tSirKeys )); + vos_mem_copy((tANI_U8 *) &pAddBssParams->extSetStaKeyParam.key, + (tANI_U8 *) &pKeyInfo->keyMaterial.key, sizeof(tSirKeys)); if(eSIR_SUCCESS != wlan_cfgGetInt(pMac, WNI_CFG_SINGLE_TID_RC, &val)) { limLog( pMac, LOGP, FL( "Unable to read WNI_CFG_SINGLE_TID_RC" )); @@ -1297,17 +1337,16 @@ limProcessFTAggrQosReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf ) tpAggrAddTsParams pAggrAddTsParam; tpPESession psessionEntry = NULL; tpLimTspecInfo tspecInfo; - tANI_U8 ac; + tANI_U8 ac; tpDphHashNode pSta; tANI_U16 aid; tANI_U8 sessionId; int i; - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, - (void **)&pAggrAddTsParam, - sizeof(tAggrAddTsParams))) + pAggrAddTsParam = vos_mem_malloc(sizeof(tAggrAddTsParams)); + if (NULL == pAggrAddTsParam) { - PELOGE(limLog(pMac, LOGE, FL("palAllocateMemory() failed"));) + PELOGE(limLog(pMac, LOGE, FL("AllocateMemory() failed"));) return eSIR_MEM_ALLOC_FAILED; } @@ -1315,7 +1354,7 @@ limProcessFTAggrQosReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf ) if (psessionEntry == NULL) { PELOGE(limLog(pMac, LOGE, FL("psession Entry Null for sessionId = %d"), aggrQosReq->sessionId);) - palFreeMemory(pMac->hHdd, (tANI_U8*)pAggrAddTsParam); + vos_mem_free(pAggrAddTsParam); return eSIR_FAILURE; } @@ -1323,12 +1362,12 @@ limProcessFTAggrQosReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf ) if (pSta == NULL) { PELOGE(limLog(pMac, LOGE, FL("Station context not found - ignoring AddTsRsp"));) - palFreeMemory(pMac->hHdd, (tANI_U8*)pAggrAddTsParam); + vos_mem_free(pAggrAddTsParam); return eSIR_FAILURE; } - palZeroMemory( pMac->hHdd, (tANI_U8 *)pAggrAddTsParam, - sizeof(tAggrAddTsParams)); + vos_mem_set((tANI_U8 *)pAggrAddTsParam, + sizeof(tAggrAddTsParams), 0); pAggrAddTsParam->staIdx = psessionEntry->staId; // Fill in the sessionId specific to PE pAggrAddTsParam->sessionId = sessionId; @@ -1336,16 +1375,16 @@ limProcessFTAggrQosReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf ) for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ ) { - if (aggrQosReq->aggrInfo.tspecIdx & (1<aggrInfo.tspecIdx & (1<aggrInfo.aggrAddTsInfo[i].tspec; /* Since AddTS response was successful, check for the PSB flag - * and directional flag inside the TS Info field. - * An AC is trigger enabled AC if the PSB subfield is set to 1 + * and directional flag inside the TS Info field. + * An AC is trigger enabled AC if the PSB subfield is set to 1 * in the uplink direction. - * An AC is delivery enabled AC if the PSB subfield is set to 1 + * An AC is delivery enabled AC if the PSB subfield is set to 1 * in the downlink direction. - * An AC is trigger and delivery enabled AC if the PSB subfield + * An AC is trigger and delivery enabled AC if the PSB subfield * is set to 1 in the bi-direction field. */ if(!pMac->psOffloadEnabled) @@ -1419,11 +1458,11 @@ limProcessFTAggrQosReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf ) limSetActiveEdcaParams(pMac, psessionEntry->gLimEdcaParams, psessionEntry); - if (pSta->aniPeer == eANI_BOOLEAN_TRUE) + if (pSta->aniPeer == eANI_BOOLEAN_TRUE) { limSendEdcaParams(pMac, psessionEntry->gLimEdcaParamsActive, pSta->bssId, eANI_BOOLEAN_TRUE); } - else + else { limSendEdcaParams(pMac, psessionEntry->gLimEdcaParamsActive, pSta->bssId, eANI_BOOLEAN_FALSE); } @@ -1432,7 +1471,7 @@ limProcessFTAggrQosReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf ) { PELOGE(limLog(pMac, LOGE, FL("Adding entry in lim Tspec Table failed "));) pMac->lim.gLimAddtsSent = false; - palFreeMemory(pMac->hHdd, (tANI_U8*)pAggrAddTsParam); + vos_mem_free(pAggrAddTsParam); return eSIR_FAILURE; //Error handling. send the response with error status. need to send DelTS to tear down the TSPEC status. } @@ -1455,7 +1494,7 @@ limProcessFTAggrQosReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf ) { PELOGW(limLog(pMac, LOGW, FL("wdaPostCtrlMsg() failed"));) SET_LIM_PROCESS_DEFD_MESGS(pMac, true); - palFreeMemory(pMac->hHdd, (tANI_U8*)pAggrAddTsParam); + vos_mem_free(pAggrAddTsParam); return eSIR_FAILURE; } @@ -1474,14 +1513,14 @@ limFTSendAggrQosRsp(tpAniSirGlobal pMac, tANI_U8 rspReqd, return; } - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&rsp, - sizeof(tSirAggrQosRsp))) + rsp = vos_mem_malloc(sizeof(tSirAggrQosRsp)); + if (NULL == rsp) { - limLog(pMac, LOGP, FL("palAllocateMemory failed for tSirAggrQosRsp")); + limLog(pMac, LOGP, FL("AllocateMemory failed for tSirAggrQosRsp")); return; } - palZeroMemory( pMac->hHdd, (tANI_U8 *) rsp, sizeof(*rsp)); + vos_mem_set((tANI_U8 *) rsp, sizeof(*rsp), 0); rsp->messageType = eWNI_SME_FT_AGGR_QOS_RSP; rsp->sessionId = smesessionId; rsp->length = sizeof(*rsp); @@ -1533,7 +1572,7 @@ void limProcessFTAggrQoSRsp(tpAniSirGlobal pMac, tpSirMsgQ limMsg) PELOGE(limLog(pMac, LOGE, FL("Cant find session entry for %s"), __func__);) if( pAggrQosRspMsg != NULL ) { - palFreeMemory( pMac->hHdd, (void *)pAggrQosRspMsg ); + vos_mem_free(pAggrQosRspMsg); } return; } @@ -1571,39 +1610,9 @@ void limProcessFTAggrQoSRsp(tpAniSirGlobal pMac, tpSirMsgQ limMsg) psessionEntry->smeSessionId); if( pAggrQosRspMsg != NULL ) { - palFreeMemory( pMac->hHdd, (void *)pAggrQosRspMsg ); + vos_mem_free(pAggrQosRspMsg); } return; } - -/*-------------------------------------------------------------------------- - Determines if a session with ccx or 11r assoc is present. - If present it will return TRUE else FALSE - ------------------------------------------------------------------------*/ -int limisFastTransitionRequired(tpAniSirGlobal pMac, int sessionId) -{ - if(pMac->lim.gpSession[sessionId].valid == TRUE) - { - // If ccx or 11r connection is found we need to return TRUE - if((pMac->lim.gpSession[sessionId].bssType == eSIR_INFRASTRUCTURE_MODE) && - (((pMac->lim.gpSession[sessionId].is11Rconnection) -#ifdef FEATURE_WLAN_CCX - || (pMac->lim.gpSession[sessionId].isCCXconnection) -#endif -#ifdef FEATURE_WLAN_LFR - || (pMac->lim.gpSession[sessionId].isFastRoamIniFeatureEnabled) -#endif - )&& - pMac->lim.gpSession[sessionId].isFastTransitionEnabled)) - { - // Make sure we have 11r/CCX and FT enabled only then we need - // the values to be altered from cfg for FW RSSI Period alteration. - return TRUE; - } - } - - return FALSE; -} - #endif /* WLAN_FEATURE_VOWIFI_11R */ diff --git a/CORE/MAC/src/pe/lim/limIbssPeerMgmt.c b/CORE/MAC/src/pe/lim/limIbssPeerMgmt.c index 71ff87c1a77f..096c586e6927 100644 --- a/CORE/MAC/src/pe/lim/limIbssPeerMgmt.c +++ b/CORE/MAC/src/pe/lim/limIbssPeerMgmt.c @@ -47,6 +47,7 @@ #include "limSendMessages.h" #include "limSession.h" #include "limIbssPeerMgmt.h" +#include "limRMC.h" /** @@ -78,9 +79,9 @@ ibss_peer_find( while (pTempNode != NULL) { - if (palEqualMemory( pMac->hHdd,(tANI_U8 *) macAddr, - (tANI_U8 *) &pTempNode->peerMacAddr, - sizeof(tSirMacAddr)) ) + if (vos_mem_compare((tANI_U8 *) macAddr, + (tANI_U8 *) &pTempNode->peerMacAddr, + sizeof(tSirMacAddr))) break; pTempNode = pTempNode->next; } @@ -128,10 +129,10 @@ ibss_peer_add(tpAniSirGlobal pMac, tLimIbssPeerNode *pPeerNode) } if(pTemp->beacon) { - palFreeMemory(pMac->hHdd, pTemp->beacon); + vos_mem_free(pTemp->beacon); } - palFreeMemory( pMac->hHdd, (tANI_U8 *) pTemp); + vos_mem_free(pTemp); pPrev->next = NULL; } else @@ -174,7 +175,7 @@ ibss_peer_collect( tLimIbssPeerNode *pPeer, tpPESession psessionEntry) { - palCopyMemory( pMac->hHdd, pPeer->peerMacAddr, pHdr->sa, sizeof(tSirMacAddr)); + vos_mem_copy(pPeer->peerMacAddr, pHdr->sa, sizeof(tSirMacAddr)); pPeer->capabilityInfo = pBeacon->capabilityInfo; pPeer->extendedRatesPresent = pBeacon->extendedRatesPresent; @@ -186,9 +187,9 @@ ibss_peer_collect( (pBeacon->HTCaps.present)) { pPeer->htCapable = pBeacon->HTCaps.present; - palCopyMemory(pMac->hHdd, (tANI_U8 *)pPeer->supportedMCSSet, - (tANI_U8 *)pBeacon->HTCaps.supportedMCSSet, - sizeof(pPeer->supportedMCSSet)); + vos_mem_copy((tANI_U8 *)pPeer->supportedMCSSet, + (tANI_U8 *)pBeacon->HTCaps.supportedMCSSet, + sizeof(pPeer->supportedMCSSet)); pPeer->htGreenfield = (tANI_U8)pBeacon->HTCaps.greenField; pPeer->htSupportedChannelWidthSet = ( tANI_U8 ) pBeacon->HTCaps.supportedChannelWidthSet; pPeer->htMIMOPSState = (tSirMacHTMIMOPowerSaveState)pBeacon->HTCaps.mimoPowerSave; @@ -205,24 +206,24 @@ ibss_peer_collect( #ifdef WLAN_FEATURE_11AC if ( pBeacon->VHTCaps.present ) { - pPeer->vhtSupportedChannelWidthSet = - (tANI_U8)((pBeacon->VHTOperation.chanWidth == WNI_CFG_VHT_CHANNEL_WIDTH_80MHZ) ? - eHT_CHANNEL_WIDTH_80MHZ : WNI_CFG_VHT_CHANNEL_WIDTH_20_40MHZ); + pPeer->vhtSupportedChannelWidthSet = pBeacon->VHTOperation.chanWidth; pPeer->vhtCapable = pBeacon->VHTCaps.present; // Collect VHT capabilities from beacon - palCopyMemory(pMac->hHdd, (tANI_U8 *) &pPeer->VHTCaps, (tANI_U8 *) &pBeacon->VHTCaps, sizeof(tDot11fIEVHTCaps) ); + vos_mem_copy((tANI_U8 *) &pPeer->VHTCaps, + (tANI_U8 *) &pBeacon->VHTCaps, + sizeof(tDot11fIEVHTCaps)); } #endif pPeer->erpIePresent = pBeacon->erpPresent; - palCopyMemory( pMac->hHdd, (tANI_U8 *) &pPeer->supportedRates, - (tANI_U8 *) &pBeacon->supportedRates, - pBeacon->supportedRates.numRates + 1); + vos_mem_copy((tANI_U8 *) &pPeer->supportedRates, + (tANI_U8 *) &pBeacon->supportedRates, + pBeacon->supportedRates.numRates + 1); if (pPeer->extendedRatesPresent) - palCopyMemory( pMac->hHdd, (tANI_U8 *) &pPeer->extendedRates, - (tANI_U8 *) &pBeacon->extendedRates, - pBeacon->extendedRates.numRates + 1); + vos_mem_copy((tANI_U8 *) &pPeer->extendedRates, + (tANI_U8 *) &pBeacon->extendedRates, + pBeacon->extendedRates.numRates + 1); else pPeer->extendedRates.numRates = 0; @@ -406,9 +407,9 @@ ibss_coalesce_free( tpAniSirGlobal pMac) { if (pMac->lim.ibssInfo.pHdr != NULL) - palFreeMemory(pMac->hHdd, pMac->lim.ibssInfo.pHdr); + vos_mem_free(pMac->lim.ibssInfo.pHdr); if (pMac->lim.ibssInfo.pBeacon != NULL) - palFreeMemory(pMac->hHdd, pMac->lim.ibssInfo.pBeacon); + vos_mem_free(pMac->lim.ibssInfo.pBeacon); pMac->lim.ibssInfo.pHdr = NULL; pMac->lim.ibssInfo.pBeacon = NULL; @@ -423,29 +424,25 @@ ibss_coalesce_save( tpSirMacMgmtHdr pHdr, tpSchBeaconStruct pBeacon) { - eHalStatus status; - // get rid of any saved info ibss_coalesce_free(pMac); - status = palAllocateMemory(pMac->hHdd, (void **) &pMac->lim.ibssInfo.pHdr, - sizeof(*pHdr)); - if (status != eHAL_STATUS_SUCCESS) + pMac->lim.ibssInfo.pHdr = vos_mem_malloc(sizeof(*pHdr)); + if (NULL == pMac->lim.ibssInfo.pHdr) { PELOGE(limLog(pMac, LOGE, FL("ibbs-save: Failed malloc pHdr"));) return; } - status = palAllocateMemory(pMac->hHdd, (void **) &pMac->lim.ibssInfo.pBeacon, - sizeof(*pBeacon)); - if (status != eHAL_STATUS_SUCCESS) + pMac->lim.ibssInfo.pBeacon = vos_mem_malloc(sizeof(*pBeacon)); + if (NULL == pMac->lim.ibssInfo.pBeacon) { PELOGE(limLog(pMac, LOGE, FL("ibbs-save: Failed malloc pBeacon"));) ibss_coalesce_free(pMac); return; } - palCopyMemory(pMac->hHdd, pMac->lim.ibssInfo.pHdr, pHdr, sizeof(*pHdr)); - palCopyMemory(pMac->hHdd, pMac->lim.ibssInfo.pBeacon, pBeacon, sizeof(*pBeacon)); + vos_mem_copy(pMac->lim.ibssInfo.pHdr, pHdr, sizeof(*pHdr)); + vos_mem_copy(pMac->lim.ibssInfo.pBeacon, pBeacon, sizeof(*pBeacon)); } /* @@ -532,7 +529,7 @@ ibss_status_chg_notify( if(beacon != NULL) { - palFreeMemory(pMac->hHdd, beacon); + vos_mem_free(beacon); } } @@ -554,8 +551,8 @@ ibss_bss_add( return; } - palCopyMemory( pMac->hHdd, psessionEntry->bssId, pHdr->bssId, - sizeof(tSirMacAddr)); + vos_mem_copy(psessionEntry->bssId, pHdr->bssId, + sizeof(tSirMacAddr)); #if 0 if (cfgSetStr(pMac, WNI_CFG_BSSID, (tANI_U8 *) pHdr->bssId, sizeof(tSirMacAddr)) @@ -591,10 +588,9 @@ ibss_bss_add( { psessionEntry->shortSlotTimeSupported = pBeacon->capabilityInfo.shortSlotTime; } - palCopyMemory( pMac->hHdd, - (tANI_U8 *) &psessionEntry->pLimStartBssReq->operationalRateSet, - (tANI_U8 *) &pBeacon->supportedRates, - pBeacon->supportedRates.numRates); + vos_mem_copy((tANI_U8 *) &psessionEntry->pLimStartBssReq->operationalRateSet, + (tANI_U8 *) &pBeacon->supportedRates, + pBeacon->supportedRates.numRates); #if 0 if (cfgSetStr(pMac, WNI_CFG_OPERATIONAL_RATE_SET, @@ -631,13 +627,13 @@ ibss_bss_add( * even though all the nodes are capable of doing CB. * so it is decided to leave the self HT capabilties intact. This may change if some issues are found in interop. */ - palZeroMemory(pMac->hHdd, (void *) &mlmStartReq, sizeof(mlmStartReq)); + vos_mem_set((void *) &mlmStartReq, sizeof(mlmStartReq), 0); - palCopyMemory(pMac->hHdd, mlmStartReq.bssId, pHdr->bssId, sizeof(tSirMacAddr)); + vos_mem_copy(mlmStartReq.bssId, pHdr->bssId, sizeof(tSirMacAddr)); mlmStartReq.rateSet.numRates = psessionEntry->pLimStartBssReq->operationalRateSet.numRates; - palCopyMemory(pMac->hHdd, &mlmStartReq.rateSet.rate[0], - &psessionEntry->pLimStartBssReq->operationalRateSet.rate[0], - mlmStartReq.rateSet.numRates); + vos_mem_copy(&mlmStartReq.rateSet.rate[0], + &psessionEntry->pLimStartBssReq->operationalRateSet.rate[0], + mlmStartReq.rateSet.numRates); mlmStartReq.bssType = eSIR_IBSS_MODE; mlmStartReq.beaconPeriod = pBeacon->beaconInterval; mlmStartReq.nwType = psessionEntry->pLimStartBssReq->nwType; //psessionEntry->nwType is also OK???? @@ -659,9 +655,9 @@ ibss_bss_add( mlmStartReq.cbMode = psessionEntry->pLimStartBssReq->cbMode; // Copy the SSID for RxP filtering based on SSID. - palCopyMemory( pMac->hHdd, (tANI_U8 *) &mlmStartReq.ssId, - (tANI_U8 *) &psessionEntry->pLimStartBssReq->ssId, - psessionEntry->pLimStartBssReq->ssId.length + 1); + vos_mem_copy((tANI_U8 *) &mlmStartReq.ssId, + (tANI_U8 *) &psessionEntry->pLimStartBssReq->ssId, + psessionEntry->pLimStartBssReq->ssId.length + 1); PELOG1(limLog(pMac, LOG1, FL("invoking ADD_BSS as part of coalescing!"));) if (limMlmAddBss(pMac, &mlmStartReq,psessionEntry) != eSIR_SME_SUCCESS) @@ -727,7 +723,7 @@ limIbssInit( pMac->lim.gLimNumIbssPeers = 0; // ibss info - params for which ibss to join while coalescing - palZeroMemory(pMac->hHdd, &pMac->lim.ibssInfo, sizeof(tAniSirLimIbss)); + vos_mem_set(&pMac->lim.ibssInfo, sizeof(tAniSirLimIbss), 0); } /*** end limIbssInit() ***/ /** @@ -773,6 +769,7 @@ void limIbssDeleteAllPeers( tpAniSirGlobal pMac ,tpPESession psessionEntry) ibss_status_chg_notify( pMac, pCurrNode->peerMacAddr, pStaDs->staIndex, pStaDs->ucUcastSig, pStaDs->ucBcastSig, eWNI_SME_IBSS_PEER_DEPARTED_IND, psessionEntry->smeSessionId ); + limReleasePeerIdx(pMac, peerIdx, psessionEntry); dphDeleteHashEntry(pMac, pStaDs->staAddr, peerIdx, &psessionEntry->dph.dphHashTable); } @@ -789,9 +786,9 @@ void limIbssDeleteAllPeers( tpAniSirGlobal pMac ,tpPESession psessionEntry) if(pCurrNode->beacon) { - palFreeMemory(pMac->hHdd, pCurrNode->beacon); + vos_mem_free(pCurrNode->beacon); } - palFreeMemory( pMac->hHdd, (tANI_U8 *) pCurrNode); + vos_mem_free(pCurrNode); if (pMac->lim.gLimNumIbssPeers > 0) // be paranoid pMac->lim.gLimNumIbssPeers--; pCurrNode = pTempNode; @@ -825,6 +822,10 @@ void limIbssDelete( tpAniSirGlobal pMac,tpPESession psessionEntry) { +#if defined WLAN_FEATURE_RELIABLE_MCAST + limRmcIbssDelete(pMac); +#endif /* WLAN_FEATURE_RELIABLE_MCAST */ + limIbssDeleteAllPeers(pMac,psessionEntry); ibss_coalesce_free(pMac); @@ -864,9 +865,9 @@ limIbssPeerDelete(tpAniSirGlobal pMac, tSirMacAddr macAddr) while (pTempNode != NULL) { - if (palEqualMemory( pMac->hHdd,(tANI_U8 *) macAddr, - (tANI_U8 *) &pTempNode->peerMacAddr, - sizeof(tSirMacAddr)) ) + if (vos_mem_compare((tANI_U8 *) macAddr, + (tANI_U8 *) &pTempNode->peerMacAddr, + sizeof(tSirMacAddr)) ) { // Found node to be deleted if (pMac->lim.gLimIbssPeerList == pTempNode) /** First Node to be deleted*/ @@ -876,10 +877,10 @@ limIbssPeerDelete(tpAniSirGlobal pMac, tSirMacAddr macAddr) if(pTempNode->beacon) { - palFreeMemory(pMac->hHdd, pTempNode->beacon); + vos_mem_free(pTempNode->beacon); pTempNode->beacon = NULL; } - palFreeMemory( pMac->hHdd, (tANI_U8 *) pTempNode); + vos_mem_free(pTempNode); pMac->lim.gLimNumIbssPeers--; return; } @@ -963,8 +964,7 @@ limIbssUpdateProtectionParams(tpAniSirGlobal pMac, PELOG1(limLog(pMac, LOG1, FL("Addr: "));) PELOG1(limPrintMacAddr(pMac, pMac->lim.protStaCache[i].addr, LOG1);) - if (palEqualMemory( pMac->hHdd, - pMac->lim.protStaCache[i].addr, + if (vos_mem_compare(pMac->lim.protStaCache[i].addr, peerMacAddr, sizeof(tSirMacAddr))) { PELOG1(limLog(pMac, LOG1, FL("matching cache entry at %d already active."), i);) @@ -985,9 +985,9 @@ limIbssUpdateProtectionParams(tpAniSirGlobal pMac, return; } - palCopyMemory( pMac->hHdd, pMac->lim.protStaCache[i].addr, - peerMacAddr, - sizeof(tSirMacAddr)); + vos_mem_copy(pMac->lim.protStaCache[i].addr, + peerMacAddr, + sizeof(tSirMacAddr)); pMac->lim.protStaCache[i].protStaCacheType = protStaCacheType; pMac->lim.protStaCache[i].active = true; @@ -1087,7 +1087,7 @@ limIbssStaAdd( tSirMacAddr *pPeerAddr = (tSirMacAddr *) pBody; tUpdateBeaconParams beaconParams; - palZeroMemory( pMac->hHdd, (tANI_U8 *) &beaconParams, sizeof(tUpdateBeaconParams)); + vos_mem_set((tANI_U8 *) &beaconParams, sizeof(tUpdateBeaconParams), 0); if (pBody == 0) { @@ -1127,7 +1127,8 @@ limIbssStaAdd( if(beaconParams.paramChangeBitmap) { PELOGE(limLog(pMac, LOGE, FL("---> Update Beacon Params "));) - schSetFixedBeaconFields(pMac, psessionEntry); + schSetFixedBeaconFields(pMac, psessionEntry); + beaconParams.bssIdx = psessionEntry->bssIdx; limSendBeaconParams(pMac, &beaconParams, psessionEntry ); } } @@ -1168,7 +1169,7 @@ limIbssAddStaRsp( { PELOGE(limLog(pMac, LOGE, FL("IBSS: ADD_STA_RSP for unknown MAC addr "));) limPrintMacAddr(pMac, pAddStaParams->staMac, LOGE); - palFreeMemory( pMac->hHdd, (void *) pAddStaParams ); + vos_mem_free(pAddStaParams); return eSIR_FAILURE; } @@ -1176,7 +1177,7 @@ limIbssAddStaRsp( { PELOGE(limLog(pMac, LOGE, FL("IBSS: ADD_STA_RSP error (%x) "), pAddStaParams->status);) limPrintMacAddr(pMac, pAddStaParams->staMac, LOGE); - palFreeMemory( pMac->hHdd, (void *) pAddStaParams ); + vos_mem_free(pAddStaParams); return eSIR_FAILURE; } @@ -1193,7 +1194,12 @@ limIbssAddStaRsp( pStaDs->ucUcastSig, pStaDs->ucBcastSig, eWNI_SME_IBSS_NEW_PEER_IND, psessionEntry->smeSessionId); - palFreeMemory( pMac->hHdd, (void *) pAddStaParams ); + +#ifdef WLAN_FEATURE_RELIABLE_MCAST + limRmcTriggerLeaderSelection(pMac, psessionEntry->selfMacAddr); +#endif + + vos_mem_free(pAddStaParams); return eSIR_SUCCESS; } @@ -1226,7 +1232,7 @@ void limIbssDelBssRspWhenCoalescing(tpAniSirGlobal pMac, void *msg,tpPESession end: if(pDelBss != NULL) - palFreeMemory( pMac->hHdd, (void *) pDelBss ); + vos_mem_free(pDelBss); } @@ -1251,11 +1257,11 @@ void limIbssAddBssRspWhenCoalescing(tpAniSirGlobal pMac, void *msg, tpPESession infoLen = sizeof(tSirMacAddr) + sizeof(tSirMacChanNum) + sizeof(tANI_U8) + pBeacon->ssId.length + 1; - palZeroMemory(pMac->hHdd, (void *) &newBssInfo, sizeof(newBssInfo)); - palCopyMemory( pMac->hHdd, newBssInfo.bssId, pHdr->bssId, sizeof(tSirMacAddr)); + vos_mem_set((void *) &newBssInfo, sizeof(newBssInfo), 0); + vos_mem_copy(newBssInfo.bssId, pHdr->bssId, sizeof(tSirMacAddr)); newBssInfo.channelNumber = (tSirMacChanNum) pAddBss->currentOperChannel; - palCopyMemory( pMac->hHdd, (tANI_U8 *) &newBssInfo.ssId, - (tANI_U8 *) &pBeacon->ssId, pBeacon->ssId.length + 1); + vos_mem_copy((tANI_U8 *) &newBssInfo.ssId, + (tANI_U8 *) &pBeacon->ssId, pBeacon->ssId.length + 1); PELOGW(limLog(pMac, LOGW, FL("Sending JOINED_NEW_BSS notification to SME."));) @@ -1331,10 +1337,11 @@ limIbssDelBssRsp( goto end; } + limIbssDelete(pMac,psessionEntry); + dphHashTableClassInit(pMac, &psessionEntry->dph.dphHashTable); limDeletePreAuthList(pMac); - limIbssDelete(pMac,psessionEntry); psessionEntry->limMlmState = eLIM_MLM_IDLE_STATE; MTRACE(macTrace(pMac, TRACE_CODE_MLM_STATE, psessionEntry->peSessionId, psessionEntry->limMlmState)); @@ -1348,7 +1355,7 @@ limIbssDelBssRsp( end: if(pDelBss != NULL) - palFreeMemory( pMac->hHdd, (void *) pDelBss ); + vos_mem_free(pDelBss); /* Delete PE session once BSS is deleted */ if (NULL != psessionEntry) { limSendSmeRsp(pMac, eWNI_SME_STOP_BSS_RSP, rc,psessionEntry->smeSessionId,psessionEntry->transactionId); @@ -1357,6 +1364,84 @@ limIbssDelBssRsp( } } +static void +__limIbssSearchAndDeletePeer(tpAniSirGlobal pMac, + tpPESession psessionEntry, + tSirMacAddr macAddr) +{ + tLimIbssPeerNode *pTempNode, *pPrevNode; + tLimIbssPeerNode *pTempNextNode = NULL; + tpDphHashNode pStaDs=NULL; + tANI_U16 peerIdx=0; + tANI_U16 staIndex=0; + tANI_U8 ucUcastSig; + tANI_U8 ucBcastSig; + + pPrevNode = pTempNode = pMac->lim.gLimIbssPeerList; + + limLog(pMac, LOG1, FL(" PEER ADDR :" MAC_ADDRESS_STR ),MAC_ADDR_ARRAY(macAddr)); + + /** Compare Peer */ + while (NULL != pTempNode) + { + pTempNextNode = pTempNode->next; + + /* Delete the STA with MAC address */ + if (vos_mem_compare( (tANI_U8 *) macAddr, + (tANI_U8 *) &pTempNode->peerMacAddr, + sizeof(tSirMacAddr)) ) + { + pStaDs = dphLookupHashEntry(pMac, macAddr, + &peerIdx, &psessionEntry->dph.dphHashTable); + if (pStaDs) + { + staIndex = pStaDs->staIndex; + ucUcastSig = pStaDs->ucUcastSig; + ucBcastSig = pStaDs->ucBcastSig; + +#if defined WLAN_FEATURE_RELIABLE_MCAST + limRmcTransmitterDelete(pMac, pStaDs->staAddr); +#endif /* WLAN_FEATURE_RELIABLE_MCAST */ + + (void) limDelSta(pMac, pStaDs, false /*asynchronous*/, psessionEntry); + limDeleteDphHashEntry(pMac, pStaDs->staAddr, peerIdx, psessionEntry); + limReleasePeerIdx(pMac, peerIdx, psessionEntry); + + /* Send indication to upper layers */ + ibss_status_chg_notify(pMac, macAddr, staIndex, + ucUcastSig, ucBcastSig, + eWNI_SME_IBSS_PEER_DEPARTED_IND, + psessionEntry->smeSessionId ); + if (pTempNode == pMac->lim.gLimIbssPeerList) + { + pMac->lim.gLimIbssPeerList = pTempNode->next; + pPrevNode = pMac->lim.gLimIbssPeerList; + } + else + pPrevNode->next = pTempNode->next; + + vos_mem_free(pTempNode); + pMac->lim.gLimNumIbssPeers--; + + pTempNode = pTempNextNode; + break; + } + } + pPrevNode = pTempNode; + pTempNode = pTempNextNode; + } + /* + * if it is the last peer walking out, we better + * we set IBSS state to inactive. + */ + if (0 == pMac->lim.gLimNumIbssPeers) + { + VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO, + "Last STA from IBSS walked out"); + psessionEntry->limIbssActive = false; + } +} + /** * limIbssCoalesce() * @@ -1393,33 +1478,53 @@ limIbssCoalesce( tpDphHashNode pStaDs; tUpdateBeaconParams beaconParams; - palZeroMemory( pMac->hHdd, (tANI_U8 *) &beaconParams, sizeof(tUpdateBeaconParams)); + vos_mem_set((tANI_U8 *)&beaconParams, sizeof(tUpdateBeaconParams), 0); sirCopyMacAddr(currentBssId,psessionEntry->bssId); limLog(pMac, LOG1, FL("Current BSSID :" MAC_ADDRESS_STR " Received BSSID :" MAC_ADDRESS_STR ), MAC_ADDR_ARRAY(currentBssId), MAC_ADDR_ARRAY(pHdr->bssId)); + /* Check for IBSS Coalescing only if Beacon is from different BSS */ if ( !vos_mem_compare(currentBssId, pHdr->bssId, sizeof( tSirMacAddr )) && psessionEntry->isCoalesingInIBSSAllowed) { - if (! fTsfLater) // No Coalescing happened. - { - PELOGW(limLog(pMac, LOGW, FL("No Coalescing happened"));) - return eSIR_LIM_IGNORE_BEACON; - } - /* - * IBSS Coalescing happened. - * save the received beacon, and delete the current BSS. The rest of the - * processing will be done in the delBss response processing - */ - pMac->lim.gLimIbssCoalescingHappened = true; - PELOGW(limLog(pMac, LOGW, FL("IBSS Coalescing happened"));) - ibss_coalesce_save(pMac, pHdr, pBeacon); - limLog(pMac, LOGW, FL("Delete BSSID :" MAC_ADDRESS_STR ), - MAC_ADDR_ARRAY(currentBssId)); - ibss_bss_delete(pMac,psessionEntry); - return eSIR_SUCCESS; + /* + * If STA entry is already available in the LIM hash table, then it is + * possible that the peer may have left and rejoined within the heartbeat + * timeout. In the offloaded case with 32 peers, the HB timeout is whopping + * 128 seconds. In that case, the FW will not let any frames come in until + * atleast the last sequence number is received before the peer is left + * Hence, if the coalescing peer is already there in the peer list and if + * the BSSID matches then, invoke delSta() to cleanup the entries. We will + * let the peer coalesce when we receive next beacon from the peer + */ + pPeerNode = ibss_peer_find(pMac, pHdr->sa); + if (NULL != pPeerNode) + { + __limIbssSearchAndDeletePeer (pMac, psessionEntry, pHdr->sa); + PELOGW(limLog(pMac, LOGW, + FL("** Peer attempting to reconnect before HB timeout, deleted **"));) + return eSIR_LIM_IGNORE_BEACON; + } + + if (! fTsfLater) // No Coalescing happened. + { + PELOGW(limLog(pMac, LOGW, FL("No Coalescing happened"));) + return eSIR_LIM_IGNORE_BEACON; + } + /* + * IBSS Coalescing happened. + * save the received beacon, and delete the current BSS. The rest of the + * processing will be done in the delBss response processing + */ + pMac->lim.gLimIbssCoalescingHappened = true; + PELOGW(limLog(pMac, LOGW, FL("IBSS Coalescing happened"));) + ibss_coalesce_save(pMac, pHdr, pBeacon); + limLog(pMac, LOGW, FL("Delete BSSID :" MAC_ADDRESS_STR ), + MAC_ADDR_ARRAY(currentBssId)); + ibss_bss_delete(pMac,psessionEntry); + return eSIR_SUCCESS; } else { @@ -1427,6 +1532,7 @@ limIbssCoalesce( return eSIR_LIM_IGNORE_BEACON; } + // STA in IBSS mode and SSID matches with ours pPeerNode = ibss_peer_find(pMac, pHdr->sa); if (pPeerNode == NULL) @@ -1434,18 +1540,24 @@ limIbssCoalesce( /* Peer not in the list - Collect BSS description & add to the list */ tANI_U32 frameLen; tSirRetStatus retCode; - PELOGW(limLog(pMac, LOGW, FL("IBSS Peer node does not exist, adding it***"));) -#ifndef ANI_SIR_IBSS_PEER_CACHING - /** Limit the Max number of IBSS Peers allowed as the max number of STA's allowed + /* + * Limit the Max number of IBSS Peers allowed as the max + * number of STA's allowed + * pMac->lim.gLimNumIbssPeers will be increamented after exiting + * this function. so we will add additional 1 to compare against + * pMac->lim.gLimIbssStaLimit */ - if (pMac->lim.gLimNumIbssPeers >= pMac->lim.maxStation) + if ((pMac->lim.gLimNumIbssPeers+1) >= pMac->lim.gLimIbssStaLimit) + { + PELOGE(limLog(pMac, LOGE, FL("**** MAX STA LIMIT HAS REACHED ****"));) return eSIR_LIM_MAX_STA_REACHED_ERROR; -#endif + } + PELOGW(limLog(pMac, LOGW, FL("IBSS Peer node does not exist, adding it***"));) frameLen = sizeof(tLimIbssPeerNode) + ieLen - sizeof(tANI_U32); - if (eHAL_STATUS_SUCCESS != - palAllocateMemory(pMac->hHdd, (void **) &pPeerNode, (tANI_U16)frameLen)) + pPeerNode = vos_mem_malloc((tANI_U16)frameLen); + if (NULL == pPeerNode) { limLog(pMac, LOGP, FL("alloc fail (%d bytes) storing IBSS peer info"), frameLen); @@ -1456,14 +1568,14 @@ limIbssCoalesce( pPeerNode->beaconLen = 0; ibss_peer_collect(pMac, pBeacon, pHdr, pPeerNode,psessionEntry); - if(eHAL_STATUS_SUCCESS != - palAllocateMemory(pMac->hHdd, (void**)&pPeerNode->beacon, ieLen)) - { + pPeerNode->beacon = vos_mem_malloc(ieLen); + if (NULL == pPeerNode->beacon) + { PELOGE(limLog(pMac, LOGE, FL("Unable to allocate memory to store beacon"));) } else { - palCopyMemory(pMac->hHdd, pPeerNode->beacon, pIEs, ieLen); + vos_mem_copy(pPeerNode->beacon, pIEs, ieLen); pPeerNode->beaconLen = (tANI_U16)ieLen; } ibss_peer_add(pMac, pPeerNode); @@ -1493,7 +1605,8 @@ limIbssCoalesce( if(beaconParams.paramChangeBitmap) { PELOGE(limLog(pMac, LOGE, FL("beaconParams.paramChangeBitmap=1 ---> Update Beacon Params "));) - schSetFixedBeaconFields(pMac, psessionEntry); + schSetFixedBeaconFields(pMac, psessionEntry); + beaconParams.bssIdx = psessionEntry->bssIdx; limSendBeaconParams(pMac, &beaconParams, psessionEntry ); } } @@ -1514,7 +1627,7 @@ limIbssCoalesce( limSendSmeWmStatusChangeNtf(pMac, eSIR_SME_IBSS_ACTIVE, NULL, 0, psessionEntry->smeSessionId); limHeartBeatDeactivateAndChangeTimer(pMac, psessionEntry); MTRACE(macTrace(pMac, TRACE_CODE_TIMER_ACTIVATE, psessionEntry->peSessionId, eLIM_HEART_BEAT_TIMER)); - if (limActivateHearBeatTimer(pMac) != TX_SUCCESS) + if (limActivateHearBeatTimer(pMac, psessionEntry) != TX_SUCCESS) limLog(pMac, LOGP, FL("could not activate Heartbeat timer")); } @@ -1526,12 +1639,12 @@ void limIbssHeartBeatHandle(tpAniSirGlobal pMac,tpPESession psessionEntry) { tLimIbssPeerNode *pTempNode, *pPrevNode; tLimIbssPeerNode *pTempNextNode = NULL; - tANI_U16 peerIdx; - tpDphHashNode pStaDs; - tANI_U32 threshold; - tANI_U16 staIndex; - tANI_U8 ucUcastSig; - tANI_U8 ucBcastSig; + tANI_U16 peerIdx=0; + tpDphHashNode pStaDs=0; + tANI_U32 threshold=0; + tANI_U16 staIndex=0; + tANI_U8 ucUcastSig=0; + tANI_U8 ucBcastSig=0; /** MLM BSS is started and if PE in scanmode then MLM state will be waiting for probe resp. * If Heart beat timeout triggers during this corner case then we need to reactivate HeartBeat timer @@ -1577,6 +1690,10 @@ void limIbssHeartBeatHandle(tpAniSirGlobal pMac,tpPESession psessionEntry) ucUcastSig = pStaDs->ucUcastSig; ucBcastSig = pStaDs->ucBcastSig; +#if defined WLAN_FEATURE_RELIABLE_MCAST + limRmcTransmitterDelete(pMac, pStaDs->staAddr); +#endif /* WLAN_FEATURE_RELIABLE_MCAST */ + (void) limDelSta(pMac, pStaDs, false /*asynchronous*/,psessionEntry); limDeleteDphHashEntry(pMac, pStaDs->staAddr, peerIdx,psessionEntry); limReleasePeerIdx(pMac, peerIdx, psessionEntry); @@ -1594,7 +1711,7 @@ void limIbssHeartBeatHandle(tpAniSirGlobal pMac,tpPESession psessionEntry) else pPrevNode->next = pTempNode->next; - palFreeMemory(pMac->hHdd,pTempNode); + vos_mem_free(pTempNode); pMac->lim.gLimNumIbssPeers--; pTempNode = pTempNextNode; //Since we deleted current node, prevNode remains same. @@ -1680,8 +1797,8 @@ limIbssDecideProtectionOnDelete(tpAniSirGlobal pMac, { if (pMac->lim.protStaCache[i].active) { - if (palEqualMemory( pMac->hHdd,pMac->lim.protStaCache[i].addr, - pStaDs->staAddr, sizeof(tSirMacAddr))) + if (vos_mem_compare(pMac->lim.protStaCache[i].addr, + pStaDs->staAddr, sizeof(tSirMacAddr))) { psessionEntry->gLim11bParams.numSta--; pMac->lim.protStaCache[i].active = false; @@ -1699,3 +1816,80 @@ limIbssDecideProtectionOnDelete(tpAniSirGlobal pMac, } } } + +/** ----------------------------------------------------------------- +\fn __limIbssPeerInactivityHandler +\brief Internal function. Deletes FW indicated peer which is inactive +\ +\param tpAniSirGlobal pMac +\param tpPESession psessionEntry +\param tpSirIbssPeerInactivityInd peerInactivityInd +\return None + -----------------------------------------------------------------*/ +static void +__limIbssPeerInactivityHandler(tpAniSirGlobal pMac, + tpPESession psessionEntry, + tpSirIbssPeerInactivityInd peerInactivityInd) +{ + if(psessionEntry->limMlmState != eLIM_MLM_BSS_STARTED_STATE) + { + limReactivateHeartBeatTimer(pMac, psessionEntry); + return; + } + + /* delete the peer for which heartbeat is observed */ + __limIbssSearchAndDeletePeer (pMac, psessionEntry, peerInactivityInd->peerAddr); + +} + +/** ------------------------------------------------------------- +\fn limProcessIbssPeerInactivity +\brief Peer inactivity message handler +\ +\param tpAniSirGlobal pMac +\param void* buf +\return None + -------------------------------------------------------------*/ +void +limProcessIbssPeerInactivity(tpAniSirGlobal pMac, void *buf) +{ + /* + * --------------- HEARTBEAT OFFLOAD CASE ------------------ + * This message handler is executed when the firmware identifies + * inactivity from one or more peer devices. We will come here + * for every inactive peer device + */ + tANI_U8 i; + + tSirIbssPeerInactivityInd *peerInactivityInd = + (tSirIbssPeerInactivityInd *) buf; + + /* + * If IBSS is not started or heartbeat offload is not enabled + * we should not handle this request + */ + if (eLIM_STA_IN_IBSS_ROLE != pMac->lim.gLimSystemRole && + !IS_IBSS_HEARTBEAT_OFFLOAD_FEATURE_ENABLE) + { + return; + } + + /** If LinkMonitor is Disabled */ + if (!pMac->sys.gSysEnableLinkMonitorMode) + { + return; + } + + for (i = 0; i < pMac->lim.maxBssId; i++) + { + if (VOS_TRUE == pMac->lim.gpSession[i].valid && + eSIR_IBSS_MODE == pMac->lim.gpSession[i].bssType) + { + __limIbssPeerInactivityHandler(pMac, + &pMac->lim.gpSession[i], + peerInactivityInd); + break; + } + } +} + diff --git a/CORE/MAC/src/pe/lim/limIbssPeerMgmt.h b/CORE/MAC/src/pe/lim/limIbssPeerMgmt.h index 7b25310d6b9c..81049a73ac16 100644 --- a/CORE/MAC/src/pe/lim/limIbssPeerMgmt.h +++ b/CORE/MAC/src/pe/lim/limIbssPeerMgmt.h @@ -26,7 +26,6 @@ */ /* - * * Airgo Networks, Inc proprietary. All rights reserved. * This file limIbssPeerMgmt.h contains prototypes for * the utility functions LIM uses to maintain peers in IBSS. @@ -40,6 +39,8 @@ #include "sirCommon.h" #include "limUtils.h" +#define IBSS_STATIONS_USED_DURING_INIT 4 //(broadcast + self + p2p + softap) + void limIbssInit(tpAniSirGlobal); void limIbssDelete(tpAniSirGlobal,tpPESession psessionEntry); tSirRetStatus limIbssCoalesce(tpAniSirGlobal, tpSirMacMgmtHdr, tpSchBeaconStruct, tANI_U8*,tANI_U32, tANI_U16,tpPESession); @@ -50,4 +51,4 @@ void limIbssDelBssRspWhenCoalescing(tpAniSirGlobal, void *,tpPESession); void limIbssAddBssRspWhenCoalescing(tpAniSirGlobal pMac, void * msg, tpPESession pSessionEntry); void limIbssDecideProtectionOnDelete(tpAniSirGlobal pMac, tpDphHashNode pStaDs, tpUpdateBeaconParams pBeaconParams,tpPESession pSessionEntry); void limIbssHeartBeatHandle(tpAniSirGlobal pMac,tpPESession psessionEntry); - +void limProcessIbssPeerInactivity(tpAniSirGlobal pMac, void *buf); diff --git a/CORE/MAC/src/pe/lim/limLinkMonitoringAlgo.c b/CORE/MAC/src/pe/lim/limLinkMonitoringAlgo.c index 865fe11ee5df..547dcdd79a8e 100644 --- a/CORE/MAC/src/pe/lim/limLinkMonitoringAlgo.c +++ b/CORE/MAC/src/pe/lim/limLinkMonitoringAlgo.c @@ -108,7 +108,7 @@ limDeleteStaContext(tpAniSirGlobal pMac, tpSirMsgQ limMsg) if((psessionEntry = peFindSessionByBssid(pMac,pMsg->bssId,&sessionId))== NULL) { PELOGE(limLog(pMac, LOGE,FL("session does not exist for given BSSId"));) - palFreeMemory(pMac->hHdd, pMsg); + vos_mem_free(pMsg); return; } @@ -125,7 +125,7 @@ limDeleteStaContext(tpAniSirGlobal pMac, tpSirMsgQ limMsg) if (!pStaDs) { PELOGE(limLog(pMac, LOGE, FL("Skip STA deletion (invalid STA) limSystemRole=%d"),psessionEntry->limSystemRole);) - palFreeMemory(pMac->hHdd, pMsg); + vos_mem_free(pMsg); return; } @@ -135,7 +135,7 @@ limDeleteStaContext(tpAniSirGlobal pMac, tpSirMsgQ limMsg) if (pStaDs->staIndex != pMsg->staId) { PELOGE(limLog(pMac, LOGE, FL("staid mismatch: %d vs %d "), pStaDs->staIndex, pMsg->staId);) - palFreeMemory(pMac->hHdd, pMsg); + vos_mem_free(pMsg); return; } @@ -170,8 +170,8 @@ limDeleteStaContext(tpAniSirGlobal pMac, tpSirMsgQ limMsg) pStaDs->mlmStaContext.cleanupTrigger = eLIM_LINK_MONITORING_DEAUTH; // Issue Deauth Indication to SME. - palCopyMemory( pMac->hHdd, (tANI_U8 *) &mlmDeauthInd.peerMacAddr, - pStaDs->staAddr, sizeof(tSirMacAddr)); + vos_mem_copy((tANI_U8 *) &mlmDeauthInd.peerMacAddr, + pStaDs->staAddr, sizeof(tSirMacAddr)); mlmDeauthInd.reasonCode = (tANI_U8) pStaDs->mlmStaContext.disassocReason; mlmDeauthInd.deauthTrigger = pStaDs->mlmStaContext.cleanupTrigger; @@ -199,7 +199,7 @@ limDeleteStaContext(tpAniSirGlobal pMac, tpSirMsgQ limMsg) break; } - palFreeMemory(pMac->hHdd, pMsg); + vos_mem_free(pMsg); return; } @@ -240,9 +240,10 @@ limTriggerSTAdeletion(tpAniSirGlobal pMac, tpDphHashNode pStaDs, tpPESession pse * take care of disassociation as well. */ - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pSmeDeauthReq, sizeof(tSirSmeDeauthReq))) + pSmeDeauthReq = vos_mem_malloc(sizeof(tSirSmeDeauthReq)); + if (NULL == pSmeDeauthReq) { - limLog(pMac, LOGP, FL("palAllocateMemory failed for eWNI_SME_DEAUTH_REQ ")); + limLog(pMac, LOGP, FL("AllocateMemory failed for eWNI_SME_DEAUTH_REQ ")); return; } @@ -269,12 +270,12 @@ limTriggerSTAdeletion(tpAniSirGlobal pMac, tpDphHashNode pStaDs, tpPESession pse msgLength += sizeof(tANI_U16); //bssId - palCopyMemory( pMac->hHdd, pBuf, psessionEntry->bssId, sizeof(tSirMacAddr) ); + vos_mem_copy(pBuf, psessionEntry->bssId, sizeof(tSirMacAddr)); pBuf += sizeof(tSirMacAddr); msgLength += sizeof(tSirMacAddr); //peerMacAddr - palCopyMemory( pMac->hHdd, pBuf, pStaDs->staAddr, sizeof(tSirMacAddr) ); + vos_mem_copy(pBuf, pStaDs->staAddr, sizeof(tSirMacAddr)); pBuf += sizeof(tSirMacAddr); msgLength += sizeof(tSirMacAddr); @@ -296,7 +297,7 @@ limTriggerSTAdeletion(tpAniSirGlobal pMac, tpDphHashNode pStaDs, tpPESession pse limCopyU16((tANI_U8*)pLen , msgLength); limPostSmeMessage(pMac, eWNI_SME_DISASSOC_REQ, (tANI_U32 *) pSmeDeauthReq); - palFreeMemory( pMac->hHdd, pSmeDeauthReq ); + vos_mem_free(pSmeDeauthReq); } /*** end limTriggerSTAdeletion() ***/ @@ -367,7 +368,7 @@ limTearDownLinkWithAp(tpAniSirGlobal pMac, tANI_U8 sessionId, tSirMacReasonCodes pStaDs->mlmStaContext.cleanupTrigger = eLIM_LINK_MONITORING_DEAUTH; /// Issue Deauth Indication to SME. - palCopyMemory( pMac->hHdd, (tANI_U8 *) &mlmDeauthInd.peerMacAddr, + vos_mem_copy((tANI_U8 *) &mlmDeauthInd.peerMacAddr, pStaDs->staAddr, sizeof(tSirMacAddr)); mlmDeauthInd.reasonCode = (tANI_U8) pStaDs->mlmStaContext.disassocReason; @@ -485,6 +486,12 @@ void limHandleHeartBeatFailure(tpAniSirGlobal pMac,tpPESession psessionEntry) } else { + PELOGW(limLog(pMac, LOGW, + FL("Heart Beat missed from AP on DFS chanel moving to passive"));) + if (psessionEntry->currentOperChannel < SIR_MAX_24G_5G_CHANNEL_RANGE){ + limCovertChannelScanType(pMac, psessionEntry->currentOperChannel, false); + pMac->lim.dfschannelList.timeStamp[psessionEntry->currentOperChannel] = 0; + } /* Connected on DFS channel so should not send the probe request * tear down the link directly */ limTearDownLinkWithAp(pMac, psessionEntry->peSessionId, eSIR_MAC_UNSPEC_FAILURE_REASON); diff --git a/CORE/MAC/src/pe/lim/limLogDump.c b/CORE/MAC/src/pe/lim/limLogDump.c index 1b7f1c83c374..17329182d0c0 100644 --- a/CORE/MAC/src/pe/lim/limLogDump.c +++ b/CORE/MAC/src/pe/lim/limLogDump.c @@ -28,7 +28,7 @@ /*============================================================================ limLogDump.c -Implements the dump commands specific to the lim module. +Implements the dump commands specific to the lim module. Copyright (c) 2007 Qualcomm Technologies, Inc. All Rights Reserved. @@ -57,6 +57,11 @@ Qualcomm Technologies Confidential and Proprietary #endif #include "smeInside.h" #include "wlan_qct_wda.h" +#ifdef WLAN_FEATURE_RELIABLE_MCAST +#include "wlan_qct_tl.h" +#include "limRMC.h" +#endif +#include "wlan_qct_wdi_dts.h" void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA); #ifdef WLANTL_DEBUG @@ -301,16 +306,16 @@ char *dumpLim( tpAniSirGlobal pMac, char *p, tANI_U32 sessionId) char *triggerBeaconGen( tpAniSirGlobal pMac, char *p ) { tSirMsgQ mesg = { (tANI_U16) SIR_LIM_BEACON_GEN_IND, (tANI_U16) 0, (tANI_U32) 0 }; - + pMac->lim.gLimSmeState = eLIM_SME_NORMAL_STATE; MTRACE(macTrace(pMac, TRACE_CODE_SME_STATE, NO_SESSION, pMac->lim.gLimSmeState)); pMac->lim.gLimSystemRole = eLIM_AP_ROLE; - + p += log_sprintf( pMac, p, "Posted SIR_LIM_BEACON_GEN_IND with result = %s\n", (eSIR_SUCCESS == limPostMsgApi( pMac, &mesg ))? "Success": "Failure" ); - + return p; } @@ -359,9 +364,10 @@ static char *sendSmeScanReq(tpAniSirGlobal pMac, char *p) pScanReq = (tSirSmeScanReq *) &scanReq; - if (palAllocateMemory(pMac->hHdd, (void **)&pScanReq, sizeof(tSirSmeScanReq)) != eHAL_STATUS_SUCCESS) + pScanReq = vos_mem_malloc(sizeof(tSirSmeScanReq)); + if (NULL == pScanReq) { - p += log_sprintf( pMac,p,"sendSmeScanReq: palAllocateMemory() failed \n"); + p += log_sprintf( pMac,p,"sendSmeScanReq: AllocateMemory() failed \n"); return p; } @@ -371,7 +377,7 @@ static char *sendSmeScanReq(tpAniSirGlobal pMac, char *p) pScanReq->bssType = eSIR_INFRASTRUCTURE_MODE; limGetMyMacAddr(pMac, pScanReq->bssId); pScanReq->numSsid = 1; - palCopyMemory(pMac->hHdd, (void *) &pScanReq->ssId[0].ssId, (void *)"Ivan", 4); + vos_mem_copy((void *) &pScanReq->ssId[0].ssId, (void *)"Ivan", 4); pScanReq->ssId[0].length = 4; pScanReq->scanType = eSIR_ACTIVE_SCAN; pScanReq->returnAfterFirstMatch = 0; @@ -430,9 +436,10 @@ static char *sendSmeDisAssocReq(tpAniSirGlobal pMac, char *p,tANI_U32 arg1 ,tANI return p; } - if (palAllocateMemory(pMac->hHdd, (void **)&pDisAssocReq, sizeof(tSirSmeDisassocReq)) != eHAL_STATUS_SUCCESS) + pDisAssocReq = vos_mem_malloc(sizeof(tSirSmeDisassocReq)); + if (NULL == pDisAssocReq) { - p += log_sprintf( pMac,p,"sendSmeDisAssocReq: palAllocateMemory() failed \n"); + p += log_sprintf( pMac,p,"sendSmeDisAssocReq: AllocateMemory() failed \n"); return p; } @@ -459,7 +466,7 @@ static char *sendSmeDisAssocReq(tpAniSirGlobal pMac, char *p,tANI_U32 arg1 ,tANI pDisAssocReq->sessionId = 0; - pDisAssocReq->transactionId = 0; + pDisAssocReq->transactionId = 0; msg.type = eWNI_SME_DISASSOC_REQ; msg.bodyptr = pDisAssocReq; @@ -481,40 +488,41 @@ static char *sendSmeStartBssReq(tpAniSirGlobal pMac, char *p,tANI_U32 arg1) tSirNwType nwType; p += log_sprintf( pMac,p, "sendSmeStartBssReq: Preparing eWNI_SME_START_BSS_REQ message\n"); - + if(arg1 > 2) { p += log_sprintf( pMac,p,"Invalid Argument1 \n"); return p; } - if (palAllocateMemory(pMac->hHdd, (void **)&pStartBssReq, sizeof(tSirSmeStartBssReq)) != eHAL_STATUS_SUCCESS) + pStartBssReq = vos_mem_malloc(sizeof(tSirSmeStartBssReq)); + if (NULL == pStartBssReq) { - p += log_sprintf( pMac,p,"sendSmeStartBssReq: palAllocateMemory() failed \n"); + p += log_sprintf( pMac,p,"sendSmeStartBssReq: AllocateMemory() failed \n"); return p; } pStartBssReq->messageType = eWNI_SME_START_BSS_REQ; pStartBssReq->length = 29; // 0x1d - - if(arg1 == 0) //BTAMP STATION + + if(arg1 == 0) //BTAMP STATION { pStartBssReq->bssType = eSIR_BTAMP_STA_MODE; pStartBssReq->ssId.length = 5; - palCopyMemory(pMac->hHdd, (void *) &pStartBssReq->ssId.ssId, (void *)"BTSTA", 5); + vos_mem_copy((void *) &pStartBssReq->ssId.ssId, (void *)"BTSTA", 5); } - else if(arg1 == 1) //BTAMP AP + else if(arg1 == 1) //BTAMP AP { pStartBssReq->bssType = eSIR_BTAMP_AP_MODE; pStartBssReq->ssId.length = 4; - palCopyMemory(pMac->hHdd, (void *) &pStartBssReq->ssId.ssId, (void *)"BTAP", 4); + vos_mem_copy((void *) &pStartBssReq->ssId.ssId, (void *)"BTAP", 4); } else //IBSS { pStartBssReq->bssType = eSIR_IBSS_MODE; pStartBssReq->ssId.length = 4; - palCopyMemory(pMac->hHdd, (void *) &pStartBssReq->ssId.ssId, (void *)"Ibss", 4); + vos_mem_copy((void *) &pStartBssReq->ssId.ssId, (void *)"Ibss", 4); } // Filling in channel ID 6 @@ -524,19 +532,19 @@ static char *sendSmeStartBssReq(tpAniSirGlobal pMac, char *p,tANI_U32 arg1) // Filling in CB mode cbMode = PHY_SINGLE_CHANNEL_CENTERED; - palCopyMemory( pMac->hHdd, pBuf, (tANI_U8 *)&cbMode, sizeof(ePhyChanBondState) ); + vos_mem_copy(pBuf, (tANI_U8 *)&cbMode, sizeof(ePhyChanBondState)); pBuf += sizeof(ePhyChanBondState); // Filling in RSN IE Length to zero - palZeroMemory( pMac->hHdd, pBuf, sizeof(tANI_U16) ); //tSirRSNie->length + vos_mem_set(pBuf, sizeof(tANI_U16), 0); //tSirRSNie->length pBuf += sizeof(tANI_U16); // Filling in NW Type nwType = eSIR_11G_NW_TYPE; - palCopyMemory( pMac->hHdd, pBuf, (tANI_U8 *)&nwType, sizeof(tSirNwType) ); + vos_mem_copy(pBuf, (tANI_U8 *)&nwType, sizeof(tSirNwType)); pBuf += sizeof(tSirNwType); - /* ---- To be filled by LIM later ---- + /* ---- To be filled by LIM later ---- pStartBssReq->operationalRateSet pStartBssReq->extendedRateSet pStartBssReq->dot11mode @@ -544,7 +552,7 @@ static char *sendSmeStartBssReq(tpAniSirGlobal pMac, char *p,tANI_U32 arg1) pStartBssReq->selfMacAddr pStartBssReq->beaconInterval pStartBssReq->sessionId = 0; - pStartBssReq->transactionId = 0; + pStartBssReq->transactionId = 0; * ------------------------------------ */ msg.type = eWNI_SME_START_BSS_REQ; @@ -573,19 +581,20 @@ static char *sendSmeStopBssReq(tpAniSirGlobal pMac, char *p, tANI_U32 sessionId) p += log_sprintf( pMac,p, "sendSmeStopBssReq: Preparing eWNI_SME_STOP_BSS_REQ message\n"); pStopBssReq = (tSirSmeStopBssReq *) &stopBssReq; - if (palAllocateMemory(pMac->hHdd, (void **)&pStopBssReq, sizeof(tSirSmeStopBssReq)) != eHAL_STATUS_SUCCESS) + pStopBssReq = vos_mem_malloc(sizeof(tSirSmeStopBssReq)); + if (NULL == pStopBssReq) { - p += log_sprintf( pMac,p,"sendSmeStopBssReq: palAllocateMemory() failed \n"); + p += log_sprintf( pMac,p,"sendSmeStopBssReq: AllocateMemory() failed \n"); return p; } pStopBssReq->messageType = eWNI_SME_STOP_BSS_REQ; msgLen += sizeof(tANI_U32); // msgType + length - + pStopBssReq->reasonCode = eSIR_SME_SUCCESS; msgLen += sizeof(tSirResultCodes); - palCopyMemory(pMac->hHdd, (void *) &pStopBssReq->bssId, (void *)psessionEntry->bssId, 6); + vos_mem_copy((void *) &pStopBssReq->bssId, (void *)psessionEntry->bssId, 6); msgLen += sizeof(tSirMacAddr); pStopBssReq->sessionId = (tANI_U8)sessionId; @@ -613,47 +622,48 @@ static char *sendSmeJoinReq(tpAniSirGlobal pMac, char *p) tANI_U16 msgLen = 307; tANI_U8 msgDump[307] = { - 0x06, 0x12, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, - 0xDE, 0xAD, 0xBA, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x64, 0x00, 0x21, 0x04, 0x02, 0x00, 0x00, - 0x00, 0x01, 0x1E, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x18, - 0x00, 0x00, 0x00, 0xA8, 0x85, 0x4F, 0x7A, 0x00, 0x06, 0x41, - 0x6E, 0x69, 0x4E, 0x65, 0x74, 0x01, 0x04, 0x82, 0x84, 0x8B, - 0x96, 0x03, 0x01, 0x06, 0x07, 0x06, 0x55, 0x53, 0x49, 0x01, - 0x0E, 0x1E, 0x2A, 0x01, 0x00, 0x32, 0x08, 0x0C, 0x12, 0x18, - 0x24, 0x30, 0x48, 0x60, 0x6C, 0x2D, 0x1A, 0xEE, 0x11, 0x03, - 0xFF, 0xFF, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x3D, 0x16, 0x06, 0x07, 0x11, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDD, 0x18, 0x00, - 0x50, 0xF2, 0x02, 0x01, 0x01, 0x01, 0x00, 0x03, 0xA4, 0x00, - 0x00, 0x27, 0xA4, 0x00, 0x00, 0x42, 0x43, 0x5E, 0x00, 0x62, - 0x32, 0x2F, 0x00, 0xDD, 0x14, 0x00, 0x0A, 0xF5, 0x00, 0x03, - 0x01, 0x03, 0x05, 0x0A, 0x02, 0x80, 0xC0, 0x12, 0x06, 0xFF, - 0xFF, 0xFF, 0xFF, 0xB6, 0x0D, 0xDD, 0x6E, 0x00, 0x50, 0xF2, - 0x04, 0x10, 0x4A, 0x00, 0x01, 0x10, 0x10, 0x44, 0x00, 0x01, - 0x01, 0x10, 0x3B, 0x00, 0x01, 0x03, 0x10, 0x47, 0x00, 0x10, - 0xDB, 0xC6, 0x77, 0x28, 0xB9, 0xF3, 0xD8, 0x58, 0x86, 0xFF, - 0xFC, 0x6B, 0xB6, 0xB9, 0x27, 0x79, 0x10, 0x21, 0x00, 0x08, - 0x51, 0x75, 0x61, 0x6C, 0x63, 0x6F, 0x6D, 0x6D, 0x10, 0x23, + 0x06, 0x12, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, + 0xDE, 0xAD, 0xBA, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x64, 0x00, 0x21, 0x04, 0x02, 0x00, 0x00, + 0x00, 0x01, 0x1E, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x18, + 0x00, 0x00, 0x00, 0xA8, 0x85, 0x4F, 0x7A, 0x00, 0x06, 0x41, + 0x6E, 0x69, 0x4E, 0x65, 0x74, 0x01, 0x04, 0x82, 0x84, 0x8B, + 0x96, 0x03, 0x01, 0x06, 0x07, 0x06, 0x55, 0x53, 0x49, 0x01, + 0x0E, 0x1E, 0x2A, 0x01, 0x00, 0x32, 0x08, 0x0C, 0x12, 0x18, + 0x24, 0x30, 0x48, 0x60, 0x6C, 0x2D, 0x1A, 0xEE, 0x11, 0x03, + 0xFF, 0xFF, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x3D, 0x16, 0x06, 0x07, 0x11, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDD, 0x18, 0x00, + 0x50, 0xF2, 0x02, 0x01, 0x01, 0x01, 0x00, 0x03, 0xA4, 0x00, + 0x00, 0x27, 0xA4, 0x00, 0x00, 0x42, 0x43, 0x5E, 0x00, 0x62, + 0x32, 0x2F, 0x00, 0xDD, 0x14, 0x00, 0x0A, 0xF5, 0x00, 0x03, + 0x01, 0x03, 0x05, 0x0A, 0x02, 0x80, 0xC0, 0x12, 0x06, 0xFF, + 0xFF, 0xFF, 0xFF, 0xB6, 0x0D, 0xDD, 0x6E, 0x00, 0x50, 0xF2, + 0x04, 0x10, 0x4A, 0x00, 0x01, 0x10, 0x10, 0x44, 0x00, 0x01, + 0x01, 0x10, 0x3B, 0x00, 0x01, 0x03, 0x10, 0x47, 0x00, 0x10, + 0xDB, 0xC6, 0x77, 0x28, 0xB9, 0xF3, 0xD8, 0x58, 0x86, 0xFF, + 0xFC, 0x6B, 0xB6, 0xB9, 0x27, 0x79, 0x10, 0x21, 0x00, 0x08, + 0x51, 0x75, 0x61, 0x6C, 0x63, 0x6F, 0x6D, 0x6D, 0x10, 0x23, 0x00, 0x07, 0x57, 0x46, 0x52, 0x34, 0x30, 0x33, 0x31, 0x10, - 0x24, 0x00, 0x06, 0x4D, 0x4E, 0x31, 0x32, 0x33, 0x34, 0x10, - 0x42, 0x00, 0x06, 0x53, 0x4E, 0x31, 0x32, 0x33, 0x34, 0x10, - 0x54, 0x00, 0x08, 0x00, 0x06, 0x00, 0x50, 0xF2, 0x04, 0x00, - 0x01, 0x10, 0x11, 0x00, 0x06, 0x31, 0x31, 0x6E, 0x2D, 0x41, + 0x24, 0x00, 0x06, 0x4D, 0x4E, 0x31, 0x32, 0x33, 0x34, 0x10, + 0x42, 0x00, 0x06, 0x53, 0x4E, 0x31, 0x32, 0x33, 0x34, 0x10, + 0x54, 0x00, 0x08, 0x00, 0x06, 0x00, 0x50, 0xF2, 0x04, 0x00, + 0x01, 0x10, 0x11, 0x00, 0x06, 0x31, 0x31, 0x6E, 0x2D, 0x41, 0x50, 0x10, 0x08, 0x00, 0x02, 0x01, 0x8E }; - if (palAllocateMemory(pMac->hHdd, (void **)&pJoinReq, msgLen) != eHAL_STATUS_SUCCESS) + pJoinReq = vos_mem_malloc(msgLen); + if (NULL == pJoinReq) { - p += log_sprintf( pMac,p,"sendSmeJoinReq: palAllocateMemory() failed \n"); + p += log_sprintf( pMac,p,"sendSmeJoinReq: AllocateMemory() failed \n"); return p; } pBuf = (unsigned char *)pJoinReq; - palCopyMemory( pMac->hHdd, pBuf, (tANI_U8 *)msgDump, msgLen ); + vos_mem_copy(pBuf, (tANI_U8 *)msgDump, msgLen); msg.type = eWNI_SME_JOIN_REQ; msg.bodyptr = pJoinReq; @@ -666,7 +676,7 @@ static char *sendSmeJoinReq(tpAniSirGlobal pMac, char *p) static char *printSessionInfo(tpAniSirGlobal pMac, char *p) { - tpPESession psessionEntry = &pMac->lim.gpSession[0]; + tpPESession psessionEntry = &pMac->lim.gpSession[0]; tANI_U8 i; p += log_sprintf( pMac, p, "Dump PE Session \n"); @@ -675,16 +685,16 @@ static char *printSessionInfo(tpAniSirGlobal pMac, char *p) { if( pMac->lim.gpSession[i].valid ) { - psessionEntry = &pMac->lim.gpSession[i]; + psessionEntry = &pMac->lim.gpSession[i]; p += log_sprintf( pMac,p, "*****************************************\n"); - p += log_sprintf( pMac,p, " PE Session [%d] \n", i); + p += log_sprintf( pMac,p, " PE Session [%d] \n", i); p += log_sprintf( pMac,p, "available: %d \n", psessionEntry->available); - p += log_sprintf( pMac,p, "peSessionId: %d, smeSessionId: %d, transactionId: %d \n", + p += log_sprintf( pMac,p, "peSessionId: %d, smeSessionId: %d, transactionId: %d \n", psessionEntry->peSessionId, psessionEntry->smeSessionId, psessionEntry->smeSessionId); - p += log_sprintf( pMac,p, "bssId: %02X:%02X:%02X:%02X:%02X:%02X \n", + p += log_sprintf( pMac,p, "bssId: %02X:%02X:%02X:%02X:%02X:%02X \n", psessionEntry->bssId[0], psessionEntry->bssId[1], psessionEntry->bssId[2], psessionEntry->bssId[3], psessionEntry->bssId[4], psessionEntry->bssId[5]); - p += log_sprintf( pMac,p, "selfMacAddr: %02X:%02X:%02X:%02X:%02X:%02X \n", + p += log_sprintf( pMac,p, "selfMacAddr: %02X:%02X:%02X:%02X:%02X:%02X \n", psessionEntry->selfMacAddr[0], psessionEntry->selfMacAddr[1], psessionEntry->selfMacAddr[2], psessionEntry->selfMacAddr[3], psessionEntry->selfMacAddr[4], psessionEntry->selfMacAddr[5]); p += log_sprintf( pMac,p, "bssIdx: %d \n", psessionEntry->bssIdx); @@ -706,7 +716,7 @@ static char *printSessionInfo(tpAniSirGlobal pMac, char *p) p += log_sprintf( pMac,p, "limCurrentBssPropCap: %d \n", psessionEntry->limCurrentBssPropCap); p += log_sprintf( pMac,p, "limSentCapsChangeNtf: %d \n", psessionEntry->limSentCapsChangeNtf); p += log_sprintf( pMac,p, "LimAID: %d \n", psessionEntry->limAID); - p += log_sprintf( pMac,p, "ReassocbssId: %02X:%02X:%02X:%02X:%02X:%02X \n", + p += log_sprintf( pMac,p, "ReassocbssId: %02X:%02X:%02X:%02X:%02X:%02X \n", psessionEntry->limReAssocbssId[0], psessionEntry->limReAssocbssId[1], psessionEntry->limReAssocbssId[2], psessionEntry->limReAssocbssId[3], psessionEntry->limReAssocbssId[4], psessionEntry->limReAssocbssId[5]); p += log_sprintf( pMac,p, "limReassocChannelId: %d \n", psessionEntry->limReassocChannelId); @@ -732,7 +742,7 @@ static char * limDumpEdcaParams(tpAniSirGlobal pMac, char *p) { tANI_U8 i = 0; - tpPESession psessionEntry = &pMac->lim.gpSession[0]; //TBD-RAJESH HOW TO GET sessionEntry????? + tpPESession psessionEntry = &pMac->lim.gpSession[0]; //TBD-RAJESH HOW TO GET sessionEntry????? p += log_sprintf( pMac,p, "EDCA parameter set count = %d\n", psessionEntry->gLimEdcaParamSetCount); p += log_sprintf( pMac,p, "Broadcast parameters\n"); p += log_sprintf( pMac,p, "AC\tACI\tACM\tAIFSN\tCWMax\tCWMin\tTxopLimit\t\n"); @@ -848,11 +858,11 @@ static char* limDumpDphTableSummary(tpAniSirGlobal pMac,char *p) pMac->lim.gpSession[j].dph.dphHashTable.pDphNodeArray[i].staAddr[4], pMac->lim.gpSession[j].dph.dphHashTable.pDphNodeArray[i].staAddr[5]); } - } - } + } + } } return p; -} +} // add the specified tspec to the tspec list static char* limDumpTsecTable( tpAniSirGlobal pMac, char* p) @@ -1108,7 +1118,7 @@ dump_lim_del_sta( tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2, tANI_U32 ar p += log_sprintf( pMac,p, "Could not find station with assocId = %d\n", arg1); return p; } - + if (pStaDs->mlmStaContext.mlmState != eLIM_MLM_LINK_ESTABLISHED_STATE) { p += log_sprintf( pMac,p, "received Disassoc frame from peer that is in state %X \n", pStaDs->mlmStaContext.mlmState); @@ -1119,8 +1129,8 @@ dump_lim_del_sta( tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2, tANI_U32 ar pStaDs->mlmStaContext.disassocReason = (tSirMacReasonCodes) reasonCode; // Issue Disassoc Indication to SME. - palCopyMemory( pMac->hHdd, (tANI_U8 *) &mlmDisassocInd.peerMacAddr, - (tANI_U8 *) pStaDs->staAddr, sizeof(tSirMacAddr)); + vos_mem_copy((tANI_U8 *) &mlmDisassocInd.peerMacAddr, + (tANI_U8 *) pStaDs->staAddr, sizeof(tSirMacAddr)); mlmDisassocInd.reasonCode = reasonCode; mlmDisassocInd.disassocTrigger = eLIM_PEER_ENTITY_DISASSOC; @@ -1209,15 +1219,15 @@ dump_lim_send_SM_Power_Mode( tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2, state = (tSirMacHTMIMOPowerSaveState) arg1; - palAllocateMemory(pMac->hHdd, (void **)&pMBMsg, WNI_CFG_MB_HDR_LEN + sizeof(tSirMacHTMIMOPowerSaveState)); - if(NULL == pMBMsg) + pMBMsg = vos_mem_malloc(WNI_CFG_MB_HDR_LEN + sizeof(tSirMacHTMIMOPowerSaveState)); + if (NULL == pMBMsg) { p += log_sprintf( pMac,p, "pMBMsg is NULL\n"); return p; } pMBMsg->type = eWNI_PMC_SMPS_STATE_IND; pMBMsg->msgLen = (tANI_U16)(WNI_CFG_MB_HDR_LEN + sizeof(tSirMacHTMIMOPowerSaveState)); - palCopyMemory(pMac->hHdd, pMBMsg->data, &state, sizeof(tSirMacHTMIMOPowerSaveState)); + vos_mem_copy(pMBMsg->data, &state, sizeof(tSirMacHTMIMOPowerSaveState)); msg.type = eWNI_PMC_SMPS_STATE_IND; msg.bodyptr = pMBMsg; @@ -1225,8 +1235,8 @@ dump_lim_send_SM_Power_Mode( tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2, if (limPostMsgApi(pMac, &msg) != TX_SUCCESS) { - p += log_sprintf( pMac,p, "Updating the SMPower Request has failed \n"); - palFreeMemory(pMac->hHdd, pMBMsg); + p += log_sprintf( pMac,p, "Updating the SMPower Request has failed \n"); + vos_mem_free(pMBMsg); } else { @@ -1377,17 +1387,17 @@ dump_lim_AddBA_DeclineStat( tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2, t if (arg1 > 1) { log_sprintf( pMac,p, "%s:Invalid Value is entered for Enable/Disable \n", __func__ ); arg1 &= 1; - } - + } + val = pMac->lim.gAddBA_Declined; - + if (arg2 > 7) { log_sprintf( pMac,p, "%s:Invalid Value is entered for Tid \n", __func__ ); Tid = arg2 & 0x7; } else Tid = arg2; - - + + if ( Enable) val |= Enable << Tid; else @@ -1435,7 +1445,7 @@ static char* dump_lim_update_cb_Mode(tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U3 psessionEntry->htRecommendedTxWidthSet = psessionEntry->htSupportedChannelWidthSet; psessionEntry->htSecondaryChannelOffset = arg2; - if(eSIR_SUCCESS != cfgSetInt(pMac, WNI_CFG_CHANNEL_BONDING_MODE, + if(eSIR_SUCCESS != cfgSetInt(pMac, WNI_CFG_CHANNEL_BONDING_MODE, arg2 ? WNI_CFG_CHANNEL_BONDING_MODE_ENABLE : WNI_CFG_CHANNEL_BONDING_MODE_DISABLE)) p += log_sprintf(pMac,p, "cfgSetInt failed for WNI_CFG_CHANNEL_BONDING_MODE\n"); @@ -1455,7 +1465,7 @@ static char* dump_lim_abort_scan(tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 ar (void) arg1; (void) arg2; (void) arg3; (void) arg4; //csrScanAbortMacScan(pMac); return p; - + } static char* dump_lim_start_stop_bg_scan(tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3, tANI_U32 arg4, char *p) @@ -1489,21 +1499,20 @@ static char* dump_lim_start_stop_bg_scan(tpAniSirGlobal pMac, tANI_U32 arg1, tAN pMac->lim.gLimForceBackgroundScanDisable = true; } return p; - + } -static char* +static char* dump_lim_get_pe_statistics(tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3, tANI_U32 arg4, char *p) { - eHalStatus status = eHAL_STATUS_SUCCESS; tpAniGetPEStatsReq pReq; tANI_U32 statsMask; (void) arg2; (void) arg3; (void) arg4; - + switch(arg1) - { + { case 1: statsMask = PE_SUMMARY_STATS_INFO; break; @@ -1523,24 +1532,24 @@ dump_lim_get_pe_statistics(tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2, tA return p; } - - if( eHAL_STATUS_SUCCESS != (status = palAllocateMemory (pMac->hHdd, (void**) &pReq, sizeof(tAniGetPEStatsReq)))) + pReq = vos_mem_malloc(sizeof(tAniGetPEStatsReq)); + if (NULL == pReq) { p += log_sprintf( pMac,p, "Error: Unable to allocate memory.\n"); return p; } - palZeroMemory( pMac, pReq, sizeof(*pReq)); - + vos_mem_set(pReq, sizeof(*pReq), 0); + pReq->msgType = eWNI_SME_GET_STATISTICS_REQ; pReq->statsMask = statsMask; pReq->staId = (tANI_U16)arg2; pMac->lim.gLimRspReqd = eANI_BOOLEAN_TRUE; limPostSmeMessage(pMac, eWNI_SME_GET_STATISTICS_REQ, (tANI_U32 *) pReq); - + return p; - + } extern char* setLOGLevel( tpAniSirGlobal pMac, char *p, tANI_U32 module, tANI_U32 level ); @@ -1578,7 +1587,7 @@ static char * dump_lim_send_join_req( tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3, tANI_U32 arg4, char *p) { (void) arg1; (void) arg2; (void) arg3; (void) arg4; - p = sendSmeJoinReq(pMac, p); + p = sendSmeJoinReq(pMac, p); return p; } @@ -1707,7 +1716,7 @@ static char *finishScan(tpAniSirGlobal pMac, char *p) msg.type = SIR_LIM_MIN_CHANNEL_TIMEOUT; msg.bodyval = 0; msg.bodyptr = NULL; - + limPostMsgApi(pMac, &msg); return p; } @@ -1793,10 +1802,10 @@ dump_lim_send_rrm_action( tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2, tAN /* send two reports with incapable bit set */ pRRMReport[0].type = 6; pRRMReport[1].type = 7; - limSendRadioMeasureReportActionFrame( pMac, 1, 2, &pRRMReport[0], psessionEntry->bssId, psessionEntry ); - break; + limSendRadioMeasureReportActionFrame( pMac, 1, 2, &pRRMReport[0], psessionEntry->bssId, psessionEntry ); + break; case 1: - for ( i = 0 ; i < num ; i++ ) + for ( i = 0 ; i < num ; i++ ) { pRRMReport[i].type = 5; if ( i == 3 ) @@ -1813,7 +1822,7 @@ dump_lim_send_rrm_action( tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2, tAN pRRMReport[i].report.beaconReport.rcpi = 40; pRRMReport[i].report.beaconReport.bssid[0] = 0x00; - pRRMReport[i].report.beaconReport.bssid[1] = 0xAA; + pRRMReport[i].report.beaconReport.bssid[1] = 0xAA; pRRMReport[i].report.beaconReport.bssid[2] = 0xBB; pRRMReport[i].report.beaconReport.bssid[3] = 0xCC; pRRMReport[i].report.beaconReport.bssid[4] = 0x00; @@ -1833,7 +1842,7 @@ dump_lim_send_rrm_action( tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2, tAN } } - limSendRadioMeasureReportActionFrame( pMac, 1, num, &pRRMReport[0], psessionEntry->bssId, psessionEntry ); + limSendRadioMeasureReportActionFrame( pMac, 1, num, &pRRMReport[0], psessionEntry->bssId, psessionEntry ); break; case 2: //send Neighbor request. @@ -1842,7 +1851,7 @@ dump_lim_send_rrm_action( tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2, tAN neighbor.dialogToken = 2; neighbor.ssid_present = (tANI_U8) arg4; neighbor.ssid.length = 5; - palCopyMemory( pMac->hHdd, neighbor.ssid.ssId, "abcde", 5); + vos_mem_copy(neighbor.ssid.ssId, "abcde", 5); limSendNeighborReportRequestFrame( pMac, &neighbor, psessionEntry->bssId, psessionEntry ); @@ -1859,7 +1868,7 @@ dump_lim_send_rrm_action( tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2, tAN link.txAntenna = 1; link.rcpi = 9; link.rsni = 3; - limSendLinkReportActionFrame( pMac, &link, psessionEntry->bssId, psessionEntry ); + limSendLinkReportActionFrame( pMac, &link, psessionEntry->bssId, psessionEntry ); } break; default: @@ -1868,7 +1877,7 @@ dump_lim_send_rrm_action( tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2, tAN done: vos_mem_free(pRRMReport); - return p; + return p; } static char * @@ -1889,17 +1898,17 @@ dump_lim_unpack_rrm_action( tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2, t tANI_U8 pBody[][100] = { { /*Beacon Request 0*/ - 0x05, 0x00, 0x01, 0x00, 0x00, + 0x05, 0x00, 0x01, 0x00, 0x00, //Measurement request IE - 0x26, 0x25, 0x01, 0x00, + 0x26, 0x25, 0x01, 0x00, //Beacon request type 0x05, //Beacon request starts here 0x0C, 0x01, 0x30, 0x00, 0x14, 0x00, 0x01, //BSSID - 0xFF, 0xFF, 0xFF, 0xFF, 0xff, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xff, 0xFF, //SSID - 0x00, 0x05, 0x57, 0x69, 0x46, 0x69, 0x31, + 0x00, 0x05, 0x57, 0x69, 0x46, 0x69, 0x31, //Reporting Condition 0x01, 0x02, 0x00, 0x00, //Reporting Detail @@ -1909,15 +1918,15 @@ dump_lim_unpack_rrm_action( tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2, t }, { /*Beacon Request 1*/ - 0x05, 0x00, 0x01, 0x00, 0x00, + 0x05, 0x00, 0x01, 0x00, 0x00, //Measurement request IE - 0x26, 0x28, 0x01, 0x00, + 0x26, 0x28, 0x01, 0x00, //Beacon request type 0x05, //Beacon request starts here 0x0C, 0xFF, 0x30, 0x00, 0x14, 0x00, 0x01, //BSSID - 0xFF, 0xFF, 0xFF, 0xFF, 0xff, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xff, 0xFF, //SSID /* 0x00, 0x08, 0x35, 0x36, 0x37, 0x38, 0x39, 0x40, 0x41, 0x42, */ //Reporting Condition @@ -1927,23 +1936,23 @@ dump_lim_unpack_rrm_action( tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2, t //Request IE 0x0A, 0x05, 0x00, 0x30, 0x46, 0x36, 0xDD, //AP channel report - 0x33, 0x03, 0x0C, 0x01, 0x06, - 0x33, 0x03, 0x0C, 0x24, 0x30, + 0x33, 0x03, 0x0C, 0x01, 0x06, + 0x33, 0x03, 0x0C, 0x24, 0x30, }, { /*Beacon Request 2*/ - 0x05, 0x00, 0x01, 0x00, 0x00, + 0x05, 0x00, 0x01, 0x00, 0x00, //Measurement request IE - 0x26, 0x1E, 0x01, 0x00, + 0x26, 0x1E, 0x01, 0x00, //Beacon request type 0x05, //Beacon request starts here 0x0C, 0x00, 0x30, 0x00, 0x14, 0x00, 0x02, //BSSID - 0xFF, 0xFF, 0xFF, 0xFF, 0xff, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xff, 0xFF, //SSID - 0x00, 0x05, 0x57, 0x69, 0x46, 0x69, 0x31, - //0x00, 0x08, 0x41, 0x53, 0x54, 0x2D, 0x57, 0x41, 0x50, 0x49, + 0x00, 0x05, 0x57, 0x69, 0x46, 0x69, 0x31, + //0x00, 0x08, 0x41, 0x53, 0x54, 0x2D, 0x57, 0x41, 0x50, 0x49, //Reporting Condition 0x01, 0x02, 0x00, 0x00, //Reporting Detail @@ -1952,17 +1961,17 @@ dump_lim_unpack_rrm_action( tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2, t }, { /*Beacon Request 3*/ - 0x05, 0x00, 0x01, 0x00, 0x00, + 0x05, 0x00, 0x01, 0x00, 0x00, //Measurement request IE - 0x26, 0x25, 0x01, 0x00, + 0x26, 0x25, 0x01, 0x00, //Beacon request type 0x05, //Beacon request starts here 0x0C, 0x01, 0x30, 0x00, 0x69, 0x00, 0x00, //BSSID - 0xFF, 0xFF, 0xFF, 0xFF, 0xff, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xff, 0xFF, //SSID - 0x00, 0x05, 0x57, 0x69, 0x46, 0x69, 0x31, + 0x00, 0x05, 0x57, 0x69, 0x46, 0x69, 0x31, //Reporting Condition 0x01, 0x02, 0x00, 0x00, //Reporting Detail @@ -1972,15 +1981,15 @@ dump_lim_unpack_rrm_action( tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2, t }, { /*Neighbor report*/ - 0x05, 0x05, 0x01, + 0x05, 0x05, 0x01, //Measurement request IE - 0x34, 0x17, + 0x34, 0x17, //BSSID - 0xFF, 0xFF, 0xFF, 0xFF, 0xff, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xff, 0xFF, //BSSID INFOo 0xED, 0x01, 0x00, 0x00, //Reg class, channel, Phy type - 0x20, 0x01, 0x02, + 0x20, 0x01, 0x02, //TSF Info 0x01, 0x04, 0x02, 0x00, 0x60, 0x00, //Condensed country @@ -1992,7 +2001,7 @@ dump_lim_unpack_rrm_action( tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2, t //Txpower used 0x00, //Max Tx Power - 0x00 + 0x00 } }; @@ -2049,7 +2058,7 @@ dump_lim_unpack_rrm_action( tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2, t case 6: { tPowerdBm localConstraint = (tPowerdBm) arg3; - tPowerdBm maxTxPower = cfgGetRegulatoryMaxTransmitPower( pMac, psessionEntry->currentOperChannel ); + tPowerdBm maxTxPower = cfgGetRegulatoryMaxTransmitPower( pMac, psessionEntry->currentOperChannel ); maxTxPower = VOS_MIN( maxTxPower, maxTxPower-localConstraint ); if( maxTxPower != psessionEntry->maxTxPower ) { @@ -2062,14 +2071,14 @@ dump_lim_unpack_rrm_action( tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2, t p += log_sprintf( pMac, p, "Invalid option" ); break; } - return p; + return p; } #endif #ifdef WLAN_FEATURE_NEIGHBOR_ROAMING #ifdef RSSI_HACK -/* This dump command is needed to set the RSSI values in TL while testing handoff. Handoff code was tested - * using this dump command. Whatever the value gives as the first parameter will be considered as the average +/* This dump command is needed to set the RSSI values in TL while testing handoff. Handoff code was tested + * using this dump command. Whatever the value gives as the first parameter will be considered as the average * RSSI by TL and invokes corresponding callback registered by the clients */ extern int dumpCmdRSSI; static char * @@ -2113,9 +2122,9 @@ dump_lim_ft_event( tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2, tANI_U32 a auth_req_len = sizeof(tSirFTPreAuthReq); pftPreAuthReq = vos_mem_malloc(auth_req_len); - if (pftPreAuthReq == NULL) + if (NULL == pftPreAuthReq) { - p += log_sprintf( pMac,p,"Pre auth dump: palAllocateMemory() failed \n"); + p += log_sprintf( pMac,p,"Pre auth dump: AllocateMemory() failed \n"); return p; } pftPreAuthReq->pbssDescription = vos_mem_malloc(sizeof(Profile.pBssDesc->length)+ @@ -2124,37 +2133,37 @@ dump_lim_ft_event( tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2, tANI_U32 a pftPreAuthReq->messageType = eWNI_SME_FT_PRE_AUTH_REQ; pftPreAuthReq->length = auth_req_len + sizeof(Profile.pBssDesc->length) + Profile.pBssDesc->length; - pftPreAuthReq->preAuthchannelNum = 6; + pftPreAuthReq->preAuthchannelNum = 6; - palCopyMemory(pMac->hHdd, (void *) &pftPreAuthReq->currbssId, - (void *)psessionEntry->bssId, 6); - palCopyMemory(pMac->hHdd, (void *) &pftPreAuthReq->preAuthbssId, - (void *)macAddr, 6); + vos_mem_copy((void *) &pftPreAuthReq->currbssId, + (void *)psessionEntry->bssId, 6); + vos_mem_copy((void *) &pftPreAuthReq->preAuthbssId, + (void *)macAddr, 6); pftPreAuthReq->ft_ies_length = (tANI_U16)pMac->ft.ftSmeContext.auth_ft_ies_length; // Also setup the mac address in sme context. - palCopyMemory(pMac->hHdd, pMac->ft.ftSmeContext.preAuthbssId, macAddr, 6); + vos_mem_copy(pMac->ft.ftSmeContext.preAuthbssId, macAddr, 6); - vos_mem_copy(pftPreAuthReq->ft_ies, pMac->ft.ftSmeContext.auth_ft_ies, + vos_mem_copy(pftPreAuthReq->ft_ies, pMac->ft.ftSmeContext.auth_ft_ies, pMac->ft.ftSmeContext.auth_ft_ies_length); vos_mem_copy(Profile.pBssDesc->bssId, macAddr, 6); p += log_sprintf( pMac,p, "\n ----- LIM Debug Information ----- \n"); - p += log_sprintf( pMac, p, "%s: length = %d\n", __func__, + p += log_sprintf( pMac, p, "%s: length = %d\n", __func__, (int)pMac->ft.ftSmeContext.auth_ft_ies_length); - p += log_sprintf( pMac, p, "%s: length = %02x\n", __func__, + p += log_sprintf( pMac, p, "%s: length = %02x\n", __func__, (int)pMac->ft.ftSmeContext.auth_ft_ies[0]); - p += log_sprintf( pMac, p, "%s: Auth Req %02x %02x %02x\n", + p += log_sprintf( pMac, p, "%s: Auth Req %02x %02x %02x\n", __func__, pftPreAuthReq->ft_ies[0], pftPreAuthReq->ft_ies[1], pftPreAuthReq->ft_ies[2]); - p += log_sprintf( pMac, p, "%s: Session %02x %02x %02x\n", __func__, + p += log_sprintf( pMac, p, "%s: Session %02x %02x %02x\n", __func__, psessionEntry->bssId[0], psessionEntry->bssId[1], psessionEntry->bssId[2]); - p += log_sprintf( pMac, p, "%s: Session %02x %02x %02x %p\n", __func__, + p += log_sprintf( pMac, p, "%s: Session %02x %02x %02x %p\n", __func__, pftPreAuthReq->currbssId[0], - pftPreAuthReq->currbssId[1], + pftPreAuthReq->currbssId[1], pftPreAuthReq->currbssId[2], pftPreAuthReq); Profile.pBssDesc->channelId = (tANI_U8)arg3; @@ -2173,7 +2182,7 @@ dump_lim_ft_event( tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2, tANI_U32 a default: break; } - return p; + return p; } #endif static char * @@ -2201,7 +2210,7 @@ dump_lim_channel_switch_announcement( tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U psessionEntry->gLimChannelSwitch.primaryChannel = nNewChannel; schSetFixedBeaconFields(pMac, psessionEntry); - limSendBeaconInd(pMac, psessionEntry); + limSendBeaconInd(pMac, psessionEntry); return p; } @@ -2220,16 +2229,16 @@ dump_lim_vht_opmode_notification(tpAniSirGlobal pMac, tANI_U32 arg1,tANI_U32 arg p,"Session does not exist usage: 366 <0> sessionid channel \n"); return p; } - + limSendVHTOpmodeNotificationFrame(pMac, peer, nMode,psessionEntry); - + psessionEntry->gLimOperatingMode.present = 1; psessionEntry->gLimOperatingMode.chanWidth = nMode; psessionEntry->gLimOperatingMode.rxNSS = 0; psessionEntry->gLimOperatingMode.rxNSSType = 0; schSetFixedBeaconFields(pMac, psessionEntry); - limSendBeaconInd(pMac, psessionEntry); + limSendBeaconInd(pMac, psessionEntry); return p; } @@ -2260,9 +2269,9 @@ dump_lim_vht_channel_switch_notification(tpAniSirGlobal pMac, tANI_U32 arg1,tANI psessionEntry->gLimWiderBWChannelSwitch.newChanWidth = nChanWidth; psessionEntry->gLimWiderBWChannelSwitch.newCenterChanFreq0 = limGetCenterChannel(pMac,nNewChannel,(ncbMode+1),nChanWidth); psessionEntry->gLimWiderBWChannelSwitch.newCenterChanFreq1 = 0; - + schSetFixedBeaconFields(pMac, psessionEntry); - limSendBeaconInd(pMac, psessionEntry); + limSendBeaconInd(pMac, psessionEntry); return p; } @@ -2286,7 +2295,7 @@ dump_lim_cancel_channel_switch_announcement( tpAniSirGlobal pMac, tANI_U32 arg1, psessionEntry->gLimChannelSwitch.primaryChannel = 0; schSetFixedBeaconFields(pMac, psessionEntry); - limSendBeaconInd(pMac, psessionEntry); + limSendBeaconInd(pMac, psessionEntry); return p; } @@ -2296,9 +2305,9 @@ static char * dump_lim_mcc_policy_maker(tpAniSirGlobal pMac, tANI_U32 arg1,tANI_U32 arg2,tANI_U32 arg3, tANI_U32 arg4, char *p) { VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_FATAL, "dump_lim_mcc_policy_maker arg = %d",arg1); - + if(arg1 == 0) //Disable feature completely - { + { WDA_TrafficStatsTimerActivate(FALSE); if (ccmCfgSetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, FALSE, NULL, eANI_BOOLEAN_FALSE)==eHAL_STATUS_FAILURE) @@ -2307,15 +2316,15 @@ dump_lim_mcc_policy_maker(tpAniSirGlobal pMac, tANI_U32 arg1,tANI_U32 arg2,tANI_ } } else if(arg1 == 1) //Enable feature - { + { if (ccmCfgSetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, TRUE, NULL, eANI_BOOLEAN_FALSE)==eHAL_STATUS_FAILURE) { limLog( pMac, LOGE, FL("Could not set WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED")); - } + } } else if(arg1 == 2) //Enable feature and activate periodic timer - { + { if (ccmCfgSetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, TRUE, NULL, eANI_BOOLEAN_FALSE)==eHAL_STATUS_FAILURE) { @@ -2382,6 +2391,116 @@ dump_lim_get_pkts_rcvd_per_rssi_values( tpAniSirGlobal pMac, tANI_U32 arg1, tANI } #endif +#ifdef WLAN_FEATURE_RELIABLE_MCAST + +static char * +dump_lim_enable_reliable_mcast_data_path +( + tpAniSirGlobal pMac, + tANI_U32 arg1, + tANI_U32 arg2, + tANI_U32 arg3, + tANI_U32 arg4, + char *p +) +{ + v_MACADDR_t reliableMcastTransmitterAddr; + v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL); + + reliableMcastTransmitterAddr.bytes[0] = (tANI_U8)((arg1 & 0xFF000000) >> 24); + reliableMcastTransmitterAddr.bytes[1] = (tANI_U8)((arg1 & 0x00FF0000) >> 16); + reliableMcastTransmitterAddr.bytes[2] = (tANI_U8)((arg1 & 0x0000FF00) >> 8); + reliableMcastTransmitterAddr.bytes[3] = (tANI_U8)((arg1 & 0x000000FF)); + reliableMcastTransmitterAddr.bytes[4] = (tANI_U8)((arg2 & 0xFF000000) >> 24); + reliableMcastTransmitterAddr.bytes[5] = (tANI_U8)((arg2 & 0x00FF0000) >> 16); + + limLog(pMac, LOGE, + FL("Enable RMCAST data path for MCAST transmitter:" MAC_ADDRESS_STR), + MAC_ADDR_ARRAY( reliableMcastTransmitterAddr.bytes)); + + /*Input format is in MAC address fromat for example + iwpriv wlan0 dump 0xaabbccdd 0xeeff0000 translates into enable RMCAST for + MAC address 0xaa:0xbb:0xcc:0xdd:0xee:0xff*/ + + /*Enable TL data path*/ + WLANTL_EnableReliableMcast( pVosContext, &reliableMcastTransmitterAddr ); + + return p; +} + +static char * +dump_lim_disable_reliable_mcast_data_path +( + tpAniSirGlobal pMac, + tANI_U32 arg1, + tANI_U32 arg2, + tANI_U32 arg3, + tANI_U32 arg4, + char *p +) +{ + v_MACADDR_t reliableMcastTransmitterAddr; + v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL); + + reliableMcastTransmitterAddr.bytes[0] = (tANI_U8)((arg1 & 0xFF000000) >> 24); + reliableMcastTransmitterAddr.bytes[1] = (tANI_U8)((arg1 & 0x00FF0000) >> 16); + reliableMcastTransmitterAddr.bytes[2] = (tANI_U8)((arg1 & 0x0000FF00) >> 8); + reliableMcastTransmitterAddr.bytes[3] = (tANI_U8)((arg1 & 0x000000FF)); + reliableMcastTransmitterAddr.bytes[4] = (tANI_U8)((arg2 & 0xFF000000) >> 24); + reliableMcastTransmitterAddr.bytes[5] = (tANI_U8)((arg2 & 0x00FF0000) >> 16); + + + limLog(pMac, LOGE, + FL("Disable RMCAST data path for MCAST transmitter:" MAC_ADDRESS_STR), + MAC_ADDR_ARRAY( reliableMcastTransmitterAddr.bytes)); + + /*Input format is in MAC address fromat for example + iwpriv wlan0 dump 0xaabbccdd 0xeeff0000 translates into enable RMCAST for + MAC address 0xaa:0xbb:0xcc:0xdd:0xee:0xff*/ + + /*Disable TL data path*/ + WLANTL_DisableReliableMcast( pVosContext, &reliableMcastTransmitterAddr ); + + return p; +} + +static char * +dump_lim_rmc_status(tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2, + tANI_U32 arg3, tANI_U32 arg4, char *p) +{ + limRmcDumpStatus(pMac); + return p; +} + +static char * +dump_set_mcast_dup_detect(tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2, + tANI_U32 arg3, tANI_U32 arg4, char *p) +{ + v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL); + v_U8_t enable; + + enable = (tANI_U8)arg1; + + /* Enable or Disable Multicast Duplicate Detection */ + WLANTL_SetMcastDuplicateDetection( pVosContext, enable); + + return p; +} +#endif /* WLAN_FEATURE_RELIABLE_MCAST */ + +/* API to fill Rate Info based on mac efficiency + * arg 1: mac efficiency to be used to calculate mac thorughput for a given rate index + * arg 2: starting rateIndex to apply the macEfficiency to + * arg 3: ending rateIndex to apply the macEfficiency to + */ +static char * +dump_limRateInfoBasedOnMacEff(tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3, tANI_U32 arg4, char *p) +{ + limLog(pMac, LOGE, FL("arg1 %u, arg2 %u, arg3 %u"), arg1, arg2, arg3); + WDTS_FillRateInfo((tANI_U8)(arg1), (tANI_U16)(arg2), (tANI_U16)(arg3)); + return p; +} + static tDumpFuncEntry limMenuDumpTable[] = { {0, "PE (300-499)", NULL}, {300, "LIM: Dump state(s)/statistics ", dump_lim_info}, @@ -2395,12 +2514,12 @@ static tDumpFuncEntry limMenuDumpTable[] = { {308, "PE:LIM: dump all 11H related data", dump_lim_dot11h_stats}, {309, "PE:LIM: dump to enable Measurement on AP", dump_lim_enable_measurement}, {310, "PE:LIM: dump to enable QuietIE on AP", dump_lim_enable_quietIE}, - {311, "PE:LIM: disable/enable scan 1(disable)", dump_lim_disable_enable_scan}, + {311, "PE:LIM: disable/enable scan 1(disable)", dump_lim_disable_enable_scan}, {320, "PE.LIM: send sme scan request", dump_lim_scan_req_send}, /*FIXME_GEN6*/ - /* This dump command is more of generic dump cmd and hence it should + /* This dump command is more of generic dump cmd and hence it should * be moved to logDump.c */ {321, "PE:LIM: Set Log Level ", dump_lim_update_log_level}, @@ -2432,7 +2551,7 @@ static tDumpFuncEntry limMenuDumpTable[] = { {355, "PE.LIM: send sme start BSS request", dump_lim_send_start_bss_req}, {356, "PE.LIM: dump pesession info ", dump_lim_session_print}, {357, "PE.LIM: send DisAssocRequest", dump_lim_send_disassoc_req}, - {358, "PE.LIM: send sme stop bss request ", dump_lim_stop_bss_req}, + {358, "PE.LIM: send sme stop bss request ", dump_lim_stop_bss_req}, {359, "PE.LIM: send sme join request", dump_lim_send_join_req}, #if defined WLAN_FEATURE_VOWIFI {360, "PE.LIM: send an RRM action frame", dump_lim_send_rrm_action}, @@ -2454,16 +2573,29 @@ static tDumpFuncEntry limMenuDumpTable[] = { {368, "PE.LIM: MCC Policy Maker", dump_lim_mcc_policy_maker}, #endif #ifdef WLANTL_DEBUG - {369, "PE.LIM: pkts/rateIdx: iwpriv wlan0 dump 368 ", dump_lim_get_pkts_rcvd_per_rate_idx}, - {370, "PE.LIM: pkts/rssi: : iwpriv wlan0 dump 369 ", dump_lim_get_pkts_rcvd_per_rssi_values}, + {369, "PE.LIM: pkts/rateIdx: iwpriv wlan0 dump 369 ", dump_lim_get_pkts_rcvd_per_rate_idx}, + {370, "PE.LIM: pkts/rssi: : iwpriv wlan0 dump 370 ", dump_lim_get_pkts_rcvd_per_rssi_values}, #endif +#ifdef WLAN_FEATURE_RELIABLE_MCAST + {371, "PE.LIM: Enable RMCAST data path in TL for input MCAST addr", + dump_lim_enable_reliable_mcast_data_path }, + {372, "PE.LIM: Disable RMCAST data path in TL for input MCAST addr", + dump_lim_disable_reliable_mcast_data_path }, + {373, "PE.LIM: Dump RMCAST transmitter and leader status", dump_lim_rmc_status }, +#endif /* WLAN_FEATURE_RELIABLE_MCAST */ +#ifndef QCA_WIFI_2_0 + {374, "PE.LIM: MAS RX stats MAC eff ", dump_limRateInfoBasedOnMacEff}, +#endif /* QCA_WIFI_2_0 */ +#ifdef WLAN_FEATURE_RELIABLE_MCAST + {375, "PE.LIM: Enable(1)/Disable(0) RMCAST duplicate detection", dump_set_mcast_dup_detect }, +#endif /* WLAN_FEATURE_RELIABLE_MCAST */ }; void limDumpInit(tpAniSirGlobal pMac) { - logDumpRegisterTable( pMac, &limMenuDumpTable[0], + logDumpRegisterTable( pMac, &limMenuDumpTable[0], sizeof(limMenuDumpTable)/sizeof(limMenuDumpTable[0]) ); } diff --git a/CORE/MAC/src/pe/lim/limP2P.c b/CORE/MAC/src/pe/lim/limP2P.c index ef690ca53872..10ac3fe93187 100644 --- a/CORE/MAC/src/pe/lim/limP2P.c +++ b/CORE/MAC/src/pe/lim/limP2P.c @@ -66,6 +66,11 @@ #define ADDR2_OFFSET 10 #define ACTION_OFFSET 24 +/* A DFS channel can be ACTIVE for max 9000 msec, from the last + received Beacon/Prpbe Resp. */ +#define MAX_TIME_TO_BE_ACTIVE_CHANNEL 9000 + + void limRemainOnChnlSuspendLinkHdlr(tpAniSirGlobal pMac, eHalStatus status, tANI_U32 *data); @@ -113,33 +118,30 @@ static eHalStatus limSendHalReqRemainOnChanOffload(tpAniSirGlobal pMac, { tSirScanOffloadReq *pScanOffloadReq; tSirMsgQ msg; - eHalStatus status; tSirRetStatus rc = eSIR_SUCCESS; - tANI_U8 bssid[ETH_ALEN] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; + tANI_U8 bssid[SIR_MAC_ADDR_LENGTH] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; - status = palAllocateMemory(pMac->hHdd, (void **) &pScanOffloadReq, - sizeof(tSirScanOffloadReq)); - if (eHAL_STATUS_SUCCESS != status) + pScanOffloadReq = vos_mem_malloc(sizeof(tSirScanOffloadReq)); + if (NULL == pScanOffloadReq) { limLog(pMac, LOGE, - FL("palAllocateMemory failed for pScanOffloadReq")); + FL("Memory allocation failed for pScanOffloadReq")); return eHAL_STATUS_FAILURE; } - palZeroMemory( pMac->hHdd, (tANI_U8 *) pScanOffloadReq, - sizeof(tSirScanOffloadReq)); + vos_mem_zero(pScanOffloadReq, sizeof(tSirScanOffloadReq)); msg.type = WDA_START_SCAN_OFFLOAD_REQ; msg.bodyptr = pScanOffloadReq; msg.bodyval = 0; - palCopyMemory(pMac->hHdd, (tANI_U8 *) pScanOffloadReq->selfMacAddr, - (tANI_U8 *) pRemOnChnReq->selfMacAddr, - sizeof(tSirMacAddr)); + vos_mem_copy((tANI_U8 *) pScanOffloadReq->selfMacAddr, + (tANI_U8 *) pRemOnChnReq->selfMacAddr, + sizeof(tSirMacAddr)); - palCopyMemory(pMac->hHdd, (tANI_U8 *) pScanOffloadReq->bssId, - (tANI_U8 *) bssid, - sizeof(tSirMacAddr)); + vos_mem_copy((tANI_U8 *) pScanOffloadReq->bssId, + (tANI_U8 *) bssid, + sizeof(tSirMacAddr)); pScanOffloadReq->scanType = eSIR_PASSIVE_SCAN; pScanOffloadReq->p2pScanType = P2P_SCAN_TYPE_LISTEN; pScanOffloadReq->minChannelTime = pRemOnChnReq->duration; @@ -158,7 +160,7 @@ static eHalStatus limSendHalReqRemainOnChanOffload(tpAniSirGlobal pMac, { limLog(pMac, LOGE, FL("wdaPostCtrlMsg() return failure"), pMac); - palFreeMemory(pMac->hHdd, (void *)pScanOffloadReq); + vos_mem_free(pScanOffloadReq); return eHAL_STATUS_FAILURE; } return eHAL_STATUS_SUCCESS; @@ -200,7 +202,7 @@ int limProcessRemainOnChnlReq(tpAniSirGlobal pMac, tANI_U32 *pMsg) /* Post the meessage to Sme */ limSendSmeRsp(pMac, eWNI_SME_REMAIN_ON_CHN_RSP, status, MsgBuff->sessionId, 0); - palFreeMemory( pMac->hHdd, pMac->lim.gpLimRemainOnChanReq ); + vos_mem_free(pMac->lim.gpLimRemainOnChanReq); pMac->lim.gpLimRemainOnChanReq = NULL; } return FALSE; @@ -251,9 +253,10 @@ int limProcessRemainOnChnlReq(tpAniSirGlobal pMac, tANI_U32 *pMsg) } #endif - if ((limSetLinkState(pMac, eSIR_LINK_LISTEN_STATE, - nullBssid, pMac->lim.gSelfMacAddr, - limSetLinkStateP2PCallback, NULL)) != eSIR_SUCCESS) + if ((limSetLinkState(pMac, MsgBuff->isProbeRequestAllowed? + eSIR_LINK_LISTEN_STATE:eSIR_LINK_SEND_ACTION_STATE, + nullBssid, pMac->lim.gSelfMacAddr, + limSetLinkStateP2PCallback, NULL)) != eSIR_SUCCESS) { limLog( pMac, LOGE, "Unable to change link state"); goto error; @@ -402,7 +405,7 @@ void limRemainOnChnlSetLinkStat(tpAniSirGlobal pMac, eHalStatus status, if (status != eHAL_STATUS_SUCCESS) { - limLog( pMac, LOGE, "%s: Change channel not successful"); + limLog( pMac, LOGE, FL("Change channel not successful")); goto error1; } @@ -435,7 +438,8 @@ void limRemainOnChnlSetLinkStat(tpAniSirGlobal pMac, eHalStatus status, goto error; } - if ((limSetLinkState(pMac, eSIR_LINK_LISTEN_STATE,nullBssid, + if ((limSetLinkState(pMac, MsgRemainonChannel->isProbeRequestAllowed? + eSIR_LINK_LISTEN_STATE:eSIR_LINK_SEND_ACTION_STATE,nullBssid, pMac->lim.gSelfMacAddr, limSetLinkStateP2PCallback, NULL)) != eSIR_SUCCESS) { @@ -470,6 +474,56 @@ void limProcessInsertSingleShotNOATimeout(tpAniSirGlobal pMac) return; } +/*----------------------------------------------------------------- + * lim Insert Timer callback function to check active DFS channels + * and convert them to passive channels if there was no + * beacon/proberesp for MAX_TIME_TO_BE_ACTIVE_CHANNEL time + *------------------------------------------------------------------*/ +void limConvertActiveChannelToPassiveChannel(tpAniSirGlobal pMac ) +{ + tANI_U32 currentTime; + tANI_U32 lastTime = 0; + tANI_U32 timeDiff; + tANI_U8 i; + currentTime = vos_timer_get_system_time(); + for (i = 1; i < SIR_MAX_24G_5G_CHANNEL_RANGE ; i++) + { + if ((pMac->lim.dfschannelList.timeStamp[i]) != 0) + { + lastTime = pMac->lim.dfschannelList.timeStamp[i]; + if (currentTime >= lastTime) + { + timeDiff = (currentTime - lastTime); + } + else + { + timeDiff = (0xFFFFFFFF - lastTime) + currentTime; + } + + if (timeDiff >= MAX_TIME_TO_BE_ACTIVE_CHANNEL) + { + limCovertChannelScanType( pMac, i,FALSE); + pMac->lim.dfschannelList.timeStamp[i] = 0; + } + } + } + /* lastTime is zero if there is no DFS active channels in the list. + * If this is non zero then we have active DFS channels so restart the timer. + */ + if (lastTime != 0) + { + if (tx_timer_activate( + &pMac->lim.limTimers.gLimActiveToPassiveChannelTimer) + != TX_SUCCESS) + { + limLog(pMac, LOGE, FL("Could not activate Active to Passive Channel timer")); + } + } + + return; + +} + /*------------------------------------------------------------------ * * limchannelchange callback, on success channel change, set the @@ -609,7 +663,7 @@ void limRemainOnChnRsp(tpAniSirGlobal pMac, eHalStatus status, tANI_U32 *data) limSendSmeRsp(pMac, eWNI_SME_REMAIN_ON_CHN_RSP, status, MsgRemainonChannel->sessionId, 0); - palFreeMemory( pMac->hHdd, pMac->lim.gpLimRemainOnChanReq ); + vos_mem_free(pMac->lim.gpLimRemainOnChanReq); pMac->lim.gpLimRemainOnChanReq = NULL; pMac->lim.gLimMlmState = pMac->lim.gLimPrevMlmState; @@ -642,14 +696,14 @@ void limSendSmeMgmtFrameInd( length = sizeof(tSirSmeMgmtFrameInd) + frameLen; - if( eHAL_STATUS_SUCCESS != - palAllocateMemory( pMac->hHdd, (void **)&pSirSmeMgmtFrame, length )) + pSirSmeMgmtFrame = vos_mem_malloc(length); + if (NULL == pSirSmeMgmtFrame) { limLog(pMac, LOGP, - FL("palAllocateMemory failed for eWNI_SME_LISTEN_RSP")); + FL("AllocateMemory failed for eWNI_SME_LISTEN_RSP")); return; } - palZeroMemory(pMac->hHdd, (void*)pSirSmeMgmtFrame, length); + vos_mem_set((void*)pSirSmeMgmtFrame, length, 0); pSirSmeMgmtFrame->mesgType = eWNI_SME_MGMT_FRM_IND; pSirSmeMgmtFrame->mesgLen = length; @@ -713,6 +767,11 @@ void limSendSmeMgmtFrameInd( limLog( pMac, LOGE, FL("Unable to active the gLimRemainOnChannelTimer")); } } + else + { + if(frameType == SIR_MAC_MGMT_ACTION) + limLog( pMac, LOGE, FL("Rx: NO REMAIN ON CHANNEL and recd action frame ")); + } send_frame: pSirSmeMgmtFrame->rxChan = rxChannel; @@ -753,8 +812,8 @@ void limSetHtCaps(tpAniSirGlobal pMac, tpPESession psessionEntry, tANI_U8 *pIeSt PopulateDot11fHTCaps(pMac, psessionEntry, &dot11HtCap); pIe = limGetIEPtr(pMac,pIeStartPtr, nBytes, DOT11F_EID_HTCAPS,ONE_BYTE); - limLog( pMac, LOG2, FL("pIe 0x%x dot11HtCap.supportedMCSSet[0]=0x%x"), - (tANI_U32)pIe,dot11HtCap.supportedMCSSet[0]); + limLog( pMac, LOG2, FL("pIe %p dot11HtCap.supportedMCSSet[0]=0x%x"), + pIe, dot11HtCap.supportedMCSSet[0]); if(pIe) { tHtCaps *pHtcap = (tHtCaps *)&pIe[2]; //convert from unpacked to packed structure @@ -774,9 +833,9 @@ void limSetHtCaps(tpAniSirGlobal pMac, tpPESession psessionEntry, tANI_U8 *pIeSt pHtcap->lsigTXOPProtection = dot11HtCap.lsigTXOPProtection; pHtcap->maxRxAMPDUFactor = dot11HtCap.maxRxAMPDUFactor; pHtcap->mpduDensity = dot11HtCap.mpduDensity; - palCopyMemory( pMac->hHdd, (void *)pHtcap->supportedMCSSet, - (void *)(dot11HtCap.supportedMCSSet), - sizeof(pHtcap->supportedMCSSet)); + vos_mem_copy((void *)pHtcap->supportedMCSSet, + (void *)(dot11HtCap.supportedMCSSet), + sizeof(pHtcap->supportedMCSSet)); pHtcap->pco = dot11HtCap.pco; pHtcap->transitionTime = dot11HtCap.transitionTime; pHtcap->mcsFeedback = dot11HtCap.mcsFeedback; @@ -821,7 +880,7 @@ void limSendP2PActionFrame(tpAniSirGlobal pMac, tpSirMsgQ pMsg) tANI_U8 txFlag = 0; tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pMbMsg->data; tANI_U8 noaLen = 0; - tANI_U8 noaStream[SIR_MAX_NOA_ATTR_LEN + SIR_P2P_IE_HEADER_LEN]; + tANI_U8 noaStream[SIR_MAX_NOA_ATTR_LEN + (2*SIR_P2P_IE_HEADER_LEN)]; tANI_U8 origLen = 0; tANI_U8 sessionId = 0; v_U8_t *pP2PIe = NULL; @@ -926,8 +985,8 @@ send_action_frame: tpSirMacP2PActionFrameHdr pActionHdr = (tpSirMacP2PActionFrameHdr)((v_U8_t *)pMbMsg->data + ACTION_OFFSET); - if ( palEqualMemory( pMac->hHdd, pActionHdr->Oui, - SIR_MAC_P2P_OUI, SIR_MAC_P2P_OUI_SIZE ) && + if (vos_mem_compare( pActionHdr->Oui, + SIR_MAC_P2P_OUI, SIR_MAC_P2P_OUI_SIZE ) && (SIR_MAC_ACTION_P2P_SUBTYPE_PRESENCE_RSP == pActionHdr->OuiSubType)) { //In case of Presence RSP response @@ -981,7 +1040,7 @@ send_action_frame: } nBytes += noaLen; limLog( pMac, LOGE, - FL("noaLen=%d origLen=%d pP2PIe=0x%x" + FL("noaLen=%d origLen=%d pP2PIe=%p" " nBytes=%d nBytesToCopy=%d "), noaLen,origLen,pP2PIe,nBytes, ((pP2PIe + origLen + 2) - (v_U8_t *)pMbMsg->data)); @@ -1056,22 +1115,22 @@ send_frame1: } // Paranoia: - palZeroMemory( pMac->hHdd, pFrame, nBytes ); + vos_mem_set(pFrame, nBytes, 0); if ((noaLen > 0) && (noaLen<(SIR_MAX_NOA_ATTR_LEN + SIR_P2P_IE_HEADER_LEN))) { // Add 2 bytes for length and Arribute field v_U32_t nBytesToCopy = ((pP2PIe + origLen + 2 ) - (v_U8_t *)pMbMsg->data); - palCopyMemory( pMac->hHdd, pFrame, pMbMsg->data, nBytesToCopy); - palCopyMemory( pMac->hHdd, (pFrame + nBytesToCopy), noaStream, noaLen); - palCopyMemory( pMac->hHdd, (pFrame + nBytesToCopy + noaLen), - pMbMsg->data + nBytesToCopy, nBytes - nBytesToCopy - noaLen); + vos_mem_copy(pFrame, pMbMsg->data, nBytesToCopy); + vos_mem_copy((pFrame + nBytesToCopy), noaStream, noaLen); + vos_mem_copy((pFrame + nBytesToCopy + noaLen), + pMbMsg->data + nBytesToCopy, nBytes - nBytesToCopy - noaLen); } else { - palCopyMemory(pMac->hHdd, pFrame, pMbMsg->data, nBytes); + vos_mem_copy(pFrame, pMbMsg->data, nBytes); } /* Use BD rate 2 for all P2P related frames. As these frames need to go @@ -1113,7 +1172,7 @@ send_frame1: else { pMac->lim.mgmtFrameSessionId = pMbMsg->sessionId; - limLog( pMac, LOG2, FL("lim.actionFrameSessionId = %lu" ), + limLog( pMac, LOG2, FL("lim.actionFrameSessionId = %u" ), pMac->lim.mgmtFrameSessionId); } @@ -1150,15 +1209,15 @@ tSirRetStatus __limProcessSmeNoAUpdate(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) pNoA = (tpP2pPsConfig) pMsgBuf; - if( eHAL_STATUS_SUCCESS != palAllocateMemory( - pMac->hHdd, (void **) &pMsgNoA, sizeof( tP2pPsConfig ))) + pMsgNoA = vos_mem_malloc(sizeof( tP2pPsConfig )); + if (NULL == pMsgNoA) { limLog( pMac, LOGE, FL( "Unable to allocate memory during NoA Update" )); return eSIR_MEM_ALLOC_FAILED; } - palZeroMemory( pMac->hHdd, (tANI_U8 *)pMsgNoA, sizeof(tP2pPsConfig)); + vos_mem_set((tANI_U8 *)pMsgNoA, sizeof(tP2pPsConfig), 0); pMsgNoA->opp_ps = pNoA->opp_ps; pMsgNoA->ctWindow = pNoA->ctWindow; pMsgNoA->duration = pNoA->duration; diff --git a/CORE/MAC/src/pe/lim/limRMC.c b/CORE/MAC/src/pe/lim/limRMC.c new file mode 100644 index 000000000000..b5d5f5b21dc3 --- /dev/null +++ b/CORE/MAC/src/pe/lim/limRMC.c @@ -0,0 +1,1893 @@ +/* + * Copyright (c) 2013, The Linux Foundation. All rights reserved. + * + * Previously licensed under the ISC license by Qualcomm Atheros, Inc. + * + * + * Permission to use, copy, modify, and/or distribute this software for + * any purpose with or without fee is hereby granted, provided that the + * above copyright notice and this permission notice appear in all + * copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL + * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE + * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +/* + * This file was originally distributed by Qualcomm Atheros, Inc. + * under proprietary terms before Copyright ownership was assigned + * to the Linux Foundation. + */ + +/* + * This file limRMC.c contains the code + * for processing Leader-based Protocol messages to support Reliable multicast + * + */ +#include "wniApi.h" +#include "wniCfgSta.h" +#include "cfgApi.h" +#include "sirApi.h" +#include "schApi.h" +#include "utilsApi.h" +#include "limUtils.h" +#include "limTimerUtils.h" +#include "limSendMessages.h" +#include "limSendMessages.h" +#include "limSession.h" +#include "limSessionUtils.h" +#include "wlan_qct_wda.h" +#include "wlan_qct_tli.h" +#include "limRMC.h" + +/** + * DOC: Leader Based Protocol for Reliable Multicast + * + * This protocol proposes to achieve reliability in multicast transmissions + * by having a selected multicast receiver respond with 802.11 ACKs. + * This is designed for a peer to peer application that uses the underlying + * IBSS network. The STAs in the IBSS network perform the following different + * roles to support this protocol - + * + * 1) Multicast Transmitter: + * A node that delivers MCAST packets to every nodes and performs Reliable + * Multicast algorithm as a transmitter. + * 2) Multicast Receiver: + * All nodes that receive MCAST packets + * 3) Multicast Receiver Leader: + * A node that receives MCAST packets and performs a Reliable Multicast + * algorithm by sending ACK to transmitter for every multicast frame + * received. Multicast Receiver Leader is appointed by the Multicast + * Transmitter. + * + * The implementation in this file supports the roles of both Multicast + * Transmitter and the Multicast Receiver Leader. + * + * The firmware performs the Leader Selection algorithm and provides a candidate + * list. The implementation in this file, sends vendor specific 802.11 Action + * frame to notify the selected Multicast leader. + * + * The leader sets up its data path to send 802.11 ACKs for any received + * Multicast frames belonging to the specified Multicast Group. It then sends an + * Action frame to the transmitter to acknowledge that it has accepted the + * Leader role. + * + * On receiving an acknowledgement from the leader, the transmitter sets up its + * data path to expect 802.11 ACKs for Multicast transmissions. + * + * The function limProcessRMCMessages handles messages from HDD to enable or + * disable this protocol for a Multicast Group. It handles 802.11 Action frame + * receive events for this protocol. It also responds to firmware generated + * indications and events. + */ + +#if defined WLAN_FEATURE_RELIABLE_MCAST + +/* + * RMC utility routines + */ + +/** + * __rmcGroupHashFunction() + * + *FUNCTION: + * This function is called during scan hash entry operations + * + *LOGIC: + * + *ASSUMPTIONS: + * NA + * + *NOTE: + * NA + * + * @param transmitter - address of multicast transmitter + * + * @return Hash index + */ + +static tANI_U8 +__rmcGroupHashFunction(tSirMacAddr transmitter) +{ + tANI_U16 hash; + + /* + * Generate a hash using transmitter address + */ + hash = transmitter[0] + transmitter[1] + transmitter[2] + + transmitter[3] + transmitter[4] + transmitter[5]; + + return hash & (RMC_MCAST_GROUPS_HASH_SIZE - 1); +} + +/** + * __rmcGroupLookupHashEntry() + * + *FUNCTION: + * This function is called to lookup RMC group entries + * + *LOGIC: + * + *ASSUMPTIONS: + * Should be called with lkRmcLock held. + * + *NOTE: + * NA + * + * @param groupAddr - multicast group address + * transmitter - address of multicast transmitter + * role - transmitter or leader + * + * @return pointer to tLimRmcGroupContext + */ + +static tLimRmcGroupContext * +__rmcGroupLookupHashEntry(tpAniSirGlobal pMac, tSirMacAddr transmitter) +{ + tANI_U8 index; + tLimRmcGroupContext *entry; + + index = __rmcGroupHashFunction(transmitter); + + /* Pick the correct hash table based on role */ + entry = pMac->rmcContext.rmcGroupRxHashTable[index]; + + PELOG1(limLog(pMac, LOG1, FL("RMC: Hash Lookup:[%d] transmitter " + MAC_ADDRESS_STR ), index, + MAC_ADDR_ARRAY(transmitter));) + while (entry) + { + if (vos_mem_compare(transmitter, entry->transmitter, + sizeof(v_MACADDR_t))) + { + return entry; + } + + entry = entry->next; + } + + return NULL; +} + +/** + * __rmcGroupInsertHashEntry() + * + *FUNCTION: + * This function is called to insert RMC group entry + * + *LOGIC: + * + *ASSUMPTIONS: + * Should be called with lkRmcLock held. + * + *NOTE: + * NA + * + * @param transmitter - address of multicast transmitter + * + * @return pointer to tLimRmcGroupContext + */ +static tLimRmcGroupContext * +__rmcGroupInsertHashEntry(tpAniSirGlobal pMac, tSirMacAddr transmitter) +{ + tANI_U8 index; + tLimRmcGroupContext *entry; + tLimRmcGroupContext **head; + + index = __rmcGroupHashFunction(transmitter); + + PELOG1(limLog(pMac, LOG1, FL("RMC: Hash Insert:[%d] group " MAC_ADDRESS_STR + " transmitter " MAC_ADDRESS_STR), index, + MAC_ADDR_ARRAY(mcastGroupAddr), + MAC_ADDR_ARRAY(transmitter));) + + head = &pMac->rmcContext.rmcGroupRxHashTable[index]; + + entry = __rmcGroupLookupHashEntry(pMac, transmitter); + + if (entry) + { + /* If the entry exists, return it at the end */ + PELOGE(limLog(pMac, LOGE, FL("RMC: Hash Insert:" + MAC_ADDRESS_STR "exists"), MAC_ADDR_ARRAY(transmitter));) + } + else + { + entry = (tLimRmcGroupContext *)vos_mem_malloc(sizeof(*entry)); + + PELOG1(limLog(pMac, LOG1, FL("RMC: Hash Insert:new entry %p"), entry);) + + if (entry) + { + vos_mem_copy(entry->transmitter, transmitter, sizeof(tSirMacAddr)); + entry->isLeader = eRMC_IS_NOT_A_LEADER; + + /* chain this entry */ + entry->next = *head; + *head = entry; + } + else + { + PELOGE(limLog(pMac, LOGE, FL("RMC: Hash Insert:" MAC_ADDRESS_STR + " alloc failed"), MAC_ADDR_ARRAY(transmitter));) + } + } + + return entry; +} + +/** + * __rmcGroupDeleteHashEntry() + * + *FUNCTION: + * This function is called to delete a RMC group entry + * + *LOGIC: + * + *ASSUMPTIONS: + * Should be called with lkRmcLock held. + * + *NOTE: + * Make sure (for the transmitter role) that the entry is + * not in the Pending Response queue. + * + * @param transmitter - address of multicast transmitter + * + * @return status + */ +static tSirRetStatus +__rmcGroupDeleteHashEntry(tpAniSirGlobal pMac, tSirMacAddr transmitter) +{ + tSirRetStatus status = eSIR_FAILURE; + tANI_U8 index; + tLimRmcGroupContext *entry, *prev, **head; + + index = __rmcGroupHashFunction(transmitter); + + head = &pMac->rmcContext.rmcGroupRxHashTable[index]; + entry = *head; + prev = NULL; + + while (entry) + { + if (vos_mem_compare(transmitter, entry->transmitter, + sizeof(v_MACADDR_t))) + { + if (*head == entry) + { + *head = entry->next; + } + else + { + prev->next = entry->next; + } + + PELOG1(limLog(pMac, LOG1, FL("RMC: Hash Delete: entry %p " + " transmitter " MAC_ADDRESS_STR), entry + MAC_ADDR_ARRAY(transmitter));) + + /* free the group entry */ + vos_mem_free(entry); + + status = eSIR_SUCCESS; + break; + } + + prev = entry; + entry = entry->next; + } + + return status; +} + +/** + * __rmcGroupDeleteAllEntries() + * + *FUNCTION: + * This function is called to delete all RMC group entries + * for either transmitter or leader, depending on the parameter. + * + *LOGIC: + * + *ASSUMPTIONS: + * Should be called with lkRmcLock held. + * + *NOTE: + * + * @param pMac + * role - transmitter or leader + * @return + */ +static void +__rmcGroupDeleteAllEntries(tpAniSirGlobal pMac) +{ + tLimRmcGroupContext *entry, **head; + int index; + + PELOG1(limLog(pMac, LOG1, FL("RMC: Hash_Delete_All"),);) + + for (index = 0; index < RMC_MCAST_GROUPS_HASH_SIZE; index++) + { + head = &pMac->rmcContext.rmcGroupRxHashTable[index]; + + entry = *head; + + while (entry) + { + *head = entry->next; + /* free the group entry */ + vos_mem_free(entry); + entry = *head; + } + } +} + +/* End RMC utility routines */ + +/** + * \brief Send WDA_RMC_LEADER_REQ to HAL, in order + * to request for a Multicast Leader selection. + * + * \sa __limPostMsgLeaderReq + * + * \param pMac The global tpAniSirGlobal object + * + * \param cmd SUGGEST leader or BECOME leader + * + * \param mcastGroup Multicast Group address + * + * \param mcastTransmitter Multicast Transmitter address + + * \return none + * + */ +static void +__limPostMsgLeaderReq ( tpAniSirGlobal pMac, + tANI_U8 cmd, + tSirMacAddr mcastTransmitter) +{ + tSirMsgQ msg; + tSirRmcLeaderReq *pLeaderReq; + + pLeaderReq = vos_mem_malloc(sizeof(*pLeaderReq)); + if (NULL == pLeaderReq) + { + limLog(pMac, LOGE, FL("AllocateMemory() failed")); + return; + } + + pLeaderReq->cmd = cmd; + + vos_mem_copy(pLeaderReq->mcastTransmitter, mcastTransmitter, + sizeof(tSirMacAddr)); + + /* Initialize black list */ + vos_mem_zero(pLeaderReq->blacklist, sizeof(pLeaderReq->blacklist)); + + /* + * If there are a list of STA receivers that we do not want to be + * considered for Leader, send it here. + */ + if (eRMC_SUGGEST_LEADER_CMD == cmd) + { + /* TODO - Set the black list. */ + } + + msg.type = WDA_RMC_LEADER_REQ; + msg.bodyptr = pLeaderReq; + msg.bodyval = 0; + + MTRACE(macTraceMsgTx(pMac, NO_SESSION, msg.type)); + if (eSIR_SUCCESS != wdaPostCtrlMsg(pMac, &msg)) + { + vos_mem_free(pLeaderReq); + limLog(pMac, LOGE, FL("wdaPostCtrlMsg() failed")); + } + + return; +} + +/** + * \brief Send WDA_RMC_UPDATE_IND to HAL, in order + * to request for a Multicast Leader selection. + * + * \sa __limPostMsgUpdateInd + * + * \param pMac The global tpAniSirGlobal object + * + * \param indication Accepted or Cancelled + * + * \param role Leader or Transmitter + * + * \param mcastGroup Multicast Group address + * + * \param mcastTransmitter Multicast Transmitter address + * + * \param mcastLeader Multicast Leader address + * + * \return none + * + */ +static void +__limPostMsgUpdateInd ( tpAniSirGlobal pMac, + tANI_U8 indication, + tANI_U8 role, + tSirMacAddr mcastTransmitter, + tSirMacAddr mcastLeader) +{ + tSirMsgQ msg; + tSirRmcUpdateInd *pUpdateInd; + + pUpdateInd = vos_mem_malloc(sizeof(*pUpdateInd)); + if ( NULL == pUpdateInd ) + { + limLog(pMac, LOGE, FL("AllocateMemory() failed")); + return; + } + + vos_mem_zero(pUpdateInd, sizeof(*pUpdateInd)); + + pUpdateInd->indication = indication; + pUpdateInd->role = role; + + vos_mem_copy(pUpdateInd->mcastTransmitter, + mcastTransmitter, sizeof(tSirMacAddr)); + + vos_mem_copy(pUpdateInd->mcastLeader, + mcastLeader, sizeof(tSirMacAddr)); + + msg.type = WDA_RMC_UPDATE_IND; + msg.bodyptr = pUpdateInd; + msg.bodyval = 0; + + MTRACE(macTraceMsgTx(pMac, NO_SESSION, msg.type)); + if (eSIR_SUCCESS != wdaPostCtrlMsg(pMac, &msg)) + { + vos_mem_free(pUpdateInd); + limLog(pMac, LOGE, FL("wdaPostCtrlMsg() failed")); + } + + return; +} + +static char * +__limLeaderMessageToString(eRmcMessageType msgType) +{ + switch (msgType) + { + default: + return "Invalid"; + case eLIM_RMC_ENABLE_REQ: + return "RMC_ENABLE_REQ"; + case eLIM_RMC_DISABLE_REQ: + return "RMC_DISABLE_REQ"; + case eLIM_RMC_LEADER_SELECT_RESP: + return "RMC_LEADER_SELECT_RESP"; + case eLIM_RMC_LEADER_PICK_NEW: + return "RMC_LEADER_PICK_NEW"; + case eLIM_RMC_OTA_LEADER_INFORM_ACK: + return "RMC_OTA_LEADER_INFORM_ACK"; + case eLIM_RMC_OTA_LEADER_INFORM_SELECTED: + return "RMC_OTA_LEADER_INFORM_SELECTED"; + case eLIM_RMC_BECOME_LEADER_RESP: + return "RMC_BECOME_LEADER_RESP"; + case eLIM_RMC_OTA_LEADER_INFORM_CANCELLED: + return "RMC_OTA_LEADER_INFORM_CANCELLED"; + } +} + +static char * +__limLeaderStateToString(eRmcLeaderState state) +{ + switch (state) + { + default: + return "Invalid"; + case eRMC_IS_NOT_A_LEADER: + return "Device Not a Leader"; + case eRMC_LEADER_PENDING: + return "Pending firmware resp"; + case eRMC_IS_A_LEADER: + return "Device is Leader"; + } +} + +static char * +__limMcastTxStateToString(eRmcMcastTxState state) +{ + switch (state) + { + default: + return "Invalid"; + case eRMC_LEADER_NOT_SELECTED: + return "Not Selected"; + case eRMC_LEADER_ENABLE_REQUESTED: + return "Enable Requested"; + case eRMC_LEADER_OTA_REQUEST_SENT: + return "OTA Request Sent"; + case eRMC_LEADER_ACTIVE: + return "Active"; + } +} + +/** + * __rmcLeaderSelectTimerHandler() + * + *FUNCTION: + * This function is called upon timer expiry. + * + *LOGIC: This function handles unacked LEADER_INFORM messages. + * If a leader fails to respond, it tries the next one in + * the list. If all potential leaders are exhausted, the + * multicast group is removed. + * + *ASSUMPTIONS: + * NA + * + *NOTE: + * Only one entry is processed for every invocation if this routine. + * This allows us to use a single timer and makes sure we do not + * timeout a request too early. + * + * @param param - Message corresponding to the timer that expired + * + * @return None + */ + +void +__rmcLeaderSelectTimerHandler(void *pMacGlobal, tANI_U32 param) +{ + tpAniSirGlobal pMac = (tpAniSirGlobal)pMacGlobal; + tSirMacAddr zeroMacAddr = { 0, 0, 0, 0, 0, 0 }; + tSirRetStatus status; + tSirRMCInfo RMC; + tpPESession psessionEntry; + tANI_U32 cfgValue; + + /* + * This API relies on a single active IBSS session. + */ + psessionEntry = limIsIBSSSessionActive(pMac); + if (NULL == psessionEntry) + { + PELOGE(limLog(pMac, LOGE, + FL("RMC:__rmcLeaderSelectTimerHandler:No active IBSS"));) + return; + } + + if (wlan_cfgGetInt(pMac, WNI_CFG_RMC_ACTION_PERIOD_FREQUENCY, + &cfgValue) != eSIR_SUCCESS) + { + /** + * Could not get Action Period Frequency value + * from CFG. Log error. + */ + limLog(pMac, LOGE, FL("could not retrieve ActionPeriodFrequency")); + } + + cfgValue = SYS_MS_TO_TICKS(cfgValue); + + if (pMac->rmcContext.rmcTimerValInTicks != cfgValue) + { + limLog(pMac, LOG1, FL("RMC LeaderSelect timer value changed")); + if (tx_timer_change(&pMac->rmcContext.gRmcLeaderSelectTimer, + cfgValue, 0) != TX_SUCCESS) + { + limLog(pMac, LOGE, + FL("Unable to change LeaderSelect Timer val")); + } + pMac->rmcContext.rmcTimerValInTicks = cfgValue; + } + + /* + * If we are in the scanning state then we need to return + * from this function without any further processing + */ + if (eLIM_HAL_SCANNING_STATE == pMac->lim.gLimHalScanState) + { + limLog(pMac, LOG1, FL("In scanning state, can't send action frm")); + if (tx_timer_activate(&pMac->rmcContext.gRmcLeaderSelectTimer) != + TX_SUCCESS) + { + limLog(pMac, LOGE, FL("In scanning state, " + "couldn't activate RMC LeaderSelect timer")); + } + return; + } + + /* Acquire RMC lock */ + if (!VOS_IS_STATUS_SUCCESS(vos_lock_acquire(&pMac->rmcContext.lkRmcLock))) + { + limLog(pMac, LOGE, + FL("__rmcLeaderSelectTimerHandler lock acquire failed")); + if (tx_timer_activate(&pMac->rmcContext.gRmcLeaderSelectTimer)!= TX_SUCCESS) + { + limLog(pMac, LOGE, FL("could not activate RMC LeaderSelect timer")); + } + return; + } + + vos_mem_copy(&RMC.mcastLeader, &pMac->rmcContext.leader, + sizeof(tSirMacAddr)); + + if (VOS_FALSE == vos_mem_compare(&zeroMacAddr, + &pMac->rmcContext.leader, sizeof(tSirMacAddr))) + { + limLog(pMac, LOG1, + FL("RMC Periodic Leader_Select Leader " MAC_ADDRESS_STR), + MAC_ADDR_ARRAY(pMac->rmcContext.leader)); + /* + * Re-arm timer + */ + if (tx_timer_activate(&pMac->rmcContext.gRmcLeaderSelectTimer)!= + TX_SUCCESS) + { + limLog(pMac, LOGE, FL("could not activate RMC Response timer")); + } + + /* Release RMC lock */ + if (!VOS_IS_STATUS_SUCCESS + (vos_lock_release(&pMac->rmcContext.lkRmcLock))) + { + limLog(pMac, LOGE, + FL("RMC: __rmcLeaderSelectTimerHandler lock release failed")); + } + } + else + { + limLog(pMac, LOGE, + FL("RMC Deactivating timer because no leader was selected")); + + /* Release RMC lock */ + if (!VOS_IS_STATUS_SUCCESS + (vos_lock_release(&pMac->rmcContext.lkRmcLock))) + { + limLog(pMac, LOGE, + FL("RMC: __rmcLeaderSelectTimerHandler lock release failed")); + } + + return; + } + + /* + * Handle periodic transmission of Leader_Select Action frame. + */ + + RMC.dialogToken = 0; + RMC.action = SIR_MAC_RMC_LEADER_INFORM_SELECTED; + + status = limSendRMCActionFrame(pMac, + SIR_MAC_RMC_MCAST_ADDRESS, + &RMC, + psessionEntry); + + if (eSIR_FAILURE == status) + { + PELOGE(limLog(pMac, LOGE, + FL("RMC:__rmcLeaderSelectTimerHandler Action frame send failed"));) + } + + return; +} + +/** + * __limProcessRMCEnableRequest() + * + *FUNCTION: + * This function is called to processes eLIM_RMC_ENABLE_REQ + * message from SME. + * + *LOGIC: + * + *ASSUMPTIONS: + * + *NOTE: + * + * @param pMac Pointer to Global MAC structure + * @param pMsgBuf A pointer to the RMC message buffer + * + * @return None + */ +static void +__limProcessRMCEnableRequest(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) +{ + tSirSetRMCReq *setRmcReq = (tSirSetRMCReq *)pMsgBuf; + tpPESession psessionEntry; + + if (!setRmcReq) + { + PELOGE(limLog(pMac, LOGE, FL("RMC: Enable:NULL message") );) + return; + } + + /*Enable RMC*/ + pMac->rmcContext.rmcEnabled = TRUE; + + /* + * This API relies on a single active IBSS session. + */ + psessionEntry = limIsIBSSSessionActive(pMac); + if (NULL == psessionEntry) + { + PELOGE(limLog(pMac, LOGE, FL("RMC:Enable RMC request no active IBSS"));) + pMac->rmcContext.state = eRMC_LEADER_NOT_SELECTED; + return; + } + + /* Send LBP_LEADER_REQ to f/w */ + __limPostMsgLeaderReq(pMac, eRMC_SUGGEST_LEADER_CMD, + setRmcReq->mcastTransmitter); + + pMac->rmcContext.state = eRMC_LEADER_ENABLE_REQUESTED; +} + +/** + * __limProcessRMCDisableRequest() + * + *FUNCTION: + * This function is called to processes eLIM_RMC_DISABLE_REQ + * message from SME. + * + *LOGIC: + * + *ASSUMPTIONS: + * + *NOTE: + * + * @param pMac Pointer to Global MAC structure + * @param pMsgBuf A pointer to the RMC message buffer + * + * @return None + */ +static void +__limProcessRMCDisableRequest(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) +{ + tpPESession psessionEntry; + tSirRMCInfo RMC; + tSirSetRMCReq *setRmcReq = (tSirSetRMCReq *)pMsgBuf; + tSirRetStatus status; + v_PVOID_t pvosGCtx; + VOS_STATUS vos_status; + v_MACADDR_t vosMcastTransmitter; + + /*Disable RMC*/ + pMac->rmcContext.rmcEnabled = FALSE; + + /* + * This API relies on a single active IBSS session. + */ + psessionEntry = limIsIBSSSessionActive(pMac); + if (NULL == psessionEntry) + { + PELOGE(limLog(pMac, LOGE, FL("RMC: Disable:No active IBSS"));) + return; + } + + if (!setRmcReq) + { + PELOGE(limLog(pMac, LOGE, FL("RMC: Disable:NULL message") );) + return; + } + + /* Cancel pending timer */ + tx_timer_deactivate(&pMac->rmcContext.gRmcLeaderSelectTimer); + + vosMcastTransmitter.bytes[0] = psessionEntry->selfMacAddr[0]; + vosMcastTransmitter.bytes[1] = psessionEntry->selfMacAddr[1]; + vosMcastTransmitter.bytes[2] = psessionEntry->selfMacAddr[2]; + vosMcastTransmitter.bytes[3] = psessionEntry->selfMacAddr[3]; + vosMcastTransmitter.bytes[4] = psessionEntry->selfMacAddr[4]; + vosMcastTransmitter.bytes[5] = psessionEntry->selfMacAddr[5]; + + /* Disable RMC in TL */ + pvosGCtx = vos_get_global_context(VOS_MODULE_ID_PE, (v_VOID_t *) pMac); + vos_status = WLANTL_DisableReliableMcast(pvosGCtx, &vosMcastTransmitter); + + if (VOS_STATUS_SUCCESS != vos_status) + { + PELOGE(limLog(pMac, LOGE, FL("RMC:Disable: TL disable failed"));) + } + + if (pMac->rmcContext.state == eRMC_LEADER_ACTIVE) + { + /* + * Send Leader_Inform_Cancelled Action frame to the Leader. + */ + RMC.dialogToken = 0; + RMC.action = SIR_MAC_RMC_LEADER_INFORM_CANCELLED; + vos_mem_copy(&RMC.mcastLeader, &pMac->rmcContext.leader, sizeof(tSirMacAddr)); + + status = limSendRMCActionFrame(pMac, pMac->rmcContext.leader, + &RMC, psessionEntry); + if (eSIR_FAILURE == status) + { + PELOGE(limLog(pMac, LOGE, FL("RMC:Disable: Action frame send failed"));) + } + + pMac->rmcContext.state = eRMC_LEADER_NOT_SELECTED; + } + + /* send LBP_UPDATE_IND */ + __limPostMsgUpdateInd(pMac, eRMC_LEADER_CANCELLED, eRMC_TRANSMITTER_ROLE, + setRmcReq->mcastTransmitter, pMac->rmcContext.leader); + + vos_mem_zero(pMac->rmcContext.leader, sizeof(tSirMacAddr)); + +} + +/** + * __limProcessRMCLeaderSelectResponse() + * + *FUNCTION: + * This function is called to processes eLIM_RMC_LEADER_SELECT_RESP + * message from the firmware. + * + *LOGIC: + * + *ASSUMPTIONS: + * + *NOTE: + * + * @param pMac Pointer to Global MAC structure + * @param pMsgBuf A pointer to the RMC message buffer + * + * @return None + */ +static void +__limProcessRMCLeaderSelectResponse(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) +{ + tSirRmcLeaderSelectInd *pRmcLeaderSelectInd; + tpPESession psessionEntry; + tSirRetStatus status; + v_PVOID_t pvosGCtx; + VOS_STATUS vos_status; + v_MACADDR_t vosMcastTransmitter; + tSirRMCInfo RMC; + + if (NULL == pMsgBuf) + { + PELOGE(limLog(pMac, LOGE, FL("RMC: Leader_Select_Resp:NULL message"));) + return; + } + + /* + * This API relies on a single active IBSS session. + */ + psessionEntry = limIsIBSSSessionActive(pMac); + if (NULL == psessionEntry) + { + PELOGE(limLog(pMac, LOGE, FL("RMC:Leader_Select_Resp:No active IBSS"));) + pMac->rmcContext.state = eRMC_LEADER_NOT_SELECTED; + return; + } + + pRmcLeaderSelectInd = (tSirRmcLeaderSelectInd *)pMsgBuf; + + if (pMac->rmcContext.state != eRMC_LEADER_ENABLE_REQUESTED) + { + PELOGE(limLog(pMac, LOGE, FL("RMC: Leader_Select_Resp:Bad state %s"), + __limMcastTxStateToString(pMac->rmcContext.state) );) + return; + } + + if (pRmcLeaderSelectInd->status) + { + PELOGE(limLog(pMac, LOGE, FL("RMC:Leader_Select_Resp:FW Status %d"), + pRmcLeaderSelectInd->status);) + pMac->rmcContext.state = eRMC_LEADER_NOT_SELECTED; + return; + } + + /* Acquire RMC lock */ + if (!VOS_IS_STATUS_SUCCESS(vos_lock_acquire(&pMac->rmcContext.lkRmcLock))) + { + limLog(pMac, LOGE, FL("RMC:Leader_Select_Resp:lock acquire failed")); + pMac->rmcContext.state = eRMC_LEADER_NOT_SELECTED; + return; + } + + /* Cache the current leader */ + vos_mem_copy(&pMac->rmcContext.leader, &pRmcLeaderSelectInd->leader[0], + sizeof(tSirMacAddr)); + + /* Release RMC lock */ + if (!VOS_IS_STATUS_SUCCESS + (vos_lock_release(&pMac->rmcContext.lkRmcLock))) + { + limLog(pMac, LOGE, FL("RMC: Leader_Select_Resp: lock release failed")); + } + + RMC.dialogToken = 0; + RMC.action = SIR_MAC_RMC_LEADER_INFORM_SELECTED; + vos_mem_copy(&RMC.mcastLeader, &pRmcLeaderSelectInd->leader[0], + sizeof(tSirMacAddr)); + + PELOG1(limLog(pMac, LOG1, FL("RMC: Leader_Select :leader " MAC_ADDRESS_STR), + MAC_ADDR_ARRAY(pRmcLeaderSelectInd->leader[0]));) + + /* + * Send Leader_Inform Action frame to the candidate leader. + * Candidate leader is at leader_index. + */ + status = limSendRMCActionFrame(pMac, + SIR_MAC_RMC_MCAST_ADDRESS, + &RMC, + psessionEntry); + + if (eSIR_FAILURE == status) + { + PELOGE(limLog(pMac, LOGE, + FL("RMC: Leader_Select_Resp: Action send failed"));) + } + + /* send LBP_UPDATE_IND */ + __limPostMsgUpdateInd(pMac, eRMC_LEADER_ACCEPTED, eRMC_TRANSMITTER_ROLE, + psessionEntry->selfMacAddr, pMac->rmcContext.leader); + + vosMcastTransmitter.bytes[0] = psessionEntry->selfMacAddr[0]; + vosMcastTransmitter.bytes[1] = psessionEntry->selfMacAddr[1]; + vosMcastTransmitter.bytes[2] = psessionEntry->selfMacAddr[2]; + vosMcastTransmitter.bytes[3] = psessionEntry->selfMacAddr[3]; + vosMcastTransmitter.bytes[4] = psessionEntry->selfMacAddr[4]; + vosMcastTransmitter.bytes[5] = psessionEntry->selfMacAddr[5]; + + /* Enable TL */ + pvosGCtx = vos_get_global_context(VOS_MODULE_ID_PE, (v_VOID_t *) pMac); + vos_status = WLANTL_EnableReliableMcast(pvosGCtx, &vosMcastTransmitter); + + /* Set leader state to Active. */ + pMac->rmcContext.state = eRMC_LEADER_ACTIVE; + + /* Start timer to send periodic Leader_Select */ + if (tx_timer_activate(&pMac->rmcContext.gRmcLeaderSelectTimer)!= TX_SUCCESS) + { + limLog(pMac, LOGE, + FL("Leader_Select_Resp:Activate RMC Response timer failed")); + } +} + +/** + * __limProcessRMCLeaderPickNew() + * + *FUNCTION: + * This function is called to processes eLIM_RMC_LEADER_PICK_NEW + * message from the firmware. + * + *LOGIC: + * + *ASSUMPTIONS: + * + *NOTE: + * + * @param pMac Pointer to Global MAC structure + * @param pMsgBuf A pointer to the RMC message buffer + * + * @return None + */ +static void +__limProcessRMCLeaderPickNew(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) +{ + tSirRmcUpdateInd *pRmcUpdateInd; + tpPESession psessionEntry; + tSirRetStatus status; + tSirRMCInfo RMC; + v_PVOID_t pvosGCtx; + VOS_STATUS vos_status; + v_MACADDR_t vosMcastTransmitter; + tSirMacAddr zeroMacAddr = { 0, 0, 0, 0, 0, 0 }; + + if (NULL == pMsgBuf) + { + PELOGE(limLog(pMac, LOGE, FL("RMC: Leader_Pick_New:NULL message"));) + return; + } + + /* + * This API relies on a single active IBSS session. + */ + psessionEntry = limIsIBSSSessionActive(pMac); + if (NULL == psessionEntry) + { + PELOGE(limLog(pMac, LOGE, FL("RMC: Leader_Pick_New:No active IBSS"));) + return; + } + + pvosGCtx = vos_get_global_context(VOS_MODULE_ID_PE, (v_VOID_t *) pMac); + + pRmcUpdateInd = (tSirRmcUpdateInd *)pMsgBuf; + + /* Acquire RMC lock */ + if (!VOS_IS_STATUS_SUCCESS(vos_lock_acquire(&pMac->rmcContext.lkRmcLock))) + { + limLog(pMac, LOGE, FL("RMC:Leader_Pick_New:lock acquire failed")); + return; + } + + + /* Fill out Action frame parameters */ + RMC.dialogToken = 0; + + /* + * Check the multicast Leader address sent by firmware. + * Prepare to send Leader_Inform_Cancel only if this address + * is valid. + */ + if (VOS_FALSE == vos_mem_compare(&zeroMacAddr, + &pRmcUpdateInd->mcastLeader, + sizeof(tSirMacAddr))) + { + + vos_mem_copy(&RMC.mcastLeader, &pRmcUpdateInd->mcastLeader, + sizeof(tSirMacAddr)); + + /* + * Send Leader_Inform_Cancelled Action frame to the current leader. + */ + RMC.action = SIR_MAC_RMC_LEADER_INFORM_CANCELLED; + status = limSendRMCActionFrame(pMac, + pRmcUpdateInd->mcastLeader, + &RMC, psessionEntry); + if (eSIR_FAILURE == status) + { + PELOGE(limLog(pMac, LOGE, + FL("RMC:Leader_Pick_New: Inform_Cancel Action send failed"));) + goto done; + } + + vosMcastTransmitter.bytes[0] = psessionEntry->selfMacAddr[0]; + vosMcastTransmitter.bytes[1] = psessionEntry->selfMacAddr[1]; + vosMcastTransmitter.bytes[2] = psessionEntry->selfMacAddr[2]; + vosMcastTransmitter.bytes[3] = psessionEntry->selfMacAddr[3]; + vosMcastTransmitter.bytes[4] = psessionEntry->selfMacAddr[4]; + vosMcastTransmitter.bytes[5] = psessionEntry->selfMacAddr[5]; + + /* Disable RMC in TL */ + vos_status = WLANTL_DisableReliableMcast(pvosGCtx, &vosMcastTransmitter); + + if (VOS_STATUS_SUCCESS != vos_status) + { + PELOGE(limLog(pMac, LOGE, + FL("RMC:Leader_Pick_New: TL disable failed"));) + } + } + + /* + * Cache the leader list for this multicast group + * If no leader list was given, this will essentially zero out + * the list. + */ + vos_mem_copy(pMac->rmcContext.leader, pRmcUpdateInd->leader[0], + sizeof(tSirMacAddr)); + + pMac->rmcContext.state = eRMC_LEADER_NOT_SELECTED; + + /* + * Verify that the Pick_New indication has any candidate leaders. + */ + if (VOS_TRUE == vos_mem_compare(&zeroMacAddr, + pMac->rmcContext.leader, + sizeof(tSirMacAddr))) + { + PELOGE(limLog(pMac, LOGE, + FL("RMC:Leader_Pick_New: No candidate leaders available"));) + goto done; + } + + /* + * Send Leader_Inform Action frame to the new candidate leader. + */ + + RMC.action = SIR_MAC_RMC_LEADER_INFORM_SELECTED; + vos_mem_copy(&RMC.mcastLeader, &pMac->rmcContext.leader, + sizeof(tSirMacAddr)); + status = limSendRMCActionFrame(pMac, SIR_MAC_RMC_MCAST_ADDRESS, + &RMC, psessionEntry); + if (eSIR_FAILURE == status) + { + PELOGE(limLog(pMac, LOGE, + FL("RMC:Leader_Pick_New: Inform_Selected Action send failed"));) + goto done; + } + + /* send LBP_UPDATE_IND */ + __limPostMsgUpdateInd(pMac, eRMC_LEADER_ACCEPTED, eRMC_TRANSMITTER_ROLE, + psessionEntry->selfMacAddr, pMac->rmcContext.leader); + + vosMcastTransmitter.bytes[0] = psessionEntry->selfMacAddr[0]; + vosMcastTransmitter.bytes[1] = psessionEntry->selfMacAddr[1]; + vosMcastTransmitter.bytes[2] = psessionEntry->selfMacAddr[2]; + vosMcastTransmitter.bytes[3] = psessionEntry->selfMacAddr[3]; + vosMcastTransmitter.bytes[4] = psessionEntry->selfMacAddr[4]; + vosMcastTransmitter.bytes[5] = psessionEntry->selfMacAddr[5]; + + /* Enable TL */ + vos_status = WLANTL_EnableReliableMcast(pvosGCtx, &vosMcastTransmitter); + + if (VOS_STATUS_SUCCESS != vos_status) + { + PELOGE(limLog(pMac, LOGE, + FL("RMC:Leader_Pick_New: TL enable failed"));) + goto done; + } + + /* Set leader state to Active. */ + pMac->rmcContext.state = eRMC_LEADER_ACTIVE; + + /* Start timer to send periodic Leader_Select */ + if (tx_timer_activate(&pMac->rmcContext.gRmcLeaderSelectTimer)!= TX_SUCCESS) + { + limLog(pMac, LOGE, + FL("Leader_Pick_New:Activate RMC Response timer failed")); + } + +done: + /* Release RMC lock */ + if (!VOS_IS_STATUS_SUCCESS(vos_lock_release(&pMac->rmcContext.lkRmcLock))) + { + limLog(pMac, LOGE, + FL("RMC: Leader_Pick_New: lock release failed")); + } +} + +/** + * __limProcessRMCLeaderInformSelected() + * + *FUNCTION: + * This function is called to processes eLIM_RMC_OTA_LEADER_INFORM_SELECTED + * message from the "Leader Inform" Action frame from the + * multicast transmitter. + * + *LOGIC: + * + *ASSUMPTIONS: + * + *NOTE: + * + * @param pMac Pointer to Global MAC structure + * @param pMsgBuf A pointer to the RMC message buffer + * + * @return None + */ +static void +__limProcessRMCLeaderInformSelected(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) +{ + tpSirMacMgmtHdr pHdr; + tANI_U8 *pFrameData; + tANI_U32 frameLen; + tLimRmcGroupContext *entry; + tpPESession psessionEntry; + tSirRetStatus status; + + if (!pMsgBuf) + { + PELOGE(limLog(pMac, LOGE, FL("RMC: Leader_Inform:NULL msg"));) + return; + } + + /* + * This API relies on a single active IBSS session. + */ + psessionEntry = limIsIBSSSessionActive(pMac); + if (NULL == psessionEntry) + { + PELOGE(limLog(pMac, LOGE, FL("RMC:Become_Leader_Resp:No active IBSS"));) + return; + } + + /* + * Get the frame header + */ + pHdr = WDA_GET_RX_MAC_HEADER((tANI_U8 *)pMsgBuf); + + frameLen = WDA_GET_RX_PAYLOAD_LEN((tANI_U8 *)pMsgBuf); + if (frameLen < sizeof(tSirMacOxygenNetworkFrameHdr)) + { + PELOGE(limLog(pMac, LOGE, + FL("RMC: Leader_Inform:Bad length %d "), frameLen);) + return; + } + + pFrameData = WDA_GET_RX_MPDU_DATA((tANI_U8 *)pMsgBuf) + + sizeof(tSirMacOxygenNetworkFrameHdr); + + if (!pFrameData) + { + PELOGE(limLog(pMac, LOGE, FL("RMC: Leader_Inform:NULL data"));) + return; + } + + /* Acquire RMC lock */ + if (!VOS_IS_STATUS_SUCCESS(vos_lock_acquire(&pMac->rmcContext.lkRmcLock))) + { + limLog(pMac, LOGE, FL("RMC:Become_Leader_Resp:lock acquire failed")); + return; + } + + /* + * Check if this transmitter exists in our database. + */ + entry = __rmcGroupLookupHashEntry(pMac, pHdr->sa); + + /* + * Check if we are being advertised as the leader. + * The leader address is from the Action frame payload. + */ + if (VOS_FALSE == vos_mem_compare(pFrameData, psessionEntry->selfMacAddr, + sizeof(tSirMacAddr))) + { + /* + * If we were the leader for this transmitter, tell the firmware + * that we are not any more. This is a implicit Leader_Cancel. + */ + if (entry) + { + PELOG1(limLog(pMac, LOG1, + FL("RMC: Leader_Inform: Leader Cancelled"));) + /* send LBP_UPDATE_IND */ + __limPostMsgUpdateInd(pMac, eRMC_LEADER_CANCELLED, + eRMC_LEADER_ROLE, pHdr->sa, psessionEntry->selfMacAddr); + + /* + * Delete hash entry for this Group address. + */ + status = __rmcGroupDeleteHashEntry(pMac, pHdr->sa); + if (eSIR_FAILURE == status) + { + PELOGE(limLog(pMac, LOGE, + FL("RMC: Leader_Inform:hash delete failed"));) + } + } + } + else + { + /* + * If we have been selected as the new leader for this transmitter, + * add it to your database. If we are already in the database, there + * is nothing to do. + */ + if (NULL == entry) + { + /* Add the transmitter address to the hash */ + entry = __rmcGroupInsertHashEntry(pMac, pHdr->sa); + if (entry) + { + if (entry->isLeader != eRMC_LEADER_PENDING) + { + /* Send LBP_LEADER_REQ to f/w */ + __limPostMsgLeaderReq(pMac, eRMC_BECOME_LEADER_CMD, + pHdr->sa); + entry->isLeader = eRMC_LEADER_PENDING; + } + } + else + { + PELOGE(limLog(pMac, LOGE, + FL("RMC: Leader_Inform:Hash insert failed"));) + } + + } + } + + /* Release RMC lock */ + if (!VOS_IS_STATUS_SUCCESS(vos_lock_release(&pMac->rmcContext.lkRmcLock))) + { + limLog(pMac, LOGE, + FL("RMC: Leader_Inform: lock release failed")); + } + +} + +/** + * __limProcessRMCBecomeLeaderResp() + * + *FUNCTION: + * This function is called to processes eLIM_RMC_BECOME_LEADER_RESP + * message from the firmware. + * + *LOGIC: + * + *ASSUMPTIONS: + * + *NOTE: + * + * @param pMac Pointer to Global MAC structure + * @param pMsgBuf A pointer to the RMC message buffer + * + * @return None + */ +static void +__limProcessRMCBecomeLeaderResp(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) +{ + tSirRmcBecomeLeaderInd *pRmcBecomeLeaderInd; + tLimRmcGroupContext *entry; + tSirRetStatus status = eSIR_SUCCESS; + + if (NULL == pMsgBuf) + { + PELOGE(limLog(pMac, LOGE, FL("RMC: Become_Leader_Resp:NULL message"));) + return; + } + + pRmcBecomeLeaderInd = (tSirRmcBecomeLeaderInd *)pMsgBuf; + + /* Acquire RMC lock */ + if (!VOS_IS_STATUS_SUCCESS(vos_lock_acquire(&pMac->rmcContext.lkRmcLock))) + { + limLog(pMac, LOGE, FL("RMC:Become_Leader_Resp:lock acquire failed")); + return; + } + + /* + * Find the entry for this Group Address. + */ + entry = __rmcGroupLookupHashEntry(pMac, + pRmcBecomeLeaderInd->mcastTransmitter); + if (NULL == entry) + { + PELOGE(limLog(pMac, LOGE, FL("RMC: Become_Leader_Resp: No entry"));) + goto done; + } + + if (pRmcBecomeLeaderInd->status) + { + PELOGE(limLog(pMac, LOGE, FL("RMC:Become_Leader_Resp:FW Status %d"), + pRmcBecomeLeaderInd->status);) + status = eSIR_FAILURE; + goto done; + } + + if (entry->isLeader != eRMC_LEADER_PENDING) + { + PELOGE(limLog(pMac, LOGE, FL("RMC: Become_Leader_Resp:Bad state: %s"), + __limLeaderStateToString(entry->isLeader) );) + status = eSIR_FAILURE; + goto done; + } + + entry->isLeader = eRMC_IS_A_LEADER; + +done: + if (eSIR_FAILURE == status) + { + status = __rmcGroupDeleteHashEntry(pMac, + pRmcBecomeLeaderInd->mcastTransmitter); + if (eSIR_FAILURE == status) + { + PELOGE(limLog(pMac, LOGE, + FL("RMC: Become_Leader_Resp:hash delete failed"));) + } + } + + /* Release RMC lock */ + if (!VOS_IS_STATUS_SUCCESS(vos_lock_release(&pMac->rmcContext.lkRmcLock))) + { + limLog(pMac, LOGE, + FL("RMC: Become_Leader_Resp: lock release failed")); + } + + return; +} + +/** + * __limProcessRMCLeaderInformCancelled() + * + *FUNCTION: + * This function is called to processes eLIM_RMC_OTA_LEADER_INFORM_CANCELLED + * message from the "Leader Inform Cancelled" Action frame from the + * multicast transmitter. + * + *LOGIC: + * + *ASSUMPTIONS: + * + *NOTE: + * + * @param pMac Pointer to Global MAC structure + * @param pMsgBuf A pointer to the RMC message buffer + * + * @return None + */ +static void +__limProcessRMCLeaderInformCancelled(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) +{ + tpSirMacMgmtHdr pHdr; + tANI_U8 *pFrameData; + tANI_U32 frameLen; + tSirRetStatus status; + tLimRmcGroupContext *entry; + tpPESession psessionEntry; + + if (!pMsgBuf) + { + PELOGE(limLog(pMac, LOGE, FL("RMC: Leader_Inform_Cancel:NULL msg"));) + return; + } + + /* + * This API relies on a single active IBSS session. + */ + psessionEntry = limIsIBSSSessionActive(pMac); + if (NULL == psessionEntry) + { + PELOGE(limLog(pMac, LOGE, + FL("RMC:Leader_Inform_Cancel:No active IBSS"));) + return; + } + + pHdr = WDA_GET_RX_MAC_HEADER((tANI_U8 *)pMsgBuf); + + frameLen = WDA_GET_RX_PAYLOAD_LEN((tANI_U8 *)pMsgBuf); + if (frameLen < sizeof(tSirMacOxygenNetworkFrameHdr)) + { + PELOGE(limLog(pMac, LOGE, + FL("RMC: Leader_Inform:Bad length %d "), frameLen);) + return; + } + + pFrameData = WDA_GET_RX_MPDU_DATA((tANI_U8 *)pMsgBuf) + + sizeof(tSirMacOxygenNetworkFrameHdr); + + if (!pFrameData) + { + PELOGE(limLog(pMac, LOGE, FL("RMC: Leader_Inform_Cancel:NULL data"));) + return; + } + + /* Acquire RMC lock */ + if (!VOS_IS_STATUS_SUCCESS(vos_lock_acquire(&pMac->rmcContext.lkRmcLock))) + { + limLog(pMac, LOGE, FL("RMC:Leader_Inform_Cancel lock acquire failed")); + return; + } + + /* + * Find the entry for this Group Address. + */ + entry = __rmcGroupLookupHashEntry(pMac, pHdr->sa); + if (NULL == entry) + { + PELOGE(limLog(pMac, LOGE, FL("RMC: Leader_Inform_Cancel: No entry"));) + goto done; + } + + /* send LBP_UPDATE_END */ + __limPostMsgUpdateInd(pMac, eRMC_LEADER_CANCELLED, + eRMC_LEADER_ROLE, pHdr->sa, psessionEntry->selfMacAddr); + + /* + * Delete hash entry for this Group address. + */ + status = __rmcGroupDeleteHashEntry(pMac, pHdr->sa); + if (eSIR_FAILURE == status) + { + PELOGE(limLog(pMac, LOGE, + FL("RMC: Leader_Inform_Cancel:hash delete failed"));) + } + +done: + /* Release RMC lock */ + if (!VOS_IS_STATUS_SUCCESS(vos_lock_release(&pMac->rmcContext.lkRmcLock))) + { + limLog(pMac, LOGE, + FL("RMC: Leader_Inform_Cancel: lock release failed")); + } + return; +} + +/** + * limProcessRMCMessages() + * + *FUNCTION: + * This function is called to processes various RMC messages. + * + *LOGIC: + * + *ASSUMPTIONS: + * + *NOTE: + * + * @param pMac Pointer to Global MAC structure + * @param msgType Indicates the RMC message type + * @param *pMsgBuf A pointer to the RMC message buffer + * + * @return None + */ +void +limProcessRMCMessages(tpAniSirGlobal pMac, eRmcMessageType msgType, + tANI_U32 *pMsgBuf) +{ + + if (pMsgBuf == NULL) + { + PELOGE(limLog(pMac, LOGE, FL("RMC: Buffer is Pointing to NULL"));) + return; + } + + limLog(pMac, LOG1, FL("RMC: limProcessRMCMessages: %s"), + __limLeaderMessageToString(msgType)); + + switch (msgType) + { + /* + * Begin - messages processed by RMC multicast transmitter. + */ + case eLIM_RMC_ENABLE_REQ: + __limProcessRMCEnableRequest(pMac, pMsgBuf); + break; + + case eLIM_RMC_DISABLE_REQ: + __limProcessRMCDisableRequest(pMac, pMsgBuf); + break; + + case eLIM_RMC_LEADER_SELECT_RESP: + __limProcessRMCLeaderSelectResponse(pMac, pMsgBuf); + break; + + case eLIM_RMC_LEADER_PICK_NEW: + __limProcessRMCLeaderPickNew(pMac, pMsgBuf); + break; + + /* + * End - messages processed by RMC multicast transmitter. + */ + + /* + * Begin - messages processed by RMC Leader (receiver). + */ + case eLIM_RMC_OTA_LEADER_INFORM_SELECTED: + __limProcessRMCLeaderInformSelected(pMac, pMsgBuf); + break; + + case eLIM_RMC_BECOME_LEADER_RESP: + __limProcessRMCBecomeLeaderResp(pMac, pMsgBuf); + break; + + case eLIM_RMC_OTA_LEADER_INFORM_CANCELLED: + __limProcessRMCLeaderInformCancelled(pMac, pMsgBuf); + break; + + /* + * End - messages processed by RMC Leader (receiver). + */ + + default: + break; + } // switch (msgType) + return; +} /*** end limProcessRMCMessages() ***/ + +/** + * limRmcInit() + * + *FUNCTION: + * This function is called to initialize RMC module. + * + *LOGIC: + * + *ASSUMPTIONS: + * + *NOTE: + * + * @param pMac Pointer to Global MAC structure + * + * @return None + */ +void +limRmcInit(tpAniSirGlobal pMac) +{ + tANI_U32 cfgValue; + + if (wlan_cfgGetInt(pMac, WNI_CFG_RMC_ACTION_PERIOD_FREQUENCY, + &cfgValue) != eSIR_SUCCESS) + { + /** + * Could not get Action Period Frequency value + * from CFG. Log error. + */ + limLog(pMac, LOGP, FL("could not retrieve ActionPeriodFrequency")); + } + + cfgValue = SYS_MS_TO_TICKS(cfgValue); + + vos_mem_zero(&pMac->rmcContext, sizeof(pMac->rmcContext)); + + if (!VOS_IS_STATUS_SUCCESS(vos_lock_init(&pMac->rmcContext.lkRmcLock))) + { + PELOGE(limLog(pMac, LOGE, FL("RMC lock init failed!"));) + } + + if (tx_timer_create(&pMac->rmcContext.gRmcLeaderSelectTimer, + "RMC RSP TIMEOUT", + __rmcLeaderSelectTimerHandler, + 0 /* param */, + cfgValue, 0, + TX_NO_ACTIVATE) != TX_SUCCESS) + { + /* Could not create RMC response timer. */ + limLog(pMac, LOGE, FL("could not create RMC response timer")); + } + + pMac->rmcContext.rmcTimerValInTicks = cfgValue; +} + +/** + * limRmcCleanup() + * + *FUNCTION: + * This function is called to clean up RMC module. + * + *LOGIC: + * + *ASSUMPTIONS: limRmcIbssDelete should have been called before this. + * + *NOTE: + * + * @param pMac Pointer to Global MAC structure + * + * @return None + */ +void +limRmcCleanup(tpAniSirGlobal pMac) +{ + /* Delete all entries from Leader database. */ + limRmcIbssDelete(pMac); + + if (!VOS_IS_STATUS_SUCCESS(vos_lock_destroy(&pMac->rmcContext.lkRmcLock))) + { + PELOGE(limLog(pMac, LOGE, FL("RMC lock destroy failed!"));) + } + + tx_timer_delete(&pMac->rmcContext.gRmcLeaderSelectTimer); +} + +/** + * limRmcTransmitterDelete() + * + *FUNCTION: + * This function is called on a Leader to handle deletion of the transmitter. + * It is called when the IBSS module wants to delete a peer. If the peer + * exists in our database, we delete the entries associated with this peer. + *LOGIC: + * + *ASSUMPTIONS: + * + *NOTE: + * + * @param pMac Pointer to Global MAC structure + * transmitter Address of the transmitter + * @return None + */ +void +limRmcTransmitterDelete(tpAniSirGlobal pMac, tSirMacAddr transmitter) +{ + /* Acquire RMC lock */ + if (!VOS_IS_STATUS_SUCCESS(vos_lock_acquire(&pMac->rmcContext.lkRmcLock))) + { + limLog(pMac, LOGE, + FL("RMC: limRMCTransmitterDelete lock acquire failed")); + return; + } + + /* Delete this transmitter from Leader database. */ + __rmcGroupDeleteHashEntry(pMac, transmitter); + + /* Release RMC lock */ + if (!VOS_IS_STATUS_SUCCESS(vos_lock_release(&pMac->rmcContext.lkRmcLock))) + { + limLog(pMac, LOGE, + FL("RMC: limRMCTransmitterDelete lock release failed")); + } + + limLog(pMac, LOG1, FL("RMC: limRmcTransmitterDelete complete")); +} + +/** + * limRmcIbssDelete() + * + *FUNCTION: + * This function is called when the IBSS is being deleted for either + * transmitter or leader STA. + * + *LOGIC: + * + *ASSUMPTIONS: + * + *NOTE: + * + * @param pMac Pointer to Global MAC structure + * + * @return None + */ +void +limRmcIbssDelete(tpAniSirGlobal pMac) +{ + tpPESession psessionEntry; + tSirMacAddr zeroMacAddr = { 0, 0, 0, 0, 0, 0 }; + + /* + * This API relies on a single active IBSS session. + */ + psessionEntry = limIsIBSSSessionActive(pMac); + if (NULL == psessionEntry) + { + PELOGE(limLog(pMac, LOGE, FL("RMC: limRmcIbssDelete:No active IBSS"));) + return; + } + + if (VOS_FALSE == vos_mem_compare(&zeroMacAddr, + &pMac->rmcContext.leader, sizeof(tSirMacAddr))) + { + /* send LBP_UPDATE_IND */ + __limPostMsgUpdateInd(pMac, eRMC_LEADER_CANCELLED, + eRMC_TRANSMITTER_ROLE, psessionEntry->selfMacAddr, + pMac->rmcContext.leader); + } + + /* Acquire RMC lock */ + if (!VOS_IS_STATUS_SUCCESS(vos_lock_acquire(&pMac->rmcContext.lkRmcLock))) + { + limLog(pMac, LOGE, + FL("RMC: limRmcIbssDelete lock acquire failed")); + return; + } + + /* Cancel pending timer */ + tx_timer_deactivate(&pMac->rmcContext.gRmcLeaderSelectTimer); + + /* Delete all entries from Leader database. */ + __rmcGroupDeleteAllEntries(pMac); + + /* Release RMC lock */ + if (!VOS_IS_STATUS_SUCCESS(vos_lock_release(&pMac->rmcContext.lkRmcLock))) + { + limLog(pMac, LOGE, + FL("RMC: limRmcIbssDelete lock release failed")); + } + + limLog(pMac, LOG1, FL("RMC: limRmcIbssDelete complete")); +} + +/** + * limRmcDumpStatus() + * + *FUNCTION: + * This function is called to display RMC status for transmitter and leader. + * + *LOGIC: + * + *ASSUMPTIONS: + * + *NOTE: + * + * @param pMac Pointer to Global MAC structure + * + * @return char * Pointer to buffer with RMC information. + */ +void +limRmcDumpStatus(tpAniSirGlobal pMac) +{ + tLimRmcGroupContext *entry; + int index, count; + + /* Acquire RMC lock */ + if (!VOS_IS_STATUS_SUCCESS(vos_lock_acquire(&pMac->rmcContext.lkRmcLock))) + { + limLog(pMac, LOGE, + FL("RMC: limRmcDumpStatus lock acquire failed")); + return; + } + + + limLog(pMac, LOGE, FL(" ----- RMC Transmitter Information ----- \n")); + limLog(pMac, LOGE, + FL(" Leader Address | RMC State \n")); + + if (pMac->rmcContext.state != eRMC_LEADER_NOT_SELECTED) + { + limLog(pMac,LOGE, FL( MAC_ADDRESS_STR " | %s\n"), + MAC_ADDR_ARRAY(pMac->rmcContext.leader), + __limMcastTxStateToString(pMac->rmcContext.state)); + } + + limLog( pMac,LOGE, FL(" ----- RMC Leader Information ----- \n")); + limLog( pMac,LOGE, FL(" Transmitter Address\n")); + + count = 0; + for (index = 0; index < RMC_MCAST_GROUPS_HASH_SIZE; index++) + { + entry = pMac->rmcContext.rmcGroupRxHashTable[index]; + + while (entry) + { + count++; + limLog( pMac,LOGE, FL("%d. " MAC_ADDRESS_STR " \n"), + count, MAC_ADDR_ARRAY(entry->transmitter)); + entry = entry->next; + } + } + + /* Release RMC lock */ + if (!VOS_IS_STATUS_SUCCESS(vos_lock_release(&pMac->rmcContext.lkRmcLock))) + { + limLog(pMac, LOGE, + FL("RMC: limRmcDumpStatus lock release failed")); + } + + return; + +} + +/** + * limRmcTriggerLeaderSelection() + * + *FUNCTION: + * This function is called to RMC leader selection in FW + * + *LOGIC: + * + *ASSUMPTIONS: + * + *NOTE: + * + * @param pMac Pointer to Global MAC structure + * + * @param macAddr Input mac address + * + * @return : VOS_STATUS_SUCCESS if RMC state machine allows leader selection and + leader selection is triggered in FW + VOS_STATUS_E_FAILURE if RMC state machine does not allow leader + selection in its current state + */ +VOS_STATUS +limRmcTriggerLeaderSelection(tpAniSirGlobal pMac, tSirMacAddr macAddr) +{ + /*Trigger LBP leader selection in FW*/ + if ((TRUE == pMac->rmcContext.rmcEnabled) && + (eRMC_LEADER_NOT_SELECTED == pMac->rmcContext.state)) + { + limLog(pMac, LOG1, + FL("Leader selection trigerred in FW")); + + __limPostMsgLeaderReq(pMac, eRMC_SUGGEST_LEADER_CMD, macAddr); + + pMac->rmcContext.state = eRMC_LEADER_ENABLE_REQUESTED; + + return VOS_STATUS_SUCCESS; + } + else + { + limLog(pMac, LOG1, + FL("Could not trigger leader selection: RMC state %d rmcEnabled %d"), + pMac->rmcContext.state, pMac->rmcContext.rmcEnabled); + + return VOS_STATUS_E_FAILURE; + } +} + +#endif /* WLAN_FEATURE_RELIABLE_MCAST */ diff --git a/CORE/MAC/src/pe/lim/limRMC.h b/CORE/MAC/src/pe/lim/limRMC.h new file mode 100644 index 000000000000..ce156cef0916 --- /dev/null +++ b/CORE/MAC/src/pe/lim/limRMC.h @@ -0,0 +1,113 @@ +/* + * Copyright (c) 2013 Qualcomm Atheros, Inc. + * All Rights Reserved. + * Qualcomm Atheros Confidential and Proprietary. + * + * Date: 08/15/13 + * History:- + * Date Modified by Modification Information + * -------------------------------------------------------------------- + */ +#ifndef __LIM_RMC_H +#define __LIM_RMC_H + +#if defined WLAN_FEATURE_RELIABLE_MCAST + +typedef enum { + eLIM_RMC_ENABLE_REQ = 0, + eLIM_RMC_DISABLE_REQ = 1, + eLIM_RMC_BECOME_LEADER_RESP = 2, + eLIM_RMC_LEADER_SELECT_RESP = 3, + eLIM_RMC_LEADER_PICK_NEW = 4, + eLIM_RMC_OTA_LEADER_INFORM_CANCELLED = 5, + eLIM_RMC_OTA_LEADER_INFORM_ACK = 6, + eLIM_RMC_OTA_LEADER_INFORM_SELECTED = 7, +} eRmcMessageType; + +typedef enum { + eRMC_LEADER_NOT_SELECTED = 0, + eRMC_LEADER_ENABLE_REQUESTED = 1, + eRMC_LEADER_OTA_REQUEST_SENT = 2, + eRMC_LEADER_ACTIVE = 3, +} eRmcMcastTxState; + +typedef enum { + eRMC_IS_NOT_A_LEADER = 0, + eRMC_LEADER_PENDING = 1, + eRMC_IS_A_LEADER = 2, +} eRmcLeaderState; + +enum { + eRMC_SUGGEST_LEADER_CMD = 0, + eRMC_BECOME_LEADER_CMD = 1, +}; + +/* tLbpUpdateIndType */ +enum { + eRMC_LEADER_ACCEPTED = 0, //Host-->FW + eRMC_LEADER_CANCELLED = 1, //Host-->FW + eRMC_LEADER_PICK_NEW = 2, //FW-->Host +}; + +/* tLbpRoleType; */ +typedef enum +{ + eRMC_LEADER_ROLE, + eRMC_TRANSMITTER_ROLE, +} eRmcRole; + +#define RMC_MCAST_GROUPS_HASH_SIZE 32 + +typedef struct sLimRmcGroupContext +{ + tSirMacAddr transmitter; + eRmcLeaderState isLeader; + struct sLimRmcGroupContext *next; +} tLimRmcGroupContext, *tpLimRmcGroupContext; + +typedef struct sLimRmcContext +{ + tANI_BOOLEAN rmcEnabled; + tSirMacAddr leader; + eRmcMcastTxState state; + TX_TIMER gRmcLeaderSelectTimer; + tANI_U32 rmcTimerValInTicks; + vos_lock_t lkRmcLock; + tLimRmcGroupContext *rmcGroupRxHashTable[RMC_MCAST_GROUPS_HASH_SIZE]; +} tLimRmcContext, *tpLimRmcContext; + + +void limRmcInit(tpAniSirGlobal pMac); +void limRmcCleanup(tpAniSirGlobal pMac); +void limRmcTransmitterDelete(tpAniSirGlobal pMac, tSirMacAddr transmitter); +void limRmcIbssDelete(tpAniSirGlobal pMac); +void limRmcDumpStatus(tpAniSirGlobal pMac); + +/** + * limRmcTriggerLeaderSelection() + * + *FUNCTION: + * This function is called to RMC leader selection in FW + * + *LOGIC: + * + *ASSUMPTIONS: + * + *NOTE: + * + * @param pMac Pointer to Global MAC structure + * + * @param macAddr Input MAC addres + * + * @return : VOS_STATUS_SUCCESS if RMC state machine allows leader selection and + leader selection is triggered in FW + VOS_STATUS_E_FAILURE if RMC state machine does not allow leader + selection in its current state + */ +VOS_STATUS +limRmcTriggerLeaderSelection(tpAniSirGlobal pMac, tSirMacAddr macAddr); + + +#endif /* WLAN_FEATURE_RELIABLE_MCAST */ + +#endif /* __LIM_RMC_H */ diff --git a/CORE/SME/inc/sme_Trace.h b/CORE/SME/inc/sme_Trace.h new file mode 100644 index 000000000000..a89932d29192 --- /dev/null +++ b/CORE/SME/inc/sme_Trace.h @@ -0,0 +1,110 @@ +/*********************************************************************** + sme_Trace.h + + \brief definition for trace related APIs + + \author Kiran Kumar Reddy CH L V + + Copyright (c) 2013 Qualcomm Atheros, Inc. + + All Rights Reserved. + + Qualcomm Atheros Confidential and Proprietary. + + ========================================================================*/ + +#ifndef __SME_TRACE_H__ +#define __SME_TRACE_H__ + + +#include "macTrace.h" + +#define NO_SESSION 0xFF +#define TRACE_CODE_SME_COMMAND 0xFF +enum { + TRACE_CODE_SME_RX_HDD_MSG_SCAN_REQ, + TRACE_CODE_SME_RX_HDD_MSG_SCAN_GET_RESULTS, + TRACE_CODE_SME_RX_HDD_MSG_CONNECT, + TRACE_CODE_SME_RX_HDD_MSG_SET_11DINFO, + TRACE_CODE_SME_RX_HDD_MSG_GET_SOFTAP_DOMAIN, + TRACE_CODE_SME_RX_HDD_MSG_SET_REGINFO, + TRACE_CODE_SME_RX_HDD_MSG_UPDATE_CHANNEL_CONFIG, + TRACE_CODE_SME_RX_HDD_MSG_UPDATE_CONFIG, + TRACE_CODE_SME_RX_HDD_MSG_HDDREADYIND, + TRACE_CODE_SME_RX_HDD_MSG_SCAN_FLUSH_RESULTS, + TRACE_CODE_SME_RX_HDD_MSG_SCAN_FLUSH_P2PRESULTS, + TRACE_CODE_SME_RX_HDD_MSG_SCAN_RESULT_GETFIRST, + TRACE_CODE_SME_RX_HDD_MSG_SCAN_RESULT_GETNEXT, + TRACE_CODE_SME_RX_HDD_MSG_SCAN_RESULT_PURGE, + TRACE_CODE_SME_RX_HDD_ROAM_REASSOC, + TRACE_CODE_SME_RX_HDD_ROAM_DISCONNECT, + TRACE_CODE_SME_RX_HDD_ROAM_GET_CONNECTPROFILE, + TRACE_CODE_SME_RX_HDD_ROAM_FREE_CONNECTPROFILE, + TRACE_CODE_SME_RX_HDD_ROAM_SET_PMKIDCACHE, + TRACE_CODE_SME_RX_HDD_GET_CONFIGPARAM, + TRACE_CODE_SME_RX_HDD_GET_MODPROFFIELDS, + TRACE_CODE_SME_RX_HDD_SET_CONFIG_PWRSAVE, + TRACE_CODE_SME_RX_HDD_GET_CONFIG_PWRSAVE, + TRACE_CODE_SME_RX_HDD_ENABLE_PWRSAVE, + TRACE_CODE_SME_RX_HDD_DISABLE_PWRSAVE, + TRACE_CODE_SME_RX_HDD_START_AUTO_BMPSTIMER, + TRACE_CODE_SME_RX_HDD_STOP_AUTO_BMPSTIMER, + TRACE_CODE_SME_RX_HDD_IS_PWRSAVE_ENABLED, + TRACE_CODE_SME_RX_HDD_REQUEST_FULLPOWER, + TRACE_CODE_SME_RX_HDD_REQUEST_BMPS, + TRACE_CODE_SME_RX_HDD_SET_DHCP_FLAG, + TRACE_CODE_SME_RX_HDD_REQUEST_STANDBY, + TRACE_CODE_SME_RX_HDD_WOWL_ADDBCAST_PATTERN, + TRACE_CODE_SME_RX_HDD_WOWL_DELBCAST_PATTERN, + TRACE_CODE_SME_RX_HDD_ENTER_WOWL, + TRACE_CODE_SME_RX_HDD_EXIT_WOWL, + TRACE_CODE_SME_RX_HDD_SET_KEY, + TRACE_CODE_SME_RX_HDD_REMOVE_KEY, + TRACE_CODE_SME_RX_HDD_GET_STATS, + TRACE_CODE_SME_RX_HDD_GET_CNTRYCODE, + TRACE_CODE_SME_RX_HDD_SET_CNTRYCODE, + TRACE_CODE_SME_RX_HDD_CHANGE_CNTRYCODE, + TRACE_CODE_SME_RX_HDD_BTC_SIGNALEVENT, + TRACE_CODE_SME_RX_HDD_BTC_SETCONFIG, + TRACE_CODE_SME_RX_HDD_BTC_GETCONFIG, + TRACE_CODE_SME_RX_HDD_SET_CFGPRIVACY, + TRACE_CODE_SME_RX_HDD_NEIGHBOR_REPORTREQ, + TRACE_CODE_SME_RX_HDD_DBG_READREG, + TRACE_CODE_SME_RX_HDD_DBG_WRITEREG, + TRACE_CODE_SME_RX_HDD_DBG_READMEM, + TRACE_CODE_SME_RX_HDD_DBG_WRITEMEM, + TRACE_CODE_SME_RX_HDD_OPEN_SESSION, + TRACE_CODE_SME_RX_HDD_CLOSE_SESSION, + TRACE_CODE_SME_RX_HDD_SET_HOSTOFFLOAD, + TRACE_CODE_SME_RX_HDD_SET_GTKOFFLOAD, + TRACE_CODE_SME_RX_HDD_GET_GTKOFFLOAD, + TRACE_CODE_SME_RX_HDD_SET_POWERPARAMS, + TRACE_CODE_SME_RX_HDD_ABORT_MACSCAN, + TRACE_CODE_SME_RX_HDD_REGISTER_MGMTFR, + TRACE_CODE_SME_RX_HDD_DEREGISTER_MGMTFR, + TRACE_CODE_SME_RX_HDD_REMAIN_ONCHAN, + TRACE_CODE_SME_RX_HDD_SEND_ACTION, + TRACE_CODE_SME_RX_HDD_CANCEL_REMAIN_ONCHAN, + TRACE_CODE_SME_RX_HDD_CONFIG_RXPFIL, + TRACE_CODE_SME_RX_HDD_CONFIG_SUSPENDIND, + TRACE_CODE_SME_RX_HDD_CONFIG_RESUMEREQ, + TRACE_CODE_SME_RX_HDD_SET_MAXTXPOW, + TRACE_CODE_SME_RX_HDD_SET_TXPOW, + TRACE_CODE_SME_RX_HDD_SET_TMLEVEL, + TRACE_CODE_SME_RX_HDD_CAPS_EXCH, + TRACE_CODE_SME_RX_HDD_DISABLE_CAP, + TRACE_CODE_SME_RX_HDD_GET_DEFCCNV, + TRACE_CODE_SME_RX_HDD_GET_CURCC, + TRACE_CODE_SME_RX_HDD_RESET_PW5G, + TRACE_CODE_SME_RX_HDD_UPDATE_RP5G, + TRACE_CODE_SME_RX_HDD_SET_ROAMIBAND, + TRACE_CODE_SME_RX_HDD_GET_ROAMIBAND, + TRACE_CODE_SME_RX_HDD_UPDATE_RSSIDIFF, + TRACE_CODE_SME_RX_HDD_UPDATE_IMMRSSIDIFF, + TRACE_CODE_SME_RX_HDD_UPDATE_FTENABLED, + TRACE_CODE_SME_RX_HDD_UPDATE_WESMODE, + TRACE_CODE_SME_RX_HDD_SET_SCANCTRL, +}; + +void smeTraceInit(tpAniSirGlobal pMac); +#endif //__SME_TRACE_H__ diff --git a/CORE/SME/src/sme_common/sme_Trace.c b/CORE/SME/src/sme_common/sme_Trace.c new file mode 100644 index 000000000000..5b40ab87aa61 --- /dev/null +++ b/CORE/SME/src/sme_common/sme_Trace.c @@ -0,0 +1,179 @@ +/************************************************************************ + smeTrace.c + + \brief implementation for trace related APIs + + \author Kiran Kumar Reddy CH L V + + Copyright (c) 2013 Qualcomm Atheros, Inc. + + All Rights Reserved. + + Qualcomm Atheros Confidential and Proprietary. + + ========================================================================*/ +#include "aniGlobal.h" //for tpAniSirGlobal +#include "smsDebug.h" +#include "macTrace.h" +#include "sme_Trace.h" +#include "smeInternal.h" +#ifndef SME_TRACE_RECORD +void smeTraceInit(tpAniSirGlobal pMac) +{ + return; +} +#endif +#ifdef SME_TRACE_RECORD + + +static tANI_U8* smeTraceGetRxMsgString( tANI_U32 code ) +{ + switch(code) + { + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_MSG_SCAN_REQ); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_MSG_SCAN_GET_RESULTS); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_MSG_CONNECT); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_MSG_SET_11DINFO); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_MSG_GET_SOFTAP_DOMAIN); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_MSG_SET_REGINFO); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_MSG_UPDATE_CHANNEL_CONFIG); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_MSG_UPDATE_CONFIG); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_MSG_HDDREADYIND); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_MSG_SCAN_FLUSH_RESULTS); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_MSG_SCAN_FLUSH_P2PRESULTS); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_MSG_SCAN_RESULT_GETFIRST); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_MSG_SCAN_RESULT_GETNEXT); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_MSG_SCAN_RESULT_PURGE); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_ROAM_REASSOC); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_ROAM_DISCONNECT); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_ROAM_GET_CONNECTPROFILE); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_ROAM_FREE_CONNECTPROFILE); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_ROAM_SET_PMKIDCACHE); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_GET_CONFIGPARAM); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_GET_MODPROFFIELDS); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_SET_CONFIG_PWRSAVE); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_GET_CONFIG_PWRSAVE); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_ENABLE_PWRSAVE); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_DISABLE_PWRSAVE); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_START_AUTO_BMPSTIMER); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_STOP_AUTO_BMPSTIMER); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_IS_PWRSAVE_ENABLED); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_REQUEST_FULLPOWER); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_REQUEST_BMPS); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_SET_DHCP_FLAG); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_REQUEST_STANDBY); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_WOWL_ADDBCAST_PATTERN); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_WOWL_DELBCAST_PATTERN); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_ENTER_WOWL); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_EXIT_WOWL); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_SET_KEY); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_REMOVE_KEY); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_GET_STATS); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_GET_CNTRYCODE); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_SET_CNTRYCODE); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_CHANGE_CNTRYCODE); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_BTC_SIGNALEVENT); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_BTC_SETCONFIG); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_BTC_GETCONFIG); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_SET_CFGPRIVACY); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_NEIGHBOR_REPORTREQ); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_DBG_READREG); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_DBG_WRITEREG); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_DBG_READMEM); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_DBG_WRITEMEM); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_OPEN_SESSION); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_CLOSE_SESSION); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_SET_HOSTOFFLOAD); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_SET_GTKOFFLOAD); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_GET_GTKOFFLOAD); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_SET_POWERPARAMS); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_ABORT_MACSCAN); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_REGISTER_MGMTFR); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_DEREGISTER_MGMTFR); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_REMAIN_ONCHAN); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_SEND_ACTION); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_CANCEL_REMAIN_ONCHAN); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_CONFIG_RXPFIL); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_CONFIG_SUSPENDIND); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_CONFIG_RESUMEREQ); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_SET_MAXTXPOW); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_SET_TXPOW); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_SET_TMLEVEL); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_CAPS_EXCH); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_DISABLE_CAP); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_GET_DEFCCNV); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_GET_CURCC); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_RESET_PW5G); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_UPDATE_RP5G); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_SET_ROAMIBAND); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_GET_ROAMIBAND); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_UPDATE_RSSIDIFF); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_UPDATE_IMMRSSIDIFF); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_UPDATE_FTENABLED); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_UPDATE_WESMODE); + CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_SET_SCANCTRL); + + default: + return( "UNKNOWN" ); + break; + } +} +static tANI_U8* smeTraceGetCommandString( tANI_U32 command ) +{ + switch(command) + { + CASE_RETURN_STRING(eSmeNoCommand); + CASE_RETURN_STRING(eSmeDropCommand); + CASE_RETURN_STRING(eSmeCsrCommandMask); + CASE_RETURN_STRING(eSmeCommandScan); + CASE_RETURN_STRING(eSmeCommandRoam); + CASE_RETURN_STRING(eSmeCommandWmStatusChange); + CASE_RETURN_STRING(eSmeCommandSetKey); + CASE_RETURN_STRING(eSmeCommandRemoveKey); + CASE_RETURN_STRING(eSmeCommandAddStaSession); + CASE_RETURN_STRING(eSmeCommandDelStaSession); + CASE_RETURN_STRING(eSmePmcCommandMask); + CASE_RETURN_STRING(eSmeCommandEnterImps); + CASE_RETURN_STRING(eSmeCommandExitImps); + CASE_RETURN_STRING(eSmeCommandEnterBmps); + CASE_RETURN_STRING(eSmeCommandExitBmps); + CASE_RETURN_STRING(eSmeCommandEnterUapsd); + CASE_RETURN_STRING(eSmeCommandExitUapsd); + CASE_RETURN_STRING(eSmeCommandEnterWowl); + CASE_RETURN_STRING(eSmeCommandExitWowl); + CASE_RETURN_STRING(eSmeCommandEnterStandby); + CASE_RETURN_STRING(eSmeQosCommandMask); + CASE_RETURN_STRING(eSmeCommandAddTs); + CASE_RETURN_STRING(eSmeCommandDelTs); +#ifdef FEATURE_OEM_DATA_SUPPORT + CASE_RETURN_STRING(eSmeCommandOemDataReq); +#endif + CASE_RETURN_STRING(eSmeCommandRemainOnChannel); + CASE_RETURN_STRING(eSmeCommandNoAUpdate); + default: + return( "UNKNOWN" ); + break; + } +} +static void smeTraceDump(tpAniSirGlobal pMac, tpTraceRecord pRecord, + tANI_U16 recIndex) +{ + if (TRACE_CODE_SME_COMMAND == pRecord->code) + { + smsLog(pMac, LOGE, "%04d %012u S%d %-14s %-30s(0x%x)", recIndex, + pRecord->time, pRecord->session, "SME COMMAND:", + smeTraceGetCommandString(pRecord->data), pRecord->data ); + } + else + { + smsLog(pMac, LOGE, "%04d %012u S%d %-14s %-30s(0x%x)", recIndex, + pRecord->time, pRecord->session, "RX HDD MSG:", + smeTraceGetRxMsgString(pRecord->code), pRecord->data ); + } +} + +void smeTraceInit(tpAniSirGlobal pMac) +{ + macTraceRegister(pMac, VOS_MODULE_ID_SME, smeTraceDump); +} +#endif diff --git a/CORE/VOSS/inc/wlan_nv_parser.h b/CORE/VOSS/inc/wlan_nv_parser.h new file mode 100644 index 000000000000..cf6c5eb13194 --- /dev/null +++ b/CORE/VOSS/inc/wlan_nv_parser.h @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2013, The Linux Foundation. All rights reserved. + * + * Previously licensed under the ISC license by Qualcomm Atheros, Inc. + * + * + * Permission to use, copy, modify, and/or distribute this software for + * any purpose with or without fee is hereby granted, provided that the + * above copyright notice and this permission notice appear in all + * copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL + * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE + * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +/* + * This file was originally distributed by Qualcomm Atheros, Inc. + * under proprietary terms before Copyright ownership was assigned + * to the Linux Foundation. + */ + +#if !defined __WLAN_NV_PARSER_H +#define __WLAN_NV_PARSER_H + +#include + +VOS_STATUS nvParser(tANI_U8 *pnvEncodedBuf, tANI_U32 nvReadBufSize, sHalNv *); + +#endif diff --git a/CORE/VOSS/inc/wlan_nv_parser_internal.h b/CORE/VOSS/inc/wlan_nv_parser_internal.h new file mode 100644 index 000000000000..b84d54b1fc90 --- /dev/null +++ b/CORE/VOSS/inc/wlan_nv_parser_internal.h @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2013, The Linux Foundation. All rights reserved. + * + * Previously licensed under the ISC license by Qualcomm Atheros, Inc. + * + * + * Permission to use, copy, modify, and/or distribute this software for + * any purpose with or without fee is hereby granted, provided that the + * above copyright notice and this permission notice appear in all + * copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL + * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE + * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +/* + * This file was originally distributed by Qualcomm Atheros, Inc. + * under proprietary terms before Copyright ownership was assigned + * to the Linux Foundation. + */ + +#if !defined _WLAN_NV_PARSER_INTERNAL_H +#define _WLAN_NV_PARSER_INTERNAL_H + +#include "wlan_nv_types.h" + +/* + * local prototypes + */ +static _NV_TEMPLATE_PROCESS_RC processNvTemplate(_NV_STREAM_BUF *pStream, + int len); +static _NV_TEMPLATE_PROCESS_RC processNvTemplateTable(_NV_STREAM_BUF *pStream, + int len); +static int constructATemplateTable(_NV_STREAM_BUF *pStream, int len, + char *tableStrName); +static _NV_TEMPLATE_PROCESS_RC compareWithBuiltinTable(int idxFromBin, + char *tableNameFromBin); +static _NV_TEMPLATE_PROCESS_RC compare2Tables(int idxFromBin, int idxBuiltin); +static _NV_TEMPLATE_PROCESS_RC compare2FieldsAndCopyFromBin( + _NV_TEMPLATE_TABLE *pTableBuiltin, _NV_TEMPLATE_TABLE *pTableFromBin, + int idxBuiltin, int idxFromBin); +static _NV_TEMPLATE_PROCESS_RC compare2FieldIDType( + _NV_TEMPLATE_TABLE *pTableBuiltIn, _NV_TEMPLATE_TABLE *pTableFromBin, + int idxBuiltin, int idxFromBin); +static _NV_TEMPLATE_PROCESS_RC compare2FieldStorageTypeAndSizes( + _NV_TEMPLATE_TABLE *pTableBuiltIn, _NV_TEMPLATE_TABLE *pTableFromBin, + int idxBuiltin, int idxFromBin); +static _NV_TEMPLATE_PROCESS_RC compare2StorageSize(int idxBuiltIn, + int idxFromBin, int sizeBuiltIn, int sizeFromBin, + tANI_U8 sizeBuiltInLowByte, tANI_U8 sizeFromBinLowByte); +static _NV_TEMPLATE_PROCESS_RC processNvTemplateEnum(_NV_STREAM_BUF *pStream, + int len); +static void compareEnumWithBuiltin(char *enumStr, int enumIdxFromBin); +static _NV_TEMPLATE_PROCESS_RC compare2EnumEntriesAndCopy(int idxFromBin, + int idxBuiltin); +static int constructATemplateEnum(_NV_STREAM_BUF *pStream, int len, + char *enumStr); +static void processNvData(_NV_STREAM_BUF *pStream, int len); +static int numElemSingular(_NV_TEMPLATE_TABLE *pTableEntry,int); +static int numElemArray1(_NV_TEMPLATE_TABLE *pTableEntry,int); +static int numElemArray2(_NV_TEMPLATE_TABLE *pTableEntry,int); +static int numElemArray3(_NV_TEMPLATE_TABLE *pTableEntry,int); +static void parseSubDataTable4Size(int tableIdx, int numElem); +static void getBasicDataSize(_NV_TEMPLATE_TABLE *pTableEntry); +static int getNumElemOutOfStorageSize(int fieldStorageSize, + tANI_U8 fieldStorageSizeLowByte,int); + +static int getFieldCount(int tableIdx, int fieldIdi, int numElem, + int nvBin); +static void parseDataTable_new(_NV_STREAM_BUF *pStream, int* pos, + int tableIdx, int addOffset, int tableBaseOffset); +static int getBuiltInFieldCount (int tblIdBin, char *tableNameFromBin, + int *tblIdBuiltIn, int *fieldIdBuitIn, int *numElem); +static void parseSubDataTableAndCopy(int tableIdx, int numElem, int numElem2, + int numElem3, int fieldId, _NV_STREAM_BUF *pStream, int* pos, + int addOffset, int tableBaseOffset, int localAddOffset); + +/* + * typedef's + */ + +typedef int (*pF_NumElemBasedOnStorageType)(_NV_TEMPLATE_TABLE *pTableEntry, + int nvBin); + +#endif + + diff --git a/CORE/VOSS/inc/wlan_nv_stream.h b/CORE/VOSS/inc/wlan_nv_stream.h new file mode 100644 index 000000000000..4535c7aeec96 --- /dev/null +++ b/CORE/VOSS/inc/wlan_nv_stream.h @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2013, The Linux Foundation. All rights reserved. + * + * Previously licensed under the ISC license by Qualcomm Atheros, Inc. + * + * + * Permission to use, copy, modify, and/or distribute this software for + * any purpose with or without fee is hereby granted, provided that the + * above copyright notice and this permission notice appear in all + * copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL + * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE + * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +/* + * This file was originally distributed by Qualcomm Atheros, Inc. + * under proprietary terms before Copyright ownership was assigned + * to the Linux Foundation. + */ + +#if !defined _WLAN_NV_STREAM_H +#define _WLAN_NV_STREAM_H + +#include "wlan_nv_types.h" + +typedef tANI_U8 _NV_STREAM_BUF; + +typedef struct { + _NV_STREAM_BUF *dataBuf; + tANI_U32 currentIndex; + tANI_U32 totalLength; +}_STREAM_BUF; + +extern _STREAM_BUF streamBuf; + +typedef enum { + RC_FAIL, + RC_SUCCESS, +} _STREAM_RC; + +typedef enum { + STREAM_READ, + STREAM_WRITE, +} _STREAM_OPERATION; + +_STREAM_RC nextStream (tANI_U32 *length, tANI_U8 *dataBuf); +_STREAM_RC initReadStream ( tANI_U8 *readBuf, tANI_U32 length); + +#endif diff --git a/CORE/VOSS/inc/wlan_nv_template_api.h b/CORE/VOSS/inc/wlan_nv_template_api.h new file mode 100644 index 000000000000..1752eab5f193 --- /dev/null +++ b/CORE/VOSS/inc/wlan_nv_template_api.h @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2013, The Linux Foundation. All rights reserved. + * + * Previously licensed under the ISC license by Qualcomm Atheros, Inc. + * + * + * Permission to use, copy, modify, and/or distribute this software for + * any purpose with or without fee is hereby granted, provided that the + * above copyright notice and this permission notice appear in all + * copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL + * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE + * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +/* + * This file was originally distributed by Qualcomm Atheros, Inc. + * under proprietary terms before Copyright ownership was assigned + * to the Linux Foundation. + */ + +#if !defined _WLAN_NV_TEMPLATE_API_H +#define _WLAN_NV_TEMPLATE_API_H + +#include "wlan_nv_types.h" + +/* +* API Prototypes +* These are meant to be exposed to outside applications +*/ +//extern void writeNvData(void); +//extern VOS_STATUS nvParser(tANI_U8 *pnvEncodedBuf, tANI_U32 nvReadBufSize, sHalNv *); + +/* +* Parsing control bitmap +*/ +#define _ABORT_WHEN_MISMATCH_MASK 0x00000001 /*set: abort when mismatch, clear: continue taking matched entries*/ +#define _IGNORE_THE_APPENDED_MASK 0x00000002 /*set: ignore, clear: take*/ + +#define _FLAG_AND_ABORT(b) (((b) & _ABORT_WHEN_MISMATCH_MASK) ? 1 : 0) + +#endif /*#if !defined(_WLAN_NV_TEMPLATE_API_H) */ diff --git a/CORE/VOSS/inc/wlan_nv_template_builtin.h b/CORE/VOSS/inc/wlan_nv_template_builtin.h new file mode 100644 index 000000000000..696468a36084 --- /dev/null +++ b/CORE/VOSS/inc/wlan_nv_template_builtin.h @@ -0,0 +1,176 @@ + +/* + * Copyright (c) 2013, The Linux Foundation. All rights reserved. + * + * Previously licensed under the ISC license by Qualcomm Atheros, Inc. + * + * + * Permission to use, copy, modify, and/or distribute this software for + * any purpose with or without fee is hereby granted, provided that the + * above copyright notice and this permission notice appear in all + * copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL + * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE + * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +/* + * This file was originally distributed by Qualcomm Atheros, Inc. + * under proprietary terms before Copyright ownership was assigned + * to the Linux Foundation. + */ + +#if !defined _WLAN_NV_TEMPLATE_BUILTIN_H +#define _WLAN_NV_TEMPLATE_BUILTIN_H + + +/*=========================================================================== + EDIT HISTORY FOR FILE + + This section contains comments describing changes made to the module. + Notice that changes are listed in reverse chronological order. + + $Header:$ $DateTime: $ $Author: $ + + when who what, where, why + -------- --- ----------------------------------------------- + 04/10/13 kumarpra nv built in creation +===========================================================================*/ + + +/* + ----------------------------------------- + This file is generated by nvTmplRun Parser + ----------------------------------------- + To be auto-generated, or + This is the source file and the header file can be generated from this + template file. + + Template constructs + 1. TABLE_: struct + 2. INDEX_ENUM: enums, e.g. {RATE_OFDM_6M,RATE_OFDM_54M} + 3. INDEX_INT: int, e.g.{min, max, increment} + 3. Basic data types: tANI_U8, tANI_S8, tANI_U32, tANI_S32 + 4. Storage types: + 4.1 SINGULAR: one element of basic data type + 4.2 ARRAY_1: one dimensional array, x-axis + 4.3 ARRAY_2: two dimensional array, (x, y) + 4.4 ARRAY_3: three dimensional array, (x, y, z) + 4.5 ARRAY_4: four dimensional array, (x, y, z, t) + + Implementation notes + 1. Flow of changing NV data format: (TBD) Either change the template and + generate the header file, or modify header file and auto-generate + the template. + 2. Flow of writing NV data: encode the template in the data stream, so the + NV data is "self-sufficient". No separate template, no compability + issue, no need of version control. + 3. Flow of reading NV data: parse the binary NV data stream based on the + template info in the data stream. + 4. The above NV logic is decoupled from the actual data content, a generic, + content ergonostic parser (reading) and encoder (writing). + The NV logic is common code shared by tools, s/w + (both host and firmware), and off-line utilities. + 5. NV data parsing and "acceptanace" into an s/w moduel data structure can + be "configured" in several ways: + 5.1 only total matching of all fields, otherwise, reject the whole data + stream (a table). + 5.2 partial matching of fields allowed and the rest fields assume + reasonal default values, + The choice can be determined later, but the capability is provided. + 6. We could also design in this selection on an individua table base. + To design such capability, reserve some header bits in the data stream. + 7. The NV data streams can be modified, replaced, or intact with a new data + stream of the same table ID added to NV data. + The choice can be determined later, but the NV scheme provides such + capability. + 8. The template construct definitions can be common to all tables + (tbd: in a common section) or table specific, or updated in a + subsequent format section. + The use cases are: + - An index enum (e.g. RF channels) is common to all tables when the NV + data is created. Later new enums are added (e.g. + additional channels), one can choose to add the new index enum for new + tables appended to the NV data, or replace the + old table with new template info and data. + The template precedence is table specific then common, and later + "common" overwrites "earlier" commmon. + - A new field is added to the table, the user decides to replace the + old table data, he can simply encode the template info in the + data stream. + - In the same scenario (a new field is added), the user decides to + append a new table, he can encode the template + in the new data table and append it to NV data, or write a new common + template section and append the data. + + Key "ingredients", (re-iterate the most important features and capabilities) + 1. How to parse the data is embedded in the NV data itself. It removes the + dependency on header file matching, + version checking, compatibility among tools, host and firmware. + 2. Table field ID enables "partial" data acceptance in an s/w module data + structure. Whether full matching or reject the whole table, or "partial" + acceptance, the capabiilty is in place and further ensures the robust + NV data extensibility and compatibility. + 3. The table granularity, data stream based NV data has variable length + and flexibility of modifying an existing table data, replacing the + whole data, or leaving the existing data table intact and appending + a new table. + Misc notes: + 1. For endianness, support only 4 bytes integer or 4 1-byte + 2. String identifier needs to be shortened to save storage + 3. string_field_name, field type, field storage class, storage size +*/ + + +#include "wlan_nv_types.h" + +typedef enum _nvFieldSizeEnums { + INDEX_ENUM_ALL = 0, + INDEX_ENUM_NUM_PHY_MAX_TX_CHAINS, + INDEX_ENUM_NUM_REG_DOMAINS, + INDEX_ENUM_NUM_RF_SUBBANDS, + INDEX_ENUM_NUM_RF_CHANNELS, + INDEX_ENUM_NUM_2_4GHZ_CHANNELS, + INDEX_ENUM_NUM_802_11_MODES, + INDEX_ENUM_NUM_HAL_PHY_RATES, + INDEX_ENUM_BUILTIN_LAST, + INDEX_ENUM_BUILTIN_MAX, +} _NV_FIELD_SIZE_ENUMS; + +#define INDEX_ENUM_MAX MAX(INDEX_ENUM_PREDEFINED_MAX, INDEX_ENUM_BUILTIN_MAX) + +int getEnumNoOfFields(int enumIdx); +extern _NV_TEMPLATE_ENUM NvEnumsBuiltIn[/*INDEX_ENUM_MAX*/][ENUM_ENTRIES_MAX]; + +typedef enum _nvTableIDs { + TABLE_sHalNv, + TABLE_sNvFields, + TABLE_sRegulatoryChannel, + TABLE_sRssiChannelOffsets, + TABLE_sCalData, + TABLE_sTxBbFilterMode, + TABLE_sOfdmCmdPwrOffset, + TABLE_sDefaultCountry, + TABLE_sFwConfig, + TABLE_tTpcPowerTable, + TABLE_tRateGroupPwr, + TABLE_tRateGroupPwrVR, + TABLE_sRegulatoryDomains, + TABLE_sHwCalValues, + TABLE_sNvTables, + TABLE_BUILTIN_LAST, + TABLE_BUILTIN_MAX, +} _NV_TABLE_ID; + +#define TABLES_MAX MAX(TABLE_PREDEFINED_MAX, TABLE_BUILTIN_MAX) + +int getTableNoOfFields(int tblIdx); +extern _NV_TEMPLATE_TABLE NvTablesBuiltIn[/*TABLES_MAX*/][TABLE_ENTRIES_MAX]; + +#endif //#if !defined(_WLAN_NV_TEMPLATEBUILTIN_H) diff --git a/CORE/VOSS/inc/wlan_nv_template_internal.h b/CORE/VOSS/inc/wlan_nv_template_internal.h new file mode 100644 index 000000000000..b66fc24229f3 --- /dev/null +++ b/CORE/VOSS/inc/wlan_nv_template_internal.h @@ -0,0 +1,331 @@ +/* + * Copyright (c) 2013, The Linux Foundation. All rights reserved. + * + * Previously licensed under the ISC license by Qualcomm Atheros, Inc. + * + * + * Permission to use, copy, modify, and/or distribute this software for + * any purpose with or without fee is hereby granted, provided that the + * above copyright notice and this permission notice appear in all + * copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL + * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE + * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +/* + * This file was originally distributed by Qualcomm Atheros, Inc. + * under proprietary terms before Copyright ownership was assigned + * to the Linux Foundation. + */ + +#if !defined _WLAN_NV_TEMPLATE_INTERNAL_H +#define _WLAN_NV_TEMPLATE_INTERNAL_H + +/* + Template constructs + 1. TABLE_: struct + 2. INDEX_ENUM: enums, e.g. {RATE_OFDM_6M,RATE_OFDM_54M} + 3. INDEX_INT: int, e.g.{min, max, increment} + 3. Basic data types: tANI_U8, tANI_S8, tANI_U32, tANI_S32 + 4. Storage types: + 4.1 SINGULAR: one element of basic data type + 4.2 ARRAY_1: one dimensional array, x-axis + 4.3 ARRAY_2: two dimensional array, (x, y) + 4.4 ARRAY_3: three dimensional array, (x, y, z) + + Implementation notes + 1. Flow of changing NV data format: (TBD) Either change the template and + generate the header file, or + modify header file and auto-generate the template. + 2. Flow of writing NV data: encode the template in the data stream, so the + NV data is "self-sufficient". + No separate template, no compability issue, no need of version control. + 3. Flow of reading NV data: parse the binary NV data stream based on the + template info in the data stream. + 4. The above NV logic is decoupled from the actual data content, a + generic, content ergonostic parser (reading) and encoder (writing). + The NV logic is common code shared by tools, s/w + (both host and firmware), and off-line utilities. + 5. NV data parsing and "acceptanace" into an s/w moduel data structure can + be "configured" in several ways: + 5.1 only total matching of all fields, otherwise, reject the whole data + stream (a table). + 5.2 partial matching of fields allowed and the rest fields assume + reasonal default values, + The choice can be determined later, but the capability is provided. + 6. We could also design in this selection on an individua table base. + To design such capability, reserve some header bits in the data stream. + 7. The NV data streams can be modified, replaced, or intact with a new + data stream of the same table ID added to NV data. + The choice can be determined later, but the NV scheme provides such + capability. + 8. The template construct definitions can be common to all tables + (tbd: in a common section) or table specific, or updated + in a subsequent format section. + The use cases are: + - An index enum (e.g. RF channels) is common to all tables when the NV + data is created. Later new enums are added (e.g. + additional channels), one can choose to add the new index enum for new + tables appended to the NV data, or replace the + old table with new template info and data. + The template precedence is table specific then common, and later + "common" overwrites "earlier" commmon. + - A new field is added to the table, the user decides to replace the old + table data, he can simply encode the template + info in the data stream. + - In the same scenario (a new field is added), the user decides to + append a new table, he can encode the template + in the new data table and append it to NV data, or write a new common + template section and append the data. + + Key "ingredients", (re-iterate the most important features and capabilities) + 1. How to parse the data is embedded in the NV data itself. It removes the + dependency on header file matching, + version checking, compatibility among tools, host and firmware. + 2. Table field ID enables "partial" data acceptance in an s/w module data + structure. Whether full matching or reject the whole table, or "partial" + acceptance, the capabiilty is in place and further ensures the robust + NV data extensibility and compatibility. + 3. The table granularity, data stream based NV data has variable length + and flexibility of modifying an existing table data, replacing + the whole data,or leaving the existing data table intact and + appending a new table. + Misc notes: + 1. For endianness, support only 4 bytes integer or 4 1-byte + 2. String identifier needs to be shortened to save storage + 3. string_field_name, field type, field storage class, storage size +*/ + +#include "wlan_nv_types.h" + +/* + * Stream header bitmap + * streamType + * bitmap[7] + * / \ + * 1: template 0: data + * bitmap[6] + * / \ + * 0: enum 1: table + * + */ +/* Stream header type[7], 0: data, 1: template */ +#define STREAM_HEADER_TYPE_MASK 0x80 +#define STREAM_HEADER_TYPE_LSB 7 +#define IsStreamTemplate(b) (((b) & (STREAM_HEADER_TYPE_MASK)) ? 1 : 0) + +/* Stream header template type [6], 0: enum; 1: table */ +#define STREAM_HEADER_TEMPLATE_TYPE_MASK 0x40 +#define STREAM_HEADER_TEMPLATE_TYPE_LSB 6 +#define IsTemplateStreamTable(b) (((b) & (STREAM_HEADER_TEMPLATE_TYPE_MASK)) ? 1 : 0) + +/* + * Field identifier bitmap + * + * field identifier + * bitmap[7] + * / \ + * 0: table/enum 1: basic data type + * bitmap[6:0] bitmap[6:0] + * | | + * tableIdx/ data types (U8, U32, etc.) + * enumIdx + */ +/* Field Identifier type [7] + * 0: table + * 1: basic data types + * Note that + * - bit[7] table value=0 makes the table ID following data header stream or + * template header stream identical to field ID + * - tableIdx 0 is the "table of all tables", a.k.a. table content of all + * table indexes + * - enumIdx 0 is the "enum of all enums", a.k.a. table content of all enum + * indexes + */ + +#define FIELD_ID_TYPE_MASK 0x80 +#define FIELD_ID_TYPE_LSB 7 +#define IsFieldTypeBasicData(b) (((b) & (FIELD_ID_TYPE_MASK)) ? 1 : 0) + +/* Field Identifier table index [6:0] */ +#define FIELD_ID_TABLE_OR_ENUM_IDX_MASK 0x7f +#define FIELD_ID_TABLE_OR_ENUM_IDX_LSB 0 +#define _TABLE_IDX(b) (((b) & ~FIELD_ID_TYPE_MASK) | ((b) & FIELD_ID_TABLE_OR_ENUM_IDX_MASK)) +#define IsIdxTableOfAllTables(b) (((b) & FIELD_ID_TABLE_OR_ENUM_IDX_MASK) ? 0 : 1) +#define IsIdxEnumOfAllEnums(b) (((b) & FIELD_ID_TABLE_OR_ENUM_IDX_MASK) ? 0 : 1) + +/* Field Identifier basic data types [6:0] + * 0: U8 + * 1: U32 + * 2: S8 + * 3: S32 + * 4: U16 + * 5: S16 + */ + +#define FIELD_ID_BASIC_DATA_TYPES_MASK 0x7F +#define FIELD_ID_BASIC_DATA_TYPES_LSB 0 + +typedef enum { + _FIELD_ID_DATA_TYPE_U8 = 0, + _FIELD_ID_DATA_TYPE_U32, + _FIELD_ID_DATA_TYPE_S8, + _FIELD_ID_DATA_TYPE_S32, + _FIELD_ID_DATA_TYPE_U16, + _FIELD_ID_DATA_TYPE_S16, + _FIELD_ID_DATA_TYPE_LAST, +} _FIELD_ID_BASIC_DATA_TYPE; + +#define TheBasicDataType(b) (((b) & (FIELD_ID_BASIC_DATA_TYPES_MASK)) >> FIELD_ID_BASIC_DATA_TYPES_LSB) +#define _ID_U8 ((FIELD_ID_TYPE_MASK) | (_FIELD_ID_DATA_TYPE_U8)) +#define _ID_U32 ((FIELD_ID_TYPE_MASK) | (_FIELD_ID_DATA_TYPE_U32)) +#define _ID_S8 ((FIELD_ID_TYPE_MASK) | (_FIELD_ID_DATA_TYPE_S8)) +#define _ID_S32 ((FIELD_ID_TYPE_MASK) | (_FIELD_ID_DATA_TYPE_S32)) +#define _ID_U16 ((FIELD_ID_TYPE_MASK) | (_FIELD_ID_DATA_TYPE_U16)) +#define _ID_S16 ((FIELD_ID_TYPE_MASK) | (_FIELD_ID_DATA_TYPE_S16)) + +/* + * field storage class + */ +typedef enum { + SINGULAR = 0, + ARRAY_1, + ARRAY_2, + ARRAY_3, + STORAGE_TYPE_LAST, +} _FIELD_ID_STORAGE_TYPE; + +#define _STORAGE_TYPE(b) ((b) & 0x3) +#define _STORAGE_SIZE1(byteLow, byteHigh) (((((byteHigh) >> 2) & 0x3) << 7) | (((byteLow) >> FIELD_SIZE_VALUE_LSB) & FIELD_SIZE_VALUE_MASK)) +#define _STORAGE_SIZE2(byteLow, byteHigh) (((((byteHigh) >> 4) & 0x3) << 7) | (((byteLow) >> FIELD_SIZE_VALUE_LSB) & FIELD_SIZE_VALUE_MASK)) +#define _STORAGE_SIZE3(byteLow, byteHigh) (((((byteHigh) >> 6) & 0x3) << 7) | (((byteLow) >> FIELD_SIZE_VALUE_LSB) & FIELD_SIZE_VALUE_MASK)) + +#define _ADD_SIZE1(b) ((((b) >> 7) & 0x3) << 2) +#define _ADD_SIZE2(b) ((((b) >> 7) & 0x3) << 4) +#define _ADD_SIZE3(b) ((((b) >> 7) & 0x3) << 6) + +/* + * Field storage size type [7] + * / \ + * 1: int 0: enum + * bitmap[6:0] bitmap[6:0] + * | | + * max int index enum index into enum tables + * + * Note that enum=0 makes the template enum ID following template stream byte + * identical to enum field storage size type + * + * Field storage size value [6:0] + */ +#define FIELD_SIZE_TYPE_MASK 0x80 +#define FIELD_SIZE_TYPE_LSB 7 +#define FIELD_SIZE_TYPE_BIT(t) (((t)<< (FIELD_SIZE_TYPE_LSB)) & (FIELD_SIZE_TYPE_MASK)) +#define IsFieldSizeInt(b) (((b) & (FIELD_SIZE_TYPE_MASK)) ? 1 : 0) + +typedef enum { + FIELD_SIZE_IDX_ENUM = 0, + FIELD_SIZE_IDX_INT = 1, +} FIELD_SIZE_TYPE; + +#define FIELD_SIZE_VALUE_MASK 0x7f +#define FIELD_SIZE_VALUE_LSB 0 +#define FIELD_SIZE_VALUE_BITS(val) (((val) << (FIELD_SIZE_VALUE_LSB)) & (FIELD_SIZE_VALUE_MASK)) + +/* + * NV table storage struct in an s/w module + */ +#define _TABLE_NAME_LEN 2 +#define _TABLE_FIELD_FULL_NAME_LEN 47 + +typedef struct _nvTemplateTableStructInternal { + tANI_U8 fieldName[_TABLE_NAME_LEN + 1]; + tANI_U8 fieldId; + tANI_U8 fieldStorageType; + tANI_U8 fieldStorageSize1; + tANI_U8 fieldStorageSize2; + tANI_U8 fieldStorageSize3; + tANI_U32 offset; //void *offset; + tANI_U8 fieldFullName[_TABLE_FIELD_FULL_NAME_LEN +1]; +} _NV_TEMPLATE_TABLE; + +#define _OFFSET_NOT_SET 0xFFFFFFFF +#define TABLE_PREDEFINED_MAX 50 +#define TABLE_ENTRIES_MAX 50 +#define _LIST_OF_TABLES_IDX 0 +#define _TABLE_FIELDS_POS 2 +#define _ENUM_START_POS 2 +#define _TABLE_FIELD_MIN_LEN 4 +#define _ENUM_MIN_LEN 3 + +#define _ENUM_NAME_LEN _TABLE_NAME_LEN +#define _ENUM_FULL_NAME_LEN 47 +typedef struct _nvTemplateEnumStruct { + tANI_U8 enumName[3]; // 2 char string + tANI_U8 enumValue; + tANI_U8 enumValuePeer; + tANI_U8 enumFullName[_ENUM_FULL_NAME_LEN +1]; +} _NV_TEMPLATE_ENUM; +#define INDEX_ENUM_PREDEFINED_MAX 20 +#define ENUM_ENTRIES_MAX 200 + +typedef enum { + _MIS_MATCH = 0, + _MATCH, +} _NV_TEMPLATE_PROCESS_RC; + +#define _NV_BIN_STREAM_HEADER_BYTE 0 +#define _NV_BIN_STREAM_TABLE_ID_BYTE 1 +#define _NV_BIN_STREAM_ENUM_ID_BYTE 1 +#define _NV_BIN_DATA_STREAM_TABLEID_BYTE 1 +#define _NV_BIN_ENUM_TEMPLATE_ENTRY_SIZE 3 +#define _NV_LIST_OF_TABLE_ID 0 + +/* + * Stream write + */ +#define _STREAM_HEADER_POS 0 +#define _ENUM_STREAM_HEADER_POS _STREAM_HEADER_POS +#define _TABLE_STREAM_HEADER_POS _STREAM_HEADER_POS +#define _TEMPLATE_INDEX_HEADER_POS 1 +#define _ENUM_INDEX_HEADER_POS _TEMPLATE_INDEX_HEADER_POS +#define _TABLE_INDEX_HEADER_POS _TEMPLATE_INDEX_HEADER_POS + +/* + * Additional typedef + */ +typedef struct _enumMetaData { + _NV_TEMPLATE_PROCESS_RC match; +} _ENUM_META_DATA; + +#define MAX(a, b) (((a) > (b)) ? (a) : (b)) +#define _NV_STREAM_LEN_MAX 35000 + +/* + * Error code should be expanded, this is the beginning set + */ +typedef enum { + _OK = 0, + _RESET_STREAM_FAILED, + _WRITE_STREAM_FAILED, + _STREAM_NOT_FIT_BUF, + _SW_BIN_MISMATCH, + _INSUFFICIENT_FOR_FIELD_PARSER_ERROR, + _TABLE_NON_EXIST_IN_TABLE_OF_ALL_TABLES, + _ENUM_NOT_FOUND_IN_BUILT_IN, +} _ErrorCode; + +/* + * Use the stream test stub + */ +//#define _USE_STREAM_STUB +#define RESET_STREAM(b) resetStream(b) +#define NEXT_STREAM(b,c) nextStream(b,c) + +#endif /*#if !defined(_WLAN_NV_TEMPLATE_INTERNAL_H)*/ diff --git a/CORE/VOSS/inc/wlan_nv_types.h b/CORE/VOSS/inc/wlan_nv_types.h new file mode 100644 index 000000000000..d5c6451142fe --- /dev/null +++ b/CORE/VOSS/inc/wlan_nv_types.h @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2013, The Linux Foundation. All rights reserved. + * + * Previously licensed under the ISC license by Qualcomm Atheros, Inc. + * + * + * Permission to use, copy, modify, and/or distribute this software for + * any purpose with or without fee is hereby granted, provided that the + * above copyright notice and this permission notice appear in all + * copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL + * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE + * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +/* + * This file was originally distributed by Qualcomm Atheros, Inc. + * under proprietary terms before Copyright ownership was assigned + * to the Linux Foundation. + */ + +#if !defined __WLAN_NV_TYPES_H +#define __WLAN_NV_TYPES_H + +#include "halLegacyPalTypes.h" +#include "halCompiler.h" +#include "vos_status.h" +#include + +typedef char tANI_BOOL; + +#ifndef TRUE +#define TRUE 1 +#endif + +#ifndef FALSE +#define FALSE 0 +#endif + +#define nul '\0' + +#endif diff --git a/CORE/VOSS/src/wlan_nv_parser.c b/CORE/VOSS/src/wlan_nv_parser.c new file mode 100644 index 000000000000..2f8fd1ef80fe --- /dev/null +++ b/CORE/VOSS/src/wlan_nv_parser.c @@ -0,0 +1,2145 @@ +/* + * Copyright (c) 2013, The Linux Foundation. All rights reserved. + * + * Previously licensed under the ISC license by Qualcomm Atheros, Inc. + * + * + * Permission to use, copy, modify, and/or distribute this software for + * any purpose with or without fee is hereby granted, provided that the + * above copyright notice and this permission notice appear in all + * copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL + * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE + * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +/* + * This file was originally distributed by Qualcomm Atheros, Inc. + * under proprietary terms before Copyright ownership was assigned + * to the Linux Foundation. + */ + +/*=========================================================================== + EDIT HISTORY FOR FILE + + This section contains comments describing changes made to the module. + Notice that changes are listed in reverse chronological order. + + $Header:$ $DateTime: $ $Author: $ + + when who what, where, why + -------- --- ----------------------------------------------------- + 04/10/13 kumarpra nv parser creation +===========================================================================*/ + +#include +#include "wlan_nv.h" + +/* + * NV stream layer service + */ +#include "wlan_nv_stream.h" +#include "wlan_nv_template_internal.h" +#include "wlan_nv_parser_internal.h" +#include "wlan_nv_template_api.h" +#include "wlan_nv_template_builtin.h" + +#define _RECURSIVE_DATA_TABLE_PARSING +// Recursive/iterative switch !! Default iterative +#define _RECURSIVE_VERSION + +/* + * Build process should have created the built-in templates in + * "wlan_nv_templateBuiltIn.c" + * Include its auto-generated companion header file + * "wlan_nv_templateBuiltIn.h" + * + * The main definitions are + * _NV_TEMPLATE_TABLE NvTablesBuiltIn[]; + * + */ + +/* + * Parsing control bitmap + */ +tANI_U32 gNVParsingControlLo; +static int subTableSize; +static int fieldSize; +static sHalNv *gpnvData_t; +/* store enum comparison results*/ +static _ENUM_META_DATA enumMetaDataFromBin[INDEX_ENUM_MAX]; + + +/* + * This data copy logic ignores the enum or int data types, + * but simply copy the whole chunk to the NV data structure + */ +typedef struct { + int idxSubFromBin; + int idxSubBuiltin; +} _SUBTABLES_QUEUE; + +pF_NumElemBasedOnStorageType numElemBasedOnStorageType[] = { + numElemSingular, // SINGULAR=0 + numElemArray1, // ARRAY_1=1 + numElemArray2, // ARRAY_2=2 + numElemArray3, // ARRAY_3=3 +}; + +static int sizeOneElemBasedOnFieldIdBasicDataType[] = { + 1, // _FIELD_ID_DATA_TYPE_U8 =0 + 4, // _FIELD_ID_DATA_TYPE_U32 + 1, // _FIELD_ID_DATA_TYPE_S8 + 4, // _FIELD_ID_DATA_TYPE_S32 + 2, // _FIELD_ID_DATA_TYPE_U16 + 2, // _FIELD_ID_DATA_TYPE_S16 +}; + +static _NV_STREAM_BUF nvStream[_NV_STREAM_LEN_MAX]; +static int subTableRd, subTableWr; + +#if !defined(_RECURSIVE_VERSION) +#define _SUBTABLES_MAX 32 +static _SUBTABLES_QUEUE subTablesQueue[_SUBTABLES_MAX]; +#endif + +/*============================================================================== +* +* Storage for NvTablesFromBin +* +*=============================================================================== +*/ + +/* + * Init NvTablesFromBin + * All entries are initialized to 0, pointers to NULL +*/ + +_NV_TEMPLATE_TABLE NvTablesFromBin[TABLES_MAX][TABLE_ENTRIES_MAX] = { + { /* TABLE_LAST*/ + {{nul}, 0, 0, 0, 0, 0, 0, {nul}}, + }, +}; + +static void initNvTablesFromBin(void) +{ + int i, j; + + for (i = 0; i < TABLES_MAX; i++) { + for (j = 0; j < TABLE_ENTRIES_MAX; j++) { + NvTablesFromBin[i][j].fieldName[0] = nul; + NvTablesFromBin[i][j].fieldName[1] = nul; + NvTablesFromBin[i][j].fieldName[2] = nul; + NvTablesFromBin[i][j].fieldId = 0; + NvTablesFromBin[i][j].fieldStorageType = 0; + NvTablesFromBin[i][j].fieldStorageSize1 = 0; + NvTablesFromBin[i][j].fieldStorageSize2 = 0; + NvTablesFromBin[i][j].fieldStorageSize3 = 0; + NvTablesFromBin[i][j].offset = 0; + NvTablesFromBin[i][j].fieldFullName[0] = nul; + NvTablesFromBin[i][j].fieldFullName[1] = nul; + NvTablesFromBin[i][j].fieldFullName[2] = nul; + } + } + + return; +} + +/*============================================================================== +* +* Storage for NvEnumsFromBin +* +* ============================================================================== +*/ + +/* + * Prepare the NV enum templates storage parsed from nv.bin + * They are used later for parsing the nv.bin data + * All entries are initialized to 0, pointers to NULL + */ + +_NV_TEMPLATE_ENUM NvEnumsFromBin[INDEX_ENUM_MAX][ENUM_ENTRIES_MAX] = { + { /* INDEX_ENUM_LAST */ + {{nul}, 0, 0, {nul}}, + }, +}; + +static void initNvEnumsFromBin(void) +{ + int i, j; + + for(i = 0; i < INDEX_ENUM_MAX; i++) { + for(j = 0; j < ENUM_ENTRIES_MAX; j++) { + NvEnumsFromBin[i][j].enumName[0] = nul; + NvEnumsFromBin[i][j].enumName[1] = nul; + NvEnumsFromBin[i][j].enumName[2] = nul; + NvEnumsFromBin[i][j].enumValue = 0; + NvEnumsFromBin[i][j].enumValuePeer = 0xFF; + NvEnumsFromBin[i][j].enumFullName[0] = nul; + } + } + return; +} + + +// ============================================================================= +// +// Parse template streams +// +// ============================================================================= + +/* + * Read nv.bin to extract the template info + * _NV_TEMPLATE_TABLE NvTablesFromBin[]; + */ + +/* + * Parse nv.bin data and extract to the build-in data storage + * + * There are two outcomes from earlier templates comparison operation. + * different or identical + * If identical, this operation will most likely take place. + * If different, + * One is to simply indicate to the user and abort reading the nv.bin data + * The other is to continue this operation, and extract the matching entries + * in nv.bin + */ + +/* + * The template based NV logic: + * - the s/w module has the built-in templates + * - nv.bin is read one stream at a time, sequentially from beginning to end + * - if the stream is an enum stream, + * - add to nv.bin template data structure + * - compare with the built in template, by the string ID + * - if two match, move on + * - if not match, indicate mismatch, act based on the global logic + * _ selection + * - if abort, exit here + * - if extract-matching-ones, + * - copy the enum from the built-in template over to a separate + * _ column + * - when the enum comparison is done, all correlated enums have + * - a built-in enum value + * - all mismtached ones have 0xff + * - else if the stream is a table + * - add to nv.bin template data structure + * - compare with the built-in template, by the field string ID + * - if two tables match, move on + * - if not match, indicate mismatch and proceed based on the global + * - logic selection + * - if abort, exit here + * - if extract-matching-ones, + * - copy the built-in template offset to a separate column + * - eles if the stream is a data stream + * - parse the data stream based on the accumulated NV templates so far, + * - note at this point, + * - 1. the accumulated templates may be incomplete, to make up the + * - whole NV structure + * - 2. some will be "overwritten" by later templates definitions + * - that change the earlier templates) + * - how to parse? + * - based on the nv.bin accumulated templates so far, + * - select the table definition from the data stream, + * - find the corresponding table template, + * - start parsing data based on the template's field string IDs, + * - field by field sequentially. + * - if the field is a nested table, + * - go inside to the next level + * - if the field is a basic type, + * - copy data of the given size to the offset which is the + * - offset in the built-in nv data storage + * - end of the logic + */ + +/*---------------------------------------------------------------------------- + \brief nvParser() - parse nv data provided in input buffer and store + \ output in sHalNv + \param inputEncodedbuffer, length, sHalNv - ptr to input stream, + \param length, sHalNv + \return success when successfully decode and copy to sHalNv structure + \sa +-----------------------------------------------------------------------------*/ + +VOS_STATUS nvParser(tANI_U8 *pnvEncodedBuf, tANI_U32 nvReadBufSize, + sHalNv *hal_nv) +{ + _STREAM_RC streamRc; + _NV_STREAM_BUF *pStream = &nvStream[0]; + tANI_U32 len; + _ErrorCode errCode = _OK; + VOS_STATUS ret = VOS_STATUS_SUCCESS; + gpnvData_t = hal_nv; + + // prepare storages for parsing nv.bin + initNvTablesFromBin(); + initNvEnumsFromBin(); + + // init stream read pointer + initReadStream(pnvEncodedBuf, nvReadBufSize); + + // get and process streams one by one + while (RC_FAIL != (streamRc = NEXT_STREAM(&len, &nvStream[0])) ) { + // need to copy, stream layer is freeing it + if (len > _NV_STREAM_LEN_MAX) { + errCode = _STREAM_NOT_FIT_BUF; + goto _error; + } + // template or data + if (IsStreamTemplate(pStream[_NV_BIN_STREAM_HEADER_BYTE])) { + if (_MIS_MATCH == processNvTemplate(pStream, len)) { + if (_FLAG_AND_ABORT(gNVParsingControlLo) ) { + errCode = _SW_BIN_MISMATCH; + break; + } + } + } + else { + processNvData(pStream, len); + } + } + +_error: + if (_OK != errCode) { + ret = VOS_STATUS_E_INVAL; + } + + // all done + return ret; +} + +static _NV_TEMPLATE_PROCESS_RC processNvTemplate(_NV_STREAM_BUF *pStream, + int len) +{ + // Table or enum + if (IsTemplateStreamTable(pStream[_NV_BIN_STREAM_HEADER_BYTE])) { + return processNvTemplateTable(pStream, len); + } + else { + return processNvTemplateEnum(pStream, len); + } +} + +/* ----------------------------------------------------------------------------- + * + * Parse one table template stream in nv.bin + * The length of table templates varies, based on the field ID class, + * field size type + */ + +static _NV_TEMPLATE_PROCESS_RC processNvTemplateTable(_NV_STREAM_BUF *pStream, + int len) +{ + _NV_TEMPLATE_PROCESS_RC rc = _MATCH; + char tableNameFromBin[_TABLE_NAME_LEN +1]; + int tableIdxFromBin; + + // construct the template table in the NvTablesFromBin + memset((void*)tableNameFromBin, '\0', (size_t) (_TABLE_NAME_LEN +1)); + tableIdxFromBin = constructATemplateTable(pStream, len, tableNameFromBin); + + // fetch the table name from the first entry, the Table of all tables + // search for the corresponding table in NvDataBuiltIn + if (tableIdxFromBin) { + rc = compareWithBuiltinTable(tableIdxFromBin, tableNameFromBin); + } + // done + return rc; +} + +static int getOffsetFromBuiltIn(char *tableNameFromBin) +{ + int offset = _OFFSET_NOT_SET; + int i; + + _NV_TEMPLATE_TABLE (*pTableBuiltin)[TABLE_ENTRIES_MAX] = NvTablesBuiltIn; + // search NvTablesBuiltIn for the same string named table, and its idx + for (i = 0; i < TABLE_ENTRIES_MAX; i++) { + if (nul == pTableBuiltin[0][i].fieldName[0]) { + break; + } + if (!strcmp(tableNameFromBin, pTableBuiltin[0][i].fieldName)) { + offset = pTableBuiltin[0][i].offset; + break; + } + } + return offset; +} + +/* + * Construct a table template in the NvTablesFromBin + * it returns the newly constructed table, for comparison with NvTablesBuiltIn + */ +static int constructATemplateTable(_NV_STREAM_BUF *pStream, int len, + char *tableStrName) +{ + int pos = 0; + _NV_TEMPLATE_TABLE (*pTable)[TABLE_ENTRIES_MAX] = NvTablesFromBin; + int tableIdx, entryIdx; + int i; + _ErrorCode errCode = _OK; + + tableIdx = (pStream[_NV_BIN_STREAM_TABLE_ID_BYTE] & + FIELD_ID_TABLE_OR_ENUM_IDX_MASK); + + if (IsIdxTableOfAllTables(tableIdx)) { + } + else { + // find the string name of the table + for (i = 0; i < TABLE_ENTRIES_MAX; i++) { + if (nul == pTable[0][i].fieldName[0]) { + break; + } + if ((pTable[0][i].fieldId & FIELD_ID_TABLE_OR_ENUM_IDX_MASK) == + tableIdx) { + strlcpy(tableStrName, pTable[0][i].fieldName, (_TABLE_NAME_LEN +1)); + break; + } + } + if (TABLE_ENTRIES_MAX == i) { + // if string name not found, don't know what to do + errCode = _TABLE_NON_EXIST_IN_TABLE_OF_ALL_TABLES; + goto _error; + } + } + + // check if the table is already populated + if (nul != pTable[tableIdx][0].fieldName[0]) { // there is data in that enty + // tbd: decision logic based on Parsing Control (bitmap) + } + + // overwrite table entry, tableIdx + pos = _TABLE_FIELDS_POS; + entryIdx = 0; + while (pos < len) { + if (!(pos <= (len - _TABLE_FIELD_MIN_LEN))) { + // error condition + errCode = _INSUFFICIENT_FOR_FIELD_PARSER_ERROR; + break; + } + + // populate the entry + memset(pTable[tableIdx][entryIdx].fieldName, '\0', + (size_t) (_TABLE_NAME_LEN + 1)); + memset(pTable[tableIdx][entryIdx].fieldFullName, '\0', + (size_t) (_TABLE_FIELD_FULL_NAME_LEN + 1)); + pTable[tableIdx][entryIdx].fieldName[0] = pStream[pos++]; + pTable[tableIdx][entryIdx].fieldName[1] = pStream[pos++]; + pTable[tableIdx][entryIdx].fieldId = pStream[pos++]; + pTable[tableIdx][entryIdx].fieldStorageType = pStream[pos++]; + pTable[tableIdx][entryIdx].fieldStorageSize1 = 0; + pTable[tableIdx][entryIdx].fieldStorageSize2 = 0; + pTable[tableIdx][entryIdx].fieldStorageSize3 = 0; + pTable[tableIdx][entryIdx].offset = + getOffsetFromBuiltIn(pTable[tableIdx][entryIdx].fieldName); + + if (SINGULAR == + _STORAGE_TYPE(pTable[tableIdx][entryIdx].fieldStorageType)) { + } + else if (ARRAY_1 == + _STORAGE_TYPE(pTable[tableIdx][entryIdx].fieldStorageType)) { + pTable[tableIdx][entryIdx].fieldStorageSize1 = pStream[pos++]; + } + else if (ARRAY_2 == + _STORAGE_TYPE(pTable[tableIdx][entryIdx].fieldStorageType)) { + pTable[tableIdx][entryIdx].fieldStorageSize1 = pStream[pos++]; + pTable[tableIdx][entryIdx].fieldStorageSize2 = pStream[pos++]; + } + else if (ARRAY_3 == + _STORAGE_TYPE(pTable[tableIdx][entryIdx].fieldStorageType)) { + pTable[tableIdx][entryIdx].fieldStorageSize1 = pStream[pos++]; + pTable[tableIdx][entryIdx].fieldStorageSize2 = pStream[pos++]; + pTable[tableIdx][entryIdx].fieldStorageSize3 = pStream[pos++]; + } + // + entryIdx++; + } + +_error: + if (_OK != errCode) { + } + + // all done + return tableIdx; +} + +/* ----------------------------------------------------------------------------- + * + * Table Compare logic: + * + * 1. the fields need to be in the same order. Looping through fields doesn't + * guarantee order. + * 2. whenever mismatch occurs in this "same-order" comparison, flag. + * 3. If extract matching entries' option is selected, proceed to nv.bin table + * and extract data. + * + * Note + * "compareWithBuiltinTable" is the initiating point. + * "compare2Tables" is the top level compare logic. + * it is naturally implemented as a recursive call, but out of stack + * overflow concern, + * it is also implemented as an iterative loop. + * + */ + +static _NV_TEMPLATE_PROCESS_RC compareWithBuiltinTable(int idxFromBin, + char *tableNameFromBin) +{ + int i; + _NV_TEMPLATE_TABLE (*pTableBuiltin)[TABLE_ENTRIES_MAX] = NvTablesBuiltIn; + int tableIdxBuiltin = 0; + _NV_TEMPLATE_PROCESS_RC rc = _MATCH; + _ErrorCode errCode = _OK; + + // search NvTablesBuiltIn for the same string named table, and its idx + for (i = 0; i < TABLE_ENTRIES_MAX; i++) { + if (nul == pTableBuiltin[0][i].fieldName[0]) { + break; + } + if (!strcmp(tableNameFromBin, pTableBuiltin[0][i].fieldName)) { + tableIdxBuiltin = (pTableBuiltin[0][i].fieldId & + FIELD_ID_TABLE_OR_ENUM_IDX_MASK); + break; + } + } + + // compare and copy values + if (!tableIdxBuiltin) { + errCode = _TABLE_NON_EXIST_IN_TABLE_OF_ALL_TABLES; + rc = _MIS_MATCH; + } + else { + subTableRd = 0; + subTableWr = 0; + + // fire the comparison logic + if (_MIS_MATCH == compare2Tables(idxFromBin, tableIdxBuiltin)) { + rc = _MIS_MATCH; + } + + // for iterative version + // return code (rc) should only be set to _MIS_MATCH when it happens at + // least once +#if !defined(_RECURSIVE_VERSION) + { + int idxSubFromBin, idxSubBuiltin; + while (subTableRd != subTableWr) { + idxSubFromBin = subTablesQueue[subTableRd].idxSubFromBin; + idxSubBuiltin = subTablesQueue[subTableRd].idxSubBuiltin; + if (_MIS_MATCH == compare2Tables(idxSubFromBin, idxSubBuiltin)) { + rc = _MIS_MATCH; + } + // increment read pointer + subTableRd = (subTableRd+1) % _SUBTABLES_MAX; + } + } +#endif //#if !defined(_RECURSIVE_VERSION) + } + +//_error: + if (_OK != errCode) { + //printf("Error %d \n", errCode); + } + + // + return rc; +} + +static _NV_TEMPLATE_PROCESS_RC compare2Tables(int idxFromBin, int idxBuiltin) +{ + int i, j; + _NV_TEMPLATE_TABLE (*pTableBuiltIn)[TABLE_ENTRIES_MAX]; + _NV_TEMPLATE_TABLE (*pTableFromBin)[TABLE_ENTRIES_MAX]; + _NV_TEMPLATE_PROCESS_RC rc = _MATCH; + + pTableBuiltIn = NvTablesBuiltIn; + pTableFromBin = NvTablesFromBin; + + for (i = 0; i < TABLE_ENTRIES_MAX; i++) { + if ((nul == pTableBuiltIn[idxBuiltin][i].fieldName[0]) || + // end of table occurs in either table + (nul == pTableFromBin[idxFromBin][i].fieldName[0])) { + // end of table occurs in either table + if ((nul == pTableBuiltIn[idxBuiltin][i].fieldName[0]) && + (nul == pTableFromBin[idxFromBin][i].fieldName[0])) { + rc = _MATCH; + } + else { + rc = _MIS_MATCH; + + for (j=0; joffset = pTableBuiltIn->offset; + +_end: + return rc; +} + +static _NV_TEMPLATE_PROCESS_RC compare2FieldIDType( + _NV_TEMPLATE_TABLE *pTableBuiltIn, + _NV_TEMPLATE_TABLE *pTableFromBin, int idxBuiltin, int idxFromBin) +{ + _NV_TEMPLATE_PROCESS_RC rc = _MATCH; + + if (IsFieldTypeBasicData(pTableBuiltIn->fieldId)) { + if (pTableBuiltIn->fieldId == pTableFromBin->fieldId) { + rc = _MATCH; + } + else { + rc = _MIS_MATCH; + } + } + else { // field is a table + int idxSubBuiltin = pTableBuiltIn->fieldId & + FIELD_ID_TABLE_OR_ENUM_IDX_MASK; + int idxSubFromBin = pTableFromBin->fieldId & + FIELD_ID_TABLE_OR_ENUM_IDX_MASK; +#if defined(_RECURSIVE_VERSION) + rc = compare2Tables(idxSubFromBin, idxSubBuiltin); +#else + { + subTablesQueue[subTableWr].idxSubFromBin = idxSubFromBin; + subTablesQueue[subTableWr].idxSubBuiltin = idxSubBuiltin; + subTableWr = (subTableWr +1) % _SUBTABLES_MAX; + } +#endif //#if defined(_RECURSIVE_VERSION) + } + + return rc; +} + + +static _NV_TEMPLATE_PROCESS_RC compare2FieldStorageTypeAndSizes( + _NV_TEMPLATE_TABLE *pTableBuiltIn, + _NV_TEMPLATE_TABLE *pTableFromBin, int idxBuiltIn, int idxFromBin) +{ + _NV_TEMPLATE_PROCESS_RC rc = _MATCH; + + if (_STORAGE_TYPE(pTableBuiltIn->fieldStorageType) == + _STORAGE_TYPE(pTableFromBin->fieldStorageType)) { + if (SINGULAR == _STORAGE_TYPE(pTableBuiltIn->fieldStorageType)) { + rc = _MATCH; + } + else if (ARRAY_1 == _STORAGE_TYPE(pTableBuiltIn->fieldStorageType)) { + if ((_MATCH == compare2StorageSize(idxBuiltIn, idxFromBin, + _STORAGE_SIZE1(pTableBuiltIn->fieldStorageSize1, + pTableBuiltIn->fieldStorageType), + _STORAGE_SIZE1(pTableFromBin->fieldStorageSize1, + pTableFromBin->fieldStorageType), + pTableBuiltIn->fieldStorageSize1, + pTableFromBin->fieldStorageSize1)) ) { + + rc = _MATCH; + } + } + else if (ARRAY_2 == _STORAGE_TYPE(pTableBuiltIn->fieldStorageType)) { + if ((_MATCH == compare2StorageSize(idxBuiltIn, idxFromBin, + _STORAGE_SIZE1(pTableBuiltIn->fieldStorageSize1, + pTableBuiltIn->fieldStorageType), + _STORAGE_SIZE1(pTableFromBin->fieldStorageSize1, + pTableFromBin->fieldStorageType), + pTableBuiltIn->fieldStorageSize1, + pTableFromBin->fieldStorageSize1)) && + (_MATCH == compare2StorageSize(idxBuiltIn, idxFromBin, + _STORAGE_SIZE2(pTableBuiltIn->fieldStorageSize2, + pTableBuiltIn->fieldStorageType), + _STORAGE_SIZE2(pTableFromBin->fieldStorageSize2, + pTableFromBin->fieldStorageType), + pTableBuiltIn->fieldStorageSize2, + pTableFromBin->fieldStorageSize2)) ) { + rc = _MATCH; + } + } + else if (ARRAY_3 == _STORAGE_TYPE(pTableBuiltIn->fieldStorageType)) { + if ((_MATCH == compare2StorageSize(idxBuiltIn, idxFromBin, + _STORAGE_SIZE1(pTableBuiltIn->fieldStorageSize1, + pTableBuiltIn->fieldStorageType), + _STORAGE_SIZE1(pTableFromBin->fieldStorageSize1, + pTableFromBin->fieldStorageType), + pTableBuiltIn->fieldStorageSize1, + pTableFromBin->fieldStorageSize1)) && + (_MATCH == compare2StorageSize(idxBuiltIn, idxFromBin, + _STORAGE_SIZE2(pTableBuiltIn->fieldStorageSize2, + pTableBuiltIn->fieldStorageType), + _STORAGE_SIZE2(pTableFromBin->fieldStorageSize2, + pTableFromBin->fieldStorageType), + pTableBuiltIn->fieldStorageSize2, + pTableFromBin->fieldStorageSize2)) && + (_MATCH == compare2StorageSize(idxBuiltIn, idxFromBin, + _STORAGE_SIZE3(pTableBuiltIn->fieldStorageSize3, + pTableBuiltIn->fieldStorageType), + _STORAGE_SIZE3(pTableFromBin->fieldStorageSize3, + pTableFromBin->fieldStorageType), + pTableBuiltIn->fieldStorageSize3, + pTableFromBin->fieldStorageSize3)) ) { + rc = _MATCH; + } + } + } + else { + rc = _MIS_MATCH; + } + return rc; +} + +static _NV_TEMPLATE_PROCESS_RC compare2StorageSize(int idxBuiltIn, + int idxFromBin, int sizeBuiltIn, + int sizeFromBin, tANI_U8 sizeBuiltInLowByte, tANI_U8 sizeFromBinLowByte) +{ + _NV_TEMPLATE_PROCESS_RC rc = _MATCH; + + if (IsFieldSizeInt(sizeBuiltInLowByte) && + IsFieldSizeInt(sizeFromBinLowByte)) { + if (sizeBuiltIn == sizeFromBin) { + rc = _MATCH; + } + else { + rc = _MIS_MATCH; + } + } + else if (!IsFieldSizeInt(sizeBuiltInLowByte) && + !IsFieldSizeInt(sizeFromBinLowByte)) { + // enums should have been compared when enum streams are parsed + // The implication is that the enum streams should go before tables' + rc = enumMetaDataFromBin[idxFromBin].match; + } + else { + rc = _MIS_MATCH; + } + + return rc; +} + +/* + * ---------------------------------------------------------------------------- + * + * Parse one enum template stream in nv.bin + */ +static _NV_TEMPLATE_PROCESS_RC processNvTemplateEnum(_NV_STREAM_BUF *pStream, + int len) +{ + _NV_TEMPLATE_PROCESS_RC rc = _MATCH; + char enumStr[_ENUM_NAME_LEN + 1]; + //_NV_TEMPLATE_ENUM *pEnum; + int enumIdx; + + // construct the enum template in the NvEnumsFromBin + memset((void*)enumStr, '\0', (size_t) (_ENUM_NAME_LEN + 1)); + enumIdx = constructATemplateEnum(pStream, len, enumStr); + + // Compare the enum template + // also record compare results for later use in the table + // templates parsing where + // the fields may be indexed by enums + // if enumIdx ==0, didn't construct any entry, + // (or only the first entry) + if (enumIdx) { + compareEnumWithBuiltin(enumStr, enumIdx); + } + + return rc; +} + +static void compareEnumWithBuiltin(char *enumStr, int enumIdxFromBin) +{ + int i; + int enumIdxBuiltin = 0; + _NV_TEMPLATE_ENUM (*pEnumBuiltin)[ENUM_ENTRIES_MAX] = NvEnumsBuiltIn; + _ErrorCode errCode = _OK; + + for (i = 0; i < ENUM_ENTRIES_MAX; i++) { + if (nul == pEnumBuiltin[0][i].enumName[0]) { + break; + } + if (!strcmp(enumStr, pEnumBuiltin[0][i].enumName)) { + enumIdxBuiltin = pEnumBuiltin[0][i].enumValue; + break; + } + } + if (!enumIdxBuiltin) { + errCode = _ENUM_NOT_FOUND_IN_BUILT_IN; + return; + } + else { + compare2EnumEntriesAndCopy(enumIdxFromBin, enumIdxBuiltin); + } + +//_error: + if (_OK != errCode) { + //printf("Error %d\n", errCode); + } + + return; +} + +static _NV_TEMPLATE_PROCESS_RC compare2EnumEntriesAndCopy(int idxFromBin, + int idxBuiltin) +{ + int i,j; + _NV_TEMPLATE_PROCESS_RC rc = _MATCH; + _NV_TEMPLATE_ENUM (*enumsFromBin)[ENUM_ENTRIES_MAX] = NvEnumsFromBin; + _NV_TEMPLATE_ENUM (*enumsBuiltin)[ENUM_ENTRIES_MAX] = NvEnumsBuiltIn; + + // need to go through all enums + for (i = 0; i < ENUM_ENTRIES_MAX; i++) { + // end conditions: either both reach the end (match), + // or one of them reaching the end (mismatch) + if ((nul == enumsBuiltin[idxBuiltin][i].enumName[0]) || + (nul == enumsFromBin[idxFromBin][i].enumName[0])) { + if ((nul == enumsBuiltin[idxBuiltin][i].enumName[0]) && + (nul == enumsFromBin[idxFromBin][i].enumName[0])) { + // fully matched + rc = _MATCH; + break; + } + else { + rc = _MIS_MATCH; + for (j = 0; j < ENUM_ENTRIES_MAX; j++) { + if (nul == enumsBuiltin[idxBuiltin][j].enumName[0]) { + break; + } + if (!strcmp((const char*)enumsFromBin[idxFromBin][i].enumName, + (const char*)enumsBuiltin[idxBuiltin][j].enumName)) { + enumsFromBin[idxFromBin][i].enumValuePeer = + enumsBuiltin[idxBuiltin][j].enumValue; + break; + } + } + break; + } + } + else { + if (!strcmp(enumsBuiltin[idxBuiltin][i].enumName, + enumsFromBin[idxFromBin][i].enumName)) { + // copy builtIn enum value to fromBin + enumsFromBin[idxFromBin][i].enumValuePeer = + enumsBuiltin[idxBuiltin][i].enumValue; + } + else { + // mismatch, but still loop through the whole enum list + // for the "ahead" and "behind" scenarios + rc = _MIS_MATCH; + for (j = 0; j < ENUM_ENTRIES_MAX; j++) { + if (nul == enumsBuiltin[idxBuiltin][j].enumName[0]) { + break; + } + if (!strcmp(enumsFromBin[idxFromBin][i].enumName, + enumsBuiltin[idxBuiltin][j].enumName)) { + enumsFromBin[idxFromBin][i].enumValuePeer = + enumsBuiltin[idxBuiltin][j].enumValue; + break; + } + } + } + } + } + + // record match or mismatch for later data parsing use + enumMetaDataFromBin[idxFromBin].match = rc; + + // all done + return rc; +} + +static int constructATemplateEnum(_NV_STREAM_BUF *pStream, int len, + char *enumStr) +{ + int pos = 0; + _NV_TEMPLATE_ENUM (*pEnum)[ENUM_ENTRIES_MAX]; + int enumIdx = 0; + int i; + int entryIdx; + _ErrorCode errCode = _OK; + + enumIdx = (pStream[_NV_BIN_STREAM_ENUM_ID_BYTE] & + FIELD_ID_TABLE_OR_ENUM_IDX_MASK); + pEnum = NvEnumsFromBin; + + // find its string name + // the logic: + // since the nv.bin doesn't encode the enum string name in the actual enum + // stream, only the first "enum of all enums" + // has the names of all enums. + if (IsIdxEnumOfAllEnums(enumIdx)) { + } + else { + for (i = 0; i < ENUM_ENTRIES_MAX; i++) { + if (nul == pEnum[0][i].enumName[0]) { + break; + } + if (pEnum[0][i].enumValue == enumIdx) { + strlcpy(enumStr, pEnum[0][i].enumName,(_ENUM_NAME_LEN + 1)); + break; + } + } + if (ENUM_ENTRIES_MAX == i) { + // without a string name, don't know what to do with the enum indexed + errCode = _ENUM_NOT_FOUND_IN_BUILT_IN; + goto _error; + } + } + + // Found the enum string name, now parsing decision time ... + // Is the entry already populated? + if (nul != pEnum[enumIdx][0].enumName[0]) { // there is data in that entry + // TBD: + // the logic here depends on how we support "parsing data based on the + // latest template". + // one way is to overwrite the template, so the subsequent parsing will + // be based on the "latest". + // the second way is to "append" the template, and the parsing should + // always be based on the "last" of the same name + // for simplicity, support the first approach for now. + // + // the logic: + // based on the parsing control (bitmap), we may proceed on overwriting + // enums with blind faith that the writing logic is correct, + // or ignore the appended. + // + } + + // overwrite entry, enumIdx + pos = _ENUM_START_POS; + entryIdx = 0; + while (pos < len) { + if (!(pos <= (len - _ENUM_MIN_LEN))) { + // error condition + errCode = _INSUFFICIENT_FOR_FIELD_PARSER_ERROR; + break; + } + + // populate the entry + memset(pEnum[enumIdx][entryIdx].enumName, '\0', + (size_t) (_ENUM_NAME_LEN +1)); + memset(pEnum[enumIdx][entryIdx].enumFullName, '\0', + (size_t) (_ENUM_FULL_NAME_LEN +1)); + pEnum[enumIdx][entryIdx].enumName[0] = pStream[pos++]; + pEnum[enumIdx][entryIdx].enumName[1] = pStream[pos++]; + pEnum[enumIdx][entryIdx].enumValue = pStream[pos++]; + entryIdx++; + } + +_error: + if (_OK != errCode) { + //printf("Error %d\n", errCode); + } + + // all done + return enumIdx; +} + +/* ----------------------------------------------------------------------------- + * + * Process data stream + * The purpose is to copy nv.bin data into built in NV data structure. + * This is the parser function. + * + * Next phase: + * With NV data in the s/w module data structure, nv.bin conforming + * to the new format can be generated. That is the nv.bin generation logic.) + * + * Data stream has the following format + * + * delimiter|streamHeader|tableID|data....|CRC|delimiter + * Note + * 1. delimiters are not present in the stream data, pStream. + * 2. nested tables do NOT have table IDs with them. + * + */ +// NV data, per built in templates +// Recursive table parsing, which is naturally depth-first +// If iterative, a bit hard to implement + +static void parseSubDataTable4Size(int tableIdx, int numElem) +{ + _NV_TEMPLATE_TABLE (*pTable)[TABLE_ENTRIES_MAX] = NvTablesFromBin; + int idxSubTable; + int i; + int numSubElem = 0, idx=0; + + // "apply" template to data -- parsing the actual NV data, + // so far we have been parsing and building templates + for (i = 0; i < TABLE_ENTRIES_MAX; i++) { + if (nul == pTable[tableIdx][i].fieldName[0]) { + // data parsing done for this stream + break; + } + if (IsFieldTypeBasicData(pTable[tableIdx][i].fieldId)) { + getBasicDataSize(&(pTable[tableIdx][i])); + } + else { + // number of element + idx = + _STORAGE_TYPE(pTable[tableIdx][i].fieldStorageType); + numSubElem = numElemBasedOnStorageType[idx]( + &(pTable[tableIdx][i]), 1); + // get size of the sub-table + idxSubTable = (pTable[tableIdx][i].fieldId & + FIELD_ID_TABLE_OR_ENUM_IDX_MASK); + // recursive calls for the total size of the subtable + parseSubDataTable4Size(idxSubTable, numSubElem); + } + } + // update subTableSize for the number of elements + subTableSize *= numElem; + + return; +} + +static void copyDataToBuiltInFromBin(int tableIdx,int fieldId, + _NV_STREAM_BUF *pStream, int *pos, int addOffset, int tableBaseOffset) +{ + int i,j,k,storageType; + int idx=0, size1=0, size2=0, size3=0; + int enumIdx1=0, enumIdx2=0, enumIdx3=0, sizeOneElem=0; + int isFirstFieldEnum=0,isSecondFieldEnum=0,isThirdFieldEnum=0; + int index,index1,index2; + int dindex,dindex1,dindex2,totalSize; + int offset=0,sizeBuiltIn,tableIdxBuiltIn,fieldIdBuiltIn; + int idxBuiltIn=0, size1BuiltIn=0, size2BuiltIn=0, size3BuiltIn=0; + int size1Bin=0, size2Bin=0, size3Bin=0, numElemBuiltIn; + int sizeOneElemBuiltIn=0, field; + unsigned char *ptr, *dptr; + _NV_TEMPLATE_TABLE (*pTable)[TABLE_ENTRIES_MAX] = NvTablesFromBin; + _NV_TEMPLATE_TABLE (*pTableBuiltIn)[TABLE_ENTRIES_MAX] = NvTablesBuiltIn; + + storageType = _STORAGE_TYPE(pTable[tableIdx][fieldId].fieldStorageType); + field = pTable[tableIdx][fieldId].fieldId; + sizeOneElem = sizeOneElemBasedOnFieldIdBasicDataType[field & + FIELD_ID_TABLE_OR_ENUM_IDX_MASK]; + sizeBuiltIn = getBuiltInFieldCount(tableIdx, + pTable[tableIdx][fieldId].fieldName, + &tableIdxBuiltIn,&fieldIdBuiltIn,&numElemBuiltIn); + + field = pTableBuiltIn[tableIdxBuiltIn][fieldIdBuiltIn].fieldId; + sizeOneElemBuiltIn = sizeOneElemBasedOnFieldIdBasicDataType[field & + FIELD_ID_TABLE_OR_ENUM_IDX_MASK]; + + if (storageType == SINGULAR ) { + ptr = (unsigned char*)((int)gpnvData_t + tableBaseOffset + addOffset); + dptr = (unsigned char *)&pStream[*pos]; + + if (IsFieldTypeBasicData(pTable[tableIdx][fieldId].fieldId)) { + idx = _STORAGE_TYPE(pTable[tableIdx][fieldId].fieldStorageType); + size1Bin = numElemBasedOnStorageType[idx]( + &(pTable[tableIdx][fieldId]), 1); + field = pTable[tableIdx][fieldId].fieldId; + sizeOneElem = sizeOneElemBasedOnFieldIdBasicDataType[field & + FIELD_ID_TABLE_OR_ENUM_IDX_MASK]; + + idxBuiltIn = _STORAGE_TYPE( + pTableBuiltIn[tableIdxBuiltIn][fieldIdBuiltIn].fieldStorageType); + size1BuiltIn = numElemBasedOnStorageType[idx]( + &(pTableBuiltIn[tableIdxBuiltIn][fieldIdBuiltIn]), 0); + + size1 = size1Bin; + if (size1 > size1BuiltIn) { + size1 = size1BuiltIn; + } + } + totalSize = size1 * sizeOneElem; + + offset = 0; + for (i = 0; i < size1; i++) { + memcpy(&ptr[offset], &dptr[offset], sizeOneElem); + offset = offset + sizeOneElem; + } + + *pos = *pos + (size1Bin * sizeOneElem); + } + else { + if (ARRAY_1 == storageType) { + ptr = (unsigned char*)((int)gpnvData_t + tableBaseOffset + addOffset); + dptr = (unsigned char *)&pStream[*pos]; + + idx = _STORAGE_SIZE1(pTable[tableIdx][fieldId].fieldStorageSize1, + pTable[tableIdx][fieldId].fieldStorageType); + size1Bin = getNumElemOutOfStorageSize(idx, + pTable[tableIdx][fieldId].fieldStorageSize1, 1); + + idx = _STORAGE_SIZE1( + pTableBuiltIn[tableIdxBuiltIn][fieldIdBuiltIn].fieldStorageSize1, + pTableBuiltIn[tableIdxBuiltIn][fieldIdBuiltIn].fieldStorageType); + + size1BuiltIn = getNumElemOutOfStorageSize(idx, + pTableBuiltIn[tableIdxBuiltIn][fieldIdBuiltIn].fieldStorageSize1, 0); + + size1 = size1Bin; + + if (!IsFieldSizeInt(pTable[tableIdx][fieldId].fieldStorageSize1)) { + enumIdx1 = ((pTable[tableIdx][fieldId].fieldStorageSize1 & + FIELD_SIZE_VALUE_MASK) >> FIELD_SIZE_VALUE_LSB); + isFirstFieldEnum = 1; + } + else { + isFirstFieldEnum = 0; + if (size1 > size1BuiltIn) { + size1 = size1BuiltIn; + } + } + + offset = 0; + for (i = 0; i < size1; i++) { + if (isFirstFieldEnum) { + if (NvEnumsFromBin[enumIdx1][i].enumValuePeer != 0xFF) { + index = NvEnumsFromBin[enumIdx1][i].enumValuePeer; + dindex = NvEnumsFromBin[enumIdx1][i].enumValue; + + index = index * sizeOneElem; + dindex = dindex * sizeOneElem; + + memcpy(&ptr[index], &dptr[dindex], sizeOneElem); + } + } + else { + memcpy(&ptr[offset], &dptr[offset], sizeOneElem); + offset = offset + sizeOneElem; + } + } + + *pos = *pos + (size1Bin * sizeOneElem); + } + else if (ARRAY_2 == storageType) { + ptr = (unsigned char*)((int)gpnvData_t + tableBaseOffset + addOffset); + dptr = (unsigned char *)&pStream[*pos]; + + idx = _STORAGE_SIZE1(pTable[tableIdx][fieldId].fieldStorageSize1, + pTable[tableIdx][fieldId].fieldStorageType); + size1Bin = getNumElemOutOfStorageSize(idx, + pTable[tableIdx][fieldId].fieldStorageSize1, 1); + + idx = _STORAGE_SIZE2(pTable[tableIdx][fieldId].fieldStorageSize2, + pTable[tableIdx][fieldId].fieldStorageType); + + size2Bin = getNumElemOutOfStorageSize(idx, + pTable[tableIdx][fieldId].fieldStorageSize2, 1); + + idx = _STORAGE_SIZE1( + pTableBuiltIn[tableIdxBuiltIn][fieldIdBuiltIn].fieldStorageSize1, + pTableBuiltIn[tableIdxBuiltIn][fieldIdBuiltIn].fieldStorageType); + + size1BuiltIn = getNumElemOutOfStorageSize(idx, + pTableBuiltIn[tableIdxBuiltIn][fieldIdBuiltIn].fieldStorageSize1, 0); + + idx = _STORAGE_SIZE2( + pTableBuiltIn[tableIdxBuiltIn][fieldIdBuiltIn].fieldStorageSize2, + pTableBuiltIn[tableIdxBuiltIn][fieldIdBuiltIn].fieldStorageType); + + size2BuiltIn = getNumElemOutOfStorageSize(idx, + pTableBuiltIn[tableIdxBuiltIn][fieldIdBuiltIn].fieldStorageSize2, 0); + + size1 = size1Bin; + size2 = size2Bin; + + if (!IsFieldSizeInt(pTable[tableIdx][fieldId].fieldStorageSize1)) { + enumIdx1 = ((pTable[tableIdx][fieldId].fieldStorageSize1 & + FIELD_SIZE_VALUE_MASK) >> FIELD_SIZE_VALUE_LSB); + isFirstFieldEnum = 1; + } + else { + isFirstFieldEnum = 0; + if (size1 > size1BuiltIn) { + size1 = size1BuiltIn; + } + } + + if (!IsFieldSizeInt(pTable[tableIdx][fieldId].fieldStorageSize2)) { + enumIdx2 = ((pTable[tableIdx][fieldId].fieldStorageSize2 & + FIELD_SIZE_VALUE_MASK) >> FIELD_SIZE_VALUE_LSB); + isSecondFieldEnum = 1; + } + else { + isSecondFieldEnum = 0; + if (size2 > size2BuiltIn) { + size2 = size2BuiltIn; + } + } + + offset = 0; + + for (i = 0; i < size1; i++) { + if (isFirstFieldEnum) { + if (NvEnumsFromBin[enumIdx1][i].enumValuePeer == 0xFF) { + continue; + } + + index = NvEnumsFromBin[enumIdx1][i].enumValuePeer; + dindex = NvEnumsFromBin[enumIdx1][i].enumValue; + } + else { + index = dindex = i; + } + + for (j = 0; j < size2; j++) { + if (isSecondFieldEnum) { + if (NvEnumsFromBin[enumIdx2][j].enumValuePeer == 0xFF) { + continue; + } + + index1 = NvEnumsFromBin[enumIdx2][j].enumValuePeer; + dindex1 = NvEnumsFromBin[enumIdx2][j].enumValue; + } + else { + index1 = dindex1 = j; + } + + memcpy(&ptr[(index1 + index * size2BuiltIn)*sizeOneElem], + &dptr[(dindex1+dindex*size2Bin)*sizeOneElem], sizeOneElem); + offset = offset + sizeOneElem; + } + } + + *pos = *pos + size2Bin * size1Bin * sizeOneElem; + } + else if (ARRAY_3 == storageType) { + ptr = (unsigned char*)((int)gpnvData_t + tableBaseOffset + addOffset); + dptr = (unsigned char *)&pStream[*pos]; + + idx = _STORAGE_SIZE1(pTable[tableIdx][fieldId].fieldStorageSize1, + pTable[tableIdx][fieldId].fieldStorageType); + size1Bin = getNumElemOutOfStorageSize(idx, + pTable[tableIdx][fieldId].fieldStorageSize1, 1); + + idx = _STORAGE_SIZE2(pTable[tableIdx][fieldId].fieldStorageSize2, + pTable[tableIdx][fieldId].fieldStorageType); + size2Bin = getNumElemOutOfStorageSize(idx, + pTable[tableIdx][fieldId].fieldStorageSize2, 1); + + idx = _STORAGE_SIZE3(pTable[tableIdx][fieldId].fieldStorageSize3, + pTable[tableIdx][fieldId].fieldStorageType); + size3Bin = getNumElemOutOfStorageSize(idx, + pTable[tableIdx][fieldId].fieldStorageSize3, 1); + + idx = _STORAGE_SIZE1( + pTableBuiltIn[tableIdxBuiltIn][fieldIdBuiltIn].fieldStorageSize1, + pTableBuiltIn[tableIdxBuiltIn][fieldIdBuiltIn].fieldStorageType); + + size1BuiltIn = getNumElemOutOfStorageSize(idx, + pTableBuiltIn[tableIdxBuiltIn][fieldIdBuiltIn].fieldStorageSize1, + 0); + + idx = _STORAGE_SIZE2( + pTableBuiltIn[tableIdxBuiltIn][fieldIdBuiltIn].fieldStorageSize2, + pTableBuiltIn[tableIdxBuiltIn][fieldIdBuiltIn].fieldStorageType); + + size2BuiltIn = getNumElemOutOfStorageSize(idx, + pTableBuiltIn[tableIdxBuiltIn][fieldIdBuiltIn].fieldStorageSize2, + 0); + + idx = _STORAGE_SIZE3( + pTableBuiltIn[tableIdxBuiltIn][fieldIdBuiltIn].fieldStorageSize3, + pTableBuiltIn[tableIdxBuiltIn][fieldIdBuiltIn].fieldStorageType); + + size3BuiltIn = getNumElemOutOfStorageSize(idx, + pTableBuiltIn[tableIdxBuiltIn][fieldIdBuiltIn].fieldStorageSize3, + 0); + + size1 = size1Bin; + size2 = size2Bin; + size3 = size3Bin; + + if (!IsFieldSizeInt(pTable[tableIdx][fieldId].fieldStorageSize1)) { + enumIdx1 = ((pTable[tableIdx][fieldId].fieldStorageSize1 & + FIELD_SIZE_VALUE_MASK) >> FIELD_SIZE_VALUE_LSB); + isFirstFieldEnum = 1; + } + else { + isFirstFieldEnum = 0; + if (size1 > size1BuiltIn) { + size1 = size1BuiltIn; + } + } + + if (!IsFieldSizeInt(pTable[tableIdx][fieldId].fieldStorageSize2)) { + enumIdx2 = ((pTable[tableIdx][fieldId].fieldStorageSize2 & + FIELD_SIZE_VALUE_MASK) >> FIELD_SIZE_VALUE_LSB); + isSecondFieldEnum = 1; + } + else { + isSecondFieldEnum = 0; + if (size2 > size2BuiltIn) { + size2 = size2BuiltIn; + } + } + + if (!IsFieldSizeInt(pTable[tableIdx][fieldId].fieldStorageSize3)) { + enumIdx3 = ((pTable[tableIdx][fieldId].fieldStorageSize3 & + FIELD_SIZE_VALUE_MASK) >> FIELD_SIZE_VALUE_LSB); + isThirdFieldEnum = 1; + } + else { + isThirdFieldEnum = 0; + if (size3 > size3BuiltIn) { + size3 = size3BuiltIn; + } + } + + offset = 0; + for (i = 0; i < size1; i++) { + if (isFirstFieldEnum) { + if (NvEnumsFromBin[enumIdx1][i].enumValuePeer == 0xFF) { + continue; + } + + index = NvEnumsFromBin[enumIdx1][i].enumValuePeer; + dindex = NvEnumsFromBin[enumIdx1][i].enumValue; + } + else { + index = dindex = i; + } + + for (j = 0; j < size2; j++) { + if (isSecondFieldEnum) { + if (NvEnumsFromBin[enumIdx2][j].enumValuePeer == 0xFF) { + continue; + } + + index1 = NvEnumsFromBin[enumIdx2][j].enumValuePeer; + dindex1 = NvEnumsFromBin[enumIdx2][j].enumValue; + } + else { + index1 = dindex1 = j; + } + + for (k = 0; k < size3; k++) { + if (isThirdFieldEnum) { + if (NvEnumsFromBin[enumIdx2][j].enumValuePeer == 0xFF) { + continue; + } + + index2 = NvEnumsFromBin[enumIdx3][k].enumValuePeer; + dindex2 = NvEnumsFromBin[enumIdx3][k].enumValue; + } + else { + index2 = dindex2 = k; + } + + memcpy(&ptr[(index2 + (index1 * size2BuiltIn) + + (index * size3BuiltIn * size2BuiltIn)) * sizeOneElem], + &dptr[(dindex2 + (dindex1 * size2Bin) + + (dindex * size3Bin * size2Bin))*sizeOneElem], + sizeOneElem); + + offset = offset + sizeOneElem; + } + } + } + + *pos = *pos + size1Bin * size2Bin * size3Bin * sizeOneElem; + } + else { + } + } +} + +// search NvTablesBuiltIn for the same string named table, and its idx +static int getBuiltInFieldCount (int tableIdxBin, char *tableNameFromBin, + int *tblIdBuiltIn, int *fieldIdBuitIn, int *numElements) +{ + int i,idx,numElem,tableIdxBuiltin=0,fieldCnt; + _NV_TEMPLATE_TABLE (*pTableBin)[TABLE_ENTRIES_MAX] = NvTablesFromBin; + _NV_TEMPLATE_TABLE (*pTable)[TABLE_ENTRIES_MAX] = NvTablesBuiltIn; + int found=0, fieldIndex = 0; + + for (i = 0; i < TABLE_ENTRIES_MAX; i++) { + if (nul == pTableBin[0][i].fieldName[0]) { + break; + } + + if ((pTableBin[0][i].fieldId & + FIELD_ID_TABLE_OR_ENUM_IDX_MASK) == tableIdxBin) { + found = 1; + break; + } + } + + if (!found) { + return -1; + } + + //fieldName index got from tableId from Bin + fieldIndex = i; + found = 0; + + for (i=0;i> FIELD_SIZE_VALUE_LSB); + } + } + else if (ARRAY_2 == storageType) { + idx = _STORAGE_SIZE1(pTable[tableIdx][fieldId].fieldStorageSize1, + pTable[tableIdx][fieldId].fieldStorageType); + size1 = getNumElemOutOfStorageSize(idx, + pTable[tableIdx][fieldId].fieldStorageSize1,nvBin); + + idx = _STORAGE_SIZE2(pTable[tableIdx][fieldId].fieldStorageSize2, + pTable[tableIdx][fieldId].fieldStorageType); + + size2 = getNumElemOutOfStorageSize(idx, + pTable[tableIdx][fieldId].fieldStorageSize2,nvBin); + + if (!IsFieldSizeInt(pTable[tableIdx][fieldId].fieldStorageSize1)) { + enumIdx1 = ((pTable[tableIdx][fieldId].fieldStorageSize1 & + FIELD_SIZE_VALUE_MASK) >> FIELD_SIZE_VALUE_LSB); + } + + if (!IsFieldSizeInt(pTable[tableIdx][fieldId].fieldStorageSize2)) { + enumIdx2 = ((pTable[tableIdx][fieldId].fieldStorageSize2 & + FIELD_SIZE_VALUE_MASK) >> FIELD_SIZE_VALUE_LSB); + } + } + else if (ARRAY_3 == storageType) { + idx = _STORAGE_SIZE1(pTable[tableIdx][fieldId].fieldStorageSize1, + pTable[tableIdx][fieldId].fieldStorageType); + size1 = getNumElemOutOfStorageSize(idx, + pTable[tableIdx][fieldId].fieldStorageSize1,nvBin); + + idx = _STORAGE_SIZE2(pTable[tableIdx][fieldId].fieldStorageSize2, + pTable[tableIdx][fieldId].fieldStorageType); + size2 = getNumElemOutOfStorageSize(idx, + pTable[tableIdx][fieldId].fieldStorageSize2,nvBin); + + idx = _STORAGE_SIZE3(pTable[tableIdx][fieldId].fieldStorageSize3, + pTable[tableIdx][fieldId].fieldStorageType); + size3 = getNumElemOutOfStorageSize(idx, + pTable[tableIdx][fieldId].fieldStorageSize3,nvBin); + + if (!IsFieldSizeInt(pTable[tableIdx][fieldId].fieldStorageSize1)) { + enumIdx1 = ((pTable[tableIdx][fieldId].fieldStorageSize1 & + FIELD_SIZE_VALUE_MASK) >> FIELD_SIZE_VALUE_LSB); + } + + if (!IsFieldSizeInt(pTable[tableIdx][fieldId].fieldStorageSize2)) { + enumIdx2 = ((pTable[tableIdx][fieldId].fieldStorageSize2 & + FIELD_SIZE_VALUE_MASK) >> FIELD_SIZE_VALUE_LSB); + } + + if (!IsFieldSizeInt(pTable[tableIdx][fieldId].fieldStorageSize3)) { + enumIdx3 = ((pTable[tableIdx][fieldId].fieldStorageSize3 & + FIELD_SIZE_VALUE_MASK) >> FIELD_SIZE_VALUE_LSB); + } + } + else { + } + } + + if (IsFieldTypeBasicData(pTable[tableIdx][fieldId].fieldId)) { + field = pTable[tableIdx][fieldId].fieldId; + sizeOneElem = sizeOneElemBasedOnFieldIdBasicDataType[field & + FIELD_ID_TABLE_OR_ENUM_IDX_MASK]; + if ( size3 ) { + fieldSize = fieldSize + size3 * size2 * size1 * sizeOneElem; + } + else if ( size2 ) { + fieldSize = fieldSize + size2 * size1 * sizeOneElem; + } + else if ( size1 ) { + fieldSize = fieldSize + size1 * sizeOneElem; + } + else { + } + } + else { + idxSubTable = (pTable[tableIdx][fieldId].fieldId & + FIELD_ID_TABLE_OR_ENUM_IDX_MASK); + + for (j=0; j> FIELD_SIZE_VALUE_LSB); + if (NvEnumsFromBin[enumIdx][l].enumValuePeer == 0xFF) { + *pos = *pos + (fieldCount/size1Bin) * numElem * numElem2; + continue; + } + } + else { + if ((l+1) > size3BuiltIn) { + *pos = *pos + (fieldCount/size1Bin) * numElem * numElem2; + continue; + } + } + } + for (m=0; m < numElem2; m++) { + if (storageType == ARRAY_2) { + idx1 = _STORAGE_SIZE2( + pTable[tableIdx][fieldId].fieldStorageSize2, + pTable[tableIdx][fieldId].fieldStorageType); + size2Bin = getNumElemOutOfStorageSize(idx1, + pTable[tableIdx][fieldId].fieldStorageSize2, 1); + + fieldSize = 0; + getBuiltInFieldCount(tableIdx, + pTable[tableIdx][fieldId].fieldName, &tableIdxBuiltIn, + &fieldIdBuiltIn, &numElemBuiltIn); + + idx1 = _STORAGE_SIZE2( + pTableBuiltIn[tableIdxBuiltIn][fieldIdBuiltIn].fieldStorageSize2, + pTableBuiltIn[tableIdxBuiltIn][fieldIdBuiltIn].fieldStorageType); + + size2BuiltIn = getNumElemOutOfStorageSize(idx1, + pTableBuiltIn[tableIdxBuiltIn][fieldIdBuiltIn].fieldStorageSize2, + 0); + + if (!IsFieldSizeInt( + pTable[tableIdx][fieldId].fieldStorageSize2)) { + enumIdx = ((pTable[tableIdx][fieldId].fieldStorageSize2 & + FIELD_SIZE_VALUE_MASK) >> FIELD_SIZE_VALUE_LSB); + if (NvEnumsFromBin[enumIdx][m].enumValuePeer == 0xFF) { + *pos = *pos + (fieldCount/size1Bin) * numElem; + continue; + } + } + else { + if ((m+1) > size2BuiltIn) { + *pos = *pos + (fieldCount/size1Bin) * numElem; + continue; + } + } + } + for (j=0; j < numElem; j++) { + if (storageType == ARRAY_1) { + fieldSize = 0; + getBuiltInFieldCount(tableIdx, + pTable[tableIdx][fieldId].fieldName, &tableIdxBuiltIn, + &fieldIdBuiltIn, &numElemBuiltIn); + + idx1 = _STORAGE_SIZE1( + pTableBuiltIn[tableIdxBuiltIn][fieldIdBuiltIn].fieldStorageSize1, + pTableBuiltIn[tableIdxBuiltIn][fieldIdBuiltIn].fieldStorageType); + + size1BuiltIn = getNumElemOutOfStorageSize(idx1, + pTableBuiltIn[tableIdxBuiltIn][fieldIdBuiltIn].fieldStorageSize1, + 0); + + if (!IsFieldSizeInt( + pTable[tableIdx][fieldId].fieldStorageSize1)) { + enumIdx = ((pTable[tableIdx][fieldId].fieldStorageSize1 & + FIELD_SIZE_VALUE_MASK) >> FIELD_SIZE_VALUE_LSB); + if (NvEnumsFromBin[enumIdx][j].enumValuePeer == 0xFF) { + *pos = *pos + (fieldCount/size1Bin); + continue; + } + } + else { + if ((j+1) > size1BuiltIn) { + *pos = *pos + (fieldCount/size1Bin); + continue; + } + } + } + + for (i = 0; i < TABLE_ENTRIES_MAX; i++) { + if (nul == pTable[idxSubTable][i].fieldName[0]) { + // data parsing done for this stream + break; + } + + idx = _STORAGE_TYPE(pTable[idxSubTable][i].fieldStorageType); + numSubElem = numElemBasedOnStorageType[idx]( + &(pTable[idxSubTable][i]),1); + numSubElem2 = numSubElem3 = 1; + + if (idx == ARRAY_1) { + idx1 = _STORAGE_SIZE1( + pTable[idxSubTable][i].fieldStorageSize1, + pTable[idxSubTable][i].fieldStorageType); + numSubElem = getNumElemOutOfStorageSize(idx1, + pTable[idxSubTable][i].fieldStorageSize1, 1); + } + else if (idx == ARRAY_2) { + idx1 = _STORAGE_SIZE1( + pTable[idxSubTable][i].fieldStorageSize1, + pTable[idxSubTable][i].fieldStorageType); + numSubElem = getNumElemOutOfStorageSize(idx1, + pTable[idxSubTable][i].fieldStorageSize1, 1); + + idx1 = _STORAGE_SIZE2( + pTable[idxSubTable][i].fieldStorageSize2, + pTable[idxSubTable][i].fieldStorageType); + numSubElem2 = getNumElemOutOfStorageSize(idx1, + pTable[idxSubTable][i].fieldStorageSize2, 1); + } + else if (idx == ARRAY_3) { + idx1 = _STORAGE_SIZE1( + pTable[idxSubTable][i].fieldStorageSize1, + pTable[idxSubTable][i].fieldStorageType); + numSubElem = getNumElemOutOfStorageSize(idx1, + pTable[idxSubTable][i].fieldStorageSize1, 1); + + idx1 = _STORAGE_SIZE2( + pTable[idxSubTable][i].fieldStorageSize2, + pTable[idxSubTable][i].fieldStorageType); + numSubElem2 = getNumElemOutOfStorageSize(idx1, + pTable[idxSubTable][i].fieldStorageSize2, 1); + + idx1 = _STORAGE_SIZE3( + pTable[idxSubTable][i].fieldStorageSize3, + pTable[idxSubTable][i].fieldStorageType); + numSubElem3 = getNumElemOutOfStorageSize(idx1, + pTable[idxSubTable][i].fieldStorageSize3, 1); + } + + if (_OFFSET_NOT_SET != pTable[idxSubTable][i].offset) { + if ( pTable[tableIdx][fieldId].offset == addOffset ) { + parseSubDataTableAndCopy(idxSubTable, numSubElem, + numSubElem2, numSubElem3, i, pStream, pos, + addOffset, tableBaseOffset, localAddOffset); + } + else { + // NOT the first Entry in the table.. + if ( !pTable[tableIdx][fieldId].offset ) { + parseSubDataTableAndCopy(idxSubTable, numSubElem, + numSubElem2, numSubElem3, i, pStream, pos, + addOffset, tableBaseOffset, localAddOffset); + } + else { + //First Entry in the the table.. + //(Sending parent offset..) + parseSubDataTableAndCopy(idxSubTable, numSubElem, + numSubElem2, numSubElem3, i, pStream, pos, + addOffset, tableBaseOffset, + pTable[tableIdx][fieldId].offset); + } + } + } + else { + fieldSize = 0; + fieldCount = getFieldCount(idxSubTable, i, numSubElem, 1); + *pos += fieldCount; + } + } + + localAddOffset = localAddOffset + incAddOffset; + } + } + } + } + + return; +} + +static void processNvData(_NV_STREAM_BUF *pStream, int len) +{ + int tableIdx, pos, idx = 0, addOffset = 0, i; + int numElem = 0, additionalOffset = 0, tableBaseOffset = 0; + _NV_TEMPLATE_TABLE (*pTable)[TABLE_ENTRIES_MAX] = NvTablesFromBin; + + // fetch the table template + pos = 0; // stream header byte is already checked, that's why we are here + pos += _NV_BIN_DATA_STREAM_TABLEID_BYTE; + tableIdx = (pStream[_NV_BIN_DATA_STREAM_TABLEID_BYTE] & + FIELD_ID_TABLE_OR_ENUM_IDX_MASK); + pos++; + + // call the table parsing + for (i = 0; i < TABLE_ENTRIES_MAX; i++) { + if (nul == pTable[0][i].fieldName[0]) { + break; + } + if (tableIdx == _TABLE_IDX(pTable[0][i].fieldId)) { + // Table base offset, stored in the "table of all tables" (index 0), + // will be added to + // fields relative offset in all tables. + tableBaseOffset = pTable[0][i].offset; + + idx = _STORAGE_TYPE(pTable[0][i].fieldStorageType); + + // number of element + numElem = numElemBasedOnStorageType[idx](&(pTable[0][i]),1); + + // recursive calls for the total size of the subtable, which may + // contain nested tables + subTableSize = 0; + parseSubDataTable4Size(tableIdx, numElem); + + // additional offset for EACH subsequent table element + additionalOffset = subTableSize/numElem; + + break; + } + } + + if (numElem) { + for (i = 0; i < numElem; i++) { + addOffset = (i * additionalOffset); + parseDataTable_new(pStream, &pos, tableIdx, addOffset, + tableBaseOffset); + } + } + + // the above recursive data table parser takes care of the nested tables + // all done + return; +} + +static void parseDataTable_new(_NV_STREAM_BUF *pStream, int* pos, int tableIdx, + int addOffset, int tableBaseOffset) +{ + _NV_TEMPLATE_TABLE (*pTable)[TABLE_ENTRIES_MAX] = NvTablesFromBin; + int i, idx, fieldCount; + int numElem, numElem2, numElem3, storageType, idxSubTable; + + // "apply" template to data -- parsing the actual NV data, + // so far we have been parsing and building templates + for (i = 0; i < TABLE_ENTRIES_MAX; i++) { + if (nul == pTable[tableIdx][i].fieldName[0]) { + // data parsing done for this stream + break; + } + + // get size of the sub-table + idxSubTable = (pTable[tableIdx][i].fieldId & + FIELD_ID_TABLE_OR_ENUM_IDX_MASK); + + idx = _STORAGE_TYPE(pTable[tableIdx][i].fieldStorageType); + + numElem = numElemBasedOnStorageType[idx](&(pTable[tableIdx][i]),1); + + addOffset = pTable[tableIdx][i].offset; + + fieldSize = 0; + fieldCount = getFieldCount(tableIdx, i, numElem, 1); + + numElem2 = numElem3 = 1; + + if (idx == ARRAY_1 ) { + storageType = _STORAGE_SIZE1(pTable[tableIdx][i].fieldStorageSize1, + pTable[tableIdx][i].fieldStorageType); + numElem = getNumElemOutOfStorageSize(storageType, + pTable[tableIdx][i].fieldStorageSize1, 1); + } + else if (idx == ARRAY_2) { + storageType = _STORAGE_SIZE1(pTable[tableIdx][i].fieldStorageSize1, + pTable[tableIdx][i].fieldStorageType); + + numElem = getNumElemOutOfStorageSize(storageType, + pTable[tableIdx][i].fieldStorageSize1, 1); + + storageType = _STORAGE_SIZE2(pTable[tableIdx][i].fieldStorageSize2, + pTable[tableIdx][i].fieldStorageType); + + numElem2 = getNumElemOutOfStorageSize(storageType, + pTable[tableIdx][i].fieldStorageSize2, 1); + } + else if (idx == ARRAY_3) { + storageType = _STORAGE_SIZE1(pTable[tableIdx][i].fieldStorageSize1, + pTable[tableIdx][i].fieldStorageType); + + numElem = getNumElemOutOfStorageSize(storageType, + pTable[tableIdx][i].fieldStorageSize1, 1); + + storageType = _STORAGE_SIZE2(pTable[tableIdx][i].fieldStorageSize2, + pTable[tableIdx][i].fieldStorageType); + + numElem2 = getNumElemOutOfStorageSize(storageType, + pTable[tableIdx][i].fieldStorageSize2, 1); + + storageType = _STORAGE_SIZE3(pTable[tableIdx][i].fieldStorageSize3, + pTable[tableIdx][i].fieldStorageType); + + numElem3 = getNumElemOutOfStorageSize(storageType, + pTable[tableIdx][i].fieldStorageSize3, 1); + } + + if (_OFFSET_NOT_SET != pTable[tableIdx][i].offset) { + parseSubDataTableAndCopy(tableIdx, numElem, numElem2, numElem3, i, + pStream, pos, addOffset, tableBaseOffset, 0); + } + else { + *pos += fieldCount; + } + } +} + +static void getBasicDataSize(_NV_TEMPLATE_TABLE *pTableEntry) +{ + int numElem, sizeOneElem, totalSize; + int idx, idx1; + + // number of element + idx = _STORAGE_TYPE(pTableEntry->fieldStorageType); + numElem = numElemBasedOnStorageType[idx](pTableEntry, 1); + + // size of each element + idx1 = pTableEntry->fieldId & FIELD_ID_TABLE_OR_ENUM_IDX_MASK; + sizeOneElem = sizeOneElemBasedOnFieldIdBasicDataType[idx1]; + + // total size in bytes + totalSize = numElem * sizeOneElem; + + // all done, update global + subTableSize += totalSize; + + return; +} + +static int numElemSingular(_NV_TEMPLATE_TABLE *pTableEntry, int unused) +{ + return 1; +} + +static int getNumElemOutOfStorageSize(int fieldStorageSize, + uint8 fieldStorageSizeLowByte, int nvBin) +{ + int ret = 0; + if (IsFieldSizeInt(fieldStorageSizeLowByte)) { + return fieldStorageSize; + } + else { + int maxEnumVal=0, i; + _NV_TEMPLATE_ENUM (*pEnum)[ENUM_ENTRIES_MAX]; + int enumIdx = ((fieldStorageSizeLowByte & + FIELD_SIZE_VALUE_MASK) >> FIELD_SIZE_VALUE_LSB); + + if (nvBin) { + pEnum = NvEnumsFromBin; + } + else { + pEnum = NvEnumsBuiltIn; + } + + for (i = 0; i < ENUM_ENTRIES_MAX; i++) { + if (nul == pEnum[enumIdx][i].enumName[0]) { + if ( i == 0 ) { + maxEnumVal = 0; + } + else { + maxEnumVal = pEnum[enumIdx][i-1].enumValue; + } + break; + } + } + ret = (maxEnumVal + 1); + return ret; // +1 to count for 0 to maxEnumVal + } +} + +static int numElemArray1(_NV_TEMPLATE_TABLE *pTableEntry, int nvBin) +{ + int fieldStorageSize = 0; + + fieldStorageSize = getNumElemOutOfStorageSize(_STORAGE_SIZE1( + pTableEntry->fieldStorageSize1, pTableEntry->fieldStorageType), + pTableEntry->fieldStorageSize1, nvBin); + + return fieldStorageSize; +} + +static int numElemArray2(_NV_TEMPLATE_TABLE *pTableEntry, int nvBin) +{ + int fieldStorageSize1,fieldStorageSize2,fieldStorageSize; + + fieldStorageSize1 = getNumElemOutOfStorageSize(_STORAGE_SIZE1( + pTableEntry->fieldStorageSize1, + pTableEntry->fieldStorageType), + pTableEntry->fieldStorageSize1, nvBin); + + fieldStorageSize2 = getNumElemOutOfStorageSize(_STORAGE_SIZE2( + pTableEntry->fieldStorageSize2, + pTableEntry->fieldStorageType), + pTableEntry->fieldStorageSize2, nvBin); + + fieldStorageSize = fieldStorageSize1 * fieldStorageSize2; + + return fieldStorageSize; +} + +static int numElemArray3(_NV_TEMPLATE_TABLE *pTableEntry, int nvBin) +{ + int fieldStorageSize1,fieldStorageSize2,fieldStorageSize3,fieldStorageSize; + + fieldStorageSize1 = getNumElemOutOfStorageSize(_STORAGE_SIZE1( + pTableEntry->fieldStorageSize1, + pTableEntry->fieldStorageType), + pTableEntry->fieldStorageSize1, nvBin); + + fieldStorageSize2 = getNumElemOutOfStorageSize(_STORAGE_SIZE2( + pTableEntry->fieldStorageSize2, + pTableEntry->fieldStorageType), + pTableEntry->fieldStorageSize2, nvBin); + + fieldStorageSize3 = getNumElemOutOfStorageSize(_STORAGE_SIZE3( + pTableEntry->fieldStorageSize3, + pTableEntry->fieldStorageType), + pTableEntry->fieldStorageSize3, nvBin); + + fieldStorageSize = fieldStorageSize1 * fieldStorageSize2 * fieldStorageSize3; + + return fieldStorageSize; +} diff --git a/CORE/VOSS/src/wlan_nv_stream_read.c b/CORE/VOSS/src/wlan_nv_stream_read.c new file mode 100644 index 000000000000..26323e0e359a --- /dev/null +++ b/CORE/VOSS/src/wlan_nv_stream_read.c @@ -0,0 +1,117 @@ +/* + * Copyright (c) 2013, The Linux Foundation. All rights reserved. + * + * Previously licensed under the ISC license by Qualcomm Atheros, Inc. + * + * + * Permission to use, copy, modify, and/or distribute this software for + * any purpose with or without fee is hereby granted, provided that the + * above copyright notice and this permission notice appear in all + * copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL + * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE + * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +/* + * This file was originally distributed by Qualcomm Atheros, Inc. + * under proprietary terms before Copyright ownership was assigned + * to the Linux Foundation. + */ +/*=========================================================================== + EDIT HISTORY FOR FILE + + This section contains comments describing changes made to the module. + Notice that changes are listed in reverse chronological order. + + $Header:$ $DateTime: $ $Author: $ + + when who what, where, why + -------- --- -------------------------------------------------------- + 04/10/13 kumarpra nv stream layer creation +===========================================================================*/ + +#include "wlan_nv_stream.h" + +_STREAM_BUF streamBuf; + +static tANI_U32 deCodeData(tANI_U8 *ipdata, tANI_U32 length, tANI_U8 *opdata, + tANI_U32 *currentIndex); + +/*---------------------------------------------------------------------------- + \brief initReadStream() - stream Initialization + This function will initialize stream read + \param readBuf, length - ptr to read Buffer, number of bytes + \return success on init + \sa +--------------------------------------------------------------------------*/ +_STREAM_RC initReadStream(tANI_U8 *readBuf, tANI_U32 length) +{ + _STREAM_RC rc = RC_SUCCESS; + streamBuf.currentIndex = 0; + streamBuf.totalLength = 0; + streamBuf.totalLength = length; + streamBuf.dataBuf = (_NV_STREAM_BUF *)&readBuf[0]; + return rc; +} + +/*---------------------------------------------------------------------------- + \brief nextStream() - get next Stream in buffer + This function will provide next stream in the buffere initalized + \param readBuf, length - ptr to stream length, stream data + \return success when stream length is non-zero else error + \sa +--------------------------------------------------------------------------*/ + +_STREAM_RC nextStream(tANI_U32 *length, tANI_U8 *dataBuf) +{ + _STREAM_RC rc = RC_SUCCESS; + + if (streamBuf.currentIndex >= streamBuf.totalLength) + { + *length = 0; + } + else + { + *length = deCodeData(&streamBuf.dataBuf[streamBuf.currentIndex], + (streamBuf.totalLength - streamBuf.currentIndex), dataBuf, + &streamBuf.currentIndex); + } + + if (*length == 0) + { + rc = RC_FAIL; + } + + return rc; +} + +/*---------------------------------------------------------------------------- + \brief decodeData() - decode the input data + This function will decode stream read + \param readBuf, length - ptr to input stream, length, output stream data, + \index pointer + \return success when stream length is non-zero else error + \sa +--------------------------------------------------------------------------*/ + +tANI_U32 deCodeData(tANI_U8 *ipdata, tANI_U32 length, tANI_U8 *opdata, + tANI_U32 *currentIndex) +{ + tANI_U16 oplength = 0; + + oplength = ipdata[0]; + oplength = oplength | (ipdata[1] << 8); + + memcpy(opdata, &ipdata[sizeof(tANI_U16)], oplength); + + *currentIndex = *currentIndex + sizeof(tANI_U16) + oplength; + + return oplength; +} diff --git a/CORE/VOSS/src/wlan_nv_template_builtin.c b/CORE/VOSS/src/wlan_nv_template_builtin.c new file mode 100644 index 000000000000..7c284d83360c --- /dev/null +++ b/CORE/VOSS/src/wlan_nv_template_builtin.c @@ -0,0 +1,831 @@ + +/* + * Copyright (c) 2013, The Linux Foundation. All rights reserved. + * + * Previously licensed under the ISC license by Qualcomm Atheros, Inc. + * + * + * Permission to use, copy, modify, and/or distribute this software for + * any purpose with or without fee is hereby granted, provided that the + * above copyright notice and this permission notice appear in all + * copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL + * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE + * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +/* + * This file was originally distributed by Qualcomm Atheros, Inc. + * under proprietary terms before Copyright ownership was assigned + * to the Linux Foundation. + */ + +/*=========================================================================== + EDIT HISTORY FOR FILE + + This section contains comments describing changes made to the module. + Notice that changes are listed in reverse chronological order. + + $Header:$ $DateTime: $ $Author: $ + + when who what, where, why + -------- --- ----------------------------------------------- + 04/10/13 kumarpra nv built in creation +===========================================================================*/ + + +/* + ----------------------------------------- + This file is generated by nvTmplRun Parser + ----------------------------------------- + To be auto-generated, or + This is the source file and the header file can be generated from this + template file. + + Template constructs + 1. TABLE_: struct + 2. INDEX_ENUM: enums, e.g. {RATE_OFDM_6M,RATE_OFDM_54M} + 3. INDEX_INT: int, e.g.{min, max, increment} + 3. Basic data types: tANI_U8, tANI_S8, tANI_U32, tANI_S32 + 4. Storage types: + 4.1 SINGULAR: one element of basic data type + 4.2 ARRAY_1: one dimensional array, x-axis + 4.3 ARRAY_2: two dimensional array, (x, y) + 4.4 ARRAY_3: three dimensional array, (x, y, z) + 4.5 ARRAY_4: four dimensional array, (x, y, z, t) + + Implementation notes + 1. Flow of changing NV data format: (TBD) Either change the template and + generate the header file, or modify header file and auto-generate + the template. + 2. Flow of writing NV data: encode the template in the data stream, so the + NV data is "self-sufficient". No separate template, no compability + issue, no need of version control. + 3. Flow of reading NV data: parse the binary NV data stream based on the + template info in the data stream. + 4. The above NV logic is decoupled from the actual data content, a generic, + content ergonostic parser (reading) and encoder (writing). + The NV logic is common code shared by tools, s/w + (both host and firmware), and off-line utilities. + 5. NV data parsing and "acceptanace" into an s/w moduel data structure can + be "configured" in several ways: + 5.1 only total matching of all fields, otherwise, reject the whole data + stream (a table). + 5.2 partial matching of fields allowed and the rest fields assume + reasonal default values, + The choice can be determined later, but the capability is provided. + 6. We could also design in this selection on an individual table base. + To design such capability, reserve some header bits in the data stream. + 7. The NV data streams can be modified, replaced, or intact with a new data + stream of the same table ID added to NV data. + The choice can be determined later, but the NV scheme provides such + capability. + 8. The template construct definitions can be common to all tables + (tbd: in a common section) or table specific, or updated in a + subsequent format section. + The use cases are: + - An index enum (e.g. RF channels) is common to all tables when the NV + data is created. Later new enums are added (e.g. + additional channels), one can choose to add the new index enum for new + tables appended to the NV data, or replace the + old table with new template info and data. + The template precedence is table specific then common, and later + "common" overwrites "earlier" commmon. + - A new field is added to the table, the user decides to replace the + old table data, he can simply encode the template info in the + data stream. + - In the same scenario (a new field is added), the user decides to + append a new table, he can encode the template + in the new data table and append it to NV data, or write a new common + template section and append the data. + + Key "ingredients", (re-iterate the most important features and capabilities) + 1. How to parse the data is embedded in the NV data itself. It removes the + dependency on header file matching, + version checking, compatibility among tools, host and firmware. + 2. Table field ID enables "partial" data acceptance in an s/w module data + structure. Whether full matching or reject the whole table, or "partial" + acceptance, the capabiilty is in place and further ensures the robust + NV data extensibility and compatibility. + 3. The table granularity, data stream based NV data has variable length + and flexibility of modifying an existing table data, replacing the + whole data, or leaving the existing data table intact and appending + a new table. + Misc notes: + 1. For endianness, support only 4 bytes integer or 4 1-byte + 2. String identifier needs to be shortened to save storage + 3. string_field_name, field type, field storage class, storage size +*/ + + +#include "wlan_nv_types.h" +#include "wlan_nv_stream.h" +#include "wlan_nv.h" +#include "wlan_nv_template_internal.h" +#include "wlan_nv_template_api.h" +#include "wlan_nv_template_builtin.h" + + + +static int enumNoOfFieldArray[INDEX_ENUM_BUILTIN_MAX] = + {7,1,9,5,80,14,3,55}; + +_NV_TEMPLATE_ENUM NvEnumsBuiltIn[/*INDEX_ENUM_MAX*/][ENUM_ENTRIES_MAX] = { + { // INDEX_ENUM_ALL + {"j1",INDEX_ENUM_NUM_PHY_MAX_TX_CHAINS,0,{nul}}, + {"j2",INDEX_ENUM_NUM_REG_DOMAINS,0,{nul}}, + {"j3",INDEX_ENUM_NUM_RF_SUBBANDS,0,{nul}}, + {"j4",INDEX_ENUM_NUM_RF_CHANNELS,0,{nul}}, + {"j5",INDEX_ENUM_NUM_2_4GHZ_CHANNELS,0,{nul}}, + {"j6",INDEX_ENUM_NUM_802_11_MODES,0,{nul}}, + {"j7",INDEX_ENUM_NUM_HAL_PHY_RATES,0,{nul}}, + {{nul},0, 0,{nul}}, + }, // INDEX_ENUM_ALL + + { // INDEX_ENUM_NUM_PHY_MAX_TX_CHAINS + {"a1",PHY_TX_CHAIN_0,0,{nul}}, + {{nul},0, 0,{nul}}, + }, // INDEX_ENUM_NUM_PHY_MAX_TX_CHAINS + + { // INDEX_ENUM_NUM_REG_DOMAINS + {"a3",REG_DOMAIN_FCC,0,{nul}}, + {"a4",REG_DOMAIN_ETSI,0,{nul}}, + {"a5",REG_DOMAIN_JAPAN,0,{nul}}, + {"a6",REG_DOMAIN_WORLD,0,{nul}}, + {"a7",REG_DOMAIN_N_AMER_EXC_FCC,0,{nul}}, + {"a8",REG_DOMAIN_APAC,0,{nul}}, + {"a9",REG_DOMAIN_KOREA,0,{nul}}, + {"ba",REG_DOMAIN_HI_5GHZ,0,{nul}}, + {"bb",REG_DOMAIN_NO_5GHZ,0,{nul}}, + {{nul},0, 0,{nul}}, + }, // INDEX_ENUM_NUM_REG_DOMAINS + + { // INDEX_ENUM_NUM_RF_SUBBANDS + {"bd",RF_SUBBAND_2_4_GHZ,0,{nul}}, + {"be",RF_SUBBAND_5_LOW_GHZ,0,{nul}}, + {"bf",RF_SUBBAND_5_MID_GHZ,0,{nul}}, + {"bg",RF_SUBBAND_5_HIGH_GHZ,0,{nul}}, + {"bh",RF_SUBBAND_4_9_GHZ,0,{nul}}, + {{nul},0, 0,{nul}}, + }, // INDEX_ENUM_NUM_RF_SUBBANDS + + { // INDEX_ENUM_NUM_RF_CHANNELS + {"bj",RF_CHAN_1,0,{nul}}, + {"bk",RF_CHAN_2,0,{nul}}, + {"bl",RF_CHAN_3,0,{nul}}, + {"bm",RF_CHAN_4,0,{nul}}, + {"bn",RF_CHAN_5,0,{nul}}, + {"bo",RF_CHAN_6,0,{nul}}, + {"bp",RF_CHAN_7,0,{nul}}, + {"bq",RF_CHAN_8,0,{nul}}, + {"br",RF_CHAN_9,0,{nul}}, + {"bs",RF_CHAN_10,0,{nul}}, + {"bt",RF_CHAN_11,0,{nul}}, + {"bu",RF_CHAN_12,0,{nul}}, + {"bv",RF_CHAN_13,0,{nul}}, + {"bw",RF_CHAN_14,0,{nul}}, + {"bx",RF_CHAN_240,0,{nul}}, + {"by",RF_CHAN_244,0,{nul}}, + {"bz",RF_CHAN_248,0,{nul}}, + {"b0",RF_CHAN_252,0,{nul}}, + {"b1",RF_CHAN_208,0,{nul}}, + {"b2",RF_CHAN_212,0,{nul}}, + {"b3",RF_CHAN_216,0,{nul}}, + {"b4",RF_CHAN_36,0,{nul}}, + {"b5",RF_CHAN_40,0,{nul}}, + {"b6",RF_CHAN_44,0,{nul}}, + {"b7",RF_CHAN_48,0,{nul}}, + {"b8",RF_CHAN_52,0,{nul}}, + {"b9",RF_CHAN_56,0,{nul}}, + {"ca",RF_CHAN_60,0,{nul}}, + {"cb",RF_CHAN_64,0,{nul}}, + {"cc",RF_CHAN_100,0,{nul}}, + {"cd",RF_CHAN_104,0,{nul}}, + {"ce",RF_CHAN_108,0,{nul}}, + {"cf",RF_CHAN_112,0,{nul}}, + {"cg",RF_CHAN_116,0,{nul}}, + {"ch",RF_CHAN_120,0,{nul}}, + {"ci",RF_CHAN_124,0,{nul}}, + {"cj",RF_CHAN_128,0,{nul}}, + {"ck",RF_CHAN_132,0,{nul}}, + {"cl",RF_CHAN_136,0,{nul}}, + {"cm",RF_CHAN_140,0,{nul}}, + {"cn",RF_CHAN_149,0,{nul}}, + {"co",RF_CHAN_153,0,{nul}}, + {"cp",RF_CHAN_157,0,{nul}}, + {"cq",RF_CHAN_161,0,{nul}}, + {"cr",RF_CHAN_165,0,{nul}}, + {"cs",RF_CHAN_BOND_3,0,{nul}}, + {"ct",RF_CHAN_BOND_4,0,{nul}}, + {"cu",RF_CHAN_BOND_5,0,{nul}}, + {"cv",RF_CHAN_BOND_6,0,{nul}}, + {"cw",RF_CHAN_BOND_7,0,{nul}}, + {"cx",RF_CHAN_BOND_8,0,{nul}}, + {"cy",RF_CHAN_BOND_9,0,{nul}}, + {"cz",RF_CHAN_BOND_10,0,{nul}}, + {"c0",RF_CHAN_BOND_11,0,{nul}}, + {"c1",RF_CHAN_BOND_242,0,{nul}}, + {"c2",RF_CHAN_BOND_246,0,{nul}}, + {"c3",RF_CHAN_BOND_250,0,{nul}}, + {"c4",RF_CHAN_BOND_210,0,{nul}}, + {"c5",RF_CHAN_BOND_214,0,{nul}}, + {"c6",RF_CHAN_BOND_38,0,{nul}}, + {"c7",RF_CHAN_BOND_42,0,{nul}}, + {"c8",RF_CHAN_BOND_46,0,{nul}}, + {"c9",RF_CHAN_BOND_50,0,{nul}}, + {"da",RF_CHAN_BOND_54,0,{nul}}, + {"db",RF_CHAN_BOND_58,0,{nul}}, + {"dc",RF_CHAN_BOND_62,0,{nul}}, + {"dd",RF_CHAN_BOND_102,0,{nul}}, + {"de",RF_CHAN_BOND_106,0,{nul}}, + {"df",RF_CHAN_BOND_110,0,{nul}}, + {"dg",RF_CHAN_BOND_114,0,{nul}}, + {"dh",RF_CHAN_BOND_118,0,{nul}}, + {"di",RF_CHAN_BOND_122,0,{nul}}, + {"dj",RF_CHAN_BOND_126,0,{nul}}, + {"dk",RF_CHAN_BOND_130,0,{nul}}, + {"dl",RF_CHAN_BOND_134,0,{nul}}, + {"dm",RF_CHAN_BOND_138,0,{nul}}, + {"dn",RF_CHAN_BOND_151,0,{nul}}, + {"do",RF_CHAN_BOND_155,0,{nul}}, + {"dp",RF_CHAN_BOND_159,0,{nul}}, + {"dq",RF_CHAN_BOND_163,0,{nul}}, + {{nul},0, 0,{nul}}, + }, // INDEX_ENUM_NUM_RF_CHANNELS + + { // INDEX_ENUM_NUM_2_4GHZ_CHANNELS + {"ke",RF_CHAN_1_1,0,{nul}}, + {"kf",RF_CHAN_2_1,0,{nul}}, + {"kg",RF_CHAN_3_1,0,{nul}}, + {"kh",RF_CHAN_4_1,0,{nul}}, + {"ki",RF_CHAN_5_1,0,{nul}}, + {"kj",RF_CHAN_6_1,0,{nul}}, + {"kk",RF_CHAN_7_1,0,{nul}}, + {"kl",RF_CHAN_8_1,0,{nul}}, + {"km",RF_CHAN_9_1,0,{nul}}, + {"kn",RF_CHAN_10_1,0,{nul}}, + {"ko",RF_CHAN_11_1,0,{nul}}, + {"kp",RF_CHAN_12_1,0,{nul}}, + {"kq",RF_CHAN_13_1,0,{nul}}, + {"kr",RF_CHAN_14_1,0,{nul}}, + {{nul},0, 0,{nul}}, + }, // INDEX_ENUM_NUM_2_4GHZ_CHANNELS + + { // INDEX_ENUM_NUM_802_11_MODES + {"d6",MODE_802_11B,0,{nul}}, + {"d7",MODE_802_11AG,0,{nul}}, + {"d8",MODE_802_11N,0,{nul}}, + {{nul},0, 0,{nul}}, + }, // INDEX_ENUM_NUM_802_11_MODES + + { // INDEX_ENUM_NUM_HAL_PHY_RATES + {"ez",HAL_PHY_RATE_11B_LONG_1_MBPS,0,{nul}}, + {"e0",HAL_PHY_RATE_11B_LONG_2_MBPS,0,{nul}}, + {"e1",HAL_PHY_RATE_11B_LONG_5_5_MBPS,0,{nul}}, + {"e2",HAL_PHY_RATE_11B_LONG_11_MBPS,0,{nul}}, + {"e3",HAL_PHY_RATE_11B_SHORT_2_MBPS,0,{nul}}, + {"e4",HAL_PHY_RATE_11B_SHORT_5_5_MBPS,0,{nul}}, + {"e5",HAL_PHY_RATE_11B_SHORT_11_MBPS,0,{nul}}, + {"e6",HAL_PHY_RATE_11A_6_MBPS,0,{nul}}, + {"e7",HAL_PHY_RATE_11A_9_MBPS,0,{nul}}, + {"e8",HAL_PHY_RATE_11A_12_MBPS,0,{nul}}, + {"e9",HAL_PHY_RATE_11A_18_MBPS,0,{nul}}, + {"fa",HAL_PHY_RATE_11A_24_MBPS,0,{nul}}, + {"fb",HAL_PHY_RATE_11A_36_MBPS,0,{nul}}, + {"fc",HAL_PHY_RATE_11A_48_MBPS,0,{nul}}, + {"fd",HAL_PHY_RATE_11A_54_MBPS,0,{nul}}, + {"fe",HAL_PHY_RATE_11A_DUP_6_MBPS,0,{nul}}, + {"ff",HAL_PHY_RATE_11A_DUP_9_MBPS,0,{nul}}, + {"fg",HAL_PHY_RATE_11A_DUP_12_MBPS,0,{nul}}, + {"fh",HAL_PHY_RATE_11A_DUP_18_MBPS,0,{nul}}, + {"fi",HAL_PHY_RATE_11A_DUP_24_MBPS,0,{nul}}, + {"fj",HAL_PHY_RATE_11A_DUP_36_MBPS,0,{nul}}, + {"fk",HAL_PHY_RATE_11A_DUP_48_MBPS,0,{nul}}, + {"fl",HAL_PHY_RATE_11A_DUP_54_MBPS,0,{nul}}, + {"fm",HAL_PHY_RATE_MCS_1NSS_6_5_MBPS,0,{nul}}, + {"fn",HAL_PHY_RATE_MCS_1NSS_13_MBPS,0,{nul}}, + {"fo",HAL_PHY_RATE_MCS_1NSS_19_5_MBPS,0,{nul}}, + {"fp",HAL_PHY_RATE_MCS_1NSS_26_MBPS,0,{nul}}, + {"fq",HAL_PHY_RATE_MCS_1NSS_39_MBPS,0,{nul}}, + {"fr",HAL_PHY_RATE_MCS_1NSS_52_MBPS,0,{nul}}, + {"fs",HAL_PHY_RATE_MCS_1NSS_58_5_MBPS,0,{nul}}, + {"ft",HAL_PHY_RATE_MCS_1NSS_65_MBPS,0,{nul}}, + {"fu",HAL_PHY_RATE_MCS_1NSS_MM_SG_7_2_MBPS,0,{nul}}, + {"fv",HAL_PHY_RATE_MCS_1NSS_MM_SG_14_4_MBPS,0,{nul}}, + {"fw",HAL_PHY_RATE_MCS_1NSS_MM_SG_21_7_MBPS,0,{nul}}, + {"fx",HAL_PHY_RATE_MCS_1NSS_MM_SG_28_9_MBPS,0,{nul}}, + {"fy",HAL_PHY_RATE_MCS_1NSS_MM_SG_43_3_MBPS,0,{nul}}, + {"fz",HAL_PHY_RATE_MCS_1NSS_MM_SG_57_8_MBPS,0,{nul}}, + {"f0",HAL_PHY_RATE_MCS_1NSS_MM_SG_65_MBPS,0,{nul}}, + {"f1",HAL_PHY_RATE_MCS_1NSS_MM_SG_72_2_MBPS,0,{nul}}, + {"f2",HAL_PHY_RATE_MCS_1NSS_CB_13_5_MBPS,0,{nul}}, + {"f3",HAL_PHY_RATE_MCS_1NSS_CB_27_MBPS,0,{nul}}, + {"f4",HAL_PHY_RATE_MCS_1NSS_CB_40_5_MBPS,0,{nul}}, + {"f5",HAL_PHY_RATE_MCS_1NSS_CB_54_MBPS,0,{nul}}, + {"f6",HAL_PHY_RATE_MCS_1NSS_CB_81_MBPS,0,{nul}}, + {"f7",HAL_PHY_RATE_MCS_1NSS_CB_108_MBPS,0,{nul}}, + {"f8",HAL_PHY_RATE_MCS_1NSS_CB_121_5_MBPS,0,{nul}}, + {"f9",HAL_PHY_RATE_MCS_1NSS_CB_135_MBPS,0,{nul}}, + {"ga",HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_15_MBPS,0,{nul}}, + {"gb",HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_30_MBPS,0,{nul}}, + {"gc",HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_45_MBPS,0,{nul}}, + {"gd",HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_60_MBPS,0,{nul}}, + {"ge",HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_90_MBPS,0,{nul}}, + {"gf",HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_120_MBPS,0,{nul}}, + {"gg",HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_135_MBPS,0,{nul}}, + {"gh",HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_150_MBPS,0,{nul}}, +#ifdef WLAN_FEATURE_11AC + {"gj",HAL_PHY_RATE_11AC_DUP_6_MBPS,0,{nul}}, + {"gk",HAL_PHY_RATE_11AC_DUP_9_MBPS,0,{nul}}, + {"gl",HAL_PHY_RATE_11AC_DUP_12_MBPS,0,{nul}}, + {"gm",HAL_PHY_RATE_11AC_DUP_18_MBPS,0,{nul}}, + {"gn",HAL_PHY_RATE_11AC_DUP_24_MBPS,0,{nul}}, + {"go",HAL_PHY_RATE_11AC_DUP_36_MBPS,0,{nul}}, + {"gp",HAL_PHY_RATE_11AC_DUP_48_MBPS,0,{nul}}, + {"gq",HAL_PHY_RATE_11AC_DUP_54_MBPS,0,{nul}}, + {"gr",HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_6_5_MBPS,0,{nul}}, + {"gs",HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_13_MBPS,0,{nul}}, + {"gt",HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_19_5_MBPS,0,{nul}}, + {"gu",HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_26_MBPS,0,{nul}}, + {"gv",HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_39_MBPS,0,{nul}}, + {"gw",HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_52_MBPS,0,{nul}}, + {"gx",HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_58_5_MBPS,0,{nul}}, + {"gy",HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_65_MBPS,0,{nul}}, + {"gz",HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_78_MBPS,0,{nul}}, +#ifdef WCN_PRONTO + {"j8",HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_86_5_MBPS,0,{nul}}, +#endif + {"g0",HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_7_2_MBPS,0,{nul}}, + {"g1",HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_14_4_MBPS,0,{nul}}, + {"g2",HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_21_6_MBPS,0,{nul}}, + {"g3",HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_28_8_MBPS,0,{nul}}, + {"g4",HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_43_3_MBPS,0,{nul}}, + {"g5",HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_57_7_MBPS,0,{nul}}, + {"g6",HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_65_MBPS,0,{nul}}, + {"g7",HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_72_2_MBPS,0,{nul}}, + {"g8",HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_86_6_MBPS,0,{nul}}, +#ifdef WCN_PRONTO + {"j9",HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_96_1_MBPS,0,{nul}}, +#endif + {"g9",HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_13_5_MBPS,0,{nul}}, + {"ha",HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_27_MBPS,0,{nul}}, + {"hb",HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_40_5_MBPS,0,{nul}}, + {"hc",HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_54_MBPS,0,{nul}}, + {"hd",HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_81_MBPS,0,{nul}}, + {"he",HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_108_MBPS,0,{nul}}, + {"hf",HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_121_5_MBPS,0,{nul}}, + {"hg",HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_135_MBPS,0,{nul}}, + {"hh",HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_162_MBPS,0,{nul}}, + {"hi",HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_180_MBPS,0,{nul}}, + {"hj",HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_15_MBPS,0,{nul}}, + {"hk",HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_30_MBPS,0,{nul}}, + {"hl",HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_45_MBPS,0,{nul}}, + {"hm",HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_60_MBPS,0,{nul}}, + {"hn",HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_90_MBPS,0,{nul}}, + {"ho",HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_120_MBPS,0,{nul}}, + {"hp",HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_135_MBPS,0,{nul}}, + {"hq",HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_150_MBPS,0,{nul}}, + {"hr",HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_180_MBPS,0,{nul}}, + {"hs",HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_200_MBPS,0,{nul}}, + {"ht",HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_29_3_MBPS,0,{nul}}, + {"hu",HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_58_5_MBPS,0,{nul}}, + {"hv",HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_87_8_MBPS,0,{nul}}, + {"hw",HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_117_MBPS,0,{nul}}, + {"hx",HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_175_5_MBPS,0,{nul}}, + {"hy",HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_234_MBPS,0,{nul}}, + {"hz",HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_263_3_MBPS,0,{nul}}, + {"h0",HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_292_5_MBPS,0,{nul}}, + {"h1",HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_351_MBPS,0,{nul}}, + {"h2",HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_390_MBPS,0,{nul}}, + {"h3",HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_32_5_MBPS,0,{nul}}, + {"h4",HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_65_MBPS,0,{nul}}, + {"h5",HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_97_5_MBPS,0,{nul}}, + {"h6",HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_130_MBPS,0,{nul}}, + {"h7",HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_195_MBPS,0,{nul}}, + {"h8",HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_260_MBPS,0,{nul}}, + {"h9",HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_292_5_MBPS,0,{nul}}, + {"ia",HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_325_MBPS,0,{nul}}, + {"ib",HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_390_MBPS,0,{nul}}, + {"ic",HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_433_3_MBPS,0,{nul}}, +#endif + {{nul},0, 0,{nul}}, + }, // INDEX_ENUM_NUM_HAL_PHY_RATES + + { //INDEX_ENUM_LAST + {{nul},0, 0,{nul}}, + }, //INDEX_ENUM_LAST +}; // END _NV_TEMPLATE_ENUM + + +int getEnumNoOfFields(int enumIdx){ +#ifdef WLAN_FEATURE_11AC + enumNoOfFieldArray[7] = enumNoOfFieldArray[7] + 17; +#ifdef WCN_PRONTO + enumNoOfFieldArray[7] = enumNoOfFieldArray[7] + 1; +#endif + enumNoOfFieldArray[7] = enumNoOfFieldArray[7] + 9; +#ifdef WCN_PRONTO + enumNoOfFieldArray[7] = enumNoOfFieldArray[7] + 1; +#endif + enumNoOfFieldArray[7] = enumNoOfFieldArray[7] + 40; +#endif + + return enumNoOfFieldArray[enumIdx]; +} + + +static int tableNoOfFieldArray[TABLE_BUILTIN_MAX] = + {14,12,2,2,16,1,2,2,23,1,1,1,4,2,13}; + +_NV_TEMPLATE_TABLE NvTablesBuiltIn[/*TABLES_MAX*/][TABLE_ENTRIES_MAX] = { + { // TABLE_sHalNv + {"jz",_TABLE_IDX(TABLE_sNvFields),SINGULAR,0,0,0, + ((int)&(nvDefaults.fields) - (int)&nvDefaults),"fields"}, + {"jm",_TABLE_IDX(TABLE_tRateGroupPwr),(ARRAY_1), + ((FIELD_SIZE_TYPE_BIT(FIELD_SIZE_IDX_ENUM))| + (FIELD_SIZE_VALUE_BITS(INDEX_ENUM_NUM_RF_SUBBANDS))),0,0, + ((int)&(nvDefaults.tables.pwrOptimum[0]) - (int)&nvDefaults.tables), + "pwrOptimum"}, + {"dx",_TABLE_IDX(TABLE_sRegulatoryChannel),(ARRAY_1), + ((FIELD_SIZE_TYPE_BIT(FIELD_SIZE_IDX_ENUM))| + (FIELD_SIZE_VALUE_BITS(INDEX_ENUM_NUM_RF_CHANNELS))),0,0, + ((int)&(nvDefaults.tables.regDomains[0].channels[0]) - + (int)&nvDefaults.tables.regDomains[0]),"channels"}, + {"jn",_TABLE_IDX(TABLE_sRegulatoryDomains),(ARRAY_1), + ((FIELD_SIZE_TYPE_BIT(FIELD_SIZE_IDX_ENUM))| + (FIELD_SIZE_VALUE_BITS(INDEX_ENUM_NUM_REG_DOMAINS))),0,0, + ((int)&(nvDefaults.tables.regDomains[0]) - (int)&nvDefaults.tables), + "regDomains"}, + {"jo",_TABLE_IDX(TABLE_sDefaultCountry),SINGULAR,0,0,0, + ((int)&(nvDefaults.tables.defaultCountryTable) - + (int)&nvDefaults.tables),"defaultCountryTable"}, + {"jp",_TABLE_IDX(TABLE_tTpcPowerTable),(ARRAY_1), + ((FIELD_SIZE_TYPE_BIT(FIELD_SIZE_IDX_ENUM))| + (FIELD_SIZE_VALUE_BITS(INDEX_ENUM_NUM_RF_CHANNELS))),0,0, + ((int)&(nvDefaults.tables.plutCharacterized[0]) - + (int)&nvDefaults.tables),"plutCharacterized"}, + {"jr",_TABLE_IDX(TABLE_tRateGroupPwrVR),(ARRAY_1), + ((FIELD_SIZE_TYPE_BIT(FIELD_SIZE_IDX_ENUM))| + (FIELD_SIZE_VALUE_BITS(INDEX_ENUM_NUM_RF_SUBBANDS))),0,0, + ((int)&(nvDefaults.tables.pwrOptimum_virtualRate[0]) - + (int)&nvDefaults.tables),"pwrOptimum_virtualRate"}, + {"js",_TABLE_IDX(TABLE_sFwConfig),SINGULAR,0,0,0, + ((int)&(nvDefaults.tables.fwConfig) - (int)&nvDefaults.tables), + "fwConfig"}, + {"jt",_TABLE_IDX(TABLE_sRssiChannelOffsets),(_ADD_SIZE1(2)|ARRAY_1), + ((FIELD_SIZE_TYPE_BIT(FIELD_SIZE_IDX_INT))|(FIELD_SIZE_VALUE_BITS(2))), + 0,0,((int)&(nvDefaults.tables.rssiChanOffsets[0]) - + (int)&nvDefaults.tables),"rssiChanOffsets"}, + {"er",_TABLE_IDX(TABLE_sCalData),SINGULAR,0,0,0, + ((int)&(nvDefaults.tables.hwCalValues.calData) - + (int)&nvDefaults.tables.hwCalValues),"calData"}, + {"ju",_TABLE_IDX(TABLE_sHwCalValues),SINGULAR,0,0,0, + ((int)&(nvDefaults.tables.hwCalValues) - (int)&nvDefaults.tables), + "hwCalValues"}, + {"jx",_TABLE_IDX(TABLE_sOfdmCmdPwrOffset),SINGULAR,0,0,0, + ((int)&(nvDefaults.tables.ofdmCmdPwrOffset) - (int)&nvDefaults.tables), + "ofdmCmdPwrOffset"}, + {"jy",_TABLE_IDX(TABLE_sTxBbFilterMode),SINGULAR,0,0,0, + ((int)&(nvDefaults.tables.txbbFilterMode) - (int)&nvDefaults.tables), + "txbbFilterMode"}, + {"j0",_TABLE_IDX(TABLE_sNvTables),SINGULAR,0,0,0, + ((int)&(nvDefaults.tables) - (int)&nvDefaults),"tables"}, + {{nul}, 0, 0, 0, 0, 0, 0,{nul}}, + }, // TABLE_sHalNv + + { // TABLE_sNvFields + {"ap",_ID_U16,SINGULAR,0,0,0,((int)&(nvDefaults.fields.productId) - + (int)&nvDefaults.fields),"productId"}, + {"aq",_ID_U8,SINGULAR,0,0,0,((int)&(nvDefaults.fields.productBands) - + (int)&nvDefaults.fields),"productBands"}, + {"ar",_ID_U8,SINGULAR,0,0,0,((int)&(nvDefaults.fields.wlanNvRevId) - + (int)&nvDefaults.fields),"wlanNvRevId"}, + {"as",_ID_U8,SINGULAR,0,0,0,((int)&(nvDefaults.fields.numOfTxChains) - + (int)&nvDefaults.fields),"numOfTxChains"}, + {"at",_ID_U8,SINGULAR,0,0,0,((int)&(nvDefaults.fields.numOfRxChains) - + (int)&nvDefaults.fields),"numOfRxChains"}, + {"au",_ID_U8,(_ADD_SIZE1(NV_FIELD_MAC_ADDR_SIZE)|ARRAY_1), + ((FIELD_SIZE_TYPE_BIT(FIELD_SIZE_IDX_INT))| + (FIELD_SIZE_VALUE_BITS(NV_FIELD_MAC_ADDR_SIZE))),0,0, + ((int)&(nvDefaults.fields.macAddr[0]) - (int)&nvDefaults.fields), + "macAddr"}, + {"av",_ID_U8,(_ADD_SIZE1(NV_FIELD_MAC_ADDR_SIZE)|ARRAY_1), + ((FIELD_SIZE_TYPE_BIT(FIELD_SIZE_IDX_INT))| + (FIELD_SIZE_VALUE_BITS(NV_FIELD_MAC_ADDR_SIZE))),0,0, + ((int)&(nvDefaults.fields.macAddr2[0]) - (int)&nvDefaults.fields), + "macAddr2"}, + {"aw",_ID_U8,(_ADD_SIZE1(NV_FIELD_MAC_ADDR_SIZE)|ARRAY_1), + ((FIELD_SIZE_TYPE_BIT(FIELD_SIZE_IDX_INT))| + (FIELD_SIZE_VALUE_BITS(NV_FIELD_MAC_ADDR_SIZE))),0,0, + ((int)&(nvDefaults.fields.macAddr3[0]) - (int)&nvDefaults.fields), + "macAddr3"}, + {"ax",_ID_U8,(_ADD_SIZE1(NV_FIELD_MAC_ADDR_SIZE)|ARRAY_1), + ((FIELD_SIZE_TYPE_BIT(FIELD_SIZE_IDX_INT))| + (FIELD_SIZE_VALUE_BITS(NV_FIELD_MAC_ADDR_SIZE))),0,0, + ((int)&(nvDefaults.fields.macAddr4[0]) - (int)&nvDefaults.fields), + "macAddr4"}, + {"ay",_ID_U8,(_ADD_SIZE1(NV_FIELD_MFG_SN_SIZE)|ARRAY_1), + ((FIELD_SIZE_TYPE_BIT(FIELD_SIZE_IDX_INT))| + (FIELD_SIZE_VALUE_BITS(NV_FIELD_MFG_SN_SIZE))),0,0, + ((int)&(nvDefaults.fields.mfgSN[0]) - (int)&nvDefaults.fields),"mfgSN"} + , + {"az",_ID_U8,SINGULAR,0,0,0,((int)&(nvDefaults.fields.couplerType) - + (int)&nvDefaults.fields),"couplerType"}, + {"a0",_ID_U8,SINGULAR,0,0,0,((int)&(nvDefaults.fields.nvVersion) - + (int)&nvDefaults.fields),"nvVersion"}, + {{nul}, 0, 0, 0, 0, 0, 0,{nul}}, + }, // TABLE_sNvFields + + { // TABLE_sRegulatoryChannel + {"dv",_ID_U8,SINGULAR,0,0,0, + ((int)&(nvDefaults.tables.regDomains[0].channels[0].enabled) - + (int)&nvDefaults.tables.regDomains[0].channels[0]),"enabled"}, + {"dw",_ID_S8,SINGULAR,0,0,0, + ((int)&(nvDefaults.tables.regDomains[0].channels[0].pwrLimit) - + (int)&nvDefaults.tables.regDomains[0].channels[0]),"pwrLimit"}, + {{nul}, 0, 0, 0, 0, 0, 0,{nul}}, + }, // TABLE_sRegulatoryChannel + + { // TABLE_sRssiChannelOffsets + {"d1",_ID_S16,(ARRAY_1),((FIELD_SIZE_TYPE_BIT(FIELD_SIZE_IDX_ENUM))| + (FIELD_SIZE_VALUE_BITS(INDEX_ENUM_NUM_RF_CHANNELS))),0,0, + ((int)&(nvDefaults.tables.rssiChanOffsets[0].bRssiOffset[0]) - + (int)&nvDefaults.tables.rssiChanOffsets[0]),"bRssiOffset"}, + {"d2",_ID_S16,(ARRAY_1),((FIELD_SIZE_TYPE_BIT(FIELD_SIZE_IDX_ENUM))| + (FIELD_SIZE_VALUE_BITS(INDEX_ENUM_NUM_RF_CHANNELS))),0,0, + ((int)&(nvDefaults.tables.rssiChanOffsets[0].gnRssiOffset[0]) - + (int)&nvDefaults.tables.rssiChanOffsets[0]),"gnRssiOffset"}, + {{nul}, 0, 0, 0, 0, 0, 0,{nul}}, + }, // TABLE_sRssiChannelOffsets + + { // TABLE_sCalData + {"ea",_ID_U16,SINGULAR,0,0,0, + ((int)&(nvDefaults.tables.hwCalValues.calData.psSlpTimeOvrHd2G) - + (int)&nvDefaults.tables.hwCalValues.calData),"psSlpTimeOvrHd2G"}, + {"eb",_ID_U16,SINGULAR,0,0,0, + ((int)&(nvDefaults.tables.hwCalValues.calData.psSlpTimeOvrHd5G) - + (int)&nvDefaults.tables.hwCalValues.calData),"psSlpTimeOvrHd5G"}, + {"ec",_ID_U16,SINGULAR,0,0,0, + ((int)&(nvDefaults.tables.hwCalValues.calData.psSlpTimeOvrHdxLNA5G) - + (int)&nvDefaults.tables.hwCalValues.calData),"psSlpTimeOvrHdxLNA5G"}, + {"ed",_ID_U8,SINGULAR,0,0,0, + (((int)&(nvDefaults.tables.hwCalValues.calData.psSlpTimeOvrHdxLNA5G) + + sizeof(uint16)) - (int)&nvDefaults.tables.hwCalValues.calData), + "nv_TxBBFSel9MHz"}, + {"ee",_ID_U8,SINGULAR,0,0,0, + ((int)&(nvDefaults.tables.hwCalValues.calData.hwParam2) - + (int)&nvDefaults.tables.hwCalValues.calData),"hwParam2"}, + {"ef",_ID_U16,SINGULAR,0,0,0, + ((int)&(nvDefaults.tables.hwCalValues.calData.custom_tcxo_reg8) - + (int)&nvDefaults.tables.hwCalValues.calData),"custom_tcxo_reg8"}, + {"eg",_ID_U16,SINGULAR,0,0,0, + ((int)&(nvDefaults.tables.hwCalValues.calData.custom_tcxo_reg9) - + (int)&nvDefaults.tables.hwCalValues.calData),"custom_tcxo_reg9"}, + {"eh",_ID_U32,SINGULAR,0,0,0, + ((int)&(nvDefaults.tables.hwCalValues.calData.hwParam3) - + (int)&nvDefaults.tables.hwCalValues.calData),"hwParam3"}, + {"ei",_ID_U32,SINGULAR,0,0,0, + ((int)&(nvDefaults.tables.hwCalValues.calData.hwParam4) - + (int)&nvDefaults.tables.hwCalValues.calData),"hwParam4"}, + {"ej",_ID_U32,SINGULAR,0,0,0, + ((int)&(nvDefaults.tables.hwCalValues.calData.hwParam5) - + (int)&nvDefaults.tables.hwCalValues.calData),"hwParam5"}, + {"ek",_ID_U32,SINGULAR,0,0,0, + ((int)&(nvDefaults.tables.hwCalValues.calData.hwParam6) - + (int)&nvDefaults.tables.hwCalValues.calData),"hwParam6"}, + {"el",_ID_U32,SINGULAR,0,0,0, + ((int)&(nvDefaults.tables.hwCalValues.calData.hwParam7) - + (int)&nvDefaults.tables.hwCalValues.calData),"hwParam7"}, + {"em",_ID_U32,SINGULAR,0,0,0, + ((int)&(nvDefaults.tables.hwCalValues.calData.hwParam8) - + (int)&nvDefaults.tables.hwCalValues.calData),"hwParam8"}, + {"en",_ID_U32,SINGULAR,0,0,0, + ((int)&(nvDefaults.tables.hwCalValues.calData.hwParam9) - + (int)&nvDefaults.tables.hwCalValues.calData),"hwParam9"}, + {"eo",_ID_U32,SINGULAR,0,0,0, + ((int)&(nvDefaults.tables.hwCalValues.calData.hwParam10) - + (int)&nvDefaults.tables.hwCalValues.calData),"hwParam10"}, + {"ep",_ID_U32,SINGULAR,0,0,0, + ((int)&(nvDefaults.tables.hwCalValues.calData.hwParam11) - + (int)&nvDefaults.tables.hwCalValues.calData),"hwParam11"}, + {{nul}, 0, 0, 0, 0, 0, 0,{nul}}, + }, // TABLE_sCalData + + { // TABLE_sTxBbFilterMode + {"es",_ID_U32,SINGULAR,0,0,0, + ((int)&(nvDefaults.tables.txbbFilterMode.txFirFilterMode) - + (int)&nvDefaults.tables.txbbFilterMode),"txFirFilterMode"}, + {{nul}, 0, 0, 0, 0, 0, 0,{nul}}, + }, // TABLE_sTxBbFilterMode + + { // TABLE_sOfdmCmdPwrOffset + {"et",_ID_S16,SINGULAR,0,0,0, + ((int)&(nvDefaults.tables.ofdmCmdPwrOffset.ofdmPwrOffset) - + (int)&nvDefaults.tables.ofdmCmdPwrOffset),"ofdmPwrOffset"}, + {"eu",_ID_S16,SINGULAR,0,0,0, + ((int)&(nvDefaults.tables.ofdmCmdPwrOffset.rsvd) - + (int)&nvDefaults.tables.ofdmCmdPwrOffset),"rsvd"}, + {{nul}, 0, 0, 0, 0, 0, 0,{nul}}, + }, // TABLE_sOfdmCmdPwrOffset + + { // TABLE_sDefaultCountry + {"if",_ID_U8,SINGULAR,0,0,0, + ((int)&(nvDefaults.tables.defaultCountryTable.regDomain) - + (int)&nvDefaults.tables.defaultCountryTable),"regDomain"}, + {"ig",_ID_U8,(_ADD_SIZE1(NV_FIELD_COUNTRY_CODE_SIZE)|ARRAY_1), + ((FIELD_SIZE_TYPE_BIT(FIELD_SIZE_IDX_INT))| + (FIELD_SIZE_VALUE_BITS(NV_FIELD_COUNTRY_CODE_SIZE))),0,0, + ((int)&(nvDefaults.tables.defaultCountryTable.countryCode[0]) - + (int)&nvDefaults.tables.defaultCountryTable),"countryCode"}, + {{nul}, 0, 0, 0, 0, 0, 0,{nul}}, + }, // TABLE_sDefaultCountry + + { // TABLE_sFwConfig + {"ih",_ID_U8,SINGULAR,0,0,0,((int)&(nvDefaults.tables.fwConfig.skuID) - + (int)&nvDefaults.tables.fwConfig),"skuID"}, + {"ii",_ID_U8,SINGULAR,0,0,0,((int)&(nvDefaults.tables.fwConfig.tpcMode2G) + - (int)&nvDefaults.tables.fwConfig),"tpcMode2G"}, + {"ij",_ID_U8,SINGULAR,0,0,0,((int)&(nvDefaults.tables.fwConfig.tpcMode5G) + - (int)&nvDefaults.tables.fwConfig),"tpcMode5G"}, + {"ik",_ID_U8,SINGULAR,0,0,0,((int)&(nvDefaults.tables.fwConfig.configItem1) + - (int)&nvDefaults.tables.fwConfig),"configItem1"}, + {"il",_ID_U8,SINGULAR,0,0,0,((int)&(nvDefaults.tables.fwConfig.xPA2G) - + (int)&nvDefaults.tables.fwConfig),"xPA2G"}, + {"im",_ID_U8,SINGULAR,0,0,0,((int)&(nvDefaults.tables.fwConfig.xPA5G) - + (int)&nvDefaults.tables.fwConfig),"xPA5G"}, + {"in",_ID_U8,SINGULAR,0,0,0, + ((int)&(nvDefaults.tables.fwConfig.extPaCtrl0Polarity) - + (int)&nvDefaults.tables.fwConfig),"extPaCtrl0Polarity"}, + {"io",_ID_U8,SINGULAR,0,0,0, + ((int)&(nvDefaults.tables.fwConfig.extPaCtrl1Polarity) - + (int)&nvDefaults.tables.fwConfig),"extPaCtrl1Polarity"}, + {"ip",_ID_U8,SINGULAR,0,0,0,((int)&(nvDefaults.tables.fwConfig.xLNA2G) - + (int)&nvDefaults.tables.fwConfig),"xLNA2G"}, + {"iq",_ID_U8,SINGULAR,0,0,0,((int)&(nvDefaults.tables.fwConfig.xLNA5G) - + (int)&nvDefaults.tables.fwConfig),"xLNA5G"}, + {"ir",_ID_U8,SINGULAR,0,0,0,((int)&(nvDefaults.tables.fwConfig.xCoupler2G) + - (int)&nvDefaults.tables.fwConfig),"xCoupler2G"}, + {"is",_ID_U8,SINGULAR,0,0,0,((int)&(nvDefaults.tables.fwConfig.xCoupler5G) + - (int)&nvDefaults.tables.fwConfig),"xCoupler5G"}, + {"it",_ID_U8,SINGULAR,0,0,0,((int)&(nvDefaults.tables.fwConfig.xPdet2G) - + (int)&nvDefaults.tables.fwConfig),"xPdet2G"}, + {"iu",_ID_U8,SINGULAR,0,0,0,((int)&(nvDefaults.tables.fwConfig.xPdet5G) - + (int)&nvDefaults.tables.fwConfig),"xPdet5G"}, + {"iv",_ID_U8,SINGULAR,0,0,0, + ((int)&(nvDefaults.tables.fwConfig.enableDPD2G) - + (int)&nvDefaults.tables.fwConfig),"enableDPD2G"}, + {"iw",_ID_U8,SINGULAR,0,0,0, + ((int)&(nvDefaults.tables.fwConfig.enableDPD5G) - + (int)&nvDefaults.tables.fwConfig),"enableDPD5G"}, + {"ix",_ID_U8,SINGULAR,0,0,0, + ((int)&(nvDefaults.tables.fwConfig.pdadcSelect2G) - + (int)&nvDefaults.tables.fwConfig),"pdadcSelect2G"}, + {"iy",_ID_U8,SINGULAR,0,0,0, + ((int)&(nvDefaults.tables.fwConfig.pdadcSelect5GLow) - + (int)&nvDefaults.tables.fwConfig),"pdadcSelect5GLow"}, + {"iz",_ID_U8,SINGULAR,0,0,0, + ((int)&(nvDefaults.tables.fwConfig.pdadcSelect5GMid) - + (int)&nvDefaults.tables.fwConfig),"pdadcSelect5GMid"}, + {"i0",_ID_U8,SINGULAR,0,0,0, + ((int)&(nvDefaults.tables.fwConfig.pdadcSelect5GHigh) - + (int)&nvDefaults.tables.fwConfig),"pdadcSelect5GHigh"}, + {"i1",_ID_U32,SINGULAR,0,0,0,((int)&(nvDefaults.tables.fwConfig.configItem2) + - (int)&nvDefaults.tables.fwConfig),"configItem2"}, + {"i2",_ID_U32,SINGULAR,0,0,0,((int)&(nvDefaults.tables.fwConfig.configItem3) + - (int)&nvDefaults.tables.fwConfig),"configItem3"}, + {"i3",_ID_U32,SINGULAR,0,0,0,((int)&(nvDefaults.tables.fwConfig.configItem4) + - (int)&nvDefaults.tables.fwConfig),"configItem4"}, + {{nul}, 0, 0, 0, 0, 0, 0,{nul}}, + }, // TABLE_sFwConfig + + { // TABLE_tTpcPowerTable + {"kc",_ID_U8,(_ADD_SIZE2(TPC_MEM_POWER_LUT_DEPTH)|ARRAY_2), + ((FIELD_SIZE_TYPE_BIT(FIELD_SIZE_IDX_ENUM))| + (FIELD_SIZE_VALUE_BITS(INDEX_ENUM_NUM_PHY_MAX_TX_CHAINS))), + ((FIELD_SIZE_TYPE_BIT(FIELD_SIZE_IDX_INT))| + (FIELD_SIZE_VALUE_BITS(TPC_MEM_POWER_LUT_DEPTH))),0, + ((int)&(nvDefaults.tables.plutCharacterized[0]) - + (int)&nvDefaults.tables.plutCharacterized[0]),"tTpcPowerTable"}, + {{nul}, 0, 0, 0, 0, 0, 0,{nul}}, + }, // TABLE_tTpcPowerTable + + { // TABLE_tRateGroupPwr + {"kb",_ID_U32,(ARRAY_1),((FIELD_SIZE_TYPE_BIT(FIELD_SIZE_IDX_ENUM))| + (FIELD_SIZE_VALUE_BITS(INDEX_ENUM_NUM_HAL_PHY_RATES))),0,0, + ((int)&(nvDefaults.tables.pwrOptimum[0]) - + (int)&nvDefaults.tables.pwrOptimum[0]),"tRateGroupPwr"}, + {{nul}, 0, 0, 0, 0, 0, 0,{nul}}, + }, // TABLE_tRateGroupPwr + + { // TABLE_tRateGroupPwrVR + {"kd",_ID_U32,(_ADD_SIZE1(NUM_RF_VR_RATE)|ARRAY_1), + ((FIELD_SIZE_TYPE_BIT(FIELD_SIZE_IDX_INT))| + (FIELD_SIZE_VALUE_BITS(NUM_RF_VR_RATE))),0,0, + ((int)&(nvDefaults.tables.pwrOptimum_virtualRate[0]) - + (int)&nvDefaults.tables.pwrOptimum_virtualRate[0]),"tRateGroupPwrVR"}, + {{nul}, 0, 0, 0, 0, 0, 0,{nul}}, + }, // TABLE_tRateGroupPwrVR + + { // TABLE_sRegulatoryDomains + {"dx",_TABLE_IDX(TABLE_sRegulatoryChannel),(ARRAY_1), + ((FIELD_SIZE_TYPE_BIT(FIELD_SIZE_IDX_ENUM))| + (FIELD_SIZE_VALUE_BITS(INDEX_ENUM_NUM_RF_CHANNELS))),0,0, + ((int)&(nvDefaults.tables.regDomains[0].channels[0]) - + (int)&nvDefaults.tables.regDomains[0]),"channels"}, + {"dy",_ID_U32,(ARRAY_1),((FIELD_SIZE_TYPE_BIT(FIELD_SIZE_IDX_ENUM))| + (FIELD_SIZE_VALUE_BITS(INDEX_ENUM_NUM_RF_SUBBANDS))),0,0, + ((int)&(nvDefaults.tables.regDomains[0].antennaGain[0]) - + (int)&nvDefaults.tables.regDomains[0]),"antennaGain"}, + {"dz",_ID_U32,(ARRAY_1),((FIELD_SIZE_TYPE_BIT(FIELD_SIZE_IDX_ENUM))| + (FIELD_SIZE_VALUE_BITS(INDEX_ENUM_NUM_2_4GHZ_CHANNELS))),0,0, + ((int)&(nvDefaults.tables.regDomains[0].bRatePowerOffset[0]) - + (int)&nvDefaults.tables.regDomains[0]),"bRatePowerOffset"}, + {"d0",_ID_U32,(ARRAY_1),((FIELD_SIZE_TYPE_BIT(FIELD_SIZE_IDX_ENUM))| + (FIELD_SIZE_VALUE_BITS(INDEX_ENUM_NUM_RF_CHANNELS))),0,0, + ((int)&(nvDefaults.tables.regDomains[0].gnRatePowerOffset[0]) - + (int)&nvDefaults.tables.regDomains[0]),"gnRatePowerOffset"}, + {{nul}, 0, 0, 0, 0, 0, 0,{nul}}, + }, // TABLE_sRegulatoryDomains + + { // TABLE_sHwCalValues + {"eq",_ID_U32,SINGULAR,0,0,0, + ((int)&(nvDefaults.tables.hwCalValues.validBmap) - + (int)&nvDefaults.tables.hwCalValues),"validBmap"}, + {"er",_TABLE_IDX(TABLE_sCalData),SINGULAR,0,0,0, + ((int)&(nvDefaults.tables.hwCalValues.calData) - + (int)&nvDefaults.tables.hwCalValues),"calData"}, + {{nul}, 0, 0, 0, 0, 0, 0,{nul}}, + }, // TABLE_sHwCalValues + + { // TABLE_sNvTables + {"jm",_TABLE_IDX(TABLE_tRateGroupPwr),(ARRAY_1), + ((FIELD_SIZE_TYPE_BIT(FIELD_SIZE_IDX_ENUM))| + (FIELD_SIZE_VALUE_BITS(INDEX_ENUM_NUM_RF_SUBBANDS))),0,0, + ((int)&(nvDefaults.tables.pwrOptimum[0]) - (int)&nvDefaults.tables), + "pwrOptimum"}, + {"jn",_TABLE_IDX(TABLE_sRegulatoryDomains),(ARRAY_1), + ((FIELD_SIZE_TYPE_BIT(FIELD_SIZE_IDX_ENUM))| + (FIELD_SIZE_VALUE_BITS(INDEX_ENUM_NUM_REG_DOMAINS))),0,0, + ((int)&(nvDefaults.tables.regDomains[0]) - (int)&nvDefaults.tables), + "regDomains"}, + {"jo",_TABLE_IDX(TABLE_sDefaultCountry),SINGULAR,0,0,0, + ((int)&(nvDefaults.tables.defaultCountryTable) - + (int)&nvDefaults.tables),"defaultCountryTable"}, + {"jp",_TABLE_IDX(TABLE_tTpcPowerTable),(ARRAY_1), + ((FIELD_SIZE_TYPE_BIT(FIELD_SIZE_IDX_ENUM))| + (FIELD_SIZE_VALUE_BITS(INDEX_ENUM_NUM_RF_CHANNELS))),0,0, + ((int)&(nvDefaults.tables.plutCharacterized[0]) - + (int)&nvDefaults.tables),"plutCharacterized"}, + {"jq",_ID_S16,(ARRAY_1),((FIELD_SIZE_TYPE_BIT(FIELD_SIZE_IDX_ENUM))| + (FIELD_SIZE_VALUE_BITS(INDEX_ENUM_NUM_RF_CHANNELS))),0,0, + ((int)&(nvDefaults.tables.plutPdadcOffset[0]) - + (int)&nvDefaults.tables),"plutPdadcOffset"}, + {"jr",_TABLE_IDX(TABLE_tRateGroupPwrVR),(ARRAY_1), + ((FIELD_SIZE_TYPE_BIT(FIELD_SIZE_IDX_ENUM))| + (FIELD_SIZE_VALUE_BITS(INDEX_ENUM_NUM_RF_SUBBANDS))),0,0, + ((int)&(nvDefaults.tables.pwrOptimum_virtualRate[0]) - + (int)&nvDefaults.tables),"pwrOptimum_virtualRate"}, + {"js",_TABLE_IDX(TABLE_sFwConfig),SINGULAR,0,0,0, + ((int)&(nvDefaults.tables.fwConfig) - (int)&nvDefaults.tables), + "fwConfig"}, + {"jt",_TABLE_IDX(TABLE_sRssiChannelOffsets),(_ADD_SIZE1(2)|ARRAY_1), + ((FIELD_SIZE_TYPE_BIT(FIELD_SIZE_IDX_INT))|(FIELD_SIZE_VALUE_BITS(2))), + 0,0,((int)&(nvDefaults.tables.rssiChanOffsets[0]) - + (int)&nvDefaults.tables),"rssiChanOffsets"}, + {"ju",_TABLE_IDX(TABLE_sHwCalValues),SINGULAR,0,0,0, + ((int)&(nvDefaults.tables.hwCalValues) - (int)&nvDefaults.tables), + "hwCalValues"}, + {"jv",_ID_S16,(ARRAY_1),((FIELD_SIZE_TYPE_BIT(FIELD_SIZE_IDX_ENUM))| + (FIELD_SIZE_VALUE_BITS(INDEX_ENUM_NUM_RF_CHANNELS))),0,0, + ((int)&(nvDefaults.tables.antennaPathLoss[0]) - + (int)&nvDefaults.tables),"antennaPathLoss"}, + {"jw",_ID_S16,(ARRAY_2),((FIELD_SIZE_TYPE_BIT(FIELD_SIZE_IDX_ENUM))| + (FIELD_SIZE_VALUE_BITS(INDEX_ENUM_NUM_802_11_MODES))), + ((FIELD_SIZE_TYPE_BIT(FIELD_SIZE_IDX_ENUM))| + (FIELD_SIZE_VALUE_BITS(INDEX_ENUM_NUM_RF_CHANNELS))),0, + ((int)&(nvDefaults.tables.pktTypePwrLimits[0][0]) - + (int)&nvDefaults.tables),"pktTypePwrLimits"}, + {"jx",_TABLE_IDX(TABLE_sOfdmCmdPwrOffset),SINGULAR,0,0,0, + ((int)&(nvDefaults.tables.ofdmCmdPwrOffset) - (int)&nvDefaults.tables), + "ofdmCmdPwrOffset"}, + {"jy",_TABLE_IDX(TABLE_sTxBbFilterMode),SINGULAR,0,0,0, + ((int)&(nvDefaults.tables.txbbFilterMode) - (int)&nvDefaults.tables), + "txbbFilterMode"}, + {{nul}, 0, 0, 0, 0, 0, 0,{nul}}, + }, // TABLE_sNvTables + + { //INDEX_TABLE_LAST + {{nul}, 0, 0, 0, 0, 0, 0,{nul}}, + }, //INDEX_TABLE_LAST +}; // END _NV_TEMPLATE_TABLE + +int getTableNoOfFields(int tblIdx) +{ + return tableNoOfFieldArray[tblIdx]; +} diff --git a/Kbuild b/Kbuild old mode 100755 new mode 100644 index 7977ab48763c..0f9b51dc73f4 --- a/Kbuild +++ b/Kbuild @@ -13,7 +13,7 @@ ifeq ($(KERNEL_BUILD),1) WLAN_ROOT := drivers/staging/prima endif -ifeq ($(KERNEL_BUILD),0) +ifeq ($(KERNEL_BUILD), 0) # These are configurable via Kconfig for kernel-based builds # Need to explicitly configure for Android-based builds @@ -33,17 +33,22 @@ ifeq ($(KERNEL_BUILD),0) CONFIG_QCOM_TDLS := y #Flag to enable Fast Transition (11r) feature - ifeq ($(CONFIG_PRONTO_WLAN), m) CONFIG_QCOM_VOWIFI_11R := y - endif #Flag to enable Protected Managment Frames (11w) feature - ifneq ($(CONFIG_PRONTO_WLAN),) + ifneq ($(CONFIG_QCA_CLD_WLAN),) CONFIG_WLAN_FEATURE_11W := y endif + #Flag to enable new Linux Regulatory implementation + CONFIG_ENABLE_LINUX_REG := n + endif +# To enable CCX upload, dependent config +# CONFIG_QCOM_CCX must be enabled. +CONFIG_QCOM_CCX_UPLOAD := n + # Feature flags which are not (currently) configurable via Kconfig #Whether to build debug version @@ -53,19 +58,12 @@ BUILD_DEBUG_VERSION := 1 BUILD_DIAG_VERSION := 1 #Do we panic on bug? default is to warn -PANIC_ON_BUG := 0 +PANIC_ON_BUG := 1 #Re-enable wifi on WDI timeout RE_ENABLE_WIFI_ON_WDI_TIMEOUT := 0 -#Enable to compile converged driver (CLD) -#Disable to compile cld (default) -CONFIG_QCA_WIFI_2_0 := 1 - -#Enable to compile for integrated SOC (common for prima and CLD) -#Disable to compile for discrete -CONFIG_QCA_WIFI_ISOC := 0 - +ifeq ($(CONFIG_QCA_WIFI_2_0), 1) #Enable OS specific ADF abstraction CONFIG_ADF_SUPPORT := 1 @@ -73,7 +71,10 @@ CONFIG_ADF_SUPPORT := 1 CONFIG_ATH_PERF_PWR_OFFLOAD := 1 #Disable packet log -CONFIG_REMOVE_PKT_LOG := 0 +CONFIG_REMOVE_PKT_LOG := 1 + +#Enable 11AC TX +CONFIG_ATH_11AC_TXCOMPACT := 1 #Enable OS specific IRQ abstraction CONFIG_ATH_SUPPORT_SHARED_IRQ := 1 @@ -114,33 +115,15 @@ CONFIG_LITTLE_ENDIAN := 1 #Enable TX reclaim support CONFIG_TX_CREDIT_RECLAIM_SUPPORT := 0 -ifeq ($(CONFIG_QCA_WIFI_2_0), 1) -ifeq ($(CONFIG_QCA_WIFI_ISOC), 1) -# Disable 11AC TX -CONFIG_ATH_11AC_TXCOMPACT := 0 -# Enable encap/decap on host -CONFIG_SUPPORT_SW_TXRX_ENCAP := 1 -# Enable high latency support -CONFIG_SUPPORT_HIGH_LATENCY := 1 -else -# DISCRETE -# Enable 11AC TX -CONFIG_ATH_11AC_TXCOMPACT := 1 -# Disable encap/decap on host -CONFIG_SUPPORT_SW_TXRX_ENCAP := 0 -# Disable high latency support -CONFIG_SUPPORT_HIGH_LATENCY := 0 -endif -endif - #Enable FTM support -CONFIG_QCA_WIFI_FTM := 1 +CONFIG_QCA_WIFI_FTM := 0 #Enable Checksum Offload CONFIG_CHECKSUM_OFFLOAD := 1 #Enable GTK offload -CONFIG_GTK_OFFLOAD := 1 +CONFIG_GTK_OFFLOAD := 0 +endif ifeq ($(CONFIG_CFG80211),y) HAVE_CFG80211 := 1 @@ -152,6 +135,7 @@ HAVE_CFG80211 := 0 endif endif +ifeq ($(CONFIG_QCA_WIFI_2_0), 1) ############ COMMON ############ COMMON_DIR := CORE/SERVICES/COMMON COMMON_INC := -I$(WLAN_ROOT)/$(COMMON_DIR) @@ -166,6 +150,7 @@ ADF_OBJS := $(ADF_DIR)/adf_nbuf.o \ $(ADF_DIR)/adf_os_lock.o \ $(ADF_DIR)/adf_os_mem.o \ $(ADF_DIR)/linux/adf_os_lock_pvt.o +endif ############ BAP ############ BAP_DIR := CORE/BAP @@ -197,12 +182,12 @@ BAP_OBJS := $(BAP_SRC_DIR)/bapApiData.o \ $(BAP_SRC_DIR)/btampHCI.o ############ DXE ############ -DXE_DIR := CORE/DXE -DXE_INC_DIR := $(DXE_DIR)/inc -DXE_SRC_DIR := $(DXE_DIR)/src +DXE_DIR := CORE/DXE +DXE_INC_DIR := $(DXE_DIR)/inc +DXE_SRC_DIR := $(DXE_DIR)/src -DXE_INC := -I$(WLAN_ROOT)/$(DXE_INC_DIR) \ - -I$(WLAN_ROOT)/$(DXE_SRC_DIR) +DXE_INC := -I$(WLAN_ROOT)/$(DXE_INC_DIR) \ + -I$(WLAN_ROOT)/$(DXE_SRC_DIR) HIF_DXE_DIR := CORE/SERVICES/HIF/DXE HIF_DXE_INC := -I$(WLAN_ROOT)/$(HIF_DXE_DIR) @@ -242,14 +227,15 @@ HDD_INC := -I$(WLAN_ROOT)/$(HDD_INC_DIR) \ HDD_OBJS := $(HDD_SRC_DIR)/bap_hdd_main.o \ $(HDD_SRC_DIR)/wlan_hdd_assoc.o \ $(HDD_SRC_DIR)/wlan_hdd_cfg.o \ + $(HDD_SRC_DIR)/wlan_hdd_debugfs.o \ $(HDD_SRC_DIR)/wlan_hdd_dev_pwr.o \ $(HDD_SRC_DIR)/wlan_hdd_dp_utils.o \ $(HDD_SRC_DIR)/wlan_hdd_early_suspend.o \ $(HDD_SRC_DIR)/wlan_hdd_ftm.o \ $(HDD_SRC_DIR)/wlan_hdd_hostapd.o \ - $(HDD_SRC_DIR)/wlan_hdd_oemdata.o \ $(HDD_SRC_DIR)/wlan_hdd_main.o \ $(HDD_SRC_DIR)/wlan_hdd_mib.o \ + $(HDD_SRC_DIR)/wlan_hdd_oemdata.o \ $(HDD_SRC_DIR)/wlan_hdd_scan.o \ $(HDD_SRC_DIR)/wlan_hdd_softap_tx_rx.o \ $(HDD_SRC_DIR)/wlan_hdd_tx_rx.o \ @@ -311,6 +297,7 @@ MAC_LIM_OBJS := $(MAC_SRC_DIR)/pe/lim/limAIDmgmt.o \ $(MAC_SRC_DIR)/pe/lim/limProcessProbeRspFrame.o \ $(MAC_SRC_DIR)/pe/lim/limProcessSmeReqMessages.o \ $(MAC_SRC_DIR)/pe/lim/limPropExtsUtils.o \ + $(MAC_SRC_DIR)/pe/lim/limRMC.o \ $(MAC_SRC_DIR)/pe/lim/limRoamingAlgo.o \ $(MAC_SRC_DIR)/pe/lim/limScanResultUtils.o \ $(MAC_SRC_DIR)/pe/lim/limSecurityUtils.o \ @@ -327,8 +314,10 @@ MAC_LIM_OBJS := $(MAC_SRC_DIR)/pe/lim/limAIDmgmt.o \ $(MAC_SRC_DIR)/pe/lim/limUtils.o ifeq ($(CONFIG_QCOM_CCX),y) +ifneq ($(CONFIG_QCOM_CCX_UPLOAD),y) MAC_LIM_OBJS += $(MAC_SRC_DIR)/pe/lim/limProcessCcxFrame.o endif +endif ifeq ($(CONFIG_QCOM_TDLS),y) MAC_LIM_OBJS += $(MAC_SRC_DIR)/pe/lim/limProcessTdls.o @@ -386,8 +375,10 @@ SME_CSR_OBJS := $(SME_SRC_DIR)/csr/csrApiRoam.o \ $(SME_SRC_DIR)/csr/csrUtil.o ifeq ($(CONFIG_QCOM_CCX),y) +ifneq ($(CONFIG_QCOM_CCX_UPLOAD),y) SME_CSR_OBJS += $(SME_SRC_DIR)/csr/csrCcx.o endif +endif ifeq ($(CONFIG_QCOM_TDLS),y) SME_CSR_OBJS += $(SME_SRC_DIR)/csr/csrTdlsProcess.o @@ -400,7 +391,8 @@ SME_PMC_OBJS := $(SME_SRC_DIR)/pmc/pmcApi.o \ SME_QOS_OBJS := $(SME_SRC_DIR)/QoS/sme_Qos.o SME_CMN_OBJS := $(SME_SRC_DIR)/sme_common/sme_Api.o \ - $(SME_SRC_DIR)/sme_common/sme_FTApi.o + $(SME_SRC_DIR)/sme_common/sme_FTApi.o \ + $(SME_SRC_DIR)/sme_common/sme_Trace.o SME_BTC_OBJS := $(SME_SRC_DIR)/btc/btcApi.o @@ -466,10 +458,6 @@ SYS_OBJS := $(SYS_COMMON_SRC_DIR)/wlan_qct_sys.o \ $(SYS_LEGACY_SRC_DIR)/utils/src/utilsApi.o \ $(SYS_LEGACY_SRC_DIR)/utils/src/utilsParser.o -ifeq ($(CONFIG_QCOM_CCX),y) -SYS_OBJS += $(SYS_LEGACY_SRC_DIR)/utils/src/limCcxparserApi.o -endif - ############ TL ############ TL_DIR := CORE/TL TL_INC_DIR := $(TL_DIR)/inc @@ -505,12 +493,16 @@ VOSS_OBJS := $(VOSS_SRC_DIR)/vos_api.o \ $(VOSS_SRC_DIR)/vos_timer.o \ $(VOSS_SRC_DIR)/vos_trace.o \ $(VOSS_SRC_DIR)/vos_types.o \ - $(VOSS_SRC_DIR)/vos_utils.o + $(VOSS_SRC_DIR)/vos_utils.o \ + $(VOSS_SRC_DIR)/wlan_nv_parser.o \ + $(VOSS_SRC_DIR)/wlan_nv_stream_read.o \ + $(VOSS_SRC_DIR)/wlan_nv_template_builtin.o ifeq ($(BUILD_DIAG_VERSION),1) VOSS_OBJS += $(VOSS_SRC_DIR)/vos_diag.o endif +ifeq ($(CONFIG_QCA_WIFI_2_0), 1) ########### BMI ########### BMI_DIR := CORE/SERVICES/BMI @@ -627,6 +619,7 @@ WMA_OBJS += $(WMA_DIR)/wma_isoc.o else WMA_OBJS += $(WMA_DIR)/regdomain.o endif +endif ############ WDA ############ WDA_DIR := CORE/WDA @@ -702,15 +695,16 @@ WDI_OBJS += $(WDI_CP_OBJS) \ endif -WCNSS_INC := -I$(WLAN_ROOT)/wcnss/inc +RIVA_INC := -I$(WLAN_ROOT)/wcnss/inc LINUX_INC := -Iinclude/linux INCS := $(BAP_INC) \ + $(DXE_INC) \ $(HDD_INC) \ $(LINUX_INC) \ $(MAC_INC) \ - $(WCNSS_INC) \ + $(RIVA_INC) \ $(SAP_INC) \ $(SME_INC) \ $(SVC_INC) \ @@ -730,6 +724,7 @@ INCS += $(WMA_INC) \ $(ADF_INC) \ $(TLSHIM_INC) \ $(TXRX_INC) \ + $(PKTLOG_INC) \ $(HTT_INC) \ $(HTC_INC) @@ -822,7 +817,17 @@ CDEFINES := -DANI_LITTLE_BYTE_ENDIAN \ -DWLAN_FEATURE_HOLD_RX_WAKELOCK \ -DWLAN_SOFTAP_VSTA_FEATURE \ -DWLAN_FEATURE_ROAM_SCAN_OFFLOAD \ - -DQCA_SUPPORT_TXRX_VDEV_PAUSE_LL + -DWLAN_FEATURE_GTK_OFFLOAD \ + -DFEATURE_CESIUM_PROPRIETARY \ + -DWLAN_WAKEUP_EVENTS \ + -DWLAN_KD_READY_NOTIFIER \ + -DWLAN_FEATURE_RELIABLE_MCAST \ + -DWLAN_NL80211_TESTMODE \ + -DFEATURE_WLAN_BATCH_SCAN \ + -DFEATURE_WLAN_LPHB \ + -DFEATURE_WLAN_PAL_TIMER_DISABLE \ + -DFEATURE_WLAN_PAL_MEM_DISABLE \ + -DQCA_SUPPORT_TXRX_VDEV_PAUSE_LL ifeq ($(CONFIG_QCA_WIFI_2_0), 0) CDEFINES += -DWLANTL_DEBUG @@ -831,7 +836,7 @@ CDEFINES += -DOSIF_NEED_RX_PEER_ID \ -DQCA_SUPPORT_TXRX_LOCAL_PEER_ID endif -ifneq ($(CONFIG_PRONTO_WLAN),) +ifneq ($(CONFIG_QCA_CLD_WLAN),) CDEFINES += -DWCN_PRONTO CDEFINES += -DWCN_PRONTO_V1 endif @@ -840,15 +845,12 @@ ifeq ($(BUILD_DEBUG_VERSION),1) CDEFINES += -DWLAN_DEBUG \ -DTRACE_RECORD \ -DLIM_TRACE_RECORD \ + -DSME_TRACE_RECORD \ -DPE_DEBUG_LOGW \ -DPE_DEBUG_LOGE \ -DDEBUG endif -ifeq ($(CONFIG_SUPPORT_HIGH_LATENCY),1) -CDEFINES += -DCONFIG_HL_SUPPORT -endif - ifeq ($(CONFIG_SLUB_DEBUG_ON),y) CDEFINES += -DTIMER_MANAGER CDEFINES += -DMEMORY_DEBUG @@ -867,12 +869,17 @@ ifeq ($(CONFIG_QCOM_CCX),y) CDEFINES += -DFEATURE_WLAN_CCX CDEFINES += -DQCA_COMPUTE_TX_DELAY CDEFINES += -DQCA_COMPUTE_TX_DELAY_PER_TID +ifeq ($(CONFIG_QCOM_CCX_UPLOAD),y) +CDEFINES += -DFEATURE_WLAN_CCX_UPLOAD +endif endif #normally, TDLS negative behavior is not needed ifeq ($(CONFIG_QCOM_TDLS),y) CDEFINES += -DFEATURE_WLAN_TDLS +ifeq ($(BUILD_DEBUG_VERSION),1) CDEFINES += -DWLAN_FEATURE_TDLS_DEBUG +endif CDEFINES += -DCONFIG_TDLS_IMPLICIT #CDEFINES += -DFEATURE_WLAN_TDLS_NEGATIVE #Code under FEATURE_WLAN_TDLS_INTERNAL is ported from volans, This code @@ -913,26 +920,6 @@ ifeq ($(CONFIG_WLAN_FEATURE_11W),y) CDEFINES += -DWLAN_FEATURE_11W endif -ifneq (, $(filter msm8960, $(BOARD_PLATFORM))) -EXTRA_CFLAGS += -march=armv7-a -CDEFINES += -DMSM_PLATFORM_8960 -endif - -ifneq (, $(filter msm8660, $(BOARD_PLATFORM))) -EXTRA_CFLAGS += -march=armv7-a -CDEFINES += -DMSM_PLATFORM_8660 -endif - -ifneq (, $(filter msm7630_surf msm7630_fusion, $(BOARD_PLATFORM))) -EXTRA_CFLAGS += -march=armv7-a -CDEFINES += -DMSM_PLATFORM_7x30 -endif - -ifneq (, $(filter msm7627_surf, $(BOARD_PLATFORM))) -EXTRA_CFLAGS += -march=armv6 -CDEFINES += -DMSM_PLATFORM_7x27 -endif - ifeq ($(PANIC_ON_BUG),1) CDEFINES += -DPANIC_ON_BUG endif @@ -949,6 +936,12 @@ ifeq ($(findstring opensource, $(WLAN_ROOT)), opensource) CDEFINES += -DWLAN_OPEN_SOURCE endif +ifeq ($(CONFIG_ENABLE_LINUX_REG), y) +ifeq ($(CONFIG_QCA_WIFI_2_0), 0) +CDEFINES += -DCONFIG_ENABLE_LINUX_REG +endif +endif + ifeq ($(CONFIG_QCA_WIFI_2_0), 1) CDEFINES += -DQCA_WIFI_2_0 endif @@ -959,20 +952,10 @@ CDEFINES += -DANI_BUS_TYPE_PLATFORM=1 endif ifeq ($(CONFIG_QCA_WIFI_2_0), 1) -ifeq ($(CONFIG_QCA_WIFI_ISOC), 1) -CDEFINES += -DQCA_ISOC_PRONTO -endif -endif - ifeq ($(CONFIG_QCA_IBSS_SUPPORT), 1) CDEFINES += -DQCA_IBSS_SUPPORT endif -#Enable Encap/Decap on host -ifeq ($(CONFIG_SUPPORT_SW_TXRX_ENCAP), 1) -CDEFINES += -DQCA_SUPPORT_SW_TXRX_ENCAP -endif - #Enable the OS specific ADF abstraction ifeq ($(CONFIG_ADF_SUPPORT), 1) CDEFINES += -DADF_SUPPORT @@ -1068,6 +1051,7 @@ ifeq ($(CONFIG_GTK_OFFLOAD), 1) CDEFINES += -DWLAN_FEATURE_GTK_OFFLOAD CDEFINES += -DIGTK_OFFLOAD endif +endif # Fix build for GCC 4.7 EXTRA_CFLAGS += -Wno-maybe-uninitialized -Wno-unused-function diff --git a/Kconfig b/Kconfig new file mode 100644 index 000000000000..d3f811bbc9c5 --- /dev/null +++ b/Kconfig @@ -0,0 +1,52 @@ +comment "Qualcomm Atheros Prima WLAN module" + +config PRIMA_WLAN + + tristate "Qualcomm Atheros Prima WLAN module" + default n + help + Add support for the Qualcomm Atheros Prima WLAN module + +config PRONTO_WLAN + + tristate "Qualcomm Atheros Pronto WLAN module" + default n + help + Add support for the Qualcomm Atheros Pronto WLAN module + + +# depends on WLAN +# depends on CFG80211 +# depends on WCNSS_CORE + +if PRIMA_WLAN != n || PRONTO_WLAN != n + +config PRIMA_WLAN_BTAMP + bool "Enable the Prima WLAN BT-AMP feature" + default n + +config PRIMA_WLAN_LFR + bool "Enable the Prima WLAN Legacy Fast Roaming feature" + default n + +config PRIMA_WLAN_OKC + bool "Enable the Prima WLAN Opportunistic Key Caching feature" + default n + +config PRIMA_WLAN_11AC_HIGH_TP + bool "Enable the Prima WLAN 802.11ac High Throughput option (depends upon kernel support)" + default n + +config WLAN_FEATURE_11W + bool "Enable the WLAN 802.11w Protected Management Frames feature" + default n + +config QCOM_VOWIFI_11R + bool "Enable Fast Transition (11r) feature" + default n + +config CONFIG_ENABLE_LINUX_REG + bool "Enable linux regulatory feature" + default n + +endif # PRIMA_WLAN || PRONTO_WLAN diff --git a/Makefile b/Makefile index 1503a6907eee..668e0c7db796 100644 --- a/Makefile +++ b/Makefile @@ -30,18 +30,19 @@ CONFIG_PRIMA_WLAN_11AC_HIGH_TP := n #Flag to enable TDLS feature - CONFIG_QCOM_TDLS := n + CONFIG_QCOM_TDLS := y #Flag to enable Fast Transition (11r) feature - ifeq ($(CONFIG_PRONTO_WLAN), m) CONFIG_QCOM_VOWIFI_11R := y - endif #Flag to enable Protected Managment Frames (11w) feature ifneq ($(CONFIG_PRONTO_WLAN),) CONFIG_WLAN_FEATURE_11W := y endif + #Flag to enable new Linux Regulatory implementation + CONFIG_ENABLE_LINUX_REG := n + #endif # Feature flags which are not (currently) configurable via Kconfig @@ -53,7 +54,7 @@ BUILD_DEBUG_VERSION := 1 BUILD_DIAG_VERSION := 1 #Do we panic on bug? default is to warn -PANIC_ON_BUG := 0 +PANIC_ON_BUG := 1 #Re-enable wifi on WDI timeout RE_ENABLE_WIFI_ON_WDI_TIMEOUT := 0 @@ -66,6 +67,7 @@ CONFIG_QCA_WIFI_2_0 := 1 #Disable to compile for discrete CONFIG_QCA_WIFI_ISOC := 0 +ifeq ($(CONFIG_QCA_WIFI_2_0), 1) #Enable OS specific ADF abstraction CONFIG_ADF_SUPPORT := 1 @@ -73,7 +75,7 @@ CONFIG_ADF_SUPPORT := 1 CONFIG_ATH_PERF_PWR_OFFLOAD := 1 #Disable packet log -CONFIG_REMOVE_PKT_LOG := 0 +CONFIG_REMOVE_PKT_LOG := 1 #Enable 11AC TX CONFIG_ATH_11AC_TXCOMPACT := 1 @@ -122,6 +124,7 @@ CONFIG_CHECKSUM_OFFLOAD := 1 #Enable GTK offload CONFIG_GTK_OFFLOAD := 1 +endif ifeq ($(CONFIG_CFG80211),y) HAVE_CFG80211 := 1 @@ -133,6 +136,7 @@ HAVE_CFG80211 := 0 endif endif +ifeq ($(CONFIG_QCA_WIFI_2_0), 1) ############ COMMON ############ COMMON_DIR := CORE/SERVICES/COMMON COMMON_INC := -I$(WLAN_ROOT)/$(COMMON_DIR) @@ -147,6 +151,7 @@ ADF_OBJS := $(ADF_DIR)/adf_nbuf.o \ $(ADF_DIR)/adf_os_lock.o \ $(ADF_DIR)/adf_os_mem.o \ $(ADF_DIR)/linux/adf_os_lock_pvt.o +endif ############ BAP ############ BAP_DIR := CORE/BAP @@ -178,12 +183,12 @@ BAP_OBJS := $(BAP_SRC_DIR)/bapApiData.o \ $(BAP_SRC_DIR)/btampHCI.o ############ DXE ############ -DXE_DIR := CORE/DXE -DXE_INC_DIR := $(DXE_DIR)/inc -DXE_SRC_DIR := $(DXE_DIR)/src +DXE_DIR := CORE/DXE +DXE_INC_DIR := $(DXE_DIR)/inc +DXE_SRC_DIR := $(DXE_DIR)/src -DXE_INC := -I$(WLAN_ROOT)/$(DXE_INC_DIR) \ - -I$(WLAN_ROOT)/$(DXE_SRC_DIR) +DXE_INC := -I$(WLAN_ROOT)/$(DXE_INC_DIR) \ + -I$(WLAN_ROOT)/$(DXE_SRC_DIR) HIF_DXE_DIR := CORE/SERVICES/HIF/DXE HIF_DXE_INC := -I$(WLAN_ROOT)/$(HIF_DXE_DIR) @@ -223,14 +228,15 @@ HDD_INC := -I$(WLAN_ROOT)/$(HDD_INC_DIR) \ HDD_OBJS := $(HDD_SRC_DIR)/bap_hdd_main.o \ $(HDD_SRC_DIR)/wlan_hdd_assoc.o \ $(HDD_SRC_DIR)/wlan_hdd_cfg.o \ + $(HDD_SRC_DIR)/wlan_hdd_debugfs.o \ $(HDD_SRC_DIR)/wlan_hdd_dev_pwr.o \ $(HDD_SRC_DIR)/wlan_hdd_dp_utils.o \ $(HDD_SRC_DIR)/wlan_hdd_early_suspend.o \ $(HDD_SRC_DIR)/wlan_hdd_ftm.o \ $(HDD_SRC_DIR)/wlan_hdd_hostapd.o \ - $(HDD_SRC_DIR)/wlan_hdd_oemdata.o \ $(HDD_SRC_DIR)/wlan_hdd_main.o \ $(HDD_SRC_DIR)/wlan_hdd_mib.o \ + $(HDD_SRC_DIR)/wlan_hdd_oemdata.o \ $(HDD_SRC_DIR)/wlan_hdd_scan.o \ $(HDD_SRC_DIR)/wlan_hdd_softap_tx_rx.o \ $(HDD_SRC_DIR)/wlan_hdd_tx_rx.o \ @@ -292,6 +298,7 @@ MAC_LIM_OBJS := $(MAC_SRC_DIR)/pe/lim/limAIDmgmt.o \ $(MAC_SRC_DIR)/pe/lim/limProcessProbeRspFrame.o \ $(MAC_SRC_DIR)/pe/lim/limProcessSmeReqMessages.o \ $(MAC_SRC_DIR)/pe/lim/limPropExtsUtils.o \ + $(MAC_SRC_DIR)/pe/lim/limRMC.o \ $(MAC_SRC_DIR)/pe/lim/limRoamingAlgo.o \ $(MAC_SRC_DIR)/pe/lim/limScanResultUtils.o \ $(MAC_SRC_DIR)/pe/lim/limSecurityUtils.o \ @@ -381,7 +388,8 @@ SME_PMC_OBJS := $(SME_SRC_DIR)/pmc/pmcApi.o \ SME_QOS_OBJS := $(SME_SRC_DIR)/QoS/sme_Qos.o SME_CMN_OBJS := $(SME_SRC_DIR)/sme_common/sme_Api.o \ - $(SME_SRC_DIR)/sme_common/sme_FTApi.o + $(SME_SRC_DIR)/sme_common/sme_FTApi.o \ + $(SME_SRC_DIR)/sme_common/sme_Trace.o SME_BTC_OBJS := $(SME_SRC_DIR)/btc/btcApi.o @@ -486,12 +494,16 @@ VOSS_OBJS := $(VOSS_SRC_DIR)/vos_api.o \ $(VOSS_SRC_DIR)/vos_timer.o \ $(VOSS_SRC_DIR)/vos_trace.o \ $(VOSS_SRC_DIR)/vos_types.o \ - $(VOSS_SRC_DIR)/vos_utils.o + $(VOSS_SRC_DIR)/vos_utils.o \ + $(VOSS_SRC_DIR)/wlan_nv_parser.o \ + $(VOSS_SRC_DIR)/wlan_nv_stream_read.o \ + $(VOSS_SRC_DIR)/wlan_nv_template_builtin.o ifeq ($(BUILD_DIAG_VERSION),1) VOSS_OBJS += $(VOSS_SRC_DIR)/vos_diag.o endif +ifeq ($(CONFIG_QCA_WIFI_2_0), 1) ########### BMI ########### BMI_DIR := CORE/SERVICES/BMI @@ -608,6 +620,7 @@ WMA_OBJS += $(WMA_DIR)/wma_isoc.o else WMA_OBJS += $(WMA_DIR)/regdomain.o endif +endif ############ WDA ############ WDA_DIR := CORE/WDA @@ -683,15 +696,16 @@ WDI_OBJS += $(WDI_CP_OBJS) \ endif -WCNSS_INC := -I$(WLAN_ROOT)/wcnss/inc +RIVA_INC := -I$(WLAN_ROOT)/wcnss/inc LINUX_INC := -Iinclude/linux INCS := $(BAP_INC) \ + $(DXE_INC) \ $(HDD_INC) \ $(LINUX_INC) \ $(MAC_INC) \ - $(WCNSS_INC) \ + $(RIVA_INC) \ $(SAP_INC) \ $(SME_INC) \ $(SVC_INC) \ @@ -802,9 +816,17 @@ CDEFINES := -DANI_LITTLE_BYTE_ENDIAN \ -DWLAN_ACTIVEMODE_OFFLOAD_FEATURE \ -DWLAN_FEATURE_HOLD_RX_WAKELOCK \ -DWLAN_SOFTAP_VSTA_FEATURE \ - -DWLAN_FEATURE_ROAM_SCAN_OFFLOAD \ + -DWLAN_FEATURE_ROAM_SCAN_OFFLOAD \ -DWLAN_FEATURE_SCAN_OFFLOAD \ - -DWLAN_LINK_UMAC_SUSPEND_WITH_BUS_SUSPEND \ + -DWLAN_FEATURE_GTK_OFFLOAD \ + -DFEATURE_CESIUM_PROPRIETARY \ + -DWLAN_WAKEUP_EVENTS \ + -DWLAN_KD_READY_NOTIFIER \ + -DWLAN_FEATURE_RELIABLE_MCAST \ + -DWLAN_NL80211_TESTMODE \ + -DFEATURE_WLAN_BATCH_SCAN \ + -DFEATURE_WLAN_LPHB \ + -DWLAN_LINK_UMAC_SUSPEND_WITH_BUS_SUSPEND ifeq ($(CONFIG_QCA_WIFI_2_0), 0) CDEFINES += -DWLANTL_DEBUG @@ -822,6 +844,7 @@ ifeq ($(BUILD_DEBUG_VERSION),1) CDEFINES += -DWLAN_DEBUG \ -DTRACE_RECORD \ -DLIM_TRACE_RECORD \ + -DSME_TRACE_RECORD \ -DPE_DEBUG_LOGW \ -DPE_DEBUG_LOGE \ -DDEBUG @@ -843,14 +866,14 @@ endif ifeq ($(CONFIG_QCOM_CCX),y) CDEFINES += -DFEATURE_WLAN_CCX -CDEFINES += -DQCA_COMPUTE_TX_DELAY -CDEFINES += -DQCA_COMPUTE_TX_DELAY_PER_TID endif #normally, TDLS negative behavior is not needed ifeq ($(CONFIG_QCOM_TDLS),y) CDEFINES += -DFEATURE_WLAN_TDLS +ifeq ($(BUILD_DEBUG_VERSION),1) CDEFINES += -DWLAN_FEATURE_TDLS_DEBUG +endif CDEFINES += -DCONFIG_TDLS_IMPLICIT #CDEFINES += -DFEATURE_WLAN_TDLS_NEGATIVE #Code under FEATURE_WLAN_TDLS_INTERNAL is ported from volans, This code @@ -927,6 +950,10 @@ ifeq ($(findstring opensource, $(WLAN_ROOT)), opensource) CDEFINES += -DWLAN_OPEN_SOURCE endif +ifeq ($(CONFIG_ENABLE_LINUX_REG), y) +CDEFINES += -DCONFIG_ENABLE_LINUX_REG +endif + ifeq ($(CONFIG_QCA_WIFI_2_0), 1) CDEFINES += -DQCA_WIFI_2_0 endif @@ -936,6 +963,7 @@ CDEFINES += -DQCA_WIFI_ISOC CDEFINES += -DANI_BUS_TYPE_PLATFORM=1 endif +ifeq ($(CONFIG_QCA_WIFI_2_0), 1) #Enable the OS specific ADF abstraction ifeq ($(CONFIG_ADF_SUPPORT), 1) CDEFINES += -DADF_SUPPORT @@ -1031,6 +1059,7 @@ ifeq ($(CONFIG_GTK_OFFLOAD), 1) CDEFINES += -DWLAN_FEATURE_GTK_OFFLOAD CDEFINES += -DIGTK_OFFLOAD endif +endif # Fix build for GCC 4.7 EXTRA_CFLAGS += -Wno-maybe-uninitialized -Wno-unused-function diff --git a/riva/inc/halCompiler.h b/riva/inc/halCompiler.h new file mode 100644 index 000000000000..a8a5b668acee --- /dev/null +++ b/riva/inc/halCompiler.h @@ -0,0 +1,158 @@ +/* +* Copyright (c) 2012-2013 Qualcomm Atheros, Inc. +* All Rights Reserved. +* Qualcomm Atheros Confidential and Proprietary. +*/ + +/*========================================================================== + * + * @file: aniCompiler.h + * + * @brief: This file tries to abstract the differences among compilers. + * Supported compilers are: + * ARM RVCT compiler + * + * @author: Kumar Anand + * + * Copyright (C) 2010, Qualcomm Technologies, Inc. + * All rights reserved. + * + *=========================================================================*/ +#ifndef __ANI_COMPILER_ABSTRACT_H +#define __ANI_COMPILER_ABSTRACT_H + +/* + * 1. GNU C/C++ Compiler + * + * How to detect gcc : __GNUC__ + * How to detect gcc version : + * major version : __GNUC__ (2 = 2.x, 3 = 3.x, 4 = 4.x) + * minor version : __GNUC_MINOR__ + * + * 2. Microsoft C/C++ Compiler + * + * How to detect msc : _MSC_VER + * How to detect msc version : + * _MSC_VER (1200 = MSVC 6.0, 1300 = MSVC 7.0, ...) + * + * 3. Intel C/C++ Compiler + * + * How to detect icc : __INTEL_COMPILER, __ICC (legacy), __ECC (legacy) + * How to detect icc version : + * __INTEL_COMPILER, __ICC, __ECC (700 = 7.0, 900 = 9.0, ...) + * + * 4. Other compilers (not supported) + * + * Borland : __BORLANDC__ + * Greenhills : __ghs + * Metrowerks : __MWERKS__ + * SGI MIPSpro : __sgi + */ + +/* + * Packing directives : These are used to force compiler to pack bits and + * bytes in the data structure. C standard does not regulate this strictly, + * and many things are to compiler implementation. Many compilers support + * compiler specific directives or options that allow different packing + * and alignment. + * + * Alignment directives : Compiler may think packed data structures have + * no specific alignment requirement. Then compiler may generate multiple + * byte accesses to access two byte or four bytes data structures. This + * affects on performance especially for RISC systems. If some data + * structure is located on specific alignment always, alignment directives + * help compiler generate more efficient codes. + */ + +#undef __ANI_COMPILER_PRAGMA_PACK_STACK +#undef __ANI_COMPILER_PRAGMA_PACK + +#if defined(_MSC_VER) +#define __ANI_COMPILER_PRAGMA_PACK_STACK 1 +#define __ANI_COMPILER_PRAGMA_PACK 1 +#define __ani_attr_pre_packed +#define __ani_attr_packed +#define __ani_attr_aligned_2 +#define __ani_attr_aligned_4 +#define __ani_attr_aligned_8 +#define __ani_attr_aligned_16 +#define __ani_attr_aligned_32 +#define PACKED +#define PACKED_POST +#define ALIGN(__value) +#elif defined(__INTEL_COMPILER) || defined(__ICC) || defined(__ECC) +#define __ANI_COMPILER_PRAGMA_PACK 1 +#define __ani_attr_pre_packed +#define __ani_attr_packed +#define __ani_attr_aligned_2 +#define __ani_attr_aligned_4 +#define __ani_attr_aligned_8 +#define __ani_attr_aligned_16 +#define __ani_attr_aligned_32 +#define PACKED +#define PACKED_POST +#define ALIGN(__value) +#elif defined(__GNUC__) +#define __ani_attr_pre_packed +#define __ani_attr_packed __attribute__((packed)) +#define __ani_attr_aligned_2 __attribute__((aligned(2))) +#define __ani_attr_aligned_4 __attribute__((aligned(4))) +#define __ani_attr_aligned_8 __attribute__((aligned(8))) +#define __ani_attr_aligned_16 __attribute__((aligned(16))) +#define __ani_attr_aligned_32 __attribute__((aligned(32))) +#ifndef PACKED +#define PACKED +#endif +#ifndef PACKED_POST +#define PACKED_POST __attribute__((packed)) +#endif +#ifndef ALIGN +#define ALIGN(__value) __attribute__((aligned(__value))) +#endif +#elif defined(ANI_COMPILER_TYPE_RVCT) +/* Nothing defined so far */ + +/* + * RIVA 1.2 and Pronto uses ARMCT5.1 compiler and it throws lot of warning when __align() is used in structure definitions. + * __attribute__((aligned())) is GNU compiler attribute that is accepted by ARM compiler and resolves the warnings. + */ +#if (__ARMCC_VERSION > 400000) +#define __ani_attr_packed +#define __ani_attr_pre_packed __packed +#define __ani_attr_aligned_2 __attribute__((aligned(2))) +#define __ani_attr_aligned_4 __attribute__((aligned(4))) +#define __ani_attr_aligned_8 __attribute__((aligned(8))) +#define __ani_attr_aligned_16 __attribute__((aligned(16))) +#define __ani_attr_aligned_32 __attribute__((aligned(32))) +#define PACKED __packed +#define PACKED_POST +#define ALIGN(__value) __align(__value) +#define PREPACK __packed +#define POSTPACK +#else +#define __ani_attr_packed +#define __ani_attr_pre_packed __packed +#define __ani_attr_aligned_2 __align(2) +#define __ani_attr_aligned_4 __align(4) +#define __ani_attr_aligned_8 __align(8) +#define __ani_attr_aligned_16 __align(16) +#define __ani_attr_aligned_32 __align(32) +#define PACKED __packed +#define PACKED_POST +#define ALIGN(__value) __align(__value) +#endif + +#else +#error "Unknown compiler" +#endif + +#ifndef PACKED_PRE +#define PACKED_PRE __ani_attr_pre_packed +#endif + +#ifndef ALIGN_4 +#define ALIGN_4 __ani_attr_aligned_4 +#endif + +#endif //__ANI_COMPILER_ABSTRACT_H + diff --git a/riva/inc/halLegacyPalTypes.h b/riva/inc/halLegacyPalTypes.h new file mode 100644 index 000000000000..e873d8ea9be2 --- /dev/null +++ b/riva/inc/halLegacyPalTypes.h @@ -0,0 +1,41 @@ +/* +* Copyright (c) 2012-2013 Qualcomm Atheros, Inc. +* All Rights Reserved. +* Qualcomm Atheros Confidential and Proprietary. +*/ + +#if !defined( __LEGACYPALTYPES_H__ ) +#define __LEGACYPALTYPES_H__ + +/*========================================================================== + * + * @file: halLegacyPalTypes.h + * + * @brief: Exports and types for the Platform Abstraction Layer typedefs. + * + * @author: Kumar Anand + * + * Copyright (C) 2010, Qualcomm Technologies, Inc. + * All rights reserved. + * + *=========================================================================*/ + +#include "qwlanfw_defs.h" + +/* Common type definitions */ +typedef uint8 tANI_U8; +typedef int8 tANI_S8; +typedef uint16 tANI_U16; +typedef int16 tANI_S16; +typedef uint32 tANI_U32; +typedef int32 tANI_S32; + +#ifndef BUILD_QWPTTSTATIC +typedef uint64 tANI_U64; +#endif + +typedef byte tANI_BYTE; +typedef boolean tANI_BOOLEAN; +typedef uint32 tANI_TIMESTAMP; + +#endif /*__LEGACYPALTYPES_H__*/ diff --git a/riva/inc/pttFrameGen.h b/riva/inc/pttFrameGen.h new file mode 100644 index 000000000000..b41b030d1f95 --- /dev/null +++ b/riva/inc/pttFrameGen.h @@ -0,0 +1,71 @@ +/** ------------------------------------------------------------------------- * + ------------------------------------------------------------------------- * + + + \file pttFrameGen.h + + \brief Definitions for PTT frame generation + + $Id$ + + Copyright (C) 2006 Airgo Networks, Incorporated + + + ========================================================================== */ + +#ifndef PTTFRAMEGEN_H +#define PTTFRAMEGEN_H + + +//#define MAX_PKT_GEN_BUF_ENTRY (HAL_HIF_MAX_TX_RING_ENTRY >> 1) + + + +#define MAX_PAYLOAD_SIZE 2400 +#define MAX_TX_PAYLOAD_SIZE 4096 + +typedef enum { + TEST_PAYLOAD_NONE, + TEST_PAYLOAD_FILL_BYTE, + TEST_PAYLOAD_RANDOM, + TEST_PAYLOAD_RAMP, + TEST_PAYLOAD_TEMPLATE, + TEST_PAYLOAD_MAX = 0X3FFFFFFF, //dummy value to set enum to 4 bytes +} ePayloadContents; + + +#define MAC_ADDR_SIZE ( 6 ) + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 numTestPackets; + tANI_U32 interFrameSpace; + eHalPhyRates rate; + ePayloadContents payloadContents; + tANI_U16 payloadLength; + tANI_U8 payloadFillByte; + tANI_BOOLEAN pktAutoSeqNum; //seq num setting (hw or not) for packet gen + + tANI_U8 addr1[MAC_ADDR_SIZE]; + tANI_U8 addr2[MAC_ADDR_SIZE]; + tANI_U8 addr3[MAC_ADDR_SIZE]; + tANI_U8 tx_mode; + tANI_BOOLEAN crc; //0 = no FCS calculated = power detector works = receive won't work?, + //1 = crc calculated = receive works, but power detector workaround doesn't + + ePhyDbgPreamble preamble; +} sPttFrameGenParams; + + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 legacy; //11g OFDM preamble + tANI_U32 gfSimo20; //greenfield preamble + tANI_U32 mmSimo20; //mixed mode preamble + tANI_U32 gfSimo40; //greenfield preamble + tANI_U32 mmSimo40; //mixed mode preamble + tANI_U32 txbShort; //11b short + tANI_U32 txbLong; //11b long + tANI_U32 acSimo204080; //11ac SIMO 20,40,80 + tANI_U32 total; +} sTxFrameCounters; + +#endif diff --git a/riva/inc/pttModule.h b/riva/inc/pttModule.h new file mode 100644 index 000000000000..5fc488e3736e --- /dev/null +++ b/riva/inc/pttModule.h @@ -0,0 +1,160 @@ +/** + * + Airgo Networks, Inc proprietary. + All Rights Reserved, Copyright 2005 + This program is the confidential and proprietary product of Airgo Networks Inc. + Any Unauthorized use, reproduction or transfer of this program is strictly prohibited. + + + pttModule.h: global variable structure for pttModule + Author: Mark Nelson + Date: 6/27/05 + + History - + Date Modified by Modification Information + -------------------------------------------------------------------------- + + */ + +#ifndef PTTMODULE_H +#define PTTMODULE_H +#include +#include + +#ifdef BUILD_QWPTTSTATIC +#include "wlan_hal_msg.h" // it is needed to build qwptt static lib +#endif + +// Max NV fragment size +#define MAX_NV_BIN_SIZE 2000 + +enum +{ + PTT_STATUS_SUCCESS = 0, + PTT_STATUS_FAILURE = 1, + PTT_MAX_VAL = 0XFFFF, +}; +typedef tANI_U32 eQWPttStatus; + + +typedef PACKED_PRE struct PACKED_POST { + tANI_U16 drvMjr; + tANI_U16 drvMnr; + tANI_U16 drvPtch; + tANI_U16 drvBld; + tANI_U16 pttMax; + tANI_U16 pttMin; + //FwVersionInfo fwVer; +} sBuildReleaseParams; + +typedef PACKED_PRE struct PACKED_POST { + tANI_BOOLEAN agPktsDisabled; //802.11ag + tANI_BOOLEAN bPktsDisabled; //802.11b + tANI_BOOLEAN slrPktsDisabled; //deprecated in Riva + tANI_BOOLEAN n40PktsDisabled; //11N 40 + tANI_BOOLEAN ac80PktsDisabled; //11AC 80 + tANI_BOOLEAN rsvd; +} sRxTypesDisabled; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 totalRxPackets; + tANI_U32 totalMacRxPackets; + tANI_U32 totalMacFcsErrPackets; +} sRxFrameCounters; + + + + +/* GRAB RAM types */ +//TODO: Change Grab RAM interface as appropriate to Taurus +typedef enum { + GRAB_RAM_RXFIR, + GRAB_RAM_ADC, + GRAB_RAM_ADC_80, + GRAB_RAM_MAX_VAL = 0XFFFF, +} eGrabRamType; + +#define GRAB_RAM_SIZE 6000 +#define GRAB_RAM_SIZE_80MHZ_1_CHAIN 12000 + + + +/// Enum used to specify the trigger type for the aniGrabRam API +typedef enum eGramDumpTrigType { + eGRAM_DUMP_UNTRIGGERED, + eGRAM_DUMP_TRIG_ON_11A, + eGRAM_DUMP_TRIG_ON_11B, + eGRAM_DUMP_TRIG_ON_11A_OR_11B +} tGramDumpTrigType; + +typedef PACKED_PRE struct PACKED_POST { + //common to both transmit chains + eHalPhyRates rate; //current rate + ePhyChanBondState cbState; //current Channel bonded state + + tANI_U8 channelId; //current channel Id + tANI_U8 pwrTemplateIndex; //5-bit template index used for the current rate + tANI_U8 reserved[2]; + + //specific transmit chain power + tTxChainPower txChains[PHY_MAX_TX_CHAINS]; //output power for Tx chains +} tTxPowerReport; + +#define RXP_MAX_FILTER_IDX 64 + +typedef PACKED_PRE struct PACKED_POST +{ + uint32 rxpFilterForFTMPER[RXP_MAX_FILTER_IDX]; + uint32 max_pktlen; + uint32 flt_disable0; + uint32 flt_disable1; + uint32 config2; + uint32 push_wq_ctrl; + uint32 push_wq_ctrl2; + uint32 extra_frame_flt; +} sMACConfig; + + +typedef PACKED_PRE struct PACKED_POST { + /* + * The idea here is to store only those things which cannot be + * handled directly within the individual function calls. + * Most things will go straight to registers or come from registers. + */ + sPttFrameGenParams frameGenParams; + tANI_U8 payload[MAX_PAYLOAD_SIZE]; + + //Tx Waveform Gen Service + tANI_U16 numWfmSamples; + tANI_BOOLEAN wfmEnabled; + tANI_BOOLEAN wfmStored; + + //Tx Frame Power Service + tTxGain forcedTxGain[PHY_MAX_TX_CHAINS]; //use TXPWR_OVERRIDE for wfm, and fill gain table otherwise + tANI_U8 tpcPowerLut[PHY_MAX_TX_CHAINS][TPC_MEM_POWER_LUT_DEPTH]; + tTxGain tpcGainLut[PHY_MAX_TX_CHAINS][TPC_MEM_GAIN_LUT_DEPTH]; + + //Tx Frame Gen Service + tANI_BOOLEAN frameGenEnabled; + tANI_BOOLEAN phyDbgFrameGen; //this says use phyDbg for frames - leave this in place until we know that PhyDbg will suffice + + // for FTM PER feature + tANI_U8 tx_mode; + + tANI_BOOLEAN ftm_per_settings_saved; + + //Rx Gain Service + sRxChainsAgcEnable agcEnables; + + tANI_U32 *pADCCaptureCache; //pointer to allocate ADC capture cache + + //TX_TIMER adcRssiStatsTimer; //Create adc rssi stat collection timer + + sRxChainsRssi rssi; +} tPttModuleVariables; + +#ifdef WCN_PRONTO +extern sMACConfig macConfig; +#endif + +#endif /* PTTMODULE_H */ diff --git a/riva/inc/pttMsgApi.h b/riva/inc/pttMsgApi.h new file mode 100644 index 000000000000..33389c20dc8a --- /dev/null +++ b/riva/inc/pttMsgApi.h @@ -0,0 +1,948 @@ +/* +* Copyright (c) 2012 Qualcomm Atheros, Inc. +* All Rights Reserved. +* Qualcomm Atheros Confidential and Proprietary. +*/ + +/** + * + Airgo Networks, Inc proprietary. + All Rights Reserved, Copyright 2005 + This program is the confidential and proprietary product of Airgo Networks Inc. + Any Unauthorized use, reproduction or transfer of this program is strictly prohibited. + + + pttMsgApi.h: Contains messages to PTT Module for physical layer testing + Author: Mark Nelson + Date: 6/21/05 + + History - + Date Modified by Modification Information + -------------------------------------------------------------------------- + + */ + +#ifndef PTT_MSG_API_H +#define PTT_MSG_API_H + +#include "halCompiler.h" +#include "wlan_nv.h" +#include "wlan_phy.h" +#include "pttFrameGen.h" +#include "pttModule.h" + +#include "halLegacyPalTypes.h" + +typedef tANI_U8 tQWPTT_U8; +typedef tANI_S8 tQWPTT_S8; + +typedef tANI_U16 tQWPTT_U16; +typedef tANI_S16 tQWPTT_S16; + +typedef tANI_U32 tQWPTT_U32; +typedef tANI_S32 tQWPTT_S32; + +typedef tANI_U8 tQWPTT_BYTE; +typedef tANI_S9 tQWPTT_S9; + +typedef tANI_U8 tQWPTT_BOOLEAN; + +#define PTT_MEM_ACCESS_MAX_SIZE 256 + +//Messages to/from socket or pttApi.c +typedef enum { + PTT_MSG_TYPES_BEGIN = 0x3000, + + // Init + PTT_MSG_INIT = PTT_MSG_TYPES_BEGIN, //extra: internal only + +//NV Service + PTT_MSG_GET_TPC_CAL_STATE_OBSOLETE = 0x3011, + PTT_MSG_RESET_TPC_CAL_STATE_OBSOLETE = 0x3012, + + PTT_MSG_SET_NV_CKSUM_OBSOLETE = 0x3013, + PTT_MSG_GET_NV_CKSUM_OBSOLETE = 0x3014, + PTT_MSG_GET_NV_TABLE = 0x3016, + PTT_MSG_SET_NV_TABLE = 0x3017, + PTT_MSG_SET_NV_IMAGE_OBSOLETE = 0x3018, + PTT_MSG_BLANK_NV = 0x3019, + PTT_MSG_GET_NV_IMAGE_OBSOLETE = 0x301E, + PTT_MSG_DEL_NV_TABLE = 0x301F, + PTT_MSG_GET_NV_FIELD = 0x3020, + PTT_MSG_SET_NV_FIELD = 0x3021, + PTT_MSG_STORE_NV_TABLE = 0x3022, + PTT_MSG_SET_REG_DOMAIN = 0x3023, + +//new NV format Service + PTT_MSG_GET_NV_BIN = 0x3030, + PTT_MSG_SET_NV_BIN = 0x3031, + PTT_MSG_GET_DICTIONARY = 0x3032, + +//Device Register Access + PTT_MSG_DBG_READ_REGISTER = 0x3040, + PTT_MSG_DBG_WRITE_REGISTER = 0x3041, + PTT_MSG_API_WRITE_REGISTER_OBSOLETE = 0x3042, + PTT_MSG_API_READ_REGISTER_OBSOLETE = 0x3043, + PTT_MSG_DBG_READ_MEMORY = 0x3044, + PTT_MSG_DBG_WRITE_MEMORY = 0x3045, + +//Device MAC Test Setup + PTT_MSG_ENABLE_CHAINS = 0x304F, + PTT_MSG_SET_CHANNEL = 0x3050, + +//Tx Waveform Gen Service + PTT_MSG_SET_WAVEFORM = 0x3071, + PTT_MSG_SET_TX_WAVEFORM_GAIN = 0x3072, + PTT_MSG_GET_WAVEFORM_POWER_ADC = 0x3073, + PTT_MSG_START_WAVEFORM = 0x3074, + PTT_MSG_STOP_WAVEFORM = 0x3075, + PTT_MSG_SET_RX_WAVEFORM_GAIN = 0x3076, + PTT_MSG_SET_TX_WAVEFORM_GAIN_PRIMA_V1 = 0x3077, + +//Tx Frame Gen Service + PTT_MSG_CONFIG_TX_PACKET_GEN = 0x3081, + PTT_MSG_START_STOP_TX_PACKET_GEN = 0x3082, + PTT_MSG_POLL_TX_PACKET_PROGRESS_OBSOLETE = 0x3083, + PTT_MSG_FRAME_GEN_STOP_IND_OBSOLETE = 0x3088, + PTT_MSG_QUERY_TX_STATUS = 0x3089, + + +//Tx Frame Power Service + PTT_MSG_CLOSE_TPC_LOOP = 0x30A0, + +//open loop service + PTT_MSG_SET_PACKET_TX_GAIN_TABLE = 0x30A1, + PTT_MSG_SET_PACKET_TX_GAIN_INDEX = 0x30A2, + PTT_MSG_FORCE_PACKET_TX_GAIN = 0x30A3, + +//closed loop(CLPC) service + PTT_MSG_SET_PWR_INDEX_SOURCE = 0x30A4, + PTT_MSG_SET_TX_POWER = 0x30A5, + PTT_MSG_GET_TX_POWER_REPORT = 0x30A7, + PTT_MSG_SAVE_TX_PWR_CAL_TABLE_OBSOLETE = 0x30A8, + PTT_MSG_SET_POWER_LUT = 0x30A9, + PTT_MSG_GET_POWER_LUT = 0x30AA, + PTT_MSG_GET_PACKET_TX_GAIN_TABLE = 0x30AB, + PTT_MSG_SAVE_TX_PWR_FREQ_TABLE_OBSOLETE = 0x30AC, + PTT_MSG_CLPC_TEMP_COMPENSATION_OBSOLETE = 0x30AD, + +//Rx Gain Service + PTT_MSG_DISABLE_AGC_TABLES = 0x30D0, + PTT_MSG_ENABLE_AGC_TABLES = 0x30D1, + PTT_MSG_SET_AGC_TABLES_OBSOLETE = 0x30D2, + PTT_MSG_GET_RX_RSSI = 0x30D3, + PTT_MSG_GET_AGC_TABLE_OBSOLETE = 0x30D5, + +//Rx Frame Catcher Service + PTT_MSG_SET_RX_DISABLE_MODE = 0x30D4, + PTT_MSG_GET_RX_PKT_COUNTS = 0x30E0, + PTT_MSG_RESET_RX_PACKET_STATISTICS = 0x30E2, + PTT_MSG_GET_UNI_CAST_MAC_PKT_RX_RSSI = 0x30E3, + PTT_MSG_GET_UNI_CAST_MAC_PKT_RX_RSSI_CONFIG = 0x30E4, + +//Rx Symbol Service + PTT_MSG_GRAB_RAM = 0x30F0, + PTT_MSG_GRAB_RAM_ONE_CHAIN_OBSOLETE = 0x30F1, + +//Phy Calibration Service + PTT_MSG_RX_IQ_CAL = 0x3100, + PTT_MSG_RX_DCO_CAL = 0x3101, + PTT_MSG_TX_CARRIER_SUPPRESS_CAL = 0x3102, + PTT_MSG_TX_IQ_CAL = 0x3103, + PTT_MSG_EXECUTE_INITIAL_CALS = 0x3104, + PTT_MSG_HDET_CAL = 0x3105, + PTT_MSG_VCO_LINEARITY_CAL_OBSOLETE = 0x3106, + +//Phy Calibration Override Service + PTT_MSG_SET_TX_CARRIER_SUPPRESS_CORRECT = 0x3110, + PTT_MSG_GET_TX_CARRIER_SUPPRESS_CORRECT = 0x3111, + PTT_MSG_SET_TX_IQ_CORRECT = 0x3112, + PTT_MSG_GET_TX_IQ_CORRECT = 0x3113, + PTT_MSG_SET_RX_IQ_CORRECT = 0x3114, + PTT_MSG_GET_RX_IQ_CORRECT = 0x3115, + PTT_MSG_SET_RX_DCO_CORRECT = 0x3116, + PTT_MSG_GET_RX_DCO_CORRECT = 0x3117, + PTT_MSG_SET_TX_IQ_PHASE_NV_TABLE_OBSOLETE = 0x3118, + PTT_MSG_GET_HDET_CORRECT_OBSOLETE = 0x3119, + +//RF Chip Access + PTT_MSG_GET_TEMP_ADC = 0x3202, + PTT_MSG_READ_RF_REG = 0x3203, + PTT_MSG_WRITE_RF_REG = 0x3204, + PTT_MSG_GET_RF_VERSION = 0x3205, + +//Deep sleep support + PTT_MSG_DEEP_SLEEP = 0x3220, + PTT_MSG_READ_SIF_BAR4_REGISTER = 0x3221, + PTT_MSG_WRITE_SIF_BAR4_REGISTER = 0x3222, + PTT_MSG_ENTER_FULL_POWER = 0x3223, + +//Misc + PTT_MSG_SYSTEM_RESET = 0x32A0, //is there any meaning for this in Gen6? + PTT_MSG_LOG_DUMP = 0x32A1, + PTT_MSG_GET_BUILD_RELEASE_NUMBER = 0x32A2, + + +//Messages for Socket App + PTT_MSG_ADAPTER_DISABLED_RSP_OBSOLETE = 0x32A3, + PTT_MSG_ENABLE_ADAPTER = 0x32A4, + PTT_MSG_DISABLE_ADAPTER = 0x32A5, + PTT_MSG_PAUSE_RSP_OBSOLETE = 0x32A6, + PTT_MSG_CONTINUE_RSP_OBSOLETE = 0x32A7, + + PTT_MSG_HALPHY_INIT = 0x32A8, + PTT_MSG_TEST_RXIQ_CAL = 0x32A9, + PTT_MSG_START_TONE_GEN = 0x32AA, + PTT_MSG_STOP_TONE_GEN = 0x32AB, + PTT_MSG_RX_IM2_CAL = 0x32AC, + PTT_MSG_SET_RX_IM2_CORRECT = 0x31AD, + PTT_MSG_GET_RX_IM2_CORRECT = 0x31AE, + PTT_MSG_TEST_DPD_CAL = 0x32AF, // not handle + PTT_MSG_SET_CALCONTROL_BITMAP = 0x32B0, + +//[RY] specific new messages for PRIMA + PTT_MSG_START_WAVEFORM_RF = 0x32B1, + PTT_MSG_STOP_WAVEFORM_RF = 0x32B2, + PTT_MSG_HKDAC_TX_IQ_CAL = 0x32B3, + PTT_MSG_SET_HKADC_TX_IQ_CORRECT = 0x32B4, + PTT_MSG_GET_HKADC_TX_IQ_CORRECT = 0x32B5, + PTT_MSG_SET_DPD_CORRECT = 0x32B6, + PTT_MSG_GET_DPD_CORRECT = 0x32B7, + PTT_MSG_SET_WAVEFORM_RF = 0x32B8, + PTT_MSG_LNA_BAND_CAL = 0x32B9, + PTT_MSG_GET_LNA_BAND_CORRECT = 0x32BA, + PTT_MSG_SET_LNA_BAND_CORRECT = 0x32BB, + PTT_MSG_DPD_CAL = 0x32BC, + +// Suffix'ed Message ID to differential from existing Message name. +// =============================================================== + PTT_MSG_GET_NV_TABLE_PRIMA_V1 = 0x32BD, + PTT_MSG_SET_NV_TABLE_PRIMA_V1 = 0x32BE, + PTT_MSG_RX_IQ_CAL_PRIMA_V1 = 0x32BF, + PTT_MSG_TX_IQ_CAL_PRIMA_V1 = 0x32C0, + PTT_MSG_SET_TX_IQ_CORRECT_PRIMA_V1 = 0x32C1, + PTT_MSG_GET_TX_IQ_CORRECT_PRIMA_V1 = 0x32C2, + PTT_MSG_SET_RX_IQ_CORRECT_PRIMA_V1 = 0x32C3, + PTT_MSG_GET_RX_IQ_CORRECT_PRIMA_V1 = 0x32C4, + PTT_MSG_START_WAVEFORM_PRIMA_V1 = 0x32C5, + PTT_MSG_FORCE_PACKET_TX_GAIN_PRIMA_V1 = 0x32C6, + PTT_MSG_CLPC_CAL_SETUP_PRIMA_V1 = 0x32C7, + PTT_MSG_CLPC_CAL_RESTORE_PRIMA_V1 = 0x32C8, + PTT_MSG_CLOSE_TPC_LOOP_PRIMA_V1 = 0x32C9, + PTT_MSG_SW_CLPC_CAL_PRIMA_V1 = 0x32CA, + PTT_MSG_CLPC_CAL_EXTRA_MEASUREMENT_PRIMA_V1 = 0x32CB, + PTT_MSG_PRIMA_GENERIC_CMD = 0x32CC, + PTT_MSG_DIGITAL_PIN_CONNECTIVITY_TEST_RES = 0X32CD, + + PTT_MSG_EXIT = 0x32ff, + PTT_MAX_MSG_ID = PTT_MSG_EXIT +} ePttMsgId; + +enum +{ + PTT_MSG_PRIMA_GENERIC_CMD_FAST_SET_CHANNEL = 0x0, +}; + +#define PTT_MSG_TYPES_BEGIN_30 PTT_MSG_TYPES_BEGIN +#define PTT_MSG_TYPES_BEGIN_31 PTT_MSG_TYPES_BEGIN + 0x100 +#define PTT_MSG_TYPES_BEGIN_32 PTT_MSG_TYPES_BEGIN + 0x200 + +// for FTM PER feature +enum { +Legacy_FTM = 0, +FTM_PER_TX = 1, +FTM_PER_RX = 2, +}; + +#ifndef tANI_BOOLEAN +#define tANI_BOOLEAN tANI_U8 +#endif + + + +/****************************************************************************************************************** + PTT MESSAGES +******************************************************************************************************************/ +//Init +typedef PACKED_PRE struct PACKED_POST { + tPttModuleVariables ptt; +} tMsgPttMsgInit; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 tableSize; + tANI_U32 chunkSize; + eNvTable nvTable; +} tMsgPttGetNvTable; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 tableSize; + tANI_U32 chunkSize; + eNvTable nvTable; +} tMsgPttSetNvTable; + +typedef PACKED_PRE struct PACKED_POST { + eNvTable nvTable; +} tMsgPttDelNvTable; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 notUsed; +} tMsgPttBlankNv; + +typedef PACKED_PRE struct PACKED_POST { + eNvField nvField; + uNvFields fieldData; +} tMsgPttGetNvField; + +typedef PACKED_PRE struct PACKED_POST { + eNvField nvField; + uNvFields fieldData; +} tMsgPttSetNvField; + +typedef PACKED_PRE struct PACKED_POST { + eNvTable nvTable; +} tMsgPttStoreNvTable; + +typedef PACKED_PRE struct PACKED_POST { + eRegDomainId regDomainId; +} tMsgPttSetRegDomain; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 tableSize; + tANI_U32 chunkSize; + eNvTable nvTable; + tANI_U8 nvData[MAX_NV_BIN_SIZE]; +} tMsgPttGetNvBin; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 tableSize; + tANI_U32 chunkSize; + eNvTable nvTable; + tANI_U8 nvData[MAX_NV_BIN_SIZE]; +} tMsgPttSetNvBin; + +//Device Register Access +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 regAddr; + tANI_U32 regValue; +} tMsgPttDbgReadRegister; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 regAddr; + tANI_U32 regValue; +} tMsgPttDbgWriteRegister; + +#define PTT_READ_MEM_MAX 512 +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 memAddr; + tANI_U32 nBytes; + tANI_U32 pMemBuf[PTT_READ_MEM_MAX]; //caller should allocate space +} tMsgPttDbgReadMemory; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 memAddr; + tANI_U32 nBytes; + tANI_U32 pMemBuf[PTT_READ_MEM_MAX]; +} tMsgPttDbgWriteMemory; + +//Device MAC Test Setup +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 chId; + ePhyChanBondState cbState; +} tMsgPttSetChannel; + +typedef PACKED_PRE struct PACKED_POST { + ePhyChainSelect chainSelect; +} tMsgPttEnableChains; + +typedef tIQSamples tWaveformSample; + +//Tx Waveform Gen Service +typedef PACKED_PRE struct PACKED_POST { + tWaveformSample waveform[MAX_TEST_WAVEFORM_SAMPLES]; + tANI_U16 numSamples; + tANI_BOOLEAN clk80; + tANI_U8 reserved[1]; +} tMsgPttSetWaveform; + +typedef PACKED_PRE struct PACKED_POST { + ePhyTxChains txChain; + tANI_U8 gain; +} tMsgPttSetTxWaveformGain; + +typedef PACKED_PRE struct PACKED_POST { + ePhyTxChains txChain; + tANI_U32 gain; +} tMsgPttSetTxWaveformGain_PRIMA_V1; + +typedef PACKED_PRE struct PACKED_POST { + ePhyRxChains rxChain; + tANI_U8 gain; +} tMsgPttSetRxWaveformGain; + +typedef PACKED_PRE struct PACKED_POST { + sTxChainsPowerAdcReadings txPowerAdc; +} tMsgPttGetWaveformPowerAdc; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 notUsed; +} tMsgPttStopWaveform; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 notUsed; +} tMsgPttClpcCalSetup_PRIMA_V1; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U16 setup_measure; + tANI_U16 setup_txDmdPwrOffset; + tANI_U16 measure_totalExtraPt; + tANI_U16 measure_currentMeasurePtIdx; + tANI_U8 plut[256]; +} tMsgPttClpcCalExtraMeasurement_PRIMA_V1; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 notUsed; +} tMsgPttClpcCalRestore_PRIMA_V1; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 startIndex; + tANI_U32 numSamples; +} tMsgPttStartWaveform; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 startIndex; + tANI_U32 numSamples; +} tMsgPttStartWaveform_PRIMA_V1; + +// Added for PRIMA +typedef PACKED_PRE struct PACKED_POST { + tWaveformSample waveform[MAX_TEST_WAVEFORM_SAMPLES]; + tANI_U16 numSamples; + tANI_BOOLEAN clk80; + tANI_U8 reserved[1]; +} tMsgPttSetWaveformRF; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 startIndex; + tANI_U32 numSamples; +} tMsgPttStartWaveformRF; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 notUsed; +} tMsgPttStopWaveformRF; + +//Tx Frame Gen Service +typedef PACKED_PRE struct PACKED_POST { + sPttFrameGenParams frameParams; +} tMsgPttConfigTxPacketGen; + +typedef PACKED_PRE struct PACKED_POST { + tANI_BOOLEAN startStop; + tANI_U8 reserved[3]; +} tMsgPttStartStopTxPacketGen; + +typedef PACKED_PRE struct PACKED_POST { + sTxFrameCounters numFrames; + tANI_BOOLEAN status; + tANI_U8 reserved[3]; +} tMsgPttQueryTxStatus; + +//Tx Frame Power Service +typedef PACKED_PRE struct PACKED_POST { + tANI_BOOLEAN tpcClose; + tANI_U8 reserved[3]; +} tMsgPttCloseTpcLoop; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 tpcClose; +} tMsgPttCloseTpcLoop_PRIMA_V1; + + + //open loop service +typedef PACKED_PRE struct PACKED_POST { + + ePhyTxChains txChain; + tANI_U8 minIndex; + tANI_U8 maxIndex; + tANI_U8 reserved[2]; + tANI_U8 gainTable[TPC_MEM_GAIN_LUT_DEPTH]; +} tMsgPttSetPacketTxGainTable; + +typedef PACKED_PRE struct PACKED_POST { + ePhyTxChains txChain; + tANI_U8 gainTable[TPC_MEM_GAIN_LUT_DEPTH]; +} tMsgPttGetPacketTxGainTable; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U8 index; + tANI_U8 reserved[3]; +} tMsgPttSetPacketTxGainIndex; + +typedef PACKED_PRE struct PACKED_POST { + ePhyTxChains txChain; + tANI_U8 gain; + tANI_U8 reserved[3]; +} tMsgPttForcePacketTxGain; + +typedef PACKED_PRE struct PACKED_POST { + ePhyTxChains txChain; + tANI_U32 gain; +} tMsgPttForcePacketTxGain_PRIMA_V1; + + +typedef PACKED_PRE struct PACKED_POST { + ePowerTempIndexSource indexSource; +} tMsgPttSetPwrIndexSource; + +typedef PACKED_PRE struct PACKED_POST { + t2Decimal dbmPwr; + tANI_U8 reserved[2]; +} tMsgPttSetTxPower; + +typedef tTxPowerReport tMsgPttGetTxPowerReport; + +typedef PACKED_PRE struct PACKED_POST { + ePhyTxChains txChain; + + tANI_U8 minIndex; + tANI_U8 maxIndex; + tANI_U8 reserved[2]; + + tANI_U8 powerLut[TPC_MEM_POWER_LUT_DEPTH]; +} tMsgPttSetPowerLut; + +typedef PACKED_PRE struct PACKED_POST { + ePhyTxChains txChain; + + tANI_U8 powerLut[TPC_MEM_POWER_LUT_DEPTH]; +} tMsgPttGetPowerLut; + + +//Rx Gain Service +typedef PACKED_PRE struct PACKED_POST { + sRxChainsAgcDisable gains; +} tMsgPttDisableAgcTables; + + +typedef PACKED_PRE struct PACKED_POST { + sRxChainsAgcEnable enables; +} tMsgPttEnableAgcTables; + +typedef PACKED_PRE struct PACKED_POST { + sRxChainsRssi rssi; +} tMsgPttGetRxRssi; + +typedef PACKED_PRE struct PACKED_POST { + sRxChainsRssi rssi; +}tMsgPttGetUnicastMacPktRxRssi; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 conf; +}tMsgPttGetUnicastMacPktRxRssiConf_PRIMA_V1; + +//Rx Frame Catcher Service +typedef PACKED_PRE struct PACKED_POST { + sRxTypesDisabled disabled; +} tMsgPttSetRxDisableMode; + +typedef PACKED_PRE struct PACKED_POST { + sRxFrameCounters counters; +} tMsgPttGetRxPktCounts; + + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 notUsed; +} tMsgPttResetRxPacketStatistics; + + + + + +//ADC Sample Service +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 startSample; //index of first requested sample, 0 causes new capture + tANI_U32 numSamples; //number of samples to transfer to host + eGrabRamSampleType sampleType; + tGrabRamSample grabRam[MAX_REQUESTED_GRAB_RAM_SAMPLES]; +} tMsgPttGrabRam; + + +//Phy Calibration Service +typedef PACKED_PRE struct PACKED_POST { + sRxChainsIQCalValues calValues; + eGainSteps gain; +} tMsgPttRxIqCal; + +typedef PACKED_PRE struct PACKED_POST { + tRxChainsDcoCorrections calValues; + tANI_U8 gain; +} tMsgPttRxDcoCal; + +typedef PACKED_PRE struct PACKED_POST { + tRxChainsIm2Corrections calValues; + eGainSteps gain; + tANI_U8 im2CalOnly; +} tMsgPttRxIm2Cal; + +typedef PACKED_PRE struct PACKED_POST { + sTxChainsLoCorrections calValues; + tANI_U8 reserve[2]; + eGainSteps gain; +} tMsgPttTxCarrierSuppressCal; + +typedef PACKED_PRE struct PACKED_POST { + sTxChainsIQCalValues calValues; + tANI_U8 reserve[2]; + eGainSteps gain; +} tMsgPttTxIqCal; + +typedef PACKED_PRE struct PACKED_POST { + sTxChainsHKIQCalValues calValues; + eGainSteps gain; +} tMsgPttHKdacTxIqCal; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 unused; +} tMsgPttExecuteInitialCals; + +typedef PACKED_PRE struct PACKED_POST { + sRfHdetCalValues hdetCalValues; +} tMsgPttHdetCal; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U16 clpcMode; + tANI_U16 txCmdPwr; + tANI_U16 pwrMax_pwrMin; + tANI_U16 step; + tANI_U8 plut[256]; +} tMsgPttClpcSwCal_PRIMA_V1; + + +//Phy Calibration Override Service +typedef PACKED_PRE struct PACKED_POST { + sTxChainsLoCorrections calValues; + tANI_U8 reserve[2]; + eGainSteps gain; +} tMsgPttSetTxCarrierSuppressCorrect; + +typedef PACKED_PRE struct PACKED_POST { + sTxChainsLoCorrections calValues; + tANI_U8 reserve[2]; + eGainSteps gain; +} tMsgPttGetTxCarrierSuppressCorrect; + +typedef PACKED_PRE struct PACKED_POST { + sTxChainsIQCalValues calValues; + tANI_U8 reserve[2]; + eGainSteps gain; +} tMsgPttSetTxIqCorrect; + +typedef PACKED_PRE struct PACKED_POST { + sTxChainsIQCalValues calValues; + tANI_U8 reserve[2]; + eGainSteps gain; +} tMsgPttGetTxIqCorrect; + +typedef PACKED_PRE struct PACKED_POST { + sTxChainsHKIQCalValues calValues; + eGainSteps gain; +} tMsgPttHKdacSetTxIqCorrect; + +typedef PACKED_PRE struct PACKED_POST { + sTxChainsHKIQCalValues calValues; + eGainSteps gain; +} tMsgPttHKdacGetTxIqCorrect; + +typedef PACKED_PRE struct PACKED_POST { + sRxChainsIQCalValues calValues; + eGainSteps gain; +} tMsgPttSetRxIqCorrect; + +typedef PACKED_PRE struct PACKED_POST { + sRxChainsIQCalValues calValues; + eGainSteps gain; +} tMsgPttGetRxIqCorrect; + +typedef PACKED_PRE struct PACKED_POST { + tRxChainsDcoCorrections calValues; + tANI_U8 gain; +} tMsgPttSetRxDcoCorrect; + +typedef PACKED_PRE struct PACKED_POST { + tRxChainsDcoCorrections calValues; + tANI_U8 gain; +} tMsgPttGetRxDcoCorrect; + +typedef PACKED_PRE struct PACKED_POST { + tRxChainsIm2Corrections calValues; + tANI_U8 dummy; +} tMsgPttSetRxIm2Correct; + +typedef PACKED_PRE struct PACKED_POST { + tRxChainsIm2Corrections calValues; + tANI_U8 dummy; +} tMsgPttGetRxIm2Correct; + +typedef PACKED_PRE struct PACKED_POST { + eRfTempSensor tempSensor; + tTempADCVal tempAdc; + tANI_U8 reserved[4 - sizeof(tTempADCVal)]; +} tMsgPttGetTempAdc; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 addr; + tANI_U32 mask; + tANI_U32 shift; + tANI_U32 value; +} tMsgPttReadRfField; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 addr; + tANI_U32 mask; + tANI_U32 shift; + tANI_U32 value; +} tMsgPttWriteRfField; + +//SIF bar4 Register Access +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 sifRegAddr; + tANI_U32 sifRegValue; +} tMsgPttReadSifBar4Register; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 sifRegAddr; + tANI_U32 sifRegValue; +} tMsgPttWriteSifBar4Register; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 notUsed; +} tMsgPttDeepSleep; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 notUsed; +} tMsgPttEnterFullPower; + +//Misc. +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 notUsed; +} tMsgPttSystemReset; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 cmd; + tANI_U32 arg1; + tANI_U32 arg2; + tANI_U32 arg3; + tANI_U32 arg4; +} tMsgPttLogDump; + +typedef PACKED_PRE struct PACKED_POST { + sBuildReleaseParams relParams; +} tMsgPttGetBuildReleaseNumber; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 revId; +} tMsgPttGetRFVersion; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 option; //dummy variable +} tMsgPttCalControlBitmap; + +//#ifdef VERIFY_HALPHY_SIMV_MODEL + + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 option; //dummy variable +} tMsgPttHalPhyInit; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 option; //dummy variable +} tMsgPttRxIQTest; + +typedef PACKED_PRE struct PACKED_POST { + sTxChainsDPDCalValues calValues; + eGainSteps gain; +} tMsgPttDpdCal; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U8 lutIdx; + tANI_U8 band; +} tMsgPttStartToneGen; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 option; //dummy variable +} tMsgPttStopToneGen; + +typedef PACKED_PRE struct PACKED_POST { + sTxChainsLnaBandCalValues calValues; + eGainSteps gain; +} tMsgPttLnaBandCal; + +typedef PACKED_PRE struct PACKED_POST { + sTxChainsLnaBandCalValues calValues; + eGainSteps gain; +} tMsgPttGetLnaBandCalCorrect; + +typedef PACKED_PRE struct PACKED_POST { + sTxChainsLnaBandCalValues calValues; + eGainSteps gain; +} tMsgPttSetLnaBandCalCorrect; + +typedef PACKED_PRE struct PACKED_POST { + sTxChainsDPDCalValues calValues; + eGainSteps gain; +}tMsgPttSetDPDCorrect; + +typedef PACKED_PRE struct PACKED_POST { + sTxChainsDPDCalValues calValues; + eGainSteps gain; +}tMsgPttGetDPDCorrect; + +typedef PACKED_PRE struct PACKED_POST { + tQWPTT_U32 cmdIdx; + tQWPTT_U32 param1; + tQWPTT_U32 param2; + tQWPTT_U32 param3; + tQWPTT_U32 param4; +} tMsgPttPrimaGenericCmd; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U16 testID; + tANI_U16 result; +} tMsgPttPinConnTestRes; +//#endif + +/****************************************************************************************************************** + END OF PTT MESSAGES +******************************************************************************************************************/ + +typedef PACKED_PRE union PACKED_POST pttMsgUnion{ +//typedef union pttMsgUnion { + tMsgPttMsgInit MsgInit; + tMsgPttGetNvTable GetNvTable; + tMsgPttSetNvTable SetNvTable; + tMsgPttDelNvTable DelNvTable; + tMsgPttBlankNv BlankNv; + tMsgPttStoreNvTable StoreNvTable; + tMsgPttSetRegDomain SetRegDomain; + tMsgPttGetNvField GetNvField; + tMsgPttSetNvField SetNvField; + tMsgPttGetNvBin GetNvBin; + tMsgPttSetNvBin SetNvBin; + tMsgPttDbgReadRegister DbgReadRegister; + tMsgPttDbgWriteRegister DbgWriteRegister; + tMsgPttDbgReadMemory DbgReadMemory; + tMsgPttDbgWriteMemory DbgWriteMemory; + tMsgPttEnableChains EnableChains; + tMsgPttSetChannel SetChannel; + tMsgPttSetWaveform SetWaveform; + tMsgPttSetTxWaveformGain SetTxWaveformGain; + tMsgPttSetTxWaveformGain_PRIMA_V1 SetTxWaveformGain_PRIMA_V1; + tMsgPttGetWaveformPowerAdc GetWaveformPowerAdc; + tMsgPttStartWaveform StartWaveform; + tMsgPttStartWaveform_PRIMA_V1 StartWaveform_PRIMA_V1; + tMsgPttStopWaveform StopWaveform; + tMsgPttSetRxWaveformGain SetRxWaveformGain; + tMsgPttConfigTxPacketGen ConfigTxPacketGen; + tMsgPttStartStopTxPacketGen StartStopTxPacketGen; + tMsgPttQueryTxStatus QueryTxStatus; + tMsgPttCloseTpcLoop CloseTpcLoop; + tMsgPttCloseTpcLoop_PRIMA_V1 CloseTpcLoop_PRIMA_V1; + tMsgPttSetPacketTxGainTable SetPacketTxGainTable; + tMsgPttGetPacketTxGainTable GetPacketTxGainTable; + tMsgPttSetPacketTxGainIndex SetPacketTxGainIndex; + tMsgPttForcePacketTxGain ForcePacketTxGain; + tMsgPttForcePacketTxGain_PRIMA_V1 ForcePacketTxGain_PRIMA_V1; + tMsgPttSetPwrIndexSource SetPwrIndexSource; + tMsgPttSetTxPower SetTxPower; + tMsgPttGetTxPowerReport GetTxPowerReport; + tMsgPttSetPowerLut SetPowerLut; + tMsgPttGetPowerLut GetPowerLut; + tMsgPttDisableAgcTables DisableAgcTables; + tMsgPttEnableAgcTables EnableAgcTables; + tMsgPttGetRxRssi GetRxRssi; + tMsgPttGetUnicastMacPktRxRssi GetUnicastMacPktRxRssi; + tMsgPttGetUnicastMacPktRxRssiConf_PRIMA_V1 GetUnicastMacPktRxRssiConf_PRIMA_V1; + tMsgPttSetRxDisableMode SetRxDisableMode; + tMsgPttGetRxPktCounts GetRxPktCounts; + tMsgPttResetRxPacketStatistics ResetRxPacketStatistics; + tMsgPttGrabRam GrabRam; + tMsgPttRxIqCal RxIqCal; + tMsgPttRxDcoCal RxDcoCal; + tMsgPttRxIm2Cal RxIm2Cal; + + tMsgPttExecuteInitialCals ExecuteInitialCals; + tMsgPttTxCarrierSuppressCal TxCarrierSuppressCal; + tMsgPttTxIqCal TxIqCal; + tMsgPttHKdacTxIqCal HKdacTxIqCal; + tMsgPttClpcCalSetup_PRIMA_V1 ClpcCalSetup_PRIMA_V1; + tMsgPttClpcCalRestore_PRIMA_V1 ClpcCalRestore_PRIMA_V1; + tMsgPttHdetCal HdetCal; + tMsgPttClpcSwCal_PRIMA_V1 ClpcSwCal_PRIMA_V1; + tMsgPttClpcCalExtraMeasurement_PRIMA_V1 ClpcCalExtraMeasurement_PRIMA_V1; + tMsgPttSetTxCarrierSuppressCorrect SetTxCarrierSuppressCorrect; + tMsgPttGetTxCarrierSuppressCorrect GetTxCarrierSuppressCorrect; + tMsgPttSetTxIqCorrect SetTxIqCorrect; + tMsgPttGetTxIqCorrect GetTxIqCorrect; + tMsgPttSetRxIqCorrect SetRxIqCorrect; + tMsgPttGetRxIqCorrect GetRxIqCorrect; + tMsgPttSetRxDcoCorrect SetRxDcoCorrect; + tMsgPttGetRxDcoCorrect GetRxDcoCorrect; + tMsgPttSetRxIm2Correct SetRxIm2Correct; + tMsgPttGetRxIm2Correct GetRxIm2Correct; + tMsgPttHKdacSetTxIqCorrect HKdacSetTxIqCorrect; + tMsgPttHKdacGetTxIqCorrect HKdacGetTxIqCorrect; + + tMsgPttGetTempAdc GetTempAdc; + tMsgPttReadRfField ReadRfField; + tMsgPttWriteRfField WriteRfField; + tMsgPttCalControlBitmap SetCalControlBitmap; + +//#ifdef VERIFY_HALPHY_SIMV_MODEL + + tMsgPttHalPhyInit InitOption; + tMsgPttRxIQTest RxIQTest; + tMsgPttDpdCal DpdCal; + tMsgPttStartToneGen StartToneGen; + tMsgPttStopToneGen StopToneGen; +//#endif + tMsgPttDeepSleep DeepSleep; + tMsgPttReadSifBar4Register ReadSifBar4Register; + tMsgPttWriteSifBar4Register WriteSifBar4Register; + tMsgPttEnterFullPower EnterFullPower; + tMsgPttSystemReset SystemReset; + tMsgPttLogDump LogDump; + tMsgPttGetBuildReleaseNumber GetBuildReleaseNumber; + tMsgPttGetRFVersion GetRFVersion; + +//[RY] added for PRIMA + tMsgPttSetWaveformRF SetWaveformRF; + tMsgPttStopWaveformRF StopWaveformRF; + tMsgPttStartWaveformRF StartWaveformRF; + tMsgPttLnaBandCal LnaBandCal; + tMsgPttGetLnaBandCalCorrect GetLnaBandCalCorrect; + tMsgPttSetLnaBandCalCorrect SetLnaBandCalCorrect; + tMsgPttGetDPDCorrect GetDPDCorrect; + tMsgPttSetDPDCorrect SetDPDCorrect; + tMsgPttDpdCal DPDCal; + tMsgPttPrimaGenericCmd PrimaGenericCmd; + tMsgPttPinConnTestRes PinConnTestRes; +} uPttMsgs; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U16 msgId; + tANI_U16 msgBodyLength; //actually, the length of all the fields in this structure + eQWPttStatus msgResponse; + uPttMsgs msgBody; +} tPttMsgbuffer, *tpPttMsgbuffer; + + +typedef PACKED_PRE struct PACKED_POST { + /* + * success or failure + */ + tANI_U32 status; + tPttMsgbuffer pttMsgBuffer; +} tProcessPttRspParams, *tpProcessPttRspParams; + +/* End of Ptt Parameters */ + +#endif diff --git a/riva/inc/wlan_hal_cfg.h b/riva/inc/wlan_hal_cfg.h new file mode 100644 index 000000000000..baf4065e7a98 --- /dev/null +++ b/riva/inc/wlan_hal_cfg.h @@ -0,0 +1,917 @@ +/* +* Copyright (c) 2012-2013 Qualcomm Atheros, Inc. +* All Rights Reserved. +* Qualcomm Atheros Confidential and Proprietary. +*/ + +/*========================================================================== + * + * @file: wlan_hal_cfg.h + * + * @brief: Exports and types WLAN HAL configuration + * + * @author: Kumar Anand + * + * Copyright (C) 2010, Qualcomm Technologies, Inc. + * All rights reserved. + * + *=========================================================================*/ + +#ifndef __WLAN_HAL_CFG_H__ +#define __WLAN_HAL_CFG_H__ + +/*------------------------------------------------------------------------- + Include Files +-------------------------------------------------------------------------*/ +#include "qwlanfw_defs.h" + +/*------------------------------------------------------------------------- + Preprocessor definitions and constants +-------------------------------------------------------------------------*/ +/* RIVA API version in format W.X.Y.Z is converted to a UINT32 integer */ +#define WLAN_HAL_CONSTRUCT_API_VERSION(W,X,Y,Z) (((W)<<24)+((X)<<16)+((Y)<<8)+(Z)) +#define IS_VERSION_BEFORE_VOWIFI(VER_FROM_HOST) \ + ((VER_FROM_HOST)<=WLAN_HAL_CONSTRUCT_API_VERSION(0,0,2,0))?1:0 + +/*------------------------------------------------------------------------- + Configuration Parameter IDs +-------------------------------------------------------------------------*/ +#define QWLAN_HAL_CFG_STA_ID 0 +#define QWLAN_HAL_CFG_CURRENT_TX_ANTENNA 1 +#define QWLAN_HAL_CFG_CURRENT_RX_ANTENNA 2 +#define QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE 3 +#define QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN 4 +#define QWLAN_HAL_CFG_CAL_PERIOD 5 +#define QWLAN_HAL_CFG_CAL_CONTROL 6 +#define QWLAN_HAL_CFG_PROXIMITY 7 +#define QWLAN_HAL_CFG_NETWORK_DENSITY 8 +#define QWLAN_HAL_CFG_MAX_MEDIUM_TIME 9 +#define QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU 10 +#define QWLAN_HAL_CFG_RTS_THRESHOLD 11 +#define QWLAN_HAL_CFG_SHORT_RETRY_LIMIT 12 +#define QWLAN_HAL_CFG_LONG_RETRY_LIMIT 13 +#define QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD 14 +#define QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO 15 +#define QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE 16 +#define QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO 17 +#define QWLAN_HAL_CFG_FIXED_RATE 18 +#define QWLAN_HAL_CFG_RETRYRATE_POLICY 19 +#define QWLAN_HAL_CFG_RETRYRATE_SECONDARY 20 +#define QWLAN_HAL_CFG_RETRYRATE_TERTIARY 21 +#define QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION 22 +#define QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ 23 +#define QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ 24 +#define QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ 25 +#define QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ 26 +#define QWLAN_HAL_CFG_MAX_BA_SESSIONS 27 +#define QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT 28 +#define QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER 29 +#define QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR 30 +#define QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE 31 +#define QWLAN_HAL_CFG_STATS_PERIOD 32 +#define QWLAN_HAL_CFG_CFP_MAX_DURATION 33 +#define QWLAN_HAL_CFG_FRAME_TRANS_ENABLED 34 +#define QWLAN_HAL_CFG_DTIM_PERIOD 35 +#define QWLAN_HAL_CFG_EDCA_WMM_ACBK 36 +#define QWLAN_HAL_CFG_EDCA_WMM_ACBE 37 +#define QWLAN_HAL_CFG_EDCA_WMM_ACVO 38 +#define QWLAN_HAL_CFG_EDCA_WMM_ACVI 39 +#define QWLAN_HAL_CFG_BA_THRESHOLD_HIGH 40 +#define QWLAN_HAL_CFG_MAX_BA_BUFFERS 41 +#define QWLAN_HAL_CFG_RPE_POLLING_THRESHOLD 42 +#define QWLAN_HAL_CFG_RPE_AGING_THRESHOLD_FOR_AC0_REG 43 +#define QWLAN_HAL_CFG_RPE_AGING_THRESHOLD_FOR_AC1_REG 44 +#define QWLAN_HAL_CFG_RPE_AGING_THRESHOLD_FOR_AC2_REG 45 +#define QWLAN_HAL_CFG_RPE_AGING_THRESHOLD_FOR_AC3_REG 46 +#define QWLAN_HAL_CFG_NO_OF_ONCHIP_REORDER_SESSIONS 47 +#define QWLAN_HAL_CFG_PS_LISTEN_INTERVAL 48 +#define QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD 49 +#define QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER 50 +#define QWLAN_HAL_CFG_PS_MAX_PS_POLL 51 +#define QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD 52 +#define QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD 53 +#define QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE 54 +#define QWLAN_HAL_CFG_PS_IGNORE_DTIM 55 +#define QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM 56 +#define QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE 57 +#define QWLAN_HAL_CFG_PS_NULLDATA_AP_RESP_TIMEOUT 58 +#define QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN 59 +#define QWLAN_HAL_CFG_TELE_BCN_TRANS_LI 60 +#define QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS 61 +#define QWLAN_HAL_CFG_TELE_BCN_MAX_LI 62 +#define QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS 63 +#define QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE 64 +#define QWLAN_HAL_CFG_VALID_RADAR_CHANNEL_LIST 65 +#define QWLAN_HAL_CFG_TX_POWER_24_20 66 +#define QWLAN_HAL_CFG_TX_POWER_24_40 67 +#define QWLAN_HAL_CFG_TX_POWER_50_20 68 +#define QWLAN_HAL_CFG_TX_POWER_50_40 69 +#define QWLAN_HAL_CFG_MCAST_BCAST_FILTER_SETTING 70 +#define QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL 71 +#define QCOM_WLAN_CFG_MAX_TX_POWER_2_4 72 +#define QCOM_WLAN_CFG_MAX_TX_POWER_5 73 +#define QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD 74 +#define QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP 75 +#define QWLAN_HAL_CFG_BTC_EXECUTION_MODE 76 +#define QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK 77 +#define QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS 78 +#define QWLAN_HAL_CFG_PS_TX_INACTIVITY_TIMEOUT 79 +#define QWLAN_HAL_CFG_WCNSS_API_VERSION 80 +#define QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT 81 +#define QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT 82 +#define QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST 83 +#define QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT 84 +#define QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT 85 +#define QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT 86 +#define QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT 87 +#define QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN 88 +#define QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN 89 +#define QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN 90 +#define QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN 91 +#define QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT 92 +#define QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN 93 +#define QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC 94 +#define QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP 95 +#define QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO 96 +#define QWLAN_HAL_CFG_ENABLE_UNICAST_FILTER 97 +#define QWLAN_HAL_CFG_MAX_ASSOC_LIMIT 98 +#define QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION 99 +#define QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER 100 +#define QWLAN_HAL_CFG_ENABLE_DETECT_PS_SUPPORT 101 +#define QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT 102 +#define QWLAN_HAL_CFG_BTC_DWELL_TIME_MULTIPLIER 103 +#define QWLAN_HAL_CFG_ENABLE_TDLS_OXYGEN_MODE 104 +#define QWLAN_HAL_CFG_ENABLE_NAT_KEEP_ALIVE_FILTER 105 +#define QWLAN_HAL_CFG_ENABLE_SAP_OBSS_PROT 106 +#define QWLAN_HAL_CFG_PSPOLL_DATA_RECEP_TIMEOUT 107 +#define QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE 108 +#define QWLAN_HAL_CFG_TDLS_PUAPSD_MASK 109 +#define QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME 110 +#define QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP 111 +#define QWLAN_HAL_CFG_ANTENNA_DIVERSITY 112 +#define QWLAN_HAL_CFG_ATH_DISABLE 113 +#define QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR 114 +#define QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE 115 +#define QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE 116 +#define QWLAN_HAL_CFG_MWS_COEX_V1_WAN_FREQ 117 +#define QWLAN_HAL_CFG_MWS_COEX_V1_WLAN_FREQ 118 +#define QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG 119 +#define QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG2 120 +#define QWLAN_HAL_CFG_MWS_COEX_V2_WAN_FREQ 121 +#define QWLAN_HAL_CFG_MWS_COEX_V2_WLAN_FREQ 122 +#define QWLAN_HAL_CFG_MWS_COEX_V2_CONFIG 123 +#define QWLAN_HAL_CFG_MWS_COEX_V2_CONFIG2 124 +#define QWLAN_HAL_CFG_MWS_COEX_V3_WAN_FREQ 125 +#define QWLAN_HAL_CFG_MWS_COEX_V3_WLAN_FREQ 126 +#define QWLAN_HAL_CFG_MWS_COEX_V3_CONFIG 127 +#define QWLAN_HAL_CFG_MWS_COEX_V3_CONFIG2 128 +#define QWLAN_HAL_CFG_MWS_COEX_V4_WAN_FREQ 129 +#define QWLAN_HAL_CFG_MWS_COEX_V4_WLAN_FREQ 130 +#define QWLAN_HAL_CFG_MWS_COEX_V4_CONFIG 131 +#define QWLAN_HAL_CFG_MWS_COEX_V4_CONFIG2 132 +#define QWLAN_HAL_CFG_MWS_COEX_V5_WAN_FREQ 133 +#define QWLAN_HAL_CFG_MWS_COEX_V5_WLAN_FREQ 134 +#define QWLAN_HAL_CFG_MWS_COEX_V5_CONFIG 135 +#define QWLAN_HAL_CFG_MWS_COEX_V5_CONFIG2 136 +#define QWLAN_HAL_CFG_MWS_COEX_V6_WAN_FREQ 137 +#define QWLAN_HAL_CFG_MWS_COEX_V6_WLAN_FREQ 138 +#define QWLAN_HAL_CFG_MWS_COEX_V6_CONFIG 139 +#define QWLAN_HAL_CFG_MWS_COEX_V6_CONFIG2 140 +#define QWLAN_HAL_CFG_MWS_COEX_V7_WAN_FREQ 141 +#define QWLAN_HAL_CFG_MWS_COEX_V7_WLAN_FREQ 142 +#define QWLAN_HAL_CFG_MWS_COEX_V7_CONFIG 143 +#define QWLAN_HAL_CFG_MWS_COEX_V7_CONFIG2 144 +#define QWLAN_HAL_CFG_MWS_COEX_V8_WAN_FREQ 145 +#define QWLAN_HAL_CFG_MWS_COEX_V8_WLAN_FREQ 146 +#define QWLAN_HAL_CFG_MWS_COEX_V8_CONFIG 147 +#define QWLAN_HAL_CFG_MWS_COEX_V8_CONFIG2 148 +#define QWLAN_HAL_CFG_MWS_COEX_V9_WAN_FREQ 149 +#define QWLAN_HAL_CFG_MWS_COEX_V9_WLAN_FREQ 150 +#define QWLAN_HAL_CFG_MWS_COEX_V9_CONFIG 151 +#define QWLAN_HAL_CFG_MWS_COEX_V9_CONFIG2 152 +#define QWLAN_HAL_CFG_MWS_COEX_V10_WAN_FREQ 153 +#define QWLAN_HAL_CFG_MWS_COEX_V10_WLAN_FREQ 154 +#define QWLAN_HAL_CFG_MWS_COEX_V10_CONFIG 155 +#define QWLAN_HAL_CFG_MWS_COEX_V10_CONFIG2 156 +#define QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF 157 +#define QWLAN_HAL_CFG_MWS_COEX_CONFIG1 158 +#define QWLAN_HAL_CFG_MWS_COEX_CONFIG2 159 +#define QWLAN_HAL_CFG_MWS_COEX_CONFIG3 160 +#define QWLAN_HAL_CFG_MWS_COEX_CONFIG4 161 +#define QWLAN_HAL_CFG_MWS_COEX_CONFIG5 162 +#define QWLAN_HAL_CFG_MWS_COEX_CONFIG6 163 +#define QWLAN_HAL_CFG_SAR_POWER_BACKOFF 164 +#define QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT 165 +#define QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN 166 +#define QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN 167 +#define QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN 168 +#define QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN 169 +#define QWLAN_HAL_CFG_RMCAST_FIXED_RATE 170 +#define QWLAN_HAL_CFG_MAX_PARAMS 171 + + +/* Total number of Integer CFGs. This is used while allocating the memory for TLV */ +#define QWLAN_HAL_CFG_INTEGER_PARAM 171 + +/*------------------------------------------------------------------------- + Configuration Parameter min, max, defaults +-------------------------------------------------------------------------*/ + +/* QWLAN_HAL_CFG_STA_ID*/ +#define QWLAN_HAL_CFG_STA_ID_STADEF "000AF5898989" +#define QCOM_WLAN_CFG_STA_ID_LEN 6 + +/* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */ +#define QWLAN_HAL_CFG_CURRENT_TX_ANTENNA_STAMIN 1 +#define QWLAN_HAL_CFG_CURRENT_TX_ANTENNA_STAMAX 1 +#define QWLAN_HAL_CFG_CURRENT_TX_ANTENNA_STADEF 1 + +/* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */ +#define QWLAN_HAL_CFG_CURRENT_RX_ANTENNA_STAMIN 1 +#define QWLAN_HAL_CFG_CURRENT_RX_ANTENNA_STAMAX 2 +#define QWLAN_HAL_CFG_CURRENT_RX_ANTENNA_STADEF 1 + +/* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */ +#define QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE_STAMIN 0 +#define QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE_STAMAX 1 +#define QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE_STADEF 0 + +/* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */ +#define QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN_STAMIN 0 +#define QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN_STAMAX 65535 +#define QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN_STADEF 785 +#define QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN_OFF 0 +#define QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN_ON 1 +#define QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN_TX 2 +#define QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN_RX 3 +#define QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN_MASK 15 +#define QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN_CHAIN_0_OFFSET 0 +#define QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN_CHAIN_1_OFFSET 4 +#define QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN_CHAIN_2_OFFSET 8 + +/* QWLAN_HAL_CFG_CAL_PERIOD */ +#define QWLAN_HAL_CFG_CAL_PERIOD_STAMIN 2 +#define QWLAN_HAL_CFG_CAL_PERIOD_STAMAX 10 +#define QWLAN_HAL_CFG_CAL_PERIOD_STADEF 5 + +/* QWLAN_HAL_CFG_CAL_CONTROL */ +#define QWLAN_HAL_CFG_CAL_CONTROL_STAMIN 0 +#define QWLAN_HAL_CFG_CAL_CONTROL_STAMAX 1 +#define QWLAN_HAL_CFG_CAL_CONTROL_STADEF 0 +#define QWLAN_HAL_CFG_CAL_CONTROL_CAL_ON 0 +#define QWLAN_HAL_CFG_CAL_CONTROL_CAL_OFF 1 + +/* QWLAN_HAL_CFG_PROXIMITY */ +#define QWLAN_HAL_CFG_PROXIMITY_STAMIN 0 +#define QWLAN_HAL_CFG_PROXIMITY_STAMAX 1 +#define QWLAN_HAL_CFG_PROXIMITY_STADEF 0 +#define QWLAN_HAL_CFG_PROXIMITY_OFF 0 +#define QWLAN_HAL_CFG_PROXIMITY_ON 1 + +/* QWLAN_HAL_CFG_NETWORK_DENSITY */ +#define QWLAN_HAL_CFG_NETWORK_DENSITY_STAMIN 0 +#define QWLAN_HAL_CFG_NETWORK_DENSITY_STAMAX 3 +#define QWLAN_HAL_CFG_NETWORK_DENSITY_STADEF 3 +#define QWLAN_HAL_CFG_NETWORK_DENSITY_LOW 0 +#define QWLAN_HAL_CFG_NETWORK_DENSITY_MEDIUM 1 +#define QWLAN_HAL_CFG_NETWORK_DENSITY_HIGH 2 +#define QWLAN_HAL_CFG_NETWORK_DENSITY_ADAPTIVE 3 + +/* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */ +#define QWLAN_HAL_CFG_MAX_MEDIUM_TIME_STAMIN 0 +#define QWLAN_HAL_CFG_MAX_MEDIUM_TIME_STAMAX 65535 +#define QWLAN_HAL_CFG_MAX_MEDIUM_TIME_STADEF 1024 + +/* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */ +#define QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU_STAMIN 0 +#define QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU_STAMAX 65535 +#define QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU_STADEF 64 + +/* QWLAN_HAL_CFG_RTS_THRESHOLD */ +#define QWLAN_HAL_CFG_RTS_THRESHOLD_STAMIN 0 +#define QWLAN_HAL_CFG_RTS_THRESHOLD_STAMAX 2347 +#define QWLAN_HAL_CFG_RTS_THRESHOLD_STADEF 2347 + +/* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */ +#define QWLAN_HAL_CFG_SHORT_RETRY_LIMIT_STAMIN 0 +#define QWLAN_HAL_CFG_SHORT_RETRY_LIMIT_STAMAX 255 +#define QWLAN_HAL_CFG_SHORT_RETRY_LIMIT_STADEF 15 + +/* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */ +#define QWLAN_HAL_CFG_LONG_RETRY_LIMIT_STAMIN 0 +#define QWLAN_HAL_CFG_LONG_RETRY_LIMIT_STAMAX 255 +#define QWLAN_HAL_CFG_LONG_RETRY_LIMIT_STADEF 15 + +/* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */ +#define QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD_STAMIN 256 +#define QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD_STAMAX 8000 +#define QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD_STADEF 8000 + +/* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */ +#define QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO_STAMIN 0 +#define QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO_STAMAX 255 +#define QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO_STADEF 5 + +/* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */ +#define QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE_STAMIN 0 +#define QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE_STAMAX 255 +#define QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE_STADEF 10 + +/* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */ +#define QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO_STAMIN 0 +#define QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO_STAMAX 255 +#define QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO_STADEF 15 + +#define QWLAN_HAL_CFG_FIXED_RATE_AUTO 0 +#define QWLAN_HAL_CFG_FIXED_RATE_1MBPS 1 +#define QWLAN_HAL_CFG_FIXED_RATE_2MBPS 2 +#define QWLAN_HAL_CFG_FIXED_RATE_5_5MBPS 3 +#define QWLAN_HAL_CFG_FIXED_RATE_11MBPS 4 +#define QWLAN_HAL_CFG_FIXED_RATE_6MBPS 5 +#define QWLAN_HAL_CFG_FIXED_RATE_9MBPS 6 +#define QWLAN_HAL_CFG_FIXED_RATE_12MBPS 7 +#define QWLAN_HAL_CFG_FIXED_RATE_18MBPS 8 +#define QWLAN_HAL_CFG_FIXED_RATE_24MBPS 9 +#define QWLAN_HAL_CFG_FIXED_RATE_36MBPS 10 +#define QWLAN_HAL_CFG_FIXED_RATE_48MBPS 11 +#define QWLAN_HAL_CFG_FIXED_RATE_54MBPS 12 +#define QWLAN_HAL_CFG_FIXED_RATE_6_5MBPS_MCS0_20MHZ_SIMO 13 +#define QWLAN_HAL_CFG_FIXED_RATE_13MBPS_MCS1_20MHZ_SIMO 14 +#define QWLAN_HAL_CFG_FIXED_RATE_19_5MBPS_MCS2_20MHZ_SIMO 15 +#define QWLAN_HAL_CFG_FIXED_RATE_26MBPS_MCS3_20MHZ_SIMO 16 +#define QWLAN_HAL_CFG_FIXED_RATE_39MBPS_MCS4_20MHZ_SIMO 17 +#define QWLAN_HAL_CFG_FIXED_RATE_52MBPS_MCS5_20MHZ_SIMO 18 +#define QWLAN_HAL_CFG_FIXED_RATE_58_5MBPS_MCS6_20MHZ_SIMO 19 +#define QWLAN_HAL_CFG_FIXED_RATE_65MBPS_MCS7_20MHZ_SIMO 20 +#define QWLAN_HAL_CFG_FIXED_RATE_7_2MBPS_MCS0_20MHZ_SIMO_SGI 21 +#define QWLAN_HAL_CFG_FIXED_RATE_14_4MBPS_MCS1_20MHZ_SIMO_SGI 22 +#define QWLAN_HAL_CFG_FIXED_RATE_21_7MBPS_MCS2_20MHZ_SIMO_SGI 23 +#define QWLAN_HAL_CFG_FIXED_RATE_28_9MBPS_MCS3_20MHZ_SIMO_SGI 24 +#define QWLAN_HAL_CFG_FIXED_RATE_43_3MBPS_MCS4_20MHZ_SIMO_SGI 25 +#define QWLAN_HAL_CFG_FIXED_RATE_57_8MBPS_MCS5_20MHZ_SIMO_SGI 26 +#define QWLAN_HAL_CFG_FIXED_RATE_65MBPS_MCS6_20MHZ_SIMO_SGI 27 +#define QWLAN_HAL_CFG_FIXED_RATE_72_2MBPS_MCS7_20MHZ_SIMO_SGI 28 +#define QWLAN_HAL_CFG_FIXED_RATE_13_5MBPS_MCS0_40MHZ_SIMO 29 +#define QWLAN_HAL_CFG_FIXED_RATE_27MBPS_MCS1_40MHZ_SIMO 30 +#define QWLAN_HAL_CFG_FIXED_RATE_40_5MBPS_MCS2_40MHZ_SIMO 31 +#define QWLAN_HAL_CFG_FIXED_RATE_54MBPS_MCS3_40MHZ_SIMO 32 +#define QWLAN_HAL_CFG_FIXED_RATE_81MBPS_MCS4_40MHZ_SIMO 33 +#define QWLAN_HAL_CFG_FIXED_RATE_108MBPS_MCS5_40MHZ_SIMO 34 +#define QWLAN_HAL_CFG_FIXED_RATE_121_5MBPS_MCS6_40MHZ_SIMO 35 +#define QWLAN_HAL_CFG_FIXED_RATE_135MBPS_MCS7_40MHZ_SIMO 36 +#define QWLAN_HAL_CFG_FIXED_RATE_15MBPS_MCS0_40MHZ_SIMO_SGI 37 +#define QWLAN_HAL_CFG_FIXED_RATE_30MBPS_MCS1_40MHZ_SIMO_SGI 38 +#define QWLAN_HAL_CFG_FIXED_RATE_45MBPS_MCS2_40MHZ_SIMO_SGI 39 +#define QWLAN_HAL_CFG_FIXED_RATE_60MBPS_MCS3_40MHZ_SIMO_SGI 40 +#define QWLAN_HAL_CFG_FIXED_RATE_90MBPS_MCS4_40MHZ_SIMO_SGI 41 +#define QWLAN_HAL_CFG_FIXED_RATE_120MBPS_MCS5_40MHZ_SIMO_SGI 42 +#define QWLAN_HAL_CFG_FIXED_RATE_135MBPS_MCS6_40MHZ_SIMO_SGI 43 +#define QWLAN_HAL_CFG_FIXED_RATE_150MBPS_MCS7_40MHZ_SIMO_SGI 44 + +/* QWLAN_HAL_CFG_FIXED_RATE + * Follwing rates in user configuration are mapped to TPE rates + * Mapping is defined in the gHalUserFixedRateCfgToTpeRateTable + */ +#define QWLAN_HAL_CFG_FIXED_RATE_STAMIN 0 +#define QWLAN_HAL_CFG_FIXED_RATE_STAMAX 226 +#define QWLAN_HAL_CFG_FIXED_RATE_STADEF QWLAN_HAL_CFG_FIXED_RATE_AUTO + +/* QWLAN_HAL_CFG_RMCAST_FIXED_RATE + * Follwing rates in user configuration are mapped to TPE rates + * Mapping is defined in the gHalUserFixedRateCfgToTpeRateTable + */ +#define QWLAN_HAL_CFG_RMCAST_FIXED_RATE_STAMIN 0 +#define QWLAN_HAL_CFG_RMCAST_FIXED_RATE_STAMAX 226 +#define QWLAN_HAL_CFG_RMCAST_FIXED_RATE_STADEF QWLAN_HAL_CFG_FIXED_RATE_24MBPS + +/* QWLAN_HAL_CFG_RETRYRATE_POLICY */ +#define QWLAN_HAL_CFG_RETRYRATE_POLICY_STAMIN 0 +#define QWLAN_HAL_CFG_RETRYRATE_POLICY_STAMAX 255 +#define QWLAN_HAL_CFG_RETRYRATE_POLICY_STADEF 4 +#define QWLAN_HAL_CFG_RETRYRATE_POLICY_MIN_SUPPORTED 0 +#define QWLAN_HAL_CFG_RETRYRATE_POLICY_PRIMARY 1 +#define QWLAN_HAL_CFG_RETRYRATE_POLICY_RESERVED 2 +#define QWLAN_HAL_CFG_RETRYRATE_POLICY_CLOSEST 3 +#define QWLAN_HAL_CFG_RETRYRATE_POLICY_AUTOSELECT 4 +#define QWLAN_HAL_CFG_RETRYRATE_POLICY_MAX 5 + +/* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */ +#define QWLAN_HAL_CFG_RETRYRATE_SECONDARY_STAMIN 0 +#define QWLAN_HAL_CFG_RETRYRATE_SECONDARY_STAMAX 255 +#define QWLAN_HAL_CFG_RETRYRATE_SECONDARY_STADEF 0 + +/* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */ +#define QWLAN_HAL_CFG_RETRYRATE_TERTIARY_STAMIN 0 +#define QWLAN_HAL_CFG_RETRYRATE_TERTIARY_STAMAX 255 +#define QWLAN_HAL_CFG_RETRYRATE_TERTIARY_STADEF 0 + +/* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */ +#define QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION_STAMIN 0 +#define QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION_STAMAX 5 +#define QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION_STADEF 5 +#define QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION_DISABLE 0 +#define QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION_CTS 1 +#define QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION_RTS 2 +#define QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION_DUAL_CTS 3 +#define QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION_RTS_ALWAYS 4 +#define QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION_AUTO 5 + +/* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */ +#define QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ_STAMIN 0 +#define QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ_STAMAX QWLAN_HAL_CFG_FIXED_RATE_STAMAX +#define QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ_STADEF QWLAN_HAL_CFG_FIXED_RATE_1MBPS + +/* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */ +#define QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ_STAMIN 0 +#define QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ_STAMAX QWLAN_HAL_CFG_FIXED_RATE_STAMAX +#define QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ_STADEF QWLAN_HAL_CFG_FIXED_RATE_6MBPS + +/* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */ +#define QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ_STAMIN 0 +#define QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ_STAMAX QWLAN_HAL_CFG_FIXED_RATE_STAMAX +#define QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ_STADEF QWLAN_HAL_CFG_FIXED_RATE_1MBPS + +/* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */ +#define QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ_STAMIN 0 +#define QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ_STAMAX QWLAN_HAL_CFG_FIXED_RATE_STAMAX +#define QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ_STADEF QWLAN_HAL_CFG_FIXED_RATE_6MBPS + +/* QWLAN_HAL_CFG_MAX_BA_SESSIONS */ +#define QWLAN_HAL_CFG_MAX_BA_SESSIONS_STAMIN 0 +#define QWLAN_HAL_CFG_MAX_BA_SESSIONS_STAMAX 64 +#define QWLAN_HAL_CFG_MAX_BA_SESSIONS_STADEF 40 + +/* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */ +#define QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT_STAMIN 1 +#define QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT_STAMAX 255 +#define QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT_STADEF 20 + +/* QWLAN_HAL_CFG_PS_TX_INACTIVITY_TIMEOUT */ +#define QWLAN_HAL_CFG_PS_TX_INACTIVITY_TIMEOUT_STAMIN 0 +#define QWLAN_HAL_CFG_PS_TX_INACTIVITY_TIMEOUT_STAMAX 255 +#define QWLAN_HAL_CFG_PS_TX_INACTIVITY_TIMEOUT_STADEF 300 + +/* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */ +#define QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER_STAMIN 0 +#define QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER_STAMAX 1 +#define QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER_STADEF 1 + +/* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */ +#define QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR_STAMIN 0 +#define QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR_STAMAX 1 +#define QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR_STADEF 1 + +/* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */ +#define QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE_STAMIN 1 +#define QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE_STAMAX 20 +#define QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE_STADEF 20 + +/* QWLAN_HAL_CFG_STATS_PERIOD */ +#define QWLAN_HAL_CFG_STATS_PERIOD_STAMIN 1 +#define QWLAN_HAL_CFG_STATS_PERIOD_STAMAX 10 +#define QWLAN_HAL_CFG_STATS_PERIOD_STADEF 10 + +/* QWLAN_HAL_CFG_CFP_MAX_DURATION */ +#define QWLAN_HAL_CFG_CFP_MAX_DURATION_STAMIN 0 +#define QWLAN_HAL_CFG_CFP_MAX_DURATION_STAMAX 65535 +#define QWLAN_HAL_CFG_CFP_MAX_DURATION_STADEF 30000 + +/* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */ +#define QWLAN_HAL_CFG_FRAME_TRANS_ENABLED_STAMIN 0 +#define QWLAN_HAL_CFG_FRAME_TRANS_ENABLED_STAMAX 1 +#define QWLAN_HAL_CFG_FRAME_TRANS_ENABLED_STADEF 0 + +/* QWLAN_HAL_CFG_DTIM_PERIOD */ +#define QWLAN_HAL_CFG_DTIM_PERIOD_STAMIN 0 +#define QWLAN_HAL_CFG_DTIM_PERIOD_STAMAX 65535 +#define QWLAN_HAL_CFG_DTIM_PERIOD_STADEF 1 + +/* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */ +#define QWLAN_HAL_CFG_BA_THRESHOLD_HIGH_STAMIN 0 +#define QWLAN_HAL_CFG_BA_THRESHOLD_HIGH_STAMAX 65535 +#define QWLAN_HAL_CFG_BA_THRESHOLD_HIGH_STADEF 1 + +/* QWLAN_HAL_CFG_MAX_BA_BUFFERS */ +#define QWLAN_HAL_CFG_MAX_BA_BUFFERS_STAMIN 0 +#define QWLAN_HAL_CFG_MAX_BA_BUFFERS_STAMAX 2560 +#define QWLAN_HAL_CFG_MAX_BA_BUFFERS_STADEF 2560 + + + +/* ACM, AIFSN, [CWmin, CWmax, TxOp]-11A/11B/11G + * Cwmin and Cwmax are two bytes each, MSB first. So Cwmax of [03 FF] is + * equivalent to 0x03ff = 1023*/ +#define QWLAN_HAL_CFG_EDCA_PROFILE_ACM_IDX 0 /* byte[0] */ +#define QWLAN_HAL_CFG_EDCA_PROFILE_AIFSN_IDX 1 /* byte[1] */ +#define QWLAN_HAL_CFG_EDCA_PROFILE_CWMINA_IDX 2 /* byte[2] & byte [3] */ +#define QWLAN_HAL_CFG_EDCA_PROFILE_CWMAXA_IDX 4 /* byte[4] & byte [5] */ +#define QWLAN_HAL_CFG_EDCA_PROFILE_TXOPA_IDX 6 /* byte[6] */ +#define QWLAN_HAL_CFG_EDCA_PROFILE_CWMINB_IDX 7 /* byte[7] & byte [8] */ +#define QWLAN_HAL_CFG_EDCA_PROFILE_CWMAXB_IDX 9 /* byte[9] & byte [10] */ +#define QWLAN_HAL_CFG_EDCA_PROFILE_TXOPB_IDX 11 /* byte[11]*/ +#define QWLAN_HAL_CFG_EDCA_PROFILE_CWMING_IDX 12 /* byte[12] & byte [13] */ +#define QWLAN_HAL_CFG_EDCA_PROFILE_CWMAXG_IDX 14 /* byte[14] & byte [15] */ +#define QWLAN_HAL_CFG_EDCA_PROFILE_TXOPG_IDX 16 /* byte[16]*/ +#define QWLAN_HAL_CFG_EDCA_PARAM_MAX_LEN 20 + +/* QWLAN_HAL_CFG_EDCA_WMM_ACBK */ +#define QWLAN_HAL_CFG_EDCA_WMM_ACBK_DEFAULT "0007000F03FF00001F03FF00000F03FF00" + +/* QWLAN_HAL_CFG_EDCA_WMM_ACBE */ +#define QWLAN_HAL_CFG_EDCA_WMM_ACBE_DEFAULT "0003000F03FF00001F03FF00000F03FF00" + +/* QWLAN_HAL_CFG_EDCA_WMM_ACVI */ +#define QWLAN_HAL_CFG_EDCA_WMM_ACVI_DEFAULT "00020007000F5E000F001FBC0007000F5E" + +/* QWLAN_HAL_CFG_EDCA_WMM_ACVO */ +#define QWLAN_HAL_CFG_EDCA_WMM_ACVO_DEFAULT "0002000300072F0007000F66000300072F" + + +/* QWLAN_HAL_CFG_RPE_POLLING_THRESHOLD */ +#define QWLAN_CFG_RPE_POLLING_THRESHOLD_STAMIN 0 +#define QWLAN_CFG_RPE_POLLING_THRESHOLD_STAMAX 65535 +#define QWLAN_CFG_RPE_POLLING_THRESHOLD_STADEF 30 + +/* QWLAN_HAL_CFG_RPE_AGING_THRESHOLD_FOR_AC0_REG */ +#define QWLAN_CFG_RPE_AGING_THRESHOLD_FOR_AC0_REG_STAMIN 0 +#define QWLAN_CFG_RPE_AGING_THRESHOLD_FOR_AC0_REG_STAMAX 65535 +#define QWLAN_CFG_RPE_AGING_THRESHOLD_FOR_AC0_REG_STADEF 30 + +/* QWLAN_HAL_CFG_RPE_AGING_THRESHOLD_FOR_AC1_REG */ +#define QWLAN_CFG_RPE_AGING_THRESHOLD_FOR_AC1_REG_STAMIN 0 +#define QWLAN_CFG_RPE_AGING_THRESHOLD_FOR_AC1_REG_STAMAX 65535 +#define QWLAN_CFG_RPE_AGING_THRESHOLD_FOR_AC1_REG_STADEF 30 + +/* QWLAN_HAL_CFG_RPE_AGING_THRESHOLD_FOR_AC2_REG */ +#define QWLAN_CFG_RPE_AGING_THRESHOLD_FOR_AC2_REG_STAMIN 0 +#define QWLAN_CFG_RPE_AGING_THRESHOLD_FOR_AC2_REG_STAMAX 65535 +#define QWLAN_CFG_RPE_AGING_THRESHOLD_FOR_AC2_REG_STADEF 30 + +/* QWLAN_HAL_CFG_RPE_AGING_THRESHOLD_FOR_AC3_REG */ +#define QWLAN_CFG_RPE_AGING_THRESHOLD_FOR_AC3_REG_STAMIN 0 +#define QWLAN_CFG_RPE_AGING_THRESHOLD_FOR_AC3_REG_STAMAX 65535 +#define QWLAN_CFG_RPE_AGING_THRESHOLD_FOR_AC3_REG_STADEF 30 + +/* QWLAN_HAL_CFG_NO_OF_ONCHIP_REORDER_SESSIONS */ +#define QWLAN_CFG_NO_OF_ONCHIP_REORDER_SESSIONS_STAMIN 0 +#define QWLAN_CFG_NO_OF_ONCHIP_REORDER_SESSIONS_STAMAX 2 +#define QWLAN_CFG_NO_OF_ONCHIP_REORDER_SESSIONS_STADEF 1 + +#define QWLAN_HAL_CFG_PS_LISTEN_INTERVAL_STAMIN 0 +#define QWLAN_HAL_CFG_PS_LISTEN_INTERVAL_STAMAX 65535 +#define QWLAN_HAL_CFG_PS_LISTEN_INTERVAL_STADEF 1 + +#define QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD_STAMIN 0 +#define QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD_STAMAX 65535 +#define QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD_STADEF 40 + +#define QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER_STAMIN 0 +#define QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER_STAMAX 255 +#define QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER_STADEF 10 + +#define QWLAN_HAL_CFG_PS_MAX_PS_POLL_STAMIN 0 +#define QWLAN_HAL_CFG_PS_MAX_PS_POLL_STAMAX 255 +#define QWLAN_HAL_CFG_PS_MAX_PS_POLL_STADEF 0 + +#define QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD_STAMIN 0 +#define QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD_STAMAX 10 +#define QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD_STADEF 10 + +#define QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD_STAMIN 0 +#define QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD_STAMAX 255 +#define QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD_STADEF 20 + +#define QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE_STAMIN 0 +#define QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE_STAMAX 1 +#define QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE_STADEF 0 + +#define QWLAN_HAL_CFG_PS_IGNORE_DTIM_STAMIN 0 +#define QWLAN_HAL_CFG_PS_IGNORE_DTIM_STAMAX 1 +#define QWLAN_HAL_CFG_PS_IGNORE_DTIM_STADEF 0 + +#define QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM_STAMIN 0 +#define QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM_STAMAX 1 +#define QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM_STADEF 0 + +#define QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE_STAMIN 0 +#define QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE_STAMAX 255 +#define QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE_STADEF 0 + +#define QWLAN_HAL_CFG_PS_NULLDATA_AP_RESP_TIMEOUT_STAMIN 0 +#define QWLAN_HAL_CFG_PS_NULLDATA_AP_RESP_TIMEOUT_STAMAX 80 +#define QWLAN_HAL_CFG_PS_NULLDATA_AP_RESP_TIMEOUT_STADEF 0 + +/* QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE */ +#define QWLAN_CFG_TX_PWR_CTRL_ENABLE_STAMIN 0 +#define QWLAN_CFG_TX_PWR_CTRL_ENABLE_STAMAX 1 +#define QWLAN_CFG_TX_PWR_CTRL_ENABLE_STADEF 1 + +#define QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN_STAMIN 0 +#define QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN_STAMAX 1 +#define QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN_STADEF 0 + +#define QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_STAMIN 0 +#define QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_STAMAX 7 +#define QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_STADEF 3 + +#define QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS_STAMIN 5 +#define QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS_STAMAX 255 +#define QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS_STADEF 10 + +#define QWLAN_HAL_CFG_TELE_BCN_MAX_LI_STAMIN 0 +#define QWLAN_HAL_CFG_TELE_BCN_MAX_LI_STAMAX 7 +#define QWLAN_HAL_CFG_TELE_BCN_MAX_LI_STADEF 5 + +#define QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS_STAMIN 5 +#define QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS_STAMAX 255 +#define QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS_STADEF 15 + +#define QWLAN_HAL_CFG_MCAST_BCAST_FILTER_SETTING_STAMIN 0 +#define QWLAN_HAL_CFG_MCAST_BCAST_FILTER_SETTING_STAMAX 3 +#define QWLAN_HAL_CFG_MCAST_BCAST_FILTER_SETTING_STADEF 0 + +#define QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL_STAMIN 1 +#define QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL_STAMAX 255 +#define QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL_STADEF 5 + +/*Values to be added in hexadecimal*/ +/* QWLAN_HAL_CFG_VALID_RADAR_LIST */ +#define QWLAN_HAL_CFG_VALID_RADAR_CHANNEL_LIST_DEFAULT "36" +#define QWLAN_HAL_CFG_RADAR_CHANNEL_LIST_LEN 20 + +/* QWLAN_HAL_CFG_TX_POWER_24_20 */ +#define QWLAN_WLAN_TX_POWER_24_20_DEFAULT 299 +#define QWLAN_WLAN_TX_POWER_24_20_MIN 299 +#define QWLAN_WLAN_TX_POWER_24_20_MAX 299 + +/* QWLAN_HAL_CFG_TX_POWER_24_40 */ +#define QWLAN_WLAN_TX_POWER_24_40_DEFAULT 300 +#define QWLAN_WLAN_TX_POWER_24_40_MIN 299 +#define QWLAN_WLAN_TX_POWER_24_40_MAX 299 + +/* QWLAN_HAL_CFG_TX_POWER_50_20 */ +#define QWLAN_WLAN_TX_POWER_50_20_DEFAULT 301 +#define QWLAN_WLAN_TX_POWER_50_20_MIN 299 +#define QWLAN_WLAN_TX_POWER_50_20_MAX 299 + +/* QWLAN_HAL_CFG_TX_POWER_50_40 */ +#define QWLAN_WLAN_TX_POWER_50_40_DEFAULT 302 +#define QWLAN_WLAN_TX_POWER_50_40_MIN 299 +#define QWLAN_WLAN_TX_POWER_50_40_MAX 299 + +/* QCOM_WLAN_CFG_MAX_TX_POWER_2_4 */ +#define QCOM_WLAN_CFG_MAX_TX_POWER_2_4_LEN 128 +/* byte[0] = 0x01 = First Channel; byte[1] = 0x0E = 14 = MaxChannels; byte[2] = 0x14 = 20 = Tx Power (dBm) */ +#define QCOM_WLAN_CFG_MAX_TX_POWER_2_4_DEFAULT "010E14" + +/* QCOM_WLAN_CFG_MAX_TX_POWER_5 */ +#define QCOM_WLAN_CFG_MAX_TX_POWER_5_LEN 128 +/* byte[0] = 0x24 = 36 = First Channel; byte[1] = 0x82 = 130 = MaxChannels; byte[2] = 0x14 = 20 = Tx Power (dBm) */ +#define QCOM_WLAN_CFG_MAX_TX_POWER_5_DEFAULT "248214" + + +#define QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD_STAMIN 0 +#define QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD_STAMAX 65535 +#define QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD_STADEF 0 + +#define QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP_MIN 0 +#define QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP_MAX 1 +#define QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP_DEF 0 + +/* QWLAN_HAL_CFG_BTC_EXECUTION_MODE */ +#define QWLAN_HAL_CFG_BTC_EXECUTION_MODE_MIN 0 +#define QWLAN_HAL_CFG_BTC_EXECUTION_MODE_MAX 5 +#define QWLAN_HAL_CFG_BTC_EXECUTION_MODE_DEF 0 + +/* QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */ +#define QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK_MIN 0 +#define QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK_MAX 255 +#define QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK_DEF 0 + +/* QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */ +#define QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS_MIN 0 +#define QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS_MAX 255 +#define QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS_DEF 15 + +/* QWLAN_HAL_CFG_WCNSS_API_VERSION */ +#define QWLAN_HAL_CFG_WCNSS_API_VERSION_MIN 0 /* equivalent to 0.0.0.0 */ +#define QWLAN_HAL_CFG_WCNSS_API_VERSION_MAX 4294967295U /* equivalent to 255.255.255.255 */ +#define QWLAN_HAL_CFG_WCNSS_API_VERSION_DEF 0 /* equivalent to 0.0.0.0 */ + +/* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */ +#define QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT_MIN 1 +#define QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT_MAX 255 +#define QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT_DEF 20 + +/* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */ +#define QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT_MIN 1 +#define QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT_MAX 255 +#define QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT_DEF 20 + +/* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */ +#define QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST_MIN 0 +#define QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST_MAX 1 +#define QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST_DEF 0 + +/* QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */ +#define QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT_MIN 5000 +#define QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT_MAX 500000 +#define QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT_DEF 120000 + +/* QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */ +#define QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT_MIN 5000 +#define QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT_MAX 500000 +#define QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT_DEF 10000 + +/* QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */ +#define QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT_MIN 5000 +#define QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT_MAX 500000 +#define QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT_DEF 10000 + +/* QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */ +#define QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT_MIN 5000 +#define QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT_MAX 500000 +#define QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT_DEF 10000 + +/* QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */ +#define QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN_MIN 0 +#define QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN_MAX 500000 +#define QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN_DEF 30000 + +/* QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */ +#define QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN_MIN 0 +#define QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN_MAX 500000 +#define QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN_DEF 0 + +/* QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */ +#define QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN_MIN 0 +#define QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN_MAX 500000 +#define QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN_DEF 0 + +/* QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */ +#define QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN_MIN 0 +#define QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN_MAX 500000 +#define QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN_DEF 0 + +/* QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */ +#define QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT_MIN 25000 +#define QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT_MAX 500000 +#define QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT_DEF 250000 + +/* QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */ +#define QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN_MIN 15000 +#define QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN_MAX 500000 +#define QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN_DEF 45000 + +/* QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */ +#define QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC_MIN 0 +#define QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC_MAX 100 +#define QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC_DEF 1 + +/* QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */ +#define QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP_MIN 0 +#define QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP_MAX 1 +#define QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP_DEF 1 + +/* QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */ +#define QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO_MIN 0 +#define QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO_MAX 1 +#define QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO_DEF 0 + +/* QWLAN_HAL_CFG_ENABLE_UNICAST_FILTER */ +#define QWLAN_HAL_CFG_ENABLE_UNICAST_FILTER_MIN 0 +#define QWLAN_HAL_CFG_ENABLE_UNICAST_FILTER_MAX 1 +#define QWLAN_HAL_CFG_ENABLE_UNICAST_FILTER_DEF 0 + +/* QWLAN_HAL_CFG_MAX_ASSOC_LIMIT */ +#define QWLAN_HAL_CFG_MAX_ASSOC_LIMIT_MIN 10 +#define QWLAN_HAL_CFG_MAX_ASSOC_LIMIT_MAX 32 +#define QWLAN_HAL_CFG_MAX_ASSOC_LIMIT_DEF 10 + +/* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */ +#define QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION_MIN 0 +#define QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION_MAX 1 +#define QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION_DEF 0 + +/* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */ +#define QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER_MIN 0 +#define QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER_MAX 1 +#define QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER_DEF 0 + +/* QWLAN_HAL_CFG_ENABLE_DETECT_PS_SUPPORT */ +#define QWLAN_HAL_CFG_ENABLE_DETECT_PS_SUPPORT_MIN 0 +#define QWLAN_HAL_CFG_ENABLE_DETECT_PS_SUPPORT_MAX 1 +#define QWLAN_HAL_CFG_ENABLE_DETECT_PS_SUPPORT_DEF 0 + +/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */ +#define QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT_MIN 3 +#define QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT_MAX 30 +#define QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT_DEF 10 + +/* QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT */ +#define QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT_MIN 3 +#define QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT_MAX 30 +#define QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT_DEF 10 + +/*QWLAN_HAL_CFG_BTC_DWELL_TIME_MULTIPLIER*/ +/*This value is multiplied to ChannelDwellTime + *i.e If value is 300 then ChannelDwellTime is (3*ChannelDwelltime)*/ +#define QWLAN_HAL_CFG_BTC_DWELL_TIME_MULTIPLIER_MIN 0 +#define QWLAN_HAL_CFG_BTC_DWELL_TIME_MULTIPLIER_MAX 300 +#define QWLAN_HAL_CFG_BTC_DWELL_TIME_MULTIPLIER_DEF 300 + +/* QWLAN_HAL_CFG_ENABLE_TDLS_OXYGEN_MODE */ +#define QWLAN_HAL_CFG_ENABLE_TDLS_OXYGEN_MODE_MIN 0 +#define QWLAN_HAL_CFG_ENABLE_TDLS_OXYGEN_MODE_MAX 1 +#define QWLAN_HAL_CFG_ENABLE_TDLS_OXYGEN_MODE_DEF 0 + +/* QWLAN_HAL_CFG_ENABLE_NAT_KEEP_ALIVE_FILTER */ +#define QWLAN_HAL_CFG_ENABLE_NAT_KEEP_ALIVE_FILTER_MIN 0 +#define QWLAN_HAL_CFG_ENABLE_NAT_KEEP_ALIVE_FILTER_MAX 1 +#define QWLAN_HAL_CFG_ENABLE_NAT_KEEP_ALIVE_FILTER_DEF 0 + +/* QWLAN_HAL_CFG_ENABLE_SAP_OBSS_PROT */ +#define QWLAN_HAL_CFG_ENABLE_SAP_OBSS_PROT_MIN 0 +#define QWLAN_HAL_CFG_ENABLE_SAP_OBSS_PROT_MAX 1 +#define QWLAN_HAL_CFG_ENABLE_SAP_OBSS_PROT_DEF 0 + +/* QWLAN_HAL_CFG_PSPOLL_DATA_RECEP_TIMEOUT */ +#define QWLAN_HAL_CFG_PSPOLL_DATA_RECEP_TIMEOUT_STAMIN 1 +#define QWLAN_HAL_CFG_PSPOLL_DATA_RECEP_TIMEOUT_STAMAX 255 +#define QWLAN_HAL_CFG_PSPOLL_DATA_RECEP_TIMEOUT_STADEF 20 + +/* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */ +#define QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE_MIN 0 +#define QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE_MAX 1 +#define QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE_DEF 0 + +/* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */ +#define QWLAN_HAL_CFG_TDLS_PUAPSD_MASK_MIN 0 +#define QWLAN_HAL_CFG_TDLS_PUAPSD_MASK_MAX 0xf +#define QWLAN_HAL_CFG_TDLS_PUAPSD_MASK_DEF 0 + +/* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */ +#define QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME_MIN 0 +#define QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME_MAX 10 +#define QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME_DEF 0 + +/* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */ +#define QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP_MIN 10 +#define QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP_MAX 20 +#define QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP_DEF 10 + +#define QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN_MIN 0 +#define QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN_MAX 250000 +#define QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN_DEF 60000 + +#define QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN_MIN 0 +#define QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN_MAX 250000 +#define QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN_DEF 90000 + +#define QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN_MIN 0 +#define QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN_MAX 250000 +#define QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN_DEF 60000 + +#define QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN_MIN 0 +#define QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN_MAX 250000 +#define QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN_DEF 90000 + +/* QWLAN_HAL_CFG_ANTENNA_DIVERSITY */ +#define QWLAN_HAL_CFG_ANTENNA_DIVERSITY_DEF 0 +#define QWLAN_HAL_CFG_ANTENNA_DIVERSITY_MIN 0 +#define QWLAN_HAL_CFG_ANTENNA_DIVERSITY_MAX 3 + +#define QWLAN_HAL_CFG_ATH_DEF 0 +#define QWLAN_HAL_CFG_ATH_MIN 0 +#define QWLAN_HAL_CFG_ATH_MAX 1 + +/* QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR */ +#define QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR_DEF 0 +#define QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR_MIN 0 +#define QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR_MAX 9 + +/* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_RX_DRAIN_FEATURE */ +#define QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE_MIN 0 +#define QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE_MAX 1 +#define QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE_DEF 1 + +/* QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE */ +#define QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE_MIN 0 +#define QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE_MAX 1 +#define QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE_DEF 0 + +/* QWLAN_HAL_CFG_MWS_COEX_XXXX */ +#define QWLAN_HAL_CFG_MWS_COEX_DEF 0 +#define QWLAN_HAL_CFG_MWS_COEX_MIN 0 +#define QWLAN_HAL_CFG_MWS_COEX_MAX 0xFFFFFFFF +#define QWLAN_HAL_CFG_MWS_COEX_MAX_VICTIM 10 +#define QWLAN_HAL_CFG_MWS_COEX_MAX_CONFIG 6 + +/* QWLAN_HAL_CFG_SAR_POWER_BACKOFF */ +#define QWLAN_HAL_CFG_SAR_POWER_BACKOFF_DEF 13 +#define QWLAN_HAL_CFG_SAR_POWER_BACKOFF_MIN 1 +#define QWLAN_HAL_CFG_SAR_POWER_BACKOFF_MAX 21 + +#endif //__WLAN_HAL_CFG_H__ + + diff --git a/riva/inc/wlan_hal_msg.h b/riva/inc/wlan_hal_msg.h new file mode 100644 index 000000000000..81633c43de5b --- /dev/null +++ b/riva/inc/wlan_hal_msg.h @@ -0,0 +1,7062 @@ +/* +* Copyright (c) 2012-2013 Qualcomm Atheros, Inc. +* All Rights Reserved. +* Qualcomm Atheros Confidential and Proprietary. +*/ + +/*========================================================================== + * + * @file: wlan_hal_msg.h + * + * @brief: Exports and types for messages sent to HAL from WDI + * + * @author: Kumar Anand + * + * Copyright (C) 2010, Qualcomm Technologies, Inc. + * All rights reserved. + * + *=========================================================================*/ + +#ifndef _WLAN_HAL_MSG_H_ +#define _WLAN_HAL_MSG_H_ + +#include "halLegacyPalTypes.h" +#include "halCompiler.h" +#include "wlan_qct_dev_defs.h" +#include "wlan_nv.h" + +/*--------------------------------------------------------------------------- + API VERSIONING INFORMATION + + The RIVA API is versioned as MAJOR.MINOR.VERSION.REVISION + The MAJOR is incremented for major product/architecture changes + (and then MINOR/VERSION/REVISION are zeroed) + The MINOR is incremented for minor product/architecture changes + (and then VERSION/REVISION are zeroed) + The VERSION is incremented if a significant API change occurs + (and then REVISION is zeroed) + The REVISION is incremented if an insignificant API change occurs + or if a new API is added + All values are in the range 0..255 (ie they are 8-bit values) + ---------------------------------------------------------------------------*/ +#define WLAN_HAL_VER_MAJOR 1 +#define WLAN_HAL_VER_MINOR 5 +#define WLAN_HAL_VER_VERSION 1 +#define WLAN_HAL_VER_REVISION 2 + +/*--------------------------------------------------------------------------- + Commom Type definitons + ---------------------------------------------------------------------------*/ + +//This is to force compiler to use the maximum of an int ( 4 bytes ) +#define WLAN_HAL_MAX_ENUM_SIZE 0x7FFFFFFF +#define WLAN_HAL_MSG_TYPE_MAX_ENUM_SIZE 0x7FFF + +//Max no. of transmit categories +#define STACFG_MAX_TC 8 + +//The maximum value of access category +#define WLAN_HAL_MAX_AC 4 + +typedef tANI_U8 tSirMacAddr[6]; +typedef tANI_U8 tHalIpv4Addr[4]; + +#define HAL_MAC_ADDR_LEN 6 +#define HAL_IPV4_ADDR_LEN 4 + +#define WALN_HAL_STA_INVALID_IDX 0xFF +#define WLAN_HAL_BSS_INVALID_IDX 0xFF + +//Default Beacon template size +#define BEACON_TEMPLATE_SIZE 0x180 + + +//Max Tx Data Rate samples +#define MAX_TX_RATE_SAMPLES 10 +//Max Beacon Rssi samples +#define MAX_BCN_RSSI_SAMPLES 10 + +//Param Change Bitmap sent to HAL +#define PARAM_BCN_INTERVAL_CHANGED (1 << 0) +#define PARAM_SHORT_PREAMBLE_CHANGED (1 << 1) +#define PARAM_SHORT_SLOT_TIME_CHANGED (1 << 2) +#define PARAM_llACOEXIST_CHANGED (1 << 3) +#define PARAM_llBCOEXIST_CHANGED (1 << 4) +#define PARAM_llGCOEXIST_CHANGED (1 << 5) +#define PARAM_HT20MHZCOEXIST_CHANGED (1<<6) +#define PARAM_NON_GF_DEVICES_PRESENT_CHANGED (1<<7) +#define PARAM_RIFS_MODE_CHANGED (1<<8) +#define PARAM_LSIG_TXOP_FULL_SUPPORT_CHANGED (1<<9) +#define PARAM_OBSS_MODE_CHANGED (1<<10) +#define PARAM_BEACON_UPDATE_MASK (PARAM_BCN_INTERVAL_CHANGED|PARAM_SHORT_PREAMBLE_CHANGED|PARAM_SHORT_SLOT_TIME_CHANGED|PARAM_llACOEXIST_CHANGED |PARAM_llBCOEXIST_CHANGED|\ + PARAM_llGCOEXIST_CHANGED|PARAM_HT20MHZCOEXIST_CHANGED|PARAM_NON_GF_DEVICES_PRESENT_CHANGED|PARAM_RIFS_MODE_CHANGED|PARAM_LSIG_TXOP_FULL_SUPPORT_CHANGED| PARAM_OBSS_MODE_CHANGED) + +/*Dump command response Buffer size*/ +#define DUMPCMD_RSP_BUFFER 500 + +/*Version string max length (including NUL) */ +#define WLAN_HAL_VERSION_LENGTH 64 + +#define WLAN_HAL_ROAM_SCAN_MAX_PROBE_SIZE 450 +#define WLAN_HAL_ROAM_SCAN_MAX_CHANNELS NUM_RF_CHANNELS +#define WLAN_HAL_ROAM_SCAN_RESERVED_BYTES 57 + +/* Message types for messages exchanged between WDI and HAL */ +typedef enum +{ + //Init/De-Init + WLAN_HAL_START_REQ = 0, + WLAN_HAL_START_RSP = 1, + WLAN_HAL_STOP_REQ = 2, + WLAN_HAL_STOP_RSP = 3, + + //Scan + WLAN_HAL_INIT_SCAN_REQ = 4, + WLAN_HAL_INIT_SCAN_RSP = 5, + WLAN_HAL_START_SCAN_REQ = 6, + WLAN_HAL_START_SCAN_RSP = 7 , + WLAN_HAL_END_SCAN_REQ = 8, + WLAN_HAL_END_SCAN_RSP = 9, + WLAN_HAL_FINISH_SCAN_REQ = 10, + WLAN_HAL_FINISH_SCAN_RSP = 11, + + // HW STA configuration/deconfiguration + WLAN_HAL_CONFIG_STA_REQ = 12, + WLAN_HAL_CONFIG_STA_RSP = 13, + WLAN_HAL_DELETE_STA_REQ = 14, + WLAN_HAL_DELETE_STA_RSP = 15, + WLAN_HAL_CONFIG_BSS_REQ = 16, + WLAN_HAL_CONFIG_BSS_RSP = 17, + WLAN_HAL_DELETE_BSS_REQ = 18, + WLAN_HAL_DELETE_BSS_RSP = 19, + + //Infra STA asscoiation + WLAN_HAL_JOIN_REQ = 20, + WLAN_HAL_JOIN_RSP = 21, + WLAN_HAL_POST_ASSOC_REQ = 22, + WLAN_HAL_POST_ASSOC_RSP = 23, + + //Security + WLAN_HAL_SET_BSSKEY_REQ = 24, + WLAN_HAL_SET_BSSKEY_RSP = 25, + WLAN_HAL_SET_STAKEY_REQ = 26, + WLAN_HAL_SET_STAKEY_RSP = 27, + WLAN_HAL_RMV_BSSKEY_REQ = 28, + WLAN_HAL_RMV_BSSKEY_RSP = 29, + WLAN_HAL_RMV_STAKEY_REQ = 30, + WLAN_HAL_RMV_STAKEY_RSP = 31, + + //Qos Related + WLAN_HAL_ADD_TS_REQ = 32, + WLAN_HAL_ADD_TS_RSP = 33, + WLAN_HAL_DEL_TS_REQ = 34, + WLAN_HAL_DEL_TS_RSP = 35, + WLAN_HAL_UPD_EDCA_PARAMS_REQ = 36, + WLAN_HAL_UPD_EDCA_PARAMS_RSP = 37, + WLAN_HAL_ADD_BA_REQ = 38, + WLAN_HAL_ADD_BA_RSP = 39, + WLAN_HAL_DEL_BA_REQ = 40, + WLAN_HAL_DEL_BA_RSP = 41, + + WLAN_HAL_CH_SWITCH_REQ = 42, + WLAN_HAL_CH_SWITCH_RSP = 43, + WLAN_HAL_SET_LINK_ST_REQ = 44, + WLAN_HAL_SET_LINK_ST_RSP = 45, + WLAN_HAL_GET_STATS_REQ = 46, + WLAN_HAL_GET_STATS_RSP = 47, + WLAN_HAL_UPDATE_CFG_REQ = 48, + WLAN_HAL_UPDATE_CFG_RSP = 49, + + WLAN_HAL_MISSED_BEACON_IND = 50, + WLAN_HAL_UNKNOWN_ADDR2_FRAME_RX_IND = 51, + WLAN_HAL_MIC_FAILURE_IND = 52, + WLAN_HAL_FATAL_ERROR_IND = 53, + WLAN_HAL_SET_KEYDONE_MSG = 54, + + //NV Interface + WLAN_HAL_DOWNLOAD_NV_REQ = 55, + WLAN_HAL_DOWNLOAD_NV_RSP = 56, + + WLAN_HAL_ADD_BA_SESSION_REQ = 57, + WLAN_HAL_ADD_BA_SESSION_RSP = 58, + WLAN_HAL_TRIGGER_BA_REQ = 59, + WLAN_HAL_TRIGGER_BA_RSP = 60, + WLAN_HAL_UPDATE_BEACON_REQ = 61, + WLAN_HAL_UPDATE_BEACON_RSP = 62, + WLAN_HAL_SEND_BEACON_REQ = 63, + WLAN_HAL_SEND_BEACON_RSP = 64, + + WLAN_HAL_SET_BCASTKEY_REQ = 65, + WLAN_HAL_SET_BCASTKEY_RSP = 66, + WLAN_HAL_DELETE_STA_CONTEXT_IND = 67, + WLAN_HAL_UPDATE_PROBE_RSP_TEMPLATE_REQ = 68, + WLAN_HAL_UPDATE_PROBE_RSP_TEMPLATE_RSP = 69, + + // PTT interface support + WLAN_HAL_PROCESS_PTT_REQ = 70, + WLAN_HAL_PROCESS_PTT_RSP = 71, + + // BTAMP related events + WLAN_HAL_SIGNAL_BTAMP_EVENT_REQ = 72, + WLAN_HAL_SIGNAL_BTAMP_EVENT_RSP = 73, + WLAN_HAL_TL_HAL_FLUSH_AC_REQ = 74, + WLAN_HAL_TL_HAL_FLUSH_AC_RSP = 75, + + WLAN_HAL_ENTER_IMPS_REQ = 76, + WLAN_HAL_EXIT_IMPS_REQ = 77, + WLAN_HAL_ENTER_BMPS_REQ = 78, + WLAN_HAL_EXIT_BMPS_REQ = 79, + WLAN_HAL_ENTER_UAPSD_REQ = 80, + WLAN_HAL_EXIT_UAPSD_REQ = 81, + WLAN_HAL_UPDATE_UAPSD_PARAM_REQ = 82, + WLAN_HAL_CONFIGURE_RXP_FILTER_REQ = 83, + WLAN_HAL_ADD_BCN_FILTER_REQ = 84, + WLAN_HAL_REM_BCN_FILTER_REQ = 85, + WLAN_HAL_ADD_WOWL_BCAST_PTRN = 86, + WLAN_HAL_DEL_WOWL_BCAST_PTRN = 87, + WLAN_HAL_ENTER_WOWL_REQ = 88, + WLAN_HAL_EXIT_WOWL_REQ = 89, + WLAN_HAL_HOST_OFFLOAD_REQ = 90, + WLAN_HAL_SET_RSSI_THRESH_REQ = 91, + WLAN_HAL_GET_RSSI_REQ = 92, + WLAN_HAL_SET_UAPSD_AC_PARAMS_REQ = 93, + WLAN_HAL_CONFIGURE_APPS_CPU_WAKEUP_STATE_REQ = 94, + + WLAN_HAL_ENTER_IMPS_RSP = 95, + WLAN_HAL_EXIT_IMPS_RSP = 96, + WLAN_HAL_ENTER_BMPS_RSP = 97, + WLAN_HAL_EXIT_BMPS_RSP = 98, + WLAN_HAL_ENTER_UAPSD_RSP = 99, + WLAN_HAL_EXIT_UAPSD_RSP = 100, + WLAN_HAL_SET_UAPSD_AC_PARAMS_RSP = 101, + WLAN_HAL_UPDATE_UAPSD_PARAM_RSP = 102, + WLAN_HAL_CONFIGURE_RXP_FILTER_RSP = 103, + WLAN_HAL_ADD_BCN_FILTER_RSP = 104, + WLAN_HAL_REM_BCN_FILTER_RSP = 105, + WLAN_HAL_SET_RSSI_THRESH_RSP = 106, + WLAN_HAL_HOST_OFFLOAD_RSP = 107, + WLAN_HAL_ADD_WOWL_BCAST_PTRN_RSP = 108, + WLAN_HAL_DEL_WOWL_BCAST_PTRN_RSP = 109, + WLAN_HAL_ENTER_WOWL_RSP = 110, + WLAN_HAL_EXIT_WOWL_RSP = 111, + WLAN_HAL_RSSI_NOTIFICATION_IND = 112, + WLAN_HAL_GET_RSSI_RSP = 113, + WLAN_HAL_CONFIGURE_APPS_CPU_WAKEUP_STATE_RSP = 114, + + //11k related events + WLAN_HAL_SET_MAX_TX_POWER_REQ = 115, + WLAN_HAL_SET_MAX_TX_POWER_RSP = 116, + + //11R related msgs + WLAN_HAL_AGGR_ADD_TS_REQ = 117, + WLAN_HAL_AGGR_ADD_TS_RSP = 118, + + //P2P WLAN_FEATURE_P2P + WLAN_HAL_SET_P2P_GONOA_REQ = 119, + WLAN_HAL_SET_P2P_GONOA_RSP = 120, + + //WLAN Dump commands + WLAN_HAL_DUMP_COMMAND_REQ = 121, + WLAN_HAL_DUMP_COMMAND_RSP = 122, + + //OEM_DATA FEATURE SUPPORT + WLAN_HAL_START_OEM_DATA_REQ = 123, + WLAN_HAL_START_OEM_DATA_RSP = 124, + + //ADD SELF STA REQ and RSP + WLAN_HAL_ADD_STA_SELF_REQ = 125, + WLAN_HAL_ADD_STA_SELF_RSP = 126, + + //DEL SELF STA SUPPORT + WLAN_HAL_DEL_STA_SELF_REQ = 127, + WLAN_HAL_DEL_STA_SELF_RSP = 128, + + // Coex Indication + WLAN_HAL_COEX_IND = 129, + + // Tx Complete Indication + WLAN_HAL_OTA_TX_COMPL_IND = 130, + + //Host Suspend/resume messages + WLAN_HAL_HOST_SUSPEND_IND = 131, + WLAN_HAL_HOST_RESUME_REQ = 132, + WLAN_HAL_HOST_RESUME_RSP = 133, + + WLAN_HAL_SET_TX_POWER_REQ = 134, + WLAN_HAL_SET_TX_POWER_RSP = 135, + WLAN_HAL_GET_TX_POWER_REQ = 136, + WLAN_HAL_GET_TX_POWER_RSP = 137, + + WLAN_HAL_P2P_NOA_ATTR_IND = 138, + + WLAN_HAL_ENABLE_RADAR_DETECT_REQ = 139, + WLAN_HAL_ENABLE_RADAR_DETECT_RSP = 140, + WLAN_HAL_GET_TPC_REPORT_REQ = 141, + WLAN_HAL_GET_TPC_REPORT_RSP = 142, + WLAN_HAL_RADAR_DETECT_IND = 143, + WLAN_HAL_RADAR_DETECT_INTR_IND = 144, + WLAN_HAL_KEEP_ALIVE_REQ = 145, + WLAN_HAL_KEEP_ALIVE_RSP = 146, + + /*PNO messages*/ + WLAN_HAL_SET_PREF_NETWORK_REQ = 147, + WLAN_HAL_SET_PREF_NETWORK_RSP = 148, + WLAN_HAL_SET_RSSI_FILTER_REQ = 149, + WLAN_HAL_SET_RSSI_FILTER_RSP = 150, + WLAN_HAL_UPDATE_SCAN_PARAM_REQ = 151, + WLAN_HAL_UPDATE_SCAN_PARAM_RSP = 152, + WLAN_HAL_PREF_NETW_FOUND_IND = 153, + + WLAN_HAL_SET_TX_PER_TRACKING_REQ = 154, + WLAN_HAL_SET_TX_PER_TRACKING_RSP = 155, + WLAN_HAL_TX_PER_HIT_IND = 156, + + WLAN_HAL_8023_MULTICAST_LIST_REQ = 157, + WLAN_HAL_8023_MULTICAST_LIST_RSP = 158, + + WLAN_HAL_SET_PACKET_FILTER_REQ = 159, + WLAN_HAL_SET_PACKET_FILTER_RSP = 160, + WLAN_HAL_PACKET_FILTER_MATCH_COUNT_REQ = 161, + WLAN_HAL_PACKET_FILTER_MATCH_COUNT_RSP = 162, + WLAN_HAL_CLEAR_PACKET_FILTER_REQ = 163, + WLAN_HAL_CLEAR_PACKET_FILTER_RSP = 164, + /*This is temp fix. Should be removed once + * Host and Riva code is in sync*/ + WLAN_HAL_INIT_SCAN_CON_REQ = 165, + + WLAN_HAL_SET_POWER_PARAMS_REQ = 166, + WLAN_HAL_SET_POWER_PARAMS_RSP = 167, + + WLAN_HAL_TSM_STATS_REQ = 168, + WLAN_HAL_TSM_STATS_RSP = 169, + + // wake reason indication (WOW) + WLAN_HAL_WAKE_REASON_IND = 170, + // GTK offload support + WLAN_HAL_GTK_OFFLOAD_REQ = 171, + WLAN_HAL_GTK_OFFLOAD_RSP = 172, + WLAN_HAL_GTK_OFFLOAD_GETINFO_REQ = 173, + WLAN_HAL_GTK_OFFLOAD_GETINFO_RSP = 174, + + WLAN_HAL_FEATURE_CAPS_EXCHANGE_REQ = 175, + WLAN_HAL_FEATURE_CAPS_EXCHANGE_RSP = 176, + WLAN_HAL_EXCLUDE_UNENCRYPTED_IND = 177, + + WLAN_HAL_SET_THERMAL_MITIGATION_REQ = 178, + WLAN_HAL_SET_THERMAL_MITIGATION_RSP = 179, + + WLAN_HAL_UPDATE_VHT_OP_MODE_REQ = 182, + WLAN_HAL_UPDATE_VHT_OP_MODE_RSP = 183, + + WLAN_HAL_P2P_NOA_START_IND = 184, + + WLAN_HAL_GET_ROAM_RSSI_REQ = 185, + WLAN_HAL_GET_ROAM_RSSI_RSP = 186, + + WLAN_HAL_CLASS_B_STATS_IND = 187, + WLAN_HAL_DEL_BA_IND = 188, + WLAN_HAL_DHCP_START_IND = 189, + WLAN_HAL_DHCP_STOP_IND = 190, + WLAN_ROAM_SCAN_OFFLOAD_REQ = 191, + WLAN_ROAM_SCAN_OFFLOAD_RSP = 192, + WLAN_HAL_WIFI_PROXIMITY_REQ = 193, + WLAN_HAL_WIFI_PROXIMITY_RSP = 194, + + WLAN_HAL_START_SPECULATIVE_PS_POLLS_REQ = 195, + WLAN_HAL_START_SPECULATIVE_PS_POLLS_RSP = 196, + WLAN_HAL_STOP_SPECULATIVE_PS_POLLS_IND = 197, + + WLAN_HAL_TDLS_LINK_ESTABLISHED_REQ = 198, + WLAN_HAL_TDLS_LINK_ESTABLISHED_RSP = 199, + WLAN_HAL_TDLS_LINK_TEARDOWN_REQ = 200, + WLAN_HAL_TDLS_LINK_TEARDOWN_RSP = 201, + WLAN_HAL_TDLS_IND = 202, + WLAN_HAL_IBSS_PEER_INACTIVITY_IND = 203, + + /* Scan Offload APIs */ + WLAN_HAL_START_SCAN_OFFLOAD_REQ = 204, + WLAN_HAL_START_SCAN_OFFLOAD_RSP = 205, + WLAN_HAL_STOP_SCAN_OFFLOAD_REQ = 206, + WLAN_HAL_STOP_SCAN_OFFLOAD_RSP = 207, + WLAN_HAL_UPDATE_CHANNEL_LIST_REQ = 208, + WLAN_HAL_UPDATE_CHANNEL_LIST_RSP = 209, + WLAN_HAL_OFFLOAD_SCAN_EVENT_IND = 210, + + /* APIs to offload TCP/UDP Heartbeat handshakes */ + WLAN_HAL_LPHB_CFG_REQ = 211, + WLAN_HAL_LPHB_CFG_RSP = 212, + WLAN_HAL_LPHB_IND = 213, + + WLAN_HAL_ADD_PERIODIC_TX_PTRN_IND = 214, + WLAN_HAL_DEL_PERIODIC_TX_PTRN_IND = 215, + WLAN_HAL_PERIODIC_TX_PTRN_FW_IND = 216, + + // Events to set Per-Band Tx Power Limit + WLAN_HAL_SET_MAX_TX_POWER_PER_BAND_REQ = 217, + WLAN_HAL_SET_MAX_TX_POWER_PER_BAND_RSP = 218, + + /* Reliable Multicast using Leader Based Protocol */ + WLAN_HAL_LBP_LEADER_REQ = 219, + WLAN_HAL_LBP_LEADER_RSP = 220, + WLAN_HAL_LBP_UPDATE_IND = 221, + + /* Batchscan */ + WLAN_HAL_BATCHSCAN_SET_REQ = 222, + WLAN_HAL_BATCHSCAN_SET_RSP = 223, + WLAN_HAL_BATCHSCAN_TRIGGER_RESULT_IND = 224, + WLAN_HAL_BATCHSCAN_RESULT_IND = 225, + WLAN_HAL_BATCHSCAN_STOP_IND = 226, + + WLAN_HAL_GET_IBSS_PEER_INFO_REQ = 227, + WLAN_HAL_GET_IBSS_PEER_INFO_RSP = 228, + + WLAN_HAL_RATE_UPDATE_IND = 229, + + /* Tx Fail for weak link notification */ + WLAN_HAL_TX_FAIL_MONITOR_IND = 230, + WLAN_HAL_TX_FAIL_IND = 231, + + /* Multi-hop IP routing offload */ + WLAN_HAL_IP_FORWARD_TABLE_UPDATE_IND = 232, + + WLAN_HAL_MSG_MAX = WLAN_HAL_MSG_TYPE_MAX_ENUM_SIZE +}tHalHostMsgType; + +/* Enumeration for Version */ +typedef enum +{ + WLAN_HAL_MSG_VERSION0 = 0, + WLAN_HAL_MSG_VERSION1 = 1, + WLAN_HAL_MSG_WCNSS_CTRL_VERSION = 0x7FFF, /*define as 2 bytes data*/ + WLAN_HAL_MSG_VERSION_MAX_FIELD = WLAN_HAL_MSG_WCNSS_CTRL_VERSION +}tHalHostMsgVersion; + +/* Enumeration for Boolean - False/True, On/Off */ +typedef enum tagAniBoolean +{ + eANI_BOOLEAN_FALSE = 0, + eANI_BOOLEAN_TRUE, + eANI_BOOLEAN_OFF = 0, + eANI_BOOLEAN_ON = 1, + eANI_BOOLEAN_MAX_FIELD = 0x7FFFFFFF /* define as 4 bytes data */ +} eAniBoolean; + +typedef enum +{ + eDRIVER_TYPE_PRODUCTION = 0, + eDRIVER_TYPE_MFG = 1, + eDRIVER_TYPE_DVT = 2, + eDRIVER_TYPE_MAX = WLAN_HAL_MAX_ENUM_SIZE +} tDriverType; + +typedef enum +{ + HAL_STOP_TYPE_SYS_RESET, + HAL_STOP_TYPE_SYS_DEEP_SLEEP, + HAL_STOP_TYPE_RF_KILL, + HAL_STOP_TYPE_MAX = WLAN_HAL_MAX_ENUM_SIZE +}tHalStopType; + +typedef enum +{ + eHAL_SYS_MODE_NORMAL, + eHAL_SYS_MODE_LEARN, + eHAL_SYS_MODE_SCAN, + eHAL_SYS_MODE_PROMISC, + eHAL_SYS_MODE_SUSPEND_LINK, + eHAL_SYS_MODE_ROAM_SCAN, + eHAL_SYS_MODE_ROAM_SUSPEND_LINK, + eHAL_SYS_MODE_OEM_DATA, + eHAL_SYS_MODE_MAX = WLAN_HAL_MAX_ENUM_SIZE +} eHalSysMode; + +typedef enum +{ + PHY_SINGLE_CHANNEL_CENTERED = 0, // 20MHz IF bandwidth centered on IF carrier + PHY_DOUBLE_CHANNEL_LOW_PRIMARY = 1, // 40MHz IF bandwidth with lower 20MHz supporting the primary channel + PHY_DOUBLE_CHANNEL_CENTERED = 2, // 40MHz IF bandwidth centered on IF carrier + PHY_DOUBLE_CHANNEL_HIGH_PRIMARY = 3, // 40MHz IF bandwidth with higher 20MHz supporting the primary channel +#ifdef WLAN_FEATURE_11AC + PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_CENTERED = 4, //20/40MHZ offset LOW 40/80MHZ offset CENTERED + PHY_QUADRUPLE_CHANNEL_20MHZ_CENTERED_40MHZ_CENTERED = 5, //20/40MHZ offset CENTERED 40/80MHZ offset CENTERED + PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_CENTERED = 6, //20/40MHZ offset HIGH 40/80MHZ offset CENTERED + PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_LOW = 7,//20/40MHZ offset LOW 40/80MHZ offset LOW + PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_LOW = 8, //20/40MHZ offset HIGH 40/80MHZ offset LOW + PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_HIGH = 9, //20/40MHZ offset LOW 40/80MHZ offset HIGH + PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_HIGH = 10,//20/40MHZ offset-HIGH 40/80MHZ offset HIGH +#endif + PHY_CHANNEL_BONDING_STATE_MAX = WLAN_HAL_MAX_ENUM_SIZE +}ePhyChanBondState; + +// Spatial Multiplexing(SM) Power Save mode +typedef enum eSirMacHTMIMOPowerSaveState +{ + eSIR_HT_MIMO_PS_STATIC = 0, // Static SM Power Save mode + eSIR_HT_MIMO_PS_DYNAMIC = 1, // Dynamic SM Power Save mode + eSIR_HT_MIMO_PS_NA = 2, // reserved + eSIR_HT_MIMO_PS_NO_LIMIT = 3, // SM Power Save disabled + eSIR_HT_MIMO_PS_MAX = WLAN_HAL_MAX_ENUM_SIZE +} tSirMacHTMIMOPowerSaveState; + +/* each station added has a rate mode which specifies the sta attributes */ +typedef enum eStaRateMode { + eSTA_TAURUS = 0, + eSTA_TITAN, + eSTA_POLARIS, + eSTA_11b, + eSTA_11bg, + eSTA_11a, + eSTA_11n, +#ifdef WLAN_FEATURE_11AC + eSTA_11ac, +#endif + eSTA_INVALID_RATE_MODE = WLAN_HAL_MAX_ENUM_SIZE +} tStaRateMode, *tpStaRateMode; + +#define SIR_NUM_11B_RATES 4 //1,2,5.5,11 +#define SIR_NUM_11A_RATES 8 //6,9,12,18,24,36,48,54 +#define SIR_NUM_POLARIS_RATES 3 //72,96,108 + +#define SIR_MAC_MAX_SUPPORTED_MCS_SET 16 + + +typedef enum eSirBssType +{ + eSIR_INFRASTRUCTURE_MODE, + eSIR_INFRA_AP_MODE, //Added for softAP support + eSIR_IBSS_MODE, + eSIR_BTAMP_STA_MODE, //Added for BT-AMP support + eSIR_BTAMP_AP_MODE, //Added for BT-AMP support + eSIR_AUTO_MODE, + eSIR_DONOT_USE_BSS_TYPE = WLAN_HAL_MAX_ENUM_SIZE +} tSirBssType; + +typedef enum eSirNwType +{ + eSIR_11A_NW_TYPE, + eSIR_11B_NW_TYPE, + eSIR_11G_NW_TYPE, + eSIR_11N_NW_TYPE, + eSIR_DONOT_USE_NW_TYPE = WLAN_HAL_MAX_ENUM_SIZE +} tSirNwType; + +typedef tANI_U16 tSirMacBeaconInterval; + +#define SIR_MAC_RATESET_EID_MAX 12 + +typedef enum eSirMacHTOperatingMode +{ + eSIR_HT_OP_MODE_PURE, // No Protection + eSIR_HT_OP_MODE_OVERLAP_LEGACY, // Overlap Legacy device present, protection is optional + eSIR_HT_OP_MODE_NO_LEGACY_20MHZ_HT, // No legacy device, but 20 MHz HT present + eSIR_HT_OP_MODE_MIXED, // Protection is required + eSIR_HT_OP_MODE_MAX = WLAN_HAL_MAX_ENUM_SIZE +} tSirMacHTOperatingMode; + +/// Encryption type enum used with peer +typedef enum eAniEdType +{ + eSIR_ED_NONE, + eSIR_ED_WEP40, + eSIR_ED_WEP104, + eSIR_ED_TKIP, + eSIR_ED_CCMP, + eSIR_ED_WPI, + eSIR_ED_AES_128_CMAC, + eSIR_ED_NOT_IMPLEMENTED = WLAN_HAL_MAX_ENUM_SIZE +} tAniEdType; + +#define WLAN_MAX_KEY_RSC_LEN 16 +#define WLAN_WAPI_KEY_RSC_LEN 16 + +/// MAX key length when ULA is used +#define SIR_MAC_MAX_KEY_LENGTH 32 +#define SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS 4 + +/// Enum to specify whether key is used +/// for TX only, RX only or both +typedef enum eAniKeyDirection +{ + eSIR_TX_ONLY, + eSIR_RX_ONLY, + eSIR_TX_RX, + eSIR_TX_DEFAULT, + eSIR_DONOT_USE_KEY_DIRECTION = WLAN_HAL_MAX_ENUM_SIZE +} tAniKeyDirection; + +typedef enum eAniWepType +{ + eSIR_WEP_STATIC, + eSIR_WEP_DYNAMIC, + eSIR_WEP_MAX = WLAN_HAL_MAX_ENUM_SIZE +} tAniWepType; + +typedef enum eSriLinkState { + + eSIR_LINK_IDLE_STATE = 0, + eSIR_LINK_PREASSOC_STATE = 1, + eSIR_LINK_POSTASSOC_STATE = 2, + eSIR_LINK_AP_STATE = 3, + eSIR_LINK_IBSS_STATE = 4, + + /* BT-AMP Case */ + eSIR_LINK_BTAMP_PREASSOC_STATE = 5, + eSIR_LINK_BTAMP_POSTASSOC_STATE = 6, + eSIR_LINK_BTAMP_AP_STATE = 7, + eSIR_LINK_BTAMP_STA_STATE = 8, + + /* Reserved for HAL Internal Use */ + eSIR_LINK_LEARN_STATE = 9, + eSIR_LINK_SCAN_STATE = 10, + eSIR_LINK_FINISH_SCAN_STATE = 11, + eSIR_LINK_INIT_CAL_STATE = 12, + eSIR_LINK_FINISH_CAL_STATE = 13, +#ifdef WLAN_FEATURE_P2P + eSIR_LINK_LISTEN_STATE = 14, + eSIR_LINK_SEND_ACTION_STATE = 15, +#endif + eSIR_LINK_MAX = WLAN_HAL_MAX_ENUM_SIZE +} tSirLinkState; + +typedef enum +{ + HAL_SUMMARY_STATS_INFO = 0x00000001, + HAL_GLOBAL_CLASS_A_STATS_INFO = 0x00000002, + HAL_GLOBAL_CLASS_B_STATS_INFO = 0x00000004, + HAL_GLOBAL_CLASS_C_STATS_INFO = 0x00000008, + HAL_GLOBAL_CLASS_D_STATS_INFO = 0x00000010, + HAL_PER_STA_STATS_INFO = 0x00000020 +}eHalStatsMask; + +/* BT-AMP events type */ +typedef enum +{ + BTAMP_EVENT_CONNECTION_START, + BTAMP_EVENT_CONNECTION_STOP, + BTAMP_EVENT_CONNECTION_TERMINATED, + BTAMP_EVENT_TYPE_MAX = WLAN_HAL_MAX_ENUM_SIZE, //This and beyond are invalid values +} tBtAmpEventType; + +//*************************************************************** + + +/*******************PE Statistics*************************/ +typedef enum +{ + PE_SUMMARY_STATS_INFO = 0x00000001, + PE_GLOBAL_CLASS_A_STATS_INFO = 0x00000002, + PE_GLOBAL_CLASS_B_STATS_INFO = 0x00000004, + PE_GLOBAL_CLASS_C_STATS_INFO = 0x00000008, + PE_GLOBAL_CLASS_D_STATS_INFO = 0x00000010, + PE_PER_STA_STATS_INFO = 0x00000020, + PE_STATS_TYPE_MAX = WLAN_HAL_MAX_ENUM_SIZE //This and beyond are invalid values +}ePEStatsMask; + +/*--------------------------------------------------------------------------- + Message definitons - All the messages below need to be packed + ---------------------------------------------------------------------------*/ + +#if defined(__ANI_COMPILER_PRAGMA_PACK_STACK) +#pragma pack(push, 1) +#elif defined(__ANI_COMPILER_PRAGMA_PACK) +#pragma pack(1) +#else +#endif + +/// Definition for HAL API Version. +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 revision; + tANI_U8 version; + tANI_U8 minor; + tANI_U8 major; +} tWcnssWlanVersion, *tpWcnssWlanVersion; + +/// Definition for Encryption Keys +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 keyId; + tANI_U8 unicast; // 0 for multicast + tAniKeyDirection keyDirection; + tANI_U8 keyRsc[WLAN_MAX_KEY_RSC_LEN]; // Usage is unknown + tANI_U8 paeRole; // =1 for authenticator,=0 for supplicant + tANI_U16 keyLength; + tANI_U8 key[SIR_MAC_MAX_KEY_LENGTH]; +} tSirKeys, *tpSirKeys; + + +//SetStaKeyParams Moving here since it is shared by configbss/setstakey msgs +typedef PACKED_PRE struct PACKED_POST +{ + /*STA Index*/ + tANI_U16 staIdx; + + /*Encryption Type used with peer*/ + tAniEdType encType; + + /*STATIC/DYNAMIC - valid only for WEP*/ + tAniWepType wepType; + + /*Default WEP key, valid only for static WEP, must between 0 and 3.*/ + tANI_U8 defWEPIdx; + + /* valid only for non-static WEP encyrptions */ + tSirKeys key[SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS]; + + /*Control for Replay Count, 1= Single TID based replay count on Tx + 0 = Per TID based replay count on TX */ + tANI_U8 singleTidRc; + +} tSetStaKeyParams, *tpSetStaKeyParams; + + + +/* 4-byte control message header used by HAL*/ +typedef PACKED_PRE struct PACKED_POST +{ + tHalHostMsgType msgType:16; + tHalHostMsgVersion msgVersion:16; + tANI_U32 msgLen; +} tHalMsgHeader, *tpHalMsgHeader; + +/* Config format required by HAL for each CFG item*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* Cfg Id. The Id required by HAL is exported by HAL + * in shared header file between UMAC and HAL.*/ + tANI_U16 uCfgId; + + /* Length of the Cfg. This parameter is used to go to next cfg + * in the TLV format.*/ + tANI_U16 uCfgLen; + + /* Padding bytes for unaligned address's */ + tANI_U16 uCfgPadBytes; + + /* Reserve bytes for making cfgVal to align address */ + tANI_U16 uCfgReserve; + + /* Following the uCfgLen field there should be a 'uCfgLen' bytes + * containing the uCfgValue ; tANI_U8 uCfgValue[uCfgLen] */ +} tHalCfg, *tpHalCfg; + +/*--------------------------------------------------------------------------- + WLAN_HAL_START_REQ +---------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST sHalMacStartParameters +{ + /* Drive Type - Production or FTM etc */ + tDriverType driverType; + + /*Length of the config buffer*/ + tANI_U32 uConfigBufferLen; + + /* Following this there is a TLV formatted buffer of length + * "uConfigBufferLen" bytes containing all config values. + * The TLV is expected to be formatted like this: + * 0 15 31 31+CFG_LEN-1 length-1 + * | CFG_ID | CFG_LEN | CFG_BODY | CFG_ID |......| + */ +} tHalMacStartParameters, *tpHalMacStartParameters; + +typedef PACKED_PRE struct PACKED_POST +{ + /* Note: The length specified in tHalMacStartReqMsg messages should be + * header.msgLen = sizeof(tHalMacStartReqMsg) + uConfigBufferLen */ + tHalMsgHeader header; + tHalMacStartParameters startReqParams; +} tHalMacStartReqMsg, *tpHalMacStartReqMsg; + +/*--------------------------------------------------------------------------- + WLAN_HAL_START_RSP +---------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST sHalMacStartRspParameters +{ + /*success or failure */ + tANI_U16 status; + + /*Max number of STA supported by the device*/ + tANI_U8 ucMaxStations; + + /*Max number of BSS supported by the device*/ + tANI_U8 ucMaxBssids; + + /*API Version */ + tWcnssWlanVersion wcnssWlanVersion; + + /*CRM build information */ + tANI_U8 wcnssCrmVersionString[WLAN_HAL_VERSION_LENGTH]; + + /*hardware/chipset/misc version information */ + tANI_U8 wcnssWlanVersionString[WLAN_HAL_VERSION_LENGTH]; + +} tHalMacStartRspParams, *tpHalMacStartRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalMacStartRspParams startRspParams; +} tHalMacStartRspMsg, *tpHalMacStartRspMsg; + +/*--------------------------------------------------------------------------- + WLAN_HAL_STOP_REQ +---------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /*The reason for which the device is being stopped*/ + tHalStopType reason; + +}tHalMacStopReqParams, *tpHalMacStopReqParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalMacStopReqParams stopReqParams; +} tHalMacStopReqMsg, *tpHalMacStopReqMsg; + +/*--------------------------------------------------------------------------- + WLAN_HAL_STOP_RSP +---------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /*success or failure */ + tANI_U32 status; + +}tHalMacStopRspParams, *tpHalMacStopRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalMacStopRspParams stopRspParams; +} tHalMacStopRspMsg, *tpHalMacStopRspMsg; + +/*--------------------------------------------------------------------------- + WLAN_HAL_UPDATE_CFG_REQ +---------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /* Length of the config buffer. Allows UMAC to update multiple CFGs */ + tANI_U32 uConfigBufferLen; + + /* Following this there is a TLV formatted buffer of length + * "uConfigBufferLen" bytes containing all config values. + * The TLV is expected to be formatted like this: + * 0 15 31 31+CFG_LEN-1 length-1 + * | CFG_ID | CFG_LEN | CFG_BODY | CFG_ID |......| + */ +} tHalUpdateCfgReqParams, *tpHalUpdateCfgReqParams; + +typedef PACKED_PRE struct PACKED_POST +{ + /* Note: The length specified in tHalUpdateCfgReqMsg messages should be + * header.msgLen = sizeof(tHalUpdateCfgReqMsg) + uConfigBufferLen */ + tHalMsgHeader header; + tHalUpdateCfgReqParams updateCfgReqParams; +} tHalUpdateCfgReqMsg, *tpHalUpdateCfgReqMsg; + +/*--------------------------------------------------------------------------- + WLAN_HAL_UPDATE_CFG_RSP +---------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; + +}tHalUpdateCfgRspParams, *tpHalUpdateCfgRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalUpdateCfgRspParams updateCfgRspParams; +} tHalUpdateCfgRspMsg, *tpHalUpdateCfgRspMsg; + +/*--------------------------------------------------------------------------- + WLAN_HAL_INIT_SCAN_REQ +---------------------------------------------------------------------------*/ + +/// Frame control field format (2 bytes) +typedef __ani_attr_pre_packed struct sSirMacFrameCtl +{ + +#ifndef ANI_LITTLE_BIT_ENDIAN + + tANI_U8 subType :4; + tANI_U8 type :2; + tANI_U8 protVer :2; + + tANI_U8 order :1; + tANI_U8 wep :1; + tANI_U8 moreData :1; + tANI_U8 powerMgmt :1; + tANI_U8 retry :1; + tANI_U8 moreFrag :1; + tANI_U8 fromDS :1; + tANI_U8 toDS :1; + +#else + + tANI_U8 protVer :2; + tANI_U8 type :2; + tANI_U8 subType :4; + + tANI_U8 toDS :1; + tANI_U8 fromDS :1; + tANI_U8 moreFrag :1; + tANI_U8 retry :1; + tANI_U8 powerMgmt :1; + tANI_U8 moreData :1; + tANI_U8 wep :1; + tANI_U8 order :1; + +#endif + +} __ani_attr_packed tSirMacFrameCtl, *tpSirMacFrameCtl; + +/// Sequence control field +typedef __ani_attr_pre_packed struct sSirMacSeqCtl +{ + tANI_U8 fragNum : 4; + tANI_U8 seqNumLo : 4; + tANI_U8 seqNumHi : 8; +} __ani_attr_packed tSirMacSeqCtl, *tpSirMacSeqCtl; + +/// Management header format +typedef __ani_attr_pre_packed struct sSirMacMgmtHdr +{ + tSirMacFrameCtl fc; + tANI_U8 durationLo; + tANI_U8 durationHi; + tANI_U8 da[6]; + tANI_U8 sa[6]; + tANI_U8 bssId[6]; + tSirMacSeqCtl seqControl; +} __ani_attr_packed tSirMacMgmtHdr, *tpSirMacMgmtHdr; + +/// Scan Entry to hold active BSS idx's +typedef __ani_attr_pre_packed struct sSirScanEntry +{ + tANI_U8 bssIdx[HAL_NUM_BSSID]; + tANI_U8 activeBSScnt; +}__ani_attr_packed tSirScanEntry, *ptSirScanEntry; + +typedef PACKED_PRE struct PACKED_POST { + + /*LEARN - AP Role + SCAN - STA Role*/ + eHalSysMode scanMode; + + /*BSSID of the BSS*/ + tSirMacAddr bssid; + + /*Whether BSS needs to be notified*/ + tANI_U8 notifyBss; + + /*Kind of frame to be used for notifying the BSS (Data Null, QoS Null, or + CTS to Self). Must always be a valid frame type.*/ + tANI_U8 frameType; + + /*UMAC has the option of passing the MAC frame to be used for notifying + the BSS. If non-zero, HAL will use the MAC frame buffer pointed to by + macMgmtHdr. If zero, HAL will generate the appropriate MAC frame based on + frameType.*/ + tANI_U8 frameLength; + + /* Following the framelength there is a MAC frame buffer if frameLength + is non-zero. */ + tSirMacMgmtHdr macMgmtHdr; + + /*Entry to hold number of active BSS idx's*/ + tSirScanEntry scanEntry; + +} tInitScanParams, * tpInitScanParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tInitScanParams initScanParams; +} tHalInitScanReqMsg, *tpHalInitScanReqMsg; + +typedef PACKED_PRE struct PACKED_POST { + + /*LEARN - AP Role + SCAN - STA Role*/ + eHalSysMode scanMode; + + /*BSSID of the BSS*/ + tSirMacAddr bssid; + + /*Whether BSS needs to be notified*/ + tANI_U8 notifyBss; + + /*Kind of frame to be used for notifying the BSS (Data Null, QoS Null, or + CTS to Self). Must always be a valid frame type.*/ + tANI_U8 frameType; + + /*UMAC has the option of passing the MAC frame to be used for notifying + the BSS. If non-zero, HAL will use the MAC frame buffer pointed to by + macMgmtHdr. If zero, HAL will generate the appropriate MAC frame based on + frameType.*/ + tANI_U8 frameLength; + + /* Following the framelength there is a MAC frame buffer if frameLength + is non-zero. */ + tSirMacMgmtHdr macMgmtHdr; + + /*Entry to hold number of active BSS idx's*/ + tSirScanEntry scanEntry; + + /* Single NoA usage in Scanning */ + tANI_U8 useNoA; + + /* Indicates the scan duration (in ms) */ + tANI_U16 scanDuration; + +} tInitScanConParams, * tpInitScanConParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tInitScanConParams initScanParams; +} tHalInitScanConReqMsg, *tpHalInitScanConReqMsg; + + +/*--------------------------------------------------------------------------- + WLAN_HAL_INIT_SCAN_RSP +---------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /*success or failure */ + tANI_U32 status; + +}tHalInitScanRspParams, *tpHalInitScanRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalInitScanRspParams initScanRspParams; +} tHalInitScanRspMsg, *tpHalInitScanRspMsg; + +/*--------------------------------------------------------------------------- + WLAN_HAL_START_SCAN_REQ +---------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /*Indicates the channel to scan*/ + tANI_U8 scanChannel; + + } tStartScanParams, * tpStartScanParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tStartScanParams startScanParams; +} tHalStartScanReqMsg, *tpHalStartScanReqMsg; + +/*--------------------------------------------------------------------------- + WLAN_HAL_START_SCAN_RSP +---------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /*success or failure */ + tANI_U32 status; + + tANI_U32 startTSF[2]; + tPowerdBm txMgmtPower; + +}tHalStartScanRspParams, *tpHalStartScanRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalStartScanRspParams startScanRspParams; +} tHalStartScanRspMsg, *tpHalStartScanRspMsg; + +/*--------------------------------------------------------------------------- + WLAN_HAL_END_SCAN_REQ +---------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /*Indicates the channel to stop scanning. Not used really. But retained + for symmetry with "start Scan" message. It can also help in error + check if needed.*/ + tANI_U8 scanChannel; + +} tEndScanParams, *tpEndScanParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tEndScanParams endScanParams; +} tHalEndScanReqMsg, *tpHalEndScanReqMsg; + +/*--------------------------------------------------------------------------- + WLAN_HAL_END_SCAN_RSP +---------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /*success or failure */ + tANI_U32 status; + +}tHalEndScanRspParams, *tpHalEndScanRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalEndScanRspParams endScanRspParams; +} tHalEndScanRspMsg, *tpHalEndScanRspMsg; + +/*--------------------------------------------------------------------------- + WLAN_HAL_FINISH_SCAN_REQ +---------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /* Identifies the operational state of the AP/STA + * LEARN - AP Role SCAN - STA Role */ + eHalSysMode scanMode; + + /*Operating channel to tune to.*/ + tANI_U8 currentOperChannel; + + /*Channel Bonding state If 20/40 MHz is operational, this will indicate the + 40 MHz extension channel in combination with the control channel*/ + ePhyChanBondState cbState; + + /*BSSID of the BSS*/ + tSirMacAddr bssid; + + /*Whether BSS needs to be notified*/ + tANI_U8 notifyBss; + + /*Kind of frame to be used for notifying the BSS (Data Null, QoS Null, or + CTS to Self). Must always be a valid frame type.*/ + tANI_U8 frameType; + + /*UMAC has the option of passing the MAC frame to be used for notifying + the BSS. If non-zero, HAL will use the MAC frame buffer pointed to by + macMgmtHdr. If zero, HAL will generate the appropriate MAC frame based on + frameType.*/ + tANI_U8 frameLength; + + /*Following the framelength there is a MAC frame buffer if frameLength + is non-zero.*/ + tSirMacMgmtHdr macMgmtHdr; + + /*Entry to hold number of active BSS idx's*/ + tSirScanEntry scanEntry; + +} tFinishScanParams, *tpFinishScanParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tFinishScanParams finishScanParams; +} tHalFinishScanReqMsg, *tpHalFinishScanReqMsg; + +/*--------------------------------------------------------------------------- + WLAN_HAL_FINISH_SCAN_RSP +---------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /*success or failure */ + tANI_U32 status; + +}tHalFinishScanRspParams, *tpHalFinishScanRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalFinishScanRspParams finishScanRspParams; +} tHalFinishScanRspMsg, *tpHalFinishScanRspMsg; + +/*--------------------------------------------------------------------------- + WLAN_HAL_CONFIG_STA_REQ +---------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST { + /* + * For Self STA Entry: this represents Self Mode. + * For Peer Stations, this represents the mode of the peer. + * On Station: + * --this mode is updated when PE adds the Self Entry. + * -- OR when PE sends 'ADD_BSS' message and station context in BSS is used to indicate the mode of the AP. + * ON AP: + * -- this mode is updated when PE sends 'ADD_BSS' and Sta entry for that BSS is used + * to indicate the self mode of the AP. + * -- OR when a station is associated, PE sends 'ADD_STA' message with this mode updated. + */ + + tStaRateMode opRateMode; + // 11b, 11a and aniLegacyRates are IE rates which gives rate in unit of 500Kbps + tANI_U16 llbRates[SIR_NUM_11B_RATES]; + tANI_U16 llaRates[SIR_NUM_11A_RATES]; + tANI_U16 aniLegacyRates[SIR_NUM_POLARIS_RATES]; + tANI_U16 reserved; + + //Taurus only supports 26 Titan Rates(no ESF/concat Rates will be supported) + //First 26 bits are reserved for those Titan rates and + //the last 4 bits(bit28-31) for Taurus, 2(bit26-27) bits are reserved. + tANI_U32 aniEnhancedRateBitmap; //Titan and Taurus Rates + + /* + * 0-76 bits used, remaining reserved + * bits 0-15 and 32 should be set. + */ + tANI_U8 supportedMCSSet[SIR_MAC_MAX_SUPPORTED_MCS_SET]; + + /* + * RX Highest Supported Data Rate defines the highest data + * rate that the STA is able to receive, in unites of 1Mbps. + * This value is derived from "Supported MCS Set field" inside + * the HT capability element. + */ + tANI_U16 rxHighestDataRate; + +} tSirSupportedRates, *tpSirSupportedRates; + +typedef PACKED_PRE struct PACKED_POST +{ + /*BSSID of STA*/ + tSirMacAddr bssId; + + /*ASSOC ID, as assigned by UMAC*/ + tANI_U16 assocId; + + /* STA entry Type: 0 - Self, 1 - Other/Peer, 2 - BSSID, 3 - BCAST */ + tANI_U8 staType; + + /*Short Preamble Supported.*/ + tANI_U8 shortPreambleSupported; + + /*MAC Address of STA*/ + tSirMacAddr staMac; + + /*Listen interval of the STA*/ + tANI_U16 listenInterval; + + /*Support for 11e/WMM*/ + tANI_U8 wmmEnabled; + + /*11n HT capable STA*/ + tANI_U8 htCapable; + + /*TX Width Set: 0 - 20 MHz only, 1 - 20/40 MHz*/ + tANI_U8 txChannelWidthSet; + + /*RIFS mode 0 - NA, 1 - Allowed */ + tANI_U8 rifsMode; + + /*L-SIG TXOP Protection mechanism + 0 - No Support, 1 - Supported + SG - there is global field */ + tANI_U8 lsigTxopProtection; + + /*Max Ampdu Size supported by STA. TPE programming. + 0 : 8k , 1 : 16k, 2 : 32k, 3 : 64k */ + tANI_U8 maxAmpduSize; + + /*Max Ampdu density. Used by RA. 3 : 0~7 : 2^(11nAMPDUdensity -4)*/ + tANI_U8 maxAmpduDensity; + + /*Max AMSDU size 1 : 3839 bytes, 0 : 7935 bytes*/ + tANI_U8 maxAmsduSize; + + /*Short GI support for 40Mhz packets*/ + tANI_U8 fShortGI40Mhz; + + /*Short GI support for 20Mhz packets*/ + tANI_U8 fShortGI20Mhz; + + /*Robust Management Frame (RMF) enabled/disabled*/ + tANI_U8 rmfEnabled; + + /* The unicast encryption type in the association */ + tANI_U32 encryptType; + + /*HAL should update the existing STA entry, if this flag is set. UMAC + will set this flag in case of RE-ASSOC, where we want to reuse the old + STA ID. 0 = Add, 1 = Update*/ + tANI_U8 action; + + /*U-APSD Flags: 1b per AC. Encoded as follows: + b7 b6 b5 b4 b3 b2 b1 b0 = + X X X X BE BK VI VO */ + tANI_U8 uAPSD; + + /*Max SP Length*/ + tANI_U8 maxSPLen; + + /*11n Green Field preamble support + 0 - Not supported, 1 - Supported */ + tANI_U8 greenFieldCapable; + + /*MIMO Power Save mode*/ + tSirMacHTMIMOPowerSaveState mimoPS; + + /*Delayed BA Support*/ + tANI_U8 delayedBASupport; + + /*Max AMPDU duration in 32us*/ + tANI_U8 us32MaxAmpduDuration; + + /*HT STA should set it to 1 if it is enabled in BSS. HT STA should set + it to 0 if AP does not support it. This indication is sent to HAL and + HAL uses this flag to pickup up appropriate 40Mhz rates.*/ + tANI_U8 fDsssCckMode40Mhz; + + /* Valid STA Idx when action=Update. Set to 0xFF when invalid! + Retained for backward compalibity with existing HAL code*/ + tANI_U8 staIdx; + + /* BSSID of BSS to which station is associated. Set to 0xFF when invalid. + Retained for backward compalibity with existing HAL code*/ + tANI_U8 bssIdx; + + tANI_U8 p2pCapableSta; + + /*Reserved to align next field on a dword boundary*/ + tANI_U8 reserved; + + /*These rates are the intersection of peer and self capabilities.*/ + tSirSupportedRates supportedRates; + +} tConfigStaParams, *tpConfigStaParams; + +/*------------------------------------------------------------------------ + * WLAN_HAL_CONFIG_STA_REQ + * ----------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST { + /* + * For Self STA Entry: this represents Self Mode. + * For Peer Stations, this represents the mode of the peer. + * On Station: + * --this mode is updated when PE adds the Self Entry. + * -- OR when PE sends 'ADD_BSS' message and station context in BSS is used to indicate the mode of the AP. + * ON AP: + * -- this mode is updated when PE sends 'ADD_BSS' and Sta entry for that BSS is used + * to indicate the self mode of the AP. + * -- OR when a station is associated, PE sends 'ADD_STA' message with this mode updated. + */ + + tStaRateMode opRateMode; + // 11b, 11a and aniLegacyRates are IE rates which gives rate in unit of 500Kbps + tANI_U16 llbRates[SIR_NUM_11B_RATES]; + tANI_U16 llaRates[SIR_NUM_11A_RATES]; + tANI_U16 aniLegacyRates[SIR_NUM_POLARIS_RATES]; + tANI_U16 reserved; + + //Taurus only supports 26 Titan Rates(no ESF/concat Rates will be supported) + //First 26 bits are reserved for those Titan rates and + //the last 4 bits(bit28-31) for Taurus, 2(bit26-27) bits are reserved. + tANI_U32 aniEnhancedRateBitmap; //Titan and Taurus Rates + + /* + * 0-76 bits used, remaining reserved + * bits 0-15 and 32 should be set. + */ + tANI_U8 supportedMCSSet[SIR_MAC_MAX_SUPPORTED_MCS_SET]; + + /* + * RX Highest Supported Data Rate defines the highest data + * rate that the STA is able to receive, in unites of 1Mbps. + * This value is derived from "Supported MCS Set field" inside + * the HT capability element. + */ + tANI_U16 rxHighestDataRate; + + /* Indicates the Maximum MCS that can be received for each number + * of spacial streams */ + tANI_U16 vhtRxMCSMap; + + /*Indicate the highest VHT data rate that the STA is able to receive*/ + tANI_U16 vhtRxHighestDataRate; + + /* Indicates the Maximum MCS that can be transmitted for each number + * of spacial streams */ + tANI_U16 vhtTxMCSMap; + + /*Indicate the highest VHT data rate that the STA is able to transmit*/ + tANI_U16 vhtTxHighestDataRate; + +} tSirSupportedRates_V1, *tpSirSupportedRates_V1; + +typedef PACKED_PRE struct PACKED_POST +{ + /*BSSID of STA*/ + tSirMacAddr bssId; + + /*ASSOC ID, as assigned by UMAC*/ + tANI_U16 assocId; + + /* STA entry Type: 0 - Self, 1 - Other/Peer, 2 - BSSID, 3 - BCAST */ + tANI_U8 staType; + + /*Short Preamble Supported.*/ + tANI_U8 shortPreambleSupported; + + /*MAC Address of STA*/ + tSirMacAddr staMac; + + /*Listen interval of the STA*/ + tANI_U16 listenInterval; + + /*Support for 11e/WMM*/ + tANI_U8 wmmEnabled; + + /*11n HT capable STA*/ + tANI_U8 htCapable; + + /*TX Width Set: 0 - 20 MHz only, 1 - 20/40 MHz*/ + tANI_U8 txChannelWidthSet; + + /*RIFS mode 0 - NA, 1 - Allowed */ + tANI_U8 rifsMode; + + /*L-SIG TXOP Protection mechanism + 0 - No Support, 1 - Supported + SG - there is global field */ + tANI_U8 lsigTxopProtection; + + /*Max Ampdu Size supported by STA. TPE programming. + 0 : 8k , 1 : 16k, 2 : 32k, 3 : 64k */ + tANI_U8 maxAmpduSize; + + /*Max Ampdu density. Used by RA. 3 : 0~7 : 2^(11nAMPDUdensity -4)*/ + tANI_U8 maxAmpduDensity; + + /*Max AMSDU size 1 : 3839 bytes, 0 : 7935 bytes*/ + tANI_U8 maxAmsduSize; + + /*Short GI support for 40Mhz packets*/ + tANI_U8 fShortGI40Mhz; + + /*Short GI support for 20Mhz packets*/ + tANI_U8 fShortGI20Mhz; + + /*Robust Management Frame (RMF) enabled/disabled*/ + tANI_U8 rmfEnabled; + + /* The unicast encryption type in the association */ + tANI_U32 encryptType; + + /*HAL should update the existing STA entry, if this flag is set. UMAC + will set this flag in case of RE-ASSOC, where we want to reuse the old + STA ID. 0 = Add, 1 = Update*/ + tANI_U8 action; + + /*U-APSD Flags: 1b per AC. Encoded as follows: + b7 b6 b5 b4 b3 b2 b1 b0 = + X X X X BE BK VI VO */ + tANI_U8 uAPSD; + + /*Max SP Length*/ + tANI_U8 maxSPLen; + + /*11n Green Field preamble support + 0 - Not supported, 1 - Supported */ + tANI_U8 greenFieldCapable; + + /*MIMO Power Save mode*/ + tSirMacHTMIMOPowerSaveState mimoPS; + + /*Delayed BA Support*/ + tANI_U8 delayedBASupport; + + /*Max AMPDU duration in 32us*/ + tANI_U8 us32MaxAmpduDuration; + + /*HT STA should set it to 1 if it is enabled in BSS. HT STA should set + it to 0 if AP does not support it. This indication is sent to HAL and + HAL uses this flag to pickup up appropriate 40Mhz rates.*/ + tANI_U8 fDsssCckMode40Mhz; + + /* Valid STA Idx when action=Update. Set to 0xFF when invalid! + Retained for backward compalibity with existing HAL code*/ + tANI_U8 staIdx; + + /* BSSID of BSS to which station is associated. Set to 0xFF when invalid. + Retained for backward compalibity with existing HAL code*/ + tANI_U8 bssIdx; + + tANI_U8 p2pCapableSta; + + /*Reserved to align next field on a dword boundary*/ + tANI_U8 htLdpcEnabled:1; + tANI_U8 vhtLdpcEnabled:1; + tANI_U8 vhtTxBFEnabled:1; + tANI_U8 reserved:5; + + /*These rates are the intersection of peer and self capabilities.*/ + tSirSupportedRates_V1 supportedRates; + + tANI_U8 vhtCapable; + tANI_U8 vhtTxChannelWidthSet; + +} tConfigStaParams_V1, *tpConfigStaParams_V1; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + PACKED_PRE union PACKED_POST { + tConfigStaParams configStaParams; + tConfigStaParams_V1 configStaParams_V1; + } uStaParams; +} tConfigStaReqMsg, *tpConfigStaReqMsg; + +/*--------------------------------------------------------------------------- + WLAN_HAL_CONFIG_STA_RSP +---------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /*success or failure */ + tANI_U32 status; + + /* Station index; valid only when 'status' field value SUCCESS */ + tANI_U8 staIdx; + + /* BSSID Index of BSS to which the station is associated */ + tANI_U8 bssIdx; + + /* DPU Index for PTK */ + tANI_U8 dpuIndex; + + /* DPU Index for GTK */ + tANI_U8 bcastDpuIndex; + + /*DPU Index for IGTK */ + tANI_U8 bcastMgmtDpuIdx; + + /*PTK DPU signature*/ + tANI_U8 ucUcastSig; + + /*GTK DPU isignature*/ + tANI_U8 ucBcastSig; + + /* IGTK DPU signature*/ + tANI_U8 ucMgmtSig; + + tANI_U8 p2pCapableSta; + +}tConfigStaRspParams, *tpConfigStaRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tConfigStaRspParams configStaRspParams; +}tConfigStaRspMsg, *tpConfigStaRspMsg; + +/*--------------------------------------------------------------------------- + WLAN_HAL_DELETE_STA_REQ +---------------------------------------------------------------------------*/ + +/* Delete STA Request params */ +typedef PACKED_PRE struct PACKED_POST +{ + /* Index of STA to delete */ + tANI_U8 staIdx; +} tDeleteStaParams, *tpDeleteStaParams; + +/* Delete STA Request message*/ +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tDeleteStaParams delStaParams; +} tDeleteStaReqMsg, *tpDeleteStaReqMsg; + +/*--------------------------------------------------------------------------- + WLAN_HAL_DELETE_STA_RSP +---------------------------------------------------------------------------*/ + +/* Delete STA Response Params */ +typedef PACKED_PRE struct PACKED_POST +{ + /*success or failure */ + tANI_U32 status; + + /* Index of STA deleted */ + tANI_U8 staId; +} tDeleteStaRspParams, *tpDeleteStaRspParams; + +/* Delete STA Response message*/ +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tDeleteStaRspParams delStaRspParams; +} tDeleteStaRspMsg, *tpDeleteStaRspMsg; + +/*--------------------------------------------------------------------------- + WLAN_HAL_CONFIG_BSS_REQ +---------------------------------------------------------------------------*/ + +//12 Bytes long because this structure can be used to represent rate +//and extended rate set IEs. The parser assume this to be at least 12 +typedef __ani_attr_pre_packed struct sSirMacRateSet +{ + tANI_U8 numRates; + tANI_U8 rate[SIR_MAC_RATESET_EID_MAX]; +} __ani_attr_packed tSirMacRateSet; + +// access category record +typedef __ani_attr_pre_packed struct sSirMacAciAifsn +{ +#ifndef ANI_LITTLE_BIT_ENDIAN + tANI_U8 rsvd : 1; + tANI_U8 aci : 2; + tANI_U8 acm : 1; + tANI_U8 aifsn : 4; +#else + tANI_U8 aifsn : 4; + tANI_U8 acm : 1; + tANI_U8 aci : 2; + tANI_U8 rsvd : 1; +#endif +} __ani_attr_packed tSirMacAciAifsn; + +// contention window size +typedef __ani_attr_pre_packed struct sSirMacCW +{ +#ifndef ANI_LITTLE_BIT_ENDIAN + tANI_U8 max : 4; + tANI_U8 min : 4; +#else + tANI_U8 min : 4; + tANI_U8 max : 4; +#endif +} __ani_attr_packed tSirMacCW; + +typedef __ani_attr_pre_packed struct sSirMacEdcaParamRecord +{ + tSirMacAciAifsn aci; + tSirMacCW cw; + tANI_U16 txoplimit; +} __ani_attr_packed tSirMacEdcaParamRecord; + +typedef __ani_attr_pre_packed struct sSirMacSSid +{ + tANI_U8 length; + tANI_U8 ssId[32]; +} __ani_attr_packed tSirMacSSid; + +// Concurrency role. These are generic IDs that identify the various roles +// in the software system. +typedef enum { + HAL_STA_MODE=0, + HAL_STA_SAP_MODE=1, // to support softAp mode . This is misleading. It means AP MODE only. + HAL_P2P_CLIENT_MODE, + HAL_P2P_GO_MODE, + HAL_MONITOR_MODE, +} tHalConMode; + +//This is a bit pattern to be set for each mode +//bit 0 - sta mode +//bit 1 - ap mode +//bit 2 - p2p client mode +//bit 3 - p2p go mode +typedef enum +{ + HAL_STA=1, + HAL_SAP=2, + HAL_STA_SAP=3, //to support sta, softAp mode . This means STA+AP mode + HAL_P2P_CLIENT=4, + HAL_P2P_GO=8, + HAL_MAX_CONCURRENCY_PERSONA=4 +} tHalConcurrencyMode; + +// IFACE PERSONA for different Operating modes +typedef enum +{ + HAL_IFACE_UNKNOWN, + HAL_IFACE_STA_MODE, + HAL_IFACE_P2P_MODE, + HAL_IFACE_MAX +} tHalIfacePersona; + +typedef PACKED_PRE struct PACKED_POST +{ + /* BSSID */ + tSirMacAddr bssId; + + /* Self Mac Address */ + tSirMacAddr selfMacAddr; + + /* BSS type */ + tSirBssType bssType; + + /*Operational Mode: AP =0, STA = 1*/ + tANI_U8 operMode; + + /*Network Type*/ + tSirNwType nwType; + + /*Used to classify PURE_11G/11G_MIXED to program MTU*/ + tANI_U8 shortSlotTimeSupported; + + /*Co-exist with 11a STA*/ + tANI_U8 llaCoexist; + + /*Co-exist with 11b STA*/ + tANI_U8 llbCoexist; + + /*Co-exist with 11g STA*/ + tANI_U8 llgCoexist; + + /*Coexistence with 11n STA*/ + tANI_U8 ht20Coexist; + + /*Non GF coexist flag*/ + tANI_U8 llnNonGFCoexist; + + /*TXOP protection support*/ + tANI_U8 fLsigTXOPProtectionFullSupport; + + /*RIFS mode*/ + tANI_U8 fRIFSMode; + + /*Beacon Interval in TU*/ + tSirMacBeaconInterval beaconInterval; + + /*DTIM period*/ + tANI_U8 dtimPeriod; + + /*TX Width Set: 0 - 20 MHz only, 1 - 20/40 MHz*/ + tANI_U8 txChannelWidthSet; + + /*Operating channel*/ + tANI_U8 currentOperChannel; + + /*Extension channel for channel bonding*/ + tANI_U8 currentExtChannel; + + /*Reserved to align next field on a dword boundary*/ + tANI_U8 reserved; + + /*SSID of the BSS*/ + tSirMacSSid ssId; + + /*HAL should update the existing BSS entry, if this flag is set. + UMAC will set this flag in case of reassoc, where we want to resue the + the old BSSID and still return success 0 = Add, 1 = Update*/ + tANI_U8 action; + + /* MAC Rate Set */ + tSirMacRateSet rateSet; + + /*Enable/Disable HT capabilities of the BSS*/ + tANI_U8 htCapable; + + // Enable/Disable OBSS protection + tANI_U8 obssProtEnabled; + + /*RMF enabled/disabled*/ + tANI_U8 rmfEnabled; + + /*HT Operating Mode operating mode of the 802.11n STA*/ + tSirMacHTOperatingMode htOperMode; + + /*Dual CTS Protection: 0 - Unused, 1 - Used*/ + tANI_U8 dualCTSProtection; + + /* Probe Response Max retries */ + tANI_U8 ucMaxProbeRespRetryLimit; + + /* To Enable Hidden ssid */ + tANI_U8 bHiddenSSIDEn; + + /* To Enable Disable FW Proxy Probe Resp */ + tANI_U8 bProxyProbeRespEn; + + /* Boolean to indicate if EDCA params are valid. UMAC might not have valid + EDCA params or might not desire to apply EDCA params during config BSS. + 0 implies Not Valid ; Non-Zero implies valid*/ + tANI_U8 edcaParamsValid; + + /*EDCA Parameters for Best Effort Access Category*/ + tSirMacEdcaParamRecord acbe; + + /*EDCA Parameters forBackground Access Category*/ + tSirMacEdcaParamRecord acbk; + + /*EDCA Parameters for Video Access Category*/ + tSirMacEdcaParamRecord acvi; + + /*EDCA Parameters for Voice Access Category*/ + tSirMacEdcaParamRecord acvo; + +#ifdef WLAN_FEATURE_VOWIFI_11R + tANI_U8 extSetStaKeyParamValid; //Ext Bss Config Msg if set + tSetStaKeyParams extSetStaKeyParam; //SetStaKeyParams for ext bss msg +#endif + + /* Persona for the BSS can be STA,AP,GO,CLIENT value same as tHalConMode */ + tANI_U8 halPersona; + + tANI_U8 bSpectrumMgtEnable; + + /*HAL fills in the tx power used for mgmt frames in txMgmtPower*/ + tANI_S8 txMgmtPower; + /*maxTxPower has max power to be used after applying the power constraint if any */ + tANI_S8 maxTxPower; + /*Context of the station being added in HW + Add a STA entry for "itself" - + On AP - Add the AP itself in an "STA context" + On STA - Add the AP to which this STA is joining in an "STA context" */ + tConfigStaParams staContext; +} tConfigBssParams, * tpConfigBssParams; + + +/*-------------------------------------------------------------------------- + * WLAN_HAL_CONFIG_BSS_REQ + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* BSSID */ + tSirMacAddr bssId; + + /* Self Mac Address */ + tSirMacAddr selfMacAddr; + + /* BSS type */ + tSirBssType bssType; + + /*Operational Mode: AP =0, STA = 1*/ + tANI_U8 operMode; + + /*Network Type*/ + tSirNwType nwType; + + /*Used to classify PURE_11G/11G_MIXED to program MTU*/ + tANI_U8 shortSlotTimeSupported; + + /*Co-exist with 11a STA*/ + tANI_U8 llaCoexist; + + /*Co-exist with 11b STA*/ + tANI_U8 llbCoexist; + + /*Co-exist with 11g STA*/ + tANI_U8 llgCoexist; + + /*Coexistence with 11n STA*/ + tANI_U8 ht20Coexist; + + /*Non GF coexist flag*/ + tANI_U8 llnNonGFCoexist; + + /*TXOP protection support*/ + tANI_U8 fLsigTXOPProtectionFullSupport; + /*RIFS mode*/ + tANI_U8 fRIFSMode; + + /*Beacon Interval in TU*/ + tSirMacBeaconInterval beaconInterval; + + /*DTIM period*/ + tANI_U8 dtimPeriod; + + /*TX Width Set: 0 - 20 MHz only, 1 - 20/40 MHz*/ + tANI_U8 txChannelWidthSet; + + /*Operating channel*/ + tANI_U8 currentOperChannel; + + /*Extension channel for channel bonding*/ + tANI_U8 currentExtChannel; + + /*Reserved to align next field on a dword boundary*/ + tANI_U8 reserved; + + /*SSID of the BSS*/ + tSirMacSSid ssId; + + /*HAL should update the existing BSS entry, if this flag is set. + UMAC will set this flag in case of reassoc, where we want to resue the + the old BSSID and still return success 0 = Add, 1 = Update*/ + tANI_U8 action; + + /* MAC Rate Set */ + tSirMacRateSet rateSet; + + /*Enable/Disable HT capabilities of the BSS*/ + tANI_U8 htCapable; + + // Enable/Disable OBSS protection + tANI_U8 obssProtEnabled; + + /*RMF enabled/disabled*/ + tANI_U8 rmfEnabled; + + /*HT Operating Mode operating mode of the 802.11n STA*/ + tSirMacHTOperatingMode htOperMode; + + /*Dual CTS Protection: 0 - Unused, 1 - Used*/ + tANI_U8 dualCTSProtection; + + /* Probe Response Max retries */ + tANI_U8 ucMaxProbeRespRetryLimit; + + /* To Enable Hidden ssid */ + tANI_U8 bHiddenSSIDEn; + + /* To Enable Disable FW Proxy Probe Resp */ + tANI_U8 bProxyProbeRespEn; + + /* Boolean to indicate if EDCA params are valid. UMAC might not have valid + EDCA params or might not desire to apply EDCA params during config BSS. + 0 implies Not Valid ; Non-Zero implies valid*/ + tANI_U8 edcaParamsValid; + + /*EDCA Parameters for Best Effort Access Category*/ + tSirMacEdcaParamRecord acbe; + + /*EDCA Parameters forBackground Access Category*/ + tSirMacEdcaParamRecord acbk; + + /*EDCA Parameters for Video Access Category*/ + tSirMacEdcaParamRecord acvi; + + /*EDCA Parameters for Voice Access Category*/ + tSirMacEdcaParamRecord acvo; + +#ifdef WLAN_FEATURE_VOWIFI_11R + tANI_U8 extSetStaKeyParamValid; //Ext Bss Config Msg if set + tSetStaKeyParams extSetStaKeyParam; //SetStaKeyParams for ext bss msg +#endif + + /* Persona for the BSS can be STA,AP,GO,CLIENT value same as tHalConMode */ + tANI_U8 halPersona; + + tANI_U8 bSpectrumMgtEnable; + + /*HAL fills in the tx power used for mgmt frames in txMgmtPower*/ + tANI_S8 txMgmtPower; + /*maxTxPower has max power to be used after applying the power constraint if any */ + tANI_S8 maxTxPower; + /*Context of the station being added in HW + Add a STA entry for "itself" - + On AP - Add the AP itself in an "STA context" + On STA - Add the AP to which this STA is joining in an "STA context" */ + tConfigStaParams_V1 staContext; + + tANI_U8 vhtCapable; + tANI_U8 vhtTxChannelWidthSet; +} tConfigBssParams_V1, * tpConfigBssParams_V1; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + PACKED_PRE union PACKED_POST { + tConfigBssParams configBssParams; + tConfigBssParams_V1 configBssParams_V1; + }uBssParams; +} tConfigBssReqMsg, *tpConfigBssReqMsg; + +/*--------------------------------------------------------------------------- + WLAN_HAL_CONFIG_BSS_RSP +---------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /* Success or Failure */ + tANI_U32 status; + + /* BSS index allocated by HAL */ + tANI_U8 bssIdx; + + /* DPU descriptor index for PTK */ + tANI_U8 dpuDescIndx; + + /* PTK DPU signature */ + tANI_U8 ucastDpuSignature; + + /* DPU descriptor index for GTK*/ + tANI_U8 bcastDpuDescIndx; + + /* GTK DPU signature */ + tANI_U8 bcastDpuSignature; + + /*DPU descriptor for IGTK*/ + tANI_U8 mgmtDpuDescIndx; + + /* IGTK DPU signature */ + tANI_U8 mgmtDpuSignature; + + /* Station Index for BSS entry*/ + tANI_U8 bssStaIdx; + + /* Self station index for this BSS */ + tANI_U8 bssSelfStaIdx; + + /* Bcast station for buffering bcast frames in AP role */ + tANI_U8 bssBcastStaIdx; + + /*MAC Address of STA(PEER/SELF) in staContext of configBSSReq*/ + tSirMacAddr staMac; + + /*HAL fills in the tx power used for mgmt frames in this field. */ + tANI_S8 txMgmtPower; + +} tConfigBssRspParams, * tpConfigBssRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tConfigBssRspParams configBssRspParams; +} tConfigBssRspMsg, *tpConfigBssRspMsg; + +/*--------------------------------------------------------------------------- + WLAN_HAL_DELETE_BSS_REQ +---------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /* BSS index to be deleted */ + tANI_U8 bssIdx; + +} tDeleteBssParams, *tpDeleteBssParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tDeleteBssParams deleteBssParams; +} tDeleteBssReqMsg, *tpDeleteBssReqMsg; + +/*--------------------------------------------------------------------------- + WLAN_HAL_DELETE_BSS_RSP +---------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /* Success or Failure */ + tANI_U32 status; + + /* BSS index that has been deleted */ + tANI_U8 bssIdx; + +} tDeleteBssRspParams, *tpDeleteBssRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tDeleteBssRspParams deleteBssRspParams; +} tDeleteBssRspMsg, *tpDeleteBssRspMsg; + +/*--------------------------------------------------------------------------- + WLAN_HAL_JOIN_REQ +---------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /*Indicates the BSSID to which STA is going to associate*/ + tSirMacAddr bssId; + + /*Indicates the channel to switch to.*/ + tANI_U8 ucChannel; + + /* Self STA MAC */ + tSirMacAddr selfStaMacAddr; + + /*Local power constraint*/ + tANI_U8 ucLocalPowerConstraint; + + /*Secondary channel offset */ + ePhyChanBondState secondaryChannelOffset; + + /*link State*/ + tSirLinkState linkState; + + /* Max TX power */ + tANI_S8 maxTxPower; + +} tHalJoinReqParams, *tpHalJoinReqParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalJoinReqParams joinReqParams; +} tHalJoinReqMsg, *tpHalJoinReqMsg; + +/*--------------------------------------------------------------------------- + WLAN_HAL_JOIN_RSP +---------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /*success or failure */ + tANI_U32 status; + + /* HAL fills in the tx power used for mgmt frames in this field */ + tPowerdBm txMgmtPower; + +}tHalJoinRspParams, *tpHalJoinRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalJoinRspParams joinRspParams; +}tHalJoinRspMsg, *tpHalJoinRspMsg; + +/*--------------------------------------------------------------------------- + WLAN_HAL_POST_ASSOC_REQ +---------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + tConfigStaParams configStaParams; + tConfigBssParams configBssParams; +} tPostAssocReqParams, *tpPostAssocReqParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tPostAssocReqParams postAssocReqParams; +} tPostAssocReqMsg, *tpPostAssocReqMsg; + +/*--------------------------------------------------------------------------- + WLAN_HAL_POST_ASSOC_RSP +---------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + tConfigStaRspParams configStaRspParams; + tConfigBssRspParams configBssRspParams; +} tPostAssocRspParams, *tpPostAssocRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tPostAssocRspParams postAssocRspParams; +} tPostAssocRspMsg, *tpPostAssocRspMsg; + +/*--------------------------------------------------------------------------- + WLAN_HAL_SET_BSSKEY_REQ +---------------------------------------------------------------------------*/ + +/* + * This is used by PE to create a set of WEP keys for a given BSS. + */ +typedef PACKED_PRE struct PACKED_POST +{ + /*BSS Index of the BSS*/ + tANI_U8 bssIdx; + + /*Encryption Type used with peer*/ + tAniEdType encType; + + /*Number of keys*/ + tANI_U8 numKeys; + + /*Array of keys.*/ + tSirKeys key[SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS]; + + /*Control for Replay Count, 1= Single TID based replay count on Tx + 0 = Per TID based replay count on TX */ + tANI_U8 singleTidRc; +} tSetBssKeyParams, *tpSetBssKeyParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tSetBssKeyParams setBssKeyParams; +} tSetBssKeyReqMsg, *tpSetBssKeyReqMsg; + +/* tagged version of set bss key */ +typedef PACKED_PRE struct PACKED_POST +{ + tSetBssKeyReqMsg Msg; + uint32 Tag; +} tSetBssKeyReqMsgTagged; + +/*--------------------------------------------------------------------------- + WLAN_HAL_SET_BSSKEY_RSP +---------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /*success or failure */ + tANI_U32 status; + +} tSetBssKeyRspParams, *tpSetBssKeyRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tSetBssKeyRspParams setBssKeyRspParams; +} tSetBssKeyRspMsg, *tpSetBssKeyRspMsg; + +/*--------------------------------------------------------------------------- + WLAN_HAL_SET_STAKEY_REQ, +---------------------------------------------------------------------------*/ + +/* + * This is used by PE to configure the key information on a given station. + * When the secType is WEP40 or WEP104, the defWEPIdx is used to locate + * a preconfigured key from a BSS the station assoicated with; otherwise + * a new key descriptor is created based on the key field. + */ + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tSetStaKeyParams setStaKeyParams; +} tSetStaKeyReqMsg, *tpSetStaKeyReqMsg; + +/*--------------------------------------------------------------------------- + WLAN_HAL_SET_STAKEY_RSP, +---------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /*success or failure */ + tANI_U32 status; + +} tSetStaKeyRspParams, *tpSetStaKeyRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tSetStaKeyRspParams setStaKeyRspParams; +} tSetStaKeyRspMsg, *tpSetStaKeyRspMsg; + +/*--------------------------------------------------------------------------- + WLAN_HAL_RMV_BSSKEY_REQ, +---------------------------------------------------------------------------*/ +/* + * This is used by PE to remove keys for a given BSS. + */ +typedef PACKED_PRE struct PACKED_POST + +{ + /*BSS Index of the BSS*/ + tANI_U8 bssIdx; + + /*Encryption Type used with peer*/ + tAniEdType encType; + + /*Key Id*/ + tANI_U8 keyId; + + /*STATIC/DYNAMIC. Used in Nullifying in Key Descriptors for Static/Dynamic keys*/ + tAniWepType wepType; + +} tRemoveBssKeyParams, *tpRemoveBssKeyParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tRemoveBssKeyParams removeBssKeyParams; +} tRemoveBssKeyReqMsg, *tpRemoveBssKeyReqMsg; + +/*--------------------------------------------------------------------------- + WLAN_HAL_RMV_BSSKEY_RSP, +---------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /*success or failure */ + tANI_U32 status; + +} tRemoveBssKeyRspParams, *tpRemoveBssKeyRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tRemoveBssKeyRspParams removeBssKeyRspParams; +} tRemoveBssKeyRspMsg, *tpRemoveBssKeyRspMsg; + +/*--------------------------------------------------------------------------- + WLAN_HAL_RMV_STAKEY_REQ, +---------------------------------------------------------------------------*/ +/* + * This is used by PE to Remove the key information on a given station. + */ +typedef PACKED_PRE struct PACKED_POST +{ + /*STA Index*/ + tANI_U16 staIdx; + + /*Encryption Type used with peer*/ + tAniEdType encType; + + /*Key Id*/ + tANI_U8 keyId; + + /*Whether to invalidate the Broadcast key or Unicast key. In case of WEP, + the same key is used for both broadcast and unicast.*/ + tANI_BOOLEAN unicast; + +} tRemoveStaKeyParams, *tpRemoveStaKeyParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tRemoveStaKeyParams removeStaKeyParams; +} tRemoveStaKeyReqMsg, *tpRemoveStaKeyReqMsg; + +/*--------------------------------------------------------------------------- + WLAN_HAL_RMV_STAKEY_RSP, +---------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /*success or failure */ + tANI_U32 status; +} tRemoveStaKeyRspParams, *tpRemoveStaKeyRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tRemoveStaKeyRspParams removeStaKeyRspParams; +} tRemoveStaKeyRspMsg, *tpRemoveStaKeyRspMsg; + +#ifdef FEATURE_OEM_DATA_SUPPORT + +#ifndef OEM_DATA_REQ_SIZE +#ifdef QCA_WIFI_2_0 +#define OEM_DATA_REQ_SIZE 276 +#else +#define OEM_DATA_REQ_SIZE 134 +#endif +#endif + +#ifndef OEM_DATA_RSP_SIZE +#ifdef QCA_WIFI_2_0 +#define OEM_DATA_RSP_SIZE 1720 +#else +#define OEM_DATA_RSP_SIZE 1968 +#endif +#endif + +/*------------------------------------------------------------------------- +WLAN_HAL_START_OEM_DATA_REQ +--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U32 status; + tSirMacAddr selfMacAddr; + tANI_U8 oemDataReq[OEM_DATA_REQ_SIZE]; +} tStartOemDataReqParams, *tpStartOemDataReqParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tStartOemDataReqParams startOemDataReqParams; +} tStartOemDataReqMsg, *tpStartOemDataReqMsg; + +/*------------------------------------------------------------------------- +WLAN_HAL_START_OEM_DATA_RSP +--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 oemDataRsp[OEM_DATA_RSP_SIZE]; +} tStartOemDataRspParams, *tpStartOemDataRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tStartOemDataRspParams startOemDataRspParams; +} tStartOemDataRspMsg, *tpStartOemDataRspMsg; + +#endif + + + +/*--------------------------------------------------------------------------- +WLAN_HAL_CH_SWITCH_REQ +---------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /* Channel number */ + tANI_U8 channelNumber; + + /* Local power constraint */ + tANI_U8 localPowerConstraint; + + /*Secondary channel offset */ + ePhyChanBondState secondaryChannelOffset; + + //HAL fills in the tx power used for mgmt frames in this field. + tPowerdBm txMgmtPower; + + /* Max TX power */ + tPowerdBm maxTxPower; + + /* Self STA MAC */ + tSirMacAddr selfStaMacAddr; + + /*VO WIFI comment: BSSID needed to identify session. As the request has power constraints, + this should be applied only to that session*/ + /* Since MTU timing and EDCA are sessionized, this struct needs to be sessionized and + * bssid needs to be out of the VOWifi feature flag */ + /* V IMP: Keep bssId field at the end of this msg. It is used to mantain backward compatbility + * by way of ignoring if using new host/old FW or old host/new FW since it is at the end of this struct + */ + tSirMacAddr bssId; + +}tSwitchChannelParams, *tpSwitchChannelParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tSwitchChannelParams switchChannelParams; +} tSwitchChannelReqMsg, *tpSwitchChannelReqMsg; + +/*--------------------------------------------------------------------------- +WLAN_HAL_CH_SWITCH_RSP +---------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /* Status */ + tANI_U32 status; + + /* Channel number - same as in request*/ + tANI_U8 channelNumber; + + /* HAL fills in the tx power used for mgmt frames in this field */ + tPowerdBm txMgmtPower; + + /* BSSID needed to identify session - same as in request*/ + tSirMacAddr bssId; + +}tSwitchChannelRspParams, *tpSwitchChannelRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tSwitchChannelRspParams switchChannelRspParams; +} tSwitchChannelRspMsg, *tpSwitchChannelRspMsg; + +/*--------------------------------------------------------------------------- +WLAN_HAL_UPD_EDCA_PARAMS_REQ +---------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /*BSS Index*/ + tANI_U16 bssIdx; + + /* Best Effort */ + tSirMacEdcaParamRecord acbe; + + /* Background */ + tSirMacEdcaParamRecord acbk; + + /* Video */ + tSirMacEdcaParamRecord acvi; + + /* Voice */ + tSirMacEdcaParamRecord acvo; + +} tEdcaParams, *tpEdcaParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tEdcaParams edcaParams; +} tUpdateEdcaParamsReqMsg, *tpUpdateEdcaParamsReqMsg; + +/*--------------------------------------------------------------------------- +WLAN_HAL_UPD_EDCA_PARAMS_RSP +---------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /*success or failure */ + tANI_U32 status; +} tEdcaRspParams, *tpEdcaRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tEdcaRspParams edcaRspParams; +} tUpdateEdcaParamsRspMsg, *tpUpdateEdcaParamsRspMsg; + + + +/*--------------------------------------------------------------------------- + * WLAN_HAL_GET_STATS_REQ + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST + +{ + /* Index of STA to which the statistics */ + tANI_U16 staIdx; + + /* Encryption mode */ + tANI_U8 encMode; + + /* status */ + tANI_U32 status; + + /* Statistics */ + tANI_U32 sendBlocks; + tANI_U32 recvBlocks; + tANI_U32 replays; + tANI_U8 micErrorCnt; + tANI_U32 protExclCnt; + tANI_U16 formatErrCnt; + tANI_U16 unDecryptableCnt; + tANI_U32 decryptErrCnt; + tANI_U32 decryptOkCnt; +} tDpuStatsParams, * tpDpuStatsParams; + +typedef PACKED_PRE struct PACKED_POST +{ + /* Valid STA Idx for per STA stats request */ + tANI_U32 staId; + + /* Categories of stats requested as specified in eHalStatsMask*/ + tANI_U32 statsMask; +}tHalStatsReqParams, *tpHalStatsReqParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalStatsReqParams statsReqParams; +} tHalStatsReqMsg, *tpHalStatsReqMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_GET_STATS_RSP + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U32 retry_cnt[4]; //Total number of packets(per AC) that were successfully transmitted with retries + tANI_U32 multiple_retry_cnt[4]; //The number of MSDU packets and MMPDU frames per AC that the 802.11 + // station successfully transmitted after more than one retransmission attempt + + tANI_U32 tx_frm_cnt[4]; //Total number of packets(per AC) that were successfully transmitted + //(with and without retries, including multi-cast, broadcast) + tANI_U32 rx_frm_cnt; //Total number of packets that were successfully received + //(after appropriate filter rules including multi-cast, broadcast) + tANI_U32 frm_dup_cnt; //Total number of duplicate frames received successfully + tANI_U32 fail_cnt[4]; //Total number packets(per AC) failed to transmit + tANI_U32 rts_fail_cnt; //Total number of RTS/CTS sequence failures for transmission of a packet + tANI_U32 ack_fail_cnt; //Total number packets failed transmit because of no ACK from the remote entity + tANI_U32 rts_succ_cnt; //Total number of RTS/CTS sequence success for transmission of a packet + tANI_U32 rx_discard_cnt; //The sum of the receive error count and dropped-receive-buffer error count. + //HAL will provide this as a sum of (FCS error) + (Fail get BD/PDU in HW) + tANI_U32 rx_error_cnt; //The receive error count. HAL will provide the RxP FCS error global counter. + tANI_U32 tx_byte_cnt; //The sum of the transmit-directed byte count, transmit-multicast byte count + //and transmit-broadcast byte count. HAL will sum TPE UC/MC/BCAST global counters + //to provide this. +}tAniSummaryStatsInfo, *tpAniSummaryStatsInfo; + + +// defines tx_rate_flags +typedef enum eTxRateInfo +{ + eHAL_TX_RATE_LEGACY = 0x1, /* Legacy rates */ + eHAL_TX_RATE_HT20 = 0x2, /* HT20 rates */ + eHAL_TX_RATE_HT40 = 0x4, /* HT40 rates */ + eHAL_TX_RATE_SGI = 0x8, /* Rate with Short guard interval */ + eHAL_TX_RATE_LGI = 0x10, /* Rate with Long guard interval */ + eHAL_TX_RATE_VHT20 = 0x20, /* VHT 20 rates */ + eHAL_TX_RATE_VHT40 = 0x40, /* VHT 20 rates */ + eHAL_TX_RATE_VHT80 = 0x80, /* VHT 20 rates */ + eHAL_TX_RATE_VIRT = 0x100, /* Virtual Rate */ + eHAL_TX_RATE_MAX = WLAN_HAL_MAX_ENUM_SIZE +} tTxrateinfoflags, tTxRateInfoFlags; + + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U32 rx_frag_cnt; //The number of MPDU frames received by the 802.11 station for MSDU packets + //or MMPDU frames + tANI_U32 promiscuous_rx_frag_cnt; //The number of MPDU frames received by the 802.11 station for MSDU packets + //or MMPDU frames when a promiscuous packet filter was enabled + tANI_U32 rx_input_sensitivity; //The receiver input sensitivity referenced to a FER of 8% at an MPDU length + //of 1024 bytes at the antenna connector. Each element of the array shall correspond + //to a supported rate and the order shall be the same as the supporteRates parameter. + tANI_U32 max_pwr; //The maximum transmit power in dBm upto one decimal. + //for eg: if it is 10.5dBm, the value would be 105 + tANI_U32 sync_fail_cnt; //Number of times the receiver failed to synchronize with the incoming signal + //after detecting the sync in the preamble of the transmitted PLCP protocol data unit. + + tANI_U32 tx_rate; //Legacy transmit rate, in units of 500 kbit/sec, for the most + //recently transmitted frame + tANI_U32 mcs_index; //mcs index for HT20 and HT40 rates + tANI_U32 tx_rate_flags; //to differentiate between HT20 and + //HT40 rates; short and long guard interval +}tAniGlobalClassAStatsInfo, *tpAniGlobalClassAStatsInfo; + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U32 rx_wep_unencrypted_frm_cnt; //The number of unencrypted received MPDU frames that the MAC layer discarded when + //the IEEE 802.11 dot11ExcludeUnencrypted management information base (MIB) object + //is enabled + tANI_U32 rx_mic_fail_cnt; //The number of received MSDU packets that that the 802.11 station discarded + //because of MIC failures + tANI_U32 tkip_icv_err; //The number of encrypted MPDU frames that the 802.11 station failed to decrypt + //because of a TKIP ICV error + tANI_U32 aes_ccmp_format_err; //The number of received MPDU frames that the 802.11 discarded because of an + //invalid AES-CCMP format + tANI_U32 aes_ccmp_replay_cnt; //The number of received MPDU frames that the 802.11 station discarded because of + //the AES-CCMP replay protection procedure + tANI_U32 aes_ccmp_decrpt_err; //The number of received MPDU frames that the 802.11 station discarded because of + //errors detected by the AES-CCMP decryption algorithm + tANI_U32 wep_undecryptable_cnt; //The number of encrypted MPDU frames received for which a WEP decryption key was + //not available on the 802.11 station + tANI_U32 wep_icv_err; //The number of encrypted MPDU frames that the 802.11 station failed to decrypt + //because of a WEP ICV error + tANI_U32 rx_decrypt_succ_cnt; //The number of received encrypted packets that the 802.11 station successfully + //decrypted + tANI_U32 rx_decrypt_fail_cnt; //The number of encrypted packets that the 802.11 station failed to decrypt + +}tAniGlobalSecurityStats, *tpAniGlobalSecurityStats; + +typedef PACKED_PRE struct PACKED_POST +{ + tAniGlobalSecurityStats ucStats; + tAniGlobalSecurityStats mcbcStats; +}tAniGlobalClassBStatsInfo, *tpAniGlobalClassBStatsInfo; + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U32 rx_amsdu_cnt; //This counter shall be incremented for a received A-MSDU frame with the stations + //MAC address in the address 1 field or an A-MSDU frame with a group address in the + //address 1 field + tANI_U32 rx_ampdu_cnt; //This counter shall be incremented when the MAC receives an AMPDU from the PHY + tANI_U32 tx_20_frm_cnt; //This counter shall be incremented when a Frame is transmitted only on the + //primary channel + tANI_U32 rx_20_frm_cnt; //This counter shall be incremented when a Frame is received only on the primary channel + tANI_U32 rx_mpdu_in_ampdu_cnt; //This counter shall be incremented by the number of MPDUs received in the A-MPDU + //when an A-MPDU is received + tANI_U32 ampdu_delimiter_crc_err; //This counter shall be incremented when an MPDU delimiter has a CRC error when this + //is the first CRC error in the received AMPDU or when the previous delimiter has been + //decoded correctly +}tAniGlobalClassCStatsInfo, *tpAniGlobalClassCStatsInfo; + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U32 tx_frag_cnt[4]; //The number of MPDU frames that the 802.11 station transmitted and acknowledged + //through a received 802.11 ACK frame + tANI_U32 tx_ampdu_cnt; //This counter shall be incremented when an A-MPDU is transmitted + tANI_U32 tx_mpdu_in_ampdu_cnt; //This counter shall increment by the number of MPDUs in the AMPDU when an A-MPDU + //is transmitted +}tAniPerStaStatsInfo, *tpAniPerStaStatsInfo; + +typedef PACKED_PRE struct PACKED_POST +{ + /* Success or Failure */ + tANI_U32 status; + + /* STA Idx */ + tANI_U32 staId; + + /* Categories of STATS being returned as per eHalStatsMask*/ + tANI_U32 statsMask; + + /* message type is same as the request type */ + tANI_U16 msgType; + + /* length of the entire request, includes the pStatsBuf length too */ + tANI_U16 msgLen; + +} tHalStatsRspParams, *tpHalStatsRspParams; + + + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalStatsRspParams statsRspParams; +} tHalStatsRspMsg, *tpHalStatsRspMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_SET_LINK_ST_REQ + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tSirMacAddr bssid; + tSirLinkState state; + tSirMacAddr selfMacAddr; +} tLinkStateParams, *tpLinkStateParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tLinkStateParams linkStateParams; +} tSetLinkStateReqMsg, *tpSetLinkStateReqMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_SET_LINK_ST_RSP + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /*success or failure */ + tANI_U32 status; +} tLinkStateRspParams, *tpLinkStateRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tLinkStateRspParams linkStateRspParams; +} tSetLinkStateRspMsg, *tpSetLinkStateRspMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_ADD_TS_REQ + *--------------------------------------------------------------------------*/ + +/* TSPEC Params */ +typedef __ani_attr_pre_packed struct sSirMacTSInfoTfc +{ + tANI_U16 trafficType : 1; + tANI_U16 tsid : 4; + tANI_U16 direction : 2; + tANI_U16 accessPolicy : 2; + tANI_U16 aggregation : 1; + tANI_U16 psb : 1; + tANI_U16 userPrio : 3; + tANI_U16 ackPolicy : 2; +} __ani_attr_packed tSirMacTSInfoTfc; + +/* Flag to schedule the traffic type */ +typedef __ani_attr_pre_packed struct sSirMacTSInfoSch +{ + tANI_U8 schedule : 1; + tANI_U8 rsvd : 7; +} __ani_attr_packed tSirMacTSInfoSch; + +/* Traffic and scheduling info */ +typedef __ani_attr_pre_packed struct sSirMacTSInfo +{ + tSirMacTSInfoTfc traffic; + tSirMacTSInfoSch schedule; +} __ani_attr_packed tSirMacTSInfo; + +/* Information elements */ +typedef __ani_attr_pre_packed struct sSirMacTspecIE +{ + tANI_U8 type; + tANI_U8 length; + tSirMacTSInfo tsinfo; + tANI_U16 nomMsduSz; + tANI_U16 maxMsduSz; + tANI_U32 minSvcInterval; + tANI_U32 maxSvcInterval; + tANI_U32 inactInterval; + tANI_U32 suspendInterval; + tANI_U32 svcStartTime; + tANI_U32 minDataRate; + tANI_U32 meanDataRate; + tANI_U32 peakDataRate; + tANI_U32 maxBurstSz; + tANI_U32 delayBound; + tANI_U32 minPhyRate; + tANI_U16 surplusBw; + tANI_U16 mediumTime; +}__ani_attr_packed tSirMacTspecIE; + +typedef PACKED_PRE struct PACKED_POST +{ + /* Station Index */ + tANI_U16 staIdx; + + /* TSPEC handler uniquely identifying a TSPEC for a STA in a BSS */ + tANI_U16 tspecIdx; + + /* To program TPE with required parameters */ + tSirMacTspecIE tspec; + + /* U-APSD Flags: 1b per AC. Encoded as follows: + b7 b6 b5 b4 b3 b2 b1 b0 = + X X X X BE BK VI VO */ + tANI_U8 uAPSD; + + /* These parameters are for all the access categories */ + tANI_U32 srvInterval[WLAN_HAL_MAX_AC]; // Service Interval + tANI_U32 susInterval[WLAN_HAL_MAX_AC]; // Suspend Interval + tANI_U32 delayInterval[WLAN_HAL_MAX_AC]; // Delay Interval + +} tAddTsParams, *tpAddTsParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tAddTsParams addTsParams; +} tAddTsReqMsg, *tpAddTsReqMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_ADD_TS_RSP + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /*success or failure */ + tANI_U32 status; +} tAddTsRspParams, *tpAddTsRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tAddTsRspParams addTsRspParams; +} tAddTsRspMsg, *tpAddTsRspMsg; + + +/*--------------------------------------------------------------------------- + * WLAN_HAL_DEL_TS_REQ + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /* Station Index */ + tANI_U16 staIdx; + + /* TSPEC identifier uniquely identifying a TSPEC for a STA in a BSS */ + tANI_U16 tspecIdx; + + /* To lookup station id using the mac address */ + tSirMacAddr bssId; + +} tDelTsParams, *tpDelTsParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tDelTsParams delTsParams; +} tDelTsReqMsg, *tpDelTsReqMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_DEL_TS_RSP + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /*success or failure */ + tANI_U32 status; +} tDelTsRspParams, *tpDelTsRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tDelTsRspParams delTsRspParams; +} tDelTsRspMsg, *tpDelTsRspMsg; + +/* End of TSpec Parameters */ + +/* Start of BLOCK ACK related Parameters */ + +/*--------------------------------------------------------------------------- + * WLAN_HAL_ADD_BA_SESSION_REQ + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /* Station Index */ + tANI_U16 staIdx; + + /* Peer MAC Address */ + tSirMacAddr peerMacAddr; + + /* ADDBA Action Frame dialog token + HAL will not interpret this object */ + tANI_U8 baDialogToken; + + /* TID for which the BA is being setup + This identifies the TC or TS of interest */ + tANI_U8 baTID; + + /* 0 - Delayed BA (Not supported) + 1 - Immediate BA */ + tANI_U8 baPolicy; + + /* Indicates the number of buffers for this TID (baTID) + NOTE - This is the requested buffer size. When this + is processed by HAL and subsequently by HDD, it is + possible that HDD may change this buffer size. Any + change in the buffer size should be noted by PE and + advertized appropriately in the ADDBA response */ + tANI_U16 baBufferSize; + + /* BA timeout in TU's 0 means no timeout will occur */ + tANI_U16 baTimeout; + + /* b0..b3 - Fragment Number - Always set to 0 + b4..b15 - Starting Sequence Number of first MSDU + for which this BA is setup */ + tANI_U16 baSSN; + + /* ADDBA direction + 1 - Originator + 0 - Recipient */ + tANI_U8 baDirection; +} tAddBASessionParams, *tpAddBASessionParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tAddBASessionParams addBASessionParams; +}tAddBASessionReqMsg, *tpAddBASessionReqMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_ADD_BA_SESSION_RSP + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /*success or failure */ + tANI_U32 status; + + /* Dialog token */ + tANI_U8 baDialogToken; + + /* TID for which the BA session has been setup */ + tANI_U8 baTID; + + /* BA Buffer Size allocated for the current BA session */ + tANI_U8 baBufferSize; + + tANI_U8 baSessionID; + + /* Reordering Window buffer */ + tANI_U8 winSize; + + /*Station Index to id the sta */ + tANI_U8 STAID; + + /* Starting Sequence Number */ + tANI_U16 SSN; +} tAddBASessionRspParams, *tpAddBASessionRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tAddBASessionRspParams addBASessionRspParams; +} tAddBASessionRspMsg, *tpAddBASessionRspMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_ADD_BA_REQ + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /* Session Id */ + tANI_U8 baSessionID; + + /* Reorder Window Size */ + tANI_U8 winSize; + +#ifdef FEATURE_ON_CHIP_REORDERING + tANI_BOOLEAN isReorderingDoneOnChip; +#endif +} tAddBAParams, *tpAddBAParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tAddBAParams addBAParams; +} tAddBAReqMsg, *tpAddBAReqMsg; + + +/*--------------------------------------------------------------------------- + * WLAN_HAL_ADD_BA_RSP + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /*success or failure */ + tANI_U32 status; + + /* Dialog token */ + tANI_U8 baDialogToken; + +} tAddBARspParams, *tpAddBARspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tAddBARspParams addBARspParams; +} tAddBARspMsg, *tpAddBARspMsg; + + +/*--------------------------------------------------------------------------- + * WLAN_HAL_TRIGGER_BA_REQ + *--------------------------------------------------------------------------*/ + + +typedef struct sAddBaInfo +{ + tANI_U16 fBaEnable : 1; + tANI_U16 startingSeqNum: 12; + tANI_U16 reserved : 3; +}tAddBaInfo, *tpAddBaInfo; + +typedef struct sTriggerBaRspCandidate +{ + tSirMacAddr staAddr; + tAddBaInfo baInfo[STACFG_MAX_TC]; +}tTriggerBaRspCandidate, *tpTriggerBaRspCandidate; + +typedef struct sTriggerBaCandidate +{ + tANI_U8 staIdx; + tANI_U8 tidBitmap; +}tTriggerBaReqCandidate, *tptTriggerBaReqCandidate; + +typedef PACKED_PRE struct PACKED_POST +{ + /* Session Id */ + tANI_U8 baSessionID; + + /* baCandidateCnt is followed by trigger BA + * Candidate List(tTriggerBaCandidate) + */ + tANI_U16 baCandidateCnt; + +} tTriggerBAParams, *tpTriggerBAParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tTriggerBAParams triggerBAParams; +} tTriggerBAReqMsg, *tpTriggerBAReqMsg; + + +/*--------------------------------------------------------------------------- + * WLAN_HAL_TRIGGER_BA_RSP + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + + /* TO SUPPORT BT-AMP */ + tSirMacAddr bssId; + + /* success or failure */ + tANI_U32 status; + + /* baCandidateCnt is followed by trigger BA + * Rsp Candidate List(tTriggerRspBaCandidate) + */ + tANI_U16 baCandidateCnt; + + +} tTriggerBARspParams, *tpTriggerBARspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tTriggerBARspParams triggerBARspParams; +} tTriggerBARspMsg, *tpTriggerBARspMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_DEL_BA_REQ + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /* Station Index */ + tANI_U16 staIdx; + + /* TID for which the BA session is being deleted */ + tANI_U8 baTID; + + /* DELBA direction + 1 - Originator + 0 - Recipient */ + tANI_U8 baDirection; +} tDelBAParams, *tpDelBAParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tDelBAParams delBAParams; +} tDelBAReqMsg, *tpDelBAReqMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_DEL_BA_RSP + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; +} tDelBARspParams, *tpDelBARspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tDelBARspParams delBARspParams; +} tDelBARspMsg, *tpDelBARspMsg; + + +#ifdef FEATURE_WLAN_CCX + +/*--------------------------------------------------------------------------- + * WLAN_HAL_TSM_STATS_REQ + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* Traffic Id */ + tANI_U8 tsmTID; + + tSirMacAddr bssId; +} tTsmStatsParams, *tpTsmStatsParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tTsmStatsParams tsmStatsParams; +} tTsmStatsReqMsg, *tpTsmStatsReqMsg; + + +/*--------------------------------------------------------------------------- + * WLAN_HAL_TSM_STATS_RSP + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /*success or failure */ + tANI_U32 status; + + /* Uplink Packet Queue delay */ + tANI_U16 UplinkPktQueueDly; + + /* Uplink Packet Queue delay histogram */ + tANI_U16 UplinkPktQueueDlyHist[4]; + + /* Uplink Packet Transmit delay */ + tANI_U32 UplinkPktTxDly; + + /* Uplink Packet loss */ + tANI_U16 UplinkPktLoss; + + /* Uplink Packet count */ + tANI_U16 UplinkPktCount; + + /* Roaming count */ + tANI_U8 RoamingCount; + + /* Roaming Delay */ + tANI_U16 RoamingDly; +} tTsmStatsRspParams, *tpTsmStatsRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tTsmStatsRspParams tsmStatsRspParams; +} tTsmStatsRspMsg, *tpTsmStatsRspMsg; + + +#endif + +/*--------------------------------------------------------------------------- + * WLAN_HAL_SET_KEYDONE_MSG + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /*bssid of the keys */ + tANI_U8 bssidx; + tANI_U8 encType; +} tSetKeyDoneParams, *tpSetKeyDoneParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tSetKeyDoneParams setKeyDoneParams; +} tSetKeyDoneMsg, *tpSetKeyDoneMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_DOWNLOAD_NV_REQ + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* Fragment sequence number of the NV Image. Note that NV Image might not + * fit into one message due to size limitation of the SMD channel FIFO. UMAC + * can hence choose to chop the NV blob into multiple fragments starting with + * seqeunce number 0, 1, 2 etc. The last fragment MUST be indicated by + * marking the isLastFragment field to 1. Note that all the NV blobs would be + * concatenated together by HAL without any padding bytes in between.*/ + tANI_U16 fragNumber; + + /* Is this the last fragment? When set to 1 it indicates that no more fragments + * will be sent by UMAC and HAL can concatenate all the NV blobs rcvd & proceed + * with the parsing. HAL would generate a WLAN_HAL_DOWNLOAD_NV_RSP to the + * WLAN_HAL_DOWNLOAD_NV_REQ after it receives each fragment */ + tANI_U16 isLastFragment; + + /* NV Image size (number of bytes) */ + tANI_U32 nvImgBufferSize; + + /* Following the 'nvImageBufferSize', there should be nvImageBufferSize + * bytes of NV Image i.e. uint8[nvImageBufferSize] */ +} tHalNvImgDownloadReqParams, *tpHalNvImgDownloadReqParams; + +typedef PACKED_PRE struct PACKED_POST +{ + /* Note: The length specified in tHalNvImgDownloadReqMsg messages should be + * header.msgLen = sizeof(tHalNvImgDownloadReqMsg) + nvImgBufferSize */ + tHalMsgHeader header; + tHalNvImgDownloadReqParams nvImageReqParams; +} tHalNvImgDownloadReqMsg, *tpHalNvImgDownloadReqMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_DOWNLOAD_NV_RSP + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* Success or Failure. HAL would generate a WLAN_HAL_DOWNLOAD_NV_RSP + * after each fragment */ + tANI_U32 status; +} tHalNvImgDownloadRspParams, *tpHalNvImgDownloadRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalNvImgDownloadRspParams nvImageRspParams; +} tHalNvImgDownloadRspMsg, *tpHalNvImgDownloadRspMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_STORE_NV_IND + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* NV Item */ + eNvTable tableID; + + /* Size of NV Blob */ + tANI_U32 nvBlobSize; + + /* Following the 'nvBlobSize', there should be nvBlobSize bytes of + * NV blob i.e. uint8[nvBlobSize] */ +} tHalNvStoreParams, *tpHalNvStoreParams; + +typedef PACKED_PRE struct PACKED_POST +{ + /* Note: The length specified in tHalNvStoreInd messages should be + * header.msgLen = sizeof(tHalNvStoreInd) + nvBlobSize */ + tHalMsgHeader header; + tHalNvStoreParams nvStoreParams; +} tHalNvStoreInd, *tpHalNvStoreInd; + +/* End of Block Ack Related Parameters */ + +/*--------------------------------------------------------------------------- + * WLAN_HAL_MIC_FAILURE_IND + *--------------------------------------------------------------------------*/ + +#define SIR_CIPHER_SEQ_CTR_SIZE 6 + +typedef PACKED_PRE struct PACKED_POST +{ + tSirMacAddr srcMacAddr; //address used to compute MIC + tSirMacAddr taMacAddr; //transmitter address + tSirMacAddr dstMacAddr; + tANI_U8 multicast; + tANI_U8 IV1; // first byte of IV + tANI_U8 keyId; // second byte of IV + tANI_U8 TSC[SIR_CIPHER_SEQ_CTR_SIZE]; // sequence number + tSirMacAddr rxMacAddr; // receive address +} tSirMicFailureInfo, *tpSirMicFailureInfo; + +/* Definition for MIC failure indication + MAC reports this each time a MIC failure occures on Rx TKIP packet + */ +typedef PACKED_PRE struct PACKED_POST +{ + tSirMacAddr bssId; // BSSID + tSirMicFailureInfo info; +} tSirMicFailureInd, *tpSirMicFailureInd; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tSirMicFailureInd micFailureInd; +} tMicFailureIndMsg, *tpMicFailureIndMsg; + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U16 opMode; + tANI_U16 staId; +}tUpdateVHTOpMode, *tpUpdateVHTOpMode; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tUpdateVHTOpMode updateVhtOpMode; +} tUpdateVhtOpModeReqMsg, *tpUpdateVhtOpModeReqMsg; + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U32 status; +} tUpdateVhtOpModeParamsRsp, *tpUpdateVhtOpModeParamsRsp; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tUpdateVhtOpModeParamsRsp updateVhtOpModeRspParam; +} tUpdateVhtOpModeParamsRspMsg, *tpUpdateVhtOpModeParamsRspMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_UPDATE_BEACON_REQ + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + + tANI_U8 bssIdx; + + //shortPreamble mode. HAL should update all the STA rates when it + //receives this message + tANI_U8 fShortPreamble; + //short Slot time. + tANI_U8 fShortSlotTime; + //Beacon Interval + tANI_U16 beaconInterval; + //Protection related + tANI_U8 llaCoexist; + tANI_U8 llbCoexist; + tANI_U8 llgCoexist; + tANI_U8 ht20MhzCoexist; + tANI_U8 llnNonGFCoexist; + tANI_U8 fLsigTXOPProtectionFullSupport; + tANI_U8 fRIFSMode; + + tANI_U16 paramChangeBitmap; +}tUpdateBeaconParams, *tpUpdateBeaconParams; + + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tUpdateBeaconParams updateBeaconParam; +} tUpdateBeaconReqMsg, *tpUpdateBeaconReqMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_UPDATE_BEACON_RSP + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U32 status; +} tUpdateBeaconRspParams, *tpUpdateBeaconRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tUpdateBeaconRspParams updateBeaconRspParam; +} tUpdateBeaconRspMsg, *tpUpdateBeaconRspMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_SEND_BEACON_REQ + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U32 beaconLength; //length of the template. + tANI_U8 beacon[BEACON_TEMPLATE_SIZE]; // Beacon data. + tSirMacAddr bssId; + tANI_U32 timIeOffset; //TIM IE offset from the beginning of the template. + tANI_U16 p2pIeOffset; //P2P IE offset from the begining of the template +}tSendBeaconParams, *tpSendBeaconParams; + + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tSendBeaconParams sendBeaconParam; +}tSendBeaconReqMsg, *tpSendBeaconReqMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_SEND_BEACON_RSP + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U32 status; +} tSendBeaconRspParams, *tpSendBeaconRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tSendBeaconRspParams sendBeaconRspParam; +} tSendBeaconRspMsg, *tpSendBeaconRspMsg; + +#ifdef FEATURE_5GHZ_BAND + +/*--------------------------------------------------------------------------- + * WLAN_HAL_ENABLE_RADAR_DETECT_REQ + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tSirMacAddr BSSID; + tANI_U8 channel; +}tSirEnableRadarInfoType, *tptSirEnableRadarInfoType; + + +typedef PACKED_PRE struct PACKED_POST +{ + /* Link Parameters */ + tSirEnableRadarInfoType EnableRadarInfo; +}tEnableRadarReqParams, *tpEnableRadarReqParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tEnableRadarReqParams enableRadarReqParams; +}tEnableRadarReqMsg, *tpEnableRadarReqMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_ENABLE_RADAR_DETECT_RSP + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /* Link Parameters */ + tSirMacAddr BSSID; + /* success or failure */ + tANI_U32 status; +}tEnableRadarRspParams, *tpEnableRadarRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tEnableRadarRspParams enableRadarRspParams; +}tEnableRadarRspMsg, *tpEnableRadarRspMsg; + +/*--------------------------------------------------------------------------- + *WLAN_HAL_RADAR_DETECT_INTR_IND + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 radarDetChannel; +}tRadarDetectIntrIndParams, *tpRadarDetectIntrIndParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tRadarDetectIntrIndParams radarDetectIntrIndParams; +}tRadarDetectIntrIndMsg, *tptRadarDetectIntrIndMsg; + +/*--------------------------------------------------------------------------- + *WLAN_HAL_RADAR_DETECT_IND + *-------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /*channel number in which the RADAR detected*/ + tANI_U8 channelNumber; + + /*RADAR pulse width*/ + tANI_U16 radarPulseWidth; // in usecond + + /*Number of RADAR pulses */ + tANI_U16 numRadarPulse; +}tRadarDetectIndParams,*tpRadarDetectIndParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tRadarDetectIndParams radarDetectIndParams; +}tRadarDetectIndMsg, *tptRadarDetectIndMsg; + + +/*--------------------------------------------------------------------------- + *WLAN_HAL_GET_TPC_REPORT_REQ + *-------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tSirMacAddr sta; + tANI_U8 dialogToken; + tANI_U8 txpower; +}tSirGetTpcReportReqParams, *tpSirGetTpcReportReqParams; + + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tSirGetTpcReportReqParams getTpcReportReqParams; +}tSirGetTpcReportReqMsg, *tpSirGetTpcReportReqMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_GET_TPC_REPORT_RSP + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; +}tSirGetTpcReportRspParams, *tpSirGetTpcReportRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tSirGetTpcReportRspParams getTpcReportRspParams; +}tSirGetTpcReportRspMsg, *tpSirGetTpcReportRspMsg; + +#endif + +/*--------------------------------------------------------------------------- + *WLAN_HAL_UPDATE_PROBE_RSP_TEMPLATE_REQ + *-------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 pProbeRespTemplate[BEACON_TEMPLATE_SIZE]; + tANI_U32 probeRespTemplateLen; + tANI_U32 ucProxyProbeReqValidIEBmap[8]; + tSirMacAddr bssId; + +}tSendProbeRespReqParams, *tpSendProbeRespReqParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tSendProbeRespReqParams sendProbeRespReqParams ; +}tSendProbeRespReqMsg, *tpSendProbeRespReqMsg; + +/*--------------------------------------------------------------------------- + *WLAN_HAL_UPDATE_PROBE_RSP_TEMPLATE_RSP + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; +}tSendProbeRespRspParams, *tpSendProbeRespRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tSendProbeRespRspParams sendProbeRespRspParams; +}tSendProbeRespRspMsg, *tpSendProbeRespRspMsg; + + +/*--------------------------------------------------------------------------- + *WLAN_HAL_UNKNOWN_ADDR2_FRAME_RX_IND + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; +}tSendUnkownFrameRxIndParams, *tpSendUnkownFrameRxIndParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tSendUnkownFrameRxIndParams sendUnkownFrameRxIndParams; +}tSendUnkownFrameRxIndMsg, *tpSendUnkownFrameRxIndMsg; + +/*--------------------------------------------------------------------------- + *WLAN_HAL_DELETE_STA_CONTEXT_IND + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U16 assocId; + tANI_U16 staId; + tSirMacAddr bssId; // TO SUPPORT BT-AMP + // HAL copies bssid from the sta table. + tSirMacAddr addr2; // + tANI_U16 reasonCode; // To unify the keepalive / unknown A2 / tim-based disa + +}tDeleteStaContextParams, *tpDeleteStaContextParams; + + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tDeleteStaContextParams deleteStaContextParams; +}tDeleteStaContextIndMsg, *tpDeleteStaContextIndMsg; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tANI_U8 assocId; + tANI_U8 staIdx; + tANI_U8 bssIdx; + tANI_U8 uReasonCode; + tANI_U32 uStatus; +} tIndicateDelSta, *tpIndicateDelSta; + +/*--------------------------------------------------------------------------- + *WLAN_HAL_SIGNAL_BTAMP_EVENT_REQ + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + tBtAmpEventType btAmpEventType; + +}tBtAmpEventParams, *tpBtAmpEventParams; + + + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tBtAmpEventParams btAmpEventParams; +}tBtAmpEventMsg, *tpBtAmpEventMsg; + +/*--------------------------------------------------------------------------- +*WLAN_HAL_SIGNAL_BTAMP_EVENT_RSP +*--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; +}tBtAmpEventRspParams, *tpBtAmpEventRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tBtAmpEventRspParams btAmpEventRspParams; +}tBtAmpEventRsp, *tpBtAmpEventRsp; + + +/*--------------------------------------------------------------------------- + *WLAN_HAL_TL_HAL_FLUSH_AC_REQ + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + // Station Index. originates from HAL + tANI_U8 ucSTAId; + + // TID for which the transmit queue is being flushed + tANI_U8 ucTid; + +}tTlHalFlushAcParams, *tpTlHalFlushAcParams; + + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tTlHalFlushAcParams tlHalFlushAcParam; +}tTlHalFlushAcReq, *tpTlHalFlushAcReq; + +/*--------------------------------------------------------------------------- +*WLAN_HAL_TL_HAL_FLUSH_AC_RSP +*--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + // Station Index. originates from HAL + tANI_U8 ucSTAId; + + // TID for which the transmit queue is being flushed + tANI_U8 ucTid; + + /* success or failure */ + tANI_U32 status; +}tTlHalFlushAcRspParams, *tpTlHalFlushAcRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tTlHalFlushAcRspParams tlHalFlushAcRspParam; +}tTlHalFlushAcRspMsg, *tpTlHalFlushAcRspMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_ENTER_IMPS_REQ + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; +} tHalEnterImpsReqMsg, *tpHalEnterImpsReqMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_EXIT_IMPS_REQ + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; +} tHalExitImpsReqMsg, *tpHalExitImpsReqMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_ENTER_BMPS_REQ + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 bssIdx; + //TBTT value derived from the last beacon +#ifndef BUILD_QWPTTSTATIC + tANI_U64 tbtt; +#endif + tANI_U8 dtimCount; + //DTIM period given to HAL during association may not be valid, + //if association is based on ProbeRsp instead of beacon. + tANI_U8 dtimPeriod; + + // For CCX and 11R Roaming + tANI_U32 rssiFilterPeriod; + tANI_U32 numBeaconPerRssiAverage; + tANI_U8 bRssiFilterEnable; + +} tHalEnterBmpsReqParams, *tpHalEnterBmpsReqParams; + + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalEnterBmpsReqParams enterBmpsReq; +} tHalEnterBmpsReqMsg, *tpHalEnterBmpsReqMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_EXIT_BMPS_REQ + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 sendDataNull; + tANI_U8 bssIdx; +} tHalExitBmpsReqParams, *tpHalExitBmpsReqParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalExitBmpsReqParams exitBmpsReqParams; +} tHalExitBmpsReqMsg, *tpHalExitBmpsReqMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_MISSED_BEACON_IND + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 bssIdx; +} tHalMissedBeaconIndParams, *tpHalMissedBeaconIndParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalMissedBeaconIndParams missedBeaconIndParams; +} tHalMissedBeaconIndMsg, *tpHalMissedBeaconIndMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_ADD_BCN_FILTER_REQ + *--------------------------------------------------------------------------*/ +/* Beacon Filtering data structures */ +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 offset; + tANI_U8 value; + tANI_U8 bitMask; + tANI_U8 ref; +} tEidByteInfo, *tpEidByteInfo; + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U16 capabilityInfo; + tANI_U16 capabilityMask; + tANI_U16 beaconInterval; + tANI_U16 ieNum; + tANI_U8 bssIdx; + tANI_U8 reserved; +} tBeaconFilterMsg, *tpBeaconFilterMsg; + +/* The above structure would be followed by multiple of below mentioned structure */ +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 elementId; + tANI_U8 checkIePresence; + tEidByteInfo byte; +} tBeaconFilterIe, *tpBeaconFilterIe; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tBeaconFilterMsg addBcnFilterParams; +} tHalAddBcnFilterReqMsg, *tpHalAddBcnFilterReqMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_REM_BCN_FILTER_REQ + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 ucIeCount; + tANI_U8 ucRemIeId[1]; +} tRemBeaconFilterMsg, *tpRemBeaconFilterMsg; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tRemBeaconFilterMsg remBcnFilterParams; +} tHalRemBcnFilterReqMsg, *tpHalRemBcnFilterReqMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_HOST_OFFLOAD_REQ + *--------------------------------------------------------------------------*/ +#define HAL_IPV4_ARP_REPLY_OFFLOAD 0 +#define HAL_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD 1 +#define HAL_IPV6_NS_OFFLOAD 2 +#define HAL_IPV6_ADDR_LEN 16 +#define HAL_MAC_ADDR_LEN 6 +#define HAL_OFFLOAD_DISABLE 0 +#define HAL_OFFLOAD_ENABLE 1 +#define HAL_OFFLOAD_BCAST_FILTER_ENABLE 0x2 +#define HAL_OFFLOAD_MCAST_FILTER_ENABLE 0x4 +#define HAL_OFFLOAD_ARP_AND_BCAST_FILTER_ENABLE (HAL_OFFLOAD_ENABLE|HAL_OFFLOAD_BCAST_FILTER_ENABLE) +#define HAL_OFFLOAD_IPV6NS_AND_MCAST_FILTER_ENABLE (HAL_OFFLOAD_ENABLE|HAL_OFFLOAD_MCAST_FILTER_ENABLE) + +typedef PACKED_PRE struct PACKED_POST _tHalNSOffloadParams +{ + tANI_U8 srcIPv6Addr[HAL_IPV6_ADDR_LEN]; + tANI_U8 selfIPv6Addr[HAL_IPV6_ADDR_LEN]; + //Only support 2 possible Network Advertisement IPv6 address + tANI_U8 targetIPv6Addr1[HAL_IPV6_ADDR_LEN]; + tANI_U8 targetIPv6Addr2[HAL_IPV6_ADDR_LEN]; + tANI_U8 selfMacAddr[HAL_MAC_ADDR_LEN]; + tANI_U8 srcIPv6AddrValid : 1; + tANI_U8 targetIPv6Addr1Valid : 1; + tANI_U8 targetIPv6Addr2Valid : 1; + tANI_U8 reserved1 : 5; + tANI_U8 reserved2; //make it DWORD aligned + tANI_U8 bssIdx; + tANI_U32 slotIndex; // slot index for this offload +} tHalNSOffloadParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 offloadType; + tANI_U8 enableOrDisable; + PACKED_PRE union PACKED_POST + { + tANI_U8 hostIpv4Addr [4]; + tANI_U8 hostIpv6Addr [HAL_IPV6_ADDR_LEN]; + } params; +} tHalHostOffloadReq, *tpHalHostOffloadReq; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalHostOffloadReq hostOffloadParams; + tHalNSOffloadParams nsOffloadParams; +} tHalHostOffloadReqMsg, *tpHalHostOffloadReqMsg; + + +#ifdef FEATURE_WLAN_LPHB +typedef enum +{ + WIFI_HB_SET_ENABLE = 0x0001, + WIFI_HB_SET_TCP_PARAMS = 0x0002, + WIFI_HB_SET_TCP_PKT_FILTER = 0x0003, + WIFI_HB_SET_UDP_PARAMS = 0x0004, + WIFI_HB_SET_UDP_PKT_FILTER = 0x0005, + WIFI_HB_SET_NETWORK_INFO = 0x0006, +}tLowPowerHeartBeatCmdType ; + +#define MAX_FLITER_SIZE 64 +/*--------------------------------------------------------------------------- + *FEATURE_WLAN_LPHB REQ + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + uint32 hostIpv4Addr; + uint32 destIpv4Addr; + uint16 hostPort; + uint16 destPort; + uint16 timeOutSec; // in seconds + tSirMacAddr gatewayMacAddr; + uint16 timePeriodSec; // in seconds + uint32 tcpSn; +} tlowPowerHeartBeatParamsTcpStruct; + +typedef PACKED_PRE struct PACKED_POST +{ + uint32 hostIpv4Addr; + uint32 destIpv4Addr; + uint16 hostPort; + uint16 destPort; + uint16 timePeriodSec;// in seconds + uint16 timeOutSec; // in seconds + tSirMacAddr gatewayMacAddr; +} tlowPowerHeartBeatParamsUdpStruct; + +typedef PACKED_PRE struct PACKED_POST +{ + uint32 offset; + uint32 filterLength; + uint8 filter[MAX_FLITER_SIZE]; +} tlowPowerHeartBeatFilterStruct; + +typedef PACKED_PRE struct PACKED_POST +{ + uint8 heartBeatEnable; + uint8 heartBeatType; //TCP or UDP +} tlowPowerHeartBeatEnableStruct; + +typedef PACKED_PRE struct PACKED_POST +{ + uint8 dummy; +} tlowPowerHeartBeatNetworkInfoStruct; + + +typedef PACKED_PRE struct PACKED_POST +{ + uint8 sessionIdx; + uint16 lowPowerHeartBeatCmdType; + PACKED_PRE union PACKED_PRO + { + tlowPowerHeartBeatEnableStruct control; + tlowPowerHeartBeatFilterStruct tcpUdpFilter; + tlowPowerHeartBeatParamsTcpStruct tcpParams; + tlowPowerHeartBeatParamsUdpStruct udpParams; + tlowPowerHeartBeatNetworkInfoStruct info; + }options; +} tHalLowPowerHeartBeatReq, *tpHalLowPowerHeartBeatReq; + + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalLowPowerHeartBeatReq lowPowerHeartBeatParams; +} tHalLowPowerHeartBeatReqMsg, *tpHalLowPowerHeartBeatReqMsg; + +/*--------------------------------------------------------------------------- + * FEATURE_WLAN_LPHB RSP + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + uint8 sessionIdx; + uint32 status; + uint16 lowPowerHeartBeatCmdType; +}tHalLowPowerHeartBeatRspParams, *tpHalLowPowerHeartBeatRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalLowPowerHeartBeatRspParams lowPowerHeartBeatRspParams; +}tHalLowPowerHeartBeatRspMsg, *tpHalLowPowerHeartBeatRspMsg; + + +/*--------------------------------------------------------------------------- + * FEATURE_WLAN_LPHB IND + *--------------------------------------------------------------------------*/ +#define WIFI_HB_EVENT_TCP_RX_TIMEOUT 0x0001 +#define WIFI_HB_EVENT_UDP_RX_TIMEOUT 0x0002 + +#define WIFI_LPHB_EVENT_REASON_TIMEOUT 0x01 +#define WIFI_LPHB_EVENT_REASON_FW_ON_MONITOR 0x02 +#define WIFI_LPHB_EVENT_REASON_FW_OFF_MONITOR 0x03 + + +#define WIFI_LPHB_PROTO_UDP 0x01 +#define WIFI_LPHB_PROTO_TCP 0x02 + +typedef PACKED_PRE struct PACKED_POST +{ + uint8 bssIdx; + uint8 sessionIdx; + uint8 protocolType; /*TCP or UDP*/ + uint8 eventReason; + +}tHalLowPowerHeartBeatIndParam,*tpHalLowPowerHeartBeatIndParam; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalLowPowerHeartBeatIndParam lowPowerHeartBeatIndParams; +}tHalLowPowerHeartBeatIndMsg, *tpHalLowPowerHeartBeatIndMsg; + +#endif + +#ifdef FEATURE_WLAN_BATCH_SCAN + +/*--------------------------------------------------------------------------- + * WLAN_HAL_BATCHSCAN_SET_REQ + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* Scan Frerquency - default to 30Sec*/ + tANI_U32 scanInterval; + tANI_U32 numScan2Batch; + tANI_U32 bestNetworks; + tANI_U8 rfBand; + tANI_U8 rtt; +} tHalBatchScanSetParams, *tpHalBatchScanSetParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalBatchScanSetParams batchScanParams; +} tHalBatchScanSetReqMsg, *tpHalBatchScanSetReqMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_BATCHSCAN_SET_RSP + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U32 supportedMscan; +} tHalBatchScanSetRspParam, *tpHalBatchScanSetRspParam; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalBatchScanSetRspParam setBatchScanRspParam; +} tHalBatchScanSetRspMsg, *tpHalBatchScanSetRspMsg; + +/*--------------------------------------------------------------------------- +* WLAN_HAL_BATCHSCAN_STOP_IND +*--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U32 param; +} tHalBatchScanStopIndParam, *tpHalBatchScanStopIndParam; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalBatchScanStopIndParam param; +} tHalBatchScanStopIndMsg, *tpHalBatchScanStopIndMsg; + +/*--------------------------------------------------------------------------- +* WLAN_HAL_BATCHSCAN_TRIGGER_RESULT_IND +*--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U32 param; +} tHalBatchScanTriggerResultParam, *tpHalBatchScanTriggerResultParam; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalBatchScanTriggerResultParam param; +} tHalBatchScanTriggerResultIndMsg, *tpHalBatchScanTriggerResultIndMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_BATCHSCAN_GET_RSP + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 bssid[6]; /* BSSID */ + tANI_U8 ssid[32]; /* SSID */ + tANI_U8 ch; /* Channel */ + tANI_U8 rssi; /* RSSI or Level */ + /* Timestamp when Network was found. Used to calculate age based on timestamp in GET_RSP msg header */ + tANI_U32 timestamp; +} tHalBatchScanNetworkInfo, *tpHalBatchScanNetworkInfo; + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U32 scanId; /* Scan List ID. */ + /* No of AP in a Scan Result. Should be same as bestNetwork in SET_REQ msg */ + tANI_U32 numNetworksInScanList; + /* Variable data ptr: Number of AP in Scan List */ + /* following numNetworkInScanList is data of type tHalBatchScanNetworkInfo + * of sizeof(tHalBatchScanNetworkInfo) * numNetworkInScanList */ + tANI_U8 scanList[1]; +} tHalBatchScanList, *tpHalBatchScanList; + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U32 timestamp; + tANI_U32 numScanLists; + boolean isLastResult; + /* Variable Data ptr: Number of Scan Lists*/ + /* following isLastResult is data of type tHalBatchScanList + * of sizeof(tHalBatchScanList) * numScanLists*/ + tANI_U8 scanResults[1]; +} tHalBatchScanResultIndParam, *tpHalBatchScanResultIndParam; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalBatchScanResultIndParam resultIndMsgParam; +} tHalBatchScanResultIndMsg, *tpHalBatchScanResultIndMsg; + +#endif + +/*--------------------------------------------------------------------------- + * WLAN_HAL_KEEP_ALIVE_REQ + *--------------------------------------------------------------------------*/ +/* Packet Types. */ +#define HAL_KEEP_ALIVE_NULL_PKT 1 +#define HAL_KEEP_ALIVE_UNSOLICIT_ARP_RSP 2 + +/* Enable or disable keep alive */ +#define HAL_KEEP_ALIVE_DISABLE 0 +#define HAL_KEEP_ALIVE_ENABLE 1 + +/* Keep Alive request. */ +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 packetType; + tANI_U32 timePeriod; + tHalIpv4Addr hostIpv4Addr; + tHalIpv4Addr destIpv4Addr; + tSirMacAddr destMacAddr; + tANI_U8 bssIdx; +} tHalKeepAliveReq, *tpHalKeepAliveReq; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalKeepAliveReq KeepAliveParams; +} tHalKeepAliveReqMsg, *tpHalKeepAliveReqMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_SET_RSSI_THRESH_REQ + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tANI_S8 ucRssiThreshold1 : 8; + tANI_S8 ucRssiThreshold2 : 8; + tANI_S8 ucRssiThreshold3 : 8; + tANI_U8 bRssiThres1PosNotify : 1; + tANI_U8 bRssiThres1NegNotify : 1; + tANI_U8 bRssiThres2PosNotify : 1; + tANI_U8 bRssiThres2NegNotify : 1; + tANI_U8 bRssiThres3PosNotify : 1; + tANI_U8 bRssiThres3NegNotify : 1; + tANI_U8 bReserved10 : 2; +} tHalRSSIThresholds, *tpHalRSSIThresholds; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalRSSIThresholds rssiThreshParams; +} tHalRSSIThresholdReqMsg, *tpHalRSSIThresholdReqMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_ENTER_UAPSD_REQ + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 bkDeliveryEnabled:1; + tANI_U8 beDeliveryEnabled:1; + tANI_U8 viDeliveryEnabled:1; + tANI_U8 voDeliveryEnabled:1; + tANI_U8 bkTriggerEnabled:1; + tANI_U8 beTriggerEnabled:1; + tANI_U8 viTriggerEnabled:1; + tANI_U8 voTriggerEnabled:1; + tANI_U8 bssIdx; +} tUapsdReqParams, *tpUapsdReqParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tUapsdReqParams enterUapsdParams; +} tHalEnterUapsdReqMsg, *tpHalEnterUapsdReqMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_EXIT_UAPSD_REQ + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tANI_U8 bssIdx; +} tHalExitUapsdReqMsg, *tpHalExitUapsdReqMsg; + +#define HAL_PERIODIC_TX_PTRN_MAX_SIZE 1536 +#define HAL_MAXNUM_PERIODIC_TX_PTRNS 6 +/*--------------------------------------------------------------------------- + * WLAN_HAL_ADD_PERIODIC_TX_PTRN_IND + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U32 selfStaIdx:8; + tANI_U32 ucPtrnId:8; // Pattern ID + tANI_U32 usPtrnSize:16; // Non-Zero Pattern size + tANI_U32 uPtrnIntervalMs; // In msec + tANI_U8 ucPattern[HAL_PERIODIC_TX_PTRN_MAX_SIZE]; // Pattern buffer +} tHalAddPeriodicTxPtrn, *tpHalAddPeriodicTxPtrn; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalAddPeriodicTxPtrn ptrnParams; +} tHalAddPeriodicTxPtrnIndMsg, *tpHalAddPeriodicTxPtrnIndMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_DEL_PERIODIC_TX_PTRN_IND + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U32 selfStaIdx:8; + tANI_U32 rsvd:24; + /* Bitmap of pattern IDs that needs to be deleted */ + tANI_U32 uPatternIdBitmap; +} tHalDelPeriodicTxPtrn, *tpHalDelPeriodicTxPtrn; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalDelPeriodicTxPtrn ptrnParams; +} tHalDelPeriodicTxPtrnIndMsg, *tpHalDelPeriodicTxPtrnIndMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_PERIODIC_TX_PTRN_FW_IND + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* Type of Failure indication */ + tANI_U32 bssIdx:8; + tANI_U32 selfStaIdx:8; + tANI_U32 rsvd:16; + tANI_U32 status; + tANI_U32 patternIdBitmap; +} tHalPeriodicTxPtrnFwInd, *tpHalPeriodicTxPtrnFwInd; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalPeriodicTxPtrnFwInd fwIndParams; +} tHalPeriodicTxPtrnFwIndMsg, *tpHalPeriodicTxPtrnFwIndMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_ADD_WOWL_BCAST_PTRN + *--------------------------------------------------------------------------*/ +#define HAL_WOWL_BCAST_PATTERN_MAX_SIZE 128 +#define HAL_WOWL_BCAST_MAX_NUM_PATTERNS 16 + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 ucPatternId; // Pattern ID + // Pattern byte offset from beginning of the 802.11 packet to start of the + // wake-up pattern + tANI_U8 ucPatternByteOffset; + tANI_U8 ucPatternSize; // Non-Zero Pattern size + tANI_U8 ucPattern[HAL_WOWL_BCAST_PATTERN_MAX_SIZE]; // Pattern + tANI_U8 ucPatternMaskSize; // Non-zero pattern mask size + tANI_U8 ucPatternMask[HAL_WOWL_BCAST_PATTERN_MAX_SIZE]; // Pattern mask + tANI_U8 ucPatternExt[HAL_WOWL_BCAST_PATTERN_MAX_SIZE]; // Extra pattern + tANI_U8 ucPatternMaskExt[HAL_WOWL_BCAST_PATTERN_MAX_SIZE]; // Extra pattern mask + tANI_U8 bssIdx; +} tHalWowlAddBcastPtrn, *tpHalWowlAddBcastPtrn; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalWowlAddBcastPtrn ptrnParams; +} tHalWowlAddBcastPtrnReqMsg, *tpHalWowlAddBcastPtrnReqMsg; + + + +/*--------------------------------------------------------------------------- + * WLAN_HAL_DEL_WOWL_BCAST_PTRN + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* Pattern ID of the wakeup pattern to be deleted */ + tANI_U8 ucPatternId; + tANI_U8 bssIdx; +} tHalWowlDelBcastPtrn, *tpHalWowlDelBcastPtrn; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalWowlDelBcastPtrn ptrnParams; +} tHalWowlDelBcastPtrnReqMsg, *tpHalWowlDelBcastPtrnReqMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_ENTER_WOWL_REQ + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* Enables/disables magic packet filtering */ + tANI_U8 ucMagicPktEnable; + + /* Magic pattern */ + tSirMacAddr magicPtrn; + + /* Enables/disables packet pattern filtering in firmware. + Enabling this flag enables broadcast pattern matching + in Firmware. If unicast pattern matching is also desired, + ucUcastPatternFilteringEnable flag must be set tot true + as well + */ + tANI_U8 ucPatternFilteringEnable; + + /* Enables/disables unicast packet pattern filtering. + This flag specifies whether we want to do pattern match + on unicast packets as well and not just broadcast packets. + This flag has no effect if the ucPatternFilteringEnable + (main controlling flag) is set to false + */ + tANI_U8 ucUcastPatternFilteringEnable; + + /* This configuration is valid only when magicPktEnable=1. + * It requests hardware to wake up when it receives the + * Channel Switch Action Frame. + */ + tANI_U8 ucWowChnlSwitchRcv; + + /* This configuration is valid only when magicPktEnable=1. + * It requests hardware to wake up when it receives the + * Deauthentication Frame. + */ + tANI_U8 ucWowDeauthRcv; + + /* This configuration is valid only when magicPktEnable=1. + * It requests hardware to wake up when it receives the + * Disassociation Frame. + */ + tANI_U8 ucWowDisassocRcv; + + /* This configuration is valid only when magicPktEnable=1. + * It requests hardware to wake up when it has missed + * consecutive beacons. This is a hardware register + * configuration (NOT a firmware configuration). + */ + tANI_U8 ucWowMaxMissedBeacons; + + /* This configuration is valid only when magicPktEnable=1. + * This is a timeout value in units of microsec. It requests + * hardware to unconditionally wake up after it has stayed + * in WoWLAN mode for some time. Set 0 to disable this feature. + */ + tANI_U8 ucWowMaxSleepUsec; + + /* This configuration directs the WoW packet filtering to look for EAP-ID + * requests embedded in EAPOL frames and use this as a wake source. + */ + tANI_U8 ucWoWEAPIDRequestEnable; + + /* This configuration directs the WoW packet filtering to look for EAPOL-4WAY + * requests and use this as a wake source. + */ + tANI_U8 ucWoWEAPOL4WayEnable; + + /* This configuration allows a host wakeup on an network scan offload match. + */ + tANI_U8 ucWowNetScanOffloadMatch; + + /* This configuration allows a host wakeup on any GTK rekeying error. + */ + tANI_U8 ucWowGTKRekeyError; + + /* This configuration allows a host wakeup on BSS connection loss. + */ + tANI_U8 ucWoWBSSConnLoss; + + tANI_U8 bssIdx; + +} tHalWowlEnterParams, *tpHalWowlEnterParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalWowlEnterParams enterWowlParams; +} tHalWowlEnterReqMsg, *tpHalWowlEnterReqMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_EXIT_WOWL_REQ + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 bssIdx; + +} tHalWowlExitParams, *tpHalWowlExitParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalWowlExitParams exitWowlParams; +} tHalWowlExitReqMsg, *tpHalWowlExitReqMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_GET_RSSI_REQ + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; +} tHalGetRssiReqMsg, *tpHalGetRssiReqMsg; + +typedef PACKED_PRE struct PACKED_POST +{ + /* Valid STA Idx for per STA stats request */ + tANI_U32 staId; + +}tHalRoamRssiReqParams, *tpHalRoamRssiReqParams; + + +/*--------------------------------------------------------------------------- + * WLAN_HAL_GET_ROAM_RSSI_REQ + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalRoamRssiReqParams roamRssiReqParams; +} tHalGetRoamRssiReqMsg, *tpHalGetRoamRssiReqMsg; + + +/*--------------------------------------------------------------------------- + * WLAN_HAL_SET_UAPSD_AC_PARAMS_REQ + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST { + tANI_U8 staidx; // STA index + tANI_U8 ac; // Access Category + tANI_U8 up; // User Priority + tANI_U32 srvInterval; // Service Interval + tANI_U32 susInterval; // Suspend Interval + tANI_U32 delayInterval; // Delay Interval +} tUapsdInfo, tpUapsdInfo; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tUapsdInfo enableUapsdAcParams; +} tHalSetUapsdAcParamsReqMsg, *tpHalSetUapsdAcParamsReqMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_CONFIGURE_RXP_FILTER_REQ + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST { + tANI_U8 setMcstBcstFilterSetting; + tANI_U8 setMcstBcstFilter; +} tHalConfigureRxpFilterReqParams, tpHalConfigureRxpFilterReqParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalConfigureRxpFilterReqParams configureRxpFilterReqParams; +} tHalConfigureRxpFilterReqMsg, *tpHalConfigureRxpFilterReqMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_ENTER_IMPS_RSP + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; +} tHalEnterImpsRspParams, *tpHalEnterImpsRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalEnterImpsRspParams enterImpsRspParams; +} tHalEnterImpsRspMsg, *tpHalEnterImpsRspMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_EXIT_IMPS_RSP + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; +} tHalExitImpsRspParams, *tpHalExitImpsRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalExitImpsRspParams exitImpsRspParams; +} tHalExitImpsRspMsg, *tpHalExitImpsRspMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_ENTER_BMPS_RSP + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; + tANI_U8 bssIdx; +} tHalEnterBmpsRspParams, *tpHalEnterBmpsRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalEnterBmpsRspParams enterBmpsRspParams; +} tHalEnterBmpsRspMsg, *tpHalEnterBmpsRspMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_EXIT_BMPS_RSP + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; + tANI_U8 bssIdx; +} tHalExitBmpsRspParams, *tpHalExitBmpsRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalExitBmpsRspParams exitBmpsRspParams; +} tHalExitBmpsRspMsg, *tpHalExitBmpsRspMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_ENTER_UAPSD_RSP + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; + tANI_U8 bssIdx; +}tUapsdRspParams, *tpUapsdRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tUapsdRspParams enterUapsdRspParams; +} tHalEnterUapsdRspMsg, *tpHalEnterUapsdRspMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_EXIT_UAPSD_RSP + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; + tANI_U8 bssIdx; +} tHalExitUapsdRspParams, *tpHalExitUapsdRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalExitUapsdRspParams exitUapsdRspParams; +} tHalExitUapsdRspMsg, *tpHalExitUapsdRspMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_RSSI_NOTIFICATION_IND + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U32 bRssiThres1PosCross : 1; + tANI_U32 bRssiThres1NegCross : 1; + tANI_U32 bRssiThres2PosCross : 1; + tANI_U32 bRssiThres2NegCross : 1; + tANI_U32 bRssiThres3PosCross : 1; + tANI_U32 bRssiThres3NegCross : 1; + tANI_U32 avgRssi : 8; + tANI_U32 uBssIdx : 8; + tANI_U32 isBTCoexCompromise : 1; + tANI_U32 bReserved : 9; +} tHalRSSINotification, *tpHalRSSINotification; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalRSSINotification rssiNotificationParams; +} tHalRSSINotificationIndMsg, *tpHalRSSINotificationIndMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_GET_RSSI_RSP + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; + tANI_S8 rssi; +} tHalGetRssiParams, *tpHalGetRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalGetRssiParams rssiRspParams; +} tHalGetRssiRspMsg, *tpHalGetRssiRspMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_GET_ROAM_RSSI_RSP + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; + + tANI_U8 staId; + tANI_S8 rssi; +} tHalGetRoamRssiParams, *tpHalGetRoamRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalGetRoamRssiParams roamRssiRspParams; +} tHalGetRoamRssiRspMsg, *tpHalGetRoamRssiRspMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_ENTER_WOWL_RSP + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; + tANI_U8 bssIdx; +} tHalEnterWowlRspParams, *tpHalEnterWowlRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalEnterWowlRspParams enterWowlRspParams; +} tHalWowlEnterRspMsg, *tpHalWowlEnterRspMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_EXIT_WOWL_RSP + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; + tANI_U8 bssIdx; +} tHalExitWowlRspParams, *tpHalExitWowlRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalExitWowlRspParams exitWowlRspParams; +} tHalWowlExitRspMsg, *tpHalWowlExitRspMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_ADD_BCN_FILTER_RSP + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; +} tHalAddBcnFilterRspParams, *tpHalAddBcnFilterRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalAddBcnFilterRspParams addBcnFilterRspParams; +} tHalAddBcnFilterRspMsg, *tpHalAddBcnFilterRspMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_REM_BCN_FILTER_RSP + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; +} tHalRemBcnFilterRspParams, *tpHalRemBcnFilterRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalRemBcnFilterRspParams remBcnFilterRspParams; +} tHalRemBcnFilterRspMsg, *tpHalRemBcnFilterRspMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_ADD_WOWL_BCAST_PTRN_RSP + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; + tANI_U8 bssIdx; +} tHalAddWowlBcastPtrnRspParams, *tpHalAddWowlBcastPtrnRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalAddWowlBcastPtrnRspParams addWowlBcastPtrnRspParams; +} tHalAddWowlBcastPtrnRspMsg, *tpHalAddWowlBcastPtrnRspMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_DEL_WOWL_BCAST_PTRN_RSP + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; + tANI_U8 bssIdx; +} tHalDelWowlBcastPtrnRspParams, *tpHalDelWowlBcastPtrnRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalDelWowlBcastPtrnRspParams delWowlBcastRspParams; +} tHalDelWowlBcastPtrnRspMsg, *tpHalDelWowlBcastPtrnRspMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_HOST_OFFLOAD_RSP + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; +} tHalHostOffloadRspParams, *tpHalHostOffloadRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalHostOffloadRspParams hostOffloadRspParams; +} tHalHostOffloadRspMsg, *tpHalHostOffloadRspMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_KEEP_ALIVE_RSP + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; +} tHalKeepAliveRspParams, *tpHalKeepAliveRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalKeepAliveRspParams keepAliveRspParams; +} tHalKeepAliveRspMsg, *tpHalKeepAliveRspMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_SET_RSSI_THRESH_RSP + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; +} tHalSetRssiThreshRspParams, *tpHalSetRssiThreshRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalSetRssiThreshRspParams setRssiThreshRspParams; +} tHalSetRssiThreshRspMsg, *tpHalSetRssiThreshRspMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_SET_UAPSD_AC_PARAMS_RSP + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; +} tHalSetUapsdAcParamsRspParams, *tpHalSetUapsdAcParamsRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalSetUapsdAcParamsRspParams setUapsdAcParamsRspParams; +} tHalSetUapsdAcParamsRspMsg, *tpHalSetUapsdAcParamsRspMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_CONFIGURE_RXP_FILTER_RSP + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; +} tHalConfigureRxpFilterRspParams, *tpHalConfigureRxpFilterRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalConfigureRxpFilterRspParams configureRxpFilterRspParams; +} tHalConfigureRxpFilterRspMsg, *tpHalConfigureRxpFilterRspMsg; + +/*--------------------------------------------------------------------------- + *WLAN_HAL_SET_MAX_TX_POWER_REQ + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + tSirMacAddr bssId; // BSSID is needed to identify which session issued this request. As + //the request has power constraints, this should be applied only to that session + tSirMacAddr selfStaMacAddr; + //In request, + //power == MaxTx power to be used. + tPowerdBm power; + +}tSetMaxTxPwrParams, *tpSetMaxTxPwrParams; + + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tSetMaxTxPwrParams setMaxTxPwrParams; +}tSetMaxTxPwrReq, *tpSetMaxTxPwrReq; + +/*--------------------------------------------------------------------------- +*WLAN_HAL_SET_MAX_TX_POWER_RSP +*--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + //power == tx power used for management frames. + tPowerdBm power; + + /* success or failure */ + tANI_U32 status; +}tSetMaxTxPwrRspParams, *tpSetMaxTxPwrRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tSetMaxTxPwrRspParams setMaxTxPwrRspParams; +}tSetMaxTxPwrRspMsg, *tpSetMaxTxPwrRspMsg; + + +/*--------------------------------------------------------------------------- + *WLAN_HAL_SET_MAX_TX_POWER_PER_BAND_REQ + *--------------------------------------------------------------------------*/ + +/* Band types for WLAN_HAL_SET_MAX_TX_POWER_PER_BAND_REQ between WDI and HAL */ +typedef enum +{ + WLAN_HAL_SET_MAX_TX_POWER_BAND_ALL = 0, + // For 2.4GHz or 5GHz bands + WLAN_HAL_SET_MAX_TX_POWER_BAND_2_4_GHZ, + WLAN_HAL_SET_MAX_TX_POWER_BAND_5_0_GHZ, + // End of valid enums + WLAN_HAL_SET_MAX_TX_POWER_BAND_MAX = WLAN_HAL_MAX_ENUM_SIZE, +}tHalSetMaxTxPwrBandInfo; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalSetMaxTxPwrBandInfo bandInfo; // 2_4_GHZ or 5_0_GHZ + tPowerdBm power; // In request, power == MaxTx power to be used. +}tSetMaxTxPwrPerBandParams, *tpSetMaxTxPwrPerBandParams; + + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tSetMaxTxPwrPerBandParams setMaxTxPwrPerBandParams; +}tSetMaxTxPwrPerBandReq, *tpSetMaxTxPwrPerBandReq; + +/*--------------------------------------------------------------------------- +*WLAN_HAL_SET_MAX_TX_POWER_PER_BAND_RSP +*--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + //power == tx power used for management frames. + tPowerdBm power; + + /* success or failure */ + tANI_U32 status; +}tSetMaxTxPwrPerBandRspParams, *tpSetMaxTxPwrPerBandRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tSetMaxTxPwrPerBandRspParams setMaxTxPwrPerBandRspParams; +}tSetMaxTxPwrPerBandRspMsg, *tpSetMaxTxPwrPerBandRspMsg; + +/*--------------------------------------------------------------------------- + *WLAN_HAL_SET_TX_POWER_REQ + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /* TX Power in milli watts */ + tANI_U32 txPower; + tANI_U8 bssIdx; +}tSetTxPwrReqParams, *tpSetTxPwrReqParams; + + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tSetTxPwrReqParams setTxPwrReqParams; +}tSetTxPwrReqMsg, *tpSetTxPwrReqMsg; + +/*--------------------------------------------------------------------------- +*WLAN_HAL_SET_TX_POWER_RSP +*--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; +}tSetTxPwrRspParams, *tpSetTxPwrRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tSetTxPwrRspParams setTxPwrRspParams; +}tSetTxPwrRspMsg, *tpSetTxPwrRspMsg; + +/*--------------------------------------------------------------------------- + *WLAN_HAL_GET_TX_POWER_REQ + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 staId; +}tGetTxPwrReqParams, *tpGetTxPwrReqParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tGetTxPwrReqParams getTxPwrReqParams; +}tGetTxPwrReqMsg, *tpGetTxPwrReqMsg; + +/*--------------------------------------------------------------------------- +*WLAN_HAL_GET_TX_POWER_RSP +*--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; + + /* TX Power in milli watts */ + tANI_U32 txPower; +}tGetTxPwrRspParams, *tpGetTxPwrRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tGetTxPwrRspParams getTxPwrRspParams; +}tGetTxPwrRspMsg, *tpGetTxPwrRspMsg; + +#ifdef WLAN_FEATURE_P2P +/*--------------------------------------------------------------------------- + *WLAN_HAL_SET_P2P_GONOA_REQ + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 opp_ps; + tANI_U32 ctWindow; + tANI_U8 count; + tANI_U32 duration; + tANI_U32 interval; + tANI_U32 single_noa_duration; + tANI_U8 psSelection; +}tSetP2PGONOAParams, *tpSetP2PGONOAParams; + + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tSetP2PGONOAParams setP2PGONOAParams; +}tSetP2PGONOAReq, *tpSetP2PGONOAReq; + +/*--------------------------------------------------------------------------- +*WLAN_HAL_SET_P2P_GONOA_RSP +*--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; +}tSetP2PGONOARspParams, *tpSetP2PGONOARspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tSetP2PGONOARspParams setP2PGONOARspParams; +}tSetP2PGONOARspMsg, *tpSetP2PGONOARspMsg; +#endif + +/*--------------------------------------------------------------------------- + *WLAN_HAL_ADD_SELF_STA_REQ + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + tSirMacAddr selfMacAddr; + tANI_U32 status; +}tAddStaSelfParams, *tpAddStaSelfParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tSirMacAddr selfMacAddr; + tANI_U32 status; + tHalIfacePersona iface_persona; +}tAddStaSelfParams_V1, *tpAddStaSelfParams_V1; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + PACKED_PRE union PACKED_POST { + tAddStaSelfParams addStaSelfParams; + tAddStaSelfParams_V1 addStaSelfParams_V1; + }uAddStaSelfParams; +}tAddStaSelfReq, *tpAddStaSelfReq; + +/*--------------------------------------------------------------------------- +*WLAN_HAL_ADD_SELF_STA_RSP +*--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; + + /*Self STA Index */ + tANI_U8 selfStaIdx; + + /* DPU Index (IGTK, PTK, GTK all same) */ + tANI_U8 dpuIdx; + + /* DPU Signature */ + tANI_U8 dpuSignature; + +}tAddStaSelfRspParams, *tpAddStaSelfRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tAddStaSelfRspParams addStaSelfRspParams; +}tAddStaSelfRspMsg, *tpAddStaSelfRspMsg; + + +/*--------------------------------------------------------------------------- + WLAN_HAL_DEL_STA_SELF_REQ +---------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + tSirMacAddr selfMacAddr; + +}tDelStaSelfParams, *tpDelStaSelfParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tDelStaSelfParams delStaSelfParams; +} tDelStaSelfReqMsg, *tpDelStaSelfReqMsg; + + +/*--------------------------------------------------------------------------- + WLAN_HAL_DEL_STA_SELF_RSP +---------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /*success or failure */ + tANI_U32 status; + + tSirMacAddr selfMacAddr; +}tDelStaSelfRspParams, *tpDelStaSelfRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tDelStaSelfRspParams delStaSelfRspParams; +} tDelStaSelfRspMsg, *tpDelStaSelfRspMsg; + + +#ifdef WLAN_FEATURE_VOWIFI_11R + +/*--------------------------------------------------------------------------- + *WLAN_HAL_AGGR_ADD_TS_REQ + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /* Station Index */ + tANI_U16 staIdx; + + /* TSPEC handler uniquely identifying a TSPEC for a STA in a BSS */ + /* This will carry the bitmap with the bit positions representing different AC.s*/ + tANI_U16 tspecIdx; + + /* Tspec info per AC To program TPE with required parameters */ + tSirMacTspecIE tspec[WLAN_HAL_MAX_AC]; + + /* U-APSD Flags: 1b per AC. Encoded as follows: + b7 b6 b5 b4 b3 b2 b1 b0 = + X X X X BE BK VI VO */ + tANI_U8 uAPSD; + + /* These parameters are for all the access categories */ + tANI_U32 srvInterval[WLAN_HAL_MAX_AC]; // Service Interval + tANI_U32 susInterval[WLAN_HAL_MAX_AC]; // Suspend Interval + tANI_U32 delayInterval[WLAN_HAL_MAX_AC]; // Delay Interval + +}tAggrAddTsParams, *tpAggrAddTsParams; + + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tAggrAddTsParams aggrAddTsParam; +}tAggrAddTsReq, *tpAggrAddTsReq; + +/*--------------------------------------------------------------------------- +*WLAN_HAL_AGGR_ADD_TS_RSP +*--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status0; + /* FIXME PRIMA for future use for 11R */ + tANI_U32 status1; +}tAggrAddTsRspParams, *tpAggrAddTsRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tAggrAddTsRspParams aggrAddTsRspParam; +}tAggrAddTsRspMsg, *tpAggrAddTsRspMsg; + +#endif + +/*--------------------------------------------------------------------------- + * WLAN_HAL_CONFIGURE_APPS_CPU_WAKEUP_STATE_REQ + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 isAppsCpuAwake; +} tHalConfigureAppsCpuWakeupStateReqParams, *tpHalConfigureAppsCpuWakeupStatReqParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalConfigureAppsCpuWakeupStateReqParams appsStateReqParams; +} tHalConfigureAppsCpuWakeupStateReqMsg, *tpHalConfigureAppsCpuWakeupStateReqMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_CONFIGURE_APPS_CPU_WAKEUP_STATE_RSP + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; +} tHalConfigureAppsCpuWakeupStateRspParams, *tpHalConfigureAppsCpuWakeupStateRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalConfigureAppsCpuWakeupStateRspParams appsStateRspParams; +} tHalConfigureAppsCpuWakeupStateRspMsg, *tpHalConfigureAppsCpuWakeupStateRspMsg; +/*--------------------------------------------------------------------------- + * WLAN_HAL_DUMP_COMMAND_REQ + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U32 argument1; + tANI_U32 argument2; + tANI_U32 argument3; + tANI_U32 argument4; + tANI_U32 argument5; + +}tHalDumpCmdReqParams,*tpHalDumpCmdReqParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalDumpCmdReqParams dumpCmdReqParams; +} tHalDumpCmdReqMsg, *tpHalDumpCmdReqMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_DUMP_COMMAND_RSP + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; + /*Length of the responce message*/ + tANI_U32 rspLength; + /*FiXME: Currently considering the the responce will be less than 100bytes */ + tANI_U8 rspBuffer[DUMPCMD_RSP_BUFFER]; + +} tHalDumpCmdRspParams, *tpHalDumpCmdRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalDumpCmdRspParams dumpCmdRspParams; +} tHalDumpCmdRspMsg, *tpHalDumpCmdRspMsg; + +/*--------------------------------------------------------------------------- + *WLAN_HAL_COEX_IND + *-------------------------------------------------------------------------*/ +#define WLAN_COEX_IND_DATA_SIZE (4) +#define WLAN_COEX_IND_TYPE_DISABLE_HB_MONITOR (0) +#define WLAN_COEX_IND_TYPE_ENABLE_HB_MONITOR (1) +#define WLAN_COEX_IND_TYPE_SCANS_ARE_COMPROMISED_BY_COEX (2) +#define WLAN_COEX_IND_TYPE_SCANS_ARE_NOT_COMPROMISED_BY_COEX (3) +#define WLAN_COEX_IND_TYPE_DISABLE_AGGREGATION_IN_2p4 (4) +#define WLAN_COEX_IND_TYPE_ENABLE_AGGREGATION_IN_2p4 (5) + +typedef PACKED_PRE struct PACKED_POST +{ + /*Coex Indication Type*/ + tANI_U32 coexIndType; + + /*Coex Indication Data*/ + tANI_U32 coexIndData[WLAN_COEX_IND_DATA_SIZE]; +}tCoexIndParams,*tpCoexIndParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tCoexIndParams coexIndParams; +}tCoexIndMsg, *tpCoexIndMsg; + +/*--------------------------------------------------------------------------- + *WLAN_HAL_OTA_TX_COMPL_IND + *-------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /*Tx Complete Indication Success or Failure*/ + tANI_U32 status; +}tTxComplParams,*tpTxComplParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tTxComplParams txComplParams; +}tTxComplIndMsg, *tpTxComplIndMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_HOST_SUSPEND_IND + *-------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U32 configuredMcstBcstFilterSetting; + tANI_U32 activeSessionCount; +}tHalWlanHostSuspendIndParam,*tpHalWlanHostSuspendIndParam; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalWlanHostSuspendIndParam suspendIndParams; +}tHalWlanHostSuspendIndMsg, *tpHalWlanHostSuspendIndMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_EXCLUDE_UNENCRYTED_IND + *-------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_BOOLEAN bDot11ExcludeUnencrypted; + tSirMacAddr bssId; +}tHalWlanExcludeUnEncryptedIndParam,*tpHalWlanExcludeUnEncryptedIndParam; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalWlanExcludeUnEncryptedIndParam excludeUnEncryptedIndParams; +}tHalWlanExcludeUnEncrptedIndMsg, *tpHalWlanExcludeUnEncrptedIndMsg; + +#ifdef WLAN_FEATURE_P2P +/*--------------------------------------------------------------------------- + *WLAN_HAL_NOA_ATTR_IND + *-------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 index ; + tANI_U8 oppPsFlag ; + tANI_U16 ctWin ; + + tANI_U16 uNoa1IntervalCnt; + tANI_U16 bssIdx; + tANI_U32 uNoa1Duration; + tANI_U32 uNoa1Interval; + tANI_U32 uNoa1StartTime; + + tANI_U16 uNoa2IntervalCnt; + tANI_U16 rsvd2; + tANI_U32 uNoa2Duration; + tANI_U32 uNoa2Interval; + tANI_U32 uNoa2StartTime; + + tANI_U32 status; +}tNoaAttrIndParams, *tpNoaAttrIndParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tNoaAttrIndParams noaAttrIndParams; +}tNoaAttrIndMsg, *tpNoaAttrIndMsg; + +/*--------------------------------------------------------------------------- + *WLAN_HAL_NOA_START_IND + *-------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U32 status; + tANI_U32 bssIdx; +}tNoaStartIndParams, *tpNoaStartIndParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tNoaStartIndParams noaStartIndParams; +}tNoaStartIndMsg, tpNoaStartIndMsg; +#endif + +/*--------------------------------------------------------------------------- + * WLAN_HAL_HOST_RESUME_REQ + *-------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 configuredMcstBcstFilterSetting; +}tHalWlanHostResumeReqParam,*tpHalWlanHostResumeReqParam; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalWlanHostResumeReqParam resumeReqParams; +}tHalWlanHostResumeReqMsg, *tpHalWlanHostResumeReqMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_HOST_RESUME_RSP + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; +} tHalHostResumeRspParams, *tpHalHostResumeRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalHostResumeRspParams hostResumeRspParams; +} tHalHostResumeRspMsg, *tpHalHostResumeRspMsg; + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U16 staIdx; + // Peer MAC Address, whose BA session has timed out + tSirMacAddr peerMacAddr; + // TID for which a BA session timeout is being triggered + tANI_U8 baTID; + // DELBA direction + // 1 - Originator + // 0 - Recipient + tANI_U8 baDirection; + tANI_U32 reasonCode; + tSirMacAddr bssId; // TO SUPPORT BT-AMP +} tHalWlanDelBaIndMsg, *tpHalWlanDelBaIndMsg; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalWlanDelBaIndMsg hostdelBaParam; +} tHalDelBAIndMsg, *tpHalDelBAIndMsg; + +/*--------------------------------------------------------------------------- + *PNO Messages + *-------------------------------------------------------------------------*/ +/* Max number of channels that a network can be found on*/ +/* WLAN_HAL_PNO_MAX_NETW_CHANNELS and WLAN_HAL_PNO_MAX_NETW_CHANNELS_EX should + * be changed at same time + */ +#define WLAN_HAL_PNO_MAX_NETW_CHANNELS 60 + +/*Max number of channels that a network can be found on*/ +#define WLAN_HAL_PNO_MAX_NETW_CHANNELS_EX 60 + +/*Maximum numbers of networks supported by PNO*/ +#define WLAN_HAL_PNO_MAX_SUPP_NETWORKS 16 + +/*The number of scan time intervals that can be programmed into PNO*/ +#define WLAN_HAL_PNO_MAX_SCAN_TIMERS 10 + +/*Maximum size of the probe template*/ +#define WLAN_HAL_PNO_MAX_PROBE_SIZE 450 + +/*Type of PNO enabling + Immediate - scanning will start immediately and PNO procedure will + be repeated based on timer + Suspend - scanning will start at suspend + Resume - scanning will start on system resume + Delay - start the scan timer to trigger PNO scan + */ +typedef enum +{ + ePNO_MODE_IMMEDIATE, + ePNO_MODE_ON_SUSPEND, + ePNO_MODE_ON_RESUME, + ePNO_MODE_DELAY, + ePNO_MODE_PROXIMITY, // FEATURE_WIFI_PROXIMITY + ePNO_MODE_MAX = WLAN_HAL_MAX_ENUM_SIZE +} ePNOMode; + +/*Authentication type*/ +typedef enum +{ + eAUTH_TYPE_ANY = 0, + eAUTH_TYPE_OPEN_SYSTEM = 1, + + // Upper layer authentication types + eAUTH_TYPE_WPA = 2, + eAUTH_TYPE_WPA_PSK = 3, + + eAUTH_TYPE_RSN = 4, + eAUTH_TYPE_RSN_PSK = 5, + eAUTH_TYPE_FT_RSN = 6, + eAUTH_TYPE_FT_RSN_PSK = 7, + eAUTH_TYPE_WAPI_WAI_CERTIFICATE = 8, + eAUTH_TYPE_WAPI_WAI_PSK = 9, + eAUTH_TYPE_CCKM_WPA = 10, + eAUTH_TYPE_CCKM_RSN = 11, + + eAUTH_TYPE_MAX = WLAN_HAL_MAX_ENUM_SIZE + +}tAuthType; + +/* Encryption type */ +typedef enum eEdType +{ + eED_ANY = 0, + eED_NONE = 1, + eED_WEP = 2, + eED_TKIP = 3, + eED_CCMP = 4, + eED_WPI = 5, + + eED_TYPE_MAX = WLAN_HAL_MAX_ENUM_SIZE +} tEdType; + +/* SSID broadcast type */ +typedef enum eSSIDBcastType +{ + eBCAST_UNKNOWN = 0, + eBCAST_NORMAL = 1, + eBCAST_HIDDEN = 2, + + eBCAST_TYPE_MAX = WLAN_HAL_MAX_ENUM_SIZE +} tSSIDBcastType; + +/* + The network description for which PNO will have to look for +*/ +typedef PACKED_PRE struct PACKED_POST +{ + /*SSID of the BSS*/ + tSirMacSSid ssId; + + /*Authentication type for the network*/ + tAuthType authentication; + + /*Encryption type for the network*/ + tEdType encryption; + + /*Indicate the channel on which the Network can be found + 0 - if all channels */ + tANI_U8 ucChannelCount; + tANI_U8 aChannels[WLAN_HAL_PNO_MAX_NETW_CHANNELS]; + + /*Indicates the RSSI threshold for the network to be considered*/ + tANI_U8 rssiThreshold; +}tNetworkType; + +typedef PACKED_PRE struct PACKED_POST +{ + /*How much it should wait */ + tANI_U32 uTimerValue; + + /*How many times it should repeat that wait value + 0 - keep using this timer until PNO is disabled*/ + tANI_U32 uTimerRepeat; + + /*e.g: 2 3 + 4 0 + - it will wait 2s between consecutive scans for 3 times + - after that it will wait 4s between consecutive scans until disabled*/ +}tScanTimer; + +/* + The network parameters to be sent to the PNO algorithm +*/ +typedef PACKED_PRE struct PACKED_POST +{ + /*set to 0 if you wish for PNO to use its default telescopic timer*/ + tANI_U8 ucScanTimersCount; + + /*A set value represents the amount of time that PNO will wait between + two consecutive scan procedures + If the desired is for a uniform timer that fires always at the exact same + interval - one single value is to be set + If there is a desire for a more complex - telescopic like timer multiple + values can be set - once PNO reaches the end of the array it will + continue scanning at intervals presented by the last value*/ + tScanTimer aTimerValues[WLAN_HAL_PNO_MAX_SCAN_TIMERS]; + +}tScanTimersType; + +typedef PACKED_PRE struct PACKED_POST { + + /*Enable PNO*/ + tANI_U32 enable; + + /*Immediate, On Suspend, On Resume*/ + ePNOMode modePNO; + + /*Number of networks sent for PNO*/ + tANI_U32 ucNetworksCount; + + /*The networks that PNO needs to look for*/ + tNetworkType aNetworks[WLAN_HAL_PNO_MAX_SUPP_NETWORKS]; + + /*The scan timers required for PNO*/ + tScanTimersType scanTimers; + + /*Probe template for 2.4GHz band*/ + tANI_U16 us24GProbeSize; + tANI_U8 a24GProbeTemplate[WLAN_HAL_PNO_MAX_PROBE_SIZE]; + + /*Probe template for 5GHz band*/ + tANI_U16 us5GProbeSize; + tANI_U8 a5GProbeTemplate[WLAN_HAL_PNO_MAX_PROBE_SIZE]; + +} tPrefNetwListParams, * tpPrefNetwListParams; + +/* + Preferred network list request +*/ +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tPrefNetwListParams prefNetwListParams; +} tSetPrefNetwListReq, *tpSetPrefNetwListReq; + + +/* + The network description for which PNO will have to look for +*/ +typedef PACKED_PRE struct PACKED_POST +{ + /*SSID of the BSS*/ + tSirMacSSid ssId; + + /*Authentication type for the network*/ + tAuthType authentication; + + /*Encryption type for the network*/ + tEdType encryption; + + /*SSID broadcast type, normal, hidden or unknown*/ + tSSIDBcastType bcastNetworkType; + + /*Indicate the channel on which the Network can be found + 0 - if all channels */ + tANI_U8 ucChannelCount; + tANI_U8 aChannels[WLAN_HAL_PNO_MAX_NETW_CHANNELS]; + + /*Indicates the RSSI threshold for the network to be considered*/ + tANI_U8 rssiThreshold; +}tNetworkTypeNew; + +typedef PACKED_PRE struct PACKED_POST { + + /*Enable PNO*/ + tANI_U32 enable; + + /*Immediate, On Suspend, On Resume*/ + ePNOMode modePNO; + + /*Number of networks sent for PNO*/ + tANI_U32 ucNetworksCount; + + /*The networks that PNO needs to look for*/ + tNetworkTypeNew aNetworks[WLAN_HAL_PNO_MAX_SUPP_NETWORKS]; + + /*The scan timers required for PNO*/ + tScanTimersType scanTimers; + + /*Probe template for 2.4GHz band*/ + tANI_U16 us24GProbeSize; + tANI_U8 a24GProbeTemplate[WLAN_HAL_PNO_MAX_PROBE_SIZE]; + + /*Probe template for 5GHz band*/ + tANI_U16 us5GProbeSize; + tANI_U8 a5GProbeTemplate[WLAN_HAL_PNO_MAX_PROBE_SIZE]; + +} tPrefNetwListParamsNew, * tpPrefNetwListParamsNew; + +/* + Preferred network list request new +*/ +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tPrefNetwListParamsNew prefNetwListParams; +} tSetPrefNetwListReqNew, *tpSetPrefNetwListReqNew; + +#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD +typedef PACKED_PRE struct PACKED_POST +{ + tSirMacSSid ssId; + tANI_U8 currAPbssid[HAL_MAC_ADDR_LEN]; + tANI_U32 authentication; + tEdType encryption; + tEdType mcencryption; + tANI_U8 ChannelCount; + tANI_U8 ChannelCache[WLAN_HAL_ROAM_SCAN_MAX_CHANNELS]; +}tRoamNetworkType; + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 mdiePresent; + tANI_U16 mobilityDomain; +}tMobilityDomainInfo; + +typedef PACKED_PRE struct PACKED_POST { + eAniBoolean RoamScanOffloadEnabled; + tANI_S8 LookupThreshold; + tANI_U8 RoamRssiDiff; + tANI_U8 ChannelCacheType; + tANI_U8 Command; + tANI_U8 StartScanReason; + tANI_U16 NeighborScanTimerPeriod; + tANI_U16 NeighborRoamScanRefreshPeriod; + tANI_U16 NeighborScanChannelMinTime; + tANI_U16 NeighborScanChannelMaxTime; + tANI_U16 EmptyRefreshScanPeriod; + tANI_U8 ValidChannelCount; + tANI_U8 ValidChannelList[WLAN_HAL_ROAM_SCAN_MAX_CHANNELS]; + eAniBoolean IsCCXEnabled; + + tANI_U16 us24GProbeSize; + tANI_U8 a24GProbeTemplate[WLAN_HAL_ROAM_SCAN_MAX_PROBE_SIZE]; + tANI_U16 us5GProbeSize; + tANI_U8 a5GProbeTemplate[WLAN_HAL_ROAM_SCAN_MAX_PROBE_SIZE]; + /* Add Reserved bytes */ + tANI_U8 nProbes; + tANI_U16 HomeAwayTime; + eAniBoolean MAWCEnabled; + tANI_U8 ReservedBytes[WLAN_HAL_ROAM_SCAN_RESERVED_BYTES]; + tRoamNetworkType ConnectedNetwork; + tMobilityDomainInfo MDID; +} tRoamCandidateListParams, * tpRoamCandidateListParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tRoamCandidateListParams RoamScanOffloadNetwListParams; +} tSetRoamScanOffloadReq, *tpRoamScanOffloadReq; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + + /* status of the request - just to indicate that PNO has acknowledged + * the request and will start scanning */ + tANI_U32 status; +} tSetRoamOffloadScanResp, *tpSetRoamOffloadScanResp; +#endif + +/* + Preferred network list response +*/ +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + + /* status of the request - just to indicate that PNO has acknowledged + * the request and will start scanning*/ + tANI_U32 status; +} tSetPrefNetwListResp, *tpSetPrefNetwListResp; + +/* + Preferred network indication parameters +*/ +typedef PACKED_PRE struct PACKED_POST { + + /*Network that was found with the highest RSSI*/ + tSirMacSSid ssId; + + /*Indicates the RSSI */ + tANI_U8 rssi; + + //The MPDU frame length of a beacon or probe rsp. data is the start of the frame + tANI_U16 frameLength; + +} tPrefNetwFoundParams, * tpPrefNetwFoundParams; + +/* + Preferred network found indication +*/ +typedef PACKED_PRE struct PACKED_POST { + + tHalMsgHeader header; + tPrefNetwFoundParams prefNetwFoundParams; +} tPrefNetwFoundInd, *tpPrefNetwFoundInd; + + +typedef PACKED_PRE struct PACKED_POST { + + /*RSSI Threshold*/ + tANI_U8 ucRssiThreshold; + +} tRssiFilterParams, * tpRssiFilterParams; + +/* + RSSI Filter request +*/ +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tRssiFilterParams prefRSSIFilterParams; +} tSetRssiFilterReq, *tpSetRssiFilterReq; + +/* + Set RSSI filter resp +*/ +typedef PACKED_PRE struct PACKED_POST{ + tHalMsgHeader header; + /*status of the request */ + tANI_U32 status; +} tSetRssiFilterResp, *tpSetRssiFilterResp; +/* + Update scan params +*/ +typedef PACKED_PRE struct PACKED_POST +{ + + /*Host setting for 11d*/ + tANI_U8 b11dEnabled; + + /*Lets PNO know that host has determined the regulatory domain*/ + tANI_U8 b11dResolved; + + /*Channels on which PNO is allowed to scan*/ + tANI_U8 ucChannelCount; + tANI_U8 aChannels[WLAN_HAL_PNO_MAX_NETW_CHANNELS]; + + /*Minimum channel time*/ + tANI_U16 usActiveMinChTime; + + /*Maximum channel time*/ + tANI_U16 usActiveMaxChTime; + + /*Minimum channel time*/ + tANI_U16 usPassiveMinChTime; + + /*Maximum channel time*/ + tANI_U16 usPassiveMaxChTime; + + /*Cb State*/ + ePhyChanBondState cbState; + +} tUpdateScanParams, * tpUpdateScanParams; + +/* + Update scan params +*/ +typedef PACKED_PRE struct PACKED_POST +{ + + /*Host setting for 11d*/ + tANI_U8 b11dEnabled; + + /*Lets PNO know that host has determined the regulatory domain*/ + tANI_U8 b11dResolved; + + /*Channels on which PNO is allowed to scan*/ + tANI_U8 ucChannelCount; + tANI_U8 aChannels[WLAN_HAL_PNO_MAX_NETW_CHANNELS_EX]; + + /*Minimum channel time*/ + tANI_U16 usActiveMinChTime; + + /*Maximum channel time*/ + tANI_U16 usActiveMaxChTime; + + /*Minimum channel time*/ + tANI_U16 usPassiveMinChTime; + + /*Maximum channel time*/ + tANI_U16 usPassiveMaxChTime; + + /*Cb State*/ + ePhyChanBondState cbState; + +} tUpdateScanParamsEx, * tpUpdateScanParamsEx; + +/* + Update scan params - sent from host to PNO + to be used during PNO scanning +*/ +typedef PACKED_PRE struct PACKED_POST{ + + tHalMsgHeader header; + tUpdateScanParams scanParams; +} tUpdateScanParamsReq, *tpUpdateScanParamsReq; + +/* + Update scan params - sent from host to PNO + to be used during PNO scanning +*/ +typedef PACKED_PRE struct PACKED_POST{ + + tHalMsgHeader header; + tUpdateScanParamsEx scanParams; +} tUpdateScanParamsReqEx, *tpUpdateScanParamsReqEx; + +/* + Update scan params - sent from host to PNO + to be used during PNO scanning +*/ +typedef PACKED_PRE struct PACKED_POST{ + + tHalMsgHeader header; + + /*status of the request */ + tANI_U32 status; + +} tUpdateScanParamsResp, *tpUpdateScanParamsResp; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_SET_TX_PER_TRACKING_REQ + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 ucTxPerTrackingEnable; /* 0: disable, 1:enable */ + tANI_U8 ucTxPerTrackingPeriod; /* Check period, unit is sec. */ + tANI_U8 ucTxPerTrackingRatio; /* (Fail TX packet)/(Total TX packet) ratio, the unit is 10%. */ + tANI_U32 uTxPerTrackingWatermark; /* A watermark of check number, once the tx packet exceed this number, we do the check, default is 5 */ +} tHalTxPerTrackingReqParam, *tpHalTxPerTrackingReqParam; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalTxPerTrackingReqParam txPerTrackingParams; +} tHalSetTxPerTrackingReqMsg, *tpHalSetTxPerTrackingReqMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_SET_TX_PER_TRACKING_RSP + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; +} tHalTxPerTrackingRspParams, *tpHalTxPerTrackingRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalTxPerTrackingRspParams txPerTrackingRspParams; +} tHalSetTxPerTrackingRspMsg, *tpHalSetTxPerTrackingRspMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_TX_PER_HIT_IND + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; +}tTxPerHitIndMsg, *tpTxPerHitIndMsg; + +/*--------------------------------------------------------------------------- + *******************Packet Filtering Definitions Begin******************* + *--------------------------------------------------------------------------*/ +#define HAL_PROTOCOL_DATA_LEN 8 +#define HAL_MAX_NUM_MULTICAST_ADDRESS 240 +#define HAL_MAX_NUM_FILTERS 20 +#define HAL_MAX_CMP_PER_FILTER 10 + +typedef enum +{ + HAL_RCV_FILTER_TYPE_INVALID, + HAL_RCV_FILTER_TYPE_FILTER_PKT, + HAL_RCV_FILTER_TYPE_BUFFER_PKT, + HAL_RCV_FILTER_TYPE_MAX_ENUM_SIZE +}tHalReceivePacketFilterType; + +typedef enum +{ + HAL_FILTER_PROTO_TYPE_INVALID, + HAL_FILTER_PROTO_TYPE_MAC, + HAL_FILTER_PROTO_TYPE_ARP, + HAL_FILTER_PROTO_TYPE_IPV4, + HAL_FILTER_PROTO_TYPE_IPV6, + HAL_FILTER_PROTO_TYPE_UDP, + HAL_FILTER_PROTO_TYPE_MAX +}tHalRcvPktFltProtocolType; + +typedef enum +{ + HAL_FILTER_CMP_TYPE_INVALID, + HAL_FILTER_CMP_TYPE_EQUAL, + HAL_FILTER_CMP_TYPE_MASK_EQUAL, + HAL_FILTER_CMP_TYPE_NOT_EQUAL, + HAL_FILTER_CMP_TYPE_MAX +}tHalRcvPktFltCmpFlagType; + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 protocolLayer; + tANI_U8 cmpFlag; + tANI_U16 dataLength; /* Length of the data to compare */ + tANI_U8 dataOffset; /* from start of the respective frame header */ + tANI_U8 reserved; /* Reserved field */ + tANI_U8 compareData[HAL_PROTOCOL_DATA_LEN]; /* Data to compare */ + tANI_U8 dataMask[HAL_PROTOCOL_DATA_LEN]; /* Mask to be applied on the received packet data before compare */ +}tHalRcvPktFilterParams, *tpHalRcvPktFilterParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 filterId; + tANI_U8 filterType; + tANI_U8 numParams; + tANI_U32 coalesceTime; + tHalRcvPktFilterParams paramsData[1]; +}tHalRcvPktFilterCfgType, *tpHalRcvPktFilterCfgType; + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 filterId; + tANI_U8 filterType; + tANI_U8 numParams; + tANI_U32 coleasceTime; + tANI_U8 bssIdx; + tHalRcvPktFilterParams paramsData[1]; +}tHalSessionizedRcvPktFilterCfgType, *tpHalSessionizedRcvPktFilterCfgType; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalRcvPktFilterCfgType pktFilterCfg; +} tHalSetRcvPktFilterReqMsg, *tpHalSetRcvPktFilterReqMsg; + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 dataOffset; /* from start of the respective frame header */ + tANI_U32 cMulticastAddr; + tSirMacAddr multicastAddr[HAL_MAX_NUM_MULTICAST_ADDRESS]; + tANI_U8 bssIdx; +} tHalRcvFltMcAddrListType, *tpHalRcvFltMcAddrListType; + +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; + tANI_U8 bssIdx; +} tHalSetPktFilterRspParams, *tpHalSetPktFilterRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalSetPktFilterRspParams pktFilterRspParams; +} tHalSetPktFilterRspMsg, *tpHalSetPktFilterRspMsg; + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 bssIdx; +} tHalRcvFltPktMatchCntReqParams, *tpHalRcvFltPktMatchCntReqParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalRcvFltPktMatchCntReqParams pktMatchCntReqParams; +} tHalRcvFltPktMatchCntReqMsg, *tpHalRcvFltPktMatchCntReqMsg; + + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 filterId; + tANI_U32 matchCnt; +} tHalRcvFltPktMatchCnt; +typedef PACKED_PRE struct PACKED_POST +{ + /* Success or Failure */ + tANI_U32 status; + tANI_U32 matchCnt; + tHalRcvFltPktMatchCnt filterMatchCnt[HAL_MAX_NUM_FILTERS]; + tANI_U8 bssIdx; +} tHalRcvFltPktMatchRspParams, *tptHalRcvFltPktMatchRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalRcvFltPktMatchRspParams fltPktMatchRspParams; +} tHalRcvFltPktMatchCntRspMsg, *tpHalRcvFltPktMatchCntRspMsg; + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U32 status; /* only valid for response message */ + tANI_U8 filterId; + tANI_U8 bssIdx; +}tHalRcvFltPktClearParam, *tpHalRcvFltPktClearParam; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalRcvFltPktClearParam filterClearParam; +} tHalRcvFltPktClearReqMsg, *tpHalRcvFltPktClearReqMsg; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalRcvFltPktClearParam filterClearParam; +} tHalRcvFltPktClearRspMsg, *tpHalRcvFltPktClearRspMsg; + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U32 status; + tANI_U8 bssIdx; +}tHalRcvFltPktSetMcListRspType, *tpHalRcvFltPktSetMcListRspType; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalRcvFltMcAddrListType mcAddrList; +} tHalRcvFltPktSetMcListReqMsg, *tpHalRcvFltPktSetMcListReqMsg; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalRcvFltPktSetMcListRspType rspParam; +} tHalRcvFltPktSetMcListRspMsg, *tpHalRcvFltPktSetMcListRspMsg; + + +/*--------------------------------------------------------------------------- + *******************Packet Filtering Definitions End******************* + *--------------------------------------------------------------------------*/ + +/* + * There are two versions of this message + * Version 1 : Base version + * Current version : Base version + Max LI modulated DTIM + */ +typedef PACKED_PRE struct PACKED_POST +{ + /* Ignore DTIM */ + tANI_U32 uIgnoreDTIM; + + /*DTIM Period*/ + tANI_U32 uDTIMPeriod; + + /* Listen Interval */ + tANI_U32 uListenInterval; + + /* Broadcast Multicast Filter */ + tANI_U32 uBcastMcastFilter; + + /* Beacon Early Termination */ + tANI_U32 uEnableBET; + + /* Beacon Early Termination Interval */ + tANI_U32 uBETInterval; +}tSetPowerParamsVer1Type, *tpSetPowerParamsVer1Type; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tSetPowerParamsVer1Type powerParams; +} tSetPowerParamsVer1ReqMsg, *tpSetPowerParamsVer1ReqMsg; + +typedef PACKED_PRE struct PACKED_POST +{ + /* Ignore DTIM */ + tANI_U32 uIgnoreDTIM; + + /*DTIM Period*/ + tANI_U32 uDTIMPeriod; + + /* Listen Interval */ + tANI_U32 uListenInterval; + + /* Broadcast Multicast Filter */ + tANI_U32 uBcastMcastFilter; + + /* Beacon Early Termination */ + tANI_U32 uEnableBET; + + /* Beacon Early Termination Interval */ + tANI_U32 uBETInterval; + + /* MAX LI for modulated DTIM */ + tANI_U32 uMaxLIModulatedDTIM; +}tSetPowerParamsType, *tpSetPowerParamsType; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tSetPowerParamsType powerParams; +} tSetPowerParamsReqMsg, *tpSetPowerParamsReqMsg; + +typedef PACKED_PRE struct PACKED_POST{ + + tHalMsgHeader header; + + /*status of the request */ + tANI_U32 status; + +} tSetPowerParamsResp, *tpSetPowerParamsResp; + +/*--------------------------------------------------------------------------- + ****************Capability bitmap exchange definitions and macros starts************* + *--------------------------------------------------------------------------*/ + +typedef enum { + MCC = 0, + P2P = 1, + DOT11AC = 2, + SLM_SESSIONIZATION = 3, + DOT11AC_OPMODE = 4, + SAP32STA = 5, + TDLS = 6, + P2P_GO_NOA_DECOUPLE_INIT_SCAN = 7, + WLANACTIVE_OFFLOAD = 8, + BEACON_OFFLOAD = 9, + SCAN_OFFLOAD = 10, + ROAM_OFFLOAD = 11, + BCN_MISS_OFFLOAD = 12, + STA_POWERSAVE = 13, + STA_ADVANCED_PWRSAVE = 14, + AP_UAPSD = 15, + AP_DFS = 16, + BLOCKACK = 17, + PHY_ERR = 18, + BCN_FILTER = 19, + RTT = 20, + RATECTRL = 21, + WOW = 22, + WLAN_ROAM_SCAN_OFFLOAD = 23, + SPECULATIVE_PS_POLL = 24, + SCAN_SCH = 25, + IBSS_HEARTBEAT_OFFLOAD = 26, + WLAN_SCAN_OFFLOAD = 27, + WLAN_PERIODIC_TX_PTRN = 28, + ADVANCE_TDLS = 29, + BATCH_SCAN = 30, + MAX_FEATURE_SUPPORTED = 128, +} placeHolderInCapBitmap; + +typedef PACKED_PRE struct PACKED_POST{ + + tANI_U32 featCaps[4]; +} tWlanFeatCaps, *tpWlanFeatCaps; + +typedef PACKED_PRE struct PACKED_POST{ + + tHalMsgHeader header; + tWlanFeatCaps wlanFeatCaps; + +} tWlanFeatCapsMsg, *tpWlanFeatCapsMsg; + +#define IS_MCC_SUPPORTED_BY_HOST (!!(halMsg_GetHostWlanFeatCaps(MCC))) +#define IS_SLM_SESSIONIZATION_SUPPORTED_BY_HOST (!!(halMsg_GetHostWlanFeatCaps(SLM_SESSIONIZATION))) +#define IS_FEATURE_SUPPORTED_BY_HOST(featEnumValue) (!!halMsg_GetHostWlanFeatCaps(featEnumValue)) +#define IS_WLANACTIVE_OFFLOAD_SUPPORTED_BY_HOST (!!(halMsg_GetHostWlanFeatCaps(WLANACTIVE_OFFLOAD))) +#define IS_WLAN_ROAM_SCAN_OFFLOAD_SUPPORTED_BY_HOST (!!(halMsg_GetHostWlanFeatCaps(WLAN_ROAM_SCAN_OFFLOAD))) +#define IS_IBSS_HEARTBEAT_OFFLOAD_SUPPORTED_BY_HOST (!!(halMsg_GetHostWlanFeatCaps(IBSS_HEARTBEAT_OFFLOAD))) +#define IS_SCAN_OFFLOAD_SUPPORTED_BY_HOST (!!(halMsg_GetHostWlanFeatCaps(WLAN_SCAN_OFFLOAD))) + +tANI_U8 halMsg_GetHostWlanFeatCaps(tANI_U8 feat_enum_value); + +#define setFeatCaps(a,b) { tANI_U32 arr_index, bit_index; \ + if ((b)<=127) { \ + arr_index = (b)/32; \ + bit_index = (b)%32; \ + if(arr_index < 4) \ + (a)->featCaps[arr_index] |= (1<featCaps[arr_index] & (1<featCaps[arr_index] &= ~(1<FW + WLAN_HAL_LEADER_CANCELED, //Host-->FW + WLAN_HAL_LEADER_PICK_NEW, //FW-->Host + WLAN_HAL_LEADER_IND_MAX = WLAN_HAL_MAX_ENUM_SIZE +}tLbpUpdateIndType; + +typedef enum +{ + WLAN_HAL_LBP_LEADER_ROLE, + WLAN_HAL_LBP_TRANSMITTER_ROLE, + WLAN_HAL_LBP_ROLE_MAX = WLAN_HAL_MAX_ENUM_SIZE +}tLbpRoleType; + +typedef PACKED_PRE struct PACKED_POST +{ + tLbpUpdateIndType indication; + + /* Role of the entity generating this indication */ + tLbpRoleType role; + + /* MAC address of MCAST Transmitter (source) */ + tSirMacAddr mcastTransmitter; + + /* MAC Address of Multicast Group (01-00-5E-xx-xx-xx) */ + tSirMacAddr mcastGroup; + + /* MAC address of MCAST Receiver Leader */ + tSirMacAddr mcastLeader; + + /* Candidate list for indication = WLAN_HAL_LEADER_PICK_NEW */ + tSirMacAddr leader[HAL_NUM_MAX_LEADERS]; +} tHalLbpUpdateIndParams, *tpHalLbpUpdateIndParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalLbpUpdateIndParams leaderIndParams; +} tHalLbpUpdateInd, *tpHalLbpUpdateInd; + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 staIdx; // Station Idx; + tANI_U32 txRate; // Legacy transmit rate, in units of 500 kbit/sec, + // for the most recently transmitted frame + tANI_U32 mcsIndex; // mcs index for HT20 and HT40 rates + tANI_U32 txRateFlags; // to differentiate between HT20 and + // HT40 rates; short and long guard interval + tANI_S8 rssi; // RSSI of the last received beacon +}tHalIbssPeerParams, *tpHalIbssPeerParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U32 status; // success or failure + tANI_U8 numOfPeers; // Number of Peers for + // which stats are being reported + tHalIbssPeerParams ibssPeerParams[1]; // Stats of peer in IBSS +}tHalIbssPeerInfoRspParams, *tpHalIbssPeerInfoRspParams; + +// WLAN_HAL_GET_IBSS_PEER_INFO_RSP +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalIbssPeerInfoRspParams ibssPeerInfoRspParams; +}tHalIbssPeerInfoRsp, *tpHalIbssPeerInfoRsp; + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 bssIdx; // Bss Index + tANI_BOOLEAN allPeerInfoReqd; // If set, all IBSS peers stats are reported + tANI_U8 staIdx; // If allPeerInfoReqd is not set, + // only stats of peer with + // staIdx is reported +}tHalIbssPeerInfoReqParams, *tpHalIbssPeerInfoReqParams; + +// WLAN_HAL_GET_IBSS_PEER_INFO_REQ +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalIbssPeerInfoReqParams ibssPeerInfoReqParams; +}tHalIbssPeerInfoReq, *tpHalIbssPeerInfoReq; + +/*--------------------------------------------------------------------------- + WLAN_HAL_RATE_UPDATE_IND + *-------------------------------------------------------------------------*/ + typedef PACKED_PRE struct PACKED_POST +{ + /* 0 implies UCAST RA, positive value implies fixed rate, -1 implies ignore this param */ + tANI_S32 ucastDataRate; //unit Mbpsx10 + + /* TX flag to differentiate between HT20, HT40 etc */ + tTxRateInfoFlags ucastDataRateTxFlag; + + /* BSSID - Optional. 00-00-00-00-00-00 implies apply to all BCAST STAs */ + tSirMacAddr bssid; + + /* 0 implies MCAST RA, positive value implies fixed rate, -1 implies ignore */ + tANI_S32 reliableMcastDataRate; //unit Mbpsx10 + + /* TX flag to differentiate between HT20, HT40 etc */ + tTxRateInfoFlags reliableMcastDataRateTxFlag; + + /* Default (non-reliable) MCAST(or BCAST) fixed rate in 2.4 GHz, 0 implies ignore */ + tANI_U32 mcastDataRate24GHz; //unit Mbpsx10 + + /* TX flag to differentiate between HT20, HT40 etc */ + tTxRateInfoFlags mcastDataRate24GHzTxFlag; + + /* Default (non-reliable) MCAST(or BCAST) fixed rate in 5 GHz, 0 implies ignore */ + tANI_U32 mcastDataRate5GHz; //unit Mbpsx10 + + /* TX flag to differentiate between HT20, HT40 etc */ + tTxRateInfoFlags mcastDataRate5GHzTxFlag; + +} tHalRateUpdateParams, *tpHalRateUpdateParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalRateUpdateParams halRateUpdateParams; +} tHalRateUpdateInd, * tpHalRateUpdateInd; + +/*--------------------------------------------------------------------------- +* WLAN_HAL_TX_FAIL_IND +*--------------------------------------------------------------------------*/ +// Northbound indication from FW to host on weak link detection +typedef PACKED_PRE struct PACKED_POST +{ + // Sequence number increases by 1 whenever the device driver + // sends a notification event. This is cleared as 0 when the + // JOIN IBSS commamd is issued + tANI_U16 seqNo; + tANI_U16 staId; + tANI_U8 macAddr[HAL_MAC_ADDR_LEN]; +} tHalTXFailIndParams, *tpHalTXFailIndParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalTXFailIndParams txFailIndParams; +} tHalTXFailIndMsg, *tpHalTXFailIndMsg; + +/*--------------------------------------------------------------------------- +* WLAN_HAL_TX_FAIL_MONITOR_IND +*--------------------------------------------------------------------------*/ +// Southbound message from Host to monitor the Tx failures +typedef PACKED_PRE struct PACKED_POST +{ + // tx_fail_count = 0 should disable the TX Fail monitor, non-zero value should enable it. + tANI_U8 tx_fail_count; +} tTXFailMonitorInfo, *tpTXFailMonitorInfo; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tTXFailMonitorInfo txFailMonitor; +} tTXFailMonitorInd, *tpTXFailMonitorInd; + +/*--------------------------------------------------------------------------- +* WLAN_HAL_IP_FORWARD_TABLE_UPDATE_IND +*--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 destIpv4Addr[HAL_IPV4_ADDR_LEN]; + tANI_U8 nextHopMacAddr[HAL_MAC_ADDR_LEN]; +} tDestIpNextHopMacPair; + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 numEntries; + tDestIpNextHopMacPair destIpMacPair[1]; +} tWlanIpForwardTableUpdateIndParam; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tWlanIpForwardTableUpdateIndParam ipForwardTableParams; +} tWlanIpForwardTableUpdateInd; + +/*--------------------------------------------------------------------------- + *-------------------------------------------------------------------------*/ + +#if defined(__ANI_COMPILER_PRAGMA_PACK_STACK) +#pragma pack(pop) +#elif defined(__ANI_COMPILER_PRAGMA_PACK) +#else +#endif + +#endif /* _WLAN_HAL_MSG_H_ */ + diff --git a/riva/inc/wlan_nv.h b/riva/inc/wlan_nv.h new file mode 100644 index 000000000000..69f728653e9d --- /dev/null +++ b/riva/inc/wlan_nv.h @@ -0,0 +1,792 @@ +/* +* Copyright (c) 2012 Qualcomm Atheros, Inc. +* All Rights Reserved. +* Qualcomm Atheros Confidential and Proprietary. +*/ + +/** ------------------------------------------------------------------------- * + ------------------------------------------------------------------------- * + + + \file wlan_nv.h + + \brief Types for NV implementation + Anything that needs to be publicly available should + be in this file + + $Id$ + + Copyright (C) 2006 Airgo Networks, Incorporated + + + ========================================================================== */ + +#if !defined( __WLAN_NV_H ) +#define __WLAN_NV_H + +#include "halLegacyPalTypes.h" +#include "halCompiler.h" + +//From HAL/inc/halNv.h +typedef enum +{ + //Common Nv Fields + NV_COMMON_PRODUCT_ID, // 0 + NV_COMMON_PRODUCT_BANDS, // 1 + NV_COMMON_NUM_OF_TX_CHAINS, // 2 + NV_COMMON_NUM_OF_RX_CHAINS, // 3 + NV_COMMON_MAC_ADDR, // 4 + NV_COMMON_MFG_SERIAL_NUMBER, // 5 + NV_COMMON_WLAN_NV_REV_ID, // 6 + NV_COMMON_COUPLER_TYPE, // 7 + NV_COMMON_NV_VERSION, // 8 + NV_COMMON_RESERVED, // 9 + + NUM_NV_FIELDS, + NV_MAX_FIELD = 0x7FFFFFFF /* define as 4 bytes data */ + +}eNvField; + + +#define NV_FIELD_MAC_ADDR_SIZE 6 +#define NV_FIELD_MFG_SN_SIZE 40 +typedef enum +{ + PRODUCT_BAND_11_B_G = 0, //Gen6.0 is only this setting + PRODUCT_BAND_11_A_B_G = 1, + PRODUCT_BAND_11_A = 2, + + NUM_PRODUCT_BANDS, + NUM_PRODUCT_BANDS_INVALID = 0x7FFFFFFF /* define as 4 bytes data */ +}eNvProductBands; //NV_COMMON_PRODUCT_BANDS + +#define EXTERNAL_PA 1 +#define INTERNAL_PA 0 + +#define EXTERNAL_LNA 1 +#define INTERNAL_LNA 0 + +#define EXTERNAL_COUPLER 1 +#define INTERNAL_COUPLER 0 + +#define EXTERNAL_PDET 1 +#define INTERNAL_PDET 0 + +#define DPD_ENABLED 1 +#define DPD_DISABLED 0 + +#define TPC_MODE_OPEN_LOOP 0 +#define TPC_MODE_SCPC 1 +#define TPC_MODE_CLPC_MODE2 2 +#define TPC_MODE_CLPC_MODE3 3 + +#define PA_POLARITY_TX_UNUSED 0 +#define PA_POLARITY_TX_POSITIVE 1 +#define PA_POLARITY_TX_NEGATIVE 2 +#define PA_POLARITY_RX_UNUSED 0 +#define PA_POLARITY_RX_POSITIVE 1 +#define PA_POLARITY_RX_NEGATIVE 2 + +#define NV_VERSION_INVALID 0xFF +#define NV_VERSION_11N_11AC_COUPER_TYPE 0 +#define NV_VERSION_11N_11AC_FW_CONFIG 1 +#define NV_VERSION_LPDC_FW_CONFIG 2 + +#ifdef WCN_PRONTO +#define WLAN_NV_VERSION NV_VERSION_LPDC_FW_CONFIG +#else //WCN_PRONTO +#define WLAN_NV_VERSION NV_VERSION_11N_11AC_FW_CONFIG +#endif //WCN_PRONTO + +typedef PACKED_PRE struct PACKED_POST +{ + uint8 macAddr1[NV_FIELD_MAC_ADDR_SIZE]; /* Default, not change name for compatibility */ + uint8 macAddr2[NV_FIELD_MAC_ADDR_SIZE]; + uint8 macAddr3[NV_FIELD_MAC_ADDR_SIZE]; + uint8 macAddr4[NV_FIELD_MAC_ADDR_SIZE]; +} sMacAddr; + +typedef PACKED_PRE union PACKED_POST +{ + //common NV fields + uint16 productId; + uint8 productBands; + uint8 wlanNvRevId; + uint8 numOfTxChains; + uint8 numOfRxChains; + sMacAddr macAddr; + uint8 mfgSN[NV_FIELD_MFG_SN_SIZE]; + uint8 couplerType; + uint8 nvVersion; +} uNvFields; + + +//format of common part of nv +typedef PACKED_PRE struct PACKED_POST +{ + //always ensure fields are aligned to 32-bit boundaries + uint16 productId; + uint8 productBands; + uint8 wlanNvRevId; //0: WCN1312, 1: WCN1314, 2: WCN3660 + + uint8 numOfTxChains; + uint8 numOfRxChains; + uint8 macAddr[NV_FIELD_MAC_ADDR_SIZE]; /* Default, not change name for compatibility */ + uint8 macAddr2[NV_FIELD_MAC_ADDR_SIZE]; + uint8 macAddr3[NV_FIELD_MAC_ADDR_SIZE]; + uint8 macAddr4[NV_FIELD_MAC_ADDR_SIZE]; + uint8 mfgSN[NV_FIELD_MFG_SN_SIZE]; + uint8 couplerType; + uint8 nvVersion; +} sNvFields; + + +//From wlanfw/inc/halPhyTypes.h + +typedef int8 tPowerdBm; //power in signed 8-bit integer, no decimal places + +typedef PACKED_PRE union PACKED_POST +{ + uint32 measurement; //measured values can be passed to pttApi, but are maintained to 2 decimal places internally + int16 reported; //used internally only - reported values only maintain 2 decimals places +}uAbsPwrPrecision; + +typedef enum +{ + PHY_TX_CHAIN_0 = 0, + + NUM_PHY_MAX_TX_CHAINS = 1, + PHY_MAX_TX_CHAINS = NUM_PHY_MAX_TX_CHAINS, + PHY_ALL_TX_CHAINS, + + //possible tx chain combinations + PHY_NO_TX_CHAINS, + PHY_TX_CHAIN_INVALID = 0x7FFFFFFF /* define as 4 bytes data */ +}ePhyTxChains; + +//From wlanfw/inc/halRfTypes.h + +typedef enum +{ + REG_DOMAIN_FCC, + REG_DOMAIN_ETSI, + REG_DOMAIN_JAPAN, + REG_DOMAIN_WORLD, + REG_DOMAIN_N_AMER_EXC_FCC, + REG_DOMAIN_APAC, + REG_DOMAIN_KOREA, + REG_DOMAIN_HI_5GHZ, + REG_DOMAIN_NO_5GHZ, + + NUM_REG_DOMAINS, + NUM_REG_DOMAINS_INVALID = 0x7FFFFFFF /* define as 4 bytes data */ +}eRegDomainId; + +typedef enum +{ + RF_SUBBAND_2_4_GHZ = 0, + RF_SUBBAND_5_LOW_GHZ = 1, //Low & Mid U-NII + RF_SUBBAND_5_MID_GHZ = 2, //ETSI + RF_SUBBAND_5_HIGH_GHZ = 3, //High U-NII + RF_SUBBAND_4_9_GHZ = 4, //Japanese + + + NUM_RF_SUBBANDS, + + MAX_RF_SUBBANDS, + INVALID_RF_SUBBAND, + + RF_BAND_2_4_GHZ = 0, + RF_BAND_5_GHZ = 1, + NUM_RF_BANDS, + BOTH_RF_BANDS, + RF_SUBBAND_INVALID = 0x7FFFFFFF /* define as 4 bytes data */ +}eRfSubBand; + +typedef enum +{ + //2.4GHz Band + RF_CHAN_1 = 0, + RF_CHAN_2 = 1, + RF_CHAN_3 = 2, + RF_CHAN_4 = 3, + RF_CHAN_5 = 4, + RF_CHAN_6 = 5, + RF_CHAN_7 = 6, + RF_CHAN_8 = 7, + RF_CHAN_9 = 8, + RF_CHAN_10 = 9, + RF_CHAN_11 = 10, + RF_CHAN_12 = 11, + RF_CHAN_13 = 12, + RF_CHAN_14 = 13, + + //4.9GHz Band + RF_CHAN_240 = 14, + RF_CHAN_244 = 15, + RF_CHAN_248 = 16, + RF_CHAN_252 = 17, + RF_CHAN_208 = 18, + RF_CHAN_212 = 19, + RF_CHAN_216 = 20, + + //5GHz Low & Mid U-NII Band + RF_CHAN_36 = 21, + RF_CHAN_40 = 22, + RF_CHAN_44 = 23, + RF_CHAN_48 = 24, + RF_CHAN_52 = 25, + RF_CHAN_56 = 26, + RF_CHAN_60 = 27, + RF_CHAN_64 = 28, + + //5GHz Mid Band - ETSI & FCC + RF_CHAN_100 = 29, + RF_CHAN_104 = 30, + RF_CHAN_108 = 31, + RF_CHAN_112 = 32, + RF_CHAN_116 = 33, + RF_CHAN_120 = 34, + RF_CHAN_124 = 35, + RF_CHAN_128 = 36, + RF_CHAN_132 = 37, + RF_CHAN_136 = 38, + RF_CHAN_140 = 39, + + //5GHz High U-NII Band + RF_CHAN_149 = 40, + RF_CHAN_153 = 41, + RF_CHAN_157 = 42, + RF_CHAN_161 = 43, + RF_CHAN_165 = 44, + + //CHANNEL BONDED CHANNELS + RF_CHAN_BOND_3 = 45, + RF_CHAN_BOND_4 = 46, + RF_CHAN_BOND_5 = 47, + RF_CHAN_BOND_6 = 48, + RF_CHAN_BOND_7 = 49, + RF_CHAN_BOND_8 = 50, + RF_CHAN_BOND_9 = 51, + RF_CHAN_BOND_10 = 52, + RF_CHAN_BOND_11 = 53, + RF_CHAN_BOND_242 = 54, //4.9GHz Band + RF_CHAN_BOND_246 = 55, + RF_CHAN_BOND_250 = 56, + RF_CHAN_BOND_210 = 57, + RF_CHAN_BOND_214 = 58, + RF_CHAN_BOND_38 = 59, //5GHz Low & Mid U-NII Band + RF_CHAN_BOND_42 = 60, + RF_CHAN_BOND_46 = 61, + RF_CHAN_BOND_50 = 62, + RF_CHAN_BOND_54 = 63, + RF_CHAN_BOND_58 = 64, + RF_CHAN_BOND_62 = 65, + RF_CHAN_BOND_102 = 66, //5GHz Mid Band - ETSI & FCC + RF_CHAN_BOND_106 = 67, + RF_CHAN_BOND_110 = 68, + RF_CHAN_BOND_114 = 69, + RF_CHAN_BOND_118 = 70, + RF_CHAN_BOND_122 = 71, + RF_CHAN_BOND_126 = 72, + RF_CHAN_BOND_130 = 73, + RF_CHAN_BOND_134 = 74, + RF_CHAN_BOND_138 = 75, + RF_CHAN_BOND_151 = 76, //5GHz High U-NII Band + RF_CHAN_BOND_155 = 77, + RF_CHAN_BOND_159 = 78, + RF_CHAN_BOND_163 = 79, + + NUM_RF_CHANNELS, + + MIN_2_4GHZ_CHANNEL = RF_CHAN_1, + MAX_2_4GHZ_CHANNEL = RF_CHAN_14, + + MIN_5GHZ_CHANNEL = RF_CHAN_240, + MAX_5GHZ_CHANNEL = RF_CHAN_165, + NUM_5GHZ_CHANNELS = (MAX_5GHZ_CHANNEL - MIN_5GHZ_CHANNEL + 1), + + MIN_20MHZ_RF_CHANNEL = RF_CHAN_1, + MAX_20MHZ_RF_CHANNEL = RF_CHAN_165, + NUM_20MHZ_RF_CHANNELS = (MAX_20MHZ_RF_CHANNEL - MIN_20MHZ_RF_CHANNEL + 1), + + MIN_40MHZ_RF_CHANNEL = RF_CHAN_BOND_3, + MAX_40MHZ_RF_CHANNEL = RF_CHAN_BOND_163, + NUM_40MHZ_RF_CHANNELS = (MAX_40MHZ_RF_CHANNEL - MIN_40MHZ_RF_CHANNEL + 1), + + MIN_CB_2_4GHZ_CHANNEL = RF_CHAN_BOND_3, + MAX_CB_2_4GHZ_CHANNEL = RF_CHAN_BOND_11, + + MIN_CB_5GHZ_CHANNEL = RF_CHAN_BOND_242, + MAX_CB_5GHZ_CHANNEL = RF_CHAN_BOND_163, + + NUM_TPC_2_4GHZ_CHANNELS = 14, + NUM_TPC_5GHZ_CHANNELS = NUM_5GHZ_CHANNELS, + + INVALID_RF_CHANNEL = 0xBAD, + RF_CHANNEL_INVALID_MAX_FIELD = 0x7FFFFFFF /* define as 4 bytes data */ +}eRfChannels; + +typedef enum +{ + RF_CHAN_1_1 = RF_CHAN_1, + RF_CHAN_2_1 = RF_CHAN_2, + RF_CHAN_3_1 = RF_CHAN_3, + RF_CHAN_4_1 = RF_CHAN_4, + RF_CHAN_5_1 = RF_CHAN_5, + RF_CHAN_6_1 = RF_CHAN_6, + RF_CHAN_7_1 = RF_CHAN_7, + RF_CHAN_8_1 = RF_CHAN_8, + RF_CHAN_9_1 = RF_CHAN_9, + RF_CHAN_10_1 = RF_CHAN_10, + RF_CHAN_11_1 = RF_CHAN_11, + RF_CHAN_12_1 = RF_CHAN_12, + RF_CHAN_13_1 = RF_CHAN_13, + RF_CHAN_14_1 = RF_CHAN_14, +// The above params are used for scripts. + NUM_2_4GHZ_CHANNELS, +}eRfChannels_2_4GHz; + +enum +{ + NV_CHANNEL_DISABLE, + NV_CHANNEL_ENABLE, + NV_CHANNEL_DFS, + NV_CHANNEL_INVALID +}; +typedef uint8 eNVChannelEnabledType; + +typedef PACKED_PRE struct PACKED_POST +{ + eNVChannelEnabledType enabled; + tPowerdBm pwrLimit; +}sRegulatoryChannel; + +typedef PACKED_PRE struct PACKED_POST +{ + sRegulatoryChannel channels[NUM_RF_CHANNELS]; + uAbsPwrPrecision antennaGain[NUM_RF_SUBBANDS]; + uAbsPwrPrecision bRatePowerOffset[NUM_2_4GHZ_CHANNELS]; + uAbsPwrPrecision gnRatePowerOffset[NUM_RF_CHANNELS]; +}ALIGN_4 sRegulatoryDomains; + +typedef PACKED_PRE struct PACKED_POST +{ + int16 bRssiOffset[NUM_RF_CHANNELS]; + int16 gnRssiOffset[NUM_RF_CHANNELS]; +}ALIGN_4 sRssiChannelOffsets; + +typedef PACKED_PRE struct PACKED_POST +{ + uint16 targetFreq; //number in MHz + uint16 channelNum; //channel number as in the eRfChannels enumeration + eRfSubBand band; //band that this channel belongs to +}tRfChannelProps; + +typedef enum +{ + MODE_802_11B = 0, + MODE_802_11AG = 1, + MODE_802_11N = 2, + NUM_802_11_MODES, + MODE_802_11_INVALID = 0x7FFFFFFF /* define as 4 bytes data */ +} e80211Modes; + +#define HW_CAL_VALUES_VALID_BMAP_UNUSED 0 //Value +//Bit mask +#define HW_VAL_VALUES_VALID_BMAP_SLEEP_TIME_OVERHEAD_2G_MASK 0x1 +#define HW_VAL_VALUES_VALID_BMAP_SLEEP_TIME_OVERHEAD_5G_MASK 0x2 +#define HW_VAL_VALUES_VALID_BMAP_SLEEP_TIME_OVERHEAD_xLNA_5G_MASK 0x4 +#define HW_VAL_VALUES_VALID_TXBBF_SEL_9MHZ_MASK 0x8 +#define HW_VAL_VALUES_VALID_CUSTOM_TCXO_REG8_MASK 0x10 +#define HW_VAL_VALUES_VALID_CUSTOM_TCXO_REG9_MASK 0x20 + + +//From wlanfw/inc/halPhyCalMemory.h +typedef PACKED_PRE struct PACKED_POST +{ + uint16 psSlpTimeOvrHd2G; + uint16 psSlpTimeOvrHd5G; + + uint16 psSlpTimeOvrHdxLNA5G; + uint8 nv_TxBBFSel9MHz : 1; + uint8 hwParam1 : 7; + uint8 hwParam2; + + uint16 custom_tcxo_reg8; + uint16 custom_tcxo_reg9; + + uint32 hwParam3; + uint32 hwParam4; + uint32 hwParam5; + uint32 hwParam6; + uint32 hwParam7; + uint32 hwParam8; + uint32 hwParam9; + uint32 hwParam10; + uint32 hwParam11; +}sCalData; + +typedef PACKED_PRE struct PACKED_POST +{ + uint32 validBmap; //use eNvCalID + sCalData calData; +}sHwCalValues; + +typedef PACKED_PRE struct PACKED_POST +{ + uint32 txFirFilterMode; +}sTxBbFilterMode; + +typedef PACKED_PRE struct PACKED_POST +{ + int16 ofdmPwrOffset; + int16 rsvd; +}sOfdmCmdPwrOffset; + +//From wlanfw/inc/halPhyCfg.h +typedef uint8 tTpcLutValue; + +#define MAX_TPC_CAL_POINTS (8) + +typedef uint8 tPowerDetect; //7-bit power detect reading + +typedef PACKED_PRE struct PACKED_POST +{ + tPowerDetect pwrDetAdc; //= SENSED_PWR register, which reports the 8-bit ADC + // the stored ADC value gets shifted to 7-bits as the index to the LUT + tPowerDetect adjustedPwrDet; //7-bit value that goes into the LUT at the LUT[pwrDet] location + //MSB set if extraPrecision.hi8_adjustedPwrDet is used +}tTpcCaldPowerPoint; + +typedef tTpcCaldPowerPoint tTpcCaldPowerTable[NUM_PHY_MAX_TX_CHAINS][MAX_TPC_CAL_POINTS]; + +typedef PACKED_PRE struct PACKED_POST +{ + tTpcCaldPowerTable empirical; //calibrated power points +}tTpcConfig; + +//From wlanfw/inc/phyTxPower.h +#ifndef TPC_MEM_POWER_LUT_DEPTH +#define TPC_MEM_POWER_LUT_DEPTH 256 +#endif + +typedef tTpcLutValue tTpcPowerTable[NUM_PHY_MAX_TX_CHAINS][TPC_MEM_POWER_LUT_DEPTH]; + +typedef PACKED_PRE struct PACKED_POST +{ + tTpcConfig *pwrSampled; //points to CLPC data in calMemory +}tPhyTxPowerBand; + +//From halPhyRates.h +typedef enum +{ + //802.11b Rates + HAL_PHY_RATE_11B_LONG_1_MBPS, + HAL_PHY_RATE_11B_LONG_2_MBPS, + HAL_PHY_RATE_11B_LONG_5_5_MBPS, + HAL_PHY_RATE_11B_LONG_11_MBPS, + HAL_PHY_RATE_11B_SHORT_2_MBPS, + HAL_PHY_RATE_11B_SHORT_5_5_MBPS, + HAL_PHY_RATE_11B_SHORT_11_MBPS, + + //Spica_Virgo 11A 20MHz Rates + HAL_PHY_RATE_11A_6_MBPS, + HAL_PHY_RATE_11A_9_MBPS, + HAL_PHY_RATE_11A_12_MBPS, + HAL_PHY_RATE_11A_18_MBPS, + HAL_PHY_RATE_11A_24_MBPS, + HAL_PHY_RATE_11A_36_MBPS, + HAL_PHY_RATE_11A_48_MBPS, + HAL_PHY_RATE_11A_54_MBPS, + + // 11A 20MHz Rates + HAL_PHY_RATE_11A_DUP_6_MBPS, + HAL_PHY_RATE_11A_DUP_9_MBPS, + HAL_PHY_RATE_11A_DUP_12_MBPS, + HAL_PHY_RATE_11A_DUP_18_MBPS, + HAL_PHY_RATE_11A_DUP_24_MBPS, + HAL_PHY_RATE_11A_DUP_36_MBPS, + HAL_PHY_RATE_11A_DUP_48_MBPS, + HAL_PHY_RATE_11A_DUP_54_MBPS, + + //MCS Index #0-7 (20/40MHz) + HAL_PHY_RATE_MCS_1NSS_6_5_MBPS, + HAL_PHY_RATE_MCS_1NSS_13_MBPS, + HAL_PHY_RATE_MCS_1NSS_19_5_MBPS, + HAL_PHY_RATE_MCS_1NSS_26_MBPS, + HAL_PHY_RATE_MCS_1NSS_39_MBPS, + HAL_PHY_RATE_MCS_1NSS_52_MBPS, + HAL_PHY_RATE_MCS_1NSS_58_5_MBPS, + HAL_PHY_RATE_MCS_1NSS_65_MBPS, + HAL_PHY_RATE_MCS_1NSS_MM_SG_7_2_MBPS, + HAL_PHY_RATE_MCS_1NSS_MM_SG_14_4_MBPS, + HAL_PHY_RATE_MCS_1NSS_MM_SG_21_7_MBPS, + HAL_PHY_RATE_MCS_1NSS_MM_SG_28_9_MBPS, + HAL_PHY_RATE_MCS_1NSS_MM_SG_43_3_MBPS, + HAL_PHY_RATE_MCS_1NSS_MM_SG_57_8_MBPS, + HAL_PHY_RATE_MCS_1NSS_MM_SG_65_MBPS, + HAL_PHY_RATE_MCS_1NSS_MM_SG_72_2_MBPS, + + //MCS Index #8-15 (20/40MHz) + HAL_PHY_RATE_MCS_1NSS_CB_13_5_MBPS, + HAL_PHY_RATE_MCS_1NSS_CB_27_MBPS, + HAL_PHY_RATE_MCS_1NSS_CB_40_5_MBPS, + HAL_PHY_RATE_MCS_1NSS_CB_54_MBPS, + HAL_PHY_RATE_MCS_1NSS_CB_81_MBPS, + HAL_PHY_RATE_MCS_1NSS_CB_108_MBPS, + HAL_PHY_RATE_MCS_1NSS_CB_121_5_MBPS, + HAL_PHY_RATE_MCS_1NSS_CB_135_MBPS, + HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_15_MBPS, + HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_30_MBPS, + HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_45_MBPS, + HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_60_MBPS, + HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_90_MBPS, + HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_120_MBPS, + HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_135_MBPS, + HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_150_MBPS, + +#ifdef WLAN_FEATURE_11AC + /*11A duplicate 80MHz Rates*/ + HAL_PHY_RATE_11AC_DUP_6_MBPS, + HAL_PHY_RATE_11AC_DUP_9_MBPS, + HAL_PHY_RATE_11AC_DUP_12_MBPS, + HAL_PHY_RATE_11AC_DUP_18_MBPS, + HAL_PHY_RATE_11AC_DUP_24_MBPS, + HAL_PHY_RATE_11AC_DUP_36_MBPS, + HAL_PHY_RATE_11AC_DUP_48_MBPS, + HAL_PHY_RATE_11AC_DUP_54_MBPS, + + /*11AC rate 20MHZ Normal GI*/ + HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_6_5_MBPS, + HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_13_MBPS, + HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_19_5_MBPS, + HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_26_MBPS, + HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_39_MBPS, + HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_52_MBPS, + HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_58_5_MBPS, + HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_65_MBPS, + HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_78_MBPS, +#ifdef WCN_PRONTO + HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_86_5_MBPS, +#endif + + /*11AC rate 20MHZ Shortl GI*/ + HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_7_2_MBPS, + HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_14_4_MBPS, + HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_21_6_MBPS, + HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_28_8_MBPS, + HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_43_3_MBPS, + HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_57_7_MBPS, + HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_65_MBPS, + HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_72_2_MBPS, + HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_86_6_MBPS, +#ifdef WCN_PRONTO + HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_96_1_MBPS, +#endif + + /*11AC rates 40MHZ normal GI*/ + HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_13_5_MBPS , + HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_27_MBPS, + HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_40_5_MBPS, + HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_54_MBPS, + HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_81_MBPS, + HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_108_MBPS, + HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_121_5_MBPS, + HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_135_MBPS, + HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_162_MBPS, + HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_180_MBPS, + + /*11AC rates 40MHZ short GI*/ + HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_15_MBPS , + HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_30_MBPS, + HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_45_MBPS, + HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_60_MBPS, + HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_90_MBPS, + HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_120_MBPS, + HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_135_MBPS, + HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_150_MBPS, + HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_180_MBPS, + HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_200_MBPS, + + /*11AC rates 80 MHZ normal GI*/ + HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_29_3_MBPS , + HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_58_5_MBPS, + HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_87_8_MBPS, + HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_117_MBPS, + HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_175_5_MBPS, + HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_234_MBPS, + HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_263_3_MBPS, + HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_292_5_MBPS, + HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_351_MBPS, + HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_390_MBPS, + + /*11AC rates 80 MHZ short GI*/ + HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_32_5_MBPS , + HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_65_MBPS, + HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_97_5_MBPS, + HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_130_MBPS, + HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_195_MBPS, + HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_260_MBPS, + HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_292_5_MBPS, + HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_325_MBPS, + HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_390_MBPS, + HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_433_3_MBPS, +#endif //WLAN_FEATURE_11AC + + NUM_HAL_PHY_RATES, + HAL_PHY_RATE_INVALID, + MIN_RATE_INDEX = 0, + MAX_RATE_INDEX = NUM_HAL_PHY_RATES - 1, + HAL_PHY_RATE_INVALID_MAX_FIELD = 0x7FFFFFFF /* define as 4 bytes data */ +}eHalPhyRates; + +#define NUM_RATE_POWER_GROUPS NUM_HAL_PHY_RATES //total number of rate power groups including the CB_RATE_POWER_OFFSET +typedef uAbsPwrPrecision tRateGroupPwr[NUM_HAL_PHY_RATES]; + +//From halNvTables.h +#define NV_FIELD_COUNTRY_CODE_SIZE 3 +typedef PACKED_PRE struct PACKED_POST +{ + uint8 regDomain; //from eRegDomainId + uint8 countryCode[NV_FIELD_COUNTRY_CODE_SIZE]; // string identifier +}sDefaultCountry; + + +#define GF_PA_BIAS_SELECT_MASK 0X7 //(3 bits) +#define TSMC_PA_BIAS_SELECT_MASK 0x7 //(3 bits) + +#define GF_PA_BIAS_SELECT_1 0X0 +#define GF_PA_BIAS_SELECT_2 0X1 + +#define TSMC_PA_BIAS_SELECT_1 0X0 +#define TSMC_PA_BIAS_SELECT_2 0X1 +#define TSMC_PA_BIAS_SELECT_3 0x2 + + +#define EXT_PA_CTRL_POLARITY_DEFAULT 0X0 +#define EXT_PA_CTRL_POLARITY_VALID 0X80 + +#define EXT_PA_CTRL0_POLARITY_MASK 0X3 +#define EXT_PA_CTRL0_POLARITY_OFFSET 0X0 +#define EXT_PA_CTRL1_POLARITY_MASK 0XC +#define EXT_PA_CTRL1_POLARITY_OFFSET 0X2 + +#define EXT_PA_CTRL_POLARITY_ZERO 0X1 +#define EXT_PA_CTRL_POLARITY_ONE 0X2 + +typedef PACKED_PRE struct PACKED_POST +{ + uint8 skuID; + uint8 tpcMode2G; + uint8 tpcMode5G; + uint8 configItem1; + + uint8 xPA2G; + uint8 xPA5G; + uint8 extPaCtrl0Polarity; + uint8 extPaCtrl1Polarity; + + uint8 xLNA2G; + uint8 xLNA5G; + uint8 xCoupler2G; + uint8 xCoupler5G; + + uint8 xPdet2G; + uint8 xPdet5G; + uint8 enableDPD2G; + uint8 enableDPD5G; + + uint8 pdadcSelect2G; + uint8 pdadcSelect5GLow; + uint8 pdadcSelect5GMid; + uint8 pdadcSelect5GHigh; + + uint32 configItem2; + uint32 configItem3; + uint32 configItem4; +}sFwConfig; + + +#define NUM_RF_VR_RATE 13 +typedef uAbsPwrPrecision tRateGroupPwrVR[NUM_RF_VR_RATE]; + +typedef PACKED_PRE union PACKED_POST +{ + tRateGroupPwr pwrOptimum[NUM_RF_SUBBANDS]; // NV_TABLE_RATE_POWER_SETTINGS + sRegulatoryDomains regDomains[NUM_REG_DOMAINS]; // NV_TABLE_REGULATORY_DOMAINS + sDefaultCountry defaultCountryTable; // NV_TABLE_DEFAULT_COUNTRY + tTpcPowerTable plutCharacterized[NUM_RF_CHANNELS]; // NV_TABLE_TPC_POWER_TABLE + int16 plutPdadcOffset[NUM_RF_CHANNELS]; // NV_TABLE_TPC_PDADC_OFFSETS + tRateGroupPwrVR pwrOptimum_virtualRate[NUM_RF_SUBBANDS]; // NV_TABLE_VIRTUAL_RATE + sFwConfig fwConfig; // NV_TABLE_FW_CONFIG + sRssiChannelOffsets rssiChanOffsets[2]; // NV_TABLE_RSSI_CHANNEL_OFFSETS + sHwCalValues hwCalValues; // NV_TABLE_HW_CAL_VALUES + int16 antennaPathLoss[NUM_RF_CHANNELS]; // NV_TABLE_ANTENNA_PATH_LOSS + int16 pktTypePwrLimits[NUM_802_11_MODES][NUM_RF_CHANNELS]; // NV_TABLE_PACKET_TYPE_POWER_LIMITS + sOfdmCmdPwrOffset ofdmCmdPwrOffset; // NV_TABLE_OFDM_CMD_PWR_OFFSET + sTxBbFilterMode txbbFilterMode; // NV_TABLE_TX_BB_FILTER_MODE +}ALIGN_4 uNvTables; + +//From halPhy.h +typedef tPowerdBm tChannelPwrLimit; + +typedef PACKED_PRE struct PACKED_POST +{ + uint8 chanId; + tChannelPwrLimit pwr; +} ALIGN_4 tChannelListWithPower; + +//From HAL/inc/halNvTables.h +typedef enum +{ + NV_FIELDS_IMAGE = 0, //contains all fields + + NV_TABLE_RATE_POWER_SETTINGS = 2, + NV_TABLE_REGULATORY_DOMAINS = 3, + NV_TABLE_DEFAULT_COUNTRY = 4, + NV_TABLE_TPC_POWER_TABLE = 5, + NV_TABLE_TPC_PDADC_OFFSETS = 6, + NV_TABLE_HW_CAL_VALUES = 7, + NV_TABLE_RSSI_CHANNEL_OFFSETS = 9, + NV_TABLE_CAL_MEMORY = 10, //cal memory structure from halPhyCalMemory.h preceded by status + NV_TABLE_FW_CONFIG = 11, + NV_TABLE_ANTENNA_PATH_LOSS = 12, + NV_TABLE_PACKET_TYPE_POWER_LIMITS = 13, + NV_TABLE_OFDM_CMD_PWR_OFFSET = 14, + NV_TABLE_TX_BB_FILTER_MODE = 15, + NV_TABLE_VIRTUAL_RATE = 18, + + NUM_NV_TABLE_IDS, + NV_ALL_TABLES = 0xFFF, + NV_BINARY_IMAGE = 0x1000, + NV_MAX_TABLE = 0x7FFFFFFF /* define as 4 bytes data */ +}eNvTable; + +typedef PACKED_PRE struct PACKED_POST +{ + tRateGroupPwr pwrOptimum[NUM_RF_SUBBANDS]; // NV_TABLE_RATE_POWER_SETTINGS + sRegulatoryDomains regDomains[NUM_REG_DOMAINS]; // NV_TABLE_REGULATORY_DOMAINS + sDefaultCountry defaultCountryTable; // NV_TABLE_DEFAULT_COUNTRY + tTpcPowerTable plutCharacterized[NUM_RF_CHANNELS]; // NV_TABLE_TPC_POWER_TABLE + int16 plutPdadcOffset[NUM_RF_CHANNELS]; // NV_TABLE_TPC_PDADC_OFFSETS + tRateGroupPwrVR pwrOptimum_virtualRate[NUM_RF_SUBBANDS]; // NV_TABLE_VIRTUAL_RATE + sFwConfig fwConfig; // NV_TABLE_FW_CONFIG + sRssiChannelOffsets rssiChanOffsets[2]; // NV_TABLE_RSSI_CHANNEL_OFFSETS + sHwCalValues hwCalValues; // NV_TABLE_HW_CAL_VALUES + int16 antennaPathLoss[NUM_RF_CHANNELS]; // NV_TABLE_ANTENNA_PATH_LOSS + int16 pktTypePwrLimits[NUM_802_11_MODES][NUM_RF_CHANNELS]; // NV_TABLE_PACKET_TYPE_POWER_LIMITS + sOfdmCmdPwrOffset ofdmCmdPwrOffset; // NV_TABLE_OFDM_CMD_PWR_OFFSET + sTxBbFilterMode txbbFilterMode; // NV_TABLE_TX_BB_FILTER_MODE +}ALIGN_4 sNvTables; + +typedef PACKED_PRE struct PACKED_POST +{ + sNvFields fields; + sNvTables tables; +}ALIGN_4 sHalNv; + +extern const sHalNv nvDefaults; + +#endif + diff --git a/riva/inc/wlan_phy.h b/riva/inc/wlan_phy.h new file mode 100644 index 000000000000..9e8df121bb50 --- /dev/null +++ b/riva/inc/wlan_phy.h @@ -0,0 +1,898 @@ +/* +* Copyright (c) 2012-2013 Qualcomm Atheros, Inc. +* All Rights Reserved. +* Qualcomm Atheros Confidential and Proprietary. +*/ + +#ifndef WLAN_PHY_H +#define WLAN_PHY_H +/*============================================================================ +@file wlan_phy.h + +Contains definitions of all PHY related structures that aree needed by FTM/PTT + +Copyright (c) 2007 Qualcomm Technologies, Inc. All Rights Reserved. +Qualcomm Technologies Proprietary and Confidential +============================================================================*/ +#include + +/* Currently this structure holds the information about the current calibration mode. +In future, if anymore info is needed, that can be added here */ +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 currentCalibration; +} sCalibrationInfo; + +typedef PACKED_PRE struct PACKED_POST { + tANI_S16 I; //ADC sample of PHY_I_RAIL + tANI_S16 Q; //ADC sample of PHY_Q_RAIL +}tIQSamples; + +typedef tIQSamples tIQAdc; +typedef tIQSamples tIQDac; + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 maxGainIndex; + tANI_U8 topGainDb; + tANI_U8 bottomGainDb; + tANI_U8 unused[1]; +}tAsicAgc; + +#define TXFIR_MEM QWLAN_TXFIR_TXCAL_MEM0_MREG +#define TXFIR_MEM_GAIN_MULT (16) //bytes per gain +#define TXFIR_MEM_PER_CHAIN (16 * TXFIR_MEM_GAIN_MULT) //# of gains per chain * bytes per gain + +typedef tIQAdc tTxCarrierError; + +#define ONE_MICROSECOND (160) +#define DEFAULT_INTERFRAME_SPACE (ONE_MICROSECOND * 10) //10 microseconds + +typedef enum { + PHYDBG_TX_IDLE = 0, + PHYDBG_TX_START = 1, + PHYDBG_TX_WARMUP = 2, + PHYDBG_TX_INFD = 3, + PHYDBG_TX_CMD = 4, + PHYDBG_TX_SVC = 5, + PHYDBG_TX_PYLDF = 6, + PHYDBG_TX_PYLDR = 7, + PHYDBG_TX_CRC = 8, + PHYDBG_TX_FLUSH = 9, + PHYDBG_TX_TXDONEWAIT = 10, + PHYDBG_TX_TIFWAIT = 11 +} ePhyDbgTxStatus; + +typedef enum { + PHYDBG_PREAMBLE_OFDM, + PHYDBG_PREAMBLE_GREENFIELD, + PHYDBG_PREAMBLE_MIXED, + PHYDBG_PREAMBLE_SHORTB, + PHYDBG_PREAMBLE_LONGB, + + PHYDBG_LDPC_PREAMBLE_OFDM = 0x10, + PHYDBG_LDPC_PREAMBLE_GREENFIELD = 0x11, + PHYDBG_LDPC_PREAMBLE_MIXED = 0x12 +} ePhyDbgPreamble; + + +//grab ram +#ifdef VERIFY_HALPHY_SIMV_MODEL +#define GRAB_RAM_DBLOCK_SIZE (256) //number of samples in full capture +#else +#define GRAB_RAM_DBLOCK_SIZE (1024) //number of samples in full capture +#endif + +#define MAX_REQUESTED_GRAB_RAM_SAMPLES 256 //only allow 256 samples at a time +#define GRAB_RAM_BUFFER_DEPTH (4*1024) //maximum grab ram size in full capture +#define LAST_GRAB_RAM_SAMPLE_INDEX (GRAB_RAM_BUFFER_DEPTH - 1) + + +typedef PACKED_PRE struct PACKED_POST { + tIQAdc rx0; +} tGrabRamSample; + + +enum { + GRABRAM_RAWADC = 0, + GRABRAM_POSTIQ +}; +typedef tANI_U32 eGrabRamSampleType; + +typedef tANI_S8 tANI_S6; +typedef tANI_S16 tANI_S9; +typedef tANI_S16 tANI_S10; +typedef tANI_S16 tANI_S12; +typedef tANI_U16 tANI_U10; + + + +//convert float to a format that preserves enough accuracy to be used by driver +typedef tANI_S16 t2Decimal; +#define CONVERT_TO_2DECIMAL_PLACES(x) (x * 100) +#define CONVERT_FROM_2DECIMAL_PLACES(x) (x / 100) + +#ifndef PTT_FLOAT +#define PTT_FLOAT tANI_U32 // driver code can't include float, +//so this reserves space in our structures to allow floating point measurements +#endif + +typedef enum +{ + PHY_RX_CHAIN_0 = 0, + + PHY_MAX_RX_CHAINS = 1, + PHY_ALL_RX_CHAINS, + PHY_NO_RX_CHAINS +}ePhyRxChains; + +typedef enum +{ + PHY_I_RAIL = 0, + PHY_Q_RAIL = 1, + PHY_NUM_IQ_RAILS +}ePhyIQ; + +//[RY] extend total gain steps to 24 + +enum +{ + TX_GAIN_STEP_0, + TX_GAIN_STEP_1, + TX_GAIN_STEP_2, + TX_GAIN_STEP_3, + TX_GAIN_STEP_4, + TX_GAIN_STEP_5, + TX_GAIN_STEP_6, + TX_GAIN_STEP_7, + TX_GAIN_STEP_8, + TX_GAIN_STEP_9, + TX_GAIN_STEP_10, + TX_GAIN_STEP_11, + TX_GAIN_STEP_12, + TX_GAIN_STEP_13, + TX_GAIN_STEP_14, + TX_GAIN_STEP_15, + TX_GAIN_STEP_16, + TX_GAIN_STEP_17, + TX_GAIN_STEP_18, + TX_GAIN_STEP_19, + TX_GAIN_STEP_20, + TX_GAIN_STEP_21, + TX_GAIN_STEP_22, + TX_GAIN_STEP_23, + TX_GAIN_STEP_24, + TX_GAIN_STEP_25, + TX_GAIN_STEP_26, + TX_GAIN_STEP_27, + TX_GAIN_STEP_28, + TX_GAIN_STEP_29, + TX_GAIN_STEP_30, + TX_GAIN_STEP_31, + + RX_GAIN_STEP_0 = 0, + RX_GAIN_STEP_1, + RX_GAIN_STEP_2, + RX_GAIN_STEP_3, + RX_GAIN_STEP_4, + RX_GAIN_STEP_5, + RX_GAIN_STEP_6, + RX_GAIN_STEP_7, + RX_GAIN_STEP_8, + RX_GAIN_STEP_9, + RX_GAIN_STEP_10, + RX_GAIN_STEP_11, + RX_GAIN_STEP_12, + RX_GAIN_STEP_13, + RX_GAIN_STEP_14, + RX_GAIN_STEP_15, + + NUM_TX_GAIN_STEPS = 32, + MAX_TX_GAIN_STEP = TX_GAIN_STEP_31, + + NUM_RX_GAIN_STEPS = 16, + MAX_RX_GAIN_STEP = RX_GAIN_STEP_15, +}; +typedef tANI_U32 eGainSteps; + + +//[RY] new for PRIMA +#define DPD_RESPONSE_SIZE 128 +typedef PACKED_PRE struct PACKED_POST { + tANI_U8 dpdCalFailCnt; //Count for number of times DPD cal failed. + tANI_U8 dpdCalSuccessCnt; //Count for number of times DPD cal passed. + tANI_U8 dpdColdBootRepeatCalStatus; + tANI_U8 dpdLastIteration; + tANI_S16 dpd_threshold[DPD_RESPONSE_SIZE]; + tANI_S16 dpd_aoffset[DPD_RESPONSE_SIZE]; + tANI_S16 dpd_again[DPD_RESPONSE_SIZE]; + tANI_S16 dpd_poffset[DPD_RESPONSE_SIZE]; + tANI_S16 dpd_pgain[DPD_RESPONSE_SIZE]; + tANI_S32 dpd_sample[20]; + tANI_U8 dpd_try; + tANI_U8 band; +}sDPDcorrectionCalValues; + +typedef PACKED_PRE struct PACKED_POST { + sDPDcorrectionCalValues dpd[PHY_MAX_TX_CHAINS]; +}sTxChainsDPDCalValues; + + +//[RY] RX IQ correction coefficients Memory +typedef PACKED_PRE struct PACKED_POST { + tANI_S9 coeff_i[5]; + tANI_S9 coeff_q[5]; +}sIQCalValues; + +//[RY], added for RIVA +typedef PACKED_PRE struct PACKED_POST { + tANI_S9 iq_ampimb_coeff; + tANI_S16 txloleakage_i; // raw data is 6-bit 2's compliment + tANI_S16 txloleakage_q; // raw data is 6-bit 2's compliment +}sTXIQCalValues; + +//[RY], added for RIVA +typedef PACKED_PRE struct PACKED_POST { + tANI_S9 iqphaseimb_coeff_i[5]; + tANI_S9 iqphaseimb_coeff_q[5]; +}sTXIQPhaseImbCalValues; + +typedef PACKED_PRE struct PACKED_POST { + sIQCalValues iq[PHY_MAX_RX_CHAINS]; +}sRxChainsIQCalValues; + +//[RY] change for PRIMA +typedef PACKED_PRE struct PACKED_POST { + sTXIQCalValues iq[PHY_MAX_TX_CHAINS]; + sTXIQPhaseImbCalValues iqImb[PHY_MAX_TX_CHAINS]; +}sTxChainsIQCalValues; + +typedef PACKED_PRE struct PACKED_POST { + tANI_S9 co_i[3]; + tANI_S9 co_q[3]; +}sHKIQCalValues; + +typedef PACKED_PRE struct PACKED_POST { + sHKIQCalValues co[PHY_MAX_TX_CHAINS]; +}sTxChainsHKIQCalValues; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U8 lna_code; //wlan_lna_5g_control1,wl_5g_lna_load_ctune + tANI_U8 gm_code; //wlan_rxgm_5g_control4,wlgm_ctune +}sLnaBandCalValues; + +typedef PACKED_PRE struct PACKED_POST { + sLnaBandCalValues lnaCode[PHY_MAX_RX_CHAINS]; +}sTxChainsLnaBandCalValues; + +typedef tANI_U16 t_mW; //milliWatts +typedef tANI_U8 tPwrTemplateIndex; //5-bit number used as the index into the tx gain tables + +typedef PACKED_PRE struct PACKED_POST { + tANI_U8 txPowerAdc[PHY_MAX_TX_CHAINS]; +}sTxChainsPowerAdcReadings; + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 agcGain; +}tRxGain; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U8 rx[PHY_MAX_RX_CHAINS]; +}sRxChainsData; + +typedef sRxChainsData sRxChainsRssi; +typedef sRxChainsData sRxChainsAgcDisable; + +typedef PACKED_PRE struct PACKED_POST { + tANI_BOOLEAN rx[PHY_MAX_RX_CHAINS]; +}sRxChainsBoolean; + +typedef sRxChainsBoolean sRxChainsAgcEnable; + +#define NUM_AGC_GAINS 64 +typedef tRxGain sAgcGainLut[NUM_AGC_GAINS]; + + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_S6 iLo; + tANI_S6 qLo; +}sTxFirLoCorrect; + +typedef tIQAdc sTxLoCorrectBB[PHY_MAX_TX_CHAINS][NUM_TX_GAIN_STEPS]; + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U32 txIqLoCache[PHY_MAX_TX_CHAINS][NUM_TX_GAIN_STEPS][4]; + tANI_U32 spatialRotation; +}tAsicTxFir; + +//Tx Power Config +//A collection of selected calibrated power points at selected frequencies. +//The algorithm does not need to know any particulars about which frequencies or cal points, +// just the linearized adjustments at the selected calibration points +#define MAX_TPC_CHANNELS (NUM_RF_CHANNELS) +#define START_TPC_CHANNEL (2412) +#define END_TPC_CHANNEL (2484) + +#define MAX_PWR_LUT_DBM (24) +#define MIN_PWR_LUT_DBM (8) + + +/* The reason that MAX_PWR_LUT_DBM_2DEC_PLACES is not simply (MAX_PWR_LUT_DBM * 100) is due to the fact + that we are interpolating the 5-bit power template index from this range compared to a LUT range of 0 to 127. + There is an expectation that this power range is evenly divided in 0.5dBm steps. + We expect that a commanded 13dBm would yield a power template index of 10, where a power template index of 0 would represent 8dBm. + If we used an even 2400 to represent the max power, then the calculation for 13dBm actually returns 9: + (127 - 0)*((1300 - 800)/(2400 - 800))+0 = 39.6875 = 39. When shifted to 5 bits, =9. Not what we wanted. + What we need to do is find the 2-decimal place power that corresponds as closely as possible to the 127 in the 0 to 127 range. + For the 800 to 2400 range, that comes out to 2386.5, so 2386. So again for a commanded power of 13dBm: + (127 - 0)*((1300 - 800)/(2386 - 800))+0 = 40.0378 = 40. When shifted to 5-bits, = 10, which is what we wanted. + +*/ + +#define MIN_PWR_LUT_DBM_2DEC_PLACES (MIN_PWR_LUT_DBM * 100) +#define MAX_PWR_LUT_DBM_2DEC_PLACES ((MAX_PWR_LUT_DBM * 100) - (1 + (100 * (MAX_PWR_LUT_DBM - MIN_PWR_LUT_DBM))/TPC_MEM_POWER_LUT_DEPTH)) + +//macro provides a quick conversion of dbm value between MIN_PWR_LUT_DBM and MAX_PWR_LUT_DBM to a power template index(0 to 31) +//based on convention, which may not hold true in the future. +#define CONVERT_DBM_GINDEX(dbm) (((dbm - MIN_PWR_LUT_DBM) * 32) / (MAX_PWR_LUT_DBM - MIN_PWR_LUT_DBM)) + +typedef tANI_U8 tTxGainCombo; //7-bit gain value used to get the power measurement + +typedef PACKED_PRE struct PACKED_POST +{ + tPowerDetect min; + tPowerDetect max; +}tPwrTemplateRange; + + + +/* + The following union affords backward compatibility with txGain usage with band-specific tTpcConfig tables. + Due to my finding that 7-bits is not enough precision, we need to reuse the txGain space as extra precision bits + for the adjustedPwrDet. My spreadsheet shows that we need at least 4 bits more precision. + To know which usage, the MSB of adjustedPwrDet can be set to signify the extra precision in place of the txGain, which isn't used anyway. + We just need to be careful not to interpret a pre-existing table's txGain as extra precision. +*/ + + typedef union + { + tTxGainCombo txGain; //7-bit gain used to measure the pwrDetAdc value + tANI_U8 hi8_adjustedPwrDet; //if the MSB is set in adjustedPwrDet, then these are extra bits of precision + }uExtraLutBits; + + +typedef PACKED_PRE struct PACKED_POST +{ + t2Decimal min; //sometimes used for comparing chain powers + t2Decimal max; //sometimes used for comparing chain powers +}tPowerdBmRange; //absolute power measurement precision maintained to two decimal places + + +typedef tANI_U16 tRfADCVal; +typedef tRfADCVal tTempADCVal; + +typedef PACKED_PRE struct PACKED_POST +{ + tRfADCVal pdadc_offset; + tANI_U8 reserved[2]; +}tTpcParams; + + +//these definitions used as indexing to power per channel per rate table stored in NV +#define CB_RATE_POWER_OFFSET 0 +#define CB_RATE_POWER_OFFSET_LAST_INDEX 60 //last index where we would apply the CB_RATE_POWER_OFFSET + +/* TX Power Calibration & Report Types */ + + + typedef PACKED_PRE struct PACKED_POST + { + tANI_U8 temperatureAdc; //= 5 bit temperature measured at time sample was taken + tANI_U8 txGain; //= 7 bit gain value used to get the power measurement + tANI_U8 pwrDetAdc; //= 8 bit ADC power detect value + tANI_U8 reserved; + uAbsPwrPrecision absPowerMeasured; //= dBm measurement, will be truncated to two decimal places + }tTpcCalPoint; + + + typedef PACKED_PRE struct PACKED_POST + { + tANI_U16 numTpcCalPoints; + tANI_U16 reserved; + tTpcCalPoint chain[MAX_TPC_CAL_POINTS]; + }tTpcChainData; + + + typedef PACKED_PRE struct PACKED_POST + { + tANI_U16 freq; //frequency in MHz + tANI_U16 reserved; + tTpcChainData empirical[PHY_MAX_TX_CHAINS]; //TPC samples passed in + }tTpcFreqData; + + typedef PACKED_PRE struct PACKED_POST + { + tANI_U8 numChannels; + tANI_U8 reserved[3]; + tTpcFreqData calValues[MAX_TPC_CHANNELS]; + }sTpcFreqCalTable; + + +typedef PACKED_PRE struct PACKED_POST { + tPowerDetect lut; //7-bit value in the power Lookup Table + tANI_U8 reserved[3]; + + uAbsPwrPrecision abs; //LUT value conversion to absolute dBm +}tTxPowerLutOutput; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U8 gain; //8-bit coarse(bits 4-7) & fine(bits 0-3) gain commanded for the current index + tPowerDetect adc; //8-bit power ADC sampled during the packet preamble + tANI_U16 rawAdc; //11-bit power raw ADC sampled + + tTxPowerLutOutput indexMinMatch; //minimum LUT matching power that satisfies the power template index setting + tTxPowerLutOutput indexMaxMatch; //maximum LUT matching power that satisfies the power template index setting + tTxPowerLutOutput output; //output power values corresponding to power ADC index +}tTxChainPower; + +extern const tRfChannelProps rfChannels[NUM_RF_CHANNELS]; + +typedef enum +{ + RF_CAL_TONE_28NEG, + RF_CAL_TONE_24NEG, + RF_CAL_TONE_20NEG, + RF_CAL_TONE_16NEG, + RF_CAL_TONE_12NEG, + RF_CAL_TONE_8NEG, + RF_CAL_TONE_4NEG, + RF_CAL_TONE_4POS, + RF_CAL_TONE_8POS, + RF_CAL_TONE_12POS, + RF_CAL_TONE_16POS, + RF_CAL_TONE_20POS, + RF_CAL_TONE_24POS, + RF_CAL_TONE_28POS, + + NUM_RF_TONES, + + MIN_RF_TONE = RF_CAL_TONE_28NEG, + MAX_RF_TONE = RF_CAL_TONE_28POS +}eRfTones; + +typedef tANI_U8 tDcoCorrect; +typedef tANI_S8 tIm2Correct; + +typedef PACKED_PRE struct PACKED_POST { + tDcoCorrect IDcoCorrect; + tDcoCorrect QDcoCorrect; + tANI_U8 dcRange; +}tRxDcoCorrect; + +typedef PACKED_PRE struct PACKED_POST { + tRxDcoCorrect dco[PHY_MAX_RX_CHAINS]; +}tRxChainsDcoCorrections; + +typedef PACKED_PRE struct PACKED_POST { + tIm2Correct ICorrect; + tIm2Correct QCorrect; +}tRxIm2Correct; + +typedef PACKED_PRE struct PACKED_POST { + tRxIm2Correct dco[PHY_MAX_RX_CHAINS]; +}tRxChainsIm2Corrections; + +typedef PACKED_PRE struct PACKED_POST { + tDcoCorrect IDcoCorrect; + tDcoCorrect QDcoCorrect; +}tTxLoCorrect; + +typedef PACKED_PRE struct PACKED_POST { + tTxLoCorrect txLo[PHY_MAX_TX_CHAINS]; +}sTxChainsLoCorrections; + + +//tDcoCorrect is needed to define rf specific structures + +#define NUM_RF_RX_GAIN_STEPS (128) +#define MAX_RF_RX_GAIN_STEP (NUM_RF_RX_GAIN_STEPS - 1) + +#define NUM_RF_TX_GAIN_STEPS (16) +#define MAX_RF_TX_GAIN_STEP (NUM_RF_TX_GAIN_STEPS - 1) + +#define RF_AGC_GAIN_LUT_DEPTH (128) +#define NUM_RF_DCO_VALUES (128) //There are only 32 DCO values, but our algorithm it makes more sense for us to access these by AGC gain index +#define MAX_RF_DCO_VALUE (NUM_RF_DCO_VALUES - 1) + + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U16 gainReg1; //GEMINI_REG_RX_GC_0 (lna + mix + tia + bq1 + bq2 + pga) +}tRfRxGain; + + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U16 bbf_gain_cnt; + tANI_U16 bbf_lin_adj; + tANI_U16 lo_mix_da_gain_cntl; + tANI_U16 pa_gain_cntl; + tANI_U16 da_pa_bias_1_cnt; + tANI_U16 da_pa_bias_2_cntl; +}tRfTxGain; + +typedef PACKED_PRE struct PACKED_POST +{ + //TODO:define this struct for Gemini + tANI_U8 rxIf; + tANI_U8 txIf; + tANI_U8 txRf; + tANI_U8 reserved; +}sRfSpecificFilterSettings; + +typedef sRfSpecificFilterSettings sRfChannelFilterSettings[NUM_RF_CHANNELS]; + + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 hdet_ctl_ext_atten; + tANI_U8 hdet_dcoc_code; + tANI_U8 hdet_dcoc_ib_rcal_en; + tANI_U8 hdet_dcoc_ib_scal_en; +}sRfNvCalValues; //stored in QFUSE + + + +typedef enum +{ + SYNTH_UNLOCKED, + SYNTH_LOCK +}eRfSynthLock; + +typedef enum +{ + TEMP_SENSOR_PA, + TEMP_SENSOR_RX +}eRfTempSensor; + +typedef enum +{ + TEMPERATURE_BIN_0, //-30 to 5 C + TEMPERATURE_BIN_1, //5 to 45 C + TEMPERATURE_BIN_2, //45 to 85 C + TEMPERATURE_BIN_3, //85 to 125 C + NUM_TEMPERATURE_BINS +}eTemperatureBins; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U16 hdetDcocCode; + tANI_U16 hdetDcoOffset; +}sRfHdetCalValues; + +#define TPC_TXPWR_ENABLE_MASK QWLAN_TPC_TXPWR_ENABLE_EN_MASK + + +#define TPC_MEM_TX0_PWR_LUT_OFFSET QWLAN_TPC_POWERDET0_RAM_MREG +#define TPC_MEM_TX1_PWR_LUT_OFFSET QWLAN_TPC_POWERDET1_RAM_MREG +#define TPC_MEM_TX2_PWR_LUT_OFFSET QWLAN_TPC_POWERDET2_RAM_MREG +#define TPC_MEM_TX3_PWR_LUT_OFFSET QWLAN_TPC_POWERDET3_RAM_MREG +#define TPC_MEM_TX0_GAIN_LUT_OFFSET QWLAN_TPC_GAIN_LUT0_MREG +#define TPC_MEM_TX1_GAIN_LUT_OFFSET QWLAN_TPC_GAIN_LUT1_MREG +#define TPC_MEM_TX2_GAIN_LUT_OFFSET QWLAN_TPC_GAIN_LUT2_MREG +#define TPC_MEM_TX3_GAIN_LUT_OFFSET QWLAN_TPC_GAIN_LUT3_MREG + +//these masks are the same for both chains +#define TPC_POWERDET_MASK QWLAN_TPC_POWERDET0_RAM_POWER_MASK +#define TPC_GAIN_RF_MASK QWLAN_TPC_GAIN_LUT0_RF_GAIN_MASK +#define TPC_GAIN_RF_OFFSET QWLAN_TPC_GAIN_LUT0_RF_GAIN_OFFSET +#define TPC_GAIN_DIG_MASK QWLAN_TPC_GAIN_LUT0_DIG_GAIN_MASK + + +#define TPC_MEM_GAIN_LUT_DEPTH 32 + + +#define TPC_ADC_CTRL_REG QWLAN_TPC_ADC_CTRL_GET_ADC_REG +#define TPC_ADC_GET_MASK QWLAN_TPC_ADC_CTRL_GET_ADC_GET_ADC_MASK + +#define TPC_ADC_FAILED_MASK QWLAN_TPC_ADC_STATUS_FAILED_MASK +#define TPC_ADC_BUSY_P_MASK QWLAN_TPC_ADC_STATUS_BUSY_P_MASK +#define TPC_ADC_BUSY_T_MASK QWLAN_TPC_ADC_STATUS_BUSY_T_MASK + + +#define MSK_1 0x1 +#define MSK_2 0x3 +#define MSK_3 0x7 +#define MSK_4 0xF +#define MSK_5 0x1F +#define MSK_6 0x3F +#define MSK_7 0x7F +#define MSK_8 0xFF +#define MSK_9 0x1FF +#define MSK_10 0x3FF +#define MSK_11 0x7FF +#define MSK_12 0xFFF +#define MSK_13 0x1FFF +#define MSK_14 0x3FFF +#define MSK_15 0x7FFF +#define MSK_16 0xFFFF +#define MSK_17 0x1FFFF +#define MSK_18 0x3FFFF +#define MSK_19 0x7FFFF +#define MSK_20 0xFFFFF +#define MSK_21 0x1FFFFF +#define MSK_22 0x3FFFFF +#define MSK_23 0x7FFFFF +#define MSK_24 0xFFFFFF +#define MSK_25 0x1FFFFFF +#define MSK_26 0x3FFFFFF +#define MSK_27 0x7FFFFFF +#define MSK_28 0xFFFFFFF +#define MSK_29 0x1FFFFFFF +#define MSK_30 0x3FFFFFFF +#define MSK_31 0x7FFFFFFF +#define MSK_32 0xFFFFFFFF + + +#define COARSE_GAIN_MASK MSK_4 +#define COARSE_GAIN_OFFSET 4 +#define FINE_GAIN_MASK MSK_4 //the upper most bit overlaps the coarse gain and should not be used for TPC LUT data +#define FINE_GAIN_OFFSET 0 + +typedef enum +{ + TPC_COARSE_TXPWR_0, + TPC_COARSE_TXPWR_1, + TPC_COARSE_TXPWR_2, + TPC_COARSE_TXPWR_3, + TPC_COARSE_TXPWR_4, + TPC_COARSE_TXPWR_5, + TPC_COARSE_TXPWR_6, + TPC_COARSE_TXPWR_7, + TPC_COARSE_TXPWR_8, + TPC_COARSE_TXPWR_9, + TPC_COARSE_TXPWR_10, + TPC_COARSE_TXPWR_11, + TPC_COARSE_TXPWR_12, + TPC_COARSE_TXPWR_13, + TPC_COARSE_TXPWR_14, + TPC_COARSE_TXPWR_15, + TPC_COARSE_TXPWR_16, + TPC_COARSE_TXPWR_17, + TPC_COARSE_TXPWR_18, + TPC_COARSE_TXPWR_19, + TPC_COARSE_TXPWR_20, + TPC_COARSE_TXPWR_21, + TPC_COARSE_TXPWR_22, + TPC_COARSE_TXPWR_23, + TPC_COARSE_TXPWR_24, + TPC_COARSE_TXPWR_25, + TPC_COARSE_TXPWR_26, + TPC_COARSE_TXPWR_27, + TPC_COARSE_TXPWR_28, + TPC_COARSE_TXPWR_29, + TPC_COARSE_TXPWR_30, + TPC_COARSE_TXPWR_31, + NUM_TPC_COARSE_STEPS = TPC_COARSE_TXPWR_31 - TPC_COARSE_TXPWR_0 + 1, + MIN_TPC_COARSE_TXPWR = TPC_COARSE_TXPWR_0, + MAX_TPC_COARSE_TXPWR = TPC_COARSE_TXPWR_31 +}eTxCoarseGain; //refers to the external RF power adjustment + +typedef enum +{ + TPC_FINE_TXPWR_0, + TPC_FINE_TXPWR_1, + TPC_FINE_TXPWR_2, + TPC_FINE_TXPWR_3, + TPC_FINE_TXPWR_4, + TPC_FINE_TXPWR_5, + TPC_FINE_TXPWR_6, + TPC_FINE_TXPWR_7, + TPC_FINE_TXPWR_8, + TPC_FINE_TXPWR_9, + TPC_FINE_TXPWR_10, + TPC_FINE_TXPWR_11, + TPC_FINE_TXPWR_12, + TPC_FINE_TXPWR_13, + TPC_FINE_TXPWR_14, + TPC_FINE_TXPWR_15, + MIN_TPC_FINE_TXPWR = TPC_FINE_TXPWR_0, + MAX_TPC_FINE_TXPWR = TPC_FINE_TXPWR_15 +}eTxFineGain; //refers to the internal TxFIR power adjustment + +typedef PACKED_PRE struct PACKED_POST { + eTxCoarseGain coarsePwr; + eTxFineGain finePwr; +}tTxGain; + +//for 30second periodic interrupt, do this every 5 minutes +#define HAL_PHY_PERIODIC_CAL_ITER_LIMIT 10 + +typedef enum +{ + //these show which rx and tx chains are enabled, other chains are disable accordingly + //Production modes + PHY_CHAIN_SEL_R0_T0_ON, + + PHY_CHAIN_SEL_BT_R0_T0_ON, //simultaneous bluetooth receive enabled + + + //test modes + PHY_CHAIN_SEL_R0_ON, + PHY_CHAIN_SEL_T0_ON, + PHY_CHAIN_SEL_NO_RX_TX, + + MAX_PHY_CHAIN_SEL, + INVALID_PHY_CHAIN_SEL, + PHY_MAX_CHAIN_SELECT = 0x7FFFFFFF /* define as 4 bytes data */ +}ePhyChainSelect; + +typedef enum +{ +#ifdef CHANNEL_BONDED_CAPABLE + + PHY_CCA_40MHZ_SOURCE = 0, +#endif + + PHY_CCA_20MHZ_SOURCE = 1 +}ePhyCCASource; + +typedef enum +{ + PHY_CCA_FORCED_ON = 0, + PHY_CCA_ED = 1, + PHY_CCA_CD = 2, + PHY_CCA_CD_AND_CS = 3, + PHY_CCA_ED_AND_CD = 4, + PHY_CCA_ED_OR_CD = 5, + PHY_CCA_ED_AND_CD_AND_CS = 6, + PHY_CCA_ED_OR_CD_AND_CS = 7, + PHY_CCA_SEC_ED40_AND_NOR_PKTDET40_PKTDET20 = 8, + PHY_CCA_SEC_BUSY = 9 +}ePhyCCAMode; + +typedef enum +{ + PHY_RX_DISABLE_NONE = 0, + PHY_RX_DISABLE_11AG = 0x00000001, + PHY_RX_DISABLE_11B = 0x00000002, + PHY_RX_DISABLE_11N40 = 0x00000004, + PHY_RX_DISABLE_11AC80 = 0x00000008, + + PHY_RX_DISABLE_11ABG = (PHY_RX_DISABLE_11AG | PHY_RX_DISABLE_11B), + PHY_RX_DISABLE_ALL_TYPES = (PHY_RX_DISABLE_11B | PHY_RX_DISABLE_11AG | + PHY_RX_DISABLE_11N40 | PHY_RX_DISABLE_11AC80), +}ePhyRxDisabledPktTypes; + + +// Enum for network density setting. +typedef enum +{ + PHY_NW_DENSITY_LOW = 0, + PHY_NW_DENSITY_MED, + PHY_NW_DENSITY_HIGH, + PHY_NW_DENSITY_ADAPTIVE +} ePhyNwDensity; + + +typedef enum +{ + ALL_CALS, //RxDco 1st, TxLO 2nd + RX_DCO_CAL_ONLY, + RX_IM2_CAL_ONLY, + RX_DCO_IM2_CAL, + TX_LO_CAL_ONLY, + RX_IQ_CAL_ONLY, + TX_IQ_CAL_ONLY, + HKDAC_TX_IQ_CAL_ONLY, + NO_CALS = 0xFF +}eCalSelection; + + +//supports testing of closed-loop power control +typedef enum +{ + FORCE_CLOSED_LOOP_GAIN = 0, //phyDbg pkt gen only uses gain index 0 when we are taking measurements with the closed-loop gain + FORCE_POWER_TEMPLATE_INDEX = 1, //only use forced power template index + FIXED_POWER_DBM = 2, //only use to specify fixed power, ignoring rate/channel/reg limits + REGULATORY_POWER_LIMITS = 3, //use production power Lut settings limited by power limit table per channel + RATE_POWER_NON_LIMITED = 4, //use power specified per rate and channel group, but don't limit power by channel + POWER_INDX_SRC_MAX_VAL = 0x7FFFFFFF, //dummy val to set enum to 4 bytes +}ePowerTempIndexSource; + +#define BIT_0 0x00000001 +#define BIT_1 0x00000002 +#define BIT_2 0x00000004 +#define BIT_3 0x00000008 +#define BIT_4 0x00000010 +#define BIT_5 0x00000020 +#define BIT_6 0x00000040 +#define BIT_7 0x00000080 +#define BIT_8 0x00000100 +#define BIT_9 0x00000200 +#define BIT_10 0x00000400 +#define BIT_11 0x00000800 +#define BIT_12 0x00001000 +#define BIT_13 0x00002000 +#define BIT_14 0x00004000 +#define BIT_15 0x00008000 +#define BIT_16 0x00010000 +#define BIT_17 0x00020000 +#define BIT_18 0x00040000 +#define BIT_19 0x00080000 +#define BIT_20 0x00100000 +#define BIT_21 0x00200000 +#define BIT_22 0x00400000 +#define BIT_23 0x00800000 +#define BIT_24 0x01000000 +#define BIT_25 0x02000000 +#define BIT_26 0x04000000 +#define BIT_27 0x08000000 +#define BIT_28 0x10000000 +#define BIT_29 0x20000000 +#define BIT_30 0x40000000 +#define BIT_31 0x80000000 + +#define WFM_CLK_80 BIT_3 +#define WFM_START BIT_0 +#define WFM_STOP BIT_1 + +#define WFM_MEM_I_DATA_MASK (0x7FF) +#define WFM_MEM_Q_DATA_OFFSET (0xB) +#define WFM_MEM_Q_DATA_MASK (0x3FF800) + +typedef enum +{ + WAVE_SINGLE_SHOT = 0, + WAVE_CONTINUOUS = BIT_2 +}eWaveMode; + +typedef enum +{ + RATE_240 = 0, + RATE_160 = 1, + RATE_120 = 2, + RATE_80 = 3, + RATE_40 = 4, + RATE_20 = 5, +}eWaveRate; + +#define MAX_TONE_AMPLITUDE (2^11) // peak to peak + +#define MAX_TEST_WAVEFORM_SAMPLES 500 + +#define NUM_RX_IMB_CAL_TONES 4 + +#define CAL_WFM_TX_TONE_8_START_IDX 0 +#define CAL_WFM_TX_TONE_8_STOP_IDX 255 +#define CAL_WFM_TX_TONE_MINUS_8_START_IDX 256 +#define CAL_WFM_TX_TONE_MINUS_8_STOP_IDX 511 +#define CAL_WFM_RX_TONE_START_IDX 512 +#define CAL_WFM_RX_TONE_STOP_IDX 767 + +#define B_RATE_CAL_ADJUSTMENT -150 +#define GN_RATE_BANDEDGE_ADJUSTMENT -100 + +#define TPC_INDEX_WIFI_DIRECT 0 +#define TPC_INDEX_LOW_POWER 1 +#define MIN_TPC_GAIN_INDEX 0 //Index 0 used for Wifi Direct +#define TPC_GAIN_LUT_PWR_SLOPE 2 +#define MAX_TPC_GAIN_LUT_DBM (22) +#define MIN_TPC_GAIN_LUT_DBM (6) + +#define MAX_TPC_GAIN_LUT_DBM_2DEC_PLACES (MAX_TPC_GAIN_LUT_DBM * 100) +#define MIN_TPC_GAIN_LUT_DBM_2DEC_PLACES (MIN_TPC_GAIN_LUT_DBM * 100) + +typedef enum +{ + RF_BANDWIDTH_20MHZ = 20, + RF_BANDWIDTH_40MHZ = 40, + RF_BANDWIDTH_80MHZ = 80, + RF_MIN_BANDWIDTH = RF_BANDWIDTH_20MHZ, + RF_MAX_BANDWIDTH = RF_BANDWIDTH_80MHZ, + RF_BANDWIDTH_INVALID = 0x7FFFFFFF +}eRfBandwidth; + +#endif /* WLAN_PHY_H */ diff --git a/riva/inc/wlan_qct_dev_defs.h b/riva/inc/wlan_qct_dev_defs.h new file mode 100644 index 000000000000..12d07fcb8a67 --- /dev/null +++ b/riva/inc/wlan_qct_dev_defs.h @@ -0,0 +1,360 @@ +/* +* Copyright (c) 2012-2013 Qualcomm Atheros, Inc. +* All Rights Reserved. +* Qualcomm Atheros Confidential and Proprietary. +*/ + +/** + * + * @file: wlan_qct_dev_defs.h + * + * @brief: This file contains the hardware related definitions. + * + * Copyright (C) 2008, Qualcomm Technologies, Inc. All rights reserved. + */ + +#ifndef __WLAN_QCT_DEV_DEFS_H +#define __WLAN_QCT_DEV_DEFS_H + + +/* -------------------------------------------------------------------- + * HW definitions for WLAN Chip + * -------------------------------------------------------------------- + */ + +#ifdef WCN_PRONTO + +#ifdef WLAN_SOFTAP_VSTA_FEATURE +//supports both V1 and V2 +#define HAL_NUM_ASSOC_STA 32 // HAL_NUM_STA - No of GP STAs - 2 (1 self Sta + 1 Bcast Sta) +#define HAL_NUM_STA 41 +#define HAL_NUM_HW_STA 16 + +#define HAL_NUM_GPSTA 4 +#define HAL_NUM_UMA_DESC_ENTRIES HAL_NUM_HW_STA // or HAL_NUM_STA + +#define HAL_NUM_BSSID 2 +#define HAL_NUM_STA_WITHOUT_VSTA 12 +#define HAL_NUM_STA_INCLUDING_VSTA 32 + +#define HAL_NUM_VSTA (HAL_NUM_STA - HAL_NUM_HW_STA) +#define QWLANFW_MAX_NUM_VSTA (HAL_NUM_VSTA) +#define QWLANFW_VSTA_INVALID_IDX (HAL_NUM_STA+1) +#define QWLAN_VSTA_MIN_IDX (HAL_NUM_HW_STA) +#define QWLANFW_NUM_GPSTA (HAL_NUM_GPSTA) + +// For Pronto +#define HAL_NUM_STA_WITHOUT_VSTA_PRONTO_V1 9 +#define HAL_NUM_STA_WITHOUT_VSTA_PRONTO_V2 (HAL_NUM_STA_WITHOUT_VSTA) + +#define IS_VSTA_VALID_IDX(__x) \ + ((__x) != QWLANFW_VSTA_INVALID_IDX) + +#define IS_VSTA_IDX(__x) \ + (((__x) >= QWLAN_VSTA_MIN_IDX) && ((__x) < HAL_NUM_STA)) + +#define GET_VSTA_INDEX_FOR_STA_INDEX(__idx) ((__idx) - QWLAN_VSTA_MIN_IDX) + +// is the STA a General Purpose STA? +#define IS_GPSTA_IDX(__x) \ + (((__x) >= (HAL_NUM_HW_STA-HAL_NUM_GPSTA)) && \ + ((__x) < HAL_NUM_HW_STA)) + +// is the STA a HW STA (excluding GP STAs) +#define IS_HWSTA_IDX(__x) \ + ((__x) < (HAL_NUM_HW_STA-HAL_NUM_GPSTA)) + +#define HAL_NUM_STA_INCLUDING_VSTA 32 + +#elif WCN_PRONTO_V1 + +/* In Pronto 1.0 TPE descriptor size is increased to 1K per station + * but not the cMEM allocated for hardware descriptors. Due to this + * memory limitation the number of stations are limited to 9 and BSS + * to 2 respectively. + * + * In Pronto 2.0, TPE descriptor size is reverted + * back to 512 bytes and hence more stations and BSSs can be supported + * from Pronto 2.0 + * + * In Pronto 1.0, 9 HW stations are supported including BCAST STA(staId 0) + * and SELF STA(staId 1). So total ASSOC stations which can connect to + * Pronto 1.0 Softap = 9 - 1(self sta) - 1(Bcast sta) = 7 stations + */ +#define HAL_NUM_HW_STA 9 +#define HAL_NUM_STA (HAL_NUM_HW_STA) +#define HAL_NUM_BSSID 2 +#define HAL_NUM_UMA_DESC_ENTRIES 9 +#define HAL_NUM_ASSOC_STA 7 + + +#else /* WCN_PRONTO_V1 */ + +#define HAL_NUM_HW_STA 14 +#define HAL_NUM_STA (HAL_NUM_HW_STA) +#define HAL_NUM_BSSID 4 +#define HAL_NUM_UMA_DESC_ENTRIES 14 +#define HAL_NUM_ASSOC_STA 12 + + +#endif /* WCN_PRONTO_V1 and WLAN_SOFTAP_VSTA_FEATURE*/ +#else /* WCN_PRONTO */ + +/* + * Riva supports 16 stations in hardware + * + * Riva without Virtual STA feature can only support 12 stations: + * 1 Broadcast STA (hard) + * 1 "Self" STA (hard) + * 10 Soft AP Stations (hard) + * + * Riva with Virtual STA feature supports 38 stations: + * 1 Broadcast STA (hard) + * 1 "Self" STA (hard) + * 4 General Purpose Stations to support Virtual STAs (hard) + * 32 Soft AP Stations (10 hard/22 virtual) + * + * To support concurrency with Vsta, number of stations are increased to 41 (from 38). + * 1 for the second interface. + * 1 for reserving an infra peer STA index (hard) for the other interface. + * 1 for P2P device role. + */ +#ifdef WLAN_SOFTAP_VSTA_FEATURE +#define HAL_NUM_ASSOC_STA 32 +#define HAL_NUM_STA 41 +#define HAL_NUM_HW_STA 16 +#define HAL_NUM_GPSTA 4 +#define HAL_NUM_VSTA (HAL_NUM_STA - HAL_NUM_HW_STA) + +#define QWLANFW_MAX_NUM_VSTA HAL_NUM_VSTA +#define QWLANFW_VSTA_INVALID_IDX (HAL_NUM_STA+1) +#define QWLAN_VSTA_MIN_IDX HAL_NUM_HW_STA +#define QWLANFW_NUM_GPSTA HAL_NUM_GPSTA + + +#define IS_VSTA_VALID_IDX(__x) \ + ((__x) != QWLANFW_VSTA_INVALID_IDX) + +#define IS_VSTA_IDX(__x) \ + (((__x) >= QWLAN_VSTA_MIN_IDX) && ((__x) < HAL_NUM_STA)) + +#define GET_VSTA_INDEX_FOR_STA_INDEX(__idx) ((__idx) - QWLAN_VSTA_MIN_IDX) + +// is the STA a General Purpose STA? +#define IS_GPSTA_IDX(__x) \ + (((__x) >= (HAL_NUM_HW_STA-HAL_NUM_GPSTA)) && \ + ((__x) < HAL_NUM_HW_STA)) + +// is the STA a HW STA (excluding GP STAs) +#define IS_HWSTA_IDX(__x) \ + ((__x) < (HAL_NUM_HW_STA-HAL_NUM_GPSTA)) + +#define HAL_NUM_STA_INCLUDING_VSTA 32 +#define HAL_NUM_STA_WITHOUT_VSTA 12 + +#else +#define HAL_NUM_STA 12 +#define HAL_NUM_ASSOC_STA 10 +#define HAL_NUM_HW_STA 12 +#endif + +#define HAL_NUM_BSSID 2 +#define HAL_NUM_UMA_DESC_ENTRIES HAL_NUM_HW_STA + +#endif /* WCN_PRONTO */ + +#ifdef FEATURE_WLAN_TDLS +#define CXM_TDLS_MAX_NUM_STA 32 +#endif + +#define HAL_INVALID_BSSIDX HAL_NUM_BSSID + +#define MAX_NUM_OF_BACKOFFS 8 +#define HAL_MAX_ASSOC_ID HAL_NUM_STA + +#define WLANHAL_TX_BD_HEADER_SIZE 40 //FIXME_PRIMA - Revisit +#define WLANHAL_RX_BD_HEADER_SIZE 76 + +/* + * From NOVA Mac Arch document + * Encryp. mode The encryption mode + * 000: Encryption functionality is not enabled + * 001: Encryption is set to WEP + * 010: Encryption is set to WEP 104 + * 011: Encryption is set to TKIP + * 100: Encryption is set to AES + * 101 - 111: Reserved for future + */ + +#define HAL_ENC_POLICY_NULL 0 +#define HAL_ENC_POLICY_WEP40 1 +#define HAL_ENC_POLICY_WEP104 2 +#define HAL_ENC_POLICY_TKIP 3 +#define HAL_ENC_POLICY_AES_CCM 4 + +/* --------------------------------------------------------------------- */ +/* BMU */ +/* --------------------------------------------------------------------- */ + +/* + * BMU WQ assignment, as per Prima Programmer's Guide - FIXME_PRIMA: Revisit + * + */ + +typedef enum sBmuWqId { + + /* ====== In use WQs ====== */ + + /* BMU */ + BMUWQ_BMU_IDLE_BD = 0, + BMUWQ_BMU_IDLE_PDU = 1, + + /* RxP */ + BMUWQ_RXP_UNKNWON_ADDR = 2, /* currently unhandled by HAL */ + + /* DPU RX */ + BMUWQ_DPU_RX = 3, + + /* DPU TX */ + BMUWQ_DPU_TX = 6, + + /* Firmware */ + BMUWQ_FW_TRANSMIT = 12, /* DPU Tx->FW Tx */ + BMUWQ_FW_RECV = 7, /* DPU Rx->FW Rx */ + + BMUWQ_FW_RPE_RECV = 16, /* RXP/RPE Rx->FW Rx */ + FW_SCO_WQ = BMUWQ_FW_RPE_RECV, + + /* DPU Error */ + BMUWQ_DPU_ERROR_WQ = 8, + + /* DXE RX */ + BMUWQ_DXE_RX = 11, + + BMUWQ_DXE_RX_HI = 4, + + /* ADU/UMA */ + BMUWQ_ADU_UMA_TX = 23, + BMUWQ_ADU_UMA_RX = 24, + + /* BMU BTQM */ + BMUWQ_BTQM = 25, + + /* Special WQ for BMU to dropping all frames coming to this WQ ID */ + BMUWQ_SINK = 255, + +#ifdef WCN_PRONTO + BMUWQ_BMU_CMEM_IDLE_BD = 27, + /* Total BMU WQ count in Pronto */ + BMUWQ_NUM = 28, + + //WQs 17 through 22 are enabled in Pronto. So, set not supported mask to 0. + BMUWQ_NOT_SUPPORTED_MASK = 0x0, +#else + /* Total BMU WQ count in Prima */ + BMUWQ_NUM = 27, + + //Prima has excluded support for WQs 17 through 22. + BMUWQ_NOT_SUPPORTED_MASK = 0x7e0000, +#endif //WCN_PRONTO + + + /* Aliases */ + BMUWQ_BTQM_TX_MGMT = BMUWQ_BTQM, + BMUWQ_BTQM_TX_DATA = BMUWQ_BTQM, + BMUWQ_BMU_WQ2 = BMUWQ_RXP_UNKNWON_ADDR, + BMUWQ_FW_DPU_TX = 5, + + //WQ where all the frames with addr1/addr2/addr3 with value 254/255 go to. + BMUWQ_FW_RECV_EXCEPTION = 14, //using BMUWQ_FW_MESSAGE WQ for this purpose. + + //WQ where all frames with unknown Addr2 filter exception cases frames will pushed if FW wants host to + //send deauth to the sender. + BMUWQ_HOST_RX_UNKNOWN_ADDR2_FRAMES = 15, //using BMUWQ_FW_DXECH2_0 for this purpose. + + /* ====== Unused/Reserved WQ ====== */ + + /* ADU/UMA Error WQ */ + BMUWQ_ADU_UMA_TX_ERROR_WQ = 13, /* Not in use by HAL */ + BMUWQ_ADU_UMA_RX_ERROR_WQ = 10, /* Not in use by HAL */ + + /* DPU Error WQ2 */ + BMUWQ_DPU_ERROR_WQ2 = 9, /* Not in use by HAL */ + + /* FW WQs */ + //This WQ is being used for RXP to push in frames in exception cases ( addr1/add2/addr3 254/255) + //BMUWQ_FW_MESG = 14, /* DxE Tx->FW, Not in use by FW */ + //BMUWQ_FW_DXECH2_0 = 15, /* BD/PDU<->MEM conversion using DxE CH2. Not in use by FW */ + BMUWQ_FW_DXECH2_1 = 16, /* BD/PDU<->MEM conversion using DxE CH2. Not in use by FW */ + + /* NDPA Addr3 workaround */ + BMUWQ_RXP_DEFAULT_PUSH_WQ = 17, +/* These WQs are not supported in Volans + BMUWQ_BMU_WQ17 = 17, + BMUWQ_BMU_WQ18 = 18, + BMUWQ_BMU_WQ19 = 19, + BMUWQ_BMU_WQ20 = 20, + BMUWQ_BMU_WQ21 = 21, + BMUWQ_BMU_WQ22 = 22 +*/ +} tBmuWqId; + +typedef enum +{ + BTQM_QID0 = 0, + BTQM_QID1, + BTQM_QID2, + BTQM_QID3, + BTQM_QID4, + BTQM_QID5, + BTQM_QID6, + BTQM_QID7, + BTQM_QID8, + BTQM_QID9, + BTQM_QID10, + + BTQM_QUEUE_TX_TID_0 = BTQM_QID0, + BTQM_QUEUE_TX_TID_1, + BTQM_QUEUE_TX_TID_2, + BTQM_QUEUE_TX_TID_3, + BTQM_QUEUE_TX_TID_4, + BTQM_QUEUE_TX_TID_5, + BTQM_QUEUE_TX_TID_6, + BTQM_QUEUE_TX_TID_7, + + + /* Queue Id <-> BO + */ + BTQM_QUEUE_TX_nQOS = BTQM_QID8, + BTQM_QUEUE_SELF_STA_BCAST_MGMT = BTQM_QID10, + BTQM_QUEUE_SELF_STA_UCAST_MGMT = BTQM_QID9, + BTQM_QUEUE_SELF_STA_UCAST_DATA = BTQM_QID9, + BTQM_QUEUE_NULL_FRAME = BTQM_QID9, + BTQM_QUEUE_SELF_STA_PROBE_RSP = BTQM_QID9, + BTQM_QUEUE_TX_AC_BE = BTQM_QUEUE_TX_TID_0, + BTQM_QUEUE_TX_AC_BK = BTQM_QUEUE_TX_TID_2, + BTQM_QUEUE_TX_AC_VI = BTQM_QUEUE_TX_TID_4, + BTQM_QUEUE_TX_AC_VO = BTQM_QUEUE_TX_TID_6 +}tBtqmQId; + +#define STACFG_MAX_TC 8 + +/* --------------------------------------------------------------------- */ +/* BD type*/ +/* --------------------------------------------------------------------- */ +#define HWBD_TYPE_GENERIC 0 /* generic BD format */ +#define HWBD_TYPE_FRAG 1 /* fragmentation BD format*/ + +/*---------------------------------------------------------------------- */ +/* HW Tx power */ +/*---------------------------------------------------------------------- */ +#ifdef WLAN_HAL_PRIMA + #define WLAN_SOC_PRIMA_MAX_TX_POWER 22 + #define WLAN_SOC_PRIMA_MIN_TX_POWER 6 +#else + /* add more platforms here */ + #define WLAN_SOC_PRIMA_MAX_TX_POWER 22 + #define WLAN_SOC_PRIMA_MIN_TX_POWER 6 +#endif //#ifdef WCN_PRIMA + +#endif /* __WLAN_QCT_DEV_DEFS_H */ diff --git a/riva/inc/wlan_status_code.h b/riva/inc/wlan_status_code.h new file mode 100644 index 000000000000..2005aac8dd69 --- /dev/null +++ b/riva/inc/wlan_status_code.h @@ -0,0 +1,160 @@ +/* +* Copyright (c) 2012 Qualcomm Atheros, Inc. +* All Rights Reserved. +* Qualcomm Atheros Confidential and Proprietary. +*/ + +/*=========================================================================== + * + * @file: wlan_status_code.h + * + * @brief: Common header file containing all the status codes + * All status codes have been consolidated into one enum + * + * @author: Kumar Anand + * Copyright (C) 2010, Qualcomm Technologies, Inc. + * All rights reserved. + * + *=========================================================================*/ + +#ifndef __WLAN_STATUS_CODE_H__ +#define __WLAN_STATUS_CODE_H__ + +/*------------------------------------------------------------------------- + Include Files +-------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------- + * Preprocessor Definitions and Constants + * -------------------------------------------------------------------------*/ + +/* This is to force compiler to use the maximum of an int ( 4 bytes ) */ +#define WLAN_STATUS_MAX_ENUM_SIZE 0x7FFFFFFF + +/*---------------------------------------------------------------------------- + * Type Declarations + * -------------------------------------------------------------------------*/ + +typedef enum +{ + /* PAL Request succeeded!*/ + PAL_STATUS_SUCCESS = 0, + + /* HAL Request succeeded!*/ + eHAL_STATUS_SUCCESS = 0, + + /* Request failed because there of an invalid request. This is + typically the result of invalid parameters on the request*/ + PAL_STATUS_INVAL, + + /* Request refused because a request is already in place and + another cannot be handled currently */ + PAL_STATUS_ALREADY, + + /* Request failed because of an empty condition */ + PAL_STATUS_EMPTY, + + /* Request failed for some unknown reason. */ + PAL_STATUS_FAILURE, + + /* HAL general failure */ + eHAL_STATUS_FAILURE, + + /* Invalid Param*/ + eHAL_STATUS_INVALID_PARAMETER, + + /* Invalid Station Index*/ + eHAL_STATUS_INVALID_STAIDX, + + /* DPU descriptor table full*/ + eHAL_STATUS_DPU_DESCRIPTOR_TABLE_FULL, + + /* No interrupts */ + eHAL_STATUS_NO_INTERRUPTS, + + /* Interrupt present */ + eHAL_STATUS_INTERRUPT_PRESENT, + + /* Stable Table is full */ + eHAL_STATUS_STA_TABLE_FULL, + + /* Duplicate Station found */ + eHAL_STATUS_DUPLICATE_STA, + + /* BSSID is invalid */ + eHAL_STATUS_BSSID_INVALID, + + /* STA is invalid */ + eHAL_STATUS_STA_INVALID, + + /* BSSID is is duplicate */ + eHAL_STATUS_DUPLICATE_BSSID, + + /* BSS Idx is invalid */ + eHAL_STATUS_INVALID_BSSIDX, + + /* BSSID Table is full */ + eHAL_STATUS_BSSID_TABLE_FULL, + + /* Invalid DPU signature*/ + eHAL_STATUS_INVALID_SIGNATURE, + + /* Invalid key Id */ + eHAL_STATUS_INVALID_KEYID, + + /* Already on requested channel */ + eHAL_STATUS_SET_CHAN_ALREADY_ON_REQUESTED_CHAN, + + /* UMA descriptor table is full */ + eHAL_STATUS_UMA_DESCRIPTOR_TABLE_FULL, + + /* MIC Key table is full */ + eHAL_STATUS_DPU_MICKEY_TABLE_FULL, + + /* A-MPDU/BA related Error codes */ + eHAL_STATUS_BA_RX_BUFFERS_FULL, + eHAL_STATUS_BA_RX_MAX_SESSIONS_REACHED, + eHAL_STATUS_BA_RX_INVALID_SESSION_ID, + + eHAL_STATUS_TIMER_START_FAILED, + eHAL_STATUS_TIMER_STOP_FAILED, + eHAL_STATUS_FAILED_ALLOC, + + /* Scan failure codes */ + eHAL_STATUS_NOTIFY_BSS_FAIL, + + /* Self STA not deleted as reference count is not zero */ + eHAL_STATUS_DEL_STA_SELF_IGNORED_REF_COUNT_NOT_ZERO, + + /* Self STA not added as entry already exists*/ + eHAL_STATUS_ADD_STA_SELF_IGNORED_REF_COUNT_NOT_ZERO, + + /* Message from SLM has failure status */ + eHAL_STATUS_FW_SEND_MSG_FAILED, + + /* BSS disconnect status : beacon miss */ + eHAL_STATUS_BSS_DISCONN_BEACON_MISS, + /* BSS disconnect status : deauth */ + eHAL_STATUS_BSS_DISCONN_DEAUTH, + /* BSS disconnect status : disassoc */ + eHAL_STATUS_BSS_DISCONN_DISASSOC, + + /* Data abort happened in PHY sw */ + eHAL_STATUS_PHY_DATA_ABORT, + + /* Invalid NV field */ + eHAL_STATUS_PHY_INVALID_NV_FIELD, + + /* WLAN boot test failed */ + eHAL_STATUS_WLAN_BOOT_TEST_FAILURE, + + /* Max status value */ + eHAL_STATUS_MAX_VALUE = WLAN_STATUS_MAX_ENUM_SIZE + +} palStatus, eHalStatus; + +/* Helper Macros */ +#define PAL_IS_STATUS_SUCCESS(status) (PAL_STATUS_SUCCESS == (status)) +#define HAL_STATUS_SUCCESS( status ) (eHAL_STATUS_SUCCESS == (status)) + +#endif //__WLAN_STATUS_CODE_H__ diff --git a/wcnss/inc/pttModule.h b/wcnss/inc/pttModule.h index 7877fd79da35..d8e6bcf7ecf0 100644 --- a/wcnss/inc/pttModule.h +++ b/wcnss/inc/pttModule.h @@ -52,6 +52,9 @@ #include "wlan_hal_msg.h" // it is needed to build qwptt static lib #endif +// Max NV fragment size +#define MAX_NV_BIN_SIZE 2000 + enum { PTT_STATUS_SUCCESS = 0, @@ -124,6 +127,20 @@ typedef PACKED_PRE struct PACKED_POST { tTxChainPower txChains[PHY_MAX_TX_CHAINS]; //output power for Tx chains } tTxPowerReport; +#define RXP_MAX_FILTER_IDX 64 + +typedef PACKED_PRE struct PACKED_POST +{ + uint32 rxpFilterForFTMPER[RXP_MAX_FILTER_IDX]; + uint32 max_pktlen; + uint32 flt_disable0; + uint32 flt_disable1; + uint32 config2; + uint32 push_wq_ctrl; + uint32 push_wq_ctrl2; + uint32 extra_frame_flt; +} sMACConfig; + typedef PACKED_PRE struct PACKED_POST { /* @@ -151,7 +168,7 @@ typedef PACKED_PRE struct PACKED_POST { // for FTM PER feature tANI_U8 tx_mode; - tANI_U8 reserved[1]; + tANI_BOOLEAN ftm_per_settings_saved; //Rx Gain Service sRxChainsAgcEnable agcEnables; @@ -163,4 +180,8 @@ typedef PACKED_PRE struct PACKED_POST { sRxChainsRssi rssi; } tPttModuleVariables; +#ifdef WCN_PRONTO +extern sMACConfig macConfig; +#endif + #endif /* PTTMODULE_H */ diff --git a/wcnss/inc/pttMsgApi.h b/wcnss/inc/pttMsgApi.h index b4467db8c33b..e8a65cc0c962 100644 --- a/wcnss/inc/pttMsgApi.h +++ b/wcnss/inc/pttMsgApi.h @@ -94,6 +94,11 @@ typedef enum { PTT_MSG_STORE_NV_TABLE = 0x3022, PTT_MSG_SET_REG_DOMAIN = 0x3023, +//new NV format Service + PTT_MSG_GET_NV_BIN = 0x3030, + PTT_MSG_SET_NV_BIN = 0x3031, + PTT_MSG_GET_DICTIONARY = 0x3032, + //Device Register Access PTT_MSG_DBG_READ_REGISTER = 0x3040, PTT_MSG_DBG_WRITE_REGISTER = 0x3041, @@ -322,6 +327,20 @@ typedef PACKED_PRE struct PACKED_POST { eRegDomainId regDomainId; } tMsgPttSetRegDomain; +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 tableSize; + tANI_U32 chunkSize; + eNvTable nvTable; + tANI_U8 nvData[MAX_NV_BIN_SIZE]; +} tMsgPttGetNvBin; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 tableSize; + tANI_U32 chunkSize; + eNvTable nvTable; + tANI_U8 nvData[MAX_NV_BIN_SIZE]; +} tMsgPttSetNvBin; + //Device Register Access typedef PACKED_PRE struct PACKED_POST { tANI_U32 regAddr; @@ -827,6 +846,8 @@ typedef PACKED_PRE union PACKED_POST pttMsgUnion{ tMsgPttSetRegDomain SetRegDomain; tMsgPttGetNvField GetNvField; tMsgPttSetNvField SetNvField; + tMsgPttGetNvBin GetNvBin; + tMsgPttSetNvBin SetNvBin; tMsgPttDbgReadRegister DbgReadRegister; tMsgPttDbgWriteRegister DbgWriteRegister; tMsgPttDbgReadMemory DbgReadMemory; diff --git a/wcnss/inc/wlan_hal_cfg.h b/wcnss/inc/wlan_hal_cfg.h index 78b1611dedde..9e64c03043e5 100644 --- a/wcnss/inc/wlan_hal_cfg.h +++ b/wcnss/inc/wlan_hal_cfg.h @@ -106,28 +106,28 @@ #define QWLAN_HAL_CFG_RPE_AGING_THRESHOLD_FOR_AC3_REG 46 #define QWLAN_HAL_CFG_NO_OF_ONCHIP_REORDER_SESSIONS 47 #define QWLAN_HAL_CFG_PS_LISTEN_INTERVAL 48 -#define QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD 49 -#define QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER 50 -#define QWLAN_HAL_CFG_PS_MAX_PS_POLL 51 +#define QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD 49 +#define QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER 50 +#define QWLAN_HAL_CFG_PS_MAX_PS_POLL 51 #define QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD 52 -#define QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD 53 +#define QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD 53 #define QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE 54 #define QWLAN_HAL_CFG_PS_IGNORE_DTIM 55 #define QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM 56 #define QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE 57 -#define QWLAN_HAL_CFG_PS_NULLDATA_AP_RESP_TIMEOUT 58 +#define QWLAN_HAL_CFG_PS_NULLDATA_AP_RESP_TIMEOUT 58 #define QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN 59 #define QWLAN_HAL_CFG_TELE_BCN_TRANS_LI 60 #define QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS 61 #define QWLAN_HAL_CFG_TELE_BCN_MAX_LI 62 #define QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS 63 #define QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE 64 -#define QWLAN_HAL_CFG_VALID_RADAR_CHANNEL_LIST 65 -#define QWLAN_HAL_CFG_TX_POWER_24_20 66 +#define QWLAN_HAL_CFG_VALID_RADAR_CHANNEL_LIST 65 +#define QWLAN_HAL_CFG_TX_POWER_24_20 66 #define QWLAN_HAL_CFG_TX_POWER_24_40 67 #define QWLAN_HAL_CFG_TX_POWER_50_20 68 #define QWLAN_HAL_CFG_TX_POWER_50_40 69 -#define QWLAN_HAL_CFG_MCAST_BCAST_FILTER_SETTING 70 +#define QWLAN_HAL_CFG_MCAST_BCAST_FILTER_SETTING 70 #define QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL 71 #define QCOM_WLAN_CFG_MAX_TX_POWER_2_4 72 #define QCOM_WLAN_CFG_MAX_TX_POWER_5 73 @@ -162,13 +162,77 @@ #define QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT 102 #define QWLAN_HAL_CFG_BTC_DWELL_TIME_MULTIPLIER 103 #define QWLAN_HAL_CFG_ENABLE_TDLS_OXYGEN_MODE 104 -#define QWLAN_HAL_CFG_MAX_PARAMS 105 - +#define QWLAN_HAL_CFG_ENABLE_NAT_KEEP_ALIVE_FILTER 105 +#define QWLAN_HAL_CFG_ENABLE_SAP_OBSS_PROT 106 +#define QWLAN_HAL_CFG_PSPOLL_DATA_RECEP_TIMEOUT 107 +#define QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE 108 +#define QWLAN_HAL_CFG_TDLS_PUAPSD_MASK 109 +#define QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME 110 +#define QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP 111 +#define QWLAN_HAL_CFG_ANTENNA_DIVERSITY 112 +#define QWLAN_HAL_CFG_ATH_DISABLE 113 +#define QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR 114 +#define QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE 115 +#define QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE 116 +#define QWLAN_HAL_CFG_MWS_COEX_V1_WAN_FREQ 117 +#define QWLAN_HAL_CFG_MWS_COEX_V1_WLAN_FREQ 118 +#define QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG 119 +#define QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG2 120 +#define QWLAN_HAL_CFG_MWS_COEX_V2_WAN_FREQ 121 +#define QWLAN_HAL_CFG_MWS_COEX_V2_WLAN_FREQ 122 +#define QWLAN_HAL_CFG_MWS_COEX_V2_CONFIG 123 +#define QWLAN_HAL_CFG_MWS_COEX_V2_CONFIG2 124 +#define QWLAN_HAL_CFG_MWS_COEX_V3_WAN_FREQ 125 +#define QWLAN_HAL_CFG_MWS_COEX_V3_WLAN_FREQ 126 +#define QWLAN_HAL_CFG_MWS_COEX_V3_CONFIG 127 +#define QWLAN_HAL_CFG_MWS_COEX_V3_CONFIG2 128 +#define QWLAN_HAL_CFG_MWS_COEX_V4_WAN_FREQ 129 +#define QWLAN_HAL_CFG_MWS_COEX_V4_WLAN_FREQ 130 +#define QWLAN_HAL_CFG_MWS_COEX_V4_CONFIG 131 +#define QWLAN_HAL_CFG_MWS_COEX_V4_CONFIG2 132 +#define QWLAN_HAL_CFG_MWS_COEX_V5_WAN_FREQ 133 +#define QWLAN_HAL_CFG_MWS_COEX_V5_WLAN_FREQ 134 +#define QWLAN_HAL_CFG_MWS_COEX_V5_CONFIG 135 +#define QWLAN_HAL_CFG_MWS_COEX_V5_CONFIG2 136 +#define QWLAN_HAL_CFG_MWS_COEX_V6_WAN_FREQ 137 +#define QWLAN_HAL_CFG_MWS_COEX_V6_WLAN_FREQ 138 +#define QWLAN_HAL_CFG_MWS_COEX_V6_CONFIG 139 +#define QWLAN_HAL_CFG_MWS_COEX_V6_CONFIG2 140 +#define QWLAN_HAL_CFG_MWS_COEX_V7_WAN_FREQ 141 +#define QWLAN_HAL_CFG_MWS_COEX_V7_WLAN_FREQ 142 +#define QWLAN_HAL_CFG_MWS_COEX_V7_CONFIG 143 +#define QWLAN_HAL_CFG_MWS_COEX_V7_CONFIG2 144 +#define QWLAN_HAL_CFG_MWS_COEX_V8_WAN_FREQ 145 +#define QWLAN_HAL_CFG_MWS_COEX_V8_WLAN_FREQ 146 +#define QWLAN_HAL_CFG_MWS_COEX_V8_CONFIG 147 +#define QWLAN_HAL_CFG_MWS_COEX_V8_CONFIG2 148 +#define QWLAN_HAL_CFG_MWS_COEX_V9_WAN_FREQ 149 +#define QWLAN_HAL_CFG_MWS_COEX_V9_WLAN_FREQ 150 +#define QWLAN_HAL_CFG_MWS_COEX_V9_CONFIG 151 +#define QWLAN_HAL_CFG_MWS_COEX_V9_CONFIG2 152 +#define QWLAN_HAL_CFG_MWS_COEX_V10_WAN_FREQ 153 +#define QWLAN_HAL_CFG_MWS_COEX_V10_WLAN_FREQ 154 +#define QWLAN_HAL_CFG_MWS_COEX_V10_CONFIG 155 +#define QWLAN_HAL_CFG_MWS_COEX_V10_CONFIG2 156 +#define QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF 157 +#define QWLAN_HAL_CFG_MWS_COEX_CONFIG1 158 +#define QWLAN_HAL_CFG_MWS_COEX_CONFIG2 159 +#define QWLAN_HAL_CFG_MWS_COEX_CONFIG3 160 +#define QWLAN_HAL_CFG_MWS_COEX_CONFIG4 161 +#define QWLAN_HAL_CFG_MWS_COEX_CONFIG5 162 +#define QWLAN_HAL_CFG_MWS_COEX_CONFIG6 163 +#define QWLAN_HAL_CFG_SAR_POWER_BACKOFF 164 +#define QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT 165 +#define QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN 166 +#define QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN 167 +#define QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN 168 +#define QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN 169 +#define QWLAN_HAL_CFG_RMCAST_FIXED_RATE 170 +#define QWLAN_HAL_CFG_MAX_PARAMS 171 /* Total number of Integer CFGs. This is used while allocating the memory for TLV */ -#define QWLAN_HAL_CFG_INTEGER_PARAM 100 - +#define QWLAN_HAL_CFG_INTEGER_PARAM 171 /*------------------------------------------------------------------------- Configuration Parameter min, max, defaults @@ -279,13 +343,6 @@ #define QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO_STAMAX 255 #define QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO_STADEF 15 -/* QWLAN_HAL_CFG_FIXED_RATE - * Follwing rates in user configuration are mapped to TPE rates - * Mapping is defined in the gHalUserFixedRateCfgToTpeRateTable - */ -#define QWLAN_HAL_CFG_FIXED_RATE_STAMIN 0 -#define QWLAN_HAL_CFG_FIXED_RATE_STAMAX 226 -#define QWLAN_HAL_CFG_FIXED_RATE_STADEF 0 #define QWLAN_HAL_CFG_FIXED_RATE_AUTO 0 #define QWLAN_HAL_CFG_FIXED_RATE_1MBPS 1 #define QWLAN_HAL_CFG_FIXED_RATE_2MBPS 2 @@ -332,6 +389,22 @@ #define QWLAN_HAL_CFG_FIXED_RATE_135MBPS_MCS6_40MHZ_SIMO_SGI 43 #define QWLAN_HAL_CFG_FIXED_RATE_150MBPS_MCS7_40MHZ_SIMO_SGI 44 +/* QWLAN_HAL_CFG_FIXED_RATE + * Follwing rates in user configuration are mapped to TPE rates + * Mapping is defined in the gHalUserFixedRateCfgToTpeRateTable + */ +#define QWLAN_HAL_CFG_FIXED_RATE_STAMIN 0 +#define QWLAN_HAL_CFG_FIXED_RATE_STAMAX 226 +#define QWLAN_HAL_CFG_FIXED_RATE_STADEF QWLAN_HAL_CFG_FIXED_RATE_AUTO + +/* QWLAN_HAL_CFG_RMCAST_FIXED_RATE + * Follwing rates in user configuration are mapped to TPE rates + * Mapping is defined in the gHalUserFixedRateCfgToTpeRateTable + */ +#define QWLAN_HAL_CFG_RMCAST_FIXED_RATE_STAMIN 0 +#define QWLAN_HAL_CFG_RMCAST_FIXED_RATE_STAMAX 226 +#define QWLAN_HAL_CFG_RMCAST_FIXED_RATE_STADEF QWLAN_HAL_CFG_FIXED_RATE_24MBPS + /* QWLAN_HAL_CFG_RETRYRATE_POLICY */ #define QWLAN_HAL_CFG_RETRYRATE_POLICY_STAMIN 0 #define QWLAN_HAL_CFG_RETRYRATE_POLICY_STAMAX 255 @@ -446,7 +519,7 @@ -/* ACM, AIFSN, [CWmin, CWmax, TxOp]-11A/11B/11G +/* ACM, AIFSN, [CWmin, CWmax, TxOp]-11A/11B/11G * Cwmin and Cwmax are two bytes each, MSB first. So Cwmax of [03 FF] is * equivalent to 0x03ff = 1023*/ #define QWLAN_HAL_CFG_EDCA_PROFILE_ACM_IDX 0 /* byte[0] */ @@ -456,7 +529,7 @@ #define QWLAN_HAL_CFG_EDCA_PROFILE_TXOPA_IDX 6 /* byte[6] */ #define QWLAN_HAL_CFG_EDCA_PROFILE_CWMINB_IDX 7 /* byte[7] & byte [8] */ #define QWLAN_HAL_CFG_EDCA_PROFILE_CWMAXB_IDX 9 /* byte[9] & byte [10] */ -#define QWLAN_HAL_CFG_EDCA_PROFILE_TXOPB_IDX 11 /* byte[11]*/ +#define QWLAN_HAL_CFG_EDCA_PROFILE_TXOPB_IDX 11 /* byte[11]*/ #define QWLAN_HAL_CFG_EDCA_PROFILE_CWMING_IDX 12 /* byte[12] & byte [13] */ #define QWLAN_HAL_CFG_EDCA_PROFILE_CWMAXG_IDX 14 /* byte[14] & byte [15] */ #define QWLAN_HAL_CFG_EDCA_PROFILE_TXOPG_IDX 16 /* byte[16]*/ @@ -588,24 +661,24 @@ #define QWLAN_HAL_CFG_RADAR_CHANNEL_LIST_LEN 20 /* QWLAN_HAL_CFG_TX_POWER_24_20 */ -#define QWLAN_WLAN_TX_POWER_24_20_DEFAULT 299 -#define QWLAN_WLAN_TX_POWER_24_20_MIN 299 -#define QWLAN_WLAN_TX_POWER_24_20_MAX 299 +#define QWLAN_WLAN_TX_POWER_24_20_DEFAULT 299 +#define QWLAN_WLAN_TX_POWER_24_20_MIN 299 +#define QWLAN_WLAN_TX_POWER_24_20_MAX 299 /* QWLAN_HAL_CFG_TX_POWER_24_40 */ #define QWLAN_WLAN_TX_POWER_24_40_DEFAULT 300 -#define QWLAN_WLAN_TX_POWER_24_40_MIN 299 -#define QWLAN_WLAN_TX_POWER_24_40_MAX 299 +#define QWLAN_WLAN_TX_POWER_24_40_MIN 299 +#define QWLAN_WLAN_TX_POWER_24_40_MAX 299 /* QWLAN_HAL_CFG_TX_POWER_50_20 */ #define QWLAN_WLAN_TX_POWER_50_20_DEFAULT 301 -#define QWLAN_WLAN_TX_POWER_50_20_MIN 299 -#define QWLAN_WLAN_TX_POWER_50_20_MAX 299 +#define QWLAN_WLAN_TX_POWER_50_20_MIN 299 +#define QWLAN_WLAN_TX_POWER_50_20_MAX 299 /* QWLAN_HAL_CFG_TX_POWER_50_40 */ #define QWLAN_WLAN_TX_POWER_50_40_DEFAULT 302 -#define QWLAN_WLAN_TX_POWER_50_40_MIN 299 -#define QWLAN_WLAN_TX_POWER_50_40_MAX 299 +#define QWLAN_WLAN_TX_POWER_50_40_MIN 299 +#define QWLAN_WLAN_TX_POWER_50_40_MAX 299 /* QCOM_WLAN_CFG_MAX_TX_POWER_2_4 */ #define QCOM_WLAN_CFG_MAX_TX_POWER_2_4_LEN 128 @@ -752,9 +825,14 @@ #define QWLAN_HAL_CFG_ENABLE_DETECT_PS_SUPPORT_DEF 0 /* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */ -#define QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT_MIN 1 -#define QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT_MAX 255 -#define QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT_DEF 3 +#define QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT_MIN 3 +#define QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT_MAX 30 +#define QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT_DEF 10 + +/* QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT */ +#define QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT_MIN 3 +#define QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT_MAX 30 +#define QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT_DEF 10 /*QWLAN_HAL_CFG_BTC_DWELL_TIME_MULTIPLIER*/ /*This value is multiplied to ChannelDwellTime @@ -763,6 +841,98 @@ #define QWLAN_HAL_CFG_BTC_DWELL_TIME_MULTIPLIER_MAX 300 #define QWLAN_HAL_CFG_BTC_DWELL_TIME_MULTIPLIER_DEF 300 +/* QWLAN_HAL_CFG_ENABLE_TDLS_OXYGEN_MODE */ +#define QWLAN_HAL_CFG_ENABLE_TDLS_OXYGEN_MODE_MIN 0 +#define QWLAN_HAL_CFG_ENABLE_TDLS_OXYGEN_MODE_MAX 1 +#define QWLAN_HAL_CFG_ENABLE_TDLS_OXYGEN_MODE_DEF 0 + +/* QWLAN_HAL_CFG_ENABLE_NAT_KEEP_ALIVE_FILTER */ +#define QWLAN_HAL_CFG_ENABLE_NAT_KEEP_ALIVE_FILTER_MIN 0 +#define QWLAN_HAL_CFG_ENABLE_NAT_KEEP_ALIVE_FILTER_MAX 1 +#define QWLAN_HAL_CFG_ENABLE_NAT_KEEP_ALIVE_FILTER_DEF 0 + +/* QWLAN_HAL_CFG_ENABLE_SAP_OBSS_PROT */ +#define QWLAN_HAL_CFG_ENABLE_SAP_OBSS_PROT_MIN 0 +#define QWLAN_HAL_CFG_ENABLE_SAP_OBSS_PROT_MAX 1 +#define QWLAN_HAL_CFG_ENABLE_SAP_OBSS_PROT_DEF 0 + +/* QWLAN_HAL_CFG_PSPOLL_DATA_RECEP_TIMEOUT */ +#define QWLAN_HAL_CFG_PSPOLL_DATA_RECEP_TIMEOUT_STAMIN 1 +#define QWLAN_HAL_CFG_PSPOLL_DATA_RECEP_TIMEOUT_STAMAX 255 +#define QWLAN_HAL_CFG_PSPOLL_DATA_RECEP_TIMEOUT_STADEF 20 + +/* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */ +#define QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE_MIN 0 +#define QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE_MAX 1 +#define QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE_DEF 0 + +/* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */ +#define QWLAN_HAL_CFG_TDLS_PUAPSD_MASK_MIN 0 +#define QWLAN_HAL_CFG_TDLS_PUAPSD_MASK_MAX 0xf +#define QWLAN_HAL_CFG_TDLS_PUAPSD_MASK_DEF 0 + +/* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */ +#define QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME_MIN 0 +#define QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME_MAX 10 +#define QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME_DEF 0 + +/* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */ +#define QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP_MIN 10 +#define QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP_MAX 20 +#define QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP_DEF 10 + +#define QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN_MIN 0 +#define QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN_MAX 250000 +#define QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN_DEF 60000 + +#define QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN_MIN 0 +#define QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN_MAX 250000 +#define QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN_DEF 90000 + +#define QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN_MIN 0 +#define QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN_MAX 250000 +#define QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN_DEF 60000 + +#define QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN_MIN 0 +#define QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN_MAX 250000 +#define QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN_DEF 90000 + +/* QWLAN_HAL_CFG_ANTENNA_DIVERSITY */ +#define QWLAN_HAL_CFG_ANTENNA_DIVERSITY_DEF 0 +#define QWLAN_HAL_CFG_ANTENNA_DIVERSITY_MIN 0 +#define QWLAN_HAL_CFG_ANTENNA_DIVERSITY_MAX 3 + +#define QWLAN_HAL_CFG_ATH_DEF 0 +#define QWLAN_HAL_CFG_ATH_MIN 0 +#define QWLAN_HAL_CFG_ATH_MAX 1 + +/* QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR */ +#define QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR_DEF 0 +#define QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR_MIN 0 +#define QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR_MAX 9 + +/* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_RX_DRAIN_FEATURE */ +#define QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE_MIN 0 +#define QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE_MAX 1 +#define QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE_DEF 1 + +/* QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE */ +#define QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE_MIN 0 +#define QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE_MAX 1 +#define QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE_DEF 0 + +/* QWLAN_HAL_CFG_MWS_COEX_XXXX */ +#define QWLAN_HAL_CFG_MWS_COEX_DEF 0 +#define QWLAN_HAL_CFG_MWS_COEX_MIN 0 +#define QWLAN_HAL_CFG_MWS_COEX_MAX 0xFFFFFFFF +#define QWLAN_HAL_CFG_MWS_COEX_MAX_VICTIM 10 +#define QWLAN_HAL_CFG_MWS_COEX_MAX_CONFIG 6 + +/* QWLAN_HAL_CFG_SAR_POWER_BACKOFF */ +#define QWLAN_HAL_CFG_SAR_POWER_BACKOFF_DEF 13 +#define QWLAN_HAL_CFG_SAR_POWER_BACKOFF_MIN 1 +#define QWLAN_HAL_CFG_SAR_POWER_BACKOFF_MAX 21 + #endif //__WLAN_HAL_CFG_H__ diff --git a/wcnss/inc/wlan_hal_msg.h b/wcnss/inc/wlan_hal_msg.h index 58ae2cd23fcc..cf1165aa8806 100644 --- a/wcnss/inc/wlan_hal_msg.h +++ b/wcnss/inc/wlan_hal_msg.h @@ -61,7 +61,7 @@ All values are in the range 0..255 (ie they are 8-bit values) ---------------------------------------------------------------------------*/ #define WLAN_HAL_VER_MAJOR 1 -#define WLAN_HAL_VER_MINOR 4 +#define WLAN_HAL_VER_MINOR 5 #define WLAN_HAL_VER_VERSION 1 #define WLAN_HAL_VER_REVISION 2 @@ -91,6 +91,12 @@ typedef tANI_U8 tHalIpv4Addr[4]; //Default Beacon template size #define BEACON_TEMPLATE_SIZE 0x180 + +//Max Tx Data Rate samples +#define MAX_TX_RATE_SAMPLES 10 +//Max Beacon Rssi samples +#define MAX_BCN_RSSI_SAMPLES 10 + //Param Change Bitmap sent to HAL #define PARAM_BCN_INTERVAL_CHANGED (1 << 0) #define PARAM_SHORT_PREAMBLE_CHANGED (1 << 1) @@ -112,11 +118,9 @@ typedef tANI_U8 tHalIpv4Addr[4]; /*Version string max length (including NUL) */ #define WLAN_HAL_VERSION_LENGTH 64 -#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD #define WLAN_HAL_ROAM_SCAN_MAX_PROBE_SIZE 450 #define WLAN_HAL_ROAM_SCAN_MAX_CHANNELS NUM_RF_CHANNELS -#define WLAN_HAL_ROAM_SCAN_RESERVED_BYTES 64 -#endif +#define WLAN_HAL_ROAM_SCAN_RESERVED_BYTES 57 /* Message types for messages exchanged between WDI and HAL */ typedef enum @@ -374,10 +378,68 @@ typedef enum WLAN_HAL_DEL_BA_IND = 188, WLAN_HAL_DHCP_START_IND = 189, WLAN_HAL_DHCP_STOP_IND = 190, - WLAN_START_ROAM_CANDIDATE_LOOKUP_REQ = 191, - WLAN_START_ROAM_CANDIDATE_LOOKUP_RSP = 192, + WLAN_ROAM_SCAN_OFFLOAD_REQ = 191, + WLAN_ROAM_SCAN_OFFLOAD_RSP = 192, WLAN_HAL_WIFI_PROXIMITY_REQ = 193, WLAN_HAL_WIFI_PROXIMITY_RSP = 194, + + WLAN_HAL_START_SPECULATIVE_PS_POLLS_REQ = 195, + WLAN_HAL_START_SPECULATIVE_PS_POLLS_RSP = 196, + WLAN_HAL_STOP_SPECULATIVE_PS_POLLS_IND = 197, + + WLAN_HAL_TDLS_LINK_ESTABLISHED_REQ = 198, + WLAN_HAL_TDLS_LINK_ESTABLISHED_RSP = 199, + WLAN_HAL_TDLS_LINK_TEARDOWN_REQ = 200, + WLAN_HAL_TDLS_LINK_TEARDOWN_RSP = 201, + WLAN_HAL_TDLS_IND = 202, + WLAN_HAL_IBSS_PEER_INACTIVITY_IND = 203, + + /* Scan Offload APIs */ + WLAN_HAL_START_SCAN_OFFLOAD_REQ = 204, + WLAN_HAL_START_SCAN_OFFLOAD_RSP = 205, + WLAN_HAL_STOP_SCAN_OFFLOAD_REQ = 206, + WLAN_HAL_STOP_SCAN_OFFLOAD_RSP = 207, + WLAN_HAL_UPDATE_CHANNEL_LIST_REQ = 208, + WLAN_HAL_UPDATE_CHANNEL_LIST_RSP = 209, + WLAN_HAL_OFFLOAD_SCAN_EVENT_IND = 210, + + /* APIs to offload TCP/UDP Heartbeat handshakes */ + WLAN_HAL_LPHB_CFG_REQ = 211, + WLAN_HAL_LPHB_CFG_RSP = 212, + WLAN_HAL_LPHB_IND = 213, + + WLAN_HAL_ADD_PERIODIC_TX_PTRN_IND = 214, + WLAN_HAL_DEL_PERIODIC_TX_PTRN_IND = 215, + WLAN_HAL_PERIODIC_TX_PTRN_FW_IND = 216, + + // Events to set Per-Band Tx Power Limit + WLAN_HAL_SET_MAX_TX_POWER_PER_BAND_REQ = 217, + WLAN_HAL_SET_MAX_TX_POWER_PER_BAND_RSP = 218, + + /* Reliable Multicast using Leader Based Protocol */ + WLAN_HAL_LBP_LEADER_REQ = 219, + WLAN_HAL_LBP_LEADER_RSP = 220, + WLAN_HAL_LBP_UPDATE_IND = 221, + + /* Batchscan */ + WLAN_HAL_BATCHSCAN_SET_REQ = 222, + WLAN_HAL_BATCHSCAN_SET_RSP = 223, + WLAN_HAL_BATCHSCAN_TRIGGER_RESULT_IND = 224, + WLAN_HAL_BATCHSCAN_RESULT_IND = 225, + WLAN_HAL_BATCHSCAN_STOP_IND = 226, + + WLAN_HAL_GET_IBSS_PEER_INFO_REQ = 227, + WLAN_HAL_GET_IBSS_PEER_INFO_RSP = 228, + + WLAN_HAL_RATE_UPDATE_IND = 229, + + /* Tx Fail for weak link notification */ + WLAN_HAL_TX_FAIL_MONITOR_IND = 230, + WLAN_HAL_TX_FAIL_IND = 231, + + /* Multi-hop IP routing offload */ + WLAN_HAL_IP_FORWARD_TABLE_UPDATE_IND = 232, + WLAN_HAL_MSG_MAX = WLAN_HAL_MSG_TYPE_MAX_ENUM_SIZE }tHalHostMsgType; @@ -425,6 +487,7 @@ typedef enum eHAL_SYS_MODE_SUSPEND_LINK, eHAL_SYS_MODE_ROAM_SCAN, eHAL_SYS_MODE_ROAM_SUSPEND_LINK, + eHAL_SYS_MODE_OEM_DATA, eHAL_SYS_MODE_MAX = WLAN_HAL_MAX_ENUM_SIZE } eHalSysMode; @@ -571,6 +634,7 @@ typedef enum eSriLinkState { eSIR_LINK_FINISH_CAL_STATE = 13, #ifdef WLAN_FEATURE_P2P eSIR_LINK_LISTEN_STATE = 14, + eSIR_LINK_SEND_ACTION_STATE = 15, #endif eSIR_LINK_MAX = WLAN_HAL_MAX_ENUM_SIZE } tSirLinkState; @@ -1633,6 +1697,15 @@ typedef enum HAL_MAX_CONCURRENCY_PERSONA=4 } tHalConcurrencyMode; +// IFACE PERSONA for different Operating modes +typedef enum +{ + HAL_IFACE_UNKNOWN, + HAL_IFACE_STA_MODE, + HAL_IFACE_P2P_MODE, + HAL_IFACE_MAX +} tHalIfacePersona; + typedef PACKED_PRE struct PACKED_POST { /* BSSID */ @@ -2509,8 +2582,13 @@ typedef enum eTxRateInfo eHAL_TX_RATE_HT20 = 0x2, /* HT20 rates */ eHAL_TX_RATE_HT40 = 0x4, /* HT40 rates */ eHAL_TX_RATE_SGI = 0x8, /* Rate with Short guard interval */ - eHAL_TX_RATE_LGI = 0x10 /* Rate with Long guard interval */ -} tTxrateinfoflags; + eHAL_TX_RATE_LGI = 0x10, /* Rate with Long guard interval */ + eHAL_TX_RATE_VHT20 = 0x20, /* VHT 20 rates */ + eHAL_TX_RATE_VHT40 = 0x40, /* VHT 20 rates */ + eHAL_TX_RATE_VHT80 = 0x80, /* VHT 20 rates */ + eHAL_TX_RATE_VIRT = 0x100, /* Virtual Rate */ + eHAL_TX_RATE_MAX = WLAN_HAL_MAX_ENUM_SIZE +} tTxrateinfoflags, tTxRateInfoFlags; typedef PACKED_PRE struct PACKED_POST @@ -2656,16 +2734,6 @@ typedef PACKED_PRE struct PACKED_POST /* TSPEC Params */ typedef __ani_attr_pre_packed struct sSirMacTSInfoTfc { -#ifndef ANI_LITTLE_BIT_ENDIAN - tANI_U16 ackPolicy : 2; - tANI_U16 userPrio : 3; - tANI_U16 psb : 1; - tANI_U16 aggregation : 1; - tANI_U16 accessPolicy : 2; - tANI_U16 direction : 2; - tANI_U16 tsid : 4; - tANI_U16 trafficType : 1; -#else tANI_U16 trafficType : 1; tANI_U16 tsid : 4; tANI_U16 direction : 2; @@ -2674,19 +2742,13 @@ typedef __ani_attr_pre_packed struct sSirMacTSInfoTfc tANI_U16 psb : 1; tANI_U16 userPrio : 3; tANI_U16 ackPolicy : 2; -#endif } __ani_attr_packed tSirMacTSInfoTfc; /* Flag to schedule the traffic type */ typedef __ani_attr_pre_packed struct sSirMacTSInfoSch { -#ifndef ANI_LITTLE_BIT_ENDIAN - tANI_U8 rsvd : 7; - tANI_U8 schedule : 1; -#else tANI_U8 schedule : 1; tANI_U8 rsvd : 7; -#endif } __ani_attr_packed tSirMacTSInfoSch; /* Traffic and scheduling info */ @@ -3791,6 +3853,241 @@ typedef PACKED_PRE struct PACKED_POST tHalNSOffloadParams nsOffloadParams; } tHalHostOffloadReqMsg, *tpHalHostOffloadReqMsg; + +#ifdef FEATURE_WLAN_LPHB +typedef enum +{ + WIFI_HB_SET_ENABLE = 0x0001, + WIFI_HB_SET_TCP_PARAMS = 0x0002, + WIFI_HB_SET_TCP_PKT_FILTER = 0x0003, + WIFI_HB_SET_UDP_PARAMS = 0x0004, + WIFI_HB_SET_UDP_PKT_FILTER = 0x0005, + WIFI_HB_SET_NETWORK_INFO = 0x0006, +}tLowPowerHeartBeatCmdType ; + +#define MAX_FLITER_SIZE 64 +/*--------------------------------------------------------------------------- + *FEATURE_WLAN_LPHB REQ + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + uint32 hostIpv4Addr; + uint32 destIpv4Addr; + uint16 hostPort; + uint16 destPort; + uint16 timeOutSec; // in seconds + tSirMacAddr gatewayMacAddr; + uint16 timePeriodSec; // in seconds + uint32 tcpSn; +} tlowPowerHeartBeatParamsTcpStruct; + +typedef PACKED_PRE struct PACKED_POST +{ + uint32 hostIpv4Addr; + uint32 destIpv4Addr; + uint16 hostPort; + uint16 destPort; + uint16 timePeriodSec;// in seconds + uint16 timeOutSec; // in seconds + tSirMacAddr gatewayMacAddr; +} tlowPowerHeartBeatParamsUdpStruct; + +typedef PACKED_PRE struct PACKED_POST +{ + uint32 offset; + uint32 filterLength; + uint8 filter[MAX_FLITER_SIZE]; +} tlowPowerHeartBeatFilterStruct; + +typedef PACKED_PRE struct PACKED_POST +{ + uint8 heartBeatEnable; + uint8 heartBeatType; //TCP or UDP +} tlowPowerHeartBeatEnableStruct; + +typedef PACKED_PRE struct PACKED_POST +{ + uint8 dummy; +} tlowPowerHeartBeatNetworkInfoStruct; + + +typedef PACKED_PRE struct PACKED_POST +{ + uint8 sessionIdx; + uint16 lowPowerHeartBeatCmdType; + PACKED_PRE union PACKED_PRO + { + tlowPowerHeartBeatEnableStruct control; + tlowPowerHeartBeatFilterStruct tcpUdpFilter; + tlowPowerHeartBeatParamsTcpStruct tcpParams; + tlowPowerHeartBeatParamsUdpStruct udpParams; + tlowPowerHeartBeatNetworkInfoStruct info; + }options; +} tHalLowPowerHeartBeatReq, *tpHalLowPowerHeartBeatReq; + + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalLowPowerHeartBeatReq lowPowerHeartBeatParams; +} tHalLowPowerHeartBeatReqMsg, *tpHalLowPowerHeartBeatReqMsg; + +/*--------------------------------------------------------------------------- + * FEATURE_WLAN_LPHB RSP + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + uint8 sessionIdx; + uint32 status; + uint16 lowPowerHeartBeatCmdType; +}tHalLowPowerHeartBeatRspParams, *tpHalLowPowerHeartBeatRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalLowPowerHeartBeatRspParams lowPowerHeartBeatRspParams; +}tHalLowPowerHeartBeatRspMsg, *tpHalLowPowerHeartBeatRspMsg; + + +/*--------------------------------------------------------------------------- + * FEATURE_WLAN_LPHB IND + *--------------------------------------------------------------------------*/ +#define WIFI_HB_EVENT_TCP_RX_TIMEOUT 0x0001 +#define WIFI_HB_EVENT_UDP_RX_TIMEOUT 0x0002 + +#define WIFI_LPHB_EVENT_REASON_TIMEOUT 0x01 +#define WIFI_LPHB_EVENT_REASON_FW_ON_MONITOR 0x02 +#define WIFI_LPHB_EVENT_REASON_FW_OFF_MONITOR 0x03 + + +#define WIFI_LPHB_PROTO_UDP 0x01 +#define WIFI_LPHB_PROTO_TCP 0x02 + +typedef PACKED_PRE struct PACKED_POST +{ + uint8 bssIdx; + uint8 sessionIdx; + uint8 protocolType; /*TCP or UDP*/ + uint8 eventReason; + +}tHalLowPowerHeartBeatIndParam,*tpHalLowPowerHeartBeatIndParam; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalLowPowerHeartBeatIndParam lowPowerHeartBeatIndParams; +}tHalLowPowerHeartBeatIndMsg, *tpHalLowPowerHeartBeatIndMsg; + +#endif + +#ifdef FEATURE_WLAN_BATCH_SCAN + +/*--------------------------------------------------------------------------- + * WLAN_HAL_BATCHSCAN_SET_REQ + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* Scan Frerquency - default to 30Sec*/ + tANI_U32 scanInterval; + tANI_U32 numScan2Batch; + tANI_U32 bestNetworks; + tANI_U8 rfBand; + tANI_U8 rtt; +} tHalBatchScanSetParams, *tpHalBatchScanSetParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalBatchScanSetParams batchScanParams; +} tHalBatchScanSetReqMsg, *tpHalBatchScanSetReqMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_BATCHSCAN_SET_RSP + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U32 supportedMscan; +} tHalBatchScanSetRspParam, *tpHalBatchScanSetRspParam; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalBatchScanSetRspParam setBatchScanRspParam; +} tHalBatchScanSetRspMsg, *tpHalBatchScanSetRspMsg; + +/*--------------------------------------------------------------------------- +* WLAN_HAL_BATCHSCAN_STOP_IND +*--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U32 param; +} tHalBatchScanStopIndParam, *tpHalBatchScanStopIndParam; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalBatchScanStopIndParam param; +} tHalBatchScanStopIndMsg, *tpHalBatchScanStopIndMsg; + +/*--------------------------------------------------------------------------- +* WLAN_HAL_BATCHSCAN_TRIGGER_RESULT_IND +*--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U32 param; +} tHalBatchScanTriggerResultParam, *tpHalBatchScanTriggerResultParam; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalBatchScanTriggerResultParam param; +} tHalBatchScanTriggerResultIndMsg, *tpHalBatchScanTriggerResultIndMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_BATCHSCAN_GET_RSP + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 bssid[6]; /* BSSID */ + tANI_U8 ssid[32]; /* SSID */ + tANI_U8 ch; /* Channel */ + tANI_U8 rssi; /* RSSI or Level */ + /* Timestamp when Network was found. Used to calculate age based on timestamp in GET_RSP msg header */ + tANI_U32 timestamp; +} tHalBatchScanNetworkInfo, *tpHalBatchScanNetworkInfo; + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U32 scanId; /* Scan List ID. */ + /* No of AP in a Scan Result. Should be same as bestNetwork in SET_REQ msg */ + tANI_U32 numNetworksInScanList; + /* Variable data ptr: Number of AP in Scan List */ + /* following numNetworkInScanList is data of type tHalBatchScanNetworkInfo + * of sizeof(tHalBatchScanNetworkInfo) * numNetworkInScanList */ + tANI_U8 scanList[1]; +} tHalBatchScanList, *tpHalBatchScanList; + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U32 timestamp; + tANI_U32 numScanLists; + boolean isLastResult; + /* Variable Data ptr: Number of Scan Lists*/ + /* following isLastResult is data of type tHalBatchScanList + * of sizeof(tHalBatchScanList) * numScanLists*/ + tANI_U8 scanResults[1]; +} tHalBatchScanResultIndParam, *tpHalBatchScanResultIndParam; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalBatchScanResultIndParam resultIndMsgParam; +} tHalBatchScanResultIndMsg, *tpHalBatchScanResultIndMsg; + +#endif + /*--------------------------------------------------------------------------- * WLAN_HAL_KEEP_ALIVE_REQ *--------------------------------------------------------------------------*/ @@ -3873,6 +4170,62 @@ typedef PACKED_PRE struct PACKED_POST tANI_U8 bssIdx; } tHalExitUapsdReqMsg, *tpHalExitUapsdReqMsg; +#define HAL_PERIODIC_TX_PTRN_MAX_SIZE 1536 +#define HAL_MAXNUM_PERIODIC_TX_PTRNS 6 +/*--------------------------------------------------------------------------- + * WLAN_HAL_ADD_PERIODIC_TX_PTRN_IND + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U32 selfStaIdx:8; + tANI_U32 ucPtrnId:8; // Pattern ID + tANI_U32 usPtrnSize:16; // Non-Zero Pattern size + tANI_U32 uPtrnIntervalMs; // In msec + tANI_U8 ucPattern[HAL_PERIODIC_TX_PTRN_MAX_SIZE]; // Pattern buffer +} tHalAddPeriodicTxPtrn, *tpHalAddPeriodicTxPtrn; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalAddPeriodicTxPtrn ptrnParams; +} tHalAddPeriodicTxPtrnIndMsg, *tpHalAddPeriodicTxPtrnIndMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_DEL_PERIODIC_TX_PTRN_IND + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U32 selfStaIdx:8; + tANI_U32 rsvd:24; + /* Bitmap of pattern IDs that needs to be deleted */ + tANI_U32 uPatternIdBitmap; +} tHalDelPeriodicTxPtrn, *tpHalDelPeriodicTxPtrn; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalDelPeriodicTxPtrn ptrnParams; +} tHalDelPeriodicTxPtrnIndMsg, *tpHalDelPeriodicTxPtrnIndMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_PERIODIC_TX_PTRN_FW_IND + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* Type of Failure indication */ + tANI_U32 bssIdx:8; + tANI_U32 selfStaIdx:8; + tANI_U32 rsvd:16; + tANI_U32 status; + tANI_U32 patternIdBitmap; +} tHalPeriodicTxPtrnFwInd, *tpHalPeriodicTxPtrnFwInd; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalPeriodicTxPtrnFwInd fwIndParams; +} tHalPeriodicTxPtrnFwIndMsg, *tpHalPeriodicTxPtrnFwIndMsg; + /*--------------------------------------------------------------------------- * WLAN_HAL_ADD_WOWL_BCAST_PTRN *--------------------------------------------------------------------------*/ @@ -4189,7 +4542,9 @@ typedef PACKED_PRE struct PACKED_POST tANI_U32 bRssiThres3PosCross : 1; tANI_U32 bRssiThres3NegCross : 1; tANI_U32 avgRssi : 8; - tANI_U32 bReserved : 18; + tANI_U32 uBssIdx : 8; + tANI_U32 isBTCoexCompromise : 1; + tANI_U32 bReserved : 9; } tHalRSSINotification, *tpHalRSSINotification; typedef PACKED_PRE struct PACKED_POST @@ -4442,6 +4797,54 @@ typedef PACKED_PRE struct PACKED_POST tSetMaxTxPwrRspParams setMaxTxPwrRspParams; }tSetMaxTxPwrRspMsg, *tpSetMaxTxPwrRspMsg; + +/*--------------------------------------------------------------------------- + *WLAN_HAL_SET_MAX_TX_POWER_PER_BAND_REQ + *--------------------------------------------------------------------------*/ + +/* Band types for WLAN_HAL_SET_MAX_TX_POWER_PER_BAND_REQ between WDI and HAL */ +typedef enum +{ + WLAN_HAL_SET_MAX_TX_POWER_BAND_ALL = 0, + // For 2.4GHz or 5GHz bands + WLAN_HAL_SET_MAX_TX_POWER_BAND_2_4_GHZ, + WLAN_HAL_SET_MAX_TX_POWER_BAND_5_0_GHZ, + // End of valid enums + WLAN_HAL_SET_MAX_TX_POWER_BAND_MAX = WLAN_HAL_MAX_ENUM_SIZE, +}tHalSetMaxTxPwrBandInfo; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalSetMaxTxPwrBandInfo bandInfo; // 2_4_GHZ or 5_0_GHZ + tPowerdBm power; // In request, power == MaxTx power to be used. +}tSetMaxTxPwrPerBandParams, *tpSetMaxTxPwrPerBandParams; + + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tSetMaxTxPwrPerBandParams setMaxTxPwrPerBandParams; +}tSetMaxTxPwrPerBandReq, *tpSetMaxTxPwrPerBandReq; + +/*--------------------------------------------------------------------------- +*WLAN_HAL_SET_MAX_TX_POWER_PER_BAND_RSP +*--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + //power == tx power used for management frames. + tPowerdBm power; + + /* success or failure */ + tANI_U32 status; +}tSetMaxTxPwrPerBandRspParams, *tpSetMaxTxPwrPerBandRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tSetMaxTxPwrPerBandRspParams setMaxTxPwrPerBandRspParams; +}tSetMaxTxPwrPerBandRspMsg, *tpSetMaxTxPwrPerBandRspMsg; + /*--------------------------------------------------------------------------- *WLAN_HAL_SET_TX_POWER_REQ *--------------------------------------------------------------------------*/ @@ -4560,11 +4963,20 @@ typedef PACKED_PRE struct PACKED_POST tANI_U32 status; }tAddStaSelfParams, *tpAddStaSelfParams; +typedef PACKED_PRE struct PACKED_POST +{ + tSirMacAddr selfMacAddr; + tANI_U32 status; + tHalIfacePersona iface_persona; +}tAddStaSelfParams_V1, *tpAddStaSelfParams_V1; typedef PACKED_PRE struct PACKED_POST { tHalMsgHeader header; + PACKED_PRE union PACKED_POST { tAddStaSelfParams addStaSelfParams; + tAddStaSelfParams_V1 addStaSelfParams_V1; + }uAddStaSelfParams; }tAddStaSelfReq, *tpAddStaSelfReq; /*--------------------------------------------------------------------------- @@ -4764,6 +5176,8 @@ typedef PACKED_PRE struct PACKED_POST #define WLAN_COEX_IND_TYPE_ENABLE_HB_MONITOR (1) #define WLAN_COEX_IND_TYPE_SCANS_ARE_COMPROMISED_BY_COEX (2) #define WLAN_COEX_IND_TYPE_SCANS_ARE_NOT_COMPROMISED_BY_COEX (3) +#define WLAN_COEX_IND_TYPE_DISABLE_AGGREGATION_IN_2p4 (4) +#define WLAN_COEX_IND_TYPE_ENABLE_AGGREGATION_IN_2p4 (5) typedef PACKED_PRE struct PACKED_POST { @@ -4931,7 +5345,10 @@ typedef PACKED_PRE struct PACKED_POST /*--------------------------------------------------------------------------- *PNO Messages *-------------------------------------------------------------------------*/ -/*Max number of channels that a network can be found on*/ +/* Max number of channels that a network can be found on*/ +/* WLAN_HAL_PNO_MAX_NETW_CHANNELS and WLAN_HAL_PNO_MAX_NETW_CHANNELS_EX should + * be changed at same time + */ #define WLAN_HAL_PNO_MAX_NETW_CHANNELS 60 /*Max number of channels that a network can be found on*/ @@ -4946,21 +5363,13 @@ typedef PACKED_PRE struct PACKED_POST /*Maximum size of the probe template*/ #define WLAN_HAL_PNO_MAX_PROBE_SIZE 450 -#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD -#define CHANNEL_LIST_STATIC 1 /* Occupied channel list remains static */ -#define CHANNEL_LIST_DYNAMIC_INIT 2 /* Occupied channel list can be learnt after init */ -#define CHANNEL_LIST_DYNAMIC_FLUSH 3 /* Occupied channel list can be learnt after flush */ -#define CHANNEL_LIST_DYNAMIC_UPDATE 4 /* Occupied channel list can be learnt after update */ -#define WLAN_HAL_ROAM_SCAN_MAX_PROBE_SIZE 450 -#define WLAN_HAL_ROAM_SCAN_MAX_CHANNELS NUM_RF_CHANNELS -#define WLAN_HAL_ROAM_SCAN_RESERVED_BYTES 64 -#endif - /*Type of PNO enabling Immediate - scanning will start immediately and PNO procedure will be repeated based on timer Suspend - scanning will start at suspend - Resume - scanning will start on system resume*/ + Resume - scanning will start on system resume + Delay - start the scan timer to trigger PNO scan + */ typedef enum { ePNO_MODE_IMMEDIATE, @@ -5173,48 +5582,6 @@ typedef PACKED_PRE struct PACKED_POST tPrefNetwListParamsNew prefNetwListParams; } tSetPrefNetwListReqNew, *tpSetPrefNetwListReqNew; -/* - Preferred network list response -*/ -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - - /*status of the request - just to indicate that PNO has acknowledged - the request and will start scanning*/ - tANI_U32 status; -} tSetPrefNetwListResp, *tpSetPrefNetwListResp; - -/* - Preferred network indication parameters -*/ -typedef PACKED_PRE struct PACKED_POST { - - /*Network that was found with the highest RSSI*/ - tSirMacSSid ssId; - - /*Indicates the RSSI */ - tANI_U8 rssi; - - tANI_U16 frameLength; -} tPrefNetwFoundParams, * tpPrefNetwFoundParams; - -/* - Preferred network found indication -*/ -typedef PACKED_PRE struct PACKED_POST { - - tHalMsgHeader header; - tPrefNetwFoundParams prefNetwFoundParams; -} tPrefNetwFoundInd, *tpPrefNetwFoundInd; - - -typedef PACKED_PRE struct PACKED_POST { - - /*RSSI Threshold*/ - tANI_U8 ucRssiThreshold; - -} tRssiFilterParams, * tpRssiFilterParams; #ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD typedef PACKED_PRE struct PACKED_POST { @@ -5254,6 +5621,9 @@ typedef PACKED_PRE struct PACKED_POST { tANI_U16 us5GProbeSize; tANI_U8 a5GProbeTemplate[WLAN_HAL_ROAM_SCAN_MAX_PROBE_SIZE]; /* Add Reserved bytes */ + tANI_U8 nProbes; + tANI_U16 HomeAwayTime; + eAniBoolean MAWCEnabled; tANI_U8 ReservedBytes[WLAN_HAL_ROAM_SCAN_RESERVED_BYTES]; tRoamNetworkType ConnectedNetwork; tMobilityDomainInfo MDID; @@ -5261,33 +5631,79 @@ typedef PACKED_PRE struct PACKED_POST { typedef PACKED_PRE struct PACKED_POST { - tHalMsgHeader header; - tRoamCandidateListParams RoamScanOffloadNetwListParams; + tHalMsgHeader header; + tRoamCandidateListParams RoamScanOffloadNetwListParams; } tSetRoamScanOffloadReq, *tpRoamScanOffloadReq; typedef PACKED_PRE struct PACKED_POST { - tHalMsgHeader header; + tHalMsgHeader header; - /*status of the request - just to indicate that PNO has acknowledged - * the request and will start scanning*/ - tANI_U32 status; + /* status of the request - just to indicate that PNO has acknowledged + * the request and will start scanning */ + tANI_U32 status; } tSetRoamOffloadScanResp, *tpSetRoamOffloadScanResp; #endif + /* - RSSI Filter request + Preferred network list response */ typedef PACKED_PRE struct PACKED_POST { tHalMsgHeader header; - tRssiFilterParams prefRSSIFilterParams; -} tSetRssiFilterReq, *tpSetRssiFilterReq; + + /* status of the request - just to indicate that PNO has acknowledged + * the request and will start scanning*/ + tANI_U32 status; +} tSetPrefNetwListResp, *tpSetPrefNetwListResp; /* - Set RSSI filter resp + Preferred network indication parameters */ -typedef PACKED_PRE struct PACKED_POST{ - tHalMsgHeader header; +typedef PACKED_PRE struct PACKED_POST { + + /*Network that was found with the highest RSSI*/ + tSirMacSSid ssId; + + /*Indicates the RSSI */ + tANI_U8 rssi; + + //The MPDU frame length of a beacon or probe rsp. data is the start of the frame + tANI_U16 frameLength; + +} tPrefNetwFoundParams, * tpPrefNetwFoundParams; + +/* + Preferred network found indication +*/ +typedef PACKED_PRE struct PACKED_POST { + + tHalMsgHeader header; + tPrefNetwFoundParams prefNetwFoundParams; +} tPrefNetwFoundInd, *tpPrefNetwFoundInd; + + +typedef PACKED_PRE struct PACKED_POST { + + /*RSSI Threshold*/ + tANI_U8 ucRssiThreshold; + +} tRssiFilterParams, * tpRssiFilterParams; + +/* + RSSI Filter request +*/ +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tRssiFilterParams prefRSSIFilterParams; +} tSetRssiFilterReq, *tpSetRssiFilterReq; + +/* + Set RSSI filter resp +*/ +typedef PACKED_PRE struct PACKED_POST{ + tHalMsgHeader header; /*status of the request */ tANI_U32 status; } tSetRssiFilterResp, *tpSetRssiFilterResp; @@ -5597,6 +6013,38 @@ typedef PACKED_PRE struct PACKED_POST *******************Packet Filtering Definitions End******************* *--------------------------------------------------------------------------*/ +/* + * There are two versions of this message + * Version 1 : Base version + * Current version : Base version + Max LI modulated DTIM + */ +typedef PACKED_PRE struct PACKED_POST +{ + /* Ignore DTIM */ + tANI_U32 uIgnoreDTIM; + + /*DTIM Period*/ + tANI_U32 uDTIMPeriod; + + /* Listen Interval */ + tANI_U32 uListenInterval; + + /* Broadcast Multicast Filter */ + tANI_U32 uBcastMcastFilter; + + /* Beacon Early Termination */ + tANI_U32 uEnableBET; + + /* Beacon Early Termination Interval */ + tANI_U32 uBETInterval; +}tSetPowerParamsVer1Type, *tpSetPowerParamsVer1Type; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tSetPowerParamsVer1Type powerParams; +} tSetPowerParamsVer1ReqMsg, *tpSetPowerParamsVer1ReqMsg; + typedef PACKED_PRE struct PACKED_POST { /* Ignore DTIM */ @@ -5641,31 +6089,38 @@ typedef PACKED_PRE struct PACKED_POST{ *--------------------------------------------------------------------------*/ typedef enum { - MCC = 0, - P2P = 1, - DOT11AC = 2, - SLM_SESSIONIZATION = 3, - DOT11AC_OPMODE = 4, - SAP32STA = 5, - TDLS = 6, + MCC = 0, + P2P = 1, + DOT11AC = 2, + SLM_SESSIONIZATION = 3, + DOT11AC_OPMODE = 4, + SAP32STA = 5, + TDLS = 6, P2P_GO_NOA_DECOUPLE_INIT_SCAN = 7, - WLANACTIVE_OFFLOAD = 8, - BEACON_OFFLOAD = 9, - SCAN_OFFLOAD = 10, - ROAM_OFFLOAD = 11, - BCN_MISS_OFFLOAD = 12, - STA_POWERSAVE = 13, - STA_ADVANCED_PWRSAVE = 14, - AP_UAPSD = 15, - AP_DFS = 16, - BLOCKACK = 17, - PHY_ERR = 18, - BCN_FILTER = 19, - RTT = 20, - RATECTRL = 21, - WOW = 22, + WLANACTIVE_OFFLOAD = 8, + BEACON_OFFLOAD = 9, + SCAN_OFFLOAD = 10, + ROAM_OFFLOAD = 11, + BCN_MISS_OFFLOAD = 12, + STA_POWERSAVE = 13, + STA_ADVANCED_PWRSAVE = 14, + AP_UAPSD = 15, + AP_DFS = 16, + BLOCKACK = 17, + PHY_ERR = 18, + BCN_FILTER = 19, + RTT = 20, + RATECTRL = 21, + WOW = 22, WLAN_ROAM_SCAN_OFFLOAD = 23, - //MAX_FEATURE_SUPPORTED = 128 + SPECULATIVE_PS_POLL = 24, + SCAN_SCH = 25, + IBSS_HEARTBEAT_OFFLOAD = 26, + WLAN_SCAN_OFFLOAD = 27, + WLAN_PERIODIC_TX_PTRN = 28, + ADVANCE_TDLS = 29, + BATCH_SCAN = 30, + MAX_FEATURE_SUPPORTED = 128, } placeHolderInCapBitmap; typedef PACKED_PRE struct PACKED_POST{ @@ -5684,9 +6139,9 @@ typedef PACKED_PRE struct PACKED_POST{ #define IS_SLM_SESSIONIZATION_SUPPORTED_BY_HOST (!!(halMsg_GetHostWlanFeatCaps(SLM_SESSIONIZATION))) #define IS_FEATURE_SUPPORTED_BY_HOST(featEnumValue) (!!halMsg_GetHostWlanFeatCaps(featEnumValue)) #define IS_WLANACTIVE_OFFLOAD_SUPPORTED_BY_HOST (!!(halMsg_GetHostWlanFeatCaps(WLANACTIVE_OFFLOAD))) -#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD -#define IS_ROAM_SCAN_OFFLOAD_SUPPORTED_BY_HOST (!!(halMsg_GetHostWlanFeatCaps(WLAN_ROAM_SCAN_OFFLOAD))) -#endif +#define IS_WLAN_ROAM_SCAN_OFFLOAD_SUPPORTED_BY_HOST (!!(halMsg_GetHostWlanFeatCaps(WLAN_ROAM_SCAN_OFFLOAD))) +#define IS_IBSS_HEARTBEAT_OFFLOAD_SUPPORTED_BY_HOST (!!(halMsg_GetHostWlanFeatCaps(IBSS_HEARTBEAT_OFFLOAD))) +#define IS_SCAN_OFFLOAD_SUPPORTED_BY_HOST (!!(halMsg_GetHostWlanFeatCaps(WLAN_SCAN_OFFLOAD))) tANI_U8 halMsg_GetHostWlanFeatCaps(tANI_U8 feat_enum_value); @@ -5694,6 +6149,7 @@ tANI_U8 halMsg_GetHostWlanFeatCaps(tANI_U8 feat_enum_value); if ((b)<=127) { \ arr_index = (b)/32; \ bit_index = (b)%32; \ + if(arr_index < 4) \ (a)->featCaps[arr_index] |= (1<FW + WLAN_HAL_LEADER_CANCELED, //Host-->FW + WLAN_HAL_LEADER_PICK_NEW, //FW-->Host + WLAN_HAL_LEADER_IND_MAX = WLAN_HAL_MAX_ENUM_SIZE +}tLbpUpdateIndType; + +typedef enum +{ + WLAN_HAL_LBP_LEADER_ROLE, + WLAN_HAL_LBP_TRANSMITTER_ROLE, + WLAN_HAL_LBP_ROLE_MAX = WLAN_HAL_MAX_ENUM_SIZE +}tLbpRoleType; + +typedef PACKED_PRE struct PACKED_POST +{ + tLbpUpdateIndType indication; + + /* Role of the entity generating this indication */ + tLbpRoleType role; + + /* MAC address of MCAST Transmitter (source) */ + tSirMacAddr mcastTransmitter; + + /* MAC Address of Multicast Group (01-00-5E-xx-xx-xx) */ + tSirMacAddr mcastGroup; + + /* MAC address of MCAST Receiver Leader */ + tSirMacAddr mcastLeader; + + /* Candidate list for indication = WLAN_HAL_LEADER_PICK_NEW */ + tSirMacAddr leader[HAL_NUM_MAX_LEADERS]; +} tHalLbpUpdateIndParams, *tpHalLbpUpdateIndParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalLbpUpdateIndParams leaderIndParams; +} tHalLbpUpdateInd, *tpHalLbpUpdateInd; + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 staIdx; // Station Idx; + tANI_U32 txRate; // Legacy transmit rate, in units of 500 kbit/sec, + // for the most recently transmitted frame + tANI_U32 mcsIndex; // mcs index for HT20 and HT40 rates + tANI_U32 txRateFlags; // to differentiate between HT20 and + // HT40 rates; short and long guard interval + tANI_S8 rssi; // RSSI of the last received beacon +}tHalIbssPeerParams, *tpHalIbssPeerParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U32 status; // success or failure + tANI_U8 numOfPeers; // Number of Peers for + // which stats are being reported + tHalIbssPeerParams ibssPeerParams[1]; // Stats of peer in IBSS +}tHalIbssPeerInfoRspParams, *tpHalIbssPeerInfoRspParams; + +// WLAN_HAL_GET_IBSS_PEER_INFO_RSP +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalIbssPeerInfoRspParams ibssPeerInfoRspParams; +}tHalIbssPeerInfoRsp, *tpHalIbssPeerInfoRsp; + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 bssIdx; // Bss Index + tANI_BOOLEAN allPeerInfoReqd; // If set, all IBSS peers stats are reported + tANI_U8 staIdx; // If allPeerInfoReqd is not set, + // only stats of peer with + // staIdx is reported +}tHalIbssPeerInfoReqParams, *tpHalIbssPeerInfoReqParams; + +// WLAN_HAL_GET_IBSS_PEER_INFO_REQ +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalIbssPeerInfoReqParams ibssPeerInfoReqParams; +}tHalIbssPeerInfoReq, *tpHalIbssPeerInfoReq; + +/*--------------------------------------------------------------------------- + WLAN_HAL_RATE_UPDATE_IND + *-------------------------------------------------------------------------*/ + typedef PACKED_PRE struct PACKED_POST +{ + /* 0 implies UCAST RA, positive value implies fixed rate, -1 implies ignore this param */ + tANI_S32 ucastDataRate; //unit Mbpsx10 + + /* TX flag to differentiate between HT20, HT40 etc */ + tTxRateInfoFlags ucastDataRateTxFlag; + + /* BSSID - Optional. 00-00-00-00-00-00 implies apply to all BCAST STAs */ + tSirMacAddr bssid; + + /* 0 implies MCAST RA, positive value implies fixed rate, -1 implies ignore */ + tANI_S32 reliableMcastDataRate; //unit Mbpsx10 + + /* TX flag to differentiate between HT20, HT40 etc */ + tTxRateInfoFlags reliableMcastDataRateTxFlag; + + /* Default (non-reliable) MCAST(or BCAST) fixed rate in 2.4 GHz, 0 implies ignore */ + tANI_U32 mcastDataRate24GHz; //unit Mbpsx10 + + /* TX flag to differentiate between HT20, HT40 etc */ + tTxRateInfoFlags mcastDataRate24GHzTxFlag; + + /* Default (non-reliable) MCAST(or BCAST) fixed rate in 5 GHz, 0 implies ignore */ + tANI_U32 mcastDataRate5GHz; //unit Mbpsx10 + + /* TX flag to differentiate between HT20, HT40 etc */ + tTxRateInfoFlags mcastDataRate5GHzTxFlag; + +} tHalRateUpdateParams, *tpHalRateUpdateParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalRateUpdateParams halRateUpdateParams; +} tHalRateUpdateInd, * tpHalRateUpdateInd; + +/*--------------------------------------------------------------------------- +* WLAN_HAL_TX_FAIL_IND +*--------------------------------------------------------------------------*/ +// Northbound indication from FW to host on weak link detection +typedef PACKED_PRE struct PACKED_POST +{ + // Sequence number increases by 1 whenever the device driver + // sends a notification event. This is cleared as 0 when the + // JOIN IBSS commamd is issued + tANI_U16 seqNo; + tANI_U16 staId; + tANI_U8 macAddr[HAL_MAC_ADDR_LEN]; +} tHalTXFailIndParams, *tpHalTXFailIndParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalTXFailIndParams txFailIndParams; +} tHalTXFailIndMsg, *tpHalTXFailIndMsg; + +/*--------------------------------------------------------------------------- +* WLAN_HAL_TX_FAIL_MONITOR_IND +*--------------------------------------------------------------------------*/ +// Southbound message from Host to monitor the Tx failures +typedef PACKED_PRE struct PACKED_POST +{ + // tx_fail_count = 0 should disable the TX Fail monitor, non-zero value should enable it. + tANI_U8 tx_fail_count; +} tTXFailMonitorInfo, *tpTXFailMonitorInfo; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tTXFailMonitorInfo txFailMonitor; +} tTXFailMonitorInd, *tpTXFailMonitorInd; + +/*--------------------------------------------------------------------------- +* WLAN_HAL_IP_FORWARD_TABLE_UPDATE_IND +*--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 destIpv4Addr[HAL_IPV4_ADDR_LEN]; + tANI_U8 nextHopMacAddr[HAL_MAC_ADDR_LEN]; +} tDestIpNextHopMacPair; + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 numEntries; + tDestIpNextHopMacPair destIpMacPair[1]; +} tWlanIpForwardTableUpdateIndParam; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tWlanIpForwardTableUpdateIndParam ipForwardTableParams; +} tWlanIpForwardTableUpdateInd; + +/*--------------------------------------------------------------------------- + *-------------------------------------------------------------------------*/ + #if defined(__ANI_COMPILER_PRAGMA_PACK_STACK) #pragma pack(pop) #elif defined(__ANI_COMPILER_PRAGMA_PACK) diff --git a/wcnss/inc/wlan_nv.h b/wcnss/inc/wlan_nv.h index cce81fb54501..4ef15cdcd749 100644 --- a/wcnss/inc/wlan_nv.h +++ b/wcnss/inc/wlan_nv.h @@ -119,6 +119,14 @@ typedef enum #define WLAN_NV_VERSION NV_VERSION_11N_11AC_FW_CONFIG #endif //WCN_PRONTO +typedef PACKED_PRE struct PACKED_POST +{ + uint8 macAddr1[NV_FIELD_MAC_ADDR_SIZE]; /* Default, not change name for compatibility */ + uint8 macAddr2[NV_FIELD_MAC_ADDR_SIZE]; + uint8 macAddr3[NV_FIELD_MAC_ADDR_SIZE]; + uint8 macAddr4[NV_FIELD_MAC_ADDR_SIZE]; +} sMacAddr; + typedef PACKED_PRE union PACKED_POST { //common NV fields @@ -127,10 +135,7 @@ typedef PACKED_PRE union PACKED_POST uint8 wlanNvRevId; uint8 numOfTxChains; uint8 numOfRxChains; - uint8 macAddr[NV_FIELD_MAC_ADDR_SIZE]; /* Default, not change name for compatibility */ - uint8 macAddr2[NV_FIELD_MAC_ADDR_SIZE]; - uint8 macAddr3[NV_FIELD_MAC_ADDR_SIZE]; - uint8 macAddr4[NV_FIELD_MAC_ADDR_SIZE]; + sMacAddr macAddr; uint8 mfgSN[NV_FIELD_MFG_SN_SIZE]; uint8 couplerType; uint8 nvVersion; @@ -171,7 +176,8 @@ typedef enum { PHY_TX_CHAIN_0 = 0, - PHY_MAX_TX_CHAINS = 1, + NUM_PHY_MAX_TX_CHAINS = 1, + PHY_MAX_TX_CHAINS = NUM_PHY_MAX_TX_CHAINS, PHY_ALL_TX_CHAINS, //possible tx chain combinations @@ -316,7 +322,6 @@ typedef enum MIN_2_4GHZ_CHANNEL = RF_CHAN_1, MAX_2_4GHZ_CHANNEL = RF_CHAN_14, - NUM_2_4GHZ_CHANNELS = (MAX_2_4GHZ_CHANNEL - MIN_2_4GHZ_CHANNEL + 1), MIN_5GHZ_CHANNEL = RF_CHAN_240, MAX_5GHZ_CHANNEL = RF_CHAN_165, @@ -343,6 +348,26 @@ typedef enum RF_CHANNEL_INVALID_MAX_FIELD = 0x7FFFFFFF /* define as 4 bytes data */ }eRfChannels; +typedef enum +{ + RF_CHAN_1_1 = RF_CHAN_1, + RF_CHAN_2_1 = RF_CHAN_2, + RF_CHAN_3_1 = RF_CHAN_3, + RF_CHAN_4_1 = RF_CHAN_4, + RF_CHAN_5_1 = RF_CHAN_5, + RF_CHAN_6_1 = RF_CHAN_6, + RF_CHAN_7_1 = RF_CHAN_7, + RF_CHAN_8_1 = RF_CHAN_8, + RF_CHAN_9_1 = RF_CHAN_9, + RF_CHAN_10_1 = RF_CHAN_10, + RF_CHAN_11_1 = RF_CHAN_11, + RF_CHAN_12_1 = RF_CHAN_12, + RF_CHAN_13_1 = RF_CHAN_13, + RF_CHAN_14_1 = RF_CHAN_14, +// The above params are used for scripts. + NUM_2_4GHZ_CHANNELS, +}eRfChannels_2_4GHz; + enum { NV_CHANNEL_DISABLE, @@ -455,7 +480,7 @@ typedef PACKED_PRE struct PACKED_POST //MSB set if extraPrecision.hi8_adjustedPwrDet is used }tTpcCaldPowerPoint; -typedef tTpcCaldPowerPoint tTpcCaldPowerTable[PHY_MAX_TX_CHAINS][MAX_TPC_CAL_POINTS]; +typedef tTpcCaldPowerPoint tTpcCaldPowerTable[NUM_PHY_MAX_TX_CHAINS][MAX_TPC_CAL_POINTS]; typedef PACKED_PRE struct PACKED_POST { @@ -467,7 +492,7 @@ typedef PACKED_PRE struct PACKED_POST #define TPC_MEM_POWER_LUT_DEPTH 256 #endif -typedef tTpcLutValue tTpcPowerTable[PHY_MAX_TX_CHAINS][TPC_MEM_POWER_LUT_DEPTH]; +typedef tTpcLutValue tTpcPowerTable[NUM_PHY_MAX_TX_CHAINS][TPC_MEM_POWER_LUT_DEPTH]; typedef PACKED_PRE struct PACKED_POST { @@ -638,7 +663,7 @@ typedef enum }eHalPhyRates; #define NUM_RATE_POWER_GROUPS NUM_HAL_PHY_RATES //total number of rate power groups including the CB_RATE_POWER_OFFSET -typedef uAbsPwrPrecision tRateGroupPwr[NUM_RATE_POWER_GROUPS]; +typedef uAbsPwrPrecision tRateGroupPwr[NUM_HAL_PHY_RATES]; //From halNvTables.h #define NV_FIELD_COUNTRY_CODE_SIZE 3 @@ -648,17 +673,40 @@ typedef PACKED_PRE struct PACKED_POST uint8 countryCode[NV_FIELD_COUNTRY_CODE_SIZE]; // string identifier }sDefaultCountry; + +#define GF_PA_BIAS_SELECT_MASK 0X7 //(3 bits) +#define TSMC_PA_BIAS_SELECT_MASK 0x7 //(3 bits) + +#define GF_PA_BIAS_SELECT_1 0X0 +#define GF_PA_BIAS_SELECT_2 0X1 + +#define TSMC_PA_BIAS_SELECT_1 0X0 +#define TSMC_PA_BIAS_SELECT_2 0X1 +#define TSMC_PA_BIAS_SELECT_3 0x2 + + +#define EXT_PA_CTRL_POLARITY_DEFAULT 0X0 +#define EXT_PA_CTRL_POLARITY_VALID 0X80 + +#define EXT_PA_CTRL0_POLARITY_MASK 0X3 +#define EXT_PA_CTRL0_POLARITY_OFFSET 0X0 +#define EXT_PA_CTRL1_POLARITY_MASK 0XC +#define EXT_PA_CTRL1_POLARITY_OFFSET 0X2 + +#define EXT_PA_CTRL_POLARITY_ZERO 0X1 +#define EXT_PA_CTRL_POLARITY_ONE 0X2 + typedef PACKED_PRE struct PACKED_POST { uint8 skuID; uint8 tpcMode2G; uint8 tpcMode5G; - uint8 reserved1; + uint8 configItem1; uint8 xPA2G; uint8 xPA5G; - uint8 paPolarityTx; - uint8 paPolarityRx; + uint8 extPaCtrl0Polarity; + uint8 extPaCtrl1Polarity; uint8 xLNA2G; uint8 xLNA5G; @@ -675,9 +723,9 @@ typedef PACKED_PRE struct PACKED_POST uint8 pdadcSelect5GMid; uint8 pdadcSelect5GHigh; - uint32 reserved2; - uint32 resreved3; - uint32 resreved4; + uint32 configItem2; + uint32 configItem3; + uint32 configItem4; }sFwConfig; diff --git a/wcnss/inc/wlan_phy.h b/wcnss/inc/wlan_phy.h index 07832ae99b15..acfdafe0962a 100644 --- a/wcnss/inc/wlan_phy.h +++ b/wcnss/inc/wlan_phy.h @@ -222,11 +222,16 @@ typedef tANI_U32 eGainSteps; typedef PACKED_PRE struct PACKED_POST { tANI_U8 dpdCalFailCnt; //Count for number of times DPD cal failed. tANI_U8 dpdCalSuccessCnt; //Count for number of times DPD cal passed. + tANI_U8 dpdColdBootRepeatCalStatus; + tANI_U8 dpdLastIteration; tANI_S16 dpd_threshold[DPD_RESPONSE_SIZE]; tANI_S16 dpd_aoffset[DPD_RESPONSE_SIZE]; tANI_S16 dpd_again[DPD_RESPONSE_SIZE]; tANI_S16 dpd_poffset[DPD_RESPONSE_SIZE]; tANI_S16 dpd_pgain[DPD_RESPONSE_SIZE]; + tANI_S32 dpd_sample[20]; + tANI_U8 dpd_try; + tANI_U8 band; }sDPDcorrectionCalValues; typedef PACKED_PRE struct PACKED_POST { diff --git a/wcnss/inc/wlan_qct_dev_defs.h b/wcnss/inc/wlan_qct_dev_defs.h index 12a12ccf9633..c4bb755550b0 100644 --- a/wcnss/inc/wlan_qct_dev_defs.h +++ b/wcnss/inc/wlan_qct_dev_defs.h @@ -66,7 +66,7 @@ // For Pronto #define HAL_NUM_STA_WITHOUT_VSTA_PRONTO_V1 9 -#define HAL_NUM_STA_WITHOUT_VSTA_PRONTO_V2 (HAL_NUM_STA_WITHOUT_VSTA +#define HAL_NUM_STA_WITHOUT_VSTA_PRONTO_V2 (HAL_NUM_STA_WITHOUT_VSTA) #define IS_VSTA_VALID_IDX(__x) \ ((__x) != QWLANFW_VSTA_INVALID_IDX) @@ -140,7 +140,6 @@ * 1 for reserving an infra peer STA index (hard) for the other interface. * 1 for P2P device role. */ - #ifdef WLAN_SOFTAP_VSTA_FEATURE #define HAL_NUM_ASSOC_STA 32 #define HAL_NUM_STA 41 @@ -185,6 +184,10 @@ #endif /* WCN_PRONTO */ +#ifdef FEATURE_WLAN_TDLS +#define CXM_TDLS_MAX_NUM_STA 32 +#endif + #define HAL_INVALID_BSSIDX HAL_NUM_BSSID #define MAX_NUM_OF_BACKOFFS 8 diff --git a/wcnss/inc/wlan_status_code.h b/wcnss/inc/wlan_status_code.h index 896572719f33..e1057281a265 100644 --- a/wcnss/inc/wlan_status_code.h +++ b/wcnss/inc/wlan_status_code.h @@ -160,6 +160,15 @@ typedef enum /* BSS disconnect status : disassoc */ eHAL_STATUS_BSS_DISCONN_DISASSOC, + /* Data abort happened in PHY sw */ + eHAL_STATUS_PHY_DATA_ABORT, + + /* Invalid NV field */ + eHAL_STATUS_PHY_INVALID_NV_FIELD, + + /* WLAN boot test failed */ + eHAL_STATUS_WLAN_BOOT_TEST_FAILURE, + /* Max status value */ eHAL_STATUS_MAX_VALUE = WLAN_STATUS_MAX_ENUM_SIZE diff --git a/wcnss/riva/inc/halCompiler.h b/wcnss/riva/inc/halCompiler.h new file mode 100644 index 000000000000..0705972ea78f --- /dev/null +++ b/wcnss/riva/inc/halCompiler.h @@ -0,0 +1,179 @@ +/* + * Copyright (c) 2013, The Linux Foundation. All rights reserved. + * + * Previously licensed under the ISC license by Qualcomm Atheros, Inc. + * + * + * Permission to use, copy, modify, and/or distribute this software for + * any purpose with or without fee is hereby granted, provided that the + * above copyright notice and this permission notice appear in all + * copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL + * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE + * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +/* + * This file was originally distributed by Qualcomm Atheros, Inc. + * under proprietary terms before Copyright ownership was assigned + * to the Linux Foundation. + */ + +/*========================================================================== + * + * @file: aniCompiler.h + * + * @brief: This file tries to abstract the differences among compilers. + * Supported compilers are: + * ARM RVCT compiler + * + * @author: Kumar Anand + * + * Copyright (C) 2010, Qualcomm Technologies, Inc. + * All rights reserved. + * + *=========================================================================*/ +#ifndef __ANI_COMPILER_ABSTRACT_H +#define __ANI_COMPILER_ABSTRACT_H + +/* + * 1. GNU C/C++ Compiler + * + * How to detect gcc : __GNUC__ + * How to detect gcc version : + * major version : __GNUC__ (2 = 2.x, 3 = 3.x, 4 = 4.x) + * minor version : __GNUC_MINOR__ + * + * 2. Microsoft C/C++ Compiler + * + * How to detect msc : _MSC_VER + * How to detect msc version : + * _MSC_VER (1200 = MSVC 6.0, 1300 = MSVC 7.0, ...) + * + * 3. Intel C/C++ Compiler + * + * How to detect icc : __INTEL_COMPILER, __ICC (legacy), __ECC (legacy) + * How to detect icc version : + * __INTEL_COMPILER, __ICC, __ECC (700 = 7.0, 900 = 9.0, ...) + * + * 4. Other compilers (not supported) + * + * Borland : __BORLANDC__ + * Greenhills : __ghs + * Metrowerks : __MWERKS__ + * SGI MIPSpro : __sgi + */ + +/* + * Packing directives : These are used to force compiler to pack bits and + * bytes in the data structure. C standard does not regulate this strictly, + * and many things are to compiler implementation. Many compilers support + * compiler specific directives or options that allow different packing + * and alignment. + * + * Alignment directives : Compiler may think packed data structures have + * no specific alignment requirement. Then compiler may generate multiple + * byte accesses to access two byte or four bytes data structures. This + * affects on performance especially for RISC systems. If some data + * structure is located on specific alignment always, alignment directives + * help compiler generate more efficient codes. + */ + +#undef __ANI_COMPILER_PRAGMA_PACK_STACK +#undef __ANI_COMPILER_PRAGMA_PACK + +#if defined(_MSC_VER) +#define __ANI_COMPILER_PRAGMA_PACK_STACK 1 +#define __ANI_COMPILER_PRAGMA_PACK 1 +#define __ani_attr_pre_packed +#define __ani_attr_packed +#define __ani_attr_aligned_2 +#define __ani_attr_aligned_4 +#define __ani_attr_aligned_8 +#define __ani_attr_aligned_16 +#define __ani_attr_aligned_32 +#define PACKED +#define PACKED_POST +#define ALIGN(__value) +#elif defined(__INTEL_COMPILER) || defined(__ICC) || defined(__ECC) +#define __ANI_COMPILER_PRAGMA_PACK 1 +#define __ani_attr_pre_packed +#define __ani_attr_packed +#define __ani_attr_aligned_2 +#define __ani_attr_aligned_4 +#define __ani_attr_aligned_8 +#define __ani_attr_aligned_16 +#define __ani_attr_aligned_32 +#define PACKED +#define PACKED_POST +#define ALIGN(__value) +#elif defined(__GNUC__) +#define __ani_attr_pre_packed +#define __ani_attr_packed __attribute__((packed)) +#define __ani_attr_aligned_2 __attribute__((aligned(2))) +#define __ani_attr_aligned_4 __attribute__((aligned(4))) +#define __ani_attr_aligned_8 __attribute__((aligned(8))) +#define __ani_attr_aligned_16 __attribute__((aligned(16))) +#define __ani_attr_aligned_32 __attribute__((aligned(32))) +#ifndef PACKED +#define PACKED +#endif +#ifndef PACKED_POST +#define PACKED_POST __attribute__((packed)) +#endif +#ifndef ALIGN +#define ALIGN(__value) __attribute__((aligned(__value))) +#endif +#elif defined(ANI_COMPILER_TYPE_RVCT) +/* Nothing defined so far */ + +/* + * RIVA 1.2 and Pronto uses ARMCT5.1 compiler and it throws lot of warning when __align() is used in structure definitions. + * __attribute__((aligned())) is GNU compiler attribute that is accepted by ARM compiler and resolves the warnings. + */ +#if (__ARMCC_VERSION > 400000) +#define __ani_attr_packed +#define __ani_attr_pre_packed __packed +#define __ani_attr_aligned_2 __attribute__((aligned(2))) +#define __ani_attr_aligned_4 __attribute__((aligned(4))) +#define __ani_attr_aligned_8 __attribute__((aligned(8))) +#define __ani_attr_aligned_16 __attribute__((aligned(16))) +#define __ani_attr_aligned_32 __attribute__((aligned(32))) +#define PACKED __packed +#define PACKED_POST +#define ALIGN(__value) __align(__value) +#define PREPACK __packed +#define POSTPACK +#else +#define __ani_attr_packed +#define __ani_attr_pre_packed __packed +#define __ani_attr_aligned_2 __align(2) +#define __ani_attr_aligned_4 __align(4) +#define __ani_attr_aligned_8 __align(8) +#define __ani_attr_aligned_16 __align(16) +#define __ani_attr_aligned_32 __align(32) +#define PACKED __packed +#define PACKED_POST +#define ALIGN(__value) __align(__value) +#endif + +#else +#error "Unknown compiler" +#endif + +#ifndef PACKED_PRE +#define PACKED_PRE __ani_attr_pre_packed +#endif + +#ifndef ALIGN_4 +#define ALIGN_4 __ani_attr_aligned_4 +#endif + +#endif //__ANI_COMPILER_ABSTRACT_H + diff --git a/wcnss/riva/inc/halLegacyPalTypes.h b/wcnss/riva/inc/halLegacyPalTypes.h new file mode 100644 index 000000000000..f889b683b90a --- /dev/null +++ b/wcnss/riva/inc/halLegacyPalTypes.h @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2013, The Linux Foundation. All rights reserved. + * + * Previously licensed under the ISC license by Qualcomm Atheros, Inc. + * + * + * Permission to use, copy, modify, and/or distribute this software for + * any purpose with or without fee is hereby granted, provided that the + * above copyright notice and this permission notice appear in all + * copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL + * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE + * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +/* + * This file was originally distributed by Qualcomm Atheros, Inc. + * under proprietary terms before Copyright ownership was assigned + * to the Linux Foundation. + */ + +#if !defined( __LEGACYPALTYPES_H__ ) +#define __LEGACYPALTYPES_H__ + +/*========================================================================== + * + * @file: halLegacyPalTypes.h + * + * @brief: Exports and types for the Platform Abstraction Layer typedefs. + * + * @author: Kumar Anand + * + * Copyright (C) 2010, Qualcomm Technologies, Inc. + * All rights reserved. + * + *=========================================================================*/ + +#include "qwlanfw_defs.h" + +/* Common type definitions */ +typedef uint8 tANI_U8; +typedef int8 tANI_S8; +typedef uint16 tANI_U16; +typedef int16 tANI_S16; +typedef uint32 tANI_U32; +typedef int32 tANI_S32; + +#ifndef BUILD_QWPTTSTATIC +typedef uint64 tANI_U64; +#endif + +typedef byte tANI_BYTE; +typedef boolean tANI_BOOLEAN; +typedef uint32 tANI_TIMESTAMP; + +#endif /*__LEGACYPALTYPES_H__*/ diff --git a/wcnss/riva/inc/pttFrameGen.h b/wcnss/riva/inc/pttFrameGen.h new file mode 100644 index 000000000000..b41b030d1f95 --- /dev/null +++ b/wcnss/riva/inc/pttFrameGen.h @@ -0,0 +1,71 @@ +/** ------------------------------------------------------------------------- * + ------------------------------------------------------------------------- * + + + \file pttFrameGen.h + + \brief Definitions for PTT frame generation + + $Id$ + + Copyright (C) 2006 Airgo Networks, Incorporated + + + ========================================================================== */ + +#ifndef PTTFRAMEGEN_H +#define PTTFRAMEGEN_H + + +//#define MAX_PKT_GEN_BUF_ENTRY (HAL_HIF_MAX_TX_RING_ENTRY >> 1) + + + +#define MAX_PAYLOAD_SIZE 2400 +#define MAX_TX_PAYLOAD_SIZE 4096 + +typedef enum { + TEST_PAYLOAD_NONE, + TEST_PAYLOAD_FILL_BYTE, + TEST_PAYLOAD_RANDOM, + TEST_PAYLOAD_RAMP, + TEST_PAYLOAD_TEMPLATE, + TEST_PAYLOAD_MAX = 0X3FFFFFFF, //dummy value to set enum to 4 bytes +} ePayloadContents; + + +#define MAC_ADDR_SIZE ( 6 ) + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 numTestPackets; + tANI_U32 interFrameSpace; + eHalPhyRates rate; + ePayloadContents payloadContents; + tANI_U16 payloadLength; + tANI_U8 payloadFillByte; + tANI_BOOLEAN pktAutoSeqNum; //seq num setting (hw or not) for packet gen + + tANI_U8 addr1[MAC_ADDR_SIZE]; + tANI_U8 addr2[MAC_ADDR_SIZE]; + tANI_U8 addr3[MAC_ADDR_SIZE]; + tANI_U8 tx_mode; + tANI_BOOLEAN crc; //0 = no FCS calculated = power detector works = receive won't work?, + //1 = crc calculated = receive works, but power detector workaround doesn't + + ePhyDbgPreamble preamble; +} sPttFrameGenParams; + + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 legacy; //11g OFDM preamble + tANI_U32 gfSimo20; //greenfield preamble + tANI_U32 mmSimo20; //mixed mode preamble + tANI_U32 gfSimo40; //greenfield preamble + tANI_U32 mmSimo40; //mixed mode preamble + tANI_U32 txbShort; //11b short + tANI_U32 txbLong; //11b long + tANI_U32 acSimo204080; //11ac SIMO 20,40,80 + tANI_U32 total; +} sTxFrameCounters; + +#endif diff --git a/wcnss/riva/inc/pttModule.h b/wcnss/riva/inc/pttModule.h new file mode 100644 index 000000000000..5fc488e3736e --- /dev/null +++ b/wcnss/riva/inc/pttModule.h @@ -0,0 +1,160 @@ +/** + * + Airgo Networks, Inc proprietary. + All Rights Reserved, Copyright 2005 + This program is the confidential and proprietary product of Airgo Networks Inc. + Any Unauthorized use, reproduction or transfer of this program is strictly prohibited. + + + pttModule.h: global variable structure for pttModule + Author: Mark Nelson + Date: 6/27/05 + + History - + Date Modified by Modification Information + -------------------------------------------------------------------------- + + */ + +#ifndef PTTMODULE_H +#define PTTMODULE_H +#include +#include + +#ifdef BUILD_QWPTTSTATIC +#include "wlan_hal_msg.h" // it is needed to build qwptt static lib +#endif + +// Max NV fragment size +#define MAX_NV_BIN_SIZE 2000 + +enum +{ + PTT_STATUS_SUCCESS = 0, + PTT_STATUS_FAILURE = 1, + PTT_MAX_VAL = 0XFFFF, +}; +typedef tANI_U32 eQWPttStatus; + + +typedef PACKED_PRE struct PACKED_POST { + tANI_U16 drvMjr; + tANI_U16 drvMnr; + tANI_U16 drvPtch; + tANI_U16 drvBld; + tANI_U16 pttMax; + tANI_U16 pttMin; + //FwVersionInfo fwVer; +} sBuildReleaseParams; + +typedef PACKED_PRE struct PACKED_POST { + tANI_BOOLEAN agPktsDisabled; //802.11ag + tANI_BOOLEAN bPktsDisabled; //802.11b + tANI_BOOLEAN slrPktsDisabled; //deprecated in Riva + tANI_BOOLEAN n40PktsDisabled; //11N 40 + tANI_BOOLEAN ac80PktsDisabled; //11AC 80 + tANI_BOOLEAN rsvd; +} sRxTypesDisabled; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 totalRxPackets; + tANI_U32 totalMacRxPackets; + tANI_U32 totalMacFcsErrPackets; +} sRxFrameCounters; + + + + +/* GRAB RAM types */ +//TODO: Change Grab RAM interface as appropriate to Taurus +typedef enum { + GRAB_RAM_RXFIR, + GRAB_RAM_ADC, + GRAB_RAM_ADC_80, + GRAB_RAM_MAX_VAL = 0XFFFF, +} eGrabRamType; + +#define GRAB_RAM_SIZE 6000 +#define GRAB_RAM_SIZE_80MHZ_1_CHAIN 12000 + + + +/// Enum used to specify the trigger type for the aniGrabRam API +typedef enum eGramDumpTrigType { + eGRAM_DUMP_UNTRIGGERED, + eGRAM_DUMP_TRIG_ON_11A, + eGRAM_DUMP_TRIG_ON_11B, + eGRAM_DUMP_TRIG_ON_11A_OR_11B +} tGramDumpTrigType; + +typedef PACKED_PRE struct PACKED_POST { + //common to both transmit chains + eHalPhyRates rate; //current rate + ePhyChanBondState cbState; //current Channel bonded state + + tANI_U8 channelId; //current channel Id + tANI_U8 pwrTemplateIndex; //5-bit template index used for the current rate + tANI_U8 reserved[2]; + + //specific transmit chain power + tTxChainPower txChains[PHY_MAX_TX_CHAINS]; //output power for Tx chains +} tTxPowerReport; + +#define RXP_MAX_FILTER_IDX 64 + +typedef PACKED_PRE struct PACKED_POST +{ + uint32 rxpFilterForFTMPER[RXP_MAX_FILTER_IDX]; + uint32 max_pktlen; + uint32 flt_disable0; + uint32 flt_disable1; + uint32 config2; + uint32 push_wq_ctrl; + uint32 push_wq_ctrl2; + uint32 extra_frame_flt; +} sMACConfig; + + +typedef PACKED_PRE struct PACKED_POST { + /* + * The idea here is to store only those things which cannot be + * handled directly within the individual function calls. + * Most things will go straight to registers or come from registers. + */ + sPttFrameGenParams frameGenParams; + tANI_U8 payload[MAX_PAYLOAD_SIZE]; + + //Tx Waveform Gen Service + tANI_U16 numWfmSamples; + tANI_BOOLEAN wfmEnabled; + tANI_BOOLEAN wfmStored; + + //Tx Frame Power Service + tTxGain forcedTxGain[PHY_MAX_TX_CHAINS]; //use TXPWR_OVERRIDE for wfm, and fill gain table otherwise + tANI_U8 tpcPowerLut[PHY_MAX_TX_CHAINS][TPC_MEM_POWER_LUT_DEPTH]; + tTxGain tpcGainLut[PHY_MAX_TX_CHAINS][TPC_MEM_GAIN_LUT_DEPTH]; + + //Tx Frame Gen Service + tANI_BOOLEAN frameGenEnabled; + tANI_BOOLEAN phyDbgFrameGen; //this says use phyDbg for frames - leave this in place until we know that PhyDbg will suffice + + // for FTM PER feature + tANI_U8 tx_mode; + + tANI_BOOLEAN ftm_per_settings_saved; + + //Rx Gain Service + sRxChainsAgcEnable agcEnables; + + tANI_U32 *pADCCaptureCache; //pointer to allocate ADC capture cache + + //TX_TIMER adcRssiStatsTimer; //Create adc rssi stat collection timer + + sRxChainsRssi rssi; +} tPttModuleVariables; + +#ifdef WCN_PRONTO +extern sMACConfig macConfig; +#endif + +#endif /* PTTMODULE_H */ diff --git a/wcnss/riva/inc/pttMsgApi.h b/wcnss/riva/inc/pttMsgApi.h new file mode 100644 index 000000000000..e8a65cc0c962 --- /dev/null +++ b/wcnss/riva/inc/pttMsgApi.h @@ -0,0 +1,969 @@ +/* + * Copyright (c) 2013, The Linux Foundation. All rights reserved. + * + * Previously licensed under the ISC license by Qualcomm Atheros, Inc. + * + * + * Permission to use, copy, modify, and/or distribute this software for + * any purpose with or without fee is hereby granted, provided that the + * above copyright notice and this permission notice appear in all + * copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL + * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE + * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +/* + * This file was originally distributed by Qualcomm Atheros, Inc. + * under proprietary terms before Copyright ownership was assigned + * to the Linux Foundation. + */ + +/** + * + Airgo Networks, Inc proprietary. + All Rights Reserved, Copyright 2005 + This program is the confidential and proprietary product of Airgo Networks Inc. + Any Unauthorized use, reproduction or transfer of this program is strictly prohibited. + + + pttMsgApi.h: Contains messages to PTT Module for physical layer testing + Author: Mark Nelson + Date: 6/21/05 + + History - + Date Modified by Modification Information + -------------------------------------------------------------------------- + + */ + +#ifndef PTT_MSG_API_H +#define PTT_MSG_API_H + +#include "halCompiler.h" +#include "wlan_nv.h" +#include "wlan_phy.h" +#include "pttFrameGen.h" +#include "pttModule.h" + +#include "halLegacyPalTypes.h" + +typedef tANI_U8 tQWPTT_U8; +typedef tANI_S8 tQWPTT_S8; + +typedef tANI_U16 tQWPTT_U16; +typedef tANI_S16 tQWPTT_S16; + +typedef tANI_U32 tQWPTT_U32; +typedef tANI_S32 tQWPTT_S32; + +typedef tANI_U8 tQWPTT_BYTE; +typedef tANI_S9 tQWPTT_S9; + +typedef tANI_U8 tQWPTT_BOOLEAN; + +#define PTT_MEM_ACCESS_MAX_SIZE 256 + +//Messages to/from socket or pttApi.c +typedef enum { + PTT_MSG_TYPES_BEGIN = 0x3000, + + // Init + PTT_MSG_INIT = PTT_MSG_TYPES_BEGIN, //extra: internal only + +//NV Service + PTT_MSG_GET_TPC_CAL_STATE_OBSOLETE = 0x3011, + PTT_MSG_RESET_TPC_CAL_STATE_OBSOLETE = 0x3012, + + PTT_MSG_SET_NV_CKSUM_OBSOLETE = 0x3013, + PTT_MSG_GET_NV_CKSUM_OBSOLETE = 0x3014, + PTT_MSG_GET_NV_TABLE = 0x3016, + PTT_MSG_SET_NV_TABLE = 0x3017, + PTT_MSG_SET_NV_IMAGE_OBSOLETE = 0x3018, + PTT_MSG_BLANK_NV = 0x3019, + PTT_MSG_GET_NV_IMAGE_OBSOLETE = 0x301E, + PTT_MSG_DEL_NV_TABLE = 0x301F, + PTT_MSG_GET_NV_FIELD = 0x3020, + PTT_MSG_SET_NV_FIELD = 0x3021, + PTT_MSG_STORE_NV_TABLE = 0x3022, + PTT_MSG_SET_REG_DOMAIN = 0x3023, + +//new NV format Service + PTT_MSG_GET_NV_BIN = 0x3030, + PTT_MSG_SET_NV_BIN = 0x3031, + PTT_MSG_GET_DICTIONARY = 0x3032, + +//Device Register Access + PTT_MSG_DBG_READ_REGISTER = 0x3040, + PTT_MSG_DBG_WRITE_REGISTER = 0x3041, + PTT_MSG_API_WRITE_REGISTER_OBSOLETE = 0x3042, + PTT_MSG_API_READ_REGISTER_OBSOLETE = 0x3043, + PTT_MSG_DBG_READ_MEMORY = 0x3044, + PTT_MSG_DBG_WRITE_MEMORY = 0x3045, + +//Device MAC Test Setup + PTT_MSG_ENABLE_CHAINS = 0x304F, + PTT_MSG_SET_CHANNEL = 0x3050, + +//Tx Waveform Gen Service + PTT_MSG_SET_WAVEFORM = 0x3071, + PTT_MSG_SET_TX_WAVEFORM_GAIN = 0x3072, + PTT_MSG_GET_WAVEFORM_POWER_ADC = 0x3073, + PTT_MSG_START_WAVEFORM = 0x3074, + PTT_MSG_STOP_WAVEFORM = 0x3075, + PTT_MSG_SET_RX_WAVEFORM_GAIN = 0x3076, + PTT_MSG_SET_TX_WAVEFORM_GAIN_PRIMA_V1 = 0x3077, + +//Tx Frame Gen Service + PTT_MSG_CONFIG_TX_PACKET_GEN = 0x3081, + PTT_MSG_START_STOP_TX_PACKET_GEN = 0x3082, + PTT_MSG_POLL_TX_PACKET_PROGRESS_OBSOLETE = 0x3083, + PTT_MSG_FRAME_GEN_STOP_IND_OBSOLETE = 0x3088, + PTT_MSG_QUERY_TX_STATUS = 0x3089, + + +//Tx Frame Power Service + PTT_MSG_CLOSE_TPC_LOOP = 0x30A0, + +//open loop service + PTT_MSG_SET_PACKET_TX_GAIN_TABLE = 0x30A1, + PTT_MSG_SET_PACKET_TX_GAIN_INDEX = 0x30A2, + PTT_MSG_FORCE_PACKET_TX_GAIN = 0x30A3, + +//closed loop(CLPC) service + PTT_MSG_SET_PWR_INDEX_SOURCE = 0x30A4, + PTT_MSG_SET_TX_POWER = 0x30A5, + PTT_MSG_GET_TX_POWER_REPORT = 0x30A7, + PTT_MSG_SAVE_TX_PWR_CAL_TABLE_OBSOLETE = 0x30A8, + PTT_MSG_SET_POWER_LUT = 0x30A9, + PTT_MSG_GET_POWER_LUT = 0x30AA, + PTT_MSG_GET_PACKET_TX_GAIN_TABLE = 0x30AB, + PTT_MSG_SAVE_TX_PWR_FREQ_TABLE_OBSOLETE = 0x30AC, + PTT_MSG_CLPC_TEMP_COMPENSATION_OBSOLETE = 0x30AD, + +//Rx Gain Service + PTT_MSG_DISABLE_AGC_TABLES = 0x30D0, + PTT_MSG_ENABLE_AGC_TABLES = 0x30D1, + PTT_MSG_SET_AGC_TABLES_OBSOLETE = 0x30D2, + PTT_MSG_GET_RX_RSSI = 0x30D3, + PTT_MSG_GET_AGC_TABLE_OBSOLETE = 0x30D5, + +//Rx Frame Catcher Service + PTT_MSG_SET_RX_DISABLE_MODE = 0x30D4, + PTT_MSG_GET_RX_PKT_COUNTS = 0x30E0, + PTT_MSG_RESET_RX_PACKET_STATISTICS = 0x30E2, + PTT_MSG_GET_UNI_CAST_MAC_PKT_RX_RSSI = 0x30E3, + PTT_MSG_GET_UNI_CAST_MAC_PKT_RX_RSSI_CONFIG = 0x30E4, + +//Rx Symbol Service + PTT_MSG_GRAB_RAM = 0x30F0, + PTT_MSG_GRAB_RAM_ONE_CHAIN_OBSOLETE = 0x30F1, + +//Phy Calibration Service + PTT_MSG_RX_IQ_CAL = 0x3100, + PTT_MSG_RX_DCO_CAL = 0x3101, + PTT_MSG_TX_CARRIER_SUPPRESS_CAL = 0x3102, + PTT_MSG_TX_IQ_CAL = 0x3103, + PTT_MSG_EXECUTE_INITIAL_CALS = 0x3104, + PTT_MSG_HDET_CAL = 0x3105, + PTT_MSG_VCO_LINEARITY_CAL_OBSOLETE = 0x3106, + +//Phy Calibration Override Service + PTT_MSG_SET_TX_CARRIER_SUPPRESS_CORRECT = 0x3110, + PTT_MSG_GET_TX_CARRIER_SUPPRESS_CORRECT = 0x3111, + PTT_MSG_SET_TX_IQ_CORRECT = 0x3112, + PTT_MSG_GET_TX_IQ_CORRECT = 0x3113, + PTT_MSG_SET_RX_IQ_CORRECT = 0x3114, + PTT_MSG_GET_RX_IQ_CORRECT = 0x3115, + PTT_MSG_SET_RX_DCO_CORRECT = 0x3116, + PTT_MSG_GET_RX_DCO_CORRECT = 0x3117, + PTT_MSG_SET_TX_IQ_PHASE_NV_TABLE_OBSOLETE = 0x3118, + PTT_MSG_GET_HDET_CORRECT_OBSOLETE = 0x3119, + +//RF Chip Access + PTT_MSG_GET_TEMP_ADC = 0x3202, + PTT_MSG_READ_RF_REG = 0x3203, + PTT_MSG_WRITE_RF_REG = 0x3204, + PTT_MSG_GET_RF_VERSION = 0x3205, + +//Deep sleep support + PTT_MSG_DEEP_SLEEP = 0x3220, + PTT_MSG_READ_SIF_BAR4_REGISTER = 0x3221, + PTT_MSG_WRITE_SIF_BAR4_REGISTER = 0x3222, + PTT_MSG_ENTER_FULL_POWER = 0x3223, + +//Misc + PTT_MSG_SYSTEM_RESET = 0x32A0, //is there any meaning for this in Gen6? + PTT_MSG_LOG_DUMP = 0x32A1, + PTT_MSG_GET_BUILD_RELEASE_NUMBER = 0x32A2, + + +//Messages for Socket App + PTT_MSG_ADAPTER_DISABLED_RSP_OBSOLETE = 0x32A3, + PTT_MSG_ENABLE_ADAPTER = 0x32A4, + PTT_MSG_DISABLE_ADAPTER = 0x32A5, + PTT_MSG_PAUSE_RSP_OBSOLETE = 0x32A6, + PTT_MSG_CONTINUE_RSP_OBSOLETE = 0x32A7, + + PTT_MSG_HALPHY_INIT = 0x32A8, + PTT_MSG_TEST_RXIQ_CAL = 0x32A9, + PTT_MSG_START_TONE_GEN = 0x32AA, + PTT_MSG_STOP_TONE_GEN = 0x32AB, + PTT_MSG_RX_IM2_CAL = 0x32AC, + PTT_MSG_SET_RX_IM2_CORRECT = 0x31AD, + PTT_MSG_GET_RX_IM2_CORRECT = 0x31AE, + PTT_MSG_TEST_DPD_CAL = 0x32AF, // not handle + PTT_MSG_SET_CALCONTROL_BITMAP = 0x32B0, + +//[RY] specific new messages for PRIMA + PTT_MSG_START_WAVEFORM_RF = 0x32B1, + PTT_MSG_STOP_WAVEFORM_RF = 0x32B2, + PTT_MSG_HKDAC_TX_IQ_CAL = 0x32B3, + PTT_MSG_SET_HKADC_TX_IQ_CORRECT = 0x32B4, + PTT_MSG_GET_HKADC_TX_IQ_CORRECT = 0x32B5, + PTT_MSG_SET_DPD_CORRECT = 0x32B6, + PTT_MSG_GET_DPD_CORRECT = 0x32B7, + PTT_MSG_SET_WAVEFORM_RF = 0x32B8, + PTT_MSG_LNA_BAND_CAL = 0x32B9, + PTT_MSG_GET_LNA_BAND_CORRECT = 0x32BA, + PTT_MSG_SET_LNA_BAND_CORRECT = 0x32BB, + PTT_MSG_DPD_CAL = 0x32BC, + +// Suffix'ed Message ID to differential from existing Message name. +// =============================================================== + PTT_MSG_GET_NV_TABLE_PRIMA_V1 = 0x32BD, + PTT_MSG_SET_NV_TABLE_PRIMA_V1 = 0x32BE, + PTT_MSG_RX_IQ_CAL_PRIMA_V1 = 0x32BF, + PTT_MSG_TX_IQ_CAL_PRIMA_V1 = 0x32C0, + PTT_MSG_SET_TX_IQ_CORRECT_PRIMA_V1 = 0x32C1, + PTT_MSG_GET_TX_IQ_CORRECT_PRIMA_V1 = 0x32C2, + PTT_MSG_SET_RX_IQ_CORRECT_PRIMA_V1 = 0x32C3, + PTT_MSG_GET_RX_IQ_CORRECT_PRIMA_V1 = 0x32C4, + PTT_MSG_START_WAVEFORM_PRIMA_V1 = 0x32C5, + PTT_MSG_FORCE_PACKET_TX_GAIN_PRIMA_V1 = 0x32C6, + PTT_MSG_CLPC_CAL_SETUP_PRIMA_V1 = 0x32C7, + PTT_MSG_CLPC_CAL_RESTORE_PRIMA_V1 = 0x32C8, + PTT_MSG_CLOSE_TPC_LOOP_PRIMA_V1 = 0x32C9, + PTT_MSG_SW_CLPC_CAL_PRIMA_V1 = 0x32CA, + PTT_MSG_CLPC_CAL_EXTRA_MEASUREMENT_PRIMA_V1 = 0x32CB, + PTT_MSG_PRIMA_GENERIC_CMD = 0x32CC, + PTT_MSG_DIGITAL_PIN_CONNECTIVITY_TEST_RES = 0X32CD, + + PTT_MSG_EXIT = 0x32ff, + PTT_MAX_MSG_ID = PTT_MSG_EXIT +} ePttMsgId; + +enum +{ + PTT_MSG_PRIMA_GENERIC_CMD_FAST_SET_CHANNEL = 0x0, +}; + +#define PTT_MSG_TYPES_BEGIN_30 PTT_MSG_TYPES_BEGIN +#define PTT_MSG_TYPES_BEGIN_31 PTT_MSG_TYPES_BEGIN + 0x100 +#define PTT_MSG_TYPES_BEGIN_32 PTT_MSG_TYPES_BEGIN + 0x200 + +// for FTM PER feature +enum { +Legacy_FTM = 0, +FTM_PER_TX = 1, +FTM_PER_RX = 2, +}; + +#ifndef tANI_BOOLEAN +#define tANI_BOOLEAN tANI_U8 +#endif + + + +/****************************************************************************************************************** + PTT MESSAGES +******************************************************************************************************************/ +//Init +typedef PACKED_PRE struct PACKED_POST { + tPttModuleVariables ptt; +} tMsgPttMsgInit; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 tableSize; + tANI_U32 chunkSize; + eNvTable nvTable; +} tMsgPttGetNvTable; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 tableSize; + tANI_U32 chunkSize; + eNvTable nvTable; +} tMsgPttSetNvTable; + +typedef PACKED_PRE struct PACKED_POST { + eNvTable nvTable; +} tMsgPttDelNvTable; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 notUsed; +} tMsgPttBlankNv; + +typedef PACKED_PRE struct PACKED_POST { + eNvField nvField; + uNvFields fieldData; +} tMsgPttGetNvField; + +typedef PACKED_PRE struct PACKED_POST { + eNvField nvField; + uNvFields fieldData; +} tMsgPttSetNvField; + +typedef PACKED_PRE struct PACKED_POST { + eNvTable nvTable; +} tMsgPttStoreNvTable; + +typedef PACKED_PRE struct PACKED_POST { + eRegDomainId regDomainId; +} tMsgPttSetRegDomain; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 tableSize; + tANI_U32 chunkSize; + eNvTable nvTable; + tANI_U8 nvData[MAX_NV_BIN_SIZE]; +} tMsgPttGetNvBin; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 tableSize; + tANI_U32 chunkSize; + eNvTable nvTable; + tANI_U8 nvData[MAX_NV_BIN_SIZE]; +} tMsgPttSetNvBin; + +//Device Register Access +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 regAddr; + tANI_U32 regValue; +} tMsgPttDbgReadRegister; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 regAddr; + tANI_U32 regValue; +} tMsgPttDbgWriteRegister; + +#define PTT_READ_MEM_MAX 512 +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 memAddr; + tANI_U32 nBytes; + tANI_U32 pMemBuf[PTT_READ_MEM_MAX]; //caller should allocate space +} tMsgPttDbgReadMemory; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 memAddr; + tANI_U32 nBytes; + tANI_U32 pMemBuf[PTT_READ_MEM_MAX]; +} tMsgPttDbgWriteMemory; + +//Device MAC Test Setup +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 chId; + ePhyChanBondState cbState; +} tMsgPttSetChannel; + +typedef PACKED_PRE struct PACKED_POST { + ePhyChainSelect chainSelect; +} tMsgPttEnableChains; + +typedef tIQSamples tWaveformSample; + +//Tx Waveform Gen Service +typedef PACKED_PRE struct PACKED_POST { + tWaveformSample waveform[MAX_TEST_WAVEFORM_SAMPLES]; + tANI_U16 numSamples; + tANI_BOOLEAN clk80; + tANI_U8 reserved[1]; +} tMsgPttSetWaveform; + +typedef PACKED_PRE struct PACKED_POST { + ePhyTxChains txChain; + tANI_U8 gain; +} tMsgPttSetTxWaveformGain; + +typedef PACKED_PRE struct PACKED_POST { + ePhyTxChains txChain; + tANI_U32 gain; +} tMsgPttSetTxWaveformGain_PRIMA_V1; + +typedef PACKED_PRE struct PACKED_POST { + ePhyRxChains rxChain; + tANI_U8 gain; +} tMsgPttSetRxWaveformGain; + +typedef PACKED_PRE struct PACKED_POST { + sTxChainsPowerAdcReadings txPowerAdc; +} tMsgPttGetWaveformPowerAdc; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 notUsed; +} tMsgPttStopWaveform; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 notUsed; +} tMsgPttClpcCalSetup_PRIMA_V1; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U16 setup_measure; + tANI_U16 setup_txDmdPwrOffset; + tANI_U16 measure_totalExtraPt; + tANI_U16 measure_currentMeasurePtIdx; + tANI_U8 plut[256]; +} tMsgPttClpcCalExtraMeasurement_PRIMA_V1; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 notUsed; +} tMsgPttClpcCalRestore_PRIMA_V1; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 startIndex; + tANI_U32 numSamples; +} tMsgPttStartWaveform; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 startIndex; + tANI_U32 numSamples; +} tMsgPttStartWaveform_PRIMA_V1; + +// Added for PRIMA +typedef PACKED_PRE struct PACKED_POST { + tWaveformSample waveform[MAX_TEST_WAVEFORM_SAMPLES]; + tANI_U16 numSamples; + tANI_BOOLEAN clk80; + tANI_U8 reserved[1]; +} tMsgPttSetWaveformRF; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 startIndex; + tANI_U32 numSamples; +} tMsgPttStartWaveformRF; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 notUsed; +} tMsgPttStopWaveformRF; + +//Tx Frame Gen Service +typedef PACKED_PRE struct PACKED_POST { + sPttFrameGenParams frameParams; +} tMsgPttConfigTxPacketGen; + +typedef PACKED_PRE struct PACKED_POST { + tANI_BOOLEAN startStop; + tANI_U8 reserved[3]; +} tMsgPttStartStopTxPacketGen; + +typedef PACKED_PRE struct PACKED_POST { + sTxFrameCounters numFrames; + tANI_BOOLEAN status; + tANI_U8 reserved[3]; +} tMsgPttQueryTxStatus; + +//Tx Frame Power Service +typedef PACKED_PRE struct PACKED_POST { + tANI_BOOLEAN tpcClose; + tANI_U8 reserved[3]; +} tMsgPttCloseTpcLoop; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 tpcClose; +} tMsgPttCloseTpcLoop_PRIMA_V1; + + + //open loop service +typedef PACKED_PRE struct PACKED_POST { + + ePhyTxChains txChain; + tANI_U8 minIndex; + tANI_U8 maxIndex; + tANI_U8 reserved[2]; + tANI_U8 gainTable[TPC_MEM_GAIN_LUT_DEPTH]; +} tMsgPttSetPacketTxGainTable; + +typedef PACKED_PRE struct PACKED_POST { + ePhyTxChains txChain; + tANI_U8 gainTable[TPC_MEM_GAIN_LUT_DEPTH]; +} tMsgPttGetPacketTxGainTable; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U8 index; + tANI_U8 reserved[3]; +} tMsgPttSetPacketTxGainIndex; + +typedef PACKED_PRE struct PACKED_POST { + ePhyTxChains txChain; + tANI_U8 gain; + tANI_U8 reserved[3]; +} tMsgPttForcePacketTxGain; + +typedef PACKED_PRE struct PACKED_POST { + ePhyTxChains txChain; + tANI_U32 gain; +} tMsgPttForcePacketTxGain_PRIMA_V1; + + +typedef PACKED_PRE struct PACKED_POST { + ePowerTempIndexSource indexSource; +} tMsgPttSetPwrIndexSource; + +typedef PACKED_PRE struct PACKED_POST { + t2Decimal dbmPwr; + tANI_U8 reserved[2]; +} tMsgPttSetTxPower; + +typedef tTxPowerReport tMsgPttGetTxPowerReport; + +typedef PACKED_PRE struct PACKED_POST { + ePhyTxChains txChain; + + tANI_U8 minIndex; + tANI_U8 maxIndex; + tANI_U8 reserved[2]; + + tANI_U8 powerLut[TPC_MEM_POWER_LUT_DEPTH]; +} tMsgPttSetPowerLut; + +typedef PACKED_PRE struct PACKED_POST { + ePhyTxChains txChain; + + tANI_U8 powerLut[TPC_MEM_POWER_LUT_DEPTH]; +} tMsgPttGetPowerLut; + + +//Rx Gain Service +typedef PACKED_PRE struct PACKED_POST { + sRxChainsAgcDisable gains; +} tMsgPttDisableAgcTables; + + +typedef PACKED_PRE struct PACKED_POST { + sRxChainsAgcEnable enables; +} tMsgPttEnableAgcTables; + +typedef PACKED_PRE struct PACKED_POST { + sRxChainsRssi rssi; +} tMsgPttGetRxRssi; + +typedef PACKED_PRE struct PACKED_POST { + sRxChainsRssi rssi; +}tMsgPttGetUnicastMacPktRxRssi; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 conf; +}tMsgPttGetUnicastMacPktRxRssiConf_PRIMA_V1; + +//Rx Frame Catcher Service +typedef PACKED_PRE struct PACKED_POST { + sRxTypesDisabled disabled; +} tMsgPttSetRxDisableMode; + +typedef PACKED_PRE struct PACKED_POST { + sRxFrameCounters counters; +} tMsgPttGetRxPktCounts; + + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 notUsed; +} tMsgPttResetRxPacketStatistics; + + + + + +//ADC Sample Service +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 startSample; //index of first requested sample, 0 causes new capture + tANI_U32 numSamples; //number of samples to transfer to host + eGrabRamSampleType sampleType; + tGrabRamSample grabRam[MAX_REQUESTED_GRAB_RAM_SAMPLES]; +} tMsgPttGrabRam; + + +//Phy Calibration Service +typedef PACKED_PRE struct PACKED_POST { + sRxChainsIQCalValues calValues; + eGainSteps gain; +} tMsgPttRxIqCal; + +typedef PACKED_PRE struct PACKED_POST { + tRxChainsDcoCorrections calValues; + tANI_U8 gain; +} tMsgPttRxDcoCal; + +typedef PACKED_PRE struct PACKED_POST { + tRxChainsIm2Corrections calValues; + eGainSteps gain; + tANI_U8 im2CalOnly; +} tMsgPttRxIm2Cal; + +typedef PACKED_PRE struct PACKED_POST { + sTxChainsLoCorrections calValues; + tANI_U8 reserve[2]; + eGainSteps gain; +} tMsgPttTxCarrierSuppressCal; + +typedef PACKED_PRE struct PACKED_POST { + sTxChainsIQCalValues calValues; + tANI_U8 reserve[2]; + eGainSteps gain; +} tMsgPttTxIqCal; + +typedef PACKED_PRE struct PACKED_POST { + sTxChainsHKIQCalValues calValues; + eGainSteps gain; +} tMsgPttHKdacTxIqCal; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 unused; +} tMsgPttExecuteInitialCals; + +typedef PACKED_PRE struct PACKED_POST { + sRfHdetCalValues hdetCalValues; +} tMsgPttHdetCal; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U16 clpcMode; + tANI_U16 txCmdPwr; + tANI_U16 pwrMax_pwrMin; + tANI_U16 step; + tANI_U8 plut[256]; +} tMsgPttClpcSwCal_PRIMA_V1; + + +//Phy Calibration Override Service +typedef PACKED_PRE struct PACKED_POST { + sTxChainsLoCorrections calValues; + tANI_U8 reserve[2]; + eGainSteps gain; +} tMsgPttSetTxCarrierSuppressCorrect; + +typedef PACKED_PRE struct PACKED_POST { + sTxChainsLoCorrections calValues; + tANI_U8 reserve[2]; + eGainSteps gain; +} tMsgPttGetTxCarrierSuppressCorrect; + +typedef PACKED_PRE struct PACKED_POST { + sTxChainsIQCalValues calValues; + tANI_U8 reserve[2]; + eGainSteps gain; +} tMsgPttSetTxIqCorrect; + +typedef PACKED_PRE struct PACKED_POST { + sTxChainsIQCalValues calValues; + tANI_U8 reserve[2]; + eGainSteps gain; +} tMsgPttGetTxIqCorrect; + +typedef PACKED_PRE struct PACKED_POST { + sTxChainsHKIQCalValues calValues; + eGainSteps gain; +} tMsgPttHKdacSetTxIqCorrect; + +typedef PACKED_PRE struct PACKED_POST { + sTxChainsHKIQCalValues calValues; + eGainSteps gain; +} tMsgPttHKdacGetTxIqCorrect; + +typedef PACKED_PRE struct PACKED_POST { + sRxChainsIQCalValues calValues; + eGainSteps gain; +} tMsgPttSetRxIqCorrect; + +typedef PACKED_PRE struct PACKED_POST { + sRxChainsIQCalValues calValues; + eGainSteps gain; +} tMsgPttGetRxIqCorrect; + +typedef PACKED_PRE struct PACKED_POST { + tRxChainsDcoCorrections calValues; + tANI_U8 gain; +} tMsgPttSetRxDcoCorrect; + +typedef PACKED_PRE struct PACKED_POST { + tRxChainsDcoCorrections calValues; + tANI_U8 gain; +} tMsgPttGetRxDcoCorrect; + +typedef PACKED_PRE struct PACKED_POST { + tRxChainsIm2Corrections calValues; + tANI_U8 dummy; +} tMsgPttSetRxIm2Correct; + +typedef PACKED_PRE struct PACKED_POST { + tRxChainsIm2Corrections calValues; + tANI_U8 dummy; +} tMsgPttGetRxIm2Correct; + +typedef PACKED_PRE struct PACKED_POST { + eRfTempSensor tempSensor; + tTempADCVal tempAdc; + tANI_U8 reserved[4 - sizeof(tTempADCVal)]; +} tMsgPttGetTempAdc; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 addr; + tANI_U32 mask; + tANI_U32 shift; + tANI_U32 value; +} tMsgPttReadRfField; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 addr; + tANI_U32 mask; + tANI_U32 shift; + tANI_U32 value; +} tMsgPttWriteRfField; + +//SIF bar4 Register Access +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 sifRegAddr; + tANI_U32 sifRegValue; +} tMsgPttReadSifBar4Register; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 sifRegAddr; + tANI_U32 sifRegValue; +} tMsgPttWriteSifBar4Register; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 notUsed; +} tMsgPttDeepSleep; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 notUsed; +} tMsgPttEnterFullPower; + +//Misc. +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 notUsed; +} tMsgPttSystemReset; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 cmd; + tANI_U32 arg1; + tANI_U32 arg2; + tANI_U32 arg3; + tANI_U32 arg4; +} tMsgPttLogDump; + +typedef PACKED_PRE struct PACKED_POST { + sBuildReleaseParams relParams; +} tMsgPttGetBuildReleaseNumber; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 revId; +} tMsgPttGetRFVersion; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 option; //dummy variable +} tMsgPttCalControlBitmap; + +//#ifdef VERIFY_HALPHY_SIMV_MODEL + + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 option; //dummy variable +} tMsgPttHalPhyInit; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 option; //dummy variable +} tMsgPttRxIQTest; + +typedef PACKED_PRE struct PACKED_POST { + sTxChainsDPDCalValues calValues; + eGainSteps gain; +} tMsgPttDpdCal; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U8 lutIdx; + tANI_U8 band; +} tMsgPttStartToneGen; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U32 option; //dummy variable +} tMsgPttStopToneGen; + +typedef PACKED_PRE struct PACKED_POST { + sTxChainsLnaBandCalValues calValues; + eGainSteps gain; +} tMsgPttLnaBandCal; + +typedef PACKED_PRE struct PACKED_POST { + sTxChainsLnaBandCalValues calValues; + eGainSteps gain; +} tMsgPttGetLnaBandCalCorrect; + +typedef PACKED_PRE struct PACKED_POST { + sTxChainsLnaBandCalValues calValues; + eGainSteps gain; +} tMsgPttSetLnaBandCalCorrect; + +typedef PACKED_PRE struct PACKED_POST { + sTxChainsDPDCalValues calValues; + eGainSteps gain; +}tMsgPttSetDPDCorrect; + +typedef PACKED_PRE struct PACKED_POST { + sTxChainsDPDCalValues calValues; + eGainSteps gain; +}tMsgPttGetDPDCorrect; + +typedef PACKED_PRE struct PACKED_POST { + tQWPTT_U32 cmdIdx; + tQWPTT_U32 param1; + tQWPTT_U32 param2; + tQWPTT_U32 param3; + tQWPTT_U32 param4; +} tMsgPttPrimaGenericCmd; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U16 testID; + tANI_U16 result; +} tMsgPttPinConnTestRes; +//#endif + +/****************************************************************************************************************** + END OF PTT MESSAGES +******************************************************************************************************************/ + +typedef PACKED_PRE union PACKED_POST pttMsgUnion{ +//typedef union pttMsgUnion { + tMsgPttMsgInit MsgInit; + tMsgPttGetNvTable GetNvTable; + tMsgPttSetNvTable SetNvTable; + tMsgPttDelNvTable DelNvTable; + tMsgPttBlankNv BlankNv; + tMsgPttStoreNvTable StoreNvTable; + tMsgPttSetRegDomain SetRegDomain; + tMsgPttGetNvField GetNvField; + tMsgPttSetNvField SetNvField; + tMsgPttGetNvBin GetNvBin; + tMsgPttSetNvBin SetNvBin; + tMsgPttDbgReadRegister DbgReadRegister; + tMsgPttDbgWriteRegister DbgWriteRegister; + tMsgPttDbgReadMemory DbgReadMemory; + tMsgPttDbgWriteMemory DbgWriteMemory; + tMsgPttEnableChains EnableChains; + tMsgPttSetChannel SetChannel; + tMsgPttSetWaveform SetWaveform; + tMsgPttSetTxWaveformGain SetTxWaveformGain; + tMsgPttSetTxWaveformGain_PRIMA_V1 SetTxWaveformGain_PRIMA_V1; + tMsgPttGetWaveformPowerAdc GetWaveformPowerAdc; + tMsgPttStartWaveform StartWaveform; + tMsgPttStartWaveform_PRIMA_V1 StartWaveform_PRIMA_V1; + tMsgPttStopWaveform StopWaveform; + tMsgPttSetRxWaveformGain SetRxWaveformGain; + tMsgPttConfigTxPacketGen ConfigTxPacketGen; + tMsgPttStartStopTxPacketGen StartStopTxPacketGen; + tMsgPttQueryTxStatus QueryTxStatus; + tMsgPttCloseTpcLoop CloseTpcLoop; + tMsgPttCloseTpcLoop_PRIMA_V1 CloseTpcLoop_PRIMA_V1; + tMsgPttSetPacketTxGainTable SetPacketTxGainTable; + tMsgPttGetPacketTxGainTable GetPacketTxGainTable; + tMsgPttSetPacketTxGainIndex SetPacketTxGainIndex; + tMsgPttForcePacketTxGain ForcePacketTxGain; + tMsgPttForcePacketTxGain_PRIMA_V1 ForcePacketTxGain_PRIMA_V1; + tMsgPttSetPwrIndexSource SetPwrIndexSource; + tMsgPttSetTxPower SetTxPower; + tMsgPttGetTxPowerReport GetTxPowerReport; + tMsgPttSetPowerLut SetPowerLut; + tMsgPttGetPowerLut GetPowerLut; + tMsgPttDisableAgcTables DisableAgcTables; + tMsgPttEnableAgcTables EnableAgcTables; + tMsgPttGetRxRssi GetRxRssi; + tMsgPttGetUnicastMacPktRxRssi GetUnicastMacPktRxRssi; + tMsgPttGetUnicastMacPktRxRssiConf_PRIMA_V1 GetUnicastMacPktRxRssiConf_PRIMA_V1; + tMsgPttSetRxDisableMode SetRxDisableMode; + tMsgPttGetRxPktCounts GetRxPktCounts; + tMsgPttResetRxPacketStatistics ResetRxPacketStatistics; + tMsgPttGrabRam GrabRam; + tMsgPttRxIqCal RxIqCal; + tMsgPttRxDcoCal RxDcoCal; + tMsgPttRxIm2Cal RxIm2Cal; + + tMsgPttExecuteInitialCals ExecuteInitialCals; + tMsgPttTxCarrierSuppressCal TxCarrierSuppressCal; + tMsgPttTxIqCal TxIqCal; + tMsgPttHKdacTxIqCal HKdacTxIqCal; + tMsgPttClpcCalSetup_PRIMA_V1 ClpcCalSetup_PRIMA_V1; + tMsgPttClpcCalRestore_PRIMA_V1 ClpcCalRestore_PRIMA_V1; + tMsgPttHdetCal HdetCal; + tMsgPttClpcSwCal_PRIMA_V1 ClpcSwCal_PRIMA_V1; + tMsgPttClpcCalExtraMeasurement_PRIMA_V1 ClpcCalExtraMeasurement_PRIMA_V1; + tMsgPttSetTxCarrierSuppressCorrect SetTxCarrierSuppressCorrect; + tMsgPttGetTxCarrierSuppressCorrect GetTxCarrierSuppressCorrect; + tMsgPttSetTxIqCorrect SetTxIqCorrect; + tMsgPttGetTxIqCorrect GetTxIqCorrect; + tMsgPttSetRxIqCorrect SetRxIqCorrect; + tMsgPttGetRxIqCorrect GetRxIqCorrect; + tMsgPttSetRxDcoCorrect SetRxDcoCorrect; + tMsgPttGetRxDcoCorrect GetRxDcoCorrect; + tMsgPttSetRxIm2Correct SetRxIm2Correct; + tMsgPttGetRxIm2Correct GetRxIm2Correct; + tMsgPttHKdacSetTxIqCorrect HKdacSetTxIqCorrect; + tMsgPttHKdacGetTxIqCorrect HKdacGetTxIqCorrect; + + tMsgPttGetTempAdc GetTempAdc; + tMsgPttReadRfField ReadRfField; + tMsgPttWriteRfField WriteRfField; + tMsgPttCalControlBitmap SetCalControlBitmap; + +//#ifdef VERIFY_HALPHY_SIMV_MODEL + + tMsgPttHalPhyInit InitOption; + tMsgPttRxIQTest RxIQTest; + tMsgPttDpdCal DpdCal; + tMsgPttStartToneGen StartToneGen; + tMsgPttStopToneGen StopToneGen; +//#endif + tMsgPttDeepSleep DeepSleep; + tMsgPttReadSifBar4Register ReadSifBar4Register; + tMsgPttWriteSifBar4Register WriteSifBar4Register; + tMsgPttEnterFullPower EnterFullPower; + tMsgPttSystemReset SystemReset; + tMsgPttLogDump LogDump; + tMsgPttGetBuildReleaseNumber GetBuildReleaseNumber; + tMsgPttGetRFVersion GetRFVersion; + +//[RY] added for PRIMA + tMsgPttSetWaveformRF SetWaveformRF; + tMsgPttStopWaveformRF StopWaveformRF; + tMsgPttStartWaveformRF StartWaveformRF; + tMsgPttLnaBandCal LnaBandCal; + tMsgPttGetLnaBandCalCorrect GetLnaBandCalCorrect; + tMsgPttSetLnaBandCalCorrect SetLnaBandCalCorrect; + tMsgPttGetDPDCorrect GetDPDCorrect; + tMsgPttSetDPDCorrect SetDPDCorrect; + tMsgPttDpdCal DPDCal; + tMsgPttPrimaGenericCmd PrimaGenericCmd; + tMsgPttPinConnTestRes PinConnTestRes; +} uPttMsgs; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U16 msgId; + tANI_U16 msgBodyLength; //actually, the length of all the fields in this structure + eQWPttStatus msgResponse; + uPttMsgs msgBody; +} tPttMsgbuffer, *tpPttMsgbuffer; + + +typedef PACKED_PRE struct PACKED_POST { + /* + * success or failure + */ + tANI_U32 status; + tPttMsgbuffer pttMsgBuffer; +} tProcessPttRspParams, *tpProcessPttRspParams; + +/* End of Ptt Parameters */ + +#endif diff --git a/wcnss/riva/inc/wlan_hal_cfg.h b/wcnss/riva/inc/wlan_hal_cfg.h new file mode 100644 index 000000000000..9e64c03043e5 --- /dev/null +++ b/wcnss/riva/inc/wlan_hal_cfg.h @@ -0,0 +1,938 @@ +/* + * Copyright (c) 2013, The Linux Foundation. All rights reserved. + * + * Previously licensed under the ISC license by Qualcomm Atheros, Inc. + * + * + * Permission to use, copy, modify, and/or distribute this software for + * any purpose with or without fee is hereby granted, provided that the + * above copyright notice and this permission notice appear in all + * copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL + * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE + * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +/* + * This file was originally distributed by Qualcomm Atheros, Inc. + * under proprietary terms before Copyright ownership was assigned + * to the Linux Foundation. + */ + +/*========================================================================== + * + * @file: wlan_hal_cfg.h + * + * @brief: Exports and types WLAN HAL configuration + * + * @author: Kumar Anand + * + * Copyright (C) 2010, Qualcomm Technologies, Inc. + * All rights reserved. + * + *=========================================================================*/ + +#ifndef __WLAN_HAL_CFG_H__ +#define __WLAN_HAL_CFG_H__ + +/*------------------------------------------------------------------------- + Include Files +-------------------------------------------------------------------------*/ +#include "qwlanfw_defs.h" + +/*------------------------------------------------------------------------- + Preprocessor definitions and constants +-------------------------------------------------------------------------*/ +/* RIVA API version in format W.X.Y.Z is converted to a UINT32 integer */ +#define WLAN_HAL_CONSTRUCT_API_VERSION(W,X,Y,Z) (((W)<<24)+((X)<<16)+((Y)<<8)+(Z)) +#define IS_VERSION_BEFORE_VOWIFI(VER_FROM_HOST) \ + ((VER_FROM_HOST)<=WLAN_HAL_CONSTRUCT_API_VERSION(0,0,2,0))?1:0 + +/*------------------------------------------------------------------------- + Configuration Parameter IDs +-------------------------------------------------------------------------*/ +#define QWLAN_HAL_CFG_STA_ID 0 +#define QWLAN_HAL_CFG_CURRENT_TX_ANTENNA 1 +#define QWLAN_HAL_CFG_CURRENT_RX_ANTENNA 2 +#define QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE 3 +#define QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN 4 +#define QWLAN_HAL_CFG_CAL_PERIOD 5 +#define QWLAN_HAL_CFG_CAL_CONTROL 6 +#define QWLAN_HAL_CFG_PROXIMITY 7 +#define QWLAN_HAL_CFG_NETWORK_DENSITY 8 +#define QWLAN_HAL_CFG_MAX_MEDIUM_TIME 9 +#define QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU 10 +#define QWLAN_HAL_CFG_RTS_THRESHOLD 11 +#define QWLAN_HAL_CFG_SHORT_RETRY_LIMIT 12 +#define QWLAN_HAL_CFG_LONG_RETRY_LIMIT 13 +#define QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD 14 +#define QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO 15 +#define QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE 16 +#define QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO 17 +#define QWLAN_HAL_CFG_FIXED_RATE 18 +#define QWLAN_HAL_CFG_RETRYRATE_POLICY 19 +#define QWLAN_HAL_CFG_RETRYRATE_SECONDARY 20 +#define QWLAN_HAL_CFG_RETRYRATE_TERTIARY 21 +#define QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION 22 +#define QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ 23 +#define QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ 24 +#define QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ 25 +#define QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ 26 +#define QWLAN_HAL_CFG_MAX_BA_SESSIONS 27 +#define QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT 28 +#define QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER 29 +#define QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR 30 +#define QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE 31 +#define QWLAN_HAL_CFG_STATS_PERIOD 32 +#define QWLAN_HAL_CFG_CFP_MAX_DURATION 33 +#define QWLAN_HAL_CFG_FRAME_TRANS_ENABLED 34 +#define QWLAN_HAL_CFG_DTIM_PERIOD 35 +#define QWLAN_HAL_CFG_EDCA_WMM_ACBK 36 +#define QWLAN_HAL_CFG_EDCA_WMM_ACBE 37 +#define QWLAN_HAL_CFG_EDCA_WMM_ACVO 38 +#define QWLAN_HAL_CFG_EDCA_WMM_ACVI 39 +#define QWLAN_HAL_CFG_BA_THRESHOLD_HIGH 40 +#define QWLAN_HAL_CFG_MAX_BA_BUFFERS 41 +#define QWLAN_HAL_CFG_RPE_POLLING_THRESHOLD 42 +#define QWLAN_HAL_CFG_RPE_AGING_THRESHOLD_FOR_AC0_REG 43 +#define QWLAN_HAL_CFG_RPE_AGING_THRESHOLD_FOR_AC1_REG 44 +#define QWLAN_HAL_CFG_RPE_AGING_THRESHOLD_FOR_AC2_REG 45 +#define QWLAN_HAL_CFG_RPE_AGING_THRESHOLD_FOR_AC3_REG 46 +#define QWLAN_HAL_CFG_NO_OF_ONCHIP_REORDER_SESSIONS 47 +#define QWLAN_HAL_CFG_PS_LISTEN_INTERVAL 48 +#define QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD 49 +#define QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER 50 +#define QWLAN_HAL_CFG_PS_MAX_PS_POLL 51 +#define QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD 52 +#define QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD 53 +#define QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE 54 +#define QWLAN_HAL_CFG_PS_IGNORE_DTIM 55 +#define QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM 56 +#define QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE 57 +#define QWLAN_HAL_CFG_PS_NULLDATA_AP_RESP_TIMEOUT 58 +#define QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN 59 +#define QWLAN_HAL_CFG_TELE_BCN_TRANS_LI 60 +#define QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS 61 +#define QWLAN_HAL_CFG_TELE_BCN_MAX_LI 62 +#define QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS 63 +#define QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE 64 +#define QWLAN_HAL_CFG_VALID_RADAR_CHANNEL_LIST 65 +#define QWLAN_HAL_CFG_TX_POWER_24_20 66 +#define QWLAN_HAL_CFG_TX_POWER_24_40 67 +#define QWLAN_HAL_CFG_TX_POWER_50_20 68 +#define QWLAN_HAL_CFG_TX_POWER_50_40 69 +#define QWLAN_HAL_CFG_MCAST_BCAST_FILTER_SETTING 70 +#define QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL 71 +#define QCOM_WLAN_CFG_MAX_TX_POWER_2_4 72 +#define QCOM_WLAN_CFG_MAX_TX_POWER_5 73 +#define QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD 74 +#define QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP 75 +#define QWLAN_HAL_CFG_BTC_EXECUTION_MODE 76 +#define QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK 77 +#define QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS 78 +#define QWLAN_HAL_CFG_PS_TX_INACTIVITY_TIMEOUT 79 +#define QWLAN_HAL_CFG_WCNSS_API_VERSION 80 +#define QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT 81 +#define QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT 82 +#define QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST 83 +#define QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT 84 +#define QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT 85 +#define QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT 86 +#define QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT 87 +#define QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN 88 +#define QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN 89 +#define QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN 90 +#define QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN 91 +#define QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT 92 +#define QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN 93 +#define QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC 94 +#define QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP 95 +#define QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO 96 +#define QWLAN_HAL_CFG_ENABLE_UNICAST_FILTER 97 +#define QWLAN_HAL_CFG_MAX_ASSOC_LIMIT 98 +#define QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION 99 +#define QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER 100 +#define QWLAN_HAL_CFG_ENABLE_DETECT_PS_SUPPORT 101 +#define QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT 102 +#define QWLAN_HAL_CFG_BTC_DWELL_TIME_MULTIPLIER 103 +#define QWLAN_HAL_CFG_ENABLE_TDLS_OXYGEN_MODE 104 +#define QWLAN_HAL_CFG_ENABLE_NAT_KEEP_ALIVE_FILTER 105 +#define QWLAN_HAL_CFG_ENABLE_SAP_OBSS_PROT 106 +#define QWLAN_HAL_CFG_PSPOLL_DATA_RECEP_TIMEOUT 107 +#define QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE 108 +#define QWLAN_HAL_CFG_TDLS_PUAPSD_MASK 109 +#define QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME 110 +#define QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP 111 +#define QWLAN_HAL_CFG_ANTENNA_DIVERSITY 112 +#define QWLAN_HAL_CFG_ATH_DISABLE 113 +#define QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR 114 +#define QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE 115 +#define QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE 116 +#define QWLAN_HAL_CFG_MWS_COEX_V1_WAN_FREQ 117 +#define QWLAN_HAL_CFG_MWS_COEX_V1_WLAN_FREQ 118 +#define QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG 119 +#define QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG2 120 +#define QWLAN_HAL_CFG_MWS_COEX_V2_WAN_FREQ 121 +#define QWLAN_HAL_CFG_MWS_COEX_V2_WLAN_FREQ 122 +#define QWLAN_HAL_CFG_MWS_COEX_V2_CONFIG 123 +#define QWLAN_HAL_CFG_MWS_COEX_V2_CONFIG2 124 +#define QWLAN_HAL_CFG_MWS_COEX_V3_WAN_FREQ 125 +#define QWLAN_HAL_CFG_MWS_COEX_V3_WLAN_FREQ 126 +#define QWLAN_HAL_CFG_MWS_COEX_V3_CONFIG 127 +#define QWLAN_HAL_CFG_MWS_COEX_V3_CONFIG2 128 +#define QWLAN_HAL_CFG_MWS_COEX_V4_WAN_FREQ 129 +#define QWLAN_HAL_CFG_MWS_COEX_V4_WLAN_FREQ 130 +#define QWLAN_HAL_CFG_MWS_COEX_V4_CONFIG 131 +#define QWLAN_HAL_CFG_MWS_COEX_V4_CONFIG2 132 +#define QWLAN_HAL_CFG_MWS_COEX_V5_WAN_FREQ 133 +#define QWLAN_HAL_CFG_MWS_COEX_V5_WLAN_FREQ 134 +#define QWLAN_HAL_CFG_MWS_COEX_V5_CONFIG 135 +#define QWLAN_HAL_CFG_MWS_COEX_V5_CONFIG2 136 +#define QWLAN_HAL_CFG_MWS_COEX_V6_WAN_FREQ 137 +#define QWLAN_HAL_CFG_MWS_COEX_V6_WLAN_FREQ 138 +#define QWLAN_HAL_CFG_MWS_COEX_V6_CONFIG 139 +#define QWLAN_HAL_CFG_MWS_COEX_V6_CONFIG2 140 +#define QWLAN_HAL_CFG_MWS_COEX_V7_WAN_FREQ 141 +#define QWLAN_HAL_CFG_MWS_COEX_V7_WLAN_FREQ 142 +#define QWLAN_HAL_CFG_MWS_COEX_V7_CONFIG 143 +#define QWLAN_HAL_CFG_MWS_COEX_V7_CONFIG2 144 +#define QWLAN_HAL_CFG_MWS_COEX_V8_WAN_FREQ 145 +#define QWLAN_HAL_CFG_MWS_COEX_V8_WLAN_FREQ 146 +#define QWLAN_HAL_CFG_MWS_COEX_V8_CONFIG 147 +#define QWLAN_HAL_CFG_MWS_COEX_V8_CONFIG2 148 +#define QWLAN_HAL_CFG_MWS_COEX_V9_WAN_FREQ 149 +#define QWLAN_HAL_CFG_MWS_COEX_V9_WLAN_FREQ 150 +#define QWLAN_HAL_CFG_MWS_COEX_V9_CONFIG 151 +#define QWLAN_HAL_CFG_MWS_COEX_V9_CONFIG2 152 +#define QWLAN_HAL_CFG_MWS_COEX_V10_WAN_FREQ 153 +#define QWLAN_HAL_CFG_MWS_COEX_V10_WLAN_FREQ 154 +#define QWLAN_HAL_CFG_MWS_COEX_V10_CONFIG 155 +#define QWLAN_HAL_CFG_MWS_COEX_V10_CONFIG2 156 +#define QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF 157 +#define QWLAN_HAL_CFG_MWS_COEX_CONFIG1 158 +#define QWLAN_HAL_CFG_MWS_COEX_CONFIG2 159 +#define QWLAN_HAL_CFG_MWS_COEX_CONFIG3 160 +#define QWLAN_HAL_CFG_MWS_COEX_CONFIG4 161 +#define QWLAN_HAL_CFG_MWS_COEX_CONFIG5 162 +#define QWLAN_HAL_CFG_MWS_COEX_CONFIG6 163 +#define QWLAN_HAL_CFG_SAR_POWER_BACKOFF 164 +#define QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT 165 +#define QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN 166 +#define QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN 167 +#define QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN 168 +#define QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN 169 +#define QWLAN_HAL_CFG_RMCAST_FIXED_RATE 170 +#define QWLAN_HAL_CFG_MAX_PARAMS 171 + + +/* Total number of Integer CFGs. This is used while allocating the memory for TLV */ +#define QWLAN_HAL_CFG_INTEGER_PARAM 171 + +/*------------------------------------------------------------------------- + Configuration Parameter min, max, defaults +-------------------------------------------------------------------------*/ + +/* QWLAN_HAL_CFG_STA_ID*/ +#define QWLAN_HAL_CFG_STA_ID_STADEF "000AF5898989" +#define QCOM_WLAN_CFG_STA_ID_LEN 6 + +/* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */ +#define QWLAN_HAL_CFG_CURRENT_TX_ANTENNA_STAMIN 1 +#define QWLAN_HAL_CFG_CURRENT_TX_ANTENNA_STAMAX 1 +#define QWLAN_HAL_CFG_CURRENT_TX_ANTENNA_STADEF 1 + +/* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */ +#define QWLAN_HAL_CFG_CURRENT_RX_ANTENNA_STAMIN 1 +#define QWLAN_HAL_CFG_CURRENT_RX_ANTENNA_STAMAX 2 +#define QWLAN_HAL_CFG_CURRENT_RX_ANTENNA_STADEF 1 + +/* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */ +#define QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE_STAMIN 0 +#define QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE_STAMAX 1 +#define QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE_STADEF 0 + +/* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */ +#define QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN_STAMIN 0 +#define QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN_STAMAX 65535 +#define QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN_STADEF 785 +#define QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN_OFF 0 +#define QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN_ON 1 +#define QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN_TX 2 +#define QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN_RX 3 +#define QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN_MASK 15 +#define QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN_CHAIN_0_OFFSET 0 +#define QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN_CHAIN_1_OFFSET 4 +#define QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN_CHAIN_2_OFFSET 8 + +/* QWLAN_HAL_CFG_CAL_PERIOD */ +#define QWLAN_HAL_CFG_CAL_PERIOD_STAMIN 2 +#define QWLAN_HAL_CFG_CAL_PERIOD_STAMAX 10 +#define QWLAN_HAL_CFG_CAL_PERIOD_STADEF 5 + +/* QWLAN_HAL_CFG_CAL_CONTROL */ +#define QWLAN_HAL_CFG_CAL_CONTROL_STAMIN 0 +#define QWLAN_HAL_CFG_CAL_CONTROL_STAMAX 1 +#define QWLAN_HAL_CFG_CAL_CONTROL_STADEF 0 +#define QWLAN_HAL_CFG_CAL_CONTROL_CAL_ON 0 +#define QWLAN_HAL_CFG_CAL_CONTROL_CAL_OFF 1 + +/* QWLAN_HAL_CFG_PROXIMITY */ +#define QWLAN_HAL_CFG_PROXIMITY_STAMIN 0 +#define QWLAN_HAL_CFG_PROXIMITY_STAMAX 1 +#define QWLAN_HAL_CFG_PROXIMITY_STADEF 0 +#define QWLAN_HAL_CFG_PROXIMITY_OFF 0 +#define QWLAN_HAL_CFG_PROXIMITY_ON 1 + +/* QWLAN_HAL_CFG_NETWORK_DENSITY */ +#define QWLAN_HAL_CFG_NETWORK_DENSITY_STAMIN 0 +#define QWLAN_HAL_CFG_NETWORK_DENSITY_STAMAX 3 +#define QWLAN_HAL_CFG_NETWORK_DENSITY_STADEF 3 +#define QWLAN_HAL_CFG_NETWORK_DENSITY_LOW 0 +#define QWLAN_HAL_CFG_NETWORK_DENSITY_MEDIUM 1 +#define QWLAN_HAL_CFG_NETWORK_DENSITY_HIGH 2 +#define QWLAN_HAL_CFG_NETWORK_DENSITY_ADAPTIVE 3 + +/* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */ +#define QWLAN_HAL_CFG_MAX_MEDIUM_TIME_STAMIN 0 +#define QWLAN_HAL_CFG_MAX_MEDIUM_TIME_STAMAX 65535 +#define QWLAN_HAL_CFG_MAX_MEDIUM_TIME_STADEF 1024 + +/* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */ +#define QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU_STAMIN 0 +#define QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU_STAMAX 65535 +#define QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU_STADEF 64 + +/* QWLAN_HAL_CFG_RTS_THRESHOLD */ +#define QWLAN_HAL_CFG_RTS_THRESHOLD_STAMIN 0 +#define QWLAN_HAL_CFG_RTS_THRESHOLD_STAMAX 2347 +#define QWLAN_HAL_CFG_RTS_THRESHOLD_STADEF 2347 + +/* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */ +#define QWLAN_HAL_CFG_SHORT_RETRY_LIMIT_STAMIN 0 +#define QWLAN_HAL_CFG_SHORT_RETRY_LIMIT_STAMAX 255 +#define QWLAN_HAL_CFG_SHORT_RETRY_LIMIT_STADEF 15 + +/* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */ +#define QWLAN_HAL_CFG_LONG_RETRY_LIMIT_STAMIN 0 +#define QWLAN_HAL_CFG_LONG_RETRY_LIMIT_STAMAX 255 +#define QWLAN_HAL_CFG_LONG_RETRY_LIMIT_STADEF 15 + +/* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */ +#define QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD_STAMIN 256 +#define QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD_STAMAX 8000 +#define QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD_STADEF 8000 + +/* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */ +#define QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO_STAMIN 0 +#define QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO_STAMAX 255 +#define QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO_STADEF 5 + +/* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */ +#define QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE_STAMIN 0 +#define QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE_STAMAX 255 +#define QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE_STADEF 10 + +/* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */ +#define QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO_STAMIN 0 +#define QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO_STAMAX 255 +#define QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO_STADEF 15 + +#define QWLAN_HAL_CFG_FIXED_RATE_AUTO 0 +#define QWLAN_HAL_CFG_FIXED_RATE_1MBPS 1 +#define QWLAN_HAL_CFG_FIXED_RATE_2MBPS 2 +#define QWLAN_HAL_CFG_FIXED_RATE_5_5MBPS 3 +#define QWLAN_HAL_CFG_FIXED_RATE_11MBPS 4 +#define QWLAN_HAL_CFG_FIXED_RATE_6MBPS 5 +#define QWLAN_HAL_CFG_FIXED_RATE_9MBPS 6 +#define QWLAN_HAL_CFG_FIXED_RATE_12MBPS 7 +#define QWLAN_HAL_CFG_FIXED_RATE_18MBPS 8 +#define QWLAN_HAL_CFG_FIXED_RATE_24MBPS 9 +#define QWLAN_HAL_CFG_FIXED_RATE_36MBPS 10 +#define QWLAN_HAL_CFG_FIXED_RATE_48MBPS 11 +#define QWLAN_HAL_CFG_FIXED_RATE_54MBPS 12 +#define QWLAN_HAL_CFG_FIXED_RATE_6_5MBPS_MCS0_20MHZ_SIMO 13 +#define QWLAN_HAL_CFG_FIXED_RATE_13MBPS_MCS1_20MHZ_SIMO 14 +#define QWLAN_HAL_CFG_FIXED_RATE_19_5MBPS_MCS2_20MHZ_SIMO 15 +#define QWLAN_HAL_CFG_FIXED_RATE_26MBPS_MCS3_20MHZ_SIMO 16 +#define QWLAN_HAL_CFG_FIXED_RATE_39MBPS_MCS4_20MHZ_SIMO 17 +#define QWLAN_HAL_CFG_FIXED_RATE_52MBPS_MCS5_20MHZ_SIMO 18 +#define QWLAN_HAL_CFG_FIXED_RATE_58_5MBPS_MCS6_20MHZ_SIMO 19 +#define QWLAN_HAL_CFG_FIXED_RATE_65MBPS_MCS7_20MHZ_SIMO 20 +#define QWLAN_HAL_CFG_FIXED_RATE_7_2MBPS_MCS0_20MHZ_SIMO_SGI 21 +#define QWLAN_HAL_CFG_FIXED_RATE_14_4MBPS_MCS1_20MHZ_SIMO_SGI 22 +#define QWLAN_HAL_CFG_FIXED_RATE_21_7MBPS_MCS2_20MHZ_SIMO_SGI 23 +#define QWLAN_HAL_CFG_FIXED_RATE_28_9MBPS_MCS3_20MHZ_SIMO_SGI 24 +#define QWLAN_HAL_CFG_FIXED_RATE_43_3MBPS_MCS4_20MHZ_SIMO_SGI 25 +#define QWLAN_HAL_CFG_FIXED_RATE_57_8MBPS_MCS5_20MHZ_SIMO_SGI 26 +#define QWLAN_HAL_CFG_FIXED_RATE_65MBPS_MCS6_20MHZ_SIMO_SGI 27 +#define QWLAN_HAL_CFG_FIXED_RATE_72_2MBPS_MCS7_20MHZ_SIMO_SGI 28 +#define QWLAN_HAL_CFG_FIXED_RATE_13_5MBPS_MCS0_40MHZ_SIMO 29 +#define QWLAN_HAL_CFG_FIXED_RATE_27MBPS_MCS1_40MHZ_SIMO 30 +#define QWLAN_HAL_CFG_FIXED_RATE_40_5MBPS_MCS2_40MHZ_SIMO 31 +#define QWLAN_HAL_CFG_FIXED_RATE_54MBPS_MCS3_40MHZ_SIMO 32 +#define QWLAN_HAL_CFG_FIXED_RATE_81MBPS_MCS4_40MHZ_SIMO 33 +#define QWLAN_HAL_CFG_FIXED_RATE_108MBPS_MCS5_40MHZ_SIMO 34 +#define QWLAN_HAL_CFG_FIXED_RATE_121_5MBPS_MCS6_40MHZ_SIMO 35 +#define QWLAN_HAL_CFG_FIXED_RATE_135MBPS_MCS7_40MHZ_SIMO 36 +#define QWLAN_HAL_CFG_FIXED_RATE_15MBPS_MCS0_40MHZ_SIMO_SGI 37 +#define QWLAN_HAL_CFG_FIXED_RATE_30MBPS_MCS1_40MHZ_SIMO_SGI 38 +#define QWLAN_HAL_CFG_FIXED_RATE_45MBPS_MCS2_40MHZ_SIMO_SGI 39 +#define QWLAN_HAL_CFG_FIXED_RATE_60MBPS_MCS3_40MHZ_SIMO_SGI 40 +#define QWLAN_HAL_CFG_FIXED_RATE_90MBPS_MCS4_40MHZ_SIMO_SGI 41 +#define QWLAN_HAL_CFG_FIXED_RATE_120MBPS_MCS5_40MHZ_SIMO_SGI 42 +#define QWLAN_HAL_CFG_FIXED_RATE_135MBPS_MCS6_40MHZ_SIMO_SGI 43 +#define QWLAN_HAL_CFG_FIXED_RATE_150MBPS_MCS7_40MHZ_SIMO_SGI 44 + +/* QWLAN_HAL_CFG_FIXED_RATE + * Follwing rates in user configuration are mapped to TPE rates + * Mapping is defined in the gHalUserFixedRateCfgToTpeRateTable + */ +#define QWLAN_HAL_CFG_FIXED_RATE_STAMIN 0 +#define QWLAN_HAL_CFG_FIXED_RATE_STAMAX 226 +#define QWLAN_HAL_CFG_FIXED_RATE_STADEF QWLAN_HAL_CFG_FIXED_RATE_AUTO + +/* QWLAN_HAL_CFG_RMCAST_FIXED_RATE + * Follwing rates in user configuration are mapped to TPE rates + * Mapping is defined in the gHalUserFixedRateCfgToTpeRateTable + */ +#define QWLAN_HAL_CFG_RMCAST_FIXED_RATE_STAMIN 0 +#define QWLAN_HAL_CFG_RMCAST_FIXED_RATE_STAMAX 226 +#define QWLAN_HAL_CFG_RMCAST_FIXED_RATE_STADEF QWLAN_HAL_CFG_FIXED_RATE_24MBPS + +/* QWLAN_HAL_CFG_RETRYRATE_POLICY */ +#define QWLAN_HAL_CFG_RETRYRATE_POLICY_STAMIN 0 +#define QWLAN_HAL_CFG_RETRYRATE_POLICY_STAMAX 255 +#define QWLAN_HAL_CFG_RETRYRATE_POLICY_STADEF 4 +#define QWLAN_HAL_CFG_RETRYRATE_POLICY_MIN_SUPPORTED 0 +#define QWLAN_HAL_CFG_RETRYRATE_POLICY_PRIMARY 1 +#define QWLAN_HAL_CFG_RETRYRATE_POLICY_RESERVED 2 +#define QWLAN_HAL_CFG_RETRYRATE_POLICY_CLOSEST 3 +#define QWLAN_HAL_CFG_RETRYRATE_POLICY_AUTOSELECT 4 +#define QWLAN_HAL_CFG_RETRYRATE_POLICY_MAX 5 + +/* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */ +#define QWLAN_HAL_CFG_RETRYRATE_SECONDARY_STAMIN 0 +#define QWLAN_HAL_CFG_RETRYRATE_SECONDARY_STAMAX 255 +#define QWLAN_HAL_CFG_RETRYRATE_SECONDARY_STADEF 0 + +/* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */ +#define QWLAN_HAL_CFG_RETRYRATE_TERTIARY_STAMIN 0 +#define QWLAN_HAL_CFG_RETRYRATE_TERTIARY_STAMAX 255 +#define QWLAN_HAL_CFG_RETRYRATE_TERTIARY_STADEF 0 + +/* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */ +#define QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION_STAMIN 0 +#define QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION_STAMAX 5 +#define QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION_STADEF 5 +#define QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION_DISABLE 0 +#define QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION_CTS 1 +#define QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION_RTS 2 +#define QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION_DUAL_CTS 3 +#define QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION_RTS_ALWAYS 4 +#define QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION_AUTO 5 + +/* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */ +#define QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ_STAMIN 0 +#define QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ_STAMAX QWLAN_HAL_CFG_FIXED_RATE_STAMAX +#define QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ_STADEF QWLAN_HAL_CFG_FIXED_RATE_1MBPS + +/* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */ +#define QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ_STAMIN 0 +#define QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ_STAMAX QWLAN_HAL_CFG_FIXED_RATE_STAMAX +#define QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ_STADEF QWLAN_HAL_CFG_FIXED_RATE_6MBPS + +/* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */ +#define QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ_STAMIN 0 +#define QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ_STAMAX QWLAN_HAL_CFG_FIXED_RATE_STAMAX +#define QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ_STADEF QWLAN_HAL_CFG_FIXED_RATE_1MBPS + +/* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */ +#define QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ_STAMIN 0 +#define QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ_STAMAX QWLAN_HAL_CFG_FIXED_RATE_STAMAX +#define QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ_STADEF QWLAN_HAL_CFG_FIXED_RATE_6MBPS + +/* QWLAN_HAL_CFG_MAX_BA_SESSIONS */ +#define QWLAN_HAL_CFG_MAX_BA_SESSIONS_STAMIN 0 +#define QWLAN_HAL_CFG_MAX_BA_SESSIONS_STAMAX 64 +#define QWLAN_HAL_CFG_MAX_BA_SESSIONS_STADEF 40 + +/* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */ +#define QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT_STAMIN 1 +#define QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT_STAMAX 255 +#define QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT_STADEF 20 + +/* QWLAN_HAL_CFG_PS_TX_INACTIVITY_TIMEOUT */ +#define QWLAN_HAL_CFG_PS_TX_INACTIVITY_TIMEOUT_STAMIN 0 +#define QWLAN_HAL_CFG_PS_TX_INACTIVITY_TIMEOUT_STAMAX 255 +#define QWLAN_HAL_CFG_PS_TX_INACTIVITY_TIMEOUT_STADEF 300 + +/* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */ +#define QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER_STAMIN 0 +#define QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER_STAMAX 1 +#define QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER_STADEF 1 + +/* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */ +#define QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR_STAMIN 0 +#define QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR_STAMAX 1 +#define QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR_STADEF 1 + +/* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */ +#define QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE_STAMIN 1 +#define QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE_STAMAX 20 +#define QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE_STADEF 20 + +/* QWLAN_HAL_CFG_STATS_PERIOD */ +#define QWLAN_HAL_CFG_STATS_PERIOD_STAMIN 1 +#define QWLAN_HAL_CFG_STATS_PERIOD_STAMAX 10 +#define QWLAN_HAL_CFG_STATS_PERIOD_STADEF 10 + +/* QWLAN_HAL_CFG_CFP_MAX_DURATION */ +#define QWLAN_HAL_CFG_CFP_MAX_DURATION_STAMIN 0 +#define QWLAN_HAL_CFG_CFP_MAX_DURATION_STAMAX 65535 +#define QWLAN_HAL_CFG_CFP_MAX_DURATION_STADEF 30000 + +/* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */ +#define QWLAN_HAL_CFG_FRAME_TRANS_ENABLED_STAMIN 0 +#define QWLAN_HAL_CFG_FRAME_TRANS_ENABLED_STAMAX 1 +#define QWLAN_HAL_CFG_FRAME_TRANS_ENABLED_STADEF 0 + +/* QWLAN_HAL_CFG_DTIM_PERIOD */ +#define QWLAN_HAL_CFG_DTIM_PERIOD_STAMIN 0 +#define QWLAN_HAL_CFG_DTIM_PERIOD_STAMAX 65535 +#define QWLAN_HAL_CFG_DTIM_PERIOD_STADEF 1 + +/* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */ +#define QWLAN_HAL_CFG_BA_THRESHOLD_HIGH_STAMIN 0 +#define QWLAN_HAL_CFG_BA_THRESHOLD_HIGH_STAMAX 65535 +#define QWLAN_HAL_CFG_BA_THRESHOLD_HIGH_STADEF 1 + +/* QWLAN_HAL_CFG_MAX_BA_BUFFERS */ +#define QWLAN_HAL_CFG_MAX_BA_BUFFERS_STAMIN 0 +#define QWLAN_HAL_CFG_MAX_BA_BUFFERS_STAMAX 2560 +#define QWLAN_HAL_CFG_MAX_BA_BUFFERS_STADEF 2560 + + + +/* ACM, AIFSN, [CWmin, CWmax, TxOp]-11A/11B/11G + * Cwmin and Cwmax are two bytes each, MSB first. So Cwmax of [03 FF] is + * equivalent to 0x03ff = 1023*/ +#define QWLAN_HAL_CFG_EDCA_PROFILE_ACM_IDX 0 /* byte[0] */ +#define QWLAN_HAL_CFG_EDCA_PROFILE_AIFSN_IDX 1 /* byte[1] */ +#define QWLAN_HAL_CFG_EDCA_PROFILE_CWMINA_IDX 2 /* byte[2] & byte [3] */ +#define QWLAN_HAL_CFG_EDCA_PROFILE_CWMAXA_IDX 4 /* byte[4] & byte [5] */ +#define QWLAN_HAL_CFG_EDCA_PROFILE_TXOPA_IDX 6 /* byte[6] */ +#define QWLAN_HAL_CFG_EDCA_PROFILE_CWMINB_IDX 7 /* byte[7] & byte [8] */ +#define QWLAN_HAL_CFG_EDCA_PROFILE_CWMAXB_IDX 9 /* byte[9] & byte [10] */ +#define QWLAN_HAL_CFG_EDCA_PROFILE_TXOPB_IDX 11 /* byte[11]*/ +#define QWLAN_HAL_CFG_EDCA_PROFILE_CWMING_IDX 12 /* byte[12] & byte [13] */ +#define QWLAN_HAL_CFG_EDCA_PROFILE_CWMAXG_IDX 14 /* byte[14] & byte [15] */ +#define QWLAN_HAL_CFG_EDCA_PROFILE_TXOPG_IDX 16 /* byte[16]*/ +#define QWLAN_HAL_CFG_EDCA_PARAM_MAX_LEN 20 + +/* QWLAN_HAL_CFG_EDCA_WMM_ACBK */ +#define QWLAN_HAL_CFG_EDCA_WMM_ACBK_DEFAULT "0007000F03FF00001F03FF00000F03FF00" + +/* QWLAN_HAL_CFG_EDCA_WMM_ACBE */ +#define QWLAN_HAL_CFG_EDCA_WMM_ACBE_DEFAULT "0003000F03FF00001F03FF00000F03FF00" + +/* QWLAN_HAL_CFG_EDCA_WMM_ACVI */ +#define QWLAN_HAL_CFG_EDCA_WMM_ACVI_DEFAULT "00020007000F5E000F001FBC0007000F5E" + +/* QWLAN_HAL_CFG_EDCA_WMM_ACVO */ +#define QWLAN_HAL_CFG_EDCA_WMM_ACVO_DEFAULT "0002000300072F0007000F66000300072F" + + +/* QWLAN_HAL_CFG_RPE_POLLING_THRESHOLD */ +#define QWLAN_CFG_RPE_POLLING_THRESHOLD_STAMIN 0 +#define QWLAN_CFG_RPE_POLLING_THRESHOLD_STAMAX 65535 +#define QWLAN_CFG_RPE_POLLING_THRESHOLD_STADEF 30 + +/* QWLAN_HAL_CFG_RPE_AGING_THRESHOLD_FOR_AC0_REG */ +#define QWLAN_CFG_RPE_AGING_THRESHOLD_FOR_AC0_REG_STAMIN 0 +#define QWLAN_CFG_RPE_AGING_THRESHOLD_FOR_AC0_REG_STAMAX 65535 +#define QWLAN_CFG_RPE_AGING_THRESHOLD_FOR_AC0_REG_STADEF 30 + +/* QWLAN_HAL_CFG_RPE_AGING_THRESHOLD_FOR_AC1_REG */ +#define QWLAN_CFG_RPE_AGING_THRESHOLD_FOR_AC1_REG_STAMIN 0 +#define QWLAN_CFG_RPE_AGING_THRESHOLD_FOR_AC1_REG_STAMAX 65535 +#define QWLAN_CFG_RPE_AGING_THRESHOLD_FOR_AC1_REG_STADEF 30 + +/* QWLAN_HAL_CFG_RPE_AGING_THRESHOLD_FOR_AC2_REG */ +#define QWLAN_CFG_RPE_AGING_THRESHOLD_FOR_AC2_REG_STAMIN 0 +#define QWLAN_CFG_RPE_AGING_THRESHOLD_FOR_AC2_REG_STAMAX 65535 +#define QWLAN_CFG_RPE_AGING_THRESHOLD_FOR_AC2_REG_STADEF 30 + +/* QWLAN_HAL_CFG_RPE_AGING_THRESHOLD_FOR_AC3_REG */ +#define QWLAN_CFG_RPE_AGING_THRESHOLD_FOR_AC3_REG_STAMIN 0 +#define QWLAN_CFG_RPE_AGING_THRESHOLD_FOR_AC3_REG_STAMAX 65535 +#define QWLAN_CFG_RPE_AGING_THRESHOLD_FOR_AC3_REG_STADEF 30 + +/* QWLAN_HAL_CFG_NO_OF_ONCHIP_REORDER_SESSIONS */ +#define QWLAN_CFG_NO_OF_ONCHIP_REORDER_SESSIONS_STAMIN 0 +#define QWLAN_CFG_NO_OF_ONCHIP_REORDER_SESSIONS_STAMAX 2 +#define QWLAN_CFG_NO_OF_ONCHIP_REORDER_SESSIONS_STADEF 1 + +#define QWLAN_HAL_CFG_PS_LISTEN_INTERVAL_STAMIN 0 +#define QWLAN_HAL_CFG_PS_LISTEN_INTERVAL_STAMAX 65535 +#define QWLAN_HAL_CFG_PS_LISTEN_INTERVAL_STADEF 1 + +#define QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD_STAMIN 0 +#define QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD_STAMAX 65535 +#define QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD_STADEF 40 + +#define QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER_STAMIN 0 +#define QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER_STAMAX 255 +#define QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER_STADEF 10 + +#define QWLAN_HAL_CFG_PS_MAX_PS_POLL_STAMIN 0 +#define QWLAN_HAL_CFG_PS_MAX_PS_POLL_STAMAX 255 +#define QWLAN_HAL_CFG_PS_MAX_PS_POLL_STADEF 0 + +#define QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD_STAMIN 0 +#define QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD_STAMAX 10 +#define QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD_STADEF 10 + +#define QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD_STAMIN 0 +#define QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD_STAMAX 255 +#define QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD_STADEF 20 + +#define QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE_STAMIN 0 +#define QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE_STAMAX 1 +#define QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE_STADEF 0 + +#define QWLAN_HAL_CFG_PS_IGNORE_DTIM_STAMIN 0 +#define QWLAN_HAL_CFG_PS_IGNORE_DTIM_STAMAX 1 +#define QWLAN_HAL_CFG_PS_IGNORE_DTIM_STADEF 0 + +#define QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM_STAMIN 0 +#define QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM_STAMAX 1 +#define QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM_STADEF 0 + +#define QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE_STAMIN 0 +#define QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE_STAMAX 255 +#define QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE_STADEF 0 + +#define QWLAN_HAL_CFG_PS_NULLDATA_AP_RESP_TIMEOUT_STAMIN 0 +#define QWLAN_HAL_CFG_PS_NULLDATA_AP_RESP_TIMEOUT_STAMAX 80 +#define QWLAN_HAL_CFG_PS_NULLDATA_AP_RESP_TIMEOUT_STADEF 0 + +/* QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE */ +#define QWLAN_CFG_TX_PWR_CTRL_ENABLE_STAMIN 0 +#define QWLAN_CFG_TX_PWR_CTRL_ENABLE_STAMAX 1 +#define QWLAN_CFG_TX_PWR_CTRL_ENABLE_STADEF 1 + +#define QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN_STAMIN 0 +#define QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN_STAMAX 1 +#define QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN_STADEF 0 + +#define QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_STAMIN 0 +#define QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_STAMAX 7 +#define QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_STADEF 3 + +#define QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS_STAMIN 5 +#define QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS_STAMAX 255 +#define QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS_STADEF 10 + +#define QWLAN_HAL_CFG_TELE_BCN_MAX_LI_STAMIN 0 +#define QWLAN_HAL_CFG_TELE_BCN_MAX_LI_STAMAX 7 +#define QWLAN_HAL_CFG_TELE_BCN_MAX_LI_STADEF 5 + +#define QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS_STAMIN 5 +#define QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS_STAMAX 255 +#define QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS_STADEF 15 + +#define QWLAN_HAL_CFG_MCAST_BCAST_FILTER_SETTING_STAMIN 0 +#define QWLAN_HAL_CFG_MCAST_BCAST_FILTER_SETTING_STAMAX 3 +#define QWLAN_HAL_CFG_MCAST_BCAST_FILTER_SETTING_STADEF 0 + +#define QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL_STAMIN 1 +#define QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL_STAMAX 255 +#define QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL_STADEF 5 + +/*Values to be added in hexadecimal*/ +/* QWLAN_HAL_CFG_VALID_RADAR_LIST */ +#define QWLAN_HAL_CFG_VALID_RADAR_CHANNEL_LIST_DEFAULT "36" +#define QWLAN_HAL_CFG_RADAR_CHANNEL_LIST_LEN 20 + +/* QWLAN_HAL_CFG_TX_POWER_24_20 */ +#define QWLAN_WLAN_TX_POWER_24_20_DEFAULT 299 +#define QWLAN_WLAN_TX_POWER_24_20_MIN 299 +#define QWLAN_WLAN_TX_POWER_24_20_MAX 299 + +/* QWLAN_HAL_CFG_TX_POWER_24_40 */ +#define QWLAN_WLAN_TX_POWER_24_40_DEFAULT 300 +#define QWLAN_WLAN_TX_POWER_24_40_MIN 299 +#define QWLAN_WLAN_TX_POWER_24_40_MAX 299 + +/* QWLAN_HAL_CFG_TX_POWER_50_20 */ +#define QWLAN_WLAN_TX_POWER_50_20_DEFAULT 301 +#define QWLAN_WLAN_TX_POWER_50_20_MIN 299 +#define QWLAN_WLAN_TX_POWER_50_20_MAX 299 + +/* QWLAN_HAL_CFG_TX_POWER_50_40 */ +#define QWLAN_WLAN_TX_POWER_50_40_DEFAULT 302 +#define QWLAN_WLAN_TX_POWER_50_40_MIN 299 +#define QWLAN_WLAN_TX_POWER_50_40_MAX 299 + +/* QCOM_WLAN_CFG_MAX_TX_POWER_2_4 */ +#define QCOM_WLAN_CFG_MAX_TX_POWER_2_4_LEN 128 +/* byte[0] = 0x01 = First Channel; byte[1] = 0x0E = 14 = MaxChannels; byte[2] = 0x14 = 20 = Tx Power (dBm) */ +#define QCOM_WLAN_CFG_MAX_TX_POWER_2_4_DEFAULT "010E14" + +/* QCOM_WLAN_CFG_MAX_TX_POWER_5 */ +#define QCOM_WLAN_CFG_MAX_TX_POWER_5_LEN 128 +/* byte[0] = 0x24 = 36 = First Channel; byte[1] = 0x82 = 130 = MaxChannels; byte[2] = 0x14 = 20 = Tx Power (dBm) */ +#define QCOM_WLAN_CFG_MAX_TX_POWER_5_DEFAULT "248214" + + +#define QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD_STAMIN 0 +#define QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD_STAMAX 65535 +#define QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD_STADEF 0 + +#define QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP_MIN 0 +#define QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP_MAX 1 +#define QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP_DEF 0 + +/* QWLAN_HAL_CFG_BTC_EXECUTION_MODE */ +#define QWLAN_HAL_CFG_BTC_EXECUTION_MODE_MIN 0 +#define QWLAN_HAL_CFG_BTC_EXECUTION_MODE_MAX 5 +#define QWLAN_HAL_CFG_BTC_EXECUTION_MODE_DEF 0 + +/* QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */ +#define QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK_MIN 0 +#define QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK_MAX 255 +#define QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK_DEF 0 + +/* QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */ +#define QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS_MIN 0 +#define QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS_MAX 255 +#define QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS_DEF 15 + +/* QWLAN_HAL_CFG_WCNSS_API_VERSION */ +#define QWLAN_HAL_CFG_WCNSS_API_VERSION_MIN 0 /* equivalent to 0.0.0.0 */ +#define QWLAN_HAL_CFG_WCNSS_API_VERSION_MAX 4294967295U /* equivalent to 255.255.255.255 */ +#define QWLAN_HAL_CFG_WCNSS_API_VERSION_DEF 0 /* equivalent to 0.0.0.0 */ + +/* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */ +#define QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT_MIN 1 +#define QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT_MAX 255 +#define QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT_DEF 20 + +/* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */ +#define QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT_MIN 1 +#define QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT_MAX 255 +#define QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT_DEF 20 + +/* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */ +#define QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST_MIN 0 +#define QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST_MAX 1 +#define QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST_DEF 0 + +/* QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */ +#define QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT_MIN 5000 +#define QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT_MAX 500000 +#define QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT_DEF 120000 + +/* QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */ +#define QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT_MIN 5000 +#define QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT_MAX 500000 +#define QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT_DEF 10000 + +/* QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */ +#define QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT_MIN 5000 +#define QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT_MAX 500000 +#define QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT_DEF 10000 + +/* QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */ +#define QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT_MIN 5000 +#define QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT_MAX 500000 +#define QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT_DEF 10000 + +/* QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */ +#define QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN_MIN 0 +#define QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN_MAX 500000 +#define QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN_DEF 30000 + +/* QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */ +#define QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN_MIN 0 +#define QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN_MAX 500000 +#define QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN_DEF 0 + +/* QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */ +#define QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN_MIN 0 +#define QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN_MAX 500000 +#define QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN_DEF 0 + +/* QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */ +#define QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN_MIN 0 +#define QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN_MAX 500000 +#define QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN_DEF 0 + +/* QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */ +#define QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT_MIN 25000 +#define QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT_MAX 500000 +#define QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT_DEF 250000 + +/* QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */ +#define QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN_MIN 15000 +#define QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN_MAX 500000 +#define QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN_DEF 45000 + +/* QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */ +#define QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC_MIN 0 +#define QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC_MAX 100 +#define QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC_DEF 1 + +/* QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */ +#define QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP_MIN 0 +#define QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP_MAX 1 +#define QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP_DEF 1 + +/* QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */ +#define QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO_MIN 0 +#define QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO_MAX 1 +#define QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO_DEF 0 + +/* QWLAN_HAL_CFG_ENABLE_UNICAST_FILTER */ +#define QWLAN_HAL_CFG_ENABLE_UNICAST_FILTER_MIN 0 +#define QWLAN_HAL_CFG_ENABLE_UNICAST_FILTER_MAX 1 +#define QWLAN_HAL_CFG_ENABLE_UNICAST_FILTER_DEF 0 + +/* QWLAN_HAL_CFG_MAX_ASSOC_LIMIT */ +#define QWLAN_HAL_CFG_MAX_ASSOC_LIMIT_MIN 10 +#define QWLAN_HAL_CFG_MAX_ASSOC_LIMIT_MAX 32 +#define QWLAN_HAL_CFG_MAX_ASSOC_LIMIT_DEF 10 + +/* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */ +#define QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION_MIN 0 +#define QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION_MAX 1 +#define QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION_DEF 0 + +/* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */ +#define QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER_MIN 0 +#define QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER_MAX 1 +#define QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER_DEF 0 + +/* QWLAN_HAL_CFG_ENABLE_DETECT_PS_SUPPORT */ +#define QWLAN_HAL_CFG_ENABLE_DETECT_PS_SUPPORT_MIN 0 +#define QWLAN_HAL_CFG_ENABLE_DETECT_PS_SUPPORT_MAX 1 +#define QWLAN_HAL_CFG_ENABLE_DETECT_PS_SUPPORT_DEF 0 + +/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */ +#define QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT_MIN 3 +#define QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT_MAX 30 +#define QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT_DEF 10 + +/* QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT */ +#define QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT_MIN 3 +#define QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT_MAX 30 +#define QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT_DEF 10 + +/*QWLAN_HAL_CFG_BTC_DWELL_TIME_MULTIPLIER*/ +/*This value is multiplied to ChannelDwellTime + *i.e If value is 300 then ChannelDwellTime is (3*ChannelDwelltime)*/ +#define QWLAN_HAL_CFG_BTC_DWELL_TIME_MULTIPLIER_MIN 0 +#define QWLAN_HAL_CFG_BTC_DWELL_TIME_MULTIPLIER_MAX 300 +#define QWLAN_HAL_CFG_BTC_DWELL_TIME_MULTIPLIER_DEF 300 + +/* QWLAN_HAL_CFG_ENABLE_TDLS_OXYGEN_MODE */ +#define QWLAN_HAL_CFG_ENABLE_TDLS_OXYGEN_MODE_MIN 0 +#define QWLAN_HAL_CFG_ENABLE_TDLS_OXYGEN_MODE_MAX 1 +#define QWLAN_HAL_CFG_ENABLE_TDLS_OXYGEN_MODE_DEF 0 + +/* QWLAN_HAL_CFG_ENABLE_NAT_KEEP_ALIVE_FILTER */ +#define QWLAN_HAL_CFG_ENABLE_NAT_KEEP_ALIVE_FILTER_MIN 0 +#define QWLAN_HAL_CFG_ENABLE_NAT_KEEP_ALIVE_FILTER_MAX 1 +#define QWLAN_HAL_CFG_ENABLE_NAT_KEEP_ALIVE_FILTER_DEF 0 + +/* QWLAN_HAL_CFG_ENABLE_SAP_OBSS_PROT */ +#define QWLAN_HAL_CFG_ENABLE_SAP_OBSS_PROT_MIN 0 +#define QWLAN_HAL_CFG_ENABLE_SAP_OBSS_PROT_MAX 1 +#define QWLAN_HAL_CFG_ENABLE_SAP_OBSS_PROT_DEF 0 + +/* QWLAN_HAL_CFG_PSPOLL_DATA_RECEP_TIMEOUT */ +#define QWLAN_HAL_CFG_PSPOLL_DATA_RECEP_TIMEOUT_STAMIN 1 +#define QWLAN_HAL_CFG_PSPOLL_DATA_RECEP_TIMEOUT_STAMAX 255 +#define QWLAN_HAL_CFG_PSPOLL_DATA_RECEP_TIMEOUT_STADEF 20 + +/* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */ +#define QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE_MIN 0 +#define QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE_MAX 1 +#define QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE_DEF 0 + +/* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */ +#define QWLAN_HAL_CFG_TDLS_PUAPSD_MASK_MIN 0 +#define QWLAN_HAL_CFG_TDLS_PUAPSD_MASK_MAX 0xf +#define QWLAN_HAL_CFG_TDLS_PUAPSD_MASK_DEF 0 + +/* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */ +#define QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME_MIN 0 +#define QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME_MAX 10 +#define QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME_DEF 0 + +/* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */ +#define QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP_MIN 10 +#define QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP_MAX 20 +#define QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP_DEF 10 + +#define QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN_MIN 0 +#define QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN_MAX 250000 +#define QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN_DEF 60000 + +#define QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN_MIN 0 +#define QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN_MAX 250000 +#define QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN_DEF 90000 + +#define QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN_MIN 0 +#define QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN_MAX 250000 +#define QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN_DEF 60000 + +#define QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN_MIN 0 +#define QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN_MAX 250000 +#define QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN_DEF 90000 + +/* QWLAN_HAL_CFG_ANTENNA_DIVERSITY */ +#define QWLAN_HAL_CFG_ANTENNA_DIVERSITY_DEF 0 +#define QWLAN_HAL_CFG_ANTENNA_DIVERSITY_MIN 0 +#define QWLAN_HAL_CFG_ANTENNA_DIVERSITY_MAX 3 + +#define QWLAN_HAL_CFG_ATH_DEF 0 +#define QWLAN_HAL_CFG_ATH_MIN 0 +#define QWLAN_HAL_CFG_ATH_MAX 1 + +/* QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR */ +#define QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR_DEF 0 +#define QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR_MIN 0 +#define QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR_MAX 9 + +/* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_RX_DRAIN_FEATURE */ +#define QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE_MIN 0 +#define QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE_MAX 1 +#define QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE_DEF 1 + +/* QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE */ +#define QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE_MIN 0 +#define QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE_MAX 1 +#define QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE_DEF 0 + +/* QWLAN_HAL_CFG_MWS_COEX_XXXX */ +#define QWLAN_HAL_CFG_MWS_COEX_DEF 0 +#define QWLAN_HAL_CFG_MWS_COEX_MIN 0 +#define QWLAN_HAL_CFG_MWS_COEX_MAX 0xFFFFFFFF +#define QWLAN_HAL_CFG_MWS_COEX_MAX_VICTIM 10 +#define QWLAN_HAL_CFG_MWS_COEX_MAX_CONFIG 6 + +/* QWLAN_HAL_CFG_SAR_POWER_BACKOFF */ +#define QWLAN_HAL_CFG_SAR_POWER_BACKOFF_DEF 13 +#define QWLAN_HAL_CFG_SAR_POWER_BACKOFF_MIN 1 +#define QWLAN_HAL_CFG_SAR_POWER_BACKOFF_MAX 21 + +#endif //__WLAN_HAL_CFG_H__ + + diff --git a/wcnss/riva/inc/wlan_hal_msg.h b/wcnss/riva/inc/wlan_hal_msg.h new file mode 100644 index 000000000000..cf1165aa8806 --- /dev/null +++ b/wcnss/riva/inc/wlan_hal_msg.h @@ -0,0 +1,7083 @@ +/* + * Copyright (c) 2013, The Linux Foundation. All rights reserved. + * + * Previously licensed under the ISC license by Qualcomm Atheros, Inc. + * + * + * Permission to use, copy, modify, and/or distribute this software for + * any purpose with or without fee is hereby granted, provided that the + * above copyright notice and this permission notice appear in all + * copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL + * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE + * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +/* + * This file was originally distributed by Qualcomm Atheros, Inc. + * under proprietary terms before Copyright ownership was assigned + * to the Linux Foundation. + */ + +/*========================================================================== + * + * @file: wlan_hal_msg.h + * + * @brief: Exports and types for messages sent to HAL from WDI + * + * @author: Kumar Anand + * + * Copyright (C) 2010, Qualcomm Technologies, Inc. + * All rights reserved. + * + *=========================================================================*/ + +#ifndef _WLAN_HAL_MSG_H_ +#define _WLAN_HAL_MSG_H_ + +#include "halLegacyPalTypes.h" +#include "halCompiler.h" +#include "wlan_qct_dev_defs.h" +#include "wlan_nv.h" + +/*--------------------------------------------------------------------------- + API VERSIONING INFORMATION + + The RIVA API is versioned as MAJOR.MINOR.VERSION.REVISION + The MAJOR is incremented for major product/architecture changes + (and then MINOR/VERSION/REVISION are zeroed) + The MINOR is incremented for minor product/architecture changes + (and then VERSION/REVISION are zeroed) + The VERSION is incremented if a significant API change occurs + (and then REVISION is zeroed) + The REVISION is incremented if an insignificant API change occurs + or if a new API is added + All values are in the range 0..255 (ie they are 8-bit values) + ---------------------------------------------------------------------------*/ +#define WLAN_HAL_VER_MAJOR 1 +#define WLAN_HAL_VER_MINOR 5 +#define WLAN_HAL_VER_VERSION 1 +#define WLAN_HAL_VER_REVISION 2 + +/*--------------------------------------------------------------------------- + Commom Type definitons + ---------------------------------------------------------------------------*/ + +//This is to force compiler to use the maximum of an int ( 4 bytes ) +#define WLAN_HAL_MAX_ENUM_SIZE 0x7FFFFFFF +#define WLAN_HAL_MSG_TYPE_MAX_ENUM_SIZE 0x7FFF + +//Max no. of transmit categories +#define STACFG_MAX_TC 8 + +//The maximum value of access category +#define WLAN_HAL_MAX_AC 4 + +typedef tANI_U8 tSirMacAddr[6]; +typedef tANI_U8 tHalIpv4Addr[4]; + +#define HAL_MAC_ADDR_LEN 6 +#define HAL_IPV4_ADDR_LEN 4 + +#define WALN_HAL_STA_INVALID_IDX 0xFF +#define WLAN_HAL_BSS_INVALID_IDX 0xFF + +//Default Beacon template size +#define BEACON_TEMPLATE_SIZE 0x180 + + +//Max Tx Data Rate samples +#define MAX_TX_RATE_SAMPLES 10 +//Max Beacon Rssi samples +#define MAX_BCN_RSSI_SAMPLES 10 + +//Param Change Bitmap sent to HAL +#define PARAM_BCN_INTERVAL_CHANGED (1 << 0) +#define PARAM_SHORT_PREAMBLE_CHANGED (1 << 1) +#define PARAM_SHORT_SLOT_TIME_CHANGED (1 << 2) +#define PARAM_llACOEXIST_CHANGED (1 << 3) +#define PARAM_llBCOEXIST_CHANGED (1 << 4) +#define PARAM_llGCOEXIST_CHANGED (1 << 5) +#define PARAM_HT20MHZCOEXIST_CHANGED (1<<6) +#define PARAM_NON_GF_DEVICES_PRESENT_CHANGED (1<<7) +#define PARAM_RIFS_MODE_CHANGED (1<<8) +#define PARAM_LSIG_TXOP_FULL_SUPPORT_CHANGED (1<<9) +#define PARAM_OBSS_MODE_CHANGED (1<<10) +#define PARAM_BEACON_UPDATE_MASK (PARAM_BCN_INTERVAL_CHANGED|PARAM_SHORT_PREAMBLE_CHANGED|PARAM_SHORT_SLOT_TIME_CHANGED|PARAM_llACOEXIST_CHANGED |PARAM_llBCOEXIST_CHANGED|\ + PARAM_llGCOEXIST_CHANGED|PARAM_HT20MHZCOEXIST_CHANGED|PARAM_NON_GF_DEVICES_PRESENT_CHANGED|PARAM_RIFS_MODE_CHANGED|PARAM_LSIG_TXOP_FULL_SUPPORT_CHANGED| PARAM_OBSS_MODE_CHANGED) + +/*Dump command response Buffer size*/ +#define DUMPCMD_RSP_BUFFER 500 + +/*Version string max length (including NUL) */ +#define WLAN_HAL_VERSION_LENGTH 64 + +#define WLAN_HAL_ROAM_SCAN_MAX_PROBE_SIZE 450 +#define WLAN_HAL_ROAM_SCAN_MAX_CHANNELS NUM_RF_CHANNELS +#define WLAN_HAL_ROAM_SCAN_RESERVED_BYTES 57 + +/* Message types for messages exchanged between WDI and HAL */ +typedef enum +{ + //Init/De-Init + WLAN_HAL_START_REQ = 0, + WLAN_HAL_START_RSP = 1, + WLAN_HAL_STOP_REQ = 2, + WLAN_HAL_STOP_RSP = 3, + + //Scan + WLAN_HAL_INIT_SCAN_REQ = 4, + WLAN_HAL_INIT_SCAN_RSP = 5, + WLAN_HAL_START_SCAN_REQ = 6, + WLAN_HAL_START_SCAN_RSP = 7 , + WLAN_HAL_END_SCAN_REQ = 8, + WLAN_HAL_END_SCAN_RSP = 9, + WLAN_HAL_FINISH_SCAN_REQ = 10, + WLAN_HAL_FINISH_SCAN_RSP = 11, + + // HW STA configuration/deconfiguration + WLAN_HAL_CONFIG_STA_REQ = 12, + WLAN_HAL_CONFIG_STA_RSP = 13, + WLAN_HAL_DELETE_STA_REQ = 14, + WLAN_HAL_DELETE_STA_RSP = 15, + WLAN_HAL_CONFIG_BSS_REQ = 16, + WLAN_HAL_CONFIG_BSS_RSP = 17, + WLAN_HAL_DELETE_BSS_REQ = 18, + WLAN_HAL_DELETE_BSS_RSP = 19, + + //Infra STA asscoiation + WLAN_HAL_JOIN_REQ = 20, + WLAN_HAL_JOIN_RSP = 21, + WLAN_HAL_POST_ASSOC_REQ = 22, + WLAN_HAL_POST_ASSOC_RSP = 23, + + //Security + WLAN_HAL_SET_BSSKEY_REQ = 24, + WLAN_HAL_SET_BSSKEY_RSP = 25, + WLAN_HAL_SET_STAKEY_REQ = 26, + WLAN_HAL_SET_STAKEY_RSP = 27, + WLAN_HAL_RMV_BSSKEY_REQ = 28, + WLAN_HAL_RMV_BSSKEY_RSP = 29, + WLAN_HAL_RMV_STAKEY_REQ = 30, + WLAN_HAL_RMV_STAKEY_RSP = 31, + + //Qos Related + WLAN_HAL_ADD_TS_REQ = 32, + WLAN_HAL_ADD_TS_RSP = 33, + WLAN_HAL_DEL_TS_REQ = 34, + WLAN_HAL_DEL_TS_RSP = 35, + WLAN_HAL_UPD_EDCA_PARAMS_REQ = 36, + WLAN_HAL_UPD_EDCA_PARAMS_RSP = 37, + WLAN_HAL_ADD_BA_REQ = 38, + WLAN_HAL_ADD_BA_RSP = 39, + WLAN_HAL_DEL_BA_REQ = 40, + WLAN_HAL_DEL_BA_RSP = 41, + + WLAN_HAL_CH_SWITCH_REQ = 42, + WLAN_HAL_CH_SWITCH_RSP = 43, + WLAN_HAL_SET_LINK_ST_REQ = 44, + WLAN_HAL_SET_LINK_ST_RSP = 45, + WLAN_HAL_GET_STATS_REQ = 46, + WLAN_HAL_GET_STATS_RSP = 47, + WLAN_HAL_UPDATE_CFG_REQ = 48, + WLAN_HAL_UPDATE_CFG_RSP = 49, + + WLAN_HAL_MISSED_BEACON_IND = 50, + WLAN_HAL_UNKNOWN_ADDR2_FRAME_RX_IND = 51, + WLAN_HAL_MIC_FAILURE_IND = 52, + WLAN_HAL_FATAL_ERROR_IND = 53, + WLAN_HAL_SET_KEYDONE_MSG = 54, + + //NV Interface + WLAN_HAL_DOWNLOAD_NV_REQ = 55, + WLAN_HAL_DOWNLOAD_NV_RSP = 56, + + WLAN_HAL_ADD_BA_SESSION_REQ = 57, + WLAN_HAL_ADD_BA_SESSION_RSP = 58, + WLAN_HAL_TRIGGER_BA_REQ = 59, + WLAN_HAL_TRIGGER_BA_RSP = 60, + WLAN_HAL_UPDATE_BEACON_REQ = 61, + WLAN_HAL_UPDATE_BEACON_RSP = 62, + WLAN_HAL_SEND_BEACON_REQ = 63, + WLAN_HAL_SEND_BEACON_RSP = 64, + + WLAN_HAL_SET_BCASTKEY_REQ = 65, + WLAN_HAL_SET_BCASTKEY_RSP = 66, + WLAN_HAL_DELETE_STA_CONTEXT_IND = 67, + WLAN_HAL_UPDATE_PROBE_RSP_TEMPLATE_REQ = 68, + WLAN_HAL_UPDATE_PROBE_RSP_TEMPLATE_RSP = 69, + + // PTT interface support + WLAN_HAL_PROCESS_PTT_REQ = 70, + WLAN_HAL_PROCESS_PTT_RSP = 71, + + // BTAMP related events + WLAN_HAL_SIGNAL_BTAMP_EVENT_REQ = 72, + WLAN_HAL_SIGNAL_BTAMP_EVENT_RSP = 73, + WLAN_HAL_TL_HAL_FLUSH_AC_REQ = 74, + WLAN_HAL_TL_HAL_FLUSH_AC_RSP = 75, + + WLAN_HAL_ENTER_IMPS_REQ = 76, + WLAN_HAL_EXIT_IMPS_REQ = 77, + WLAN_HAL_ENTER_BMPS_REQ = 78, + WLAN_HAL_EXIT_BMPS_REQ = 79, + WLAN_HAL_ENTER_UAPSD_REQ = 80, + WLAN_HAL_EXIT_UAPSD_REQ = 81, + WLAN_HAL_UPDATE_UAPSD_PARAM_REQ = 82, + WLAN_HAL_CONFIGURE_RXP_FILTER_REQ = 83, + WLAN_HAL_ADD_BCN_FILTER_REQ = 84, + WLAN_HAL_REM_BCN_FILTER_REQ = 85, + WLAN_HAL_ADD_WOWL_BCAST_PTRN = 86, + WLAN_HAL_DEL_WOWL_BCAST_PTRN = 87, + WLAN_HAL_ENTER_WOWL_REQ = 88, + WLAN_HAL_EXIT_WOWL_REQ = 89, + WLAN_HAL_HOST_OFFLOAD_REQ = 90, + WLAN_HAL_SET_RSSI_THRESH_REQ = 91, + WLAN_HAL_GET_RSSI_REQ = 92, + WLAN_HAL_SET_UAPSD_AC_PARAMS_REQ = 93, + WLAN_HAL_CONFIGURE_APPS_CPU_WAKEUP_STATE_REQ = 94, + + WLAN_HAL_ENTER_IMPS_RSP = 95, + WLAN_HAL_EXIT_IMPS_RSP = 96, + WLAN_HAL_ENTER_BMPS_RSP = 97, + WLAN_HAL_EXIT_BMPS_RSP = 98, + WLAN_HAL_ENTER_UAPSD_RSP = 99, + WLAN_HAL_EXIT_UAPSD_RSP = 100, + WLAN_HAL_SET_UAPSD_AC_PARAMS_RSP = 101, + WLAN_HAL_UPDATE_UAPSD_PARAM_RSP = 102, + WLAN_HAL_CONFIGURE_RXP_FILTER_RSP = 103, + WLAN_HAL_ADD_BCN_FILTER_RSP = 104, + WLAN_HAL_REM_BCN_FILTER_RSP = 105, + WLAN_HAL_SET_RSSI_THRESH_RSP = 106, + WLAN_HAL_HOST_OFFLOAD_RSP = 107, + WLAN_HAL_ADD_WOWL_BCAST_PTRN_RSP = 108, + WLAN_HAL_DEL_WOWL_BCAST_PTRN_RSP = 109, + WLAN_HAL_ENTER_WOWL_RSP = 110, + WLAN_HAL_EXIT_WOWL_RSP = 111, + WLAN_HAL_RSSI_NOTIFICATION_IND = 112, + WLAN_HAL_GET_RSSI_RSP = 113, + WLAN_HAL_CONFIGURE_APPS_CPU_WAKEUP_STATE_RSP = 114, + + //11k related events + WLAN_HAL_SET_MAX_TX_POWER_REQ = 115, + WLAN_HAL_SET_MAX_TX_POWER_RSP = 116, + + //11R related msgs + WLAN_HAL_AGGR_ADD_TS_REQ = 117, + WLAN_HAL_AGGR_ADD_TS_RSP = 118, + + //P2P WLAN_FEATURE_P2P + WLAN_HAL_SET_P2P_GONOA_REQ = 119, + WLAN_HAL_SET_P2P_GONOA_RSP = 120, + + //WLAN Dump commands + WLAN_HAL_DUMP_COMMAND_REQ = 121, + WLAN_HAL_DUMP_COMMAND_RSP = 122, + + //OEM_DATA FEATURE SUPPORT + WLAN_HAL_START_OEM_DATA_REQ = 123, + WLAN_HAL_START_OEM_DATA_RSP = 124, + + //ADD SELF STA REQ and RSP + WLAN_HAL_ADD_STA_SELF_REQ = 125, + WLAN_HAL_ADD_STA_SELF_RSP = 126, + + //DEL SELF STA SUPPORT + WLAN_HAL_DEL_STA_SELF_REQ = 127, + WLAN_HAL_DEL_STA_SELF_RSP = 128, + + // Coex Indication + WLAN_HAL_COEX_IND = 129, + + // Tx Complete Indication + WLAN_HAL_OTA_TX_COMPL_IND = 130, + + //Host Suspend/resume messages + WLAN_HAL_HOST_SUSPEND_IND = 131, + WLAN_HAL_HOST_RESUME_REQ = 132, + WLAN_HAL_HOST_RESUME_RSP = 133, + + WLAN_HAL_SET_TX_POWER_REQ = 134, + WLAN_HAL_SET_TX_POWER_RSP = 135, + WLAN_HAL_GET_TX_POWER_REQ = 136, + WLAN_HAL_GET_TX_POWER_RSP = 137, + + WLAN_HAL_P2P_NOA_ATTR_IND = 138, + + WLAN_HAL_ENABLE_RADAR_DETECT_REQ = 139, + WLAN_HAL_ENABLE_RADAR_DETECT_RSP = 140, + WLAN_HAL_GET_TPC_REPORT_REQ = 141, + WLAN_HAL_GET_TPC_REPORT_RSP = 142, + WLAN_HAL_RADAR_DETECT_IND = 143, + WLAN_HAL_RADAR_DETECT_INTR_IND = 144, + WLAN_HAL_KEEP_ALIVE_REQ = 145, + WLAN_HAL_KEEP_ALIVE_RSP = 146, + + /*PNO messages*/ + WLAN_HAL_SET_PREF_NETWORK_REQ = 147, + WLAN_HAL_SET_PREF_NETWORK_RSP = 148, + WLAN_HAL_SET_RSSI_FILTER_REQ = 149, + WLAN_HAL_SET_RSSI_FILTER_RSP = 150, + WLAN_HAL_UPDATE_SCAN_PARAM_REQ = 151, + WLAN_HAL_UPDATE_SCAN_PARAM_RSP = 152, + WLAN_HAL_PREF_NETW_FOUND_IND = 153, + + WLAN_HAL_SET_TX_PER_TRACKING_REQ = 154, + WLAN_HAL_SET_TX_PER_TRACKING_RSP = 155, + WLAN_HAL_TX_PER_HIT_IND = 156, + + WLAN_HAL_8023_MULTICAST_LIST_REQ = 157, + WLAN_HAL_8023_MULTICAST_LIST_RSP = 158, + + WLAN_HAL_SET_PACKET_FILTER_REQ = 159, + WLAN_HAL_SET_PACKET_FILTER_RSP = 160, + WLAN_HAL_PACKET_FILTER_MATCH_COUNT_REQ = 161, + WLAN_HAL_PACKET_FILTER_MATCH_COUNT_RSP = 162, + WLAN_HAL_CLEAR_PACKET_FILTER_REQ = 163, + WLAN_HAL_CLEAR_PACKET_FILTER_RSP = 164, + /*This is temp fix. Should be removed once + * Host and Riva code is in sync*/ + WLAN_HAL_INIT_SCAN_CON_REQ = 165, + + WLAN_HAL_SET_POWER_PARAMS_REQ = 166, + WLAN_HAL_SET_POWER_PARAMS_RSP = 167, + + WLAN_HAL_TSM_STATS_REQ = 168, + WLAN_HAL_TSM_STATS_RSP = 169, + + // wake reason indication (WOW) + WLAN_HAL_WAKE_REASON_IND = 170, + // GTK offload support + WLAN_HAL_GTK_OFFLOAD_REQ = 171, + WLAN_HAL_GTK_OFFLOAD_RSP = 172, + WLAN_HAL_GTK_OFFLOAD_GETINFO_REQ = 173, + WLAN_HAL_GTK_OFFLOAD_GETINFO_RSP = 174, + + WLAN_HAL_FEATURE_CAPS_EXCHANGE_REQ = 175, + WLAN_HAL_FEATURE_CAPS_EXCHANGE_RSP = 176, + WLAN_HAL_EXCLUDE_UNENCRYPTED_IND = 177, + + WLAN_HAL_SET_THERMAL_MITIGATION_REQ = 178, + WLAN_HAL_SET_THERMAL_MITIGATION_RSP = 179, + + WLAN_HAL_UPDATE_VHT_OP_MODE_REQ = 182, + WLAN_HAL_UPDATE_VHT_OP_MODE_RSP = 183, + + WLAN_HAL_P2P_NOA_START_IND = 184, + + WLAN_HAL_GET_ROAM_RSSI_REQ = 185, + WLAN_HAL_GET_ROAM_RSSI_RSP = 186, + + WLAN_HAL_CLASS_B_STATS_IND = 187, + WLAN_HAL_DEL_BA_IND = 188, + WLAN_HAL_DHCP_START_IND = 189, + WLAN_HAL_DHCP_STOP_IND = 190, + WLAN_ROAM_SCAN_OFFLOAD_REQ = 191, + WLAN_ROAM_SCAN_OFFLOAD_RSP = 192, + WLAN_HAL_WIFI_PROXIMITY_REQ = 193, + WLAN_HAL_WIFI_PROXIMITY_RSP = 194, + + WLAN_HAL_START_SPECULATIVE_PS_POLLS_REQ = 195, + WLAN_HAL_START_SPECULATIVE_PS_POLLS_RSP = 196, + WLAN_HAL_STOP_SPECULATIVE_PS_POLLS_IND = 197, + + WLAN_HAL_TDLS_LINK_ESTABLISHED_REQ = 198, + WLAN_HAL_TDLS_LINK_ESTABLISHED_RSP = 199, + WLAN_HAL_TDLS_LINK_TEARDOWN_REQ = 200, + WLAN_HAL_TDLS_LINK_TEARDOWN_RSP = 201, + WLAN_HAL_TDLS_IND = 202, + WLAN_HAL_IBSS_PEER_INACTIVITY_IND = 203, + + /* Scan Offload APIs */ + WLAN_HAL_START_SCAN_OFFLOAD_REQ = 204, + WLAN_HAL_START_SCAN_OFFLOAD_RSP = 205, + WLAN_HAL_STOP_SCAN_OFFLOAD_REQ = 206, + WLAN_HAL_STOP_SCAN_OFFLOAD_RSP = 207, + WLAN_HAL_UPDATE_CHANNEL_LIST_REQ = 208, + WLAN_HAL_UPDATE_CHANNEL_LIST_RSP = 209, + WLAN_HAL_OFFLOAD_SCAN_EVENT_IND = 210, + + /* APIs to offload TCP/UDP Heartbeat handshakes */ + WLAN_HAL_LPHB_CFG_REQ = 211, + WLAN_HAL_LPHB_CFG_RSP = 212, + WLAN_HAL_LPHB_IND = 213, + + WLAN_HAL_ADD_PERIODIC_TX_PTRN_IND = 214, + WLAN_HAL_DEL_PERIODIC_TX_PTRN_IND = 215, + WLAN_HAL_PERIODIC_TX_PTRN_FW_IND = 216, + + // Events to set Per-Band Tx Power Limit + WLAN_HAL_SET_MAX_TX_POWER_PER_BAND_REQ = 217, + WLAN_HAL_SET_MAX_TX_POWER_PER_BAND_RSP = 218, + + /* Reliable Multicast using Leader Based Protocol */ + WLAN_HAL_LBP_LEADER_REQ = 219, + WLAN_HAL_LBP_LEADER_RSP = 220, + WLAN_HAL_LBP_UPDATE_IND = 221, + + /* Batchscan */ + WLAN_HAL_BATCHSCAN_SET_REQ = 222, + WLAN_HAL_BATCHSCAN_SET_RSP = 223, + WLAN_HAL_BATCHSCAN_TRIGGER_RESULT_IND = 224, + WLAN_HAL_BATCHSCAN_RESULT_IND = 225, + WLAN_HAL_BATCHSCAN_STOP_IND = 226, + + WLAN_HAL_GET_IBSS_PEER_INFO_REQ = 227, + WLAN_HAL_GET_IBSS_PEER_INFO_RSP = 228, + + WLAN_HAL_RATE_UPDATE_IND = 229, + + /* Tx Fail for weak link notification */ + WLAN_HAL_TX_FAIL_MONITOR_IND = 230, + WLAN_HAL_TX_FAIL_IND = 231, + + /* Multi-hop IP routing offload */ + WLAN_HAL_IP_FORWARD_TABLE_UPDATE_IND = 232, + + WLAN_HAL_MSG_MAX = WLAN_HAL_MSG_TYPE_MAX_ENUM_SIZE +}tHalHostMsgType; + +/* Enumeration for Version */ +typedef enum +{ + WLAN_HAL_MSG_VERSION0 = 0, + WLAN_HAL_MSG_VERSION1 = 1, + WLAN_HAL_MSG_WCNSS_CTRL_VERSION = 0x7FFF, /*define as 2 bytes data*/ + WLAN_HAL_MSG_VERSION_MAX_FIELD = WLAN_HAL_MSG_WCNSS_CTRL_VERSION +}tHalHostMsgVersion; + +/* Enumeration for Boolean - False/True, On/Off */ +typedef enum tagAniBoolean +{ + eANI_BOOLEAN_FALSE = 0, + eANI_BOOLEAN_TRUE, + eANI_BOOLEAN_OFF = 0, + eANI_BOOLEAN_ON = 1, + eANI_BOOLEAN_MAX_FIELD = 0x7FFFFFFF /* define as 4 bytes data */ +} eAniBoolean; + +typedef enum +{ + eDRIVER_TYPE_PRODUCTION = 0, + eDRIVER_TYPE_MFG = 1, + eDRIVER_TYPE_DVT = 2, + eDRIVER_TYPE_MAX = WLAN_HAL_MAX_ENUM_SIZE +} tDriverType; + +typedef enum +{ + HAL_STOP_TYPE_SYS_RESET, + HAL_STOP_TYPE_SYS_DEEP_SLEEP, + HAL_STOP_TYPE_RF_KILL, + HAL_STOP_TYPE_MAX = WLAN_HAL_MAX_ENUM_SIZE +}tHalStopType; + +typedef enum +{ + eHAL_SYS_MODE_NORMAL, + eHAL_SYS_MODE_LEARN, + eHAL_SYS_MODE_SCAN, + eHAL_SYS_MODE_PROMISC, + eHAL_SYS_MODE_SUSPEND_LINK, + eHAL_SYS_MODE_ROAM_SCAN, + eHAL_SYS_MODE_ROAM_SUSPEND_LINK, + eHAL_SYS_MODE_OEM_DATA, + eHAL_SYS_MODE_MAX = WLAN_HAL_MAX_ENUM_SIZE +} eHalSysMode; + +typedef enum +{ + PHY_SINGLE_CHANNEL_CENTERED = 0, // 20MHz IF bandwidth centered on IF carrier + PHY_DOUBLE_CHANNEL_LOW_PRIMARY = 1, // 40MHz IF bandwidth with lower 20MHz supporting the primary channel + PHY_DOUBLE_CHANNEL_CENTERED = 2, // 40MHz IF bandwidth centered on IF carrier + PHY_DOUBLE_CHANNEL_HIGH_PRIMARY = 3, // 40MHz IF bandwidth with higher 20MHz supporting the primary channel +#ifdef WLAN_FEATURE_11AC + PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_CENTERED = 4, //20/40MHZ offset LOW 40/80MHZ offset CENTERED + PHY_QUADRUPLE_CHANNEL_20MHZ_CENTERED_40MHZ_CENTERED = 5, //20/40MHZ offset CENTERED 40/80MHZ offset CENTERED + PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_CENTERED = 6, //20/40MHZ offset HIGH 40/80MHZ offset CENTERED + PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_LOW = 7,//20/40MHZ offset LOW 40/80MHZ offset LOW + PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_LOW = 8, //20/40MHZ offset HIGH 40/80MHZ offset LOW + PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_HIGH = 9, //20/40MHZ offset LOW 40/80MHZ offset HIGH + PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_HIGH = 10,//20/40MHZ offset-HIGH 40/80MHZ offset HIGH +#endif + PHY_CHANNEL_BONDING_STATE_MAX = WLAN_HAL_MAX_ENUM_SIZE +}ePhyChanBondState; + +// Spatial Multiplexing(SM) Power Save mode +typedef enum eSirMacHTMIMOPowerSaveState +{ + eSIR_HT_MIMO_PS_STATIC = 0, // Static SM Power Save mode + eSIR_HT_MIMO_PS_DYNAMIC = 1, // Dynamic SM Power Save mode + eSIR_HT_MIMO_PS_NA = 2, // reserved + eSIR_HT_MIMO_PS_NO_LIMIT = 3, // SM Power Save disabled + eSIR_HT_MIMO_PS_MAX = WLAN_HAL_MAX_ENUM_SIZE +} tSirMacHTMIMOPowerSaveState; + +/* each station added has a rate mode which specifies the sta attributes */ +typedef enum eStaRateMode { + eSTA_TAURUS = 0, + eSTA_TITAN, + eSTA_POLARIS, + eSTA_11b, + eSTA_11bg, + eSTA_11a, + eSTA_11n, +#ifdef WLAN_FEATURE_11AC + eSTA_11ac, +#endif + eSTA_INVALID_RATE_MODE = WLAN_HAL_MAX_ENUM_SIZE +} tStaRateMode, *tpStaRateMode; + +#define SIR_NUM_11B_RATES 4 //1,2,5.5,11 +#define SIR_NUM_11A_RATES 8 //6,9,12,18,24,36,48,54 +#define SIR_NUM_POLARIS_RATES 3 //72,96,108 + +#define SIR_MAC_MAX_SUPPORTED_MCS_SET 16 + + +typedef enum eSirBssType +{ + eSIR_INFRASTRUCTURE_MODE, + eSIR_INFRA_AP_MODE, //Added for softAP support + eSIR_IBSS_MODE, + eSIR_BTAMP_STA_MODE, //Added for BT-AMP support + eSIR_BTAMP_AP_MODE, //Added for BT-AMP support + eSIR_AUTO_MODE, + eSIR_DONOT_USE_BSS_TYPE = WLAN_HAL_MAX_ENUM_SIZE +} tSirBssType; + +typedef enum eSirNwType +{ + eSIR_11A_NW_TYPE, + eSIR_11B_NW_TYPE, + eSIR_11G_NW_TYPE, + eSIR_11N_NW_TYPE, + eSIR_DONOT_USE_NW_TYPE = WLAN_HAL_MAX_ENUM_SIZE +} tSirNwType; + +typedef tANI_U16 tSirMacBeaconInterval; + +#define SIR_MAC_RATESET_EID_MAX 12 + +typedef enum eSirMacHTOperatingMode +{ + eSIR_HT_OP_MODE_PURE, // No Protection + eSIR_HT_OP_MODE_OVERLAP_LEGACY, // Overlap Legacy device present, protection is optional + eSIR_HT_OP_MODE_NO_LEGACY_20MHZ_HT, // No legacy device, but 20 MHz HT present + eSIR_HT_OP_MODE_MIXED, // Protection is required + eSIR_HT_OP_MODE_MAX = WLAN_HAL_MAX_ENUM_SIZE +} tSirMacHTOperatingMode; + +/// Encryption type enum used with peer +typedef enum eAniEdType +{ + eSIR_ED_NONE, + eSIR_ED_WEP40, + eSIR_ED_WEP104, + eSIR_ED_TKIP, + eSIR_ED_CCMP, + eSIR_ED_WPI, + eSIR_ED_AES_128_CMAC, + eSIR_ED_NOT_IMPLEMENTED = WLAN_HAL_MAX_ENUM_SIZE +} tAniEdType; + +#define WLAN_MAX_KEY_RSC_LEN 16 +#define WLAN_WAPI_KEY_RSC_LEN 16 + +/// MAX key length when ULA is used +#define SIR_MAC_MAX_KEY_LENGTH 32 +#define SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS 4 + +/// Enum to specify whether key is used +/// for TX only, RX only or both +typedef enum eAniKeyDirection +{ + eSIR_TX_ONLY, + eSIR_RX_ONLY, + eSIR_TX_RX, + eSIR_TX_DEFAULT, + eSIR_DONOT_USE_KEY_DIRECTION = WLAN_HAL_MAX_ENUM_SIZE +} tAniKeyDirection; + +typedef enum eAniWepType +{ + eSIR_WEP_STATIC, + eSIR_WEP_DYNAMIC, + eSIR_WEP_MAX = WLAN_HAL_MAX_ENUM_SIZE +} tAniWepType; + +typedef enum eSriLinkState { + + eSIR_LINK_IDLE_STATE = 0, + eSIR_LINK_PREASSOC_STATE = 1, + eSIR_LINK_POSTASSOC_STATE = 2, + eSIR_LINK_AP_STATE = 3, + eSIR_LINK_IBSS_STATE = 4, + + /* BT-AMP Case */ + eSIR_LINK_BTAMP_PREASSOC_STATE = 5, + eSIR_LINK_BTAMP_POSTASSOC_STATE = 6, + eSIR_LINK_BTAMP_AP_STATE = 7, + eSIR_LINK_BTAMP_STA_STATE = 8, + + /* Reserved for HAL Internal Use */ + eSIR_LINK_LEARN_STATE = 9, + eSIR_LINK_SCAN_STATE = 10, + eSIR_LINK_FINISH_SCAN_STATE = 11, + eSIR_LINK_INIT_CAL_STATE = 12, + eSIR_LINK_FINISH_CAL_STATE = 13, +#ifdef WLAN_FEATURE_P2P + eSIR_LINK_LISTEN_STATE = 14, + eSIR_LINK_SEND_ACTION_STATE = 15, +#endif + eSIR_LINK_MAX = WLAN_HAL_MAX_ENUM_SIZE +} tSirLinkState; + +typedef enum +{ + HAL_SUMMARY_STATS_INFO = 0x00000001, + HAL_GLOBAL_CLASS_A_STATS_INFO = 0x00000002, + HAL_GLOBAL_CLASS_B_STATS_INFO = 0x00000004, + HAL_GLOBAL_CLASS_C_STATS_INFO = 0x00000008, + HAL_GLOBAL_CLASS_D_STATS_INFO = 0x00000010, + HAL_PER_STA_STATS_INFO = 0x00000020 +}eHalStatsMask; + +/* BT-AMP events type */ +typedef enum +{ + BTAMP_EVENT_CONNECTION_START, + BTAMP_EVENT_CONNECTION_STOP, + BTAMP_EVENT_CONNECTION_TERMINATED, + BTAMP_EVENT_TYPE_MAX = WLAN_HAL_MAX_ENUM_SIZE, //This and beyond are invalid values +} tBtAmpEventType; + +//*************************************************************** + + +/*******************PE Statistics*************************/ +typedef enum +{ + PE_SUMMARY_STATS_INFO = 0x00000001, + PE_GLOBAL_CLASS_A_STATS_INFO = 0x00000002, + PE_GLOBAL_CLASS_B_STATS_INFO = 0x00000004, + PE_GLOBAL_CLASS_C_STATS_INFO = 0x00000008, + PE_GLOBAL_CLASS_D_STATS_INFO = 0x00000010, + PE_PER_STA_STATS_INFO = 0x00000020, + PE_STATS_TYPE_MAX = WLAN_HAL_MAX_ENUM_SIZE //This and beyond are invalid values +}ePEStatsMask; + +/*--------------------------------------------------------------------------- + Message definitons - All the messages below need to be packed + ---------------------------------------------------------------------------*/ + +#if defined(__ANI_COMPILER_PRAGMA_PACK_STACK) +#pragma pack(push, 1) +#elif defined(__ANI_COMPILER_PRAGMA_PACK) +#pragma pack(1) +#else +#endif + +/// Definition for HAL API Version. +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 revision; + tANI_U8 version; + tANI_U8 minor; + tANI_U8 major; +} tWcnssWlanVersion, *tpWcnssWlanVersion; + +/// Definition for Encryption Keys +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 keyId; + tANI_U8 unicast; // 0 for multicast + tAniKeyDirection keyDirection; + tANI_U8 keyRsc[WLAN_MAX_KEY_RSC_LEN]; // Usage is unknown + tANI_U8 paeRole; // =1 for authenticator,=0 for supplicant + tANI_U16 keyLength; + tANI_U8 key[SIR_MAC_MAX_KEY_LENGTH]; +} tSirKeys, *tpSirKeys; + + +//SetStaKeyParams Moving here since it is shared by configbss/setstakey msgs +typedef PACKED_PRE struct PACKED_POST +{ + /*STA Index*/ + tANI_U16 staIdx; + + /*Encryption Type used with peer*/ + tAniEdType encType; + + /*STATIC/DYNAMIC - valid only for WEP*/ + tAniWepType wepType; + + /*Default WEP key, valid only for static WEP, must between 0 and 3.*/ + tANI_U8 defWEPIdx; + + /* valid only for non-static WEP encyrptions */ + tSirKeys key[SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS]; + + /*Control for Replay Count, 1= Single TID based replay count on Tx + 0 = Per TID based replay count on TX */ + tANI_U8 singleTidRc; + +} tSetStaKeyParams, *tpSetStaKeyParams; + + + +/* 4-byte control message header used by HAL*/ +typedef PACKED_PRE struct PACKED_POST +{ + tHalHostMsgType msgType:16; + tHalHostMsgVersion msgVersion:16; + tANI_U32 msgLen; +} tHalMsgHeader, *tpHalMsgHeader; + +/* Config format required by HAL for each CFG item*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* Cfg Id. The Id required by HAL is exported by HAL + * in shared header file between UMAC and HAL.*/ + tANI_U16 uCfgId; + + /* Length of the Cfg. This parameter is used to go to next cfg + * in the TLV format.*/ + tANI_U16 uCfgLen; + + /* Padding bytes for unaligned address's */ + tANI_U16 uCfgPadBytes; + + /* Reserve bytes for making cfgVal to align address */ + tANI_U16 uCfgReserve; + + /* Following the uCfgLen field there should be a 'uCfgLen' bytes + * containing the uCfgValue ; tANI_U8 uCfgValue[uCfgLen] */ +} tHalCfg, *tpHalCfg; + +/*--------------------------------------------------------------------------- + WLAN_HAL_START_REQ +---------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST sHalMacStartParameters +{ + /* Drive Type - Production or FTM etc */ + tDriverType driverType; + + /*Length of the config buffer*/ + tANI_U32 uConfigBufferLen; + + /* Following this there is a TLV formatted buffer of length + * "uConfigBufferLen" bytes containing all config values. + * The TLV is expected to be formatted like this: + * 0 15 31 31+CFG_LEN-1 length-1 + * | CFG_ID | CFG_LEN | CFG_BODY | CFG_ID |......| + */ +} tHalMacStartParameters, *tpHalMacStartParameters; + +typedef PACKED_PRE struct PACKED_POST +{ + /* Note: The length specified in tHalMacStartReqMsg messages should be + * header.msgLen = sizeof(tHalMacStartReqMsg) + uConfigBufferLen */ + tHalMsgHeader header; + tHalMacStartParameters startReqParams; +} tHalMacStartReqMsg, *tpHalMacStartReqMsg; + +/*--------------------------------------------------------------------------- + WLAN_HAL_START_RSP +---------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST sHalMacStartRspParameters +{ + /*success or failure */ + tANI_U16 status; + + /*Max number of STA supported by the device*/ + tANI_U8 ucMaxStations; + + /*Max number of BSS supported by the device*/ + tANI_U8 ucMaxBssids; + + /*API Version */ + tWcnssWlanVersion wcnssWlanVersion; + + /*CRM build information */ + tANI_U8 wcnssCrmVersionString[WLAN_HAL_VERSION_LENGTH]; + + /*hardware/chipset/misc version information */ + tANI_U8 wcnssWlanVersionString[WLAN_HAL_VERSION_LENGTH]; + +} tHalMacStartRspParams, *tpHalMacStartRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalMacStartRspParams startRspParams; +} tHalMacStartRspMsg, *tpHalMacStartRspMsg; + +/*--------------------------------------------------------------------------- + WLAN_HAL_STOP_REQ +---------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /*The reason for which the device is being stopped*/ + tHalStopType reason; + +}tHalMacStopReqParams, *tpHalMacStopReqParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalMacStopReqParams stopReqParams; +} tHalMacStopReqMsg, *tpHalMacStopReqMsg; + +/*--------------------------------------------------------------------------- + WLAN_HAL_STOP_RSP +---------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /*success or failure */ + tANI_U32 status; + +}tHalMacStopRspParams, *tpHalMacStopRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalMacStopRspParams stopRspParams; +} tHalMacStopRspMsg, *tpHalMacStopRspMsg; + +/*--------------------------------------------------------------------------- + WLAN_HAL_UPDATE_CFG_REQ +---------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /* Length of the config buffer. Allows UMAC to update multiple CFGs */ + tANI_U32 uConfigBufferLen; + + /* Following this there is a TLV formatted buffer of length + * "uConfigBufferLen" bytes containing all config values. + * The TLV is expected to be formatted like this: + * 0 15 31 31+CFG_LEN-1 length-1 + * | CFG_ID | CFG_LEN | CFG_BODY | CFG_ID |......| + */ +} tHalUpdateCfgReqParams, *tpHalUpdateCfgReqParams; + +typedef PACKED_PRE struct PACKED_POST +{ + /* Note: The length specified in tHalUpdateCfgReqMsg messages should be + * header.msgLen = sizeof(tHalUpdateCfgReqMsg) + uConfigBufferLen */ + tHalMsgHeader header; + tHalUpdateCfgReqParams updateCfgReqParams; +} tHalUpdateCfgReqMsg, *tpHalUpdateCfgReqMsg; + +/*--------------------------------------------------------------------------- + WLAN_HAL_UPDATE_CFG_RSP +---------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; + +}tHalUpdateCfgRspParams, *tpHalUpdateCfgRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalUpdateCfgRspParams updateCfgRspParams; +} tHalUpdateCfgRspMsg, *tpHalUpdateCfgRspMsg; + +/*--------------------------------------------------------------------------- + WLAN_HAL_INIT_SCAN_REQ +---------------------------------------------------------------------------*/ + +/// Frame control field format (2 bytes) +typedef __ani_attr_pre_packed struct sSirMacFrameCtl +{ + +#ifndef ANI_LITTLE_BIT_ENDIAN + + tANI_U8 subType :4; + tANI_U8 type :2; + tANI_U8 protVer :2; + + tANI_U8 order :1; + tANI_U8 wep :1; + tANI_U8 moreData :1; + tANI_U8 powerMgmt :1; + tANI_U8 retry :1; + tANI_U8 moreFrag :1; + tANI_U8 fromDS :1; + tANI_U8 toDS :1; + +#else + + tANI_U8 protVer :2; + tANI_U8 type :2; + tANI_U8 subType :4; + + tANI_U8 toDS :1; + tANI_U8 fromDS :1; + tANI_U8 moreFrag :1; + tANI_U8 retry :1; + tANI_U8 powerMgmt :1; + tANI_U8 moreData :1; + tANI_U8 wep :1; + tANI_U8 order :1; + +#endif + +} __ani_attr_packed tSirMacFrameCtl, *tpSirMacFrameCtl; + +/// Sequence control field +typedef __ani_attr_pre_packed struct sSirMacSeqCtl +{ + tANI_U8 fragNum : 4; + tANI_U8 seqNumLo : 4; + tANI_U8 seqNumHi : 8; +} __ani_attr_packed tSirMacSeqCtl, *tpSirMacSeqCtl; + +/// Management header format +typedef __ani_attr_pre_packed struct sSirMacMgmtHdr +{ + tSirMacFrameCtl fc; + tANI_U8 durationLo; + tANI_U8 durationHi; + tANI_U8 da[6]; + tANI_U8 sa[6]; + tANI_U8 bssId[6]; + tSirMacSeqCtl seqControl; +} __ani_attr_packed tSirMacMgmtHdr, *tpSirMacMgmtHdr; + +/// Scan Entry to hold active BSS idx's +typedef __ani_attr_pre_packed struct sSirScanEntry +{ + tANI_U8 bssIdx[HAL_NUM_BSSID]; + tANI_U8 activeBSScnt; +}__ani_attr_packed tSirScanEntry, *ptSirScanEntry; + +typedef PACKED_PRE struct PACKED_POST { + + /*LEARN - AP Role + SCAN - STA Role*/ + eHalSysMode scanMode; + + /*BSSID of the BSS*/ + tSirMacAddr bssid; + + /*Whether BSS needs to be notified*/ + tANI_U8 notifyBss; + + /*Kind of frame to be used for notifying the BSS (Data Null, QoS Null, or + CTS to Self). Must always be a valid frame type.*/ + tANI_U8 frameType; + + /*UMAC has the option of passing the MAC frame to be used for notifying + the BSS. If non-zero, HAL will use the MAC frame buffer pointed to by + macMgmtHdr. If zero, HAL will generate the appropriate MAC frame based on + frameType.*/ + tANI_U8 frameLength; + + /* Following the framelength there is a MAC frame buffer if frameLength + is non-zero. */ + tSirMacMgmtHdr macMgmtHdr; + + /*Entry to hold number of active BSS idx's*/ + tSirScanEntry scanEntry; + +} tInitScanParams, * tpInitScanParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tInitScanParams initScanParams; +} tHalInitScanReqMsg, *tpHalInitScanReqMsg; + +typedef PACKED_PRE struct PACKED_POST { + + /*LEARN - AP Role + SCAN - STA Role*/ + eHalSysMode scanMode; + + /*BSSID of the BSS*/ + tSirMacAddr bssid; + + /*Whether BSS needs to be notified*/ + tANI_U8 notifyBss; + + /*Kind of frame to be used for notifying the BSS (Data Null, QoS Null, or + CTS to Self). Must always be a valid frame type.*/ + tANI_U8 frameType; + + /*UMAC has the option of passing the MAC frame to be used for notifying + the BSS. If non-zero, HAL will use the MAC frame buffer pointed to by + macMgmtHdr. If zero, HAL will generate the appropriate MAC frame based on + frameType.*/ + tANI_U8 frameLength; + + /* Following the framelength there is a MAC frame buffer if frameLength + is non-zero. */ + tSirMacMgmtHdr macMgmtHdr; + + /*Entry to hold number of active BSS idx's*/ + tSirScanEntry scanEntry; + + /* Single NoA usage in Scanning */ + tANI_U8 useNoA; + + /* Indicates the scan duration (in ms) */ + tANI_U16 scanDuration; + +} tInitScanConParams, * tpInitScanConParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tInitScanConParams initScanParams; +} tHalInitScanConReqMsg, *tpHalInitScanConReqMsg; + + +/*--------------------------------------------------------------------------- + WLAN_HAL_INIT_SCAN_RSP +---------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /*success or failure */ + tANI_U32 status; + +}tHalInitScanRspParams, *tpHalInitScanRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalInitScanRspParams initScanRspParams; +} tHalInitScanRspMsg, *tpHalInitScanRspMsg; + +/*--------------------------------------------------------------------------- + WLAN_HAL_START_SCAN_REQ +---------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /*Indicates the channel to scan*/ + tANI_U8 scanChannel; + + } tStartScanParams, * tpStartScanParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tStartScanParams startScanParams; +} tHalStartScanReqMsg, *tpHalStartScanReqMsg; + +/*--------------------------------------------------------------------------- + WLAN_HAL_START_SCAN_RSP +---------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /*success or failure */ + tANI_U32 status; + + tANI_U32 startTSF[2]; + tPowerdBm txMgmtPower; + +}tHalStartScanRspParams, *tpHalStartScanRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalStartScanRspParams startScanRspParams; +} tHalStartScanRspMsg, *tpHalStartScanRspMsg; + +/*--------------------------------------------------------------------------- + WLAN_HAL_END_SCAN_REQ +---------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /*Indicates the channel to stop scanning. Not used really. But retained + for symmetry with "start Scan" message. It can also help in error + check if needed.*/ + tANI_U8 scanChannel; + +} tEndScanParams, *tpEndScanParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tEndScanParams endScanParams; +} tHalEndScanReqMsg, *tpHalEndScanReqMsg; + +/*--------------------------------------------------------------------------- + WLAN_HAL_END_SCAN_RSP +---------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /*success or failure */ + tANI_U32 status; + +}tHalEndScanRspParams, *tpHalEndScanRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalEndScanRspParams endScanRspParams; +} tHalEndScanRspMsg, *tpHalEndScanRspMsg; + +/*--------------------------------------------------------------------------- + WLAN_HAL_FINISH_SCAN_REQ +---------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /* Identifies the operational state of the AP/STA + * LEARN - AP Role SCAN - STA Role */ + eHalSysMode scanMode; + + /*Operating channel to tune to.*/ + tANI_U8 currentOperChannel; + + /*Channel Bonding state If 20/40 MHz is operational, this will indicate the + 40 MHz extension channel in combination with the control channel*/ + ePhyChanBondState cbState; + + /*BSSID of the BSS*/ + tSirMacAddr bssid; + + /*Whether BSS needs to be notified*/ + tANI_U8 notifyBss; + + /*Kind of frame to be used for notifying the BSS (Data Null, QoS Null, or + CTS to Self). Must always be a valid frame type.*/ + tANI_U8 frameType; + + /*UMAC has the option of passing the MAC frame to be used for notifying + the BSS. If non-zero, HAL will use the MAC frame buffer pointed to by + macMgmtHdr. If zero, HAL will generate the appropriate MAC frame based on + frameType.*/ + tANI_U8 frameLength; + + /*Following the framelength there is a MAC frame buffer if frameLength + is non-zero.*/ + tSirMacMgmtHdr macMgmtHdr; + + /*Entry to hold number of active BSS idx's*/ + tSirScanEntry scanEntry; + +} tFinishScanParams, *tpFinishScanParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tFinishScanParams finishScanParams; +} tHalFinishScanReqMsg, *tpHalFinishScanReqMsg; + +/*--------------------------------------------------------------------------- + WLAN_HAL_FINISH_SCAN_RSP +---------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /*success or failure */ + tANI_U32 status; + +}tHalFinishScanRspParams, *tpHalFinishScanRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalFinishScanRspParams finishScanRspParams; +} tHalFinishScanRspMsg, *tpHalFinishScanRspMsg; + +/*--------------------------------------------------------------------------- + WLAN_HAL_CONFIG_STA_REQ +---------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST { + /* + * For Self STA Entry: this represents Self Mode. + * For Peer Stations, this represents the mode of the peer. + * On Station: + * --this mode is updated when PE adds the Self Entry. + * -- OR when PE sends 'ADD_BSS' message and station context in BSS is used to indicate the mode of the AP. + * ON AP: + * -- this mode is updated when PE sends 'ADD_BSS' and Sta entry for that BSS is used + * to indicate the self mode of the AP. + * -- OR when a station is associated, PE sends 'ADD_STA' message with this mode updated. + */ + + tStaRateMode opRateMode; + // 11b, 11a and aniLegacyRates are IE rates which gives rate in unit of 500Kbps + tANI_U16 llbRates[SIR_NUM_11B_RATES]; + tANI_U16 llaRates[SIR_NUM_11A_RATES]; + tANI_U16 aniLegacyRates[SIR_NUM_POLARIS_RATES]; + tANI_U16 reserved; + + //Taurus only supports 26 Titan Rates(no ESF/concat Rates will be supported) + //First 26 bits are reserved for those Titan rates and + //the last 4 bits(bit28-31) for Taurus, 2(bit26-27) bits are reserved. + tANI_U32 aniEnhancedRateBitmap; //Titan and Taurus Rates + + /* + * 0-76 bits used, remaining reserved + * bits 0-15 and 32 should be set. + */ + tANI_U8 supportedMCSSet[SIR_MAC_MAX_SUPPORTED_MCS_SET]; + + /* + * RX Highest Supported Data Rate defines the highest data + * rate that the STA is able to receive, in unites of 1Mbps. + * This value is derived from "Supported MCS Set field" inside + * the HT capability element. + */ + tANI_U16 rxHighestDataRate; + +} tSirSupportedRates, *tpSirSupportedRates; + +typedef PACKED_PRE struct PACKED_POST +{ + /*BSSID of STA*/ + tSirMacAddr bssId; + + /*ASSOC ID, as assigned by UMAC*/ + tANI_U16 assocId; + + /* STA entry Type: 0 - Self, 1 - Other/Peer, 2 - BSSID, 3 - BCAST */ + tANI_U8 staType; + + /*Short Preamble Supported.*/ + tANI_U8 shortPreambleSupported; + + /*MAC Address of STA*/ + tSirMacAddr staMac; + + /*Listen interval of the STA*/ + tANI_U16 listenInterval; + + /*Support for 11e/WMM*/ + tANI_U8 wmmEnabled; + + /*11n HT capable STA*/ + tANI_U8 htCapable; + + /*TX Width Set: 0 - 20 MHz only, 1 - 20/40 MHz*/ + tANI_U8 txChannelWidthSet; + + /*RIFS mode 0 - NA, 1 - Allowed */ + tANI_U8 rifsMode; + + /*L-SIG TXOP Protection mechanism + 0 - No Support, 1 - Supported + SG - there is global field */ + tANI_U8 lsigTxopProtection; + + /*Max Ampdu Size supported by STA. TPE programming. + 0 : 8k , 1 : 16k, 2 : 32k, 3 : 64k */ + tANI_U8 maxAmpduSize; + + /*Max Ampdu density. Used by RA. 3 : 0~7 : 2^(11nAMPDUdensity -4)*/ + tANI_U8 maxAmpduDensity; + + /*Max AMSDU size 1 : 3839 bytes, 0 : 7935 bytes*/ + tANI_U8 maxAmsduSize; + + /*Short GI support for 40Mhz packets*/ + tANI_U8 fShortGI40Mhz; + + /*Short GI support for 20Mhz packets*/ + tANI_U8 fShortGI20Mhz; + + /*Robust Management Frame (RMF) enabled/disabled*/ + tANI_U8 rmfEnabled; + + /* The unicast encryption type in the association */ + tANI_U32 encryptType; + + /*HAL should update the existing STA entry, if this flag is set. UMAC + will set this flag in case of RE-ASSOC, where we want to reuse the old + STA ID. 0 = Add, 1 = Update*/ + tANI_U8 action; + + /*U-APSD Flags: 1b per AC. Encoded as follows: + b7 b6 b5 b4 b3 b2 b1 b0 = + X X X X BE BK VI VO */ + tANI_U8 uAPSD; + + /*Max SP Length*/ + tANI_U8 maxSPLen; + + /*11n Green Field preamble support + 0 - Not supported, 1 - Supported */ + tANI_U8 greenFieldCapable; + + /*MIMO Power Save mode*/ + tSirMacHTMIMOPowerSaveState mimoPS; + + /*Delayed BA Support*/ + tANI_U8 delayedBASupport; + + /*Max AMPDU duration in 32us*/ + tANI_U8 us32MaxAmpduDuration; + + /*HT STA should set it to 1 if it is enabled in BSS. HT STA should set + it to 0 if AP does not support it. This indication is sent to HAL and + HAL uses this flag to pickup up appropriate 40Mhz rates.*/ + tANI_U8 fDsssCckMode40Mhz; + + /* Valid STA Idx when action=Update. Set to 0xFF when invalid! + Retained for backward compalibity with existing HAL code*/ + tANI_U8 staIdx; + + /* BSSID of BSS to which station is associated. Set to 0xFF when invalid. + Retained for backward compalibity with existing HAL code*/ + tANI_U8 bssIdx; + + tANI_U8 p2pCapableSta; + + /*Reserved to align next field on a dword boundary*/ + tANI_U8 reserved; + + /*These rates are the intersection of peer and self capabilities.*/ + tSirSupportedRates supportedRates; + +} tConfigStaParams, *tpConfigStaParams; + +/*------------------------------------------------------------------------ + * WLAN_HAL_CONFIG_STA_REQ + * ----------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST { + /* + * For Self STA Entry: this represents Self Mode. + * For Peer Stations, this represents the mode of the peer. + * On Station: + * --this mode is updated when PE adds the Self Entry. + * -- OR when PE sends 'ADD_BSS' message and station context in BSS is used to indicate the mode of the AP. + * ON AP: + * -- this mode is updated when PE sends 'ADD_BSS' and Sta entry for that BSS is used + * to indicate the self mode of the AP. + * -- OR when a station is associated, PE sends 'ADD_STA' message with this mode updated. + */ + + tStaRateMode opRateMode; + // 11b, 11a and aniLegacyRates are IE rates which gives rate in unit of 500Kbps + tANI_U16 llbRates[SIR_NUM_11B_RATES]; + tANI_U16 llaRates[SIR_NUM_11A_RATES]; + tANI_U16 aniLegacyRates[SIR_NUM_POLARIS_RATES]; + tANI_U16 reserved; + + //Taurus only supports 26 Titan Rates(no ESF/concat Rates will be supported) + //First 26 bits are reserved for those Titan rates and + //the last 4 bits(bit28-31) for Taurus, 2(bit26-27) bits are reserved. + tANI_U32 aniEnhancedRateBitmap; //Titan and Taurus Rates + + /* + * 0-76 bits used, remaining reserved + * bits 0-15 and 32 should be set. + */ + tANI_U8 supportedMCSSet[SIR_MAC_MAX_SUPPORTED_MCS_SET]; + + /* + * RX Highest Supported Data Rate defines the highest data + * rate that the STA is able to receive, in unites of 1Mbps. + * This value is derived from "Supported MCS Set field" inside + * the HT capability element. + */ + tANI_U16 rxHighestDataRate; + + /* Indicates the Maximum MCS that can be received for each number + * of spacial streams */ + tANI_U16 vhtRxMCSMap; + + /*Indicate the highest VHT data rate that the STA is able to receive*/ + tANI_U16 vhtRxHighestDataRate; + + /* Indicates the Maximum MCS that can be transmitted for each number + * of spacial streams */ + tANI_U16 vhtTxMCSMap; + + /*Indicate the highest VHT data rate that the STA is able to transmit*/ + tANI_U16 vhtTxHighestDataRate; + +} tSirSupportedRates_V1, *tpSirSupportedRates_V1; + +typedef PACKED_PRE struct PACKED_POST +{ + /*BSSID of STA*/ + tSirMacAddr bssId; + + /*ASSOC ID, as assigned by UMAC*/ + tANI_U16 assocId; + + /* STA entry Type: 0 - Self, 1 - Other/Peer, 2 - BSSID, 3 - BCAST */ + tANI_U8 staType; + + /*Short Preamble Supported.*/ + tANI_U8 shortPreambleSupported; + + /*MAC Address of STA*/ + tSirMacAddr staMac; + + /*Listen interval of the STA*/ + tANI_U16 listenInterval; + + /*Support for 11e/WMM*/ + tANI_U8 wmmEnabled; + + /*11n HT capable STA*/ + tANI_U8 htCapable; + + /*TX Width Set: 0 - 20 MHz only, 1 - 20/40 MHz*/ + tANI_U8 txChannelWidthSet; + + /*RIFS mode 0 - NA, 1 - Allowed */ + tANI_U8 rifsMode; + + /*L-SIG TXOP Protection mechanism + 0 - No Support, 1 - Supported + SG - there is global field */ + tANI_U8 lsigTxopProtection; + + /*Max Ampdu Size supported by STA. TPE programming. + 0 : 8k , 1 : 16k, 2 : 32k, 3 : 64k */ + tANI_U8 maxAmpduSize; + + /*Max Ampdu density. Used by RA. 3 : 0~7 : 2^(11nAMPDUdensity -4)*/ + tANI_U8 maxAmpduDensity; + + /*Max AMSDU size 1 : 3839 bytes, 0 : 7935 bytes*/ + tANI_U8 maxAmsduSize; + + /*Short GI support for 40Mhz packets*/ + tANI_U8 fShortGI40Mhz; + + /*Short GI support for 20Mhz packets*/ + tANI_U8 fShortGI20Mhz; + + /*Robust Management Frame (RMF) enabled/disabled*/ + tANI_U8 rmfEnabled; + + /* The unicast encryption type in the association */ + tANI_U32 encryptType; + + /*HAL should update the existing STA entry, if this flag is set. UMAC + will set this flag in case of RE-ASSOC, where we want to reuse the old + STA ID. 0 = Add, 1 = Update*/ + tANI_U8 action; + + /*U-APSD Flags: 1b per AC. Encoded as follows: + b7 b6 b5 b4 b3 b2 b1 b0 = + X X X X BE BK VI VO */ + tANI_U8 uAPSD; + + /*Max SP Length*/ + tANI_U8 maxSPLen; + + /*11n Green Field preamble support + 0 - Not supported, 1 - Supported */ + tANI_U8 greenFieldCapable; + + /*MIMO Power Save mode*/ + tSirMacHTMIMOPowerSaveState mimoPS; + + /*Delayed BA Support*/ + tANI_U8 delayedBASupport; + + /*Max AMPDU duration in 32us*/ + tANI_U8 us32MaxAmpduDuration; + + /*HT STA should set it to 1 if it is enabled in BSS. HT STA should set + it to 0 if AP does not support it. This indication is sent to HAL and + HAL uses this flag to pickup up appropriate 40Mhz rates.*/ + tANI_U8 fDsssCckMode40Mhz; + + /* Valid STA Idx when action=Update. Set to 0xFF when invalid! + Retained for backward compalibity with existing HAL code*/ + tANI_U8 staIdx; + + /* BSSID of BSS to which station is associated. Set to 0xFF when invalid. + Retained for backward compalibity with existing HAL code*/ + tANI_U8 bssIdx; + + tANI_U8 p2pCapableSta; + + /*Reserved to align next field on a dword boundary*/ + tANI_U8 htLdpcEnabled:1; + tANI_U8 vhtLdpcEnabled:1; + tANI_U8 vhtTxBFEnabled:1; + tANI_U8 reserved:5; + + /*These rates are the intersection of peer and self capabilities.*/ + tSirSupportedRates_V1 supportedRates; + + tANI_U8 vhtCapable; + tANI_U8 vhtTxChannelWidthSet; + +} tConfigStaParams_V1, *tpConfigStaParams_V1; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + PACKED_PRE union PACKED_POST { + tConfigStaParams configStaParams; + tConfigStaParams_V1 configStaParams_V1; + } uStaParams; +} tConfigStaReqMsg, *tpConfigStaReqMsg; + +/*--------------------------------------------------------------------------- + WLAN_HAL_CONFIG_STA_RSP +---------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /*success or failure */ + tANI_U32 status; + + /* Station index; valid only when 'status' field value SUCCESS */ + tANI_U8 staIdx; + + /* BSSID Index of BSS to which the station is associated */ + tANI_U8 bssIdx; + + /* DPU Index for PTK */ + tANI_U8 dpuIndex; + + /* DPU Index for GTK */ + tANI_U8 bcastDpuIndex; + + /*DPU Index for IGTK */ + tANI_U8 bcastMgmtDpuIdx; + + /*PTK DPU signature*/ + tANI_U8 ucUcastSig; + + /*GTK DPU isignature*/ + tANI_U8 ucBcastSig; + + /* IGTK DPU signature*/ + tANI_U8 ucMgmtSig; + + tANI_U8 p2pCapableSta; + +}tConfigStaRspParams, *tpConfigStaRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tConfigStaRspParams configStaRspParams; +}tConfigStaRspMsg, *tpConfigStaRspMsg; + +/*--------------------------------------------------------------------------- + WLAN_HAL_DELETE_STA_REQ +---------------------------------------------------------------------------*/ + +/* Delete STA Request params */ +typedef PACKED_PRE struct PACKED_POST +{ + /* Index of STA to delete */ + tANI_U8 staIdx; +} tDeleteStaParams, *tpDeleteStaParams; + +/* Delete STA Request message*/ +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tDeleteStaParams delStaParams; +} tDeleteStaReqMsg, *tpDeleteStaReqMsg; + +/*--------------------------------------------------------------------------- + WLAN_HAL_DELETE_STA_RSP +---------------------------------------------------------------------------*/ + +/* Delete STA Response Params */ +typedef PACKED_PRE struct PACKED_POST +{ + /*success or failure */ + tANI_U32 status; + + /* Index of STA deleted */ + tANI_U8 staId; +} tDeleteStaRspParams, *tpDeleteStaRspParams; + +/* Delete STA Response message*/ +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tDeleteStaRspParams delStaRspParams; +} tDeleteStaRspMsg, *tpDeleteStaRspMsg; + +/*--------------------------------------------------------------------------- + WLAN_HAL_CONFIG_BSS_REQ +---------------------------------------------------------------------------*/ + +//12 Bytes long because this structure can be used to represent rate +//and extended rate set IEs. The parser assume this to be at least 12 +typedef __ani_attr_pre_packed struct sSirMacRateSet +{ + tANI_U8 numRates; + tANI_U8 rate[SIR_MAC_RATESET_EID_MAX]; +} __ani_attr_packed tSirMacRateSet; + +// access category record +typedef __ani_attr_pre_packed struct sSirMacAciAifsn +{ +#ifndef ANI_LITTLE_BIT_ENDIAN + tANI_U8 rsvd : 1; + tANI_U8 aci : 2; + tANI_U8 acm : 1; + tANI_U8 aifsn : 4; +#else + tANI_U8 aifsn : 4; + tANI_U8 acm : 1; + tANI_U8 aci : 2; + tANI_U8 rsvd : 1; +#endif +} __ani_attr_packed tSirMacAciAifsn; + +// contention window size +typedef __ani_attr_pre_packed struct sSirMacCW +{ +#ifndef ANI_LITTLE_BIT_ENDIAN + tANI_U8 max : 4; + tANI_U8 min : 4; +#else + tANI_U8 min : 4; + tANI_U8 max : 4; +#endif +} __ani_attr_packed tSirMacCW; + +typedef __ani_attr_pre_packed struct sSirMacEdcaParamRecord +{ + tSirMacAciAifsn aci; + tSirMacCW cw; + tANI_U16 txoplimit; +} __ani_attr_packed tSirMacEdcaParamRecord; + +typedef __ani_attr_pre_packed struct sSirMacSSid +{ + tANI_U8 length; + tANI_U8 ssId[32]; +} __ani_attr_packed tSirMacSSid; + +// Concurrency role. These are generic IDs that identify the various roles +// in the software system. +typedef enum { + HAL_STA_MODE=0, + HAL_STA_SAP_MODE=1, // to support softAp mode . This is misleading. It means AP MODE only. + HAL_P2P_CLIENT_MODE, + HAL_P2P_GO_MODE, + HAL_MONITOR_MODE, +} tHalConMode; + +//This is a bit pattern to be set for each mode +//bit 0 - sta mode +//bit 1 - ap mode +//bit 2 - p2p client mode +//bit 3 - p2p go mode +typedef enum +{ + HAL_STA=1, + HAL_SAP=2, + HAL_STA_SAP=3, //to support sta, softAp mode . This means STA+AP mode + HAL_P2P_CLIENT=4, + HAL_P2P_GO=8, + HAL_MAX_CONCURRENCY_PERSONA=4 +} tHalConcurrencyMode; + +// IFACE PERSONA for different Operating modes +typedef enum +{ + HAL_IFACE_UNKNOWN, + HAL_IFACE_STA_MODE, + HAL_IFACE_P2P_MODE, + HAL_IFACE_MAX +} tHalIfacePersona; + +typedef PACKED_PRE struct PACKED_POST +{ + /* BSSID */ + tSirMacAddr bssId; + + /* Self Mac Address */ + tSirMacAddr selfMacAddr; + + /* BSS type */ + tSirBssType bssType; + + /*Operational Mode: AP =0, STA = 1*/ + tANI_U8 operMode; + + /*Network Type*/ + tSirNwType nwType; + + /*Used to classify PURE_11G/11G_MIXED to program MTU*/ + tANI_U8 shortSlotTimeSupported; + + /*Co-exist with 11a STA*/ + tANI_U8 llaCoexist; + + /*Co-exist with 11b STA*/ + tANI_U8 llbCoexist; + + /*Co-exist with 11g STA*/ + tANI_U8 llgCoexist; + + /*Coexistence with 11n STA*/ + tANI_U8 ht20Coexist; + + /*Non GF coexist flag*/ + tANI_U8 llnNonGFCoexist; + + /*TXOP protection support*/ + tANI_U8 fLsigTXOPProtectionFullSupport; + + /*RIFS mode*/ + tANI_U8 fRIFSMode; + + /*Beacon Interval in TU*/ + tSirMacBeaconInterval beaconInterval; + + /*DTIM period*/ + tANI_U8 dtimPeriod; + + /*TX Width Set: 0 - 20 MHz only, 1 - 20/40 MHz*/ + tANI_U8 txChannelWidthSet; + + /*Operating channel*/ + tANI_U8 currentOperChannel; + + /*Extension channel for channel bonding*/ + tANI_U8 currentExtChannel; + + /*Reserved to align next field on a dword boundary*/ + tANI_U8 reserved; + + /*SSID of the BSS*/ + tSirMacSSid ssId; + + /*HAL should update the existing BSS entry, if this flag is set. + UMAC will set this flag in case of reassoc, where we want to resue the + the old BSSID and still return success 0 = Add, 1 = Update*/ + tANI_U8 action; + + /* MAC Rate Set */ + tSirMacRateSet rateSet; + + /*Enable/Disable HT capabilities of the BSS*/ + tANI_U8 htCapable; + + // Enable/Disable OBSS protection + tANI_U8 obssProtEnabled; + + /*RMF enabled/disabled*/ + tANI_U8 rmfEnabled; + + /*HT Operating Mode operating mode of the 802.11n STA*/ + tSirMacHTOperatingMode htOperMode; + + /*Dual CTS Protection: 0 - Unused, 1 - Used*/ + tANI_U8 dualCTSProtection; + + /* Probe Response Max retries */ + tANI_U8 ucMaxProbeRespRetryLimit; + + /* To Enable Hidden ssid */ + tANI_U8 bHiddenSSIDEn; + + /* To Enable Disable FW Proxy Probe Resp */ + tANI_U8 bProxyProbeRespEn; + + /* Boolean to indicate if EDCA params are valid. UMAC might not have valid + EDCA params or might not desire to apply EDCA params during config BSS. + 0 implies Not Valid ; Non-Zero implies valid*/ + tANI_U8 edcaParamsValid; + + /*EDCA Parameters for Best Effort Access Category*/ + tSirMacEdcaParamRecord acbe; + + /*EDCA Parameters forBackground Access Category*/ + tSirMacEdcaParamRecord acbk; + + /*EDCA Parameters for Video Access Category*/ + tSirMacEdcaParamRecord acvi; + + /*EDCA Parameters for Voice Access Category*/ + tSirMacEdcaParamRecord acvo; + +#ifdef WLAN_FEATURE_VOWIFI_11R + tANI_U8 extSetStaKeyParamValid; //Ext Bss Config Msg if set + tSetStaKeyParams extSetStaKeyParam; //SetStaKeyParams for ext bss msg +#endif + + /* Persona for the BSS can be STA,AP,GO,CLIENT value same as tHalConMode */ + tANI_U8 halPersona; + + tANI_U8 bSpectrumMgtEnable; + + /*HAL fills in the tx power used for mgmt frames in txMgmtPower*/ + tANI_S8 txMgmtPower; + /*maxTxPower has max power to be used after applying the power constraint if any */ + tANI_S8 maxTxPower; + /*Context of the station being added in HW + Add a STA entry for "itself" - + On AP - Add the AP itself in an "STA context" + On STA - Add the AP to which this STA is joining in an "STA context" */ + tConfigStaParams staContext; +} tConfigBssParams, * tpConfigBssParams; + + +/*-------------------------------------------------------------------------- + * WLAN_HAL_CONFIG_BSS_REQ + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* BSSID */ + tSirMacAddr bssId; + + /* Self Mac Address */ + tSirMacAddr selfMacAddr; + + /* BSS type */ + tSirBssType bssType; + + /*Operational Mode: AP =0, STA = 1*/ + tANI_U8 operMode; + + /*Network Type*/ + tSirNwType nwType; + + /*Used to classify PURE_11G/11G_MIXED to program MTU*/ + tANI_U8 shortSlotTimeSupported; + + /*Co-exist with 11a STA*/ + tANI_U8 llaCoexist; + + /*Co-exist with 11b STA*/ + tANI_U8 llbCoexist; + + /*Co-exist with 11g STA*/ + tANI_U8 llgCoexist; + + /*Coexistence with 11n STA*/ + tANI_U8 ht20Coexist; + + /*Non GF coexist flag*/ + tANI_U8 llnNonGFCoexist; + + /*TXOP protection support*/ + tANI_U8 fLsigTXOPProtectionFullSupport; + /*RIFS mode*/ + tANI_U8 fRIFSMode; + + /*Beacon Interval in TU*/ + tSirMacBeaconInterval beaconInterval; + + /*DTIM period*/ + tANI_U8 dtimPeriod; + + /*TX Width Set: 0 - 20 MHz only, 1 - 20/40 MHz*/ + tANI_U8 txChannelWidthSet; + + /*Operating channel*/ + tANI_U8 currentOperChannel; + + /*Extension channel for channel bonding*/ + tANI_U8 currentExtChannel; + + /*Reserved to align next field on a dword boundary*/ + tANI_U8 reserved; + + /*SSID of the BSS*/ + tSirMacSSid ssId; + + /*HAL should update the existing BSS entry, if this flag is set. + UMAC will set this flag in case of reassoc, where we want to resue the + the old BSSID and still return success 0 = Add, 1 = Update*/ + tANI_U8 action; + + /* MAC Rate Set */ + tSirMacRateSet rateSet; + + /*Enable/Disable HT capabilities of the BSS*/ + tANI_U8 htCapable; + + // Enable/Disable OBSS protection + tANI_U8 obssProtEnabled; + + /*RMF enabled/disabled*/ + tANI_U8 rmfEnabled; + + /*HT Operating Mode operating mode of the 802.11n STA*/ + tSirMacHTOperatingMode htOperMode; + + /*Dual CTS Protection: 0 - Unused, 1 - Used*/ + tANI_U8 dualCTSProtection; + + /* Probe Response Max retries */ + tANI_U8 ucMaxProbeRespRetryLimit; + + /* To Enable Hidden ssid */ + tANI_U8 bHiddenSSIDEn; + + /* To Enable Disable FW Proxy Probe Resp */ + tANI_U8 bProxyProbeRespEn; + + /* Boolean to indicate if EDCA params are valid. UMAC might not have valid + EDCA params or might not desire to apply EDCA params during config BSS. + 0 implies Not Valid ; Non-Zero implies valid*/ + tANI_U8 edcaParamsValid; + + /*EDCA Parameters for Best Effort Access Category*/ + tSirMacEdcaParamRecord acbe; + + /*EDCA Parameters forBackground Access Category*/ + tSirMacEdcaParamRecord acbk; + + /*EDCA Parameters for Video Access Category*/ + tSirMacEdcaParamRecord acvi; + + /*EDCA Parameters for Voice Access Category*/ + tSirMacEdcaParamRecord acvo; + +#ifdef WLAN_FEATURE_VOWIFI_11R + tANI_U8 extSetStaKeyParamValid; //Ext Bss Config Msg if set + tSetStaKeyParams extSetStaKeyParam; //SetStaKeyParams for ext bss msg +#endif + + /* Persona for the BSS can be STA,AP,GO,CLIENT value same as tHalConMode */ + tANI_U8 halPersona; + + tANI_U8 bSpectrumMgtEnable; + + /*HAL fills in the tx power used for mgmt frames in txMgmtPower*/ + tANI_S8 txMgmtPower; + /*maxTxPower has max power to be used after applying the power constraint if any */ + tANI_S8 maxTxPower; + /*Context of the station being added in HW + Add a STA entry for "itself" - + On AP - Add the AP itself in an "STA context" + On STA - Add the AP to which this STA is joining in an "STA context" */ + tConfigStaParams_V1 staContext; + + tANI_U8 vhtCapable; + tANI_U8 vhtTxChannelWidthSet; +} tConfigBssParams_V1, * tpConfigBssParams_V1; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + PACKED_PRE union PACKED_POST { + tConfigBssParams configBssParams; + tConfigBssParams_V1 configBssParams_V1; + }uBssParams; +} tConfigBssReqMsg, *tpConfigBssReqMsg; + +/*--------------------------------------------------------------------------- + WLAN_HAL_CONFIG_BSS_RSP +---------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /* Success or Failure */ + tANI_U32 status; + + /* BSS index allocated by HAL */ + tANI_U8 bssIdx; + + /* DPU descriptor index for PTK */ + tANI_U8 dpuDescIndx; + + /* PTK DPU signature */ + tANI_U8 ucastDpuSignature; + + /* DPU descriptor index for GTK*/ + tANI_U8 bcastDpuDescIndx; + + /* GTK DPU signature */ + tANI_U8 bcastDpuSignature; + + /*DPU descriptor for IGTK*/ + tANI_U8 mgmtDpuDescIndx; + + /* IGTK DPU signature */ + tANI_U8 mgmtDpuSignature; + + /* Station Index for BSS entry*/ + tANI_U8 bssStaIdx; + + /* Self station index for this BSS */ + tANI_U8 bssSelfStaIdx; + + /* Bcast station for buffering bcast frames in AP role */ + tANI_U8 bssBcastStaIdx; + + /*MAC Address of STA(PEER/SELF) in staContext of configBSSReq*/ + tSirMacAddr staMac; + + /*HAL fills in the tx power used for mgmt frames in this field. */ + tANI_S8 txMgmtPower; + +} tConfigBssRspParams, * tpConfigBssRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tConfigBssRspParams configBssRspParams; +} tConfigBssRspMsg, *tpConfigBssRspMsg; + +/*--------------------------------------------------------------------------- + WLAN_HAL_DELETE_BSS_REQ +---------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /* BSS index to be deleted */ + tANI_U8 bssIdx; + +} tDeleteBssParams, *tpDeleteBssParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tDeleteBssParams deleteBssParams; +} tDeleteBssReqMsg, *tpDeleteBssReqMsg; + +/*--------------------------------------------------------------------------- + WLAN_HAL_DELETE_BSS_RSP +---------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /* Success or Failure */ + tANI_U32 status; + + /* BSS index that has been deleted */ + tANI_U8 bssIdx; + +} tDeleteBssRspParams, *tpDeleteBssRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tDeleteBssRspParams deleteBssRspParams; +} tDeleteBssRspMsg, *tpDeleteBssRspMsg; + +/*--------------------------------------------------------------------------- + WLAN_HAL_JOIN_REQ +---------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /*Indicates the BSSID to which STA is going to associate*/ + tSirMacAddr bssId; + + /*Indicates the channel to switch to.*/ + tANI_U8 ucChannel; + + /* Self STA MAC */ + tSirMacAddr selfStaMacAddr; + + /*Local power constraint*/ + tANI_U8 ucLocalPowerConstraint; + + /*Secondary channel offset */ + ePhyChanBondState secondaryChannelOffset; + + /*link State*/ + tSirLinkState linkState; + + /* Max TX power */ + tANI_S8 maxTxPower; + +} tHalJoinReqParams, *tpHalJoinReqParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalJoinReqParams joinReqParams; +} tHalJoinReqMsg, *tpHalJoinReqMsg; + +/*--------------------------------------------------------------------------- + WLAN_HAL_JOIN_RSP +---------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /*success or failure */ + tANI_U32 status; + + /* HAL fills in the tx power used for mgmt frames in this field */ + tPowerdBm txMgmtPower; + +}tHalJoinRspParams, *tpHalJoinRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalJoinRspParams joinRspParams; +}tHalJoinRspMsg, *tpHalJoinRspMsg; + +/*--------------------------------------------------------------------------- + WLAN_HAL_POST_ASSOC_REQ +---------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + tConfigStaParams configStaParams; + tConfigBssParams configBssParams; +} tPostAssocReqParams, *tpPostAssocReqParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tPostAssocReqParams postAssocReqParams; +} tPostAssocReqMsg, *tpPostAssocReqMsg; + +/*--------------------------------------------------------------------------- + WLAN_HAL_POST_ASSOC_RSP +---------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + tConfigStaRspParams configStaRspParams; + tConfigBssRspParams configBssRspParams; +} tPostAssocRspParams, *tpPostAssocRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tPostAssocRspParams postAssocRspParams; +} tPostAssocRspMsg, *tpPostAssocRspMsg; + +/*--------------------------------------------------------------------------- + WLAN_HAL_SET_BSSKEY_REQ +---------------------------------------------------------------------------*/ + +/* + * This is used by PE to create a set of WEP keys for a given BSS. + */ +typedef PACKED_PRE struct PACKED_POST +{ + /*BSS Index of the BSS*/ + tANI_U8 bssIdx; + + /*Encryption Type used with peer*/ + tAniEdType encType; + + /*Number of keys*/ + tANI_U8 numKeys; + + /*Array of keys.*/ + tSirKeys key[SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS]; + + /*Control for Replay Count, 1= Single TID based replay count on Tx + 0 = Per TID based replay count on TX */ + tANI_U8 singleTidRc; +} tSetBssKeyParams, *tpSetBssKeyParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tSetBssKeyParams setBssKeyParams; +} tSetBssKeyReqMsg, *tpSetBssKeyReqMsg; + +/* tagged version of set bss key */ +typedef PACKED_PRE struct PACKED_POST +{ + tSetBssKeyReqMsg Msg; + uint32 Tag; +} tSetBssKeyReqMsgTagged; + +/*--------------------------------------------------------------------------- + WLAN_HAL_SET_BSSKEY_RSP +---------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /*success or failure */ + tANI_U32 status; + +} tSetBssKeyRspParams, *tpSetBssKeyRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tSetBssKeyRspParams setBssKeyRspParams; +} tSetBssKeyRspMsg, *tpSetBssKeyRspMsg; + +/*--------------------------------------------------------------------------- + WLAN_HAL_SET_STAKEY_REQ, +---------------------------------------------------------------------------*/ + +/* + * This is used by PE to configure the key information on a given station. + * When the secType is WEP40 or WEP104, the defWEPIdx is used to locate + * a preconfigured key from a BSS the station assoicated with; otherwise + * a new key descriptor is created based on the key field. + */ + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tSetStaKeyParams setStaKeyParams; +} tSetStaKeyReqMsg, *tpSetStaKeyReqMsg; + +/*--------------------------------------------------------------------------- + WLAN_HAL_SET_STAKEY_RSP, +---------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /*success or failure */ + tANI_U32 status; + +} tSetStaKeyRspParams, *tpSetStaKeyRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tSetStaKeyRspParams setStaKeyRspParams; +} tSetStaKeyRspMsg, *tpSetStaKeyRspMsg; + +/*--------------------------------------------------------------------------- + WLAN_HAL_RMV_BSSKEY_REQ, +---------------------------------------------------------------------------*/ +/* + * This is used by PE to remove keys for a given BSS. + */ +typedef PACKED_PRE struct PACKED_POST + +{ + /*BSS Index of the BSS*/ + tANI_U8 bssIdx; + + /*Encryption Type used with peer*/ + tAniEdType encType; + + /*Key Id*/ + tANI_U8 keyId; + + /*STATIC/DYNAMIC. Used in Nullifying in Key Descriptors for Static/Dynamic keys*/ + tAniWepType wepType; + +} tRemoveBssKeyParams, *tpRemoveBssKeyParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tRemoveBssKeyParams removeBssKeyParams; +} tRemoveBssKeyReqMsg, *tpRemoveBssKeyReqMsg; + +/*--------------------------------------------------------------------------- + WLAN_HAL_RMV_BSSKEY_RSP, +---------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /*success or failure */ + tANI_U32 status; + +} tRemoveBssKeyRspParams, *tpRemoveBssKeyRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tRemoveBssKeyRspParams removeBssKeyRspParams; +} tRemoveBssKeyRspMsg, *tpRemoveBssKeyRspMsg; + +/*--------------------------------------------------------------------------- + WLAN_HAL_RMV_STAKEY_REQ, +---------------------------------------------------------------------------*/ +/* + * This is used by PE to Remove the key information on a given station. + */ +typedef PACKED_PRE struct PACKED_POST +{ + /*STA Index*/ + tANI_U16 staIdx; + + /*Encryption Type used with peer*/ + tAniEdType encType; + + /*Key Id*/ + tANI_U8 keyId; + + /*Whether to invalidate the Broadcast key or Unicast key. In case of WEP, + the same key is used for both broadcast and unicast.*/ + tANI_BOOLEAN unicast; + +} tRemoveStaKeyParams, *tpRemoveStaKeyParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tRemoveStaKeyParams removeStaKeyParams; +} tRemoveStaKeyReqMsg, *tpRemoveStaKeyReqMsg; + +/*--------------------------------------------------------------------------- + WLAN_HAL_RMV_STAKEY_RSP, +---------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /*success or failure */ + tANI_U32 status; +} tRemoveStaKeyRspParams, *tpRemoveStaKeyRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tRemoveStaKeyRspParams removeStaKeyRspParams; +} tRemoveStaKeyRspMsg, *tpRemoveStaKeyRspMsg; + +#ifdef FEATURE_OEM_DATA_SUPPORT + +#ifndef OEM_DATA_REQ_SIZE +#ifdef QCA_WIFI_2_0 +#define OEM_DATA_REQ_SIZE 276 +#else +#define OEM_DATA_REQ_SIZE 134 +#endif +#endif + +#ifndef OEM_DATA_RSP_SIZE +#ifdef QCA_WIFI_2_0 +#define OEM_DATA_RSP_SIZE 1720 +#else +#define OEM_DATA_RSP_SIZE 1968 +#endif +#endif + +/*------------------------------------------------------------------------- +WLAN_HAL_START_OEM_DATA_REQ +--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U32 status; + tSirMacAddr selfMacAddr; + tANI_U8 oemDataReq[OEM_DATA_REQ_SIZE]; +} tStartOemDataReqParams, *tpStartOemDataReqParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tStartOemDataReqParams startOemDataReqParams; +} tStartOemDataReqMsg, *tpStartOemDataReqMsg; + +/*------------------------------------------------------------------------- +WLAN_HAL_START_OEM_DATA_RSP +--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 oemDataRsp[OEM_DATA_RSP_SIZE]; +} tStartOemDataRspParams, *tpStartOemDataRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tStartOemDataRspParams startOemDataRspParams; +} tStartOemDataRspMsg, *tpStartOemDataRspMsg; + +#endif + + + +/*--------------------------------------------------------------------------- +WLAN_HAL_CH_SWITCH_REQ +---------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /* Channel number */ + tANI_U8 channelNumber; + + /* Local power constraint */ + tANI_U8 localPowerConstraint; + + /*Secondary channel offset */ + ePhyChanBondState secondaryChannelOffset; + + //HAL fills in the tx power used for mgmt frames in this field. + tPowerdBm txMgmtPower; + + /* Max TX power */ + tPowerdBm maxTxPower; + + /* Self STA MAC */ + tSirMacAddr selfStaMacAddr; + + /*VO WIFI comment: BSSID needed to identify session. As the request has power constraints, + this should be applied only to that session*/ + /* Since MTU timing and EDCA are sessionized, this struct needs to be sessionized and + * bssid needs to be out of the VOWifi feature flag */ + /* V IMP: Keep bssId field at the end of this msg. It is used to mantain backward compatbility + * by way of ignoring if using new host/old FW or old host/new FW since it is at the end of this struct + */ + tSirMacAddr bssId; + +}tSwitchChannelParams, *tpSwitchChannelParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tSwitchChannelParams switchChannelParams; +} tSwitchChannelReqMsg, *tpSwitchChannelReqMsg; + +/*--------------------------------------------------------------------------- +WLAN_HAL_CH_SWITCH_RSP +---------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /* Status */ + tANI_U32 status; + + /* Channel number - same as in request*/ + tANI_U8 channelNumber; + + /* HAL fills in the tx power used for mgmt frames in this field */ + tPowerdBm txMgmtPower; + + /* BSSID needed to identify session - same as in request*/ + tSirMacAddr bssId; + +}tSwitchChannelRspParams, *tpSwitchChannelRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tSwitchChannelRspParams switchChannelRspParams; +} tSwitchChannelRspMsg, *tpSwitchChannelRspMsg; + +/*--------------------------------------------------------------------------- +WLAN_HAL_UPD_EDCA_PARAMS_REQ +---------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /*BSS Index*/ + tANI_U16 bssIdx; + + /* Best Effort */ + tSirMacEdcaParamRecord acbe; + + /* Background */ + tSirMacEdcaParamRecord acbk; + + /* Video */ + tSirMacEdcaParamRecord acvi; + + /* Voice */ + tSirMacEdcaParamRecord acvo; + +} tEdcaParams, *tpEdcaParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tEdcaParams edcaParams; +} tUpdateEdcaParamsReqMsg, *tpUpdateEdcaParamsReqMsg; + +/*--------------------------------------------------------------------------- +WLAN_HAL_UPD_EDCA_PARAMS_RSP +---------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /*success or failure */ + tANI_U32 status; +} tEdcaRspParams, *tpEdcaRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tEdcaRspParams edcaRspParams; +} tUpdateEdcaParamsRspMsg, *tpUpdateEdcaParamsRspMsg; + + + +/*--------------------------------------------------------------------------- + * WLAN_HAL_GET_STATS_REQ + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST + +{ + /* Index of STA to which the statistics */ + tANI_U16 staIdx; + + /* Encryption mode */ + tANI_U8 encMode; + + /* status */ + tANI_U32 status; + + /* Statistics */ + tANI_U32 sendBlocks; + tANI_U32 recvBlocks; + tANI_U32 replays; + tANI_U8 micErrorCnt; + tANI_U32 protExclCnt; + tANI_U16 formatErrCnt; + tANI_U16 unDecryptableCnt; + tANI_U32 decryptErrCnt; + tANI_U32 decryptOkCnt; +} tDpuStatsParams, * tpDpuStatsParams; + +typedef PACKED_PRE struct PACKED_POST +{ + /* Valid STA Idx for per STA stats request */ + tANI_U32 staId; + + /* Categories of stats requested as specified in eHalStatsMask*/ + tANI_U32 statsMask; +}tHalStatsReqParams, *tpHalStatsReqParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalStatsReqParams statsReqParams; +} tHalStatsReqMsg, *tpHalStatsReqMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_GET_STATS_RSP + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U32 retry_cnt[4]; //Total number of packets(per AC) that were successfully transmitted with retries + tANI_U32 multiple_retry_cnt[4]; //The number of MSDU packets and MMPDU frames per AC that the 802.11 + // station successfully transmitted after more than one retransmission attempt + + tANI_U32 tx_frm_cnt[4]; //Total number of packets(per AC) that were successfully transmitted + //(with and without retries, including multi-cast, broadcast) + tANI_U32 rx_frm_cnt; //Total number of packets that were successfully received + //(after appropriate filter rules including multi-cast, broadcast) + tANI_U32 frm_dup_cnt; //Total number of duplicate frames received successfully + tANI_U32 fail_cnt[4]; //Total number packets(per AC) failed to transmit + tANI_U32 rts_fail_cnt; //Total number of RTS/CTS sequence failures for transmission of a packet + tANI_U32 ack_fail_cnt; //Total number packets failed transmit because of no ACK from the remote entity + tANI_U32 rts_succ_cnt; //Total number of RTS/CTS sequence success for transmission of a packet + tANI_U32 rx_discard_cnt; //The sum of the receive error count and dropped-receive-buffer error count. + //HAL will provide this as a sum of (FCS error) + (Fail get BD/PDU in HW) + tANI_U32 rx_error_cnt; //The receive error count. HAL will provide the RxP FCS error global counter. + tANI_U32 tx_byte_cnt; //The sum of the transmit-directed byte count, transmit-multicast byte count + //and transmit-broadcast byte count. HAL will sum TPE UC/MC/BCAST global counters + //to provide this. +}tAniSummaryStatsInfo, *tpAniSummaryStatsInfo; + + +// defines tx_rate_flags +typedef enum eTxRateInfo +{ + eHAL_TX_RATE_LEGACY = 0x1, /* Legacy rates */ + eHAL_TX_RATE_HT20 = 0x2, /* HT20 rates */ + eHAL_TX_RATE_HT40 = 0x4, /* HT40 rates */ + eHAL_TX_RATE_SGI = 0x8, /* Rate with Short guard interval */ + eHAL_TX_RATE_LGI = 0x10, /* Rate with Long guard interval */ + eHAL_TX_RATE_VHT20 = 0x20, /* VHT 20 rates */ + eHAL_TX_RATE_VHT40 = 0x40, /* VHT 20 rates */ + eHAL_TX_RATE_VHT80 = 0x80, /* VHT 20 rates */ + eHAL_TX_RATE_VIRT = 0x100, /* Virtual Rate */ + eHAL_TX_RATE_MAX = WLAN_HAL_MAX_ENUM_SIZE +} tTxrateinfoflags, tTxRateInfoFlags; + + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U32 rx_frag_cnt; //The number of MPDU frames received by the 802.11 station for MSDU packets + //or MMPDU frames + tANI_U32 promiscuous_rx_frag_cnt; //The number of MPDU frames received by the 802.11 station for MSDU packets + //or MMPDU frames when a promiscuous packet filter was enabled + tANI_U32 rx_input_sensitivity; //The receiver input sensitivity referenced to a FER of 8% at an MPDU length + //of 1024 bytes at the antenna connector. Each element of the array shall correspond + //to a supported rate and the order shall be the same as the supporteRates parameter. + tANI_U32 max_pwr; //The maximum transmit power in dBm upto one decimal. + //for eg: if it is 10.5dBm, the value would be 105 + tANI_U32 sync_fail_cnt; //Number of times the receiver failed to synchronize with the incoming signal + //after detecting the sync in the preamble of the transmitted PLCP protocol data unit. + + tANI_U32 tx_rate; //Legacy transmit rate, in units of 500 kbit/sec, for the most + //recently transmitted frame + tANI_U32 mcs_index; //mcs index for HT20 and HT40 rates + tANI_U32 tx_rate_flags; //to differentiate between HT20 and + //HT40 rates; short and long guard interval +}tAniGlobalClassAStatsInfo, *tpAniGlobalClassAStatsInfo; + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U32 rx_wep_unencrypted_frm_cnt; //The number of unencrypted received MPDU frames that the MAC layer discarded when + //the IEEE 802.11 dot11ExcludeUnencrypted management information base (MIB) object + //is enabled + tANI_U32 rx_mic_fail_cnt; //The number of received MSDU packets that that the 802.11 station discarded + //because of MIC failures + tANI_U32 tkip_icv_err; //The number of encrypted MPDU frames that the 802.11 station failed to decrypt + //because of a TKIP ICV error + tANI_U32 aes_ccmp_format_err; //The number of received MPDU frames that the 802.11 discarded because of an + //invalid AES-CCMP format + tANI_U32 aes_ccmp_replay_cnt; //The number of received MPDU frames that the 802.11 station discarded because of + //the AES-CCMP replay protection procedure + tANI_U32 aes_ccmp_decrpt_err; //The number of received MPDU frames that the 802.11 station discarded because of + //errors detected by the AES-CCMP decryption algorithm + tANI_U32 wep_undecryptable_cnt; //The number of encrypted MPDU frames received for which a WEP decryption key was + //not available on the 802.11 station + tANI_U32 wep_icv_err; //The number of encrypted MPDU frames that the 802.11 station failed to decrypt + //because of a WEP ICV error + tANI_U32 rx_decrypt_succ_cnt; //The number of received encrypted packets that the 802.11 station successfully + //decrypted + tANI_U32 rx_decrypt_fail_cnt; //The number of encrypted packets that the 802.11 station failed to decrypt + +}tAniGlobalSecurityStats, *tpAniGlobalSecurityStats; + +typedef PACKED_PRE struct PACKED_POST +{ + tAniGlobalSecurityStats ucStats; + tAniGlobalSecurityStats mcbcStats; +}tAniGlobalClassBStatsInfo, *tpAniGlobalClassBStatsInfo; + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U32 rx_amsdu_cnt; //This counter shall be incremented for a received A-MSDU frame with the stations + //MAC address in the address 1 field or an A-MSDU frame with a group address in the + //address 1 field + tANI_U32 rx_ampdu_cnt; //This counter shall be incremented when the MAC receives an AMPDU from the PHY + tANI_U32 tx_20_frm_cnt; //This counter shall be incremented when a Frame is transmitted only on the + //primary channel + tANI_U32 rx_20_frm_cnt; //This counter shall be incremented when a Frame is received only on the primary channel + tANI_U32 rx_mpdu_in_ampdu_cnt; //This counter shall be incremented by the number of MPDUs received in the A-MPDU + //when an A-MPDU is received + tANI_U32 ampdu_delimiter_crc_err; //This counter shall be incremented when an MPDU delimiter has a CRC error when this + //is the first CRC error in the received AMPDU or when the previous delimiter has been + //decoded correctly +}tAniGlobalClassCStatsInfo, *tpAniGlobalClassCStatsInfo; + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U32 tx_frag_cnt[4]; //The number of MPDU frames that the 802.11 station transmitted and acknowledged + //through a received 802.11 ACK frame + tANI_U32 tx_ampdu_cnt; //This counter shall be incremented when an A-MPDU is transmitted + tANI_U32 tx_mpdu_in_ampdu_cnt; //This counter shall increment by the number of MPDUs in the AMPDU when an A-MPDU + //is transmitted +}tAniPerStaStatsInfo, *tpAniPerStaStatsInfo; + +typedef PACKED_PRE struct PACKED_POST +{ + /* Success or Failure */ + tANI_U32 status; + + /* STA Idx */ + tANI_U32 staId; + + /* Categories of STATS being returned as per eHalStatsMask*/ + tANI_U32 statsMask; + + /* message type is same as the request type */ + tANI_U16 msgType; + + /* length of the entire request, includes the pStatsBuf length too */ + tANI_U16 msgLen; + +} tHalStatsRspParams, *tpHalStatsRspParams; + + + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalStatsRspParams statsRspParams; +} tHalStatsRspMsg, *tpHalStatsRspMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_SET_LINK_ST_REQ + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tSirMacAddr bssid; + tSirLinkState state; + tSirMacAddr selfMacAddr; +} tLinkStateParams, *tpLinkStateParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tLinkStateParams linkStateParams; +} tSetLinkStateReqMsg, *tpSetLinkStateReqMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_SET_LINK_ST_RSP + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /*success or failure */ + tANI_U32 status; +} tLinkStateRspParams, *tpLinkStateRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tLinkStateRspParams linkStateRspParams; +} tSetLinkStateRspMsg, *tpSetLinkStateRspMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_ADD_TS_REQ + *--------------------------------------------------------------------------*/ + +/* TSPEC Params */ +typedef __ani_attr_pre_packed struct sSirMacTSInfoTfc +{ + tANI_U16 trafficType : 1; + tANI_U16 tsid : 4; + tANI_U16 direction : 2; + tANI_U16 accessPolicy : 2; + tANI_U16 aggregation : 1; + tANI_U16 psb : 1; + tANI_U16 userPrio : 3; + tANI_U16 ackPolicy : 2; +} __ani_attr_packed tSirMacTSInfoTfc; + +/* Flag to schedule the traffic type */ +typedef __ani_attr_pre_packed struct sSirMacTSInfoSch +{ + tANI_U8 schedule : 1; + tANI_U8 rsvd : 7; +} __ani_attr_packed tSirMacTSInfoSch; + +/* Traffic and scheduling info */ +typedef __ani_attr_pre_packed struct sSirMacTSInfo +{ + tSirMacTSInfoTfc traffic; + tSirMacTSInfoSch schedule; +} __ani_attr_packed tSirMacTSInfo; + +/* Information elements */ +typedef __ani_attr_pre_packed struct sSirMacTspecIE +{ + tANI_U8 type; + tANI_U8 length; + tSirMacTSInfo tsinfo; + tANI_U16 nomMsduSz; + tANI_U16 maxMsduSz; + tANI_U32 minSvcInterval; + tANI_U32 maxSvcInterval; + tANI_U32 inactInterval; + tANI_U32 suspendInterval; + tANI_U32 svcStartTime; + tANI_U32 minDataRate; + tANI_U32 meanDataRate; + tANI_U32 peakDataRate; + tANI_U32 maxBurstSz; + tANI_U32 delayBound; + tANI_U32 minPhyRate; + tANI_U16 surplusBw; + tANI_U16 mediumTime; +}__ani_attr_packed tSirMacTspecIE; + +typedef PACKED_PRE struct PACKED_POST +{ + /* Station Index */ + tANI_U16 staIdx; + + /* TSPEC handler uniquely identifying a TSPEC for a STA in a BSS */ + tANI_U16 tspecIdx; + + /* To program TPE with required parameters */ + tSirMacTspecIE tspec; + + /* U-APSD Flags: 1b per AC. Encoded as follows: + b7 b6 b5 b4 b3 b2 b1 b0 = + X X X X BE BK VI VO */ + tANI_U8 uAPSD; + + /* These parameters are for all the access categories */ + tANI_U32 srvInterval[WLAN_HAL_MAX_AC]; // Service Interval + tANI_U32 susInterval[WLAN_HAL_MAX_AC]; // Suspend Interval + tANI_U32 delayInterval[WLAN_HAL_MAX_AC]; // Delay Interval + +} tAddTsParams, *tpAddTsParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tAddTsParams addTsParams; +} tAddTsReqMsg, *tpAddTsReqMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_ADD_TS_RSP + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /*success or failure */ + tANI_U32 status; +} tAddTsRspParams, *tpAddTsRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tAddTsRspParams addTsRspParams; +} tAddTsRspMsg, *tpAddTsRspMsg; + + +/*--------------------------------------------------------------------------- + * WLAN_HAL_DEL_TS_REQ + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /* Station Index */ + tANI_U16 staIdx; + + /* TSPEC identifier uniquely identifying a TSPEC for a STA in a BSS */ + tANI_U16 tspecIdx; + + /* To lookup station id using the mac address */ + tSirMacAddr bssId; + +} tDelTsParams, *tpDelTsParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tDelTsParams delTsParams; +} tDelTsReqMsg, *tpDelTsReqMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_DEL_TS_RSP + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /*success or failure */ + tANI_U32 status; +} tDelTsRspParams, *tpDelTsRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tDelTsRspParams delTsRspParams; +} tDelTsRspMsg, *tpDelTsRspMsg; + +/* End of TSpec Parameters */ + +/* Start of BLOCK ACK related Parameters */ + +/*--------------------------------------------------------------------------- + * WLAN_HAL_ADD_BA_SESSION_REQ + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /* Station Index */ + tANI_U16 staIdx; + + /* Peer MAC Address */ + tSirMacAddr peerMacAddr; + + /* ADDBA Action Frame dialog token + HAL will not interpret this object */ + tANI_U8 baDialogToken; + + /* TID for which the BA is being setup + This identifies the TC or TS of interest */ + tANI_U8 baTID; + + /* 0 - Delayed BA (Not supported) + 1 - Immediate BA */ + tANI_U8 baPolicy; + + /* Indicates the number of buffers for this TID (baTID) + NOTE - This is the requested buffer size. When this + is processed by HAL and subsequently by HDD, it is + possible that HDD may change this buffer size. Any + change in the buffer size should be noted by PE and + advertized appropriately in the ADDBA response */ + tANI_U16 baBufferSize; + + /* BA timeout in TU's 0 means no timeout will occur */ + tANI_U16 baTimeout; + + /* b0..b3 - Fragment Number - Always set to 0 + b4..b15 - Starting Sequence Number of first MSDU + for which this BA is setup */ + tANI_U16 baSSN; + + /* ADDBA direction + 1 - Originator + 0 - Recipient */ + tANI_U8 baDirection; +} tAddBASessionParams, *tpAddBASessionParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tAddBASessionParams addBASessionParams; +}tAddBASessionReqMsg, *tpAddBASessionReqMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_ADD_BA_SESSION_RSP + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /*success or failure */ + tANI_U32 status; + + /* Dialog token */ + tANI_U8 baDialogToken; + + /* TID for which the BA session has been setup */ + tANI_U8 baTID; + + /* BA Buffer Size allocated for the current BA session */ + tANI_U8 baBufferSize; + + tANI_U8 baSessionID; + + /* Reordering Window buffer */ + tANI_U8 winSize; + + /*Station Index to id the sta */ + tANI_U8 STAID; + + /* Starting Sequence Number */ + tANI_U16 SSN; +} tAddBASessionRspParams, *tpAddBASessionRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tAddBASessionRspParams addBASessionRspParams; +} tAddBASessionRspMsg, *tpAddBASessionRspMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_ADD_BA_REQ + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /* Session Id */ + tANI_U8 baSessionID; + + /* Reorder Window Size */ + tANI_U8 winSize; + +#ifdef FEATURE_ON_CHIP_REORDERING + tANI_BOOLEAN isReorderingDoneOnChip; +#endif +} tAddBAParams, *tpAddBAParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tAddBAParams addBAParams; +} tAddBAReqMsg, *tpAddBAReqMsg; + + +/*--------------------------------------------------------------------------- + * WLAN_HAL_ADD_BA_RSP + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /*success or failure */ + tANI_U32 status; + + /* Dialog token */ + tANI_U8 baDialogToken; + +} tAddBARspParams, *tpAddBARspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tAddBARspParams addBARspParams; +} tAddBARspMsg, *tpAddBARspMsg; + + +/*--------------------------------------------------------------------------- + * WLAN_HAL_TRIGGER_BA_REQ + *--------------------------------------------------------------------------*/ + + +typedef struct sAddBaInfo +{ + tANI_U16 fBaEnable : 1; + tANI_U16 startingSeqNum: 12; + tANI_U16 reserved : 3; +}tAddBaInfo, *tpAddBaInfo; + +typedef struct sTriggerBaRspCandidate +{ + tSirMacAddr staAddr; + tAddBaInfo baInfo[STACFG_MAX_TC]; +}tTriggerBaRspCandidate, *tpTriggerBaRspCandidate; + +typedef struct sTriggerBaCandidate +{ + tANI_U8 staIdx; + tANI_U8 tidBitmap; +}tTriggerBaReqCandidate, *tptTriggerBaReqCandidate; + +typedef PACKED_PRE struct PACKED_POST +{ + /* Session Id */ + tANI_U8 baSessionID; + + /* baCandidateCnt is followed by trigger BA + * Candidate List(tTriggerBaCandidate) + */ + tANI_U16 baCandidateCnt; + +} tTriggerBAParams, *tpTriggerBAParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tTriggerBAParams triggerBAParams; +} tTriggerBAReqMsg, *tpTriggerBAReqMsg; + + +/*--------------------------------------------------------------------------- + * WLAN_HAL_TRIGGER_BA_RSP + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + + /* TO SUPPORT BT-AMP */ + tSirMacAddr bssId; + + /* success or failure */ + tANI_U32 status; + + /* baCandidateCnt is followed by trigger BA + * Rsp Candidate List(tTriggerRspBaCandidate) + */ + tANI_U16 baCandidateCnt; + + +} tTriggerBARspParams, *tpTriggerBARspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tTriggerBARspParams triggerBARspParams; +} tTriggerBARspMsg, *tpTriggerBARspMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_DEL_BA_REQ + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /* Station Index */ + tANI_U16 staIdx; + + /* TID for which the BA session is being deleted */ + tANI_U8 baTID; + + /* DELBA direction + 1 - Originator + 0 - Recipient */ + tANI_U8 baDirection; +} tDelBAParams, *tpDelBAParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tDelBAParams delBAParams; +} tDelBAReqMsg, *tpDelBAReqMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_DEL_BA_RSP + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; +} tDelBARspParams, *tpDelBARspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tDelBARspParams delBARspParams; +} tDelBARspMsg, *tpDelBARspMsg; + + +#ifdef FEATURE_WLAN_CCX + +/*--------------------------------------------------------------------------- + * WLAN_HAL_TSM_STATS_REQ + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* Traffic Id */ + tANI_U8 tsmTID; + + tSirMacAddr bssId; +} tTsmStatsParams, *tpTsmStatsParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tTsmStatsParams tsmStatsParams; +} tTsmStatsReqMsg, *tpTsmStatsReqMsg; + + +/*--------------------------------------------------------------------------- + * WLAN_HAL_TSM_STATS_RSP + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /*success or failure */ + tANI_U32 status; + + /* Uplink Packet Queue delay */ + tANI_U16 UplinkPktQueueDly; + + /* Uplink Packet Queue delay histogram */ + tANI_U16 UplinkPktQueueDlyHist[4]; + + /* Uplink Packet Transmit delay */ + tANI_U32 UplinkPktTxDly; + + /* Uplink Packet loss */ + tANI_U16 UplinkPktLoss; + + /* Uplink Packet count */ + tANI_U16 UplinkPktCount; + + /* Roaming count */ + tANI_U8 RoamingCount; + + /* Roaming Delay */ + tANI_U16 RoamingDly; +} tTsmStatsRspParams, *tpTsmStatsRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tTsmStatsRspParams tsmStatsRspParams; +} tTsmStatsRspMsg, *tpTsmStatsRspMsg; + + +#endif + +/*--------------------------------------------------------------------------- + * WLAN_HAL_SET_KEYDONE_MSG + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /*bssid of the keys */ + tANI_U8 bssidx; + tANI_U8 encType; +} tSetKeyDoneParams, *tpSetKeyDoneParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tSetKeyDoneParams setKeyDoneParams; +} tSetKeyDoneMsg, *tpSetKeyDoneMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_DOWNLOAD_NV_REQ + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* Fragment sequence number of the NV Image. Note that NV Image might not + * fit into one message due to size limitation of the SMD channel FIFO. UMAC + * can hence choose to chop the NV blob into multiple fragments starting with + * seqeunce number 0, 1, 2 etc. The last fragment MUST be indicated by + * marking the isLastFragment field to 1. Note that all the NV blobs would be + * concatenated together by HAL without any padding bytes in between.*/ + tANI_U16 fragNumber; + + /* Is this the last fragment? When set to 1 it indicates that no more fragments + * will be sent by UMAC and HAL can concatenate all the NV blobs rcvd & proceed + * with the parsing. HAL would generate a WLAN_HAL_DOWNLOAD_NV_RSP to the + * WLAN_HAL_DOWNLOAD_NV_REQ after it receives each fragment */ + tANI_U16 isLastFragment; + + /* NV Image size (number of bytes) */ + tANI_U32 nvImgBufferSize; + + /* Following the 'nvImageBufferSize', there should be nvImageBufferSize + * bytes of NV Image i.e. uint8[nvImageBufferSize] */ +} tHalNvImgDownloadReqParams, *tpHalNvImgDownloadReqParams; + +typedef PACKED_PRE struct PACKED_POST +{ + /* Note: The length specified in tHalNvImgDownloadReqMsg messages should be + * header.msgLen = sizeof(tHalNvImgDownloadReqMsg) + nvImgBufferSize */ + tHalMsgHeader header; + tHalNvImgDownloadReqParams nvImageReqParams; +} tHalNvImgDownloadReqMsg, *tpHalNvImgDownloadReqMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_DOWNLOAD_NV_RSP + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* Success or Failure. HAL would generate a WLAN_HAL_DOWNLOAD_NV_RSP + * after each fragment */ + tANI_U32 status; +} tHalNvImgDownloadRspParams, *tpHalNvImgDownloadRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalNvImgDownloadRspParams nvImageRspParams; +} tHalNvImgDownloadRspMsg, *tpHalNvImgDownloadRspMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_STORE_NV_IND + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* NV Item */ + eNvTable tableID; + + /* Size of NV Blob */ + tANI_U32 nvBlobSize; + + /* Following the 'nvBlobSize', there should be nvBlobSize bytes of + * NV blob i.e. uint8[nvBlobSize] */ +} tHalNvStoreParams, *tpHalNvStoreParams; + +typedef PACKED_PRE struct PACKED_POST +{ + /* Note: The length specified in tHalNvStoreInd messages should be + * header.msgLen = sizeof(tHalNvStoreInd) + nvBlobSize */ + tHalMsgHeader header; + tHalNvStoreParams nvStoreParams; +} tHalNvStoreInd, *tpHalNvStoreInd; + +/* End of Block Ack Related Parameters */ + +/*--------------------------------------------------------------------------- + * WLAN_HAL_MIC_FAILURE_IND + *--------------------------------------------------------------------------*/ + +#define SIR_CIPHER_SEQ_CTR_SIZE 6 + +typedef PACKED_PRE struct PACKED_POST +{ + tSirMacAddr srcMacAddr; //address used to compute MIC + tSirMacAddr taMacAddr; //transmitter address + tSirMacAddr dstMacAddr; + tANI_U8 multicast; + tANI_U8 IV1; // first byte of IV + tANI_U8 keyId; // second byte of IV + tANI_U8 TSC[SIR_CIPHER_SEQ_CTR_SIZE]; // sequence number + tSirMacAddr rxMacAddr; // receive address +} tSirMicFailureInfo, *tpSirMicFailureInfo; + +/* Definition for MIC failure indication + MAC reports this each time a MIC failure occures on Rx TKIP packet + */ +typedef PACKED_PRE struct PACKED_POST +{ + tSirMacAddr bssId; // BSSID + tSirMicFailureInfo info; +} tSirMicFailureInd, *tpSirMicFailureInd; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tSirMicFailureInd micFailureInd; +} tMicFailureIndMsg, *tpMicFailureIndMsg; + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U16 opMode; + tANI_U16 staId; +}tUpdateVHTOpMode, *tpUpdateVHTOpMode; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tUpdateVHTOpMode updateVhtOpMode; +} tUpdateVhtOpModeReqMsg, *tpUpdateVhtOpModeReqMsg; + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U32 status; +} tUpdateVhtOpModeParamsRsp, *tpUpdateVhtOpModeParamsRsp; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tUpdateVhtOpModeParamsRsp updateVhtOpModeRspParam; +} tUpdateVhtOpModeParamsRspMsg, *tpUpdateVhtOpModeParamsRspMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_UPDATE_BEACON_REQ + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + + tANI_U8 bssIdx; + + //shortPreamble mode. HAL should update all the STA rates when it + //receives this message + tANI_U8 fShortPreamble; + //short Slot time. + tANI_U8 fShortSlotTime; + //Beacon Interval + tANI_U16 beaconInterval; + //Protection related + tANI_U8 llaCoexist; + tANI_U8 llbCoexist; + tANI_U8 llgCoexist; + tANI_U8 ht20MhzCoexist; + tANI_U8 llnNonGFCoexist; + tANI_U8 fLsigTXOPProtectionFullSupport; + tANI_U8 fRIFSMode; + + tANI_U16 paramChangeBitmap; +}tUpdateBeaconParams, *tpUpdateBeaconParams; + + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tUpdateBeaconParams updateBeaconParam; +} tUpdateBeaconReqMsg, *tpUpdateBeaconReqMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_UPDATE_BEACON_RSP + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U32 status; +} tUpdateBeaconRspParams, *tpUpdateBeaconRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tUpdateBeaconRspParams updateBeaconRspParam; +} tUpdateBeaconRspMsg, *tpUpdateBeaconRspMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_SEND_BEACON_REQ + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U32 beaconLength; //length of the template. + tANI_U8 beacon[BEACON_TEMPLATE_SIZE]; // Beacon data. + tSirMacAddr bssId; + tANI_U32 timIeOffset; //TIM IE offset from the beginning of the template. + tANI_U16 p2pIeOffset; //P2P IE offset from the begining of the template +}tSendBeaconParams, *tpSendBeaconParams; + + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tSendBeaconParams sendBeaconParam; +}tSendBeaconReqMsg, *tpSendBeaconReqMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_SEND_BEACON_RSP + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U32 status; +} tSendBeaconRspParams, *tpSendBeaconRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tSendBeaconRspParams sendBeaconRspParam; +} tSendBeaconRspMsg, *tpSendBeaconRspMsg; + +#ifdef FEATURE_5GHZ_BAND + +/*--------------------------------------------------------------------------- + * WLAN_HAL_ENABLE_RADAR_DETECT_REQ + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tSirMacAddr BSSID; + tANI_U8 channel; +}tSirEnableRadarInfoType, *tptSirEnableRadarInfoType; + + +typedef PACKED_PRE struct PACKED_POST +{ + /* Link Parameters */ + tSirEnableRadarInfoType EnableRadarInfo; +}tEnableRadarReqParams, *tpEnableRadarReqParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tEnableRadarReqParams enableRadarReqParams; +}tEnableRadarReqMsg, *tpEnableRadarReqMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_ENABLE_RADAR_DETECT_RSP + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /* Link Parameters */ + tSirMacAddr BSSID; + /* success or failure */ + tANI_U32 status; +}tEnableRadarRspParams, *tpEnableRadarRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tEnableRadarRspParams enableRadarRspParams; +}tEnableRadarRspMsg, *tpEnableRadarRspMsg; + +/*--------------------------------------------------------------------------- + *WLAN_HAL_RADAR_DETECT_INTR_IND + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 radarDetChannel; +}tRadarDetectIntrIndParams, *tpRadarDetectIntrIndParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tRadarDetectIntrIndParams radarDetectIntrIndParams; +}tRadarDetectIntrIndMsg, *tptRadarDetectIntrIndMsg; + +/*--------------------------------------------------------------------------- + *WLAN_HAL_RADAR_DETECT_IND + *-------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /*channel number in which the RADAR detected*/ + tANI_U8 channelNumber; + + /*RADAR pulse width*/ + tANI_U16 radarPulseWidth; // in usecond + + /*Number of RADAR pulses */ + tANI_U16 numRadarPulse; +}tRadarDetectIndParams,*tpRadarDetectIndParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tRadarDetectIndParams radarDetectIndParams; +}tRadarDetectIndMsg, *tptRadarDetectIndMsg; + + +/*--------------------------------------------------------------------------- + *WLAN_HAL_GET_TPC_REPORT_REQ + *-------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tSirMacAddr sta; + tANI_U8 dialogToken; + tANI_U8 txpower; +}tSirGetTpcReportReqParams, *tpSirGetTpcReportReqParams; + + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tSirGetTpcReportReqParams getTpcReportReqParams; +}tSirGetTpcReportReqMsg, *tpSirGetTpcReportReqMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_GET_TPC_REPORT_RSP + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; +}tSirGetTpcReportRspParams, *tpSirGetTpcReportRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tSirGetTpcReportRspParams getTpcReportRspParams; +}tSirGetTpcReportRspMsg, *tpSirGetTpcReportRspMsg; + +#endif + +/*--------------------------------------------------------------------------- + *WLAN_HAL_UPDATE_PROBE_RSP_TEMPLATE_REQ + *-------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 pProbeRespTemplate[BEACON_TEMPLATE_SIZE]; + tANI_U32 probeRespTemplateLen; + tANI_U32 ucProxyProbeReqValidIEBmap[8]; + tSirMacAddr bssId; + +}tSendProbeRespReqParams, *tpSendProbeRespReqParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tSendProbeRespReqParams sendProbeRespReqParams ; +}tSendProbeRespReqMsg, *tpSendProbeRespReqMsg; + +/*--------------------------------------------------------------------------- + *WLAN_HAL_UPDATE_PROBE_RSP_TEMPLATE_RSP + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; +}tSendProbeRespRspParams, *tpSendProbeRespRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tSendProbeRespRspParams sendProbeRespRspParams; +}tSendProbeRespRspMsg, *tpSendProbeRespRspMsg; + + +/*--------------------------------------------------------------------------- + *WLAN_HAL_UNKNOWN_ADDR2_FRAME_RX_IND + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; +}tSendUnkownFrameRxIndParams, *tpSendUnkownFrameRxIndParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tSendUnkownFrameRxIndParams sendUnkownFrameRxIndParams; +}tSendUnkownFrameRxIndMsg, *tpSendUnkownFrameRxIndMsg; + +/*--------------------------------------------------------------------------- + *WLAN_HAL_DELETE_STA_CONTEXT_IND + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U16 assocId; + tANI_U16 staId; + tSirMacAddr bssId; // TO SUPPORT BT-AMP + // HAL copies bssid from the sta table. + tSirMacAddr addr2; // + tANI_U16 reasonCode; // To unify the keepalive / unknown A2 / tim-based disa + +}tDeleteStaContextParams, *tpDeleteStaContextParams; + + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tDeleteStaContextParams deleteStaContextParams; +}tDeleteStaContextIndMsg, *tpDeleteStaContextIndMsg; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tANI_U8 assocId; + tANI_U8 staIdx; + tANI_U8 bssIdx; + tANI_U8 uReasonCode; + tANI_U32 uStatus; +} tIndicateDelSta, *tpIndicateDelSta; + +/*--------------------------------------------------------------------------- + *WLAN_HAL_SIGNAL_BTAMP_EVENT_REQ + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + tBtAmpEventType btAmpEventType; + +}tBtAmpEventParams, *tpBtAmpEventParams; + + + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tBtAmpEventParams btAmpEventParams; +}tBtAmpEventMsg, *tpBtAmpEventMsg; + +/*--------------------------------------------------------------------------- +*WLAN_HAL_SIGNAL_BTAMP_EVENT_RSP +*--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; +}tBtAmpEventRspParams, *tpBtAmpEventRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tBtAmpEventRspParams btAmpEventRspParams; +}tBtAmpEventRsp, *tpBtAmpEventRsp; + + +/*--------------------------------------------------------------------------- + *WLAN_HAL_TL_HAL_FLUSH_AC_REQ + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + // Station Index. originates from HAL + tANI_U8 ucSTAId; + + // TID for which the transmit queue is being flushed + tANI_U8 ucTid; + +}tTlHalFlushAcParams, *tpTlHalFlushAcParams; + + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tTlHalFlushAcParams tlHalFlushAcParam; +}tTlHalFlushAcReq, *tpTlHalFlushAcReq; + +/*--------------------------------------------------------------------------- +*WLAN_HAL_TL_HAL_FLUSH_AC_RSP +*--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + // Station Index. originates from HAL + tANI_U8 ucSTAId; + + // TID for which the transmit queue is being flushed + tANI_U8 ucTid; + + /* success or failure */ + tANI_U32 status; +}tTlHalFlushAcRspParams, *tpTlHalFlushAcRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tTlHalFlushAcRspParams tlHalFlushAcRspParam; +}tTlHalFlushAcRspMsg, *tpTlHalFlushAcRspMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_ENTER_IMPS_REQ + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; +} tHalEnterImpsReqMsg, *tpHalEnterImpsReqMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_EXIT_IMPS_REQ + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; +} tHalExitImpsReqMsg, *tpHalExitImpsReqMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_ENTER_BMPS_REQ + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 bssIdx; + //TBTT value derived from the last beacon +#ifndef BUILD_QWPTTSTATIC + tANI_U64 tbtt; +#endif + tANI_U8 dtimCount; + //DTIM period given to HAL during association may not be valid, + //if association is based on ProbeRsp instead of beacon. + tANI_U8 dtimPeriod; + + // For CCX and 11R Roaming + tANI_U32 rssiFilterPeriod; + tANI_U32 numBeaconPerRssiAverage; + tANI_U8 bRssiFilterEnable; + +} tHalEnterBmpsReqParams, *tpHalEnterBmpsReqParams; + + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalEnterBmpsReqParams enterBmpsReq; +} tHalEnterBmpsReqMsg, *tpHalEnterBmpsReqMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_EXIT_BMPS_REQ + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 sendDataNull; + tANI_U8 bssIdx; +} tHalExitBmpsReqParams, *tpHalExitBmpsReqParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalExitBmpsReqParams exitBmpsReqParams; +} tHalExitBmpsReqMsg, *tpHalExitBmpsReqMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_MISSED_BEACON_IND + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 bssIdx; +} tHalMissedBeaconIndParams, *tpHalMissedBeaconIndParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalMissedBeaconIndParams missedBeaconIndParams; +} tHalMissedBeaconIndMsg, *tpHalMissedBeaconIndMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_ADD_BCN_FILTER_REQ + *--------------------------------------------------------------------------*/ +/* Beacon Filtering data structures */ +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 offset; + tANI_U8 value; + tANI_U8 bitMask; + tANI_U8 ref; +} tEidByteInfo, *tpEidByteInfo; + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U16 capabilityInfo; + tANI_U16 capabilityMask; + tANI_U16 beaconInterval; + tANI_U16 ieNum; + tANI_U8 bssIdx; + tANI_U8 reserved; +} tBeaconFilterMsg, *tpBeaconFilterMsg; + +/* The above structure would be followed by multiple of below mentioned structure */ +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 elementId; + tANI_U8 checkIePresence; + tEidByteInfo byte; +} tBeaconFilterIe, *tpBeaconFilterIe; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tBeaconFilterMsg addBcnFilterParams; +} tHalAddBcnFilterReqMsg, *tpHalAddBcnFilterReqMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_REM_BCN_FILTER_REQ + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 ucIeCount; + tANI_U8 ucRemIeId[1]; +} tRemBeaconFilterMsg, *tpRemBeaconFilterMsg; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tRemBeaconFilterMsg remBcnFilterParams; +} tHalRemBcnFilterReqMsg, *tpHalRemBcnFilterReqMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_HOST_OFFLOAD_REQ + *--------------------------------------------------------------------------*/ +#define HAL_IPV4_ARP_REPLY_OFFLOAD 0 +#define HAL_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD 1 +#define HAL_IPV6_NS_OFFLOAD 2 +#define HAL_IPV6_ADDR_LEN 16 +#define HAL_MAC_ADDR_LEN 6 +#define HAL_OFFLOAD_DISABLE 0 +#define HAL_OFFLOAD_ENABLE 1 +#define HAL_OFFLOAD_BCAST_FILTER_ENABLE 0x2 +#define HAL_OFFLOAD_MCAST_FILTER_ENABLE 0x4 +#define HAL_OFFLOAD_ARP_AND_BCAST_FILTER_ENABLE (HAL_OFFLOAD_ENABLE|HAL_OFFLOAD_BCAST_FILTER_ENABLE) +#define HAL_OFFLOAD_IPV6NS_AND_MCAST_FILTER_ENABLE (HAL_OFFLOAD_ENABLE|HAL_OFFLOAD_MCAST_FILTER_ENABLE) + +typedef PACKED_PRE struct PACKED_POST _tHalNSOffloadParams +{ + tANI_U8 srcIPv6Addr[HAL_IPV6_ADDR_LEN]; + tANI_U8 selfIPv6Addr[HAL_IPV6_ADDR_LEN]; + //Only support 2 possible Network Advertisement IPv6 address + tANI_U8 targetIPv6Addr1[HAL_IPV6_ADDR_LEN]; + tANI_U8 targetIPv6Addr2[HAL_IPV6_ADDR_LEN]; + tANI_U8 selfMacAddr[HAL_MAC_ADDR_LEN]; + tANI_U8 srcIPv6AddrValid : 1; + tANI_U8 targetIPv6Addr1Valid : 1; + tANI_U8 targetIPv6Addr2Valid : 1; + tANI_U8 reserved1 : 5; + tANI_U8 reserved2; //make it DWORD aligned + tANI_U8 bssIdx; + tANI_U32 slotIndex; // slot index for this offload +} tHalNSOffloadParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 offloadType; + tANI_U8 enableOrDisable; + PACKED_PRE union PACKED_POST + { + tANI_U8 hostIpv4Addr [4]; + tANI_U8 hostIpv6Addr [HAL_IPV6_ADDR_LEN]; + } params; +} tHalHostOffloadReq, *tpHalHostOffloadReq; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalHostOffloadReq hostOffloadParams; + tHalNSOffloadParams nsOffloadParams; +} tHalHostOffloadReqMsg, *tpHalHostOffloadReqMsg; + + +#ifdef FEATURE_WLAN_LPHB +typedef enum +{ + WIFI_HB_SET_ENABLE = 0x0001, + WIFI_HB_SET_TCP_PARAMS = 0x0002, + WIFI_HB_SET_TCP_PKT_FILTER = 0x0003, + WIFI_HB_SET_UDP_PARAMS = 0x0004, + WIFI_HB_SET_UDP_PKT_FILTER = 0x0005, + WIFI_HB_SET_NETWORK_INFO = 0x0006, +}tLowPowerHeartBeatCmdType ; + +#define MAX_FLITER_SIZE 64 +/*--------------------------------------------------------------------------- + *FEATURE_WLAN_LPHB REQ + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + uint32 hostIpv4Addr; + uint32 destIpv4Addr; + uint16 hostPort; + uint16 destPort; + uint16 timeOutSec; // in seconds + tSirMacAddr gatewayMacAddr; + uint16 timePeriodSec; // in seconds + uint32 tcpSn; +} tlowPowerHeartBeatParamsTcpStruct; + +typedef PACKED_PRE struct PACKED_POST +{ + uint32 hostIpv4Addr; + uint32 destIpv4Addr; + uint16 hostPort; + uint16 destPort; + uint16 timePeriodSec;// in seconds + uint16 timeOutSec; // in seconds + tSirMacAddr gatewayMacAddr; +} tlowPowerHeartBeatParamsUdpStruct; + +typedef PACKED_PRE struct PACKED_POST +{ + uint32 offset; + uint32 filterLength; + uint8 filter[MAX_FLITER_SIZE]; +} tlowPowerHeartBeatFilterStruct; + +typedef PACKED_PRE struct PACKED_POST +{ + uint8 heartBeatEnable; + uint8 heartBeatType; //TCP or UDP +} tlowPowerHeartBeatEnableStruct; + +typedef PACKED_PRE struct PACKED_POST +{ + uint8 dummy; +} tlowPowerHeartBeatNetworkInfoStruct; + + +typedef PACKED_PRE struct PACKED_POST +{ + uint8 sessionIdx; + uint16 lowPowerHeartBeatCmdType; + PACKED_PRE union PACKED_PRO + { + tlowPowerHeartBeatEnableStruct control; + tlowPowerHeartBeatFilterStruct tcpUdpFilter; + tlowPowerHeartBeatParamsTcpStruct tcpParams; + tlowPowerHeartBeatParamsUdpStruct udpParams; + tlowPowerHeartBeatNetworkInfoStruct info; + }options; +} tHalLowPowerHeartBeatReq, *tpHalLowPowerHeartBeatReq; + + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalLowPowerHeartBeatReq lowPowerHeartBeatParams; +} tHalLowPowerHeartBeatReqMsg, *tpHalLowPowerHeartBeatReqMsg; + +/*--------------------------------------------------------------------------- + * FEATURE_WLAN_LPHB RSP + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + uint8 sessionIdx; + uint32 status; + uint16 lowPowerHeartBeatCmdType; +}tHalLowPowerHeartBeatRspParams, *tpHalLowPowerHeartBeatRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalLowPowerHeartBeatRspParams lowPowerHeartBeatRspParams; +}tHalLowPowerHeartBeatRspMsg, *tpHalLowPowerHeartBeatRspMsg; + + +/*--------------------------------------------------------------------------- + * FEATURE_WLAN_LPHB IND + *--------------------------------------------------------------------------*/ +#define WIFI_HB_EVENT_TCP_RX_TIMEOUT 0x0001 +#define WIFI_HB_EVENT_UDP_RX_TIMEOUT 0x0002 + +#define WIFI_LPHB_EVENT_REASON_TIMEOUT 0x01 +#define WIFI_LPHB_EVENT_REASON_FW_ON_MONITOR 0x02 +#define WIFI_LPHB_EVENT_REASON_FW_OFF_MONITOR 0x03 + + +#define WIFI_LPHB_PROTO_UDP 0x01 +#define WIFI_LPHB_PROTO_TCP 0x02 + +typedef PACKED_PRE struct PACKED_POST +{ + uint8 bssIdx; + uint8 sessionIdx; + uint8 protocolType; /*TCP or UDP*/ + uint8 eventReason; + +}tHalLowPowerHeartBeatIndParam,*tpHalLowPowerHeartBeatIndParam; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalLowPowerHeartBeatIndParam lowPowerHeartBeatIndParams; +}tHalLowPowerHeartBeatIndMsg, *tpHalLowPowerHeartBeatIndMsg; + +#endif + +#ifdef FEATURE_WLAN_BATCH_SCAN + +/*--------------------------------------------------------------------------- + * WLAN_HAL_BATCHSCAN_SET_REQ + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* Scan Frerquency - default to 30Sec*/ + tANI_U32 scanInterval; + tANI_U32 numScan2Batch; + tANI_U32 bestNetworks; + tANI_U8 rfBand; + tANI_U8 rtt; +} tHalBatchScanSetParams, *tpHalBatchScanSetParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalBatchScanSetParams batchScanParams; +} tHalBatchScanSetReqMsg, *tpHalBatchScanSetReqMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_BATCHSCAN_SET_RSP + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U32 supportedMscan; +} tHalBatchScanSetRspParam, *tpHalBatchScanSetRspParam; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalBatchScanSetRspParam setBatchScanRspParam; +} tHalBatchScanSetRspMsg, *tpHalBatchScanSetRspMsg; + +/*--------------------------------------------------------------------------- +* WLAN_HAL_BATCHSCAN_STOP_IND +*--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U32 param; +} tHalBatchScanStopIndParam, *tpHalBatchScanStopIndParam; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalBatchScanStopIndParam param; +} tHalBatchScanStopIndMsg, *tpHalBatchScanStopIndMsg; + +/*--------------------------------------------------------------------------- +* WLAN_HAL_BATCHSCAN_TRIGGER_RESULT_IND +*--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U32 param; +} tHalBatchScanTriggerResultParam, *tpHalBatchScanTriggerResultParam; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalBatchScanTriggerResultParam param; +} tHalBatchScanTriggerResultIndMsg, *tpHalBatchScanTriggerResultIndMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_BATCHSCAN_GET_RSP + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 bssid[6]; /* BSSID */ + tANI_U8 ssid[32]; /* SSID */ + tANI_U8 ch; /* Channel */ + tANI_U8 rssi; /* RSSI or Level */ + /* Timestamp when Network was found. Used to calculate age based on timestamp in GET_RSP msg header */ + tANI_U32 timestamp; +} tHalBatchScanNetworkInfo, *tpHalBatchScanNetworkInfo; + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U32 scanId; /* Scan List ID. */ + /* No of AP in a Scan Result. Should be same as bestNetwork in SET_REQ msg */ + tANI_U32 numNetworksInScanList; + /* Variable data ptr: Number of AP in Scan List */ + /* following numNetworkInScanList is data of type tHalBatchScanNetworkInfo + * of sizeof(tHalBatchScanNetworkInfo) * numNetworkInScanList */ + tANI_U8 scanList[1]; +} tHalBatchScanList, *tpHalBatchScanList; + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U32 timestamp; + tANI_U32 numScanLists; + boolean isLastResult; + /* Variable Data ptr: Number of Scan Lists*/ + /* following isLastResult is data of type tHalBatchScanList + * of sizeof(tHalBatchScanList) * numScanLists*/ + tANI_U8 scanResults[1]; +} tHalBatchScanResultIndParam, *tpHalBatchScanResultIndParam; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalBatchScanResultIndParam resultIndMsgParam; +} tHalBatchScanResultIndMsg, *tpHalBatchScanResultIndMsg; + +#endif + +/*--------------------------------------------------------------------------- + * WLAN_HAL_KEEP_ALIVE_REQ + *--------------------------------------------------------------------------*/ +/* Packet Types. */ +#define HAL_KEEP_ALIVE_NULL_PKT 1 +#define HAL_KEEP_ALIVE_UNSOLICIT_ARP_RSP 2 + +/* Enable or disable keep alive */ +#define HAL_KEEP_ALIVE_DISABLE 0 +#define HAL_KEEP_ALIVE_ENABLE 1 + +/* Keep Alive request. */ +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 packetType; + tANI_U32 timePeriod; + tHalIpv4Addr hostIpv4Addr; + tHalIpv4Addr destIpv4Addr; + tSirMacAddr destMacAddr; + tANI_U8 bssIdx; +} tHalKeepAliveReq, *tpHalKeepAliveReq; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalKeepAliveReq KeepAliveParams; +} tHalKeepAliveReqMsg, *tpHalKeepAliveReqMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_SET_RSSI_THRESH_REQ + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tANI_S8 ucRssiThreshold1 : 8; + tANI_S8 ucRssiThreshold2 : 8; + tANI_S8 ucRssiThreshold3 : 8; + tANI_U8 bRssiThres1PosNotify : 1; + tANI_U8 bRssiThres1NegNotify : 1; + tANI_U8 bRssiThres2PosNotify : 1; + tANI_U8 bRssiThres2NegNotify : 1; + tANI_U8 bRssiThres3PosNotify : 1; + tANI_U8 bRssiThres3NegNotify : 1; + tANI_U8 bReserved10 : 2; +} tHalRSSIThresholds, *tpHalRSSIThresholds; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalRSSIThresholds rssiThreshParams; +} tHalRSSIThresholdReqMsg, *tpHalRSSIThresholdReqMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_ENTER_UAPSD_REQ + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 bkDeliveryEnabled:1; + tANI_U8 beDeliveryEnabled:1; + tANI_U8 viDeliveryEnabled:1; + tANI_U8 voDeliveryEnabled:1; + tANI_U8 bkTriggerEnabled:1; + tANI_U8 beTriggerEnabled:1; + tANI_U8 viTriggerEnabled:1; + tANI_U8 voTriggerEnabled:1; + tANI_U8 bssIdx; +} tUapsdReqParams, *tpUapsdReqParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tUapsdReqParams enterUapsdParams; +} tHalEnterUapsdReqMsg, *tpHalEnterUapsdReqMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_EXIT_UAPSD_REQ + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tANI_U8 bssIdx; +} tHalExitUapsdReqMsg, *tpHalExitUapsdReqMsg; + +#define HAL_PERIODIC_TX_PTRN_MAX_SIZE 1536 +#define HAL_MAXNUM_PERIODIC_TX_PTRNS 6 +/*--------------------------------------------------------------------------- + * WLAN_HAL_ADD_PERIODIC_TX_PTRN_IND + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U32 selfStaIdx:8; + tANI_U32 ucPtrnId:8; // Pattern ID + tANI_U32 usPtrnSize:16; // Non-Zero Pattern size + tANI_U32 uPtrnIntervalMs; // In msec + tANI_U8 ucPattern[HAL_PERIODIC_TX_PTRN_MAX_SIZE]; // Pattern buffer +} tHalAddPeriodicTxPtrn, *tpHalAddPeriodicTxPtrn; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalAddPeriodicTxPtrn ptrnParams; +} tHalAddPeriodicTxPtrnIndMsg, *tpHalAddPeriodicTxPtrnIndMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_DEL_PERIODIC_TX_PTRN_IND + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U32 selfStaIdx:8; + tANI_U32 rsvd:24; + /* Bitmap of pattern IDs that needs to be deleted */ + tANI_U32 uPatternIdBitmap; +} tHalDelPeriodicTxPtrn, *tpHalDelPeriodicTxPtrn; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalDelPeriodicTxPtrn ptrnParams; +} tHalDelPeriodicTxPtrnIndMsg, *tpHalDelPeriodicTxPtrnIndMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_PERIODIC_TX_PTRN_FW_IND + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* Type of Failure indication */ + tANI_U32 bssIdx:8; + tANI_U32 selfStaIdx:8; + tANI_U32 rsvd:16; + tANI_U32 status; + tANI_U32 patternIdBitmap; +} tHalPeriodicTxPtrnFwInd, *tpHalPeriodicTxPtrnFwInd; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalPeriodicTxPtrnFwInd fwIndParams; +} tHalPeriodicTxPtrnFwIndMsg, *tpHalPeriodicTxPtrnFwIndMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_ADD_WOWL_BCAST_PTRN + *--------------------------------------------------------------------------*/ +#define HAL_WOWL_BCAST_PATTERN_MAX_SIZE 128 +#define HAL_WOWL_BCAST_MAX_NUM_PATTERNS 16 + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 ucPatternId; // Pattern ID + // Pattern byte offset from beginning of the 802.11 packet to start of the + // wake-up pattern + tANI_U8 ucPatternByteOffset; + tANI_U8 ucPatternSize; // Non-Zero Pattern size + tANI_U8 ucPattern[HAL_WOWL_BCAST_PATTERN_MAX_SIZE]; // Pattern + tANI_U8 ucPatternMaskSize; // Non-zero pattern mask size + tANI_U8 ucPatternMask[HAL_WOWL_BCAST_PATTERN_MAX_SIZE]; // Pattern mask + tANI_U8 ucPatternExt[HAL_WOWL_BCAST_PATTERN_MAX_SIZE]; // Extra pattern + tANI_U8 ucPatternMaskExt[HAL_WOWL_BCAST_PATTERN_MAX_SIZE]; // Extra pattern mask + tANI_U8 bssIdx; +} tHalWowlAddBcastPtrn, *tpHalWowlAddBcastPtrn; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalWowlAddBcastPtrn ptrnParams; +} tHalWowlAddBcastPtrnReqMsg, *tpHalWowlAddBcastPtrnReqMsg; + + + +/*--------------------------------------------------------------------------- + * WLAN_HAL_DEL_WOWL_BCAST_PTRN + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* Pattern ID of the wakeup pattern to be deleted */ + tANI_U8 ucPatternId; + tANI_U8 bssIdx; +} tHalWowlDelBcastPtrn, *tpHalWowlDelBcastPtrn; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalWowlDelBcastPtrn ptrnParams; +} tHalWowlDelBcastPtrnReqMsg, *tpHalWowlDelBcastPtrnReqMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_ENTER_WOWL_REQ + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* Enables/disables magic packet filtering */ + tANI_U8 ucMagicPktEnable; + + /* Magic pattern */ + tSirMacAddr magicPtrn; + + /* Enables/disables packet pattern filtering in firmware. + Enabling this flag enables broadcast pattern matching + in Firmware. If unicast pattern matching is also desired, + ucUcastPatternFilteringEnable flag must be set tot true + as well + */ + tANI_U8 ucPatternFilteringEnable; + + /* Enables/disables unicast packet pattern filtering. + This flag specifies whether we want to do pattern match + on unicast packets as well and not just broadcast packets. + This flag has no effect if the ucPatternFilteringEnable + (main controlling flag) is set to false + */ + tANI_U8 ucUcastPatternFilteringEnable; + + /* This configuration is valid only when magicPktEnable=1. + * It requests hardware to wake up when it receives the + * Channel Switch Action Frame. + */ + tANI_U8 ucWowChnlSwitchRcv; + + /* This configuration is valid only when magicPktEnable=1. + * It requests hardware to wake up when it receives the + * Deauthentication Frame. + */ + tANI_U8 ucWowDeauthRcv; + + /* This configuration is valid only when magicPktEnable=1. + * It requests hardware to wake up when it receives the + * Disassociation Frame. + */ + tANI_U8 ucWowDisassocRcv; + + /* This configuration is valid only when magicPktEnable=1. + * It requests hardware to wake up when it has missed + * consecutive beacons. This is a hardware register + * configuration (NOT a firmware configuration). + */ + tANI_U8 ucWowMaxMissedBeacons; + + /* This configuration is valid only when magicPktEnable=1. + * This is a timeout value in units of microsec. It requests + * hardware to unconditionally wake up after it has stayed + * in WoWLAN mode for some time. Set 0 to disable this feature. + */ + tANI_U8 ucWowMaxSleepUsec; + + /* This configuration directs the WoW packet filtering to look for EAP-ID + * requests embedded in EAPOL frames and use this as a wake source. + */ + tANI_U8 ucWoWEAPIDRequestEnable; + + /* This configuration directs the WoW packet filtering to look for EAPOL-4WAY + * requests and use this as a wake source. + */ + tANI_U8 ucWoWEAPOL4WayEnable; + + /* This configuration allows a host wakeup on an network scan offload match. + */ + tANI_U8 ucWowNetScanOffloadMatch; + + /* This configuration allows a host wakeup on any GTK rekeying error. + */ + tANI_U8 ucWowGTKRekeyError; + + /* This configuration allows a host wakeup on BSS connection loss. + */ + tANI_U8 ucWoWBSSConnLoss; + + tANI_U8 bssIdx; + +} tHalWowlEnterParams, *tpHalWowlEnterParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalWowlEnterParams enterWowlParams; +} tHalWowlEnterReqMsg, *tpHalWowlEnterReqMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_EXIT_WOWL_REQ + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 bssIdx; + +} tHalWowlExitParams, *tpHalWowlExitParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalWowlExitParams exitWowlParams; +} tHalWowlExitReqMsg, *tpHalWowlExitReqMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_GET_RSSI_REQ + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; +} tHalGetRssiReqMsg, *tpHalGetRssiReqMsg; + +typedef PACKED_PRE struct PACKED_POST +{ + /* Valid STA Idx for per STA stats request */ + tANI_U32 staId; + +}tHalRoamRssiReqParams, *tpHalRoamRssiReqParams; + + +/*--------------------------------------------------------------------------- + * WLAN_HAL_GET_ROAM_RSSI_REQ + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalRoamRssiReqParams roamRssiReqParams; +} tHalGetRoamRssiReqMsg, *tpHalGetRoamRssiReqMsg; + + +/*--------------------------------------------------------------------------- + * WLAN_HAL_SET_UAPSD_AC_PARAMS_REQ + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST { + tANI_U8 staidx; // STA index + tANI_U8 ac; // Access Category + tANI_U8 up; // User Priority + tANI_U32 srvInterval; // Service Interval + tANI_U32 susInterval; // Suspend Interval + tANI_U32 delayInterval; // Delay Interval +} tUapsdInfo, tpUapsdInfo; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tUapsdInfo enableUapsdAcParams; +} tHalSetUapsdAcParamsReqMsg, *tpHalSetUapsdAcParamsReqMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_CONFIGURE_RXP_FILTER_REQ + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST { + tANI_U8 setMcstBcstFilterSetting; + tANI_U8 setMcstBcstFilter; +} tHalConfigureRxpFilterReqParams, tpHalConfigureRxpFilterReqParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalConfigureRxpFilterReqParams configureRxpFilterReqParams; +} tHalConfigureRxpFilterReqMsg, *tpHalConfigureRxpFilterReqMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_ENTER_IMPS_RSP + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; +} tHalEnterImpsRspParams, *tpHalEnterImpsRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalEnterImpsRspParams enterImpsRspParams; +} tHalEnterImpsRspMsg, *tpHalEnterImpsRspMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_EXIT_IMPS_RSP + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; +} tHalExitImpsRspParams, *tpHalExitImpsRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalExitImpsRspParams exitImpsRspParams; +} tHalExitImpsRspMsg, *tpHalExitImpsRspMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_ENTER_BMPS_RSP + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; + tANI_U8 bssIdx; +} tHalEnterBmpsRspParams, *tpHalEnterBmpsRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalEnterBmpsRspParams enterBmpsRspParams; +} tHalEnterBmpsRspMsg, *tpHalEnterBmpsRspMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_EXIT_BMPS_RSP + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; + tANI_U8 bssIdx; +} tHalExitBmpsRspParams, *tpHalExitBmpsRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalExitBmpsRspParams exitBmpsRspParams; +} tHalExitBmpsRspMsg, *tpHalExitBmpsRspMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_ENTER_UAPSD_RSP + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; + tANI_U8 bssIdx; +}tUapsdRspParams, *tpUapsdRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tUapsdRspParams enterUapsdRspParams; +} tHalEnterUapsdRspMsg, *tpHalEnterUapsdRspMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_EXIT_UAPSD_RSP + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; + tANI_U8 bssIdx; +} tHalExitUapsdRspParams, *tpHalExitUapsdRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalExitUapsdRspParams exitUapsdRspParams; +} tHalExitUapsdRspMsg, *tpHalExitUapsdRspMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_RSSI_NOTIFICATION_IND + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U32 bRssiThres1PosCross : 1; + tANI_U32 bRssiThres1NegCross : 1; + tANI_U32 bRssiThres2PosCross : 1; + tANI_U32 bRssiThres2NegCross : 1; + tANI_U32 bRssiThres3PosCross : 1; + tANI_U32 bRssiThres3NegCross : 1; + tANI_U32 avgRssi : 8; + tANI_U32 uBssIdx : 8; + tANI_U32 isBTCoexCompromise : 1; + tANI_U32 bReserved : 9; +} tHalRSSINotification, *tpHalRSSINotification; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalRSSINotification rssiNotificationParams; +} tHalRSSINotificationIndMsg, *tpHalRSSINotificationIndMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_GET_RSSI_RSP + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; + tANI_S8 rssi; +} tHalGetRssiParams, *tpHalGetRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalGetRssiParams rssiRspParams; +} tHalGetRssiRspMsg, *tpHalGetRssiRspMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_GET_ROAM_RSSI_RSP + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; + + tANI_U8 staId; + tANI_S8 rssi; +} tHalGetRoamRssiParams, *tpHalGetRoamRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalGetRoamRssiParams roamRssiRspParams; +} tHalGetRoamRssiRspMsg, *tpHalGetRoamRssiRspMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_ENTER_WOWL_RSP + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; + tANI_U8 bssIdx; +} tHalEnterWowlRspParams, *tpHalEnterWowlRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalEnterWowlRspParams enterWowlRspParams; +} tHalWowlEnterRspMsg, *tpHalWowlEnterRspMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_EXIT_WOWL_RSP + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; + tANI_U8 bssIdx; +} tHalExitWowlRspParams, *tpHalExitWowlRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalExitWowlRspParams exitWowlRspParams; +} tHalWowlExitRspMsg, *tpHalWowlExitRspMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_ADD_BCN_FILTER_RSP + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; +} tHalAddBcnFilterRspParams, *tpHalAddBcnFilterRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalAddBcnFilterRspParams addBcnFilterRspParams; +} tHalAddBcnFilterRspMsg, *tpHalAddBcnFilterRspMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_REM_BCN_FILTER_RSP + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; +} tHalRemBcnFilterRspParams, *tpHalRemBcnFilterRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalRemBcnFilterRspParams remBcnFilterRspParams; +} tHalRemBcnFilterRspMsg, *tpHalRemBcnFilterRspMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_ADD_WOWL_BCAST_PTRN_RSP + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; + tANI_U8 bssIdx; +} tHalAddWowlBcastPtrnRspParams, *tpHalAddWowlBcastPtrnRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalAddWowlBcastPtrnRspParams addWowlBcastPtrnRspParams; +} tHalAddWowlBcastPtrnRspMsg, *tpHalAddWowlBcastPtrnRspMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_DEL_WOWL_BCAST_PTRN_RSP + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; + tANI_U8 bssIdx; +} tHalDelWowlBcastPtrnRspParams, *tpHalDelWowlBcastPtrnRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalDelWowlBcastPtrnRspParams delWowlBcastRspParams; +} tHalDelWowlBcastPtrnRspMsg, *tpHalDelWowlBcastPtrnRspMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_HOST_OFFLOAD_RSP + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; +} tHalHostOffloadRspParams, *tpHalHostOffloadRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalHostOffloadRspParams hostOffloadRspParams; +} tHalHostOffloadRspMsg, *tpHalHostOffloadRspMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_KEEP_ALIVE_RSP + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; +} tHalKeepAliveRspParams, *tpHalKeepAliveRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalKeepAliveRspParams keepAliveRspParams; +} tHalKeepAliveRspMsg, *tpHalKeepAliveRspMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_SET_RSSI_THRESH_RSP + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; +} tHalSetRssiThreshRspParams, *tpHalSetRssiThreshRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalSetRssiThreshRspParams setRssiThreshRspParams; +} tHalSetRssiThreshRspMsg, *tpHalSetRssiThreshRspMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_SET_UAPSD_AC_PARAMS_RSP + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; +} tHalSetUapsdAcParamsRspParams, *tpHalSetUapsdAcParamsRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalSetUapsdAcParamsRspParams setUapsdAcParamsRspParams; +} tHalSetUapsdAcParamsRspMsg, *tpHalSetUapsdAcParamsRspMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_CONFIGURE_RXP_FILTER_RSP + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; +} tHalConfigureRxpFilterRspParams, *tpHalConfigureRxpFilterRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalConfigureRxpFilterRspParams configureRxpFilterRspParams; +} tHalConfigureRxpFilterRspMsg, *tpHalConfigureRxpFilterRspMsg; + +/*--------------------------------------------------------------------------- + *WLAN_HAL_SET_MAX_TX_POWER_REQ + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + tSirMacAddr bssId; // BSSID is needed to identify which session issued this request. As + //the request has power constraints, this should be applied only to that session + tSirMacAddr selfStaMacAddr; + //In request, + //power == MaxTx power to be used. + tPowerdBm power; + +}tSetMaxTxPwrParams, *tpSetMaxTxPwrParams; + + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tSetMaxTxPwrParams setMaxTxPwrParams; +}tSetMaxTxPwrReq, *tpSetMaxTxPwrReq; + +/*--------------------------------------------------------------------------- +*WLAN_HAL_SET_MAX_TX_POWER_RSP +*--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + //power == tx power used for management frames. + tPowerdBm power; + + /* success or failure */ + tANI_U32 status; +}tSetMaxTxPwrRspParams, *tpSetMaxTxPwrRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tSetMaxTxPwrRspParams setMaxTxPwrRspParams; +}tSetMaxTxPwrRspMsg, *tpSetMaxTxPwrRspMsg; + + +/*--------------------------------------------------------------------------- + *WLAN_HAL_SET_MAX_TX_POWER_PER_BAND_REQ + *--------------------------------------------------------------------------*/ + +/* Band types for WLAN_HAL_SET_MAX_TX_POWER_PER_BAND_REQ between WDI and HAL */ +typedef enum +{ + WLAN_HAL_SET_MAX_TX_POWER_BAND_ALL = 0, + // For 2.4GHz or 5GHz bands + WLAN_HAL_SET_MAX_TX_POWER_BAND_2_4_GHZ, + WLAN_HAL_SET_MAX_TX_POWER_BAND_5_0_GHZ, + // End of valid enums + WLAN_HAL_SET_MAX_TX_POWER_BAND_MAX = WLAN_HAL_MAX_ENUM_SIZE, +}tHalSetMaxTxPwrBandInfo; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalSetMaxTxPwrBandInfo bandInfo; // 2_4_GHZ or 5_0_GHZ + tPowerdBm power; // In request, power == MaxTx power to be used. +}tSetMaxTxPwrPerBandParams, *tpSetMaxTxPwrPerBandParams; + + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tSetMaxTxPwrPerBandParams setMaxTxPwrPerBandParams; +}tSetMaxTxPwrPerBandReq, *tpSetMaxTxPwrPerBandReq; + +/*--------------------------------------------------------------------------- +*WLAN_HAL_SET_MAX_TX_POWER_PER_BAND_RSP +*--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + //power == tx power used for management frames. + tPowerdBm power; + + /* success or failure */ + tANI_U32 status; +}tSetMaxTxPwrPerBandRspParams, *tpSetMaxTxPwrPerBandRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tSetMaxTxPwrPerBandRspParams setMaxTxPwrPerBandRspParams; +}tSetMaxTxPwrPerBandRspMsg, *tpSetMaxTxPwrPerBandRspMsg; + +/*--------------------------------------------------------------------------- + *WLAN_HAL_SET_TX_POWER_REQ + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /* TX Power in milli watts */ + tANI_U32 txPower; + tANI_U8 bssIdx; +}tSetTxPwrReqParams, *tpSetTxPwrReqParams; + + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tSetTxPwrReqParams setTxPwrReqParams; +}tSetTxPwrReqMsg, *tpSetTxPwrReqMsg; + +/*--------------------------------------------------------------------------- +*WLAN_HAL_SET_TX_POWER_RSP +*--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; +}tSetTxPwrRspParams, *tpSetTxPwrRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tSetTxPwrRspParams setTxPwrRspParams; +}tSetTxPwrRspMsg, *tpSetTxPwrRspMsg; + +/*--------------------------------------------------------------------------- + *WLAN_HAL_GET_TX_POWER_REQ + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 staId; +}tGetTxPwrReqParams, *tpGetTxPwrReqParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tGetTxPwrReqParams getTxPwrReqParams; +}tGetTxPwrReqMsg, *tpGetTxPwrReqMsg; + +/*--------------------------------------------------------------------------- +*WLAN_HAL_GET_TX_POWER_RSP +*--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; + + /* TX Power in milli watts */ + tANI_U32 txPower; +}tGetTxPwrRspParams, *tpGetTxPwrRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tGetTxPwrRspParams getTxPwrRspParams; +}tGetTxPwrRspMsg, *tpGetTxPwrRspMsg; + +#ifdef WLAN_FEATURE_P2P +/*--------------------------------------------------------------------------- + *WLAN_HAL_SET_P2P_GONOA_REQ + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 opp_ps; + tANI_U32 ctWindow; + tANI_U8 count; + tANI_U32 duration; + tANI_U32 interval; + tANI_U32 single_noa_duration; + tANI_U8 psSelection; +}tSetP2PGONOAParams, *tpSetP2PGONOAParams; + + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tSetP2PGONOAParams setP2PGONOAParams; +}tSetP2PGONOAReq, *tpSetP2PGONOAReq; + +/*--------------------------------------------------------------------------- +*WLAN_HAL_SET_P2P_GONOA_RSP +*--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; +}tSetP2PGONOARspParams, *tpSetP2PGONOARspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tSetP2PGONOARspParams setP2PGONOARspParams; +}tSetP2PGONOARspMsg, *tpSetP2PGONOARspMsg; +#endif + +/*--------------------------------------------------------------------------- + *WLAN_HAL_ADD_SELF_STA_REQ + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + tSirMacAddr selfMacAddr; + tANI_U32 status; +}tAddStaSelfParams, *tpAddStaSelfParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tSirMacAddr selfMacAddr; + tANI_U32 status; + tHalIfacePersona iface_persona; +}tAddStaSelfParams_V1, *tpAddStaSelfParams_V1; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + PACKED_PRE union PACKED_POST { + tAddStaSelfParams addStaSelfParams; + tAddStaSelfParams_V1 addStaSelfParams_V1; + }uAddStaSelfParams; +}tAddStaSelfReq, *tpAddStaSelfReq; + +/*--------------------------------------------------------------------------- +*WLAN_HAL_ADD_SELF_STA_RSP +*--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; + + /*Self STA Index */ + tANI_U8 selfStaIdx; + + /* DPU Index (IGTK, PTK, GTK all same) */ + tANI_U8 dpuIdx; + + /* DPU Signature */ + tANI_U8 dpuSignature; + +}tAddStaSelfRspParams, *tpAddStaSelfRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tAddStaSelfRspParams addStaSelfRspParams; +}tAddStaSelfRspMsg, *tpAddStaSelfRspMsg; + + +/*--------------------------------------------------------------------------- + WLAN_HAL_DEL_STA_SELF_REQ +---------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + tSirMacAddr selfMacAddr; + +}tDelStaSelfParams, *tpDelStaSelfParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tDelStaSelfParams delStaSelfParams; +} tDelStaSelfReqMsg, *tpDelStaSelfReqMsg; + + +/*--------------------------------------------------------------------------- + WLAN_HAL_DEL_STA_SELF_RSP +---------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /*success or failure */ + tANI_U32 status; + + tSirMacAddr selfMacAddr; +}tDelStaSelfRspParams, *tpDelStaSelfRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tDelStaSelfRspParams delStaSelfRspParams; +} tDelStaSelfRspMsg, *tpDelStaSelfRspMsg; + + +#ifdef WLAN_FEATURE_VOWIFI_11R + +/*--------------------------------------------------------------------------- + *WLAN_HAL_AGGR_ADD_TS_REQ + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /* Station Index */ + tANI_U16 staIdx; + + /* TSPEC handler uniquely identifying a TSPEC for a STA in a BSS */ + /* This will carry the bitmap with the bit positions representing different AC.s*/ + tANI_U16 tspecIdx; + + /* Tspec info per AC To program TPE with required parameters */ + tSirMacTspecIE tspec[WLAN_HAL_MAX_AC]; + + /* U-APSD Flags: 1b per AC. Encoded as follows: + b7 b6 b5 b4 b3 b2 b1 b0 = + X X X X BE BK VI VO */ + tANI_U8 uAPSD; + + /* These parameters are for all the access categories */ + tANI_U32 srvInterval[WLAN_HAL_MAX_AC]; // Service Interval + tANI_U32 susInterval[WLAN_HAL_MAX_AC]; // Suspend Interval + tANI_U32 delayInterval[WLAN_HAL_MAX_AC]; // Delay Interval + +}tAggrAddTsParams, *tpAggrAddTsParams; + + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tAggrAddTsParams aggrAddTsParam; +}tAggrAddTsReq, *tpAggrAddTsReq; + +/*--------------------------------------------------------------------------- +*WLAN_HAL_AGGR_ADD_TS_RSP +*--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status0; + /* FIXME PRIMA for future use for 11R */ + tANI_U32 status1; +}tAggrAddTsRspParams, *tpAggrAddTsRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tAggrAddTsRspParams aggrAddTsRspParam; +}tAggrAddTsRspMsg, *tpAggrAddTsRspMsg; + +#endif + +/*--------------------------------------------------------------------------- + * WLAN_HAL_CONFIGURE_APPS_CPU_WAKEUP_STATE_REQ + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 isAppsCpuAwake; +} tHalConfigureAppsCpuWakeupStateReqParams, *tpHalConfigureAppsCpuWakeupStatReqParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalConfigureAppsCpuWakeupStateReqParams appsStateReqParams; +} tHalConfigureAppsCpuWakeupStateReqMsg, *tpHalConfigureAppsCpuWakeupStateReqMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_CONFIGURE_APPS_CPU_WAKEUP_STATE_RSP + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; +} tHalConfigureAppsCpuWakeupStateRspParams, *tpHalConfigureAppsCpuWakeupStateRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalConfigureAppsCpuWakeupStateRspParams appsStateRspParams; +} tHalConfigureAppsCpuWakeupStateRspMsg, *tpHalConfigureAppsCpuWakeupStateRspMsg; +/*--------------------------------------------------------------------------- + * WLAN_HAL_DUMP_COMMAND_REQ + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U32 argument1; + tANI_U32 argument2; + tANI_U32 argument3; + tANI_U32 argument4; + tANI_U32 argument5; + +}tHalDumpCmdReqParams,*tpHalDumpCmdReqParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalDumpCmdReqParams dumpCmdReqParams; +} tHalDumpCmdReqMsg, *tpHalDumpCmdReqMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_DUMP_COMMAND_RSP + *--------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; + /*Length of the responce message*/ + tANI_U32 rspLength; + /*FiXME: Currently considering the the responce will be less than 100bytes */ + tANI_U8 rspBuffer[DUMPCMD_RSP_BUFFER]; + +} tHalDumpCmdRspParams, *tpHalDumpCmdRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalDumpCmdRspParams dumpCmdRspParams; +} tHalDumpCmdRspMsg, *tpHalDumpCmdRspMsg; + +/*--------------------------------------------------------------------------- + *WLAN_HAL_COEX_IND + *-------------------------------------------------------------------------*/ +#define WLAN_COEX_IND_DATA_SIZE (4) +#define WLAN_COEX_IND_TYPE_DISABLE_HB_MONITOR (0) +#define WLAN_COEX_IND_TYPE_ENABLE_HB_MONITOR (1) +#define WLAN_COEX_IND_TYPE_SCANS_ARE_COMPROMISED_BY_COEX (2) +#define WLAN_COEX_IND_TYPE_SCANS_ARE_NOT_COMPROMISED_BY_COEX (3) +#define WLAN_COEX_IND_TYPE_DISABLE_AGGREGATION_IN_2p4 (4) +#define WLAN_COEX_IND_TYPE_ENABLE_AGGREGATION_IN_2p4 (5) + +typedef PACKED_PRE struct PACKED_POST +{ + /*Coex Indication Type*/ + tANI_U32 coexIndType; + + /*Coex Indication Data*/ + tANI_U32 coexIndData[WLAN_COEX_IND_DATA_SIZE]; +}tCoexIndParams,*tpCoexIndParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tCoexIndParams coexIndParams; +}tCoexIndMsg, *tpCoexIndMsg; + +/*--------------------------------------------------------------------------- + *WLAN_HAL_OTA_TX_COMPL_IND + *-------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + /*Tx Complete Indication Success or Failure*/ + tANI_U32 status; +}tTxComplParams,*tpTxComplParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tTxComplParams txComplParams; +}tTxComplIndMsg, *tpTxComplIndMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_HOST_SUSPEND_IND + *-------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U32 configuredMcstBcstFilterSetting; + tANI_U32 activeSessionCount; +}tHalWlanHostSuspendIndParam,*tpHalWlanHostSuspendIndParam; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalWlanHostSuspendIndParam suspendIndParams; +}tHalWlanHostSuspendIndMsg, *tpHalWlanHostSuspendIndMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_EXCLUDE_UNENCRYTED_IND + *-------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_BOOLEAN bDot11ExcludeUnencrypted; + tSirMacAddr bssId; +}tHalWlanExcludeUnEncryptedIndParam,*tpHalWlanExcludeUnEncryptedIndParam; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalWlanExcludeUnEncryptedIndParam excludeUnEncryptedIndParams; +}tHalWlanExcludeUnEncrptedIndMsg, *tpHalWlanExcludeUnEncrptedIndMsg; + +#ifdef WLAN_FEATURE_P2P +/*--------------------------------------------------------------------------- + *WLAN_HAL_NOA_ATTR_IND + *-------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 index ; + tANI_U8 oppPsFlag ; + tANI_U16 ctWin ; + + tANI_U16 uNoa1IntervalCnt; + tANI_U16 bssIdx; + tANI_U32 uNoa1Duration; + tANI_U32 uNoa1Interval; + tANI_U32 uNoa1StartTime; + + tANI_U16 uNoa2IntervalCnt; + tANI_U16 rsvd2; + tANI_U32 uNoa2Duration; + tANI_U32 uNoa2Interval; + tANI_U32 uNoa2StartTime; + + tANI_U32 status; +}tNoaAttrIndParams, *tpNoaAttrIndParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tNoaAttrIndParams noaAttrIndParams; +}tNoaAttrIndMsg, *tpNoaAttrIndMsg; + +/*--------------------------------------------------------------------------- + *WLAN_HAL_NOA_START_IND + *-------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U32 status; + tANI_U32 bssIdx; +}tNoaStartIndParams, *tpNoaStartIndParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tNoaStartIndParams noaStartIndParams; +}tNoaStartIndMsg, tpNoaStartIndMsg; +#endif + +/*--------------------------------------------------------------------------- + * WLAN_HAL_HOST_RESUME_REQ + *-------------------------------------------------------------------------*/ + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 configuredMcstBcstFilterSetting; +}tHalWlanHostResumeReqParam,*tpHalWlanHostResumeReqParam; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalWlanHostResumeReqParam resumeReqParams; +}tHalWlanHostResumeReqMsg, *tpHalWlanHostResumeReqMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_HOST_RESUME_RSP + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; +} tHalHostResumeRspParams, *tpHalHostResumeRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalHostResumeRspParams hostResumeRspParams; +} tHalHostResumeRspMsg, *tpHalHostResumeRspMsg; + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U16 staIdx; + // Peer MAC Address, whose BA session has timed out + tSirMacAddr peerMacAddr; + // TID for which a BA session timeout is being triggered + tANI_U8 baTID; + // DELBA direction + // 1 - Originator + // 0 - Recipient + tANI_U8 baDirection; + tANI_U32 reasonCode; + tSirMacAddr bssId; // TO SUPPORT BT-AMP +} tHalWlanDelBaIndMsg, *tpHalWlanDelBaIndMsg; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalWlanDelBaIndMsg hostdelBaParam; +} tHalDelBAIndMsg, *tpHalDelBAIndMsg; + +/*--------------------------------------------------------------------------- + *PNO Messages + *-------------------------------------------------------------------------*/ +/* Max number of channels that a network can be found on*/ +/* WLAN_HAL_PNO_MAX_NETW_CHANNELS and WLAN_HAL_PNO_MAX_NETW_CHANNELS_EX should + * be changed at same time + */ +#define WLAN_HAL_PNO_MAX_NETW_CHANNELS 60 + +/*Max number of channels that a network can be found on*/ +#define WLAN_HAL_PNO_MAX_NETW_CHANNELS_EX 60 + +/*Maximum numbers of networks supported by PNO*/ +#define WLAN_HAL_PNO_MAX_SUPP_NETWORKS 16 + +/*The number of scan time intervals that can be programmed into PNO*/ +#define WLAN_HAL_PNO_MAX_SCAN_TIMERS 10 + +/*Maximum size of the probe template*/ +#define WLAN_HAL_PNO_MAX_PROBE_SIZE 450 + +/*Type of PNO enabling + Immediate - scanning will start immediately and PNO procedure will + be repeated based on timer + Suspend - scanning will start at suspend + Resume - scanning will start on system resume + Delay - start the scan timer to trigger PNO scan + */ +typedef enum +{ + ePNO_MODE_IMMEDIATE, + ePNO_MODE_ON_SUSPEND, + ePNO_MODE_ON_RESUME, + ePNO_MODE_DELAY, + ePNO_MODE_PROXIMITY, // FEATURE_WIFI_PROXIMITY + ePNO_MODE_MAX = WLAN_HAL_MAX_ENUM_SIZE +} ePNOMode; + +/*Authentication type*/ +typedef enum +{ + eAUTH_TYPE_ANY = 0, + eAUTH_TYPE_OPEN_SYSTEM = 1, + + // Upper layer authentication types + eAUTH_TYPE_WPA = 2, + eAUTH_TYPE_WPA_PSK = 3, + + eAUTH_TYPE_RSN = 4, + eAUTH_TYPE_RSN_PSK = 5, + eAUTH_TYPE_FT_RSN = 6, + eAUTH_TYPE_FT_RSN_PSK = 7, + eAUTH_TYPE_WAPI_WAI_CERTIFICATE = 8, + eAUTH_TYPE_WAPI_WAI_PSK = 9, + eAUTH_TYPE_CCKM_WPA = 10, + eAUTH_TYPE_CCKM_RSN = 11, + + eAUTH_TYPE_MAX = WLAN_HAL_MAX_ENUM_SIZE + +}tAuthType; + +/* Encryption type */ +typedef enum eEdType +{ + eED_ANY = 0, + eED_NONE = 1, + eED_WEP = 2, + eED_TKIP = 3, + eED_CCMP = 4, + eED_WPI = 5, + + eED_TYPE_MAX = WLAN_HAL_MAX_ENUM_SIZE +} tEdType; + +/* SSID broadcast type */ +typedef enum eSSIDBcastType +{ + eBCAST_UNKNOWN = 0, + eBCAST_NORMAL = 1, + eBCAST_HIDDEN = 2, + + eBCAST_TYPE_MAX = WLAN_HAL_MAX_ENUM_SIZE +} tSSIDBcastType; + +/* + The network description for which PNO will have to look for +*/ +typedef PACKED_PRE struct PACKED_POST +{ + /*SSID of the BSS*/ + tSirMacSSid ssId; + + /*Authentication type for the network*/ + tAuthType authentication; + + /*Encryption type for the network*/ + tEdType encryption; + + /*Indicate the channel on which the Network can be found + 0 - if all channels */ + tANI_U8 ucChannelCount; + tANI_U8 aChannels[WLAN_HAL_PNO_MAX_NETW_CHANNELS]; + + /*Indicates the RSSI threshold for the network to be considered*/ + tANI_U8 rssiThreshold; +}tNetworkType; + +typedef PACKED_PRE struct PACKED_POST +{ + /*How much it should wait */ + tANI_U32 uTimerValue; + + /*How many times it should repeat that wait value + 0 - keep using this timer until PNO is disabled*/ + tANI_U32 uTimerRepeat; + + /*e.g: 2 3 + 4 0 + - it will wait 2s between consecutive scans for 3 times + - after that it will wait 4s between consecutive scans until disabled*/ +}tScanTimer; + +/* + The network parameters to be sent to the PNO algorithm +*/ +typedef PACKED_PRE struct PACKED_POST +{ + /*set to 0 if you wish for PNO to use its default telescopic timer*/ + tANI_U8 ucScanTimersCount; + + /*A set value represents the amount of time that PNO will wait between + two consecutive scan procedures + If the desired is for a uniform timer that fires always at the exact same + interval - one single value is to be set + If there is a desire for a more complex - telescopic like timer multiple + values can be set - once PNO reaches the end of the array it will + continue scanning at intervals presented by the last value*/ + tScanTimer aTimerValues[WLAN_HAL_PNO_MAX_SCAN_TIMERS]; + +}tScanTimersType; + +typedef PACKED_PRE struct PACKED_POST { + + /*Enable PNO*/ + tANI_U32 enable; + + /*Immediate, On Suspend, On Resume*/ + ePNOMode modePNO; + + /*Number of networks sent for PNO*/ + tANI_U32 ucNetworksCount; + + /*The networks that PNO needs to look for*/ + tNetworkType aNetworks[WLAN_HAL_PNO_MAX_SUPP_NETWORKS]; + + /*The scan timers required for PNO*/ + tScanTimersType scanTimers; + + /*Probe template for 2.4GHz band*/ + tANI_U16 us24GProbeSize; + tANI_U8 a24GProbeTemplate[WLAN_HAL_PNO_MAX_PROBE_SIZE]; + + /*Probe template for 5GHz band*/ + tANI_U16 us5GProbeSize; + tANI_U8 a5GProbeTemplate[WLAN_HAL_PNO_MAX_PROBE_SIZE]; + +} tPrefNetwListParams, * tpPrefNetwListParams; + +/* + Preferred network list request +*/ +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tPrefNetwListParams prefNetwListParams; +} tSetPrefNetwListReq, *tpSetPrefNetwListReq; + + +/* + The network description for which PNO will have to look for +*/ +typedef PACKED_PRE struct PACKED_POST +{ + /*SSID of the BSS*/ + tSirMacSSid ssId; + + /*Authentication type for the network*/ + tAuthType authentication; + + /*Encryption type for the network*/ + tEdType encryption; + + /*SSID broadcast type, normal, hidden or unknown*/ + tSSIDBcastType bcastNetworkType; + + /*Indicate the channel on which the Network can be found + 0 - if all channels */ + tANI_U8 ucChannelCount; + tANI_U8 aChannels[WLAN_HAL_PNO_MAX_NETW_CHANNELS]; + + /*Indicates the RSSI threshold for the network to be considered*/ + tANI_U8 rssiThreshold; +}tNetworkTypeNew; + +typedef PACKED_PRE struct PACKED_POST { + + /*Enable PNO*/ + tANI_U32 enable; + + /*Immediate, On Suspend, On Resume*/ + ePNOMode modePNO; + + /*Number of networks sent for PNO*/ + tANI_U32 ucNetworksCount; + + /*The networks that PNO needs to look for*/ + tNetworkTypeNew aNetworks[WLAN_HAL_PNO_MAX_SUPP_NETWORKS]; + + /*The scan timers required for PNO*/ + tScanTimersType scanTimers; + + /*Probe template for 2.4GHz band*/ + tANI_U16 us24GProbeSize; + tANI_U8 a24GProbeTemplate[WLAN_HAL_PNO_MAX_PROBE_SIZE]; + + /*Probe template for 5GHz band*/ + tANI_U16 us5GProbeSize; + tANI_U8 a5GProbeTemplate[WLAN_HAL_PNO_MAX_PROBE_SIZE]; + +} tPrefNetwListParamsNew, * tpPrefNetwListParamsNew; + +/* + Preferred network list request new +*/ +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tPrefNetwListParamsNew prefNetwListParams; +} tSetPrefNetwListReqNew, *tpSetPrefNetwListReqNew; + +#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD +typedef PACKED_PRE struct PACKED_POST +{ + tSirMacSSid ssId; + tANI_U8 currAPbssid[HAL_MAC_ADDR_LEN]; + tANI_U32 authentication; + tEdType encryption; + tEdType mcencryption; + tANI_U8 ChannelCount; + tANI_U8 ChannelCache[WLAN_HAL_ROAM_SCAN_MAX_CHANNELS]; +}tRoamNetworkType; + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 mdiePresent; + tANI_U16 mobilityDomain; +}tMobilityDomainInfo; + +typedef PACKED_PRE struct PACKED_POST { + eAniBoolean RoamScanOffloadEnabled; + tANI_S8 LookupThreshold; + tANI_U8 RoamRssiDiff; + tANI_U8 ChannelCacheType; + tANI_U8 Command; + tANI_U8 StartScanReason; + tANI_U16 NeighborScanTimerPeriod; + tANI_U16 NeighborRoamScanRefreshPeriod; + tANI_U16 NeighborScanChannelMinTime; + tANI_U16 NeighborScanChannelMaxTime; + tANI_U16 EmptyRefreshScanPeriod; + tANI_U8 ValidChannelCount; + tANI_U8 ValidChannelList[WLAN_HAL_ROAM_SCAN_MAX_CHANNELS]; + eAniBoolean IsCCXEnabled; + + tANI_U16 us24GProbeSize; + tANI_U8 a24GProbeTemplate[WLAN_HAL_ROAM_SCAN_MAX_PROBE_SIZE]; + tANI_U16 us5GProbeSize; + tANI_U8 a5GProbeTemplate[WLAN_HAL_ROAM_SCAN_MAX_PROBE_SIZE]; + /* Add Reserved bytes */ + tANI_U8 nProbes; + tANI_U16 HomeAwayTime; + eAniBoolean MAWCEnabled; + tANI_U8 ReservedBytes[WLAN_HAL_ROAM_SCAN_RESERVED_BYTES]; + tRoamNetworkType ConnectedNetwork; + tMobilityDomainInfo MDID; +} tRoamCandidateListParams, * tpRoamCandidateListParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tRoamCandidateListParams RoamScanOffloadNetwListParams; +} tSetRoamScanOffloadReq, *tpRoamScanOffloadReq; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + + /* status of the request - just to indicate that PNO has acknowledged + * the request and will start scanning */ + tANI_U32 status; +} tSetRoamOffloadScanResp, *tpSetRoamOffloadScanResp; +#endif + +/* + Preferred network list response +*/ +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + + /* status of the request - just to indicate that PNO has acknowledged + * the request and will start scanning*/ + tANI_U32 status; +} tSetPrefNetwListResp, *tpSetPrefNetwListResp; + +/* + Preferred network indication parameters +*/ +typedef PACKED_PRE struct PACKED_POST { + + /*Network that was found with the highest RSSI*/ + tSirMacSSid ssId; + + /*Indicates the RSSI */ + tANI_U8 rssi; + + //The MPDU frame length of a beacon or probe rsp. data is the start of the frame + tANI_U16 frameLength; + +} tPrefNetwFoundParams, * tpPrefNetwFoundParams; + +/* + Preferred network found indication +*/ +typedef PACKED_PRE struct PACKED_POST { + + tHalMsgHeader header; + tPrefNetwFoundParams prefNetwFoundParams; +} tPrefNetwFoundInd, *tpPrefNetwFoundInd; + + +typedef PACKED_PRE struct PACKED_POST { + + /*RSSI Threshold*/ + tANI_U8 ucRssiThreshold; + +} tRssiFilterParams, * tpRssiFilterParams; + +/* + RSSI Filter request +*/ +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tRssiFilterParams prefRSSIFilterParams; +} tSetRssiFilterReq, *tpSetRssiFilterReq; + +/* + Set RSSI filter resp +*/ +typedef PACKED_PRE struct PACKED_POST{ + tHalMsgHeader header; + /*status of the request */ + tANI_U32 status; +} tSetRssiFilterResp, *tpSetRssiFilterResp; +/* + Update scan params +*/ +typedef PACKED_PRE struct PACKED_POST +{ + + /*Host setting for 11d*/ + tANI_U8 b11dEnabled; + + /*Lets PNO know that host has determined the regulatory domain*/ + tANI_U8 b11dResolved; + + /*Channels on which PNO is allowed to scan*/ + tANI_U8 ucChannelCount; + tANI_U8 aChannels[WLAN_HAL_PNO_MAX_NETW_CHANNELS]; + + /*Minimum channel time*/ + tANI_U16 usActiveMinChTime; + + /*Maximum channel time*/ + tANI_U16 usActiveMaxChTime; + + /*Minimum channel time*/ + tANI_U16 usPassiveMinChTime; + + /*Maximum channel time*/ + tANI_U16 usPassiveMaxChTime; + + /*Cb State*/ + ePhyChanBondState cbState; + +} tUpdateScanParams, * tpUpdateScanParams; + +/* + Update scan params +*/ +typedef PACKED_PRE struct PACKED_POST +{ + + /*Host setting for 11d*/ + tANI_U8 b11dEnabled; + + /*Lets PNO know that host has determined the regulatory domain*/ + tANI_U8 b11dResolved; + + /*Channels on which PNO is allowed to scan*/ + tANI_U8 ucChannelCount; + tANI_U8 aChannels[WLAN_HAL_PNO_MAX_NETW_CHANNELS_EX]; + + /*Minimum channel time*/ + tANI_U16 usActiveMinChTime; + + /*Maximum channel time*/ + tANI_U16 usActiveMaxChTime; + + /*Minimum channel time*/ + tANI_U16 usPassiveMinChTime; + + /*Maximum channel time*/ + tANI_U16 usPassiveMaxChTime; + + /*Cb State*/ + ePhyChanBondState cbState; + +} tUpdateScanParamsEx, * tpUpdateScanParamsEx; + +/* + Update scan params - sent from host to PNO + to be used during PNO scanning +*/ +typedef PACKED_PRE struct PACKED_POST{ + + tHalMsgHeader header; + tUpdateScanParams scanParams; +} tUpdateScanParamsReq, *tpUpdateScanParamsReq; + +/* + Update scan params - sent from host to PNO + to be used during PNO scanning +*/ +typedef PACKED_PRE struct PACKED_POST{ + + tHalMsgHeader header; + tUpdateScanParamsEx scanParams; +} tUpdateScanParamsReqEx, *tpUpdateScanParamsReqEx; + +/* + Update scan params - sent from host to PNO + to be used during PNO scanning +*/ +typedef PACKED_PRE struct PACKED_POST{ + + tHalMsgHeader header; + + /*status of the request */ + tANI_U32 status; + +} tUpdateScanParamsResp, *tpUpdateScanParamsResp; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_SET_TX_PER_TRACKING_REQ + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 ucTxPerTrackingEnable; /* 0: disable, 1:enable */ + tANI_U8 ucTxPerTrackingPeriod; /* Check period, unit is sec. */ + tANI_U8 ucTxPerTrackingRatio; /* (Fail TX packet)/(Total TX packet) ratio, the unit is 10%. */ + tANI_U32 uTxPerTrackingWatermark; /* A watermark of check number, once the tx packet exceed this number, we do the check, default is 5 */ +} tHalTxPerTrackingReqParam, *tpHalTxPerTrackingReqParam; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalTxPerTrackingReqParam txPerTrackingParams; +} tHalSetTxPerTrackingReqMsg, *tpHalSetTxPerTrackingReqMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_SET_TX_PER_TRACKING_RSP + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; +} tHalTxPerTrackingRspParams, *tpHalTxPerTrackingRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalTxPerTrackingRspParams txPerTrackingRspParams; +} tHalSetTxPerTrackingRspMsg, *tpHalSetTxPerTrackingRspMsg; + +/*--------------------------------------------------------------------------- + * WLAN_HAL_TX_PER_HIT_IND + *--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; +}tTxPerHitIndMsg, *tpTxPerHitIndMsg; + +/*--------------------------------------------------------------------------- + *******************Packet Filtering Definitions Begin******************* + *--------------------------------------------------------------------------*/ +#define HAL_PROTOCOL_DATA_LEN 8 +#define HAL_MAX_NUM_MULTICAST_ADDRESS 240 +#define HAL_MAX_NUM_FILTERS 20 +#define HAL_MAX_CMP_PER_FILTER 10 + +typedef enum +{ + HAL_RCV_FILTER_TYPE_INVALID, + HAL_RCV_FILTER_TYPE_FILTER_PKT, + HAL_RCV_FILTER_TYPE_BUFFER_PKT, + HAL_RCV_FILTER_TYPE_MAX_ENUM_SIZE +}tHalReceivePacketFilterType; + +typedef enum +{ + HAL_FILTER_PROTO_TYPE_INVALID, + HAL_FILTER_PROTO_TYPE_MAC, + HAL_FILTER_PROTO_TYPE_ARP, + HAL_FILTER_PROTO_TYPE_IPV4, + HAL_FILTER_PROTO_TYPE_IPV6, + HAL_FILTER_PROTO_TYPE_UDP, + HAL_FILTER_PROTO_TYPE_MAX +}tHalRcvPktFltProtocolType; + +typedef enum +{ + HAL_FILTER_CMP_TYPE_INVALID, + HAL_FILTER_CMP_TYPE_EQUAL, + HAL_FILTER_CMP_TYPE_MASK_EQUAL, + HAL_FILTER_CMP_TYPE_NOT_EQUAL, + HAL_FILTER_CMP_TYPE_MAX +}tHalRcvPktFltCmpFlagType; + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 protocolLayer; + tANI_U8 cmpFlag; + tANI_U16 dataLength; /* Length of the data to compare */ + tANI_U8 dataOffset; /* from start of the respective frame header */ + tANI_U8 reserved; /* Reserved field */ + tANI_U8 compareData[HAL_PROTOCOL_DATA_LEN]; /* Data to compare */ + tANI_U8 dataMask[HAL_PROTOCOL_DATA_LEN]; /* Mask to be applied on the received packet data before compare */ +}tHalRcvPktFilterParams, *tpHalRcvPktFilterParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 filterId; + tANI_U8 filterType; + tANI_U8 numParams; + tANI_U32 coalesceTime; + tHalRcvPktFilterParams paramsData[1]; +}tHalRcvPktFilterCfgType, *tpHalRcvPktFilterCfgType; + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 filterId; + tANI_U8 filterType; + tANI_U8 numParams; + tANI_U32 coleasceTime; + tANI_U8 bssIdx; + tHalRcvPktFilterParams paramsData[1]; +}tHalSessionizedRcvPktFilterCfgType, *tpHalSessionizedRcvPktFilterCfgType; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalRcvPktFilterCfgType pktFilterCfg; +} tHalSetRcvPktFilterReqMsg, *tpHalSetRcvPktFilterReqMsg; + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 dataOffset; /* from start of the respective frame header */ + tANI_U32 cMulticastAddr; + tSirMacAddr multicastAddr[HAL_MAX_NUM_MULTICAST_ADDRESS]; + tANI_U8 bssIdx; +} tHalRcvFltMcAddrListType, *tpHalRcvFltMcAddrListType; + +typedef PACKED_PRE struct PACKED_POST +{ + /* success or failure */ + tANI_U32 status; + tANI_U8 bssIdx; +} tHalSetPktFilterRspParams, *tpHalSetPktFilterRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalSetPktFilterRspParams pktFilterRspParams; +} tHalSetPktFilterRspMsg, *tpHalSetPktFilterRspMsg; + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 bssIdx; +} tHalRcvFltPktMatchCntReqParams, *tpHalRcvFltPktMatchCntReqParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalRcvFltPktMatchCntReqParams pktMatchCntReqParams; +} tHalRcvFltPktMatchCntReqMsg, *tpHalRcvFltPktMatchCntReqMsg; + + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 filterId; + tANI_U32 matchCnt; +} tHalRcvFltPktMatchCnt; +typedef PACKED_PRE struct PACKED_POST +{ + /* Success or Failure */ + tANI_U32 status; + tANI_U32 matchCnt; + tHalRcvFltPktMatchCnt filterMatchCnt[HAL_MAX_NUM_FILTERS]; + tANI_U8 bssIdx; +} tHalRcvFltPktMatchRspParams, *tptHalRcvFltPktMatchRspParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalRcvFltPktMatchRspParams fltPktMatchRspParams; +} tHalRcvFltPktMatchCntRspMsg, *tpHalRcvFltPktMatchCntRspMsg; + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U32 status; /* only valid for response message */ + tANI_U8 filterId; + tANI_U8 bssIdx; +}tHalRcvFltPktClearParam, *tpHalRcvFltPktClearParam; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalRcvFltPktClearParam filterClearParam; +} tHalRcvFltPktClearReqMsg, *tpHalRcvFltPktClearReqMsg; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalRcvFltPktClearParam filterClearParam; +} tHalRcvFltPktClearRspMsg, *tpHalRcvFltPktClearRspMsg; + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U32 status; + tANI_U8 bssIdx; +}tHalRcvFltPktSetMcListRspType, *tpHalRcvFltPktSetMcListRspType; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalRcvFltMcAddrListType mcAddrList; +} tHalRcvFltPktSetMcListReqMsg, *tpHalRcvFltPktSetMcListReqMsg; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalRcvFltPktSetMcListRspType rspParam; +} tHalRcvFltPktSetMcListRspMsg, *tpHalRcvFltPktSetMcListRspMsg; + + +/*--------------------------------------------------------------------------- + *******************Packet Filtering Definitions End******************* + *--------------------------------------------------------------------------*/ + +/* + * There are two versions of this message + * Version 1 : Base version + * Current version : Base version + Max LI modulated DTIM + */ +typedef PACKED_PRE struct PACKED_POST +{ + /* Ignore DTIM */ + tANI_U32 uIgnoreDTIM; + + /*DTIM Period*/ + tANI_U32 uDTIMPeriod; + + /* Listen Interval */ + tANI_U32 uListenInterval; + + /* Broadcast Multicast Filter */ + tANI_U32 uBcastMcastFilter; + + /* Beacon Early Termination */ + tANI_U32 uEnableBET; + + /* Beacon Early Termination Interval */ + tANI_U32 uBETInterval; +}tSetPowerParamsVer1Type, *tpSetPowerParamsVer1Type; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tSetPowerParamsVer1Type powerParams; +} tSetPowerParamsVer1ReqMsg, *tpSetPowerParamsVer1ReqMsg; + +typedef PACKED_PRE struct PACKED_POST +{ + /* Ignore DTIM */ + tANI_U32 uIgnoreDTIM; + + /*DTIM Period*/ + tANI_U32 uDTIMPeriod; + + /* Listen Interval */ + tANI_U32 uListenInterval; + + /* Broadcast Multicast Filter */ + tANI_U32 uBcastMcastFilter; + + /* Beacon Early Termination */ + tANI_U32 uEnableBET; + + /* Beacon Early Termination Interval */ + tANI_U32 uBETInterval; + + /* MAX LI for modulated DTIM */ + tANI_U32 uMaxLIModulatedDTIM; +}tSetPowerParamsType, *tpSetPowerParamsType; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tSetPowerParamsType powerParams; +} tSetPowerParamsReqMsg, *tpSetPowerParamsReqMsg; + +typedef PACKED_PRE struct PACKED_POST{ + + tHalMsgHeader header; + + /*status of the request */ + tANI_U32 status; + +} tSetPowerParamsResp, *tpSetPowerParamsResp; + +/*--------------------------------------------------------------------------- + ****************Capability bitmap exchange definitions and macros starts************* + *--------------------------------------------------------------------------*/ + +typedef enum { + MCC = 0, + P2P = 1, + DOT11AC = 2, + SLM_SESSIONIZATION = 3, + DOT11AC_OPMODE = 4, + SAP32STA = 5, + TDLS = 6, + P2P_GO_NOA_DECOUPLE_INIT_SCAN = 7, + WLANACTIVE_OFFLOAD = 8, + BEACON_OFFLOAD = 9, + SCAN_OFFLOAD = 10, + ROAM_OFFLOAD = 11, + BCN_MISS_OFFLOAD = 12, + STA_POWERSAVE = 13, + STA_ADVANCED_PWRSAVE = 14, + AP_UAPSD = 15, + AP_DFS = 16, + BLOCKACK = 17, + PHY_ERR = 18, + BCN_FILTER = 19, + RTT = 20, + RATECTRL = 21, + WOW = 22, + WLAN_ROAM_SCAN_OFFLOAD = 23, + SPECULATIVE_PS_POLL = 24, + SCAN_SCH = 25, + IBSS_HEARTBEAT_OFFLOAD = 26, + WLAN_SCAN_OFFLOAD = 27, + WLAN_PERIODIC_TX_PTRN = 28, + ADVANCE_TDLS = 29, + BATCH_SCAN = 30, + MAX_FEATURE_SUPPORTED = 128, +} placeHolderInCapBitmap; + +typedef PACKED_PRE struct PACKED_POST{ + + tANI_U32 featCaps[4]; +} tWlanFeatCaps, *tpWlanFeatCaps; + +typedef PACKED_PRE struct PACKED_POST{ + + tHalMsgHeader header; + tWlanFeatCaps wlanFeatCaps; + +} tWlanFeatCapsMsg, *tpWlanFeatCapsMsg; + +#define IS_MCC_SUPPORTED_BY_HOST (!!(halMsg_GetHostWlanFeatCaps(MCC))) +#define IS_SLM_SESSIONIZATION_SUPPORTED_BY_HOST (!!(halMsg_GetHostWlanFeatCaps(SLM_SESSIONIZATION))) +#define IS_FEATURE_SUPPORTED_BY_HOST(featEnumValue) (!!halMsg_GetHostWlanFeatCaps(featEnumValue)) +#define IS_WLANACTIVE_OFFLOAD_SUPPORTED_BY_HOST (!!(halMsg_GetHostWlanFeatCaps(WLANACTIVE_OFFLOAD))) +#define IS_WLAN_ROAM_SCAN_OFFLOAD_SUPPORTED_BY_HOST (!!(halMsg_GetHostWlanFeatCaps(WLAN_ROAM_SCAN_OFFLOAD))) +#define IS_IBSS_HEARTBEAT_OFFLOAD_SUPPORTED_BY_HOST (!!(halMsg_GetHostWlanFeatCaps(IBSS_HEARTBEAT_OFFLOAD))) +#define IS_SCAN_OFFLOAD_SUPPORTED_BY_HOST (!!(halMsg_GetHostWlanFeatCaps(WLAN_SCAN_OFFLOAD))) + +tANI_U8 halMsg_GetHostWlanFeatCaps(tANI_U8 feat_enum_value); + +#define setFeatCaps(a,b) { tANI_U32 arr_index, bit_index; \ + if ((b)<=127) { \ + arr_index = (b)/32; \ + bit_index = (b)%32; \ + if(arr_index < 4) \ + (a)->featCaps[arr_index] |= (1<featCaps[arr_index] & (1<featCaps[arr_index] &= ~(1<FW + WLAN_HAL_LEADER_CANCELED, //Host-->FW + WLAN_HAL_LEADER_PICK_NEW, //FW-->Host + WLAN_HAL_LEADER_IND_MAX = WLAN_HAL_MAX_ENUM_SIZE +}tLbpUpdateIndType; + +typedef enum +{ + WLAN_HAL_LBP_LEADER_ROLE, + WLAN_HAL_LBP_TRANSMITTER_ROLE, + WLAN_HAL_LBP_ROLE_MAX = WLAN_HAL_MAX_ENUM_SIZE +}tLbpRoleType; + +typedef PACKED_PRE struct PACKED_POST +{ + tLbpUpdateIndType indication; + + /* Role of the entity generating this indication */ + tLbpRoleType role; + + /* MAC address of MCAST Transmitter (source) */ + tSirMacAddr mcastTransmitter; + + /* MAC Address of Multicast Group (01-00-5E-xx-xx-xx) */ + tSirMacAddr mcastGroup; + + /* MAC address of MCAST Receiver Leader */ + tSirMacAddr mcastLeader; + + /* Candidate list for indication = WLAN_HAL_LEADER_PICK_NEW */ + tSirMacAddr leader[HAL_NUM_MAX_LEADERS]; +} tHalLbpUpdateIndParams, *tpHalLbpUpdateIndParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalLbpUpdateIndParams leaderIndParams; +} tHalLbpUpdateInd, *tpHalLbpUpdateInd; + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 staIdx; // Station Idx; + tANI_U32 txRate; // Legacy transmit rate, in units of 500 kbit/sec, + // for the most recently transmitted frame + tANI_U32 mcsIndex; // mcs index for HT20 and HT40 rates + tANI_U32 txRateFlags; // to differentiate between HT20 and + // HT40 rates; short and long guard interval + tANI_S8 rssi; // RSSI of the last received beacon +}tHalIbssPeerParams, *tpHalIbssPeerParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U32 status; // success or failure + tANI_U8 numOfPeers; // Number of Peers for + // which stats are being reported + tHalIbssPeerParams ibssPeerParams[1]; // Stats of peer in IBSS +}tHalIbssPeerInfoRspParams, *tpHalIbssPeerInfoRspParams; + +// WLAN_HAL_GET_IBSS_PEER_INFO_RSP +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalIbssPeerInfoRspParams ibssPeerInfoRspParams; +}tHalIbssPeerInfoRsp, *tpHalIbssPeerInfoRsp; + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 bssIdx; // Bss Index + tANI_BOOLEAN allPeerInfoReqd; // If set, all IBSS peers stats are reported + tANI_U8 staIdx; // If allPeerInfoReqd is not set, + // only stats of peer with + // staIdx is reported +}tHalIbssPeerInfoReqParams, *tpHalIbssPeerInfoReqParams; + +// WLAN_HAL_GET_IBSS_PEER_INFO_REQ +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalIbssPeerInfoReqParams ibssPeerInfoReqParams; +}tHalIbssPeerInfoReq, *tpHalIbssPeerInfoReq; + +/*--------------------------------------------------------------------------- + WLAN_HAL_RATE_UPDATE_IND + *-------------------------------------------------------------------------*/ + typedef PACKED_PRE struct PACKED_POST +{ + /* 0 implies UCAST RA, positive value implies fixed rate, -1 implies ignore this param */ + tANI_S32 ucastDataRate; //unit Mbpsx10 + + /* TX flag to differentiate between HT20, HT40 etc */ + tTxRateInfoFlags ucastDataRateTxFlag; + + /* BSSID - Optional. 00-00-00-00-00-00 implies apply to all BCAST STAs */ + tSirMacAddr bssid; + + /* 0 implies MCAST RA, positive value implies fixed rate, -1 implies ignore */ + tANI_S32 reliableMcastDataRate; //unit Mbpsx10 + + /* TX flag to differentiate between HT20, HT40 etc */ + tTxRateInfoFlags reliableMcastDataRateTxFlag; + + /* Default (non-reliable) MCAST(or BCAST) fixed rate in 2.4 GHz, 0 implies ignore */ + tANI_U32 mcastDataRate24GHz; //unit Mbpsx10 + + /* TX flag to differentiate between HT20, HT40 etc */ + tTxRateInfoFlags mcastDataRate24GHzTxFlag; + + /* Default (non-reliable) MCAST(or BCAST) fixed rate in 5 GHz, 0 implies ignore */ + tANI_U32 mcastDataRate5GHz; //unit Mbpsx10 + + /* TX flag to differentiate between HT20, HT40 etc */ + tTxRateInfoFlags mcastDataRate5GHzTxFlag; + +} tHalRateUpdateParams, *tpHalRateUpdateParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalRateUpdateParams halRateUpdateParams; +} tHalRateUpdateInd, * tpHalRateUpdateInd; + +/*--------------------------------------------------------------------------- +* WLAN_HAL_TX_FAIL_IND +*--------------------------------------------------------------------------*/ +// Northbound indication from FW to host on weak link detection +typedef PACKED_PRE struct PACKED_POST +{ + // Sequence number increases by 1 whenever the device driver + // sends a notification event. This is cleared as 0 when the + // JOIN IBSS commamd is issued + tANI_U16 seqNo; + tANI_U16 staId; + tANI_U8 macAddr[HAL_MAC_ADDR_LEN]; +} tHalTXFailIndParams, *tpHalTXFailIndParams; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tHalTXFailIndParams txFailIndParams; +} tHalTXFailIndMsg, *tpHalTXFailIndMsg; + +/*--------------------------------------------------------------------------- +* WLAN_HAL_TX_FAIL_MONITOR_IND +*--------------------------------------------------------------------------*/ +// Southbound message from Host to monitor the Tx failures +typedef PACKED_PRE struct PACKED_POST +{ + // tx_fail_count = 0 should disable the TX Fail monitor, non-zero value should enable it. + tANI_U8 tx_fail_count; +} tTXFailMonitorInfo, *tpTXFailMonitorInfo; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tTXFailMonitorInfo txFailMonitor; +} tTXFailMonitorInd, *tpTXFailMonitorInd; + +/*--------------------------------------------------------------------------- +* WLAN_HAL_IP_FORWARD_TABLE_UPDATE_IND +*--------------------------------------------------------------------------*/ +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 destIpv4Addr[HAL_IPV4_ADDR_LEN]; + tANI_U8 nextHopMacAddr[HAL_MAC_ADDR_LEN]; +} tDestIpNextHopMacPair; + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 numEntries; + tDestIpNextHopMacPair destIpMacPair[1]; +} tWlanIpForwardTableUpdateIndParam; + +typedef PACKED_PRE struct PACKED_POST +{ + tHalMsgHeader header; + tWlanIpForwardTableUpdateIndParam ipForwardTableParams; +} tWlanIpForwardTableUpdateInd; + +/*--------------------------------------------------------------------------- + *-------------------------------------------------------------------------*/ + +#if defined(__ANI_COMPILER_PRAGMA_PACK_STACK) +#pragma pack(pop) +#elif defined(__ANI_COMPILER_PRAGMA_PACK) +#else +#endif + +#endif /* _WLAN_HAL_MSG_H_ */ + diff --git a/wcnss/riva/inc/wlan_nv.h b/wcnss/riva/inc/wlan_nv.h new file mode 100644 index 000000000000..4ef15cdcd749 --- /dev/null +++ b/wcnss/riva/inc/wlan_nv.h @@ -0,0 +1,813 @@ +/* + * Copyright (c) 2013, The Linux Foundation. All rights reserved. + * + * Previously licensed under the ISC license by Qualcomm Atheros, Inc. + * + * + * Permission to use, copy, modify, and/or distribute this software for + * any purpose with or without fee is hereby granted, provided that the + * above copyright notice and this permission notice appear in all + * copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL + * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE + * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +/* + * This file was originally distributed by Qualcomm Atheros, Inc. + * under proprietary terms before Copyright ownership was assigned + * to the Linux Foundation. + */ + +/** ------------------------------------------------------------------------- * + ------------------------------------------------------------------------- * + + + \file wlan_nv.h + + \brief Types for NV implementation + Anything that needs to be publicly available should + be in this file + + $Id$ + + Copyright (C) 2006 Airgo Networks, Incorporated + + + ========================================================================== */ + +#if !defined( __WLAN_NV_H ) +#define __WLAN_NV_H + +#include "halLegacyPalTypes.h" +#include "halCompiler.h" + +//From HAL/inc/halNv.h +typedef enum +{ + //Common Nv Fields + NV_COMMON_PRODUCT_ID, // 0 + NV_COMMON_PRODUCT_BANDS, // 1 + NV_COMMON_NUM_OF_TX_CHAINS, // 2 + NV_COMMON_NUM_OF_RX_CHAINS, // 3 + NV_COMMON_MAC_ADDR, // 4 + NV_COMMON_MFG_SERIAL_NUMBER, // 5 + NV_COMMON_WLAN_NV_REV_ID, // 6 + NV_COMMON_COUPLER_TYPE, // 7 + NV_COMMON_NV_VERSION, // 8 + NV_COMMON_RESERVED, // 9 + + NUM_NV_FIELDS, + NV_MAX_FIELD = 0x7FFFFFFF /* define as 4 bytes data */ + +}eNvField; + + +#define NV_FIELD_MAC_ADDR_SIZE 6 +#define NV_FIELD_MFG_SN_SIZE 40 +typedef enum +{ + PRODUCT_BAND_11_B_G = 0, //Gen6.0 is only this setting + PRODUCT_BAND_11_A_B_G = 1, + PRODUCT_BAND_11_A = 2, + + NUM_PRODUCT_BANDS, + NUM_PRODUCT_BANDS_INVALID = 0x7FFFFFFF /* define as 4 bytes data */ +}eNvProductBands; //NV_COMMON_PRODUCT_BANDS + +#define EXTERNAL_PA 1 +#define INTERNAL_PA 0 + +#define EXTERNAL_LNA 1 +#define INTERNAL_LNA 0 + +#define EXTERNAL_COUPLER 1 +#define INTERNAL_COUPLER 0 + +#define EXTERNAL_PDET 1 +#define INTERNAL_PDET 0 + +#define DPD_ENABLED 1 +#define DPD_DISABLED 0 + +#define TPC_MODE_OPEN_LOOP 0 +#define TPC_MODE_SCPC 1 +#define TPC_MODE_CLPC_MODE2 2 +#define TPC_MODE_CLPC_MODE3 3 + +#define PA_POLARITY_TX_UNUSED 0 +#define PA_POLARITY_TX_POSITIVE 1 +#define PA_POLARITY_TX_NEGATIVE 2 +#define PA_POLARITY_RX_UNUSED 0 +#define PA_POLARITY_RX_POSITIVE 1 +#define PA_POLARITY_RX_NEGATIVE 2 + +#define NV_VERSION_INVALID 0xFF +#define NV_VERSION_11N_11AC_COUPER_TYPE 0 +#define NV_VERSION_11N_11AC_FW_CONFIG 1 +#define NV_VERSION_LPDC_FW_CONFIG 2 + +#ifdef WCN_PRONTO +#define WLAN_NV_VERSION NV_VERSION_LPDC_FW_CONFIG +#else //WCN_PRONTO +#define WLAN_NV_VERSION NV_VERSION_11N_11AC_FW_CONFIG +#endif //WCN_PRONTO + +typedef PACKED_PRE struct PACKED_POST +{ + uint8 macAddr1[NV_FIELD_MAC_ADDR_SIZE]; /* Default, not change name for compatibility */ + uint8 macAddr2[NV_FIELD_MAC_ADDR_SIZE]; + uint8 macAddr3[NV_FIELD_MAC_ADDR_SIZE]; + uint8 macAddr4[NV_FIELD_MAC_ADDR_SIZE]; +} sMacAddr; + +typedef PACKED_PRE union PACKED_POST +{ + //common NV fields + uint16 productId; + uint8 productBands; + uint8 wlanNvRevId; + uint8 numOfTxChains; + uint8 numOfRxChains; + sMacAddr macAddr; + uint8 mfgSN[NV_FIELD_MFG_SN_SIZE]; + uint8 couplerType; + uint8 nvVersion; +} uNvFields; + + +//format of common part of nv +typedef PACKED_PRE struct PACKED_POST +{ + //always ensure fields are aligned to 32-bit boundaries + uint16 productId; + uint8 productBands; + uint8 wlanNvRevId; //0: WCN1312, 1: WCN1314, 2: WCN3660 + + uint8 numOfTxChains; + uint8 numOfRxChains; + uint8 macAddr[NV_FIELD_MAC_ADDR_SIZE]; /* Default, not change name for compatibility */ + uint8 macAddr2[NV_FIELD_MAC_ADDR_SIZE]; + uint8 macAddr3[NV_FIELD_MAC_ADDR_SIZE]; + uint8 macAddr4[NV_FIELD_MAC_ADDR_SIZE]; + uint8 mfgSN[NV_FIELD_MFG_SN_SIZE]; + uint8 couplerType; + uint8 nvVersion; +} sNvFields; + + +//From wlanfw/inc/halPhyTypes.h + +typedef int8 tPowerdBm; //power in signed 8-bit integer, no decimal places + +typedef PACKED_PRE union PACKED_POST +{ + uint32 measurement; //measured values can be passed to pttApi, but are maintained to 2 decimal places internally + int16 reported; //used internally only - reported values only maintain 2 decimals places +}uAbsPwrPrecision; + +typedef enum +{ + PHY_TX_CHAIN_0 = 0, + + NUM_PHY_MAX_TX_CHAINS = 1, + PHY_MAX_TX_CHAINS = NUM_PHY_MAX_TX_CHAINS, + PHY_ALL_TX_CHAINS, + + //possible tx chain combinations + PHY_NO_TX_CHAINS, + PHY_TX_CHAIN_INVALID = 0x7FFFFFFF /* define as 4 bytes data */ +}ePhyTxChains; + +//From wlanfw/inc/halRfTypes.h + +typedef enum +{ + REG_DOMAIN_FCC, + REG_DOMAIN_ETSI, + REG_DOMAIN_JAPAN, + REG_DOMAIN_WORLD, + REG_DOMAIN_N_AMER_EXC_FCC, + REG_DOMAIN_APAC, + REG_DOMAIN_KOREA, + REG_DOMAIN_HI_5GHZ, + REG_DOMAIN_NO_5GHZ, + + NUM_REG_DOMAINS, + NUM_REG_DOMAINS_INVALID = 0x7FFFFFFF /* define as 4 bytes data */ +}eRegDomainId; + +typedef enum +{ + RF_SUBBAND_2_4_GHZ = 0, + RF_SUBBAND_5_LOW_GHZ = 1, //Low & Mid U-NII + RF_SUBBAND_5_MID_GHZ = 2, //ETSI + RF_SUBBAND_5_HIGH_GHZ = 3, //High U-NII + RF_SUBBAND_4_9_GHZ = 4, //Japanese + + + NUM_RF_SUBBANDS, + + MAX_RF_SUBBANDS, + INVALID_RF_SUBBAND, + + RF_BAND_2_4_GHZ = 0, + RF_BAND_5_GHZ = 1, + NUM_RF_BANDS, + BOTH_RF_BANDS, + RF_SUBBAND_INVALID = 0x7FFFFFFF /* define as 4 bytes data */ +}eRfSubBand; + +typedef enum +{ + //2.4GHz Band + RF_CHAN_1 = 0, + RF_CHAN_2 = 1, + RF_CHAN_3 = 2, + RF_CHAN_4 = 3, + RF_CHAN_5 = 4, + RF_CHAN_6 = 5, + RF_CHAN_7 = 6, + RF_CHAN_8 = 7, + RF_CHAN_9 = 8, + RF_CHAN_10 = 9, + RF_CHAN_11 = 10, + RF_CHAN_12 = 11, + RF_CHAN_13 = 12, + RF_CHAN_14 = 13, + + //4.9GHz Band + RF_CHAN_240 = 14, + RF_CHAN_244 = 15, + RF_CHAN_248 = 16, + RF_CHAN_252 = 17, + RF_CHAN_208 = 18, + RF_CHAN_212 = 19, + RF_CHAN_216 = 20, + + //5GHz Low & Mid U-NII Band + RF_CHAN_36 = 21, + RF_CHAN_40 = 22, + RF_CHAN_44 = 23, + RF_CHAN_48 = 24, + RF_CHAN_52 = 25, + RF_CHAN_56 = 26, + RF_CHAN_60 = 27, + RF_CHAN_64 = 28, + + //5GHz Mid Band - ETSI & FCC + RF_CHAN_100 = 29, + RF_CHAN_104 = 30, + RF_CHAN_108 = 31, + RF_CHAN_112 = 32, + RF_CHAN_116 = 33, + RF_CHAN_120 = 34, + RF_CHAN_124 = 35, + RF_CHAN_128 = 36, + RF_CHAN_132 = 37, + RF_CHAN_136 = 38, + RF_CHAN_140 = 39, + + //5GHz High U-NII Band + RF_CHAN_149 = 40, + RF_CHAN_153 = 41, + RF_CHAN_157 = 42, + RF_CHAN_161 = 43, + RF_CHAN_165 = 44, + + //CHANNEL BONDED CHANNELS + RF_CHAN_BOND_3 = 45, + RF_CHAN_BOND_4 = 46, + RF_CHAN_BOND_5 = 47, + RF_CHAN_BOND_6 = 48, + RF_CHAN_BOND_7 = 49, + RF_CHAN_BOND_8 = 50, + RF_CHAN_BOND_9 = 51, + RF_CHAN_BOND_10 = 52, + RF_CHAN_BOND_11 = 53, + RF_CHAN_BOND_242 = 54, //4.9GHz Band + RF_CHAN_BOND_246 = 55, + RF_CHAN_BOND_250 = 56, + RF_CHAN_BOND_210 = 57, + RF_CHAN_BOND_214 = 58, + RF_CHAN_BOND_38 = 59, //5GHz Low & Mid U-NII Band + RF_CHAN_BOND_42 = 60, + RF_CHAN_BOND_46 = 61, + RF_CHAN_BOND_50 = 62, + RF_CHAN_BOND_54 = 63, + RF_CHAN_BOND_58 = 64, + RF_CHAN_BOND_62 = 65, + RF_CHAN_BOND_102 = 66, //5GHz Mid Band - ETSI & FCC + RF_CHAN_BOND_106 = 67, + RF_CHAN_BOND_110 = 68, + RF_CHAN_BOND_114 = 69, + RF_CHAN_BOND_118 = 70, + RF_CHAN_BOND_122 = 71, + RF_CHAN_BOND_126 = 72, + RF_CHAN_BOND_130 = 73, + RF_CHAN_BOND_134 = 74, + RF_CHAN_BOND_138 = 75, + RF_CHAN_BOND_151 = 76, //5GHz High U-NII Band + RF_CHAN_BOND_155 = 77, + RF_CHAN_BOND_159 = 78, + RF_CHAN_BOND_163 = 79, + + NUM_RF_CHANNELS, + + MIN_2_4GHZ_CHANNEL = RF_CHAN_1, + MAX_2_4GHZ_CHANNEL = RF_CHAN_14, + + MIN_5GHZ_CHANNEL = RF_CHAN_240, + MAX_5GHZ_CHANNEL = RF_CHAN_165, + NUM_5GHZ_CHANNELS = (MAX_5GHZ_CHANNEL - MIN_5GHZ_CHANNEL + 1), + + MIN_20MHZ_RF_CHANNEL = RF_CHAN_1, + MAX_20MHZ_RF_CHANNEL = RF_CHAN_165, + NUM_20MHZ_RF_CHANNELS = (MAX_20MHZ_RF_CHANNEL - MIN_20MHZ_RF_CHANNEL + 1), + + MIN_40MHZ_RF_CHANNEL = RF_CHAN_BOND_3, + MAX_40MHZ_RF_CHANNEL = RF_CHAN_BOND_163, + NUM_40MHZ_RF_CHANNELS = (MAX_40MHZ_RF_CHANNEL - MIN_40MHZ_RF_CHANNEL + 1), + + MIN_CB_2_4GHZ_CHANNEL = RF_CHAN_BOND_3, + MAX_CB_2_4GHZ_CHANNEL = RF_CHAN_BOND_11, + + MIN_CB_5GHZ_CHANNEL = RF_CHAN_BOND_242, + MAX_CB_5GHZ_CHANNEL = RF_CHAN_BOND_163, + + NUM_TPC_2_4GHZ_CHANNELS = 14, + NUM_TPC_5GHZ_CHANNELS = NUM_5GHZ_CHANNELS, + + INVALID_RF_CHANNEL = 0xBAD, + RF_CHANNEL_INVALID_MAX_FIELD = 0x7FFFFFFF /* define as 4 bytes data */ +}eRfChannels; + +typedef enum +{ + RF_CHAN_1_1 = RF_CHAN_1, + RF_CHAN_2_1 = RF_CHAN_2, + RF_CHAN_3_1 = RF_CHAN_3, + RF_CHAN_4_1 = RF_CHAN_4, + RF_CHAN_5_1 = RF_CHAN_5, + RF_CHAN_6_1 = RF_CHAN_6, + RF_CHAN_7_1 = RF_CHAN_7, + RF_CHAN_8_1 = RF_CHAN_8, + RF_CHAN_9_1 = RF_CHAN_9, + RF_CHAN_10_1 = RF_CHAN_10, + RF_CHAN_11_1 = RF_CHAN_11, + RF_CHAN_12_1 = RF_CHAN_12, + RF_CHAN_13_1 = RF_CHAN_13, + RF_CHAN_14_1 = RF_CHAN_14, +// The above params are used for scripts. + NUM_2_4GHZ_CHANNELS, +}eRfChannels_2_4GHz; + +enum +{ + NV_CHANNEL_DISABLE, + NV_CHANNEL_ENABLE, + NV_CHANNEL_DFS, + NV_CHANNEL_INVALID +}; +typedef uint8 eNVChannelEnabledType; + +typedef PACKED_PRE struct PACKED_POST +{ + eNVChannelEnabledType enabled; + tPowerdBm pwrLimit; +}sRegulatoryChannel; + +typedef PACKED_PRE struct PACKED_POST +{ + sRegulatoryChannel channels[NUM_RF_CHANNELS]; + uAbsPwrPrecision antennaGain[NUM_RF_SUBBANDS]; + uAbsPwrPrecision bRatePowerOffset[NUM_2_4GHZ_CHANNELS]; + uAbsPwrPrecision gnRatePowerOffset[NUM_RF_CHANNELS]; +}ALIGN_4 sRegulatoryDomains; + +typedef PACKED_PRE struct PACKED_POST +{ + int16 bRssiOffset[NUM_RF_CHANNELS]; + int16 gnRssiOffset[NUM_RF_CHANNELS]; +}ALIGN_4 sRssiChannelOffsets; + +typedef PACKED_PRE struct PACKED_POST +{ + uint16 targetFreq; //number in MHz + uint16 channelNum; //channel number as in the eRfChannels enumeration + eRfSubBand band; //band that this channel belongs to +}tRfChannelProps; + +typedef enum +{ + MODE_802_11B = 0, + MODE_802_11AG = 1, + MODE_802_11N = 2, + NUM_802_11_MODES, + MODE_802_11_INVALID = 0x7FFFFFFF /* define as 4 bytes data */ +} e80211Modes; + +#define HW_CAL_VALUES_VALID_BMAP_UNUSED 0 //Value +//Bit mask +#define HW_VAL_VALUES_VALID_BMAP_SLEEP_TIME_OVERHEAD_2G_MASK 0x1 +#define HW_VAL_VALUES_VALID_BMAP_SLEEP_TIME_OVERHEAD_5G_MASK 0x2 +#define HW_VAL_VALUES_VALID_BMAP_SLEEP_TIME_OVERHEAD_xLNA_5G_MASK 0x4 +#define HW_VAL_VALUES_VALID_TXBBF_SEL_9MHZ_MASK 0x8 +#define HW_VAL_VALUES_VALID_CUSTOM_TCXO_REG8_MASK 0x10 +#define HW_VAL_VALUES_VALID_CUSTOM_TCXO_REG9_MASK 0x20 + + +//From wlanfw/inc/halPhyCalMemory.h +typedef PACKED_PRE struct PACKED_POST +{ + uint16 psSlpTimeOvrHd2G; + uint16 psSlpTimeOvrHd5G; + + uint16 psSlpTimeOvrHdxLNA5G; + uint8 nv_TxBBFSel9MHz : 1; + uint8 hwParam1 : 7; + uint8 hwParam2; + + uint16 custom_tcxo_reg8; + uint16 custom_tcxo_reg9; + + uint32 hwParam3; + uint32 hwParam4; + uint32 hwParam5; + uint32 hwParam6; + uint32 hwParam7; + uint32 hwParam8; + uint32 hwParam9; + uint32 hwParam10; + uint32 hwParam11; +}sCalData; + +typedef PACKED_PRE struct PACKED_POST +{ + uint32 validBmap; //use eNvCalID + sCalData calData; +}sHwCalValues; + +typedef PACKED_PRE struct PACKED_POST +{ + uint32 txFirFilterMode; +}sTxBbFilterMode; + +typedef PACKED_PRE struct PACKED_POST +{ + int16 ofdmPwrOffset; + int16 rsvd; +}sOfdmCmdPwrOffset; + +//From wlanfw/inc/halPhyCfg.h +typedef uint8 tTpcLutValue; + +#define MAX_TPC_CAL_POINTS (8) + +typedef uint8 tPowerDetect; //7-bit power detect reading + +typedef PACKED_PRE struct PACKED_POST +{ + tPowerDetect pwrDetAdc; //= SENSED_PWR register, which reports the 8-bit ADC + // the stored ADC value gets shifted to 7-bits as the index to the LUT + tPowerDetect adjustedPwrDet; //7-bit value that goes into the LUT at the LUT[pwrDet] location + //MSB set if extraPrecision.hi8_adjustedPwrDet is used +}tTpcCaldPowerPoint; + +typedef tTpcCaldPowerPoint tTpcCaldPowerTable[NUM_PHY_MAX_TX_CHAINS][MAX_TPC_CAL_POINTS]; + +typedef PACKED_PRE struct PACKED_POST +{ + tTpcCaldPowerTable empirical; //calibrated power points +}tTpcConfig; + +//From wlanfw/inc/phyTxPower.h +#ifndef TPC_MEM_POWER_LUT_DEPTH +#define TPC_MEM_POWER_LUT_DEPTH 256 +#endif + +typedef tTpcLutValue tTpcPowerTable[NUM_PHY_MAX_TX_CHAINS][TPC_MEM_POWER_LUT_DEPTH]; + +typedef PACKED_PRE struct PACKED_POST +{ + tTpcConfig *pwrSampled; //points to CLPC data in calMemory +}tPhyTxPowerBand; + +//From halPhyRates.h +typedef enum +{ + //802.11b Rates + HAL_PHY_RATE_11B_LONG_1_MBPS, + HAL_PHY_RATE_11B_LONG_2_MBPS, + HAL_PHY_RATE_11B_LONG_5_5_MBPS, + HAL_PHY_RATE_11B_LONG_11_MBPS, + HAL_PHY_RATE_11B_SHORT_2_MBPS, + HAL_PHY_RATE_11B_SHORT_5_5_MBPS, + HAL_PHY_RATE_11B_SHORT_11_MBPS, + + //Spica_Virgo 11A 20MHz Rates + HAL_PHY_RATE_11A_6_MBPS, + HAL_PHY_RATE_11A_9_MBPS, + HAL_PHY_RATE_11A_12_MBPS, + HAL_PHY_RATE_11A_18_MBPS, + HAL_PHY_RATE_11A_24_MBPS, + HAL_PHY_RATE_11A_36_MBPS, + HAL_PHY_RATE_11A_48_MBPS, + HAL_PHY_RATE_11A_54_MBPS, + + // 11A 20MHz Rates + HAL_PHY_RATE_11A_DUP_6_MBPS, + HAL_PHY_RATE_11A_DUP_9_MBPS, + HAL_PHY_RATE_11A_DUP_12_MBPS, + HAL_PHY_RATE_11A_DUP_18_MBPS, + HAL_PHY_RATE_11A_DUP_24_MBPS, + HAL_PHY_RATE_11A_DUP_36_MBPS, + HAL_PHY_RATE_11A_DUP_48_MBPS, + HAL_PHY_RATE_11A_DUP_54_MBPS, + + //MCS Index #0-7 (20/40MHz) + HAL_PHY_RATE_MCS_1NSS_6_5_MBPS, + HAL_PHY_RATE_MCS_1NSS_13_MBPS, + HAL_PHY_RATE_MCS_1NSS_19_5_MBPS, + HAL_PHY_RATE_MCS_1NSS_26_MBPS, + HAL_PHY_RATE_MCS_1NSS_39_MBPS, + HAL_PHY_RATE_MCS_1NSS_52_MBPS, + HAL_PHY_RATE_MCS_1NSS_58_5_MBPS, + HAL_PHY_RATE_MCS_1NSS_65_MBPS, + HAL_PHY_RATE_MCS_1NSS_MM_SG_7_2_MBPS, + HAL_PHY_RATE_MCS_1NSS_MM_SG_14_4_MBPS, + HAL_PHY_RATE_MCS_1NSS_MM_SG_21_7_MBPS, + HAL_PHY_RATE_MCS_1NSS_MM_SG_28_9_MBPS, + HAL_PHY_RATE_MCS_1NSS_MM_SG_43_3_MBPS, + HAL_PHY_RATE_MCS_1NSS_MM_SG_57_8_MBPS, + HAL_PHY_RATE_MCS_1NSS_MM_SG_65_MBPS, + HAL_PHY_RATE_MCS_1NSS_MM_SG_72_2_MBPS, + + //MCS Index #8-15 (20/40MHz) + HAL_PHY_RATE_MCS_1NSS_CB_13_5_MBPS, + HAL_PHY_RATE_MCS_1NSS_CB_27_MBPS, + HAL_PHY_RATE_MCS_1NSS_CB_40_5_MBPS, + HAL_PHY_RATE_MCS_1NSS_CB_54_MBPS, + HAL_PHY_RATE_MCS_1NSS_CB_81_MBPS, + HAL_PHY_RATE_MCS_1NSS_CB_108_MBPS, + HAL_PHY_RATE_MCS_1NSS_CB_121_5_MBPS, + HAL_PHY_RATE_MCS_1NSS_CB_135_MBPS, + HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_15_MBPS, + HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_30_MBPS, + HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_45_MBPS, + HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_60_MBPS, + HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_90_MBPS, + HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_120_MBPS, + HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_135_MBPS, + HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_150_MBPS, + +#ifdef WLAN_FEATURE_11AC + /*11A duplicate 80MHz Rates*/ + HAL_PHY_RATE_11AC_DUP_6_MBPS, + HAL_PHY_RATE_11AC_DUP_9_MBPS, + HAL_PHY_RATE_11AC_DUP_12_MBPS, + HAL_PHY_RATE_11AC_DUP_18_MBPS, + HAL_PHY_RATE_11AC_DUP_24_MBPS, + HAL_PHY_RATE_11AC_DUP_36_MBPS, + HAL_PHY_RATE_11AC_DUP_48_MBPS, + HAL_PHY_RATE_11AC_DUP_54_MBPS, + + /*11AC rate 20MHZ Normal GI*/ + HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_6_5_MBPS, + HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_13_MBPS, + HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_19_5_MBPS, + HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_26_MBPS, + HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_39_MBPS, + HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_52_MBPS, + HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_58_5_MBPS, + HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_65_MBPS, + HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_78_MBPS, +#ifdef WCN_PRONTO + HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_86_5_MBPS, +#endif + + /*11AC rate 20MHZ Shortl GI*/ + HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_7_2_MBPS, + HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_14_4_MBPS, + HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_21_6_MBPS, + HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_28_8_MBPS, + HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_43_3_MBPS, + HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_57_7_MBPS, + HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_65_MBPS, + HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_72_2_MBPS, + HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_86_6_MBPS, +#ifdef WCN_PRONTO + HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_96_1_MBPS, +#endif + + /*11AC rates 40MHZ normal GI*/ + HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_13_5_MBPS , + HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_27_MBPS, + HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_40_5_MBPS, + HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_54_MBPS, + HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_81_MBPS, + HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_108_MBPS, + HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_121_5_MBPS, + HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_135_MBPS, + HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_162_MBPS, + HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_180_MBPS, + + /*11AC rates 40MHZ short GI*/ + HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_15_MBPS , + HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_30_MBPS, + HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_45_MBPS, + HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_60_MBPS, + HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_90_MBPS, + HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_120_MBPS, + HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_135_MBPS, + HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_150_MBPS, + HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_180_MBPS, + HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_200_MBPS, + + /*11AC rates 80 MHZ normal GI*/ + HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_29_3_MBPS , + HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_58_5_MBPS, + HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_87_8_MBPS, + HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_117_MBPS, + HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_175_5_MBPS, + HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_234_MBPS, + HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_263_3_MBPS, + HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_292_5_MBPS, + HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_351_MBPS, + HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_390_MBPS, + + /*11AC rates 80 MHZ short GI*/ + HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_32_5_MBPS , + HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_65_MBPS, + HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_97_5_MBPS, + HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_130_MBPS, + HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_195_MBPS, + HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_260_MBPS, + HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_292_5_MBPS, + HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_325_MBPS, + HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_390_MBPS, + HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_433_3_MBPS, +#endif //WLAN_FEATURE_11AC + + NUM_HAL_PHY_RATES, + HAL_PHY_RATE_INVALID, + MIN_RATE_INDEX = 0, + MAX_RATE_INDEX = NUM_HAL_PHY_RATES - 1, + HAL_PHY_RATE_INVALID_MAX_FIELD = 0x7FFFFFFF /* define as 4 bytes data */ +}eHalPhyRates; + +#define NUM_RATE_POWER_GROUPS NUM_HAL_PHY_RATES //total number of rate power groups including the CB_RATE_POWER_OFFSET +typedef uAbsPwrPrecision tRateGroupPwr[NUM_HAL_PHY_RATES]; + +//From halNvTables.h +#define NV_FIELD_COUNTRY_CODE_SIZE 3 +typedef PACKED_PRE struct PACKED_POST +{ + uint8 regDomain; //from eRegDomainId + uint8 countryCode[NV_FIELD_COUNTRY_CODE_SIZE]; // string identifier +}sDefaultCountry; + + +#define GF_PA_BIAS_SELECT_MASK 0X7 //(3 bits) +#define TSMC_PA_BIAS_SELECT_MASK 0x7 //(3 bits) + +#define GF_PA_BIAS_SELECT_1 0X0 +#define GF_PA_BIAS_SELECT_2 0X1 + +#define TSMC_PA_BIAS_SELECT_1 0X0 +#define TSMC_PA_BIAS_SELECT_2 0X1 +#define TSMC_PA_BIAS_SELECT_3 0x2 + + +#define EXT_PA_CTRL_POLARITY_DEFAULT 0X0 +#define EXT_PA_CTRL_POLARITY_VALID 0X80 + +#define EXT_PA_CTRL0_POLARITY_MASK 0X3 +#define EXT_PA_CTRL0_POLARITY_OFFSET 0X0 +#define EXT_PA_CTRL1_POLARITY_MASK 0XC +#define EXT_PA_CTRL1_POLARITY_OFFSET 0X2 + +#define EXT_PA_CTRL_POLARITY_ZERO 0X1 +#define EXT_PA_CTRL_POLARITY_ONE 0X2 + +typedef PACKED_PRE struct PACKED_POST +{ + uint8 skuID; + uint8 tpcMode2G; + uint8 tpcMode5G; + uint8 configItem1; + + uint8 xPA2G; + uint8 xPA5G; + uint8 extPaCtrl0Polarity; + uint8 extPaCtrl1Polarity; + + uint8 xLNA2G; + uint8 xLNA5G; + uint8 xCoupler2G; + uint8 xCoupler5G; + + uint8 xPdet2G; + uint8 xPdet5G; + uint8 enableDPD2G; + uint8 enableDPD5G; + + uint8 pdadcSelect2G; + uint8 pdadcSelect5GLow; + uint8 pdadcSelect5GMid; + uint8 pdadcSelect5GHigh; + + uint32 configItem2; + uint32 configItem3; + uint32 configItem4; +}sFwConfig; + + +#define NUM_RF_VR_RATE 13 +typedef uAbsPwrPrecision tRateGroupPwrVR[NUM_RF_VR_RATE]; + +typedef PACKED_PRE union PACKED_POST +{ + tRateGroupPwr pwrOptimum[NUM_RF_SUBBANDS]; // NV_TABLE_RATE_POWER_SETTINGS + sRegulatoryDomains regDomains[NUM_REG_DOMAINS]; // NV_TABLE_REGULATORY_DOMAINS + sDefaultCountry defaultCountryTable; // NV_TABLE_DEFAULT_COUNTRY + tTpcPowerTable plutCharacterized[NUM_RF_CHANNELS]; // NV_TABLE_TPC_POWER_TABLE + int16 plutPdadcOffset[NUM_RF_CHANNELS]; // NV_TABLE_TPC_PDADC_OFFSETS + tRateGroupPwrVR pwrOptimum_virtualRate[NUM_RF_SUBBANDS]; // NV_TABLE_VIRTUAL_RATE + sFwConfig fwConfig; // NV_TABLE_FW_CONFIG + sRssiChannelOffsets rssiChanOffsets[2]; // NV_TABLE_RSSI_CHANNEL_OFFSETS + sHwCalValues hwCalValues; // NV_TABLE_HW_CAL_VALUES + int16 antennaPathLoss[NUM_RF_CHANNELS]; // NV_TABLE_ANTENNA_PATH_LOSS + int16 pktTypePwrLimits[NUM_802_11_MODES][NUM_RF_CHANNELS]; // NV_TABLE_PACKET_TYPE_POWER_LIMITS + sOfdmCmdPwrOffset ofdmCmdPwrOffset; // NV_TABLE_OFDM_CMD_PWR_OFFSET + sTxBbFilterMode txbbFilterMode; // NV_TABLE_TX_BB_FILTER_MODE +}ALIGN_4 uNvTables; + +//From halPhy.h +typedef tPowerdBm tChannelPwrLimit; + +typedef PACKED_PRE struct PACKED_POST +{ + uint8 chanId; + tChannelPwrLimit pwr; +} ALIGN_4 tChannelListWithPower; + +//From HAL/inc/halNvTables.h +typedef enum +{ + NV_FIELDS_IMAGE = 0, //contains all fields + + NV_TABLE_RATE_POWER_SETTINGS = 2, + NV_TABLE_REGULATORY_DOMAINS = 3, + NV_TABLE_DEFAULT_COUNTRY = 4, + NV_TABLE_TPC_POWER_TABLE = 5, + NV_TABLE_TPC_PDADC_OFFSETS = 6, + NV_TABLE_HW_CAL_VALUES = 7, + NV_TABLE_RSSI_CHANNEL_OFFSETS = 9, + NV_TABLE_CAL_MEMORY = 10, //cal memory structure from halPhyCalMemory.h preceded by status + NV_TABLE_FW_CONFIG = 11, + NV_TABLE_ANTENNA_PATH_LOSS = 12, + NV_TABLE_PACKET_TYPE_POWER_LIMITS = 13, + NV_TABLE_OFDM_CMD_PWR_OFFSET = 14, + NV_TABLE_TX_BB_FILTER_MODE = 15, + NV_TABLE_VIRTUAL_RATE = 18, + + NUM_NV_TABLE_IDS, + NV_ALL_TABLES = 0xFFF, + NV_BINARY_IMAGE = 0x1000, + NV_MAX_TABLE = 0x7FFFFFFF /* define as 4 bytes data */ +}eNvTable; + +typedef PACKED_PRE struct PACKED_POST +{ + tRateGroupPwr pwrOptimum[NUM_RF_SUBBANDS]; // NV_TABLE_RATE_POWER_SETTINGS + sRegulatoryDomains regDomains[NUM_REG_DOMAINS]; // NV_TABLE_REGULATORY_DOMAINS + sDefaultCountry defaultCountryTable; // NV_TABLE_DEFAULT_COUNTRY + tTpcPowerTable plutCharacterized[NUM_RF_CHANNELS]; // NV_TABLE_TPC_POWER_TABLE + int16 plutPdadcOffset[NUM_RF_CHANNELS]; // NV_TABLE_TPC_PDADC_OFFSETS + tRateGroupPwrVR pwrOptimum_virtualRate[NUM_RF_SUBBANDS]; // NV_TABLE_VIRTUAL_RATE + sFwConfig fwConfig; // NV_TABLE_FW_CONFIG + sRssiChannelOffsets rssiChanOffsets[2]; // NV_TABLE_RSSI_CHANNEL_OFFSETS + sHwCalValues hwCalValues; // NV_TABLE_HW_CAL_VALUES + int16 antennaPathLoss[NUM_RF_CHANNELS]; // NV_TABLE_ANTENNA_PATH_LOSS + int16 pktTypePwrLimits[NUM_802_11_MODES][NUM_RF_CHANNELS]; // NV_TABLE_PACKET_TYPE_POWER_LIMITS + sOfdmCmdPwrOffset ofdmCmdPwrOffset; // NV_TABLE_OFDM_CMD_PWR_OFFSET + sTxBbFilterMode txbbFilterMode; // NV_TABLE_TX_BB_FILTER_MODE +}ALIGN_4 sNvTables; + +typedef PACKED_PRE struct PACKED_POST +{ + sNvFields fields; + sNvTables tables; +}ALIGN_4 sHalNv; + +extern const sHalNv nvDefaults; + +#endif + diff --git a/wcnss/riva/inc/wlan_phy.h b/wcnss/riva/inc/wlan_phy.h new file mode 100644 index 000000000000..acfdafe0962a --- /dev/null +++ b/wcnss/riva/inc/wlan_phy.h @@ -0,0 +1,919 @@ +/* + * Copyright (c) 2013, The Linux Foundation. All rights reserved. + * + * Previously licensed under the ISC license by Qualcomm Atheros, Inc. + * + * + * Permission to use, copy, modify, and/or distribute this software for + * any purpose with or without fee is hereby granted, provided that the + * above copyright notice and this permission notice appear in all + * copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL + * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE + * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +/* + * This file was originally distributed by Qualcomm Atheros, Inc. + * under proprietary terms before Copyright ownership was assigned + * to the Linux Foundation. + */ + +#ifndef WLAN_PHY_H +#define WLAN_PHY_H +/*============================================================================ +@file wlan_phy.h + +Contains definitions of all PHY related structures that aree needed by FTM/PTT + +Copyright (c) 2007 Qualcomm Technologies, Inc. All Rights Reserved. +Qualcomm Technologies Proprietary and Confidential +============================================================================*/ +#include + +/* Currently this structure holds the information about the current calibration mode. +In future, if anymore info is needed, that can be added here */ +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 currentCalibration; +} sCalibrationInfo; + +typedef PACKED_PRE struct PACKED_POST { + tANI_S16 I; //ADC sample of PHY_I_RAIL + tANI_S16 Q; //ADC sample of PHY_Q_RAIL +}tIQSamples; + +typedef tIQSamples tIQAdc; +typedef tIQSamples tIQDac; + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 maxGainIndex; + tANI_U8 topGainDb; + tANI_U8 bottomGainDb; + tANI_U8 unused[1]; +}tAsicAgc; + +#define TXFIR_MEM QWLAN_TXFIR_TXCAL_MEM0_MREG +#define TXFIR_MEM_GAIN_MULT (16) //bytes per gain +#define TXFIR_MEM_PER_CHAIN (16 * TXFIR_MEM_GAIN_MULT) //# of gains per chain * bytes per gain + +typedef tIQAdc tTxCarrierError; + +#define ONE_MICROSECOND (160) +#define DEFAULT_INTERFRAME_SPACE (ONE_MICROSECOND * 10) //10 microseconds + +typedef enum { + PHYDBG_TX_IDLE = 0, + PHYDBG_TX_START = 1, + PHYDBG_TX_WARMUP = 2, + PHYDBG_TX_INFD = 3, + PHYDBG_TX_CMD = 4, + PHYDBG_TX_SVC = 5, + PHYDBG_TX_PYLDF = 6, + PHYDBG_TX_PYLDR = 7, + PHYDBG_TX_CRC = 8, + PHYDBG_TX_FLUSH = 9, + PHYDBG_TX_TXDONEWAIT = 10, + PHYDBG_TX_TIFWAIT = 11 +} ePhyDbgTxStatus; + +typedef enum { + PHYDBG_PREAMBLE_OFDM, + PHYDBG_PREAMBLE_GREENFIELD, + PHYDBG_PREAMBLE_MIXED, + PHYDBG_PREAMBLE_SHORTB, + PHYDBG_PREAMBLE_LONGB, + + PHYDBG_LDPC_PREAMBLE_OFDM = 0x10, + PHYDBG_LDPC_PREAMBLE_GREENFIELD = 0x11, + PHYDBG_LDPC_PREAMBLE_MIXED = 0x12 +} ePhyDbgPreamble; + + +//grab ram +#ifdef VERIFY_HALPHY_SIMV_MODEL +#define GRAB_RAM_DBLOCK_SIZE (256) //number of samples in full capture +#else +#define GRAB_RAM_DBLOCK_SIZE (1024) //number of samples in full capture +#endif + +#define MAX_REQUESTED_GRAB_RAM_SAMPLES 256 //only allow 256 samples at a time +#define GRAB_RAM_BUFFER_DEPTH (4*1024) //maximum grab ram size in full capture +#define LAST_GRAB_RAM_SAMPLE_INDEX (GRAB_RAM_BUFFER_DEPTH - 1) + + +typedef PACKED_PRE struct PACKED_POST { + tIQAdc rx0; +} tGrabRamSample; + + +enum { + GRABRAM_RAWADC = 0, + GRABRAM_POSTIQ +}; +typedef tANI_U32 eGrabRamSampleType; + +typedef tANI_S8 tANI_S6; +typedef tANI_S16 tANI_S9; +typedef tANI_S16 tANI_S10; +typedef tANI_S16 tANI_S12; +typedef tANI_U16 tANI_U10; + + + +//convert float to a format that preserves enough accuracy to be used by driver +typedef tANI_S16 t2Decimal; +#define CONVERT_TO_2DECIMAL_PLACES(x) (x * 100) +#define CONVERT_FROM_2DECIMAL_PLACES(x) (x / 100) + +#ifndef PTT_FLOAT +#define PTT_FLOAT tANI_U32 // driver code can't include float, +//so this reserves space in our structures to allow floating point measurements +#endif + +typedef enum +{ + PHY_RX_CHAIN_0 = 0, + + PHY_MAX_RX_CHAINS = 1, + PHY_ALL_RX_CHAINS, + PHY_NO_RX_CHAINS +}ePhyRxChains; + +typedef enum +{ + PHY_I_RAIL = 0, + PHY_Q_RAIL = 1, + PHY_NUM_IQ_RAILS +}ePhyIQ; + +//[RY] extend total gain steps to 24 + +enum +{ + TX_GAIN_STEP_0, + TX_GAIN_STEP_1, + TX_GAIN_STEP_2, + TX_GAIN_STEP_3, + TX_GAIN_STEP_4, + TX_GAIN_STEP_5, + TX_GAIN_STEP_6, + TX_GAIN_STEP_7, + TX_GAIN_STEP_8, + TX_GAIN_STEP_9, + TX_GAIN_STEP_10, + TX_GAIN_STEP_11, + TX_GAIN_STEP_12, + TX_GAIN_STEP_13, + TX_GAIN_STEP_14, + TX_GAIN_STEP_15, + TX_GAIN_STEP_16, + TX_GAIN_STEP_17, + TX_GAIN_STEP_18, + TX_GAIN_STEP_19, + TX_GAIN_STEP_20, + TX_GAIN_STEP_21, + TX_GAIN_STEP_22, + TX_GAIN_STEP_23, + TX_GAIN_STEP_24, + TX_GAIN_STEP_25, + TX_GAIN_STEP_26, + TX_GAIN_STEP_27, + TX_GAIN_STEP_28, + TX_GAIN_STEP_29, + TX_GAIN_STEP_30, + TX_GAIN_STEP_31, + + RX_GAIN_STEP_0 = 0, + RX_GAIN_STEP_1, + RX_GAIN_STEP_2, + RX_GAIN_STEP_3, + RX_GAIN_STEP_4, + RX_GAIN_STEP_5, + RX_GAIN_STEP_6, + RX_GAIN_STEP_7, + RX_GAIN_STEP_8, + RX_GAIN_STEP_9, + RX_GAIN_STEP_10, + RX_GAIN_STEP_11, + RX_GAIN_STEP_12, + RX_GAIN_STEP_13, + RX_GAIN_STEP_14, + RX_GAIN_STEP_15, + + NUM_TX_GAIN_STEPS = 32, + MAX_TX_GAIN_STEP = TX_GAIN_STEP_31, + + NUM_RX_GAIN_STEPS = 16, + MAX_RX_GAIN_STEP = RX_GAIN_STEP_15, +}; +typedef tANI_U32 eGainSteps; + + +//[RY] new for PRIMA +#define DPD_RESPONSE_SIZE 128 +typedef PACKED_PRE struct PACKED_POST { + tANI_U8 dpdCalFailCnt; //Count for number of times DPD cal failed. + tANI_U8 dpdCalSuccessCnt; //Count for number of times DPD cal passed. + tANI_U8 dpdColdBootRepeatCalStatus; + tANI_U8 dpdLastIteration; + tANI_S16 dpd_threshold[DPD_RESPONSE_SIZE]; + tANI_S16 dpd_aoffset[DPD_RESPONSE_SIZE]; + tANI_S16 dpd_again[DPD_RESPONSE_SIZE]; + tANI_S16 dpd_poffset[DPD_RESPONSE_SIZE]; + tANI_S16 dpd_pgain[DPD_RESPONSE_SIZE]; + tANI_S32 dpd_sample[20]; + tANI_U8 dpd_try; + tANI_U8 band; +}sDPDcorrectionCalValues; + +typedef PACKED_PRE struct PACKED_POST { + sDPDcorrectionCalValues dpd[PHY_MAX_TX_CHAINS]; +}sTxChainsDPDCalValues; + + +//[RY] RX IQ correction coefficients Memory +typedef PACKED_PRE struct PACKED_POST { + tANI_S9 coeff_i[5]; + tANI_S9 coeff_q[5]; +}sIQCalValues; + +//[RY], added for RIVA +typedef PACKED_PRE struct PACKED_POST { + tANI_S9 iq_ampimb_coeff; + tANI_S16 txloleakage_i; // raw data is 6-bit 2's compliment + tANI_S16 txloleakage_q; // raw data is 6-bit 2's compliment +}sTXIQCalValues; + +//[RY], added for RIVA +typedef PACKED_PRE struct PACKED_POST { + tANI_S9 iqphaseimb_coeff_i[5]; + tANI_S9 iqphaseimb_coeff_q[5]; +}sTXIQPhaseImbCalValues; + +typedef PACKED_PRE struct PACKED_POST { + sIQCalValues iq[PHY_MAX_RX_CHAINS]; +}sRxChainsIQCalValues; + +//[RY] change for PRIMA +typedef PACKED_PRE struct PACKED_POST { + sTXIQCalValues iq[PHY_MAX_TX_CHAINS]; + sTXIQPhaseImbCalValues iqImb[PHY_MAX_TX_CHAINS]; +}sTxChainsIQCalValues; + +typedef PACKED_PRE struct PACKED_POST { + tANI_S9 co_i[3]; + tANI_S9 co_q[3]; +}sHKIQCalValues; + +typedef PACKED_PRE struct PACKED_POST { + sHKIQCalValues co[PHY_MAX_TX_CHAINS]; +}sTxChainsHKIQCalValues; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U8 lna_code; //wlan_lna_5g_control1,wl_5g_lna_load_ctune + tANI_U8 gm_code; //wlan_rxgm_5g_control4,wlgm_ctune +}sLnaBandCalValues; + +typedef PACKED_PRE struct PACKED_POST { + sLnaBandCalValues lnaCode[PHY_MAX_RX_CHAINS]; +}sTxChainsLnaBandCalValues; + +typedef tANI_U16 t_mW; //milliWatts +typedef tANI_U8 tPwrTemplateIndex; //5-bit number used as the index into the tx gain tables + +typedef PACKED_PRE struct PACKED_POST { + tANI_U8 txPowerAdc[PHY_MAX_TX_CHAINS]; +}sTxChainsPowerAdcReadings; + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 agcGain; +}tRxGain; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U8 rx[PHY_MAX_RX_CHAINS]; +}sRxChainsData; + +typedef sRxChainsData sRxChainsRssi; +typedef sRxChainsData sRxChainsAgcDisable; + +typedef PACKED_PRE struct PACKED_POST { + tANI_BOOLEAN rx[PHY_MAX_RX_CHAINS]; +}sRxChainsBoolean; + +typedef sRxChainsBoolean sRxChainsAgcEnable; + +#define NUM_AGC_GAINS 64 +typedef tRxGain sAgcGainLut[NUM_AGC_GAINS]; + + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_S6 iLo; + tANI_S6 qLo; +}sTxFirLoCorrect; + +typedef tIQAdc sTxLoCorrectBB[PHY_MAX_TX_CHAINS][NUM_TX_GAIN_STEPS]; + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U32 txIqLoCache[PHY_MAX_TX_CHAINS][NUM_TX_GAIN_STEPS][4]; + tANI_U32 spatialRotation; +}tAsicTxFir; + +//Tx Power Config +//A collection of selected calibrated power points at selected frequencies. +//The algorithm does not need to know any particulars about which frequencies or cal points, +// just the linearized adjustments at the selected calibration points +#define MAX_TPC_CHANNELS (NUM_RF_CHANNELS) +#define START_TPC_CHANNEL (2412) +#define END_TPC_CHANNEL (2484) + +#define MAX_PWR_LUT_DBM (24) +#define MIN_PWR_LUT_DBM (8) + + +/* The reason that MAX_PWR_LUT_DBM_2DEC_PLACES is not simply (MAX_PWR_LUT_DBM * 100) is due to the fact + that we are interpolating the 5-bit power template index from this range compared to a LUT range of 0 to 127. + There is an expectation that this power range is evenly divided in 0.5dBm steps. + We expect that a commanded 13dBm would yield a power template index of 10, where a power template index of 0 would represent 8dBm. + If we used an even 2400 to represent the max power, then the calculation for 13dBm actually returns 9: + (127 - 0)*((1300 - 800)/(2400 - 800))+0 = 39.6875 = 39. When shifted to 5 bits, =9. Not what we wanted. + What we need to do is find the 2-decimal place power that corresponds as closely as possible to the 127 in the 0 to 127 range. + For the 800 to 2400 range, that comes out to 2386.5, so 2386. So again for a commanded power of 13dBm: + (127 - 0)*((1300 - 800)/(2386 - 800))+0 = 40.0378 = 40. When shifted to 5-bits, = 10, which is what we wanted. + +*/ + +#define MIN_PWR_LUT_DBM_2DEC_PLACES (MIN_PWR_LUT_DBM * 100) +#define MAX_PWR_LUT_DBM_2DEC_PLACES ((MAX_PWR_LUT_DBM * 100) - (1 + (100 * (MAX_PWR_LUT_DBM - MIN_PWR_LUT_DBM))/TPC_MEM_POWER_LUT_DEPTH)) + +//macro provides a quick conversion of dbm value between MIN_PWR_LUT_DBM and MAX_PWR_LUT_DBM to a power template index(0 to 31) +//based on convention, which may not hold true in the future. +#define CONVERT_DBM_GINDEX(dbm) (((dbm - MIN_PWR_LUT_DBM) * 32) / (MAX_PWR_LUT_DBM - MIN_PWR_LUT_DBM)) + +typedef tANI_U8 tTxGainCombo; //7-bit gain value used to get the power measurement + +typedef PACKED_PRE struct PACKED_POST +{ + tPowerDetect min; + tPowerDetect max; +}tPwrTemplateRange; + + + +/* + The following union affords backward compatibility with txGain usage with band-specific tTpcConfig tables. + Due to my finding that 7-bits is not enough precision, we need to reuse the txGain space as extra precision bits + for the adjustedPwrDet. My spreadsheet shows that we need at least 4 bits more precision. + To know which usage, the MSB of adjustedPwrDet can be set to signify the extra precision in place of the txGain, which isn't used anyway. + We just need to be careful not to interpret a pre-existing table's txGain as extra precision. +*/ + + typedef union + { + tTxGainCombo txGain; //7-bit gain used to measure the pwrDetAdc value + tANI_U8 hi8_adjustedPwrDet; //if the MSB is set in adjustedPwrDet, then these are extra bits of precision + }uExtraLutBits; + + +typedef PACKED_PRE struct PACKED_POST +{ + t2Decimal min; //sometimes used for comparing chain powers + t2Decimal max; //sometimes used for comparing chain powers +}tPowerdBmRange; //absolute power measurement precision maintained to two decimal places + + +typedef tANI_U16 tRfADCVal; +typedef tRfADCVal tTempADCVal; + +typedef PACKED_PRE struct PACKED_POST +{ + tRfADCVal pdadc_offset; + tANI_U8 reserved[2]; +}tTpcParams; + + +//these definitions used as indexing to power per channel per rate table stored in NV +#define CB_RATE_POWER_OFFSET 0 +#define CB_RATE_POWER_OFFSET_LAST_INDEX 60 //last index where we would apply the CB_RATE_POWER_OFFSET + +/* TX Power Calibration & Report Types */ + + + typedef PACKED_PRE struct PACKED_POST + { + tANI_U8 temperatureAdc; //= 5 bit temperature measured at time sample was taken + tANI_U8 txGain; //= 7 bit gain value used to get the power measurement + tANI_U8 pwrDetAdc; //= 8 bit ADC power detect value + tANI_U8 reserved; + uAbsPwrPrecision absPowerMeasured; //= dBm measurement, will be truncated to two decimal places + }tTpcCalPoint; + + + typedef PACKED_PRE struct PACKED_POST + { + tANI_U16 numTpcCalPoints; + tANI_U16 reserved; + tTpcCalPoint chain[MAX_TPC_CAL_POINTS]; + }tTpcChainData; + + + typedef PACKED_PRE struct PACKED_POST + { + tANI_U16 freq; //frequency in MHz + tANI_U16 reserved; + tTpcChainData empirical[PHY_MAX_TX_CHAINS]; //TPC samples passed in + }tTpcFreqData; + + typedef PACKED_PRE struct PACKED_POST + { + tANI_U8 numChannels; + tANI_U8 reserved[3]; + tTpcFreqData calValues[MAX_TPC_CHANNELS]; + }sTpcFreqCalTable; + + +typedef PACKED_PRE struct PACKED_POST { + tPowerDetect lut; //7-bit value in the power Lookup Table + tANI_U8 reserved[3]; + + uAbsPwrPrecision abs; //LUT value conversion to absolute dBm +}tTxPowerLutOutput; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U8 gain; //8-bit coarse(bits 4-7) & fine(bits 0-3) gain commanded for the current index + tPowerDetect adc; //8-bit power ADC sampled during the packet preamble + tANI_U16 rawAdc; //11-bit power raw ADC sampled + + tTxPowerLutOutput indexMinMatch; //minimum LUT matching power that satisfies the power template index setting + tTxPowerLutOutput indexMaxMatch; //maximum LUT matching power that satisfies the power template index setting + tTxPowerLutOutput output; //output power values corresponding to power ADC index +}tTxChainPower; + +extern const tRfChannelProps rfChannels[NUM_RF_CHANNELS]; + +typedef enum +{ + RF_CAL_TONE_28NEG, + RF_CAL_TONE_24NEG, + RF_CAL_TONE_20NEG, + RF_CAL_TONE_16NEG, + RF_CAL_TONE_12NEG, + RF_CAL_TONE_8NEG, + RF_CAL_TONE_4NEG, + RF_CAL_TONE_4POS, + RF_CAL_TONE_8POS, + RF_CAL_TONE_12POS, + RF_CAL_TONE_16POS, + RF_CAL_TONE_20POS, + RF_CAL_TONE_24POS, + RF_CAL_TONE_28POS, + + NUM_RF_TONES, + + MIN_RF_TONE = RF_CAL_TONE_28NEG, + MAX_RF_TONE = RF_CAL_TONE_28POS +}eRfTones; + +typedef tANI_U8 tDcoCorrect; +typedef tANI_S8 tIm2Correct; + +typedef PACKED_PRE struct PACKED_POST { + tDcoCorrect IDcoCorrect; + tDcoCorrect QDcoCorrect; + tANI_U8 dcRange; +}tRxDcoCorrect; + +typedef PACKED_PRE struct PACKED_POST { + tRxDcoCorrect dco[PHY_MAX_RX_CHAINS]; +}tRxChainsDcoCorrections; + +typedef PACKED_PRE struct PACKED_POST { + tIm2Correct ICorrect; + tIm2Correct QCorrect; +}tRxIm2Correct; + +typedef PACKED_PRE struct PACKED_POST { + tRxIm2Correct dco[PHY_MAX_RX_CHAINS]; +}tRxChainsIm2Corrections; + +typedef PACKED_PRE struct PACKED_POST { + tDcoCorrect IDcoCorrect; + tDcoCorrect QDcoCorrect; +}tTxLoCorrect; + +typedef PACKED_PRE struct PACKED_POST { + tTxLoCorrect txLo[PHY_MAX_TX_CHAINS]; +}sTxChainsLoCorrections; + + +//tDcoCorrect is needed to define rf specific structures + +#define NUM_RF_RX_GAIN_STEPS (128) +#define MAX_RF_RX_GAIN_STEP (NUM_RF_RX_GAIN_STEPS - 1) + +#define NUM_RF_TX_GAIN_STEPS (16) +#define MAX_RF_TX_GAIN_STEP (NUM_RF_TX_GAIN_STEPS - 1) + +#define RF_AGC_GAIN_LUT_DEPTH (128) +#define NUM_RF_DCO_VALUES (128) //There are only 32 DCO values, but our algorithm it makes more sense for us to access these by AGC gain index +#define MAX_RF_DCO_VALUE (NUM_RF_DCO_VALUES - 1) + + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U16 gainReg1; //GEMINI_REG_RX_GC_0 (lna + mix + tia + bq1 + bq2 + pga) +}tRfRxGain; + + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U16 bbf_gain_cnt; + tANI_U16 bbf_lin_adj; + tANI_U16 lo_mix_da_gain_cntl; + tANI_U16 pa_gain_cntl; + tANI_U16 da_pa_bias_1_cnt; + tANI_U16 da_pa_bias_2_cntl; +}tRfTxGain; + +typedef PACKED_PRE struct PACKED_POST +{ + //TODO:define this struct for Gemini + tANI_U8 rxIf; + tANI_U8 txIf; + tANI_U8 txRf; + tANI_U8 reserved; +}sRfSpecificFilterSettings; + +typedef sRfSpecificFilterSettings sRfChannelFilterSettings[NUM_RF_CHANNELS]; + + +typedef PACKED_PRE struct PACKED_POST +{ + tANI_U8 hdet_ctl_ext_atten; + tANI_U8 hdet_dcoc_code; + tANI_U8 hdet_dcoc_ib_rcal_en; + tANI_U8 hdet_dcoc_ib_scal_en; +}sRfNvCalValues; //stored in QFUSE + + + +typedef enum +{ + SYNTH_UNLOCKED, + SYNTH_LOCK +}eRfSynthLock; + +typedef enum +{ + TEMP_SENSOR_PA, + TEMP_SENSOR_RX +}eRfTempSensor; + +typedef enum +{ + TEMPERATURE_BIN_0, //-30 to 5 C + TEMPERATURE_BIN_1, //5 to 45 C + TEMPERATURE_BIN_2, //45 to 85 C + TEMPERATURE_BIN_3, //85 to 125 C + NUM_TEMPERATURE_BINS +}eTemperatureBins; + +typedef PACKED_PRE struct PACKED_POST { + tANI_U16 hdetDcocCode; + tANI_U16 hdetDcoOffset; +}sRfHdetCalValues; + +#define TPC_TXPWR_ENABLE_MASK QWLAN_TPC_TXPWR_ENABLE_EN_MASK + + +#define TPC_MEM_TX0_PWR_LUT_OFFSET QWLAN_TPC_POWERDET0_RAM_MREG +#define TPC_MEM_TX1_PWR_LUT_OFFSET QWLAN_TPC_POWERDET1_RAM_MREG +#define TPC_MEM_TX2_PWR_LUT_OFFSET QWLAN_TPC_POWERDET2_RAM_MREG +#define TPC_MEM_TX3_PWR_LUT_OFFSET QWLAN_TPC_POWERDET3_RAM_MREG +#define TPC_MEM_TX0_GAIN_LUT_OFFSET QWLAN_TPC_GAIN_LUT0_MREG +#define TPC_MEM_TX1_GAIN_LUT_OFFSET QWLAN_TPC_GAIN_LUT1_MREG +#define TPC_MEM_TX2_GAIN_LUT_OFFSET QWLAN_TPC_GAIN_LUT2_MREG +#define TPC_MEM_TX3_GAIN_LUT_OFFSET QWLAN_TPC_GAIN_LUT3_MREG + +//these masks are the same for both chains +#define TPC_POWERDET_MASK QWLAN_TPC_POWERDET0_RAM_POWER_MASK +#define TPC_GAIN_RF_MASK QWLAN_TPC_GAIN_LUT0_RF_GAIN_MASK +#define TPC_GAIN_RF_OFFSET QWLAN_TPC_GAIN_LUT0_RF_GAIN_OFFSET +#define TPC_GAIN_DIG_MASK QWLAN_TPC_GAIN_LUT0_DIG_GAIN_MASK + + +#define TPC_MEM_GAIN_LUT_DEPTH 32 + + +#define TPC_ADC_CTRL_REG QWLAN_TPC_ADC_CTRL_GET_ADC_REG +#define TPC_ADC_GET_MASK QWLAN_TPC_ADC_CTRL_GET_ADC_GET_ADC_MASK + +#define TPC_ADC_FAILED_MASK QWLAN_TPC_ADC_STATUS_FAILED_MASK +#define TPC_ADC_BUSY_P_MASK QWLAN_TPC_ADC_STATUS_BUSY_P_MASK +#define TPC_ADC_BUSY_T_MASK QWLAN_TPC_ADC_STATUS_BUSY_T_MASK + + +#define MSK_1 0x1 +#define MSK_2 0x3 +#define MSK_3 0x7 +#define MSK_4 0xF +#define MSK_5 0x1F +#define MSK_6 0x3F +#define MSK_7 0x7F +#define MSK_8 0xFF +#define MSK_9 0x1FF +#define MSK_10 0x3FF +#define MSK_11 0x7FF +#define MSK_12 0xFFF +#define MSK_13 0x1FFF +#define MSK_14 0x3FFF +#define MSK_15 0x7FFF +#define MSK_16 0xFFFF +#define MSK_17 0x1FFFF +#define MSK_18 0x3FFFF +#define MSK_19 0x7FFFF +#define MSK_20 0xFFFFF +#define MSK_21 0x1FFFFF +#define MSK_22 0x3FFFFF +#define MSK_23 0x7FFFFF +#define MSK_24 0xFFFFFF +#define MSK_25 0x1FFFFFF +#define MSK_26 0x3FFFFFF +#define MSK_27 0x7FFFFFF +#define MSK_28 0xFFFFFFF +#define MSK_29 0x1FFFFFFF +#define MSK_30 0x3FFFFFFF +#define MSK_31 0x7FFFFFFF +#define MSK_32 0xFFFFFFFF + + +#define COARSE_GAIN_MASK MSK_4 +#define COARSE_GAIN_OFFSET 4 +#define FINE_GAIN_MASK MSK_4 //the upper most bit overlaps the coarse gain and should not be used for TPC LUT data +#define FINE_GAIN_OFFSET 0 + +typedef enum +{ + TPC_COARSE_TXPWR_0, + TPC_COARSE_TXPWR_1, + TPC_COARSE_TXPWR_2, + TPC_COARSE_TXPWR_3, + TPC_COARSE_TXPWR_4, + TPC_COARSE_TXPWR_5, + TPC_COARSE_TXPWR_6, + TPC_COARSE_TXPWR_7, + TPC_COARSE_TXPWR_8, + TPC_COARSE_TXPWR_9, + TPC_COARSE_TXPWR_10, + TPC_COARSE_TXPWR_11, + TPC_COARSE_TXPWR_12, + TPC_COARSE_TXPWR_13, + TPC_COARSE_TXPWR_14, + TPC_COARSE_TXPWR_15, + TPC_COARSE_TXPWR_16, + TPC_COARSE_TXPWR_17, + TPC_COARSE_TXPWR_18, + TPC_COARSE_TXPWR_19, + TPC_COARSE_TXPWR_20, + TPC_COARSE_TXPWR_21, + TPC_COARSE_TXPWR_22, + TPC_COARSE_TXPWR_23, + TPC_COARSE_TXPWR_24, + TPC_COARSE_TXPWR_25, + TPC_COARSE_TXPWR_26, + TPC_COARSE_TXPWR_27, + TPC_COARSE_TXPWR_28, + TPC_COARSE_TXPWR_29, + TPC_COARSE_TXPWR_30, + TPC_COARSE_TXPWR_31, + NUM_TPC_COARSE_STEPS = TPC_COARSE_TXPWR_31 - TPC_COARSE_TXPWR_0 + 1, + MIN_TPC_COARSE_TXPWR = TPC_COARSE_TXPWR_0, + MAX_TPC_COARSE_TXPWR = TPC_COARSE_TXPWR_31 +}eTxCoarseGain; //refers to the external RF power adjustment + +typedef enum +{ + TPC_FINE_TXPWR_0, + TPC_FINE_TXPWR_1, + TPC_FINE_TXPWR_2, + TPC_FINE_TXPWR_3, + TPC_FINE_TXPWR_4, + TPC_FINE_TXPWR_5, + TPC_FINE_TXPWR_6, + TPC_FINE_TXPWR_7, + TPC_FINE_TXPWR_8, + TPC_FINE_TXPWR_9, + TPC_FINE_TXPWR_10, + TPC_FINE_TXPWR_11, + TPC_FINE_TXPWR_12, + TPC_FINE_TXPWR_13, + TPC_FINE_TXPWR_14, + TPC_FINE_TXPWR_15, + MIN_TPC_FINE_TXPWR = TPC_FINE_TXPWR_0, + MAX_TPC_FINE_TXPWR = TPC_FINE_TXPWR_15 +}eTxFineGain; //refers to the internal TxFIR power adjustment + +typedef PACKED_PRE struct PACKED_POST { + eTxCoarseGain coarsePwr; + eTxFineGain finePwr; +}tTxGain; + +//for 30second periodic interrupt, do this every 5 minutes +#define HAL_PHY_PERIODIC_CAL_ITER_LIMIT 10 + +typedef enum +{ + //these show which rx and tx chains are enabled, other chains are disable accordingly + //Production modes + PHY_CHAIN_SEL_R0_T0_ON, + + PHY_CHAIN_SEL_BT_R0_T0_ON, //simultaneous bluetooth receive enabled + + + //test modes + PHY_CHAIN_SEL_R0_ON, + PHY_CHAIN_SEL_T0_ON, + PHY_CHAIN_SEL_NO_RX_TX, + + MAX_PHY_CHAIN_SEL, + INVALID_PHY_CHAIN_SEL, + PHY_MAX_CHAIN_SELECT = 0x7FFFFFFF /* define as 4 bytes data */ +}ePhyChainSelect; + +typedef enum +{ +#ifdef CHANNEL_BONDED_CAPABLE + + PHY_CCA_40MHZ_SOURCE = 0, +#endif + + PHY_CCA_20MHZ_SOURCE = 1 +}ePhyCCASource; + +typedef enum +{ + PHY_CCA_FORCED_ON = 0, + PHY_CCA_ED = 1, + PHY_CCA_CD = 2, + PHY_CCA_CD_AND_CS = 3, + PHY_CCA_ED_AND_CD = 4, + PHY_CCA_ED_OR_CD = 5, + PHY_CCA_ED_AND_CD_AND_CS = 6, + PHY_CCA_ED_OR_CD_AND_CS = 7, + PHY_CCA_SEC_ED40_AND_NOR_PKTDET40_PKTDET20 = 8, + PHY_CCA_SEC_BUSY = 9 +}ePhyCCAMode; + +typedef enum +{ + PHY_RX_DISABLE_NONE = 0, + PHY_RX_DISABLE_11AG = 0x00000001, + PHY_RX_DISABLE_11B = 0x00000002, + PHY_RX_DISABLE_11N40 = 0x00000004, + PHY_RX_DISABLE_11AC80 = 0x00000008, + + PHY_RX_DISABLE_11ABG = (PHY_RX_DISABLE_11AG | PHY_RX_DISABLE_11B), + PHY_RX_DISABLE_ALL_TYPES = (PHY_RX_DISABLE_11B | PHY_RX_DISABLE_11AG | + PHY_RX_DISABLE_11N40 | PHY_RX_DISABLE_11AC80), +}ePhyRxDisabledPktTypes; + + +// Enum for network density setting. +typedef enum +{ + PHY_NW_DENSITY_LOW = 0, + PHY_NW_DENSITY_MED, + PHY_NW_DENSITY_HIGH, + PHY_NW_DENSITY_ADAPTIVE +} ePhyNwDensity; + + +typedef enum +{ + ALL_CALS, //RxDco 1st, TxLO 2nd + RX_DCO_CAL_ONLY, + RX_IM2_CAL_ONLY, + RX_DCO_IM2_CAL, + TX_LO_CAL_ONLY, + RX_IQ_CAL_ONLY, + TX_IQ_CAL_ONLY, + HKDAC_TX_IQ_CAL_ONLY, + NO_CALS = 0xFF +}eCalSelection; + + +//supports testing of closed-loop power control +typedef enum +{ + FORCE_CLOSED_LOOP_GAIN = 0, //phyDbg pkt gen only uses gain index 0 when we are taking measurements with the closed-loop gain + FORCE_POWER_TEMPLATE_INDEX = 1, //only use forced power template index + FIXED_POWER_DBM = 2, //only use to specify fixed power, ignoring rate/channel/reg limits + REGULATORY_POWER_LIMITS = 3, //use production power Lut settings limited by power limit table per channel + RATE_POWER_NON_LIMITED = 4, //use power specified per rate and channel group, but don't limit power by channel + POWER_INDX_SRC_MAX_VAL = 0x7FFFFFFF, //dummy val to set enum to 4 bytes +}ePowerTempIndexSource; + +#define BIT_0 0x00000001 +#define BIT_1 0x00000002 +#define BIT_2 0x00000004 +#define BIT_3 0x00000008 +#define BIT_4 0x00000010 +#define BIT_5 0x00000020 +#define BIT_6 0x00000040 +#define BIT_7 0x00000080 +#define BIT_8 0x00000100 +#define BIT_9 0x00000200 +#define BIT_10 0x00000400 +#define BIT_11 0x00000800 +#define BIT_12 0x00001000 +#define BIT_13 0x00002000 +#define BIT_14 0x00004000 +#define BIT_15 0x00008000 +#define BIT_16 0x00010000 +#define BIT_17 0x00020000 +#define BIT_18 0x00040000 +#define BIT_19 0x00080000 +#define BIT_20 0x00100000 +#define BIT_21 0x00200000 +#define BIT_22 0x00400000 +#define BIT_23 0x00800000 +#define BIT_24 0x01000000 +#define BIT_25 0x02000000 +#define BIT_26 0x04000000 +#define BIT_27 0x08000000 +#define BIT_28 0x10000000 +#define BIT_29 0x20000000 +#define BIT_30 0x40000000 +#define BIT_31 0x80000000 + +#define WFM_CLK_80 BIT_3 +#define WFM_START BIT_0 +#define WFM_STOP BIT_1 + +#define WFM_MEM_I_DATA_MASK (0x7FF) +#define WFM_MEM_Q_DATA_OFFSET (0xB) +#define WFM_MEM_Q_DATA_MASK (0x3FF800) + +typedef enum +{ + WAVE_SINGLE_SHOT = 0, + WAVE_CONTINUOUS = BIT_2 +}eWaveMode; + +typedef enum +{ + RATE_240 = 0, + RATE_160 = 1, + RATE_120 = 2, + RATE_80 = 3, + RATE_40 = 4, + RATE_20 = 5, +}eWaveRate; + +#define MAX_TONE_AMPLITUDE (2^11) // peak to peak + +#define MAX_TEST_WAVEFORM_SAMPLES 500 + +#define NUM_RX_IMB_CAL_TONES 4 + +#define CAL_WFM_TX_TONE_8_START_IDX 0 +#define CAL_WFM_TX_TONE_8_STOP_IDX 255 +#define CAL_WFM_TX_TONE_MINUS_8_START_IDX 256 +#define CAL_WFM_TX_TONE_MINUS_8_STOP_IDX 511 +#define CAL_WFM_RX_TONE_START_IDX 512 +#define CAL_WFM_RX_TONE_STOP_IDX 767 + +#define B_RATE_CAL_ADJUSTMENT -150 +#define GN_RATE_BANDEDGE_ADJUSTMENT -100 + +#define TPC_INDEX_WIFI_DIRECT 0 +#define TPC_INDEX_LOW_POWER 1 +#define MIN_TPC_GAIN_INDEX 0 //Index 0 used for Wifi Direct +#define TPC_GAIN_LUT_PWR_SLOPE 2 +#define MAX_TPC_GAIN_LUT_DBM (22) +#define MIN_TPC_GAIN_LUT_DBM (6) + +#define MAX_TPC_GAIN_LUT_DBM_2DEC_PLACES (MAX_TPC_GAIN_LUT_DBM * 100) +#define MIN_TPC_GAIN_LUT_DBM_2DEC_PLACES (MIN_TPC_GAIN_LUT_DBM * 100) + +typedef enum +{ + RF_BANDWIDTH_20MHZ = 20, + RF_BANDWIDTH_40MHZ = 40, + RF_BANDWIDTH_80MHZ = 80, + RF_MIN_BANDWIDTH = RF_BANDWIDTH_20MHZ, + RF_MAX_BANDWIDTH = RF_BANDWIDTH_80MHZ, + RF_BANDWIDTH_INVALID = 0x7FFFFFFF +}eRfBandwidth; + +#endif /* WLAN_PHY_H */ diff --git a/wcnss/riva/inc/wlan_qct_dev_defs.h b/wcnss/riva/inc/wlan_qct_dev_defs.h new file mode 100644 index 000000000000..c4bb755550b0 --- /dev/null +++ b/wcnss/riva/inc/wlan_qct_dev_defs.h @@ -0,0 +1,381 @@ +/* + * Copyright (c) 2013, The Linux Foundation. All rights reserved. + * + * Previously licensed under the ISC license by Qualcomm Atheros, Inc. + * + * + * Permission to use, copy, modify, and/or distribute this software for + * any purpose with or without fee is hereby granted, provided that the + * above copyright notice and this permission notice appear in all + * copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL + * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE + * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +/* + * This file was originally distributed by Qualcomm Atheros, Inc. + * under proprietary terms before Copyright ownership was assigned + * to the Linux Foundation. + */ + +/** + * + * @file: wlan_qct_dev_defs.h + * + * @brief: This file contains the hardware related definitions. + * + * Copyright (C) 2008, Qualcomm Technologies, Inc. All rights reserved. + */ + +#ifndef __WLAN_QCT_DEV_DEFS_H +#define __WLAN_QCT_DEV_DEFS_H + + +/* -------------------------------------------------------------------- + * HW definitions for WLAN Chip + * -------------------------------------------------------------------- + */ + +#ifdef WCN_PRONTO + +#ifdef WLAN_SOFTAP_VSTA_FEATURE +//supports both V1 and V2 +#define HAL_NUM_ASSOC_STA 32 // HAL_NUM_STA - No of GP STAs - 2 (1 self Sta + 1 Bcast Sta) +#define HAL_NUM_STA 41 +#define HAL_NUM_HW_STA 16 + +#define HAL_NUM_GPSTA 4 +#define HAL_NUM_UMA_DESC_ENTRIES HAL_NUM_HW_STA // or HAL_NUM_STA + +#define HAL_NUM_BSSID 2 +#define HAL_NUM_STA_WITHOUT_VSTA 12 +#define HAL_NUM_STA_INCLUDING_VSTA 32 + +#define HAL_NUM_VSTA (HAL_NUM_STA - HAL_NUM_HW_STA) +#define QWLANFW_MAX_NUM_VSTA (HAL_NUM_VSTA) +#define QWLANFW_VSTA_INVALID_IDX (HAL_NUM_STA+1) +#define QWLAN_VSTA_MIN_IDX (HAL_NUM_HW_STA) +#define QWLANFW_NUM_GPSTA (HAL_NUM_GPSTA) + +// For Pronto +#define HAL_NUM_STA_WITHOUT_VSTA_PRONTO_V1 9 +#define HAL_NUM_STA_WITHOUT_VSTA_PRONTO_V2 (HAL_NUM_STA_WITHOUT_VSTA) + +#define IS_VSTA_VALID_IDX(__x) \ + ((__x) != QWLANFW_VSTA_INVALID_IDX) + +#define IS_VSTA_IDX(__x) \ + (((__x) >= QWLAN_VSTA_MIN_IDX) && ((__x) < HAL_NUM_STA)) + +#define GET_VSTA_INDEX_FOR_STA_INDEX(__idx) ((__idx) - QWLAN_VSTA_MIN_IDX) + +// is the STA a General Purpose STA? +#define IS_GPSTA_IDX(__x) \ + (((__x) >= (HAL_NUM_HW_STA-HAL_NUM_GPSTA)) && \ + ((__x) < HAL_NUM_HW_STA)) + +// is the STA a HW STA (excluding GP STAs) +#define IS_HWSTA_IDX(__x) \ + ((__x) < (HAL_NUM_HW_STA-HAL_NUM_GPSTA)) + +#define HAL_NUM_STA_INCLUDING_VSTA 32 + +#elif WCN_PRONTO_V1 + +/* In Pronto 1.0 TPE descriptor size is increased to 1K per station + * but not the cMEM allocated for hardware descriptors. Due to this + * memory limitation the number of stations are limited to 9 and BSS + * to 2 respectively. + * + * In Pronto 2.0, TPE descriptor size is reverted + * back to 512 bytes and hence more stations and BSSs can be supported + * from Pronto 2.0 + * + * In Pronto 1.0, 9 HW stations are supported including BCAST STA(staId 0) + * and SELF STA(staId 1). So total ASSOC stations which can connect to + * Pronto 1.0 Softap = 9 - 1(self sta) - 1(Bcast sta) = 7 stations + */ +#define HAL_NUM_HW_STA 9 +#define HAL_NUM_STA (HAL_NUM_HW_STA) +#define HAL_NUM_BSSID 2 +#define HAL_NUM_UMA_DESC_ENTRIES 9 +#define HAL_NUM_ASSOC_STA 7 + + +#else /* WCN_PRONTO_V1 */ + +#define HAL_NUM_HW_STA 14 +#define HAL_NUM_STA (HAL_NUM_HW_STA) +#define HAL_NUM_BSSID 4 +#define HAL_NUM_UMA_DESC_ENTRIES 14 +#define HAL_NUM_ASSOC_STA 12 + + +#endif /* WCN_PRONTO_V1 and WLAN_SOFTAP_VSTA_FEATURE*/ +#else /* WCN_PRONTO */ + +/* + * Riva supports 16 stations in hardware + * + * Riva without Virtual STA feature can only support 12 stations: + * 1 Broadcast STA (hard) + * 1 "Self" STA (hard) + * 10 Soft AP Stations (hard) + * + * Riva with Virtual STA feature supports 38 stations: + * 1 Broadcast STA (hard) + * 1 "Self" STA (hard) + * 4 General Purpose Stations to support Virtual STAs (hard) + * 32 Soft AP Stations (10 hard/22 virtual) + * + * To support concurrency with Vsta, number of stations are increased to 41 (from 38). + * 1 for the second interface. + * 1 for reserving an infra peer STA index (hard) for the other interface. + * 1 for P2P device role. + */ +#ifdef WLAN_SOFTAP_VSTA_FEATURE +#define HAL_NUM_ASSOC_STA 32 +#define HAL_NUM_STA 41 +#define HAL_NUM_HW_STA 16 +#define HAL_NUM_GPSTA 4 +#define HAL_NUM_VSTA (HAL_NUM_STA - HAL_NUM_HW_STA) + +#define QWLANFW_MAX_NUM_VSTA HAL_NUM_VSTA +#define QWLANFW_VSTA_INVALID_IDX (HAL_NUM_STA+1) +#define QWLAN_VSTA_MIN_IDX HAL_NUM_HW_STA +#define QWLANFW_NUM_GPSTA HAL_NUM_GPSTA + + +#define IS_VSTA_VALID_IDX(__x) \ + ((__x) != QWLANFW_VSTA_INVALID_IDX) + +#define IS_VSTA_IDX(__x) \ + (((__x) >= QWLAN_VSTA_MIN_IDX) && ((__x) < HAL_NUM_STA)) + +#define GET_VSTA_INDEX_FOR_STA_INDEX(__idx) ((__idx) - QWLAN_VSTA_MIN_IDX) + +// is the STA a General Purpose STA? +#define IS_GPSTA_IDX(__x) \ + (((__x) >= (HAL_NUM_HW_STA-HAL_NUM_GPSTA)) && \ + ((__x) < HAL_NUM_HW_STA)) + +// is the STA a HW STA (excluding GP STAs) +#define IS_HWSTA_IDX(__x) \ + ((__x) < (HAL_NUM_HW_STA-HAL_NUM_GPSTA)) + +#define HAL_NUM_STA_INCLUDING_VSTA 32 +#define HAL_NUM_STA_WITHOUT_VSTA 12 + +#else +#define HAL_NUM_STA 12 +#define HAL_NUM_ASSOC_STA 10 +#define HAL_NUM_HW_STA 12 +#endif + +#define HAL_NUM_BSSID 2 +#define HAL_NUM_UMA_DESC_ENTRIES HAL_NUM_HW_STA + +#endif /* WCN_PRONTO */ + +#ifdef FEATURE_WLAN_TDLS +#define CXM_TDLS_MAX_NUM_STA 32 +#endif + +#define HAL_INVALID_BSSIDX HAL_NUM_BSSID + +#define MAX_NUM_OF_BACKOFFS 8 +#define HAL_MAX_ASSOC_ID HAL_NUM_STA + +#define WLANHAL_TX_BD_HEADER_SIZE 40 //FIXME_PRIMA - Revisit +#define WLANHAL_RX_BD_HEADER_SIZE 76 + +/* + * From NOVA Mac Arch document + * Encryp. mode The encryption mode + * 000: Encryption functionality is not enabled + * 001: Encryption is set to WEP + * 010: Encryption is set to WEP 104 + * 011: Encryption is set to TKIP + * 100: Encryption is set to AES + * 101 - 111: Reserved for future + */ + +#define HAL_ENC_POLICY_NULL 0 +#define HAL_ENC_POLICY_WEP40 1 +#define HAL_ENC_POLICY_WEP104 2 +#define HAL_ENC_POLICY_TKIP 3 +#define HAL_ENC_POLICY_AES_CCM 4 + +/* --------------------------------------------------------------------- */ +/* BMU */ +/* --------------------------------------------------------------------- */ + +/* + * BMU WQ assignment, as per Prima Programmer's Guide - FIXME_PRIMA: Revisit + * + */ + +typedef enum sBmuWqId { + + /* ====== In use WQs ====== */ + + /* BMU */ + BMUWQ_BMU_IDLE_BD = 0, + BMUWQ_BMU_IDLE_PDU = 1, + + /* RxP */ + BMUWQ_RXP_UNKNWON_ADDR = 2, /* currently unhandled by HAL */ + + /* DPU RX */ + BMUWQ_DPU_RX = 3, + + /* DPU TX */ + BMUWQ_DPU_TX = 6, + + /* Firmware */ + BMUWQ_FW_TRANSMIT = 12, /* DPU Tx->FW Tx */ + BMUWQ_FW_RECV = 7, /* DPU Rx->FW Rx */ + + BMUWQ_FW_RPE_RECV = 16, /* RXP/RPE Rx->FW Rx */ + FW_SCO_WQ = BMUWQ_FW_RPE_RECV, + + /* DPU Error */ + BMUWQ_DPU_ERROR_WQ = 8, + + /* DXE RX */ + BMUWQ_DXE_RX = 11, + + BMUWQ_DXE_RX_HI = 4, + + /* ADU/UMA */ + BMUWQ_ADU_UMA_TX = 23, + BMUWQ_ADU_UMA_RX = 24, + + /* BMU BTQM */ + BMUWQ_BTQM = 25, + + /* Special WQ for BMU to dropping all frames coming to this WQ ID */ + BMUWQ_SINK = 255, + +#ifdef WCN_PRONTO + BMUWQ_BMU_CMEM_IDLE_BD = 27, + /* Total BMU WQ count in Pronto */ + BMUWQ_NUM = 28, + + //WQs 17 through 22 are enabled in Pronto. So, set not supported mask to 0. + BMUWQ_NOT_SUPPORTED_MASK = 0x0, +#else + /* Total BMU WQ count in Prima */ + BMUWQ_NUM = 27, + + //Prima has excluded support for WQs 17 through 22. + BMUWQ_NOT_SUPPORTED_MASK = 0x7e0000, +#endif //WCN_PRONTO + + + /* Aliases */ + BMUWQ_BTQM_TX_MGMT = BMUWQ_BTQM, + BMUWQ_BTQM_TX_DATA = BMUWQ_BTQM, + BMUWQ_BMU_WQ2 = BMUWQ_RXP_UNKNWON_ADDR, + BMUWQ_FW_DPU_TX = 5, + + //WQ where all the frames with addr1/addr2/addr3 with value 254/255 go to. + BMUWQ_FW_RECV_EXCEPTION = 14, //using BMUWQ_FW_MESSAGE WQ for this purpose. + + //WQ where all frames with unknown Addr2 filter exception cases frames will pushed if FW wants host to + //send deauth to the sender. + BMUWQ_HOST_RX_UNKNOWN_ADDR2_FRAMES = 15, //using BMUWQ_FW_DXECH2_0 for this purpose. + + /* ====== Unused/Reserved WQ ====== */ + + /* ADU/UMA Error WQ */ + BMUWQ_ADU_UMA_TX_ERROR_WQ = 13, /* Not in use by HAL */ + BMUWQ_ADU_UMA_RX_ERROR_WQ = 10, /* Not in use by HAL */ + + /* DPU Error WQ2 */ + BMUWQ_DPU_ERROR_WQ2 = 9, /* Not in use by HAL */ + + /* FW WQs */ + //This WQ is being used for RXP to push in frames in exception cases ( addr1/add2/addr3 254/255) + //BMUWQ_FW_MESG = 14, /* DxE Tx->FW, Not in use by FW */ + //BMUWQ_FW_DXECH2_0 = 15, /* BD/PDU<->MEM conversion using DxE CH2. Not in use by FW */ + BMUWQ_FW_DXECH2_1 = 16, /* BD/PDU<->MEM conversion using DxE CH2. Not in use by FW */ + + /* NDPA Addr3 workaround */ + BMUWQ_RXP_DEFAULT_PUSH_WQ = 17, +/* These WQs are not supported in Volans + BMUWQ_BMU_WQ17 = 17, + BMUWQ_BMU_WQ18 = 18, + BMUWQ_BMU_WQ19 = 19, + BMUWQ_BMU_WQ20 = 20, + BMUWQ_BMU_WQ21 = 21, + BMUWQ_BMU_WQ22 = 22 +*/ +} tBmuWqId; + +typedef enum +{ + BTQM_QID0 = 0, + BTQM_QID1, + BTQM_QID2, + BTQM_QID3, + BTQM_QID4, + BTQM_QID5, + BTQM_QID6, + BTQM_QID7, + BTQM_QID8, + BTQM_QID9, + BTQM_QID10, + + BTQM_QUEUE_TX_TID_0 = BTQM_QID0, + BTQM_QUEUE_TX_TID_1, + BTQM_QUEUE_TX_TID_2, + BTQM_QUEUE_TX_TID_3, + BTQM_QUEUE_TX_TID_4, + BTQM_QUEUE_TX_TID_5, + BTQM_QUEUE_TX_TID_6, + BTQM_QUEUE_TX_TID_7, + + + /* Queue Id <-> BO + */ + BTQM_QUEUE_TX_nQOS = BTQM_QID8, + BTQM_QUEUE_SELF_STA_BCAST_MGMT = BTQM_QID10, + BTQM_QUEUE_SELF_STA_UCAST_MGMT = BTQM_QID9, + BTQM_QUEUE_SELF_STA_UCAST_DATA = BTQM_QID9, + BTQM_QUEUE_NULL_FRAME = BTQM_QID9, + BTQM_QUEUE_SELF_STA_PROBE_RSP = BTQM_QID9, + BTQM_QUEUE_TX_AC_BE = BTQM_QUEUE_TX_TID_0, + BTQM_QUEUE_TX_AC_BK = BTQM_QUEUE_TX_TID_2, + BTQM_QUEUE_TX_AC_VI = BTQM_QUEUE_TX_TID_4, + BTQM_QUEUE_TX_AC_VO = BTQM_QUEUE_TX_TID_6 +}tBtqmQId; + +#define STACFG_MAX_TC 8 + +/* --------------------------------------------------------------------- */ +/* BD type*/ +/* --------------------------------------------------------------------- */ +#define HWBD_TYPE_GENERIC 0 /* generic BD format */ +#define HWBD_TYPE_FRAG 1 /* fragmentation BD format*/ + +/*---------------------------------------------------------------------- */ +/* HW Tx power */ +/*---------------------------------------------------------------------- */ +#ifdef WLAN_HAL_PRIMA + #define WLAN_SOC_PRIMA_MAX_TX_POWER 22 + #define WLAN_SOC_PRIMA_MIN_TX_POWER 6 +#else + /* add more platforms here */ + #define WLAN_SOC_PRIMA_MAX_TX_POWER 22 + #define WLAN_SOC_PRIMA_MIN_TX_POWER 6 +#endif //#ifdef WCN_PRIMA + +#endif /* __WLAN_QCT_DEV_DEFS_H */ diff --git a/wcnss/riva/inc/wlan_status_code.h b/wcnss/riva/inc/wlan_status_code.h new file mode 100644 index 000000000000..e1057281a265 --- /dev/null +++ b/wcnss/riva/inc/wlan_status_code.h @@ -0,0 +1,181 @@ +/* + * Copyright (c) 2013, The Linux Foundation. All rights reserved. + * + * Previously licensed under the ISC license by Qualcomm Atheros, Inc. + * + * + * Permission to use, copy, modify, and/or distribute this software for + * any purpose with or without fee is hereby granted, provided that the + * above copyright notice and this permission notice appear in all + * copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL + * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE + * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +/* + * This file was originally distributed by Qualcomm Atheros, Inc. + * under proprietary terms before Copyright ownership was assigned + * to the Linux Foundation. + */ + +/*=========================================================================== + * + * @file: wlan_status_code.h + * + * @brief: Common header file containing all the status codes + * All status codes have been consolidated into one enum + * + * @author: Kumar Anand + * Copyright (C) 2010, Qualcomm Technologies, Inc. + * All rights reserved. + * + *=========================================================================*/ + +#ifndef __WLAN_STATUS_CODE_H__ +#define __WLAN_STATUS_CODE_H__ + +/*------------------------------------------------------------------------- + Include Files +-------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------- + * Preprocessor Definitions and Constants + * -------------------------------------------------------------------------*/ + +/* This is to force compiler to use the maximum of an int ( 4 bytes ) */ +#define WLAN_STATUS_MAX_ENUM_SIZE 0x7FFFFFFF + +/*---------------------------------------------------------------------------- + * Type Declarations + * -------------------------------------------------------------------------*/ + +typedef enum +{ + /* PAL Request succeeded!*/ + PAL_STATUS_SUCCESS = 0, + + /* HAL Request succeeded!*/ + eHAL_STATUS_SUCCESS = 0, + + /* Request failed because there of an invalid request. This is + typically the result of invalid parameters on the request*/ + PAL_STATUS_INVAL, + + /* Request refused because a request is already in place and + another cannot be handled currently */ + PAL_STATUS_ALREADY, + + /* Request failed because of an empty condition */ + PAL_STATUS_EMPTY, + + /* Request failed for some unknown reason. */ + PAL_STATUS_FAILURE, + + /* HAL general failure */ + eHAL_STATUS_FAILURE, + + /* Invalid Param*/ + eHAL_STATUS_INVALID_PARAMETER, + + /* Invalid Station Index*/ + eHAL_STATUS_INVALID_STAIDX, + + /* DPU descriptor table full*/ + eHAL_STATUS_DPU_DESCRIPTOR_TABLE_FULL, + + /* No interrupts */ + eHAL_STATUS_NO_INTERRUPTS, + + /* Interrupt present */ + eHAL_STATUS_INTERRUPT_PRESENT, + + /* Stable Table is full */ + eHAL_STATUS_STA_TABLE_FULL, + + /* Duplicate Station found */ + eHAL_STATUS_DUPLICATE_STA, + + /* BSSID is invalid */ + eHAL_STATUS_BSSID_INVALID, + + /* STA is invalid */ + eHAL_STATUS_STA_INVALID, + + /* BSSID is is duplicate */ + eHAL_STATUS_DUPLICATE_BSSID, + + /* BSS Idx is invalid */ + eHAL_STATUS_INVALID_BSSIDX, + + /* BSSID Table is full */ + eHAL_STATUS_BSSID_TABLE_FULL, + + /* Invalid DPU signature*/ + eHAL_STATUS_INVALID_SIGNATURE, + + /* Invalid key Id */ + eHAL_STATUS_INVALID_KEYID, + + /* Already on requested channel */ + eHAL_STATUS_SET_CHAN_ALREADY_ON_REQUESTED_CHAN, + + /* UMA descriptor table is full */ + eHAL_STATUS_UMA_DESCRIPTOR_TABLE_FULL, + + /* MIC Key table is full */ + eHAL_STATUS_DPU_MICKEY_TABLE_FULL, + + /* A-MPDU/BA related Error codes */ + eHAL_STATUS_BA_RX_BUFFERS_FULL, + eHAL_STATUS_BA_RX_MAX_SESSIONS_REACHED, + eHAL_STATUS_BA_RX_INVALID_SESSION_ID, + + eHAL_STATUS_TIMER_START_FAILED, + eHAL_STATUS_TIMER_STOP_FAILED, + eHAL_STATUS_FAILED_ALLOC, + + /* Scan failure codes */ + eHAL_STATUS_NOTIFY_BSS_FAIL, + + /* Self STA not deleted as reference count is not zero */ + eHAL_STATUS_DEL_STA_SELF_IGNORED_REF_COUNT_NOT_ZERO, + + /* Self STA not added as entry already exists*/ + eHAL_STATUS_ADD_STA_SELF_IGNORED_REF_COUNT_NOT_ZERO, + + /* Message from SLM has failure status */ + eHAL_STATUS_FW_SEND_MSG_FAILED, + + /* BSS disconnect status : beacon miss */ + eHAL_STATUS_BSS_DISCONN_BEACON_MISS, + /* BSS disconnect status : deauth */ + eHAL_STATUS_BSS_DISCONN_DEAUTH, + /* BSS disconnect status : disassoc */ + eHAL_STATUS_BSS_DISCONN_DISASSOC, + + /* Data abort happened in PHY sw */ + eHAL_STATUS_PHY_DATA_ABORT, + + /* Invalid NV field */ + eHAL_STATUS_PHY_INVALID_NV_FIELD, + + /* WLAN boot test failed */ + eHAL_STATUS_WLAN_BOOT_TEST_FAILURE, + + /* Max status value */ + eHAL_STATUS_MAX_VALUE = WLAN_STATUS_MAX_ENUM_SIZE + +} palStatus, eHalStatus; + +/* Helper Macros */ +#define PAL_IS_STATUS_SUCCESS(status) (PAL_STATUS_SUCCESS == (status)) +#define HAL_STATUS_SUCCESS( status ) (eHAL_STATUS_SUCCESS == (status)) + +#endif //__WLAN_STATUS_CODE_H__ -- cgit v1.2.3 From 39c92db04cb993040cbc53bce2368d441f8a00c0 Mon Sep 17 00:00:00 2001 From: Prakash Dhavali Date: Fri, 27 Dec 2013 15:14:06 -0800 Subject: Remove stale riva and wcnss/riva folders Remove stale riva and wcnss/riva folders --- riva/inc/halCompiler.h | 158 - riva/inc/halLegacyPalTypes.h | 41 - riva/inc/pttFrameGen.h | 71 - riva/inc/pttModule.h | 160 - riva/inc/pttMsgApi.h | 948 ----- riva/inc/wlan_hal_cfg.h | 917 ----- riva/inc/wlan_hal_msg.h | 7062 ----------------------------------- riva/inc/wlan_nv.h | 792 ---- riva/inc/wlan_phy.h | 898 ----- riva/inc/wlan_qct_dev_defs.h | 360 -- riva/inc/wlan_status_code.h | 160 - wcnss/riva/inc/halCompiler.h | 179 - wcnss/riva/inc/halLegacyPalTypes.h | 62 - wcnss/riva/inc/pttFrameGen.h | 71 - wcnss/riva/inc/pttModule.h | 160 - wcnss/riva/inc/pttMsgApi.h | 969 ----- wcnss/riva/inc/wlan_hal_cfg.h | 938 ----- wcnss/riva/inc/wlan_hal_msg.h | 7083 ------------------------------------ wcnss/riva/inc/wlan_nv.h | 813 ----- wcnss/riva/inc/wlan_phy.h | 919 ----- wcnss/riva/inc/wlan_qct_dev_defs.h | 381 -- wcnss/riva/inc/wlan_status_code.h | 181 - 22 files changed, 23323 deletions(-) delete mode 100644 riva/inc/halCompiler.h delete mode 100644 riva/inc/halLegacyPalTypes.h delete mode 100644 riva/inc/pttFrameGen.h delete mode 100644 riva/inc/pttModule.h delete mode 100644 riva/inc/pttMsgApi.h delete mode 100644 riva/inc/wlan_hal_cfg.h delete mode 100644 riva/inc/wlan_hal_msg.h delete mode 100644 riva/inc/wlan_nv.h delete mode 100644 riva/inc/wlan_phy.h delete mode 100644 riva/inc/wlan_qct_dev_defs.h delete mode 100644 riva/inc/wlan_status_code.h delete mode 100644 wcnss/riva/inc/halCompiler.h delete mode 100644 wcnss/riva/inc/halLegacyPalTypes.h delete mode 100644 wcnss/riva/inc/pttFrameGen.h delete mode 100644 wcnss/riva/inc/pttModule.h delete mode 100644 wcnss/riva/inc/pttMsgApi.h delete mode 100644 wcnss/riva/inc/wlan_hal_cfg.h delete mode 100644 wcnss/riva/inc/wlan_hal_msg.h delete mode 100644 wcnss/riva/inc/wlan_nv.h delete mode 100644 wcnss/riva/inc/wlan_phy.h delete mode 100644 wcnss/riva/inc/wlan_qct_dev_defs.h delete mode 100644 wcnss/riva/inc/wlan_status_code.h diff --git a/riva/inc/halCompiler.h b/riva/inc/halCompiler.h deleted file mode 100644 index a8a5b668acee..000000000000 --- a/riva/inc/halCompiler.h +++ /dev/null @@ -1,158 +0,0 @@ -/* -* Copyright (c) 2012-2013 Qualcomm Atheros, Inc. -* All Rights Reserved. -* Qualcomm Atheros Confidential and Proprietary. -*/ - -/*========================================================================== - * - * @file: aniCompiler.h - * - * @brief: This file tries to abstract the differences among compilers. - * Supported compilers are: - * ARM RVCT compiler - * - * @author: Kumar Anand - * - * Copyright (C) 2010, Qualcomm Technologies, Inc. - * All rights reserved. - * - *=========================================================================*/ -#ifndef __ANI_COMPILER_ABSTRACT_H -#define __ANI_COMPILER_ABSTRACT_H - -/* - * 1. GNU C/C++ Compiler - * - * How to detect gcc : __GNUC__ - * How to detect gcc version : - * major version : __GNUC__ (2 = 2.x, 3 = 3.x, 4 = 4.x) - * minor version : __GNUC_MINOR__ - * - * 2. Microsoft C/C++ Compiler - * - * How to detect msc : _MSC_VER - * How to detect msc version : - * _MSC_VER (1200 = MSVC 6.0, 1300 = MSVC 7.0, ...) - * - * 3. Intel C/C++ Compiler - * - * How to detect icc : __INTEL_COMPILER, __ICC (legacy), __ECC (legacy) - * How to detect icc version : - * __INTEL_COMPILER, __ICC, __ECC (700 = 7.0, 900 = 9.0, ...) - * - * 4. Other compilers (not supported) - * - * Borland : __BORLANDC__ - * Greenhills : __ghs - * Metrowerks : __MWERKS__ - * SGI MIPSpro : __sgi - */ - -/* - * Packing directives : These are used to force compiler to pack bits and - * bytes in the data structure. C standard does not regulate this strictly, - * and many things are to compiler implementation. Many compilers support - * compiler specific directives or options that allow different packing - * and alignment. - * - * Alignment directives : Compiler may think packed data structures have - * no specific alignment requirement. Then compiler may generate multiple - * byte accesses to access two byte or four bytes data structures. This - * affects on performance especially for RISC systems. If some data - * structure is located on specific alignment always, alignment directives - * help compiler generate more efficient codes. - */ - -#undef __ANI_COMPILER_PRAGMA_PACK_STACK -#undef __ANI_COMPILER_PRAGMA_PACK - -#if defined(_MSC_VER) -#define __ANI_COMPILER_PRAGMA_PACK_STACK 1 -#define __ANI_COMPILER_PRAGMA_PACK 1 -#define __ani_attr_pre_packed -#define __ani_attr_packed -#define __ani_attr_aligned_2 -#define __ani_attr_aligned_4 -#define __ani_attr_aligned_8 -#define __ani_attr_aligned_16 -#define __ani_attr_aligned_32 -#define PACKED -#define PACKED_POST -#define ALIGN(__value) -#elif defined(__INTEL_COMPILER) || defined(__ICC) || defined(__ECC) -#define __ANI_COMPILER_PRAGMA_PACK 1 -#define __ani_attr_pre_packed -#define __ani_attr_packed -#define __ani_attr_aligned_2 -#define __ani_attr_aligned_4 -#define __ani_attr_aligned_8 -#define __ani_attr_aligned_16 -#define __ani_attr_aligned_32 -#define PACKED -#define PACKED_POST -#define ALIGN(__value) -#elif defined(__GNUC__) -#define __ani_attr_pre_packed -#define __ani_attr_packed __attribute__((packed)) -#define __ani_attr_aligned_2 __attribute__((aligned(2))) -#define __ani_attr_aligned_4 __attribute__((aligned(4))) -#define __ani_attr_aligned_8 __attribute__((aligned(8))) -#define __ani_attr_aligned_16 __attribute__((aligned(16))) -#define __ani_attr_aligned_32 __attribute__((aligned(32))) -#ifndef PACKED -#define PACKED -#endif -#ifndef PACKED_POST -#define PACKED_POST __attribute__((packed)) -#endif -#ifndef ALIGN -#define ALIGN(__value) __attribute__((aligned(__value))) -#endif -#elif defined(ANI_COMPILER_TYPE_RVCT) -/* Nothing defined so far */ - -/* - * RIVA 1.2 and Pronto uses ARMCT5.1 compiler and it throws lot of warning when __align() is used in structure definitions. - * __attribute__((aligned())) is GNU compiler attribute that is accepted by ARM compiler and resolves the warnings. - */ -#if (__ARMCC_VERSION > 400000) -#define __ani_attr_packed -#define __ani_attr_pre_packed __packed -#define __ani_attr_aligned_2 __attribute__((aligned(2))) -#define __ani_attr_aligned_4 __attribute__((aligned(4))) -#define __ani_attr_aligned_8 __attribute__((aligned(8))) -#define __ani_attr_aligned_16 __attribute__((aligned(16))) -#define __ani_attr_aligned_32 __attribute__((aligned(32))) -#define PACKED __packed -#define PACKED_POST -#define ALIGN(__value) __align(__value) -#define PREPACK __packed -#define POSTPACK -#else -#define __ani_attr_packed -#define __ani_attr_pre_packed __packed -#define __ani_attr_aligned_2 __align(2) -#define __ani_attr_aligned_4 __align(4) -#define __ani_attr_aligned_8 __align(8) -#define __ani_attr_aligned_16 __align(16) -#define __ani_attr_aligned_32 __align(32) -#define PACKED __packed -#define PACKED_POST -#define ALIGN(__value) __align(__value) -#endif - -#else -#error "Unknown compiler" -#endif - -#ifndef PACKED_PRE -#define PACKED_PRE __ani_attr_pre_packed -#endif - -#ifndef ALIGN_4 -#define ALIGN_4 __ani_attr_aligned_4 -#endif - -#endif //__ANI_COMPILER_ABSTRACT_H - diff --git a/riva/inc/halLegacyPalTypes.h b/riva/inc/halLegacyPalTypes.h deleted file mode 100644 index e873d8ea9be2..000000000000 --- a/riva/inc/halLegacyPalTypes.h +++ /dev/null @@ -1,41 +0,0 @@ -/* -* Copyright (c) 2012-2013 Qualcomm Atheros, Inc. -* All Rights Reserved. -* Qualcomm Atheros Confidential and Proprietary. -*/ - -#if !defined( __LEGACYPALTYPES_H__ ) -#define __LEGACYPALTYPES_H__ - -/*========================================================================== - * - * @file: halLegacyPalTypes.h - * - * @brief: Exports and types for the Platform Abstraction Layer typedefs. - * - * @author: Kumar Anand - * - * Copyright (C) 2010, Qualcomm Technologies, Inc. - * All rights reserved. - * - *=========================================================================*/ - -#include "qwlanfw_defs.h" - -/* Common type definitions */ -typedef uint8 tANI_U8; -typedef int8 tANI_S8; -typedef uint16 tANI_U16; -typedef int16 tANI_S16; -typedef uint32 tANI_U32; -typedef int32 tANI_S32; - -#ifndef BUILD_QWPTTSTATIC -typedef uint64 tANI_U64; -#endif - -typedef byte tANI_BYTE; -typedef boolean tANI_BOOLEAN; -typedef uint32 tANI_TIMESTAMP; - -#endif /*__LEGACYPALTYPES_H__*/ diff --git a/riva/inc/pttFrameGen.h b/riva/inc/pttFrameGen.h deleted file mode 100644 index b41b030d1f95..000000000000 --- a/riva/inc/pttFrameGen.h +++ /dev/null @@ -1,71 +0,0 @@ -/** ------------------------------------------------------------------------- * - ------------------------------------------------------------------------- * - - - \file pttFrameGen.h - - \brief Definitions for PTT frame generation - - $Id$ - - Copyright (C) 2006 Airgo Networks, Incorporated - - - ========================================================================== */ - -#ifndef PTTFRAMEGEN_H -#define PTTFRAMEGEN_H - - -//#define MAX_PKT_GEN_BUF_ENTRY (HAL_HIF_MAX_TX_RING_ENTRY >> 1) - - - -#define MAX_PAYLOAD_SIZE 2400 -#define MAX_TX_PAYLOAD_SIZE 4096 - -typedef enum { - TEST_PAYLOAD_NONE, - TEST_PAYLOAD_FILL_BYTE, - TEST_PAYLOAD_RANDOM, - TEST_PAYLOAD_RAMP, - TEST_PAYLOAD_TEMPLATE, - TEST_PAYLOAD_MAX = 0X3FFFFFFF, //dummy value to set enum to 4 bytes -} ePayloadContents; - - -#define MAC_ADDR_SIZE ( 6 ) - -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 numTestPackets; - tANI_U32 interFrameSpace; - eHalPhyRates rate; - ePayloadContents payloadContents; - tANI_U16 payloadLength; - tANI_U8 payloadFillByte; - tANI_BOOLEAN pktAutoSeqNum; //seq num setting (hw or not) for packet gen - - tANI_U8 addr1[MAC_ADDR_SIZE]; - tANI_U8 addr2[MAC_ADDR_SIZE]; - tANI_U8 addr3[MAC_ADDR_SIZE]; - tANI_U8 tx_mode; - tANI_BOOLEAN crc; //0 = no FCS calculated = power detector works = receive won't work?, - //1 = crc calculated = receive works, but power detector workaround doesn't - - ePhyDbgPreamble preamble; -} sPttFrameGenParams; - - -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 legacy; //11g OFDM preamble - tANI_U32 gfSimo20; //greenfield preamble - tANI_U32 mmSimo20; //mixed mode preamble - tANI_U32 gfSimo40; //greenfield preamble - tANI_U32 mmSimo40; //mixed mode preamble - tANI_U32 txbShort; //11b short - tANI_U32 txbLong; //11b long - tANI_U32 acSimo204080; //11ac SIMO 20,40,80 - tANI_U32 total; -} sTxFrameCounters; - -#endif diff --git a/riva/inc/pttModule.h b/riva/inc/pttModule.h deleted file mode 100644 index 5fc488e3736e..000000000000 --- a/riva/inc/pttModule.h +++ /dev/null @@ -1,160 +0,0 @@ -/** - * - Airgo Networks, Inc proprietary. - All Rights Reserved, Copyright 2005 - This program is the confidential and proprietary product of Airgo Networks Inc. - Any Unauthorized use, reproduction or transfer of this program is strictly prohibited. - - - pttModule.h: global variable structure for pttModule - Author: Mark Nelson - Date: 6/27/05 - - History - - Date Modified by Modification Information - -------------------------------------------------------------------------- - - */ - -#ifndef PTTMODULE_H -#define PTTMODULE_H -#include -#include - -#ifdef BUILD_QWPTTSTATIC -#include "wlan_hal_msg.h" // it is needed to build qwptt static lib -#endif - -// Max NV fragment size -#define MAX_NV_BIN_SIZE 2000 - -enum -{ - PTT_STATUS_SUCCESS = 0, - PTT_STATUS_FAILURE = 1, - PTT_MAX_VAL = 0XFFFF, -}; -typedef tANI_U32 eQWPttStatus; - - -typedef PACKED_PRE struct PACKED_POST { - tANI_U16 drvMjr; - tANI_U16 drvMnr; - tANI_U16 drvPtch; - tANI_U16 drvBld; - tANI_U16 pttMax; - tANI_U16 pttMin; - //FwVersionInfo fwVer; -} sBuildReleaseParams; - -typedef PACKED_PRE struct PACKED_POST { - tANI_BOOLEAN agPktsDisabled; //802.11ag - tANI_BOOLEAN bPktsDisabled; //802.11b - tANI_BOOLEAN slrPktsDisabled; //deprecated in Riva - tANI_BOOLEAN n40PktsDisabled; //11N 40 - tANI_BOOLEAN ac80PktsDisabled; //11AC 80 - tANI_BOOLEAN rsvd; -} sRxTypesDisabled; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 totalRxPackets; - tANI_U32 totalMacRxPackets; - tANI_U32 totalMacFcsErrPackets; -} sRxFrameCounters; - - - - -/* GRAB RAM types */ -//TODO: Change Grab RAM interface as appropriate to Taurus -typedef enum { - GRAB_RAM_RXFIR, - GRAB_RAM_ADC, - GRAB_RAM_ADC_80, - GRAB_RAM_MAX_VAL = 0XFFFF, -} eGrabRamType; - -#define GRAB_RAM_SIZE 6000 -#define GRAB_RAM_SIZE_80MHZ_1_CHAIN 12000 - - - -/// Enum used to specify the trigger type for the aniGrabRam API -typedef enum eGramDumpTrigType { - eGRAM_DUMP_UNTRIGGERED, - eGRAM_DUMP_TRIG_ON_11A, - eGRAM_DUMP_TRIG_ON_11B, - eGRAM_DUMP_TRIG_ON_11A_OR_11B -} tGramDumpTrigType; - -typedef PACKED_PRE struct PACKED_POST { - //common to both transmit chains - eHalPhyRates rate; //current rate - ePhyChanBondState cbState; //current Channel bonded state - - tANI_U8 channelId; //current channel Id - tANI_U8 pwrTemplateIndex; //5-bit template index used for the current rate - tANI_U8 reserved[2]; - - //specific transmit chain power - tTxChainPower txChains[PHY_MAX_TX_CHAINS]; //output power for Tx chains -} tTxPowerReport; - -#define RXP_MAX_FILTER_IDX 64 - -typedef PACKED_PRE struct PACKED_POST -{ - uint32 rxpFilterForFTMPER[RXP_MAX_FILTER_IDX]; - uint32 max_pktlen; - uint32 flt_disable0; - uint32 flt_disable1; - uint32 config2; - uint32 push_wq_ctrl; - uint32 push_wq_ctrl2; - uint32 extra_frame_flt; -} sMACConfig; - - -typedef PACKED_PRE struct PACKED_POST { - /* - * The idea here is to store only those things which cannot be - * handled directly within the individual function calls. - * Most things will go straight to registers or come from registers. - */ - sPttFrameGenParams frameGenParams; - tANI_U8 payload[MAX_PAYLOAD_SIZE]; - - //Tx Waveform Gen Service - tANI_U16 numWfmSamples; - tANI_BOOLEAN wfmEnabled; - tANI_BOOLEAN wfmStored; - - //Tx Frame Power Service - tTxGain forcedTxGain[PHY_MAX_TX_CHAINS]; //use TXPWR_OVERRIDE for wfm, and fill gain table otherwise - tANI_U8 tpcPowerLut[PHY_MAX_TX_CHAINS][TPC_MEM_POWER_LUT_DEPTH]; - tTxGain tpcGainLut[PHY_MAX_TX_CHAINS][TPC_MEM_GAIN_LUT_DEPTH]; - - //Tx Frame Gen Service - tANI_BOOLEAN frameGenEnabled; - tANI_BOOLEAN phyDbgFrameGen; //this says use phyDbg for frames - leave this in place until we know that PhyDbg will suffice - - // for FTM PER feature - tANI_U8 tx_mode; - - tANI_BOOLEAN ftm_per_settings_saved; - - //Rx Gain Service - sRxChainsAgcEnable agcEnables; - - tANI_U32 *pADCCaptureCache; //pointer to allocate ADC capture cache - - //TX_TIMER adcRssiStatsTimer; //Create adc rssi stat collection timer - - sRxChainsRssi rssi; -} tPttModuleVariables; - -#ifdef WCN_PRONTO -extern sMACConfig macConfig; -#endif - -#endif /* PTTMODULE_H */ diff --git a/riva/inc/pttMsgApi.h b/riva/inc/pttMsgApi.h deleted file mode 100644 index 33389c20dc8a..000000000000 --- a/riva/inc/pttMsgApi.h +++ /dev/null @@ -1,948 +0,0 @@ -/* -* Copyright (c) 2012 Qualcomm Atheros, Inc. -* All Rights Reserved. -* Qualcomm Atheros Confidential and Proprietary. -*/ - -/** - * - Airgo Networks, Inc proprietary. - All Rights Reserved, Copyright 2005 - This program is the confidential and proprietary product of Airgo Networks Inc. - Any Unauthorized use, reproduction or transfer of this program is strictly prohibited. - - - pttMsgApi.h: Contains messages to PTT Module for physical layer testing - Author: Mark Nelson - Date: 6/21/05 - - History - - Date Modified by Modification Information - -------------------------------------------------------------------------- - - */ - -#ifndef PTT_MSG_API_H -#define PTT_MSG_API_H - -#include "halCompiler.h" -#include "wlan_nv.h" -#include "wlan_phy.h" -#include "pttFrameGen.h" -#include "pttModule.h" - -#include "halLegacyPalTypes.h" - -typedef tANI_U8 tQWPTT_U8; -typedef tANI_S8 tQWPTT_S8; - -typedef tANI_U16 tQWPTT_U16; -typedef tANI_S16 tQWPTT_S16; - -typedef tANI_U32 tQWPTT_U32; -typedef tANI_S32 tQWPTT_S32; - -typedef tANI_U8 tQWPTT_BYTE; -typedef tANI_S9 tQWPTT_S9; - -typedef tANI_U8 tQWPTT_BOOLEAN; - -#define PTT_MEM_ACCESS_MAX_SIZE 256 - -//Messages to/from socket or pttApi.c -typedef enum { - PTT_MSG_TYPES_BEGIN = 0x3000, - - // Init - PTT_MSG_INIT = PTT_MSG_TYPES_BEGIN, //extra: internal only - -//NV Service - PTT_MSG_GET_TPC_CAL_STATE_OBSOLETE = 0x3011, - PTT_MSG_RESET_TPC_CAL_STATE_OBSOLETE = 0x3012, - - PTT_MSG_SET_NV_CKSUM_OBSOLETE = 0x3013, - PTT_MSG_GET_NV_CKSUM_OBSOLETE = 0x3014, - PTT_MSG_GET_NV_TABLE = 0x3016, - PTT_MSG_SET_NV_TABLE = 0x3017, - PTT_MSG_SET_NV_IMAGE_OBSOLETE = 0x3018, - PTT_MSG_BLANK_NV = 0x3019, - PTT_MSG_GET_NV_IMAGE_OBSOLETE = 0x301E, - PTT_MSG_DEL_NV_TABLE = 0x301F, - PTT_MSG_GET_NV_FIELD = 0x3020, - PTT_MSG_SET_NV_FIELD = 0x3021, - PTT_MSG_STORE_NV_TABLE = 0x3022, - PTT_MSG_SET_REG_DOMAIN = 0x3023, - -//new NV format Service - PTT_MSG_GET_NV_BIN = 0x3030, - PTT_MSG_SET_NV_BIN = 0x3031, - PTT_MSG_GET_DICTIONARY = 0x3032, - -//Device Register Access - PTT_MSG_DBG_READ_REGISTER = 0x3040, - PTT_MSG_DBG_WRITE_REGISTER = 0x3041, - PTT_MSG_API_WRITE_REGISTER_OBSOLETE = 0x3042, - PTT_MSG_API_READ_REGISTER_OBSOLETE = 0x3043, - PTT_MSG_DBG_READ_MEMORY = 0x3044, - PTT_MSG_DBG_WRITE_MEMORY = 0x3045, - -//Device MAC Test Setup - PTT_MSG_ENABLE_CHAINS = 0x304F, - PTT_MSG_SET_CHANNEL = 0x3050, - -//Tx Waveform Gen Service - PTT_MSG_SET_WAVEFORM = 0x3071, - PTT_MSG_SET_TX_WAVEFORM_GAIN = 0x3072, - PTT_MSG_GET_WAVEFORM_POWER_ADC = 0x3073, - PTT_MSG_START_WAVEFORM = 0x3074, - PTT_MSG_STOP_WAVEFORM = 0x3075, - PTT_MSG_SET_RX_WAVEFORM_GAIN = 0x3076, - PTT_MSG_SET_TX_WAVEFORM_GAIN_PRIMA_V1 = 0x3077, - -//Tx Frame Gen Service - PTT_MSG_CONFIG_TX_PACKET_GEN = 0x3081, - PTT_MSG_START_STOP_TX_PACKET_GEN = 0x3082, - PTT_MSG_POLL_TX_PACKET_PROGRESS_OBSOLETE = 0x3083, - PTT_MSG_FRAME_GEN_STOP_IND_OBSOLETE = 0x3088, - PTT_MSG_QUERY_TX_STATUS = 0x3089, - - -//Tx Frame Power Service - PTT_MSG_CLOSE_TPC_LOOP = 0x30A0, - -//open loop service - PTT_MSG_SET_PACKET_TX_GAIN_TABLE = 0x30A1, - PTT_MSG_SET_PACKET_TX_GAIN_INDEX = 0x30A2, - PTT_MSG_FORCE_PACKET_TX_GAIN = 0x30A3, - -//closed loop(CLPC) service - PTT_MSG_SET_PWR_INDEX_SOURCE = 0x30A4, - PTT_MSG_SET_TX_POWER = 0x30A5, - PTT_MSG_GET_TX_POWER_REPORT = 0x30A7, - PTT_MSG_SAVE_TX_PWR_CAL_TABLE_OBSOLETE = 0x30A8, - PTT_MSG_SET_POWER_LUT = 0x30A9, - PTT_MSG_GET_POWER_LUT = 0x30AA, - PTT_MSG_GET_PACKET_TX_GAIN_TABLE = 0x30AB, - PTT_MSG_SAVE_TX_PWR_FREQ_TABLE_OBSOLETE = 0x30AC, - PTT_MSG_CLPC_TEMP_COMPENSATION_OBSOLETE = 0x30AD, - -//Rx Gain Service - PTT_MSG_DISABLE_AGC_TABLES = 0x30D0, - PTT_MSG_ENABLE_AGC_TABLES = 0x30D1, - PTT_MSG_SET_AGC_TABLES_OBSOLETE = 0x30D2, - PTT_MSG_GET_RX_RSSI = 0x30D3, - PTT_MSG_GET_AGC_TABLE_OBSOLETE = 0x30D5, - -//Rx Frame Catcher Service - PTT_MSG_SET_RX_DISABLE_MODE = 0x30D4, - PTT_MSG_GET_RX_PKT_COUNTS = 0x30E0, - PTT_MSG_RESET_RX_PACKET_STATISTICS = 0x30E2, - PTT_MSG_GET_UNI_CAST_MAC_PKT_RX_RSSI = 0x30E3, - PTT_MSG_GET_UNI_CAST_MAC_PKT_RX_RSSI_CONFIG = 0x30E4, - -//Rx Symbol Service - PTT_MSG_GRAB_RAM = 0x30F0, - PTT_MSG_GRAB_RAM_ONE_CHAIN_OBSOLETE = 0x30F1, - -//Phy Calibration Service - PTT_MSG_RX_IQ_CAL = 0x3100, - PTT_MSG_RX_DCO_CAL = 0x3101, - PTT_MSG_TX_CARRIER_SUPPRESS_CAL = 0x3102, - PTT_MSG_TX_IQ_CAL = 0x3103, - PTT_MSG_EXECUTE_INITIAL_CALS = 0x3104, - PTT_MSG_HDET_CAL = 0x3105, - PTT_MSG_VCO_LINEARITY_CAL_OBSOLETE = 0x3106, - -//Phy Calibration Override Service - PTT_MSG_SET_TX_CARRIER_SUPPRESS_CORRECT = 0x3110, - PTT_MSG_GET_TX_CARRIER_SUPPRESS_CORRECT = 0x3111, - PTT_MSG_SET_TX_IQ_CORRECT = 0x3112, - PTT_MSG_GET_TX_IQ_CORRECT = 0x3113, - PTT_MSG_SET_RX_IQ_CORRECT = 0x3114, - PTT_MSG_GET_RX_IQ_CORRECT = 0x3115, - PTT_MSG_SET_RX_DCO_CORRECT = 0x3116, - PTT_MSG_GET_RX_DCO_CORRECT = 0x3117, - PTT_MSG_SET_TX_IQ_PHASE_NV_TABLE_OBSOLETE = 0x3118, - PTT_MSG_GET_HDET_CORRECT_OBSOLETE = 0x3119, - -//RF Chip Access - PTT_MSG_GET_TEMP_ADC = 0x3202, - PTT_MSG_READ_RF_REG = 0x3203, - PTT_MSG_WRITE_RF_REG = 0x3204, - PTT_MSG_GET_RF_VERSION = 0x3205, - -//Deep sleep support - PTT_MSG_DEEP_SLEEP = 0x3220, - PTT_MSG_READ_SIF_BAR4_REGISTER = 0x3221, - PTT_MSG_WRITE_SIF_BAR4_REGISTER = 0x3222, - PTT_MSG_ENTER_FULL_POWER = 0x3223, - -//Misc - PTT_MSG_SYSTEM_RESET = 0x32A0, //is there any meaning for this in Gen6? - PTT_MSG_LOG_DUMP = 0x32A1, - PTT_MSG_GET_BUILD_RELEASE_NUMBER = 0x32A2, - - -//Messages for Socket App - PTT_MSG_ADAPTER_DISABLED_RSP_OBSOLETE = 0x32A3, - PTT_MSG_ENABLE_ADAPTER = 0x32A4, - PTT_MSG_DISABLE_ADAPTER = 0x32A5, - PTT_MSG_PAUSE_RSP_OBSOLETE = 0x32A6, - PTT_MSG_CONTINUE_RSP_OBSOLETE = 0x32A7, - - PTT_MSG_HALPHY_INIT = 0x32A8, - PTT_MSG_TEST_RXIQ_CAL = 0x32A9, - PTT_MSG_START_TONE_GEN = 0x32AA, - PTT_MSG_STOP_TONE_GEN = 0x32AB, - PTT_MSG_RX_IM2_CAL = 0x32AC, - PTT_MSG_SET_RX_IM2_CORRECT = 0x31AD, - PTT_MSG_GET_RX_IM2_CORRECT = 0x31AE, - PTT_MSG_TEST_DPD_CAL = 0x32AF, // not handle - PTT_MSG_SET_CALCONTROL_BITMAP = 0x32B0, - -//[RY] specific new messages for PRIMA - PTT_MSG_START_WAVEFORM_RF = 0x32B1, - PTT_MSG_STOP_WAVEFORM_RF = 0x32B2, - PTT_MSG_HKDAC_TX_IQ_CAL = 0x32B3, - PTT_MSG_SET_HKADC_TX_IQ_CORRECT = 0x32B4, - PTT_MSG_GET_HKADC_TX_IQ_CORRECT = 0x32B5, - PTT_MSG_SET_DPD_CORRECT = 0x32B6, - PTT_MSG_GET_DPD_CORRECT = 0x32B7, - PTT_MSG_SET_WAVEFORM_RF = 0x32B8, - PTT_MSG_LNA_BAND_CAL = 0x32B9, - PTT_MSG_GET_LNA_BAND_CORRECT = 0x32BA, - PTT_MSG_SET_LNA_BAND_CORRECT = 0x32BB, - PTT_MSG_DPD_CAL = 0x32BC, - -// Suffix'ed Message ID to differential from existing Message name. -// =============================================================== - PTT_MSG_GET_NV_TABLE_PRIMA_V1 = 0x32BD, - PTT_MSG_SET_NV_TABLE_PRIMA_V1 = 0x32BE, - PTT_MSG_RX_IQ_CAL_PRIMA_V1 = 0x32BF, - PTT_MSG_TX_IQ_CAL_PRIMA_V1 = 0x32C0, - PTT_MSG_SET_TX_IQ_CORRECT_PRIMA_V1 = 0x32C1, - PTT_MSG_GET_TX_IQ_CORRECT_PRIMA_V1 = 0x32C2, - PTT_MSG_SET_RX_IQ_CORRECT_PRIMA_V1 = 0x32C3, - PTT_MSG_GET_RX_IQ_CORRECT_PRIMA_V1 = 0x32C4, - PTT_MSG_START_WAVEFORM_PRIMA_V1 = 0x32C5, - PTT_MSG_FORCE_PACKET_TX_GAIN_PRIMA_V1 = 0x32C6, - PTT_MSG_CLPC_CAL_SETUP_PRIMA_V1 = 0x32C7, - PTT_MSG_CLPC_CAL_RESTORE_PRIMA_V1 = 0x32C8, - PTT_MSG_CLOSE_TPC_LOOP_PRIMA_V1 = 0x32C9, - PTT_MSG_SW_CLPC_CAL_PRIMA_V1 = 0x32CA, - PTT_MSG_CLPC_CAL_EXTRA_MEASUREMENT_PRIMA_V1 = 0x32CB, - PTT_MSG_PRIMA_GENERIC_CMD = 0x32CC, - PTT_MSG_DIGITAL_PIN_CONNECTIVITY_TEST_RES = 0X32CD, - - PTT_MSG_EXIT = 0x32ff, - PTT_MAX_MSG_ID = PTT_MSG_EXIT -} ePttMsgId; - -enum -{ - PTT_MSG_PRIMA_GENERIC_CMD_FAST_SET_CHANNEL = 0x0, -}; - -#define PTT_MSG_TYPES_BEGIN_30 PTT_MSG_TYPES_BEGIN -#define PTT_MSG_TYPES_BEGIN_31 PTT_MSG_TYPES_BEGIN + 0x100 -#define PTT_MSG_TYPES_BEGIN_32 PTT_MSG_TYPES_BEGIN + 0x200 - -// for FTM PER feature -enum { -Legacy_FTM = 0, -FTM_PER_TX = 1, -FTM_PER_RX = 2, -}; - -#ifndef tANI_BOOLEAN -#define tANI_BOOLEAN tANI_U8 -#endif - - - -/****************************************************************************************************************** - PTT MESSAGES -******************************************************************************************************************/ -//Init -typedef PACKED_PRE struct PACKED_POST { - tPttModuleVariables ptt; -} tMsgPttMsgInit; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 tableSize; - tANI_U32 chunkSize; - eNvTable nvTable; -} tMsgPttGetNvTable; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 tableSize; - tANI_U32 chunkSize; - eNvTable nvTable; -} tMsgPttSetNvTable; - -typedef PACKED_PRE struct PACKED_POST { - eNvTable nvTable; -} tMsgPttDelNvTable; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 notUsed; -} tMsgPttBlankNv; - -typedef PACKED_PRE struct PACKED_POST { - eNvField nvField; - uNvFields fieldData; -} tMsgPttGetNvField; - -typedef PACKED_PRE struct PACKED_POST { - eNvField nvField; - uNvFields fieldData; -} tMsgPttSetNvField; - -typedef PACKED_PRE struct PACKED_POST { - eNvTable nvTable; -} tMsgPttStoreNvTable; - -typedef PACKED_PRE struct PACKED_POST { - eRegDomainId regDomainId; -} tMsgPttSetRegDomain; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 tableSize; - tANI_U32 chunkSize; - eNvTable nvTable; - tANI_U8 nvData[MAX_NV_BIN_SIZE]; -} tMsgPttGetNvBin; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 tableSize; - tANI_U32 chunkSize; - eNvTable nvTable; - tANI_U8 nvData[MAX_NV_BIN_SIZE]; -} tMsgPttSetNvBin; - -//Device Register Access -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 regAddr; - tANI_U32 regValue; -} tMsgPttDbgReadRegister; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 regAddr; - tANI_U32 regValue; -} tMsgPttDbgWriteRegister; - -#define PTT_READ_MEM_MAX 512 -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 memAddr; - tANI_U32 nBytes; - tANI_U32 pMemBuf[PTT_READ_MEM_MAX]; //caller should allocate space -} tMsgPttDbgReadMemory; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 memAddr; - tANI_U32 nBytes; - tANI_U32 pMemBuf[PTT_READ_MEM_MAX]; -} tMsgPttDbgWriteMemory; - -//Device MAC Test Setup -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 chId; - ePhyChanBondState cbState; -} tMsgPttSetChannel; - -typedef PACKED_PRE struct PACKED_POST { - ePhyChainSelect chainSelect; -} tMsgPttEnableChains; - -typedef tIQSamples tWaveformSample; - -//Tx Waveform Gen Service -typedef PACKED_PRE struct PACKED_POST { - tWaveformSample waveform[MAX_TEST_WAVEFORM_SAMPLES]; - tANI_U16 numSamples; - tANI_BOOLEAN clk80; - tANI_U8 reserved[1]; -} tMsgPttSetWaveform; - -typedef PACKED_PRE struct PACKED_POST { - ePhyTxChains txChain; - tANI_U8 gain; -} tMsgPttSetTxWaveformGain; - -typedef PACKED_PRE struct PACKED_POST { - ePhyTxChains txChain; - tANI_U32 gain; -} tMsgPttSetTxWaveformGain_PRIMA_V1; - -typedef PACKED_PRE struct PACKED_POST { - ePhyRxChains rxChain; - tANI_U8 gain; -} tMsgPttSetRxWaveformGain; - -typedef PACKED_PRE struct PACKED_POST { - sTxChainsPowerAdcReadings txPowerAdc; -} tMsgPttGetWaveformPowerAdc; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 notUsed; -} tMsgPttStopWaveform; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 notUsed; -} tMsgPttClpcCalSetup_PRIMA_V1; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U16 setup_measure; - tANI_U16 setup_txDmdPwrOffset; - tANI_U16 measure_totalExtraPt; - tANI_U16 measure_currentMeasurePtIdx; - tANI_U8 plut[256]; -} tMsgPttClpcCalExtraMeasurement_PRIMA_V1; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 notUsed; -} tMsgPttClpcCalRestore_PRIMA_V1; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 startIndex; - tANI_U32 numSamples; -} tMsgPttStartWaveform; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 startIndex; - tANI_U32 numSamples; -} tMsgPttStartWaveform_PRIMA_V1; - -// Added for PRIMA -typedef PACKED_PRE struct PACKED_POST { - tWaveformSample waveform[MAX_TEST_WAVEFORM_SAMPLES]; - tANI_U16 numSamples; - tANI_BOOLEAN clk80; - tANI_U8 reserved[1]; -} tMsgPttSetWaveformRF; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 startIndex; - tANI_U32 numSamples; -} tMsgPttStartWaveformRF; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 notUsed; -} tMsgPttStopWaveformRF; - -//Tx Frame Gen Service -typedef PACKED_PRE struct PACKED_POST { - sPttFrameGenParams frameParams; -} tMsgPttConfigTxPacketGen; - -typedef PACKED_PRE struct PACKED_POST { - tANI_BOOLEAN startStop; - tANI_U8 reserved[3]; -} tMsgPttStartStopTxPacketGen; - -typedef PACKED_PRE struct PACKED_POST { - sTxFrameCounters numFrames; - tANI_BOOLEAN status; - tANI_U8 reserved[3]; -} tMsgPttQueryTxStatus; - -//Tx Frame Power Service -typedef PACKED_PRE struct PACKED_POST { - tANI_BOOLEAN tpcClose; - tANI_U8 reserved[3]; -} tMsgPttCloseTpcLoop; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 tpcClose; -} tMsgPttCloseTpcLoop_PRIMA_V1; - - - //open loop service -typedef PACKED_PRE struct PACKED_POST { - - ePhyTxChains txChain; - tANI_U8 minIndex; - tANI_U8 maxIndex; - tANI_U8 reserved[2]; - tANI_U8 gainTable[TPC_MEM_GAIN_LUT_DEPTH]; -} tMsgPttSetPacketTxGainTable; - -typedef PACKED_PRE struct PACKED_POST { - ePhyTxChains txChain; - tANI_U8 gainTable[TPC_MEM_GAIN_LUT_DEPTH]; -} tMsgPttGetPacketTxGainTable; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U8 index; - tANI_U8 reserved[3]; -} tMsgPttSetPacketTxGainIndex; - -typedef PACKED_PRE struct PACKED_POST { - ePhyTxChains txChain; - tANI_U8 gain; - tANI_U8 reserved[3]; -} tMsgPttForcePacketTxGain; - -typedef PACKED_PRE struct PACKED_POST { - ePhyTxChains txChain; - tANI_U32 gain; -} tMsgPttForcePacketTxGain_PRIMA_V1; - - -typedef PACKED_PRE struct PACKED_POST { - ePowerTempIndexSource indexSource; -} tMsgPttSetPwrIndexSource; - -typedef PACKED_PRE struct PACKED_POST { - t2Decimal dbmPwr; - tANI_U8 reserved[2]; -} tMsgPttSetTxPower; - -typedef tTxPowerReport tMsgPttGetTxPowerReport; - -typedef PACKED_PRE struct PACKED_POST { - ePhyTxChains txChain; - - tANI_U8 minIndex; - tANI_U8 maxIndex; - tANI_U8 reserved[2]; - - tANI_U8 powerLut[TPC_MEM_POWER_LUT_DEPTH]; -} tMsgPttSetPowerLut; - -typedef PACKED_PRE struct PACKED_POST { - ePhyTxChains txChain; - - tANI_U8 powerLut[TPC_MEM_POWER_LUT_DEPTH]; -} tMsgPttGetPowerLut; - - -//Rx Gain Service -typedef PACKED_PRE struct PACKED_POST { - sRxChainsAgcDisable gains; -} tMsgPttDisableAgcTables; - - -typedef PACKED_PRE struct PACKED_POST { - sRxChainsAgcEnable enables; -} tMsgPttEnableAgcTables; - -typedef PACKED_PRE struct PACKED_POST { - sRxChainsRssi rssi; -} tMsgPttGetRxRssi; - -typedef PACKED_PRE struct PACKED_POST { - sRxChainsRssi rssi; -}tMsgPttGetUnicastMacPktRxRssi; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 conf; -}tMsgPttGetUnicastMacPktRxRssiConf_PRIMA_V1; - -//Rx Frame Catcher Service -typedef PACKED_PRE struct PACKED_POST { - sRxTypesDisabled disabled; -} tMsgPttSetRxDisableMode; - -typedef PACKED_PRE struct PACKED_POST { - sRxFrameCounters counters; -} tMsgPttGetRxPktCounts; - - -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 notUsed; -} tMsgPttResetRxPacketStatistics; - - - - - -//ADC Sample Service -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 startSample; //index of first requested sample, 0 causes new capture - tANI_U32 numSamples; //number of samples to transfer to host - eGrabRamSampleType sampleType; - tGrabRamSample grabRam[MAX_REQUESTED_GRAB_RAM_SAMPLES]; -} tMsgPttGrabRam; - - -//Phy Calibration Service -typedef PACKED_PRE struct PACKED_POST { - sRxChainsIQCalValues calValues; - eGainSteps gain; -} tMsgPttRxIqCal; - -typedef PACKED_PRE struct PACKED_POST { - tRxChainsDcoCorrections calValues; - tANI_U8 gain; -} tMsgPttRxDcoCal; - -typedef PACKED_PRE struct PACKED_POST { - tRxChainsIm2Corrections calValues; - eGainSteps gain; - tANI_U8 im2CalOnly; -} tMsgPttRxIm2Cal; - -typedef PACKED_PRE struct PACKED_POST { - sTxChainsLoCorrections calValues; - tANI_U8 reserve[2]; - eGainSteps gain; -} tMsgPttTxCarrierSuppressCal; - -typedef PACKED_PRE struct PACKED_POST { - sTxChainsIQCalValues calValues; - tANI_U8 reserve[2]; - eGainSteps gain; -} tMsgPttTxIqCal; - -typedef PACKED_PRE struct PACKED_POST { - sTxChainsHKIQCalValues calValues; - eGainSteps gain; -} tMsgPttHKdacTxIqCal; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 unused; -} tMsgPttExecuteInitialCals; - -typedef PACKED_PRE struct PACKED_POST { - sRfHdetCalValues hdetCalValues; -} tMsgPttHdetCal; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U16 clpcMode; - tANI_U16 txCmdPwr; - tANI_U16 pwrMax_pwrMin; - tANI_U16 step; - tANI_U8 plut[256]; -} tMsgPttClpcSwCal_PRIMA_V1; - - -//Phy Calibration Override Service -typedef PACKED_PRE struct PACKED_POST { - sTxChainsLoCorrections calValues; - tANI_U8 reserve[2]; - eGainSteps gain; -} tMsgPttSetTxCarrierSuppressCorrect; - -typedef PACKED_PRE struct PACKED_POST { - sTxChainsLoCorrections calValues; - tANI_U8 reserve[2]; - eGainSteps gain; -} tMsgPttGetTxCarrierSuppressCorrect; - -typedef PACKED_PRE struct PACKED_POST { - sTxChainsIQCalValues calValues; - tANI_U8 reserve[2]; - eGainSteps gain; -} tMsgPttSetTxIqCorrect; - -typedef PACKED_PRE struct PACKED_POST { - sTxChainsIQCalValues calValues; - tANI_U8 reserve[2]; - eGainSteps gain; -} tMsgPttGetTxIqCorrect; - -typedef PACKED_PRE struct PACKED_POST { - sTxChainsHKIQCalValues calValues; - eGainSteps gain; -} tMsgPttHKdacSetTxIqCorrect; - -typedef PACKED_PRE struct PACKED_POST { - sTxChainsHKIQCalValues calValues; - eGainSteps gain; -} tMsgPttHKdacGetTxIqCorrect; - -typedef PACKED_PRE struct PACKED_POST { - sRxChainsIQCalValues calValues; - eGainSteps gain; -} tMsgPttSetRxIqCorrect; - -typedef PACKED_PRE struct PACKED_POST { - sRxChainsIQCalValues calValues; - eGainSteps gain; -} tMsgPttGetRxIqCorrect; - -typedef PACKED_PRE struct PACKED_POST { - tRxChainsDcoCorrections calValues; - tANI_U8 gain; -} tMsgPttSetRxDcoCorrect; - -typedef PACKED_PRE struct PACKED_POST { - tRxChainsDcoCorrections calValues; - tANI_U8 gain; -} tMsgPttGetRxDcoCorrect; - -typedef PACKED_PRE struct PACKED_POST { - tRxChainsIm2Corrections calValues; - tANI_U8 dummy; -} tMsgPttSetRxIm2Correct; - -typedef PACKED_PRE struct PACKED_POST { - tRxChainsIm2Corrections calValues; - tANI_U8 dummy; -} tMsgPttGetRxIm2Correct; - -typedef PACKED_PRE struct PACKED_POST { - eRfTempSensor tempSensor; - tTempADCVal tempAdc; - tANI_U8 reserved[4 - sizeof(tTempADCVal)]; -} tMsgPttGetTempAdc; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 addr; - tANI_U32 mask; - tANI_U32 shift; - tANI_U32 value; -} tMsgPttReadRfField; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 addr; - tANI_U32 mask; - tANI_U32 shift; - tANI_U32 value; -} tMsgPttWriteRfField; - -//SIF bar4 Register Access -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 sifRegAddr; - tANI_U32 sifRegValue; -} tMsgPttReadSifBar4Register; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 sifRegAddr; - tANI_U32 sifRegValue; -} tMsgPttWriteSifBar4Register; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 notUsed; -} tMsgPttDeepSleep; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 notUsed; -} tMsgPttEnterFullPower; - -//Misc. -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 notUsed; -} tMsgPttSystemReset; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 cmd; - tANI_U32 arg1; - tANI_U32 arg2; - tANI_U32 arg3; - tANI_U32 arg4; -} tMsgPttLogDump; - -typedef PACKED_PRE struct PACKED_POST { - sBuildReleaseParams relParams; -} tMsgPttGetBuildReleaseNumber; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 revId; -} tMsgPttGetRFVersion; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 option; //dummy variable -} tMsgPttCalControlBitmap; - -//#ifdef VERIFY_HALPHY_SIMV_MODEL - - -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 option; //dummy variable -} tMsgPttHalPhyInit; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 option; //dummy variable -} tMsgPttRxIQTest; - -typedef PACKED_PRE struct PACKED_POST { - sTxChainsDPDCalValues calValues; - eGainSteps gain; -} tMsgPttDpdCal; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U8 lutIdx; - tANI_U8 band; -} tMsgPttStartToneGen; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 option; //dummy variable -} tMsgPttStopToneGen; - -typedef PACKED_PRE struct PACKED_POST { - sTxChainsLnaBandCalValues calValues; - eGainSteps gain; -} tMsgPttLnaBandCal; - -typedef PACKED_PRE struct PACKED_POST { - sTxChainsLnaBandCalValues calValues; - eGainSteps gain; -} tMsgPttGetLnaBandCalCorrect; - -typedef PACKED_PRE struct PACKED_POST { - sTxChainsLnaBandCalValues calValues; - eGainSteps gain; -} tMsgPttSetLnaBandCalCorrect; - -typedef PACKED_PRE struct PACKED_POST { - sTxChainsDPDCalValues calValues; - eGainSteps gain; -}tMsgPttSetDPDCorrect; - -typedef PACKED_PRE struct PACKED_POST { - sTxChainsDPDCalValues calValues; - eGainSteps gain; -}tMsgPttGetDPDCorrect; - -typedef PACKED_PRE struct PACKED_POST { - tQWPTT_U32 cmdIdx; - tQWPTT_U32 param1; - tQWPTT_U32 param2; - tQWPTT_U32 param3; - tQWPTT_U32 param4; -} tMsgPttPrimaGenericCmd; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U16 testID; - tANI_U16 result; -} tMsgPttPinConnTestRes; -//#endif - -/****************************************************************************************************************** - END OF PTT MESSAGES -******************************************************************************************************************/ - -typedef PACKED_PRE union PACKED_POST pttMsgUnion{ -//typedef union pttMsgUnion { - tMsgPttMsgInit MsgInit; - tMsgPttGetNvTable GetNvTable; - tMsgPttSetNvTable SetNvTable; - tMsgPttDelNvTable DelNvTable; - tMsgPttBlankNv BlankNv; - tMsgPttStoreNvTable StoreNvTable; - tMsgPttSetRegDomain SetRegDomain; - tMsgPttGetNvField GetNvField; - tMsgPttSetNvField SetNvField; - tMsgPttGetNvBin GetNvBin; - tMsgPttSetNvBin SetNvBin; - tMsgPttDbgReadRegister DbgReadRegister; - tMsgPttDbgWriteRegister DbgWriteRegister; - tMsgPttDbgReadMemory DbgReadMemory; - tMsgPttDbgWriteMemory DbgWriteMemory; - tMsgPttEnableChains EnableChains; - tMsgPttSetChannel SetChannel; - tMsgPttSetWaveform SetWaveform; - tMsgPttSetTxWaveformGain SetTxWaveformGain; - tMsgPttSetTxWaveformGain_PRIMA_V1 SetTxWaveformGain_PRIMA_V1; - tMsgPttGetWaveformPowerAdc GetWaveformPowerAdc; - tMsgPttStartWaveform StartWaveform; - tMsgPttStartWaveform_PRIMA_V1 StartWaveform_PRIMA_V1; - tMsgPttStopWaveform StopWaveform; - tMsgPttSetRxWaveformGain SetRxWaveformGain; - tMsgPttConfigTxPacketGen ConfigTxPacketGen; - tMsgPttStartStopTxPacketGen StartStopTxPacketGen; - tMsgPttQueryTxStatus QueryTxStatus; - tMsgPttCloseTpcLoop CloseTpcLoop; - tMsgPttCloseTpcLoop_PRIMA_V1 CloseTpcLoop_PRIMA_V1; - tMsgPttSetPacketTxGainTable SetPacketTxGainTable; - tMsgPttGetPacketTxGainTable GetPacketTxGainTable; - tMsgPttSetPacketTxGainIndex SetPacketTxGainIndex; - tMsgPttForcePacketTxGain ForcePacketTxGain; - tMsgPttForcePacketTxGain_PRIMA_V1 ForcePacketTxGain_PRIMA_V1; - tMsgPttSetPwrIndexSource SetPwrIndexSource; - tMsgPttSetTxPower SetTxPower; - tMsgPttGetTxPowerReport GetTxPowerReport; - tMsgPttSetPowerLut SetPowerLut; - tMsgPttGetPowerLut GetPowerLut; - tMsgPttDisableAgcTables DisableAgcTables; - tMsgPttEnableAgcTables EnableAgcTables; - tMsgPttGetRxRssi GetRxRssi; - tMsgPttGetUnicastMacPktRxRssi GetUnicastMacPktRxRssi; - tMsgPttGetUnicastMacPktRxRssiConf_PRIMA_V1 GetUnicastMacPktRxRssiConf_PRIMA_V1; - tMsgPttSetRxDisableMode SetRxDisableMode; - tMsgPttGetRxPktCounts GetRxPktCounts; - tMsgPttResetRxPacketStatistics ResetRxPacketStatistics; - tMsgPttGrabRam GrabRam; - tMsgPttRxIqCal RxIqCal; - tMsgPttRxDcoCal RxDcoCal; - tMsgPttRxIm2Cal RxIm2Cal; - - tMsgPttExecuteInitialCals ExecuteInitialCals; - tMsgPttTxCarrierSuppressCal TxCarrierSuppressCal; - tMsgPttTxIqCal TxIqCal; - tMsgPttHKdacTxIqCal HKdacTxIqCal; - tMsgPttClpcCalSetup_PRIMA_V1 ClpcCalSetup_PRIMA_V1; - tMsgPttClpcCalRestore_PRIMA_V1 ClpcCalRestore_PRIMA_V1; - tMsgPttHdetCal HdetCal; - tMsgPttClpcSwCal_PRIMA_V1 ClpcSwCal_PRIMA_V1; - tMsgPttClpcCalExtraMeasurement_PRIMA_V1 ClpcCalExtraMeasurement_PRIMA_V1; - tMsgPttSetTxCarrierSuppressCorrect SetTxCarrierSuppressCorrect; - tMsgPttGetTxCarrierSuppressCorrect GetTxCarrierSuppressCorrect; - tMsgPttSetTxIqCorrect SetTxIqCorrect; - tMsgPttGetTxIqCorrect GetTxIqCorrect; - tMsgPttSetRxIqCorrect SetRxIqCorrect; - tMsgPttGetRxIqCorrect GetRxIqCorrect; - tMsgPttSetRxDcoCorrect SetRxDcoCorrect; - tMsgPttGetRxDcoCorrect GetRxDcoCorrect; - tMsgPttSetRxIm2Correct SetRxIm2Correct; - tMsgPttGetRxIm2Correct GetRxIm2Correct; - tMsgPttHKdacSetTxIqCorrect HKdacSetTxIqCorrect; - tMsgPttHKdacGetTxIqCorrect HKdacGetTxIqCorrect; - - tMsgPttGetTempAdc GetTempAdc; - tMsgPttReadRfField ReadRfField; - tMsgPttWriteRfField WriteRfField; - tMsgPttCalControlBitmap SetCalControlBitmap; - -//#ifdef VERIFY_HALPHY_SIMV_MODEL - - tMsgPttHalPhyInit InitOption; - tMsgPttRxIQTest RxIQTest; - tMsgPttDpdCal DpdCal; - tMsgPttStartToneGen StartToneGen; - tMsgPttStopToneGen StopToneGen; -//#endif - tMsgPttDeepSleep DeepSleep; - tMsgPttReadSifBar4Register ReadSifBar4Register; - tMsgPttWriteSifBar4Register WriteSifBar4Register; - tMsgPttEnterFullPower EnterFullPower; - tMsgPttSystemReset SystemReset; - tMsgPttLogDump LogDump; - tMsgPttGetBuildReleaseNumber GetBuildReleaseNumber; - tMsgPttGetRFVersion GetRFVersion; - -//[RY] added for PRIMA - tMsgPttSetWaveformRF SetWaveformRF; - tMsgPttStopWaveformRF StopWaveformRF; - tMsgPttStartWaveformRF StartWaveformRF; - tMsgPttLnaBandCal LnaBandCal; - tMsgPttGetLnaBandCalCorrect GetLnaBandCalCorrect; - tMsgPttSetLnaBandCalCorrect SetLnaBandCalCorrect; - tMsgPttGetDPDCorrect GetDPDCorrect; - tMsgPttSetDPDCorrect SetDPDCorrect; - tMsgPttDpdCal DPDCal; - tMsgPttPrimaGenericCmd PrimaGenericCmd; - tMsgPttPinConnTestRes PinConnTestRes; -} uPttMsgs; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U16 msgId; - tANI_U16 msgBodyLength; //actually, the length of all the fields in this structure - eQWPttStatus msgResponse; - uPttMsgs msgBody; -} tPttMsgbuffer, *tpPttMsgbuffer; - - -typedef PACKED_PRE struct PACKED_POST { - /* - * success or failure - */ - tANI_U32 status; - tPttMsgbuffer pttMsgBuffer; -} tProcessPttRspParams, *tpProcessPttRspParams; - -/* End of Ptt Parameters */ - -#endif diff --git a/riva/inc/wlan_hal_cfg.h b/riva/inc/wlan_hal_cfg.h deleted file mode 100644 index baf4065e7a98..000000000000 --- a/riva/inc/wlan_hal_cfg.h +++ /dev/null @@ -1,917 +0,0 @@ -/* -* Copyright (c) 2012-2013 Qualcomm Atheros, Inc. -* All Rights Reserved. -* Qualcomm Atheros Confidential and Proprietary. -*/ - -/*========================================================================== - * - * @file: wlan_hal_cfg.h - * - * @brief: Exports and types WLAN HAL configuration - * - * @author: Kumar Anand - * - * Copyright (C) 2010, Qualcomm Technologies, Inc. - * All rights reserved. - * - *=========================================================================*/ - -#ifndef __WLAN_HAL_CFG_H__ -#define __WLAN_HAL_CFG_H__ - -/*------------------------------------------------------------------------- - Include Files --------------------------------------------------------------------------*/ -#include "qwlanfw_defs.h" - -/*------------------------------------------------------------------------- - Preprocessor definitions and constants --------------------------------------------------------------------------*/ -/* RIVA API version in format W.X.Y.Z is converted to a UINT32 integer */ -#define WLAN_HAL_CONSTRUCT_API_VERSION(W,X,Y,Z) (((W)<<24)+((X)<<16)+((Y)<<8)+(Z)) -#define IS_VERSION_BEFORE_VOWIFI(VER_FROM_HOST) \ - ((VER_FROM_HOST)<=WLAN_HAL_CONSTRUCT_API_VERSION(0,0,2,0))?1:0 - -/*------------------------------------------------------------------------- - Configuration Parameter IDs --------------------------------------------------------------------------*/ -#define QWLAN_HAL_CFG_STA_ID 0 -#define QWLAN_HAL_CFG_CURRENT_TX_ANTENNA 1 -#define QWLAN_HAL_CFG_CURRENT_RX_ANTENNA 2 -#define QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE 3 -#define QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN 4 -#define QWLAN_HAL_CFG_CAL_PERIOD 5 -#define QWLAN_HAL_CFG_CAL_CONTROL 6 -#define QWLAN_HAL_CFG_PROXIMITY 7 -#define QWLAN_HAL_CFG_NETWORK_DENSITY 8 -#define QWLAN_HAL_CFG_MAX_MEDIUM_TIME 9 -#define QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU 10 -#define QWLAN_HAL_CFG_RTS_THRESHOLD 11 -#define QWLAN_HAL_CFG_SHORT_RETRY_LIMIT 12 -#define QWLAN_HAL_CFG_LONG_RETRY_LIMIT 13 -#define QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD 14 -#define QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO 15 -#define QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE 16 -#define QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO 17 -#define QWLAN_HAL_CFG_FIXED_RATE 18 -#define QWLAN_HAL_CFG_RETRYRATE_POLICY 19 -#define QWLAN_HAL_CFG_RETRYRATE_SECONDARY 20 -#define QWLAN_HAL_CFG_RETRYRATE_TERTIARY 21 -#define QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION 22 -#define QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ 23 -#define QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ 24 -#define QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ 25 -#define QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ 26 -#define QWLAN_HAL_CFG_MAX_BA_SESSIONS 27 -#define QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT 28 -#define QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER 29 -#define QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR 30 -#define QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE 31 -#define QWLAN_HAL_CFG_STATS_PERIOD 32 -#define QWLAN_HAL_CFG_CFP_MAX_DURATION 33 -#define QWLAN_HAL_CFG_FRAME_TRANS_ENABLED 34 -#define QWLAN_HAL_CFG_DTIM_PERIOD 35 -#define QWLAN_HAL_CFG_EDCA_WMM_ACBK 36 -#define QWLAN_HAL_CFG_EDCA_WMM_ACBE 37 -#define QWLAN_HAL_CFG_EDCA_WMM_ACVO 38 -#define QWLAN_HAL_CFG_EDCA_WMM_ACVI 39 -#define QWLAN_HAL_CFG_BA_THRESHOLD_HIGH 40 -#define QWLAN_HAL_CFG_MAX_BA_BUFFERS 41 -#define QWLAN_HAL_CFG_RPE_POLLING_THRESHOLD 42 -#define QWLAN_HAL_CFG_RPE_AGING_THRESHOLD_FOR_AC0_REG 43 -#define QWLAN_HAL_CFG_RPE_AGING_THRESHOLD_FOR_AC1_REG 44 -#define QWLAN_HAL_CFG_RPE_AGING_THRESHOLD_FOR_AC2_REG 45 -#define QWLAN_HAL_CFG_RPE_AGING_THRESHOLD_FOR_AC3_REG 46 -#define QWLAN_HAL_CFG_NO_OF_ONCHIP_REORDER_SESSIONS 47 -#define QWLAN_HAL_CFG_PS_LISTEN_INTERVAL 48 -#define QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD 49 -#define QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER 50 -#define QWLAN_HAL_CFG_PS_MAX_PS_POLL 51 -#define QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD 52 -#define QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD 53 -#define QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE 54 -#define QWLAN_HAL_CFG_PS_IGNORE_DTIM 55 -#define QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM 56 -#define QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE 57 -#define QWLAN_HAL_CFG_PS_NULLDATA_AP_RESP_TIMEOUT 58 -#define QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN 59 -#define QWLAN_HAL_CFG_TELE_BCN_TRANS_LI 60 -#define QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS 61 -#define QWLAN_HAL_CFG_TELE_BCN_MAX_LI 62 -#define QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS 63 -#define QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE 64 -#define QWLAN_HAL_CFG_VALID_RADAR_CHANNEL_LIST 65 -#define QWLAN_HAL_CFG_TX_POWER_24_20 66 -#define QWLAN_HAL_CFG_TX_POWER_24_40 67 -#define QWLAN_HAL_CFG_TX_POWER_50_20 68 -#define QWLAN_HAL_CFG_TX_POWER_50_40 69 -#define QWLAN_HAL_CFG_MCAST_BCAST_FILTER_SETTING 70 -#define QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL 71 -#define QCOM_WLAN_CFG_MAX_TX_POWER_2_4 72 -#define QCOM_WLAN_CFG_MAX_TX_POWER_5 73 -#define QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD 74 -#define QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP 75 -#define QWLAN_HAL_CFG_BTC_EXECUTION_MODE 76 -#define QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK 77 -#define QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS 78 -#define QWLAN_HAL_CFG_PS_TX_INACTIVITY_TIMEOUT 79 -#define QWLAN_HAL_CFG_WCNSS_API_VERSION 80 -#define QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT 81 -#define QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT 82 -#define QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST 83 -#define QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT 84 -#define QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT 85 -#define QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT 86 -#define QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT 87 -#define QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN 88 -#define QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN 89 -#define QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN 90 -#define QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN 91 -#define QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT 92 -#define QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN 93 -#define QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC 94 -#define QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP 95 -#define QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO 96 -#define QWLAN_HAL_CFG_ENABLE_UNICAST_FILTER 97 -#define QWLAN_HAL_CFG_MAX_ASSOC_LIMIT 98 -#define QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION 99 -#define QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER 100 -#define QWLAN_HAL_CFG_ENABLE_DETECT_PS_SUPPORT 101 -#define QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT 102 -#define QWLAN_HAL_CFG_BTC_DWELL_TIME_MULTIPLIER 103 -#define QWLAN_HAL_CFG_ENABLE_TDLS_OXYGEN_MODE 104 -#define QWLAN_HAL_CFG_ENABLE_NAT_KEEP_ALIVE_FILTER 105 -#define QWLAN_HAL_CFG_ENABLE_SAP_OBSS_PROT 106 -#define QWLAN_HAL_CFG_PSPOLL_DATA_RECEP_TIMEOUT 107 -#define QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE 108 -#define QWLAN_HAL_CFG_TDLS_PUAPSD_MASK 109 -#define QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME 110 -#define QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP 111 -#define QWLAN_HAL_CFG_ANTENNA_DIVERSITY 112 -#define QWLAN_HAL_CFG_ATH_DISABLE 113 -#define QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR 114 -#define QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE 115 -#define QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE 116 -#define QWLAN_HAL_CFG_MWS_COEX_V1_WAN_FREQ 117 -#define QWLAN_HAL_CFG_MWS_COEX_V1_WLAN_FREQ 118 -#define QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG 119 -#define QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG2 120 -#define QWLAN_HAL_CFG_MWS_COEX_V2_WAN_FREQ 121 -#define QWLAN_HAL_CFG_MWS_COEX_V2_WLAN_FREQ 122 -#define QWLAN_HAL_CFG_MWS_COEX_V2_CONFIG 123 -#define QWLAN_HAL_CFG_MWS_COEX_V2_CONFIG2 124 -#define QWLAN_HAL_CFG_MWS_COEX_V3_WAN_FREQ 125 -#define QWLAN_HAL_CFG_MWS_COEX_V3_WLAN_FREQ 126 -#define QWLAN_HAL_CFG_MWS_COEX_V3_CONFIG 127 -#define QWLAN_HAL_CFG_MWS_COEX_V3_CONFIG2 128 -#define QWLAN_HAL_CFG_MWS_COEX_V4_WAN_FREQ 129 -#define QWLAN_HAL_CFG_MWS_COEX_V4_WLAN_FREQ 130 -#define QWLAN_HAL_CFG_MWS_COEX_V4_CONFIG 131 -#define QWLAN_HAL_CFG_MWS_COEX_V4_CONFIG2 132 -#define QWLAN_HAL_CFG_MWS_COEX_V5_WAN_FREQ 133 -#define QWLAN_HAL_CFG_MWS_COEX_V5_WLAN_FREQ 134 -#define QWLAN_HAL_CFG_MWS_COEX_V5_CONFIG 135 -#define QWLAN_HAL_CFG_MWS_COEX_V5_CONFIG2 136 -#define QWLAN_HAL_CFG_MWS_COEX_V6_WAN_FREQ 137 -#define QWLAN_HAL_CFG_MWS_COEX_V6_WLAN_FREQ 138 -#define QWLAN_HAL_CFG_MWS_COEX_V6_CONFIG 139 -#define QWLAN_HAL_CFG_MWS_COEX_V6_CONFIG2 140 -#define QWLAN_HAL_CFG_MWS_COEX_V7_WAN_FREQ 141 -#define QWLAN_HAL_CFG_MWS_COEX_V7_WLAN_FREQ 142 -#define QWLAN_HAL_CFG_MWS_COEX_V7_CONFIG 143 -#define QWLAN_HAL_CFG_MWS_COEX_V7_CONFIG2 144 -#define QWLAN_HAL_CFG_MWS_COEX_V8_WAN_FREQ 145 -#define QWLAN_HAL_CFG_MWS_COEX_V8_WLAN_FREQ 146 -#define QWLAN_HAL_CFG_MWS_COEX_V8_CONFIG 147 -#define QWLAN_HAL_CFG_MWS_COEX_V8_CONFIG2 148 -#define QWLAN_HAL_CFG_MWS_COEX_V9_WAN_FREQ 149 -#define QWLAN_HAL_CFG_MWS_COEX_V9_WLAN_FREQ 150 -#define QWLAN_HAL_CFG_MWS_COEX_V9_CONFIG 151 -#define QWLAN_HAL_CFG_MWS_COEX_V9_CONFIG2 152 -#define QWLAN_HAL_CFG_MWS_COEX_V10_WAN_FREQ 153 -#define QWLAN_HAL_CFG_MWS_COEX_V10_WLAN_FREQ 154 -#define QWLAN_HAL_CFG_MWS_COEX_V10_CONFIG 155 -#define QWLAN_HAL_CFG_MWS_COEX_V10_CONFIG2 156 -#define QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF 157 -#define QWLAN_HAL_CFG_MWS_COEX_CONFIG1 158 -#define QWLAN_HAL_CFG_MWS_COEX_CONFIG2 159 -#define QWLAN_HAL_CFG_MWS_COEX_CONFIG3 160 -#define QWLAN_HAL_CFG_MWS_COEX_CONFIG4 161 -#define QWLAN_HAL_CFG_MWS_COEX_CONFIG5 162 -#define QWLAN_HAL_CFG_MWS_COEX_CONFIG6 163 -#define QWLAN_HAL_CFG_SAR_POWER_BACKOFF 164 -#define QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT 165 -#define QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN 166 -#define QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN 167 -#define QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN 168 -#define QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN 169 -#define QWLAN_HAL_CFG_RMCAST_FIXED_RATE 170 -#define QWLAN_HAL_CFG_MAX_PARAMS 171 - - -/* Total number of Integer CFGs. This is used while allocating the memory for TLV */ -#define QWLAN_HAL_CFG_INTEGER_PARAM 171 - -/*------------------------------------------------------------------------- - Configuration Parameter min, max, defaults --------------------------------------------------------------------------*/ - -/* QWLAN_HAL_CFG_STA_ID*/ -#define QWLAN_HAL_CFG_STA_ID_STADEF "000AF5898989" -#define QCOM_WLAN_CFG_STA_ID_LEN 6 - -/* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */ -#define QWLAN_HAL_CFG_CURRENT_TX_ANTENNA_STAMIN 1 -#define QWLAN_HAL_CFG_CURRENT_TX_ANTENNA_STAMAX 1 -#define QWLAN_HAL_CFG_CURRENT_TX_ANTENNA_STADEF 1 - -/* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */ -#define QWLAN_HAL_CFG_CURRENT_RX_ANTENNA_STAMIN 1 -#define QWLAN_HAL_CFG_CURRENT_RX_ANTENNA_STAMAX 2 -#define QWLAN_HAL_CFG_CURRENT_RX_ANTENNA_STADEF 1 - -/* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */ -#define QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE_STAMIN 0 -#define QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE_STAMAX 1 -#define QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE_STADEF 0 - -/* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */ -#define QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN_STAMIN 0 -#define QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN_STAMAX 65535 -#define QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN_STADEF 785 -#define QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN_OFF 0 -#define QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN_ON 1 -#define QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN_TX 2 -#define QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN_RX 3 -#define QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN_MASK 15 -#define QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN_CHAIN_0_OFFSET 0 -#define QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN_CHAIN_1_OFFSET 4 -#define QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN_CHAIN_2_OFFSET 8 - -/* QWLAN_HAL_CFG_CAL_PERIOD */ -#define QWLAN_HAL_CFG_CAL_PERIOD_STAMIN 2 -#define QWLAN_HAL_CFG_CAL_PERIOD_STAMAX 10 -#define QWLAN_HAL_CFG_CAL_PERIOD_STADEF 5 - -/* QWLAN_HAL_CFG_CAL_CONTROL */ -#define QWLAN_HAL_CFG_CAL_CONTROL_STAMIN 0 -#define QWLAN_HAL_CFG_CAL_CONTROL_STAMAX 1 -#define QWLAN_HAL_CFG_CAL_CONTROL_STADEF 0 -#define QWLAN_HAL_CFG_CAL_CONTROL_CAL_ON 0 -#define QWLAN_HAL_CFG_CAL_CONTROL_CAL_OFF 1 - -/* QWLAN_HAL_CFG_PROXIMITY */ -#define QWLAN_HAL_CFG_PROXIMITY_STAMIN 0 -#define QWLAN_HAL_CFG_PROXIMITY_STAMAX 1 -#define QWLAN_HAL_CFG_PROXIMITY_STADEF 0 -#define QWLAN_HAL_CFG_PROXIMITY_OFF 0 -#define QWLAN_HAL_CFG_PROXIMITY_ON 1 - -/* QWLAN_HAL_CFG_NETWORK_DENSITY */ -#define QWLAN_HAL_CFG_NETWORK_DENSITY_STAMIN 0 -#define QWLAN_HAL_CFG_NETWORK_DENSITY_STAMAX 3 -#define QWLAN_HAL_CFG_NETWORK_DENSITY_STADEF 3 -#define QWLAN_HAL_CFG_NETWORK_DENSITY_LOW 0 -#define QWLAN_HAL_CFG_NETWORK_DENSITY_MEDIUM 1 -#define QWLAN_HAL_CFG_NETWORK_DENSITY_HIGH 2 -#define QWLAN_HAL_CFG_NETWORK_DENSITY_ADAPTIVE 3 - -/* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */ -#define QWLAN_HAL_CFG_MAX_MEDIUM_TIME_STAMIN 0 -#define QWLAN_HAL_CFG_MAX_MEDIUM_TIME_STAMAX 65535 -#define QWLAN_HAL_CFG_MAX_MEDIUM_TIME_STADEF 1024 - -/* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */ -#define QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU_STAMIN 0 -#define QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU_STAMAX 65535 -#define QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU_STADEF 64 - -/* QWLAN_HAL_CFG_RTS_THRESHOLD */ -#define QWLAN_HAL_CFG_RTS_THRESHOLD_STAMIN 0 -#define QWLAN_HAL_CFG_RTS_THRESHOLD_STAMAX 2347 -#define QWLAN_HAL_CFG_RTS_THRESHOLD_STADEF 2347 - -/* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */ -#define QWLAN_HAL_CFG_SHORT_RETRY_LIMIT_STAMIN 0 -#define QWLAN_HAL_CFG_SHORT_RETRY_LIMIT_STAMAX 255 -#define QWLAN_HAL_CFG_SHORT_RETRY_LIMIT_STADEF 15 - -/* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */ -#define QWLAN_HAL_CFG_LONG_RETRY_LIMIT_STAMIN 0 -#define QWLAN_HAL_CFG_LONG_RETRY_LIMIT_STAMAX 255 -#define QWLAN_HAL_CFG_LONG_RETRY_LIMIT_STADEF 15 - -/* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */ -#define QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD_STAMIN 256 -#define QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD_STAMAX 8000 -#define QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD_STADEF 8000 - -/* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */ -#define QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO_STAMIN 0 -#define QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO_STAMAX 255 -#define QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO_STADEF 5 - -/* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */ -#define QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE_STAMIN 0 -#define QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE_STAMAX 255 -#define QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE_STADEF 10 - -/* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */ -#define QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO_STAMIN 0 -#define QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO_STAMAX 255 -#define QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO_STADEF 15 - -#define QWLAN_HAL_CFG_FIXED_RATE_AUTO 0 -#define QWLAN_HAL_CFG_FIXED_RATE_1MBPS 1 -#define QWLAN_HAL_CFG_FIXED_RATE_2MBPS 2 -#define QWLAN_HAL_CFG_FIXED_RATE_5_5MBPS 3 -#define QWLAN_HAL_CFG_FIXED_RATE_11MBPS 4 -#define QWLAN_HAL_CFG_FIXED_RATE_6MBPS 5 -#define QWLAN_HAL_CFG_FIXED_RATE_9MBPS 6 -#define QWLAN_HAL_CFG_FIXED_RATE_12MBPS 7 -#define QWLAN_HAL_CFG_FIXED_RATE_18MBPS 8 -#define QWLAN_HAL_CFG_FIXED_RATE_24MBPS 9 -#define QWLAN_HAL_CFG_FIXED_RATE_36MBPS 10 -#define QWLAN_HAL_CFG_FIXED_RATE_48MBPS 11 -#define QWLAN_HAL_CFG_FIXED_RATE_54MBPS 12 -#define QWLAN_HAL_CFG_FIXED_RATE_6_5MBPS_MCS0_20MHZ_SIMO 13 -#define QWLAN_HAL_CFG_FIXED_RATE_13MBPS_MCS1_20MHZ_SIMO 14 -#define QWLAN_HAL_CFG_FIXED_RATE_19_5MBPS_MCS2_20MHZ_SIMO 15 -#define QWLAN_HAL_CFG_FIXED_RATE_26MBPS_MCS3_20MHZ_SIMO 16 -#define QWLAN_HAL_CFG_FIXED_RATE_39MBPS_MCS4_20MHZ_SIMO 17 -#define QWLAN_HAL_CFG_FIXED_RATE_52MBPS_MCS5_20MHZ_SIMO 18 -#define QWLAN_HAL_CFG_FIXED_RATE_58_5MBPS_MCS6_20MHZ_SIMO 19 -#define QWLAN_HAL_CFG_FIXED_RATE_65MBPS_MCS7_20MHZ_SIMO 20 -#define QWLAN_HAL_CFG_FIXED_RATE_7_2MBPS_MCS0_20MHZ_SIMO_SGI 21 -#define QWLAN_HAL_CFG_FIXED_RATE_14_4MBPS_MCS1_20MHZ_SIMO_SGI 22 -#define QWLAN_HAL_CFG_FIXED_RATE_21_7MBPS_MCS2_20MHZ_SIMO_SGI 23 -#define QWLAN_HAL_CFG_FIXED_RATE_28_9MBPS_MCS3_20MHZ_SIMO_SGI 24 -#define QWLAN_HAL_CFG_FIXED_RATE_43_3MBPS_MCS4_20MHZ_SIMO_SGI 25 -#define QWLAN_HAL_CFG_FIXED_RATE_57_8MBPS_MCS5_20MHZ_SIMO_SGI 26 -#define QWLAN_HAL_CFG_FIXED_RATE_65MBPS_MCS6_20MHZ_SIMO_SGI 27 -#define QWLAN_HAL_CFG_FIXED_RATE_72_2MBPS_MCS7_20MHZ_SIMO_SGI 28 -#define QWLAN_HAL_CFG_FIXED_RATE_13_5MBPS_MCS0_40MHZ_SIMO 29 -#define QWLAN_HAL_CFG_FIXED_RATE_27MBPS_MCS1_40MHZ_SIMO 30 -#define QWLAN_HAL_CFG_FIXED_RATE_40_5MBPS_MCS2_40MHZ_SIMO 31 -#define QWLAN_HAL_CFG_FIXED_RATE_54MBPS_MCS3_40MHZ_SIMO 32 -#define QWLAN_HAL_CFG_FIXED_RATE_81MBPS_MCS4_40MHZ_SIMO 33 -#define QWLAN_HAL_CFG_FIXED_RATE_108MBPS_MCS5_40MHZ_SIMO 34 -#define QWLAN_HAL_CFG_FIXED_RATE_121_5MBPS_MCS6_40MHZ_SIMO 35 -#define QWLAN_HAL_CFG_FIXED_RATE_135MBPS_MCS7_40MHZ_SIMO 36 -#define QWLAN_HAL_CFG_FIXED_RATE_15MBPS_MCS0_40MHZ_SIMO_SGI 37 -#define QWLAN_HAL_CFG_FIXED_RATE_30MBPS_MCS1_40MHZ_SIMO_SGI 38 -#define QWLAN_HAL_CFG_FIXED_RATE_45MBPS_MCS2_40MHZ_SIMO_SGI 39 -#define QWLAN_HAL_CFG_FIXED_RATE_60MBPS_MCS3_40MHZ_SIMO_SGI 40 -#define QWLAN_HAL_CFG_FIXED_RATE_90MBPS_MCS4_40MHZ_SIMO_SGI 41 -#define QWLAN_HAL_CFG_FIXED_RATE_120MBPS_MCS5_40MHZ_SIMO_SGI 42 -#define QWLAN_HAL_CFG_FIXED_RATE_135MBPS_MCS6_40MHZ_SIMO_SGI 43 -#define QWLAN_HAL_CFG_FIXED_RATE_150MBPS_MCS7_40MHZ_SIMO_SGI 44 - -/* QWLAN_HAL_CFG_FIXED_RATE - * Follwing rates in user configuration are mapped to TPE rates - * Mapping is defined in the gHalUserFixedRateCfgToTpeRateTable - */ -#define QWLAN_HAL_CFG_FIXED_RATE_STAMIN 0 -#define QWLAN_HAL_CFG_FIXED_RATE_STAMAX 226 -#define QWLAN_HAL_CFG_FIXED_RATE_STADEF QWLAN_HAL_CFG_FIXED_RATE_AUTO - -/* QWLAN_HAL_CFG_RMCAST_FIXED_RATE - * Follwing rates in user configuration are mapped to TPE rates - * Mapping is defined in the gHalUserFixedRateCfgToTpeRateTable - */ -#define QWLAN_HAL_CFG_RMCAST_FIXED_RATE_STAMIN 0 -#define QWLAN_HAL_CFG_RMCAST_FIXED_RATE_STAMAX 226 -#define QWLAN_HAL_CFG_RMCAST_FIXED_RATE_STADEF QWLAN_HAL_CFG_FIXED_RATE_24MBPS - -/* QWLAN_HAL_CFG_RETRYRATE_POLICY */ -#define QWLAN_HAL_CFG_RETRYRATE_POLICY_STAMIN 0 -#define QWLAN_HAL_CFG_RETRYRATE_POLICY_STAMAX 255 -#define QWLAN_HAL_CFG_RETRYRATE_POLICY_STADEF 4 -#define QWLAN_HAL_CFG_RETRYRATE_POLICY_MIN_SUPPORTED 0 -#define QWLAN_HAL_CFG_RETRYRATE_POLICY_PRIMARY 1 -#define QWLAN_HAL_CFG_RETRYRATE_POLICY_RESERVED 2 -#define QWLAN_HAL_CFG_RETRYRATE_POLICY_CLOSEST 3 -#define QWLAN_HAL_CFG_RETRYRATE_POLICY_AUTOSELECT 4 -#define QWLAN_HAL_CFG_RETRYRATE_POLICY_MAX 5 - -/* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */ -#define QWLAN_HAL_CFG_RETRYRATE_SECONDARY_STAMIN 0 -#define QWLAN_HAL_CFG_RETRYRATE_SECONDARY_STAMAX 255 -#define QWLAN_HAL_CFG_RETRYRATE_SECONDARY_STADEF 0 - -/* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */ -#define QWLAN_HAL_CFG_RETRYRATE_TERTIARY_STAMIN 0 -#define QWLAN_HAL_CFG_RETRYRATE_TERTIARY_STAMAX 255 -#define QWLAN_HAL_CFG_RETRYRATE_TERTIARY_STADEF 0 - -/* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */ -#define QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION_STAMIN 0 -#define QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION_STAMAX 5 -#define QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION_STADEF 5 -#define QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION_DISABLE 0 -#define QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION_CTS 1 -#define QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION_RTS 2 -#define QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION_DUAL_CTS 3 -#define QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION_RTS_ALWAYS 4 -#define QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION_AUTO 5 - -/* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */ -#define QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ_STAMIN 0 -#define QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ_STAMAX QWLAN_HAL_CFG_FIXED_RATE_STAMAX -#define QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ_STADEF QWLAN_HAL_CFG_FIXED_RATE_1MBPS - -/* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */ -#define QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ_STAMIN 0 -#define QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ_STAMAX QWLAN_HAL_CFG_FIXED_RATE_STAMAX -#define QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ_STADEF QWLAN_HAL_CFG_FIXED_RATE_6MBPS - -/* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */ -#define QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ_STAMIN 0 -#define QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ_STAMAX QWLAN_HAL_CFG_FIXED_RATE_STAMAX -#define QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ_STADEF QWLAN_HAL_CFG_FIXED_RATE_1MBPS - -/* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */ -#define QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ_STAMIN 0 -#define QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ_STAMAX QWLAN_HAL_CFG_FIXED_RATE_STAMAX -#define QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ_STADEF QWLAN_HAL_CFG_FIXED_RATE_6MBPS - -/* QWLAN_HAL_CFG_MAX_BA_SESSIONS */ -#define QWLAN_HAL_CFG_MAX_BA_SESSIONS_STAMIN 0 -#define QWLAN_HAL_CFG_MAX_BA_SESSIONS_STAMAX 64 -#define QWLAN_HAL_CFG_MAX_BA_SESSIONS_STADEF 40 - -/* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */ -#define QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT_STAMIN 1 -#define QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT_STAMAX 255 -#define QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT_STADEF 20 - -/* QWLAN_HAL_CFG_PS_TX_INACTIVITY_TIMEOUT */ -#define QWLAN_HAL_CFG_PS_TX_INACTIVITY_TIMEOUT_STAMIN 0 -#define QWLAN_HAL_CFG_PS_TX_INACTIVITY_TIMEOUT_STAMAX 255 -#define QWLAN_HAL_CFG_PS_TX_INACTIVITY_TIMEOUT_STADEF 300 - -/* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */ -#define QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER_STAMIN 0 -#define QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER_STAMAX 1 -#define QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER_STADEF 1 - -/* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */ -#define QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR_STAMIN 0 -#define QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR_STAMAX 1 -#define QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR_STADEF 1 - -/* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */ -#define QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE_STAMIN 1 -#define QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE_STAMAX 20 -#define QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE_STADEF 20 - -/* QWLAN_HAL_CFG_STATS_PERIOD */ -#define QWLAN_HAL_CFG_STATS_PERIOD_STAMIN 1 -#define QWLAN_HAL_CFG_STATS_PERIOD_STAMAX 10 -#define QWLAN_HAL_CFG_STATS_PERIOD_STADEF 10 - -/* QWLAN_HAL_CFG_CFP_MAX_DURATION */ -#define QWLAN_HAL_CFG_CFP_MAX_DURATION_STAMIN 0 -#define QWLAN_HAL_CFG_CFP_MAX_DURATION_STAMAX 65535 -#define QWLAN_HAL_CFG_CFP_MAX_DURATION_STADEF 30000 - -/* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */ -#define QWLAN_HAL_CFG_FRAME_TRANS_ENABLED_STAMIN 0 -#define QWLAN_HAL_CFG_FRAME_TRANS_ENABLED_STAMAX 1 -#define QWLAN_HAL_CFG_FRAME_TRANS_ENABLED_STADEF 0 - -/* QWLAN_HAL_CFG_DTIM_PERIOD */ -#define QWLAN_HAL_CFG_DTIM_PERIOD_STAMIN 0 -#define QWLAN_HAL_CFG_DTIM_PERIOD_STAMAX 65535 -#define QWLAN_HAL_CFG_DTIM_PERIOD_STADEF 1 - -/* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */ -#define QWLAN_HAL_CFG_BA_THRESHOLD_HIGH_STAMIN 0 -#define QWLAN_HAL_CFG_BA_THRESHOLD_HIGH_STAMAX 65535 -#define QWLAN_HAL_CFG_BA_THRESHOLD_HIGH_STADEF 1 - -/* QWLAN_HAL_CFG_MAX_BA_BUFFERS */ -#define QWLAN_HAL_CFG_MAX_BA_BUFFERS_STAMIN 0 -#define QWLAN_HAL_CFG_MAX_BA_BUFFERS_STAMAX 2560 -#define QWLAN_HAL_CFG_MAX_BA_BUFFERS_STADEF 2560 - - - -/* ACM, AIFSN, [CWmin, CWmax, TxOp]-11A/11B/11G - * Cwmin and Cwmax are two bytes each, MSB first. So Cwmax of [03 FF] is - * equivalent to 0x03ff = 1023*/ -#define QWLAN_HAL_CFG_EDCA_PROFILE_ACM_IDX 0 /* byte[0] */ -#define QWLAN_HAL_CFG_EDCA_PROFILE_AIFSN_IDX 1 /* byte[1] */ -#define QWLAN_HAL_CFG_EDCA_PROFILE_CWMINA_IDX 2 /* byte[2] & byte [3] */ -#define QWLAN_HAL_CFG_EDCA_PROFILE_CWMAXA_IDX 4 /* byte[4] & byte [5] */ -#define QWLAN_HAL_CFG_EDCA_PROFILE_TXOPA_IDX 6 /* byte[6] */ -#define QWLAN_HAL_CFG_EDCA_PROFILE_CWMINB_IDX 7 /* byte[7] & byte [8] */ -#define QWLAN_HAL_CFG_EDCA_PROFILE_CWMAXB_IDX 9 /* byte[9] & byte [10] */ -#define QWLAN_HAL_CFG_EDCA_PROFILE_TXOPB_IDX 11 /* byte[11]*/ -#define QWLAN_HAL_CFG_EDCA_PROFILE_CWMING_IDX 12 /* byte[12] & byte [13] */ -#define QWLAN_HAL_CFG_EDCA_PROFILE_CWMAXG_IDX 14 /* byte[14] & byte [15] */ -#define QWLAN_HAL_CFG_EDCA_PROFILE_TXOPG_IDX 16 /* byte[16]*/ -#define QWLAN_HAL_CFG_EDCA_PARAM_MAX_LEN 20 - -/* QWLAN_HAL_CFG_EDCA_WMM_ACBK */ -#define QWLAN_HAL_CFG_EDCA_WMM_ACBK_DEFAULT "0007000F03FF00001F03FF00000F03FF00" - -/* QWLAN_HAL_CFG_EDCA_WMM_ACBE */ -#define QWLAN_HAL_CFG_EDCA_WMM_ACBE_DEFAULT "0003000F03FF00001F03FF00000F03FF00" - -/* QWLAN_HAL_CFG_EDCA_WMM_ACVI */ -#define QWLAN_HAL_CFG_EDCA_WMM_ACVI_DEFAULT "00020007000F5E000F001FBC0007000F5E" - -/* QWLAN_HAL_CFG_EDCA_WMM_ACVO */ -#define QWLAN_HAL_CFG_EDCA_WMM_ACVO_DEFAULT "0002000300072F0007000F66000300072F" - - -/* QWLAN_HAL_CFG_RPE_POLLING_THRESHOLD */ -#define QWLAN_CFG_RPE_POLLING_THRESHOLD_STAMIN 0 -#define QWLAN_CFG_RPE_POLLING_THRESHOLD_STAMAX 65535 -#define QWLAN_CFG_RPE_POLLING_THRESHOLD_STADEF 30 - -/* QWLAN_HAL_CFG_RPE_AGING_THRESHOLD_FOR_AC0_REG */ -#define QWLAN_CFG_RPE_AGING_THRESHOLD_FOR_AC0_REG_STAMIN 0 -#define QWLAN_CFG_RPE_AGING_THRESHOLD_FOR_AC0_REG_STAMAX 65535 -#define QWLAN_CFG_RPE_AGING_THRESHOLD_FOR_AC0_REG_STADEF 30 - -/* QWLAN_HAL_CFG_RPE_AGING_THRESHOLD_FOR_AC1_REG */ -#define QWLAN_CFG_RPE_AGING_THRESHOLD_FOR_AC1_REG_STAMIN 0 -#define QWLAN_CFG_RPE_AGING_THRESHOLD_FOR_AC1_REG_STAMAX 65535 -#define QWLAN_CFG_RPE_AGING_THRESHOLD_FOR_AC1_REG_STADEF 30 - -/* QWLAN_HAL_CFG_RPE_AGING_THRESHOLD_FOR_AC2_REG */ -#define QWLAN_CFG_RPE_AGING_THRESHOLD_FOR_AC2_REG_STAMIN 0 -#define QWLAN_CFG_RPE_AGING_THRESHOLD_FOR_AC2_REG_STAMAX 65535 -#define QWLAN_CFG_RPE_AGING_THRESHOLD_FOR_AC2_REG_STADEF 30 - -/* QWLAN_HAL_CFG_RPE_AGING_THRESHOLD_FOR_AC3_REG */ -#define QWLAN_CFG_RPE_AGING_THRESHOLD_FOR_AC3_REG_STAMIN 0 -#define QWLAN_CFG_RPE_AGING_THRESHOLD_FOR_AC3_REG_STAMAX 65535 -#define QWLAN_CFG_RPE_AGING_THRESHOLD_FOR_AC3_REG_STADEF 30 - -/* QWLAN_HAL_CFG_NO_OF_ONCHIP_REORDER_SESSIONS */ -#define QWLAN_CFG_NO_OF_ONCHIP_REORDER_SESSIONS_STAMIN 0 -#define QWLAN_CFG_NO_OF_ONCHIP_REORDER_SESSIONS_STAMAX 2 -#define QWLAN_CFG_NO_OF_ONCHIP_REORDER_SESSIONS_STADEF 1 - -#define QWLAN_HAL_CFG_PS_LISTEN_INTERVAL_STAMIN 0 -#define QWLAN_HAL_CFG_PS_LISTEN_INTERVAL_STAMAX 65535 -#define QWLAN_HAL_CFG_PS_LISTEN_INTERVAL_STADEF 1 - -#define QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD_STAMIN 0 -#define QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD_STAMAX 65535 -#define QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD_STADEF 40 - -#define QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER_STAMIN 0 -#define QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER_STAMAX 255 -#define QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER_STADEF 10 - -#define QWLAN_HAL_CFG_PS_MAX_PS_POLL_STAMIN 0 -#define QWLAN_HAL_CFG_PS_MAX_PS_POLL_STAMAX 255 -#define QWLAN_HAL_CFG_PS_MAX_PS_POLL_STADEF 0 - -#define QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD_STAMIN 0 -#define QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD_STAMAX 10 -#define QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD_STADEF 10 - -#define QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD_STAMIN 0 -#define QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD_STAMAX 255 -#define QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD_STADEF 20 - -#define QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE_STAMIN 0 -#define QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE_STAMAX 1 -#define QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE_STADEF 0 - -#define QWLAN_HAL_CFG_PS_IGNORE_DTIM_STAMIN 0 -#define QWLAN_HAL_CFG_PS_IGNORE_DTIM_STAMAX 1 -#define QWLAN_HAL_CFG_PS_IGNORE_DTIM_STADEF 0 - -#define QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM_STAMIN 0 -#define QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM_STAMAX 1 -#define QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM_STADEF 0 - -#define QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE_STAMIN 0 -#define QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE_STAMAX 255 -#define QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE_STADEF 0 - -#define QWLAN_HAL_CFG_PS_NULLDATA_AP_RESP_TIMEOUT_STAMIN 0 -#define QWLAN_HAL_CFG_PS_NULLDATA_AP_RESP_TIMEOUT_STAMAX 80 -#define QWLAN_HAL_CFG_PS_NULLDATA_AP_RESP_TIMEOUT_STADEF 0 - -/* QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE */ -#define QWLAN_CFG_TX_PWR_CTRL_ENABLE_STAMIN 0 -#define QWLAN_CFG_TX_PWR_CTRL_ENABLE_STAMAX 1 -#define QWLAN_CFG_TX_PWR_CTRL_ENABLE_STADEF 1 - -#define QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN_STAMIN 0 -#define QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN_STAMAX 1 -#define QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN_STADEF 0 - -#define QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_STAMIN 0 -#define QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_STAMAX 7 -#define QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_STADEF 3 - -#define QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS_STAMIN 5 -#define QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS_STAMAX 255 -#define QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS_STADEF 10 - -#define QWLAN_HAL_CFG_TELE_BCN_MAX_LI_STAMIN 0 -#define QWLAN_HAL_CFG_TELE_BCN_MAX_LI_STAMAX 7 -#define QWLAN_HAL_CFG_TELE_BCN_MAX_LI_STADEF 5 - -#define QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS_STAMIN 5 -#define QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS_STAMAX 255 -#define QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS_STADEF 15 - -#define QWLAN_HAL_CFG_MCAST_BCAST_FILTER_SETTING_STAMIN 0 -#define QWLAN_HAL_CFG_MCAST_BCAST_FILTER_SETTING_STAMAX 3 -#define QWLAN_HAL_CFG_MCAST_BCAST_FILTER_SETTING_STADEF 0 - -#define QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL_STAMIN 1 -#define QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL_STAMAX 255 -#define QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL_STADEF 5 - -/*Values to be added in hexadecimal*/ -/* QWLAN_HAL_CFG_VALID_RADAR_LIST */ -#define QWLAN_HAL_CFG_VALID_RADAR_CHANNEL_LIST_DEFAULT "36" -#define QWLAN_HAL_CFG_RADAR_CHANNEL_LIST_LEN 20 - -/* QWLAN_HAL_CFG_TX_POWER_24_20 */ -#define QWLAN_WLAN_TX_POWER_24_20_DEFAULT 299 -#define QWLAN_WLAN_TX_POWER_24_20_MIN 299 -#define QWLAN_WLAN_TX_POWER_24_20_MAX 299 - -/* QWLAN_HAL_CFG_TX_POWER_24_40 */ -#define QWLAN_WLAN_TX_POWER_24_40_DEFAULT 300 -#define QWLAN_WLAN_TX_POWER_24_40_MIN 299 -#define QWLAN_WLAN_TX_POWER_24_40_MAX 299 - -/* QWLAN_HAL_CFG_TX_POWER_50_20 */ -#define QWLAN_WLAN_TX_POWER_50_20_DEFAULT 301 -#define QWLAN_WLAN_TX_POWER_50_20_MIN 299 -#define QWLAN_WLAN_TX_POWER_50_20_MAX 299 - -/* QWLAN_HAL_CFG_TX_POWER_50_40 */ -#define QWLAN_WLAN_TX_POWER_50_40_DEFAULT 302 -#define QWLAN_WLAN_TX_POWER_50_40_MIN 299 -#define QWLAN_WLAN_TX_POWER_50_40_MAX 299 - -/* QCOM_WLAN_CFG_MAX_TX_POWER_2_4 */ -#define QCOM_WLAN_CFG_MAX_TX_POWER_2_4_LEN 128 -/* byte[0] = 0x01 = First Channel; byte[1] = 0x0E = 14 = MaxChannels; byte[2] = 0x14 = 20 = Tx Power (dBm) */ -#define QCOM_WLAN_CFG_MAX_TX_POWER_2_4_DEFAULT "010E14" - -/* QCOM_WLAN_CFG_MAX_TX_POWER_5 */ -#define QCOM_WLAN_CFG_MAX_TX_POWER_5_LEN 128 -/* byte[0] = 0x24 = 36 = First Channel; byte[1] = 0x82 = 130 = MaxChannels; byte[2] = 0x14 = 20 = Tx Power (dBm) */ -#define QCOM_WLAN_CFG_MAX_TX_POWER_5_DEFAULT "248214" - - -#define QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD_STAMIN 0 -#define QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD_STAMAX 65535 -#define QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD_STADEF 0 - -#define QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP_MIN 0 -#define QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP_MAX 1 -#define QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP_DEF 0 - -/* QWLAN_HAL_CFG_BTC_EXECUTION_MODE */ -#define QWLAN_HAL_CFG_BTC_EXECUTION_MODE_MIN 0 -#define QWLAN_HAL_CFG_BTC_EXECUTION_MODE_MAX 5 -#define QWLAN_HAL_CFG_BTC_EXECUTION_MODE_DEF 0 - -/* QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */ -#define QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK_MIN 0 -#define QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK_MAX 255 -#define QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK_DEF 0 - -/* QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */ -#define QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS_MIN 0 -#define QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS_MAX 255 -#define QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS_DEF 15 - -/* QWLAN_HAL_CFG_WCNSS_API_VERSION */ -#define QWLAN_HAL_CFG_WCNSS_API_VERSION_MIN 0 /* equivalent to 0.0.0.0 */ -#define QWLAN_HAL_CFG_WCNSS_API_VERSION_MAX 4294967295U /* equivalent to 255.255.255.255 */ -#define QWLAN_HAL_CFG_WCNSS_API_VERSION_DEF 0 /* equivalent to 0.0.0.0 */ - -/* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */ -#define QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT_MIN 1 -#define QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT_MAX 255 -#define QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT_DEF 20 - -/* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */ -#define QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT_MIN 1 -#define QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT_MAX 255 -#define QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT_DEF 20 - -/* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */ -#define QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST_MIN 0 -#define QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST_MAX 1 -#define QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST_DEF 0 - -/* QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */ -#define QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT_MIN 5000 -#define QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT_MAX 500000 -#define QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT_DEF 120000 - -/* QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */ -#define QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT_MIN 5000 -#define QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT_MAX 500000 -#define QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT_DEF 10000 - -/* QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */ -#define QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT_MIN 5000 -#define QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT_MAX 500000 -#define QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT_DEF 10000 - -/* QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */ -#define QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT_MIN 5000 -#define QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT_MAX 500000 -#define QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT_DEF 10000 - -/* QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */ -#define QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN_MIN 0 -#define QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN_MAX 500000 -#define QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN_DEF 30000 - -/* QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */ -#define QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN_MIN 0 -#define QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN_MAX 500000 -#define QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN_DEF 0 - -/* QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */ -#define QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN_MIN 0 -#define QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN_MAX 500000 -#define QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN_DEF 0 - -/* QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */ -#define QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN_MIN 0 -#define QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN_MAX 500000 -#define QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN_DEF 0 - -/* QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */ -#define QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT_MIN 25000 -#define QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT_MAX 500000 -#define QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT_DEF 250000 - -/* QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */ -#define QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN_MIN 15000 -#define QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN_MAX 500000 -#define QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN_DEF 45000 - -/* QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */ -#define QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC_MIN 0 -#define QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC_MAX 100 -#define QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC_DEF 1 - -/* QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */ -#define QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP_MIN 0 -#define QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP_MAX 1 -#define QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP_DEF 1 - -/* QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */ -#define QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO_MIN 0 -#define QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO_MAX 1 -#define QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO_DEF 0 - -/* QWLAN_HAL_CFG_ENABLE_UNICAST_FILTER */ -#define QWLAN_HAL_CFG_ENABLE_UNICAST_FILTER_MIN 0 -#define QWLAN_HAL_CFG_ENABLE_UNICAST_FILTER_MAX 1 -#define QWLAN_HAL_CFG_ENABLE_UNICAST_FILTER_DEF 0 - -/* QWLAN_HAL_CFG_MAX_ASSOC_LIMIT */ -#define QWLAN_HAL_CFG_MAX_ASSOC_LIMIT_MIN 10 -#define QWLAN_HAL_CFG_MAX_ASSOC_LIMIT_MAX 32 -#define QWLAN_HAL_CFG_MAX_ASSOC_LIMIT_DEF 10 - -/* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */ -#define QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION_MIN 0 -#define QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION_MAX 1 -#define QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION_DEF 0 - -/* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */ -#define QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER_MIN 0 -#define QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER_MAX 1 -#define QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER_DEF 0 - -/* QWLAN_HAL_CFG_ENABLE_DETECT_PS_SUPPORT */ -#define QWLAN_HAL_CFG_ENABLE_DETECT_PS_SUPPORT_MIN 0 -#define QWLAN_HAL_CFG_ENABLE_DETECT_PS_SUPPORT_MAX 1 -#define QWLAN_HAL_CFG_ENABLE_DETECT_PS_SUPPORT_DEF 0 - -/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */ -#define QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT_MIN 3 -#define QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT_MAX 30 -#define QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT_DEF 10 - -/* QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT */ -#define QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT_MIN 3 -#define QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT_MAX 30 -#define QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT_DEF 10 - -/*QWLAN_HAL_CFG_BTC_DWELL_TIME_MULTIPLIER*/ -/*This value is multiplied to ChannelDwellTime - *i.e If value is 300 then ChannelDwellTime is (3*ChannelDwelltime)*/ -#define QWLAN_HAL_CFG_BTC_DWELL_TIME_MULTIPLIER_MIN 0 -#define QWLAN_HAL_CFG_BTC_DWELL_TIME_MULTIPLIER_MAX 300 -#define QWLAN_HAL_CFG_BTC_DWELL_TIME_MULTIPLIER_DEF 300 - -/* QWLAN_HAL_CFG_ENABLE_TDLS_OXYGEN_MODE */ -#define QWLAN_HAL_CFG_ENABLE_TDLS_OXYGEN_MODE_MIN 0 -#define QWLAN_HAL_CFG_ENABLE_TDLS_OXYGEN_MODE_MAX 1 -#define QWLAN_HAL_CFG_ENABLE_TDLS_OXYGEN_MODE_DEF 0 - -/* QWLAN_HAL_CFG_ENABLE_NAT_KEEP_ALIVE_FILTER */ -#define QWLAN_HAL_CFG_ENABLE_NAT_KEEP_ALIVE_FILTER_MIN 0 -#define QWLAN_HAL_CFG_ENABLE_NAT_KEEP_ALIVE_FILTER_MAX 1 -#define QWLAN_HAL_CFG_ENABLE_NAT_KEEP_ALIVE_FILTER_DEF 0 - -/* QWLAN_HAL_CFG_ENABLE_SAP_OBSS_PROT */ -#define QWLAN_HAL_CFG_ENABLE_SAP_OBSS_PROT_MIN 0 -#define QWLAN_HAL_CFG_ENABLE_SAP_OBSS_PROT_MAX 1 -#define QWLAN_HAL_CFG_ENABLE_SAP_OBSS_PROT_DEF 0 - -/* QWLAN_HAL_CFG_PSPOLL_DATA_RECEP_TIMEOUT */ -#define QWLAN_HAL_CFG_PSPOLL_DATA_RECEP_TIMEOUT_STAMIN 1 -#define QWLAN_HAL_CFG_PSPOLL_DATA_RECEP_TIMEOUT_STAMAX 255 -#define QWLAN_HAL_CFG_PSPOLL_DATA_RECEP_TIMEOUT_STADEF 20 - -/* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */ -#define QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE_MIN 0 -#define QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE_MAX 1 -#define QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE_DEF 0 - -/* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */ -#define QWLAN_HAL_CFG_TDLS_PUAPSD_MASK_MIN 0 -#define QWLAN_HAL_CFG_TDLS_PUAPSD_MASK_MAX 0xf -#define QWLAN_HAL_CFG_TDLS_PUAPSD_MASK_DEF 0 - -/* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */ -#define QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME_MIN 0 -#define QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME_MAX 10 -#define QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME_DEF 0 - -/* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */ -#define QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP_MIN 10 -#define QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP_MAX 20 -#define QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP_DEF 10 - -#define QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN_MIN 0 -#define QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN_MAX 250000 -#define QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN_DEF 60000 - -#define QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN_MIN 0 -#define QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN_MAX 250000 -#define QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN_DEF 90000 - -#define QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN_MIN 0 -#define QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN_MAX 250000 -#define QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN_DEF 60000 - -#define QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN_MIN 0 -#define QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN_MAX 250000 -#define QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN_DEF 90000 - -/* QWLAN_HAL_CFG_ANTENNA_DIVERSITY */ -#define QWLAN_HAL_CFG_ANTENNA_DIVERSITY_DEF 0 -#define QWLAN_HAL_CFG_ANTENNA_DIVERSITY_MIN 0 -#define QWLAN_HAL_CFG_ANTENNA_DIVERSITY_MAX 3 - -#define QWLAN_HAL_CFG_ATH_DEF 0 -#define QWLAN_HAL_CFG_ATH_MIN 0 -#define QWLAN_HAL_CFG_ATH_MAX 1 - -/* QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR */ -#define QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR_DEF 0 -#define QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR_MIN 0 -#define QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR_MAX 9 - -/* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_RX_DRAIN_FEATURE */ -#define QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE_MIN 0 -#define QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE_MAX 1 -#define QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE_DEF 1 - -/* QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE */ -#define QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE_MIN 0 -#define QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE_MAX 1 -#define QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE_DEF 0 - -/* QWLAN_HAL_CFG_MWS_COEX_XXXX */ -#define QWLAN_HAL_CFG_MWS_COEX_DEF 0 -#define QWLAN_HAL_CFG_MWS_COEX_MIN 0 -#define QWLAN_HAL_CFG_MWS_COEX_MAX 0xFFFFFFFF -#define QWLAN_HAL_CFG_MWS_COEX_MAX_VICTIM 10 -#define QWLAN_HAL_CFG_MWS_COEX_MAX_CONFIG 6 - -/* QWLAN_HAL_CFG_SAR_POWER_BACKOFF */ -#define QWLAN_HAL_CFG_SAR_POWER_BACKOFF_DEF 13 -#define QWLAN_HAL_CFG_SAR_POWER_BACKOFF_MIN 1 -#define QWLAN_HAL_CFG_SAR_POWER_BACKOFF_MAX 21 - -#endif //__WLAN_HAL_CFG_H__ - - diff --git a/riva/inc/wlan_hal_msg.h b/riva/inc/wlan_hal_msg.h deleted file mode 100644 index 81633c43de5b..000000000000 --- a/riva/inc/wlan_hal_msg.h +++ /dev/null @@ -1,7062 +0,0 @@ -/* -* Copyright (c) 2012-2013 Qualcomm Atheros, Inc. -* All Rights Reserved. -* Qualcomm Atheros Confidential and Proprietary. -*/ - -/*========================================================================== - * - * @file: wlan_hal_msg.h - * - * @brief: Exports and types for messages sent to HAL from WDI - * - * @author: Kumar Anand - * - * Copyright (C) 2010, Qualcomm Technologies, Inc. - * All rights reserved. - * - *=========================================================================*/ - -#ifndef _WLAN_HAL_MSG_H_ -#define _WLAN_HAL_MSG_H_ - -#include "halLegacyPalTypes.h" -#include "halCompiler.h" -#include "wlan_qct_dev_defs.h" -#include "wlan_nv.h" - -/*--------------------------------------------------------------------------- - API VERSIONING INFORMATION - - The RIVA API is versioned as MAJOR.MINOR.VERSION.REVISION - The MAJOR is incremented for major product/architecture changes - (and then MINOR/VERSION/REVISION are zeroed) - The MINOR is incremented for minor product/architecture changes - (and then VERSION/REVISION are zeroed) - The VERSION is incremented if a significant API change occurs - (and then REVISION is zeroed) - The REVISION is incremented if an insignificant API change occurs - or if a new API is added - All values are in the range 0..255 (ie they are 8-bit values) - ---------------------------------------------------------------------------*/ -#define WLAN_HAL_VER_MAJOR 1 -#define WLAN_HAL_VER_MINOR 5 -#define WLAN_HAL_VER_VERSION 1 -#define WLAN_HAL_VER_REVISION 2 - -/*--------------------------------------------------------------------------- - Commom Type definitons - ---------------------------------------------------------------------------*/ - -//This is to force compiler to use the maximum of an int ( 4 bytes ) -#define WLAN_HAL_MAX_ENUM_SIZE 0x7FFFFFFF -#define WLAN_HAL_MSG_TYPE_MAX_ENUM_SIZE 0x7FFF - -//Max no. of transmit categories -#define STACFG_MAX_TC 8 - -//The maximum value of access category -#define WLAN_HAL_MAX_AC 4 - -typedef tANI_U8 tSirMacAddr[6]; -typedef tANI_U8 tHalIpv4Addr[4]; - -#define HAL_MAC_ADDR_LEN 6 -#define HAL_IPV4_ADDR_LEN 4 - -#define WALN_HAL_STA_INVALID_IDX 0xFF -#define WLAN_HAL_BSS_INVALID_IDX 0xFF - -//Default Beacon template size -#define BEACON_TEMPLATE_SIZE 0x180 - - -//Max Tx Data Rate samples -#define MAX_TX_RATE_SAMPLES 10 -//Max Beacon Rssi samples -#define MAX_BCN_RSSI_SAMPLES 10 - -//Param Change Bitmap sent to HAL -#define PARAM_BCN_INTERVAL_CHANGED (1 << 0) -#define PARAM_SHORT_PREAMBLE_CHANGED (1 << 1) -#define PARAM_SHORT_SLOT_TIME_CHANGED (1 << 2) -#define PARAM_llACOEXIST_CHANGED (1 << 3) -#define PARAM_llBCOEXIST_CHANGED (1 << 4) -#define PARAM_llGCOEXIST_CHANGED (1 << 5) -#define PARAM_HT20MHZCOEXIST_CHANGED (1<<6) -#define PARAM_NON_GF_DEVICES_PRESENT_CHANGED (1<<7) -#define PARAM_RIFS_MODE_CHANGED (1<<8) -#define PARAM_LSIG_TXOP_FULL_SUPPORT_CHANGED (1<<9) -#define PARAM_OBSS_MODE_CHANGED (1<<10) -#define PARAM_BEACON_UPDATE_MASK (PARAM_BCN_INTERVAL_CHANGED|PARAM_SHORT_PREAMBLE_CHANGED|PARAM_SHORT_SLOT_TIME_CHANGED|PARAM_llACOEXIST_CHANGED |PARAM_llBCOEXIST_CHANGED|\ - PARAM_llGCOEXIST_CHANGED|PARAM_HT20MHZCOEXIST_CHANGED|PARAM_NON_GF_DEVICES_PRESENT_CHANGED|PARAM_RIFS_MODE_CHANGED|PARAM_LSIG_TXOP_FULL_SUPPORT_CHANGED| PARAM_OBSS_MODE_CHANGED) - -/*Dump command response Buffer size*/ -#define DUMPCMD_RSP_BUFFER 500 - -/*Version string max length (including NUL) */ -#define WLAN_HAL_VERSION_LENGTH 64 - -#define WLAN_HAL_ROAM_SCAN_MAX_PROBE_SIZE 450 -#define WLAN_HAL_ROAM_SCAN_MAX_CHANNELS NUM_RF_CHANNELS -#define WLAN_HAL_ROAM_SCAN_RESERVED_BYTES 57 - -/* Message types for messages exchanged between WDI and HAL */ -typedef enum -{ - //Init/De-Init - WLAN_HAL_START_REQ = 0, - WLAN_HAL_START_RSP = 1, - WLAN_HAL_STOP_REQ = 2, - WLAN_HAL_STOP_RSP = 3, - - //Scan - WLAN_HAL_INIT_SCAN_REQ = 4, - WLAN_HAL_INIT_SCAN_RSP = 5, - WLAN_HAL_START_SCAN_REQ = 6, - WLAN_HAL_START_SCAN_RSP = 7 , - WLAN_HAL_END_SCAN_REQ = 8, - WLAN_HAL_END_SCAN_RSP = 9, - WLAN_HAL_FINISH_SCAN_REQ = 10, - WLAN_HAL_FINISH_SCAN_RSP = 11, - - // HW STA configuration/deconfiguration - WLAN_HAL_CONFIG_STA_REQ = 12, - WLAN_HAL_CONFIG_STA_RSP = 13, - WLAN_HAL_DELETE_STA_REQ = 14, - WLAN_HAL_DELETE_STA_RSP = 15, - WLAN_HAL_CONFIG_BSS_REQ = 16, - WLAN_HAL_CONFIG_BSS_RSP = 17, - WLAN_HAL_DELETE_BSS_REQ = 18, - WLAN_HAL_DELETE_BSS_RSP = 19, - - //Infra STA asscoiation - WLAN_HAL_JOIN_REQ = 20, - WLAN_HAL_JOIN_RSP = 21, - WLAN_HAL_POST_ASSOC_REQ = 22, - WLAN_HAL_POST_ASSOC_RSP = 23, - - //Security - WLAN_HAL_SET_BSSKEY_REQ = 24, - WLAN_HAL_SET_BSSKEY_RSP = 25, - WLAN_HAL_SET_STAKEY_REQ = 26, - WLAN_HAL_SET_STAKEY_RSP = 27, - WLAN_HAL_RMV_BSSKEY_REQ = 28, - WLAN_HAL_RMV_BSSKEY_RSP = 29, - WLAN_HAL_RMV_STAKEY_REQ = 30, - WLAN_HAL_RMV_STAKEY_RSP = 31, - - //Qos Related - WLAN_HAL_ADD_TS_REQ = 32, - WLAN_HAL_ADD_TS_RSP = 33, - WLAN_HAL_DEL_TS_REQ = 34, - WLAN_HAL_DEL_TS_RSP = 35, - WLAN_HAL_UPD_EDCA_PARAMS_REQ = 36, - WLAN_HAL_UPD_EDCA_PARAMS_RSP = 37, - WLAN_HAL_ADD_BA_REQ = 38, - WLAN_HAL_ADD_BA_RSP = 39, - WLAN_HAL_DEL_BA_REQ = 40, - WLAN_HAL_DEL_BA_RSP = 41, - - WLAN_HAL_CH_SWITCH_REQ = 42, - WLAN_HAL_CH_SWITCH_RSP = 43, - WLAN_HAL_SET_LINK_ST_REQ = 44, - WLAN_HAL_SET_LINK_ST_RSP = 45, - WLAN_HAL_GET_STATS_REQ = 46, - WLAN_HAL_GET_STATS_RSP = 47, - WLAN_HAL_UPDATE_CFG_REQ = 48, - WLAN_HAL_UPDATE_CFG_RSP = 49, - - WLAN_HAL_MISSED_BEACON_IND = 50, - WLAN_HAL_UNKNOWN_ADDR2_FRAME_RX_IND = 51, - WLAN_HAL_MIC_FAILURE_IND = 52, - WLAN_HAL_FATAL_ERROR_IND = 53, - WLAN_HAL_SET_KEYDONE_MSG = 54, - - //NV Interface - WLAN_HAL_DOWNLOAD_NV_REQ = 55, - WLAN_HAL_DOWNLOAD_NV_RSP = 56, - - WLAN_HAL_ADD_BA_SESSION_REQ = 57, - WLAN_HAL_ADD_BA_SESSION_RSP = 58, - WLAN_HAL_TRIGGER_BA_REQ = 59, - WLAN_HAL_TRIGGER_BA_RSP = 60, - WLAN_HAL_UPDATE_BEACON_REQ = 61, - WLAN_HAL_UPDATE_BEACON_RSP = 62, - WLAN_HAL_SEND_BEACON_REQ = 63, - WLAN_HAL_SEND_BEACON_RSP = 64, - - WLAN_HAL_SET_BCASTKEY_REQ = 65, - WLAN_HAL_SET_BCASTKEY_RSP = 66, - WLAN_HAL_DELETE_STA_CONTEXT_IND = 67, - WLAN_HAL_UPDATE_PROBE_RSP_TEMPLATE_REQ = 68, - WLAN_HAL_UPDATE_PROBE_RSP_TEMPLATE_RSP = 69, - - // PTT interface support - WLAN_HAL_PROCESS_PTT_REQ = 70, - WLAN_HAL_PROCESS_PTT_RSP = 71, - - // BTAMP related events - WLAN_HAL_SIGNAL_BTAMP_EVENT_REQ = 72, - WLAN_HAL_SIGNAL_BTAMP_EVENT_RSP = 73, - WLAN_HAL_TL_HAL_FLUSH_AC_REQ = 74, - WLAN_HAL_TL_HAL_FLUSH_AC_RSP = 75, - - WLAN_HAL_ENTER_IMPS_REQ = 76, - WLAN_HAL_EXIT_IMPS_REQ = 77, - WLAN_HAL_ENTER_BMPS_REQ = 78, - WLAN_HAL_EXIT_BMPS_REQ = 79, - WLAN_HAL_ENTER_UAPSD_REQ = 80, - WLAN_HAL_EXIT_UAPSD_REQ = 81, - WLAN_HAL_UPDATE_UAPSD_PARAM_REQ = 82, - WLAN_HAL_CONFIGURE_RXP_FILTER_REQ = 83, - WLAN_HAL_ADD_BCN_FILTER_REQ = 84, - WLAN_HAL_REM_BCN_FILTER_REQ = 85, - WLAN_HAL_ADD_WOWL_BCAST_PTRN = 86, - WLAN_HAL_DEL_WOWL_BCAST_PTRN = 87, - WLAN_HAL_ENTER_WOWL_REQ = 88, - WLAN_HAL_EXIT_WOWL_REQ = 89, - WLAN_HAL_HOST_OFFLOAD_REQ = 90, - WLAN_HAL_SET_RSSI_THRESH_REQ = 91, - WLAN_HAL_GET_RSSI_REQ = 92, - WLAN_HAL_SET_UAPSD_AC_PARAMS_REQ = 93, - WLAN_HAL_CONFIGURE_APPS_CPU_WAKEUP_STATE_REQ = 94, - - WLAN_HAL_ENTER_IMPS_RSP = 95, - WLAN_HAL_EXIT_IMPS_RSP = 96, - WLAN_HAL_ENTER_BMPS_RSP = 97, - WLAN_HAL_EXIT_BMPS_RSP = 98, - WLAN_HAL_ENTER_UAPSD_RSP = 99, - WLAN_HAL_EXIT_UAPSD_RSP = 100, - WLAN_HAL_SET_UAPSD_AC_PARAMS_RSP = 101, - WLAN_HAL_UPDATE_UAPSD_PARAM_RSP = 102, - WLAN_HAL_CONFIGURE_RXP_FILTER_RSP = 103, - WLAN_HAL_ADD_BCN_FILTER_RSP = 104, - WLAN_HAL_REM_BCN_FILTER_RSP = 105, - WLAN_HAL_SET_RSSI_THRESH_RSP = 106, - WLAN_HAL_HOST_OFFLOAD_RSP = 107, - WLAN_HAL_ADD_WOWL_BCAST_PTRN_RSP = 108, - WLAN_HAL_DEL_WOWL_BCAST_PTRN_RSP = 109, - WLAN_HAL_ENTER_WOWL_RSP = 110, - WLAN_HAL_EXIT_WOWL_RSP = 111, - WLAN_HAL_RSSI_NOTIFICATION_IND = 112, - WLAN_HAL_GET_RSSI_RSP = 113, - WLAN_HAL_CONFIGURE_APPS_CPU_WAKEUP_STATE_RSP = 114, - - //11k related events - WLAN_HAL_SET_MAX_TX_POWER_REQ = 115, - WLAN_HAL_SET_MAX_TX_POWER_RSP = 116, - - //11R related msgs - WLAN_HAL_AGGR_ADD_TS_REQ = 117, - WLAN_HAL_AGGR_ADD_TS_RSP = 118, - - //P2P WLAN_FEATURE_P2P - WLAN_HAL_SET_P2P_GONOA_REQ = 119, - WLAN_HAL_SET_P2P_GONOA_RSP = 120, - - //WLAN Dump commands - WLAN_HAL_DUMP_COMMAND_REQ = 121, - WLAN_HAL_DUMP_COMMAND_RSP = 122, - - //OEM_DATA FEATURE SUPPORT - WLAN_HAL_START_OEM_DATA_REQ = 123, - WLAN_HAL_START_OEM_DATA_RSP = 124, - - //ADD SELF STA REQ and RSP - WLAN_HAL_ADD_STA_SELF_REQ = 125, - WLAN_HAL_ADD_STA_SELF_RSP = 126, - - //DEL SELF STA SUPPORT - WLAN_HAL_DEL_STA_SELF_REQ = 127, - WLAN_HAL_DEL_STA_SELF_RSP = 128, - - // Coex Indication - WLAN_HAL_COEX_IND = 129, - - // Tx Complete Indication - WLAN_HAL_OTA_TX_COMPL_IND = 130, - - //Host Suspend/resume messages - WLAN_HAL_HOST_SUSPEND_IND = 131, - WLAN_HAL_HOST_RESUME_REQ = 132, - WLAN_HAL_HOST_RESUME_RSP = 133, - - WLAN_HAL_SET_TX_POWER_REQ = 134, - WLAN_HAL_SET_TX_POWER_RSP = 135, - WLAN_HAL_GET_TX_POWER_REQ = 136, - WLAN_HAL_GET_TX_POWER_RSP = 137, - - WLAN_HAL_P2P_NOA_ATTR_IND = 138, - - WLAN_HAL_ENABLE_RADAR_DETECT_REQ = 139, - WLAN_HAL_ENABLE_RADAR_DETECT_RSP = 140, - WLAN_HAL_GET_TPC_REPORT_REQ = 141, - WLAN_HAL_GET_TPC_REPORT_RSP = 142, - WLAN_HAL_RADAR_DETECT_IND = 143, - WLAN_HAL_RADAR_DETECT_INTR_IND = 144, - WLAN_HAL_KEEP_ALIVE_REQ = 145, - WLAN_HAL_KEEP_ALIVE_RSP = 146, - - /*PNO messages*/ - WLAN_HAL_SET_PREF_NETWORK_REQ = 147, - WLAN_HAL_SET_PREF_NETWORK_RSP = 148, - WLAN_HAL_SET_RSSI_FILTER_REQ = 149, - WLAN_HAL_SET_RSSI_FILTER_RSP = 150, - WLAN_HAL_UPDATE_SCAN_PARAM_REQ = 151, - WLAN_HAL_UPDATE_SCAN_PARAM_RSP = 152, - WLAN_HAL_PREF_NETW_FOUND_IND = 153, - - WLAN_HAL_SET_TX_PER_TRACKING_REQ = 154, - WLAN_HAL_SET_TX_PER_TRACKING_RSP = 155, - WLAN_HAL_TX_PER_HIT_IND = 156, - - WLAN_HAL_8023_MULTICAST_LIST_REQ = 157, - WLAN_HAL_8023_MULTICAST_LIST_RSP = 158, - - WLAN_HAL_SET_PACKET_FILTER_REQ = 159, - WLAN_HAL_SET_PACKET_FILTER_RSP = 160, - WLAN_HAL_PACKET_FILTER_MATCH_COUNT_REQ = 161, - WLAN_HAL_PACKET_FILTER_MATCH_COUNT_RSP = 162, - WLAN_HAL_CLEAR_PACKET_FILTER_REQ = 163, - WLAN_HAL_CLEAR_PACKET_FILTER_RSP = 164, - /*This is temp fix. Should be removed once - * Host and Riva code is in sync*/ - WLAN_HAL_INIT_SCAN_CON_REQ = 165, - - WLAN_HAL_SET_POWER_PARAMS_REQ = 166, - WLAN_HAL_SET_POWER_PARAMS_RSP = 167, - - WLAN_HAL_TSM_STATS_REQ = 168, - WLAN_HAL_TSM_STATS_RSP = 169, - - // wake reason indication (WOW) - WLAN_HAL_WAKE_REASON_IND = 170, - // GTK offload support - WLAN_HAL_GTK_OFFLOAD_REQ = 171, - WLAN_HAL_GTK_OFFLOAD_RSP = 172, - WLAN_HAL_GTK_OFFLOAD_GETINFO_REQ = 173, - WLAN_HAL_GTK_OFFLOAD_GETINFO_RSP = 174, - - WLAN_HAL_FEATURE_CAPS_EXCHANGE_REQ = 175, - WLAN_HAL_FEATURE_CAPS_EXCHANGE_RSP = 176, - WLAN_HAL_EXCLUDE_UNENCRYPTED_IND = 177, - - WLAN_HAL_SET_THERMAL_MITIGATION_REQ = 178, - WLAN_HAL_SET_THERMAL_MITIGATION_RSP = 179, - - WLAN_HAL_UPDATE_VHT_OP_MODE_REQ = 182, - WLAN_HAL_UPDATE_VHT_OP_MODE_RSP = 183, - - WLAN_HAL_P2P_NOA_START_IND = 184, - - WLAN_HAL_GET_ROAM_RSSI_REQ = 185, - WLAN_HAL_GET_ROAM_RSSI_RSP = 186, - - WLAN_HAL_CLASS_B_STATS_IND = 187, - WLAN_HAL_DEL_BA_IND = 188, - WLAN_HAL_DHCP_START_IND = 189, - WLAN_HAL_DHCP_STOP_IND = 190, - WLAN_ROAM_SCAN_OFFLOAD_REQ = 191, - WLAN_ROAM_SCAN_OFFLOAD_RSP = 192, - WLAN_HAL_WIFI_PROXIMITY_REQ = 193, - WLAN_HAL_WIFI_PROXIMITY_RSP = 194, - - WLAN_HAL_START_SPECULATIVE_PS_POLLS_REQ = 195, - WLAN_HAL_START_SPECULATIVE_PS_POLLS_RSP = 196, - WLAN_HAL_STOP_SPECULATIVE_PS_POLLS_IND = 197, - - WLAN_HAL_TDLS_LINK_ESTABLISHED_REQ = 198, - WLAN_HAL_TDLS_LINK_ESTABLISHED_RSP = 199, - WLAN_HAL_TDLS_LINK_TEARDOWN_REQ = 200, - WLAN_HAL_TDLS_LINK_TEARDOWN_RSP = 201, - WLAN_HAL_TDLS_IND = 202, - WLAN_HAL_IBSS_PEER_INACTIVITY_IND = 203, - - /* Scan Offload APIs */ - WLAN_HAL_START_SCAN_OFFLOAD_REQ = 204, - WLAN_HAL_START_SCAN_OFFLOAD_RSP = 205, - WLAN_HAL_STOP_SCAN_OFFLOAD_REQ = 206, - WLAN_HAL_STOP_SCAN_OFFLOAD_RSP = 207, - WLAN_HAL_UPDATE_CHANNEL_LIST_REQ = 208, - WLAN_HAL_UPDATE_CHANNEL_LIST_RSP = 209, - WLAN_HAL_OFFLOAD_SCAN_EVENT_IND = 210, - - /* APIs to offload TCP/UDP Heartbeat handshakes */ - WLAN_HAL_LPHB_CFG_REQ = 211, - WLAN_HAL_LPHB_CFG_RSP = 212, - WLAN_HAL_LPHB_IND = 213, - - WLAN_HAL_ADD_PERIODIC_TX_PTRN_IND = 214, - WLAN_HAL_DEL_PERIODIC_TX_PTRN_IND = 215, - WLAN_HAL_PERIODIC_TX_PTRN_FW_IND = 216, - - // Events to set Per-Band Tx Power Limit - WLAN_HAL_SET_MAX_TX_POWER_PER_BAND_REQ = 217, - WLAN_HAL_SET_MAX_TX_POWER_PER_BAND_RSP = 218, - - /* Reliable Multicast using Leader Based Protocol */ - WLAN_HAL_LBP_LEADER_REQ = 219, - WLAN_HAL_LBP_LEADER_RSP = 220, - WLAN_HAL_LBP_UPDATE_IND = 221, - - /* Batchscan */ - WLAN_HAL_BATCHSCAN_SET_REQ = 222, - WLAN_HAL_BATCHSCAN_SET_RSP = 223, - WLAN_HAL_BATCHSCAN_TRIGGER_RESULT_IND = 224, - WLAN_HAL_BATCHSCAN_RESULT_IND = 225, - WLAN_HAL_BATCHSCAN_STOP_IND = 226, - - WLAN_HAL_GET_IBSS_PEER_INFO_REQ = 227, - WLAN_HAL_GET_IBSS_PEER_INFO_RSP = 228, - - WLAN_HAL_RATE_UPDATE_IND = 229, - - /* Tx Fail for weak link notification */ - WLAN_HAL_TX_FAIL_MONITOR_IND = 230, - WLAN_HAL_TX_FAIL_IND = 231, - - /* Multi-hop IP routing offload */ - WLAN_HAL_IP_FORWARD_TABLE_UPDATE_IND = 232, - - WLAN_HAL_MSG_MAX = WLAN_HAL_MSG_TYPE_MAX_ENUM_SIZE -}tHalHostMsgType; - -/* Enumeration for Version */ -typedef enum -{ - WLAN_HAL_MSG_VERSION0 = 0, - WLAN_HAL_MSG_VERSION1 = 1, - WLAN_HAL_MSG_WCNSS_CTRL_VERSION = 0x7FFF, /*define as 2 bytes data*/ - WLAN_HAL_MSG_VERSION_MAX_FIELD = WLAN_HAL_MSG_WCNSS_CTRL_VERSION -}tHalHostMsgVersion; - -/* Enumeration for Boolean - False/True, On/Off */ -typedef enum tagAniBoolean -{ - eANI_BOOLEAN_FALSE = 0, - eANI_BOOLEAN_TRUE, - eANI_BOOLEAN_OFF = 0, - eANI_BOOLEAN_ON = 1, - eANI_BOOLEAN_MAX_FIELD = 0x7FFFFFFF /* define as 4 bytes data */ -} eAniBoolean; - -typedef enum -{ - eDRIVER_TYPE_PRODUCTION = 0, - eDRIVER_TYPE_MFG = 1, - eDRIVER_TYPE_DVT = 2, - eDRIVER_TYPE_MAX = WLAN_HAL_MAX_ENUM_SIZE -} tDriverType; - -typedef enum -{ - HAL_STOP_TYPE_SYS_RESET, - HAL_STOP_TYPE_SYS_DEEP_SLEEP, - HAL_STOP_TYPE_RF_KILL, - HAL_STOP_TYPE_MAX = WLAN_HAL_MAX_ENUM_SIZE -}tHalStopType; - -typedef enum -{ - eHAL_SYS_MODE_NORMAL, - eHAL_SYS_MODE_LEARN, - eHAL_SYS_MODE_SCAN, - eHAL_SYS_MODE_PROMISC, - eHAL_SYS_MODE_SUSPEND_LINK, - eHAL_SYS_MODE_ROAM_SCAN, - eHAL_SYS_MODE_ROAM_SUSPEND_LINK, - eHAL_SYS_MODE_OEM_DATA, - eHAL_SYS_MODE_MAX = WLAN_HAL_MAX_ENUM_SIZE -} eHalSysMode; - -typedef enum -{ - PHY_SINGLE_CHANNEL_CENTERED = 0, // 20MHz IF bandwidth centered on IF carrier - PHY_DOUBLE_CHANNEL_LOW_PRIMARY = 1, // 40MHz IF bandwidth with lower 20MHz supporting the primary channel - PHY_DOUBLE_CHANNEL_CENTERED = 2, // 40MHz IF bandwidth centered on IF carrier - PHY_DOUBLE_CHANNEL_HIGH_PRIMARY = 3, // 40MHz IF bandwidth with higher 20MHz supporting the primary channel -#ifdef WLAN_FEATURE_11AC - PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_CENTERED = 4, //20/40MHZ offset LOW 40/80MHZ offset CENTERED - PHY_QUADRUPLE_CHANNEL_20MHZ_CENTERED_40MHZ_CENTERED = 5, //20/40MHZ offset CENTERED 40/80MHZ offset CENTERED - PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_CENTERED = 6, //20/40MHZ offset HIGH 40/80MHZ offset CENTERED - PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_LOW = 7,//20/40MHZ offset LOW 40/80MHZ offset LOW - PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_LOW = 8, //20/40MHZ offset HIGH 40/80MHZ offset LOW - PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_HIGH = 9, //20/40MHZ offset LOW 40/80MHZ offset HIGH - PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_HIGH = 10,//20/40MHZ offset-HIGH 40/80MHZ offset HIGH -#endif - PHY_CHANNEL_BONDING_STATE_MAX = WLAN_HAL_MAX_ENUM_SIZE -}ePhyChanBondState; - -// Spatial Multiplexing(SM) Power Save mode -typedef enum eSirMacHTMIMOPowerSaveState -{ - eSIR_HT_MIMO_PS_STATIC = 0, // Static SM Power Save mode - eSIR_HT_MIMO_PS_DYNAMIC = 1, // Dynamic SM Power Save mode - eSIR_HT_MIMO_PS_NA = 2, // reserved - eSIR_HT_MIMO_PS_NO_LIMIT = 3, // SM Power Save disabled - eSIR_HT_MIMO_PS_MAX = WLAN_HAL_MAX_ENUM_SIZE -} tSirMacHTMIMOPowerSaveState; - -/* each station added has a rate mode which specifies the sta attributes */ -typedef enum eStaRateMode { - eSTA_TAURUS = 0, - eSTA_TITAN, - eSTA_POLARIS, - eSTA_11b, - eSTA_11bg, - eSTA_11a, - eSTA_11n, -#ifdef WLAN_FEATURE_11AC - eSTA_11ac, -#endif - eSTA_INVALID_RATE_MODE = WLAN_HAL_MAX_ENUM_SIZE -} tStaRateMode, *tpStaRateMode; - -#define SIR_NUM_11B_RATES 4 //1,2,5.5,11 -#define SIR_NUM_11A_RATES 8 //6,9,12,18,24,36,48,54 -#define SIR_NUM_POLARIS_RATES 3 //72,96,108 - -#define SIR_MAC_MAX_SUPPORTED_MCS_SET 16 - - -typedef enum eSirBssType -{ - eSIR_INFRASTRUCTURE_MODE, - eSIR_INFRA_AP_MODE, //Added for softAP support - eSIR_IBSS_MODE, - eSIR_BTAMP_STA_MODE, //Added for BT-AMP support - eSIR_BTAMP_AP_MODE, //Added for BT-AMP support - eSIR_AUTO_MODE, - eSIR_DONOT_USE_BSS_TYPE = WLAN_HAL_MAX_ENUM_SIZE -} tSirBssType; - -typedef enum eSirNwType -{ - eSIR_11A_NW_TYPE, - eSIR_11B_NW_TYPE, - eSIR_11G_NW_TYPE, - eSIR_11N_NW_TYPE, - eSIR_DONOT_USE_NW_TYPE = WLAN_HAL_MAX_ENUM_SIZE -} tSirNwType; - -typedef tANI_U16 tSirMacBeaconInterval; - -#define SIR_MAC_RATESET_EID_MAX 12 - -typedef enum eSirMacHTOperatingMode -{ - eSIR_HT_OP_MODE_PURE, // No Protection - eSIR_HT_OP_MODE_OVERLAP_LEGACY, // Overlap Legacy device present, protection is optional - eSIR_HT_OP_MODE_NO_LEGACY_20MHZ_HT, // No legacy device, but 20 MHz HT present - eSIR_HT_OP_MODE_MIXED, // Protection is required - eSIR_HT_OP_MODE_MAX = WLAN_HAL_MAX_ENUM_SIZE -} tSirMacHTOperatingMode; - -/// Encryption type enum used with peer -typedef enum eAniEdType -{ - eSIR_ED_NONE, - eSIR_ED_WEP40, - eSIR_ED_WEP104, - eSIR_ED_TKIP, - eSIR_ED_CCMP, - eSIR_ED_WPI, - eSIR_ED_AES_128_CMAC, - eSIR_ED_NOT_IMPLEMENTED = WLAN_HAL_MAX_ENUM_SIZE -} tAniEdType; - -#define WLAN_MAX_KEY_RSC_LEN 16 -#define WLAN_WAPI_KEY_RSC_LEN 16 - -/// MAX key length when ULA is used -#define SIR_MAC_MAX_KEY_LENGTH 32 -#define SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS 4 - -/// Enum to specify whether key is used -/// for TX only, RX only or both -typedef enum eAniKeyDirection -{ - eSIR_TX_ONLY, - eSIR_RX_ONLY, - eSIR_TX_RX, - eSIR_TX_DEFAULT, - eSIR_DONOT_USE_KEY_DIRECTION = WLAN_HAL_MAX_ENUM_SIZE -} tAniKeyDirection; - -typedef enum eAniWepType -{ - eSIR_WEP_STATIC, - eSIR_WEP_DYNAMIC, - eSIR_WEP_MAX = WLAN_HAL_MAX_ENUM_SIZE -} tAniWepType; - -typedef enum eSriLinkState { - - eSIR_LINK_IDLE_STATE = 0, - eSIR_LINK_PREASSOC_STATE = 1, - eSIR_LINK_POSTASSOC_STATE = 2, - eSIR_LINK_AP_STATE = 3, - eSIR_LINK_IBSS_STATE = 4, - - /* BT-AMP Case */ - eSIR_LINK_BTAMP_PREASSOC_STATE = 5, - eSIR_LINK_BTAMP_POSTASSOC_STATE = 6, - eSIR_LINK_BTAMP_AP_STATE = 7, - eSIR_LINK_BTAMP_STA_STATE = 8, - - /* Reserved for HAL Internal Use */ - eSIR_LINK_LEARN_STATE = 9, - eSIR_LINK_SCAN_STATE = 10, - eSIR_LINK_FINISH_SCAN_STATE = 11, - eSIR_LINK_INIT_CAL_STATE = 12, - eSIR_LINK_FINISH_CAL_STATE = 13, -#ifdef WLAN_FEATURE_P2P - eSIR_LINK_LISTEN_STATE = 14, - eSIR_LINK_SEND_ACTION_STATE = 15, -#endif - eSIR_LINK_MAX = WLAN_HAL_MAX_ENUM_SIZE -} tSirLinkState; - -typedef enum -{ - HAL_SUMMARY_STATS_INFO = 0x00000001, - HAL_GLOBAL_CLASS_A_STATS_INFO = 0x00000002, - HAL_GLOBAL_CLASS_B_STATS_INFO = 0x00000004, - HAL_GLOBAL_CLASS_C_STATS_INFO = 0x00000008, - HAL_GLOBAL_CLASS_D_STATS_INFO = 0x00000010, - HAL_PER_STA_STATS_INFO = 0x00000020 -}eHalStatsMask; - -/* BT-AMP events type */ -typedef enum -{ - BTAMP_EVENT_CONNECTION_START, - BTAMP_EVENT_CONNECTION_STOP, - BTAMP_EVENT_CONNECTION_TERMINATED, - BTAMP_EVENT_TYPE_MAX = WLAN_HAL_MAX_ENUM_SIZE, //This and beyond are invalid values -} tBtAmpEventType; - -//*************************************************************** - - -/*******************PE Statistics*************************/ -typedef enum -{ - PE_SUMMARY_STATS_INFO = 0x00000001, - PE_GLOBAL_CLASS_A_STATS_INFO = 0x00000002, - PE_GLOBAL_CLASS_B_STATS_INFO = 0x00000004, - PE_GLOBAL_CLASS_C_STATS_INFO = 0x00000008, - PE_GLOBAL_CLASS_D_STATS_INFO = 0x00000010, - PE_PER_STA_STATS_INFO = 0x00000020, - PE_STATS_TYPE_MAX = WLAN_HAL_MAX_ENUM_SIZE //This and beyond are invalid values -}ePEStatsMask; - -/*--------------------------------------------------------------------------- - Message definitons - All the messages below need to be packed - ---------------------------------------------------------------------------*/ - -#if defined(__ANI_COMPILER_PRAGMA_PACK_STACK) -#pragma pack(push, 1) -#elif defined(__ANI_COMPILER_PRAGMA_PACK) -#pragma pack(1) -#else -#endif - -/// Definition for HAL API Version. -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 revision; - tANI_U8 version; - tANI_U8 minor; - tANI_U8 major; -} tWcnssWlanVersion, *tpWcnssWlanVersion; - -/// Definition for Encryption Keys -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 keyId; - tANI_U8 unicast; // 0 for multicast - tAniKeyDirection keyDirection; - tANI_U8 keyRsc[WLAN_MAX_KEY_RSC_LEN]; // Usage is unknown - tANI_U8 paeRole; // =1 for authenticator,=0 for supplicant - tANI_U16 keyLength; - tANI_U8 key[SIR_MAC_MAX_KEY_LENGTH]; -} tSirKeys, *tpSirKeys; - - -//SetStaKeyParams Moving here since it is shared by configbss/setstakey msgs -typedef PACKED_PRE struct PACKED_POST -{ - /*STA Index*/ - tANI_U16 staIdx; - - /*Encryption Type used with peer*/ - tAniEdType encType; - - /*STATIC/DYNAMIC - valid only for WEP*/ - tAniWepType wepType; - - /*Default WEP key, valid only for static WEP, must between 0 and 3.*/ - tANI_U8 defWEPIdx; - - /* valid only for non-static WEP encyrptions */ - tSirKeys key[SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS]; - - /*Control for Replay Count, 1= Single TID based replay count on Tx - 0 = Per TID based replay count on TX */ - tANI_U8 singleTidRc; - -} tSetStaKeyParams, *tpSetStaKeyParams; - - - -/* 4-byte control message header used by HAL*/ -typedef PACKED_PRE struct PACKED_POST -{ - tHalHostMsgType msgType:16; - tHalHostMsgVersion msgVersion:16; - tANI_U32 msgLen; -} tHalMsgHeader, *tpHalMsgHeader; - -/* Config format required by HAL for each CFG item*/ -typedef PACKED_PRE struct PACKED_POST -{ - /* Cfg Id. The Id required by HAL is exported by HAL - * in shared header file between UMAC and HAL.*/ - tANI_U16 uCfgId; - - /* Length of the Cfg. This parameter is used to go to next cfg - * in the TLV format.*/ - tANI_U16 uCfgLen; - - /* Padding bytes for unaligned address's */ - tANI_U16 uCfgPadBytes; - - /* Reserve bytes for making cfgVal to align address */ - tANI_U16 uCfgReserve; - - /* Following the uCfgLen field there should be a 'uCfgLen' bytes - * containing the uCfgValue ; tANI_U8 uCfgValue[uCfgLen] */ -} tHalCfg, *tpHalCfg; - -/*--------------------------------------------------------------------------- - WLAN_HAL_START_REQ ----------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST sHalMacStartParameters -{ - /* Drive Type - Production or FTM etc */ - tDriverType driverType; - - /*Length of the config buffer*/ - tANI_U32 uConfigBufferLen; - - /* Following this there is a TLV formatted buffer of length - * "uConfigBufferLen" bytes containing all config values. - * The TLV is expected to be formatted like this: - * 0 15 31 31+CFG_LEN-1 length-1 - * | CFG_ID | CFG_LEN | CFG_BODY | CFG_ID |......| - */ -} tHalMacStartParameters, *tpHalMacStartParameters; - -typedef PACKED_PRE struct PACKED_POST -{ - /* Note: The length specified in tHalMacStartReqMsg messages should be - * header.msgLen = sizeof(tHalMacStartReqMsg) + uConfigBufferLen */ - tHalMsgHeader header; - tHalMacStartParameters startReqParams; -} tHalMacStartReqMsg, *tpHalMacStartReqMsg; - -/*--------------------------------------------------------------------------- - WLAN_HAL_START_RSP ----------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST sHalMacStartRspParameters -{ - /*success or failure */ - tANI_U16 status; - - /*Max number of STA supported by the device*/ - tANI_U8 ucMaxStations; - - /*Max number of BSS supported by the device*/ - tANI_U8 ucMaxBssids; - - /*API Version */ - tWcnssWlanVersion wcnssWlanVersion; - - /*CRM build information */ - tANI_U8 wcnssCrmVersionString[WLAN_HAL_VERSION_LENGTH]; - - /*hardware/chipset/misc version information */ - tANI_U8 wcnssWlanVersionString[WLAN_HAL_VERSION_LENGTH]; - -} tHalMacStartRspParams, *tpHalMacStartRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalMacStartRspParams startRspParams; -} tHalMacStartRspMsg, *tpHalMacStartRspMsg; - -/*--------------------------------------------------------------------------- - WLAN_HAL_STOP_REQ ----------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /*The reason for which the device is being stopped*/ - tHalStopType reason; - -}tHalMacStopReqParams, *tpHalMacStopReqParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalMacStopReqParams stopReqParams; -} tHalMacStopReqMsg, *tpHalMacStopReqMsg; - -/*--------------------------------------------------------------------------- - WLAN_HAL_STOP_RSP ----------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /*success or failure */ - tANI_U32 status; - -}tHalMacStopRspParams, *tpHalMacStopRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalMacStopRspParams stopRspParams; -} tHalMacStopRspMsg, *tpHalMacStopRspMsg; - -/*--------------------------------------------------------------------------- - WLAN_HAL_UPDATE_CFG_REQ ----------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /* Length of the config buffer. Allows UMAC to update multiple CFGs */ - tANI_U32 uConfigBufferLen; - - /* Following this there is a TLV formatted buffer of length - * "uConfigBufferLen" bytes containing all config values. - * The TLV is expected to be formatted like this: - * 0 15 31 31+CFG_LEN-1 length-1 - * | CFG_ID | CFG_LEN | CFG_BODY | CFG_ID |......| - */ -} tHalUpdateCfgReqParams, *tpHalUpdateCfgReqParams; - -typedef PACKED_PRE struct PACKED_POST -{ - /* Note: The length specified in tHalUpdateCfgReqMsg messages should be - * header.msgLen = sizeof(tHalUpdateCfgReqMsg) + uConfigBufferLen */ - tHalMsgHeader header; - tHalUpdateCfgReqParams updateCfgReqParams; -} tHalUpdateCfgReqMsg, *tpHalUpdateCfgReqMsg; - -/*--------------------------------------------------------------------------- - WLAN_HAL_UPDATE_CFG_RSP ----------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; - -}tHalUpdateCfgRspParams, *tpHalUpdateCfgRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalUpdateCfgRspParams updateCfgRspParams; -} tHalUpdateCfgRspMsg, *tpHalUpdateCfgRspMsg; - -/*--------------------------------------------------------------------------- - WLAN_HAL_INIT_SCAN_REQ ----------------------------------------------------------------------------*/ - -/// Frame control field format (2 bytes) -typedef __ani_attr_pre_packed struct sSirMacFrameCtl -{ - -#ifndef ANI_LITTLE_BIT_ENDIAN - - tANI_U8 subType :4; - tANI_U8 type :2; - tANI_U8 protVer :2; - - tANI_U8 order :1; - tANI_U8 wep :1; - tANI_U8 moreData :1; - tANI_U8 powerMgmt :1; - tANI_U8 retry :1; - tANI_U8 moreFrag :1; - tANI_U8 fromDS :1; - tANI_U8 toDS :1; - -#else - - tANI_U8 protVer :2; - tANI_U8 type :2; - tANI_U8 subType :4; - - tANI_U8 toDS :1; - tANI_U8 fromDS :1; - tANI_U8 moreFrag :1; - tANI_U8 retry :1; - tANI_U8 powerMgmt :1; - tANI_U8 moreData :1; - tANI_U8 wep :1; - tANI_U8 order :1; - -#endif - -} __ani_attr_packed tSirMacFrameCtl, *tpSirMacFrameCtl; - -/// Sequence control field -typedef __ani_attr_pre_packed struct sSirMacSeqCtl -{ - tANI_U8 fragNum : 4; - tANI_U8 seqNumLo : 4; - tANI_U8 seqNumHi : 8; -} __ani_attr_packed tSirMacSeqCtl, *tpSirMacSeqCtl; - -/// Management header format -typedef __ani_attr_pre_packed struct sSirMacMgmtHdr -{ - tSirMacFrameCtl fc; - tANI_U8 durationLo; - tANI_U8 durationHi; - tANI_U8 da[6]; - tANI_U8 sa[6]; - tANI_U8 bssId[6]; - tSirMacSeqCtl seqControl; -} __ani_attr_packed tSirMacMgmtHdr, *tpSirMacMgmtHdr; - -/// Scan Entry to hold active BSS idx's -typedef __ani_attr_pre_packed struct sSirScanEntry -{ - tANI_U8 bssIdx[HAL_NUM_BSSID]; - tANI_U8 activeBSScnt; -}__ani_attr_packed tSirScanEntry, *ptSirScanEntry; - -typedef PACKED_PRE struct PACKED_POST { - - /*LEARN - AP Role - SCAN - STA Role*/ - eHalSysMode scanMode; - - /*BSSID of the BSS*/ - tSirMacAddr bssid; - - /*Whether BSS needs to be notified*/ - tANI_U8 notifyBss; - - /*Kind of frame to be used for notifying the BSS (Data Null, QoS Null, or - CTS to Self). Must always be a valid frame type.*/ - tANI_U8 frameType; - - /*UMAC has the option of passing the MAC frame to be used for notifying - the BSS. If non-zero, HAL will use the MAC frame buffer pointed to by - macMgmtHdr. If zero, HAL will generate the appropriate MAC frame based on - frameType.*/ - tANI_U8 frameLength; - - /* Following the framelength there is a MAC frame buffer if frameLength - is non-zero. */ - tSirMacMgmtHdr macMgmtHdr; - - /*Entry to hold number of active BSS idx's*/ - tSirScanEntry scanEntry; - -} tInitScanParams, * tpInitScanParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tInitScanParams initScanParams; -} tHalInitScanReqMsg, *tpHalInitScanReqMsg; - -typedef PACKED_PRE struct PACKED_POST { - - /*LEARN - AP Role - SCAN - STA Role*/ - eHalSysMode scanMode; - - /*BSSID of the BSS*/ - tSirMacAddr bssid; - - /*Whether BSS needs to be notified*/ - tANI_U8 notifyBss; - - /*Kind of frame to be used for notifying the BSS (Data Null, QoS Null, or - CTS to Self). Must always be a valid frame type.*/ - tANI_U8 frameType; - - /*UMAC has the option of passing the MAC frame to be used for notifying - the BSS. If non-zero, HAL will use the MAC frame buffer pointed to by - macMgmtHdr. If zero, HAL will generate the appropriate MAC frame based on - frameType.*/ - tANI_U8 frameLength; - - /* Following the framelength there is a MAC frame buffer if frameLength - is non-zero. */ - tSirMacMgmtHdr macMgmtHdr; - - /*Entry to hold number of active BSS idx's*/ - tSirScanEntry scanEntry; - - /* Single NoA usage in Scanning */ - tANI_U8 useNoA; - - /* Indicates the scan duration (in ms) */ - tANI_U16 scanDuration; - -} tInitScanConParams, * tpInitScanConParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tInitScanConParams initScanParams; -} tHalInitScanConReqMsg, *tpHalInitScanConReqMsg; - - -/*--------------------------------------------------------------------------- - WLAN_HAL_INIT_SCAN_RSP ----------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /*success or failure */ - tANI_U32 status; - -}tHalInitScanRspParams, *tpHalInitScanRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalInitScanRspParams initScanRspParams; -} tHalInitScanRspMsg, *tpHalInitScanRspMsg; - -/*--------------------------------------------------------------------------- - WLAN_HAL_START_SCAN_REQ ----------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /*Indicates the channel to scan*/ - tANI_U8 scanChannel; - - } tStartScanParams, * tpStartScanParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tStartScanParams startScanParams; -} tHalStartScanReqMsg, *tpHalStartScanReqMsg; - -/*--------------------------------------------------------------------------- - WLAN_HAL_START_SCAN_RSP ----------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /*success or failure */ - tANI_U32 status; - - tANI_U32 startTSF[2]; - tPowerdBm txMgmtPower; - -}tHalStartScanRspParams, *tpHalStartScanRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalStartScanRspParams startScanRspParams; -} tHalStartScanRspMsg, *tpHalStartScanRspMsg; - -/*--------------------------------------------------------------------------- - WLAN_HAL_END_SCAN_REQ ----------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /*Indicates the channel to stop scanning. Not used really. But retained - for symmetry with "start Scan" message. It can also help in error - check if needed.*/ - tANI_U8 scanChannel; - -} tEndScanParams, *tpEndScanParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tEndScanParams endScanParams; -} tHalEndScanReqMsg, *tpHalEndScanReqMsg; - -/*--------------------------------------------------------------------------- - WLAN_HAL_END_SCAN_RSP ----------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /*success or failure */ - tANI_U32 status; - -}tHalEndScanRspParams, *tpHalEndScanRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalEndScanRspParams endScanRspParams; -} tHalEndScanRspMsg, *tpHalEndScanRspMsg; - -/*--------------------------------------------------------------------------- - WLAN_HAL_FINISH_SCAN_REQ ----------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /* Identifies the operational state of the AP/STA - * LEARN - AP Role SCAN - STA Role */ - eHalSysMode scanMode; - - /*Operating channel to tune to.*/ - tANI_U8 currentOperChannel; - - /*Channel Bonding state If 20/40 MHz is operational, this will indicate the - 40 MHz extension channel in combination with the control channel*/ - ePhyChanBondState cbState; - - /*BSSID of the BSS*/ - tSirMacAddr bssid; - - /*Whether BSS needs to be notified*/ - tANI_U8 notifyBss; - - /*Kind of frame to be used for notifying the BSS (Data Null, QoS Null, or - CTS to Self). Must always be a valid frame type.*/ - tANI_U8 frameType; - - /*UMAC has the option of passing the MAC frame to be used for notifying - the BSS. If non-zero, HAL will use the MAC frame buffer pointed to by - macMgmtHdr. If zero, HAL will generate the appropriate MAC frame based on - frameType.*/ - tANI_U8 frameLength; - - /*Following the framelength there is a MAC frame buffer if frameLength - is non-zero.*/ - tSirMacMgmtHdr macMgmtHdr; - - /*Entry to hold number of active BSS idx's*/ - tSirScanEntry scanEntry; - -} tFinishScanParams, *tpFinishScanParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tFinishScanParams finishScanParams; -} tHalFinishScanReqMsg, *tpHalFinishScanReqMsg; - -/*--------------------------------------------------------------------------- - WLAN_HAL_FINISH_SCAN_RSP ----------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /*success or failure */ - tANI_U32 status; - -}tHalFinishScanRspParams, *tpHalFinishScanRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalFinishScanRspParams finishScanRspParams; -} tHalFinishScanRspMsg, *tpHalFinishScanRspMsg; - -/*--------------------------------------------------------------------------- - WLAN_HAL_CONFIG_STA_REQ ----------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST { - /* - * For Self STA Entry: this represents Self Mode. - * For Peer Stations, this represents the mode of the peer. - * On Station: - * --this mode is updated when PE adds the Self Entry. - * -- OR when PE sends 'ADD_BSS' message and station context in BSS is used to indicate the mode of the AP. - * ON AP: - * -- this mode is updated when PE sends 'ADD_BSS' and Sta entry for that BSS is used - * to indicate the self mode of the AP. - * -- OR when a station is associated, PE sends 'ADD_STA' message with this mode updated. - */ - - tStaRateMode opRateMode; - // 11b, 11a and aniLegacyRates are IE rates which gives rate in unit of 500Kbps - tANI_U16 llbRates[SIR_NUM_11B_RATES]; - tANI_U16 llaRates[SIR_NUM_11A_RATES]; - tANI_U16 aniLegacyRates[SIR_NUM_POLARIS_RATES]; - tANI_U16 reserved; - - //Taurus only supports 26 Titan Rates(no ESF/concat Rates will be supported) - //First 26 bits are reserved for those Titan rates and - //the last 4 bits(bit28-31) for Taurus, 2(bit26-27) bits are reserved. - tANI_U32 aniEnhancedRateBitmap; //Titan and Taurus Rates - - /* - * 0-76 bits used, remaining reserved - * bits 0-15 and 32 should be set. - */ - tANI_U8 supportedMCSSet[SIR_MAC_MAX_SUPPORTED_MCS_SET]; - - /* - * RX Highest Supported Data Rate defines the highest data - * rate that the STA is able to receive, in unites of 1Mbps. - * This value is derived from "Supported MCS Set field" inside - * the HT capability element. - */ - tANI_U16 rxHighestDataRate; - -} tSirSupportedRates, *tpSirSupportedRates; - -typedef PACKED_PRE struct PACKED_POST -{ - /*BSSID of STA*/ - tSirMacAddr bssId; - - /*ASSOC ID, as assigned by UMAC*/ - tANI_U16 assocId; - - /* STA entry Type: 0 - Self, 1 - Other/Peer, 2 - BSSID, 3 - BCAST */ - tANI_U8 staType; - - /*Short Preamble Supported.*/ - tANI_U8 shortPreambleSupported; - - /*MAC Address of STA*/ - tSirMacAddr staMac; - - /*Listen interval of the STA*/ - tANI_U16 listenInterval; - - /*Support for 11e/WMM*/ - tANI_U8 wmmEnabled; - - /*11n HT capable STA*/ - tANI_U8 htCapable; - - /*TX Width Set: 0 - 20 MHz only, 1 - 20/40 MHz*/ - tANI_U8 txChannelWidthSet; - - /*RIFS mode 0 - NA, 1 - Allowed */ - tANI_U8 rifsMode; - - /*L-SIG TXOP Protection mechanism - 0 - No Support, 1 - Supported - SG - there is global field */ - tANI_U8 lsigTxopProtection; - - /*Max Ampdu Size supported by STA. TPE programming. - 0 : 8k , 1 : 16k, 2 : 32k, 3 : 64k */ - tANI_U8 maxAmpduSize; - - /*Max Ampdu density. Used by RA. 3 : 0~7 : 2^(11nAMPDUdensity -4)*/ - tANI_U8 maxAmpduDensity; - - /*Max AMSDU size 1 : 3839 bytes, 0 : 7935 bytes*/ - tANI_U8 maxAmsduSize; - - /*Short GI support for 40Mhz packets*/ - tANI_U8 fShortGI40Mhz; - - /*Short GI support for 20Mhz packets*/ - tANI_U8 fShortGI20Mhz; - - /*Robust Management Frame (RMF) enabled/disabled*/ - tANI_U8 rmfEnabled; - - /* The unicast encryption type in the association */ - tANI_U32 encryptType; - - /*HAL should update the existing STA entry, if this flag is set. UMAC - will set this flag in case of RE-ASSOC, where we want to reuse the old - STA ID. 0 = Add, 1 = Update*/ - tANI_U8 action; - - /*U-APSD Flags: 1b per AC. Encoded as follows: - b7 b6 b5 b4 b3 b2 b1 b0 = - X X X X BE BK VI VO */ - tANI_U8 uAPSD; - - /*Max SP Length*/ - tANI_U8 maxSPLen; - - /*11n Green Field preamble support - 0 - Not supported, 1 - Supported */ - tANI_U8 greenFieldCapable; - - /*MIMO Power Save mode*/ - tSirMacHTMIMOPowerSaveState mimoPS; - - /*Delayed BA Support*/ - tANI_U8 delayedBASupport; - - /*Max AMPDU duration in 32us*/ - tANI_U8 us32MaxAmpduDuration; - - /*HT STA should set it to 1 if it is enabled in BSS. HT STA should set - it to 0 if AP does not support it. This indication is sent to HAL and - HAL uses this flag to pickup up appropriate 40Mhz rates.*/ - tANI_U8 fDsssCckMode40Mhz; - - /* Valid STA Idx when action=Update. Set to 0xFF when invalid! - Retained for backward compalibity with existing HAL code*/ - tANI_U8 staIdx; - - /* BSSID of BSS to which station is associated. Set to 0xFF when invalid. - Retained for backward compalibity with existing HAL code*/ - tANI_U8 bssIdx; - - tANI_U8 p2pCapableSta; - - /*Reserved to align next field on a dword boundary*/ - tANI_U8 reserved; - - /*These rates are the intersection of peer and self capabilities.*/ - tSirSupportedRates supportedRates; - -} tConfigStaParams, *tpConfigStaParams; - -/*------------------------------------------------------------------------ - * WLAN_HAL_CONFIG_STA_REQ - * ----------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST { - /* - * For Self STA Entry: this represents Self Mode. - * For Peer Stations, this represents the mode of the peer. - * On Station: - * --this mode is updated when PE adds the Self Entry. - * -- OR when PE sends 'ADD_BSS' message and station context in BSS is used to indicate the mode of the AP. - * ON AP: - * -- this mode is updated when PE sends 'ADD_BSS' and Sta entry for that BSS is used - * to indicate the self mode of the AP. - * -- OR when a station is associated, PE sends 'ADD_STA' message with this mode updated. - */ - - tStaRateMode opRateMode; - // 11b, 11a and aniLegacyRates are IE rates which gives rate in unit of 500Kbps - tANI_U16 llbRates[SIR_NUM_11B_RATES]; - tANI_U16 llaRates[SIR_NUM_11A_RATES]; - tANI_U16 aniLegacyRates[SIR_NUM_POLARIS_RATES]; - tANI_U16 reserved; - - //Taurus only supports 26 Titan Rates(no ESF/concat Rates will be supported) - //First 26 bits are reserved for those Titan rates and - //the last 4 bits(bit28-31) for Taurus, 2(bit26-27) bits are reserved. - tANI_U32 aniEnhancedRateBitmap; //Titan and Taurus Rates - - /* - * 0-76 bits used, remaining reserved - * bits 0-15 and 32 should be set. - */ - tANI_U8 supportedMCSSet[SIR_MAC_MAX_SUPPORTED_MCS_SET]; - - /* - * RX Highest Supported Data Rate defines the highest data - * rate that the STA is able to receive, in unites of 1Mbps. - * This value is derived from "Supported MCS Set field" inside - * the HT capability element. - */ - tANI_U16 rxHighestDataRate; - - /* Indicates the Maximum MCS that can be received for each number - * of spacial streams */ - tANI_U16 vhtRxMCSMap; - - /*Indicate the highest VHT data rate that the STA is able to receive*/ - tANI_U16 vhtRxHighestDataRate; - - /* Indicates the Maximum MCS that can be transmitted for each number - * of spacial streams */ - tANI_U16 vhtTxMCSMap; - - /*Indicate the highest VHT data rate that the STA is able to transmit*/ - tANI_U16 vhtTxHighestDataRate; - -} tSirSupportedRates_V1, *tpSirSupportedRates_V1; - -typedef PACKED_PRE struct PACKED_POST -{ - /*BSSID of STA*/ - tSirMacAddr bssId; - - /*ASSOC ID, as assigned by UMAC*/ - tANI_U16 assocId; - - /* STA entry Type: 0 - Self, 1 - Other/Peer, 2 - BSSID, 3 - BCAST */ - tANI_U8 staType; - - /*Short Preamble Supported.*/ - tANI_U8 shortPreambleSupported; - - /*MAC Address of STA*/ - tSirMacAddr staMac; - - /*Listen interval of the STA*/ - tANI_U16 listenInterval; - - /*Support for 11e/WMM*/ - tANI_U8 wmmEnabled; - - /*11n HT capable STA*/ - tANI_U8 htCapable; - - /*TX Width Set: 0 - 20 MHz only, 1 - 20/40 MHz*/ - tANI_U8 txChannelWidthSet; - - /*RIFS mode 0 - NA, 1 - Allowed */ - tANI_U8 rifsMode; - - /*L-SIG TXOP Protection mechanism - 0 - No Support, 1 - Supported - SG - there is global field */ - tANI_U8 lsigTxopProtection; - - /*Max Ampdu Size supported by STA. TPE programming. - 0 : 8k , 1 : 16k, 2 : 32k, 3 : 64k */ - tANI_U8 maxAmpduSize; - - /*Max Ampdu density. Used by RA. 3 : 0~7 : 2^(11nAMPDUdensity -4)*/ - tANI_U8 maxAmpduDensity; - - /*Max AMSDU size 1 : 3839 bytes, 0 : 7935 bytes*/ - tANI_U8 maxAmsduSize; - - /*Short GI support for 40Mhz packets*/ - tANI_U8 fShortGI40Mhz; - - /*Short GI support for 20Mhz packets*/ - tANI_U8 fShortGI20Mhz; - - /*Robust Management Frame (RMF) enabled/disabled*/ - tANI_U8 rmfEnabled; - - /* The unicast encryption type in the association */ - tANI_U32 encryptType; - - /*HAL should update the existing STA entry, if this flag is set. UMAC - will set this flag in case of RE-ASSOC, where we want to reuse the old - STA ID. 0 = Add, 1 = Update*/ - tANI_U8 action; - - /*U-APSD Flags: 1b per AC. Encoded as follows: - b7 b6 b5 b4 b3 b2 b1 b0 = - X X X X BE BK VI VO */ - tANI_U8 uAPSD; - - /*Max SP Length*/ - tANI_U8 maxSPLen; - - /*11n Green Field preamble support - 0 - Not supported, 1 - Supported */ - tANI_U8 greenFieldCapable; - - /*MIMO Power Save mode*/ - tSirMacHTMIMOPowerSaveState mimoPS; - - /*Delayed BA Support*/ - tANI_U8 delayedBASupport; - - /*Max AMPDU duration in 32us*/ - tANI_U8 us32MaxAmpduDuration; - - /*HT STA should set it to 1 if it is enabled in BSS. HT STA should set - it to 0 if AP does not support it. This indication is sent to HAL and - HAL uses this flag to pickup up appropriate 40Mhz rates.*/ - tANI_U8 fDsssCckMode40Mhz; - - /* Valid STA Idx when action=Update. Set to 0xFF when invalid! - Retained for backward compalibity with existing HAL code*/ - tANI_U8 staIdx; - - /* BSSID of BSS to which station is associated. Set to 0xFF when invalid. - Retained for backward compalibity with existing HAL code*/ - tANI_U8 bssIdx; - - tANI_U8 p2pCapableSta; - - /*Reserved to align next field on a dword boundary*/ - tANI_U8 htLdpcEnabled:1; - tANI_U8 vhtLdpcEnabled:1; - tANI_U8 vhtTxBFEnabled:1; - tANI_U8 reserved:5; - - /*These rates are the intersection of peer and self capabilities.*/ - tSirSupportedRates_V1 supportedRates; - - tANI_U8 vhtCapable; - tANI_U8 vhtTxChannelWidthSet; - -} tConfigStaParams_V1, *tpConfigStaParams_V1; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - PACKED_PRE union PACKED_POST { - tConfigStaParams configStaParams; - tConfigStaParams_V1 configStaParams_V1; - } uStaParams; -} tConfigStaReqMsg, *tpConfigStaReqMsg; - -/*--------------------------------------------------------------------------- - WLAN_HAL_CONFIG_STA_RSP ----------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /*success or failure */ - tANI_U32 status; - - /* Station index; valid only when 'status' field value SUCCESS */ - tANI_U8 staIdx; - - /* BSSID Index of BSS to which the station is associated */ - tANI_U8 bssIdx; - - /* DPU Index for PTK */ - tANI_U8 dpuIndex; - - /* DPU Index for GTK */ - tANI_U8 bcastDpuIndex; - - /*DPU Index for IGTK */ - tANI_U8 bcastMgmtDpuIdx; - - /*PTK DPU signature*/ - tANI_U8 ucUcastSig; - - /*GTK DPU isignature*/ - tANI_U8 ucBcastSig; - - /* IGTK DPU signature*/ - tANI_U8 ucMgmtSig; - - tANI_U8 p2pCapableSta; - -}tConfigStaRspParams, *tpConfigStaRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tConfigStaRspParams configStaRspParams; -}tConfigStaRspMsg, *tpConfigStaRspMsg; - -/*--------------------------------------------------------------------------- - WLAN_HAL_DELETE_STA_REQ ----------------------------------------------------------------------------*/ - -/* Delete STA Request params */ -typedef PACKED_PRE struct PACKED_POST -{ - /* Index of STA to delete */ - tANI_U8 staIdx; -} tDeleteStaParams, *tpDeleteStaParams; - -/* Delete STA Request message*/ -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tDeleteStaParams delStaParams; -} tDeleteStaReqMsg, *tpDeleteStaReqMsg; - -/*--------------------------------------------------------------------------- - WLAN_HAL_DELETE_STA_RSP ----------------------------------------------------------------------------*/ - -/* Delete STA Response Params */ -typedef PACKED_PRE struct PACKED_POST -{ - /*success or failure */ - tANI_U32 status; - - /* Index of STA deleted */ - tANI_U8 staId; -} tDeleteStaRspParams, *tpDeleteStaRspParams; - -/* Delete STA Response message*/ -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tDeleteStaRspParams delStaRspParams; -} tDeleteStaRspMsg, *tpDeleteStaRspMsg; - -/*--------------------------------------------------------------------------- - WLAN_HAL_CONFIG_BSS_REQ ----------------------------------------------------------------------------*/ - -//12 Bytes long because this structure can be used to represent rate -//and extended rate set IEs. The parser assume this to be at least 12 -typedef __ani_attr_pre_packed struct sSirMacRateSet -{ - tANI_U8 numRates; - tANI_U8 rate[SIR_MAC_RATESET_EID_MAX]; -} __ani_attr_packed tSirMacRateSet; - -// access category record -typedef __ani_attr_pre_packed struct sSirMacAciAifsn -{ -#ifndef ANI_LITTLE_BIT_ENDIAN - tANI_U8 rsvd : 1; - tANI_U8 aci : 2; - tANI_U8 acm : 1; - tANI_U8 aifsn : 4; -#else - tANI_U8 aifsn : 4; - tANI_U8 acm : 1; - tANI_U8 aci : 2; - tANI_U8 rsvd : 1; -#endif -} __ani_attr_packed tSirMacAciAifsn; - -// contention window size -typedef __ani_attr_pre_packed struct sSirMacCW -{ -#ifndef ANI_LITTLE_BIT_ENDIAN - tANI_U8 max : 4; - tANI_U8 min : 4; -#else - tANI_U8 min : 4; - tANI_U8 max : 4; -#endif -} __ani_attr_packed tSirMacCW; - -typedef __ani_attr_pre_packed struct sSirMacEdcaParamRecord -{ - tSirMacAciAifsn aci; - tSirMacCW cw; - tANI_U16 txoplimit; -} __ani_attr_packed tSirMacEdcaParamRecord; - -typedef __ani_attr_pre_packed struct sSirMacSSid -{ - tANI_U8 length; - tANI_U8 ssId[32]; -} __ani_attr_packed tSirMacSSid; - -// Concurrency role. These are generic IDs that identify the various roles -// in the software system. -typedef enum { - HAL_STA_MODE=0, - HAL_STA_SAP_MODE=1, // to support softAp mode . This is misleading. It means AP MODE only. - HAL_P2P_CLIENT_MODE, - HAL_P2P_GO_MODE, - HAL_MONITOR_MODE, -} tHalConMode; - -//This is a bit pattern to be set for each mode -//bit 0 - sta mode -//bit 1 - ap mode -//bit 2 - p2p client mode -//bit 3 - p2p go mode -typedef enum -{ - HAL_STA=1, - HAL_SAP=2, - HAL_STA_SAP=3, //to support sta, softAp mode . This means STA+AP mode - HAL_P2P_CLIENT=4, - HAL_P2P_GO=8, - HAL_MAX_CONCURRENCY_PERSONA=4 -} tHalConcurrencyMode; - -// IFACE PERSONA for different Operating modes -typedef enum -{ - HAL_IFACE_UNKNOWN, - HAL_IFACE_STA_MODE, - HAL_IFACE_P2P_MODE, - HAL_IFACE_MAX -} tHalIfacePersona; - -typedef PACKED_PRE struct PACKED_POST -{ - /* BSSID */ - tSirMacAddr bssId; - - /* Self Mac Address */ - tSirMacAddr selfMacAddr; - - /* BSS type */ - tSirBssType bssType; - - /*Operational Mode: AP =0, STA = 1*/ - tANI_U8 operMode; - - /*Network Type*/ - tSirNwType nwType; - - /*Used to classify PURE_11G/11G_MIXED to program MTU*/ - tANI_U8 shortSlotTimeSupported; - - /*Co-exist with 11a STA*/ - tANI_U8 llaCoexist; - - /*Co-exist with 11b STA*/ - tANI_U8 llbCoexist; - - /*Co-exist with 11g STA*/ - tANI_U8 llgCoexist; - - /*Coexistence with 11n STA*/ - tANI_U8 ht20Coexist; - - /*Non GF coexist flag*/ - tANI_U8 llnNonGFCoexist; - - /*TXOP protection support*/ - tANI_U8 fLsigTXOPProtectionFullSupport; - - /*RIFS mode*/ - tANI_U8 fRIFSMode; - - /*Beacon Interval in TU*/ - tSirMacBeaconInterval beaconInterval; - - /*DTIM period*/ - tANI_U8 dtimPeriod; - - /*TX Width Set: 0 - 20 MHz only, 1 - 20/40 MHz*/ - tANI_U8 txChannelWidthSet; - - /*Operating channel*/ - tANI_U8 currentOperChannel; - - /*Extension channel for channel bonding*/ - tANI_U8 currentExtChannel; - - /*Reserved to align next field on a dword boundary*/ - tANI_U8 reserved; - - /*SSID of the BSS*/ - tSirMacSSid ssId; - - /*HAL should update the existing BSS entry, if this flag is set. - UMAC will set this flag in case of reassoc, where we want to resue the - the old BSSID and still return success 0 = Add, 1 = Update*/ - tANI_U8 action; - - /* MAC Rate Set */ - tSirMacRateSet rateSet; - - /*Enable/Disable HT capabilities of the BSS*/ - tANI_U8 htCapable; - - // Enable/Disable OBSS protection - tANI_U8 obssProtEnabled; - - /*RMF enabled/disabled*/ - tANI_U8 rmfEnabled; - - /*HT Operating Mode operating mode of the 802.11n STA*/ - tSirMacHTOperatingMode htOperMode; - - /*Dual CTS Protection: 0 - Unused, 1 - Used*/ - tANI_U8 dualCTSProtection; - - /* Probe Response Max retries */ - tANI_U8 ucMaxProbeRespRetryLimit; - - /* To Enable Hidden ssid */ - tANI_U8 bHiddenSSIDEn; - - /* To Enable Disable FW Proxy Probe Resp */ - tANI_U8 bProxyProbeRespEn; - - /* Boolean to indicate if EDCA params are valid. UMAC might not have valid - EDCA params or might not desire to apply EDCA params during config BSS. - 0 implies Not Valid ; Non-Zero implies valid*/ - tANI_U8 edcaParamsValid; - - /*EDCA Parameters for Best Effort Access Category*/ - tSirMacEdcaParamRecord acbe; - - /*EDCA Parameters forBackground Access Category*/ - tSirMacEdcaParamRecord acbk; - - /*EDCA Parameters for Video Access Category*/ - tSirMacEdcaParamRecord acvi; - - /*EDCA Parameters for Voice Access Category*/ - tSirMacEdcaParamRecord acvo; - -#ifdef WLAN_FEATURE_VOWIFI_11R - tANI_U8 extSetStaKeyParamValid; //Ext Bss Config Msg if set - tSetStaKeyParams extSetStaKeyParam; //SetStaKeyParams for ext bss msg -#endif - - /* Persona for the BSS can be STA,AP,GO,CLIENT value same as tHalConMode */ - tANI_U8 halPersona; - - tANI_U8 bSpectrumMgtEnable; - - /*HAL fills in the tx power used for mgmt frames in txMgmtPower*/ - tANI_S8 txMgmtPower; - /*maxTxPower has max power to be used after applying the power constraint if any */ - tANI_S8 maxTxPower; - /*Context of the station being added in HW - Add a STA entry for "itself" - - On AP - Add the AP itself in an "STA context" - On STA - Add the AP to which this STA is joining in an "STA context" */ - tConfigStaParams staContext; -} tConfigBssParams, * tpConfigBssParams; - - -/*-------------------------------------------------------------------------- - * WLAN_HAL_CONFIG_BSS_REQ - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /* BSSID */ - tSirMacAddr bssId; - - /* Self Mac Address */ - tSirMacAddr selfMacAddr; - - /* BSS type */ - tSirBssType bssType; - - /*Operational Mode: AP =0, STA = 1*/ - tANI_U8 operMode; - - /*Network Type*/ - tSirNwType nwType; - - /*Used to classify PURE_11G/11G_MIXED to program MTU*/ - tANI_U8 shortSlotTimeSupported; - - /*Co-exist with 11a STA*/ - tANI_U8 llaCoexist; - - /*Co-exist with 11b STA*/ - tANI_U8 llbCoexist; - - /*Co-exist with 11g STA*/ - tANI_U8 llgCoexist; - - /*Coexistence with 11n STA*/ - tANI_U8 ht20Coexist; - - /*Non GF coexist flag*/ - tANI_U8 llnNonGFCoexist; - - /*TXOP protection support*/ - tANI_U8 fLsigTXOPProtectionFullSupport; - /*RIFS mode*/ - tANI_U8 fRIFSMode; - - /*Beacon Interval in TU*/ - tSirMacBeaconInterval beaconInterval; - - /*DTIM period*/ - tANI_U8 dtimPeriod; - - /*TX Width Set: 0 - 20 MHz only, 1 - 20/40 MHz*/ - tANI_U8 txChannelWidthSet; - - /*Operating channel*/ - tANI_U8 currentOperChannel; - - /*Extension channel for channel bonding*/ - tANI_U8 currentExtChannel; - - /*Reserved to align next field on a dword boundary*/ - tANI_U8 reserved; - - /*SSID of the BSS*/ - tSirMacSSid ssId; - - /*HAL should update the existing BSS entry, if this flag is set. - UMAC will set this flag in case of reassoc, where we want to resue the - the old BSSID and still return success 0 = Add, 1 = Update*/ - tANI_U8 action; - - /* MAC Rate Set */ - tSirMacRateSet rateSet; - - /*Enable/Disable HT capabilities of the BSS*/ - tANI_U8 htCapable; - - // Enable/Disable OBSS protection - tANI_U8 obssProtEnabled; - - /*RMF enabled/disabled*/ - tANI_U8 rmfEnabled; - - /*HT Operating Mode operating mode of the 802.11n STA*/ - tSirMacHTOperatingMode htOperMode; - - /*Dual CTS Protection: 0 - Unused, 1 - Used*/ - tANI_U8 dualCTSProtection; - - /* Probe Response Max retries */ - tANI_U8 ucMaxProbeRespRetryLimit; - - /* To Enable Hidden ssid */ - tANI_U8 bHiddenSSIDEn; - - /* To Enable Disable FW Proxy Probe Resp */ - tANI_U8 bProxyProbeRespEn; - - /* Boolean to indicate if EDCA params are valid. UMAC might not have valid - EDCA params or might not desire to apply EDCA params during config BSS. - 0 implies Not Valid ; Non-Zero implies valid*/ - tANI_U8 edcaParamsValid; - - /*EDCA Parameters for Best Effort Access Category*/ - tSirMacEdcaParamRecord acbe; - - /*EDCA Parameters forBackground Access Category*/ - tSirMacEdcaParamRecord acbk; - - /*EDCA Parameters for Video Access Category*/ - tSirMacEdcaParamRecord acvi; - - /*EDCA Parameters for Voice Access Category*/ - tSirMacEdcaParamRecord acvo; - -#ifdef WLAN_FEATURE_VOWIFI_11R - tANI_U8 extSetStaKeyParamValid; //Ext Bss Config Msg if set - tSetStaKeyParams extSetStaKeyParam; //SetStaKeyParams for ext bss msg -#endif - - /* Persona for the BSS can be STA,AP,GO,CLIENT value same as tHalConMode */ - tANI_U8 halPersona; - - tANI_U8 bSpectrumMgtEnable; - - /*HAL fills in the tx power used for mgmt frames in txMgmtPower*/ - tANI_S8 txMgmtPower; - /*maxTxPower has max power to be used after applying the power constraint if any */ - tANI_S8 maxTxPower; - /*Context of the station being added in HW - Add a STA entry for "itself" - - On AP - Add the AP itself in an "STA context" - On STA - Add the AP to which this STA is joining in an "STA context" */ - tConfigStaParams_V1 staContext; - - tANI_U8 vhtCapable; - tANI_U8 vhtTxChannelWidthSet; -} tConfigBssParams_V1, * tpConfigBssParams_V1; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - PACKED_PRE union PACKED_POST { - tConfigBssParams configBssParams; - tConfigBssParams_V1 configBssParams_V1; - }uBssParams; -} tConfigBssReqMsg, *tpConfigBssReqMsg; - -/*--------------------------------------------------------------------------- - WLAN_HAL_CONFIG_BSS_RSP ----------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /* Success or Failure */ - tANI_U32 status; - - /* BSS index allocated by HAL */ - tANI_U8 bssIdx; - - /* DPU descriptor index for PTK */ - tANI_U8 dpuDescIndx; - - /* PTK DPU signature */ - tANI_U8 ucastDpuSignature; - - /* DPU descriptor index for GTK*/ - tANI_U8 bcastDpuDescIndx; - - /* GTK DPU signature */ - tANI_U8 bcastDpuSignature; - - /*DPU descriptor for IGTK*/ - tANI_U8 mgmtDpuDescIndx; - - /* IGTK DPU signature */ - tANI_U8 mgmtDpuSignature; - - /* Station Index for BSS entry*/ - tANI_U8 bssStaIdx; - - /* Self station index for this BSS */ - tANI_U8 bssSelfStaIdx; - - /* Bcast station for buffering bcast frames in AP role */ - tANI_U8 bssBcastStaIdx; - - /*MAC Address of STA(PEER/SELF) in staContext of configBSSReq*/ - tSirMacAddr staMac; - - /*HAL fills in the tx power used for mgmt frames in this field. */ - tANI_S8 txMgmtPower; - -} tConfigBssRspParams, * tpConfigBssRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tConfigBssRspParams configBssRspParams; -} tConfigBssRspMsg, *tpConfigBssRspMsg; - -/*--------------------------------------------------------------------------- - WLAN_HAL_DELETE_BSS_REQ ----------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /* BSS index to be deleted */ - tANI_U8 bssIdx; - -} tDeleteBssParams, *tpDeleteBssParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tDeleteBssParams deleteBssParams; -} tDeleteBssReqMsg, *tpDeleteBssReqMsg; - -/*--------------------------------------------------------------------------- - WLAN_HAL_DELETE_BSS_RSP ----------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /* Success or Failure */ - tANI_U32 status; - - /* BSS index that has been deleted */ - tANI_U8 bssIdx; - -} tDeleteBssRspParams, *tpDeleteBssRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tDeleteBssRspParams deleteBssRspParams; -} tDeleteBssRspMsg, *tpDeleteBssRspMsg; - -/*--------------------------------------------------------------------------- - WLAN_HAL_JOIN_REQ ----------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /*Indicates the BSSID to which STA is going to associate*/ - tSirMacAddr bssId; - - /*Indicates the channel to switch to.*/ - tANI_U8 ucChannel; - - /* Self STA MAC */ - tSirMacAddr selfStaMacAddr; - - /*Local power constraint*/ - tANI_U8 ucLocalPowerConstraint; - - /*Secondary channel offset */ - ePhyChanBondState secondaryChannelOffset; - - /*link State*/ - tSirLinkState linkState; - - /* Max TX power */ - tANI_S8 maxTxPower; - -} tHalJoinReqParams, *tpHalJoinReqParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalJoinReqParams joinReqParams; -} tHalJoinReqMsg, *tpHalJoinReqMsg; - -/*--------------------------------------------------------------------------- - WLAN_HAL_JOIN_RSP ----------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /*success or failure */ - tANI_U32 status; - - /* HAL fills in the tx power used for mgmt frames in this field */ - tPowerdBm txMgmtPower; - -}tHalJoinRspParams, *tpHalJoinRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalJoinRspParams joinRspParams; -}tHalJoinRspMsg, *tpHalJoinRspMsg; - -/*--------------------------------------------------------------------------- - WLAN_HAL_POST_ASSOC_REQ ----------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - tConfigStaParams configStaParams; - tConfigBssParams configBssParams; -} tPostAssocReqParams, *tpPostAssocReqParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tPostAssocReqParams postAssocReqParams; -} tPostAssocReqMsg, *tpPostAssocReqMsg; - -/*--------------------------------------------------------------------------- - WLAN_HAL_POST_ASSOC_RSP ----------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - tConfigStaRspParams configStaRspParams; - tConfigBssRspParams configBssRspParams; -} tPostAssocRspParams, *tpPostAssocRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tPostAssocRspParams postAssocRspParams; -} tPostAssocRspMsg, *tpPostAssocRspMsg; - -/*--------------------------------------------------------------------------- - WLAN_HAL_SET_BSSKEY_REQ ----------------------------------------------------------------------------*/ - -/* - * This is used by PE to create a set of WEP keys for a given BSS. - */ -typedef PACKED_PRE struct PACKED_POST -{ - /*BSS Index of the BSS*/ - tANI_U8 bssIdx; - - /*Encryption Type used with peer*/ - tAniEdType encType; - - /*Number of keys*/ - tANI_U8 numKeys; - - /*Array of keys.*/ - tSirKeys key[SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS]; - - /*Control for Replay Count, 1= Single TID based replay count on Tx - 0 = Per TID based replay count on TX */ - tANI_U8 singleTidRc; -} tSetBssKeyParams, *tpSetBssKeyParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tSetBssKeyParams setBssKeyParams; -} tSetBssKeyReqMsg, *tpSetBssKeyReqMsg; - -/* tagged version of set bss key */ -typedef PACKED_PRE struct PACKED_POST -{ - tSetBssKeyReqMsg Msg; - uint32 Tag; -} tSetBssKeyReqMsgTagged; - -/*--------------------------------------------------------------------------- - WLAN_HAL_SET_BSSKEY_RSP ----------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /*success or failure */ - tANI_U32 status; - -} tSetBssKeyRspParams, *tpSetBssKeyRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tSetBssKeyRspParams setBssKeyRspParams; -} tSetBssKeyRspMsg, *tpSetBssKeyRspMsg; - -/*--------------------------------------------------------------------------- - WLAN_HAL_SET_STAKEY_REQ, ----------------------------------------------------------------------------*/ - -/* - * This is used by PE to configure the key information on a given station. - * When the secType is WEP40 or WEP104, the defWEPIdx is used to locate - * a preconfigured key from a BSS the station assoicated with; otherwise - * a new key descriptor is created based on the key field. - */ - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tSetStaKeyParams setStaKeyParams; -} tSetStaKeyReqMsg, *tpSetStaKeyReqMsg; - -/*--------------------------------------------------------------------------- - WLAN_HAL_SET_STAKEY_RSP, ----------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /*success or failure */ - tANI_U32 status; - -} tSetStaKeyRspParams, *tpSetStaKeyRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tSetStaKeyRspParams setStaKeyRspParams; -} tSetStaKeyRspMsg, *tpSetStaKeyRspMsg; - -/*--------------------------------------------------------------------------- - WLAN_HAL_RMV_BSSKEY_REQ, ----------------------------------------------------------------------------*/ -/* - * This is used by PE to remove keys for a given BSS. - */ -typedef PACKED_PRE struct PACKED_POST - -{ - /*BSS Index of the BSS*/ - tANI_U8 bssIdx; - - /*Encryption Type used with peer*/ - tAniEdType encType; - - /*Key Id*/ - tANI_U8 keyId; - - /*STATIC/DYNAMIC. Used in Nullifying in Key Descriptors for Static/Dynamic keys*/ - tAniWepType wepType; - -} tRemoveBssKeyParams, *tpRemoveBssKeyParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tRemoveBssKeyParams removeBssKeyParams; -} tRemoveBssKeyReqMsg, *tpRemoveBssKeyReqMsg; - -/*--------------------------------------------------------------------------- - WLAN_HAL_RMV_BSSKEY_RSP, ----------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /*success or failure */ - tANI_U32 status; - -} tRemoveBssKeyRspParams, *tpRemoveBssKeyRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tRemoveBssKeyRspParams removeBssKeyRspParams; -} tRemoveBssKeyRspMsg, *tpRemoveBssKeyRspMsg; - -/*--------------------------------------------------------------------------- - WLAN_HAL_RMV_STAKEY_REQ, ----------------------------------------------------------------------------*/ -/* - * This is used by PE to Remove the key information on a given station. - */ -typedef PACKED_PRE struct PACKED_POST -{ - /*STA Index*/ - tANI_U16 staIdx; - - /*Encryption Type used with peer*/ - tAniEdType encType; - - /*Key Id*/ - tANI_U8 keyId; - - /*Whether to invalidate the Broadcast key or Unicast key. In case of WEP, - the same key is used for both broadcast and unicast.*/ - tANI_BOOLEAN unicast; - -} tRemoveStaKeyParams, *tpRemoveStaKeyParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tRemoveStaKeyParams removeStaKeyParams; -} tRemoveStaKeyReqMsg, *tpRemoveStaKeyReqMsg; - -/*--------------------------------------------------------------------------- - WLAN_HAL_RMV_STAKEY_RSP, ----------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /*success or failure */ - tANI_U32 status; -} tRemoveStaKeyRspParams, *tpRemoveStaKeyRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tRemoveStaKeyRspParams removeStaKeyRspParams; -} tRemoveStaKeyRspMsg, *tpRemoveStaKeyRspMsg; - -#ifdef FEATURE_OEM_DATA_SUPPORT - -#ifndef OEM_DATA_REQ_SIZE -#ifdef QCA_WIFI_2_0 -#define OEM_DATA_REQ_SIZE 276 -#else -#define OEM_DATA_REQ_SIZE 134 -#endif -#endif - -#ifndef OEM_DATA_RSP_SIZE -#ifdef QCA_WIFI_2_0 -#define OEM_DATA_RSP_SIZE 1720 -#else -#define OEM_DATA_RSP_SIZE 1968 -#endif -#endif - -/*------------------------------------------------------------------------- -WLAN_HAL_START_OEM_DATA_REQ ---------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U32 status; - tSirMacAddr selfMacAddr; - tANI_U8 oemDataReq[OEM_DATA_REQ_SIZE]; -} tStartOemDataReqParams, *tpStartOemDataReqParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tStartOemDataReqParams startOemDataReqParams; -} tStartOemDataReqMsg, *tpStartOemDataReqMsg; - -/*------------------------------------------------------------------------- -WLAN_HAL_START_OEM_DATA_RSP ---------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 oemDataRsp[OEM_DATA_RSP_SIZE]; -} tStartOemDataRspParams, *tpStartOemDataRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tStartOemDataRspParams startOemDataRspParams; -} tStartOemDataRspMsg, *tpStartOemDataRspMsg; - -#endif - - - -/*--------------------------------------------------------------------------- -WLAN_HAL_CH_SWITCH_REQ ----------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /* Channel number */ - tANI_U8 channelNumber; - - /* Local power constraint */ - tANI_U8 localPowerConstraint; - - /*Secondary channel offset */ - ePhyChanBondState secondaryChannelOffset; - - //HAL fills in the tx power used for mgmt frames in this field. - tPowerdBm txMgmtPower; - - /* Max TX power */ - tPowerdBm maxTxPower; - - /* Self STA MAC */ - tSirMacAddr selfStaMacAddr; - - /*VO WIFI comment: BSSID needed to identify session. As the request has power constraints, - this should be applied only to that session*/ - /* Since MTU timing and EDCA are sessionized, this struct needs to be sessionized and - * bssid needs to be out of the VOWifi feature flag */ - /* V IMP: Keep bssId field at the end of this msg. It is used to mantain backward compatbility - * by way of ignoring if using new host/old FW or old host/new FW since it is at the end of this struct - */ - tSirMacAddr bssId; - -}tSwitchChannelParams, *tpSwitchChannelParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tSwitchChannelParams switchChannelParams; -} tSwitchChannelReqMsg, *tpSwitchChannelReqMsg; - -/*--------------------------------------------------------------------------- -WLAN_HAL_CH_SWITCH_RSP ----------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /* Status */ - tANI_U32 status; - - /* Channel number - same as in request*/ - tANI_U8 channelNumber; - - /* HAL fills in the tx power used for mgmt frames in this field */ - tPowerdBm txMgmtPower; - - /* BSSID needed to identify session - same as in request*/ - tSirMacAddr bssId; - -}tSwitchChannelRspParams, *tpSwitchChannelRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tSwitchChannelRspParams switchChannelRspParams; -} tSwitchChannelRspMsg, *tpSwitchChannelRspMsg; - -/*--------------------------------------------------------------------------- -WLAN_HAL_UPD_EDCA_PARAMS_REQ ----------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /*BSS Index*/ - tANI_U16 bssIdx; - - /* Best Effort */ - tSirMacEdcaParamRecord acbe; - - /* Background */ - tSirMacEdcaParamRecord acbk; - - /* Video */ - tSirMacEdcaParamRecord acvi; - - /* Voice */ - tSirMacEdcaParamRecord acvo; - -} tEdcaParams, *tpEdcaParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tEdcaParams edcaParams; -} tUpdateEdcaParamsReqMsg, *tpUpdateEdcaParamsReqMsg; - -/*--------------------------------------------------------------------------- -WLAN_HAL_UPD_EDCA_PARAMS_RSP ----------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /*success or failure */ - tANI_U32 status; -} tEdcaRspParams, *tpEdcaRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tEdcaRspParams edcaRspParams; -} tUpdateEdcaParamsRspMsg, *tpUpdateEdcaParamsRspMsg; - - - -/*--------------------------------------------------------------------------- - * WLAN_HAL_GET_STATS_REQ - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST - -{ - /* Index of STA to which the statistics */ - tANI_U16 staIdx; - - /* Encryption mode */ - tANI_U8 encMode; - - /* status */ - tANI_U32 status; - - /* Statistics */ - tANI_U32 sendBlocks; - tANI_U32 recvBlocks; - tANI_U32 replays; - tANI_U8 micErrorCnt; - tANI_U32 protExclCnt; - tANI_U16 formatErrCnt; - tANI_U16 unDecryptableCnt; - tANI_U32 decryptErrCnt; - tANI_U32 decryptOkCnt; -} tDpuStatsParams, * tpDpuStatsParams; - -typedef PACKED_PRE struct PACKED_POST -{ - /* Valid STA Idx for per STA stats request */ - tANI_U32 staId; - - /* Categories of stats requested as specified in eHalStatsMask*/ - tANI_U32 statsMask; -}tHalStatsReqParams, *tpHalStatsReqParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalStatsReqParams statsReqParams; -} tHalStatsReqMsg, *tpHalStatsReqMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_GET_STATS_RSP - *--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U32 retry_cnt[4]; //Total number of packets(per AC) that were successfully transmitted with retries - tANI_U32 multiple_retry_cnt[4]; //The number of MSDU packets and MMPDU frames per AC that the 802.11 - // station successfully transmitted after more than one retransmission attempt - - tANI_U32 tx_frm_cnt[4]; //Total number of packets(per AC) that were successfully transmitted - //(with and without retries, including multi-cast, broadcast) - tANI_U32 rx_frm_cnt; //Total number of packets that were successfully received - //(after appropriate filter rules including multi-cast, broadcast) - tANI_U32 frm_dup_cnt; //Total number of duplicate frames received successfully - tANI_U32 fail_cnt[4]; //Total number packets(per AC) failed to transmit - tANI_U32 rts_fail_cnt; //Total number of RTS/CTS sequence failures for transmission of a packet - tANI_U32 ack_fail_cnt; //Total number packets failed transmit because of no ACK from the remote entity - tANI_U32 rts_succ_cnt; //Total number of RTS/CTS sequence success for transmission of a packet - tANI_U32 rx_discard_cnt; //The sum of the receive error count and dropped-receive-buffer error count. - //HAL will provide this as a sum of (FCS error) + (Fail get BD/PDU in HW) - tANI_U32 rx_error_cnt; //The receive error count. HAL will provide the RxP FCS error global counter. - tANI_U32 tx_byte_cnt; //The sum of the transmit-directed byte count, transmit-multicast byte count - //and transmit-broadcast byte count. HAL will sum TPE UC/MC/BCAST global counters - //to provide this. -}tAniSummaryStatsInfo, *tpAniSummaryStatsInfo; - - -// defines tx_rate_flags -typedef enum eTxRateInfo -{ - eHAL_TX_RATE_LEGACY = 0x1, /* Legacy rates */ - eHAL_TX_RATE_HT20 = 0x2, /* HT20 rates */ - eHAL_TX_RATE_HT40 = 0x4, /* HT40 rates */ - eHAL_TX_RATE_SGI = 0x8, /* Rate with Short guard interval */ - eHAL_TX_RATE_LGI = 0x10, /* Rate with Long guard interval */ - eHAL_TX_RATE_VHT20 = 0x20, /* VHT 20 rates */ - eHAL_TX_RATE_VHT40 = 0x40, /* VHT 20 rates */ - eHAL_TX_RATE_VHT80 = 0x80, /* VHT 20 rates */ - eHAL_TX_RATE_VIRT = 0x100, /* Virtual Rate */ - eHAL_TX_RATE_MAX = WLAN_HAL_MAX_ENUM_SIZE -} tTxrateinfoflags, tTxRateInfoFlags; - - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U32 rx_frag_cnt; //The number of MPDU frames received by the 802.11 station for MSDU packets - //or MMPDU frames - tANI_U32 promiscuous_rx_frag_cnt; //The number of MPDU frames received by the 802.11 station for MSDU packets - //or MMPDU frames when a promiscuous packet filter was enabled - tANI_U32 rx_input_sensitivity; //The receiver input sensitivity referenced to a FER of 8% at an MPDU length - //of 1024 bytes at the antenna connector. Each element of the array shall correspond - //to a supported rate and the order shall be the same as the supporteRates parameter. - tANI_U32 max_pwr; //The maximum transmit power in dBm upto one decimal. - //for eg: if it is 10.5dBm, the value would be 105 - tANI_U32 sync_fail_cnt; //Number of times the receiver failed to synchronize with the incoming signal - //after detecting the sync in the preamble of the transmitted PLCP protocol data unit. - - tANI_U32 tx_rate; //Legacy transmit rate, in units of 500 kbit/sec, for the most - //recently transmitted frame - tANI_U32 mcs_index; //mcs index for HT20 and HT40 rates - tANI_U32 tx_rate_flags; //to differentiate between HT20 and - //HT40 rates; short and long guard interval -}tAniGlobalClassAStatsInfo, *tpAniGlobalClassAStatsInfo; - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U32 rx_wep_unencrypted_frm_cnt; //The number of unencrypted received MPDU frames that the MAC layer discarded when - //the IEEE 802.11 dot11ExcludeUnencrypted management information base (MIB) object - //is enabled - tANI_U32 rx_mic_fail_cnt; //The number of received MSDU packets that that the 802.11 station discarded - //because of MIC failures - tANI_U32 tkip_icv_err; //The number of encrypted MPDU frames that the 802.11 station failed to decrypt - //because of a TKIP ICV error - tANI_U32 aes_ccmp_format_err; //The number of received MPDU frames that the 802.11 discarded because of an - //invalid AES-CCMP format - tANI_U32 aes_ccmp_replay_cnt; //The number of received MPDU frames that the 802.11 station discarded because of - //the AES-CCMP replay protection procedure - tANI_U32 aes_ccmp_decrpt_err; //The number of received MPDU frames that the 802.11 station discarded because of - //errors detected by the AES-CCMP decryption algorithm - tANI_U32 wep_undecryptable_cnt; //The number of encrypted MPDU frames received for which a WEP decryption key was - //not available on the 802.11 station - tANI_U32 wep_icv_err; //The number of encrypted MPDU frames that the 802.11 station failed to decrypt - //because of a WEP ICV error - tANI_U32 rx_decrypt_succ_cnt; //The number of received encrypted packets that the 802.11 station successfully - //decrypted - tANI_U32 rx_decrypt_fail_cnt; //The number of encrypted packets that the 802.11 station failed to decrypt - -}tAniGlobalSecurityStats, *tpAniGlobalSecurityStats; - -typedef PACKED_PRE struct PACKED_POST -{ - tAniGlobalSecurityStats ucStats; - tAniGlobalSecurityStats mcbcStats; -}tAniGlobalClassBStatsInfo, *tpAniGlobalClassBStatsInfo; - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U32 rx_amsdu_cnt; //This counter shall be incremented for a received A-MSDU frame with the stations - //MAC address in the address 1 field or an A-MSDU frame with a group address in the - //address 1 field - tANI_U32 rx_ampdu_cnt; //This counter shall be incremented when the MAC receives an AMPDU from the PHY - tANI_U32 tx_20_frm_cnt; //This counter shall be incremented when a Frame is transmitted only on the - //primary channel - tANI_U32 rx_20_frm_cnt; //This counter shall be incremented when a Frame is received only on the primary channel - tANI_U32 rx_mpdu_in_ampdu_cnt; //This counter shall be incremented by the number of MPDUs received in the A-MPDU - //when an A-MPDU is received - tANI_U32 ampdu_delimiter_crc_err; //This counter shall be incremented when an MPDU delimiter has a CRC error when this - //is the first CRC error in the received AMPDU or when the previous delimiter has been - //decoded correctly -}tAniGlobalClassCStatsInfo, *tpAniGlobalClassCStatsInfo; - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U32 tx_frag_cnt[4]; //The number of MPDU frames that the 802.11 station transmitted and acknowledged - //through a received 802.11 ACK frame - tANI_U32 tx_ampdu_cnt; //This counter shall be incremented when an A-MPDU is transmitted - tANI_U32 tx_mpdu_in_ampdu_cnt; //This counter shall increment by the number of MPDUs in the AMPDU when an A-MPDU - //is transmitted -}tAniPerStaStatsInfo, *tpAniPerStaStatsInfo; - -typedef PACKED_PRE struct PACKED_POST -{ - /* Success or Failure */ - tANI_U32 status; - - /* STA Idx */ - tANI_U32 staId; - - /* Categories of STATS being returned as per eHalStatsMask*/ - tANI_U32 statsMask; - - /* message type is same as the request type */ - tANI_U16 msgType; - - /* length of the entire request, includes the pStatsBuf length too */ - tANI_U16 msgLen; - -} tHalStatsRspParams, *tpHalStatsRspParams; - - - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalStatsRspParams statsRspParams; -} tHalStatsRspMsg, *tpHalStatsRspMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_SET_LINK_ST_REQ - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - tSirMacAddr bssid; - tSirLinkState state; - tSirMacAddr selfMacAddr; -} tLinkStateParams, *tpLinkStateParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tLinkStateParams linkStateParams; -} tSetLinkStateReqMsg, *tpSetLinkStateReqMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_SET_LINK_ST_RSP - *--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /*success or failure */ - tANI_U32 status; -} tLinkStateRspParams, *tpLinkStateRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tLinkStateRspParams linkStateRspParams; -} tSetLinkStateRspMsg, *tpSetLinkStateRspMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_ADD_TS_REQ - *--------------------------------------------------------------------------*/ - -/* TSPEC Params */ -typedef __ani_attr_pre_packed struct sSirMacTSInfoTfc -{ - tANI_U16 trafficType : 1; - tANI_U16 tsid : 4; - tANI_U16 direction : 2; - tANI_U16 accessPolicy : 2; - tANI_U16 aggregation : 1; - tANI_U16 psb : 1; - tANI_U16 userPrio : 3; - tANI_U16 ackPolicy : 2; -} __ani_attr_packed tSirMacTSInfoTfc; - -/* Flag to schedule the traffic type */ -typedef __ani_attr_pre_packed struct sSirMacTSInfoSch -{ - tANI_U8 schedule : 1; - tANI_U8 rsvd : 7; -} __ani_attr_packed tSirMacTSInfoSch; - -/* Traffic and scheduling info */ -typedef __ani_attr_pre_packed struct sSirMacTSInfo -{ - tSirMacTSInfoTfc traffic; - tSirMacTSInfoSch schedule; -} __ani_attr_packed tSirMacTSInfo; - -/* Information elements */ -typedef __ani_attr_pre_packed struct sSirMacTspecIE -{ - tANI_U8 type; - tANI_U8 length; - tSirMacTSInfo tsinfo; - tANI_U16 nomMsduSz; - tANI_U16 maxMsduSz; - tANI_U32 minSvcInterval; - tANI_U32 maxSvcInterval; - tANI_U32 inactInterval; - tANI_U32 suspendInterval; - tANI_U32 svcStartTime; - tANI_U32 minDataRate; - tANI_U32 meanDataRate; - tANI_U32 peakDataRate; - tANI_U32 maxBurstSz; - tANI_U32 delayBound; - tANI_U32 minPhyRate; - tANI_U16 surplusBw; - tANI_U16 mediumTime; -}__ani_attr_packed tSirMacTspecIE; - -typedef PACKED_PRE struct PACKED_POST -{ - /* Station Index */ - tANI_U16 staIdx; - - /* TSPEC handler uniquely identifying a TSPEC for a STA in a BSS */ - tANI_U16 tspecIdx; - - /* To program TPE with required parameters */ - tSirMacTspecIE tspec; - - /* U-APSD Flags: 1b per AC. Encoded as follows: - b7 b6 b5 b4 b3 b2 b1 b0 = - X X X X BE BK VI VO */ - tANI_U8 uAPSD; - - /* These parameters are for all the access categories */ - tANI_U32 srvInterval[WLAN_HAL_MAX_AC]; // Service Interval - tANI_U32 susInterval[WLAN_HAL_MAX_AC]; // Suspend Interval - tANI_U32 delayInterval[WLAN_HAL_MAX_AC]; // Delay Interval - -} tAddTsParams, *tpAddTsParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tAddTsParams addTsParams; -} tAddTsReqMsg, *tpAddTsReqMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_ADD_TS_RSP - *--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /*success or failure */ - tANI_U32 status; -} tAddTsRspParams, *tpAddTsRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tAddTsRspParams addTsRspParams; -} tAddTsRspMsg, *tpAddTsRspMsg; - - -/*--------------------------------------------------------------------------- - * WLAN_HAL_DEL_TS_REQ - *--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /* Station Index */ - tANI_U16 staIdx; - - /* TSPEC identifier uniquely identifying a TSPEC for a STA in a BSS */ - tANI_U16 tspecIdx; - - /* To lookup station id using the mac address */ - tSirMacAddr bssId; - -} tDelTsParams, *tpDelTsParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tDelTsParams delTsParams; -} tDelTsReqMsg, *tpDelTsReqMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_DEL_TS_RSP - *--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /*success or failure */ - tANI_U32 status; -} tDelTsRspParams, *tpDelTsRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tDelTsRspParams delTsRspParams; -} tDelTsRspMsg, *tpDelTsRspMsg; - -/* End of TSpec Parameters */ - -/* Start of BLOCK ACK related Parameters */ - -/*--------------------------------------------------------------------------- - * WLAN_HAL_ADD_BA_SESSION_REQ - *--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /* Station Index */ - tANI_U16 staIdx; - - /* Peer MAC Address */ - tSirMacAddr peerMacAddr; - - /* ADDBA Action Frame dialog token - HAL will not interpret this object */ - tANI_U8 baDialogToken; - - /* TID for which the BA is being setup - This identifies the TC or TS of interest */ - tANI_U8 baTID; - - /* 0 - Delayed BA (Not supported) - 1 - Immediate BA */ - tANI_U8 baPolicy; - - /* Indicates the number of buffers for this TID (baTID) - NOTE - This is the requested buffer size. When this - is processed by HAL and subsequently by HDD, it is - possible that HDD may change this buffer size. Any - change in the buffer size should be noted by PE and - advertized appropriately in the ADDBA response */ - tANI_U16 baBufferSize; - - /* BA timeout in TU's 0 means no timeout will occur */ - tANI_U16 baTimeout; - - /* b0..b3 - Fragment Number - Always set to 0 - b4..b15 - Starting Sequence Number of first MSDU - for which this BA is setup */ - tANI_U16 baSSN; - - /* ADDBA direction - 1 - Originator - 0 - Recipient */ - tANI_U8 baDirection; -} tAddBASessionParams, *tpAddBASessionParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tAddBASessionParams addBASessionParams; -}tAddBASessionReqMsg, *tpAddBASessionReqMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_ADD_BA_SESSION_RSP - *--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /*success or failure */ - tANI_U32 status; - - /* Dialog token */ - tANI_U8 baDialogToken; - - /* TID for which the BA session has been setup */ - tANI_U8 baTID; - - /* BA Buffer Size allocated for the current BA session */ - tANI_U8 baBufferSize; - - tANI_U8 baSessionID; - - /* Reordering Window buffer */ - tANI_U8 winSize; - - /*Station Index to id the sta */ - tANI_U8 STAID; - - /* Starting Sequence Number */ - tANI_U16 SSN; -} tAddBASessionRspParams, *tpAddBASessionRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tAddBASessionRspParams addBASessionRspParams; -} tAddBASessionRspMsg, *tpAddBASessionRspMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_ADD_BA_REQ - *--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /* Session Id */ - tANI_U8 baSessionID; - - /* Reorder Window Size */ - tANI_U8 winSize; - -#ifdef FEATURE_ON_CHIP_REORDERING - tANI_BOOLEAN isReorderingDoneOnChip; -#endif -} tAddBAParams, *tpAddBAParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tAddBAParams addBAParams; -} tAddBAReqMsg, *tpAddBAReqMsg; - - -/*--------------------------------------------------------------------------- - * WLAN_HAL_ADD_BA_RSP - *--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /*success or failure */ - tANI_U32 status; - - /* Dialog token */ - tANI_U8 baDialogToken; - -} tAddBARspParams, *tpAddBARspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tAddBARspParams addBARspParams; -} tAddBARspMsg, *tpAddBARspMsg; - - -/*--------------------------------------------------------------------------- - * WLAN_HAL_TRIGGER_BA_REQ - *--------------------------------------------------------------------------*/ - - -typedef struct sAddBaInfo -{ - tANI_U16 fBaEnable : 1; - tANI_U16 startingSeqNum: 12; - tANI_U16 reserved : 3; -}tAddBaInfo, *tpAddBaInfo; - -typedef struct sTriggerBaRspCandidate -{ - tSirMacAddr staAddr; - tAddBaInfo baInfo[STACFG_MAX_TC]; -}tTriggerBaRspCandidate, *tpTriggerBaRspCandidate; - -typedef struct sTriggerBaCandidate -{ - tANI_U8 staIdx; - tANI_U8 tidBitmap; -}tTriggerBaReqCandidate, *tptTriggerBaReqCandidate; - -typedef PACKED_PRE struct PACKED_POST -{ - /* Session Id */ - tANI_U8 baSessionID; - - /* baCandidateCnt is followed by trigger BA - * Candidate List(tTriggerBaCandidate) - */ - tANI_U16 baCandidateCnt; - -} tTriggerBAParams, *tpTriggerBAParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tTriggerBAParams triggerBAParams; -} tTriggerBAReqMsg, *tpTriggerBAReqMsg; - - -/*--------------------------------------------------------------------------- - * WLAN_HAL_TRIGGER_BA_RSP - *--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - - /* TO SUPPORT BT-AMP */ - tSirMacAddr bssId; - - /* success or failure */ - tANI_U32 status; - - /* baCandidateCnt is followed by trigger BA - * Rsp Candidate List(tTriggerRspBaCandidate) - */ - tANI_U16 baCandidateCnt; - - -} tTriggerBARspParams, *tpTriggerBARspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tTriggerBARspParams triggerBARspParams; -} tTriggerBARspMsg, *tpTriggerBARspMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_DEL_BA_REQ - *--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /* Station Index */ - tANI_U16 staIdx; - - /* TID for which the BA session is being deleted */ - tANI_U8 baTID; - - /* DELBA direction - 1 - Originator - 0 - Recipient */ - tANI_U8 baDirection; -} tDelBAParams, *tpDelBAParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tDelBAParams delBAParams; -} tDelBAReqMsg, *tpDelBAReqMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_DEL_BA_RSP - *--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; -} tDelBARspParams, *tpDelBARspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tDelBARspParams delBARspParams; -} tDelBARspMsg, *tpDelBARspMsg; - - -#ifdef FEATURE_WLAN_CCX - -/*--------------------------------------------------------------------------- - * WLAN_HAL_TSM_STATS_REQ - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /* Traffic Id */ - tANI_U8 tsmTID; - - tSirMacAddr bssId; -} tTsmStatsParams, *tpTsmStatsParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tTsmStatsParams tsmStatsParams; -} tTsmStatsReqMsg, *tpTsmStatsReqMsg; - - -/*--------------------------------------------------------------------------- - * WLAN_HAL_TSM_STATS_RSP - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /*success or failure */ - tANI_U32 status; - - /* Uplink Packet Queue delay */ - tANI_U16 UplinkPktQueueDly; - - /* Uplink Packet Queue delay histogram */ - tANI_U16 UplinkPktQueueDlyHist[4]; - - /* Uplink Packet Transmit delay */ - tANI_U32 UplinkPktTxDly; - - /* Uplink Packet loss */ - tANI_U16 UplinkPktLoss; - - /* Uplink Packet count */ - tANI_U16 UplinkPktCount; - - /* Roaming count */ - tANI_U8 RoamingCount; - - /* Roaming Delay */ - tANI_U16 RoamingDly; -} tTsmStatsRspParams, *tpTsmStatsRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tTsmStatsRspParams tsmStatsRspParams; -} tTsmStatsRspMsg, *tpTsmStatsRspMsg; - - -#endif - -/*--------------------------------------------------------------------------- - * WLAN_HAL_SET_KEYDONE_MSG - *--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /*bssid of the keys */ - tANI_U8 bssidx; - tANI_U8 encType; -} tSetKeyDoneParams, *tpSetKeyDoneParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tSetKeyDoneParams setKeyDoneParams; -} tSetKeyDoneMsg, *tpSetKeyDoneMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_DOWNLOAD_NV_REQ - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /* Fragment sequence number of the NV Image. Note that NV Image might not - * fit into one message due to size limitation of the SMD channel FIFO. UMAC - * can hence choose to chop the NV blob into multiple fragments starting with - * seqeunce number 0, 1, 2 etc. The last fragment MUST be indicated by - * marking the isLastFragment field to 1. Note that all the NV blobs would be - * concatenated together by HAL without any padding bytes in between.*/ - tANI_U16 fragNumber; - - /* Is this the last fragment? When set to 1 it indicates that no more fragments - * will be sent by UMAC and HAL can concatenate all the NV blobs rcvd & proceed - * with the parsing. HAL would generate a WLAN_HAL_DOWNLOAD_NV_RSP to the - * WLAN_HAL_DOWNLOAD_NV_REQ after it receives each fragment */ - tANI_U16 isLastFragment; - - /* NV Image size (number of bytes) */ - tANI_U32 nvImgBufferSize; - - /* Following the 'nvImageBufferSize', there should be nvImageBufferSize - * bytes of NV Image i.e. uint8[nvImageBufferSize] */ -} tHalNvImgDownloadReqParams, *tpHalNvImgDownloadReqParams; - -typedef PACKED_PRE struct PACKED_POST -{ - /* Note: The length specified in tHalNvImgDownloadReqMsg messages should be - * header.msgLen = sizeof(tHalNvImgDownloadReqMsg) + nvImgBufferSize */ - tHalMsgHeader header; - tHalNvImgDownloadReqParams nvImageReqParams; -} tHalNvImgDownloadReqMsg, *tpHalNvImgDownloadReqMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_DOWNLOAD_NV_RSP - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /* Success or Failure. HAL would generate a WLAN_HAL_DOWNLOAD_NV_RSP - * after each fragment */ - tANI_U32 status; -} tHalNvImgDownloadRspParams, *tpHalNvImgDownloadRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalNvImgDownloadRspParams nvImageRspParams; -} tHalNvImgDownloadRspMsg, *tpHalNvImgDownloadRspMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_STORE_NV_IND - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /* NV Item */ - eNvTable tableID; - - /* Size of NV Blob */ - tANI_U32 nvBlobSize; - - /* Following the 'nvBlobSize', there should be nvBlobSize bytes of - * NV blob i.e. uint8[nvBlobSize] */ -} tHalNvStoreParams, *tpHalNvStoreParams; - -typedef PACKED_PRE struct PACKED_POST -{ - /* Note: The length specified in tHalNvStoreInd messages should be - * header.msgLen = sizeof(tHalNvStoreInd) + nvBlobSize */ - tHalMsgHeader header; - tHalNvStoreParams nvStoreParams; -} tHalNvStoreInd, *tpHalNvStoreInd; - -/* End of Block Ack Related Parameters */ - -/*--------------------------------------------------------------------------- - * WLAN_HAL_MIC_FAILURE_IND - *--------------------------------------------------------------------------*/ - -#define SIR_CIPHER_SEQ_CTR_SIZE 6 - -typedef PACKED_PRE struct PACKED_POST -{ - tSirMacAddr srcMacAddr; //address used to compute MIC - tSirMacAddr taMacAddr; //transmitter address - tSirMacAddr dstMacAddr; - tANI_U8 multicast; - tANI_U8 IV1; // first byte of IV - tANI_U8 keyId; // second byte of IV - tANI_U8 TSC[SIR_CIPHER_SEQ_CTR_SIZE]; // sequence number - tSirMacAddr rxMacAddr; // receive address -} tSirMicFailureInfo, *tpSirMicFailureInfo; - -/* Definition for MIC failure indication - MAC reports this each time a MIC failure occures on Rx TKIP packet - */ -typedef PACKED_PRE struct PACKED_POST -{ - tSirMacAddr bssId; // BSSID - tSirMicFailureInfo info; -} tSirMicFailureInd, *tpSirMicFailureInd; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tSirMicFailureInd micFailureInd; -} tMicFailureIndMsg, *tpMicFailureIndMsg; - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U16 opMode; - tANI_U16 staId; -}tUpdateVHTOpMode, *tpUpdateVHTOpMode; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tUpdateVHTOpMode updateVhtOpMode; -} tUpdateVhtOpModeReqMsg, *tpUpdateVhtOpModeReqMsg; - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U32 status; -} tUpdateVhtOpModeParamsRsp, *tpUpdateVhtOpModeParamsRsp; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tUpdateVhtOpModeParamsRsp updateVhtOpModeRspParam; -} tUpdateVhtOpModeParamsRspMsg, *tpUpdateVhtOpModeParamsRspMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_UPDATE_BEACON_REQ - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - - tANI_U8 bssIdx; - - //shortPreamble mode. HAL should update all the STA rates when it - //receives this message - tANI_U8 fShortPreamble; - //short Slot time. - tANI_U8 fShortSlotTime; - //Beacon Interval - tANI_U16 beaconInterval; - //Protection related - tANI_U8 llaCoexist; - tANI_U8 llbCoexist; - tANI_U8 llgCoexist; - tANI_U8 ht20MhzCoexist; - tANI_U8 llnNonGFCoexist; - tANI_U8 fLsigTXOPProtectionFullSupport; - tANI_U8 fRIFSMode; - - tANI_U16 paramChangeBitmap; -}tUpdateBeaconParams, *tpUpdateBeaconParams; - - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tUpdateBeaconParams updateBeaconParam; -} tUpdateBeaconReqMsg, *tpUpdateBeaconReqMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_UPDATE_BEACON_RSP - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U32 status; -} tUpdateBeaconRspParams, *tpUpdateBeaconRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tUpdateBeaconRspParams updateBeaconRspParam; -} tUpdateBeaconRspMsg, *tpUpdateBeaconRspMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_SEND_BEACON_REQ - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U32 beaconLength; //length of the template. - tANI_U8 beacon[BEACON_TEMPLATE_SIZE]; // Beacon data. - tSirMacAddr bssId; - tANI_U32 timIeOffset; //TIM IE offset from the beginning of the template. - tANI_U16 p2pIeOffset; //P2P IE offset from the begining of the template -}tSendBeaconParams, *tpSendBeaconParams; - - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tSendBeaconParams sendBeaconParam; -}tSendBeaconReqMsg, *tpSendBeaconReqMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_SEND_BEACON_RSP - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U32 status; -} tSendBeaconRspParams, *tpSendBeaconRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tSendBeaconRspParams sendBeaconRspParam; -} tSendBeaconRspMsg, *tpSendBeaconRspMsg; - -#ifdef FEATURE_5GHZ_BAND - -/*--------------------------------------------------------------------------- - * WLAN_HAL_ENABLE_RADAR_DETECT_REQ - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - tSirMacAddr BSSID; - tANI_U8 channel; -}tSirEnableRadarInfoType, *tptSirEnableRadarInfoType; - - -typedef PACKED_PRE struct PACKED_POST -{ - /* Link Parameters */ - tSirEnableRadarInfoType EnableRadarInfo; -}tEnableRadarReqParams, *tpEnableRadarReqParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tEnableRadarReqParams enableRadarReqParams; -}tEnableRadarReqMsg, *tpEnableRadarReqMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_ENABLE_RADAR_DETECT_RSP - *--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /* Link Parameters */ - tSirMacAddr BSSID; - /* success or failure */ - tANI_U32 status; -}tEnableRadarRspParams, *tpEnableRadarRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tEnableRadarRspParams enableRadarRspParams; -}tEnableRadarRspMsg, *tpEnableRadarRspMsg; - -/*--------------------------------------------------------------------------- - *WLAN_HAL_RADAR_DETECT_INTR_IND - *--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 radarDetChannel; -}tRadarDetectIntrIndParams, *tpRadarDetectIntrIndParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tRadarDetectIntrIndParams radarDetectIntrIndParams; -}tRadarDetectIntrIndMsg, *tptRadarDetectIntrIndMsg; - -/*--------------------------------------------------------------------------- - *WLAN_HAL_RADAR_DETECT_IND - *-------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /*channel number in which the RADAR detected*/ - tANI_U8 channelNumber; - - /*RADAR pulse width*/ - tANI_U16 radarPulseWidth; // in usecond - - /*Number of RADAR pulses */ - tANI_U16 numRadarPulse; -}tRadarDetectIndParams,*tpRadarDetectIndParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tRadarDetectIndParams radarDetectIndParams; -}tRadarDetectIndMsg, *tptRadarDetectIndMsg; - - -/*--------------------------------------------------------------------------- - *WLAN_HAL_GET_TPC_REPORT_REQ - *-------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - tSirMacAddr sta; - tANI_U8 dialogToken; - tANI_U8 txpower; -}tSirGetTpcReportReqParams, *tpSirGetTpcReportReqParams; - - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tSirGetTpcReportReqParams getTpcReportReqParams; -}tSirGetTpcReportReqMsg, *tpSirGetTpcReportReqMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_GET_TPC_REPORT_RSP - *--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; -}tSirGetTpcReportRspParams, *tpSirGetTpcReportRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tSirGetTpcReportRspParams getTpcReportRspParams; -}tSirGetTpcReportRspMsg, *tpSirGetTpcReportRspMsg; - -#endif - -/*--------------------------------------------------------------------------- - *WLAN_HAL_UPDATE_PROBE_RSP_TEMPLATE_REQ - *-------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 pProbeRespTemplate[BEACON_TEMPLATE_SIZE]; - tANI_U32 probeRespTemplateLen; - tANI_U32 ucProxyProbeReqValidIEBmap[8]; - tSirMacAddr bssId; - -}tSendProbeRespReqParams, *tpSendProbeRespReqParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tSendProbeRespReqParams sendProbeRespReqParams ; -}tSendProbeRespReqMsg, *tpSendProbeRespReqMsg; - -/*--------------------------------------------------------------------------- - *WLAN_HAL_UPDATE_PROBE_RSP_TEMPLATE_RSP - *--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; -}tSendProbeRespRspParams, *tpSendProbeRespRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tSendProbeRespRspParams sendProbeRespRspParams; -}tSendProbeRespRspMsg, *tpSendProbeRespRspMsg; - - -/*--------------------------------------------------------------------------- - *WLAN_HAL_UNKNOWN_ADDR2_FRAME_RX_IND - *--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; -}tSendUnkownFrameRxIndParams, *tpSendUnkownFrameRxIndParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tSendUnkownFrameRxIndParams sendUnkownFrameRxIndParams; -}tSendUnkownFrameRxIndMsg, *tpSendUnkownFrameRxIndMsg; - -/*--------------------------------------------------------------------------- - *WLAN_HAL_DELETE_STA_CONTEXT_IND - *--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U16 assocId; - tANI_U16 staId; - tSirMacAddr bssId; // TO SUPPORT BT-AMP - // HAL copies bssid from the sta table. - tSirMacAddr addr2; // - tANI_U16 reasonCode; // To unify the keepalive / unknown A2 / tim-based disa - -}tDeleteStaContextParams, *tpDeleteStaContextParams; - - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tDeleteStaContextParams deleteStaContextParams; -}tDeleteStaContextIndMsg, *tpDeleteStaContextIndMsg; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tANI_U8 assocId; - tANI_U8 staIdx; - tANI_U8 bssIdx; - tANI_U8 uReasonCode; - tANI_U32 uStatus; -} tIndicateDelSta, *tpIndicateDelSta; - -/*--------------------------------------------------------------------------- - *WLAN_HAL_SIGNAL_BTAMP_EVENT_REQ - *--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - tBtAmpEventType btAmpEventType; - -}tBtAmpEventParams, *tpBtAmpEventParams; - - - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tBtAmpEventParams btAmpEventParams; -}tBtAmpEventMsg, *tpBtAmpEventMsg; - -/*--------------------------------------------------------------------------- -*WLAN_HAL_SIGNAL_BTAMP_EVENT_RSP -*--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; -}tBtAmpEventRspParams, *tpBtAmpEventRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tBtAmpEventRspParams btAmpEventRspParams; -}tBtAmpEventRsp, *tpBtAmpEventRsp; - - -/*--------------------------------------------------------------------------- - *WLAN_HAL_TL_HAL_FLUSH_AC_REQ - *--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - // Station Index. originates from HAL - tANI_U8 ucSTAId; - - // TID for which the transmit queue is being flushed - tANI_U8 ucTid; - -}tTlHalFlushAcParams, *tpTlHalFlushAcParams; - - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tTlHalFlushAcParams tlHalFlushAcParam; -}tTlHalFlushAcReq, *tpTlHalFlushAcReq; - -/*--------------------------------------------------------------------------- -*WLAN_HAL_TL_HAL_FLUSH_AC_RSP -*--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - // Station Index. originates from HAL - tANI_U8 ucSTAId; - - // TID for which the transmit queue is being flushed - tANI_U8 ucTid; - - /* success or failure */ - tANI_U32 status; -}tTlHalFlushAcRspParams, *tpTlHalFlushAcRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tTlHalFlushAcRspParams tlHalFlushAcRspParam; -}tTlHalFlushAcRspMsg, *tpTlHalFlushAcRspMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_ENTER_IMPS_REQ - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; -} tHalEnterImpsReqMsg, *tpHalEnterImpsReqMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_EXIT_IMPS_REQ - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; -} tHalExitImpsReqMsg, *tpHalExitImpsReqMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_ENTER_BMPS_REQ - *--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 bssIdx; - //TBTT value derived from the last beacon -#ifndef BUILD_QWPTTSTATIC - tANI_U64 tbtt; -#endif - tANI_U8 dtimCount; - //DTIM period given to HAL during association may not be valid, - //if association is based on ProbeRsp instead of beacon. - tANI_U8 dtimPeriod; - - // For CCX and 11R Roaming - tANI_U32 rssiFilterPeriod; - tANI_U32 numBeaconPerRssiAverage; - tANI_U8 bRssiFilterEnable; - -} tHalEnterBmpsReqParams, *tpHalEnterBmpsReqParams; - - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalEnterBmpsReqParams enterBmpsReq; -} tHalEnterBmpsReqMsg, *tpHalEnterBmpsReqMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_EXIT_BMPS_REQ - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 sendDataNull; - tANI_U8 bssIdx; -} tHalExitBmpsReqParams, *tpHalExitBmpsReqParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalExitBmpsReqParams exitBmpsReqParams; -} tHalExitBmpsReqMsg, *tpHalExitBmpsReqMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_MISSED_BEACON_IND - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 bssIdx; -} tHalMissedBeaconIndParams, *tpHalMissedBeaconIndParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalMissedBeaconIndParams missedBeaconIndParams; -} tHalMissedBeaconIndMsg, *tpHalMissedBeaconIndMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_ADD_BCN_FILTER_REQ - *--------------------------------------------------------------------------*/ -/* Beacon Filtering data structures */ -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 offset; - tANI_U8 value; - tANI_U8 bitMask; - tANI_U8 ref; -} tEidByteInfo, *tpEidByteInfo; - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U16 capabilityInfo; - tANI_U16 capabilityMask; - tANI_U16 beaconInterval; - tANI_U16 ieNum; - tANI_U8 bssIdx; - tANI_U8 reserved; -} tBeaconFilterMsg, *tpBeaconFilterMsg; - -/* The above structure would be followed by multiple of below mentioned structure */ -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 elementId; - tANI_U8 checkIePresence; - tEidByteInfo byte; -} tBeaconFilterIe, *tpBeaconFilterIe; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tBeaconFilterMsg addBcnFilterParams; -} tHalAddBcnFilterReqMsg, *tpHalAddBcnFilterReqMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_REM_BCN_FILTER_REQ - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 ucIeCount; - tANI_U8 ucRemIeId[1]; -} tRemBeaconFilterMsg, *tpRemBeaconFilterMsg; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tRemBeaconFilterMsg remBcnFilterParams; -} tHalRemBcnFilterReqMsg, *tpHalRemBcnFilterReqMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_HOST_OFFLOAD_REQ - *--------------------------------------------------------------------------*/ -#define HAL_IPV4_ARP_REPLY_OFFLOAD 0 -#define HAL_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD 1 -#define HAL_IPV6_NS_OFFLOAD 2 -#define HAL_IPV6_ADDR_LEN 16 -#define HAL_MAC_ADDR_LEN 6 -#define HAL_OFFLOAD_DISABLE 0 -#define HAL_OFFLOAD_ENABLE 1 -#define HAL_OFFLOAD_BCAST_FILTER_ENABLE 0x2 -#define HAL_OFFLOAD_MCAST_FILTER_ENABLE 0x4 -#define HAL_OFFLOAD_ARP_AND_BCAST_FILTER_ENABLE (HAL_OFFLOAD_ENABLE|HAL_OFFLOAD_BCAST_FILTER_ENABLE) -#define HAL_OFFLOAD_IPV6NS_AND_MCAST_FILTER_ENABLE (HAL_OFFLOAD_ENABLE|HAL_OFFLOAD_MCAST_FILTER_ENABLE) - -typedef PACKED_PRE struct PACKED_POST _tHalNSOffloadParams -{ - tANI_U8 srcIPv6Addr[HAL_IPV6_ADDR_LEN]; - tANI_U8 selfIPv6Addr[HAL_IPV6_ADDR_LEN]; - //Only support 2 possible Network Advertisement IPv6 address - tANI_U8 targetIPv6Addr1[HAL_IPV6_ADDR_LEN]; - tANI_U8 targetIPv6Addr2[HAL_IPV6_ADDR_LEN]; - tANI_U8 selfMacAddr[HAL_MAC_ADDR_LEN]; - tANI_U8 srcIPv6AddrValid : 1; - tANI_U8 targetIPv6Addr1Valid : 1; - tANI_U8 targetIPv6Addr2Valid : 1; - tANI_U8 reserved1 : 5; - tANI_U8 reserved2; //make it DWORD aligned - tANI_U8 bssIdx; - tANI_U32 slotIndex; // slot index for this offload -} tHalNSOffloadParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 offloadType; - tANI_U8 enableOrDisable; - PACKED_PRE union PACKED_POST - { - tANI_U8 hostIpv4Addr [4]; - tANI_U8 hostIpv6Addr [HAL_IPV6_ADDR_LEN]; - } params; -} tHalHostOffloadReq, *tpHalHostOffloadReq; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalHostOffloadReq hostOffloadParams; - tHalNSOffloadParams nsOffloadParams; -} tHalHostOffloadReqMsg, *tpHalHostOffloadReqMsg; - - -#ifdef FEATURE_WLAN_LPHB -typedef enum -{ - WIFI_HB_SET_ENABLE = 0x0001, - WIFI_HB_SET_TCP_PARAMS = 0x0002, - WIFI_HB_SET_TCP_PKT_FILTER = 0x0003, - WIFI_HB_SET_UDP_PARAMS = 0x0004, - WIFI_HB_SET_UDP_PKT_FILTER = 0x0005, - WIFI_HB_SET_NETWORK_INFO = 0x0006, -}tLowPowerHeartBeatCmdType ; - -#define MAX_FLITER_SIZE 64 -/*--------------------------------------------------------------------------- - *FEATURE_WLAN_LPHB REQ - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - uint32 hostIpv4Addr; - uint32 destIpv4Addr; - uint16 hostPort; - uint16 destPort; - uint16 timeOutSec; // in seconds - tSirMacAddr gatewayMacAddr; - uint16 timePeriodSec; // in seconds - uint32 tcpSn; -} tlowPowerHeartBeatParamsTcpStruct; - -typedef PACKED_PRE struct PACKED_POST -{ - uint32 hostIpv4Addr; - uint32 destIpv4Addr; - uint16 hostPort; - uint16 destPort; - uint16 timePeriodSec;// in seconds - uint16 timeOutSec; // in seconds - tSirMacAddr gatewayMacAddr; -} tlowPowerHeartBeatParamsUdpStruct; - -typedef PACKED_PRE struct PACKED_POST -{ - uint32 offset; - uint32 filterLength; - uint8 filter[MAX_FLITER_SIZE]; -} tlowPowerHeartBeatFilterStruct; - -typedef PACKED_PRE struct PACKED_POST -{ - uint8 heartBeatEnable; - uint8 heartBeatType; //TCP or UDP -} tlowPowerHeartBeatEnableStruct; - -typedef PACKED_PRE struct PACKED_POST -{ - uint8 dummy; -} tlowPowerHeartBeatNetworkInfoStruct; - - -typedef PACKED_PRE struct PACKED_POST -{ - uint8 sessionIdx; - uint16 lowPowerHeartBeatCmdType; - PACKED_PRE union PACKED_PRO - { - tlowPowerHeartBeatEnableStruct control; - tlowPowerHeartBeatFilterStruct tcpUdpFilter; - tlowPowerHeartBeatParamsTcpStruct tcpParams; - tlowPowerHeartBeatParamsUdpStruct udpParams; - tlowPowerHeartBeatNetworkInfoStruct info; - }options; -} tHalLowPowerHeartBeatReq, *tpHalLowPowerHeartBeatReq; - - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalLowPowerHeartBeatReq lowPowerHeartBeatParams; -} tHalLowPowerHeartBeatReqMsg, *tpHalLowPowerHeartBeatReqMsg; - -/*--------------------------------------------------------------------------- - * FEATURE_WLAN_LPHB RSP - *--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - uint8 sessionIdx; - uint32 status; - uint16 lowPowerHeartBeatCmdType; -}tHalLowPowerHeartBeatRspParams, *tpHalLowPowerHeartBeatRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalLowPowerHeartBeatRspParams lowPowerHeartBeatRspParams; -}tHalLowPowerHeartBeatRspMsg, *tpHalLowPowerHeartBeatRspMsg; - - -/*--------------------------------------------------------------------------- - * FEATURE_WLAN_LPHB IND - *--------------------------------------------------------------------------*/ -#define WIFI_HB_EVENT_TCP_RX_TIMEOUT 0x0001 -#define WIFI_HB_EVENT_UDP_RX_TIMEOUT 0x0002 - -#define WIFI_LPHB_EVENT_REASON_TIMEOUT 0x01 -#define WIFI_LPHB_EVENT_REASON_FW_ON_MONITOR 0x02 -#define WIFI_LPHB_EVENT_REASON_FW_OFF_MONITOR 0x03 - - -#define WIFI_LPHB_PROTO_UDP 0x01 -#define WIFI_LPHB_PROTO_TCP 0x02 - -typedef PACKED_PRE struct PACKED_POST -{ - uint8 bssIdx; - uint8 sessionIdx; - uint8 protocolType; /*TCP or UDP*/ - uint8 eventReason; - -}tHalLowPowerHeartBeatIndParam,*tpHalLowPowerHeartBeatIndParam; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalLowPowerHeartBeatIndParam lowPowerHeartBeatIndParams; -}tHalLowPowerHeartBeatIndMsg, *tpHalLowPowerHeartBeatIndMsg; - -#endif - -#ifdef FEATURE_WLAN_BATCH_SCAN - -/*--------------------------------------------------------------------------- - * WLAN_HAL_BATCHSCAN_SET_REQ - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /* Scan Frerquency - default to 30Sec*/ - tANI_U32 scanInterval; - tANI_U32 numScan2Batch; - tANI_U32 bestNetworks; - tANI_U8 rfBand; - tANI_U8 rtt; -} tHalBatchScanSetParams, *tpHalBatchScanSetParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalBatchScanSetParams batchScanParams; -} tHalBatchScanSetReqMsg, *tpHalBatchScanSetReqMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_BATCHSCAN_SET_RSP - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U32 supportedMscan; -} tHalBatchScanSetRspParam, *tpHalBatchScanSetRspParam; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalBatchScanSetRspParam setBatchScanRspParam; -} tHalBatchScanSetRspMsg, *tpHalBatchScanSetRspMsg; - -/*--------------------------------------------------------------------------- -* WLAN_HAL_BATCHSCAN_STOP_IND -*--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U32 param; -} tHalBatchScanStopIndParam, *tpHalBatchScanStopIndParam; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalBatchScanStopIndParam param; -} tHalBatchScanStopIndMsg, *tpHalBatchScanStopIndMsg; - -/*--------------------------------------------------------------------------- -* WLAN_HAL_BATCHSCAN_TRIGGER_RESULT_IND -*--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U32 param; -} tHalBatchScanTriggerResultParam, *tpHalBatchScanTriggerResultParam; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalBatchScanTriggerResultParam param; -} tHalBatchScanTriggerResultIndMsg, *tpHalBatchScanTriggerResultIndMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_BATCHSCAN_GET_RSP - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 bssid[6]; /* BSSID */ - tANI_U8 ssid[32]; /* SSID */ - tANI_U8 ch; /* Channel */ - tANI_U8 rssi; /* RSSI or Level */ - /* Timestamp when Network was found. Used to calculate age based on timestamp in GET_RSP msg header */ - tANI_U32 timestamp; -} tHalBatchScanNetworkInfo, *tpHalBatchScanNetworkInfo; - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U32 scanId; /* Scan List ID. */ - /* No of AP in a Scan Result. Should be same as bestNetwork in SET_REQ msg */ - tANI_U32 numNetworksInScanList; - /* Variable data ptr: Number of AP in Scan List */ - /* following numNetworkInScanList is data of type tHalBatchScanNetworkInfo - * of sizeof(tHalBatchScanNetworkInfo) * numNetworkInScanList */ - tANI_U8 scanList[1]; -} tHalBatchScanList, *tpHalBatchScanList; - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U32 timestamp; - tANI_U32 numScanLists; - boolean isLastResult; - /* Variable Data ptr: Number of Scan Lists*/ - /* following isLastResult is data of type tHalBatchScanList - * of sizeof(tHalBatchScanList) * numScanLists*/ - tANI_U8 scanResults[1]; -} tHalBatchScanResultIndParam, *tpHalBatchScanResultIndParam; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalBatchScanResultIndParam resultIndMsgParam; -} tHalBatchScanResultIndMsg, *tpHalBatchScanResultIndMsg; - -#endif - -/*--------------------------------------------------------------------------- - * WLAN_HAL_KEEP_ALIVE_REQ - *--------------------------------------------------------------------------*/ -/* Packet Types. */ -#define HAL_KEEP_ALIVE_NULL_PKT 1 -#define HAL_KEEP_ALIVE_UNSOLICIT_ARP_RSP 2 - -/* Enable or disable keep alive */ -#define HAL_KEEP_ALIVE_DISABLE 0 -#define HAL_KEEP_ALIVE_ENABLE 1 - -/* Keep Alive request. */ -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 packetType; - tANI_U32 timePeriod; - tHalIpv4Addr hostIpv4Addr; - tHalIpv4Addr destIpv4Addr; - tSirMacAddr destMacAddr; - tANI_U8 bssIdx; -} tHalKeepAliveReq, *tpHalKeepAliveReq; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalKeepAliveReq KeepAliveParams; -} tHalKeepAliveReqMsg, *tpHalKeepAliveReqMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_SET_RSSI_THRESH_REQ - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - tANI_S8 ucRssiThreshold1 : 8; - tANI_S8 ucRssiThreshold2 : 8; - tANI_S8 ucRssiThreshold3 : 8; - tANI_U8 bRssiThres1PosNotify : 1; - tANI_U8 bRssiThres1NegNotify : 1; - tANI_U8 bRssiThres2PosNotify : 1; - tANI_U8 bRssiThres2NegNotify : 1; - tANI_U8 bRssiThres3PosNotify : 1; - tANI_U8 bRssiThres3NegNotify : 1; - tANI_U8 bReserved10 : 2; -} tHalRSSIThresholds, *tpHalRSSIThresholds; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalRSSIThresholds rssiThreshParams; -} tHalRSSIThresholdReqMsg, *tpHalRSSIThresholdReqMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_ENTER_UAPSD_REQ - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 bkDeliveryEnabled:1; - tANI_U8 beDeliveryEnabled:1; - tANI_U8 viDeliveryEnabled:1; - tANI_U8 voDeliveryEnabled:1; - tANI_U8 bkTriggerEnabled:1; - tANI_U8 beTriggerEnabled:1; - tANI_U8 viTriggerEnabled:1; - tANI_U8 voTriggerEnabled:1; - tANI_U8 bssIdx; -} tUapsdReqParams, *tpUapsdReqParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tUapsdReqParams enterUapsdParams; -} tHalEnterUapsdReqMsg, *tpHalEnterUapsdReqMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_EXIT_UAPSD_REQ - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tANI_U8 bssIdx; -} tHalExitUapsdReqMsg, *tpHalExitUapsdReqMsg; - -#define HAL_PERIODIC_TX_PTRN_MAX_SIZE 1536 -#define HAL_MAXNUM_PERIODIC_TX_PTRNS 6 -/*--------------------------------------------------------------------------- - * WLAN_HAL_ADD_PERIODIC_TX_PTRN_IND - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U32 selfStaIdx:8; - tANI_U32 ucPtrnId:8; // Pattern ID - tANI_U32 usPtrnSize:16; // Non-Zero Pattern size - tANI_U32 uPtrnIntervalMs; // In msec - tANI_U8 ucPattern[HAL_PERIODIC_TX_PTRN_MAX_SIZE]; // Pattern buffer -} tHalAddPeriodicTxPtrn, *tpHalAddPeriodicTxPtrn; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalAddPeriodicTxPtrn ptrnParams; -} tHalAddPeriodicTxPtrnIndMsg, *tpHalAddPeriodicTxPtrnIndMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_DEL_PERIODIC_TX_PTRN_IND - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U32 selfStaIdx:8; - tANI_U32 rsvd:24; - /* Bitmap of pattern IDs that needs to be deleted */ - tANI_U32 uPatternIdBitmap; -} tHalDelPeriodicTxPtrn, *tpHalDelPeriodicTxPtrn; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalDelPeriodicTxPtrn ptrnParams; -} tHalDelPeriodicTxPtrnIndMsg, *tpHalDelPeriodicTxPtrnIndMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_PERIODIC_TX_PTRN_FW_IND - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /* Type of Failure indication */ - tANI_U32 bssIdx:8; - tANI_U32 selfStaIdx:8; - tANI_U32 rsvd:16; - tANI_U32 status; - tANI_U32 patternIdBitmap; -} tHalPeriodicTxPtrnFwInd, *tpHalPeriodicTxPtrnFwInd; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalPeriodicTxPtrnFwInd fwIndParams; -} tHalPeriodicTxPtrnFwIndMsg, *tpHalPeriodicTxPtrnFwIndMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_ADD_WOWL_BCAST_PTRN - *--------------------------------------------------------------------------*/ -#define HAL_WOWL_BCAST_PATTERN_MAX_SIZE 128 -#define HAL_WOWL_BCAST_MAX_NUM_PATTERNS 16 - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 ucPatternId; // Pattern ID - // Pattern byte offset from beginning of the 802.11 packet to start of the - // wake-up pattern - tANI_U8 ucPatternByteOffset; - tANI_U8 ucPatternSize; // Non-Zero Pattern size - tANI_U8 ucPattern[HAL_WOWL_BCAST_PATTERN_MAX_SIZE]; // Pattern - tANI_U8 ucPatternMaskSize; // Non-zero pattern mask size - tANI_U8 ucPatternMask[HAL_WOWL_BCAST_PATTERN_MAX_SIZE]; // Pattern mask - tANI_U8 ucPatternExt[HAL_WOWL_BCAST_PATTERN_MAX_SIZE]; // Extra pattern - tANI_U8 ucPatternMaskExt[HAL_WOWL_BCAST_PATTERN_MAX_SIZE]; // Extra pattern mask - tANI_U8 bssIdx; -} tHalWowlAddBcastPtrn, *tpHalWowlAddBcastPtrn; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalWowlAddBcastPtrn ptrnParams; -} tHalWowlAddBcastPtrnReqMsg, *tpHalWowlAddBcastPtrnReqMsg; - - - -/*--------------------------------------------------------------------------- - * WLAN_HAL_DEL_WOWL_BCAST_PTRN - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /* Pattern ID of the wakeup pattern to be deleted */ - tANI_U8 ucPatternId; - tANI_U8 bssIdx; -} tHalWowlDelBcastPtrn, *tpHalWowlDelBcastPtrn; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalWowlDelBcastPtrn ptrnParams; -} tHalWowlDelBcastPtrnReqMsg, *tpHalWowlDelBcastPtrnReqMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_ENTER_WOWL_REQ - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /* Enables/disables magic packet filtering */ - tANI_U8 ucMagicPktEnable; - - /* Magic pattern */ - tSirMacAddr magicPtrn; - - /* Enables/disables packet pattern filtering in firmware. - Enabling this flag enables broadcast pattern matching - in Firmware. If unicast pattern matching is also desired, - ucUcastPatternFilteringEnable flag must be set tot true - as well - */ - tANI_U8 ucPatternFilteringEnable; - - /* Enables/disables unicast packet pattern filtering. - This flag specifies whether we want to do pattern match - on unicast packets as well and not just broadcast packets. - This flag has no effect if the ucPatternFilteringEnable - (main controlling flag) is set to false - */ - tANI_U8 ucUcastPatternFilteringEnable; - - /* This configuration is valid only when magicPktEnable=1. - * It requests hardware to wake up when it receives the - * Channel Switch Action Frame. - */ - tANI_U8 ucWowChnlSwitchRcv; - - /* This configuration is valid only when magicPktEnable=1. - * It requests hardware to wake up when it receives the - * Deauthentication Frame. - */ - tANI_U8 ucWowDeauthRcv; - - /* This configuration is valid only when magicPktEnable=1. - * It requests hardware to wake up when it receives the - * Disassociation Frame. - */ - tANI_U8 ucWowDisassocRcv; - - /* This configuration is valid only when magicPktEnable=1. - * It requests hardware to wake up when it has missed - * consecutive beacons. This is a hardware register - * configuration (NOT a firmware configuration). - */ - tANI_U8 ucWowMaxMissedBeacons; - - /* This configuration is valid only when magicPktEnable=1. - * This is a timeout value in units of microsec. It requests - * hardware to unconditionally wake up after it has stayed - * in WoWLAN mode for some time. Set 0 to disable this feature. - */ - tANI_U8 ucWowMaxSleepUsec; - - /* This configuration directs the WoW packet filtering to look for EAP-ID - * requests embedded in EAPOL frames and use this as a wake source. - */ - tANI_U8 ucWoWEAPIDRequestEnable; - - /* This configuration directs the WoW packet filtering to look for EAPOL-4WAY - * requests and use this as a wake source. - */ - tANI_U8 ucWoWEAPOL4WayEnable; - - /* This configuration allows a host wakeup on an network scan offload match. - */ - tANI_U8 ucWowNetScanOffloadMatch; - - /* This configuration allows a host wakeup on any GTK rekeying error. - */ - tANI_U8 ucWowGTKRekeyError; - - /* This configuration allows a host wakeup on BSS connection loss. - */ - tANI_U8 ucWoWBSSConnLoss; - - tANI_U8 bssIdx; - -} tHalWowlEnterParams, *tpHalWowlEnterParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalWowlEnterParams enterWowlParams; -} tHalWowlEnterReqMsg, *tpHalWowlEnterReqMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_EXIT_WOWL_REQ - *--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 bssIdx; - -} tHalWowlExitParams, *tpHalWowlExitParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalWowlExitParams exitWowlParams; -} tHalWowlExitReqMsg, *tpHalWowlExitReqMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_GET_RSSI_REQ - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; -} tHalGetRssiReqMsg, *tpHalGetRssiReqMsg; - -typedef PACKED_PRE struct PACKED_POST -{ - /* Valid STA Idx for per STA stats request */ - tANI_U32 staId; - -}tHalRoamRssiReqParams, *tpHalRoamRssiReqParams; - - -/*--------------------------------------------------------------------------- - * WLAN_HAL_GET_ROAM_RSSI_REQ - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalRoamRssiReqParams roamRssiReqParams; -} tHalGetRoamRssiReqMsg, *tpHalGetRoamRssiReqMsg; - - -/*--------------------------------------------------------------------------- - * WLAN_HAL_SET_UAPSD_AC_PARAMS_REQ - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST { - tANI_U8 staidx; // STA index - tANI_U8 ac; // Access Category - tANI_U8 up; // User Priority - tANI_U32 srvInterval; // Service Interval - tANI_U32 susInterval; // Suspend Interval - tANI_U32 delayInterval; // Delay Interval -} tUapsdInfo, tpUapsdInfo; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tUapsdInfo enableUapsdAcParams; -} tHalSetUapsdAcParamsReqMsg, *tpHalSetUapsdAcParamsReqMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_CONFIGURE_RXP_FILTER_REQ - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST { - tANI_U8 setMcstBcstFilterSetting; - tANI_U8 setMcstBcstFilter; -} tHalConfigureRxpFilterReqParams, tpHalConfigureRxpFilterReqParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalConfigureRxpFilterReqParams configureRxpFilterReqParams; -} tHalConfigureRxpFilterReqMsg, *tpHalConfigureRxpFilterReqMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_ENTER_IMPS_RSP - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; -} tHalEnterImpsRspParams, *tpHalEnterImpsRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalEnterImpsRspParams enterImpsRspParams; -} tHalEnterImpsRspMsg, *tpHalEnterImpsRspMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_EXIT_IMPS_RSP - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; -} tHalExitImpsRspParams, *tpHalExitImpsRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalExitImpsRspParams exitImpsRspParams; -} tHalExitImpsRspMsg, *tpHalExitImpsRspMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_ENTER_BMPS_RSP - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; - tANI_U8 bssIdx; -} tHalEnterBmpsRspParams, *tpHalEnterBmpsRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalEnterBmpsRspParams enterBmpsRspParams; -} tHalEnterBmpsRspMsg, *tpHalEnterBmpsRspMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_EXIT_BMPS_RSP - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; - tANI_U8 bssIdx; -} tHalExitBmpsRspParams, *tpHalExitBmpsRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalExitBmpsRspParams exitBmpsRspParams; -} tHalExitBmpsRspMsg, *tpHalExitBmpsRspMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_ENTER_UAPSD_RSP - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; - tANI_U8 bssIdx; -}tUapsdRspParams, *tpUapsdRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tUapsdRspParams enterUapsdRspParams; -} tHalEnterUapsdRspMsg, *tpHalEnterUapsdRspMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_EXIT_UAPSD_RSP - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; - tANI_U8 bssIdx; -} tHalExitUapsdRspParams, *tpHalExitUapsdRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalExitUapsdRspParams exitUapsdRspParams; -} tHalExitUapsdRspMsg, *tpHalExitUapsdRspMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_RSSI_NOTIFICATION_IND - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U32 bRssiThres1PosCross : 1; - tANI_U32 bRssiThres1NegCross : 1; - tANI_U32 bRssiThres2PosCross : 1; - tANI_U32 bRssiThres2NegCross : 1; - tANI_U32 bRssiThres3PosCross : 1; - tANI_U32 bRssiThres3NegCross : 1; - tANI_U32 avgRssi : 8; - tANI_U32 uBssIdx : 8; - tANI_U32 isBTCoexCompromise : 1; - tANI_U32 bReserved : 9; -} tHalRSSINotification, *tpHalRSSINotification; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalRSSINotification rssiNotificationParams; -} tHalRSSINotificationIndMsg, *tpHalRSSINotificationIndMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_GET_RSSI_RSP - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; - tANI_S8 rssi; -} tHalGetRssiParams, *tpHalGetRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalGetRssiParams rssiRspParams; -} tHalGetRssiRspMsg, *tpHalGetRssiRspMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_GET_ROAM_RSSI_RSP - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; - - tANI_U8 staId; - tANI_S8 rssi; -} tHalGetRoamRssiParams, *tpHalGetRoamRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalGetRoamRssiParams roamRssiRspParams; -} tHalGetRoamRssiRspMsg, *tpHalGetRoamRssiRspMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_ENTER_WOWL_RSP - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; - tANI_U8 bssIdx; -} tHalEnterWowlRspParams, *tpHalEnterWowlRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalEnterWowlRspParams enterWowlRspParams; -} tHalWowlEnterRspMsg, *tpHalWowlEnterRspMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_EXIT_WOWL_RSP - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; - tANI_U8 bssIdx; -} tHalExitWowlRspParams, *tpHalExitWowlRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalExitWowlRspParams exitWowlRspParams; -} tHalWowlExitRspMsg, *tpHalWowlExitRspMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_ADD_BCN_FILTER_RSP - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; -} tHalAddBcnFilterRspParams, *tpHalAddBcnFilterRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalAddBcnFilterRspParams addBcnFilterRspParams; -} tHalAddBcnFilterRspMsg, *tpHalAddBcnFilterRspMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_REM_BCN_FILTER_RSP - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; -} tHalRemBcnFilterRspParams, *tpHalRemBcnFilterRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalRemBcnFilterRspParams remBcnFilterRspParams; -} tHalRemBcnFilterRspMsg, *tpHalRemBcnFilterRspMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_ADD_WOWL_BCAST_PTRN_RSP - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; - tANI_U8 bssIdx; -} tHalAddWowlBcastPtrnRspParams, *tpHalAddWowlBcastPtrnRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalAddWowlBcastPtrnRspParams addWowlBcastPtrnRspParams; -} tHalAddWowlBcastPtrnRspMsg, *tpHalAddWowlBcastPtrnRspMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_DEL_WOWL_BCAST_PTRN_RSP - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; - tANI_U8 bssIdx; -} tHalDelWowlBcastPtrnRspParams, *tpHalDelWowlBcastPtrnRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalDelWowlBcastPtrnRspParams delWowlBcastRspParams; -} tHalDelWowlBcastPtrnRspMsg, *tpHalDelWowlBcastPtrnRspMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_HOST_OFFLOAD_RSP - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; -} tHalHostOffloadRspParams, *tpHalHostOffloadRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalHostOffloadRspParams hostOffloadRspParams; -} tHalHostOffloadRspMsg, *tpHalHostOffloadRspMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_KEEP_ALIVE_RSP - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; -} tHalKeepAliveRspParams, *tpHalKeepAliveRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalKeepAliveRspParams keepAliveRspParams; -} tHalKeepAliveRspMsg, *tpHalKeepAliveRspMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_SET_RSSI_THRESH_RSP - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; -} tHalSetRssiThreshRspParams, *tpHalSetRssiThreshRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalSetRssiThreshRspParams setRssiThreshRspParams; -} tHalSetRssiThreshRspMsg, *tpHalSetRssiThreshRspMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_SET_UAPSD_AC_PARAMS_RSP - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; -} tHalSetUapsdAcParamsRspParams, *tpHalSetUapsdAcParamsRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalSetUapsdAcParamsRspParams setUapsdAcParamsRspParams; -} tHalSetUapsdAcParamsRspMsg, *tpHalSetUapsdAcParamsRspMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_CONFIGURE_RXP_FILTER_RSP - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; -} tHalConfigureRxpFilterRspParams, *tpHalConfigureRxpFilterRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalConfigureRxpFilterRspParams configureRxpFilterRspParams; -} tHalConfigureRxpFilterRspMsg, *tpHalConfigureRxpFilterRspMsg; - -/*--------------------------------------------------------------------------- - *WLAN_HAL_SET_MAX_TX_POWER_REQ - *--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - tSirMacAddr bssId; // BSSID is needed to identify which session issued this request. As - //the request has power constraints, this should be applied only to that session - tSirMacAddr selfStaMacAddr; - //In request, - //power == MaxTx power to be used. - tPowerdBm power; - -}tSetMaxTxPwrParams, *tpSetMaxTxPwrParams; - - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tSetMaxTxPwrParams setMaxTxPwrParams; -}tSetMaxTxPwrReq, *tpSetMaxTxPwrReq; - -/*--------------------------------------------------------------------------- -*WLAN_HAL_SET_MAX_TX_POWER_RSP -*--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - //power == tx power used for management frames. - tPowerdBm power; - - /* success or failure */ - tANI_U32 status; -}tSetMaxTxPwrRspParams, *tpSetMaxTxPwrRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tSetMaxTxPwrRspParams setMaxTxPwrRspParams; -}tSetMaxTxPwrRspMsg, *tpSetMaxTxPwrRspMsg; - - -/*--------------------------------------------------------------------------- - *WLAN_HAL_SET_MAX_TX_POWER_PER_BAND_REQ - *--------------------------------------------------------------------------*/ - -/* Band types for WLAN_HAL_SET_MAX_TX_POWER_PER_BAND_REQ between WDI and HAL */ -typedef enum -{ - WLAN_HAL_SET_MAX_TX_POWER_BAND_ALL = 0, - // For 2.4GHz or 5GHz bands - WLAN_HAL_SET_MAX_TX_POWER_BAND_2_4_GHZ, - WLAN_HAL_SET_MAX_TX_POWER_BAND_5_0_GHZ, - // End of valid enums - WLAN_HAL_SET_MAX_TX_POWER_BAND_MAX = WLAN_HAL_MAX_ENUM_SIZE, -}tHalSetMaxTxPwrBandInfo; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalSetMaxTxPwrBandInfo bandInfo; // 2_4_GHZ or 5_0_GHZ - tPowerdBm power; // In request, power == MaxTx power to be used. -}tSetMaxTxPwrPerBandParams, *tpSetMaxTxPwrPerBandParams; - - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tSetMaxTxPwrPerBandParams setMaxTxPwrPerBandParams; -}tSetMaxTxPwrPerBandReq, *tpSetMaxTxPwrPerBandReq; - -/*--------------------------------------------------------------------------- -*WLAN_HAL_SET_MAX_TX_POWER_PER_BAND_RSP -*--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - //power == tx power used for management frames. - tPowerdBm power; - - /* success or failure */ - tANI_U32 status; -}tSetMaxTxPwrPerBandRspParams, *tpSetMaxTxPwrPerBandRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tSetMaxTxPwrPerBandRspParams setMaxTxPwrPerBandRspParams; -}tSetMaxTxPwrPerBandRspMsg, *tpSetMaxTxPwrPerBandRspMsg; - -/*--------------------------------------------------------------------------- - *WLAN_HAL_SET_TX_POWER_REQ - *--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /* TX Power in milli watts */ - tANI_U32 txPower; - tANI_U8 bssIdx; -}tSetTxPwrReqParams, *tpSetTxPwrReqParams; - - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tSetTxPwrReqParams setTxPwrReqParams; -}tSetTxPwrReqMsg, *tpSetTxPwrReqMsg; - -/*--------------------------------------------------------------------------- -*WLAN_HAL_SET_TX_POWER_RSP -*--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; -}tSetTxPwrRspParams, *tpSetTxPwrRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tSetTxPwrRspParams setTxPwrRspParams; -}tSetTxPwrRspMsg, *tpSetTxPwrRspMsg; - -/*--------------------------------------------------------------------------- - *WLAN_HAL_GET_TX_POWER_REQ - *--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 staId; -}tGetTxPwrReqParams, *tpGetTxPwrReqParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tGetTxPwrReqParams getTxPwrReqParams; -}tGetTxPwrReqMsg, *tpGetTxPwrReqMsg; - -/*--------------------------------------------------------------------------- -*WLAN_HAL_GET_TX_POWER_RSP -*--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; - - /* TX Power in milli watts */ - tANI_U32 txPower; -}tGetTxPwrRspParams, *tpGetTxPwrRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tGetTxPwrRspParams getTxPwrRspParams; -}tGetTxPwrRspMsg, *tpGetTxPwrRspMsg; - -#ifdef WLAN_FEATURE_P2P -/*--------------------------------------------------------------------------- - *WLAN_HAL_SET_P2P_GONOA_REQ - *--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 opp_ps; - tANI_U32 ctWindow; - tANI_U8 count; - tANI_U32 duration; - tANI_U32 interval; - tANI_U32 single_noa_duration; - tANI_U8 psSelection; -}tSetP2PGONOAParams, *tpSetP2PGONOAParams; - - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tSetP2PGONOAParams setP2PGONOAParams; -}tSetP2PGONOAReq, *tpSetP2PGONOAReq; - -/*--------------------------------------------------------------------------- -*WLAN_HAL_SET_P2P_GONOA_RSP -*--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; -}tSetP2PGONOARspParams, *tpSetP2PGONOARspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tSetP2PGONOARspParams setP2PGONOARspParams; -}tSetP2PGONOARspMsg, *tpSetP2PGONOARspMsg; -#endif - -/*--------------------------------------------------------------------------- - *WLAN_HAL_ADD_SELF_STA_REQ - *--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - tSirMacAddr selfMacAddr; - tANI_U32 status; -}tAddStaSelfParams, *tpAddStaSelfParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tSirMacAddr selfMacAddr; - tANI_U32 status; - tHalIfacePersona iface_persona; -}tAddStaSelfParams_V1, *tpAddStaSelfParams_V1; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - PACKED_PRE union PACKED_POST { - tAddStaSelfParams addStaSelfParams; - tAddStaSelfParams_V1 addStaSelfParams_V1; - }uAddStaSelfParams; -}tAddStaSelfReq, *tpAddStaSelfReq; - -/*--------------------------------------------------------------------------- -*WLAN_HAL_ADD_SELF_STA_RSP -*--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; - - /*Self STA Index */ - tANI_U8 selfStaIdx; - - /* DPU Index (IGTK, PTK, GTK all same) */ - tANI_U8 dpuIdx; - - /* DPU Signature */ - tANI_U8 dpuSignature; - -}tAddStaSelfRspParams, *tpAddStaSelfRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tAddStaSelfRspParams addStaSelfRspParams; -}tAddStaSelfRspMsg, *tpAddStaSelfRspMsg; - - -/*--------------------------------------------------------------------------- - WLAN_HAL_DEL_STA_SELF_REQ ----------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - tSirMacAddr selfMacAddr; - -}tDelStaSelfParams, *tpDelStaSelfParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tDelStaSelfParams delStaSelfParams; -} tDelStaSelfReqMsg, *tpDelStaSelfReqMsg; - - -/*--------------------------------------------------------------------------- - WLAN_HAL_DEL_STA_SELF_RSP ----------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /*success or failure */ - tANI_U32 status; - - tSirMacAddr selfMacAddr; -}tDelStaSelfRspParams, *tpDelStaSelfRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tDelStaSelfRspParams delStaSelfRspParams; -} tDelStaSelfRspMsg, *tpDelStaSelfRspMsg; - - -#ifdef WLAN_FEATURE_VOWIFI_11R - -/*--------------------------------------------------------------------------- - *WLAN_HAL_AGGR_ADD_TS_REQ - *--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /* Station Index */ - tANI_U16 staIdx; - - /* TSPEC handler uniquely identifying a TSPEC for a STA in a BSS */ - /* This will carry the bitmap with the bit positions representing different AC.s*/ - tANI_U16 tspecIdx; - - /* Tspec info per AC To program TPE with required parameters */ - tSirMacTspecIE tspec[WLAN_HAL_MAX_AC]; - - /* U-APSD Flags: 1b per AC. Encoded as follows: - b7 b6 b5 b4 b3 b2 b1 b0 = - X X X X BE BK VI VO */ - tANI_U8 uAPSD; - - /* These parameters are for all the access categories */ - tANI_U32 srvInterval[WLAN_HAL_MAX_AC]; // Service Interval - tANI_U32 susInterval[WLAN_HAL_MAX_AC]; // Suspend Interval - tANI_U32 delayInterval[WLAN_HAL_MAX_AC]; // Delay Interval - -}tAggrAddTsParams, *tpAggrAddTsParams; - - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tAggrAddTsParams aggrAddTsParam; -}tAggrAddTsReq, *tpAggrAddTsReq; - -/*--------------------------------------------------------------------------- -*WLAN_HAL_AGGR_ADD_TS_RSP -*--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status0; - /* FIXME PRIMA for future use for 11R */ - tANI_U32 status1; -}tAggrAddTsRspParams, *tpAggrAddTsRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tAggrAddTsRspParams aggrAddTsRspParam; -}tAggrAddTsRspMsg, *tpAggrAddTsRspMsg; - -#endif - -/*--------------------------------------------------------------------------- - * WLAN_HAL_CONFIGURE_APPS_CPU_WAKEUP_STATE_REQ - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 isAppsCpuAwake; -} tHalConfigureAppsCpuWakeupStateReqParams, *tpHalConfigureAppsCpuWakeupStatReqParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalConfigureAppsCpuWakeupStateReqParams appsStateReqParams; -} tHalConfigureAppsCpuWakeupStateReqMsg, *tpHalConfigureAppsCpuWakeupStateReqMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_CONFIGURE_APPS_CPU_WAKEUP_STATE_RSP - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; -} tHalConfigureAppsCpuWakeupStateRspParams, *tpHalConfigureAppsCpuWakeupStateRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalConfigureAppsCpuWakeupStateRspParams appsStateRspParams; -} tHalConfigureAppsCpuWakeupStateRspMsg, *tpHalConfigureAppsCpuWakeupStateRspMsg; -/*--------------------------------------------------------------------------- - * WLAN_HAL_DUMP_COMMAND_REQ - *--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U32 argument1; - tANI_U32 argument2; - tANI_U32 argument3; - tANI_U32 argument4; - tANI_U32 argument5; - -}tHalDumpCmdReqParams,*tpHalDumpCmdReqParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalDumpCmdReqParams dumpCmdReqParams; -} tHalDumpCmdReqMsg, *tpHalDumpCmdReqMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_DUMP_COMMAND_RSP - *--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; - /*Length of the responce message*/ - tANI_U32 rspLength; - /*FiXME: Currently considering the the responce will be less than 100bytes */ - tANI_U8 rspBuffer[DUMPCMD_RSP_BUFFER]; - -} tHalDumpCmdRspParams, *tpHalDumpCmdRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalDumpCmdRspParams dumpCmdRspParams; -} tHalDumpCmdRspMsg, *tpHalDumpCmdRspMsg; - -/*--------------------------------------------------------------------------- - *WLAN_HAL_COEX_IND - *-------------------------------------------------------------------------*/ -#define WLAN_COEX_IND_DATA_SIZE (4) -#define WLAN_COEX_IND_TYPE_DISABLE_HB_MONITOR (0) -#define WLAN_COEX_IND_TYPE_ENABLE_HB_MONITOR (1) -#define WLAN_COEX_IND_TYPE_SCANS_ARE_COMPROMISED_BY_COEX (2) -#define WLAN_COEX_IND_TYPE_SCANS_ARE_NOT_COMPROMISED_BY_COEX (3) -#define WLAN_COEX_IND_TYPE_DISABLE_AGGREGATION_IN_2p4 (4) -#define WLAN_COEX_IND_TYPE_ENABLE_AGGREGATION_IN_2p4 (5) - -typedef PACKED_PRE struct PACKED_POST -{ - /*Coex Indication Type*/ - tANI_U32 coexIndType; - - /*Coex Indication Data*/ - tANI_U32 coexIndData[WLAN_COEX_IND_DATA_SIZE]; -}tCoexIndParams,*tpCoexIndParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tCoexIndParams coexIndParams; -}tCoexIndMsg, *tpCoexIndMsg; - -/*--------------------------------------------------------------------------- - *WLAN_HAL_OTA_TX_COMPL_IND - *-------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /*Tx Complete Indication Success or Failure*/ - tANI_U32 status; -}tTxComplParams,*tpTxComplParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tTxComplParams txComplParams; -}tTxComplIndMsg, *tpTxComplIndMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_HOST_SUSPEND_IND - *-------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U32 configuredMcstBcstFilterSetting; - tANI_U32 activeSessionCount; -}tHalWlanHostSuspendIndParam,*tpHalWlanHostSuspendIndParam; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalWlanHostSuspendIndParam suspendIndParams; -}tHalWlanHostSuspendIndMsg, *tpHalWlanHostSuspendIndMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_EXCLUDE_UNENCRYTED_IND - *-------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_BOOLEAN bDot11ExcludeUnencrypted; - tSirMacAddr bssId; -}tHalWlanExcludeUnEncryptedIndParam,*tpHalWlanExcludeUnEncryptedIndParam; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalWlanExcludeUnEncryptedIndParam excludeUnEncryptedIndParams; -}tHalWlanExcludeUnEncrptedIndMsg, *tpHalWlanExcludeUnEncrptedIndMsg; - -#ifdef WLAN_FEATURE_P2P -/*--------------------------------------------------------------------------- - *WLAN_HAL_NOA_ATTR_IND - *-------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 index ; - tANI_U8 oppPsFlag ; - tANI_U16 ctWin ; - - tANI_U16 uNoa1IntervalCnt; - tANI_U16 bssIdx; - tANI_U32 uNoa1Duration; - tANI_U32 uNoa1Interval; - tANI_U32 uNoa1StartTime; - - tANI_U16 uNoa2IntervalCnt; - tANI_U16 rsvd2; - tANI_U32 uNoa2Duration; - tANI_U32 uNoa2Interval; - tANI_U32 uNoa2StartTime; - - tANI_U32 status; -}tNoaAttrIndParams, *tpNoaAttrIndParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tNoaAttrIndParams noaAttrIndParams; -}tNoaAttrIndMsg, *tpNoaAttrIndMsg; - -/*--------------------------------------------------------------------------- - *WLAN_HAL_NOA_START_IND - *-------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U32 status; - tANI_U32 bssIdx; -}tNoaStartIndParams, *tpNoaStartIndParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tNoaStartIndParams noaStartIndParams; -}tNoaStartIndMsg, tpNoaStartIndMsg; -#endif - -/*--------------------------------------------------------------------------- - * WLAN_HAL_HOST_RESUME_REQ - *-------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 configuredMcstBcstFilterSetting; -}tHalWlanHostResumeReqParam,*tpHalWlanHostResumeReqParam; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalWlanHostResumeReqParam resumeReqParams; -}tHalWlanHostResumeReqMsg, *tpHalWlanHostResumeReqMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_HOST_RESUME_RSP - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; -} tHalHostResumeRspParams, *tpHalHostResumeRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalHostResumeRspParams hostResumeRspParams; -} tHalHostResumeRspMsg, *tpHalHostResumeRspMsg; - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U16 staIdx; - // Peer MAC Address, whose BA session has timed out - tSirMacAddr peerMacAddr; - // TID for which a BA session timeout is being triggered - tANI_U8 baTID; - // DELBA direction - // 1 - Originator - // 0 - Recipient - tANI_U8 baDirection; - tANI_U32 reasonCode; - tSirMacAddr bssId; // TO SUPPORT BT-AMP -} tHalWlanDelBaIndMsg, *tpHalWlanDelBaIndMsg; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalWlanDelBaIndMsg hostdelBaParam; -} tHalDelBAIndMsg, *tpHalDelBAIndMsg; - -/*--------------------------------------------------------------------------- - *PNO Messages - *-------------------------------------------------------------------------*/ -/* Max number of channels that a network can be found on*/ -/* WLAN_HAL_PNO_MAX_NETW_CHANNELS and WLAN_HAL_PNO_MAX_NETW_CHANNELS_EX should - * be changed at same time - */ -#define WLAN_HAL_PNO_MAX_NETW_CHANNELS 60 - -/*Max number of channels that a network can be found on*/ -#define WLAN_HAL_PNO_MAX_NETW_CHANNELS_EX 60 - -/*Maximum numbers of networks supported by PNO*/ -#define WLAN_HAL_PNO_MAX_SUPP_NETWORKS 16 - -/*The number of scan time intervals that can be programmed into PNO*/ -#define WLAN_HAL_PNO_MAX_SCAN_TIMERS 10 - -/*Maximum size of the probe template*/ -#define WLAN_HAL_PNO_MAX_PROBE_SIZE 450 - -/*Type of PNO enabling - Immediate - scanning will start immediately and PNO procedure will - be repeated based on timer - Suspend - scanning will start at suspend - Resume - scanning will start on system resume - Delay - start the scan timer to trigger PNO scan - */ -typedef enum -{ - ePNO_MODE_IMMEDIATE, - ePNO_MODE_ON_SUSPEND, - ePNO_MODE_ON_RESUME, - ePNO_MODE_DELAY, - ePNO_MODE_PROXIMITY, // FEATURE_WIFI_PROXIMITY - ePNO_MODE_MAX = WLAN_HAL_MAX_ENUM_SIZE -} ePNOMode; - -/*Authentication type*/ -typedef enum -{ - eAUTH_TYPE_ANY = 0, - eAUTH_TYPE_OPEN_SYSTEM = 1, - - // Upper layer authentication types - eAUTH_TYPE_WPA = 2, - eAUTH_TYPE_WPA_PSK = 3, - - eAUTH_TYPE_RSN = 4, - eAUTH_TYPE_RSN_PSK = 5, - eAUTH_TYPE_FT_RSN = 6, - eAUTH_TYPE_FT_RSN_PSK = 7, - eAUTH_TYPE_WAPI_WAI_CERTIFICATE = 8, - eAUTH_TYPE_WAPI_WAI_PSK = 9, - eAUTH_TYPE_CCKM_WPA = 10, - eAUTH_TYPE_CCKM_RSN = 11, - - eAUTH_TYPE_MAX = WLAN_HAL_MAX_ENUM_SIZE - -}tAuthType; - -/* Encryption type */ -typedef enum eEdType -{ - eED_ANY = 0, - eED_NONE = 1, - eED_WEP = 2, - eED_TKIP = 3, - eED_CCMP = 4, - eED_WPI = 5, - - eED_TYPE_MAX = WLAN_HAL_MAX_ENUM_SIZE -} tEdType; - -/* SSID broadcast type */ -typedef enum eSSIDBcastType -{ - eBCAST_UNKNOWN = 0, - eBCAST_NORMAL = 1, - eBCAST_HIDDEN = 2, - - eBCAST_TYPE_MAX = WLAN_HAL_MAX_ENUM_SIZE -} tSSIDBcastType; - -/* - The network description for which PNO will have to look for -*/ -typedef PACKED_PRE struct PACKED_POST -{ - /*SSID of the BSS*/ - tSirMacSSid ssId; - - /*Authentication type for the network*/ - tAuthType authentication; - - /*Encryption type for the network*/ - tEdType encryption; - - /*Indicate the channel on which the Network can be found - 0 - if all channels */ - tANI_U8 ucChannelCount; - tANI_U8 aChannels[WLAN_HAL_PNO_MAX_NETW_CHANNELS]; - - /*Indicates the RSSI threshold for the network to be considered*/ - tANI_U8 rssiThreshold; -}tNetworkType; - -typedef PACKED_PRE struct PACKED_POST -{ - /*How much it should wait */ - tANI_U32 uTimerValue; - - /*How many times it should repeat that wait value - 0 - keep using this timer until PNO is disabled*/ - tANI_U32 uTimerRepeat; - - /*e.g: 2 3 - 4 0 - - it will wait 2s between consecutive scans for 3 times - - after that it will wait 4s between consecutive scans until disabled*/ -}tScanTimer; - -/* - The network parameters to be sent to the PNO algorithm -*/ -typedef PACKED_PRE struct PACKED_POST -{ - /*set to 0 if you wish for PNO to use its default telescopic timer*/ - tANI_U8 ucScanTimersCount; - - /*A set value represents the amount of time that PNO will wait between - two consecutive scan procedures - If the desired is for a uniform timer that fires always at the exact same - interval - one single value is to be set - If there is a desire for a more complex - telescopic like timer multiple - values can be set - once PNO reaches the end of the array it will - continue scanning at intervals presented by the last value*/ - tScanTimer aTimerValues[WLAN_HAL_PNO_MAX_SCAN_TIMERS]; - -}tScanTimersType; - -typedef PACKED_PRE struct PACKED_POST { - - /*Enable PNO*/ - tANI_U32 enable; - - /*Immediate, On Suspend, On Resume*/ - ePNOMode modePNO; - - /*Number of networks sent for PNO*/ - tANI_U32 ucNetworksCount; - - /*The networks that PNO needs to look for*/ - tNetworkType aNetworks[WLAN_HAL_PNO_MAX_SUPP_NETWORKS]; - - /*The scan timers required for PNO*/ - tScanTimersType scanTimers; - - /*Probe template for 2.4GHz band*/ - tANI_U16 us24GProbeSize; - tANI_U8 a24GProbeTemplate[WLAN_HAL_PNO_MAX_PROBE_SIZE]; - - /*Probe template for 5GHz band*/ - tANI_U16 us5GProbeSize; - tANI_U8 a5GProbeTemplate[WLAN_HAL_PNO_MAX_PROBE_SIZE]; - -} tPrefNetwListParams, * tpPrefNetwListParams; - -/* - Preferred network list request -*/ -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tPrefNetwListParams prefNetwListParams; -} tSetPrefNetwListReq, *tpSetPrefNetwListReq; - - -/* - The network description for which PNO will have to look for -*/ -typedef PACKED_PRE struct PACKED_POST -{ - /*SSID of the BSS*/ - tSirMacSSid ssId; - - /*Authentication type for the network*/ - tAuthType authentication; - - /*Encryption type for the network*/ - tEdType encryption; - - /*SSID broadcast type, normal, hidden or unknown*/ - tSSIDBcastType bcastNetworkType; - - /*Indicate the channel on which the Network can be found - 0 - if all channels */ - tANI_U8 ucChannelCount; - tANI_U8 aChannels[WLAN_HAL_PNO_MAX_NETW_CHANNELS]; - - /*Indicates the RSSI threshold for the network to be considered*/ - tANI_U8 rssiThreshold; -}tNetworkTypeNew; - -typedef PACKED_PRE struct PACKED_POST { - - /*Enable PNO*/ - tANI_U32 enable; - - /*Immediate, On Suspend, On Resume*/ - ePNOMode modePNO; - - /*Number of networks sent for PNO*/ - tANI_U32 ucNetworksCount; - - /*The networks that PNO needs to look for*/ - tNetworkTypeNew aNetworks[WLAN_HAL_PNO_MAX_SUPP_NETWORKS]; - - /*The scan timers required for PNO*/ - tScanTimersType scanTimers; - - /*Probe template for 2.4GHz band*/ - tANI_U16 us24GProbeSize; - tANI_U8 a24GProbeTemplate[WLAN_HAL_PNO_MAX_PROBE_SIZE]; - - /*Probe template for 5GHz band*/ - tANI_U16 us5GProbeSize; - tANI_U8 a5GProbeTemplate[WLAN_HAL_PNO_MAX_PROBE_SIZE]; - -} tPrefNetwListParamsNew, * tpPrefNetwListParamsNew; - -/* - Preferred network list request new -*/ -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tPrefNetwListParamsNew prefNetwListParams; -} tSetPrefNetwListReqNew, *tpSetPrefNetwListReqNew; - -#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD -typedef PACKED_PRE struct PACKED_POST -{ - tSirMacSSid ssId; - tANI_U8 currAPbssid[HAL_MAC_ADDR_LEN]; - tANI_U32 authentication; - tEdType encryption; - tEdType mcencryption; - tANI_U8 ChannelCount; - tANI_U8 ChannelCache[WLAN_HAL_ROAM_SCAN_MAX_CHANNELS]; -}tRoamNetworkType; - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 mdiePresent; - tANI_U16 mobilityDomain; -}tMobilityDomainInfo; - -typedef PACKED_PRE struct PACKED_POST { - eAniBoolean RoamScanOffloadEnabled; - tANI_S8 LookupThreshold; - tANI_U8 RoamRssiDiff; - tANI_U8 ChannelCacheType; - tANI_U8 Command; - tANI_U8 StartScanReason; - tANI_U16 NeighborScanTimerPeriod; - tANI_U16 NeighborRoamScanRefreshPeriod; - tANI_U16 NeighborScanChannelMinTime; - tANI_U16 NeighborScanChannelMaxTime; - tANI_U16 EmptyRefreshScanPeriod; - tANI_U8 ValidChannelCount; - tANI_U8 ValidChannelList[WLAN_HAL_ROAM_SCAN_MAX_CHANNELS]; - eAniBoolean IsCCXEnabled; - - tANI_U16 us24GProbeSize; - tANI_U8 a24GProbeTemplate[WLAN_HAL_ROAM_SCAN_MAX_PROBE_SIZE]; - tANI_U16 us5GProbeSize; - tANI_U8 a5GProbeTemplate[WLAN_HAL_ROAM_SCAN_MAX_PROBE_SIZE]; - /* Add Reserved bytes */ - tANI_U8 nProbes; - tANI_U16 HomeAwayTime; - eAniBoolean MAWCEnabled; - tANI_U8 ReservedBytes[WLAN_HAL_ROAM_SCAN_RESERVED_BYTES]; - tRoamNetworkType ConnectedNetwork; - tMobilityDomainInfo MDID; -} tRoamCandidateListParams, * tpRoamCandidateListParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tRoamCandidateListParams RoamScanOffloadNetwListParams; -} tSetRoamScanOffloadReq, *tpRoamScanOffloadReq; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - - /* status of the request - just to indicate that PNO has acknowledged - * the request and will start scanning */ - tANI_U32 status; -} tSetRoamOffloadScanResp, *tpSetRoamOffloadScanResp; -#endif - -/* - Preferred network list response -*/ -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - - /* status of the request - just to indicate that PNO has acknowledged - * the request and will start scanning*/ - tANI_U32 status; -} tSetPrefNetwListResp, *tpSetPrefNetwListResp; - -/* - Preferred network indication parameters -*/ -typedef PACKED_PRE struct PACKED_POST { - - /*Network that was found with the highest RSSI*/ - tSirMacSSid ssId; - - /*Indicates the RSSI */ - tANI_U8 rssi; - - //The MPDU frame length of a beacon or probe rsp. data is the start of the frame - tANI_U16 frameLength; - -} tPrefNetwFoundParams, * tpPrefNetwFoundParams; - -/* - Preferred network found indication -*/ -typedef PACKED_PRE struct PACKED_POST { - - tHalMsgHeader header; - tPrefNetwFoundParams prefNetwFoundParams; -} tPrefNetwFoundInd, *tpPrefNetwFoundInd; - - -typedef PACKED_PRE struct PACKED_POST { - - /*RSSI Threshold*/ - tANI_U8 ucRssiThreshold; - -} tRssiFilterParams, * tpRssiFilterParams; - -/* - RSSI Filter request -*/ -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tRssiFilterParams prefRSSIFilterParams; -} tSetRssiFilterReq, *tpSetRssiFilterReq; - -/* - Set RSSI filter resp -*/ -typedef PACKED_PRE struct PACKED_POST{ - tHalMsgHeader header; - /*status of the request */ - tANI_U32 status; -} tSetRssiFilterResp, *tpSetRssiFilterResp; -/* - Update scan params -*/ -typedef PACKED_PRE struct PACKED_POST -{ - - /*Host setting for 11d*/ - tANI_U8 b11dEnabled; - - /*Lets PNO know that host has determined the regulatory domain*/ - tANI_U8 b11dResolved; - - /*Channels on which PNO is allowed to scan*/ - tANI_U8 ucChannelCount; - tANI_U8 aChannels[WLAN_HAL_PNO_MAX_NETW_CHANNELS]; - - /*Minimum channel time*/ - tANI_U16 usActiveMinChTime; - - /*Maximum channel time*/ - tANI_U16 usActiveMaxChTime; - - /*Minimum channel time*/ - tANI_U16 usPassiveMinChTime; - - /*Maximum channel time*/ - tANI_U16 usPassiveMaxChTime; - - /*Cb State*/ - ePhyChanBondState cbState; - -} tUpdateScanParams, * tpUpdateScanParams; - -/* - Update scan params -*/ -typedef PACKED_PRE struct PACKED_POST -{ - - /*Host setting for 11d*/ - tANI_U8 b11dEnabled; - - /*Lets PNO know that host has determined the regulatory domain*/ - tANI_U8 b11dResolved; - - /*Channels on which PNO is allowed to scan*/ - tANI_U8 ucChannelCount; - tANI_U8 aChannels[WLAN_HAL_PNO_MAX_NETW_CHANNELS_EX]; - - /*Minimum channel time*/ - tANI_U16 usActiveMinChTime; - - /*Maximum channel time*/ - tANI_U16 usActiveMaxChTime; - - /*Minimum channel time*/ - tANI_U16 usPassiveMinChTime; - - /*Maximum channel time*/ - tANI_U16 usPassiveMaxChTime; - - /*Cb State*/ - ePhyChanBondState cbState; - -} tUpdateScanParamsEx, * tpUpdateScanParamsEx; - -/* - Update scan params - sent from host to PNO - to be used during PNO scanning -*/ -typedef PACKED_PRE struct PACKED_POST{ - - tHalMsgHeader header; - tUpdateScanParams scanParams; -} tUpdateScanParamsReq, *tpUpdateScanParamsReq; - -/* - Update scan params - sent from host to PNO - to be used during PNO scanning -*/ -typedef PACKED_PRE struct PACKED_POST{ - - tHalMsgHeader header; - tUpdateScanParamsEx scanParams; -} tUpdateScanParamsReqEx, *tpUpdateScanParamsReqEx; - -/* - Update scan params - sent from host to PNO - to be used during PNO scanning -*/ -typedef PACKED_PRE struct PACKED_POST{ - - tHalMsgHeader header; - - /*status of the request */ - tANI_U32 status; - -} tUpdateScanParamsResp, *tpUpdateScanParamsResp; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_SET_TX_PER_TRACKING_REQ - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 ucTxPerTrackingEnable; /* 0: disable, 1:enable */ - tANI_U8 ucTxPerTrackingPeriod; /* Check period, unit is sec. */ - tANI_U8 ucTxPerTrackingRatio; /* (Fail TX packet)/(Total TX packet) ratio, the unit is 10%. */ - tANI_U32 uTxPerTrackingWatermark; /* A watermark of check number, once the tx packet exceed this number, we do the check, default is 5 */ -} tHalTxPerTrackingReqParam, *tpHalTxPerTrackingReqParam; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalTxPerTrackingReqParam txPerTrackingParams; -} tHalSetTxPerTrackingReqMsg, *tpHalSetTxPerTrackingReqMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_SET_TX_PER_TRACKING_RSP - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; -} tHalTxPerTrackingRspParams, *tpHalTxPerTrackingRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalTxPerTrackingRspParams txPerTrackingRspParams; -} tHalSetTxPerTrackingRspMsg, *tpHalSetTxPerTrackingRspMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_TX_PER_HIT_IND - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; -}tTxPerHitIndMsg, *tpTxPerHitIndMsg; - -/*--------------------------------------------------------------------------- - *******************Packet Filtering Definitions Begin******************* - *--------------------------------------------------------------------------*/ -#define HAL_PROTOCOL_DATA_LEN 8 -#define HAL_MAX_NUM_MULTICAST_ADDRESS 240 -#define HAL_MAX_NUM_FILTERS 20 -#define HAL_MAX_CMP_PER_FILTER 10 - -typedef enum -{ - HAL_RCV_FILTER_TYPE_INVALID, - HAL_RCV_FILTER_TYPE_FILTER_PKT, - HAL_RCV_FILTER_TYPE_BUFFER_PKT, - HAL_RCV_FILTER_TYPE_MAX_ENUM_SIZE -}tHalReceivePacketFilterType; - -typedef enum -{ - HAL_FILTER_PROTO_TYPE_INVALID, - HAL_FILTER_PROTO_TYPE_MAC, - HAL_FILTER_PROTO_TYPE_ARP, - HAL_FILTER_PROTO_TYPE_IPV4, - HAL_FILTER_PROTO_TYPE_IPV6, - HAL_FILTER_PROTO_TYPE_UDP, - HAL_FILTER_PROTO_TYPE_MAX -}tHalRcvPktFltProtocolType; - -typedef enum -{ - HAL_FILTER_CMP_TYPE_INVALID, - HAL_FILTER_CMP_TYPE_EQUAL, - HAL_FILTER_CMP_TYPE_MASK_EQUAL, - HAL_FILTER_CMP_TYPE_NOT_EQUAL, - HAL_FILTER_CMP_TYPE_MAX -}tHalRcvPktFltCmpFlagType; - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 protocolLayer; - tANI_U8 cmpFlag; - tANI_U16 dataLength; /* Length of the data to compare */ - tANI_U8 dataOffset; /* from start of the respective frame header */ - tANI_U8 reserved; /* Reserved field */ - tANI_U8 compareData[HAL_PROTOCOL_DATA_LEN]; /* Data to compare */ - tANI_U8 dataMask[HAL_PROTOCOL_DATA_LEN]; /* Mask to be applied on the received packet data before compare */ -}tHalRcvPktFilterParams, *tpHalRcvPktFilterParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 filterId; - tANI_U8 filterType; - tANI_U8 numParams; - tANI_U32 coalesceTime; - tHalRcvPktFilterParams paramsData[1]; -}tHalRcvPktFilterCfgType, *tpHalRcvPktFilterCfgType; - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 filterId; - tANI_U8 filterType; - tANI_U8 numParams; - tANI_U32 coleasceTime; - tANI_U8 bssIdx; - tHalRcvPktFilterParams paramsData[1]; -}tHalSessionizedRcvPktFilterCfgType, *tpHalSessionizedRcvPktFilterCfgType; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalRcvPktFilterCfgType pktFilterCfg; -} tHalSetRcvPktFilterReqMsg, *tpHalSetRcvPktFilterReqMsg; - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 dataOffset; /* from start of the respective frame header */ - tANI_U32 cMulticastAddr; - tSirMacAddr multicastAddr[HAL_MAX_NUM_MULTICAST_ADDRESS]; - tANI_U8 bssIdx; -} tHalRcvFltMcAddrListType, *tpHalRcvFltMcAddrListType; - -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; - tANI_U8 bssIdx; -} tHalSetPktFilterRspParams, *tpHalSetPktFilterRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalSetPktFilterRspParams pktFilterRspParams; -} tHalSetPktFilterRspMsg, *tpHalSetPktFilterRspMsg; - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 bssIdx; -} tHalRcvFltPktMatchCntReqParams, *tpHalRcvFltPktMatchCntReqParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalRcvFltPktMatchCntReqParams pktMatchCntReqParams; -} tHalRcvFltPktMatchCntReqMsg, *tpHalRcvFltPktMatchCntReqMsg; - - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 filterId; - tANI_U32 matchCnt; -} tHalRcvFltPktMatchCnt; -typedef PACKED_PRE struct PACKED_POST -{ - /* Success or Failure */ - tANI_U32 status; - tANI_U32 matchCnt; - tHalRcvFltPktMatchCnt filterMatchCnt[HAL_MAX_NUM_FILTERS]; - tANI_U8 bssIdx; -} tHalRcvFltPktMatchRspParams, *tptHalRcvFltPktMatchRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalRcvFltPktMatchRspParams fltPktMatchRspParams; -} tHalRcvFltPktMatchCntRspMsg, *tpHalRcvFltPktMatchCntRspMsg; - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U32 status; /* only valid for response message */ - tANI_U8 filterId; - tANI_U8 bssIdx; -}tHalRcvFltPktClearParam, *tpHalRcvFltPktClearParam; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalRcvFltPktClearParam filterClearParam; -} tHalRcvFltPktClearReqMsg, *tpHalRcvFltPktClearReqMsg; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalRcvFltPktClearParam filterClearParam; -} tHalRcvFltPktClearRspMsg, *tpHalRcvFltPktClearRspMsg; - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U32 status; - tANI_U8 bssIdx; -}tHalRcvFltPktSetMcListRspType, *tpHalRcvFltPktSetMcListRspType; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalRcvFltMcAddrListType mcAddrList; -} tHalRcvFltPktSetMcListReqMsg, *tpHalRcvFltPktSetMcListReqMsg; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalRcvFltPktSetMcListRspType rspParam; -} tHalRcvFltPktSetMcListRspMsg, *tpHalRcvFltPktSetMcListRspMsg; - - -/*--------------------------------------------------------------------------- - *******************Packet Filtering Definitions End******************* - *--------------------------------------------------------------------------*/ - -/* - * There are two versions of this message - * Version 1 : Base version - * Current version : Base version + Max LI modulated DTIM - */ -typedef PACKED_PRE struct PACKED_POST -{ - /* Ignore DTIM */ - tANI_U32 uIgnoreDTIM; - - /*DTIM Period*/ - tANI_U32 uDTIMPeriod; - - /* Listen Interval */ - tANI_U32 uListenInterval; - - /* Broadcast Multicast Filter */ - tANI_U32 uBcastMcastFilter; - - /* Beacon Early Termination */ - tANI_U32 uEnableBET; - - /* Beacon Early Termination Interval */ - tANI_U32 uBETInterval; -}tSetPowerParamsVer1Type, *tpSetPowerParamsVer1Type; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tSetPowerParamsVer1Type powerParams; -} tSetPowerParamsVer1ReqMsg, *tpSetPowerParamsVer1ReqMsg; - -typedef PACKED_PRE struct PACKED_POST -{ - /* Ignore DTIM */ - tANI_U32 uIgnoreDTIM; - - /*DTIM Period*/ - tANI_U32 uDTIMPeriod; - - /* Listen Interval */ - tANI_U32 uListenInterval; - - /* Broadcast Multicast Filter */ - tANI_U32 uBcastMcastFilter; - - /* Beacon Early Termination */ - tANI_U32 uEnableBET; - - /* Beacon Early Termination Interval */ - tANI_U32 uBETInterval; - - /* MAX LI for modulated DTIM */ - tANI_U32 uMaxLIModulatedDTIM; -}tSetPowerParamsType, *tpSetPowerParamsType; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tSetPowerParamsType powerParams; -} tSetPowerParamsReqMsg, *tpSetPowerParamsReqMsg; - -typedef PACKED_PRE struct PACKED_POST{ - - tHalMsgHeader header; - - /*status of the request */ - tANI_U32 status; - -} tSetPowerParamsResp, *tpSetPowerParamsResp; - -/*--------------------------------------------------------------------------- - ****************Capability bitmap exchange definitions and macros starts************* - *--------------------------------------------------------------------------*/ - -typedef enum { - MCC = 0, - P2P = 1, - DOT11AC = 2, - SLM_SESSIONIZATION = 3, - DOT11AC_OPMODE = 4, - SAP32STA = 5, - TDLS = 6, - P2P_GO_NOA_DECOUPLE_INIT_SCAN = 7, - WLANACTIVE_OFFLOAD = 8, - BEACON_OFFLOAD = 9, - SCAN_OFFLOAD = 10, - ROAM_OFFLOAD = 11, - BCN_MISS_OFFLOAD = 12, - STA_POWERSAVE = 13, - STA_ADVANCED_PWRSAVE = 14, - AP_UAPSD = 15, - AP_DFS = 16, - BLOCKACK = 17, - PHY_ERR = 18, - BCN_FILTER = 19, - RTT = 20, - RATECTRL = 21, - WOW = 22, - WLAN_ROAM_SCAN_OFFLOAD = 23, - SPECULATIVE_PS_POLL = 24, - SCAN_SCH = 25, - IBSS_HEARTBEAT_OFFLOAD = 26, - WLAN_SCAN_OFFLOAD = 27, - WLAN_PERIODIC_TX_PTRN = 28, - ADVANCE_TDLS = 29, - BATCH_SCAN = 30, - MAX_FEATURE_SUPPORTED = 128, -} placeHolderInCapBitmap; - -typedef PACKED_PRE struct PACKED_POST{ - - tANI_U32 featCaps[4]; -} tWlanFeatCaps, *tpWlanFeatCaps; - -typedef PACKED_PRE struct PACKED_POST{ - - tHalMsgHeader header; - tWlanFeatCaps wlanFeatCaps; - -} tWlanFeatCapsMsg, *tpWlanFeatCapsMsg; - -#define IS_MCC_SUPPORTED_BY_HOST (!!(halMsg_GetHostWlanFeatCaps(MCC))) -#define IS_SLM_SESSIONIZATION_SUPPORTED_BY_HOST (!!(halMsg_GetHostWlanFeatCaps(SLM_SESSIONIZATION))) -#define IS_FEATURE_SUPPORTED_BY_HOST(featEnumValue) (!!halMsg_GetHostWlanFeatCaps(featEnumValue)) -#define IS_WLANACTIVE_OFFLOAD_SUPPORTED_BY_HOST (!!(halMsg_GetHostWlanFeatCaps(WLANACTIVE_OFFLOAD))) -#define IS_WLAN_ROAM_SCAN_OFFLOAD_SUPPORTED_BY_HOST (!!(halMsg_GetHostWlanFeatCaps(WLAN_ROAM_SCAN_OFFLOAD))) -#define IS_IBSS_HEARTBEAT_OFFLOAD_SUPPORTED_BY_HOST (!!(halMsg_GetHostWlanFeatCaps(IBSS_HEARTBEAT_OFFLOAD))) -#define IS_SCAN_OFFLOAD_SUPPORTED_BY_HOST (!!(halMsg_GetHostWlanFeatCaps(WLAN_SCAN_OFFLOAD))) - -tANI_U8 halMsg_GetHostWlanFeatCaps(tANI_U8 feat_enum_value); - -#define setFeatCaps(a,b) { tANI_U32 arr_index, bit_index; \ - if ((b)<=127) { \ - arr_index = (b)/32; \ - bit_index = (b)%32; \ - if(arr_index < 4) \ - (a)->featCaps[arr_index] |= (1<featCaps[arr_index] & (1<featCaps[arr_index] &= ~(1<FW - WLAN_HAL_LEADER_CANCELED, //Host-->FW - WLAN_HAL_LEADER_PICK_NEW, //FW-->Host - WLAN_HAL_LEADER_IND_MAX = WLAN_HAL_MAX_ENUM_SIZE -}tLbpUpdateIndType; - -typedef enum -{ - WLAN_HAL_LBP_LEADER_ROLE, - WLAN_HAL_LBP_TRANSMITTER_ROLE, - WLAN_HAL_LBP_ROLE_MAX = WLAN_HAL_MAX_ENUM_SIZE -}tLbpRoleType; - -typedef PACKED_PRE struct PACKED_POST -{ - tLbpUpdateIndType indication; - - /* Role of the entity generating this indication */ - tLbpRoleType role; - - /* MAC address of MCAST Transmitter (source) */ - tSirMacAddr mcastTransmitter; - - /* MAC Address of Multicast Group (01-00-5E-xx-xx-xx) */ - tSirMacAddr mcastGroup; - - /* MAC address of MCAST Receiver Leader */ - tSirMacAddr mcastLeader; - - /* Candidate list for indication = WLAN_HAL_LEADER_PICK_NEW */ - tSirMacAddr leader[HAL_NUM_MAX_LEADERS]; -} tHalLbpUpdateIndParams, *tpHalLbpUpdateIndParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalLbpUpdateIndParams leaderIndParams; -} tHalLbpUpdateInd, *tpHalLbpUpdateInd; - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 staIdx; // Station Idx; - tANI_U32 txRate; // Legacy transmit rate, in units of 500 kbit/sec, - // for the most recently transmitted frame - tANI_U32 mcsIndex; // mcs index for HT20 and HT40 rates - tANI_U32 txRateFlags; // to differentiate between HT20 and - // HT40 rates; short and long guard interval - tANI_S8 rssi; // RSSI of the last received beacon -}tHalIbssPeerParams, *tpHalIbssPeerParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U32 status; // success or failure - tANI_U8 numOfPeers; // Number of Peers for - // which stats are being reported - tHalIbssPeerParams ibssPeerParams[1]; // Stats of peer in IBSS -}tHalIbssPeerInfoRspParams, *tpHalIbssPeerInfoRspParams; - -// WLAN_HAL_GET_IBSS_PEER_INFO_RSP -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalIbssPeerInfoRspParams ibssPeerInfoRspParams; -}tHalIbssPeerInfoRsp, *tpHalIbssPeerInfoRsp; - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 bssIdx; // Bss Index - tANI_BOOLEAN allPeerInfoReqd; // If set, all IBSS peers stats are reported - tANI_U8 staIdx; // If allPeerInfoReqd is not set, - // only stats of peer with - // staIdx is reported -}tHalIbssPeerInfoReqParams, *tpHalIbssPeerInfoReqParams; - -// WLAN_HAL_GET_IBSS_PEER_INFO_REQ -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalIbssPeerInfoReqParams ibssPeerInfoReqParams; -}tHalIbssPeerInfoReq, *tpHalIbssPeerInfoReq; - -/*--------------------------------------------------------------------------- - WLAN_HAL_RATE_UPDATE_IND - *-------------------------------------------------------------------------*/ - typedef PACKED_PRE struct PACKED_POST -{ - /* 0 implies UCAST RA, positive value implies fixed rate, -1 implies ignore this param */ - tANI_S32 ucastDataRate; //unit Mbpsx10 - - /* TX flag to differentiate between HT20, HT40 etc */ - tTxRateInfoFlags ucastDataRateTxFlag; - - /* BSSID - Optional. 00-00-00-00-00-00 implies apply to all BCAST STAs */ - tSirMacAddr bssid; - - /* 0 implies MCAST RA, positive value implies fixed rate, -1 implies ignore */ - tANI_S32 reliableMcastDataRate; //unit Mbpsx10 - - /* TX flag to differentiate between HT20, HT40 etc */ - tTxRateInfoFlags reliableMcastDataRateTxFlag; - - /* Default (non-reliable) MCAST(or BCAST) fixed rate in 2.4 GHz, 0 implies ignore */ - tANI_U32 mcastDataRate24GHz; //unit Mbpsx10 - - /* TX flag to differentiate between HT20, HT40 etc */ - tTxRateInfoFlags mcastDataRate24GHzTxFlag; - - /* Default (non-reliable) MCAST(or BCAST) fixed rate in 5 GHz, 0 implies ignore */ - tANI_U32 mcastDataRate5GHz; //unit Mbpsx10 - - /* TX flag to differentiate between HT20, HT40 etc */ - tTxRateInfoFlags mcastDataRate5GHzTxFlag; - -} tHalRateUpdateParams, *tpHalRateUpdateParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalRateUpdateParams halRateUpdateParams; -} tHalRateUpdateInd, * tpHalRateUpdateInd; - -/*--------------------------------------------------------------------------- -* WLAN_HAL_TX_FAIL_IND -*--------------------------------------------------------------------------*/ -// Northbound indication from FW to host on weak link detection -typedef PACKED_PRE struct PACKED_POST -{ - // Sequence number increases by 1 whenever the device driver - // sends a notification event. This is cleared as 0 when the - // JOIN IBSS commamd is issued - tANI_U16 seqNo; - tANI_U16 staId; - tANI_U8 macAddr[HAL_MAC_ADDR_LEN]; -} tHalTXFailIndParams, *tpHalTXFailIndParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalTXFailIndParams txFailIndParams; -} tHalTXFailIndMsg, *tpHalTXFailIndMsg; - -/*--------------------------------------------------------------------------- -* WLAN_HAL_TX_FAIL_MONITOR_IND -*--------------------------------------------------------------------------*/ -// Southbound message from Host to monitor the Tx failures -typedef PACKED_PRE struct PACKED_POST -{ - // tx_fail_count = 0 should disable the TX Fail monitor, non-zero value should enable it. - tANI_U8 tx_fail_count; -} tTXFailMonitorInfo, *tpTXFailMonitorInfo; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tTXFailMonitorInfo txFailMonitor; -} tTXFailMonitorInd, *tpTXFailMonitorInd; - -/*--------------------------------------------------------------------------- -* WLAN_HAL_IP_FORWARD_TABLE_UPDATE_IND -*--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 destIpv4Addr[HAL_IPV4_ADDR_LEN]; - tANI_U8 nextHopMacAddr[HAL_MAC_ADDR_LEN]; -} tDestIpNextHopMacPair; - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 numEntries; - tDestIpNextHopMacPair destIpMacPair[1]; -} tWlanIpForwardTableUpdateIndParam; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tWlanIpForwardTableUpdateIndParam ipForwardTableParams; -} tWlanIpForwardTableUpdateInd; - -/*--------------------------------------------------------------------------- - *-------------------------------------------------------------------------*/ - -#if defined(__ANI_COMPILER_PRAGMA_PACK_STACK) -#pragma pack(pop) -#elif defined(__ANI_COMPILER_PRAGMA_PACK) -#else -#endif - -#endif /* _WLAN_HAL_MSG_H_ */ - diff --git a/riva/inc/wlan_nv.h b/riva/inc/wlan_nv.h deleted file mode 100644 index 69f728653e9d..000000000000 --- a/riva/inc/wlan_nv.h +++ /dev/null @@ -1,792 +0,0 @@ -/* -* Copyright (c) 2012 Qualcomm Atheros, Inc. -* All Rights Reserved. -* Qualcomm Atheros Confidential and Proprietary. -*/ - -/** ------------------------------------------------------------------------- * - ------------------------------------------------------------------------- * - - - \file wlan_nv.h - - \brief Types for NV implementation - Anything that needs to be publicly available should - be in this file - - $Id$ - - Copyright (C) 2006 Airgo Networks, Incorporated - - - ========================================================================== */ - -#if !defined( __WLAN_NV_H ) -#define __WLAN_NV_H - -#include "halLegacyPalTypes.h" -#include "halCompiler.h" - -//From HAL/inc/halNv.h -typedef enum -{ - //Common Nv Fields - NV_COMMON_PRODUCT_ID, // 0 - NV_COMMON_PRODUCT_BANDS, // 1 - NV_COMMON_NUM_OF_TX_CHAINS, // 2 - NV_COMMON_NUM_OF_RX_CHAINS, // 3 - NV_COMMON_MAC_ADDR, // 4 - NV_COMMON_MFG_SERIAL_NUMBER, // 5 - NV_COMMON_WLAN_NV_REV_ID, // 6 - NV_COMMON_COUPLER_TYPE, // 7 - NV_COMMON_NV_VERSION, // 8 - NV_COMMON_RESERVED, // 9 - - NUM_NV_FIELDS, - NV_MAX_FIELD = 0x7FFFFFFF /* define as 4 bytes data */ - -}eNvField; - - -#define NV_FIELD_MAC_ADDR_SIZE 6 -#define NV_FIELD_MFG_SN_SIZE 40 -typedef enum -{ - PRODUCT_BAND_11_B_G = 0, //Gen6.0 is only this setting - PRODUCT_BAND_11_A_B_G = 1, - PRODUCT_BAND_11_A = 2, - - NUM_PRODUCT_BANDS, - NUM_PRODUCT_BANDS_INVALID = 0x7FFFFFFF /* define as 4 bytes data */ -}eNvProductBands; //NV_COMMON_PRODUCT_BANDS - -#define EXTERNAL_PA 1 -#define INTERNAL_PA 0 - -#define EXTERNAL_LNA 1 -#define INTERNAL_LNA 0 - -#define EXTERNAL_COUPLER 1 -#define INTERNAL_COUPLER 0 - -#define EXTERNAL_PDET 1 -#define INTERNAL_PDET 0 - -#define DPD_ENABLED 1 -#define DPD_DISABLED 0 - -#define TPC_MODE_OPEN_LOOP 0 -#define TPC_MODE_SCPC 1 -#define TPC_MODE_CLPC_MODE2 2 -#define TPC_MODE_CLPC_MODE3 3 - -#define PA_POLARITY_TX_UNUSED 0 -#define PA_POLARITY_TX_POSITIVE 1 -#define PA_POLARITY_TX_NEGATIVE 2 -#define PA_POLARITY_RX_UNUSED 0 -#define PA_POLARITY_RX_POSITIVE 1 -#define PA_POLARITY_RX_NEGATIVE 2 - -#define NV_VERSION_INVALID 0xFF -#define NV_VERSION_11N_11AC_COUPER_TYPE 0 -#define NV_VERSION_11N_11AC_FW_CONFIG 1 -#define NV_VERSION_LPDC_FW_CONFIG 2 - -#ifdef WCN_PRONTO -#define WLAN_NV_VERSION NV_VERSION_LPDC_FW_CONFIG -#else //WCN_PRONTO -#define WLAN_NV_VERSION NV_VERSION_11N_11AC_FW_CONFIG -#endif //WCN_PRONTO - -typedef PACKED_PRE struct PACKED_POST -{ - uint8 macAddr1[NV_FIELD_MAC_ADDR_SIZE]; /* Default, not change name for compatibility */ - uint8 macAddr2[NV_FIELD_MAC_ADDR_SIZE]; - uint8 macAddr3[NV_FIELD_MAC_ADDR_SIZE]; - uint8 macAddr4[NV_FIELD_MAC_ADDR_SIZE]; -} sMacAddr; - -typedef PACKED_PRE union PACKED_POST -{ - //common NV fields - uint16 productId; - uint8 productBands; - uint8 wlanNvRevId; - uint8 numOfTxChains; - uint8 numOfRxChains; - sMacAddr macAddr; - uint8 mfgSN[NV_FIELD_MFG_SN_SIZE]; - uint8 couplerType; - uint8 nvVersion; -} uNvFields; - - -//format of common part of nv -typedef PACKED_PRE struct PACKED_POST -{ - //always ensure fields are aligned to 32-bit boundaries - uint16 productId; - uint8 productBands; - uint8 wlanNvRevId; //0: WCN1312, 1: WCN1314, 2: WCN3660 - - uint8 numOfTxChains; - uint8 numOfRxChains; - uint8 macAddr[NV_FIELD_MAC_ADDR_SIZE]; /* Default, not change name for compatibility */ - uint8 macAddr2[NV_FIELD_MAC_ADDR_SIZE]; - uint8 macAddr3[NV_FIELD_MAC_ADDR_SIZE]; - uint8 macAddr4[NV_FIELD_MAC_ADDR_SIZE]; - uint8 mfgSN[NV_FIELD_MFG_SN_SIZE]; - uint8 couplerType; - uint8 nvVersion; -} sNvFields; - - -//From wlanfw/inc/halPhyTypes.h - -typedef int8 tPowerdBm; //power in signed 8-bit integer, no decimal places - -typedef PACKED_PRE union PACKED_POST -{ - uint32 measurement; //measured values can be passed to pttApi, but are maintained to 2 decimal places internally - int16 reported; //used internally only - reported values only maintain 2 decimals places -}uAbsPwrPrecision; - -typedef enum -{ - PHY_TX_CHAIN_0 = 0, - - NUM_PHY_MAX_TX_CHAINS = 1, - PHY_MAX_TX_CHAINS = NUM_PHY_MAX_TX_CHAINS, - PHY_ALL_TX_CHAINS, - - //possible tx chain combinations - PHY_NO_TX_CHAINS, - PHY_TX_CHAIN_INVALID = 0x7FFFFFFF /* define as 4 bytes data */ -}ePhyTxChains; - -//From wlanfw/inc/halRfTypes.h - -typedef enum -{ - REG_DOMAIN_FCC, - REG_DOMAIN_ETSI, - REG_DOMAIN_JAPAN, - REG_DOMAIN_WORLD, - REG_DOMAIN_N_AMER_EXC_FCC, - REG_DOMAIN_APAC, - REG_DOMAIN_KOREA, - REG_DOMAIN_HI_5GHZ, - REG_DOMAIN_NO_5GHZ, - - NUM_REG_DOMAINS, - NUM_REG_DOMAINS_INVALID = 0x7FFFFFFF /* define as 4 bytes data */ -}eRegDomainId; - -typedef enum -{ - RF_SUBBAND_2_4_GHZ = 0, - RF_SUBBAND_5_LOW_GHZ = 1, //Low & Mid U-NII - RF_SUBBAND_5_MID_GHZ = 2, //ETSI - RF_SUBBAND_5_HIGH_GHZ = 3, //High U-NII - RF_SUBBAND_4_9_GHZ = 4, //Japanese - - - NUM_RF_SUBBANDS, - - MAX_RF_SUBBANDS, - INVALID_RF_SUBBAND, - - RF_BAND_2_4_GHZ = 0, - RF_BAND_5_GHZ = 1, - NUM_RF_BANDS, - BOTH_RF_BANDS, - RF_SUBBAND_INVALID = 0x7FFFFFFF /* define as 4 bytes data */ -}eRfSubBand; - -typedef enum -{ - //2.4GHz Band - RF_CHAN_1 = 0, - RF_CHAN_2 = 1, - RF_CHAN_3 = 2, - RF_CHAN_4 = 3, - RF_CHAN_5 = 4, - RF_CHAN_6 = 5, - RF_CHAN_7 = 6, - RF_CHAN_8 = 7, - RF_CHAN_9 = 8, - RF_CHAN_10 = 9, - RF_CHAN_11 = 10, - RF_CHAN_12 = 11, - RF_CHAN_13 = 12, - RF_CHAN_14 = 13, - - //4.9GHz Band - RF_CHAN_240 = 14, - RF_CHAN_244 = 15, - RF_CHAN_248 = 16, - RF_CHAN_252 = 17, - RF_CHAN_208 = 18, - RF_CHAN_212 = 19, - RF_CHAN_216 = 20, - - //5GHz Low & Mid U-NII Band - RF_CHAN_36 = 21, - RF_CHAN_40 = 22, - RF_CHAN_44 = 23, - RF_CHAN_48 = 24, - RF_CHAN_52 = 25, - RF_CHAN_56 = 26, - RF_CHAN_60 = 27, - RF_CHAN_64 = 28, - - //5GHz Mid Band - ETSI & FCC - RF_CHAN_100 = 29, - RF_CHAN_104 = 30, - RF_CHAN_108 = 31, - RF_CHAN_112 = 32, - RF_CHAN_116 = 33, - RF_CHAN_120 = 34, - RF_CHAN_124 = 35, - RF_CHAN_128 = 36, - RF_CHAN_132 = 37, - RF_CHAN_136 = 38, - RF_CHAN_140 = 39, - - //5GHz High U-NII Band - RF_CHAN_149 = 40, - RF_CHAN_153 = 41, - RF_CHAN_157 = 42, - RF_CHAN_161 = 43, - RF_CHAN_165 = 44, - - //CHANNEL BONDED CHANNELS - RF_CHAN_BOND_3 = 45, - RF_CHAN_BOND_4 = 46, - RF_CHAN_BOND_5 = 47, - RF_CHAN_BOND_6 = 48, - RF_CHAN_BOND_7 = 49, - RF_CHAN_BOND_8 = 50, - RF_CHAN_BOND_9 = 51, - RF_CHAN_BOND_10 = 52, - RF_CHAN_BOND_11 = 53, - RF_CHAN_BOND_242 = 54, //4.9GHz Band - RF_CHAN_BOND_246 = 55, - RF_CHAN_BOND_250 = 56, - RF_CHAN_BOND_210 = 57, - RF_CHAN_BOND_214 = 58, - RF_CHAN_BOND_38 = 59, //5GHz Low & Mid U-NII Band - RF_CHAN_BOND_42 = 60, - RF_CHAN_BOND_46 = 61, - RF_CHAN_BOND_50 = 62, - RF_CHAN_BOND_54 = 63, - RF_CHAN_BOND_58 = 64, - RF_CHAN_BOND_62 = 65, - RF_CHAN_BOND_102 = 66, //5GHz Mid Band - ETSI & FCC - RF_CHAN_BOND_106 = 67, - RF_CHAN_BOND_110 = 68, - RF_CHAN_BOND_114 = 69, - RF_CHAN_BOND_118 = 70, - RF_CHAN_BOND_122 = 71, - RF_CHAN_BOND_126 = 72, - RF_CHAN_BOND_130 = 73, - RF_CHAN_BOND_134 = 74, - RF_CHAN_BOND_138 = 75, - RF_CHAN_BOND_151 = 76, //5GHz High U-NII Band - RF_CHAN_BOND_155 = 77, - RF_CHAN_BOND_159 = 78, - RF_CHAN_BOND_163 = 79, - - NUM_RF_CHANNELS, - - MIN_2_4GHZ_CHANNEL = RF_CHAN_1, - MAX_2_4GHZ_CHANNEL = RF_CHAN_14, - - MIN_5GHZ_CHANNEL = RF_CHAN_240, - MAX_5GHZ_CHANNEL = RF_CHAN_165, - NUM_5GHZ_CHANNELS = (MAX_5GHZ_CHANNEL - MIN_5GHZ_CHANNEL + 1), - - MIN_20MHZ_RF_CHANNEL = RF_CHAN_1, - MAX_20MHZ_RF_CHANNEL = RF_CHAN_165, - NUM_20MHZ_RF_CHANNELS = (MAX_20MHZ_RF_CHANNEL - MIN_20MHZ_RF_CHANNEL + 1), - - MIN_40MHZ_RF_CHANNEL = RF_CHAN_BOND_3, - MAX_40MHZ_RF_CHANNEL = RF_CHAN_BOND_163, - NUM_40MHZ_RF_CHANNELS = (MAX_40MHZ_RF_CHANNEL - MIN_40MHZ_RF_CHANNEL + 1), - - MIN_CB_2_4GHZ_CHANNEL = RF_CHAN_BOND_3, - MAX_CB_2_4GHZ_CHANNEL = RF_CHAN_BOND_11, - - MIN_CB_5GHZ_CHANNEL = RF_CHAN_BOND_242, - MAX_CB_5GHZ_CHANNEL = RF_CHAN_BOND_163, - - NUM_TPC_2_4GHZ_CHANNELS = 14, - NUM_TPC_5GHZ_CHANNELS = NUM_5GHZ_CHANNELS, - - INVALID_RF_CHANNEL = 0xBAD, - RF_CHANNEL_INVALID_MAX_FIELD = 0x7FFFFFFF /* define as 4 bytes data */ -}eRfChannels; - -typedef enum -{ - RF_CHAN_1_1 = RF_CHAN_1, - RF_CHAN_2_1 = RF_CHAN_2, - RF_CHAN_3_1 = RF_CHAN_3, - RF_CHAN_4_1 = RF_CHAN_4, - RF_CHAN_5_1 = RF_CHAN_5, - RF_CHAN_6_1 = RF_CHAN_6, - RF_CHAN_7_1 = RF_CHAN_7, - RF_CHAN_8_1 = RF_CHAN_8, - RF_CHAN_9_1 = RF_CHAN_9, - RF_CHAN_10_1 = RF_CHAN_10, - RF_CHAN_11_1 = RF_CHAN_11, - RF_CHAN_12_1 = RF_CHAN_12, - RF_CHAN_13_1 = RF_CHAN_13, - RF_CHAN_14_1 = RF_CHAN_14, -// The above params are used for scripts. - NUM_2_4GHZ_CHANNELS, -}eRfChannels_2_4GHz; - -enum -{ - NV_CHANNEL_DISABLE, - NV_CHANNEL_ENABLE, - NV_CHANNEL_DFS, - NV_CHANNEL_INVALID -}; -typedef uint8 eNVChannelEnabledType; - -typedef PACKED_PRE struct PACKED_POST -{ - eNVChannelEnabledType enabled; - tPowerdBm pwrLimit; -}sRegulatoryChannel; - -typedef PACKED_PRE struct PACKED_POST -{ - sRegulatoryChannel channels[NUM_RF_CHANNELS]; - uAbsPwrPrecision antennaGain[NUM_RF_SUBBANDS]; - uAbsPwrPrecision bRatePowerOffset[NUM_2_4GHZ_CHANNELS]; - uAbsPwrPrecision gnRatePowerOffset[NUM_RF_CHANNELS]; -}ALIGN_4 sRegulatoryDomains; - -typedef PACKED_PRE struct PACKED_POST -{ - int16 bRssiOffset[NUM_RF_CHANNELS]; - int16 gnRssiOffset[NUM_RF_CHANNELS]; -}ALIGN_4 sRssiChannelOffsets; - -typedef PACKED_PRE struct PACKED_POST -{ - uint16 targetFreq; //number in MHz - uint16 channelNum; //channel number as in the eRfChannels enumeration - eRfSubBand band; //band that this channel belongs to -}tRfChannelProps; - -typedef enum -{ - MODE_802_11B = 0, - MODE_802_11AG = 1, - MODE_802_11N = 2, - NUM_802_11_MODES, - MODE_802_11_INVALID = 0x7FFFFFFF /* define as 4 bytes data */ -} e80211Modes; - -#define HW_CAL_VALUES_VALID_BMAP_UNUSED 0 //Value -//Bit mask -#define HW_VAL_VALUES_VALID_BMAP_SLEEP_TIME_OVERHEAD_2G_MASK 0x1 -#define HW_VAL_VALUES_VALID_BMAP_SLEEP_TIME_OVERHEAD_5G_MASK 0x2 -#define HW_VAL_VALUES_VALID_BMAP_SLEEP_TIME_OVERHEAD_xLNA_5G_MASK 0x4 -#define HW_VAL_VALUES_VALID_TXBBF_SEL_9MHZ_MASK 0x8 -#define HW_VAL_VALUES_VALID_CUSTOM_TCXO_REG8_MASK 0x10 -#define HW_VAL_VALUES_VALID_CUSTOM_TCXO_REG9_MASK 0x20 - - -//From wlanfw/inc/halPhyCalMemory.h -typedef PACKED_PRE struct PACKED_POST -{ - uint16 psSlpTimeOvrHd2G; - uint16 psSlpTimeOvrHd5G; - - uint16 psSlpTimeOvrHdxLNA5G; - uint8 nv_TxBBFSel9MHz : 1; - uint8 hwParam1 : 7; - uint8 hwParam2; - - uint16 custom_tcxo_reg8; - uint16 custom_tcxo_reg9; - - uint32 hwParam3; - uint32 hwParam4; - uint32 hwParam5; - uint32 hwParam6; - uint32 hwParam7; - uint32 hwParam8; - uint32 hwParam9; - uint32 hwParam10; - uint32 hwParam11; -}sCalData; - -typedef PACKED_PRE struct PACKED_POST -{ - uint32 validBmap; //use eNvCalID - sCalData calData; -}sHwCalValues; - -typedef PACKED_PRE struct PACKED_POST -{ - uint32 txFirFilterMode; -}sTxBbFilterMode; - -typedef PACKED_PRE struct PACKED_POST -{ - int16 ofdmPwrOffset; - int16 rsvd; -}sOfdmCmdPwrOffset; - -//From wlanfw/inc/halPhyCfg.h -typedef uint8 tTpcLutValue; - -#define MAX_TPC_CAL_POINTS (8) - -typedef uint8 tPowerDetect; //7-bit power detect reading - -typedef PACKED_PRE struct PACKED_POST -{ - tPowerDetect pwrDetAdc; //= SENSED_PWR register, which reports the 8-bit ADC - // the stored ADC value gets shifted to 7-bits as the index to the LUT - tPowerDetect adjustedPwrDet; //7-bit value that goes into the LUT at the LUT[pwrDet] location - //MSB set if extraPrecision.hi8_adjustedPwrDet is used -}tTpcCaldPowerPoint; - -typedef tTpcCaldPowerPoint tTpcCaldPowerTable[NUM_PHY_MAX_TX_CHAINS][MAX_TPC_CAL_POINTS]; - -typedef PACKED_PRE struct PACKED_POST -{ - tTpcCaldPowerTable empirical; //calibrated power points -}tTpcConfig; - -//From wlanfw/inc/phyTxPower.h -#ifndef TPC_MEM_POWER_LUT_DEPTH -#define TPC_MEM_POWER_LUT_DEPTH 256 -#endif - -typedef tTpcLutValue tTpcPowerTable[NUM_PHY_MAX_TX_CHAINS][TPC_MEM_POWER_LUT_DEPTH]; - -typedef PACKED_PRE struct PACKED_POST -{ - tTpcConfig *pwrSampled; //points to CLPC data in calMemory -}tPhyTxPowerBand; - -//From halPhyRates.h -typedef enum -{ - //802.11b Rates - HAL_PHY_RATE_11B_LONG_1_MBPS, - HAL_PHY_RATE_11B_LONG_2_MBPS, - HAL_PHY_RATE_11B_LONG_5_5_MBPS, - HAL_PHY_RATE_11B_LONG_11_MBPS, - HAL_PHY_RATE_11B_SHORT_2_MBPS, - HAL_PHY_RATE_11B_SHORT_5_5_MBPS, - HAL_PHY_RATE_11B_SHORT_11_MBPS, - - //Spica_Virgo 11A 20MHz Rates - HAL_PHY_RATE_11A_6_MBPS, - HAL_PHY_RATE_11A_9_MBPS, - HAL_PHY_RATE_11A_12_MBPS, - HAL_PHY_RATE_11A_18_MBPS, - HAL_PHY_RATE_11A_24_MBPS, - HAL_PHY_RATE_11A_36_MBPS, - HAL_PHY_RATE_11A_48_MBPS, - HAL_PHY_RATE_11A_54_MBPS, - - // 11A 20MHz Rates - HAL_PHY_RATE_11A_DUP_6_MBPS, - HAL_PHY_RATE_11A_DUP_9_MBPS, - HAL_PHY_RATE_11A_DUP_12_MBPS, - HAL_PHY_RATE_11A_DUP_18_MBPS, - HAL_PHY_RATE_11A_DUP_24_MBPS, - HAL_PHY_RATE_11A_DUP_36_MBPS, - HAL_PHY_RATE_11A_DUP_48_MBPS, - HAL_PHY_RATE_11A_DUP_54_MBPS, - - //MCS Index #0-7 (20/40MHz) - HAL_PHY_RATE_MCS_1NSS_6_5_MBPS, - HAL_PHY_RATE_MCS_1NSS_13_MBPS, - HAL_PHY_RATE_MCS_1NSS_19_5_MBPS, - HAL_PHY_RATE_MCS_1NSS_26_MBPS, - HAL_PHY_RATE_MCS_1NSS_39_MBPS, - HAL_PHY_RATE_MCS_1NSS_52_MBPS, - HAL_PHY_RATE_MCS_1NSS_58_5_MBPS, - HAL_PHY_RATE_MCS_1NSS_65_MBPS, - HAL_PHY_RATE_MCS_1NSS_MM_SG_7_2_MBPS, - HAL_PHY_RATE_MCS_1NSS_MM_SG_14_4_MBPS, - HAL_PHY_RATE_MCS_1NSS_MM_SG_21_7_MBPS, - HAL_PHY_RATE_MCS_1NSS_MM_SG_28_9_MBPS, - HAL_PHY_RATE_MCS_1NSS_MM_SG_43_3_MBPS, - HAL_PHY_RATE_MCS_1NSS_MM_SG_57_8_MBPS, - HAL_PHY_RATE_MCS_1NSS_MM_SG_65_MBPS, - HAL_PHY_RATE_MCS_1NSS_MM_SG_72_2_MBPS, - - //MCS Index #8-15 (20/40MHz) - HAL_PHY_RATE_MCS_1NSS_CB_13_5_MBPS, - HAL_PHY_RATE_MCS_1NSS_CB_27_MBPS, - HAL_PHY_RATE_MCS_1NSS_CB_40_5_MBPS, - HAL_PHY_RATE_MCS_1NSS_CB_54_MBPS, - HAL_PHY_RATE_MCS_1NSS_CB_81_MBPS, - HAL_PHY_RATE_MCS_1NSS_CB_108_MBPS, - HAL_PHY_RATE_MCS_1NSS_CB_121_5_MBPS, - HAL_PHY_RATE_MCS_1NSS_CB_135_MBPS, - HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_15_MBPS, - HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_30_MBPS, - HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_45_MBPS, - HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_60_MBPS, - HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_90_MBPS, - HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_120_MBPS, - HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_135_MBPS, - HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_150_MBPS, - -#ifdef WLAN_FEATURE_11AC - /*11A duplicate 80MHz Rates*/ - HAL_PHY_RATE_11AC_DUP_6_MBPS, - HAL_PHY_RATE_11AC_DUP_9_MBPS, - HAL_PHY_RATE_11AC_DUP_12_MBPS, - HAL_PHY_RATE_11AC_DUP_18_MBPS, - HAL_PHY_RATE_11AC_DUP_24_MBPS, - HAL_PHY_RATE_11AC_DUP_36_MBPS, - HAL_PHY_RATE_11AC_DUP_48_MBPS, - HAL_PHY_RATE_11AC_DUP_54_MBPS, - - /*11AC rate 20MHZ Normal GI*/ - HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_6_5_MBPS, - HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_13_MBPS, - HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_19_5_MBPS, - HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_26_MBPS, - HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_39_MBPS, - HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_52_MBPS, - HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_58_5_MBPS, - HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_65_MBPS, - HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_78_MBPS, -#ifdef WCN_PRONTO - HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_86_5_MBPS, -#endif - - /*11AC rate 20MHZ Shortl GI*/ - HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_7_2_MBPS, - HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_14_4_MBPS, - HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_21_6_MBPS, - HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_28_8_MBPS, - HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_43_3_MBPS, - HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_57_7_MBPS, - HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_65_MBPS, - HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_72_2_MBPS, - HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_86_6_MBPS, -#ifdef WCN_PRONTO - HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_96_1_MBPS, -#endif - - /*11AC rates 40MHZ normal GI*/ - HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_13_5_MBPS , - HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_27_MBPS, - HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_40_5_MBPS, - HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_54_MBPS, - HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_81_MBPS, - HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_108_MBPS, - HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_121_5_MBPS, - HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_135_MBPS, - HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_162_MBPS, - HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_180_MBPS, - - /*11AC rates 40MHZ short GI*/ - HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_15_MBPS , - HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_30_MBPS, - HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_45_MBPS, - HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_60_MBPS, - HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_90_MBPS, - HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_120_MBPS, - HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_135_MBPS, - HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_150_MBPS, - HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_180_MBPS, - HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_200_MBPS, - - /*11AC rates 80 MHZ normal GI*/ - HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_29_3_MBPS , - HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_58_5_MBPS, - HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_87_8_MBPS, - HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_117_MBPS, - HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_175_5_MBPS, - HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_234_MBPS, - HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_263_3_MBPS, - HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_292_5_MBPS, - HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_351_MBPS, - HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_390_MBPS, - - /*11AC rates 80 MHZ short GI*/ - HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_32_5_MBPS , - HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_65_MBPS, - HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_97_5_MBPS, - HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_130_MBPS, - HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_195_MBPS, - HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_260_MBPS, - HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_292_5_MBPS, - HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_325_MBPS, - HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_390_MBPS, - HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_433_3_MBPS, -#endif //WLAN_FEATURE_11AC - - NUM_HAL_PHY_RATES, - HAL_PHY_RATE_INVALID, - MIN_RATE_INDEX = 0, - MAX_RATE_INDEX = NUM_HAL_PHY_RATES - 1, - HAL_PHY_RATE_INVALID_MAX_FIELD = 0x7FFFFFFF /* define as 4 bytes data */ -}eHalPhyRates; - -#define NUM_RATE_POWER_GROUPS NUM_HAL_PHY_RATES //total number of rate power groups including the CB_RATE_POWER_OFFSET -typedef uAbsPwrPrecision tRateGroupPwr[NUM_HAL_PHY_RATES]; - -//From halNvTables.h -#define NV_FIELD_COUNTRY_CODE_SIZE 3 -typedef PACKED_PRE struct PACKED_POST -{ - uint8 regDomain; //from eRegDomainId - uint8 countryCode[NV_FIELD_COUNTRY_CODE_SIZE]; // string identifier -}sDefaultCountry; - - -#define GF_PA_BIAS_SELECT_MASK 0X7 //(3 bits) -#define TSMC_PA_BIAS_SELECT_MASK 0x7 //(3 bits) - -#define GF_PA_BIAS_SELECT_1 0X0 -#define GF_PA_BIAS_SELECT_2 0X1 - -#define TSMC_PA_BIAS_SELECT_1 0X0 -#define TSMC_PA_BIAS_SELECT_2 0X1 -#define TSMC_PA_BIAS_SELECT_3 0x2 - - -#define EXT_PA_CTRL_POLARITY_DEFAULT 0X0 -#define EXT_PA_CTRL_POLARITY_VALID 0X80 - -#define EXT_PA_CTRL0_POLARITY_MASK 0X3 -#define EXT_PA_CTRL0_POLARITY_OFFSET 0X0 -#define EXT_PA_CTRL1_POLARITY_MASK 0XC -#define EXT_PA_CTRL1_POLARITY_OFFSET 0X2 - -#define EXT_PA_CTRL_POLARITY_ZERO 0X1 -#define EXT_PA_CTRL_POLARITY_ONE 0X2 - -typedef PACKED_PRE struct PACKED_POST -{ - uint8 skuID; - uint8 tpcMode2G; - uint8 tpcMode5G; - uint8 configItem1; - - uint8 xPA2G; - uint8 xPA5G; - uint8 extPaCtrl0Polarity; - uint8 extPaCtrl1Polarity; - - uint8 xLNA2G; - uint8 xLNA5G; - uint8 xCoupler2G; - uint8 xCoupler5G; - - uint8 xPdet2G; - uint8 xPdet5G; - uint8 enableDPD2G; - uint8 enableDPD5G; - - uint8 pdadcSelect2G; - uint8 pdadcSelect5GLow; - uint8 pdadcSelect5GMid; - uint8 pdadcSelect5GHigh; - - uint32 configItem2; - uint32 configItem3; - uint32 configItem4; -}sFwConfig; - - -#define NUM_RF_VR_RATE 13 -typedef uAbsPwrPrecision tRateGroupPwrVR[NUM_RF_VR_RATE]; - -typedef PACKED_PRE union PACKED_POST -{ - tRateGroupPwr pwrOptimum[NUM_RF_SUBBANDS]; // NV_TABLE_RATE_POWER_SETTINGS - sRegulatoryDomains regDomains[NUM_REG_DOMAINS]; // NV_TABLE_REGULATORY_DOMAINS - sDefaultCountry defaultCountryTable; // NV_TABLE_DEFAULT_COUNTRY - tTpcPowerTable plutCharacterized[NUM_RF_CHANNELS]; // NV_TABLE_TPC_POWER_TABLE - int16 plutPdadcOffset[NUM_RF_CHANNELS]; // NV_TABLE_TPC_PDADC_OFFSETS - tRateGroupPwrVR pwrOptimum_virtualRate[NUM_RF_SUBBANDS]; // NV_TABLE_VIRTUAL_RATE - sFwConfig fwConfig; // NV_TABLE_FW_CONFIG - sRssiChannelOffsets rssiChanOffsets[2]; // NV_TABLE_RSSI_CHANNEL_OFFSETS - sHwCalValues hwCalValues; // NV_TABLE_HW_CAL_VALUES - int16 antennaPathLoss[NUM_RF_CHANNELS]; // NV_TABLE_ANTENNA_PATH_LOSS - int16 pktTypePwrLimits[NUM_802_11_MODES][NUM_RF_CHANNELS]; // NV_TABLE_PACKET_TYPE_POWER_LIMITS - sOfdmCmdPwrOffset ofdmCmdPwrOffset; // NV_TABLE_OFDM_CMD_PWR_OFFSET - sTxBbFilterMode txbbFilterMode; // NV_TABLE_TX_BB_FILTER_MODE -}ALIGN_4 uNvTables; - -//From halPhy.h -typedef tPowerdBm tChannelPwrLimit; - -typedef PACKED_PRE struct PACKED_POST -{ - uint8 chanId; - tChannelPwrLimit pwr; -} ALIGN_4 tChannelListWithPower; - -//From HAL/inc/halNvTables.h -typedef enum -{ - NV_FIELDS_IMAGE = 0, //contains all fields - - NV_TABLE_RATE_POWER_SETTINGS = 2, - NV_TABLE_REGULATORY_DOMAINS = 3, - NV_TABLE_DEFAULT_COUNTRY = 4, - NV_TABLE_TPC_POWER_TABLE = 5, - NV_TABLE_TPC_PDADC_OFFSETS = 6, - NV_TABLE_HW_CAL_VALUES = 7, - NV_TABLE_RSSI_CHANNEL_OFFSETS = 9, - NV_TABLE_CAL_MEMORY = 10, //cal memory structure from halPhyCalMemory.h preceded by status - NV_TABLE_FW_CONFIG = 11, - NV_TABLE_ANTENNA_PATH_LOSS = 12, - NV_TABLE_PACKET_TYPE_POWER_LIMITS = 13, - NV_TABLE_OFDM_CMD_PWR_OFFSET = 14, - NV_TABLE_TX_BB_FILTER_MODE = 15, - NV_TABLE_VIRTUAL_RATE = 18, - - NUM_NV_TABLE_IDS, - NV_ALL_TABLES = 0xFFF, - NV_BINARY_IMAGE = 0x1000, - NV_MAX_TABLE = 0x7FFFFFFF /* define as 4 bytes data */ -}eNvTable; - -typedef PACKED_PRE struct PACKED_POST -{ - tRateGroupPwr pwrOptimum[NUM_RF_SUBBANDS]; // NV_TABLE_RATE_POWER_SETTINGS - sRegulatoryDomains regDomains[NUM_REG_DOMAINS]; // NV_TABLE_REGULATORY_DOMAINS - sDefaultCountry defaultCountryTable; // NV_TABLE_DEFAULT_COUNTRY - tTpcPowerTable plutCharacterized[NUM_RF_CHANNELS]; // NV_TABLE_TPC_POWER_TABLE - int16 plutPdadcOffset[NUM_RF_CHANNELS]; // NV_TABLE_TPC_PDADC_OFFSETS - tRateGroupPwrVR pwrOptimum_virtualRate[NUM_RF_SUBBANDS]; // NV_TABLE_VIRTUAL_RATE - sFwConfig fwConfig; // NV_TABLE_FW_CONFIG - sRssiChannelOffsets rssiChanOffsets[2]; // NV_TABLE_RSSI_CHANNEL_OFFSETS - sHwCalValues hwCalValues; // NV_TABLE_HW_CAL_VALUES - int16 antennaPathLoss[NUM_RF_CHANNELS]; // NV_TABLE_ANTENNA_PATH_LOSS - int16 pktTypePwrLimits[NUM_802_11_MODES][NUM_RF_CHANNELS]; // NV_TABLE_PACKET_TYPE_POWER_LIMITS - sOfdmCmdPwrOffset ofdmCmdPwrOffset; // NV_TABLE_OFDM_CMD_PWR_OFFSET - sTxBbFilterMode txbbFilterMode; // NV_TABLE_TX_BB_FILTER_MODE -}ALIGN_4 sNvTables; - -typedef PACKED_PRE struct PACKED_POST -{ - sNvFields fields; - sNvTables tables; -}ALIGN_4 sHalNv; - -extern const sHalNv nvDefaults; - -#endif - diff --git a/riva/inc/wlan_phy.h b/riva/inc/wlan_phy.h deleted file mode 100644 index 9e8df121bb50..000000000000 --- a/riva/inc/wlan_phy.h +++ /dev/null @@ -1,898 +0,0 @@ -/* -* Copyright (c) 2012-2013 Qualcomm Atheros, Inc. -* All Rights Reserved. -* Qualcomm Atheros Confidential and Proprietary. -*/ - -#ifndef WLAN_PHY_H -#define WLAN_PHY_H -/*============================================================================ -@file wlan_phy.h - -Contains definitions of all PHY related structures that aree needed by FTM/PTT - -Copyright (c) 2007 Qualcomm Technologies, Inc. All Rights Reserved. -Qualcomm Technologies Proprietary and Confidential -============================================================================*/ -#include - -/* Currently this structure holds the information about the current calibration mode. -In future, if anymore info is needed, that can be added here */ -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 currentCalibration; -} sCalibrationInfo; - -typedef PACKED_PRE struct PACKED_POST { - tANI_S16 I; //ADC sample of PHY_I_RAIL - tANI_S16 Q; //ADC sample of PHY_Q_RAIL -}tIQSamples; - -typedef tIQSamples tIQAdc; -typedef tIQSamples tIQDac; - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 maxGainIndex; - tANI_U8 topGainDb; - tANI_U8 bottomGainDb; - tANI_U8 unused[1]; -}tAsicAgc; - -#define TXFIR_MEM QWLAN_TXFIR_TXCAL_MEM0_MREG -#define TXFIR_MEM_GAIN_MULT (16) //bytes per gain -#define TXFIR_MEM_PER_CHAIN (16 * TXFIR_MEM_GAIN_MULT) //# of gains per chain * bytes per gain - -typedef tIQAdc tTxCarrierError; - -#define ONE_MICROSECOND (160) -#define DEFAULT_INTERFRAME_SPACE (ONE_MICROSECOND * 10) //10 microseconds - -typedef enum { - PHYDBG_TX_IDLE = 0, - PHYDBG_TX_START = 1, - PHYDBG_TX_WARMUP = 2, - PHYDBG_TX_INFD = 3, - PHYDBG_TX_CMD = 4, - PHYDBG_TX_SVC = 5, - PHYDBG_TX_PYLDF = 6, - PHYDBG_TX_PYLDR = 7, - PHYDBG_TX_CRC = 8, - PHYDBG_TX_FLUSH = 9, - PHYDBG_TX_TXDONEWAIT = 10, - PHYDBG_TX_TIFWAIT = 11 -} ePhyDbgTxStatus; - -typedef enum { - PHYDBG_PREAMBLE_OFDM, - PHYDBG_PREAMBLE_GREENFIELD, - PHYDBG_PREAMBLE_MIXED, - PHYDBG_PREAMBLE_SHORTB, - PHYDBG_PREAMBLE_LONGB, - - PHYDBG_LDPC_PREAMBLE_OFDM = 0x10, - PHYDBG_LDPC_PREAMBLE_GREENFIELD = 0x11, - PHYDBG_LDPC_PREAMBLE_MIXED = 0x12 -} ePhyDbgPreamble; - - -//grab ram -#ifdef VERIFY_HALPHY_SIMV_MODEL -#define GRAB_RAM_DBLOCK_SIZE (256) //number of samples in full capture -#else -#define GRAB_RAM_DBLOCK_SIZE (1024) //number of samples in full capture -#endif - -#define MAX_REQUESTED_GRAB_RAM_SAMPLES 256 //only allow 256 samples at a time -#define GRAB_RAM_BUFFER_DEPTH (4*1024) //maximum grab ram size in full capture -#define LAST_GRAB_RAM_SAMPLE_INDEX (GRAB_RAM_BUFFER_DEPTH - 1) - - -typedef PACKED_PRE struct PACKED_POST { - tIQAdc rx0; -} tGrabRamSample; - - -enum { - GRABRAM_RAWADC = 0, - GRABRAM_POSTIQ -}; -typedef tANI_U32 eGrabRamSampleType; - -typedef tANI_S8 tANI_S6; -typedef tANI_S16 tANI_S9; -typedef tANI_S16 tANI_S10; -typedef tANI_S16 tANI_S12; -typedef tANI_U16 tANI_U10; - - - -//convert float to a format that preserves enough accuracy to be used by driver -typedef tANI_S16 t2Decimal; -#define CONVERT_TO_2DECIMAL_PLACES(x) (x * 100) -#define CONVERT_FROM_2DECIMAL_PLACES(x) (x / 100) - -#ifndef PTT_FLOAT -#define PTT_FLOAT tANI_U32 // driver code can't include float, -//so this reserves space in our structures to allow floating point measurements -#endif - -typedef enum -{ - PHY_RX_CHAIN_0 = 0, - - PHY_MAX_RX_CHAINS = 1, - PHY_ALL_RX_CHAINS, - PHY_NO_RX_CHAINS -}ePhyRxChains; - -typedef enum -{ - PHY_I_RAIL = 0, - PHY_Q_RAIL = 1, - PHY_NUM_IQ_RAILS -}ePhyIQ; - -//[RY] extend total gain steps to 24 - -enum -{ - TX_GAIN_STEP_0, - TX_GAIN_STEP_1, - TX_GAIN_STEP_2, - TX_GAIN_STEP_3, - TX_GAIN_STEP_4, - TX_GAIN_STEP_5, - TX_GAIN_STEP_6, - TX_GAIN_STEP_7, - TX_GAIN_STEP_8, - TX_GAIN_STEP_9, - TX_GAIN_STEP_10, - TX_GAIN_STEP_11, - TX_GAIN_STEP_12, - TX_GAIN_STEP_13, - TX_GAIN_STEP_14, - TX_GAIN_STEP_15, - TX_GAIN_STEP_16, - TX_GAIN_STEP_17, - TX_GAIN_STEP_18, - TX_GAIN_STEP_19, - TX_GAIN_STEP_20, - TX_GAIN_STEP_21, - TX_GAIN_STEP_22, - TX_GAIN_STEP_23, - TX_GAIN_STEP_24, - TX_GAIN_STEP_25, - TX_GAIN_STEP_26, - TX_GAIN_STEP_27, - TX_GAIN_STEP_28, - TX_GAIN_STEP_29, - TX_GAIN_STEP_30, - TX_GAIN_STEP_31, - - RX_GAIN_STEP_0 = 0, - RX_GAIN_STEP_1, - RX_GAIN_STEP_2, - RX_GAIN_STEP_3, - RX_GAIN_STEP_4, - RX_GAIN_STEP_5, - RX_GAIN_STEP_6, - RX_GAIN_STEP_7, - RX_GAIN_STEP_8, - RX_GAIN_STEP_9, - RX_GAIN_STEP_10, - RX_GAIN_STEP_11, - RX_GAIN_STEP_12, - RX_GAIN_STEP_13, - RX_GAIN_STEP_14, - RX_GAIN_STEP_15, - - NUM_TX_GAIN_STEPS = 32, - MAX_TX_GAIN_STEP = TX_GAIN_STEP_31, - - NUM_RX_GAIN_STEPS = 16, - MAX_RX_GAIN_STEP = RX_GAIN_STEP_15, -}; -typedef tANI_U32 eGainSteps; - - -//[RY] new for PRIMA -#define DPD_RESPONSE_SIZE 128 -typedef PACKED_PRE struct PACKED_POST { - tANI_U8 dpdCalFailCnt; //Count for number of times DPD cal failed. - tANI_U8 dpdCalSuccessCnt; //Count for number of times DPD cal passed. - tANI_U8 dpdColdBootRepeatCalStatus; - tANI_U8 dpdLastIteration; - tANI_S16 dpd_threshold[DPD_RESPONSE_SIZE]; - tANI_S16 dpd_aoffset[DPD_RESPONSE_SIZE]; - tANI_S16 dpd_again[DPD_RESPONSE_SIZE]; - tANI_S16 dpd_poffset[DPD_RESPONSE_SIZE]; - tANI_S16 dpd_pgain[DPD_RESPONSE_SIZE]; - tANI_S32 dpd_sample[20]; - tANI_U8 dpd_try; - tANI_U8 band; -}sDPDcorrectionCalValues; - -typedef PACKED_PRE struct PACKED_POST { - sDPDcorrectionCalValues dpd[PHY_MAX_TX_CHAINS]; -}sTxChainsDPDCalValues; - - -//[RY] RX IQ correction coefficients Memory -typedef PACKED_PRE struct PACKED_POST { - tANI_S9 coeff_i[5]; - tANI_S9 coeff_q[5]; -}sIQCalValues; - -//[RY], added for RIVA -typedef PACKED_PRE struct PACKED_POST { - tANI_S9 iq_ampimb_coeff; - tANI_S16 txloleakage_i; // raw data is 6-bit 2's compliment - tANI_S16 txloleakage_q; // raw data is 6-bit 2's compliment -}sTXIQCalValues; - -//[RY], added for RIVA -typedef PACKED_PRE struct PACKED_POST { - tANI_S9 iqphaseimb_coeff_i[5]; - tANI_S9 iqphaseimb_coeff_q[5]; -}sTXIQPhaseImbCalValues; - -typedef PACKED_PRE struct PACKED_POST { - sIQCalValues iq[PHY_MAX_RX_CHAINS]; -}sRxChainsIQCalValues; - -//[RY] change for PRIMA -typedef PACKED_PRE struct PACKED_POST { - sTXIQCalValues iq[PHY_MAX_TX_CHAINS]; - sTXIQPhaseImbCalValues iqImb[PHY_MAX_TX_CHAINS]; -}sTxChainsIQCalValues; - -typedef PACKED_PRE struct PACKED_POST { - tANI_S9 co_i[3]; - tANI_S9 co_q[3]; -}sHKIQCalValues; - -typedef PACKED_PRE struct PACKED_POST { - sHKIQCalValues co[PHY_MAX_TX_CHAINS]; -}sTxChainsHKIQCalValues; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U8 lna_code; //wlan_lna_5g_control1,wl_5g_lna_load_ctune - tANI_U8 gm_code; //wlan_rxgm_5g_control4,wlgm_ctune -}sLnaBandCalValues; - -typedef PACKED_PRE struct PACKED_POST { - sLnaBandCalValues lnaCode[PHY_MAX_RX_CHAINS]; -}sTxChainsLnaBandCalValues; - -typedef tANI_U16 t_mW; //milliWatts -typedef tANI_U8 tPwrTemplateIndex; //5-bit number used as the index into the tx gain tables - -typedef PACKED_PRE struct PACKED_POST { - tANI_U8 txPowerAdc[PHY_MAX_TX_CHAINS]; -}sTxChainsPowerAdcReadings; - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 agcGain; -}tRxGain; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U8 rx[PHY_MAX_RX_CHAINS]; -}sRxChainsData; - -typedef sRxChainsData sRxChainsRssi; -typedef sRxChainsData sRxChainsAgcDisable; - -typedef PACKED_PRE struct PACKED_POST { - tANI_BOOLEAN rx[PHY_MAX_RX_CHAINS]; -}sRxChainsBoolean; - -typedef sRxChainsBoolean sRxChainsAgcEnable; - -#define NUM_AGC_GAINS 64 -typedef tRxGain sAgcGainLut[NUM_AGC_GAINS]; - - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_S6 iLo; - tANI_S6 qLo; -}sTxFirLoCorrect; - -typedef tIQAdc sTxLoCorrectBB[PHY_MAX_TX_CHAINS][NUM_TX_GAIN_STEPS]; - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U32 txIqLoCache[PHY_MAX_TX_CHAINS][NUM_TX_GAIN_STEPS][4]; - tANI_U32 spatialRotation; -}tAsicTxFir; - -//Tx Power Config -//A collection of selected calibrated power points at selected frequencies. -//The algorithm does not need to know any particulars about which frequencies or cal points, -// just the linearized adjustments at the selected calibration points -#define MAX_TPC_CHANNELS (NUM_RF_CHANNELS) -#define START_TPC_CHANNEL (2412) -#define END_TPC_CHANNEL (2484) - -#define MAX_PWR_LUT_DBM (24) -#define MIN_PWR_LUT_DBM (8) - - -/* The reason that MAX_PWR_LUT_DBM_2DEC_PLACES is not simply (MAX_PWR_LUT_DBM * 100) is due to the fact - that we are interpolating the 5-bit power template index from this range compared to a LUT range of 0 to 127. - There is an expectation that this power range is evenly divided in 0.5dBm steps. - We expect that a commanded 13dBm would yield a power template index of 10, where a power template index of 0 would represent 8dBm. - If we used an even 2400 to represent the max power, then the calculation for 13dBm actually returns 9: - (127 - 0)*((1300 - 800)/(2400 - 800))+0 = 39.6875 = 39. When shifted to 5 bits, =9. Not what we wanted. - What we need to do is find the 2-decimal place power that corresponds as closely as possible to the 127 in the 0 to 127 range. - For the 800 to 2400 range, that comes out to 2386.5, so 2386. So again for a commanded power of 13dBm: - (127 - 0)*((1300 - 800)/(2386 - 800))+0 = 40.0378 = 40. When shifted to 5-bits, = 10, which is what we wanted. - -*/ - -#define MIN_PWR_LUT_DBM_2DEC_PLACES (MIN_PWR_LUT_DBM * 100) -#define MAX_PWR_LUT_DBM_2DEC_PLACES ((MAX_PWR_LUT_DBM * 100) - (1 + (100 * (MAX_PWR_LUT_DBM - MIN_PWR_LUT_DBM))/TPC_MEM_POWER_LUT_DEPTH)) - -//macro provides a quick conversion of dbm value between MIN_PWR_LUT_DBM and MAX_PWR_LUT_DBM to a power template index(0 to 31) -//based on convention, which may not hold true in the future. -#define CONVERT_DBM_GINDEX(dbm) (((dbm - MIN_PWR_LUT_DBM) * 32) / (MAX_PWR_LUT_DBM - MIN_PWR_LUT_DBM)) - -typedef tANI_U8 tTxGainCombo; //7-bit gain value used to get the power measurement - -typedef PACKED_PRE struct PACKED_POST -{ - tPowerDetect min; - tPowerDetect max; -}tPwrTemplateRange; - - - -/* - The following union affords backward compatibility with txGain usage with band-specific tTpcConfig tables. - Due to my finding that 7-bits is not enough precision, we need to reuse the txGain space as extra precision bits - for the adjustedPwrDet. My spreadsheet shows that we need at least 4 bits more precision. - To know which usage, the MSB of adjustedPwrDet can be set to signify the extra precision in place of the txGain, which isn't used anyway. - We just need to be careful not to interpret a pre-existing table's txGain as extra precision. -*/ - - typedef union - { - tTxGainCombo txGain; //7-bit gain used to measure the pwrDetAdc value - tANI_U8 hi8_adjustedPwrDet; //if the MSB is set in adjustedPwrDet, then these are extra bits of precision - }uExtraLutBits; - - -typedef PACKED_PRE struct PACKED_POST -{ - t2Decimal min; //sometimes used for comparing chain powers - t2Decimal max; //sometimes used for comparing chain powers -}tPowerdBmRange; //absolute power measurement precision maintained to two decimal places - - -typedef tANI_U16 tRfADCVal; -typedef tRfADCVal tTempADCVal; - -typedef PACKED_PRE struct PACKED_POST -{ - tRfADCVal pdadc_offset; - tANI_U8 reserved[2]; -}tTpcParams; - - -//these definitions used as indexing to power per channel per rate table stored in NV -#define CB_RATE_POWER_OFFSET 0 -#define CB_RATE_POWER_OFFSET_LAST_INDEX 60 //last index where we would apply the CB_RATE_POWER_OFFSET - -/* TX Power Calibration & Report Types */ - - - typedef PACKED_PRE struct PACKED_POST - { - tANI_U8 temperatureAdc; //= 5 bit temperature measured at time sample was taken - tANI_U8 txGain; //= 7 bit gain value used to get the power measurement - tANI_U8 pwrDetAdc; //= 8 bit ADC power detect value - tANI_U8 reserved; - uAbsPwrPrecision absPowerMeasured; //= dBm measurement, will be truncated to two decimal places - }tTpcCalPoint; - - - typedef PACKED_PRE struct PACKED_POST - { - tANI_U16 numTpcCalPoints; - tANI_U16 reserved; - tTpcCalPoint chain[MAX_TPC_CAL_POINTS]; - }tTpcChainData; - - - typedef PACKED_PRE struct PACKED_POST - { - tANI_U16 freq; //frequency in MHz - tANI_U16 reserved; - tTpcChainData empirical[PHY_MAX_TX_CHAINS]; //TPC samples passed in - }tTpcFreqData; - - typedef PACKED_PRE struct PACKED_POST - { - tANI_U8 numChannels; - tANI_U8 reserved[3]; - tTpcFreqData calValues[MAX_TPC_CHANNELS]; - }sTpcFreqCalTable; - - -typedef PACKED_PRE struct PACKED_POST { - tPowerDetect lut; //7-bit value in the power Lookup Table - tANI_U8 reserved[3]; - - uAbsPwrPrecision abs; //LUT value conversion to absolute dBm -}tTxPowerLutOutput; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U8 gain; //8-bit coarse(bits 4-7) & fine(bits 0-3) gain commanded for the current index - tPowerDetect adc; //8-bit power ADC sampled during the packet preamble - tANI_U16 rawAdc; //11-bit power raw ADC sampled - - tTxPowerLutOutput indexMinMatch; //minimum LUT matching power that satisfies the power template index setting - tTxPowerLutOutput indexMaxMatch; //maximum LUT matching power that satisfies the power template index setting - tTxPowerLutOutput output; //output power values corresponding to power ADC index -}tTxChainPower; - -extern const tRfChannelProps rfChannels[NUM_RF_CHANNELS]; - -typedef enum -{ - RF_CAL_TONE_28NEG, - RF_CAL_TONE_24NEG, - RF_CAL_TONE_20NEG, - RF_CAL_TONE_16NEG, - RF_CAL_TONE_12NEG, - RF_CAL_TONE_8NEG, - RF_CAL_TONE_4NEG, - RF_CAL_TONE_4POS, - RF_CAL_TONE_8POS, - RF_CAL_TONE_12POS, - RF_CAL_TONE_16POS, - RF_CAL_TONE_20POS, - RF_CAL_TONE_24POS, - RF_CAL_TONE_28POS, - - NUM_RF_TONES, - - MIN_RF_TONE = RF_CAL_TONE_28NEG, - MAX_RF_TONE = RF_CAL_TONE_28POS -}eRfTones; - -typedef tANI_U8 tDcoCorrect; -typedef tANI_S8 tIm2Correct; - -typedef PACKED_PRE struct PACKED_POST { - tDcoCorrect IDcoCorrect; - tDcoCorrect QDcoCorrect; - tANI_U8 dcRange; -}tRxDcoCorrect; - -typedef PACKED_PRE struct PACKED_POST { - tRxDcoCorrect dco[PHY_MAX_RX_CHAINS]; -}tRxChainsDcoCorrections; - -typedef PACKED_PRE struct PACKED_POST { - tIm2Correct ICorrect; - tIm2Correct QCorrect; -}tRxIm2Correct; - -typedef PACKED_PRE struct PACKED_POST { - tRxIm2Correct dco[PHY_MAX_RX_CHAINS]; -}tRxChainsIm2Corrections; - -typedef PACKED_PRE struct PACKED_POST { - tDcoCorrect IDcoCorrect; - tDcoCorrect QDcoCorrect; -}tTxLoCorrect; - -typedef PACKED_PRE struct PACKED_POST { - tTxLoCorrect txLo[PHY_MAX_TX_CHAINS]; -}sTxChainsLoCorrections; - - -//tDcoCorrect is needed to define rf specific structures - -#define NUM_RF_RX_GAIN_STEPS (128) -#define MAX_RF_RX_GAIN_STEP (NUM_RF_RX_GAIN_STEPS - 1) - -#define NUM_RF_TX_GAIN_STEPS (16) -#define MAX_RF_TX_GAIN_STEP (NUM_RF_TX_GAIN_STEPS - 1) - -#define RF_AGC_GAIN_LUT_DEPTH (128) -#define NUM_RF_DCO_VALUES (128) //There are only 32 DCO values, but our algorithm it makes more sense for us to access these by AGC gain index -#define MAX_RF_DCO_VALUE (NUM_RF_DCO_VALUES - 1) - - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U16 gainReg1; //GEMINI_REG_RX_GC_0 (lna + mix + tia + bq1 + bq2 + pga) -}tRfRxGain; - - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U16 bbf_gain_cnt; - tANI_U16 bbf_lin_adj; - tANI_U16 lo_mix_da_gain_cntl; - tANI_U16 pa_gain_cntl; - tANI_U16 da_pa_bias_1_cnt; - tANI_U16 da_pa_bias_2_cntl; -}tRfTxGain; - -typedef PACKED_PRE struct PACKED_POST -{ - //TODO:define this struct for Gemini - tANI_U8 rxIf; - tANI_U8 txIf; - tANI_U8 txRf; - tANI_U8 reserved; -}sRfSpecificFilterSettings; - -typedef sRfSpecificFilterSettings sRfChannelFilterSettings[NUM_RF_CHANNELS]; - - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 hdet_ctl_ext_atten; - tANI_U8 hdet_dcoc_code; - tANI_U8 hdet_dcoc_ib_rcal_en; - tANI_U8 hdet_dcoc_ib_scal_en; -}sRfNvCalValues; //stored in QFUSE - - - -typedef enum -{ - SYNTH_UNLOCKED, - SYNTH_LOCK -}eRfSynthLock; - -typedef enum -{ - TEMP_SENSOR_PA, - TEMP_SENSOR_RX -}eRfTempSensor; - -typedef enum -{ - TEMPERATURE_BIN_0, //-30 to 5 C - TEMPERATURE_BIN_1, //5 to 45 C - TEMPERATURE_BIN_2, //45 to 85 C - TEMPERATURE_BIN_3, //85 to 125 C - NUM_TEMPERATURE_BINS -}eTemperatureBins; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U16 hdetDcocCode; - tANI_U16 hdetDcoOffset; -}sRfHdetCalValues; - -#define TPC_TXPWR_ENABLE_MASK QWLAN_TPC_TXPWR_ENABLE_EN_MASK - - -#define TPC_MEM_TX0_PWR_LUT_OFFSET QWLAN_TPC_POWERDET0_RAM_MREG -#define TPC_MEM_TX1_PWR_LUT_OFFSET QWLAN_TPC_POWERDET1_RAM_MREG -#define TPC_MEM_TX2_PWR_LUT_OFFSET QWLAN_TPC_POWERDET2_RAM_MREG -#define TPC_MEM_TX3_PWR_LUT_OFFSET QWLAN_TPC_POWERDET3_RAM_MREG -#define TPC_MEM_TX0_GAIN_LUT_OFFSET QWLAN_TPC_GAIN_LUT0_MREG -#define TPC_MEM_TX1_GAIN_LUT_OFFSET QWLAN_TPC_GAIN_LUT1_MREG -#define TPC_MEM_TX2_GAIN_LUT_OFFSET QWLAN_TPC_GAIN_LUT2_MREG -#define TPC_MEM_TX3_GAIN_LUT_OFFSET QWLAN_TPC_GAIN_LUT3_MREG - -//these masks are the same for both chains -#define TPC_POWERDET_MASK QWLAN_TPC_POWERDET0_RAM_POWER_MASK -#define TPC_GAIN_RF_MASK QWLAN_TPC_GAIN_LUT0_RF_GAIN_MASK -#define TPC_GAIN_RF_OFFSET QWLAN_TPC_GAIN_LUT0_RF_GAIN_OFFSET -#define TPC_GAIN_DIG_MASK QWLAN_TPC_GAIN_LUT0_DIG_GAIN_MASK - - -#define TPC_MEM_GAIN_LUT_DEPTH 32 - - -#define TPC_ADC_CTRL_REG QWLAN_TPC_ADC_CTRL_GET_ADC_REG -#define TPC_ADC_GET_MASK QWLAN_TPC_ADC_CTRL_GET_ADC_GET_ADC_MASK - -#define TPC_ADC_FAILED_MASK QWLAN_TPC_ADC_STATUS_FAILED_MASK -#define TPC_ADC_BUSY_P_MASK QWLAN_TPC_ADC_STATUS_BUSY_P_MASK -#define TPC_ADC_BUSY_T_MASK QWLAN_TPC_ADC_STATUS_BUSY_T_MASK - - -#define MSK_1 0x1 -#define MSK_2 0x3 -#define MSK_3 0x7 -#define MSK_4 0xF -#define MSK_5 0x1F -#define MSK_6 0x3F -#define MSK_7 0x7F -#define MSK_8 0xFF -#define MSK_9 0x1FF -#define MSK_10 0x3FF -#define MSK_11 0x7FF -#define MSK_12 0xFFF -#define MSK_13 0x1FFF -#define MSK_14 0x3FFF -#define MSK_15 0x7FFF -#define MSK_16 0xFFFF -#define MSK_17 0x1FFFF -#define MSK_18 0x3FFFF -#define MSK_19 0x7FFFF -#define MSK_20 0xFFFFF -#define MSK_21 0x1FFFFF -#define MSK_22 0x3FFFFF -#define MSK_23 0x7FFFFF -#define MSK_24 0xFFFFFF -#define MSK_25 0x1FFFFFF -#define MSK_26 0x3FFFFFF -#define MSK_27 0x7FFFFFF -#define MSK_28 0xFFFFFFF -#define MSK_29 0x1FFFFFFF -#define MSK_30 0x3FFFFFFF -#define MSK_31 0x7FFFFFFF -#define MSK_32 0xFFFFFFFF - - -#define COARSE_GAIN_MASK MSK_4 -#define COARSE_GAIN_OFFSET 4 -#define FINE_GAIN_MASK MSK_4 //the upper most bit overlaps the coarse gain and should not be used for TPC LUT data -#define FINE_GAIN_OFFSET 0 - -typedef enum -{ - TPC_COARSE_TXPWR_0, - TPC_COARSE_TXPWR_1, - TPC_COARSE_TXPWR_2, - TPC_COARSE_TXPWR_3, - TPC_COARSE_TXPWR_4, - TPC_COARSE_TXPWR_5, - TPC_COARSE_TXPWR_6, - TPC_COARSE_TXPWR_7, - TPC_COARSE_TXPWR_8, - TPC_COARSE_TXPWR_9, - TPC_COARSE_TXPWR_10, - TPC_COARSE_TXPWR_11, - TPC_COARSE_TXPWR_12, - TPC_COARSE_TXPWR_13, - TPC_COARSE_TXPWR_14, - TPC_COARSE_TXPWR_15, - TPC_COARSE_TXPWR_16, - TPC_COARSE_TXPWR_17, - TPC_COARSE_TXPWR_18, - TPC_COARSE_TXPWR_19, - TPC_COARSE_TXPWR_20, - TPC_COARSE_TXPWR_21, - TPC_COARSE_TXPWR_22, - TPC_COARSE_TXPWR_23, - TPC_COARSE_TXPWR_24, - TPC_COARSE_TXPWR_25, - TPC_COARSE_TXPWR_26, - TPC_COARSE_TXPWR_27, - TPC_COARSE_TXPWR_28, - TPC_COARSE_TXPWR_29, - TPC_COARSE_TXPWR_30, - TPC_COARSE_TXPWR_31, - NUM_TPC_COARSE_STEPS = TPC_COARSE_TXPWR_31 - TPC_COARSE_TXPWR_0 + 1, - MIN_TPC_COARSE_TXPWR = TPC_COARSE_TXPWR_0, - MAX_TPC_COARSE_TXPWR = TPC_COARSE_TXPWR_31 -}eTxCoarseGain; //refers to the external RF power adjustment - -typedef enum -{ - TPC_FINE_TXPWR_0, - TPC_FINE_TXPWR_1, - TPC_FINE_TXPWR_2, - TPC_FINE_TXPWR_3, - TPC_FINE_TXPWR_4, - TPC_FINE_TXPWR_5, - TPC_FINE_TXPWR_6, - TPC_FINE_TXPWR_7, - TPC_FINE_TXPWR_8, - TPC_FINE_TXPWR_9, - TPC_FINE_TXPWR_10, - TPC_FINE_TXPWR_11, - TPC_FINE_TXPWR_12, - TPC_FINE_TXPWR_13, - TPC_FINE_TXPWR_14, - TPC_FINE_TXPWR_15, - MIN_TPC_FINE_TXPWR = TPC_FINE_TXPWR_0, - MAX_TPC_FINE_TXPWR = TPC_FINE_TXPWR_15 -}eTxFineGain; //refers to the internal TxFIR power adjustment - -typedef PACKED_PRE struct PACKED_POST { - eTxCoarseGain coarsePwr; - eTxFineGain finePwr; -}tTxGain; - -//for 30second periodic interrupt, do this every 5 minutes -#define HAL_PHY_PERIODIC_CAL_ITER_LIMIT 10 - -typedef enum -{ - //these show which rx and tx chains are enabled, other chains are disable accordingly - //Production modes - PHY_CHAIN_SEL_R0_T0_ON, - - PHY_CHAIN_SEL_BT_R0_T0_ON, //simultaneous bluetooth receive enabled - - - //test modes - PHY_CHAIN_SEL_R0_ON, - PHY_CHAIN_SEL_T0_ON, - PHY_CHAIN_SEL_NO_RX_TX, - - MAX_PHY_CHAIN_SEL, - INVALID_PHY_CHAIN_SEL, - PHY_MAX_CHAIN_SELECT = 0x7FFFFFFF /* define as 4 bytes data */ -}ePhyChainSelect; - -typedef enum -{ -#ifdef CHANNEL_BONDED_CAPABLE - - PHY_CCA_40MHZ_SOURCE = 0, -#endif - - PHY_CCA_20MHZ_SOURCE = 1 -}ePhyCCASource; - -typedef enum -{ - PHY_CCA_FORCED_ON = 0, - PHY_CCA_ED = 1, - PHY_CCA_CD = 2, - PHY_CCA_CD_AND_CS = 3, - PHY_CCA_ED_AND_CD = 4, - PHY_CCA_ED_OR_CD = 5, - PHY_CCA_ED_AND_CD_AND_CS = 6, - PHY_CCA_ED_OR_CD_AND_CS = 7, - PHY_CCA_SEC_ED40_AND_NOR_PKTDET40_PKTDET20 = 8, - PHY_CCA_SEC_BUSY = 9 -}ePhyCCAMode; - -typedef enum -{ - PHY_RX_DISABLE_NONE = 0, - PHY_RX_DISABLE_11AG = 0x00000001, - PHY_RX_DISABLE_11B = 0x00000002, - PHY_RX_DISABLE_11N40 = 0x00000004, - PHY_RX_DISABLE_11AC80 = 0x00000008, - - PHY_RX_DISABLE_11ABG = (PHY_RX_DISABLE_11AG | PHY_RX_DISABLE_11B), - PHY_RX_DISABLE_ALL_TYPES = (PHY_RX_DISABLE_11B | PHY_RX_DISABLE_11AG | - PHY_RX_DISABLE_11N40 | PHY_RX_DISABLE_11AC80), -}ePhyRxDisabledPktTypes; - - -// Enum for network density setting. -typedef enum -{ - PHY_NW_DENSITY_LOW = 0, - PHY_NW_DENSITY_MED, - PHY_NW_DENSITY_HIGH, - PHY_NW_DENSITY_ADAPTIVE -} ePhyNwDensity; - - -typedef enum -{ - ALL_CALS, //RxDco 1st, TxLO 2nd - RX_DCO_CAL_ONLY, - RX_IM2_CAL_ONLY, - RX_DCO_IM2_CAL, - TX_LO_CAL_ONLY, - RX_IQ_CAL_ONLY, - TX_IQ_CAL_ONLY, - HKDAC_TX_IQ_CAL_ONLY, - NO_CALS = 0xFF -}eCalSelection; - - -//supports testing of closed-loop power control -typedef enum -{ - FORCE_CLOSED_LOOP_GAIN = 0, //phyDbg pkt gen only uses gain index 0 when we are taking measurements with the closed-loop gain - FORCE_POWER_TEMPLATE_INDEX = 1, //only use forced power template index - FIXED_POWER_DBM = 2, //only use to specify fixed power, ignoring rate/channel/reg limits - REGULATORY_POWER_LIMITS = 3, //use production power Lut settings limited by power limit table per channel - RATE_POWER_NON_LIMITED = 4, //use power specified per rate and channel group, but don't limit power by channel - POWER_INDX_SRC_MAX_VAL = 0x7FFFFFFF, //dummy val to set enum to 4 bytes -}ePowerTempIndexSource; - -#define BIT_0 0x00000001 -#define BIT_1 0x00000002 -#define BIT_2 0x00000004 -#define BIT_3 0x00000008 -#define BIT_4 0x00000010 -#define BIT_5 0x00000020 -#define BIT_6 0x00000040 -#define BIT_7 0x00000080 -#define BIT_8 0x00000100 -#define BIT_9 0x00000200 -#define BIT_10 0x00000400 -#define BIT_11 0x00000800 -#define BIT_12 0x00001000 -#define BIT_13 0x00002000 -#define BIT_14 0x00004000 -#define BIT_15 0x00008000 -#define BIT_16 0x00010000 -#define BIT_17 0x00020000 -#define BIT_18 0x00040000 -#define BIT_19 0x00080000 -#define BIT_20 0x00100000 -#define BIT_21 0x00200000 -#define BIT_22 0x00400000 -#define BIT_23 0x00800000 -#define BIT_24 0x01000000 -#define BIT_25 0x02000000 -#define BIT_26 0x04000000 -#define BIT_27 0x08000000 -#define BIT_28 0x10000000 -#define BIT_29 0x20000000 -#define BIT_30 0x40000000 -#define BIT_31 0x80000000 - -#define WFM_CLK_80 BIT_3 -#define WFM_START BIT_0 -#define WFM_STOP BIT_1 - -#define WFM_MEM_I_DATA_MASK (0x7FF) -#define WFM_MEM_Q_DATA_OFFSET (0xB) -#define WFM_MEM_Q_DATA_MASK (0x3FF800) - -typedef enum -{ - WAVE_SINGLE_SHOT = 0, - WAVE_CONTINUOUS = BIT_2 -}eWaveMode; - -typedef enum -{ - RATE_240 = 0, - RATE_160 = 1, - RATE_120 = 2, - RATE_80 = 3, - RATE_40 = 4, - RATE_20 = 5, -}eWaveRate; - -#define MAX_TONE_AMPLITUDE (2^11) // peak to peak - -#define MAX_TEST_WAVEFORM_SAMPLES 500 - -#define NUM_RX_IMB_CAL_TONES 4 - -#define CAL_WFM_TX_TONE_8_START_IDX 0 -#define CAL_WFM_TX_TONE_8_STOP_IDX 255 -#define CAL_WFM_TX_TONE_MINUS_8_START_IDX 256 -#define CAL_WFM_TX_TONE_MINUS_8_STOP_IDX 511 -#define CAL_WFM_RX_TONE_START_IDX 512 -#define CAL_WFM_RX_TONE_STOP_IDX 767 - -#define B_RATE_CAL_ADJUSTMENT -150 -#define GN_RATE_BANDEDGE_ADJUSTMENT -100 - -#define TPC_INDEX_WIFI_DIRECT 0 -#define TPC_INDEX_LOW_POWER 1 -#define MIN_TPC_GAIN_INDEX 0 //Index 0 used for Wifi Direct -#define TPC_GAIN_LUT_PWR_SLOPE 2 -#define MAX_TPC_GAIN_LUT_DBM (22) -#define MIN_TPC_GAIN_LUT_DBM (6) - -#define MAX_TPC_GAIN_LUT_DBM_2DEC_PLACES (MAX_TPC_GAIN_LUT_DBM * 100) -#define MIN_TPC_GAIN_LUT_DBM_2DEC_PLACES (MIN_TPC_GAIN_LUT_DBM * 100) - -typedef enum -{ - RF_BANDWIDTH_20MHZ = 20, - RF_BANDWIDTH_40MHZ = 40, - RF_BANDWIDTH_80MHZ = 80, - RF_MIN_BANDWIDTH = RF_BANDWIDTH_20MHZ, - RF_MAX_BANDWIDTH = RF_BANDWIDTH_80MHZ, - RF_BANDWIDTH_INVALID = 0x7FFFFFFF -}eRfBandwidth; - -#endif /* WLAN_PHY_H */ diff --git a/riva/inc/wlan_qct_dev_defs.h b/riva/inc/wlan_qct_dev_defs.h deleted file mode 100644 index 12d07fcb8a67..000000000000 --- a/riva/inc/wlan_qct_dev_defs.h +++ /dev/null @@ -1,360 +0,0 @@ -/* -* Copyright (c) 2012-2013 Qualcomm Atheros, Inc. -* All Rights Reserved. -* Qualcomm Atheros Confidential and Proprietary. -*/ - -/** - * - * @file: wlan_qct_dev_defs.h - * - * @brief: This file contains the hardware related definitions. - * - * Copyright (C) 2008, Qualcomm Technologies, Inc. All rights reserved. - */ - -#ifndef __WLAN_QCT_DEV_DEFS_H -#define __WLAN_QCT_DEV_DEFS_H - - -/* -------------------------------------------------------------------- - * HW definitions for WLAN Chip - * -------------------------------------------------------------------- - */ - -#ifdef WCN_PRONTO - -#ifdef WLAN_SOFTAP_VSTA_FEATURE -//supports both V1 and V2 -#define HAL_NUM_ASSOC_STA 32 // HAL_NUM_STA - No of GP STAs - 2 (1 self Sta + 1 Bcast Sta) -#define HAL_NUM_STA 41 -#define HAL_NUM_HW_STA 16 - -#define HAL_NUM_GPSTA 4 -#define HAL_NUM_UMA_DESC_ENTRIES HAL_NUM_HW_STA // or HAL_NUM_STA - -#define HAL_NUM_BSSID 2 -#define HAL_NUM_STA_WITHOUT_VSTA 12 -#define HAL_NUM_STA_INCLUDING_VSTA 32 - -#define HAL_NUM_VSTA (HAL_NUM_STA - HAL_NUM_HW_STA) -#define QWLANFW_MAX_NUM_VSTA (HAL_NUM_VSTA) -#define QWLANFW_VSTA_INVALID_IDX (HAL_NUM_STA+1) -#define QWLAN_VSTA_MIN_IDX (HAL_NUM_HW_STA) -#define QWLANFW_NUM_GPSTA (HAL_NUM_GPSTA) - -// For Pronto -#define HAL_NUM_STA_WITHOUT_VSTA_PRONTO_V1 9 -#define HAL_NUM_STA_WITHOUT_VSTA_PRONTO_V2 (HAL_NUM_STA_WITHOUT_VSTA) - -#define IS_VSTA_VALID_IDX(__x) \ - ((__x) != QWLANFW_VSTA_INVALID_IDX) - -#define IS_VSTA_IDX(__x) \ - (((__x) >= QWLAN_VSTA_MIN_IDX) && ((__x) < HAL_NUM_STA)) - -#define GET_VSTA_INDEX_FOR_STA_INDEX(__idx) ((__idx) - QWLAN_VSTA_MIN_IDX) - -// is the STA a General Purpose STA? -#define IS_GPSTA_IDX(__x) \ - (((__x) >= (HAL_NUM_HW_STA-HAL_NUM_GPSTA)) && \ - ((__x) < HAL_NUM_HW_STA)) - -// is the STA a HW STA (excluding GP STAs) -#define IS_HWSTA_IDX(__x) \ - ((__x) < (HAL_NUM_HW_STA-HAL_NUM_GPSTA)) - -#define HAL_NUM_STA_INCLUDING_VSTA 32 - -#elif WCN_PRONTO_V1 - -/* In Pronto 1.0 TPE descriptor size is increased to 1K per station - * but not the cMEM allocated for hardware descriptors. Due to this - * memory limitation the number of stations are limited to 9 and BSS - * to 2 respectively. - * - * In Pronto 2.0, TPE descriptor size is reverted - * back to 512 bytes and hence more stations and BSSs can be supported - * from Pronto 2.0 - * - * In Pronto 1.0, 9 HW stations are supported including BCAST STA(staId 0) - * and SELF STA(staId 1). So total ASSOC stations which can connect to - * Pronto 1.0 Softap = 9 - 1(self sta) - 1(Bcast sta) = 7 stations - */ -#define HAL_NUM_HW_STA 9 -#define HAL_NUM_STA (HAL_NUM_HW_STA) -#define HAL_NUM_BSSID 2 -#define HAL_NUM_UMA_DESC_ENTRIES 9 -#define HAL_NUM_ASSOC_STA 7 - - -#else /* WCN_PRONTO_V1 */ - -#define HAL_NUM_HW_STA 14 -#define HAL_NUM_STA (HAL_NUM_HW_STA) -#define HAL_NUM_BSSID 4 -#define HAL_NUM_UMA_DESC_ENTRIES 14 -#define HAL_NUM_ASSOC_STA 12 - - -#endif /* WCN_PRONTO_V1 and WLAN_SOFTAP_VSTA_FEATURE*/ -#else /* WCN_PRONTO */ - -/* - * Riva supports 16 stations in hardware - * - * Riva without Virtual STA feature can only support 12 stations: - * 1 Broadcast STA (hard) - * 1 "Self" STA (hard) - * 10 Soft AP Stations (hard) - * - * Riva with Virtual STA feature supports 38 stations: - * 1 Broadcast STA (hard) - * 1 "Self" STA (hard) - * 4 General Purpose Stations to support Virtual STAs (hard) - * 32 Soft AP Stations (10 hard/22 virtual) - * - * To support concurrency with Vsta, number of stations are increased to 41 (from 38). - * 1 for the second interface. - * 1 for reserving an infra peer STA index (hard) for the other interface. - * 1 for P2P device role. - */ -#ifdef WLAN_SOFTAP_VSTA_FEATURE -#define HAL_NUM_ASSOC_STA 32 -#define HAL_NUM_STA 41 -#define HAL_NUM_HW_STA 16 -#define HAL_NUM_GPSTA 4 -#define HAL_NUM_VSTA (HAL_NUM_STA - HAL_NUM_HW_STA) - -#define QWLANFW_MAX_NUM_VSTA HAL_NUM_VSTA -#define QWLANFW_VSTA_INVALID_IDX (HAL_NUM_STA+1) -#define QWLAN_VSTA_MIN_IDX HAL_NUM_HW_STA -#define QWLANFW_NUM_GPSTA HAL_NUM_GPSTA - - -#define IS_VSTA_VALID_IDX(__x) \ - ((__x) != QWLANFW_VSTA_INVALID_IDX) - -#define IS_VSTA_IDX(__x) \ - (((__x) >= QWLAN_VSTA_MIN_IDX) && ((__x) < HAL_NUM_STA)) - -#define GET_VSTA_INDEX_FOR_STA_INDEX(__idx) ((__idx) - QWLAN_VSTA_MIN_IDX) - -// is the STA a General Purpose STA? -#define IS_GPSTA_IDX(__x) \ - (((__x) >= (HAL_NUM_HW_STA-HAL_NUM_GPSTA)) && \ - ((__x) < HAL_NUM_HW_STA)) - -// is the STA a HW STA (excluding GP STAs) -#define IS_HWSTA_IDX(__x) \ - ((__x) < (HAL_NUM_HW_STA-HAL_NUM_GPSTA)) - -#define HAL_NUM_STA_INCLUDING_VSTA 32 -#define HAL_NUM_STA_WITHOUT_VSTA 12 - -#else -#define HAL_NUM_STA 12 -#define HAL_NUM_ASSOC_STA 10 -#define HAL_NUM_HW_STA 12 -#endif - -#define HAL_NUM_BSSID 2 -#define HAL_NUM_UMA_DESC_ENTRIES HAL_NUM_HW_STA - -#endif /* WCN_PRONTO */ - -#ifdef FEATURE_WLAN_TDLS -#define CXM_TDLS_MAX_NUM_STA 32 -#endif - -#define HAL_INVALID_BSSIDX HAL_NUM_BSSID - -#define MAX_NUM_OF_BACKOFFS 8 -#define HAL_MAX_ASSOC_ID HAL_NUM_STA - -#define WLANHAL_TX_BD_HEADER_SIZE 40 //FIXME_PRIMA - Revisit -#define WLANHAL_RX_BD_HEADER_SIZE 76 - -/* - * From NOVA Mac Arch document - * Encryp. mode The encryption mode - * 000: Encryption functionality is not enabled - * 001: Encryption is set to WEP - * 010: Encryption is set to WEP 104 - * 011: Encryption is set to TKIP - * 100: Encryption is set to AES - * 101 - 111: Reserved for future - */ - -#define HAL_ENC_POLICY_NULL 0 -#define HAL_ENC_POLICY_WEP40 1 -#define HAL_ENC_POLICY_WEP104 2 -#define HAL_ENC_POLICY_TKIP 3 -#define HAL_ENC_POLICY_AES_CCM 4 - -/* --------------------------------------------------------------------- */ -/* BMU */ -/* --------------------------------------------------------------------- */ - -/* - * BMU WQ assignment, as per Prima Programmer's Guide - FIXME_PRIMA: Revisit - * - */ - -typedef enum sBmuWqId { - - /* ====== In use WQs ====== */ - - /* BMU */ - BMUWQ_BMU_IDLE_BD = 0, - BMUWQ_BMU_IDLE_PDU = 1, - - /* RxP */ - BMUWQ_RXP_UNKNWON_ADDR = 2, /* currently unhandled by HAL */ - - /* DPU RX */ - BMUWQ_DPU_RX = 3, - - /* DPU TX */ - BMUWQ_DPU_TX = 6, - - /* Firmware */ - BMUWQ_FW_TRANSMIT = 12, /* DPU Tx->FW Tx */ - BMUWQ_FW_RECV = 7, /* DPU Rx->FW Rx */ - - BMUWQ_FW_RPE_RECV = 16, /* RXP/RPE Rx->FW Rx */ - FW_SCO_WQ = BMUWQ_FW_RPE_RECV, - - /* DPU Error */ - BMUWQ_DPU_ERROR_WQ = 8, - - /* DXE RX */ - BMUWQ_DXE_RX = 11, - - BMUWQ_DXE_RX_HI = 4, - - /* ADU/UMA */ - BMUWQ_ADU_UMA_TX = 23, - BMUWQ_ADU_UMA_RX = 24, - - /* BMU BTQM */ - BMUWQ_BTQM = 25, - - /* Special WQ for BMU to dropping all frames coming to this WQ ID */ - BMUWQ_SINK = 255, - -#ifdef WCN_PRONTO - BMUWQ_BMU_CMEM_IDLE_BD = 27, - /* Total BMU WQ count in Pronto */ - BMUWQ_NUM = 28, - - //WQs 17 through 22 are enabled in Pronto. So, set not supported mask to 0. - BMUWQ_NOT_SUPPORTED_MASK = 0x0, -#else - /* Total BMU WQ count in Prima */ - BMUWQ_NUM = 27, - - //Prima has excluded support for WQs 17 through 22. - BMUWQ_NOT_SUPPORTED_MASK = 0x7e0000, -#endif //WCN_PRONTO - - - /* Aliases */ - BMUWQ_BTQM_TX_MGMT = BMUWQ_BTQM, - BMUWQ_BTQM_TX_DATA = BMUWQ_BTQM, - BMUWQ_BMU_WQ2 = BMUWQ_RXP_UNKNWON_ADDR, - BMUWQ_FW_DPU_TX = 5, - - //WQ where all the frames with addr1/addr2/addr3 with value 254/255 go to. - BMUWQ_FW_RECV_EXCEPTION = 14, //using BMUWQ_FW_MESSAGE WQ for this purpose. - - //WQ where all frames with unknown Addr2 filter exception cases frames will pushed if FW wants host to - //send deauth to the sender. - BMUWQ_HOST_RX_UNKNOWN_ADDR2_FRAMES = 15, //using BMUWQ_FW_DXECH2_0 for this purpose. - - /* ====== Unused/Reserved WQ ====== */ - - /* ADU/UMA Error WQ */ - BMUWQ_ADU_UMA_TX_ERROR_WQ = 13, /* Not in use by HAL */ - BMUWQ_ADU_UMA_RX_ERROR_WQ = 10, /* Not in use by HAL */ - - /* DPU Error WQ2 */ - BMUWQ_DPU_ERROR_WQ2 = 9, /* Not in use by HAL */ - - /* FW WQs */ - //This WQ is being used for RXP to push in frames in exception cases ( addr1/add2/addr3 254/255) - //BMUWQ_FW_MESG = 14, /* DxE Tx->FW, Not in use by FW */ - //BMUWQ_FW_DXECH2_0 = 15, /* BD/PDU<->MEM conversion using DxE CH2. Not in use by FW */ - BMUWQ_FW_DXECH2_1 = 16, /* BD/PDU<->MEM conversion using DxE CH2. Not in use by FW */ - - /* NDPA Addr3 workaround */ - BMUWQ_RXP_DEFAULT_PUSH_WQ = 17, -/* These WQs are not supported in Volans - BMUWQ_BMU_WQ17 = 17, - BMUWQ_BMU_WQ18 = 18, - BMUWQ_BMU_WQ19 = 19, - BMUWQ_BMU_WQ20 = 20, - BMUWQ_BMU_WQ21 = 21, - BMUWQ_BMU_WQ22 = 22 -*/ -} tBmuWqId; - -typedef enum -{ - BTQM_QID0 = 0, - BTQM_QID1, - BTQM_QID2, - BTQM_QID3, - BTQM_QID4, - BTQM_QID5, - BTQM_QID6, - BTQM_QID7, - BTQM_QID8, - BTQM_QID9, - BTQM_QID10, - - BTQM_QUEUE_TX_TID_0 = BTQM_QID0, - BTQM_QUEUE_TX_TID_1, - BTQM_QUEUE_TX_TID_2, - BTQM_QUEUE_TX_TID_3, - BTQM_QUEUE_TX_TID_4, - BTQM_QUEUE_TX_TID_5, - BTQM_QUEUE_TX_TID_6, - BTQM_QUEUE_TX_TID_7, - - - /* Queue Id <-> BO - */ - BTQM_QUEUE_TX_nQOS = BTQM_QID8, - BTQM_QUEUE_SELF_STA_BCAST_MGMT = BTQM_QID10, - BTQM_QUEUE_SELF_STA_UCAST_MGMT = BTQM_QID9, - BTQM_QUEUE_SELF_STA_UCAST_DATA = BTQM_QID9, - BTQM_QUEUE_NULL_FRAME = BTQM_QID9, - BTQM_QUEUE_SELF_STA_PROBE_RSP = BTQM_QID9, - BTQM_QUEUE_TX_AC_BE = BTQM_QUEUE_TX_TID_0, - BTQM_QUEUE_TX_AC_BK = BTQM_QUEUE_TX_TID_2, - BTQM_QUEUE_TX_AC_VI = BTQM_QUEUE_TX_TID_4, - BTQM_QUEUE_TX_AC_VO = BTQM_QUEUE_TX_TID_6 -}tBtqmQId; - -#define STACFG_MAX_TC 8 - -/* --------------------------------------------------------------------- */ -/* BD type*/ -/* --------------------------------------------------------------------- */ -#define HWBD_TYPE_GENERIC 0 /* generic BD format */ -#define HWBD_TYPE_FRAG 1 /* fragmentation BD format*/ - -/*---------------------------------------------------------------------- */ -/* HW Tx power */ -/*---------------------------------------------------------------------- */ -#ifdef WLAN_HAL_PRIMA - #define WLAN_SOC_PRIMA_MAX_TX_POWER 22 - #define WLAN_SOC_PRIMA_MIN_TX_POWER 6 -#else - /* add more platforms here */ - #define WLAN_SOC_PRIMA_MAX_TX_POWER 22 - #define WLAN_SOC_PRIMA_MIN_TX_POWER 6 -#endif //#ifdef WCN_PRIMA - -#endif /* __WLAN_QCT_DEV_DEFS_H */ diff --git a/riva/inc/wlan_status_code.h b/riva/inc/wlan_status_code.h deleted file mode 100644 index 2005aac8dd69..000000000000 --- a/riva/inc/wlan_status_code.h +++ /dev/null @@ -1,160 +0,0 @@ -/* -* Copyright (c) 2012 Qualcomm Atheros, Inc. -* All Rights Reserved. -* Qualcomm Atheros Confidential and Proprietary. -*/ - -/*=========================================================================== - * - * @file: wlan_status_code.h - * - * @brief: Common header file containing all the status codes - * All status codes have been consolidated into one enum - * - * @author: Kumar Anand - * Copyright (C) 2010, Qualcomm Technologies, Inc. - * All rights reserved. - * - *=========================================================================*/ - -#ifndef __WLAN_STATUS_CODE_H__ -#define __WLAN_STATUS_CODE_H__ - -/*------------------------------------------------------------------------- - Include Files --------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------- - * Preprocessor Definitions and Constants - * -------------------------------------------------------------------------*/ - -/* This is to force compiler to use the maximum of an int ( 4 bytes ) */ -#define WLAN_STATUS_MAX_ENUM_SIZE 0x7FFFFFFF - -/*---------------------------------------------------------------------------- - * Type Declarations - * -------------------------------------------------------------------------*/ - -typedef enum -{ - /* PAL Request succeeded!*/ - PAL_STATUS_SUCCESS = 0, - - /* HAL Request succeeded!*/ - eHAL_STATUS_SUCCESS = 0, - - /* Request failed because there of an invalid request. This is - typically the result of invalid parameters on the request*/ - PAL_STATUS_INVAL, - - /* Request refused because a request is already in place and - another cannot be handled currently */ - PAL_STATUS_ALREADY, - - /* Request failed because of an empty condition */ - PAL_STATUS_EMPTY, - - /* Request failed for some unknown reason. */ - PAL_STATUS_FAILURE, - - /* HAL general failure */ - eHAL_STATUS_FAILURE, - - /* Invalid Param*/ - eHAL_STATUS_INVALID_PARAMETER, - - /* Invalid Station Index*/ - eHAL_STATUS_INVALID_STAIDX, - - /* DPU descriptor table full*/ - eHAL_STATUS_DPU_DESCRIPTOR_TABLE_FULL, - - /* No interrupts */ - eHAL_STATUS_NO_INTERRUPTS, - - /* Interrupt present */ - eHAL_STATUS_INTERRUPT_PRESENT, - - /* Stable Table is full */ - eHAL_STATUS_STA_TABLE_FULL, - - /* Duplicate Station found */ - eHAL_STATUS_DUPLICATE_STA, - - /* BSSID is invalid */ - eHAL_STATUS_BSSID_INVALID, - - /* STA is invalid */ - eHAL_STATUS_STA_INVALID, - - /* BSSID is is duplicate */ - eHAL_STATUS_DUPLICATE_BSSID, - - /* BSS Idx is invalid */ - eHAL_STATUS_INVALID_BSSIDX, - - /* BSSID Table is full */ - eHAL_STATUS_BSSID_TABLE_FULL, - - /* Invalid DPU signature*/ - eHAL_STATUS_INVALID_SIGNATURE, - - /* Invalid key Id */ - eHAL_STATUS_INVALID_KEYID, - - /* Already on requested channel */ - eHAL_STATUS_SET_CHAN_ALREADY_ON_REQUESTED_CHAN, - - /* UMA descriptor table is full */ - eHAL_STATUS_UMA_DESCRIPTOR_TABLE_FULL, - - /* MIC Key table is full */ - eHAL_STATUS_DPU_MICKEY_TABLE_FULL, - - /* A-MPDU/BA related Error codes */ - eHAL_STATUS_BA_RX_BUFFERS_FULL, - eHAL_STATUS_BA_RX_MAX_SESSIONS_REACHED, - eHAL_STATUS_BA_RX_INVALID_SESSION_ID, - - eHAL_STATUS_TIMER_START_FAILED, - eHAL_STATUS_TIMER_STOP_FAILED, - eHAL_STATUS_FAILED_ALLOC, - - /* Scan failure codes */ - eHAL_STATUS_NOTIFY_BSS_FAIL, - - /* Self STA not deleted as reference count is not zero */ - eHAL_STATUS_DEL_STA_SELF_IGNORED_REF_COUNT_NOT_ZERO, - - /* Self STA not added as entry already exists*/ - eHAL_STATUS_ADD_STA_SELF_IGNORED_REF_COUNT_NOT_ZERO, - - /* Message from SLM has failure status */ - eHAL_STATUS_FW_SEND_MSG_FAILED, - - /* BSS disconnect status : beacon miss */ - eHAL_STATUS_BSS_DISCONN_BEACON_MISS, - /* BSS disconnect status : deauth */ - eHAL_STATUS_BSS_DISCONN_DEAUTH, - /* BSS disconnect status : disassoc */ - eHAL_STATUS_BSS_DISCONN_DISASSOC, - - /* Data abort happened in PHY sw */ - eHAL_STATUS_PHY_DATA_ABORT, - - /* Invalid NV field */ - eHAL_STATUS_PHY_INVALID_NV_FIELD, - - /* WLAN boot test failed */ - eHAL_STATUS_WLAN_BOOT_TEST_FAILURE, - - /* Max status value */ - eHAL_STATUS_MAX_VALUE = WLAN_STATUS_MAX_ENUM_SIZE - -} palStatus, eHalStatus; - -/* Helper Macros */ -#define PAL_IS_STATUS_SUCCESS(status) (PAL_STATUS_SUCCESS == (status)) -#define HAL_STATUS_SUCCESS( status ) (eHAL_STATUS_SUCCESS == (status)) - -#endif //__WLAN_STATUS_CODE_H__ diff --git a/wcnss/riva/inc/halCompiler.h b/wcnss/riva/inc/halCompiler.h deleted file mode 100644 index 0705972ea78f..000000000000 --- a/wcnss/riva/inc/halCompiler.h +++ /dev/null @@ -1,179 +0,0 @@ -/* - * Copyright (c) 2013, The Linux Foundation. All rights reserved. - * - * Previously licensed under the ISC license by Qualcomm Atheros, Inc. - * - * - * Permission to use, copy, modify, and/or distribute this software for - * any purpose with or without fee is hereby granted, provided that the - * above copyright notice and this permission notice appear in all - * copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL - * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE - * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL - * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -/* - * This file was originally distributed by Qualcomm Atheros, Inc. - * under proprietary terms before Copyright ownership was assigned - * to the Linux Foundation. - */ - -/*========================================================================== - * - * @file: aniCompiler.h - * - * @brief: This file tries to abstract the differences among compilers. - * Supported compilers are: - * ARM RVCT compiler - * - * @author: Kumar Anand - * - * Copyright (C) 2010, Qualcomm Technologies, Inc. - * All rights reserved. - * - *=========================================================================*/ -#ifndef __ANI_COMPILER_ABSTRACT_H -#define __ANI_COMPILER_ABSTRACT_H - -/* - * 1. GNU C/C++ Compiler - * - * How to detect gcc : __GNUC__ - * How to detect gcc version : - * major version : __GNUC__ (2 = 2.x, 3 = 3.x, 4 = 4.x) - * minor version : __GNUC_MINOR__ - * - * 2. Microsoft C/C++ Compiler - * - * How to detect msc : _MSC_VER - * How to detect msc version : - * _MSC_VER (1200 = MSVC 6.0, 1300 = MSVC 7.0, ...) - * - * 3. Intel C/C++ Compiler - * - * How to detect icc : __INTEL_COMPILER, __ICC (legacy), __ECC (legacy) - * How to detect icc version : - * __INTEL_COMPILER, __ICC, __ECC (700 = 7.0, 900 = 9.0, ...) - * - * 4. Other compilers (not supported) - * - * Borland : __BORLANDC__ - * Greenhills : __ghs - * Metrowerks : __MWERKS__ - * SGI MIPSpro : __sgi - */ - -/* - * Packing directives : These are used to force compiler to pack bits and - * bytes in the data structure. C standard does not regulate this strictly, - * and many things are to compiler implementation. Many compilers support - * compiler specific directives or options that allow different packing - * and alignment. - * - * Alignment directives : Compiler may think packed data structures have - * no specific alignment requirement. Then compiler may generate multiple - * byte accesses to access two byte or four bytes data structures. This - * affects on performance especially for RISC systems. If some data - * structure is located on specific alignment always, alignment directives - * help compiler generate more efficient codes. - */ - -#undef __ANI_COMPILER_PRAGMA_PACK_STACK -#undef __ANI_COMPILER_PRAGMA_PACK - -#if defined(_MSC_VER) -#define __ANI_COMPILER_PRAGMA_PACK_STACK 1 -#define __ANI_COMPILER_PRAGMA_PACK 1 -#define __ani_attr_pre_packed -#define __ani_attr_packed -#define __ani_attr_aligned_2 -#define __ani_attr_aligned_4 -#define __ani_attr_aligned_8 -#define __ani_attr_aligned_16 -#define __ani_attr_aligned_32 -#define PACKED -#define PACKED_POST -#define ALIGN(__value) -#elif defined(__INTEL_COMPILER) || defined(__ICC) || defined(__ECC) -#define __ANI_COMPILER_PRAGMA_PACK 1 -#define __ani_attr_pre_packed -#define __ani_attr_packed -#define __ani_attr_aligned_2 -#define __ani_attr_aligned_4 -#define __ani_attr_aligned_8 -#define __ani_attr_aligned_16 -#define __ani_attr_aligned_32 -#define PACKED -#define PACKED_POST -#define ALIGN(__value) -#elif defined(__GNUC__) -#define __ani_attr_pre_packed -#define __ani_attr_packed __attribute__((packed)) -#define __ani_attr_aligned_2 __attribute__((aligned(2))) -#define __ani_attr_aligned_4 __attribute__((aligned(4))) -#define __ani_attr_aligned_8 __attribute__((aligned(8))) -#define __ani_attr_aligned_16 __attribute__((aligned(16))) -#define __ani_attr_aligned_32 __attribute__((aligned(32))) -#ifndef PACKED -#define PACKED -#endif -#ifndef PACKED_POST -#define PACKED_POST __attribute__((packed)) -#endif -#ifndef ALIGN -#define ALIGN(__value) __attribute__((aligned(__value))) -#endif -#elif defined(ANI_COMPILER_TYPE_RVCT) -/* Nothing defined so far */ - -/* - * RIVA 1.2 and Pronto uses ARMCT5.1 compiler and it throws lot of warning when __align() is used in structure definitions. - * __attribute__((aligned())) is GNU compiler attribute that is accepted by ARM compiler and resolves the warnings. - */ -#if (__ARMCC_VERSION > 400000) -#define __ani_attr_packed -#define __ani_attr_pre_packed __packed -#define __ani_attr_aligned_2 __attribute__((aligned(2))) -#define __ani_attr_aligned_4 __attribute__((aligned(4))) -#define __ani_attr_aligned_8 __attribute__((aligned(8))) -#define __ani_attr_aligned_16 __attribute__((aligned(16))) -#define __ani_attr_aligned_32 __attribute__((aligned(32))) -#define PACKED __packed -#define PACKED_POST -#define ALIGN(__value) __align(__value) -#define PREPACK __packed -#define POSTPACK -#else -#define __ani_attr_packed -#define __ani_attr_pre_packed __packed -#define __ani_attr_aligned_2 __align(2) -#define __ani_attr_aligned_4 __align(4) -#define __ani_attr_aligned_8 __align(8) -#define __ani_attr_aligned_16 __align(16) -#define __ani_attr_aligned_32 __align(32) -#define PACKED __packed -#define PACKED_POST -#define ALIGN(__value) __align(__value) -#endif - -#else -#error "Unknown compiler" -#endif - -#ifndef PACKED_PRE -#define PACKED_PRE __ani_attr_pre_packed -#endif - -#ifndef ALIGN_4 -#define ALIGN_4 __ani_attr_aligned_4 -#endif - -#endif //__ANI_COMPILER_ABSTRACT_H - diff --git a/wcnss/riva/inc/halLegacyPalTypes.h b/wcnss/riva/inc/halLegacyPalTypes.h deleted file mode 100644 index f889b683b90a..000000000000 --- a/wcnss/riva/inc/halLegacyPalTypes.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (c) 2013, The Linux Foundation. All rights reserved. - * - * Previously licensed under the ISC license by Qualcomm Atheros, Inc. - * - * - * Permission to use, copy, modify, and/or distribute this software for - * any purpose with or without fee is hereby granted, provided that the - * above copyright notice and this permission notice appear in all - * copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL - * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE - * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL - * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -/* - * This file was originally distributed by Qualcomm Atheros, Inc. - * under proprietary terms before Copyright ownership was assigned - * to the Linux Foundation. - */ - -#if !defined( __LEGACYPALTYPES_H__ ) -#define __LEGACYPALTYPES_H__ - -/*========================================================================== - * - * @file: halLegacyPalTypes.h - * - * @brief: Exports and types for the Platform Abstraction Layer typedefs. - * - * @author: Kumar Anand - * - * Copyright (C) 2010, Qualcomm Technologies, Inc. - * All rights reserved. - * - *=========================================================================*/ - -#include "qwlanfw_defs.h" - -/* Common type definitions */ -typedef uint8 tANI_U8; -typedef int8 tANI_S8; -typedef uint16 tANI_U16; -typedef int16 tANI_S16; -typedef uint32 tANI_U32; -typedef int32 tANI_S32; - -#ifndef BUILD_QWPTTSTATIC -typedef uint64 tANI_U64; -#endif - -typedef byte tANI_BYTE; -typedef boolean tANI_BOOLEAN; -typedef uint32 tANI_TIMESTAMP; - -#endif /*__LEGACYPALTYPES_H__*/ diff --git a/wcnss/riva/inc/pttFrameGen.h b/wcnss/riva/inc/pttFrameGen.h deleted file mode 100644 index b41b030d1f95..000000000000 --- a/wcnss/riva/inc/pttFrameGen.h +++ /dev/null @@ -1,71 +0,0 @@ -/** ------------------------------------------------------------------------- * - ------------------------------------------------------------------------- * - - - \file pttFrameGen.h - - \brief Definitions for PTT frame generation - - $Id$ - - Copyright (C) 2006 Airgo Networks, Incorporated - - - ========================================================================== */ - -#ifndef PTTFRAMEGEN_H -#define PTTFRAMEGEN_H - - -//#define MAX_PKT_GEN_BUF_ENTRY (HAL_HIF_MAX_TX_RING_ENTRY >> 1) - - - -#define MAX_PAYLOAD_SIZE 2400 -#define MAX_TX_PAYLOAD_SIZE 4096 - -typedef enum { - TEST_PAYLOAD_NONE, - TEST_PAYLOAD_FILL_BYTE, - TEST_PAYLOAD_RANDOM, - TEST_PAYLOAD_RAMP, - TEST_PAYLOAD_TEMPLATE, - TEST_PAYLOAD_MAX = 0X3FFFFFFF, //dummy value to set enum to 4 bytes -} ePayloadContents; - - -#define MAC_ADDR_SIZE ( 6 ) - -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 numTestPackets; - tANI_U32 interFrameSpace; - eHalPhyRates rate; - ePayloadContents payloadContents; - tANI_U16 payloadLength; - tANI_U8 payloadFillByte; - tANI_BOOLEAN pktAutoSeqNum; //seq num setting (hw or not) for packet gen - - tANI_U8 addr1[MAC_ADDR_SIZE]; - tANI_U8 addr2[MAC_ADDR_SIZE]; - tANI_U8 addr3[MAC_ADDR_SIZE]; - tANI_U8 tx_mode; - tANI_BOOLEAN crc; //0 = no FCS calculated = power detector works = receive won't work?, - //1 = crc calculated = receive works, but power detector workaround doesn't - - ePhyDbgPreamble preamble; -} sPttFrameGenParams; - - -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 legacy; //11g OFDM preamble - tANI_U32 gfSimo20; //greenfield preamble - tANI_U32 mmSimo20; //mixed mode preamble - tANI_U32 gfSimo40; //greenfield preamble - tANI_U32 mmSimo40; //mixed mode preamble - tANI_U32 txbShort; //11b short - tANI_U32 txbLong; //11b long - tANI_U32 acSimo204080; //11ac SIMO 20,40,80 - tANI_U32 total; -} sTxFrameCounters; - -#endif diff --git a/wcnss/riva/inc/pttModule.h b/wcnss/riva/inc/pttModule.h deleted file mode 100644 index 5fc488e3736e..000000000000 --- a/wcnss/riva/inc/pttModule.h +++ /dev/null @@ -1,160 +0,0 @@ -/** - * - Airgo Networks, Inc proprietary. - All Rights Reserved, Copyright 2005 - This program is the confidential and proprietary product of Airgo Networks Inc. - Any Unauthorized use, reproduction or transfer of this program is strictly prohibited. - - - pttModule.h: global variable structure for pttModule - Author: Mark Nelson - Date: 6/27/05 - - History - - Date Modified by Modification Information - -------------------------------------------------------------------------- - - */ - -#ifndef PTTMODULE_H -#define PTTMODULE_H -#include -#include - -#ifdef BUILD_QWPTTSTATIC -#include "wlan_hal_msg.h" // it is needed to build qwptt static lib -#endif - -// Max NV fragment size -#define MAX_NV_BIN_SIZE 2000 - -enum -{ - PTT_STATUS_SUCCESS = 0, - PTT_STATUS_FAILURE = 1, - PTT_MAX_VAL = 0XFFFF, -}; -typedef tANI_U32 eQWPttStatus; - - -typedef PACKED_PRE struct PACKED_POST { - tANI_U16 drvMjr; - tANI_U16 drvMnr; - tANI_U16 drvPtch; - tANI_U16 drvBld; - tANI_U16 pttMax; - tANI_U16 pttMin; - //FwVersionInfo fwVer; -} sBuildReleaseParams; - -typedef PACKED_PRE struct PACKED_POST { - tANI_BOOLEAN agPktsDisabled; //802.11ag - tANI_BOOLEAN bPktsDisabled; //802.11b - tANI_BOOLEAN slrPktsDisabled; //deprecated in Riva - tANI_BOOLEAN n40PktsDisabled; //11N 40 - tANI_BOOLEAN ac80PktsDisabled; //11AC 80 - tANI_BOOLEAN rsvd; -} sRxTypesDisabled; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 totalRxPackets; - tANI_U32 totalMacRxPackets; - tANI_U32 totalMacFcsErrPackets; -} sRxFrameCounters; - - - - -/* GRAB RAM types */ -//TODO: Change Grab RAM interface as appropriate to Taurus -typedef enum { - GRAB_RAM_RXFIR, - GRAB_RAM_ADC, - GRAB_RAM_ADC_80, - GRAB_RAM_MAX_VAL = 0XFFFF, -} eGrabRamType; - -#define GRAB_RAM_SIZE 6000 -#define GRAB_RAM_SIZE_80MHZ_1_CHAIN 12000 - - - -/// Enum used to specify the trigger type for the aniGrabRam API -typedef enum eGramDumpTrigType { - eGRAM_DUMP_UNTRIGGERED, - eGRAM_DUMP_TRIG_ON_11A, - eGRAM_DUMP_TRIG_ON_11B, - eGRAM_DUMP_TRIG_ON_11A_OR_11B -} tGramDumpTrigType; - -typedef PACKED_PRE struct PACKED_POST { - //common to both transmit chains - eHalPhyRates rate; //current rate - ePhyChanBondState cbState; //current Channel bonded state - - tANI_U8 channelId; //current channel Id - tANI_U8 pwrTemplateIndex; //5-bit template index used for the current rate - tANI_U8 reserved[2]; - - //specific transmit chain power - tTxChainPower txChains[PHY_MAX_TX_CHAINS]; //output power for Tx chains -} tTxPowerReport; - -#define RXP_MAX_FILTER_IDX 64 - -typedef PACKED_PRE struct PACKED_POST -{ - uint32 rxpFilterForFTMPER[RXP_MAX_FILTER_IDX]; - uint32 max_pktlen; - uint32 flt_disable0; - uint32 flt_disable1; - uint32 config2; - uint32 push_wq_ctrl; - uint32 push_wq_ctrl2; - uint32 extra_frame_flt; -} sMACConfig; - - -typedef PACKED_PRE struct PACKED_POST { - /* - * The idea here is to store only those things which cannot be - * handled directly within the individual function calls. - * Most things will go straight to registers or come from registers. - */ - sPttFrameGenParams frameGenParams; - tANI_U8 payload[MAX_PAYLOAD_SIZE]; - - //Tx Waveform Gen Service - tANI_U16 numWfmSamples; - tANI_BOOLEAN wfmEnabled; - tANI_BOOLEAN wfmStored; - - //Tx Frame Power Service - tTxGain forcedTxGain[PHY_MAX_TX_CHAINS]; //use TXPWR_OVERRIDE for wfm, and fill gain table otherwise - tANI_U8 tpcPowerLut[PHY_MAX_TX_CHAINS][TPC_MEM_POWER_LUT_DEPTH]; - tTxGain tpcGainLut[PHY_MAX_TX_CHAINS][TPC_MEM_GAIN_LUT_DEPTH]; - - //Tx Frame Gen Service - tANI_BOOLEAN frameGenEnabled; - tANI_BOOLEAN phyDbgFrameGen; //this says use phyDbg for frames - leave this in place until we know that PhyDbg will suffice - - // for FTM PER feature - tANI_U8 tx_mode; - - tANI_BOOLEAN ftm_per_settings_saved; - - //Rx Gain Service - sRxChainsAgcEnable agcEnables; - - tANI_U32 *pADCCaptureCache; //pointer to allocate ADC capture cache - - //TX_TIMER adcRssiStatsTimer; //Create adc rssi stat collection timer - - sRxChainsRssi rssi; -} tPttModuleVariables; - -#ifdef WCN_PRONTO -extern sMACConfig macConfig; -#endif - -#endif /* PTTMODULE_H */ diff --git a/wcnss/riva/inc/pttMsgApi.h b/wcnss/riva/inc/pttMsgApi.h deleted file mode 100644 index e8a65cc0c962..000000000000 --- a/wcnss/riva/inc/pttMsgApi.h +++ /dev/null @@ -1,969 +0,0 @@ -/* - * Copyright (c) 2013, The Linux Foundation. All rights reserved. - * - * Previously licensed under the ISC license by Qualcomm Atheros, Inc. - * - * - * Permission to use, copy, modify, and/or distribute this software for - * any purpose with or without fee is hereby granted, provided that the - * above copyright notice and this permission notice appear in all - * copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL - * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE - * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL - * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -/* - * This file was originally distributed by Qualcomm Atheros, Inc. - * under proprietary terms before Copyright ownership was assigned - * to the Linux Foundation. - */ - -/** - * - Airgo Networks, Inc proprietary. - All Rights Reserved, Copyright 2005 - This program is the confidential and proprietary product of Airgo Networks Inc. - Any Unauthorized use, reproduction or transfer of this program is strictly prohibited. - - - pttMsgApi.h: Contains messages to PTT Module for physical layer testing - Author: Mark Nelson - Date: 6/21/05 - - History - - Date Modified by Modification Information - -------------------------------------------------------------------------- - - */ - -#ifndef PTT_MSG_API_H -#define PTT_MSG_API_H - -#include "halCompiler.h" -#include "wlan_nv.h" -#include "wlan_phy.h" -#include "pttFrameGen.h" -#include "pttModule.h" - -#include "halLegacyPalTypes.h" - -typedef tANI_U8 tQWPTT_U8; -typedef tANI_S8 tQWPTT_S8; - -typedef tANI_U16 tQWPTT_U16; -typedef tANI_S16 tQWPTT_S16; - -typedef tANI_U32 tQWPTT_U32; -typedef tANI_S32 tQWPTT_S32; - -typedef tANI_U8 tQWPTT_BYTE; -typedef tANI_S9 tQWPTT_S9; - -typedef tANI_U8 tQWPTT_BOOLEAN; - -#define PTT_MEM_ACCESS_MAX_SIZE 256 - -//Messages to/from socket or pttApi.c -typedef enum { - PTT_MSG_TYPES_BEGIN = 0x3000, - - // Init - PTT_MSG_INIT = PTT_MSG_TYPES_BEGIN, //extra: internal only - -//NV Service - PTT_MSG_GET_TPC_CAL_STATE_OBSOLETE = 0x3011, - PTT_MSG_RESET_TPC_CAL_STATE_OBSOLETE = 0x3012, - - PTT_MSG_SET_NV_CKSUM_OBSOLETE = 0x3013, - PTT_MSG_GET_NV_CKSUM_OBSOLETE = 0x3014, - PTT_MSG_GET_NV_TABLE = 0x3016, - PTT_MSG_SET_NV_TABLE = 0x3017, - PTT_MSG_SET_NV_IMAGE_OBSOLETE = 0x3018, - PTT_MSG_BLANK_NV = 0x3019, - PTT_MSG_GET_NV_IMAGE_OBSOLETE = 0x301E, - PTT_MSG_DEL_NV_TABLE = 0x301F, - PTT_MSG_GET_NV_FIELD = 0x3020, - PTT_MSG_SET_NV_FIELD = 0x3021, - PTT_MSG_STORE_NV_TABLE = 0x3022, - PTT_MSG_SET_REG_DOMAIN = 0x3023, - -//new NV format Service - PTT_MSG_GET_NV_BIN = 0x3030, - PTT_MSG_SET_NV_BIN = 0x3031, - PTT_MSG_GET_DICTIONARY = 0x3032, - -//Device Register Access - PTT_MSG_DBG_READ_REGISTER = 0x3040, - PTT_MSG_DBG_WRITE_REGISTER = 0x3041, - PTT_MSG_API_WRITE_REGISTER_OBSOLETE = 0x3042, - PTT_MSG_API_READ_REGISTER_OBSOLETE = 0x3043, - PTT_MSG_DBG_READ_MEMORY = 0x3044, - PTT_MSG_DBG_WRITE_MEMORY = 0x3045, - -//Device MAC Test Setup - PTT_MSG_ENABLE_CHAINS = 0x304F, - PTT_MSG_SET_CHANNEL = 0x3050, - -//Tx Waveform Gen Service - PTT_MSG_SET_WAVEFORM = 0x3071, - PTT_MSG_SET_TX_WAVEFORM_GAIN = 0x3072, - PTT_MSG_GET_WAVEFORM_POWER_ADC = 0x3073, - PTT_MSG_START_WAVEFORM = 0x3074, - PTT_MSG_STOP_WAVEFORM = 0x3075, - PTT_MSG_SET_RX_WAVEFORM_GAIN = 0x3076, - PTT_MSG_SET_TX_WAVEFORM_GAIN_PRIMA_V1 = 0x3077, - -//Tx Frame Gen Service - PTT_MSG_CONFIG_TX_PACKET_GEN = 0x3081, - PTT_MSG_START_STOP_TX_PACKET_GEN = 0x3082, - PTT_MSG_POLL_TX_PACKET_PROGRESS_OBSOLETE = 0x3083, - PTT_MSG_FRAME_GEN_STOP_IND_OBSOLETE = 0x3088, - PTT_MSG_QUERY_TX_STATUS = 0x3089, - - -//Tx Frame Power Service - PTT_MSG_CLOSE_TPC_LOOP = 0x30A0, - -//open loop service - PTT_MSG_SET_PACKET_TX_GAIN_TABLE = 0x30A1, - PTT_MSG_SET_PACKET_TX_GAIN_INDEX = 0x30A2, - PTT_MSG_FORCE_PACKET_TX_GAIN = 0x30A3, - -//closed loop(CLPC) service - PTT_MSG_SET_PWR_INDEX_SOURCE = 0x30A4, - PTT_MSG_SET_TX_POWER = 0x30A5, - PTT_MSG_GET_TX_POWER_REPORT = 0x30A7, - PTT_MSG_SAVE_TX_PWR_CAL_TABLE_OBSOLETE = 0x30A8, - PTT_MSG_SET_POWER_LUT = 0x30A9, - PTT_MSG_GET_POWER_LUT = 0x30AA, - PTT_MSG_GET_PACKET_TX_GAIN_TABLE = 0x30AB, - PTT_MSG_SAVE_TX_PWR_FREQ_TABLE_OBSOLETE = 0x30AC, - PTT_MSG_CLPC_TEMP_COMPENSATION_OBSOLETE = 0x30AD, - -//Rx Gain Service - PTT_MSG_DISABLE_AGC_TABLES = 0x30D0, - PTT_MSG_ENABLE_AGC_TABLES = 0x30D1, - PTT_MSG_SET_AGC_TABLES_OBSOLETE = 0x30D2, - PTT_MSG_GET_RX_RSSI = 0x30D3, - PTT_MSG_GET_AGC_TABLE_OBSOLETE = 0x30D5, - -//Rx Frame Catcher Service - PTT_MSG_SET_RX_DISABLE_MODE = 0x30D4, - PTT_MSG_GET_RX_PKT_COUNTS = 0x30E0, - PTT_MSG_RESET_RX_PACKET_STATISTICS = 0x30E2, - PTT_MSG_GET_UNI_CAST_MAC_PKT_RX_RSSI = 0x30E3, - PTT_MSG_GET_UNI_CAST_MAC_PKT_RX_RSSI_CONFIG = 0x30E4, - -//Rx Symbol Service - PTT_MSG_GRAB_RAM = 0x30F0, - PTT_MSG_GRAB_RAM_ONE_CHAIN_OBSOLETE = 0x30F1, - -//Phy Calibration Service - PTT_MSG_RX_IQ_CAL = 0x3100, - PTT_MSG_RX_DCO_CAL = 0x3101, - PTT_MSG_TX_CARRIER_SUPPRESS_CAL = 0x3102, - PTT_MSG_TX_IQ_CAL = 0x3103, - PTT_MSG_EXECUTE_INITIAL_CALS = 0x3104, - PTT_MSG_HDET_CAL = 0x3105, - PTT_MSG_VCO_LINEARITY_CAL_OBSOLETE = 0x3106, - -//Phy Calibration Override Service - PTT_MSG_SET_TX_CARRIER_SUPPRESS_CORRECT = 0x3110, - PTT_MSG_GET_TX_CARRIER_SUPPRESS_CORRECT = 0x3111, - PTT_MSG_SET_TX_IQ_CORRECT = 0x3112, - PTT_MSG_GET_TX_IQ_CORRECT = 0x3113, - PTT_MSG_SET_RX_IQ_CORRECT = 0x3114, - PTT_MSG_GET_RX_IQ_CORRECT = 0x3115, - PTT_MSG_SET_RX_DCO_CORRECT = 0x3116, - PTT_MSG_GET_RX_DCO_CORRECT = 0x3117, - PTT_MSG_SET_TX_IQ_PHASE_NV_TABLE_OBSOLETE = 0x3118, - PTT_MSG_GET_HDET_CORRECT_OBSOLETE = 0x3119, - -//RF Chip Access - PTT_MSG_GET_TEMP_ADC = 0x3202, - PTT_MSG_READ_RF_REG = 0x3203, - PTT_MSG_WRITE_RF_REG = 0x3204, - PTT_MSG_GET_RF_VERSION = 0x3205, - -//Deep sleep support - PTT_MSG_DEEP_SLEEP = 0x3220, - PTT_MSG_READ_SIF_BAR4_REGISTER = 0x3221, - PTT_MSG_WRITE_SIF_BAR4_REGISTER = 0x3222, - PTT_MSG_ENTER_FULL_POWER = 0x3223, - -//Misc - PTT_MSG_SYSTEM_RESET = 0x32A0, //is there any meaning for this in Gen6? - PTT_MSG_LOG_DUMP = 0x32A1, - PTT_MSG_GET_BUILD_RELEASE_NUMBER = 0x32A2, - - -//Messages for Socket App - PTT_MSG_ADAPTER_DISABLED_RSP_OBSOLETE = 0x32A3, - PTT_MSG_ENABLE_ADAPTER = 0x32A4, - PTT_MSG_DISABLE_ADAPTER = 0x32A5, - PTT_MSG_PAUSE_RSP_OBSOLETE = 0x32A6, - PTT_MSG_CONTINUE_RSP_OBSOLETE = 0x32A7, - - PTT_MSG_HALPHY_INIT = 0x32A8, - PTT_MSG_TEST_RXIQ_CAL = 0x32A9, - PTT_MSG_START_TONE_GEN = 0x32AA, - PTT_MSG_STOP_TONE_GEN = 0x32AB, - PTT_MSG_RX_IM2_CAL = 0x32AC, - PTT_MSG_SET_RX_IM2_CORRECT = 0x31AD, - PTT_MSG_GET_RX_IM2_CORRECT = 0x31AE, - PTT_MSG_TEST_DPD_CAL = 0x32AF, // not handle - PTT_MSG_SET_CALCONTROL_BITMAP = 0x32B0, - -//[RY] specific new messages for PRIMA - PTT_MSG_START_WAVEFORM_RF = 0x32B1, - PTT_MSG_STOP_WAVEFORM_RF = 0x32B2, - PTT_MSG_HKDAC_TX_IQ_CAL = 0x32B3, - PTT_MSG_SET_HKADC_TX_IQ_CORRECT = 0x32B4, - PTT_MSG_GET_HKADC_TX_IQ_CORRECT = 0x32B5, - PTT_MSG_SET_DPD_CORRECT = 0x32B6, - PTT_MSG_GET_DPD_CORRECT = 0x32B7, - PTT_MSG_SET_WAVEFORM_RF = 0x32B8, - PTT_MSG_LNA_BAND_CAL = 0x32B9, - PTT_MSG_GET_LNA_BAND_CORRECT = 0x32BA, - PTT_MSG_SET_LNA_BAND_CORRECT = 0x32BB, - PTT_MSG_DPD_CAL = 0x32BC, - -// Suffix'ed Message ID to differential from existing Message name. -// =============================================================== - PTT_MSG_GET_NV_TABLE_PRIMA_V1 = 0x32BD, - PTT_MSG_SET_NV_TABLE_PRIMA_V1 = 0x32BE, - PTT_MSG_RX_IQ_CAL_PRIMA_V1 = 0x32BF, - PTT_MSG_TX_IQ_CAL_PRIMA_V1 = 0x32C0, - PTT_MSG_SET_TX_IQ_CORRECT_PRIMA_V1 = 0x32C1, - PTT_MSG_GET_TX_IQ_CORRECT_PRIMA_V1 = 0x32C2, - PTT_MSG_SET_RX_IQ_CORRECT_PRIMA_V1 = 0x32C3, - PTT_MSG_GET_RX_IQ_CORRECT_PRIMA_V1 = 0x32C4, - PTT_MSG_START_WAVEFORM_PRIMA_V1 = 0x32C5, - PTT_MSG_FORCE_PACKET_TX_GAIN_PRIMA_V1 = 0x32C6, - PTT_MSG_CLPC_CAL_SETUP_PRIMA_V1 = 0x32C7, - PTT_MSG_CLPC_CAL_RESTORE_PRIMA_V1 = 0x32C8, - PTT_MSG_CLOSE_TPC_LOOP_PRIMA_V1 = 0x32C9, - PTT_MSG_SW_CLPC_CAL_PRIMA_V1 = 0x32CA, - PTT_MSG_CLPC_CAL_EXTRA_MEASUREMENT_PRIMA_V1 = 0x32CB, - PTT_MSG_PRIMA_GENERIC_CMD = 0x32CC, - PTT_MSG_DIGITAL_PIN_CONNECTIVITY_TEST_RES = 0X32CD, - - PTT_MSG_EXIT = 0x32ff, - PTT_MAX_MSG_ID = PTT_MSG_EXIT -} ePttMsgId; - -enum -{ - PTT_MSG_PRIMA_GENERIC_CMD_FAST_SET_CHANNEL = 0x0, -}; - -#define PTT_MSG_TYPES_BEGIN_30 PTT_MSG_TYPES_BEGIN -#define PTT_MSG_TYPES_BEGIN_31 PTT_MSG_TYPES_BEGIN + 0x100 -#define PTT_MSG_TYPES_BEGIN_32 PTT_MSG_TYPES_BEGIN + 0x200 - -// for FTM PER feature -enum { -Legacy_FTM = 0, -FTM_PER_TX = 1, -FTM_PER_RX = 2, -}; - -#ifndef tANI_BOOLEAN -#define tANI_BOOLEAN tANI_U8 -#endif - - - -/****************************************************************************************************************** - PTT MESSAGES -******************************************************************************************************************/ -//Init -typedef PACKED_PRE struct PACKED_POST { - tPttModuleVariables ptt; -} tMsgPttMsgInit; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 tableSize; - tANI_U32 chunkSize; - eNvTable nvTable; -} tMsgPttGetNvTable; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 tableSize; - tANI_U32 chunkSize; - eNvTable nvTable; -} tMsgPttSetNvTable; - -typedef PACKED_PRE struct PACKED_POST { - eNvTable nvTable; -} tMsgPttDelNvTable; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 notUsed; -} tMsgPttBlankNv; - -typedef PACKED_PRE struct PACKED_POST { - eNvField nvField; - uNvFields fieldData; -} tMsgPttGetNvField; - -typedef PACKED_PRE struct PACKED_POST { - eNvField nvField; - uNvFields fieldData; -} tMsgPttSetNvField; - -typedef PACKED_PRE struct PACKED_POST { - eNvTable nvTable; -} tMsgPttStoreNvTable; - -typedef PACKED_PRE struct PACKED_POST { - eRegDomainId regDomainId; -} tMsgPttSetRegDomain; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 tableSize; - tANI_U32 chunkSize; - eNvTable nvTable; - tANI_U8 nvData[MAX_NV_BIN_SIZE]; -} tMsgPttGetNvBin; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 tableSize; - tANI_U32 chunkSize; - eNvTable nvTable; - tANI_U8 nvData[MAX_NV_BIN_SIZE]; -} tMsgPttSetNvBin; - -//Device Register Access -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 regAddr; - tANI_U32 regValue; -} tMsgPttDbgReadRegister; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 regAddr; - tANI_U32 regValue; -} tMsgPttDbgWriteRegister; - -#define PTT_READ_MEM_MAX 512 -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 memAddr; - tANI_U32 nBytes; - tANI_U32 pMemBuf[PTT_READ_MEM_MAX]; //caller should allocate space -} tMsgPttDbgReadMemory; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 memAddr; - tANI_U32 nBytes; - tANI_U32 pMemBuf[PTT_READ_MEM_MAX]; -} tMsgPttDbgWriteMemory; - -//Device MAC Test Setup -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 chId; - ePhyChanBondState cbState; -} tMsgPttSetChannel; - -typedef PACKED_PRE struct PACKED_POST { - ePhyChainSelect chainSelect; -} tMsgPttEnableChains; - -typedef tIQSamples tWaveformSample; - -//Tx Waveform Gen Service -typedef PACKED_PRE struct PACKED_POST { - tWaveformSample waveform[MAX_TEST_WAVEFORM_SAMPLES]; - tANI_U16 numSamples; - tANI_BOOLEAN clk80; - tANI_U8 reserved[1]; -} tMsgPttSetWaveform; - -typedef PACKED_PRE struct PACKED_POST { - ePhyTxChains txChain; - tANI_U8 gain; -} tMsgPttSetTxWaveformGain; - -typedef PACKED_PRE struct PACKED_POST { - ePhyTxChains txChain; - tANI_U32 gain; -} tMsgPttSetTxWaveformGain_PRIMA_V1; - -typedef PACKED_PRE struct PACKED_POST { - ePhyRxChains rxChain; - tANI_U8 gain; -} tMsgPttSetRxWaveformGain; - -typedef PACKED_PRE struct PACKED_POST { - sTxChainsPowerAdcReadings txPowerAdc; -} tMsgPttGetWaveformPowerAdc; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 notUsed; -} tMsgPttStopWaveform; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 notUsed; -} tMsgPttClpcCalSetup_PRIMA_V1; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U16 setup_measure; - tANI_U16 setup_txDmdPwrOffset; - tANI_U16 measure_totalExtraPt; - tANI_U16 measure_currentMeasurePtIdx; - tANI_U8 plut[256]; -} tMsgPttClpcCalExtraMeasurement_PRIMA_V1; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 notUsed; -} tMsgPttClpcCalRestore_PRIMA_V1; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 startIndex; - tANI_U32 numSamples; -} tMsgPttStartWaveform; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 startIndex; - tANI_U32 numSamples; -} tMsgPttStartWaveform_PRIMA_V1; - -// Added for PRIMA -typedef PACKED_PRE struct PACKED_POST { - tWaveformSample waveform[MAX_TEST_WAVEFORM_SAMPLES]; - tANI_U16 numSamples; - tANI_BOOLEAN clk80; - tANI_U8 reserved[1]; -} tMsgPttSetWaveformRF; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 startIndex; - tANI_U32 numSamples; -} tMsgPttStartWaveformRF; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 notUsed; -} tMsgPttStopWaveformRF; - -//Tx Frame Gen Service -typedef PACKED_PRE struct PACKED_POST { - sPttFrameGenParams frameParams; -} tMsgPttConfigTxPacketGen; - -typedef PACKED_PRE struct PACKED_POST { - tANI_BOOLEAN startStop; - tANI_U8 reserved[3]; -} tMsgPttStartStopTxPacketGen; - -typedef PACKED_PRE struct PACKED_POST { - sTxFrameCounters numFrames; - tANI_BOOLEAN status; - tANI_U8 reserved[3]; -} tMsgPttQueryTxStatus; - -//Tx Frame Power Service -typedef PACKED_PRE struct PACKED_POST { - tANI_BOOLEAN tpcClose; - tANI_U8 reserved[3]; -} tMsgPttCloseTpcLoop; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 tpcClose; -} tMsgPttCloseTpcLoop_PRIMA_V1; - - - //open loop service -typedef PACKED_PRE struct PACKED_POST { - - ePhyTxChains txChain; - tANI_U8 minIndex; - tANI_U8 maxIndex; - tANI_U8 reserved[2]; - tANI_U8 gainTable[TPC_MEM_GAIN_LUT_DEPTH]; -} tMsgPttSetPacketTxGainTable; - -typedef PACKED_PRE struct PACKED_POST { - ePhyTxChains txChain; - tANI_U8 gainTable[TPC_MEM_GAIN_LUT_DEPTH]; -} tMsgPttGetPacketTxGainTable; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U8 index; - tANI_U8 reserved[3]; -} tMsgPttSetPacketTxGainIndex; - -typedef PACKED_PRE struct PACKED_POST { - ePhyTxChains txChain; - tANI_U8 gain; - tANI_U8 reserved[3]; -} tMsgPttForcePacketTxGain; - -typedef PACKED_PRE struct PACKED_POST { - ePhyTxChains txChain; - tANI_U32 gain; -} tMsgPttForcePacketTxGain_PRIMA_V1; - - -typedef PACKED_PRE struct PACKED_POST { - ePowerTempIndexSource indexSource; -} tMsgPttSetPwrIndexSource; - -typedef PACKED_PRE struct PACKED_POST { - t2Decimal dbmPwr; - tANI_U8 reserved[2]; -} tMsgPttSetTxPower; - -typedef tTxPowerReport tMsgPttGetTxPowerReport; - -typedef PACKED_PRE struct PACKED_POST { - ePhyTxChains txChain; - - tANI_U8 minIndex; - tANI_U8 maxIndex; - tANI_U8 reserved[2]; - - tANI_U8 powerLut[TPC_MEM_POWER_LUT_DEPTH]; -} tMsgPttSetPowerLut; - -typedef PACKED_PRE struct PACKED_POST { - ePhyTxChains txChain; - - tANI_U8 powerLut[TPC_MEM_POWER_LUT_DEPTH]; -} tMsgPttGetPowerLut; - - -//Rx Gain Service -typedef PACKED_PRE struct PACKED_POST { - sRxChainsAgcDisable gains; -} tMsgPttDisableAgcTables; - - -typedef PACKED_PRE struct PACKED_POST { - sRxChainsAgcEnable enables; -} tMsgPttEnableAgcTables; - -typedef PACKED_PRE struct PACKED_POST { - sRxChainsRssi rssi; -} tMsgPttGetRxRssi; - -typedef PACKED_PRE struct PACKED_POST { - sRxChainsRssi rssi; -}tMsgPttGetUnicastMacPktRxRssi; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 conf; -}tMsgPttGetUnicastMacPktRxRssiConf_PRIMA_V1; - -//Rx Frame Catcher Service -typedef PACKED_PRE struct PACKED_POST { - sRxTypesDisabled disabled; -} tMsgPttSetRxDisableMode; - -typedef PACKED_PRE struct PACKED_POST { - sRxFrameCounters counters; -} tMsgPttGetRxPktCounts; - - -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 notUsed; -} tMsgPttResetRxPacketStatistics; - - - - - -//ADC Sample Service -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 startSample; //index of first requested sample, 0 causes new capture - tANI_U32 numSamples; //number of samples to transfer to host - eGrabRamSampleType sampleType; - tGrabRamSample grabRam[MAX_REQUESTED_GRAB_RAM_SAMPLES]; -} tMsgPttGrabRam; - - -//Phy Calibration Service -typedef PACKED_PRE struct PACKED_POST { - sRxChainsIQCalValues calValues; - eGainSteps gain; -} tMsgPttRxIqCal; - -typedef PACKED_PRE struct PACKED_POST { - tRxChainsDcoCorrections calValues; - tANI_U8 gain; -} tMsgPttRxDcoCal; - -typedef PACKED_PRE struct PACKED_POST { - tRxChainsIm2Corrections calValues; - eGainSteps gain; - tANI_U8 im2CalOnly; -} tMsgPttRxIm2Cal; - -typedef PACKED_PRE struct PACKED_POST { - sTxChainsLoCorrections calValues; - tANI_U8 reserve[2]; - eGainSteps gain; -} tMsgPttTxCarrierSuppressCal; - -typedef PACKED_PRE struct PACKED_POST { - sTxChainsIQCalValues calValues; - tANI_U8 reserve[2]; - eGainSteps gain; -} tMsgPttTxIqCal; - -typedef PACKED_PRE struct PACKED_POST { - sTxChainsHKIQCalValues calValues; - eGainSteps gain; -} tMsgPttHKdacTxIqCal; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 unused; -} tMsgPttExecuteInitialCals; - -typedef PACKED_PRE struct PACKED_POST { - sRfHdetCalValues hdetCalValues; -} tMsgPttHdetCal; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U16 clpcMode; - tANI_U16 txCmdPwr; - tANI_U16 pwrMax_pwrMin; - tANI_U16 step; - tANI_U8 plut[256]; -} tMsgPttClpcSwCal_PRIMA_V1; - - -//Phy Calibration Override Service -typedef PACKED_PRE struct PACKED_POST { - sTxChainsLoCorrections calValues; - tANI_U8 reserve[2]; - eGainSteps gain; -} tMsgPttSetTxCarrierSuppressCorrect; - -typedef PACKED_PRE struct PACKED_POST { - sTxChainsLoCorrections calValues; - tANI_U8 reserve[2]; - eGainSteps gain; -} tMsgPttGetTxCarrierSuppressCorrect; - -typedef PACKED_PRE struct PACKED_POST { - sTxChainsIQCalValues calValues; - tANI_U8 reserve[2]; - eGainSteps gain; -} tMsgPttSetTxIqCorrect; - -typedef PACKED_PRE struct PACKED_POST { - sTxChainsIQCalValues calValues; - tANI_U8 reserve[2]; - eGainSteps gain; -} tMsgPttGetTxIqCorrect; - -typedef PACKED_PRE struct PACKED_POST { - sTxChainsHKIQCalValues calValues; - eGainSteps gain; -} tMsgPttHKdacSetTxIqCorrect; - -typedef PACKED_PRE struct PACKED_POST { - sTxChainsHKIQCalValues calValues; - eGainSteps gain; -} tMsgPttHKdacGetTxIqCorrect; - -typedef PACKED_PRE struct PACKED_POST { - sRxChainsIQCalValues calValues; - eGainSteps gain; -} tMsgPttSetRxIqCorrect; - -typedef PACKED_PRE struct PACKED_POST { - sRxChainsIQCalValues calValues; - eGainSteps gain; -} tMsgPttGetRxIqCorrect; - -typedef PACKED_PRE struct PACKED_POST { - tRxChainsDcoCorrections calValues; - tANI_U8 gain; -} tMsgPttSetRxDcoCorrect; - -typedef PACKED_PRE struct PACKED_POST { - tRxChainsDcoCorrections calValues; - tANI_U8 gain; -} tMsgPttGetRxDcoCorrect; - -typedef PACKED_PRE struct PACKED_POST { - tRxChainsIm2Corrections calValues; - tANI_U8 dummy; -} tMsgPttSetRxIm2Correct; - -typedef PACKED_PRE struct PACKED_POST { - tRxChainsIm2Corrections calValues; - tANI_U8 dummy; -} tMsgPttGetRxIm2Correct; - -typedef PACKED_PRE struct PACKED_POST { - eRfTempSensor tempSensor; - tTempADCVal tempAdc; - tANI_U8 reserved[4 - sizeof(tTempADCVal)]; -} tMsgPttGetTempAdc; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 addr; - tANI_U32 mask; - tANI_U32 shift; - tANI_U32 value; -} tMsgPttReadRfField; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 addr; - tANI_U32 mask; - tANI_U32 shift; - tANI_U32 value; -} tMsgPttWriteRfField; - -//SIF bar4 Register Access -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 sifRegAddr; - tANI_U32 sifRegValue; -} tMsgPttReadSifBar4Register; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 sifRegAddr; - tANI_U32 sifRegValue; -} tMsgPttWriteSifBar4Register; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 notUsed; -} tMsgPttDeepSleep; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 notUsed; -} tMsgPttEnterFullPower; - -//Misc. -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 notUsed; -} tMsgPttSystemReset; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 cmd; - tANI_U32 arg1; - tANI_U32 arg2; - tANI_U32 arg3; - tANI_U32 arg4; -} tMsgPttLogDump; - -typedef PACKED_PRE struct PACKED_POST { - sBuildReleaseParams relParams; -} tMsgPttGetBuildReleaseNumber; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 revId; -} tMsgPttGetRFVersion; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 option; //dummy variable -} tMsgPttCalControlBitmap; - -//#ifdef VERIFY_HALPHY_SIMV_MODEL - - -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 option; //dummy variable -} tMsgPttHalPhyInit; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 option; //dummy variable -} tMsgPttRxIQTest; - -typedef PACKED_PRE struct PACKED_POST { - sTxChainsDPDCalValues calValues; - eGainSteps gain; -} tMsgPttDpdCal; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U8 lutIdx; - tANI_U8 band; -} tMsgPttStartToneGen; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U32 option; //dummy variable -} tMsgPttStopToneGen; - -typedef PACKED_PRE struct PACKED_POST { - sTxChainsLnaBandCalValues calValues; - eGainSteps gain; -} tMsgPttLnaBandCal; - -typedef PACKED_PRE struct PACKED_POST { - sTxChainsLnaBandCalValues calValues; - eGainSteps gain; -} tMsgPttGetLnaBandCalCorrect; - -typedef PACKED_PRE struct PACKED_POST { - sTxChainsLnaBandCalValues calValues; - eGainSteps gain; -} tMsgPttSetLnaBandCalCorrect; - -typedef PACKED_PRE struct PACKED_POST { - sTxChainsDPDCalValues calValues; - eGainSteps gain; -}tMsgPttSetDPDCorrect; - -typedef PACKED_PRE struct PACKED_POST { - sTxChainsDPDCalValues calValues; - eGainSteps gain; -}tMsgPttGetDPDCorrect; - -typedef PACKED_PRE struct PACKED_POST { - tQWPTT_U32 cmdIdx; - tQWPTT_U32 param1; - tQWPTT_U32 param2; - tQWPTT_U32 param3; - tQWPTT_U32 param4; -} tMsgPttPrimaGenericCmd; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U16 testID; - tANI_U16 result; -} tMsgPttPinConnTestRes; -//#endif - -/****************************************************************************************************************** - END OF PTT MESSAGES -******************************************************************************************************************/ - -typedef PACKED_PRE union PACKED_POST pttMsgUnion{ -//typedef union pttMsgUnion { - tMsgPttMsgInit MsgInit; - tMsgPttGetNvTable GetNvTable; - tMsgPttSetNvTable SetNvTable; - tMsgPttDelNvTable DelNvTable; - tMsgPttBlankNv BlankNv; - tMsgPttStoreNvTable StoreNvTable; - tMsgPttSetRegDomain SetRegDomain; - tMsgPttGetNvField GetNvField; - tMsgPttSetNvField SetNvField; - tMsgPttGetNvBin GetNvBin; - tMsgPttSetNvBin SetNvBin; - tMsgPttDbgReadRegister DbgReadRegister; - tMsgPttDbgWriteRegister DbgWriteRegister; - tMsgPttDbgReadMemory DbgReadMemory; - tMsgPttDbgWriteMemory DbgWriteMemory; - tMsgPttEnableChains EnableChains; - tMsgPttSetChannel SetChannel; - tMsgPttSetWaveform SetWaveform; - tMsgPttSetTxWaveformGain SetTxWaveformGain; - tMsgPttSetTxWaveformGain_PRIMA_V1 SetTxWaveformGain_PRIMA_V1; - tMsgPttGetWaveformPowerAdc GetWaveformPowerAdc; - tMsgPttStartWaveform StartWaveform; - tMsgPttStartWaveform_PRIMA_V1 StartWaveform_PRIMA_V1; - tMsgPttStopWaveform StopWaveform; - tMsgPttSetRxWaveformGain SetRxWaveformGain; - tMsgPttConfigTxPacketGen ConfigTxPacketGen; - tMsgPttStartStopTxPacketGen StartStopTxPacketGen; - tMsgPttQueryTxStatus QueryTxStatus; - tMsgPttCloseTpcLoop CloseTpcLoop; - tMsgPttCloseTpcLoop_PRIMA_V1 CloseTpcLoop_PRIMA_V1; - tMsgPttSetPacketTxGainTable SetPacketTxGainTable; - tMsgPttGetPacketTxGainTable GetPacketTxGainTable; - tMsgPttSetPacketTxGainIndex SetPacketTxGainIndex; - tMsgPttForcePacketTxGain ForcePacketTxGain; - tMsgPttForcePacketTxGain_PRIMA_V1 ForcePacketTxGain_PRIMA_V1; - tMsgPttSetPwrIndexSource SetPwrIndexSource; - tMsgPttSetTxPower SetTxPower; - tMsgPttGetTxPowerReport GetTxPowerReport; - tMsgPttSetPowerLut SetPowerLut; - tMsgPttGetPowerLut GetPowerLut; - tMsgPttDisableAgcTables DisableAgcTables; - tMsgPttEnableAgcTables EnableAgcTables; - tMsgPttGetRxRssi GetRxRssi; - tMsgPttGetUnicastMacPktRxRssi GetUnicastMacPktRxRssi; - tMsgPttGetUnicastMacPktRxRssiConf_PRIMA_V1 GetUnicastMacPktRxRssiConf_PRIMA_V1; - tMsgPttSetRxDisableMode SetRxDisableMode; - tMsgPttGetRxPktCounts GetRxPktCounts; - tMsgPttResetRxPacketStatistics ResetRxPacketStatistics; - tMsgPttGrabRam GrabRam; - tMsgPttRxIqCal RxIqCal; - tMsgPttRxDcoCal RxDcoCal; - tMsgPttRxIm2Cal RxIm2Cal; - - tMsgPttExecuteInitialCals ExecuteInitialCals; - tMsgPttTxCarrierSuppressCal TxCarrierSuppressCal; - tMsgPttTxIqCal TxIqCal; - tMsgPttHKdacTxIqCal HKdacTxIqCal; - tMsgPttClpcCalSetup_PRIMA_V1 ClpcCalSetup_PRIMA_V1; - tMsgPttClpcCalRestore_PRIMA_V1 ClpcCalRestore_PRIMA_V1; - tMsgPttHdetCal HdetCal; - tMsgPttClpcSwCal_PRIMA_V1 ClpcSwCal_PRIMA_V1; - tMsgPttClpcCalExtraMeasurement_PRIMA_V1 ClpcCalExtraMeasurement_PRIMA_V1; - tMsgPttSetTxCarrierSuppressCorrect SetTxCarrierSuppressCorrect; - tMsgPttGetTxCarrierSuppressCorrect GetTxCarrierSuppressCorrect; - tMsgPttSetTxIqCorrect SetTxIqCorrect; - tMsgPttGetTxIqCorrect GetTxIqCorrect; - tMsgPttSetRxIqCorrect SetRxIqCorrect; - tMsgPttGetRxIqCorrect GetRxIqCorrect; - tMsgPttSetRxDcoCorrect SetRxDcoCorrect; - tMsgPttGetRxDcoCorrect GetRxDcoCorrect; - tMsgPttSetRxIm2Correct SetRxIm2Correct; - tMsgPttGetRxIm2Correct GetRxIm2Correct; - tMsgPttHKdacSetTxIqCorrect HKdacSetTxIqCorrect; - tMsgPttHKdacGetTxIqCorrect HKdacGetTxIqCorrect; - - tMsgPttGetTempAdc GetTempAdc; - tMsgPttReadRfField ReadRfField; - tMsgPttWriteRfField WriteRfField; - tMsgPttCalControlBitmap SetCalControlBitmap; - -//#ifdef VERIFY_HALPHY_SIMV_MODEL - - tMsgPttHalPhyInit InitOption; - tMsgPttRxIQTest RxIQTest; - tMsgPttDpdCal DpdCal; - tMsgPttStartToneGen StartToneGen; - tMsgPttStopToneGen StopToneGen; -//#endif - tMsgPttDeepSleep DeepSleep; - tMsgPttReadSifBar4Register ReadSifBar4Register; - tMsgPttWriteSifBar4Register WriteSifBar4Register; - tMsgPttEnterFullPower EnterFullPower; - tMsgPttSystemReset SystemReset; - tMsgPttLogDump LogDump; - tMsgPttGetBuildReleaseNumber GetBuildReleaseNumber; - tMsgPttGetRFVersion GetRFVersion; - -//[RY] added for PRIMA - tMsgPttSetWaveformRF SetWaveformRF; - tMsgPttStopWaveformRF StopWaveformRF; - tMsgPttStartWaveformRF StartWaveformRF; - tMsgPttLnaBandCal LnaBandCal; - tMsgPttGetLnaBandCalCorrect GetLnaBandCalCorrect; - tMsgPttSetLnaBandCalCorrect SetLnaBandCalCorrect; - tMsgPttGetDPDCorrect GetDPDCorrect; - tMsgPttSetDPDCorrect SetDPDCorrect; - tMsgPttDpdCal DPDCal; - tMsgPttPrimaGenericCmd PrimaGenericCmd; - tMsgPttPinConnTestRes PinConnTestRes; -} uPttMsgs; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U16 msgId; - tANI_U16 msgBodyLength; //actually, the length of all the fields in this structure - eQWPttStatus msgResponse; - uPttMsgs msgBody; -} tPttMsgbuffer, *tpPttMsgbuffer; - - -typedef PACKED_PRE struct PACKED_POST { - /* - * success or failure - */ - tANI_U32 status; - tPttMsgbuffer pttMsgBuffer; -} tProcessPttRspParams, *tpProcessPttRspParams; - -/* End of Ptt Parameters */ - -#endif diff --git a/wcnss/riva/inc/wlan_hal_cfg.h b/wcnss/riva/inc/wlan_hal_cfg.h deleted file mode 100644 index 9e64c03043e5..000000000000 --- a/wcnss/riva/inc/wlan_hal_cfg.h +++ /dev/null @@ -1,938 +0,0 @@ -/* - * Copyright (c) 2013, The Linux Foundation. All rights reserved. - * - * Previously licensed under the ISC license by Qualcomm Atheros, Inc. - * - * - * Permission to use, copy, modify, and/or distribute this software for - * any purpose with or without fee is hereby granted, provided that the - * above copyright notice and this permission notice appear in all - * copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL - * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE - * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL - * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -/* - * This file was originally distributed by Qualcomm Atheros, Inc. - * under proprietary terms before Copyright ownership was assigned - * to the Linux Foundation. - */ - -/*========================================================================== - * - * @file: wlan_hal_cfg.h - * - * @brief: Exports and types WLAN HAL configuration - * - * @author: Kumar Anand - * - * Copyright (C) 2010, Qualcomm Technologies, Inc. - * All rights reserved. - * - *=========================================================================*/ - -#ifndef __WLAN_HAL_CFG_H__ -#define __WLAN_HAL_CFG_H__ - -/*------------------------------------------------------------------------- - Include Files --------------------------------------------------------------------------*/ -#include "qwlanfw_defs.h" - -/*------------------------------------------------------------------------- - Preprocessor definitions and constants --------------------------------------------------------------------------*/ -/* RIVA API version in format W.X.Y.Z is converted to a UINT32 integer */ -#define WLAN_HAL_CONSTRUCT_API_VERSION(W,X,Y,Z) (((W)<<24)+((X)<<16)+((Y)<<8)+(Z)) -#define IS_VERSION_BEFORE_VOWIFI(VER_FROM_HOST) \ - ((VER_FROM_HOST)<=WLAN_HAL_CONSTRUCT_API_VERSION(0,0,2,0))?1:0 - -/*------------------------------------------------------------------------- - Configuration Parameter IDs --------------------------------------------------------------------------*/ -#define QWLAN_HAL_CFG_STA_ID 0 -#define QWLAN_HAL_CFG_CURRENT_TX_ANTENNA 1 -#define QWLAN_HAL_CFG_CURRENT_RX_ANTENNA 2 -#define QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE 3 -#define QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN 4 -#define QWLAN_HAL_CFG_CAL_PERIOD 5 -#define QWLAN_HAL_CFG_CAL_CONTROL 6 -#define QWLAN_HAL_CFG_PROXIMITY 7 -#define QWLAN_HAL_CFG_NETWORK_DENSITY 8 -#define QWLAN_HAL_CFG_MAX_MEDIUM_TIME 9 -#define QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU 10 -#define QWLAN_HAL_CFG_RTS_THRESHOLD 11 -#define QWLAN_HAL_CFG_SHORT_RETRY_LIMIT 12 -#define QWLAN_HAL_CFG_LONG_RETRY_LIMIT 13 -#define QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD 14 -#define QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO 15 -#define QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE 16 -#define QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO 17 -#define QWLAN_HAL_CFG_FIXED_RATE 18 -#define QWLAN_HAL_CFG_RETRYRATE_POLICY 19 -#define QWLAN_HAL_CFG_RETRYRATE_SECONDARY 20 -#define QWLAN_HAL_CFG_RETRYRATE_TERTIARY 21 -#define QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION 22 -#define QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ 23 -#define QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ 24 -#define QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ 25 -#define QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ 26 -#define QWLAN_HAL_CFG_MAX_BA_SESSIONS 27 -#define QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT 28 -#define QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER 29 -#define QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR 30 -#define QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE 31 -#define QWLAN_HAL_CFG_STATS_PERIOD 32 -#define QWLAN_HAL_CFG_CFP_MAX_DURATION 33 -#define QWLAN_HAL_CFG_FRAME_TRANS_ENABLED 34 -#define QWLAN_HAL_CFG_DTIM_PERIOD 35 -#define QWLAN_HAL_CFG_EDCA_WMM_ACBK 36 -#define QWLAN_HAL_CFG_EDCA_WMM_ACBE 37 -#define QWLAN_HAL_CFG_EDCA_WMM_ACVO 38 -#define QWLAN_HAL_CFG_EDCA_WMM_ACVI 39 -#define QWLAN_HAL_CFG_BA_THRESHOLD_HIGH 40 -#define QWLAN_HAL_CFG_MAX_BA_BUFFERS 41 -#define QWLAN_HAL_CFG_RPE_POLLING_THRESHOLD 42 -#define QWLAN_HAL_CFG_RPE_AGING_THRESHOLD_FOR_AC0_REG 43 -#define QWLAN_HAL_CFG_RPE_AGING_THRESHOLD_FOR_AC1_REG 44 -#define QWLAN_HAL_CFG_RPE_AGING_THRESHOLD_FOR_AC2_REG 45 -#define QWLAN_HAL_CFG_RPE_AGING_THRESHOLD_FOR_AC3_REG 46 -#define QWLAN_HAL_CFG_NO_OF_ONCHIP_REORDER_SESSIONS 47 -#define QWLAN_HAL_CFG_PS_LISTEN_INTERVAL 48 -#define QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD 49 -#define QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER 50 -#define QWLAN_HAL_CFG_PS_MAX_PS_POLL 51 -#define QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD 52 -#define QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD 53 -#define QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE 54 -#define QWLAN_HAL_CFG_PS_IGNORE_DTIM 55 -#define QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM 56 -#define QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE 57 -#define QWLAN_HAL_CFG_PS_NULLDATA_AP_RESP_TIMEOUT 58 -#define QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN 59 -#define QWLAN_HAL_CFG_TELE_BCN_TRANS_LI 60 -#define QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS 61 -#define QWLAN_HAL_CFG_TELE_BCN_MAX_LI 62 -#define QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS 63 -#define QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE 64 -#define QWLAN_HAL_CFG_VALID_RADAR_CHANNEL_LIST 65 -#define QWLAN_HAL_CFG_TX_POWER_24_20 66 -#define QWLAN_HAL_CFG_TX_POWER_24_40 67 -#define QWLAN_HAL_CFG_TX_POWER_50_20 68 -#define QWLAN_HAL_CFG_TX_POWER_50_40 69 -#define QWLAN_HAL_CFG_MCAST_BCAST_FILTER_SETTING 70 -#define QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL 71 -#define QCOM_WLAN_CFG_MAX_TX_POWER_2_4 72 -#define QCOM_WLAN_CFG_MAX_TX_POWER_5 73 -#define QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD 74 -#define QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP 75 -#define QWLAN_HAL_CFG_BTC_EXECUTION_MODE 76 -#define QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK 77 -#define QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS 78 -#define QWLAN_HAL_CFG_PS_TX_INACTIVITY_TIMEOUT 79 -#define QWLAN_HAL_CFG_WCNSS_API_VERSION 80 -#define QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT 81 -#define QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT 82 -#define QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST 83 -#define QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT 84 -#define QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT 85 -#define QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT 86 -#define QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT 87 -#define QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN 88 -#define QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN 89 -#define QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN 90 -#define QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN 91 -#define QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT 92 -#define QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN 93 -#define QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC 94 -#define QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP 95 -#define QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO 96 -#define QWLAN_HAL_CFG_ENABLE_UNICAST_FILTER 97 -#define QWLAN_HAL_CFG_MAX_ASSOC_LIMIT 98 -#define QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION 99 -#define QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER 100 -#define QWLAN_HAL_CFG_ENABLE_DETECT_PS_SUPPORT 101 -#define QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT 102 -#define QWLAN_HAL_CFG_BTC_DWELL_TIME_MULTIPLIER 103 -#define QWLAN_HAL_CFG_ENABLE_TDLS_OXYGEN_MODE 104 -#define QWLAN_HAL_CFG_ENABLE_NAT_KEEP_ALIVE_FILTER 105 -#define QWLAN_HAL_CFG_ENABLE_SAP_OBSS_PROT 106 -#define QWLAN_HAL_CFG_PSPOLL_DATA_RECEP_TIMEOUT 107 -#define QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE 108 -#define QWLAN_HAL_CFG_TDLS_PUAPSD_MASK 109 -#define QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME 110 -#define QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP 111 -#define QWLAN_HAL_CFG_ANTENNA_DIVERSITY 112 -#define QWLAN_HAL_CFG_ATH_DISABLE 113 -#define QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR 114 -#define QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE 115 -#define QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE 116 -#define QWLAN_HAL_CFG_MWS_COEX_V1_WAN_FREQ 117 -#define QWLAN_HAL_CFG_MWS_COEX_V1_WLAN_FREQ 118 -#define QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG 119 -#define QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG2 120 -#define QWLAN_HAL_CFG_MWS_COEX_V2_WAN_FREQ 121 -#define QWLAN_HAL_CFG_MWS_COEX_V2_WLAN_FREQ 122 -#define QWLAN_HAL_CFG_MWS_COEX_V2_CONFIG 123 -#define QWLAN_HAL_CFG_MWS_COEX_V2_CONFIG2 124 -#define QWLAN_HAL_CFG_MWS_COEX_V3_WAN_FREQ 125 -#define QWLAN_HAL_CFG_MWS_COEX_V3_WLAN_FREQ 126 -#define QWLAN_HAL_CFG_MWS_COEX_V3_CONFIG 127 -#define QWLAN_HAL_CFG_MWS_COEX_V3_CONFIG2 128 -#define QWLAN_HAL_CFG_MWS_COEX_V4_WAN_FREQ 129 -#define QWLAN_HAL_CFG_MWS_COEX_V4_WLAN_FREQ 130 -#define QWLAN_HAL_CFG_MWS_COEX_V4_CONFIG 131 -#define QWLAN_HAL_CFG_MWS_COEX_V4_CONFIG2 132 -#define QWLAN_HAL_CFG_MWS_COEX_V5_WAN_FREQ 133 -#define QWLAN_HAL_CFG_MWS_COEX_V5_WLAN_FREQ 134 -#define QWLAN_HAL_CFG_MWS_COEX_V5_CONFIG 135 -#define QWLAN_HAL_CFG_MWS_COEX_V5_CONFIG2 136 -#define QWLAN_HAL_CFG_MWS_COEX_V6_WAN_FREQ 137 -#define QWLAN_HAL_CFG_MWS_COEX_V6_WLAN_FREQ 138 -#define QWLAN_HAL_CFG_MWS_COEX_V6_CONFIG 139 -#define QWLAN_HAL_CFG_MWS_COEX_V6_CONFIG2 140 -#define QWLAN_HAL_CFG_MWS_COEX_V7_WAN_FREQ 141 -#define QWLAN_HAL_CFG_MWS_COEX_V7_WLAN_FREQ 142 -#define QWLAN_HAL_CFG_MWS_COEX_V7_CONFIG 143 -#define QWLAN_HAL_CFG_MWS_COEX_V7_CONFIG2 144 -#define QWLAN_HAL_CFG_MWS_COEX_V8_WAN_FREQ 145 -#define QWLAN_HAL_CFG_MWS_COEX_V8_WLAN_FREQ 146 -#define QWLAN_HAL_CFG_MWS_COEX_V8_CONFIG 147 -#define QWLAN_HAL_CFG_MWS_COEX_V8_CONFIG2 148 -#define QWLAN_HAL_CFG_MWS_COEX_V9_WAN_FREQ 149 -#define QWLAN_HAL_CFG_MWS_COEX_V9_WLAN_FREQ 150 -#define QWLAN_HAL_CFG_MWS_COEX_V9_CONFIG 151 -#define QWLAN_HAL_CFG_MWS_COEX_V9_CONFIG2 152 -#define QWLAN_HAL_CFG_MWS_COEX_V10_WAN_FREQ 153 -#define QWLAN_HAL_CFG_MWS_COEX_V10_WLAN_FREQ 154 -#define QWLAN_HAL_CFG_MWS_COEX_V10_CONFIG 155 -#define QWLAN_HAL_CFG_MWS_COEX_V10_CONFIG2 156 -#define QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF 157 -#define QWLAN_HAL_CFG_MWS_COEX_CONFIG1 158 -#define QWLAN_HAL_CFG_MWS_COEX_CONFIG2 159 -#define QWLAN_HAL_CFG_MWS_COEX_CONFIG3 160 -#define QWLAN_HAL_CFG_MWS_COEX_CONFIG4 161 -#define QWLAN_HAL_CFG_MWS_COEX_CONFIG5 162 -#define QWLAN_HAL_CFG_MWS_COEX_CONFIG6 163 -#define QWLAN_HAL_CFG_SAR_POWER_BACKOFF 164 -#define QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT 165 -#define QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN 166 -#define QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN 167 -#define QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN 168 -#define QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN 169 -#define QWLAN_HAL_CFG_RMCAST_FIXED_RATE 170 -#define QWLAN_HAL_CFG_MAX_PARAMS 171 - - -/* Total number of Integer CFGs. This is used while allocating the memory for TLV */ -#define QWLAN_HAL_CFG_INTEGER_PARAM 171 - -/*------------------------------------------------------------------------- - Configuration Parameter min, max, defaults --------------------------------------------------------------------------*/ - -/* QWLAN_HAL_CFG_STA_ID*/ -#define QWLAN_HAL_CFG_STA_ID_STADEF "000AF5898989" -#define QCOM_WLAN_CFG_STA_ID_LEN 6 - -/* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */ -#define QWLAN_HAL_CFG_CURRENT_TX_ANTENNA_STAMIN 1 -#define QWLAN_HAL_CFG_CURRENT_TX_ANTENNA_STAMAX 1 -#define QWLAN_HAL_CFG_CURRENT_TX_ANTENNA_STADEF 1 - -/* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */ -#define QWLAN_HAL_CFG_CURRENT_RX_ANTENNA_STAMIN 1 -#define QWLAN_HAL_CFG_CURRENT_RX_ANTENNA_STAMAX 2 -#define QWLAN_HAL_CFG_CURRENT_RX_ANTENNA_STADEF 1 - -/* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */ -#define QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE_STAMIN 0 -#define QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE_STAMAX 1 -#define QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE_STADEF 0 - -/* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */ -#define QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN_STAMIN 0 -#define QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN_STAMAX 65535 -#define QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN_STADEF 785 -#define QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN_OFF 0 -#define QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN_ON 1 -#define QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN_TX 2 -#define QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN_RX 3 -#define QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN_MASK 15 -#define QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN_CHAIN_0_OFFSET 0 -#define QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN_CHAIN_1_OFFSET 4 -#define QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN_CHAIN_2_OFFSET 8 - -/* QWLAN_HAL_CFG_CAL_PERIOD */ -#define QWLAN_HAL_CFG_CAL_PERIOD_STAMIN 2 -#define QWLAN_HAL_CFG_CAL_PERIOD_STAMAX 10 -#define QWLAN_HAL_CFG_CAL_PERIOD_STADEF 5 - -/* QWLAN_HAL_CFG_CAL_CONTROL */ -#define QWLAN_HAL_CFG_CAL_CONTROL_STAMIN 0 -#define QWLAN_HAL_CFG_CAL_CONTROL_STAMAX 1 -#define QWLAN_HAL_CFG_CAL_CONTROL_STADEF 0 -#define QWLAN_HAL_CFG_CAL_CONTROL_CAL_ON 0 -#define QWLAN_HAL_CFG_CAL_CONTROL_CAL_OFF 1 - -/* QWLAN_HAL_CFG_PROXIMITY */ -#define QWLAN_HAL_CFG_PROXIMITY_STAMIN 0 -#define QWLAN_HAL_CFG_PROXIMITY_STAMAX 1 -#define QWLAN_HAL_CFG_PROXIMITY_STADEF 0 -#define QWLAN_HAL_CFG_PROXIMITY_OFF 0 -#define QWLAN_HAL_CFG_PROXIMITY_ON 1 - -/* QWLAN_HAL_CFG_NETWORK_DENSITY */ -#define QWLAN_HAL_CFG_NETWORK_DENSITY_STAMIN 0 -#define QWLAN_HAL_CFG_NETWORK_DENSITY_STAMAX 3 -#define QWLAN_HAL_CFG_NETWORK_DENSITY_STADEF 3 -#define QWLAN_HAL_CFG_NETWORK_DENSITY_LOW 0 -#define QWLAN_HAL_CFG_NETWORK_DENSITY_MEDIUM 1 -#define QWLAN_HAL_CFG_NETWORK_DENSITY_HIGH 2 -#define QWLAN_HAL_CFG_NETWORK_DENSITY_ADAPTIVE 3 - -/* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */ -#define QWLAN_HAL_CFG_MAX_MEDIUM_TIME_STAMIN 0 -#define QWLAN_HAL_CFG_MAX_MEDIUM_TIME_STAMAX 65535 -#define QWLAN_HAL_CFG_MAX_MEDIUM_TIME_STADEF 1024 - -/* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */ -#define QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU_STAMIN 0 -#define QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU_STAMAX 65535 -#define QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU_STADEF 64 - -/* QWLAN_HAL_CFG_RTS_THRESHOLD */ -#define QWLAN_HAL_CFG_RTS_THRESHOLD_STAMIN 0 -#define QWLAN_HAL_CFG_RTS_THRESHOLD_STAMAX 2347 -#define QWLAN_HAL_CFG_RTS_THRESHOLD_STADEF 2347 - -/* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */ -#define QWLAN_HAL_CFG_SHORT_RETRY_LIMIT_STAMIN 0 -#define QWLAN_HAL_CFG_SHORT_RETRY_LIMIT_STAMAX 255 -#define QWLAN_HAL_CFG_SHORT_RETRY_LIMIT_STADEF 15 - -/* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */ -#define QWLAN_HAL_CFG_LONG_RETRY_LIMIT_STAMIN 0 -#define QWLAN_HAL_CFG_LONG_RETRY_LIMIT_STAMAX 255 -#define QWLAN_HAL_CFG_LONG_RETRY_LIMIT_STADEF 15 - -/* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */ -#define QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD_STAMIN 256 -#define QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD_STAMAX 8000 -#define QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD_STADEF 8000 - -/* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */ -#define QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO_STAMIN 0 -#define QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO_STAMAX 255 -#define QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO_STADEF 5 - -/* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */ -#define QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE_STAMIN 0 -#define QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE_STAMAX 255 -#define QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE_STADEF 10 - -/* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */ -#define QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO_STAMIN 0 -#define QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO_STAMAX 255 -#define QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO_STADEF 15 - -#define QWLAN_HAL_CFG_FIXED_RATE_AUTO 0 -#define QWLAN_HAL_CFG_FIXED_RATE_1MBPS 1 -#define QWLAN_HAL_CFG_FIXED_RATE_2MBPS 2 -#define QWLAN_HAL_CFG_FIXED_RATE_5_5MBPS 3 -#define QWLAN_HAL_CFG_FIXED_RATE_11MBPS 4 -#define QWLAN_HAL_CFG_FIXED_RATE_6MBPS 5 -#define QWLAN_HAL_CFG_FIXED_RATE_9MBPS 6 -#define QWLAN_HAL_CFG_FIXED_RATE_12MBPS 7 -#define QWLAN_HAL_CFG_FIXED_RATE_18MBPS 8 -#define QWLAN_HAL_CFG_FIXED_RATE_24MBPS 9 -#define QWLAN_HAL_CFG_FIXED_RATE_36MBPS 10 -#define QWLAN_HAL_CFG_FIXED_RATE_48MBPS 11 -#define QWLAN_HAL_CFG_FIXED_RATE_54MBPS 12 -#define QWLAN_HAL_CFG_FIXED_RATE_6_5MBPS_MCS0_20MHZ_SIMO 13 -#define QWLAN_HAL_CFG_FIXED_RATE_13MBPS_MCS1_20MHZ_SIMO 14 -#define QWLAN_HAL_CFG_FIXED_RATE_19_5MBPS_MCS2_20MHZ_SIMO 15 -#define QWLAN_HAL_CFG_FIXED_RATE_26MBPS_MCS3_20MHZ_SIMO 16 -#define QWLAN_HAL_CFG_FIXED_RATE_39MBPS_MCS4_20MHZ_SIMO 17 -#define QWLAN_HAL_CFG_FIXED_RATE_52MBPS_MCS5_20MHZ_SIMO 18 -#define QWLAN_HAL_CFG_FIXED_RATE_58_5MBPS_MCS6_20MHZ_SIMO 19 -#define QWLAN_HAL_CFG_FIXED_RATE_65MBPS_MCS7_20MHZ_SIMO 20 -#define QWLAN_HAL_CFG_FIXED_RATE_7_2MBPS_MCS0_20MHZ_SIMO_SGI 21 -#define QWLAN_HAL_CFG_FIXED_RATE_14_4MBPS_MCS1_20MHZ_SIMO_SGI 22 -#define QWLAN_HAL_CFG_FIXED_RATE_21_7MBPS_MCS2_20MHZ_SIMO_SGI 23 -#define QWLAN_HAL_CFG_FIXED_RATE_28_9MBPS_MCS3_20MHZ_SIMO_SGI 24 -#define QWLAN_HAL_CFG_FIXED_RATE_43_3MBPS_MCS4_20MHZ_SIMO_SGI 25 -#define QWLAN_HAL_CFG_FIXED_RATE_57_8MBPS_MCS5_20MHZ_SIMO_SGI 26 -#define QWLAN_HAL_CFG_FIXED_RATE_65MBPS_MCS6_20MHZ_SIMO_SGI 27 -#define QWLAN_HAL_CFG_FIXED_RATE_72_2MBPS_MCS7_20MHZ_SIMO_SGI 28 -#define QWLAN_HAL_CFG_FIXED_RATE_13_5MBPS_MCS0_40MHZ_SIMO 29 -#define QWLAN_HAL_CFG_FIXED_RATE_27MBPS_MCS1_40MHZ_SIMO 30 -#define QWLAN_HAL_CFG_FIXED_RATE_40_5MBPS_MCS2_40MHZ_SIMO 31 -#define QWLAN_HAL_CFG_FIXED_RATE_54MBPS_MCS3_40MHZ_SIMO 32 -#define QWLAN_HAL_CFG_FIXED_RATE_81MBPS_MCS4_40MHZ_SIMO 33 -#define QWLAN_HAL_CFG_FIXED_RATE_108MBPS_MCS5_40MHZ_SIMO 34 -#define QWLAN_HAL_CFG_FIXED_RATE_121_5MBPS_MCS6_40MHZ_SIMO 35 -#define QWLAN_HAL_CFG_FIXED_RATE_135MBPS_MCS7_40MHZ_SIMO 36 -#define QWLAN_HAL_CFG_FIXED_RATE_15MBPS_MCS0_40MHZ_SIMO_SGI 37 -#define QWLAN_HAL_CFG_FIXED_RATE_30MBPS_MCS1_40MHZ_SIMO_SGI 38 -#define QWLAN_HAL_CFG_FIXED_RATE_45MBPS_MCS2_40MHZ_SIMO_SGI 39 -#define QWLAN_HAL_CFG_FIXED_RATE_60MBPS_MCS3_40MHZ_SIMO_SGI 40 -#define QWLAN_HAL_CFG_FIXED_RATE_90MBPS_MCS4_40MHZ_SIMO_SGI 41 -#define QWLAN_HAL_CFG_FIXED_RATE_120MBPS_MCS5_40MHZ_SIMO_SGI 42 -#define QWLAN_HAL_CFG_FIXED_RATE_135MBPS_MCS6_40MHZ_SIMO_SGI 43 -#define QWLAN_HAL_CFG_FIXED_RATE_150MBPS_MCS7_40MHZ_SIMO_SGI 44 - -/* QWLAN_HAL_CFG_FIXED_RATE - * Follwing rates in user configuration are mapped to TPE rates - * Mapping is defined in the gHalUserFixedRateCfgToTpeRateTable - */ -#define QWLAN_HAL_CFG_FIXED_RATE_STAMIN 0 -#define QWLAN_HAL_CFG_FIXED_RATE_STAMAX 226 -#define QWLAN_HAL_CFG_FIXED_RATE_STADEF QWLAN_HAL_CFG_FIXED_RATE_AUTO - -/* QWLAN_HAL_CFG_RMCAST_FIXED_RATE - * Follwing rates in user configuration are mapped to TPE rates - * Mapping is defined in the gHalUserFixedRateCfgToTpeRateTable - */ -#define QWLAN_HAL_CFG_RMCAST_FIXED_RATE_STAMIN 0 -#define QWLAN_HAL_CFG_RMCAST_FIXED_RATE_STAMAX 226 -#define QWLAN_HAL_CFG_RMCAST_FIXED_RATE_STADEF QWLAN_HAL_CFG_FIXED_RATE_24MBPS - -/* QWLAN_HAL_CFG_RETRYRATE_POLICY */ -#define QWLAN_HAL_CFG_RETRYRATE_POLICY_STAMIN 0 -#define QWLAN_HAL_CFG_RETRYRATE_POLICY_STAMAX 255 -#define QWLAN_HAL_CFG_RETRYRATE_POLICY_STADEF 4 -#define QWLAN_HAL_CFG_RETRYRATE_POLICY_MIN_SUPPORTED 0 -#define QWLAN_HAL_CFG_RETRYRATE_POLICY_PRIMARY 1 -#define QWLAN_HAL_CFG_RETRYRATE_POLICY_RESERVED 2 -#define QWLAN_HAL_CFG_RETRYRATE_POLICY_CLOSEST 3 -#define QWLAN_HAL_CFG_RETRYRATE_POLICY_AUTOSELECT 4 -#define QWLAN_HAL_CFG_RETRYRATE_POLICY_MAX 5 - -/* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */ -#define QWLAN_HAL_CFG_RETRYRATE_SECONDARY_STAMIN 0 -#define QWLAN_HAL_CFG_RETRYRATE_SECONDARY_STAMAX 255 -#define QWLAN_HAL_CFG_RETRYRATE_SECONDARY_STADEF 0 - -/* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */ -#define QWLAN_HAL_CFG_RETRYRATE_TERTIARY_STAMIN 0 -#define QWLAN_HAL_CFG_RETRYRATE_TERTIARY_STAMAX 255 -#define QWLAN_HAL_CFG_RETRYRATE_TERTIARY_STADEF 0 - -/* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */ -#define QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION_STAMIN 0 -#define QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION_STAMAX 5 -#define QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION_STADEF 5 -#define QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION_DISABLE 0 -#define QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION_CTS 1 -#define QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION_RTS 2 -#define QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION_DUAL_CTS 3 -#define QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION_RTS_ALWAYS 4 -#define QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION_AUTO 5 - -/* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */ -#define QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ_STAMIN 0 -#define QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ_STAMAX QWLAN_HAL_CFG_FIXED_RATE_STAMAX -#define QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ_STADEF QWLAN_HAL_CFG_FIXED_RATE_1MBPS - -/* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */ -#define QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ_STAMIN 0 -#define QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ_STAMAX QWLAN_HAL_CFG_FIXED_RATE_STAMAX -#define QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ_STADEF QWLAN_HAL_CFG_FIXED_RATE_6MBPS - -/* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */ -#define QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ_STAMIN 0 -#define QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ_STAMAX QWLAN_HAL_CFG_FIXED_RATE_STAMAX -#define QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ_STADEF QWLAN_HAL_CFG_FIXED_RATE_1MBPS - -/* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */ -#define QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ_STAMIN 0 -#define QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ_STAMAX QWLAN_HAL_CFG_FIXED_RATE_STAMAX -#define QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ_STADEF QWLAN_HAL_CFG_FIXED_RATE_6MBPS - -/* QWLAN_HAL_CFG_MAX_BA_SESSIONS */ -#define QWLAN_HAL_CFG_MAX_BA_SESSIONS_STAMIN 0 -#define QWLAN_HAL_CFG_MAX_BA_SESSIONS_STAMAX 64 -#define QWLAN_HAL_CFG_MAX_BA_SESSIONS_STADEF 40 - -/* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */ -#define QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT_STAMIN 1 -#define QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT_STAMAX 255 -#define QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT_STADEF 20 - -/* QWLAN_HAL_CFG_PS_TX_INACTIVITY_TIMEOUT */ -#define QWLAN_HAL_CFG_PS_TX_INACTIVITY_TIMEOUT_STAMIN 0 -#define QWLAN_HAL_CFG_PS_TX_INACTIVITY_TIMEOUT_STAMAX 255 -#define QWLAN_HAL_CFG_PS_TX_INACTIVITY_TIMEOUT_STADEF 300 - -/* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */ -#define QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER_STAMIN 0 -#define QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER_STAMAX 1 -#define QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER_STADEF 1 - -/* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */ -#define QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR_STAMIN 0 -#define QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR_STAMAX 1 -#define QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR_STADEF 1 - -/* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */ -#define QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE_STAMIN 1 -#define QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE_STAMAX 20 -#define QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE_STADEF 20 - -/* QWLAN_HAL_CFG_STATS_PERIOD */ -#define QWLAN_HAL_CFG_STATS_PERIOD_STAMIN 1 -#define QWLAN_HAL_CFG_STATS_PERIOD_STAMAX 10 -#define QWLAN_HAL_CFG_STATS_PERIOD_STADEF 10 - -/* QWLAN_HAL_CFG_CFP_MAX_DURATION */ -#define QWLAN_HAL_CFG_CFP_MAX_DURATION_STAMIN 0 -#define QWLAN_HAL_CFG_CFP_MAX_DURATION_STAMAX 65535 -#define QWLAN_HAL_CFG_CFP_MAX_DURATION_STADEF 30000 - -/* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */ -#define QWLAN_HAL_CFG_FRAME_TRANS_ENABLED_STAMIN 0 -#define QWLAN_HAL_CFG_FRAME_TRANS_ENABLED_STAMAX 1 -#define QWLAN_HAL_CFG_FRAME_TRANS_ENABLED_STADEF 0 - -/* QWLAN_HAL_CFG_DTIM_PERIOD */ -#define QWLAN_HAL_CFG_DTIM_PERIOD_STAMIN 0 -#define QWLAN_HAL_CFG_DTIM_PERIOD_STAMAX 65535 -#define QWLAN_HAL_CFG_DTIM_PERIOD_STADEF 1 - -/* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */ -#define QWLAN_HAL_CFG_BA_THRESHOLD_HIGH_STAMIN 0 -#define QWLAN_HAL_CFG_BA_THRESHOLD_HIGH_STAMAX 65535 -#define QWLAN_HAL_CFG_BA_THRESHOLD_HIGH_STADEF 1 - -/* QWLAN_HAL_CFG_MAX_BA_BUFFERS */ -#define QWLAN_HAL_CFG_MAX_BA_BUFFERS_STAMIN 0 -#define QWLAN_HAL_CFG_MAX_BA_BUFFERS_STAMAX 2560 -#define QWLAN_HAL_CFG_MAX_BA_BUFFERS_STADEF 2560 - - - -/* ACM, AIFSN, [CWmin, CWmax, TxOp]-11A/11B/11G - * Cwmin and Cwmax are two bytes each, MSB first. So Cwmax of [03 FF] is - * equivalent to 0x03ff = 1023*/ -#define QWLAN_HAL_CFG_EDCA_PROFILE_ACM_IDX 0 /* byte[0] */ -#define QWLAN_HAL_CFG_EDCA_PROFILE_AIFSN_IDX 1 /* byte[1] */ -#define QWLAN_HAL_CFG_EDCA_PROFILE_CWMINA_IDX 2 /* byte[2] & byte [3] */ -#define QWLAN_HAL_CFG_EDCA_PROFILE_CWMAXA_IDX 4 /* byte[4] & byte [5] */ -#define QWLAN_HAL_CFG_EDCA_PROFILE_TXOPA_IDX 6 /* byte[6] */ -#define QWLAN_HAL_CFG_EDCA_PROFILE_CWMINB_IDX 7 /* byte[7] & byte [8] */ -#define QWLAN_HAL_CFG_EDCA_PROFILE_CWMAXB_IDX 9 /* byte[9] & byte [10] */ -#define QWLAN_HAL_CFG_EDCA_PROFILE_TXOPB_IDX 11 /* byte[11]*/ -#define QWLAN_HAL_CFG_EDCA_PROFILE_CWMING_IDX 12 /* byte[12] & byte [13] */ -#define QWLAN_HAL_CFG_EDCA_PROFILE_CWMAXG_IDX 14 /* byte[14] & byte [15] */ -#define QWLAN_HAL_CFG_EDCA_PROFILE_TXOPG_IDX 16 /* byte[16]*/ -#define QWLAN_HAL_CFG_EDCA_PARAM_MAX_LEN 20 - -/* QWLAN_HAL_CFG_EDCA_WMM_ACBK */ -#define QWLAN_HAL_CFG_EDCA_WMM_ACBK_DEFAULT "0007000F03FF00001F03FF00000F03FF00" - -/* QWLAN_HAL_CFG_EDCA_WMM_ACBE */ -#define QWLAN_HAL_CFG_EDCA_WMM_ACBE_DEFAULT "0003000F03FF00001F03FF00000F03FF00" - -/* QWLAN_HAL_CFG_EDCA_WMM_ACVI */ -#define QWLAN_HAL_CFG_EDCA_WMM_ACVI_DEFAULT "00020007000F5E000F001FBC0007000F5E" - -/* QWLAN_HAL_CFG_EDCA_WMM_ACVO */ -#define QWLAN_HAL_CFG_EDCA_WMM_ACVO_DEFAULT "0002000300072F0007000F66000300072F" - - -/* QWLAN_HAL_CFG_RPE_POLLING_THRESHOLD */ -#define QWLAN_CFG_RPE_POLLING_THRESHOLD_STAMIN 0 -#define QWLAN_CFG_RPE_POLLING_THRESHOLD_STAMAX 65535 -#define QWLAN_CFG_RPE_POLLING_THRESHOLD_STADEF 30 - -/* QWLAN_HAL_CFG_RPE_AGING_THRESHOLD_FOR_AC0_REG */ -#define QWLAN_CFG_RPE_AGING_THRESHOLD_FOR_AC0_REG_STAMIN 0 -#define QWLAN_CFG_RPE_AGING_THRESHOLD_FOR_AC0_REG_STAMAX 65535 -#define QWLAN_CFG_RPE_AGING_THRESHOLD_FOR_AC0_REG_STADEF 30 - -/* QWLAN_HAL_CFG_RPE_AGING_THRESHOLD_FOR_AC1_REG */ -#define QWLAN_CFG_RPE_AGING_THRESHOLD_FOR_AC1_REG_STAMIN 0 -#define QWLAN_CFG_RPE_AGING_THRESHOLD_FOR_AC1_REG_STAMAX 65535 -#define QWLAN_CFG_RPE_AGING_THRESHOLD_FOR_AC1_REG_STADEF 30 - -/* QWLAN_HAL_CFG_RPE_AGING_THRESHOLD_FOR_AC2_REG */ -#define QWLAN_CFG_RPE_AGING_THRESHOLD_FOR_AC2_REG_STAMIN 0 -#define QWLAN_CFG_RPE_AGING_THRESHOLD_FOR_AC2_REG_STAMAX 65535 -#define QWLAN_CFG_RPE_AGING_THRESHOLD_FOR_AC2_REG_STADEF 30 - -/* QWLAN_HAL_CFG_RPE_AGING_THRESHOLD_FOR_AC3_REG */ -#define QWLAN_CFG_RPE_AGING_THRESHOLD_FOR_AC3_REG_STAMIN 0 -#define QWLAN_CFG_RPE_AGING_THRESHOLD_FOR_AC3_REG_STAMAX 65535 -#define QWLAN_CFG_RPE_AGING_THRESHOLD_FOR_AC3_REG_STADEF 30 - -/* QWLAN_HAL_CFG_NO_OF_ONCHIP_REORDER_SESSIONS */ -#define QWLAN_CFG_NO_OF_ONCHIP_REORDER_SESSIONS_STAMIN 0 -#define QWLAN_CFG_NO_OF_ONCHIP_REORDER_SESSIONS_STAMAX 2 -#define QWLAN_CFG_NO_OF_ONCHIP_REORDER_SESSIONS_STADEF 1 - -#define QWLAN_HAL_CFG_PS_LISTEN_INTERVAL_STAMIN 0 -#define QWLAN_HAL_CFG_PS_LISTEN_INTERVAL_STAMAX 65535 -#define QWLAN_HAL_CFG_PS_LISTEN_INTERVAL_STADEF 1 - -#define QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD_STAMIN 0 -#define QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD_STAMAX 65535 -#define QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD_STADEF 40 - -#define QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER_STAMIN 0 -#define QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER_STAMAX 255 -#define QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER_STADEF 10 - -#define QWLAN_HAL_CFG_PS_MAX_PS_POLL_STAMIN 0 -#define QWLAN_HAL_CFG_PS_MAX_PS_POLL_STAMAX 255 -#define QWLAN_HAL_CFG_PS_MAX_PS_POLL_STADEF 0 - -#define QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD_STAMIN 0 -#define QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD_STAMAX 10 -#define QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD_STADEF 10 - -#define QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD_STAMIN 0 -#define QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD_STAMAX 255 -#define QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD_STADEF 20 - -#define QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE_STAMIN 0 -#define QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE_STAMAX 1 -#define QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE_STADEF 0 - -#define QWLAN_HAL_CFG_PS_IGNORE_DTIM_STAMIN 0 -#define QWLAN_HAL_CFG_PS_IGNORE_DTIM_STAMAX 1 -#define QWLAN_HAL_CFG_PS_IGNORE_DTIM_STADEF 0 - -#define QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM_STAMIN 0 -#define QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM_STAMAX 1 -#define QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM_STADEF 0 - -#define QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE_STAMIN 0 -#define QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE_STAMAX 255 -#define QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE_STADEF 0 - -#define QWLAN_HAL_CFG_PS_NULLDATA_AP_RESP_TIMEOUT_STAMIN 0 -#define QWLAN_HAL_CFG_PS_NULLDATA_AP_RESP_TIMEOUT_STAMAX 80 -#define QWLAN_HAL_CFG_PS_NULLDATA_AP_RESP_TIMEOUT_STADEF 0 - -/* QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE */ -#define QWLAN_CFG_TX_PWR_CTRL_ENABLE_STAMIN 0 -#define QWLAN_CFG_TX_PWR_CTRL_ENABLE_STAMAX 1 -#define QWLAN_CFG_TX_PWR_CTRL_ENABLE_STADEF 1 - -#define QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN_STAMIN 0 -#define QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN_STAMAX 1 -#define QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN_STADEF 0 - -#define QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_STAMIN 0 -#define QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_STAMAX 7 -#define QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_STADEF 3 - -#define QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS_STAMIN 5 -#define QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS_STAMAX 255 -#define QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS_STADEF 10 - -#define QWLAN_HAL_CFG_TELE_BCN_MAX_LI_STAMIN 0 -#define QWLAN_HAL_CFG_TELE_BCN_MAX_LI_STAMAX 7 -#define QWLAN_HAL_CFG_TELE_BCN_MAX_LI_STADEF 5 - -#define QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS_STAMIN 5 -#define QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS_STAMAX 255 -#define QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS_STADEF 15 - -#define QWLAN_HAL_CFG_MCAST_BCAST_FILTER_SETTING_STAMIN 0 -#define QWLAN_HAL_CFG_MCAST_BCAST_FILTER_SETTING_STAMAX 3 -#define QWLAN_HAL_CFG_MCAST_BCAST_FILTER_SETTING_STADEF 0 - -#define QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL_STAMIN 1 -#define QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL_STAMAX 255 -#define QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL_STADEF 5 - -/*Values to be added in hexadecimal*/ -/* QWLAN_HAL_CFG_VALID_RADAR_LIST */ -#define QWLAN_HAL_CFG_VALID_RADAR_CHANNEL_LIST_DEFAULT "36" -#define QWLAN_HAL_CFG_RADAR_CHANNEL_LIST_LEN 20 - -/* QWLAN_HAL_CFG_TX_POWER_24_20 */ -#define QWLAN_WLAN_TX_POWER_24_20_DEFAULT 299 -#define QWLAN_WLAN_TX_POWER_24_20_MIN 299 -#define QWLAN_WLAN_TX_POWER_24_20_MAX 299 - -/* QWLAN_HAL_CFG_TX_POWER_24_40 */ -#define QWLAN_WLAN_TX_POWER_24_40_DEFAULT 300 -#define QWLAN_WLAN_TX_POWER_24_40_MIN 299 -#define QWLAN_WLAN_TX_POWER_24_40_MAX 299 - -/* QWLAN_HAL_CFG_TX_POWER_50_20 */ -#define QWLAN_WLAN_TX_POWER_50_20_DEFAULT 301 -#define QWLAN_WLAN_TX_POWER_50_20_MIN 299 -#define QWLAN_WLAN_TX_POWER_50_20_MAX 299 - -/* QWLAN_HAL_CFG_TX_POWER_50_40 */ -#define QWLAN_WLAN_TX_POWER_50_40_DEFAULT 302 -#define QWLAN_WLAN_TX_POWER_50_40_MIN 299 -#define QWLAN_WLAN_TX_POWER_50_40_MAX 299 - -/* QCOM_WLAN_CFG_MAX_TX_POWER_2_4 */ -#define QCOM_WLAN_CFG_MAX_TX_POWER_2_4_LEN 128 -/* byte[0] = 0x01 = First Channel; byte[1] = 0x0E = 14 = MaxChannels; byte[2] = 0x14 = 20 = Tx Power (dBm) */ -#define QCOM_WLAN_CFG_MAX_TX_POWER_2_4_DEFAULT "010E14" - -/* QCOM_WLAN_CFG_MAX_TX_POWER_5 */ -#define QCOM_WLAN_CFG_MAX_TX_POWER_5_LEN 128 -/* byte[0] = 0x24 = 36 = First Channel; byte[1] = 0x82 = 130 = MaxChannels; byte[2] = 0x14 = 20 = Tx Power (dBm) */ -#define QCOM_WLAN_CFG_MAX_TX_POWER_5_DEFAULT "248214" - - -#define QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD_STAMIN 0 -#define QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD_STAMAX 65535 -#define QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD_STADEF 0 - -#define QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP_MIN 0 -#define QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP_MAX 1 -#define QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP_DEF 0 - -/* QWLAN_HAL_CFG_BTC_EXECUTION_MODE */ -#define QWLAN_HAL_CFG_BTC_EXECUTION_MODE_MIN 0 -#define QWLAN_HAL_CFG_BTC_EXECUTION_MODE_MAX 5 -#define QWLAN_HAL_CFG_BTC_EXECUTION_MODE_DEF 0 - -/* QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */ -#define QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK_MIN 0 -#define QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK_MAX 255 -#define QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK_DEF 0 - -/* QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */ -#define QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS_MIN 0 -#define QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS_MAX 255 -#define QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS_DEF 15 - -/* QWLAN_HAL_CFG_WCNSS_API_VERSION */ -#define QWLAN_HAL_CFG_WCNSS_API_VERSION_MIN 0 /* equivalent to 0.0.0.0 */ -#define QWLAN_HAL_CFG_WCNSS_API_VERSION_MAX 4294967295U /* equivalent to 255.255.255.255 */ -#define QWLAN_HAL_CFG_WCNSS_API_VERSION_DEF 0 /* equivalent to 0.0.0.0 */ - -/* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */ -#define QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT_MIN 1 -#define QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT_MAX 255 -#define QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT_DEF 20 - -/* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */ -#define QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT_MIN 1 -#define QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT_MAX 255 -#define QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT_DEF 20 - -/* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */ -#define QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST_MIN 0 -#define QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST_MAX 1 -#define QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST_DEF 0 - -/* QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */ -#define QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT_MIN 5000 -#define QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT_MAX 500000 -#define QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT_DEF 120000 - -/* QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */ -#define QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT_MIN 5000 -#define QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT_MAX 500000 -#define QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT_DEF 10000 - -/* QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */ -#define QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT_MIN 5000 -#define QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT_MAX 500000 -#define QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT_DEF 10000 - -/* QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */ -#define QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT_MIN 5000 -#define QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT_MAX 500000 -#define QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT_DEF 10000 - -/* QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */ -#define QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN_MIN 0 -#define QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN_MAX 500000 -#define QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN_DEF 30000 - -/* QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */ -#define QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN_MIN 0 -#define QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN_MAX 500000 -#define QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN_DEF 0 - -/* QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */ -#define QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN_MIN 0 -#define QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN_MAX 500000 -#define QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN_DEF 0 - -/* QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */ -#define QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN_MIN 0 -#define QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN_MAX 500000 -#define QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN_DEF 0 - -/* QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */ -#define QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT_MIN 25000 -#define QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT_MAX 500000 -#define QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT_DEF 250000 - -/* QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */ -#define QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN_MIN 15000 -#define QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN_MAX 500000 -#define QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN_DEF 45000 - -/* QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */ -#define QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC_MIN 0 -#define QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC_MAX 100 -#define QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC_DEF 1 - -/* QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */ -#define QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP_MIN 0 -#define QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP_MAX 1 -#define QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP_DEF 1 - -/* QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */ -#define QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO_MIN 0 -#define QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO_MAX 1 -#define QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO_DEF 0 - -/* QWLAN_HAL_CFG_ENABLE_UNICAST_FILTER */ -#define QWLAN_HAL_CFG_ENABLE_UNICAST_FILTER_MIN 0 -#define QWLAN_HAL_CFG_ENABLE_UNICAST_FILTER_MAX 1 -#define QWLAN_HAL_CFG_ENABLE_UNICAST_FILTER_DEF 0 - -/* QWLAN_HAL_CFG_MAX_ASSOC_LIMIT */ -#define QWLAN_HAL_CFG_MAX_ASSOC_LIMIT_MIN 10 -#define QWLAN_HAL_CFG_MAX_ASSOC_LIMIT_MAX 32 -#define QWLAN_HAL_CFG_MAX_ASSOC_LIMIT_DEF 10 - -/* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */ -#define QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION_MIN 0 -#define QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION_MAX 1 -#define QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION_DEF 0 - -/* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */ -#define QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER_MIN 0 -#define QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER_MAX 1 -#define QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER_DEF 0 - -/* QWLAN_HAL_CFG_ENABLE_DETECT_PS_SUPPORT */ -#define QWLAN_HAL_CFG_ENABLE_DETECT_PS_SUPPORT_MIN 0 -#define QWLAN_HAL_CFG_ENABLE_DETECT_PS_SUPPORT_MAX 1 -#define QWLAN_HAL_CFG_ENABLE_DETECT_PS_SUPPORT_DEF 0 - -/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */ -#define QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT_MIN 3 -#define QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT_MAX 30 -#define QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT_DEF 10 - -/* QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT */ -#define QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT_MIN 3 -#define QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT_MAX 30 -#define QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT_DEF 10 - -/*QWLAN_HAL_CFG_BTC_DWELL_TIME_MULTIPLIER*/ -/*This value is multiplied to ChannelDwellTime - *i.e If value is 300 then ChannelDwellTime is (3*ChannelDwelltime)*/ -#define QWLAN_HAL_CFG_BTC_DWELL_TIME_MULTIPLIER_MIN 0 -#define QWLAN_HAL_CFG_BTC_DWELL_TIME_MULTIPLIER_MAX 300 -#define QWLAN_HAL_CFG_BTC_DWELL_TIME_MULTIPLIER_DEF 300 - -/* QWLAN_HAL_CFG_ENABLE_TDLS_OXYGEN_MODE */ -#define QWLAN_HAL_CFG_ENABLE_TDLS_OXYGEN_MODE_MIN 0 -#define QWLAN_HAL_CFG_ENABLE_TDLS_OXYGEN_MODE_MAX 1 -#define QWLAN_HAL_CFG_ENABLE_TDLS_OXYGEN_MODE_DEF 0 - -/* QWLAN_HAL_CFG_ENABLE_NAT_KEEP_ALIVE_FILTER */ -#define QWLAN_HAL_CFG_ENABLE_NAT_KEEP_ALIVE_FILTER_MIN 0 -#define QWLAN_HAL_CFG_ENABLE_NAT_KEEP_ALIVE_FILTER_MAX 1 -#define QWLAN_HAL_CFG_ENABLE_NAT_KEEP_ALIVE_FILTER_DEF 0 - -/* QWLAN_HAL_CFG_ENABLE_SAP_OBSS_PROT */ -#define QWLAN_HAL_CFG_ENABLE_SAP_OBSS_PROT_MIN 0 -#define QWLAN_HAL_CFG_ENABLE_SAP_OBSS_PROT_MAX 1 -#define QWLAN_HAL_CFG_ENABLE_SAP_OBSS_PROT_DEF 0 - -/* QWLAN_HAL_CFG_PSPOLL_DATA_RECEP_TIMEOUT */ -#define QWLAN_HAL_CFG_PSPOLL_DATA_RECEP_TIMEOUT_STAMIN 1 -#define QWLAN_HAL_CFG_PSPOLL_DATA_RECEP_TIMEOUT_STAMAX 255 -#define QWLAN_HAL_CFG_PSPOLL_DATA_RECEP_TIMEOUT_STADEF 20 - -/* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */ -#define QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE_MIN 0 -#define QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE_MAX 1 -#define QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE_DEF 0 - -/* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */ -#define QWLAN_HAL_CFG_TDLS_PUAPSD_MASK_MIN 0 -#define QWLAN_HAL_CFG_TDLS_PUAPSD_MASK_MAX 0xf -#define QWLAN_HAL_CFG_TDLS_PUAPSD_MASK_DEF 0 - -/* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */ -#define QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME_MIN 0 -#define QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME_MAX 10 -#define QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME_DEF 0 - -/* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */ -#define QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP_MIN 10 -#define QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP_MAX 20 -#define QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP_DEF 10 - -#define QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN_MIN 0 -#define QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN_MAX 250000 -#define QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN_DEF 60000 - -#define QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN_MIN 0 -#define QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN_MAX 250000 -#define QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN_DEF 90000 - -#define QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN_MIN 0 -#define QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN_MAX 250000 -#define QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN_DEF 60000 - -#define QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN_MIN 0 -#define QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN_MAX 250000 -#define QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN_DEF 90000 - -/* QWLAN_HAL_CFG_ANTENNA_DIVERSITY */ -#define QWLAN_HAL_CFG_ANTENNA_DIVERSITY_DEF 0 -#define QWLAN_HAL_CFG_ANTENNA_DIVERSITY_MIN 0 -#define QWLAN_HAL_CFG_ANTENNA_DIVERSITY_MAX 3 - -#define QWLAN_HAL_CFG_ATH_DEF 0 -#define QWLAN_HAL_CFG_ATH_MIN 0 -#define QWLAN_HAL_CFG_ATH_MAX 1 - -/* QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR */ -#define QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR_DEF 0 -#define QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR_MIN 0 -#define QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR_MAX 9 - -/* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_RX_DRAIN_FEATURE */ -#define QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE_MIN 0 -#define QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE_MAX 1 -#define QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE_DEF 1 - -/* QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE */ -#define QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE_MIN 0 -#define QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE_MAX 1 -#define QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE_DEF 0 - -/* QWLAN_HAL_CFG_MWS_COEX_XXXX */ -#define QWLAN_HAL_CFG_MWS_COEX_DEF 0 -#define QWLAN_HAL_CFG_MWS_COEX_MIN 0 -#define QWLAN_HAL_CFG_MWS_COEX_MAX 0xFFFFFFFF -#define QWLAN_HAL_CFG_MWS_COEX_MAX_VICTIM 10 -#define QWLAN_HAL_CFG_MWS_COEX_MAX_CONFIG 6 - -/* QWLAN_HAL_CFG_SAR_POWER_BACKOFF */ -#define QWLAN_HAL_CFG_SAR_POWER_BACKOFF_DEF 13 -#define QWLAN_HAL_CFG_SAR_POWER_BACKOFF_MIN 1 -#define QWLAN_HAL_CFG_SAR_POWER_BACKOFF_MAX 21 - -#endif //__WLAN_HAL_CFG_H__ - - diff --git a/wcnss/riva/inc/wlan_hal_msg.h b/wcnss/riva/inc/wlan_hal_msg.h deleted file mode 100644 index cf1165aa8806..000000000000 --- a/wcnss/riva/inc/wlan_hal_msg.h +++ /dev/null @@ -1,7083 +0,0 @@ -/* - * Copyright (c) 2013, The Linux Foundation. All rights reserved. - * - * Previously licensed under the ISC license by Qualcomm Atheros, Inc. - * - * - * Permission to use, copy, modify, and/or distribute this software for - * any purpose with or without fee is hereby granted, provided that the - * above copyright notice and this permission notice appear in all - * copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL - * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE - * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL - * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -/* - * This file was originally distributed by Qualcomm Atheros, Inc. - * under proprietary terms before Copyright ownership was assigned - * to the Linux Foundation. - */ - -/*========================================================================== - * - * @file: wlan_hal_msg.h - * - * @brief: Exports and types for messages sent to HAL from WDI - * - * @author: Kumar Anand - * - * Copyright (C) 2010, Qualcomm Technologies, Inc. - * All rights reserved. - * - *=========================================================================*/ - -#ifndef _WLAN_HAL_MSG_H_ -#define _WLAN_HAL_MSG_H_ - -#include "halLegacyPalTypes.h" -#include "halCompiler.h" -#include "wlan_qct_dev_defs.h" -#include "wlan_nv.h" - -/*--------------------------------------------------------------------------- - API VERSIONING INFORMATION - - The RIVA API is versioned as MAJOR.MINOR.VERSION.REVISION - The MAJOR is incremented for major product/architecture changes - (and then MINOR/VERSION/REVISION are zeroed) - The MINOR is incremented for minor product/architecture changes - (and then VERSION/REVISION are zeroed) - The VERSION is incremented if a significant API change occurs - (and then REVISION is zeroed) - The REVISION is incremented if an insignificant API change occurs - or if a new API is added - All values are in the range 0..255 (ie they are 8-bit values) - ---------------------------------------------------------------------------*/ -#define WLAN_HAL_VER_MAJOR 1 -#define WLAN_HAL_VER_MINOR 5 -#define WLAN_HAL_VER_VERSION 1 -#define WLAN_HAL_VER_REVISION 2 - -/*--------------------------------------------------------------------------- - Commom Type definitons - ---------------------------------------------------------------------------*/ - -//This is to force compiler to use the maximum of an int ( 4 bytes ) -#define WLAN_HAL_MAX_ENUM_SIZE 0x7FFFFFFF -#define WLAN_HAL_MSG_TYPE_MAX_ENUM_SIZE 0x7FFF - -//Max no. of transmit categories -#define STACFG_MAX_TC 8 - -//The maximum value of access category -#define WLAN_HAL_MAX_AC 4 - -typedef tANI_U8 tSirMacAddr[6]; -typedef tANI_U8 tHalIpv4Addr[4]; - -#define HAL_MAC_ADDR_LEN 6 -#define HAL_IPV4_ADDR_LEN 4 - -#define WALN_HAL_STA_INVALID_IDX 0xFF -#define WLAN_HAL_BSS_INVALID_IDX 0xFF - -//Default Beacon template size -#define BEACON_TEMPLATE_SIZE 0x180 - - -//Max Tx Data Rate samples -#define MAX_TX_RATE_SAMPLES 10 -//Max Beacon Rssi samples -#define MAX_BCN_RSSI_SAMPLES 10 - -//Param Change Bitmap sent to HAL -#define PARAM_BCN_INTERVAL_CHANGED (1 << 0) -#define PARAM_SHORT_PREAMBLE_CHANGED (1 << 1) -#define PARAM_SHORT_SLOT_TIME_CHANGED (1 << 2) -#define PARAM_llACOEXIST_CHANGED (1 << 3) -#define PARAM_llBCOEXIST_CHANGED (1 << 4) -#define PARAM_llGCOEXIST_CHANGED (1 << 5) -#define PARAM_HT20MHZCOEXIST_CHANGED (1<<6) -#define PARAM_NON_GF_DEVICES_PRESENT_CHANGED (1<<7) -#define PARAM_RIFS_MODE_CHANGED (1<<8) -#define PARAM_LSIG_TXOP_FULL_SUPPORT_CHANGED (1<<9) -#define PARAM_OBSS_MODE_CHANGED (1<<10) -#define PARAM_BEACON_UPDATE_MASK (PARAM_BCN_INTERVAL_CHANGED|PARAM_SHORT_PREAMBLE_CHANGED|PARAM_SHORT_SLOT_TIME_CHANGED|PARAM_llACOEXIST_CHANGED |PARAM_llBCOEXIST_CHANGED|\ - PARAM_llGCOEXIST_CHANGED|PARAM_HT20MHZCOEXIST_CHANGED|PARAM_NON_GF_DEVICES_PRESENT_CHANGED|PARAM_RIFS_MODE_CHANGED|PARAM_LSIG_TXOP_FULL_SUPPORT_CHANGED| PARAM_OBSS_MODE_CHANGED) - -/*Dump command response Buffer size*/ -#define DUMPCMD_RSP_BUFFER 500 - -/*Version string max length (including NUL) */ -#define WLAN_HAL_VERSION_LENGTH 64 - -#define WLAN_HAL_ROAM_SCAN_MAX_PROBE_SIZE 450 -#define WLAN_HAL_ROAM_SCAN_MAX_CHANNELS NUM_RF_CHANNELS -#define WLAN_HAL_ROAM_SCAN_RESERVED_BYTES 57 - -/* Message types for messages exchanged between WDI and HAL */ -typedef enum -{ - //Init/De-Init - WLAN_HAL_START_REQ = 0, - WLAN_HAL_START_RSP = 1, - WLAN_HAL_STOP_REQ = 2, - WLAN_HAL_STOP_RSP = 3, - - //Scan - WLAN_HAL_INIT_SCAN_REQ = 4, - WLAN_HAL_INIT_SCAN_RSP = 5, - WLAN_HAL_START_SCAN_REQ = 6, - WLAN_HAL_START_SCAN_RSP = 7 , - WLAN_HAL_END_SCAN_REQ = 8, - WLAN_HAL_END_SCAN_RSP = 9, - WLAN_HAL_FINISH_SCAN_REQ = 10, - WLAN_HAL_FINISH_SCAN_RSP = 11, - - // HW STA configuration/deconfiguration - WLAN_HAL_CONFIG_STA_REQ = 12, - WLAN_HAL_CONFIG_STA_RSP = 13, - WLAN_HAL_DELETE_STA_REQ = 14, - WLAN_HAL_DELETE_STA_RSP = 15, - WLAN_HAL_CONFIG_BSS_REQ = 16, - WLAN_HAL_CONFIG_BSS_RSP = 17, - WLAN_HAL_DELETE_BSS_REQ = 18, - WLAN_HAL_DELETE_BSS_RSP = 19, - - //Infra STA asscoiation - WLAN_HAL_JOIN_REQ = 20, - WLAN_HAL_JOIN_RSP = 21, - WLAN_HAL_POST_ASSOC_REQ = 22, - WLAN_HAL_POST_ASSOC_RSP = 23, - - //Security - WLAN_HAL_SET_BSSKEY_REQ = 24, - WLAN_HAL_SET_BSSKEY_RSP = 25, - WLAN_HAL_SET_STAKEY_REQ = 26, - WLAN_HAL_SET_STAKEY_RSP = 27, - WLAN_HAL_RMV_BSSKEY_REQ = 28, - WLAN_HAL_RMV_BSSKEY_RSP = 29, - WLAN_HAL_RMV_STAKEY_REQ = 30, - WLAN_HAL_RMV_STAKEY_RSP = 31, - - //Qos Related - WLAN_HAL_ADD_TS_REQ = 32, - WLAN_HAL_ADD_TS_RSP = 33, - WLAN_HAL_DEL_TS_REQ = 34, - WLAN_HAL_DEL_TS_RSP = 35, - WLAN_HAL_UPD_EDCA_PARAMS_REQ = 36, - WLAN_HAL_UPD_EDCA_PARAMS_RSP = 37, - WLAN_HAL_ADD_BA_REQ = 38, - WLAN_HAL_ADD_BA_RSP = 39, - WLAN_HAL_DEL_BA_REQ = 40, - WLAN_HAL_DEL_BA_RSP = 41, - - WLAN_HAL_CH_SWITCH_REQ = 42, - WLAN_HAL_CH_SWITCH_RSP = 43, - WLAN_HAL_SET_LINK_ST_REQ = 44, - WLAN_HAL_SET_LINK_ST_RSP = 45, - WLAN_HAL_GET_STATS_REQ = 46, - WLAN_HAL_GET_STATS_RSP = 47, - WLAN_HAL_UPDATE_CFG_REQ = 48, - WLAN_HAL_UPDATE_CFG_RSP = 49, - - WLAN_HAL_MISSED_BEACON_IND = 50, - WLAN_HAL_UNKNOWN_ADDR2_FRAME_RX_IND = 51, - WLAN_HAL_MIC_FAILURE_IND = 52, - WLAN_HAL_FATAL_ERROR_IND = 53, - WLAN_HAL_SET_KEYDONE_MSG = 54, - - //NV Interface - WLAN_HAL_DOWNLOAD_NV_REQ = 55, - WLAN_HAL_DOWNLOAD_NV_RSP = 56, - - WLAN_HAL_ADD_BA_SESSION_REQ = 57, - WLAN_HAL_ADD_BA_SESSION_RSP = 58, - WLAN_HAL_TRIGGER_BA_REQ = 59, - WLAN_HAL_TRIGGER_BA_RSP = 60, - WLAN_HAL_UPDATE_BEACON_REQ = 61, - WLAN_HAL_UPDATE_BEACON_RSP = 62, - WLAN_HAL_SEND_BEACON_REQ = 63, - WLAN_HAL_SEND_BEACON_RSP = 64, - - WLAN_HAL_SET_BCASTKEY_REQ = 65, - WLAN_HAL_SET_BCASTKEY_RSP = 66, - WLAN_HAL_DELETE_STA_CONTEXT_IND = 67, - WLAN_HAL_UPDATE_PROBE_RSP_TEMPLATE_REQ = 68, - WLAN_HAL_UPDATE_PROBE_RSP_TEMPLATE_RSP = 69, - - // PTT interface support - WLAN_HAL_PROCESS_PTT_REQ = 70, - WLAN_HAL_PROCESS_PTT_RSP = 71, - - // BTAMP related events - WLAN_HAL_SIGNAL_BTAMP_EVENT_REQ = 72, - WLAN_HAL_SIGNAL_BTAMP_EVENT_RSP = 73, - WLAN_HAL_TL_HAL_FLUSH_AC_REQ = 74, - WLAN_HAL_TL_HAL_FLUSH_AC_RSP = 75, - - WLAN_HAL_ENTER_IMPS_REQ = 76, - WLAN_HAL_EXIT_IMPS_REQ = 77, - WLAN_HAL_ENTER_BMPS_REQ = 78, - WLAN_HAL_EXIT_BMPS_REQ = 79, - WLAN_HAL_ENTER_UAPSD_REQ = 80, - WLAN_HAL_EXIT_UAPSD_REQ = 81, - WLAN_HAL_UPDATE_UAPSD_PARAM_REQ = 82, - WLAN_HAL_CONFIGURE_RXP_FILTER_REQ = 83, - WLAN_HAL_ADD_BCN_FILTER_REQ = 84, - WLAN_HAL_REM_BCN_FILTER_REQ = 85, - WLAN_HAL_ADD_WOWL_BCAST_PTRN = 86, - WLAN_HAL_DEL_WOWL_BCAST_PTRN = 87, - WLAN_HAL_ENTER_WOWL_REQ = 88, - WLAN_HAL_EXIT_WOWL_REQ = 89, - WLAN_HAL_HOST_OFFLOAD_REQ = 90, - WLAN_HAL_SET_RSSI_THRESH_REQ = 91, - WLAN_HAL_GET_RSSI_REQ = 92, - WLAN_HAL_SET_UAPSD_AC_PARAMS_REQ = 93, - WLAN_HAL_CONFIGURE_APPS_CPU_WAKEUP_STATE_REQ = 94, - - WLAN_HAL_ENTER_IMPS_RSP = 95, - WLAN_HAL_EXIT_IMPS_RSP = 96, - WLAN_HAL_ENTER_BMPS_RSP = 97, - WLAN_HAL_EXIT_BMPS_RSP = 98, - WLAN_HAL_ENTER_UAPSD_RSP = 99, - WLAN_HAL_EXIT_UAPSD_RSP = 100, - WLAN_HAL_SET_UAPSD_AC_PARAMS_RSP = 101, - WLAN_HAL_UPDATE_UAPSD_PARAM_RSP = 102, - WLAN_HAL_CONFIGURE_RXP_FILTER_RSP = 103, - WLAN_HAL_ADD_BCN_FILTER_RSP = 104, - WLAN_HAL_REM_BCN_FILTER_RSP = 105, - WLAN_HAL_SET_RSSI_THRESH_RSP = 106, - WLAN_HAL_HOST_OFFLOAD_RSP = 107, - WLAN_HAL_ADD_WOWL_BCAST_PTRN_RSP = 108, - WLAN_HAL_DEL_WOWL_BCAST_PTRN_RSP = 109, - WLAN_HAL_ENTER_WOWL_RSP = 110, - WLAN_HAL_EXIT_WOWL_RSP = 111, - WLAN_HAL_RSSI_NOTIFICATION_IND = 112, - WLAN_HAL_GET_RSSI_RSP = 113, - WLAN_HAL_CONFIGURE_APPS_CPU_WAKEUP_STATE_RSP = 114, - - //11k related events - WLAN_HAL_SET_MAX_TX_POWER_REQ = 115, - WLAN_HAL_SET_MAX_TX_POWER_RSP = 116, - - //11R related msgs - WLAN_HAL_AGGR_ADD_TS_REQ = 117, - WLAN_HAL_AGGR_ADD_TS_RSP = 118, - - //P2P WLAN_FEATURE_P2P - WLAN_HAL_SET_P2P_GONOA_REQ = 119, - WLAN_HAL_SET_P2P_GONOA_RSP = 120, - - //WLAN Dump commands - WLAN_HAL_DUMP_COMMAND_REQ = 121, - WLAN_HAL_DUMP_COMMAND_RSP = 122, - - //OEM_DATA FEATURE SUPPORT - WLAN_HAL_START_OEM_DATA_REQ = 123, - WLAN_HAL_START_OEM_DATA_RSP = 124, - - //ADD SELF STA REQ and RSP - WLAN_HAL_ADD_STA_SELF_REQ = 125, - WLAN_HAL_ADD_STA_SELF_RSP = 126, - - //DEL SELF STA SUPPORT - WLAN_HAL_DEL_STA_SELF_REQ = 127, - WLAN_HAL_DEL_STA_SELF_RSP = 128, - - // Coex Indication - WLAN_HAL_COEX_IND = 129, - - // Tx Complete Indication - WLAN_HAL_OTA_TX_COMPL_IND = 130, - - //Host Suspend/resume messages - WLAN_HAL_HOST_SUSPEND_IND = 131, - WLAN_HAL_HOST_RESUME_REQ = 132, - WLAN_HAL_HOST_RESUME_RSP = 133, - - WLAN_HAL_SET_TX_POWER_REQ = 134, - WLAN_HAL_SET_TX_POWER_RSP = 135, - WLAN_HAL_GET_TX_POWER_REQ = 136, - WLAN_HAL_GET_TX_POWER_RSP = 137, - - WLAN_HAL_P2P_NOA_ATTR_IND = 138, - - WLAN_HAL_ENABLE_RADAR_DETECT_REQ = 139, - WLAN_HAL_ENABLE_RADAR_DETECT_RSP = 140, - WLAN_HAL_GET_TPC_REPORT_REQ = 141, - WLAN_HAL_GET_TPC_REPORT_RSP = 142, - WLAN_HAL_RADAR_DETECT_IND = 143, - WLAN_HAL_RADAR_DETECT_INTR_IND = 144, - WLAN_HAL_KEEP_ALIVE_REQ = 145, - WLAN_HAL_KEEP_ALIVE_RSP = 146, - - /*PNO messages*/ - WLAN_HAL_SET_PREF_NETWORK_REQ = 147, - WLAN_HAL_SET_PREF_NETWORK_RSP = 148, - WLAN_HAL_SET_RSSI_FILTER_REQ = 149, - WLAN_HAL_SET_RSSI_FILTER_RSP = 150, - WLAN_HAL_UPDATE_SCAN_PARAM_REQ = 151, - WLAN_HAL_UPDATE_SCAN_PARAM_RSP = 152, - WLAN_HAL_PREF_NETW_FOUND_IND = 153, - - WLAN_HAL_SET_TX_PER_TRACKING_REQ = 154, - WLAN_HAL_SET_TX_PER_TRACKING_RSP = 155, - WLAN_HAL_TX_PER_HIT_IND = 156, - - WLAN_HAL_8023_MULTICAST_LIST_REQ = 157, - WLAN_HAL_8023_MULTICAST_LIST_RSP = 158, - - WLAN_HAL_SET_PACKET_FILTER_REQ = 159, - WLAN_HAL_SET_PACKET_FILTER_RSP = 160, - WLAN_HAL_PACKET_FILTER_MATCH_COUNT_REQ = 161, - WLAN_HAL_PACKET_FILTER_MATCH_COUNT_RSP = 162, - WLAN_HAL_CLEAR_PACKET_FILTER_REQ = 163, - WLAN_HAL_CLEAR_PACKET_FILTER_RSP = 164, - /*This is temp fix. Should be removed once - * Host and Riva code is in sync*/ - WLAN_HAL_INIT_SCAN_CON_REQ = 165, - - WLAN_HAL_SET_POWER_PARAMS_REQ = 166, - WLAN_HAL_SET_POWER_PARAMS_RSP = 167, - - WLAN_HAL_TSM_STATS_REQ = 168, - WLAN_HAL_TSM_STATS_RSP = 169, - - // wake reason indication (WOW) - WLAN_HAL_WAKE_REASON_IND = 170, - // GTK offload support - WLAN_HAL_GTK_OFFLOAD_REQ = 171, - WLAN_HAL_GTK_OFFLOAD_RSP = 172, - WLAN_HAL_GTK_OFFLOAD_GETINFO_REQ = 173, - WLAN_HAL_GTK_OFFLOAD_GETINFO_RSP = 174, - - WLAN_HAL_FEATURE_CAPS_EXCHANGE_REQ = 175, - WLAN_HAL_FEATURE_CAPS_EXCHANGE_RSP = 176, - WLAN_HAL_EXCLUDE_UNENCRYPTED_IND = 177, - - WLAN_HAL_SET_THERMAL_MITIGATION_REQ = 178, - WLAN_HAL_SET_THERMAL_MITIGATION_RSP = 179, - - WLAN_HAL_UPDATE_VHT_OP_MODE_REQ = 182, - WLAN_HAL_UPDATE_VHT_OP_MODE_RSP = 183, - - WLAN_HAL_P2P_NOA_START_IND = 184, - - WLAN_HAL_GET_ROAM_RSSI_REQ = 185, - WLAN_HAL_GET_ROAM_RSSI_RSP = 186, - - WLAN_HAL_CLASS_B_STATS_IND = 187, - WLAN_HAL_DEL_BA_IND = 188, - WLAN_HAL_DHCP_START_IND = 189, - WLAN_HAL_DHCP_STOP_IND = 190, - WLAN_ROAM_SCAN_OFFLOAD_REQ = 191, - WLAN_ROAM_SCAN_OFFLOAD_RSP = 192, - WLAN_HAL_WIFI_PROXIMITY_REQ = 193, - WLAN_HAL_WIFI_PROXIMITY_RSP = 194, - - WLAN_HAL_START_SPECULATIVE_PS_POLLS_REQ = 195, - WLAN_HAL_START_SPECULATIVE_PS_POLLS_RSP = 196, - WLAN_HAL_STOP_SPECULATIVE_PS_POLLS_IND = 197, - - WLAN_HAL_TDLS_LINK_ESTABLISHED_REQ = 198, - WLAN_HAL_TDLS_LINK_ESTABLISHED_RSP = 199, - WLAN_HAL_TDLS_LINK_TEARDOWN_REQ = 200, - WLAN_HAL_TDLS_LINK_TEARDOWN_RSP = 201, - WLAN_HAL_TDLS_IND = 202, - WLAN_HAL_IBSS_PEER_INACTIVITY_IND = 203, - - /* Scan Offload APIs */ - WLAN_HAL_START_SCAN_OFFLOAD_REQ = 204, - WLAN_HAL_START_SCAN_OFFLOAD_RSP = 205, - WLAN_HAL_STOP_SCAN_OFFLOAD_REQ = 206, - WLAN_HAL_STOP_SCAN_OFFLOAD_RSP = 207, - WLAN_HAL_UPDATE_CHANNEL_LIST_REQ = 208, - WLAN_HAL_UPDATE_CHANNEL_LIST_RSP = 209, - WLAN_HAL_OFFLOAD_SCAN_EVENT_IND = 210, - - /* APIs to offload TCP/UDP Heartbeat handshakes */ - WLAN_HAL_LPHB_CFG_REQ = 211, - WLAN_HAL_LPHB_CFG_RSP = 212, - WLAN_HAL_LPHB_IND = 213, - - WLAN_HAL_ADD_PERIODIC_TX_PTRN_IND = 214, - WLAN_HAL_DEL_PERIODIC_TX_PTRN_IND = 215, - WLAN_HAL_PERIODIC_TX_PTRN_FW_IND = 216, - - // Events to set Per-Band Tx Power Limit - WLAN_HAL_SET_MAX_TX_POWER_PER_BAND_REQ = 217, - WLAN_HAL_SET_MAX_TX_POWER_PER_BAND_RSP = 218, - - /* Reliable Multicast using Leader Based Protocol */ - WLAN_HAL_LBP_LEADER_REQ = 219, - WLAN_HAL_LBP_LEADER_RSP = 220, - WLAN_HAL_LBP_UPDATE_IND = 221, - - /* Batchscan */ - WLAN_HAL_BATCHSCAN_SET_REQ = 222, - WLAN_HAL_BATCHSCAN_SET_RSP = 223, - WLAN_HAL_BATCHSCAN_TRIGGER_RESULT_IND = 224, - WLAN_HAL_BATCHSCAN_RESULT_IND = 225, - WLAN_HAL_BATCHSCAN_STOP_IND = 226, - - WLAN_HAL_GET_IBSS_PEER_INFO_REQ = 227, - WLAN_HAL_GET_IBSS_PEER_INFO_RSP = 228, - - WLAN_HAL_RATE_UPDATE_IND = 229, - - /* Tx Fail for weak link notification */ - WLAN_HAL_TX_FAIL_MONITOR_IND = 230, - WLAN_HAL_TX_FAIL_IND = 231, - - /* Multi-hop IP routing offload */ - WLAN_HAL_IP_FORWARD_TABLE_UPDATE_IND = 232, - - WLAN_HAL_MSG_MAX = WLAN_HAL_MSG_TYPE_MAX_ENUM_SIZE -}tHalHostMsgType; - -/* Enumeration for Version */ -typedef enum -{ - WLAN_HAL_MSG_VERSION0 = 0, - WLAN_HAL_MSG_VERSION1 = 1, - WLAN_HAL_MSG_WCNSS_CTRL_VERSION = 0x7FFF, /*define as 2 bytes data*/ - WLAN_HAL_MSG_VERSION_MAX_FIELD = WLAN_HAL_MSG_WCNSS_CTRL_VERSION -}tHalHostMsgVersion; - -/* Enumeration for Boolean - False/True, On/Off */ -typedef enum tagAniBoolean -{ - eANI_BOOLEAN_FALSE = 0, - eANI_BOOLEAN_TRUE, - eANI_BOOLEAN_OFF = 0, - eANI_BOOLEAN_ON = 1, - eANI_BOOLEAN_MAX_FIELD = 0x7FFFFFFF /* define as 4 bytes data */ -} eAniBoolean; - -typedef enum -{ - eDRIVER_TYPE_PRODUCTION = 0, - eDRIVER_TYPE_MFG = 1, - eDRIVER_TYPE_DVT = 2, - eDRIVER_TYPE_MAX = WLAN_HAL_MAX_ENUM_SIZE -} tDriverType; - -typedef enum -{ - HAL_STOP_TYPE_SYS_RESET, - HAL_STOP_TYPE_SYS_DEEP_SLEEP, - HAL_STOP_TYPE_RF_KILL, - HAL_STOP_TYPE_MAX = WLAN_HAL_MAX_ENUM_SIZE -}tHalStopType; - -typedef enum -{ - eHAL_SYS_MODE_NORMAL, - eHAL_SYS_MODE_LEARN, - eHAL_SYS_MODE_SCAN, - eHAL_SYS_MODE_PROMISC, - eHAL_SYS_MODE_SUSPEND_LINK, - eHAL_SYS_MODE_ROAM_SCAN, - eHAL_SYS_MODE_ROAM_SUSPEND_LINK, - eHAL_SYS_MODE_OEM_DATA, - eHAL_SYS_MODE_MAX = WLAN_HAL_MAX_ENUM_SIZE -} eHalSysMode; - -typedef enum -{ - PHY_SINGLE_CHANNEL_CENTERED = 0, // 20MHz IF bandwidth centered on IF carrier - PHY_DOUBLE_CHANNEL_LOW_PRIMARY = 1, // 40MHz IF bandwidth with lower 20MHz supporting the primary channel - PHY_DOUBLE_CHANNEL_CENTERED = 2, // 40MHz IF bandwidth centered on IF carrier - PHY_DOUBLE_CHANNEL_HIGH_PRIMARY = 3, // 40MHz IF bandwidth with higher 20MHz supporting the primary channel -#ifdef WLAN_FEATURE_11AC - PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_CENTERED = 4, //20/40MHZ offset LOW 40/80MHZ offset CENTERED - PHY_QUADRUPLE_CHANNEL_20MHZ_CENTERED_40MHZ_CENTERED = 5, //20/40MHZ offset CENTERED 40/80MHZ offset CENTERED - PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_CENTERED = 6, //20/40MHZ offset HIGH 40/80MHZ offset CENTERED - PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_LOW = 7,//20/40MHZ offset LOW 40/80MHZ offset LOW - PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_LOW = 8, //20/40MHZ offset HIGH 40/80MHZ offset LOW - PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_HIGH = 9, //20/40MHZ offset LOW 40/80MHZ offset HIGH - PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_HIGH = 10,//20/40MHZ offset-HIGH 40/80MHZ offset HIGH -#endif - PHY_CHANNEL_BONDING_STATE_MAX = WLAN_HAL_MAX_ENUM_SIZE -}ePhyChanBondState; - -// Spatial Multiplexing(SM) Power Save mode -typedef enum eSirMacHTMIMOPowerSaveState -{ - eSIR_HT_MIMO_PS_STATIC = 0, // Static SM Power Save mode - eSIR_HT_MIMO_PS_DYNAMIC = 1, // Dynamic SM Power Save mode - eSIR_HT_MIMO_PS_NA = 2, // reserved - eSIR_HT_MIMO_PS_NO_LIMIT = 3, // SM Power Save disabled - eSIR_HT_MIMO_PS_MAX = WLAN_HAL_MAX_ENUM_SIZE -} tSirMacHTMIMOPowerSaveState; - -/* each station added has a rate mode which specifies the sta attributes */ -typedef enum eStaRateMode { - eSTA_TAURUS = 0, - eSTA_TITAN, - eSTA_POLARIS, - eSTA_11b, - eSTA_11bg, - eSTA_11a, - eSTA_11n, -#ifdef WLAN_FEATURE_11AC - eSTA_11ac, -#endif - eSTA_INVALID_RATE_MODE = WLAN_HAL_MAX_ENUM_SIZE -} tStaRateMode, *tpStaRateMode; - -#define SIR_NUM_11B_RATES 4 //1,2,5.5,11 -#define SIR_NUM_11A_RATES 8 //6,9,12,18,24,36,48,54 -#define SIR_NUM_POLARIS_RATES 3 //72,96,108 - -#define SIR_MAC_MAX_SUPPORTED_MCS_SET 16 - - -typedef enum eSirBssType -{ - eSIR_INFRASTRUCTURE_MODE, - eSIR_INFRA_AP_MODE, //Added for softAP support - eSIR_IBSS_MODE, - eSIR_BTAMP_STA_MODE, //Added for BT-AMP support - eSIR_BTAMP_AP_MODE, //Added for BT-AMP support - eSIR_AUTO_MODE, - eSIR_DONOT_USE_BSS_TYPE = WLAN_HAL_MAX_ENUM_SIZE -} tSirBssType; - -typedef enum eSirNwType -{ - eSIR_11A_NW_TYPE, - eSIR_11B_NW_TYPE, - eSIR_11G_NW_TYPE, - eSIR_11N_NW_TYPE, - eSIR_DONOT_USE_NW_TYPE = WLAN_HAL_MAX_ENUM_SIZE -} tSirNwType; - -typedef tANI_U16 tSirMacBeaconInterval; - -#define SIR_MAC_RATESET_EID_MAX 12 - -typedef enum eSirMacHTOperatingMode -{ - eSIR_HT_OP_MODE_PURE, // No Protection - eSIR_HT_OP_MODE_OVERLAP_LEGACY, // Overlap Legacy device present, protection is optional - eSIR_HT_OP_MODE_NO_LEGACY_20MHZ_HT, // No legacy device, but 20 MHz HT present - eSIR_HT_OP_MODE_MIXED, // Protection is required - eSIR_HT_OP_MODE_MAX = WLAN_HAL_MAX_ENUM_SIZE -} tSirMacHTOperatingMode; - -/// Encryption type enum used with peer -typedef enum eAniEdType -{ - eSIR_ED_NONE, - eSIR_ED_WEP40, - eSIR_ED_WEP104, - eSIR_ED_TKIP, - eSIR_ED_CCMP, - eSIR_ED_WPI, - eSIR_ED_AES_128_CMAC, - eSIR_ED_NOT_IMPLEMENTED = WLAN_HAL_MAX_ENUM_SIZE -} tAniEdType; - -#define WLAN_MAX_KEY_RSC_LEN 16 -#define WLAN_WAPI_KEY_RSC_LEN 16 - -/// MAX key length when ULA is used -#define SIR_MAC_MAX_KEY_LENGTH 32 -#define SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS 4 - -/// Enum to specify whether key is used -/// for TX only, RX only or both -typedef enum eAniKeyDirection -{ - eSIR_TX_ONLY, - eSIR_RX_ONLY, - eSIR_TX_RX, - eSIR_TX_DEFAULT, - eSIR_DONOT_USE_KEY_DIRECTION = WLAN_HAL_MAX_ENUM_SIZE -} tAniKeyDirection; - -typedef enum eAniWepType -{ - eSIR_WEP_STATIC, - eSIR_WEP_DYNAMIC, - eSIR_WEP_MAX = WLAN_HAL_MAX_ENUM_SIZE -} tAniWepType; - -typedef enum eSriLinkState { - - eSIR_LINK_IDLE_STATE = 0, - eSIR_LINK_PREASSOC_STATE = 1, - eSIR_LINK_POSTASSOC_STATE = 2, - eSIR_LINK_AP_STATE = 3, - eSIR_LINK_IBSS_STATE = 4, - - /* BT-AMP Case */ - eSIR_LINK_BTAMP_PREASSOC_STATE = 5, - eSIR_LINK_BTAMP_POSTASSOC_STATE = 6, - eSIR_LINK_BTAMP_AP_STATE = 7, - eSIR_LINK_BTAMP_STA_STATE = 8, - - /* Reserved for HAL Internal Use */ - eSIR_LINK_LEARN_STATE = 9, - eSIR_LINK_SCAN_STATE = 10, - eSIR_LINK_FINISH_SCAN_STATE = 11, - eSIR_LINK_INIT_CAL_STATE = 12, - eSIR_LINK_FINISH_CAL_STATE = 13, -#ifdef WLAN_FEATURE_P2P - eSIR_LINK_LISTEN_STATE = 14, - eSIR_LINK_SEND_ACTION_STATE = 15, -#endif - eSIR_LINK_MAX = WLAN_HAL_MAX_ENUM_SIZE -} tSirLinkState; - -typedef enum -{ - HAL_SUMMARY_STATS_INFO = 0x00000001, - HAL_GLOBAL_CLASS_A_STATS_INFO = 0x00000002, - HAL_GLOBAL_CLASS_B_STATS_INFO = 0x00000004, - HAL_GLOBAL_CLASS_C_STATS_INFO = 0x00000008, - HAL_GLOBAL_CLASS_D_STATS_INFO = 0x00000010, - HAL_PER_STA_STATS_INFO = 0x00000020 -}eHalStatsMask; - -/* BT-AMP events type */ -typedef enum -{ - BTAMP_EVENT_CONNECTION_START, - BTAMP_EVENT_CONNECTION_STOP, - BTAMP_EVENT_CONNECTION_TERMINATED, - BTAMP_EVENT_TYPE_MAX = WLAN_HAL_MAX_ENUM_SIZE, //This and beyond are invalid values -} tBtAmpEventType; - -//*************************************************************** - - -/*******************PE Statistics*************************/ -typedef enum -{ - PE_SUMMARY_STATS_INFO = 0x00000001, - PE_GLOBAL_CLASS_A_STATS_INFO = 0x00000002, - PE_GLOBAL_CLASS_B_STATS_INFO = 0x00000004, - PE_GLOBAL_CLASS_C_STATS_INFO = 0x00000008, - PE_GLOBAL_CLASS_D_STATS_INFO = 0x00000010, - PE_PER_STA_STATS_INFO = 0x00000020, - PE_STATS_TYPE_MAX = WLAN_HAL_MAX_ENUM_SIZE //This and beyond are invalid values -}ePEStatsMask; - -/*--------------------------------------------------------------------------- - Message definitons - All the messages below need to be packed - ---------------------------------------------------------------------------*/ - -#if defined(__ANI_COMPILER_PRAGMA_PACK_STACK) -#pragma pack(push, 1) -#elif defined(__ANI_COMPILER_PRAGMA_PACK) -#pragma pack(1) -#else -#endif - -/// Definition for HAL API Version. -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 revision; - tANI_U8 version; - tANI_U8 minor; - tANI_U8 major; -} tWcnssWlanVersion, *tpWcnssWlanVersion; - -/// Definition for Encryption Keys -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 keyId; - tANI_U8 unicast; // 0 for multicast - tAniKeyDirection keyDirection; - tANI_U8 keyRsc[WLAN_MAX_KEY_RSC_LEN]; // Usage is unknown - tANI_U8 paeRole; // =1 for authenticator,=0 for supplicant - tANI_U16 keyLength; - tANI_U8 key[SIR_MAC_MAX_KEY_LENGTH]; -} tSirKeys, *tpSirKeys; - - -//SetStaKeyParams Moving here since it is shared by configbss/setstakey msgs -typedef PACKED_PRE struct PACKED_POST -{ - /*STA Index*/ - tANI_U16 staIdx; - - /*Encryption Type used with peer*/ - tAniEdType encType; - - /*STATIC/DYNAMIC - valid only for WEP*/ - tAniWepType wepType; - - /*Default WEP key, valid only for static WEP, must between 0 and 3.*/ - tANI_U8 defWEPIdx; - - /* valid only for non-static WEP encyrptions */ - tSirKeys key[SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS]; - - /*Control for Replay Count, 1= Single TID based replay count on Tx - 0 = Per TID based replay count on TX */ - tANI_U8 singleTidRc; - -} tSetStaKeyParams, *tpSetStaKeyParams; - - - -/* 4-byte control message header used by HAL*/ -typedef PACKED_PRE struct PACKED_POST -{ - tHalHostMsgType msgType:16; - tHalHostMsgVersion msgVersion:16; - tANI_U32 msgLen; -} tHalMsgHeader, *tpHalMsgHeader; - -/* Config format required by HAL for each CFG item*/ -typedef PACKED_PRE struct PACKED_POST -{ - /* Cfg Id. The Id required by HAL is exported by HAL - * in shared header file between UMAC and HAL.*/ - tANI_U16 uCfgId; - - /* Length of the Cfg. This parameter is used to go to next cfg - * in the TLV format.*/ - tANI_U16 uCfgLen; - - /* Padding bytes for unaligned address's */ - tANI_U16 uCfgPadBytes; - - /* Reserve bytes for making cfgVal to align address */ - tANI_U16 uCfgReserve; - - /* Following the uCfgLen field there should be a 'uCfgLen' bytes - * containing the uCfgValue ; tANI_U8 uCfgValue[uCfgLen] */ -} tHalCfg, *tpHalCfg; - -/*--------------------------------------------------------------------------- - WLAN_HAL_START_REQ ----------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST sHalMacStartParameters -{ - /* Drive Type - Production or FTM etc */ - tDriverType driverType; - - /*Length of the config buffer*/ - tANI_U32 uConfigBufferLen; - - /* Following this there is a TLV formatted buffer of length - * "uConfigBufferLen" bytes containing all config values. - * The TLV is expected to be formatted like this: - * 0 15 31 31+CFG_LEN-1 length-1 - * | CFG_ID | CFG_LEN | CFG_BODY | CFG_ID |......| - */ -} tHalMacStartParameters, *tpHalMacStartParameters; - -typedef PACKED_PRE struct PACKED_POST -{ - /* Note: The length specified in tHalMacStartReqMsg messages should be - * header.msgLen = sizeof(tHalMacStartReqMsg) + uConfigBufferLen */ - tHalMsgHeader header; - tHalMacStartParameters startReqParams; -} tHalMacStartReqMsg, *tpHalMacStartReqMsg; - -/*--------------------------------------------------------------------------- - WLAN_HAL_START_RSP ----------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST sHalMacStartRspParameters -{ - /*success or failure */ - tANI_U16 status; - - /*Max number of STA supported by the device*/ - tANI_U8 ucMaxStations; - - /*Max number of BSS supported by the device*/ - tANI_U8 ucMaxBssids; - - /*API Version */ - tWcnssWlanVersion wcnssWlanVersion; - - /*CRM build information */ - tANI_U8 wcnssCrmVersionString[WLAN_HAL_VERSION_LENGTH]; - - /*hardware/chipset/misc version information */ - tANI_U8 wcnssWlanVersionString[WLAN_HAL_VERSION_LENGTH]; - -} tHalMacStartRspParams, *tpHalMacStartRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalMacStartRspParams startRspParams; -} tHalMacStartRspMsg, *tpHalMacStartRspMsg; - -/*--------------------------------------------------------------------------- - WLAN_HAL_STOP_REQ ----------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /*The reason for which the device is being stopped*/ - tHalStopType reason; - -}tHalMacStopReqParams, *tpHalMacStopReqParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalMacStopReqParams stopReqParams; -} tHalMacStopReqMsg, *tpHalMacStopReqMsg; - -/*--------------------------------------------------------------------------- - WLAN_HAL_STOP_RSP ----------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /*success or failure */ - tANI_U32 status; - -}tHalMacStopRspParams, *tpHalMacStopRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalMacStopRspParams stopRspParams; -} tHalMacStopRspMsg, *tpHalMacStopRspMsg; - -/*--------------------------------------------------------------------------- - WLAN_HAL_UPDATE_CFG_REQ ----------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /* Length of the config buffer. Allows UMAC to update multiple CFGs */ - tANI_U32 uConfigBufferLen; - - /* Following this there is a TLV formatted buffer of length - * "uConfigBufferLen" bytes containing all config values. - * The TLV is expected to be formatted like this: - * 0 15 31 31+CFG_LEN-1 length-1 - * | CFG_ID | CFG_LEN | CFG_BODY | CFG_ID |......| - */ -} tHalUpdateCfgReqParams, *tpHalUpdateCfgReqParams; - -typedef PACKED_PRE struct PACKED_POST -{ - /* Note: The length specified in tHalUpdateCfgReqMsg messages should be - * header.msgLen = sizeof(tHalUpdateCfgReqMsg) + uConfigBufferLen */ - tHalMsgHeader header; - tHalUpdateCfgReqParams updateCfgReqParams; -} tHalUpdateCfgReqMsg, *tpHalUpdateCfgReqMsg; - -/*--------------------------------------------------------------------------- - WLAN_HAL_UPDATE_CFG_RSP ----------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; - -}tHalUpdateCfgRspParams, *tpHalUpdateCfgRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalUpdateCfgRspParams updateCfgRspParams; -} tHalUpdateCfgRspMsg, *tpHalUpdateCfgRspMsg; - -/*--------------------------------------------------------------------------- - WLAN_HAL_INIT_SCAN_REQ ----------------------------------------------------------------------------*/ - -/// Frame control field format (2 bytes) -typedef __ani_attr_pre_packed struct sSirMacFrameCtl -{ - -#ifndef ANI_LITTLE_BIT_ENDIAN - - tANI_U8 subType :4; - tANI_U8 type :2; - tANI_U8 protVer :2; - - tANI_U8 order :1; - tANI_U8 wep :1; - tANI_U8 moreData :1; - tANI_U8 powerMgmt :1; - tANI_U8 retry :1; - tANI_U8 moreFrag :1; - tANI_U8 fromDS :1; - tANI_U8 toDS :1; - -#else - - tANI_U8 protVer :2; - tANI_U8 type :2; - tANI_U8 subType :4; - - tANI_U8 toDS :1; - tANI_U8 fromDS :1; - tANI_U8 moreFrag :1; - tANI_U8 retry :1; - tANI_U8 powerMgmt :1; - tANI_U8 moreData :1; - tANI_U8 wep :1; - tANI_U8 order :1; - -#endif - -} __ani_attr_packed tSirMacFrameCtl, *tpSirMacFrameCtl; - -/// Sequence control field -typedef __ani_attr_pre_packed struct sSirMacSeqCtl -{ - tANI_U8 fragNum : 4; - tANI_U8 seqNumLo : 4; - tANI_U8 seqNumHi : 8; -} __ani_attr_packed tSirMacSeqCtl, *tpSirMacSeqCtl; - -/// Management header format -typedef __ani_attr_pre_packed struct sSirMacMgmtHdr -{ - tSirMacFrameCtl fc; - tANI_U8 durationLo; - tANI_U8 durationHi; - tANI_U8 da[6]; - tANI_U8 sa[6]; - tANI_U8 bssId[6]; - tSirMacSeqCtl seqControl; -} __ani_attr_packed tSirMacMgmtHdr, *tpSirMacMgmtHdr; - -/// Scan Entry to hold active BSS idx's -typedef __ani_attr_pre_packed struct sSirScanEntry -{ - tANI_U8 bssIdx[HAL_NUM_BSSID]; - tANI_U8 activeBSScnt; -}__ani_attr_packed tSirScanEntry, *ptSirScanEntry; - -typedef PACKED_PRE struct PACKED_POST { - - /*LEARN - AP Role - SCAN - STA Role*/ - eHalSysMode scanMode; - - /*BSSID of the BSS*/ - tSirMacAddr bssid; - - /*Whether BSS needs to be notified*/ - tANI_U8 notifyBss; - - /*Kind of frame to be used for notifying the BSS (Data Null, QoS Null, or - CTS to Self). Must always be a valid frame type.*/ - tANI_U8 frameType; - - /*UMAC has the option of passing the MAC frame to be used for notifying - the BSS. If non-zero, HAL will use the MAC frame buffer pointed to by - macMgmtHdr. If zero, HAL will generate the appropriate MAC frame based on - frameType.*/ - tANI_U8 frameLength; - - /* Following the framelength there is a MAC frame buffer if frameLength - is non-zero. */ - tSirMacMgmtHdr macMgmtHdr; - - /*Entry to hold number of active BSS idx's*/ - tSirScanEntry scanEntry; - -} tInitScanParams, * tpInitScanParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tInitScanParams initScanParams; -} tHalInitScanReqMsg, *tpHalInitScanReqMsg; - -typedef PACKED_PRE struct PACKED_POST { - - /*LEARN - AP Role - SCAN - STA Role*/ - eHalSysMode scanMode; - - /*BSSID of the BSS*/ - tSirMacAddr bssid; - - /*Whether BSS needs to be notified*/ - tANI_U8 notifyBss; - - /*Kind of frame to be used for notifying the BSS (Data Null, QoS Null, or - CTS to Self). Must always be a valid frame type.*/ - tANI_U8 frameType; - - /*UMAC has the option of passing the MAC frame to be used for notifying - the BSS. If non-zero, HAL will use the MAC frame buffer pointed to by - macMgmtHdr. If zero, HAL will generate the appropriate MAC frame based on - frameType.*/ - tANI_U8 frameLength; - - /* Following the framelength there is a MAC frame buffer if frameLength - is non-zero. */ - tSirMacMgmtHdr macMgmtHdr; - - /*Entry to hold number of active BSS idx's*/ - tSirScanEntry scanEntry; - - /* Single NoA usage in Scanning */ - tANI_U8 useNoA; - - /* Indicates the scan duration (in ms) */ - tANI_U16 scanDuration; - -} tInitScanConParams, * tpInitScanConParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tInitScanConParams initScanParams; -} tHalInitScanConReqMsg, *tpHalInitScanConReqMsg; - - -/*--------------------------------------------------------------------------- - WLAN_HAL_INIT_SCAN_RSP ----------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /*success or failure */ - tANI_U32 status; - -}tHalInitScanRspParams, *tpHalInitScanRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalInitScanRspParams initScanRspParams; -} tHalInitScanRspMsg, *tpHalInitScanRspMsg; - -/*--------------------------------------------------------------------------- - WLAN_HAL_START_SCAN_REQ ----------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /*Indicates the channel to scan*/ - tANI_U8 scanChannel; - - } tStartScanParams, * tpStartScanParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tStartScanParams startScanParams; -} tHalStartScanReqMsg, *tpHalStartScanReqMsg; - -/*--------------------------------------------------------------------------- - WLAN_HAL_START_SCAN_RSP ----------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /*success or failure */ - tANI_U32 status; - - tANI_U32 startTSF[2]; - tPowerdBm txMgmtPower; - -}tHalStartScanRspParams, *tpHalStartScanRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalStartScanRspParams startScanRspParams; -} tHalStartScanRspMsg, *tpHalStartScanRspMsg; - -/*--------------------------------------------------------------------------- - WLAN_HAL_END_SCAN_REQ ----------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /*Indicates the channel to stop scanning. Not used really. But retained - for symmetry with "start Scan" message. It can also help in error - check if needed.*/ - tANI_U8 scanChannel; - -} tEndScanParams, *tpEndScanParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tEndScanParams endScanParams; -} tHalEndScanReqMsg, *tpHalEndScanReqMsg; - -/*--------------------------------------------------------------------------- - WLAN_HAL_END_SCAN_RSP ----------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /*success or failure */ - tANI_U32 status; - -}tHalEndScanRspParams, *tpHalEndScanRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalEndScanRspParams endScanRspParams; -} tHalEndScanRspMsg, *tpHalEndScanRspMsg; - -/*--------------------------------------------------------------------------- - WLAN_HAL_FINISH_SCAN_REQ ----------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /* Identifies the operational state of the AP/STA - * LEARN - AP Role SCAN - STA Role */ - eHalSysMode scanMode; - - /*Operating channel to tune to.*/ - tANI_U8 currentOperChannel; - - /*Channel Bonding state If 20/40 MHz is operational, this will indicate the - 40 MHz extension channel in combination with the control channel*/ - ePhyChanBondState cbState; - - /*BSSID of the BSS*/ - tSirMacAddr bssid; - - /*Whether BSS needs to be notified*/ - tANI_U8 notifyBss; - - /*Kind of frame to be used for notifying the BSS (Data Null, QoS Null, or - CTS to Self). Must always be a valid frame type.*/ - tANI_U8 frameType; - - /*UMAC has the option of passing the MAC frame to be used for notifying - the BSS. If non-zero, HAL will use the MAC frame buffer pointed to by - macMgmtHdr. If zero, HAL will generate the appropriate MAC frame based on - frameType.*/ - tANI_U8 frameLength; - - /*Following the framelength there is a MAC frame buffer if frameLength - is non-zero.*/ - tSirMacMgmtHdr macMgmtHdr; - - /*Entry to hold number of active BSS idx's*/ - tSirScanEntry scanEntry; - -} tFinishScanParams, *tpFinishScanParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tFinishScanParams finishScanParams; -} tHalFinishScanReqMsg, *tpHalFinishScanReqMsg; - -/*--------------------------------------------------------------------------- - WLAN_HAL_FINISH_SCAN_RSP ----------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /*success or failure */ - tANI_U32 status; - -}tHalFinishScanRspParams, *tpHalFinishScanRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalFinishScanRspParams finishScanRspParams; -} tHalFinishScanRspMsg, *tpHalFinishScanRspMsg; - -/*--------------------------------------------------------------------------- - WLAN_HAL_CONFIG_STA_REQ ----------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST { - /* - * For Self STA Entry: this represents Self Mode. - * For Peer Stations, this represents the mode of the peer. - * On Station: - * --this mode is updated when PE adds the Self Entry. - * -- OR when PE sends 'ADD_BSS' message and station context in BSS is used to indicate the mode of the AP. - * ON AP: - * -- this mode is updated when PE sends 'ADD_BSS' and Sta entry for that BSS is used - * to indicate the self mode of the AP. - * -- OR when a station is associated, PE sends 'ADD_STA' message with this mode updated. - */ - - tStaRateMode opRateMode; - // 11b, 11a and aniLegacyRates are IE rates which gives rate in unit of 500Kbps - tANI_U16 llbRates[SIR_NUM_11B_RATES]; - tANI_U16 llaRates[SIR_NUM_11A_RATES]; - tANI_U16 aniLegacyRates[SIR_NUM_POLARIS_RATES]; - tANI_U16 reserved; - - //Taurus only supports 26 Titan Rates(no ESF/concat Rates will be supported) - //First 26 bits are reserved for those Titan rates and - //the last 4 bits(bit28-31) for Taurus, 2(bit26-27) bits are reserved. - tANI_U32 aniEnhancedRateBitmap; //Titan and Taurus Rates - - /* - * 0-76 bits used, remaining reserved - * bits 0-15 and 32 should be set. - */ - tANI_U8 supportedMCSSet[SIR_MAC_MAX_SUPPORTED_MCS_SET]; - - /* - * RX Highest Supported Data Rate defines the highest data - * rate that the STA is able to receive, in unites of 1Mbps. - * This value is derived from "Supported MCS Set field" inside - * the HT capability element. - */ - tANI_U16 rxHighestDataRate; - -} tSirSupportedRates, *tpSirSupportedRates; - -typedef PACKED_PRE struct PACKED_POST -{ - /*BSSID of STA*/ - tSirMacAddr bssId; - - /*ASSOC ID, as assigned by UMAC*/ - tANI_U16 assocId; - - /* STA entry Type: 0 - Self, 1 - Other/Peer, 2 - BSSID, 3 - BCAST */ - tANI_U8 staType; - - /*Short Preamble Supported.*/ - tANI_U8 shortPreambleSupported; - - /*MAC Address of STA*/ - tSirMacAddr staMac; - - /*Listen interval of the STA*/ - tANI_U16 listenInterval; - - /*Support for 11e/WMM*/ - tANI_U8 wmmEnabled; - - /*11n HT capable STA*/ - tANI_U8 htCapable; - - /*TX Width Set: 0 - 20 MHz only, 1 - 20/40 MHz*/ - tANI_U8 txChannelWidthSet; - - /*RIFS mode 0 - NA, 1 - Allowed */ - tANI_U8 rifsMode; - - /*L-SIG TXOP Protection mechanism - 0 - No Support, 1 - Supported - SG - there is global field */ - tANI_U8 lsigTxopProtection; - - /*Max Ampdu Size supported by STA. TPE programming. - 0 : 8k , 1 : 16k, 2 : 32k, 3 : 64k */ - tANI_U8 maxAmpduSize; - - /*Max Ampdu density. Used by RA. 3 : 0~7 : 2^(11nAMPDUdensity -4)*/ - tANI_U8 maxAmpduDensity; - - /*Max AMSDU size 1 : 3839 bytes, 0 : 7935 bytes*/ - tANI_U8 maxAmsduSize; - - /*Short GI support for 40Mhz packets*/ - tANI_U8 fShortGI40Mhz; - - /*Short GI support for 20Mhz packets*/ - tANI_U8 fShortGI20Mhz; - - /*Robust Management Frame (RMF) enabled/disabled*/ - tANI_U8 rmfEnabled; - - /* The unicast encryption type in the association */ - tANI_U32 encryptType; - - /*HAL should update the existing STA entry, if this flag is set. UMAC - will set this flag in case of RE-ASSOC, where we want to reuse the old - STA ID. 0 = Add, 1 = Update*/ - tANI_U8 action; - - /*U-APSD Flags: 1b per AC. Encoded as follows: - b7 b6 b5 b4 b3 b2 b1 b0 = - X X X X BE BK VI VO */ - tANI_U8 uAPSD; - - /*Max SP Length*/ - tANI_U8 maxSPLen; - - /*11n Green Field preamble support - 0 - Not supported, 1 - Supported */ - tANI_U8 greenFieldCapable; - - /*MIMO Power Save mode*/ - tSirMacHTMIMOPowerSaveState mimoPS; - - /*Delayed BA Support*/ - tANI_U8 delayedBASupport; - - /*Max AMPDU duration in 32us*/ - tANI_U8 us32MaxAmpduDuration; - - /*HT STA should set it to 1 if it is enabled in BSS. HT STA should set - it to 0 if AP does not support it. This indication is sent to HAL and - HAL uses this flag to pickup up appropriate 40Mhz rates.*/ - tANI_U8 fDsssCckMode40Mhz; - - /* Valid STA Idx when action=Update. Set to 0xFF when invalid! - Retained for backward compalibity with existing HAL code*/ - tANI_U8 staIdx; - - /* BSSID of BSS to which station is associated. Set to 0xFF when invalid. - Retained for backward compalibity with existing HAL code*/ - tANI_U8 bssIdx; - - tANI_U8 p2pCapableSta; - - /*Reserved to align next field on a dword boundary*/ - tANI_U8 reserved; - - /*These rates are the intersection of peer and self capabilities.*/ - tSirSupportedRates supportedRates; - -} tConfigStaParams, *tpConfigStaParams; - -/*------------------------------------------------------------------------ - * WLAN_HAL_CONFIG_STA_REQ - * ----------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST { - /* - * For Self STA Entry: this represents Self Mode. - * For Peer Stations, this represents the mode of the peer. - * On Station: - * --this mode is updated when PE adds the Self Entry. - * -- OR when PE sends 'ADD_BSS' message and station context in BSS is used to indicate the mode of the AP. - * ON AP: - * -- this mode is updated when PE sends 'ADD_BSS' and Sta entry for that BSS is used - * to indicate the self mode of the AP. - * -- OR when a station is associated, PE sends 'ADD_STA' message with this mode updated. - */ - - tStaRateMode opRateMode; - // 11b, 11a and aniLegacyRates are IE rates which gives rate in unit of 500Kbps - tANI_U16 llbRates[SIR_NUM_11B_RATES]; - tANI_U16 llaRates[SIR_NUM_11A_RATES]; - tANI_U16 aniLegacyRates[SIR_NUM_POLARIS_RATES]; - tANI_U16 reserved; - - //Taurus only supports 26 Titan Rates(no ESF/concat Rates will be supported) - //First 26 bits are reserved for those Titan rates and - //the last 4 bits(bit28-31) for Taurus, 2(bit26-27) bits are reserved. - tANI_U32 aniEnhancedRateBitmap; //Titan and Taurus Rates - - /* - * 0-76 bits used, remaining reserved - * bits 0-15 and 32 should be set. - */ - tANI_U8 supportedMCSSet[SIR_MAC_MAX_SUPPORTED_MCS_SET]; - - /* - * RX Highest Supported Data Rate defines the highest data - * rate that the STA is able to receive, in unites of 1Mbps. - * This value is derived from "Supported MCS Set field" inside - * the HT capability element. - */ - tANI_U16 rxHighestDataRate; - - /* Indicates the Maximum MCS that can be received for each number - * of spacial streams */ - tANI_U16 vhtRxMCSMap; - - /*Indicate the highest VHT data rate that the STA is able to receive*/ - tANI_U16 vhtRxHighestDataRate; - - /* Indicates the Maximum MCS that can be transmitted for each number - * of spacial streams */ - tANI_U16 vhtTxMCSMap; - - /*Indicate the highest VHT data rate that the STA is able to transmit*/ - tANI_U16 vhtTxHighestDataRate; - -} tSirSupportedRates_V1, *tpSirSupportedRates_V1; - -typedef PACKED_PRE struct PACKED_POST -{ - /*BSSID of STA*/ - tSirMacAddr bssId; - - /*ASSOC ID, as assigned by UMAC*/ - tANI_U16 assocId; - - /* STA entry Type: 0 - Self, 1 - Other/Peer, 2 - BSSID, 3 - BCAST */ - tANI_U8 staType; - - /*Short Preamble Supported.*/ - tANI_U8 shortPreambleSupported; - - /*MAC Address of STA*/ - tSirMacAddr staMac; - - /*Listen interval of the STA*/ - tANI_U16 listenInterval; - - /*Support for 11e/WMM*/ - tANI_U8 wmmEnabled; - - /*11n HT capable STA*/ - tANI_U8 htCapable; - - /*TX Width Set: 0 - 20 MHz only, 1 - 20/40 MHz*/ - tANI_U8 txChannelWidthSet; - - /*RIFS mode 0 - NA, 1 - Allowed */ - tANI_U8 rifsMode; - - /*L-SIG TXOP Protection mechanism - 0 - No Support, 1 - Supported - SG - there is global field */ - tANI_U8 lsigTxopProtection; - - /*Max Ampdu Size supported by STA. TPE programming. - 0 : 8k , 1 : 16k, 2 : 32k, 3 : 64k */ - tANI_U8 maxAmpduSize; - - /*Max Ampdu density. Used by RA. 3 : 0~7 : 2^(11nAMPDUdensity -4)*/ - tANI_U8 maxAmpduDensity; - - /*Max AMSDU size 1 : 3839 bytes, 0 : 7935 bytes*/ - tANI_U8 maxAmsduSize; - - /*Short GI support for 40Mhz packets*/ - tANI_U8 fShortGI40Mhz; - - /*Short GI support for 20Mhz packets*/ - tANI_U8 fShortGI20Mhz; - - /*Robust Management Frame (RMF) enabled/disabled*/ - tANI_U8 rmfEnabled; - - /* The unicast encryption type in the association */ - tANI_U32 encryptType; - - /*HAL should update the existing STA entry, if this flag is set. UMAC - will set this flag in case of RE-ASSOC, where we want to reuse the old - STA ID. 0 = Add, 1 = Update*/ - tANI_U8 action; - - /*U-APSD Flags: 1b per AC. Encoded as follows: - b7 b6 b5 b4 b3 b2 b1 b0 = - X X X X BE BK VI VO */ - tANI_U8 uAPSD; - - /*Max SP Length*/ - tANI_U8 maxSPLen; - - /*11n Green Field preamble support - 0 - Not supported, 1 - Supported */ - tANI_U8 greenFieldCapable; - - /*MIMO Power Save mode*/ - tSirMacHTMIMOPowerSaveState mimoPS; - - /*Delayed BA Support*/ - tANI_U8 delayedBASupport; - - /*Max AMPDU duration in 32us*/ - tANI_U8 us32MaxAmpduDuration; - - /*HT STA should set it to 1 if it is enabled in BSS. HT STA should set - it to 0 if AP does not support it. This indication is sent to HAL and - HAL uses this flag to pickup up appropriate 40Mhz rates.*/ - tANI_U8 fDsssCckMode40Mhz; - - /* Valid STA Idx when action=Update. Set to 0xFF when invalid! - Retained for backward compalibity with existing HAL code*/ - tANI_U8 staIdx; - - /* BSSID of BSS to which station is associated. Set to 0xFF when invalid. - Retained for backward compalibity with existing HAL code*/ - tANI_U8 bssIdx; - - tANI_U8 p2pCapableSta; - - /*Reserved to align next field on a dword boundary*/ - tANI_U8 htLdpcEnabled:1; - tANI_U8 vhtLdpcEnabled:1; - tANI_U8 vhtTxBFEnabled:1; - tANI_U8 reserved:5; - - /*These rates are the intersection of peer and self capabilities.*/ - tSirSupportedRates_V1 supportedRates; - - tANI_U8 vhtCapable; - tANI_U8 vhtTxChannelWidthSet; - -} tConfigStaParams_V1, *tpConfigStaParams_V1; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - PACKED_PRE union PACKED_POST { - tConfigStaParams configStaParams; - tConfigStaParams_V1 configStaParams_V1; - } uStaParams; -} tConfigStaReqMsg, *tpConfigStaReqMsg; - -/*--------------------------------------------------------------------------- - WLAN_HAL_CONFIG_STA_RSP ----------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /*success or failure */ - tANI_U32 status; - - /* Station index; valid only when 'status' field value SUCCESS */ - tANI_U8 staIdx; - - /* BSSID Index of BSS to which the station is associated */ - tANI_U8 bssIdx; - - /* DPU Index for PTK */ - tANI_U8 dpuIndex; - - /* DPU Index for GTK */ - tANI_U8 bcastDpuIndex; - - /*DPU Index for IGTK */ - tANI_U8 bcastMgmtDpuIdx; - - /*PTK DPU signature*/ - tANI_U8 ucUcastSig; - - /*GTK DPU isignature*/ - tANI_U8 ucBcastSig; - - /* IGTK DPU signature*/ - tANI_U8 ucMgmtSig; - - tANI_U8 p2pCapableSta; - -}tConfigStaRspParams, *tpConfigStaRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tConfigStaRspParams configStaRspParams; -}tConfigStaRspMsg, *tpConfigStaRspMsg; - -/*--------------------------------------------------------------------------- - WLAN_HAL_DELETE_STA_REQ ----------------------------------------------------------------------------*/ - -/* Delete STA Request params */ -typedef PACKED_PRE struct PACKED_POST -{ - /* Index of STA to delete */ - tANI_U8 staIdx; -} tDeleteStaParams, *tpDeleteStaParams; - -/* Delete STA Request message*/ -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tDeleteStaParams delStaParams; -} tDeleteStaReqMsg, *tpDeleteStaReqMsg; - -/*--------------------------------------------------------------------------- - WLAN_HAL_DELETE_STA_RSP ----------------------------------------------------------------------------*/ - -/* Delete STA Response Params */ -typedef PACKED_PRE struct PACKED_POST -{ - /*success or failure */ - tANI_U32 status; - - /* Index of STA deleted */ - tANI_U8 staId; -} tDeleteStaRspParams, *tpDeleteStaRspParams; - -/* Delete STA Response message*/ -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tDeleteStaRspParams delStaRspParams; -} tDeleteStaRspMsg, *tpDeleteStaRspMsg; - -/*--------------------------------------------------------------------------- - WLAN_HAL_CONFIG_BSS_REQ ----------------------------------------------------------------------------*/ - -//12 Bytes long because this structure can be used to represent rate -//and extended rate set IEs. The parser assume this to be at least 12 -typedef __ani_attr_pre_packed struct sSirMacRateSet -{ - tANI_U8 numRates; - tANI_U8 rate[SIR_MAC_RATESET_EID_MAX]; -} __ani_attr_packed tSirMacRateSet; - -// access category record -typedef __ani_attr_pre_packed struct sSirMacAciAifsn -{ -#ifndef ANI_LITTLE_BIT_ENDIAN - tANI_U8 rsvd : 1; - tANI_U8 aci : 2; - tANI_U8 acm : 1; - tANI_U8 aifsn : 4; -#else - tANI_U8 aifsn : 4; - tANI_U8 acm : 1; - tANI_U8 aci : 2; - tANI_U8 rsvd : 1; -#endif -} __ani_attr_packed tSirMacAciAifsn; - -// contention window size -typedef __ani_attr_pre_packed struct sSirMacCW -{ -#ifndef ANI_LITTLE_BIT_ENDIAN - tANI_U8 max : 4; - tANI_U8 min : 4; -#else - tANI_U8 min : 4; - tANI_U8 max : 4; -#endif -} __ani_attr_packed tSirMacCW; - -typedef __ani_attr_pre_packed struct sSirMacEdcaParamRecord -{ - tSirMacAciAifsn aci; - tSirMacCW cw; - tANI_U16 txoplimit; -} __ani_attr_packed tSirMacEdcaParamRecord; - -typedef __ani_attr_pre_packed struct sSirMacSSid -{ - tANI_U8 length; - tANI_U8 ssId[32]; -} __ani_attr_packed tSirMacSSid; - -// Concurrency role. These are generic IDs that identify the various roles -// in the software system. -typedef enum { - HAL_STA_MODE=0, - HAL_STA_SAP_MODE=1, // to support softAp mode . This is misleading. It means AP MODE only. - HAL_P2P_CLIENT_MODE, - HAL_P2P_GO_MODE, - HAL_MONITOR_MODE, -} tHalConMode; - -//This is a bit pattern to be set for each mode -//bit 0 - sta mode -//bit 1 - ap mode -//bit 2 - p2p client mode -//bit 3 - p2p go mode -typedef enum -{ - HAL_STA=1, - HAL_SAP=2, - HAL_STA_SAP=3, //to support sta, softAp mode . This means STA+AP mode - HAL_P2P_CLIENT=4, - HAL_P2P_GO=8, - HAL_MAX_CONCURRENCY_PERSONA=4 -} tHalConcurrencyMode; - -// IFACE PERSONA for different Operating modes -typedef enum -{ - HAL_IFACE_UNKNOWN, - HAL_IFACE_STA_MODE, - HAL_IFACE_P2P_MODE, - HAL_IFACE_MAX -} tHalIfacePersona; - -typedef PACKED_PRE struct PACKED_POST -{ - /* BSSID */ - tSirMacAddr bssId; - - /* Self Mac Address */ - tSirMacAddr selfMacAddr; - - /* BSS type */ - tSirBssType bssType; - - /*Operational Mode: AP =0, STA = 1*/ - tANI_U8 operMode; - - /*Network Type*/ - tSirNwType nwType; - - /*Used to classify PURE_11G/11G_MIXED to program MTU*/ - tANI_U8 shortSlotTimeSupported; - - /*Co-exist with 11a STA*/ - tANI_U8 llaCoexist; - - /*Co-exist with 11b STA*/ - tANI_U8 llbCoexist; - - /*Co-exist with 11g STA*/ - tANI_U8 llgCoexist; - - /*Coexistence with 11n STA*/ - tANI_U8 ht20Coexist; - - /*Non GF coexist flag*/ - tANI_U8 llnNonGFCoexist; - - /*TXOP protection support*/ - tANI_U8 fLsigTXOPProtectionFullSupport; - - /*RIFS mode*/ - tANI_U8 fRIFSMode; - - /*Beacon Interval in TU*/ - tSirMacBeaconInterval beaconInterval; - - /*DTIM period*/ - tANI_U8 dtimPeriod; - - /*TX Width Set: 0 - 20 MHz only, 1 - 20/40 MHz*/ - tANI_U8 txChannelWidthSet; - - /*Operating channel*/ - tANI_U8 currentOperChannel; - - /*Extension channel for channel bonding*/ - tANI_U8 currentExtChannel; - - /*Reserved to align next field on a dword boundary*/ - tANI_U8 reserved; - - /*SSID of the BSS*/ - tSirMacSSid ssId; - - /*HAL should update the existing BSS entry, if this flag is set. - UMAC will set this flag in case of reassoc, where we want to resue the - the old BSSID and still return success 0 = Add, 1 = Update*/ - tANI_U8 action; - - /* MAC Rate Set */ - tSirMacRateSet rateSet; - - /*Enable/Disable HT capabilities of the BSS*/ - tANI_U8 htCapable; - - // Enable/Disable OBSS protection - tANI_U8 obssProtEnabled; - - /*RMF enabled/disabled*/ - tANI_U8 rmfEnabled; - - /*HT Operating Mode operating mode of the 802.11n STA*/ - tSirMacHTOperatingMode htOperMode; - - /*Dual CTS Protection: 0 - Unused, 1 - Used*/ - tANI_U8 dualCTSProtection; - - /* Probe Response Max retries */ - tANI_U8 ucMaxProbeRespRetryLimit; - - /* To Enable Hidden ssid */ - tANI_U8 bHiddenSSIDEn; - - /* To Enable Disable FW Proxy Probe Resp */ - tANI_U8 bProxyProbeRespEn; - - /* Boolean to indicate if EDCA params are valid. UMAC might not have valid - EDCA params or might not desire to apply EDCA params during config BSS. - 0 implies Not Valid ; Non-Zero implies valid*/ - tANI_U8 edcaParamsValid; - - /*EDCA Parameters for Best Effort Access Category*/ - tSirMacEdcaParamRecord acbe; - - /*EDCA Parameters forBackground Access Category*/ - tSirMacEdcaParamRecord acbk; - - /*EDCA Parameters for Video Access Category*/ - tSirMacEdcaParamRecord acvi; - - /*EDCA Parameters for Voice Access Category*/ - tSirMacEdcaParamRecord acvo; - -#ifdef WLAN_FEATURE_VOWIFI_11R - tANI_U8 extSetStaKeyParamValid; //Ext Bss Config Msg if set - tSetStaKeyParams extSetStaKeyParam; //SetStaKeyParams for ext bss msg -#endif - - /* Persona for the BSS can be STA,AP,GO,CLIENT value same as tHalConMode */ - tANI_U8 halPersona; - - tANI_U8 bSpectrumMgtEnable; - - /*HAL fills in the tx power used for mgmt frames in txMgmtPower*/ - tANI_S8 txMgmtPower; - /*maxTxPower has max power to be used after applying the power constraint if any */ - tANI_S8 maxTxPower; - /*Context of the station being added in HW - Add a STA entry for "itself" - - On AP - Add the AP itself in an "STA context" - On STA - Add the AP to which this STA is joining in an "STA context" */ - tConfigStaParams staContext; -} tConfigBssParams, * tpConfigBssParams; - - -/*-------------------------------------------------------------------------- - * WLAN_HAL_CONFIG_BSS_REQ - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /* BSSID */ - tSirMacAddr bssId; - - /* Self Mac Address */ - tSirMacAddr selfMacAddr; - - /* BSS type */ - tSirBssType bssType; - - /*Operational Mode: AP =0, STA = 1*/ - tANI_U8 operMode; - - /*Network Type*/ - tSirNwType nwType; - - /*Used to classify PURE_11G/11G_MIXED to program MTU*/ - tANI_U8 shortSlotTimeSupported; - - /*Co-exist with 11a STA*/ - tANI_U8 llaCoexist; - - /*Co-exist with 11b STA*/ - tANI_U8 llbCoexist; - - /*Co-exist with 11g STA*/ - tANI_U8 llgCoexist; - - /*Coexistence with 11n STA*/ - tANI_U8 ht20Coexist; - - /*Non GF coexist flag*/ - tANI_U8 llnNonGFCoexist; - - /*TXOP protection support*/ - tANI_U8 fLsigTXOPProtectionFullSupport; - /*RIFS mode*/ - tANI_U8 fRIFSMode; - - /*Beacon Interval in TU*/ - tSirMacBeaconInterval beaconInterval; - - /*DTIM period*/ - tANI_U8 dtimPeriod; - - /*TX Width Set: 0 - 20 MHz only, 1 - 20/40 MHz*/ - tANI_U8 txChannelWidthSet; - - /*Operating channel*/ - tANI_U8 currentOperChannel; - - /*Extension channel for channel bonding*/ - tANI_U8 currentExtChannel; - - /*Reserved to align next field on a dword boundary*/ - tANI_U8 reserved; - - /*SSID of the BSS*/ - tSirMacSSid ssId; - - /*HAL should update the existing BSS entry, if this flag is set. - UMAC will set this flag in case of reassoc, where we want to resue the - the old BSSID and still return success 0 = Add, 1 = Update*/ - tANI_U8 action; - - /* MAC Rate Set */ - tSirMacRateSet rateSet; - - /*Enable/Disable HT capabilities of the BSS*/ - tANI_U8 htCapable; - - // Enable/Disable OBSS protection - tANI_U8 obssProtEnabled; - - /*RMF enabled/disabled*/ - tANI_U8 rmfEnabled; - - /*HT Operating Mode operating mode of the 802.11n STA*/ - tSirMacHTOperatingMode htOperMode; - - /*Dual CTS Protection: 0 - Unused, 1 - Used*/ - tANI_U8 dualCTSProtection; - - /* Probe Response Max retries */ - tANI_U8 ucMaxProbeRespRetryLimit; - - /* To Enable Hidden ssid */ - tANI_U8 bHiddenSSIDEn; - - /* To Enable Disable FW Proxy Probe Resp */ - tANI_U8 bProxyProbeRespEn; - - /* Boolean to indicate if EDCA params are valid. UMAC might not have valid - EDCA params or might not desire to apply EDCA params during config BSS. - 0 implies Not Valid ; Non-Zero implies valid*/ - tANI_U8 edcaParamsValid; - - /*EDCA Parameters for Best Effort Access Category*/ - tSirMacEdcaParamRecord acbe; - - /*EDCA Parameters forBackground Access Category*/ - tSirMacEdcaParamRecord acbk; - - /*EDCA Parameters for Video Access Category*/ - tSirMacEdcaParamRecord acvi; - - /*EDCA Parameters for Voice Access Category*/ - tSirMacEdcaParamRecord acvo; - -#ifdef WLAN_FEATURE_VOWIFI_11R - tANI_U8 extSetStaKeyParamValid; //Ext Bss Config Msg if set - tSetStaKeyParams extSetStaKeyParam; //SetStaKeyParams for ext bss msg -#endif - - /* Persona for the BSS can be STA,AP,GO,CLIENT value same as tHalConMode */ - tANI_U8 halPersona; - - tANI_U8 bSpectrumMgtEnable; - - /*HAL fills in the tx power used for mgmt frames in txMgmtPower*/ - tANI_S8 txMgmtPower; - /*maxTxPower has max power to be used after applying the power constraint if any */ - tANI_S8 maxTxPower; - /*Context of the station being added in HW - Add a STA entry for "itself" - - On AP - Add the AP itself in an "STA context" - On STA - Add the AP to which this STA is joining in an "STA context" */ - tConfigStaParams_V1 staContext; - - tANI_U8 vhtCapable; - tANI_U8 vhtTxChannelWidthSet; -} tConfigBssParams_V1, * tpConfigBssParams_V1; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - PACKED_PRE union PACKED_POST { - tConfigBssParams configBssParams; - tConfigBssParams_V1 configBssParams_V1; - }uBssParams; -} tConfigBssReqMsg, *tpConfigBssReqMsg; - -/*--------------------------------------------------------------------------- - WLAN_HAL_CONFIG_BSS_RSP ----------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /* Success or Failure */ - tANI_U32 status; - - /* BSS index allocated by HAL */ - tANI_U8 bssIdx; - - /* DPU descriptor index for PTK */ - tANI_U8 dpuDescIndx; - - /* PTK DPU signature */ - tANI_U8 ucastDpuSignature; - - /* DPU descriptor index for GTK*/ - tANI_U8 bcastDpuDescIndx; - - /* GTK DPU signature */ - tANI_U8 bcastDpuSignature; - - /*DPU descriptor for IGTK*/ - tANI_U8 mgmtDpuDescIndx; - - /* IGTK DPU signature */ - tANI_U8 mgmtDpuSignature; - - /* Station Index for BSS entry*/ - tANI_U8 bssStaIdx; - - /* Self station index for this BSS */ - tANI_U8 bssSelfStaIdx; - - /* Bcast station for buffering bcast frames in AP role */ - tANI_U8 bssBcastStaIdx; - - /*MAC Address of STA(PEER/SELF) in staContext of configBSSReq*/ - tSirMacAddr staMac; - - /*HAL fills in the tx power used for mgmt frames in this field. */ - tANI_S8 txMgmtPower; - -} tConfigBssRspParams, * tpConfigBssRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tConfigBssRspParams configBssRspParams; -} tConfigBssRspMsg, *tpConfigBssRspMsg; - -/*--------------------------------------------------------------------------- - WLAN_HAL_DELETE_BSS_REQ ----------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /* BSS index to be deleted */ - tANI_U8 bssIdx; - -} tDeleteBssParams, *tpDeleteBssParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tDeleteBssParams deleteBssParams; -} tDeleteBssReqMsg, *tpDeleteBssReqMsg; - -/*--------------------------------------------------------------------------- - WLAN_HAL_DELETE_BSS_RSP ----------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /* Success or Failure */ - tANI_U32 status; - - /* BSS index that has been deleted */ - tANI_U8 bssIdx; - -} tDeleteBssRspParams, *tpDeleteBssRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tDeleteBssRspParams deleteBssRspParams; -} tDeleteBssRspMsg, *tpDeleteBssRspMsg; - -/*--------------------------------------------------------------------------- - WLAN_HAL_JOIN_REQ ----------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /*Indicates the BSSID to which STA is going to associate*/ - tSirMacAddr bssId; - - /*Indicates the channel to switch to.*/ - tANI_U8 ucChannel; - - /* Self STA MAC */ - tSirMacAddr selfStaMacAddr; - - /*Local power constraint*/ - tANI_U8 ucLocalPowerConstraint; - - /*Secondary channel offset */ - ePhyChanBondState secondaryChannelOffset; - - /*link State*/ - tSirLinkState linkState; - - /* Max TX power */ - tANI_S8 maxTxPower; - -} tHalJoinReqParams, *tpHalJoinReqParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalJoinReqParams joinReqParams; -} tHalJoinReqMsg, *tpHalJoinReqMsg; - -/*--------------------------------------------------------------------------- - WLAN_HAL_JOIN_RSP ----------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /*success or failure */ - tANI_U32 status; - - /* HAL fills in the tx power used for mgmt frames in this field */ - tPowerdBm txMgmtPower; - -}tHalJoinRspParams, *tpHalJoinRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalJoinRspParams joinRspParams; -}tHalJoinRspMsg, *tpHalJoinRspMsg; - -/*--------------------------------------------------------------------------- - WLAN_HAL_POST_ASSOC_REQ ----------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - tConfigStaParams configStaParams; - tConfigBssParams configBssParams; -} tPostAssocReqParams, *tpPostAssocReqParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tPostAssocReqParams postAssocReqParams; -} tPostAssocReqMsg, *tpPostAssocReqMsg; - -/*--------------------------------------------------------------------------- - WLAN_HAL_POST_ASSOC_RSP ----------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - tConfigStaRspParams configStaRspParams; - tConfigBssRspParams configBssRspParams; -} tPostAssocRspParams, *tpPostAssocRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tPostAssocRspParams postAssocRspParams; -} tPostAssocRspMsg, *tpPostAssocRspMsg; - -/*--------------------------------------------------------------------------- - WLAN_HAL_SET_BSSKEY_REQ ----------------------------------------------------------------------------*/ - -/* - * This is used by PE to create a set of WEP keys for a given BSS. - */ -typedef PACKED_PRE struct PACKED_POST -{ - /*BSS Index of the BSS*/ - tANI_U8 bssIdx; - - /*Encryption Type used with peer*/ - tAniEdType encType; - - /*Number of keys*/ - tANI_U8 numKeys; - - /*Array of keys.*/ - tSirKeys key[SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS]; - - /*Control for Replay Count, 1= Single TID based replay count on Tx - 0 = Per TID based replay count on TX */ - tANI_U8 singleTidRc; -} tSetBssKeyParams, *tpSetBssKeyParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tSetBssKeyParams setBssKeyParams; -} tSetBssKeyReqMsg, *tpSetBssKeyReqMsg; - -/* tagged version of set bss key */ -typedef PACKED_PRE struct PACKED_POST -{ - tSetBssKeyReqMsg Msg; - uint32 Tag; -} tSetBssKeyReqMsgTagged; - -/*--------------------------------------------------------------------------- - WLAN_HAL_SET_BSSKEY_RSP ----------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /*success or failure */ - tANI_U32 status; - -} tSetBssKeyRspParams, *tpSetBssKeyRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tSetBssKeyRspParams setBssKeyRspParams; -} tSetBssKeyRspMsg, *tpSetBssKeyRspMsg; - -/*--------------------------------------------------------------------------- - WLAN_HAL_SET_STAKEY_REQ, ----------------------------------------------------------------------------*/ - -/* - * This is used by PE to configure the key information on a given station. - * When the secType is WEP40 or WEP104, the defWEPIdx is used to locate - * a preconfigured key from a BSS the station assoicated with; otherwise - * a new key descriptor is created based on the key field. - */ - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tSetStaKeyParams setStaKeyParams; -} tSetStaKeyReqMsg, *tpSetStaKeyReqMsg; - -/*--------------------------------------------------------------------------- - WLAN_HAL_SET_STAKEY_RSP, ----------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /*success or failure */ - tANI_U32 status; - -} tSetStaKeyRspParams, *tpSetStaKeyRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tSetStaKeyRspParams setStaKeyRspParams; -} tSetStaKeyRspMsg, *tpSetStaKeyRspMsg; - -/*--------------------------------------------------------------------------- - WLAN_HAL_RMV_BSSKEY_REQ, ----------------------------------------------------------------------------*/ -/* - * This is used by PE to remove keys for a given BSS. - */ -typedef PACKED_PRE struct PACKED_POST - -{ - /*BSS Index of the BSS*/ - tANI_U8 bssIdx; - - /*Encryption Type used with peer*/ - tAniEdType encType; - - /*Key Id*/ - tANI_U8 keyId; - - /*STATIC/DYNAMIC. Used in Nullifying in Key Descriptors for Static/Dynamic keys*/ - tAniWepType wepType; - -} tRemoveBssKeyParams, *tpRemoveBssKeyParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tRemoveBssKeyParams removeBssKeyParams; -} tRemoveBssKeyReqMsg, *tpRemoveBssKeyReqMsg; - -/*--------------------------------------------------------------------------- - WLAN_HAL_RMV_BSSKEY_RSP, ----------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /*success or failure */ - tANI_U32 status; - -} tRemoveBssKeyRspParams, *tpRemoveBssKeyRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tRemoveBssKeyRspParams removeBssKeyRspParams; -} tRemoveBssKeyRspMsg, *tpRemoveBssKeyRspMsg; - -/*--------------------------------------------------------------------------- - WLAN_HAL_RMV_STAKEY_REQ, ----------------------------------------------------------------------------*/ -/* - * This is used by PE to Remove the key information on a given station. - */ -typedef PACKED_PRE struct PACKED_POST -{ - /*STA Index*/ - tANI_U16 staIdx; - - /*Encryption Type used with peer*/ - tAniEdType encType; - - /*Key Id*/ - tANI_U8 keyId; - - /*Whether to invalidate the Broadcast key or Unicast key. In case of WEP, - the same key is used for both broadcast and unicast.*/ - tANI_BOOLEAN unicast; - -} tRemoveStaKeyParams, *tpRemoveStaKeyParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tRemoveStaKeyParams removeStaKeyParams; -} tRemoveStaKeyReqMsg, *tpRemoveStaKeyReqMsg; - -/*--------------------------------------------------------------------------- - WLAN_HAL_RMV_STAKEY_RSP, ----------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /*success or failure */ - tANI_U32 status; -} tRemoveStaKeyRspParams, *tpRemoveStaKeyRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tRemoveStaKeyRspParams removeStaKeyRspParams; -} tRemoveStaKeyRspMsg, *tpRemoveStaKeyRspMsg; - -#ifdef FEATURE_OEM_DATA_SUPPORT - -#ifndef OEM_DATA_REQ_SIZE -#ifdef QCA_WIFI_2_0 -#define OEM_DATA_REQ_SIZE 276 -#else -#define OEM_DATA_REQ_SIZE 134 -#endif -#endif - -#ifndef OEM_DATA_RSP_SIZE -#ifdef QCA_WIFI_2_0 -#define OEM_DATA_RSP_SIZE 1720 -#else -#define OEM_DATA_RSP_SIZE 1968 -#endif -#endif - -/*------------------------------------------------------------------------- -WLAN_HAL_START_OEM_DATA_REQ ---------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U32 status; - tSirMacAddr selfMacAddr; - tANI_U8 oemDataReq[OEM_DATA_REQ_SIZE]; -} tStartOemDataReqParams, *tpStartOemDataReqParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tStartOemDataReqParams startOemDataReqParams; -} tStartOemDataReqMsg, *tpStartOemDataReqMsg; - -/*------------------------------------------------------------------------- -WLAN_HAL_START_OEM_DATA_RSP ---------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 oemDataRsp[OEM_DATA_RSP_SIZE]; -} tStartOemDataRspParams, *tpStartOemDataRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tStartOemDataRspParams startOemDataRspParams; -} tStartOemDataRspMsg, *tpStartOemDataRspMsg; - -#endif - - - -/*--------------------------------------------------------------------------- -WLAN_HAL_CH_SWITCH_REQ ----------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /* Channel number */ - tANI_U8 channelNumber; - - /* Local power constraint */ - tANI_U8 localPowerConstraint; - - /*Secondary channel offset */ - ePhyChanBondState secondaryChannelOffset; - - //HAL fills in the tx power used for mgmt frames in this field. - tPowerdBm txMgmtPower; - - /* Max TX power */ - tPowerdBm maxTxPower; - - /* Self STA MAC */ - tSirMacAddr selfStaMacAddr; - - /*VO WIFI comment: BSSID needed to identify session. As the request has power constraints, - this should be applied only to that session*/ - /* Since MTU timing and EDCA are sessionized, this struct needs to be sessionized and - * bssid needs to be out of the VOWifi feature flag */ - /* V IMP: Keep bssId field at the end of this msg. It is used to mantain backward compatbility - * by way of ignoring if using new host/old FW or old host/new FW since it is at the end of this struct - */ - tSirMacAddr bssId; - -}tSwitchChannelParams, *tpSwitchChannelParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tSwitchChannelParams switchChannelParams; -} tSwitchChannelReqMsg, *tpSwitchChannelReqMsg; - -/*--------------------------------------------------------------------------- -WLAN_HAL_CH_SWITCH_RSP ----------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /* Status */ - tANI_U32 status; - - /* Channel number - same as in request*/ - tANI_U8 channelNumber; - - /* HAL fills in the tx power used for mgmt frames in this field */ - tPowerdBm txMgmtPower; - - /* BSSID needed to identify session - same as in request*/ - tSirMacAddr bssId; - -}tSwitchChannelRspParams, *tpSwitchChannelRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tSwitchChannelRspParams switchChannelRspParams; -} tSwitchChannelRspMsg, *tpSwitchChannelRspMsg; - -/*--------------------------------------------------------------------------- -WLAN_HAL_UPD_EDCA_PARAMS_REQ ----------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /*BSS Index*/ - tANI_U16 bssIdx; - - /* Best Effort */ - tSirMacEdcaParamRecord acbe; - - /* Background */ - tSirMacEdcaParamRecord acbk; - - /* Video */ - tSirMacEdcaParamRecord acvi; - - /* Voice */ - tSirMacEdcaParamRecord acvo; - -} tEdcaParams, *tpEdcaParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tEdcaParams edcaParams; -} tUpdateEdcaParamsReqMsg, *tpUpdateEdcaParamsReqMsg; - -/*--------------------------------------------------------------------------- -WLAN_HAL_UPD_EDCA_PARAMS_RSP ----------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /*success or failure */ - tANI_U32 status; -} tEdcaRspParams, *tpEdcaRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tEdcaRspParams edcaRspParams; -} tUpdateEdcaParamsRspMsg, *tpUpdateEdcaParamsRspMsg; - - - -/*--------------------------------------------------------------------------- - * WLAN_HAL_GET_STATS_REQ - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST - -{ - /* Index of STA to which the statistics */ - tANI_U16 staIdx; - - /* Encryption mode */ - tANI_U8 encMode; - - /* status */ - tANI_U32 status; - - /* Statistics */ - tANI_U32 sendBlocks; - tANI_U32 recvBlocks; - tANI_U32 replays; - tANI_U8 micErrorCnt; - tANI_U32 protExclCnt; - tANI_U16 formatErrCnt; - tANI_U16 unDecryptableCnt; - tANI_U32 decryptErrCnt; - tANI_U32 decryptOkCnt; -} tDpuStatsParams, * tpDpuStatsParams; - -typedef PACKED_PRE struct PACKED_POST -{ - /* Valid STA Idx for per STA stats request */ - tANI_U32 staId; - - /* Categories of stats requested as specified in eHalStatsMask*/ - tANI_U32 statsMask; -}tHalStatsReqParams, *tpHalStatsReqParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalStatsReqParams statsReqParams; -} tHalStatsReqMsg, *tpHalStatsReqMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_GET_STATS_RSP - *--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U32 retry_cnt[4]; //Total number of packets(per AC) that were successfully transmitted with retries - tANI_U32 multiple_retry_cnt[4]; //The number of MSDU packets and MMPDU frames per AC that the 802.11 - // station successfully transmitted after more than one retransmission attempt - - tANI_U32 tx_frm_cnt[4]; //Total number of packets(per AC) that were successfully transmitted - //(with and without retries, including multi-cast, broadcast) - tANI_U32 rx_frm_cnt; //Total number of packets that were successfully received - //(after appropriate filter rules including multi-cast, broadcast) - tANI_U32 frm_dup_cnt; //Total number of duplicate frames received successfully - tANI_U32 fail_cnt[4]; //Total number packets(per AC) failed to transmit - tANI_U32 rts_fail_cnt; //Total number of RTS/CTS sequence failures for transmission of a packet - tANI_U32 ack_fail_cnt; //Total number packets failed transmit because of no ACK from the remote entity - tANI_U32 rts_succ_cnt; //Total number of RTS/CTS sequence success for transmission of a packet - tANI_U32 rx_discard_cnt; //The sum of the receive error count and dropped-receive-buffer error count. - //HAL will provide this as a sum of (FCS error) + (Fail get BD/PDU in HW) - tANI_U32 rx_error_cnt; //The receive error count. HAL will provide the RxP FCS error global counter. - tANI_U32 tx_byte_cnt; //The sum of the transmit-directed byte count, transmit-multicast byte count - //and transmit-broadcast byte count. HAL will sum TPE UC/MC/BCAST global counters - //to provide this. -}tAniSummaryStatsInfo, *tpAniSummaryStatsInfo; - - -// defines tx_rate_flags -typedef enum eTxRateInfo -{ - eHAL_TX_RATE_LEGACY = 0x1, /* Legacy rates */ - eHAL_TX_RATE_HT20 = 0x2, /* HT20 rates */ - eHAL_TX_RATE_HT40 = 0x4, /* HT40 rates */ - eHAL_TX_RATE_SGI = 0x8, /* Rate with Short guard interval */ - eHAL_TX_RATE_LGI = 0x10, /* Rate with Long guard interval */ - eHAL_TX_RATE_VHT20 = 0x20, /* VHT 20 rates */ - eHAL_TX_RATE_VHT40 = 0x40, /* VHT 20 rates */ - eHAL_TX_RATE_VHT80 = 0x80, /* VHT 20 rates */ - eHAL_TX_RATE_VIRT = 0x100, /* Virtual Rate */ - eHAL_TX_RATE_MAX = WLAN_HAL_MAX_ENUM_SIZE -} tTxrateinfoflags, tTxRateInfoFlags; - - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U32 rx_frag_cnt; //The number of MPDU frames received by the 802.11 station for MSDU packets - //or MMPDU frames - tANI_U32 promiscuous_rx_frag_cnt; //The number of MPDU frames received by the 802.11 station for MSDU packets - //or MMPDU frames when a promiscuous packet filter was enabled - tANI_U32 rx_input_sensitivity; //The receiver input sensitivity referenced to a FER of 8% at an MPDU length - //of 1024 bytes at the antenna connector. Each element of the array shall correspond - //to a supported rate and the order shall be the same as the supporteRates parameter. - tANI_U32 max_pwr; //The maximum transmit power in dBm upto one decimal. - //for eg: if it is 10.5dBm, the value would be 105 - tANI_U32 sync_fail_cnt; //Number of times the receiver failed to synchronize with the incoming signal - //after detecting the sync in the preamble of the transmitted PLCP protocol data unit. - - tANI_U32 tx_rate; //Legacy transmit rate, in units of 500 kbit/sec, for the most - //recently transmitted frame - tANI_U32 mcs_index; //mcs index for HT20 and HT40 rates - tANI_U32 tx_rate_flags; //to differentiate between HT20 and - //HT40 rates; short and long guard interval -}tAniGlobalClassAStatsInfo, *tpAniGlobalClassAStatsInfo; - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U32 rx_wep_unencrypted_frm_cnt; //The number of unencrypted received MPDU frames that the MAC layer discarded when - //the IEEE 802.11 dot11ExcludeUnencrypted management information base (MIB) object - //is enabled - tANI_U32 rx_mic_fail_cnt; //The number of received MSDU packets that that the 802.11 station discarded - //because of MIC failures - tANI_U32 tkip_icv_err; //The number of encrypted MPDU frames that the 802.11 station failed to decrypt - //because of a TKIP ICV error - tANI_U32 aes_ccmp_format_err; //The number of received MPDU frames that the 802.11 discarded because of an - //invalid AES-CCMP format - tANI_U32 aes_ccmp_replay_cnt; //The number of received MPDU frames that the 802.11 station discarded because of - //the AES-CCMP replay protection procedure - tANI_U32 aes_ccmp_decrpt_err; //The number of received MPDU frames that the 802.11 station discarded because of - //errors detected by the AES-CCMP decryption algorithm - tANI_U32 wep_undecryptable_cnt; //The number of encrypted MPDU frames received for which a WEP decryption key was - //not available on the 802.11 station - tANI_U32 wep_icv_err; //The number of encrypted MPDU frames that the 802.11 station failed to decrypt - //because of a WEP ICV error - tANI_U32 rx_decrypt_succ_cnt; //The number of received encrypted packets that the 802.11 station successfully - //decrypted - tANI_U32 rx_decrypt_fail_cnt; //The number of encrypted packets that the 802.11 station failed to decrypt - -}tAniGlobalSecurityStats, *tpAniGlobalSecurityStats; - -typedef PACKED_PRE struct PACKED_POST -{ - tAniGlobalSecurityStats ucStats; - tAniGlobalSecurityStats mcbcStats; -}tAniGlobalClassBStatsInfo, *tpAniGlobalClassBStatsInfo; - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U32 rx_amsdu_cnt; //This counter shall be incremented for a received A-MSDU frame with the stations - //MAC address in the address 1 field or an A-MSDU frame with a group address in the - //address 1 field - tANI_U32 rx_ampdu_cnt; //This counter shall be incremented when the MAC receives an AMPDU from the PHY - tANI_U32 tx_20_frm_cnt; //This counter shall be incremented when a Frame is transmitted only on the - //primary channel - tANI_U32 rx_20_frm_cnt; //This counter shall be incremented when a Frame is received only on the primary channel - tANI_U32 rx_mpdu_in_ampdu_cnt; //This counter shall be incremented by the number of MPDUs received in the A-MPDU - //when an A-MPDU is received - tANI_U32 ampdu_delimiter_crc_err; //This counter shall be incremented when an MPDU delimiter has a CRC error when this - //is the first CRC error in the received AMPDU or when the previous delimiter has been - //decoded correctly -}tAniGlobalClassCStatsInfo, *tpAniGlobalClassCStatsInfo; - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U32 tx_frag_cnt[4]; //The number of MPDU frames that the 802.11 station transmitted and acknowledged - //through a received 802.11 ACK frame - tANI_U32 tx_ampdu_cnt; //This counter shall be incremented when an A-MPDU is transmitted - tANI_U32 tx_mpdu_in_ampdu_cnt; //This counter shall increment by the number of MPDUs in the AMPDU when an A-MPDU - //is transmitted -}tAniPerStaStatsInfo, *tpAniPerStaStatsInfo; - -typedef PACKED_PRE struct PACKED_POST -{ - /* Success or Failure */ - tANI_U32 status; - - /* STA Idx */ - tANI_U32 staId; - - /* Categories of STATS being returned as per eHalStatsMask*/ - tANI_U32 statsMask; - - /* message type is same as the request type */ - tANI_U16 msgType; - - /* length of the entire request, includes the pStatsBuf length too */ - tANI_U16 msgLen; - -} tHalStatsRspParams, *tpHalStatsRspParams; - - - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalStatsRspParams statsRspParams; -} tHalStatsRspMsg, *tpHalStatsRspMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_SET_LINK_ST_REQ - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - tSirMacAddr bssid; - tSirLinkState state; - tSirMacAddr selfMacAddr; -} tLinkStateParams, *tpLinkStateParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tLinkStateParams linkStateParams; -} tSetLinkStateReqMsg, *tpSetLinkStateReqMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_SET_LINK_ST_RSP - *--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /*success or failure */ - tANI_U32 status; -} tLinkStateRspParams, *tpLinkStateRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tLinkStateRspParams linkStateRspParams; -} tSetLinkStateRspMsg, *tpSetLinkStateRspMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_ADD_TS_REQ - *--------------------------------------------------------------------------*/ - -/* TSPEC Params */ -typedef __ani_attr_pre_packed struct sSirMacTSInfoTfc -{ - tANI_U16 trafficType : 1; - tANI_U16 tsid : 4; - tANI_U16 direction : 2; - tANI_U16 accessPolicy : 2; - tANI_U16 aggregation : 1; - tANI_U16 psb : 1; - tANI_U16 userPrio : 3; - tANI_U16 ackPolicy : 2; -} __ani_attr_packed tSirMacTSInfoTfc; - -/* Flag to schedule the traffic type */ -typedef __ani_attr_pre_packed struct sSirMacTSInfoSch -{ - tANI_U8 schedule : 1; - tANI_U8 rsvd : 7; -} __ani_attr_packed tSirMacTSInfoSch; - -/* Traffic and scheduling info */ -typedef __ani_attr_pre_packed struct sSirMacTSInfo -{ - tSirMacTSInfoTfc traffic; - tSirMacTSInfoSch schedule; -} __ani_attr_packed tSirMacTSInfo; - -/* Information elements */ -typedef __ani_attr_pre_packed struct sSirMacTspecIE -{ - tANI_U8 type; - tANI_U8 length; - tSirMacTSInfo tsinfo; - tANI_U16 nomMsduSz; - tANI_U16 maxMsduSz; - tANI_U32 minSvcInterval; - tANI_U32 maxSvcInterval; - tANI_U32 inactInterval; - tANI_U32 suspendInterval; - tANI_U32 svcStartTime; - tANI_U32 minDataRate; - tANI_U32 meanDataRate; - tANI_U32 peakDataRate; - tANI_U32 maxBurstSz; - tANI_U32 delayBound; - tANI_U32 minPhyRate; - tANI_U16 surplusBw; - tANI_U16 mediumTime; -}__ani_attr_packed tSirMacTspecIE; - -typedef PACKED_PRE struct PACKED_POST -{ - /* Station Index */ - tANI_U16 staIdx; - - /* TSPEC handler uniquely identifying a TSPEC for a STA in a BSS */ - tANI_U16 tspecIdx; - - /* To program TPE with required parameters */ - tSirMacTspecIE tspec; - - /* U-APSD Flags: 1b per AC. Encoded as follows: - b7 b6 b5 b4 b3 b2 b1 b0 = - X X X X BE BK VI VO */ - tANI_U8 uAPSD; - - /* These parameters are for all the access categories */ - tANI_U32 srvInterval[WLAN_HAL_MAX_AC]; // Service Interval - tANI_U32 susInterval[WLAN_HAL_MAX_AC]; // Suspend Interval - tANI_U32 delayInterval[WLAN_HAL_MAX_AC]; // Delay Interval - -} tAddTsParams, *tpAddTsParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tAddTsParams addTsParams; -} tAddTsReqMsg, *tpAddTsReqMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_ADD_TS_RSP - *--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /*success or failure */ - tANI_U32 status; -} tAddTsRspParams, *tpAddTsRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tAddTsRspParams addTsRspParams; -} tAddTsRspMsg, *tpAddTsRspMsg; - - -/*--------------------------------------------------------------------------- - * WLAN_HAL_DEL_TS_REQ - *--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /* Station Index */ - tANI_U16 staIdx; - - /* TSPEC identifier uniquely identifying a TSPEC for a STA in a BSS */ - tANI_U16 tspecIdx; - - /* To lookup station id using the mac address */ - tSirMacAddr bssId; - -} tDelTsParams, *tpDelTsParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tDelTsParams delTsParams; -} tDelTsReqMsg, *tpDelTsReqMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_DEL_TS_RSP - *--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /*success or failure */ - tANI_U32 status; -} tDelTsRspParams, *tpDelTsRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tDelTsRspParams delTsRspParams; -} tDelTsRspMsg, *tpDelTsRspMsg; - -/* End of TSpec Parameters */ - -/* Start of BLOCK ACK related Parameters */ - -/*--------------------------------------------------------------------------- - * WLAN_HAL_ADD_BA_SESSION_REQ - *--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /* Station Index */ - tANI_U16 staIdx; - - /* Peer MAC Address */ - tSirMacAddr peerMacAddr; - - /* ADDBA Action Frame dialog token - HAL will not interpret this object */ - tANI_U8 baDialogToken; - - /* TID for which the BA is being setup - This identifies the TC or TS of interest */ - tANI_U8 baTID; - - /* 0 - Delayed BA (Not supported) - 1 - Immediate BA */ - tANI_U8 baPolicy; - - /* Indicates the number of buffers for this TID (baTID) - NOTE - This is the requested buffer size. When this - is processed by HAL and subsequently by HDD, it is - possible that HDD may change this buffer size. Any - change in the buffer size should be noted by PE and - advertized appropriately in the ADDBA response */ - tANI_U16 baBufferSize; - - /* BA timeout in TU's 0 means no timeout will occur */ - tANI_U16 baTimeout; - - /* b0..b3 - Fragment Number - Always set to 0 - b4..b15 - Starting Sequence Number of first MSDU - for which this BA is setup */ - tANI_U16 baSSN; - - /* ADDBA direction - 1 - Originator - 0 - Recipient */ - tANI_U8 baDirection; -} tAddBASessionParams, *tpAddBASessionParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tAddBASessionParams addBASessionParams; -}tAddBASessionReqMsg, *tpAddBASessionReqMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_ADD_BA_SESSION_RSP - *--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /*success or failure */ - tANI_U32 status; - - /* Dialog token */ - tANI_U8 baDialogToken; - - /* TID for which the BA session has been setup */ - tANI_U8 baTID; - - /* BA Buffer Size allocated for the current BA session */ - tANI_U8 baBufferSize; - - tANI_U8 baSessionID; - - /* Reordering Window buffer */ - tANI_U8 winSize; - - /*Station Index to id the sta */ - tANI_U8 STAID; - - /* Starting Sequence Number */ - tANI_U16 SSN; -} tAddBASessionRspParams, *tpAddBASessionRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tAddBASessionRspParams addBASessionRspParams; -} tAddBASessionRspMsg, *tpAddBASessionRspMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_ADD_BA_REQ - *--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /* Session Id */ - tANI_U8 baSessionID; - - /* Reorder Window Size */ - tANI_U8 winSize; - -#ifdef FEATURE_ON_CHIP_REORDERING - tANI_BOOLEAN isReorderingDoneOnChip; -#endif -} tAddBAParams, *tpAddBAParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tAddBAParams addBAParams; -} tAddBAReqMsg, *tpAddBAReqMsg; - - -/*--------------------------------------------------------------------------- - * WLAN_HAL_ADD_BA_RSP - *--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /*success or failure */ - tANI_U32 status; - - /* Dialog token */ - tANI_U8 baDialogToken; - -} tAddBARspParams, *tpAddBARspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tAddBARspParams addBARspParams; -} tAddBARspMsg, *tpAddBARspMsg; - - -/*--------------------------------------------------------------------------- - * WLAN_HAL_TRIGGER_BA_REQ - *--------------------------------------------------------------------------*/ - - -typedef struct sAddBaInfo -{ - tANI_U16 fBaEnable : 1; - tANI_U16 startingSeqNum: 12; - tANI_U16 reserved : 3; -}tAddBaInfo, *tpAddBaInfo; - -typedef struct sTriggerBaRspCandidate -{ - tSirMacAddr staAddr; - tAddBaInfo baInfo[STACFG_MAX_TC]; -}tTriggerBaRspCandidate, *tpTriggerBaRspCandidate; - -typedef struct sTriggerBaCandidate -{ - tANI_U8 staIdx; - tANI_U8 tidBitmap; -}tTriggerBaReqCandidate, *tptTriggerBaReqCandidate; - -typedef PACKED_PRE struct PACKED_POST -{ - /* Session Id */ - tANI_U8 baSessionID; - - /* baCandidateCnt is followed by trigger BA - * Candidate List(tTriggerBaCandidate) - */ - tANI_U16 baCandidateCnt; - -} tTriggerBAParams, *tpTriggerBAParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tTriggerBAParams triggerBAParams; -} tTriggerBAReqMsg, *tpTriggerBAReqMsg; - - -/*--------------------------------------------------------------------------- - * WLAN_HAL_TRIGGER_BA_RSP - *--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - - /* TO SUPPORT BT-AMP */ - tSirMacAddr bssId; - - /* success or failure */ - tANI_U32 status; - - /* baCandidateCnt is followed by trigger BA - * Rsp Candidate List(tTriggerRspBaCandidate) - */ - tANI_U16 baCandidateCnt; - - -} tTriggerBARspParams, *tpTriggerBARspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tTriggerBARspParams triggerBARspParams; -} tTriggerBARspMsg, *tpTriggerBARspMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_DEL_BA_REQ - *--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /* Station Index */ - tANI_U16 staIdx; - - /* TID for which the BA session is being deleted */ - tANI_U8 baTID; - - /* DELBA direction - 1 - Originator - 0 - Recipient */ - tANI_U8 baDirection; -} tDelBAParams, *tpDelBAParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tDelBAParams delBAParams; -} tDelBAReqMsg, *tpDelBAReqMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_DEL_BA_RSP - *--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; -} tDelBARspParams, *tpDelBARspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tDelBARspParams delBARspParams; -} tDelBARspMsg, *tpDelBARspMsg; - - -#ifdef FEATURE_WLAN_CCX - -/*--------------------------------------------------------------------------- - * WLAN_HAL_TSM_STATS_REQ - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /* Traffic Id */ - tANI_U8 tsmTID; - - tSirMacAddr bssId; -} tTsmStatsParams, *tpTsmStatsParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tTsmStatsParams tsmStatsParams; -} tTsmStatsReqMsg, *tpTsmStatsReqMsg; - - -/*--------------------------------------------------------------------------- - * WLAN_HAL_TSM_STATS_RSP - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /*success or failure */ - tANI_U32 status; - - /* Uplink Packet Queue delay */ - tANI_U16 UplinkPktQueueDly; - - /* Uplink Packet Queue delay histogram */ - tANI_U16 UplinkPktQueueDlyHist[4]; - - /* Uplink Packet Transmit delay */ - tANI_U32 UplinkPktTxDly; - - /* Uplink Packet loss */ - tANI_U16 UplinkPktLoss; - - /* Uplink Packet count */ - tANI_U16 UplinkPktCount; - - /* Roaming count */ - tANI_U8 RoamingCount; - - /* Roaming Delay */ - tANI_U16 RoamingDly; -} tTsmStatsRspParams, *tpTsmStatsRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tTsmStatsRspParams tsmStatsRspParams; -} tTsmStatsRspMsg, *tpTsmStatsRspMsg; - - -#endif - -/*--------------------------------------------------------------------------- - * WLAN_HAL_SET_KEYDONE_MSG - *--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /*bssid of the keys */ - tANI_U8 bssidx; - tANI_U8 encType; -} tSetKeyDoneParams, *tpSetKeyDoneParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tSetKeyDoneParams setKeyDoneParams; -} tSetKeyDoneMsg, *tpSetKeyDoneMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_DOWNLOAD_NV_REQ - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /* Fragment sequence number of the NV Image. Note that NV Image might not - * fit into one message due to size limitation of the SMD channel FIFO. UMAC - * can hence choose to chop the NV blob into multiple fragments starting with - * seqeunce number 0, 1, 2 etc. The last fragment MUST be indicated by - * marking the isLastFragment field to 1. Note that all the NV blobs would be - * concatenated together by HAL without any padding bytes in between.*/ - tANI_U16 fragNumber; - - /* Is this the last fragment? When set to 1 it indicates that no more fragments - * will be sent by UMAC and HAL can concatenate all the NV blobs rcvd & proceed - * with the parsing. HAL would generate a WLAN_HAL_DOWNLOAD_NV_RSP to the - * WLAN_HAL_DOWNLOAD_NV_REQ after it receives each fragment */ - tANI_U16 isLastFragment; - - /* NV Image size (number of bytes) */ - tANI_U32 nvImgBufferSize; - - /* Following the 'nvImageBufferSize', there should be nvImageBufferSize - * bytes of NV Image i.e. uint8[nvImageBufferSize] */ -} tHalNvImgDownloadReqParams, *tpHalNvImgDownloadReqParams; - -typedef PACKED_PRE struct PACKED_POST -{ - /* Note: The length specified in tHalNvImgDownloadReqMsg messages should be - * header.msgLen = sizeof(tHalNvImgDownloadReqMsg) + nvImgBufferSize */ - tHalMsgHeader header; - tHalNvImgDownloadReqParams nvImageReqParams; -} tHalNvImgDownloadReqMsg, *tpHalNvImgDownloadReqMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_DOWNLOAD_NV_RSP - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /* Success or Failure. HAL would generate a WLAN_HAL_DOWNLOAD_NV_RSP - * after each fragment */ - tANI_U32 status; -} tHalNvImgDownloadRspParams, *tpHalNvImgDownloadRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalNvImgDownloadRspParams nvImageRspParams; -} tHalNvImgDownloadRspMsg, *tpHalNvImgDownloadRspMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_STORE_NV_IND - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /* NV Item */ - eNvTable tableID; - - /* Size of NV Blob */ - tANI_U32 nvBlobSize; - - /* Following the 'nvBlobSize', there should be nvBlobSize bytes of - * NV blob i.e. uint8[nvBlobSize] */ -} tHalNvStoreParams, *tpHalNvStoreParams; - -typedef PACKED_PRE struct PACKED_POST -{ - /* Note: The length specified in tHalNvStoreInd messages should be - * header.msgLen = sizeof(tHalNvStoreInd) + nvBlobSize */ - tHalMsgHeader header; - tHalNvStoreParams nvStoreParams; -} tHalNvStoreInd, *tpHalNvStoreInd; - -/* End of Block Ack Related Parameters */ - -/*--------------------------------------------------------------------------- - * WLAN_HAL_MIC_FAILURE_IND - *--------------------------------------------------------------------------*/ - -#define SIR_CIPHER_SEQ_CTR_SIZE 6 - -typedef PACKED_PRE struct PACKED_POST -{ - tSirMacAddr srcMacAddr; //address used to compute MIC - tSirMacAddr taMacAddr; //transmitter address - tSirMacAddr dstMacAddr; - tANI_U8 multicast; - tANI_U8 IV1; // first byte of IV - tANI_U8 keyId; // second byte of IV - tANI_U8 TSC[SIR_CIPHER_SEQ_CTR_SIZE]; // sequence number - tSirMacAddr rxMacAddr; // receive address -} tSirMicFailureInfo, *tpSirMicFailureInfo; - -/* Definition for MIC failure indication - MAC reports this each time a MIC failure occures on Rx TKIP packet - */ -typedef PACKED_PRE struct PACKED_POST -{ - tSirMacAddr bssId; // BSSID - tSirMicFailureInfo info; -} tSirMicFailureInd, *tpSirMicFailureInd; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tSirMicFailureInd micFailureInd; -} tMicFailureIndMsg, *tpMicFailureIndMsg; - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U16 opMode; - tANI_U16 staId; -}tUpdateVHTOpMode, *tpUpdateVHTOpMode; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tUpdateVHTOpMode updateVhtOpMode; -} tUpdateVhtOpModeReqMsg, *tpUpdateVhtOpModeReqMsg; - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U32 status; -} tUpdateVhtOpModeParamsRsp, *tpUpdateVhtOpModeParamsRsp; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tUpdateVhtOpModeParamsRsp updateVhtOpModeRspParam; -} tUpdateVhtOpModeParamsRspMsg, *tpUpdateVhtOpModeParamsRspMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_UPDATE_BEACON_REQ - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - - tANI_U8 bssIdx; - - //shortPreamble mode. HAL should update all the STA rates when it - //receives this message - tANI_U8 fShortPreamble; - //short Slot time. - tANI_U8 fShortSlotTime; - //Beacon Interval - tANI_U16 beaconInterval; - //Protection related - tANI_U8 llaCoexist; - tANI_U8 llbCoexist; - tANI_U8 llgCoexist; - tANI_U8 ht20MhzCoexist; - tANI_U8 llnNonGFCoexist; - tANI_U8 fLsigTXOPProtectionFullSupport; - tANI_U8 fRIFSMode; - - tANI_U16 paramChangeBitmap; -}tUpdateBeaconParams, *tpUpdateBeaconParams; - - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tUpdateBeaconParams updateBeaconParam; -} tUpdateBeaconReqMsg, *tpUpdateBeaconReqMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_UPDATE_BEACON_RSP - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U32 status; -} tUpdateBeaconRspParams, *tpUpdateBeaconRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tUpdateBeaconRspParams updateBeaconRspParam; -} tUpdateBeaconRspMsg, *tpUpdateBeaconRspMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_SEND_BEACON_REQ - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U32 beaconLength; //length of the template. - tANI_U8 beacon[BEACON_TEMPLATE_SIZE]; // Beacon data. - tSirMacAddr bssId; - tANI_U32 timIeOffset; //TIM IE offset from the beginning of the template. - tANI_U16 p2pIeOffset; //P2P IE offset from the begining of the template -}tSendBeaconParams, *tpSendBeaconParams; - - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tSendBeaconParams sendBeaconParam; -}tSendBeaconReqMsg, *tpSendBeaconReqMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_SEND_BEACON_RSP - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U32 status; -} tSendBeaconRspParams, *tpSendBeaconRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tSendBeaconRspParams sendBeaconRspParam; -} tSendBeaconRspMsg, *tpSendBeaconRspMsg; - -#ifdef FEATURE_5GHZ_BAND - -/*--------------------------------------------------------------------------- - * WLAN_HAL_ENABLE_RADAR_DETECT_REQ - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - tSirMacAddr BSSID; - tANI_U8 channel; -}tSirEnableRadarInfoType, *tptSirEnableRadarInfoType; - - -typedef PACKED_PRE struct PACKED_POST -{ - /* Link Parameters */ - tSirEnableRadarInfoType EnableRadarInfo; -}tEnableRadarReqParams, *tpEnableRadarReqParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tEnableRadarReqParams enableRadarReqParams; -}tEnableRadarReqMsg, *tpEnableRadarReqMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_ENABLE_RADAR_DETECT_RSP - *--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /* Link Parameters */ - tSirMacAddr BSSID; - /* success or failure */ - tANI_U32 status; -}tEnableRadarRspParams, *tpEnableRadarRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tEnableRadarRspParams enableRadarRspParams; -}tEnableRadarRspMsg, *tpEnableRadarRspMsg; - -/*--------------------------------------------------------------------------- - *WLAN_HAL_RADAR_DETECT_INTR_IND - *--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 radarDetChannel; -}tRadarDetectIntrIndParams, *tpRadarDetectIntrIndParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tRadarDetectIntrIndParams radarDetectIntrIndParams; -}tRadarDetectIntrIndMsg, *tptRadarDetectIntrIndMsg; - -/*--------------------------------------------------------------------------- - *WLAN_HAL_RADAR_DETECT_IND - *-------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /*channel number in which the RADAR detected*/ - tANI_U8 channelNumber; - - /*RADAR pulse width*/ - tANI_U16 radarPulseWidth; // in usecond - - /*Number of RADAR pulses */ - tANI_U16 numRadarPulse; -}tRadarDetectIndParams,*tpRadarDetectIndParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tRadarDetectIndParams radarDetectIndParams; -}tRadarDetectIndMsg, *tptRadarDetectIndMsg; - - -/*--------------------------------------------------------------------------- - *WLAN_HAL_GET_TPC_REPORT_REQ - *-------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - tSirMacAddr sta; - tANI_U8 dialogToken; - tANI_U8 txpower; -}tSirGetTpcReportReqParams, *tpSirGetTpcReportReqParams; - - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tSirGetTpcReportReqParams getTpcReportReqParams; -}tSirGetTpcReportReqMsg, *tpSirGetTpcReportReqMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_GET_TPC_REPORT_RSP - *--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; -}tSirGetTpcReportRspParams, *tpSirGetTpcReportRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tSirGetTpcReportRspParams getTpcReportRspParams; -}tSirGetTpcReportRspMsg, *tpSirGetTpcReportRspMsg; - -#endif - -/*--------------------------------------------------------------------------- - *WLAN_HAL_UPDATE_PROBE_RSP_TEMPLATE_REQ - *-------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 pProbeRespTemplate[BEACON_TEMPLATE_SIZE]; - tANI_U32 probeRespTemplateLen; - tANI_U32 ucProxyProbeReqValidIEBmap[8]; - tSirMacAddr bssId; - -}tSendProbeRespReqParams, *tpSendProbeRespReqParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tSendProbeRespReqParams sendProbeRespReqParams ; -}tSendProbeRespReqMsg, *tpSendProbeRespReqMsg; - -/*--------------------------------------------------------------------------- - *WLAN_HAL_UPDATE_PROBE_RSP_TEMPLATE_RSP - *--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; -}tSendProbeRespRspParams, *tpSendProbeRespRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tSendProbeRespRspParams sendProbeRespRspParams; -}tSendProbeRespRspMsg, *tpSendProbeRespRspMsg; - - -/*--------------------------------------------------------------------------- - *WLAN_HAL_UNKNOWN_ADDR2_FRAME_RX_IND - *--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; -}tSendUnkownFrameRxIndParams, *tpSendUnkownFrameRxIndParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tSendUnkownFrameRxIndParams sendUnkownFrameRxIndParams; -}tSendUnkownFrameRxIndMsg, *tpSendUnkownFrameRxIndMsg; - -/*--------------------------------------------------------------------------- - *WLAN_HAL_DELETE_STA_CONTEXT_IND - *--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U16 assocId; - tANI_U16 staId; - tSirMacAddr bssId; // TO SUPPORT BT-AMP - // HAL copies bssid from the sta table. - tSirMacAddr addr2; // - tANI_U16 reasonCode; // To unify the keepalive / unknown A2 / tim-based disa - -}tDeleteStaContextParams, *tpDeleteStaContextParams; - - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tDeleteStaContextParams deleteStaContextParams; -}tDeleteStaContextIndMsg, *tpDeleteStaContextIndMsg; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tANI_U8 assocId; - tANI_U8 staIdx; - tANI_U8 bssIdx; - tANI_U8 uReasonCode; - tANI_U32 uStatus; -} tIndicateDelSta, *tpIndicateDelSta; - -/*--------------------------------------------------------------------------- - *WLAN_HAL_SIGNAL_BTAMP_EVENT_REQ - *--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - tBtAmpEventType btAmpEventType; - -}tBtAmpEventParams, *tpBtAmpEventParams; - - - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tBtAmpEventParams btAmpEventParams; -}tBtAmpEventMsg, *tpBtAmpEventMsg; - -/*--------------------------------------------------------------------------- -*WLAN_HAL_SIGNAL_BTAMP_EVENT_RSP -*--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; -}tBtAmpEventRspParams, *tpBtAmpEventRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tBtAmpEventRspParams btAmpEventRspParams; -}tBtAmpEventRsp, *tpBtAmpEventRsp; - - -/*--------------------------------------------------------------------------- - *WLAN_HAL_TL_HAL_FLUSH_AC_REQ - *--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - // Station Index. originates from HAL - tANI_U8 ucSTAId; - - // TID for which the transmit queue is being flushed - tANI_U8 ucTid; - -}tTlHalFlushAcParams, *tpTlHalFlushAcParams; - - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tTlHalFlushAcParams tlHalFlushAcParam; -}tTlHalFlushAcReq, *tpTlHalFlushAcReq; - -/*--------------------------------------------------------------------------- -*WLAN_HAL_TL_HAL_FLUSH_AC_RSP -*--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - // Station Index. originates from HAL - tANI_U8 ucSTAId; - - // TID for which the transmit queue is being flushed - tANI_U8 ucTid; - - /* success or failure */ - tANI_U32 status; -}tTlHalFlushAcRspParams, *tpTlHalFlushAcRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tTlHalFlushAcRspParams tlHalFlushAcRspParam; -}tTlHalFlushAcRspMsg, *tpTlHalFlushAcRspMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_ENTER_IMPS_REQ - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; -} tHalEnterImpsReqMsg, *tpHalEnterImpsReqMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_EXIT_IMPS_REQ - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; -} tHalExitImpsReqMsg, *tpHalExitImpsReqMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_ENTER_BMPS_REQ - *--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 bssIdx; - //TBTT value derived from the last beacon -#ifndef BUILD_QWPTTSTATIC - tANI_U64 tbtt; -#endif - tANI_U8 dtimCount; - //DTIM period given to HAL during association may not be valid, - //if association is based on ProbeRsp instead of beacon. - tANI_U8 dtimPeriod; - - // For CCX and 11R Roaming - tANI_U32 rssiFilterPeriod; - tANI_U32 numBeaconPerRssiAverage; - tANI_U8 bRssiFilterEnable; - -} tHalEnterBmpsReqParams, *tpHalEnterBmpsReqParams; - - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalEnterBmpsReqParams enterBmpsReq; -} tHalEnterBmpsReqMsg, *tpHalEnterBmpsReqMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_EXIT_BMPS_REQ - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 sendDataNull; - tANI_U8 bssIdx; -} tHalExitBmpsReqParams, *tpHalExitBmpsReqParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalExitBmpsReqParams exitBmpsReqParams; -} tHalExitBmpsReqMsg, *tpHalExitBmpsReqMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_MISSED_BEACON_IND - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 bssIdx; -} tHalMissedBeaconIndParams, *tpHalMissedBeaconIndParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalMissedBeaconIndParams missedBeaconIndParams; -} tHalMissedBeaconIndMsg, *tpHalMissedBeaconIndMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_ADD_BCN_FILTER_REQ - *--------------------------------------------------------------------------*/ -/* Beacon Filtering data structures */ -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 offset; - tANI_U8 value; - tANI_U8 bitMask; - tANI_U8 ref; -} tEidByteInfo, *tpEidByteInfo; - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U16 capabilityInfo; - tANI_U16 capabilityMask; - tANI_U16 beaconInterval; - tANI_U16 ieNum; - tANI_U8 bssIdx; - tANI_U8 reserved; -} tBeaconFilterMsg, *tpBeaconFilterMsg; - -/* The above structure would be followed by multiple of below mentioned structure */ -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 elementId; - tANI_U8 checkIePresence; - tEidByteInfo byte; -} tBeaconFilterIe, *tpBeaconFilterIe; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tBeaconFilterMsg addBcnFilterParams; -} tHalAddBcnFilterReqMsg, *tpHalAddBcnFilterReqMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_REM_BCN_FILTER_REQ - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 ucIeCount; - tANI_U8 ucRemIeId[1]; -} tRemBeaconFilterMsg, *tpRemBeaconFilterMsg; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tRemBeaconFilterMsg remBcnFilterParams; -} tHalRemBcnFilterReqMsg, *tpHalRemBcnFilterReqMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_HOST_OFFLOAD_REQ - *--------------------------------------------------------------------------*/ -#define HAL_IPV4_ARP_REPLY_OFFLOAD 0 -#define HAL_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD 1 -#define HAL_IPV6_NS_OFFLOAD 2 -#define HAL_IPV6_ADDR_LEN 16 -#define HAL_MAC_ADDR_LEN 6 -#define HAL_OFFLOAD_DISABLE 0 -#define HAL_OFFLOAD_ENABLE 1 -#define HAL_OFFLOAD_BCAST_FILTER_ENABLE 0x2 -#define HAL_OFFLOAD_MCAST_FILTER_ENABLE 0x4 -#define HAL_OFFLOAD_ARP_AND_BCAST_FILTER_ENABLE (HAL_OFFLOAD_ENABLE|HAL_OFFLOAD_BCAST_FILTER_ENABLE) -#define HAL_OFFLOAD_IPV6NS_AND_MCAST_FILTER_ENABLE (HAL_OFFLOAD_ENABLE|HAL_OFFLOAD_MCAST_FILTER_ENABLE) - -typedef PACKED_PRE struct PACKED_POST _tHalNSOffloadParams -{ - tANI_U8 srcIPv6Addr[HAL_IPV6_ADDR_LEN]; - tANI_U8 selfIPv6Addr[HAL_IPV6_ADDR_LEN]; - //Only support 2 possible Network Advertisement IPv6 address - tANI_U8 targetIPv6Addr1[HAL_IPV6_ADDR_LEN]; - tANI_U8 targetIPv6Addr2[HAL_IPV6_ADDR_LEN]; - tANI_U8 selfMacAddr[HAL_MAC_ADDR_LEN]; - tANI_U8 srcIPv6AddrValid : 1; - tANI_U8 targetIPv6Addr1Valid : 1; - tANI_U8 targetIPv6Addr2Valid : 1; - tANI_U8 reserved1 : 5; - tANI_U8 reserved2; //make it DWORD aligned - tANI_U8 bssIdx; - tANI_U32 slotIndex; // slot index for this offload -} tHalNSOffloadParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 offloadType; - tANI_U8 enableOrDisable; - PACKED_PRE union PACKED_POST - { - tANI_U8 hostIpv4Addr [4]; - tANI_U8 hostIpv6Addr [HAL_IPV6_ADDR_LEN]; - } params; -} tHalHostOffloadReq, *tpHalHostOffloadReq; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalHostOffloadReq hostOffloadParams; - tHalNSOffloadParams nsOffloadParams; -} tHalHostOffloadReqMsg, *tpHalHostOffloadReqMsg; - - -#ifdef FEATURE_WLAN_LPHB -typedef enum -{ - WIFI_HB_SET_ENABLE = 0x0001, - WIFI_HB_SET_TCP_PARAMS = 0x0002, - WIFI_HB_SET_TCP_PKT_FILTER = 0x0003, - WIFI_HB_SET_UDP_PARAMS = 0x0004, - WIFI_HB_SET_UDP_PKT_FILTER = 0x0005, - WIFI_HB_SET_NETWORK_INFO = 0x0006, -}tLowPowerHeartBeatCmdType ; - -#define MAX_FLITER_SIZE 64 -/*--------------------------------------------------------------------------- - *FEATURE_WLAN_LPHB REQ - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - uint32 hostIpv4Addr; - uint32 destIpv4Addr; - uint16 hostPort; - uint16 destPort; - uint16 timeOutSec; // in seconds - tSirMacAddr gatewayMacAddr; - uint16 timePeriodSec; // in seconds - uint32 tcpSn; -} tlowPowerHeartBeatParamsTcpStruct; - -typedef PACKED_PRE struct PACKED_POST -{ - uint32 hostIpv4Addr; - uint32 destIpv4Addr; - uint16 hostPort; - uint16 destPort; - uint16 timePeriodSec;// in seconds - uint16 timeOutSec; // in seconds - tSirMacAddr gatewayMacAddr; -} tlowPowerHeartBeatParamsUdpStruct; - -typedef PACKED_PRE struct PACKED_POST -{ - uint32 offset; - uint32 filterLength; - uint8 filter[MAX_FLITER_SIZE]; -} tlowPowerHeartBeatFilterStruct; - -typedef PACKED_PRE struct PACKED_POST -{ - uint8 heartBeatEnable; - uint8 heartBeatType; //TCP or UDP -} tlowPowerHeartBeatEnableStruct; - -typedef PACKED_PRE struct PACKED_POST -{ - uint8 dummy; -} tlowPowerHeartBeatNetworkInfoStruct; - - -typedef PACKED_PRE struct PACKED_POST -{ - uint8 sessionIdx; - uint16 lowPowerHeartBeatCmdType; - PACKED_PRE union PACKED_PRO - { - tlowPowerHeartBeatEnableStruct control; - tlowPowerHeartBeatFilterStruct tcpUdpFilter; - tlowPowerHeartBeatParamsTcpStruct tcpParams; - tlowPowerHeartBeatParamsUdpStruct udpParams; - tlowPowerHeartBeatNetworkInfoStruct info; - }options; -} tHalLowPowerHeartBeatReq, *tpHalLowPowerHeartBeatReq; - - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalLowPowerHeartBeatReq lowPowerHeartBeatParams; -} tHalLowPowerHeartBeatReqMsg, *tpHalLowPowerHeartBeatReqMsg; - -/*--------------------------------------------------------------------------- - * FEATURE_WLAN_LPHB RSP - *--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - uint8 sessionIdx; - uint32 status; - uint16 lowPowerHeartBeatCmdType; -}tHalLowPowerHeartBeatRspParams, *tpHalLowPowerHeartBeatRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalLowPowerHeartBeatRspParams lowPowerHeartBeatRspParams; -}tHalLowPowerHeartBeatRspMsg, *tpHalLowPowerHeartBeatRspMsg; - - -/*--------------------------------------------------------------------------- - * FEATURE_WLAN_LPHB IND - *--------------------------------------------------------------------------*/ -#define WIFI_HB_EVENT_TCP_RX_TIMEOUT 0x0001 -#define WIFI_HB_EVENT_UDP_RX_TIMEOUT 0x0002 - -#define WIFI_LPHB_EVENT_REASON_TIMEOUT 0x01 -#define WIFI_LPHB_EVENT_REASON_FW_ON_MONITOR 0x02 -#define WIFI_LPHB_EVENT_REASON_FW_OFF_MONITOR 0x03 - - -#define WIFI_LPHB_PROTO_UDP 0x01 -#define WIFI_LPHB_PROTO_TCP 0x02 - -typedef PACKED_PRE struct PACKED_POST -{ - uint8 bssIdx; - uint8 sessionIdx; - uint8 protocolType; /*TCP or UDP*/ - uint8 eventReason; - -}tHalLowPowerHeartBeatIndParam,*tpHalLowPowerHeartBeatIndParam; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalLowPowerHeartBeatIndParam lowPowerHeartBeatIndParams; -}tHalLowPowerHeartBeatIndMsg, *tpHalLowPowerHeartBeatIndMsg; - -#endif - -#ifdef FEATURE_WLAN_BATCH_SCAN - -/*--------------------------------------------------------------------------- - * WLAN_HAL_BATCHSCAN_SET_REQ - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /* Scan Frerquency - default to 30Sec*/ - tANI_U32 scanInterval; - tANI_U32 numScan2Batch; - tANI_U32 bestNetworks; - tANI_U8 rfBand; - tANI_U8 rtt; -} tHalBatchScanSetParams, *tpHalBatchScanSetParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalBatchScanSetParams batchScanParams; -} tHalBatchScanSetReqMsg, *tpHalBatchScanSetReqMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_BATCHSCAN_SET_RSP - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U32 supportedMscan; -} tHalBatchScanSetRspParam, *tpHalBatchScanSetRspParam; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalBatchScanSetRspParam setBatchScanRspParam; -} tHalBatchScanSetRspMsg, *tpHalBatchScanSetRspMsg; - -/*--------------------------------------------------------------------------- -* WLAN_HAL_BATCHSCAN_STOP_IND -*--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U32 param; -} tHalBatchScanStopIndParam, *tpHalBatchScanStopIndParam; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalBatchScanStopIndParam param; -} tHalBatchScanStopIndMsg, *tpHalBatchScanStopIndMsg; - -/*--------------------------------------------------------------------------- -* WLAN_HAL_BATCHSCAN_TRIGGER_RESULT_IND -*--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U32 param; -} tHalBatchScanTriggerResultParam, *tpHalBatchScanTriggerResultParam; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalBatchScanTriggerResultParam param; -} tHalBatchScanTriggerResultIndMsg, *tpHalBatchScanTriggerResultIndMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_BATCHSCAN_GET_RSP - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 bssid[6]; /* BSSID */ - tANI_U8 ssid[32]; /* SSID */ - tANI_U8 ch; /* Channel */ - tANI_U8 rssi; /* RSSI or Level */ - /* Timestamp when Network was found. Used to calculate age based on timestamp in GET_RSP msg header */ - tANI_U32 timestamp; -} tHalBatchScanNetworkInfo, *tpHalBatchScanNetworkInfo; - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U32 scanId; /* Scan List ID. */ - /* No of AP in a Scan Result. Should be same as bestNetwork in SET_REQ msg */ - tANI_U32 numNetworksInScanList; - /* Variable data ptr: Number of AP in Scan List */ - /* following numNetworkInScanList is data of type tHalBatchScanNetworkInfo - * of sizeof(tHalBatchScanNetworkInfo) * numNetworkInScanList */ - tANI_U8 scanList[1]; -} tHalBatchScanList, *tpHalBatchScanList; - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U32 timestamp; - tANI_U32 numScanLists; - boolean isLastResult; - /* Variable Data ptr: Number of Scan Lists*/ - /* following isLastResult is data of type tHalBatchScanList - * of sizeof(tHalBatchScanList) * numScanLists*/ - tANI_U8 scanResults[1]; -} tHalBatchScanResultIndParam, *tpHalBatchScanResultIndParam; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalBatchScanResultIndParam resultIndMsgParam; -} tHalBatchScanResultIndMsg, *tpHalBatchScanResultIndMsg; - -#endif - -/*--------------------------------------------------------------------------- - * WLAN_HAL_KEEP_ALIVE_REQ - *--------------------------------------------------------------------------*/ -/* Packet Types. */ -#define HAL_KEEP_ALIVE_NULL_PKT 1 -#define HAL_KEEP_ALIVE_UNSOLICIT_ARP_RSP 2 - -/* Enable or disable keep alive */ -#define HAL_KEEP_ALIVE_DISABLE 0 -#define HAL_KEEP_ALIVE_ENABLE 1 - -/* Keep Alive request. */ -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 packetType; - tANI_U32 timePeriod; - tHalIpv4Addr hostIpv4Addr; - tHalIpv4Addr destIpv4Addr; - tSirMacAddr destMacAddr; - tANI_U8 bssIdx; -} tHalKeepAliveReq, *tpHalKeepAliveReq; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalKeepAliveReq KeepAliveParams; -} tHalKeepAliveReqMsg, *tpHalKeepAliveReqMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_SET_RSSI_THRESH_REQ - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - tANI_S8 ucRssiThreshold1 : 8; - tANI_S8 ucRssiThreshold2 : 8; - tANI_S8 ucRssiThreshold3 : 8; - tANI_U8 bRssiThres1PosNotify : 1; - tANI_U8 bRssiThres1NegNotify : 1; - tANI_U8 bRssiThres2PosNotify : 1; - tANI_U8 bRssiThres2NegNotify : 1; - tANI_U8 bRssiThres3PosNotify : 1; - tANI_U8 bRssiThres3NegNotify : 1; - tANI_U8 bReserved10 : 2; -} tHalRSSIThresholds, *tpHalRSSIThresholds; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalRSSIThresholds rssiThreshParams; -} tHalRSSIThresholdReqMsg, *tpHalRSSIThresholdReqMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_ENTER_UAPSD_REQ - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 bkDeliveryEnabled:1; - tANI_U8 beDeliveryEnabled:1; - tANI_U8 viDeliveryEnabled:1; - tANI_U8 voDeliveryEnabled:1; - tANI_U8 bkTriggerEnabled:1; - tANI_U8 beTriggerEnabled:1; - tANI_U8 viTriggerEnabled:1; - tANI_U8 voTriggerEnabled:1; - tANI_U8 bssIdx; -} tUapsdReqParams, *tpUapsdReqParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tUapsdReqParams enterUapsdParams; -} tHalEnterUapsdReqMsg, *tpHalEnterUapsdReqMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_EXIT_UAPSD_REQ - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tANI_U8 bssIdx; -} tHalExitUapsdReqMsg, *tpHalExitUapsdReqMsg; - -#define HAL_PERIODIC_TX_PTRN_MAX_SIZE 1536 -#define HAL_MAXNUM_PERIODIC_TX_PTRNS 6 -/*--------------------------------------------------------------------------- - * WLAN_HAL_ADD_PERIODIC_TX_PTRN_IND - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U32 selfStaIdx:8; - tANI_U32 ucPtrnId:8; // Pattern ID - tANI_U32 usPtrnSize:16; // Non-Zero Pattern size - tANI_U32 uPtrnIntervalMs; // In msec - tANI_U8 ucPattern[HAL_PERIODIC_TX_PTRN_MAX_SIZE]; // Pattern buffer -} tHalAddPeriodicTxPtrn, *tpHalAddPeriodicTxPtrn; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalAddPeriodicTxPtrn ptrnParams; -} tHalAddPeriodicTxPtrnIndMsg, *tpHalAddPeriodicTxPtrnIndMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_DEL_PERIODIC_TX_PTRN_IND - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U32 selfStaIdx:8; - tANI_U32 rsvd:24; - /* Bitmap of pattern IDs that needs to be deleted */ - tANI_U32 uPatternIdBitmap; -} tHalDelPeriodicTxPtrn, *tpHalDelPeriodicTxPtrn; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalDelPeriodicTxPtrn ptrnParams; -} tHalDelPeriodicTxPtrnIndMsg, *tpHalDelPeriodicTxPtrnIndMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_PERIODIC_TX_PTRN_FW_IND - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /* Type of Failure indication */ - tANI_U32 bssIdx:8; - tANI_U32 selfStaIdx:8; - tANI_U32 rsvd:16; - tANI_U32 status; - tANI_U32 patternIdBitmap; -} tHalPeriodicTxPtrnFwInd, *tpHalPeriodicTxPtrnFwInd; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalPeriodicTxPtrnFwInd fwIndParams; -} tHalPeriodicTxPtrnFwIndMsg, *tpHalPeriodicTxPtrnFwIndMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_ADD_WOWL_BCAST_PTRN - *--------------------------------------------------------------------------*/ -#define HAL_WOWL_BCAST_PATTERN_MAX_SIZE 128 -#define HAL_WOWL_BCAST_MAX_NUM_PATTERNS 16 - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 ucPatternId; // Pattern ID - // Pattern byte offset from beginning of the 802.11 packet to start of the - // wake-up pattern - tANI_U8 ucPatternByteOffset; - tANI_U8 ucPatternSize; // Non-Zero Pattern size - tANI_U8 ucPattern[HAL_WOWL_BCAST_PATTERN_MAX_SIZE]; // Pattern - tANI_U8 ucPatternMaskSize; // Non-zero pattern mask size - tANI_U8 ucPatternMask[HAL_WOWL_BCAST_PATTERN_MAX_SIZE]; // Pattern mask - tANI_U8 ucPatternExt[HAL_WOWL_BCAST_PATTERN_MAX_SIZE]; // Extra pattern - tANI_U8 ucPatternMaskExt[HAL_WOWL_BCAST_PATTERN_MAX_SIZE]; // Extra pattern mask - tANI_U8 bssIdx; -} tHalWowlAddBcastPtrn, *tpHalWowlAddBcastPtrn; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalWowlAddBcastPtrn ptrnParams; -} tHalWowlAddBcastPtrnReqMsg, *tpHalWowlAddBcastPtrnReqMsg; - - - -/*--------------------------------------------------------------------------- - * WLAN_HAL_DEL_WOWL_BCAST_PTRN - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /* Pattern ID of the wakeup pattern to be deleted */ - tANI_U8 ucPatternId; - tANI_U8 bssIdx; -} tHalWowlDelBcastPtrn, *tpHalWowlDelBcastPtrn; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalWowlDelBcastPtrn ptrnParams; -} tHalWowlDelBcastPtrnReqMsg, *tpHalWowlDelBcastPtrnReqMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_ENTER_WOWL_REQ - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /* Enables/disables magic packet filtering */ - tANI_U8 ucMagicPktEnable; - - /* Magic pattern */ - tSirMacAddr magicPtrn; - - /* Enables/disables packet pattern filtering in firmware. - Enabling this flag enables broadcast pattern matching - in Firmware. If unicast pattern matching is also desired, - ucUcastPatternFilteringEnable flag must be set tot true - as well - */ - tANI_U8 ucPatternFilteringEnable; - - /* Enables/disables unicast packet pattern filtering. - This flag specifies whether we want to do pattern match - on unicast packets as well and not just broadcast packets. - This flag has no effect if the ucPatternFilteringEnable - (main controlling flag) is set to false - */ - tANI_U8 ucUcastPatternFilteringEnable; - - /* This configuration is valid only when magicPktEnable=1. - * It requests hardware to wake up when it receives the - * Channel Switch Action Frame. - */ - tANI_U8 ucWowChnlSwitchRcv; - - /* This configuration is valid only when magicPktEnable=1. - * It requests hardware to wake up when it receives the - * Deauthentication Frame. - */ - tANI_U8 ucWowDeauthRcv; - - /* This configuration is valid only when magicPktEnable=1. - * It requests hardware to wake up when it receives the - * Disassociation Frame. - */ - tANI_U8 ucWowDisassocRcv; - - /* This configuration is valid only when magicPktEnable=1. - * It requests hardware to wake up when it has missed - * consecutive beacons. This is a hardware register - * configuration (NOT a firmware configuration). - */ - tANI_U8 ucWowMaxMissedBeacons; - - /* This configuration is valid only when magicPktEnable=1. - * This is a timeout value in units of microsec. It requests - * hardware to unconditionally wake up after it has stayed - * in WoWLAN mode for some time. Set 0 to disable this feature. - */ - tANI_U8 ucWowMaxSleepUsec; - - /* This configuration directs the WoW packet filtering to look for EAP-ID - * requests embedded in EAPOL frames and use this as a wake source. - */ - tANI_U8 ucWoWEAPIDRequestEnable; - - /* This configuration directs the WoW packet filtering to look for EAPOL-4WAY - * requests and use this as a wake source. - */ - tANI_U8 ucWoWEAPOL4WayEnable; - - /* This configuration allows a host wakeup on an network scan offload match. - */ - tANI_U8 ucWowNetScanOffloadMatch; - - /* This configuration allows a host wakeup on any GTK rekeying error. - */ - tANI_U8 ucWowGTKRekeyError; - - /* This configuration allows a host wakeup on BSS connection loss. - */ - tANI_U8 ucWoWBSSConnLoss; - - tANI_U8 bssIdx; - -} tHalWowlEnterParams, *tpHalWowlEnterParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalWowlEnterParams enterWowlParams; -} tHalWowlEnterReqMsg, *tpHalWowlEnterReqMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_EXIT_WOWL_REQ - *--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 bssIdx; - -} tHalWowlExitParams, *tpHalWowlExitParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalWowlExitParams exitWowlParams; -} tHalWowlExitReqMsg, *tpHalWowlExitReqMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_GET_RSSI_REQ - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; -} tHalGetRssiReqMsg, *tpHalGetRssiReqMsg; - -typedef PACKED_PRE struct PACKED_POST -{ - /* Valid STA Idx for per STA stats request */ - tANI_U32 staId; - -}tHalRoamRssiReqParams, *tpHalRoamRssiReqParams; - - -/*--------------------------------------------------------------------------- - * WLAN_HAL_GET_ROAM_RSSI_REQ - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalRoamRssiReqParams roamRssiReqParams; -} tHalGetRoamRssiReqMsg, *tpHalGetRoamRssiReqMsg; - - -/*--------------------------------------------------------------------------- - * WLAN_HAL_SET_UAPSD_AC_PARAMS_REQ - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST { - tANI_U8 staidx; // STA index - tANI_U8 ac; // Access Category - tANI_U8 up; // User Priority - tANI_U32 srvInterval; // Service Interval - tANI_U32 susInterval; // Suspend Interval - tANI_U32 delayInterval; // Delay Interval -} tUapsdInfo, tpUapsdInfo; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tUapsdInfo enableUapsdAcParams; -} tHalSetUapsdAcParamsReqMsg, *tpHalSetUapsdAcParamsReqMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_CONFIGURE_RXP_FILTER_REQ - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST { - tANI_U8 setMcstBcstFilterSetting; - tANI_U8 setMcstBcstFilter; -} tHalConfigureRxpFilterReqParams, tpHalConfigureRxpFilterReqParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalConfigureRxpFilterReqParams configureRxpFilterReqParams; -} tHalConfigureRxpFilterReqMsg, *tpHalConfigureRxpFilterReqMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_ENTER_IMPS_RSP - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; -} tHalEnterImpsRspParams, *tpHalEnterImpsRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalEnterImpsRspParams enterImpsRspParams; -} tHalEnterImpsRspMsg, *tpHalEnterImpsRspMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_EXIT_IMPS_RSP - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; -} tHalExitImpsRspParams, *tpHalExitImpsRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalExitImpsRspParams exitImpsRspParams; -} tHalExitImpsRspMsg, *tpHalExitImpsRspMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_ENTER_BMPS_RSP - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; - tANI_U8 bssIdx; -} tHalEnterBmpsRspParams, *tpHalEnterBmpsRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalEnterBmpsRspParams enterBmpsRspParams; -} tHalEnterBmpsRspMsg, *tpHalEnterBmpsRspMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_EXIT_BMPS_RSP - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; - tANI_U8 bssIdx; -} tHalExitBmpsRspParams, *tpHalExitBmpsRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalExitBmpsRspParams exitBmpsRspParams; -} tHalExitBmpsRspMsg, *tpHalExitBmpsRspMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_ENTER_UAPSD_RSP - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; - tANI_U8 bssIdx; -}tUapsdRspParams, *tpUapsdRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tUapsdRspParams enterUapsdRspParams; -} tHalEnterUapsdRspMsg, *tpHalEnterUapsdRspMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_EXIT_UAPSD_RSP - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; - tANI_U8 bssIdx; -} tHalExitUapsdRspParams, *tpHalExitUapsdRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalExitUapsdRspParams exitUapsdRspParams; -} tHalExitUapsdRspMsg, *tpHalExitUapsdRspMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_RSSI_NOTIFICATION_IND - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U32 bRssiThres1PosCross : 1; - tANI_U32 bRssiThres1NegCross : 1; - tANI_U32 bRssiThres2PosCross : 1; - tANI_U32 bRssiThres2NegCross : 1; - tANI_U32 bRssiThres3PosCross : 1; - tANI_U32 bRssiThres3NegCross : 1; - tANI_U32 avgRssi : 8; - tANI_U32 uBssIdx : 8; - tANI_U32 isBTCoexCompromise : 1; - tANI_U32 bReserved : 9; -} tHalRSSINotification, *tpHalRSSINotification; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalRSSINotification rssiNotificationParams; -} tHalRSSINotificationIndMsg, *tpHalRSSINotificationIndMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_GET_RSSI_RSP - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; - tANI_S8 rssi; -} tHalGetRssiParams, *tpHalGetRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalGetRssiParams rssiRspParams; -} tHalGetRssiRspMsg, *tpHalGetRssiRspMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_GET_ROAM_RSSI_RSP - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; - - tANI_U8 staId; - tANI_S8 rssi; -} tHalGetRoamRssiParams, *tpHalGetRoamRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalGetRoamRssiParams roamRssiRspParams; -} tHalGetRoamRssiRspMsg, *tpHalGetRoamRssiRspMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_ENTER_WOWL_RSP - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; - tANI_U8 bssIdx; -} tHalEnterWowlRspParams, *tpHalEnterWowlRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalEnterWowlRspParams enterWowlRspParams; -} tHalWowlEnterRspMsg, *tpHalWowlEnterRspMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_EXIT_WOWL_RSP - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; - tANI_U8 bssIdx; -} tHalExitWowlRspParams, *tpHalExitWowlRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalExitWowlRspParams exitWowlRspParams; -} tHalWowlExitRspMsg, *tpHalWowlExitRspMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_ADD_BCN_FILTER_RSP - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; -} tHalAddBcnFilterRspParams, *tpHalAddBcnFilterRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalAddBcnFilterRspParams addBcnFilterRspParams; -} tHalAddBcnFilterRspMsg, *tpHalAddBcnFilterRspMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_REM_BCN_FILTER_RSP - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; -} tHalRemBcnFilterRspParams, *tpHalRemBcnFilterRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalRemBcnFilterRspParams remBcnFilterRspParams; -} tHalRemBcnFilterRspMsg, *tpHalRemBcnFilterRspMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_ADD_WOWL_BCAST_PTRN_RSP - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; - tANI_U8 bssIdx; -} tHalAddWowlBcastPtrnRspParams, *tpHalAddWowlBcastPtrnRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalAddWowlBcastPtrnRspParams addWowlBcastPtrnRspParams; -} tHalAddWowlBcastPtrnRspMsg, *tpHalAddWowlBcastPtrnRspMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_DEL_WOWL_BCAST_PTRN_RSP - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; - tANI_U8 bssIdx; -} tHalDelWowlBcastPtrnRspParams, *tpHalDelWowlBcastPtrnRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalDelWowlBcastPtrnRspParams delWowlBcastRspParams; -} tHalDelWowlBcastPtrnRspMsg, *tpHalDelWowlBcastPtrnRspMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_HOST_OFFLOAD_RSP - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; -} tHalHostOffloadRspParams, *tpHalHostOffloadRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalHostOffloadRspParams hostOffloadRspParams; -} tHalHostOffloadRspMsg, *tpHalHostOffloadRspMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_KEEP_ALIVE_RSP - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; -} tHalKeepAliveRspParams, *tpHalKeepAliveRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalKeepAliveRspParams keepAliveRspParams; -} tHalKeepAliveRspMsg, *tpHalKeepAliveRspMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_SET_RSSI_THRESH_RSP - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; -} tHalSetRssiThreshRspParams, *tpHalSetRssiThreshRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalSetRssiThreshRspParams setRssiThreshRspParams; -} tHalSetRssiThreshRspMsg, *tpHalSetRssiThreshRspMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_SET_UAPSD_AC_PARAMS_RSP - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; -} tHalSetUapsdAcParamsRspParams, *tpHalSetUapsdAcParamsRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalSetUapsdAcParamsRspParams setUapsdAcParamsRspParams; -} tHalSetUapsdAcParamsRspMsg, *tpHalSetUapsdAcParamsRspMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_CONFIGURE_RXP_FILTER_RSP - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; -} tHalConfigureRxpFilterRspParams, *tpHalConfigureRxpFilterRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalConfigureRxpFilterRspParams configureRxpFilterRspParams; -} tHalConfigureRxpFilterRspMsg, *tpHalConfigureRxpFilterRspMsg; - -/*--------------------------------------------------------------------------- - *WLAN_HAL_SET_MAX_TX_POWER_REQ - *--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - tSirMacAddr bssId; // BSSID is needed to identify which session issued this request. As - //the request has power constraints, this should be applied only to that session - tSirMacAddr selfStaMacAddr; - //In request, - //power == MaxTx power to be used. - tPowerdBm power; - -}tSetMaxTxPwrParams, *tpSetMaxTxPwrParams; - - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tSetMaxTxPwrParams setMaxTxPwrParams; -}tSetMaxTxPwrReq, *tpSetMaxTxPwrReq; - -/*--------------------------------------------------------------------------- -*WLAN_HAL_SET_MAX_TX_POWER_RSP -*--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - //power == tx power used for management frames. - tPowerdBm power; - - /* success or failure */ - tANI_U32 status; -}tSetMaxTxPwrRspParams, *tpSetMaxTxPwrRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tSetMaxTxPwrRspParams setMaxTxPwrRspParams; -}tSetMaxTxPwrRspMsg, *tpSetMaxTxPwrRspMsg; - - -/*--------------------------------------------------------------------------- - *WLAN_HAL_SET_MAX_TX_POWER_PER_BAND_REQ - *--------------------------------------------------------------------------*/ - -/* Band types for WLAN_HAL_SET_MAX_TX_POWER_PER_BAND_REQ between WDI and HAL */ -typedef enum -{ - WLAN_HAL_SET_MAX_TX_POWER_BAND_ALL = 0, - // For 2.4GHz or 5GHz bands - WLAN_HAL_SET_MAX_TX_POWER_BAND_2_4_GHZ, - WLAN_HAL_SET_MAX_TX_POWER_BAND_5_0_GHZ, - // End of valid enums - WLAN_HAL_SET_MAX_TX_POWER_BAND_MAX = WLAN_HAL_MAX_ENUM_SIZE, -}tHalSetMaxTxPwrBandInfo; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalSetMaxTxPwrBandInfo bandInfo; // 2_4_GHZ or 5_0_GHZ - tPowerdBm power; // In request, power == MaxTx power to be used. -}tSetMaxTxPwrPerBandParams, *tpSetMaxTxPwrPerBandParams; - - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tSetMaxTxPwrPerBandParams setMaxTxPwrPerBandParams; -}tSetMaxTxPwrPerBandReq, *tpSetMaxTxPwrPerBandReq; - -/*--------------------------------------------------------------------------- -*WLAN_HAL_SET_MAX_TX_POWER_PER_BAND_RSP -*--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - //power == tx power used for management frames. - tPowerdBm power; - - /* success or failure */ - tANI_U32 status; -}tSetMaxTxPwrPerBandRspParams, *tpSetMaxTxPwrPerBandRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tSetMaxTxPwrPerBandRspParams setMaxTxPwrPerBandRspParams; -}tSetMaxTxPwrPerBandRspMsg, *tpSetMaxTxPwrPerBandRspMsg; - -/*--------------------------------------------------------------------------- - *WLAN_HAL_SET_TX_POWER_REQ - *--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /* TX Power in milli watts */ - tANI_U32 txPower; - tANI_U8 bssIdx; -}tSetTxPwrReqParams, *tpSetTxPwrReqParams; - - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tSetTxPwrReqParams setTxPwrReqParams; -}tSetTxPwrReqMsg, *tpSetTxPwrReqMsg; - -/*--------------------------------------------------------------------------- -*WLAN_HAL_SET_TX_POWER_RSP -*--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; -}tSetTxPwrRspParams, *tpSetTxPwrRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tSetTxPwrRspParams setTxPwrRspParams; -}tSetTxPwrRspMsg, *tpSetTxPwrRspMsg; - -/*--------------------------------------------------------------------------- - *WLAN_HAL_GET_TX_POWER_REQ - *--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 staId; -}tGetTxPwrReqParams, *tpGetTxPwrReqParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tGetTxPwrReqParams getTxPwrReqParams; -}tGetTxPwrReqMsg, *tpGetTxPwrReqMsg; - -/*--------------------------------------------------------------------------- -*WLAN_HAL_GET_TX_POWER_RSP -*--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; - - /* TX Power in milli watts */ - tANI_U32 txPower; -}tGetTxPwrRspParams, *tpGetTxPwrRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tGetTxPwrRspParams getTxPwrRspParams; -}tGetTxPwrRspMsg, *tpGetTxPwrRspMsg; - -#ifdef WLAN_FEATURE_P2P -/*--------------------------------------------------------------------------- - *WLAN_HAL_SET_P2P_GONOA_REQ - *--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 opp_ps; - tANI_U32 ctWindow; - tANI_U8 count; - tANI_U32 duration; - tANI_U32 interval; - tANI_U32 single_noa_duration; - tANI_U8 psSelection; -}tSetP2PGONOAParams, *tpSetP2PGONOAParams; - - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tSetP2PGONOAParams setP2PGONOAParams; -}tSetP2PGONOAReq, *tpSetP2PGONOAReq; - -/*--------------------------------------------------------------------------- -*WLAN_HAL_SET_P2P_GONOA_RSP -*--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; -}tSetP2PGONOARspParams, *tpSetP2PGONOARspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tSetP2PGONOARspParams setP2PGONOARspParams; -}tSetP2PGONOARspMsg, *tpSetP2PGONOARspMsg; -#endif - -/*--------------------------------------------------------------------------- - *WLAN_HAL_ADD_SELF_STA_REQ - *--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - tSirMacAddr selfMacAddr; - tANI_U32 status; -}tAddStaSelfParams, *tpAddStaSelfParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tSirMacAddr selfMacAddr; - tANI_U32 status; - tHalIfacePersona iface_persona; -}tAddStaSelfParams_V1, *tpAddStaSelfParams_V1; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - PACKED_PRE union PACKED_POST { - tAddStaSelfParams addStaSelfParams; - tAddStaSelfParams_V1 addStaSelfParams_V1; - }uAddStaSelfParams; -}tAddStaSelfReq, *tpAddStaSelfReq; - -/*--------------------------------------------------------------------------- -*WLAN_HAL_ADD_SELF_STA_RSP -*--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; - - /*Self STA Index */ - tANI_U8 selfStaIdx; - - /* DPU Index (IGTK, PTK, GTK all same) */ - tANI_U8 dpuIdx; - - /* DPU Signature */ - tANI_U8 dpuSignature; - -}tAddStaSelfRspParams, *tpAddStaSelfRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tAddStaSelfRspParams addStaSelfRspParams; -}tAddStaSelfRspMsg, *tpAddStaSelfRspMsg; - - -/*--------------------------------------------------------------------------- - WLAN_HAL_DEL_STA_SELF_REQ ----------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - tSirMacAddr selfMacAddr; - -}tDelStaSelfParams, *tpDelStaSelfParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tDelStaSelfParams delStaSelfParams; -} tDelStaSelfReqMsg, *tpDelStaSelfReqMsg; - - -/*--------------------------------------------------------------------------- - WLAN_HAL_DEL_STA_SELF_RSP ----------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /*success or failure */ - tANI_U32 status; - - tSirMacAddr selfMacAddr; -}tDelStaSelfRspParams, *tpDelStaSelfRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tDelStaSelfRspParams delStaSelfRspParams; -} tDelStaSelfRspMsg, *tpDelStaSelfRspMsg; - - -#ifdef WLAN_FEATURE_VOWIFI_11R - -/*--------------------------------------------------------------------------- - *WLAN_HAL_AGGR_ADD_TS_REQ - *--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /* Station Index */ - tANI_U16 staIdx; - - /* TSPEC handler uniquely identifying a TSPEC for a STA in a BSS */ - /* This will carry the bitmap with the bit positions representing different AC.s*/ - tANI_U16 tspecIdx; - - /* Tspec info per AC To program TPE with required parameters */ - tSirMacTspecIE tspec[WLAN_HAL_MAX_AC]; - - /* U-APSD Flags: 1b per AC. Encoded as follows: - b7 b6 b5 b4 b3 b2 b1 b0 = - X X X X BE BK VI VO */ - tANI_U8 uAPSD; - - /* These parameters are for all the access categories */ - tANI_U32 srvInterval[WLAN_HAL_MAX_AC]; // Service Interval - tANI_U32 susInterval[WLAN_HAL_MAX_AC]; // Suspend Interval - tANI_U32 delayInterval[WLAN_HAL_MAX_AC]; // Delay Interval - -}tAggrAddTsParams, *tpAggrAddTsParams; - - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tAggrAddTsParams aggrAddTsParam; -}tAggrAddTsReq, *tpAggrAddTsReq; - -/*--------------------------------------------------------------------------- -*WLAN_HAL_AGGR_ADD_TS_RSP -*--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status0; - /* FIXME PRIMA for future use for 11R */ - tANI_U32 status1; -}tAggrAddTsRspParams, *tpAggrAddTsRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tAggrAddTsRspParams aggrAddTsRspParam; -}tAggrAddTsRspMsg, *tpAggrAddTsRspMsg; - -#endif - -/*--------------------------------------------------------------------------- - * WLAN_HAL_CONFIGURE_APPS_CPU_WAKEUP_STATE_REQ - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 isAppsCpuAwake; -} tHalConfigureAppsCpuWakeupStateReqParams, *tpHalConfigureAppsCpuWakeupStatReqParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalConfigureAppsCpuWakeupStateReqParams appsStateReqParams; -} tHalConfigureAppsCpuWakeupStateReqMsg, *tpHalConfigureAppsCpuWakeupStateReqMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_CONFIGURE_APPS_CPU_WAKEUP_STATE_RSP - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; -} tHalConfigureAppsCpuWakeupStateRspParams, *tpHalConfigureAppsCpuWakeupStateRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalConfigureAppsCpuWakeupStateRspParams appsStateRspParams; -} tHalConfigureAppsCpuWakeupStateRspMsg, *tpHalConfigureAppsCpuWakeupStateRspMsg; -/*--------------------------------------------------------------------------- - * WLAN_HAL_DUMP_COMMAND_REQ - *--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U32 argument1; - tANI_U32 argument2; - tANI_U32 argument3; - tANI_U32 argument4; - tANI_U32 argument5; - -}tHalDumpCmdReqParams,*tpHalDumpCmdReqParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalDumpCmdReqParams dumpCmdReqParams; -} tHalDumpCmdReqMsg, *tpHalDumpCmdReqMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_DUMP_COMMAND_RSP - *--------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; - /*Length of the responce message*/ - tANI_U32 rspLength; - /*FiXME: Currently considering the the responce will be less than 100bytes */ - tANI_U8 rspBuffer[DUMPCMD_RSP_BUFFER]; - -} tHalDumpCmdRspParams, *tpHalDumpCmdRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalDumpCmdRspParams dumpCmdRspParams; -} tHalDumpCmdRspMsg, *tpHalDumpCmdRspMsg; - -/*--------------------------------------------------------------------------- - *WLAN_HAL_COEX_IND - *-------------------------------------------------------------------------*/ -#define WLAN_COEX_IND_DATA_SIZE (4) -#define WLAN_COEX_IND_TYPE_DISABLE_HB_MONITOR (0) -#define WLAN_COEX_IND_TYPE_ENABLE_HB_MONITOR (1) -#define WLAN_COEX_IND_TYPE_SCANS_ARE_COMPROMISED_BY_COEX (2) -#define WLAN_COEX_IND_TYPE_SCANS_ARE_NOT_COMPROMISED_BY_COEX (3) -#define WLAN_COEX_IND_TYPE_DISABLE_AGGREGATION_IN_2p4 (4) -#define WLAN_COEX_IND_TYPE_ENABLE_AGGREGATION_IN_2p4 (5) - -typedef PACKED_PRE struct PACKED_POST -{ - /*Coex Indication Type*/ - tANI_U32 coexIndType; - - /*Coex Indication Data*/ - tANI_U32 coexIndData[WLAN_COEX_IND_DATA_SIZE]; -}tCoexIndParams,*tpCoexIndParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tCoexIndParams coexIndParams; -}tCoexIndMsg, *tpCoexIndMsg; - -/*--------------------------------------------------------------------------- - *WLAN_HAL_OTA_TX_COMPL_IND - *-------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - /*Tx Complete Indication Success or Failure*/ - tANI_U32 status; -}tTxComplParams,*tpTxComplParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tTxComplParams txComplParams; -}tTxComplIndMsg, *tpTxComplIndMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_HOST_SUSPEND_IND - *-------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U32 configuredMcstBcstFilterSetting; - tANI_U32 activeSessionCount; -}tHalWlanHostSuspendIndParam,*tpHalWlanHostSuspendIndParam; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalWlanHostSuspendIndParam suspendIndParams; -}tHalWlanHostSuspendIndMsg, *tpHalWlanHostSuspendIndMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_EXCLUDE_UNENCRYTED_IND - *-------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_BOOLEAN bDot11ExcludeUnencrypted; - tSirMacAddr bssId; -}tHalWlanExcludeUnEncryptedIndParam,*tpHalWlanExcludeUnEncryptedIndParam; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalWlanExcludeUnEncryptedIndParam excludeUnEncryptedIndParams; -}tHalWlanExcludeUnEncrptedIndMsg, *tpHalWlanExcludeUnEncrptedIndMsg; - -#ifdef WLAN_FEATURE_P2P -/*--------------------------------------------------------------------------- - *WLAN_HAL_NOA_ATTR_IND - *-------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 index ; - tANI_U8 oppPsFlag ; - tANI_U16 ctWin ; - - tANI_U16 uNoa1IntervalCnt; - tANI_U16 bssIdx; - tANI_U32 uNoa1Duration; - tANI_U32 uNoa1Interval; - tANI_U32 uNoa1StartTime; - - tANI_U16 uNoa2IntervalCnt; - tANI_U16 rsvd2; - tANI_U32 uNoa2Duration; - tANI_U32 uNoa2Interval; - tANI_U32 uNoa2StartTime; - - tANI_U32 status; -}tNoaAttrIndParams, *tpNoaAttrIndParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tNoaAttrIndParams noaAttrIndParams; -}tNoaAttrIndMsg, *tpNoaAttrIndMsg; - -/*--------------------------------------------------------------------------- - *WLAN_HAL_NOA_START_IND - *-------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U32 status; - tANI_U32 bssIdx; -}tNoaStartIndParams, *tpNoaStartIndParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tNoaStartIndParams noaStartIndParams; -}tNoaStartIndMsg, tpNoaStartIndMsg; -#endif - -/*--------------------------------------------------------------------------- - * WLAN_HAL_HOST_RESUME_REQ - *-------------------------------------------------------------------------*/ - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 configuredMcstBcstFilterSetting; -}tHalWlanHostResumeReqParam,*tpHalWlanHostResumeReqParam; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalWlanHostResumeReqParam resumeReqParams; -}tHalWlanHostResumeReqMsg, *tpHalWlanHostResumeReqMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_HOST_RESUME_RSP - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; -} tHalHostResumeRspParams, *tpHalHostResumeRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalHostResumeRspParams hostResumeRspParams; -} tHalHostResumeRspMsg, *tpHalHostResumeRspMsg; - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U16 staIdx; - // Peer MAC Address, whose BA session has timed out - tSirMacAddr peerMacAddr; - // TID for which a BA session timeout is being triggered - tANI_U8 baTID; - // DELBA direction - // 1 - Originator - // 0 - Recipient - tANI_U8 baDirection; - tANI_U32 reasonCode; - tSirMacAddr bssId; // TO SUPPORT BT-AMP -} tHalWlanDelBaIndMsg, *tpHalWlanDelBaIndMsg; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalWlanDelBaIndMsg hostdelBaParam; -} tHalDelBAIndMsg, *tpHalDelBAIndMsg; - -/*--------------------------------------------------------------------------- - *PNO Messages - *-------------------------------------------------------------------------*/ -/* Max number of channels that a network can be found on*/ -/* WLAN_HAL_PNO_MAX_NETW_CHANNELS and WLAN_HAL_PNO_MAX_NETW_CHANNELS_EX should - * be changed at same time - */ -#define WLAN_HAL_PNO_MAX_NETW_CHANNELS 60 - -/*Max number of channels that a network can be found on*/ -#define WLAN_HAL_PNO_MAX_NETW_CHANNELS_EX 60 - -/*Maximum numbers of networks supported by PNO*/ -#define WLAN_HAL_PNO_MAX_SUPP_NETWORKS 16 - -/*The number of scan time intervals that can be programmed into PNO*/ -#define WLAN_HAL_PNO_MAX_SCAN_TIMERS 10 - -/*Maximum size of the probe template*/ -#define WLAN_HAL_PNO_MAX_PROBE_SIZE 450 - -/*Type of PNO enabling - Immediate - scanning will start immediately and PNO procedure will - be repeated based on timer - Suspend - scanning will start at suspend - Resume - scanning will start on system resume - Delay - start the scan timer to trigger PNO scan - */ -typedef enum -{ - ePNO_MODE_IMMEDIATE, - ePNO_MODE_ON_SUSPEND, - ePNO_MODE_ON_RESUME, - ePNO_MODE_DELAY, - ePNO_MODE_PROXIMITY, // FEATURE_WIFI_PROXIMITY - ePNO_MODE_MAX = WLAN_HAL_MAX_ENUM_SIZE -} ePNOMode; - -/*Authentication type*/ -typedef enum -{ - eAUTH_TYPE_ANY = 0, - eAUTH_TYPE_OPEN_SYSTEM = 1, - - // Upper layer authentication types - eAUTH_TYPE_WPA = 2, - eAUTH_TYPE_WPA_PSK = 3, - - eAUTH_TYPE_RSN = 4, - eAUTH_TYPE_RSN_PSK = 5, - eAUTH_TYPE_FT_RSN = 6, - eAUTH_TYPE_FT_RSN_PSK = 7, - eAUTH_TYPE_WAPI_WAI_CERTIFICATE = 8, - eAUTH_TYPE_WAPI_WAI_PSK = 9, - eAUTH_TYPE_CCKM_WPA = 10, - eAUTH_TYPE_CCKM_RSN = 11, - - eAUTH_TYPE_MAX = WLAN_HAL_MAX_ENUM_SIZE - -}tAuthType; - -/* Encryption type */ -typedef enum eEdType -{ - eED_ANY = 0, - eED_NONE = 1, - eED_WEP = 2, - eED_TKIP = 3, - eED_CCMP = 4, - eED_WPI = 5, - - eED_TYPE_MAX = WLAN_HAL_MAX_ENUM_SIZE -} tEdType; - -/* SSID broadcast type */ -typedef enum eSSIDBcastType -{ - eBCAST_UNKNOWN = 0, - eBCAST_NORMAL = 1, - eBCAST_HIDDEN = 2, - - eBCAST_TYPE_MAX = WLAN_HAL_MAX_ENUM_SIZE -} tSSIDBcastType; - -/* - The network description for which PNO will have to look for -*/ -typedef PACKED_PRE struct PACKED_POST -{ - /*SSID of the BSS*/ - tSirMacSSid ssId; - - /*Authentication type for the network*/ - tAuthType authentication; - - /*Encryption type for the network*/ - tEdType encryption; - - /*Indicate the channel on which the Network can be found - 0 - if all channels */ - tANI_U8 ucChannelCount; - tANI_U8 aChannels[WLAN_HAL_PNO_MAX_NETW_CHANNELS]; - - /*Indicates the RSSI threshold for the network to be considered*/ - tANI_U8 rssiThreshold; -}tNetworkType; - -typedef PACKED_PRE struct PACKED_POST -{ - /*How much it should wait */ - tANI_U32 uTimerValue; - - /*How many times it should repeat that wait value - 0 - keep using this timer until PNO is disabled*/ - tANI_U32 uTimerRepeat; - - /*e.g: 2 3 - 4 0 - - it will wait 2s between consecutive scans for 3 times - - after that it will wait 4s between consecutive scans until disabled*/ -}tScanTimer; - -/* - The network parameters to be sent to the PNO algorithm -*/ -typedef PACKED_PRE struct PACKED_POST -{ - /*set to 0 if you wish for PNO to use its default telescopic timer*/ - tANI_U8 ucScanTimersCount; - - /*A set value represents the amount of time that PNO will wait between - two consecutive scan procedures - If the desired is for a uniform timer that fires always at the exact same - interval - one single value is to be set - If there is a desire for a more complex - telescopic like timer multiple - values can be set - once PNO reaches the end of the array it will - continue scanning at intervals presented by the last value*/ - tScanTimer aTimerValues[WLAN_HAL_PNO_MAX_SCAN_TIMERS]; - -}tScanTimersType; - -typedef PACKED_PRE struct PACKED_POST { - - /*Enable PNO*/ - tANI_U32 enable; - - /*Immediate, On Suspend, On Resume*/ - ePNOMode modePNO; - - /*Number of networks sent for PNO*/ - tANI_U32 ucNetworksCount; - - /*The networks that PNO needs to look for*/ - tNetworkType aNetworks[WLAN_HAL_PNO_MAX_SUPP_NETWORKS]; - - /*The scan timers required for PNO*/ - tScanTimersType scanTimers; - - /*Probe template for 2.4GHz band*/ - tANI_U16 us24GProbeSize; - tANI_U8 a24GProbeTemplate[WLAN_HAL_PNO_MAX_PROBE_SIZE]; - - /*Probe template for 5GHz band*/ - tANI_U16 us5GProbeSize; - tANI_U8 a5GProbeTemplate[WLAN_HAL_PNO_MAX_PROBE_SIZE]; - -} tPrefNetwListParams, * tpPrefNetwListParams; - -/* - Preferred network list request -*/ -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tPrefNetwListParams prefNetwListParams; -} tSetPrefNetwListReq, *tpSetPrefNetwListReq; - - -/* - The network description for which PNO will have to look for -*/ -typedef PACKED_PRE struct PACKED_POST -{ - /*SSID of the BSS*/ - tSirMacSSid ssId; - - /*Authentication type for the network*/ - tAuthType authentication; - - /*Encryption type for the network*/ - tEdType encryption; - - /*SSID broadcast type, normal, hidden or unknown*/ - tSSIDBcastType bcastNetworkType; - - /*Indicate the channel on which the Network can be found - 0 - if all channels */ - tANI_U8 ucChannelCount; - tANI_U8 aChannels[WLAN_HAL_PNO_MAX_NETW_CHANNELS]; - - /*Indicates the RSSI threshold for the network to be considered*/ - tANI_U8 rssiThreshold; -}tNetworkTypeNew; - -typedef PACKED_PRE struct PACKED_POST { - - /*Enable PNO*/ - tANI_U32 enable; - - /*Immediate, On Suspend, On Resume*/ - ePNOMode modePNO; - - /*Number of networks sent for PNO*/ - tANI_U32 ucNetworksCount; - - /*The networks that PNO needs to look for*/ - tNetworkTypeNew aNetworks[WLAN_HAL_PNO_MAX_SUPP_NETWORKS]; - - /*The scan timers required for PNO*/ - tScanTimersType scanTimers; - - /*Probe template for 2.4GHz band*/ - tANI_U16 us24GProbeSize; - tANI_U8 a24GProbeTemplate[WLAN_HAL_PNO_MAX_PROBE_SIZE]; - - /*Probe template for 5GHz band*/ - tANI_U16 us5GProbeSize; - tANI_U8 a5GProbeTemplate[WLAN_HAL_PNO_MAX_PROBE_SIZE]; - -} tPrefNetwListParamsNew, * tpPrefNetwListParamsNew; - -/* - Preferred network list request new -*/ -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tPrefNetwListParamsNew prefNetwListParams; -} tSetPrefNetwListReqNew, *tpSetPrefNetwListReqNew; - -#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD -typedef PACKED_PRE struct PACKED_POST -{ - tSirMacSSid ssId; - tANI_U8 currAPbssid[HAL_MAC_ADDR_LEN]; - tANI_U32 authentication; - tEdType encryption; - tEdType mcencryption; - tANI_U8 ChannelCount; - tANI_U8 ChannelCache[WLAN_HAL_ROAM_SCAN_MAX_CHANNELS]; -}tRoamNetworkType; - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 mdiePresent; - tANI_U16 mobilityDomain; -}tMobilityDomainInfo; - -typedef PACKED_PRE struct PACKED_POST { - eAniBoolean RoamScanOffloadEnabled; - tANI_S8 LookupThreshold; - tANI_U8 RoamRssiDiff; - tANI_U8 ChannelCacheType; - tANI_U8 Command; - tANI_U8 StartScanReason; - tANI_U16 NeighborScanTimerPeriod; - tANI_U16 NeighborRoamScanRefreshPeriod; - tANI_U16 NeighborScanChannelMinTime; - tANI_U16 NeighborScanChannelMaxTime; - tANI_U16 EmptyRefreshScanPeriod; - tANI_U8 ValidChannelCount; - tANI_U8 ValidChannelList[WLAN_HAL_ROAM_SCAN_MAX_CHANNELS]; - eAniBoolean IsCCXEnabled; - - tANI_U16 us24GProbeSize; - tANI_U8 a24GProbeTemplate[WLAN_HAL_ROAM_SCAN_MAX_PROBE_SIZE]; - tANI_U16 us5GProbeSize; - tANI_U8 a5GProbeTemplate[WLAN_HAL_ROAM_SCAN_MAX_PROBE_SIZE]; - /* Add Reserved bytes */ - tANI_U8 nProbes; - tANI_U16 HomeAwayTime; - eAniBoolean MAWCEnabled; - tANI_U8 ReservedBytes[WLAN_HAL_ROAM_SCAN_RESERVED_BYTES]; - tRoamNetworkType ConnectedNetwork; - tMobilityDomainInfo MDID; -} tRoamCandidateListParams, * tpRoamCandidateListParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tRoamCandidateListParams RoamScanOffloadNetwListParams; -} tSetRoamScanOffloadReq, *tpRoamScanOffloadReq; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - - /* status of the request - just to indicate that PNO has acknowledged - * the request and will start scanning */ - tANI_U32 status; -} tSetRoamOffloadScanResp, *tpSetRoamOffloadScanResp; -#endif - -/* - Preferred network list response -*/ -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - - /* status of the request - just to indicate that PNO has acknowledged - * the request and will start scanning*/ - tANI_U32 status; -} tSetPrefNetwListResp, *tpSetPrefNetwListResp; - -/* - Preferred network indication parameters -*/ -typedef PACKED_PRE struct PACKED_POST { - - /*Network that was found with the highest RSSI*/ - tSirMacSSid ssId; - - /*Indicates the RSSI */ - tANI_U8 rssi; - - //The MPDU frame length of a beacon or probe rsp. data is the start of the frame - tANI_U16 frameLength; - -} tPrefNetwFoundParams, * tpPrefNetwFoundParams; - -/* - Preferred network found indication -*/ -typedef PACKED_PRE struct PACKED_POST { - - tHalMsgHeader header; - tPrefNetwFoundParams prefNetwFoundParams; -} tPrefNetwFoundInd, *tpPrefNetwFoundInd; - - -typedef PACKED_PRE struct PACKED_POST { - - /*RSSI Threshold*/ - tANI_U8 ucRssiThreshold; - -} tRssiFilterParams, * tpRssiFilterParams; - -/* - RSSI Filter request -*/ -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tRssiFilterParams prefRSSIFilterParams; -} tSetRssiFilterReq, *tpSetRssiFilterReq; - -/* - Set RSSI filter resp -*/ -typedef PACKED_PRE struct PACKED_POST{ - tHalMsgHeader header; - /*status of the request */ - tANI_U32 status; -} tSetRssiFilterResp, *tpSetRssiFilterResp; -/* - Update scan params -*/ -typedef PACKED_PRE struct PACKED_POST -{ - - /*Host setting for 11d*/ - tANI_U8 b11dEnabled; - - /*Lets PNO know that host has determined the regulatory domain*/ - tANI_U8 b11dResolved; - - /*Channels on which PNO is allowed to scan*/ - tANI_U8 ucChannelCount; - tANI_U8 aChannels[WLAN_HAL_PNO_MAX_NETW_CHANNELS]; - - /*Minimum channel time*/ - tANI_U16 usActiveMinChTime; - - /*Maximum channel time*/ - tANI_U16 usActiveMaxChTime; - - /*Minimum channel time*/ - tANI_U16 usPassiveMinChTime; - - /*Maximum channel time*/ - tANI_U16 usPassiveMaxChTime; - - /*Cb State*/ - ePhyChanBondState cbState; - -} tUpdateScanParams, * tpUpdateScanParams; - -/* - Update scan params -*/ -typedef PACKED_PRE struct PACKED_POST -{ - - /*Host setting for 11d*/ - tANI_U8 b11dEnabled; - - /*Lets PNO know that host has determined the regulatory domain*/ - tANI_U8 b11dResolved; - - /*Channels on which PNO is allowed to scan*/ - tANI_U8 ucChannelCount; - tANI_U8 aChannels[WLAN_HAL_PNO_MAX_NETW_CHANNELS_EX]; - - /*Minimum channel time*/ - tANI_U16 usActiveMinChTime; - - /*Maximum channel time*/ - tANI_U16 usActiveMaxChTime; - - /*Minimum channel time*/ - tANI_U16 usPassiveMinChTime; - - /*Maximum channel time*/ - tANI_U16 usPassiveMaxChTime; - - /*Cb State*/ - ePhyChanBondState cbState; - -} tUpdateScanParamsEx, * tpUpdateScanParamsEx; - -/* - Update scan params - sent from host to PNO - to be used during PNO scanning -*/ -typedef PACKED_PRE struct PACKED_POST{ - - tHalMsgHeader header; - tUpdateScanParams scanParams; -} tUpdateScanParamsReq, *tpUpdateScanParamsReq; - -/* - Update scan params - sent from host to PNO - to be used during PNO scanning -*/ -typedef PACKED_PRE struct PACKED_POST{ - - tHalMsgHeader header; - tUpdateScanParamsEx scanParams; -} tUpdateScanParamsReqEx, *tpUpdateScanParamsReqEx; - -/* - Update scan params - sent from host to PNO - to be used during PNO scanning -*/ -typedef PACKED_PRE struct PACKED_POST{ - - tHalMsgHeader header; - - /*status of the request */ - tANI_U32 status; - -} tUpdateScanParamsResp, *tpUpdateScanParamsResp; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_SET_TX_PER_TRACKING_REQ - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 ucTxPerTrackingEnable; /* 0: disable, 1:enable */ - tANI_U8 ucTxPerTrackingPeriod; /* Check period, unit is sec. */ - tANI_U8 ucTxPerTrackingRatio; /* (Fail TX packet)/(Total TX packet) ratio, the unit is 10%. */ - tANI_U32 uTxPerTrackingWatermark; /* A watermark of check number, once the tx packet exceed this number, we do the check, default is 5 */ -} tHalTxPerTrackingReqParam, *tpHalTxPerTrackingReqParam; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalTxPerTrackingReqParam txPerTrackingParams; -} tHalSetTxPerTrackingReqMsg, *tpHalSetTxPerTrackingReqMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_SET_TX_PER_TRACKING_RSP - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; -} tHalTxPerTrackingRspParams, *tpHalTxPerTrackingRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalTxPerTrackingRspParams txPerTrackingRspParams; -} tHalSetTxPerTrackingRspMsg, *tpHalSetTxPerTrackingRspMsg; - -/*--------------------------------------------------------------------------- - * WLAN_HAL_TX_PER_HIT_IND - *--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; -}tTxPerHitIndMsg, *tpTxPerHitIndMsg; - -/*--------------------------------------------------------------------------- - *******************Packet Filtering Definitions Begin******************* - *--------------------------------------------------------------------------*/ -#define HAL_PROTOCOL_DATA_LEN 8 -#define HAL_MAX_NUM_MULTICAST_ADDRESS 240 -#define HAL_MAX_NUM_FILTERS 20 -#define HAL_MAX_CMP_PER_FILTER 10 - -typedef enum -{ - HAL_RCV_FILTER_TYPE_INVALID, - HAL_RCV_FILTER_TYPE_FILTER_PKT, - HAL_RCV_FILTER_TYPE_BUFFER_PKT, - HAL_RCV_FILTER_TYPE_MAX_ENUM_SIZE -}tHalReceivePacketFilterType; - -typedef enum -{ - HAL_FILTER_PROTO_TYPE_INVALID, - HAL_FILTER_PROTO_TYPE_MAC, - HAL_FILTER_PROTO_TYPE_ARP, - HAL_FILTER_PROTO_TYPE_IPV4, - HAL_FILTER_PROTO_TYPE_IPV6, - HAL_FILTER_PROTO_TYPE_UDP, - HAL_FILTER_PROTO_TYPE_MAX -}tHalRcvPktFltProtocolType; - -typedef enum -{ - HAL_FILTER_CMP_TYPE_INVALID, - HAL_FILTER_CMP_TYPE_EQUAL, - HAL_FILTER_CMP_TYPE_MASK_EQUAL, - HAL_FILTER_CMP_TYPE_NOT_EQUAL, - HAL_FILTER_CMP_TYPE_MAX -}tHalRcvPktFltCmpFlagType; - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 protocolLayer; - tANI_U8 cmpFlag; - tANI_U16 dataLength; /* Length of the data to compare */ - tANI_U8 dataOffset; /* from start of the respective frame header */ - tANI_U8 reserved; /* Reserved field */ - tANI_U8 compareData[HAL_PROTOCOL_DATA_LEN]; /* Data to compare */ - tANI_U8 dataMask[HAL_PROTOCOL_DATA_LEN]; /* Mask to be applied on the received packet data before compare */ -}tHalRcvPktFilterParams, *tpHalRcvPktFilterParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 filterId; - tANI_U8 filterType; - tANI_U8 numParams; - tANI_U32 coalesceTime; - tHalRcvPktFilterParams paramsData[1]; -}tHalRcvPktFilterCfgType, *tpHalRcvPktFilterCfgType; - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 filterId; - tANI_U8 filterType; - tANI_U8 numParams; - tANI_U32 coleasceTime; - tANI_U8 bssIdx; - tHalRcvPktFilterParams paramsData[1]; -}tHalSessionizedRcvPktFilterCfgType, *tpHalSessionizedRcvPktFilterCfgType; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalRcvPktFilterCfgType pktFilterCfg; -} tHalSetRcvPktFilterReqMsg, *tpHalSetRcvPktFilterReqMsg; - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 dataOffset; /* from start of the respective frame header */ - tANI_U32 cMulticastAddr; - tSirMacAddr multicastAddr[HAL_MAX_NUM_MULTICAST_ADDRESS]; - tANI_U8 bssIdx; -} tHalRcvFltMcAddrListType, *tpHalRcvFltMcAddrListType; - -typedef PACKED_PRE struct PACKED_POST -{ - /* success or failure */ - tANI_U32 status; - tANI_U8 bssIdx; -} tHalSetPktFilterRspParams, *tpHalSetPktFilterRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalSetPktFilterRspParams pktFilterRspParams; -} tHalSetPktFilterRspMsg, *tpHalSetPktFilterRspMsg; - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 bssIdx; -} tHalRcvFltPktMatchCntReqParams, *tpHalRcvFltPktMatchCntReqParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalRcvFltPktMatchCntReqParams pktMatchCntReqParams; -} tHalRcvFltPktMatchCntReqMsg, *tpHalRcvFltPktMatchCntReqMsg; - - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 filterId; - tANI_U32 matchCnt; -} tHalRcvFltPktMatchCnt; -typedef PACKED_PRE struct PACKED_POST -{ - /* Success or Failure */ - tANI_U32 status; - tANI_U32 matchCnt; - tHalRcvFltPktMatchCnt filterMatchCnt[HAL_MAX_NUM_FILTERS]; - tANI_U8 bssIdx; -} tHalRcvFltPktMatchRspParams, *tptHalRcvFltPktMatchRspParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalRcvFltPktMatchRspParams fltPktMatchRspParams; -} tHalRcvFltPktMatchCntRspMsg, *tpHalRcvFltPktMatchCntRspMsg; - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U32 status; /* only valid for response message */ - tANI_U8 filterId; - tANI_U8 bssIdx; -}tHalRcvFltPktClearParam, *tpHalRcvFltPktClearParam; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalRcvFltPktClearParam filterClearParam; -} tHalRcvFltPktClearReqMsg, *tpHalRcvFltPktClearReqMsg; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalRcvFltPktClearParam filterClearParam; -} tHalRcvFltPktClearRspMsg, *tpHalRcvFltPktClearRspMsg; - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U32 status; - tANI_U8 bssIdx; -}tHalRcvFltPktSetMcListRspType, *tpHalRcvFltPktSetMcListRspType; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalRcvFltMcAddrListType mcAddrList; -} tHalRcvFltPktSetMcListReqMsg, *tpHalRcvFltPktSetMcListReqMsg; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalRcvFltPktSetMcListRspType rspParam; -} tHalRcvFltPktSetMcListRspMsg, *tpHalRcvFltPktSetMcListRspMsg; - - -/*--------------------------------------------------------------------------- - *******************Packet Filtering Definitions End******************* - *--------------------------------------------------------------------------*/ - -/* - * There are two versions of this message - * Version 1 : Base version - * Current version : Base version + Max LI modulated DTIM - */ -typedef PACKED_PRE struct PACKED_POST -{ - /* Ignore DTIM */ - tANI_U32 uIgnoreDTIM; - - /*DTIM Period*/ - tANI_U32 uDTIMPeriod; - - /* Listen Interval */ - tANI_U32 uListenInterval; - - /* Broadcast Multicast Filter */ - tANI_U32 uBcastMcastFilter; - - /* Beacon Early Termination */ - tANI_U32 uEnableBET; - - /* Beacon Early Termination Interval */ - tANI_U32 uBETInterval; -}tSetPowerParamsVer1Type, *tpSetPowerParamsVer1Type; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tSetPowerParamsVer1Type powerParams; -} tSetPowerParamsVer1ReqMsg, *tpSetPowerParamsVer1ReqMsg; - -typedef PACKED_PRE struct PACKED_POST -{ - /* Ignore DTIM */ - tANI_U32 uIgnoreDTIM; - - /*DTIM Period*/ - tANI_U32 uDTIMPeriod; - - /* Listen Interval */ - tANI_U32 uListenInterval; - - /* Broadcast Multicast Filter */ - tANI_U32 uBcastMcastFilter; - - /* Beacon Early Termination */ - tANI_U32 uEnableBET; - - /* Beacon Early Termination Interval */ - tANI_U32 uBETInterval; - - /* MAX LI for modulated DTIM */ - tANI_U32 uMaxLIModulatedDTIM; -}tSetPowerParamsType, *tpSetPowerParamsType; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tSetPowerParamsType powerParams; -} tSetPowerParamsReqMsg, *tpSetPowerParamsReqMsg; - -typedef PACKED_PRE struct PACKED_POST{ - - tHalMsgHeader header; - - /*status of the request */ - tANI_U32 status; - -} tSetPowerParamsResp, *tpSetPowerParamsResp; - -/*--------------------------------------------------------------------------- - ****************Capability bitmap exchange definitions and macros starts************* - *--------------------------------------------------------------------------*/ - -typedef enum { - MCC = 0, - P2P = 1, - DOT11AC = 2, - SLM_SESSIONIZATION = 3, - DOT11AC_OPMODE = 4, - SAP32STA = 5, - TDLS = 6, - P2P_GO_NOA_DECOUPLE_INIT_SCAN = 7, - WLANACTIVE_OFFLOAD = 8, - BEACON_OFFLOAD = 9, - SCAN_OFFLOAD = 10, - ROAM_OFFLOAD = 11, - BCN_MISS_OFFLOAD = 12, - STA_POWERSAVE = 13, - STA_ADVANCED_PWRSAVE = 14, - AP_UAPSD = 15, - AP_DFS = 16, - BLOCKACK = 17, - PHY_ERR = 18, - BCN_FILTER = 19, - RTT = 20, - RATECTRL = 21, - WOW = 22, - WLAN_ROAM_SCAN_OFFLOAD = 23, - SPECULATIVE_PS_POLL = 24, - SCAN_SCH = 25, - IBSS_HEARTBEAT_OFFLOAD = 26, - WLAN_SCAN_OFFLOAD = 27, - WLAN_PERIODIC_TX_PTRN = 28, - ADVANCE_TDLS = 29, - BATCH_SCAN = 30, - MAX_FEATURE_SUPPORTED = 128, -} placeHolderInCapBitmap; - -typedef PACKED_PRE struct PACKED_POST{ - - tANI_U32 featCaps[4]; -} tWlanFeatCaps, *tpWlanFeatCaps; - -typedef PACKED_PRE struct PACKED_POST{ - - tHalMsgHeader header; - tWlanFeatCaps wlanFeatCaps; - -} tWlanFeatCapsMsg, *tpWlanFeatCapsMsg; - -#define IS_MCC_SUPPORTED_BY_HOST (!!(halMsg_GetHostWlanFeatCaps(MCC))) -#define IS_SLM_SESSIONIZATION_SUPPORTED_BY_HOST (!!(halMsg_GetHostWlanFeatCaps(SLM_SESSIONIZATION))) -#define IS_FEATURE_SUPPORTED_BY_HOST(featEnumValue) (!!halMsg_GetHostWlanFeatCaps(featEnumValue)) -#define IS_WLANACTIVE_OFFLOAD_SUPPORTED_BY_HOST (!!(halMsg_GetHostWlanFeatCaps(WLANACTIVE_OFFLOAD))) -#define IS_WLAN_ROAM_SCAN_OFFLOAD_SUPPORTED_BY_HOST (!!(halMsg_GetHostWlanFeatCaps(WLAN_ROAM_SCAN_OFFLOAD))) -#define IS_IBSS_HEARTBEAT_OFFLOAD_SUPPORTED_BY_HOST (!!(halMsg_GetHostWlanFeatCaps(IBSS_HEARTBEAT_OFFLOAD))) -#define IS_SCAN_OFFLOAD_SUPPORTED_BY_HOST (!!(halMsg_GetHostWlanFeatCaps(WLAN_SCAN_OFFLOAD))) - -tANI_U8 halMsg_GetHostWlanFeatCaps(tANI_U8 feat_enum_value); - -#define setFeatCaps(a,b) { tANI_U32 arr_index, bit_index; \ - if ((b)<=127) { \ - arr_index = (b)/32; \ - bit_index = (b)%32; \ - if(arr_index < 4) \ - (a)->featCaps[arr_index] |= (1<featCaps[arr_index] & (1<featCaps[arr_index] &= ~(1<FW - WLAN_HAL_LEADER_CANCELED, //Host-->FW - WLAN_HAL_LEADER_PICK_NEW, //FW-->Host - WLAN_HAL_LEADER_IND_MAX = WLAN_HAL_MAX_ENUM_SIZE -}tLbpUpdateIndType; - -typedef enum -{ - WLAN_HAL_LBP_LEADER_ROLE, - WLAN_HAL_LBP_TRANSMITTER_ROLE, - WLAN_HAL_LBP_ROLE_MAX = WLAN_HAL_MAX_ENUM_SIZE -}tLbpRoleType; - -typedef PACKED_PRE struct PACKED_POST -{ - tLbpUpdateIndType indication; - - /* Role of the entity generating this indication */ - tLbpRoleType role; - - /* MAC address of MCAST Transmitter (source) */ - tSirMacAddr mcastTransmitter; - - /* MAC Address of Multicast Group (01-00-5E-xx-xx-xx) */ - tSirMacAddr mcastGroup; - - /* MAC address of MCAST Receiver Leader */ - tSirMacAddr mcastLeader; - - /* Candidate list for indication = WLAN_HAL_LEADER_PICK_NEW */ - tSirMacAddr leader[HAL_NUM_MAX_LEADERS]; -} tHalLbpUpdateIndParams, *tpHalLbpUpdateIndParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalLbpUpdateIndParams leaderIndParams; -} tHalLbpUpdateInd, *tpHalLbpUpdateInd; - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 staIdx; // Station Idx; - tANI_U32 txRate; // Legacy transmit rate, in units of 500 kbit/sec, - // for the most recently transmitted frame - tANI_U32 mcsIndex; // mcs index for HT20 and HT40 rates - tANI_U32 txRateFlags; // to differentiate between HT20 and - // HT40 rates; short and long guard interval - tANI_S8 rssi; // RSSI of the last received beacon -}tHalIbssPeerParams, *tpHalIbssPeerParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U32 status; // success or failure - tANI_U8 numOfPeers; // Number of Peers for - // which stats are being reported - tHalIbssPeerParams ibssPeerParams[1]; // Stats of peer in IBSS -}tHalIbssPeerInfoRspParams, *tpHalIbssPeerInfoRspParams; - -// WLAN_HAL_GET_IBSS_PEER_INFO_RSP -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalIbssPeerInfoRspParams ibssPeerInfoRspParams; -}tHalIbssPeerInfoRsp, *tpHalIbssPeerInfoRsp; - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 bssIdx; // Bss Index - tANI_BOOLEAN allPeerInfoReqd; // If set, all IBSS peers stats are reported - tANI_U8 staIdx; // If allPeerInfoReqd is not set, - // only stats of peer with - // staIdx is reported -}tHalIbssPeerInfoReqParams, *tpHalIbssPeerInfoReqParams; - -// WLAN_HAL_GET_IBSS_PEER_INFO_REQ -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalIbssPeerInfoReqParams ibssPeerInfoReqParams; -}tHalIbssPeerInfoReq, *tpHalIbssPeerInfoReq; - -/*--------------------------------------------------------------------------- - WLAN_HAL_RATE_UPDATE_IND - *-------------------------------------------------------------------------*/ - typedef PACKED_PRE struct PACKED_POST -{ - /* 0 implies UCAST RA, positive value implies fixed rate, -1 implies ignore this param */ - tANI_S32 ucastDataRate; //unit Mbpsx10 - - /* TX flag to differentiate between HT20, HT40 etc */ - tTxRateInfoFlags ucastDataRateTxFlag; - - /* BSSID - Optional. 00-00-00-00-00-00 implies apply to all BCAST STAs */ - tSirMacAddr bssid; - - /* 0 implies MCAST RA, positive value implies fixed rate, -1 implies ignore */ - tANI_S32 reliableMcastDataRate; //unit Mbpsx10 - - /* TX flag to differentiate between HT20, HT40 etc */ - tTxRateInfoFlags reliableMcastDataRateTxFlag; - - /* Default (non-reliable) MCAST(or BCAST) fixed rate in 2.4 GHz, 0 implies ignore */ - tANI_U32 mcastDataRate24GHz; //unit Mbpsx10 - - /* TX flag to differentiate between HT20, HT40 etc */ - tTxRateInfoFlags mcastDataRate24GHzTxFlag; - - /* Default (non-reliable) MCAST(or BCAST) fixed rate in 5 GHz, 0 implies ignore */ - tANI_U32 mcastDataRate5GHz; //unit Mbpsx10 - - /* TX flag to differentiate between HT20, HT40 etc */ - tTxRateInfoFlags mcastDataRate5GHzTxFlag; - -} tHalRateUpdateParams, *tpHalRateUpdateParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalRateUpdateParams halRateUpdateParams; -} tHalRateUpdateInd, * tpHalRateUpdateInd; - -/*--------------------------------------------------------------------------- -* WLAN_HAL_TX_FAIL_IND -*--------------------------------------------------------------------------*/ -// Northbound indication from FW to host on weak link detection -typedef PACKED_PRE struct PACKED_POST -{ - // Sequence number increases by 1 whenever the device driver - // sends a notification event. This is cleared as 0 when the - // JOIN IBSS commamd is issued - tANI_U16 seqNo; - tANI_U16 staId; - tANI_U8 macAddr[HAL_MAC_ADDR_LEN]; -} tHalTXFailIndParams, *tpHalTXFailIndParams; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tHalTXFailIndParams txFailIndParams; -} tHalTXFailIndMsg, *tpHalTXFailIndMsg; - -/*--------------------------------------------------------------------------- -* WLAN_HAL_TX_FAIL_MONITOR_IND -*--------------------------------------------------------------------------*/ -// Southbound message from Host to monitor the Tx failures -typedef PACKED_PRE struct PACKED_POST -{ - // tx_fail_count = 0 should disable the TX Fail monitor, non-zero value should enable it. - tANI_U8 tx_fail_count; -} tTXFailMonitorInfo, *tpTXFailMonitorInfo; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tTXFailMonitorInfo txFailMonitor; -} tTXFailMonitorInd, *tpTXFailMonitorInd; - -/*--------------------------------------------------------------------------- -* WLAN_HAL_IP_FORWARD_TABLE_UPDATE_IND -*--------------------------------------------------------------------------*/ -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 destIpv4Addr[HAL_IPV4_ADDR_LEN]; - tANI_U8 nextHopMacAddr[HAL_MAC_ADDR_LEN]; -} tDestIpNextHopMacPair; - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 numEntries; - tDestIpNextHopMacPair destIpMacPair[1]; -} tWlanIpForwardTableUpdateIndParam; - -typedef PACKED_PRE struct PACKED_POST -{ - tHalMsgHeader header; - tWlanIpForwardTableUpdateIndParam ipForwardTableParams; -} tWlanIpForwardTableUpdateInd; - -/*--------------------------------------------------------------------------- - *-------------------------------------------------------------------------*/ - -#if defined(__ANI_COMPILER_PRAGMA_PACK_STACK) -#pragma pack(pop) -#elif defined(__ANI_COMPILER_PRAGMA_PACK) -#else -#endif - -#endif /* _WLAN_HAL_MSG_H_ */ - diff --git a/wcnss/riva/inc/wlan_nv.h b/wcnss/riva/inc/wlan_nv.h deleted file mode 100644 index 4ef15cdcd749..000000000000 --- a/wcnss/riva/inc/wlan_nv.h +++ /dev/null @@ -1,813 +0,0 @@ -/* - * Copyright (c) 2013, The Linux Foundation. All rights reserved. - * - * Previously licensed under the ISC license by Qualcomm Atheros, Inc. - * - * - * Permission to use, copy, modify, and/or distribute this software for - * any purpose with or without fee is hereby granted, provided that the - * above copyright notice and this permission notice appear in all - * copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL - * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE - * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL - * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -/* - * This file was originally distributed by Qualcomm Atheros, Inc. - * under proprietary terms before Copyright ownership was assigned - * to the Linux Foundation. - */ - -/** ------------------------------------------------------------------------- * - ------------------------------------------------------------------------- * - - - \file wlan_nv.h - - \brief Types for NV implementation - Anything that needs to be publicly available should - be in this file - - $Id$ - - Copyright (C) 2006 Airgo Networks, Incorporated - - - ========================================================================== */ - -#if !defined( __WLAN_NV_H ) -#define __WLAN_NV_H - -#include "halLegacyPalTypes.h" -#include "halCompiler.h" - -//From HAL/inc/halNv.h -typedef enum -{ - //Common Nv Fields - NV_COMMON_PRODUCT_ID, // 0 - NV_COMMON_PRODUCT_BANDS, // 1 - NV_COMMON_NUM_OF_TX_CHAINS, // 2 - NV_COMMON_NUM_OF_RX_CHAINS, // 3 - NV_COMMON_MAC_ADDR, // 4 - NV_COMMON_MFG_SERIAL_NUMBER, // 5 - NV_COMMON_WLAN_NV_REV_ID, // 6 - NV_COMMON_COUPLER_TYPE, // 7 - NV_COMMON_NV_VERSION, // 8 - NV_COMMON_RESERVED, // 9 - - NUM_NV_FIELDS, - NV_MAX_FIELD = 0x7FFFFFFF /* define as 4 bytes data */ - -}eNvField; - - -#define NV_FIELD_MAC_ADDR_SIZE 6 -#define NV_FIELD_MFG_SN_SIZE 40 -typedef enum -{ - PRODUCT_BAND_11_B_G = 0, //Gen6.0 is only this setting - PRODUCT_BAND_11_A_B_G = 1, - PRODUCT_BAND_11_A = 2, - - NUM_PRODUCT_BANDS, - NUM_PRODUCT_BANDS_INVALID = 0x7FFFFFFF /* define as 4 bytes data */ -}eNvProductBands; //NV_COMMON_PRODUCT_BANDS - -#define EXTERNAL_PA 1 -#define INTERNAL_PA 0 - -#define EXTERNAL_LNA 1 -#define INTERNAL_LNA 0 - -#define EXTERNAL_COUPLER 1 -#define INTERNAL_COUPLER 0 - -#define EXTERNAL_PDET 1 -#define INTERNAL_PDET 0 - -#define DPD_ENABLED 1 -#define DPD_DISABLED 0 - -#define TPC_MODE_OPEN_LOOP 0 -#define TPC_MODE_SCPC 1 -#define TPC_MODE_CLPC_MODE2 2 -#define TPC_MODE_CLPC_MODE3 3 - -#define PA_POLARITY_TX_UNUSED 0 -#define PA_POLARITY_TX_POSITIVE 1 -#define PA_POLARITY_TX_NEGATIVE 2 -#define PA_POLARITY_RX_UNUSED 0 -#define PA_POLARITY_RX_POSITIVE 1 -#define PA_POLARITY_RX_NEGATIVE 2 - -#define NV_VERSION_INVALID 0xFF -#define NV_VERSION_11N_11AC_COUPER_TYPE 0 -#define NV_VERSION_11N_11AC_FW_CONFIG 1 -#define NV_VERSION_LPDC_FW_CONFIG 2 - -#ifdef WCN_PRONTO -#define WLAN_NV_VERSION NV_VERSION_LPDC_FW_CONFIG -#else //WCN_PRONTO -#define WLAN_NV_VERSION NV_VERSION_11N_11AC_FW_CONFIG -#endif //WCN_PRONTO - -typedef PACKED_PRE struct PACKED_POST -{ - uint8 macAddr1[NV_FIELD_MAC_ADDR_SIZE]; /* Default, not change name for compatibility */ - uint8 macAddr2[NV_FIELD_MAC_ADDR_SIZE]; - uint8 macAddr3[NV_FIELD_MAC_ADDR_SIZE]; - uint8 macAddr4[NV_FIELD_MAC_ADDR_SIZE]; -} sMacAddr; - -typedef PACKED_PRE union PACKED_POST -{ - //common NV fields - uint16 productId; - uint8 productBands; - uint8 wlanNvRevId; - uint8 numOfTxChains; - uint8 numOfRxChains; - sMacAddr macAddr; - uint8 mfgSN[NV_FIELD_MFG_SN_SIZE]; - uint8 couplerType; - uint8 nvVersion; -} uNvFields; - - -//format of common part of nv -typedef PACKED_PRE struct PACKED_POST -{ - //always ensure fields are aligned to 32-bit boundaries - uint16 productId; - uint8 productBands; - uint8 wlanNvRevId; //0: WCN1312, 1: WCN1314, 2: WCN3660 - - uint8 numOfTxChains; - uint8 numOfRxChains; - uint8 macAddr[NV_FIELD_MAC_ADDR_SIZE]; /* Default, not change name for compatibility */ - uint8 macAddr2[NV_FIELD_MAC_ADDR_SIZE]; - uint8 macAddr3[NV_FIELD_MAC_ADDR_SIZE]; - uint8 macAddr4[NV_FIELD_MAC_ADDR_SIZE]; - uint8 mfgSN[NV_FIELD_MFG_SN_SIZE]; - uint8 couplerType; - uint8 nvVersion; -} sNvFields; - - -//From wlanfw/inc/halPhyTypes.h - -typedef int8 tPowerdBm; //power in signed 8-bit integer, no decimal places - -typedef PACKED_PRE union PACKED_POST -{ - uint32 measurement; //measured values can be passed to pttApi, but are maintained to 2 decimal places internally - int16 reported; //used internally only - reported values only maintain 2 decimals places -}uAbsPwrPrecision; - -typedef enum -{ - PHY_TX_CHAIN_0 = 0, - - NUM_PHY_MAX_TX_CHAINS = 1, - PHY_MAX_TX_CHAINS = NUM_PHY_MAX_TX_CHAINS, - PHY_ALL_TX_CHAINS, - - //possible tx chain combinations - PHY_NO_TX_CHAINS, - PHY_TX_CHAIN_INVALID = 0x7FFFFFFF /* define as 4 bytes data */ -}ePhyTxChains; - -//From wlanfw/inc/halRfTypes.h - -typedef enum -{ - REG_DOMAIN_FCC, - REG_DOMAIN_ETSI, - REG_DOMAIN_JAPAN, - REG_DOMAIN_WORLD, - REG_DOMAIN_N_AMER_EXC_FCC, - REG_DOMAIN_APAC, - REG_DOMAIN_KOREA, - REG_DOMAIN_HI_5GHZ, - REG_DOMAIN_NO_5GHZ, - - NUM_REG_DOMAINS, - NUM_REG_DOMAINS_INVALID = 0x7FFFFFFF /* define as 4 bytes data */ -}eRegDomainId; - -typedef enum -{ - RF_SUBBAND_2_4_GHZ = 0, - RF_SUBBAND_5_LOW_GHZ = 1, //Low & Mid U-NII - RF_SUBBAND_5_MID_GHZ = 2, //ETSI - RF_SUBBAND_5_HIGH_GHZ = 3, //High U-NII - RF_SUBBAND_4_9_GHZ = 4, //Japanese - - - NUM_RF_SUBBANDS, - - MAX_RF_SUBBANDS, - INVALID_RF_SUBBAND, - - RF_BAND_2_4_GHZ = 0, - RF_BAND_5_GHZ = 1, - NUM_RF_BANDS, - BOTH_RF_BANDS, - RF_SUBBAND_INVALID = 0x7FFFFFFF /* define as 4 bytes data */ -}eRfSubBand; - -typedef enum -{ - //2.4GHz Band - RF_CHAN_1 = 0, - RF_CHAN_2 = 1, - RF_CHAN_3 = 2, - RF_CHAN_4 = 3, - RF_CHAN_5 = 4, - RF_CHAN_6 = 5, - RF_CHAN_7 = 6, - RF_CHAN_8 = 7, - RF_CHAN_9 = 8, - RF_CHAN_10 = 9, - RF_CHAN_11 = 10, - RF_CHAN_12 = 11, - RF_CHAN_13 = 12, - RF_CHAN_14 = 13, - - //4.9GHz Band - RF_CHAN_240 = 14, - RF_CHAN_244 = 15, - RF_CHAN_248 = 16, - RF_CHAN_252 = 17, - RF_CHAN_208 = 18, - RF_CHAN_212 = 19, - RF_CHAN_216 = 20, - - //5GHz Low & Mid U-NII Band - RF_CHAN_36 = 21, - RF_CHAN_40 = 22, - RF_CHAN_44 = 23, - RF_CHAN_48 = 24, - RF_CHAN_52 = 25, - RF_CHAN_56 = 26, - RF_CHAN_60 = 27, - RF_CHAN_64 = 28, - - //5GHz Mid Band - ETSI & FCC - RF_CHAN_100 = 29, - RF_CHAN_104 = 30, - RF_CHAN_108 = 31, - RF_CHAN_112 = 32, - RF_CHAN_116 = 33, - RF_CHAN_120 = 34, - RF_CHAN_124 = 35, - RF_CHAN_128 = 36, - RF_CHAN_132 = 37, - RF_CHAN_136 = 38, - RF_CHAN_140 = 39, - - //5GHz High U-NII Band - RF_CHAN_149 = 40, - RF_CHAN_153 = 41, - RF_CHAN_157 = 42, - RF_CHAN_161 = 43, - RF_CHAN_165 = 44, - - //CHANNEL BONDED CHANNELS - RF_CHAN_BOND_3 = 45, - RF_CHAN_BOND_4 = 46, - RF_CHAN_BOND_5 = 47, - RF_CHAN_BOND_6 = 48, - RF_CHAN_BOND_7 = 49, - RF_CHAN_BOND_8 = 50, - RF_CHAN_BOND_9 = 51, - RF_CHAN_BOND_10 = 52, - RF_CHAN_BOND_11 = 53, - RF_CHAN_BOND_242 = 54, //4.9GHz Band - RF_CHAN_BOND_246 = 55, - RF_CHAN_BOND_250 = 56, - RF_CHAN_BOND_210 = 57, - RF_CHAN_BOND_214 = 58, - RF_CHAN_BOND_38 = 59, //5GHz Low & Mid U-NII Band - RF_CHAN_BOND_42 = 60, - RF_CHAN_BOND_46 = 61, - RF_CHAN_BOND_50 = 62, - RF_CHAN_BOND_54 = 63, - RF_CHAN_BOND_58 = 64, - RF_CHAN_BOND_62 = 65, - RF_CHAN_BOND_102 = 66, //5GHz Mid Band - ETSI & FCC - RF_CHAN_BOND_106 = 67, - RF_CHAN_BOND_110 = 68, - RF_CHAN_BOND_114 = 69, - RF_CHAN_BOND_118 = 70, - RF_CHAN_BOND_122 = 71, - RF_CHAN_BOND_126 = 72, - RF_CHAN_BOND_130 = 73, - RF_CHAN_BOND_134 = 74, - RF_CHAN_BOND_138 = 75, - RF_CHAN_BOND_151 = 76, //5GHz High U-NII Band - RF_CHAN_BOND_155 = 77, - RF_CHAN_BOND_159 = 78, - RF_CHAN_BOND_163 = 79, - - NUM_RF_CHANNELS, - - MIN_2_4GHZ_CHANNEL = RF_CHAN_1, - MAX_2_4GHZ_CHANNEL = RF_CHAN_14, - - MIN_5GHZ_CHANNEL = RF_CHAN_240, - MAX_5GHZ_CHANNEL = RF_CHAN_165, - NUM_5GHZ_CHANNELS = (MAX_5GHZ_CHANNEL - MIN_5GHZ_CHANNEL + 1), - - MIN_20MHZ_RF_CHANNEL = RF_CHAN_1, - MAX_20MHZ_RF_CHANNEL = RF_CHAN_165, - NUM_20MHZ_RF_CHANNELS = (MAX_20MHZ_RF_CHANNEL - MIN_20MHZ_RF_CHANNEL + 1), - - MIN_40MHZ_RF_CHANNEL = RF_CHAN_BOND_3, - MAX_40MHZ_RF_CHANNEL = RF_CHAN_BOND_163, - NUM_40MHZ_RF_CHANNELS = (MAX_40MHZ_RF_CHANNEL - MIN_40MHZ_RF_CHANNEL + 1), - - MIN_CB_2_4GHZ_CHANNEL = RF_CHAN_BOND_3, - MAX_CB_2_4GHZ_CHANNEL = RF_CHAN_BOND_11, - - MIN_CB_5GHZ_CHANNEL = RF_CHAN_BOND_242, - MAX_CB_5GHZ_CHANNEL = RF_CHAN_BOND_163, - - NUM_TPC_2_4GHZ_CHANNELS = 14, - NUM_TPC_5GHZ_CHANNELS = NUM_5GHZ_CHANNELS, - - INVALID_RF_CHANNEL = 0xBAD, - RF_CHANNEL_INVALID_MAX_FIELD = 0x7FFFFFFF /* define as 4 bytes data */ -}eRfChannels; - -typedef enum -{ - RF_CHAN_1_1 = RF_CHAN_1, - RF_CHAN_2_1 = RF_CHAN_2, - RF_CHAN_3_1 = RF_CHAN_3, - RF_CHAN_4_1 = RF_CHAN_4, - RF_CHAN_5_1 = RF_CHAN_5, - RF_CHAN_6_1 = RF_CHAN_6, - RF_CHAN_7_1 = RF_CHAN_7, - RF_CHAN_8_1 = RF_CHAN_8, - RF_CHAN_9_1 = RF_CHAN_9, - RF_CHAN_10_1 = RF_CHAN_10, - RF_CHAN_11_1 = RF_CHAN_11, - RF_CHAN_12_1 = RF_CHAN_12, - RF_CHAN_13_1 = RF_CHAN_13, - RF_CHAN_14_1 = RF_CHAN_14, -// The above params are used for scripts. - NUM_2_4GHZ_CHANNELS, -}eRfChannels_2_4GHz; - -enum -{ - NV_CHANNEL_DISABLE, - NV_CHANNEL_ENABLE, - NV_CHANNEL_DFS, - NV_CHANNEL_INVALID -}; -typedef uint8 eNVChannelEnabledType; - -typedef PACKED_PRE struct PACKED_POST -{ - eNVChannelEnabledType enabled; - tPowerdBm pwrLimit; -}sRegulatoryChannel; - -typedef PACKED_PRE struct PACKED_POST -{ - sRegulatoryChannel channels[NUM_RF_CHANNELS]; - uAbsPwrPrecision antennaGain[NUM_RF_SUBBANDS]; - uAbsPwrPrecision bRatePowerOffset[NUM_2_4GHZ_CHANNELS]; - uAbsPwrPrecision gnRatePowerOffset[NUM_RF_CHANNELS]; -}ALIGN_4 sRegulatoryDomains; - -typedef PACKED_PRE struct PACKED_POST -{ - int16 bRssiOffset[NUM_RF_CHANNELS]; - int16 gnRssiOffset[NUM_RF_CHANNELS]; -}ALIGN_4 sRssiChannelOffsets; - -typedef PACKED_PRE struct PACKED_POST -{ - uint16 targetFreq; //number in MHz - uint16 channelNum; //channel number as in the eRfChannels enumeration - eRfSubBand band; //band that this channel belongs to -}tRfChannelProps; - -typedef enum -{ - MODE_802_11B = 0, - MODE_802_11AG = 1, - MODE_802_11N = 2, - NUM_802_11_MODES, - MODE_802_11_INVALID = 0x7FFFFFFF /* define as 4 bytes data */ -} e80211Modes; - -#define HW_CAL_VALUES_VALID_BMAP_UNUSED 0 //Value -//Bit mask -#define HW_VAL_VALUES_VALID_BMAP_SLEEP_TIME_OVERHEAD_2G_MASK 0x1 -#define HW_VAL_VALUES_VALID_BMAP_SLEEP_TIME_OVERHEAD_5G_MASK 0x2 -#define HW_VAL_VALUES_VALID_BMAP_SLEEP_TIME_OVERHEAD_xLNA_5G_MASK 0x4 -#define HW_VAL_VALUES_VALID_TXBBF_SEL_9MHZ_MASK 0x8 -#define HW_VAL_VALUES_VALID_CUSTOM_TCXO_REG8_MASK 0x10 -#define HW_VAL_VALUES_VALID_CUSTOM_TCXO_REG9_MASK 0x20 - - -//From wlanfw/inc/halPhyCalMemory.h -typedef PACKED_PRE struct PACKED_POST -{ - uint16 psSlpTimeOvrHd2G; - uint16 psSlpTimeOvrHd5G; - - uint16 psSlpTimeOvrHdxLNA5G; - uint8 nv_TxBBFSel9MHz : 1; - uint8 hwParam1 : 7; - uint8 hwParam2; - - uint16 custom_tcxo_reg8; - uint16 custom_tcxo_reg9; - - uint32 hwParam3; - uint32 hwParam4; - uint32 hwParam5; - uint32 hwParam6; - uint32 hwParam7; - uint32 hwParam8; - uint32 hwParam9; - uint32 hwParam10; - uint32 hwParam11; -}sCalData; - -typedef PACKED_PRE struct PACKED_POST -{ - uint32 validBmap; //use eNvCalID - sCalData calData; -}sHwCalValues; - -typedef PACKED_PRE struct PACKED_POST -{ - uint32 txFirFilterMode; -}sTxBbFilterMode; - -typedef PACKED_PRE struct PACKED_POST -{ - int16 ofdmPwrOffset; - int16 rsvd; -}sOfdmCmdPwrOffset; - -//From wlanfw/inc/halPhyCfg.h -typedef uint8 tTpcLutValue; - -#define MAX_TPC_CAL_POINTS (8) - -typedef uint8 tPowerDetect; //7-bit power detect reading - -typedef PACKED_PRE struct PACKED_POST -{ - tPowerDetect pwrDetAdc; //= SENSED_PWR register, which reports the 8-bit ADC - // the stored ADC value gets shifted to 7-bits as the index to the LUT - tPowerDetect adjustedPwrDet; //7-bit value that goes into the LUT at the LUT[pwrDet] location - //MSB set if extraPrecision.hi8_adjustedPwrDet is used -}tTpcCaldPowerPoint; - -typedef tTpcCaldPowerPoint tTpcCaldPowerTable[NUM_PHY_MAX_TX_CHAINS][MAX_TPC_CAL_POINTS]; - -typedef PACKED_PRE struct PACKED_POST -{ - tTpcCaldPowerTable empirical; //calibrated power points -}tTpcConfig; - -//From wlanfw/inc/phyTxPower.h -#ifndef TPC_MEM_POWER_LUT_DEPTH -#define TPC_MEM_POWER_LUT_DEPTH 256 -#endif - -typedef tTpcLutValue tTpcPowerTable[NUM_PHY_MAX_TX_CHAINS][TPC_MEM_POWER_LUT_DEPTH]; - -typedef PACKED_PRE struct PACKED_POST -{ - tTpcConfig *pwrSampled; //points to CLPC data in calMemory -}tPhyTxPowerBand; - -//From halPhyRates.h -typedef enum -{ - //802.11b Rates - HAL_PHY_RATE_11B_LONG_1_MBPS, - HAL_PHY_RATE_11B_LONG_2_MBPS, - HAL_PHY_RATE_11B_LONG_5_5_MBPS, - HAL_PHY_RATE_11B_LONG_11_MBPS, - HAL_PHY_RATE_11B_SHORT_2_MBPS, - HAL_PHY_RATE_11B_SHORT_5_5_MBPS, - HAL_PHY_RATE_11B_SHORT_11_MBPS, - - //Spica_Virgo 11A 20MHz Rates - HAL_PHY_RATE_11A_6_MBPS, - HAL_PHY_RATE_11A_9_MBPS, - HAL_PHY_RATE_11A_12_MBPS, - HAL_PHY_RATE_11A_18_MBPS, - HAL_PHY_RATE_11A_24_MBPS, - HAL_PHY_RATE_11A_36_MBPS, - HAL_PHY_RATE_11A_48_MBPS, - HAL_PHY_RATE_11A_54_MBPS, - - // 11A 20MHz Rates - HAL_PHY_RATE_11A_DUP_6_MBPS, - HAL_PHY_RATE_11A_DUP_9_MBPS, - HAL_PHY_RATE_11A_DUP_12_MBPS, - HAL_PHY_RATE_11A_DUP_18_MBPS, - HAL_PHY_RATE_11A_DUP_24_MBPS, - HAL_PHY_RATE_11A_DUP_36_MBPS, - HAL_PHY_RATE_11A_DUP_48_MBPS, - HAL_PHY_RATE_11A_DUP_54_MBPS, - - //MCS Index #0-7 (20/40MHz) - HAL_PHY_RATE_MCS_1NSS_6_5_MBPS, - HAL_PHY_RATE_MCS_1NSS_13_MBPS, - HAL_PHY_RATE_MCS_1NSS_19_5_MBPS, - HAL_PHY_RATE_MCS_1NSS_26_MBPS, - HAL_PHY_RATE_MCS_1NSS_39_MBPS, - HAL_PHY_RATE_MCS_1NSS_52_MBPS, - HAL_PHY_RATE_MCS_1NSS_58_5_MBPS, - HAL_PHY_RATE_MCS_1NSS_65_MBPS, - HAL_PHY_RATE_MCS_1NSS_MM_SG_7_2_MBPS, - HAL_PHY_RATE_MCS_1NSS_MM_SG_14_4_MBPS, - HAL_PHY_RATE_MCS_1NSS_MM_SG_21_7_MBPS, - HAL_PHY_RATE_MCS_1NSS_MM_SG_28_9_MBPS, - HAL_PHY_RATE_MCS_1NSS_MM_SG_43_3_MBPS, - HAL_PHY_RATE_MCS_1NSS_MM_SG_57_8_MBPS, - HAL_PHY_RATE_MCS_1NSS_MM_SG_65_MBPS, - HAL_PHY_RATE_MCS_1NSS_MM_SG_72_2_MBPS, - - //MCS Index #8-15 (20/40MHz) - HAL_PHY_RATE_MCS_1NSS_CB_13_5_MBPS, - HAL_PHY_RATE_MCS_1NSS_CB_27_MBPS, - HAL_PHY_RATE_MCS_1NSS_CB_40_5_MBPS, - HAL_PHY_RATE_MCS_1NSS_CB_54_MBPS, - HAL_PHY_RATE_MCS_1NSS_CB_81_MBPS, - HAL_PHY_RATE_MCS_1NSS_CB_108_MBPS, - HAL_PHY_RATE_MCS_1NSS_CB_121_5_MBPS, - HAL_PHY_RATE_MCS_1NSS_CB_135_MBPS, - HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_15_MBPS, - HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_30_MBPS, - HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_45_MBPS, - HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_60_MBPS, - HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_90_MBPS, - HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_120_MBPS, - HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_135_MBPS, - HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_150_MBPS, - -#ifdef WLAN_FEATURE_11AC - /*11A duplicate 80MHz Rates*/ - HAL_PHY_RATE_11AC_DUP_6_MBPS, - HAL_PHY_RATE_11AC_DUP_9_MBPS, - HAL_PHY_RATE_11AC_DUP_12_MBPS, - HAL_PHY_RATE_11AC_DUP_18_MBPS, - HAL_PHY_RATE_11AC_DUP_24_MBPS, - HAL_PHY_RATE_11AC_DUP_36_MBPS, - HAL_PHY_RATE_11AC_DUP_48_MBPS, - HAL_PHY_RATE_11AC_DUP_54_MBPS, - - /*11AC rate 20MHZ Normal GI*/ - HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_6_5_MBPS, - HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_13_MBPS, - HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_19_5_MBPS, - HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_26_MBPS, - HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_39_MBPS, - HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_52_MBPS, - HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_58_5_MBPS, - HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_65_MBPS, - HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_78_MBPS, -#ifdef WCN_PRONTO - HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_86_5_MBPS, -#endif - - /*11AC rate 20MHZ Shortl GI*/ - HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_7_2_MBPS, - HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_14_4_MBPS, - HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_21_6_MBPS, - HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_28_8_MBPS, - HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_43_3_MBPS, - HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_57_7_MBPS, - HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_65_MBPS, - HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_72_2_MBPS, - HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_86_6_MBPS, -#ifdef WCN_PRONTO - HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_96_1_MBPS, -#endif - - /*11AC rates 40MHZ normal GI*/ - HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_13_5_MBPS , - HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_27_MBPS, - HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_40_5_MBPS, - HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_54_MBPS, - HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_81_MBPS, - HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_108_MBPS, - HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_121_5_MBPS, - HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_135_MBPS, - HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_162_MBPS, - HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_180_MBPS, - - /*11AC rates 40MHZ short GI*/ - HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_15_MBPS , - HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_30_MBPS, - HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_45_MBPS, - HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_60_MBPS, - HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_90_MBPS, - HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_120_MBPS, - HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_135_MBPS, - HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_150_MBPS, - HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_180_MBPS, - HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_200_MBPS, - - /*11AC rates 80 MHZ normal GI*/ - HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_29_3_MBPS , - HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_58_5_MBPS, - HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_87_8_MBPS, - HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_117_MBPS, - HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_175_5_MBPS, - HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_234_MBPS, - HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_263_3_MBPS, - HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_292_5_MBPS, - HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_351_MBPS, - HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_390_MBPS, - - /*11AC rates 80 MHZ short GI*/ - HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_32_5_MBPS , - HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_65_MBPS, - HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_97_5_MBPS, - HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_130_MBPS, - HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_195_MBPS, - HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_260_MBPS, - HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_292_5_MBPS, - HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_325_MBPS, - HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_390_MBPS, - HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_433_3_MBPS, -#endif //WLAN_FEATURE_11AC - - NUM_HAL_PHY_RATES, - HAL_PHY_RATE_INVALID, - MIN_RATE_INDEX = 0, - MAX_RATE_INDEX = NUM_HAL_PHY_RATES - 1, - HAL_PHY_RATE_INVALID_MAX_FIELD = 0x7FFFFFFF /* define as 4 bytes data */ -}eHalPhyRates; - -#define NUM_RATE_POWER_GROUPS NUM_HAL_PHY_RATES //total number of rate power groups including the CB_RATE_POWER_OFFSET -typedef uAbsPwrPrecision tRateGroupPwr[NUM_HAL_PHY_RATES]; - -//From halNvTables.h -#define NV_FIELD_COUNTRY_CODE_SIZE 3 -typedef PACKED_PRE struct PACKED_POST -{ - uint8 regDomain; //from eRegDomainId - uint8 countryCode[NV_FIELD_COUNTRY_CODE_SIZE]; // string identifier -}sDefaultCountry; - - -#define GF_PA_BIAS_SELECT_MASK 0X7 //(3 bits) -#define TSMC_PA_BIAS_SELECT_MASK 0x7 //(3 bits) - -#define GF_PA_BIAS_SELECT_1 0X0 -#define GF_PA_BIAS_SELECT_2 0X1 - -#define TSMC_PA_BIAS_SELECT_1 0X0 -#define TSMC_PA_BIAS_SELECT_2 0X1 -#define TSMC_PA_BIAS_SELECT_3 0x2 - - -#define EXT_PA_CTRL_POLARITY_DEFAULT 0X0 -#define EXT_PA_CTRL_POLARITY_VALID 0X80 - -#define EXT_PA_CTRL0_POLARITY_MASK 0X3 -#define EXT_PA_CTRL0_POLARITY_OFFSET 0X0 -#define EXT_PA_CTRL1_POLARITY_MASK 0XC -#define EXT_PA_CTRL1_POLARITY_OFFSET 0X2 - -#define EXT_PA_CTRL_POLARITY_ZERO 0X1 -#define EXT_PA_CTRL_POLARITY_ONE 0X2 - -typedef PACKED_PRE struct PACKED_POST -{ - uint8 skuID; - uint8 tpcMode2G; - uint8 tpcMode5G; - uint8 configItem1; - - uint8 xPA2G; - uint8 xPA5G; - uint8 extPaCtrl0Polarity; - uint8 extPaCtrl1Polarity; - - uint8 xLNA2G; - uint8 xLNA5G; - uint8 xCoupler2G; - uint8 xCoupler5G; - - uint8 xPdet2G; - uint8 xPdet5G; - uint8 enableDPD2G; - uint8 enableDPD5G; - - uint8 pdadcSelect2G; - uint8 pdadcSelect5GLow; - uint8 pdadcSelect5GMid; - uint8 pdadcSelect5GHigh; - - uint32 configItem2; - uint32 configItem3; - uint32 configItem4; -}sFwConfig; - - -#define NUM_RF_VR_RATE 13 -typedef uAbsPwrPrecision tRateGroupPwrVR[NUM_RF_VR_RATE]; - -typedef PACKED_PRE union PACKED_POST -{ - tRateGroupPwr pwrOptimum[NUM_RF_SUBBANDS]; // NV_TABLE_RATE_POWER_SETTINGS - sRegulatoryDomains regDomains[NUM_REG_DOMAINS]; // NV_TABLE_REGULATORY_DOMAINS - sDefaultCountry defaultCountryTable; // NV_TABLE_DEFAULT_COUNTRY - tTpcPowerTable plutCharacterized[NUM_RF_CHANNELS]; // NV_TABLE_TPC_POWER_TABLE - int16 plutPdadcOffset[NUM_RF_CHANNELS]; // NV_TABLE_TPC_PDADC_OFFSETS - tRateGroupPwrVR pwrOptimum_virtualRate[NUM_RF_SUBBANDS]; // NV_TABLE_VIRTUAL_RATE - sFwConfig fwConfig; // NV_TABLE_FW_CONFIG - sRssiChannelOffsets rssiChanOffsets[2]; // NV_TABLE_RSSI_CHANNEL_OFFSETS - sHwCalValues hwCalValues; // NV_TABLE_HW_CAL_VALUES - int16 antennaPathLoss[NUM_RF_CHANNELS]; // NV_TABLE_ANTENNA_PATH_LOSS - int16 pktTypePwrLimits[NUM_802_11_MODES][NUM_RF_CHANNELS]; // NV_TABLE_PACKET_TYPE_POWER_LIMITS - sOfdmCmdPwrOffset ofdmCmdPwrOffset; // NV_TABLE_OFDM_CMD_PWR_OFFSET - sTxBbFilterMode txbbFilterMode; // NV_TABLE_TX_BB_FILTER_MODE -}ALIGN_4 uNvTables; - -//From halPhy.h -typedef tPowerdBm tChannelPwrLimit; - -typedef PACKED_PRE struct PACKED_POST -{ - uint8 chanId; - tChannelPwrLimit pwr; -} ALIGN_4 tChannelListWithPower; - -//From HAL/inc/halNvTables.h -typedef enum -{ - NV_FIELDS_IMAGE = 0, //contains all fields - - NV_TABLE_RATE_POWER_SETTINGS = 2, - NV_TABLE_REGULATORY_DOMAINS = 3, - NV_TABLE_DEFAULT_COUNTRY = 4, - NV_TABLE_TPC_POWER_TABLE = 5, - NV_TABLE_TPC_PDADC_OFFSETS = 6, - NV_TABLE_HW_CAL_VALUES = 7, - NV_TABLE_RSSI_CHANNEL_OFFSETS = 9, - NV_TABLE_CAL_MEMORY = 10, //cal memory structure from halPhyCalMemory.h preceded by status - NV_TABLE_FW_CONFIG = 11, - NV_TABLE_ANTENNA_PATH_LOSS = 12, - NV_TABLE_PACKET_TYPE_POWER_LIMITS = 13, - NV_TABLE_OFDM_CMD_PWR_OFFSET = 14, - NV_TABLE_TX_BB_FILTER_MODE = 15, - NV_TABLE_VIRTUAL_RATE = 18, - - NUM_NV_TABLE_IDS, - NV_ALL_TABLES = 0xFFF, - NV_BINARY_IMAGE = 0x1000, - NV_MAX_TABLE = 0x7FFFFFFF /* define as 4 bytes data */ -}eNvTable; - -typedef PACKED_PRE struct PACKED_POST -{ - tRateGroupPwr pwrOptimum[NUM_RF_SUBBANDS]; // NV_TABLE_RATE_POWER_SETTINGS - sRegulatoryDomains regDomains[NUM_REG_DOMAINS]; // NV_TABLE_REGULATORY_DOMAINS - sDefaultCountry defaultCountryTable; // NV_TABLE_DEFAULT_COUNTRY - tTpcPowerTable plutCharacterized[NUM_RF_CHANNELS]; // NV_TABLE_TPC_POWER_TABLE - int16 plutPdadcOffset[NUM_RF_CHANNELS]; // NV_TABLE_TPC_PDADC_OFFSETS - tRateGroupPwrVR pwrOptimum_virtualRate[NUM_RF_SUBBANDS]; // NV_TABLE_VIRTUAL_RATE - sFwConfig fwConfig; // NV_TABLE_FW_CONFIG - sRssiChannelOffsets rssiChanOffsets[2]; // NV_TABLE_RSSI_CHANNEL_OFFSETS - sHwCalValues hwCalValues; // NV_TABLE_HW_CAL_VALUES - int16 antennaPathLoss[NUM_RF_CHANNELS]; // NV_TABLE_ANTENNA_PATH_LOSS - int16 pktTypePwrLimits[NUM_802_11_MODES][NUM_RF_CHANNELS]; // NV_TABLE_PACKET_TYPE_POWER_LIMITS - sOfdmCmdPwrOffset ofdmCmdPwrOffset; // NV_TABLE_OFDM_CMD_PWR_OFFSET - sTxBbFilterMode txbbFilterMode; // NV_TABLE_TX_BB_FILTER_MODE -}ALIGN_4 sNvTables; - -typedef PACKED_PRE struct PACKED_POST -{ - sNvFields fields; - sNvTables tables; -}ALIGN_4 sHalNv; - -extern const sHalNv nvDefaults; - -#endif - diff --git a/wcnss/riva/inc/wlan_phy.h b/wcnss/riva/inc/wlan_phy.h deleted file mode 100644 index acfdafe0962a..000000000000 --- a/wcnss/riva/inc/wlan_phy.h +++ /dev/null @@ -1,919 +0,0 @@ -/* - * Copyright (c) 2013, The Linux Foundation. All rights reserved. - * - * Previously licensed under the ISC license by Qualcomm Atheros, Inc. - * - * - * Permission to use, copy, modify, and/or distribute this software for - * any purpose with or without fee is hereby granted, provided that the - * above copyright notice and this permission notice appear in all - * copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL - * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE - * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL - * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -/* - * This file was originally distributed by Qualcomm Atheros, Inc. - * under proprietary terms before Copyright ownership was assigned - * to the Linux Foundation. - */ - -#ifndef WLAN_PHY_H -#define WLAN_PHY_H -/*============================================================================ -@file wlan_phy.h - -Contains definitions of all PHY related structures that aree needed by FTM/PTT - -Copyright (c) 2007 Qualcomm Technologies, Inc. All Rights Reserved. -Qualcomm Technologies Proprietary and Confidential -============================================================================*/ -#include - -/* Currently this structure holds the information about the current calibration mode. -In future, if anymore info is needed, that can be added here */ -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 currentCalibration; -} sCalibrationInfo; - -typedef PACKED_PRE struct PACKED_POST { - tANI_S16 I; //ADC sample of PHY_I_RAIL - tANI_S16 Q; //ADC sample of PHY_Q_RAIL -}tIQSamples; - -typedef tIQSamples tIQAdc; -typedef tIQSamples tIQDac; - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 maxGainIndex; - tANI_U8 topGainDb; - tANI_U8 bottomGainDb; - tANI_U8 unused[1]; -}tAsicAgc; - -#define TXFIR_MEM QWLAN_TXFIR_TXCAL_MEM0_MREG -#define TXFIR_MEM_GAIN_MULT (16) //bytes per gain -#define TXFIR_MEM_PER_CHAIN (16 * TXFIR_MEM_GAIN_MULT) //# of gains per chain * bytes per gain - -typedef tIQAdc tTxCarrierError; - -#define ONE_MICROSECOND (160) -#define DEFAULT_INTERFRAME_SPACE (ONE_MICROSECOND * 10) //10 microseconds - -typedef enum { - PHYDBG_TX_IDLE = 0, - PHYDBG_TX_START = 1, - PHYDBG_TX_WARMUP = 2, - PHYDBG_TX_INFD = 3, - PHYDBG_TX_CMD = 4, - PHYDBG_TX_SVC = 5, - PHYDBG_TX_PYLDF = 6, - PHYDBG_TX_PYLDR = 7, - PHYDBG_TX_CRC = 8, - PHYDBG_TX_FLUSH = 9, - PHYDBG_TX_TXDONEWAIT = 10, - PHYDBG_TX_TIFWAIT = 11 -} ePhyDbgTxStatus; - -typedef enum { - PHYDBG_PREAMBLE_OFDM, - PHYDBG_PREAMBLE_GREENFIELD, - PHYDBG_PREAMBLE_MIXED, - PHYDBG_PREAMBLE_SHORTB, - PHYDBG_PREAMBLE_LONGB, - - PHYDBG_LDPC_PREAMBLE_OFDM = 0x10, - PHYDBG_LDPC_PREAMBLE_GREENFIELD = 0x11, - PHYDBG_LDPC_PREAMBLE_MIXED = 0x12 -} ePhyDbgPreamble; - - -//grab ram -#ifdef VERIFY_HALPHY_SIMV_MODEL -#define GRAB_RAM_DBLOCK_SIZE (256) //number of samples in full capture -#else -#define GRAB_RAM_DBLOCK_SIZE (1024) //number of samples in full capture -#endif - -#define MAX_REQUESTED_GRAB_RAM_SAMPLES 256 //only allow 256 samples at a time -#define GRAB_RAM_BUFFER_DEPTH (4*1024) //maximum grab ram size in full capture -#define LAST_GRAB_RAM_SAMPLE_INDEX (GRAB_RAM_BUFFER_DEPTH - 1) - - -typedef PACKED_PRE struct PACKED_POST { - tIQAdc rx0; -} tGrabRamSample; - - -enum { - GRABRAM_RAWADC = 0, - GRABRAM_POSTIQ -}; -typedef tANI_U32 eGrabRamSampleType; - -typedef tANI_S8 tANI_S6; -typedef tANI_S16 tANI_S9; -typedef tANI_S16 tANI_S10; -typedef tANI_S16 tANI_S12; -typedef tANI_U16 tANI_U10; - - - -//convert float to a format that preserves enough accuracy to be used by driver -typedef tANI_S16 t2Decimal; -#define CONVERT_TO_2DECIMAL_PLACES(x) (x * 100) -#define CONVERT_FROM_2DECIMAL_PLACES(x) (x / 100) - -#ifndef PTT_FLOAT -#define PTT_FLOAT tANI_U32 // driver code can't include float, -//so this reserves space in our structures to allow floating point measurements -#endif - -typedef enum -{ - PHY_RX_CHAIN_0 = 0, - - PHY_MAX_RX_CHAINS = 1, - PHY_ALL_RX_CHAINS, - PHY_NO_RX_CHAINS -}ePhyRxChains; - -typedef enum -{ - PHY_I_RAIL = 0, - PHY_Q_RAIL = 1, - PHY_NUM_IQ_RAILS -}ePhyIQ; - -//[RY] extend total gain steps to 24 - -enum -{ - TX_GAIN_STEP_0, - TX_GAIN_STEP_1, - TX_GAIN_STEP_2, - TX_GAIN_STEP_3, - TX_GAIN_STEP_4, - TX_GAIN_STEP_5, - TX_GAIN_STEP_6, - TX_GAIN_STEP_7, - TX_GAIN_STEP_8, - TX_GAIN_STEP_9, - TX_GAIN_STEP_10, - TX_GAIN_STEP_11, - TX_GAIN_STEP_12, - TX_GAIN_STEP_13, - TX_GAIN_STEP_14, - TX_GAIN_STEP_15, - TX_GAIN_STEP_16, - TX_GAIN_STEP_17, - TX_GAIN_STEP_18, - TX_GAIN_STEP_19, - TX_GAIN_STEP_20, - TX_GAIN_STEP_21, - TX_GAIN_STEP_22, - TX_GAIN_STEP_23, - TX_GAIN_STEP_24, - TX_GAIN_STEP_25, - TX_GAIN_STEP_26, - TX_GAIN_STEP_27, - TX_GAIN_STEP_28, - TX_GAIN_STEP_29, - TX_GAIN_STEP_30, - TX_GAIN_STEP_31, - - RX_GAIN_STEP_0 = 0, - RX_GAIN_STEP_1, - RX_GAIN_STEP_2, - RX_GAIN_STEP_3, - RX_GAIN_STEP_4, - RX_GAIN_STEP_5, - RX_GAIN_STEP_6, - RX_GAIN_STEP_7, - RX_GAIN_STEP_8, - RX_GAIN_STEP_9, - RX_GAIN_STEP_10, - RX_GAIN_STEP_11, - RX_GAIN_STEP_12, - RX_GAIN_STEP_13, - RX_GAIN_STEP_14, - RX_GAIN_STEP_15, - - NUM_TX_GAIN_STEPS = 32, - MAX_TX_GAIN_STEP = TX_GAIN_STEP_31, - - NUM_RX_GAIN_STEPS = 16, - MAX_RX_GAIN_STEP = RX_GAIN_STEP_15, -}; -typedef tANI_U32 eGainSteps; - - -//[RY] new for PRIMA -#define DPD_RESPONSE_SIZE 128 -typedef PACKED_PRE struct PACKED_POST { - tANI_U8 dpdCalFailCnt; //Count for number of times DPD cal failed. - tANI_U8 dpdCalSuccessCnt; //Count for number of times DPD cal passed. - tANI_U8 dpdColdBootRepeatCalStatus; - tANI_U8 dpdLastIteration; - tANI_S16 dpd_threshold[DPD_RESPONSE_SIZE]; - tANI_S16 dpd_aoffset[DPD_RESPONSE_SIZE]; - tANI_S16 dpd_again[DPD_RESPONSE_SIZE]; - tANI_S16 dpd_poffset[DPD_RESPONSE_SIZE]; - tANI_S16 dpd_pgain[DPD_RESPONSE_SIZE]; - tANI_S32 dpd_sample[20]; - tANI_U8 dpd_try; - tANI_U8 band; -}sDPDcorrectionCalValues; - -typedef PACKED_PRE struct PACKED_POST { - sDPDcorrectionCalValues dpd[PHY_MAX_TX_CHAINS]; -}sTxChainsDPDCalValues; - - -//[RY] RX IQ correction coefficients Memory -typedef PACKED_PRE struct PACKED_POST { - tANI_S9 coeff_i[5]; - tANI_S9 coeff_q[5]; -}sIQCalValues; - -//[RY], added for RIVA -typedef PACKED_PRE struct PACKED_POST { - tANI_S9 iq_ampimb_coeff; - tANI_S16 txloleakage_i; // raw data is 6-bit 2's compliment - tANI_S16 txloleakage_q; // raw data is 6-bit 2's compliment -}sTXIQCalValues; - -//[RY], added for RIVA -typedef PACKED_PRE struct PACKED_POST { - tANI_S9 iqphaseimb_coeff_i[5]; - tANI_S9 iqphaseimb_coeff_q[5]; -}sTXIQPhaseImbCalValues; - -typedef PACKED_PRE struct PACKED_POST { - sIQCalValues iq[PHY_MAX_RX_CHAINS]; -}sRxChainsIQCalValues; - -//[RY] change for PRIMA -typedef PACKED_PRE struct PACKED_POST { - sTXIQCalValues iq[PHY_MAX_TX_CHAINS]; - sTXIQPhaseImbCalValues iqImb[PHY_MAX_TX_CHAINS]; -}sTxChainsIQCalValues; - -typedef PACKED_PRE struct PACKED_POST { - tANI_S9 co_i[3]; - tANI_S9 co_q[3]; -}sHKIQCalValues; - -typedef PACKED_PRE struct PACKED_POST { - sHKIQCalValues co[PHY_MAX_TX_CHAINS]; -}sTxChainsHKIQCalValues; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U8 lna_code; //wlan_lna_5g_control1,wl_5g_lna_load_ctune - tANI_U8 gm_code; //wlan_rxgm_5g_control4,wlgm_ctune -}sLnaBandCalValues; - -typedef PACKED_PRE struct PACKED_POST { - sLnaBandCalValues lnaCode[PHY_MAX_RX_CHAINS]; -}sTxChainsLnaBandCalValues; - -typedef tANI_U16 t_mW; //milliWatts -typedef tANI_U8 tPwrTemplateIndex; //5-bit number used as the index into the tx gain tables - -typedef PACKED_PRE struct PACKED_POST { - tANI_U8 txPowerAdc[PHY_MAX_TX_CHAINS]; -}sTxChainsPowerAdcReadings; - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 agcGain; -}tRxGain; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U8 rx[PHY_MAX_RX_CHAINS]; -}sRxChainsData; - -typedef sRxChainsData sRxChainsRssi; -typedef sRxChainsData sRxChainsAgcDisable; - -typedef PACKED_PRE struct PACKED_POST { - tANI_BOOLEAN rx[PHY_MAX_RX_CHAINS]; -}sRxChainsBoolean; - -typedef sRxChainsBoolean sRxChainsAgcEnable; - -#define NUM_AGC_GAINS 64 -typedef tRxGain sAgcGainLut[NUM_AGC_GAINS]; - - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_S6 iLo; - tANI_S6 qLo; -}sTxFirLoCorrect; - -typedef tIQAdc sTxLoCorrectBB[PHY_MAX_TX_CHAINS][NUM_TX_GAIN_STEPS]; - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U32 txIqLoCache[PHY_MAX_TX_CHAINS][NUM_TX_GAIN_STEPS][4]; - tANI_U32 spatialRotation; -}tAsicTxFir; - -//Tx Power Config -//A collection of selected calibrated power points at selected frequencies. -//The algorithm does not need to know any particulars about which frequencies or cal points, -// just the linearized adjustments at the selected calibration points -#define MAX_TPC_CHANNELS (NUM_RF_CHANNELS) -#define START_TPC_CHANNEL (2412) -#define END_TPC_CHANNEL (2484) - -#define MAX_PWR_LUT_DBM (24) -#define MIN_PWR_LUT_DBM (8) - - -/* The reason that MAX_PWR_LUT_DBM_2DEC_PLACES is not simply (MAX_PWR_LUT_DBM * 100) is due to the fact - that we are interpolating the 5-bit power template index from this range compared to a LUT range of 0 to 127. - There is an expectation that this power range is evenly divided in 0.5dBm steps. - We expect that a commanded 13dBm would yield a power template index of 10, where a power template index of 0 would represent 8dBm. - If we used an even 2400 to represent the max power, then the calculation for 13dBm actually returns 9: - (127 - 0)*((1300 - 800)/(2400 - 800))+0 = 39.6875 = 39. When shifted to 5 bits, =9. Not what we wanted. - What we need to do is find the 2-decimal place power that corresponds as closely as possible to the 127 in the 0 to 127 range. - For the 800 to 2400 range, that comes out to 2386.5, so 2386. So again for a commanded power of 13dBm: - (127 - 0)*((1300 - 800)/(2386 - 800))+0 = 40.0378 = 40. When shifted to 5-bits, = 10, which is what we wanted. - -*/ - -#define MIN_PWR_LUT_DBM_2DEC_PLACES (MIN_PWR_LUT_DBM * 100) -#define MAX_PWR_LUT_DBM_2DEC_PLACES ((MAX_PWR_LUT_DBM * 100) - (1 + (100 * (MAX_PWR_LUT_DBM - MIN_PWR_LUT_DBM))/TPC_MEM_POWER_LUT_DEPTH)) - -//macro provides a quick conversion of dbm value between MIN_PWR_LUT_DBM and MAX_PWR_LUT_DBM to a power template index(0 to 31) -//based on convention, which may not hold true in the future. -#define CONVERT_DBM_GINDEX(dbm) (((dbm - MIN_PWR_LUT_DBM) * 32) / (MAX_PWR_LUT_DBM - MIN_PWR_LUT_DBM)) - -typedef tANI_U8 tTxGainCombo; //7-bit gain value used to get the power measurement - -typedef PACKED_PRE struct PACKED_POST -{ - tPowerDetect min; - tPowerDetect max; -}tPwrTemplateRange; - - - -/* - The following union affords backward compatibility with txGain usage with band-specific tTpcConfig tables. - Due to my finding that 7-bits is not enough precision, we need to reuse the txGain space as extra precision bits - for the adjustedPwrDet. My spreadsheet shows that we need at least 4 bits more precision. - To know which usage, the MSB of adjustedPwrDet can be set to signify the extra precision in place of the txGain, which isn't used anyway. - We just need to be careful not to interpret a pre-existing table's txGain as extra precision. -*/ - - typedef union - { - tTxGainCombo txGain; //7-bit gain used to measure the pwrDetAdc value - tANI_U8 hi8_adjustedPwrDet; //if the MSB is set in adjustedPwrDet, then these are extra bits of precision - }uExtraLutBits; - - -typedef PACKED_PRE struct PACKED_POST -{ - t2Decimal min; //sometimes used for comparing chain powers - t2Decimal max; //sometimes used for comparing chain powers -}tPowerdBmRange; //absolute power measurement precision maintained to two decimal places - - -typedef tANI_U16 tRfADCVal; -typedef tRfADCVal tTempADCVal; - -typedef PACKED_PRE struct PACKED_POST -{ - tRfADCVal pdadc_offset; - tANI_U8 reserved[2]; -}tTpcParams; - - -//these definitions used as indexing to power per channel per rate table stored in NV -#define CB_RATE_POWER_OFFSET 0 -#define CB_RATE_POWER_OFFSET_LAST_INDEX 60 //last index where we would apply the CB_RATE_POWER_OFFSET - -/* TX Power Calibration & Report Types */ - - - typedef PACKED_PRE struct PACKED_POST - { - tANI_U8 temperatureAdc; //= 5 bit temperature measured at time sample was taken - tANI_U8 txGain; //= 7 bit gain value used to get the power measurement - tANI_U8 pwrDetAdc; //= 8 bit ADC power detect value - tANI_U8 reserved; - uAbsPwrPrecision absPowerMeasured; //= dBm measurement, will be truncated to two decimal places - }tTpcCalPoint; - - - typedef PACKED_PRE struct PACKED_POST - { - tANI_U16 numTpcCalPoints; - tANI_U16 reserved; - tTpcCalPoint chain[MAX_TPC_CAL_POINTS]; - }tTpcChainData; - - - typedef PACKED_PRE struct PACKED_POST - { - tANI_U16 freq; //frequency in MHz - tANI_U16 reserved; - tTpcChainData empirical[PHY_MAX_TX_CHAINS]; //TPC samples passed in - }tTpcFreqData; - - typedef PACKED_PRE struct PACKED_POST - { - tANI_U8 numChannels; - tANI_U8 reserved[3]; - tTpcFreqData calValues[MAX_TPC_CHANNELS]; - }sTpcFreqCalTable; - - -typedef PACKED_PRE struct PACKED_POST { - tPowerDetect lut; //7-bit value in the power Lookup Table - tANI_U8 reserved[3]; - - uAbsPwrPrecision abs; //LUT value conversion to absolute dBm -}tTxPowerLutOutput; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U8 gain; //8-bit coarse(bits 4-7) & fine(bits 0-3) gain commanded for the current index - tPowerDetect adc; //8-bit power ADC sampled during the packet preamble - tANI_U16 rawAdc; //11-bit power raw ADC sampled - - tTxPowerLutOutput indexMinMatch; //minimum LUT matching power that satisfies the power template index setting - tTxPowerLutOutput indexMaxMatch; //maximum LUT matching power that satisfies the power template index setting - tTxPowerLutOutput output; //output power values corresponding to power ADC index -}tTxChainPower; - -extern const tRfChannelProps rfChannels[NUM_RF_CHANNELS]; - -typedef enum -{ - RF_CAL_TONE_28NEG, - RF_CAL_TONE_24NEG, - RF_CAL_TONE_20NEG, - RF_CAL_TONE_16NEG, - RF_CAL_TONE_12NEG, - RF_CAL_TONE_8NEG, - RF_CAL_TONE_4NEG, - RF_CAL_TONE_4POS, - RF_CAL_TONE_8POS, - RF_CAL_TONE_12POS, - RF_CAL_TONE_16POS, - RF_CAL_TONE_20POS, - RF_CAL_TONE_24POS, - RF_CAL_TONE_28POS, - - NUM_RF_TONES, - - MIN_RF_TONE = RF_CAL_TONE_28NEG, - MAX_RF_TONE = RF_CAL_TONE_28POS -}eRfTones; - -typedef tANI_U8 tDcoCorrect; -typedef tANI_S8 tIm2Correct; - -typedef PACKED_PRE struct PACKED_POST { - tDcoCorrect IDcoCorrect; - tDcoCorrect QDcoCorrect; - tANI_U8 dcRange; -}tRxDcoCorrect; - -typedef PACKED_PRE struct PACKED_POST { - tRxDcoCorrect dco[PHY_MAX_RX_CHAINS]; -}tRxChainsDcoCorrections; - -typedef PACKED_PRE struct PACKED_POST { - tIm2Correct ICorrect; - tIm2Correct QCorrect; -}tRxIm2Correct; - -typedef PACKED_PRE struct PACKED_POST { - tRxIm2Correct dco[PHY_MAX_RX_CHAINS]; -}tRxChainsIm2Corrections; - -typedef PACKED_PRE struct PACKED_POST { - tDcoCorrect IDcoCorrect; - tDcoCorrect QDcoCorrect; -}tTxLoCorrect; - -typedef PACKED_PRE struct PACKED_POST { - tTxLoCorrect txLo[PHY_MAX_TX_CHAINS]; -}sTxChainsLoCorrections; - - -//tDcoCorrect is needed to define rf specific structures - -#define NUM_RF_RX_GAIN_STEPS (128) -#define MAX_RF_RX_GAIN_STEP (NUM_RF_RX_GAIN_STEPS - 1) - -#define NUM_RF_TX_GAIN_STEPS (16) -#define MAX_RF_TX_GAIN_STEP (NUM_RF_TX_GAIN_STEPS - 1) - -#define RF_AGC_GAIN_LUT_DEPTH (128) -#define NUM_RF_DCO_VALUES (128) //There are only 32 DCO values, but our algorithm it makes more sense for us to access these by AGC gain index -#define MAX_RF_DCO_VALUE (NUM_RF_DCO_VALUES - 1) - - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U16 gainReg1; //GEMINI_REG_RX_GC_0 (lna + mix + tia + bq1 + bq2 + pga) -}tRfRxGain; - - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U16 bbf_gain_cnt; - tANI_U16 bbf_lin_adj; - tANI_U16 lo_mix_da_gain_cntl; - tANI_U16 pa_gain_cntl; - tANI_U16 da_pa_bias_1_cnt; - tANI_U16 da_pa_bias_2_cntl; -}tRfTxGain; - -typedef PACKED_PRE struct PACKED_POST -{ - //TODO:define this struct for Gemini - tANI_U8 rxIf; - tANI_U8 txIf; - tANI_U8 txRf; - tANI_U8 reserved; -}sRfSpecificFilterSettings; - -typedef sRfSpecificFilterSettings sRfChannelFilterSettings[NUM_RF_CHANNELS]; - - -typedef PACKED_PRE struct PACKED_POST -{ - tANI_U8 hdet_ctl_ext_atten; - tANI_U8 hdet_dcoc_code; - tANI_U8 hdet_dcoc_ib_rcal_en; - tANI_U8 hdet_dcoc_ib_scal_en; -}sRfNvCalValues; //stored in QFUSE - - - -typedef enum -{ - SYNTH_UNLOCKED, - SYNTH_LOCK -}eRfSynthLock; - -typedef enum -{ - TEMP_SENSOR_PA, - TEMP_SENSOR_RX -}eRfTempSensor; - -typedef enum -{ - TEMPERATURE_BIN_0, //-30 to 5 C - TEMPERATURE_BIN_1, //5 to 45 C - TEMPERATURE_BIN_2, //45 to 85 C - TEMPERATURE_BIN_3, //85 to 125 C - NUM_TEMPERATURE_BINS -}eTemperatureBins; - -typedef PACKED_PRE struct PACKED_POST { - tANI_U16 hdetDcocCode; - tANI_U16 hdetDcoOffset; -}sRfHdetCalValues; - -#define TPC_TXPWR_ENABLE_MASK QWLAN_TPC_TXPWR_ENABLE_EN_MASK - - -#define TPC_MEM_TX0_PWR_LUT_OFFSET QWLAN_TPC_POWERDET0_RAM_MREG -#define TPC_MEM_TX1_PWR_LUT_OFFSET QWLAN_TPC_POWERDET1_RAM_MREG -#define TPC_MEM_TX2_PWR_LUT_OFFSET QWLAN_TPC_POWERDET2_RAM_MREG -#define TPC_MEM_TX3_PWR_LUT_OFFSET QWLAN_TPC_POWERDET3_RAM_MREG -#define TPC_MEM_TX0_GAIN_LUT_OFFSET QWLAN_TPC_GAIN_LUT0_MREG -#define TPC_MEM_TX1_GAIN_LUT_OFFSET QWLAN_TPC_GAIN_LUT1_MREG -#define TPC_MEM_TX2_GAIN_LUT_OFFSET QWLAN_TPC_GAIN_LUT2_MREG -#define TPC_MEM_TX3_GAIN_LUT_OFFSET QWLAN_TPC_GAIN_LUT3_MREG - -//these masks are the same for both chains -#define TPC_POWERDET_MASK QWLAN_TPC_POWERDET0_RAM_POWER_MASK -#define TPC_GAIN_RF_MASK QWLAN_TPC_GAIN_LUT0_RF_GAIN_MASK -#define TPC_GAIN_RF_OFFSET QWLAN_TPC_GAIN_LUT0_RF_GAIN_OFFSET -#define TPC_GAIN_DIG_MASK QWLAN_TPC_GAIN_LUT0_DIG_GAIN_MASK - - -#define TPC_MEM_GAIN_LUT_DEPTH 32 - - -#define TPC_ADC_CTRL_REG QWLAN_TPC_ADC_CTRL_GET_ADC_REG -#define TPC_ADC_GET_MASK QWLAN_TPC_ADC_CTRL_GET_ADC_GET_ADC_MASK - -#define TPC_ADC_FAILED_MASK QWLAN_TPC_ADC_STATUS_FAILED_MASK -#define TPC_ADC_BUSY_P_MASK QWLAN_TPC_ADC_STATUS_BUSY_P_MASK -#define TPC_ADC_BUSY_T_MASK QWLAN_TPC_ADC_STATUS_BUSY_T_MASK - - -#define MSK_1 0x1 -#define MSK_2 0x3 -#define MSK_3 0x7 -#define MSK_4 0xF -#define MSK_5 0x1F -#define MSK_6 0x3F -#define MSK_7 0x7F -#define MSK_8 0xFF -#define MSK_9 0x1FF -#define MSK_10 0x3FF -#define MSK_11 0x7FF -#define MSK_12 0xFFF -#define MSK_13 0x1FFF -#define MSK_14 0x3FFF -#define MSK_15 0x7FFF -#define MSK_16 0xFFFF -#define MSK_17 0x1FFFF -#define MSK_18 0x3FFFF -#define MSK_19 0x7FFFF -#define MSK_20 0xFFFFF -#define MSK_21 0x1FFFFF -#define MSK_22 0x3FFFFF -#define MSK_23 0x7FFFFF -#define MSK_24 0xFFFFFF -#define MSK_25 0x1FFFFFF -#define MSK_26 0x3FFFFFF -#define MSK_27 0x7FFFFFF -#define MSK_28 0xFFFFFFF -#define MSK_29 0x1FFFFFFF -#define MSK_30 0x3FFFFFFF -#define MSK_31 0x7FFFFFFF -#define MSK_32 0xFFFFFFFF - - -#define COARSE_GAIN_MASK MSK_4 -#define COARSE_GAIN_OFFSET 4 -#define FINE_GAIN_MASK MSK_4 //the upper most bit overlaps the coarse gain and should not be used for TPC LUT data -#define FINE_GAIN_OFFSET 0 - -typedef enum -{ - TPC_COARSE_TXPWR_0, - TPC_COARSE_TXPWR_1, - TPC_COARSE_TXPWR_2, - TPC_COARSE_TXPWR_3, - TPC_COARSE_TXPWR_4, - TPC_COARSE_TXPWR_5, - TPC_COARSE_TXPWR_6, - TPC_COARSE_TXPWR_7, - TPC_COARSE_TXPWR_8, - TPC_COARSE_TXPWR_9, - TPC_COARSE_TXPWR_10, - TPC_COARSE_TXPWR_11, - TPC_COARSE_TXPWR_12, - TPC_COARSE_TXPWR_13, - TPC_COARSE_TXPWR_14, - TPC_COARSE_TXPWR_15, - TPC_COARSE_TXPWR_16, - TPC_COARSE_TXPWR_17, - TPC_COARSE_TXPWR_18, - TPC_COARSE_TXPWR_19, - TPC_COARSE_TXPWR_20, - TPC_COARSE_TXPWR_21, - TPC_COARSE_TXPWR_22, - TPC_COARSE_TXPWR_23, - TPC_COARSE_TXPWR_24, - TPC_COARSE_TXPWR_25, - TPC_COARSE_TXPWR_26, - TPC_COARSE_TXPWR_27, - TPC_COARSE_TXPWR_28, - TPC_COARSE_TXPWR_29, - TPC_COARSE_TXPWR_30, - TPC_COARSE_TXPWR_31, - NUM_TPC_COARSE_STEPS = TPC_COARSE_TXPWR_31 - TPC_COARSE_TXPWR_0 + 1, - MIN_TPC_COARSE_TXPWR = TPC_COARSE_TXPWR_0, - MAX_TPC_COARSE_TXPWR = TPC_COARSE_TXPWR_31 -}eTxCoarseGain; //refers to the external RF power adjustment - -typedef enum -{ - TPC_FINE_TXPWR_0, - TPC_FINE_TXPWR_1, - TPC_FINE_TXPWR_2, - TPC_FINE_TXPWR_3, - TPC_FINE_TXPWR_4, - TPC_FINE_TXPWR_5, - TPC_FINE_TXPWR_6, - TPC_FINE_TXPWR_7, - TPC_FINE_TXPWR_8, - TPC_FINE_TXPWR_9, - TPC_FINE_TXPWR_10, - TPC_FINE_TXPWR_11, - TPC_FINE_TXPWR_12, - TPC_FINE_TXPWR_13, - TPC_FINE_TXPWR_14, - TPC_FINE_TXPWR_15, - MIN_TPC_FINE_TXPWR = TPC_FINE_TXPWR_0, - MAX_TPC_FINE_TXPWR = TPC_FINE_TXPWR_15 -}eTxFineGain; //refers to the internal TxFIR power adjustment - -typedef PACKED_PRE struct PACKED_POST { - eTxCoarseGain coarsePwr; - eTxFineGain finePwr; -}tTxGain; - -//for 30second periodic interrupt, do this every 5 minutes -#define HAL_PHY_PERIODIC_CAL_ITER_LIMIT 10 - -typedef enum -{ - //these show which rx and tx chains are enabled, other chains are disable accordingly - //Production modes - PHY_CHAIN_SEL_R0_T0_ON, - - PHY_CHAIN_SEL_BT_R0_T0_ON, //simultaneous bluetooth receive enabled - - - //test modes - PHY_CHAIN_SEL_R0_ON, - PHY_CHAIN_SEL_T0_ON, - PHY_CHAIN_SEL_NO_RX_TX, - - MAX_PHY_CHAIN_SEL, - INVALID_PHY_CHAIN_SEL, - PHY_MAX_CHAIN_SELECT = 0x7FFFFFFF /* define as 4 bytes data */ -}ePhyChainSelect; - -typedef enum -{ -#ifdef CHANNEL_BONDED_CAPABLE - - PHY_CCA_40MHZ_SOURCE = 0, -#endif - - PHY_CCA_20MHZ_SOURCE = 1 -}ePhyCCASource; - -typedef enum -{ - PHY_CCA_FORCED_ON = 0, - PHY_CCA_ED = 1, - PHY_CCA_CD = 2, - PHY_CCA_CD_AND_CS = 3, - PHY_CCA_ED_AND_CD = 4, - PHY_CCA_ED_OR_CD = 5, - PHY_CCA_ED_AND_CD_AND_CS = 6, - PHY_CCA_ED_OR_CD_AND_CS = 7, - PHY_CCA_SEC_ED40_AND_NOR_PKTDET40_PKTDET20 = 8, - PHY_CCA_SEC_BUSY = 9 -}ePhyCCAMode; - -typedef enum -{ - PHY_RX_DISABLE_NONE = 0, - PHY_RX_DISABLE_11AG = 0x00000001, - PHY_RX_DISABLE_11B = 0x00000002, - PHY_RX_DISABLE_11N40 = 0x00000004, - PHY_RX_DISABLE_11AC80 = 0x00000008, - - PHY_RX_DISABLE_11ABG = (PHY_RX_DISABLE_11AG | PHY_RX_DISABLE_11B), - PHY_RX_DISABLE_ALL_TYPES = (PHY_RX_DISABLE_11B | PHY_RX_DISABLE_11AG | - PHY_RX_DISABLE_11N40 | PHY_RX_DISABLE_11AC80), -}ePhyRxDisabledPktTypes; - - -// Enum for network density setting. -typedef enum -{ - PHY_NW_DENSITY_LOW = 0, - PHY_NW_DENSITY_MED, - PHY_NW_DENSITY_HIGH, - PHY_NW_DENSITY_ADAPTIVE -} ePhyNwDensity; - - -typedef enum -{ - ALL_CALS, //RxDco 1st, TxLO 2nd - RX_DCO_CAL_ONLY, - RX_IM2_CAL_ONLY, - RX_DCO_IM2_CAL, - TX_LO_CAL_ONLY, - RX_IQ_CAL_ONLY, - TX_IQ_CAL_ONLY, - HKDAC_TX_IQ_CAL_ONLY, - NO_CALS = 0xFF -}eCalSelection; - - -//supports testing of closed-loop power control -typedef enum -{ - FORCE_CLOSED_LOOP_GAIN = 0, //phyDbg pkt gen only uses gain index 0 when we are taking measurements with the closed-loop gain - FORCE_POWER_TEMPLATE_INDEX = 1, //only use forced power template index - FIXED_POWER_DBM = 2, //only use to specify fixed power, ignoring rate/channel/reg limits - REGULATORY_POWER_LIMITS = 3, //use production power Lut settings limited by power limit table per channel - RATE_POWER_NON_LIMITED = 4, //use power specified per rate and channel group, but don't limit power by channel - POWER_INDX_SRC_MAX_VAL = 0x7FFFFFFF, //dummy val to set enum to 4 bytes -}ePowerTempIndexSource; - -#define BIT_0 0x00000001 -#define BIT_1 0x00000002 -#define BIT_2 0x00000004 -#define BIT_3 0x00000008 -#define BIT_4 0x00000010 -#define BIT_5 0x00000020 -#define BIT_6 0x00000040 -#define BIT_7 0x00000080 -#define BIT_8 0x00000100 -#define BIT_9 0x00000200 -#define BIT_10 0x00000400 -#define BIT_11 0x00000800 -#define BIT_12 0x00001000 -#define BIT_13 0x00002000 -#define BIT_14 0x00004000 -#define BIT_15 0x00008000 -#define BIT_16 0x00010000 -#define BIT_17 0x00020000 -#define BIT_18 0x00040000 -#define BIT_19 0x00080000 -#define BIT_20 0x00100000 -#define BIT_21 0x00200000 -#define BIT_22 0x00400000 -#define BIT_23 0x00800000 -#define BIT_24 0x01000000 -#define BIT_25 0x02000000 -#define BIT_26 0x04000000 -#define BIT_27 0x08000000 -#define BIT_28 0x10000000 -#define BIT_29 0x20000000 -#define BIT_30 0x40000000 -#define BIT_31 0x80000000 - -#define WFM_CLK_80 BIT_3 -#define WFM_START BIT_0 -#define WFM_STOP BIT_1 - -#define WFM_MEM_I_DATA_MASK (0x7FF) -#define WFM_MEM_Q_DATA_OFFSET (0xB) -#define WFM_MEM_Q_DATA_MASK (0x3FF800) - -typedef enum -{ - WAVE_SINGLE_SHOT = 0, - WAVE_CONTINUOUS = BIT_2 -}eWaveMode; - -typedef enum -{ - RATE_240 = 0, - RATE_160 = 1, - RATE_120 = 2, - RATE_80 = 3, - RATE_40 = 4, - RATE_20 = 5, -}eWaveRate; - -#define MAX_TONE_AMPLITUDE (2^11) // peak to peak - -#define MAX_TEST_WAVEFORM_SAMPLES 500 - -#define NUM_RX_IMB_CAL_TONES 4 - -#define CAL_WFM_TX_TONE_8_START_IDX 0 -#define CAL_WFM_TX_TONE_8_STOP_IDX 255 -#define CAL_WFM_TX_TONE_MINUS_8_START_IDX 256 -#define CAL_WFM_TX_TONE_MINUS_8_STOP_IDX 511 -#define CAL_WFM_RX_TONE_START_IDX 512 -#define CAL_WFM_RX_TONE_STOP_IDX 767 - -#define B_RATE_CAL_ADJUSTMENT -150 -#define GN_RATE_BANDEDGE_ADJUSTMENT -100 - -#define TPC_INDEX_WIFI_DIRECT 0 -#define TPC_INDEX_LOW_POWER 1 -#define MIN_TPC_GAIN_INDEX 0 //Index 0 used for Wifi Direct -#define TPC_GAIN_LUT_PWR_SLOPE 2 -#define MAX_TPC_GAIN_LUT_DBM (22) -#define MIN_TPC_GAIN_LUT_DBM (6) - -#define MAX_TPC_GAIN_LUT_DBM_2DEC_PLACES (MAX_TPC_GAIN_LUT_DBM * 100) -#define MIN_TPC_GAIN_LUT_DBM_2DEC_PLACES (MIN_TPC_GAIN_LUT_DBM * 100) - -typedef enum -{ - RF_BANDWIDTH_20MHZ = 20, - RF_BANDWIDTH_40MHZ = 40, - RF_BANDWIDTH_80MHZ = 80, - RF_MIN_BANDWIDTH = RF_BANDWIDTH_20MHZ, - RF_MAX_BANDWIDTH = RF_BANDWIDTH_80MHZ, - RF_BANDWIDTH_INVALID = 0x7FFFFFFF -}eRfBandwidth; - -#endif /* WLAN_PHY_H */ diff --git a/wcnss/riva/inc/wlan_qct_dev_defs.h b/wcnss/riva/inc/wlan_qct_dev_defs.h deleted file mode 100644 index c4bb755550b0..000000000000 --- a/wcnss/riva/inc/wlan_qct_dev_defs.h +++ /dev/null @@ -1,381 +0,0 @@ -/* - * Copyright (c) 2013, The Linux Foundation. All rights reserved. - * - * Previously licensed under the ISC license by Qualcomm Atheros, Inc. - * - * - * Permission to use, copy, modify, and/or distribute this software for - * any purpose with or without fee is hereby granted, provided that the - * above copyright notice and this permission notice appear in all - * copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL - * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE - * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL - * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -/* - * This file was originally distributed by Qualcomm Atheros, Inc. - * under proprietary terms before Copyright ownership was assigned - * to the Linux Foundation. - */ - -/** - * - * @file: wlan_qct_dev_defs.h - * - * @brief: This file contains the hardware related definitions. - * - * Copyright (C) 2008, Qualcomm Technologies, Inc. All rights reserved. - */ - -#ifndef __WLAN_QCT_DEV_DEFS_H -#define __WLAN_QCT_DEV_DEFS_H - - -/* -------------------------------------------------------------------- - * HW definitions for WLAN Chip - * -------------------------------------------------------------------- - */ - -#ifdef WCN_PRONTO - -#ifdef WLAN_SOFTAP_VSTA_FEATURE -//supports both V1 and V2 -#define HAL_NUM_ASSOC_STA 32 // HAL_NUM_STA - No of GP STAs - 2 (1 self Sta + 1 Bcast Sta) -#define HAL_NUM_STA 41 -#define HAL_NUM_HW_STA 16 - -#define HAL_NUM_GPSTA 4 -#define HAL_NUM_UMA_DESC_ENTRIES HAL_NUM_HW_STA // or HAL_NUM_STA - -#define HAL_NUM_BSSID 2 -#define HAL_NUM_STA_WITHOUT_VSTA 12 -#define HAL_NUM_STA_INCLUDING_VSTA 32 - -#define HAL_NUM_VSTA (HAL_NUM_STA - HAL_NUM_HW_STA) -#define QWLANFW_MAX_NUM_VSTA (HAL_NUM_VSTA) -#define QWLANFW_VSTA_INVALID_IDX (HAL_NUM_STA+1) -#define QWLAN_VSTA_MIN_IDX (HAL_NUM_HW_STA) -#define QWLANFW_NUM_GPSTA (HAL_NUM_GPSTA) - -// For Pronto -#define HAL_NUM_STA_WITHOUT_VSTA_PRONTO_V1 9 -#define HAL_NUM_STA_WITHOUT_VSTA_PRONTO_V2 (HAL_NUM_STA_WITHOUT_VSTA) - -#define IS_VSTA_VALID_IDX(__x) \ - ((__x) != QWLANFW_VSTA_INVALID_IDX) - -#define IS_VSTA_IDX(__x) \ - (((__x) >= QWLAN_VSTA_MIN_IDX) && ((__x) < HAL_NUM_STA)) - -#define GET_VSTA_INDEX_FOR_STA_INDEX(__idx) ((__idx) - QWLAN_VSTA_MIN_IDX) - -// is the STA a General Purpose STA? -#define IS_GPSTA_IDX(__x) \ - (((__x) >= (HAL_NUM_HW_STA-HAL_NUM_GPSTA)) && \ - ((__x) < HAL_NUM_HW_STA)) - -// is the STA a HW STA (excluding GP STAs) -#define IS_HWSTA_IDX(__x) \ - ((__x) < (HAL_NUM_HW_STA-HAL_NUM_GPSTA)) - -#define HAL_NUM_STA_INCLUDING_VSTA 32 - -#elif WCN_PRONTO_V1 - -/* In Pronto 1.0 TPE descriptor size is increased to 1K per station - * but not the cMEM allocated for hardware descriptors. Due to this - * memory limitation the number of stations are limited to 9 and BSS - * to 2 respectively. - * - * In Pronto 2.0, TPE descriptor size is reverted - * back to 512 bytes and hence more stations and BSSs can be supported - * from Pronto 2.0 - * - * In Pronto 1.0, 9 HW stations are supported including BCAST STA(staId 0) - * and SELF STA(staId 1). So total ASSOC stations which can connect to - * Pronto 1.0 Softap = 9 - 1(self sta) - 1(Bcast sta) = 7 stations - */ -#define HAL_NUM_HW_STA 9 -#define HAL_NUM_STA (HAL_NUM_HW_STA) -#define HAL_NUM_BSSID 2 -#define HAL_NUM_UMA_DESC_ENTRIES 9 -#define HAL_NUM_ASSOC_STA 7 - - -#else /* WCN_PRONTO_V1 */ - -#define HAL_NUM_HW_STA 14 -#define HAL_NUM_STA (HAL_NUM_HW_STA) -#define HAL_NUM_BSSID 4 -#define HAL_NUM_UMA_DESC_ENTRIES 14 -#define HAL_NUM_ASSOC_STA 12 - - -#endif /* WCN_PRONTO_V1 and WLAN_SOFTAP_VSTA_FEATURE*/ -#else /* WCN_PRONTO */ - -/* - * Riva supports 16 stations in hardware - * - * Riva without Virtual STA feature can only support 12 stations: - * 1 Broadcast STA (hard) - * 1 "Self" STA (hard) - * 10 Soft AP Stations (hard) - * - * Riva with Virtual STA feature supports 38 stations: - * 1 Broadcast STA (hard) - * 1 "Self" STA (hard) - * 4 General Purpose Stations to support Virtual STAs (hard) - * 32 Soft AP Stations (10 hard/22 virtual) - * - * To support concurrency with Vsta, number of stations are increased to 41 (from 38). - * 1 for the second interface. - * 1 for reserving an infra peer STA index (hard) for the other interface. - * 1 for P2P device role. - */ -#ifdef WLAN_SOFTAP_VSTA_FEATURE -#define HAL_NUM_ASSOC_STA 32 -#define HAL_NUM_STA 41 -#define HAL_NUM_HW_STA 16 -#define HAL_NUM_GPSTA 4 -#define HAL_NUM_VSTA (HAL_NUM_STA - HAL_NUM_HW_STA) - -#define QWLANFW_MAX_NUM_VSTA HAL_NUM_VSTA -#define QWLANFW_VSTA_INVALID_IDX (HAL_NUM_STA+1) -#define QWLAN_VSTA_MIN_IDX HAL_NUM_HW_STA -#define QWLANFW_NUM_GPSTA HAL_NUM_GPSTA - - -#define IS_VSTA_VALID_IDX(__x) \ - ((__x) != QWLANFW_VSTA_INVALID_IDX) - -#define IS_VSTA_IDX(__x) \ - (((__x) >= QWLAN_VSTA_MIN_IDX) && ((__x) < HAL_NUM_STA)) - -#define GET_VSTA_INDEX_FOR_STA_INDEX(__idx) ((__idx) - QWLAN_VSTA_MIN_IDX) - -// is the STA a General Purpose STA? -#define IS_GPSTA_IDX(__x) \ - (((__x) >= (HAL_NUM_HW_STA-HAL_NUM_GPSTA)) && \ - ((__x) < HAL_NUM_HW_STA)) - -// is the STA a HW STA (excluding GP STAs) -#define IS_HWSTA_IDX(__x) \ - ((__x) < (HAL_NUM_HW_STA-HAL_NUM_GPSTA)) - -#define HAL_NUM_STA_INCLUDING_VSTA 32 -#define HAL_NUM_STA_WITHOUT_VSTA 12 - -#else -#define HAL_NUM_STA 12 -#define HAL_NUM_ASSOC_STA 10 -#define HAL_NUM_HW_STA 12 -#endif - -#define HAL_NUM_BSSID 2 -#define HAL_NUM_UMA_DESC_ENTRIES HAL_NUM_HW_STA - -#endif /* WCN_PRONTO */ - -#ifdef FEATURE_WLAN_TDLS -#define CXM_TDLS_MAX_NUM_STA 32 -#endif - -#define HAL_INVALID_BSSIDX HAL_NUM_BSSID - -#define MAX_NUM_OF_BACKOFFS 8 -#define HAL_MAX_ASSOC_ID HAL_NUM_STA - -#define WLANHAL_TX_BD_HEADER_SIZE 40 //FIXME_PRIMA - Revisit -#define WLANHAL_RX_BD_HEADER_SIZE 76 - -/* - * From NOVA Mac Arch document - * Encryp. mode The encryption mode - * 000: Encryption functionality is not enabled - * 001: Encryption is set to WEP - * 010: Encryption is set to WEP 104 - * 011: Encryption is set to TKIP - * 100: Encryption is set to AES - * 101 - 111: Reserved for future - */ - -#define HAL_ENC_POLICY_NULL 0 -#define HAL_ENC_POLICY_WEP40 1 -#define HAL_ENC_POLICY_WEP104 2 -#define HAL_ENC_POLICY_TKIP 3 -#define HAL_ENC_POLICY_AES_CCM 4 - -/* --------------------------------------------------------------------- */ -/* BMU */ -/* --------------------------------------------------------------------- */ - -/* - * BMU WQ assignment, as per Prima Programmer's Guide - FIXME_PRIMA: Revisit - * - */ - -typedef enum sBmuWqId { - - /* ====== In use WQs ====== */ - - /* BMU */ - BMUWQ_BMU_IDLE_BD = 0, - BMUWQ_BMU_IDLE_PDU = 1, - - /* RxP */ - BMUWQ_RXP_UNKNWON_ADDR = 2, /* currently unhandled by HAL */ - - /* DPU RX */ - BMUWQ_DPU_RX = 3, - - /* DPU TX */ - BMUWQ_DPU_TX = 6, - - /* Firmware */ - BMUWQ_FW_TRANSMIT = 12, /* DPU Tx->FW Tx */ - BMUWQ_FW_RECV = 7, /* DPU Rx->FW Rx */ - - BMUWQ_FW_RPE_RECV = 16, /* RXP/RPE Rx->FW Rx */ - FW_SCO_WQ = BMUWQ_FW_RPE_RECV, - - /* DPU Error */ - BMUWQ_DPU_ERROR_WQ = 8, - - /* DXE RX */ - BMUWQ_DXE_RX = 11, - - BMUWQ_DXE_RX_HI = 4, - - /* ADU/UMA */ - BMUWQ_ADU_UMA_TX = 23, - BMUWQ_ADU_UMA_RX = 24, - - /* BMU BTQM */ - BMUWQ_BTQM = 25, - - /* Special WQ for BMU to dropping all frames coming to this WQ ID */ - BMUWQ_SINK = 255, - -#ifdef WCN_PRONTO - BMUWQ_BMU_CMEM_IDLE_BD = 27, - /* Total BMU WQ count in Pronto */ - BMUWQ_NUM = 28, - - //WQs 17 through 22 are enabled in Pronto. So, set not supported mask to 0. - BMUWQ_NOT_SUPPORTED_MASK = 0x0, -#else - /* Total BMU WQ count in Prima */ - BMUWQ_NUM = 27, - - //Prima has excluded support for WQs 17 through 22. - BMUWQ_NOT_SUPPORTED_MASK = 0x7e0000, -#endif //WCN_PRONTO - - - /* Aliases */ - BMUWQ_BTQM_TX_MGMT = BMUWQ_BTQM, - BMUWQ_BTQM_TX_DATA = BMUWQ_BTQM, - BMUWQ_BMU_WQ2 = BMUWQ_RXP_UNKNWON_ADDR, - BMUWQ_FW_DPU_TX = 5, - - //WQ where all the frames with addr1/addr2/addr3 with value 254/255 go to. - BMUWQ_FW_RECV_EXCEPTION = 14, //using BMUWQ_FW_MESSAGE WQ for this purpose. - - //WQ where all frames with unknown Addr2 filter exception cases frames will pushed if FW wants host to - //send deauth to the sender. - BMUWQ_HOST_RX_UNKNOWN_ADDR2_FRAMES = 15, //using BMUWQ_FW_DXECH2_0 for this purpose. - - /* ====== Unused/Reserved WQ ====== */ - - /* ADU/UMA Error WQ */ - BMUWQ_ADU_UMA_TX_ERROR_WQ = 13, /* Not in use by HAL */ - BMUWQ_ADU_UMA_RX_ERROR_WQ = 10, /* Not in use by HAL */ - - /* DPU Error WQ2 */ - BMUWQ_DPU_ERROR_WQ2 = 9, /* Not in use by HAL */ - - /* FW WQs */ - //This WQ is being used for RXP to push in frames in exception cases ( addr1/add2/addr3 254/255) - //BMUWQ_FW_MESG = 14, /* DxE Tx->FW, Not in use by FW */ - //BMUWQ_FW_DXECH2_0 = 15, /* BD/PDU<->MEM conversion using DxE CH2. Not in use by FW */ - BMUWQ_FW_DXECH2_1 = 16, /* BD/PDU<->MEM conversion using DxE CH2. Not in use by FW */ - - /* NDPA Addr3 workaround */ - BMUWQ_RXP_DEFAULT_PUSH_WQ = 17, -/* These WQs are not supported in Volans - BMUWQ_BMU_WQ17 = 17, - BMUWQ_BMU_WQ18 = 18, - BMUWQ_BMU_WQ19 = 19, - BMUWQ_BMU_WQ20 = 20, - BMUWQ_BMU_WQ21 = 21, - BMUWQ_BMU_WQ22 = 22 -*/ -} tBmuWqId; - -typedef enum -{ - BTQM_QID0 = 0, - BTQM_QID1, - BTQM_QID2, - BTQM_QID3, - BTQM_QID4, - BTQM_QID5, - BTQM_QID6, - BTQM_QID7, - BTQM_QID8, - BTQM_QID9, - BTQM_QID10, - - BTQM_QUEUE_TX_TID_0 = BTQM_QID0, - BTQM_QUEUE_TX_TID_1, - BTQM_QUEUE_TX_TID_2, - BTQM_QUEUE_TX_TID_3, - BTQM_QUEUE_TX_TID_4, - BTQM_QUEUE_TX_TID_5, - BTQM_QUEUE_TX_TID_6, - BTQM_QUEUE_TX_TID_7, - - - /* Queue Id <-> BO - */ - BTQM_QUEUE_TX_nQOS = BTQM_QID8, - BTQM_QUEUE_SELF_STA_BCAST_MGMT = BTQM_QID10, - BTQM_QUEUE_SELF_STA_UCAST_MGMT = BTQM_QID9, - BTQM_QUEUE_SELF_STA_UCAST_DATA = BTQM_QID9, - BTQM_QUEUE_NULL_FRAME = BTQM_QID9, - BTQM_QUEUE_SELF_STA_PROBE_RSP = BTQM_QID9, - BTQM_QUEUE_TX_AC_BE = BTQM_QUEUE_TX_TID_0, - BTQM_QUEUE_TX_AC_BK = BTQM_QUEUE_TX_TID_2, - BTQM_QUEUE_TX_AC_VI = BTQM_QUEUE_TX_TID_4, - BTQM_QUEUE_TX_AC_VO = BTQM_QUEUE_TX_TID_6 -}tBtqmQId; - -#define STACFG_MAX_TC 8 - -/* --------------------------------------------------------------------- */ -/* BD type*/ -/* --------------------------------------------------------------------- */ -#define HWBD_TYPE_GENERIC 0 /* generic BD format */ -#define HWBD_TYPE_FRAG 1 /* fragmentation BD format*/ - -/*---------------------------------------------------------------------- */ -/* HW Tx power */ -/*---------------------------------------------------------------------- */ -#ifdef WLAN_HAL_PRIMA - #define WLAN_SOC_PRIMA_MAX_TX_POWER 22 - #define WLAN_SOC_PRIMA_MIN_TX_POWER 6 -#else - /* add more platforms here */ - #define WLAN_SOC_PRIMA_MAX_TX_POWER 22 - #define WLAN_SOC_PRIMA_MIN_TX_POWER 6 -#endif //#ifdef WCN_PRIMA - -#endif /* __WLAN_QCT_DEV_DEFS_H */ diff --git a/wcnss/riva/inc/wlan_status_code.h b/wcnss/riva/inc/wlan_status_code.h deleted file mode 100644 index e1057281a265..000000000000 --- a/wcnss/riva/inc/wlan_status_code.h +++ /dev/null @@ -1,181 +0,0 @@ -/* - * Copyright (c) 2013, The Linux Foundation. All rights reserved. - * - * Previously licensed under the ISC license by Qualcomm Atheros, Inc. - * - * - * Permission to use, copy, modify, and/or distribute this software for - * any purpose with or without fee is hereby granted, provided that the - * above copyright notice and this permission notice appear in all - * copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL - * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE - * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL - * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -/* - * This file was originally distributed by Qualcomm Atheros, Inc. - * under proprietary terms before Copyright ownership was assigned - * to the Linux Foundation. - */ - -/*=========================================================================== - * - * @file: wlan_status_code.h - * - * @brief: Common header file containing all the status codes - * All status codes have been consolidated into one enum - * - * @author: Kumar Anand - * Copyright (C) 2010, Qualcomm Technologies, Inc. - * All rights reserved. - * - *=========================================================================*/ - -#ifndef __WLAN_STATUS_CODE_H__ -#define __WLAN_STATUS_CODE_H__ - -/*------------------------------------------------------------------------- - Include Files --------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------- - * Preprocessor Definitions and Constants - * -------------------------------------------------------------------------*/ - -/* This is to force compiler to use the maximum of an int ( 4 bytes ) */ -#define WLAN_STATUS_MAX_ENUM_SIZE 0x7FFFFFFF - -/*---------------------------------------------------------------------------- - * Type Declarations - * -------------------------------------------------------------------------*/ - -typedef enum -{ - /* PAL Request succeeded!*/ - PAL_STATUS_SUCCESS = 0, - - /* HAL Request succeeded!*/ - eHAL_STATUS_SUCCESS = 0, - - /* Request failed because there of an invalid request. This is - typically the result of invalid parameters on the request*/ - PAL_STATUS_INVAL, - - /* Request refused because a request is already in place and - another cannot be handled currently */ - PAL_STATUS_ALREADY, - - /* Request failed because of an empty condition */ - PAL_STATUS_EMPTY, - - /* Request failed for some unknown reason. */ - PAL_STATUS_FAILURE, - - /* HAL general failure */ - eHAL_STATUS_FAILURE, - - /* Invalid Param*/ - eHAL_STATUS_INVALID_PARAMETER, - - /* Invalid Station Index*/ - eHAL_STATUS_INVALID_STAIDX, - - /* DPU descriptor table full*/ - eHAL_STATUS_DPU_DESCRIPTOR_TABLE_FULL, - - /* No interrupts */ - eHAL_STATUS_NO_INTERRUPTS, - - /* Interrupt present */ - eHAL_STATUS_INTERRUPT_PRESENT, - - /* Stable Table is full */ - eHAL_STATUS_STA_TABLE_FULL, - - /* Duplicate Station found */ - eHAL_STATUS_DUPLICATE_STA, - - /* BSSID is invalid */ - eHAL_STATUS_BSSID_INVALID, - - /* STA is invalid */ - eHAL_STATUS_STA_INVALID, - - /* BSSID is is duplicate */ - eHAL_STATUS_DUPLICATE_BSSID, - - /* BSS Idx is invalid */ - eHAL_STATUS_INVALID_BSSIDX, - - /* BSSID Table is full */ - eHAL_STATUS_BSSID_TABLE_FULL, - - /* Invalid DPU signature*/ - eHAL_STATUS_INVALID_SIGNATURE, - - /* Invalid key Id */ - eHAL_STATUS_INVALID_KEYID, - - /* Already on requested channel */ - eHAL_STATUS_SET_CHAN_ALREADY_ON_REQUESTED_CHAN, - - /* UMA descriptor table is full */ - eHAL_STATUS_UMA_DESCRIPTOR_TABLE_FULL, - - /* MIC Key table is full */ - eHAL_STATUS_DPU_MICKEY_TABLE_FULL, - - /* A-MPDU/BA related Error codes */ - eHAL_STATUS_BA_RX_BUFFERS_FULL, - eHAL_STATUS_BA_RX_MAX_SESSIONS_REACHED, - eHAL_STATUS_BA_RX_INVALID_SESSION_ID, - - eHAL_STATUS_TIMER_START_FAILED, - eHAL_STATUS_TIMER_STOP_FAILED, - eHAL_STATUS_FAILED_ALLOC, - - /* Scan failure codes */ - eHAL_STATUS_NOTIFY_BSS_FAIL, - - /* Self STA not deleted as reference count is not zero */ - eHAL_STATUS_DEL_STA_SELF_IGNORED_REF_COUNT_NOT_ZERO, - - /* Self STA not added as entry already exists*/ - eHAL_STATUS_ADD_STA_SELF_IGNORED_REF_COUNT_NOT_ZERO, - - /* Message from SLM has failure status */ - eHAL_STATUS_FW_SEND_MSG_FAILED, - - /* BSS disconnect status : beacon miss */ - eHAL_STATUS_BSS_DISCONN_BEACON_MISS, - /* BSS disconnect status : deauth */ - eHAL_STATUS_BSS_DISCONN_DEAUTH, - /* BSS disconnect status : disassoc */ - eHAL_STATUS_BSS_DISCONN_DISASSOC, - - /* Data abort happened in PHY sw */ - eHAL_STATUS_PHY_DATA_ABORT, - - /* Invalid NV field */ - eHAL_STATUS_PHY_INVALID_NV_FIELD, - - /* WLAN boot test failed */ - eHAL_STATUS_WLAN_BOOT_TEST_FAILURE, - - /* Max status value */ - eHAL_STATUS_MAX_VALUE = WLAN_STATUS_MAX_ENUM_SIZE - -} palStatus, eHalStatus; - -/* Helper Macros */ -#define PAL_IS_STATUS_SUCCESS(status) (PAL_STATUS_SUCCESS == (status)) -#define HAL_STATUS_SUCCESS( status ) (eHAL_STATUS_SUCCESS == (status)) - -#endif //__WLAN_STATUS_CODE_H__ -- cgit v1.2.3 From 319e18342bdeccff7baefb400224fb685177deca Mon Sep 17 00:00:00 2001 From: Prakash Dhavali Date: Fri, 27 Dec 2013 17:55:16 -0800 Subject: Rename RIVA_INC to WCNSS_INC Rename RIVA_INC references to WCNSS_INC path that contain FW API. --- Kbuild | 4 ++-- Makefile | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Kbuild b/Kbuild index 0f9b51dc73f4..3f4a82c384ce 100644 --- a/Kbuild +++ b/Kbuild @@ -695,7 +695,7 @@ WDI_OBJS += $(WDI_CP_OBJS) \ endif -RIVA_INC := -I$(WLAN_ROOT)/wcnss/inc +WCNSS_INC := -I$(WLAN_ROOT)/wcnss/inc LINUX_INC := -Iinclude/linux @@ -704,7 +704,7 @@ INCS := $(BAP_INC) \ $(HDD_INC) \ $(LINUX_INC) \ $(MAC_INC) \ - $(RIVA_INC) \ + $(WCNSS_INC) \ $(SAP_INC) \ $(SME_INC) \ $(SVC_INC) \ diff --git a/Makefile b/Makefile index 668e0c7db796..468a5bf0dbbd 100644 --- a/Makefile +++ b/Makefile @@ -696,7 +696,7 @@ WDI_OBJS += $(WDI_CP_OBJS) \ endif -RIVA_INC := -I$(WLAN_ROOT)/wcnss/inc +WCNSS_INC := -I$(WLAN_ROOT)/wcnss/inc LINUX_INC := -Iinclude/linux @@ -705,7 +705,7 @@ INCS := $(BAP_INC) \ $(HDD_INC) \ $(LINUX_INC) \ $(MAC_INC) \ - $(RIVA_INC) \ + $(WCNSS_INC) \ $(SAP_INC) \ $(SME_INC) \ $(SVC_INC) \ -- cgit v1.2.3 From 2eac8168615470118bcb7b4048af09c52841f1f3 Mon Sep 17 00:00:00 2001 From: Prakash Dhavali Date: Sat, 28 Dec 2013 23:59:40 -0800 Subject: Release 4.0.0.62A. Correct module name and tag to match previous opensrc copy --- Android.mk | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Android.mk b/Android.mk index 49998e72862a..865d0f952261 100644 --- a/Android.mk +++ b/Android.mk @@ -48,7 +48,7 @@ else endif -# Build wlan.ko as either qca_cld_wlan.ko +# Build wlan.ko as either prima_wlan.ko or pronto_wlan.ko or qca_cld_wlan.ko ########################################################### # This is set once per LOCAL_PATH, not per (kernel) module @@ -63,9 +63,9 @@ KBUILD_OPTIONS += $(WLAN_SELECT) KBUILD_OPTIONS += $(WLAN_ISOC_SELECT) include $(CLEAR_VARS) -LOCAL_MODULE := proprietary_$(WLAN_CHIPSET)_wlan.ko +LOCAL_MODULE := $(WLAN_CHIPSET)_wlan.ko LOCAL_MODULE_KBUILD_NAME := wlan.ko -LOCAL_MODULE_TAGS := optional +LOCAL_MODULE_TAGS := debug LOCAL_MODULE_DEBUG_ENABLE := true LOCAL_MODULE_PATH := $(TARGET_OUT)/lib/modules/$(WLAN_CHIPSET) include $(DLKM_DIR)/AndroidKernelModule.mk -- cgit v1.2.3 From a01db2a257a206d251b080210a4b3e9dd4af2720 Mon Sep 17 00:00:00 2001 From: Prakash Dhavali Date: Sun, 29 Dec 2013 02:34:07 -0800 Subject: Release 4.0.0.62B Add Release 4.0.0.62B next set of changes. These are additional changes on top of 4.0.0.62/62A that were changed between qcacld-2.0 and qcacld-new switch-over. --- CORE/CLD_TXRX/TLSHIM/tl_shim.c | 33 +- CORE/CLD_TXRX/TLSHIM/tl_shim.h | 1 + CORE/CLD_TXRX/TXRX/ol_txrx.c | 2 +- CORE/CLD_TXRX/TXRX/ol_txrx_types.h | 1 - CORE/MAC/inc/qwlan_version.h | 2 +- CORE/MAC/src/pe/lim/limProcessActionFrame.c | 200 +- CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c | 201 +- CORE/MAC/src/pe/lim/limProcessAssocRspFrame.c | 132 +- CORE/MAC/src/pe/lim/limProcessAuthFrame.c | 99 +- CORE/MAC/src/pe/lim/limProcessBeaconFrame.c | 60 +- CORE/MAC/src/pe/lim/limProcessCfgUpdates.c | 36 +- CORE/MAC/src/pe/lim/limProcessDeauthFrame.c | 54 +- CORE/MAC/src/pe/lim/limProcessDisassocFrame.c | 22 +- CORE/MAC/src/pe/lim/limProcessMessageQueue.c | 211 +- CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c | 514 ++- CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c | 474 +- CORE/MAC/src/pe/lim/limProcessProbeReqFrame.c | 63 +- CORE/MAC/src/pe/lim/limProcessProbeRspFrame.c | 78 +- CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c | 678 +-- CORE/MAC/src/pe/lim/limProcessTdls.c | 1095 ++--- CORE/MAC/src/pe/lim/limPropExtsUtils.c | 12 +- CORE/MAC/src/pe/lim/limRoamingAlgo.c | 49 +- CORE/MAC/src/pe/lim/limScanResultUtils.c | 155 +- CORE/MAC/src/pe/lim/limScanResultUtils.h | 4 +- CORE/MAC/src/pe/lim/limSecurityUtils.c | 129 +- CORE/MAC/src/pe/lim/limSendManagementFrames.c | 832 ++-- CORE/MAC/src/pe/lim/limSendMessages.c | 171 +- CORE/MAC/src/pe/lim/limSendMessages.h | 2 +- CORE/MAC/src/pe/lim/limSendSmeRspMessages.c | 695 +-- CORE/MAC/src/pe/lim/limSendSmeRspMessages.h | 6 + CORE/MAC/src/pe/lim/limSerDesUtils.c | 145 +- CORE/MAC/src/pe/lim/limSession.c | 112 +- CORE/MAC/src/pe/lim/limSmeReqUtils.c | 3 +- CORE/MAC/src/pe/lim/limTimerUtils.c | 206 +- CORE/MAC/src/pe/lim/limTimerUtils.h | 5 +- CORE/MAC/src/pe/lim/limTrace.c | 1 + CORE/MAC/src/pe/lim/limTypes.h | 31 +- CORE/MAC/src/pe/lim/limUtils.c | 464 +- CORE/MAC/src/pe/lim/limUtils.h | 8 + CORE/MAC/src/pe/pmm/pmmApi.c | 237 +- CORE/MAC/src/pe/pmm/pmmDebug.c | 36 +- CORE/MAC/src/pe/rrm/rrmApi.c | 212 +- CORE/MAC/src/pe/sch/schApi.c | 70 +- CORE/MAC/src/pe/sch/schBeaconGen.c | 174 +- CORE/MAC/src/pe/sch/schBeaconProcess.c | 245 +- CORE/MAC/src/pe/sch/schDebug.c | 31 +- CORE/SAP/inc/sapApi.h | 13 +- CORE/SAP/src/sapChSelect.c | 960 +++- CORE/SAP/src/sapFsm.c | 3 +- CORE/SAP/src/sapInternal.h | 22 +- CORE/SAP/src/sapModule.c | 65 +- CORE/SERVICES/BMI/ol_fw.c | 4 +- CORE/SERVICES/COMMON/wma_api.h | 3 +- CORE/SERVICES/COMMON/wmi_tlv_defs.h | 14 +- CORE/SERVICES/COMMON/wmi_unified.h | 17 +- CORE/SERVICES/COMMON/wmi_version.h | 2 +- CORE/SERVICES/HIF/PCIe/hif_pci.c | 60 +- CORE/SERVICES/HIF/PCIe/hif_pci.h | 3 + CORE/SERVICES/HIF/PCIe/if_pci.c | 1 + CORE/SERVICES/WMA/inc/legacy/halMsgApi.h | 7 +- CORE/SERVICES/WMA/wma.c | 717 ++- CORE/SERVICES/WMA/wma.h | 11 +- CORE/SME/inc/btcApi.h | 16 + CORE/SME/inc/csrApi.h | 140 +- CORE/SME/inc/csrInternal.h | 118 +- CORE/SME/inc/csrLinkList.h | 4 + CORE/SME/inc/csrNeighborRoam.h | 50 +- CORE/SME/inc/p2p_Api.h | 21 +- CORE/SME/inc/pmc.h | 17 +- CORE/SME/inc/pmcApi.h | 63 + CORE/SME/inc/smeInside.h | 39 +- CORE/SME/inc/smeInternal.h | 38 +- CORE/SME/inc/smeRrmInternal.h | 8 +- CORE/SME/inc/sme_Api.h | 546 ++- CORE/SME/inc/sme_FTApi.h | 3 +- CORE/SME/inc/sme_QosApi.h | 8 + CORE/SME/inc/sme_RrmApi.h | 2 +- CORE/SME/inc/smsDebug.h | 1 + CORE/SME/src/QoS/sme_Qos.c | 257 +- CORE/SME/src/btc/btcApi.c | 56 +- CORE/SME/src/ccm/ccmApi.c | 29 +- CORE/SME/src/csr/csrApiRoam.c | 5578 +++++++++++++---------- CORE/SME/src/csr/csrApiScan.c | 2164 +++++---- CORE/SME/src/csr/csrCmdProcess.c | 2 + CORE/SME/src/csr/csrInsideApi.h | 35 +- CORE/SME/src/csr/csrLinkList.c | 15 +- CORE/SME/src/csr/csrLogDump.c | 4 +- CORE/SME/src/csr/csrNeighborRoam.c | 988 ++++- CORE/SME/src/csr/csrTdlsProcess.c | 258 +- CORE/SME/src/csr/csrUtil.c | 404 +- CORE/SME/src/oemData/oemDataApi.c | 34 +- CORE/SME/src/p2p/p2p_Api.c | 253 +- CORE/SME/src/pmc/pmc.c | 449 +- CORE/SME/src/pmc/pmcApi.c | 757 ++-- CORE/SME/src/pmc/pmcLogDump.c | 30 +- CORE/SME/src/rrm/sme_rrm.c | 355 +- CORE/SME/src/sme_common/sme_Api.c | 2751 ++++++++++-- CORE/SME/src/sme_common/sme_FTApi.c | 54 +- CORE/SVC/inc/wlan_nlink_srv.h | 9 +- CORE/SVC/src/nlink/wlan_nlink_srv.c | 109 +- CORE/SVC/src/ptt/wlan_ptt_sock_svc.c | 8 + CORE/SYS/common/inc/wlan_qct_sys.h | 1 + CORE/SYS/common/src/wlan_qct_sys.c | 26 +- CORE/SYS/legacy/src/pal/inc/palApi.h | 6 +- CORE/SYS/legacy/src/pal/inc/palTimer.h | 6 +- CORE/SYS/legacy/src/pal/src/palApiComm.c | 5 +- CORE/SYS/legacy/src/pal/src/palTimer.c | 6 +- CORE/SYS/legacy/src/system/src/macInitApi.c | 25 +- CORE/SYS/legacy/src/system/src/sysEntryFunc.c | 2 +- CORE/SYS/legacy/src/utils/inc/dot11fdefs.h | 5 +- CORE/SYS/legacy/src/utils/inc/utilsParser.h | 2 +- CORE/SYS/legacy/src/utils/src/dot11f.c | 1589 +++++-- CORE/SYS/legacy/src/utils/src/logApi.c | 5 +- CORE/SYS/legacy/src/utils/src/logDump.c | 5 +- CORE/SYS/legacy/src/utils/src/macTrace.c | 273 +- CORE/SYS/legacy/src/utils/src/parserApi.c | 721 ++- CORE/SYS/legacy/src/utils/src/utilsParser.c | 103 +- CORE/TL/inc/wlan_qct_tl.h | 394 +- CORE/TL/src/wlan_qct_tl.c | 1821 +++++++- CORE/TL/src/wlan_qct_tl_ba.c | 84 +- CORE/TL/src/wlan_qct_tl_hosupport.c | 35 +- CORE/TL/src/wlan_qct_tli.h | 320 +- CORE/VOSS/inc/i_vos_packet.h | 10 +- CORE/VOSS/inc/i_vos_trace.h | 8 +- CORE/VOSS/inc/i_vos_types.h | 18 +- CORE/VOSS/inc/log_codes.h | 4 +- CORE/VOSS/inc/vos_api.h | 28 +- CORE/VOSS/inc/vos_diag_core_log.h | 37 + CORE/VOSS/inc/vos_getBin.h | 4 +- CORE/VOSS/inc/vos_nvitem.h | 69 +- CORE/VOSS/inc/vos_packet.h | 17 + CORE/VOSS/inc/vos_trace.h | 19 + CORE/VOSS/inc/vos_types.h | 18 +- CORE/VOSS/inc/wcnss_api.h | 33 +- CORE/VOSS/inc/wlan_hdd_misc.h | 14 + CORE/VOSS/src/vos_api.c | 148 +- CORE/VOSS/src/vos_diag.c | 29 +- CORE/VOSS/src/vos_getBin.c | 3 + CORE/VOSS/src/vos_memory.c | 73 +- CORE/VOSS/src/vos_nvitem.c | 2140 +++++++-- CORE/VOSS/src/vos_packet.c | 133 +- CORE/VOSS/src/vos_power.c | 707 --- CORE/VOSS/src/vos_sched.c | 3 +- CORE/VOSS/src/vos_sched.h | 16 +- CORE/VOSS/src/vos_timer.c | 51 +- CORE/VOSS/src/vos_trace.c | 129 +- CORE/WDA/inc/legacy/halMsgApi.h | 125 +- CORE/WDA/inc/legacy/halTypes.h | 6 + CORE/WDA/inc/legacy/palTypes.h | 3 +- CORE/WDA/inc/legacy/wlan_qct_hal.h | 5 + CORE/WDA/inc/wlan_qct_wda.h | 417 +- CORE/WDA/src/wlan_qct_wda.c | 2454 +++++++++-- CORE/WDA/src/wlan_qct_wda_ds.c | 91 +- CORE/WDA/src/wlan_qct_wda_legacy.c | 16 +- CORE/WDI/CP/inc/wlan_qct_wdi.h | 1328 +++++- CORE/WDI/CP/inc/wlan_qct_wdi_bd.h | 6 +- CORE/WDI/CP/inc/wlan_qct_wdi_dp.h | 15 +- CORE/WDI/CP/inc/wlan_qct_wdi_i.h | 654 ++- CORE/WDI/CP/src/wlan_qct_wdi.c | 5636 +++++++++++++++++++----- CORE/WDI/CP/src/wlan_qct_wdi_dp.c | 83 +- CORE/WDI/DP/inc/wlan_qct_wdi_ds.h | 4 +- CORE/WDI/DP/inc/wlan_qct_wdi_ds_i.h | 1 + CORE/WDI/DP/src/wlan_qct_wdi_ds.c | 6 +- CORE/WDI/TRP/CTS/src/wlan_qct_wdi_cts.c | 4 +- CORE/WDI/TRP/DTS/inc/wlan_qct_wdi_dts.h | 7 + CORE/WDI/TRP/DTS/src/wlan_qct_wdi_dts.c | 206 +- CORE/WDI/WPAL/inc/wlan_qct_os_trace.h | 18 +- CORE/WDI/WPAL/inc/wlan_qct_os_type.h | 19 +- CORE/WDI/WPAL/inc/wlan_qct_pal_api.h | 29 +- CORE/WDI/WPAL/inc/wlan_qct_pal_device.h | 8 +- CORE/WDI/WPAL/inc/wlan_qct_pal_packet.h | 81 + CORE/WDI/WPAL/inc/wlan_qct_pal_timer.h | 9 +- CORE/WDI/WPAL/inc/wlan_qct_pal_trace.h | 2 +- CORE/WDI/WPAL/src/wlan_qct_pal_api.c | 22 +- CORE/WDI/WPAL/src/wlan_qct_pal_device.c | 36 +- CORE/WDI/WPAL/src/wlan_qct_pal_msg.c | 6 +- CORE/WDI/WPAL/src/wlan_qct_pal_packet.c | 123 +- CORE/WDI/WPAL/src/wlan_qct_pal_sync.c | 14 +- CORE/WDI/WPAL/src/wlan_qct_pal_timer.c | 47 +- firmware_bin/WCNSS_cfg.dat | Bin 10298 -> 10650 bytes firmware_bin/WCNSS_qcom_cfg.ini | 86 +- 181 files changed, 33337 insertions(+), 12941 deletions(-) mode change 100644 => 100755 firmware_bin/WCNSS_cfg.dat diff --git a/CORE/CLD_TXRX/TLSHIM/tl_shim.c b/CORE/CLD_TXRX/TLSHIM/tl_shim.c index c9949d3658a2..55ccd5f34dfa 100644 --- a/CORE/CLD_TXRX/TLSHIM/tl_shim.c +++ b/CORE/CLD_TXRX/TLSHIM/tl_shim.c @@ -332,7 +332,7 @@ static void tlshim_mgmt_rx_dxe_handler(void *context, adf_nbuf_t buflist) * that has to be delivered to UMAC */ rx_packet = - (vos_pkt_t *)vos_mem_malloc(sizeof(vos_pkt_t)); + (vos_pkt_t *)adf_os_mem_alloc(NULL, sizeof(vos_pkt_t)); if(rx_packet == NULL) { TLSHIM_LOGE("Rx Packet Mem Alloc Failed"); @@ -912,22 +912,17 @@ VOS_STATUS WLANTL_EnableUAPSDForAC(void *vos_ctx, u_int8_t sta_id, { tp_wma_handle wma_handle; t_wma_trigger_uapsd_params uapsd_params; + struct txrx_tl_shim_ctx *tl_shim; ENTER(); wma_handle = vos_get_context(VOS_MODULE_ID_WDA, vos_ctx); + tl_shim = vos_get_context(VOS_MODULE_ID_TL, vos_ctx); uapsd_params.wmm_ac = ac; uapsd_params.user_priority = pri; uapsd_params.service_interval = srvc_int; - - /* - * Since Delayed Interval is not available - * use suspend interval for delayed interval - * for now. - * TODO: Need to pass Delayed Interval as well - */ - uapsd_params.delay_interval = sus_int; + uapsd_params.delay_interval = tl_shim->delay_interval; uapsd_params.suspend_interval = sus_int; if(VOS_STATUS_SUCCESS != @@ -1024,10 +1019,23 @@ VOS_STATUS WLANTL_RegisterMgmtFrmClient(void *vos_ctx, /* * Return the data rssi for the given peer. */ -VOS_STATUS WLANTL_GetRssi(void *vos_ctx, u_int8_t sta_id, v_S7_t *rssi) +VOS_STATUS WLANTL_GetRssi(void *vos_ctx, u_int8_t sta_id, v_S7_t *rssi, void *pGetRssiReq) { - /* TBD */ - return VOS_STATUS_SUCCESS; + tp_wma_handle wma_handle; + + ENTER(); + + wma_handle = vos_get_context(VOS_MODULE_ID_WDA, vos_ctx); + + if(VOS_STATUS_SUCCESS != + wma_send_snr_request(wma_handle, pGetRssiReq)) + { + TLSHIM_LOGE("Failed to Trigger wma stats request"); + return VOS_STATUS_E_FAILURE; + } + /* dont send success, otherwise call back + * will released with out values */ + return VOS_STATUS_E_BUSY; } /* @@ -1267,6 +1275,7 @@ VOS_STATUS WLANTL_Open(void *vos_ctx, WLANTL_ConfigInfoType *tl_cfg) */ tl_shim->ip_checksum_offload = tl_cfg->ip_checksum_offload; + tl_shim->delay_interval = tl_cfg->uDelayedTriggerFrmInt; return status; } diff --git a/CORE/CLD_TXRX/TLSHIM/tl_shim.h b/CORE/CLD_TXRX/TLSHIM/tl_shim.h index d7d2dfc11e1d..e896e5340dc9 100644 --- a/CORE/CLD_TXRX/TLSHIM/tl_shim.h +++ b/CORE/CLD_TXRX/TLSHIM/tl_shim.h @@ -70,6 +70,7 @@ struct deferred_iapp_work iapp_work; v_BOOL_t ip_checksum_offload; u_int8_t *last_beacon_data; u_int32_t last_beacon_len; + u_int32_t delay_interval; }; /* diff --git a/CORE/CLD_TXRX/TXRX/ol_txrx.c b/CORE/CLD_TXRX/TXRX/ol_txrx.c index 4ebf05103559..c38f6576e724 100644 --- a/CORE/CLD_TXRX/TXRX/ol_txrx.c +++ b/CORE/CLD_TXRX/TXRX/ol_txrx.c @@ -826,7 +826,7 @@ void ol_txrx_osif_vdev_register(ol_txrx_vdev_handle vdev, txrx_ops->tx.std = vdev->tx = ol_tx_hl; txrx_ops->tx.non_std = ol_tx_non_std_hl; } else { - txrx_ops->tx.std = vdev->tx = OL_TX_LL; + txrx_ops->tx.std = vdev->tx = OL_TX_LL; txrx_ops->tx.non_std = ol_tx_non_std_ll; } } diff --git a/CORE/CLD_TXRX/TXRX/ol_txrx_types.h b/CORE/CLD_TXRX/TXRX/ol_txrx_types.h index cbc9889bcef3..9da0bd1533b2 100644 --- a/CORE/CLD_TXRX/TXRX/ol_txrx_types.h +++ b/CORE/CLD_TXRX/TXRX/ol_txrx_types.h @@ -709,7 +709,6 @@ struct ol_txrx_vdev_t { }; - struct ol_rx_reorder_array_elem_t { adf_nbuf_t head; adf_nbuf_t tail; diff --git a/CORE/MAC/inc/qwlan_version.h b/CORE/MAC/inc/qwlan_version.h index 2864e3ae1689..447b1d230677 100644 --- a/CORE/MAC/inc/qwlan_version.h +++ b/CORE/MAC/inc/qwlan_version.h @@ -48,6 +48,6 @@ BRIEF DESCRIPTION: #define QWLAN_VERSION_EXTRA "" #define QWLAN_VERSION_BUILD 62 -#define QWLAN_VERSIONSTR "4.0.0.62" +#define QWLAN_VERSIONSTR "4.0.0.62B" #endif /* QWLAN_VERSION_H */ diff --git a/CORE/MAC/src/pe/lim/limProcessActionFrame.c b/CORE/MAC/src/pe/lim/limProcessActionFrame.c index 4311a117b964..7fb9f729f6a3 100644 --- a/CORE/MAC/src/pe/lim/limProcessActionFrame.c +++ b/CORE/MAC/src/pe/lim/limProcessActionFrame.c @@ -57,8 +57,9 @@ #include "rrmApi.h" #endif #include "limSessionUtils.h" +#include "limRMC.h" -#ifdef FEATURE_WLAN_CCX +#if defined(FEATURE_WLAN_CCX) && !defined(FEATURE_WLAN_CCX_UPLOAD) #include "ccxApi.h" #endif #include "wlan_qct_wda.h" @@ -271,7 +272,6 @@ __limProcessChannelSwitchActionFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo tANI_U32 val; tANI_U32 frameLen; tANI_U32 nStatus; - eHalStatus status; pHdr = WDA_GET_RX_MAC_HEADER(pRxPacketInfo); pBody = WDA_GET_RX_MPDU_DATA(pRxPacketInfo); @@ -281,11 +281,11 @@ __limProcessChannelSwitchActionFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo if (!psessionEntry->lim11hEnable) return; - status = palAllocateMemory( pMac->hHdd, (void **)&pChannelSwitchFrame, sizeof(*pChannelSwitchFrame)); - if (eHAL_STATUS_SUCCESS != status) + pChannelSwitchFrame = vos_mem_malloc(sizeof(*pChannelSwitchFrame)); + if (NULL == pChannelSwitchFrame) { limLog(pMac, LOGE, - FL("palAllocateMemory failed, status = %d "), status); + FL("AllocateMemory failed")); return; } @@ -298,7 +298,7 @@ __limProcessChannelSwitchActionFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo FL( "Failed to unpack and parse an 11h-CHANSW Request (0x%08x, %d bytes):"), nStatus, frameLen); - palFreeMemory(pMac->hHdd, pChannelSwitchFrame); + vos_mem_free(pChannelSwitchFrame); return; } else if(DOT11F_WARNED( nStatus )) @@ -309,14 +309,14 @@ __limProcessChannelSwitchActionFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo frameLen); } - if (palEqualMemory( pMac->hHdd,(tANI_U8 *) &psessionEntry->bssId, - (tANI_U8 *) &pHdr->sa, - sizeof(tSirMacAddr))) + if (vos_mem_compare((tANI_U8 *) &psessionEntry->bssId, + (tANI_U8 *) &pHdr->sa, + sizeof(tSirMacAddr))) { #if 0 if (wlan_cfgGetInt(pMac, WNI_CFG_BEACON_INTERVAL, &val) != eSIR_SUCCESS) { - palFreeMemory(pMac->hHdd, pChannelSwitchFrame); + vos_mem_free(pChannelSwitchFrame); limLog(pMac, LOGP, FL("could not retrieve Beacon interval")); return; } @@ -388,7 +388,7 @@ __limProcessChannelSwitchActionFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo PELOG1(limLog(pMac, LOG1, FL("Could not start channel switch"));) } - palFreeMemory(pMac->hHdd, pChannelSwitchFrame); + vos_mem_free(pChannelSwitchFrame); return; } /*** end limProcessChannelSwitchActionFrame() ***/ @@ -403,7 +403,6 @@ __limProcessOperatingModeActionFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo tDot11fOperatingMode *pOperatingModeframe; tANI_U32 frameLen; tANI_U32 nStatus; - eHalStatus status; tpDphHashNode pSta; tANI_U16 aid; tANI_U8 operMode; @@ -413,11 +412,11 @@ __limProcessOperatingModeActionFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo frameLen = WDA_GET_RX_PAYLOAD_LEN(pRxPacketInfo); PELOG3(limLog(pMac, LOG3, FL("Received Operating Mode action frame"));) - status = palAllocateMemory( pMac->hHdd, (void **)&pOperatingModeframe, sizeof(*pOperatingModeframe)); - if (eHAL_STATUS_SUCCESS != status) + pOperatingModeframe = vos_mem_malloc(sizeof(*pOperatingModeframe)); + if (NULL == pOperatingModeframe) { limLog(pMac, LOGE, - FL("palAllocateMemory failed, status = %d "), status); + FL("AllocateMemory failed")); return; } @@ -430,7 +429,7 @@ __limProcessOperatingModeActionFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo FL( "Failed to unpack and parse an 11h-CHANSW Request (0x%08x, %d bytes):"), nStatus, frameLen); - palFreeMemory(pMac->hHdd, pOperatingModeframe); + vos_mem_free(pOperatingModeframe); return; } else if(DOT11F_WARNED( nStatus )) @@ -477,7 +476,7 @@ __limProcessOperatingModeActionFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo limCheckVHTOpModeChange( pMac, psessionEntry, (pOperatingModeframe->OperatingMode.chanWidth), pSta->staIndex); } - palFreeMemory(pMac->hHdd, pOperatingModeframe); + vos_mem_free(pOperatingModeframe); return; } @@ -490,7 +489,6 @@ __limProcessGidManagementActionFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo tDot11fVHTGidManagementActionFrame *pGidManagementframe; tANI_U32 frameLen; tANI_U32 nStatus; - eHalStatus status; tpDphHashNode pSta; tANI_U16 aid; tANI_U32 membership = 0; @@ -504,11 +502,11 @@ __limProcessGidManagementActionFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo frameLen = WDA_GET_RX_PAYLOAD_LEN(pRxPacketInfo); PELOG3(limLog(pMac, LOG3, FL("Received GID Management action frame"));) - status = palAllocateMemory( pMac->hHdd, (void **)&pGidManagementframe, sizeof(*pGidManagementframe)); - if (eHAL_STATUS_SUCCESS != status) + pGidManagementframe = vos_mem_malloc(sizeof(*pGidManagementframe)); + if (NULL == pGidManagementframe) { limLog(pMac, LOGE, - FL("palAllocateMemory failed, status = %d "), status); + FL("AllocateMemory failed")); return; } @@ -521,7 +519,7 @@ __limProcessGidManagementActionFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo FL( "Failed to unpack and parse an GidManagement Action frame (0x%08x, %d bytes):"), nStatus, frameLen); - palFreeMemory(pMac->hHdd, pGidManagementframe); + vos_mem_free(pGidManagementframe); return; } else if(DOT11F_WARNED( nStatus )) @@ -594,7 +592,7 @@ __limProcessGidManagementActionFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo userPosition, pSta->staIndex); } out: - palFreeMemory(pMac->hHdd, pGidManagementframe); + vos_mem_free(pGidManagementframe); return; } @@ -717,7 +715,12 @@ __limProcessAddTsRsp(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo,tpPESession pse psessionEntry->ccxContext.tsm.tid = addts.tspec.tsinfo.traffic.userPrio; vos_mem_copy(&psessionEntry->ccxContext.tsm.tsmInfo, &addts.tsmIE,sizeof(tSirMacCCXTSMIE)); +#ifdef FEATURE_WLAN_CCX_UPLOAD + limSendSmeTsmIEInd(pMac, psessionEntry, addts.tsmIE.tsid, + addts.tsmIE.state, addts.tsmIE.msmt_interval); +#else limActivateTSMStatsTimer(pMac, psessionEntry); +#endif /* FEATURE_WLAN_CCX_UPLOAD */ } #endif /* Since AddTS response was successful, check for the PSB flag @@ -815,13 +818,21 @@ __limProcessAddTsRsp(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo,tpPESession pse return; //Error handling. send the response with error status. need to send DelTS to tear down the TSPEC status. } if((addts.tspec.tsinfo.traffic.accessPolicy != SIR_MAC_ACCESSPOLICY_EDCA) || - ((upToAc(addts.tspec.tsinfo.traffic.userPrio) < MAX_NUM_AC) && - (psessionEntry->gLimEdcaParams[upToAc(addts.tspec.tsinfo.traffic.userPrio)].aci.acm))) + ((upToAc(addts.tspec.tsinfo.traffic.userPrio) < MAX_NUM_AC))) { #ifdef FEATURE_WLAN_CCX - retval = limSendHalMsgAddTs(pMac, pSta->staIndex, tspecInfo->idx, addts.tspec, psessionEntry->peSessionId, addts.tsmIE.msmt_interval); + retval = limSendHalMsgAddTs(pMac, + pSta->staIndex, + tspecInfo->idx, + addts.tspec, + psessionEntry->peSessionId, + addts.tsmIE.msmt_interval); #else - retval = limSendHalMsgAddTs(pMac, pSta->staIndex, tspecInfo->idx, addts.tspec, psessionEntry->peSessionId); + retval = limSendHalMsgAddTs(pMac, + pSta->staIndex, + tspecInfo->idx, + addts.tspec, + psessionEntry->peSessionId); #endif if(eSIR_SUCCESS != retval) { @@ -920,7 +931,7 @@ __limProcessDelTsReq(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo,tpPESession pse if ((tsinfo->traffic.accessPolicy == SIR_MAC_ACCESSPOLICY_EDCA)) { - if ((upToAc(tsinfo->traffic.userPrio) >= MAX_NUM_AC) || (! psessionEntry->gLimEdcaParams[upToAc(tsinfo->traffic.userPrio)].aci.acm)) + if (upToAc(tsinfo->traffic.userPrio) >= MAX_NUM_AC) { limLog(pMac, LOGW, FL("DelTs with UP %d has no AC - ignoring request"), tsinfo->traffic.userPrio); @@ -928,6 +939,10 @@ __limProcessDelTsReq(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo,tpPESession pse } } + if ((psessionEntry->limSystemRole != eLIM_AP_ROLE) && + (psessionEntry->limSystemRole != eLIM_BT_AMP_AP_ROLE)) + limSendSmeDeltsInd(pMac, &delts, aid,psessionEntry); + // try to delete the TS if (eSIR_SUCCESS != limAdmitControlDeleteTS(pMac, pSta->assocId, tsinfo, &tsStatus, &tspecIdx)) { @@ -943,7 +958,12 @@ __limProcessDelTsReq(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo,tpPESession pse else { //send message to HAL to delete TS - if(eSIR_SUCCESS != limSendHalMsgDelTs(pMac, pSta->staIndex, tspecIdx, delts, psessionEntry->peSessionId)) + if(eSIR_SUCCESS != limSendHalMsgDelTs(pMac, + pSta->staIndex, + tspecIdx, + delts, + psessionEntry->peSessionId, + psessionEntry->bssId)) { limLog(pMac, LOGW, FL("DelTs with UP %d failed in limSendHalMsgDelTs - ignoring request"), tsinfo->traffic.userPrio); @@ -1039,11 +1059,13 @@ __limProcessDelTsReq(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo,tpPESession pse limLog(pMac, LOGE, FL("Self entry missing in Hash Table ")); PELOG1(limLog(pMac, LOG1, FL("DeleteTS succeeded"));) - if((psessionEntry->limSystemRole != eLIM_AP_ROLE)&&(psessionEntry->limSystemRole != eLIM_BT_AMP_AP_ROLE)) - limSendSmeDeltsInd(pMac, &delts, aid,psessionEntry); #ifdef FEATURE_WLAN_CCX +#ifdef FEATURE_WLAN_CCX_UPLOAD + limSendSmeTsmIEInd(pMac, psessionEntry, 0, 0, 0); +#else limDeactivateAndChangeTimer(pMac,eLIM_TSM_TIMER); +#endif /* FEATURE_WLAN_CCX_UPLOAD */ #endif } @@ -1186,11 +1208,11 @@ __limProcessMeasurementRequestFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo) pBody = WDA_GET_RX_MPDU_DATA(pRxPacketInfo); frameLen = WDA_GET_RX_PAYLOAD_LEN(pRxPacketInfo); - if ( eHAL_STATUS_SUCCESS != - palAllocateMemory( pMac->hHdd, (void **)&pMeasReqFrame, sizeof( tSirMacMeasReqActionFrame ) ) ) + pMeasReqFrame = vos_mem_malloc(sizeof( tSirMacMeasReqActionFrame )); + if (NULL == pMeasReqFrame) { limLog(pMac, LOGE, - FL("limProcessMeasurementRequestFrame: palAllocateMemory failed ")); + FL("limProcessMeasurementRequestFrame: AllocateMemory failed ")); return; } @@ -1252,10 +1274,10 @@ __limProcessTpcRequestFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo) PELOG1(limLog(pMac, LOG1, FL("****LIM: Processing TPC Request from peer ****"));) - if ( eHAL_STATUS_SUCCESS != - palAllocateMemory( pMac->hHdd, (void **)&pTpcReqFrame, sizeof( tSirMacTpcReqActionFrame ) ) ) + pTpcReqFrame = vos_mem_malloc(sizeof( tSirMacTpcReqActionFrame )); + if (NULL == pTpcReqFrame) { - PELOGE(limLog(pMac, LOGE, FL("palAllocateMemory failed "));) + PELOGE(limLog(pMac, LOGE, FL("AllocateMemory failed "));) return; } @@ -1394,6 +1416,7 @@ __limProcessAddBAReq( tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo,tpPESession ps pHdr = WDA_GET_RX_MAC_HEADER( pRxPacketInfo ); pBody = WDA_GET_RX_MPDU_DATA( pRxPacketInfo ); frameLen = WDA_GET_RX_PAYLOAD_LEN( pRxPacketInfo ); + val = 0; // Unpack the received frame nStatus = dot11fUnpackAddBAReq( pMac, pBody, frameLen, &frmAddBAReq ); @@ -1426,7 +1449,7 @@ __limProcessAddBAReq( tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo,tpPESession ps { limLog( pMac, LOGE, FL( "STA context not found - ignoring ADDBA from " )); - limPrintMacAddr( pMac, pHdr->sa, LOGW ); + limPrintMacAddr( pMac, pHdr->sa, LOGE ); // FIXME - Should we do this? status = eSIR_MAC_INABLITY_TO_CONFIRM_ASSOC_STATUS; @@ -1446,6 +1469,23 @@ __limProcessAddBAReq( tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo,tpPESession ps } #endif //WLAN_SOFTAP_VSTA_FEATURE + if (wlan_cfgGetInt(pMac, WNI_CFG_DEL_ALL_RX_BA_SESSIONS_2_4_G_BTC, &val) != + eSIR_SUCCESS) + { + limLog(pMac, LOGE, + FL("Unable to get WNI_CFG_DEL_ALL_RX_BA_SESSIONS_2_4_G_BTC")); + val = 0; + } + if ((SIR_BAND_2_4_GHZ == limGetRFBand(psessionEntry->currentOperChannel)) && + val) + { + limLog( pMac, LOGW, + FL( "BTC disabled aggregation - ignoring ADDBA from " )); + limPrintMacAddr( pMac, pHdr->sa, LOGW ); + + status = eSIR_MAC_REQ_DECLINED_STATUS; + goto returnAfterError; + } // Now, validate the ADDBA Req if( eSIR_MAC_SUCCESS_STATUS != @@ -1502,7 +1542,7 @@ __limProcessAddBAReq( tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo,tpPESession ps { frmAddBAReq.AddBAParameterSet.bufferSize = val; } - limLog( pMac, LOGE, FL( "ADDBAREQ NUMBUFF %d" ), + limLog( pMac, LOG1, FL( "ADDBAREQ NUMBUFF %d" ), frmAddBAReq.AddBAParameterSet.bufferSize); if( eSIR_SUCCESS != limPostMsgAddBAReq( pMac, @@ -1933,16 +1973,16 @@ __limProcessNeighborReport( tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo ,tpPESes pBody = WDA_GET_RX_MPDU_DATA( pRxPacketInfo ); frameLen = WDA_GET_RX_PAYLOAD_LEN( pRxPacketInfo ); - if(eHAL_STATUS_SUCCESS != palAllocateMemory(pMac->hHdd, - (void **)&pFrm, sizeof(tDot11fNeighborReportResponse))) + pFrm = vos_mem_malloc(sizeof(tDot11fNeighborReportResponse)); + if (NULL == pFrm) { - limLog(pMac, LOGE, FL("Unable to PAL allocate memory in __limProcessNeighborReport") ); + limLog(pMac, LOGE, FL("Unable to allocate memory in __limProcessNeighborReport") ); return; } - if( psessionEntry == NULL ) + if(psessionEntry == NULL) { - palFreeMemory(pMac->hHdd, pFrm); + vos_mem_free(pFrm); return; } @@ -1953,7 +1993,7 @@ __limProcessNeighborReport( tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo ,tpPESes limLog( pMac, LOGE, FL( "Failed to unpack and parse a Neighbor report response (0x%08x, %d bytes):"), nStatus, frameLen ); PELOG2(sirDumpBuf( pMac, SIR_DBG_MODULE_ID, LOG2, pBody, frameLen );) - palFreeMemory(pMac->hHdd, pFrm); + vos_mem_free(pFrm); return; }else if ( DOT11F_WARNED( nStatus ) ) { limLog(pMac, LOGW, FL( "There were warnings while unpacking a Neighbor report response (0x%08x, %d bytes):"), @@ -1964,7 +2004,7 @@ __limProcessNeighborReport( tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo ,tpPESes //Call rrm function to handle the request. rrmProcessNeighborReportResponse( pMac, pFrm, psessionEntry ); - palFreeMemory(pMac->hHdd, pFrm); + vos_mem_free(pFrm); } #endif @@ -2012,7 +2052,7 @@ static void __limProcessSAQueryRequestActionFrame(tpAniSirGlobal pMac, tANI_U8 * Category : 1 byte Action : 1 byte Transaction ID : 2 bytes */ - vos_mem_copy( &transId[0], &pBody[2], 2 ); + vos_mem_copy(&transId[0], &pBody[2], 2); //Send 11w SA query response action frame if (limSendSaQueryResponseFrame(pMac, @@ -2269,7 +2309,8 @@ limProcessActionFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo,tpPESession ps } break; #endif -#if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR) +#if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR) \ + || defined (WLAN_FEATURE_RELIABLE_MCAST) case SIR_MAC_ACTION_VENDOR_SPECIFIC_CATEGORY: { tpSirMacVendorSpecificFrameHdr pVendorSpecific = (tpSirMacVendorSpecificFrameHdr) pActionHdr; @@ -2282,9 +2323,10 @@ limProcessActionFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo,tpPESession ps //Check if it is a vendor specific action frame. if ((eLIM_STA_ROLE == psessionEntry->limSystemRole) && - (VOS_TRUE == palEqualMemory(pMac->hHdd, psessionEntry->selfMacAddr, + (VOS_TRUE == vos_mem_compare(psessionEntry->selfMacAddr, &pHdr->da[0], sizeof(tSirMacAddr))) && - IS_WES_MODE_ENABLED(pMac) && palEqualMemory( pMac->hHdd, pVendorSpecific->Oui, Oui, 3)) + IS_WES_MODE_ENABLED(pMac) && + vos_mem_compare(pVendorSpecific->Oui, Oui, 3)) { PELOGE( limLog( pMac, LOGW, FL("Received Vendor specific action frame, OUI %x %x %x"), pVendorSpecific->Oui[0], pVendorSpecific->Oui[1], pVendorSpecific->Oui[2]);) @@ -2294,6 +2336,57 @@ limProcessActionFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo,tpPESession ps (tANI_U8*)pHdr, frameLen + sizeof(tSirMacMgmtHdr), 0, WDA_GET_RX_CH( pRxPacketInfo ), psessionEntry, 0); } +#if defined (WLAN_FEATURE_RELIABLE_MCAST) + else if ((eLIM_STA_IN_IBSS_ROLE == psessionEntry->limSystemRole) && + ((VOS_TRUE == vos_mem_compare(SIR_MAC_RMC_MCAST_ADDRESS, + &pHdr->da[0], sizeof(tSirMacAddr))) || + (VOS_TRUE == vos_mem_compare(psessionEntry->selfMacAddr, + &pHdr->da[0], sizeof(tSirMacAddr)))) && + vos_mem_compare(pVendorSpecific->Oui, SIR_MAC_RMC_OUI, 3)) + { + tANI_U8 MagicCode[] = + { 0x4f, 0x58, 0x59, 0x47, 0x45, 0x4e }; /* "OXYGEN" */ + tpSirMacOxygenNetworkFrameHdr pOxygenHdr = + (tpSirMacOxygenNetworkFrameHdr) pActionHdr; + + if (vos_mem_compare(pOxygenHdr->MagicCode, + MagicCode, sizeof(MagicCode)) && + pOxygenHdr->version == SIR_MAC_RMC_VER ) + { + switch (pOxygenHdr->actionID) + { + default: + PELOGE(limLog(pMac, LOGE, + FL("Action RMC actionID %d not handled"), + pOxygenHdr->actionID);) + break; + case SIR_MAC_RMC_LEADER_INFORM_SELECTED: + PELOG1(limLog(pMac, LOG1, + FL("Action RMC LEADER_INFORM_SELECTED."));) + limProcessRMCMessages(pMac, + eLIM_RMC_OTA_LEADER_INFORM_SELECTED, + (tANI_U32 *)pRxPacketInfo); + break; + case SIR_MAC_RMC_LEADER_INFORM_CANCELLED: + PELOG1(limLog(pMac, LOG1, + FL("Action RMC LEADER_INFORM_CANCELLED."));) + limProcessRMCMessages(pMac, + eLIM_RMC_OTA_LEADER_INFORM_CANCELLED, + (tANI_U32 *)pRxPacketInfo); + break; + } + } + else + { + limLog( pMac, LOGE, + FL("Dropping the vendor specific action frame in IBSS " + "mode because of Oxygen Magic mismatch " + MAC_ADDRESS_STR " or Version mismatch = %d"), + MAC_ADDR_ARRAY(pOxygenHdr->MagicCode), + pOxygenHdr->version ); + } + } +#endif /* WLAN_FEATURE_RELIABLE_MCAST */ else { limLog( pMac, LOGE, FL("Dropping the vendor specific action frame because of( " @@ -2306,7 +2399,8 @@ limProcessActionFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo,tpPESession ps } } break; -#endif +#endif /* WLAN_FEATURE_VOWIFI_11R || FEATURE_WLAN_CCX || + FEATURE_WLAN_LFR || WLAN_FEATURE_RELIABLE_MCAST */ case SIR_MAC_ACTION_PUBLIC_USAGE: switch(pActionHdr->actionID) { case SIR_MAC_ACTION_VENDOR_SPECIFIC: @@ -2320,7 +2414,7 @@ limProcessActionFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo,tpPESession ps frameLen = WDA_GET_RX_PAYLOAD_LEN(pRxPacketInfo); //Check if it is a P2P public action frame. - if( palEqualMemory( pMac->hHdd, pPubAction->Oui, P2POui, 4 ) ) + if (vos_mem_compare(pPubAction->Oui, P2POui, 4)) { /* Forward to the SME to HDD to wpa_supplicant */ // type is ACTION @@ -2457,7 +2551,7 @@ limProcessActionFrameNoSession(tpAniSirGlobal pMac, tANI_U8 *pBd) frameLen = WDA_GET_RX_PAYLOAD_LEN(pBd); //Check if it is a P2P public action frame. - if( palEqualMemory( pMac->hHdd, pActionHdr->Oui, P2POui, 4 ) ) + if (vos_mem_compare(pActionHdr->Oui, P2POui, 4)) { /* Forward to the SME to HDD to wpa_supplicant */ // type is ACTION diff --git a/CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c b/CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c index aedfe6923bd9..711e3c8b64ae 100644 --- a/CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c +++ b/CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c @@ -190,6 +190,7 @@ limProcessAssocReqFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tANI_U8 *wpsIe = NULL; tSirMacRateSet basicRates; tANI_U8 i = 0, j = 0; + tANI_BOOLEAN pmfConnection = eANI_BOOLEAN_FALSE; limGetPhyMode(pMac, &phyMode, psessionEntry); @@ -227,7 +228,7 @@ limProcessAssocReqFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, sirDumpBuf(pMac, SIR_LIM_MODULE_ID, LOG2, (tANI_U8 *) pBody, framelen); - if( palEqualMemory( pMac->hHdd, (tANI_U8* ) pHdr->sa, (tANI_U8 *) pHdr->da, + if (vos_mem_compare((tANI_U8* ) pHdr->sa, (tANI_U8 *) pHdr->da, (tANI_U8) (sizeof(tSirMacAddr)))) { limSendAssocRspMgmtFrame(pMac, @@ -251,12 +252,13 @@ limProcessAssocReqFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, } // Allocate memory for the Assoc Request frame - if ( palAllocateMemory(pMac->hHdd, (void **)&pAssocReq, sizeof(*pAssocReq)) != eHAL_STATUS_SUCCESS) + pAssocReq = vos_mem_malloc(sizeof(*pAssocReq)); + if (NULL == pAssocReq) { - limLog(pMac, LOGP, FL("PAL Allocate Memory failed in AssocReq")); + limLog(pMac, LOGP, FL("Allocate Memory failed in AssocReq")); return; } - palZeroMemory( pMac->hHdd, (void *)pAssocReq , sizeof(*pAssocReq)); + vos_mem_set((void *)pAssocReq , sizeof(*pAssocReq), 0); // Parse Assoc Request frame if (subType == LIM_ASSOC) @@ -272,13 +274,14 @@ limProcessAssocReqFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, goto error; } - if ( palAllocateMemory(pMac->hHdd, (void **)&pAssocReq->assocReqFrame, framelen) != eHAL_STATUS_SUCCESS) + pAssocReq->assocReqFrame = vos_mem_malloc(framelen); + if ( NULL == pAssocReq->assocReqFrame ) { limLog(pMac, LOGE, FL("Unable to allocate memory for the assoc req, length=%d from "),framelen); goto error; } - palCopyMemory( pMac->hHdd, (tANI_U8 *) pAssocReq->assocReqFrame, + vos_mem_copy((tANI_U8 *) pAssocReq->assocReqFrame, (tANI_U8 *) pBody, framelen); pAssocReq->assocReqFrameLength = framelen; @@ -305,7 +308,7 @@ limProcessAssocReqFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, pHdr->sa, subType, 0,psessionEntry); - limLog(pMac, LOGW, FL("local caps 0x%x received 0x%x"), localCapabilities, pAssocReq->capabilityInfo); + limLog(pMac, LOGW, FL("local caps mismatch received caps")); // Log error if (subType == LIM_ASSOC) @@ -622,8 +625,8 @@ limProcessAssocReqFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, } // End if on HT caps turned on in lim. /* Clear the buffers so that frame parser knows that there isn't a previously decoded IE in these buffers */ - palZeroMemory( pMac->hHdd, ( tANI_U8* )&Dot11fIERSN, sizeof( Dot11fIERSN ) ); - palZeroMemory( pMac->hHdd, ( tANI_U8* )&Dot11fIEWPA, sizeof( Dot11fIEWPA ) ); + vos_mem_set((tANI_U8*)&Dot11fIERSN, sizeof( Dot11fIERSN ), 0); + vos_mem_set((tANI_U8*)&Dot11fIEWPA, sizeof( Dot11fIEWPA ), 0); /* if additional IE is present, check if it has WscIE */ if( pAssocReq->addIEPresent && pAssocReq->addIE.length ) @@ -637,8 +640,8 @@ limProcessAssocReqFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, && psessionEntry->pLimStartBssReq->rsnIE.length) { limLog(pMac, LOGE, - FL("AP supports RSN enabled authentication")); - + FL("RSN enabled auth, Re/Assoc req from STA: "MAC_ADDRESS_STR), + MAC_ADDR_ARRAY(pHdr->sa)); if(pAssocReq->rsnPresent) { if(pAssocReq->rsn.length) @@ -653,7 +656,8 @@ limProcessAssocReqFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, if(SIR_MAC_OUI_VERSION_1 == Dot11fIERSN.version) { /* check the groupwise and pairwise cipher suites */ - if(eSIR_SUCCESS != (status = limCheckRxRSNIeMatch(pMac, Dot11fIERSN, psessionEntry, pAssocReq->HTCaps.present) ) ) + if(eSIR_SUCCESS != (status = limCheckRxRSNIeMatch(pMac, Dot11fIERSN, psessionEntry, + pAssocReq->HTCaps.present, &pmfConnection))) { /* some IE is not properly sent */ /* received Association req frame with RSN IE but length is 0 */ @@ -845,35 +849,46 @@ limProcessAssocReqFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, goto error; } // if (pStaDs->mlmStaContext.mlmState != eLIM_MLM_LINK_ESTABLISHED_STATE) - /** - * STA sent Re/Association Request frame while already in - * 'associated' state. Update STA capabilities and - * send Association response frame with same AID - */ - - pStaDs->mlmStaContext.capabilityInfo = pAssocReq->capabilityInfo; - - if (pStaPreAuthContext && - (pStaPreAuthContext->mlmState == - eLIM_MLM_AUTHENTICATED_STATE)) + /* STA sent association Request frame while already in + * 'associated' state and no change in the capability + * so drop the frame */ + if ((VOS_TRUE == vos_mem_compare(&pStaDs->mlmStaContext.capabilityInfo, + &pAssocReq->capabilityInfo, + sizeof(tSirMacCapabilityInfo)))&& + (subType == LIM_ASSOC)) { - /// STA has triggered pre-auth again - authType = pStaPreAuthContext->authType; - limDeletePreAuthNode(pMac, pHdr->sa); + limLog(pMac, LOGE, FL(" Received Assoc req in state %X STAid=%d"), + pStaDs->mlmStaContext.mlmState,peerIdx); + goto error; } else - authType = pStaDs->mlmStaContext.authType; - - updateContext = true; - - if (dphInitStaState(pMac, pHdr->sa, peerIdx, true, &psessionEntry->dph.dphHashTable) == NULL) { - limLog(pMac, LOGE, FL("could not Init STAid=%d"), peerIdx); - goto error; - } - + /** + * STA sent Re/association Request frame while already in + * 'associated' state. Update STA capabilities and + * send Association response frame with same AID + */ + pStaDs->mlmStaContext.capabilityInfo = pAssocReq->capabilityInfo; + if (pStaPreAuthContext && + (pStaPreAuthContext->mlmState == + eLIM_MLM_AUTHENTICATED_STATE)) + { + /// STA has triggered pre-auth again + authType = pStaPreAuthContext->authType; + limDeletePreAuthNode(pMac, pHdr->sa); + } + else + authType = pStaDs->mlmStaContext.authType; - goto sendIndToSme; + updateContext = true; + if (dphInitStaState(pMac, pHdr->sa, peerIdx, true, &psessionEntry->dph.dphHashTable) + == NULL) + { + limLog(pMac, LOGE, FL("could not Init STAid=%d"), peerIdx); + goto error; + } + } + goto sendIndToSme; } // end if (lookup for STA in perStaDs fails) @@ -1118,13 +1133,12 @@ if (limPopulateMatchingRateSet(pMac, subType, true, authType, peerIdx, true, (tSirResultCodes) eSIR_MAC_UNSPEC_FAILURE_STATUS, psessionEntry); - /*return it from here rather than goto error statement.This is done as the memory is getting free twice*/ - return; - //goto error; + pAssocReq = psessionEntry->parsedAssocReq[pStaDs->assocId]; + goto error; } - palCopyMemory( pMac->hHdd, (tANI_U8 *) &pStaDs->mlmStaContext.propRateSet, - (tANI_U8 *) &(pAssocReq->propIEinfo.propRates), + vos_mem_copy((tANI_U8 *) &pStaDs->mlmStaContext.propRateSet, + (tANI_U8 *) &(pAssocReq->propIEinfo.propRates), pAssocReq->propIEinfo.propRates.numPropRates + 1); /// Add STA context at MAC HW (BMU, RHP & TFP) @@ -1163,14 +1177,21 @@ if (limPopulateMatchingRateSet(pMac, * STA when UPASD is not supported. */ limLog( pMac, LOGE, FL( "AP do not support UPASD REASSOC Failed" )); + /* During wlan fuzz tests for softAP when mal-formed assoc req is + * sent to AP due to delSTA is not done in firmnware UMAC is + * stuck in some bad state.if we set this flag delsta will happen + * and UMAC will recover*/ + if (updateContext) + { + pStaDs->mlmStaContext.updateContext = 1; + } limRejectAssociation(pMac, pHdr->sa, subType, true, authType, peerIdx, true, (tSirResultCodes) eSIR_MAC_WME_REFUSED_STATUS, psessionEntry); - /*return it from here rather than goto error statement.This is done as the memory is getting free twice in this uapsd scenario*/ - return; - //goto error; + pAssocReq = psessionEntry->parsedAssocReq[pStaDs->assocId]; + goto error; } else { @@ -1194,6 +1215,10 @@ if (limPopulateMatchingRateSet(pMac, if (pAssocReq->propIEinfo.aniIndicator) pStaDs->aniPeer = 1; +#ifdef WLAN_FEATURE_11W + pStaDs->rmfEnabled = (pmfConnection) ? 1 : 0; +#endif + // BTAMP: Storing the parsed assoc request in the psessionEntry array psessionEntry->parsedAssocReq[pStaDs->assocId] = pAssocReq; @@ -1219,9 +1244,8 @@ if (limPopulateMatchingRateSet(pMac, true, pStaDs->mlmStaContext.authType, pStaDs->assocId, true, (tSirResultCodes) eSIR_MAC_UNSPEC_FAILURE_STATUS, psessionEntry); - /*return it from here rather than goto error statement.This is done as the memory is getting free twice*/ - return; - //goto error; + pAssocReq = psessionEntry->parsedAssocReq[pStaDs->assocId]; + goto error; } } else @@ -1243,6 +1267,7 @@ if (limPopulateMatchingRateSet(pMac, //Restoring the state back. pStaDs->mlmStaContext.mlmState = mlmPrevState; + pAssocReq = psessionEntry->parsedAssocReq[pStaDs->assocId]; goto error; } } @@ -1258,6 +1283,7 @@ if (limPopulateMatchingRateSet(pMac, //Restoring the state back. pStaDs->mlmStaContext.mlmState = mlmPrevState; + pAssocReq = psessionEntry->parsedAssocReq[pStaDs->assocId]; goto error; } @@ -1272,15 +1298,11 @@ error: { if ( pAssocReq->assocReqFrame ) { - palFreeMemory(pMac->hHdd, pAssocReq->assocReqFrame); + vos_mem_free(pAssocReq->assocReqFrame); pAssocReq->assocReqFrame = NULL; } - if (palFreeMemory(pMac->hHdd, pAssocReq) != eHAL_STATUS_SUCCESS) - { - limLog(pMac, LOGP, FL("PalFree Memory failed ")); - return; - } + vos_mem_free(pAssocReq); } /* If it is not duplicate Assoc request then only make to Null */ @@ -1342,18 +1364,21 @@ void limSendMlmAssocInd(tpAniSirGlobal pMac, tpDphHashNode pStaDs, tpPESession p { temp = sizeof(tLimMlmAssocInd); - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pMlmAssocInd, temp)) + pMlmAssocInd = vos_mem_malloc(temp); + if (NULL == pMlmAssocInd) { limReleasePeerIdx(pMac, pStaDs->assocId, psessionEntry); - limLog(pMac, LOGP, FL("palAllocateMemory failed for pMlmAssocInd")); + limLog(pMac, LOGP, FL("AllocateMemory failed for pMlmAssocInd")); return; } - palZeroMemory( pMac->hHdd, pMlmAssocInd, temp); + vos_mem_set(pMlmAssocInd, temp ,0); - palCopyMemory( pMac->hHdd,(tANI_U8 *)pMlmAssocInd->peerMacAddr,(tANI_U8 *)pStaDs->staAddr,sizeof(tSirMacAddr)); + vos_mem_copy((tANI_U8 *)pMlmAssocInd->peerMacAddr, + (tANI_U8 *)pStaDs->staAddr, sizeof(tSirMacAddr)); pMlmAssocInd->aid = pStaDs->assocId; - palCopyMemory( pMac->hHdd, (tANI_U8 *)&pMlmAssocInd->ssId,(tANI_U8 *)&(pAssocReq->ssId), pAssocReq->ssId.length + 1); + vos_mem_copy((tANI_U8 *)&pMlmAssocInd->ssId, + (tANI_U8 *)&(pAssocReq->ssId), pAssocReq->ssId.length + 1); pMlmAssocInd->sessionId = psessionEntry->peSessionId; pMlmAssocInd->authType = pStaDs->mlmStaContext.authType; @@ -1371,10 +1396,9 @@ void limSendMlmAssocInd(tpAniSirGlobal pMac, tpDphHashNode pStaDs, tpPESession p pMlmAssocInd->rsnIE.length = 2 + pAssocReq->rsn.length; pMlmAssocInd->rsnIE.rsnIEdata[0] = SIR_MAC_RSN_EID; pMlmAssocInd->rsnIE.rsnIEdata[1] = pAssocReq->rsn.length; - palCopyMemory( pMac->hHdd, - &pMlmAssocInd->rsnIE.rsnIEdata[2], - pAssocReq->rsn.info, - pAssocReq->rsn.length); + vos_mem_copy(&pMlmAssocInd->rsnIE.rsnIEdata[2], + pAssocReq->rsn.info, + pAssocReq->rsn.length); } // Fill in 802.11h related info @@ -1395,15 +1419,14 @@ void limSendMlmAssocInd(tpAniSirGlobal pMac, tpDphHashNode pStaDs, tpPESession p if((pMlmAssocInd->rsnIE.length + pAssocReq->wpa.length) >= SIR_MAC_MAX_IE_LENGTH) { PELOGE(limLog(pMac, LOGE, FL("rsnIEdata index out of bounds %d"), pMlmAssocInd->rsnIE.length);) - palFreeMemory(pMac->hHdd, pMlmAssocInd); + vos_mem_free(pMlmAssocInd); return; } pMlmAssocInd->rsnIE.rsnIEdata[pMlmAssocInd->rsnIE.length] = SIR_MAC_WPA_EID; pMlmAssocInd->rsnIE.rsnIEdata[pMlmAssocInd->rsnIE.length + 1] = pAssocReq->wpa.length; - palCopyMemory( pMac->hHdd, - &pMlmAssocInd->rsnIE.rsnIEdata[pMlmAssocInd->rsnIE.length + 2], - pAssocReq->wpa.info, - pAssocReq->wpa.length); + vos_mem_copy(&pMlmAssocInd->rsnIE.rsnIEdata[pMlmAssocInd->rsnIE.length + 2], + pAssocReq->wpa.info, + pAssocReq->wpa.length); pMlmAssocInd->rsnIE.length += 2 + pAssocReq->wpa.length; } @@ -1411,10 +1434,9 @@ void limSendMlmAssocInd(tpAniSirGlobal pMac, tpDphHashNode pStaDs, tpPESession p pMlmAssocInd->addIE.length = 0; if (pAssocReq->addIEPresent) { - palCopyMemory( pMac->hHdd, - &pMlmAssocInd->addIE.addIEdata, - pAssocReq->addIE.addIEdata, - pAssocReq->addIE.length); + vos_mem_copy(&pMlmAssocInd->addIE.addIEdata, + pAssocReq->addIE.addIEdata, + pAssocReq->addIE.length); pMlmAssocInd->addIE.length = pAssocReq->addIE.length; } @@ -1446,26 +1468,30 @@ void limSendMlmAssocInd(tpAniSirGlobal pMac, tpDphHashNode pStaDs, tpPESession p pMlmAssocInd->beaconLength = psessionEntry->bcnLen; limPostSmeMessage(pMac, LIM_MLM_ASSOC_IND, (tANI_U32 *) pMlmAssocInd); - palFreeMemory( pMac->hHdd, pMlmAssocInd); + vos_mem_free(pMlmAssocInd); } else { // If its of Reassociation Request, then post LIM_MLM_REASSOC_IND temp = sizeof(tLimMlmReassocInd); - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pMlmReassocInd, temp)) + pMlmReassocInd = vos_mem_malloc(temp); + if (NULL == pMlmReassocInd) { - limLog(pMac, LOGP, FL("call to palAllocateMemory failed for pMlmReassocInd")); + limLog(pMac, LOGP, FL("call to AllocateMemory failed for pMlmReassocInd")); limReleasePeerIdx(pMac, pStaDs->assocId, psessionEntry); return; } - palZeroMemory( pMac->hHdd, pMlmReassocInd, temp); + vos_mem_set(pMlmReassocInd, temp, 0); - palCopyMemory( pMac->hHdd,(tANI_U8 *) pMlmReassocInd->peerMacAddr, (tANI_U8 *)pStaDs->staAddr, sizeof(tSirMacAddr)); - palCopyMemory( pMac->hHdd,(tANI_U8 *) pMlmReassocInd->currentApAddr, (tANI_U8 *)&(pAssocReq->currentApAddr), sizeof(tSirMacAddr)); + vos_mem_copy((tANI_U8 *) pMlmReassocInd->peerMacAddr, + (tANI_U8 *)pStaDs->staAddr, sizeof(tSirMacAddr)); + vos_mem_copy((tANI_U8 *) pMlmReassocInd->currentApAddr, + (tANI_U8 *)&(pAssocReq->currentApAddr), sizeof(tSirMacAddr)); pMlmReassocInd->aid = pStaDs->assocId; pMlmReassocInd->authType = pStaDs->mlmStaContext.authType; - palCopyMemory( pMac->hHdd,(tANI_U8 *)&pMlmReassocInd->ssId, (tANI_U8 *)&(pAssocReq->ssId), pAssocReq->ssId.length + 1); + vos_mem_copy((tANI_U8 *)&pMlmReassocInd->ssId, + (tANI_U8 *)&(pAssocReq->ssId), pAssocReq->ssId.length + 1); if (pAssocReq->propIEinfo.aniIndicator) pStaDs->aniPeer = 1; @@ -1482,7 +1508,8 @@ void limSendMlmAssocInd(tpAniSirGlobal pMac, tpDphHashNode pStaDs, tpPESession p pMlmReassocInd->rsnIE.length = 2 + pAssocReq->rsn.length; pMlmReassocInd->rsnIE.rsnIEdata[0] = SIR_MAC_RSN_EID; pMlmReassocInd->rsnIE.rsnIEdata[1] = pAssocReq->rsn.length; - palCopyMemory( pMac->hHdd, &pMlmReassocInd->rsnIE.rsnIEdata[2], pAssocReq->rsn.info, pAssocReq->rsn.length); + vos_mem_copy(&pMlmReassocInd->rsnIE.rsnIEdata[2], + pAssocReq->rsn.info, pAssocReq->rsn.length); } // 802.11h support @@ -1517,20 +1544,18 @@ void limSendMlmAssocInd(tpAniSirGlobal pMac, tpDphHashNode pStaDs, tpPESession p limLog(pMac, LOG2, FL("Received WPA IE length in Assoc Req is %d"), pAssocReq->wpa.length); pMlmReassocInd->rsnIE.rsnIEdata[pMlmReassocInd->rsnIE.length] = SIR_MAC_WPA_EID; pMlmReassocInd->rsnIE.rsnIEdata[pMlmReassocInd->rsnIE.length + 1] = pAssocReq->wpa.length; - palCopyMemory( pMac->hHdd, - &pMlmReassocInd->rsnIE.rsnIEdata[pMlmReassocInd->rsnIE.length + 2], - pAssocReq->wpa.info, - pAssocReq->wpa.length); + vos_mem_copy(&pMlmReassocInd->rsnIE.rsnIEdata[pMlmReassocInd->rsnIE.length + 2], + pAssocReq->wpa.info, + pAssocReq->wpa.length); pMlmReassocInd->rsnIE.length += 2 + pAssocReq->wpa.length; } pMlmReassocInd->addIE.length = 0; if (pAssocReq->addIEPresent) { - palCopyMemory( pMac->hHdd, - &pMlmReassocInd->addIE.addIEdata, - pAssocReq->addIE.addIEdata, - pAssocReq->addIE.length); + vos_mem_copy(&pMlmReassocInd->addIE.addIEdata, + pAssocReq->addIE.addIEdata, + pAssocReq->addIE.length); pMlmReassocInd->addIE.length = pAssocReq->addIE.length; } @@ -1562,7 +1587,7 @@ void limSendMlmAssocInd(tpAniSirGlobal pMac, tpDphHashNode pStaDs, tpPESession p pMlmReassocInd->beaconLength = psessionEntry->bcnLen; limPostSmeMessage(pMac, LIM_MLM_REASSOC_IND, (tANI_U32 *) pMlmReassocInd); - palFreeMemory( pMac->hHdd, pMlmReassocInd); + vos_mem_free(pMlmReassocInd); } return; diff --git a/CORE/MAC/src/pe/lim/limProcessAssocRspFrame.c b/CORE/MAC/src/pe/lim/limProcessAssocRspFrame.c index 5197df933cbc..253693ad8475 100644 --- a/CORE/MAC/src/pe/lim/limProcessAssocRspFrame.c +++ b/CORE/MAC/src/pe/lim/limProcessAssocRspFrame.c @@ -26,7 +26,6 @@ */ /* - * * Airgo Networks, Inc proprietary. All rights reserved. * This file limProcessAssocRspFrame.cc contains the code * for processing Re/Association Response Frame. @@ -53,7 +52,7 @@ #include "limStaHashApi.h" #include "limSendMessages.h" -#ifdef FEATURE_WLAN_CCX +#if defined(FEATURE_WLAN_CCX) && !defined(FEATURE_WLAN_CCX_UPLOAD) #include "ccxApi.h" #endif @@ -153,11 +152,11 @@ void limUpdateAssocStaDatas(tpAniSirGlobal pMac, tpDphHashNode pStaDs, tpSirAsso pStaDs->htMaxRxAMpduFactor = pAssocRsp->VHTCaps.maxAMPDULenExp; } - if (limPopulateOwnRateSet(pMac, &pStaDs->supportedRates, + if (limPopulatePeerRateSet(pMac, &pStaDs->supportedRates, pAssocRsp->HTCaps.supportedMCSSet, - false,psessionEntry , &pAssocRsp->VHTCaps) != eSIR_SUCCESS) + false,psessionEntry , &pAssocRsp->VHTCaps) != eSIR_SUCCESS) #else - if (limPopulateOwnRateSet(pMac, &pStaDs->supportedRates, pAssocRsp->HTCaps.supportedMCSSet, false,psessionEntry) != eSIR_SUCCESS) + if (limPopulatePeerRateSet(pMac, &pStaDs->supportedRates, pAssocRsp->HTCaps.supportedMCSSet, false,psessionEntry) != eSIR_SUCCESS) #endif { limLog(pMac, LOGP, FL("could not get rateset and extended rate set")); @@ -262,8 +261,8 @@ void limUpdateReAssocGlobals(tpAniSirGlobal pMac, tpSirAssocRsp pAssocRsp,tpPESe pmmResetPmmState(pMac); // Update the current Bss Information - palCopyMemory( pMac->hHdd, psessionEntry->bssId, - psessionEntry->limReAssocbssId, sizeof(tSirMacAddr)); + vos_mem_copy(psessionEntry->bssId, + psessionEntry->limReAssocbssId, sizeof(tSirMacAddr)); psessionEntry->currentOperChannel = psessionEntry->limReassocChannelId; psessionEntry->htSecondaryChannelOffset = psessionEntry->reAssocHtSupportedChannelWidthSet; psessionEntry->htRecommendedTxWidthSet = psessionEntry->reAssocHtRecommendedTxWidthSet; @@ -272,8 +271,8 @@ void limUpdateReAssocGlobals(tpAniSirGlobal pMac, tpSirAssocRsp pAssocRsp,tpPESe psessionEntry->limCurrentBssQosCaps = psessionEntry->limReassocBssQosCaps; psessionEntry->limCurrentBssPropCap = psessionEntry->limReassocBssPropCap; - palCopyMemory( pMac->hHdd, (tANI_U8 *) &psessionEntry->ssId, - (tANI_U8 *) &psessionEntry->limReassocSSID, + vos_mem_copy((tANI_U8 *) &psessionEntry->ssId, + (tANI_U8 *) &psessionEntry->limReassocSSID, psessionEntry->limReassocSSID.length+1); // Store assigned AID for TIM processing @@ -328,10 +327,10 @@ limProcessAssocRspFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tANI_U8 sub /* Update PE session Id*/ mlmAssocCnf.sessionId = psessionEntry->peSessionId; - if(eHAL_STATUS_SUCCESS != palAllocateMemory(pMac->hHdd, - (void **)&pBeaconStruct, sizeof(tSchBeaconStruct))) + pBeaconStruct = vos_mem_malloc(sizeof(tSchBeaconStruct)); + if (NULL == pBeaconStruct) { - limLog(pMac, LOGE, FL("Unable to PAL allocate memory in limProcessAssocRspFrame") ); + limLog(pMac, LOGE, FL("Unable to allocate memory in limProcessAssocRspFrame") ); return; } @@ -344,7 +343,7 @@ limProcessAssocRspFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tANI_U8 sub FL("received Re/Assoc response frame on role %d "), psessionEntry->limSystemRole); - palFreeMemory(pMac->hHdd, pBeaconStruct); + vos_mem_free(pBeaconStruct); return; } @@ -374,7 +373,7 @@ limProcessAssocRspFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tANI_U8 sub FL("received Re/Assoc rsp frame in unexpected state")); limPrintMlmState(pMac, LOGE, psessionEntry->limMlmState); } - palFreeMemory(pMac->hHdd, pBeaconStruct); + vos_mem_free(pBeaconStruct); return; } #if 0 @@ -383,7 +382,7 @@ limProcessAssocRspFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tANI_U8 sub { /// Could not get BSSID from CFG. Log error. limLog(pMac, LOGP, FL("could not retrieve BSSID")); - palFreeMemory(pMac->hHdd, pBeaconStruct); + vos_mem_free(pBeaconStruct); return; } #endif //TO SUPPORT BT-AMP @@ -391,7 +390,7 @@ limProcessAssocRspFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tANI_U8 sub if (subType == LIM_ASSOC) { - if (!palEqualMemory( pMac->hHdd,pHdr->sa, currentBssId, sizeof(tSirMacAddr)) ) + if (!vos_mem_compare(pHdr->sa, currentBssId, sizeof(tSirMacAddr))) { /** * Received Association Response frame from an entity @@ -403,13 +402,13 @@ limProcessAssocRspFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tANI_U8 sub PELOGW(limLog(pMac, LOGW, FL("received AssocRsp frame from unexpected peer "MAC_ADDRESS_STR), MAC_ADDR_ARRAY(pHdr->sa));) - palFreeMemory(pMac->hHdd, pBeaconStruct); + vos_mem_free(pBeaconStruct); return; } } else { - if ( !palEqualMemory( pMac->hHdd,pHdr->sa, psessionEntry->limReAssocbssId, sizeof(tSirMacAddr)) ) + if (!vos_mem_compare(pHdr->sa, psessionEntry->limReAssocbssId, sizeof(tSirMacAddr))) { /** * Received Reassociation Response frame from an entity @@ -421,23 +420,24 @@ limProcessAssocRspFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tANI_U8 sub PELOGW(limLog(pMac, LOGW, FL("received ReassocRsp frame from unexpected peer "MAC_ADDRESS_STR), MAC_ADDR_ARRAY(pHdr->sa));) - palFreeMemory(pMac->hHdd, pBeaconStruct); + vos_mem_free(pBeaconStruct); return; } } - if ( palAllocateMemory(pMac->hHdd, (void **)&pAssocRsp, sizeof(*pAssocRsp)) != eHAL_STATUS_SUCCESS) { - limLog(pMac, LOGP, FL("Pal Allocate Memory failed in AssocRsp")); - palFreeMemory(pMac->hHdd, pBeaconStruct); + pAssocRsp = vos_mem_malloc(sizeof(*pAssocRsp)); + if (NULL == pAssocRsp) + { + limLog(pMac, LOGP, FL("Allocate Memory failed in AssocRsp")); + vos_mem_free(pBeaconStruct); return; } VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_DEBUG, - FL("Assoc Resp Frame Received: BSSID %02x:%02x:%02x:%02x:%02x:%02x (Rssi %d)"), - pHdr->bssId[0], pHdr->bssId[1], pHdr->bssId[2], - pHdr->bssId[3], pHdr->bssId[4], pHdr->bssId[5], + FL("Re/Assoc Resp Frame Received: BSSID " MAC_ADDRESS_STR " (RSSI %d)"), + MAC_ADDR_ARRAY(pHdr->bssId), (uint)abs((tANI_S8)WDA_GET_RX_RSSI_DB(pRxPacketInfo))); // Get pointer to Re/Association Response frame body @@ -447,12 +447,9 @@ limProcessAssocRspFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tANI_U8 sub if (sirConvertAssocRespFrame2Struct( pMac, pBody, frameLen, pAssocRsp) == eSIR_FAILURE) { - if (palFreeMemory(pMac->hHdd, pAssocRsp) != eHAL_STATUS_SUCCESS) - { - limLog(pMac, LOGP, FL("PalFree Memory failed ")); - } + vos_mem_free(pAssocRsp); PELOGE(limLog(pMac, LOGE, FL("Parse error Assoc resp subtype %d, length=%d"), frameLen,subType);) - palFreeMemory(pMac->hHdd, pBeaconStruct); + vos_mem_free(pBeaconStruct); return; } @@ -460,7 +457,7 @@ limProcessAssocRspFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tANI_U8 sub if(!pAssocRsp->suppRatesPresent) { PELOGE(limLog(pMac, LOGW, FL("assoc response does not have supported rate set"));) - palCopyMemory(pMac->hHdd, &pAssocRsp->supportedRates, + vos_mem_copy(&pAssocRsp->supportedRates, &psessionEntry->rateSet, sizeof(tSirMacRateSet)); } @@ -468,37 +465,41 @@ limProcessAssocRspFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tANI_U8 sub if( psessionEntry->assocRsp != NULL ) { - palFreeMemory(pMac->hHdd, psessionEntry->assocRsp); + vos_mem_free(psessionEntry->assocRsp); psessionEntry->assocRsp = NULL; } - if( (palAllocateMemory(pMac->hHdd, (void**)&psessionEntry->assocRsp, frameLen)) != eHAL_STATUS_SUCCESS) + + psessionEntry->assocRsp = vos_mem_malloc(frameLen); + if (NULL == psessionEntry->assocRsp) { PELOGE(limLog(pMac, LOGE, FL("Unable to allocate memory to store assoc response, len = %d"), frameLen);) } else { //Store the Assoc response. This is sent to csr/hdd in join cnf response. - palCopyMemory(pMac->hHdd, psessionEntry->assocRsp, pBody, frameLen); + vos_mem_copy(psessionEntry->assocRsp, pBody, frameLen); psessionEntry->assocRspLen = frameLen; } #ifdef WLAN_FEATURE_VOWIFI_11R if (psessionEntry->ricData != NULL) { - palFreeMemory(pMac->hHdd, psessionEntry->ricData); + vos_mem_free(psessionEntry->ricData); psessionEntry->ricData = NULL; } if(pAssocRsp->ricPresent) { psessionEntry->RICDataLen = pAssocRsp->num_RICData * sizeof(tDot11fIERICDataDesc); - if( (palAllocateMemory(pMac->hHdd, (void**)&psessionEntry->ricData, psessionEntry->RICDataLen)) != eHAL_STATUS_SUCCESS) + psessionEntry->ricData = vos_mem_malloc(psessionEntry->RICDataLen); + if ( NULL == psessionEntry->ricData ) { PELOGE(limLog(pMac, LOGE, FL("Unable to allocate memory to store assoc response"));) psessionEntry->RICDataLen = 0; } else { - palCopyMemory(pMac->hHdd, psessionEntry->ricData, &pAssocRsp->RICData[0], psessionEntry->RICDataLen); + vos_mem_copy(psessionEntry->ricData, + &pAssocRsp->RICData[0], psessionEntry->RICDataLen); } } else @@ -511,20 +512,22 @@ limProcessAssocRspFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tANI_U8 sub #ifdef FEATURE_WLAN_CCX if (psessionEntry->tspecIes != NULL) { - palFreeMemory(pMac->hHdd, psessionEntry->tspecIes); + vos_mem_free(psessionEntry->tspecIes); psessionEntry->tspecIes = NULL; } if(pAssocRsp->tspecPresent) { psessionEntry->tspecLen = pAssocRsp->num_tspecs * sizeof(tDot11fIEWMMTSPEC); - if( (palAllocateMemory(pMac->hHdd, (void**)&psessionEntry->tspecIes, psessionEntry->tspecLen)) != eHAL_STATUS_SUCCESS) + psessionEntry->tspecIes = vos_mem_malloc(psessionEntry->tspecLen); + if ( NULL == psessionEntry->tspecIes ) { PELOGE(limLog(pMac, LOGE, FL("Unable to allocate memory to store assoc response"));) psessionEntry->tspecLen = 0; } else { - palCopyMemory(pMac->hHdd, psessionEntry->tspecIes, &pAssocRsp->TSPECInfo[0], psessionEntry->tspecLen); + vos_mem_copy(psessionEntry->tspecIes, + &pAssocRsp->TSPECInfo[0], psessionEntry->tspecLen); } PELOG1(limLog(pMac, LOG1, FL(" Tspec EID present in assoc rsp "));) } @@ -548,8 +551,8 @@ limProcessAssocRspFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tANI_U8 sub // Log error limLog(pMac, LOGE, FL("received Re/AssocRsp frame with IBSS capability")); - palFreeMemory(pMac->hHdd, pAssocRsp); - palFreeMemory(pMac->hHdd, pBeaconStruct); + vos_mem_free(pAssocRsp); + vos_mem_free(pBeaconStruct); return; } @@ -560,8 +563,8 @@ limProcessAssocRspFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tANI_U8 sub * Could not get Capabilities value * from CFG. Log error. */ - palFreeMemory(pMac->hHdd, pAssocRsp); - palFreeMemory(pMac->hHdd, pBeaconStruct); + vos_mem_free(pAssocRsp); + vos_mem_free(pBeaconStruct); limLog(pMac, LOGP, FL("could not retrieve Capabilities value")); return; @@ -576,7 +579,7 @@ limProcessAssocRspFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tANI_U8 sub pMac->lim.reAssocRetryAttempt = 0; if ((NULL != pMac->lim.pSessionEntry) && (NULL != pMac->lim.pSessionEntry->pLimMlmReassocRetryReq)) { - palFreeMemory( pMac->hHdd, pMac->lim.pSessionEntry->pLimMlmReassocRetryReq); + vos_mem_free(pMac->lim.pSessionEntry->pLimMlmReassocRetryReq); pMac->lim.pSessionEntry->pLimMlmReassocRetryReq = NULL; } #endif @@ -597,8 +600,8 @@ limProcessAssocRspFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tANI_U8 sub if (pAssocRsp->propIEinfo.loadBalanceInfoPresent) { mlmAssocCnf.resultCode = eSIR_SME_TRANSFER_STA; - palCopyMemory( pMac->hHdd, pMac->lim.gLimAlternateRadio.bssId, - pAssocRsp->propIEinfo.alternateRadio.bssId, sizeof(tSirMacAddr)); + vos_mem_copy(pMac->lim.gLimAlternateRadio.bssId, + pAssocRsp->propIEinfo.alternateRadio.bssId, sizeof(tSirMacAddr)); pMac->lim.gLimAlternateRadio.channelId = pAssocRsp->propIEinfo.alternateRadio.channelId; }else @@ -639,8 +642,8 @@ limProcessAssocRspFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tANI_U8 sub psessionEntry->selfMacAddr, NULL, NULL) != eSIR_SUCCESS) { PELOGE(limLog(pMac, LOGE, FL("Set link state to POSTASSOC failed"));) - palFreeMemory(pMac->hHdd, pBeaconStruct); - palFreeMemory(pMac->hHdd, pAssocRsp); + vos_mem_free(pBeaconStruct); + vos_mem_free(pAssocRsp); return; } } @@ -662,7 +665,15 @@ limProcessAssocRspFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tANI_U8 sub psessionEntry->ccxContext.tsm.tid = pAssocRsp->TSPECInfo[cnt].user_priority; vos_mem_copy(&psessionEntry->ccxContext.tsm.tsmInfo, &pAssocRsp->tsmIE, sizeof(tSirMacCCXTSMIE)); +#ifdef FEATURE_WLAN_CCX_UPLOAD + limSendSmeTsmIEInd(pMac, + psessionEntry, + pAssocRsp->tsmIE.tsid, + pAssocRsp->tsmIE.state, + pAssocRsp->tsmIE.msmt_interval); +#else limActivateTSMStatsTimer(pMac, psessionEntry); +#endif /* FEATURE_WLAN_CCX_UPLOAD */ if(psessionEntry->ccxContext.tsm.tsmInfo.state) { psessionEntry->ccxContext.tsm.tsmMetrics.RoamingCount++; } @@ -677,7 +688,7 @@ limProcessAssocRspFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tANI_U8 sub #endif if (psessionEntry->pLimMlmJoinReq) { - palFreeMemory( pMac->hHdd, psessionEntry->pLimMlmJoinReq); + vos_mem_free(psessionEntry->pLimMlmJoinReq); psessionEntry->pLimMlmJoinReq = NULL; } @@ -725,7 +736,7 @@ limProcessAssocRspFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tANI_U8 sub limSendEdcaParams(pMac, psessionEntry->gLimEdcaParamsActive, pStaDs->bssId, eANI_BOOLEAN_FALSE); } limAddFTStaSelf(pMac, (pAssocRsp->aid & 0x3FFF), psessionEntry); - palFreeMemory(pMac->hHdd, pBeaconStruct); + vos_mem_free(pBeaconStruct); return; } @@ -763,7 +774,7 @@ limProcessAssocRspFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tANI_U8 sub if (limCleanupRxPath(pMac, pStaDs,psessionEntry) != eSIR_SUCCESS) goto assocReject; } - palFreeMemory(pMac->hHdd, pBeaconStruct); + vos_mem_free(pBeaconStruct); return; } @@ -799,8 +810,8 @@ limProcessAssocRspFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tANI_U8 sub limPostSmeMessage(pMac, LIM_MLM_ASSOC_CNF, (tANI_U32 *) &mlmAssocCnf); - palFreeMemory(pMac->hHdd, pAssocRsp); - palFreeMemory(pMac->hHdd, pBeaconStruct); + vos_mem_free(pAssocRsp); + vos_mem_free(pBeaconStruct); return; } @@ -826,14 +837,17 @@ limProcessAssocRspFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tANI_U8 sub else psessionEntry->beaconParams.fShortPreamble = true; } +#ifdef FEATURE_WLAN_DIAG_SUPPORT_LIM //FEATURE_WLAN_DIAG_SUPPORT + limDiagEventReport(pMac, WLAN_PE_DIAG_CONNECTED, psessionEntry, 0, 0); +#endif //Update the BSS Entry, this entry was added during preassoc. if( eSIR_SUCCESS == limStaSendAddBss( pMac, pAssocRsp, pBeaconStruct, &psessionEntry->pLimJoinReq->bssDescription, true, psessionEntry)) { - palFreeMemory(pMac->hHdd, pAssocRsp); - palFreeMemory(pMac->hHdd, pBeaconStruct); + vos_mem_free(pAssocRsp); + vos_mem_free(pBeaconStruct); return; } else @@ -856,7 +870,7 @@ assocReject: if (psessionEntry->pLimMlmJoinReq) { - palFreeMemory( pMac->hHdd, psessionEntry->pLimMlmJoinReq); + vos_mem_free(psessionEntry->pLimMlmJoinReq); psessionEntry->pLimMlmJoinReq = NULL; } @@ -880,8 +894,8 @@ assocReject: /* notify TL that association is failed so that TL can flush the cached frame */ WLANTL_AssocFailed (psessionEntry->staId); - palFreeMemory(pMac->hHdd, pBeaconStruct); - palFreeMemory(pMac->hHdd, pAssocRsp); + vos_mem_free(pBeaconStruct); + vos_mem_free(pAssocRsp); return; } /*** end limProcessAssocRspFrame() ***/ diff --git a/CORE/MAC/src/pe/lim/limProcessAuthFrame.c b/CORE/MAC/src/pe/lim/limProcessAuthFrame.c index 2ee8d07d6da1..c51940061c5a 100644 --- a/CORE/MAC/src/pe/lim/limProcessAuthFrame.c +++ b/CORE/MAC/src/pe/lim/limProcessAuthFrame.c @@ -26,7 +26,6 @@ */ /* - * * Airgo Networks, Inc proprietary. All rights reserved. * This file limProcessAuthFrame.cc contains the code * for processing received Authentication Frame. @@ -188,9 +187,8 @@ limProcessAuthFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tpPESession pse } VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_DEBUG, - FL("Auth Frame Received: BSSID %02x:%02x:%02x:%02x:%02x:%02x (Rssi %d)"), - pHdr->bssId[0], pHdr->bssId[1], pHdr->bssId[2], - pHdr->bssId[3], pHdr->bssId[4], pHdr->bssId[5], + FL("Auth Frame Received: BSSID " MAC_ADDRESS_STR " (RSSI %d)"), + MAC_ADDR_ARRAY(pHdr->bssId), (uint)abs((tANI_S8)WDA_GET_RX_RSSI_DB(pRxPacketInfo))); pBody = WDA_GET_RX_MPDU_DATA(pRxPacketInfo); @@ -433,7 +431,7 @@ limProcessAuthFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tpPESession pse { tpSirKeys pKey; pKey = &psessionEntry->WEPKeyMaterial[keyId].key[0]; - palCopyMemory( pMac->hHdd, defaultKey, pKey->key, pKey->keyLength); + vos_mem_copy(defaultKey, pKey->key, pKey->keyLength); val = pKey->keyLength; } else @@ -558,27 +556,30 @@ limProcessAuthFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tpPESession pse tLimMlmDeauthReq *pMlmDeauthReq = NULL; pMlmDisassocReq = pMac->lim.limDisassocDeauthCnfReq.pMlmDisassocReq; if (pMlmDisassocReq && - (palEqualMemory( pMac->hHdd,(tANI_U8 *) pHdr->sa, + (vos_mem_compare((tANI_U8 *) pHdr->sa, (tANI_U8 *) &pMlmDisassocReq->peerMacAddr, - sizeof(tSirMacAddr)))) + sizeof(tSirMacAddr)))) { - PELOGE(limLog(pMac, LOGP, FL("\nTODO:Ack for disassoc frame is pending" - "Issue delsta for %02x:%02x:%02x:%02x:%02x:%02x"), + PELOGE(limLog(pMac, LOGE, FL("\nTODO:Ack for disassoc " + "frame is pending Issue delsta for" + " %02x:%02x:%02x:%02x:%02x:%02x"), pMlmDisassocReq->peerMacAddr[0], pMlmDisassocReq->peerMacAddr[1], pMlmDisassocReq->peerMacAddr[2], pMlmDisassocReq->peerMacAddr[3], pMlmDisassocReq->peerMacAddr[4], pMlmDisassocReq->peerMacAddr[5]);) + limProcessDisassocAckTimeout(pMac); } pMlmDeauthReq = pMac->lim.limDisassocDeauthCnfReq.pMlmDeauthReq; if (pMlmDeauthReq && - (palEqualMemory( pMac->hHdd,(tANI_U8 *) pHdr->sa, + (vos_mem_compare((tANI_U8 *) pHdr->sa, (tANI_U8 *) &pMlmDeauthReq->peerMacAddr, sizeof(tSirMacAddr)))) { - PELOGE(limLog(pMac, LOGP, FL("\nTODO:Ack for disassoc frame is pending" - "Issue delsta for %02x:%02x:%02x:%02x:%02x:%02x"), + PELOGE(limLog(pMac, LOGE, FL("\nTODO:Ack for deauth frame " + "is pending Issue delsta for " + "%02x:%02x:%02x:%02x:%02x:%02x"), pMlmDeauthReq->peerMacAddr[0], pMlmDeauthReq->peerMacAddr[1], pMlmDeauthReq->peerMacAddr[2], @@ -586,6 +587,7 @@ limProcessAuthFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tpPESession pse pMlmDeauthReq->peerMacAddr[4], pMlmDeauthReq->peerMacAddr[5] );) + limProcessDeauthAckTimeout(pMac); } } @@ -627,7 +629,7 @@ limProcessAuthFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tpPESession pse if (pStaDs->valid) { - if (palEqualMemory( pMac->hHdd,(tANI_U8 *) &pStaDs->staAddr, + if (vos_mem_compare((tANI_U8 *) &pStaDs->staAddr, (tANI_U8 *) &(pHdr->sa), (tANI_U8) (sizeof(tSirMacAddr))) ) break; } @@ -708,10 +710,9 @@ limProcessAuthFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tpPESession pse PELOG1(limLog(pMac, LOG1, FL("Alloc new data: %x peer "), pAuthNode); limPrintMacAddr(pMac, pHdr->sa, LOG1);) - palCopyMemory( pMac->hHdd, - (tANI_U8 *) pAuthNode->peerMacAddr, - pHdr->sa, - sizeof(tSirMacAddr)); + vos_mem_copy((tANI_U8 *) pAuthNode->peerMacAddr, + pHdr->sa, + sizeof(tSirMacAddr)); pAuthNode->mlmState = eLIM_MLM_AUTHENTICATED_STATE; @@ -738,8 +739,7 @@ limProcessAuthFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tpPESession pse /// Send Auth indication to SME - palCopyMemory( pMac->hHdd, - (tANI_U8 *) mlmAuthInd.peerMacAddr, + vos_mem_copy((tANI_U8 *) mlmAuthInd.peerMacAddr, (tANI_U8 *) pHdr->sa, sizeof(tSirMacAddr)); mlmAuthInd.authType = (tAniAuthType) @@ -814,10 +814,9 @@ limProcessAuthFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tpPESession pse return; } - palCopyMemory( pMac->hHdd, - (tANI_U8 *) pAuthNode->peerMacAddr, - pHdr->sa, - sizeof(tSirMacAddr)); + vos_mem_copy((tANI_U8 *) pAuthNode->peerMacAddr, + pHdr->sa, + sizeof(tSirMacAddr)); pAuthNode->mlmState = eLIM_MLM_WT_AUTH_FRAME3_STATE; @@ -875,10 +874,9 @@ limProcessAuthFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tpPESession pse pChallenge = pAuthNode->challengeText; - palCopyMemory( pMac->hHdd, - pChallenge, - (tANI_U8 *) challengeTextArray, - sizeof(challengeTextArray)); + vos_mem_copy(pChallenge, + (tANI_U8 *) challengeTextArray, + sizeof(challengeTextArray)); /** * Sending Authenticaton frame with challenge. @@ -892,8 +890,7 @@ limProcessAuthFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tpPESession pse eSIR_MAC_SUCCESS_STATUS; authFrame.type = SIR_MAC_CHALLENGE_TEXT_EID; authFrame.length = SIR_MAC_AUTH_CHALLENGE_LENGTH; - palCopyMemory( pMac->hHdd, - authFrame.challengeText, + vos_mem_copy(authFrame.challengeText, pAuthNode->challengeText, SIR_MAC_AUTH_CHALLENGE_LENGTH); @@ -981,9 +978,9 @@ limProcessAuthFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tpPESession pse return; } - if ( !palEqualMemory( pMac->hHdd,(tANI_U8 *) pHdr->sa, - (tANI_U8 *) &pMac->lim.gpLimMlmAuthReq->peerMacAddr, - sizeof(tSirMacAddr)) ) + if ( !vos_mem_compare((tANI_U8 *) pHdr->sa, + (tANI_U8 *) &pMac->lim.gpLimMlmAuthReq->peerMacAddr, + sizeof(tSirMacAddr)) ) { /** * Received Authentication frame from an entity @@ -1058,8 +1055,7 @@ limProcessAuthFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tpPESession pse PELOG1(limLog(pMac, LOG1, FL("Alloc new data: %x peer "), pAuthNode);) PELOG1(limPrintMacAddr(pMac, pHdr->sa, LOG1);) - palCopyMemory( pMac->hHdd, - (tANI_U8 *) pAuthNode->peerMacAddr, + vos_mem_copy((tANI_U8 *) pAuthNode->peerMacAddr, pMac->lim.gpLimMlmAuthReq->peerMacAddr, sizeof(tSirMacAddr)); pAuthNode->fTimerStarted = 0; @@ -1174,7 +1170,7 @@ limProcessAuthFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tpPESession pse ((tpSirMacAuthFrameBody) plainBody)->authStatusCode = eSIR_MAC_SUCCESS_STATUS; ((tpSirMacAuthFrameBody) plainBody)->type = SIR_MAC_CHALLENGE_TEXT_EID; ((tpSirMacAuthFrameBody) plainBody)->length = SIR_MAC_AUTH_CHALLENGE_LENGTH; - palCopyMemory( pMac->hHdd, (tANI_U8 *) ((tpSirMacAuthFrameBody) plainBody)->challengeText, + vos_mem_copy((tANI_U8 *) ((tpSirMacAuthFrameBody) plainBody)->challengeText, pRxAuthFrameBody->challengeText, SIR_MAC_AUTH_CHALLENGE_LENGTH); @@ -1214,7 +1210,7 @@ limProcessAuthFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tpPESession pse { tpSirKeys pKey; pKey = &psessionEntry->WEPKeyMaterial[keyId].key[0]; - palCopyMemory( pMac->hHdd, defaultKey, pKey->key, pKey->keyLength); + vos_mem_copy(defaultKey, pKey->key, pKey->keyLength); } else if (wlan_cfgGetStr(pMac, (tANI_U16) (WNI_CFG_WEP_DEFAULT_KEY_1 + keyId), @@ -1252,7 +1248,7 @@ limProcessAuthFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tpPESession pse ((tpSirMacAuthFrameBody) plainBody)->authStatusCode = eSIR_MAC_SUCCESS_STATUS; ((tpSirMacAuthFrameBody) plainBody)->type = SIR_MAC_CHALLENGE_TEXT_EID; ((tpSirMacAuthFrameBody) plainBody)->length = SIR_MAC_AUTH_CHALLENGE_LENGTH; - palCopyMemory( pMac->hHdd, (tANI_U8 *) ((tpSirMacAuthFrameBody) plainBody)->challengeText, + vos_mem_copy((tANI_U8 *) ((tpSirMacAuthFrameBody) plainBody)->challengeText, pRxAuthFrameBody->challengeText, SIR_MAC_AUTH_CHALLENGE_LENGTH); @@ -1433,9 +1429,9 @@ limProcessAuthFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tpPESession pse * Authentication frame3 */ - if (palEqualMemory( pMac->hHdd,pRxAuthFrameBody->challengeText, - pAuthNode->challengeText, - SIR_MAC_AUTH_CHALLENGE_LENGTH)) + if (vos_mem_compare(pRxAuthFrameBody->challengeText, + pAuthNode->challengeText, + SIR_MAC_AUTH_CHALLENGE_LENGTH)) { /// Challenge match. STA is autheticated ! @@ -1460,10 +1456,9 @@ limProcessAuthFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tpPESession pse LIM_NO_WEP_IN_FC,psessionEntry); /// Send Auth indication to SME - palCopyMemory( pMac->hHdd, - (tANI_U8 *) mlmAuthInd.peerMacAddr, + vos_mem_copy((tANI_U8 *) mlmAuthInd.peerMacAddr, (tANI_U8 *) pHdr->sa, - sizeof(tSirMacAddr)); + sizeof(tSirMacAddr)); mlmAuthInd.authType = (tAniAuthType) pRxAuthFrameBody->authAlgoNumber; mlmAuthInd.sessionId = psessionEntry->smeSessionId; @@ -1540,9 +1535,9 @@ limProcessAuthFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tpPESession pse return; } - if ( !palEqualMemory( pMac->hHdd,(tANI_U8 *) pHdr->sa, - (tANI_U8 *) &pMac->lim.gpLimMlmAuthReq->peerMacAddr, - sizeof(tSirMacAddr)) ) + if ( !vos_mem_compare((tANI_U8 *) pHdr->sa, + (tANI_U8 *) &pMac->lim.gpLimMlmAuthReq->peerMacAddr, + sizeof(tSirMacAddr)) ) { /** * Received Authentication frame from an entity @@ -1597,8 +1592,7 @@ limProcessAuthFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tpPESession pse PELOG1(limLog(pMac, LOG1, FL("Alloc new data: %x peer "), pAuthNode); limPrintMacAddr(pMac, pHdr->sa, LOG1);) - palCopyMemory( pMac->hHdd, - (tANI_U8 *) pAuthNode->peerMacAddr, + vos_mem_copy((tANI_U8 *) pAuthNode->peerMacAddr, pMac->lim.gpLimMlmAuthReq->peerMacAddr, sizeof(tSirMacAddr)); pAuthNode->fTimerStarted = 0; @@ -1671,9 +1665,8 @@ tSirRetStatus limProcessAuthFrameNoSession(tpAniSirGlobal pMac, tANI_U8 *pBd, vo frameLen = WDA_GET_RX_PAYLOAD_LEN(pBd); VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_DEBUG, - FL("Auth Frame Received: BSSID %02x:%02x:%02x:%02x:%02x:%02x (Rssi %d)"), - pHdr->bssId[0], pHdr->bssId[1], pHdr->bssId[2], - pHdr->bssId[3], pHdr->bssId[4], pHdr->bssId[5], + FL("Auth Frame Received: BSSID " MAC_ADDRESS_STR " (RSSI %d)"), + MAC_ADDR_ARRAY(pHdr->bssId), (uint)abs((tANI_S8)WDA_GET_RX_RSSI_DB(pBd))); // Check for the operating channel and see what needs to be done next. @@ -1704,8 +1697,8 @@ tSirRetStatus limProcessAuthFrameNoSession(tpAniSirGlobal pMac, tANI_U8 *pBd, vo #endif // Check that its the same bssId we have for preAuth - if (!palEqualMemory( pMac->hHdd, pMac->ft.ftPEContext.pFTPreAuthReq->preAuthbssId, - pHdr->bssId, sizeof( tSirMacAddr ))) + if (!vos_mem_compare(pMac->ft.ftPEContext.pFTPreAuthReq->preAuthbssId, + pHdr->bssId, sizeof( tSirMacAddr ))) { // In this case SME if indeed has triggered a // pre auth it will time out. diff --git a/CORE/MAC/src/pe/lim/limProcessBeaconFrame.c b/CORE/MAC/src/pe/lim/limProcessBeaconFrame.c index 6d220d5f09af..251d54cf039a 100644 --- a/CORE/MAC/src/pe/lim/limProcessBeaconFrame.c +++ b/CORE/MAC/src/pe/lim/limProcessBeaconFrame.c @@ -26,7 +26,6 @@ */ /* - * * Airgo Networks, Inc proprietary. All rights reserved. * This file limProcessBeaconFrame.cc contains the code * for processing Received Beacon Frame. @@ -108,10 +107,10 @@ limProcessBeaconFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo,tpPESession ps || pMac->fScanOffload ) { - if(eHAL_STATUS_SUCCESS != palAllocateMemory(pMac->hHdd, - (void **)&pBeacon, sizeof(tSchBeaconStruct))) + pBeacon = vos_mem_malloc(sizeof(tSchBeaconStruct)); + if ( NULL == pBeacon ) { - limLog(pMac, LOGE, FL("Unable to PAL allocate memory in limProcessBeaconFrame") ); + limLog(pMac, LOGE, FL("Unable to allocate memory in limProcessBeaconFrame") ); return; } @@ -125,7 +124,7 @@ limProcessBeaconFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo,tpPESession ps FL("Received invalid Beacon in state %X"), psessionEntry->limMlmState); limPrintMlmState(pMac, LOGW, psessionEntry->limMlmState); - palFreeMemory(pMac->hHdd, pBeacon); + vos_mem_free(pBeacon); return; } @@ -134,7 +133,8 @@ limProcessBeaconFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo,tpPESession ps if ((!psessionEntry->lastBeaconDtimPeriod) && (sirCompareMacAddr( psessionEntry->bssId, pBeacon->bssid))) { - palCopyMemory( pMac->hHdd, ( tANI_U8* )&psessionEntry->lastBeaconTimeStamp, ( tANI_U8* )pBeacon->timeStamp, sizeof(tANI_U64) ); + vos_mem_copy(( tANI_U8* )&psessionEntry->lastBeaconTimeStamp, + ( tANI_U8* )pBeacon->timeStamp, sizeof(tANI_U64) ); psessionEntry->lastBeaconDtimCount = pBeacon->tim.dtimCount; psessionEntry->lastBeaconDtimPeriod= pBeacon->tim.dtimPeriod; psessionEntry->currentBssBeaconCnt++; @@ -153,14 +153,14 @@ limProcessBeaconFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo,tpPESession ps if ((pMac->lim.gLimMlmState == eLIM_MLM_WT_PROBE_RESP_STATE) || (pMac->lim.gLimMlmState == eLIM_MLM_PASSIVE_SCAN_STATE)) { - //If we are scanning for P2P, only accept probe rsp - if((pMac->lim.gLimHalScanState != eLIM_HAL_SCANNING_STATE) || (NULL == pMac->lim.gpLimMlmScanReq) - || !pMac->lim.gpLimMlmScanReq->p2pSearch ) - { - limCheckAndAddBssDescription(pMac, pBeacon, pRxPacketInfo, - ((pMac->lim.gLimHalScanState == eLIM_HAL_SCANNING_STATE) ? eANI_BOOLEAN_TRUE : eANI_BOOLEAN_FALSE), - eANI_BOOLEAN_FALSE); - } + limCheckAndAddBssDescription(pMac, pBeacon, pRxPacketInfo, + ((pMac->lim.gLimHalScanState == eLIM_HAL_SCANNING_STATE) ? + eANI_BOOLEAN_TRUE : eANI_BOOLEAN_FALSE), + eANI_BOOLEAN_FALSE); + /* Calling dfsChannelList which will convert DFS channel + * to Active channel for x secs if this channel is DFS channel */ + limSetDFSChannelList(pMac, pBeacon->channelNumber, + &pMac->lim.dfschannelList); } else if (pMac->lim.gLimMlmState == eLIM_MLM_LEARN_STATE) { @@ -169,25 +169,27 @@ limProcessBeaconFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo,tpPESession ps { if( psessionEntry->beacon != NULL ) { - palFreeMemory(pMac->hHdd, psessionEntry->beacon); + vos_mem_free(psessionEntry->beacon); psessionEntry->beacon = NULL; } psessionEntry->bcnLen = WDA_GET_RX_PAYLOAD_LEN(pRxPacketInfo); - if( (palAllocateMemory(pMac->hHdd, (void**)&psessionEntry->beacon, psessionEntry->bcnLen)) != eHAL_STATUS_SUCCESS) + psessionEntry->beacon = vos_mem_malloc(psessionEntry->bcnLen); + if ( NULL == psessionEntry->beacon ) { PELOGE(limLog(pMac, LOGE, FL("Unable to allocate memory to store beacon"));) } else { //Store the Beacon/ProbeRsp. This is sent to csr/hdd in join cnf response. - palCopyMemory(pMac->hHdd, psessionEntry->beacon, WDA_GET_RX_MPDU_DATA(pRxPacketInfo), psessionEntry->bcnLen); + vos_mem_copy(psessionEntry->beacon, WDA_GET_RX_MPDU_DATA(pRxPacketInfo), + psessionEntry->bcnLen); } // STA in WT_JOIN_BEACON_STATE (IBSS) limCheckAndAnnounceJoinSuccess(pMac, pBeacon, pHdr,psessionEntry); } // if (pMac->lim.gLimMlmState == eLIM_MLM_WT_PROBE_RESP_STATE) - palFreeMemory(pMac->hHdd, pBeacon); + vos_mem_free(pBeacon); } // if ((pMac->lim.gLimMlmState == eLIM_MLM_WT_PROBE_RESP_STATE) || ... else { @@ -260,10 +262,10 @@ limProcessBeaconFrameNoSession(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo) (pMac->lim.gLimMlmState == eLIM_MLM_PASSIVE_SCAN_STATE) || (pMac->lim.gLimMlmState == eLIM_MLM_LEARN_STATE)) { - if(eHAL_STATUS_SUCCESS != palAllocateMemory(pMac->hHdd, - (void **)&pBeacon, sizeof(tSchBeaconStruct))) + pBeacon = vos_mem_malloc(sizeof(tSchBeaconStruct)); + if ( NULL == pBeacon ) { - limLog(pMac, LOGE, FL("Unable to PAL allocate memory in limProcessBeaconFrameNoSession") ); + limLog(pMac, LOGE, FL("Unable to allocate memory in limProcessBeaconFrameNoSession") ); return; } @@ -272,24 +274,24 @@ limProcessBeaconFrameNoSession(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo) // Received wrongly formatted/invalid Beacon. Ignore and move on. limLog(pMac, LOGW, FL("Received invalid Beacon in global MLM state %X"), pMac->lim.gLimMlmState); limPrintMlmState(pMac, LOGW, pMac->lim.gLimMlmState); - palFreeMemory(pMac->hHdd, pBeacon); + vos_mem_free(pBeacon); return; } if ( (pMac->lim.gLimMlmState == eLIM_MLM_WT_PROBE_RESP_STATE) || (pMac->lim.gLimMlmState == eLIM_MLM_PASSIVE_SCAN_STATE) ) { - //If we are scanning for P2P, only accept probe rsp - if((pMac->lim.gLimHalScanState != eLIM_HAL_SCANNING_STATE) || (NULL == pMac->lim.gpLimMlmScanReq) - || !pMac->lim.gpLimMlmScanReq->p2pSearch ) - { - limCheckAndAddBssDescription(pMac, pBeacon, pRxPacketInfo, eANI_BOOLEAN_TRUE, eANI_BOOLEAN_FALSE); - } + limCheckAndAddBssDescription(pMac, pBeacon, pRxPacketInfo, + eANI_BOOLEAN_TRUE, eANI_BOOLEAN_FALSE); + /* Calling dfsChannelList which will convert DFS channel + * to Active channel for x secs if this channel is DFS channel */ + limSetDFSChannelList(pMac, pBeacon->channelNumber, + &pMac->lim.dfschannelList); } else if (pMac->lim.gLimMlmState == eLIM_MLM_LEARN_STATE) { } // end of eLIM_MLM_LEARN_STATE) - palFreeMemory(pMac->hHdd, pBeacon); + vos_mem_free(pBeacon); } // end of (eLIM_MLM_WT_PROBE_RESP_STATE) || (eLIM_MLM_PASSIVE_SCAN_STATE) else { diff --git a/CORE/MAC/src/pe/lim/limProcessCfgUpdates.c b/CORE/MAC/src/pe/lim/limProcessCfgUpdates.c index 4d2869d1b084..e1e3b5ceb748 100644 --- a/CORE/MAC/src/pe/lim/limProcessCfgUpdates.c +++ b/CORE/MAC/src/pe/lim/limProcessCfgUpdates.c @@ -140,7 +140,7 @@ void limSetCfgProtection(tpAniSirGlobal pMac, tpPESession pesessionEntry) if(( pesessionEntry != NULL ) && (pesessionEntry->limSystemRole == eLIM_AP_ROLE )){ if (pesessionEntry->gLimProtectionControl == WNI_CFG_FORCE_POLICY_PROTECTION_DISABLE ) - palZeroMemory( pMac->hHdd, (void *)&pesessionEntry->cfgProtection , sizeof(tCfgProtection)); + vos_mem_set((void *)&pesessionEntry->cfgProtection, sizeof(tCfgProtection), 0); else{ limLog(pMac, LOG1, FL(" frm11a = %d, from11b = %d, frm11g = %d, " "ht20 = %d, nongf = %d, lsigTxop = %d, " @@ -170,8 +170,8 @@ void limSetCfgProtection(tpAniSirGlobal pMac, tpPESession pesessionEntry) return; } - if(pMac->lim.gLimProtectionControl == WNI_CFG_FORCE_POLICY_PROTECTION_DISABLE) - palZeroMemory( pMac->hHdd, (void *)&pMac->lim.cfgProtection , sizeof(tCfgProtection)); + if (pMac->lim.gLimProtectionControl == WNI_CFG_FORCE_POLICY_PROTECTION_DISABLE) + vos_mem_set((void *)&pMac->lim.cfgProtection, sizeof(tCfgProtection), 0); else { pMac->lim.cfgProtection.fromlla = (val >> WNI_CFG_PROTECTION_ENABLED_FROM_llA) & 1; @@ -367,7 +367,7 @@ limHandleCFGparamUpdate(tpAniSirGlobal pMac, tANI_U32 cfgId) status = limPostMsgApi(pMac, &msg); if (status != TX_SUCCESS) - PELOGE(limLog(pMac, LOGE, FL("Failed limPostMsgApi"), status);) + PELOGE(limLog(pMac, LOGE, FL("Failed limPostMsgApi %u"), status);) break; } case WNI_CFG_GREENFIELD_CAPABILITY: @@ -547,8 +547,8 @@ limHandleCFGparamUpdate(tpAniSirGlobal pMac, tANI_U32 cfgId) tpSirPowerSaveCfg pPowerSaveConfig; /* Allocate and fill in power save configuration. */ - if (palAllocateMemory(pMac->hHdd, (void **)&pPowerSaveConfig, - sizeof(tSirPowerSaveCfg)) != eHAL_STATUS_SUCCESS) + pPowerSaveConfig = vos_mem_malloc(sizeof(tSirPowerSaveCfg)); + if ( NULL == pPowerSaveConfig ) { PELOGE(limLog(pMac, LOGE, FL("LIM: Cannot allocate memory for power save configuration"));) break; @@ -557,7 +557,7 @@ limHandleCFGparamUpdate(tpAniSirGlobal pMac, tANI_U32 cfgId) /* This context should be valid if power-save configuration message has been already dispathed * during initialization process. Re-using the present configuration mask */ - palCopyMemory(pMac->hHdd, pPowerSaveConfig, (tANI_U8 *)&pMac->pmm.gPmmCfg, sizeof(tSirPowerSaveCfg)); + vos_mem_copy(pPowerSaveConfig, (tANI_U8 *)&pMac->pmm.gPmmCfg, sizeof(tSirPowerSaveCfg)); if ( (pmmSendPowerSaveCfg(pMac, pPowerSaveConfig)) != eSIR_SUCCESS) { @@ -601,6 +601,28 @@ limHandleCFGparamUpdate(tpAniSirGlobal pMac, tANI_U32 cfgId) pMac->lim.gLimAssocStaLimit = (tANI_U16)val1; break; + case WNI_CFG_DEL_ALL_RX_BA_SESSIONS_2_4_G_BTC: + if (wlan_cfgGetInt + (pMac, WNI_CFG_DEL_ALL_RX_BA_SESSIONS_2_4_G_BTC, &val1) != + eSIR_SUCCESS) + { + limLog(pMac, LOGE, + FL( "Unable to get WNI_CFG_DEL_ALL_RX_BA_SESSIONS_2_4_G_BTC")); + break; + } + if (val1) + { + limLog(pMac, LOGW, + FL("BTC requested to disable all RX BA sessions")); + limDelPerBssBASessionsBtc(pMac); + } + else + { + limLog(pMac, LOGW, + FL("Resetting the WNI_CFG_DEL_ALL_RX_BA_SESSIONS_2_4_G_BTC")); + } + break; + default: break; } diff --git a/CORE/MAC/src/pe/lim/limProcessDeauthFrame.c b/CORE/MAC/src/pe/lim/limProcessDeauthFrame.c index 09e0ee0c5ca3..2cbdfb0f10c7 100644 --- a/CORE/MAC/src/pe/lim/limProcessDeauthFrame.c +++ b/CORE/MAC/src/pe/lim/limProcessDeauthFrame.c @@ -26,7 +26,6 @@ */ /* - * * Airgo Networks, Inc proprietary. All rights reserved. * This file limProcessDeauthFrame.cc contains the code * for processing Deauthentication Frame. @@ -92,8 +91,19 @@ limProcessDeauthFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tpPESession p if ((eLIM_STA_ROLE == psessionEntry->limSystemRole) && (eLIM_SME_WT_DEAUTH_STATE == psessionEntry->limSmeState)) { - MTRACE(macTrace(pMac, TRACE_CODE_INFO_LOG, 0, eLOG_PROC_DEAUTH_FRAME_SCENARIO)); - return; + /*Every 15th deauth frame will be logged in kmsg*/ + if(!(pMac->lim.deauthMsgCnt & 0xF)) + { + PELOGE(limLog(pMac, LOGE, + FL("received Deauth frame in DEAUTH_WT_STATE" + "(already processing previously received DEAUTH frame).." + "Dropping this.. Deauth Failed %d \n "),++pMac->lim.deauthMsgCnt);) + } + else + { + pMac->lim.deauthMsgCnt++; + } + return; } if (limIsGroupAddr(pHdr->sa)) @@ -143,7 +153,7 @@ limProcessDeauthFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tpPESession p if (limCheckDisassocDeauthAckPending(pMac, (tANI_U8*)pHdr->sa)) { - PELOGW(limLog(pMac, LOGE, + PELOGW(limLog(pMac, LOGW, FL("Ignore the Deauth received, while waiting for ack of disassoc/deauth"));) limCleanUpDisassocDeauthReq(pMac,(tANI_U8*)pHdr->sa, 1); return; @@ -197,11 +207,11 @@ limProcessDeauthFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tpPESession p else { // Received Deauth frame in either IBSS - // or un-known role. Log error and ignore it - limLog(pMac, LOGE, + // or un-known role. Log and ignore it + limLog(pMac, LOG1, FL("received Deauth frame with reasonCode %d in role %d from "), reasonCode, psessionEntry->limSystemRole); - limPrintMacAddr(pMac, pHdr->sa, LOGE); + limPrintMacAddr(pMac, pHdr->sa, LOG1); return; } @@ -259,7 +269,7 @@ limProcessDeauthFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tpPESession p PELOGE(limLog(pMac, LOGE, FL("received DeAuth from an AP other than we're trying to join. Ignore. "));) if (limSearchPreAuthList(pMac, pHdr->sa)) { - PELOGE(limLog(pMac, LOGE, FL("Preauth entry exist. Deleting... "));) + PELOG1(limLog(pMac, LOG1, FL("Preauth entry exist. Deleting... "));) limDeletePreAuthNode(pMac, pHdr->sa); } return; @@ -295,10 +305,9 @@ limProcessDeauthFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tpPESession p case eLIM_MLM_AUTHENTICATED_STATE: /// Issue Deauth Indication to SME. - palCopyMemory( pMac->hHdd, - (tANI_U8 *) &mlmDeauthInd.peerMacAddr, - pHdr->sa, - sizeof(tSirMacAddr)); + vos_mem_copy((tANI_U8 *) &mlmDeauthInd.peerMacAddr, + pHdr->sa, + sizeof(tSirMacAddr)); mlmDeauthInd.reasonCode = reasonCode; psessionEntry->limMlmState = eLIM_MLM_IDLE_STATE; @@ -321,7 +330,7 @@ limProcessDeauthFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tpPESession p if (psessionEntry->pLimMlmJoinReq) { - palFreeMemory( pMac->hHdd, psessionEntry->pLimMlmJoinReq); + vos_mem_free(psessionEntry->pLimMlmJoinReq); psessionEntry->pLimMlmJoinReq = NULL; } @@ -347,6 +356,14 @@ limProcessDeauthFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tpPESession p return; + case eLIM_MLM_WT_ADD_STA_RSP_STATE: + psessionEntry->fDeauthReceived = true; + PELOGW(limLog(pMac, LOGW, + FL("Received Deauth frame with Reason Code %d from Peer"), + reasonCode); + limPrintMacAddr(pMac, pHdr->sa, LOGW);) + return ; + case eLIM_MLM_IDLE_STATE: case eLIM_MLM_LINK_ESTABLISHED_STATE: #ifdef FEATURE_WLAN_TDLS @@ -435,7 +452,7 @@ limProcessDeauthFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tpPESession p pStaDs->mlmStaContext.cleanupTrigger = eLIM_PEER_ENTITY_DEAUTH; /// Issue Deauth Indication to SME. - palCopyMemory( pMac->hHdd, (tANI_U8 *) &mlmDeauthInd.peerMacAddr, + vos_mem_copy((tANI_U8 *) &mlmDeauthInd.peerMacAddr, pStaDs->staAddr, sizeof(tSirMacAddr)); mlmDeauthInd.reasonCode = (tANI_U8) pStaDs->mlmStaContext.disassocReason; @@ -458,7 +475,7 @@ limProcessDeauthFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tpPESession p limDeletePreAuthNode(pMac, pHdr->sa); if (psessionEntry->limAssocResponseData) { - palFreeMemory(pMac->hHdd, psessionEntry->limAssocResponseData); + vos_mem_free(psessionEntry->limAssocResponseData); psessionEntry->limAssocResponseData = NULL; } @@ -473,7 +490,12 @@ limProcessDeauthFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tpPESession p eSIR_MAC_UNSPEC_FAILURE_STATUS, psessionEntry); return; } - + /* reset the deauthMsgCnt here since we are able to Process + * the deauth frame and sending up the indication as well */ + if(pMac->lim.deauthMsgCnt != 0) + { + pMac->lim.deauthMsgCnt = 0; + } /// Deauthentication from peer MAC entity limPostSmeMessage(pMac, LIM_MLM_DEAUTH_IND, (tANI_U32 *) &mlmDeauthInd); diff --git a/CORE/MAC/src/pe/lim/limProcessDisassocFrame.c b/CORE/MAC/src/pe/lim/limProcessDisassocFrame.c index 10dba19ffc90..1bb77460fec6 100644 --- a/CORE/MAC/src/pe/lim/limProcessDisassocFrame.c +++ b/CORE/MAC/src/pe/lim/limProcessDisassocFrame.c @@ -26,7 +26,6 @@ */ /* - * * Airgo Networks, Inc proprietary. All rights reserved. * This file limProcessDisassocFrame.cc contains the code * for processing Disassocation Frame. @@ -152,7 +151,7 @@ limProcessDisassocFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tpPESession if (limCheckDisassocDeauthAckPending(pMac, (tANI_U8*)pHdr->sa)) { - PELOGW(limLog(pMac, LOGE, + PELOGW(limLog(pMac, LOGW, FL("Ignore the DisAssoc received, while waiting for ack of disassoc/deauth"));) limCleanUpDisassocDeauthReq(pMac,(tANI_U8*)pHdr->sa, 1); return; @@ -236,8 +235,7 @@ limProcessDisassocFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tpPESession { limLog(pMac, LOGW, FL("Ignoring disassoc frame due to upcoming " - "channel switch, from"), - reasonCode); + "channel switch, from")); limPrintMacAddr(pMac, pHdr->sa, LOGW); return; } @@ -256,18 +254,18 @@ limProcessDisassocFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tpPESession else { // Received Disassociation frame in either IBSS - // or un-known role. Log error and ignore it - limLog(pMac, LOGE, + // or un-known role. Log and ignore it + limLog(pMac, LOG1, FL("received Disassoc frame with invalid reasonCode %d in role %d in sme state %d from "), reasonCode, psessionEntry->limSystemRole, psessionEntry->limSmeState); - limPrintMacAddr(pMac, pHdr->sa, LOGE); + limPrintMacAddr(pMac, pHdr->sa, LOG1); return; } // Disassociation from peer MAC entity - PELOGE(limLog(pMac, LOGE, + PELOG1(limLog(pMac, LOG1, FL("Received Disassoc frame from sta with assocId=%d with reasonCode=%d. Peer MAC is "MAC_ADDRESS_STR), pStaDs->assocId, reasonCode, MAC_ADDR_ARRAY(pHdr->sa));) @@ -302,9 +300,9 @@ limProcessDisassocFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tpPESession pStaDs->mlmStaContext.disassocReason = (tSirMacReasonCodes) reasonCode; // Issue Disassoc Indication to SME. - palCopyMemory( pMac->hHdd, (tANI_U8 *) &mlmDisassocInd.peerMacAddr, - (tANI_U8 *) pStaDs->staAddr, - sizeof(tSirMacAddr)); + vos_mem_copy((tANI_U8 *) &mlmDisassocInd.peerMacAddr, + (tANI_U8 *) pStaDs->staAddr, + sizeof(tSirMacAddr)); mlmDisassocInd.reasonCode = (tANI_U8) pStaDs->mlmStaContext.disassocReason; mlmDisassocInd.disassocTrigger = eLIM_PEER_ENTITY_DISASSOC; @@ -322,7 +320,7 @@ limProcessDisassocFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tpPESession PELOGE(limLog(pMac, LOGE, FL("received Disassoc from AP while waiting for Reassoc Rsp"));) if (psessionEntry->limAssocResponseData) { - palFreeMemory(pMac->hHdd, psessionEntry->limAssocResponseData); + vos_mem_free(psessionEntry->limAssocResponseData); psessionEntry->limAssocResponseData = NULL; } diff --git a/CORE/MAC/src/pe/lim/limProcessMessageQueue.c b/CORE/MAC/src/pe/lim/limProcessMessageQueue.c index fc5d2a0f6975..7df9defb5c73 100644 --- a/CORE/MAC/src/pe/lim/limProcessMessageQueue.c +++ b/CORE/MAC/src/pe/lim/limProcessMessageQueue.c @@ -61,7 +61,7 @@ #if defined WLAN_FEATURE_VOWIFI #include "rrmApi.h" #endif -#if defined FEATURE_WLAN_CCX +#if defined(FEATURE_WLAN_CCX) && !defined(FEATURE_WLAN_CCX_UPLOAD) #include "ccxApi.h" #endif @@ -73,6 +73,8 @@ #include "wmmApsd.h" #endif +#include "limRMC.h" + #include "vos_types.h" #include "vos_packet.h" #include "vos_memory.h" @@ -444,7 +446,7 @@ limCheckMgmtRegisteredFrames(tpAniSirGlobal pMac, tANI_U8 *pBd, { if (pLimMgmtRegistration->matchLen <= framelen) { - if (palEqualMemory(pMac, pLimMgmtRegistration->matchData, + if (vos_mem_compare(pLimMgmtRegistration->matchData, pBody, pLimMgmtRegistration->matchLen)) { /* found match! */ @@ -533,9 +535,14 @@ limHandle80211Frames(tpAniSirGlobal pMac, tpSirMsgQ limMsg, tANI_U8 *pDeferMsg) fcOffset = (v_U8_t)WDA_GET_RX_MPDU_HEADER_OFFSET(pRxPacketInfo); fc = pHdr->fc; - limLog( pMac, LOG4, FL("ProtVersion %d, Type %d, Subtype %d rateIndex=%d"), - fc.protVer, fc.type, fc.subType, WDA_GET_RX_MAC_RATE_IDX(pRxPacketInfo)); - +#ifdef WLAN_DUMP_MGMTFRAMES + limLog( pMac, LOGE, FL("ProtVersion %d, Type %d, Subtype %d rateIndex=%d"), + fc.protVer, fc.type, fc.subType, + WDA_GET_RX_MAC_RATE_IDX(pRxPacketInfo)); + VOS_TRACE_HEX_DUMP(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, pHdr, + WDA_GET_RX_MPDU_HEADER_LEN(pRxPacketInfo)); +#endif + #ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD if ( WDA_GET_ROAMCANDIDATEIND(pRxPacketInfo)) { @@ -564,7 +571,7 @@ limHandle80211Frames(tpAniSirGlobal pMac, tpSirMsgQ limMsg, tANI_U8 *pDeferMsg) goto end; } #endif //WLAN_FEATURE_ROAM_SCAN_OFFLOAD -#ifdef FEATURE_WLAN_CCX +#if defined(FEATURE_WLAN_CCX) && !defined(FEATURE_WLAN_CCX_UPLOAD) if (fc.type == SIR_MAC_DATA_FRAME && isFrmFt) { #if 0 // CCX TBD Need to PORT @@ -591,8 +598,6 @@ limHandle80211Frames(tpAniSirGlobal pMac, tpSirMsgQ limMsg, tANI_U8 *pDeferMsg) #else printk("%s: Need to port handling of IAPP frames to PRIMA for CCX", __func__); #endif - - } else #endif /* Added For BT-AMP Support */ @@ -807,7 +812,7 @@ limHandle80211Frames(tpAniSirGlobal pMac, tpSirMsgQ limMsg, tANI_U8 *pDeferMsg) } } #endif -#ifdef FEATURE_WLAN_CCX +#if defined(FEATURE_WLAN_CCX) && !defined(FEATURE_WLAN_CCX_UPLOAD) /* We accept data frame (IAPP frame) only if Session is * present and ccx connection is established on that * session @@ -850,9 +855,8 @@ eHalStatus limSendStopScanOffloadReq(tpAniSirGlobal pMac, tANI_U8 SessionId) tSirRetStatus rc = eSIR_SUCCESS; tAbortScanParams *pAbortScanParams; - if (eHAL_STATUS_SUCCESS != palAllocateMemory(pMac->hHdd, - (void**) &pAbortScanParams, - sizeof(tAbortScanParams))) + pAbortScanParams = vos_mem_malloc(sizeof(tAbortScanParams)); + if (NULL == pAbortScanParams) { limLog(pMac, LOGP, FL("Memory allocation failed for AbortScanParams")); return eHAL_STATUS_FAILURE; @@ -866,9 +870,8 @@ eHalStatus limSendStopScanOffloadReq(tpAniSirGlobal pMac, tANI_U8 SessionId) rc = wdaPostCtrlMsg(pMac, &msg); if (rc != eSIR_SUCCESS) { - limLog(pMac, LOGE, FL("wdaPostCtrlMsg() return failure"), - pMac); - palFreeMemory(pMac->hHdd, (tANI_U8 *)pAbortScanParams); + limLog(pMac, LOGE, FL("wdaPostCtrlMsg() return failure")); + vos_mem_free(pAbortScanParams); return eHAL_STATUS_FAILURE; } @@ -987,7 +990,7 @@ void limOemDataRspHandleResumeLinkRsp(tpAniSirGlobal pMac, eHalStatus status, tA if(NULL != pMac->lim.gpLimMlmOemDataReq) { - palFreeMemory(pMac->hHdd, pMac->lim.gpLimMlmOemDataReq); + vos_mem_free(pMac->lim.gpLimMlmOemDataReq); pMac->lim.gpLimMlmOemDataReq = NULL; } @@ -1004,7 +1007,6 @@ void limProcessOemDataRsp(tpAniSirGlobal pMac, tANI_U32* body) { tpLimMlmOemDataRsp mlmOemDataRsp = NULL; #ifndef QCA_WIFI_2_0 - eHalStatus status = eHAL_STATUS_SUCCESS; tpStartOemDataRsp oemDataRsp = NULL; #endif @@ -1014,8 +1016,8 @@ void limProcessOemDataRsp(tpAniSirGlobal pMac, tANI_U32* body) #ifndef QCA_WIFI_2_0 oemDataRsp = (tpStartOemDataRsp)(body); - status = palAllocateMemory(pMac->hHdd, (void**)(&mlmOemDataRsp), sizeof(tLimMlmOemDataRsp)); - if(status != eHAL_STATUS_SUCCESS) + mlmOemDataRsp = vos_mem_malloc(sizeof(tLimMlmOemDataRsp)); + if ( NULL == mlmOemDataRsp ) { limLog(pMac, LOGP, FL("could not allocate memory for mlmOemDataRsp")); return; @@ -1023,10 +1025,11 @@ void limProcessOemDataRsp(tpAniSirGlobal pMac, tANI_U32* body) //copy the memory into tLimMlmOemDataRsp and free the tStartOemDataRsp //the structures tStartOemDataRsp and tLimMlmOemDataRsp have the same structure - palCopyMemory(pMac->hHdd, (void*)(mlmOemDataRsp), (void*)(oemDataRsp), sizeof(tLimMlmOemDataRsp)); + vos_mem_copy((void*)(mlmOemDataRsp), (void*)(oemDataRsp), + sizeof(tLimMlmOemDataRsp)); //Now free the incoming memory - palFreeMemory(pMac->hHdd, (void*)(oemDataRsp)); + vos_mem_free(oemDataRsp); limResumeLink(pMac, limOemDataRspHandleResumeLinkRsp, (tANI_U32*)mlmOemDataRsp); #else @@ -1079,7 +1082,7 @@ limProcessMessages(tpAniSirGlobal pMac, tpSirMsgQ limMsg) #endif if(pMac->gDriverType == eDRIVER_TYPE_MFG) { - palFreeMemory(pMac->hHdd, (tANI_U8 *)limMsg->bodyptr); + vos_mem_free(limMsg->bodyptr); limMsg->bodyptr = NULL; return; } @@ -1177,7 +1180,8 @@ limProcessMessages(tpAniSirGlobal pMac, tpSirMsgQ limMsg) * and next time when we try to process the msg, we will try to use 'BD' as * 'Vos Pkt' which will cause a crash */ - palCopyMemory(pMac, (tANI_U8*)&limMsgNew, (tANI_U8*)limMsg, sizeof(tSirMsgQ)); + vos_mem_copy((tANI_U8*)&limMsgNew, (tANI_U8*)limMsg, + sizeof(tSirMsgQ)); pVosPkt = (vos_pkt_t *)limMsgNew.bodyptr; vos_pkt_get_packet_length(pVosPkt, &pktLen); @@ -1245,6 +1249,7 @@ limProcessMessages(tpAniSirGlobal pMac, tpSirMsgQ limMsg) case eWNI_SME_TDLS_SEND_MGMT_REQ: case eWNI_SME_TDLS_ADD_STA_REQ: case eWNI_SME_TDLS_DEL_STA_REQ: + case eWNI_SME_TDLS_LINK_ESTABLISH_REQ: #endif #ifdef FEATURE_WLAN_TDLS_INTERNAL case eWNI_SME_TDLS_DISCOVERY_START_REQ: @@ -1257,7 +1262,7 @@ limProcessMessages(tpAniSirGlobal pMac, tpSirMsgQ limMsg) break; case eWNI_SME_SCAN_ABORT_IND: - { + { tSirMbMsg *pMsg = limMsg->bodyptr; tANI_U8 sessionId; if (pMsg) @@ -1267,8 +1272,8 @@ limProcessMessages(tpAniSirGlobal pMac, tpSirMsgQ limMsg) vos_mem_free((v_VOID_t *)limMsg->bodyptr); limMsg->bodyptr = NULL; } - } - break; + } + break; case eWNI_SME_START_REQ: case eWNI_SME_SYS_READY_IND: #ifndef WNI_ASKEY_NON_SUPPORT_FEATURE @@ -1319,6 +1324,7 @@ limProcessMessages(tpAniSirGlobal pMac, tpSirMsgQ limMsg) case eWNI_SME_DEL_STA_SELF_REQ: case eWNI_SME_REGISTER_MGMT_FRAME_REQ: case eWNI_SME_UPDATE_NOA: + case eWNI_SME_CLEAR_DFS_CHANNEL_LIST: case eWNI_SME_STA_STAT_REQ: case eWNI_SME_AGGR_STAT_REQ: case eWNI_SME_GLOBAL_STAT_REQ: @@ -1327,6 +1333,9 @@ limProcessMessages(tpAniSirGlobal pMac, tpSirMsgQ limMsg) #if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR) case eWNI_SME_GET_ROAM_RSSI_REQ: #endif +#if defined(FEATURE_WLAN_CCX) && defined(FEATURE_WLAN_CCX_UPLOAD) + case eWNI_SME_GET_TSM_STATS_REQ: +#endif /* FEATURE_WLAN_CCX && FEATURE_WLAN_CCX_UPLOAD */ // These messages are from HDD limProcessNormalHddMsg(pMac, limMsg, false); //no need to response to hdd break; @@ -1352,25 +1361,36 @@ limProcessMessages(tpAniSirGlobal pMac, tpSirMsgQ limMsg) case eWNI_PMC_SMPS_STATE_IND : { if(limMsg->bodyptr){ - palFreeMemory(pMac->hHdd, (tANI_U8 *)limMsg->bodyptr); + vos_mem_free(limMsg->bodyptr); limMsg->bodyptr = NULL; } } break; case eWNI_SME_SEND_ACTION_FRAME_IND: limSendP2PActionFrame(pMac, limMsg); - palFreeMemory(pMac->hHdd, (tANI_U8 *)limMsg->bodyptr); + vos_mem_free(limMsg->bodyptr); limMsg->bodyptr = NULL; break; case eWNI_SME_ABORT_REMAIN_ON_CHAN_IND: { tSirMbMsgP2p *pMbMsg = (tSirMbMsgP2p *)limMsg->bodyptr; limAbortRemainOnChan(pMac, pMbMsg->sessionId); - palFreeMemory(pMac->hHdd, (tANI_U8 *)limMsg->bodyptr); + vos_mem_free(limMsg->bodyptr); limMsg->bodyptr = NULL; break; } +#if defined WLAN_FEATURE_RELIABLE_MCAST + case eWNI_SME_ENABLE_RMC_REQ: + case eWNI_SME_DISABLE_RMC_REQ: + /* + * These messages are from HDD + * No need to response to hdd + */ + limProcessSmeReqMessages(pMac,limMsg); + break; +#endif /* WLAN_FEATURE_RELIABLE_MCAST */ + case SIR_HAL_P2P_NOA_START_IND: { tpPESession psessionEntry = &pMac->lim.gpSession[0]; @@ -1389,7 +1409,8 @@ limProcessMessages(tpAniSirGlobal pMac, tpSirMsgQ limMsg) (psessionEntry->pePersona == VOS_P2P_GO_MODE)) { //Save P2P NOA start attributes for P2P Go persona p2pGOExists = 1; - palCopyMemory(pMac->hHdd, &psessionEntry->p2pGoPsNoaStartInd, limMsg->bodyptr, sizeof(tSirP2PNoaStart)); + vos_mem_copy(&psessionEntry->p2pGoPsNoaStartInd, limMsg->bodyptr, + sizeof(tSirP2PNoaStart)); if (psessionEntry->p2pGoPsNoaStartInd.status != eHAL_STATUS_SUCCESS) { limLog(pMac, LOGW, FL("GO NOA start failure status %d reported by FW." @@ -1408,11 +1429,45 @@ limProcessMessages(tpAniSirGlobal pMac, tpSirMsgQ limMsg) /* We received the NOA start indication. Now we can send down the SME request which requires off-channel operation */ limProcessRegdDefdSmeReqAfterNOAStart(pMac); - palFreeMemory(pMac->hHdd, (tANI_U8 *)limMsg->bodyptr); + vos_mem_free(limMsg->bodyptr); limMsg->bodyptr = NULL; } break; +#ifdef FEATURE_WLAN_TDLS + case SIR_HAL_TDLS_IND: + { + tSirTdlsInd *pTdlsInd = (tpSirTdlsInd)limMsg->bodyptr ; + tpDphHashNode pStaDs = NULL ; + tpPESession psessionEntry = NULL; + tANI_U8 sessionId; + if((psessionEntry = peFindSessionByStaId(pMac,pTdlsInd->staIdx,&sessionId))== NULL) + { + limLog(pMac, LOG1, FL("session does not exist for given bssId\n")); + vos_mem_free(limMsg->bodyptr); + limMsg->bodyptr = NULL; + return; + } + if ((pStaDs = dphGetHashEntry(pMac, pTdlsInd->assocId, &psessionEntry->dph.dphHashTable)) == NULL) + { + limLog(pMac, LOG1, FL("pStaDs Does not exist for given staId\n")); + vos_mem_free(limMsg->bodyptr); + limMsg->bodyptr = NULL; + return; + } + if ((STA_ENTRY_TDLS_PEER == pStaDs->staType)) + { + limLog(pMac, LOGE, + FL("received TDLS Indication from the Firmware with Reason Code %d "), + pTdlsInd->reasonCode); + limSendSmeTDLSDelStaInd(pMac, pStaDs, psessionEntry, + pTdlsInd->reasonCode); + } + vos_mem_free(limMsg->bodyptr); + limMsg->bodyptr = NULL; + } + break; +#endif case SIR_HAL_P2P_NOA_ATTR_IND: { tpPESession psessionEntry = &pMac->lim.gpSession[0]; @@ -1426,9 +1481,9 @@ limProcessMessages(tpAniSirGlobal pMac, tpSirMsgQ limMsg) (psessionEntry->pePersona == VOS_P2P_GO_MODE)) { //Save P2P attributes for P2P Go persona - palCopyMemory(pMac->hHdd,&psessionEntry->p2pGoPsUpdate, limMsg->bodyptr,sizeof(tSirP2PNoaAttr)); - - + vos_mem_copy(&psessionEntry->p2pGoPsUpdate, limMsg->bodyptr, + sizeof(tSirP2PNoaAttr)); + limLog(pMac, LOG2, FL(" &psessionEntry->bssId%02x:%02x:%02x:%02x:%02x:%02x ctWin=%d oppPsFlag=%d"), psessionEntry->bssId[0], psessionEntry->bssId[1], @@ -1451,7 +1506,7 @@ limProcessMessages(tpAniSirGlobal pMac, tpSirMsgQ limMsg) } } - palFreeMemory(pMac->hHdd, (tANI_U8 *)limMsg->bodyptr); + vos_mem_free(limMsg->bodyptr); limMsg->bodyptr = NULL; break; @@ -1467,7 +1522,7 @@ limProcessMessages(tpAniSirGlobal pMac, tpSirMsgQ limMsg) { limProcessChannelSwitchTimeout(pMac); } - palFreeMemory(pMac->hHdd, (tANI_U8 *)limMsg->bodyptr); + vos_mem_free(limMsg->bodyptr); limMsg->bodyptr = NULL; break; @@ -1497,12 +1552,12 @@ limProcessMessages(tpAniSirGlobal pMac, tpSirMsgQ limMsg) else limHandleMissedBeaconInd(pMac, limMsg); - palFreeMemory(pMac->hHdd, (tANI_U8 *)limMsg->bodyptr); + vos_mem_free(limMsg->bodyptr); limMsg->bodyptr = NULL; break; case WDA_MIC_FAILURE_IND: limMicFailureInd(pMac, limMsg); - palFreeMemory(pMac->hHdd, (tANI_U8 *)limMsg->bodyptr); + vos_mem_free(limMsg->bodyptr); limMsg->bodyptr = NULL; break; @@ -1513,10 +1568,16 @@ limProcessMessages(tpAniSirGlobal pMac, tpSirMsgQ limMsg) break; #ifdef FEATURE_WLAN_CCX case SIR_LIM_CCX_TSM_TIMEOUT: +#ifndef FEATURE_WLAN_CCX_UPLOAD limProcessTsmTimeoutHandler(pMac,limMsg); +#endif /* FEATURE_WLAN_CCX_UPLOAD */ break; case WDA_TSM_STATS_RSP: +#ifdef FEATURE_WLAN_CCX_UPLOAD + limSendSmePECcxTsmRsp(pMac, (tAniGetTsmStatsRsp *)limMsg->bodyptr); +#else limProcessHalCcxTsmRsp(pMac, limMsg); +#endif /* FEATURE_WLAN_CCX_UPLOAD */ break; #endif case WDA_ADD_TS_RSP: @@ -1530,7 +1591,7 @@ limProcessMessages(tpAniSirGlobal pMac, tpSirMsgQ limMsg) limProcessAddBaInd(pMac, limMsg); break; case SIR_LIM_DEL_BA_ALL_IND: - limDelAllBASessions(pMac); // refer notes and change + limDelAllBASessions(pMac); break; case SIR_LIM_DEL_BA_IND: limProcessMlmHalBADeleteInd( pMac, limMsg ); @@ -1564,6 +1625,7 @@ limProcessMessages(tpAniSirGlobal pMac, tpSirMsgQ limMsg) case SIR_LIM_INSERT_SINGLESHOT_NOA_TIMEOUT: case SIR_LIM_DISASSOC_ACK_TIMEOUT: case SIR_LIM_DEAUTH_ACK_TIMEOUT: + case SIR_LIM_CONVERT_ACTIVE_CHANNEL_TO_PASSIVE: // These timeout messages are handled by MLM sub module limProcessMlmReqMessages(pMac, @@ -1958,11 +2020,76 @@ limProcessMessages(tpAniSirGlobal pMac, tpSirMsgQ limMsg) #endif } break; +#ifdef FEATURE_WLAN_TDLS + case WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP: + { + tpPESession psessionEntry; + tANI_U8 sessionId; + tTdlsLinkEstablishParams *pTdlsLinkEstablishParams; + pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams*) limMsg->bodyptr; + + if((psessionEntry = peFindSessionByStaId(pMac, + pTdlsLinkEstablishParams->staIdx, + &sessionId))== NULL) + { + limLog(pMac, LOGE, FL("session %u does not exist.\n"), sessionId); + /* Still send the eWNI_SME_TDLS_LINK_ESTABLISH_RSP message to SME + with session id as zero and status as FAILURE so, that message + queued in SME queue can be freed to prevent the SME cmd buffer leak */ + limSendSmeTdlsLinkEstablishReqRsp(pMac, + 0, + NULL, + NULL, + eSIR_FAILURE); + } + else + { + limSendSmeTdlsLinkEstablishReqRsp(pMac, + psessionEntry->smeSessionId, + NULL, + NULL, + pTdlsLinkEstablishParams->status) ; + } + vos_mem_free((v_VOID_t *)(limMsg->bodyptr)); + limMsg->bodyptr = NULL; + break; + } +#endif case WDA_RX_SCAN_EVENT: limProcessRxScanEvent(pMac, limMsg->bodyptr); break; + case WDA_IBSS_PEER_INACTIVITY_IND: + { + limProcessIbssPeerInactivity(pMac, limMsg->bodyptr); + vos_mem_free((v_VOID_t *)(limMsg->bodyptr)); + limMsg->bodyptr = NULL; + break; + } +#if defined WLAN_FEATURE_RELIABLE_MCAST + case WDA_RMC_BECOME_LEADER: + limProcessRMCMessages(pMac, eLIM_RMC_BECOME_LEADER_RESP, + (void *)limMsg->bodyptr); + vos_mem_free((v_VOID_t*)limMsg->bodyptr); + limMsg->bodyptr = NULL; + break ; + + case WDA_RMC_LEADER_SELECT_RESP: + limProcessRMCMessages(pMac, eLIM_RMC_LEADER_SELECT_RESP, + (void *)limMsg->bodyptr); + vos_mem_free((v_VOID_t*)limMsg->bodyptr); + limMsg->bodyptr = NULL; + break ; + + case WDA_RMC_UPDATE_IND: + limProcessRMCMessages(pMac, eLIM_RMC_LEADER_PICK_NEW, + (void *)limMsg->bodyptr); + vos_mem_free((v_VOID_t*)limMsg->bodyptr); + limMsg->bodyptr = NULL; + break ; +#endif /* defined WLAN_FEATURE_RELIABLE_MCAST */ + default: vos_mem_free((v_VOID_t*)limMsg->bodyptr); limMsg->bodyptr = NULL; @@ -2020,7 +2147,7 @@ limProcessDeferredMessageQueue(tpAniSirGlobal pMac) { while ((readMsg = limReadDeferredMsgQ(pMac)) != NULL) { - palCopyMemory( pMac->hHdd, (tANI_U8*) &limMsg, + vos_mem_copy((tANI_U8*) &limMsg, (tANI_U8*) readMsg, sizeof(tSirMsgQ)); size--; limProcessMessages(pMac, &limMsg); @@ -2089,7 +2216,7 @@ void limProcessNormalHddMsg(tpAniSirGlobal pMac, tSirMsgQ *pLimMsg, tANI_U8 fRsp limLogSessionStates(pMac); limPrintMsgName(pMac, LOGE, pLimMsg->type); // Release body - palFreeMemory( pMac->hHdd, (tANI_U8 *) pLimMsg->bodyptr); + vos_mem_free(pLimMsg->bodyptr); } } else @@ -2109,7 +2236,7 @@ void limProcessNormalHddMsg(tpAniSirGlobal pMac, tSirMsgQ *pLimMsg, tANI_U8 fRsp { // Release body // limProcessSmeReqMessage consumed the buffer. We can free it. - palFreeMemory( pMac->hHdd, (tANI_U8 *) pLimMsg->bodyptr); + vos_mem_free(pLimMsg->bodyptr); } } } diff --git a/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c b/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c index 22b2159304b1..66de9c2cce61 100644 --- a/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c +++ b/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c @@ -57,7 +57,9 @@ #ifdef WLAN_FEATURE_VOWIFI_11R #include #endif - +#ifdef FEATURE_WLAN_DIAG_SUPPORT_LIM +#include "vos_diag_core_log.h" +#endif // MLM REQ processing function templates @@ -155,6 +157,8 @@ limProcessMlmReqMessages(tpAniSirGlobal pMac, tpSirMsgQ Msg) case SIR_LIM_REMAIN_CHN_TIMEOUT: limProcessRemainOnChnTimeout(pMac); break; case SIR_LIM_INSERT_SINGLESHOT_NOA_TIMEOUT: limProcessInsertSingleShotNOATimeout(pMac); break; + case SIR_LIM_CONVERT_ACTIVE_CHANNEL_TO_PASSIVE: + limConvertActiveChannelToPassiveChannel(pMac); break; case SIR_LIM_DISASSOC_ACK_TIMEOUT: limProcessDisassocAckTimeout(pMac); break; case SIR_LIM_DEAUTH_ACK_TIMEOUT: limProcessDeauthAckTimeout(pMac); break; case LIM_MLM_ADDBA_REQ: limProcessMlmAddBAReq( pMac, Msg->bodyptr ); break; @@ -592,6 +596,133 @@ void limContinuePostChannelScan(tpAniSirGlobal pMac) + +/* limCovertChannelScanType() + * + *FUNCTION: + * This function is called to get the list, change the channel type and set again. + * + *LOGIC: + * + *ASSUMPTIONS: + * NA + * + *NOTE: If a channel is ACTIVE, this function will make it as PASSIVE + * If a channel is PASSIVE, this fucntion will make it as ACTIVE + * NA + * + * @param pMac - Pointer to Global MAC structure + * channelNum - Channel which need to be convert + PassiveToActive - Boolean flag to convert channel + * + * @return None + */ + + +void limCovertChannelScanType(tpAniSirGlobal pMac,tANI_U8 channelNum, tANI_BOOLEAN passiveToActive) +{ + + tANI_U32 i; + tANI_U8 channelPair[WNI_CFG_SCAN_CONTROL_LIST_LEN]; + tANI_U32 len = WNI_CFG_SCAN_CONTROL_LIST_LEN; + if (wlan_cfgGetStr(pMac, WNI_CFG_SCAN_CONTROL_LIST, channelPair, &len) + != eSIR_SUCCESS) + { + PELOGE(limLog(pMac, LOGE, FL("Unable to get scan control list"));) + return ; + } + if (len > WNI_CFG_SCAN_CONTROL_LIST_LEN) + { + limLog(pMac, LOGE, FL("Invalid scan control list length:%d"), len); + return ; + } + for (i=0; (i+1) < len; i+=2) + { + if (channelPair[i] == channelNum) + { + if ((eSIR_PASSIVE_SCAN == channelPair[i+1]) && TRUE == passiveToActive) + { + PELOG1(limLog(pMac, LOG1, FL("Channel %d changed from Passive to Active"), + channelNum);) + channelPair[i+1] = eSIR_ACTIVE_SCAN; + break ; + } + if ((eSIR_ACTIVE_SCAN == channelPair[i+1]) && FALSE == passiveToActive) + { + PELOG1(limLog(pMac, LOG1, FL("Channel %d changed from Active to Passive"), + channelNum);) + channelPair[i+1] = eSIR_PASSIVE_SCAN; + break ; + } + } + } + + cfgSetStrNotify(pMac, WNI_CFG_SCAN_CONTROL_LIST, (tANI_U8 *)channelPair, len, FALSE); + return ; +} + + + + +/* limSetDFSChannelList() + * + *FUNCTION: + * This function is called to convert DFS channel list to active channel list when any + * beacon is present on that channel. This function store time for passive channels + * which help to know that for how much time channel has been passive. + * + *LOGIC: + * + *ASSUMPTIONS: + * NA + * + *NOTE: If a channel is ACTIVE, it won't store any time + * If a channel is PAssive, it will store time as timestamp + * NA + * + * @param pMac - Pointer to Global MAC structure + * dfsChannelList - DFS channel list. + * @return None + */ + +void limSetDFSChannelList(tpAniSirGlobal pMac,tANI_U8 channelNum, tSirDFSChannelList *dfsChannelList) +{ + + tANI_BOOLEAN passiveToActive = TRUE; + if ((1 <= channelNum) && (165 >= channelNum)) + { + if (eANI_BOOLEAN_TRUE == limIsconnectedOnDFSChannel(channelNum)) + { + if (dfsChannelList->timeStamp[channelNum] == 0) + { + //Received first beacon; Convert DFS channel to Active channel. + PELOG1(limLog(pMac, LOG1, FL("Received first beacon on DFS channel: %d"), channelNum);) + limCovertChannelScanType(pMac,channelNum, passiveToActive); + } + dfsChannelList->timeStamp[channelNum] = vos_timer_get_system_time(); + } + else + { + PELOG1(limLog(pMac, LOG1, FL("Channel %d is Active"), channelNum);) + return; + } + if (!tx_timer_running(&pMac->lim.limTimers.gLimActiveToPassiveChannelTimer)) + { + tx_timer_activate(&pMac->lim.limTimers.gLimActiveToPassiveChannelTimer); + } + } + else + { + PELOGE(limLog(pMac, LOGE, FL("Invalid Channel: %d"), channelNum);) + return; + } + + return; +} + + + + /* * Creates a Raw frame to be sent before every Scan, if required. * If only infra link is active (mlmState = Link Estb), then send Data Null @@ -694,21 +825,21 @@ limSendHalInitScanReq(tpAniSirGlobal pMac, tLimLimHalScanState nextState, tSirLi tpInitScanParams pInitScanParam; tSirRetStatus rc = eSIR_SUCCESS; - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pInitScanParam, - sizeof(*pInitScanParam))) + pInitScanParam = vos_mem_malloc(sizeof(*pInitScanParam)); + if ( NULL == pInitScanParam ) { - PELOGW(limLog(pMac, LOGW, FL("palAllocateMemory() failed"));) + PELOGW(limLog(pMac, LOGW, FL("AllocateMemory() failed"));) goto error; } /*Initialize the pInitScanParam with 0*/ - palZeroMemory( pMac->hHdd, (tANI_U8 *)pInitScanParam, sizeof(*pInitScanParam)); + vos_mem_set((tANI_U8 *)pInitScanParam, sizeof(*pInitScanParam), 0); msg.type = WDA_INIT_SCAN_REQ; msg.bodyptr = pInitScanParam; msg.bodyval = 0; - palZeroMemory( pMac->hHdd, (tANI_U8 *)&pInitScanParam->macMgmtHdr, sizeof(tSirMacMgmtHdr)); + vos_mem_set((tANI_U8 *)&pInitScanParam->macMgmtHdr, sizeof(tSirMacMgmtHdr), 0); if (nextState == eLIM_HAL_INIT_LEARN_WAIT_STATE) { pInitScanParam->notifyBss = TRUE; @@ -774,7 +905,7 @@ limSendHalInitScanReq(tpAniSirGlobal pMac, tLimLimHalScanState nextState, tSirLi } SET_LIM_PROCESS_DEFD_MESGS(pMac, true); - palFreeMemory(pMac->hHdd, (void *)pInitScanParam); + vos_mem_free(pInitScanParam); PELOGW(limLog(pMac, LOGW, FL("wdaPostCtrlMsg failed, error code %d"), rc);) error: @@ -818,11 +949,10 @@ limSendHalStartScanReq(tpAniSirGlobal pMac, tANI_U8 channelNum, tLimLimHalScanSt if(pMac->lim.gLimHalScanState != eLIM_HAL_START_SCAN_WAIT_STATE) { - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, - (void **)&pStartScanParam, - sizeof(*pStartScanParam))) + pStartScanParam = vos_mem_malloc(sizeof(*pStartScanParam)); + if ( NULL == pStartScanParam ) { - PELOGW(limLog(pMac, LOGW, FL("palAllocateMemory() failed"));) + PELOGW(limLog(pMac, LOGW, FL("AllocateMemory() failed"));) goto error; } @@ -844,7 +974,7 @@ limSendHalStartScanReq(tpAniSirGlobal pMac, tANI_U8 channelNum, tLimLimHalScanSt } SET_LIM_PROCESS_DEFD_MESGS(pMac, true); - palFreeMemory(pMac->hHdd, (void *)pStartScanParam); + vos_mem_free(pStartScanParam); PELOGW(limLog(pMac, LOGW, FL("wdaPostCtrlMsg failed, error code %d"), rc);) error: @@ -877,16 +1007,20 @@ void limSendHalEndScanReq(tpAniSirGlobal pMac, tANI_U8 channelNum, tLimLimHalSca /** * The End scan request to be sent only if End Scan is not already requested or - * Start scan is not already requestd + * Start scan is not already requestd. + * after finish scan rsp from firmware host is sending endscan request so adding + * check for IDLE SCAN STATE also added to avoid this issue */ if((pMac->lim.gLimHalScanState != eLIM_HAL_END_SCAN_WAIT_STATE) && - (pMac->lim.gLimHalScanState != eLIM_HAL_START_SCAN_WAIT_STATE)) - { - - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pEndScanParam, - sizeof(*pEndScanParam))) + (pMac->lim.gLimHalScanState != eLIM_HAL_IDLE_SCAN_STATE) && + (pMac->lim.gLimHalScanState == eLIM_HAL_SCANNING_STATE) && + (pMac->lim.gLimHalScanState != eLIM_HAL_FINISH_SCAN_WAIT_STATE) && + (pMac->lim.gLimHalScanState != eLIM_HAL_START_SCAN_WAIT_STATE)) + { + pEndScanParam = vos_mem_malloc(sizeof(*pEndScanParam)); + if ( NULL == pEndScanParam ) { - PELOGW(limLog(pMac, LOGW, FL("palAllocateMemory() failed"));) + PELOGW(limLog(pMac, LOGW, FL("AllocateMemory() failed"));) goto error; } @@ -906,7 +1040,7 @@ void limSendHalEndScanReq(tpAniSirGlobal pMac, tANI_U8 channelNum, tLimLimHalSca } SET_LIM_PROCESS_DEFD_MESGS(pMac, true); - palFreeMemory(pMac->hHdd, (void *)pEndScanParam); + vos_mem_free(pEndScanParam); PELOGW(limLog(pMac, LOGW, FL("wdaPostCtrlMsg failed, error code %d"), rc);) error: @@ -971,11 +1105,10 @@ void limSendHalFinishScanReq(tpAniSirGlobal pMac, tLimLimHalScanState nextState) return; } - - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pFinishScanParam, - sizeof(*pFinishScanParam))) + pFinishScanParam = vos_mem_malloc(sizeof(*pFinishScanParam)); + if ( NULL == pFinishScanParam ) { - PELOGW(limLog(pMac, LOGW, FL("palAllocateMemory() failed"));) + PELOGW(limLog(pMac, LOGW, FL("AllocateMemory() failed"));) goto error; } @@ -985,7 +1118,7 @@ void limSendHalFinishScanReq(tpAniSirGlobal pMac, tLimLimHalScanState nextState) peGetResumeChannel(pMac, &pFinishScanParam->currentOperChannel, &pFinishScanParam->cbState); - palZeroMemory( pMac->hHdd, (tANI_U8 *)&pFinishScanParam->macMgmtHdr, sizeof(tSirMacMgmtHdr)); + vos_mem_set((tANI_U8 *)&pFinishScanParam->macMgmtHdr, sizeof(tSirMacMgmtHdr), 0); if (nextState == eLIM_HAL_FINISH_LEARN_WAIT_STATE) { @@ -1027,7 +1160,7 @@ void limSendHalFinishScanReq(tpAniSirGlobal pMac, tLimLimHalScanState nextState) return; } SET_LIM_PROCESS_DEFD_MESGS(pMac, true); - palFreeMemory(pMac->hHdd, (void *)pFinishScanParam); + vos_mem_free(pFinishScanParam); PELOGW(limLog(pMac, LOGW, FL("wdaPostCtrlMsg failed, error code %d"), rc);) error: @@ -1240,18 +1373,23 @@ void limSendHalOemDataReq(tpAniSirGlobal pMac) reqLen = sizeof(tStartOemDataReq); - if(eHAL_STATUS_SUCCESS != palAllocateMemory(pMac->hHdd, (void**)&pStartOemDataReq, reqLen)) + pStartOemDataReq = vos_mem_malloc(reqLen); + if ( NULL == pStartOemDataReq ) { PELOGE(limLog(pMac, LOGE, FL("OEM_DATA: Could not allocate memory for pStartOemDataReq"));) goto error; } - palZeroMemory(pMac->hHdd, (tANI_U8*)(pStartOemDataReq), reqLen); + vos_mem_set((tANI_U8*)(pStartOemDataReq), reqLen, 0); //Now copy over the information to the OEM DATA REQ to HAL - palCopyMemory(pMac->hHdd, pStartOemDataReq->selfMacAddr, pMac->lim.gpLimMlmOemDataReq->selfMacAddr, sizeof(tSirMacAddr)); + vos_mem_copy(pStartOemDataReq->selfMacAddr, + pMac->lim.gpLimMlmOemDataReq->selfMacAddr, + sizeof(tSirMacAddr)); - palCopyMemory(pMac->hHdd, pStartOemDataReq->oemDataReq, pMac->lim.gpLimMlmOemDataReq->oemDataReq, OEM_DATA_REQ_SIZE); + vos_mem_copy(pStartOemDataReq->oemDataReq, + pMac->lim.gpLimMlmOemDataReq->oemDataReq, + OEM_DATA_REQ_SIZE); //Create the message to be passed to HAL msg.type = WDA_START_OEM_DATA_REQ; @@ -1268,14 +1406,15 @@ void limSendHalOemDataReq(tpAniSirGlobal pMac) } SET_LIM_PROCESS_DEFD_MESGS(pMac, true); - palFreeMemory(pMac->hHdd, (void*)pStartOemDataReq); + vos_mem_free(pStartOemDataReq); PELOGE(limLog(pMac, LOGE, FL("OEM_DATA: posting WDA_START_OEM_DATA_REQ to HAL failed"));) error: pMac->lim.gLimMlmState = pMac->lim.gLimPrevMlmState; MTRACE(macTrace(pMac, TRACE_CODE_MLM_STATE, NO_SESSION, pMac->lim.gLimMlmState)); - if(eHAL_STATUS_SUCCESS != palAllocateMemory(pMac->hHdd, (void**)(&pMlmOemDataRsp), sizeof(tLimMlmOemDataRsp))) + pMlmOemDataRsp = vos_mem_malloc(sizeof(tLimMlmOemDataRsp)); + if ( NULL == pMlmOemDataRsp ) { limLog(pMac->hHdd, LOGP, FL("OEM_DATA: memory allocation for pMlmOemDataRsp failed under suspend link failure")); return; @@ -1283,7 +1422,7 @@ error: if(NULL != pMac->lim.gpLimMlmOemDataReq) { - palFreeMemory(pMac->hHdd, pMac->lim.gpLimMlmOemDataReq); + vos_mem_free(pMac->lim.gpLimMlmOemDataReq); pMac->lim.gpLimMlmOemDataReq = NULL; } @@ -1316,19 +1455,20 @@ void limSetOemDataReqModeFailed(tpAniSirGlobal pMac, eHalStatus status, tANI_U32 pMac->lim.gLimMlmState = pMac->lim.gLimPrevMlmState; MTRACE(macTrace(pMac, TRACE_CODE_MLM_STATE, NO_SESSION, pMac->lim.gLimMlmState)); - if(eHAL_STATUS_SUCCESS != palAllocateMemory(pMac->hHdd, (void**)(&pMlmOemDataRsp), sizeof(tLimMlmOemDataRsp))) + pMlmOemDataRsp = vos_mem_malloc(sizeof(tLimMlmOemDataRsp)); + if ( NULL == pMlmOemDataRsp ) { limLog(pMac->hHdd, LOGP, FL("OEM_DATA: memory allocation for pMlmOemDataRsp failed under suspend link failure")); return; } - if(NULL != pMac->lim.gpLimMlmOemDataReq) + if (NULL != pMac->lim.gpLimMlmOemDataReq) { - palFreeMemory(pMac->hHdd, pMac->lim.gpLimMlmOemDataReq); + vos_mem_free(pMac->lim.gpLimMlmOemDataReq); pMac->lim.gpLimMlmOemDataReq = NULL; } - palZeroMemory(pMac->hHdd, pMlmOemDataRsp, sizeof(tLimMlmOemDataRsp)); + vos_mem_set(pMlmOemDataRsp, sizeof(tLimMlmOemDataRsp), 0); limPostSmeMessage(pMac, LIM_MLM_OEM_DATA_CNF, (tANI_U32*)pMlmOemDataRsp); @@ -1389,8 +1529,8 @@ mlm_add_sta( wlan_cfgGetInt(pMac, WNI_CFG_DOT11_MODE, &selfStaDot11Mode); pSta->staType = STA_ENTRY_SELF; // Identifying self - palCopyMemory( pMac->hHdd, pSta->bssId, pBssid, sizeof( tSirMacAddr )); - palCopyMemory( pMac->hHdd, pSta->staMac, psessionEntry->selfMacAddr, sizeof(tSirMacAddr)); + vos_mem_copy(pSta->bssId, pBssid, sizeof( tSirMacAddr )); + vos_mem_copy(pSta->staMac, psessionEntry->selfMacAddr, sizeof(tSirMacAddr)); /* Configuration related parameters to be changed to support BT-AMP */ @@ -1495,24 +1635,24 @@ limMlmAddBss ( // Package WDA_ADD_BSS_REQ message parameters - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, - (void **) &pAddBssParams, sizeof( tAddBssParams ))) + pAddBssParams = vos_mem_malloc(sizeof( tAddBssParams )); + if ( NULL == pAddBssParams ) { - limLog( pMac, LOGE, FL( "Unable to PAL allocate memory during ADD_BSS" )); + limLog( pMac, LOGE, FL( "Unable to allocate memory during ADD_BSS" )); // Respond to SME with LIM_MLM_START_CNF return eSIR_SME_HAL_SEND_MESSAGE_FAIL; } - palZeroMemory(pMac->hHdd, pAddBssParams, sizeof(tAddBssParams)); + vos_mem_set(pAddBssParams, sizeof(tAddBssParams), 0); // Fill in tAddBssParams members - palCopyMemory( pMac->hHdd, pAddBssParams->bssId, pMlmStartReq->bssId, + vos_mem_copy(pAddBssParams->bssId, pMlmStartReq->bssId, sizeof( tSirMacAddr )); // Fill in tAddBssParams selfMacAddr - palCopyMemory ( pMac->hHdd, pAddBssParams->selfMacAddr, - psessionEntry->selfMacAddr, - sizeof( tSirMacAddr )); + vos_mem_copy (pAddBssParams->selfMacAddr, + psessionEntry->selfMacAddr, + sizeof( tSirMacAddr )); pAddBssParams->bssType = pMlmStartReq->bssType; if ((pMlmStartReq->bssType == eSIR_IBSS_MODE) || @@ -1534,8 +1674,8 @@ limMlmAddBss ( pAddBssParams->cfParamSet.cfpDurRemaining = pMlmStartReq->cfParamSet.cfpDurRemaining; pAddBssParams->rateSet.numRates = pMlmStartReq->rateSet.numRates; - palCopyMemory( pMac->hHdd, pAddBssParams->rateSet.rate, - pMlmStartReq->rateSet.rate, pMlmStartReq->rateSet.numRates ); + vos_mem_copy(pAddBssParams->rateSet.rate, + pMlmStartReq->rateSet.rate, pMlmStartReq->rateSet.numRates); pAddBssParams->nwType = pMlmStartReq->nwType; @@ -1555,9 +1695,9 @@ limMlmAddBss ( pAddBssParams->sessionId = pMlmStartReq->sessionId; //Send the SSID to HAL to enable SSID matching for IBSS - palCopyMemory( pMac->hHdd, &(pAddBssParams->ssId.ssId), - pMlmStartReq->ssId.ssId, - pMlmStartReq->ssId.length); + vos_mem_copy(&(pAddBssParams->ssId.ssId), + pMlmStartReq->ssId.ssId, + pMlmStartReq->ssId.length); pAddBssParams->ssId.length = pMlmStartReq->ssId.length; pAddBssParams->bHiddenSSIDEn = pMlmStartReq->ssidHidden; limLog( pMac, LOGE, FL( "TRYING TO HIDE SSID %d" ),pAddBssParams->bHiddenSSIDEn); @@ -1586,6 +1726,11 @@ limMlmAddBss ( pAddBssParams->extSetStaKeyParamValid = 0; #endif +#ifdef WLAN_FEATURE_11W + pAddBssParams->rmfEnabled = (psessionEntry->gStartBssRSNIe.RSN_Cap[0] >> 7) & 0x1; + limLog( pMac, LOG1, FL("PMF capable value for BSS is %d"), pAddBssParams->rmfEnabled); +#endif + // // FIXME_GEN4 // A global counter (dialog token) is required to keep track of @@ -1601,7 +1746,7 @@ limMlmAddBss ( if( eSIR_SUCCESS != (retCode = wdaPostCtrlMsg( pMac, &msgQ ))) { limLog( pMac, LOGE, FL("Posting ADD_BSS_REQ to HAL failed, reason=%X"), retCode ); - palFreeMemory(pMac->hHdd,(void *)pAddBssParams); + vos_mem_free(pAddBssParams); return eSIR_SME_HAL_SEND_MESSAGE_FAIL; } @@ -1680,7 +1825,7 @@ limProcessMlmStartReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) - palCopyMemory( pMac->hHdd, pMac->lim.gLimCurrentBssId, + vos_mem_copy( pMac->lim.gLimCurrentBssId, pMlmStartReq->bssId, sizeof(tSirMacAddr)); #endif //TO SUPPORT BT-AMP @@ -1741,7 +1886,7 @@ end: mlmStartCnf.sessionId = pMlmStartReq->sessionId; /// Free up buffer allocated for LimMlmScanReq - palFreeMemory( pMac->hHdd, (tANI_U8 *) pMsgBuf); + vos_mem_free(pMsgBuf); // // Respond immediately to LIM, only if MLME has not been @@ -1828,7 +1973,7 @@ limProcessMlmScanReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) { PELOGE(limLog(pMac, LOGE, FL("Sending START_SCAN from LIM while one req is pending"));) - palFreeMemory( pMac->hHdd, (tANI_U8 *) pMsgBuf); + vos_mem_free(pMsgBuf); /*Send back a failure*/ mlmScanCnf.resultCode = eSIR_SME_SCAN_FAILED; mlmScanCnf.scanResultLength = 0; @@ -1908,7 +2053,7 @@ limProcessMlmScanReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) /// Free up buffer allocated for /// pMac->lim.gLimMlmScanReq - palFreeMemory( pMac->hHdd, (tANI_U8 *) pMsgBuf); + vos_mem_free(pMsgBuf); /// Return Scan confirm with INVALID_PARAMETERS @@ -1959,13 +2104,14 @@ static void limProcessMlmOemDataReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) limPrintMlmState(pMac, LOGW, pMac->lim.gLimMlmState); /// Free up buffer allocated - palFreeMemory( pMac->hHdd, (tANI_U8 *) pMsgBuf); + vos_mem_free(pMsgBuf); /// Return Meas confirm with INVALID_PARAMETERS - if(eHAL_STATUS_SUCCESS == palAllocateMemory(pMac->hHdd, (void**)&pMlmOemDataRsp, sizeof(tLimMlmOemDataRsp))) + pMlmOemDataRsp = vos_mem_malloc(sizeof(tLimMlmOemDataRsp)); + if ( pMlmOemDataRsp != NULL) { limPostSmeMessage(pMac, LIM_MLM_OEM_DATA_CNF, (tANI_U32*)pMlmOemDataRsp); - palFreeMemory(pMac->hHdd, pMlmOemDataRsp); + vos_mem_free(pMlmOemDataRsp); } else { @@ -2118,7 +2264,7 @@ limProcessMlmJoinReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) { #if 0 if (pMac->lim.gpLimMlmJoinReq) - palFreeMemory( pMac->hHdd, pMac->lim.gpLimMlmJoinReq); + vos_mem_free(pMac->lim.gpLimMlmJoinReq); #endif //TO SUPPORT BT-AMP , review 23sep /// Hold onto Join request parameters @@ -2262,7 +2408,7 @@ limProcessMlmAuthReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) (((pStaDs = dphGetHashEntry(pMac, DPH_STA_HASH_INDEX_PEER, &psessionEntry->dph.dphHashTable)) != NULL) && (pMac->lim.gpLimMlmAuthReq->authType == pStaDs->mlmStaContext.authType)) && - (palEqualMemory( pMac->hHdd,pMac->lim.gpLimMlmAuthReq->peerMacAddr, + (vos_mem_compare(pMac->lim.gpLimMlmAuthReq->peerMacAddr, currentBssId, sizeof(tSirMacAddr)) )) || (((preAuthNode = @@ -2354,16 +2500,16 @@ limProcessMlmAuthReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) } end: - palCopyMemory( pMac->hHdd, (tANI_U8 *) &mlmAuthCnf.peerMacAddr, - (tANI_U8 *) &pMac->lim.gpLimMlmAuthReq->peerMacAddr, - sizeof(tSirMacAddr)); + vos_mem_copy((tANI_U8 *) &mlmAuthCnf.peerMacAddr, + (tANI_U8 *) &pMac->lim.gpLimMlmAuthReq->peerMacAddr, + sizeof(tSirMacAddr)); mlmAuthCnf.authType = pMac->lim.gpLimMlmAuthReq->authType; mlmAuthCnf.sessionId = sessionId; /// Free up buffer allocated /// for pMac->lim.gLimMlmAuthReq - palFreeMemory( pMac->hHdd, pMac->lim.gpLimMlmAuthReq); + vos_mem_free( pMac->lim.gpLimMlmAuthReq); pMac->lim.gpLimMlmAuthReq = NULL; limPostSmeMessage(pMac, LIM_MLM_AUTH_CNF, (tANI_U32 *) &mlmAuthCnf); } /*** limProcessMlmAuthReq() ***/ @@ -2407,7 +2553,7 @@ limProcessMlmAssocReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) if( (psessionEntry = peFindSessionBySessionId(pMac,pMlmAssocReq->sessionId) )== NULL) { limLog(pMac, LOGP,FL("Session Does not exist for given sessionID")); - palFreeMemory( pMac->hHdd, (tANI_U8 *) pMlmAssocReq); + vos_mem_free(pMlmAssocReq); return; } @@ -2423,7 +2569,7 @@ limProcessMlmAssocReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) if ( (psessionEntry->limSystemRole != eLIM_AP_ROLE && psessionEntry->limSystemRole != eLIM_BT_AMP_AP_ROLE) && (psessionEntry->limMlmState == eLIM_MLM_AUTHENTICATED_STATE || psessionEntry->limMlmState == eLIM_MLM_JOINED_STATE) && - (palEqualMemory(pMac->hHdd,pMlmAssocReq->peerMacAddr, currentBssId, sizeof(tSirMacAddr))) ) + (vos_mem_compare(pMlmAssocReq->peerMacAddr, currentBssId, sizeof(tSirMacAddr))) ) { /// map the session entry pointer to the AssocFailureTimer @@ -2488,7 +2634,7 @@ end: mlmAssocCnf.sessionId = pMlmAssocReq->sessionId; /// Free up buffer allocated for assocReq - palFreeMemory( pMac->hHdd, (tANI_U8 *) pMlmAssocReq); + vos_mem_free(pMlmAssocReq); limPostSmeMessage(pMac, LIM_MLM_ASSOC_CNF, (tANI_U32 *) &mlmAssocCnf); } /*** limProcessMlmAssocReq() ***/ @@ -2533,7 +2679,7 @@ limProcessMlmReassocReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) if((psessionEntry = peFindSessionBySessionId(pMac,pMlmReassocReq->sessionId)) == NULL) { PELOGE(limLog(pMac, LOGE,FL("Session Does not exist for given sessionId"));) - palFreeMemory( pMac->hHdd, (tANI_U8 *) pMlmReassocReq); + vos_mem_free(pMlmReassocReq); return; } @@ -2541,7 +2687,7 @@ limProcessMlmReassocReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) (psessionEntry->limMlmState == eLIM_MLM_LINK_ESTABLISHED_STATE)) { if (psessionEntry->pLimMlmReassocReq) - palFreeMemory( pMac->hHdd, psessionEntry->pLimMlmReassocReq); + vos_mem_free(psessionEntry->pLimMlmReassocReq); /* Hold Re-Assoc request as part of Session, knock-out pMac */ /// Hold onto Reassoc request parameters @@ -2551,7 +2697,7 @@ limProcessMlmReassocReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) pAuthNode = limSearchPreAuthList(pMac, psessionEntry->limReAssocbssId); if (!pAuthNode && - (!palEqualMemory( pMac->hHdd,pMlmReassocReq->peerMacAddr, + (!vos_mem_compare(pMlmReassocReq->peerMacAddr, psessionEntry->bssId, sizeof(tSirMacAddr)) )) { @@ -2638,7 +2784,7 @@ end: /* Update PE sessio Id*/ mlmReassocCnf.sessionId = pMlmReassocReq->sessionId; /// Free up buffer allocated for reassocReq - palFreeMemory( pMac->hHdd, (tANI_U8 *) pMlmReassocReq); + vos_mem_free(pMlmReassocReq); psessionEntry->pLimReAssocReq = NULL; limPostSmeMessage(pMac, LIM_MLM_REASSOC_CNF, (tANI_U32 *) &mlmReassocCnf); @@ -2691,7 +2837,7 @@ limProcessMlmDisassocReqNtf(tpAniSirGlobal pMac, eHalStatus suspendStatus, tANI_ { case eLIM_STA_ROLE: case eLIM_BT_AMP_STA_ROLE: - if ( !palEqualMemory( pMac->hHdd,pMlmDisassocReq->peerMacAddr, + if ( !vos_mem_compare(pMlmDisassocReq->peerMacAddr, currentBssId, sizeof(tSirMacAddr)) ) { @@ -2765,10 +2911,27 @@ limProcessMlmDisassocReqNtf(tpAniSirGlobal pMac, eHalStatus suspendStatus, tANI_ */ pStaDs->mlmStaContext.mlmState = eLIM_MLM_WT_DEL_STA_RSP_STATE; - limSendDisassocMgmtFrame(pMac, + /* If the reason for disassociation is inactivity of STA, then + dont wait for acknowledgement */ + if ((pMlmDisassocReq->reasonCode == eSIR_MAC_DISASSOC_DUE_TO_INACTIVITY_REASON) && + (psessionEntry->limSystemRole == eLIM_AP_ROLE)) + { + + limSendDisassocMgmtFrame(pMac, + pMlmDisassocReq->reasonCode, + pMlmDisassocReq->peerMacAddr, + psessionEntry, FALSE); + + /* Send Disassoc CNF and receive path cleanup */ + limSendDisassocCnf(pMac); + } + else + { + limSendDisassocMgmtFrame(pMac, pMlmDisassocReq->reasonCode, pMlmDisassocReq->peerMacAddr, psessionEntry, TRUE); + } } else { @@ -2781,15 +2944,15 @@ limProcessMlmDisassocReqNtf(tpAniSirGlobal pMac, eHalStatus suspendStatus, tANI_ goto end; } // Free up buffer allocated for mlmDisassocReq - palFreeMemory( pMac->hHdd, (tANI_U8 *) pMlmDisassocReq); + vos_mem_free(pMlmDisassocReq); } return; end: - palCopyMemory( pMac->hHdd, (tANI_U8 *) &mlmDisassocCnf.peerMacAddr, - (tANI_U8 *) pMlmDisassocReq->peerMacAddr, - sizeof(tSirMacAddr)); + vos_mem_copy((tANI_U8 *) &mlmDisassocCnf.peerMacAddr, + (tANI_U8 *) pMlmDisassocReq->peerMacAddr, + sizeof(tSirMacAddr)); mlmDisassocCnf.aid = pMlmDisassocReq->aid; mlmDisassocCnf.disassocTrigger = pMlmDisassocReq->disassocTrigger; @@ -2797,7 +2960,7 @@ end: mlmDisassocCnf.sessionId = pMlmDisassocReq->sessionId; /// Free up buffer allocated for mlmDisassocReq - palFreeMemory( pMac->hHdd, (tANI_U8 *) pMlmDisassocReq); + vos_mem_free(pMlmDisassocReq); limPostSmeMessage(pMac, LIM_MLM_DISASSOC_CNF, @@ -2814,22 +2977,22 @@ tANI_BOOLEAN limCheckDisassocDeauthAckPending(tpAniSirGlobal pMac, pMlmDeauthReq = pMac->lim.limDisassocDeauthCnfReq.pMlmDeauthReq; if ( (pMlmDisassocReq && - (palEqualMemory( pMac->hHdd,(tANI_U8 *) staMac, + (vos_mem_compare((tANI_U8 *) staMac, (tANI_U8 *) &pMlmDisassocReq->peerMacAddr, sizeof(tSirMacAddr)))) || (pMlmDeauthReq && - (palEqualMemory( pMac->hHdd,(tANI_U8 *) staMac, + (vos_mem_compare((tANI_U8 *) staMac, (tANI_U8 *) &pMlmDeauthReq->peerMacAddr, - sizeof(tSirMacAddr)))) + sizeof(tSirMacAddr)))) ) { - PELOGE(limLog(pMac, LOGE,FL("Disassoc/Deauth ack pending"));) + PELOG1(limLog(pMac, LOG1, FL("Disassoc/Deauth ack pending"));) return eANI_BOOLEAN_TRUE; } else { - PELOGE(limLog(pMac, LOGE,FL("Disassoc/Deauth Ack not pending"));) + PELOG1(limLog(pMac, LOG1, FL("Disassoc/Deauth Ack not pending"));) return eANI_BOOLEAN_FALSE; } } @@ -2842,7 +3005,7 @@ void limCleanUpDisassocDeauthReq(tpAniSirGlobal pMac, tLimMlmDeauthReq *pMlmDeauthReq; pMlmDisassocReq = pMac->lim.limDisassocDeauthCnfReq.pMlmDisassocReq; if (pMlmDisassocReq && - (palEqualMemory( pMac->hHdd,(tANI_U8 *) staMac, + (vos_mem_compare((tANI_U8 *) staMac, (tANI_U8 *) &pMlmDisassocReq->peerMacAddr, sizeof(tSirMacAddr)))) { @@ -2856,14 +3019,14 @@ void limCleanUpDisassocDeauthReq(tpAniSirGlobal pMac, { limDeactivateAndChangeTimer(pMac, eLIM_DISASSOC_ACK_TIMER); } - palFreeMemory(pMac->hHdd, (tANI_U8 *) pMlmDisassocReq); + vos_mem_free(pMlmDisassocReq); pMac->lim.limDisassocDeauthCnfReq.pMlmDisassocReq = NULL; } } pMlmDeauthReq = pMac->lim.limDisassocDeauthCnfReq.pMlmDeauthReq; if (pMlmDeauthReq && - (palEqualMemory( pMac->hHdd,(tANI_U8 *) staMac, + (vos_mem_compare((tANI_U8 *) staMac, (tANI_U8 *) &pMlmDeauthReq->peerMacAddr, sizeof(tSirMacAddr)))) { @@ -2877,7 +3040,7 @@ void limCleanUpDisassocDeauthReq(tpAniSirGlobal pMac, { limDeactivateAndChangeTimer(pMac, eLIM_DEAUTH_ACK_TIMER); } - palFreeMemory( pMac->hHdd, (tANI_U8 *) pMlmDeauthReq); + vos_mem_free(pMlmDeauthReq); pMac->lim.limDisassocDeauthCnfReq.pMlmDeauthReq = NULL; } } @@ -2965,7 +3128,7 @@ limProcessMlmDeauthReqNtf(tpAniSirGlobal pMac, eHalStatus suspendStatus, tANI_U3 { PELOGE(limLog(pMac, LOGE, FL("session does not exist for given sessionId"));) - palFreeMemory( pMac->hHdd, (tANI_U8 *) pMlmDeauthReq); + vos_mem_free(pMlmDeauthReq); return; } #if 0 @@ -2994,7 +3157,7 @@ limProcessMlmDeauthReqNtf(tpAniSirGlobal pMac, eHalStatus suspendStatus, tANI_U3 case eLIM_MLM_AUTHENTICATED_STATE: case eLIM_MLM_WT_ASSOC_RSP_STATE: case eLIM_MLM_LINK_ESTABLISHED_STATE: - if (!palEqualMemory( pMac->hHdd,pMlmDeauthReq->peerMacAddr, + if (!vos_mem_compare(pMlmDeauthReq->peerMacAddr, currentBssId, sizeof(tSirMacAddr)) ) { @@ -3059,7 +3222,7 @@ limProcessMlmDeauthReqNtf(tpAniSirGlobal pMac, eHalStatus suspendStatus, tANI_U3 break; case eLIM_STA_IN_IBSS_ROLE: - palFreeMemory( pMac->hHdd, (tANI_U8 *) pMlmDeauthReq); + vos_mem_free(pMlmDeauthReq); return; @@ -3144,16 +3307,16 @@ limProcessMlmDeauthReqNtf(tpAniSirGlobal pMac, eHalStatus suspendStatus, tANI_U3 return; end: - palCopyMemory( pMac->hHdd, (tANI_U8 *) &mlmDeauthCnf.peerMacAddr, - (tANI_U8 *) pMlmDeauthReq->peerMacAddr, - sizeof(tSirMacAddr)); + vos_mem_copy((tANI_U8 *) &mlmDeauthCnf.peerMacAddr, + (tANI_U8 *) pMlmDeauthReq->peerMacAddr, + sizeof(tSirMacAddr)); mlmDeauthCnf.deauthTrigger = pMlmDeauthReq->deauthTrigger; mlmDeauthCnf.aid = pMlmDeauthReq->aid; mlmDeauthCnf.sessionId = pMlmDeauthReq->sessionId; // Free up buffer allocated // for mlmDeauthReq - palFreeMemory( pMac->hHdd, (tANI_U8 *) pMlmDeauthReq); + vos_mem_free(pMlmDeauthReq); limPostSmeMessage(pMac, LIM_MLM_DEAUTH_CNF, @@ -3286,8 +3449,8 @@ tpPESession psessionEntry; //if TDLS is enabled. #ifndef FEATURE_WLAN_TDLS if((!limIsAddrBC( pMlmSetKeysReq->peerMacAddr ) ) && - (!palEqualMemory( pMac->hHdd,pMlmSetKeysReq->peerMacAddr, - currentBssId, sizeof(tSirMacAddr))) ){ + (!vos_mem_compare(pMlmSetKeysReq->peerMacAddr, + currentBssId, sizeof(tSirMacAddr))) ){ limLog( pMac, LOGW, FL("Received MLM_SETKEYS_REQ with invalid BSSID")); limPrintMacAddr( pMac, pMlmSetKeysReq->peerMacAddr, LOGW ); @@ -3444,7 +3607,7 @@ tLimMlmRemoveKeyCnf mlmRemoveKeyCnf; { PELOGE(limLog(pMac, LOGE, FL("session does not exist for given sessionId"));) - palFreeMemory( pMac->hHdd, (tANI_U8 *) pMsgBuf ); + vos_mem_free(pMsgBuf); return; } @@ -3452,7 +3615,7 @@ tLimMlmRemoveKeyCnf mlmRemoveKeyCnf; if( pMac->lim.gpLimMlmRemoveKeyReq != NULL ) { // Free any previous requests. - palFreeMemory( pMac->hHdd, (tANI_U8 *) pMac->lim.gpLimMlmRemoveKeyReq); + vos_mem_free(pMac->lim.gpLimMlmRemoveKeyReq); pMac->lim.gpLimMlmRemoveKeyReq = NULL; } // Hold onto the RemoveKeys request parameters @@ -3471,10 +3634,10 @@ tLimMlmRemoveKeyCnf mlmRemoveKeyCnf; { case eLIM_STA_ROLE: case eLIM_BT_AMP_STA_ROLE: - if(( limIsAddrBC( pMlmRemoveKeyReq->peerMacAddr ) != true ) && - (!palEqualMemory( pMac->hHdd,pMlmRemoveKeyReq->peerMacAddr, - currentBssId, - sizeof(tSirMacAddr)))) + if (( limIsAddrBC( pMlmRemoveKeyReq->peerMacAddr ) != true ) && + (!vos_mem_compare(pMlmRemoveKeyReq->peerMacAddr, + currentBssId, + sizeof(tSirMacAddr)))) { limLog( pMac, LOGW, FL("Received MLM_REMOVEKEY_REQ with invalid BSSID")); @@ -3586,8 +3749,10 @@ limProcessMinChannelTimeout(tpAniSirGlobal pMac) } #endif - - if (pMac->lim.gLimMlmState == eLIM_MLM_WT_PROBE_RESP_STATE) + /*do not process if we are in finish scan wait state i.e. + scan is aborted or finished*/ + if (pMac->lim.gLimMlmState == eLIM_MLM_WT_PROBE_RESP_STATE && + pMac->lim.gLimHalScanState != eLIM_HAL_FINISH_SCAN_WAIT_STATE) { PELOG1(limLog(pMac, LOG1, FL("Scanning : min channel timeout occurred"));) @@ -3614,6 +3779,9 @@ limProcessMinChannelTimeout(tpAniSirGlobal pMac) } } + limLog(pMac, LOGW, + FL("Sending End Scan req from MIN_CH_TIMEOUT in state %X ch-%d"), + pMac->lim.gLimMlmState,channelNum); limSendHalEndScanReq(pMac, channelNum, eLIM_HAL_END_SCAN_WAIT_STATE); } else @@ -3624,8 +3792,8 @@ limProcessMinChannelTimeout(tpAniSirGlobal pMac) * Log error. */ limLog(pMac, LOGW, - FL("received unexpected MIN channel timeout in state %X"), - pMac->lim.gLimMlmState); + FL("received unexpected MIN channel timeout in mlme state %X and hal scan State %X"), + pMac->lim.gLimMlmState,pMac->lim.gLimHalScanState); limPrintMlmState(pMac, LOGE, pMac->lim.gLimMlmState); } } /*** limProcessMinChannelTimeout() ***/ @@ -3654,9 +3822,11 @@ limProcessMaxChannelTimeout(tpAniSirGlobal pMac) { tANI_U8 channelNum; - - if (pMac->lim.gLimMlmState == eLIM_MLM_WT_PROBE_RESP_STATE || - pMac->lim.gLimMlmState == eLIM_MLM_PASSIVE_SCAN_STATE) + /*do not process if we are in finish scan wait state i.e. + scan is aborted or finished*/ + if ((pMac->lim.gLimMlmState == eLIM_MLM_WT_PROBE_RESP_STATE || + pMac->lim.gLimMlmState == eLIM_MLM_PASSIVE_SCAN_STATE) && + pMac->lim.gLimHalScanState != eLIM_HAL_FINISH_SCAN_WAIT_STATE) { PELOG1(limLog(pMac, LOG1, FL("Scanning : Max channel timed out"));) /** @@ -3682,6 +3852,9 @@ limProcessMaxChannelTimeout(tpAniSirGlobal pMac) channelNum = 1; } } + limLog(pMac, LOGW, + FL("Sending End Scan req from MAX_CH_TIMEOUT in state %X on ch-%d"), + pMac->lim.gLimMlmState,channelNum); limSendHalEndScanReq(pMac, channelNum, eLIM_HAL_END_SCAN_WAIT_STATE); } else @@ -3692,8 +3865,8 @@ limProcessMaxChannelTimeout(tpAniSirGlobal pMac) * Log error. */ limLog(pMac, LOGW, - FL("received unexpected MAX channel timeout in state %X"), - pMac->lim.gLimMlmState); + FL("received unexpected MAX channel timeout in mlme state %X and hal scan state %X"), + pMac->lim.gLimMlmState, pMac->lim.gLimHalScanState); limPrintMlmState(pMac, LOGW, pMac->lim.gLimMlmState); } } /*** limProcessMaxChannelTimeout() ***/ @@ -3814,6 +3987,9 @@ limProcessJoinFailureTimeout(tpAniSirGlobal pMac) tLimMlmJoinCnf mlmJoinCnf; tSirMacAddr bssid; tANI_U32 len; +#ifdef FEATURE_WLAN_DIAG_SUPPORT_LIM //FEATURE_WLAN_DIAG_SUPPORT_LIM + vos_log_rssi_pkt_type *pRssiLog = NULL; +#endif //FEATURE_WLAN_DIAG_SUPPORT_LIM //fetch the sessionEntry based on the sessionId tpPESession psessionEntry; @@ -3823,7 +3999,17 @@ limProcessJoinFailureTimeout(tpAniSirGlobal pMac) limLog(pMac, LOGE, FL("Session Does not exist for given sessionID")); return; } - + +#ifdef FEATURE_WLAN_DIAG_SUPPORT_LIM //FEATURE_WLAN_DIAG_SUPPORT_LIM + WLAN_VOS_DIAG_LOG_ALLOC(pRssiLog, + vos_log_rssi_pkt_type, LOG_WLAN_RSSI_UPDATE_C); + if (pRssiLog) + { + pRssiLog->rssi = psessionEntry->rssi; + } + WLAN_VOS_DIAG_LOG_REPORT(pRssiLog); +#endif //FEATURE_WLAN_DIAG_SUPPORT_LIM + if (psessionEntry->limMlmState == eLIM_MLM_WT_JOIN_BEACON_STATE) { len = sizeof(tSirMacAddr); @@ -3843,7 +4029,10 @@ limProcessJoinFailureTimeout(tpAniSirGlobal pMac) /** * Issue MLM join confirm with timeout reason code */ - PELOGE(limLog(pMac, LOGE, FL(" Join Failure Timeout occurred."));) + PELOGE(limLog(pMac, LOGE, FL(" In state eLIM_MLM_WT_JOIN_BEACON_STATE."));) + PELOGE(limLog(pMac, LOGE, FL(" Join Failure Timeout occurred for session %d with BSS "), + psessionEntry->peSessionId); + limPrintMacAddr(pMac, psessionEntry->bssId, LOGE);) mlmJoinCnf.resultCode = eSIR_SME_JOIN_TIMEOUT_RESULT_CODE; mlmJoinCnf.protStatusCode = eSIR_MAC_UNSPEC_FAILURE_STATUS; @@ -3860,7 +4049,7 @@ limProcessJoinFailureTimeout(tpAniSirGlobal pMac) // Freeup buffer allocated to join request if (psessionEntry->pLimMlmJoinReq) { - palFreeMemory( pMac->hHdd, psessionEntry->pLimMlmJoinReq); + vos_mem_free(psessionEntry->pLimMlmJoinReq); psessionEntry->pLimMlmJoinReq = NULL; } @@ -3908,16 +4097,17 @@ static void limProcessPeriodicJoinProbeReqTimer(tpAniSirGlobal pMac) if((psessionEntry = peFindSessionBySessionId(pMac, pMac->lim.limTimers.gLimPeriodicJoinProbeReqTimer.sessionId))== NULL) { - limLog(pMac, LOGE,FL("session does not exist for given SessionId")); + limLog(pMac, LOGE,FL("session does not exist for given SessionId : %d"), + pMac->lim.limTimers.gLimPeriodicJoinProbeReqTimer.sessionId); return; } if((VOS_TRUE == tx_timer_running(&pMac->lim.limTimers.gLimJoinFailureTimer)) && (psessionEntry->limMlmState == eLIM_MLM_WT_JOIN_BEACON_STATE)) { - palCopyMemory( pMac->hHdd, ssId.ssId, - psessionEntry->ssId.ssId, - psessionEntry->ssId.length); + vos_mem_copy(ssId.ssId, + psessionEntry->ssId.ssId, + psessionEntry->ssId.length); ssId.length = psessionEntry->ssId.length; limSendProbeReqMgmtFrame( pMac, &ssId, @@ -3960,13 +4150,25 @@ limProcessAuthFailureTimeout(tpAniSirGlobal pMac) { //fetch the sessionEntry based on the sessionId tpPESession psessionEntry; +#ifdef FEATURE_WLAN_DIAG_SUPPORT_LIM //FEATURE_WLAN_DIAG_SUPPORT_LIM + vos_log_rssi_pkt_type *pRssiLog = NULL; +#endif //FEATURE_WLAN_DIAG_SUPPORT_LIM if((psessionEntry = peFindSessionBySessionId(pMac, pMac->lim.limTimers.gLimAuthFailureTimer.sessionId))== NULL) { limLog(pMac, LOGP,FL("Session Does not exist for given sessionID")); return; } - +#ifdef FEATURE_WLAN_DIAG_SUPPORT_LIM //FEATURE_WLAN_DIAG_SUPPORT_LIM + WLAN_VOS_DIAG_LOG_ALLOC(pRssiLog, + vos_log_rssi_pkt_type, LOG_WLAN_RSSI_UPDATE_C); + if (pRssiLog) + { + pRssiLog->rssi = psessionEntry->rssi; + } + WLAN_VOS_DIAG_LOG_REPORT(pRssiLog); +#endif //FEATURE_WLAN_DIAG_SUPPORT_LIM + switch (psessionEntry->limMlmState) { case eLIM_MLM_WT_AUTH_FRAME2_STATE: @@ -4095,6 +4297,9 @@ limProcessAssocFailureTimeout(tpAniSirGlobal pMac, tANI_U32 MsgType) tLimMlmAssocCnf mlmAssocCnf; tpPESession psessionEntry; +#ifdef FEATURE_WLAN_DIAG_SUPPORT_LIM //FEATURE_WLAN_DIAG_SUPPORT_LIM + vos_log_rssi_pkt_type *pRssiLog = NULL; +#endif //FEATURE_WLAN_DIAG_SUPPORT_LIM //to fetch the lim/mlm state based on the sessionId, use the below sessionEntry tANI_U8 sessionId; @@ -4113,7 +4318,16 @@ limProcessAssocFailureTimeout(tpAniSirGlobal pMac, tANI_U32 MsgType) limLog(pMac, LOGP,FL("Session Does not exist for given sessionID")); return; } - +#ifdef FEATURE_WLAN_DIAG_SUPPORT_LIM //FEATURE_WLAN_DIAG_SUPPORT_LIM + WLAN_VOS_DIAG_LOG_ALLOC(pRssiLog, + vos_log_rssi_pkt_type, LOG_WLAN_RSSI_UPDATE_C); + if (pRssiLog) + { + pRssiLog->rssi = psessionEntry->rssi; + } + WLAN_VOS_DIAG_LOG_REPORT(pRssiLog); +#endif //FEATURE_WLAN_DIAG_SUPPORT_LIM + /** * Expected Re/Association Response frame * not received within Re/Association Failure Timeout. @@ -4164,7 +4378,7 @@ limProcessAssocFailureTimeout(tpAniSirGlobal pMac, tANI_U32 MsgType) // MLM state machine if (psessionEntry->pLimMlmJoinReq) { - palFreeMemory( pMac->hHdd, psessionEntry->pLimMlmJoinReq); + vos_mem_free(psessionEntry->pLimMlmJoinReq); psessionEntry->pLimMlmJoinReq = NULL; } @@ -4242,7 +4456,7 @@ limCompleteMlmScan(tpAniSirGlobal pMac, tSirResultCodes retCode) // Free up pMac->lim.gLimMlmScanReq if( NULL != pMac->lim.gpLimMlmScanReq ) { - palFreeMemory( pMac->hHdd, pMac->lim.gpLimMlmScanReq); + vos_mem_free(pMac->lim.gpLimMlmScanReq); pMac->lim.gpLimMlmScanReq = NULL; } @@ -4283,7 +4497,7 @@ tpLimMlmAddBACnf pMlmAddBACnf; { PELOGE(limLog(pMac, LOGE, FL("session does not exist for given sessionId"));) - palFreeMemory( pMac->hHdd, (tANI_U8 *) pMsgBuf ); + vos_mem_free(pMsgBuf); return; } @@ -4300,22 +4514,21 @@ tpLimMlmAddBACnf pMlmAddBACnf; if( eSIR_SUCCESS != status ) { // Allocate for LIM_MLM_ADDBA_CNF - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, - (void **) &pMlmAddBACnf, - sizeof( tLimMlmAddBACnf ))) + + pMlmAddBACnf = vos_mem_malloc(sizeof( tLimMlmAddBACnf )); + if ( NULL == pMlmAddBACnf ) { limLog( pMac, LOGP, - FL("palAllocateMemory failed with error code %d")); - palFreeMemory( pMac->hHdd, (tANI_U8 *) pMsgBuf ); + FL("AllocateMemory failed")); + vos_mem_free(pMsgBuf); return; } else { - palZeroMemory( pMac->hHdd, (void *) pMlmAddBACnf, sizeof( tLimMlmAddBACnf )); - palCopyMemory( pMac->hHdd, - (void *) pMlmAddBACnf->peerMacAddr, - (void *) pMlmAddBAReq->peerMacAddr, - sizeof( tSirMacAddr )); + vos_mem_set((void *) pMlmAddBACnf, sizeof( tLimMlmAddBACnf ), 0); + vos_mem_copy((void *) pMlmAddBACnf->peerMacAddr, + (void *) pMlmAddBAReq->peerMacAddr, + sizeof( tSirMacAddr )); pMlmAddBACnf->baDialogToken = pMlmAddBAReq->baDialogToken; pMlmAddBACnf->baTID = pMlmAddBAReq->baTID; @@ -4339,7 +4552,7 @@ tpLimMlmAddBACnf pMlmAddBACnf; } // Free the buffer allocated for tLimMlmAddBAReq - palFreeMemory( pMac->hHdd, (tANI_U8 *) pMsgBuf ); + vos_mem_free(pMsgBuf); } @@ -4376,7 +4589,7 @@ tpLimMlmAddBARsp pMlmAddBARsp; { PELOGE(limLog(pMac, LOGE, FL("session does not exist for given session ID"));) - palFreeMemory( pMac->hHdd, (tANI_U8 *) pMsgBuf ); + vos_mem_free(pMsgBuf); return; } @@ -4402,7 +4615,7 @@ tpLimMlmAddBARsp pMlmAddBARsp; // Free the buffer allocated for tLimMlmAddBARsp - palFreeMemory( pMac->hHdd, (tANI_U8 *) pMsgBuf ); + vos_mem_free(pMsgBuf); } @@ -4438,7 +4651,7 @@ void limProcessMlmDelBAReq( tpAniSirGlobal pMac, if((psessionEntry = peFindSessionBySessionId(pMac,pMlmDelBAReq->sessionId))== NULL) { PELOGE(limLog(pMac, LOGE,FL("session does not exist for given bssId"));) - palFreeMemory( pMac->hHdd, (tANI_U8 *) pMsgBuf ); + vos_mem_free(pMsgBuf); return; } @@ -4470,22 +4683,21 @@ void limProcessMlmDelBAReq( tpAniSirGlobal pMac, // // Allocate for LIM_MLM_DELBA_CNF - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, - (void **) &pMlmDelBACnf, - sizeof( tLimMlmDelBACnf ))) + + pMlmDelBACnf = vos_mem_malloc(sizeof( tLimMlmDelBACnf )); + if ( NULL == pMlmDelBACnf ) { - limLog( pMac, LOGP, FL("palAllocateMemory failed")); - palFreeMemory( pMac->hHdd, (tANI_U8 *) pMsgBuf ); + limLog( pMac, LOGP, FL("AllocateMemory failed")); + vos_mem_free(pMsgBuf); return; } else { - palZeroMemory( pMac->hHdd, (void *) pMlmDelBACnf, sizeof( tLimMlmDelBACnf )); + vos_mem_set((void *) pMlmDelBACnf, sizeof( tLimMlmDelBACnf ), 0); - palCopyMemory( pMac->hHdd, - (void *) pMlmDelBACnf, - (void *) pMlmDelBAReq, - sizeof( tLimMlmDelBAReq )); + vos_mem_copy((void *) pMlmDelBACnf, + (void *) pMlmDelBAReq, + sizeof( tLimMlmDelBAReq )); // Update DELBA result code pMlmDelBACnf->delBAReasonCode = pMlmDelBAReq->delBAReasonCode; @@ -4499,7 +4711,7 @@ void limProcessMlmDelBAReq( tpAniSirGlobal pMac, } // Free the buffer allocated for tLimMlmDelBAReq - palFreeMemory( pMac->hHdd, (tANI_U8 *) pMsgBuf ); + vos_mem_free(pMsgBuf); } @@ -4581,7 +4793,7 @@ limSMPowerSaveStateInd(tpAniSirGlobal pMac, tSirMacHTMIMOPowerSaveState state) if (isEnteringMimoPS(pMac->lim.gHTMIMOPSState, state)) { tSirMacAddr macAddr; /** Obtain the AP's Mac Address */ - palCopyMemory(pMac ->hHdd, (tANI_U8 *)macAddr, psessionEntry->bssId, sizeof(tSirMacAddr)); + vos_mem_copy((tANI_U8 *)macAddr, psessionEntry->bssId, sizeof(tSirMacAddr)); /** Send Action Frame with the corresponding mode */ retStatus = limSendSMPowerStateFrame(pMac, macAddr, state); if (retStatus != eSIR_SUCCESS) { diff --git a/CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c b/CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c index 5c7fb4ff01b9..7e3a12ec9308 100644 --- a/CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c +++ b/CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c @@ -565,22 +565,23 @@ limProcessMlmAuthCnf(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) */ authMode = eSIR_SHARED_KEY; // Trigger MAC based Authentication - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pMlmAuthReq, sizeof(tLimMlmAuthReq))) + pMlmAuthReq = vos_mem_malloc(sizeof(tLimMlmAuthReq)); + if ( NULL == pMlmAuthReq ) { // Log error limLog(pMac, LOGP, - FL("call to palAllocateMemory failed for mlmAuthReq")); + FL("call to AllocateMemory failed for mlmAuthReq")); return; } - palZeroMemory( pMac->hHdd, (tANI_U8 *) pMlmAuthReq, sizeof(tLimMlmAuthReq)); + vos_mem_set((tANI_U8 *) pMlmAuthReq, sizeof(tLimMlmAuthReq), 0); val = sizeof(tSirMacAddr); if (psessionEntry->limSmeState == eLIM_SME_WT_AUTH_STATE) { sirCopyMacAddr(pMlmAuthReq->peerMacAddr,psessionEntry->bssId); } else - palCopyMemory( pMac->hHdd, (tANI_U8 *) &pMlmAuthReq->peerMacAddr, - (tANI_U8 *) &pMac->lim.gLimPreAuthPeerAddr, + vos_mem_copy((tANI_U8 *) &pMlmAuthReq->peerMacAddr, + (tANI_U8 *) &pMac->lim.gLimPreAuthPeerAddr, sizeof(tSirMacAddr)); pMlmAuthReq->authType = authMode; /* Update PE session Id*/ @@ -646,11 +647,12 @@ limProcessMlmAuthCnf(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) */ PELOG1(limLog(pMac, LOG1, FL("*** Authenticated with BSS ***"));) - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pMlmAssocReq, sizeof(tLimMlmAssocReq))) + pMlmAssocReq = vos_mem_malloc(sizeof(tLimMlmAssocReq)); + if ( NULL == pMlmAssocReq ) { // Log error limLog(pMac, LOGP, - FL("call to palAllocateMemory failed for mlmAssocReq")); + FL("call to AllocateMemory failed for mlmAssocReq")); return; } val = sizeof(tSirMacAddr); @@ -885,7 +887,7 @@ limProcessMlmReassocCnf(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) return; } if (psessionEntry->pLimReAssocReq) { - palFreeMemory( pMac->hHdd, psessionEntry->pLimReAssocReq); + vos_mem_free(psessionEntry->pLimReAssocReq); psessionEntry->pLimReAssocReq = NULL; } @@ -970,11 +972,12 @@ limProcessMlmReassocInd(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) } /// Inform Host of STA reassociation len = sizeof(tSirSmeReassocInd); - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pSirSmeReassocInd, len)) + pSirSmeReassocInd = vos_mem_malloc(len); + if ( NULL == pSirSmeReassocInd ) { // Log error limLog(pMac, LOGP, - FL("call to palAllocateMemory failed for eWNI_SME_REASSOC_IND")); + FL("call to AllocateMemory failed for eWNI_SME_REASSOC_IND")); return; } @@ -1001,7 +1004,7 @@ limProcessMlmReassocInd(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) { limLog( pMac, LOGP, FL("MLM ReAssocInd: Station context no longer valid (aid %d)"), ((tpLimMlmReassocInd) pMsgBuf)->aid); - palFreeMemory(pMac->hHdd, pSirSmeReassocInd); + vos_mem_free(pSirSmeReassocInd); return; } @@ -1044,11 +1047,12 @@ limProcessMlmAuthInd(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) PELOGE(limLog(pMac, LOGE,FL("Buffer is Pointing to NULL"));) return; } - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pSirSmeAuthInd, sizeof(tSirSmeAuthInd))) + pSirSmeAuthInd = vos_mem_malloc(sizeof(tSirSmeAuthInd)); + if ( NULL == pSirSmeAuthInd ) { // Log error limLog(pMac, LOGP, - FL("call to palAllocateMemory failed for eWNI_SME_AUTH_IND")); + FL("call to AllocateMemory failed for eWNI_SME_AUTH_IND")); } limCopyU16((tANI_U8 *) &pSirSmeAuthInd->messageType, eWNI_SME_AUTH_IND); limAuthIndSerDes(pMac, (tpLimMlmAuthInd) pMsgBuf, @@ -1082,27 +1086,29 @@ limFillAssocIndParams(tpAniSirGlobal pMac, tpLimMlmAssocInd pAssocInd, pSirSmeAssocInd->beaconLength = psessionEntry->bcnLen; // Fill in peerMacAddr - palCopyMemory( pMac->hHdd, pSirSmeAssocInd->peerMacAddr, pAssocInd->peerMacAddr, sizeof(tSirMacAddr)); + vos_mem_copy(pSirSmeAssocInd->peerMacAddr, pAssocInd->peerMacAddr, + sizeof(tSirMacAddr)); + // Fill in aid pSirSmeAssocInd->aid = pAssocInd->aid; // Fill in bssId - palCopyMemory( pMac->hHdd, pSirSmeAssocInd->bssId, psessionEntry->bssId, sizeof(tSirMacAddr)); + vos_mem_copy(pSirSmeAssocInd->bssId, psessionEntry->bssId, sizeof(tSirMacAddr)); // Fill in staId //pSirSmeAssocInd->staId = psessionEntry->staId; // Fill in authType pSirSmeAssocInd->authType = pAssocInd->authType; // Fill in ssId - palCopyMemory( pMac->hHdd, (tANI_U8*)&pSirSmeAssocInd->ssId, - (tANI_U8 *) &(pAssocInd->ssId), pAssocInd->ssId.length + 1); + vos_mem_copy((tANI_U8*)&pSirSmeAssocInd->ssId, + (tANI_U8 *) &(pAssocInd->ssId), pAssocInd->ssId.length + 1); pSirSmeAssocInd->rsnIE.length = pAssocInd->rsnIE.length; - palCopyMemory( pMac->hHdd, (tANI_U8*) &pSirSmeAssocInd->rsnIE.rsnIEdata, - (tANI_U8 *) &(pAssocInd->rsnIE.rsnIEdata), - pAssocInd->rsnIE.length); + vos_mem_copy((tANI_U8*) &pSirSmeAssocInd->rsnIE.rsnIEdata, + (tANI_U8 *) &(pAssocInd->rsnIE.rsnIEdata), + pAssocInd->rsnIE.length); pSirSmeAssocInd->addIE.length = pAssocInd->addIE.length; - palCopyMemory( pMac->hHdd, (tANI_U8*) &pSirSmeAssocInd->addIE.addIEdata, - (tANI_U8 *) &(pAssocInd->addIE.addIEdata), - pAssocInd->addIE.length); + vos_mem_copy((tANI_U8*) &pSirSmeAssocInd->addIE.addIEdata, + (tANI_U8 *) &(pAssocInd->addIE.addIEdata), + pAssocInd->addIE.length); // Copy the new TITAN capabilities pSirSmeAssocInd->spectrumMgtIndicator = pAssocInd->spectrumMgtIndicator; @@ -1111,9 +1117,9 @@ limFillAssocIndParams(tpAniSirGlobal pMac, tpLimMlmAssocInd pAssocInd, pSirSmeAssocInd->powerCap.minTxPower = pAssocInd->powerCap.minTxPower; pSirSmeAssocInd->powerCap.maxTxPower = pAssocInd->powerCap.maxTxPower; pSirSmeAssocInd->supportedChannels.numChnl = pAssocInd->supportedChannels.numChnl; - palCopyMemory( pMac->hHdd, (tANI_U8*) &pSirSmeAssocInd->supportedChannels.channelList, + vos_mem_copy((tANI_U8*) &pSirSmeAssocInd->supportedChannels.channelList, (tANI_U8 *) &(pAssocInd->supportedChannels.channelList), - pAssocInd->supportedChannels.numChnl); + pAssocInd->supportedChannels.numChnl); } // Fill in WmmInfo pSirSmeAssocInd->wmmEnabledSta = pAssocInd->WmmStaInfoPresent; @@ -1159,11 +1165,12 @@ limProcessMlmAssocInd(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) } /// Inform Host of STA association len = sizeof(tSirSmeAssocInd); - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pSirSmeAssocInd, len)) + pSirSmeAssocInd = vos_mem_malloc(len); + if ( NULL == pSirSmeAssocInd ) { // Log error limLog(pMac, LOGP, - FL("call to palAllocateMemory failed for eWNI_SME_ASSOC_IND")); + FL("call to AllocateMemory failed for eWNI_SME_ASSOC_IND")); return; } @@ -1178,7 +1185,7 @@ limProcessMlmAssocInd(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) { // good time to panic... limLog(pMac, LOGE, FL("MLM AssocInd: Station context no longer valid (aid %d)"), ((tpLimMlmAssocInd) pMsgBuf)->aid); - palFreeMemory(pMac->hHdd, pSirSmeAssocInd); + vos_mem_free(pSirSmeAssocInd); return; } @@ -1202,19 +1209,22 @@ limProcessMlmAssocInd(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) //tANI_U32 *pMsgBuf; { tpSirSmeAssocCnf pSmeAssoccnf; - if(!palAllocateMemory(pMac->hHdd,(void **)&pSmeAssoccnf,sizeof(tSirSmeAssocCnf))) - PELOGE(limLog(pMac, LOGE, FL("palAllocateMemory failed for pSmeAssoccnf "));) + pSmeAssoccnf = vos_mem_malloc(sizeof(tSirSmeAssocCnf)); + if ( NULL == pSmeAssoccnf ) + PELOGE(limLog(pMac, LOGE, FL("AllocateMemory failed for pSmeAssoccnf "));) pSmeAssoccnf->messageType = eWNI_SME_ASSOC_CNF; pSmeAssoccnf->length = sizeof(tSirSmeAssocCnf); - palCopyMemory( pMac->hHdd,pSmeAssoccnf->peerMacAddr,((tpLimMlmAssocInd)pMsgBuf)->peerMacAddr,6); + vos_mem_copy(pSmeAssoccnf->peerMacAddr, + ((tpLimMlmAssocInd)pMsgBuf)->peerMacAddr, 6); pSmeAssoccnf->statusCode = eSIR_SME_SUCCESS; pSmeAssoccnf->aid = ((tpLimMlmAssocInd)pMsgBuf)->aid; - palCopyMemory( pMac->hHdd, pSmeAssoccnf->alternateBssId,pSmeAssoccnf->peerMacAddr,sizeof(tSirMacAddr)); + vos_mem_copy(pSmeAssoccnf->alternateBssId, + pSmeAssoccnf->peerMacAddr, sizeof(tSirMacAddr)); pSmeAssoccnf->alternateChannelId = 6; - palCopyMemory( pMac->hHdd,pSmeAssoccnf->bssId,psessionEntry->selfMacAddr,6); + vos_mem_copy(pSmeAssoccnf->bssId, psessionEntry->selfMacAddr, 6); pMsgBuf = (tANI_U32)pSmeAssoccnf; __limProcessSmeAssocCnfNew(pMac, eWNI_SME_ASSOC_CNF, pMsgBuf); - palFreeMemory(pMac->hHdd,pSmeAssoccnf); + vos_mem_free(pSmeAssoccnf); } #endif @@ -1714,13 +1724,13 @@ limHandleSmeJoinResult(tpAniSirGlobal pMac, tSirResultCodes resultCode, tANI_U16 pStaDs->mlmStaContext.protStatusCode = protStatusCode; //Done: 7-27-2009. JIM_FIX_ME: at the end of limCleanupRxPath, make sure PE is sending eWNI_SME_JOIN_RSP to SME limCleanupRxPath(pMac, pStaDs, psessionEntry); - palFreeMemory( pMac->hHdd, psessionEntry->pLimJoinReq); + vos_mem_free(psessionEntry->pLimJoinReq); psessionEntry->pLimJoinReq = NULL; return; } } - palFreeMemory( pMac->hHdd, psessionEntry->pLimJoinReq); + vos_mem_free(psessionEntry->pLimJoinReq); psessionEntry->pLimJoinReq = NULL; //Delete teh session if JOIN failure occurred. if(resultCode != eSIR_SME_SUCCESS) @@ -1848,9 +1858,16 @@ void limProcessStaMlmAddStaRsp( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ ,tpPESess limLog( pMac, LOGE, FL( "Encountered NULL Pointer" )); return; } - if( eHAL_STATUS_SUCCESS == pAddStaParams->status ) + if (true == psessionEntry->fDeauthReceived) + { + PELOGE(limLog(pMac, LOGE, + FL("Received Deauth frame in ADD_STA_RESP state"));) + pAddStaParams->status = eHAL_STATUS_FAILURE; + } + + if ( eHAL_STATUS_SUCCESS == pAddStaParams->status ) { - if( eLIM_MLM_WT_ADD_STA_RSP_STATE != psessionEntry->limMlmState) + if ( eLIM_MLM_WT_ADD_STA_RSP_STATE != psessionEntry->limMlmState) { //TODO: any response to be sent out here ? limLog( pMac, LOGE, @@ -1915,11 +1932,15 @@ void limProcessStaMlmAddStaRsp( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ ,tpPESess end: if( 0 != limMsgQ->bodyptr ) { - palFreeMemory( pMac->hHdd, (void *) pAddStaParams ); + vos_mem_free(pAddStaParams); } /* Updating PE session Id*/ mlmAssocCnf.sessionId = psessionEntry->peSessionId; limPostSmeMessage( pMac, mesgType, (tANI_U32 *) &mlmAssocCnf ); + if (true == psessionEntry->fDeauthReceived) + { + psessionEntry->fDeauthReceived = false; + } return; } void limProcessMlmDelBssRsp( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ,tpPESession psessionEntry) @@ -1958,8 +1979,7 @@ void limProcessMlmDelBssRsp( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ,tpPESession if ( eSIR_SUCCESS != limSendExcludeUnencryptInd(pMac, TRUE, psessionEntry) ) { limLog( pMac, LOGE, - FL( "Could not send down Exclude Unencrypted Indication!" ), - psessionEntry->limMlmState ); + FL( "Could not send down Exclude Unencrypted Indication!" ) ); } } #endif @@ -2012,7 +2032,7 @@ void limProcessStaMlmDelBssRsp( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ,tpPESessi end: if( 0 != limMsgQ->bodyptr ) { - palFreeMemory( pMac->hHdd, (void *) pDelBssParams ); + vos_mem_free(pDelBssParams); } if(pStaDs == NULL) return; @@ -2043,7 +2063,7 @@ void limProcessBtAmpApMlmDelBssRsp( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ,tpPES { limLog(pMac, LOGE,FL("Session entry passed is NULL")); if(pDelBss != NULL) - palFreeMemory( pMac->hHdd, (void *) pDelBss ); + vos_mem_free(pDelBss); return; } @@ -2098,7 +2118,7 @@ void limProcessBtAmpApMlmDelBssRsp( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ,tpPES peDeleteSession(pMac, psessionEntry); if(pDelBss != NULL) - palFreeMemory( pMac->hHdd, (void *) pDelBss ); + vos_mem_free(pDelBss); } void limProcessMlmDelStaRsp( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ ) @@ -2117,7 +2137,7 @@ void limProcessMlmDelStaRsp( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ ) { limLog(pMac, LOGP,FL("Session Does not exist or invalid body pointer in message")); if(pDeleteStaParams != NULL) - palFreeMemory( pMac->hHdd, (void *) pDeleteStaParams ); + vos_mem_free(pDeleteStaParams); return; } @@ -2147,7 +2167,7 @@ void limProcessBtAmpApMlmDelStaRsp( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ,tpPES limLog( pMac, LOGE, FL( "DPH Entry for STA %X missing."), pDelStaParams->assocId); statusCode = eSIR_SME_REFUSED; - palFreeMemory( pMac->hHdd, (void *) pDelStaParams ); + vos_mem_free(pDelStaParams); return; } @@ -2172,7 +2192,7 @@ void limProcessBtAmpApMlmDelStaRsp( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ,tpPES limPrintMacAddr(pMac, pStaDs->staAddr, LOG1); if(eLIM_MLM_WT_ASSOC_DEL_STA_RSP_STATE == pStaDs->mlmStaContext.mlmState) { - palFreeMemory( pMac->hHdd, (void *) pDelStaParams ); + vos_mem_free(pDelStaParams); if (limAddSta(pMac, pStaDs, false, psessionEntry) != eSIR_SUCCESS) { PELOGE(limLog(pMac, LOGE, @@ -2208,7 +2228,7 @@ void limProcessBtAmpApMlmDelStaRsp( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ,tpPES statusCode = eSIR_SME_REFUSED; } end: - palFreeMemory( pMac->hHdd, (void *) pDelStaParams ); + vos_mem_free(pDelStaParams); if(eLIM_MLM_WT_ASSOC_DEL_STA_RSP_STATE != pStaDs->mlmStaContext.mlmState) { limPrepareAndSendDelStaCnf(pMac, pStaDs, statusCode,psessionEntry); @@ -2251,7 +2271,7 @@ void limProcessStaMlmDelStaRsp( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ,tpPESessi //we must complete all cleanup related to delSta before calling limDelBSS. if( 0 != limMsgQ->bodyptr ) { - palFreeMemory( pMac->hHdd, (void *) pDelStaParams ); + vos_mem_free(pDelStaParams); } statusCode = (tSirResultCodes) limDelBss(pMac, pStaDs, 0,psessionEntry); return; @@ -2264,7 +2284,7 @@ void limProcessStaMlmDelStaRsp( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ,tpPESessi end: if( 0 != limMsgQ->bodyptr ) { - palFreeMemory( pMac->hHdd, (void *) pDelStaParams ); + vos_mem_free(pDelStaParams); } return; } @@ -2332,7 +2352,7 @@ void limProcessBtAmpApMlmAddStaRsp( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ,tpPES end: if( 0 != limMsgQ->bodyptr ) { - palFreeMemory( pMac->hHdd, (void *) pAddStaParams ); + vos_mem_free(pAddStaParams); } return; } @@ -2388,7 +2408,7 @@ limProcessApMlmAddBssRsp( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ) { PELOGE(limLog(pMac, LOGE,FL("session does not exist for given sessionId"));) if( NULL != pAddBssParams ) - palFreeMemory( pMac->hHdd, (void *) pAddBssParams ); + vos_mem_free(pAddBssParams); return; } /* Update PE session Id*/ @@ -2401,6 +2421,8 @@ limProcessApMlmAddBssRsp( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ) goto end; // Set MLME state psessionEntry->limMlmState = eLIM_MLM_BSS_STARTED_STATE; + psessionEntry->chainMask = pAddBssParams->chainMask; + psessionEntry->smpsMode = pAddBssParams->smpsMode; MTRACE(macTrace(pMac, TRACE_CODE_MLM_STATE, psessionEntry->peSessionId, psessionEntry->limMlmState)); if( eSIR_IBSS_MODE == pAddBssParams->bssType ) { @@ -2413,7 +2435,7 @@ limProcessApMlmAddBssRsp( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ) limResetHBPktCount( psessionEntry ); limHeartBeatDeactivateAndChangeTimer(pMac, psessionEntry); MTRACE(macTrace(pMac, TRACE_CODE_TIMER_ACTIVATE, psessionEntry->peSessionId, eLIM_HEART_BEAT_TIMER)); - if (limActivateHearBeatTimer(pMac) != TX_SUCCESS) + if (limActivateHearBeatTimer(pMac, psessionEntry) != TX_SUCCESS) limLog(pMac, LOGP, FL("could not activate Heartbeat timer")); } psessionEntry->bssIdx = (tANI_U8) pAddBssParams->bssIdx; @@ -2454,7 +2476,7 @@ limProcessApMlmAddBssRsp( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ) limPostSmeMessage( pMac, LIM_MLM_START_CNF, (tANI_U32 *) &mlmStartCnf ); end: if( 0 != limMsgQ->bodyptr ) - palFreeMemory( pMac->hHdd, (void *) pAddBssParams ); + vos_mem_free(pAddBssParams); } @@ -2521,7 +2543,7 @@ limProcessIbssMlmAddBssRsp( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ ,tpPESession /* Timer related functions are not modified for BT-AMP : To be Done */ limHeartBeatDeactivateAndChangeTimer(pMac, psessionEntry); MTRACE(macTrace(pMac, TRACE_CODE_TIMER_ACTIVATE, psessionEntry->peSessionId, eLIM_HEART_BEAT_TIMER)); - if (limActivateHearBeatTimer(pMac) != TX_SUCCESS) + if (limActivateHearBeatTimer(pMac, psessionEntry) != TX_SUCCESS) limLog(pMac, LOGP, FL("could not activate Heartbeat timer")); psessionEntry->bssIdx = (tANI_U8) pAddBssParams->bssIdx; psessionEntry->limSystemRole = eLIM_STA_IN_IBSS_ROLE; @@ -2564,7 +2586,7 @@ limProcessIbssMlmAddBssRsp( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ ,tpPESession limPostSmeMessage( pMac, LIM_MLM_START_CNF, (tANI_U32 *) &mlmStartCnf ); end: if( 0 != limMsgQ->bodyptr ) - palFreeMemory( pMac->hHdd, (void *) pAddBssParams ); + vos_mem_free(pAddBssParams); } static void @@ -2611,11 +2633,12 @@ limProcessStaMlmAddBssRspPreAssoc( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ, tpPES authMode = cfgAuthType; // Trigger MAC based Authentication - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pMlmAuthReq, sizeof(tLimMlmAuthReq))) + pMlmAuthReq = vos_mem_malloc(sizeof(tLimMlmAuthReq)); + if ( NULL == pMlmAuthReq ) { // Log error limLog(pMac, LOGP, - FL("call to palAllocateMemory failed for mlmAuthReq")); + FL("call to AllocateMemory failed for mlmAuthReq")); return; } #if 0 @@ -2674,46 +2697,36 @@ joinFailure: #ifdef WLAN_FEATURE_VOWIFI_11R /*------------------------------------------------------------------------------------------ * - * Function to handle callback after setting link state to post assoc. + * Function to handle WDA_ADD_BSS_RSP, in FT reassoc state. + * Function to Send ReAssociation Request. * * *------------------------------------------------------------------------------------------ */ -void limSetLinkStateForPostAssocCallback(tpAniSirGlobal pMac, void *msgParam ) +static inline void +limProcessStaMlmAddBssRspFT(tpAniSirGlobal pMac, tpSirMsgQ limMsgQ, tpPESession psessionEntry) { tLimMlmReassocCnf mlmReassocCnf; // keep sme - tSetLinkCbackParams * pCbackParams = (tSetLinkCbackParams *)msgParam; - tpPESession psessionEntry = NULL; - tpAddBssParams pAddBssParams = NULL; tpDphHashNode pStaDs = NULL; tpAddStaParams pAddStaParams = NULL; - tLimMlmReassocReq * pMlmReassocReq = NULL; tANI_U32 listenInterval = WNI_CFG_LISTEN_INTERVAL_STADEF; - + tpAddBssParams pAddBssParams = (tpAddBssParams) limMsgQ->bodyptr; /* Sanity Checks */ - if (pCbackParams == NULL) - { - PELOGE(limLog(pMac, LOGE, FL("Invalid parameters"));) - goto end; - } - - pAddBssParams = (tpAddBssParams)(pCbackParams->cbackDataPtr); if (pAddBssParams == NULL) { PELOGE(limLog(pMac, LOGE, FL("Invalid parameters"));) goto end; } - if((psessionEntry = peFindSessionBySessionId(pMac,pAddBssParams->sessionId))== NULL) { limLog( pMac, LOGE, FL( "Session Does not exist for given sessionId" )); goto end; } - - pMlmReassocReq = (tLimMlmReassocReq *)(psessionEntry->pLimMlmReassocReq); - - limPrintMacAddr(pMac, pAddBssParams->bssId, LOG1); + if ( eLIM_MLM_WT_ADD_BSS_RSP_FT_REASSOC_STATE != psessionEntry->limMlmState ) + { + goto end; + } if ((pStaDs = dphAddHashEntry(pMac, pAddBssParams->bssId, DPH_STA_HASH_INDEX_PEER, &psessionEntry->dph.dphHashTable)) == NULL) @@ -2746,9 +2759,12 @@ void limSetLinkStateForPostAssocCallback(tpAniSirGlobal pMac, void *msgParam ) if(NULL == pMac->lim.pSessionEntry->pLimMlmReassocRetryReq) { /* Take a copy of reassoc request for retrying */ - if ( !HAL_STATUS_SUCCESS(palAllocateMemory(pMac->hHdd, (void **)&pMac->lim.pSessionEntry->pLimMlmReassocRetryReq, sizeof(tLimMlmReassocReq))) ) goto end; - palZeroMemory(pMac->hHdd, pMac->lim.pSessionEntry->pLimMlmReassocRetryReq, sizeof(tLimMlmReassocReq)); - palCopyMemory( pMac->hHdd,pMac->lim.pSessionEntry->pLimMlmReassocRetryReq, psessionEntry->pLimMlmReassocReq, sizeof(tLimMlmReassocReq)); + pMac->lim.pSessionEntry->pLimMlmReassocRetryReq = vos_mem_malloc(sizeof(tLimMlmReassocReq)); + if ( NULL == pMac->lim.pSessionEntry->pLimMlmReassocRetryReq ) goto end; + vos_mem_set(pMac->lim.pSessionEntry->pLimMlmReassocRetryReq, sizeof(tLimMlmReassocReq), 0); + vos_mem_copy(pMac->lim.pSessionEntry->pLimMlmReassocRetryReq, + psessionEntry->pLimMlmReassocReq, + sizeof(tLimMlmReassocReq)); } pMac->lim.reAssocRetryAttempt = 0; #endif @@ -2773,20 +2789,20 @@ void limSetLinkStateForPostAssocCallback(tpAniSirGlobal pMac, void *msgParam ) rrmCacheMgmtTxPower( pMac, pAddBssParams->txMgmtPower, psessionEntry ); #endif - if( eHAL_STATUS_SUCCESS != - palAllocateMemory( pMac->hHdd, (void **) &pAddStaParams, sizeof( tAddStaParams ))) + pAddStaParams = vos_mem_malloc(sizeof( tAddStaParams )); + if ( NULL == pAddStaParams ) { - limLog( pMac, LOGP, FL( "Unable to PAL allocate memory during ADD_STA" )); + limLog( pMac, LOGP, FL( "Unable to allocate memory during ADD_STA" )); goto end; } - palZeroMemory( pMac->hHdd, (tANI_U8 *) pAddStaParams, sizeof(tAddStaParams)); + vos_mem_set((tANI_U8 *) pAddStaParams, sizeof(tAddStaParams), 0); /// Add STA context at MAC HW (BMU, RHP & TFP) - palCopyMemory( pMac->hHdd, (tANI_U8 *) pAddStaParams->staMac, - (tANI_U8 *) psessionEntry->selfMacAddr, sizeof(tSirMacAddr)); + vos_mem_copy((tANI_U8 *) pAddStaParams->staMac, + (tANI_U8 *) psessionEntry->selfMacAddr, sizeof(tSirMacAddr)); - palCopyMemory( pMac->hHdd, (tANI_U8 *) pAddStaParams->bssId, - psessionEntry->bssId, sizeof(tSirMacAddr)); + vos_mem_copy((tANI_U8 *) pAddStaParams->bssId, + psessionEntry->bssId, sizeof(tSirMacAddr)); // Update this when we get reassoc rsp , with success. // pAddStaParams->assocId = psessionEntry->limAID; @@ -2804,9 +2820,9 @@ void limSetLinkStateForPostAssocCallback(tpAniSirGlobal pMac, void *msgParam ) pAddStaParams->shortPreambleSupported = (tANI_U8)psessionEntry->beaconParams.fShortPreamble; #ifdef WLAN_FEATURE_11AC - limPopulateOwnRateSet(pMac, &pAddStaParams->supportedRates, NULL, false,psessionEntry, NULL); + limPopulatePeerRateSet(pMac, &pAddStaParams->supportedRates, NULL, false,psessionEntry, NULL); #else - limPopulateOwnRateSet(pMac, &pAddStaParams->supportedRates, NULL, false,psessionEntry); + limPopulatePeerRateSet(pMac, &pAddStaParams->supportedRates, NULL, false,psessionEntry); #endif if( psessionEntry->htCapability) @@ -2850,30 +2866,28 @@ void limSetLinkStateForPostAssocCallback(tpAniSirGlobal pMac, void *msgParam ) // Lets save this for when we receive the Reassoc Rsp pMac->ft.ftPEContext.pAddStaReq = pAddStaParams; - if (pCbackParams != NULL) + if (pAddBssParams != NULL) { - if (pCbackParams->cbackDataPtr != NULL) - { - palFreeMemory( pMac->hHdd, (tANI_U8 *) pCbackParams->cbackDataPtr); - } - palFreeMemory( pMac->hHdd, (tANI_U8 *) pCbackParams); + vos_mem_free(pAddBssParams); + pAddBssParams = NULL; + limMsgQ->bodyptr = NULL; } return; end: // Free up buffer allocated for reassocReq - if (pMlmReassocReq != NULL) + if (psessionEntry != NULL) + if (psessionEntry->pLimMlmReassocReq != NULL) { - palFreeMemory( pMac->hHdd, (tANI_U8 *) pMlmReassocReq); + vos_mem_free(psessionEntry->pLimMlmReassocReq); + psessionEntry->pLimMlmReassocReq = NULL; } - if (pCbackParams != NULL) + if (pAddBssParams != NULL) { - if (pCbackParams->cbackDataPtr != NULL) - { - palFreeMemory( pMac->hHdd, (tANI_U8 *) pCbackParams->cbackDataPtr); - } - palFreeMemory( pMac->hHdd, (tANI_U8 *) pCbackParams); + vos_mem_free(pAddBssParams); + pAddBssParams = NULL; + limMsgQ->bodyptr = NULL; } mlmReassocCnf.resultCode = eSIR_SME_FT_REASSOC_FAILURE; @@ -2886,75 +2900,7 @@ end: limPostSmeMessage(pMac, LIM_MLM_REASSOC_CNF, (tANI_U32 *) &mlmReassocCnf); } -/*------------------------------------------------------------------------------------------ - * - * Function to handle WDA_ADD_BSS_RSP, in FT reassoc state. - * - * - *------------------------------------------------------------------------------------------ - */ -static inline void -limProcessStaMlmAddBssRspFT(tpAniSirGlobal pMac, tpSirMsgQ limMsgQ, tpPESession psessionEntry) -{ - tSetLinkCbackParams * pCbackParam = NULL; - tAddBssParams * pAddBssCbackInfo = NULL; - tLimMlmReassocCnf mlmReassocCnf; - tpAddBssParams pAddBssParams = (tpAddBssParams) limMsgQ->bodyptr; - - if ( eLIM_MLM_WT_ADD_BSS_RSP_FT_REASSOC_STATE != psessionEntry->limMlmState ) - { - goto end; - } - - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **) &pCbackParam, sizeof( tSetLinkCbackParams ))) - { - PELOGE(limLog(pMac, LOGE, FL("Could not allocate memory for LinkState callback params"));) - goto end; - } - - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **) &pAddBssCbackInfo, sizeof( tAddBssParams ))) - { - PELOGE(limLog(pMac, LOGE, FL("Could not allocate memory for Add BSS info callback param"));) - goto end; - } - - vos_mem_copy(pAddBssCbackInfo, pAddBssParams, sizeof(tAddBssParams)); - - pCbackParam->cbackDataPtr = (void*)pAddBssCbackInfo; - - // Set the filter state to post assoc and send out re-assoc request OTA only after response is received - if (limSetLinkState(pMac, eSIR_LINK_POSTASSOC_STATE, - pAddBssParams->bssId, psessionEntry->selfMacAddr, - (tpSetLinkStateCallback)limSetLinkStateForPostAssocCallback, - (void *)pCbackParam) != eSIR_SUCCESS) - { - PELOGE(limLog(pMac, LOGE, FL("Failed to set the LinkState"));) - goto end; - } - - return; - -end: - - if (pCbackParam != NULL) - { - if (pCbackParam->cbackDataPtr != NULL) - { - palFreeMemory( pMac->hHdd, (tANI_U8 *) pCbackParam->cbackDataPtr); - } - palFreeMemory( pMac->hHdd, (tANI_U8 *) pCbackParam); - } - - mlmReassocCnf.resultCode = eSIR_SME_FT_REASSOC_FAILURE; - mlmReassocCnf.protStatusCode = eSIR_MAC_UNSPEC_FAILURE_STATUS; - /* Update PE sessio Id*/ - mlmReassocCnf.sessionId = psessionEntry->peSessionId; - - limPostSmeMessage(pMac, LIM_MLM_REASSOC_CNF, (tANI_U32 *) &mlmReassocCnf); -} #endif /* WLAN_FEATURE_VOWIFI_11R */ - - /** * limProcessStaMlmAddBssRsp() * @@ -3089,7 +3035,7 @@ limProcessStaMlmAddBssRsp( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ,tpPESession ps } end: if( 0 != limMsgQ->bodyptr ) - palFreeMemory( pMac->hHdd,(void *) pAddBssParams ); + vos_mem_free(pAddBssParams); } @@ -3146,7 +3092,7 @@ void limProcessMlmAddBssRsp( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ ) { limLog( pMac, LOGE, FL( "Session Does not exist for given sessionId" )); if( NULL != pAddBssParams ) - palFreeMemory( pMac->hHdd, (void *) pAddBssParams ); + vos_mem_free(pAddBssParams); return; } /* update PE session Id*/ @@ -3165,7 +3111,7 @@ void limProcessMlmAddBssRsp( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ ) psessionEntry->limMlmState ); mlmStartCnf.resultCode = eSIR_SME_BSS_ALREADY_STARTED_OR_JOINED; if( 0 != limMsgQ->bodyptr ) - palFreeMemory( pMac->hHdd, (void *) pAddBssParams ); + vos_mem_free(pAddBssParams); limPostSmeMessage( pMac, LIM_MLM_START_CNF, (tANI_U32 *) &mlmStartCnf ); } else if ((psessionEntry->bssType == eSIR_BTAMP_AP_MODE)||(psessionEntry->bssType == eSIR_BTAMP_STA_MODE)) @@ -3191,8 +3137,7 @@ void limProcessMlmAddBssRsp( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ ) if ( eSIR_SUCCESS != limSendExcludeUnencryptInd(pMac, FALSE, psessionEntry) ) { limLog( pMac, LOGE, - FL( "Could not send down Exclude Unencrypted Indication!" ), - psessionEntry->limMlmState ); + FL( "Could not send down Exclude Unencrypted Indication!" ) ); } } #endif @@ -3239,7 +3184,7 @@ void limProcessMlmSetStaKeyRsp( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ ) tANI_U8 sessionId = 0; tpPESession psessionEntry; SET_LIM_PROCESS_DEFD_MESGS(pMac, true); - palZeroMemory( pMac->hHdd, (void *)&mlmSetKeysCnf, sizeof( tLimMlmSetKeysCnf )); + vos_mem_set((void *)&mlmSetKeysCnf, sizeof( tLimMlmSetKeysCnf ), 0); //BTAMP if( NULL == limMsgQ->bodyptr ) { @@ -3250,7 +3195,7 @@ void limProcessMlmSetStaKeyRsp( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ ) if((psessionEntry = peFindSessionBySessionId(pMac, sessionId))== NULL) { PELOGE(limLog(pMac, LOGE,FL("session does not exist for given sessionId"));) - palFreeMemory( pMac->hHdd, (void *) limMsgQ->bodyptr ); + vos_mem_free(limMsgQ->bodyptr); return; } if( eLIM_MLM_WT_SET_STA_KEY_STATE != psessionEntry->limMlmState ) @@ -3263,7 +3208,7 @@ void limProcessMlmSetStaKeyRsp( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ ) else mlmSetKeysCnf.resultCode = (tANI_U16) (((tpSetStaKeyParams) limMsgQ->bodyptr)->status); - palFreeMemory( pMac->hHdd, (void *) limMsgQ->bodyptr ); + vos_mem_free(limMsgQ->bodyptr); // Restore MLME state psessionEntry->limMlmState = psessionEntry->limPrevMlmState; MTRACE(macTrace(pMac, TRACE_CODE_MLM_STATE, psessionEntry->peSessionId, psessionEntry->limMlmState)); @@ -3273,9 +3218,11 @@ void limProcessMlmSetStaKeyRsp( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ ) // Prepare and Send LIM_MLM_SETKEYS_CNF if( NULL != lpLimMlmSetKeysReq ) { - palCopyMemory( pMac->hHdd, (tANI_U8 *) &mlmSetKeysCnf.peerMacAddr, (tANI_U8 *) lpLimMlmSetKeysReq->peerMacAddr, sizeof(tSirMacAddr) ); + vos_mem_copy((tANI_U8 *) &mlmSetKeysCnf.peerMacAddr, + (tANI_U8 *) lpLimMlmSetKeysReq->peerMacAddr, + sizeof(tSirMacAddr)); // Free the buffer cached for the global pMac->lim.gpLimMlmSetKeysReq - palFreeMemory(pMac->hHdd, (tANI_U8 *) pMac->lim.gpLimMlmSetKeysReq); + vos_mem_free(pMac->lim.gpLimMlmSetKeysReq); pMac->lim.gpLimMlmSetKeysReq = NULL; } mlmSetKeysCnf.sessionId = sessionId; @@ -3290,7 +3237,7 @@ void limProcessMlmSetBssKeyRsp( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ ) tANI_U8 sessionId = 0; tpPESession psessionEntry; SET_LIM_PROCESS_DEFD_MESGS(pMac, true); - palZeroMemory( pMac->hHdd, (void *)&mlmSetKeysCnf, sizeof( tLimMlmSetKeysCnf )); + vos_mem_set((void *)&mlmSetKeysCnf, sizeof( tLimMlmSetKeysCnf ), 0); //BTAMP if( NULL == limMsgQ->bodyptr ) { @@ -3301,7 +3248,7 @@ void limProcessMlmSetBssKeyRsp( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ ) if((psessionEntry = peFindSessionBySessionId(pMac, sessionId))== NULL) { PELOGE(limLog(pMac, LOGE,FL("session does not exist for given sessionId"));) - palFreeMemory( pMac->hHdd, (void *) limMsgQ->bodyptr ); + vos_mem_free( limMsgQ->bodyptr ); return; } if( eLIM_MLM_WT_SET_BSS_KEY_STATE == psessionEntry->limMlmState ) @@ -3328,7 +3275,7 @@ void limProcessMlmSetBssKeyRsp( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ ) else mlmSetKeysCnf.resultCode = resultCode; - palFreeMemory( pMac->hHdd, (void *) limMsgQ->bodyptr ); + vos_mem_free(limMsgQ->bodyptr); // Restore MLME state psessionEntry->limMlmState = psessionEntry->limPrevMlmState; @@ -3341,9 +3288,11 @@ void limProcessMlmSetBssKeyRsp( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ ) // Prepare and Send LIM_MLM_SETKEYS_CNF if( NULL != lpLimMlmSetKeysReq ) { - palCopyMemory( pMac->hHdd, (tANI_U8 *) &mlmSetKeysCnf.peerMacAddr, (tANI_U8 *) lpLimMlmSetKeysReq->peerMacAddr, sizeof(tSirMacAddr) ); + vos_mem_copy((tANI_U8 *) &mlmSetKeysCnf.peerMacAddr, + (tANI_U8 *) lpLimMlmSetKeysReq->peerMacAddr, + sizeof(tSirMacAddr)); // Free the buffer cached for the global pMac->lim.gpLimMlmSetKeysReq - palFreeMemory(pMac->hHdd, (tANI_U8 *) pMac->lim.gpLimMlmSetKeysReq); + vos_mem_free(pMac->lim.gpLimMlmSetKeysReq); pMac->lim.gpLimMlmSetKeysReq = NULL; } limPostSmeMessage(pMac, LIM_MLM_SETKEYS_CNF, (tANI_U32 *) &mlmSetKeysCnf); @@ -3373,7 +3322,7 @@ void limProcessMlmRemoveKeyRsp( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ ) tANI_U8 sessionId = 0; tpPESession psessionEntry; SET_LIM_PROCESS_DEFD_MESGS(pMac, true); - palZeroMemory( pMac->hHdd, (void *) &mlmRemoveCnf, sizeof( tLimMlmRemoveKeyCnf )); + vos_mem_set((void *) &mlmRemoveCnf, sizeof( tLimMlmRemoveKeyCnf ), 0); if( NULL == limMsgQ->bodyptr ) { @@ -3416,7 +3365,7 @@ void limProcessMlmRemoveKeyRsp( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ ) // Need to inspect tSirMsgQ.reserved for a valid Dialog token! // - palFreeMemory( pMac->hHdd, (void *) limMsgQ->bodyptr ); + vos_mem_free(limMsgQ->bodyptr); // Restore MLME state psessionEntry->limMlmState = psessionEntry->limPrevMlmState; @@ -3430,10 +3379,11 @@ void limProcessMlmRemoveKeyRsp( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ ) // Prepare and Send LIM_MLM_REMOVEKEY_CNF if( NULL != lpLimMlmRemoveKeyReq ) { - palCopyMemory( pMac->hHdd, (tANI_U8 *) &mlmRemoveCnf.peerMacAddr, (tANI_U8 *) lpLimMlmRemoveKeyReq->peerMacAddr, - sizeof( tSirMacAddr )); + vos_mem_copy((tANI_U8 *) &mlmRemoveCnf.peerMacAddr, + (tANI_U8 *) lpLimMlmRemoveKeyReq->peerMacAddr, + sizeof( tSirMacAddr )); // Free the buffer cached for the global pMac->lim.gpLimMlmRemoveKeyReq - palFreeMemory(pMac->hHdd, (tANI_U8 *) pMac->lim.gpLimMlmRemoveKeyReq); + vos_mem_free(pMac->lim.gpLimMlmRemoveKeyReq); pMac->lim.gpLimMlmRemoveKeyReq = NULL; } limPostSmeMessage( pMac, LIM_MLM_REMOVEKEY_CNF, (tANI_U32 *) &mlmRemoveCnf ); @@ -3457,20 +3407,32 @@ void limProcessInitScanRsp(tpAniSirGlobal pMac, void *body) SET_LIM_PROCESS_DEFD_MESGS(pMac, true); pInitScanParam = (tpInitScanParams) body; status = pInitScanParam->status; - palFreeMemory( pMac->hHdd, (char *)body); + vos_mem_free(body); //Only abort scan if the we are scanning. if( pMac->lim.abortScan && (eLIM_HAL_INIT_SCAN_WAIT_STATE == pMac->lim.gLimHalScanState) ) { - limLog( pMac, LOGW, FL(" finish scan") ); + limLog( pMac, LOGW, FL(" abort scan") ); pMac->lim.abortScan = 0; limDeactivateAndChangeTimer(pMac, eLIM_MIN_CHANNEL_TIMER); limDeactivateAndChangeTimer(pMac, eLIM_MAX_CHANNEL_TIMER); //Set the resume channel to Any valid channel (invalid). //This will instruct HAL to set it to any previous valid channel. peSetResumeChannel(pMac, 0, 0); - limSendHalFinishScanReq(pMac, eLIM_HAL_FINISH_SCAN_WAIT_STATE); + if (status != eHAL_STATUS_SUCCESS) + { + PELOGW(limLog(pMac, LOGW, FL("InitScnRsp failed status=%d"),status);) + pMac->lim.gLimHalScanState = eLIM_HAL_IDLE_SCAN_STATE; + pMac->lim.gLimNumOfConsecutiveBkgndScanFailure += 1; + limCompleteMlmScan(pMac, eSIR_SME_HAL_SCAN_INIT_FAILED); + return; + } + else + { + limSendHalFinishScanReq(pMac, eLIM_HAL_FINISH_SCAN_WAIT_STATE); + } + } switch(pMac->lim.gLimHalScanState) { @@ -3589,7 +3551,7 @@ end: { /* Update PE session Id*/ mlmReassocCnf.sessionId = pMlmReassocReq->sessionId; - palFreeMemory( pMac->hHdd, (tANI_U8 *) pMlmReassocReq); + vos_mem_free(pMlmReassocReq); } else { @@ -3656,9 +3618,9 @@ static void limProcessSwitchChannelJoinReq(tpAniSirGlobal pMac, tpPESession pses // Apply previously set configuration at HW limApplyConfiguration(pMac, psessionEntry); /// Wait for Beacon to announce join success - palCopyMemory( pMac->hHdd, ssId.ssId, - psessionEntry->ssId.ssId, - psessionEntry->ssId.length); + vos_mem_copy(ssId.ssId, + psessionEntry->ssId.ssId, + psessionEntry->ssId.length); ssId.length = psessionEntry->ssId.length; limDeactivateAndChangeTimer(pMac, eLIM_PERIODIC_JOIN_PROBE_REQ_TIMER); @@ -3697,7 +3659,7 @@ static void limProcessSwitchChannelJoinReq(tpAniSirGlobal pMac, tpPESession pses error: if(NULL != psessionEntry) { - palFreeMemory( pMac->hHdd, (tANI_U8 *) (psessionEntry->pLimMlmJoinReq)); + vos_mem_free(psessionEntry->pLimMlmJoinReq); psessionEntry->pLimMlmJoinReq = NULL; mlmJoinCnf.sessionId = psessionEntry->peSessionId; } @@ -3745,7 +3707,7 @@ void limProcessSwitchChannelRsp(tpAniSirGlobal pMac, void *body) peSessionId = pChnlParams->peSessionId; if((psessionEntry = peFindSessionBySessionId(pMac, peSessionId))== NULL) { - palFreeMemory( pMac->hHdd, (tANI_U8 *)body); + vos_mem_free(body); limLog(pMac, LOGP, FL("session does not exist for given sessionId")); return; } @@ -3754,9 +3716,11 @@ void limProcessSwitchChannelRsp(tpAniSirGlobal pMac, void *body) //Store this value to use in TPC report IE. rrmCacheMgmtTxPower( pMac, pChnlParams->txMgmtPower, psessionEntry ); #endif - palFreeMemory( pMac->hHdd, (tANI_U8 *)body); + vos_mem_free(body); channelChangeReasonCode = psessionEntry->channelChangeReasonCode; // initialize it back to invalid id + psessionEntry->chainMask = pChnlParams->chainMask; + psessionEntry->smpsMode = pChnlParams->smpsMode; psessionEntry->channelChangeReasonCode = 0xBAD; switch(channelChangeReasonCode) { @@ -3819,7 +3783,7 @@ void limProcessStartScanRsp(tpAniSirGlobal pMac, void *body) //Store start TSF of scan start. This will be stored in BSS params. rrmUpdateStartTSF( pMac, pStartScanParam->startTSF ); #endif - palFreeMemory( pMac->hHdd, (tANI_U8 *)body); + vos_mem_free(body); if( pMac->lim.abortScan ) { limLog( pMac, LOGW, FL(" finish scan") ); @@ -3868,7 +3832,7 @@ void limProcessEndScanRsp(tpAniSirGlobal pMac, void *body) SET_LIM_PROCESS_DEFD_MESGS(pMac, true); pEndScanParam = (tpEndScanParams) body; status = pEndScanParam->status; - palFreeMemory( pMac->hHdd, (char *)body); + vos_mem_free(body); switch(pMac->lim.gLimHalScanState) { case eLIM_HAL_END_SCAN_WAIT_STATE: @@ -3958,7 +3922,11 @@ void limProcessFinishScanRsp(tpAniSirGlobal pMac, void *body) SET_LIM_PROCESS_DEFD_MESGS(pMac, true); pFinishScanParam = (tpFinishScanParams) body; status = pFinishScanParam->status; - palFreeMemory( pMac->hHdd, (char *)body); + vos_mem_free(body); + + limLog(pMac, LOGW, FL("Rcvd FinishScanRsp in state %d"), + pMac->lim.gLimHalScanState); + switch(pMac->lim.gLimHalScanState) { case eLIM_HAL_FINISH_SCAN_WAIT_STATE: @@ -4004,7 +3972,7 @@ void limProcessFinishScanRsp(tpAniSirGlobal pMac, void *body) //end WLAN_SUSPEND_LINK Related default: - limLog(pMac, LOGW, FL("Rcvd FinishScanRsp not in WAIT State, state %d"), + limLog(pMac, LOGE, FL("Rcvd FinishScanRsp not in WAIT State, state %d"), pMac->lim.gLimHalScanState); break; } @@ -4030,9 +3998,6 @@ void limProcessMlmHalAddBARsp( tpAniSirGlobal pMac, tpPESession psessionEntry = NULL; tpAddBAParams pAddBAParams = (tpAddBAParams) limMsgQ->bodyptr; -#ifdef FEATURE_WLAN_DIAG_SUPPORT_LIM //FEATURE_WLAN_DIAG_SUPPORT - limDiagEventReport(pMac, WLAN_PE_DIAG_HAL_ADDBA_RSP_EVENT, psessionEntry, 0, 0); -#endif //FEATURE_WLAN_DIAG_SUPPORT //now LIM can process any defer message. SET_LIM_PROCESS_DEFD_MESGS(pMac, true); if (pAddBAParams == NULL) { @@ -4042,7 +4007,7 @@ void limProcessMlmHalAddBARsp( tpAniSirGlobal pMac, if((psessionEntry = peFindSessionBySessionId(pMac, pAddBAParams->sessionId))==NULL) { PELOGE(limLog(pMac, LOGE,FL("session does not exist for given sessionID: %d"),pAddBAParams->sessionId );) - palFreeMemory(pMac->hHdd, (void*)limMsgQ->bodyptr); + vos_mem_free(limMsgQ->bodyptr); return; } #ifdef FEATURE_WLAN_DIAG_SUPPORT_LIM //FEATURE_WLAN_DIAG_SUPPORT @@ -4050,16 +4015,16 @@ void limProcessMlmHalAddBARsp( tpAniSirGlobal pMac, #endif //FEATURE_WLAN_DIAG_SUPPORT // Allocate for LIM_MLM_ADDBA_CNF - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, - (void **) &pMlmAddBACnf, sizeof( tLimMlmAddBACnf ))) { - limLog( pMac, LOGP, FL(" palAllocateMemory failed with error code %d")); - palFreeMemory(pMac->hHdd, (void*)limMsgQ->bodyptr); + pMlmAddBACnf = vos_mem_malloc(sizeof(tLimMlmAddBACnf)); + if ( NULL == pMlmAddBACnf ) { + limLog( pMac, LOGP, FL(" AllocateMemory failed for pMlmAddBACnf")); + vos_mem_free(limMsgQ->bodyptr); return; } - palZeroMemory( pMac->hHdd, (void *) pMlmAddBACnf, sizeof( tLimMlmAddBACnf )); + vos_mem_set((void *) pMlmAddBACnf, sizeof( tLimMlmAddBACnf ), 0); // Copy the peer MAC - palCopyMemory( pMac->hHdd, pMlmAddBACnf->peerMacAddr, pAddBAParams->peerMacAddr, - sizeof( tSirMacAddr )); + vos_mem_copy(pMlmAddBACnf->peerMacAddr, pAddBAParams->peerMacAddr, + sizeof( tSirMacAddr )); // Copy other ADDBA Rsp parameters pMlmAddBACnf->baDialogToken = pAddBAParams->baDialogToken; pMlmAddBACnf->baTID = pAddBAParams->baTID; @@ -4072,7 +4037,7 @@ void limProcessMlmHalAddBARsp( tpAniSirGlobal pMac, pMlmAddBACnf->addBAResultCode = eSIR_MAC_SUCCESS_STATUS; else pMlmAddBACnf->addBAResultCode = eSIR_MAC_UNSPEC_FAILURE_STATUS; - palFreeMemory(pMac->hHdd, (void*)limMsgQ->bodyptr); + vos_mem_free(limMsgQ->bodyptr); // Send ADDBA CNF to LIM limPostSmeMessage( pMac, LIM_MLM_ADDBA_CNF, (tANI_U32 *) pMlmAddBACnf ); } @@ -4104,7 +4069,7 @@ pMlmAddBACnf = (tpLimMlmAddBACnf) pMsgBuf; if((psessionEntry = peFindSessionBySessionId(pMac,pMlmAddBACnf->sessionId))== NULL) { PELOGE(limLog(pMac, LOGE,FL("session does not exist for given BSSId"));) - palFreeMemory( pMac->hHdd, (void *) pMsgBuf ); + vos_mem_free(pMsgBuf); return; } // First, extract the DPH entry @@ -4113,7 +4078,7 @@ pMlmAddBACnf = (tpLimMlmAddBACnf) pMsgBuf; { PELOGE(limLog( pMac, LOGE, FL( "STA context not found - ignoring ADDBA CNF from HAL" ));) - palFreeMemory( pMac->hHdd, (void *) pMsgBuf ); + vos_mem_free(pMsgBuf); return; } LIM_GET_STA_BA_STATE(pSta, pMlmAddBACnf->baTID, &curBaState); @@ -4123,7 +4088,7 @@ pMlmAddBACnf = (tpLimMlmAddBACnf) pMsgBuf; PELOGE(limLog( pMac, LOGE, FL( "Received unexpected ADDBA CNF when STA BA state is %d" ), curBaState );) - palFreeMemory( pMac->hHdd, (void *) pMsgBuf ); + vos_mem_free(pMsgBuf); return; } // Restore STA BA state @@ -4165,7 +4130,7 @@ pMlmAddBACnf = (tpLimMlmAddBACnf) pMsgBuf; } } // Free the memory allocated for LIM_MLM_ADDBA_CNF - palFreeMemory( pMac->hHdd, (void *) pMsgBuf ); + vos_mem_free(pMsgBuf); } /** * \brief Process LIM_MLM_DELBA_CNF @@ -4197,7 +4162,7 @@ void limProcessMlmDelBACnf( tpAniSirGlobal pMac, if((psessionEntry = peFindSessionBySessionId(pMac, pMlmDelBACnf->sessionId))== NULL) { limLog(pMac, LOGP,FL("Session Does not exist for given sessionID")); - palFreeMemory( pMac->hHdd, (void *) pMsgBuf ); + vos_mem_free(pMsgBuf); return; } // First, extract the DPH entry @@ -4206,7 +4171,7 @@ void limProcessMlmDelBACnf( tpAniSirGlobal pMac, { limLog( pMac, LOGE, FL( "STA context not found - ignoring DELBA CNF from HAL" )); - palFreeMemory( pMac->hHdd, (void *) pMsgBuf ); + vos_mem_free(pMsgBuf); return; } if(NULL == pMlmDelBACnf) @@ -4222,13 +4187,13 @@ void limProcessMlmDelBACnf( tpAniSirGlobal pMac, limLog( pMac, LOGE, FL( "Received unexpected DELBA CNF when STA BA state is %d" ), curBaState ); - palFreeMemory( pMac->hHdd, (void *) pMsgBuf ); + vos_mem_free(pMsgBuf); return; } // Restore STA BA state LIM_SET_STA_BA_STATE(pSta, pMlmDelBACnf->baTID, eLIM_BA_STATE_IDLE); // Free the memory allocated for LIM_MLM_DELBA_CNF - palFreeMemory( pMac->hHdd, (void *) pMsgBuf ); + vos_mem_free(pMsgBuf); } /** * \brief Process SIR_LIM_DEL_BA_IND @@ -4257,7 +4222,7 @@ void limProcessMlmHalBADeleteInd( tpAniSirGlobal pMac, if((psessionEntry = peFindSessionByBssid(pMac,pBADeleteParams->bssId,&sessionId))== NULL) { PELOGE(limLog(pMac, LOGE,FL("session does not exist for given BSSId"));) - palFreeMemory( pMac->hHdd, (void *) limMsgQ->bodyptr ); + vos_mem_free(limMsgQ->bodyptr); return; } // First, extract the DPH entry @@ -4320,7 +4285,7 @@ void limProcessMlmHalBADeleteInd( tpAniSirGlobal pMac, } returnAfterCleanup: // Free the memory allocated for SIR_LIM_DEL_BA_IND - palFreeMemory( pMac->hHdd, (void *) limMsgQ->bodyptr ); + vos_mem_free(limMsgQ->bodyptr); } /** * @function : limProcessSetMimoRsp() @@ -4378,7 +4343,7 @@ limProcessSetMimoRsp(tpAniSirGlobal pMac, tpSirMsgQ limMsg) tSirMacAddr macAddr; /** Obtain the AP's Mac Address */ - palCopyMemory(pMac -> hHdd, (tANI_U8 *)macAddr, pMac->lim.gLimBssid, sizeof(tSirMacAddr)); + vos_mem_copy((tANI_U8 *)macAddr, pMac->lim.gLimBssid, sizeof(tSirMacAddr)); /** Send Action Frame with the corresponding mode */ retStatus = limSendSMPowerStateFrame(pMac, macAddr, pMIMO_PSParams->htMIMOPSState); @@ -4390,7 +4355,7 @@ limProcessSetMimoRsp(tpAniSirGlobal pMac, tpSirMsgQ limMsg) PELOG1(limLog(pMac, LOG1, FL("The Setting up of LimGlobals is successful for MIMOPS"));) }while(0); - palFreeMemory( pMac->hHdd, (void *) pMIMO_PSParams ); + vos_mem_free((void *) pMIMO_PSParams); #endif } /** @@ -4468,11 +4433,11 @@ limHandleDelBssInReAssocContext(tpAniSirGlobal pMac, tpDphHashNode pStaDs,tpPESe { mlmReassocCnf.resultCode = eSIR_SME_RESOURCES_UNAVAILABLE; mlmReassocCnf.protStatusCode = eSIR_MAC_UNSPEC_FAILURE_STATUS; - palFreeMemory(pMac->hHdd, assocRsp); + vos_mem_free(assocRsp); pMac->lim.gLimAssocResponseData = NULL; goto Error; } - palFreeMemory(pMac->hHdd, assocRsp); + vos_mem_free(assocRsp); psessionEntry->limAssocResponseData = NULL; } break; @@ -4559,7 +4524,7 @@ limProcessBtampAddBssRsp( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ ,tpPESession ps limPostSmeMessage( pMac, LIM_MLM_START_CNF, (tANI_U32 *) &mlmStartCnf ); end: if( 0 != limMsgQ->bodyptr ) - palFreeMemory( pMac->hHdd, (void *) pAddBssParams ); + vos_mem_free(pAddBssParams); } /** @@ -4592,10 +4557,10 @@ limHandleAddBssInReAssocContext(tpAniSirGlobal pMac, tpDphHashNode pStaDs, tpPES tpDphHashNode pStaDs; tSirRetStatus retStatus = eSIR_SUCCESS; tSchBeaconStruct *pBeaconStruct; - if(eHAL_STATUS_SUCCESS != palAllocateMemory(pMac->hHdd, - (void **)&pBeaconStruct, sizeof(tSchBeaconStruct))) + pBeaconStruct = vos_mem_malloc(sizeof(tSchBeaconStruct)); + if ( NULL == pBeaconStruct ) { - limLog(pMac, LOGE, FL("Unable to PAL allocate memory in limHandleAddBssInReAssocContext") ); + limLog(pMac, LOGE, FL("Unable to allocate memory in limHandleAddBssInReAssocContext") ); mlmReassocCnf.resultCode = eSIR_SME_RESOURCES_UNAVAILABLE; mlmReassocCnf.protStatusCode = eSIR_SME_RESOURCES_UNAVAILABLE; goto Error; @@ -4608,7 +4573,7 @@ limHandleAddBssInReAssocContext(tpAniSirGlobal pMac, tpDphHashNode pStaDs, tpPES PELOGE(limLog(pMac, LOGE, FL("Fail to get STA PEER entry from hash"));) mlmReassocCnf.resultCode = eSIR_SME_RESOURCES_UNAVAILABLE; mlmReassocCnf.protStatusCode = eSIR_SME_SUCCESS; - palFreeMemory(pMac->hHdd, pBeaconStruct); + vos_mem_free(pBeaconStruct); goto Error; } /** While Processing the ReAssoc Response Frame the ReAssocRsp Frame @@ -4641,14 +4606,14 @@ limHandleAddBssInReAssocContext(tpAniSirGlobal pMac, tpDphHashNode pStaDs, tpPES { mlmReassocCnf.resultCode = eSIR_SME_RESOURCES_UNAVAILABLE; mlmReassocCnf.protStatusCode = eSIR_MAC_UNSPEC_FAILURE_STATUS; - palFreeMemory(pMac->hHdd, assocRsp); + vos_mem_free(assocRsp); pMac->lim.gLimAssocResponseData = NULL; - palFreeMemory(pMac->hHdd, pBeaconStruct); + vos_mem_free(pBeaconStruct); goto Error; } - palFreeMemory(pMac->hHdd, assocRsp); + vos_mem_free(assocRsp); psessionEntry->limAssocResponseData = NULL; - palFreeMemory(pMac->hHdd, pBeaconStruct); + vos_mem_free(pBeaconStruct); } break; case eLIM_SME_WT_REASSOC_LINK_FAIL_STATE: { /** Case wherein the DisAssoc / Deauth @@ -4727,7 +4692,7 @@ limProcessSmeAssocCnfNew(tpAniSirGlobal pMac, tANI_U32 msgType, tANI_U32 *pMsgBu goto end; } if ((pStaDs && - (( !palEqualMemory( pMac->hHdd,(tANI_U8 *) pStaDs->staAddr, + (( !vos_mem_compare((tANI_U8 *) pStaDs->staAddr, (tANI_U8 *) assocCnf.peerMacAddr, sizeof(tSirMacAddr)) ) || (pStaDs->mlmStaContext.mlmState != eLIM_MLM_WT_ASSOC_CNF_STATE) || @@ -4775,11 +4740,11 @@ end: { if ( ((tpSirAssocReq)(psessionEntry->parsedAssocReq[pStaDs->assocId]))->assocReqFrame) { - palFreeMemory(pMac->hHdd,((tpSirAssocReq)(psessionEntry->parsedAssocReq[pStaDs->assocId]))->assocReqFrame); + vos_mem_free(((tpSirAssocReq)(psessionEntry->parsedAssocReq[pStaDs->assocId]))->assocReqFrame); ((tpSirAssocReq)(psessionEntry->parsedAssocReq[pStaDs->assocId]))->assocReqFrame = NULL; } - palFreeMemory(pMac->hHdd, psessionEntry->parsedAssocReq[pStaDs->assocId]); + vos_mem_free(psessionEntry->parsedAssocReq[pStaDs->assocId]); psessionEntry->parsedAssocReq[pStaDs->assocId] = NULL; } } /*** end __limProcessSmeAssocCnfNew() ***/ @@ -4795,17 +4760,17 @@ limSendBeaconInd(tpAniSirGlobal pMac, tpPESession psessionEntry){ FL( "Error:Unable to get the PESessionEntry" ));) return; } - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, - (void **) &pBeaconGenParams, (sizeof(*pBeaconGenParams)))) + pBeaconGenParams = vos_mem_malloc(sizeof(*pBeaconGenParams)); + if ( NULL == pBeaconGenParams ) { PELOGE( limLog( pMac, LOGP, - FL( "Unable to PAL allocate memory during sending beaconPreMessage" ));) + FL( "Unable to allocate memory during sending beaconPreMessage" ));) return; } - palZeroMemory( pMac->hHdd, pBeaconGenParams, sizeof(*pBeaconGenParams)); - palCopyMemory( pMac->hHdd, (void *) pBeaconGenParams->bssId, - (void *)psessionEntry->bssId, - SIR_MAC_ADDR_LENGTH ); + vos_mem_set(pBeaconGenParams, sizeof(*pBeaconGenParams), 0); + vos_mem_copy((void *) pBeaconGenParams->bssId, + (void *)psessionEntry->bssId, + SIR_MAC_ADDR_LENGTH ); limMsg.bodyptr = pBeaconGenParams; schProcessPreBeaconInd(pMac, &limMsg); return; @@ -4864,7 +4829,6 @@ void limSendScanOffloadComplete(tpAniSirGlobal pMac, limSendSmeScanRsp(pMac, scanRspLen, pScanEvent->reasonCode, pScanEvent->sessionId, 0); - #ifdef FEATURE_WLAN_SCAN_PNO limSendSmeScanCacheUpdatedInd(); #endif @@ -4876,7 +4840,7 @@ void limProcessRxScanEvent(tpAniSirGlobal pMac, void *buf) tSirScanOffloadEvent *pScanEvent = (tSirScanOffloadEvent *) buf; VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO, - "scan_id = %lu", pScanEvent->scanId); + "scan_id = %u", pScanEvent->scanId); switch (pScanEvent->event) { @@ -4889,7 +4853,7 @@ void limProcessRxScanEvent(tpAniSirGlobal pMac, void *buf) limSendSmeRsp(pMac, eWNI_SME_REMAIN_ON_CHN_RSP, eHAL_STATUS_SUCCESS, pScanEvent->sessionId, 0); - palFreeMemory( pMac->hHdd, pMac->lim.gpLimRemainOnChanReq ); + vos_mem_free(pMac->lim.gpLimRemainOnChanReq); pMac->lim.gpLimRemainOnChanReq = NULL; } else @@ -4923,7 +4887,7 @@ void limProcessRxScanEvent(tpAniSirGlobal pMac, void *buf) case SCAN_EVENT_PREEMPTED: default: VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_DEBUG, - "Received unhandled scan event %lu", pScanEvent->event); + "Received unhandled scan event %u", pScanEvent->event); } vos_mem_free(buf); } diff --git a/CORE/MAC/src/pe/lim/limProcessProbeReqFrame.c b/CORE/MAC/src/pe/lim/limProcessProbeReqFrame.c index ba9a279d17ac..aef1e5a2f5b3 100644 --- a/CORE/MAC/src/pe/lim/limProcessProbeReqFrame.c +++ b/CORE/MAC/src/pe/lim/limProcessProbeReqFrame.c @@ -93,8 +93,8 @@ void limGetWPSPBCSessions(tpAniSirGlobal pMac, tANI_U8 *addr, curTime = (tANI_TIMESTAMP)(palGetTickCount(pMac->hHdd) / PAL_TICKS_PER_SECOND); - palFillMemory( pMac->hHdd, (tANI_U8 *)addr, sizeof(tSirMacAddr), 0); - palFillMemory( pMac->hHdd, (tANI_U8 *)uuid_e, SIR_WPS_UUID_LEN, 0); + vos_mem_set((tANI_U8 *)addr, sizeof(tSirMacAddr), 0); + vos_mem_set((tANI_U8 *)uuid_e, SIR_WPS_UUID_LEN, 0); for (pbc = psessionEntry->pAPWPSPBCSession; pbc; pbc = pbc->next) { @@ -105,8 +105,8 @@ void limGetWPSPBCSessions(tpAniSirGlobal pMac, tANI_U8 *addr, if(count > 1) break; - palCopyMemory(pMac->hHdd, (tANI_U8 *)addr, (tANI_U8 *)pbc->addr, sizeof(tSirMacAddr)); - palCopyMemory(pMac->hHdd, (tANI_U8 *)uuid_e, (tANI_U8 *)pbc->uuid_e, SIR_WPS_UUID_LEN); + vos_mem_copy((tANI_U8 *)addr, (tANI_U8 *)pbc->addr, sizeof(tSirMacAddr)); + vos_mem_copy((tANI_U8 *)uuid_e, (tANI_U8 *)pbc->uuid_e, SIR_WPS_UUID_LEN); } if (count > 1) @@ -159,7 +159,7 @@ static void limRemoveTimeoutPBCsessions(tpAniSirGlobal pMac, tSirWPSPBCSession * PELOG4(sirDumpBuf(pMac, SIR_LIM_MODULE_ID, LOG4, prev->addr, sizeof(tSirMacAddr));) PELOG4(sirDumpBuf(pMac, SIR_LIM_MODULE_ID, LOG4, prev->uuid_e, SIR_WPS_UUID_LEN);) - palFreeMemory(pMac->hHdd, prev); + vos_mem_free(prev); } } @@ -169,12 +169,12 @@ void limRemovePBCSessions(tpAniSirGlobal pMac, tSirMacAddr pRemoveMac,tpPESessio prev = pbc = psessionEntry->pAPWPSPBCSession; while (pbc) { - if (palEqualMemory(pMac->hHdd, (tANI_U8 *)pbc->addr, - (tANI_U8 *)pRemoveMac, sizeof(tSirMacAddr))) { + if (vos_mem_compare((tANI_U8 *)pbc->addr, + (tANI_U8 *)pRemoveMac, sizeof(tSirMacAddr))) { prev->next = pbc->next; if (pbc == psessionEntry->pAPWPSPBCSession) psessionEntry->pAPWPSPBCSession = pbc->next; - palFreeMemory(pMac->hHdd, pbc); + vos_mem_free(pbc); return; } prev = pbc; @@ -224,8 +224,8 @@ static void limUpdatePBCSessionEntry(tpAniSirGlobal pMac, pbc = psessionEntry->pAPWPSPBCSession; while (pbc) { - if (palEqualMemory(pMac->hHdd, (tANI_U8 *)pbc->addr, (tANI_U8 *)addr, sizeof(tSirMacAddr)) && - palEqualMemory(pMac->hHdd, (tANI_U8 *)pbc->uuid_e, (tANI_U8 *)uuid_e, SIR_WPS_UUID_LEN)) { + if (vos_mem_compare((tANI_U8 *)pbc->addr, (tANI_U8 *)addr, sizeof(tSirMacAddr)) && + vos_mem_compare((tANI_U8 *)pbc->uuid_e, (tANI_U8 *)uuid_e, SIR_WPS_UUID_LEN)) { if (prev) prev->next = pbc->next; else @@ -237,16 +237,16 @@ static void limUpdatePBCSessionEntry(tpAniSirGlobal pMac, } if (!pbc) { - if (eHAL_STATUS_SUCCESS != palAllocateMemory(pMac->hHdd, - (void **) &pbc, sizeof(tSirWPSPBCSession))) + pbc = vos_mem_malloc(sizeof(tSirWPSPBCSession)); + if ( NULL == pbc ) { PELOGE(limLog(pMac, LOGE, FL("memory allocate failed!"));) return; } - palCopyMemory(pMac->hHdd, (tANI_U8 *)pbc->addr, (tANI_U8 *)addr, sizeof(tSirMacAddr)); + vos_mem_copy((tANI_U8 *)pbc->addr, (tANI_U8 *)addr, sizeof(tSirMacAddr)); if (uuid_e) - palCopyMemory(pMac->hHdd, (tANI_U8 *)pbc->uuid_e, (tANI_U8 *)uuid_e, SIR_WPS_UUID_LEN); + vos_mem_copy((tANI_U8 *)pbc->uuid_e, (tANI_U8 *)uuid_e, SIR_WPS_UUID_LEN); } pbc->next = psessionEntry->pAPWPSPBCSession; @@ -532,12 +532,12 @@ limProcessProbeReqFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo,tpPESession (probeReq.probeReqWscIeInfo.DevicePasswordID.id == WSC_PASSWD_ID_PUSH_BUTTON)) { // send the probe req to WSM when it is from a PBC station - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, - (void **)&pSirSmeProbeReq, sizeof(tSirSmeProbeReq))) + pSirSmeProbeReq = vos_mem_malloc(sizeof(tSirSmeProbeReq)); + if ( NULL == pSirSmeProbeReq ) { // Log error limLog(pMac, LOGP, - FL("call to palAllocateMemory failed for eWNI_SME_PROBE_REQ")); + FL("call to AllocateMemory failed for eWNI_SME_PROBE_REQ")); return; } msgQ.type = eWNI_SME_PROBE_REQ; @@ -547,7 +547,7 @@ limProcessProbeReqFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo,tpPESession pSirSmeProbeReq->messageType = eWNI_SME_PROBE_REQ; pSirSmeProbeReq->length = sizeof(tSirSmeProbeReq); pSirSmeProbeReq->sessionId = psessionEntry->smeSessionId; - palCopyMemory( pMac->hHdd, pSirSmeProbeReq->peerMacAddr, pHdr->sa, sizeof(tSirMacAddr)); + vos_mem_copy(pSirSmeProbeReq->peerMacAddr, pHdr->sa, sizeof(tSirMacAddr)); pSirSmeProbeReq->devicePasswdId = probeReq.probeReqWscIeInfo.DevicePasswordID.id; MTRACE(macTraceMsgTx(pMac, psessionEntry->peSessionId, msgQ.type)); if (limSysProcessMmhMsgApi(pMac, &msgQ, ePROT) != eSIR_SUCCESS){ @@ -559,9 +559,9 @@ limProcessProbeReqFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo,tpPESession ssId.length = psessionEntry->ssId.length; /* Copy the SSID from sessio entry to local variable */ - palCopyMemory( pMac->hHdd, ssId.ssId, - psessionEntry->ssId.ssId, - psessionEntry->ssId.length); + vos_mem_copy(ssId.ssId, + psessionEntry->ssId.ssId, + psessionEntry->ssId.length); // Compare received SSID with current SSID. If they // match, reply with Probe Response. @@ -570,7 +570,7 @@ limProcessProbeReqFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo,tpPESession if (!ssId.length) goto multipleSSIDcheck; - if (palEqualMemory( pMac->hHdd,(tANI_U8 *) &ssId, + if (vos_mem_compare((tANI_U8 *) &ssId, (tANI_U8 *) &(probeReq.ssId), (tANI_U8) (ssId.length + 1)) ) { limSendProbeRspMgmtFrame(pMac, pHdr->sa, &ssId, DPH_USE_MGMT_STAID, @@ -582,7 +582,7 @@ limProcessProbeReqFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo,tpPESession { tANI_U8 direct_ssid[7] = "DIRECT-"; tANI_U8 direct_ssid_len = 7; - if (palEqualMemory( pMac->hHdd, (tANI_U8 *) &direct_ssid, + if (vos_mem_compare((tANI_U8 *) &direct_ssid, (tANI_U8 *) &(probeReq.ssId.ssId), (tANI_U8) (direct_ssid_len)) ) { limSendProbeRspMgmtFrame(pMac, pHdr->sa, &ssId, DPH_USE_MGMT_STAID, @@ -777,12 +777,13 @@ limSendSmeProbeReqInd(tpAniSirGlobal pMac, { tSirSmeProbeReqInd *pSirSmeProbeReqInd; tSirMsgQ msgQ; - - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pSirSmeProbeReqInd, sizeof(tSirSmeProbeReqInd))) + + pSirSmeProbeReqInd = vos_mem_malloc(sizeof(tSirSmeProbeReqInd)); + if ( NULL == pSirSmeProbeReqInd ) { // Log error limLog(pMac, LOGP, - FL("call to palAllocateMemory failed for eWNI_SME_PROBE_REQ")); + FL("call to AllocateMemory failed for eWNI_SME_PROBE_REQ")); return; } @@ -794,12 +795,12 @@ limSendSmeProbeReqInd(tpAniSirGlobal pMac, pSirSmeProbeReqInd->length = sizeof(tSirSmeProbeReq); pSirSmeProbeReqInd->sessionId = psessionEntry->smeSessionId; - palCopyMemory( pMac->hHdd, pSirSmeProbeReqInd->bssId, psessionEntry->bssId, sizeof(tSirMacAddr)); - palCopyMemory( pMac->hHdd, pSirSmeProbeReqInd->WPSPBCProbeReq.peerMacAddr, peerMacAddr, sizeof(tSirMacAddr)); + vos_mem_copy(pSirSmeProbeReqInd->bssId, psessionEntry->bssId, sizeof(tSirMacAddr)); + vos_mem_copy(pSirSmeProbeReqInd->WPSPBCProbeReq.peerMacAddr, peerMacAddr, sizeof(tSirMacAddr)); MTRACE(macTraceMsgTx(pMac, psessionEntry->peSessionId, msgQ.type)); pSirSmeProbeReqInd->WPSPBCProbeReq.probeReqIELen = (tANI_U16)ProbeReqIELen; - palCopyMemory( pMac->hHdd, pSirSmeProbeReqInd->WPSPBCProbeReq.probeReqIE, pProbeReqIE, ProbeReqIELen); + vos_mem_copy(pSirSmeProbeReqInd->WPSPBCProbeReq.probeReqIE, pProbeReqIE, ProbeReqIELen); if (limSysProcessMmhMsgApi(pMac, &msgQ, ePROT) != eSIR_SUCCESS){ PELOGE(limLog(pMac, LOGE, FL("couldnt send the probe req to hdd"));) @@ -821,7 +822,7 @@ void limSendP2PProbeResponse(tpAniSirGlobal pMac, tANI_U8 *pBd, pBody = WDA_GET_RX_MPDU_DATA(pBd); if( (pBody[0] == 0) && (pBody[1] == ssId.length) && - (palEqualMemory( pMac->hHdd, ssId.ssId, pBody + 2, + (vos_mem_compare(ssId.ssId, pBody + 2, ssId.length))) { // Parse Probe Request frame @@ -837,7 +838,7 @@ void limSendP2PProbeResponse(tpAniSirGlobal pMac, tANI_U8 *pBd, if (psessionEntry->pePersona == VOS_P2P_GO_MODE) { ssId.length = psessionEntry->ssId.length; - palCopyMemory(pMac->hHdd, ssId.ssId, psessionEntry->ssId.ssId,psessionEntry->ssId.length); + vos_mem_copy(ssId.ssId, psessionEntry->ssId.ssId,psessionEntry->ssId.length); limSendProbeRspMgmtFrame(pMac, pHdr->sa, &ssId, DPH_USE_MGMT_STAID, DPH_NON_KEEPALIVE_FRAME, psessionEntry, probeReq.p2pIePresent ); } diff --git a/CORE/MAC/src/pe/lim/limProcessProbeRspFrame.c b/CORE/MAC/src/pe/lim/limProcessProbeRspFrame.c index a11f20a108eb..61f631afae8b 100644 --- a/CORE/MAC/src/pe/lim/limProcessProbeRspFrame.c +++ b/CORE/MAC/src/pe/lim/limProcessProbeRspFrame.c @@ -26,7 +26,6 @@ */ /* - * * Airgo Networks, Inc proprietary. All rights reserved. * This file limProcessProbeRspFrame.cc contains the code * for processing Probe Response Frame. @@ -101,10 +100,10 @@ limProcessProbeRspFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo,tpPESession tANI_U8 qosEnabled = false; tANI_U8 wmeEnabled = false; - if(eHAL_STATUS_SUCCESS != palAllocateMemory(pMac->hHdd, - (void **)&pProbeRsp, sizeof(tSirProbeRespBeacon))) + pProbeRsp = vos_mem_malloc(sizeof(tSirProbeRespBeacon)); + if ( NULL == pProbeRsp ) { - limLog(pMac, LOGE, FL("Unable to PAL allocate memory in limProcessProbeRspFrame") ); + limLog(pMac, LOGE, FL("Unable to allocate memory in limProcessProbeRspFrame") ); return; } @@ -125,7 +124,7 @@ limProcessProbeRspFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo,tpPESession { if (limDeactivateMinChannelTimerDuringScan(pMac) != eSIR_SUCCESS) { - palFreeMemory(pMac->hHdd, pProbeRsp); + vos_mem_free(pProbeRsp); return; } } @@ -135,7 +134,7 @@ limProcessProbeRspFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo,tpPESession { PELOG1(limLog(pMac, LOG1, FL("Parse error ProbeResponse, length=%d"), frameLen);) - palFreeMemory(pMac->hHdd, pProbeRsp); + vos_mem_free(pProbeRsp); return; } @@ -155,7 +154,8 @@ limProcessProbeRspFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo,tpPESession * * Ignore Probe Response frame in all other states */ - // TO SUPPORT BT-AMP + /* */ + // TO SUPPORT BT-AMP if (((pMac->lim.gLimMlmState == eLIM_MLM_WT_PROBE_RESP_STATE) || //mlm state check should be global - 18th oct (pMac->lim.gLimMlmState == eLIM_MLM_PASSIVE_SCAN_STATE) || //mlm state check should be global - 18th oct (pMac->lim.gLimMlmState == eLIM_MLM_LEARN_STATE) || //mlm state check should be global - 18th oct @@ -167,6 +167,14 @@ limProcessProbeRspFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo,tpPESession { frameLen = WDA_GET_RX_PAYLOAD_LEN(pRxPacketInfo); + if (pMac->lim.gLimBackgroundScanMode == eSIR_ROAMING_SCAN) + { + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, + FL("Probe Resp Frame Received: BSSID " MAC_ADDRESS_STR " (RSSI %d)"), + MAC_ADDR_ARRAY(pHdr->bssId), + (uint)abs((tANI_S8)WDA_GET_RX_RSSI_DB(pRxPacketInfo))); + } + // Get pointer to Probe Response frame body pBody = WDA_GET_RX_MPDU_DATA(pRxPacketInfo); @@ -176,7 +184,7 @@ limProcessProbeRspFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo,tpPESession PELOG1(limLog(pMac, LOG1, FL("Parse error ProbeResponse, length=%d"), frameLen);) - palFreeMemory(pMac->hHdd, pProbeRsp); + vos_mem_free(pProbeRsp); return; } @@ -199,13 +207,13 @@ limProcessProbeRspFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo,tpPESession { if( psessionEntry->beacon != NULL )//Either Beacon/probe response is required. Hence store it in same buffer. { - palFreeMemory(pMac->hHdd, psessionEntry->beacon); + vos_mem_free(psessionEntry->beacon); psessionEntry->beacon = NULL; } psessionEntry->bcnLen = WDA_GET_RX_PAYLOAD_LEN(pRxPacketInfo); - if ((palAllocateMemory(pMac->hHdd, (void**)&psessionEntry->beacon, - psessionEntry->bcnLen)) - != eHAL_STATUS_SUCCESS) + + psessionEntry->beacon = vos_mem_malloc(psessionEntry->bcnLen); + if ( NULL == psessionEntry->beacon ) { PELOGE(limLog(pMac, LOGE, FL("Unable to allocate memory to store beacon"));) @@ -213,9 +221,9 @@ limProcessProbeRspFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo,tpPESession else { //Store the Beacon/ProbeRsp. This is sent to csr/hdd in join cnf response. - palCopyMemory(pMac->hHdd, psessionEntry->beacon, - WDA_GET_RX_MPDU_DATA(pRxPacketInfo), - psessionEntry->bcnLen); + vos_mem_copy(psessionEntry->beacon, + WDA_GET_RX_MPDU_DATA(pRxPacketInfo), + psessionEntry->bcnLen); } // STA in WT_JOIN_BEACON_STATE @@ -241,9 +249,9 @@ limProcessProbeRspFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo,tpPESession #endif //TO SUPPORT BT-AMP sirCopyMacAddr(currentBssId,psessionEntry->bssId); - if ( !palEqualMemory( pMac->hHdd,currentBssId, pHdr->bssId, sizeof(tSirMacAddr)) ) + if ( !vos_mem_compare(currentBssId, pHdr->bssId, sizeof(tSirMacAddr)) ) { - palFreeMemory(pMac->hHdd, pProbeRsp); + vos_mem_free(pProbeRsp); return; } @@ -321,7 +329,7 @@ limProcessProbeRspFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo,tpPESession limHandleIBSScoalescing(pMac, pProbeRsp, pRxPacketInfo,psessionEntry); } // if ((pMac->lim.gLimMlmState == eLIM_MLM_WT_PROBE_RESP_STATE) || ... - palFreeMemory(pMac->hHdd, pProbeRsp); + vos_mem_free(pProbeRsp); // Ignore Probe Response frame in all other states return; } /*** end limProcessProbeRspFrame() ***/ @@ -335,10 +343,10 @@ limProcessProbeRspFrameNoSession(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo) tpSirMacMgmtHdr pHdr; tSirProbeRespBeacon *pProbeRsp; - if(eHAL_STATUS_SUCCESS != palAllocateMemory(pMac->hHdd, - (void **)&pProbeRsp, sizeof(tSirProbeRespBeacon))) + pProbeRsp = vos_mem_malloc(sizeof(tSirProbeRespBeacon)); + if ( NULL == pProbeRsp ) { - limLog(pMac, LOGE, FL("Unable to PAL allocate memory in limProcessProbeRspFrameNoSession") ); + limLog(pMac, LOGE, FL("Unable to allocate memory in limProcessProbeRspFrameNoSession") ); return; } @@ -364,7 +372,7 @@ limProcessProbeRspFrameNoSession(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo) { if (limDeactivateMinChannelTimerDuringScan(pMac) != eSIR_SUCCESS) { - palFreeMemory(pMac->hHdd, pProbeRsp); + vos_mem_free(pProbeRsp); return; } } @@ -376,7 +384,7 @@ limProcessProbeRspFrameNoSession(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo) { PELOG1(limLog(pMac, LOG1,FL("Parse error ProbeResponse, length=%d"), frameLen);) - palFreeMemory(pMac->hHdd, pProbeRsp); + vos_mem_free(pProbeRsp); return; } /* Since there is no psessionEntry, PE cannot be in the following states: @@ -394,13 +402,21 @@ limProcessProbeRspFrameNoSession(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo) { frameLen = WDA_GET_RX_PAYLOAD_LEN(pRxPacketInfo); + if (pMac->lim.gLimBackgroundScanMode == eSIR_ROAMING_SCAN) + { + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, + FL("Probe Resp Frame Received: BSSID " MAC_ADDRESS_STR " (RSSI %d)"), + MAC_ADDR_ARRAY(pHdr->bssId), + (uint)abs((tANI_S8)WDA_GET_RX_RSSI_DB(pRxPacketInfo))); + } + // Get pointer to Probe Response frame body pBody = WDA_GET_RX_MPDU_DATA(pRxPacketInfo); if (sirConvertProbeFrame2Struct(pMac, pBody, frameLen, pProbeRsp) == eSIR_FAILURE) { limLog(pMac, LOG1, FL("Parse error ProbeResponse, length=%d\n"), frameLen); - palFreeMemory(pMac->hHdd, pProbeRsp); + vos_mem_free(pProbeRsp); return; } limLog( pMac, LOG2, FL("Save this probe rsp in LFR cache")); @@ -421,7 +437,7 @@ limProcessProbeRspFrameNoSession(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo) { limLog(pMac, LOG1, FL("Parse error ProbeResponse, length=%d\n"), frameLen); - palFreeMemory(pMac->hHdd, pProbeRsp); + vos_mem_free(pProbeRsp); return; } limCheckAndAddBssDescription(pMac, pProbeRsp, pRxPacketInfo, @@ -433,13 +449,21 @@ limProcessProbeRspFrameNoSession(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo) { frameLen = WDA_GET_RX_PAYLOAD_LEN(pRxPacketInfo); + if (pMac->lim.gLimBackgroundScanMode == eSIR_ROAMING_SCAN) + { + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, + FL("Probe Resp Frame Received: BSSID " MAC_ADDRESS_STR " (RSSI %d)"), + MAC_ADDR_ARRAY(pHdr->bssId), + (uint)abs((tANI_S8)WDA_GET_RX_RSSI_DB(pRxPacketInfo))); + } + // Get pointer to Probe Response frame body pBody = WDA_GET_RX_MPDU_DATA(pRxPacketInfo); if (sirConvertProbeFrame2Struct(pMac, pBody, frameLen, pProbeRsp) == eSIR_FAILURE) { limLog(pMac, LOG1, FL("Parse error ProbeResponse, length=%d"), frameLen); - palFreeMemory(pMac->hHdd, pProbeRsp); + vos_mem_free(pProbeRsp); return; } @@ -450,6 +474,6 @@ limProcessProbeRspFrameNoSession(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo) { } } - palFreeMemory(pMac->hHdd, pProbeRsp); + vos_mem_free(pProbeRsp); return; } /*** end limProcessProbeRspFrameNew() ***/ diff --git a/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c b/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c index 8c01f383d9be..68b77351ceeb 100644 --- a/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c +++ b/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c @@ -56,13 +56,14 @@ #include "limSendMessages.h" #include "limApi.h" #include "wmmApsd.h" +#include "limRMC.h" #include "sapApi.h" #if defined WLAN_FEATURE_VOWIFI #include "rrmApi.h" #endif -#if defined FEATURE_WLAN_CCX +#if defined(FEATURE_WLAN_CCX) && !defined(FEATURE_WLAN_CCX_UPLOAD) #include "ccxApi.h" #endif @@ -107,7 +108,6 @@ void __limProcessSmeAssocCnfNew(tpAniSirGlobal, tANI_U32, tANI_U32 *); extern void peRegisterTLHandle(tpAniSirGlobal pMac); -extern int limProcessRemainOnChnlReq(tpAniSirGlobal pMac, tANI_U32 *pMsg); #ifdef BACKGROUND_SCAN_ENABLED @@ -533,22 +533,22 @@ __limHandleSmeStartBssRequest(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) PELOG1(limLog(pMac, LOG1, FL("Received START_BSS_REQ"));) - /* Global Sme state and mlm states are not defined yet , for BT-AMP Suppoprt . TO BE DONE */ + /* Global Sme state and mlm states are not defined yet, for BT-AMP Suppoprt . TO BE DONE */ if ( (pMac->lim.gLimSmeState == eLIM_SME_OFFLINE_STATE) || (pMac->lim.gLimSmeState == eLIM_SME_IDLE_STATE)) { size = sizeof(tSirSmeStartBssReq) + SIR_MAC_MAX_IE_LENGTH; - - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pSmeStartBssReq, size)) + pSmeStartBssReq = vos_mem_malloc(size); + if ( NULL == pSmeStartBssReq ) { - PELOGE(limLog(pMac, LOGE, FL("palAllocateMemory failed for pMac->lim.gpLimStartBssReq"));) + PELOGE(limLog(pMac, LOGE, FL("AllocateMemory failed for pMac->lim.gpLimStartBssReq"));) /// Send failure response to host retCode = eSIR_SME_RESOURCES_UNAVAILABLE; goto end; } - (void) palZeroMemory(pMac->hHdd, (void *)pSmeStartBssReq, size); + vos_mem_set((void *)pSmeStartBssReq, size, 0); if ((limStartBssReqSerDes(pMac, pSmeStartBssReq, (tANI_U8 *) pMsgBuf) == eSIR_FAILURE) || (!limIsSmeStartBssReqValid(pMac, pSmeStartBssReq))) @@ -564,7 +564,7 @@ __limHandleSmeStartBssRequest(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) #endif /* This is the place where PE is going to create a session. - * If session is not existed , then create a new session */ + * If session is not existed, then create a new session */ if((psessionEntry = peFindSessionByBssid(pMac,pSmeStartBssReq->bssId,&sessionId)) != NULL) { limLog(pMac, LOGW, FL("Session Already exists for given BSSID")); @@ -600,16 +600,14 @@ __limHandleSmeStartBssRequest(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) sirCopyMacAddr(psessionEntry->selfMacAddr,pSmeStartBssReq->selfMacAddr); /* Copy SSID to session table */ - palCopyMemory( pMac->hHdd, (tANI_U8 *)&psessionEntry->ssId, + vos_mem_copy( (tANI_U8 *)&psessionEntry->ssId, (tANI_U8 *)&pSmeStartBssReq->ssId, (pSmeStartBssReq->ssId.length + 1)); - - - + psessionEntry->bssType = pSmeStartBssReq->bssType; - + psessionEntry->nwType = pSmeStartBssReq->nwType; - + psessionEntry->beaconParams.beaconInterval = pSmeStartBssReq->beaconInterval; /* Store the channel number in session Table */ @@ -638,10 +636,10 @@ __limHandleSmeStartBssRequest(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) psessionEntry->txLdpcIniFeatureEnabled = pSmeStartBssReq->txLdpcIniFeatureEnabled; - palCopyMemory(pMac->hHdd, (void*)&psessionEntry->rateSet, + vos_mem_copy((void*)&psessionEntry->rateSet, (void*)&pSmeStartBssReq->operationalRateSet, sizeof(tSirMacRateSet)); - palCopyMemory(pMac->hHdd, (void*)&psessionEntry->extRateSet, + vos_mem_copy((void*)&psessionEntry->extRateSet, (void*)&pSmeStartBssReq->extendedRateSet, sizeof(tSirMacRateSet)); @@ -677,11 +675,11 @@ __limHandleSmeStartBssRequest(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) psessionEntry->ssidHidden = pSmeStartBssReq->ssidHidden; psessionEntry->wps_state = pSmeStartBssReq->wps_state; psessionEntry->shortSlotTimeSupported = limGetShortSlotFromPhyMode(pMac, psessionEntry, psessionEntry->gLimPhyMode); + psessionEntry->isCoalesingInIBSSAllowed = + pSmeStartBssReq->isCoalesingInIBSSAllowed; break; case eSIR_IBSS_MODE: psessionEntry->limSystemRole = eLIM_STA_IN_IBSS_ROLE; - psessionEntry->isCoalesingInIBSSAllowed = - pSmeStartBssReq->isCoalesingInIBSSAllowed; break; case eSIR_BTAMP_AP_MODE: @@ -707,14 +705,17 @@ __limHandleSmeStartBssRequest(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) || (pSmeStartBssReq->bssType == eSIR_INFRA_AP_MODE) ) { - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&psessionEntry->parsedAssocReq, - (psessionEntry->dph.dphHashTable.size * sizeof(tpSirAssocReq)) )) + psessionEntry->parsedAssocReq = vos_mem_malloc( + psessionEntry->dph.dphHashTable.size * sizeof(tpSirAssocReq)); + if ( NULL == psessionEntry->parsedAssocReq ) { - limLog(pMac, LOGW, FL("palAllocateMemory() failed")); + limLog(pMac, LOGW, FL("AllocateMemory() failed")); retCode = eSIR_SME_RESOURCES_UNAVAILABLE; goto free; } - palZeroMemory(pMac->hHdd, psessionEntry->parsedAssocReq, (psessionEntry->dph.dphHashTable.size * sizeof(tpSirAssocReq)) ); + vos_mem_set(psessionEntry->parsedAssocReq, + (psessionEntry->dph.dphHashTable.size * sizeof(tpSirAssocReq)), + 0 ); } /* Channel Bonding is not addressd yet for BT-AMP Support.. sunit will address channel bonding */ @@ -762,7 +763,7 @@ __limHandleSmeStartBssRequest(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) centerChan = limGetCenterChannel(pMac,channelNumber,pSmeStartBssReq->cbMode,WNI_CFG_VHT_CHANNEL_WIDTH_80MHZ); if(centerChan != eSIR_CFG_INVALID_ID) { - limLog(pMac, LOGW, FL("***Center Channel for 80MHZ channel width = %ld"),centerChan); + limLog(pMac, LOGW, FL("***Center Channel for 80MHZ channel width = %d"),centerChan); psessionEntry->apCenterChan = centerChan; if (cfgSetInt(pMac, WNI_CFG_VHT_CHANNEL_CENTER_FREQ_SEGMENT1, centerChan) != eSIR_SUCCESS) @@ -828,24 +829,25 @@ __limHandleSmeStartBssRequest(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) /*each byte will have the following info *bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 *reserved reserved RIFS Lsig n-GF ht20 11g 11b*/ - palCopyMemory( pMac->hHdd, (void *) &psessionEntry->cfgProtection, + vos_mem_copy( (void *) &psessionEntry->cfgProtection, (void *) &pSmeStartBssReq->ht_capab, sizeof( tANI_U16 )); psessionEntry->pAPWPSPBCSession = NULL; // Initialize WPS PBC session link list } // Prepare and Issue LIM_MLM_START_REQ to MLM - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pMlmStartReq, sizeof(tLimMlmStartReq))) + pMlmStartReq = vos_mem_malloc(sizeof(tLimMlmStartReq)); + if ( NULL == pMlmStartReq ) { - limLog(pMac, LOGP, FL("call to palAllocateMemory failed for mlmStartReq")); + limLog(pMac, LOGP, FL("call to AllocateMemory failed for mlmStartReq")); retCode = eSIR_SME_RESOURCES_UNAVAILABLE; goto free; } - (void)palZeroMemory(pMac->hHdd, (void *) pMlmStartReq, sizeof(tLimMlmStartReq)); + vos_mem_set((void *) pMlmStartReq, sizeof(tLimMlmStartReq), 0); /* Copy SSID to the MLM start structure */ - palCopyMemory( pMac->hHdd, (tANI_U8 *) &pMlmStartReq->ssId, + vos_mem_copy( (tANI_U8 *) &pMlmStartReq->ssId, (tANI_U8 *) &pSmeStartBssReq->ssId, pSmeStartBssReq->ssId.length + 1); pMlmStartReq->ssidHidden = pSmeStartBssReq->ssidHidden; @@ -928,10 +930,9 @@ __limHandleSmeStartBssRequest(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) pMlmStartReq->cfParamSet.cfpMaxDuration = (tANI_U16) val; //this may not be needed anymore now, as rateSet is now included in the session entry and MLM has session context. - palCopyMemory(pMac->hHdd, (void*)&pMlmStartReq->rateSet, (void*)&psessionEntry->rateSet, + vos_mem_copy((void*)&pMlmStartReq->rateSet, (void*)&psessionEntry->rateSet, sizeof(tSirMacRateSet)); - // Now populate the 11n related parameters pMlmStartReq->nwType = psessionEntry->nwType; pMlmStartReq->htCapable = psessionEntry->htCapability; @@ -982,8 +983,8 @@ free: { psessionEntry->pLimStartBssReq = NULL; } - palFreeMemory(pMac->hHdd, pSmeStartBssReq); - palFreeMemory(pMac->hHdd, pMlmStartReq); + vos_mem_free( pSmeStartBssReq); + vos_mem_free( pMlmStartReq); end: @@ -1054,7 +1055,7 @@ void limGetRandomBssid(tpAniSirGlobal pMac, tANI_U8 *data) random[0] = tx_time_get(); random[0] |= (random[0] << 15) ; random[1] = random[0] >> 1; - palCopyMemory(pMac->hHdd, data, (tANI_U8*)random, sizeof(tSirMacAddr)); + vos_mem_copy( data, (tANI_U8*)random, sizeof(tSirMacAddr)); } static eHalStatus limSendHalStartScanOffloadReq(tpAniSirGlobal pMac, @@ -1063,7 +1064,6 @@ static eHalStatus limSendHalStartScanOffloadReq(tpAniSirGlobal pMac, tSirScanOffloadReq *pScanOffloadReq; tANI_U8 *p; tSirMsgQ msg; - eHalStatus status; tANI_U16 i, len; tSirRetStatus rc = eSIR_SUCCESS; @@ -1072,21 +1072,21 @@ static eHalStatus limSendHalStartScanOffloadReq(tpAniSirGlobal pMac, len = sizeof(tSirScanOffloadReq) + (pScanReq->channelList.numChannels - 1) + pScanReq->uIEFieldLen; - status = palAllocateMemory(pMac->hHdd, (void **) &pScanOffloadReq, len); - if (status != eHAL_STATUS_SUCCESS) + pScanOffloadReq = vos_mem_malloc(len); + if ( NULL == pScanOffloadReq ) { limLog(pMac, LOGE, - FL("palAllocateMemory failed for pScanOffloadReq")); + FL("AllocateMemory failed for pScanOffloadReq")); return eHAL_STATUS_FAILURE; } - palZeroMemory( pMac->hHdd, (tANI_U8 *) pScanOffloadReq, len); + vos_mem_set( (tANI_U8 *) pScanOffloadReq, len, 0); msg.type = WDA_START_SCAN_OFFLOAD_REQ; msg.bodyptr = pScanOffloadReq; msg.bodyval = 0; - palCopyMemory(pMac->hHdd, (tANI_U8 *) pScanOffloadReq->bssId, + vos_mem_copy((tANI_U8 *) pScanOffloadReq->bssId, (tANI_U8*) pScanReq->bssId, sizeof(tSirMacAddr)); @@ -1094,7 +1094,7 @@ static eHalStatus limSendHalStartScanOffloadReq(tpAniSirGlobal pMac, { limLog(pMac, LOGE, FL("Invalid value (%d) for numSsid"), SIR_SCAN_MAX_NUM_SSID); - palFreeMemory(pMac->hHdd, (void *)pScanOffloadReq); + vos_mem_free (pScanOffloadReq); return eHAL_STATUS_FAILURE; } @@ -1102,13 +1102,13 @@ static eHalStatus limSendHalStartScanOffloadReq(tpAniSirGlobal pMac, for (i = 0; i < pScanOffloadReq->numSsid; i++) { pScanOffloadReq->ssId[i].length = pScanReq->ssId[i].length; - palCopyMemory(pMac->hHdd, (tANI_U8 *) pScanOffloadReq->ssId[i].ssId, + vos_mem_copy((tANI_U8 *) pScanOffloadReq->ssId[i].ssId, (tANI_U8 *) pScanReq->ssId[i].ssId, pScanOffloadReq->ssId[i].length); } pScanOffloadReq->hiddenSsid = pScanReq->hiddenSsid; - palCopyMemory(pMac->hHdd, (tANI_U8 *) pScanOffloadReq->selfMacAddr, + vos_mem_copy((tANI_U8 *) pScanOffloadReq->selfMacAddr, (tANI_U8 *) pScanReq->selfMacAddr, sizeof(tSirMacAddr)); pScanOffloadReq->bssType = pScanReq->bssType; @@ -1131,7 +1131,7 @@ static eHalStatus limSendHalStartScanOffloadReq(tpAniSirGlobal pMac, pScanOffloadReq->uIEFieldLen = pScanReq->uIEFieldLen; pScanOffloadReq->uIEFieldOffset = len - pScanOffloadReq->uIEFieldLen; - palCopyMemory(pMac->hHdd, + vos_mem_copy( (tANI_U8 *) pScanOffloadReq + pScanOffloadReq->uIEFieldOffset, (tANI_U8 *) pScanReq + pScanReq->uIEFieldOffset, pScanReq->uIEFieldLen); @@ -1139,9 +1139,8 @@ static eHalStatus limSendHalStartScanOffloadReq(tpAniSirGlobal pMac, rc = wdaPostCtrlMsg(pMac, &msg); if (rc != eSIR_SUCCESS) { - limLog(pMac, LOGE, FL("wdaPostCtrlMsg() return failure"), - pMac); - palFreeMemory(pMac->hHdd, (void *)pScanOffloadReq); + limLog(pMac, LOGE, FL("wdaPostCtrlMsg() return failure")); + vos_mem_free(pScanOffloadReq); return eHAL_STATUS_FAILURE; } @@ -1205,7 +1204,7 @@ __limProcessSmeScanReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) */ pMac->lim.gLimRspReqd = TRUE; - /*copy the Self MAC address from SmeReq to the globalplace , used for sending probe req.discussed on code review sep18*/ + /*copy the Self MAC address from SmeReq to the globalplace, used for sending probe req*/ sirCopyMacAddr(pMac->lim.gSelfMacAddr, pScanReq->selfMacAddr); /* This routine should return the sme sessionId and SME transaction Id */ @@ -1250,10 +1249,6 @@ __limProcessSmeScanReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) */ if (__limFreshScanReqd(pMac, pScanReq->returnFreshResults)) { - /* Store the previous SME state */ - - MTRACE(macTrace(pMac, TRACE_CODE_SME_STATE, pScanReq->sessionId, pMac->lim.gLimSmeState)); - if (pScanReq->returnFreshResults & SIR_BG_SCAN_PURGE_RESUTLS) { // Discard previously cached scan results @@ -1269,18 +1264,16 @@ __limProcessSmeScanReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) pMac->lim.gLimReturnUniqueResults = ((pScanReq->returnUniqueResults) > 0 ? true : false); - /* De-activate Heartbeat timers for connected sessions while - * scan is in progress if the system is in Active mode * - * AND it is not a ROAMING ("background") scan */ - if(pMac->psOffloadEnabled) + + if (pMac->psOffloadEnabled) { - if((pMac->lim.gLimBackgroundScanMode != eSIR_ROAMING_SCAN) && + if ((pMac->lim.gLimBackgroundScanMode != eSIR_ROAMING_SCAN) && (!IS_ACTIVEMODE_OFFLOAD_FEATURE_ENABLE)) { - for(i=0;ilim.maxBssId;i++) + for (i=0;ilim.maxBssId;i++) { tpPESession psessionEntry = peFindSessionBySessionId(pMac,i); - if(psessionEntry && psessionEntry->valid && + if (psessionEntry && psessionEntry->valid && (eLIM_MLM_LINK_ESTABLISHED_STATE == psessionEntry->limMlmState) && (psessionEntry->pmmOffloadInfo.psstate == PMM_FULL_POWER)) @@ -1290,24 +1283,25 @@ __limProcessSmeScanReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) } } } - else if(((ePMM_STATE_BMPS_WAKEUP == pMac->pmm.gPmmState) || + /* De-activate Heartbeat timers for connected sessions while + * scan is in progress if the system is in Active mode * + * AND it is not a ROAMING ("background") scan */ + else if (((ePMM_STATE_BMPS_WAKEUP == pMac->pmm.gPmmState) || (ePMM_STATE_READY == pMac->pmm.gPmmState)) && - (pScanReq->backgroundScanMode != eSIR_ROAMING_SCAN ) && - (!IS_ACTIVEMODE_OFFLOAD_FEATURE_ENABLE)) - + (pScanReq->backgroundScanMode != eSIR_ROAMING_SCAN ) && + (!IS_ACTIVEMODE_OFFLOAD_FEATURE_ENABLE)) { - for(i=0;ilim.maxBssId;i++) - { - if((peFindSessionBySessionId(pMac,i) != NULL) && - (pMac->lim.gpSession[i].valid == TRUE) && - (eLIM_MLM_LINK_ESTABLISHED_STATE == - pMac->lim.gpSession[i].limMlmState)) - { - limHeartBeatDeactivateAndChangeTimer(pMac, - peFindSessionBySessionId(pMac,i)); - } - } + for(i=0;ilim.maxBssId;i++) + { + if((peFindSessionBySessionId(pMac,i) != NULL) && + (pMac->lim.gpSession[i].valid == TRUE) && + (eLIM_MLM_LINK_ESTABLISHED_STATE == pMac->lim.gpSession[i].limMlmState)) + { + limHeartBeatDeactivateAndChangeTimer(pMac, peFindSessionBySessionId(pMac,i)); + } + } } + if (pMac->fScanOffload) { if (eHAL_STATUS_SUCCESS != @@ -1323,8 +1317,13 @@ __limProcessSmeScanReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) } else { + + /*Change Global SME state */ + /* Store the previous SME state */ pMac->lim.gLimPrevSmeState = pMac->lim.gLimSmeState; pMac->lim.gLimSmeState = eLIM_SME_WT_SCAN_STATE; + MTRACE(macTrace(pMac, TRACE_CODE_SME_STATE, pScanReq->sessionId, pMac->lim.gLimSmeState)); + if (pScanReq->channelList.numChannels == 0) { tANI_U32 cfg_len; @@ -1332,17 +1331,18 @@ __limProcessSmeScanReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) len = sizeof(tLimMlmScanReq) + (sizeof( pScanReq->channelList.channelNumber ) * (WNI_CFG_VALID_CHANNEL_LIST_LEN - 1)) + pScanReq->uIEFieldLen; - - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pMlmScanReq, len) ) + pMlmScanReq = vos_mem_malloc(len); + if ( NULL == pMlmScanReq ) { - // Log error - limLog(pMac, LOGP, - FL("call to palAllocateMemory failed for mlmScanReq (%d)"), len); + // Log error + limLog(pMac, LOGP, + FL("call to AllocateMemory failed for mlmScanReq (%d)"), len); + return; - } + } // Initialize this buffer - palZeroMemory( pMac->hHdd, (tANI_U8 *) pMlmScanReq, len ); + vos_mem_set( (tANI_U8 *) pMlmScanReq, len, 0 ); cfg_len = WNI_CFG_VALID_CHANNEL_LIST_LEN; if (wlan_cfgGetStr(pMac, WNI_CFG_VALID_CHANNEL_LIST, @@ -1361,49 +1361,49 @@ __limProcessSmeScanReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) else { len = sizeof( tLimMlmScanReq ) - sizeof( pScanReq->channelList.channelNumber ) + - (sizeof( pScanReq->channelList.channelNumber ) * pScanReq->channelList.numChannels ) + - pScanReq->uIEFieldLen; + (sizeof( pScanReq->channelList.channelNumber ) * pScanReq->channelList.numChannels ) + + pScanReq->uIEFieldLen; - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pMlmScanReq, len) ) + pMlmScanReq = vos_mem_malloc(len); + if ( NULL == pMlmScanReq ) { - // Log error - limLog(pMac, LOGP, - FL("call to palAllocateMemory failed for mlmScanReq(%d)"), len); + // Log error + limLog(pMac, LOGP, + FL("call to AllocateMemory failed for mlmScanReq(%d)"), len); return; - } + } // Initialize this buffer - palZeroMemory( pMac->hHdd, (tANI_U8 *) pMlmScanReq, len); + vos_mem_set( (tANI_U8 *) pMlmScanReq, len, 0); pMlmScanReq->channelList.numChannels = - pScanReq->channelList.numChannels; - - palCopyMemory( pMac->hHdd, pMlmScanReq->channelList.channelNumber, - pScanReq->channelList.channelNumber, - pScanReq->channelList.numChannels); - } + pScanReq->channelList.numChannels; - pMlmScanReq->uIEFieldLen = pScanReq->uIEFieldLen; - pMlmScanReq->uIEFieldOffset = len - pScanReq->uIEFieldLen; + vos_mem_copy( pMlmScanReq->channelList.channelNumber, + pScanReq->channelList.channelNumber, + pScanReq->channelList.numChannels); + } - if(pScanReq->uIEFieldLen) - { - palCopyMemory( pMac->hHdd, (tANI_U8 *)pMlmScanReq+ pMlmScanReq->uIEFieldOffset, - (tANI_U8 *)pScanReq+(pScanReq->uIEFieldOffset), - pScanReq->uIEFieldLen); - } + pMlmScanReq->uIEFieldLen = pScanReq->uIEFieldLen; + pMlmScanReq->uIEFieldOffset = len - pScanReq->uIEFieldLen; + if(pScanReq->uIEFieldLen) + { + vos_mem_copy( (tANI_U8 *)pMlmScanReq+ pMlmScanReq->uIEFieldOffset, + (tANI_U8 *)pScanReq+(pScanReq->uIEFieldOffset), + pScanReq->uIEFieldLen); + } - pMlmScanReq->bssType = pScanReq->bssType; - palCopyMemory( pMac->hHdd, pMlmScanReq->bssId, - pScanReq->bssId, - sizeof(tSirMacAddr)); - pMlmScanReq->numSsid = pScanReq->numSsid; - pMlmScanReq->sessionId = pScanReq->sessionId; + pMlmScanReq->bssType = pScanReq->bssType; + vos_mem_copy( pMlmScanReq->bssId, + pScanReq->bssId, + sizeof(tSirMacAddr)); + pMlmScanReq->numSsid = pScanReq->numSsid; + pMlmScanReq->sessionId = pScanReq->sessionId; - i = 0; - while (i < pMlmScanReq->numSsid) - { - palCopyMemory( pMac->hHdd, (tANI_U8 *) &pMlmScanReq->ssId[i], + i = 0; + while (i < pMlmScanReq->numSsid) + { + vos_mem_copy( (tANI_U8 *) &pMlmScanReq->ssId[i], (tANI_U8 *) &pScanReq->ssId[i], pScanReq->ssId[i].length + 1); @@ -1427,8 +1427,7 @@ __limProcessSmeScanReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) // Issue LIM_MLM_SCAN_REQ to MLM limPostMlmMessage(pMac, LIM_MLM_SCAN_REQ, (tANI_U32 *) pMlmScanReq); } - - } // if ((pMac->lim.gLimSmeState == eLIM_SME_IDLE_STATE) || ... + } // if ((pMac->lim.gLimSmeState == eLIM_SME_IDLE_STATE) || ... else { @@ -1512,17 +1511,20 @@ static void __limProcessSmeOemDataReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) pOemDataReq = (tpSirOemDataReq) pMsgBuf; //post the lim mlm message now - if(eHAL_STATUS_SUCCESS != palAllocateMemory(pMac->hHdd, (void**)&pMlmOemDataReq, (sizeof(tLimMlmOemDataReq)))) + pMlmOemDataReq = vos_mem_malloc(sizeof(tLimMlmOemDataReq)); + if ( NULL == pMlmOemDataReq ) { - limLog(pMac, LOGP, FL("palAllocateMemory failed for mlmOemDataReq")); + limLog(pMac, LOGP, FL("AllocateMemory failed for mlmOemDataReq")); return; } //Initialize this buffer - palZeroMemory(pMac->hHdd, pMlmOemDataReq, (sizeof(tLimMlmOemDataReq))); + vos_mem_set( pMlmOemDataReq, (sizeof(tLimMlmOemDataReq)), 0); - palCopyMemory(pMac->hHdd, pMlmOemDataReq->selfMacAddr, pOemDataReq->selfMacAddr, sizeof(tSirMacAddr)); - palCopyMemory(pMac->hHdd, pMlmOemDataReq->oemDataReq, pOemDataReq->oemDataReq, OEM_DATA_REQ_SIZE); + vos_mem_copy( pMlmOemDataReq->selfMacAddr, pOemDataReq->selfMacAddr, + sizeof(tSirMacAddr)); + vos_mem_copy( pMlmOemDataReq->oemDataReq, pOemDataReq->oemDataReq, + OEM_DATA_REQ_SIZE); //Issue LIM_MLM_OEM_DATA_REQ to MLM limPostMlmMessage(pMac, LIM_MLM_OEM_DATA_REQ, (tANI_U32*)pMlmOemDataReq); @@ -1533,6 +1535,29 @@ static void __limProcessSmeOemDataReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) #endif //FEATURE_OEM_DATA_SUPPORT +/** + * __limProcessClearDfsChannelList() + * + *FUNCTION: + *Clear DFS channel list when country is changed/aquired. +.*This message is sent from SME. + * + *LOGIC: + * + *ASSUMPTIONS: + * + *NOTE: + * + * @param pMac Pointer to Global MAC structure + * @param *pMsgBuf A pointer to the SME message buffer + * @return None + */ +static void __limProcessClearDfsChannelList(tpAniSirGlobal pMac, + tpSirMsgQ pMsg) +{ + vos_mem_set( &pMac->lim.dfschannelList, + sizeof(tSirDFSChannelList), 0); +} /** * __limProcessSmeJoinReq() @@ -1595,13 +1620,15 @@ __limProcessSmeJoinReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) if(pMac->lim.gLimSmeState == eLIM_SME_IDLE_STATE) { nSize = __limGetSmeJoinReqSizeForAlloc((tANI_U8*) pMsgBuf); - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pSmeJoinReq, nSize)) + + pSmeJoinReq = vos_mem_malloc(nSize); + if ( NULL == pSmeJoinReq ) { - limLog(pMac, LOGP, FL("call to palAllocateMemory failed for pSmeJoinReq")); + limLog(pMac, LOGP, FL("call to AllocateMemory failed for pSmeJoinReq")); retCode = eSIR_SME_RESOURCES_UNAVAILABLE; goto end; } - (void) palZeroMemory(pMac->hHdd, (void *) pSmeJoinReq, nSize); + (void) vos_mem_set((void *) pSmeJoinReq, nSize, 0); if ((limJoinReqSerDes(pMac, pSmeJoinReq, (tANI_U8 *)pMsgBuf) == eSIR_FAILURE) || (!limIsSmeJoinReqValid(pMac, pSmeJoinReq))) @@ -1613,7 +1640,7 @@ __limProcessSmeJoinReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) goto end; } - //pMac->lim.gpLimJoinReq = pSmeJoinReq; TO SUPPORT BT-AMP ,review os sep 23 + //pMac->lim.gpLimJoinReq = pSmeJoinReq; TO SUPPORT BT-AMP, review os sep 23 /* check for the existence of start BSS session */ #ifdef FIXME_GEN6 @@ -1663,6 +1690,7 @@ __limProcessSmeJoinReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) } } handleHTCapabilityandHTInfo(pMac, psessionEntry); + psessionEntry->isAmsduSupportInAMPDU = pSmeJoinReq->isAmsduSupportInAMPDU; /* Store Session related parameters */ /* Store PE session Id in session Table */ @@ -1757,6 +1785,10 @@ __limProcessSmeJoinReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) } #endif +#ifdef FEATURE_WLAN_DIAG_SUPPORT_LIM + psessionEntry->rssi = pSmeJoinReq->bssDescription.rssi; +#endif + /*Store Persona */ psessionEntry->pePersona = pSmeJoinReq->staPersona; VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO, @@ -1764,65 +1796,63 @@ __limProcessSmeJoinReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) /* Copy the SSID from smejoinreq to session entry */ psessionEntry->ssId.length = pSmeJoinReq->ssId.length; - palCopyMemory( pMac->hHdd,psessionEntry->ssId.ssId,pSmeJoinReq->ssId.ssId,psessionEntry->ssId.length); - - /* Copy the SSID from smejoinreq to session entry */ - psessionEntry->ssId.length = pSmeJoinReq->ssId.length; - palCopyMemory( pMac->hHdd,psessionEntry->ssId.ssId,pSmeJoinReq->ssId.ssId,psessionEntry->ssId.length); - - // Determin 11r or CCX connection based on input from SME - // which inturn is dependent on the profile the user wants to connect - // to, So input is coming from supplicant + vos_mem_copy( psessionEntry->ssId.ssId, + pSmeJoinReq->ssId.ssId, psessionEntry->ssId.length); + + // Determin 11r or CCX connection based on input from SME + // which inturn is dependent on the profile the user wants to connect + // to, So input is coming from supplicant #ifdef WLAN_FEATURE_VOWIFI_11R - psessionEntry->is11Rconnection = pSmeJoinReq->is11Rconnection; + psessionEntry->is11Rconnection = pSmeJoinReq->is11Rconnection; #endif #ifdef FEATURE_WLAN_CCX - psessionEntry->isCCXconnection = pSmeJoinReq->isCCXconnection; + psessionEntry->isCCXconnection = pSmeJoinReq->isCCXconnection; #endif #if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR) - psessionEntry->isFastTransitionEnabled = pSmeJoinReq->isFastTransitionEnabled; + psessionEntry->isFastTransitionEnabled = pSmeJoinReq->isFastTransitionEnabled; #endif - + #ifdef FEATURE_WLAN_LFR - psessionEntry->isFastRoamIniFeatureEnabled = pSmeJoinReq->isFastRoamIniFeatureEnabled; + psessionEntry->isFastRoamIniFeatureEnabled = pSmeJoinReq->isFastRoamIniFeatureEnabled; #endif - psessionEntry->txLdpcIniFeatureEnabled = pSmeJoinReq->txLdpcIniFeatureEnabled; + psessionEntry->txLdpcIniFeatureEnabled = pSmeJoinReq->txLdpcIniFeatureEnabled; - if(psessionEntry->bssType == eSIR_INFRASTRUCTURE_MODE) - { - psessionEntry->limSystemRole = eLIM_STA_ROLE; - } - else if(psessionEntry->bssType == eSIR_BTAMP_AP_MODE) - { - psessionEntry->limSystemRole = eLIM_BT_AMP_STA_ROLE; - } - else - { - /* Throw an error and return and make sure to delete the session.*/ - limLog(pMac, LOGW, FL("received SME_JOIN_REQ with invalid bss type")); - retCode = eSIR_SME_INVALID_PARAMETERS; - goto end; - } + if (psessionEntry->bssType == eSIR_INFRASTRUCTURE_MODE) + { + psessionEntry->limSystemRole = eLIM_STA_ROLE; + } + else if (psessionEntry->bssType == eSIR_BTAMP_AP_MODE) + { + psessionEntry->limSystemRole = eLIM_BT_AMP_STA_ROLE; + } + else + { + /* Throw an error and return and make sure to delete the session.*/ + limLog(pMac, LOGW, FL("received SME_JOIN_REQ with invalid bss type")); + retCode = eSIR_SME_INVALID_PARAMETERS; + goto end; + } - if(pSmeJoinReq->addIEScan.length) + if (pSmeJoinReq->addIEScan.length) { - palCopyMemory(pMac->hHdd, &psessionEntry->pLimJoinReq->addIEScan, + vos_mem_copy( &psessionEntry->pLimJoinReq->addIEScan, &pSmeJoinReq->addIEScan, sizeof(tSirAddie)); } - if(pSmeJoinReq->addIEAssoc.length) + if (pSmeJoinReq->addIEAssoc.length) { - palCopyMemory(pMac->hHdd, &psessionEntry->pLimJoinReq->addIEAssoc, + vos_mem_copy( &psessionEntry->pLimJoinReq->addIEAssoc, &pSmeJoinReq->addIEAssoc, sizeof(tSirAddie)); } val = sizeof(tLimMlmJoinReq) + psessionEntry->pLimJoinReq->bssDescription.length + 2; - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pMlmJoinReq, val)) + pMlmJoinReq = vos_mem_malloc(val); + if ( NULL == pMlmJoinReq ) { - limLog(pMac, LOGP, FL("call to palAllocateMemory failed for mlmJoinReq")); + limLog(pMac, LOGP, FL("call to AllocateMemory failed for mlmJoinReq")); return; } - (void) palZeroMemory(pMac->hHdd, (void *) pMlmJoinReq, val); + (void) vos_mem_set((void *) pMlmJoinReq, val, 0); /* PE SessionId is stored as a part of JoinReq*/ pMlmJoinReq->sessionId = psessionEntry->peSessionId; @@ -1832,20 +1862,19 @@ __limProcessSmeJoinReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) limLog(pMac, LOGP, FL("could not retrieve JoinFailureTimer value")); /* copy operational rate from psessionEntry*/ - palCopyMemory(pMac->hHdd, (void*)&psessionEntry->rateSet, (void*)&pSmeJoinReq->operationalRateSet, + vos_mem_copy((void*)&psessionEntry->rateSet, (void*)&pSmeJoinReq->operationalRateSet, sizeof(tSirMacRateSet)); - palCopyMemory(pMac->hHdd, (void*)&psessionEntry->extRateSet, (void*)&pSmeJoinReq->extendedRateSet, + vos_mem_copy((void*)&psessionEntry->extRateSet, (void*)&pSmeJoinReq->extendedRateSet, sizeof(tSirMacRateSet)); //this may not be needed anymore now, as rateSet is now included in the session entry and MLM has session context. - palCopyMemory(pMac->hHdd, (void*)&pMlmJoinReq->operationalRateSet, (void*)&psessionEntry->rateSet, + vos_mem_copy((void*)&pMlmJoinReq->operationalRateSet, (void*)&psessionEntry->rateSet, sizeof(tSirMacRateSet)); psessionEntry->encryptType = pSmeJoinReq->UCEncryptionType; pMlmJoinReq->bssDescription.length = psessionEntry->pLimJoinReq->bssDescription.length; - palCopyMemory( pMac->hHdd, - (tANI_U8 *) &pMlmJoinReq->bssDescription.bssId, + vos_mem_copy((tANI_U8 *) &pMlmJoinReq->bssDescription.bssId, (tANI_U8 *) &psessionEntry->pLimJoinReq->bssDescription.bssId, psessionEntry->pLimJoinReq->bssDescription.length + 2); @@ -1885,7 +1914,7 @@ __limProcessSmeJoinReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) #ifdef FEATURE_WLAN_CCX psessionEntry->maxTxPower = limGetMaxTxPower(regMax, localPowerConstraint, pMac->roam.configParam.nTxPowerCap); #else - psessionEntry->maxTxPower = VOS_MIN( regMax , (localPowerConstraint) ); + psessionEntry->maxTxPower = VOS_MIN( regMax, (localPowerConstraint) ); #endif #if defined WLAN_VOWIFI_DEBUG limLog( pMac, LOGE, "Regulatory max = %d, local power constraint = %d, max tx = %d", regMax, localPowerConstraint, psessionEntry->maxTxPower ); @@ -1982,7 +2011,7 @@ end: if(pSmeJoinReq) { - palFreeMemory( pMac->hHdd, pSmeJoinReq); + vos_mem_free(pSmeJoinReq); pSmeJoinReq = NULL; if (NULL != psessionEntry) { @@ -2007,7 +2036,7 @@ end: tANI_U8 limGetMaxTxPower(tPowerdBm regMax, tPowerdBm apTxPower, tANI_U8 iniTxPower) { tANI_U8 maxTxPower = 0; - tANI_U8 txPower = VOS_MIN( regMax , (apTxPower) ); + tANI_U8 txPower = VOS_MIN( regMax, (apTxPower) ); txPower = VOS_MIN(txPower, iniTxPower); if((txPower >= MIN_TX_PWR_CAP) && (txPower <= MAX_TX_PWR_CAP)) maxTxPower = txPower; @@ -2058,16 +2087,17 @@ __limProcessSmeReassocReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) PELOG3(limLog(pMac, LOG3, FL("Received REASSOC_REQ"));) nSize = __limGetSmeJoinReqSizeForAlloc((tANI_U8 *) pMsgBuf); - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pReassocReq, nSize )) + pReassocReq = vos_mem_malloc(nSize); + if ( NULL == pReassocReq ) { // Log error limLog(pMac, LOGP, - FL("call to palAllocateMemory failed for pReassocReq")); + FL("call to AllocateMemory failed for pReassocReq")); retCode = eSIR_SME_RESOURCES_UNAVAILABLE; goto end; } - (void) palZeroMemory(pMac->hHdd, (void *) pReassocReq, nSize); + (void) vos_mem_set((void *) pReassocReq, nSize, 0); if ((limJoinReqSerDes(pMac, (tpSirSmeJoinReq) pReassocReq, (tANI_U8 *) pMsgBuf) == eSIR_FAILURE) || (!limIsSmeJoinReqValid(pMac, @@ -2113,7 +2143,7 @@ __limProcessSmeReassocReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) psessionEntry->peSessionId); // Make sure its our preauth bssid - if (!palEqualMemory( pMac->hHdd, pReassocReq->bssDescription.bssId, + if (!vos_mem_compare( pReassocReq->bssDescription.bssId, pMac->ft.ftPEContext.pFTPreAuthReq->preAuthbssId, 6)) { limPrintMacAddr(pMac, pReassocReq->bssDescription.bssId, LOGE); @@ -2138,8 +2168,7 @@ __limProcessSmeReassocReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) goto end; } - palCopyMemory( pMac->hHdd, - psessionEntry->limReAssocbssId, + vos_mem_copy( psessionEntry->limReAssocbssId, psessionEntry->pLimReAssocReq->bssDescription.bssId, sizeof(tSirMacAddr)); @@ -2184,7 +2213,7 @@ __limProcessSmeReassocReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) psessionEntry); } - psessionEntry->maxTxPower = VOS_MIN( regMax , (localPowerConstraint) ); + psessionEntry->maxTxPower = VOS_MIN( regMax, (localPowerConstraint) ); #if defined WLAN_VOWIFI_DEBUG limLog( pMac, LOGE, "Regulatory max = %d, local power constraint = %d, max tx = %d", regMax, localPowerConstraint, psessionEntry->maxTxPower ); #endif @@ -2200,12 +2229,12 @@ __limProcessSmeReassocReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) /* Copy the SSID from sessio entry to local variable */ #if 0 - palCopyMemory( pMac->hHdd, pMac->lim.gLimReassocSSID.ssId, + vos_mem_copy( pMac->lim.gLimReassocSSID.ssId, psessionEntry->ssId.ssId, psessionEntry->ssId.length); #endif psessionEntry->limReassocSSID.length = pReassocReq->ssId.length; - palCopyMemory( pMac->hHdd, psessionEntry->limReassocSSID.ssId, + vos_mem_copy( psessionEntry->limReassocSSID.ssId, pReassocReq->ssId.ssId, psessionEntry->limReassocSSID.length); } @@ -2233,17 +2262,18 @@ __limProcessSmeReassocReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) } } - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pMlmReassocReq, sizeof(tLimMlmReassocReq))) + pMlmReassocReq = vos_mem_malloc(sizeof(tLimMlmReassocReq)); + if ( NULL == pMlmReassocReq ) { // Log error limLog(pMac, LOGP, - FL("call to palAllocateMemory failed for mlmReassocReq")); + FL("call to AllocateMemory failed for mlmReassocReq")); retCode = eSIR_SME_RESOURCES_UNAVAILABLE; goto end; } - palCopyMemory( pMac->hHdd, pMlmReassocReq->peerMacAddr, + vos_mem_copy( pMlmReassocReq->peerMacAddr, psessionEntry->limReAssocbssId, sizeof(tSirMacAddr)); @@ -2310,7 +2340,7 @@ __limProcessSmeReassocReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) * is lost upon disassociation and reassociation. */ - limDelAllBASessions(pMac); + limDeleteBASessions(pMac, psessionEntry, BA_BOTH_DIRECTIONS); pMlmReassocReq->listenInterval = (tANI_U16) val; @@ -2329,7 +2359,7 @@ __limProcessSmeReassocReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) end: if (pReassocReq) - palFreeMemory( pMac->hHdd, pReassocReq); + vos_mem_free( pReassocReq); if (psessionEntry) { @@ -2547,16 +2577,18 @@ __limProcessSmeDisassocReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) sendDisassocFrame = 0; } // Trigger Disassociation frame to peer MAC entity - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pMlmDisassocReq, sizeof(tLimMlmDisassocReq))) + + pMlmDisassocReq = vos_mem_malloc(sizeof(tLimMlmDisassocReq)); + if ( NULL == pMlmDisassocReq ) { // Log error limLog(pMac, LOGP, - FL("call to palAllocateMemory failed for mlmDisassocReq")); + FL("call to AllocateMemory failed for mlmDisassocReq")); return; } - palCopyMemory( pMac->hHdd, (tANI_U8 *) &pMlmDisassocReq->peerMacAddr, + vos_mem_copy( (tANI_U8 *) &pMlmDisassocReq->peerMacAddr, (tANI_U8 *) &smeDisassocReq.peerMacAddr, sizeof(tSirMacAddr)); @@ -2835,16 +2867,17 @@ __limProcessSmeDeauthReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) } // Trigger Deauthentication frame to peer MAC entity - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pMlmDeauthReq, sizeof(tLimMlmDeauthReq))) + pMlmDeauthReq = vos_mem_malloc(sizeof(tLimMlmDeauthReq)); + if ( NULL == pMlmDeauthReq ) { // Log error limLog(pMac, LOGP, - FL("call to palAllocateMemory failed for mlmDeauthReq")); + FL("call to AllocateMemory failed for mlmDeauthReq")); return; } - palCopyMemory( pMac->hHdd, (tANI_U8 *) &pMlmDeauthReq->peerMacAddr, + vos_mem_copy( (tANI_U8 *) &pMlmDeauthReq->peerMacAddr, (tANI_U8 *) &smeDeauthReq.peerMacAddr, sizeof(tSirMacAddr)); @@ -2909,11 +2942,11 @@ __limProcessSmeSetContextReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) } limGetSessionInfo(pMac,(tANI_U8 *)pMsgBuf,&smesessionId,&smetransactionId); - - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pSetContextReq, - (sizeof(tSirKeys) * SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS))) + + pSetContextReq = vos_mem_malloc(sizeof(tSirKeys) * SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS); + if ( NULL == pSetContextReq ) { - limLog(pMac, LOGP, FL("call to palAllocateMemory failed for pSetContextReq")); + limLog(pMac, LOGP, FL("call to AllocateMemory failed for pSetContextReq")); return; } @@ -2961,10 +2994,11 @@ __limProcessSmeSetContextReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) (psessionEntry->limSmeState == eLIM_SME_NORMAL_STATE))) { // Trigger MLM_SETKEYS_REQ - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pMlmSetKeysReq, sizeof(tLimMlmSetKeysReq))) + pMlmSetKeysReq = vos_mem_malloc(sizeof(tLimMlmSetKeysReq)); + if ( NULL == pMlmSetKeysReq ) { // Log error - limLog(pMac, LOGP, FL("call to palAllocateMemory failed for mlmSetKeysReq")); + limLog(pMac, LOGP, FL("call to AllocateMemory failed for mlmSetKeysReq")); goto end; } @@ -2975,12 +3009,12 @@ __limProcessSmeSetContextReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) limLog(pMac, LOGP, FL("Num of keys exceeded max num of default keys limit")); goto end; } - palCopyMemory( pMac->hHdd, (tANI_U8 *) &pMlmSetKeysReq->peerMacAddr, + vos_mem_copy( (tANI_U8 *) &pMlmSetKeysReq->peerMacAddr, (tANI_U8 *) &pSetContextReq->peerMacAddr, sizeof(tSirMacAddr)); - palCopyMemory( pMac->hHdd, (tANI_U8 *) &pMlmSetKeysReq->key, + vos_mem_copy( (tANI_U8 *) &pMlmSetKeysReq->key, (tANI_U8 *) &pSetContextReq->keyMaterial.key, sizeof(tSirKeys) * (pMlmSetKeysReq->numKeys ? pMlmSetKeysReq->numKeys : 1)); @@ -2998,14 +3032,14 @@ __limProcessSmeSetContextReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) { tANI_U8 keyId; keyId = pSetContextReq->keyMaterial.key[0].keyId; - palCopyMemory(pMac, (tANI_U8 *)&psessionEntry->WEPKeyMaterial[keyId], + vos_mem_copy( (tANI_U8 *)&psessionEntry->WEPKeyMaterial[keyId], (tANI_U8 *) &pSetContextReq->keyMaterial, sizeof(tSirKeyMaterial)); } else { tANI_U32 i; for( i = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++) { - palCopyMemory( pMac->hHdd, (tANI_U8 *) &pMlmSetKeysReq->key[i], + vos_mem_copy( (tANI_U8 *) &pMlmSetKeysReq->key[i], (tANI_U8 *)psessionEntry->WEPKeyMaterial[i].key, sizeof(tSirKeys)); } } @@ -3029,7 +3063,7 @@ __limProcessSmeSetContextReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) } end: - palFreeMemory( pMac->hHdd, pSetContextReq); + vos_mem_free( pSetContextReq); return; } /*** end __limProcessSmeSetContextReq() ***/ @@ -3073,12 +3107,12 @@ __limProcessSmeRemoveKeyReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) limGetSessionInfo(pMac,(tANI_U8 *)pMsgBuf,&smesessionId,&smetransactionId); - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pRemoveKeyReq, - (sizeof(*pRemoveKeyReq)))) + pRemoveKeyReq = vos_mem_malloc(sizeof(*pRemoveKeyReq)); + if ( NULL == pRemoveKeyReq ) { //Log error limLog(pMac, LOGP, - FL("call to palAllocateMemory failed for pRemoveKeyReq")); + FL("call to AllocateMemory failed for pRemoveKeyReq")); return; } @@ -3125,11 +3159,12 @@ __limProcessSmeRemoveKeyReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) (psessionEntry->limSmeState == eLIM_SME_NORMAL_STATE))) { // Trigger MLM_REMOVEKEYS_REQ - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pMlmRemoveKeyReq, sizeof(tLimMlmRemoveKeyReq))) + pMlmRemoveKeyReq = vos_mem_malloc(sizeof(tLimMlmRemoveKeyReq)); + if ( NULL == pMlmRemoveKeyReq ) { // Log error limLog(pMac, LOGP, - FL("call to palAllocateMemory failed for mlmRemoveKeysReq")); + FL("call to AllocateMemory failed for mlmRemoveKeysReq")); goto end; } @@ -3142,7 +3177,7 @@ __limProcessSmeRemoveKeyReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) /* Update PE session Id */ pMlmRemoveKeyReq->sessionId = sessionId; - palCopyMemory( pMac->hHdd, (tANI_U8 *) &pMlmRemoveKeyReq->peerMacAddr, + vos_mem_copy( (tANI_U8 *) &pMlmRemoveKeyReq->peerMacAddr, (tANI_U8 *) &pRemoveKeyReq->peerMacAddr, sizeof(tSirMacAddr)); @@ -3166,7 +3201,7 @@ __limProcessSmeRemoveKeyReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) } end: - palFreeMemory( pMac->hHdd, pRemoveKeyReq); + vos_mem_free( pRemoveKeyReq); } /*** end __limProcessSmeRemoveKeyReq() ***/ void limProcessSmeGetScanChannelInfo(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) @@ -3189,15 +3224,16 @@ void limProcessSmeGetScanChannelInfo(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) limMsgStr(eWNI_SME_GET_SCANNED_CHANNEL_RSP), pMac->lim.scanChnInfo.numChnInfo);) len = sizeof(tSmeGetScanChnRsp) + (pMac->lim.scanChnInfo.numChnInfo - 1) * sizeof(tLimScanChn); - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pSirSmeRsp, len )) + pSirSmeRsp = vos_mem_malloc(len); + if ( NULL == pSirSmeRsp ) { /// Buffer not available. Log error limLog(pMac, LOGP, - FL("call to palAllocateMemory failed for JOIN/REASSOC_RSP")); + FL("call to AllocateMemory failed for JOIN/REASSOC_RSP")); return; } - palZeroMemory(pMac->hHdd, pSirSmeRsp, len); + vos_mem_set(pSirSmeRsp, len, 0); pSirSmeRsp->mesgType = eWNI_SME_GET_SCANNED_CHANNEL_RSP; pSirSmeRsp->mesgLen = len; @@ -3213,7 +3249,8 @@ void limProcessSmeGetScanChannelInfo(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) if(pMac->lim.scanChnInfo.numChnInfo) { pSirSmeRsp->numChn = pMac->lim.scanChnInfo.numChnInfo; - palCopyMemory(pMac->hHdd, pSirSmeRsp->scanChn, pMac->lim.scanChnInfo.scanChn, sizeof(tLimScanChn) * pSirSmeRsp->numChn); + vos_mem_copy( pSirSmeRsp->scanChn, pMac->lim.scanChnInfo.scanChn, + sizeof(tLimScanChn) * pSirSmeRsp->numChn); } //Clear the list limRessetScanChannelInfo(pMac); @@ -3276,7 +3313,7 @@ void limProcessSmeGetAssocSTAsInfo(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) { limLog(pMac, LOGE, FL("Received unexpected message in state %X, in role %X"), - psessionEntry->limSmeState , psessionEntry->limSystemRole); + psessionEntry->limSmeState, psessionEntry->limSystemRole); goto limAssocStaEnd; } @@ -3293,12 +3330,19 @@ void limProcessSmeGetAssocSTAsInfo(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) if (pStaDs->valid) { - palCopyMemory(pMac->hHdd, (tANI_U8 *)&pAssocStasTemp->staMac, - (tANI_U8 *)&pStaDs->staAddr, - sizeof(v_MACADDR_t)); // Mac address + vos_mem_copy((tANI_U8 *)&pAssocStasTemp->staMac, + (tANI_U8 *)&pStaDs->staAddr, + sizeof(v_MACADDR_t)); // Mac address pAssocStasTemp->assocId = (v_U8_t)pStaDs->assocId; // Association Id pAssocStasTemp->staId = (v_U8_t)pStaDs->staIndex; // Station Id + vos_mem_copy((tANI_U8 *)&pAssocStasTemp->supportedRates, + (tANI_U8 *)&pStaDs->supportedRates, + sizeof(tSirSupportedRates)); + pAssocStasTemp->ShortGI40Mhz = pStaDs->htShortGI40Mhz; + pAssocStasTemp->ShortGI20Mhz = pStaDs->htShortGI20Mhz; + pAssocStasTemp->Support40Mhz = pStaDs->htDsssCckRate40MHzSupport; + limLog(pMac, LOG1, FL("dph Station Number = %d"), staCount+1); limLog(pMac, LOG1, FL("MAC = %02x:%02x:%02x:%02x:%02x:%02x"), pStaDs->staAddr[0], @@ -3386,7 +3430,7 @@ void limProcessSmeGetWPSPBCSessions(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) sapEvent.sapHddEventCode = eSAP_GET_WPSPBC_SESSION_EVENT; sapEvent.sapevt.sapGetWPSPBCSessionEvent.module = VOS_MODULE_ID_PE; - if (palEqualMemory(pMac->hHdd, zeroMac, GetWPSPBCSessionsReq.pRemoveMac, sizeof(tSirMacAddr))) + if (vos_mem_compare( zeroMac, GetWPSPBCSessionsReq.pRemoveMac, sizeof(tSirMacAddr))) { //This is GetWpsSession call limGetWPSPBCSessions(pMac, @@ -3607,9 +3651,9 @@ void limProcessSmeDelBssRsp( (void) body; SET_LIM_PROCESS_DEFD_MESGS(pMac, true); //TBD: get the sessionEntry + limIbssDelete(pMac,psessionEntry); dphHashTableClassInit(pMac, &psessionEntry->dph.dphHashTable); limDeletePreAuthList(pMac); - limIbssDelete(pMac,psessionEntry); limSendSmeRsp(pMac, eWNI_SME_STOP_BSS_RSP, eSIR_SME_SUCCESS,psessionEntry->smeSessionId,psessionEntry->transactionId); return; } @@ -3658,7 +3702,7 @@ __limProcessSmeAssocCnfNew(tpAniSirGlobal pMac, tANI_U32 msgType, tANI_U32 *pMsg ((psessionEntry->limSmeState != eLIM_SME_NORMAL_STATE) && (psessionEntry->limSmeState != eLIM_SME_NORMAL_CHANNEL_SCAN_STATE))) { limLog(pMac, LOGE, FL("Received unexpected message %X in state %X, in role %X"), - msgType, psessionEntry->limSmeState , psessionEntry->limSystemRole); + msgType, psessionEntry->limSmeState, psessionEntry->limSystemRole); goto end; } @@ -3680,7 +3724,7 @@ __limProcessSmeAssocCnfNew(tpAniSirGlobal pMac, tANI_U32 msgType, tANI_U32 *pMsg goto end; } if ((pStaDs && - (( !palEqualMemory( pMac->hHdd,(tANI_U8 *) pStaDs->staAddr, + (( !vos_mem_compare( (tANI_U8 *) pStaDs->staAddr, (tANI_U8 *) assocCnf.peerMacAddr, sizeof(tSirMacAddr)) ) || (pStaDs->mlmStaContext.mlmState != eLIM_MLM_WT_ASSOC_CNF_STATE) || @@ -3726,7 +3770,6 @@ __limProcessSmeAssocCnfNew(tpAniSirGlobal pMac, tANI_U32 msgType, tANI_U32 *pMsg true, pStaDs->mlmStaContext.authType, pStaDs->assocId, true, eSIR_MAC_UNSPEC_FAILURE_STATUS, psessionEntry); - return; } end: @@ -3736,11 +3779,12 @@ end: { if ( ((tpSirAssocReq)(psessionEntry->parsedAssocReq[pStaDs->assocId]))->assocReqFrame) { - palFreeMemory(pMac->hHdd,((tpSirAssocReq)(psessionEntry->parsedAssocReq[pStaDs->assocId]))->assocReqFrame); + vos_mem_free(((tpSirAssocReq) + (psessionEntry->parsedAssocReq[pStaDs->assocId]))->assocReqFrame); ((tpSirAssocReq)(psessionEntry->parsedAssocReq[pStaDs->assocId]))->assocReqFrame = NULL; } - palFreeMemory(pMac->hHdd, psessionEntry->parsedAssocReq[pStaDs->assocId]); + vos_mem_free(psessionEntry->parsedAssocReq[pStaDs->assocId]); psessionEntry->parsedAssocReq[pStaDs->assocId] = NULL; } } @@ -3885,7 +3929,7 @@ __limProcessSmeAddtsReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) // save the addts request pMac->lim.gLimAddtsSent = true; - palCopyMemory( pMac->hHdd, (tANI_U8 *) &pMac->lim.gLimAddtsReq, (tANI_U8 *) pSirAddts, sizeof(tSirAddtsReq)); + vos_mem_copy( (tANI_U8 *) &pMac->lim.gLimAddtsReq, (tANI_U8 *) pSirAddts, sizeof(tSirAddtsReq)); // ship out the message now limSendAddtsReqActionFrame(pMac, peerMac, &pSirAddts->req, @@ -4047,7 +4091,11 @@ __limProcessSmeDeltsReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) status = eSIR_FAILURE; } #ifdef FEATURE_WLAN_CCX +#ifdef FEATURE_WLAN_CCX_UPLOAD + limSendSmeTsmIEInd(pMac, psessionEntry, 0, 0, 0); +#else limDeactivateAndChangeTimer(pMac,eLIM_TSM_TIMER); +#endif /* FEATURE_WLAN_CCX_UPLOAD */ #endif // send an sme response back @@ -4128,7 +4176,7 @@ __limProcessSmeStatsRequest(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) if((psessionEntry = peFindSessionByBssid(pMac,pStatsReq->bssId,&sessionId))== NULL) { limLog(pMac, LOGE, FL("session does not exist for given bssId")); - palFreeMemory( pMac, pMsgBuf ); + vos_mem_free( pMsgBuf ); return; } @@ -4153,7 +4201,7 @@ __limProcessSmeStatsRequest(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) break; default: //Unknown request. PELOGE(limLog(pMac, LOGE, "Unknown Statistics request");) - palFreeMemory( pMac, pMsgBuf ); + vos_mem_free( pMsgBuf ); return; } @@ -4170,7 +4218,7 @@ __limProcessSmeStatsRequest(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) } if( eSIR_SUCCESS != (wdaPostCtrlMsg( pMac, &msgQ ))){ limLog(pMac, LOGP, "Unable to forward request"); - palFreeMemory( pMac, pMsgBuf ); + vos_mem_free( pMsgBuf ); return; } @@ -4208,7 +4256,7 @@ __limProcessSmeGetStatisticsRequest(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) MTRACE(macTraceMsgTx(pMac, NO_SESSION, msgQ.type)); if( eSIR_SUCCESS != (wdaPostCtrlMsg( pMac, &msgQ ))){ - palFreeMemory( pMac, pMsgBuf ); + vos_mem_free( pMsgBuf ); limLog(pMac, LOGP, "Unable to forward request"); return; } @@ -4216,6 +4264,34 @@ __limProcessSmeGetStatisticsRequest(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) return; } +#if defined(FEATURE_WLAN_CCX) && defined(FEATURE_WLAN_CCX_UPLOAD) +/** + *FUNCTION: __limProcessSmeGetTsmStatsRequest() + * + *NOTE: + * + * @param pMac Pointer to Global MAC structure + * @param *pMsgBuf A pointer to the SME message buffer + * @return None + */ +static void +__limProcessSmeGetTsmStatsRequest(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) +{ + tSirMsgQ msgQ; + + msgQ.type = WDA_TSM_STATS_REQ; + msgQ.reserved = 0; + msgQ.bodyptr = pMsgBuf; + msgQ.bodyval = 0; + MTRACE(macTraceMsgTx(pMac, NO_SESSION, msgQ.type)); + + if( eSIR_SUCCESS != (wdaPostCtrlMsg( pMac, &msgQ ))){ + vos_mem_free( pMsgBuf ); + limLog(pMac, LOGP, "Unable to forward request"); + return; + } +} +#endif /* FEATURE_WLAN_CCX && FEATURE_WLAN_CCX_UPLOAD */ #if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR) /** @@ -4245,7 +4321,7 @@ __limProcessSmeGetRoamRssiRequest(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) MTRACE(macTraceMsgTx(pMac, NO_SESSION, msgQ.type)); if( eSIR_SUCCESS != (wdaPostCtrlMsg( pMac, &msgQ ))){ - palFreeMemory( pMac, pMsgBuf ); + vos_mem_free( pMsgBuf ); limLog(pMac, LOGP, "Unable to forward request"); return; } @@ -4271,9 +4347,10 @@ __limProcessSmeUpdateAPWPSIEs(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) return; } - if( palAllocateMemory( pMac->hHdd, (void **)&pUpdateAPWPSIEsReq, sizeof(tSirUpdateAPWPSIEsReq))) + pUpdateAPWPSIEsReq = vos_mem_malloc(sizeof(tSirUpdateAPWPSIEsReq)); + if ( NULL == pUpdateAPWPSIEsReq ) { - limLog(pMac, LOGP, FL("call to palAllocateMemory failed for pUpdateAPWPSIEsReq")); + limLog(pMac, LOGP, FL("call to AllocateMemory failed for pUpdateAPWPSIEsReq")); return; } @@ -4289,13 +4366,13 @@ __limProcessSmeUpdateAPWPSIEs(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) goto end; } - palCopyMemory(pMac->hHdd, &psessionEntry->APWPSIEs, &pUpdateAPWPSIEsReq->APWPSIEs, sizeof(tSirAPWPSIEs)); + vos_mem_copy( &psessionEntry->APWPSIEs, &pUpdateAPWPSIEsReq->APWPSIEs, sizeof(tSirAPWPSIEs)); schSetFixedBeaconFields(pMac, psessionEntry); limSendBeaconInd(pMac, psessionEntry); end: - palFreeMemory( pMac->hHdd, pUpdateAPWPSIEsReq); + vos_mem_free( pUpdateAPWPSIEsReq); return; } /*** end __limProcessSmeUpdateAPWPSIEs(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) ***/ @@ -4345,10 +4422,11 @@ __limProcessSmeSetWPARSNIEs(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) limLog(pMac, LOGE,FL("Buffer is Pointing to NULL")); return; } - - if( palAllocateMemory( pMac->hHdd, (void **)&pUpdateAPWPARSNIEsReq, sizeof(tSirUpdateAPWPSIEsReq))) + + pUpdateAPWPARSNIEsReq = vos_mem_malloc(sizeof(tSirUpdateAPWPSIEsReq)); + if ( NULL == pUpdateAPWPARSNIEsReq ) { - limLog(pMac, LOGP, FL("call to palAllocateMemory failed for pUpdateAPWPARSNIEsReq")); + limLog(pMac, LOGP, FL("call to AllocateMemory failed for pUpdateAPWPARSNIEsReq")); return; } @@ -4364,7 +4442,8 @@ __limProcessSmeSetWPARSNIEs(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) goto end; } - palCopyMemory(pMac->hHdd, &psessionEntry->pLimStartBssReq->rsnIE, &pUpdateAPWPARSNIEsReq->APWPARSNIEs, sizeof(tSirRSNie)); + vos_mem_copy(&psessionEntry->pLimStartBssReq->rsnIE, + &pUpdateAPWPARSNIEsReq->APWPARSNIEs, sizeof(tSirRSNie)); limSetRSNieWPAiefromSmeStartBSSReqMessage(pMac, &psessionEntry->pLimStartBssReq->rsnIE, psessionEntry); @@ -4375,7 +4454,7 @@ __limProcessSmeSetWPARSNIEs(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) limSendBeaconInd(pMac, psessionEntry); end: - palFreeMemory( pMac->hHdd, pUpdateAPWPARSNIEsReq); + vos_mem_free(pUpdateAPWPARSNIEsReq); return; } /*** end __limProcessSmeSetWPARSNIEs(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) ***/ @@ -4426,6 +4505,7 @@ __limProcessSmeChangeBI(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) /* Update beacon */ schSetFixedBeaconFields(pMac, psessionEntry); + beaconParams.bssIdx = psessionEntry->bssIdx; //Set change in beacon Interval beaconParams.beaconInterval = pChangeBIParams->beaconInterval; beaconParams.paramChangeBitmap = PARAM_BCN_INTERVAL_CHANGED; @@ -4506,7 +4586,7 @@ void __limProcessReportMessage(tpAniSirGlobal pMac, tpSirMsgQ pMsg) break; case eWNI_SME_BEACON_REPORT_RESP_XMIT_IND: { -#if defined FEATURE_WLAN_CCX +#if defined(FEATURE_WLAN_CCX) && !defined(FEATURE_WLAN_CCX_UPLOAD) tpSirBeaconReportXmitInd pBcnReport=NULL; tpPESession psessionEntry=NULL; tANI_U8 sessionId; @@ -4562,8 +4642,9 @@ limSendSetMaxTxPowerReq ( tpAniSirGlobal pMac, tPowerdBm txPower, tpPESession pS PELOGE(limLog(pMac, LOGE, "%s:%d: Inavalid parameters", __func__, __LINE__ );) return eSIR_FAILURE; } - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, - (void **) &pMaxTxParams, sizeof(tMaxTxPowerParams) ) ) + + pMaxTxParams = vos_mem_malloc(sizeof(tMaxTxPowerParams)); + if ( NULL == pMaxTxParams ) { limLog( pMac, LOGP, "%s:%d:Unable to allocate memory for pMaxTxParams ", __func__, __LINE__); return eSIR_MEM_ALLOC_FAILED; @@ -4578,8 +4659,8 @@ limSendSetMaxTxPowerReq ( tpAniSirGlobal pMac, tPowerdBm txPower, tpPESession pS return eSIR_FAILURE; } pMaxTxParams->power = txPower; - palCopyMemory( pMac->hHdd, pMaxTxParams->bssId, pSessionEntry->bssId, sizeof(tSirMacAddr) ); - palCopyMemory( pMac->hHdd, pMaxTxParams->selfStaMacAddr, pSessionEntry->selfMacAddr, sizeof(tSirMacAddr) ); + vos_mem_copy( pMaxTxParams->bssId, pSessionEntry->bssId, sizeof(tSirMacAddr) ); + vos_mem_copy( pMaxTxParams->selfStaMacAddr, pSessionEntry->selfMacAddr, sizeof(tSirMacAddr) ); msgQ.type = WDA_SET_MAX_TX_POWER_REQ; msgQ.bodyptr = pMaxTxParams; @@ -4590,7 +4671,7 @@ limSendSetMaxTxPowerReq ( tpAniSirGlobal pMac, tPowerdBm txPower, tpPESession pS if (eSIR_SUCCESS != retCode) { PELOGE(limLog(pMac, LOGE, FL("wdaPostCtrlMsg() failed"));) - palFreeMemory(pMac->hHdd, pMaxTxParams); + vos_mem_free(pMaxTxParams); } return retCode; } @@ -4621,14 +4702,15 @@ __limProcessSmeAddStaSelfReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) tpAddStaSelfParams pAddStaSelfParams; tpSirSmeAddStaSelfReq pSmeReq = (tpSirSmeAddStaSelfReq) pMsgBuf; - if ( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void**) &pAddStaSelfParams, - sizeof( tAddStaSelfParams) ) ) + pAddStaSelfParams = vos_mem_malloc(sizeof(tAddStaSelfParams)); + if ( NULL == pAddStaSelfParams ) { limLog( pMac, LOGP, FL("Unable to allocate memory for tAddSelfStaParams") ); return; } - palCopyMemory( pMac->hHdd, pAddStaSelfParams->selfMacAddr, pSmeReq->selfMacAddr, sizeof(tSirMacAddr) ); + vos_mem_copy( pAddStaSelfParams->selfMacAddr, pSmeReq->selfMacAddr, sizeof(tSirMacAddr) ); + pAddStaSelfParams->currDeviceMode = pSmeReq->currDeviceMode; pAddStaSelfParams->sessionId = pSmeReq->sessionId; pAddStaSelfParams->type = pSmeReq->type; pAddStaSelfParams->subType = pSmeReq->subType; @@ -4674,14 +4756,14 @@ __limProcessSmeDelStaSelfReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) tpDelStaSelfParams pDelStaSelfParams; tpSirSmeDelStaSelfReq pSmeReq = (tpSirSmeDelStaSelfReq) pMsgBuf; - if ( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void**) &pDelStaSelfParams, - sizeof( tDelStaSelfParams) ) ) + pDelStaSelfParams = vos_mem_malloc(sizeof( tDelStaSelfParams)); + if ( NULL == pDelStaSelfParams ) { limLog( pMac, LOGP, FL("Unable to allocate memory for tDelStaSelfParams") ); return; } - palCopyMemory( pMac->hHdd, pDelStaSelfParams->selfMacAddr, pSmeReq->selfMacAddr, sizeof(tSirMacAddr) ); + vos_mem_copy( pDelStaSelfParams->selfMacAddr, pSmeReq->selfMacAddr, sizeof(tSirMacAddr) ); pDelStaSelfParams->sessionId = pSmeReq->sessionId; msg.type = SIR_HAL_DEL_STA_SELF_REQ; @@ -4741,7 +4823,7 @@ __limProcessSmeRegisterMgmtFrameReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) { if (pLimMgmtRegistration->matchLen == pSmeReq->matchLen) { - if (palEqualMemory(pMac, pLimMgmtRegistration->matchData, + if (vos_mem_compare( pLimMgmtRegistration->matchData, pSmeReq->matchData, pLimMgmtRegistration->matchLen)) { /* found match! */ @@ -4771,24 +4853,23 @@ __limProcessSmeRegisterMgmtFrameReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) { vos_list_remove_node(&pMac->lim.gLimMgmtFrameRegistratinQueue, (vos_list_node_t*)pLimMgmtRegistration); - palFreeMemory(pMac,pLimMgmtRegistration); + vos_mem_free(pLimMgmtRegistration); } if(pSmeReq->registerFrame) { - palAllocateMemory(pMac, (void**)&pLimMgmtRegistration, - sizeof(tLimMgmtFrameRegistration) + pSmeReq->matchLen); - if(pLimMgmtRegistration != NULL) + pLimMgmtRegistration = vos_mem_malloc(sizeof(tLimMgmtFrameRegistration) + pSmeReq->matchLen); + if ( pLimMgmtRegistration != NULL) { - palZeroMemory(pMac, (void*)pLimMgmtRegistration, - sizeof(tLimMgmtFrameRegistration) + pSmeReq->matchLen ); + vos_mem_set((void*)pLimMgmtRegistration, + sizeof(tLimMgmtFrameRegistration) + pSmeReq->matchLen, 0 ); pLimMgmtRegistration->frameType = pSmeReq->frameType; pLimMgmtRegistration->matchLen = pSmeReq->matchLen; pLimMgmtRegistration->sessionId = pSmeReq->sessionId; if(pSmeReq->matchLen) { - palCopyMemory(pMac,pLimMgmtRegistration->matchData, - pSmeReq->matchData, pSmeReq->matchLen); + vos_mem_copy(pLimMgmtRegistration->matchData, + pSmeReq->matchData, pSmeReq->matchLen); } vos_list_insert_front(&pMac->lim.gLimMgmtFrameRegistratinQueue, &pLimMgmtRegistration->node); @@ -4804,15 +4885,15 @@ __limInsertSingleShotNOAForScan(tpAniSirGlobal pMac, tANI_U32 noaDuration) tpP2pPsParams pMsgNoA; tSirMsgQ msg; - if( eHAL_STATUS_SUCCESS != palAllocateMemory( - pMac->hHdd, (void **) &pMsgNoA, sizeof( tP2pPsConfig ))) + pMsgNoA = vos_mem_malloc(sizeof( tP2pPsConfig )); + if ( NULL == pMsgNoA ) { limLog( pMac, LOGP, FL( "Unable to allocate memory during NoA Update" )); goto error; } - palZeroMemory( pMac->hHdd, (tANI_U8 *)pMsgNoA, sizeof(tP2pPsConfig)); + vos_mem_set((tANI_U8 *)pMsgNoA, sizeof(tP2pPsConfig), 0); /* Below params used for opp PS/periodic NOA and are don't care in this case - so initialized to 0 */ pMsgNoA->opp_ps = 0; pMsgNoA->ctWindow = 0; @@ -4838,7 +4919,7 @@ __limInsertSingleShotNOAForScan(tpAniSirGlobal pMac, tANI_U32 noaDuration) // send the scan response back with status failure and do not even call insert NOA limSendSmeScanRsp(pMac, sizeof(tSirSmeScanRsp), eSIR_SME_SCAN_FAILED, pMac->lim.gSmeSessionId, pMac->lim.gTransactionId); - palFreeMemory( pMac->hHdd, pMsgNoA); + vos_mem_free(pMsgNoA); goto error; } @@ -4883,7 +4964,7 @@ static void __limDeregisterDeferredSmeReqAfterNOAStart(tpAniSirGlobal pMac) if (pMac->lim.gpDefdSmeMsgForNOA != NULL) { /* __limProcessSmeScanReq consumed the buffer. We can free it. */ - palFreeMemory( pMac->hHdd, (tANI_U32 *) pMac->lim.gpDefdSmeMsgForNOA); + vos_mem_free(pMac->lim.gpDefdSmeMsgForNOA); pMac->lim.gpDefdSmeMsgForNOA = NULL; } } @@ -5060,8 +5141,8 @@ static tSirRetStatus limProcessSmeDisStartReq(tpAniSirGlobal pMac, #endif /* save dis request message for matching dialog token */ - palCopyMemory( pMac->hHdd, (tANI_U8 *) &pMac->lim.gLimTdlsDisReq, - (tANI_U8 *) disReq, sizeof(tSirTdlsDisReq)); + vos_mem_copy((tANI_U8 *) &pMac->lim.gLimTdlsDisReq, + (tANI_U8 *) disReq, sizeof(tSirTdlsDisReq)); VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO, "Transmit Discovery Request Frame") ; @@ -5169,8 +5250,8 @@ eHalStatus limProcessSmeLinkStartReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) * memory after teardown, if the link is successfully setup or * free this memory if any timeout is happen in link setup procedure */ - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, - (void **) &setupPeer, sizeof( tLimTdlsLinkSetupPeer ))) + setupPeer = vos_mem_malloc(sizeof( tLimTdlsLinkSetupPeer )); + if ( NULL == setupPeer ) { limLog( pMac, LOGP, FL( "Unable to allocate memory during ADD_STA" )); @@ -5188,7 +5269,7 @@ eHalStatus limProcessSmeLinkStartReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) * we only populate peer MAC, so it can assit us to find the * TDLS peer after response/or after response timeout */ - palCopyMemory(pMac->hHdd, setupPeer->peerMac, setupReq->peerMac, + vos_mem_copy(setupPeer->peerMac, setupReq->peerMac, sizeof(tSirMacAddr)) ; /* format TDLS discovery request frame and transmit it */ limSendTdlsLinkSetupReqFrame(pMac, setupReq->peerMac, @@ -5354,12 +5435,13 @@ limProcessSmeReqMessages(tpAniSirGlobal pMac, tpSirMsgQ pMsg) { tANI_BOOLEAN bufConsumed = TRUE; //Set this flag to false within case block of any following message, that doesnt want pMsgBuf to be freed. tANI_U32 *pMsgBuf = pMsg->bodyptr; - + tpSirSmeScanReq pScanReq; PELOG1(limLog(pMac, LOG1, FL("LIM Received SME Message %s(%d) Global LimSmeState:%s(%d) Global LimMlmState: %s(%d)"), limMsgStr(pMsg->type), pMsg->type, limSmeStateStr(pMac->lim.gLimSmeState), pMac->lim.gLimSmeState, limMlmStateStr(pMac->lim.gLimMlmState), pMac->lim.gLimMlmState );) + pScanReq = (tpSirSmeScanReq) pMsgBuf; /* Special handling of some SME Req msgs where we have an existing GO session and * want to insert NOA before processing those msgs. These msgs will be processed later when * start event happens @@ -5367,8 +5449,42 @@ limProcessSmeReqMessages(tpAniSirGlobal pMac, tpSirMsgQ pMsg) switch (pMsg->type) { case eWNI_SME_SCAN_REQ: - case eWNI_SME_OEM_DATA_REQ: case eWNI_SME_REMAIN_ON_CHANNEL_REQ: + + /* If scan is disabled return from here + */ + if (pMac->lim.fScanDisabled) + { + PELOGE(limLog(pMac, LOGE, FL("Error: Scan Disabled"));) + if (pMsg->type == eWNI_SME_SCAN_REQ) + { + limSendSmeScanRsp(pMac, + offsetof(tSirSmeScanRsp,bssDescription[0]), + eSIR_SME_INVALID_PARAMETERS, + pScanReq->sessionId, + pScanReq->transactionId); + + bufConsumed = TRUE; + } + else if (pMsg->type == eWNI_SME_REMAIN_ON_CHANNEL_REQ) + { + pMac->lim.gpDefdSmeMsgForNOA = NULL; + pMac->lim.gpLimRemainOnChanReq = (tpSirRemainOnChnReq )pMsgBuf; + limRemainOnChnRsp(pMac,eHAL_STATUS_FAILURE, NULL); + + /* + * limRemainOnChnRsp will free the buffer this change is to + * avoid "double free" + */ + bufConsumed = FALSE; + } + + return bufConsumed; + } + /* + * Do not add BREAK here + */ + case eWNI_SME_OEM_DATA_REQ: case eWNI_SME_JOIN_REQ: /* If we have an existing P2P GO session we need to insert NOA before actually process this SME Req */ if ((limIsNOAInsertReqd(pMac) == TRUE) && IS_FEATURE_SUPPORTED_BY_FW(P2P_GO_NOA_DECOUPLE_INIT_SCAN)) @@ -5412,6 +5528,9 @@ limProcessSmeReqMessages(tpAniSirGlobal pMac, tpSirMsgQ pMsg) case eWNI_SME_UPDATE_NOA: __limProcessSmeNoAUpdate(pMac, pMsgBuf); break; + case eWNI_SME_CLEAR_DFS_CHANNEL_LIST: + __limProcessClearDfsChannelList(pMac, pMsg); + break; case eWNI_SME_JOIN_REQ: __limProcessSmeJoinReq(pMac, pMsgBuf); break; @@ -5507,6 +5626,12 @@ limProcessSmeReqMessages(tpAniSirGlobal pMac, tpSirMsgQ pMsg) bufConsumed = FALSE; break; #endif +#if defined(FEATURE_WLAN_CCX) && defined(FEATURE_WLAN_CCX_UPLOAD) + case eWNI_SME_GET_TSM_STATS_REQ: + __limProcessSmeGetTsmStatsRequest( pMac, pMsgBuf); + bufConsumed = FALSE; + break; +#endif /* FEATURE_WLAN_CCX && FEATURE_WLAN_CCX_UPLOAD */ case eWNI_SME_DEL_BA_PEER_IND: limProcessSmeDelBaPeerInd(pMac, pMsgBuf); break; @@ -5559,7 +5684,7 @@ limProcessSmeReqMessages(tpAniSirGlobal pMac, tpSirMsgQ pMsg) break; #endif -#if defined FEATURE_WLAN_CCX +#if defined(FEATURE_WLAN_CCX) && !defined(FEATURE_WLAN_CCX_UPLOAD) case eWNI_SME_CCX_ADJACENT_AP_REPORT: limProcessAdjacentAPRepMsg ( pMac, pMsgBuf ); break; @@ -5584,6 +5709,9 @@ limProcessSmeReqMessages(tpAniSirGlobal pMac, tpSirMsgQ pMsg) case eWNI_SME_TDLS_DEL_STA_REQ: limProcessSmeTdlsDelStaReq(pMac, pMsgBuf); break; + case eWNI_SME_TDLS_LINK_ESTABLISH_REQ: + limProcesSmeTdlsLinkEstablishReq(pMac, pMsgBuf); + break; #endif #ifdef FEATURE_WLAN_TDLS_INTERNAL case eWNI_SME_TDLS_DISCOVERY_START_REQ: @@ -5604,6 +5732,16 @@ limProcessSmeReqMessages(tpAniSirGlobal pMac, tpSirMsgQ pMsg) limSendSetTxPowerReq(pMac, pMsgBuf); break ; +#if defined WLAN_FEATURE_RELIABLE_MCAST + case eWNI_SME_ENABLE_RMC_REQ: + limProcessRMCMessages(pMac, eLIM_RMC_ENABLE_REQ, pMsgBuf); + break ; + + case eWNI_SME_DISABLE_RMC_REQ: + limProcessRMCMessages(pMac, eLIM_RMC_DISABLE_REQ, pMsgBuf); + break ; +#endif /* defined WLAN_FEATURE_RELIABLE_MCAST */ + default: vos_mem_free((v_VOID_t*)pMsg->bodyptr); pMsg->bodyptr = NULL; diff --git a/CORE/MAC/src/pe/lim/limProcessTdls.c b/CORE/MAC/src/pe/lim/limProcessTdls.c index 6698c43ba0a5..69c3f153c20f 100644 --- a/CORE/MAC/src/pe/lim/limProcessTdls.c +++ b/CORE/MAC/src/pe/lim/limProcessTdls.c @@ -123,10 +123,10 @@ static tpDphHashNode limTdlsDelSta(tpAniSirGlobal pMac, tSirMacAddr peerMac, #endif static tSirRetStatus limTdlsSetupAddSta(tpAniSirGlobal pMac, tSirTdlsAddStaReq *pAddStaReq, - tpPESession psessionEntry) ; + tpPESession psessionEntry) ; void PopulateDot11fLinkIden(tpAniSirGlobal pMac, tpPESession psessionEntry, tDot11fIELinkIdentifier *linkIden, - tSirMacAddr peerMac , tANI_U8 reqType) ; + tSirMacAddr peerMac, tANI_U8 reqType) ; void PopulateDot11fTdlsExtCapability(tpAniSirGlobal pMac, tDot11fIEExtCap *extCapability) ; @@ -273,10 +273,8 @@ void limInitTdlsData(tpAniSirGlobal pMac, tpPESession pSessionEntry) #ifdef FEATURE_WLAN_TDLS_INTERNAL pMac->lim.gLimTdlsDisResultList = NULL ; pMac->lim.gLimTdlsDisStaCount = 0 ; - palZeroMemory(pMac->hHdd, &pMac->lim.gLimTdlsDisReq, - sizeof(tSirTdlsDisReq)); - palZeroMemory(pMac->hHdd, &pMac->lim.gLimTdlsLinkSetupInfo, - sizeof(tLimTdlsLinkSetupInfo)); + vos_mem_set(&pMac->lim.gLimTdlsDisReq, sizeof(tSirTdlsDisReq), 0); + vos_mem_set(&pMac->lim.gLimTdlsLinkSetupInfo, sizeof(tLimTdlsLinkSetupInfo), 0); pMac->lim.gAddStaDisRspWait = 0 ; #ifdef FEATURE_WLAN_TDLS_NEGATIVE @@ -304,7 +302,7 @@ void limTdlsSetNegativeBehavior(tpAniSirGlobal pMac, tANI_U8 value, tANI_BOOLEAN else pMac->lim.gLimTdlsNegativeBehavior &= ~(1 << (value-1)); } - LIM_LOG_TDLS(VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,("%d %d -> gLimTdlsNegativeBehavior= 0x%lx"), \ + LIM_LOG_TDLS(VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,("%d %d -> gLimTdlsNegativeBehavior= 0x%lx"), value, on, pMac->lim.gLimTdlsNegativeBehavior)); } #endif @@ -343,19 +341,17 @@ static void limPreparesActionFrameHdr(tpAniSirGlobal pMac, tANI_U8 *pFrame, pMacHdr->fc.powerMgmt = 0 ; - palCopyMemory( pMac->hHdd, (tANI_U8 *) pMacHdr->da, peerMac, - sizeof( tSirMacAddr )); - palCopyMemory( pMac->hHdd, - (tANI_U8 *) pMacHdr->sa, + vos_mem_copy( (tANI_U8 *) pMacHdr->da, peerMac, sizeof( tSirMacAddr )); + vos_mem_copy( (tANI_U8 *) pMacHdr->sa, staMac, sizeof( tSirMacAddr )); - palCopyMemory( pMac->hHdd, (tANI_U8 *) pMacHdr->bssId, + vos_mem_copy( (tANI_U8 *) pMacHdr->bssId, bssid, sizeof( tSirMacAddr )); - LIM_LOG_TDLS(VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_WARN, ("Preparing TDLS action frame\n%02x:%02x:%02x:%02x:%02x:%02x/%02x:%02x:%02x:%02x:%02x:%02x/%02x:%02x:%02x:%02x:%02x:%02x"), \ - pMacHdr->da[0], pMacHdr->da[1], pMacHdr->da[2], pMacHdr->da[3], pMacHdr->da[4], pMacHdr->da[5], \ - pMacHdr->sa[0], pMacHdr->sa[1], pMacHdr->sa[2], pMacHdr->sa[3], pMacHdr->sa[4], pMacHdr->sa[5], \ - pMacHdr->bssId[0], pMacHdr->bssId[1], pMacHdr->bssId[2], \ + LIM_LOG_TDLS(VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_WARN, ("Preparing TDLS action frame\n%02x:%02x:%02x:%02x:%02x:%02x/%02x:%02x:%02x:%02x:%02x:%02x/%02x:%02x:%02x:%02x:%02x:%02x"), + pMacHdr->da[0], pMacHdr->da[1], pMacHdr->da[2], pMacHdr->da[3], pMacHdr->da[4], pMacHdr->da[5], + pMacHdr->sa[0], pMacHdr->sa[1], pMacHdr->sa[2], pMacHdr->sa[3], pMacHdr->sa[4], pMacHdr->sa[5], + pMacHdr->bssId[0], pMacHdr->bssId[1], pMacHdr->bssId[2], pMacHdr->bssId[3], pMacHdr->bssId[4], pMacHdr->bssId[5])); return ; @@ -408,20 +404,21 @@ static tANI_U32 limPrepareTdlsFrameHeader(tpAniSirGlobal pMac, tANI_U8* pFrame, pMacHdr->fc.wep = (psessionEntry->encryptType == eSIR_ED_NONE)? 0 : 1; - palCopyMemory( pMac->hHdd, (tANI_U8 *) pMacHdr->addr1, (tANI_U8 *)addr1, - sizeof( tSirMacAddr )); - palCopyMemory( pMac->hHdd, - (tANI_U8 *) pMacHdr->addr2, - (tANI_U8 *) staMac, - sizeof( tSirMacAddr )); - - palCopyMemory( pMac->hHdd, (tANI_U8 *) pMacHdr->addr3, - (tANI_U8 *) (addr3), sizeof( tSirMacAddr )); - - LIM_LOG_TDLS(VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_WARN, ("Preparing TDLS frame header to %s\n%02x:%02x:%02x:%02x:%02x:%02x/%02x:%02x:%02x:%02x:%02x:%02x/%02x:%02x:%02x:%02x:%02x:%02x"), \ - (tdlsLinkType == TDLS_LINK_AP) ? "AP" : "TD", \ - pMacHdr->addr1[0], pMacHdr->addr1[1], pMacHdr->addr1[2], pMacHdr->addr1[3], pMacHdr->addr1[4], pMacHdr->addr1[5], \ - pMacHdr->addr2[0], pMacHdr->addr2[1], pMacHdr->addr2[2], pMacHdr->addr2[3], pMacHdr->addr2[4], pMacHdr->addr2[5], \ + vos_mem_copy( (tANI_U8 *) pMacHdr->addr1, + (tANI_U8 *)addr1, + sizeof( tSirMacAddr )); + vos_mem_copy( (tANI_U8 *) pMacHdr->addr2, + (tANI_U8 *) staMac, + sizeof( tSirMacAddr )); + + vos_mem_copy( (tANI_U8 *) pMacHdr->addr3, + (tANI_U8 *) (addr3), + sizeof( tSirMacAddr )); + + LIM_LOG_TDLS(VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_WARN, ("Preparing TDLS frame header to %s\n%02x:%02x:%02x:%02x:%02x:%02x/%02x:%02x:%02x:%02x:%02x:%02x/%02x:%02x:%02x:%02x:%02x:%02x"), + (tdlsLinkType == TDLS_LINK_AP) ? "AP" : "TD", + pMacHdr->addr1[0], pMacHdr->addr1[1], pMacHdr->addr1[2], pMacHdr->addr1[3], pMacHdr->addr1[4], pMacHdr->addr1[5], + pMacHdr->addr2[0], pMacHdr->addr2[1], pMacHdr->addr2[2], pMacHdr->addr2[3], pMacHdr->addr2[4], pMacHdr->addr2[5], pMacHdr->addr3[0], pMacHdr->addr3[1], pMacHdr->addr3[2], pMacHdr->addr3[3], pMacHdr->addr3[4], pMacHdr->addr3[5])); //printMacAddr(pMacHdr->bssId) ; @@ -439,8 +436,8 @@ static tANI_U32 limPrepareTdlsFrameHeader(tpAniSirGlobal pMac, tANI_U8* pFrame, /* * Now form RFC1042 header */ - palCopyMemory(pMac->hHdd, (tANI_U8 *)(pFrame + header_offset), - (tANI_U8 *)eth_890d_header , sizeof(eth_890d_header)) ; + vos_mem_copy((tANI_U8 *)(pFrame + header_offset), + (tANI_U8 *)eth_890d_header, sizeof(eth_890d_header)) ; header_offset += sizeof(eth_890d_header) ; @@ -494,15 +491,15 @@ tSirRetStatus limSendTdlsDisReqFrame(tpAniSirGlobal pMac, tSirMacAddr peer_mac, #endif tANI_U8 smeSessionId = 0; - if(psessionEntry) + if (NULL != psessionEntry) smeSessionId = psessionEntry->smeSessionId; /* * The scheme here is to fill out a 'tDot11fProbeRequest' structure * and then hand it off to 'dot11fPackProbeRequest' (for * serialization). We start by zero-initializing the structure: */ - palZeroMemory( pMac->hHdd, ( tANI_U8* )&tdlsDisReq, - sizeof( tDot11fTDLSDisReq ) ); + vos_mem_set( (tANI_U8*)&tdlsDisReq, + sizeof( tDot11fTDLSDisReq ), 0 ); /* * setup Fixed fields, @@ -530,7 +527,7 @@ tSirRetStatus limSendTdlsDisReqFrame(tpAniSirGlobal pMac, tSirMacAddr peer_mac, } else if ( DOT11F_WARNED( status ) ) { - limLog( pMac, LOGW, FL("There were warnings while calculating" + limLog( pMac, LOGW, FL("There were warnings while calculating " "the packed size for a discovery Request (" "0x%08x)."), status ); } @@ -577,7 +574,7 @@ tSirRetStatus limSendTdlsDisReqFrame(tpAniSirGlobal pMac, tSirMacAddr peer_mac, } /* zero out the memory */ - palZeroMemory( pMac->hHdd, pFrame, nBytes ); + vos_mem_set( pFrame, nBytes, 0 ); /* * IE formation, memory allocation is completed, Now form TDLS discovery @@ -595,7 +592,7 @@ tSirRetStatus limSendTdlsDisReqFrame(tpAniSirGlobal pMac, tSirMacAddr peer_mac, tdlsDisReq.LinkIdentifier.bssid[4] = 0xde; tdlsDisReq.LinkIdentifier.bssid[5] = 0xad; VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, - ("TDLS negative running: wrong BSSID %02x:%02x:%02x:%02x:%02x:%02x in TDLS Discovery Req"), \ + ("TDLS negative running: wrong BSSID %02x:%02x:%02x:%02x:%02x:%02x in TDLS Discovery Req"), tdlsDisReq.LinkIdentifier.bssid[0], tdlsDisReq.LinkIdentifier.bssid[1], tdlsDisReq.LinkIdentifier.bssid[2], @@ -609,16 +606,16 @@ tSirRetStatus limSendTdlsDisReqFrame(tpAniSirGlobal pMac, tSirMacAddr peer_mac, if ( DOT11F_FAILED( status ) ) { - limLog( pMac, LOGE, FL("Failed to pack a TDLS discovery req \ - (0x%08x)."), status ); + limLog( pMac, LOGE, FL("Failed to pack a TDLS discovery req " + "(0x%08x)."), status ); palPktFree( pMac->hHdd, HAL_TXRX_FRM_802_11_MGMT, ( void* ) pFrame, ( void* ) pPacket ); return eSIR_FAILURE; } else if ( DOT11F_WARNED( status ) ) { - limLog( pMac, LOGW, FL("There were warnings while packing TDLS" - "Discovery Request (0x%08x).") ); + limLog( pMac, LOGW, FL("There were warnings while packing TDLS " + "Discovery Request (0x%08x)."), status ); } #ifndef NO_PAD_TDLS_MIN_8023_SIZE @@ -638,7 +635,8 @@ tSirRetStatus limSendTdlsDisReqFrame(tpAniSirGlobal pMac, tSirMacAddr peer_mac, /* padding zero if more than 5 bytes are required */ if (padLen > MIN_VENDOR_SPECIFIC_IE_SIZE) - palZeroMemory( pMac->hHdd, pFrame + header_offset + nPayload + MIN_VENDOR_SPECIFIC_IE_SIZE, padLen - MIN_VENDOR_SPECIFIC_IE_SIZE); + vos_mem_set( pFrame + header_offset + nPayload + MIN_VENDOR_SPECIFIC_IE_SIZE, + padLen - MIN_VENDOR_SPECIFIC_IE_SIZE, 0); } #endif @@ -834,14 +832,14 @@ eHalStatus limTdlsTeardownTxComplete(tpAniSirGlobal pMac, return eHAL_STATUS_FAILURE; } - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO, + VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO, ("teardown peer Mac = %02x,%02x,%02x,%02x,%02x,%02x"), - (peerInfo)->peerMac[0] , - (peerInfo)->peerMac[1] , - (peerInfo)->peerMac[2] , - (peerInfo)->peerMac[3] , - (peerInfo)->peerMac[4] , - (peerInfo)->peerMac[5] ) ; + (peerInfo)->peerMac[0], + (peerInfo)->peerMac[1], + (peerInfo)->peerMac[2], + (peerInfo)->peerMac[3], + (peerInfo)->peerMac[4], + (peerInfo)->peerMac[5]); //pMac->hal.pCBackFnTxComp = NULL ; @@ -928,6 +926,61 @@ eHalStatus limTdlsTeardownTxComplete(tpAniSirGlobal pMac, } #endif +/* + * This static function is consistent with any kind of TDLS management + * frames we are sending. Currently it is being used by limSendTdlsDisRspFrame, + * limSendTdlsLinkSetupReqFrame and limSendTdlsSetupRspFrame + */ +static void PopulateDot11fTdlsHtVhtCap(tpAniSirGlobal pMac, uint32 selfDot11Mode, + tDot11fIEHTCaps *htCap, tDot11fIEVHTCaps *vhtCap, + tpPESession psessionEntry) +{ + if (IS_DOT11_MODE_HT(selfDot11Mode)) + { + /* Include HT Capability IE */ + PopulateDot11fHTCaps( pMac, NULL, htCap ); + htCap->present = 1; + if (psessionEntry->currentOperChannel <= SIR_11B_CHANNEL_END) + { + /* hardcode NO channel bonding in 2.4Ghz */ + htCap->supportedChannelWidthSet = 0; + } + else + { + //Placeholder to support different channel bonding mode of TDLS than AP. + //wlan_cfgGetInt(pMac,WNI_CFG_TDLS_CHANNEL_BONDING_MODE,&tdlsChannelBondingMode); + //htCap->supportedChannelWidthSet = tdlsChannelBondingMode ? 1 : 0; + htCap->supportedChannelWidthSet = 1; // hardcode it to max + } + } + else + { + htCap->present = 0; + } +#ifdef WLAN_FEATURE_11AC + if (((psessionEntry->currentOperChannel <= SIR_11B_CHANNEL_END) && + pMac->roam.configParam.enableVhtFor24GHz) || + (psessionEntry->currentOperChannel >= SIR_11B_CHANNEL_END)) + { + if (IS_DOT11_MODE_VHT(selfDot11Mode) && + IS_FEATURE_SUPPORTED_BY_FW(DOT11AC)) + { + /* Include VHT Capability IE */ + PopulateDot11fVHTCaps( pMac, psessionEntry, vhtCap ); + } + else + { + vhtCap->present = 0; + } + } + else + { + /* Vht Disable from ini in 2.4 GHz */ + vhtCap->present = 0; + } +#endif +} + /* * Send TDLS discovery response frame on direct link. */ @@ -951,7 +1004,7 @@ static tSirRetStatus limSendTdlsDisRspFrame(tpAniSirGlobal pMac, // uint32 tdlsChannelBondingMode; tANI_U8 smeSessionId = 0; - if(psessionEntry) + if (NULL != psessionEntry) smeSessionId = psessionEntry->smeSessionId; /* @@ -959,8 +1012,8 @@ static tSirRetStatus limSendTdlsDisRspFrame(tpAniSirGlobal pMac, * and then hand it off to 'dot11fPackProbeRequest' (for * serialization). We start by zero-initializing the structure: */ - palZeroMemory( pMac->hHdd, ( tANI_U8* )&tdlsDisRsp, - sizeof( tDot11fTDLSDisRsp ) ); + vos_mem_set( ( tANI_U8* )&tdlsDisRsp, + sizeof( tDot11fTDLSDisRsp ), 0 ); /* * setup Fixed fields, @@ -996,54 +1049,9 @@ static tSirRetStatus limSendTdlsDisRspFrame(tpAniSirGlobal pMac, wlan_cfgGetInt(pMac,WNI_CFG_DOT11_MODE,&selfDot11Mode); - if (psessionEntry->currentOperChannel <= SIR_11B_CHANNEL_END) - { - if (IS_DOT11_MODE_HT(selfDot11Mode)) - { - /* Include HT Capability IE */ - PopulateDot11fHTCaps( pMac, psessionEntry, &tdlsDisRsp.HTCaps ); - tdlsDisRsp.HTCaps.present = 1; - /* hardcode NO channel bonding in 2.4Ghz */ - tdlsDisRsp.HTCaps.supportedChannelWidthSet = 0; - } - else - { - tdlsDisRsp.HTCaps.present = 0; - } -#ifdef WLAN_FEATURE_11AC - /* in 2.4Ghz, hardcode NO 11ac */ - tdlsDisRsp.VHTCaps.present = 0; -#endif - } - else - { - if (IS_DOT11_MODE_HT(selfDot11Mode)) - { - /* Include HT Capability IE */ - PopulateDot11fHTCaps( pMac, psessionEntry, &tdlsDisRsp.HTCaps ); - - tdlsDisRsp.HTCaps.present = 1; - //Placeholder to support different channel bonding mode of TDLS than AP. - //wlan_cfgGetInt(pMac,WNI_CFG_TDLS_CHANNEL_BONDING_MODE,&tdlsChannelBondingMode); - //tdlsDisRsp.HTCaps.supportedChannelWidthSet = tdlsChannelBondingMode ? 1 : 0; - tdlsDisRsp.HTCaps.supportedChannelWidthSet = 1; // hardcode it to max - } - else - { - tdlsDisRsp.HTCaps.present = 0; - } -#ifdef WLAN_FEATURE_11AC - if (IS_DOT11_MODE_VHT(selfDot11Mode)) - { - /* Include VHT Capability IE */ - PopulateDot11fVHTCaps( pMac, psessionEntry, &tdlsDisRsp.VHTCaps ); - } - else - { - tdlsDisRsp.VHTCaps.present = 0; - } -#endif - } + /* Populate HT/VHT Capabilities */ + PopulateDot11fTdlsHtVhtCap( pMac, selfDot11Mode, &tdlsDisRsp.HTCaps, + &tdlsDisRsp.VHTCaps, psessionEntry ); /* * now we pack it. First, how much space are we going to need? @@ -1058,7 +1066,7 @@ static tSirRetStatus limSendTdlsDisRspFrame(tpAniSirGlobal pMac, } else if ( DOT11F_WARNED( status ) ) { - limLog( pMac, LOGW, FL("There were warnings while calculating" + limLog( pMac, LOGW, FL("There were warnings while calculating " "the packed size for a discovery Request (" "0x%08x)."), status ); } @@ -1085,7 +1093,7 @@ static tSirRetStatus limSendTdlsDisRspFrame(tpAniSirGlobal pMac, } /* zero out the memory */ - palZeroMemory( pMac->hHdd, pFrame, nBytes ); + vos_mem_set( pFrame, nBytes, 0 ); /* * IE formation, memory allocation is completed, Now form TDLS discovery @@ -1116,7 +1124,7 @@ static tSirRetStatus limSendTdlsDisRspFrame(tpAniSirGlobal pMac, tdlsDisRsp.LinkIdentifier.bssid[4] = 0xde; tdlsDisRsp.LinkIdentifier.bssid[5] = 0xad; VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, - ("TDLS negative running: wrong BSSID %02x:%02x:%02x:%02x:%02x:%02x in TDLS Discovery Rsp"), \ + ("TDLS negative running: wrong BSSID %02x:%02x:%02x:%02x:%02x:%02x in TDLS Discovery Rsp"), tdlsDisRsp.LinkIdentifier.bssid[0], tdlsDisRsp.LinkIdentifier.bssid[1], tdlsDisRsp.LinkIdentifier.bssid[2], @@ -1131,16 +1139,16 @@ static tSirRetStatus limSendTdlsDisRspFrame(tpAniSirGlobal pMac, if ( DOT11F_FAILED( status ) ) { - limLog( pMac, LOGE, FL("Failed to pack a TDLS discovery req \ - (0x%08x)."), status ); + limLog( pMac, LOGE, FL("Failed to pack a TDLS discovery req " + "(0x%08x)."), status ); palPktFree( pMac->hHdd, HAL_TXRX_FRM_802_11_MGMT, ( void* ) pFrame, ( void* ) pPacket ); return eSIR_FAILURE; } else if ( DOT11F_WARNED( status ) ) { - limLog( pMac, LOGW, FL("There were warnings while packing TDLS" - "Discovery Request (0x%08x).") ); + limLog( pMac, LOGW, FL("There were warnings while packing TDLS " + "Discovery Request (0x%08x)."), status ); } #if 0 @@ -1186,16 +1194,56 @@ static tSirRetStatus limSendTdlsDisRspFrame(tpAniSirGlobal pMac, } +/* + * This static function is currently used by limSendTdlsLinkSetupReqFrame and + * limSendTdlsSetupRspFrame to populate the AID if device is 11ac capable. + */ +static void PopulateDotfTdlsVhtAID(tpAniSirGlobal pMac, uint32 selfDot11Mode, + tSirMacAddr peerMac, tDot11fIEAID *Aid, + tpPESession psessionEntry) +{ + if (((psessionEntry->currentOperChannel <= SIR_11B_CHANNEL_END) && + pMac->roam.configParam.enableVhtFor24GHz) || + (psessionEntry->currentOperChannel >= SIR_11B_CHANNEL_END)) + { + if (IS_DOT11_MODE_VHT(selfDot11Mode) && + IS_FEATURE_SUPPORTED_BY_FW(DOT11AC)) + { + + tANI_U16 aid; + tpDphHashNode pStaDs; + + pStaDs = dphLookupHashEntry(pMac, peerMac, &aid, &psessionEntry->dph.dphHashTable); + if (NULL != pStaDs) + { + Aid->present = 1; + Aid->assocId = aid | LIM_AID_MASK; // set bit 14 and 15 1's + } + else + { + Aid->present = 0; + limLog( pMac, LOGE, FL("pStaDs is NULL for " MAC_ADDRESS_STR ), + MAC_ADDR_ARRAY(peerMac)); + } + } + } + else + { + Aid->present = 0; + limLog( pMac, LOGW, FL("Vht not enable from ini for 2.4GHz.")); + } +} + /* * TDLS setup Request frame on AP link */ tSirRetStatus limSendTdlsLinkSetupReqFrame(tpAniSirGlobal pMac, tSirMacAddr peerMac, tANI_U8 dialog, tpPESession psessionEntry, - tANI_U8 *addIe, tANI_U16 addIeLen) + tANI_U8 *addIe, tANI_U16 addIeLen) { tDot11fTDLSSetupReq tdlsSetupReq ; - tANI_U16 caps = 0 ; + tANI_U16 caps = 0 ; tANI_U32 status = 0 ; tANI_U32 nPayload = 0 ; tANI_U32 nBytes = 0 ; @@ -1204,23 +1252,21 @@ tSirRetStatus limSendTdlsLinkSetupReqFrame(tpAniSirGlobal pMac, void *pPacket; eHalStatus halstatus; uint32 selfDot11Mode; + tANI_U8 smeSessionId = 0; // Placeholder to support different channel bonding mode of TDLS than AP. // Today, WNI_CFG_CHANNEL_BONDING_MODE will be overwritten when connecting to AP // To support this feature, we need to introduce WNI_CFG_TDLS_CHANNEL_BONDING_MODE // As of now, we hardcoded to max channel bonding of dot11Mode (i.e HT80 for 11ac/HT40 for 11n) // uint32 tdlsChannelBondingMode; - tANI_U8 smeSessionId = 0; - if(psessionEntry) - smeSessionId = psessionEntry->smeSessionId; - - /* + /* * The scheme here is to fill out a 'tDot11fProbeRequest' structure * and then hand it off to 'dot11fPackProbeRequest' (for * serialization). We start by zero-initializing the structure: */ - palZeroMemory( pMac->hHdd, ( tANI_U8* )&tdlsSetupReq, - sizeof( tDot11fTDLSSetupReq ) ); + smeSessionId = psessionEntry->smeSessionId; + + vos_mem_set(( tANI_U8* )&tdlsSetupReq, sizeof( tDot11fTDLSSetupReq ), 0); tdlsSetupReq.Category.category = SIR_MAC_ACTION_TDLS ; tdlsSetupReq.Action.action = SIR_MAC_TDLS_SETUP_REQ ; tdlsSetupReq.DialogToken.token = dialog ; @@ -1241,9 +1287,9 @@ tSirRetStatus limSendTdlsLinkSetupReqFrame(tpAniSirGlobal pMac, swapBitField16(caps, ( tANI_U16* )&tdlsSetupReq.Capabilities ); /* populate supported rate IE */ - PopulateDot11fSuppRates( pMac, POPULATE_DOT11F_RATES_OPERATIONAL, + PopulateDot11fSuppRates( pMac, POPULATE_DOT11F_RATES_OPERATIONAL, &tdlsSetupReq.SuppRates, psessionEntry ); - + /* Populate extended supported rates */ PopulateDot11fExtSuppRates( pMac, POPULATE_DOT11F_RATES_OPERATIONAL, &tdlsSetupReq.ExtSuppRates, psessionEntry ); @@ -1251,10 +1297,10 @@ tSirRetStatus limSendTdlsLinkSetupReqFrame(tpAniSirGlobal pMac, /* Populate extended supported rates */ PopulateDot11fTdlsExtCapability( pMac, &tdlsSetupReq.ExtCap ); - /* + /* * TODO: we need to see if we have to support conditions where we have * EDCA parameter info element is needed a) if we need different QOS - * parameters for off channel operations or QOS is not supported on + * parameters for off channel operations or QOS is not supported on * AP link and we wanted to QOS on direct link. */ /* Populate QOS info, needed for Peer U-APSD session */ @@ -1263,11 +1309,11 @@ tSirRetStatus limSendTdlsLinkSetupReqFrame(tpAniSirGlobal pMac, tdlsSetupReq.QOSCapsStation.present = 1; tdlsSetupReq.QOSCapsStation.max_sp_length = 0; tdlsSetupReq.QOSCapsStation.qack = 0; - tdlsSetupReq.QOSCapsStation.acbe_uapsd = 0; - tdlsSetupReq.QOSCapsStation.acbk_uapsd = 0; - tdlsSetupReq.QOSCapsStation.acvi_uapsd = 0; - tdlsSetupReq.QOSCapsStation.acvo_uapsd = 0; - + tdlsSetupReq.QOSCapsStation.acbe_uapsd = ((pMac->lim.gLimTDLSUapsdMask & 0x08) >> 3) ; + tdlsSetupReq.QOSCapsStation.acbk_uapsd = ((pMac->lim.gLimTDLSUapsdMask & 0x04)>> 2); + tdlsSetupReq.QOSCapsStation.acvi_uapsd = ((pMac->lim.gLimTDLSUapsdMask & 0x02)>> 1); + tdlsSetupReq.QOSCapsStation.acvo_uapsd = (pMac->lim.gLimTDLSUapsdMask & 0x01); + /* * we will always try to init TDLS link with 11n capabilities @@ -1277,68 +1323,18 @@ tSirRetStatus limSendTdlsLinkSetupReqFrame(tpAniSirGlobal pMac, wlan_cfgGetInt(pMac,WNI_CFG_DOT11_MODE,&selfDot11Mode); - if (psessionEntry->currentOperChannel <= SIR_11B_CHANNEL_END) - { - if (IS_DOT11_MODE_HT(selfDot11Mode)) - { - /* Include HT Capability IE */ - PopulateDot11fHTCaps( pMac, psessionEntry, &tdlsSetupReq.HTCaps ); + /* Populate HT/VHT Capabilities */ + PopulateDot11fTdlsHtVhtCap( pMac, selfDot11Mode, &tdlsSetupReq.HTCaps, + &tdlsSetupReq.VHTCaps, psessionEntry ); - tdlsSetupReq.HTCaps.present = 1; - /* hardcode NO channel bonding in 2.4Ghz */ - tdlsSetupReq.HTCaps.supportedChannelWidthSet = 0; - } - else - { - tdlsSetupReq.HTCaps.present = 0; - } -#ifdef WLAN_FEATURE_11AC - /* in 2.4Ghz, hardcode NO 11ac */ - tdlsSetupReq.VHTCaps.present = 0; -#endif - } - else - { - if (IS_DOT11_MODE_HT(selfDot11Mode)) - { - /* Include HT Capability IE */ - PopulateDot11fHTCaps( pMac, psessionEntry, &tdlsSetupReq.HTCaps ); + /* Populate AID */ + PopulateDotfTdlsVhtAID( pMac, selfDot11Mode, peerMac, + &tdlsSetupReq.AID, psessionEntry ); - tdlsSetupReq.HTCaps.present = 1; - //Placeholder to support different channel bonding mode of TDLS than AP. - //wlan_cfgGetInt(pMac,WNI_CFG_TDLS_CHANNEL_BONDING_MODE,&tdlsChannelBondingMode); - //tdlsSetupReq.HTCaps.supportedChannelWidthSet = tdlsChannelBondingMode ? 1 : 0; - tdlsSetupReq.HTCaps.supportedChannelWidthSet = 1; // hardcode it to max - } - else - { - tdlsSetupReq.HTCaps.present = 0; - } -#ifdef WLAN_FEATURE_11AC - /* Include VHT Capability IE */ - PopulateDot11fVHTCaps( pMac, psessionEntry, &tdlsSetupReq.VHTCaps ); - if (IS_DOT11_MODE_VHT(selfDot11Mode)) - { - tANI_U16 aid; - tpDphHashNode pStaDs; - - pStaDs = dphLookupHashEntry(pMac, peerMac, &aid , &psessionEntry->dph.dphHashTable); - if (NULL != pStaDs) - { - tdlsSetupReq.AID.present = 1; - tdlsSetupReq.AID.assocId = aid | LIM_AID_MASK; // set bit 14 and 15 1's - } - } - else - { - tdlsSetupReq.VHTCaps.present = 0; - } -#endif - } - /* + /* * now we pack it. First, how much space are we going to need? */ - status = dot11fGetPackedTDLSSetupReqSize( pMac, &tdlsSetupReq, + status = dot11fGetPackedTDLSSetupReqSize( pMac, &tdlsSetupReq, &nPayload); if ( DOT11F_FAILED( status ) ) { @@ -1349,7 +1345,7 @@ tSirRetStatus limSendTdlsLinkSetupReqFrame(tpAniSirGlobal pMac, } else if ( DOT11F_WARNED( status ) ) { - limLog( pMac, LOGW, FL("There were warnings while calculating" + limLog( pMac, LOGW, FL("There were warnings while calculating " "the packed size for a discovery Request (" "0x%08x)."), status ); } @@ -1359,7 +1355,7 @@ tSirRetStatus limSendTdlsLinkSetupReqFrame(tpAniSirGlobal pMac, * This frame is going out from PE as data frames with special ethertype * 89-0d. * 8 bytes of RFC 1042 header - */ + */ nBytes = nPayload + ((IS_QOS_ENABLED(psessionEntry)) @@ -1371,7 +1367,7 @@ tSirRetStatus limSendTdlsLinkSetupReqFrame(tpAniSirGlobal pMac, /* Ok-- try to allocate memory from MGMT PKT pool */ halstatus = palPktAlloc( pMac->hHdd, HAL_TXRX_FRM_802_11_MGMT, - ( tANI_U16 )nBytes , ( void** ) &pFrame, + ( tANI_U16 )nBytes, ( void** ) &pFrame, ( void** ) &pPacket ); if ( ! HAL_STATUS_SUCCESS ( halstatus ) ) { @@ -1381,30 +1377,30 @@ tSirRetStatus limSendTdlsLinkSetupReqFrame(tpAniSirGlobal pMac, } /* zero out the memory */ - palZeroMemory( pMac->hHdd, pFrame, nBytes ); + vos_mem_set( pFrame, nBytes, 0); - /* + /* * IE formation, memory allocation is completed, Now form TDLS discovery * request frame */ /* fill out the buffer descriptor */ - header_offset = limPrepareTdlsFrameHeader(pMac, pFrame, + header_offset = limPrepareTdlsFrameHeader(pMac, pFrame, LINK_IDEN_ADDR_OFFSET(tdlsSetupReq), TDLS_LINK_AP, TDLS_INITIATOR, TID_AC_BK, psessionEntry) ; #ifdef FEATURE_WLAN_TDLS_NEGATIVE if(pMac->lim.gLimTdlsNegativeBehavior & LIM_TDLS_NEGATIVE_WRONG_BSSID_IN_SETUP_REQ) { tdlsSetupReq.LinkIdentifier.bssid[4] = 0xde; - tdlsSetupReq.LinkIdentifier.bssid[5] = 0xad; - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, - ("TDLS negative running: wrong BSSID %02x:%02x:%02x:%02x:%02x:%02x in TDLS Setup Req"), \ - tdlsSetupReq.LinkIdentifier.bssid[0], - tdlsSetupReq.LinkIdentifier.bssid[1], - tdlsSetupReq.LinkIdentifier.bssid[2], - tdlsSetupReq.LinkIdentifier.bssid[3], - tdlsSetupReq.LinkIdentifier.bssid[4], + tdlsSetupReq.LinkIdentifier.bssid[5] = 0xad; + VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, + ("TDLS negative running: wrong BSSID %02x:%02x:%02x:%02x:%02x:%02x in TDLS Setup Req"), + tdlsSetupReq.LinkIdentifier.bssid[0], + tdlsSetupReq.LinkIdentifier.bssid[1], + tdlsSetupReq.LinkIdentifier.bssid[2], + tdlsSetupReq.LinkIdentifier.bssid[3], + tdlsSetupReq.LinkIdentifier.bssid[4], tdlsSetupReq.LinkIdentifier.bssid[5]); } #endif @@ -1412,24 +1408,24 @@ tSirRetStatus limSendTdlsLinkSetupReqFrame(tpAniSirGlobal pMac, __func__, tdlsSetupReq.VHTCaps.supportedChannelWidthSet, tdlsSetupReq.VHTCaps.rxMCSMap, tdlsSetupReq.VHTCaps.txMCSMap, tdlsSetupReq.VHTCaps.txSupDataRate ); - status = dot11fPackTDLSSetupReq( pMac, &tdlsSetupReq, pFrame + status = dot11fPackTDLSSetupReq( pMac, &tdlsSetupReq, pFrame + header_offset, nPayload, &nPayload ); if ( DOT11F_FAILED( status ) ) { - limLog( pMac, LOGE, FL("Failed to pack a TDLS discovery req \ - (0x%08x)."), status ); + limLog( pMac, LOGE, FL("Failed to pack a TDLS discovery req " + "(0x%08x)."), status ); palPktFree( pMac->hHdd, HAL_TXRX_FRM_802_11_MGMT, ( void* ) pFrame, ( void* ) pPacket ); return eSIR_FAILURE; } else if ( DOT11F_WARNED( status ) ) { - limLog( pMac, LOGW, FL("There were warnings while packing TDLS" - "Discovery Request (0x%08x).") ); + limLog( pMac, LOGW, FL("There were warnings while packing TDLS " + "Discovery Request (0x%08x)."), status ); } - //Copy the additional IE. + //Copy the additional IE. //TODO : addIe is added at the end of the frame. This means it doesnt //follow the order. This should be ok, but we should consider changing this //if there is any IOT issue. @@ -1437,7 +1433,7 @@ tSirRetStatus limSendTdlsLinkSetupReqFrame(tpAniSirGlobal pMac, { LIM_LOG_TDLS(VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, ("Copy Additional Ie Len = %d"), addIeLen )); - palCopyMemory( pMac->hHdd, pFrame + header_offset + nPayload, addIe, addIeLen ); + vos_mem_copy( pFrame + header_offset + nPayload, addIe, addIeLen ); } LIM_LOG_TDLS(VOS_TRACE(VOS_MODULE_ID_PE, TDLS_DEBUG_LOG_LEVEL, ("[TDLS] action %d (%s) -AP-> OTA"), @@ -1469,7 +1465,7 @@ tSirRetStatus limSendTdlsLinkSetupReqFrame(tpAniSirGlobal pMac, tSirRetStatus limSendTdlsTeardownFrame(tpAniSirGlobal pMac, tSirMacAddr peerMac, tANI_U16 reason, tANI_U8 responder, tpPESession psessionEntry, - tANI_U8 *addIe, tANI_U16 addIeLen) + tANI_U8 *addIe, tANI_U16 addIeLen) { tDot11fTDLSTeardown teardown ; tANI_U32 status = 0 ; @@ -1484,24 +1480,23 @@ tSirRetStatus limSendTdlsTeardownFrame(tpAniSirGlobal pMac, #endif tANI_U8 smeSessionId = 0; - if(psessionEntry) + if (NULL != psessionEntry) smeSessionId = psessionEntry->smeSessionId; - /* + /* * The scheme here is to fill out a 'tDot11fProbeRequest' structure * and then hand it off to 'dot11fPackProbeRequest' (for * serialization). We start by zero-initializing the structure: */ - palZeroMemory( pMac->hHdd, ( tANI_U8* )&teardown, - sizeof( tDot11fTDLSTeardown ) ); + vos_mem_set( ( tANI_U8* )&teardown, sizeof( tDot11fTDLSTeardown ), 0 ); teardown.Category.category = SIR_MAC_ACTION_TDLS ; teardown.Action.action = SIR_MAC_TDLS_TEARDOWN ; teardown.Reason.code = reason ; - PopulateDot11fLinkIden( pMac, psessionEntry, &teardown.LinkIdentifier, + PopulateDot11fLinkIden( pMac, psessionEntry, &teardown.LinkIdentifier, peerMac, (responder == TRUE) ? TDLS_RESPONDER : TDLS_INITIATOR) ; - /* + /* * now we pack it. First, how much space are we going to need? */ status = dot11fGetPackedTDLSTeardownSize( pMac, &teardown, &nPayload); @@ -1514,7 +1509,7 @@ tSirRetStatus limSendTdlsTeardownFrame(tpAniSirGlobal pMac, } else if ( DOT11F_WARNED( status ) ) { - limLog( pMac, LOGW, FL("There were warnings while calculating" + limLog( pMac, LOGW, FL("There were warnings while calculating " "the packed size for a discovery Request (" "0x%08x)."), status ); } @@ -1524,7 +1519,7 @@ tSirRetStatus limSendTdlsTeardownFrame(tpAniSirGlobal pMac, * This frame is going out from PE as data frames with special ethertype * 89-0d. * 8 bytes of RFC 1042 header - */ + */ nBytes = nPayload + ((IS_QOS_ENABLED(psessionEntry)) @@ -1563,43 +1558,43 @@ tSirRetStatus limSendTdlsTeardownFrame(tpAniSirGlobal pMac, } /* zero out the memory */ - palZeroMemory( pMac->hHdd, pFrame, nBytes ); + vos_mem_set( pFrame, nBytes, 0 ); - /* + /* * IE formation, memory allocation is completed, Now form TDLS discovery * request frame */ /* fill out the buffer descriptor */ - header_offset = limPrepareTdlsFrameHeader(pMac, pFrame, - LINK_IDEN_ADDR_OFFSET(teardown), - (reason == eSIR_MAC_TDLS_TEARDOWN_PEER_UNREACHABLE) + header_offset = limPrepareTdlsFrameHeader(pMac, pFrame, + LINK_IDEN_ADDR_OFFSET(teardown), + (reason == eSIR_MAC_TDLS_TEARDOWN_PEER_UNREACHABLE) ? TDLS_LINK_AP : TDLS_LINK_DIRECT, (responder == TRUE) ? TDLS_RESPONDER : TDLS_INITIATOR, TID_AC_VI, psessionEntry) ; - status = dot11fPackTDLSTeardown( pMac, &teardown, pFrame + status = dot11fPackTDLSTeardown( pMac, &teardown, pFrame + header_offset, nPayload, &nPayload ); if ( DOT11F_FAILED( status ) ) { - limLog( pMac, LOGE, FL("Failed to pack a TDLS Teardown req \ - (0x%08x)."), status ); - palPktFree( pMac->hHdd, HAL_TXRX_FRM_802_11_MGMT, + limLog( pMac, LOGE, FL("Failed to pack a TDLS Teardown req (0x%08x)."), + status ); + palPktFree( pMac->hHdd, HAL_TXRX_FRM_802_11_MGMT, ( void* ) pFrame, ( void* ) pPacket ); return eSIR_FAILURE; } else if ( DOT11F_WARNED( status ) ) { - limLog( pMac, LOGW, FL("There were warnings while packing TDLS" - "Teardown Request (0x%08x).") ); + limLog( pMac, LOGW, FL("There were warnings while packing TDLS " + "Teardown Request (0x%08x)."), status ); } #if 0 - if(pMac->hal.pCBackFnTxComp == NULL) + if(pMac->hal.pCBackFnTxComp == NULL) { pMac->hal.pCBackFnTxComp = (tpCBackFnTxComp)limTdlsTeardownTxComplete; - if(TX_SUCCESS != tx_timer_activate(&pMac->hal.txCompTimer)) + if(TX_SUCCESS != tx_timer_activate(&pMac->hal.txCompTimer)) { status = eHAL_STATUS_FAILURE; return status; @@ -1612,12 +1607,12 @@ tSirRetStatus limSendTdlsTeardownFrame(tpAniSirGlobal pMac, return status ; } #endif - + if( addIeLen != 0 ) { LIM_LOG_TDLS(VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, ("Copy Additional Ie Len = %d"), addIeLen )); - palCopyMemory( pMac->hHdd, pFrame + header_offset + nPayload, addIe, addIeLen ); + vos_mem_copy( pFrame + header_offset + nPayload, addIe, addIeLen ); } #ifndef NO_PAD_TDLS_MIN_8023_SIZE @@ -1637,7 +1632,8 @@ tSirRetStatus limSendTdlsTeardownFrame(tpAniSirGlobal pMac, /* padding zero if more than 5 bytes are required */ if (padLen > MIN_VENDOR_SPECIFIC_IE_SIZE) - palZeroMemory( pMac->hHdd, pFrame + header_offset + nPayload + addIeLen + MIN_VENDOR_SPECIFIC_IE_SIZE, padLen - MIN_VENDOR_SPECIFIC_IE_SIZE); + vos_mem_set( pFrame + header_offset + nPayload + addIeLen + MIN_VENDOR_SPECIFIC_IE_SIZE, + padLen - MIN_VENDOR_SPECIFIC_IE_SIZE, 0); } #endif LIM_LOG_TDLS(VOS_TRACE(VOS_MODULE_ID_PE, TDLS_DEBUG_LOG_LEVEL, ("[TDLS] action %d (%s) -%s-> OTA"), @@ -1648,7 +1644,7 @@ tSirRetStatus limSendTdlsTeardownFrame(tpAniSirGlobal pMac, HAL_TXRX_FRM_802_11_DATA, ANI_TXDIR_TODS, TID_AC_VI, - limTxComplete, pFrame, + limTxComplete, pFrame, limMgmtTXComplete, HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME, smeSessionId ); @@ -1688,15 +1684,15 @@ static tSirRetStatus limSendTdlsSetupRspFrame(tpAniSirGlobal pMac, // uint32 tdlsChannelBondingMode; tANI_U8 smeSessionId = 0; - if(psessionEntry) - smeSessionId = psessionEntry->smeSessionId; + if (NULL != psessionEntry) + smeSessionId = psessionEntry->smeSessionId; + /* * The scheme here is to fill out a 'tDot11fProbeRequest' structure * and then hand it off to 'dot11fPackProbeRequest' (for * serialization). We start by zero-initializing the structure: */ - palZeroMemory( pMac->hHdd, ( tANI_U8* )&tdlsSetupRsp, - sizeof( tDot11fTDLSSetupRsp ) ); + vos_mem_set( ( tANI_U8* )&tdlsSetupRsp, sizeof( tDot11fTDLSSetupRsp ),0 ); /* * setup Fixed fields, @@ -1742,71 +1738,20 @@ static tSirRetStatus limSendTdlsSetupRspFrame(tpAniSirGlobal pMac, tdlsSetupRsp.QOSCapsStation.present = 1; tdlsSetupRsp.QOSCapsStation.max_sp_length = 0; tdlsSetupRsp.QOSCapsStation.qack = 0; - tdlsSetupRsp.QOSCapsStation.acbe_uapsd = 1; - tdlsSetupRsp.QOSCapsStation.acbk_uapsd = 1; - tdlsSetupRsp.QOSCapsStation.acvi_uapsd = 1; - tdlsSetupRsp.QOSCapsStation.acvo_uapsd = 1; + tdlsSetupRsp.QOSCapsStation.acbe_uapsd = ((pMac->lim.gLimTDLSUapsdMask & 0x08) >> 3); + tdlsSetupRsp.QOSCapsStation.acbk_uapsd = ((pMac->lim.gLimTDLSUapsdMask & 0x04) >> 2); + tdlsSetupRsp.QOSCapsStation.acvi_uapsd = ((pMac->lim.gLimTDLSUapsdMask & 0x02) >> 1); + tdlsSetupRsp.QOSCapsStation.acvo_uapsd = (pMac->lim.gLimTDLSUapsdMask & 0x01); wlan_cfgGetInt(pMac,WNI_CFG_DOT11_MODE,&selfDot11Mode); - if (psessionEntry->currentOperChannel <= SIR_11B_CHANNEL_END) - { - if (IS_DOT11_MODE_HT(selfDot11Mode)) - { - /* Include HT Capability IE */ - PopulateDot11fHTCaps( pMac, psessionEntry, &tdlsSetupRsp.HTCaps ); - - tdlsSetupRsp.HTCaps.present = 1; - /* hardcode NO channel bonding in 2.4Ghz */ - tdlsSetupRsp.HTCaps.supportedChannelWidthSet = 0; - } - else - { - tdlsSetupRsp.HTCaps.present = 0; - } -#ifdef WLAN_FEATURE_11AC - /* in 2.4Ghz, hardcode NO 11ac */ - tdlsSetupRsp.VHTCaps.present = 0; -#endif - } - else - { - if (IS_DOT11_MODE_HT(selfDot11Mode)) - { - /* Include HT Capability IE */ - PopulateDot11fHTCaps( pMac, psessionEntry, &tdlsSetupRsp.HTCaps ); + /* Populate HT/VHT Capabilities */ + PopulateDot11fTdlsHtVhtCap( pMac, selfDot11Mode, &tdlsSetupRsp.HTCaps, + &tdlsSetupRsp.VHTCaps, psessionEntry ); - tdlsSetupRsp.HTCaps.present = 1; - //Placeholder to support different channel bonding mode of TDLS than AP. - //wlan_cfgGetInt(pMac,WNI_CFG_TDLS_CHANNEL_BONDING_MODE,&tdlsChannelBondingMode); - //tdlsSetupRsp.HTCaps.supportedChannelWidthSet = tdlsChannelBondingMode ? 1 : 0; - tdlsSetupRsp.HTCaps.supportedChannelWidthSet = 1; // hardcode it to max - } - else - { - tdlsSetupRsp.HTCaps.present = 0; - } -#ifdef WLAN_FEATURE_11AC - /* Include VHT Capability IE */ - PopulateDot11fVHTCaps( pMac, psessionEntry, &tdlsSetupRsp.VHTCaps ); - if (IS_DOT11_MODE_VHT(selfDot11Mode)) - { - tANI_U16 aid; - tpDphHashNode pStaDs; - - pStaDs = dphLookupHashEntry(pMac, peerMac, &aid , &psessionEntry->dph.dphHashTable); - if (NULL != pStaDs) - { - tdlsSetupRsp.AID.present = 1; - tdlsSetupRsp.AID.assocId = aid | LIM_AID_MASK; // set bit 14 and 15 1's - } - } - else - { - tdlsSetupRsp.VHTCaps.present = 0; - } -#endif - } + /* Populate AID */ + PopulateDotfTdlsVhtAID( pMac, selfDot11Mode, peerMac, + &tdlsSetupRsp.AID, psessionEntry ); tdlsSetupRsp.Status.status = setupStatus ; @@ -1824,7 +1769,7 @@ static tSirRetStatus limSendTdlsSetupRspFrame(tpAniSirGlobal pMac, } else if ( DOT11F_WARNED( status ) ) { - limLog( pMac, LOGW, FL("There were warnings while calculating" + limLog( pMac, LOGW, FL("There were warnings while calculating " "the packed size for a discovery Request (" "0x%08x)."), status ); } @@ -1855,7 +1800,7 @@ static tSirRetStatus limSendTdlsSetupRspFrame(tpAniSirGlobal pMac, } /* zero out the memory */ - palZeroMemory( pMac->hHdd, pFrame, nBytes ); + vos_mem_set( pFrame, nBytes, 0 ); /* * IE formation, memory allocation is completed, Now form TDLS discovery @@ -1875,7 +1820,7 @@ static tSirRetStatus limSendTdlsSetupRspFrame(tpAniSirGlobal pMac, tdlsSetupRsp.LinkIdentifier.bssid[4] = 0xde; tdlsSetupRsp.LinkIdentifier.bssid[5] = 0xad; VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, - ("TDLS negative running: wrong BSSID %02x:%02x:%02x:%02x:%02x:%02x in TDLS Setup Rsp"), \ + ("TDLS negative running: wrong BSSID %02x:%02x:%02x:%02x:%02x:%02x in TDLS Setup Rsp"), tdlsSetupRsp.LinkIdentifier.bssid[0], tdlsSetupRsp.LinkIdentifier.bssid[1], tdlsSetupRsp.LinkIdentifier.bssid[2], @@ -1892,16 +1837,16 @@ static tSirRetStatus limSendTdlsSetupRspFrame(tpAniSirGlobal pMac, if ( DOT11F_FAILED( status ) ) { - limLog( pMac, LOGE, FL("Failed to pack a TDLS discovery req \ - (0x%08x)."), status ); + limLog( pMac, LOGE, FL("Failed to pack a TDLS discovery req " + "(0x%08x)."), status ); palPktFree( pMac->hHdd, HAL_TXRX_FRM_802_11_MGMT, ( void* ) pFrame, ( void* ) pPacket ); return eSIR_FAILURE; } else if ( DOT11F_WARNED( status ) ) { - limLog( pMac, LOGW, FL("There were warnings while packing TDLS" - "Discovery Request (0x%08x).") ); + limLog( pMac, LOGW, FL("There were warnings while packing TDLS " + "Discovery Request (0x%08x)."), status ); } //Copy the additional IE. @@ -1910,7 +1855,7 @@ static tSirRetStatus limSendTdlsSetupRspFrame(tpAniSirGlobal pMac, //if there is any IOT issue. if( addIeLen != 0 ) { - palCopyMemory( pMac->hHdd, pFrame + header_offset + nPayload, addIe, addIeLen ); + vos_mem_copy( pFrame + header_offset + nPayload, addIe, addIeLen ); } LIM_LOG_TDLS(VOS_TRACE(VOS_MODULE_ID_PE, TDLS_DEBUG_LOG_LEVEL, ("[TDLS] action %d (%s) -AP-> OTA"), @@ -1955,17 +1900,16 @@ tSirRetStatus limSendTdlsLinkSetupCnfFrame(tpAniSirGlobal pMac, tSirMacAddr peer #ifndef NO_PAD_TDLS_MIN_8023_SIZE tANI_U32 padLen = 0; #endif - tANI_U8 smeSessionId = 0; + tANI_U8 smeSessionId = 0; - if(psessionEntry) - smeSessionId = psessionEntry->smeSessionId; /* * The scheme here is to fill out a 'tDot11fProbeRequest' structure * and then hand it off to 'dot11fPackProbeRequest' (for * serialization). We start by zero-initializing the structure: */ - palZeroMemory( pMac->hHdd, ( tANI_U8* )&tdlsSetupCnf, - sizeof( tDot11fTDLSSetupCnf ) ); + smeSessionId = psessionEntry->smeSessionId; + + vos_mem_set( ( tANI_U8* )&tdlsSetupCnf, sizeof( tDot11fTDLSSetupCnf ), 0 ); /* * setup Fixed fields, @@ -1978,8 +1922,8 @@ tSirRetStatus limSendTdlsLinkSetupCnfFrame(tpAniSirGlobal pMac, tSirMacAddr peer PopulateDot11fLinkIden( pMac, psessionEntry, &tdlsSetupCnf.LinkIdentifier, peerMac, TDLS_INITIATOR) ; #else - palCopyMemory( pMac->hHdd, (tANI_U8 *)&tdlsSetupCnf.LinkIdentifier, - (tANI_U8 *)&setupRsp->LinkIdentifier, sizeof(tDot11fIELinkIdentifier)) ; + vos_mem_copy( (tANI_U8 *)&tdlsSetupCnf.LinkIdentifier, + (tANI_U8 *)&setupRsp->LinkIdentifier, sizeof(tDot11fIELinkIdentifier)) ; #endif /* @@ -2014,7 +1958,7 @@ tSirRetStatus limSendTdlsLinkSetupCnfFrame(tpAniSirGlobal pMac, tSirMacAddr peer } else if ( DOT11F_WARNED( status ) ) { - limLog( pMac, LOGW, FL("There were warnings while calculating" + limLog( pMac, LOGW, FL("There were warnings while calculating " "the packed size for a discovery Request (" "0x%08x)."), status ); } @@ -2063,7 +2007,7 @@ tSirRetStatus limSendTdlsLinkSetupCnfFrame(tpAniSirGlobal pMac, tSirMacAddr peer } /* zero out the memory */ - palZeroMemory( pMac->hHdd, pFrame, nBytes ); + vos_mem_set( pFrame, nBytes, 0 ); /* * IE formation, memory allocation is completed, Now form TDLS discovery @@ -2088,16 +2032,16 @@ tSirRetStatus limSendTdlsLinkSetupCnfFrame(tpAniSirGlobal pMac, tSirMacAddr peer if ( DOT11F_FAILED( status ) ) { - limLog( pMac, LOGE, FL("Failed to pack a TDLS discovery req \ - (0x%08x)."), status ); + limLog( pMac, LOGE, FL("Failed to pack a TDLS discovery req " + "(0x%08x)."), status ); palPktFree( pMac->hHdd, HAL_TXRX_FRM_802_11_MGMT, ( void* ) pFrame, ( void* ) pPacket ); return eSIR_FAILURE; } else if ( DOT11F_WARNED( status ) ) { - limLog( pMac, LOGW, FL("There were warnings while packing TDLS" - "Discovery Request (0x%08x).") ); + limLog( pMac, LOGW, FL("There were warnings while packing TDLS " + "Discovery Request (0x%08x)."), status ); } #if 0 if(pMac->hal.pCBackFnTxComp == NULL) @@ -2122,7 +2066,7 @@ tSirRetStatus limSendTdlsLinkSetupCnfFrame(tpAniSirGlobal pMac, tSirMacAddr peer //if there is any IOT issue. if( addIeLen != 0 ) { - palCopyMemory( pMac->hHdd, pFrame + header_offset + nPayload, addIe, addIeLen ); + vos_mem_copy( pFrame + header_offset + nPayload, addIe, addIeLen ); } #ifndef NO_PAD_TDLS_MIN_8023_SIZE @@ -2142,7 +2086,8 @@ tSirRetStatus limSendTdlsLinkSetupCnfFrame(tpAniSirGlobal pMac, tSirMacAddr peer /* padding zero if more than 5 bytes are required */ if (padLen > MIN_VENDOR_SPECIFIC_IE_SIZE) - palZeroMemory( pMac->hHdd, pFrame + header_offset + nPayload + addIeLen + MIN_VENDOR_SPECIFIC_IE_SIZE, padLen - MIN_VENDOR_SPECIFIC_IE_SIZE); + vos_mem_set( pFrame + header_offset + nPayload + addIeLen + MIN_VENDOR_SPECIFIC_IE_SIZE, + padLen - MIN_VENDOR_SPECIFIC_IE_SIZE, 0); } #endif @@ -2176,7 +2121,7 @@ tSirRetStatus limSendTdlsLinkSetupCnfFrame(tpAniSirGlobal pMac, tSirMacAddr peer /* * Convert HT caps to lim based HT caps */ -static void limTdlsCovertHTCaps(tpAniSirGlobal pMac , +static void limTdlsCovertHTCaps(tpAniSirGlobal pMac, tSirTdlsPeerInfo *peerInfo, tDot11fIEHTCaps *HTCaps) { @@ -2207,7 +2152,7 @@ static void limTdlsCovertHTCaps(tpAniSirGlobal pMac , peerInfo->tdlsPeerHtExtCaps.pco = HTCaps->pco ; peerInfo->tdlsPeerHtExtCaps.transitionTime = HTCaps->transitionTime ; peerInfo->tdlsPeerHtExtCaps.mcsFeedback = HTCaps->mcsFeedback ; - palCopyMemory(pMac->hHdd, peerInfo->supportedMCSSet, + vos_mem_copy( peerInfo->supportedMCSSet, HTCaps->supportedMCSSet, SIZE_OF_SUPPORTED_MCS_SET) ; return ; @@ -2250,7 +2195,7 @@ void limTdlsUpdateLinkReqPeerInfo(tpAniSirGlobal pMac, /* Populate peer info of tdls discovery result */ - tdlsUpdateCapInfo(&setupPeer->capabilityInfo , &setupReq->Capabilities) ; + tdlsUpdateCapInfo(&setupPeer->capabilityInfo, &setupReq->Capabilities) ; if(setupReq->SuppRates.present) { @@ -2263,29 +2208,29 @@ void limTdlsUpdateLinkReqPeerInfo(tpAniSirGlobal pMac, { ConvertQOSCapsStation(pMac->hHdd, &setupPeer->qosCaps, &setupReq->QOSCapsStation) ; - LIM_LOG_TDLS(VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,("setupReq->SPLen=%d (be %d %d %d %d vo) more %d qack %d."), \ - setupReq->QOSCapsStation.max_sp_length, setupReq->QOSCapsStation.acbe_uapsd, \ - setupReq->QOSCapsStation.acbk_uapsd, setupReq->QOSCapsStation.acvi_uapsd, \ - setupReq->QOSCapsStation.acvo_uapsd, setupReq->QOSCapsStation.more_data_ack, \ + LIM_LOG_TDLS(VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,("setupReq->SPLen=%d (be %d %d %d %d vo) more %d qack %d."), + setupReq->QOSCapsStation.max_sp_length, setupReq->QOSCapsStation.acbe_uapsd, + setupReq->QOSCapsStation.acbk_uapsd, setupReq->QOSCapsStation.acvi_uapsd, + setupReq->QOSCapsStation.acvo_uapsd, setupReq->QOSCapsStation.more_data_ack, setupReq->QOSCapsStation.qack)); } - if(setupReq->ExtSuppRates.present) + if (setupReq->ExtSuppRates.present) { setupPeer->ExtRatesPresent = 1; ConvertExtSuppRates( pMac, &setupPeer->extendedRates, &setupReq->ExtSuppRates ); } /* update HT caps */ - if(setupReq->HTCaps.present) + if (setupReq->HTCaps.present) { - palCopyMemory(pMac->hHdd, &setupPeer->tdlsPeerHTCaps, + vos_mem_copy( &setupPeer->tdlsPeerHTCaps, &setupReq->HTCaps, sizeof(tDot11fIEHTCaps)) ; } /* Update EXT caps */ - if(setupReq->ExtCap.present) + if (setupReq->ExtCap.present) { - palCopyMemory(pMac->hHdd, &setupPeer->tdlsPeerExtCaps, + vos_mem_copy( &setupPeer->tdlsPeerExtCaps, &setupReq->ExtCap, sizeof(tDot11fIEExtCap)) ; } @@ -2301,7 +2246,7 @@ void limTdlsUpdateLinkRspPeerInfo(tpAniSirGlobal pMac, { /* Populate peer info of tdls discovery result */ - tdlsUpdateCapInfo(&setupPeer->capabilityInfo , &setupRsp->Capabilities) ; + tdlsUpdateCapInfo(&setupPeer->capabilityInfo, &setupRsp->Capabilities) ; if(setupRsp->SuppRates.present) { @@ -2314,10 +2259,10 @@ void limTdlsUpdateLinkRspPeerInfo(tpAniSirGlobal pMac, { ConvertQOSCapsStation(pMac->hHdd, &setupPeer->qosCaps, &setupRsp->QOSCapsStation) ; - LIM_LOG_TDLS(VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, ("setupRsp->SPLen=%d (be %d %d %d %d vo) more %d qack %d."), \ - setupRsp->QOSCapsStation.max_sp_length, setupRsp->QOSCapsStation.acbe_uapsd, \ - setupRsp->QOSCapsStation.acbk_uapsd, setupRsp->QOSCapsStation.acvi_uapsd, \ - setupRsp->QOSCapsStation.acvo_uapsd, setupRsp->QOSCapsStation.more_data_ack, \ + LIM_LOG_TDLS(VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, ("setupRsp->SPLen=%d (be %d %d %d %d vo) more %d qack %d."), + setupRsp->QOSCapsStation.max_sp_length, setupRsp->QOSCapsStation.acbe_uapsd, + setupRsp->QOSCapsStation.acbk_uapsd, setupRsp->QOSCapsStation.acvi_uapsd, + setupRsp->QOSCapsStation.acvo_uapsd, setupRsp->QOSCapsStation.more_data_ack, setupRsp->QOSCapsStation.qack)); } @@ -2328,16 +2273,16 @@ void limTdlsUpdateLinkRspPeerInfo(tpAniSirGlobal pMac, &setupRsp->ExtSuppRates ); } /* update HT caps */ - if(setupRsp->HTCaps.present) + if (setupRsp->HTCaps.present) { - palCopyMemory(pMac->hHdd, &setupPeer->tdlsPeerHTCaps, + vos_mem_copy(&setupPeer->tdlsPeerHTCaps, &setupRsp->HTCaps, sizeof(tDot11fIEHTCaps)) ; } /* update EXT caps */ - if(setupRsp->ExtCap.present) + if (setupRsp->ExtCap.present) { - palCopyMemory(pMac->hHdd, &setupPeer->tdlsPeerExtCaps, + vos_mem_copy( &setupPeer->tdlsPeerExtCaps, &setupRsp->ExtCap, sizeof(tDot11fIEExtCap)) ; } @@ -2345,7 +2290,7 @@ void limTdlsUpdateLinkRspPeerInfo(tpAniSirGlobal pMac, } #endif -/* This Function is similar to PopulateDot11fHTCaps , except that the HT Capabilities +/* This Function is similar to PopulateDot11fHTCaps, except that the HT Capabilities * are considered from the AddStaReq rather from the cfg.dat as in PopulateDot11fHTCaps */ static tSirRetStatus limTdlsPopulateDot11fHTCaps(tpAniSirGlobal pMac, tpPESession psessionEntry, @@ -2413,7 +2358,8 @@ static tSirRetStatus limTdlsPopulateDot11fHTCaps(tpAniSirGlobal pMac, tpPESessio dot11fLog( pMac, LOG2, FL( "AMPDU Param: %x" ), nCfgValue); - palCopyMemory(pMac->hHdd, pDot11f->supportedMCSSet, pTdlsAddStaReq->htCap.suppMcsSet, SIZE_OF_SUPPORTED_MCS_SET); + vos_mem_copy( pDot11f->supportedMCSSet, pTdlsAddStaReq->htCap.suppMcsSet, + SIZE_OF_SUPPORTED_MCS_SET); nCfgValue = pTdlsAddStaReq->htCap.extendedHtCapInfo; @@ -2547,11 +2493,12 @@ limTdlsPopulateMatchingRateSet(tpAniSirGlobal pMac, // get own rate set val = WNI_CFG_OPERATIONAL_RATE_SET_LEN; if (wlan_cfgGetStr(pMac, WNI_CFG_OPERATIONAL_RATE_SET, - (tANI_U8 *) &tempRateSet.rate, - &val) != eSIR_SUCCESS) + (tANI_U8 *) &tempRateSet.rate, + &val) != eSIR_SUCCESS) { /// Could not get rateset from CFG. Log error. limLog(pMac, LOGP, FL("could not retrieve rateset")); + val = 0; } tempRateSet.numRates = val; @@ -2561,8 +2508,8 @@ limTdlsPopulateMatchingRateSet(tpAniSirGlobal pMac, // get own extended rate set val = WNI_CFG_EXTENDED_OPERATIONAL_RATE_SET_LEN; if (wlan_cfgGetStr(pMac, WNI_CFG_EXTENDED_OPERATIONAL_RATE_SET, - (tANI_U8 *) &tempRateSet2.rate, - &val) != eSIR_SUCCESS) + (tANI_U8 *) &tempRateSet2.rate, + &val) != eSIR_SUCCESS) tempRateSet2.numRates = val; } else @@ -2624,7 +2571,7 @@ limTdlsPopulateMatchingRateSet(tpAniSirGlobal pMac, tpSirSupportedRates rates = &pStaDs->supportedRates; tANI_U8 aRateIndex = 0; tANI_U8 bRateIndex = 0; - palZeroMemory( pMac->hHdd, (tANI_U8 *) rates, sizeof(tSirSupportedRates)); + vos_mem_set( (tANI_U8 *) rates, sizeof(tSirSupportedRates), 0); for (i = 0;i < tempRateSet2.numRates; i++) { @@ -2765,8 +2712,9 @@ static void limTdlsUpdateHashNodeInfo(tpAniSirGlobal pMac, tDphHashNode *pStaDs, { //tDot11fIEHTCaps *htCaps = &setupPeerInfo->tdlsPeerHTCaps ; tDot11fIEHTCaps htCap, *htCaps; + tDot11fIEVHTCaps *pVhtCaps = NULL; #ifdef WLAN_FEATURE_11AC - tDot11fIEVHTCaps vhtCap, *pVhtCaps; + tDot11fIEVHTCaps vhtCap; tANI_U8 cbMode; #endif tpDphHashNode pSessStaDs = NULL; @@ -2809,9 +2757,20 @@ static void limTdlsUpdateHashNodeInfo(tpAniSirGlobal pMac, tDphHashNode *pStaDs, pVhtCaps = &vhtCap; if (pVhtCaps->present) { - pStaDs->mlmStaContext.vhtCapability = 1 ; - pStaDs->vhtSupportedChannelWidthSet = WNI_CFG_VHT_CHANNEL_WIDTH_80MHZ; - pStaDs->htSupportedChannelWidthSet = eHT_CHANNEL_WIDTH_40MHZ ; + pStaDs->mlmStaContext.vhtCapability = 1 ; + + if ((psessionEntry->currentOperChannel <= SIR_11B_CHANNEL_END) && + pMac->roam.configParam.enableVhtFor24GHz) + { + pStaDs->vhtSupportedChannelWidthSet = WNI_CFG_VHT_CHANNEL_WIDTH_20_40MHZ; + pStaDs->htSupportedChannelWidthSet = eHT_CHANNEL_WIDTH_20MHZ; + } + else + { + pStaDs->vhtSupportedChannelWidthSet = WNI_CFG_VHT_CHANNEL_WIDTH_80MHZ; + pStaDs->htSupportedChannelWidthSet = eHT_CHANNEL_WIDTH_40MHZ ; + } + pStaDs->vhtLdpcCapable = pVhtCaps->ldpcCodingCap; pStaDs->vhtBeamFormerCapable= pVhtCaps->suBeamFormerCap; // TODO , is it necessary , Sunil??? @@ -2854,7 +2813,7 @@ static void limTdlsUpdateHashNodeInfo(tpAniSirGlobal pMac, tDphHashNode *pStaDs, pTdlsAddStaReq->supported_rates_length, (tANI_U8 *)pTdlsAddStaReq->htCap.suppMcsSet, &pStaDs->mlmStaContext.propRateSet, - psessionEntry, (tDot11fIEVHTCaps *)&pTdlsAddStaReq->vhtCap); + psessionEntry, pVhtCaps); /* TDLS Dummy AddSTA does not have right capability , is it OK ?? */ @@ -2877,9 +2836,9 @@ tANI_U8 limTdlsFindLinkPeer(tpAniSirGlobal pMac, tSirMacAddr peerMac, while (linkSetupList != NULL) { - if (palEqualMemory( pMac->hHdd,(tANI_U8 *) peerMac, - (tANI_U8 *) linkSetupList->peerMac, - sizeof(tSirMacAddr)) ) + if (vos_mem_compare((tANI_U8 *) peerMac, + (tANI_U8 *) linkSetupList->peerMac, + sizeof(tSirMacAddr)) ) { checkNode = TDLS_NODE_FOUND ; *setupPeer = linkSetupList ; @@ -2913,7 +2872,7 @@ tSirTdlsPeerInfo *limTdlsFindDisPeer(tpAniSirGlobal pMac, tSirMacAddr peerMac) peerInfo->peerMac[4], peerInfo->peerMac[5]) ; - if (palEqualMemory( pMac->hHdd,(tANI_U8 *) peerMac, + if (vos_mem_compare((tANI_U8 *) peerMac, (tANI_U8 *) &peerInfo->peerMac, sizeof(tSirMacAddr)) ) { break ; @@ -3000,7 +2959,7 @@ void limTdlsDelLinkPeer(tpAniSirGlobal pMac, tSirMacAddr peerMac) for(currentNode = *linkSetupList ; currentNode != NULL ; prevNode = currentNode, currentNode = currentNode->next) { - if (palEqualMemory( pMac->hHdd,(tANI_U8 *) peerMac, + if (vos_mem_compare( (tANI_U8 *) peerMac, (tANI_U8 *) currentNode->peerMac, sizeof(tSirMacAddr)) ) { @@ -3021,7 +2980,7 @@ void limTdlsDelLinkPeer(tpAniSirGlobal pMac, tSirMacAddr peerMac) { prevNode->next = currentNode->next ; } - palFreeMemory(pMac, currentNode) ; + vos_mem_free(currentNode) ; return ; } } @@ -3054,15 +3013,15 @@ static tSirRetStatus limProcessTdlsDisReqFrame(tpAniSirGlobal pMac, if ( DOT11F_FAILED( status ) ) { - limLog(pMac, LOGE, FL("Failed to parse TDLS discovery Request \ - frame (0x%08x, %d bytes):"),status, frmLen); + limLog(pMac, LOGE, FL("Failed to parse TDLS discovery Request " + "frame (0x%08x, %d bytes):"),status, frmLen); PELOG2(sirDumpBuf(pMac, SIR_DBG_MODULE_ID, LOG2, pBody, frmLen);) return eSIR_FAILURE; } else if ( DOT11F_WARNED( status ) ) { - limLog( pMac, LOGW, FL("There were warnings while unpacking an\ - TDLS discovery Request frame (0x%08x," "%d bytes):"), + limLog( pMac, LOGW, FL("There were warnings while unpacking a TDLS " + "discovery Request frame (0x%08x, %d bytes):"), status, frmLen ); PELOG2(sirDumpBuf(pMac, SIR_DBG_MODULE_ID, LOG2, pBody, frmLen);) } @@ -3076,8 +3035,8 @@ static tSirRetStatus limProcessTdlsDisReqFrame(tpAniSirGlobal pMac, &tdlsDisReq.LinkIdentifier.bssid[0], &sessionId) ; if(NULL == psessionEntry) { - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, \ - ("no Seesion entry for TDLS session (bssid %02x:%02x:%02x:%02x:%02x:%02x)"), \ + VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, + ("no Seesion entry for TDLS session (bssid %02x:%02x:%02x:%02x:%02x:%02x)"), tdlsDisReq.LinkIdentifier.bssid[0], tdlsDisReq.LinkIdentifier.bssid[1], tdlsDisReq.LinkIdentifier.bssid[2], @@ -3090,7 +3049,7 @@ static tSirRetStatus limProcessTdlsDisReqFrame(tpAniSirGlobal pMac, } /* varify BSSID */ - status = palEqualMemory(pMac->hHdd, &psessionEntry->bssId[0], + status = vos_mem_compare( &psessionEntry->bssId[0], &tdlsDisReq.LinkIdentifier.bssid[0], sizeof(tSirMacAddr)) ; VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO, ("lim BSSID %02x, %02x, %02x, %02x, %02x, %02x"), @@ -3121,7 +3080,7 @@ static tSirRetStatus limProcessTdlsDisReqFrame(tpAniSirGlobal pMac, * check if this is echo of our transmitted discovery request * drop it here, TODO: better to drop this in TL. */ - status = palEqualMemory(pMac->hHdd, psessionEntry->selfMacAddr, + status = vos_mem_compare( psessionEntry->selfMacAddr, &tdlsDisReq.LinkIdentifier.InitStaAddr[0], sizeof(tSirMacAddr)) ; if(status) @@ -3135,7 +3094,7 @@ static tSirRetStatus limProcessTdlsDisReqFrame(tpAniSirGlobal pMac, * STA_MAC--> MAC of TDLS discovery initiator * STA_PEER_MAC--> MAC of TDLS discovery responder. */ - palCopyMemory(pMac->hHdd, peerMac, + vos_mem_copy( peerMac, &tdlsDisReq.LinkIdentifier.InitStaAddr[0], sizeof(tSirMacAddr)) ; /* TODO, do more validation */ @@ -3151,13 +3110,11 @@ static tSirRetStatus limProcessTdlsDisReqFrame(tpAniSirGlobal pMac, * out. We are freeing this memory at the time we are sending this * collected peer info to SME. */ - status = palAllocateMemory(pMac->hHdd, (void **)&tdlsDisResult, - sizeof(tLimDisResultList)) ; - - if(status != eHAL_STATUS_SUCCESS) + tdlsDisResult = vos_mem_malloc(sizeof(tLimDisResultList)); + if ( NULL == tdlsDisResult ) { - limLog(pMac, LOGP, FL("alloc fail for TDLS discovery \ - reponse info")) ; + limLog(pMac, LOGP, FL("alloc fail for TDLS discovery " + "reponse info")) ; return eSIR_FAILURE ; } @@ -3169,8 +3126,7 @@ static tSirRetStatus limProcessTdlsDisReqFrame(tpAniSirGlobal pMac, peerInfo->sessionId = psessionEntry->peSessionId; /* Populate peer info of tdls discovery result */ - status = palCopyMemory(pMac->hHdd, peerInfo->peerMac, peerMac, - sizeof(tSirMacAddr)) ; + vos_mem_copy( peerInfo->peerMac, peerMac, sizeof(tSirMacAddr)) ; /* * Now, as per D13, there will not be any Supp rates, ext Supp rates @@ -3208,7 +3164,7 @@ static tSirRetStatus limProcessTdlsDisReqFrame(tpAniSirGlobal pMac, } swapBitField16(caps, ( tANI_U16* )&capsInfo ); /* update Caps Info */ - tdlsUpdateCapInfo(&peerInfo->capabilityInfo , &capsInfo) ; + tdlsUpdateCapInfo(&peerInfo->capabilityInfo, &capsInfo) ; PopulateDot11fHTCaps( pMac, psessionEntry, &HTCaps ); limTdlsCovertHTCaps(pMac, peerInfo, &HTCaps) ; @@ -3279,16 +3235,16 @@ static tSirRetStatus limProcessTdlsSetupReqFrame(tpAniSirGlobal pMac, if ( DOT11F_FAILED( status ) ) { - limLog(pMac, LOGE, FL("Failed to parse TDLS discovery Request \ - frame (0x%08x, %d bytes):"),status, frmLen); + limLog(pMac, LOGE, FL("Failed to parse TDLS discovery Request " + "frame (0x%08x, %d bytes):"),status, frmLen); PELOG2(sirDumpBuf(pMac, SIR_DBG_MODULE_ID, LOG2, pBody, frmLen);) return eSIR_FAILURE; } else if ( DOT11F_WARNED( status ) ) { - limLog( pMac, LOGW, FL("There were warnings while unpacking an\ - TDLS setup Request frame (0x%08x," "%d bytes):"), - status, pBody ); + limLog( pMac, LOGW, FL("There were warnings while unpacking a TDLS " + "setup Request frame (0x%08x, %d bytes):"), + status, frmLen ); PELOG2(sirDumpBuf(pMac, SIR_DBG_MODULE_ID, LOG2, pBody, frmLen);) } /* @@ -3300,8 +3256,8 @@ static tSirRetStatus limProcessTdlsSetupReqFrame(tpAniSirGlobal pMac, &tdlsSetupReq.LinkIdentifier.bssid[0], &sessionId) ; if(NULL == psessionEntry) { - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, \ - ("no Seesion entry for TDLS session (bssid %02x:%02x:%02x:%02x:%02x:%02x)"), \ + VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, + ("no Seesion entry for TDLS session (bssid %02x:%02x:%02x:%02x:%02x:%02x)"), tdlsSetupReq.LinkIdentifier.bssid[0], tdlsSetupReq.LinkIdentifier.bssid[1], tdlsSetupReq.LinkIdentifier.bssid[2], @@ -3313,7 +3269,7 @@ static tSirRetStatus limProcessTdlsSetupReqFrame(tpAniSirGlobal pMac, return eSIR_FAILURE ; } /* TODO: we don;t need this check now, varify BSSID */ - status = palEqualMemory(pMac->hHdd, psessionEntry->bssId, + status = vos_mem_compare( psessionEntry->bssId, &tdlsSetupReq.LinkIdentifier.bssid[0], sizeof(tSirMacAddr)) ; @@ -3321,8 +3277,9 @@ static tSirRetStatus limProcessTdlsSetupReqFrame(tpAniSirGlobal pMac, { limLog( pMac, LOGE, FL("TDLS setup request frame from other BSS -> something wrong. Check RXP filter")) ; - limSendTdlsSetupRspFrame(pMac, tdlsSetupReq.LinkIdentifier.InitStaAddr, tdlsSetupReq.DialogToken.token , psessionEntry, - TDLS_SETUP_STATUS_FAILURE, NULL, 0 ) ; + limSendTdlsSetupRspFrame(pMac, tdlsSetupReq.LinkIdentifier.InitStaAddr, + tdlsSetupReq.DialogToken.token, psessionEntry, + TDLS_SETUP_STATUS_FAILURE, NULL, 0 ) ; return eSIR_FAILURE ; } @@ -3471,8 +3428,8 @@ static tSirRetStatus limProcessTdlsSetupReqFrame(tpAniSirGlobal pMac, * initiator, we don't care, if this request is unicast ro broadcast, * we simply, send discovery response frame on direct link. */ - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, - (void **) &setupPeer, sizeof( tLimTdlsLinkSetupPeer ))) + setupPeer = vos_mem_malloc(sizeof( tLimTdlsLinkSetupPeer )); + if ( NULL == setupPeer ) { VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, ( "Unable to allocate memory during ADD_STA" )); @@ -3488,7 +3445,7 @@ static tSirRetStatus limProcessTdlsSetupReqFrame(tpAniSirGlobal pMac, setupPeer->tdls_sessionId = psessionEntry->peSessionId; setupPeer->tdls_bIsResponder = 0; - palCopyMemory(pMac->hHdd, setupPeer->peerMac, + vos_mem_copy(setupPeer->peerMac, &tdlsSetupReq.LinkIdentifier.InitStaAddr[0], sizeof(tSirMacAddr)) ; @@ -3509,12 +3466,12 @@ static tSirRetStatus limProcessTdlsSetupReqFrame(tpAniSirGlobal pMac, setupPeer, psessionEntry)) { VOS_ASSERT(0) ; - palFreeMemory(pMac->hHdd, (void **) &setupPeer) ; + vos_mem_free((void **) &setupPeer) ; return eSIR_FAILURE ; } limSendTdlsSetupRspFrame(pMac, tdlsSetupReq.LinkIdentifier.InitStaAddr, - tdlsSetupReq.DialogToken.token , psessionEntry, + tdlsSetupReq.DialogToken.token, psessionEntry, TDLS_SETUP_STATUS_SUCCESS, NULL, 0) ; limStartTdlsTimer(pMac, psessionEntry->peSessionId, @@ -3538,7 +3495,7 @@ static tSirRetStatus limProcessTdlsSetupReqFrame(tpAniSirGlobal pMac, setupPeer->tdls_sessionId = psessionEntry->peSessionId; setupPeer->tdls_bIsResponder = 0; - palCopyMemory(pMac->hHdd, setupPeer->peerMac, + vos_mem_copy( setupPeer->peerMac, &tdlsSetupReq.LinkIdentifier.InitStaAddr[0], sizeof(tSirMacAddr)) ; @@ -3553,7 +3510,7 @@ static tSirRetStatus limProcessTdlsSetupReqFrame(tpAniSirGlobal pMac, limTdlsUpdateLinkReqPeerInfo(pMac, setupPeer, &tdlsSetupReq) ; limSendTdlsSetupRspFrame(pMac, tdlsSetupReq.LinkIdentifier.InitStaAddr, - tdlsSetupReq.DialogToken.token , psessionEntry, + tdlsSetupReq.DialogToken.token, psessionEntry, TDLS_SETUP_STATUS_SUCCESS, NULL, 0) ; limStartTdlsTimer(pMac, psessionEntry->peSessionId, @@ -3585,15 +3542,15 @@ static tSirRetStatus limProcessTdlsSetupRspFrame(tpAniSirGlobal pMac, if ( DOT11F_FAILED( status ) ) { - limLog(pMac, LOGE, FL("Failed to parse TDLS discovery Request \ - frame (0x%08x, %d bytes):"),status, frmLen); + limLog(pMac, LOGE, FL("Failed to parse TDLS discovery Request " + "frame (0x%08x, %d bytes):"),status, frmLen); PELOG2(sirDumpBuf(pMac, SIR_DBG_MODULE_ID, LOG2, pBody, frmLen);) return eSIR_FAILURE; } else if ( DOT11F_WARNED( status ) ) { - limLog( pMac, LOGW, FL("There were warnings while unpacking an\ - TDLS discovery Request frame (0x%08x," "%d bytes):"), + limLog( pMac, LOGW, FL("There were warnings while unpacking a TDLS " + "discovery Request frame (0x%08x, %d bytes):"), status, frmLen ); PELOG2(sirDumpBuf(pMac, SIR_DBG_MODULE_ID, LOG2, pBody, frmLen);) } @@ -3607,8 +3564,8 @@ static tSirRetStatus limProcessTdlsSetupRspFrame(tpAniSirGlobal pMac, &tdlsSetupRsp.LinkIdentifier.bssid[0], &sessionId) ; if(NULL == psessionEntry) { - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, \ - ("no Seesion entry for TDLS session (bssid %02x:%02x:%02x:%02x:%02x:%02x)"), \ + VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, + ("no Seesion entry for TDLS session (bssid %02x:%02x:%02x:%02x:%02x:%02x)"), tdlsSetupRsp.LinkIdentifier.bssid[0], tdlsSetupRsp.LinkIdentifier.bssid[1], tdlsSetupRsp.LinkIdentifier.bssid[2], @@ -3621,7 +3578,7 @@ static tSirRetStatus limProcessTdlsSetupRspFrame(tpAniSirGlobal pMac, } /* varify BSSID */ - status = palEqualMemory(pMac->hHdd, psessionEntry->bssId, + status = vos_mem_compare( psessionEntry->bssId, &tdlsSetupRsp.LinkIdentifier.bssid[0], sizeof(tSirMacAddr)) ; @@ -3632,7 +3589,7 @@ static tSirRetStatus limProcessTdlsSetupRspFrame(tpAniSirGlobal pMac, VOS_ASSERT(0) ; return eSIR_FAILURE ; } - palCopyMemory(pMac->hHdd, peerMac, + vos_mem_copy( peerMac, &tdlsSetupRsp.LinkIdentifier.RespStaAddr[0], sizeof(tSirMacAddr)) ; @@ -3648,8 +3605,7 @@ static tSirRetStatus limProcessTdlsSetupRspFrame(tpAniSirGlobal pMac, if(NULL == setupPeer) { - limLog( pMac, LOGE, FL(" unknown setup Response frame \ - other BSS")) ; + limLog( pMac, LOGE, FL("unknown setup Response frame other BSS")) ; return eSIR_FAILURE ; } @@ -3724,15 +3680,15 @@ static tSirRetStatus limProcessTdlsSetupCnfFrame(tpAniSirGlobal pMac, if ( DOT11F_FAILED( status ) ) { - limLog(pMac, LOGE, FL("Failed to parse an TDLS discovery Response \ - frame (0x%08x, %d bytes):"),status, frmLen); + limLog(pMac, LOGE, FL("Failed to parse an TDLS discovery Response " + "frame (0x%08x, %d bytes):"),status, frmLen); PELOG2(sirDumpBuf(pMac, SIR_DBG_MODULE_ID, LOG2, pBody, frmLen);) return eSIR_FAILURE; } else if ( DOT11F_WARNED( status ) ) { - limLog( pMac, LOGW, FL("There were warnings while unpacking an\ - TDLS discovery Response frame (0x%08x," "%d bytes):"), + limLog( pMac, LOGW, FL("There were warnings while unpacking a TDLS " + "discovery Response frame (0x%08x, %d bytes):"), status, frmLen ); PELOG2(sirDumpBuf(pMac, SIR_DBG_MODULE_ID, LOG2, pBody, frmLen);) } @@ -3745,8 +3701,8 @@ static tSirRetStatus limProcessTdlsSetupCnfFrame(tpAniSirGlobal pMac, &tdlsSetupCnf.LinkIdentifier.bssid[0], &sessionId) ; if(NULL == psessionEntry) { - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, \ - ("no Seesion entry for TDLS session (bssid %02x:%02x:%02x:%02x:%02x:%02x)"), \ + VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, + ("no Seesion entry for TDLS session (bssid %02x:%02x:%02x:%02x:%02x:%02x)"), tdlsSetupCnf.LinkIdentifier.bssid[0], tdlsSetupCnf.LinkIdentifier.bssid[1], tdlsSetupCnf.LinkIdentifier.bssid[2], @@ -3759,7 +3715,7 @@ static tSirRetStatus limProcessTdlsSetupCnfFrame(tpAniSirGlobal pMac, } /* varify BSSID */ - status = palEqualMemory(pMac->hHdd, psessionEntry->bssId, + status = vos_mem_compare( psessionEntry->bssId, &tdlsSetupCnf.LinkIdentifier.bssid[0], sizeof(tSirMacAddr)) ; @@ -3847,22 +3803,22 @@ static tSirRetStatus limProcessTdlsDisRspFrame(tpAniSirGlobal pMac, if ( DOT11F_FAILED( status ) ) { - limLog(pMac, LOGE, FL("Failed to parse an TDLS discovery Response \ - frame (0x%08x, %d bytes):"),status, frmLen); + limLog(pMac, LOGE, FL("Failed to parse an TDLS discovery Response " + "frame (0x%08x, %d bytes):"),status, frmLen); PELOG2(sirDumpBuf(pMac, SIR_DBG_MODULE_ID, LOG2, pBody, frmLen);) return eSIR_FAILURE; } else if ( DOT11F_WARNED( status ) ) { - limLog( pMac, LOGW, FL("There were warnings while unpacking an\ - TDLS discovery Response frame (0x%08x," "%d bytes):"), + limLog( pMac, LOGW, FL("There were warnings while unpacking a TDLS " + "discovery Response frame (0x%08x, %d bytes):"), status, frmLen ); PELOG2(sirDumpBuf(pMac, SIR_DBG_MODULE_ID, LOG2, pFrame, nFrame);) } /*TODO: match dialog token, before proceeding further */ /* varify BSSID */ - status = palEqualMemory(pMac->hHdd, psessionEntry->bssId, + status = vos_mem_compare( psessionEntry->bssId, &tdlsDisRsp.LinkIdentifier.bssid[0], sizeof(tSirMacAddr)) ; @@ -3887,10 +3843,8 @@ static tSirRetStatus limProcessTdlsDisRspFrame(tpAniSirGlobal pMac, * out. We are freeing this memory at the time we are sending this * collected peer info to SME. */ - status = palAllocateMemory(pMac->hHdd, (void **)&tdlsDisResult, - sizeof(tLimDisResultList)) ; - - if(status != eHAL_STATUS_SUCCESS) + tdlsDisResult = vos_mem_malloc(sizeof(tLimDisResultList)); + if ( NULL == tdlsDisResult ) { limLog(pMac, LOGP, FL("alloc fail for TDLS discovery reponse info")) ; return eSIR_FAILURE ; @@ -3903,11 +3857,11 @@ static tSirRetStatus limProcessTdlsDisRspFrame(tpAniSirGlobal pMac, /* Populate peer info of tdls discovery result */ peerInfo->sessionId = psessionEntry->peSessionId; /* - * When we receive DIS RSP from peer MAC, + * When we receive DIS RSP from peer MAC, * STA_MAC_OFFSET will carry peer MAC address and PEER MAC OFFSET * will carry our MAC. */ - status = palCopyMemory(pMac->hHdd, peerInfo->peerMac, + vos_mem_copy( peerInfo->peerMac, &tdlsDisRsp.LinkIdentifier.RespStaAddr[0], sizeof(tSirMacAddr)) ; @@ -3915,7 +3869,7 @@ static tSirRetStatus limProcessTdlsDisRspFrame(tpAniSirGlobal pMac, peerInfo->tdlsPeerRssi = rssi ; /* update Caps Info */ - tdlsUpdateCapInfo(&peerInfo->capabilityInfo , + tdlsUpdateCapInfo(&peerInfo->capabilityInfo, &tdlsDisRsp.Capabilities) ; /* update Supp rates */ @@ -3935,16 +3889,9 @@ static tSirRetStatus limProcessTdlsDisRspFrame(tpAniSirGlobal pMac, /* update HT caps */ if (tdlsDisRsp.HTCaps.present) { - palCopyMemory( pMac, &peerInfo->tdlsPeerHtCaps, &tdlsDisRsp.HTCaps, + vos_mem_copy( &peerInfo->tdlsPeerHtCaps, &tdlsDisRsp.HTCaps, sizeof( tDot11fIEHTCaps ) ); } - /* update EXT caps */ - if (tdlsDisRsp.ExtCap.present) - { - //palCopyMemory( pMac, &peerInfo->tdlsPeerExtenCaps, - // &tdlsDisRsp.ExtCap, - // sizeof( tDot11fIEExtCap ) ); - } } while(0) ; /* now add this new found discovery node into tdls discovery list */ @@ -3970,15 +3917,15 @@ static tSirRetStatus limProcessTdlsTeardownFrame(tpAniSirGlobal pMac, if ( DOT11F_FAILED( status ) ) { - limLog(pMac, LOGE, FL("Failed to parse an TDLS discovery Response \ - frame (0x%08x, %d bytes):"),status, frmLen); + limLog(pMac, LOGE, FL("Failed to parse an TDLS discovery Response " + "frame (0x%08x, %d bytes):"),status, frmLen); PELOG2(sirDumpBuf(pMac, SIR_DBG_MODULE_ID, LOG2, pBody, frmLen);) return eSIR_FAILURE; } else if ( DOT11F_WARNED( status ) ) { - limLog( pMac, LOGW, FL("There were warnings while unpacking an\ - TDLS discovery Response frame (0x%08x," "%d bytes):"), + limLog( pMac, LOGW, FL("There were warnings while unpacking a TDLS " + "discovery Response frame (0x%08x, %d bytes):"), status, frmLen ); PELOG2(sirDumpBuf(pMac, SIR_DBG_MODULE_ID, LOG2, pBody, frmLen);) } @@ -3992,8 +3939,8 @@ static tSirRetStatus limProcessTdlsTeardownFrame(tpAniSirGlobal pMac, &tdlsTeardown.LinkIdentifier.bssid[0], &sessionId) ; if(NULL == psessionEntry) { - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, \ - ("no Seesion entry for TDLS session (bssid %02x:%02x:%02x:%02x:%02x:%02x)"), \ + VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, + ("no Seesion entry for TDLS session (bssid %02x:%02x:%02x:%02x:%02x:%02x)"), tdlsTeardown.LinkIdentifier.bssid[0], tdlsTeardown.LinkIdentifier.bssid[1], tdlsTeardown.LinkIdentifier.bssid[2], @@ -4006,7 +3953,7 @@ static tSirRetStatus limProcessTdlsTeardownFrame(tpAniSirGlobal pMac, } /* varify BSSID */ - status = palEqualMemory(pMac->hHdd, psessionEntry->bssId, + status = vos_mem_compare( psessionEntry->bssId, &tdlsTeardown.LinkIdentifier.bssid[0], sizeof(tSirMacAddr)) ; @@ -4116,7 +4063,7 @@ void limProcessTdlsFrame(tpAniSirGlobal pMac, tANI_U32 *pBd) } frameLen -= (pOffset + PAYLOAD_TYPE_TDLS_SIZE) ; - LIM_LOG_TDLS(VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, ("Received TDLS action %d (%s)"), \ + LIM_LOG_TDLS(VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, ("Received TDLS action %d (%s)"), action, limTraceTdlsActionString(action) )); switch(action) @@ -4266,8 +4213,7 @@ static tSirRetStatus limTdlsDisAddSta(tpAniSirGlobal pMac, tSirMacAddr peerMac, pStaDs->mlmStaContext.capabilityInfo = peerInfo->capabilityInfo; - palCopyMemory(pMac->hHdd, pStaDs->staAddr, peerMac, - sizeof(tSirMacAddr)) ; + vos_mem_copy( pStaDs->staAddr, peerMac, sizeof(tSirMacAddr)) ; VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO, ("Add STA for Peer: %02x, %02x, %02x, %02x, %02x, %02x"), pStaDs->staAddr[0], @@ -4426,8 +4372,8 @@ static tSirRetStatus limTdlsLinkEstablish(tpAniSirGlobal pMac, tSirMacAddr peerM limTdlsFindLinkPeer(pMac, peerMac, &setupPeer) ; if(NULL == setupPeer) { VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, - ("limTdlsLinkEstablish: cannot find peer mac in tdls linksetup list: %02X %02X %02X %02X %02X %02X"), \ - peerMac[0], peerMac[1], peerMac[2], \ + ("limTdlsLinkEstablish: cannot find peer mac in tdls linksetup list: %02X %02X %02X %02X %02X %02X"), + peerMac[0], peerMac[1], peerMac[2], peerMac[3], peerMac[4], peerMac[5]); return eSIR_FAILURE; } @@ -4443,17 +4389,18 @@ static tSirRetStatus limTdlsLinkEstablish(tpAniSirGlobal pMac, tSirMacAddr peerM return eHAL_STATUS_FAILURE; } + /* */ pStaDs = dphLookupHashEntry(pMac, peerMac, &aid, &psessionEntry->dph.dphHashTable) ; if(pStaDs == NULL) { VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, - ("limTdlsLinkEstablish: cannot find peer mac in hash table: %02X %02X %02X %02X %02X %02X"), \ - peerMac[0], peerMac[1], peerMac[2], \ + ("limTdlsLinkEstablish: cannot find peer mac in hash table: %02X %02X %02X %02X %02X %02X"), + peerMac[0], peerMac[1], peerMac[2], peerMac[3], peerMac[4], peerMac[5]); return eSIR_FAILURE; } - palZeroMemory( pMac->hHdd, ( tANI_U8* )&tdlsPtiTemplate, - sizeof( tDot11fTDLSPeerTrafficInd ) ); + vos_mem_set( ( tANI_U8* )&tdlsPtiTemplate, + sizeof( tDot11fTDLSPeerTrafficInd ), 0 ); /* * setup Fixed fields, @@ -4507,7 +4454,7 @@ static tSirRetStatus limTdlsLinkEstablish(tpAniSirGlobal pMac, tSirMacAddr peerM nBytes = 64; } /* zero out the memory */ - palZeroMemory( pMac->hHdd, pFrame, sizeof(pFrame) ); + vos_mem_set( pFrame, sizeof(pFrame), 0 ); /* fill out the buffer descriptor */ @@ -4519,17 +4466,17 @@ static tSirRetStatus limTdlsLinkEstablish(tpAniSirGlobal pMac, tSirMacAddr peerM if ( DOT11F_FAILED( status ) ) { - limLog( pMac, LOGE, FL("Failed to pack a PTI template \ - (0x%08x)."), status ); + limLog( pMac, LOGE, FL("Failed to pack a PTI template (0x%08x)."), + status ); return eSIR_FAILURE; } else if ( DOT11F_WARNED( status ) ) { - limLog( pMac, LOGW, FL("There were warnings while packing TDLS" - "Peer Traffic Indication (0x%08x).") ); + limLog( pMac, LOGW, FL("There were warnings while packing TDLS " + "Peer Traffic Indication (0x%08x)."), status ); } - LIM_LOG_TDLS(VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, ("bIsResponder=%d, header_offset=%ld, linkIdenOffset=%d, ptiBufStatusOffset=%d "), \ + LIM_LOG_TDLS(VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, ("bIsResponder=%d, header_offset=%ld, linkIdenOffset=%d, ptiBufStatusOffset=%d "), setupPeer->tdls_bIsResponder, header_offset, PTI_LINK_IDEN_OFFSET, PTI_BUF_STATUS_OFFSET)); limSendTdlsLinkEstablish(pMac, setupPeer->tdls_bIsResponder, @@ -4554,8 +4501,8 @@ static tSirRetStatus limTdlsLinkTeardown(tpAniSirGlobal pMac, tSirMacAddr peerMa limTdlsFindLinkPeer(pMac, peerMac, &setupPeer) ; if(NULL == setupPeer) { VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, - ("limTdlsLinkTeardown: cannot find peer mac in tdls linksetup list: %02X %02X %02X %02X %02X %02X"), \ - peerMac[0], peerMac[1], peerMac[2], \ + ("limTdlsLinkTeardown: cannot find peer mac in tdls linksetup list: %02X %02X %02X %02X %02X %02X"), + peerMac[0], peerMac[1], peerMac[2], peerMac[3], peerMac[4], peerMac[5]); return eSIR_FAILURE; } @@ -4577,8 +4524,8 @@ static tSirRetStatus limTdlsLinkTeardown(tpAniSirGlobal pMac, tSirMacAddr peerMa if(pStaDs == NULL) { VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, - ("limTdlsLinkTeardown: cannot find peer mac in hash table: %02X %02X %02X %02X %02X %02X"), \ - peerMac[0], peerMac[1], peerMac[2], \ + ("limTdlsLinkTeardown: cannot find peer mac in hash table: %02X %02X %02X %02X %02X %02X"), + peerMac[0], peerMac[1], peerMac[2], peerMac[3], peerMac[4], peerMac[5]); return eSIR_FAILURE; } @@ -4607,11 +4554,11 @@ static tSirTdlsDisRsp *tdlsPrepareTdlsDisRsp(tpAniSirGlobal pMac, disMsgRspSize += (disStaCount * sizeof(tSirTdlsPeerInfo)); /* now allocate memory */ - status = palAllocateMemory( pMac->hHdd, (void **)&disRsp, disMsgRspSize ) ; - - if(eHAL_STATUS_FAILURE == status) + + disRsp = vos_mem_malloc(disMsgRspSize); + if ( NULL == disRsp ) { - limLog(pMac, LOGP, FL("palAllocateMemory failed for DIS RSP")); + limLog(pMac, LOGP, FL("AllocateMemory failed for DIS RSP")); return NULL ; } @@ -4624,29 +4571,29 @@ static tSirTdlsDisRsp *tdlsPrepareTdlsDisRsp(tpAniSirGlobal pMac, while(tdlsDisRspList != NULL) { - palCopyMemory( pMac->hHdd, (tANI_U8 *)peerInfo, + vos_mem_copy( (tANI_U8 *)peerInfo, (tANI_U8 *) &tdlsDisRspList->tdlsDisPeerInfo, sizeof(tSirTdlsPeerInfo)); VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO, ("Msg Sent to PE, peer MAC: %02x, %02x, %02x, %02x, %02x, %02x"), - peerInfo->peerMac[0] , - peerInfo->peerMac[1] , - peerInfo->peerMac[2] , - peerInfo->peerMac[3] , - peerInfo->peerMac[4] , - peerInfo->peerMac[5]) ; + peerInfo->peerMac[0], + peerInfo->peerMac[1], + peerInfo->peerMac[2], + peerInfo->peerMac[3], + peerInfo->peerMac[4], + peerInfo->peerMac[5]); disStaCount-- ; peerInfo++ ; currentNode = tdlsDisRspList ; tdlsDisRspList = tdlsDisRspList->next ; - palFreeMemory(pMac->hHdd, currentNode) ; + vos_mem_free(currentNode) ; /* boundary condition check, may be fatal */ if(((!disStaCount) && (tdlsDisRspList)) || ((!tdlsDisRspList) && disStaCount)) { - limLog(pMac, LOG1, FL("mismatch in dis sta count and\ - and number of nodes in list")) ; + limLog(pMac, LOG1, FL("mismatch in dis sta count and " + "number of nodes in list")) ; VOS_ASSERT(0) ; return NULL ; } @@ -4671,14 +4618,12 @@ void limSendSmeTdlsTeardownRsp(tpAniSirGlobal pMac, tSirResultCodes statusCode, mmhMsg.type = msgType ; - status = palAllocateMemory( pMac->hHdd, (void **)&teardownRspMsg, - sizeof(tSirTdlsTeardownRsp)) ; - - if(eHAL_STATUS_SUCCESS != status) + teardownRspMsg = vos_mem_malloc(sizeof(tSirTdlsTeardownRsp)); + if ( NULL == teardownRspMsg ) { VOS_ASSERT(0) ; } - palCopyMemory( pMac->hHdd, teardownRspMsg->peerMac, (tANI_U8 *)peerMac, + vos_mem_copy( teardownRspMsg->peerMac, (tANI_U8 *)peerMac, sizeof(tSirMacAddr)) ; teardownRspMsg->statusCode = statusCode ; mmhMsg.bodyptr = teardownRspMsg ; @@ -4703,15 +4648,13 @@ void limSendSmeTdlsLinkStartRsp(tpAniSirGlobal pMac, mmhMsg.type = msgType ; - status = palAllocateMemory( pMac->hHdd, (void **)&setupRspMsg, - sizeof(tSirTdlsLinksetupRsp)) ; - - if(eHAL_STATUS_SUCCESS != status) + setupRspMsg = vos_mem_malloc(sizeof(tSirTdlsLinksetupRsp)); + if ( NULL == setupRspMsg ) { VOS_ASSERT(0) ; } - palCopyMemory( pMac->hHdd, setupRspMsg->peerMac, (tANI_U8 *)peerMac, + vos_mem_copy( setupRspMsg->peerMac, (tANI_U8 *)peerMac, sizeof(tSirMacAddr)) ; setupRspMsg->statusCode = statusCode ; mmhMsg.bodyptr = setupRspMsg ; @@ -4775,14 +4718,15 @@ static eHalStatus limSendSmeTdlsAddPeerInd(tpAniSirGlobal pMac, tSirMsgQ mmhMsg = {0} ; tSirTdlsPeerInd *peerInd = NULL ; mmhMsg.type = eWNI_SME_ADD_TDLS_PEER_IND ; - if(eHAL_STATUS_SUCCESS != palAllocateMemory(pMac->hHdd,(void * *) &peerInd, - (sizeof(tSirTdlsPeerInd)))) + + peerInd = vos_mem_malloc(sizeof(tSirTdlsPeerInd)); + if ( NULL == peerInd ) { PELOGE(limLog(pMac, LOGE, FL("Failed to allocate memory"));) return eSIR_FAILURE; } - palCopyMemory( pMac->hHdd, peerInd->peerMac, + vos_mem_copy( peerInd->peerMac, (tANI_U8 *) pStaDs->staAddr, sizeof(tSirMacAddr)); peerInd->sessionId = sessionId; peerInd->staId = pStaDs->staIndex ; @@ -4807,14 +4751,15 @@ static eHalStatus limSendSmeTdlsDelPeerInd(tpAniSirGlobal pMac, tSirMsgQ mmhMsg = {0} ; tSirTdlsPeerInd *peerInd = NULL ; mmhMsg.type = eWNI_SME_DELETE_TDLS_PEER_IND ; - if(eHAL_STATUS_SUCCESS != palAllocateMemory(pMac->hHdd,(void * *) &peerInd, - (sizeof(tSirTdlsPeerInd)))) + + peerInd = vos_mem_malloc(sizeof(tSirTdlsPeerInd)); + if ( NULL == peerInd ) { PELOGE(limLog(pMac, LOGE, FL("Failed to allocate memory"));) return eSIR_FAILURE; } - palCopyMemory( pMac->hHdd, peerInd->peerMac, + vos_mem_copy( peerInd->peerMac, (tANI_U8 *) pStaDs->staAddr, sizeof(tSirMacAddr)); peerInd->sessionId = sessionId; peerInd->staId = pStaDs->staIndex ; @@ -4842,14 +4787,14 @@ static eHalStatus limSendSmeTdlsLinkSetupInd(tpAniSirGlobal pMac, tSirTdlsLinkSetupInd *setupInd = NULL ; mmhMsg.type = eWNI_SME_TDLS_LINK_START_IND ; - if(eHAL_STATUS_SUCCESS != palAllocateMemory(pMac->hHdd,(void * *) &setupInd, - (sizeof(tSirTdlsLinkSetupInd)))) + setupInd = vos_mem_malloc(sizeof(tSirTdlsLinkSetupInd)); + if ( NULL == setupInd ) { PELOGE(limLog(pMac, LOGE, FL("Failed to allocate memory"));) return eSIR_FAILURE; } - palCopyMemory( pMac->hHdd, setupInd->peerMac, + vos_mem_copy( setupInd->peerMac, (tANI_U8 *) peerMac, sizeof(tSirMacAddr)); setupInd->length = sizeof(tSirTdlsLinkSetupInd); setupInd->statusCode = status ; @@ -4961,8 +4906,9 @@ static eHalStatus limSendSmeTdlsAddStaRsp(tpAniSirGlobal pMac, tSirMsgQ mmhMsg = {0} ; tSirTdlsAddStaRsp *addStaRsp = NULL ; mmhMsg.type = eWNI_SME_TDLS_ADD_STA_RSP ; - if(eHAL_STATUS_SUCCESS != palAllocateMemory(pMac->hHdd,(void * *) &addStaRsp, - (sizeof(tSirTdlsAddStaRsp)))) + + addStaRsp = vos_mem_malloc(sizeof(tSirTdlsAddStaRsp)); + if ( NULL == addStaRsp ) { PELOGE(limLog(pMac, LOGE, FL("Failed to allocate memory"));) return eSIR_FAILURE; @@ -4978,7 +4924,7 @@ static eHalStatus limSendSmeTdlsAddStaRsp(tpAniSirGlobal pMac, } if( peerMac ) { - palCopyMemory( pMac->hHdd, addStaRsp->peerMac, + vos_mem_copy( addStaRsp->peerMac, (tANI_U8 *) peerMac, sizeof(tSirMacAddr)); } if (updateSta) @@ -5009,7 +4955,7 @@ eHalStatus limProcessTdlsAddStaRsp(tpAniSirGlobal pMac, void *msg, SET_LIM_PROCESS_DEFD_MESGS(pMac, true); VOS_TRACE(VOS_MODULE_ID_PE, TDLS_DEBUG_LOG_LEVEL, - ("limTdlsAddStaRsp: staIdx=%d, staMac=%02x:%02x:%02x:%02x:%02x:%02x"), pAddStaParams->staIdx, \ + ("limTdlsAddStaRsp: staIdx=%d, staMac=%02x:%02x:%02x:%02x:%02x:%02x"), pAddStaParams->staIdx, pAddStaParams->staMac[0], pAddStaParams->staMac[1], pAddStaParams->staMac[2], @@ -5049,7 +4995,7 @@ eHalStatus limProcessTdlsAddStaRsp(tpAniSirGlobal pMac, void *msg, { VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, ("Peer IND msg to SME failed")) ; - palFreeMemory( pMac->hHdd, (void *) pAddStaParams ); + vos_mem_free( pAddStaParams ); return eSIR_FAILURE ; } @@ -5080,7 +5026,7 @@ eHalStatus limProcessTdlsAddStaRsp(tpAniSirGlobal pMac, void *msg, add_sta_error: status = limSendSmeTdlsAddStaRsp(pMac, psessionEntry->smeSessionId, pAddStaParams->staMac, pAddStaParams->updateSta, pStaDs, status) ; - palFreeMemory( pMac->hHdd, (void *) pAddStaParams ); + vos_mem_free( pAddStaParams ); return status ; } @@ -5102,13 +5048,13 @@ void PopulateDot11fLinkIden(tpAniSirGlobal pMac, tpPESession psessionEntry, (respStaAddr = linkIden->RespStaAddr)) : ((respStaAddr = linkIden->InitStaAddr ), (initStaAddr = linkIden->RespStaAddr)) ; - palCopyMemory( pMac->hHdd, (tANI_U8 *)linkIden->bssid, + vos_mem_copy( (tANI_U8 *)linkIden->bssid, (tANI_U8 *) psessionEntry->bssId, sizeof(tSirMacAddr)) ; - palCopyMemory( pMac->hHdd, (tANI_U8 *)initStaAddr, + vos_mem_copy( (tANI_U8 *)initStaAddr, psessionEntry->selfMacAddr, sizeof(tSirMacAddr)) ; - palCopyMemory( pMac->hHdd, (tANI_U8 *)respStaAddr, (tANI_U8 *) peerMac, + vos_mem_copy( (tANI_U8 *)respStaAddr, (tANI_U8 *) peerMac, sizeof( tSirMacAddr )); linkIden->present = 1 ; @@ -5120,7 +5066,7 @@ void PopulateDot11fTdlsExtCapability(tpAniSirGlobal pMac, tDot11fIEExtCap *extCapability) { extCapability->TDLSPeerPSMSupp = PEER_PSM_SUPPORT ; - extCapability->TDLSPeerUAPSDBufferSTA = PEER_BUFFER_STA_SUPPORT ; + extCapability->TDLSPeerUAPSDBufferSTA = pMac->lim.gLimTDLSBufStaEnabled; extCapability->TDLSChannelSwitching = CH_SWITCH_SUPPORT ; extCapability->TDLSSupport = TDLS_SUPPORT ; extCapability->TDLSProhibited = TDLS_PROHIBITED ; @@ -5159,8 +5105,9 @@ eHalStatus limTdlsPrepareSetupReqFrame(tpAniSirGlobal pMac, * memory after teardown, if the link is successfully setup or * free this memory if any timeout is happen in link setup procedure */ - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, - (void **) &setupPeer, sizeof( tLimTdlsLinkSetupPeer ))) + + setupPeer = vos_mem_malloc(sizeof( tLimTdlsLinkSetupPeer )); + if ( NULL == setupPeer ) { limLog( pMac, LOGP, FL( "Unable to allocate memory during ADD_STA" )); @@ -5179,7 +5126,7 @@ eHalStatus limTdlsPrepareSetupReqFrame(tpAniSirGlobal pMac, * we only populate peer MAC, so it can assit us to find the * TDLS peer after response/or after response timeout */ - palCopyMemory(pMac->hHdd, setupPeer->peerMac, peerMac, + vos_mem_copy(setupPeer->peerMac, peerMac, sizeof(tSirMacAddr)) ; /* format TDLS discovery request frame and transmit it */ limSendTdlsLinkSetupReqFrame(pMac, peerMac, dialog, psessionEntry, NULL, 0) ; @@ -5242,8 +5189,8 @@ tSirRetStatus limProcessSmeTdlsMgmtSendReq(tpAniSirGlobal pMac, (psessionEntry->limSmeState != eLIM_SME_LINK_EST_STATE)) { - limLog(pMac, LOGE, "send mgmt received in invalid LIMsme \ - state (%d)", psessionEntry->limSmeState); + limLog(pMac, LOGE, "send mgmt received in invalid LIMsme " + "state (%d)", psessionEntry->limSmeState); goto lim_tdls_send_mgmt_error; } @@ -5324,6 +5271,38 @@ lim_tdls_send_mgmt_error: return eSIR_SUCCESS; } +/* + * Send Response to Link Establish Request to SME + */ +void limSendSmeTdlsLinkEstablishReqRsp(tpAniSirGlobal pMac, + tANI_U8 sessionId, tSirMacAddr peerMac, tDphHashNode *pStaDs, + tANI_U8 status) +{ + tSirMsgQ mmhMsg = {0} ; + + tSirTdlsLinkEstablishReqRsp *pTdlsLinkEstablishReqRsp = NULL ; + + pTdlsLinkEstablishReqRsp = vos_mem_malloc(sizeof(tSirTdlsLinkEstablishReqRsp)); + if ( NULL == pTdlsLinkEstablishReqRsp ) + { + PELOGE(limLog(pMac, LOGE, FL("Failed to allocate memory"));) + return ; + } + pTdlsLinkEstablishReqRsp->statusCode = status ; + if ( peerMac ) + { + vos_mem_copy(pTdlsLinkEstablishReqRsp->peerMac, peerMac, sizeof(tSirMacAddr)); + } + pTdlsLinkEstablishReqRsp->sessionId = sessionId; + mmhMsg.type = eWNI_SME_TDLS_LINK_ESTABLISH_RSP ; + mmhMsg.bodyptr = pTdlsLinkEstablishReqRsp; + mmhMsg.bodyval = 0; + limSysProcessMmhMsgApi(pMac, &mmhMsg, ePROT); + return ; + + +} + /* * Once link is teardown, send Del Peer Ind to SME */ @@ -5334,8 +5313,9 @@ static eHalStatus limSendSmeTdlsDelStaRsp(tpAniSirGlobal pMac, tSirMsgQ mmhMsg = {0} ; tSirTdlsDelStaRsp *pDelSta = NULL ; mmhMsg.type = eWNI_SME_TDLS_DEL_STA_RSP ; - if(eHAL_STATUS_SUCCESS != palAllocateMemory(pMac->hHdd,(void * *) &pDelSta, - (sizeof(tSirTdlsDelStaRsp)))) + + pDelSta = vos_mem_malloc(sizeof(tSirTdlsDelStaRsp)); + if ( NULL == pDelSta ) { PELOGE(limLog(pMac, LOGE, FL("Failed to allocate memory"));) return eSIR_FAILURE; @@ -5352,7 +5332,7 @@ static eHalStatus limSendSmeTdlsDelStaRsp(tpAniSirGlobal pMac, if( peerMac ) { - palCopyMemory(pMac->hHdd, pDelSta->peerMac, peerMac, sizeof(tSirMacAddr)); + vos_mem_copy(pDelSta->peerMac, peerMac, sizeof(tSirMacAddr)); } pDelSta->length = sizeof(tSirTdlsDelStaRsp) ; @@ -5406,8 +5386,8 @@ tSirRetStatus limProcessSmeTdlsAddStaReq(tpAniSirGlobal pMac, (psessionEntry->limSmeState != eLIM_SME_LINK_EST_STATE)) { - limLog(pMac, LOGE, "send mgmt received in invalid LIMsme \ - state (%d)", psessionEntry->limSmeState); + limLog(pMac, LOGE, "send mgmt received in invalid LIMsme " + "state (%d)", psessionEntry->limSmeState); goto lim_tdls_add_sta_error; } @@ -5470,8 +5450,8 @@ tSirRetStatus limProcessSmeTdlsDelStaReq(tpAniSirGlobal pMac, (psessionEntry->limSmeState != eLIM_SME_LINK_EST_STATE)) { - limLog(pMac, LOGE, "Del Sta received in invalid LIMsme \ - state (%d)", psessionEntry->limSmeState); + limLog(pMac, LOGE, "Del Sta received in invalid LIMsme state (%d)", + psessionEntry->limSmeState); goto lim_tdls_del_sta_error; } @@ -5500,6 +5480,99 @@ lim_tdls_del_sta_error: return eSIR_SUCCESS; } + +/* + * Process Link Establishment Request from SME . + */ +tSirRetStatus limProcesSmeTdlsLinkEstablishReq(tpAniSirGlobal pMac, + tANI_U32 *pMsgBuf) +{ + /* get all discovery request parameters */ + tSirTdlsLinkEstablishReq *pTdlsLinkEstablishReq = (tSirTdlsLinkEstablishReq*) pMsgBuf ; + tpPESession psessionEntry; + tANI_U8 sessionId; + tpTdlsLinkEstablishParams pMsgTdlsLinkEstablishReq; + tSirMsgQ msg; + tANI_U16 peerIdx = 0 ; + tpDphHashNode pStaDs = NULL ; + + VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO, + ("Send Mgmt Recieved")) ; + + if((psessionEntry = peFindSessionByBssid(pMac, pTdlsLinkEstablishReq->bssid, &sessionId)) + == NULL) + { + VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, + "PE Session does not exist for given sme sessionId %d", + pTdlsLinkEstablishReq->sessionId); + limSendSmeTdlsLinkEstablishReqRsp(pMac, pTdlsLinkEstablishReq->sessionId, pTdlsLinkEstablishReq->peerMac, + NULL, eSIR_FAILURE) ; + return eSIR_FAILURE; + } + + /* check if we are in proper state to work as TDLS client */ + if (psessionEntry->limSystemRole != eLIM_STA_ROLE) + { + VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, + "TDLS Link Establish Request received in wrong system Role %d", + psessionEntry->limSystemRole); + goto lim_tdls_link_establish_error; + } + + /* + * if we are still good, go ahead and check if we are in proper state to + * do TDLS discovery req/rsp/....frames. + */ + if ((psessionEntry->limSmeState != eLIM_SME_ASSOCIATED_STATE) && + (psessionEntry->limSmeState != eLIM_SME_LINK_EST_STATE)) + { + + limLog(pMac, LOGE, "TDLS Link Establish Request received in " + "invalid LIMsme state (%d)", psessionEntry->limSmeState); + goto lim_tdls_link_establish_error; + } + /*TODO Sunil , TDLSPeer Entry has the STA ID , Use it */ + pStaDs = dphLookupHashEntry(pMac, pTdlsLinkEstablishReq->peerMac, &peerIdx, + &psessionEntry->dph.dphHashTable) ; + if ( NULL == pStaDs ) + { + limLog( pMac, LOGE, FL( "pStaDs is NULL" )); + goto lim_tdls_link_establish_error; + + } + pMsgTdlsLinkEstablishReq = vos_mem_malloc(sizeof( tTdlsLinkEstablishParams )); + if ( NULL == pMsgTdlsLinkEstablishReq ) + { + limLog( pMac, LOGE, + FL( "Unable to allocate memory TDLS Link Establish Request" )); + return eSIR_MEM_ALLOC_FAILED; + } + + vos_mem_set( (tANI_U8 *)pMsgTdlsLinkEstablishReq, sizeof(tpTdlsLinkEstablishParams), 0); + + pMsgTdlsLinkEstablishReq->staIdx = pStaDs->staIndex; + pMsgTdlsLinkEstablishReq->isResponder = pTdlsLinkEstablishReq->isResponder; + pMsgTdlsLinkEstablishReq->uapsdQueues = pTdlsLinkEstablishReq->uapsdQueues; + pMsgTdlsLinkEstablishReq->maxSp = pTdlsLinkEstablishReq->maxSp; + pMsgTdlsLinkEstablishReq->isBufsta = pTdlsLinkEstablishReq->isBufSta; + msg.type = WDA_SET_TDLS_LINK_ESTABLISH_REQ; + msg.reserved = 0; + msg.bodyptr = pMsgTdlsLinkEstablishReq; + msg.bodyval = 0; + if(eSIR_SUCCESS != wdaPostCtrlMsg(pMac, &msg)) + { + limLog(pMac, LOGE, FL("halPostMsgApi failed")); + goto lim_tdls_link_establish_error; + } + return eSIR_SUCCESS; +lim_tdls_link_establish_error: + limSendSmeTdlsLinkEstablishReqRsp(pMac, psessionEntry->smeSessionId, pTdlsLinkEstablishReq->peerMac, + NULL, eSIR_FAILURE) ; + + return eSIR_SUCCESS; +} + + /* Delete all the TDLS peer connected before leaving the BSS */ tSirRetStatus limDeleteTDLSPeers(tpAniSirGlobal pMac, tpPESession psessionEntry) { diff --git a/CORE/MAC/src/pe/lim/limPropExtsUtils.c b/CORE/MAC/src/pe/lim/limPropExtsUtils.c index 7a7f079acd29..a66364b315a2 100644 --- a/CORE/MAC/src/pe/lim/limPropExtsUtils.c +++ b/CORE/MAC/src/pe/lim/limPropExtsUtils.c @@ -26,7 +26,6 @@ */ /* - * * Airgo Networks, Inc proprietary. All rights reserved. * This file limPropExtsUtils.cc contains the utility functions * to populate, parse proprietary extensions required to @@ -85,14 +84,15 @@ limExtractApCapability(tpAniSirGlobal pMac, tANI_U8 *pIE, tANI_U16 ieLen, #if !defined WLAN_FEATURE_VOWIFI tANI_U32 localPowerConstraints = 0; #endif - if(eHAL_STATUS_SUCCESS != palAllocateMemory(pMac->hHdd, - (void **)&pBeaconStruct, sizeof(tSirProbeRespBeacon))) + + pBeaconStruct = vos_mem_malloc(sizeof(tSirProbeRespBeacon)); + if ( NULL == pBeaconStruct ) { - limLog(pMac, LOGE, FL("Unable to PAL allocate memory in limExtractApCapability") ); + limLog(pMac, LOGE, FL("Unable to allocate memory in limExtractApCapability") ); return; } - palZeroMemory( pMac->hHdd, (tANI_U8 *) pBeaconStruct, sizeof(tSirProbeRespBeacon)); + vos_mem_set( (tANI_U8 *) pBeaconStruct, sizeof(tSirProbeRespBeacon), 0); *qosCap = 0; *propCap = 0; *uapsd = 0; @@ -166,7 +166,7 @@ limExtractApCapability(tpAniSirGlobal pMac, tANI_U8 *pIE, tANI_U16 ieLen, } #endif } - palFreeMemory(pMac->hHdd, pBeaconStruct); + vos_mem_free(pBeaconStruct); return; } /****** end limExtractApCapability() ******/ diff --git a/CORE/MAC/src/pe/lim/limRoamingAlgo.c b/CORE/MAC/src/pe/lim/limRoamingAlgo.c index f91abf33b720..d41b529a37d7 100644 --- a/CORE/MAC/src/pe/lim/limRoamingAlgo.c +++ b/CORE/MAC/src/pe/lim/limRoamingAlgo.c @@ -26,7 +26,6 @@ */ /* - * * Airgo Networks, Inc proprietary. All rights reserved. * This file limRoamingAlgo.cc contains the code for LIM * algorithms. @@ -47,15 +46,15 @@ /** ---------------------------------------------------------------------- -\fn limSelectsBackgroundScanMode() -\brief This function is called by limIsBackgroundScanAllowed(). -\ Here LIM decides whether we shall enforce this background -\ scan or let HAL decide whether to proceed with the background +\fn limSelectsBackgroundScanMode() +\brief This function is called by limIsBackgroundScanAllowed(). +\ Here LIM decides whether we shall enforce this background +\ scan or let HAL decide whether to proceed with the background \ scan as HAL sees fits. LIM shall enforce background scan if: \ 1) station is not in link established state \ 2) station is in link established state, but there has been \ max number of consecutive background scan failure. -\ +\ \param tpAniSirGlobal pMac \return none \ ------------------------------------------------------------------------- */ @@ -68,7 +67,7 @@ tSirBackgroundScanMode limSelectsBackgroundScanMode(tpAniSirGlobal pMac) limLog(pMac, LOGP, FL("Fail to get WNI_CFG_MAX_CONSECUTIVE_BACKGROUND_SCAN_FAILURE value")); return eSIR_NORMAL_BACKGROUND_SCAN; } - + if (cfgVal == 0) return eSIR_NORMAL_BACKGROUND_SCAN; @@ -92,7 +91,7 @@ tSirBackgroundScanMode limSelectsBackgroundScanMode(tpAniSirGlobal pMac) /** ----------------------------------------------------------- \fn limIsBackgroundScanAllowed \brief This function determines if background scan should be -\ allowed. It is called by limTriggerBackgroundScan(). +\ allowed. It is called by limTriggerBackgroundScan(). \param tpAniSirGlobal pMac \return none \ ------------------------------------------------------------- */ @@ -135,10 +134,10 @@ static tANI_U8 limIsBackgroundScanAllowed(tpAniSirGlobal pMac) \ when there is an exisiting link with an AP. \ SME_SCAN_REQ is issued to SME state machine with Active \ scanning is performed on one channel at a time. -\ +\ \ Assumptions: -\ Valid channel list at CFG is either populated by Roaming -\ algorithm upon determining/selecting a regulatory domain +\ Valid channel list at CFG is either populated by Roaming +\ algorithm upon determining/selecting a regulatory domain \ or by default has all 36 possible channels. \ \param tpAniSirGlobal pMac @@ -181,9 +180,9 @@ void limTriggerBackgroundScan(tpAniSirGlobal pMac) smeScanReq.messageType = eWNI_SME_SCAN_REQ; smeScanReq.length = sizeof(tSirSmeScanReq); smeScanReq.bssType = eSIR_INFRASTRUCTURE_MODE; - palCopyMemory( pMac->hHdd, (tANI_U8 *) smeScanReq.bssId, + vos_mem_copy( (tANI_U8 *) smeScanReq.bssId, (tANI_U8 *) &bcAddr, sizeof(tSirMacAddr)); - + if (wlan_cfgGetStr(pMac, WNI_CFG_SSID, (tANI_U8 *) (smeScanReq.ssId[0].ssId), (tANI_U32 *) &ssidLen) != eSIR_SUCCESS) @@ -218,7 +217,7 @@ void limTriggerBackgroundScan(tpAniSirGlobal pMac) smeScanReq.returnAfterFirstMatch = 0; smeScanReq.returnUniqueResults = 1; - //At the first channel scan, clear the cached results + //At the first channel scan, clear the cached results if(pMac->lim.gLimBackgroundScanChannelId == 0) { /* @@ -231,7 +230,7 @@ void limTriggerBackgroundScan(tpAniSirGlobal pMac) { smeScanReq.returnFreshResults = SIR_BG_SCAN_RETURN_FRESH_RESULTS; } - + smeScanReq.channelList.numChannels = 1; if (pMac->lim.gLimBackgroundScanChannelId >= len) @@ -241,7 +240,7 @@ void limTriggerBackgroundScan(tpAniSirGlobal pMac) PELOGE(limLog(pMac, LOGE, FL("Skipping Background Scan since the channel list is exhausted."));) PELOGE(limLog(pMac, LOGE, FL("SME should send WNI_CFG_BACKGROUND_SCAN_PERIOD indication to start the background scan again."));) - /* Stop the BG scan timer here. SME should send WNI_CFG_BACKGROUND_SCAN_PERIOD + /* Stop the BG scan timer here. SME should send WNI_CFG_BACKGROUND_SCAN_PERIOD * indication to start the background scan again. */ if (TX_TIMER_VALID(pMac->lim.limTimers.gLimBackgroundScanTimer)) @@ -267,17 +266,17 @@ void limTriggerBackgroundScan(tpAniSirGlobal pMac) smeScanReq.uIEFieldLen = 0; smeScanReq.uIEFieldOffset = sizeof(tSirSmeScanReq); - + backgroundScan = limSelectsBackgroundScanMode(pMac); PELOG1(limLog(pMac, LOG1, FL("Performing (mode %d) Background Scan "), backgroundScan);) smeScanReq.backgroundScanMode = backgroundScan; - + //determine whether to send the results or not, If so, notify the BG scan results to SME if (pMac->lim.gLimBackgroundScanChannelId >= len) { pMac->lim.gLimReportBackgroundScanResults = TRUE; } - + limPostSmeMessage(pMac, eWNI_SME_SCAN_REQ, (tANI_U32 *) &smeScanReq); @@ -286,8 +285,8 @@ void limTriggerBackgroundScan(tpAniSirGlobal pMac) /** ---------------------------------------------------------------------- \fn limAbortBackgroundScan -\brief This function aborts background scan and send scan -\ response to SME. +\brief This function aborts background scan and send scan +\ response to SME. \param tpAniSirGlobal pMac \return none \ ------------------------------------------------------------------------- */ @@ -295,12 +294,12 @@ void limAbortBackgroundScan(tpAniSirGlobal pMac) { tANI_U16 scanRspLen = 8; - if(pMac->lim.gLimBackgroundScanTerminate == FALSE) + if(pMac->lim.gLimBackgroundScanTerminate == FALSE) { limLog(pMac, LOGE, FL("Abort Background Scan ")); if (TX_TIMER_VALID(pMac->lim.limTimers.gLimBackgroundScanTimer)) { - limDeactivateAndChangeTimer(pMac, eLIM_BACKGROUND_SCAN_TIMER); + limDeactivateAndChangeTimer(pMac, eLIM_BACKGROUND_SCAN_TIMER); } pMac->lim.gLimBackgroundScanTerminate = TRUE; @@ -314,11 +313,11 @@ void limAbortBackgroundScan(tpAniSirGlobal pMac) pMac->lim.gLimSmeScanResultLength - sizeof(tSirBssDescription); limSendSmeScanRsp(pMac, scanRspLen, eSIR_SME_SUCCESS, 0, 0); - } + } } // reset background scan variables - pMac->lim.gLimBackgroundScanChannelId = 0; + pMac->lim.gLimBackgroundScanChannelId = 0; return; } diff --git a/CORE/MAC/src/pe/lim/limScanResultUtils.c b/CORE/MAC/src/pe/lim/limScanResultUtils.c index 1e3a706e9908..747a3bd7c65d 100644 --- a/CORE/MAC/src/pe/lim/limScanResultUtils.c +++ b/CORE/MAC/src/pe/lim/limScanResultUtils.c @@ -125,14 +125,14 @@ limDeactivateMinChannelTimerDuringScan(tpAniSirGlobal pMac) * @return None */ #if defined WLAN_FEATURE_VOWIFI -void +eHalStatus limCollectBssDescription(tpAniSirGlobal pMac, tSirBssDescription *pBssDescr, tpSirProbeRespBeacon pBPR, tANI_U8 *pRxPacketInfo, tANI_U8 fScanning) #else -void +eHalStatus limCollectBssDescription(tpAniSirGlobal pMac, tSirBssDescription *pBssDescr, tpSirProbeRespBeacon pBPR, @@ -144,13 +144,26 @@ limCollectBssDescription(tpAniSirGlobal pMac, tpSirMacMgmtHdr pHdr; tANI_U8 channelNum; tANI_U8 rxChannel; + tANI_U8 rfBand = 0; pHdr = WDA_GET_RX_MAC_HEADER(pRxPacketInfo); VOS_ASSERT(WDA_GET_RX_PAYLOAD_LEN(pRxPacketInfo) >= SIR_MAC_B_PR_SSID_OFFSET); ieLen = WDA_GET_RX_PAYLOAD_LEN(pRxPacketInfo) - SIR_MAC_B_PR_SSID_OFFSET; rxChannel = WDA_GET_RX_CH(pRxPacketInfo); pBody = WDA_GET_RX_MPDU_DATA(pRxPacketInfo); + rfBand = WDA_GET_RX_RFBAND(pRxPacketInfo); + /** + * Drop all the beacons and probe response without P2P IE during P2P search + */ + if (NULL != pMac->lim.gpLimMlmScanReq && pMac->lim.gpLimMlmScanReq->p2pSearch) + { + if (NULL == limGetP2pIEPtr(pMac, (pBody + SIR_MAC_B_PR_SSID_OFFSET), ieLen)) + { + limLog( pMac, LOG3, MAC_ADDRESS_STR, MAC_ADDR_ARRAY(pHdr->bssId)); + return eHAL_STATUS_FAILURE; + } + } /** * Length of BSS desription is without length of @@ -162,8 +175,8 @@ limCollectBssDescription(tpAniSirGlobal pMac, sizeof(tANI_U32) + ieLen); // Copy BSS Id - palCopyMemory( pMac->hHdd, (tANI_U8 *) &pBssDescr->bssId, - (tANI_U8 *) pHdr->bssId, + vos_mem_copy((tANI_U8 *) &pBssDescr->bssId, + (tANI_U8 *) pHdr->bssId, sizeof(tSirMacAddr)); // Copy Timestamp, Beacon Interval and Capability Info @@ -191,18 +204,22 @@ limCollectBssDescription(tpAniSirGlobal pMac, pBssDescr->channelId = limGetChannelFromBeacon(pMac, pBPR); if (pBssDescr->channelId == 0) - { - /* If the channel Id is not retrieved from Beacon, extract the channel from BD */ - /* Unmapped the channel.This We have to do since we have done mapping in the hal to + { + /* If the channel Id is not retrieved from Beacon, extract the channel from BD */ + /* Unmapped the channel.This We have to do since we have done mapping in the hal to overcome the limitation of RXBD of not able to accomodate the bigger channel number.*/ - if (!( rxChannel = limUnmapChannel(rxChannel))) - { - rxChannel = pMac->lim.gLimCurrentScanChannelId; - } - pBssDescr->channelId = rxChannel; - } - - pBssDescr->channelIdSelf = rxChannel; + if ((!rfBand) || IS_5G_BAND(rfBand)) + { + rxChannel = limUnmapChannel(rxChannel); + } + if (!rxChannel) + { + rxChannel = pMac->lim.gLimCurrentScanChannelId; + } + pBssDescr->channelId = rxChannel; + } + + pBssDescr->channelIdSelf = pBssDescr->channelId; //set the network type in bss description channelNum = pBssDescr->channelId; pBssDescr->nwType = limGetNwType(pMac, channelNum, SIR_MAC_MGMT_FRAME, pBPR); @@ -257,7 +274,7 @@ limCollectBssDescription(tpAniSirGlobal pMac, } #endif // Copy IE fields - palCopyMemory( pMac->hHdd, (tANI_U8 *) &pBssDescr->ieFields, + vos_mem_copy((tANI_U8 *) &pBssDescr->ieFields, pBody + SIR_MAC_B_PR_SSID_OFFSET, ieLen); @@ -269,7 +286,7 @@ limCollectBssDescription(tpAniSirGlobal pMac, pBssDescr->aniIndicator, ieLen ); - return; + return eHAL_STATUS_SUCCESS; } /*** end limCollectBssDescription() ***/ /** @@ -302,7 +319,7 @@ tANI_BOOLEAN limIsScanRequestedSSID(tpAniSirGlobal pMac, tSirMacSSid *ssId) for (i = 0; i < pMac->lim.gpLimMlmScanReq->numSsid; i++) { - if ( eANI_BOOLEAN_TRUE == palEqualMemory( pMac->hHdd,(tANI_U8 *) ssId, + if ( eANI_BOOLEAN_TRUE == vos_mem_compare((tANI_U8 *) ssId, (tANI_U8 *) &pMac->lim.gpLimMlmScanReq->ssId[i], (tANI_U8) (pMac->lim.gpLimMlmScanReq->ssId[i].length + 1))) { @@ -349,6 +366,8 @@ limCheckAndAddBssDescription(tpAniSirGlobal pMac, tANI_U8 rxChannelInBeacon = 0; eHalStatus status; tANI_U8 dontUpdateAll = 0; + tANI_U8 rfBand = 0; + tANI_U8 rxChannelInBD = 0; tSirMacAddr bssid = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; tANI_BOOLEAN fFound = FALSE; @@ -359,11 +378,11 @@ limCheckAndAddBssDescription(tpAniSirGlobal pMac, //Checking if scanning for a particular BSSID if ((fScanning) && (pMac->lim.gpLimMlmScanReq)) { - fFound = palEqualMemory(pMac->hHdd, pHdr->addr3, &pMac->lim.gpLimMlmScanReq->bssId, 6); + fFound = vos_mem_compare(pHdr->addr3, &pMac->lim.gpLimMlmScanReq->bssId, 6); if (!fFound) { if ((pMac->lim.gpLimMlmScanReq->p2pSearch) && - (palEqualMemory(pMac->hHdd, pBPR->P2PProbeRes.P2PDeviceInfo.P2PDeviceAddress, + (vos_mem_compare(pBPR->P2PProbeRes.P2PDeviceInfo.P2PDeviceAddress, &pMac->lim.gpLimMlmScanReq->bssId, 6))) { fFound = eANI_BOOLEAN_TRUE; @@ -393,7 +412,7 @@ limCheckAndAddBssDescription(tpAniSirGlobal pMac, !limIsScanRequestedSSID(pMac, &pBPR->ssId)) || (!fFound && (pMac->lim.gpLimMlmScanReq && pMac->lim.gpLimMlmScanReq->bssId) && - !palEqualMemory(pMac->hHdd, bssid, + !vos_mem_compare(bssid, &pMac->lim.gpLimMlmScanReq->bssId, 6)))) { /** @@ -423,35 +442,39 @@ limCheckAndAddBssDescription(tpAniSirGlobal pMac, * from another channel heard as noise on the current scanning channel */ - if (pBPR->dsParamsPresent) + if ((pBPR->dsParamsPresent) || (pBPR->HTInfo.present)) { /* This means that we are in 2.4GHz mode or 5GHz 11n mode */ rxChannelInBeacon = limGetChannelFromBeacon(pMac, pBPR); - if (rxChannelInBeacon < 15) + rfBand = WDA_GET_RX_RFBAND(pRxPacketInfo); + rxChannelInBD = WDA_GET_RX_CH(pRxPacketInfo); + + if ((!rfBand) || IS_5G_BAND(rfBand)) { - /* This means that we are in 2.4GHz mode */ - if(WDA_GET_RX_CH(pRxPacketInfo) != rxChannelInBeacon) - { - /* BCAST Frame, if CH do not match, Drop */ - if(WDA_IS_RX_BCAST(pRxPacketInfo)) - { + rxChannelInBD = limUnmapChannel(rxChannelInBD); + } + + if(rxChannelInBD != rxChannelInBeacon) + { + /* BCAST Frame, if CH do not match, Drop */ + if(WDA_IS_RX_BCAST(pRxPacketInfo)) + { limLog(pMac, LOG3, FL("Beacon/Probe Rsp dropped. Channel in BD %d. " "Channel in beacon" " %d"), WDA_GET_RX_CH(pRxPacketInfo),limGetChannelFromBeacon(pMac, pBPR)); return; - } - /* Unit cast frame, Probe RSP, do not drop */ - else - { - dontUpdateAll = 1; - limLog(pMac, LOG3, FL("SSID %s, CH in ProbeRsp %d, CH in BD %d, miss-match, Do Not Drop"), - pBPR->ssId.ssId, - rxChannelInBeacon, - WDA_GET_RX_CH(pRxPacketInfo)); - WDA_GET_RX_CH(pRxPacketInfo) = rxChannelInBeacon; - } - } - } + } + /* Unit cast frame, Probe RSP, do not drop */ + else + { + dontUpdateAll = 1; + limLog(pMac, LOG3, FL("SSID %s, CH in ProbeRsp %d, CH in BD %d, miss-match, Do Not Drop"), + pBPR->ssId.ssId, + rxChannelInBeacon, + WDA_GET_RX_CH(pRxPacketInfo)); + WDA_GET_RX_CH(pRxPacketInfo) = rxChannelInBeacon; + } + } } /** @@ -472,24 +495,32 @@ limCheckAndAddBssDescription(tpAniSirGlobal pMac, frameLen = sizeof(tLimScanResultNode) + ieLen - sizeof(tANI_U32); //Sizeof(tANI_U32) is for ieFields[1] - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pBssDescr, frameLen)) + pBssDescr = vos_mem_malloc(frameLen); + if ( NULL == pBssDescr ) { // Log error limLog(pMac, LOGP, - FL("call for palAllocateMemory failed for storing BSS description")); + FL("call for AllocateMemory failed for storing BSS description")); return; } // In scan state, store scan result. #if defined WLAN_FEATURE_VOWIFI - limCollectBssDescription(pMac, &pBssDescr->bssDescription, + status = limCollectBssDescription(pMac, &pBssDescr->bssDescription, pBPR, pRxPacketInfo, fScanning); + if (eHAL_STATUS_SUCCESS != status) + { + goto last; + } #else - limCollectBssDescription(pMac, &pBssDescr->bssDescription, + status = limCollectBssDescription(pMac, &pBssDescr->bssDescription, pBPR, pRxPacketInfo); + if (eHAL_STATUS_SUCCESS != status) + { + goto last; + } #endif - pBssDescr->bssDescription.fProbeRsp = fProbeRsp; pBssDescr->next = NULL; @@ -578,10 +609,12 @@ limCheckAndAddBssDescription(tpAniSirGlobal pMac, } }//(eANI_BOOLEAN_TRUE == fScanning) +last: if( eHAL_STATUS_SUCCESS != status ) { - palFreeMemory( pMac->hHdd, pBssDescr ); + vos_mem_free( pBssDescr ); } + return; } /****** end limCheckAndAddBssDescription() ******/ @@ -698,13 +731,13 @@ limLookupNaddHashEntry(tpAniSirGlobal pMac, { //For infrastructure, check BSSID and SSID. For IBSS, check more pSirCapTemp = (tSirMacCapabilityInfo *)&ptemp->bssDescription.capabilityInfo; - if((pSirCapTemp->ess == pSirCap->ess) && //matching ESS type first - (palEqualMemory( pMac->hHdd,(tANI_U8 *) pBssDescr->bssDescription.bssId, + if ((pSirCapTemp->ess == pSirCap->ess) && //matching ESS type first + (vos_mem_compare( (tANI_U8 *) pBssDescr->bssDescription.bssId, (tANI_U8 *) ptemp->bssDescription.bssId, sizeof(tSirMacAddr))) && //matching BSSID (pBssDescr->bssDescription.channelId == ptemp->bssDescription.channelId) && - palEqualMemory( pMac->hHdd,((tANI_U8 *) &pBssDescr->bssDescription.ieFields + 1), + vos_mem_compare( ((tANI_U8 *) &pBssDescr->bssDescription.ieFields + 1), ((tANI_U8 *) &ptemp->bssDescription.ieFields + 1), (tANI_U8) (ssidLen + 1)) && ((pSirCapTemp->ess) || //we are done for infrastructure @@ -740,7 +773,7 @@ limLookupNaddHashEntry(tpAniSirGlobal pMac, //Found it if((DOT11F_IE_WSCPROBERES_MAX_LEN - 2) >= pbIe[1]) { - palCopyMemory(pMac->hHdd, pBssDescr->bssDescription.WscIeProbeRsp, + vos_mem_copy(pBssDescr->bssDescription.WscIeProbeRsp, pbIe, pbIe[1] + 2); pBssDescr->bssDescription.WscIeLen = pbIe[1] + 2; } @@ -769,7 +802,7 @@ limLookupNaddHashEntry(tpAniSirGlobal pMac, pMac->lim.gLimMlmScanResultLength -= ptemp->bssDescription.length + sizeof(tANI_U16); - palFreeMemory( pMac->hHdd, (tANI_U8 *) ptemp); + vos_mem_free(ptemp); } found = true; break; @@ -920,13 +953,13 @@ limLookupNaddLfrHashEntry(tpAniSirGlobal pMac, { //For infrastructure, check BSSID and SSID. For IBSS, check more pSirCapTemp = (tSirMacCapabilityInfo *)&ptemp->bssDescription.capabilityInfo; - if((pSirCapTemp->ess == pSirCap->ess) && //matching ESS type first - (palEqualMemory( pMac->hHdd,(tANI_U8 *) pBssDescr->bssDescription.bssId, + if ((pSirCapTemp->ess == pSirCap->ess) && //matching ESS type first + (vos_mem_compare( (tANI_U8 *) pBssDescr->bssDescription.bssId, (tANI_U8 *) ptemp->bssDescription.bssId, sizeof(tSirMacAddr))) && //matching BSSID (pBssDescr->bssDescription.channelId == ptemp->bssDescription.channelId) && - palEqualMemory( pMac->hHdd,((tANI_U8 *) &pBssDescr->bssDescription.ieFields + 1), + vos_mem_compare( ((tANI_U8 *) &pBssDescr->bssDescription.ieFields + 1), ((tANI_U8 *) &ptemp->bssDescription.ieFields + 1), (tANI_U8) (ssidLen + 1)) && ((pSirCapTemp->ess) || //we are done for infrastructure @@ -963,7 +996,7 @@ limLookupNaddLfrHashEntry(tpAniSirGlobal pMac, //Found it if((DOT11F_IE_WSCPROBERES_MAX_LEN - 2) >= pbIe[1]) { - palCopyMemory(pMac->hHdd, pBssDescr->bssDescription.WscIeProbeRsp, + vos_mem_copy( pBssDescr->bssDescription.WscIeProbeRsp, pbIe, pbIe[1] + 2); pBssDescr->bssDescription.WscIeLen = pbIe[1] + 2; } @@ -992,7 +1025,7 @@ limLookupNaddLfrHashEntry(tpAniSirGlobal pMac, pMac->lim.gLimMlmLfrScanResultLength -= ptemp->bssDescription.length + sizeof(tANI_U16); - palFreeMemory( pMac->hHdd, (tANI_U8 *) ptemp); + vos_mem_free(ptemp); } break; } @@ -1094,7 +1127,7 @@ limCopyScanResult(tpAniSirGlobal pMac, tANI_U8 *pDest) while(ptemp) { /// Copy entire BSS description including length - palCopyMemory( pMac->hHdd, pDest, + vos_mem_copy( pDest, (tANI_U8 *) &ptemp->bssDescription, ptemp->bssDescription.length + 2); pDest += ptemp->bssDescription.length + 2; @@ -1141,7 +1174,7 @@ limDeleteCachedScanResults(tpAniSirGlobal pMac) pNextNode = pNode->next; // Delete the current node - palFreeMemory( pMac->hHdd, (tANI_U8 *) pNode); + vos_mem_free(pNode); pNode = pNextNode; } @@ -1219,7 +1252,7 @@ limDeleteCachedLfrScanResults(tpAniSirGlobal pMac) pNextNode = pNode->next; // Delete the current node - palFreeMemory( pMac->hHdd, (tANI_U8 *) pNode); + vos_mem_free(pNode); pNode = pNextNode; } diff --git a/CORE/MAC/src/pe/lim/limScanResultUtils.h b/CORE/MAC/src/pe/lim/limScanResultUtils.h index a5bd034a91fe..8e43996e2c11 100644 --- a/CORE/MAC/src/pe/lim/limScanResultUtils.h +++ b/CORE/MAC/src/pe/lim/limScanResultUtils.h @@ -62,13 +62,13 @@ void limReInitLfrScanResults(tpAniSirGlobal); tANI_U32 limDeactivateMinChannelTimerDuringScan(tpAniSirGlobal); void limCheckAndAddBssDescription(tpAniSirGlobal, tpSirProbeRespBeacon, tANI_U8 *, tANI_BOOLEAN, tANI_U8); #if defined WLAN_FEATURE_VOWIFI -void limCollectBssDescription(tpAniSirGlobal, +eHalStatus limCollectBssDescription(tpAniSirGlobal, tSirBssDescription *, tpSirProbeRespBeacon, tANI_U8 *, tANI_U8); #else -void limCollectBssDescription(tpAniSirGlobal, +eHalStatus limCollectBssDescription(tpAniSirGlobal, tSirBssDescription *, tpSirProbeRespBeacon, tANI_U8 *); diff --git a/CORE/MAC/src/pe/lim/limSecurityUtils.c b/CORE/MAC/src/pe/lim/limSecurityUtils.c index 7951047f37ff..c0e572aca048 100644 --- a/CORE/MAC/src/pe/lim/limSecurityUtils.c +++ b/CORE/MAC/src/pe/lim/limSecurityUtils.c @@ -26,7 +26,6 @@ */ /* - * * Airgo Networks, Inc proprietary. All rights reserved. * This file limUtils.cc contains the utility functions * LIM uses. @@ -251,9 +250,9 @@ limSearchPreAuthList(tpAniSirGlobal pMac, tSirMacAddr macAddr) while (pTempNode != NULL) { - if (palEqualMemory( pMac->hHdd,(tANI_U8 *) macAddr, - (tANI_U8 *) &pTempNode->peerMacAddr, - sizeof(tSirMacAddr)) ) + if (vos_mem_compare( (tANI_U8 *) macAddr, + (tANI_U8 *) &pTempNode->peerMacAddr, + sizeof(tSirMacAddr)) ) break; pTempNode = pTempNode->next; @@ -358,9 +357,9 @@ limDeletePreAuthNode(tpAniSirGlobal pMac, tSirMacAddr macAddr) if (pTempNode == NULL) return; - if (palEqualMemory( pMac->hHdd,(tANI_U8 *) macAddr, - (tANI_U8 *) &pTempNode->peerMacAddr, - sizeof(tSirMacAddr)) ) + if (vos_mem_compare( (tANI_U8 *) macAddr, + (tANI_U8 *) &pTempNode->peerMacAddr, + sizeof(tSirMacAddr)) ) { // First node to be deleted @@ -380,8 +379,8 @@ limDeletePreAuthNode(tpAniSirGlobal pMac, tSirMacAddr macAddr) while (pTempNode != NULL) { - if (palEqualMemory( pMac->hHdd,(tANI_U8 *) macAddr, - (tANI_U8 *) &pTempNode->peerMacAddr, + if (vos_mem_compare( (tANI_U8 *) macAddr, + (tANI_U8 *) &pTempNode->peerMacAddr, sizeof(tSirMacAddr)) ) { // Found node to be deleted @@ -441,7 +440,7 @@ limRestoreFromAuthState(tpAniSirGlobal pMac, tSirResultCodes resultCode, tANI_U1 tSirMacAddr currentBssId; tLimMlmAuthCnf mlmAuthCnf; - palCopyMemory( pMac->hHdd, (tANI_U8 *) &mlmAuthCnf.peerMacAddr, + vos_mem_copy( (tANI_U8 *) &mlmAuthCnf.peerMacAddr, (tANI_U8 *) &pMac->lim.gpLimMlmAuthReq->peerMacAddr, sizeof(tSirMacAddr)); mlmAuthCnf.authType = pMac->lim.gpLimMlmAuthReq->authType; @@ -453,7 +452,7 @@ limRestoreFromAuthState(tpAniSirGlobal pMac, tSirResultCodes resultCode, tANI_U1 /// Free up buffer allocated /// for pMac->lim.gLimMlmAuthReq - palFreeMemory( pMac->hHdd, pMac->lim.gpLimMlmAuthReq); + vos_mem_free(pMac->lim.gpLimMlmAuthReq); pMac->lim.gpLimMlmAuthReq = NULL; sessionEntry->limMlmState = sessionEntry->limPrevMlmState; @@ -552,12 +551,12 @@ limEncryptAuthFrame(tpAniSirGlobal pMac, tANI_U8 keyId, tANI_U8 *pKey, tANI_U8 * halGetTxTSFtimer(pMac, (tSirMacTimeStamp *) &seed); // Bytes 3-7 of seed is key - palCopyMemory( pMac->hHdd, (tANI_U8 *) &seed[3], pKey, keyLength - 3); + vos_mem_copy((tANI_U8 *) &seed[3], pKey, keyLength - 3); // Compute CRC-32 and place them in last 4 bytes of plain text limComputeCrc32(icv, pPlainText, sizeof(tSirMacAuthFrameBody)); - palCopyMemory( pMac->hHdd, pPlainText + sizeof(tSirMacAuthFrameBody), + vos_mem_copy( pPlainText + sizeof(tSirMacAuthFrameBody), icv, SIR_MAC_WEP_ICV_LENGTH); // Run RC4 on plain text with the seed @@ -747,10 +746,10 @@ limDecryptAuthFrame(tpAniSirGlobal pMac, tANI_U8 *pKey, tANI_U8 *pEncrBody, // Bytes 0-2 of seed is received IV - palCopyMemory( pMac->hHdd, (tANI_U8 *) seed, pEncrBody, SIR_MAC_WEP_IV_LENGTH - 1); + vos_mem_copy((tANI_U8 *) seed, pEncrBody, SIR_MAC_WEP_IV_LENGTH - 1); // Bytes 3-7 of seed is key - palCopyMemory( pMac->hHdd, (tANI_U8 *) &seed[3], pKey, keyLength - 3); + vos_mem_copy((tANI_U8 *) &seed[3], pKey, keyLength - 3); // Run RC4 on encrypted text with the seed limRC4(pPlainBody, @@ -789,17 +788,17 @@ void limPostSmeSetKeysCnf( tpAniSirGlobal pMac, tLimMlmSetKeysCnf *mlmSetKeysCnf) { // Prepare and Send LIM_MLM_SETKEYS_CNF - palCopyMemory( pMac->hHdd, (tANI_U8 *) &mlmSetKeysCnf->peerMacAddr, + vos_mem_copy( (tANI_U8 *) &mlmSetKeysCnf->peerMacAddr, (tANI_U8 *) pMlmSetKeysReq->peerMacAddr, sizeof(tSirMacAddr)); - palCopyMemory( pMac->hHdd, (tANI_U8 *) &mlmSetKeysCnf->peerMacAddr, + vos_mem_copy( (tANI_U8 *) &mlmSetKeysCnf->peerMacAddr, (tANI_U8 *) pMlmSetKeysReq->peerMacAddr, sizeof(tSirMacAddr)); /// Free up buffer allocated for mlmSetKeysReq - palFreeMemory( pMac->hHdd, (tANI_U8 *) pMlmSetKeysReq ); + vos_mem_free( pMlmSetKeysReq ); pMac->lim.gpLimMlmSetKeysReq = NULL; limPostSmeMessage( pMac, @@ -818,12 +817,12 @@ void limPostSmeRemoveKeyCnf( tpAniSirGlobal pMac, tLimMlmRemoveKeyCnf *mlmRemoveKeyCnf) { // Prepare and Send LIM_MLM_REMOVEKEYS_CNF - palCopyMemory( pMac->hHdd, (tANI_U8 *) &mlmRemoveKeyCnf->peerMacAddr, + vos_mem_copy( (tANI_U8 *) &mlmRemoveKeyCnf->peerMacAddr, (tANI_U8 *) pMlmRemoveKeyReq->peerMacAddr, sizeof(tSirMacAddr)); /// Free up buffer allocated for mlmRemoveKeysReq - palFreeMemory( pMac->hHdd, (tANI_U8 *) pMlmRemoveKeyReq ); + vos_mem_free( pMlmRemoveKeyReq ); pMac->lim.gpLimMlmRemoveKeyReq = NULL; psessionEntry->limMlmState = psessionEntry->limPrevMlmState; //Restore the state. @@ -876,21 +875,19 @@ tANI_U32 val = 0; // Package WDA_SET_BSSKEY_REQ message parameters - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, - (void **) &pSetBssKeyParams, - sizeof( tSetBssKeyParams ))) + pSetBssKeyParams = vos_mem_malloc(sizeof( tSetBssKeyParams )); + if ( NULL == pSetBssKeyParams ) { limLog( pMac, LOGE, - FL( "Unable to PAL allocate memory during SET_BSSKEY" )); + FL( "Unable to allocate memory during SET_BSSKEY" )); // Respond to SME with error code mlmSetKeysCnf.resultCode = eSIR_SME_RESOURCES_UNAVAILABLE; goto end; } else - palZeroMemory( pMac->hHdd, - (void *) pSetBssKeyParams, - sizeof( tSetBssKeyParams )); + vos_mem_set( (void *) pSetBssKeyParams, + sizeof( tSetBssKeyParams ), 0); // Update the WDA_SET_BSSKEY_REQ parameters pSetBssKeyParams->bssIdx = psessionEntry->bssIdx; @@ -917,18 +914,16 @@ tANI_U32 val = 0; /* IF the key id is non-zero and encryption type is WEP, Send all the 4 * keys to HAL with filling the key at right index in pSetBssKeyParams->key. */ pSetBssKeyParams->numKeys = SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; - palCopyMemory( pMac->hHdd, - (tANI_U8 *) &pSetBssKeyParams->key[pMlmSetKeysReq->key[0].keyId], - (tANI_U8 *) &pMlmSetKeysReq->key[0], sizeof(pMlmSetKeysReq->key[0])); + vos_mem_copy( (tANI_U8 *) &pSetBssKeyParams->key[pMlmSetKeysReq->key[0].keyId], + (tANI_U8 *) &pMlmSetKeysReq->key[0], sizeof(pMlmSetKeysReq->key[0])); } else { pSetBssKeyParams->numKeys = pMlmSetKeysReq->numKeys; - palCopyMemory( pMac->hHdd, - (tANI_U8 *) &pSetBssKeyParams->key, - (tANI_U8 *) &pMlmSetKeysReq->key, - sizeof( tSirKeys ) * pMlmSetKeysReq->numKeys ); + vos_mem_copy( (tANI_U8 *) &pSetBssKeyParams->key, + (tANI_U8 *) &pMlmSetKeysReq->key, + sizeof( tSirKeys ) * pMlmSetKeysReq->numKeys ); } SET_LIM_PROCESS_DEFD_MESGS(pMac, false); @@ -998,12 +993,14 @@ tSirRetStatus retCode; tANI_U32 val = 0; // Package WDA_SET_STAKEY_REQ message parameters - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **) &pSetStaKeyParams, - sizeof( tSetStaKeyParams ))) { - limLog( pMac, LOGP, FL( "Unable to PAL allocate memory during SET_BSSKEY" )); - return; - }else - palZeroMemory( pMac->hHdd, (void *) pSetStaKeyParams, sizeof( tSetStaKeyParams )); + pSetStaKeyParams = vos_mem_malloc(sizeof( tSetStaKeyParams )); + if ( NULL == pSetStaKeyParams ) + { + limLog( pMac, LOGP, FL( "Unable to allocate memory during SET_BSSKEY" )); + return; + } + else + vos_mem_set( (void *) pSetStaKeyParams, sizeof( tSetStaKeyParams ), 0); // Update the WDA_SET_STAKEY_REQ parameters pSetStaKeyParams->staIdx = staIdx; @@ -1031,8 +1028,8 @@ tANI_U32 val = 0; pSetStaKeyParams->defWEPIdx = defWEPIdx; pSetStaKeyParams->smesessionId = pMlmSetKeysReq->smesessionId; - palCopyMemory(pMac->hHdd, pSetStaKeyParams->peerMacAddr, - pMlmSetKeysReq->peerMacAddr, sizeof(tSirMacAddr)); + vos_mem_copy(pSetStaKeyParams->peerMacAddr, + pMlmSetKeysReq->peerMacAddr, sizeof(tSirMacAddr)); /** Store the Previous MlmState*/ sessionEntry->limPrevMlmState = sessionEntry->limMlmState; @@ -1061,9 +1058,8 @@ tANI_U32 val = 0; for(i=0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS ;i++) { - palCopyMemory( pMac->hHdd, - (tANI_U8 *) &pSetStaKeyParams->key[i], - (tANI_U8 *) &pMlmSetKeysReq->key[i], sizeof( tSirKeys )); + vos_mem_copy( (tANI_U8 *) &pSetStaKeyParams->key[i], + (tANI_U8 *) &pMlmSetKeysReq->key[i], sizeof( tSirKeys )); } pSetStaKeyParams->wepType = eSIR_WEP_STATIC; sessionEntry->limMlmState = eLIM_MLM_WT_SET_STA_KEY_STATE; @@ -1071,8 +1067,7 @@ tANI_U32 val = 0; }else { /*This case the keys are coming from upper layer so need to fill the * key at the default wep key index and send to the HAL */ - palCopyMemory( pMac->hHdd, - (tANI_U8 *) &pSetStaKeyParams->key[defWEPIdx], + vos_mem_copy((tANI_U8 *) &pSetStaKeyParams->key[defWEPIdx], (tANI_U8 *) &pMlmSetKeysReq->key[0], sizeof( pMlmSetKeysReq->key[0] )); pMlmSetKeysReq->numKeys = SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; } @@ -1083,8 +1078,8 @@ tANI_U32 val = 0; case eSIR_ED_WPI: #endif { - palCopyMemory( pMac->hHdd, (tANI_U8 *) &pSetStaKeyParams->key, - (tANI_U8 *) &pMlmSetKeysReq->key[0], sizeof( tSirKeys )); + vos_mem_copy( (tANI_U8 *) &pSetStaKeyParams->key, + (tANI_U8 *) &pMlmSetKeysReq->key[0], sizeof( tSirKeys )); } break; default: @@ -1143,22 +1138,19 @@ tLimMlmRemoveKeyCnf mlmRemoveKeysCnf; tSirRetStatus retCode; // Package WDA_REMOVE_BSSKEY_REQ message parameters - - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, - (void **) &pRemoveBssKeyParams, - sizeof( tRemoveBssKeyParams ))) + pRemoveBssKeyParams = vos_mem_malloc(sizeof( tRemoveBssKeyParams )); + if ( NULL == pRemoveBssKeyParams ) { limLog( pMac, LOGE, - FL( "Unable to PAL allocate memory during REMOVE_BSSKEY" )); + FL( "Unable to allocate memory during REMOVE_BSSKEY" )); // Respond to SME with error code mlmRemoveKeysCnf.resultCode = eSIR_SME_RESOURCES_UNAVAILABLE; goto end; } else - palZeroMemory( pMac->hHdd, - (void *) pRemoveBssKeyParams, - sizeof( tRemoveBssKeyParams )); + vos_mem_set( (void *) pRemoveBssKeyParams, + sizeof( tRemoveBssKeyParams ), 0); // Update the WDA_REMOVE_BSSKEY_REQ parameters pRemoveBssKeyParams->bssIdx = psessionEntry->bssIdx; @@ -1227,7 +1219,7 @@ end: */ void limSendRemoveStaKeyReq( tpAniSirGlobal pMac, tLimMlmRemoveKeyReq *pMlmRemoveKeyReq, - tANI_U16 staIdx , + tANI_U16 staIdx, tpPESession psessionEntry) { tSirMsgQ msgQ; @@ -1235,23 +1227,19 @@ tpRemoveStaKeyParams pRemoveStaKeyParams = NULL; tLimMlmRemoveKeyCnf mlmRemoveKeyCnf; tSirRetStatus retCode; - - - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, - (void **) &pRemoveStaKeyParams, - sizeof( tRemoveStaKeyParams ))) + pRemoveStaKeyParams = vos_mem_malloc(sizeof( tRemoveStaKeyParams )); + if ( NULL == pRemoveStaKeyParams ) { limLog( pMac, LOGE, - FL( "Unable to PAL allocate memory during REMOVE_STAKEY" )); + FL( "Unable to allocate memory during REMOVE_STAKEY" )); // Respond to SME with error code mlmRemoveKeyCnf.resultCode = eSIR_SME_RESOURCES_UNAVAILABLE; goto end; } else - palZeroMemory( pMac->hHdd, - (void *) pRemoveStaKeyParams, - sizeof( tRemoveStaKeyParams )); + vos_mem_set( (void *) pRemoveStaKeyParams, + sizeof( tRemoveStaKeyParams ), 0); if( (pMlmRemoveKeyReq->edType == eSIR_ED_WEP104 || pMlmRemoveKeyReq->edType == eSIR_ED_WEP40) && pMlmRemoveKeyReq->wepType == eSIR_WEP_STATIC ) @@ -1291,7 +1279,8 @@ tSirRetStatus retCode; limLog( pMac, LOGE, FL("Posting REMOVE_STAKEY to HAL failed, reason=%X"), retCode ); - palFreeMemory(pMac->hHdd, pRemoveStaKeyParams); + vos_mem_free(pRemoveStaKeyParams); + pRemoveStaKeyParams = NULL; // Respond to SME with LIM_MLM_REMOVEKEY_CNF mlmRemoveKeyCnf.resultCode = eSIR_SME_HAL_SEND_MESSAGE_FAIL; @@ -1300,6 +1289,10 @@ tSirRetStatus retCode; return; end: + if (pRemoveStaKeyParams) + { + vos_mem_free(pRemoveStaKeyParams); + } limPostSmeRemoveKeyCnf( pMac, psessionEntry, pMlmRemoveKeyReq, diff --git a/CORE/MAC/src/pe/lim/limSendManagementFrames.c b/CORE/MAC/src/pe/lim/limSendManagementFrames.c index 398f8337d631..f764e32b6bf4 100644 --- a/CORE/MAC/src/pe/lim/limSendManagementFrames.c +++ b/CORE/MAC/src/pe/lim/limSendManagementFrames.c @@ -54,9 +54,6 @@ #include "rrmApi.h" #endif -#ifdef FEATURE_WLAN_CCX -#include -#endif #include "wlan_qct_wda.h" #ifdef WLAN_FEATURE_11W #include "dot11fdefs.h" @@ -95,7 +92,7 @@ tSirRetStatus limPopulateMacHeader( tpAniSirGlobal pMac, tANI_U8* pBD, tANI_U8 type, tANI_U8 subType, - tSirMacAddr peerAddr ,tSirMacAddr selfMacAddr) + tSirMacAddr peerAddr, tSirMacAddr selfMacAddr) { tSirRetStatus statusCode = eSIR_SUCCESS; tpSirMacMgmtHdr pMacHdr; @@ -109,8 +106,7 @@ tSirRetStatus limPopulateMacHeader( tpAniSirGlobal pMac, pMacHdr->fc.subType = subType; // Prepare Address 1 - palCopyMemory( pMac->hHdd, - (tANI_U8 *) pMacHdr->da, + vos_mem_copy( (tANI_U8 *) pMacHdr->da, (tANI_U8 *) peerAddr, sizeof( tSirMacAddr )); @@ -118,13 +114,54 @@ tSirRetStatus limPopulateMacHeader( tpAniSirGlobal pMac, sirCopyMacAddr(pMacHdr->sa,selfMacAddr); // Prepare Address 3 - palCopyMemory( pMac->hHdd, - (tANI_U8 *) pMacHdr->bssId, + vos_mem_copy( (tANI_U8 *) pMacHdr->bssId, (tANI_U8 *) peerAddr, sizeof( tSirMacAddr )); return statusCode; } /*** end limPopulateMacHeader() ***/ +#ifdef WLAN_FEATURE_11W +/** + * + * \brief This function is called by various LIM modules to correctly set + * the Protected bit in the Frame Control Field of the 802.11 frame MAC header + * + * + * \param pMac Pointer to Global MAC structure + * + * \param psessionEntry Pointer to session corresponding to the connection + * + * \param peer Peer address of the STA to which the frame is to be sent + * + * \param pMacHdr Pointer to the frame MAC header + * + * \return nothing + * + * + */ +void +limSetProtectedBit(tpAniSirGlobal pMac, + tpPESession psessionEntry, + tSirMacAddr peer, + tpSirMacMgmtHdr pMacHdr) +{ + tANI_U16 aid; + tpDphHashNode pStaDs; + + if( (psessionEntry->limSystemRole == eLIM_AP_ROLE) || + (psessionEntry->limSystemRole == eLIM_BT_AMP_AP_ROLE) ) + { + + pStaDs = dphLookupHashEntry( pMac, peer, &aid, &psessionEntry->dph.dphHashTable ); + if( pStaDs != NULL ) + if( pStaDs->rmfEnabled ) + pMacHdr->fc.wep = 1; + } + else if ( psessionEntry->limRmfEnabled ) + pMacHdr->fc.wep = 1; +} /*** end limSetProtectedBit() ***/ +#endif + /** * \brief limSendProbeReqMgmtFrame * @@ -198,13 +235,13 @@ limSendProbeReqMgmtFrame(tpAniSirGlobal pMac, */ psessionEntry = peFindSessionByBssid(pMac,bssid,&sessionId); - if(psessionEntry) + if (psessionEntry != NULL ) smeSessionId = psessionEntry->smeSessionId; // The scheme here is to fill out a 'tDot11fProbeRequest' structure // and then hand it off to 'dot11fPackProbeRequest' (for // serialization). We start by zero-initializing the structure: - palZeroMemory( pMac->hHdd, ( tANI_U8* )&pr, sizeof( pr ) ); + vos_mem_set(( tANI_U8* )&pr, sizeof( pr ), 0); // & delegating to assorted helpers: PopulateDot11fSSID( pMac, pSsid, &pr.SSID ); @@ -321,11 +358,11 @@ limSendProbeReqMgmtFrame(tpAniSirGlobal pMac, } // Paranoia: - palZeroMemory( pMac->hHdd, pFrame, nBytes ); + vos_mem_set( pFrame, nBytes, 0 ); // Next, we fill out the buffer descriptor: nSirStatus = limPopulateMacHeader( pMac, pFrame, SIR_MAC_MGMT_FRAME, - SIR_MAC_MGMT_PROBE_REQ, bssid ,SelfMacAddr); + SIR_MAC_MGMT_PROBE_REQ, bssid, SelfMacAddr); if ( eSIR_SUCCESS != nSirStatus ) { limLog( pMac, LOGE, FL("Failed to populate the buffer descrip" @@ -350,13 +387,13 @@ limSendProbeReqMgmtFrame(tpAniSirGlobal pMac, else if ( DOT11F_WARNED( nStatus ) ) { limLog( pMac, LOGW, FL("There were warnings while packing a P" - "robe Request (0x%08x).") ); + "robe Request (0x%08x)."), nStatus ); } // Append any AddIE if present. if( nAdditionalIELen ) { - palCopyMemory( pMac->hHdd, pFrame+sizeof(tSirMacMgmtHdr)+nPayload, + vos_mem_copy( pFrame+sizeof(tSirMacMgmtHdr)+nPayload, pAdditionalIE, nAdditionalIELen ); nPayload += nAdditionalIELen; } @@ -414,8 +451,8 @@ tSirRetStatus limGetAddnIeForProbeResp(tpAniSirGlobal pMac, return eSIR_FAILURE; } - if( (palAllocateMemory(pMac->hHdd, (void**)&tempbuf, - left)) != eHAL_STATUS_SUCCESS) + tempbuf = vos_mem_malloc(left); + if ( NULL == tempbuf ) { PELOGE(limLog(pMac, LOGE, FL("Unable to allocate memory to store addn IE"));) @@ -432,21 +469,21 @@ tSirRetStatus limGetAddnIeForProbeResp(tpAniSirGlobal pMac, limLog( pMac, LOGE, FL("****Invalid IEs eid = %d elem_len=%d left=%d*****"), elem_id,elem_len,left); - palFreeMemory(pMac->hHdd, tempbuf); + vos_mem_free(tempbuf); return eSIR_FAILURE; } if ( !( (SIR_MAC_EID_VENDOR == elem_id) && (memcmp(&ptr[2], SIR_MAC_P2P_OUI, SIR_MAC_P2P_OUI_SIZE)==0) ) ) { - palCopyMemory ( pMac->hHdd, tempbuf + tempLen, &ptr[0], elem_len + 2); + vos_mem_copy (tempbuf + tempLen, &ptr[0], elem_len + 2); tempLen += (elem_len + 2); } left -= elem_len; ptr += (elem_len + 2); } - palCopyMemory ( pMac->hHdd, addIE, tempbuf, tempLen); + vos_mem_copy (addIE, tempbuf, tempLen); *addnIELen = tempLen; - palFreeMemory(pMac->hHdd, tempbuf); + vos_mem_free(tempbuf); } return eSIR_SUCCESS; } @@ -494,17 +531,16 @@ limSendProbeRspMgmtFrame(tpAniSirGlobal pMac, } smeSessionId = psessionEntry->smeSessionId; - - if(eHAL_STATUS_SUCCESS != palAllocateMemory(pMac->hHdd, - (void **)&pFrm, sizeof(tDot11fProbeResponse))) + pFrm = vos_mem_malloc(sizeof(tDot11fProbeResponse)); + if ( NULL == pFrm ) { - limLog(pMac, LOGE, FL("Unable to PAL allocate memory in limSendProbeRspMgmtFrame") ); + limLog(pMac, LOGE, FL("Unable to allocate memory in limSendProbeRspMgmtFrame") ); return; } // Fill out 'frm', after which we'll just hand the struct off to // 'dot11fPackProbeResponse'. - palZeroMemory( pMac->hHdd, ( tANI_U8* )pFrm, sizeof( tDot11fProbeResponse ) ); + vos_mem_set(( tANI_U8* )pFrm, sizeof( tDot11fProbeResponse ), 0); // Timestamp to be updated by TFP, below. @@ -520,7 +556,7 @@ limSendProbeRspMgmtFrame(tpAniSirGlobal pMac, { limLog( pMac, LOGP, FL("Failed to retrieve WNI_CFG_BEACON_INTERVAL from CFG (%d)."), nSirStatus ); - palFreeMemory(pMac->hHdd, pFrm); + vos_mem_free(pFrm); return; } pFrm->BeaconInterval.interval = ( tANI_U16 ) cfg; @@ -602,8 +638,8 @@ limSendProbeRspMgmtFrame(tpAniSirGlobal pMac, { PopulateDot11fWPA( pMac, &( psessionEntry->pLimStartBssReq->rsnIE ), &pFrm->WPA ); - PopulateDot11fRSN( pMac, &( psessionEntry->pLimStartBssReq->rsnIE ), - &pFrm->RSN ); + PopulateDot11fRSNOpaque( pMac, &( psessionEntry->pLimStartBssReq->rsnIE ), + &pFrm->RSNOpaque ); } PopulateDot11fWMM( pMac, &pFrm->WMMInfoAp, &pFrm->WMMParams, &pFrm->WMMCaps, psessionEntry ); @@ -651,19 +687,20 @@ limSendProbeRspMgmtFrame(tpAniSirGlobal pMac, &addnIEPresent) != eSIR_SUCCESS) { limLog(pMac, LOGP, FL("Unable to get WNI_CFG_PROBE_RSP_ADDNIE_FLAG")); - palFreeMemory(pMac->hHdd, pFrm); + vos_mem_free(pFrm); return; } } if (addnIEPresent) { - if( (palAllocateMemory(pMac->hHdd, (void**)&addIE, - WNI_CFG_PROBE_RSP_ADDNIE_DATA1_LEN*3 )) != eHAL_STATUS_SUCCESS) + + addIE = vos_mem_malloc(WNI_CFG_PROBE_RSP_ADDNIE_DATA1_LEN*3); + if ( NULL == addIE ) { PELOGE(limLog(pMac, LOGE, FL("Unable to allocate memory to store addn IE"));) - palFreeMemory(pMac->hHdd, pFrm); + vos_mem_free(pFrm); return; } @@ -672,8 +709,8 @@ limSendProbeRspMgmtFrame(tpAniSirGlobal pMac, WNI_CFG_PROBE_RSP_ADDNIE_DATA1, &addnIE1Len) ) { limLog(pMac, LOGP, FL("Unable to get WNI_CFG_PROBE_RSP_ADDNIE_DATA1 length")); - palFreeMemory(pMac->hHdd, addIE); - palFreeMemory(pMac->hHdd, pFrm); + vos_mem_free(addIE); + vos_mem_free(pFrm); return; } if (addnIE1Len <= WNI_CFG_PROBE_RSP_ADDNIE_DATA1_LEN && addnIE1Len && @@ -685,8 +722,8 @@ limSendProbeRspMgmtFrame(tpAniSirGlobal pMac, { limLog(pMac, LOGP, FL("Unable to get WNI_CFG_PROBE_RSP_ADDNIE_DATA1 String")); - palFreeMemory(pMac->hHdd, addIE); - palFreeMemory(pMac->hHdd, pFrm); + vos_mem_free(addIE); + vos_mem_free(pFrm); return; } } @@ -696,8 +733,8 @@ limSendProbeRspMgmtFrame(tpAniSirGlobal pMac, WNI_CFG_PROBE_RSP_ADDNIE_DATA2, &addnIE2Len) ) { limLog(pMac, LOGP, FL("Unable to get WNI_CFG_PROBE_RSP_ADDNIE_DATA2 length")); - palFreeMemory(pMac->hHdd, addIE); - palFreeMemory(pMac->hHdd, pFrm); + vos_mem_free(addIE); + vos_mem_free(pFrm); return; } if (addnIE2Len <= WNI_CFG_PROBE_RSP_ADDNIE_DATA2_LEN && addnIE2Len && @@ -709,8 +746,8 @@ limSendProbeRspMgmtFrame(tpAniSirGlobal pMac, { limLog(pMac, LOGP, FL("Unable to get WNI_CFG_PROBE_RSP_ADDNIE_DATA2 String")); - palFreeMemory(pMac->hHdd, addIE); - palFreeMemory(pMac->hHdd, pFrm); + vos_mem_free(addIE); + vos_mem_free(pFrm); return; } } @@ -720,8 +757,8 @@ limSendProbeRspMgmtFrame(tpAniSirGlobal pMac, WNI_CFG_PROBE_RSP_ADDNIE_DATA3, &addnIE3Len) ) { limLog(pMac, LOGP, FL("Unable to get WNI_CFG_PROBE_RSP_ADDNIE_DATA3 length")); - palFreeMemory(pMac->hHdd, addIE); - palFreeMemory(pMac->hHdd, pFrm); + vos_mem_free(addIE); + vos_mem_free(pFrm); return; } if (addnIE3Len <= WNI_CFG_PROBE_RSP_ADDNIE_DATA3_LEN && addnIE3Len && @@ -734,8 +771,8 @@ limSendProbeRspMgmtFrame(tpAniSirGlobal pMac, { limLog(pMac, LOGP, FL("Unable to get WNI_CFG_PROBE_RSP_ADDNIE_DATA3 String")); - palFreeMemory(pMac->hHdd, addIE); - palFreeMemory(pMac->hHdd, pFrm); + vos_mem_free(addIE); + vos_mem_free(pFrm); return; } } @@ -745,8 +782,8 @@ limSendProbeRspMgmtFrame(tpAniSirGlobal pMac, { limLog(pMac, LOGP, FL("Unable to get final Additional IE for Probe Req")); - palFreeMemory(pMac->hHdd, addIE); - palFreeMemory(pMac->hHdd, pFrm); + vos_mem_free(addIE); + vos_mem_free(pFrm); return; } nBytes = nBytes + totalAddnIeLen; @@ -777,14 +814,14 @@ limSendProbeRspMgmtFrame(tpAniSirGlobal pMac, "be Response."), nBytes ); if ( addIE != NULL ) { - palFreeMemory(pMac->hHdd, addIE); + vos_mem_free(addIE); } - palFreeMemory(pMac->hHdd, pFrm); + vos_mem_free(pFrm); return; } // Paranoia: - palZeroMemory( pMac->hHdd, pFrame, nBytes ); + vos_mem_set( pFrame, nBytes, 0 ); // Next, we fill out the buffer descriptor: nSirStatus = limPopulateMacHeader( pMac, pFrame, SIR_MAC_MGMT_FRAME, @@ -798,9 +835,9 @@ limSendProbeRspMgmtFrame(tpAniSirGlobal pMac, ( void* ) pFrame, ( void* ) pPacket ); if ( addIE != NULL ) { - palFreeMemory(pMac->hHdd, addIE); + vos_mem_free(addIE); } - palFreeMemory(pMac->hHdd, pFrm); + vos_mem_free(pFrm); return; } @@ -818,15 +855,15 @@ limSendProbeRspMgmtFrame(tpAniSirGlobal pMac, palPktFree( pMac->hHdd, HAL_TXRX_FRM_802_11_MGMT, ( void* ) pFrame, ( void* ) pPacket ); if ( addIE != NULL ) { - palFreeMemory(pMac->hHdd, addIE); + vos_mem_free(addIE); } - palFreeMemory(pMac->hHdd, pFrm); + vos_mem_free(pFrm); return; // allocated! } else if ( DOT11F_WARNED( nStatus ) ) { limLog( pMac, LOGW, FL("There were warnings while packing a P" - "robe Response (0x%08x).") ); + "robe Response (0x%08x)."), nStatus ); } PELOG3(limLog( pMac, LOG3, FL("Sending Probe Response frame to ") ); @@ -836,33 +873,30 @@ limSendProbeRspMgmtFrame(tpAniSirGlobal pMac, if( pMac->lim.gpLimRemainOnChanReq ) { - palCopyMemory ( pMac->hHdd, pFrame+sizeof(tSirMacMgmtHdr)+nPayload, + vos_mem_copy ( pFrame+sizeof(tSirMacMgmtHdr)+nPayload, pMac->lim.gpLimRemainOnChanReq->probeRspIe, (pMac->lim.gpLimRemainOnChanReq->length - sizeof( tSirRemainOnChnReq )) ); } if ( addnIEPresent ) { - if (palCopyMemory ( pMac->hHdd, pFrame+sizeof(tSirMacMgmtHdr)+nPayload, - &addIE[0], totalAddnIeLen) != eHAL_STATUS_SUCCESS) - { - limLog(pMac, LOGP, FL("Additional Probe Rp IE request failed while Appending: %x"),halstatus); - palPktFree( pMac->hHdd, HAL_TXRX_FRM_802_11_MGMT, - ( void* ) pFrame, ( void* ) pPacket ); - if ( addIE != NULL ) - { - palFreeMemory(pMac->hHdd, addIE); - } - palFreeMemory(pMac->hHdd, pFrm); - return; - } + vos_mem_copy(pFrame+sizeof(tSirMacMgmtHdr)+nPayload, &addIE[0], totalAddnIeLen); } if (noaLen != 0) { - if (palCopyMemory ( pMac->hHdd, &pFrame[nBytes - (total_noaLen)], - &noaIe[0], total_noaLen) != eHAL_STATUS_SUCCESS) + if (total_noaLen > (SIR_MAX_NOA_ATTR_LEN + SIR_P2P_IE_HEADER_LEN)) { limLog(pMac, LOGE, FL("Not able to insert NoA because of length constraint")); + vos_mem_free(addIE); + vos_mem_free(pFrm); + palPktFree( pMac->hHdd, HAL_TXRX_FRM_802_11_MGMT, + ( void* ) pFrame, ( void* ) pPacket ); + return; + } + else + { + vos_mem_copy( &pFrame[nBytes - (total_noaLen)], + &noaIe[0], total_noaLen); } } @@ -889,10 +923,10 @@ limSendProbeRspMgmtFrame(tpAniSirGlobal pMac, if ( addIE != NULL ) { - palFreeMemory(pMac->hHdd, addIE); + vos_mem_free(addIE); } - palFreeMemory(pMac->hHdd, pFrm); + vos_mem_free(pFrm); return; @@ -928,7 +962,7 @@ limSendAddtsReqActionFrame(tpAniSirGlobal pMac, if ( ! pAddTS->wmeTspecPresent ) { - palZeroMemory( pMac->hHdd, ( tANI_U8* )&AddTSReq, sizeof( AddTSReq ) ); + vos_mem_set(( tANI_U8* )&AddTSReq, sizeof( AddTSReq ), 0); AddTSReq.Action.action = SIR_MAC_QOS_ADD_TS_REQ; AddTSReq.DialogToken.token = pAddTS->dialogToken; @@ -996,7 +1030,7 @@ limSendAddtsReqActionFrame(tpAniSirGlobal pMac, } else { - palZeroMemory( pMac->hHdd, ( tANI_U8* )&WMMAddTSReq, sizeof( WMMAddTSReq ) ); + vos_mem_set(( tANI_U8* )&WMMAddTSReq, sizeof( WMMAddTSReq ), 0); WMMAddTSReq.Action.action = SIR_MAC_QOS_ADD_TS_REQ; WMMAddTSReq.DialogToken.token = pAddTS->dialogToken; @@ -1051,7 +1085,7 @@ limSendAddtsReqActionFrame(tpAniSirGlobal pMac, } // Paranoia: - palZeroMemory( pMac->hHdd, pFrame, nBytes ); + vos_mem_set( pFrame, nBytes, 0 ); // Next, we fill out the buffer descriptor: nSirStatus = limPopulateMacHeader( pMac, pFrame, SIR_MAC_MGMT_FRAME, @@ -1084,10 +1118,7 @@ limSendAddtsReqActionFrame(tpAniSirGlobal pMac, sirCopyMacAddr(pMacHdr->bssId,psessionEntry->bssId); #ifdef WLAN_FEATURE_11W - if ( psessionEntry->limRmfEnabled ) - { - pMacHdr->fc.wep = 1; - } + limSetProtectedBit(pMac, psessionEntry, peerMacAddr, pMacHdr); #endif // That done, pack the struct: @@ -1106,8 +1137,8 @@ limSendAddtsReqActionFrame(tpAniSirGlobal pMac, } else if ( DOT11F_WARNED( nStatus ) ) { - limLog( pMac, LOGW, FL("There were warnings while packing" - "an Add TS Request (0x%08x).") ); + limLog( pMac, LOGW, FL("There were warnings while packing " + "an Add TS Request (0x%08x)."), nStatus ); } } else @@ -1125,8 +1156,8 @@ limSendAddtsReqActionFrame(tpAniSirGlobal pMac, } else if ( DOT11F_WARNED( nStatus ) ) { - limLog( pMac, LOGW, FL("There were warnings while packing" - "a WMM Add TS Request (0x%08x).") ); + limLog( pMac, LOGW, FL("There were warnings while packing " + "a WMM Add TS Request (0x%08x)."), nStatus ); } } @@ -1190,7 +1221,7 @@ limSendAssocRspMgmtFrame(tpAniSirGlobal pMac, smeSessionId = psessionEntry->smeSessionId; - palZeroMemory( pMac->hHdd, ( tANI_U8* )&frm, sizeof( frm ) ); + vos_mem_set( ( tANI_U8* )&frm, sizeof( frm ), 0 ); limGetQosMode(psessionEntry, &qosMode); limGetWmeMode(psessionEntry, &wmeMode); @@ -1296,7 +1327,7 @@ limSendAssocRspMgmtFrame(tpAniSirGlobal pMac, } // End if on non-NULL 'pSta'. - palZeroMemory( pMac->hHdd, ( tANI_U8* )&beaconParams, sizeof( tUpdateBeaconParams) ); + vos_mem_set(( tANI_U8* )&beaconParams, sizeof( tUpdateBeaconParams), 0); if( psessionEntry->limSystemRole == eLIM_AP_ROLE ){ if(psessionEntry->gLimProtectionControl != WNI_CFG_FORCE_POLICY_PROTECTION_DISABLE) @@ -1306,8 +1337,8 @@ limSendAssocRspMgmtFrame(tpAniSirGlobal pMac, limUpdateShortPreamble(pMac, peerMacAddr, &beaconParams, psessionEntry); limUpdateShortSlotTime(pMac, peerMacAddr, &beaconParams, psessionEntry); - /* Populate Do11capabilities after updating session with Assos req details - */ + /* Populate Do11capabilities after updating session with Assos req details + */ PopulateDot11fCapabilities( pMac, &frm.Capabilities, psessionEntry ); beaconParams.bssIdx = psessionEntry->bssIdx; @@ -1330,7 +1361,7 @@ limSendAssocRspMgmtFrame(tpAniSirGlobal pMac, } else if ( DOT11F_WARNED( nStatus ) ) { - limLog( pMac, LOGW, FL("There were warnings while calculating" + limLog( pMac, LOGW, FL("There were warnings while calculating " "the packed size for an Association Re" "sponse (0x%08x)."), nStatus ); } @@ -1378,7 +1409,7 @@ limSendAssocRspMgmtFrame(tpAniSirGlobal pMac, } // Paranoia: - palZeroMemory( pMac->hHdd, pFrame, nBytes ); + vos_mem_set( pFrame, nBytes, 0 ); // Next, we fill out the buffer descriptor: nSirStatus = limPopulateMacHeader( pMac, @@ -1416,7 +1447,7 @@ limSendAssocRspMgmtFrame(tpAniSirGlobal pMac, else if ( DOT11F_WARNED( nStatus ) ) { limLog( pMac, LOGW, FL("There were warnings while packing an " - "Association Response (0x%08x).") ); + "Association Response (0x%08x)."), nStatus ); } macAddr = pMacHdr->da; @@ -1436,14 +1467,7 @@ limSendAssocRspMgmtFrame(tpAniSirGlobal pMac, if ( addnIEPresent ) { - if (palCopyMemory ( pMac->hHdd, pFrame+sizeof(tSirMacMgmtHdr)+nPayload, - &addIE[0], addnIELen ) != eHAL_STATUS_SUCCESS) - { - limLog(pMac, LOGP, FL("Additional Assoc IEs request failed while Appending: %x"),halstatus); - palPktFree( pMac->hHdd, HAL_TXRX_FRM_802_11_MGMT, - ( void* ) pFrame, ( void* ) pPacket ); - return; - } + vos_mem_copy ( pFrame+sizeof(tSirMacMgmtHdr)+nPayload, &addIE[0], addnIELen ) ; } if( ( SIR_BAND_5_GHZ == limGetRFBand(psessionEntry->currentOperChannel)) @@ -1506,7 +1530,7 @@ limSendAddtsRspActionFrame(tpAniSirGlobal pMac, if ( ! pAddTS->wmeTspecPresent ) { - palZeroMemory( pMac->hHdd, ( tANI_U8* )&AddTSRsp, sizeof( AddTSRsp ) ); + vos_mem_set( ( tANI_U8* )&AddTSRsp, sizeof( AddTSRsp ), 0 ); AddTSRsp.Category.category = SIR_MAC_ACTION_QOS_MGMT; AddTSRsp.Action.action = SIR_MAC_QOS_ADD_TS_RSP; @@ -1607,13 +1631,13 @@ limSendAddtsRspActionFrame(tpAniSirGlobal pMac, else if ( DOT11F_WARNED( nStatus ) ) { limLog( pMac, LOGW, FL("There were warnings while calcula" - "tingthe packed size for an Add TS" + "ting the packed size for an Add TS" " Response (0x%08x)."), nStatus ); } } else { - palZeroMemory( pMac->hHdd, ( tANI_U8* )&WMMAddTSRsp, sizeof( WMMAddTSRsp ) ); + vos_mem_set( ( tANI_U8* )&WMMAddTSRsp, sizeof( WMMAddTSRsp ), 0 ); WMMAddTSRsp.Category.category = SIR_MAC_ACTION_WME; WMMAddTSRsp.Action.action = SIR_MAC_QOS_ADD_TS_RSP; @@ -1634,7 +1658,7 @@ limSendAddtsRspActionFrame(tpAniSirGlobal pMac, else if ( DOT11F_WARNED( nStatus ) ) { limLog( pMac, LOGW, FL("There were warnings while calcula" - "tingthe packed size for a WMM Add" + "ting the packed size for a WMM Add" "TS Response (0x%08x)."), nStatus ); } } @@ -1650,7 +1674,7 @@ limSendAddtsRspActionFrame(tpAniSirGlobal pMac, } // Paranoia: - palZeroMemory( pMac->hHdd, pFrame, nBytes ); + vos_mem_set( pFrame, nBytes, 0 ); // Next, we fill out the buffer descriptor: nSirStatus = limPopulateMacHeader( pMac, pFrame, SIR_MAC_MGMT_FRAME, @@ -1680,10 +1704,7 @@ limSendAddtsRspActionFrame(tpAniSirGlobal pMac, sirCopyMacAddr(pMacHdr->bssId,psessionEntry->bssId); #ifdef WLAN_FEATURE_11W - if ( psessionEntry->limRmfEnabled ) - { - pMacHdr->fc.wep = 1; - } + limSetProtectedBit(pMac, psessionEntry, peer, pMacHdr); #endif // That done, pack the struct: @@ -1702,8 +1723,8 @@ limSendAddtsRspActionFrame(tpAniSirGlobal pMac, } else if ( DOT11F_WARNED( nStatus ) ) { - limLog( pMac, LOGW, FL("There were warnings while packing" - "an Add TS Response (0x%08x).") ); + limLog( pMac, LOGW, FL("There were warnings while packing " + "an Add TS Response (0x%08x)."), nStatus ); } } else @@ -1721,8 +1742,8 @@ limSendAddtsRspActionFrame(tpAniSirGlobal pMac, } else if ( DOT11F_WARNED( nStatus ) ) { - limLog( pMac, LOGW, FL("There were warnings while packing" - "a WMM Add TS Response (0x%08x).") ); + limLog( pMac, LOGW, FL("There were warnings while packing " + "a WMM Add TS Response (0x%08x)."), nStatus ); } } @@ -1781,7 +1802,7 @@ limSendDeltsReqActionFrame(tpAniSirGlobal pMac, if ( ! wmmTspecPresent ) { - palZeroMemory( pMac->hHdd, ( tANI_U8* )&DelTS, sizeof( DelTS ) ); + vos_mem_set( ( tANI_U8* )&DelTS, sizeof( DelTS ), 0 ); DelTS.Category.category = SIR_MAC_ACTION_QOS_MGMT; DelTS.Action.action = SIR_MAC_QOS_DEL_TS_REQ; @@ -1805,7 +1826,7 @@ limSendDeltsReqActionFrame(tpAniSirGlobal pMac, } else { - palZeroMemory( pMac->hHdd, ( tANI_U8* )&WMMDelTS, sizeof( WMMDelTS ) ); + vos_mem_set( ( tANI_U8* )&WMMDelTS, sizeof( WMMDelTS ), 0 ); WMMDelTS.Category.category = SIR_MAC_ACTION_WME; WMMDelTS.Action.action = SIR_MAC_QOS_DEL_TS_REQ; @@ -1840,7 +1861,7 @@ limSendDeltsReqActionFrame(tpAniSirGlobal pMac, } // Paranoia: - palZeroMemory( pMac->hHdd, pFrame, nBytes ); + vos_mem_set( pFrame, nBytes, 0 ); // Next, we fill out the buffer descriptor: nSirStatus = limPopulateMacHeader( pMac, pFrame, SIR_MAC_MGMT_FRAME, @@ -1872,10 +1893,7 @@ limSendDeltsReqActionFrame(tpAniSirGlobal pMac, sirCopyMacAddr(pMacHdr->bssId, psessionEntry->bssId); #ifdef WLAN_FEATURE_11W - if ( psessionEntry->limRmfEnabled ) - { - pMacHdr->fc.wep = 1; - } + limSetProtectedBit(pMac, psessionEntry, peer, pMacHdr); #endif // That done, pack the struct: @@ -1893,8 +1911,8 @@ limSendDeltsReqActionFrame(tpAniSirGlobal pMac, } else if ( DOT11F_WARNED( nStatus ) ) { - limLog( pMac, LOGW, FL("There were warnings while packing" - "a Del TS frame (0x%08x).") ); + limLog( pMac, LOGW, FL("There were warnings while packing " + "a Del TS frame (0x%08x)."), nStatus ); } } else @@ -1911,8 +1929,8 @@ limSendDeltsReqActionFrame(tpAniSirGlobal pMac, } else if ( DOT11F_WARNED( nStatus ) ) { - limLog( pMac, LOGW, FL("There were warnings while packing" - "a WMM Del TS frame (0x%08x).") ); + limLog( pMac, LOGW, FL("There were warnings while packing " + "a WMM Del TS frame (0x%08x)."), nStatus ); } } @@ -1984,15 +2002,15 @@ limSendAssocReqMgmtFrame(tpAniSirGlobal pMac, nAddIELen = psessionEntry->pLimJoinReq->addIEAssoc.length; pAddIE = psessionEntry->pLimJoinReq->addIEAssoc.addIEdata; - if(eHAL_STATUS_SUCCESS != palAllocateMemory(pMac->hHdd, - (void **)&pFrm, sizeof(tDot11fAssocRequest))) + pFrm = vos_mem_malloc(sizeof(tDot11fAssocRequest)); + if ( NULL == pFrm ) { - limLog(pMac, LOGE, FL("Unable to PAL allocate memory in limSendAssocReqMgmtFrame") ); + limLog(pMac, LOGE, FL("Unable to allocate memory in limSendAssocReqMgmtFrame") ); return; } - palZeroMemory( pMac->hHdd, ( tANI_U8* )pFrm, sizeof( tDot11fAssocRequest ) ); + vos_mem_set( ( tANI_U8* )pFrm, sizeof( tDot11fAssocRequest ), 0 ); caps = pMlmAssocReq->capabilityInfo; if ( PROP_CAPABILITY_GET( 11EQOS, psessionEntry->limCurrentBssPropCap ) ) @@ -2162,23 +2180,30 @@ limSendAssocReqMgmtFrame(tpAniSirGlobal pMac, (unsigned int)psessionEntry->pLimJoinReq->bssDescription.mdie[1], (unsigned int)psessionEntry->pLimJoinReq->bssDescription.mdie[2]); #endif - PopulateMDIE( pMac, &pFrm->MobilityDomain, psessionEntry->pLimJoinReq->bssDescription.mdie); + PopulateMDIE( pMac, &pFrm->MobilityDomain, + psessionEntry->pLimJoinReq->bssDescription.mdie); } - else + else { // No 11r IEs dont send any MDIE - limLog( pMac, LOG1, FL("mdie not present")); + limLog( pMac, LOG1, FL("MDIE not present")); } #endif #ifdef FEATURE_WLAN_CCX - // For CCX Associations fill the CCX IEs - if (psessionEntry->isCCXconnection) + /* CCX Version IE will be included in association request + when CCX is enabled on DUT through ini */ + if (psessionEntry->pLimJoinReq->isCCXFeatureIniEnabled) + { + PopulateDot11fCCXVersion(&pFrm->CCXVersion); + } + /* For CCX Associations fill the CCX IEs */ + if (psessionEntry->isCCXconnection && + psessionEntry->pLimJoinReq->isCCXFeatureIniEnabled) { #ifndef FEATURE_DISABLE_RM PopulateDot11fCCXRadMgmtCap(&pFrm->CCXRadMgmtCap); #endif - PopulateDot11fCCXVersion(&pFrm->CCXVersion); } #endif @@ -2193,7 +2218,7 @@ limSendAssocReqMgmtFrame(tpAniSirGlobal pMac, } else if ( DOT11F_WARNED( nStatus ) ) { - limLog( pMac, LOGW, FL("There were warnings while calculating" + limLog( pMac, LOGW, FL("There were warnings while calculating " "the packed size for an Association Re " "quest(0x%08x)."), nStatus ); } @@ -2223,12 +2248,12 @@ limSendAssocReqMgmtFrame(tpAniSirGlobal pMac, limPostSmeMessage( pMac, LIM_MLM_ASSOC_CNF, ( tANI_U32* ) &mlmAssocCnf); - palFreeMemory(pMac->hHdd, pFrm); + vos_mem_free(pFrm); return; } // Paranoia: - palZeroMemory( pMac->hHdd, pFrame, nBytes ); + vos_mem_set( pFrame, nBytes, 0 ); // Next, we fill out the buffer descriptor: nSirStatus = limPopulateMacHeader( pMac, pFrame, SIR_MAC_MGMT_FRAME, @@ -2239,7 +2264,7 @@ limSendAssocReqMgmtFrame(tpAniSirGlobal pMac, "tor for an Association Request (%d)."), nSirStatus ); palPktFree( pMac->hHdd, HAL_TXRX_FRM_802_11_MGMT, ( void* ) pFrame, ( void* ) pPacket ); - palFreeMemory(pMac->hHdd, pFrm); + vos_mem_free(pFrm); return; } @@ -2255,13 +2280,13 @@ limSendAssocReqMgmtFrame(tpAniSirGlobal pMac, nStatus ); palPktFree( pMac->hHdd, HAL_TXRX_FRM_802_11_MGMT, ( void* ) pFrame, ( void* ) pPacket ); - palFreeMemory(pMac->hHdd, pFrm); + vos_mem_free(pFrm); return; } else if ( DOT11F_WARNED( nStatus ) ) { limLog( pMac, LOGW, FL("There were warnings while packing a P" - "robe Response (0x%08x).") ); + "robe Response (0x%08x)."), nStatus ); } PELOG1(limLog( pMac, LOG1, FL("*** Sending Association Request length %d" @@ -2271,27 +2296,27 @@ limSendAssocReqMgmtFrame(tpAniSirGlobal pMac, if( psessionEntry->assocReq != NULL ) { - palFreeMemory(pMac->hHdd, psessionEntry->assocReq); + vos_mem_free(psessionEntry->assocReq); psessionEntry->assocReq = NULL; } if( nAddIELen ) { - palCopyMemory( pMac->hHdd, pFrame + sizeof(tSirMacMgmtHdr) + nPayload, - pAddIE, - nAddIELen ); + vos_mem_copy( pFrame + sizeof(tSirMacMgmtHdr) + nPayload, + pAddIE, + nAddIELen ); nPayload += nAddIELen; } - if( (palAllocateMemory(pMac->hHdd, (void**)&psessionEntry->assocReq, - nPayload)) != eHAL_STATUS_SUCCESS) + psessionEntry->assocReq = vos_mem_malloc(nPayload); + if ( NULL == psessionEntry->assocReq ) { PELOGE(limLog(pMac, LOGE, FL("Unable to allocate memory to store assoc request"));) } else { //Store the Assoc request. This is sent to csr/hdd in join cnf response. - palCopyMemory(pMac->hHdd, psessionEntry->assocReq, pFrame + sizeof(tSirMacMgmtHdr), nPayload); + vos_mem_copy( psessionEntry->assocReq, pFrame + sizeof(tSirMacMgmtHdr), nPayload); psessionEntry->assocReqLen = nPayload; } @@ -2318,13 +2343,13 @@ limSendAssocReqMgmtFrame(tpAniSirGlobal pMac, limLog( pMac, LOGE, FL("Failed to send Association Request (%X)!"), halstatus ); //Pkt will be freed up by the callback - palFreeMemory(pMac->hHdd, pFrm); + vos_mem_free(pFrm); return; } // Free up buffer allocated for mlmAssocReq - palFreeMemory( pMac->hHdd, ( tANI_U8* ) pMlmAssocReq ); - palFreeMemory(pMac->hHdd, pFrm); + vos_mem_free(pMlmAssocReq); + vos_mem_free(pFrm); return; } // End limSendAssocReqMgmtFrame @@ -2378,7 +2403,7 @@ limSendReassocReqWithFTIEsMgmtFrame(tpAniSirGlobal pMac, limLog( pMac, LOG1, FL("limSendReassocReqWithFTIEsMgmtFrame received in " "state (%d)."), psessionEntry->limMlmState); - palZeroMemory( pMac->hHdd, ( tANI_U8* )&frm, sizeof( frm ) ); + vos_mem_set( ( tANI_U8* )&frm, sizeof( frm ), 0 ); caps = pMlmReassocReq->capabilityInfo; if (PROP_CAPABILITY_GET(11EQOS, psessionEntry->limReassocBssPropCap)) @@ -2398,7 +2423,7 @@ limSendReassocReqWithFTIEsMgmtFrame(tpAniSirGlobal pMac, frm.ListenInterval.interval = pMlmReassocReq->listenInterval; // Get the old bssid of the older AP. - palCopyMemory( pMac->hHdd, ( tANI_U8* )frm.CurrentAPAddress.mac, + vos_mem_copy( ( tANI_U8* )frm.CurrentAPAddress.mac, pMac->ft.ftPEContext.pFTPreAuthReq->currbssId, 6); PopulateDot11fSSID2( pMac, &frm.SSID ); @@ -2496,7 +2521,7 @@ limSendReassocReqWithFTIEsMgmtFrame(tpAniSirGlobal pMac, } #ifdef FEATURE_WLAN_CCX - if(psessionEntry->pLimReAssocReq->cckmIE.length) + if (psessionEntry->pLimReAssocReq->cckmIE.length) { PopulateDot11fCCXCckmOpaque( pMac, &( psessionEntry->pLimReAssocReq->cckmIE ), &frm.CCXCckmOpaque ); @@ -2505,15 +2530,21 @@ limSendReassocReqWithFTIEsMgmtFrame(tpAniSirGlobal pMac, } #ifdef FEATURE_WLAN_CCX + /* CCX Version IE will be included in reassociation request + when CCX is enabled on DUT through ini */ + if (psessionEntry->pLimReAssocReq->isCCXFeatureIniEnabled) + { + PopulateDot11fCCXVersion(&frm.CCXVersion); + } // For CCX Associations fill the CCX IEs - if (psessionEntry->isCCXconnection) + if (psessionEntry->isCCXconnection && + psessionEntry->pLimReAssocReq->isCCXFeatureIniEnabled) { #ifndef FEATURE_DISABLE_RM PopulateDot11fCCXRadMgmtCap(&frm.CCXRadMgmtCap); #endif - PopulateDot11fCCXVersion(&frm.CCXVersion); } -#endif //FEATURE_WLAN_CCX +#endif //FEATURE_WLAN_CCX #endif //FEATURE_WLAN_CCX || FEATURE_WLAN_LFR // include WME EDCA IE as well @@ -2550,14 +2581,14 @@ limSendReassocReqWithFTIEsMgmtFrame(tpAniSirGlobal pMac, { tsrsIE.rates[0] = TSRS_11AG_RATE_6MBPS; } - else + else { tsrsIE.rates[0] = TSRS_11B_RATE_5_5MBPS; } PopulateDot11TSRSIE(pMac,&tsrsIE, &frm.CCXTrafStrmRateSet, sizeof(tANI_U8)); } } -#endif +#endif } if ( psessionEntry->htCapability && @@ -2588,7 +2619,7 @@ limSendReassocReqWithFTIEsMgmtFrame(tpAniSirGlobal pMac, } else if ( DOT11F_WARNED( nStatus ) ) { - limLog( pMac, LOGW, FL("There were warnings while calculating" + limLog( pMac, LOGW, FL("There were warnings while calculating " "the packed size for a Re-Association Re " "quest(0x%08x)."), nStatus ); } @@ -2620,7 +2651,7 @@ limSendReassocReqWithFTIEsMgmtFrame(tpAniSirGlobal pMac, } // Paranoia: - palZeroMemory( pMac->hHdd, pFrame, nBytes + ft_ies_length); + vos_mem_set( pFrame, nBytes + ft_ies_length, 0); #if defined WLAN_FEATURE_VOWIFI_11R_DEBUG || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR) limPrintMacAddr(pMac, psessionEntry->limReAssocbssId, LOG1); @@ -2654,7 +2685,7 @@ limSendReassocReqWithFTIEsMgmtFrame(tpAniSirGlobal pMac, else if ( DOT11F_WARNED( nStatus ) ) { limLog( pMac, LOGW, FL("There were warnings while packing a R" - "e-Association Request (0x%08x).") ); + "e-Association Request (0x%08x)."), nStatus ); } PELOG3(limLog( pMac, LOG3, @@ -2662,27 +2693,27 @@ limSendReassocReqWithFTIEsMgmtFrame(tpAniSirGlobal pMac, nBytes, nPayload );) if( psessionEntry->assocReq != NULL ) { - palFreeMemory(pMac->hHdd, psessionEntry->assocReq); + vos_mem_free(psessionEntry->assocReq); psessionEntry->assocReq = NULL; } if( nAddIELen ) { - palCopyMemory( pMac->hHdd, pFrame + sizeof(tSirMacMgmtHdr) + nPayload, - pAddIE, - nAddIELen ); + vos_mem_copy( pFrame + sizeof(tSirMacMgmtHdr) + nPayload, + pAddIE, + nAddIELen ); nPayload += nAddIELen; } - if( (palAllocateMemory(pMac->hHdd, (void**)&psessionEntry->assocReq, - nPayload)) != eHAL_STATUS_SUCCESS) + psessionEntry->assocReq = vos_mem_malloc(nPayload); + if ( NULL == psessionEntry->assocReq ) { PELOGE(limLog(pMac, LOGE, FL("Unable to allocate memory to store assoc request"));) } else { //Store the Assoc request. This is sent to csr/hdd in join cnf response. - palCopyMemory(pMac->hHdd, psessionEntry->assocReq, pFrame + sizeof(tSirMacMgmtHdr), nPayload); + vos_mem_copy( psessionEntry->assocReq, pFrame + sizeof(tSirMacMgmtHdr), nPayload); psessionEntry->assocReqLen = nPayload; } @@ -2718,12 +2749,12 @@ limSendReassocReqWithFTIEsMgmtFrame(tpAniSirGlobal pMac, if( NULL != psessionEntry->assocReq ) { - palFreeMemory(pMac->hHdd, psessionEntry->assocReq); + vos_mem_free(psessionEntry->assocReq); psessionEntry->assocReq = NULL; } - if( (palAllocateMemory(pMac->hHdd, (void**)&psessionEntry->assocReq, - (ft_ies_length))) != eHAL_STATUS_SUCCESS ) + psessionEntry->assocReq = vos_mem_malloc(ft_ies_length); + if ( NULL == psessionEntry->assocReq ) { PELOGE(limLog(pMac, LOGE, FL("Unable to allocate memory to store assoc request"));) psessionEntry->assocReqLen = 0; @@ -2731,8 +2762,8 @@ limSendReassocReqWithFTIEsMgmtFrame(tpAniSirGlobal pMac, else { //Store the Assoc request. This is sent to csr/hdd in join cnf response. - palCopyMemory(pMac->hHdd, psessionEntry->assocReq, pMac->ft.ftSmeContext.reassoc_ft_ies, - (ft_ies_length)); + vos_mem_copy( psessionEntry->assocReq, pMac->ft.ftSmeContext.reassoc_ft_ies, + (ft_ies_length)); psessionEntry->assocReqLen = (ft_ies_length); } @@ -2753,7 +2784,7 @@ limSendReassocReqWithFTIEsMgmtFrame(tpAniSirGlobal pMac, end: // Free up buffer allocated for mlmAssocReq - palFreeMemory( pMac->hHdd, ( tANI_U8* ) pMlmReassocReq ); + vos_mem_free( pMlmReassocReq ); psessionEntry->pLimMlmReassocReq = NULL; } @@ -2766,9 +2797,10 @@ void limSendRetryReassocReqFrame(tpAniSirGlobal pMac, tLimMlmReassocReq *pTmpMlmReassocReq = NULL; if(NULL == pTmpMlmReassocReq) { - if ( !HAL_STATUS_SUCCESS(palAllocateMemory(pMac->hHdd, (void **)&pTmpMlmReassocReq, sizeof(tLimMlmReassocReq))) ) goto end; - palZeroMemory(pMac->hHdd, pTmpMlmReassocReq, sizeof(tLimMlmReassocReq)); - palCopyMemory( pMac->hHdd, pTmpMlmReassocReq, pMlmReassocReq, sizeof(tLimMlmReassocReq)); + pTmpMlmReassocReq = vos_mem_malloc(sizeof(tLimMlmReassocReq)); + if ( NULL == pTmpMlmReassocReq ) goto end; + vos_mem_set( pTmpMlmReassocReq, sizeof(tLimMlmReassocReq), 0); + vos_mem_copy( pTmpMlmReassocReq, pMlmReassocReq, sizeof(tLimMlmReassocReq)); } // Prepare and send Reassociation request frame @@ -2797,12 +2829,12 @@ end: // Free up buffer allocated for reassocReq if (pMlmReassocReq != NULL) { - palFreeMemory( pMac->hHdd, (tANI_U8 *) pMlmReassocReq); + vos_mem_free(pMlmReassocReq); pMlmReassocReq = NULL; } if (pTmpMlmReassocReq != NULL) { - palFreeMemory( pMac->hHdd, (tANI_U8 *) pTmpMlmReassocReq); + vos_mem_free(pTmpMlmReassocReq); pTmpMlmReassocReq = NULL; } mlmReassocCnf.resultCode = eSIR_SME_FT_REASSOC_FAILURE; @@ -2852,7 +2884,7 @@ limSendReassocReqMgmtFrame(tpAniSirGlobal pMac, nAddIELen = psessionEntry->pLimReAssocReq->addIEAssoc.length; pAddIE = psessionEntry->pLimReAssocReq->addIEAssoc.addIEdata; - palZeroMemory( pMac->hHdd, ( tANI_U8* )&frm, sizeof( frm ) ); + vos_mem_set( ( tANI_U8* )&frm, sizeof( frm ), 0 ); caps = pMlmReassocReq->capabilityInfo; if (PROP_CAPABILITY_GET(11EQOS, psessionEntry->limReassocBssPropCap)) @@ -2871,8 +2903,8 @@ limSendReassocReqMgmtFrame(tpAniSirGlobal pMac, frm.ListenInterval.interval = pMlmReassocReq->listenInterval; - palCopyMemory( pMac->hHdd, ( tANI_U8* )frm.CurrentAPAddress.mac, - ( tANI_U8* )psessionEntry->bssId, 6 ); + vos_mem_copy(( tANI_U8* )frm.CurrentAPAddress.mac, + ( tANI_U8* )psessionEntry->bssId, 6 ); PopulateDot11fSSID2( pMac, &frm.SSID ); PopulateDot11fSuppRates( pMac, POPULATE_DOT11F_RATES_OPERATIONAL, @@ -3007,7 +3039,7 @@ limSendReassocReqMgmtFrame(tpAniSirGlobal pMac, } else if ( DOT11F_WARNED( nStatus ) ) { - limLog( pMac, LOGW, FL("There were warnings while calculating" + limLog( pMac, LOGW, FL("There were warnings while calculating " "the packed size for a Re-Association Re " "quest(0x%08x)."), nStatus ); } @@ -3027,7 +3059,7 @@ limSendReassocReqMgmtFrame(tpAniSirGlobal pMac, } // Paranoia: - palZeroMemory( pMac->hHdd, pFrame, nBytes ); + vos_mem_set( pFrame, nBytes, 0 ); // Next, we fill out the buffer descriptor: nSirStatus = limPopulateMacHeader( pMac, pFrame, SIR_MAC_MGMT_FRAME, @@ -3058,7 +3090,7 @@ limSendReassocReqMgmtFrame(tpAniSirGlobal pMac, else if ( DOT11F_WARNED( nStatus ) ) { limLog( pMac, LOGW, FL("There were warnings while packing a R" - "e-Association Request (0x%08x).") ); + "e-Association Request (0x%08x)."), nStatus ); } PELOG1(limLog( pMac, LOG1, FL("*** Sending Re-Association Request length %d" @@ -3067,27 +3099,27 @@ limSendReassocReqMgmtFrame(tpAniSirGlobal pMac, if( psessionEntry->assocReq != NULL ) { - palFreeMemory(pMac->hHdd, psessionEntry->assocReq); + vos_mem_free(psessionEntry->assocReq); psessionEntry->assocReq = NULL; } if( nAddIELen ) { - palCopyMemory( pMac->hHdd, pFrame + sizeof(tSirMacMgmtHdr) + nPayload, - pAddIE, - nAddIELen ); + vos_mem_copy( pFrame + sizeof(tSirMacMgmtHdr) + nPayload, + pAddIE, + nAddIELen ); nPayload += nAddIELen; } - if( (palAllocateMemory(pMac->hHdd, (void**)&psessionEntry->assocReq, - nPayload)) != eHAL_STATUS_SUCCESS) + psessionEntry->assocReq = vos_mem_malloc(nPayload); + if ( NULL == psessionEntry->assocReq ) { PELOGE(limLog(pMac, LOGE, FL("Unable to allocate memory to store assoc request"));) } else { //Store the Assoc request. This is sent to csr/hdd in join cnf response. - palCopyMemory(pMac->hHdd, psessionEntry->assocReq, pFrame + sizeof(tSirMacMgmtHdr), nPayload); + vos_mem_copy(psessionEntry->assocReq, pFrame + sizeof(tSirMacMgmtHdr), nPayload); psessionEntry->assocReqLen = nPayload; } @@ -3120,7 +3152,7 @@ limSendReassocReqMgmtFrame(tpAniSirGlobal pMac, end: // Free up buffer allocated for mlmAssocReq - palFreeMemory( pMac->hHdd, ( tANI_U8* ) pMlmReassocReq ); + vos_mem_free( pMlmReassocReq ); psessionEntry->pLimMlmReassocReq = NULL; } // limSendReassocReqMgmtFrame @@ -3314,9 +3346,9 @@ limSendAuthMgmtFrame(tpAniSirGlobal pMac, // Prepare BSSId if( (psessionEntry->limSystemRole == eLIM_AP_ROLE)|| (psessionEntry->limSystemRole == eLIM_BT_AMP_AP_ROLE) ) { - palCopyMemory( pMac->hHdd,(tANI_U8 *) pMacHdr->bssId, - (tANI_U8 *) psessionEntry->bssId, - sizeof( tSirMacAddr )); + vos_mem_copy( (tANI_U8 *) pMacHdr->bssId, + (tANI_U8 *) psessionEntry->bssId, + sizeof( tSirMacAddr )); } /// Prepare Authentication frame body @@ -3324,7 +3356,7 @@ limSendAuthMgmtFrame(tpAniSirGlobal pMac, if (wepBit == LIM_WEP_IN_FC) { - palCopyMemory( pMac->hHdd, pBody, (tANI_U8 *) pAuthFrameBody, bodyLen); + vos_mem_copy(pBody, (tANI_U8 *) pAuthFrameBody, bodyLen); PELOG1(limLog(pMac, LOG1, FL("*** Sending Auth seq# 3 status %d (%d) to"), @@ -3346,8 +3378,10 @@ limSendAuthMgmtFrame(tpAniSirGlobal pMac, *((tANI_U16 *)(pBody)) = sirSwapU16ifNeeded(pAuthFrameBody->authStatusCode); pBody += sizeof(tANI_U16); bodyLen -= sizeof(tANI_U16); - if ( bodyLen < sizeof (pAuthFrameBody->type) + sizeof (pAuthFrameBody->length) + sizeof (pAuthFrameBody->challengeText)) - palCopyMemory( pMac->hHdd, pBody, (tANI_U8 *) &pAuthFrameBody->type, bodyLen); + if ( bodyLen <= (sizeof (pAuthFrameBody->type) + + sizeof (pAuthFrameBody->length) + + sizeof (pAuthFrameBody->challengeText))) + vos_mem_copy(pBody, (tANI_U8 *) &pAuthFrameBody->type, bodyLen); #if defined WLAN_FEATURE_VOWIFI_11R if ((pAuthFrameBody->authAlgoNumber == eSIR_FT_AUTH) && @@ -3401,7 +3435,7 @@ limSendAuthMgmtFrame(tpAniSirGlobal pMac, || ( psessionEntry->pePersona == VOS_P2P_CLIENT_MODE ) || ( psessionEntry->pePersona == VOS_P2P_GO_MODE) #if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR) - || ((NULL != pMac->ft.ftPEContext.pFTPreAuthReq) + || ((NULL != pMac->ft.ftPEContext.pFTPreAuthReq) && ( SIR_BAND_5_GHZ == limGetRFBand(pMac->ft.ftPEContext.pFTPreAuthReq->preAuthchannelNum))) #endif ) @@ -3468,12 +3502,12 @@ eHalStatus limSendDeauthCnf(tpAniSirGlobal pMac) /// Receive path cleanup with dummy packet limCleanupRxPath(pMac, pStaDs,psessionEntry); /// Free up buffer allocated for mlmDeauthReq - palFreeMemory( pMac->hHdd, (tANI_U8 *) pMlmDeauthReq); + vos_mem_free(pMlmDeauthReq); pMac->lim.limDisassocDeauthCnfReq.pMlmDeauthReq = NULL; } return eHAL_STATUS_SUCCESS; end: - palCopyMemory( pMac->hHdd, (tANI_U8 *) &mlmDeauthCnf.peerMacAddr, + vos_mem_copy( (tANI_U8 *) &mlmDeauthCnf.peerMacAddr, (tANI_U8 *) pMlmDeauthReq->peerMacAddr, sizeof(tSirMacAddr)); mlmDeauthCnf.deauthTrigger = pMlmDeauthReq->deauthTrigger; @@ -3482,7 +3516,7 @@ end: // Free up buffer allocated // for mlmDeauthReq - palFreeMemory( pMac->hHdd, (tANI_U8 *) pMlmDeauthReq); + vos_mem_free(pMlmDeauthReq); limPostSmeMessage(pMac, LIM_MLM_DEAUTH_CNF, @@ -3531,18 +3565,18 @@ eHalStatus limSendDisassocCnf(tpAniSirGlobal pMac) #ifdef WLAN_FEATURE_VOWIFI_11R if ( (psessionEntry->limSystemRole == eLIM_STA_ROLE ) && - ( + ( #ifdef FEATURE_WLAN_CCX - (psessionEntry->isCCXconnection ) || + (psessionEntry->isCCXconnection ) || #endif #ifdef FEATURE_WLAN_LFR (psessionEntry->isFastRoamIniFeatureEnabled ) || #endif (psessionEntry->is11Rconnection )) && - (pMlmDisassocReq->reasonCode != + (pMlmDisassocReq->reasonCode != eSIR_MAC_DISASSOC_DUE_TO_FTHANDOFF_REASON)) { - PELOGE(limLog(pMac, LOGE, + PELOGE(limLog(pMac, LOGE, FL("FT Preauth Session (%p,%d) Cleanup"), psessionEntry, psessionEntry->peSessionId);); limFTCleanup(pMac); @@ -3571,7 +3605,7 @@ eHalStatus limSendDisassocCnf(tpAniSirGlobal pMac) #endif /// Free up buffer allocated for mlmDisassocReq - palFreeMemory( pMac->hHdd, (tANI_U8 *) pMlmDisassocReq); + vos_mem_free(pMlmDisassocReq); pMac->lim.limDisassocDeauthCnfReq.pMlmDisassocReq = NULL; return eHAL_STATUS_SUCCESS; } @@ -3580,7 +3614,7 @@ eHalStatus limSendDisassocCnf(tpAniSirGlobal pMac) return eHAL_STATUS_SUCCESS; } end: - palCopyMemory( pMac->hHdd, (tANI_U8 *) &mlmDisassocCnf.peerMacAddr, + vos_mem_copy( (tANI_U8 *) &mlmDisassocCnf.peerMacAddr, (tANI_U8 *) pMlmDisassocReq->peerMacAddr, sizeof(tSirMacAddr)); mlmDisassocCnf.aid = pMlmDisassocReq->aid; @@ -3592,7 +3626,7 @@ end: if(pMlmDisassocReq != NULL) { /// Free up buffer allocated for mlmDisassocReq - palFreeMemory( pMac->hHdd, (tANI_U8 *) pMlmDisassocReq); + vos_mem_free(pMlmDisassocReq); pMac->lim.limDisassocDeauthCnfReq.pMlmDisassocReq = NULL; } @@ -3650,7 +3684,8 @@ limSendDisassocMgmtFrame(tpAniSirGlobal pMac, } smeSessionId = psessionEntry->smeSessionId; - palZeroMemory( pMac->hHdd, ( tANI_U8* )&frm, sizeof( frm ) ); + + vos_mem_set( ( tANI_U8* )&frm, sizeof( frm ), 0); frm.Reason.code = nReason; @@ -3665,7 +3700,7 @@ limSendDisassocMgmtFrame(tpAniSirGlobal pMac, } else if ( DOT11F_WARNED( nStatus ) ) { - limLog( pMac, LOGW, FL("There were warnings while calculating" + limLog( pMac, LOGW, FL("There were warnings while calculating " "the packed size for a Disassociation " "(0x%08x)."), nStatus ); } @@ -3683,7 +3718,7 @@ limSendDisassocMgmtFrame(tpAniSirGlobal pMac, } // Paranoia: - palZeroMemory( pMac->hHdd, pFrame, nBytes ); + vos_mem_set( pFrame, nBytes, 0 ); // Next, we fill out the buffer descriptor: nSirStatus = limPopulateMacHeader( pMac, pFrame, SIR_MAC_MGMT_FRAME, @@ -3704,10 +3739,7 @@ limSendDisassocMgmtFrame(tpAniSirGlobal pMac, sirCopyMacAddr(pMacHdr->bssId,psessionEntry->bssId); #ifdef WLAN_FEATURE_11W - if ( psessionEntry->limRmfEnabled ) - { - pMacHdr->fc.wep = 1; - } + limSetProtectedBit(pMac, psessionEntry, peer, pMacHdr); #endif nStatus = dot11fPackDisassociation( pMac, &frm, pFrame + @@ -3724,7 +3756,7 @@ limSendDisassocMgmtFrame(tpAniSirGlobal pMac, else if ( DOT11F_WARNED( nStatus ) ) { limLog( pMac, LOGW, FL("There were warnings while packing a D" - "isassociation (0x%08x).") ); + "isassociation (0x%08x)."), nStatus ); } PELOG1(limLog( pMac, LOG1, FL("*** Sending Disassociation frame with rea" @@ -3835,7 +3867,8 @@ limSendDeauthMgmtFrame(tpAniSirGlobal pMac, } smeSessionId = psessionEntry->smeSessionId; - palZeroMemory( pMac->hHdd, ( tANI_U8* ) &frm, sizeof( frm ) ); + + vos_mem_set( ( tANI_U8* ) &frm, sizeof( frm ), 0 ); frm.Reason.code = nReason; @@ -3850,7 +3883,7 @@ limSendDeauthMgmtFrame(tpAniSirGlobal pMac, } else if ( DOT11F_WARNED( nStatus ) ) { - limLog( pMac, LOGW, FL("There were warnings while calculating" + limLog( pMac, LOGW, FL("There were warnings while calculating " "the packed size for a De-Authentication " "(0x%08x)."), nStatus ); } @@ -3868,7 +3901,7 @@ limSendDeauthMgmtFrame(tpAniSirGlobal pMac, } // Paranoia: - palZeroMemory( pMac->hHdd, pFrame, nBytes ); + vos_mem_set( pFrame, nBytes, 0 ); // Next, we fill out the buffer descriptor: nSirStatus = limPopulateMacHeader( pMac, pFrame, SIR_MAC_MGMT_FRAME, @@ -3889,10 +3922,7 @@ limSendDeauthMgmtFrame(tpAniSirGlobal pMac, sirCopyMacAddr(pMacHdr->bssId,psessionEntry->bssId); #ifdef WLAN_FEATURE_11W - if ( psessionEntry->limRmfEnabled ) - { - pMacHdr->fc.wep = 1; - } + limSetProtectedBit(pMac, psessionEntry, peer, pMacHdr); #endif nStatus = dot11fPackDeAuth( pMac, &frm, pFrame + @@ -3909,7 +3939,7 @@ limSendDeauthMgmtFrame(tpAniSirGlobal pMac, else if ( DOT11F_WARNED( nStatus ) ) { limLog( pMac, LOGW, FL("There were warnings while packing a D" - "e-Authentication (0x%08x).") ); + "e-Authentication (0x%08x)."), nStatus ); } PELOG1(limLog( pMac, LOG1, FL("*** Sending De-Authentication frame with rea" @@ -4040,7 +4070,7 @@ limSendMeasReportFrame(tpAniSirGlobal pMac, void *pPacket; eHalStatus halstatus; - palZeroMemory( pMac->hHdd, ( tANI_U8* )&frm, sizeof( frm ) ); + vos_mem_set( ( tANI_U8* )&frm, sizeof( frm ), 0 ); frm.Category.category = SIR_MAC_ACTION_SPECTRUM_MGMT; frm.Action.action = SIR_MAC_ACTION_MEASURE_REPORT_ID; @@ -4083,7 +4113,7 @@ limSendMeasReportFrame(tpAniSirGlobal pMac, } else if ( DOT11F_WARNED( nStatus ) ) { - limLog( pMac, LOGW, FL("There were warnings while calculating" + limLog( pMac, LOGW, FL("There were warnings while calculating " "the packed size for a Measurement Rep" "ort (0x%08x)."), nStatus ); } @@ -4099,7 +4129,7 @@ limSendMeasReportFrame(tpAniSirGlobal pMac, } // Paranoia: - palZeroMemory( pMac->hHdd, pFrame, nBytes ); + vos_mem_set( pFrame, nBytes, 0 ); // Next, we fill out the buffer descriptor: nSirStatus = limPopulateMacHeader( pMac, pFrame, SIR_MAC_MGMT_FRAME, @@ -4127,10 +4157,7 @@ limSendMeasReportFrame(tpAniSirGlobal pMac, } #ifdef WLAN_FEATURE_11W - if ( psessionEntry->limRmfEnabled ) - { - pMacHdr->fc.wep = 1; - } + limSetProtectedBit(pMac, psessionEntry, peer, pMacHdr); #endif nStatus = dot11fPackMeasurementReport( pMac, &frm, pFrame + @@ -4146,7 +4173,7 @@ limSendMeasReportFrame(tpAniSirGlobal pMac, else if ( DOT11F_WARNED( nStatus ) ) { limLog( pMac, LOGW, FL("There were warnings while packing a M" - "easurement Report (0x%08x).") ); + "easurement Report (0x%08x)."), nStatus ); } halstatus = halTxFrame( pMac, pPacket, ( tANI_U16 ) nBytes, @@ -4191,7 +4218,7 @@ limSendTpcRequestFrame(tpAniSirGlobal pMac, void *pPacket; eHalStatus halstatus; - palZeroMemory( pMac->hHdd, ( tANI_U8* )&frm, sizeof( frm ) ); + vos_mem_set( ( tANI_U8* )&frm, sizeof( frm ), 0 ); frm.Category.category = SIR_MAC_ACTION_SPECTRUM_MGMT; frm.Action.action = SIR_MAC_ACTION_TPC_REQUEST_ID; @@ -4209,7 +4236,7 @@ limSendTpcRequestFrame(tpAniSirGlobal pMac, } else if ( DOT11F_WARNED( nStatus ) ) { - limLog( pMac, LOGW, FL("There were warnings while calculating" + limLog( pMac, LOGW, FL("There were warnings while calculating " "the packed size for a TPC Request (0x" "%08x)."), nStatus ); } @@ -4225,7 +4252,7 @@ limSendTpcRequestFrame(tpAniSirGlobal pMac, } // Paranoia: - palZeroMemory( pMac->hHdd, pFrame, nBytes ); + vos_mem_set(pFrame, nBytes,0); // Next, we fill out the buffer descriptor: nSirStatus = limPopulateMacHeader( pMac, pFrame, SIR_MAC_MGMT_FRAME, @@ -4253,10 +4280,7 @@ limSendTpcRequestFrame(tpAniSirGlobal pMac, } #ifdef WLAN_FEATURE_11W - if ( psessionEntry->limRmfEnabled ) - { - pMacHdr->fc.wep = 1; - } + limSetProtectedBit(pMac, psessionEntry, peer, pMacHdr); #endif nStatus = dot11fPackTPCRequest( pMac, &frm, pFrame + @@ -4272,7 +4296,7 @@ limSendTpcRequestFrame(tpAniSirGlobal pMac, else if ( DOT11F_WARNED( nStatus ) ) { limLog( pMac, LOGW, FL("There were warnings while packing a T" - "PC Request (0x%08x).") ); + "PC Request (0x%08x)."), nStatus ); } halstatus = halTxFrame( pMac, pPacket, ( tANI_U16 ) nBytes, @@ -4318,7 +4342,7 @@ limSendTpcReportFrame(tpAniSirGlobal pMac, void *pPacket; eHalStatus halstatus; - palZeroMemory( pMac->hHdd, ( tANI_U8* )&frm, sizeof( frm ) ); + vos_mem_set( ( tANI_U8* )&frm, sizeof( frm ), 0 ); frm.Category.category = SIR_MAC_ACTION_SPECTRUM_MGMT; frm.Action.action = SIR_MAC_ACTION_TPC_REPORT_ID; @@ -4343,7 +4367,7 @@ limSendTpcReportFrame(tpAniSirGlobal pMac, } else if ( DOT11F_WARNED( nStatus ) ) { - limLog( pMac, LOGW, FL("There were warnings while calculating" + limLog( pMac, LOGW, FL("There were warnings while calculating " "the packed size for a TPC Report (0x" "%08x)."), nStatus ); } @@ -4359,7 +4383,7 @@ limSendTpcReportFrame(tpAniSirGlobal pMac, } // Paranoia: - palZeroMemory( pMac->hHdd, pFrame, nBytes ); + vos_mem_set( pFrame, nBytes, 0 ); // Next, we fill out the buffer descriptor: nSirStatus = limPopulateMacHeader( pMac, pFrame, SIR_MAC_MGMT_FRAME, @@ -4387,10 +4411,7 @@ limSendTpcReportFrame(tpAniSirGlobal pMac, } #ifdef WLAN_FEATURE_11W - if ( psessionEntry->limRmfEnabled ) - { - pMacHdr->fc.wep = 1; - } + limSetProtectedBit(pMac, psessionEntry, peer, pMacHdr); #endif nStatus = dot11fPackTPCReport( pMac, &frm, pFrame + @@ -4406,7 +4427,7 @@ limSendTpcReportFrame(tpAniSirGlobal pMac, else if ( DOT11F_WARNED( nStatus ) ) { limLog( pMac, LOGW, FL("There were warnings while packing a T" - "PC Report (0x%08x).") ); + "PC Report (0x%08x)."), nStatus ); } @@ -4465,12 +4486,13 @@ limSendChannelSwitchMgmtFrame(tpAniSirGlobal pMac, void *pPacket; eHalStatus halstatus; tANI_U8 txFlag = 0; + tANI_U8 smeSessionId = 0; - if(psessionEntry) + if (psessionEntry != NULL ) smeSessionId = psessionEntry->smeSessionId; - palZeroMemory( pMac->hHdd, ( tANI_U8* )&frm, sizeof( frm ) ); + vos_mem_set( ( tANI_U8* )&frm, sizeof( frm ), 0 ); frm.Category.category = SIR_MAC_ACTION_SPECTRUM_MGMT; frm.Action.action = SIR_MAC_ACTION_CHANNEL_SWITCH_ID; @@ -4490,7 +4512,7 @@ limSendChannelSwitchMgmtFrame(tpAniSirGlobal pMac, } else if ( DOT11F_WARNED( nStatus ) ) { - limLog( pMac, LOGW, FL("There were warnings while calculating" + limLog( pMac, LOGW, FL("There were warnings while calculating " "the packed size for a Channel Switch (0x" "%08x)."), nStatus ); } @@ -4506,16 +4528,15 @@ limSendChannelSwitchMgmtFrame(tpAniSirGlobal pMac, } // Paranoia: - palZeroMemory( pMac->hHdd, pFrame, nBytes ); + vos_mem_set( pFrame, nBytes, 0 ); // Next, we fill out the buffer descriptor: nSirStatus = limPopulateMacHeader( pMac, pFrame, SIR_MAC_MGMT_FRAME, SIR_MAC_MGMT_ACTION, peer, psessionEntry->selfMacAddr); pMacHdr = ( tpSirMacMgmtHdr ) pFrame; - palCopyMemory( pMac->hHdd, - (tANI_U8 *) pMacHdr->bssId, - (tANI_U8 *) psessionEntry->bssId, - sizeof( tSirMacAddr )); + vos_mem_copy( (tANI_U8 *) pMacHdr->bssId, + (tANI_U8 *) psessionEntry->bssId, + sizeof( tSirMacAddr )); if ( eSIR_SUCCESS != nSirStatus ) { limLog( pMac, LOGE, FL("Failed to populate the buffer descrip" @@ -4541,10 +4562,7 @@ limSendChannelSwitchMgmtFrame(tpAniSirGlobal pMac, #endif #ifdef WLAN_FEATURE_11W - if ( psessionEntry->limRmfEnabled ) - { - pMacHdr->fc.wep = 1; - } + limSetProtectedBit(pMac, psessionEntry, peer, pMacHdr); #endif nStatus = dot11fPackChannelSwitch( pMac, &frm, pFrame + @@ -4560,7 +4578,7 @@ limSendChannelSwitchMgmtFrame(tpAniSirGlobal pMac, else if ( DOT11F_WARNED( nStatus ) ) { limLog( pMac, LOGW, FL("There were warnings while packing a C" - "hannel Switch (0x%08x).") ); + "hannel Switch (0x%08x)."), nStatus ); } if( ( SIR_BAND_5_GHZ == limGetRFBand(psessionEntry->currentOperChannel)) @@ -4605,12 +4623,13 @@ limSendVHTOpmodeNotificationFrame(tpAniSirGlobal pMac, void *pPacket; eHalStatus halstatus; tANI_U8 txFlag = 0; + tANI_U8 smeSessionId = 0; - if(psessionEntry) + if (psessionEntry != NULL ) smeSessionId = psessionEntry->smeSessionId; - palZeroMemory( pMac->hHdd, ( tANI_U8* )&frm, sizeof( frm ) ); + vos_mem_set( ( tANI_U8* )&frm, sizeof( frm ), 0 ); frm.Category.category = SIR_MAC_ACTION_VHT; frm.Action.action = SIR_MAC_VHT_OPMODE_NOTIFICATION; @@ -4629,7 +4648,7 @@ limSendVHTOpmodeNotificationFrame(tpAniSirGlobal pMac, } else if ( DOT11F_WARNED( nStatus ) ) { - limLog( pMac, LOGW, FL("There were warnings while calculating" + limLog( pMac, LOGW, FL("There were warnings while calculating " "the packed size for a Operating Mode (0x" "%08x)."), nStatus ); } @@ -4645,7 +4664,7 @@ limSendVHTOpmodeNotificationFrame(tpAniSirGlobal pMac, } // Paranoia: - palZeroMemory( pMac->hHdd, pFrame, nBytes ); + vos_mem_set( pFrame, nBytes, 0 ); // Next, we fill out the buffer descriptor: @@ -4656,10 +4675,9 @@ limSendVHTOpmodeNotificationFrame(tpAniSirGlobal pMac, nSirStatus = limPopulateMacHeader( pMac, pFrame, SIR_MAC_MGMT_FRAME, SIR_MAC_MGMT_ACTION, psessionEntry->bssId, psessionEntry->selfMacAddr); pMacHdr = ( tpSirMacMgmtHdr ) pFrame; - palCopyMemory( pMac->hHdd, - (tANI_U8 *) pMacHdr->bssId, - (tANI_U8 *) psessionEntry->bssId, - sizeof( tSirMacAddr )); + vos_mem_copy( (tANI_U8 *) pMacHdr->bssId, + (tANI_U8 *) psessionEntry->bssId, + sizeof( tSirMacAddr )); if ( eSIR_SUCCESS != nSirStatus ) { limLog( pMac, LOGE, FL("Failed to populate the buffer descrip" @@ -4681,7 +4699,7 @@ limSendVHTOpmodeNotificationFrame(tpAniSirGlobal pMac, else if ( DOT11F_WARNED( nStatus ) ) { limLog( pMac, LOGW, FL("There were warnings while packing a Operating Mode" - " (0x%08x).") ); + " (0x%08x)."), nStatus ); } if( ( SIR_BAND_5_GHZ == limGetRFBand(psessionEntry->currentOperChannel)) || ( psessionEntry->pePersona == VOS_P2P_CLIENT_MODE ) || @@ -4741,12 +4759,13 @@ limSendVHTChannelSwitchMgmtFrame(tpAniSirGlobal pMac, void *pPacket; eHalStatus halstatus; tANI_U8 txFlag = 0; - tANI_U8 smeSessionId = 0; + + tANI_U8 smeSessionId = 0; - if(psessionEntry) - smeSessionId = psessionEntry->smeSessionId; + if (psessionEntry != NULL ) + smeSessionId = psessionEntry->smeSessionId; - palZeroMemory( pMac->hHdd, ( tANI_U8* )&frm, sizeof( frm ) ); + vos_mem_set( ( tANI_U8* )&frm, sizeof( frm ), 0 ); frm.Category.category = SIR_MAC_ACTION_SPECTRUM_MGMT; @@ -4773,7 +4792,7 @@ limSendVHTChannelSwitchMgmtFrame(tpAniSirGlobal pMac, } else if ( DOT11F_WARNED( nStatus ) ) { - limLog( pMac, LOGW, FL("There were warnings while calculating" + limLog( pMac, LOGW, FL("There were warnings while calculating " "the packed size for a Channel Switch (0x" "%08x)."), nStatus ); } @@ -4788,16 +4807,15 @@ limSendVHTChannelSwitchMgmtFrame(tpAniSirGlobal pMac, return eSIR_FAILURE; } // Paranoia: - palZeroMemory( pMac->hHdd, pFrame, nBytes ); + vos_mem_set( pFrame, nBytes, 0 ); // Next, we fill out the buffer descriptor: nSirStatus = limPopulateMacHeader( pMac, pFrame, SIR_MAC_MGMT_FRAME, SIR_MAC_MGMT_ACTION, peer, psessionEntry->selfMacAddr); pMacHdr = ( tpSirMacMgmtHdr ) pFrame; - palCopyMemory( pMac->hHdd, - (tANI_U8 *) pMacHdr->bssId, - (tANI_U8 *) psessionEntry->bssId, - sizeof( tSirMacAddr )); + vos_mem_copy( (tANI_U8 *) pMacHdr->bssId, + (tANI_U8 *) psessionEntry->bssId, + sizeof( tSirMacAddr )); if ( eSIR_SUCCESS != nSirStatus ) { limLog( pMac, LOGE, FL("Failed to populate the buffer descrip" @@ -4819,7 +4837,7 @@ limSendVHTChannelSwitchMgmtFrame(tpAniSirGlobal pMac, else if ( DOT11F_WARNED( nStatus ) ) { limLog( pMac, LOGW, FL("There were warnings while packing a C" - "hannel Switch (0x%08x).") ); + "hannel Switch (0x%08x)."), nStatus ); } if( ( SIR_BAND_5_GHZ == limGetRFBand(psessionEntry->currentOperChannel)) @@ -4866,7 +4884,7 @@ limSendVHTChannelSwitchMgmtFrame(tpAniSirGlobal pMac, * eSIR_FAILURE is some problem is encountered */ tSirRetStatus limSendAddBAReq( tpAniSirGlobal pMac, - tpLimMlmAddBAReq pMlmAddBAReq ,tpPESession psessionEntry) + tpLimMlmAddBAReq pMlmAddBAReq, tpPESession psessionEntry) { tDot11fAddBAReq frmAddBAReq; tANI_U8 *pAddBAReqBuffer = NULL; @@ -4885,7 +4903,7 @@ tSirRetStatus limSendAddBAReq( tpAniSirGlobal pMac, smeSessionId = psessionEntry->smeSessionId; - palZeroMemory( pMac->hHdd, (void *) &frmAddBAReq, sizeof( frmAddBAReq )); + vos_mem_set( (void *) &frmAddBAReq, sizeof( frmAddBAReq ), 0); // Category - 3 (BA) frmAddBAReq.Category.category = SIR_MAC_ACTION_BLKACK; @@ -4929,7 +4947,7 @@ tSirRetStatus limSendAddBAReq( tpAniSirGlobal pMac, else if( DOT11F_WARNED( nStatus )) { limLog( pMac, LOGW, - FL( "There were warnings while calculating" + FL( "There were warnings while calculating " "the packed size for an ADDBA Req (0x%08x)."), nStatus ); } @@ -4955,7 +4973,7 @@ tSirRetStatus limSendAddBAReq( tpAniSirGlobal pMac, goto returnAfterError; } - palZeroMemory( pMac->hHdd, (void *) pAddBAReqBuffer, frameLen ); + vos_mem_set( (void *) pAddBAReqBuffer, frameLen, 0 ); // Copy necessary info to BD if( eSIR_SUCCESS != @@ -4988,10 +5006,7 @@ tSirRetStatus limSendAddBAReq( tpAniSirGlobal pMac, sirCopyMacAddr(pMacHdr->bssId,psessionEntry->bssId); #ifdef WLAN_FEATURE_11W - if ( psessionEntry->limRmfEnabled ) - { - pMacHdr->fc.wep = 1; - } + limSetProtectedBit(pMac, psessionEntry, pMlmAddBAReq->peerMacAddr, pMacHdr); #endif // Now, we're ready to "pack" the frames @@ -5014,7 +5029,8 @@ tSirRetStatus limSendAddBAReq( tpAniSirGlobal pMac, else if( DOT11F_WARNED( nStatus )) { limLog( pMac, LOGW, - FL( "There were warnings while packing an ADDBA Req (0x%08x)." )); + FL( "There were warnings while packing an ADDBA Req (0x%08x)."), + nStatus ); } limLog( pMac, LOGW, @@ -5097,9 +5113,7 @@ tSirRetStatus limSendAddBARsp( tpAniSirGlobal pMac, return eSIR_FAILURE; } - smeSessionId = psessionEntry->smeSessionId; - - palZeroMemory( pMac->hHdd, (void *) &frmAddBARsp, sizeof( frmAddBARsp )); + vos_mem_set( (void *) &frmAddBARsp, sizeof( frmAddBARsp ), 0); // Category - 3 (BA) frmAddBARsp.Category.category = SIR_MAC_ACTION_BLKACK; @@ -5116,7 +5130,16 @@ tSirRetStatus limSendAddBARsp( tpAniSirGlobal pMac, frmAddBARsp.AddBAParameterSet.tid = pMlmAddBARsp->baTID; frmAddBARsp.AddBAParameterSet.policy = pMlmAddBARsp->baPolicy; frmAddBARsp.AddBAParameterSet.bufferSize = pMlmAddBARsp->baBufferSize; - frmAddBARsp.AddBAParameterSet.amsduSupported = psessionEntry->amsduSupportedInBA; + + if(psessionEntry->isAmsduSupportInAMPDU) + { + frmAddBARsp.AddBAParameterSet.amsduSupported = + psessionEntry->amsduSupportedInBA; + } + else + { + frmAddBARsp.AddBAParameterSet.amsduSupported = 0; + } // BA timeout // 0 - indicates no BA timeout @@ -5137,7 +5160,7 @@ tSirRetStatus limSendAddBARsp( tpAniSirGlobal pMac, else if( DOT11F_WARNED( nStatus )) { limLog( pMac, LOGW, - FL( "There were warnings while calculating" + FL( "There were warnings while calculating " "the packed size for an ADDBA Rsp (0x%08x)."), nStatus ); } @@ -5163,7 +5186,7 @@ tSirRetStatus limSendAddBARsp( tpAniSirGlobal pMac, goto returnAfterError; } - palZeroMemory( pMac->hHdd, (void *) pAddBARspBuffer, frameLen ); + vos_mem_set( (void *) pAddBARspBuffer, frameLen, 0 ); // Copy necessary info to BD if( eSIR_SUCCESS != @@ -5197,10 +5220,7 @@ tSirRetStatus limSendAddBARsp( tpAniSirGlobal pMac, sirCopyMacAddr(pMacHdr->bssId,psessionEntry->bssId); #ifdef WLAN_FEATURE_11W - if ( psessionEntry->limRmfEnabled ) - { - pMacHdr->fc.wep = 1; - } + limSetProtectedBit(pMac, psessionEntry, pMlmAddBARsp->peerMacAddr, pMacHdr); #endif // Now, we're ready to "pack" the frames @@ -5223,7 +5243,8 @@ tSirRetStatus limSendAddBARsp( tpAniSirGlobal pMac, else if( DOT11F_WARNED( nStatus )) { limLog( pMac, LOGW, - FL( "There were warnings while packing an ADDBA Rsp (0x%08x)." )); + FL( "There were warnings while packing an ADDBA Rsp (0x%08x)." ), + nStatus); } limLog( pMac, LOGW, @@ -5303,7 +5324,7 @@ tSirRetStatus limSendDelBAInd( tpAniSirGlobal pMac, eHalStatus halStatus; void *pPacket; tANI_U8 txFlag = 0; - tANI_U8 smeSessionId = 0; + tANI_U8 smeSessionId = 0; if(NULL == psessionEntry) { @@ -5311,8 +5332,7 @@ tSirRetStatus limSendDelBAInd( tpAniSirGlobal pMac, } smeSessionId = psessionEntry->smeSessionId; - - palZeroMemory( pMac->hHdd, (void *) &frmDelBAInd, sizeof( frmDelBAInd )); + vos_mem_set( (void *) &frmDelBAInd, sizeof( frmDelBAInd ), 0); // Category - 3 (BA) frmDelBAInd.Category.category = SIR_MAC_ACTION_BLKACK; @@ -5342,7 +5362,7 @@ tSirRetStatus limSendDelBAInd( tpAniSirGlobal pMac, else if( DOT11F_WARNED( nStatus )) { limLog( pMac, LOGW, - FL( "There were warnings while calculating" + FL( "There were warnings while calculating " "the packed size for an DELBA Ind (0x%08x)."), nStatus ); } @@ -5368,7 +5388,7 @@ tSirRetStatus limSendDelBAInd( tpAniSirGlobal pMac, goto returnAfterError; } - palZeroMemory( pMac->hHdd, (void *) pDelBAIndBuffer, frameLen ); + vos_mem_set( (void *) pDelBAIndBuffer, frameLen, 0 ); // Copy necessary info to BD if( eSIR_SUCCESS != @@ -5401,10 +5421,7 @@ tSirRetStatus limSendDelBAInd( tpAniSirGlobal pMac, sirCopyMacAddr(pMacHdr->bssId,psessionEntry->bssId); #ifdef WLAN_FEATURE_11W - if ( psessionEntry->limRmfEnabled ) - { - pMacHdr->fc.wep = 1; - } + limSetProtectedBit(pMac, psessionEntry, pMlmDelBAReq->peerMacAddr, pMacHdr); #endif // Now, we're ready to "pack" the frames @@ -5427,7 +5444,8 @@ tSirRetStatus limSendDelBAInd( tpAniSirGlobal pMac, else if( DOT11F_WARNED( nStatus )) { limLog( pMac, LOGW, - FL( "There were warnings while packing an DELBA Ind (0x%08x)." )); + FL( "There were warnings while packing an DELBA Ind (0x%08x)." ), + nStatus); } limLog( pMac, LOGW, @@ -5514,7 +5532,7 @@ limSendNeighborReportRequestFrame(tpAniSirGlobal pMac, return eSIR_FAILURE; } smeSessionId = psessionEntry->smeSessionId; - palZeroMemory( pMac->hHdd, ( tANI_U8* )&frm, sizeof( frm ) ); + vos_mem_set( ( tANI_U8* )&frm, sizeof( frm ), 0 ); frm.Category.category = SIR_MAC_ACTION_RRM; frm.Action.action = SIR_MAC_RRM_NEIGHBOR_REQ; @@ -5537,7 +5555,7 @@ limSendNeighborReportRequestFrame(tpAniSirGlobal pMac, } else if ( DOT11F_WARNED( nStatus ) ) { - limLog( pMac, LOGW, FL("There were warnings while calculating" + limLog( pMac, LOGW, FL("There were warnings while calculating " "the packed size for a Neighbor Rep" "ort Request(0x%08x)."), nStatus ); } @@ -5553,7 +5571,7 @@ limSendNeighborReportRequestFrame(tpAniSirGlobal pMac, } // Paranoia: - palZeroMemory( pMac->hHdd, pFrame, nBytes ); + vos_mem_set( pFrame, nBytes, 0 ); // Copy necessary info to BD if( eSIR_SUCCESS != @@ -5570,10 +5588,7 @@ limSendNeighborReportRequestFrame(tpAniSirGlobal pMac, sirCopyMacAddr( pMacHdr->bssId, psessionEntry->bssId ); #ifdef WLAN_FEATURE_11W - if ( psessionEntry->limRmfEnabled ) - { - pMacHdr->fc.wep = 1; - } + limSetProtectedBit(pMac, psessionEntry, peer, pMacHdr); #endif // Now, we're ready to "pack" the frames @@ -5596,7 +5611,8 @@ limSendNeighborReportRequestFrame(tpAniSirGlobal pMac, else if( DOT11F_WARNED( nStatus )) { limLog( pMac, LOGW, - FL( "There were warnings while packing Neighbor Report Request (0x%08x)." )); + FL( "There were warnings while packing Neighbor Report " + "Request (0x%08x)." ), nStatus); } limLog( pMac, LOGW, @@ -5676,9 +5692,7 @@ limSendLinkReportActionFrame(tpAniSirGlobal pMac, return eSIR_FAILURE; } - smeSessionId = psessionEntry->smeSessionId; - - palZeroMemory( pMac->hHdd, ( tANI_U8* )&frm, sizeof( frm ) ); + vos_mem_set( ( tANI_U8* )&frm, sizeof( frm ), 0 ); frm.Category.category = SIR_MAC_ACTION_RRM; frm.Action.action = SIR_MAC_RRM_LINK_MEASUREMENT_RPT; @@ -5711,7 +5725,7 @@ limSendLinkReportActionFrame(tpAniSirGlobal pMac, } else if ( DOT11F_WARNED( nStatus ) ) { - limLog( pMac, LOGW, FL("There were warnings while calculating" + limLog( pMac, LOGW, FL("There were warnings while calculating " "the packed size for a Link Rep" "ort (0x%08x)."), nStatus ); } @@ -5727,7 +5741,7 @@ limSendLinkReportActionFrame(tpAniSirGlobal pMac, } // Paranoia: - palZeroMemory( pMac->hHdd, pFrame, nBytes ); + vos_mem_set( pFrame, nBytes, 0 ); // Copy necessary info to BD if( eSIR_SUCCESS != @@ -5744,10 +5758,7 @@ limSendLinkReportActionFrame(tpAniSirGlobal pMac, sirCopyMacAddr( pMacHdr->bssId, psessionEntry->bssId ); #ifdef WLAN_FEATURE_11W - if ( psessionEntry->limRmfEnabled ) - { - pMacHdr->fc.wep = 1; - } + limSetProtectedBit(pMac, psessionEntry, peer, pMacHdr); #endif // Now, we're ready to "pack" the frames @@ -5770,7 +5781,8 @@ limSendLinkReportActionFrame(tpAniSirGlobal pMac, else if( DOT11F_WARNED( nStatus )) { limLog( pMac, LOGW, - FL( "There were warnings while packing Link Report (0x%08x)." )); + FL( "There were warnings while packing Link Report (0x%08x)." ), + nStatus ); } limLog( pMac, LOGW, @@ -5862,8 +5874,7 @@ limSendRadioMeasureReportActionFrame(tpAniSirGlobal pMac, vos_mem_free(frm); return eSIR_FAILURE; } - smeSessionId = psessionEntry->smeSessionId; - palZeroMemory( pMac->hHdd, ( tANI_U8* )frm, sizeof( *frm ) ); + vos_mem_set( ( tANI_U8* )frm, sizeof( *frm ), 0 ); frm->Category.category = SIR_MAC_ACTION_RRM; frm->Action.action = SIR_MAC_RRM_RADIO_MEASURE_RPT; @@ -5905,7 +5916,7 @@ limSendRadioMeasureReportActionFrame(tpAniSirGlobal pMac, } else if ( DOT11F_WARNED( nStatus ) ) { - limLog( pMac, LOGW, FL("There were warnings while calculating" + limLog( pMac, LOGW, FL("There were warnings while calculating " "the packed size for a Radio Measure Rep" "ort (0x%08x)."), nStatus ); } @@ -5922,7 +5933,7 @@ limSendRadioMeasureReportActionFrame(tpAniSirGlobal pMac, } // Paranoia: - palZeroMemory( pMac->hHdd, pFrame, nBytes ); + vos_mem_set( pFrame, nBytes, 0 ); // Copy necessary info to BD if( eSIR_SUCCESS != @@ -5939,10 +5950,7 @@ limSendRadioMeasureReportActionFrame(tpAniSirGlobal pMac, sirCopyMacAddr( pMacHdr->bssId, psessionEntry->bssId ); #ifdef WLAN_FEATURE_11W - if ( psessionEntry->limRmfEnabled ) - { - pMacHdr->fc.wep = 1; - } + limSetProtectedBit(pMac, psessionEntry, peer, pMacHdr); #endif // Now, we're ready to "pack" the frames @@ -5965,7 +5973,8 @@ limSendRadioMeasureReportActionFrame(tpAniSirGlobal pMac, else if( DOT11F_WARNED( nStatus )) { limLog( pMac, LOGW, - FL( "There were warnings while packing Radio Measure Report (0x%08x)." )); + FL( "There were warnings while packing Radio " + "Measure Report (0x%08x)." ), nStatus); } limLog( pMac, LOGW, @@ -6040,12 +6049,11 @@ tSirMacAddr peer,tpPESession psessionEntry) void *pPacket; eHalStatus halstatus; tANI_U8 txFlag = 0; - tANI_U8 smeSessionId = 0; + tANI_U8 smeSessionId = 0; - if(psessionEntry) - smeSessionId = psessionEntry->smeSessionId; + smeSessionId = psessionEntry->smeSessionId; - palZeroMemory( pMac->hHdd, ( tANI_U8* )&frm, sizeof( frm ) ); + vos_mem_set( ( tANI_U8* )&frm, sizeof( frm ), 0 ); frm.Category.category = SIR_MAC_ACTION_SA_QUERY; /*11w action field is : action: 0 --> SA query request action frame @@ -6066,7 +6074,7 @@ tSirMacAddr peer,tpPESession psessionEntry) } else if ( DOT11F_WARNED( nStatus ) ) { - limLog( pMac, LOGW, FL("There were warnings while calculating" + limLog( pMac, LOGW, FL("There were warnings while calculating " "the packed size for an SA Query Response" " (0x%08x)."), nStatus ); } @@ -6081,7 +6089,7 @@ tSirMacAddr peer,tpPESession psessionEntry) } // Paranoia: - palZeroMemory( pMac->hHdd, pFrame, nBytes ); + vos_mem_set( pFrame, nBytes, 0 ); // Copy necessary info to BD nSirStatus = limPopulateMacHeader( pMac, @@ -6165,3 +6173,139 @@ returnAfterError: return nSirStatus; } // End limSendSaQueryResponseFrame #endif + +#if defined WLAN_FEATURE_RELIABLE_MCAST +tSirRetStatus +limSendRMCActionFrame(tpAniSirGlobal pMac, + tSirMacAddr peerMacAddr, + tSirRMCInfo *pRMC, + tpPESession psessionEntry) +{ + tSirRetStatus nSirStatus; + tANI_U8 *pFrame; + tDot11fRMC RMC; + tANI_U32 nPayload, nBytes, nStatus; + tpSirMacMgmtHdr pMacHdr; + void *pPacket; + eHalStatus halstatus; + tANI_U8 txFlag = 0; + tANI_U8 smeSessionId = 0; + + + if (NULL == psessionEntry) + { + return eSIR_FAILURE; + } + + smeSessionId = psessionEntry->smeSessionId; + + vos_mem_set(( tANI_U8* )&RMC, sizeof( RMC ), 0); + + RMC.Action.action = pRMC->action; + RMC.RMCDialogToken.token = pRMC->dialogToken; + RMC.Category.category = SIR_MAC_ACTION_VENDOR_SPECIFIC_CATEGORY; + RMC.RMCVersion.version = SIR_MAC_RMC_VER; + + vos_mem_copy(&RMC.RMCOUI.oui, SIR_MAC_RMC_OUI, SIR_MAC_RMC_OUI_SIZE); + + vos_mem_copy(&RMC.MagicCode.magic, SIR_MAC_OXYGEN_MAGIC_CODE, + SIR_MAC_OXYGEN_MAGIC_CODE_SIZE); + + vos_mem_copy(&RMC.Leader.mac, pRMC->mcastLeader, sizeof(tSirMacAddr)); + + nStatus = dot11fGetPackedRMCSize( pMac, &RMC, &nPayload ); + if ( DOT11F_FAILED( nStatus ) ) + { + limLog( pMac, LOGE, FL("Failed to calculate the packed size for " + "an RMC (0x%08x)."), + nStatus ); + // We'll fall back on the worst case scenario: + nPayload = sizeof( tDot11fRMC ); + } + else if ( DOT11F_WARNED( nStatus ) ) + { + limLog( pMac, LOGW, FL("There were warnings while calculating " + "the packed size for an RMC Action Frame" + " (0x%08x)."), nStatus ); + } + + nBytes = nPayload + sizeof( tSirMacMgmtHdr ); + + halstatus = palPktAlloc( pMac->hHdd, HAL_TXRX_FRM_802_11_MGMT, + ( tANI_U16 )nBytes, ( void** ) &pFrame, + ( void** ) &pPacket ); + if ( ! HAL_STATUS_SUCCESS ( halstatus ) ) + { + limLog( pMac, LOGP, FL("Failed to allocate %d bytes for an RMC " + "Action Frame."), nBytes ); + return eSIR_FAILURE; + } + + // Paranoia: + vos_mem_set( pFrame, nBytes, 0 ); + + // Next, we fill out the buffer descriptor: + nSirStatus = limPopulateMacHeader( pMac, pFrame, SIR_MAC_MGMT_FRAME, + SIR_MAC_MGMT_ACTION, peerMacAddr, + psessionEntry->selfMacAddr); + if ( eSIR_SUCCESS != nSirStatus ) + { + limLog( pMac, LOGE, FL("Failed to populate the buffer descriptor " + "for an RMC Action Frame (%d)."), + nSirStatus ); + palPktFree( pMac->hHdd, HAL_TXRX_FRM_802_11_MGMT, + ( void* ) pFrame, ( void* ) pPacket ); + return nSirStatus; + } + + // Update A3 with the BSSID + pMacHdr = ( tpSirMacMgmtHdr ) pFrame; + sirCopyMacAddr(pMacHdr->bssId,psessionEntry->bssId); + + // That done, pack the struct: + nStatus = dot11fPackRMC( pMac, &RMC, + pFrame + sizeof(tSirMacMgmtHdr), + nPayload, &nPayload ); + if ( DOT11F_FAILED( nStatus ) ) + { + limLog( pMac, LOGE, FL("Failed to pack an RMC " + "(0x%08x)."), + nStatus ); + palPktFree( pMac->hHdd, HAL_TXRX_FRM_802_11_MGMT, ( void* ) pFrame, + ( void* ) pPacket ); + return eSIR_FAILURE; + } + else if ( DOT11F_WARNED( nStatus ) ) + { + limLog( pMac, LOGW, FL("There were warnings while packing " + "an RMC (0x%08x)."), nStatus ); + } + + PELOG3(limLog( pMac, LOG3, FL("Sending an RMC Action frame to " + MAC_ADDRESS_STR), MAC_ADDR_ARRAY(peerMacAddr) );) + + /* + * With this masking, RMC action frames will be sent + * at self-sta rates for both 2G and 5G bands. + */ + txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK; + + // Queue RMC Action frame in high priority WQ + halstatus = halTxFrame( pMac, pPacket, ( tANI_U16 ) nBytes, + HAL_TXRX_FRM_802_11_MGMT, + ANI_TXDIR_TODS, + 7,//SMAC_SWBD_TX_TID_MGMT_HIGH, + limTxComplete, pFrame, txFlag, smeSessionId ); + if ( ! HAL_STATUS_SUCCESS ( halstatus ) ) + { + limLog( pMac, LOGE, FL( "*** Could not send an RMC Action frame" + " (%X) ***" ), halstatus ); + //Pkt will be freed up by the callback + return eSIR_FAILURE; + } + + return eSIR_SUCCESS; + +} // End limSendRMCActionFrame. + +#endif /* WLAN_FEATURE_RELIABLE_MCAST */ diff --git a/CORE/MAC/src/pe/lim/limSendMessages.c b/CORE/MAC/src/pe/lim/limSendMessages.c index 8aeeba944ac5..e22905b08ef1 100644 --- a/CORE/MAC/src/pe/lim/limSendMessages.c +++ b/CORE/MAC/src/pe/lim/limSendMessages.c @@ -26,7 +26,6 @@ */ /* - * * Airgo Networks, Inc proprietary. All rights reserved. * limSendMessages.c: Provides functions to send messages or Indications to HAL. * Author: Sunit Bhatia @@ -68,6 +67,7 @@ static tBeaconFilterIe beaconFilterTable[] = { #endif #ifdef WLAN_FEATURE_11AC ,{SIR_MAC_VHT_OPMODE_EID, 0, {0, 0, 0, 0}} + ,{SIR_MAC_VHT_OPERATION_EID, 0, {0, 0, VHTOP_CHWIDTH_MASK, 0}} #endif }; @@ -98,16 +98,15 @@ tSirRetStatus limSendCFParams(tpAniSirGlobal pMac, tANI_U8 bssIdx, tANI_U8 cfpCo tSirRetStatus retCode = eSIR_SUCCESS; tSirMsgQ msgQ; - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, - (void **) &pCFParams, - sizeof( tUpdateCFParams ))) + pCFParams = vos_mem_malloc(sizeof( tUpdateCFParams )); + if ( NULL == pCFParams ) { limLog( pMac, LOGP, - FL( "Unable to PAL allocate memory during Update CF Params" )); + FL( "Unable to allocate memory during Update CF Params" )); retCode = eSIR_MEM_ALLOC_FAILED; goto returnFailure; } - palZeroMemory( pMac->hHdd, (tANI_U8 *) pCFParams, sizeof(tUpdateCFParams)); + vos_mem_set( (tANI_U8 *) pCFParams, sizeof(tUpdateCFParams), 0); pCFParams->cfpCount = cfpCount; pCFParams->cfpPeriod = cfpPeriod; pCFParams->bssIdx = bssIdx; @@ -121,7 +120,7 @@ tSirRetStatus limSendCFParams(tpAniSirGlobal pMac, tANI_U8 bssIdx, tANI_U8 cfpCo MTRACE(macTraceMsgTx(pMac, NO_SESSION, msgQ.type)); if( eSIR_SUCCESS != (retCode = wdaPostCtrlMsg( pMac, &msgQ ))) { - palFreeMemory(pMac->hHdd, pCFParams); + vos_mem_free(pCFParams); limLog( pMac, LOGP, FL("Posting WDA_UPDATE_CF_IND to WDA failed, reason=%X"), retCode ); @@ -159,14 +158,14 @@ tSirRetStatus limSendBeaconParams(tpAniSirGlobal pMac, tSirRetStatus retCode = eSIR_SUCCESS; tSirMsgQ msgQ; - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, - (void **) &pBcnParams, sizeof(*pBcnParams))) + pBcnParams = vos_mem_malloc(sizeof(*pBcnParams)); + if ( NULL == pBcnParams ) { limLog( pMac, LOGP, - FL( "Unable to PAL allocate memory during Update Beacon Params" )); + FL( "Unable to allocate memory during Update Beacon Params" )); return eSIR_MEM_ALLOC_FAILED; } - palCopyMemory( pMac->hHdd, (tANI_U8 *) pBcnParams, pUpdatedBcnParams, sizeof(*pBcnParams)); + vos_mem_copy((tANI_U8 *) pBcnParams, pUpdatedBcnParams, sizeof(*pBcnParams)); msgQ.type = WDA_UPDATE_BEACON_IND; msgQ.reserved = 0; msgQ.bodyptr = pBcnParams; @@ -186,7 +185,7 @@ tSirRetStatus limSendBeaconParams(tpAniSirGlobal pMac, pBcnParams->smeSessionId = psessionEntry->smeSessionId; if( eSIR_SUCCESS != (retCode = wdaPostCtrlMsg( pMac, &msgQ ))) { - palFreeMemory(pMac->hHdd, pBcnParams); + vos_mem_free(pBcnParams); limLog( pMac, LOGP, FL("Posting WDA_UPDATE_BEACON_IND to WDA failed, reason=%X"), retCode ); @@ -232,31 +231,30 @@ tSirRetStatus limSendSwitchChnlParams(tpAniSirGlobal pMac, tSirRetStatus retCode = eSIR_SUCCESS; tSirMsgQ msgQ; tpPESession pSessionEntry; - if((pSessionEntry = peFindSessionBySessionId(pMac , peSessionId)) == NULL) + if((pSessionEntry = peFindSessionBySessionId(pMac, peSessionId)) == NULL) { limLog( pMac, LOGP, FL( "Unable to get Session for session Id %d" ), peSessionId); return eSIR_FAILURE; } - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, - (void **) &pChnlParams, - sizeof( tSwitchChannelParams ))) - { - limLog( pMac, LOGP, - FL( "Unable to PAL allocate memory during Switch Channel Params" )); + pChnlParams = vos_mem_malloc(sizeof( tSwitchChannelParams )); + if ( NULL == pChnlParams ) + { + limLog( pMac, LOGP, + FL( "Unable to allocate memory during Switch Channel Params" )); retCode = eSIR_MEM_ALLOC_FAILED; goto returnFailure; - } - palZeroMemory( pMac->hHdd, (tANI_U8 *) pChnlParams, sizeof(tSwitchChannelParams)); + } + vos_mem_set((tANI_U8 *) pChnlParams, sizeof(tSwitchChannelParams), 0); pChnlParams->secondaryChannelOffset = secondaryChnlOffset; pChnlParams->channelNumber= chnlNumber; - palCopyMemory( pMac->hHdd, pChnlParams->selfStaMacAddr, pSessionEntry->selfMacAddr, sizeof(tSirMacAddr) ); + vos_mem_copy( pChnlParams->selfStaMacAddr, pSessionEntry->selfMacAddr, sizeof(tSirMacAddr) ); #if defined WLAN_FEATURE_VOWIFI pChnlParams->maxTxPower = maxTxPower; #else pChnlParams->localPowerConstraint = localPwrConstraint; #endif - palCopyMemory( pMac->hHdd, pChnlParams->bssId, pSessionEntry->bssId, sizeof(tSirMacAddr) ); + vos_mem_copy( pChnlParams->bssId, pSessionEntry->bssId, sizeof(tSirMacAddr) ); pChnlParams->peSessionId = peSessionId; //we need to defer the message until we get the response back from WDA. @@ -277,7 +275,7 @@ tSirRetStatus limSendSwitchChnlParams(tpAniSirGlobal pMac, MTRACE(macTraceMsgTx(pMac, peSessionId, msgQ.type)); if( eSIR_SUCCESS != (retCode = wdaPostCtrlMsg( pMac, &msgQ ))) { - palFreeMemory(pMac->hHdd, pChnlParams); + vos_mem_free(pChnlParams); limLog( pMac, LOGP, FL("Posting WDA_CHNL_SWITCH_REQ to WDA failed, reason=%X"), retCode ); @@ -312,12 +310,12 @@ tSirRetStatus limSendEdcaParams(tpAniSirGlobal pMac, tSirMacEdcaParamRecord *pUp tEdcaParams *pEdcaParams = NULL; tSirRetStatus retCode = eSIR_SUCCESS; tSirMsgQ msgQ; - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, - (void **) &pEdcaParams, - sizeof(tEdcaParams))) + + pEdcaParams = vos_mem_malloc(sizeof(tEdcaParams)); + if ( NULL == pEdcaParams ) { limLog( pMac, LOGP, - FL( "Unable to PAL allocate memory during Update EDCA Params" )); + FL( "Unable to allocate memory during Update EDCA Params" )); retCode = eSIR_MEM_ALLOC_FAILED; return retCode; } @@ -344,7 +342,7 @@ tSirRetStatus limSendEdcaParams(tpAniSirGlobal pMac, tSirMacEdcaParamRecord *pUp MTRACE(macTraceMsgTx(pMac, NO_SESSION, msgQ.type)); if( eSIR_SUCCESS != (retCode = wdaPostCtrlMsg( pMac, &msgQ ))) { - palFreeMemory(pMac->hHdd, pEdcaParams); + vos_mem_free(pEdcaParams); limLog( pMac, LOGP, FL("Posting WDA_UPDATE_EDCA_PROFILE_IND to WDA failed, reason=%X"), retCode ); @@ -498,16 +496,15 @@ tSirRetStatus limSetLinkState(tpAniSirGlobal pMac, tSirLinkState state,tSirMacAd tSirRetStatus retCode; tpLinkStateParams pLinkStateParams = NULL; // Allocate memory. - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, - (void **) &pLinkStateParams, - sizeof(tLinkStateParams))) + pLinkStateParams = vos_mem_malloc(sizeof(tLinkStateParams)); + if ( NULL == pLinkStateParams ) { limLog( pMac, LOGP, - FL( "Unable to PAL allocate memory while sending Set Link State" )); + FL( "Unable to allocate memory while sending Set Link State" )); retCode = eSIR_SME_RESOURCES_UNAVAILABLE; return retCode; } - palZeroMemory( pMac->hHdd, (tANI_U8 *) pLinkStateParams, sizeof(tLinkStateParams)); + vos_mem_set((tANI_U8 *) pLinkStateParams, sizeof(tLinkStateParams), 0); pLinkStateParams->state = state; pLinkStateParams->callback = callback; pLinkStateParams->callbackArg = callbackArg; @@ -526,8 +523,9 @@ tSirRetStatus limSetLinkState(tpAniSirGlobal pMac, tSirLinkState state,tSirMacAd retCode = (tANI_U32)wdaPostCtrlMsg(pMac, &msgQ); if (retCode != eSIR_SUCCESS) { - palFreeMemory(pMac, (void*)pLinkStateParams); - limLog(pMac, LOGP, FL("Posting link state %d failed, reason = %x "), retCode); + vos_mem_free(pLinkStateParams); + limLog(pMac, LOGP, FL("Posting link state %d failed, reason = %x "), + state, retCode); } return retCode; } @@ -539,16 +537,15 @@ state,tSirMacAddr bssId, tSirMacAddr selfMacAddr, int ft, tpPESession psessionEn tSirRetStatus retCode; tpLinkStateParams pLinkStateParams = NULL; // Allocate memory. - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, - (void **) &pLinkStateParams, - sizeof(tLinkStateParams))) + pLinkStateParams = vos_mem_malloc(sizeof(tLinkStateParams)); + if ( NULL == pLinkStateParams ) { limLog( pMac, LOGP, - FL( "Unable to PAL allocate memory while sending Set Link State" )); + FL( "Unable to allocate memory while sending Set Link State" )); retCode = eSIR_SME_RESOURCES_UNAVAILABLE; return retCode; } - palZeroMemory( pMac->hHdd, (tANI_U8 *) pLinkStateParams, sizeof(tLinkStateParams)); + vos_mem_set((tANI_U8 *) pLinkStateParams, sizeof(tLinkStateParams), 0); pLinkStateParams->state = state; /* Copy Mac address */ sirCopyMacAddr(pLinkStateParams->bssid,bssId); @@ -572,8 +569,9 @@ state,tSirMacAddr bssId, tSirMacAddr selfMacAddr, int ft, tpPESession psessionEn retCode = (tANI_U32)wdaPostCtrlMsg(pMac, &msgQ); if (retCode != eSIR_SUCCESS) { - palFreeMemory(pMac, (void*)pLinkStateParams); - limLog(pMac, LOGP, FL("Posting link state %d failed, reason = %x "), retCode); + vos_mem_free(pLinkStateParams); + limLog(pMac, LOGP, FL("Posting link state %d failed, reason = %x "), + state, retCode); } return retCode; } @@ -597,18 +595,18 @@ tSirRetStatus limSendSetTxPowerReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) if (NULL == pMsgBuf) return eSIR_FAILURE; - palAllocateMemory(pMac->hHdd, (void **)&txPowerReq, sizeof(tSirSetTxPowerReq)); - if (NULL == txPowerReq) + txPowerReq = vos_mem_malloc(sizeof(tSirSetTxPowerReq)); + if ( NULL == txPowerReq ) { return eSIR_FAILURE; } - palCopyMemory(pMac->hHdd, txPowerReq, (tSirSetTxPowerReq *)pMsgBuf, sizeof(tSirSetTxPowerReq)); + vos_mem_copy(txPowerReq, (tSirSetTxPowerReq *)pMsgBuf, sizeof(tSirSetTxPowerReq)); /* Found corresponding seesion to find BSS IDX */ psessionEntry = peFindSessionByBssid(pMac, txPowerReq->bssId, &sessionId); if (NULL == psessionEntry) { - palFreeMemory(pMac->hHdd, (tANI_U8 *) txPowerReq); + vos_mem_free(txPowerReq); limLog(pMac, LOGE, FL("Session does not exist for given BSSID")); return eSIR_FAILURE; } @@ -626,7 +624,7 @@ tSirRetStatus limSendSetTxPowerReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) if (eSIR_SUCCESS != retCode) { limLog(pMac, LOGP, FL("Posting WDA_SET_TX_POWER_REQ to WDA failed, reason=%X"), retCode); - palFreeMemory(pMac->hHdd, (tANI_U8 *) txPowerReq); + vos_mem_free(txPowerReq); return retCode; } @@ -656,7 +654,7 @@ tSirRetStatus limSendGetTxPowerReq(tpAniSirGlobal pMac, tpSirGetTxPowerReq pTxP limLog( pMac, LOGP, FL("Posting WDA_GET_TX_POWER_REQ to WDA failed, reason=%X"), retCode ); if (NULL != pTxPowerReq) { - palFreeMemory( pMac->hHdd, (tANI_U8 *) pTxPowerReq); + vos_mem_free(pTxPowerReq); } return retCode; } @@ -685,14 +683,14 @@ tSirRetStatus limSendBeaconFilterInfo(tpAniSirGlobal pMac,tpPESession psessionEn return retCode; } msgSize = sizeof(tBeaconFilterMsg) + sizeof(beaconFilterTable); - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, - (void **) &pBeaconFilterMsg, msgSize) ) + pBeaconFilterMsg = vos_mem_malloc(msgSize); + if ( NULL == pBeaconFilterMsg ) { limLog( pMac, LOGP, FL("Fail to allocate memory for beaconFiilterMsg ")); retCode = eSIR_MEM_ALLOC_FAILED; return retCode; } - palZeroMemory( pMac->hHdd, (tANI_U8 *) pBeaconFilterMsg, msgSize); + vos_mem_set((tANI_U8 *) pBeaconFilterMsg, msgSize, 0); // Fill in capability Info and mask //TBD-RAJESH get the BSS capability from session. //Don't send this message if no active Infra session is found. @@ -725,7 +723,7 @@ tSirRetStatus limSendBeaconFilterInfo(tpAniSirGlobal pMac,tpPESession psessionEn MTRACE(macTraceMsgTx(pMac, psessionEntry->peSessionId, msgQ.type)); if( eSIR_SUCCESS != (retCode = wdaPostCtrlMsg( pMac, &msgQ ))) { - palFreeMemory(pMac->hHdd, pBeaconFilterMsg); + vos_mem_free(pBeaconFilterMsg); limLog( pMac, LOGP, FL("Posting WDA_BEACON_FILTER_IND to WDA failed, reason=%X"), retCode ); @@ -743,14 +741,14 @@ tSirRetStatus limSendModeUpdate(tpAniSirGlobal pMac, tSirRetStatus retCode = eSIR_SUCCESS; tSirMsgQ msgQ; - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, - (void **) &pVhtOpMode, sizeof(tUpdateVHTOpMode))) + pVhtOpMode = vos_mem_malloc(sizeof(tUpdateVHTOpMode)); + if ( NULL == pVhtOpMode ) { limLog( pMac, LOGP, - FL( "Unable to PAL allocate memory during Update Op Mode" )); + FL( "Unable to allocate memory during Update Op Mode" )); return eSIR_MEM_ALLOC_FAILED; } - palCopyMemory( pMac->hHdd, (tANI_U8 *)pVhtOpMode, pTempParam, sizeof(tUpdateVHTOpMode)); + vos_mem_copy((tANI_U8 *)pVhtOpMode, pTempParam, sizeof(tUpdateVHTOpMode)); msgQ.type = WDA_UPDATE_OP_MODE; msgQ.reserved = 0; msgQ.bodyptr = pVhtOpMode; @@ -767,7 +765,7 @@ tSirRetStatus limSendModeUpdate(tpAniSirGlobal pMac, } if( eSIR_SUCCESS != (retCode = wdaPostCtrlMsg( pMac, &msgQ ))) { - palFreeMemory(pMac->hHdd, pVhtOpMode); + vos_mem_free(pVhtOpMode); limLog( pMac, LOGP, FL("Posting WDA_UPDATE_OP_MODE to WDA failed, reason=%X"), retCode ); @@ -784,14 +782,15 @@ tSirRetStatus limSetMembership(tpAniSirGlobal pMac, tSirRetStatus retCode = eSIR_SUCCESS; tSirMsgQ msgQ; - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, - (void **) &pMembership, sizeof(tUpdateMembership))) + pMembership = vos_mem_malloc(sizeof(tUpdateMembership)); + if ( NULL == pMembership ) { limLog( pMac, LOGP, - FL( "Unable to PAL allocate memory during Update Membership Mode" )); + FL( "Unable to allocate memory during Update Membership Mode" )); return eSIR_MEM_ALLOC_FAILED; } - palCopyMemory( pMac->hHdd, (tANI_U8 *)pMembership, pTempParam, sizeof(tUpdateMembership)); + vos_mem_copy((tANI_U8 *)pMembership, pTempParam, sizeof(tUpdateMembership)); + msgQ.type = WDA_UPDATE_MEMBERSHIP; msgQ.reserved = 0; msgQ.bodyptr = pMembership; @@ -808,7 +807,7 @@ tSirRetStatus limSetMembership(tpAniSirGlobal pMac, } if( eSIR_SUCCESS != (retCode = wdaPostCtrlMsg( pMac, &msgQ ))) { - palFreeMemory(pMac->hHdd, pMembership); + vos_mem_free(pMembership); limLog( pMac, LOGP, FL("Posting WDA_UPDATE_MEMBERSHIP to WDA failed, reason=%X"), retCode ); @@ -825,14 +824,15 @@ tSirRetStatus limSetUserPos(tpAniSirGlobal pMac, tSirRetStatus retCode = eSIR_SUCCESS; tSirMsgQ msgQ; - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, - (void **) &pUserPos, sizeof(tUpdateUserPos))) + pUserPos = vos_mem_malloc(sizeof(tUpdateUserPos)); + if ( NULL == pUserPos ) { limLog( pMac, LOGP, - FL( "Unable to PAL allocate memory during Update User Position" )); + FL( "Unable to allocate memory during Update User Position" )); return eSIR_MEM_ALLOC_FAILED; } - palCopyMemory( pMac->hHdd, (tANI_U8 *)pUserPos, pTempParam, sizeof(tUpdateUserPos)); + vos_mem_copy((tANI_U8 *)pUserPos, pTempParam, sizeof(tUpdateUserPos)); + msgQ.type = WDA_UPDATE_USERPOS; msgQ.reserved = 0; msgQ.bodyptr = pUserPos; @@ -849,7 +849,7 @@ tSirRetStatus limSetUserPos(tpAniSirGlobal pMac, } if( eSIR_SUCCESS != (retCode = wdaPostCtrlMsg( pMac, &msgQ ))) { - palFreeMemory(pMac->hHdd, pUserPos); + vos_mem_free(pUserPos); limLog( pMac, LOGP, FL("Posting WDA_UPDATE_USERPOS to WDA failed, reason=%X"), retCode ); @@ -876,27 +876,26 @@ tSirRetStatus limSendTdlsLinkEstablish(tpAniSirGlobal pMac, tANI_U8 bIsPeerRespo tpSirTdlsLinkEstablishInd pTdlsLinkEstablish = NULL; // Allocate memory. - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, - (void **) &pTdlsLinkEstablish, - sizeof(tSirTdlsLinkEstablishInd))) + pTdlsLinkEstablish = vos_mem_malloc(sizeof(tSirTdlsLinkEstablishInd)); + if ( NULL == pTdlsLinkEstablish ) { limLog( pMac, LOGP, - FL( "Unable to PAL allocate memory while sending Tdls Link Establish " )); + FL( "Unable to allocate memory while sending Tdls Link Establish " )); retCode = eSIR_SME_RESOURCES_UNAVAILABLE; return retCode; } - palZeroMemory( pMac->hHdd, (tANI_U8 *) pTdlsLinkEstablish, sizeof(tSirTdlsLinkEstablishInd)); + vos_mem_set((tANI_U8 *) pTdlsLinkEstablish, sizeof(tSirTdlsLinkEstablishInd), 0); pTdlsLinkEstablish->bIsResponder = !!bIsPeerResponder; pTdlsLinkEstablish->linkIdenOffset = linkIdenOffset; pTdlsLinkEstablish->ptiBufStatusOffset = ptiBufStatusOffset; pTdlsLinkEstablish->ptiTemplateLen = ptiFrameLen; /* Copy ptiFrame template */ - palCopyMemory( pMac->hHdd, pTdlsLinkEstablish->ptiTemplateBuf, ptiFrame, ptiFrameLen); + vos_mem_copy(pTdlsLinkEstablish->ptiTemplateBuf, ptiFrame, ptiFrameLen); /* Copy extended capabilities */ - palCopyMemory( pMac->hHdd, (tANI_U8 *) pTdlsLinkEstablish->extCapability, extCapability, sizeof(pTdlsLinkEstablish->extCapability)); + vos_mem_copy((tANI_U8 *) pTdlsLinkEstablish->extCapability, extCapability, sizeof(pTdlsLinkEstablish->extCapability)); msgQ.type = SIR_HAL_TDLS_LINK_ESTABLISH; msgQ.reserved = 0; @@ -908,7 +907,7 @@ tSirRetStatus limSendTdlsLinkEstablish(tpAniSirGlobal pMac, tANI_U8 bIsPeerRespo retCode = (tANI_U32)wdaPostCtrlMsg(pMac, &msgQ); if (retCode != eSIR_SUCCESS) { - palFreeMemory(pMac, (void*)pTdlsLinkEstablish); + vos_mem_free(pTdlsLinkEstablish); limLog(pMac, LOGP, FL("Posting tdls link establish %d failed, reason = %x "), retCode); } @@ -929,18 +928,17 @@ tSirRetStatus limSendTdlsLinkTeardown(tpAniSirGlobal pMac, tANI_U16 staId) tpSirTdlsLinkTeardownInd pTdlsLinkTeardown = NULL; // Allocate memory. - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, - (void **) &pTdlsLinkTeardown, - sizeof(tSirTdlsLinkTeardownInd))) + pTdlsLinkTeardown = vos_mem_malloc(sizeof(tSirTdlsLinkTeardownInd)); + if ( NULL == pTdlsLinkTeardown ) { limLog( pMac, LOGP, - FL( "Unable to PAL allocate memory while sending Tdls Link Teardown " )); + FL( "Unable to allocate memory while sending Tdls Link Teardown " )); retCode = eSIR_SME_RESOURCES_UNAVAILABLE; return retCode; } - palZeroMemory( pMac->hHdd, (tANI_U8 *) pTdlsLinkTeardown, sizeof(tSirTdlsLinkTeardownInd)); + vos_mem_set((tANI_U8 *) pTdlsLinkTeardown, sizeof(tSirTdlsLinkTeardownInd), 0); pTdlsLinkTeardown->staId = staId; @@ -954,7 +952,7 @@ tSirRetStatus limSendTdlsLinkTeardown(tpAniSirGlobal pMac, tANI_U16 staId) retCode = (tANI_U32)wdaPostCtrlMsg(pMac, &msgQ); if (retCode != eSIR_SUCCESS) { - palFreeMemory(pMac, (void*)pTdlsLinkTeardown); + vos_mem_free(pTdlsLinkTeardown); limLog(pMac, LOGP, FL("Posting tdls link teardown %d failed, reason = %x "), retCode); } @@ -982,12 +980,11 @@ tSirRetStatus limSendExcludeUnencryptInd(tpAniSirGlobal pMac, tSirMsgQ msgQ; tSirWlanExcludeUnencryptParam * pExcludeUnencryptParam; - if (eHAL_STATUS_SUCCESS != palAllocateMemory(pMac->hHdd, - (void **) &pExcludeUnencryptParam, - sizeof(tSirWlanExcludeUnencryptParam))) + pExcludeUnencryptParam = vos_mem_malloc(sizeof(tSirWlanExcludeUnencryptParam)); + if ( NULL == pExcludeUnencryptParam ) { limLog(pMac, LOGP, - FL( "Unable to PAL allocate memory during limSendExcludeUnencryptInd")); + FL( "Unable to allocate memory during limSendExcludeUnencryptInd")); return eSIR_MEM_ALLOC_FAILED; } @@ -1004,7 +1001,7 @@ tSirRetStatus limSendExcludeUnencryptInd(tpAniSirGlobal pMac, retCode = wdaPostCtrlMsg(pMac, &msgQ); if (eSIR_SUCCESS != retCode) { - palFreeMemory(pMac->hHdd, pExcludeUnencryptParam); + vos_mem_free(pExcludeUnencryptParam); limLog(pMac, LOGP, FL("Posting WDA_EXCLUDE_UNENCRYPTED_IND to WDA failed, reason=%X"), retCode); diff --git a/CORE/MAC/src/pe/lim/limSendMessages.h b/CORE/MAC/src/pe/lim/limSendMessages.h index 6cc0db5b44e4..1fcc961269e2 100644 --- a/CORE/MAC/src/pe/lim/limSendMessages.h +++ b/CORE/MAC/src/pe/lim/limSendMessages.h @@ -26,7 +26,6 @@ */ /* - * * Airgo Networks, Inc proprietary. All rights reserved. * limSendMessages.h: Provides functions to send messages or Indications to HAL. * Author: Sunit Bhatia @@ -95,6 +94,7 @@ void limSetActiveEdcaParams(tpAniSirGlobal pMac, tSirMacEdcaParamRecord *plocalE #define HT_BYTE2_FILTER_MASK 0xEB #define HT_BYTE5_FILTER_MASK 0xFD #define DS_PARAM_CHANNEL_MASK 0x0 +#define VHTOP_CHWIDTH_MASK 0xFC tSirRetStatus limSendBeaconFilterInfo(tpAniSirGlobal pMac, tpPESession psessionEntry); diff --git a/CORE/MAC/src/pe/lim/limSendSmeRspMessages.c b/CORE/MAC/src/pe/lim/limSendSmeRspMessages.c index d4f795ea9762..f5b6667f87f9 100644 --- a/CORE/MAC/src/pe/lim/limSendSmeRspMessages.c +++ b/CORE/MAC/src/pe/lim/limSendSmeRspMessages.c @@ -96,15 +96,16 @@ limSendSmeRsp(tpAniSirGlobal pMac, tANI_U16 msgType, FL("Sending message %s with reasonCode %s"), limMsgStr(msgType), limResultCodeStr(resultCode));) - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pSirSmeRsp, sizeof(tSirSmeRsp))) + pSirSmeRsp = vos_mem_malloc(sizeof(tSirSmeRsp)); + if ( NULL == pSirSmeRsp ) { /// Buffer not available. Log error limLog(pMac, LOGP, - FL("call to palAllocateMemory failed for eWNI_SME_*_RSP")); + FL("call to AllocateMemory failed for eWNI_SME_*_RSP")); return; } - + pSirSmeRsp->messageType = msgType; pSirSmeRsp->length = sizeof(tSirSmeRsp); pSirSmeRsp->statusCode = resultCode; @@ -117,9 +118,9 @@ limSendSmeRsp(tpAniSirGlobal pMac, tANI_U16 msgType, mmhMsg.type = msgType; mmhMsg.bodyptr = pSirSmeRsp; mmhMsg.bodyval = 0; - MTRACE(macTraceMsgTx(pMac, smesessionId , mmhMsg.type)); + MTRACE(macTraceMsgTx(pMac, smesessionId, mmhMsg.type)); -#ifdef FEATURE_WLAN_DIAG_SUPPORT_LIM //FEATURE_WLAN_DIAG_SUPPORT +#ifdef FEATURE_WLAN_DIAG_SUPPORT_LIM //FEATURE_WLAN_DIAG_SUPPORT { tpPESession psessionEntry = peGetValidPowerSaveSession(pMac); switch(msgType) @@ -132,7 +133,7 @@ limSendSmeRsp(tpAniSirGlobal pMac, tANI_U16 msgType, break; case eWNI_PMC_ENTER_IMPS_RSP: limDiagEventReport(pMac, WLAN_PE_DIAG_ENTER_IMPS_RSP_EVENT, psessionEntry, (tANI_U16)resultCode, 0); - break; + break; case eWNI_PMC_EXIT_IMPS_RSP: limDiagEventReport(pMac, WLAN_PE_DIAG_EXIT_IMPS_RSP_EVENT, psessionEntry, (tANI_U16)resultCode, 0); break; @@ -147,17 +148,17 @@ limSendSmeRsp(tpAniSirGlobal pMac, tANI_U16 msgType, break; case eWNI_SME_STOP_BSS_RSP: limDiagEventReport(pMac, WLAN_PE_DIAG_STOP_BSS_RSP_EVENT, NULL, (tANI_U16)resultCode, 0); - break; + break; case eWNI_PMC_ENTER_WOWL_RSP: limDiagEventReport(pMac, WLAN_PE_DIAG_ENTER_WOWL_RSP_EVENT, psessionEntry, (tANI_U16)resultCode, 0); break; case eWNI_PMC_EXIT_WOWL_RSP: limDiagEventReport(pMac, WLAN_PE_DIAG_EXIT_WOWL_RSP_EVENT, psessionEntry, (tANI_U16)resultCode, 0); - break; - } - } + break; + } + } #endif //FEATURE_WLAN_DIAG_SUPPORT - + limSysProcessMmhMsgApi(pMac, &mmhMsg, ePROT); } /*** end limSendSmeRsp() ***/ @@ -180,13 +181,13 @@ limSendSmeRsp(tpAniSirGlobal pMac, tANI_U16 msgType, * NA * * @param pMac Pointer to Global MAC structure - * @param status Resume link status + * @param status Resume link status * @param ctx context passed while calling resmune link. * (join response to be sent) * * @return None */ -static void limSendSmeJoinReassocRspAfterResume( tpAniSirGlobal pMac, +static void limSendSmeJoinReassocRspAfterResume( tpAniSirGlobal pMac, eHalStatus status, tANI_U32 *ctx) { tSirMsgQ mmhMsg; @@ -235,7 +236,7 @@ limSendSmeJoinReassocRsp(tpAniSirGlobal pMac, tANI_U16 msgType, tANI_U32 rspLen; tpDphHashNode pStaDs = NULL; -#ifdef FEATURE_WLAN_DIAG_SUPPORT_LIM //FEATURE_WLAN_DIAG_SUPPORT +#ifdef FEATURE_WLAN_DIAG_SUPPORT_LIM //FEATURE_WLAN_DIAG_SUPPORT if (msgType == eWNI_SME_REASSOC_RSP) limDiagEventReport(pMac, WLAN_PE_DIAG_REASSOC_RSP_EVENT, psessionEntry, (tANI_U16)resultCode, 0); else @@ -249,18 +250,19 @@ limSendSmeJoinReassocRsp(tpAniSirGlobal pMac, tANI_U16 msgType, if(psessionEntry == NULL) { - rspLen = sizeof(tSirSmeJoinRsp); + rspLen = sizeof(tSirSmeJoinRsp); - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pSirSmeJoinRsp, rspLen)) + pSirSmeJoinRsp = vos_mem_malloc(rspLen); + if ( NULL == pSirSmeJoinRsp ) { /// Buffer not available. Log error - limLog(pMac, LOGP, FL("call to palAllocateMemory failed for JOIN/REASSOC_RSP")); + limLog(pMac, LOGP, FL("call to AllocateMemory failed for JOIN/REASSOC_RSP")); return; } - - palZeroMemory(pMac, (tANI_U8*)pSirSmeJoinRsp, rspLen); - - + + vos_mem_set((tANI_U8*)pSirSmeJoinRsp, rspLen, 0); + + pSirSmeJoinRsp->beaconLength = 0; pSirSmeJoinRsp->assocReqLength = 0; pSirSmeJoinRsp->assocRspLength = 0; @@ -268,26 +270,27 @@ limSendSmeJoinReassocRsp(tpAniSirGlobal pMac, tANI_U16 msgType, else { - rspLen = psessionEntry->assocReqLen + psessionEntry->assocRspLen + - psessionEntry->bcnLen + + rspLen = psessionEntry->assocReqLen + psessionEntry->assocRspLen + + psessionEntry->bcnLen + #ifdef WLAN_FEATURE_VOWIFI_11R psessionEntry->RICDataLen + #endif -#ifdef FEATURE_WLAN_CCX - psessionEntry->tspecLen + -#endif +#ifdef FEATURE_WLAN_CCX + psessionEntry->tspecLen + +#endif sizeof(tSirSmeJoinRsp) - sizeof(tANI_U8) ; - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pSirSmeJoinRsp, rspLen)) + pSirSmeJoinRsp = vos_mem_malloc(rspLen); + if ( NULL == pSirSmeJoinRsp ) { /// Buffer not available. Log error limLog(pMac, LOGP, - FL("call to palAllocateMemory failed for JOIN/REASSOC_RSP")); + FL("call to AllocateMemory failed for JOIN/REASSOC_RSP")); return; } - palZeroMemory(pMac, (tANI_U8*)pSirSmeJoinRsp, rspLen); + vos_mem_set((tANI_U8*)pSirSmeJoinRsp, rspLen, 0); if (resultCode == eSIR_SME_SUCCESS) { @@ -311,29 +314,31 @@ limSendSmeJoinReassocRsp(tpAniSirGlobal pMac, tANI_U16 msgType, #ifdef WLAN_FEATURE_VOWIFI_11R pSirSmeJoinRsp->parsedRicRspLen = 0; #endif -#ifdef FEATURE_WLAN_CCX +#ifdef FEATURE_WLAN_CCX pSirSmeJoinRsp->tspecIeLen = 0; #endif - + if(resultCode == eSIR_SME_SUCCESS) { if(psessionEntry->beacon != NULL) { pSirSmeJoinRsp->beaconLength = psessionEntry->bcnLen; - palCopyMemory(pMac->hHdd, pSirSmeJoinRsp->frames, psessionEntry->beacon, pSirSmeJoinRsp->beaconLength); - palFreeMemory(pMac->hHdd, psessionEntry->beacon); + vos_mem_copy( pSirSmeJoinRsp->frames, psessionEntry->beacon, + pSirSmeJoinRsp->beaconLength); + vos_mem_free( psessionEntry->beacon); psessionEntry->beacon = NULL; #ifdef WLAN_FEATURE_VOWIFI_11R_DEBUG PELOG1(limLog(pMac, LOG1, FL("Beacon=%d"), psessionEntry->bcnLen);) #endif } - + if(psessionEntry->assocReq != NULL) { pSirSmeJoinRsp->assocReqLength = psessionEntry->assocReqLen; - palCopyMemory(pMac->hHdd, pSirSmeJoinRsp->frames + psessionEntry->bcnLen, psessionEntry->assocReq, pSirSmeJoinRsp->assocReqLength); - palFreeMemory(pMac->hHdd, psessionEntry->assocReq); + vos_mem_copy( pSirSmeJoinRsp->frames + psessionEntry->bcnLen, + psessionEntry->assocReq, pSirSmeJoinRsp->assocReqLength); + vos_mem_free( psessionEntry->assocReq); psessionEntry->assocReq = NULL; #ifdef WLAN_FEATURE_VOWIFI_11R_DEBUG PELOG1(limLog(pMac, LOG1, FL("AssocReq=%d"), psessionEntry->assocReqLen);) @@ -342,30 +347,38 @@ limSendSmeJoinReassocRsp(tpAniSirGlobal pMac, tANI_U16 msgType, if(psessionEntry->assocRsp != NULL) { pSirSmeJoinRsp->assocRspLength = psessionEntry->assocRspLen; - palCopyMemory(pMac->hHdd, pSirSmeJoinRsp->frames + psessionEntry->bcnLen + psessionEntry->assocReqLen, psessionEntry->assocRsp, pSirSmeJoinRsp->assocRspLength); - palFreeMemory(pMac->hHdd, psessionEntry->assocRsp); + vos_mem_copy( pSirSmeJoinRsp->frames + psessionEntry->bcnLen + + psessionEntry->assocReqLen, + psessionEntry->assocRsp, + pSirSmeJoinRsp->assocRspLength); + vos_mem_free( psessionEntry->assocRsp); psessionEntry->assocRsp = NULL; - } + } #ifdef WLAN_FEATURE_VOWIFI_11R if(psessionEntry->ricData != NULL) { pSirSmeJoinRsp->parsedRicRspLen = psessionEntry->RICDataLen; - palCopyMemory(pMac->hHdd, pSirSmeJoinRsp->frames + psessionEntry->bcnLen + psessionEntry->assocReqLen + psessionEntry->assocRspLen, psessionEntry->ricData, pSirSmeJoinRsp->parsedRicRspLen); - palFreeMemory(pMac->hHdd, psessionEntry->ricData); + vos_mem_copy( pSirSmeJoinRsp->frames + psessionEntry->bcnLen + + psessionEntry->assocReqLen + psessionEntry->assocRspLen, + psessionEntry->ricData, pSirSmeJoinRsp->parsedRicRspLen); + vos_mem_free(psessionEntry->ricData); psessionEntry->ricData = NULL; PELOG1(limLog(pMac, LOG1, FL("RicLength=%d"), pSirSmeJoinRsp->parsedRicRspLen);) } #endif -#ifdef FEATURE_WLAN_CCX +#ifdef FEATURE_WLAN_CCX if(psessionEntry->tspecIes != NULL) { pSirSmeJoinRsp->tspecIeLen = psessionEntry->tspecLen; - palCopyMemory(pMac->hHdd, pSirSmeJoinRsp->frames + psessionEntry->bcnLen + psessionEntry->assocReqLen + psessionEntry->assocRspLen + psessionEntry->RICDataLen, psessionEntry->tspecIes, pSirSmeJoinRsp->tspecIeLen); - palFreeMemory(pMac->hHdd, psessionEntry->tspecIes); + vos_mem_copy( pSirSmeJoinRsp->frames + psessionEntry->bcnLen + + psessionEntry->assocReqLen + psessionEntry->assocRspLen + + psessionEntry->RICDataLen, + psessionEntry->tspecIes, pSirSmeJoinRsp->tspecIeLen); + vos_mem_free(psessionEntry->tspecIes); psessionEntry->tspecIes = NULL; PELOG1(limLog(pMac, LOG1, FL("CCX-TspecLen=%d"), psessionEntry->tspecLen);) } -#endif +#endif pSirSmeJoinRsp->aid = psessionEntry->limAID; #ifdef WLAN_FEATURE_VOWIFI_11R_DEBUG PELOG1(limLog(pMac, LOG1, FL("AssocRsp=%d"), psessionEntry->assocRspLen);) @@ -376,19 +389,19 @@ limSendSmeJoinReassocRsp(tpAniSirGlobal pMac, tANI_U16 msgType, if(psessionEntry->beacon != NULL) { - palFreeMemory(pMac->hHdd, psessionEntry->beacon); + vos_mem_free(psessionEntry->beacon); psessionEntry->beacon = NULL; } if(psessionEntry->assocReq != NULL) { - palFreeMemory(pMac->hHdd, psessionEntry->assocReq); + vos_mem_free( psessionEntry->assocReq); psessionEntry->assocReq = NULL; } if(psessionEntry->assocRsp != NULL) { - palFreeMemory(pMac->hHdd, psessionEntry->assocRsp); + vos_mem_free( psessionEntry->assocRsp); psessionEntry->assocRsp = NULL; } @@ -400,29 +413,29 @@ limSendSmeJoinReassocRsp(tpAniSirGlobal pMac, tANI_U16 msgType, pSirSmeJoinRsp->length = (tANI_U16) rspLen; pSirSmeJoinRsp->statusCode = resultCode; pSirSmeJoinRsp->protStatusCode = protStatusCode; - + /* Update SME session ID and transaction Id */ pSirSmeJoinRsp->sessionId = smesessionId; pSirSmeJoinRsp->transactionId = smetransactionId; - + if(IS_MCC_SUPPORTED && limIsLinkSuspended( pMac ) ) { if( psessionEntry && psessionEntry->limSmeState == eLIM_SME_LINK_EST_STATE ) { - + #ifdef WLAN_FEATURE_11AC if (psessionEntry->vhtCapability) { ePhyChanBondState htSecondaryChannelOffset; /*Get 11ac cbState from 11n cbState*/ - htSecondaryChannelOffset = limGet11ACPhyCBState(pMac, + htSecondaryChannelOffset = limGet11ACPhyCBState(pMac, psessionEntry->currentOperChannel, psessionEntry->htSecondaryChannelOffset, psessionEntry->apCenterChan, psessionEntry); peSetResumeChannel( pMac, psessionEntry->currentOperChannel, htSecondaryChannelOffset); } - else + else #endif peSetResumeChannel( pMac, psessionEntry->currentOperChannel, psessionEntry->htSecondaryChannelOffset); } @@ -430,7 +443,7 @@ limSendSmeJoinReassocRsp(tpAniSirGlobal pMac, tANI_U16 msgType, { peSetResumeChannel( pMac, 0, 0); } - limResumeLink( pMac, limSendSmeJoinReassocRspAfterResume, + limResumeLink( pMac, limSendSmeJoinReassocRspAfterResume, (tANI_U32*) pSirSmeJoinRsp ); } else @@ -487,15 +500,15 @@ limSendSmeStartBssRsp(tpAniSirGlobal pMac, if(psessionEntry == NULL) { - - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pSirSmeRsp, size)) + pSirSmeRsp = vos_mem_malloc(size); + if ( NULL == pSirSmeRsp ) { /// Buffer not available. Log error - limLog(pMac, LOGP,FL("call to palAllocateMemory failed for eWNI_SME_START_BSS_RSP")); + limLog(pMac, LOGP,FL("call to AllocateMemory failed for eWNI_SME_START_BSS_RSP")); return; } - palZeroMemory(pMac, (tANI_U8*)pSirSmeRsp, size); - + vos_mem_set((tANI_U8*)pSirSmeRsp, size, 0); + } else { @@ -505,21 +518,22 @@ limSendSmeStartBssRsp(tpAniSirGlobal pMac, //calculate the memory size to allocate size += ieLen; - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pSirSmeRsp, size)) + pSirSmeRsp = vos_mem_malloc(size); + if ( NULL == pSirSmeRsp ) { /// Buffer not available. Log error limLog(pMac, LOGP, - FL("call to palAllocateMemory failed for eWNI_SME_START_BSS_RSP")); + FL("call to AllocateMemory failed for eWNI_SME_START_BSS_RSP")); return; } - palZeroMemory(pMac, (tANI_U8*)pSirSmeRsp, size); + vos_mem_set((tANI_U8*)pSirSmeRsp, size, 0); size = sizeof(tSirSmeStartBssRsp); if (resultCode == eSIR_SME_SUCCESS) { sirCopyMacAddr(pSirSmeRsp->bssDescription.bssId, psessionEntry->bssId); - + /* Read beacon interval from session */ pSirSmeRsp->bssDescription.beaconInterval = (tANI_U16) psessionEntry->beaconParams.beaconInterval; pSirSmeRsp->bssType = psessionEntry->bssType; @@ -533,19 +547,19 @@ limSendSmeStartBssRsp(tpAniSirGlobal pMac, #if 0 if (wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_CHANNEL, &len) != eSIR_SUCCESS) limLog(pMac, LOGP, FL("could not retrieve CURRENT_CHANNEL from CFG")); - -#endif// TO SUPPORT BT-AMP - + +#endif// TO SUPPORT BT-AMP + pSirSmeRsp->bssDescription.channelId = psessionEntry->currentOperChannel; pSirSmeRsp->bssDescription.aniIndicator = 1; curLen = pMac->sch.schObject.gSchBeaconOffsetBegin - ieOffset; - palCopyMemory( pMac->hHdd, (tANI_U8 *) &pSirSmeRsp->bssDescription.ieFields, + vos_mem_copy( (tANI_U8 *) &pSirSmeRsp->bssDescription.ieFields, pMac->sch.schObject.gSchBeaconFrameBegin + ieOffset, (tANI_U32)curLen); - palCopyMemory( pMac->hHdd, ((tANI_U8 *) &pSirSmeRsp->bssDescription.ieFields) + curLen, + vos_mem_copy( ((tANI_U8 *) &pSirSmeRsp->bssDescription.ieFields) + curLen, pMac->sch.schObject.gSchBeaconFrameEnd, (tANI_U32)pMac->sch.schObject.gSchBeaconOffsetEnd); @@ -558,9 +572,9 @@ limSendSmeStartBssRsp(tpAniSirGlobal pMac, size += ieLen - sizeof(tANI_U32); } + - - + } pSirSmeRsp->messageType = msgType; @@ -571,8 +585,8 @@ limSendSmeStartBssRsp(tpAniSirGlobal pMac, pSirSmeRsp->transactionId = smetransactionId; pSirSmeRsp->statusCode = resultCode; if(psessionEntry != NULL ) - pSirSmeRsp->staId = psessionEntry->staId; //else it will be always zero smeRsp StaID = 0 - + pSirSmeRsp->staId = psessionEntry->staId; //else it will be always zero smeRsp StaID = 0 + mmhMsg.type = msgType; mmhMsg.bodyptr = pSirSmeRsp; @@ -585,7 +599,7 @@ limSendSmeStartBssRsp(tpAniSirGlobal pMac, { MTRACE(macTraceMsgTx(pMac, psessionEntry->peSessionId, mmhMsg.type)); } -#ifdef FEATURE_WLAN_DIAG_SUPPORT_LIM //FEATURE_WLAN_DIAG_SUPPORT +#ifdef FEATURE_WLAN_DIAG_SUPPORT_LIM //FEATURE_WLAN_DIAG_SUPPORT limDiagEventReport(pMac, WLAN_PE_DIAG_START_BSS_RSP_EVENT, psessionEntry, (tANI_U16)resultCode, 0); #endif //FEATURE_WLAN_DIAG_SUPPORT @@ -653,11 +667,12 @@ limSendSmeScanRsp(tpAniSirGlobal pMac, tANI_U16 length, bssCount = 0; msgLen = 0; allocLength = LIM_MAX_NUM_OF_SCAN_RESULTS_REPORTED * LIM_SIZE_OF_EACH_BSS; - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pSirSmeScanRsp, allocLength)) + pSirSmeScanRsp = vos_mem_malloc(allocLength); + if ( NULL == pSirSmeScanRsp ) { // Log error limLog(pMac, LOGP, - FL("call to palAllocateMemory failed for eWNI_SME_SCAN_RSP")); + FL("call to AllocateMemory failed for eWNI_SME_SCAN_RSP")); return; } @@ -693,11 +708,12 @@ limSendSmeScanRsp(tpAniSirGlobal pMac, tANI_U16 length, mmhMsg.bodyval = 0; MTRACE(macTraceMsgTx(pMac, NO_SESSION, mmhMsg.type)); limSysProcessMmhMsgApi(pMac, &mmhMsg, ePROT); - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pSirSmeScanRsp, allocLength)) + pSirSmeScanRsp = vos_mem_malloc(allocLength); + if ( NULL == pSirSmeScanRsp ) { // Log error limLog(pMac, LOGP, - FL("call to palAllocateMemory failed for eWNI_SME_SCAN_RSP")); + FL("call to AllocateMemory failed for eWNI_SME_SCAN_RSP")); return; } msgLen = sizeof(tSirSmeScanRsp) - @@ -713,9 +729,9 @@ limSendSmeScanRsp(tpAniSirGlobal pMac, tANI_U16 length, msgLen, ptemp->bssDescription.length);) pDesc->length = ptemp->bssDescription.length; - palCopyMemory( pMac->hHdd, (tANI_U8 *) &pDesc->bssId, - (tANI_U8 *) &ptemp->bssDescription.bssId, - ptemp->bssDescription.length); + vos_mem_copy( (tANI_U8 *) &pDesc->bssId, + (tANI_U8 *) &ptemp->bssDescription.bssId, + ptemp->bssDescription.length); PELOG2(limLog(pMac, LOG2, FL("BssId ")); limPrintMacAddr(pMac, ptemp->bssDescription.bssId, LOG2);) @@ -732,7 +748,7 @@ limSendSmeScanRsp(tpAniSirGlobal pMac, tANI_U16 length, limPostSmeScanRspMessage(pMac, length, resultCode, smesessionId, smetranscationId); if (NULL != pSirSmeScanRsp) { - palFreeMemory( pMac->hHdd, pSirSmeScanRsp); + vos_mem_free( pSirSmeScanRsp); pSirSmeScanRsp = NULL; } } @@ -815,12 +831,12 @@ limSendSmeLfrScanRsp(tpAniSirGlobal pMac, tANI_U16 length, bssCount = 0; msgLen = 0; allocLength = LIM_MAX_NUM_OF_SCAN_RESULTS_REPORTED * LIM_SIZE_OF_EACH_BSS; - if ( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, - (void **)&pSirSmeScanRsp, allocLength)) + pSirSmeScanRsp = vos_mem_malloc(allocLength); + if ( NULL == pSirSmeScanRsp ) { // Log error limLog(pMac, LOGP, - FL("call to palAllocateMemory failed for eWNI_SME_SCAN_RSP\n")); + FL("call to AllocateMemory failed for eWNI_SME_SCAN_RSP\n")); return; } @@ -856,13 +872,12 @@ limSendSmeLfrScanRsp(tpAniSirGlobal pMac, tANI_U16 length, mmhMsg.bodyval = 0; MTRACE(macTraceMsgTx(pMac, NO_SESSION, mmhMsg.type)); limSysProcessMmhMsgApi(pMac, &mmhMsg, ePROT); - if (eHAL_STATUS_SUCCESS != palAllocateMemory(pMac->hHdd, - (void **)&pSirSmeScanRsp, - allocLength)) + pSirSmeScanRsp = vos_mem_malloc(allocLength); + if ( NULL == pSirSmeScanRsp ) { // Log error limLog(pMac, LOGP, - FL("call to palAllocateMemory failed for eWNI_SME_SCAN_RSP\n")); + FL("call to AllocateMemory failed for eWNI_SME_SCAN_RSP\n")); return; } msgLen = sizeof(tSirSmeScanRsp) - @@ -878,9 +893,9 @@ limSendSmeLfrScanRsp(tpAniSirGlobal pMac, tANI_U16 length, msgLen, ptemp->bssDescription.length);) pDesc->length = ptemp->bssDescription.length; - palCopyMemory( pMac->hHdd, (tANI_U8 *) &pDesc->bssId, - (tANI_U8 *) &ptemp->bssDescription.bssId, - ptemp->bssDescription.length); + vos_mem_copy( (tANI_U8 *) &pDesc->bssId, + (tANI_U8 *) &ptemp->bssDescription.bssId, + ptemp->bssDescription.length); PELOG2(limLog(pMac, LOG2, FL("BssId ")); limPrintMacAddr(pMac, ptemp->bssDescription.bssId, LOG2);) @@ -900,7 +915,7 @@ limSendSmeLfrScanRsp(tpAniSirGlobal pMac, tANI_U16 length, ptemp = pMac->lim.gLimCachedScanHashTable[i]; while(ptemp) { - if(palEqualMemory(pMac->hHdd, (tANI_U8* ) ptemp->bssDescription.ieFields+1, + if(vos_mem_compare((tANI_U8* ) ptemp->bssDescription.ieFields+1, (tANI_U8 *) &pSsid->length, (tANI_U8) (pSsid->length + 1))) { @@ -930,13 +945,12 @@ limSendSmeLfrScanRsp(tpAniSirGlobal pMac, tANI_U16 length, mmhMsg.bodyval = 0; MTRACE(macTraceMsgTx(pMac, NO_SESSION, mmhMsg.type)); limSysProcessMmhMsgApi(pMac, &mmhMsg, ePROT); - if (eHAL_STATUS_SUCCESS != palAllocateMemory(pMac->hHdd, - (void **)&pSirSmeScanRsp, - allocLength)) + pSirSmeScanRsp = vos_mem_malloc(allocLength); + if ( NULL == pSirSmeScanRsp ) { // Log error limLog(pMac, LOGP, - FL("call to palAllocateMemory failed for eWNI_SME_SCAN_RSP\n")); + FL("call to AllocateMemory failed for eWNI_SME_SCAN_RSP\n")); return; } msgLen = sizeof(tSirSmeScanRsp) - @@ -952,7 +966,7 @@ limSendSmeLfrScanRsp(tpAniSirGlobal pMac, tANI_U16 length, msgLen, ptemp->bssDescription.length);) pDesc->length = ptemp->bssDescription.length; - palCopyMemory( pMac->hHdd, (tANI_U8 *) &pDesc->bssId, + vos_mem_copy((tANI_U8 *) &pDesc->bssId, (tANI_U8 *) &ptemp->bssDescription.bssId, ptemp->bssDescription.length); @@ -971,7 +985,7 @@ limSendSmeLfrScanRsp(tpAniSirGlobal pMac, tANI_U16 length, limPostSmeScanRspMessage(pMac, length, resultCode, smesessionId, smetranscationId); if (NULL != pSirSmeScanRsp) { - palFreeMemory( pMac->hHdd, pSirSmeScanRsp); + vos_mem_free( pSirSmeScanRsp); pSirSmeScanRsp = NULL; } } @@ -1019,7 +1033,7 @@ limSendSmeLfrScanRsp(tpAniSirGlobal pMac, tANI_U16 length, */ void -limPostSmeScanRspMessage(tpAniSirGlobal pMac, +limPostSmeScanRspMessage(tpAniSirGlobal pMac, tANI_U16 length, tSirResultCodes resultCode,tANI_U8 smesessionId, tANI_U16 smetransactionId) { @@ -1030,12 +1044,13 @@ limPostSmeScanRspMessage(tpAniSirGlobal pMac, FL("limPostSmeScanRspMessage: send SME_SCAN_RSP (len %d, reasonCode %s). "), length, limResultCodeStr(resultCode));) - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pSirSmeScanRsp, length)) + pSirSmeScanRsp = vos_mem_malloc(length); + if ( NULL == pSirSmeScanRsp ) { - limLog(pMac, LOGP, FL("palAllocateMemory failed for eWNI_SME_SCAN_RSP")); + limLog(pMac, LOGP, FL("AllocateMemory failed for eWNI_SME_SCAN_RSP")); return; } - palZeroMemory(pMac->hHdd, (void*)pSirSmeScanRsp, length); + vos_mem_set((void*)pSirSmeScanRsp, length, 0); pSirSmeScanRsp->messageType = eWNI_SME_SCAN_RSP; pSirSmeScanRsp->length = length; @@ -1050,13 +1065,13 @@ limPostSmeScanRspMessage(tpAniSirGlobal pMac, /*Update SME session Id and transaction Id */ pSirSmeScanRsp->sessionId = smesessionId; pSirSmeScanRsp->transcationId = smetransactionId; - + mmhMsg.type = eWNI_SME_SCAN_RSP; mmhMsg.bodyptr = pSirSmeScanRsp; mmhMsg.bodyval = 0; MTRACE(macTraceMsgTx(pMac, NO_SESSION, mmhMsg.type)); -#ifdef FEATURE_WLAN_DIAG_SUPPORT_LIM //FEATURE_WLAN_DIAG_SUPPORT +#ifdef FEATURE_WLAN_DIAG_SUPPORT_LIM //FEATURE_WLAN_DIAG_SUPPORT limDiagEventReport(pMac, WLAN_PE_DIAG_SCAN_RSP_EVENT, NULL, (tANI_U16)resultCode, 0); #endif //FEATURE_WLAN_DIAG_SUPPORT @@ -1100,16 +1115,17 @@ void limSendSmeOemDataRsp(tpAniSirGlobal pMac, tANI_U32* pMsgBuf, tSirResultCode tLimMlmOemDataRsp* pMlmOemDataRsp=NULL; tANI_U16 msgLength; - + //get the pointer to the mlm message pMlmOemDataRsp = (tLimMlmOemDataRsp*)(pMsgBuf); msgLength = sizeof(tSirOemDataRsp); //now allocate memory for the char buffer - if(eHAL_STATUS_SUCCESS != palAllocateMemory(pMac->hHdd, (void**)&pSirSmeOemDataRsp, msgLength)) + pSirSmeOemDataRsp = vos_mem_malloc(msgLength); + if (NULL == pSirSmeOemDataRsp) { - limLog(pMac, LOGP, FL("call to palAllocateMemory failed for pSirSmeOemDataRsp")); + limLog(pMac, LOGP, FL("call to AllocateMemory failed for pSirSmeOemDataRsp")); return; } @@ -1121,10 +1137,10 @@ void limSendSmeOemDataRsp(tpAniSirGlobal pMac, tANI_U32* pMsgBuf, tSirResultCode pSirSmeOemDataRsp->messageType = eWNI_SME_OEM_DATA_RSP; #endif - palCopyMemory(pMac->hHdd, pSirSmeOemDataRsp->oemDataRsp, pMlmOemDataRsp->oemDataRsp, OEM_DATA_RSP_SIZE); + vos_mem_copy(pSirSmeOemDataRsp->oemDataRsp, pMlmOemDataRsp->oemDataRsp, OEM_DATA_RSP_SIZE); //Now free the memory from MLM Rsp Message - palFreeMemory(pMac->hHdd, pMlmOemDataRsp); + vos_mem_free(pMlmOemDataRsp); mmhMsg.type = eWNI_SME_OEM_DATA_RSP; mmhMsg.bodyptr = pSirSmeOemDataRsp; @@ -1174,34 +1190,34 @@ limSendSmeAuthRsp(tpAniSirGlobal pMac, tSirMsgQ mmhMsg; tSirSmeAuthRsp *pSirSmeAuthRsp; - - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pSirSmeAuthRsp, sizeof(tSirSmeAuthRsp))) + pSirSmeAuthRsp = vos_mem_malloc(sizeof(tSirSmeAuthRsp)); + if (NULL == pSirSmeAuthRsp) { // Log error limLog(pMac, LOGP, - FL("call to palAllocateMemory failed for eWNI_SME_AUTH_RSP")); + FL("call to AllocateMemory failed for eWNI_SME_AUTH_RSP")); return; } - + if(psessionEntry != NULL) { - palCopyMemory( pMac->hHdd, (tANI_U8 *) pSirSmeAuthRsp->peerMacAddr, + vos_mem_copy( (tANI_U8 *) pSirSmeAuthRsp->peerMacAddr, (tANI_U8 *) peerMacAddr, sizeof(tSirMacAddr)); pSirSmeAuthRsp->authType = authType; - + } pSirSmeAuthRsp->messageType = eWNI_SME_AUTH_RSP; pSirSmeAuthRsp->length = sizeof(tSirSmeAuthRsp); pSirSmeAuthRsp->statusCode = statusCode; pSirSmeAuthRsp->protStatusCode = protStatusCode; - + /* Update SME session and transaction Id*/ pSirSmeAuthRsp->sessionId = smesessionId; - pSirSmeAuthRsp->transactionId = smetransactionId; + pSirSmeAuthRsp->transactionId = smetransactionId; mmhMsg.type = eWNI_SME_AUTH_RSP; mmhMsg.bodyptr = pSirSmeAuthRsp; @@ -1269,7 +1285,7 @@ limSendSmeDisassocNtf(tpAniSirGlobal pMac, tSirSmeDisassocRsp *pSirSmeDisassocRsp; tSirSmeDisassocInd *pSirSmeDisassocInd; tANI_U32 *pMsg; - + switch (disassocTrigger) { case eLIM_PEER_ENTITY_DISASSOC: @@ -1281,11 +1297,12 @@ limSendSmeDisassocNtf(tpAniSirGlobal pMac, * host triggered disassociation */ - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pSirSmeDisassocRsp, sizeof(tSirSmeDisassocRsp))) + pSirSmeDisassocRsp = vos_mem_malloc(sizeof(tSirSmeDisassocRsp)); + if ( NULL == pSirSmeDisassocRsp ) { // Log error limLog(pMac, LOGP, - FL("call to palAllocateMemory failed for eWNI_SME_DISASSOC_RSP")); + FL("call to AllocateMemory failed for eWNI_SME_DISASSOC_RSP")); return; } @@ -1301,20 +1318,21 @@ limSendSmeDisassocNtf(tpAniSirGlobal pMac, limCopyU16(pBuf, smetransactionId); pBuf += sizeof(tANI_U16); - //statusCode + //statusCode limCopyU32(pBuf, reasonCode); pBuf += sizeof(tSirResultCodes); //peerMacAddr - palCopyMemory( pMac->hHdd, pBuf, peerMacAddr, sizeof(tSirMacAddr)); + vos_mem_copy( pBuf, peerMacAddr, sizeof(tSirMacAddr)); pBuf += sizeof(tSirMacAddr); // Clear Station Stats //for sta, it is always 1, IBSS is handled at halInitSta + +#ifdef FEATURE_WLAN_DIAG_SUPPORT_LIM //FEATURE_WLAN_DIAG_SUPPORT -#ifdef FEATURE_WLAN_DIAG_SUPPORT_LIM //FEATURE_WLAN_DIAG_SUPPORT limDiagEventReport(pMac, WLAN_PE_DIAG_DISASSOC_RSP_EVENT, psessionEntry, (tANI_U16)reasonCode, 0); #endif @@ -1327,18 +1345,19 @@ limSendSmeDisassocNtf(tpAniSirGlobal pMac, * frame reception from peer entity or due to * loss of link with peer entity. */ - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pSirSmeDisassocInd, sizeof(tSirSmeDisassocInd))) + pSirSmeDisassocInd = vos_mem_malloc(sizeof(tSirSmeDisassocInd)); + if ( NULL == pSirSmeDisassocInd ) { // Log error limLog(pMac, LOGP, - FL("call to palAllocateMemory failed for eWNI_SME_DISASSOC_IND")); + FL("call to AllocateMemory failed for eWNI_SME_DISASSOC_IND")); return; } pSirSmeDisassocInd->messageType = eWNI_SME_DISASSOC_IND; pSirSmeDisassocInd->length = sizeof(tSirSmeDisassocInd); - + /* Update SME session Id and Transaction Id */ pSirSmeDisassocInd->sessionId = smesessionId; pSirSmeDisassocInd->transactionId = smetransactionId; @@ -1348,13 +1367,13 @@ limSendSmeDisassocNtf(tpAniSirGlobal pMac, limCopyU32(pBuf, reasonCode); pBuf += sizeof(tSirResultCodes); - palCopyMemory( pMac->hHdd, pBuf, psessionEntry->bssId, sizeof(tSirMacAddr)); + vos_mem_copy( pBuf, psessionEntry->bssId, sizeof(tSirMacAddr)); pBuf += sizeof(tSirMacAddr); - palCopyMemory( pMac->hHdd, pBuf, peerMacAddr, sizeof(tSirMacAddr)); + vos_mem_copy( pBuf, peerMacAddr, sizeof(tSirMacAddr)); -#ifdef FEATURE_WLAN_DIAG_SUPPORT_LIM //FEATURE_WLAN_DIAG_SUPPORT +#ifdef FEATURE_WLAN_DIAG_SUPPORT_LIM //FEATURE_WLAN_DIAG_SUPPORT limDiagEventReport(pMac, WLAN_PE_DIAG_DISASSOC_IND_EVENT, psessionEntry, (tANI_U16)reasonCode, 0); #endif @@ -1369,7 +1388,7 @@ limSendSmeDisassocNtf(tpAniSirGlobal pMac, { peDeleteSession(pMac,psessionEntry); } - + limSendSmeDisassocDeauthNtf( pMac, eHAL_STATUS_SUCCESS, (tANI_U32*) pMsg ); } /*** end limSendSmeDisassocNtf() ***/ @@ -1377,14 +1396,14 @@ limSendSmeDisassocNtf(tpAniSirGlobal pMac, /** ----------------------------------------------------------------- \brief limSendSmeDisassocInd() - sends SME_DISASSOC_IND - - After receiving disassociation frame from peer entity, this + + After receiving disassociation frame from peer entity, this function sends a eWNI_SME_DISASSOC_IND to SME with a specific - reason code. - + reason code. + \param pMac - global mac structure - \param pStaDs - station dph hash node - \return none + \param pStaDs - station dph hash node + \return none \sa ----------------------------------------------------------------- */ void @@ -1393,9 +1412,10 @@ limSendSmeDisassocInd(tpAniSirGlobal pMac, tpDphHashNode pStaDs,tpPESession pses tSirMsgQ mmhMsg; tSirSmeDisassocInd *pSirSmeDisassocInd; - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pSirSmeDisassocInd, sizeof(tSirSmeDisassocInd))) + pSirSmeDisassocInd = vos_mem_malloc(sizeof(tSirSmeDisassocInd)); + if ( NULL == pSirSmeDisassocInd ) { - limLog(pMac, LOGP, FL("palAllocateMemory failed for eWNI_SME_DISASSOC_IND")); + limLog(pMac, LOGP, FL("AllocateMemory failed for eWNI_SME_DISASSOC_IND")); return; } @@ -1407,9 +1427,9 @@ limSendSmeDisassocInd(tpAniSirGlobal pMac, tpDphHashNode pStaDs,tpPESession pses pSirSmeDisassocInd->statusCode = pStaDs->mlmStaContext.disassocReason; pSirSmeDisassocInd->reasonCode = pStaDs->mlmStaContext.disassocReason; - palCopyMemory( pMac->hHdd, pSirSmeDisassocInd->bssId , psessionEntry->bssId , sizeof(tSirMacAddr)); + vos_mem_copy( pSirSmeDisassocInd->bssId, psessionEntry->bssId, sizeof(tSirMacAddr)); - palCopyMemory( pMac->hHdd, pSirSmeDisassocInd->peerMacAddr , pStaDs->staAddr, sizeof(tSirMacAddr)); + vos_mem_copy( pSirSmeDisassocInd->peerMacAddr, pStaDs->staAddr, sizeof(tSirMacAddr)); pSirSmeDisassocInd->staId = pStaDs->staIndex; @@ -1418,36 +1438,37 @@ limSendSmeDisassocInd(tpAniSirGlobal pMac, tpDphHashNode pStaDs,tpPESession pses mmhMsg.bodyval = 0; MTRACE(macTraceMsgTx(pMac, psessionEntry->peSessionId, mmhMsg.type)); -#ifdef FEATURE_WLAN_DIAG_SUPPORT_LIM //FEATURE_WLAN_DIAG_SUPPORT - limDiagEventReport(pMac, WLAN_PE_DIAG_DISASSOC_IND_EVENT, psessionEntry, 0, (tANI_U16)pStaDs->mlmStaContext.disassocReason); +#ifdef FEATURE_WLAN_DIAG_SUPPORT_LIM //FEATURE_WLAN_DIAG_SUPPORT + limDiagEventReport(pMac, WLAN_PE_DIAG_DISASSOC_IND_EVENT, psessionEntry, 0, (tANI_U16)pStaDs->mlmStaContext.disassocReason); #endif //FEATURE_WLAN_DIAG_SUPPORT limSysProcessMmhMsgApi(pMac, &mmhMsg, ePROT); - + } /*** end limSendSmeDisassocInd() ***/ /** ----------------------------------------------------------------- \brief limSendSmeDeauthInd() - sends SME_DEAUTH_IND - - After receiving deauthentication frame from peer entity, this + + After receiving deauthentication frame from peer entity, this function sends a eWNI_SME_DEAUTH_IND to SME with a specific - reason code. - + reason code. + \param pMac - global mac structure - \param pStaDs - station dph hash node - \return none + \param pStaDs - station dph hash node + \return none \sa ----------------------------------------------------------------- */ void -limSendSmeDeauthInd(tpAniSirGlobal pMac, tpDphHashNode pStaDs, tpPESession psessionEntry) +limSendSmeDeauthInd(tpAniSirGlobal pMac, tpDphHashNode pStaDs, tpPESession psessionEntry) { tSirMsgQ mmhMsg; tSirSmeDeauthInd *pSirSmeDeauthInd; - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pSirSmeDeauthInd, sizeof(tSirSmeDeauthInd))) + pSirSmeDeauthInd = vos_mem_malloc(sizeof(tSirSmeDeauthInd)); + if ( NULL == pSirSmeDeauthInd ) { - limLog(pMac, LOGP, FL("palAllocateMemory failed for eWNI_SME_DEAUTH_IND ")); + limLog(pMac, LOGP, FL("AllocateMemory failed for eWNI_SME_DEAUTH_IND ")); return; } @@ -1466,9 +1487,9 @@ limSendSmeDeauthInd(tpAniSirGlobal pMac, tpDphHashNode pStaDs, tpPESession psess pSirSmeDeauthInd->statusCode = (tSirResultCodes)pStaDs->mlmStaContext.disassocReason; } //BSSID - palCopyMemory( pMac->hHdd, pSirSmeDeauthInd->bssId, psessionEntry->bssId, sizeof(tSirMacAddr)); + vos_mem_copy( pSirSmeDeauthInd->bssId, psessionEntry->bssId, sizeof(tSirMacAddr)); //peerMacAddr - palCopyMemory( pMac->hHdd, pSirSmeDeauthInd->peerMacAddr, pStaDs->staAddr, sizeof(tSirMacAddr)); + vos_mem_copy( pSirSmeDeauthInd->peerMacAddr, pStaDs->staAddr, sizeof(tSirMacAddr)); pSirSmeDeauthInd->reasonCode = pStaDs->mlmStaContext.disassocReason; @@ -1479,7 +1500,7 @@ limSendSmeDeauthInd(tpAniSirGlobal pMac, tpDphHashNode pStaDs, tpPESession psess mmhMsg.bodyval = 0; MTRACE(macTraceMsgTx(pMac, psessionEntry->peSessionId, mmhMsg.type)); -#ifdef FEATURE_WLAN_DIAG_SUPPORT_LIM //FEATURE_WLAN_DIAG_SUPPORT +#ifdef FEATURE_WLAN_DIAG_SUPPORT_LIM //FEATURE_WLAN_DIAG_SUPPORT limDiagEventReport(pMac, WLAN_PE_DIAG_DEAUTH_IND_EVENT, psessionEntry, 0, pStaDs->mlmStaContext.cleanupTrigger); #endif //FEATURE_WLAN_DIAG_SUPPORT @@ -1513,9 +1534,10 @@ limSendSmeTDLSDelStaInd(tpAniSirGlobal pMac, tpDphHashNode pStaDs, tpPESession p tSirMsgQ mmhMsg; tSirTdlsDelStaInd *pSirTdlsDelStaInd; - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pSirTdlsDelStaInd, sizeof(tSirTdlsDelStaInd))) + pSirTdlsDelStaInd = vos_mem_malloc(sizeof(tSirTdlsDelStaInd)); + if ( NULL == pSirTdlsDelStaInd ) { - limLog(pMac, LOGP, FL("palAllocateMemory failed for eWNI_SME_TDLS_DEL_STA_IND ")); + limLog(pMac, LOGP, FL("AllocateMemory failed for eWNI_SME_TDLS_DEL_STA_IND ")); return; } @@ -1527,7 +1549,7 @@ limSendSmeTDLSDelStaInd(tpAniSirGlobal pMac, tpDphHashNode pStaDs, tpPESession p pSirTdlsDelStaInd->sessionId = psessionEntry->smeSessionId; //peerMacAddr - palCopyMemory( pMac->hHdd, pSirTdlsDelStaInd->peerMac, pStaDs->staAddr, sizeof(tSirMacAddr)); + vos_mem_copy( pSirTdlsDelStaInd->peerMac, pStaDs->staAddr, sizeof(tSirMacAddr)); //staId limCopyU16((tANI_U8*)(&pSirTdlsDelStaInd->staId), (tANI_U16)pStaDs->staIndex); @@ -1568,9 +1590,10 @@ limSendSmeTDLSDeleteAllPeerInd(tpAniSirGlobal pMac, tpPESession psessionEntry) tSirMsgQ mmhMsg; tSirTdlsDelAllPeerInd *pSirTdlsDelAllPeerInd; - if ( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pSirTdlsDelAllPeerInd, sizeof(tSirTdlsDelAllPeerInd))) + pSirTdlsDelAllPeerInd = vos_mem_malloc(sizeof(tSirTdlsDelAllPeerInd)); + if ( NULL == pSirTdlsDelAllPeerInd ) { - limLog(pMac, LOGP, FL("palAllocateMemory failed for eWNI_SME_TDLS_DEL_ALL_PEER_IND")); + limLog(pMac, LOGP, FL("AllocateMemory failed for eWNI_SME_TDLS_DEL_ALL_PEER_IND")); return; } @@ -1617,9 +1640,10 @@ limSendSmeMgmtTXCompletion(tpAniSirGlobal pMac, tSirMsgQ mmhMsg; tSirMgmtTxCompletionInd *pSirMgmtTxCompletionInd; - if ( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pSirMgmtTxCompletionInd, sizeof(tSirMgmtTxCompletionInd))) + pSirMgmtTxCompletionInd = vos_mem_malloc(sizeof(tSirMgmtTxCompletionInd)); + if ( NULL == pSirMgmtTxCompletionInd ) { - limLog(pMac, LOGP, FL("palAllocateMemory failed for eWNI_SME_MGMT_FRM_TX_COMPLETION_IND")); + limLog(pMac, LOGP, FL("AllocateMemory failed for eWNI_SME_MGMT_FRM_TX_COMPLETION_IND")); return; } @@ -1681,22 +1705,23 @@ limSendSmeDeauthNtf(tpAniSirGlobal pMac, tSirMacAddr peerMacAddr, tSirResultCode tANI_U8 sessionId; tANI_U32 *pMsg; - psessionEntry = peFindSessionByBssid(pMac,peerMacAddr,&sessionId); + psessionEntry = peFindSessionByBssid(pMac,peerMacAddr,&sessionId); switch (deauthTrigger) { case eLIM_PEER_ENTITY_DEAUTH: return; - + case eLIM_HOST_DEAUTH: /** * Deauthentication response to host triggered * deauthentication. */ - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pSirSmeDeauthRsp, sizeof(tSirSmeDeauthRsp))) + pSirSmeDeauthRsp = vos_mem_malloc(sizeof(tSirSmeDeauthRsp)); + if ( NULL == pSirSmeDeauthRsp ) { // Log error limLog(pMac, LOGP, - FL("call to palAllocateMemory failed for eWNI_SME_DEAUTH_RSP")); + FL("call to AllocateMemory failed for eWNI_SME_DEAUTH_RSP")); return; } @@ -1705,12 +1730,12 @@ limSendSmeDeauthNtf(tpAniSirGlobal pMac, tSirMacAddr peerMacAddr, tSirResultCode pSirSmeDeauthRsp->length = sizeof(tSirSmeDeauthRsp); pSirSmeDeauthRsp->statusCode = reasonCode; pSirSmeDeauthRsp->sessionId = smesessionId; - pSirSmeDeauthRsp->transactionId = smetransactionId; + pSirSmeDeauthRsp->transactionId = smetransactionId; pBuf = (tANI_U8 *) pSirSmeDeauthRsp->peerMacAddr; - palCopyMemory( pMac->hHdd, pBuf, peerMacAddr, sizeof(tSirMacAddr)); + vos_mem_copy( pBuf, peerMacAddr, sizeof(tSirMacAddr)); -#ifdef FEATURE_WLAN_DIAG_SUPPORT_LIM //FEATURE_WLAN_DIAG_SUPPORT +#ifdef FEATURE_WLAN_DIAG_SUPPORT_LIM //FEATURE_WLAN_DIAG_SUPPORT limDiagEventReport(pMac, WLAN_PE_DIAG_DEAUTH_RSP_EVENT, psessionEntry, 0, (tANI_U16)reasonCode); #endif @@ -1724,11 +1749,12 @@ limSendSmeDeauthNtf(tpAniSirGlobal pMac, tSirMacAddr peerMacAddr, tSirResultCode * frame reception from peer entity or due to * loss of link with peer entity. */ - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pSirSmeDeauthInd, sizeof(tSirSmeDeauthInd))) + pSirSmeDeauthInd = vos_mem_malloc(sizeof(tSirSmeDeauthInd)); + if ( NULL == pSirSmeDeauthInd ) { // Log error limLog(pMac, LOGP, - FL("call to palAllocateMemory failed for eWNI_SME_DEAUTH_Ind")); + FL("call to AllocateMemory failed for eWNI_SME_DEAUTH_Ind")); return; } @@ -1750,13 +1776,13 @@ limSendSmeDeauthNtf(tpAniSirGlobal pMac, tSirMacAddr peerMacAddr, tSirResultCode pBuf += sizeof(tSirResultCodes); //bssId - palCopyMemory( pMac->hHdd, pBuf, psessionEntry->bssId, sizeof(tSirMacAddr)); + vos_mem_copy( pBuf, psessionEntry->bssId, sizeof(tSirMacAddr)); pBuf += sizeof(tSirMacAddr); //peerMacAddr - palCopyMemory( pMac->hHdd, pSirSmeDeauthInd->peerMacAddr, peerMacAddr, sizeof(tSirMacAddr)); + vos_mem_copy( pSirSmeDeauthInd->peerMacAddr, peerMacAddr, sizeof(tSirMacAddr)); -#ifdef FEATURE_WLAN_DIAG_SUPPORT_LIM //FEATURE_WLAN_DIAG_SUPPORT +#ifdef FEATURE_WLAN_DIAG_SUPPORT_LIM //FEATURE_WLAN_DIAG_SUPPORT limDiagEventReport(pMac, WLAN_PE_DIAG_DEAUTH_IND_EVENT, psessionEntry, 0, (tANI_U16)reasonCode); #endif //FEATURE_WLAN_DIAG_SUPPORT @@ -1764,12 +1790,12 @@ limSendSmeDeauthNtf(tpAniSirGlobal pMac, tSirMacAddr peerMacAddr, tSirResultCode break; } - + /*Delete the PE session created */ if(psessionEntry != NULL) { peDeleteSession(pMac,psessionEntry); - } + } limSendSmeDisassocDeauthNtf( pMac, eHAL_STATUS_SUCCESS, (tANI_U32*) pMsg ); @@ -1807,17 +1833,11 @@ limSendSmeWmStatusChangeNtf(tpAniSirGlobal pMac, tSirSmeStatusChangeCode statusC { tSirMsgQ mmhMsg; tSirSmeWmStatusChangeNtf *pSirSmeWmStatusChangeNtf; - eHalStatus status; - - - - status = palAllocateMemory( pMac->hHdd, (void **)&pSirSmeWmStatusChangeNtf, - sizeof(tSirSmeWmStatusChangeNtf)); - if (status != eHAL_STATUS_SUCCESS) + pSirSmeWmStatusChangeNtf = vos_mem_malloc(sizeof(tSirSmeWmStatusChangeNtf)); + if ( NULL == pSirSmeWmStatusChangeNtf ) { limLog(pMac, LOGE, - FL("call to palAllocateMemory failed for eWNI_SME_WM_STATUS_CHANGE_NTF, status = %d"), - status); + FL("call to AllocateMemory failed for eWNI_SME_WM_STATUS_CHANGE_NTF")); return; } @@ -1849,7 +1869,8 @@ limSendSmeWmStatusChangeNtf(tpAniSirGlobal pMac, tSirSmeStatusChangeCode statusC pSirSmeWmStatusChangeNtf->sessionId = sessionId; if(sizeof(pSirSmeWmStatusChangeNtf->statusChangeInfo) >= infoLen) { - palCopyMemory( pMac->hHdd, (tANI_U8 *)&pSirSmeWmStatusChangeNtf->statusChangeInfo, (tANI_U8 *)pStatusChangeInfo, infoLen); + vos_mem_copy( (tANI_U8 *)&pSirSmeWmStatusChangeNtf->statusChangeInfo, + (tANI_U8 *)pStatusChangeInfo, infoLen); } limLog(pMac, LOGE, FL("***---*** StatusChg: code 0x%x, length %d ***---***"), statusChangeCode, infoLen); @@ -1860,7 +1881,7 @@ limSendSmeWmStatusChangeNtf(tpAniSirGlobal pMac, tSirSmeStatusChangeCode statusC MTRACE(macTraceMsgTx(pMac, sessionId, mmhMsg.type)); if (eSIR_SUCCESS != limSysProcessMmhMsgApi(pMac, &mmhMsg, ePROT)) { - palFreeMemory(pMac->hHdd, (void *) pSirSmeWmStatusChangeNtf); + vos_mem_free(pSirSmeWmStatusChangeNtf); limLog( pMac, LOGP, FL("limSysProcessMmhMsgApi failed")); } @@ -1904,11 +1925,12 @@ limSendSmeSetContextRsp(tpAniSirGlobal pMac, tSirMsgQ mmhMsg; tSirSmeSetContextRsp *pSirSmeSetContextRsp; - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pSirSmeSetContextRsp, sizeof(tSirSmeSetContextRsp))) + pSirSmeSetContextRsp = vos_mem_malloc(sizeof(tSirSmeSetContextRsp)); + if ( NULL == pSirSmeSetContextRsp ) { // Log error limLog(pMac, LOGP, - FL("call to palAllocateMemory failed for SmeSetContextRsp")); + FL("call to AllocateMemory failed for SmeSetContextRsp")); return; } @@ -1919,7 +1941,7 @@ limSendSmeSetContextRsp(tpAniSirGlobal pMac, pBuf = pSirSmeSetContextRsp->peerMacAddr; - palCopyMemory( pMac->hHdd, pBuf, (tANI_U8 *) peerMacAddr, sizeof(tSirMacAddr)); + vos_mem_copy( pBuf, (tANI_U8 *) peerMacAddr, sizeof(tSirMacAddr)); pBuf += sizeof(tSirMacAddr); @@ -1939,10 +1961,10 @@ limSendSmeSetContextRsp(tpAniSirGlobal pMac, MTRACE(macTraceMsgTx(pMac, psessionEntry->peSessionId, mmhMsg.type)); } -#ifdef FEATURE_WLAN_DIAG_SUPPORT_LIM //FEATURE_WLAN_DIAG_SUPPORT +#ifdef FEATURE_WLAN_DIAG_SUPPORT_LIM //FEATURE_WLAN_DIAG_SUPPORT limDiagEventReport(pMac, WLAN_PE_DIAG_SETCONTEXT_RSP_EVENT, psessionEntry, (tANI_U16)resultCode, 0); #endif //FEATURE_WLAN_DIAG_SUPPORT - + limSysProcessMmhMsgApi(pMac, &mmhMsg, ePROT); } /*** end limSendSmeSetContextRsp() ***/ @@ -1983,33 +2005,32 @@ limSendSmeRemoveKeyRsp(tpAniSirGlobal pMac, tSirMsgQ mmhMsg; tSirSmeRemoveKeyRsp *pSirSmeRemoveKeyRsp; - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pSirSmeRemoveKeyRsp, sizeof(tSirSmeRemoveKeyRsp))) + pSirSmeRemoveKeyRsp = vos_mem_malloc(sizeof(tSirSmeRemoveKeyRsp)); + if ( NULL == pSirSmeRemoveKeyRsp ) { // Log error limLog(pMac, LOGP, - FL("call to palAllocateMemory failed for SmeRemoveKeyRsp")); + FL("call to AllocateMemory failed for SmeRemoveKeyRsp")); return; } - + if(psessionEntry != NULL) { pBuf = pSirSmeRemoveKeyRsp->peerMacAddr; - palCopyMemory( pMac->hHdd, pBuf, (tANI_U8 *) peerMacAddr, sizeof(tSirMacAddr)); - pBuf += sizeof(tSirMacAddr); - limCopyU32(pBuf, resultCode); + vos_mem_copy( pBuf, (tANI_U8 *) peerMacAddr, sizeof(tSirMacAddr)); } - + pSirSmeRemoveKeyRsp->messageType = eWNI_SME_REMOVEKEY_RSP; pSirSmeRemoveKeyRsp->length = sizeof(tSirSmeRemoveKeyRsp); pSirSmeRemoveKeyRsp->statusCode = resultCode; - + /* Update SME session and transaction Id*/ pSirSmeRemoveKeyRsp->sessionId = smesessionId; - pSirSmeRemoveKeyRsp->transactionId = smetransactionId; - + pSirSmeRemoveKeyRsp->transactionId = smetransactionId; + mmhMsg.type = eWNI_SME_REMOVEKEY_RSP; mmhMsg.bodyptr = pSirSmeRemoveKeyRsp; mmhMsg.bodyval = 0; @@ -2053,10 +2074,11 @@ limSendSmePromiscuousModeRsp(tpAniSirGlobal pMac) tSirMsgQ mmhMsg; tSirMbMsg *pMbMsg; - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pMbMsg, sizeof(tSirMbMsg))) + pMbMsg = vos_mem_malloc(sizeof(tSirMbMsg)); + if ( NULL == pMbMsg ) { // Log error - limLog(pMac, LOGP, FL("call to palAllocateMemory failed")); + limLog(pMac, LOGP, FL("call to AllocateMemory failed")); return; } @@ -2133,11 +2155,12 @@ limSendSmeNeighborBssInd(tpAniSirGlobal pMac, * and length of header itself */ val = pBssDescr->bssDescription.length + sizeof(tANI_U16) + sizeof(tANI_U32) + sizeof(tANI_U8); - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pNewBssInd, val)) + pNewBssInd = vos_mem_malloc(val); + if ( NULL == pNewBssInd ) { // Log error limLog(pMac, LOGP, - FL("call to palAllocateMemory failed for eWNI_SME_NEIGHBOR_BSS_IND")); + FL("call to AllocateMemory failed for eWNI_SME_NEIGHBOR_BSS_IND")); return; } @@ -2146,7 +2169,7 @@ limSendSmeNeighborBssInd(tpAniSirGlobal pMac, pNewBssInd->length = (tANI_U16) val; pNewBssInd->sessionId = 0; - palCopyMemory( pMac->hHdd, (tANI_U8 *) pNewBssInd->bssDescription, + vos_mem_copy( (tANI_U8 *) pNewBssInd->bssDescription, (tANI_U8 *) &pBssDescr->bssDescription, pBssDescr->bssDescription.length + sizeof(tANI_U16)); @@ -2158,9 +2181,9 @@ limSendSmeNeighborBssInd(tpAniSirGlobal pMac, } /*** end limSendSmeNeighborBssInd() ***/ /** ----------------------------------------------------------------- - \brief limSendSmeAddtsRsp() - sends SME ADDTS RSP - \ This function sends a eWNI_SME_ADDTS_RSP to SME. - \ SME only looks at rc and tspec field. + \brief limSendSmeAddtsRsp() - sends SME ADDTS RSP + \ This function sends a eWNI_SME_ADDTS_RSP to SME. + \ SME only looks at rc and tspec field. \param pMac - global mac structure \param rspReqd - is SmeAddTsRsp required \param status - status code of SME_ADD_TS_RSP @@ -2168,8 +2191,8 @@ limSendSmeNeighborBssInd(tpAniSirGlobal pMac, \sa ----------------------------------------------------------------- */ void -limSendSmeAddtsRsp(tpAniSirGlobal pMac, tANI_U8 rspReqd, tANI_U32 status, tpPESession psessionEntry, - tSirMacTspecIE tspec, tANI_U8 smesessionId, tANI_U16 smetransactionId) +limSendSmeAddtsRsp(tpAniSirGlobal pMac, tANI_U8 rspReqd, tANI_U32 status, tpPESession psessionEntry, + tSirMacTspecIE tspec, tANI_U8 smesessionId, tANI_U16 smetransactionId) { tpSirAddtsRsp rsp; tSirMsgQ mmhMsg; @@ -2177,23 +2200,23 @@ limSendSmeAddtsRsp(tpAniSirGlobal pMac, tANI_U8 rspReqd, tANI_U32 status, tpPESe if (! rspReqd) return; - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&rsp, sizeof(tSirAddtsRsp))) + rsp = vos_mem_malloc(sizeof(tSirAddtsRsp)); + if ( NULL == rsp ) { - limLog(pMac, LOGP, FL("palAllocateMemory failed for ADDTS_RSP")); + limLog(pMac, LOGP, FL("AllocateMemory failed for ADDTS_RSP")); return; } - palZeroMemory( pMac->hHdd, (tANI_U8 *) rsp, sizeof(*rsp)); + vos_mem_set( (tANI_U8 *) rsp, sizeof(*rsp), 0); rsp->messageType = eWNI_SME_ADDTS_RSP; rsp->rc = status; rsp->rsp.status = (enum eSirMacStatusCodes) status; - //palCopyMemory( pMac->hHdd, (tANI_U8 *) &rsp->rsp.tspec, (tANI_U8 *) &addts->tspec, sizeof(addts->tspec)); + //vos_mem_copy( (tANI_U8 *) &rsp->rsp.tspec, (tANI_U8 *) &addts->tspec, sizeof(addts->tspec)); rsp->rsp.tspec = tspec; - /* Update SME session Id and transcation Id */ rsp->sessionId = smesessionId; rsp->transactionId = smetransactionId; - + mmhMsg.type = eWNI_SME_ADDTS_RSP; mmhMsg.bodyptr = rsp; mmhMsg.bodyval = 0; @@ -2205,10 +2228,10 @@ limSendSmeAddtsRsp(tpAniSirGlobal pMac, tANI_U8 rspReqd, tANI_U32 status, tpPESe { MTRACE(macTraceMsgTx(pMac, psessionEntry->peSessionId, mmhMsg.type)); } -#ifdef FEATURE_WLAN_DIAG_SUPPORT_LIM //FEATURE_WLAN_DIAG_SUPPORT +#ifdef FEATURE_WLAN_DIAG_SUPPORT_LIM //FEATURE_WLAN_DIAG_SUPPORT limDiagEventReport(pMac, WLAN_PE_DIAG_ADDTS_RSP_EVENT, psessionEntry, 0, 0); #endif //FEATURE_WLAN_DIAG_SUPPORT - + limSysProcessMmhMsgApi(pMac, &mmhMsg, ePROT); return; } @@ -2224,17 +2247,18 @@ limSendSmeAddtsInd(tpAniSirGlobal pMac, tpSirAddtsReqInfo addts) addts->tspec.tsinfo.traffic.tsid, addts->tspec.tsinfo.traffic.userPrio); - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&rsp, sizeof(tSirAddtsRsp))) + rsp = vos_mem_malloc(sizeof(tSirAddtsRsp)); + if ( NULL == rsp ) { // Log error - limLog(pMac, LOGP, FL("palAllocateMemory failed for ADDTS_IND")); + limLog(pMac, LOGP, FL("AllocateMemory failed for ADDTS_IND")); return; } - palZeroMemory( pMac->hHdd, (tANI_U8 *) rsp, sizeof(*rsp)); + vos_mem_set( (tANI_U8 *) rsp, sizeof(*rsp), 0); rsp->messageType = eWNI_SME_ADDTS_IND; - palCopyMemory( pMac->hHdd, (tANI_U8 *) &rsp->rsp, (tANI_U8 *) addts, sizeof(*addts)); + vos_mem_copy( (tANI_U8 *) &rsp->rsp, (tANI_U8 *) addts, sizeof(*addts)); mmhMsg.type = eWNI_SME_ADDTS_IND; mmhMsg.bodyptr = rsp; @@ -2257,23 +2281,24 @@ limSendSmeDeltsRsp(tpAniSirGlobal pMac, tpSirDeltsReq delts, tANI_U32 status,tpP if (! delts->rspReqd) return; - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&rsp, sizeof(tSirDeltsRsp))) + rsp = vos_mem_malloc(sizeof(tSirDeltsRsp)); + if ( NULL == rsp ) { // Log error - limLog(pMac, LOGP, FL("palAllocateMemory failed for DELTS_RSP")); + limLog(pMac, LOGP, FL("AllocateMemory failed for DELTS_RSP")); return; } - palZeroMemory( pMac->hHdd, (tANI_U8 *) rsp, sizeof(*rsp)); - + vos_mem_set( (tANI_U8 *) rsp, sizeof(*rsp), 0); + if(psessionEntry != NULL) { - + rsp->aid = delts->aid; - palCopyMemory( pMac->hHdd, (tANI_U8 *) &rsp->macAddr[0], (tANI_U8 *) &delts->macAddr[0], 6); - palCopyMemory( pMac->hHdd, (tANI_U8 *) &rsp->rsp, (tANI_U8 *) &delts->req, sizeof(tSirDeltsReqInfo)); - } - + vos_mem_copy( (tANI_U8 *) &rsp->macAddr[0], (tANI_U8 *) &delts->macAddr[0], 6); + vos_mem_copy( (tANI_U8 *) &rsp->rsp, (tANI_U8 *) &delts->req, sizeof(tSirDeltsReqInfo)); + } + rsp->messageType = eWNI_SME_DELTS_RSP; rsp->rc = status; @@ -2292,10 +2317,10 @@ limSendSmeDeltsRsp(tpAniSirGlobal pMac, tpSirDeltsReq delts, tANI_U32 status,tpP { MTRACE(macTraceMsgTx(pMac, psessionEntry->peSessionId, mmhMsg.type)); } -#ifdef FEATURE_WLAN_DIAG_SUPPORT_LIM //FEATURE_WLAN_DIAG_SUPPORT +#ifdef FEATURE_WLAN_DIAG_SUPPORT_LIM //FEATURE_WLAN_DIAG_SUPPORT limDiagEventReport(pMac, WLAN_PE_DIAG_DELTS_RSP_EVENT, psessionEntry, (tANI_U16)status, 0); #endif //FEATURE_WLAN_DIAG_SUPPORT - + limSysProcessMmhMsgApi(pMac, &mmhMsg, ePROT); } @@ -2310,18 +2335,19 @@ limSendSmeDeltsInd(tpAniSirGlobal pMac, tpSirDeltsReqInfo delts, tANI_U16 aid,tp delts->tsinfo.traffic.tsid, delts->tsinfo.traffic.userPrio); - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&rsp, sizeof(tSirDeltsRsp))) + rsp = vos_mem_malloc(sizeof(tSirDeltsRsp)); + if ( NULL == rsp ) { // Log error - limLog(pMac, LOGP, FL("palAllocateMemory failed for DELTS_IND")); + limLog(pMac, LOGP, FL("AllocateMemory failed for DELTS_IND")); return; } - palZeroMemory( pMac->hHdd, (tANI_U8 *) rsp, sizeof(*rsp)); + vos_mem_set( (tANI_U8 *) rsp, sizeof(*rsp), 0); rsp->messageType = eWNI_SME_DELTS_IND; rsp->rc = eSIR_SUCCESS; rsp->aid = aid; - palCopyMemory( pMac->hHdd, (tANI_U8 *) &rsp->rsp, (tANI_U8 *) delts, sizeof(*delts)); + vos_mem_copy( (tANI_U8 *) &rsp->rsp, (tANI_U8 *) delts, sizeof(*delts)); /* Update SME session Id and SME transaction Id */ @@ -2332,7 +2358,7 @@ limSendSmeDeltsInd(tpAniSirGlobal pMac, tpSirDeltsReqInfo delts, tANI_U16 aid,tp mmhMsg.bodyptr = rsp; mmhMsg.bodyval = 0; MTRACE(macTraceMsgTx(pMac, psessionEntry->peSessionId, mmhMsg.type)); -#ifdef FEATURE_WLAN_DIAG_SUPPORT_LIM //FEATURE_WLAN_DIAG_SUPPORT +#ifdef FEATURE_WLAN_DIAG_SUPPORT_LIM //FEATURE_WLAN_DIAG_SUPPORT limDiagEventReport(pMac, WLAN_PE_DIAG_DELTS_IND_EVENT, psessionEntry, 0, 0); #endif //FEATURE_WLAN_DIAG_SUPPORT @@ -2358,9 +2384,9 @@ limSendSmeDeltsInd(tpAniSirGlobal pMac, tpSirDeltsReqInfo delts, tANI_U16 aid,tp * NA * * @param pMac Pointer to Global MAC structure - * @param p80211Stats Statistics sent in response + * @param p80211Stats Statistics sent in response * @param resultCode TODO: - * + * * * @return none */ @@ -2384,18 +2410,18 @@ limSendSmeStatsRsp(tpAniSirGlobal pMac, tANI_U16 msgType, void* stats) break; case WDA_STAT_SUMM_RSP: mmhMsg.type = eWNI_SME_STAT_SUMM_RSP; - break; + break; default: mmhMsg.type = msgType; //Response from within PE break; } - pMsgHdr->messageType = mmhMsg.type; + pMsgHdr->messageType = mmhMsg.type; mmhMsg.bodyptr = stats; mmhMsg.bodyval = 0; MTRACE(macTraceMsgTx(pMac, NO_SESSION, mmhMsg.type)); - limSysProcessMmhMsgApi(pMac, &mmhMsg, ePROT); + limSysProcessMmhMsgApi(pMac, &mmhMsg, ePROT); return; @@ -2420,9 +2446,9 @@ limSendSmeStatsRsp(tpAniSirGlobal pMac, tANI_U16 msgType, void* stats) * NA * * @param pMac Pointer to Global MAC structure - * @param p80211Stats Statistics sent in response + * @param p80211Stats Statistics sent in response * @param resultCode TODO: - * + * * * @return none */ @@ -2444,9 +2470,9 @@ limSendSmePEStatisticsRsp(tpAniSirGlobal pMac, tANI_U16 msgType, void* stats) //Fill the Session Id pPeStats->sessionId = pPeSessionEntry->smeSessionId; } - + pPeStats->msgType = eWNI_SME_GET_STATISTICS_RSP; - + //msgType should be WDA_GET_STATISTICS_RSP mmhMsg.type = eWNI_SME_GET_STATISTICS_RSP; @@ -2454,7 +2480,7 @@ limSendSmePEStatisticsRsp(tpAniSirGlobal pMac, tANI_U16 msgType, void* stats) mmhMsg.bodyptr = stats; mmhMsg.bodyval = 0; MTRACE(macTraceMsgTx(pMac, NO_SESSION, mmhMsg.type)); - limSysProcessMmhMsgApi(pMac, &mmhMsg, ePROT); + limSysProcessMmhMsgApi(pMac, &mmhMsg, ePROT); return; @@ -2521,32 +2547,88 @@ limSendSmePEGetRoamRssiRsp(tpAniSirGlobal pMac, tANI_U16 msgType, void* stats) #endif +#if defined(FEATURE_WLAN_CCX) && defined(FEATURE_WLAN_CCX_UPLOAD) +/** + * limSendSmePECcxTsmRsp() + * + *FUNCTION: + * This function is called to send tsm stats response to HDD. + * This function posts the result back to HDD. This is a response to + * HDD's request to get tsm stats. + * + *PARAMS: + * @param pMac - Pointer to global pMac structure + * @param pStats - Pointer to TSM Stats + * + * @return none + */ + +void +limSendSmePECcxTsmRsp(tpAniSirGlobal pMac, tAniGetTsmStatsRsp *pStats) +{ + tSirMsgQ mmhMsg; + tANI_U8 sessionId; + tAniGetTsmStatsRsp *pPeStats = (tAniGetTsmStatsRsp *) pStats; + tpPESession pPeSessionEntry = NULL; + + //Get the Session Id based on Sta Id + pPeSessionEntry = peFindSessionByStaId(pMac, pPeStats->staId, &sessionId); + + //Fill the Session Id + if(NULL != pPeSessionEntry) + { + //Fill the Session Id + pPeStats->sessionId = pPeSessionEntry->smeSessionId; + } + else + { + PELOGE(limLog(pMac, LOGE, FL("Session not found for the Sta id(%d)"), + pPeStats->staId);) + return; + } + + pPeStats->msgType = eWNI_SME_GET_TSM_STATS_RSP; + pPeStats->tsmMetrics.RoamingCount + = pPeSessionEntry->ccxContext.tsm.tsmMetrics.RoamingCount; + pPeStats->tsmMetrics.RoamingDly + = pPeSessionEntry->ccxContext.tsm.tsmMetrics.RoamingDly; + + mmhMsg.type = eWNI_SME_GET_TSM_STATS_RSP; + mmhMsg.bodyptr = pStats; + mmhMsg.bodyval = 0; + MTRACE(macTraceMsgTx(pMac, sessionId, mmhMsg.type)); + limSysProcessMmhMsgApi(pMac, &mmhMsg, ePROT); + + return; +} /*** end limSendSmePECcxTsmRsp() ***/ + +#endif /* FEATURE_WLAN_CCX) && FEATURE_WLAN_CCX_UPLOAD */ void limSendSmeIBSSPeerInd( tpAniSirGlobal pMac, tSirMacAddr peerMacAddr, - tANI_U16 staIndex, + tANI_U16 staIndex, tANI_U8 ucastIdx, tANI_U8 bcastIdx, - tANI_U8 *beacon, - tANI_U16 beaconLen, + tANI_U8 *beacon, + tANI_U16 beaconLen, tANI_U16 msgType, tANI_U8 sessionId) { tSirMsgQ mmhMsg; tSmeIbssPeerInd *pNewPeerInd; - - if(eHAL_STATUS_SUCCESS != - palAllocateMemory(pMac->hHdd,(void * *) &pNewPeerInd,(sizeof(tSmeIbssPeerInd) + beaconLen))) + + pNewPeerInd = vos_mem_malloc(sizeof(tSmeIbssPeerInd) + beaconLen); + if ( NULL == pNewPeerInd ) { PELOGE(limLog(pMac, LOGE, FL("Failed to allocate memory"));) return; } + + vos_mem_set((void *) pNewPeerInd, (sizeof(tSmeIbssPeerInd) + beaconLen), 0); - palZeroMemory(pMac->hHdd, (void *) pNewPeerInd, (sizeof(tSmeIbssPeerInd) + beaconLen)); - - palCopyMemory( pMac->hHdd, (tANI_U8 *) pNewPeerInd->peerAddr, + vos_mem_copy( (tANI_U8 *) pNewPeerInd->peerAddr, peerMacAddr, sizeof(tSirMacAddr)); pNewPeerInd->staId= staIndex; pNewPeerInd->ucastSig = ucastIdx; @@ -2557,7 +2639,8 @@ limSendSmeIBSSPeerInd( if ( beacon != NULL ) { - palCopyMemory(pMac->hHdd, (void*) ((tANI_U8*)pNewPeerInd+sizeof(tSmeIbssPeerInd)), (void*)beacon, beaconLen); + vos_mem_copy((void*) ((tANI_U8*)pNewPeerInd+sizeof(tSmeIbssPeerInd)), + (void*)beacon, beaconLen); } mmhMsg.type = msgType; @@ -2565,19 +2648,19 @@ limSendSmeIBSSPeerInd( mmhMsg.bodyptr = pNewPeerInd; MTRACE(macTraceMsgTx(pMac, sessionId, mmhMsg.type)); limSysProcessMmhMsgApi(pMac, &mmhMsg, ePROT); - + } /** ----------------------------------------------------------------- \brief limSendExitBmpsInd() - sends exit bmps indication - + This function sends a eWNI_PMC_EXIT_BMPS_IND with a specific reason - code to SME. This will trigger SME to get out of BMPS mode. - + code to SME. This will trigger SME to get out of BMPS mode. + \param pMac - global mac structure \param reasonCode - reason for which PE wish to exit BMPS - \return none + \return none \sa ----------------------------------------------------------------- */ void limSendExitBmpsInd(tpAniSirGlobal pMac, tExitBmpsReason reasonCode, @@ -2586,14 +2669,15 @@ void limSendExitBmpsInd(tpAniSirGlobal pMac, tExitBmpsReason reasonCode, tSirMsgQ mmhMsg; tANI_U16 msgLen = 0; tpSirSmeExitBmpsInd pExitBmpsInd; - + msgLen = sizeof(tSirSmeExitBmpsInd); - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pExitBmpsInd, msgLen )) + pExitBmpsInd = vos_mem_malloc(msgLen); + if ( NULL == pExitBmpsInd ) { - limLog(pMac, LOGP, FL("palAllocateMemory failed for PMC_EXIT_BMPS_IND ")); + limLog(pMac, LOGP, FL("AllocateMemory failed for PMC_EXIT_BMPS_IND ")); return; } - palZeroMemory(pMac->hHdd, pExitBmpsInd, msgLen); + vos_mem_set(pExitBmpsInd, msgLen, 0); pExitBmpsInd->mesgType = eWNI_PMC_EXIT_BMPS_IND; pExitBmpsInd->mesgLen = msgLen; @@ -2604,13 +2688,13 @@ void limSendExitBmpsInd(tpAniSirGlobal pMac, tExitBmpsReason reasonCode, mmhMsg.type = eWNI_PMC_EXIT_BMPS_IND; mmhMsg.bodyptr = pExitBmpsInd; mmhMsg.bodyval = 0; - + PELOG1(limLog(pMac, LOG1, FL("Sending eWNI_PMC_EXIT_BMPS_IND to SME. "));) MTRACE(macTraceMsgTx(pMac, NO_SESSION, mmhMsg.type)); -#ifdef FEATURE_WLAN_DIAG_SUPPORT_LIM //FEATURE_WLAN_DIAG_SUPPORT +#ifdef FEATURE_WLAN_DIAG_SUPPORT_LIM //FEATURE_WLAN_DIAG_SUPPORT limDiagEventReport(pMac, WLAN_PE_DIAG_EXIT_BMPS_IND_EVENT, peGetValidPowerSaveSession(pMac), 0, (tANI_U16)reasonCode); #endif //FEATURE_WLAN_DIAG_SUPPORT - + limSysProcessMmhMsgApi(pMac, &mmhMsg, ePROT); return; @@ -2652,16 +2736,16 @@ void limHandleCSAoffloadMsg(tpAniSirGlobal pMac,tpSirMsgQ MsgQ) } err: - palFreeMemory(pMac->hHdd, (void *)csa_params); + vos_mem_free(csa_params); } /*-------------------------------------------------------------------------- \brief peDeleteSession() - Handle the Delete BSS Response from HAL. - + \param pMac - pointer to global adapter context \param sessionId - Message pointer. - + \sa --------------------------------------------------------------------------*/ @@ -2677,22 +2761,22 @@ void limHandleDeleteBssRsp(tpAniSirGlobal pMac,tpSirMsgQ MsgQ) if (psessionEntry->limSystemRole == eLIM_STA_IN_IBSS_ROLE) { limIbssDelBssRsp(pMac, MsgQ->bodyptr,psessionEntry); - } + } else if(psessionEntry->limSystemRole == eLIM_UNKNOWN_ROLE) { limProcessSmeDelBssRsp(pMac, MsgQ->bodyval,psessionEntry); } - + else limProcessMlmDelBssRsp(pMac,MsgQ,psessionEntry); - + } #ifdef WLAN_FEATURE_VOWIFI_11R /** ----------------------------------------------------------------- - \brief limSendSmeAggrQosRsp() - sends SME FT AGGR QOS RSP - \ This function sends a eWNI_SME_FT_AGGR_QOS_RSP to SME. - \ SME only looks at rc and tspec field. + \brief limSendSmeAggrQosRsp() - sends SME FT AGGR QOS RSP + \ This function sends a eWNI_SME_FT_AGGR_QOS_RSP to SME. + \ SME only looks at rc and tspec field. \param pMac - global mac structure \param rspReqd - is SmeAddTsRsp required \param status - status code of eWNI_SME_FT_AGGR_QOS_RSP @@ -2700,7 +2784,7 @@ void limHandleDeleteBssRsp(tpAniSirGlobal pMac,tpSirMsgQ MsgQ) \sa ----------------------------------------------------------------- */ void -limSendSmeAggrQosRsp(tpAniSirGlobal pMac, tpSirAggrQosRsp aggrQosRsp, +limSendSmeAggrQosRsp(tpAniSirGlobal pMac, tpSirAggrQosRsp aggrQosRsp, tANI_U8 smesessionId) { tSirMsgQ mmhMsg; @@ -2708,7 +2792,7 @@ limSendSmeAggrQosRsp(tpAniSirGlobal pMac, tpSirAggrQosRsp aggrQosRsp, mmhMsg.type = eWNI_SME_FT_AGGR_QOS_RSP; mmhMsg.bodyptr = aggrQosRsp; mmhMsg.bodyval = 0; - MTRACE(macTraceMsgTx(pMac, smesessionId , mmhMsg.type)); + MTRACE(macTraceMsgTx(pMac, smesessionId, mmhMsg.type)); limSysProcessMmhMsgApi(pMac, &mmhMsg, ePROT); return; @@ -2716,13 +2800,13 @@ limSendSmeAggrQosRsp(tpAniSirGlobal pMac, tpSirAggrQosRsp aggrQosRsp, #endif /** ----------------------------------------------------------------- - \brief limSendSmePreChannelSwitchInd() - sends an indication to SME + \brief limSendSmePreChannelSwitchInd() - sends an indication to SME before switching channels for spectrum manangement. - + This function sends a eWNI_SME_PRE_SWITCH_CHL_IND to SME. - + \param pMac - global mac structure - \return none + \return none \sa ----------------------------------------------------------------- */ void @@ -2733,14 +2817,14 @@ limSendSmePreChannelSwitchInd(tpAniSirGlobal pMac, tpPESession psessionEntry) tpSirSmePreSwitchChannelInd pPreSwitchChInd; msgLen = sizeof(tSirSmePreSwitchChannelInd); - if(eHAL_STATUS_SUCCESS != - palAllocateMemory(pMac->hHdd, (void **)&pPreSwitchChInd, msgLen)) + pPreSwitchChInd = vos_mem_malloc(msgLen); + if (NULL == pPreSwitchChInd) { limLog(pMac, LOGP, - FL("palAllocateMemory failed for eWNI_SME_PRE_SWITCH_CHL_IND ")); + FL("Memory allocation failed for eWNI_SME_PRE_SWITCH_CHL_IND ")); return; } - palZeroMemory(pMac->hHdd, pPreSwitchChInd, msgLen); + vos_mem_zero(pPreSwitchChInd, msgLen); pPreSwitchChInd->mesgType = eWNI_SME_PRE_SWITCH_CHL_IND; pPreSwitchChInd->mesgLen = msgLen; @@ -2756,13 +2840,13 @@ limSendSmePreChannelSwitchInd(tpAniSirGlobal pMac, tpPESession psessionEntry) } /** ----------------------------------------------------------------- - \brief limSendSmePostChannelSwitchInd() - sends an indication to SME + \brief limSendSmePostChannelSwitchInd() - sends an indication to SME after channel switch for spectrum manangement is complete. - + This function sends a eWNI_SME_POST_SWITCH_CHL_IND to SME. - + \param pMac - global mac structure - \return none + \return none \sa ----------------------------------------------------------------- */ void @@ -2785,17 +2869,17 @@ void limSendSmeMaxAssocExceededNtf(tpAniSirGlobal pMac, tSirMacAddr peerMacAddr, tSirMsgQ mmhMsg; tSmeMaxAssocInd *pSmeMaxAssocInd; - if(eHAL_STATUS_SUCCESS != - palAllocateMemory(pMac->hHdd,(void **)&pSmeMaxAssocInd, sizeof(tSmeMaxAssocInd))) + pSmeMaxAssocInd = vos_mem_malloc(sizeof(tSmeMaxAssocInd)); + if ( NULL == pSmeMaxAssocInd ) { PELOGE(limLog(pMac, LOGE, FL("Failed to allocate memory"));) return; - } - palZeroMemory(pMac->hHdd, (void *) pSmeMaxAssocInd, sizeof(tSmeMaxAssocInd)); - palCopyMemory( pMac->hHdd, (tANI_U8 *)pSmeMaxAssocInd->peerMac, - (tANI_U8 *)peerMacAddr, sizeof(tSirMacAddr)); + } + vos_mem_set((void *) pSmeMaxAssocInd, sizeof(tSmeMaxAssocInd),0); + vos_mem_copy( (tANI_U8 *)pSmeMaxAssocInd->peerMac, + (tANI_U8 *)peerMacAddr, sizeof(tSirMacAddr)); pSmeMaxAssocInd->mesgType = eWNI_SME_MAX_ASSOC_EXCEEDED; - pSmeMaxAssocInd->mesgLen = sizeof(tSmeMaxAssocInd); + pSmeMaxAssocInd->mesgLen = sizeof(tSmeMaxAssocInd); pSmeMaxAssocInd->sessionId = smesessionId; mmhMsg.type = pSmeMaxAssocInd->mesgType; mmhMsg.bodyptr = pSmeMaxAssocInd; @@ -2827,11 +2911,10 @@ limSendSmeCandidateFoundInd(tpAniSirGlobal pMac, tANI_U8 sessionId) tSirMsgQ mmhMsg; tSirSmeCandidateFoundInd *pSirSmeCandidateFoundInd; - if ( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, - (void **)&pSirSmeCandidateFoundInd, - sizeof(tSirSmeCandidateFoundInd))) + pSirSmeCandidateFoundInd = vos_mem_malloc(sizeof(tSirSmeCandidateFoundInd)); + if ( NULL == pSirSmeCandidateFoundInd ) { - limLog(pMac, LOGP, FL("palAllocateMemory failed for eWNI_SME_CANDIDATE_FOUND_IND\n")); + limLog(pMac, LOGP, FL("AllocateMemory failed for eWNI_SME_CANDIDATE_FOUND_IND\n")); return; } diff --git a/CORE/MAC/src/pe/lim/limSendSmeRspMessages.h b/CORE/MAC/src/pe/lim/limSendSmeRspMessages.h index a1f421fc4fef..a0fd08f29df4 100644 --- a/CORE/MAC/src/pe/lim/limSendSmeRspMessages.h +++ b/CORE/MAC/src/pe/lim/limSendSmeRspMessages.h @@ -91,6 +91,9 @@ void limSendSmePEStatisticsRsp(tpAniSirGlobal pMac, tANI_U16 msgtype, void * sta #if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR) void limSendSmePEGetRoamRssiRsp(tpAniSirGlobal pMac, tANI_U16 msgtype, void * stats); #endif +#ifdef FEATURE_WLAN_CCX_UPLOAD +void limSendSmePECcxTsmRsp(tpAniSirGlobal pMac, tAniGetTsmStatsRsp *pStats); +#endif void limSendSmeRemoveKeyRsp(tpAniSirGlobal pMac, tSirMacAddr peerMacAddr, tSirResultCodes resultCode,tpPESession,tANI_U8,tANI_U16); @@ -113,6 +116,9 @@ void limSendSmeMaxAssocExceededNtf(tpAniSirGlobal pMac, tSirMacAddr peerMacAddr, void limSendSmeTdlsDisRsp(tpAniSirGlobal pMac, tSirResultCodes statusCode, tANI_U16 msgType); void limSendSmeTdlsLinkStartRsp(tpAniSirGlobal pMac, tSirResultCodes statusCode, tSirMacAddr peerMac, tANI_U16 msgType); void limSendSmeTdlsTeardownRsp(tpAniSirGlobal pMac, tSirResultCodes statusCode, tSirMacAddr peerMac, tANI_U16 msgType); +void limSendSmeTdlsLinkEstablishReqRsp(tpAniSirGlobal pMac, + tANI_U8 sessionId, tSirMacAddr peerMac, tDphHashNode *pStaDs, + tANI_U8 status); #endif #endif /* __LIM_SEND_SME_RSP_H */ diff --git a/CORE/MAC/src/pe/lim/limSerDesUtils.c b/CORE/MAC/src/pe/lim/limSerDesUtils.c index 2bce16227986..074ccde2dbeb 100644 --- a/CORE/MAC/src/pe/lim/limSerDesUtils.c +++ b/CORE/MAC/src/pe/lim/limSerDesUtils.c @@ -120,7 +120,7 @@ limGetBssDescription( tpAniSirGlobal pMac, tSirBssDescription *pBssDescription, *lenUsed = len + sizeof(tANI_U16); // Extract bssId - palCopyMemory( pMac->hHdd, (tANI_U8 *) pBssDescription->bssId, + vos_mem_copy( (tANI_U8 *) pBssDescription->bssId, pBuf, sizeof(tSirMacAddr)); pBuf += sizeof(tSirMacAddr); len -= sizeof(tSirMacAddr); @@ -128,7 +128,7 @@ limGetBssDescription( tpAniSirGlobal pMac, tSirBssDescription *pBssDescription, return eSIR_FAILURE; // Extract timer - palCopyMemory( pMac->hHdd, (tANI_U8 *) (&pBssDescription->scanSysTimeMsec), + vos_mem_copy( (tANI_U8 *) (&pBssDescription->scanSysTimeMsec), pBuf, sizeof(v_TIME_t)); pBuf += sizeof(v_TIME_t); len -= sizeof(v_TIME_t); @@ -136,7 +136,7 @@ limGetBssDescription( tpAniSirGlobal pMac, tSirBssDescription *pBssDescription, return eSIR_FAILURE; // Extract timeStamp - palCopyMemory( pMac->hHdd, (tANI_U8 *) pBssDescription->timeStamp, + vos_mem_copy( (tANI_U8 *) pBssDescription->timeStamp, pBuf, sizeof(tSirMacTimeStamp)); pBuf += sizeof(tSirMacTimeStamp); len -= sizeof(tSirMacTimeStamp); @@ -266,7 +266,7 @@ limGetBssDescription( tpAniSirGlobal pMac, tSirBssDescription *pBssDescription, * if WscIeLen is not set properly, memory overwrite happen * Ended up with memory corruption and crash * Copy with Fixed size */ - palCopyMemory( pMac->hHdd, (tANI_U8 *) pBssDescription->WscIeProbeRsp, + vos_mem_copy( (tANI_U8 *) pBssDescription->WscIeProbeRsp, pBuf, WSCIE_PROBE_RSP_LEN); @@ -285,7 +285,7 @@ limGetBssDescription( tpAniSirGlobal pMac, tSirBssDescription *pBssDescription, if (len > 0) { - palCopyMemory( pMac->hHdd, (tANI_U8 *) pBssDescription->ieFields, + vos_mem_copy( (tANI_U8 *) pBssDescription->ieFields, pBuf, len); } @@ -331,7 +331,7 @@ limCopyBssDescription(tpAniSirGlobal pMac, tANI_U8 *pBuf, tSirBssDescription *pB pBuf += sizeof(tANI_U16); len += sizeof(tANI_U16); - palCopyMemory( pMac->hHdd, pBuf, + vos_mem_copy( pBuf, (tANI_U8 *) pBssDescription->bssId, sizeof(tSirMacAddr)); pBuf += sizeof(tSirMacAddr); @@ -342,7 +342,7 @@ limCopyBssDescription(tpAniSirGlobal pMac, tANI_U8 *pBuf, tSirBssDescription *pB pBssDescription->channelId, pBssDescription->aniIndicator); limPrintMacAddr(pMac, pBssDescription->bssId, LOG3);) - palCopyMemory( pMac->hHdd, pBuf, + vos_mem_copy( pBuf, (tANI_U8 *) (&pBssDescription->scanSysTimeMsec), sizeof(v_TIME_t)); pBuf += sizeof(v_TIME_t); @@ -380,7 +380,7 @@ limCopyBssDescription(tpAniSirGlobal pMac, tANI_U8 *pBuf, tSirBssDescription *pB *pBuf++ = pBssDescription->channelId; len++; - palCopyMemory( pMac->hHdd, pBuf, (tANI_U8 *) &(pBssDescription->ieFields), + vos_mem_copy( pBuf, (tANI_U8 *) &(pBssDescription->ieFields), limGetIElenFromBssDescription(pBssDescription)); return (len + sizeof(tANI_U16)); @@ -424,7 +424,7 @@ limGetKeysInfo(tpAniSirGlobal pMac, tpSirKeys pKeyInfo, tANI_U8 *pBuf) len += sizeof(tAniKeyDirection); pBuf += sizeof(tAniKeyDirection); - palCopyMemory( pMac->hHdd, pKeyInfo->keyRsc, pBuf, WLAN_MAX_KEY_RSC_LEN); + vos_mem_copy( pKeyInfo->keyRsc, pBuf, WLAN_MAX_KEY_RSC_LEN); pBuf += WLAN_MAX_KEY_RSC_LEN; len += WLAN_MAX_KEY_RSC_LEN; @@ -434,7 +434,7 @@ limGetKeysInfo(tpAniSirGlobal pMac, tpSirKeys pKeyInfo, tANI_U8 *pBuf) pKeyInfo->keyLength = limGetU16(pBuf); pBuf += sizeof(tANI_U16); len += sizeof(tANI_U16); - palCopyMemory( pMac->hHdd, pKeyInfo->key, pBuf, pKeyInfo->keyLength); + vos_mem_copy( pKeyInfo->key, pBuf, pKeyInfo->keyLength); pBuf += pKeyInfo->keyLength; len += pKeyInfo->keyLength; @@ -515,14 +515,14 @@ limStartBssReqSerDes(tpAniSirGlobal pMac, tpSirSmeStartBssReq pStartBssReq, tANI return eSIR_FAILURE; // Extract bssId - palCopyMemory( pMac->hHdd, (tANI_U8 *) pStartBssReq->bssId, pBuf, sizeof(tSirMacAddr)); + vos_mem_copy( (tANI_U8 *) pStartBssReq->bssId, pBuf, sizeof(tSirMacAddr)); pBuf += sizeof(tSirMacAddr); len -= sizeof(tSirMacAddr); if (limCheckRemainingLength(pMac, len) == eSIR_FAILURE) return eSIR_FAILURE; // Extract selfMacAddr - palCopyMemory( pMac->hHdd, (tANI_U8 *) pStartBssReq->selfMacAddr, pBuf, sizeof(tSirMacAddr)); + vos_mem_copy( (tANI_U8 *) pStartBssReq->selfMacAddr, pBuf, sizeof(tSirMacAddr)); pBuf += sizeof(tSirMacAddr); len -= sizeof(tSirMacAddr); if (limCheckRemainingLength(pMac, len) == eSIR_FAILURE) @@ -566,7 +566,7 @@ limStartBssReqSerDes(tpAniSirGlobal pMac, tpSirSmeStartBssReq pStartBssReq, tANI return eSIR_FAILURE; } - palCopyMemory( pMac->hHdd, (tANI_U8 *) pStartBssReq->ssId.ssId, + vos_mem_copy( (tANI_U8 *) pStartBssReq->ssId.ssId, pBuf, pStartBssReq->ssId.length); pBuf += pStartBssReq->ssId.length; @@ -654,7 +654,6 @@ limStartBssReqSerDes(tpAniSirGlobal pMac, tpSirSmeStartBssReq pStartBssReq, tANI if (limCheckRemainingLength(pMac, len) == eSIR_FAILURE) return eSIR_FAILURE; - // Extract bssPersona pStartBssReq->bssPersona = *pBuf++; len--; @@ -682,7 +681,7 @@ limStartBssReqSerDes(tpAniSirGlobal pMac, tpSirSmeStartBssReq pStartBssReq, tANI return eSIR_FAILURE; } - palCopyMemory( pMac->hHdd, pStartBssReq->rsnIE.rsnIEdata, + vos_mem_copy( pStartBssReq->rsnIE.rsnIEdata, pBuf, pStartBssReq->rsnIE.length); len -= (sizeof(tANI_U16) + pStartBssReq->rsnIE.length); @@ -713,7 +712,7 @@ limStartBssReqSerDes(tpAniSirGlobal pMac, tpSirSmeStartBssReq pStartBssReq, tANI if (len < pStartBssReq->operationalRateSet.numRates) return eSIR_FAILURE; - palCopyMemory( pMac->hHdd, (tANI_U8 *) pStartBssReq->operationalRateSet.rate, + vos_mem_copy( (tANI_U8 *) pStartBssReq->operationalRateSet.rate, pBuf, pStartBssReq->operationalRateSet.numRates); pBuf += pStartBssReq->operationalRateSet.numRates; @@ -725,7 +724,7 @@ limStartBssReqSerDes(tpAniSirGlobal pMac, tpSirSmeStartBssReq pStartBssReq, tANI if ((pStartBssReq->nwType == eSIR_11G_NW_TYPE) || (pStartBssReq->nwType == eSIR_11N_NW_TYPE )) { - palCopyMemory( pMac->hHdd, pStartBssReq->extendedRateSet.rate, + vos_mem_copy( pStartBssReq->extendedRateSet.rate, pBuf, pStartBssReq->extendedRateSet.numRates); pBuf += pStartBssReq->extendedRateSet.numRates; len -= pStartBssReq->extendedRateSet.numRates; @@ -737,8 +736,8 @@ limStartBssReqSerDes(tpAniSirGlobal pMac, tpSirSmeStartBssReq pStartBssReq, tANI pStartBssReq->extendedRateSet.numRates = 0; } - palCopyMemory(pMac->hHdd, &(pStartBssReq->htConfig), pBuf, - sizeof(tSirHTConfig)); + vos_mem_copy(&(pStartBssReq->htConfig), pBuf, + sizeof(tSirHTConfig)); len -= sizeof(tSirHTConfig); pBuf += sizeof(tSirHTConfig); if (len) @@ -817,7 +816,7 @@ limStopBssReqSerDes(tpAniSirGlobal pMac, tpSirSmeStopBssReq pStopBssReq, tANI_U8 len -= sizeof(tSirResultCodes); // Extract bssId - palCopyMemory( pMac->hHdd, (tANI_U8 *) pStopBssReq->bssId, pBuf, sizeof(tSirMacAddr)); + vos_mem_copy( (tANI_U8 *) pStopBssReq->bssId, pBuf, sizeof(tSirMacAddr)); len -= sizeof(tSirMacAddr); if (len) @@ -910,14 +909,14 @@ limJoinReqSerDes(tpAniSirGlobal pMac, tpSirSmeJoinReq pJoinReq, tANI_U8 *pBuf) // Extract ssId pJoinReq->ssId.length = *pBuf++; len--; - palCopyMemory( pMac->hHdd, (tANI_U8 *) pJoinReq->ssId.ssId, pBuf, pJoinReq->ssId.length); + vos_mem_copy( (tANI_U8 *) pJoinReq->ssId.ssId, pBuf, pJoinReq->ssId.length); pBuf += pJoinReq->ssId.length; len -= pJoinReq->ssId.length; if (limCheckRemainingLength(pMac, len) == eSIR_FAILURE) return eSIR_FAILURE; // Extract selfMacAddr - palCopyMemory( pMac->hHdd, pJoinReq->selfMacAddr, pBuf, sizeof(tSirMacAddr)); + vos_mem_copy( pJoinReq->selfMacAddr, pBuf, sizeof(tSirMacAddr)); pBuf += sizeof(tSirMacAddr); len -= sizeof(tSirMacAddr); if (limCheckRemainingLength(pMac, len) == eSIR_FAILURE) @@ -960,7 +959,8 @@ limJoinReqSerDes(tpAniSirGlobal pMac, tpSirSmeJoinReq pJoinReq, tANI_U8 *pBuf) len--; if (pJoinReq->operationalRateSet.numRates) { - palCopyMemory( pMac->hHdd, (tANI_U8 *) pJoinReq->operationalRateSet.rate, pBuf, pJoinReq->operationalRateSet.numRates); + vos_mem_copy( (tANI_U8 *) pJoinReq->operationalRateSet.rate, pBuf, + pJoinReq->operationalRateSet.numRates); pBuf += pJoinReq->operationalRateSet.numRates; len -= pJoinReq->operationalRateSet.numRates; if (limCheckRemainingLength(pMac, len) == eSIR_FAILURE) @@ -972,7 +972,7 @@ limJoinReqSerDes(tpAniSirGlobal pMac, tpSirSmeJoinReq pJoinReq, tANI_U8 *pBuf) len--; if (pJoinReq->extendedRateSet.numRates) { - palCopyMemory( pMac->hHdd, pJoinReq->extendedRateSet.rate, pBuf, pJoinReq->extendedRateSet.numRates); + vos_mem_copy( pJoinReq->extendedRateSet.rate, pBuf, pJoinReq->extendedRateSet.numRates); pBuf += pJoinReq->extendedRateSet.numRates; len -= pJoinReq->extendedRateSet.numRates; if (limCheckRemainingLength(pMac, len) == eSIR_FAILURE) @@ -995,7 +995,7 @@ limJoinReqSerDes(tpAniSirGlobal pMac, tpSirSmeJoinReq pJoinReq, tANI_U8 *pBuf) pJoinReq->rsnIE.length); return eSIR_FAILURE; } - palCopyMemory( pMac->hHdd, (tANI_U8 *) pJoinReq->rsnIE.rsnIEdata, + vos_mem_copy( (tANI_U8 *) pJoinReq->rsnIE.rsnIEdata, pBuf, pJoinReq->rsnIE.length); pBuf += pJoinReq->rsnIE.length; len -= pJoinReq->rsnIE.length; // skip RSN IE @@ -1019,7 +1019,7 @@ limJoinReqSerDes(tpAniSirGlobal pMac, tpSirSmeJoinReq pJoinReq, tANI_U8 *pBuf) pJoinReq->cckmIE.length, 2 + *(pBuf + 1)); return eSIR_FAILURE; } - palCopyMemory( pMac->hHdd, (tANI_U8 *) pJoinReq->cckmIE.cckmIEdata, + vos_mem_copy((tANI_U8 *) pJoinReq->cckmIE.cckmIEdata, pBuf, pJoinReq->cckmIE.length); pBuf += pJoinReq->cckmIE.length; len -= pJoinReq->cckmIE.length; // skip CCKM IE @@ -1044,7 +1044,7 @@ limJoinReqSerDes(tpAniSirGlobal pMac, tpSirSmeJoinReq pJoinReq, tANI_U8 *pBuf) return eSIR_FAILURE; } // Check for P2P IE length (that includes length of type & length) - palCopyMemory( pMac->hHdd, (tANI_U8 *) pJoinReq->addIEScan.addIEdata, + vos_mem_copy( (tANI_U8 *) pJoinReq->addIEScan.addIEdata, pBuf, pJoinReq->addIEScan.length); pBuf += pJoinReq->addIEScan.length; len -= pJoinReq->addIEScan.length; // skip add IE @@ -1068,7 +1068,7 @@ limJoinReqSerDes(tpAniSirGlobal pMac, tpSirSmeJoinReq pJoinReq, tANI_U8 *pBuf) return eSIR_FAILURE; } // Check for P2P IE length (that includes length of type & length) - palCopyMemory( pMac->hHdd, (tANI_U8 *) pJoinReq->addIEAssoc.addIEdata, + vos_mem_copy( (tANI_U8 *) pJoinReq->addIEAssoc.addIEdata, pBuf, pJoinReq->addIEAssoc.length); pBuf += pJoinReq->addIEAssoc.length; len -= pJoinReq->addIEAssoc.length; // skip add IE @@ -1106,6 +1106,13 @@ limJoinReqSerDes(tpAniSirGlobal pMac, tpSirSmeJoinReq pJoinReq, tANI_U8 *pBuf) #endif #ifdef FEATURE_WLAN_CCX + //CCX version IE + pJoinReq->isCCXFeatureIniEnabled = (tAniBool)limGetU32(pBuf); + pBuf += sizeof(tAniBool); + len -= sizeof(tAniBool); + if (limCheckRemainingLength(pMac, len) == eSIR_FAILURE) + return eSIR_FAILURE; + //isCCXconnection; pJoinReq->isCCXconnection = (tAniBool)limGetU32(pBuf); pBuf += sizeof(tAniBool); @@ -1116,7 +1123,8 @@ limJoinReqSerDes(tpAniSirGlobal pMac, tpSirSmeJoinReq pJoinReq, tANI_U8 *pBuf) // TSPEC information pJoinReq->ccxTspecInfo.numTspecs = *pBuf++; len -= sizeof(tANI_U8); - palCopyMemory(pMac->hHdd, (void*)&pJoinReq->ccxTspecInfo.tspec[0], pBuf, (sizeof(tTspecInfo)* pJoinReq->ccxTspecInfo.numTspecs)); + vos_mem_copy((void*)&pJoinReq->ccxTspecInfo.tspec[0], pBuf, + (sizeof(tTspecInfo)* pJoinReq->ccxTspecInfo.numTspecs)); pBuf += sizeof(tTspecInfo)*SIR_CCX_MAX_TSPEC_IES; len -= sizeof(tTspecInfo)*SIR_CCX_MAX_TSPEC_IES; if (limCheckRemainingLength(pMac, len) == eSIR_FAILURE) @@ -1148,7 +1156,7 @@ limJoinReqSerDes(tpAniSirGlobal pMac, tpSirSmeJoinReq pJoinReq, tANI_U8 *pBuf) return eSIR_FAILURE; //HT Config - palCopyMemory(pMac->hHdd, &(pJoinReq->htConfig), pBuf, sizeof(tSirHTConfig)); + vos_mem_copy(&(pJoinReq->htConfig), pBuf, sizeof(tSirHTConfig)); len -= sizeof(tSirHTConfig); pBuf += sizeof(tSirHTConfig); @@ -1200,6 +1208,11 @@ limJoinReqSerDes(tpAniSirGlobal pMac, tpSirSmeJoinReq pJoinReq, tANI_U8 *pBuf) if (limCheckRemainingLength(pMac, len) == eSIR_FAILURE) return eSIR_FAILURE; + pJoinReq->isAmsduSupportInAMPDU= *pBuf++; + len--; + if (limCheckRemainingLength(pMac, len) == eSIR_FAILURE) + return eSIR_FAILURE; + // Extract Titan CB Neighbor BSS info pJoinReq->cbNeighbors.cbBssFoundPri = *pBuf; pBuf++; @@ -1221,7 +1234,7 @@ limJoinReqSerDes(tpAniSirGlobal pMac, tpSirSmeJoinReq pJoinReq, tANI_U8 *pBuf) pJoinReq->supportedChannels.numChnl = *pBuf++; len--; - palCopyMemory( pMac->hHdd, (tANI_U8 *) pJoinReq->supportedChannels.channelList, + vos_mem_copy( (tANI_U8 *) pJoinReq->supportedChannels.channelList, pBuf, pJoinReq->supportedChannels.numChnl); pBuf += pJoinReq->supportedChannels.numChnl; len-= pJoinReq->supportedChannels.numChnl; @@ -1288,7 +1301,7 @@ limAssocIndSerDes(tpAniSirGlobal pMac, tpLimMlmAssocInd pAssocInd, tANI_U8 *pBuf pBuf += sizeof(tANI_U8); // Fill in peerMacAddr - palCopyMemory( pMac->hHdd, pBuf, pAssocInd->peerMacAddr, sizeof(tSirMacAddr)); + vos_mem_copy( pBuf, pAssocInd->peerMacAddr, sizeof(tSirMacAddr)); pBuf += sizeof(tSirMacAddr); mLen += sizeof(tSirMacAddr); @@ -1298,7 +1311,7 @@ limAssocIndSerDes(tpAniSirGlobal pMac, tpLimMlmAssocInd pAssocInd, tANI_U8 *pBuf mLen += sizeof(tANI_U16); // Fill in bssId - palCopyMemory( pMac->hHdd, pBuf, psessionEntry->bssId, sizeof(tSirMacAddr)); + vos_mem_copy( pBuf, psessionEntry->bssId, sizeof(tSirMacAddr)); pBuf += sizeof(tSirMacAddr); mLen += sizeof(tSirMacAddr); @@ -1313,7 +1326,7 @@ limAssocIndSerDes(tpAniSirGlobal pMac, tpLimMlmAssocInd pAssocInd, tANI_U8 *pBuf mLen += sizeof(tANI_U32); // Fill in ssId - palCopyMemory( pMac->hHdd, pBuf, (tANI_U8 *) &(pAssocInd->ssId), pAssocInd->ssId.length + 1); + vos_mem_copy( pBuf, (tANI_U8 *) &(pAssocInd->ssId), pAssocInd->ssId.length + 1); pBuf += (1 + pAssocInd->ssId.length); mLen += (1 + pAssocInd->ssId.length); @@ -1321,7 +1334,7 @@ limAssocIndSerDes(tpAniSirGlobal pMac, tpLimMlmAssocInd pAssocInd, tANI_U8 *pBuf limCopyU16(pBuf, pAssocInd->rsnIE.length); pBuf += sizeof(tANI_U16); mLen += sizeof(tANI_U16); - palCopyMemory( pMac->hHdd, pBuf, (tANI_U8 *) &(pAssocInd->rsnIE.rsnIEdata), + vos_mem_copy( pBuf, (tANI_U8 *) &(pAssocInd->rsnIE.rsnIEdata), pAssocInd->rsnIE.length); pBuf += pAssocInd->rsnIE.length; mLen += pAssocInd->rsnIE.length; @@ -1343,7 +1356,7 @@ limAssocIndSerDes(tpAniSirGlobal pMac, tpLimMlmAssocInd pAssocInd, tANI_U8 *pBuf pBuf++; mLen++; - palCopyMemory( pMac->hHdd, pBuf, + vos_mem_copy( pBuf, (tANI_U8 *) &(pAssocInd->supportedChannels.channelList), pAssocInd->supportedChannels.numChnl); @@ -1419,18 +1432,18 @@ limAssocCnfSerDes(tpAniSirGlobal pMac, tpSirSmeAssocCnf pAssocCnf, tANI_U8 *pBuf pBuf += sizeof(tSirResultCodes); // bssId - palCopyMemory( pMac->hHdd, pAssocCnf->bssId, pBuf, sizeof(tSirMacAddr)); + vos_mem_copy( pAssocCnf->bssId, pBuf, sizeof(tSirMacAddr)); pBuf += sizeof(tSirMacAddr); // peerMacAddr - palCopyMemory( pMac->hHdd, pAssocCnf->peerMacAddr, pBuf, sizeof(tSirMacAddr)); + vos_mem_copy( pAssocCnf->peerMacAddr, pBuf, sizeof(tSirMacAddr)); pBuf += sizeof(tSirMacAddr); pAssocCnf->aid = limGetU16(pBuf); pBuf += sizeof(tANI_U16); // alternateBssId - palCopyMemory( pMac->hHdd, pAssocCnf->alternateBssId, pBuf, sizeof(tSirMacAddr)); + vos_mem_copy( pAssocCnf->alternateBssId, pBuf, sizeof(tSirMacAddr)); pBuf += sizeof(tSirMacAddr); // alternateChannelId @@ -1489,10 +1502,10 @@ limDisassocCnfSerDes(tpAniSirGlobal pMac, tpSirSmeDisassocCnf pDisassocCnf, tANI pDisassocCnf->statusCode = (tSirResultCodes) limGetU32(pBuf); pBuf += sizeof(tSirResultCodes); - palCopyMemory( pMac->hHdd, pDisassocCnf->bssId, pBuf, sizeof(tSirMacAddr)); + vos_mem_copy( pDisassocCnf->bssId, pBuf, sizeof(tSirMacAddr)); pBuf += sizeof(tSirMacAddr); - palCopyMemory( pMac->hHdd, pDisassocCnf->peerMacAddr, pBuf, sizeof(tSirMacAddr)); + vos_mem_copy( pDisassocCnf->peerMacAddr, pBuf, sizeof(tSirMacAddr)); return eSIR_SUCCESS; @@ -1532,12 +1545,12 @@ limReassocIndSerDes(tpAniSirGlobal pMac, tpLimMlmReassocInd pReassocInd, tANI_U8 mLen += sizeof(tANI_U8); // Fill in peerMacAddr - palCopyMemory( pMac->hHdd, pBuf, pReassocInd->peerMacAddr, sizeof(tSirMacAddr)); + vos_mem_copy( pBuf, pReassocInd->peerMacAddr, sizeof(tSirMacAddr)); pBuf += sizeof(tSirMacAddr); mLen += sizeof(tSirMacAddr); // Fill in oldMacAddr - palCopyMemory( pMac->hHdd, pBuf, pReassocInd->currentApAddr, sizeof(tSirMacAddr)); + vos_mem_copy( pBuf, pReassocInd->currentApAddr, sizeof(tSirMacAddr)); pBuf += sizeof(tSirMacAddr); mLen += sizeof(tSirMacAddr); @@ -1547,7 +1560,7 @@ limReassocIndSerDes(tpAniSirGlobal pMac, tpLimMlmReassocInd pReassocInd, tANI_U8 mLen += sizeof(tANI_U16); // Fill in bssId - palCopyMemory( pMac->hHdd, pBuf, psessionEntry->bssId, sizeof(tSirMacAddr)); + vos_mem_copy( pBuf, psessionEntry->bssId, sizeof(tSirMacAddr)); pBuf += sizeof(tSirMacAddr); mLen += sizeof(tSirMacAddr); @@ -1562,7 +1575,7 @@ limReassocIndSerDes(tpAniSirGlobal pMac, tpLimMlmReassocInd pReassocInd, tANI_U8 mLen += sizeof(tAniAuthType); // Fill in ssId - palCopyMemory( pMac->hHdd, pBuf, (tANI_U8 *) &(pReassocInd->ssId), + vos_mem_copy( pBuf, (tANI_U8 *) &(pReassocInd->ssId), pReassocInd->ssId.length + 1); pBuf += 1 + pReassocInd->ssId.length; mLen += pReassocInd->ssId.length + 1; @@ -1571,7 +1584,7 @@ limReassocIndSerDes(tpAniSirGlobal pMac, tpLimMlmReassocInd pReassocInd, tANI_U8 limCopyU16(pBuf, pReassocInd->rsnIE.length); pBuf += sizeof(tANI_U16); mLen += sizeof(tANI_U16); - palCopyMemory( pMac->hHdd, pBuf, (tANI_U8 *) &(pReassocInd->rsnIE.rsnIEdata), + vos_mem_copy( pBuf, (tANI_U8 *) &(pReassocInd->rsnIE.rsnIEdata), pReassocInd->rsnIE.length); pBuf += pReassocInd->rsnIE.length; mLen += pReassocInd->rsnIE.length; @@ -1580,7 +1593,7 @@ limReassocIndSerDes(tpAniSirGlobal pMac, tpLimMlmReassocInd pReassocInd, tANI_U8 limCopyU16(pBuf, pReassocInd->addIE.length); pBuf += sizeof(tANI_U16); mLen += sizeof(tANI_U16); - palCopyMemory( pMac->hHdd, pBuf, (tANI_U8*) &(pReassocInd->addIE.addIEdata), + vos_mem_copy( pBuf, (tANI_U8*) &(pReassocInd->addIE.addIEdata), pReassocInd->addIE.length); pBuf += pReassocInd->addIE.length; mLen += pReassocInd->addIE.length; @@ -1602,7 +1615,7 @@ limReassocIndSerDes(tpAniSirGlobal pMac, tpLimMlmReassocInd pReassocInd, tANI_U8 pBuf++; mLen++; - palCopyMemory( pMac->hHdd, pBuf, + vos_mem_copy( pBuf, (tANI_U8 *) &(pReassocInd->supportedChannels.channelList), pReassocInd->supportedChannels.numChnl); @@ -1660,11 +1673,11 @@ limAuthIndSerDes(tpAniSirGlobal pMac, tpLimMlmAuthInd pAuthInd, tANI_U8 *pBuf) mLen += sizeof(tANI_U8); // BTAMP TODO: Fill in bssId - palZeroMemory(pMac->hHdd, pBuf, sizeof(tSirMacAddr)); + vos_mem_set(pBuf, sizeof(tSirMacAddr), 0); pBuf += sizeof(tSirMacAddr); mLen += sizeof(tSirMacAddr); - palCopyMemory( pMac->hHdd, pBuf, pAuthInd->peerMacAddr, sizeof(tSirMacAddr)); + vos_mem_copy( pBuf, pAuthInd->peerMacAddr, sizeof(tSirMacAddr)); pBuf += sizeof(tSirMacAddr); mLen += sizeof(tSirMacAddr); @@ -1748,13 +1761,13 @@ limSetContextReqSerDes(tpAniSirGlobal pMac, tpSirSmeSetContextReq pSetContextReq len -= sizeof(tANI_U16); if (limCheckRemainingLength(pMac, len) == eSIR_FAILURE) return eSIR_FAILURE; - palCopyMemory( pMac->hHdd, (tANI_U8 *) pSetContextReq->peerMacAddr, + vos_mem_copy( (tANI_U8 *) pSetContextReq->peerMacAddr, pBuf, sizeof(tSirMacAddr)); pBuf += sizeof(tSirMacAddr); len -= sizeof(tSirMacAddr); if (limCheckRemainingLength(pMac, len) == eSIR_FAILURE) return eSIR_FAILURE; - palCopyMemory( pMac->hHdd, pSetContextReq->bssId, pBuf, sizeof(tSirMacAddr)); + vos_mem_copy( pSetContextReq->bssId, pBuf, sizeof(tSirMacAddr)); pBuf += sizeof(tSirMacAddr); len -= sizeof(tSirMacAddr); if (limCheckRemainingLength(pMac, len) == eSIR_FAILURE) @@ -1869,7 +1882,7 @@ limRemoveKeyReqSerDes(tpAniSirGlobal pMac, tpSirSmeRemoveKeyReq pRemoveKeyReq, t if (limCheckRemainingLength(pMac, len) == eSIR_FAILURE) return eSIR_FAILURE; - palCopyMemory( pMac->hHdd, (tANI_U8 *) pRemoveKeyReq->peerMacAddr, + vos_mem_copy( (tANI_U8 *) pRemoveKeyReq->peerMacAddr, pBuf, sizeof(tSirMacAddr)); pBuf += sizeof(tSirMacAddr); len -= sizeof(tSirMacAddr); @@ -1903,7 +1916,7 @@ limRemoveKeyReqSerDes(tpAniSirGlobal pMac, tpSirSmeRemoveKeyReq pRemoveKeyReq, t return eSIR_FAILURE; // Extract bssId - palCopyMemory( pMac->hHdd, pRemoveKeyReq->bssId, pBuf, sizeof(tSirMacAddr)); + vos_mem_copy( pRemoveKeyReq->bssId, pBuf, sizeof(tSirMacAddr)); pBuf += sizeof(tSirMacAddr); len -= sizeof(tSirMacAddr); if (limCheckRemainingLength(pMac, len) == eSIR_FAILURE) @@ -1994,14 +2007,14 @@ limDisassocReqSerDes(tpAniSirGlobal pMac, tSirSmeDisassocReq *pDisassocReq, tANI return eSIR_FAILURE; // Extract bssId - palCopyMemory( pMac->hHdd, (tANI_U8 *) pDisassocReq->bssId, pBuf, sizeof(tSirMacAddr)); + vos_mem_copy( (tANI_U8 *) pDisassocReq->bssId, pBuf, sizeof(tSirMacAddr)); pBuf += sizeof(tSirMacAddr); len -= sizeof(tSirMacAddr); if (limCheckRemainingLength(pMac, len) == eSIR_FAILURE) return eSIR_FAILURE; // Extract peerMacAddr - palCopyMemory( pMac->hHdd, pDisassocReq->peerMacAddr, pBuf, sizeof(tSirMacAddr)); + vos_mem_copy( pDisassocReq->peerMacAddr, pBuf, sizeof(tSirMacAddr)); pBuf += sizeof(tSirMacAddr); len -= sizeof(tSirMacAddr); if (limCheckRemainingLength(pMac, len) == eSIR_FAILURE) @@ -2090,14 +2103,14 @@ limDeauthReqSerDes(tpAniSirGlobal pMac, tSirSmeDeauthReq *pDeauthReq, tANI_U8 *p return eSIR_FAILURE; // Extract bssId - palCopyMemory( pMac->hHdd, pDeauthReq->bssId, pBuf, sizeof(tSirMacAddr)); + vos_mem_copy( pDeauthReq->bssId, pBuf, sizeof(tSirMacAddr)); pBuf += sizeof(tSirMacAddr); len -= sizeof(tSirMacAddr); if (limCheckRemainingLength(pMac, len) == eSIR_FAILURE) return eSIR_FAILURE; // Extract peerMacAddr - palCopyMemory( pMac->hHdd, pDeauthReq->peerMacAddr, pBuf, sizeof(tSirMacAddr)); + vos_mem_copy( pDeauthReq->peerMacAddr, pBuf, sizeof(tSirMacAddr)); pBuf += sizeof(tSirMacAddr); len -= sizeof(tSirMacAddr); if (limCheckRemainingLength(pMac, len) == eSIR_FAILURE) @@ -2298,7 +2311,7 @@ limIsSmeGetAssocSTAsReqValid(tpAniSirGlobal pMac, tpSirSmeGetAssocSTAsReq pGetAs return eSIR_FAILURE; // Extract bssId - palCopyMemory( pMac->hHdd, (tANI_U8 *) pGetAssocSTAsReq->bssId, pBuf, sizeof(tSirMacAddr)); + vos_mem_copy( (tANI_U8 *) pGetAssocSTAsReq->bssId, pBuf, sizeof(tSirMacAddr)); pBuf += sizeof(tSirMacAddr); len -= sizeof(tSirMacAddr); if (limCheckRemainingLength(pMac, len) == eSIR_FAILURE) @@ -2403,7 +2416,7 @@ limTkipCntrMeasReqSerDes(tpAniSirGlobal pMac, tpSirSmeTkipCntrMeasReq pTkipCntr return eSIR_FAILURE; // Extract bssId - palCopyMemory( pMac->hHdd, (tANI_U8 *) pTkipCntrMeasReq->bssId, pBuf, sizeof(tSirMacAddr)); + vos_mem_copy( (tANI_U8 *) pTkipCntrMeasReq->bssId, pBuf, sizeof(tSirMacAddr)); pBuf += sizeof(tSirMacAddr); len -= sizeof(tSirMacAddr); if (limCheckRemainingLength(pMac, len) == eSIR_FAILURE) @@ -2479,12 +2492,12 @@ limIsSmeGetWPSPBCSessionsReqValid(tpAniSirGlobal pMac, tSirSmeGetWPSPBCSessionsR return eSIR_FAILURE; // Extract bssId - palCopyMemory( pMac->hHdd, (tANI_U8 *) pGetWPSPBCSessionsReq->bssId, pBuf, sizeof(tSirMacAddr)); + vos_mem_copy( (tANI_U8 *) pGetWPSPBCSessionsReq->bssId, pBuf, sizeof(tSirMacAddr)); pBuf += sizeof(tSirMacAddr); len -= sizeof(tSirMacAddr); // Extract MAC address of Station to be removed - palCopyMemory( pMac->hHdd, (tANI_U8 *) pGetWPSPBCSessionsReq->pRemoveMac, pBuf, sizeof(tSirMacAddr)); + vos_mem_copy( (tANI_U8 *) pGetWPSPBCSessionsReq->pRemoveMac, pBuf, sizeof(tSirMacAddr)); pBuf += sizeof(tSirMacAddr); len -= sizeof(tSirMacAddr); @@ -2591,7 +2604,7 @@ limUpdateAPWPSIEsReqSerDes(tpAniSirGlobal pMac, tpSirUpdateAPWPSIEsReq pUpdateAP return eSIR_FAILURE; // Extract bssId - palCopyMemory( pMac->hHdd, (tANI_U8 *) pUpdateAPWPSIEsReq->bssId, pBuf, sizeof(tSirMacAddr)); + vos_mem_copy( (tANI_U8 *) pUpdateAPWPSIEsReq->bssId, pBuf, sizeof(tSirMacAddr)); pBuf += sizeof(tSirMacAddr); len -= sizeof(tSirMacAddr); if (limCheckRemainingLength(pMac, len) == eSIR_FAILURE) @@ -2604,7 +2617,7 @@ limUpdateAPWPSIEsReqSerDes(tpAniSirGlobal pMac, tpSirUpdateAPWPSIEsReq pUpdateAP return eSIR_FAILURE; // Extract APWPSIEs - palCopyMemory( pMac->hHdd, (tSirAPWPSIEs *) &pUpdateAPWPSIEsReq->APWPSIEs, pBuf, sizeof(tSirAPWPSIEs)); + vos_mem_copy( (tSirAPWPSIEs *) &pUpdateAPWPSIEsReq->APWPSIEs, pBuf, sizeof(tSirAPWPSIEs)); pBuf += sizeof(tSirAPWPSIEs); len -= sizeof(tSirAPWPSIEs); @@ -2675,7 +2688,7 @@ limUpdateAPWPARSNIEsReqSerDes(tpAniSirGlobal pMac, tpSirUpdateAPWPARSNIEsReq pUp return eSIR_FAILURE; // Extract bssId - palCopyMemory( pMac->hHdd, (tANI_U8 *) pUpdateAPWPARSNIEsReq->bssId, pBuf, sizeof(tSirMacAddr)); + vos_mem_copy( (tANI_U8 *) pUpdateAPWPARSNIEsReq->bssId, pBuf, sizeof(tSirMacAddr)); pBuf += sizeof(tSirMacAddr); len -= sizeof(tSirMacAddr); if (limCheckRemainingLength(pMac, len) == eSIR_FAILURE) @@ -2688,7 +2701,7 @@ limUpdateAPWPARSNIEsReqSerDes(tpAniSirGlobal pMac, tpSirUpdateAPWPARSNIEsReq pUp return eSIR_FAILURE; // Extract APWPARSNIEs - palCopyMemory( pMac->hHdd, (tSirRSNie *) &pUpdateAPWPARSNIEsReq->APWPARSNIEs, pBuf, sizeof(tSirRSNie)); + vos_mem_copy( (tSirRSNie *) &pUpdateAPWPARSNIEsReq->APWPARSNIEs, pBuf, sizeof(tSirRSNie)); pBuf += sizeof(tSirRSNie); len -= sizeof(tSirRSNie); diff --git a/CORE/MAC/src/pe/lim/limSession.c b/CORE/MAC/src/pe/lim/limSession.c index e20a9ddc6eec..098d66a7bdd3 100644 --- a/CORE/MAC/src/pe/lim/limSession.c +++ b/CORE/MAC/src/pe/lim/limSession.c @@ -25,8 +25,6 @@ * to the Linux Foundation. */ -/* - * */ /**========================================================================= \file limSession.c @@ -49,7 +47,7 @@ #include "limDebug.h" #include "limSession.h" #include "limUtils.h" -#ifdef FEATURE_WLAN_CCX +#if defined(FEATURE_WLAN_CCX) && !defined(FEATURE_WLAN_CCX_UPLOAD) #include "ccxApi.h" #endif @@ -80,13 +78,13 @@ void peInitBeaconParams(tpAniSirGlobal pMac, tpPESession psessionEntry) psessionEntry->beaconParams.gHTObssMode = 0; // Number of legacy STAs associated - palZeroMemory(pMac->hHdd, (void*)&psessionEntry->gLim11bParams, sizeof(tLimProtStaParams)); - palZeroMemory(pMac->hHdd, (void*)&psessionEntry->gLim11aParams, sizeof(tLimProtStaParams)); - palZeroMemory(pMac->hHdd, (void*)&psessionEntry->gLim11gParams, sizeof(tLimProtStaParams)); - palZeroMemory(pMac->hHdd, (void*)&psessionEntry->gLimNonGfParams, sizeof(tLimProtStaParams)); - palZeroMemory(pMac->hHdd, (void*)&psessionEntry->gLimHt20Params, sizeof(tLimProtStaParams)); - palZeroMemory(pMac->hHdd, (void*)&psessionEntry->gLimLsigTxopParams, sizeof(tLimProtStaParams)); - palZeroMemory(pMac->hHdd, (void*)&psessionEntry->gLimOlbcParams, sizeof(tLimProtStaParams)); + vos_mem_set((void*)&psessionEntry->gLim11bParams, sizeof(tLimProtStaParams), 0); + vos_mem_set((void*)&psessionEntry->gLim11aParams, sizeof(tLimProtStaParams), 0); + vos_mem_set((void*)&psessionEntry->gLim11gParams, sizeof(tLimProtStaParams), 0); + vos_mem_set((void*)&psessionEntry->gLimNonGfParams, sizeof(tLimProtStaParams), 0); + vos_mem_set((void*)&psessionEntry->gLimHt20Params, sizeof(tLimProtStaParams), 0); + vos_mem_set((void*)&psessionEntry->gLimLsigTxopParams, sizeof(tLimProtStaParams), 0); + vos_mem_set((void*)&psessionEntry->gLimOlbcParams, sizeof(tLimProtStaParams), 0); } /*-------------------------------------------------------------------------- @@ -105,7 +103,7 @@ void peInitBeaconParams(tpAniSirGlobal pMac, tpPESession psessionEntry) \sa --------------------------------------------------------------------------*/ -tpPESession peCreateSession(tpAniSirGlobal pMac, tANI_U8 *bssid , tANI_U8* sessionId, tANI_U16 numSta) +tpPESession peCreateSession(tpAniSirGlobal pMac, tANI_U8 *bssid, tANI_U8* sessionId, tANI_U16 numSta) { tANI_U8 i; for(i =0; i < pMac->lim.maxBssId; i++) @@ -113,21 +111,23 @@ tpPESession peCreateSession(tpAniSirGlobal pMac, tANI_U8 *bssid , tANI_U8* sessi /* Find first free room in session table */ if(pMac->lim.gpSession[i].valid == FALSE) { - palZeroMemory(pMac, (void*)&pMac->lim.gpSession[i], sizeof(tPESession)); + vos_mem_set((void*)&pMac->lim.gpSession[i], sizeof(tPESession), 0); //Allocate space for Station Table for this session. - if (eHAL_STATUS_SUCCESS != palAllocateMemory(pMac->hHdd, - (void **) &pMac->lim.gpSession[i].dph.dphHashTable.pHashTable, sizeof(tpDphHashNode)*numSta)) + pMac->lim.gpSession[i].dph.dphHashTable.pHashTable = vos_mem_malloc( + sizeof(tpDphHashNode)*numSta); + if ( NULL == pMac->lim.gpSession[i].dph.dphHashTable.pHashTable ) { limLog(pMac, LOGE, FL("memory allocate failed!")); return NULL; } - if (eHAL_STATUS_SUCCESS != palAllocateMemory(pMac->hHdd, - (void **) &pMac->lim.gpSession[i].dph.dphHashTable.pDphNodeArray, sizeof(tDphHashNode)*numSta)) + pMac->lim.gpSession[i].dph.dphHashTable.pDphNodeArray = vos_mem_malloc( + sizeof(tDphHashNode)*numSta); + if ( NULL == pMac->lim.gpSession[i].dph.dphHashTable.pDphNodeArray ) { limLog(pMac, LOGE, FL("memory allocate failed!")); - palFreeMemory(pMac->hHdd,pMac->lim.gpSession[i].dph.dphHashTable.pHashTable); + vos_mem_free(pMac->lim.gpSession[i].dph.dphHashTable.pHashTable); return NULL; } pMac->lim.gpSession[i].dph.dphHashTable.size = numSta; @@ -135,17 +135,17 @@ tpPESession peCreateSession(tpAniSirGlobal pMac, tANI_U8 *bssid , tANI_U8* sessi dphHashTableClassInit(pMac, &pMac->lim.gpSession[i].dph.dphHashTable); - if (eHAL_STATUS_SUCCESS != palAllocateMemory(pMac->hHdd, - (void **) &pMac->lim.gpSession[i].gpLimPeerIdxpool, - sizeof(*pMac->lim.gpSession[i].gpLimPeerIdxpool) * (numSta+1))) + pMac->lim.gpSession[i].gpLimPeerIdxpool = vos_mem_malloc(sizeof( + *pMac->lim.gpSession[i].gpLimPeerIdxpool) * (numSta+1)); + if ( NULL == pMac->lim.gpSession[i].gpLimPeerIdxpool ) { PELOGE(limLog(pMac, LOGE, FL("memory allocate failed!"));) - palFreeMemory(pMac->hHdd,pMac->lim.gpSession[i].dph.dphHashTable.pHashTable); - palFreeMemory(pMac->hHdd,pMac->lim.gpSession[i].dph.dphHashTable.pDphNodeArray); + vos_mem_free(pMac->lim.gpSession[i].dph.dphHashTable.pHashTable); + vos_mem_free(pMac->lim.gpSession[i].dph.dphHashTable.pDphNodeArray); return NULL; } - palZeroMemory(pMac->hHdd, pMac->lim.gpSession[i].gpLimPeerIdxpool, - sizeof(*pMac->lim.gpSession[i].gpLimPeerIdxpool) * (numSta+1)); + vos_mem_set(pMac->lim.gpSession[i].gpLimPeerIdxpool, + sizeof(*pMac->lim.gpSession[i].gpLimPeerIdxpool) * (numSta+1), 0); pMac->lim.gpSession[i].freePeerIdxHead = 0; pMac->lim.gpSession[i].freePeerIdxTail = 0; pMac->lim.gpSession[i].gLimNumOfCurrentSTAs = 0; @@ -181,8 +181,8 @@ tpPESession peCreateSession(tpAniSirGlobal pMac, tANI_U8 *bssid , tANI_U8* sessi pMac->lim.gpSession[i].htRecommendedTxWidthSet = 0; pMac->lim.gpSession[i].htSecondaryChannelOffset = 0; #ifdef FEATURE_WLAN_TDLS - palZeroMemory(pMac->hHdd, pMac->lim.gpSession[i].peerAIDBitmap, - sizeof(pMac->lim.gpSession[i].peerAIDBitmap)); + vos_mem_set(pMac->lim.gpSession[i].peerAIDBitmap, + sizeof(pMac->lim.gpSession[i].peerAIDBitmap), 0); #endif pMac->lim.gpSession[i].fWaitForProbeRsp = 0; pMac->lim.gpSession[i].fIgnoreCapsChange = 0; @@ -278,7 +278,7 @@ tpPESession peFindSessionByBssIdx(tpAniSirGlobal pMac, tANI_U8 bssIdx) \sa --------------------------------------------------------------------------*/ - tpPESession peFindSessionBySessionId(tpAniSirGlobal pMac , tANI_U8 sessionId) + tpPESession peFindSessionBySessionId(tpAniSirGlobal pMac, tANI_U8 sessionId) { if(sessionId >= pMac->lim.maxBssId) { @@ -366,68 +366,68 @@ void peDeleteSession(tpAniSirGlobal pMac, tpPESession psessionEntry) } } - if(psessionEntry->pLimStartBssReq != NULL) + if (psessionEntry->pLimStartBssReq != NULL) { - palFreeMemory( pMac->hHdd, psessionEntry->pLimStartBssReq ); + vos_mem_free( psessionEntry->pLimStartBssReq ); psessionEntry->pLimStartBssReq = NULL; } - if(psessionEntry->pLimJoinReq != NULL) + if (psessionEntry->pLimJoinReq != NULL) { - palFreeMemory( pMac->hHdd, psessionEntry->pLimJoinReq ); + vos_mem_free( psessionEntry->pLimJoinReq ); psessionEntry->pLimJoinReq = NULL; } - if(psessionEntry->pLimReAssocReq != NULL) + if (psessionEntry->pLimReAssocReq != NULL) { - palFreeMemory( pMac->hHdd, psessionEntry->pLimReAssocReq ); + vos_mem_free( psessionEntry->pLimReAssocReq ); psessionEntry->pLimReAssocReq = NULL; } - if(psessionEntry->pLimMlmJoinReq != NULL) + if (psessionEntry->pLimMlmJoinReq != NULL) { - palFreeMemory( pMac->hHdd, psessionEntry->pLimMlmJoinReq ); + vos_mem_free( psessionEntry->pLimMlmJoinReq ); psessionEntry->pLimMlmJoinReq = NULL; } - if(psessionEntry->dph.dphHashTable.pHashTable != NULL) + if (psessionEntry->dph.dphHashTable.pHashTable != NULL) { - palFreeMemory(pMac->hHdd, psessionEntry->dph.dphHashTable.pHashTable); + vos_mem_free(psessionEntry->dph.dphHashTable.pHashTable); psessionEntry->dph.dphHashTable.pHashTable = NULL; } - if(psessionEntry->dph.dphHashTable.pDphNodeArray != NULL) + if (psessionEntry->dph.dphHashTable.pDphNodeArray != NULL) { - palFreeMemory(pMac->hHdd, psessionEntry->dph.dphHashTable.pDphNodeArray); + vos_mem_free(psessionEntry->dph.dphHashTable.pDphNodeArray); psessionEntry->dph.dphHashTable.pDphNodeArray = NULL; } - if(psessionEntry->gpLimPeerIdxpool != NULL) + if (psessionEntry->gpLimPeerIdxpool != NULL) { - palFreeMemory(pMac->hHdd, psessionEntry->gpLimPeerIdxpool); + vos_mem_free(psessionEntry->gpLimPeerIdxpool); psessionEntry->gpLimPeerIdxpool = NULL; } - if(psessionEntry->beacon != NULL) + if (psessionEntry->beacon != NULL) { - palFreeMemory( pMac->hHdd, psessionEntry->beacon); + vos_mem_free( psessionEntry->beacon); psessionEntry->beacon = NULL; } - if(psessionEntry->assocReq != NULL) + if (psessionEntry->assocReq != NULL) { - palFreeMemory( pMac->hHdd, psessionEntry->assocReq); + vos_mem_free( psessionEntry->assocReq); psessionEntry->assocReq = NULL; } - if(psessionEntry->assocRsp != NULL) + if (psessionEntry->assocRsp != NULL) { - palFreeMemory( pMac->hHdd, psessionEntry->assocRsp); + vos_mem_free( psessionEntry->assocRsp); psessionEntry->assocRsp = NULL; } - if(psessionEntry->parsedAssocReq != NULL) + if (psessionEntry->parsedAssocReq != NULL) { // Cleanup the individual allocation first for (i=0; i < psessionEntry->dph.dphHashTable.size; i++) @@ -436,40 +436,40 @@ void peDeleteSession(tpAniSirGlobal pMac, tpPESession psessionEntry) { if( ((tpSirAssocReq)(psessionEntry->parsedAssocReq[i]))->assocReqFrame ) { - palFreeMemory(pMac->hHdd, - ((tpSirAssocReq)(psessionEntry->parsedAssocReq[i]))->assocReqFrame); + vos_mem_free(((tpSirAssocReq) + (psessionEntry->parsedAssocReq[i]))->assocReqFrame); ((tpSirAssocReq)(psessionEntry->parsedAssocReq[i]))->assocReqFrame = NULL; ((tpSirAssocReq)(psessionEntry->parsedAssocReq[i]))->assocReqFrameLength = 0; } - palFreeMemory(pMac->hHdd, (void *)psessionEntry->parsedAssocReq[i]); + vos_mem_free(psessionEntry->parsedAssocReq[i]); psessionEntry->parsedAssocReq[i] = NULL; } } // Cleanup the whole block - palFreeMemory(pMac->hHdd, (void *)psessionEntry->parsedAssocReq); + vos_mem_free(psessionEntry->parsedAssocReq); psessionEntry->parsedAssocReq = NULL; } if (NULL != psessionEntry->limAssocResponseData) { - palFreeMemory( pMac->hHdd, psessionEntry->limAssocResponseData); + vos_mem_free( psessionEntry->limAssocResponseData); psessionEntry->limAssocResponseData = NULL; } #if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR) if (NULL != psessionEntry->pLimMlmReassocRetryReq) { - palFreeMemory( pMac->hHdd, psessionEntry->pLimMlmReassocRetryReq); + vos_mem_free( psessionEntry->pLimMlmReassocRetryReq); psessionEntry->pLimMlmReassocRetryReq = NULL; } #endif if (NULL != psessionEntry->pLimMlmReassocReq) { - palFreeMemory( pMac->hHdd, psessionEntry->pLimMlmReassocReq); + vos_mem_free( psessionEntry->pLimMlmReassocReq); psessionEntry->pLimMlmReassocReq = NULL; } -#ifdef FEATURE_WLAN_CCX +#if defined(FEATURE_WLAN_CCX) && !defined(FEATURE_WLAN_CCX_UPLOAD) limCleanupCcxCtxt(pMac, psessionEntry); #endif diff --git a/CORE/MAC/src/pe/lim/limSmeReqUtils.c b/CORE/MAC/src/pe/lim/limSmeReqUtils.c index 87d9d7e6968f..bc87e572cb3c 100644 --- a/CORE/MAC/src/pe/lim/limSmeReqUtils.c +++ b/CORE/MAC/src/pe/lim/limSmeReqUtils.c @@ -26,7 +26,6 @@ */ /* - * * Airgo Networks, Inc proprietary. All rights reserved. * This file limSmeReqUtils.cc contains the utility functions * for processing SME request messages. @@ -711,7 +710,7 @@ limIsSmeJoinReqValid(tpAniSirGlobal pMac, tpSirSmeJoinReq pJoinReq) Reject Join Req if the Self Mac Address and the Ap's Mac Address is same */ - if( palEqualMemory( pMac->hHdd, (tANI_U8* ) pJoinReq->selfMacAddr, + if ( vos_mem_compare( (tANI_U8* ) pJoinReq->selfMacAddr, (tANI_U8 *) pJoinReq->bssDescription.bssId, (tANI_U8) (sizeof(tSirMacAddr)))) { diff --git a/CORE/MAC/src/pe/lim/limTimerUtils.c b/CORE/MAC/src/pe/lim/limTimerUtils.c index b0f51041fe2b..f68690163926 100644 --- a/CORE/MAC/src/pe/lim/limTimerUtils.c +++ b/CORE/MAC/src/pe/lim/limTimerUtils.c @@ -58,6 +58,11 @@ //default beacon interval value used in HB timer interval calculation #define LIM_HB_TIMER_BEACON_INTERVAL 100 + +/* This timer is a periodic timer which expires at every 1 sec to + convert ACTIVE DFS channel to DFS channels */ +#define ACTIVE_TO_PASSIVE_CONVERISON_TIMEOUT 1000 + /** * limCreateTimers() * @@ -593,10 +598,10 @@ limCreateTimers(tpAniSirGlobal pMac) FL("could not retrieve mac preauth value")); } pMac->lim.gLimPreAuthTimerTable.numEntry = cfgValue; - if (palAllocateMemory(pMac->hHdd, (void **) &pMac->lim.gLimPreAuthTimerTable.pTable, - cfgValue*sizeof(tLimPreAuthNode)) != eHAL_STATUS_SUCCESS) + pMac->lim.gLimPreAuthTimerTable.pTable = vos_mem_malloc(cfgValue*sizeof(tLimPreAuthNode)); + if(pMac->lim.gLimPreAuthTimerTable.pTable == NULL) { - limLog(pMac, LOGP, FL("palAllocateMemory failed!")); + limLog(pMac, LOGP, FL("AllocateMemory failed!")); goto err_timer; } @@ -657,7 +662,7 @@ limCreateTimers(tpAniSirGlobal pMac) } #endif -#ifdef FEATURE_WLAN_CCX +#if defined(FEATURE_WLAN_CCX) && !defined(FEATURE_WLAN_CCX_UPLOAD) cfgValue = 5000; cfgValue = SYS_MS_TO_TICKS(cfgValue); @@ -672,7 +677,7 @@ limCreateTimers(tpAniSirGlobal pMac) limLog(pMac, LOGP, FL("could not create Join failure timer")); goto err_timer; } -#endif +#endif /* FEATURE_WLAN_CCX && !FEATURE_WLAN_CCX_UPLOAD */ cfgValue = 1000; cfgValue = SYS_MS_TO_TICKS(cfgValue); @@ -725,15 +730,27 @@ limCreateTimers(tpAniSirGlobal pMac) goto err_timer; } + cfgValue = ACTIVE_TO_PASSIVE_CONVERISON_TIMEOUT; + cfgValue = SYS_MS_TO_TICKS(cfgValue); + if (tx_timer_create(&pMac->lim.limTimers.gLimActiveToPassiveChannelTimer, + "ACTIVE TO PASSIVE CHANNEL", limTimerHandler, + SIR_LIM_CONVERT_ACTIVE_CHANNEL_TO_PASSIVE, cfgValue, 0, + TX_NO_ACTIVATE) != TX_SUCCESS) + { + limLog(pMac, LOGW,FL("could not create timer for passive channel to active channel")); + goto err_timer; + } + + return TX_SUCCESS; err_timer: tx_timer_delete(&pMac->lim.limTimers.gLimDeauthAckTimer); tx_timer_delete(&pMac->lim.limTimers.gLimDisassocAckTimer); tx_timer_delete(&pMac->lim.limTimers.gLimRemainOnChannelTimer); - #ifdef FEATURE_WLAN_CCX + #if defined(FEATURE_WLAN_CCX) && !defined(FEATURE_WLAN_CCX_UPLOAD) tx_timer_delete(&pMac->lim.limTimers.gLimCcxTsmTimer); - #endif + #endif /* FEATURE_WLAN_CCX && !FEATURE_WLAN_CCX_UPLOAD */ tx_timer_delete(&pMac->lim.limTimers.gLimFTPreAuthRspTimer); tx_timer_delete(&pMac->lim.limTimers.gLimUpdateOlbcCacheTimer); while(((tANI_S32)--i) >= 0) @@ -758,9 +775,10 @@ limCreateTimers(tpAniSirGlobal pMac) tx_timer_delete(&pMac->lim.limTimers.gLimPeriodicProbeReqTimer); tx_timer_delete(&pMac->lim.limTimers.gLimMinChannelTimer); tx_timer_delete(&pMac->lim.limTimers.gLimP2pSingleShotNoaInsertTimer); + tx_timer_delete(&pMac->lim.limTimers.gLimActiveToPassiveChannelTimer); if(NULL != pMac->lim.gLimPreAuthTimerTable.pTable) - palFreeMemory(pMac->hHdd, pMac->lim.gLimPreAuthTimerTable.pTable); + vos_mem_free(pMac->lim.gLimPreAuthTimerTable.pTable); return TX_TIMER_ERROR; @@ -934,7 +952,7 @@ limAssocFailureTimerHandler(void *pMacGlobal, tANI_U32 param) limLog(pMac, LOGW, FL("Reassoc request retry MAX(%d) reached"), LIM_MAX_REASSOC_RETRY_LIMIT); if(NULL != pMac->lim.pSessionEntry->pLimMlmReassocRetryReq) { - palFreeMemory( pMac->hHdd, pMac->lim.pSessionEntry->pLimMlmReassocRetryReq); + vos_mem_free( pMac->lim.pSessionEntry->pLimMlmReassocRetryReq); pMac->lim.pSessionEntry->pLimMlmReassocRetryReq = NULL; } } @@ -1389,7 +1407,7 @@ limDeactivateAndChangeTimer(tpAniSirGlobal pMac, tANI_U32 timerId) } else { - limLog(pMac, LOGW, FL("HeartBeat timer value is changed = %lu"), val); + limLog(pMac, LOGW, FL("HeartBeat timer value is changed = %u"), val); } break; @@ -1431,7 +1449,7 @@ limDeactivateAndChangeTimer(tpAniSirGlobal pMac, tANI_U32 timerId) } else { - limLog(pMac, LOGW, FL("Probe after HB timer value is changed = %lu"), val); + limLog(pMac, LOGW, FL("Probe after HB timer value is changed = %u"), val); } break; @@ -1640,7 +1658,7 @@ limDeactivateAndChangeTimer(tpAniSirGlobal pMac, tANI_U32 timerId) } break; #endif -#ifdef FEATURE_WLAN_CCX +#if defined(FEATURE_WLAN_CCX) && !defined(FEATURE_WLAN_CCX_UPLOAD) case eLIM_TSM_TIMER: if (tx_timer_deactivate(&pMac->lim.limTimers.gLimCcxTsmTimer) != TX_SUCCESS) @@ -1648,7 +1666,7 @@ limDeactivateAndChangeTimer(tpAniSirGlobal pMac, tANI_U32 timerId) limLog(pMac, LOGE, FL("Unable to deactivate TSM timer")); } break; -#endif +#endif /* FEATURE_WLAN_CCX && !FEATURE_WLAN_CCX_UPLOAD */ case eLIM_REMAIN_CHN_TIMER: if (tx_timer_deactivate(&pMac->lim.limTimers.gLimRemainOnChannelTimer) != TX_SUCCESS) { @@ -1672,6 +1690,32 @@ limDeactivateAndChangeTimer(tpAniSirGlobal pMac, tANI_U32 timerId) return; } break; + + case eLIM_CONVERT_ACTIVE_CHANNEL_TO_PASSIVE: + if (tx_timer_deactivate(&pMac->lim.limTimers.gLimActiveToPassiveChannelTimer) != TX_SUCCESS) + { + /** + ** Could not deactivate Active to passive channel timer. + ** Log error. + **/ + limLog(pMac, LOGP, FL("Unable to Deactivate " + "Active to passive channel timer")); + return; + } + val = ACTIVE_TO_PASSIVE_CONVERISON_TIMEOUT; + val = SYS_MS_TO_TICKS(val); + if (tx_timer_change(&pMac->lim.limTimers.gLimActiveToPassiveChannelTimer, + val, 0) != TX_SUCCESS) + { + /** + * Could not change timer to check scan type for passive channel. + * timer. Log error. + */ + limLog(pMac, LOGP, FL("Unable to change timer")); + return; + } + break; + case eLIM_DISASSOC_ACK_TIMER: if (tx_timer_deactivate(&pMac->lim.limTimers.gLimDisassocAckTimer) != TX_SUCCESS) { @@ -1764,37 +1808,48 @@ limDeactivateAndChangeTimer(tpAniSirGlobal pMac, tANI_U32 timerId) void limHeartBeatDeactivateAndChangeTimer(tpAniSirGlobal pMac, tpPESession psessionEntry) { - tANI_U32 val, val1; + tANI_U32 val, val1; - MTRACE(macTrace(pMac, TRACE_CODE_TIMER_DEACTIVATE, psessionEntry->peSessionId, eLIM_HEART_BEAT_TIMER)); + MTRACE(macTrace(pMac, TRACE_CODE_TIMER_DEACTIVATE, psessionEntry->peSessionId, eLIM_HEART_BEAT_TIMER)); #ifdef WLAN_ACTIVEMODE_OFFLOAD_FEATURE - if(IS_ACTIVEMODE_OFFLOAD_FEATURE_ENABLE) - return; + if(IS_ACTIVEMODE_OFFLOAD_FEATURE_ENABLE) + return; #endif - if (tx_timer_deactivate(&pMac->lim.limTimers.gLimHeartBeatTimer) != TX_SUCCESS) - limLog(pMac, LOGP, FL("Fail to deactivate HeartBeatTimer ")); + if (tx_timer_deactivate(&pMac->lim.limTimers.gLimHeartBeatTimer) != TX_SUCCESS) + limLog(pMac, LOGP, FL("Fail to deactivate HeartBeatTimer ")); + + /* HB Timer sessionisation: In case of 2 or more sessions, the HB interval keeps + changing. to avoid this problem, HeartBeat interval is made constant, by + fixing beacon interval to 100ms immaterial of the beacon interval of the session */ - /* HB Timer sessionisation: In case of 2 or more sessions, the HB interval keeps - changing. to avoid this problem, HeartBeat interval is made constant, by - fixing beacon interval to 100ms immaterial of the beacon interval of the session */ + //val = psessionEntry->beaconParams.beaconInterval; + val = LIM_HB_TIMER_BEACON_INTERVAL; - //val = psessionEntry->beaconParams.beaconInterval; - val = LIM_HB_TIMER_BEACON_INTERVAL; + if (wlan_cfgGetInt(pMac, WNI_CFG_HEART_BEAT_THRESHOLD, &val1) != eSIR_SUCCESS) + limLog(pMac, LOGP, FL("Fail to get WNI_CFG_HEART_BEAT_THRESHOLD ")); - if (wlan_cfgGetInt(pMac, WNI_CFG_HEART_BEAT_THRESHOLD, &val1) != eSIR_SUCCESS) - limLog(pMac, LOGP, FL("Fail to get WNI_CFG_HEART_BEAT_THRESHOLD ")); + PELOGW(limLog(pMac,LOGW, + FL("HB Timer Int.=100ms * %d, Beacon Int.=%dms,Session Id=%d "), + val1, psessionEntry->beaconParams.beaconInterval, + psessionEntry->peSessionId);) - PELOGW(limLog(pMac,LOGW, - FL("HB Timer Int.=100ms * %d, Beacon Int.=%dms,Session Id=%d "), - val1, psessionEntry->beaconParams.beaconInterval, - psessionEntry->peSessionId);) + /* The HB timer timeout value of 4 seconds (40 beacon intervals) is not + * enough to judge the peer device inactivity when 32 peers are connected. + * Hence increasing the HB timer timeout to + * HBtimeout = (TBTT * num_beacons * num_peers) + */ + if (eSIR_IBSS_MODE == psessionEntry->bssType && + pMac->lim.gLimNumIbssPeers > 0) + { + val1 = val1 * pMac->lim.gLimNumIbssPeers; + } - // Change timer to reactivate it in future - val = SYS_MS_TO_TICKS(val * val1); + // Change timer to reactivate it in future + val = SYS_MS_TO_TICKS(val * val1); - if (tx_timer_change(&pMac->lim.limTimers.gLimHeartBeatTimer, val, 0) != TX_SUCCESS) - limLog(pMac, LOGP, FL("Fail to change HeartBeatTimer")); + if (tx_timer_change(&pMac->lim.limTimers.gLimHeartBeatTimer, val, 0) != TX_SUCCESS) + limLog(pMac, LOGP, FL("Fail to change HeartBeatTimer")); } /****** end limHeartBeatDeactivateAndChangeTimer() ******/ @@ -1825,13 +1880,38 @@ limReactivateHeartBeatTimer(tpAniSirGlobal pMac, tpPESession psessionEntry) MTRACE(macTrace(pMac, TRACE_CODE_TIMER_ACTIVATE, psessionEntry->peSessionId, eLIM_HEART_BEAT_TIMER)); //only start the hearbeat-timer if the timeout value is non-zero - if(pMac->lim.limTimers.gLimHeartBeatTimer.initScheduleTimeInMsecs > 0) { - if (tx_timer_activate(&pMac->lim.limTimers.gLimHeartBeatTimer)!= TX_SUCCESS) - { - limLog(pMac, LOGP,FL("could not activate Heartbeat timer")); - } - limLog(pMac, LOGW, FL("Reactivated heartbeat link monitoring")); - limResetHBPktCount(psessionEntry); + if(pMac->lim.limTimers.gLimHeartBeatTimer.initScheduleTimeInMsecs > 0) + { + /* + * There is increasing need to limit the apps wakeup due to WLAN + * activity. During HB monitoring, the beacons from peer are sent to + * the host causing the host to wakeup. Hence, offloading the HB + * monitoring to LMAC + */ + if (psessionEntry->limSystemRole == eLIM_STA_IN_IBSS_ROLE && + IS_IBSS_HEARTBEAT_OFFLOAD_FEATURE_ENABLE) + { + if (tx_timer_deactivate(&pMac->lim.limTimers.gLimHeartBeatTimer)!= TX_SUCCESS) + { + limLog(pMac, LOGP,FL("IBSS HeartBeat Offloaded, Could not deactivate Heartbeat timer")); + } + else + { + limLog(pMac, LOGE, FL("IBSS HeartBeat Offloaded, Deactivated heartbeat link monitoring")); + } + } + else + { + if (tx_timer_activate(&pMac->lim.limTimers.gLimHeartBeatTimer)!= TX_SUCCESS) + { + limLog(pMac, LOGP,FL("could not activate Heartbeat timer")); + } + else + { + limLog(pMac, LOGW, FL("Reactivated heartbeat link monitoring")); + } + } + limResetHBPktCount(psessionEntry); } } /****** end limReactivateHeartBeatTimer() ******/ @@ -1851,17 +1931,18 @@ limReactivateHeartBeatTimer(tpAniSirGlobal pMac, tpPESession psessionEntry) * @note staId for eLIM_AUTH_RSP_TIMER is auth Node Index. * * @param pMac - Pointer to Global MAC structure + * @param psessionEntry - Session Entry * * @return TX_SUCCESS - timer is activated * errors - fail to start the timer */ -v_UINT_t limActivateHearBeatTimer(tpAniSirGlobal pMac) +v_UINT_t limActivateHearBeatTimer(tpAniSirGlobal pMac, tpPESession psessionEntry) { v_UINT_t status = TX_TIMER_ERROR; #ifdef WLAN_ACTIVEMODE_OFFLOAD_FEATURE if(IS_ACTIVEMODE_OFFLOAD_FEATURE_ENABLE) - return (status); + return (TX_SUCCESS); #endif if(TX_AIRGO_TMR_SIGNATURE == pMac->lim.limTimers.gLimHeartBeatTimer.tmrSignature) @@ -1869,12 +1950,39 @@ v_UINT_t limActivateHearBeatTimer(tpAniSirGlobal pMac) //consider 0 interval a ok case if( pMac->lim.limTimers.gLimHeartBeatTimer.initScheduleTimeInMsecs ) { - status = tx_timer_activate(&pMac->lim.limTimers.gLimHeartBeatTimer); - if( TX_SUCCESS != status ) - { - PELOGE(limLog(pMac, LOGE, - FL("could not activate Heartbeat timer status(%d)"), status);) - } + if (psessionEntry->limSystemRole == eLIM_STA_IN_IBSS_ROLE && + IS_IBSS_HEARTBEAT_OFFLOAD_FEATURE_ENABLE) + { + /* HB offload in IBSS mode */ + status = tx_timer_deactivate(&pMac->lim.limTimers.gLimHeartBeatTimer); + if (TX_SUCCESS != status) + { + PELOGE(limLog(pMac, LOGE, + FL("IBSS HB Offload, Could not deactivate HB timer status(%d)"), + status);) + } + else + { + PELOGE(limLog(pMac, LOGE, + FL("%s] IBSS HB Offloaded, Heartbeat timer deactivated"), + __func__);) + } + + } + else + { + status = tx_timer_activate(&pMac->lim.limTimers.gLimHeartBeatTimer); + if ( TX_SUCCESS != status ) + { + PELOGE(limLog(pMac, LOGE, + FL("could not activate Heartbeat timer status(%d)"), status);) + } + else + { + PELOGE(limLog(pMac, LOGW, + FL("%s] Activated Heartbeat timer status(%d)"), __func__, status);) + } + } } else { diff --git a/CORE/MAC/src/pe/lim/limTimerUtils.h b/CORE/MAC/src/pe/lim/limTimerUtils.h index 4e20afef3eb6..d37a77118a7b 100644 --- a/CORE/MAC/src/pe/lim/limTimerUtils.h +++ b/CORE/MAC/src/pe/lim/limTimerUtils.h @@ -26,7 +26,6 @@ */ /* - * * Airgo Networks, Inc proprietary. All rights reserved. * This file limTimerUtils.h contains the utility definitions * LIM uses for timer handling. @@ -83,6 +82,7 @@ enum eLIM_DEAUTH_ACK_TIMER, eLIM_PERIODIC_JOIN_PROBE_REQ_TIMER, eLIM_INSERT_SINGLESHOT_NOA_TIMER, + eLIM_CONVERT_ACTIVE_CHANNEL_TO_PASSIVE }; #define LIM_DISASSOC_DEAUTH_ACK_TIMEOUT 500 @@ -127,11 +127,12 @@ void limCBScanDurationTimerHandler(void *, tANI_U32); * @note staId for eLIM_AUTH_RSP_TIMER is auth Node Index. * * @param pMac - Pointer to Global MAC structure + * @param psessionEntry - Pointer to PE session entry * * @return TX_SUCCESS - timer is activated * errors - fail to start the timer */ -v_UINT_t limActivateHearBeatTimer(tpAniSirGlobal pMac); +v_UINT_t limActivateHearBeatTimer(tpAniSirGlobal pMac, tpPESession psessionEntry); #if 0 void limWPSOverlapTimerHandler(void *pMacGlobal, tANI_U32 param); diff --git a/CORE/MAC/src/pe/lim/limTrace.c b/CORE/MAC/src/pe/lim/limTrace.c index 563cf38b3aa2..522b3c8cad43 100644 --- a/CORE/MAC/src/pe/lim/limTrace.c +++ b/CORE/MAC/src/pe/lim/limTrace.c @@ -92,6 +92,7 @@ static tANI_U8* __limTraceGetTimerString( tANI_U16 timerId ) CASE_RETURN_STRING(eLIM_DEAUTH_ACK_TIMER); CASE_RETURN_STRING(eLIM_PERIODIC_JOIN_PROBE_REQ_TIMER); CASE_RETURN_STRING(eLIM_INSERT_SINGLESHOT_NOA_TIMER); + CASE_RETURN_STRING(eLIM_CONVERT_ACTIVE_CHANNEL_TO_PASSIVE); default: return( "UNKNOWN" ); break; diff --git a/CORE/MAC/src/pe/lim/limTypes.h b/CORE/MAC/src/pe/lim/limTypes.h index 8d43214b6d76..c86a5364da97 100644 --- a/CORE/MAC/src/pe/lim/limTypes.h +++ b/CORE/MAC/src/pe/lim/limTypes.h @@ -122,13 +122,13 @@ #define LIM_MIN_MEM_ASSOC 4 /// Verifies whether given mac addr matches the CURRENT Bssid -#define IS_CURRENT_BSSID(pMac, addr,psessionEntry) (palEqualMemory(pMac->hHdd, addr, \ - psessionEntry->bssId, \ - sizeof(psessionEntry->bssId))) +#define IS_CURRENT_BSSID(pMac, addr,psessionEntry) (vos_mem_compare( addr, \ + psessionEntry->bssId, \ + sizeof(psessionEntry->bssId))) /// Verifies whether given addr matches the REASSOC Bssid -#define IS_REASSOC_BSSID(pMac, addr,psessionEntry) (palEqualMemory(pMac->hHdd, addr, \ - psessionEntry->limReAssocbssId, \ - sizeof(psessionEntry->limReAssocbssId))) +#define IS_REASSOC_BSSID(pMac, addr,psessionEntry) (vos_mem_compare( addr, \ + psessionEntry->limReAssocbssId, \ + sizeof(psessionEntry->limReAssocbssId))) #define REQ_TYPE_REGISTRAR (0x2) #define REQ_TYPE_WLAN_MANAGER_REGISTRAR (0x3) @@ -705,7 +705,7 @@ tSirRetStatus limSendLinkReportActionFrame(tpAniSirGlobal, tpSirMacLinkReport, t tSirRetStatus limSendRadioMeasureReportActionFrame(tpAniSirGlobal, tANI_U8, tANI_U8, tpSirMacRadioMeasureReport, tSirMacAddr, tpPESession); #endif -#ifdef FEATURE_WLAN_CCX +#if defined(FEATURE_WLAN_CCX) && !defined(FEATURE_WLAN_CCX_UPLOAD) void limProcessIappFrame(tpAniSirGlobal, tANI_U8 *,tpPESession); #endif @@ -727,6 +727,8 @@ tSirRetStatus limProcessSmeTdlsMgmtSendReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf); tSirRetStatus limProcessSmeTdlsAddStaReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf); +tSirRetStatus limProcesSmeTdlsLinkEstablishReq(tpAniSirGlobal pMac, + tANI_U32 *pMsgBuf); tSirRetStatus limProcessSmeTdlsDelStaReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf); void limSendSmeTDLSDeleteAllPeerInd(tpAniSirGlobal pMac, tpPESession psessionEntry); @@ -824,6 +826,8 @@ void limSendHalEndScanReq( tpAniSirGlobal, tANI_U8, tLimLimHalScanState); void limSendHalFinishScanReq( tpAniSirGlobal, tLimLimHalScanState); void limContinuePostChannelScan(tpAniSirGlobal pMac); +void limCovertChannelScanType(tpAniSirGlobal pMac,tANI_U8 channelNum, tANI_BOOLEAN passiveToActive); +void limSetDFSChannelList(tpAniSirGlobal pMac,tANI_U8 channelNum, tSirDFSChannelList *dfsChannelList); void limContinueChannelLearn( tpAniSirGlobal ); //WLAN_SUSPEND_LINK Related tANI_U8 limIsLinkSuspended(tpAniSirGlobal pMac); @@ -859,6 +863,15 @@ void limProcessLearnIntervalTimeout(tpAniSirGlobal pMac); tSirRetStatus limSendSaQueryResponseFrame( tpAniSirGlobal pMac, tANI_U8 *transId, tSirMacAddr peer,tpPESession psessionEntry); #endif + +#if defined WLAN_FEATURE_RELIABLE_MCAST +void limProcessRMCMessages(tpAniSirGlobal pMac, eRmcMessageType msgType, + tANI_U32 *pMsgBuf); +tSirRetStatus limSendRMCActionFrame(tpAniSirGlobal pMac, + tSirMacAddr peerMacAddr, tSirRMCInfo *pRMC, + tpPESession psessionEntry); +#endif /* WLAN_FEATURE_RELIABLE_MCAST */ + // Inline functions /** @@ -1054,6 +1067,7 @@ void limSendSmeMgmtFrameInd( tANI_S8 rxRssi); void limProcessRemainOnChnTimeout(tpAniSirGlobal pMac); void limProcessInsertSingleShotNOATimeout(tpAniSirGlobal pMac); +void limConvertActiveChannelToPassiveChannel(tpAniSirGlobal pMac); void limSendP2PActionFrame(tpAniSirGlobal pMac, tpSirMsgQ pMsg); void limAbortRemainOnChan(tpAniSirGlobal pMac, tANI_U8 sessionId); tSirRetStatus __limProcessSmeNoAUpdate(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf); @@ -1090,5 +1104,8 @@ typedef struct sSetLinkCbackParams #endif void limProcessRxScanEvent(tpAniSirGlobal mac, void *buf); + +int limProcessRemainOnChnlReq(tpAniSirGlobal pMac, tANI_U32 *pMsg); +void limRemainOnChnRsp(tpAniSirGlobal pMac, eHalStatus status, tANI_U32 *data); #endif /* __LIM_TYPES_H */ diff --git a/CORE/MAC/src/pe/lim/limUtils.c b/CORE/MAC/src/pe/lim/limUtils.c index 68d15b4fcbbd..7cfac443b4b2 100644 --- a/CORE/MAC/src/pe/lim/limUtils.c +++ b/CORE/MAC/src/pe/lim/limUtils.c @@ -79,14 +79,14 @@ limAssignDialogueToken(tpAniSirGlobal pMac) { static tANI_U8 token; tpDialogueToken pCurrNode; - if(eHAL_STATUS_SUCCESS != - palAllocateMemory(pMac->hHdd, (void **) &pCurrNode, sizeof(tDialogueToken))) + pCurrNode = vos_mem_malloc(sizeof(tDialogueToken)); + if ( NULL == pCurrNode ) { - PELOGE(limLog(pMac, LOGE, FL("palAllocateMemory failed"));) + PELOGE(limLog(pMac, LOGE, FL("AllocateMemory failed"));) return NULL; } - palZeroMemory(pMac->hHdd, (void *) pCurrNode, sizeof(tDialogueToken)); + vos_mem_set((void *) pCurrNode, sizeof(tDialogueToken), 0); //first node in the list is being added. if(NULL == pMac->lim.pDialogueTokenHead) { @@ -100,7 +100,12 @@ limAssignDialogueToken(tpAniSirGlobal pMac) //assocId and tid of the node will be filled in by caller. pCurrNode->next = NULL; pCurrNode->token = token++; - PELOG4(limLog(pMac, LOG4, FL("token assigned = %d"), token);) + + /* Dialog token should be a non-zero value */ + if (0 == pCurrNode->token) + pCurrNode->token = token; + + PELOG4(limLog(pMac, LOG4, FL("token assigned = %d"), pCurrNode->token);) return pCurrNode; } @@ -134,7 +139,7 @@ limSearchAndDeleteDialogueToken(tpAniSirGlobal pMac, tANI_U8 token, tANI_U16 ass //there was only one node in the list. So tail pointer also needs to be adjusted. if(NULL == pMac->lim.pDialogueTokenHead) pMac->lim.pDialogueTokenTail = NULL; - palFreeMemory(pMac->hHdd, (void *) pCurrNode); + vos_mem_free(pCurrNode); return eSIR_SUCCESS; } @@ -159,6 +164,7 @@ limSearchAndDeleteDialogueToken(tpAniSirGlobal pMac, tANI_U8 token, tANI_U16 ass //if the node being deleted is the last one then we also need to move the tail pointer to the prevNode. if(NULL == pCurrNode->next) pMac->lim.pDialogueTokenTail = pPrevNode; + vos_mem_free(pCurrNode); return eSIR_SUCCESS; } @@ -183,7 +189,7 @@ limDeleteDialogueTokenList(tpAniSirGlobal pMac) { pCurrNode = pMac->lim.pDialogueTokenHead; pMac->lim.pDialogueTokenHead = pMac->lim.pDialogueTokenHead->next; - palFreeMemory(pMac->hHdd, (void *) pCurrNode); + vos_mem_free(pCurrNode); pCurrNode = NULL; } pMac->lim.pDialogueTokenTail = NULL; @@ -197,22 +203,22 @@ limGetBssidFromBD(tpAniSirGlobal pMac, tANI_U8 * pRxPacketInfo, tANI_U8 *bssId, if (pMh->fc.toDS == 1 && pMh->fc.fromDS == 0) { - palCopyMemory( pMac->hHdd, bssId, pMh->addr1, 6); + vos_mem_copy( bssId, pMh->addr1, 6); *pIgnore = 1; } else if (pMh->fc.toDS == 0 && pMh->fc.fromDS == 1) { - palCopyMemory( pMac->hHdd, bssId, pMh->addr2, 6); + vos_mem_copy ( bssId, pMh->addr2, 6); *pIgnore = 1; } else if (pMh->fc.toDS == 0 && pMh->fc.fromDS == 0) { - palCopyMemory( pMac->hHdd, bssId, pMh->addr3, 6); + vos_mem_copy( bssId, pMh->addr3, 6); *pIgnore = 0; } else { - palCopyMemory( pMac->hHdd, bssId, pMh->addr1, 6); + vos_mem_copy( bssId, pMh->addr1, 6); *pIgnore = 1; } } @@ -663,6 +669,12 @@ char *limMsgStr(tANI_U32 msgType) return "eWNI_PMC_EXIT_BMPS_IND"; case eWNI_SME_SET_BCN_FILTER_REQ: return "eWNI_SME_SET_BCN_FILTER_REQ"; +#if defined(FEATURE_WLAN_CCX) && defined(FEATURE_WLAN_CCX_UPLOAD) + case eWNI_SME_GET_TSM_STATS_REQ: + return "eWNI_SME_GET_TSM_STATS_REQ"; + case eWNI_SME_GET_TSM_STATS_RSP: + return "eWNI_SME_GET_TSM_STATS_RSP"; +#endif /* FEATURE_WLAN_CCX && FEATURE_WLAN_CCX_UPLOAD */ default: return "INVALID SME message"; } @@ -1059,11 +1071,11 @@ limCleanupMlm(tpAniSirGlobal pMac) tx_timer_deactivate(&pMac->lim.limTimers.gLimRemainOnChannelTimer); tx_timer_delete(&pMac->lim.limTimers.gLimRemainOnChannelTimer); -#ifdef FEATURE_WLAN_CCX +#if defined(FEATURE_WLAN_CCX) && !defined(FEATURE_WLAN_CCX_UPLOAD) // Deactivate and delete TSM tx_timer_deactivate(&pMac->lim.limTimers.gLimCcxTsmTimer); tx_timer_delete(&pMac->lim.limTimers.gLimCcxTsmTimer); -#endif +#endif /* FEATURE_WLAN_CCX && !FEATURE_WLAN_CCX_UPLOAD */ tx_timer_deactivate(&pMac->lim.limTimers.gLimDisassocAckTimer); tx_timer_delete(&pMac->lim.limTimers.gLimDisassocAckTimer); @@ -1074,6 +1086,9 @@ limCleanupMlm(tpAniSirGlobal pMac) tx_timer_deactivate(&pMac->lim.limTimers.gLimP2pSingleShotNoaInsertTimer); tx_timer_delete(&pMac->lim.limTimers.gLimP2pSingleShotNoaInsertTimer); + tx_timer_deactivate(&pMac->lim.limTimers.gLimActiveToPassiveChannelTimer); + tx_timer_delete(&pMac->lim.limTimers.gLimActiveToPassiveChannelTimer); + pMac->lim.gLimTimersCreated = 0; } @@ -1382,8 +1397,8 @@ tANI_U8 limWriteDeferredMsgQ(tpAniSirGlobal pMac, tpSirMsgQ limMsg) /* ** save the message to the queue and advanced the write pointer **/ - palCopyMemory(pMac->hHdd, - (tANI_U8 *)&pMac->lim.gLimDeferredMsgQ.deferredQueue[pMac->lim.gLimDeferredMsgQ.write++], + vos_mem_copy( (tANI_U8 *)&pMac->lim.gLimDeferredMsgQ.deferredQueue[ + pMac->lim.gLimDeferredMsgQ.write++], (tANI_U8 *)limMsg, sizeof(tSirMsgQ)); return TX_SUCCESS; @@ -1592,7 +1607,7 @@ void limHandleUpdateOlbcCache(tpAniSirGlobal pMac) return; } - palZeroMemory( pMac->hHdd, ( tANI_U8* )&beaconParams, sizeof( tUpdateBeaconParams) ); + vos_mem_set( ( tANI_U8* )&beaconParams, sizeof( tUpdateBeaconParams), 0); beaconParams.bssIdx = psessionEntry->bssIdx; beaconParams.paramChangeBitmap = 0; @@ -1789,7 +1804,7 @@ tpPESession psessionEntry) PELOG1(limLog(pMac, LOG1, FL("Addr: "));) PELOG1(limPrintMacAddr(pMac, psessionEntry->protStaCache[i].addr, LOG1);) - if (palEqualMemory( pMac->hHdd, + if (vos_mem_compare( psessionEntry->protStaCache[i].addr, peerMacAddr, sizeof(tSirMacAddr))) { @@ -1811,7 +1826,7 @@ tpPESession psessionEntry) return; } - palCopyMemory( pMac->hHdd, psessionEntry->protStaCache[i].addr, + vos_mem_copy( psessionEntry->protStaCache[i].addr, peerMacAddr, sizeof(tSirMacAddr)); @@ -2021,7 +2036,7 @@ limUpdateShortPreamble(tpAniSirGlobal pMac, tSirMacAddr peerMacAddr, if ((psessionEntry->limSystemRole == eLIM_AP_ROLE ) && psessionEntry->gLimNoShortParams.staNoShortCache[i].active) { - if (palEqualMemory( pMac->hHdd, + if (vos_mem_compare( psessionEntry->gLimNoShortParams.staNoShortCache[i].addr, peerMacAddr, sizeof(tSirMacAddr))) return; @@ -2029,7 +2044,7 @@ limUpdateShortPreamble(tpAniSirGlobal pMac, tSirMacAddr peerMacAddr, { if (pMac->lim.gLimNoShortParams.staNoShortCache[i].active) { - if (palEqualMemory( pMac->hHdd, + if (vos_mem_compare( pMac->lim.gLimNoShortParams.staNoShortCache[i].addr, peerMacAddr, sizeof(tSirMacAddr))) return; @@ -2069,14 +2084,14 @@ limUpdateShortPreamble(tpAniSirGlobal pMac, tSirMacAddr peerMacAddr, } - if(psessionEntry->limSystemRole == eLIM_AP_ROLE){ - palCopyMemory( pMac->hHdd, psessionEntry->gLimNoShortParams.staNoShortCache[i].addr, + if (psessionEntry->limSystemRole == eLIM_AP_ROLE){ + vos_mem_copy( psessionEntry->gLimNoShortParams.staNoShortCache[i].addr, peerMacAddr, sizeof(tSirMacAddr)); psessionEntry->gLimNoShortParams.staNoShortCache[i].active = true; psessionEntry->gLimNoShortParams.numNonShortPreambleSta++; }else { - palCopyMemory( pMac->hHdd, pMac->lim.gLimNoShortParams.staNoShortCache[i].addr, + vos_mem_copy( pMac->lim.gLimNoShortParams.staNoShortCache[i].addr, peerMacAddr, sizeof(tSirMacAddr)); pMac->lim.gLimNoShortParams.staNoShortCache[i].active = true; pMac->lim.gLimNoShortParams.numNonShortPreambleSta++; @@ -2133,7 +2148,7 @@ limUpdateShortSlotTime(tpAniSirGlobal pMac, tSirMacAddr peerMacAddr, if ((psessionEntry->limSystemRole == eLIM_AP_ROLE ) && psessionEntry->gLimNoShortSlotParams.staNoShortSlotCache[i].active) { - if (palEqualMemory( pMac->hHdd, + if (vos_mem_compare( psessionEntry->gLimNoShortSlotParams.staNoShortSlotCache[i].addr, peerMacAddr, sizeof(tSirMacAddr))) return; @@ -2142,7 +2157,7 @@ limUpdateShortSlotTime(tpAniSirGlobal pMac, tSirMacAddr peerMacAddr, { if (pMac->lim.gLimNoShortSlotParams.staNoShortSlotCache[i].active) { - if (palEqualMemory( pMac->hHdd, + if (vos_mem_compare( pMac->lim.gLimNoShortSlotParams.staNoShortSlotCache[i].addr, peerMacAddr, sizeof(tSirMacAddr))) return; @@ -2180,13 +2195,13 @@ limUpdateShortSlotTime(tpAniSirGlobal pMac, tSirMacAddr peerMacAddr, if(psessionEntry->limSystemRole == eLIM_AP_ROLE){ - palCopyMemory( pMac->hHdd, psessionEntry->gLimNoShortSlotParams.staNoShortSlotCache[i].addr, + vos_mem_copy( psessionEntry->gLimNoShortSlotParams.staNoShortSlotCache[i].addr, peerMacAddr, sizeof(tSirMacAddr)); psessionEntry->gLimNoShortSlotParams.staNoShortSlotCache[i].active = true; psessionEntry->gLimNoShortSlotParams.numNonShortSlotSta++; }else { - palCopyMemory( pMac->hHdd, pMac->lim.gLimNoShortSlotParams.staNoShortSlotCache[i].addr, + vos_mem_copy( pMac->lim.gLimNoShortSlotParams.staNoShortSlotCache[i].addr, peerMacAddr, sizeof(tSirMacAddr)); pMac->lim.gLimNoShortSlotParams.staNoShortSlotCache[i].active = true; pMac->lim.gLimNoShortSlotParams.numNonShortSlotSta++; @@ -2578,6 +2593,8 @@ void limProcessChannelSwitchTimeout(tpAniSirGlobal pMac) eSIR_MAC_UNSPEC_FAILURE_REASON); return; } + limCovertChannelScanType(pMac, psessionEntry->currentOperChannel, false); + pMac->lim.dfschannelList.timeStamp[psessionEntry->currentOperChannel] = 0; switch(psessionEntry->gLimChannelSwitch.state) { case eLIM_CHANNEL_SWITCH_PRIMARY_ONLY: @@ -3084,7 +3101,7 @@ void limProcessWPSOverlapTimeout(tpAniSirGlobal pMac) void limStartQuietTimer(tpAniSirGlobal pMac, tANI_U8 sessionId) { tpPESession psessionEntry; - psessionEntry = peFindSessionBySessionId(pMac , sessionId); + psessionEntry = peFindSessionBySessionId(pMac, sessionId); if(psessionEntry == NULL) { limLog(pMac, LOGP,FL("Session Does not exist for given sessionID")); @@ -3217,7 +3234,8 @@ void limSwitchChannelCback(tpAniSirGlobal pMac, eHalStatus status, } mmhMsg.type = eWNI_SME_SWITCH_CHL_REQ; - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pSirSmeSwitchChInd, sizeof(tSirSmeSwitchChannelInd))) + pSirSmeSwitchChInd = vos_mem_malloc(sizeof(tSirSmeSwitchChannelInd)); + if ( NULL == pSirSmeSwitchChInd ) { limLog(pMac, LOGP, FL("Failed to allocate buffer for buffer descriptor")); return; @@ -3228,7 +3246,7 @@ void limSwitchChannelCback(tpAniSirGlobal pMac, eHalStatus status, pSirSmeSwitchChInd->newChannelId = psessionEntry->gLimChannelSwitch.primaryChannel; pSirSmeSwitchChInd->sessionId = psessionEntry->smeSessionId; //BSS ID - palCopyMemory( pMac->hHdd, pSirSmeSwitchChInd->bssId, psessionEntry->bssId, sizeof(tSirMacAddr)); + vos_mem_copy( pSirSmeSwitchChInd->bssId, psessionEntry->bssId, sizeof(tSirMacAddr)); mmhMsg.bodyptr = pSirSmeSwitchChInd; mmhMsg.bodyval = 0; @@ -3716,7 +3734,7 @@ tSirMacASCapabilityInfo macASCapabilityInfo = {0}; void limGetMyMacAddr(tpAniSirGlobal pMac, tANI_U8 *mac) { - palCopyMemory( pMac->hHdd, mac, pMac->lim.gLimMyMacAddr, sizeof(tSirMacAddr)); + vos_mem_copy( mac, pMac->lim.gLimMyMacAddr, sizeof(tSirMacAddr)); return; } @@ -4228,7 +4246,7 @@ limEnableHtProtectionFrom11g(tpAniSirGlobal pMac, tANI_U8 enable, psessionEntry->htOperMode = eSIR_HT_OP_MODE_OVERLAP_LEGACY; } limEnableHtRifsProtection(pMac, true, overlap, pBeaconParams,psessionEntry); - limEnableHtOBSSProtection(pMac, true , overlap, pBeaconParams, psessionEntry); + limEnableHtOBSSProtection(pMac, true, overlap, pBeaconParams, psessionEntry); } else { @@ -4239,7 +4257,7 @@ limEnableHtProtectionFrom11g(tpAniSirGlobal pMac, tANI_U8 enable, { psessionEntry->htOperMode = eSIR_HT_OP_MODE_MIXED; limEnableHtRifsProtection(pMac, true, overlap, pBeaconParams,psessionEntry); - limEnableHtOBSSProtection(pMac, true , overlap, pBeaconParams,psessionEntry); + limEnableHtOBSSProtection(pMac, true, overlap, pBeaconParams,psessionEntry); } } }else if(eLIM_BT_AMP_AP_ROLE == psessionEntry->limSystemRole) @@ -4266,7 +4284,7 @@ limEnableHtProtectionFrom11g(tpAniSirGlobal pMac, tANI_U8 enable, { pMac->lim.gHTOperMode = eSIR_HT_OP_MODE_MIXED; limEnableHtRifsProtection(pMac, true, overlap, pBeaconParams,psessionEntry); - limEnableHtOBSSProtection(pMac, true , overlap, pBeaconParams,psessionEntry); + limEnableHtOBSSProtection(pMac, true, overlap, pBeaconParams,psessionEntry); } } } @@ -5078,7 +5096,7 @@ void limTxComplete( tHalHandle hHal, void *pData, v_BOOL_t free) #endif #endif - if(free) + if (free) palPktFree( pMac->hHdd, HAL_TXRX_FRM_802_11_MGMT, (void *) NULL, /* this is ignored and will likely be removed */ @@ -5215,7 +5233,7 @@ void limUpdateStaRunTimeHTCapability( tpAniSirGlobal pMac, */ void limUpdateStaRunTimeHTInfo( tpAniSirGlobal pMac, - tDot11fIEHTInfo *pHTInfo , tpPESession psessionEntry) + tDot11fIEHTInfo *pHTInfo, tpPESession psessionEntry) { if ( psessionEntry->htRecommendedTxWidthSet != ( tANI_U8 )pHTInfo->recommendedTxWidthSet ) { @@ -5312,14 +5330,14 @@ tSirRetStatus limProcessHalIndMessages(tpAniSirGlobal pMac, tANI_U32 msgId, void break; default: - palFreeMemory(pMac->hHdd, msgParam); + vos_mem_free(msgParam); limLog(pMac, LOGP, FL("invalid message id = %d received"), msgId); return eSIR_FAILURE; } if (limPostMsgApi(pMac, &msg) != eSIR_SUCCESS) { - palFreeMemory(pMac->hHdd, msgParam); + vos_mem_free(msgParam); limLog(pMac, LOGP, FL("limPostMsgApi failed for msgid = %d"), msg.type); return eSIR_FAILURE; } @@ -5449,7 +5467,12 @@ limValidateDeltsReq(tpAniSirGlobal pMac, tpSirDeltsReq pDeltsReq, tSirMacAddr pe psessionEntry->gLimEdcaParams[upToAc(tsinfo->traffic.userPrio)].aci.acm) { //send message to HAL to delete TS - if(eSIR_SUCCESS != limSendHalMsgDelTs(pMac, pSta->staIndex, tspecIdx, pDeltsReq->req, psessionEntry->peSessionId)) + if(eSIR_SUCCESS != limSendHalMsgDelTs(pMac, + pSta->staIndex, + tspecIdx, + pDeltsReq->req, + psessionEntry->peSessionId, + psessionEntry->bssId)) { limLog(pMac, LOGW, FL("DelTs with UP %d failed in limSendHalMsgDelTs - ignoring request"), tsinfo->traffic.userPrio); @@ -5472,9 +5495,10 @@ limRegisterHalIndCallBack(tpAniSirGlobal pMac) tSirMsgQ msg; tpHalIndCB pHalCB; - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pHalCB, sizeof(tHalIndCB))) + pHalCB = vos_mem_malloc(sizeof(tHalIndCB)); + if ( NULL == pHalCB ) { - limLog(pMac, LOGP, FL("palAllocateMemory() failed")); + limLog(pMac, LOGP, FL("AllocateMemory() failed")); return; } @@ -5487,7 +5511,7 @@ limRegisterHalIndCallBack(tpAniSirGlobal pMac) MTRACE(macTraceMsgTx(pMac, NO_SESSION, msg.type)); if(eSIR_SUCCESS != wdaPostCtrlMsg(pMac, &msg)) { - palFreeMemory(pMac->hHdd, pHalCB); + vos_mem_free(pHalCB); limLog(pMac, LOGP, FL("wdaPostCtrlMsg() failed")); } @@ -5530,7 +5554,7 @@ limProcessAddBaInd(tpAniSirGlobal pMac, tpSirMsgQ limMsg) if ((psessionEntry = peFindSessionByBssid(pMac,pBaActivityInd->bssId,&sessionId))== NULL) { limLog(pMac, LOGE,FL("session does not exist for given BSSId")); - palFreeMemory(pMac->hHdd, limMsg->bodyptr); + vos_mem_free(limMsg->bodyptr); return; } @@ -5541,7 +5565,7 @@ limProcessAddBaInd(tpAniSirGlobal pMac, tpSirMsgQ limMsg) if ((baCandidateCnt > pMac->lim.maxStation) || !psessionEntry->htCapability ) #endif { - palFreeMemory(pMac->hHdd, limMsg->bodyptr); + vos_mem_free(limMsg->bodyptr); return; } @@ -5566,7 +5590,7 @@ limProcessAddBaInd(tpAniSirGlobal pMac, tpSirMsgQ limMsg) } if (!htCapable) { - palFreeMemory(pMac->hHdd, limMsg->bodyptr); + vos_mem_free(limMsg->bodyptr); return; } #endif @@ -5592,66 +5616,136 @@ limProcessAddBaInd(tpAniSirGlobal pMac, tpSirMsgQ limMsg) } } } - palFreeMemory(pMac->hHdd, limMsg->bodyptr); + vos_mem_free(limMsg->bodyptr); return; } /** ------------------------------------------------------------- -\fn limDelAllBASessions -\brief Deletes all the exisitng BA sessions. -\ Note : This API is provided for Mac OSx only. The reason for this is that Mac OSx may not -\ restart after CFG update. +\fn limDeleteBASessions +\brief Deletes all the exisitng BA sessions for given session + and BA direction. \param tpAniSirGlobal pMac -\return None +\param tpPESession pSessionEntry +\param tANI_U32 baDirection +\return None -------------------------------------------------------------*/ void -limDelAllBASessions(tpAniSirGlobal pMac) +limDeleteBASessions(tpAniSirGlobal pMac, tpPESession pSessionEntry, + tANI_U32 baDirection) { tANI_U32 i; tANI_U8 tid; tpDphHashNode pSta; - tpPESession psessionEntry = &pMac->lim.gpSession[0]; //TBD-RAJESH HOW TO GET sessionEntry????? - for(tid = 0; tid < STACFG_MAX_TC; tid++) + if (NULL == pSessionEntry) { - if((eLIM_AP_ROLE == psessionEntry->limSystemRole) ||(psessionEntry->limSystemRole == eLIM_BT_AMP_AP_ROLE)|| - (eLIM_STA_IN_IBSS_ROLE == psessionEntry->limSystemRole)) + limLog(pMac, LOGE, FL("Session does not exist")); + } + else + { + for(tid = 0; tid < STACFG_MAX_TC; tid++) { - for(i = 0; i < pMac->lim.maxStation; i++) + if ((eLIM_AP_ROLE == pSessionEntry->limSystemRole) || + (pSessionEntry->limSystemRole == eLIM_BT_AMP_AP_ROLE) || + (eLIM_STA_IN_IBSS_ROLE == pSessionEntry->limSystemRole) || + (pSessionEntry->limSystemRole == eLIM_P2P_DEVICE_GO)) + { + for (i = 0; i < pMac->lim.maxStation; i++) + { + pSta = pSessionEntry->dph.dphHashTable.pDphNodeArray + i; + if (pSta && pSta->added) + { + if ((eBA_ENABLE == pSta->tcCfg[tid].fUseBATx) && + (baDirection & BA_INITIATOR)) + { + limPostMlmDelBAReq(pMac, pSta, eBA_INITIATOR, tid, + eSIR_MAC_UNSPEC_FAILURE_REASON, + pSessionEntry); + } + if ((eBA_ENABLE == pSta->tcCfg[tid].fUseBARx) && + (baDirection & BA_RECIPIENT)) + { + limPostMlmDelBAReq(pMac, pSta, eBA_RECIPIENT, tid, + eSIR_MAC_UNSPEC_FAILURE_REASON, + pSessionEntry); + } + } + } + } + else if ((eLIM_STA_ROLE == pSessionEntry->limSystemRole) || + (eLIM_BT_AMP_STA_ROLE == pSessionEntry->limSystemRole) || + (eLIM_P2P_DEVICE_ROLE == pSessionEntry->limSystemRole)) { - pSta = psessionEntry->dph.dphHashTable.pDphNodeArray + i; + pSta = dphGetHashEntry(pMac, DPH_STA_HASH_INDEX_PEER, + &pSessionEntry->dph.dphHashTable); if (pSta && pSta->added) { - if(eBA_ENABLE == pSta->tcCfg[tid].fUseBATx) + if ((eBA_ENABLE == pSta->tcCfg[tid].fUseBATx) && + (baDirection & BA_INITIATOR)) { - limPostMlmDelBAReq(pMac, pSta, eBA_INITIATOR, tid, eSIR_MAC_UNSPEC_FAILURE_REASON,psessionEntry); + limPostMlmDelBAReq(pMac, pSta, eBA_INITIATOR, tid, + eSIR_MAC_UNSPEC_FAILURE_REASON, + pSessionEntry); } - else if(eBA_ENABLE == pSta->tcCfg[tid].fUseBARx) + if ((eBA_ENABLE == pSta->tcCfg[tid].fUseBARx) && + (baDirection & BA_RECIPIENT)) { - limPostMlmDelBAReq(pMac, pSta, eBA_RECIPIENT, tid, eSIR_MAC_UNSPEC_FAILURE_REASON,psessionEntry); + limPostMlmDelBAReq(pMac, pSta, eBA_RECIPIENT, tid, + eSIR_MAC_UNSPEC_FAILURE_REASON, + pSessionEntry); } } } } - else if((eLIM_STA_ROLE == psessionEntry->limSystemRole)||(eLIM_BT_AMP_STA_ROLE == psessionEntry->limSystemRole)) + } +} + +/** ------------------------------------------------------------- +\fn limDelAllBASessions +\brief Deletes all the exisitng BA sessions. +\param tpAniSirGlobal pMac +\return None +-------------------------------------------------------------*/ + +void limDelAllBASessions(tpAniSirGlobal pMac) +{ + tANI_U32 i; + tpPESession pSessionEntry; + + for (i = 0; i < pMac->lim.maxBssId; i++) + { + pSessionEntry = peFindSessionBySessionId(pMac, i); + if (pSessionEntry) { - pSta = dphGetHashEntry(pMac, DPH_STA_HASH_INDEX_PEER, &psessionEntry->dph.dphHashTable); - if (pSta && pSta->added) - { - if(eBA_ENABLE == pSta->tcCfg[tid].fUseBATx) - { - limPostMlmDelBAReq(pMac, pSta, eBA_INITIATOR, tid, eSIR_MAC_UNSPEC_FAILURE_REASON,psessionEntry); - } - if(eBA_ENABLE == pSta->tcCfg[tid].fUseBARx) - { - limPostMlmDelBAReq(pMac, pSta, eBA_RECIPIENT, tid, eSIR_MAC_UNSPEC_FAILURE_REASON,psessionEntry); - } - } + limDeleteBASessions(pMac, pSessionEntry, BA_BOTH_DIRECTIONS); } } } + +/** ------------------------------------------------------------- +\fn limDelAllBASessionsBtc +\brief Deletes all the exisitng BA receipent sessions in 2.4GHz + band. +\param tpAniSirGlobal pMac +\return None +-------------------------------------------------------------*/ + +void limDelPerBssBASessionsBtc(tpAniSirGlobal pMac) +{ + tANI_U8 sessionId; + tpPESession pSessionEntry; + pSessionEntry = peFindSessionByBssid(pMac,pMac->btc.btcBssfordisableaggr, + &sessionId); + if (pSessionEntry) + { + PELOGW(limLog(pMac, LOGW, + "Deleting the BA for session %d as host got BTC event", sessionId);) + limDeleteBASessions(pMac, pSessionEntry, BA_RECIPIENT); + } +} + /** ------------------------------------------------------------- \fn limProcessDelTsInd \brief handles the DeleteTS indication coming from HAL or generated by PE itself in some error cases. @@ -5675,7 +5769,7 @@ limProcessDelTsInd(tpAniSirGlobal pMac, tpSirMsgQ limMsg) if((psessionEntry = peFindSessionByBssid(pMac,pDelTsParam->bssId,&sessionId))== NULL) { limLog(pMac, LOGE,FL("session does not exist for given BssId")); - palFreeMemory(pMac->hHdd, (void *)(limMsg->bodyptr)); + vos_mem_free(limMsg->bodyptr); return; } @@ -5694,18 +5788,19 @@ if((psessionEntry = peFindSessionByBssid(pMac,pDelTsParam->bssId,&sessionId))== goto error1; } - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pDelTsReq, sizeof(tSirDeltsReq))) + pDelTsReq = vos_mem_malloc(sizeof(tSirDeltsReq)); + if ( NULL == pDelTsReq ) { - PELOGE(limLog(pMac, LOGE, FL("palAllocateMemory() failed"));) + PELOGE(limLog(pMac, LOGE, FL("AllocateMemory() failed"));) goto error1; } - palZeroMemory( pMac->hHdd, (tANI_U8 *)pDelTsReq, sizeof(tSirDeltsReq)); + vos_mem_set( (tANI_U8 *)pDelTsReq, sizeof(tSirDeltsReq), 0); if(pSta->wmeEnabled) - palCopyMemory(pMac->hHdd, &(pDelTsReq->req.tspec), &(pTspecInfo->tspec), sizeof(tSirMacTspecIE)); + vos_mem_copy( &(pDelTsReq->req.tspec), &(pTspecInfo->tspec), sizeof(tSirMacTspecIE)); else - palCopyMemory(pMac->hHdd, &(pDelTsReq->req.tsinfo), &(pTspecInfo->tspec.tsinfo), sizeof(tSirMacTSInfo)); + vos_mem_copy( &(pDelTsReq->req.tsinfo), &(pTspecInfo->tspec.tsinfo), sizeof(tSirMacTSInfo)); //validate the req @@ -5722,26 +5817,27 @@ if((psessionEntry = peFindSessionByBssid(pMac,pDelTsParam->bssId,&sessionId))== psessionEntry); // prepare and send an sme indication to HDD - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pDelTsReqInfo, sizeof(tSirDeltsReqInfo))) + pDelTsReqInfo = vos_mem_malloc(sizeof(tSirDeltsReqInfo)); + if ( NULL == pDelTsReqInfo ) { - PELOGE(limLog(pMac, LOGE, FL("palAllocateMemory() failed"));) + PELOGE(limLog(pMac, LOGE, FL("AllocateMemory() failed"));) goto error3; } - palZeroMemory( pMac->hHdd, (tANI_U8 *)pDelTsReqInfo, sizeof(tSirDeltsReqInfo)); + vos_mem_set( (tANI_U8 *)pDelTsReqInfo, sizeof(tSirDeltsReqInfo), 0); if(pSta->wmeEnabled) - palCopyMemory(pMac->hHdd, &(pDelTsReqInfo->tspec), &(pTspecInfo->tspec), sizeof(tSirMacTspecIE)); + vos_mem_copy( &(pDelTsReqInfo->tspec), &(pTspecInfo->tspec), sizeof(tSirMacTspecIE)); else - palCopyMemory(pMac->hHdd, &(pDelTsReqInfo->tsinfo), &(pTspecInfo->tspec.tsinfo), sizeof(tSirMacTSInfo)); + vos_mem_copy( &(pDelTsReqInfo->tsinfo), &(pTspecInfo->tspec.tsinfo), sizeof(tSirMacTSInfo)); limSendSmeDeltsInd(pMac, pDelTsReqInfo, pDelTsReq->aid,psessionEntry); error3: - palFreeMemory(pMac->hHdd, (void *) pDelTsReqInfo); + vos_mem_free(pDelTsReqInfo); error2: - palFreeMemory(pMac->hHdd, (void *) pDelTsReq); + vos_mem_free(pDelTsReq); error1: - palFreeMemory(pMac->hHdd, (void *)(limMsg->bodyptr)); + vos_mem_free(limMsg->bodyptr); return; } @@ -5777,19 +5873,18 @@ tSirRetStatus limPostMlmAddBAReq( tpAniSirGlobal pMac, //return eSIR_SUCCESS; // Allocate for LIM_MLM_ADDBA_REQ - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, - (void **) &pMlmAddBAReq, - sizeof( tLimMlmAddBAReq ))) + pMlmAddBAReq = vos_mem_malloc(sizeof( tLimMlmAddBAReq )); + if ( NULL == pMlmAddBAReq ) { - limLog( pMac, LOGP, FL("palAllocateMemory failed")); + limLog( pMac, LOGP, FL("AllocateMemory failed")); status = eSIR_MEM_ALLOC_FAILED; goto returnFailure; } - palZeroMemory( pMac->hHdd, (void *) pMlmAddBAReq, sizeof( tLimMlmAddBAReq )); + vos_mem_set( (void *) pMlmAddBAReq, sizeof( tLimMlmAddBAReq ), 0); // Copy the peer MAC - palCopyMemory( pMac->hHdd, + vos_mem_copy( pMlmAddBAReq->peerMacAddr, pStaDs->staAddr, sizeof( tSirMacAddr )); @@ -5854,7 +5949,7 @@ tSirRetStatus limPostMlmAddBAReq( tpAniSirGlobal pMac, return eSIR_SUCCESS; returnFailure: - palFreeMemory(pMac->hHdd, pMlmAddBAReq); + vos_mem_free(pMlmAddBAReq); return status; } @@ -5899,22 +5994,21 @@ tSirRetStatus status = eSIR_SUCCESS; tpLimMlmAddBARsp pMlmAddBARsp; // Allocate for LIM_MLM_ADDBA_RSP - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, - (void **) &pMlmAddBARsp, - sizeof( tLimMlmAddBARsp ))) + pMlmAddBARsp = vos_mem_malloc(sizeof( tLimMlmAddBARsp )); + if ( NULL == pMlmAddBARsp ) { limLog( pMac, LOGE, - FL("palAllocateMemory failed with error code %d"), + FL("AllocateMemory failed with error code %d"), status ); status = eSIR_MEM_ALLOC_FAILED; goto returnFailure; } - palZeroMemory( pMac->hHdd, (void *) pMlmAddBARsp, sizeof( tLimMlmAddBARsp )); + vos_mem_set( (void *) pMlmAddBARsp, sizeof( tLimMlmAddBARsp ), 0); // Copy the peer MAC - palCopyMemory( pMac->hHdd, + vos_mem_copy( pMlmAddBARsp->peerMacAddr, peerMacAddr, sizeof( tSirMacAddr )); @@ -5989,22 +6083,21 @@ LIM_GET_STA_BA_STATE(pSta, baTID, &curBaState); } // Allocate for LIM_MLM_DELBA_REQ - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, - (void **) &pMlmDelBAReq, - sizeof( tLimMlmDelBAReq ))) + pMlmDelBAReq = vos_mem_malloc(sizeof( tLimMlmDelBAReq )); + if ( NULL == pMlmDelBAReq ) { limLog( pMac, LOGE, - FL("palAllocateMemory failed with error code %d"), + FL("AllocateMemory failed with error code %d"), status ); status = eSIR_MEM_ALLOC_FAILED; goto returnFailure; } - palZeroMemory( pMac->hHdd, (void *) pMlmDelBAReq, sizeof( tLimMlmDelBAReq )); + vos_mem_set( (void *) pMlmDelBAReq, sizeof( tLimMlmDelBAReq ), 0); // Copy the peer MAC - palCopyMemory( pMac->hHdd, + vos_mem_copy( pMlmDelBAReq->peerMacAddr, pSta->staAddr, sizeof( tSirMacAddr )); @@ -6027,7 +6120,7 @@ LIM_GET_STA_BA_STATE(pSta, baTID, &curBaState); (status = limSendDelBAInd( pMac, pMlmDelBAReq,psessionEntry))) status = eSIR_FAILURE; - palFreeMemory(pMac->hHdd, (void*) pMlmDelBAReq); + vos_mem_free(pMlmDelBAReq); return status; } @@ -6086,7 +6179,6 @@ tSirRetStatus limPostMsgAddBAReq( tpAniSirGlobal pMac, { tpAddBAParams pAddBAParams = NULL; tSirRetStatus retCode = eSIR_SUCCESS; -eHalStatus status; tSirMsgQ msgQ; #ifdef WLAN_SOFTAP_VSTA_FEATURE @@ -6099,23 +6191,21 @@ tSirMsgQ msgQ; #endif //WLAN_SOFTAP_VSTA_FEATURE // Allocate for WDA_ADDBA_REQ - if( eHAL_STATUS_SUCCESS != - (status = palAllocateMemory( pMac->hHdd, - (void **) &pAddBAParams, - sizeof( tAddBAParams )))) + pAddBAParams = vos_mem_malloc(sizeof( tAddBAParams )); + if ( NULL == pAddBAParams ) { limLog( pMac, LOGE, - FL("palAllocateMemory failed with error code %d"), - status ); + FL("AllocateMemory failed") + ); retCode = eSIR_MEM_ALLOC_FAILED; goto returnFailure; } - palZeroMemory( pMac->hHdd, (void *) pAddBAParams, sizeof( tAddBAParams )); + vos_mem_set( (void *) pAddBAParams, sizeof( tAddBAParams ), 0); // Copy the peer MAC address - palCopyMemory( pMac->hHdd, + vos_mem_copy( (void *) pAddBAParams->peerMacAddr, (void *) pSta->staAddr, sizeof( tSirMacAddr )); @@ -6167,7 +6257,7 @@ returnFailure: // Clean-up... if( NULL != pAddBAParams ) - palFreeMemory( pMac->hHdd, (void *) pAddBAParams ); + vos_mem_free( pAddBAParams ); return retCode; @@ -6200,24 +6290,21 @@ tSirRetStatus limPostMsgDelBAInd( tpAniSirGlobal pMac, { tpDelBAParams pDelBAParams = NULL; tSirRetStatus retCode = eSIR_SUCCESS; -eHalStatus status; tSirMsgQ msgQ; // Allocate for SIR_HAL_DELBA_IND - if( eHAL_STATUS_SUCCESS != - (status = palAllocateMemory( pMac->hHdd, - (void **) &pDelBAParams, - sizeof( tDelBAParams )))) + pDelBAParams = vos_mem_malloc(sizeof( tDelBAParams )); + if ( NULL == pDelBAParams ) { limLog( pMac, LOGE, - FL("palAllocateMemory failed with error code %d"), - status ); + FL("AllocateMemory failed") + ); retCode = eSIR_MEM_ALLOC_FAILED; goto returnFailure; } - palZeroMemory( pMac->hHdd, (void *) pDelBAParams, sizeof( tDelBAParams )); + vos_mem_set( (void *) pDelBAParams, sizeof( tDelBAParams ), 0); // Populate the REQ parameters pDelBAParams->staIdx = pSta->staIndex; @@ -6274,7 +6361,7 @@ returnFailure: // Clean-up... if( NULL != pDelBAParams ) - palFreeMemory( pMac->hHdd, (void *) pDelBAParams ); + vos_mem_free( pDelBAParams ); return retCode; @@ -6303,16 +6390,16 @@ limPostSMStateUpdate(tpAniSirGlobal pMac, { tSirRetStatus retCode = eSIR_SUCCESS; tSirMsgQ msgQ; - eHalStatus status; tpSetMIMOPS pMIMO_PSParams; msgQ.reserved = 0; msgQ.type = WDA_SET_MIMOPS_REQ; // Allocate for WDA_SET_MIMOPS_REQ - status = palAllocateMemory( pMac->hHdd, (void **) &pMIMO_PSParams, sizeof( tSetMIMOPS)); - if( eHAL_STATUS_SUCCESS != status) { - limLog( pMac, LOGP,FL(" palAllocateMemory failed with error code %d"), status ); + pMIMO_PSParams = vos_mem_malloc(sizeof(tSetMIMOPS)); + if ( NULL == pMIMO_PSParams ) + { + limLog( pMac, LOGP,FL(" AllocateMemory failed")); return eSIR_MEM_ALLOC_FAILED; } @@ -6329,7 +6416,7 @@ limPostSMStateUpdate(tpAniSirGlobal pMac, if (eSIR_SUCCESS != retCode) { limLog( pMac, LOGP, FL("Posting WDA_SET_MIMOPS_REQ to HAL failed! Reason = %d"), retCode ); - palFreeMemory(pMac->hHdd, (void *) pMIMO_PSParams); + vos_mem_free(pMIMO_PSParams); return retCode; } @@ -6379,7 +6466,7 @@ limGetBDfromRxPacket(tpAniSirGlobal pMac, void *body, tANI_U32 **pRxPacketInfo) void limRessetScanChannelInfo(tpAniSirGlobal pMac) { - palZeroMemory(pMac->hHdd, &pMac->lim.scanChnInfo, sizeof(tLimScanChnInfo)); + vos_mem_set(&pMac->lim.scanChnInfo, sizeof(tLimScanChnInfo), 0); } @@ -6536,27 +6623,19 @@ void limFrameTransmissionControl(tpAniSirGlobal pMac, tLimQuietTxMode type, tLim * Make it to align to 4 byte boundary */ nBytes = (tANI_U8)HALMSG_NUMBYTES_STATION_BITMAP(pMac->lim.maxStation); - status = palAllocateMemory(pMac->hHdd, (void **) &pTxCtrlMsg, - (sizeof(*pTxCtrlMsg) + nBytes)); - if (status != eHAL_STATUS_SUCCESS) + pTxCtrlMsg = vos_mem_malloc(sizeof(*pTxCtrlMsg) + nBytes); + if ( NULL == pTxCtrlMsg ) { - limLog(pMac, LOGP, FL("palAllocateMemory() failed")); + limLog(pMac, LOGP, FL("AllocateMemory() failed")); return; } - status = palZeroMemory(pMac->hHdd, (void *) pTxCtrlMsg, - (sizeof(*pTxCtrlMsg) + nBytes)); - if (status != eHAL_STATUS_SUCCESS) - { - palFreeMemory(pMac->hHdd, (void *) pTxCtrlMsg); - limLog(pMac, LOGP, FL("palZeroMemory() failed, status = %d"), status); - return; - } - + vos_mem_set((void *) pTxCtrlMsg, + (sizeof(*pTxCtrlMsg) + nBytes), 0); status = __limFillTxControlParams(pMac, pTxCtrlMsg, type, mode); if (status != eHAL_STATUS_SUCCESS) { - palFreeMemory(pMac->hHdd, (void *) pTxCtrlMsg); + vos_mem_free(pTxCtrlMsg); limLog(pMac, LOGP, FL("__limFillTxControlParams failed, status = %d"), status); return; } @@ -6569,7 +6648,7 @@ void limFrameTransmissionControl(tpAniSirGlobal pMac, tLimQuietTxMode type, tLim MTRACE(macTraceMsgTx(pMac, NO_SESSION, msgQ.type)); if(wdaPostCtrlMsg( pMac, &msgQ) != eSIR_SUCCESS) { - palFreeMemory(pMac->hHdd, (void *) pTxCtrlMsg); + vos_mem_free(pTxCtrlMsg); limLog( pMac, LOGP, FL("Posting Message to HAL failed")); return; } @@ -6637,7 +6716,8 @@ limRestorePreChannelSwitchState(tpAniSirGlobal pMac, tpPESession psessionEntry) if (val > 0 && TX_TIMER_VALID(pMac->lim.limTimers.gLimBackgroundScanTimer)) { - MTRACE(macTrace(pMac, TRACE_CODE_TIMER_ACTIVATE, psessionEntry->peSessionId, eLIM_BACKGROUND_SCAN_TIMER)); + MTRACE(macTrace(pMac, TRACE_CODE_TIMER_ACTIVATE, + psessionEntry->peSessionId, eLIM_BACKGROUND_SCAN_TIMER)); if(tx_timer_activate(&pMac->lim.limTimers.gLimBackgroundScanTimer) != TX_SUCCESS) { limLog(pMac, LOGP, FL("Could not restart background scan timer, doing LOGP")); @@ -6650,8 +6730,10 @@ limRestorePreChannelSwitchState(tpAniSirGlobal pMac, tpPESession psessionEntry) /* Enable heartbeat timer */ if (TX_TIMER_VALID(pMac->lim.limTimers.gLimHeartBeatTimer)) { - MTRACE(macTrace(pMac, TRACE_CODE_TIMER_ACTIVATE, psessionEntry->peSessionId, eLIM_HEART_BEAT_TIMER)); - if((limActivateHearBeatTimer(pMac) != TX_SUCCESS) && (!IS_ACTIVEMODE_OFFLOAD_FEATURE_ENABLE)) + MTRACE(macTrace(pMac, TRACE_CODE_TIMER_ACTIVATE, + psessionEntry->peSessionId, eLIM_HEART_BEAT_TIMER)); + if((limActivateHearBeatTimer(pMac, psessionEntry) != TX_SUCCESS) && + (!IS_ACTIVEMODE_OFFLOAD_FEATURE_ENABLE)) { limLog(pMac, LOGP, FL("Could not restart heartbeat timer, doing LOGP")); return (eSIR_FAILURE); @@ -6713,7 +6795,7 @@ tSirRetStatus limRestorePreQuietState(tpAniSirGlobal pMac, tpPESession psessionE if (TX_TIMER_VALID(pMac->lim.limTimers.gLimHeartBeatTimer)) { MTRACE(macTrace(pMac, TRACE_CODE_TIMER_ACTIVATE, psessionEntry->peSessionId, eLIM_HEART_BEAT_TIMER)); - if(limActivateHearBeatTimer(pMac) != TX_SUCCESS) + if(limActivateHearBeatTimer(pMac, psessionEntry) != TX_SUCCESS) { limLog(pMac, LOGP, FL("Could not restart heartbeat timer, doing LOGP")); return (eSIR_FAILURE); @@ -7100,7 +7182,7 @@ void limProcessAddStaRsp(tpAniSirGlobal pMac,tpSirMsgQ limMsgQ) if((psessionEntry = peFindSessionBySessionId(pMac,pAddStaParams->sessionId))==NULL) { limLog(pMac, LOGP,FL("Session Does not exist for given sessionID")); - palFreeMemory(pMac, pAddStaParams); + vos_mem_free(pAddStaParams); return; } psessionEntry->csaOffloadEnable = pAddStaParams->csaOffloadEnable; @@ -7165,9 +7247,13 @@ void limHandleHeartBeatFailureTimeout(tpAniSirGlobal pMac) { limLog(pMac, LOGE, FL("Probe_hb_failure: SME %d, MLME %d, HB-Count %d"),psessionEntry->limSmeState, psessionEntry->limMlmState, psessionEntry->LimRxedBeaconCntDuringHB); +#ifdef FEATURE_WLAN_DIAG_SUPPORT_LIM //FEATURE_WLAN_DIAG_SUPPORT + limDiagEventReport(pMac, WLAN_PE_DIAG_HB_FAILURE_TIMEOUT, psessionEntry, 0, 0); +#endif if (psessionEntry->limMlmState == eLIM_MLM_LINK_ESTABLISHED_STATE) { - if (!LIM_IS_CONNECTION_ACTIVE(psessionEntry)) + if ((!LIM_IS_CONNECTION_ACTIVE(psessionEntry))&& + (psessionEntry->limSmeState != eLIM_SME_WT_DISASSOC_STATE)) { limLog(pMac, LOGE, FL("Probe_hb_failure: for session:%d " ),psessionEntry->peSessionId); /* AP did not respond to Probe Request. Tear down link with it.*/ @@ -7243,7 +7329,7 @@ void limHandleDeferMsgError(tpAniSirGlobal pMac, tpSirMsgQ pLimMsg) vos_pkt_return_packet((vos_pkt_t*)pLimMsg->bodyptr); } else if(pLimMsg->bodyptr != NULL) - palFreeMemory( pMac->hHdd, (tANI_U8 *) pLimMsg->bodyptr); + vos_mem_free( pLimMsg->bodyptr); } @@ -7264,18 +7350,18 @@ void limDiagEventReport(tpAniSirGlobal pMac, tANI_U16 eventType, tpPESession pSe tSirMacAddr nullBssid = { 0, 0, 0, 0, 0, 0 }; WLAN_VOS_DIAG_EVENT_DEF(peEvent, vos_event_wlan_pe_payload_type); - palZeroMemory(pMac->hHdd, &peEvent, sizeof(vos_event_wlan_pe_payload_type)); + vos_mem_set(&peEvent, sizeof(vos_event_wlan_pe_payload_type), 0); if (NULL == pSessionEntry) { - palCopyMemory(pMac->hHdd, peEvent.bssid, nullBssid, sizeof(tSirMacAddr)); + vos_mem_copy( peEvent.bssid, nullBssid, sizeof(tSirMacAddr)); peEvent.sme_state = (tANI_U16)pMac->lim.gLimSmeState; peEvent.mlm_state = (tANI_U16)pMac->lim.gLimMlmState; } else { - palCopyMemory(pMac->hHdd, peEvent.bssid, pSessionEntry->bssId, sizeof(tSirMacAddr)); + vos_mem_copy(peEvent.bssid, pSessionEntry->bssId, sizeof(tSirMacAddr)); peEvent.sme_state = (tANI_U16)pSessionEntry->limSmeState; peEvent.mlm_state = (tANI_U16)pSessionEntry->limMlmState; } @@ -7299,23 +7385,24 @@ void limProcessAddStaSelfRsp(tpAniSirGlobal pMac,tpSirMsgQ limMsgQ) pAddStaSelfParams = (tpAddStaSelfParams)limMsgQ->bodyptr; - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pRsp, sizeof(tSirSmeAddStaSelfRsp))) + pRsp = vos_mem_malloc(sizeof(tSirSmeAddStaSelfRsp)); + if ( NULL == pRsp ) { /// Buffer not available. Log error - limLog(pMac, LOGP, FL("call to palAllocateMemory failed for Add Sta self RSP")); - palFreeMemory( pMac->hHdd, (tANI_U8 *)pAddStaSelfParams); + limLog(pMac, LOGP, FL("call to AllocateMemory failed for Add Sta self RSP")); + vos_mem_free(pAddStaSelfParams); return; } - palZeroMemory(pMac, (tANI_U8*)pRsp, sizeof(tSirSmeAddStaSelfRsp)); + vos_mem_set((tANI_U8*)pRsp, sizeof(tSirSmeAddStaSelfRsp), 0); pRsp->mesgType = eWNI_SME_ADD_STA_SELF_RSP; pRsp->mesgLen = (tANI_U16) sizeof(tSirSmeAddStaSelfRsp); pRsp->status = pAddStaSelfParams->status; - palCopyMemory( pMac->hHdd, pRsp->selfMacAddr, pAddStaSelfParams->selfMacAddr, sizeof(tSirMacAddr) ); + vos_mem_copy( pRsp->selfMacAddr, pAddStaSelfParams->selfMacAddr, sizeof(tSirMacAddr) ); - palFreeMemory( pMac->hHdd, (tANI_U8 *)pAddStaSelfParams); + vos_mem_free(pAddStaSelfParams); mmhMsg.type = eWNI_SME_ADD_STA_SELF_RSP; mmhMsg.bodyptr = pRsp; @@ -7335,23 +7422,24 @@ void limProcessDelStaSelfRsp(tpAniSirGlobal pMac,tpSirMsgQ limMsgQ) pDelStaSelfParams = (tpDelStaSelfParams)limMsgQ->bodyptr; - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pRsp, sizeof(tSirSmeDelStaSelfRsp))) + pRsp = vos_mem_malloc(sizeof(tSirSmeDelStaSelfRsp)); + if ( NULL == pRsp ) { /// Buffer not available. Log error - limLog(pMac, LOGP, FL("call to palAllocateMemory failed for Add Sta self RSP")); - palFreeMemory( pMac->hHdd, (tANI_U8 *)pDelStaSelfParams); + limLog(pMac, LOGP, FL("call to AllocateMemory failed for Add Sta self RSP")); + vos_mem_free(pDelStaSelfParams); return; } - palZeroMemory(pMac, (tANI_U8*)pRsp, sizeof(tSirSmeDelStaSelfRsp)); + vos_mem_set((tANI_U8*)pRsp, sizeof(tSirSmeDelStaSelfRsp), 0); pRsp->mesgType = eWNI_SME_DEL_STA_SELF_RSP; pRsp->mesgLen = (tANI_U16) sizeof(tSirSmeDelStaSelfRsp); pRsp->status = pDelStaSelfParams->status; - palCopyMemory( pMac->hHdd, pRsp->selfMacAddr, pDelStaSelfParams->selfMacAddr, sizeof(tSirMacAddr) ); + vos_mem_copy( pRsp->selfMacAddr, pDelStaSelfParams->selfMacAddr, sizeof(tSirMacAddr) ); - palFreeMemory( pMac->hHdd, (tANI_U8 *)pDelStaSelfParams); + vos_mem_free(pDelStaSelfParams); mmhMsg.type = eWNI_SME_DEL_STA_SELF_RSP; mmhMsg.bodyptr = pRsp; @@ -7369,7 +7457,7 @@ void limProcessDelStaSelfRsp(tpAniSirGlobal pMac,tpSirMsgQ limMsgQ) *****************************************************************/ tANI_U8 limUnmapChannel(tANI_U8 mapChannel) { - return WDA_MapChannel(mapChannel); + return WDA_MapChannel(mapChannel); } @@ -7454,8 +7542,8 @@ v_U8_t limBuildP2pIe(tpAniSirGlobal pMac, tANI_U8 *ie, tANI_U8 *data, tANI_U8 ie ptr[length++] = SIR_MAC_EID_VENDOR; ptr[length++] = ie_len + SIR_MAC_P2P_OUI_SIZE; - palCopyMemory( pMac->hHdd, &ptr[length], SIR_MAC_P2P_OUI, SIR_MAC_P2P_OUI_SIZE); - palCopyMemory( pMac->hHdd, &ptr[length + SIR_MAC_P2P_OUI_SIZE], data, ie_len); + vos_mem_copy(&ptr[length], SIR_MAC_P2P_OUI, SIR_MAC_P2P_OUI_SIZE); + vos_mem_copy(&ptr[length + SIR_MAC_P2P_OUI_SIZE], data, ie_len); return (ie_len + SIR_P2P_IE_HEADER_LEN); } @@ -7464,12 +7552,20 @@ v_U8_t limBuildP2pIe(tpAniSirGlobal pMac, tANI_U8 *ie, tANI_U8 *data, tANI_U8 ie v_U8_t limGetNoaAttrStreamInMultP2pIes(tpAniSirGlobal pMac,v_U8_t* noaStream,v_U8_t noaLen,v_U8_t overFlowLen) { v_U8_t overFlowP2pStream[SIR_MAX_NOA_ATTR_LEN]; - palCopyMemory( pMac->hHdd, overFlowP2pStream, noaStream + noaLen - overFlowLen, overFlowLen); - noaStream[noaLen - overFlowLen] = SIR_MAC_EID_VENDOR; - noaStream[noaLen - overFlowLen+1] = overFlowLen + SIR_MAC_P2P_OUI_SIZE; - palCopyMemory( pMac->hHdd, noaStream+ noaLen - overFlowLen+2,SIR_MAC_P2P_OUI,SIR_MAC_P2P_OUI_SIZE); - - palCopyMemory( pMac->hHdd, noaStream+ noaLen - overFlowLen+2+SIR_MAC_P2P_OUI_SIZE,overFlowP2pStream,overFlowLen); + + if ((noaLen <= (SIR_MAX_NOA_ATTR_LEN+SIR_P2P_IE_HEADER_LEN)) && + (noaLen >= overFlowLen) && (overFlowLen <= SIR_MAX_NOA_ATTR_LEN)) + { + vos_mem_copy(overFlowP2pStream, + noaStream + noaLen - overFlowLen, overFlowLen); + noaStream[noaLen - overFlowLen] = SIR_MAC_EID_VENDOR; + noaStream[noaLen - overFlowLen + 1] = overFlowLen + SIR_MAC_P2P_OUI_SIZE; + vos_mem_copy(noaStream+noaLen-overFlowLen + 2, + SIR_MAC_P2P_OUI, SIR_MAC_P2P_OUI_SIZE); + vos_mem_copy(noaStream+noaLen + 2 + SIR_MAC_P2P_OUI_SIZE - overFlowLen, + overFlowP2pStream, overFlowLen); + } + return (noaLen + SIR_P2P_IE_HEADER_LEN); } @@ -7630,8 +7726,8 @@ tANI_BOOLEAN limCheckVHTOpModeChange( tpAniSirGlobal pMac, tpPESession psessionE tempParam.opMode = chanWidth; tempParam.staId = staId; tempParam.smesessionId = psessionEntry->smeSessionId; - palCopyMemory( pMac->hHdd, tempParam.peer_mac, psessionEntry->bssId, - sizeof( tSirMacAddr )); + vos_mem_copy(tempParam.peer_mac, psessionEntry->bssId, + sizeof(tSirMacAddr)); limSendModeUpdate( pMac, &tempParam, psessionEntry ); @@ -7649,7 +7745,7 @@ tANI_BOOLEAN limCheckMembershipUserPosition( tpAniSirGlobal pMac, tpPESession ps tempParamMembership.membership = membership; tempParamMembership.staId = staId; tempParamMembership.smesessionId = psessionEntry->smeSessionId; - palCopyMemory( pMac->hHdd, tempParamMembership.peer_mac, psessionEntry->bssId, + vos_mem_copy(tempParamMembership.peer_mac, psessionEntry->bssId, sizeof( tSirMacAddr )); @@ -7658,7 +7754,7 @@ tANI_BOOLEAN limCheckMembershipUserPosition( tpAniSirGlobal pMac, tpPESession ps tempParamUserPosition.userPos = userPosition; tempParamUserPosition.staId = staId; tempParamUserPosition.smesessionId = psessionEntry->smeSessionId; - palCopyMemory( pMac->hHdd, tempParamUserPosition.peer_mac, psessionEntry->bssId, + vos_mem_copy(tempParamUserPosition.peer_mac, psessionEntry->bssId, sizeof( tSirMacAddr )); diff --git a/CORE/MAC/src/pe/lim/limUtils.h b/CORE/MAC/src/pe/lim/limUtils.h index 9f3f22629977..ff179dee1d63 100644 --- a/CORE/MAC/src/pe/lim/limUtils.h +++ b/CORE/MAC/src/pe/lim/limUtils.h @@ -335,6 +335,8 @@ tSirRetStatus limPostSMStateUpdate(tpAniSirGlobal pMac, void limDeleteStaContext(tpAniSirGlobal pMac, tpSirMsgQ limMsg); void limProcessAddBaInd(tpAniSirGlobal pMac, tpSirMsgQ limMsg); +void limDeleteBASessions(tpAniSirGlobal pMac, tpPESession pSessionEntry, tANI_U32 baDirection); +void limDelPerBssBASessionsBtc(tpAniSirGlobal pMac); void limDelAllBASessions(tpAniSirGlobal pMac); void limDeleteDialogueTokenList(tpAniSirGlobal pMac); tSirRetStatus limSearchAndDeleteDialogueToken(tpAniSirGlobal pMac, tANI_U8 token, tANI_U16 assocId, tANI_U16 tid); @@ -455,6 +457,12 @@ typedef enum WLAN_PE_DIAG_HAL_ADDBA_REQ_EVENT, WLAN_PE_DIAG_HAL_ADDBA_RSP_EVENT, WLAN_PE_DIAG_HAL_DELBA_IND_EVENT, + WLAN_PE_DIAG_HB_FAILURE_TIMEOUT, + WLAN_PE_DIAG_PRE_AUTH_REQ_EVENT, + WLAN_PE_DIAG_PRE_AUTH_RSP_EVENT, + WLAN_PE_DIAG_PREAUTH_DONE, + WLAN_PE_DIAG_REASSOCIATING, + WLAN_PE_DIAG_CONNECTED, }WLAN_PE_DIAG_EVENT_TYPE; void limDiagEventReport(tpAniSirGlobal pMac, tANI_U16 eventType, tpPESession pSessionEntry, tANI_U16 status, tANI_U16 reasonCode); diff --git a/CORE/MAC/src/pe/pmm/pmmApi.c b/CORE/MAC/src/pe/pmm/pmmApi.c index ee8d739f5912..77e53c6efb0e 100644 --- a/CORE/MAC/src/pe/pmm/pmmApi.c +++ b/CORE/MAC/src/pe/pmm/pmmApi.c @@ -307,10 +307,6 @@ void pmmExitBmpsRequestHandler(tpAniSirGlobal pMac, tpExitBmpsInfo pExitBmpsInfo tPmmState origState = pMac->pmm.gPmmState; -#ifdef FEATURE_WLAN_DIAG_SUPPORT - limDiagEventReport(pMac, WLAN_PE_DIAG_EXIT_BMPS_REQ_EVENT, peGetValidPowerSaveSession(pMac), 0, (tANI_U16)pExitBmpsInfo->exitBmpsReason); -#endif //FEATURE_WLAN_DIAG_SUPPORT - if (NULL == pExitBmpsInfo) { respStatus = eSIR_SME_BMPS_REQ_REJECT; @@ -318,6 +314,12 @@ void pmmExitBmpsRequestHandler(tpAniSirGlobal pMac, tpExitBmpsInfo pExitBmpsInfo goto failure; } +#ifdef FEATURE_WLAN_DIAG_SUPPORT + limDiagEventReport(pMac, WLAN_PE_DIAG_EXIT_BMPS_REQ_EVENT, + peGetValidPowerSaveSession(pMac), 0, + (tANI_U16)pExitBmpsInfo->exitBmpsReason); +#endif //FEATURE_WLAN_DIAG_SUPPORT + /* PMC is not aware of Background scan, which is done in * BMPS mode while Nth Beacon is delivered. Essentially, PMC * can request the device to get out of power-save while @@ -340,7 +342,7 @@ void pmmExitBmpsRequestHandler(tpAniSirGlobal pMac, tpExitBmpsInfo pExitBmpsInfo * checked when PMM receives SIR_HAL_EXIT_BMPS_RSP from HAL */ pMac->pmm.gPmmExitBmpsReasonCode = pExitBmpsInfo->exitBmpsReason; - palFreeMemory( pMac->hHdd, (tANI_U8 *) pExitBmpsInfo); + vos_mem_free(pExitBmpsInfo); PELOGW(pmmLog(pMac, LOGW, FL("pmmBmps: Rcvd EXIT_BMPS with reason code%d "), pMac->pmm.gPmmExitBmpsReasonCode);) @@ -369,7 +371,7 @@ void pmmExitBmpsRequestHandler(tpAniSirGlobal pMac, tpExitBmpsInfo pExitBmpsInfo respStatus = eSIR_SME_INVALID_PMM_STATE; pmmBmpsUpdateInvalidStateCnt(pMac); - palFreeMemory( pMac->hHdd, (tANI_U8 *) pExitBmpsInfo); + vos_mem_free(pExitBmpsInfo); goto failure; } return; @@ -540,9 +542,10 @@ tSirRetStatus pmmSendChangePowerSaveMsg(tpAniSirGlobal pMac) tpPESession psessionEntry; tANI_U8 currentOperatingChannel = limGetCurrentOperatingChannel(pMac); - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pExitBmpsParams, sizeof(*pExitBmpsParams)) ) + pExitBmpsParams = vos_mem_malloc(sizeof(*pExitBmpsParams)); + if ( NULL == pExitBmpsParams ) { - pmmLog(pMac, LOGW, FL("palAllocateMemory() failed")); + pmmLog(pMac, LOGW, FL("Failed to allocate memory")); retStatus = eSIR_MEM_ALLOC_FAILED; return retStatus; } @@ -550,11 +553,11 @@ tSirRetStatus pmmSendChangePowerSaveMsg(tpAniSirGlobal pMac) if((psessionEntry = peGetValidPowerSaveSession(pMac)) == NULL ) { retStatus = eSIR_FAILURE; - palFreeMemory(pMac->hHdd, (tANI_U8*)pExitBmpsParams); + vos_mem_free(pExitBmpsParams); return retStatus; } - palZeroMemory( pMac->hHdd, (tANI_U8 *)pExitBmpsParams, sizeof(*pExitBmpsParams)); + vos_mem_set( (tANI_U8 *)pExitBmpsParams, sizeof(*pExitBmpsParams), 0); msgQ.type = WDA_EXIT_BMPS_REQ; msgQ.reserved = 0; msgQ.bodyptr = pExitBmpsParams; @@ -582,7 +585,7 @@ tSirRetStatus pmmSendChangePowerSaveMsg(tpAniSirGlobal pMac) if( eSIR_SUCCESS != retStatus ) { PELOGE(pmmLog( pMac, LOGE, FL("Sending WDA_EXIT_BMPS_REQ failed, reason=%X "), retStatus );) - palFreeMemory(pMac->hHdd, (tANI_U8*)pExitBmpsParams); + vos_mem_free(pExitBmpsParams); return retStatus; } @@ -618,9 +621,8 @@ tSirRetStatus pmmSendInitPowerSaveMsg(tpAniSirGlobal pMac,tpPESession psessionE tSirRetStatus retCode = eSIR_SUCCESS; tSirMsgQ msgQ; tpEnterBmpsParams pBmpsParams = NULL; - tANI_U8 i = 0; tANI_U32 rssiFilterPeriod = 5; - tANI_U32 numBeaconPerRssiAverage = 5; + tANI_U32 numBeaconPerRssiAverage = 20; tANI_U32 bRssiFilterEnable = FALSE; if(psessionEntry->currentBssBeaconCnt == 0 ) @@ -629,7 +631,8 @@ tSirRetStatus pmmSendInitPowerSaveMsg(tpAniSirGlobal pMac,tpPESession psessionE return eSIR_FAILURE; } - if (palAllocateMemory(pMac->hHdd, (void **)&pBmpsParams, sizeof(tEnterBmpsParams)) != eHAL_STATUS_SUCCESS) + pBmpsParams = vos_mem_malloc(sizeof(tEnterBmpsParams)); + if ( NULL == pBmpsParams ) { pmmLog(pMac, LOGP, "PMM: Not able to allocate memory for Enter Bmps"); return eSIR_FAILURE; @@ -643,52 +646,23 @@ tSirRetStatus pmmSendInitPowerSaveMsg(tpAniSirGlobal pMac,tpPESession psessionE pBmpsParams->dtimPeriod = psessionEntry->lastBeaconDtimPeriod; pBmpsParams->bssIdx = psessionEntry->bssIdx; + /* TODO: Config parameters (Rssi filter period, FW RSSI Monitoring + and Number of beacons per RSSI average) values sent down to FW during + initial exchange (driver load) is same as ENTER_BMPS_REQ. + Sending these values again in ENTER_BMPS_REQ is not required + (can be removed). This is kept as-is for now to support + backward compatibility with the older host running on new FW. */ + if(wlan_cfgGetInt(pMac, WNI_CFG_RSSI_FILTER_PERIOD, &rssiFilterPeriod) != eSIR_SUCCESS) pmmLog(pMac, LOGP, FL("pmmCfg: cfgGet failed for Rssi filter period")); + pBmpsParams->rssiFilterPeriod = (tANI_U8)rssiFilterPeriod; - // This flag can be overwritten when 11r/CCXEnabled=1 or FastTransition=1 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR, &bRssiFilterEnable) != eSIR_SUCCESS) pmmLog(pMac, LOGP, FL("pmmCfg: cfgGet failed for Rssi monitor enable flag")); pBmpsParams->bRssiFilterEnable = bRssiFilterEnable; -#if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) - // If there is a CCX assoc or 11r assoc we need to pick up the rssiFilterPeriod from the - // FT config value. - if (TRUE != pBmpsParams->bRssiFilterEnable) - { - for (i = 0; i < pMac->lim.maxBssId; i++) - { - if (limisFastTransitionRequired(pMac, i)) - { - // We need to override the ini value to enable - // FW RSSI Monitoring. Basically if CCX or FT are enabled - // then enable FW RSSI Monitoring - pBmpsParams->bRssiFilterEnable = TRUE; - break; - } - } - } -#endif - -#ifdef FEATURE_WLAN_LFR - /* if LFR is enabled, then enabled FW RSSI Monitoring */ - if (TRUE != pBmpsParams->bRssiFilterEnable) - { - for (i = 0; i < pMac->lim.maxBssId; i++) - { - if (limIsFastRoamEnabled(pMac, i)) - { - pBmpsParams->bRssiFilterEnable = TRUE; - break; - } - } - } -#endif - - pBmpsParams->rssiFilterPeriod = (tANI_U8)rssiFilterPeriod; - - /* The numBeaconPerRssiAverage should be less than the max allowed (default set to 20 in CFG) - */ + /* The numBeaconPerRssiAverage should be less than + the max allowed (default set to 20 in CFG) */ if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE, &numBeaconPerRssiAverage) != eSIR_SUCCESS) pmmLog(pMac, LOGP, FL("pmmCfg: cfgGet failed for num beacon per rssi")); @@ -715,7 +689,7 @@ tSirRetStatus pmmSendInitPowerSaveMsg(tpAniSirGlobal pMac,tpPESession psessionE MTRACE(macTraceMsgTx(pMac, psessionEntry->peSessionId, msgQ.type)); if( eSIR_SUCCESS != (retCode = wdaPostCtrlMsg( pMac, &msgQ ))) { - palFreeMemory(pMac->hHdd, pBmpsParams); + vos_mem_free(pBmpsParams); PELOGE(pmmLog( pMac, LOGE, FL("Posting WDA_ENTER_BMPS_REQ to HAL failed, reason=%X"), retCode );) @@ -803,7 +777,7 @@ tSirRetStatus pmmSendPowerSaveCfg(tpAniSirGlobal pMac, tpSirPowerSaveCfg pUpdate pUpdatedPwrSaveCfg->ignoreDtim = (tANI_U8) ignoreDtim; //Save a copy of the CFG in global pmm context. - palCopyMemory( pMac->hHdd, (tANI_U8 *) &pMac->pmm.gPmmCfg, pUpdatedPwrSaveCfg, sizeof(tSirPowerSaveCfg)); + vos_mem_copy( (tANI_U8 *) &pMac->pmm.gPmmCfg, pUpdatedPwrSaveCfg, sizeof(tSirPowerSaveCfg)); msgQ.type = WDA_PWR_SAVE_CFG; @@ -827,7 +801,7 @@ returnFailure: /* In case of failure, we need to free the memory */ if (NULL != pUpdatedPwrSaveCfg) { - palFreeMemory( pMac->hHdd, (tANI_U8 *) pUpdatedPwrSaveCfg); + vos_mem_free(pUpdatedPwrSaveCfg); } return retCode; } @@ -870,7 +844,7 @@ void pmmExitBmpsResponseHandler(tpAniSirGlobal pMac, tpSirMsgQ limMsg) if((psessionEntry = peFindSessionBySessionId(pMac,PowersavesessionId))==NULL) { - limLog(pMac, LOGP,FL("Session Does not exist for given sessionID")); + pmmLog(pMac, LOGP,FL("Session Does not exist for given sessionID")); return; } @@ -981,7 +955,7 @@ void pmmMissedBeaconHandler(tpAniSirGlobal pMac) if((psessionEntry = peFindSessionBySessionId(pMac,pwrSaveSessionId))==NULL) { - limLog(pMac, LOGE,FL("Session Does not exist for given sessionID")); + pmmLog(pMac, LOGE,FL("Session Does not exist for given sessionID")); return; } @@ -1076,7 +1050,8 @@ void pmmExitBmpsIndicationHandler(tpAniSirGlobal pMac, tANI_U8 mode, eHalStatus if(psessionEntry == NULL) { - PELOGE(limLog(pMac, LOGE,FL("Session does Not exist with given sessionId :%d "),powersavesessionId);) + PELOGE(pmmLog(pMac, LOGE, + FL("Session does Not exist with given sessionId :%d "),powersavesessionId);) return; } @@ -1195,11 +1170,12 @@ void pmmProcessMessage(tpAniSirGlobal pMac, tpSirMsgQ pMsg) tpSirPowerSaveCfg pPSCfg; tSirMbMsg *pMbMsg = (tSirMbMsg *)pMsg->bodyptr; - if (palAllocateMemory(pMac->hHdd, (void **)&pPSCfg, sizeof(tSirPowerSaveCfg)) != eHAL_STATUS_SUCCESS) + pPSCfg = vos_mem_malloc(sizeof(tSirPowerSaveCfg)); + if ( NULL == pPSCfg ) { pmmLog(pMac, LOGP, "PMM: Not able to allocate memory for PMC Config"); } - (void) palCopyMemory(pMac->hHdd, pPSCfg, pMbMsg->data, sizeof(tSirPowerSaveCfg)); + (void) vos_mem_copy(pPSCfg, pMbMsg->data, sizeof(tSirPowerSaveCfg)); (void) pmmSendPowerSaveCfg(pMac, pPSCfg); } break; @@ -1217,11 +1193,12 @@ void pmmProcessMessage(tpAniSirGlobal pMac, tpSirMsgQ pMsg) tpExitBmpsInfo pExitBmpsInfo; tSirMbMsg *pMbMsg = (tSirMbMsg *)pMsg->bodyptr; - if (palAllocateMemory(pMac->hHdd, (void **)&pExitBmpsInfo, sizeof(tExitBmpsInfo)) != eHAL_STATUS_SUCCESS) + pExitBmpsInfo = vos_mem_malloc(sizeof(tExitBmpsInfo)); + if ( NULL == pExitBmpsInfo ) { pmmLog(pMac, LOGP, "PMM: Failed to allocate memory for Exit BMPS Info "); } - (void) palCopyMemory(pMac->hHdd, pExitBmpsInfo, pMbMsg->data, sizeof(tExitBmpsInfo)); + (void) vos_mem_copy(pExitBmpsInfo, pMbMsg->data, sizeof(tExitBmpsInfo)); (void) pmmExitBmpsRequestHandler(pMac, pExitBmpsInfo); } break; @@ -1310,7 +1287,7 @@ void pmmProcessMessage(tpAniSirGlobal pMac, tpSirMsgQ pMsg) if (NULL != pMsg->bodyptr) { - palFreeMemory(pMac->hHdd, (tANI_U8 *)pMsg->bodyptr); + vos_mem_free(pMsg->bodyptr); pMsg->bodyptr = NULL; } } @@ -1841,7 +1818,7 @@ void pmmEnterUapsdResponseHandler(tpAniSirGlobal pMac, tpSirMsgQ limMsg) if((psessionEntry = peFindSessionBySessionId(pMac,PowersavesessionId))==NULL) { - limLog(pMac, LOGP,FL("Session Does not exist for given sessionID")); + pmmLog(pMac, LOGP,FL("Session Does not exist for given sessionID")); return; } @@ -1981,7 +1958,7 @@ void pmmExitUapsdResponseHandler(tpAniSirGlobal pMac, tpSirMsgQ limMsg) PowersavesessionId = pMac->pmm.sessionId; if((psessionEntry = peFindSessionBySessionId(pMac,PowersavesessionId))==NULL) { - limLog(pMac, LOGP,FL("Session Does not exist for given sessionID")); + pmmLog(pMac, LOGP,FL("Session Does not exist for given sessionID")); return; } @@ -2035,12 +2012,13 @@ void pmmSendWowlAddBcastPtrn(tpAniSirGlobal pMac, tpSirMsgQ pMsg) tSirRetStatus retCode = eSIR_SUCCESS; tSirMsgQ msgQ; - if (palAllocateMemory(pMac->hHdd, (void **)&pBcastPtrn, sizeof(*pBcastPtrn)) != eHAL_STATUS_SUCCESS) + pBcastPtrn = vos_mem_malloc(sizeof(*pBcastPtrn)); + if ( NULL == pBcastPtrn ) { pmmLog(pMac, LOGP, FL("Fail to allocate memory for WoWLAN Add Bcast Pattern ")); return; } - (void) palCopyMemory(pMac->hHdd, pBcastPtrn, pMbMsg->data, sizeof(*pBcastPtrn)); + (void) vos_mem_copy(pBcastPtrn, pMbMsg->data, sizeof(*pBcastPtrn)); if (NULL == pBcastPtrn) { @@ -2061,7 +2039,7 @@ void pmmSendWowlAddBcastPtrn(tpAniSirGlobal pMac, tpSirMsgQ pMsg) if( eSIR_SUCCESS != (retCode = wdaPostCtrlMsg( pMac, &msgQ ))) { if (pBcastPtrn != NULL) - palFreeMemory( pMac->hHdd, (tANI_U8 *) pBcastPtrn); + vos_mem_free(pBcastPtrn); pmmLog( pMac, LOGP, FL("Posting WDA_WOWL_ADD_BCAST_PTRN failed, reason=%X"), retCode ); } return; @@ -2082,12 +2060,13 @@ void pmmSendWowlDelBcastPtrn(tpAniSirGlobal pMac, tpSirMsgQ pMsg) tSirRetStatus retCode = eSIR_SUCCESS; tSirMsgQ msgQ; - if (palAllocateMemory(pMac->hHdd, (void **)&pDeletePtrn, sizeof(*pDeletePtrn)) != eHAL_STATUS_SUCCESS) + pDeletePtrn = vos_mem_malloc(sizeof(*pDeletePtrn)); + if ( NULL == pDeletePtrn ) { pmmLog(pMac, LOGP, FL("Fail to allocate memory for WoWLAN Delete Bcast Pattern ")); return; } - (void) palCopyMemory(pMac->hHdd, pDeletePtrn, pMbMsg->data, sizeof(*pDeletePtrn)); + (void) vos_mem_copy(pDeletePtrn, pMbMsg->data, sizeof(*pDeletePtrn)); if (NULL == pDeletePtrn) { @@ -2108,7 +2087,7 @@ void pmmSendWowlDelBcastPtrn(tpAniSirGlobal pMac, tpSirMsgQ pMsg) if( eSIR_SUCCESS != (retCode = wdaPostCtrlMsg( pMac, &msgQ ))) { if (NULL != pDeletePtrn) - palFreeMemory( pMac->hHdd, (tANI_U8 *) pDeletePtrn); + vos_mem_free(pDeletePtrn); pmmLog( pMac, LOGP, FL("Posting WDA_WOWL_DEL_BCAST_PTRN failed, reason=%X"), retCode ); } return; @@ -2140,7 +2119,7 @@ void pmmEnterWowlRequestHandler(tpAniSirGlobal pMac, tpSirMsgQ pMsg) pSmeWowlParams = (tpSirSmeWowlEnterParams)(pMbMsg->data); if (NULL == pSmeWowlParams) { - limLog(pMac, LOGE, + pmmLog(pMac, LOGE, FL("NULL message received")); return; } @@ -2152,7 +2131,7 @@ void pmmEnterWowlRequestHandler(tpAniSirGlobal pMac, tpSirMsgQ pMsg) &peSessionId); if (NULL == pSessionEntry) { - limLog(pMac, LOGE, + pmmLog(pMac, LOGE, FL("session does not exist for given BSSId")); goto end; } @@ -2178,17 +2157,19 @@ void pmmEnterWowlRequestHandler(tpAniSirGlobal pMac, tpSirMsgQ pMsg) skip_pmm_state_check: - if (palAllocateMemory(pMac->hHdd, (void **)&pHalWowlParams, sizeof(*pHalWowlParams)) != eHAL_STATUS_SUCCESS) + pHalWowlParams = vos_mem_malloc(sizeof(*pHalWowlParams)); + if ( NULL == pHalWowlParams ) { pmmLog(pMac, LOGP, FL("Fail to allocate memory for Enter Wowl Request ")); goto end; } - (void) palZeroMemory(pMac->hHdd, (tANI_U8 *)pHalWowlParams, sizeof(*pHalWowlParams) ); + (void) vos_mem_set((tANI_U8 *)pHalWowlParams, sizeof(*pHalWowlParams), 0); // fill in the message field pHalWowlParams->ucMagicPktEnable = pSmeWowlParams->ucMagicPktEnable; pHalWowlParams->ucPatternFilteringEnable = pSmeWowlParams->ucPatternFilteringEnable; - (void)palCopyMemory( pMac->hHdd, (tANI_U8 *)pHalWowlParams->magicPtrn, (tANI_U8 *)pSmeWowlParams->magicPtrn, sizeof(tSirMacAddr) ); + (void)vos_mem_copy( (tANI_U8 *)pHalWowlParams->magicPtrn, (tANI_U8 *)pSmeWowlParams->magicPtrn, + sizeof(tSirMacAddr) ); #ifdef WLAN_WAKEUP_EVENTS pHalWowlParams->ucWoWEAPIDRequestEnable = pSmeWowlParams->ucWoWEAPIDRequestEnable; @@ -2203,42 +2184,42 @@ skip_pmm_state_check: if(wlan_cfgGetInt(pMac, WNI_CFG_WOWLAN_UCAST_PATTERN_FILTER_ENABLE, &cfgValue) != eSIR_SUCCESS) { - limLog(pMac, LOGP, FL("cfgGet failed for WNI_CFG_WOWLAN_UCAST_PATTERN_FILTER_ENABLE")); + pmmLog(pMac, LOGP, FL("cfgGet failed for WNI_CFG_WOWLAN_UCAST_PATTERN_FILTER_ENABLE")); goto end; } pHalWowlParams->ucUcastPatternFilteringEnable = (tANI_U8)cfgValue; if(wlan_cfgGetInt(pMac, WNI_CFG_WOWLAN_CHANNEL_SWITCH_ENABLE, &cfgValue) != eSIR_SUCCESS) { - limLog(pMac, LOGP, FL("cfgGet failed for WNI_CFG_WOWLAN_CHANNEL_SWITCH_ENABLE")); + pmmLog(pMac, LOGP, FL("cfgGet failed for WNI_CFG_WOWLAN_CHANNEL_SWITCH_ENABLE")); goto end; } pHalWowlParams->ucWowChnlSwitchRcv = (tANI_U8)cfgValue; if(wlan_cfgGetInt(pMac, WNI_CFG_WOWLAN_DEAUTH_ENABLE, &cfgValue) != eSIR_SUCCESS) { - limLog(pMac, LOGP, FL("cfgGet failed for WNI_CFG_WOWLAN_DEAUTH_ENABLE ")); + pmmLog(pMac, LOGP, FL("cfgGet failed for WNI_CFG_WOWLAN_DEAUTH_ENABLE ")); goto end; } pHalWowlParams->ucWowDeauthRcv = (tANI_U8)cfgValue; if(wlan_cfgGetInt(pMac, WNI_CFG_WOWLAN_DISASSOC_ENABLE, &cfgValue) != eSIR_SUCCESS) { - limLog(pMac, LOGP, FL("cfgGet failed for WNI_CFG_WOWLAN_DEAUTH_ENABLE ")); + pmmLog(pMac, LOGP, FL("cfgGet failed for WNI_CFG_WOWLAN_DEAUTH_ENABLE ")); goto end; } pHalWowlParams->ucWowDisassocRcv = (tANI_U8)cfgValue; if(wlan_cfgGetInt(pMac, WNI_CFG_WOWLAN_MAX_MISSED_BEACON, &cfgValue) != eSIR_SUCCESS) { - limLog(pMac, LOGP, FL("cfgGet failed for WNI_CFG_WOWLAN_MAX_MISSED_BEACON ")); + pmmLog(pMac, LOGP, FL("cfgGet failed for WNI_CFG_WOWLAN_MAX_MISSED_BEACON ")); goto end; } pHalWowlParams->ucWowMaxMissedBeacons = (tANI_U8)cfgValue; if(wlan_cfgGetInt(pMac, WNI_CFG_WOWLAN_MAX_SLEEP_PERIOD, &cfgValue) != eSIR_SUCCESS) { - limLog(pMac, LOGP, FL("cfgGet failed for WNI_CFG_WOWLAN_MAX_SLEEP_PERIOD ")); + pmmLog(pMac, LOGP, FL("cfgGet failed for WNI_CFG_WOWLAN_MAX_SLEEP_PERIOD ")); goto end; } pHalWowlParams->ucWowMaxSleepUsec = (tANI_U8)cfgValue; @@ -2255,7 +2236,7 @@ skip_pmm_state_check: end: if (pHalWowlParams != NULL) - palFreeMemory( pMac->hHdd, (tANI_U8 *) pHalWowlParams); + vos_mem_free(pHalWowlParams); return; } @@ -2377,14 +2358,15 @@ void pmmExitWowlanRequestHandler(tpAniSirGlobal pMac, tpSirMsgQ pMsg) if((pSessionEntry = peFindSessionBySessionId(pMac,PowersavesessionId)) == NULL ) { - PELOGW(pmmLog(pMac, LOGE, FL("pmmWowl :palAllocateMemory() failed"));) + PELOGW(pmmLog(pMac, LOGE, FL("pmmWowl : failed to allocate memory"));) smeRspCode = eSIR_SME_WOWL_EXIT_REQ_FAILED; goto failure; } skip_pe_session_lookup: - if (palAllocateMemory(pMac->hHdd, (void **)&pHalWowlMsg, sizeof(*pHalWowlMsg)) != eHAL_STATUS_SUCCESS) + pHalWowlMsg = vos_mem_malloc(sizeof(*pHalWowlMsg)); + if ( NULL == pHalWowlMsg ) { pmmLog(pMac, LOGP, FL("Fail to allocate memory for WoWLAN Add Bcast Pattern ")); smeRspCode = eSIR_SME_WOWL_EXIT_REQ_FAILED; @@ -2404,10 +2386,10 @@ skip_pe_session_lookup: goto failure; } - (void) palZeroMemory(pMac->hHdd, (tANI_U8 *)pHalWowlMsg, sizeof(*pHalWowlMsg) ); + (void) vos_mem_set((tANI_U8 *)pHalWowlMsg, sizeof(*pHalWowlMsg), 0); if (!pMac->psOffloadEnabled) - pHalWowlMsg->bssIdx = pSessionEntry->bssIdx; + pHalWowlMsg->bssIdx = pSessionEntry->bssIdx; pHalWowlMsg->sessionId = pSmeWowlParams->sessionId; if((retStatus = pmmSendExitWowlReq(pMac, pHalWowlMsg)) != eSIR_SUCCESS) @@ -2422,7 +2404,7 @@ skip_pe_session_lookup: failure: if (pHalWowlMsg != NULL) - palFreeMemory( pMac->hHdd, (tANI_U8 *) pHalWowlMsg); + vos_mem_free(pHalWowlMsg); limSendSmeRsp(pMac, eWNI_PMC_EXIT_WOWL_RSP, smeRspCode, 0, 0); return; } @@ -2589,21 +2571,22 @@ tSirRetStatus pmmUapsdSendChangePwrSaveMsg (tpAniSirGlobal pMac, tANI_U8 mode) if((pSessionEntry = peGetValidPowerSaveSession(pMac)) == NULL ) { - PELOGW(pmmLog(pMac, LOGW, FL("pmmUapsd :palAllocateMemory() failed"));) + PELOGW(pmmLog(pMac, LOGW, FL("pmmUapsd : failed to allocate memory"));) retStatus = eSIR_FAILURE; return retStatus; } if (SIR_PM_SLEEP_MODE == mode) { - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pUapsdParams, sizeof(tUapsdParams)) ) + pUapsdParams = vos_mem_malloc(sizeof(tUapsdParams)); + if ( NULL == pUapsdParams ) { - PELOGW(pmmLog(pMac, LOGW, FL("pmmUapsd :palAllocateMemory() failed"));) + PELOGW(pmmLog(pMac, LOGW, FL("pmmUapsd : failed to allocate memory"));) retStatus = eSIR_MEM_ALLOC_FAILED; return retStatus; } - palZeroMemory( pMac->hHdd, (tANI_U8 *)pUapsdParams, sizeof(tUapsdParams)); + vos_mem_set( (tANI_U8 *)pUapsdParams, sizeof(tUapsdParams), 0); msgQ.type = WDA_ENTER_UAPSD_REQ; msgQ.bodyptr = pUapsdParams; @@ -2620,19 +2603,19 @@ tSirRetStatus pmmUapsdSendChangePwrSaveMsg (tpAniSirGlobal pMac, tANI_U8 mode) pUapsdParams->voTriggerEnabled = LIM_UAPSD_GET(ACVO, uapsdTriggerMask); pUapsdParams->bssIdx = pSessionEntry->bssIdx; - PELOGE(pmmLog(pMac, LOGE, + PELOGW(pmmLog(pMac, LOGW, FL("UAPSD Mask: static = 0x%x, DeliveryEnabled = 0x%x, TriggerEnabled = 0x%x "), pMac->lim.gUapsdPerAcBitmask, pMac->lim.gUapsdPerAcDeliveryEnableMask, pMac->lim.gUapsdPerAcTriggerEnableMask);) - PELOG1(pmmLog(pMac, LOG1, FL("Delivery Enabled: BK=%d, BE=%d, Vi=%d, Vo=%d "), + PELOGW(pmmLog(pMac, LOGW, FL("Delivery Enabled: BK=%d, BE=%d, Vi=%d, Vo=%d "), pUapsdParams->bkDeliveryEnabled, pUapsdParams->beDeliveryEnabled, pUapsdParams->viDeliveryEnabled, pUapsdParams->voDeliveryEnabled);) - PELOG1(pmmLog(pMac, LOG1, FL("Trigger Enabled: BK=%d, BE=%d, Vi=%d, Vo=%d "), + PELOGW(pmmLog(pMac, LOGW, FL("Trigger Enabled: BK=%d, BE=%d, Vi=%d, Vo=%d "), pUapsdParams->bkTriggerEnabled, pUapsdParams->beTriggerEnabled, pUapsdParams->viTriggerEnabled, @@ -2642,14 +2625,15 @@ tSirRetStatus pmmUapsdSendChangePwrSaveMsg (tpAniSirGlobal pMac, tANI_U8 mode) } else { - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pExitUapsdParams, sizeof(tExitUapsdParams)) ) + pExitUapsdParams = vos_mem_malloc(sizeof(tExitUapsdParams)); + if ( NULL == pExitUapsdParams ) { - PELOGW(pmmLog(pMac, LOGW, FL("pmmUapsd :palAllocateMemory() failed"));) + PELOGW(pmmLog(pMac, LOGW, FL("pmmUapsd : failed to allocate memory"));) retStatus = eSIR_MEM_ALLOC_FAILED; return retStatus; } - palZeroMemory( pMac->hHdd, (tANI_U8 *)pExitUapsdParams, sizeof(tExitUapsdParams)); + vos_mem_set( (tANI_U8 *)pExitUapsdParams, sizeof(tExitUapsdParams), 0); msgQ.type = WDA_EXIT_UAPSD_REQ; msgQ.bodyptr = pExitUapsdParams; pExitUapsdParams->bssIdx = pSessionEntry->bssIdx; @@ -2671,9 +2655,9 @@ tSirRetStatus pmmUapsdSendChangePwrSaveMsg (tpAniSirGlobal pMac, tANI_U8 mode) FL("pmmUapsd: WDA_ENTER/EXIT_UAPSD_REQ to HAL failed, reason=%X"), retStatus);) if (SIR_PM_SLEEP_MODE == mode) - palFreeMemory(pMac->hHdd, (tANI_U8*)pUapsdParams); + vos_mem_free(pUapsdParams); else - palFreeMemory(pMac->hHdd, (tANI_U8*)pExitUapsdParams); + vos_mem_free(pExitUapsdParams); } return retStatus; @@ -3191,16 +3175,16 @@ tSirRetStatus pmmOffloadEnterBmpsReqHandler(tpAniSirGlobal pMac, return eSIR_SUCCESS; } - if(eHAL_STATUS_SUCCESS != - palAllocateMemory(pMac->hHdd, (void **)&pEnablePsReqParams, - sizeof(tEnablePsParams))) + pEnablePsReqParams = vos_mem_malloc(sizeof(tEnablePsParams)); + if (NULL == pEnablePsReqParams) { - pmmLog(pMac, LOGE, FL("palAllocateMemory() failed")); + pmmLog(pMac, LOGE, + FL("Memory allocation failed for pEnablePsReqParams")); return eSIR_MEM_ALLOC_FAILED; } /* Fill the BSSID corresponding to PS Req */ - palCopyMemory(pMac->hHdd, pEnablePsReqParams->bssid, psReqData->bssId, + vos_mem_copy(pEnablePsReqParams->bssid, psReqData->bssId, sizeof(tSirMacAddr)); /* Fill the Sme Session Id */ @@ -3223,7 +3207,7 @@ tSirRetStatus pmmOffloadEnterBmpsReqHandler(tpAniSirGlobal pMac, if(eSIR_SUCCESS != wdaPostCtrlMsg(pMac, &msgQ)) { pmmLog(pMac, LOGE, FL("Posting WDA_ENTER_BMPS_REQ failed")); - palFreeMemory(pMac->hHdd, pEnablePsReqParams); + vos_mem_free(pEnablePsReqParams); return eSIR_FAILURE; } /* @@ -3327,16 +3311,15 @@ tSirRetStatus pmmOffloadExitBmpsReqHandler(tpAniSirGlobal pMac, return eSIR_FAILURE; } - if(eHAL_STATUS_SUCCESS != - palAllocateMemory(pMac->hHdd, (void **)&pDisablePsReqParams, - sizeof(tDisablePsParams))) + pDisablePsReqParams = vos_mem_malloc(sizeof(tDisablePsParams)); + if (NULL == pDisablePsReqParams) { - pmmLog(pMac, LOGE, FL("palAllocateMemory() failed")); + pmmLog(pMac, LOGE, FL("Memory allocation failed for tDisablePsParams")); return eSIR_MEM_ALLOC_FAILED; } /* Fill the BSSID corresponding to PS Req */ - palCopyMemory(pMac->hHdd, pDisablePsReqParams->bssid, psReqData->bssId, + vos_mem_copy(pDisablePsReqParams->bssid, psReqData->bssId, sizeof(tSirMacAddr)); /* Fill the Sme Session Id */ @@ -3350,7 +3333,7 @@ tSirRetStatus pmmOffloadExitBmpsReqHandler(tpAniSirGlobal pMac, if(eSIR_SUCCESS != wdaPostCtrlMsg(pMac, &msgQ)) { pmmLog(pMac, LOGE, FL("Posting WDA_EXIT_BMPS_REQ failed")); - palFreeMemory(pMac->hHdd, pDisablePsReqParams); + vos_mem_free(pDisablePsReqParams); return eSIR_FAILURE; } /* @@ -3447,11 +3430,11 @@ tSirRetStatus pmmOffloadEnterUapsdReqHandler(tpAniSirGlobal pMac, return eSIR_FAILURE; } - if(eHAL_STATUS_SUCCESS != - palAllocateMemory(pMac->hHdd, (void **)&pEnableUapsdReqParams, - sizeof(tEnableUapsdParams))) + pEnableUapsdReqParams = vos_mem_malloc(sizeof(tEnableUapsdParams)); + if (NULL == pEnableUapsdReqParams) { - pmmLog(pMac, LOGE, FL("palAllocateMemory() failed")); + pmmLog(pMac, LOGE, + FL("Memory allocation failed for pEnableUapsdReqParams")); return eSIR_MEM_ALLOC_FAILED; } @@ -3486,7 +3469,7 @@ tSirRetStatus pmmOffloadEnterUapsdReqHandler(tpAniSirGlobal pMac, LIM_UAPSD_GET(ACVO, uapsdTriggerMask); /* Fill the BSSID corresponding to PS Req */ - palCopyMemory(pMac->hHdd, pEnableUapsdReqParams->bssid, psReqData->bssId, + vos_mem_copy(pEnableUapsdReqParams->bssid, psReqData->bssId, sizeof(tSirMacAddr)); /* Fill the Sme Session Id */ @@ -3500,7 +3483,7 @@ tSirRetStatus pmmOffloadEnterUapsdReqHandler(tpAniSirGlobal pMac, if(eSIR_SUCCESS != wdaPostCtrlMsg(pMac, &msgQ)) { pmmLog(pMac, LOGE, FL("Posting WDA_ENTER_UAPSD_REQ failed")); - palFreeMemory(pMac->hHdd, pEnableUapsdReqParams); + vos_mem_free(pEnableUapsdReqParams); return eSIR_FAILURE; } @@ -3593,17 +3576,17 @@ tSirRetStatus pmmOffloadExitUapsdReqHandler(tpAniSirGlobal pMac, return eSIR_FAILURE; } - if(eHAL_STATUS_SUCCESS != - palAllocateMemory(pMac->hHdd, (void **)&pDisableUapsdReqParams, - sizeof(tDisablePsParams))) + pDisableUapsdReqParams = vos_mem_malloc(sizeof(tDisablePsParams)); + if (NULL == pDisableUapsdReqParams) { - pmmLog(pMac, LOGE, FL("palAllocateMemory() failed")); + pmmLog(pMac, LOGE, + FL("Memory allocation failed for pDisableUapsdReqParams")); return eSIR_MEM_ALLOC_FAILED; } /* Fill the BSSID corresponding to PS Req */ - palCopyMemory(pMac->hHdd, pDisableUapsdReqParams->bssid, psReqData->bssId, - sizeof(tSirMacAddr)); + vos_mem_copy(pDisableUapsdReqParams->bssid, psReqData->bssId, + sizeof(tSirMacAddr)); /* Fill the Sme Session Id */ pDisableUapsdReqParams->sessionid = psessionEntry->smeSessionId; @@ -3616,7 +3599,7 @@ tSirRetStatus pmmOffloadExitUapsdReqHandler(tpAniSirGlobal pMac, if(eSIR_SUCCESS != wdaPostCtrlMsg(pMac, &msgQ)) { pmmLog(pMac, LOGE, FL("Posting WDA_EXIT_UAPSD_REQ failed")); - palFreeMemory(pMac->hHdd, pDisableUapsdReqParams); + vos_mem_free(pDisableUapsdReqParams); return eSIR_FAILURE; } @@ -3753,7 +3736,7 @@ void pmmOffloadProcessMessage(tpAniSirGlobal pMac, tpSirMsgQ pMsg) if (NULL != pMsg->bodyptr) { - palFreeMemory(pMac->hHdd, pMsg->bodyptr); + vos_mem_free(pMsg->bodyptr); pMsg->bodyptr = NULL; } } diff --git a/CORE/MAC/src/pe/pmm/pmmDebug.c b/CORE/MAC/src/pe/pmm/pmmDebug.c index b0c902f566c3..60030379fd48 100644 --- a/CORE/MAC/src/pe/pmm/pmmDebug.c +++ b/CORE/MAC/src/pe/pmm/pmmDebug.c @@ -39,23 +39,23 @@ ========================================================================*/ +#include "vos_trace.h" #include "pmmDebug.h" +#define LOG_SIZE 256 -void pmmLog(tpAniSirGlobal pMac, tANI_U32 loglevel, const char *pString,...) -{ -#ifdef WLAN_DEBUG - // Verify against current log level - if ( loglevel > pMac->utils.gLogDbgLevel[LOG_INDEX_FOR_MODULE( SIR_PMM_MODULE_ID )] ) - return; - else - { - va_list marker; - - va_start( marker, pString ); /* Initialize variable arguments. */ - - logDebug(pMac, SIR_PMM_MODULE_ID, loglevel, pString, marker); - - va_end( marker ); /* Reset variable arguments. */ - } -#endif -} +void pmmLog(tpAniSirGlobal pMac, tANI_U32 loglevel, const char *pString, ...) + { + VOS_TRACE_LEVEL vosDebugLevel; + char logBuffer[LOG_SIZE]; + va_list marker; + + /* getting proper Debug level */ + vosDebugLevel = getVosDebugLevel(loglevel); + + /* extracting arguments from pstring */ + va_start( marker, pString ); + vsnprintf(logBuffer, LOG_SIZE, pString, marker); + + VOS_TRACE(VOS_MODULE_ID_PMC, vosDebugLevel, "%s", logBuffer); + va_end( marker ); + } diff --git a/CORE/MAC/src/pe/rrm/rrmApi.c b/CORE/MAC/src/pe/rrm/rrmApi.c index 559c3f4f6a2a..ce13dc1e7779 100644 --- a/CORE/MAC/src/pe/rrm/rrmApi.c +++ b/CORE/MAC/src/pe/rrm/rrmApi.c @@ -25,17 +25,18 @@ * to the Linux Foundation. */ + /**========================================================================= - - \file rrmApi.c - - \brief implementation for PE RRM APIs - + + \file rrmApi.c + + \brief implementation for PE RRM APIs + Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - + Qualcomm Technologies Confidential and Proprietary. - - ========================================================================*/ + +========================================================================*/ /* $Header$ */ @@ -61,7 +62,7 @@ tANI_U8 rrmGetMinOfMaxTxPower(tPowerdBm regMax, tPowerdBm apTxPower) { tANI_U8 maxTxPower = 0; - tANI_U8 txPower = VOS_MIN( regMax , (apTxPower) ); + tANI_U8 txPower = VOS_MIN( regMax, (apTxPower) ); if((txPower >= RRM_MIN_TX_PWR_CAP) && (txPower <= RRM_MAX_TX_PWR_CAP)) maxTxPower = txPower; else if (txPower < RRM_MIN_TX_PWR_CAP) @@ -154,8 +155,8 @@ rrmSendSetMaxTxPowerReq ( tpAniSirGlobal pMac, tPowerdBm txPower, tpPESession pS PELOGE(limLog(pMac, LOGE, FL(" Inavalid parameters"));) return eSIR_FAILURE; } - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, - (void **) &pMaxTxParams, sizeof(tMaxTxPowerParams) ) ) + pMaxTxParams = vos_mem_malloc(sizeof(tMaxTxPowerParams)); + if ( NULL == pMaxTxParams ) { limLog( pMac, LOGP, FL("Unable to allocate memory for pMaxTxParams ") ); return eSIR_MEM_ALLOC_FAILED; @@ -165,8 +166,8 @@ rrmSendSetMaxTxPowerReq ( tpAniSirGlobal pMac, tPowerdBm txPower, tpPESession pS PELOGE(limLog( pMac, LOGE, FL(" Allocated memory for pMaxTxParams...will be freed in other module") );) #endif pMaxTxParams->power = txPower; - palCopyMemory( pMac->hHdd, pMaxTxParams->bssId, pSessionEntry->bssId, sizeof(tSirMacAddr) ); - palCopyMemory( pMac->hHdd, pMaxTxParams->selfStaMacAddr, pSessionEntry->selfMacAddr, sizeof(tSirMacAddr) ); + vos_mem_copy(pMaxTxParams->bssId, pSessionEntry->bssId, sizeof(tSirMacAddr)); + vos_mem_copy(pMaxTxParams->selfStaMacAddr, pSessionEntry->selfMacAddr, sizeof(tSirMacAddr)); msgQ.type = WDA_SET_MAX_TX_POWER_REQ; @@ -180,7 +181,7 @@ rrmSendSetMaxTxPowerReq ( tpAniSirGlobal pMac, tPowerdBm txPower, tpPESession pS if( eSIR_SUCCESS != (retCode = wdaPostCtrlMsg( pMac, &msgQ ))) { limLog( pMac, LOGP, FL("Posting WDA_SET_MAX_TX_POWER_REQ to HAL failed, reason=%X"), retCode ); - palFreeMemory( pMac->hHdd, (tANI_U8 *) pMaxTxParams ); + vos_mem_free(pMaxTxParams); return retCode; } return retCode; @@ -209,19 +210,34 @@ rrmSetMaxTxPowerRsp ( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ ) tSirRetStatus retCode = eSIR_SUCCESS; tpMaxTxPowerParams pMaxTxParams = (tpMaxTxPowerParams) limMsgQ->bodyptr; tpPESession pSessionEntry; - tANI_U8 sessionId; + tANI_U8 sessionId, i; + tSirMacAddr bssid = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; - if((pSessionEntry = peFindSessionByBssid(pMac, pMaxTxParams->bssId, &sessionId))==NULL) + if( vos_mem_compare(bssid, pMaxTxParams->bssId, sizeof(tSirMacAddr))) { - PELOGE(limLog(pMac, LOGE, FL("Unable to find session:") );) - retCode = eSIR_FAILURE; + for (i =0;i < pMac->lim.maxBssId;i++) + { + if ( (pMac->lim.gpSession[i].valid == TRUE )) + { + pSessionEntry = &pMac->lim.gpSession[i]; + rrmCacheMgmtTxPower ( pMac, pMaxTxParams->power, pSessionEntry ); + } + } } else { - rrmCacheMgmtTxPower ( pMac, pMaxTxParams->power, pSessionEntry ); + if((pSessionEntry = peFindSessionByBssid(pMac, pMaxTxParams->bssId, &sessionId))==NULL) + { + PELOGE(limLog(pMac, LOGE, FL("Unable to find session:") );) + retCode = eSIR_FAILURE; + } + else + { + rrmCacheMgmtTxPower ( pMac, pMaxTxParams->power, pSessionEntry ); + } } - palFreeMemory(pMac->hHdd, (void*)limMsgQ->bodyptr); + vos_mem_free(limMsgQ->bodyptr); limMsgQ->bodyptr = NULL; return retCode; } @@ -257,7 +273,7 @@ rrmProcessLinkMeasurementRequest( tpAniSirGlobal pMac, #endif if( pRxPacketInfo == NULL || pLinkReq == NULL || pSessionEntry == NULL ) { - PELOGE(limLog( pMac, LOGE, "%s:%d: Invalid parameters - Ignoring the request");) + PELOGE(limLog( pMac, LOGE, FL("Invalid parameters - Ignoring the request"));) return eSIR_FAILURE; } pHdr = WDA_GET_RX_MAC_HEADER( pRxPacketInfo ); @@ -393,14 +409,14 @@ rrmProcessNeighborReportResponse( tpAniSirGlobal pMac, (sizeof( tSirNeighborBssDescription ) * (pNeighborRep->num_NeighborReport - 1) ) ; //Prepare the request to send to SME. - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, - (void **) &pSmeNeighborRpt, length ) ) + pSmeNeighborRpt = vos_mem_malloc(length); + if( NULL == pSmeNeighborRpt ) { PELOGE(limLog( pMac, LOGP, FL("Unable to allocate memory") );) return eSIR_MEM_ALLOC_FAILED; } - palZeroMemory( pMac->hHdd, pSmeNeighborRpt, length ); + vos_mem_set(pSmeNeighborRpt, length, 0); #if defined WLAN_VOWIFI_DEBUG PELOGE(limLog( pMac, LOGE, FL(" Allocated memory for pSmeNeighborRpt...will be freed by other module") );) #endif @@ -408,8 +424,9 @@ rrmProcessNeighborReportResponse( tpAniSirGlobal pMac, for( i = 0 ; i < pNeighborRep->num_NeighborReport ; i++ ) { pSmeNeighborRpt->sNeighborBssDescription[i].length = sizeof( tSirNeighborBssDescription ); /*+ any optional ies */ - palCopyMemory( pMac->hHdd, pSmeNeighborRpt->sNeighborBssDescription[i].bssId, - pNeighborRep->NeighborReport[i].bssid, sizeof(tSirMacAddr) ); + vos_mem_copy(pSmeNeighborRpt->sNeighborBssDescription[i].bssId, + pNeighborRep->NeighborReport[i].bssid, + sizeof(tSirMacAddr)); pSmeNeighborRpt->sNeighborBssDescription[i].bssidInfo.rrmInfo.fApPreauthReachable = pNeighborRep->NeighborReport[i].APReachability; pSmeNeighborRpt->sNeighborBssDescription[i].bssidInfo.rrmInfo.fSameSecurityMode = pNeighborRep->NeighborReport[i].Security; pSmeNeighborRpt->sNeighborBssDescription[i].bssidInfo.rrmInfo.fSameAuthenticator = pNeighborRep->NeighborReport[i].KeyScope; @@ -429,7 +446,7 @@ rrmProcessNeighborReportResponse( tpAniSirGlobal pMac, pSmeNeighborRpt->messageType = eWNI_SME_NEIGHBOR_REPORT_IND; pSmeNeighborRpt->length = length; pSmeNeighborRpt->numNeighborReports = pNeighborRep->num_NeighborReport; - palCopyMemory( pMac->hHdd, pSmeNeighborRpt->bssId, pSessionEntry->bssId, sizeof(tSirMacAddr) ); + vos_mem_copy(pSmeNeighborRpt->bssId, pSessionEntry->bssId, sizeof(tSirMacAddr)); //Send request to SME. mmhMsg.type = pSmeNeighborRpt->messageType; @@ -481,13 +498,13 @@ rrmProcessNeighborReportReq( tpAniSirGlobal pMac, PELOGE(limLog( pMac, LOGE, "SSID present = %d ", pNeighborReq->noSSID );) #endif - palZeroMemory( pMac->hHdd, &NeighborReportReq, sizeof( tSirMacNeighborReportReq ) ); + vos_mem_set(&NeighborReportReq,sizeof( tSirMacNeighborReportReq ), 0); NeighborReportReq.dialogToken = ++pMac->rrm.rrmPEContext.DialogToken; NeighborReportReq.ssid_present = !pNeighborReq->noSSID; if( NeighborReportReq.ssid_present ) { - palCopyMemory( pMac->hHdd, &NeighborReportReq.ssid, &pNeighborReq->ucSSID, sizeof(tSirMacSSid) ); + vos_mem_copy(&NeighborReportReq.ssid, &pNeighborReq->ucSSID, sizeof(tSirMacSSid)); #if defined WLAN_VOWIFI_DEBUG PELOGE(sirDumpBuf( pMac, SIR_LIM_MODULE_ID, LOGE, (tANI_U8*) NeighborReportReq.ssid.ssId, NeighborReportReq.ssid.length );) #endif @@ -583,21 +600,21 @@ rrmProcessBeaconReportReq( tpAniSirGlobal pMac, if( pBeaconReq->measurement_request.Beacon.RequestedInfo.present ) { - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void**) &pCurrentReq->request.Beacon.reqIes.pElementIds, - ( sizeof( tANI_U8) * - pBeaconReq->measurement_request.Beacon.RequestedInfo.num_requested_eids ) ) ) + pCurrentReq->request.Beacon.reqIes.pElementIds = vos_mem_malloc(sizeof(tANI_U8) * + pBeaconReq->measurement_request.Beacon.RequestedInfo.num_requested_eids); + if ( NULL == pCurrentReq->request.Beacon.reqIes.pElementIds ) { limLog( pMac, LOGP, - FL( "Unable to PAL allocate memory for request IEs buffer" )); + FL( "Unable to allocate memory for request IEs buffer" )); return eRRM_FAILURE; } #if defined WLAN_VOWIFI_DEBUG PELOGE(limLog( pMac, LOGE, FL(" Allocated memory for pElementIds") );) #endif pCurrentReq->request.Beacon.reqIes.num = pBeaconReq->measurement_request.Beacon.RequestedInfo.num_requested_eids; - palCopyMemory ( pMac->hHdd, pCurrentReq->request.Beacon.reqIes.pElementIds, - pBeaconReq->measurement_request.Beacon.RequestedInfo.requested_eids, - pCurrentReq->request.Beacon.reqIes.num ); + vos_mem_copy(pCurrentReq->request.Beacon.reqIes.pElementIds, + pBeaconReq->measurement_request.Beacon.RequestedInfo.requested_eids, + pCurrentReq->request.Beacon.reqIes.num); } if( pBeaconReq->measurement_request.Beacon.num_APChannelReport ) @@ -607,39 +624,37 @@ rrmProcessBeaconReportReq( tpAniSirGlobal pMac, } //Prepare the request to send to SME. - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, - (void **) &pSmeBcnReportReq, - (sizeof( tSirBeaconReportReqInd ) + num_channels) ) ) + pSmeBcnReportReq = vos_mem_malloc(sizeof( tSirBeaconReportReqInd )); + if ( NULL == pSmeBcnReportReq ) { limLog( pMac, LOGP, - FL( "Unable to PAL allocate memory during Beacon Report Req Ind to SME" )); + FL( "Unable to allocate memory during Beacon Report Req Ind to SME" )); return eRRM_FAILURE; } - palZeroMemory( pMac->hHdd, pSmeBcnReportReq, sizeof( tSirBeaconReportReqInd ) + num_channels ); + vos_mem_set(pSmeBcnReportReq,sizeof( tSirBeaconReportReqInd ),0); #if defined WLAN_VOWIFI_DEBUG PELOGE(limLog( pMac, LOGE, FL(" Allocated memory for pSmeBcnReportReq....will be freed by other module") );) #endif - palCopyMemory( pMac->hHdd, pSmeBcnReportReq->bssId, pSessionEntry->bssId, sizeof(tSirMacAddr) ); + vos_mem_copy(pSmeBcnReportReq->bssId, pSessionEntry->bssId, sizeof(tSirMacAddr)); pSmeBcnReportReq->messageType = eWNI_SME_BEACON_REPORT_REQ_IND; - pSmeBcnReportReq->length = sizeof( tSirBeaconReportReqInd ) + num_channels; + pSmeBcnReportReq->length = sizeof( tSirBeaconReportReqInd ); pSmeBcnReportReq->uDialogToken = pBeaconReq->measurement_token; - //pSmeBcnReportReq->measurementDuration = SYS_TU_TO_MS(pBeaconReq->measurement_request.Beacon.meas_duration); - pSmeBcnReportReq->measurementDuration = SYS_TU_TO_MS(measDuration /*pBeaconReq->measurement_request.Beacon.meas_duration*/); pSmeBcnReportReq->randomizationInterval = SYS_TU_TO_MS (pBeaconReq->measurement_request.Beacon.randomization); - pSmeBcnReportReq->fMeasurementtype = pBeaconReq->measurement_request.Beacon.meas_mode; pSmeBcnReportReq->channelInfo.regulatoryClass = pBeaconReq->measurement_request.Beacon.regClass; pSmeBcnReportReq->channelInfo.channelNum = pBeaconReq->measurement_request.Beacon.channel; - palCopyMemory( pMac->hHdd, pSmeBcnReportReq->macaddrBssid, pBeaconReq->measurement_request.Beacon.BSSID, sizeof(tSirMacAddr) ); + vos_mem_copy(pSmeBcnReportReq->macaddrBssid, pBeaconReq->measurement_request.Beacon.BSSID, + sizeof(tSirMacAddr)); if( pBeaconReq->measurement_request.Beacon.SSID.present ) { pSmeBcnReportReq->ssId.length = pBeaconReq->measurement_request.Beacon.SSID.num_ssid; - palCopyMemory( pMac->hHdd, pSmeBcnReportReq->ssId.ssId, pBeaconReq->measurement_request.Beacon.SSID.ssid, - pSmeBcnReportReq->ssId.length ); + vos_mem_copy(pSmeBcnReportReq->ssId.ssId, + pBeaconReq->measurement_request.Beacon.SSID.ssid, + pSmeBcnReportReq->ssId.length); } pCurrentReq->token = pBeaconReq->measurement_token; @@ -650,11 +665,13 @@ rrmProcessBeaconReportReq( tpAniSirGlobal pMac, tANI_U8 *pChanList = pSmeBcnReportReq->channelList.channelNumber; for( num_APChanReport = 0 ; num_APChanReport < pBeaconReq->measurement_request.Beacon.num_APChannelReport ; num_APChanReport++ ) { - palCopyMemory( pMac->hHdd, pChanList, - pBeaconReq->measurement_request.Beacon.APChannelReport[num_APChanReport].channelList, - pBeaconReq->measurement_request.Beacon.APChannelReport[num_APChanReport].num_channelList ); + vos_mem_copy(pChanList, + pBeaconReq->measurement_request.Beacon.APChannelReport[num_APChanReport].channelList, + pBeaconReq->measurement_request.Beacon.APChannelReport[num_APChanReport].num_channelList); pChanList += pBeaconReq->measurement_request.Beacon.APChannelReport[num_APChanReport].num_channelList; + pSmeBcnReportReq->measurementDuration[num_APChanReport] = SYS_TU_TO_MS(measDuration /*pBeaconReq->measurement_request.Beacon.meas_duration*/); + pSmeBcnReportReq->fMeasurementtype[num_APChanReport] = pBeaconReq->measurement_request.Beacon.meas_mode; } } @@ -732,7 +749,7 @@ rrmFillBeaconIes( tpAniSirGlobal pMac, #if defined WLAN_VOWIFI_DEBUG PELOGE(limLog( pMac, LOGE, "Adding Eid %d, len=%d", *pBcnIes, len );) #endif - palCopyMemory( pMac->hHdd, pIes, pBcnIes, len ); + vos_mem_copy(pIes, pBcnIes, len); pIes += len; *pNumIes += len; count++; @@ -787,6 +804,9 @@ rrmProcessBeaconReportXmit( tpAniSirGlobal pMac, return eSIR_FAILURE; } + pBcnReport->numBssDesc = (pBcnReport->numBssDesc == RRM_BCN_RPT_NO_BSS_INFO)? + RRM_BCN_RPT_MIN_RPT : pBcnReport->numBssDesc; + if (NULL == pCurrentReq) { PELOGE(limLog( pMac, LOGE, @@ -909,8 +929,12 @@ rrmProcessBeaconReportXmit( tpAniSirGlobal pMac, #if defined WLAN_VOWIFI_DEBUG PELOGE(limLog( pMac, LOGE, "Sending Action frame ");) #endif - limSendRadioMeasureReportActionFrame( pMac, pCurrentReq->dialog_token, bssDescCnt, - pReport, pBcnReport->bssId, pSessionEntry ); + limSendRadioMeasureReportActionFrame( pMac, + pCurrentReq->dialog_token, + bssDescCnt, + pReport, + pBcnReport->bssId, + pSessionEntry ); if( pBcnReport->fMeasureDone ) @@ -931,15 +955,14 @@ void rrmProcessBeaconRequestFailure(tpAniSirGlobal pMac, tpPESession pSessionEnt tpSirMacRadioMeasureReport pReport = NULL; tpRRMReq pCurrentReq = pMac->rrm.rrmPEContext.pCurrentReq; - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, - (void **) &pReport, - sizeof( tSirMacRadioMeasureReport ) ) ) + pReport = vos_mem_malloc(sizeof( tSirMacRadioMeasureReport )); + if ( NULL == pReport ) { limLog( pMac, LOGP, - FL( "Unable to PAL allocate memory during RRM Req processing" )); + FL( "Unable to allocate memory during RRM Req processing" )); return; } - palZeroMemory( pMac->hHdd, pReport, sizeof(tSirMacRadioMeasureReport) ); + vos_mem_set(pReport, sizeof(tSirMacRadioMeasureReport), 0); pReport->token = pCurrentReq->token; pReport->type = SIR_MAC_RRM_BEACON_TYPE; @@ -953,14 +976,14 @@ void rrmProcessBeaconRequestFailure(tpAniSirGlobal pMac, tpPESession pSessionEnt break; default: PELOGE(limLog( pMac, LOGE, FL(" Beacon request processing failed no report sent with status %d "), status);); - palFreeMemory( pMac->hHdd, pReport ); + vos_mem_free(pReport); return; } limSendRadioMeasureReportActionFrame( pMac, pCurrentReq->dialog_token, 1, pReport, peer, pSessionEntry ); - palFreeMemory( pMac->hHdd, pReport ); + vos_mem_free(pReport); #if defined WLAN_VOWIFI_DEBUG PELOGE(limLog( pMac, LOGE, FL(" Free memory for pReport") );) #endif @@ -1003,15 +1026,14 @@ rrmProcessRadioMeasurementRequest( tpAniSirGlobal pMac, { //No measurement requests.... // - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, - (void **) &pReport, - sizeof( tSirMacRadioMeasureReport ) ) ) + pReport = vos_mem_malloc(sizeof( tSirMacRadioMeasureReport )); + if ( NULL == pReport ) { limLog( pMac, LOGP, - FL( "Unable to PAL allocate memory during RRM Req processing" )); + FL( "Unable to allocate memory during RRM Req processing" )); return eSIR_MEM_ALLOC_FAILED; } - palZeroMemory( pMac->hHdd, pReport, sizeof(tSirMacRadioMeasureReport) ); + vos_mem_set(pReport, sizeof(tSirMacRadioMeasureReport),0); #if defined WLAN_VOWIFI_DEBUG PELOGE(limLog( pMac, LOGE, FL(" Allocated memory for pReport") );) #endif @@ -1019,7 +1041,7 @@ rrmProcessRadioMeasurementRequest( tpAniSirGlobal pMac, num_report = 1; limSendRadioMeasureReportActionFrame( pMac, pRRMReq->DialogToken.token, num_report, pReport, peer, pSessionEntry ); - palFreeMemory( pMac->hHdd, pReport ); + vos_mem_free(pReport); PELOGE(limLog( pMac, LOGE, "No requestIes in the measurement request" );) return eSIR_FAILURE; } @@ -1028,15 +1050,14 @@ rrmProcessRadioMeasurementRequest( tpAniSirGlobal pMac, if( pRRMReq->NumOfRepetitions.repetitions > 0 ) { //Send a report with incapable bit set. Not supporting repetitions. - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, - (void **) &pReport, - sizeof( tSirMacRadioMeasureReport ) ) ) + pReport = vos_mem_malloc(sizeof( tSirMacRadioMeasureReport )); + if ( NULL == pReport ) { limLog( pMac, LOGP, - FL( "Unable to PAL allocate memory during RRM Req processing" )); + FL( "Unable to allocate memory during RRM Req processing" )); return eSIR_MEM_ALLOC_FAILED; } - palZeroMemory( pMac->hHdd, pReport, sizeof(tSirMacRadioMeasureReport) ); + vos_mem_set(pReport, sizeof(tSirMacRadioMeasureReport), 0); #if defined WLAN_VOWIFI_DEBUG PELOGE(limLog( pMac, LOGE, FL(" Allocated memory for pReport") );) #endif @@ -1057,15 +1078,18 @@ rrmProcessRadioMeasurementRequest( tpAniSirGlobal pMac, { if ( pReport == NULL ) //Allocate memory to send reports for any subsequent requests. { - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, - (void **) &pReport, - sizeof( tSirMacRadioMeasureReport ) * (pRRMReq->num_MeasurementRequest - i) ) ) + pReport = vos_mem_malloc(sizeof( tSirMacRadioMeasureReport ) + * (pRRMReq->num_MeasurementRequest - i)); + if ( NULL == pReport ) { limLog( pMac, LOGP, - FL( "Unable to PAL allocate memory during RRM Req processing" )); + FL( "Unable to allocate memory during RRM Req processing" )); return eSIR_MEM_ALLOC_FAILED; } - palZeroMemory( pMac->hHdd, pReport, sizeof( tSirMacRadioMeasureReport ) * (pRRMReq->num_MeasurementRequest - i) ); + vos_mem_set(pReport, + sizeof( tSirMacRadioMeasureReport ) + * (pRRMReq->num_MeasurementRequest - i), + 0); #if defined WLAN_VOWIFI_DEBUG limLog( pMac, LOGE, FL(" Allocated memory for pReport") ); #endif @@ -1079,19 +1103,18 @@ rrmProcessRadioMeasurementRequest( tpAniSirGlobal pMac, } else { - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, - (void **) &pCurrentReq, - sizeof( *pCurrentReq ) ) ) + pCurrentReq = vos_mem_malloc(sizeof( *pCurrentReq )); + if ( NULL == pCurrentReq ) { limLog( pMac, LOGP, - FL( "Unable to PAL allocate memory during RRM Req processing" )); - palFreeMemory( pMac->hHdd, pReport ); + FL( "Unable to allocate memory during RRM Req processing" )); + vos_mem_free(pReport); return eSIR_MEM_ALLOC_FAILED; } #if defined WLAN_VOWIFI_DEBUG PELOGE(limLog( pMac, LOGE, FL(" Allocated memory for pCurrentReq") );) #endif - palZeroMemory( pMac->hHdd, pCurrentReq, sizeof( *pCurrentReq ) ); + vos_mem_set(pCurrentReq, sizeof( *pCurrentReq ), 0); pCurrentReq->dialog_token = pRRMReq->DialogToken.token; pCurrentReq->token = pRRMReq->MeasurementRequest[i].measurement_token; pMac->rrm.rrmPEContext.pCurrentReq = pCurrentReq; @@ -1107,15 +1130,18 @@ rrmProcessRadioMeasurementRequest( tpAniSirGlobal pMac, //Send a report with incapabale bit set. if ( pReport == NULL ) //Allocate memory to send reports for any subsequent requests. { - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, - (void **) &pReport, - sizeof( tSirMacRadioMeasureReport ) * (pRRMReq->num_MeasurementRequest - i) ) ) + pReport = vos_mem_malloc(sizeof( tSirMacRadioMeasureReport ) + * (pRRMReq->num_MeasurementRequest - i)); + if ( NULL == pReport ) { limLog( pMac, LOGP, - FL( "Unable to PAL allocate memory during RRM Req processing" )); + FL( "Unable to allocate memory during RRM Req processing" )); return eSIR_MEM_ALLOC_FAILED; } - palZeroMemory( pMac->hHdd, pReport, sizeof( tSirMacRadioMeasureReport ) * (pRRMReq->num_MeasurementRequest - i) ); + vos_mem_set(pReport, + sizeof( tSirMacRadioMeasureReport ) + * (pRRMReq->num_MeasurementRequest - i), + 0); #if defined WLAN_VOWIFI_DEBUG PELOGE(limLog( pMac, LOGE, FL(" Allocated memory for pReport") );) #endif @@ -1135,7 +1161,7 @@ end: limSendRadioMeasureReportActionFrame( pMac, pRRMReq->DialogToken.token, num_report, pReport, peer, pSessionEntry ); - palFreeMemory( pMac->hHdd, pReport ); + vos_mem_free(pReport); #if defined WLAN_VOWIFI_DEBUG PELOGE(limLog( pMac, LOGE, FL(" Free memory for pReport") );) #endif @@ -1291,7 +1317,7 @@ rrmInitialize(tpAniSirGlobal pMac) pMac->rrm.rrmPEContext.rrmEnable = 0; - palZeroMemory( pMac->hHdd, pRRMCaps, sizeof(tRRMCaps) ); + vos_mem_set(pRRMCaps, sizeof(tRRMCaps), 0); pRRMCaps->LinkMeasurement = 1; pRRMCaps->NeighborRpt = 1; pRRMCaps->BeaconPassive = 1; @@ -1332,13 +1358,13 @@ rrmCleanup(tpAniSirGlobal pMac) { if( pMac->rrm.rrmPEContext.pCurrentReq->request.Beacon.reqIes.pElementIds ) { - palFreeMemory( pMac->hHdd, pMac->rrm.rrmPEContext.pCurrentReq->request.Beacon.reqIes.pElementIds ); + vos_mem_free(pMac->rrm.rrmPEContext.pCurrentReq->request.Beacon.reqIes.pElementIds); #if defined WLAN_VOWIFI_DEBUG PELOGE(limLog( pMac, LOGE, FL(" Free memory for pElementIds") );) #endif } - palFreeMemory( pMac->hHdd, pMac->rrm.rrmPEContext.pCurrentReq ); + vos_mem_free(pMac->rrm.rrmPEContext.pCurrentReq); #if defined WLAN_VOWIFI_DEBUG PELOGE(limLog( pMac, LOGE, FL(" Free memory for pCurrentReq") );) #endif diff --git a/CORE/MAC/src/pe/sch/schApi.c b/CORE/MAC/src/pe/sch/schApi.c index 9a7f90ed7370..3917054e89ed 100644 --- a/CORE/MAC/src/pe/sch/schApi.c +++ b/CORE/MAC/src/pe/sch/schApi.c @@ -26,7 +26,6 @@ */ /* - * * Airgo Networks, Inc proprietary. All rights reserved. * This file schApi.cc contains functions related to the API exposed * by scheduler module @@ -278,18 +277,17 @@ schSendStartScanRsp(tpAniSirGlobal pMac) */ tSirRetStatus schSendBeaconReq( tpAniSirGlobal pMac, tANI_U8 *beaconPayload, tANI_U16 size, tpPESession psessionEntry) { - tSirMsgQ msgQ; - tpSendbeaconParams beaconParams = NULL; - tSirRetStatus retCode; + tSirMsgQ msgQ; + tpSendbeaconParams beaconParams = NULL; + tSirRetStatus retCode; schLog( pMac, LOG2, - FL( "Indicating HAL to copy the beacon template [%d bytes] to memory" ), - size ); + FL( "Indicating HAL to copy the beacon template [%d bytes] to memory" ), + size ); - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, - (void **) &beaconParams, - sizeof( tSendbeaconParams ))) - return eSIR_FAILURE; + beaconParams = vos_mem_malloc(sizeof(tSendbeaconParams)); + if ( NULL == beaconParams ) + return eSIR_FAILURE; msgQ.type = WDA_SEND_BEACON_REQ; @@ -299,7 +297,7 @@ tSirRetStatus schSendBeaconReq( tpAniSirGlobal pMac, tANI_U8 *beaconPayload, tAN // Fill in tSendbeaconParams members /* Knock off all pMac global addresses */ // limGetBssid( pMac, beaconParams->bssId); - palCopyMemory(pMac, beaconParams->bssId, psessionEntry->bssId, sizeof(psessionEntry->bssId)); + vos_mem_copy(beaconParams->bssId, psessionEntry->bssId, sizeof(psessionEntry->bssId)); beaconParams->timIeOffset = pMac->sch.schObject.gSchBeaconOffsetBegin; /* p2pIeOffset should be atleast greater than timIeOffset */ @@ -327,15 +325,16 @@ tSirRetStatus schSendBeaconReq( tpAniSirGlobal pMac, tANI_U8 *beaconPayload, tAN // free previous copy of the beacon if (psessionEntry->beacon ) { - palFreeMemory(pMac->hHdd, psessionEntry->beacon); + vos_mem_free(psessionEntry->beacon); } psessionEntry->bcnLen = 0; psessionEntry->beacon = NULL; - if ( eHAL_STATUS_SUCCESS == palAllocateMemory( pMac->hHdd,(void **) &psessionEntry->beacon, size)) + psessionEntry->beacon = vos_mem_malloc(size); + if ( psessionEntry->beacon != NULL ) { - palCopyMemory(pMac->hHdd, psessionEntry->beacon, beaconPayload, size); + vos_mem_copy(psessionEntry->beacon, beaconPayload, size); psessionEntry->bcnLen = size; } @@ -367,7 +366,7 @@ tSirRetStatus schSendBeaconReq( tpAniSirGlobal pMac, tANI_U8 *beaconPayload, tAN } tANI_U32 limSendProbeRspTemplateToHal(tpAniSirGlobal pMac,tpPESession psessionEntry - ,tANI_U32* IeBitmap) + ,tANI_U32* IeBitmap) { tSirMsgQ msgQ; tANI_U8 *pFrame2Hal = pMac->sch.schObject.gSchProbeRspTemplate; @@ -408,8 +407,8 @@ tANI_U32 limSendProbeRspTemplateToHal(tpAniSirGlobal pMac,tpPESession psessionEn if (addnIEPresent) { //Probe rsp IE available - if ( (palAllocateMemory(pMac->hHdd, (void**)&addIE, - WNI_CFG_PROBE_RSP_ADDNIE_DATA1_LEN )) != eHAL_STATUS_SUCCESS) + addIE = vos_mem_malloc(WNI_CFG_PROBE_RSP_ADDNIE_DATA1_LEN); + if ( NULL == addIE ) { schLog(pMac, LOGE, FL("Unable to get WNI_CFG_PROBE_RSP_ADDNIE_DATA1 length")); @@ -422,7 +421,7 @@ tANI_U32 limSendProbeRspTemplateToHal(tpAniSirGlobal pMac,tpPESession psessionEn schLog(pMac, LOGE, FL("Unable to get WNI_CFG_PROBE_RSP_ADDNIE_DATA1 length")); - palFreeMemory(pMac->hHdd, addIE); + vos_mem_free(addIE); return retCode; } @@ -436,7 +435,7 @@ tANI_U32 limSendProbeRspTemplateToHal(tpAniSirGlobal pMac,tpPESession psessionEn schLog(pMac, LOGE, FL("Unable to get WNI_CFG_PROBE_RSP_ADDNIE_DATA1 String")); - palFreeMemory(pMac->hHdd, addIE); + vos_mem_free(addIE); return retCode; } } @@ -451,7 +450,7 @@ tANI_U32 limSendProbeRspTemplateToHal(tpAniSirGlobal pMac,tpPESession psessionEn } // Paranoia: - palZeroMemory( pMac->hHdd, pFrame2Hal, nBytes ); + vos_mem_set(pFrame2Hal, nBytes, 0); // Next, we fill out the buffer descriptor: nSirStatus = limPopulateMacHeader( pMac, pFrame2Hal, SIR_MAC_MGMT_FRAME, @@ -463,7 +462,7 @@ tANI_U32 limSendProbeRspTemplateToHal(tpAniSirGlobal pMac,tpPESession psessionEn "tor for a Probe Response (%d)."), nSirStatus ); - palFreeMemory(pMac->hHdd, addIE); + vos_mem_free(addIE); return retCode; } @@ -480,7 +479,7 @@ tANI_U32 limSendProbeRspTemplateToHal(tpAniSirGlobal pMac,tpPESession psessionEn schLog( pMac, LOGE, FL("Failed to pack a Probe Response (0x%08x)."), nStatus ); - palFreeMemory(pMac->hHdd, addIE); + vos_mem_free(addIE); return retCode; // allocated! } else if ( DOT11F_WARNED( nStatus ) ) @@ -491,23 +490,15 @@ tANI_U32 limSendProbeRspTemplateToHal(tpAniSirGlobal pMac,tpPESession psessionEn if (addnIEPresent) { - if (palCopyMemory ( pMac->hHdd, &pFrame2Hal[nBytes - addnIELen], - &addIE[0], addnIELen) != eHAL_STATUS_SUCCESS) - { - schLog( pMac, LOGE, - FL("Additional Probe Rsp IE request failed while Appending ")); - - palFreeMemory(pMac->hHdd, addIE); - return retCode; - } + vos_mem_copy ( &pFrame2Hal[nBytes - addnIELen], + &addIE[0], addnIELen); } /* free the allocated Memory */ - palFreeMemory(pMac->hHdd, addIE); + vos_mem_free(addIE); - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, - (void **) &pprobeRespParams, - sizeof( tSendProbeRespParams ))) + pprobeRespParams = vos_mem_malloc(sizeof( tSendProbeRespParams )); + if ( NULL == pprobeRespParams ) { schLog( pMac, LOGE, FL("limSendProbeRspTemplateToHal: HAL probe response params malloc failed for bytes %d"), nBytes ); } @@ -519,11 +510,10 @@ tANI_U32 limSendProbeRspTemplateToHal(tpAniSirGlobal pMac,tpPESession psessionEn nBytes);) */ - sirCopyMacAddr( pprobeRespParams->bssId , psessionEntry->bssId); + sirCopyMacAddr( pprobeRespParams->bssId, psessionEntry->bssId); pprobeRespParams->pProbeRespTemplate = pFrame2Hal; pprobeRespParams->probeRespTemplateLen = nBytes; - palCopyMemory(pMac,pprobeRespParams->ucProxyProbeReqValidIEBmap,IeBitmap, - (sizeof(tANI_U32) * 8)); + vos_mem_copy(pprobeRespParams->ucProxyProbeReqValidIEBmap,IeBitmap,(sizeof(tANI_U32) * 8)); msgQ.type = WDA_UPDATE_PROBE_RSP_TEMPLATE_IND; msgQ.reserved = 0; msgQ.bodyptr = pprobeRespParams; @@ -532,8 +522,8 @@ tANI_U32 limSendProbeRspTemplateToHal(tpAniSirGlobal pMac,tpPESession psessionEn if( eSIR_SUCCESS != (retCode = wdaPostCtrlMsg( pMac, &msgQ ))) { /* free the allocated Memory */ - schLog( pMac,LOGE, FL("limSendProbeRspTemplateToHal: FAIL bytes %d retcode[%X]"), nBytes , retCode ); - palFreeMemory(pMac->hHdd,pprobeRespParams); + schLog( pMac,LOGE, FL("limSendProbeRspTemplateToHal: FAIL bytes %d retcode[%X]"), nBytes, retCode ); + vos_mem_free(pprobeRespParams); } else { diff --git a/CORE/MAC/src/pe/sch/schBeaconGen.c b/CORE/MAC/src/pe/sch/schBeaconGen.c index ade5d42f80e1..fa1197425887 100644 --- a/CORE/MAC/src/pe/sch/schBeaconGen.c +++ b/CORE/MAC/src/pe/sch/schBeaconGen.c @@ -80,7 +80,7 @@ tSirRetStatus schGetP2pIeOffset(tANI_U8 *pExtraIe, tANI_U32 extraIeLen, tANI_U16 { if(*pExtraIe == 0xDD) { - if(palEqualMemory(NULL, (void *)(pExtraIe+2), &P2pOui, sizeof(P2pOui))) + if ( vos_mem_compare ( (void *)(pExtraIe+2), &P2pOui, sizeof(P2pOui) ) ) { status = eSIR_SUCCESS; break; @@ -105,7 +105,7 @@ tSirRetStatus schAppendAddnIE(tpAniSirGlobal pMac, tpPESession psessionEntry, if((status = wlan_cfgGetInt(pMac, WNI_CFG_PROBE_RSP_BCN_ADDNIE_FLAG, &present)) != eSIR_SUCCESS) { - limLog(pMac, LOGP, FL("Unable to get WNI_CFG_PROBE_RSP_BCN_ADDNIE_FLAG")); + schLog(pMac, LOGP, FL("Unable to get WNI_CFG_PROBE_RSP_BCN_ADDNIE_FLAG")); return status; } @@ -114,7 +114,7 @@ tSirRetStatus schAppendAddnIE(tpAniSirGlobal pMac, tpPESession psessionEntry, if((status = wlan_cfgGetStrLen(pMac, WNI_CFG_PROBE_RSP_BCN_ADDNIE_DATA, &len)) != eSIR_SUCCESS) { - limLog(pMac, LOGP, + schLog(pMac, LOGP, FL("Unable to get WNI_CFG_PROBE_RSP_BCN_ADDNIE_DATA length")); return status; } @@ -144,7 +144,7 @@ tSirRetStatus schAppendAddnIE(tpAniSirGlobal pMac, tpPESession psessionEntry, } else { - limLog(pMac, LOGE, + schLog(pMac, LOGE, FL("Not able to insert NoA because of length constraint")); } } @@ -192,27 +192,27 @@ tSirRetStatus schSetFixedBeaconFields(tpAniSirGlobal pMac,tpPESession psessionEn tANI_U16 p2pIeOffset = 0; tSirRetStatus status = eSIR_SUCCESS; - status = palAllocateMemory(pMac->hHdd, (void **)&pBcn1, sizeof(tDot11fBeacon1)); - if(status != eSIR_SUCCESS) + pBcn1 = vos_mem_malloc(sizeof(tDot11fBeacon1)); + if ( NULL == pBcn1 ) { schLog(pMac, LOGE, FL("Failed to allocate memory") ); return eSIR_FAILURE; } - status = palAllocateMemory(pMac->hHdd, (void **)&pBcn2, sizeof(tDot11fBeacon2)); - if(status != eSIR_SUCCESS) + pBcn2 = vos_mem_malloc(sizeof(tDot11fBeacon2)); + if ( NULL == pBcn2 ) { schLog(pMac, LOGE, FL("Failed to allocate memory") ); - palFreeMemory(pMac->hHdd, pBcn1); + vos_mem_free(pBcn1); return eSIR_FAILURE; } - status = palAllocateMemory(pMac->hHdd, (void **)&pWscProbeRes, sizeof(tDot11fIEWscProbeRes)); - if(status != eSIR_SUCCESS) + pWscProbeRes = vos_mem_malloc(sizeof(tDot11fIEWscProbeRes)); + if ( NULL == pWscProbeRes ) { schLog(pMac, LOGE, FL("Failed to allocate memory") ); - palFreeMemory(pMac->hHdd, pBcn1); - palFreeMemory(pMac->hHdd, pBcn2); + vos_mem_free(pBcn1); + vos_mem_free(pBcn2); return eSIR_FAILURE; } @@ -225,7 +225,7 @@ tSirRetStatus schSetFixedBeaconFields(tpAniSirGlobal pMac,tpPESession psessionEn // set the TFP headers // set the mac header - palZeroMemory( pMac->hHdd, ( tANI_U8*) &pBeacon->macHdr, sizeof( tSirMacMgmtHdr ) ); + vos_mem_set(( tANI_U8*) &pBeacon->macHdr, sizeof( tSirMacMgmtHdr ),0); mac = (tpSirMacMgmtHdr) &pBeacon->macHdr; mac->fc.type = SIR_MAC_MGMT_FRAME; mac->fc.subType = SIR_MAC_MGMT_BEACON; @@ -237,8 +237,8 @@ tSirRetStatus schSetFixedBeaconFields(tpAniSirGlobal pMac,tpPESession psessionEn /* limGetMyMacAddr(pMac, mac->sa); */ /* limGetBssid(pMac, mac->bssId); */ - palCopyMemory(pMac->hHdd, mac->sa, psessionEntry->selfMacAddr, sizeof(psessionEntry->selfMacAddr)); - palCopyMemory(pMac->hHdd, mac->bssId, psessionEntry->bssId, sizeof (psessionEntry->bssId)); + vos_mem_copy(mac->sa, psessionEntry->selfMacAddr, sizeof(psessionEntry->selfMacAddr)); + vos_mem_copy(mac->bssId, psessionEntry->bssId, sizeof (psessionEntry->bssId)); mac->fc.fromDS = 0; mac->fc.toDS = 0; @@ -247,7 +247,7 @@ tSirRetStatus schSetFixedBeaconFields(tpAniSirGlobal pMac,tpPESession psessionEn * Now set the beacon body */ - palZeroMemory( pMac->hHdd, ( tANI_U8*) pBcn1, sizeof( tDot11fBeacon1 ) ); + vos_mem_set(( tANI_U8*) pBcn1, sizeof( tDot11fBeacon1 ), 0); // Skip over the timestamp (it'll be updated later). @@ -277,10 +277,11 @@ tSirRetStatus schSetFixedBeaconFields(tpAniSirGlobal pMac,tpPESession psessionEn && (psessionEntry->proxyProbeRspEn)) { /* Initialize the default IE bitmap to zero */ - palZeroMemory( pMac->hHdd, ( tANI_U8* )&(psessionEntry->DefProbeRspIeBitmap), (sizeof( tANI_U32 ) * 8)); + vos_mem_set(( tANI_U8* )&(psessionEntry->DefProbeRspIeBitmap), (sizeof( tANI_U32 ) * 8), 0); /* Initialize the default IE bitmap to zero */ - palZeroMemory( pMac->hHdd, ( tANI_U8* )&(psessionEntry->probeRespFrame), sizeof(psessionEntry->probeRespFrame)); + vos_mem_set(( tANI_U8* )&(psessionEntry->probeRespFrame), + sizeof(psessionEntry->probeRespFrame), 0); /* Can be efficiently updated whenever new IE added in Probe response in future */ limUpdateProbeRspTemplateIeBitmapBeacon1(pMac,pBcn1,&psessionEntry->DefProbeRspIeBitmap[0], @@ -294,9 +295,9 @@ tSirRetStatus schSetFixedBeaconFields(tpAniSirGlobal pMac,tpPESession psessionEn { schLog( pMac, LOGE, FL("Failed to packed a tDot11fBeacon1 (0x%0" "8x.)."), nStatus ); - palFreeMemory(pMac->hHdd, pBcn1); - palFreeMemory(pMac->hHdd, pBcn2); - palFreeMemory(pMac->hHdd, pWscProbeRes); + vos_mem_free(pBcn1); + vos_mem_free(pBcn2); + vos_mem_free(pWscProbeRes); return eSIR_FAILURE; } else if ( DOT11F_WARNED( nStatus ) ) @@ -305,7 +306,7 @@ tSirRetStatus schSetFixedBeaconFields(tpAniSirGlobal pMac,tpPESession psessionEn "t11fBeacon1 (0x%08x.)."), nStatus ); } /*changed to correct beacon corruption */ - palZeroMemory( pMac->hHdd, ( tANI_U8*) pBcn2, sizeof( tDot11fBeacon2 ) ); + vos_mem_set(( tANI_U8*) pBcn2, sizeof( tDot11fBeacon2 ), 0); pMac->sch.schObject.gSchBeaconOffsetBegin = offset + ( tANI_U16 )nBytes; schLog( pMac, LOG1, FL("Initialized beacon begin, offset %d"), offset ); @@ -338,7 +339,7 @@ tSirRetStatus schSetFixedBeaconFields(tpAniSirGlobal pMac,tpPESession psessionEn #ifdef WLAN_FEATURE_11AC if(psessionEntry->vhtCapability) { - limLog( pMac, LOGW, FL("Populate VHT IEs in Beacon")); + schLog( pMac, LOGW, FL("Populate VHT IEs in Beacon")); PopulateDot11fVHTCaps( pMac, psessionEntry, &pBcn2->VHTCaps ); PopulateDot11fVHTOperation( pMac, &pBcn2->VHTOperation); // we do not support multi users yet @@ -356,8 +357,8 @@ tSirRetStatus schSetFixedBeaconFields(tpAniSirGlobal pMac,tpPESession psessionEn { PopulateDot11fWPA( pMac, &psessionEntry->pLimStartBssReq->rsnIE, &pBcn2->WPA ); - PopulateDot11fRSN( pMac, &psessionEntry->pLimStartBssReq->rsnIE, - &pBcn2->RSN ); + PopulateDot11fRSNOpaque( pMac, &psessionEntry->pLimStartBssReq->rsnIE, + &pBcn2->RSNOpaque ); } if(psessionEntry->limWmeEnabled) @@ -374,7 +375,7 @@ tSirRetStatus schSetFixedBeaconFields(tpAniSirGlobal pMac,tpPESession psessionEn else { if (wlan_cfgGetInt(pMac, (tANI_U16) WNI_CFG_WPS_ENABLE, &tmp) != eSIR_SUCCESS) - limLog(pMac, LOGP,"Failed to cfg get id %d", WNI_CFG_WPS_ENABLE ); + schLog(pMac, LOGP,"Failed to cfg get id %d", WNI_CFG_WPS_ENABLE ); wpsApEnable = tmp & WNI_CFG_WPS_ENABLE_AP; @@ -418,10 +419,9 @@ tSirRetStatus schSetFixedBeaconFields(tpAniSirGlobal pMac,tpPESession psessionEn if(pWscProbeRes->present) { SetProbeRspIeBitmap(&psessionEntry->DefProbeRspIeBitmap[0],SIR_MAC_WPA_EID); - palCopyMemory(pMac->hHdd, - (void *)&psessionEntry->probeRespFrame.WscProbeRes, - (void *)pWscProbeRes, - sizeof(tDot11fIEWscProbeRes)); + vos_mem_copy((void *)&psessionEntry->probeRespFrame.WscProbeRes, + (void *)pWscProbeRes, + sizeof(tDot11fIEWscProbeRes)); } } @@ -434,9 +434,9 @@ tSirRetStatus schSetFixedBeaconFields(tpAniSirGlobal pMac,tpPESession psessionEn { schLog( pMac, LOGE, FL("Failed to packed a tDot11fBeacon2 (0x%0" "8x.)."), nStatus ); - palFreeMemory(pMac->hHdd, pBcn1); - palFreeMemory(pMac->hHdd, pBcn2); - palFreeMemory(pMac->hHdd, pWscProbeRes); + vos_mem_free(pBcn1); + vos_mem_free(pBcn2); + vos_mem_free(pWscProbeRes); return eSIR_FAILURE; } else if ( DOT11F_WARNED( nStatus ) ) @@ -476,9 +476,9 @@ tSirRetStatus schSetFixedBeaconFields(tpAniSirGlobal pMac,tpPESession psessionEn pMac->sch.schObject.gSchBeaconOffsetEnd ); pMac->sch.schObject.fBeaconChanged = 1; - palFreeMemory(pMac->hHdd, pBcn1); - palFreeMemory(pMac->hHdd, pBcn2); - palFreeMemory(pMac->hHdd, pWscProbeRes); + vos_mem_free(pBcn1); + vos_mem_free(pBcn2); + vos_mem_free(pWscProbeRes); return eSIR_SUCCESS; } @@ -488,33 +488,30 @@ void limUpdateProbeRspTemplateIeBitmapBeacon1(tpAniSirGlobal pMac, tDot11fProbeResponse* prb_rsp) { prb_rsp->BeaconInterval = beacon1->BeaconInterval; - palCopyMemory(pMac->hHdd,(void *)&prb_rsp->Capabilities, - (void *)&beacon1->Capabilities, - sizeof(beacon1->Capabilities)); + vos_mem_copy((void *)&prb_rsp->Capabilities, (void *)&beacon1->Capabilities, + sizeof(beacon1->Capabilities)); /* SSID */ if(beacon1->SSID.present) { SetProbeRspIeBitmap(DefProbeRspIeBitmap,SIR_MAC_SSID_EID); - /* populating it , because probe response has to go with SSID even in hidden case */ + /* populating it, because probe response has to go with SSID even in hidden case */ PopulateDot11fSSID2( pMac, &prb_rsp->SSID ); } /* supported rates */ if(beacon1->SuppRates.present) { SetProbeRspIeBitmap(DefProbeRspIeBitmap,SIR_MAC_RATESET_EID); - palCopyMemory(pMac->hHdd,(void *)&prb_rsp->SuppRates, - (void *)&beacon1->SuppRates, - sizeof(beacon1->SuppRates)); + vos_mem_copy((void *)&prb_rsp->SuppRates, (void *)&beacon1->SuppRates, + sizeof(beacon1->SuppRates)); } /* DS Parameter set */ if(beacon1->DSParams.present) { SetProbeRspIeBitmap(DefProbeRspIeBitmap,SIR_MAC_DS_PARAM_SET_EID); - palCopyMemory(pMac->hHdd,(void *)&prb_rsp->DSParams, - (void *)&beacon1->DSParams, - sizeof(beacon1->DSParams)); + vos_mem_copy((void *)&prb_rsp->DSParams, (void *)&beacon1->DSParams, + sizeof(beacon1->DSParams)); } @@ -531,45 +528,40 @@ void limUpdateProbeRspTemplateIeBitmapBeacon2(tpAniSirGlobal pMac, if(beacon2->Country.present) { SetProbeRspIeBitmap(DefProbeRspIeBitmap,SIR_MAC_COUNTRY_EID); - palCopyMemory(pMac->hHdd,(void *)&prb_rsp->Country, - (void *)&beacon2->Country, - sizeof(beacon2->Country)); + vos_mem_copy((void *)&prb_rsp->Country, (void *)&beacon2->Country, + sizeof(beacon2->Country)); } /* Power constraint */ if(beacon2->PowerConstraints.present) { SetProbeRspIeBitmap(DefProbeRspIeBitmap,SIR_MAC_PWR_CONSTRAINT_EID); - palCopyMemory(pMac->hHdd,(void *)&prb_rsp->PowerConstraints, - (void *)&beacon2->PowerConstraints, - sizeof(beacon2->PowerConstraints)); + vos_mem_copy((void *)&prb_rsp->PowerConstraints, (void *)&beacon2->PowerConstraints, + sizeof(beacon2->PowerConstraints)); } /* Channel Switch Annoouncement SIR_MAC_CHNL_SWITCH_ANN_EID */ if(beacon2->ChanSwitchAnn.present) { SetProbeRspIeBitmap(DefProbeRspIeBitmap,SIR_MAC_CHNL_SWITCH_ANN_EID); - palCopyMemory(pMac->hHdd,(void *)&prb_rsp->ChanSwitchAnn, - (void *)&beacon2->ChanSwitchAnn, - sizeof(beacon2->ChanSwitchAnn)); + vos_mem_copy((void *)&prb_rsp->ChanSwitchAnn, (void *)&beacon2->ChanSwitchAnn, + sizeof(beacon2->ChanSwitchAnn)); } /* ERP information */ if(beacon2->ERPInfo.present) { SetProbeRspIeBitmap(DefProbeRspIeBitmap,SIR_MAC_ERP_INFO_EID); - palCopyMemory(pMac->hHdd,(void *)&prb_rsp->ERPInfo, - (void *)&beacon2->ERPInfo, - sizeof(beacon2->ERPInfo)); + vos_mem_copy((void *)&prb_rsp->ERPInfo, (void *)&beacon2->ERPInfo, + sizeof(beacon2->ERPInfo)); } /* Extended supported rates */ if(beacon2->ExtSuppRates.present) { SetProbeRspIeBitmap(DefProbeRspIeBitmap,SIR_MAC_EXTENDED_RATE_EID); - palCopyMemory(pMac->hHdd,(void *)&prb_rsp->ExtSuppRates, - (void *)&beacon2->ExtSuppRates, - sizeof(beacon2->ExtSuppRates)); + vos_mem_copy((void *)&prb_rsp->ExtSuppRates, (void *)&beacon2->ExtSuppRates, + sizeof(beacon2->ExtSuppRates)); } @@ -577,20 +569,17 @@ void limUpdateProbeRspTemplateIeBitmapBeacon2(tpAniSirGlobal pMac, if(beacon2->WPA.present) { SetProbeRspIeBitmap(DefProbeRspIeBitmap,SIR_MAC_WPA_EID); - palCopyMemory(pMac->hHdd,(void *)&prb_rsp->WPA, - (void *)&beacon2->WPA, - sizeof(beacon2->WPA)); + vos_mem_copy((void *)&prb_rsp->WPA, (void *)&beacon2->WPA, + sizeof(beacon2->WPA)); } /* RSN */ - if(beacon2->RSN.present) + if(beacon2->RSNOpaque.present) { SetProbeRspIeBitmap(DefProbeRspIeBitmap,SIR_MAC_RSN_EID); - palCopyMemory(pMac->hHdd,(void *)&prb_rsp->RSN, - (void *)&beacon2->RSN, - sizeof(beacon2->RSN)); - + vos_mem_copy((void *)&prb_rsp->RSNOpaque, (void *)&beacon2->RSNOpaque, + sizeof(beacon2->RSNOpaque)); } /* // BSS load @@ -603,9 +592,8 @@ void limUpdateProbeRspTemplateIeBitmapBeacon2(tpAniSirGlobal pMac, if(beacon2->EDCAParamSet.present) { SetProbeRspIeBitmap(DefProbeRspIeBitmap,SIR_MAC_EDCA_PARAM_SET_EID); - palCopyMemory(pMac->hHdd,(void *)&prb_rsp->EDCAParamSet, - (void *)&beacon2->EDCAParamSet, - sizeof(beacon2->EDCAParamSet)); + vos_mem_copy((void *)&prb_rsp->EDCAParamSet, (void *)&beacon2->EDCAParamSet, + sizeof(beacon2->EDCAParamSet)); } /* Vendor specific - currently no vendor specific IEs added */ @@ -614,40 +602,35 @@ void limUpdateProbeRspTemplateIeBitmapBeacon2(tpAniSirGlobal pMac, if(beacon2->HTCaps.present) { SetProbeRspIeBitmap(DefProbeRspIeBitmap,SIR_MAC_HT_CAPABILITIES_EID); - palCopyMemory(pMac->hHdd,(void *)&prb_rsp->HTCaps, - (void *)&beacon2->HTCaps, - sizeof(beacon2->HTCaps)); + vos_mem_copy((void *)&prb_rsp->HTCaps, (void *)&beacon2->HTCaps, + sizeof(beacon2->HTCaps)); } // HT Info IE if(beacon2->HTInfo.present) { SetProbeRspIeBitmap(DefProbeRspIeBitmap,SIR_MAC_HT_INFO_EID); - palCopyMemory(pMac->hHdd,(void *)&prb_rsp->HTInfo, - (void *)&beacon2->HTInfo, - sizeof(beacon2->HTInfo)); + vos_mem_copy((void *)&prb_rsp->HTInfo, (void *)&beacon2->HTInfo, + sizeof(beacon2->HTInfo)); } #ifdef WLAN_FEATURE_11AC if(beacon2->VHTCaps.present) { SetProbeRspIeBitmap(DefProbeRspIeBitmap,SIR_MAC_VHT_CAPABILITIES_EID); - palCopyMemory(pMac->hHdd,(void *)&prb_rsp->VHTCaps, - (void *)&beacon2->VHTCaps, - sizeof(beacon2->VHTCaps)); + vos_mem_copy((void *)&prb_rsp->VHTCaps, (void *)&beacon2->VHTCaps, + sizeof(beacon2->VHTCaps)); } if(beacon2->VHTOperation.present) { SetProbeRspIeBitmap(DefProbeRspIeBitmap,SIR_MAC_VHT_OPERATION_EID); - palCopyMemory(pMac->hHdd,(void *)&prb_rsp->VHTOperation, - (void *)&beacon2->VHTOperation, - sizeof(beacon2->VHTOperation)); + vos_mem_copy((void *)&prb_rsp->VHTOperation, (void *)&beacon2->VHTOperation, + sizeof(beacon2->VHTOperation)); } if(beacon2->VHTExtBssLoad.present) { SetProbeRspIeBitmap(DefProbeRspIeBitmap,SIR_MAC_VHT_EXT_BSS_LOAD_EID); - palCopyMemory(pMac->hHdd,(void *)&prb_rsp->VHTExtBssLoad, - (void *)&beacon2->VHTExtBssLoad, - sizeof(beacon2->VHTExtBssLoad)); + vos_mem_copy((void *)&prb_rsp->VHTExtBssLoad, (void *)&beacon2->VHTExtBssLoad, + sizeof(beacon2->VHTExtBssLoad)); } #endif @@ -655,17 +638,15 @@ void limUpdateProbeRspTemplateIeBitmapBeacon2(tpAniSirGlobal pMac, if(beacon2->WMMParams.present) { SetProbeRspIeBitmap(DefProbeRspIeBitmap,SIR_MAC_WPA_EID); - palCopyMemory(pMac->hHdd,(void *)&prb_rsp->WMMParams, - (void *)&beacon2->WMMParams, - sizeof(beacon2->WMMParams)); + vos_mem_copy((void *)&prb_rsp->WMMParams, (void *)&beacon2->WMMParams, + sizeof(beacon2->WMMParams)); } //WMM capability - most of the case won't be present if(beacon2->WMMCaps.present) { SetProbeRspIeBitmap(DefProbeRspIeBitmap,SIR_MAC_WPA_EID); - palCopyMemory(pMac->hHdd,(void *)&prb_rsp->WMMCaps, - (void *)&beacon2->WMMCaps, - sizeof(beacon2->WMMCaps)); + vos_mem_copy((void *)&prb_rsp->WMMCaps, (void *)&beacon2->WMMCaps, + sizeof(beacon2->WMMCaps)); } } @@ -748,7 +729,8 @@ void writeBeaconToMemory(tpAniSirGlobal pMac, tANI_U16 size, tANI_U16 length, tp // size = (size + 3) & (~3); - if( eSIR_SUCCESS != schSendBeaconReq( pMac, pMac->sch.schObject.gSchBeaconFrameBegin, size , psessionEntry)) + if( eSIR_SUCCESS != schSendBeaconReq( pMac, pMac->sch.schObject.gSchBeaconFrameBegin, + size, psessionEntry)) PELOGE(schLog(pMac, LOGE, FL("schSendBeaconReq() returned an error (zsize %d)"), size);) else { @@ -828,6 +810,6 @@ schProcessPreBeaconInd(tpAniSirGlobal pMac, tpSirMsgQ limMsg) } end: - palFreeMemory(pMac->hHdd, (void*)pMsg); + vos_mem_free(pMsg); } diff --git a/CORE/MAC/src/pe/sch/schBeaconProcess.c b/CORE/MAC/src/pe/sch/schBeaconProcess.c index 2c11ec57ea0d..9fb0d83d9bbe 100644 --- a/CORE/MAC/src/pe/sch/schBeaconProcess.c +++ b/CORE/MAC/src/pe/sch/schBeaconProcess.c @@ -339,8 +339,11 @@ static void __schBeaconProcessForSession( tpAniSirGlobal pMac, tpSirMacMgmtHdr pMh = WDA_GET_RX_MAC_HEADER(pRxPacketInfo); tANI_U16 aid; tANI_U8 operMode; + tANI_U8 chWidth = 0; +#endif +#if defined FEATURE_WLAN_CCX || defined FEATURE_WLAN_VOWIFI + tPowerdBm regMax = 0,maxTxPower = 0; #endif - beaconParams.paramChangeBitmap = 0; @@ -356,18 +359,16 @@ static void __schBeaconProcessForSession( tpAniSirGlobal pMac, * -- Infra STA receving beacons from AP * -- BTAMP_STA receving beacons from BTAMP_AP */ - - //Always save the beacon into LIM's cached scan results limCheckAndAddBssDescription(pMac, pBeacon, pRxPacketInfo, eANI_BOOLEAN_FALSE, eANI_BOOLEAN_FALSE); - + /** * This is the Beacon received from the AP we're currently associated with. Check * if there are any changes in AP's capabilities */ if((tANI_U8) pBeacon->channelNumber != psessionEntry->currentOperChannel) { - PELOGE(limLog(pMac, LOGE, FL("Channel Change from %d --> %d - " + PELOGE(schLog(pMac, LOGE, FL("Channel Change from %d --> %d - " "Ignoring beacon!"), psessionEntry->currentOperChannel, pBeacon->channelNumber);) goto fail; @@ -376,7 +377,8 @@ static void __schBeaconProcessForSession( tpAniSirGlobal pMac, if(limGetStaHashBssidx(pMac, DPH_STA_HASH_INDEX_PEER, &bssIdx, psessionEntry) != eSIR_SUCCESS) goto fail; beaconParams.bssIdx = bssIdx; - palCopyMemory( pMac->hHdd, ( tANI_U8* )&psessionEntry->lastBeaconTimeStamp, ( tANI_U8* )pBeacon->timeStamp, sizeof(tANI_U64) ); + vos_mem_copy(( tANI_U8* )&psessionEntry->lastBeaconTimeStamp, + ( tANI_U8* )pBeacon->timeStamp, sizeof(tANI_U64)); psessionEntry->lastBeaconDtimCount = pBeacon->tim.dtimCount; psessionEntry->lastBeaconDtimPeriod= pBeacon->tim.dtimPeriod; psessionEntry->currentBssBeaconCnt++; @@ -412,7 +414,6 @@ static void __schBeaconProcessForSession( tpAniSirGlobal pMac, //SMAC already parses TIM bit. } - if(pMac->lim.gLimProtectionControl != WNI_CFG_FORCE_POLICY_PROTECTION_DISABLE) limDecideStaProtection(pMac, pBeacon, &beaconParams, psessionEntry); @@ -444,7 +445,7 @@ static void __schBeaconProcessForSession( tpAniSirGlobal pMac, limSendEdcaParams(pMac, psessionEntry->gLimEdcaParamsActive, pStaDs->bssId, eANI_BOOLEAN_FALSE); } else - PELOGE(limLog(pMac, LOGE, FL("Self Entry missing in Hash Table"));) + PELOGE(schLog(pMac, LOGE, FL("Self Entry missing in Hash Table"));) } } else if( (pBeacon->qosCapabilityPresent && psessionEntry->limQosEnabled) && @@ -469,101 +470,171 @@ static void __schBeaconProcessForSession( tpAniSirGlobal pMac, else if (psessionEntry->gLimSpecMgmt.dot11hChanSwState == eLIM_11H_CHANSW_RUNNING) { limCancelDot11hChannelSwitch(pMac, psessionEntry); - } + } } #ifdef WLAN_FEATURE_11AC - if ( (psessionEntry->limSystemRole == eLIM_STA_ROLE) ||(psessionEntry->limSystemRole == eLIM_BT_AMP_STA_ROLE) || (psessionEntry->limSystemRole == eLIM_STA_IN_IBSS_ROLE) ) + if ((psessionEntry->limSystemRole == eLIM_STA_ROLE) || + (psessionEntry->limSystemRole == eLIM_BT_AMP_STA_ROLE) || + (psessionEntry->limSystemRole == eLIM_STA_IN_IBSS_ROLE)) + { + // check for VHT capability + pStaDs = dphLookupHashEntry(pMac, pMh->sa, &aid, + &psessionEntry->dph.dphHashTable); + if (NULL != pStaDs) + { + if (psessionEntry->vhtCapability && pBeacon->OperatingMode.present ) + { + operMode = pStaDs->vhtSupportedChannelWidthSet ? + eHT_CHANNEL_WIDTH_80MHZ : + pStaDs->htSupportedChannelWidthSet ? + eHT_CHANNEL_WIDTH_40MHZ: eHT_CHANNEL_WIDTH_20MHZ; + if (operMode != pBeacon->OperatingMode.chanWidth) + { + PELOG1(schLog(pMac, LOG1, + FL(" received OpMode Chanwidth %d, staIdx = %d"), + pBeacon->OperatingMode.chanWidth, + pStaDs->staIndex);) + PELOG1(schLog(pMac, LOG1, FL(" MAC - %0x:%0x:%0x:%0x:%0x:%0x"), + pMh->sa[0], + pMh->sa[1], + pMh->sa[2], + pMh->sa[3], + pMh->sa[4], + pMh->sa[5]);) + + if (pBeacon->OperatingMode.chanWidth == eHT_CHANNEL_WIDTH_80MHZ) + { + PELOG1(schLog(pMac, LOG1, + FL("Updating the CH Width to 80MHz"));) + pStaDs->vhtSupportedChannelWidthSet = + WNI_CFG_VHT_CHANNEL_WIDTH_80MHZ; + pStaDs->htSupportedChannelWidthSet = eHT_CHANNEL_WIDTH_40MHZ; + } + else if (pBeacon->OperatingMode.chanWidth == eHT_CHANNEL_WIDTH_40MHZ) + { + PELOG1(schLog(pMac, LOG1, + FL("Updating the CH Width to 40MHz"));) + pStaDs->vhtSupportedChannelWidthSet = + WNI_CFG_VHT_CHANNEL_WIDTH_20_40MHZ; + pStaDs->htSupportedChannelWidthSet = eHT_CHANNEL_WIDTH_40MHZ; + } + else if (pBeacon->OperatingMode.chanWidth == + eHT_CHANNEL_WIDTH_20MHZ) + { + PELOG1(schLog(pMac, LOG1, + FL("Updating the CH Width to 20MHz"));) + pStaDs->vhtSupportedChannelWidthSet = + WNI_CFG_VHT_CHANNEL_WIDTH_20_40MHZ; + pStaDs->htSupportedChannelWidthSet = eHT_CHANNEL_WIDTH_20MHZ; + } + limCheckVHTOpModeChange(pMac, psessionEntry, + pBeacon->OperatingMode.chanWidth, + pStaDs->staIndex); + } + } + else if (psessionEntry->vhtCapability && pBeacon->VHTOperation.present) + { + operMode = pStaDs->vhtSupportedChannelWidthSet; + if (operMode != pBeacon->VHTOperation.chanWidth) + { + PELOG1(schLog(pMac, LOG1, + FL(" received VHTOP CHWidth %d staIdx = %d"), + pBeacon->VHTOperation.chanWidth, + pStaDs->staIndex);) + PELOG1(schLog(pMac, LOG1, FL(" MAC - %0x:%0x:%0x:%0x:%0x:%0x"), + pMh->sa[0], + pMh->sa[1], + pMh->sa[2], + pMh->sa[3], + pMh->sa[4], + pMh->sa[5]);) + + if (pBeacon->VHTOperation.chanWidth == + WNI_CFG_VHT_CHANNEL_WIDTH_80MHZ) + { + PELOG1(schLog(pMac, LOG1, + FL("Updating the CH Width to 80MHz"));) + pStaDs->vhtSupportedChannelWidthSet = + WNI_CFG_VHT_CHANNEL_WIDTH_80MHZ; + pStaDs->htSupportedChannelWidthSet = eHT_CHANNEL_WIDTH_40MHZ; + chWidth = eHT_CHANNEL_WIDTH_80MHZ; + } + else if (pBeacon->VHTOperation.chanWidth == + WNI_CFG_VHT_CHANNEL_WIDTH_20_40MHZ) + { + pStaDs->vhtSupportedChannelWidthSet = + WNI_CFG_VHT_CHANNEL_WIDTH_20_40MHZ; + if (pBeacon->HTCaps.supportedChannelWidthSet) + { + PELOG1(schLog(pMac, LOG1, + FL("Updating the CH Width to 40MHz"));) + pStaDs->htSupportedChannelWidthSet = + eHT_CHANNEL_WIDTH_40MHZ; + chWidth = eHT_CHANNEL_WIDTH_40MHZ; + } + else + { + PELOG1(schLog(pMac, LOG1, + FL("Updating the CH Width to 20MHz"));) + pStaDs->htSupportedChannelWidthSet = + eHT_CHANNEL_WIDTH_20MHZ; + chWidth = eHT_CHANNEL_WIDTH_20MHZ; + } + } + limCheckVHTOpModeChange(pMac, psessionEntry, + chWidth, pStaDs->staIndex); + } + } + } + } +#endif + +#if defined (FEATURE_WLAN_CCX) || defined (FEATURE_WLAN_VOWIFI) + /* Obtain the Max Tx power for the current regulatory */ + regMax = cfgGetRegulatoryMaxTransmitPower( pMac, psessionEntry->currentOperChannel ); +#endif + +#if defined FEATURE_WLAN_VOWIFI { - // check for VHT capability - if(psessionEntry->vhtCapability && pBeacon->OperatingMode.present) + tPowerdBm localRRMConstraint = 0; + if ( pMac->rrm.rrmPEContext.rrmEnable && pBeacon->powerConstraintPresent ) { - pStaDs = dphLookupHashEntry(pMac, pMh->sa, &aid, &psessionEntry->dph.dphHashTable); - operMode = pStaDs->vhtSupportedChannelWidthSet ? eHT_CHANNEL_WIDTH_80MHZ : pStaDs->htSupportedChannelWidthSet ? eHT_CHANNEL_WIDTH_40MHZ: eHT_CHANNEL_WIDTH_20MHZ; - if( operMode != pBeacon->OperatingMode.chanWidth) - { - PELOG1(limLog(pMac, LOG1, FL(" received Chanwidth %d, staIdx = %d"), - pBeacon->OperatingMode.chanWidth, - pStaDs->staIndex);) - PELOG1(limLog(pMac, LOG1, FL(" MAC - %0x:%0x:%0x:%0x:%0x:%0x"), - pMh->sa[0], - pMh->sa[1], - pMh->sa[2], - pMh->sa[3], - pMh->sa[4], - pMh->sa[5]);) - - if(pBeacon->OperatingMode.chanWidth == eHT_CHANNEL_WIDTH_80MHZ) - { - pStaDs->vhtSupportedChannelWidthSet = WNI_CFG_VHT_CHANNEL_WIDTH_80MHZ; - pStaDs->htSupportedChannelWidthSet = eHT_CHANNEL_WIDTH_40MHZ ; - } - else if(pBeacon->OperatingMode.chanWidth == eHT_CHANNEL_WIDTH_40MHZ) - { - pStaDs->vhtSupportedChannelWidthSet = WNI_CFG_VHT_CHANNEL_WIDTH_20_40MHZ; - pStaDs->htSupportedChannelWidthSet = eHT_CHANNEL_WIDTH_40MHZ; - } - else if(pBeacon->OperatingMode.chanWidth == eHT_CHANNEL_WIDTH_20MHZ) - { - pStaDs->vhtSupportedChannelWidthSet = WNI_CFG_VHT_CHANNEL_WIDTH_20_40MHZ; - pStaDs->htSupportedChannelWidthSet = eHT_CHANNEL_WIDTH_20MHZ; - } - limCheckVHTOpModeChange(pMac, psessionEntry, pBeacon->OperatingMode.chanWidth, pStaDs->staIndex); - } + localRRMConstraint = pBeacon->localPowerConstraint.localPowerConstraints; + } + else + { + localRRMConstraint = 0; } + maxTxPower = VOS_MIN(regMax,(regMax - localRRMConstraint)); } +#elif defined FEATURE_WLAN_CCX + maxTxPower = regMax; #endif #if defined FEATURE_WLAN_CCX - if( psessionEntry->isCCXconnection ) + if( psessionEntry->isCCXconnection ) + { + tPowerdBm localCCXConstraint = 0; + if (pBeacon->ccxTxPwr.present) { - tPowerdBm localConstraint = 0, regMax = 0, maxTxPower = 0; - if (pBeacon->ccxTxPwr.present) - { - localConstraint = pBeacon->ccxTxPwr.power_limit; - regMax = cfgGetRegulatoryMaxTransmitPower( pMac, psessionEntry->currentOperChannel ); - maxTxPower = limGetMaxTxPower(regMax, localConstraint, pMac->roam.configParam.nTxPowerCap); - - //If maxTxPower is increased or decreased - if( maxTxPower != psessionEntry->maxTxPower ) - { - limLog( pMac, LOG1, "RegMax = %d, lpc = %d, MaxTx = %d", regMax, localConstraint, maxTxPower ); - limLog( pMac, LOG1, "Local power constraint change..updating new maxTx power to HAL"); - if( limSendSetMaxTxPowerReq ( pMac, maxTxPower, psessionEntry ) == eSIR_SUCCESS ) - psessionEntry->maxTxPower = maxTxPower; - } - } + localCCXConstraint = pBeacon->ccxTxPwr.power_limit; + maxTxPower = limGetMaxTxPower(maxTxPower, localCCXConstraint, pMac->roam.configParam.nTxPowerCap); } + schLog( pMac, LOG1, "RegMax = %d, localCcxCons = %d, MaxTx = %d", regMax, localCCXConstraint, maxTxPower ); + } #endif - -#if defined WLAN_FEATURE_VOWIFI - if( pMac->rrm.rrmPEContext.rrmEnable ) +#if defined (FEATURE_WLAN_CCX) || defined (FEATURE_WLAN_VOWIFI) + { + //If maxTxPower is increased or decreased + if( maxTxPower != psessionEntry->maxTxPower ) { - tPowerdBm localConstraint = 0, regMax = 0, maxTxPower = 0; - if (pBeacon->powerConstraintPresent && pMac->rrm.rrmPEContext.rrmEnable) - { - localConstraint = pBeacon->localPowerConstraint.localPowerConstraints; - } - else - { - localConstraint = 0; - } - regMax = cfgGetRegulatoryMaxTransmitPower( pMac, psessionEntry->currentOperChannel ); - //Get the maxTxPower in the range of 13 to 19 - maxTxPower = rrmGetMinOfMaxTxPower(regMax, (regMax - localConstraint)); - //If maxTxPower is increased or decreased - if( maxTxPower != psessionEntry->maxTxPower ) - { -#if defined WLAN_VOWIFI_DEBUG - limLog( pMac, LOGE, "Regulatory max = %d, local power constraint = %d, max tx = %d", regMax, localConstraint, maxTxPower ); - limLog( pMac, LOGE, "Local power constraint change..updating mew maxTx power to HAL"); -#endif - if( rrmSendSetMaxTxPowerReq ( pMac, maxTxPower, psessionEntry ) == eSIR_SUCCESS ) - psessionEntry->maxTxPower = maxTxPower; - - } + schLog( pMac, LOG1, "Local power constraint change..updating new maxTx power %d to HAL",maxTxPower); + if( limSendSetMaxTxPowerReq ( pMac, maxTxPower, psessionEntry ) == eSIR_SUCCESS ) + psessionEntry->maxTxPower = maxTxPower; } + } #endif // Indicate to LIM that Beacon is received diff --git a/CORE/MAC/src/pe/sch/schDebug.c b/CORE/MAC/src/pe/sch/schDebug.c index f2ad4e66fb76..3f800bd6ef4a 100644 --- a/CORE/MAC/src/pe/sch/schDebug.c +++ b/CORE/MAC/src/pe/sch/schDebug.c @@ -26,7 +26,6 @@ */ /* - * * Airgo Networks, Inc proprietary. All rights reserved. * This file schDebug.cc contains some debug functions. * @@ -39,26 +38,28 @@ */ +#include "vos_trace.h" #include "schDebug.h" +#define LOG_SIZE 256 -void schLog(tpAniSirGlobal pMac, tANI_U32 loglevel, const char *pString,...) +void schLog(tpAniSirGlobal pMac, tANI_U32 loglevel, const char *pString, ...) { -#ifdef WLAN_DEBUG - // Verify against current log level - if ( loglevel > pMac->utils.gLogDbgLevel[LOG_INDEX_FOR_MODULE( SIR_SCH_MODULE_ID )] ) - return; - else - { - va_list marker; - va_start( marker, pString ); /* Initialize variable arguments. */ + VOS_TRACE_LEVEL vosDebugLevel; + char logBuffer[LOG_SIZE]; + va_list marker; + + /* getting proper Debug level*/ + vosDebugLevel = getVosDebugLevel(loglevel); - logDebug(pMac, SIR_SCH_MODULE_ID, loglevel, pString, marker); + /* extracting arguments from pstring */ + va_start( marker, pString ); + vsnprintf(logBuffer, LOG_SIZE, pString, marker); + VOS_TRACE(VOS_MODULE_ID_PE, vosDebugLevel, "%s", logBuffer); + va_end( marker ); + } - va_end( marker ); /* Reset variable arguments. */ - } -#endif -} // -------------------------------------------------------------------- + diff --git a/CORE/SAP/inc/sapApi.h b/CORE/SAP/inc/sapApi.h index ce4e6f120916..165297bab53f 100644 --- a/CORE/SAP/inc/sapApi.h +++ b/CORE/SAP/inc/sapApi.h @@ -97,8 +97,7 @@ when who what, where, why ------------------------------------------------------------------------*/ #define MAX_SSID_LEN 32 -#define MAX_MAC_ADDRESS_ACCEPTED 16 -#define MAX_MAC_ADDRESS_DENIED MAX_MAC_ADDRESS_ACCEPTED +#define MAX_ACL_MAC_ADDRESS 16 #define AUTO_CHANNEL_SELECT 0 #define MAX_ASSOC_IND_IE_LEN 255 @@ -318,6 +317,11 @@ typedef struct sap_AssocMacAddr_s { v_MACADDR_t staMac; /*MAC address of Station that is associated*/ v_U8_t assocId; /*Association ID for the station that is associated*/ v_U8_t staId; /*Station Id that is allocated to the station*/ + v_U8_t ShortGI40Mhz; + v_U8_t ShortGI20Mhz; + v_U8_t Support40Mhz; + v_U32_t requestedMCRate; + tSirSupportedRates supportedRates; } tSap_AssocMacAddr, *tpSap_AssocMacAddr; /*struct corresponding to SAP_ASSOC_STA_CALLBACK_EVENT */ @@ -405,11 +409,11 @@ typedef struct sap_Config { tSap_SSIDInfo_t SSIDinfo; eSapPhyMode SapHw_mode; /* Wireless Mode */ eSapMacAddrACL SapMacaddr_acl; - v_MACADDR_t accept_mac[MAX_MAC_ADDRESS_ACCEPTED]; /* MAC filtering */ + v_MACADDR_t accept_mac[MAX_ACL_MAC_ADDRESS]; /* MAC filtering */ v_BOOL_t ieee80211d; /*Specify if 11D is enabled or disabled*/ v_BOOL_t protEnabled; /*Specify if protection is enabled or disabled*/ v_BOOL_t obssProtEnabled; /*Specify if OBSS protection is enabled or disabled*/ - v_MACADDR_t deny_mac[MAX_MAC_ADDRESS_DENIED]; /* MAC filtering */ + v_MACADDR_t deny_mac[MAX_ACL_MAC_ADDRESS]; /* MAC filtering */ v_MACADDR_t self_macaddr; //self macaddress or BSSID v_U8_t channel; /* Operation channel */ @@ -923,6 +927,7 @@ WLANSAP_SetMacACL v_PVOID_t pvosGCtx, tsap_Config_t *pConfig ); + /*========================================================================== FUNCTION WLANSAP_Stop diff --git a/CORE/SAP/src/sapChSelect.c b/CORE/SAP/src/sapChSelect.c index cb44a4e5ba41..9aed4e3fed6f 100644 --- a/CORE/SAP/src/sapChSelect.c +++ b/CORE/SAP/src/sapChSelect.c @@ -28,17 +28,16 @@ /*=========================================================================== s a p C h S e l e c t . C - OVERVIEW: - + This software unit holds the implementation of the WLAN SAP modules - functions for channel selection. + functions for channel selection. + + DEPENDENCIES: + + Are listed for each API below. - DEPENDENCIES: - Are listed for each API below. - - Copyright (c) 2010 Qualcomm Technologies, Inc. All Rights Reserved. Qualcomm Technologies Confidential and Proprietary @@ -82,6 +81,11 @@ --------------------------------------------------------------------------*/ #define SAP_DEBUG +#define IS_RSSI_VALID( extRssi, rssi ) \ +( \ + ((extRssi < rssi)?eANI_BOOLEAN_TRUE:eANI_BOOLEAN_FALSE) \ +) + /*========================================================================== FUNCTION sapCleanupChannelList @@ -204,10 +208,22 @@ int sapSetPreferredChannel(tANI_U8* ptr) } /*getting the first argument ie the number of channels*/ - sscanf(param, "%d ", &tempInt); + if (sscanf(param, "%d ", &tempInt) != 1) + { + VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR, + "%s: Cannot get number of channels from input", __func__); + return -EINVAL; + } VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, - "Number of channel added are: %d", tempInt); + "%s: Number of channel added are: %d", __func__, tempInt); + + if (tempInt <= 0 || tempInt > 255) + { + VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR, + "%s: Invalid Number of channel received", __func__); + return -EINVAL; + } /*allocating space for the desired number of channels*/ pSapCtx->SapChnlList.channelList = (v_U8_t *)vos_mem_malloc(tempInt); @@ -244,12 +260,26 @@ int sapSetPreferredChannel(tANI_U8* ptr) return -EINVAL; } - sscanf(param, "%d ", &tempInt); + if (sscanf(param, "%d ", &tempInt) != 1) + { + VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR, + "%s: Cannot read channel number", __func__); + sapCleanupChannelList(); + return -EINVAL; + } + if (tempInt < 0 || tempInt > 255) + { + VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR, + "%s: Invalid channel number received", __func__); + sapCleanupChannelList(); + return -EINVAL; + } + pSapCtx->SapChnlList.channelList[j] = tempInt; VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, - "Channel %d added to preferred channel list", - pSapCtx->SapChnlList.channelList[j] ); + "%s: Channel %d added to preferred channel list", + __func__, pSapCtx->SapChnlList.channelList[j] ); } @@ -426,7 +456,7 @@ v_U32_t sapweightRssiCount(v_S7_t rssi, v_U16_t count) // Weight from RSSI rssiWeight = SOFTAP_RSSI_WEIGHT * (rssi - SOFTAP_MIN_RSSI) /(SOFTAP_MAX_RSSI - SOFTAP_MIN_RSSI); - + if(rssiWeight > SOFTAP_RSSI_WEIGHT) rssiWeight = SOFTAP_RSSI_WEIGHT; else if (rssiWeight < 0) @@ -435,12 +465,12 @@ v_U32_t sapweightRssiCount(v_S7_t rssi, v_U16_t count) // Weight from data count countWeight = SOFTAP_COUNT_WEIGHT * (count - SOFTAP_MIN_COUNT) /(SOFTAP_MAX_COUNT - SOFTAP_MIN_COUNT); - + if(countWeight > SOFTAP_COUNT_WEIGHT) countWeight = SOFTAP_COUNT_WEIGHT; else if (countWeight < 0) countWeight = 0; - + rssicountWeight = rssiWeight + countWeight; VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, rssiWeight=%d, countWeight=%d, rssicountWeight=%d", @@ -472,184 +502,716 @@ v_U32_t sapweightRssiCount(v_S7_t rssi, v_U16_t count) void sapInterferenceRssiCount(tSapSpectChInfo *pSpectCh) { tSapSpectChInfo *pExtSpectCh = NULL; + v_S31_t rssi; + switch(pSpectCh->chNum) { case CHANNEL_1: pExtSpectCh = (pSpectCh + 1); - if(pExtSpectCh != NULL) + if (pExtSpectCh != NULL) { ++pExtSpectCh->bssCount; - pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_24GHZ_FIRST_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY); - if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) + rssi = pSpectCh->rssiAgr + + SAP_24GHZ_FIRST_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; + } + if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } pExtSpectCh = (pSpectCh + 2); - if(pExtSpectCh != NULL) + if (pExtSpectCh != NULL) { ++pExtSpectCh->bssCount; - pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_24GHZ_SEC_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY); + rssi = pSpectCh->rssiAgr + + SAP_24GHZ_SEC_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; + } if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } pExtSpectCh = (pSpectCh + 3); - if(pExtSpectCh != NULL) + if (pExtSpectCh != NULL) { ++pExtSpectCh->bssCount; - pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_24GHZ_THIRD_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY); + rssi = pSpectCh->rssiAgr + + SAP_24GHZ_THIRD_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; + } if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } pExtSpectCh = (pSpectCh + 4); - if(pExtSpectCh != NULL) + if (pExtSpectCh != NULL) { ++pExtSpectCh->bssCount; - pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_24GHZ_FOURTH_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY); - if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) + rssi = pSpectCh->rssiAgr + + SAP_24GHZ_FOURTH_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; + } + if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } break; + case CHANNEL_2: pExtSpectCh = (pSpectCh - 1); - if(pExtSpectCh != NULL) + if (pExtSpectCh != NULL) { ++pExtSpectCh->bssCount; - pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_24GHZ_FIRST_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY); - if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) + rssi = pSpectCh->rssiAgr + + SAP_24GHZ_FIRST_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; + } + if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } pExtSpectCh = (pSpectCh + 1); - if(pExtSpectCh != NULL) + if (pExtSpectCh != NULL) { ++pExtSpectCh->bssCount; - pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_24GHZ_FIRST_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY); - if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) + rssi = pSpectCh->rssiAgr + + SAP_24GHZ_FIRST_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; + } + if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } pExtSpectCh = (pSpectCh + 2); - if(pExtSpectCh != NULL) + if (pExtSpectCh != NULL) { ++pExtSpectCh->bssCount; - pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_24GHZ_SEC_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY); - if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) + rssi = pSpectCh->rssiAgr + + SAP_24GHZ_SEC_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; + } + if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } pExtSpectCh = (pSpectCh + 3); - if(pExtSpectCh != NULL) + if (pExtSpectCh != NULL) { ++pExtSpectCh->bssCount; - pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_24GHZ_THIRD_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY); - if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) + rssi = pSpectCh->rssiAgr + + SAP_24GHZ_THIRD_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; + } + if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) + pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; + } + pExtSpectCh = (pSpectCh + 4); + if (pExtSpectCh != NULL) + { + ++pExtSpectCh->bssCount; + rssi = pSpectCh->rssiAgr + + SAP_24GHZ_THIRD_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; + } + if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } break; case CHANNEL_3: + pExtSpectCh = (pSpectCh - 2); + if (pExtSpectCh != NULL) + { + ++pExtSpectCh->bssCount; + rssi = pSpectCh->rssiAgr + + SAP_24GHZ_SEC_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; + } + if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) + pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; + } + pExtSpectCh = (pSpectCh - 1); + if (pExtSpectCh != NULL) + { + ++pExtSpectCh->bssCount; + rssi = pSpectCh->rssiAgr + + SAP_24GHZ_FIRST_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; + } + if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) + pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; + } + pExtSpectCh = (pSpectCh + 1); + if (pExtSpectCh != NULL) + { + ++pExtSpectCh->bssCount; + rssi = pSpectCh->rssiAgr + + SAP_24GHZ_FIRST_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; + } + if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) + pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; + } + pExtSpectCh = (pSpectCh + 2); + if (pExtSpectCh != NULL) + { + ++pExtSpectCh->bssCount; + rssi = pSpectCh->rssiAgr + + SAP_24GHZ_SEC_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; + } + if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) + pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; + } + pExtSpectCh = (pSpectCh + 3); + if (pExtSpectCh != NULL) + { + ++pExtSpectCh->bssCount; + rssi = pSpectCh->rssiAgr + + SAP_24GHZ_THIRD_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; + } + if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) + pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; + } + pExtSpectCh = (pSpectCh + 4); + if (pExtSpectCh != NULL) + { + ++pExtSpectCh->bssCount; + rssi = pSpectCh->rssiAgr + + SAP_24GHZ_FOURTH_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; + } + if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) + pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; + } + break; case CHANNEL_4: + pExtSpectCh = (pSpectCh - 3); + if(pExtSpectCh != NULL) + { + ++pExtSpectCh->bssCount; + rssi = pSpectCh->rssiAgr + + SAP_24GHZ_THIRD_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; + } + if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) + pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; + } + pExtSpectCh = (pSpectCh - 2); + if (pExtSpectCh != NULL) + { + ++pExtSpectCh->bssCount; + rssi = pSpectCh->rssiAgr + + SAP_24GHZ_SEC_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; + } + if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) + pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; + } + pExtSpectCh = (pSpectCh - 1); + if (pExtSpectCh != NULL) + { + ++pExtSpectCh->bssCount; + rssi = pSpectCh->rssiAgr + + SAP_24GHZ_FIRST_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; + } + if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) + pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; + } + pExtSpectCh = (pSpectCh + 1); + if (pExtSpectCh != NULL) + { + ++pExtSpectCh->bssCount; + rssi = pSpectCh->rssiAgr + + SAP_24GHZ_FIRST_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; + } + if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) + pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; + } + pExtSpectCh = (pSpectCh + 2); + if (pExtSpectCh != NULL) + { + ++pExtSpectCh->bssCount; + rssi = pSpectCh->rssiAgr + + SAP_24GHZ_SEC_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; + } + if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) + pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; + } + pExtSpectCh = (pSpectCh + 3); + if (pExtSpectCh != NULL) + { + ++pExtSpectCh->bssCount; + rssi = pSpectCh->rssiAgr + + SAP_24GHZ_THIRD_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; + } + if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) + pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; + } + pExtSpectCh = (pSpectCh + 4); + if (pExtSpectCh != NULL) + { + ++pExtSpectCh->bssCount; + rssi = pSpectCh->rssiAgr + + SAP_24GHZ_FOURTH_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; + } + if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) + pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; + } + break; + case CHANNEL_5: case CHANNEL_6: case CHANNEL_7: - case CHANNEL_8: - case CHANNEL_9: - pExtSpectCh = (pSpectCh - 1); - if(pExtSpectCh != NULL) + pExtSpectCh = (pSpectCh - 4); + if (pExtSpectCh != NULL) { ++pExtSpectCh->bssCount; - pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_24GHZ_FIRST_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY); + rssi = pSpectCh->rssiAgr + + SAP_24GHZ_FOURTH_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; + } if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } - pExtSpectCh = (pSpectCh + 1); - if(pExtSpectCh != NULL) + pExtSpectCh = (pSpectCh - 3); + if (pExtSpectCh != NULL) { ++pExtSpectCh->bssCount; - pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_24GHZ_FIRST_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY); + rssi = pSpectCh->rssiAgr + + SAP_24GHZ_THIRD_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; + } if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } pExtSpectCh = (pSpectCh - 2); + if (pExtSpectCh != NULL) + { + ++pExtSpectCh->bssCount; + rssi = pSpectCh->rssiAgr + + SAP_24GHZ_SEC_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; + } + if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) + pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; + } + pExtSpectCh = (pSpectCh - 1); if(pExtSpectCh != NULL) { ++pExtSpectCh->bssCount; - pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_24GHZ_SEC_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY); - if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) + rssi = pSpectCh->rssiAgr + + SAP_24GHZ_FIRST_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; + } + if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) + pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; + } + pExtSpectCh = (pSpectCh + 1); + if (pExtSpectCh != NULL) + { + ++pExtSpectCh->bssCount; + rssi = pSpectCh->rssiAgr + + SAP_24GHZ_FIRST_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; + } + if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } pExtSpectCh = (pSpectCh + 2); if(pExtSpectCh != NULL) { ++pExtSpectCh->bssCount; - pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_24GHZ_SEC_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY); + rssi = pSpectCh->rssiAgr + + SAP_24GHZ_SEC_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; + } + if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) + pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; + } + pExtSpectCh = (pSpectCh + 3); + if(pExtSpectCh != NULL) + { + ++pExtSpectCh->bssCount; + rssi = pSpectCh->rssiAgr + + SAP_24GHZ_THIRD_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; + } + if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) + pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; + } + pExtSpectCh = (pSpectCh + 4); + if (pExtSpectCh != NULL) + { + ++pExtSpectCh->bssCount; + rssi = pSpectCh->rssiAgr + + SAP_24GHZ_FOURTH_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; + } if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } break; - case CHANNEL_10: - pExtSpectCh = (pSpectCh - 1); + + case CHANNEL_8: + pExtSpectCh = (pSpectCh - 4); if(pExtSpectCh != NULL) { ++pExtSpectCh->bssCount; - pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_24GHZ_FIRST_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY); - if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) + rssi = pSpectCh->rssiAgr + + SAP_24GHZ_FOURTH_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; + } + if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) + pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; + } + + pExtSpectCh = (pSpectCh - 3); + if (pExtSpectCh != NULL) + { + ++pExtSpectCh->bssCount; + rssi = pSpectCh->rssiAgr + + SAP_24GHZ_THIRD_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; + } + if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) + pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; + } + pExtSpectCh = (pSpectCh - 2); + if (pExtSpectCh != NULL) + { + ++pExtSpectCh->bssCount; + rssi = pSpectCh->rssiAgr + + SAP_24GHZ_SEC_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; + } + if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) + pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; + } + pExtSpectCh = (pSpectCh - 1); + if (pExtSpectCh != NULL) + { + ++pExtSpectCh->bssCount; + rssi = pSpectCh->rssiAgr + + SAP_24GHZ_FIRST_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; + } + if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } pExtSpectCh = (pSpectCh + 1); - if(pExtSpectCh != NULL) + if (pExtSpectCh != NULL) + { + ++pExtSpectCh->bssCount; + rssi = pSpectCh->rssiAgr + + SAP_24GHZ_FIRST_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; + } + if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) + pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; + } + pExtSpectCh = (pSpectCh + 2); + if (pExtSpectCh != NULL) + { + ++pExtSpectCh->bssCount; + rssi = pSpectCh->rssiAgr + + SAP_24GHZ_SEC_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; + } + if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) + pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; + } + pExtSpectCh = (pSpectCh + 3); + if (pExtSpectCh != NULL) + { + ++pExtSpectCh->bssCount; + rssi = pSpectCh->rssiAgr + + SAP_24GHZ_THIRD_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; + } + if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) + pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; + } + break; + + case CHANNEL_9: + pExtSpectCh = (pSpectCh - 4); + if (pExtSpectCh != NULL) { ++pExtSpectCh->bssCount; - pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_24GHZ_FIRST_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY); + rssi = pSpectCh->rssiAgr + + SAP_24GHZ_FOURTH_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; + } if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } + + pExtSpectCh = (pSpectCh - 3); + if (pExtSpectCh != NULL) + { + ++pExtSpectCh->bssCount; + rssi = pSpectCh->rssiAgr + + SAP_24GHZ_THIRD_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; + } + if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) + pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; + } pExtSpectCh = (pSpectCh - 2); - if(pExtSpectCh != NULL) + if (pExtSpectCh != NULL) { ++pExtSpectCh->bssCount; - pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_24GHZ_SEC_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY); - if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) + rssi = pSpectCh->rssiAgr + + SAP_24GHZ_SEC_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; + } + if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) + pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; + } + pExtSpectCh = (pSpectCh - 1); + if (pExtSpectCh != NULL) + { + ++pExtSpectCh->bssCount; + rssi = pSpectCh->rssiAgr + + SAP_24GHZ_FIRST_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; + } + if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) + pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; + } + pExtSpectCh = (pSpectCh + 1); + if (pExtSpectCh != NULL) + { + ++pExtSpectCh->bssCount; + rssi = pSpectCh->rssiAgr + + SAP_24GHZ_FIRST_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; + } + if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) + pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; + } + pExtSpectCh = (pSpectCh + 2); + if (pExtSpectCh != NULL) + { + ++pExtSpectCh->bssCount; + rssi = pSpectCh->rssiAgr + + SAP_24GHZ_SEC_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; + } + if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } + break; + + case CHANNEL_10: + pExtSpectCh = (pSpectCh - 4); + if (pExtSpectCh != NULL) + { + ++pExtSpectCh->bssCount; + rssi = pSpectCh->rssiAgr + + SAP_24GHZ_FOURTH_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; + } + if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) + pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; + } + pExtSpectCh = (pSpectCh - 3); + if (pExtSpectCh != NULL) + { + ++pExtSpectCh->bssCount; + rssi = pSpectCh->rssiAgr + + SAP_24GHZ_THIRD_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; + } + if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) + pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; + } + pExtSpectCh = (pSpectCh - 2); if(pExtSpectCh != NULL) { ++pExtSpectCh->bssCount; - pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_24GHZ_THIRD_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY); - if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) + rssi = pSpectCh->rssiAgr + + SAP_24GHZ_SEC_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; + } + if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) + pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; + } + pExtSpectCh = (pSpectCh - 1); + if (pExtSpectCh != NULL) + { + ++pExtSpectCh->bssCount; + rssi = pSpectCh->rssiAgr + + SAP_24GHZ_FIRST_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; + } + if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) + pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; + } + pExtSpectCh = (pSpectCh + 1); + if (pExtSpectCh != NULL) + { + ++pExtSpectCh->bssCount; + rssi = pSpectCh->rssiAgr + + SAP_24GHZ_FIRST_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; + } + if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } break; + case CHANNEL_11: pExtSpectCh = (pSpectCh - 1); - if(pExtSpectCh != NULL) + if (pExtSpectCh != NULL) { ++pExtSpectCh->bssCount; - pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_24GHZ_FIRST_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY); - if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) + rssi = pSpectCh->rssiAgr + + SAP_24GHZ_FIRST_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; + } + if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } pExtSpectCh = (pSpectCh - 2); - if(pExtSpectCh != NULL) + if (pExtSpectCh != NULL) { ++pExtSpectCh->bssCount; - pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_24GHZ_SEC_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY); - if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) + rssi = pSpectCh->rssiAgr + + SAP_24GHZ_SEC_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; + } + if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } pExtSpectCh = (pSpectCh - 3); - if(pExtSpectCh != NULL) + if (pExtSpectCh != NULL) { ++pExtSpectCh->bssCount; - pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_24GHZ_THIRD_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY); - if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) + rssi = pSpectCh->rssiAgr + + SAP_24GHZ_THIRD_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; + } + if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } pExtSpectCh = (pSpectCh - 4); - if(pExtSpectCh != NULL) + if (pExtSpectCh != NULL) { ++pExtSpectCh->bssCount; - pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_24GHZ_FOURTH_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY); - if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) + rssi = pSpectCh->rssiAgr + + SAP_24GHZ_FOURTH_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; + } + if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } break; + default: break; } @@ -678,8 +1240,8 @@ void sapInterferenceRssiCount(tSapSpectChInfo *pSpectCh) SIDE EFFECTS ============================================================================*/ -void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams, - tHalHandle halHandle, tScanResultHandle pResult) +void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams, + tHalHandle halHandle, tScanResultHandle pResult) { v_S7_t rssi = 0; v_U8_t chn_num = 0; @@ -696,14 +1258,13 @@ void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams, tSirProbeRespBeacon *pBeaconStruct; tpAniSirGlobal pMac = (tpAniSirGlobal) halHandle; - if(eHAL_STATUS_SUCCESS != palAllocateMemory(pMac->hHdd, - (void **)&pBeaconStruct, sizeof(tSirProbeRespBeacon))) + pBeaconStruct = vos_mem_malloc(sizeof(tSirProbeRespBeacon)); + if ( NULL == pBeaconStruct ) { - VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,"Unable to PAL allocate memory in sapComputeSpectWeight\n"); + VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, + "Unable to allocate memory in sapComputeSpectWeight\n"); return; } - - VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, Computing spectral weight", __func__); /** @@ -711,7 +1272,7 @@ void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams, */ ccmCfgGetInt( halHandle, WNI_CFG_SAP_CHANNEL_SELECT_OPERATING_BAND, &operatingBand); - pScanResult = sme_ScanResultGetFirst(halHandle, pResult); + pScanResult = sme_ScanResultGetFirst(halHandle, pResult); while (pScanResult) { pSpectCh = pSpectInfoParams->pSpectCh; @@ -720,15 +1281,15 @@ void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams, secondaryChannelOffset = PHY_SINGLE_CHANNEL_CENTERED; vhtSupport = 0; centerFreq = 0; - - if(pScanResult->BssDescriptor.ieFields != NULL) + + if (pScanResult->BssDescriptor.ieFields != NULL) { ieLen = (pScanResult->BssDescriptor.length + sizeof(tANI_U16) + sizeof(tANI_U32) - sizeof(tSirBssDescription)); - palZeroMemory(pMac->hHdd, (tANI_U8 *) pBeaconStruct, sizeof(tSirProbeRespBeacon)); - + vos_mem_set((tANI_U8 *) pBeaconStruct, sizeof(tSirProbeRespBeacon), 0); + if ((sirParseBeaconIE(pMac, pBeaconStruct,(tANI_U8 *)( pScanResult->BssDescriptor.ieFields), ieLen)) == eSIR_SUCCESS) { - if(pBeaconStruct->HTCaps.present && pBeaconStruct->HTInfo.present) + if (pBeaconStruct->HTCaps.present && pBeaconStruct->HTInfo.present) { channelWidth = pBeaconStruct->HTCaps.supportedChannelWidthSet; secondaryChannelOffset = pBeaconStruct->HTInfo.secondaryChannelOffset; @@ -756,7 +1317,7 @@ void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams, else channel_id = pScanResult->BssDescriptor.channelId; - if (channel_id == pSpectCh->chNum) { + if (channel_id == pSpectCh->chNum) { if (pSpectCh->rssiAgr < pScanResult->BssDescriptor.rssi) pSpectCh->rssiAgr = pScanResult->BssDescriptor.rssi; @@ -765,8 +1326,8 @@ void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams, if(operatingBand) // Connsidering the Extension Channel only in a channels { /* Updating the received ChannelWidth */ - if (pSpectCh->channelWidth != channelWidth) - pSpectCh->channelWidth = channelWidth; + if (pSpectCh->channelWidth != channelWidth) + pSpectCh->channelWidth = channelWidth; /* If received ChannelWidth is other than HT20, we need to update the extension channel Params as well */ /* channelWidth == 0, HT20 */ /* channelWidth == 1, HT40 */ @@ -782,17 +1343,26 @@ void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams, if(pExtSpectCh != NULL) { ++pExtSpectCh->bssCount; + rssi = pSpectCh->rssiAgr + SAP_SUBBAND1_RSSI_EFFECT_PRIMARY; // REducing the rssi by -20 and assigning it to Extension channel - pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_SUBBAND1_RSSI_EFFECT_PRIMARY); + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; + } if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } break; + case PHY_DOUBLE_CHANNEL_HIGH_PRIMARY: // Below the Primary channel pExtSpectCh = (pSpectCh - 1); if(pExtSpectCh != NULL) { - pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_SUBBAND1_RSSI_EFFECT_PRIMARY); + rssi = pSpectCh->rssiAgr + SAP_SUBBAND1_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; + } if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; ++pExtSpectCh->bssCount; @@ -808,7 +1378,11 @@ void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams, if(pExtSpectCh != NULL) { ++pExtSpectCh->bssCount; - pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_SUBBAND1_RSSI_EFFECT_PRIMARY); // Reducing the rssi by -20 and assigning it to Subband 1 + rssi = pSpectCh->rssiAgr + SAP_SUBBAND1_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; // Reducing the rssi by -20 and assigning it to Subband 1 + } if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } @@ -816,7 +1390,11 @@ void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams, if(pExtSpectCh != NULL) { ++pExtSpectCh->bssCount; - pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_SUBBAND2_RSSI_EFFECT_PRIMARY); // Reducing the rssi by -30 and assigning it to Subband 2 + rssi = pSpectCh->rssiAgr + SAP_SUBBAND2_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; // Reducing the rssi by -30 and assigning it to Subband 2 + } if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } @@ -824,10 +1402,14 @@ void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams, if(pExtSpectCh != NULL) { ++pExtSpectCh->bssCount; - pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_SUBBAND3_RSSI_EFFECT_PRIMARY); // Reducing the rssi by -40 and assigning it to Subband 3 + rssi = pSpectCh->rssiAgr + SAP_SUBBAND3_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; // Reducing the rssi by -40 and assigning it to Subband 3 + } if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; - } + } } else if((centerFreq - channel_id) == 2) { @@ -836,7 +1418,11 @@ void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams, if(pExtSpectCh != NULL) { ++pExtSpectCh->bssCount; - pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_SUBBAND1_RSSI_EFFECT_PRIMARY); + rssi = pSpectCh->rssiAgr + SAP_SUBBAND1_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; + } if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } @@ -844,7 +1430,11 @@ void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams, if(pExtSpectCh != NULL) { ++pExtSpectCh->bssCount; - pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_SUBBAND1_RSSI_EFFECT_PRIMARY); + rssi = pSpectCh->rssiAgr + SAP_SUBBAND1_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; + } if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } @@ -852,7 +1442,11 @@ void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams, if(pExtSpectCh != NULL) { ++pExtSpectCh->bssCount; - pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_SUBBAND2_RSSI_EFFECT_PRIMARY); + rssi = pSpectCh->rssiAgr + SAP_SUBBAND2_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; + } if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } @@ -864,7 +1458,11 @@ void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams, if(pExtSpectCh != NULL) { ++pExtSpectCh->bssCount; - pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_SUBBAND1_RSSI_EFFECT_PRIMARY); + rssi = pSpectCh->rssiAgr + SAP_SUBBAND1_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; + } if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } @@ -872,7 +1470,11 @@ void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams, if(pExtSpectCh != NULL) { ++pExtSpectCh->bssCount; - pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_SUBBAND2_RSSI_EFFECT_PRIMARY); + rssi = pSpectCh->rssiAgr + SAP_SUBBAND2_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; + } if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } @@ -880,7 +1482,11 @@ void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams, if(pExtSpectCh != NULL) { ++pExtSpectCh->bssCount; - pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_SUBBAND1_RSSI_EFFECT_PRIMARY); + rssi = pSpectCh->rssiAgr + SAP_SUBBAND1_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; + } if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } @@ -892,7 +1498,11 @@ void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams, if(pExtSpectCh != NULL) { ++pExtSpectCh->bssCount; - pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_SUBBAND1_RSSI_EFFECT_PRIMARY); + rssi = pSpectCh->rssiAgr + SAP_SUBBAND1_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; + } if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } @@ -900,7 +1510,11 @@ void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams, if(pExtSpectCh != NULL) { ++pExtSpectCh->bssCount; - pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_SUBBAND2_RSSI_EFFECT_PRIMARY); + rssi = pSpectCh->rssiAgr + SAP_SUBBAND2_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; + } if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } @@ -908,14 +1522,18 @@ void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams, if(pExtSpectCh != NULL) { ++pExtSpectCh->bssCount; - pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_SUBBAND3_RSSI_EFFECT_PRIMARY); + rssi = pSpectCh->rssiAgr + SAP_SUBBAND3_RSSI_EFFECT_PRIMARY; + if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) + { + pExtSpectCh->rssiAgr = rssi; + } if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } } break; } - } + } else if(operatingBand == RF_SUBBAND_2_4_GHZ) { sapInterferenceRssiCount(pSpectCh); @@ -940,7 +1558,7 @@ void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams, VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, Spectrum Channels Weight", __func__); for (chn_num = 0; chn_num < (pSpectInfoParams->numSpectChans); chn_num++) { - + /* rssi : Maximum received signal strength among all BSS on that channel bssCount : Number of BSS on that channel @@ -950,13 +1568,15 @@ void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams, pSpectCh->weight = SAPDFS_NORMALISE_1000 * sapweightRssiCount(rssi, pSpectCh->bssCount); - //------ Debug Info ------ - VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, Chan=%d Weight= %d rssiAgr=%d bssCount=%d", __func__, pSpectCh->chNum, - pSpectCh->weight, pSpectCh->rssiAgr, pSpectCh->bssCount); - //------ Debug Info ------ + //------ Debug Info ------ + VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, + "In %s, Chan=%d Weight= %d rssiAgr=%d bssCount=%d", __func__, + pSpectCh->chNum, pSpectCh->weight, + pSpectCh->rssiAgr, pSpectCh->bssCount); + //------ Debug Info ------ pSpectCh++; } - palFreeMemory(pMac->hHdd, pBeaconStruct); + vos_mem_free(pBeaconStruct); } /*========================================================================== @@ -1055,68 +1675,6 @@ void sapSortChlWeight(tSapChSelSpectInfo *pSpectInfoParams) } -/*========================================================================== - FUNCTION sapComputeNonOverlapChannel - - DESCRIPTION - Checking for the Free Non Overlapping Channel - - DEPENDENCIES - NA. - - PARAMETERS - - IN - pSpectInfoParams: Spectrum Info params - startChannelNum: Allowed start channel number - endChannelNum: Allowed end channel number - - RETURN VALUE - v_U8_t : Success - Bit mask - - SIDE EFFECTS -============================================================================*/ -v_U8_t sapComputeNonOverlapChannel(tSapChSelSpectInfo* pSpectInfoParams, - v_U32_t startChannelNum, v_U32_t endChannelNum) -{ - v_U8_t nonOverlap = 0; - tSapSpectChInfo *pSpectCh = NULL; - v_U8_t chn_num = 0; - pSpectCh = pSpectInfoParams->pSpectCh; - for (chn_num = 0; chn_num < (pSpectInfoParams->numSpectChans); chn_num++) { - - if (startChannelNum > pSpectCh->chNum || endChannelNum < pSpectCh->chNum) - { - // Channel is not in allowed range - pSpectCh++; - continue; - } - - if(pSpectCh->chNum == CHANNEL_1 || pSpectCh->chNum == CHANNEL_6 || pSpectCh->chNum == CHANNEL_11) - { - switch(pSpectCh->chNum) - { - case 1: - if(pSpectCh->weight == 0) - nonOverlap |= 0x1; //Bit 0 For channel 1 - break; - case 6: - if(pSpectCh->weight == 0) - nonOverlap |= 0x2; // Bit 1 For Channel 6 - break; - case 11: - if(pSpectCh->weight == 0) - nonOverlap |= 0x4; // Bit 2 for Channel 11 - break; - default: - break; - } - } - pSpectCh++; - } - return nonOverlap; -} - /*========================================================================== FUNCTION sapSelectChannel @@ -1143,7 +1701,6 @@ v_U8_t sapSelectChannel(tHalHandle halHandle, ptSapContext pSapCtx, tScanResult // DFS param object holding all the data req by the algo tSapChSelSpectInfo oSpectInfoParams = {NULL,0}; tSapChSelSpectInfo *pSpectInfoParams = &oSpectInfoParams; // Memory? NB - v_U8_t nonOverlap = 0; v_U8_t bestChNum = 0; #ifdef SOFTAP_CHANNEL_RANGE v_U32_t startChannelNum; @@ -1173,60 +1730,49 @@ v_U8_t sapSelectChannel(tHalHandle halHandle, ptSapContext pSapCtx, tScanResult ccmCfgGetInt( halHandle, WNI_CFG_SAP_CHANNEL_SELECT_END_CHANNEL, &endChannelNum); ccmCfgGetInt( halHandle, WNI_CFG_SAP_CHANNEL_SELECT_OPERATING_BAND, &operatingBand); - // Calculating the Non overlapping Channel Availability */ - if(operatingBand == RF_SUBBAND_2_4_GHZ) - nonOverlap = sapComputeNonOverlapChannel(pSpectInfoParams, startChannelNum, - endChannelNum); - /*Loop till get the best channel in the given range */ for(count=0; count < pSpectInfoParams->numSpectChans ; count++) { if((startChannelNum <= pSpectInfoParams->pSpectCh[count].chNum)&& ( endChannelNum >= pSpectInfoParams->pSpectCh[count].chNum)) { - bestChNum = (v_U8_t)pSpectInfoParams->pSpectCh[count].chNum; - break; - } - } - + if(bestChNum == 0) + { + bestChNum = (v_U8_t)pSpectInfoParams->pSpectCh[count].chNum; + } + else + { + if(operatingBand == RF_SUBBAND_2_4_GHZ) + { + /* Give preference to Non-overlap channels */ + if(((pSpectInfoParams->pSpectCh[count].chNum == CHANNEL_1) || + (pSpectInfoParams->pSpectCh[count].chNum == CHANNEL_6) || + (pSpectInfoParams->pSpectCh[count].chNum == CHANNEL_11))&& + (pSpectInfoParams->pSpectCh[count].weight == 0)) + { + bestChNum = (v_U8_t)pSpectInfoParams->pSpectCh[count].chNum; + break; + } + } + } + } + } #else // Get the first channel in sorted array as best 20M Channel bestChNum = (v_U8_t)pSpectInfoParams->pSpectCh[0].chNum; - #endif - + //Select Best Channel from Channel List if Configured bestChNum = sapSelectPreferredChannelFromChannelList(bestChNum, pSapCtx, pSpectInfoParams); - if(operatingBand == RF_SUBBAND_2_4_GHZ) - { - if(nonOverlap) - { - switch(nonOverlap) - { - case 0x1: - bestChNum = CHANNEL_1; - break; - case 0x2: - bestChNum = CHANNEL_6; - break; - case 0x4: - bestChNum = CHANNEL_11; - break; - default: - break; - } - } - } - // Free all the allocated memory sapChanSelExit(pSpectInfoParams); VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, Running SAP Ch select Completed, Ch=%d", - __func__, bestChNum); - + __func__, bestChNum); if (bestChNum > 0 && bestChNum <= 252) return bestChNum; else return SAP_CHANNEL_NOT_SELECTED; } + diff --git a/CORE/SAP/src/sapFsm.c b/CORE/SAP/src/sapFsm.c index 7d85166f1bcf..c2e0c0c95a8d 100644 --- a/CORE/SAP/src/sapFsm.c +++ b/CORE/SAP/src/sapFsm.c @@ -327,11 +327,10 @@ sapGotoStarting eHalStatus halStatus; tANI_U32 type, subType; VOS_STATUS status = VOS_STATUS_E_FAILURE; - tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - /*- - - - - - - - TODO:once configs from hdd available - - - - - - - - -*/ char key_material[32]={ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1,}; + tpAniSirGlobal pMac = PMAC_STRUCT(hHal); sapContext->key_type = 0x05; sapContext->key_length = 32; vos_mem_copy(sapContext->key_material, key_material, sizeof(key_material)); /* Need a key size define */ diff --git a/CORE/SAP/src/sapInternal.h b/CORE/SAP/src/sapInternal.h index c6f646e9e145..653e7b764ba1 100644 --- a/CORE/SAP/src/sapInternal.h +++ b/CORE/SAP/src/sapInternal.h @@ -190,9 +190,9 @@ typedef struct sSapContext { // Mac filtering settings eSapMacAddrACL eSapMacAddrAclMode; - v_MACADDR_t acceptMacList[MAX_MAC_ADDRESS_ACCEPTED]; + v_MACADDR_t acceptMacList[MAX_ACL_MAC_ADDRESS]; v_U8_t nAcceptMac; - v_MACADDR_t denyMacList[MAX_MAC_ADDRESS_DENIED]; + v_MACADDR_t denyMacList[MAX_ACL_MAC_ADDRESS]; v_U8_t nDenyMac; // QOS config @@ -581,26 +581,28 @@ sapSortMacList(v_MACADDR_t *macList, v_U8_t size); FUNCTION sapAddMacToACL - DESCRIPTION + DESCRIPTION Function to ADD a mac address in an ACL. The function ensures that the ACL list remains sorted after the addition. - This API does not take care of buffer overflow i.e. if the list is already maxed out while adding a mac address, - it will still try to add. - The caller must take care that the ACL size is less than MAX_MAC_ADDRESS_ACCEPTED before calling this function. + This API does not take care of buffer overflow i.e. if the list is already + maxed out while adding a mac address, it will still try to add. + The caller must take care that the ACL size is less than MAX_ACL_MAC_ADDRESS + before calling this function. - DEPENDENCIES + DEPENDENCIES - PARAMETERS + PARAMETERS IN macList : ACL list of mac addresses (black/white list) - size (I/O) : size of the ACL. It is an I/O arg. The API takes care of incrementing the size by 1. + size (I/O) : size of the ACL. It is an I/O arg. The API takes care + of incrementing the size by 1. peerMac : Mac address of the peer to be added RETURN VALUE None. - SIDE EFFECTS + SIDE EFFECTS ============================================================================*/ void diff --git a/CORE/SAP/src/sapModule.c b/CORE/SAP/src/sapModule.c index 4f0f6b2ec742..4db9f9e57bca 100644 --- a/CORE/SAP/src/sapModule.c +++ b/CORE/SAP/src/sapModule.c @@ -625,7 +625,7 @@ WLANSAP_StartBss //present or not doesn't maater as we have to follow whatever //STA session does) if ((0 == sme_GetConcurrentOperationChannel(hHal)) && - pConfig->ieee80211d) + pConfig->ieee80211d) { /* Setting the region/country information */ sme_setRegInfo(hHal, pConfig->countryCode); @@ -661,7 +661,6 @@ WLANSAP_StartBss return vosStatus; }// WLANSAP_StartBss -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0)) /*========================================================================== FUNCTION WLANSAP_SetMacACL @@ -700,42 +699,44 @@ WLANSAP_SetMacACL VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "WLANSAP_SetMacACL"); - if (VOS_STA_SAP_MODE != vos_get_conparam ()) - { - VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR, - "%s : SoftAp role has not been enabled", __func__); - return VOS_STATUS_E_FAULT; - } - - pSapCtx = VOS_GET_SAP_CB(pvosGCtx); - if ( NULL == pSapCtx ) + if (VOS_STA_SAP_MODE == vos_get_conparam ()) { - VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, - "%s: Invalid SAP pointer from pvosGCtx", __func__); - return VOS_STATUS_E_FAULT; - } + pSapCtx = VOS_GET_SAP_CB(pvosGCtx); + if ( NULL == pSapCtx ) + { + VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, + "%s: Invalid SAP pointer from pvosGCtx", __func__); + return VOS_STATUS_E_FAULT; + } - // Copy MAC filtering settings to sap context - pSapCtx->eSapMacAddrAclMode = pConfig->SapMacaddr_acl; + // Copy MAC filtering settings to sap context + pSapCtx->eSapMacAddrAclMode = pConfig->SapMacaddr_acl; - if (eSAP_DENY_UNLESS_ACCEPTED == pSapCtx->eSapMacAddrAclMode) - { - vos_mem_copy(pSapCtx->acceptMacList, pConfig->accept_mac, - sizeof(pConfig->accept_mac)); - pSapCtx->nAcceptMac = pConfig->num_accept_mac; - sapSortMacList(pSapCtx->acceptMacList, pSapCtx->nAcceptMac); + if (eSAP_DENY_UNLESS_ACCEPTED == pSapCtx->eSapMacAddrAclMode) + { + vos_mem_copy(pSapCtx->acceptMacList, pConfig->accept_mac, + sizeof(pConfig->accept_mac)); + pSapCtx->nAcceptMac = pConfig->num_accept_mac; + sapSortMacList(pSapCtx->acceptMacList, pSapCtx->nAcceptMac); + } + else if (eSAP_ACCEPT_UNLESS_DENIED == pSapCtx->eSapMacAddrAclMode) + { + vos_mem_copy(pSapCtx->denyMacList, pConfig->deny_mac, + sizeof(pConfig->deny_mac)); + pSapCtx->nDenyMac = pConfig->num_deny_mac; + sapSortMacList(pSapCtx->denyMacList, pSapCtx->nDenyMac); + } } - else if (eSAP_ACCEPT_UNLESS_DENIED == pSapCtx->eSapMacAddrAclMode) + else { - vos_mem_copy(pSapCtx->denyMacList, pConfig->deny_mac, - sizeof(pConfig->deny_mac)); - pSapCtx->nDenyMac = pConfig->num_deny_mac; - sapSortMacList(pSapCtx->denyMacList, pSapCtx->nDenyMac); + VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR, + "%s : SoftAp role has not been enabled", __func__); + return VOS_STATUS_E_FAULT; } return vosStatus; }//WLANSAP_SetMacACL -#endif + /*========================================================================== FUNCTION WLANSAP_StopBss @@ -1073,7 +1074,7 @@ WLANSAP_ModifyACL { //error check // if list is already at max, return failure - if (pSapCtx->nAcceptMac == MAX_MAC_ADDRESS_ACCEPTED) + if (pSapCtx->nAcceptMac == MAX_ACL_MAC_ADDRESS) { VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR, "White list is already maxed out. Cannot accept %02x:%02x:%02x:%02x:%02x:%02x", @@ -1136,7 +1137,7 @@ WLANSAP_ModifyACL { //error check // if list is already at max, return failure - if (pSapCtx->nDenyMac == MAX_MAC_ADDRESS_ACCEPTED) + if (pSapCtx->nDenyMac == MAX_ACL_MAC_ADDRESS) { VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR, "Black list is already maxed out. Cannot accept %02x:%02x:%02x:%02x:%02x:%02x", @@ -2162,7 +2163,7 @@ VOS_STATUS WLANSAP_RemainOnChannel( v_PVOID_t pvosGCtx, } halStatus = sme_RemainOnChannel( hHal, pSapCtx->sessionId, - channel, duration, callback, pContext ); + channel, duration, callback, pContext, TRUE ); if( eHAL_STATUS_SUCCESS == halStatus ) { diff --git a/CORE/SERVICES/BMI/ol_fw.c b/CORE/SERVICES/BMI/ol_fw.c index 31e9b0a77a55..1d34ffda1a1b 100644 --- a/CORE/SERVICES/BMI/ol_fw.c +++ b/CORE/SERVICES/BMI/ol_fw.c @@ -486,7 +486,7 @@ static void ramdump_work_handler(struct work_struct *ramdump) ol_target_coredump(ramdump_scn, ramdump_base, TOTAL_DUMP_SIZE); printk("%s: RAM dump collecting completed!\n", __func__); - msleep(1000); + msleep(500); } else { printk("No RAM dump will be collected since ramdump_scn is NULL!\n"); } @@ -931,7 +931,7 @@ void ol_target_coredump(void *inst, void* memoryBlock, u_int32_t blockLength) /* * SECTION = REGISTER - * START = 0x4000 + * START = Vary in target type * LENGTH = 0x6c000 * * SECTION = DRAM diff --git a/CORE/SERVICES/COMMON/wma_api.h b/CORE/SERVICES/COMMON/wma_api.h index e98cfcb0b03d..1fa59dca288e 100644 --- a/CORE/SERVICES/COMMON/wma_api.h +++ b/CORE/SERVICES/COMMON/wma_api.h @@ -113,7 +113,8 @@ int wma_cli_get_command(void *wmapvosContext, int vdev_id, int param_id, int vpdev); eHalStatus wma_set_htconfig(tANI_U8 vdev_id, tANI_U16 ht_capab, int value); eHalStatus WMA_SetCountryCode(v_VOID_t *client_ctx, tANI_U8 *countrycode); -eHalStatus WMA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId); +eHalStatus WMA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId, + tAniBool sendRegHint); #ifndef QCA_WIFI_ISOC int wma_suspend_target(WMA_HANDLE handle, int disable_target_intr); diff --git a/CORE/SERVICES/COMMON/wmi_tlv_defs.h b/CORE/SERVICES/COMMON/wmi_tlv_defs.h index 3d2d930665e1..385069bb253f 100644 --- a/CORE/SERVICES/COMMON/wmi_tlv_defs.h +++ b/CORE/SERVICES/COMMON/wmi_tlv_defs.h @@ -368,7 +368,7 @@ typedef enum { WMITLV_TAG_STRUC_wmi_vdev_mcc_set_tbtt_mode_cmd_fixed_param, WMITLV_TAG_STRUC_wmi_roam_chan_list_fixed_param, WMITLV_TAG_STRUC_wmi_vdev_mcc_bcn_intvl_change_event_fixed_param, - WMITLV_TAG_STRUC_wmi_resmgr_adaptive_ocs_disable_cmd_fixed_param, + WMITLV_TAG_STRUC_wmi_resmgr_adaptive_ocs_enable_disable_cmd_fixed_param, WMITLV_TAG_STRUC_wmi_resmgr_set_chan_time_quota_cmd_fixed_param, WMITLV_TAG_STRUC_wmi_resmgr_set_chan_latency_cmd_fixed_param, WMITLV_TAG_STRUC_wmi_ba_req_ssn_cmd_fixed_param, @@ -525,7 +525,7 @@ typedef enum { OP(WMI_TDLS_PEER_UPDATE_CMDID) \ OP(WMI_FWTEST_VDEV_MCC_SET_TBTT_MODE_CMDID) \ OP(WMI_ROAM_CHAN_LIST) \ - OP(WMI_RESMGR_ADAPTIVE_OCS_DISABLE_CMDID)\ + OP(WMI_RESMGR_ADAPTIVE_OCS_ENABLE_DISABLE_CMDID)\ OP(WMI_RESMGR_SET_CHAN_TIME_QUOTA_CMDID) \ OP(WMI_RESMGR_SET_CHAN_LATENCY_CMDID) \ OP(WMI_BA_REQ_SSN_CMDID) \ @@ -1329,12 +1329,12 @@ WMITLV_CREATE_PARAM_STRUC(WMI_TDLS_SET_STATE_CMDID); WMITLV_CREATE_PARAM_STRUC(WMI_TDLS_PEER_UPDATE_CMDID); -/* Resmgr Disable Adaptive OCS CMD */ -#define WMITLV_TABLE_WMI_RESMGR_ADAPTIVE_OCS_DISABLE_CMDID(id,op,buf,len) \ - WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_resmgr_adaptive_ocs_disable_cmd_fixed_param, \ - wmi_resmgr_adaptive_ocs_disable_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) +/* Resmgr Enable/Disable Adaptive OCS CMD */ +#define WMITLV_TABLE_WMI_RESMGR_ADAPTIVE_OCS_ENABLE_DISABLE_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_resmgr_adaptive_ocs_enable_disable_cmd_fixed_param, \ + wmi_resmgr_adaptive_ocs_enable_disable_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) -WMITLV_CREATE_PARAM_STRUC(WMI_RESMGR_ADAPTIVE_OCS_DISABLE_CMDID); +WMITLV_CREATE_PARAM_STRUC(WMI_RESMGR_ADAPTIVE_OCS_ENABLE_DISABLE_CMDID); /* Resmgr Set Channel Time Quota CMD */ #define WMITLV_TABLE_WMI_RESMGR_SET_CHAN_TIME_QUOTA_CMDID(id,op,buf,len) \ diff --git a/CORE/SERVICES/COMMON/wmi_unified.h b/CORE/SERVICES/COMMON/wmi_unified.h index de3f0c7d5036..7d20bab72d2d 100644 --- a/CORE/SERVICES/COMMON/wmi_unified.h +++ b/CORE/SERVICES/COMMON/wmi_unified.h @@ -522,7 +522,7 @@ typedef enum { /** Adaptive OCS is enabled by default in the FW. This command is used to * disable FW based adaptive OCS. */ - WMI_RESMGR_ADAPTIVE_OCS_DISABLE_CMDID = WMI_CMD_GRP_START_ID(WMI_GRP_RESMGR), + WMI_RESMGR_ADAPTIVE_OCS_ENABLE_DISABLE_CMDID = WMI_CMD_GRP_START_ID(WMI_GRP_RESMGR), /** set the requested channel time quota for the home channels */ WMI_RESMGR_SET_CHAN_TIME_QUOTA_CMDID, /** set the requested latency for the home channels */ @@ -3164,6 +3164,11 @@ typedef struct { * Enable QPower */ WMI_STA_PS_ENABLE_QPOWER = 6, + + /** + * Number of TX frames before the entering the Active state + */ + WMI_STA_PS_PARAM_QPOWER_MAX_TX_BEFORE_WAKE = 7, }; typedef struct { @@ -5604,12 +5609,16 @@ typedef struct { A_UINT32 new_bcn_intvl; } wmi_vdev_mcc_bcn_intvl_change_event_fixed_param; -/* WMI_RESMGR_ADAPTIVE_OCS_DISABLE_CMDID */ +/* WMI_RESMGR_ADAPTIVE_OCS_ENABLE_DISABLE_CMDID */ typedef struct { - /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_resmgr_adaptive_ocs_disable_cmd_fixed_param */ + /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_resmgr_adaptive_ocs_enable_disable_cmd_fixed_param */ A_UINT32 tlv_header; A_UINT32 reserved0; -} wmi_resmgr_adaptive_ocs_disable_cmd_fixed_param; + /** 1: enable fw based adaptive ocs, + * 0: disable fw based adaptive ocs + */ + A_UINT32 enable; +} wmi_resmgr_adaptive_ocs_enable_disable_cmd_fixed_param; /* WMI_RESMGR_SET_CHAN_TIME_QUOTA_CMDID */ typedef struct { diff --git a/CORE/SERVICES/COMMON/wmi_version.h b/CORE/SERVICES/COMMON/wmi_version.h index f1acdda721c9..e59195f7f993 100644 --- a/CORE/SERVICES/COMMON/wmi_version.h +++ b/CORE/SERVICES/COMMON/wmi_version.h @@ -36,7 +36,7 @@ #define __WMI_VER_MINOR_ 0 /** WMI revision number has to be incremented when there is a * change that may or may not break compatibility. */ -#define __WMI_REVISION_ 23 +#define __WMI_REVISION_ 24 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work diff --git a/CORE/SERVICES/HIF/PCIe/hif_pci.c b/CORE/SERVICES/HIF/PCIe/hif_pci.c index 4db4fc73df17..54b578094a72 100644 --- a/CORE/SERVICES/HIF/PCIe/hif_pci.c +++ b/CORE/SERVICES/HIF/PCIe/hif_pci.c @@ -25,6 +25,7 @@ * to the Linux Foundation. */ + /* * Implementation of the Host-side Host InterFace (HIF) API * for a Host/Target interconnect using Copy Engines over PCIe. @@ -1520,6 +1521,9 @@ HIFStop(HIF_DEVICE *hif_device) } } + adf_os_timer_cancel(&hif_state->sleep_timer); + adf_os_timer_free(&hif_state->sleep_timer); + hif_state->started = FALSE; AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("-%s\n",__FUNCTION__)); } @@ -1937,6 +1941,34 @@ HIF_wake_target_cpu(struct hif_pci_softc *sc) ASSERT(rv == A_OK); } +#define HIF_MIN_SLEEP_INACTIVITY_TIME_MS 10 +#define HIF_SLEEP_INACTIVITY_TIMER_PERIOD_MS 20 +static void +HIF_sleep_entry(void *arg) +{ + struct HIF_CE_state *hif_state = (struct HIF_CE_state *)arg; + A_target_id_t pci_addr = TARGID_TO_PCI_ADDR(hif_state->targid); + struct hif_pci_softc *sc = hif_state->sc; + u_int32_t idle_ms; + + adf_os_spin_lock(&hif_state->keep_awake_lock); + if (hif_state->verified_awake == FALSE) { + idle_ms = adf_os_ticks_to_msecs(adf_os_ticks() + - hif_state->sleep_ticks); + if (idle_ms >= HIF_MIN_SLEEP_INACTIVITY_TIME_MS) { + A_PCI_WRITE32(pci_addr + PCIE_LOCAL_BASE_ADDRESS + + PCIE_SOC_WAKE_ADDRESS, PCIE_SOC_WAKE_RESET); + hif_state->fake_sleep = FALSE; + } else { + adf_os_timer_start(&hif_state->sleep_timer, + HIF_SLEEP_INACTIVITY_TIMER_PERIOD_MS); + } + } else { + adf_os_timer_start(&hif_state->sleep_timer, + HIF_SLEEP_INACTIVITY_TIMER_PERIOD_MS); + } + adf_os_spin_unlock(&hif_state->keep_awake_lock); +} /* * Called from PCI layer whenever a new PCI device is probed. @@ -1972,6 +2004,11 @@ HIF_PCIDeviceProbed(hif_handle_t hif_hdl) hif_state->keep_awake_count = 0; + hif_state->fake_sleep = FALSE; + hif_state->sleep_ticks = 0; + adf_os_timer_init(NULL, &hif_state->sleep_timer, + HIF_sleep_entry, (void *)hif_state); + hif_state->fw_indicator_address = FW_INDICATOR_ADDRESS; hif_state->targid = A_TARGET_ID(sc->hif_device); #if CONFIG_ATH_PCIE_MAX_PERF || CONFIG_ATH_PCIE_AWAKE_WHILE_DRIVER_LOAD @@ -2245,14 +2282,29 @@ HIFTargetSleepStateAdjust(A_target_id_t targid, if (hif_state->keep_awake_count == 0) { /* Allow sleep */ hif_state->verified_awake = FALSE; - A_PCI_WRITE32(pci_addr + PCIE_LOCAL_BASE_ADDRESS + PCIE_SOC_WAKE_ADDRESS, PCIE_SOC_WAKE_RESET); + hif_state->sleep_ticks = adf_os_ticks(); + } + if (hif_state->fake_sleep == FALSE) { + /* Set the Fake Sleep */ + hif_state->fake_sleep = TRUE; + + /* Start the Sleep Timer */ + adf_os_timer_cancel(&hif_state->sleep_timer); + adf_os_timer_start(&hif_state->sleep_timer, + HIF_SLEEP_INACTIVITY_TIMER_PERIOD_MS); } adf_os_spin_unlock(&hif_state->keep_awake_lock); } else { adf_os_spin_lock(&hif_state->keep_awake_lock); - if (hif_state->keep_awake_count == 0) { - /* Force AWAKE */ - A_PCI_WRITE32(pci_addr + PCIE_LOCAL_BASE_ADDRESS + PCIE_SOC_WAKE_ADDRESS, PCIE_SOC_WAKE_V_MASK); + + if (hif_state->fake_sleep) { + hif_state->verified_awake = TRUE; + } else { + if (hif_state->keep_awake_count == 0) { + /* Force AWAKE */ + A_PCI_WRITE32(pci_addr + PCIE_LOCAL_BASE_ADDRESS + + PCIE_SOC_WAKE_ADDRESS, PCIE_SOC_WAKE_V_MASK); + } } hif_state->keep_awake_count++; adf_os_spin_unlock(&hif_state->keep_awake_lock); diff --git a/CORE/SERVICES/HIF/PCIe/hif_pci.h b/CORE/SERVICES/HIF/PCIe/hif_pci.h index a87331003b3a..adb35a5f47f6 100644 --- a/CORE/SERVICES/HIF/PCIe/hif_pci.h +++ b/CORE/SERVICES/HIF/PCIe/hif_pci.h @@ -93,6 +93,9 @@ struct HIF_CE_state { adf_os_spinlock_t keep_awake_lock; unsigned int keep_awake_count; A_BOOL verified_awake; + A_BOOL fake_sleep; + adf_os_timer_t sleep_timer; + unsigned long sleep_ticks; //struct task_struct *pci_dev_inserted_thread; //struct completion pci_dev_inserted_thread_done; diff --git a/CORE/SERVICES/HIF/PCIe/if_pci.c b/CORE/SERVICES/HIF/PCIe/if_pci.c index 61255fb75dc5..4195aadb900d 100644 --- a/CORE/SERVICES/HIF/PCIe/if_pci.c +++ b/CORE/SERVICES/HIF/PCIe/if_pci.c @@ -38,6 +38,7 @@ #include #include "vos_api.h" #include "wma_api.h" +#include "adf_os_atomic.h" #if defined(QCA_WIFI_2_0) && !defined(QCA_WIFI_ISOC) #include "wlan_hdd_power.h" #endif diff --git a/CORE/SERVICES/WMA/inc/legacy/halMsgApi.h b/CORE/SERVICES/WMA/inc/legacy/halMsgApi.h index 79d2d491a33a..d7f68f052c7d 100644 --- a/CORE/SERVICES/WMA/inc/legacy/halMsgApi.h +++ b/CORE/SERVICES/WMA/inc/legacy/halMsgApi.h @@ -25,8 +25,6 @@ * to the Linux Foundation. */ -/* - * */ #ifndef _HALMSGAPI_H_ #define _HALMSGAPI_H_ @@ -285,7 +283,12 @@ typedef struct tANI_U8 vhtTxChannelWidthSet; tANI_U8 vhtTxBFCapable; tANI_U8 vhtTxMUBformeeCapable; + tANI_U8 enableVhtpAid; + tANI_U8 enableVhtGid; #endif + tANI_U8 enableAmpduPs; + tANI_U8 enableHtSmps; + tANI_U8 htSmpsconfig; tANI_U8 htLdpcCapable; tANI_U8 vhtLdpcCapable; diff --git a/CORE/SERVICES/WMA/wma.c b/CORE/SERVICES/WMA/wma.c index d14a8035f783..8b1fc76340a0 100644 --- a/CORE/SERVICES/WMA/wma.c +++ b/CORE/SERVICES/WMA/wma.c @@ -96,9 +96,11 @@ #include "dbglog_host.h" /* FIXME: Inclusion of .c looks odd but this is how it is in internal codebase */ #include "wmi_version_whitelist.c" +#include "csrApi.h" /* ################### defines ################### */ #define WMA_2_4_GHZ_MAX_FREQ 3000 +#define WOW_CSA_EVENT_OFFSET 12 #define WMA_DEFAULT_SCAN_PRIORITY 1 #define WMA_DEFAULT_SCAN_REQUESTER_ID 1 @@ -143,6 +145,11 @@ static VOS_STATUS wma_vdev_detach(tp_wma_handle wma_handle, static tANI_U32 gFwWlanFeatCaps; +static eHalStatus wma_set_ppsconfig(tANI_U8 vdev_id, tANI_U16 pps_param, + int value); +static eHalStatus wma_set_mimops(tp_wma_handle wma_handle, + tANI_U8 vdev_id, int value); + #if defined(QCA_WIFI_FTM) && !defined(QCA_WIFI_ISOC) void wma_utf_attach(tp_wma_handle wma_handle); void wma_utf_detach(tp_wma_handle wma_handle); @@ -361,6 +368,23 @@ static struct wma_target_req *wma_find_vdev_req(tp_wma_handle wma, return req_msg; } +tSmpsModeValue host_map_smps_mode (A_UINT32 fw_smps_mode) +{ + tSmpsModeValue smps_mode = SMPS_MODE_DISABLED; + switch (fw_smps_mode) { + case WMI_SMPS_FORCED_MODE_STATIC: + smps_mode = STATIC_SMPS_MODE; + break; + case WMI_SMPS_FORCED_MODE_DYNAMIC: + smps_mode = DYNAMIC_SMPS_MODE; + break; + default: + smps_mode = SMPS_MODE_DISABLED; + } + + return smps_mode; +} + static void wma_vdev_start_rsp(tp_wma_handle wma, tpAddBssParams add_bss, wmi_vdev_start_response_event_fixed_param *resp_event) @@ -413,6 +437,8 @@ static void wma_vdev_start_rsp(tp_wma_handle wma, #endif add_bss->status = VOS_STATUS_SUCCESS; add_bss->bssIdx = resp_event->vdev_id; + add_bss->chainMask = resp_event->chain_mask; + add_bss->smpsMode = host_map_smps_mode(resp_event->smps_mode); send_fail_resp: WMA_LOGD("%s: Sending add bss rsp to umac(vdev %d status %d)\n", __func__, resp_event->vdev_id, add_bss->status); @@ -447,6 +473,8 @@ static int wma_vdev_start_resp_handler(void *handle, u_int8_t *cmd_param_info, (tpSwitchChannelParams) req_msg->user_data; WMA_LOGD("%s: Send channel switch resp vdev %d status %d\n", __func__, resp_event->vdev_id, resp_event->status); + params->chainMask = resp_event->chain_mask; + params->smpsMode = host_map_smps_mode(resp_event->smps_mode); params->status = resp_event->status; wma_send_msg(wma, WDA_SWITCH_CHANNEL_RSP, (void *)params, 0); } else if (req_msg->msg_type == WDA_ADD_BSS_REQ) { @@ -1310,7 +1338,6 @@ static int wma_oem_data_rsp_event_callback(void *handle, u_int8_t *datap, vos_mem_copy(&pStartOemDataRsp->oemDataRsp[0], data, datalen); wma_send_msg(wma, WDA_START_OEM_DATA_RSP, (void *)pStartOemDataRsp, 0); - vos_mem_free(data); return 0; } @@ -1349,7 +1376,6 @@ static int wma_oem_data_error_report_event_callback(void *handle, vos_mem_copy(&pStartOemDataRsp->oemDataRsp[0], data, datalen); wma_send_msg(wma, WDA_START_OEM_DATA_RSP, (void *)data, 0); - vos_mem_free(data); return 0; } #endif /* FEATURE_OEM_DATA_SUPPORT */ @@ -2037,6 +2063,40 @@ static void wma_set_sap_keepalive(tp_wma_handle wma, u_int8_t vdev_id) max_unresponsive_time); } +static VOS_STATUS wma_set_enable_disable_mcc_adaptive_scheduler(tANI_U32 mcc_adaptive_scheduler) +{ + int ret = -1; + wmi_buf_t buf = 0; + wmi_resmgr_adaptive_ocs_enable_disable_cmd_fixed_param *cmd = NULL; + tp_wma_handle wma = NULL; + void *vos_context = NULL; + u_int16_t len = sizeof(wmi_resmgr_adaptive_ocs_enable_disable_cmd_fixed_param); + + vos_context = vos_get_global_context(VOS_MODULE_ID_WDA, NULL); + wma = vos_get_context(VOS_MODULE_ID_WDA, vos_context); + + buf = wmi_buf_alloc(wma->wmi_handle, len); + if (!buf) { + WMA_LOGP("%s : wmi_buf_alloc failed", __func__); + return VOS_STATUS_E_NOMEM; + } + cmd = (wmi_resmgr_adaptive_ocs_enable_disable_cmd_fixed_param *) wmi_buf_data(buf); + + WMITLV_SET_HDR(&cmd->tlv_header, + WMITLV_TAG_STRUC_wmi_resmgr_adaptive_ocs_enable_disable_cmd_fixed_param, + WMITLV_GET_STRUCT_TLVLEN( + wmi_resmgr_adaptive_ocs_enable_disable_cmd_fixed_param)); + cmd->enable = mcc_adaptive_scheduler; + + ret = wmi_unified_cmd_send(wma->wmi_handle, buf, len, + WMI_RESMGR_ADAPTIVE_OCS_ENABLE_DISABLE_CMDID); + if (ret) { + WMA_LOGP("Failed to send enable/disable MCC adaptive scheduler command"); + adf_nbuf_free(buf); + } + return VOS_STATUS_SUCCESS; +} + /* function : wma_vdev_attach * Descriptin : * Args : @@ -2197,6 +2257,18 @@ static ol_txrx_vdev_handle wma_vdev_attach(tp_wma_handle wma_handle, WMI_VDEV_PARAM_ROAM_FW_OFFLOAD, 1); } + if (wlan_cfgGetInt(mac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, + &cfg_val) == eSIR_SUCCESS) { + WMA_LOGD("\n%s: setting ini value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED: %d\n", + __func__, cfg_val); + ret = wma_set_enable_disable_mcc_adaptive_scheduler(cfg_val); + if (ret != VOS_STATUS_SUCCESS) { + WMA_LOGE("Failed to set WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED"); + } + } else { + WMA_LOGE("Failed to get value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, leaving unchanged"); + } + end: self_sta_req->status = status; @@ -2403,7 +2475,8 @@ VOS_STATUS wma_get_buf_start_scan_cmd(tp_wma_handle wma_handle, if (!scan_req->p2pScanType) { WMA_LOGD("Normal Scan request"); cmd->scan_ctrl_flags |= WMI_SCAN_ADD_CCK_RATES; - cmd->scan_ctrl_flags |= WMI_SCAN_ADD_BCAST_PROBE_REQ; + if (!scan_req->numSsid) + cmd->scan_ctrl_flags |= WMI_SCAN_ADD_BCAST_PROBE_REQ; if (scan_req->scanType == eSIR_PASSIVE_SCAN) cmd->scan_ctrl_flags |= WMI_SCAN_FLAG_PASSIVE; cmd->scan_ctrl_flags |= WMI_SCAN_FILTER_PROBE_REQ; @@ -2526,6 +2599,140 @@ error: } +/*AR9888/AR6320 noise floor approx value + * similar to the mentioned the TLSHIM + */ +#define WMA_TGT_NOISE_FLOOR_DBM (-96) +/* + * WMI event handler for periodic target stats event + */ + +static int wmi_unified_update_stats_event_handler(void* handle, + u_int8_t *data, u_int32_t datalen) +{ + wmi_stats_event_fixed_param *ev; + A_UINT8 *temp; + A_UINT8 i; + WMI_UPDATE_STATS_EVENTID_param_tlvs *param_buf; + tp_wma_handle wma = (tp_wma_handle) handle; + A_UINT8 rssi = 0; + tAniGetRssiReq *pGetRssiReq = (tAniGetRssiReq*)wma->pGetRssiReq; + u_int8_t vdev_id = 0; + wmi_vdev_stats *vdev_stats = NULL; + + if(NULL != pGetRssiReq) + vdev_id = pGetRssiReq->sessionId; + WMA_LOGD("%s: vdev_id %d\n", __func__, vdev_id); + param_buf = (WMI_UPDATE_STATS_EVENTID_param_tlvs *)data; + if (!param_buf) { + WMA_LOGE("%s: Received NULL buf ptr from FW", __func__); + return VOS_STATUS_E_NOMEM; + } + ev = param_buf->fixed_param; + if (NULL != param_buf->data) + temp = (A_UINT8 *)param_buf->data; + if (NULL != ev) { + for (i = 0; i < ev->num_vdev_stats; i++) { + if(NULL == temp ) + continue ; + vdev_stats = (wmi_vdev_stats *)temp; + if(NULL == vdev_stats) + continue; + WMA_LOGE("vdev id %d beancon snr %d data snr %d\n", + vdev_stats->vdev_id, vdev_stats->vdev_snr.bcn_snr, + vdev_stats->vdev_snr.dat_snr); + /* if the data average rssi present return that, + * else return beacon average rssi + */ + if (vdev_stats->vdev_id == vdev_id) { + if((vdev_stats->vdev_snr.dat_snr > 0) && (vdev_stats->vdev_snr.bcn_snr > 0)) + rssi = (vdev_stats->vdev_snr.dat_snr + vdev_stats->vdev_snr.bcn_snr)/2; + else + rssi = vdev_stats->vdev_snr.bcn_snr; + /* Get the absolute rssi value from the current rssi value + * the sinr value is hardcoded into 0 in the core stack + */ + rssi = rssi + WMA_TGT_NOISE_FLOOR_DBM; + WMA_LOGE("Average Rssi = %d, vdev id= %d",(int)rssi, vdev_id); + + /* update the average rssi value to UMAC layer */ + if ((NULL != pGetRssiReq) && (NULL != pGetRssiReq->rssiCallback)) { + ((tCsrRssiCallback)(pGetRssiReq->rssiCallback))(rssi,pGetRssiReq->staId, + pGetRssiReq->pDevContext); + pGetRssiReq->rssiCallback = NULL; + vos_mem_free(pGetRssiReq); + wma->pGetRssiReq = NULL; + } + else { + WMA_LOGE("WMA pGetRssiReq->rssiCallback is NULL"); + if (NULL != pGetRssiReq) { + vos_mem_free(pGetRssiReq); + wma->pGetRssiReq = NULL; + } + } + break; + } + + temp += sizeof(wmi_vdev_stats); + } + } + + return VOS_STATUS_SUCCESS; +} + + +/* + * Return the data rssi for the given peer. + */ +VOS_STATUS wma_send_snr_request(tp_wma_handle wma_handle, void *pGetRssiReq) +{ + wmi_buf_t buf; + wmi_request_stats_cmd_fixed_param *cmd; + u_int8_t len = sizeof(wmi_request_stats_cmd_fixed_param); + tAniGetRssiReq *pRssiBkUp = NULL; + + /* command is in progess */ + if(NULL != wma_handle->pGetRssiReq) + return VOS_STATUS_SUCCESS; + + /* create a copy of csrRssiCallback to send rssi value + * after wmi event + */ + if(pGetRssiReq) { + pRssiBkUp = adf_os_mem_alloc(NULL, sizeof(tAniGetRssiReq)); + if(!pRssiBkUp) { + WMA_LOGE("Failed to allocate memory for tAniGetRssiReq"); + vos_mem_free(pRssiBkUp); + wma_handle->pGetRssiReq = NULL; + return VOS_STATUS_E_FAILURE; + } + adf_os_mem_set(pRssiBkUp, 0, sizeof(tAniGetRssiReq)); + pRssiBkUp->sessionId = ((tAniGetRssiReq*)pGetRssiReq)->sessionId; + pRssiBkUp->rssiCallback = ((tAniGetRssiReq*)pGetRssiReq)->rssiCallback; + pRssiBkUp->pDevContext = ((tAniGetRssiReq*)pGetRssiReq)->pDevContext; + wma_handle->pGetRssiReq = (void*)pRssiBkUp; + } + + buf = wmi_buf_alloc(wma_handle->wmi_handle, len); + if (!buf) { + WMA_LOGE("%s: wmi_buf_alloc failed", __func__); + return VOS_STATUS_E_FAILURE; + } + + cmd = (wmi_request_stats_cmd_fixed_param *)wmi_buf_data(buf); + WMITLV_SET_HDR(&cmd->tlv_header, WMITLV_TAG_STRUC_wmi_request_stats_cmd_fixed_param, + WMITLV_GET_STRUCT_TLVLEN(wmi_request_stats_cmd_fixed_param)); + cmd->stats_id = WMI_REQUEST_VDEV_STAT; + if (wmi_unified_cmd_send(wma_handle->wmi_handle, buf, len,WMI_REQUEST_STATS_CMDID)) { + WMA_LOGE("Failed to send host stats request to fw"); + wmi_buf_free(buf); + vos_mem_free(pRssiBkUp); + wma_handle->pGetRssiReq = NULL; + return VOS_STATUS_E_FAILURE; + } + return VOS_STATUS_SUCCESS; +} + /* function : wma_start_scan * Descriptin : * Args : @@ -3270,7 +3477,7 @@ VOS_STATUS wma_process_roam_scan_req(tp_wma_handle wma_handle, wmi_ap_profile ap_profile; tpAniSirGlobal pMac = (tpAniSirGlobal)vos_get_context(VOS_MODULE_ID_PE, wma_handle->vos_context); - A_INT8 noise_floor = WMI_DEFAULT_NOISE_FLOOR_DBM; + A_INT32 noise_floor = WMI_DEFAULT_NOISE_FLOOR_DBM; WMA_LOGI("%s: command 0x%x\n", __func__, roam_req->Command); if (!pMac->roam.configParam.isFastRoamIniFeatureEnabled) { @@ -4775,6 +4982,7 @@ static void wma_add_bss_ap_mode(tp_wma_handle wma, tpAddBssParams add_bss) struct wma_target_req *msg; u_int8_t vdev_id, peer_id; VOS_STATUS status; + tPowerdBm maxTxPower; pdev = vos_get_context(VOS_MODULE_ID_TXRX, wma->vos_context); vdev = wma_find_vdev_by_addr(wma, add_bss->bssId, &vdev_id); @@ -4812,8 +5020,10 @@ static void wma_add_bss_ap_mode(tp_wma_handle wma, tpAddBssParams add_bss) req.vht_capable = add_bss->vhtCapable; #if defined WLAN_FEATURE_VOWIFI req.max_txpow = add_bss->maxTxPower; + maxTxPower = add_bss->maxTxPower; #else req.max_txpow = 0; + maxTxPower = 0; #endif req.beacon_intval = add_bss->beaconInterval; req.dtim_period = add_bss->dtimPeriod; @@ -4832,12 +5042,11 @@ static void wma_add_bss_ap_mode(tp_wma_handle wma, tpAddBssParams add_bss) goto peer_cleanup; } - /* Initialize protection mode to no protection */ - if (wmi_unified_vdev_set_param_send(wma->wmi_handle, vdev_id, - WMI_VDEV_PARAM_PROTECTION_MODE, - IEEE80211_PROT_NONE)) { - WMA_LOGE("Failed to initialize protection mode"); - } + /* Configure rest of bss info once the vdev started */ + wma_vdev_set_bss_params(wma, vdev_id, + add_bss->beaconInterval, add_bss->dtimPeriod, + add_bss->shortSlotTimeSupported, add_bss->llbCoexist, + maxTxPower); return; @@ -5507,6 +5716,30 @@ static void wma_add_sta_req_sta_mode(tp_wma_handle wma, tpAddStaParams params) status = VOS_STATUS_E_FAILURE; } + /* Sta is now associated, configure various params */ + + /* SM power save, configure the h/w as configured + * in the ini file. SMPS is not published in assoc + * request. Once configured, fw sends the required + * action frame to AP. + */ + if (params->enableHtSmps) + wma_set_mimops(wma, params->smesessionId, + params->htSmpsconfig); + +#ifdef WLAN_FEATURE_11AC + /* Partial AID match power save, enable when SU bformee*/ + if (params->enableVhtpAid && params->vhtTxBFCapable) + wma_set_ppsconfig(params->smesessionId, + WMA_VHT_PPS_PAID_MATCH, 1); +#endif + + /* Enable AMPDU power save, if htCapable/vhtCapable */ + if (params->enableAmpduPs && + (params->htCapable || params->vhtCapable)) + wma_set_ppsconfig(params->smesessionId, + WMA_VHT_PPS_DELIM_CRC_FAIL, 1); + out: params->status = status; WMA_LOGD("%s: statype %d vdev_id %d aid %d bssid %pM staIdx %d status %d\n", @@ -6693,7 +6926,17 @@ static int32_t wma_set_force_sleep(tp_wma_handle wma, u_int32_t vdev_id, u_int8_ /* override normal configuration and force station asleep */ rx_wake_policy = WMI_STA_PS_RX_WAKE_POLICY_POLL_UAPSD; tx_wake_threshold = WMI_STA_PS_TX_WAKE_THRESHOLD_NEVER; - pspoll_count = WMI_STA_PS_PSPOLL_COUNT_NO_MAX; + + if (wlan_cfgGetInt(mac, WNI_CFG_MAX_PS_POLL, + &cfg_data_val ) != eSIR_SUCCESS) { + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "Failed to get value for WNI_CFG_MAX_PS_POLL"); + } + if (cfg_data_val) + pspoll_count = (u_int32_t)cfg_data_val; + else + pspoll_count = WMA_DEFAULT_MAX_PSPOLL_BEFORE_WAKE; + inactivity_time = 0; psmode = WMI_STA_PS_MODE_ENABLED; } else { @@ -6825,7 +7068,7 @@ static int32_t wma_set_qpower_force_sleep(tp_wma_handle wma, u_int32_t vdev_id, (struct sAniSirGlobal*)vos_get_context(VOS_MODULE_ID_PE, wma->vos_context); u_int32_t tx_wake_threshold = WMA_DEFAULT_QPOWER_TX_WAKE_THRESHOLD; - u_int32_t pspoll_count = WMA_DEFAULT_QPOWER_MAX_PSPOLL_BEFORE_WAKE; + u_int32_t pspoll_count = WMA_DEFAULT_MAX_PSPOLL_BEFORE_WAKE; WMA_LOGE("Set QPower Force(1)/Normal(0) Sleep vdevId %d val %d", vdev_id, enable); @@ -7127,8 +7370,7 @@ wmi_unified_set_sta_uapsd_auto_trig_cmd( { wmi_sta_uapsd_auto_trig_cmd_fixed_param *cmd; int32_t ret; - u_int32_t param_len = (num_ac - 1) * - sizeof(wmi_sta_uapsd_auto_trig_param); + u_int32_t param_len = num_ac * sizeof(wmi_sta_uapsd_auto_trig_param); u_int32_t cmd_len = sizeof(*cmd) + param_len + WMI_TLV_HDR_SIZE; u_int32_t i; wmi_buf_t buf; @@ -7605,6 +7847,15 @@ static int wma_wow_wakeup_host_event(void *handle, u_int8_t *event, } } + if (wake_info->wake_reason == WOW_REASON_CSA_EVENT) { + WMI_CSA_HANDLING_EVENTID_param_tlvs param; + + WMA_LOGD("Host woken up because of CSA IE"); + param.fixed_param = (wmi_csa_event_fixed_param *) (((u_int8_t *) wake_info) + + sizeof(WOW_EVENT_INFO_fixed_param) + WOW_CSA_EVENT_OFFSET); + wma_csa_offload_handler(handle, (u_int8_t *)¶m, sizeof(param)); + } + return 0; } @@ -7935,7 +8186,13 @@ static VOS_STATUS wma_wow_ap(tp_wma_handle wma, u_int8_t vdev_id) 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff /* port 67 */ }; u_int8_t dhcp_offset = 0; - VOS_STATUS ret; + VOS_STATUS ret = VOS_STATUS_SUCCESS; + + if (!wma->interfaces[vdev_id].vdev_up || + !WMI_SERVICE_IS_ENABLED(wma->wmi_service_bitmap, + WMI_SERVICE_BEACON_OFFLOAD)) { + return ret; + } WMA_LOGD("Configuring default AP mode wow pattern for vdev %d", vdev_id); @@ -8112,7 +8369,8 @@ static VOS_STATUS wma_feed_wow_config_to_fw(tp_wma_handle wma) if (!iface->handle || !iface->ptrn_match_enable || - !iface->conn_state) + (!wma_is_vdev_in_ap_mode(wma, vdev_id) && + !iface->conn_state)) continue; if (wma_is_wow_prtn_cached(wma, vdev_id)) { @@ -8372,25 +8630,40 @@ static VOS_STATUS wma_suspend_req(tp_wma_handle wma, tpSirWlanSuspendParam info) wma->no_of_suspend_ind = 0; - /* At-least one vdev should be in connected state to enable WOW */ + /* + * Enable WOW if any one of the condition meets, + * 1) Is any one of vdev in beaconning mode (in AP mode) ? + * 2) Is any one of vdev in connected state (in STA mode) ? + * 3) Is PNO in progress in any one of vdev ? + */ + for (i = 0; i < wma->max_bssid; i++) { + if (wma_is_vdev_in_ap_mode(wma, i) && + wma->interfaces[i].vdev_up && + WMI_SERVICE_IS_ENABLED(wma->wmi_service_bitmap, + WMI_SERVICE_BEACON_OFFLOAD)) { + WMA_LOGD("vdev %d is in beaconning mode, enabling wow", + i); + goto enable_wow; + } + } for (i = 0; i < wma->max_bssid; i++) { if (wma->interfaces[i].conn_state) { connected = TRUE; break; } if (wma->interfaces[i].pno_in_progress) { - WMA_LOGD("PNO is in progress during suspend"); + WMA_LOGD("PNO is in progress, enabling wow"); pno_in_progress = TRUE; break; } } - if (!connected && !pno_in_progress) { WMA_LOGD("All vdev are in disconnected state, skipping wow"); vos_mem_free(info); goto send_ready_to_suspend; } +enable_wow: WMA_LOGD("WOW Suspend"); /* @@ -8610,119 +8883,6 @@ static void wma_start_oem_data_req(tp_wma_handle wma_handle, return; } #endif /* FEATURE_OEM_DATA_SUPPORT */ -static int wma_process_receive_filter_set_filter_req(tp_wma_handle wma_handle, - tSirRcvPktFilterCfgType *rcv_filter_param) -{ - wmi_chatter_coalescing_add_filter_cmd_fixed_param *cmd; - chatter_pkt_coalescing_filter *cmd_filter; - u_int8_t *buf_ptr; - wmi_buf_t buf; - int num_rules = 1; /* Only one rule at a time */ - int len; - int err; - int i; - - /* allocate the memory */ - len = sizeof(*cmd) + WMI_TLV_HDR_SIZE + sizeof(*cmd_filter) * num_rules; - buf = wmi_buf_alloc(wma_handle->wmi_handle, len); - if (!buf) { - WMA_LOGE("Failed to allocate buffer to send set_param cmd"); - vos_mem_free(rcv_filter_param); - return -ENOMEM; - } - buf_ptr = (u_int8_t *) wmi_buf_data(buf); - - /* fill the fixed part */ - cmd = (wmi_chatter_coalescing_add_filter_cmd_fixed_param *) buf_ptr; - WMITLV_SET_HDR(&cmd->tlv_header, - WMITLV_TAG_STRUC_wmi_chatter_coalescing_add_filter_cmd_fixed_param, - WMITLV_GET_STRUCT_TLVLEN( - wmi_chatter_coalescing_add_filter_cmd_fixed_param)); - cmd->num_of_filters = num_rules; - - /* specify the type of data in the subsequent buffer */ - buf_ptr += sizeof(*cmd); - cmd_filter = (chatter_pkt_coalescing_filter *) buf_ptr; - WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, - num_rules * sizeof(chatter_pkt_coalescing_filter)); - - /* fill the actual filter data */ - buf_ptr += WMI_TLV_HDR_SIZE; - cmd_filter = (chatter_pkt_coalescing_filter *) buf_ptr; - - WMITLV_SET_HDR(&cmd_filter->tlv_header, - WMITLV_TAG_STRUC_wmi_chatter_pkt_coalescing_filter, - WMITLV_GET_STRUCT_TLVLEN(chatter_pkt_coalescing_filter)); - - cmd_filter->filter_id = rcv_filter_param->filterId; - cmd_filter->max_coalescing_delay = rcv_filter_param->coalesceTime; - cmd_filter->pkt_type = CHATTER_COALESCING_PKT_TYPE_UNICAST | - CHATTER_COALESCING_PKT_TYPE_MULTICAST | - CHATTER_COALESCING_PKT_TYPE_BROADCAST; - cmd_filter->num_of_test_field = MIN(rcv_filter_param->numFieldParams, - CHATTER_MAX_FIELD_TEST); - - for (i = 0; i < cmd_filter->num_of_test_field; i++) { - cmd_filter->test_fields[i].offset = rcv_filter_param->paramsData[i].dataOffset; - cmd_filter->test_fields[i].length = MIN(rcv_filter_param->paramsData[i].dataLength, - CHATTER_MAX_TEST_FIELD_LEN32); - cmd_filter->test_fields[i].test = rcv_filter_param->paramsData[i].cmpFlag; - memcpy(&cmd_filter->test_fields[i].value, rcv_filter_param->paramsData[i].compareData, - cmd_filter->test_fields[i].length); - memcpy(&cmd_filter->test_fields[i].mask, rcv_filter_param->paramsData[i].dataMask, - cmd_filter->test_fields[i].length); - } - WMA_LOGD("Chatter packets, adding filter with id: %d, num_test_fields=%d",cmd_filter->filter_id, - cmd_filter->num_of_test_field); - /* send the command along with data */ - err = wmi_unified_cmd_send(wma_handle->wmi_handle, buf, len, - WMI_CHATTER_ADD_COALESCING_FILTER_CMDID); - if (err) { - WMA_LOGE("Failed to send set_param cmd"); - wmi_buf_free(buf); - vos_mem_free(rcv_filter_param); - return -EIO; - } - vos_mem_free(rcv_filter_param); - return 0; /* SUCCESS */ -} - -static int wma_process_receive_filter_clear_filter_req(tp_wma_handle wma_handle, - tSirRcvFltPktClearParam *rcv_clear_param) -{ - wmi_chatter_coalescing_delete_filter_cmd_fixed_param *cmd; - wmi_buf_t buf; - int err; - - /* allocate the memory */ - buf = wmi_buf_alloc(wma_handle->wmi_handle, sizeof(*cmd)); - if (!buf) { - WMA_LOGE("Failed to allocate buffer to send set_param cmd"); - vos_mem_free(rcv_clear_param); - return -ENOMEM; - } - - /* fill the fixed part */ - cmd = (wmi_chatter_coalescing_delete_filter_cmd_fixed_param *) wmi_buf_data(buf); - WMITLV_SET_HDR(&cmd->tlv_header, - WMITLV_TAG_STRUC_wmi_chatter_coalescing_delete_filter_cmd_fixed_param, - WMITLV_GET_STRUCT_TLVLEN( - wmi_chatter_coalescing_delete_filter_cmd_fixed_param)); - cmd->filter_id = rcv_clear_param->filterId; - WMA_LOGD("Chatter packets, clearing filter with id: %d",cmd->filter_id); - - /* send the command along with data */ - err = wmi_unified_cmd_send(wma_handle->wmi_handle, buf, - sizeof(*cmd), WMI_CHATTER_DELETE_COALESCING_FILTER_CMDID); - if (err) { - WMA_LOGE("Failed to send set_param cmd"); - wmi_buf_free(buf); - vos_mem_free(rcv_clear_param); - return -EIO; - } - vos_mem_free(rcv_clear_param); - return 0; /* SUCCESS */ -} #ifdef FEATURE_WLAN_CCX @@ -8941,6 +9101,120 @@ err: wma_send_msg(wma, WDA_ADD_TS_RSP, msg, 0); } +static int wma_process_receive_filter_set_filter_req(tp_wma_handle wma_handle, + tSirRcvPktFilterCfgType *rcv_filter_param) +{ + wmi_chatter_coalescing_add_filter_cmd_fixed_param *cmd; + chatter_pkt_coalescing_filter *cmd_filter; + u_int8_t *buf_ptr; + wmi_buf_t buf; + int num_rules = 1; /* Only one rule at a time */ + int len; + int err; + int i; + + /* allocate the memory */ + len = sizeof(*cmd) + WMI_TLV_HDR_SIZE + sizeof(*cmd_filter) * num_rules; + buf = wmi_buf_alloc(wma_handle->wmi_handle, len); + if (!buf) { + WMA_LOGE("Failed to allocate buffer to send set_param cmd"); + vos_mem_free(rcv_filter_param); + return -ENOMEM; + } + buf_ptr = (u_int8_t *) wmi_buf_data(buf); + + /* fill the fixed part */ + cmd = (wmi_chatter_coalescing_add_filter_cmd_fixed_param *) buf_ptr; + WMITLV_SET_HDR(&cmd->tlv_header, + WMITLV_TAG_STRUC_wmi_chatter_coalescing_add_filter_cmd_fixed_param, + WMITLV_GET_STRUCT_TLVLEN( + wmi_chatter_coalescing_add_filter_cmd_fixed_param)); + cmd->num_of_filters = num_rules; + + /* specify the type of data in the subsequent buffer */ + buf_ptr += sizeof(*cmd); + cmd_filter = (chatter_pkt_coalescing_filter *) buf_ptr; + WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, + num_rules * sizeof(chatter_pkt_coalescing_filter)); + + /* fill the actual filter data */ + buf_ptr += WMI_TLV_HDR_SIZE; + cmd_filter = (chatter_pkt_coalescing_filter *) buf_ptr; + + WMITLV_SET_HDR(&cmd_filter->tlv_header, + WMITLV_TAG_STRUC_wmi_chatter_pkt_coalescing_filter, + WMITLV_GET_STRUCT_TLVLEN(chatter_pkt_coalescing_filter)); + + cmd_filter->filter_id = rcv_filter_param->filterId; + cmd_filter->max_coalescing_delay = rcv_filter_param->coalesceTime; + cmd_filter->pkt_type = CHATTER_COALESCING_PKT_TYPE_UNICAST | + CHATTER_COALESCING_PKT_TYPE_MULTICAST | + CHATTER_COALESCING_PKT_TYPE_BROADCAST; + cmd_filter->num_of_test_field = MIN(rcv_filter_param->numFieldParams, + CHATTER_MAX_FIELD_TEST); + + for (i = 0; i < cmd_filter->num_of_test_field; i++) { + cmd_filter->test_fields[i].offset = rcv_filter_param->paramsData[i].dataOffset; + cmd_filter->test_fields[i].length = MIN(rcv_filter_param->paramsData[i].dataLength, + CHATTER_MAX_TEST_FIELD_LEN32); + cmd_filter->test_fields[i].test = rcv_filter_param->paramsData[i].cmpFlag; + memcpy(&cmd_filter->test_fields[i].value, rcv_filter_param->paramsData[i].compareData, + cmd_filter->test_fields[i].length); + memcpy(&cmd_filter->test_fields[i].mask, rcv_filter_param->paramsData[i].dataMask, + cmd_filter->test_fields[i].length); + } + WMA_LOGD("Chatter packets, adding filter with id: %d, num_test_fields=%d",cmd_filter->filter_id, + cmd_filter->num_of_test_field); + /* send the command along with data */ + err = wmi_unified_cmd_send(wma_handle->wmi_handle, buf, len, + WMI_CHATTER_ADD_COALESCING_FILTER_CMDID); + if (err) { + WMA_LOGE("Failed to send set_param cmd"); + wmi_buf_free(buf); + vos_mem_free(rcv_filter_param); + return -EIO; + } + vos_mem_free(rcv_filter_param); + return 0; /* SUCCESS */ +} + +static int wma_process_receive_filter_clear_filter_req(tp_wma_handle wma_handle, + tSirRcvFltPktClearParam *rcv_clear_param) +{ + wmi_chatter_coalescing_delete_filter_cmd_fixed_param *cmd; + wmi_buf_t buf; + int err; + + /* allocate the memory */ + buf = wmi_buf_alloc(wma_handle->wmi_handle, sizeof(*cmd)); + if (!buf) { + WMA_LOGE("Failed to allocate buffer to send set_param cmd"); + vos_mem_free(rcv_clear_param); + return -ENOMEM; + } + + /* fill the fixed part */ + cmd = (wmi_chatter_coalescing_delete_filter_cmd_fixed_param *) wmi_buf_data(buf); + WMITLV_SET_HDR(&cmd->tlv_header, + WMITLV_TAG_STRUC_wmi_chatter_coalescing_delete_filter_cmd_fixed_param, + WMITLV_GET_STRUCT_TLVLEN( + wmi_chatter_coalescing_delete_filter_cmd_fixed_param)); + cmd->filter_id = rcv_clear_param->filterId; + WMA_LOGD("Chatter packets, clearing filter with id: %d",cmd->filter_id); + + /* send the command along with data */ + err = wmi_unified_cmd_send(wma_handle->wmi_handle, buf, + sizeof(*cmd), WMI_CHATTER_DELETE_COALESCING_FILTER_CMDID); + if (err) { + WMA_LOGE("Failed to send set_param cmd"); + wmi_buf_free(buf); + vos_mem_free(rcv_clear_param); + return -EIO; + } + vos_mem_free(rcv_clear_param); + return 0; /* SUCCESS */ +} + static void wma_data_tx_ack_work_handler(struct work_struct *ack_work) { struct wma_tx_ack_work_ctx *work = container_of(ack_work, @@ -9893,6 +10167,35 @@ VOS_STATUS wma_process_rate_update_indicate(tp_wma_handle wma, return VOS_STATUS_SUCCESS; } +#ifdef WLAN_FEATURE_11AC +static void wma_process_update_membership(tp_wma_handle wma_handle, + tUpdateMembership *membership) +{ + WMA_LOGD("%s: membership = %x \n", __func__, + membership->membership); + + wma_set_peer_param(wma_handle, membership->peer_mac, + WMI_PEER_MEMBERSHIP, membership->membership, + membership->smesessionId); +} + +static void wma_process_update_userpos(tp_wma_handle wma_handle, + tUpdateUserPos *userpos) +{ + WMA_LOGD("%s: userPos = %x \n", __func__, userpos->userPos); + + wma_set_peer_param(wma_handle, userpos->peer_mac, + WMI_PEER_USERPOS, userpos->userPos, + userpos->smesessionId); + + /* Now that membership/userpos is updated in fw, + * enable GID PPS. + */ + wma_set_ppsconfig(userpos->smesessionId, + WMA_VHT_PPS_GID_MATCH, 1); + +} +#endif /* function : wma_mc_process_msg * Descriptin : * Args : @@ -9969,7 +10272,6 @@ VOS_STATUS wma_mc_process_msg(v_VOID_t *vos_context, vos_msg_t *msg) case WDA_UPDATE_CHAN_LIST_REQ: wma_update_channel_list(wma_handle, (tSirUpdateChanList *)msg->bodyptr); - vos_mem_free(msg->bodyptr); break; case WDA_SET_LINK_STATE: wma_set_linkstate(wma_handle, @@ -10085,6 +10387,16 @@ VOS_STATUS wma_mc_process_msg(v_VOID_t *vos_context, vos_msg_t *msg) wma_process_update_opmode(wma_handle, (tUpdateVHTOpMode *)msg->bodyptr); break; +#ifdef WLAN_FEATURE_11AC + case WDA_UPDATE_MEMBERSHIP: + wma_process_update_membership(wma_handle, + (tUpdateMembership *)msg->bodyptr); + break; + case WDA_UPDATE_USERPOS: + wma_process_update_userpos(wma_handle, + (tUpdateUserPos *)msg->bodyptr); + break; +#endif case WDA_UPDATE_BEACON_IND: wma_process_update_beacon_params(wma_handle, (tUpdateBeaconParams *)msg->bodyptr); @@ -10167,7 +10479,7 @@ VOS_STATUS wma_mc_process_msg(v_VOID_t *vos_context, vos_msg_t *msg) wma_enable_arp_ns_offload(wma_handle, (tpSirHostOffloadReq)msg->bodyptr, false); break; #endif /*WLAN_NS_OFFLOAD */ - case WDA_START_ROAM_CANDIDATE_LOOKUP_REQ: + case WDA_ROAM_SCAN_OFFLOAD_REQ: /* * Main entry point or roaming directives from CSR. */ @@ -10657,6 +10969,14 @@ VOS_STATUS wma_start(v_VOID_t *vos_ctx) vos_status = VOS_STATUS_E_FAILURE; goto end; } + /* register target stats event handler */ + status = wmi_unified_register_event_handler(wma_handle->wmi_handle, WMI_UPDATE_STATS_EVENTID, + wmi_unified_update_stats_event_handler); + if (status) { + WMA_LOGP("Failed to register stats event handler"); + vos_status = VOS_STATUS_E_FAILURE; + goto end; + } #ifdef FEATURE_WLAN_SCAN_PNO if (WMI_SERVICE_IS_ENABLED(wma_handle->wmi_service_bitmap, @@ -10985,6 +11305,8 @@ static inline void wma_update_target_services(tp_wma_handle wh, if (WMI_SERVICE_IS_ENABLED(wh->wmi_service_bitmap, WMI_SERVICE_NLO)) cfg->pno_offload = TRUE; #endif + cfg->lte_coex_ant_share = WMI_SERVICE_IS_ENABLED(wh->wmi_service_bitmap, + WMI_SERVICE_LTE_ANT_SHARE_SUPPORT); } static inline void wma_update_target_ht_cap(tp_wma_handle wh, @@ -11673,6 +11995,17 @@ VOS_STATUS WDA_TxPacket(void *wma_context, void *tx_frame, u_int16_t frmLen, return VOS_STATUS_E_FAILURE; } + if ((frmType == HAL_TXRX_FRM_802_11_MGMT) && + (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)) { + u_int64_t adjusted_tsf_le; + struct ieee80211_frame *wh = + (struct ieee80211_frame *)adf_nbuf_data(tx_frame); + + /* Make the TSF offset negative to match TSF in beacons */ + adjusted_tsf_le = cpu_to_le64(0ULL - + wma_handle->interfaces[vdev_id].tsfadjust); + A_MEMCPY(&wh[1], &adjusted_tsf_le, sizeof(adjusted_tsf_le)); + } if (frmType == HAL_TXRX_FRM_802_11_DATA) { adf_nbuf_t ret; adf_nbuf_t skb = (adf_nbuf_t)tx_frame; @@ -12407,9 +12740,10 @@ eHalStatus wma_set_htconfig(tANI_U8 vdev_id, tANI_U16 ht_capab, int value) return (ret)? eHAL_STATUS_FAILURE : eHAL_STATUS_SUCCESS; } -eHalStatus WMA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId) +eHalStatus WMA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId, + tAniBool sendRegHint) { - if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId)) + if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId, sendRegHint)) return eHAL_STATUS_INVALID_PARAMETER; return eHAL_STATUS_SUCCESS; @@ -12468,3 +12802,114 @@ tANI_U8 wma_map_channel(tANI_U8 mapChannel) { return mapChannel; } + +static eHalStatus wma_set_mimops(tp_wma_handle wma, tANI_U8 vdev_id, int value) +{ + int ret = eHAL_STATUS_SUCCESS; + wmi_sta_smps_force_mode_cmd_fixed_param *cmd; + wmi_buf_t buf; + u_int16_t len = sizeof(*cmd); + + buf = wmi_buf_alloc(wma->wmi_handle, len); + if (!buf) { + WMA_LOGE("%s:wmi_buf_alloc failed", __func__); + return -ENOMEM; + } + cmd = (wmi_sta_smps_force_mode_cmd_fixed_param *) wmi_buf_data(buf); + WMITLV_SET_HDR(&cmd->tlv_header, + WMITLV_TAG_STRUC_wmi_sta_smps_force_mode_cmd_fixed_param, + WMITLV_GET_STRUCT_TLVLEN( + wmi_sta_smps_force_mode_cmd_fixed_param)); + + cmd->vdev_id = vdev_id; + + switch(value) + { + case 0: + cmd->forced_mode = WMI_SMPS_FORCED_MODE_STATIC; + break; + case 1: + cmd->forced_mode = WMI_SMPS_FORCED_MODE_DYNAMIC; + break; + case 3: + cmd->forced_mode = WMI_SMPS_FORCED_MODE_DISABLED; + break; + default: + WMA_LOGE("%s:INVALID Mimo PS CONFIG", __func__); + return eHAL_STATUS_FAILURE; + } + + WMA_LOGD("Setting vdev %d value = %u", vdev_id, value); + + ret = wmi_unified_cmd_send(wma->wmi_handle, buf, len, + WMI_STA_SMPS_FORCE_MODE_CMDID); + if (ret < 0) { + WMA_LOGE("Failed to send set Mimo PS ret = %d", ret); + wmi_buf_free(buf); + } + + return ret; +} + +static eHalStatus wma_set_ppsconfig(tANI_U8 vdev_id, tANI_U16 pps_param, int val) +{ + void *vos_context = vos_get_global_context(VOS_MODULE_ID_WDA, NULL); + tp_wma_handle wma = vos_get_context(VOS_MODULE_ID_WDA, vos_context); + int ret = -EIO; + u_int32_t pps_val; + + switch (pps_param) { + case WMA_VHT_PPS_PAID_MATCH: + pps_val = ((val << 31) & 0xffff0000) | + (PKT_PWR_SAVE_PAID_MATCH & 0xffff); + goto pkt_pwr_save_config; + case WMA_VHT_PPS_GID_MATCH: + pps_val = ((val << 31) & 0xffff0000) | + (PKT_PWR_SAVE_GID_MATCH & 0xffff); + goto pkt_pwr_save_config; + case WMA_VHT_PPS_DELIM_CRC_FAIL: + pps_val = ((val << 31) & 0xffff0000) | + (PKT_PWR_SAVE_DELIM_CRC_FAIL & 0xffff); + goto pkt_pwr_save_config; + + /* Enable the code below as and when the functionality + * is supported/added in host. + */ +#ifdef NOT_YET + case WMA_VHT_PPS_EARLY_TIM_CLEAR: + pps_val = ((val << 31) & 0xffff0000) | + (PKT_PWR_SAVE_EARLY_TIM_CLEAR & 0xffff); + goto pkt_pwr_save_config; + case WMA_VHT_PPS_EARLY_DTIM_CLEAR: + pps_val = ((val << 31) & 0xffff0000) | + (PKT_PWR_SAVE_EARLY_DTIM_CLEAR & 0xffff); + goto pkt_pwr_save_config; + case WMA_VHT_PPS_EOF_PAD_DELIM: + pps_val = ((val << 31) & 0xffff0000) | + (PKT_PWR_SAVE_EOF_PAD_DELIM & 0xffff); + goto pkt_pwr_save_config; + case WMA_VHT_PPS_MACADDR_MISMATCH: + pps_val = ((val << 31) & 0xffff0000) | + (PKT_PWR_SAVE_MACADDR_MISMATCH & 0xffff); + goto pkt_pwr_save_config; + case WMA_VHT_PPS_GID_NSTS_ZERO: + pps_val = ((val << 31) & 0xffff0000) | + (PKT_PWR_SAVE_GID_NSTS_ZERO & 0xffff); + goto pkt_pwr_save_config; + case WMA_VHT_PPS_RSSI_CHECK: + pps_val = ((val << 31) & 0xffff0000) | + (PKT_PWR_SAVE_RSSI_CHECK & 0xffff); + goto pkt_pwr_save_config; +#endif +pkt_pwr_save_config: + WMA_LOGD("vdev_id:%d val:0x%x pps_val:0x%x\n", vdev_id, + val, pps_val); + ret = wmi_unified_vdev_set_param_send(wma->wmi_handle, vdev_id, + WMI_VDEV_PARAM_PACKET_POWERSAVE, pps_val); + break; + default: + WMA_LOGE("%s:INVALID PPS CONFIG", __func__); + } + + return (ret)? eHAL_STATUS_FAILURE : eHAL_STATUS_SUCCESS; +} diff --git a/CORE/SERVICES/WMA/wma.h b/CORE/SERVICES/WMA/wma.h index 312c389e49e1..e234aae98fac 100644 --- a/CORE/SERVICES/WMA/wma.h +++ b/CORE/SERVICES/WMA/wma.h @@ -421,6 +421,7 @@ typedef struct { struct wma_tx_ack_work_ctx *ack_work_ctx; u_int8_t powersave_mode; v_BOOL_t ptrn_match_enable_all_vdev; + void* pGetRssiReq; }t_wma_handle, *tp_wma_handle; struct wma_target_cap { @@ -1044,6 +1045,9 @@ typedef struct wma_trigger_uapsd_params VOS_STATUS wma_trigger_uapsd_params(tp_wma_handle wma_handle, u_int32_t vdev_id, tp_wma_trigger_uapsd_params trigger_uapsd_params); +/* added to get average snr for both data and beacon */ +VOS_STATUS wma_send_snr_request(tp_wma_handle wma_handle, void *pGetRssiReq); + #ifdef FEATURE_WLAN_SCAN_PNO #define WMA_NLO_FREQ_THRESH 1000 /* in MHz */ @@ -1162,6 +1166,11 @@ enum powersave_mode { PS_LEGACY_DEEPSLEEP = 3, PS_QPOWER_DEEPSLEEP = 4 }; -#define WMA_DEFAULT_QPOWER_MAX_PSPOLL_BEFORE_WAKE 1 +#define WMA_DEFAULT_MAX_PSPOLL_BEFORE_WAKE 1 #define WMA_DEFAULT_QPOWER_TX_WAKE_THRESHOLD 2 + +#define WMA_VHT_PPS_PAID_MATCH 1 +#define WMA_VHT_PPS_GID_MATCH 2 +#define WMA_VHT_PPS_DELIM_CRC_FAIL 3 + #endif diff --git a/CORE/SME/inc/btcApi.h b/CORE/SME/inc/btcApi.h index 86933b545c64..c2cfb22c76d5 100644 --- a/CORE/SME/inc/btcApi.h +++ b/CORE/SME/inc/btcApi.h @@ -41,6 +41,7 @@ #include "vos_types.h" #include "vos_timer.h" +#include "vos_nvitem.h" #define BT_INVALID_CONN_HANDLE (0xFFFF) /**< Invalid connection handle */ @@ -132,6 +133,12 @@ #define BTC_DHCP_ON_A2DP_DEF (1) // ON #define BTC_DHCP_ON_SCO_DEF (0) // OFF +/* + * Number of victim tables and mws coex configurations + */ +#define MWS_COEX_MAX_VICTIM_TABLE 10 +#define MWS_COEX_MAX_CONFIG 6 + /** Enumeration of all the different kinds of BT events */ typedef enum eSmeBtEventType @@ -277,6 +284,14 @@ typedef struct sSmeBtcConfig v_U32_t btcMaxScoBlockPerc; v_U32_t btcDhcpProtOnA2dp; v_U32_t btcDhcpProtOnSco; + + v_U32_t mwsCoexVictimWANFreq[MWS_COEX_MAX_VICTIM_TABLE]; + v_U32_t mwsCoexVictimWLANFreq[MWS_COEX_MAX_VICTIM_TABLE]; + v_U32_t mwsCoexVictimConfig[MWS_COEX_MAX_VICTIM_TABLE]; + v_U32_t mwsCoexVictimConfig2[MWS_COEX_MAX_VICTIM_TABLE]; + v_U32_t mwsCoexModemBackoff; + v_U32_t mwsCoexConfig[MWS_COEX_MAX_CONFIG]; + v_U32_t SARPowerBackoff; } tSmeBtcConfig, *tpSmeBtcConfig; @@ -355,6 +370,7 @@ typedef struct sSmeBtcInfo v_U16_t btcScoHandles[BT_MAX_SCO_SUPPORT]; /* Handles for SCO, if any*/ v_BOOL_t fA2DPUp; /*remember whether A2DP is in session*/ v_BOOL_t btcScanCompromise; + v_U8_t btcBssfordisableaggr[VOS_MAC_ADDRESS_LEN]; } tSmeBtcInfo, *tpSmeBtcInfo; diff --git a/CORE/SME/inc/csrApi.h b/CORE/SME/inc/csrApi.h index ee1245bb9502..b60564230772 100644 --- a/CORE/SME/inc/csrApi.h +++ b/CORE/SME/inc/csrApi.h @@ -25,6 +25,7 @@ * to the Linux Foundation. */ + /** ------------------------------------------------------------------------- * ------------------------------------------------------------------------- * \file csrApi.h @@ -218,14 +219,6 @@ typedef struct tagCsrChannelInfo tANI_U8 *ChannelList; //it will be an array of channels }tCsrChannelInfo, *tpCsrChannelInfo; -#if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR) -typedef struct tagCsrCountryChannelInfo -{ - tCsrChannelInfo countryValidChannelList; - tANI_U8 revision; /* KR 25, 25 is the country revision index - to the list of valid channels */ -}tCsrCountryChannelInfo, *tpCsrCountryChannelInfo; -#endif typedef struct tagCsrSSIDInfo { tSirMacSSid SSID; @@ -276,6 +269,7 @@ typedef struct tagCsrScanRequest eCsrRequestType requestType; //11d scan or full scan tANI_BOOLEAN p2pSearch; tANI_BOOLEAN skipDfsChnlInP2pSearch; + tANI_BOOLEAN bcnRptReqScan; //is Scan issued by Beacon Report Request }tCsrScanRequest; typedef struct tagCsrBGScanRequest @@ -336,6 +330,14 @@ typedef struct tagCsrCcxCckmInfo } tCsrCcxCckmInfo; #endif +#if defined(FEATURE_WLAN_CCX) && defined(FEATURE_WLAN_CCX_UPLOAD) +#define CSR_DOT11F_IE_RSN_MAX_LEN (114) /*TODO: duplicate one in dot11f.h */ +typedef struct tagCsrCcxCckmIe +{ + tANI_U8 cckmIe[CSR_DOT11F_IE_RSN_MAX_LEN]; + tANI_U8 cckmIeLen; +} tCsrCcxCckmIe; +#endif /* FEATURE_WLAN_CCX && FEATURE_WLAN_CCX_UPLOAD */ typedef struct tagCsrScanResultFilter { @@ -444,6 +446,12 @@ typedef enum #ifdef FEATURE_WLAN_LFR eCSR_ROAM_PMK_NOTIFY, #endif +#ifdef FEATURE_WLAN_LFR_METRICS + eCSR_ROAM_PREAUTH_INIT_NOTIFY, + eCSR_ROAM_PREAUTH_STATUS_SUCCESS, + eCSR_ROAM_PREAUTH_STATUS_FAILURE, + eCSR_ROAM_HANDOVER_SUCCESS, +#endif #ifdef FEATURE_WLAN_TDLS eCSR_ROAM_TDLS_STATUS_UPDATE, eCSR_ROAM_RESULT_MGMT_TX_COMPLETE_IND, @@ -455,6 +463,16 @@ typedef enum eCSR_ROAM_UNPROT_MGMT_FRAME_IND, #endif +#ifdef FEATURE_CESIUM_PROPRIETARY + eCSR_ROAM_IBSS_PEER_INFO_COMPLETE, +#endif + +#if defined(FEATURE_WLAN_CCX) && defined(FEATURE_WLAN_CCX_UPLOAD) + eCSR_ROAM_TSM_IE_IND, + eCSR_ROAM_CCKM_PREAUTH_NOTIFY, + eCSR_ROAM_CCX_ADJ_AP_REPORT_IND, + eCSR_ROAM_CCX_BCN_REPORT_IND, +#endif /* FEATURE_WLAN_CCX && FEATURE_WLAN_CCX_UPLOAD */ }eRoamCmdStatus; @@ -541,8 +559,13 @@ typedef enum eCSR_ROAM_RESULT_DELETE_TDLS_PEER, eCSR_ROAM_RESULT_TEARDOWN_TDLS_PEER_IND, eCSR_ROAM_RESULT_DELETE_ALL_TDLS_PEER_IND, + eCSR_ROAM_RESULT_LINK_ESTABLISH_REQ_RSP, #endif +#ifdef FEATURE_CESIUM_PROPRIETARY + eCSR_ROAM_RESULT_IBSS_PEER_INFO_SUCCESS, + eCSR_ROAM_RESULT_IBSS_PEER_INFO_FAILED, +#endif }eCsrRoamResult; @@ -1002,14 +1025,17 @@ typedef struct tagCsrConfigParam tANI_U32 nActiveMinChnTimeBtc; //in units of milliseconds tANI_U32 nActiveMaxChnTimeBtc; //in units of milliseconds + tANI_U32 disableAggWithBtc; #ifdef WLAN_AP_STA_CONCURRENCY tANI_U32 nPassiveMinChnTimeConc; //in units of milliseconds tANI_U32 nPassiveMaxChnTimeConc; //in units of milliseconds tANI_U32 nActiveMinChnTimeConc; //in units of milliseconds tANI_U32 nActiveMaxChnTimeConc; //in units of milliseconds tANI_U32 nRestTimeConc; //in units of milliseconds - tANI_U8 nNumChanCombinedConc; //number of channels combined - //in each split scan operation + tANI_U8 nNumStaChanCombinedConc; //number of channels combined for + //STA in each split scan operation + tANI_U8 nNumP2PChanCombinedConc; //number of channels combined for + //P2P in each split scan operation #endif tANI_BOOLEAN IsIdleScanEnabled; @@ -1027,6 +1053,7 @@ typedef struct tagCsrConfigParam #endif #ifdef FEATURE_WLAN_LFR tANI_U8 isFastRoamIniFeatureEnabled; + tANI_U8 MAWCEnabled; #endif #if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR) @@ -1064,18 +1091,18 @@ typedef struct tagCsrConfigParam //To enable/disable scanning 2.4Ghz channels twice on a single scan request from HDD tANI_BOOLEAN fScanTwice; #ifdef WLAN_FEATURE_11AC - tANI_U32 nVhtChannelWidth; - tANI_U8 enableTxBF; - tANI_U8 txBFCsnValue; - tANI_U8 enable2x2; + tANI_U32 nVhtChannelWidth; + tANI_U8 enableTxBF; + tANI_U8 txBFCsnValue; + tANI_U8 enable2x2; tANI_BOOLEAN enableVhtFor24GHz; - tANI_U8 enableMuBformee; - tANI_U8 enableVhtpAid; - tANI_U8 enableVhtGid; + tANI_U8 enableMuBformee; + tANI_U8 enableVhtpAid; + tANI_U8 enableVhtGid; #endif - tANI_U8 enableAmpduPs; - tANI_U8 enableHtSmps; - tANI_U8 htSmps; + tANI_U8 enableAmpduPs; + tANI_U8 enableHtSmps; + tANI_U8 htSmps; /* * To enable/disable scanning only 2.4Ghz channels on first scan @@ -1085,18 +1112,26 @@ typedef struct tagCsrConfigParam #if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR) tANI_BOOLEAN nRoamPrefer5GHz; tANI_BOOLEAN nRoamIntraBand; -#endif + tANI_U8 nProbes; + tANI_U16 nRoamScanHomeAwayTime; #ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD tANI_BOOLEAN isRoamOffloadScanEnabled; + tANI_BOOLEAN bFastRoamInConIniFeatureEnabled; #endif +#endif + tANI_U8 scanCfgAgingTime; tANI_U8 enableTxLdpc; + tANI_U8 isAmsduSupportInAMPDU; + tANI_U8 nSelect5GHzMargin; + tANI_U8 isCoalesingInIBSSAllowed; + }tCsrConfigParam; //Tush @@ -1154,6 +1189,12 @@ typedef struct tagCsrRoamInfo #ifdef FEATURE_WLAN_CCX tANI_BOOLEAN isCCXAssoc; +#ifdef FEATURE_WLAN_CCX_UPLOAD + tSirTsmIE tsmIe; + tANI_U32 timestamp[2]; + tANI_U16 tsmRoamDelay; + tSirCcxBcnReportRsp *pCcxBcnReportRsp; +#endif /* FEATURE_WLAN_CCX_UPLOAD */ #endif void* pRemainCtx; tANI_U32 rxChan; @@ -1319,6 +1360,16 @@ typedef struct tagCsrRoamRemoveKey } tCsrRoamRemoveKey; #ifdef FEATURE_WLAN_TDLS + +typedef struct tagCsrLinkEstablishParams +{ + tSirMacAddr peerMac; + tANI_U8 uapsdQueues; + tANI_U8 maxSp; + tANI_U8 isBufSta; + tANI_U8 isResponder; +}tCsrTdlsLinkEstablishParams; + typedef struct tagCsrTdlsSendMgmt { tSirMacAddr peerMac; @@ -1356,7 +1407,29 @@ typedef void * tScanResultHandle; #define CSR_INVALID_SCANRESULT_HANDLE (NULL) +#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD +typedef struct tagCsrHandoffRequest +{ + tCsrBssid bssid; + tANI_U8 channel; +}tCsrHandoffRequest; +#endif +#if defined(FEATURE_WLAN_CCX) && defined(FEATURE_WLAN_CCX_UPLOAD) +typedef struct tagCsrCcxBeaconReqParams +{ + tANI_U16 measurementToken; + tANI_U8 channel; + tANI_U8 scanMode; + tANI_U16 measurementDuration; +} tCsrCcxBeaconReqParams, *tpCsrCcxBeaconReqParams; + +typedef struct tagCsrCcxBeaconReq +{ + tANI_U8 numBcnReqIe; + tCsrCcxBeaconReqParams bcnReq[SIR_CCX_MAX_MEAS_IE_REQS]; +} tCsrCcxBeaconReq, *tpCsrCcxBeaconReq; +#endif /* FEATURE_WLAN_CCX && FEATURE_WLAN_CCX_UPLOAD */ ////////////////////////////////////////////Common SCAN starts @@ -1499,6 +1572,30 @@ typedef void ( *tCsrStatsCallback) (void * stats, void *pContext); typedef void ( *tCsrRssiCallback) (v_S7_t rssi, tANI_U32 staId, void *pContext); +#if defined(FEATURE_WLAN_CCX) && defined(FEATURE_WLAN_CCX_UPLOAD) +/*--------------------------------------------------------------------------- + This is the type for a tsm stats callback to be registered with SME + for getting tsm stats + \param tsmMetrics - tsmMetrics + \param pContext - any user data given at callback registration. + \return None +---------------------------------------------------------------------------*/ +typedef void ( *tCsrTsmStatsCallback) (tAniTrafStrmMetrics tsmMetrics, + tANI_U32 staId, + void *pContext); +#endif /* FEATURE_WLAN_CCX && FEATURE_WLAN_CCX_UPLOAD */ + +/*--------------------------------------------------------------------------- + This is the type for a snr callback to be registered with SME + for getting snr + + \param snr + \param pContext - any user data given at callback registration. + \return None + +---------------------------------------------------------------------------*/ +typedef void (*tCsrSnrCallback) (v_S7_t snr, tANI_U32 staId, void *pContext); + #ifdef WLAN_FEATURE_VOWIFI_11R eHalStatus csrRoamIssueFTPreauthReq(tHalHandle hHal, tANI_U32 sessionId, tpSirBssDescription pBssDescription); #endif @@ -1522,6 +1619,5 @@ eHalStatus csrSetBand(tHalHandle hHal, eCsrBand eBand); eCsrBand csrGetCurrentBand (tHalHandle hHal); typedef void (*csrReadyToSuspendCallback)(void *pContext); - #endif diff --git a/CORE/SME/inc/csrInternal.h b/CORE/SME/inc/csrInternal.h index 190bb6df1763..53dfe1a3272d 100644 --- a/CORE/SME/inc/csrInternal.h +++ b/CORE/SME/inc/csrInternal.h @@ -70,6 +70,7 @@ #define CSR_SESSION_ID_INVALID 0xFF // session ID invalid #define CSR_ROAM_SESSION_MAX 5 // No of sessions to be supported, and a // session is for Infra, IBSS or BT-AMP +#define CSR_SESSION_ID_ANY 50 #define CSR_IS_SESSION_VALID( pMac, sessionId ) ( ( (sessionId) < CSR_ROAM_SESSION_MAX ) \ && ( (pMac)->roam.roamSession[(sessionId)].sessionActive ) ) @@ -80,6 +81,12 @@ NULL \ ) +#define CSR_IS_SESSION_ANY(sessionId) (sessionId == CSR_SESSION_ID_ANY) +#define CSR_IS_SELECT_5GHZ_MARGIN( pMac ) \ +( \ + (((pMac)->roam.configParam.nSelect5GHzMargin)?eANI_BOOLEAN_TRUE:eANI_BOOLEAN_FALSE) \ +) + #if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR) #define CSR_IS_ROAM_PREFER_5GHZ( pMac ) \ ( \ @@ -96,6 +103,11 @@ ( \ (((pMac)->roam.configParam.isRoamOffloadScanEnabled)?eANI_BOOLEAN_TRUE:eANI_BOOLEAN_FALSE) \ ) + +#define CSR_IS_FASTROAM_IN_CONCURRENCY_INI_FEATURE_ENABLED( pMac ) \ +( \ + (((pMac)->roam.configParam.bFastRoamInConIniFeatureEnabled)?eANI_BOOLEAN_TRUE:eANI_BOOLEAN_FALSE) \ +) #endif //Support for "Fast roaming" (i.e., CCX, LFR, or 802.11r.) @@ -443,10 +455,12 @@ typedef struct tagWmStatusChangeCmd }tWmStatusChangeCmd; + typedef struct tagAddStaForSessionCmd { //Session self mac addr tSirMacAddr selfMacAddr; + tVOS_CON_MODE currDeviceMode; tANI_U32 type; tANI_U32 subType; tANI_U8 sessionId; @@ -563,14 +577,17 @@ typedef struct tagCsrConfig tANI_U32 nActiveMinChnTimeBtc; //in units of milliseconds tANI_U32 nActiveMaxChnTimeBtc; //in units of milliseconds + tANI_U8 disableAggWithBtc; #ifdef WLAN_AP_STA_CONCURRENCY tANI_U32 nPassiveMinChnTimeConc; //in units of milliseconds tANI_U32 nPassiveMaxChnTimeConc; //in units of milliseconds tANI_U32 nActiveMinChnTimeConc; //in units of milliseconds tANI_U32 nActiveMaxChnTimeConc; //in units of milliseconds tANI_U32 nRestTimeConc; //in units of milliseconds - tANI_U8 nNumChanCombinedConc; //number of channels combined - //in each split scan operation + tANI_U8 nNumStaChanCombinedConc; //number of channels combined for + //Sta in each split scan operation + tANI_U8 nNumP2PChanCombinedConc; //number of channels combined for + //P2P in each split scan operation #endif tANI_BOOLEAN IsIdleScanEnabled; @@ -588,9 +605,11 @@ typedef struct tagCsrConfig #endif #ifdef FEATURE_WLAN_LFR - tANI_U8 isFastRoamIniFeatureEnabled; + tANI_U8 isFastRoamIniFeatureEnabled; + tANI_U8 MAWCEnabled; #ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD - tANI_U8 isRoamOffloadScanEnabled; + tANI_U8 isRoamOffloadScanEnabled; + tANI_BOOLEAN bFastRoamInConIniFeatureEnabled; #endif #endif @@ -606,6 +625,8 @@ typedef struct tagCsrConfig tANI_BOOLEAN nRoamIntraBand; tANI_BOOLEAN isWESModeEnabled; tANI_BOOLEAN nRoamScanControl; + tANI_U8 nProbes; + tANI_U16 nRoamScanHomeAwayTime; #endif #ifdef WLAN_FEATURE_NEIGHBOR_ROAMING @@ -638,8 +659,13 @@ typedef struct tagCsrConfig tANI_U8 htSmps; tANI_U8 txLdpcEnable; + /* + * Enable/Disable heartbeat offload + */ + tANI_BOOLEAN enableHeartBeatOffload; + tANI_U8 isAmsduSupportInAMPDU; + tANI_U8 nSelect5GHzMargin; tANI_U8 isCoalesingInIBSSAllowed; - }tCsrConfig; typedef struct tagCsrChannelPowerInfo @@ -675,13 +701,13 @@ typedef struct tagCsrScanStruct tDblLinkList tempScanResults; tANI_BOOLEAN fScanEnable; tANI_BOOLEAN fFullScanIssued; - tPalTimerHandle hTimerGetResult; + vos_timer_t hTimerGetResult; #ifdef WLAN_AP_STA_CONCURRENCY - tPalTimerHandle hTimerStaApConcTimer; + vos_timer_t hTimerStaApConcTimer; #endif - tPalTimerHandle hTimerIdleScan; - tPalTimerHandle hTimerResultAging; - tPalTimerHandle hTimerResultCfgAging; + vos_timer_t hTimerIdleScan; + vos_timer_t hTimerResultAging; + vos_timer_t hTimerResultCfgAging; tPalTimerHandle hTimerBgScan; //changes on every scan, it is used as a flag for whether 11d info is found on every scan tANI_U8 channelOf11dInfo; @@ -708,6 +734,7 @@ typedef struct tagCsrScanStruct tANI_U8 countryCode11d[WNI_CFG_COUNTRY_CODE_LEN]; v_REGDOMAIN_t domainIdDefault; //default regulatory domain v_REGDOMAIN_t domainIdCurrent; //current regulatory domain + tCsrBssid currentCountryBssid; // Bssid for current country code tANI_BOOLEAN f11dInfoApplied; tANI_BOOLEAN fCancelIdleScan; #ifdef FEATURE_WLAN_WAPI @@ -749,6 +776,7 @@ typedef struct tagCsrScanStruct tDblLinkList scanCmdPendingList; #endif tCsrChannel occupiedChannels; //This includes all channels on which candidate APs are found + tANI_S8 inScanResultBestAPRssi; }tCsrScanStruct; #ifdef FEATURE_WLAN_TDLS_INTERNAL @@ -834,7 +862,7 @@ typedef struct tagCsrTlStatsReqInfo { tANI_U32 periodicity; tANI_BOOLEAN timerRunning; - tPalTimerHandle hTlStatsTimer; + vos_timer_t hTlStatsTimer; tANI_U8 numClient; }tCsrTlStatsReqInfo; @@ -884,10 +912,7 @@ typedef struct tagCsrRoamSession tCsrTimerInfo roamingTimerInfo; eCsrRoamingReason roamingReason; tANI_BOOLEAN fCancelRoaming; - tPalTimerHandle hTimerRoaming; - tPalTimerHandle hTimerIbssJoining; - tCsrTimerInfo ibssJoinTimerInfo; - tANI_BOOLEAN ibss_join_pending; + vos_timer_t hTimerRoaming; eCsrRoamResult roamResult; //the roamResult that is used when the roaming timer fires tCsrRoamJoinStatus joinFailStatusCode; //This is the reason code for join(assoc) failure //The status code returned from PE for deauth or disassoc (in case of lostlink), or our own dynamic roaming @@ -901,7 +926,7 @@ typedef struct tagCsrRoamSession tANI_BOOLEAN fWMMConnection; #ifdef FEATURE_WLAN_BTAMP_UT_RF //To retry a join later when it fails if so desired - tPalTimerHandle hTimerJoinRetry; + vos_timer_t hTimerJoinRetry; tCsrTimerInfo joinRetryTimerInfo; tANI_U32 maxRetryCount; #endif @@ -913,6 +938,9 @@ typedef struct tagCsrRoamSession tANI_U8 prevOpChannel; tANI_U16 clientDissSecs; tANI_U32 roamTS1; +#if defined(FEATURE_WLAN_CCX_UPLOAD) + tCsrCcxCckmIe suppCckmIeInfo; +#endif #endif tANI_U8 bRefAssocStartCnt; //Tracking assoc start indication /* to force the AP initiate fresh 802.1x authentication after re-association need to clear @@ -944,7 +972,7 @@ typedef struct tagCsrRoamStruct tANI_U32 numValidChannels; //total number of channels in CFG tANI_S32 sPendingCommands; - tPalTimerHandle hTimerWaitForKey; //To support timeout for WaitForKey state + vos_timer_t hTimerWaitForKey; //To support timeout for WaitForKey state tCsrSummaryStatsInfo summaryStatsInfo; tCsrGlobalClassAStatsInfo classAStatsInfo; tCsrGlobalClassBStatsInfo classBStatsInfo; @@ -1106,10 +1134,6 @@ void csrScanSuspendIMPS( tpAniSirGlobal pMac ); void csrScanResumeIMPS( tpAniSirGlobal pMac ); eHalStatus csrInitGetChannels(tpAniSirGlobal pMac); -// Getting the 5GHz Channel list -eHalStatus csrGet5GChannels(tpAniSirGlobal pMac); -// Getting the 2.4GHz Channel list -eHalStatus csrGet24GChannels(tpAniSirGlobal pMac); eHalStatus csrSetModifyProfileFields(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamModifyProfileFields *pModifyProfileFields); @@ -1199,8 +1223,33 @@ eHalStatus csrGetStatistics(tpAniSirGlobal pMac, eCsrStatsRequesterType requeste tANI_U32 periodicity, tANI_BOOLEAN cache, tANI_U8 staId, void *pContext); +/* --------------------------------------------------------------------------- + \fn csrGetTLSTAState + \helper function to get the TL STA State whenever the function is called. + + \param staId - The staID to be passed to the TL + to get the relevant TL STA State + \return the state as tANI_U16 + ---------------------------------------------------------------------------*/ +tANI_U16 csrGetTLSTAState(tpAniSirGlobal pMac, tANI_U8 staId); eHalStatus csrGetRssi(tpAniSirGlobal pMac,tCsrRssiCallback callback,tANI_U8 staId,tCsrBssid bssId,void * pContext,void * pVosContext); + +/* --------------------------------------------------------------------------- + \fn csrGetSnr + \brief csr function that client calls to register a callback to get + SNR stored in TL + + \param callback - SME sends back the requested stats using the callback + \param staId - The station ID for which the stats is requested for + \param bssid - The bssid for the connected session + \param pContext - user context to be passed back along with the callback + + \return eHalStatus + ---------------------------------------------------------------------------*/ +eHalStatus csrGetSnr(tpAniSirGlobal pMac, tCsrSnrCallback callback, + tANI_U8 staId, tCsrBssid bssId, void *pContext); + #if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR) eHalStatus csrGetRoamRssi(tpAniSirGlobal pMac, tCsrRssiCallback callback, @@ -1209,7 +1258,20 @@ eHalStatus csrGetRoamRssi(tpAniSirGlobal pMac, void * pContext, void * pVosContext); #endif -eHalStatus csrRoamRegisterCallback(tpAniSirGlobal pMac, csrRoamCompleteCallback callback, void *pContext); + +#if defined(FEATURE_WLAN_CCX) && defined(FEATURE_WLAN_CCX_UPLOAD) +eHalStatus csrGetTsmStats(tpAniSirGlobal pMac, + tCsrTsmStatsCallback callback, + tANI_U8 staId, + tCsrBssid bssId, + void *pContext, + void* pVosContext, + tANI_U8 tid); +#endif /* FEATURE_WLAN_CCX && FEATURE_WLAN_CCX_UPLOAD */ + +eHalStatus csrRoamRegisterCallback(tpAniSirGlobal pMac, + csrRoamCompleteCallback callback, + void *pContext); /* --------------------------------------------------------------------------- \fn csrGetConfigParam \brief HDD calls this function to get the global settings currently maintained by CSR. @@ -1268,7 +1330,7 @@ eHalStatus csrStart(tpAniSirGlobal pMac); \brief To stop CSR. CSR still keeps its current setting. \return eHalStatus -------------------------------------------------------------------------------*/ -eHalStatus csrStop(tpAniSirGlobal pMac); +eHalStatus csrStop(tpAniSirGlobal pMac, tHalStopType stopType); /* --------------------------------------------------------------------------- \fn csrReady \brief To let CSR is ready to operate @@ -1337,6 +1399,8 @@ tANI_BOOLEAN csrRoamIs11rAssoc(tpAniSirGlobal pMac); #ifdef FEATURE_WLAN_CCX //Returns whether the current association is a CCX assoc or not tANI_BOOLEAN csrRoamIsCCXAssoc(tpAniSirGlobal pMac); +tANI_BOOLEAN csrRoamIsCcxIniFeatureEnabled(tpAniSirGlobal pMac); +tANI_BOOLEAN csrNeighborRoamIsCCXAssoc(tpAniSirGlobal pMac); #endif //Remove this code once SLM_Sessionization is supported @@ -1354,7 +1418,15 @@ VOS_STATUS csrAddToChannelListFront( tANI_U8 *pChannelList, int numChannels, tA #ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD eHalStatus csrScanRequestLfrResult(tpAniSirGlobal pMac, tANI_U32 sessionId, csrScanCompleteCallback callback, void *pContext); +eHalStatus csrRoamOffloadScanRspHdlr(tpAniSirGlobal pMac, tANI_U8 reason); +eHalStatus csrHandoffRequest(tpAniSirGlobal pMac, tCsrHandoffRequest *pHandoffInfo); #endif tANI_BOOLEAN csrRoamIsStaMode(tpAniSirGlobal pMac, tANI_U32 sessionId); #endif + +#if defined WLAN_FEATURE_RELIABLE_MCAST +eHalStatus csrEnableRMC(tpAniSirGlobal pMac, tANI_U32 sessionId); +eHalStatus csrDisableRMC(tpAniSirGlobal pMac, tANI_U32 sessionId); +#endif /* WLAN_FEATURE_RELIABLE_MCAST */ + #endif diff --git a/CORE/SME/inc/csrLinkList.h b/CORE/SME/inc/csrLinkList.h index 83ef3f640bd5..1531ed4dda79 100644 --- a/CORE/SME/inc/csrLinkList.h +++ b/CORE/SME/inc/csrLinkList.h @@ -63,6 +63,10 @@ typedef struct tagDblLinkList tANI_U32 Count; tHddHandle hHdd; tListFlag Flag; + + /*command debugging */ + tANI_U32 cmdTimeoutDuration; /* command timeout duration */ + vos_timer_t *cmdTimeoutTimer; /*command timeout Timer */ }tDblLinkList; //To get the address of an object of (type) base on the (address) of one of its (field) diff --git a/CORE/SME/inc/csrNeighborRoam.h b/CORE/SME/inc/csrNeighborRoam.h index 7c8b9f1c5f6e..4805f1367330 100644 --- a/CORE/SME/inc/csrNeighborRoam.h +++ b/CORE/SME/inc/csrNeighborRoam.h @@ -41,6 +41,7 @@ #define CSR_NEIGHBOR_ROAM_H #ifdef WLAN_FEATURE_NEIGHBOR_ROAMING +#include "sme_Api.h" /* Enumeration of various states in neighbor roam algorithm */ typedef enum @@ -70,9 +71,6 @@ typedef struct sCsrNeighborRoamCfgParams tANI_U32 minChannelScanTime; tANI_U32 maxChannelScanTime; tANI_U16 neighborResultsRefreshPeriod; -#if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR) - tCsrCountryChannelInfo countryChannelInfo; -#endif tANI_U16 emptyScanRefreshPeriod; } tCsrNeighborRoamCfgParams, *tpCsrNeighborRoamCfgParams; @@ -168,9 +166,9 @@ typedef struct sCsrNeighborRoamControlInfo tCsrNeighborRoamCfgParams cfgParams; tCsrBssid currAPbssid; // current assoc AP tANI_U8 currAPoperationChannel; // current assoc AP - tPalTimerHandle neighborScanTimer; - tPalTimerHandle neighborResultsRefreshTimer; - tPalTimerHandle emptyScanRefreshTimer; + vos_timer_t neighborScanTimer; + vos_timer_t neighborResultsRefreshTimer; + vos_timer_t emptyScanRefreshTimer; tCsrTimerInfo neighborScanTimerInfo; tCsrNeighborRoamChannelInfo roamChannelInfo; tANI_U8 currentNeighborLookupThreshold; @@ -196,7 +194,16 @@ typedef struct sCsrNeighborRoamControlInfo we re-initialize occupied channel list */ tANI_S8 lookupDOWNRssi; tANI_U8 uScanMode; + tANI_U8 uOsRequestedHandoff; /* upper layer requested + a reassoc */ +#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD + tCsrHandoffRequest handoffReqInfo; /* handoff related info came + with upper layer's req for + reassoc */ +#endif #endif + tSmeFastRoamTrigger cfgRoamEn; + tSirMacAddr cfgRoambssId; } tCsrNeighborRoamControlInfo, *tpCsrNeighborRoamControlInfo; @@ -227,10 +234,20 @@ VOS_STATUS csrNeighborRoamUpdateCcxModeEnabled(tpAniSirGlobal pMac, const v_BOOL VOS_STATUS csrNeighborRoamChannelsFilterByCurrentBand( tpAniSirGlobal pMac, tANI_U8* pInputChannelList, - int inputNumOfChannels, + tANI_U8 inputNumOfChannels, tANI_U8* pOutputChannelList, - int* pMergedOutputNumOfChannels + tANI_U8* pMergedOutputNumOfChannels ); +VOS_STATUS csrNeighborRoamReassocIndCallback(v_PVOID_t pAdapter, + v_U8_t trafficStatus, + v_PVOID_t pUserCtxt, + v_S7_t avgRssi); +VOS_STATUS csrNeighborRoamMergeChannelLists(tpAniSirGlobal pMac, + tANI_U8 *pInputChannelList, + tANI_U8 inputNumOfChannels, + tANI_U8 *pOutputChannelList, + tANI_U8 outputNumOfChannels, + tANI_U8 *pMergedOutputNumOfChannels); #ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD #define ROAM_SCAN_OFFLOAD_START 1 #define ROAM_SCAN_OFFLOAD_STOP 2 @@ -249,12 +266,27 @@ VOS_STATUS csrNeighborRoamChannelsFilterByCurrentBand( #define REASON_EMPTY_SCAN_REF_PERIOD_CHANGED 10 #define REASON_PREAUTH_FAILED_FOR_ALL 11 #define REASON_NO_CAND_FOUND_OR_NOT_ROAMING_NOW 12 - +#define REASON_NPROBES_CHANGED 13 +#define REASON_HOME_AWAY_TIME_CHANGED 14 +#define REASON_OS_REQUESTED_ROAMING_NOW 15 +#define REASON_SCAN_CH_TIME_CHANGED 16 +#define REASON_SCAN_HOME_TIME_CHANGED 17 eHalStatus csrRoamOffloadScan(tpAniSirGlobal pMac, tANI_U8 command, tANI_U8 reason); eHalStatus csrNeighborRoamCandidateFoundIndHdlr(tpAniSirGlobal pMac, void* pMsg); +eHalStatus csrNeighborRoamHandoffReqHdlr(tpAniSirGlobal pMac, void* pMsg); +eHalStatus csrNeighborRoamProceedWithHandoffReq(tpAniSirGlobal pMac); +eHalStatus csrNeighborRoamSssidScanDone(tpAniSirGlobal pMac, eHalStatus status); +eHalStatus csrNeighborRoamStartLfrScan(tpAniSirGlobal pMac); #endif +#if defined(FEATURE_WLAN_CCX) && defined(FEATURE_WLAN_CCX_UPLOAD) +VOS_STATUS csrSetCCKMIe(tpAniSirGlobal pMac, const tANI_U8 sessionId, + const tANI_U8 *pCckmIe, + const tANI_U8 ccKmIeLen); +VOS_STATUS csrRoamReadTSF(tpAniSirGlobal pMac, tANI_U8 *pTimestamp); +#endif /*FEATURE_WLAN_CCX && FEATURE_WLAN_CCX_UPLOAD */ #endif /* WLAN_FEATURE_NEIGHBOR_ROAMING */ #endif /* CSR_NEIGHBOR_ROAM_H */ + diff --git a/CORE/SME/inc/p2p_Api.h b/CORE/SME/inc/p2p_Api.h index 992b6e1ba354..da9368b4e4a0 100644 --- a/CORE/SME/inc/p2p_Api.h +++ b/CORE/SME/inc/p2p_Api.h @@ -416,14 +416,14 @@ typedef struct sp2pContext tANI_U32 ActionFrameLen; tANI_U32 ActionFrameSendTimeout; eListenDiscoverableState listenDiscoverableState; - tPalTimerHandle listenTimerHandler; - tPalTimerHandle WPSRegistrarCheckTimerHandler; + vos_timer_t listenTimerHandler; + vos_timer_t WPSRegistrarCheckTimerHandler; tANI_U32 WPSRegistrarSet; tANI_U8 bWaitForWPSReady; tANI_U8 bInGroupFormation; - tPalTimerHandle discoverTimer; - tPalTimerHandle retryActionFrameTimer; - tPalTimerHandle actionFrameTimer; + vos_timer_t discoverTimer; + vos_timer_t retryActionFrameTimer; + vos_timer_t actionFrameTimer; tPalTimerHandle nextActionFrameTimer; tANI_U8 peerMacAddress[P2P_MAC_ADDRESS_LEN]; tANI_U8 selfMacAddress[P2P_MAC_ADDRESS_LEN]; @@ -475,11 +475,11 @@ typedef struct sp2pContext #endif } tp2pContext, *tPp2pContext; - eHalStatus sme_RemainOnChannel( tHalHandle hHal, tANI_U8 sessionId, tANI_U8 channel, tANI_U32 duration, - remainOnChanCallback callback, - void *pContext ); + remainOnChanCallback callback, + void *pContext, + tANI_U8 isP2PProbeReqAllowed); eHalStatus sme_ReportProbeReq( tHalHandle hHal, tANI_U8 flag ); eHalStatus sme_updateP2pIe( tHalHandle hHal, void *p2pIe, tANI_U32 p2pIeLength ); @@ -495,11 +495,14 @@ eHalStatus sme_p2pSetPs( tHalHandle hHal, tP2pPsConfig * data ); eHalStatus p2pRemainOnChannel( tHalHandle hHal, tANI_U8 sessionId, tANI_U8 channel, tANI_U32 duration, remainOnChanCallback callback, void *pContext, + tANI_U8 isP2PProbeReqAllowed, eP2PRemainOnChnReason reason); #else eHalStatus p2pRemainOnChannel( tHalHandle hHal, tANI_U8 sessionId, tANI_U8 channel, tANI_U32 duration, - remainOnChanCallback callback, void *pContext); + remainOnChanCallback callback, + void *pContext, + tANI_U8 isP2PProbeReqAllowed); #endif eHalStatus p2pSendAction( tHalHandle hHal, tANI_U8 sessionId, const tANI_U8 *pBuf, tANI_U32 len, diff --git a/CORE/SME/inc/pmc.h b/CORE/SME/inc/pmc.h index e3dde9695341..3c82a54354af 100644 --- a/CORE/SME/inc/pmc.h +++ b/CORE/SME/inc/pmc.h @@ -159,12 +159,12 @@ typedef struct sPmcInfo void (*impsCallbackRoutine) (void *callbackContext, eHalStatus status); /* routine to call when IMPS period has finished */ void *impsCallbackContext; /* value to be passed as parameter to routine specified above */ - tPalTimerHandle hImpsTimer; /* timer to use with IMPS */ + vos_timer_t hImpsTimer; /* timer to use with IMPS */ vos_timer_t hTrafficTimer; /* timer to measure traffic for BMPS */ #ifdef FEATURE_WLAN_DIAG_SUPPORT - tPalTimerHandle hDiagEvtTimer; /* timer to report PMC state through DIAG event */ + vos_timer_t hDiagEvtTimer; /* timer to report PMC state through DIAG event */ #endif - tPalTimerHandle hExitPowerSaveTimer; /* timer for deferred exiting of power save mode */ + vos_timer_t hExitPowerSaveTimer; /* timer for deferred exiting of power save mode */ tDblLinkList powerSaveCheckList; /* power save check routine list */ tDblLinkList requestFullPowerList; /* request full power callback routine list */ tANI_U32 cLastTxUnicastFrames; /* transmit unicast frame count at last BMPS traffic timer expiration */ @@ -212,6 +212,17 @@ typedef struct sPmcInfo v_BOOL_t ImpsReqTimerFailed; tANI_U8 ImpsReqFailCnt; tANI_U8 ImpsReqTimerfailCnt; + +#ifdef FEATURE_WLAN_BATCH_SCAN + /*HDD callback to be called after receiving SET BATCH SCAN RSP from FW*/ + hddSetBatchScanReqCallback setBatchScanReqCallback; + void * setBatchScanReqCallbackContext; + /*HDD callback to be called after receiving BATCH SCAN iRESULT IND from FW*/ + hddTriggerBatchScanResultIndCallback batchScanResultCallback; + void * batchScanResultCallbackContext; +#endif + + } tPmcInfo, *tpPmcInfo; diff --git a/CORE/SME/inc/pmcApi.h b/CORE/SME/inc/pmcApi.h index 128d9abcd259..17b782b448cb 100644 --- a/CORE/SME/inc/pmcApi.h +++ b/CORE/SME/inc/pmcApi.h @@ -34,6 +34,7 @@ * * Description: Power Management Control (PMC) API definitions. + * Copyright 2008 (c) Qualcomm Technologies, Inc. * All Rights Reserved. @@ -488,6 +489,68 @@ extern eHalStatus pmcGetGTKOffload(tHalHandle hHal, void *callbackContext, tANI_U8 sessionId); #endif // WLAN_FEATURE_GTK_OFFLOAD +#ifdef FEATURE_WLAN_BATCH_SCAN +/*Set batch scan request Cb declaration*/ +typedef void(*hddSetBatchScanReqCallback)(void *callbackContext, + tSirSetBatchScanRsp *pRsp); + +/*Trigger batch scan result indication Cb declaration*/ +typedef void(*hddTriggerBatchScanResultIndCallback)(void *callbackContext, + void *pRsp); + +/* ----------------------------------------------------------------------------- + \fn pmcSetBatchScanReq + \brief Setting batch scan request in FW + \param hHal - The handle returned by macOpen. + \param sessionId - session id + \param callbackRoutine - Pointer to set batch scan request callback routine + \param calbackContext - callback context + \return eHalStatus + eHAL_STATUS_FAILURE Cannot set batch scan request + eHAL_STATUS_SUCCESS Request accepted. + -----------------------------------------------------------------------------*/ +extern eHalStatus pmcSetBatchScanReq(tHalHandle hHal, tSirSetBatchScanReq + *pRequest, tANI_U8 sessionId, hddSetBatchScanReqCallback callbackRoutine, + void *callbackContext); + +/* ----------------------------------------------------------------------------- + \fn pmcTriggerBatchScanResultInd + \brief API to pull batch scan result from FW + \param hHal - The handle returned by macOpen. + \param sessionId - session id + \param callbackRoutine - Pointer to get batch scan request callback routine + \param calbackContext - callback context + \return eHalStatus + eHAL_STATUS_FAILURE Cannot set batch scan request + eHAL_STATUS_SUCCESS Request accepted. + -----------------------------------------------------------------------------*/ +extern eHalStatus pmcTriggerBatchScanResultInd +( + tHalHandle hHal, tSirTriggerBatchScanResultInd *pRequest, tANI_U8 sessionId, + hddTriggerBatchScanResultIndCallback callbackRoutine, void *callbackContext +); + + +/* ----------------------------------------------------------------------------- + \fn pmcStopBatchScanInd + \brief Stoping batch scan request in FW + \param hHal - The handle returned by macOpen. + \param pInd - Pointer to stop batch scan indication + \return eHalStatus + eHAL_STATUS_FAILURE Cannot set batch scan request + eHAL_STATUS_SUCCESS Request accepted. + -----------------------------------------------------------------------------*/ + +extern eHalStatus pmcStopBatchScanInd +( + tHalHandle hHal, + tSirStopBatchScanInd *pInd, + tANI_U8 sessionId +); + +#endif // FEATURE_WLAN_BATCH_SCAN + + /* Power Save Offload Changes */ typedef enum eUapsdStatus { diff --git a/CORE/SME/inc/smeInside.h b/CORE/SME/inc/smeInside.h index 500fc728d0d7..f95e0ad4c003 100644 --- a/CORE/SME/inc/smeInside.h +++ b/CORE/SME/inc/smeInside.h @@ -25,6 +25,7 @@ * to the Linux Foundation. */ + #if !defined( __SMEINSIDE_H ) #define __SMEINSIDE_H @@ -64,7 +65,7 @@ #if defined WLAN_FEATURE_VOWIFI #include "sme_RrmApi.h" #endif - +ePhyChanBondState csrConvertCBIniValueToPhyCBState(v_U32_t cbIniValue); /*-------------------------------------------------------------------------- Type declarations @@ -100,6 +101,7 @@ typedef struct sRemainChlCmd tANI_U8 chn; tANI_U8 phyMode; tANI_U32 duration; + tANI_U8 isP2PProbeReqAllowed; void* callback; void* callbackCtx; }tRemainChlCmd; @@ -120,6 +122,15 @@ typedef struct TdlsSendMgmtInfo tANI_U8 len; } tTdlsSendMgmtCmdInfo; +typedef struct TdlsLinkEstablishInfo +{ + tSirMacAddr peerMac; + tANI_U8 uapsdQueues; + tANI_U8 maxSp; + tANI_U8 isBufSta; + tANI_U8 isResponder; +} tTdlsLinkEstablishCmdInfo; + typedef struct TdlsAddStaInfo { eTdlsAddOper tdlsAddOper; @@ -172,6 +183,7 @@ typedef struct s_tdls_cmd //tEnterPeerUAPSDInfo enterUapsdInfo ; //tExitPeerUAPSDinfo exitUapsdInfo ; #endif + tTdlsLinkEstablishCmdInfo tdlsLinkEstablishCmdInfo; tTdlsSendMgmtCmdInfo tdlsSendMgmtCmdInfo; tTdlsAddStaCmdInfo tdlsAddStaCmdInfo; tTdlsDelStaCmdInfo tdlsDelStaCmdInfo; @@ -287,10 +299,15 @@ eHalStatus pmcSetPowerParams(tHalHandle hHal, tSirSetPowerParamsReq* pwParams tANI_BOOLEAN csrRoamGetConcurrencyConnectStatusForBmps(tpAniSirGlobal pMac); #ifdef FEATURE_WLAN_TDLS eHalStatus csrTdlsSendMgmtReq(tHalHandle hHal, tANI_U8 sessionId, tCsrTdlsSendMgmt *tdlsSendMgmt); +VOS_STATUS csrTdlsSendLinkEstablishParams(tHalHandle hHal, + tANI_U8 sessionId, + tSirMacAddr peerMac, + tCsrTdlsLinkEstablishParams *tdlsLinkEstablishParams); eHalStatus csrTdlsAddPeerSta(tHalHandle hHal, tANI_U8 sessionId, tSirMacAddr peerMac); eHalStatus csrTdlsChangePeerSta(tHalHandle hHal, tANI_U8 sessionId, tSirMacAddr peerMac, tCsrStaParams *pstaParams); eHalStatus csrTdlsDelPeerSta(tHalHandle hHal, tANI_U8 sessionId, tSirMacAddr peerMac); eHalStatus csrTdlsProcessCmd(tpAniSirGlobal pMac,tSmeCmd *pCommand ); +eHalStatus csrTdlsProcessLinkEstablish( tpAniSirGlobal pMac, tSmeCmd *cmd ); eHalStatus tdlsMsgProcessor(tpAniSirGlobal pMac,v_U16_t msg_type, void *pMsgBuf); #ifdef FEATURE_WLAN_TDLS_INTERNAL @@ -304,14 +321,20 @@ eHalStatus csrTdlsTeardownReq(tHalHandle hHal, tANI_U8 sessionId, #endif /* FEATURE_WLAN_TDLS */ #if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR) -eHalStatus csrFlushBgScanRoamChannelList(tpAniSirGlobal pMac); +eHalStatus csrFlushCfgBgScanRoamChannelList(tpAniSirGlobal pMac); eHalStatus csrCreateBgScanRoamChannelList(tpAniSirGlobal pMac, const tANI_U8 *pChannelList, const tANI_U8 numChannels); eHalStatus csrUpdateBgScanConfigIniChannelList(tpAniSirGlobal pMac, eCsrBand eBand); -eHalStatus csrInitCountryValidChannelList(tpAniSirGlobal pMac, tANI_U8 revision); -void csr_SetRevision(tpAniSirGlobal pMac, tANI_U8 revision); #endif + +#if defined(FEATURE_WLAN_CCX) && defined(FEATURE_WLAN_CCX_UPLOAD) +eHalStatus csrCreateRoamScanChannelList(tpAniSirGlobal pMac, + tANI_U8 *pChannelList, + tANI_U8 numChannels, + const eCsrBand eBand); +#endif + ePhyChanBondState csrConvertCBIniValueToPhyCBState(v_U32_t cbIniValue); eHalStatus csrPsOffloadIsFullPowerNeeded(tpAniSirGlobal pMac, @@ -319,4 +342,12 @@ eHalStatus csrPsOffloadIsFullPowerNeeded(tpAniSirGlobal pMac, tRequestFullPowerReason *pReason, tANI_BOOLEAN *pfNeedPower); +#if defined(FEATURE_WLAN_CCX) && defined(FEATURE_WLAN_CCX_UPLOAD) +eHalStatus csrCreateRoamScanChannelList(tpAniSirGlobal pMac, + tANI_U8 *pChannelList, + tANI_U8 numChannels, + const eCsrBand eBand); +#endif +void activeListCmdTimeoutHandle(void *userData); + #endif //#if !defined( __SMEINSIDE_H ) diff --git a/CORE/SME/inc/smeInternal.h b/CORE/SME/inc/smeInternal.h index daa972d3ad58..15633486c66d 100644 --- a/CORE/SME/inc/smeInternal.h +++ b/CORE/SME/inc/smeInternal.h @@ -51,6 +51,7 @@ #include "vos_trace.h" #include "vos_memory.h" #include "vos_types.h" +#include "vos_diag_core_event.h" #include "csrLinkList.h" /*-------------------------------------------------------------------------- @@ -77,6 +78,7 @@ typedef enum eSmeCommandType eSmeCommandTdlsSendMgmt, eSmeCommandTdlsAddPeer, eSmeCommandTdlsDelPeer, + eSmeCommandTdlsLinkEstablish, #ifdef FEATURE_WLAN_TDLS_INTERNAL eSmeCommandTdlsDiscovery, eSmeCommandTdlsLinkSetup, @@ -115,20 +117,22 @@ typedef enum eSmeState SME_STATE_READY, } eSmeState; -#if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR) -/* enumeration for Korea country revision index, - index to the list of valid channels */ -typedef enum eSmeKRRevision -{ - SME_KR_3 = 3, - SME_KR_24 = 24, - SME_KR_25 = 25, -} eSmeKRRevision; -#endif - #define SME_IS_START(pMac) (SME_STATE_STOP != (pMac)->sme.state) #define SME_IS_READY(pMac) (SME_STATE_READY == (pMac)->sme.state) +#ifdef FEATURE_CESIUM_PROPRIETARY + +/* HDD Callback function */ +typedef void(*pIbssPeerInfoCb)(void *pUserData, void *infoParam); + +/* Peer info */ +typedef struct tagSmePeerInfoHddCbkInfo +{ + void *pUserData; + pIbssPeerInfoCb peerInfoCbk; +}tSmePeerInfoHddCbkInfo; +#endif /* FEATURE_CESIUM_PROPRIETARY */ + typedef struct tagSmeStruct { @@ -141,8 +145,20 @@ typedef struct tagSmeStruct tDblLinkList smeCmdFreeList; //preallocated roam cmd list void (*pTxPerHitCallback) (void *pCallbackContext); /* callback for Tx PER hit to HDD */ void *pTxPerHitCbContext; + tVOS_CON_MODE currDeviceMode; +#ifdef FEATURE_WLAN_LPHB + void (*pLphbIndCb) (void *pAdapter, void *indParam); +#endif /* FEATURE_WLAN_LPHB */ + //pending scan command list tDblLinkList smeScanCmdPendingList; + //active scan command list tDblLinkList smeScanCmdActiveList; +#ifdef FEATURE_CESIUM_PROPRIETARY + tSmePeerInfoHddCbkInfo peerInfoParams; +#endif /* FEATURE_CESIUM_PROPRIETARY */ +#ifdef FEATURE_WLAN_DIAG_SUPPORT_CSR + vos_event_wlan_status_payload_type eventPayload; +#endif } tSmeStruct, *tpSmeStruct; diff --git a/CORE/SME/inc/smeRrmInternal.h b/CORE/SME/inc/smeRrmInternal.h index 336b6f0d4a75..7ea22918f3b0 100644 --- a/CORE/SME/inc/smeRrmInternal.h +++ b/CORE/SME/inc/smeRrmInternal.h @@ -96,12 +96,16 @@ typedef struct sRrmSMEContext tAniSSID ssId; //SSID used in the measuring beacon report. tSirMacAddr bssId; //bssid used for beacon report measurement. tANI_U16 randnIntvl; //Randomization interval to be used in subsequent measurements. - tANI_U16 duration; - tANI_U16 measMode; + tANI_U16 duration[SIR_CCX_MAX_MEAS_IE_REQS]; + tANI_U8 measMode[SIR_CCX_MAX_MEAS_IE_REQS]; tRrmConfigParam rrmConfig; vos_timer_t IterMeasTimer; tDblLinkList neighborReportCache; tRrmNeighborRequestControlInfo neighborReqControlInfo; + +#if defined(FEATURE_WLAN_CCX) && defined(FEATURE_WLAN_CCX_UPLOAD) + tCsrCcxBeaconReq ccxBcnReqInfo; +#endif /* FEATURE_WLAN_CCX && FEATURE_WLAN_CCX_UPLOAD */ }tRrmSMEContext, *tpRrmSMEContext; typedef struct sRrmNeighborReq diff --git a/CORE/SME/inc/sme_Api.h b/CORE/SME/inc/sme_Api.h index c44a18eef8ab..50f62c2e5a10 100644 --- a/CORE/SME/inc/sme_Api.h +++ b/CORE/SME/inc/sme_Api.h @@ -56,6 +56,9 @@ #include "btcApi.h" #include "vos_nvitem.h" #include "p2p_Api.h" +#ifdef FEATURE_CESIUM_PROPRIETARY +#include "smeInternal.h" +#endif #ifdef FEATURE_OEM_DATA_SUPPORT #include "oemDataApi.h" @@ -78,6 +81,10 @@ #define SME_INVALID_COUNTRY_CODE "XX" +//Macro to disable split scan +#define SME_DISABLE_SPLIT_SCAN 255 + +#ifdef QCA_WIFI_2_0 #define SME_2_4_GHZ_MAX_FREQ 3000 #define SME_MODE_11A 0 /* 11a mode */ #define SME_MODE_11G 1 /* 11b/g mode */ @@ -97,6 +104,7 @@ (psme_channel)->reg_info_1 &= 0xff00ffff; \ (psme_channel)->reg_info_1 |= ((val & 0xff) << 16); \ } while(0) +#endif /*-------------------------------------------------------------------------- Type declarations @@ -109,6 +117,7 @@ typedef struct _smeConfigParams #endif #if defined FEATURE_WLAN_LFR tANI_U8 isFastRoamIniFeatureEnabled; + tANI_U8 MAWCEnabled; #endif #if defined FEATURE_WLAN_CCX tANI_U8 isCcxIniFeatureEnabled; @@ -122,10 +131,19 @@ typedef struct _smeConfigParams tANI_BOOLEAN isWESModeEnabled; #endif tANI_BOOLEAN fScanOffload; + tANI_U8 isAmsduSupportInAMPDU; tANI_BOOLEAN fP2pListenOffload; tANI_BOOLEAN pnoOffload; } tSmeConfigParams, *tpSmeConfigParams; +typedef enum +{ + eSME_ROAM_TRIGGER_NONE = 0, + eSME_ROAM_TRIGGER_SCAN = 1, + eSME_ROAM_TRIGGER_FAST_ROAM = 2, + eSME_ROAM_TRIGGER_MAX +} tSmeFastRoamTrigger; + #ifdef QCA_WIFI_2_0 typedef struct _smeChannelInfo { @@ -243,7 +261,7 @@ eHalStatus sme_Start(tHalHandle hHal); \param hHal - The handle returned by macOpen. - \param pmcFlag - The flag tells SME if we want to stop PMC or not + \param tHalStopType - reason for stopping \return eHAL_STATUS_SUCCESS - SME is stopped. @@ -252,7 +270,7 @@ eHalStatus sme_Start(tHalHandle hHal); \sa --------------------------------------------------------------------------*/ -eHalStatus sme_Stop(tHalHandle hHal, tANI_BOOLEAN pmcFlag); +eHalStatus sme_Stop(tHalHandle hHal, tHalStopType stopType); /*-------------------------------------------------------------------------- @@ -275,10 +293,19 @@ eHalStatus sme_Stop(tHalHandle hHal, tANI_BOOLEAN pmcFlag); \sa --------------------------------------------------------------------------*/ -eHalStatus sme_OpenSession(tHalHandle hHal, csrRoamCompleteCallback callback, void *pContext, - tANI_U8 *pSelfMacAddr, tANI_U8 *pbSessionId, - tANI_U32 type, tANI_U32 subType); +eHalStatus sme_OpenSession(tHalHandle hHal, csrRoamCompleteCallback callback, + void *pContext, tANI_U8 *pSelfMacAddr, + tANI_U8 *pbSessionId, tANI_U32 type, + tANI_U32 subType); +/*-------------------------------------------------------------------------- + + \brief sme_SetCurrDeviceMode() - Sets the current operating device mode. + \param hHal - The handle returned by macOpen. + \param currDeviceMode - Current operating device mode. + --------------------------------------------------------------------------*/ + +void sme_SetCurrDeviceMode (tHalHandle hHal, tVOS_CON_MODE currDeviceMode); /*-------------------------------------------------------------------------- @@ -823,9 +850,34 @@ eHalStatus sme_GetStatistics(tHalHandle hHal, eCsrStatsRequesterType requesterId tANI_U32 periodicity, tANI_BOOLEAN cache, tANI_U8 staId, void *pContext); +/* --------------------------------------------------------------------------- + \fn smeGetTLSTAState + \helper function to get teh TL STA State whenever the function is called. + + \param staId - The staID to be passed to the TL + to get the relevant TL STA State + \return the state as tANI_U16 + ---------------------------------------------------------------------------*/ +tANI_U16 smeGetTLSTAState(tHalHandle hHal, tANI_U8 staId); + eHalStatus sme_GetRssi(tHalHandle hHal, tCsrRssiCallback callback, tANI_U8 staId, tCsrBssid bssId, void *pContext, void* pVosContext); + +/* --------------------------------------------------------------------------- + \fn sme_GetSnr + \brief a wrapper function that client calls to register a callback to get + SNR from FW + + \param callback - SME sends back the requested stats using the callback + \param staId - The station ID for which the stats is requested for + \param bssid - The bssid of the connected session + \param pContext - user context to be passed back along with the callback + ---------------------------------------------------------------------------*/ +eHalStatus sme_GetSnr(tHalHandle hHal, + tCsrSnrCallback callback, + tANI_U8 staId, tCsrBssid bssId, + void *pContext); #if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR) eHalStatus sme_GetRoamRssi(tHalHandle hHal, tCsrRssiCallback callback, @@ -834,6 +886,47 @@ eHalStatus sme_GetRoamRssi(tHalHandle hHal, void *pContext, void* pVosContext); #endif + +#if defined(FEATURE_WLAN_CCX) && defined(FEATURE_WLAN_CCX_UPLOAD) +/* --------------------------------------------------------------------------- + \fn sme_GetTsmStats + \brief a wrapper function that client calls to register a callback to get + TSM Stats + \param callback - SME sends back the requested stats using the callback + \param staId - The station ID for which the stats is requested for + \param pContext - user context to be passed back along with the callback + \param pVosContext - vos context + \return eHalStatus + ---------------------------------------------------------------------------*/ +eHalStatus sme_GetTsmStats(tHalHandle hHal, + tCsrTsmStatsCallback callback, + tANI_U8 staId, tCsrBssid bssId, + void *pContext, void* pVosContext, tANI_U8 tid); +/* --------------------------------------------------------------------------- + \fn sme_SetCCKMIe + \brief function to store the CCKM IE passed from supplicant and use it + while packing reassociation request + \param hHal - HAL handle for device + \param pCckmIe - pointer to CCKM IE data + \param pCckmIeLen - length of the CCKM IE + \- return Success or failure + -------------------------------------------------------------------------*/ +eHalStatus sme_SetCCKMIe(tHalHandle hHal, + tANI_U8 sessionId, + tANI_U8 *pCckmIe, + tANI_U8 cckmIeLen); +/* --------------------------------------------------------------------------- + \fn sme_SetCcxBeaconRequest + \brief function to set CCX beacon request parameters + \param hHal - HAL handle for device + \param pCcxBcnReq - pointer to CCX beacon request + \- return Success or failure + -------------------------------------------------------------------------*/ +eHalStatus sme_SetCcxBeaconRequest(tHalHandle hHal, const tANI_U8 sessionId, + const tCsrCcxBeaconReq* pCcxBcnReq); + +#endif /*FEATURE_WLAN_CCX && FEATURE_WLAN_CCX_UPLOAD */ + /* --------------------------------------------------------------------------- \fn sme_CfgSetInt \brief a wrapper function that HDD calls to set parameters in CFG. @@ -1454,6 +1547,8 @@ typedef void ( *tSmeChangeCountryCallback)(void *pContext); \param pCountry New Country Code String + \param sendRegHint If we want to send reg hint to nl80211 + \return eHalStatus SUCCESS. FAILURE or RESOURCES The API finished and failed. @@ -1463,7 +1558,97 @@ eHalStatus sme_ChangeCountryCode( tHalHandle hHal, tSmeChangeCountryCallback callback, tANI_U8 *pCountry, void *pContext, - void* pVosContext ); + void* pVosContext, + tAniBool countryFromUserSpace, + tAniBool sendRegHint); + +/* --------------------------------------------------------------------------- + + \fn sme_GenericChangeCountryCode + + \brief Generic API to change country code + + \param hHal - The handle returned by macOpen. + + \param pCountry New Country Code String + + \param reg_domain Regulatory domain for the new country code + + \return eHalStatus SUCCESS. + + FAILURE or RESOURCES The API finished and failed. + + -------------------------------------------------------------------------------*/ +eHalStatus sme_GenericChangeCountryCode( tHalHandle hHal, + tANI_U8 *pCountry, + v_REGDOMAIN_t reg_domain); + +/* --------------------------------------------------------------------------- + + \fn sme_DHCPStartInd + + \brief Indicate FW about DHCP start event. + + \param hHal - The handle returned by macOpen. + + \param device_mode the mode of the device + + \param macAddr the macAddress of the devices + + \return eHalStatus SUCCESS. + + FAILURE or RESOURCES The API finished and failed. + + -------------------------------------------------------------------------------*/ + +eHalStatus sme_DHCPStartInd( tHalHandle hHal, + tANI_U8 device_mode, + tANI_U8 *macAddr ); + +#ifdef FEATURE_CESIUM_PROPRIETARY +/* --------------------------------------------------------------------------- + + \fn sme_TXFailMonitorStartStopInd + + \brief Indicate FW about TX Fail Monitor Indication` + + \param hHal - The handle returned by macOpen. + + \param tx_fail_count number of failures after which the firmware sends + an indication to host + + \param txFailIndCallback function to be called after receiving TX Fail + indication + \return eHalStatus SUCCESS. + + FAILURE or RESOURCES The API finished and failed. + + -------------------------------------------------------------------------------*/ +eHalStatus sme_TXFailMonitorStartStopInd(tHalHandle hHal, + tANI_U8 tx_fail_count, + void * txFailIndCallback); +#endif /* FEATURE_CESIUM_PROPRIETARY */ + +/* --------------------------------------------------------------------------- + + \fn sme_DHCPStopInd + + \brief Indicate FW about DHCP stop event. + + \param hHal - The handle returned by macOpen. + + \param device_mode the mode of the device + + \param macAddr the macAddress of the devices + + \return eHalStatus SUCCESS. + + FAILURE or RESOURCES The API finished and failed. + + -------------------------------------------------------------------------------*/ +eHalStatus sme_DHCPStopInd( tHalHandle hHal, + tANI_U8 device_mode, + tANI_U8 *macAddr ); /* --------------------------------------------------------------------------- @@ -1849,15 +2034,18 @@ eHalStatus sme_ConfigureAppsCpuWakeupState( tHalHandle hHal, tANI_BOOLEAN isApp wlanSuspendParam- Depicts the wlan suspend params + csrReadyToSuspendCallback - Callback to be called when ready to suspend + event is received. + callbackContext - Context associated with csrReadyToSuspendCallback. \return eHalStatus --------------------------------------------------------------------------- */ -eHalStatus sme_ConfigureSuspendInd( tHalHandle hHal, - tpSirWlanSuspendParam wlanSuspendParam, - csrReadyToSuspendCallback, - void *callbackContext); +eHalStatus sme_ConfigureSuspendInd( tHalHandle hHal, + tpSirWlanSuspendParam wlanSuspendParam, + csrReadyToSuspendCallback, + void *callbackContext); /* --------------------------------------------------------------------------- @@ -2173,6 +2361,16 @@ eHalStatus sme_p2pGetResultFilter(tHalHandle hHal, tANI_U8 HDDSessionId, eHalStatus sme_SetMaxTxPower(tHalHandle hHal, tSirMacAddr pBssid, tSirMacAddr pSelfMacAddress, v_S7_t dB); +/* --------------------------------------------------------------------------- + \fn sme_SetMaxTxPowerPerBand + \brief Used to set the Maximum Transmit Power for + specific band dynamically. Note: this setting will not persist over reboots + \param band + \param power to set in dB + \- return eHalStatus + -------------------------------------------------------------------------*/ +eHalStatus sme_SetMaxTxPowerPerBand(eCsrBand band, v_S7_t db); + /* --------------------------------------------------------------------------- \fn sme_SetTxPower @@ -2210,7 +2408,7 @@ eHalStatus sme_HideSSID(tHalHandle hHal, v_U8_t sessionId, v_U8_t ssidHidden); \param hHal - The handle returned by macOpen. \param newTMLevel - new Thermal Mitigation Level \param tmMode - Thermal Mitigation handle mode, default 0 - \return eHalStatus + \return eHalStatus ---------------------------------------------------------------------------*/ eHalStatus sme_SetTmLevel(tHalHandle hHal, v_U16_t newTMLevel, v_U16_t tmMode); @@ -2309,6 +2507,30 @@ eHalStatus sme_UpdateRoamPrefer5GHz(tHalHandle hHal, v_BOOL_t nRoamPrefer5GHz); -------------------------------------------------------------------------*/ eHalStatus sme_setRoamIntraBand(tHalHandle hHal, const v_BOOL_t nRoamIntraBand); +/* --------------------------------------------------------------------------- + \fn sme_UpdateRoamScanNProbes + \brief function to update roam scan N probes + This function is called through dynamic setConfig callback function + to update roam scan N probes + \param hHal - HAL handle for device + \param nProbes number of probe requests to be sent out + \- return Success or failure + -------------------------------------------------------------------------*/ +eHalStatus sme_UpdateRoamScanNProbes(tHalHandle hHal, const v_U8_t nProbes); + +/* --------------------------------------------------------------------------- + \fn sme_UpdateRoamScanHomeAwayTime + \brief function to update roam scan Home away time + This function is called through dynamic setConfig callback function + to update roam scan home away time + \param hHal - HAL handle for device + \param nRoamScanAwayTime Scan home away time + \- return Success or failure + -------------------------------------------------------------------------*/ +eHalStatus sme_UpdateRoamScanHomeAwayTime(tHalHandle hHal, + const v_U16_t nRoamScanHomeAwayTime, + const eAniBoolean bSendOffloadCmd); + /* --------------------------------------------------------------------------- \fn sme_getRoamIntraBand \brief get Intra band roaming @@ -2317,6 +2539,22 @@ eHalStatus sme_setRoamIntraBand(tHalHandle hHal, const v_BOOL_t nRoamIntraBand); -------------------------------------------------------------------------*/ v_BOOL_t sme_getRoamIntraBand(tHalHandle hHal); +/* --------------------------------------------------------------------------- + \fn sme_getRoamScanNProbes + \brief get N Probes + \param hHal - HAL handle for device + \- return Success or failure + -------------------------------------------------------------------------*/ +v_U8_t sme_getRoamScanNProbes(tHalHandle hHal); + +/* --------------------------------------------------------------------------- + \fn sme_getRoamScanHomeAwayTime + \brief get Roam scan home away time + \param hHal - HAL handle for device + \- return Success or failure + -------------------------------------------------------------------------*/ +v_U16_t sme_getRoamScanHomeAwayTime(tHalHandle hHal); + /* --------------------------------------------------------------------------- \fn sme_UpdateImmediateRoamRssiDiff \brief Update nImmediateRoamRssiDiff @@ -2397,6 +2635,34 @@ eHalStatus sme_SetRoamScanControl(tHalHandle hHal, v_BOOL_t roamScanControl); eHalStatus sme_UpdateIsFastRoamIniFeatureEnabled(tHalHandle hHal, const v_BOOL_t isFastRoamIniFeatureEnabled); + +/*-------------------------------------------------------------------------- + \brief sme_UpdateIsMAWCIniFeatureEnabled() - + Enable/disable LFR MAWC support at runtime + It is used at in the REG_DYNAMIC_VARIABLE macro definition of + isMAWCIniFeatureEnabled. + This is a synchronous call + \param hHal - The handle returned by macOpen. + \return eHAL_STATUS_SUCCESS - SME update MAWCEnabled config successfully. + Other status means SME is failed to update MAWCEnabled. + \sa + --------------------------------------------------------------------------*/ +eHalStatus sme_UpdateIsMAWCIniFeatureEnabled(tHalHandle hHal, + const v_BOOL_t MAWCEnabled); + +#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD +/*-------------------------------------------------------------------------- + \brief sme_UpdateEnableFastRoamInConcurrency() - enable/disable LFR if Concurrent session exists + This is a synchronuous call + \param hHal - The handle returned by macOpen. + \return eHAL_STATUS_SUCCESS + Other status means SME is failed + \sa + --------------------------------------------------------------------------*/ + +eHalStatus sme_UpdateEnableFastRoamInConcurrency(tHalHandle hHal, + v_BOOL_t bFastRoamInConIniFeatureEnabled); +#endif #endif /* FEATURE_WLAN_LFR */ #ifdef FEATURE_WLAN_CCX @@ -2590,17 +2856,19 @@ v_U8_t sme_getRoamRssiDiff(tHalHandle hHal); eHalStatus sme_ChangeRoamScanChannelList(tHalHandle hHal, tANI_U8 *pChannelList, tANI_U8 numChannels); +#ifdef FEATURE_WLAN_CCX_UPLOAD /*-------------------------------------------------------------------------- - \brief sme_ChangeCountryValidChannelListByRevision() - Change Korea valid channel list - based on country revision number + \brief sme_SetCcxRoamScanChannelList() - set ccx roam scan channel list This is a synchronuous call \param hHal - The handle returned by macOpen. \return eHAL_STATUS_SUCCESS - SME update config successful. Other status means SME is failed to update \sa --------------------------------------------------------------------------*/ -eHalStatus sme_ChangeCountryValidChannelListByRevision(tHalHandle hHal, - tANI_U8 Revision); +eHalStatus sme_SetCcxRoamScanChannelList(tHalHandle hHal, + tANI_U8 *pChannelList, + tANI_U8 numChannels); +#endif /*-------------------------------------------------------------------------- \brief csrUpdateBgScanConfigIniChannelList() - Update bgscan roam cache @@ -2625,16 +2893,6 @@ eHalStatus sme_UpdateBgScanConfigIniChannelList(tHalHandle hHal, eHalStatus sme_getRoamScanChannelList(tHalHandle hHal, tANI_U8 *pChannelList, tANI_U8 *pNumChannels); -/*-------------------------------------------------------------------------- - \brief sme_GetCountryRevision() - get Country revision index - This is a synchronuous call - \param hHal - The handle returned by macOpen. - \return eHAL_STATUS_SUCCESS - SME update config successful. - Other status means SME is failed to update - \sa - --------------------------------------------------------------------------*/ -eHalStatus sme_GetCountryRevision(tHalHandle hHal, tANI_U8 *pRevision); - /*-------------------------------------------------------------------------- \brief sme_getIsCcxFeatureEnabled() - get CCX feature enabled or not This is a synchronuous call @@ -2723,6 +2981,21 @@ eHalStatus sme_UpdateRoamScanOffloadEnabled(tHalHandle hHal, v_BOOL_t nRoamScanO -------------------------------------------------------------------------*/ tANI_U8 sme_IsFeatureSupportedByFW(tANI_U8 featEnumValue); #ifdef FEATURE_WLAN_TDLS + +/* --------------------------------------------------------------------------- + \fn sme_SendTdlsLinkEstablishParams + \brief API to send TDLS Link Establishment Parameters. + + \param peerMac - peer's Mac Adress. + \param tdlsLinkEstablishParams - TDLS Peer Link Establishment Parameters + \- return VOS_STATUS_SUCCES + -------------------------------------------------------------------------*/ + +VOS_STATUS sme_SendTdlsLinkEstablishParams(tHalHandle hHal, + tANI_U8 sessionId, + tSirMacAddr peerMac, + tCsrTdlsLinkEstablishParams *tdlsLinkEstablishParams); + /* --------------------------------------------------------------------------- \fn sme_SendTdlsMgmtFrame \brief API to send TDLS management frames. @@ -2764,13 +3037,6 @@ VOS_STATUS sme_AddTdlsPeerSta(tHalHandle hHal, tANI_U8 sessionId, tSirMacAddr pe \- return VOS_STATUS_SUCCES -------------------------------------------------------------------------*/ VOS_STATUS sme_DeleteTdlsPeerSta(tHalHandle hHal, tANI_U8 sessionId, tSirMacAddr peerMac); -/* --------------------------------------------------------------------------- - \fn sme_IsPmcBmps - \brief API to Check if PMC state is BMPS. - - \- return v_BOOL_t - -------------------------------------------------------------------------*/ -v_BOOL_t sme_IsPmcBmps(tHalHandle hHal); /* --------------------------------------------------------------------------- \fn sme_SetTdlsPowerSaveProhibited \API to set/reset the isTdlsPowerSaveProhibited. @@ -2781,6 +3047,14 @@ void sme_SetTdlsPowerSaveProhibited(tHalHandle hHal, tANI_U32 sessionId, v_BOOL_t val); #endif +/* --------------------------------------------------------------------------- + \fn sme_IsPmcBmps + \brief API to Check if PMC state is BMPS. + + \- return v_BOOL_t + -------------------------------------------------------------------------*/ +v_BOOL_t sme_IsPmcBmps(tHalHandle hHal); + #ifdef FEATURE_WLAN_TDLS_INTERNAL typedef struct smeTdlsDisResult { @@ -2834,8 +3108,200 @@ eCsrPhyMode sme_GetPhyMode(tHalHandle hHal); */ VOS_STATUS sme_SelectCBMode(tHalHandle hHal, eCsrPhyMode eCsrPhyMode, tANI_U8 channel); -/*SME API to convert convert the ini value to the ENUM used in csr and MAC*/ -ePhyChanBondState sme_GetCBPhyStateFromCBIniValue(tANI_U32 cb_ini_value); +#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD +/*-------------------------------------------------------------------------- + \brief sme_HandoffRequest() - a wrapper function to Request a handoff + from CSR. + This is a synchronous call + \param hHal - The handle returned by macOpen + \param pHandoffInfo - info provided by HDD with the handoff request (namely: + BSSID, channel etc.) + \return eHAL_STATUS_SUCCESS - SME passed the request to CSR successfully. + Other status means SME is failed to send the request. + \sa + --------------------------------------------------------------------------*/ + +eHalStatus sme_HandoffRequest(tHalHandle hHal, tCsrHandoffRequest *pHandoffInfo); +#endif +/*-------------------------------------------------------------------------- + \brief sme_isSta_p2p_clientConnected() - a wrapper function to check if there + is any connected session . + This is a synchronous call + \param hHal - The handle returned by macOpen + \return VOS_STATUS - SME passed the request to CSR successfully. + Other status means SME is failed to send the request. + \sa + --------------------------------------------------------------------------*/ +VOS_STATUS sme_isSta_p2p_clientConnected(tHalHandle hHal); + +#ifdef FEATURE_WLAN_LPHB +/* --------------------------------------------------------------------------- + \fn sme_LPHBConfigReq + \API to make configuration LPHB within FW. + \param hHal - The handle returned by macOpen + \param lphdReq - LPHB request argument by client + \param pCallbackfn - LPHB timeout notification callback function pointer + \- return Configuration message posting status, SUCCESS or Fail + -------------------------------------------------------------------------*/ +eHalStatus sme_LPHBConfigReq( + tHalHandle hHal, + tSirLPHBReq *lphdReq, + void (*pCallbackfn)(void *pAdapter, void *indParam)); +#endif /* FEATURE_WLAN_LPHB */ + +/* --------------------------------------------------------------------------- + \fn sme_AddPeriodicTxPtrn + \brief API to Periodic TX Pattern Offload feature + \param hHal - The handle returned by macOpen + \param addPeriodicTxPtrnParams - Pointer to the add pattern structure + \return eHalStatus + ---------------------------------------------------------------------------*/ +eHalStatus sme_AddPeriodicTxPtrn(tHalHandle hHal, tSirAddPeriodicTxPtrn + *addPeriodicTxPtrnParams); + +/* --------------------------------------------------------------------------- + \fn sme_DelPeriodicTxPtrn + \brief API to Periodic TX Pattern Offload feature + \param hHal - The handle returned by macOpen + \param delPeriodicTxPtrnParams - Pointer to the deleting pattern structure + \return eHalStatus + ---------------------------------------------------------------------------*/ +eHalStatus sme_DelPeriodicTxPtrn(tHalHandle hHal, tSirDelPeriodicTxPtrn + *delPeriodicTxPtrnParams); +/*-------------------------------------------------------------------------- + \brief sme_enable_disable_split_scan() - a wrapper function to set the split + scan parameter. + This is a synchronous call + \param hHal - The handle returned by macOpen + \return None. + \sa + --------------------------------------------------------------------------*/ +void sme_enable_disable_split_scan (tHalHandle hHal, tANI_U8 nNumStaChan, + tANI_U8 nNumP2PChan); + +#if defined WLAN_FEATURE_RELIABLE_MCAST +/* --------------------------------------------------------------------------- + \fn sme_EnableReliableMcast + \brief Used to enable Reliable Multicast using Leader Based Protocol + setting will not persist over reboots + \param hHal + \param sessionId + \- return eHalStatus + -------------------------------------------------------------------------*/ +eHalStatus sme_EnableReliableMcast(tHalHandle hHal, tANI_U32 sessionId); + +/* --------------------------------------------------------------------------- + \fn sme_DisableReliableMcast + \brief Used to disable Reliable Multicast using Leader Based Protocol + setting will not persist over reboots + \param hHal + \param sessionId + \- return eHalStatus + -------------------------------------------------------------------------*/ +eHalStatus sme_DisableReliableMcast(tHalHandle hHal, tANI_U32 sessionId); +#endif //#if defined WLAN_FEATURE_RELIABLE_MCAST + +/* --------------------------------------------------------------------------- + \fn sme_SendRateUpdateInd + \brief API to Update rate + \param hHal - The handle returned by macOpen + \param rateUpdateParams - Pointer to rate update params + \return eHalStatus + ---------------------------------------------------------------------------*/ +eHalStatus sme_SendRateUpdateInd(tHalHandle hHal, tSirRateUpdateInd *rateUpdateParams); + +#ifdef FEATURE_CESIUM_PROPRIETARY +/* --------------------------------------------------------------------------- + \fn sme_GetIBSSPeerInfo + \brief Used to disable Reliable Multicast using Leader Based Protocol + setting will not persist over reboots + \param hHal + \param ibssPeerInfoReq multicast Group IP address + \- return eHalStatus + -------------------------------------------------------------------------*/ +eHalStatus sme_RequestIBSSPeerInfo(tHalHandle hHal, void *pUserData, + pIbssPeerInfoCb peerInfoCbk, + tANI_BOOLEAN allPeerInfoReqd, + tANI_U8 staIdx); + +/* --------------------------------------------------------------------------- + \fn sme_IBSSRouteTableUpdate + \API to update IBSS Route table in FW. + \param hHal - The handle returned by macOpen + \param pIbssTable - ptr to IBSS table struct + \- return Success or Failiure + -------------------------------------------------------------------------*/ +eHalStatus sme_IBSSRouteTableUpdateInd(tHalHandle hHal, + tAniIbssRouteTable *pIbssTable); +#endif /* FEATURE_CESIUM_PROPRIETARY */ + +/* + * sme API to trigger fast BSS roam to a given BSSID independent of RSSI + * triggers + * return status +*/ +eHalStatus smeIssueFastRoamNeighborAPEvent (tHalHandle hHal, + tANI_U8 *bssid, + tSmeFastRoamTrigger fastRoamTrig); + +eHalStatus sme_RoamDelPMKIDfromCache( tHalHandle hHal, tANI_U8 sessionId, tANI_U8 *pBSSId ); + +void smeGetCommandQStatus( tHalHandle hHal ); + +#ifdef FEATURE_WLAN_BATCH_SCAN +/* --------------------------------------------------------------------------- + \fn sme_SetBatchScanReq + \brief API to set batch scan request in FW + \param hHal - The handle returned by macOpen. + \param pRequest - Pointer to the batch request. + \param sessionId - session ID + \param callbackRoutine - HDD callback which needs to be invoked after + getting set batch scan response from FW + \param callbackContext - pAdapter context + \return eHalStatus + ---------------------------------------------------------------------------*/ +eHalStatus +sme_SetBatchScanReq +( + tHalHandle hHal, tSirSetBatchScanReq *pRequest, tANI_U8 sessionId, + void (*callbackRoutine) (void *callbackCtx, tSirSetBatchScanRsp *pRsp), + void *callbackContext +); + +/* --------------------------------------------------------------------------- + \fn sme_TriggerBatchScanResultInd + \brief API to trigger batch scan result indications from from FW + \param hHal - The handle returned by macOpen. + \param pRequest - Pointer to get batch request. + \param sessionId - session ID + \param callbackRoutine - HDD callback which needs to be invoked after + getting get batch scan response from FW + \param callbackContext - pAdapter context + \return eHalStatus + ---------------------------------------------------------------------------*/ +eHalStatus +sme_TriggerBatchScanResultInd +( + tHalHandle hHal, tSirTriggerBatchScanResultInd *pRequest, tANI_U8 sessionId, + void (*callbackRoutine) (void *callbackCtx, void *pRsp), + void *callbackContext +); + +/* --------------------------------------------------------------------------- + \fn sme_StopBatchScanInd + \brief API to stop batch scan request in FW + \param hHal - The handle returned by macOpen. + \param pRequest - Pointer to stop batch indication + \return eHalStatus + ---------------------------------------------------------------------------*/ +eHalStatus +sme_StopBatchScanInd +( + tHalHandle hHal, tSirStopBatchScanInd *pInd, tANI_U8 sessionId +); + +#endif + /* * SME API to enable/disable idle mode powersave @@ -2849,6 +3315,9 @@ eHalStatus sme_ConfigDisablePowerSave (tHalHandle hHal, tPmcPowerSavingMode psMo eHalStatus sme_PsOffloadEnablePowerSave (tHalHandle hHal, tANI_U32 sessionId); eHalStatus sme_PsOffloadDisablePowerSave (tHalHandle hHal, tANI_U32 sessionId); +/*SME API to convert convert the ini value to the ENUM used in csr and MAC*/ +ePhyChanBondState sme_GetCBPhyStateFromCBIniValue(tANI_U32 cb_ini_value); + int sme_UpdateHTConfig(tHalHandle hHal, tANI_U8 sessionId, tANI_U16 htCapab, int value); tANI_S16 sme_GetHTConfig(tHalHandle hHal, tANI_U8 session_id, tANI_U16 ht_capab); @@ -2861,13 +3330,4 @@ eHalStatus sme_MoveCsrToScanStateForPno (tHalHandle hHal, tANI_U8 sessionId); eHalStatus sme_getChannelInfo(tHalHandle hHal, tANI_U8 chanId, tSmeChannelInfo *chanInfo); #endif -/* --------------------------------------------------------------------------- - \fn sme_SendRateUpdateInd - \brief API to Update rate - \param hHal - The handle returned by macOpen - \param rateUpdateParams - Pointer to rate update params - \return eHalStatus - ---------------------------------------------------------------------------*/ -eHalStatus sme_SendRateUpdateInd(tHalHandle hHal, tSirRateUpdateInd *rateUpdateParams); -eHalStatus sme_RoamDelPMKIDfromCache( tHalHandle hHal, tANI_U8 sessionId, tANI_U8 *pBSSId ); #endif //#if !defined( __SME_API_H ) diff --git a/CORE/SME/inc/sme_FTApi.h b/CORE/SME/inc/sme_FTApi.h index ca29765c4ccf..1f0bf2c5952e 100644 --- a/CORE/SME/inc/sme_FTApi.h +++ b/CORE/SME/inc/sme_FTApi.h @@ -25,6 +25,7 @@ * to the Linux Foundation. */ + #if !defined( __SME_FTAPI_H ) #define __SME_FTAPI_H @@ -72,7 +73,7 @@ typedef struct sFTSMEContext v_BOOL_t setFTPTKState; // Time to trigger reassoc once pre-auth is successful - tPalTimerHandle preAuthReassocIntvlTimer; + vos_timer_t preAuthReassocIntvlTimer; tCsrRoamSetKey *pCsrFTKeyInfo; } tftSMEContext, *tpftSMEContext; diff --git a/CORE/SME/inc/sme_QosApi.h b/CORE/SME/inc/sme_QosApi.h index ef0a99d4cb91..6f4ea849457d 100644 --- a/CORE/SME/inc/sme_QosApi.h +++ b/CORE/SME/inc/sme_QosApi.h @@ -54,6 +54,14 @@ #include "aniGlobal.h" #include "sirApi.h" +/*-------------------------------------------------------------------------- + Pre-processor Definitions + ------------------------------------------------------------------------*/ +#define SME_QOS_UAPSD_VO 0x01 +#define SME_QOS_UAPSD_VI 0x02 +#define SME_QOS_UAPSD_BE 0x08 +#define SME_QOS_UAPSD_BK 0x04 + /*-------------------------------------------------------------------------- Type declarations ------------------------------------------------------------------------*/ diff --git a/CORE/SME/inc/sme_RrmApi.h b/CORE/SME/inc/sme_RrmApi.h index b9696dc6612f..81dee62d10d3 100644 --- a/CORE/SME/inc/sme_RrmApi.h +++ b/CORE/SME/inc/sme_RrmApi.h @@ -25,7 +25,6 @@ * to the Linux Foundation. */ - #if !defined( __SMERRMAPI_H ) #define __SMERRMAPI_H @@ -69,6 +68,7 @@ VOS_STATUS sme_RrmNeighborReportRequest(tpAniSirGlobal pMac, tANI_U8 sessionId, tRrmNeighborReportDesc* smeRrmGetFirstBssEntryFromNeighborCache( tpAniSirGlobal pMac); tRrmNeighborReportDesc* smeRrmGetNextBssEntryFromNeighborCache( tpAniSirGlobal pMac, tpRrmNeighborReportDesc pBssEntry); +void sme_RrmProcessBeaconReportReqInd(tpAniSirGlobal pMac, void *pMsgBuf); #endif diff --git a/CORE/SME/inc/smsDebug.h b/CORE/SME/inc/smsDebug.h index a49878739f86..a9a6226ff390 100644 --- a/CORE/SME/inc/smsDebug.h +++ b/CORE/SME/inc/smsDebug.h @@ -47,5 +47,6 @@ #include "sirDebug.h" void smsLog(tpAniSirGlobal pMac, tANI_U32 loglevel, const char *pString,...); +void pmcLog(tpAniSirGlobal pMac, tANI_U32 loglevel, const char *pString,...); #endif // __HAL_DEBUG_H__ diff --git a/CORE/SME/src/QoS/sme_Qos.c b/CORE/SME/src/QoS/sme_Qos.c index 2ff0cdf9d525..7a010fd898d2 100644 --- a/CORE/SME/src/QoS/sme_Qos.c +++ b/CORE/SME/src/QoS/sme_Qos.c @@ -52,7 +52,7 @@ #include "smsDebug.h" #include "utilsParser.h" #endif -#ifdef FEATURE_WLAN_CCX +#if defined(FEATURE_WLAN_CCX) && !defined(FEATURE_WLAN_CCX_UPLOAD) #include #endif @@ -122,6 +122,14 @@ typedef enum SME_QOS_HANDOFF, }sme_QosStates; +/*--------------------------------------------------------------------------- + Enumeration of the various Release QoS trigger +---------------------------------------------------------------------------*/ +typedef enum +{ + SME_QOS_RELEASE_DEFAULT = 0, + SME_QOS_RELEASE_BY_AP, +}sme_QosRelTriggers; /*--------------------------------------------------------------------------- Enumeration of the various QoS cmds ---------------------------------------------------------------------------*/ @@ -150,7 +158,7 @@ typedef enum Table to map user priority passed in as an argument to appropriate Access Category as specified in 802.11e/WMM ---------------------------------------------------------------------------*/ -sme_QosEdcaAcType sme_QosUPtoACMap[SME_QOS_WMM_UP_MAX] = +sme_QosEdcaAcType sme_QosUPtoACMap[SME_QOS_WMM_UP_MAX] = { SME_QOS_EDCA_AC_BE, /* User Priority 0 */ SME_QOS_EDCA_AC_BK, /* User Priority 1 */ @@ -294,6 +302,7 @@ typedef struct sme_QosACInfo_s parsing the RIC received in the the reassoc response */ tSirAddtsRsp addTsRsp[SME_QOS_TSPEC_INDEX_MAX]; #endif + sme_QosRelTriggers relTrig; } sme_QosACInfo; /*--------------------------------------------------------------------------- @@ -2574,7 +2583,7 @@ sme_QosStatusType sme_QosInternalReleaseReq(tpAniSirGlobal pMac, { // this is the only flow aggregated in this TSPEC status = SME_QOS_STATUS_RELEASE_SUCCESS_RSP; -#ifdef FEATURE_WLAN_CCX +#if defined(FEATURE_WLAN_CCX) && !defined(FEATURE_WLAN_CCX_UPLOAD) if (ac == SME_QOS_EDCA_AC_VO) { // Indicate to neighbor roam logic of the new required VO @@ -2615,24 +2624,34 @@ sme_QosStatusType sme_QosInternalReleaseReq(tpAniSirGlobal pMac, } } } - //send delts - hstatus = qosIssueCommand(pMac, sessionId, eSmeCommandDelTs, - NULL, ac, flow_info->tspec_mask); - if(!HAL_STATUS_SUCCESS(hstatus)) + if (SME_QOS_RELEASE_DEFAULT == pACInfo->relTrig) { - //err msg - VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, - "%s: %d: sme_QosDelTsReq() failed", - __func__, __LINE__); - status = SME_QOS_STATUS_RELEASE_FAILURE_RSP; - // we won't be waiting for a response from the AP - // so vote powersave back on - pSession->readyForPowerSave = VOS_TRUE; + //send delts + hstatus = qosIssueCommand(pMac, sessionId, eSmeCommandDelTs, + NULL, ac, flow_info->tspec_mask); + if(!HAL_STATUS_SUCCESS(hstatus)) + { + //err msg + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, + "%s: %d: sme_QosDelTsReq() failed", + __func__, __LINE__); + status = SME_QOS_STATUS_RELEASE_FAILURE_RSP; + // we won't be waiting for a response from the AP + // so vote powersave back on + pSession->readyForPowerSave = VOS_TRUE; + } + else + { + pACInfo->tspec_mask_status &= SME_QOS_TSPEC_MASK_BIT_1_2_SET & + (~flow_info->tspec_mask); + deltsIssued = VOS_TRUE; + } } else { - pACInfo->tspec_mask_status &= SME_QOS_TSPEC_MASK_BIT_1_2_SET & - (~flow_info->tspec_mask); + pSession->readyForPowerSave = VOS_TRUE; + pACInfo->tspec_mask_status &= SME_QOS_TSPEC_MASK_BIT_1_2_SET & + (~flow_info->tspec_mask); deltsIssued = VOS_TRUE; } } @@ -2690,13 +2709,27 @@ sme_QosStatusType sme_QosInternalReleaseReq(tpAniSirGlobal pMac, // so vote powersave back on pSession->readyForPowerSave = VOS_TRUE; } - if(buffered_cmd) + + if (SME_QOS_RELEASE_BY_AP == pACInfo->relTrig) { - flow_info->QoSCallback(pMac, flow_info->HDDcontext, + flow_info->QoSCallback(pMac, flow_info->HDDcontext, + &pACInfo->curr_QoSInfo[flow_info->tspec_mask - 1], + SME_QOS_STATUS_RELEASE_QOS_LOST_IND, + flow_info->QosFlowID); + + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO_HIGH, + "%s: %d: Deleting entry at %p with flowID %d", + __func__, __LINE__, + flow_info, flow_info->QosFlowID); + } + else if(buffered_cmd) + { + flow_info->QoSCallback(pMac, flow_info->HDDcontext, NULL, status, flow_info->QosFlowID); } + if(SME_QOS_STATUS_RELEASE_FAILURE_RSP == status) { break; @@ -2740,6 +2773,7 @@ sme_QosStatusType sme_QosInternalReleaseReq(tpAniSirGlobal pMac, sessionId, flow_info, QosFlowID); csrLLRemoveEntry(&sme_QosCb.flow_list, pEntry, VOS_TRUE ); pDeletedFlow = flow_info; + pACInfo->relTrig = SME_QOS_RELEASE_DEFAULT; } /* if we are doing reassoc & we are already in handoff state, no need to move to requested state. But make sure to set the previous state @@ -2897,14 +2931,10 @@ sme_QosStatusType sme_QosSetup(tpAniSirGlobal pMac, //notify HDD through the synchronous status msg return SME_QOS_STATUS_SETUP_NOT_QOS_AP_RSP; } - if(pTspec_Info->max_service_interval || pTspec_Info->min_service_interval) - { - pTspec_Info->ts_info.psb = 1; - } - else - { - pTspec_Info->ts_info.psb = 0; - } + + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_DEBUG, + "%s: %d: UAPSD/PSB set %d: ", __func__, __LINE__, + pTspec_Info->ts_info.psb); pACInfo = &pSession->ac_info[ac]; do @@ -2923,6 +2953,19 @@ sme_QosStatusType sme_QosSetup(tpAniSirGlobal pMac, __func__, __LINE__); break; } + + if (pTspec_Info->ts_info.psb && + !(pIes->WMMParams.qosInfo & SME_QOS_AP_SUPPORTS_APSD) && + !(pIes->WMMInfoAp.uapsd)) + { + // application is looking for APSD but AP doesn't support it + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, + "%s: %d: On session %d AP doesn't support APSD", + __func__, __LINE__, + sessionId); + break; + } + if(SME_QOS_MAX_TID == pTspec_Info->ts_info.tid) { //App didn't set TID, generate one @@ -3086,6 +3129,7 @@ eHalStatus sme_QosProcessSetKeySuccessInd(tpAniSirGlobal pMac, v_U8_t sessionId, { VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_WARN, "########### Set Key Complete #############"); + (void)sme_QosProcessBufferedCmd(sessionId); return eHAL_STATUS_SUCCESS; } #endif @@ -3347,7 +3391,7 @@ eHalStatus sme_QosCreateTspecRICIE(tpAniSirGlobal pMac, sme_QosWmmTspecInfo *pTs ricIE.TSPEC.max_msdu_size = pTspec_Info->maximum_msdu_size; ricIE.TSPEC.max_service_int = pTspec_Info->max_service_interval; ricIE.TSPEC.mean_data_rate = pTspec_Info->mean_data_rate; - ricIE.TSPEC.medium_time = pTspec_Info->medium_time; + ricIE.TSPEC.medium_time = 0; ricIE.TSPEC.min_data_rate = pTspec_Info->min_data_rate; ricIE.TSPEC.min_phy_rate = pTspec_Info->min_phy_rate; ricIE.TSPEC.min_service_int = pTspec_Info->min_service_interval; @@ -3391,7 +3435,7 @@ eHalStatus sme_QosCreateTspecRICIE(tpAniSirGlobal pMac, sme_QosWmmTspecInfo *pTs ricIE.WMMTSPEC.max_msdu_size = pTspec_Info->maximum_msdu_size; ricIE.WMMTSPEC.max_service_int = pTspec_Info->max_service_interval; ricIE.WMMTSPEC.mean_data_rate = pTspec_Info->mean_data_rate; - ricIE.WMMTSPEC.medium_time = pTspec_Info->medium_time; + ricIE.WMMTSPEC.medium_time = 0; ricIE.WMMTSPEC.min_data_rate = pTspec_Info->min_data_rate; ricIE.WMMTSPEC.min_phy_rate = pTspec_Info->min_phy_rate; ricIE.WMMTSPEC.min_service_int = pTspec_Info->min_service_interval; @@ -3850,6 +3894,15 @@ eHalStatus sme_QosAddTsReq(tpAniSirGlobal pMac, "%s: %d: invoked on session %d for AC %d", __func__, __LINE__, sessionId, ac); + if (sessionId >= CSR_ROAM_SESSION_MAX) + { + //err msg + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, + "%s: %d: sessionId(%d) is invalid", + __func__, __LINE__, sessionId); + return eHAL_STATUS_FAILURE; + } + pSession = &sme_QosCb.sessionInfo[sessionId]; pMsg = (tSirAddtsReq *)vos_mem_malloc(sizeof(tSirAddtsReq)); if (!pMsg) @@ -4079,10 +4132,10 @@ eHalStatus sme_QosProcessAddTsRsp(tpAniSirGlobal pMac, void *pMsgBuf) sme_QosACInfo *pACInfo; sme_QosEdcaAcType ac; #endif - #ifdef FEATURE_WLAN_DIAG_SUPPORT - WLAN_VOS_DIAG_EVENT_DEF(qos, vos_event_wlan_qos_payload_type); + WLAN_VOS_DIAG_EVENT_DEF(qos, vos_event_wlan_qos_payload_type); #endif + pSession = &sme_QosCb.sessionInfo[sessionId]; #ifdef WLAN_FEATURE_VOWIFI_11R @@ -4110,6 +4163,7 @@ eHalStatus sme_QosProcessAddTsRsp(tpAniSirGlobal pMac, void *pMsgBuf) } #endif + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO_HIGH, "%s: %d: Invoked on session %d with return code %d", __func__, __LINE__, @@ -4222,26 +4276,14 @@ eHalStatus sme_QosProcessDelTsInd(tpAniSirGlobal pMac, void *pMsgBuf) VOS_ASSERT(0); return eHAL_STATUS_FAILURE; } - //clean up the CB - vos_mem_zero(&pACInfo->curr_QoSInfo[SME_QOS_TSPEC_INDEX_0], - sizeof(sme_QosWmmTspecInfo)); - vos_mem_zero(&pACInfo->requested_QoSInfo[SME_QOS_TSPEC_INDEX_0], - sizeof(sme_QosWmmTspecInfo)); - vos_mem_zero(&pACInfo->curr_QoSInfo[SME_QOS_TSPEC_INDEX_1], - sizeof(sme_QosWmmTspecInfo)); - vos_mem_zero(&pACInfo->requested_QoSInfo[SME_QOS_TSPEC_INDEX_1], - sizeof(sme_QosWmmTspecInfo)); - pACInfo->tspec_mask_status = SME_QOS_TSPEC_MASK_CLEAR; - pACInfo->tspec_pending = 0; - //event: EVENT_WLAN_QOS -#ifdef FEATURE_WLAN_DIAG_SUPPORT + +//event: EVENT_WLAN_QOS +#ifdef FEATURE_WLAN_DIAG_SUPPORT qos.eventId = SME_QOS_DIAG_DELTS; qos.reasonCode = SME_QOS_DIAG_DELTS_IND_FROM_AP; WLAN_VOS_DIAG_EVENT_REPORT(&qos, EVENT_WLAN_QOS); #endif //FEATURE_WLAN_DIAG_SUPPORT - sme_QosStateTransition(sessionId, ac, SME_QOS_LINK_UP); - (void)sme_QosProcessBufferedCmd(sessionId); return eHAL_STATUS_SUCCESS; } /*-------------------------------------------------------------------------- @@ -4463,7 +4505,7 @@ eHalStatus sme_QosProcessReassocReqEv(tpAniSirGlobal pMac, v_U8_t sessionId, voi eHalStatus sme_QosProcessReassocSuccessEv(tpAniSirGlobal pMac, v_U8_t sessionId, void * pEvent_info) { - tCsrRoamSession *pCsrRoamSession = CSR_GET_SESSION( pMac, sessionId ); + tCsrRoamSession *pCsrRoamSession = NULL; sme_QosSessionInfo *pSession; sme_QosACInfo *pACInfo; sme_QosEdcaAcType ac, ac_index; @@ -4477,6 +4519,17 @@ eHalStatus sme_QosProcessReassocSuccessEv(tpAniSirGlobal pMac, v_U8_t sessionId, "%s: %d: invoked on session %d", __func__, __LINE__, sessionId); + + if (CSR_ROAM_SESSION_MAX <= sessionId) { + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, + "%s: %d: invoked on session %d", + __func__, __LINE__, + sessionId); + return status; + } + + pCsrRoamSession = CSR_GET_SESSION( pMac, sessionId ); + pSession = &sme_QosCb.sessionInfo[sessionId]; // our pending reassociation has completed // we can allow powersave @@ -5387,8 +5440,6 @@ eHalStatus sme_QosProcessAddTsSuccessRsp(tpAniSirGlobal pMac, "%s: %d: On session %d an AddTS is not pending on AC %d", __func__, __LINE__, sessionId, ac); - //ASSERT - VOS_ASSERT(0); return eHAL_STATUS_FAILURE; } //App is looking for APSD or the App which was looking for APSD has been @@ -5420,8 +5471,56 @@ eHalStatus sme_QosProcessAddTsSuccessRsp(tpAniSirGlobal pMac, return eHAL_STATUS_FAILURE; } } - pACInfo->curr_QoSInfo[tspec_pending - 1] = - pACInfo->requested_QoSInfo[tspec_pending - 1]; + + pACInfo->curr_QoSInfo[tspec_pending - 1].ts_info.burst_size_defn = + pRsp->tspec.tsinfo.traffic.burstSizeDefn; + pACInfo->curr_QoSInfo[tspec_pending - 1].ts_info.ack_policy = + pRsp->tspec.tsinfo.traffic.ackPolicy; + pACInfo->curr_QoSInfo[tspec_pending - 1].ts_info.up = + pRsp->tspec.tsinfo.traffic.userPrio; + pACInfo->curr_QoSInfo[tspec_pending - 1].ts_info.psb = + pRsp->tspec.tsinfo.traffic.psb; + pACInfo->curr_QoSInfo[tspec_pending - 1].ts_info.direction = + pRsp->tspec.tsinfo.traffic.direction; + pACInfo->curr_QoSInfo[tspec_pending - 1].ts_info.tid = + pRsp->tspec.tsinfo.traffic.tsid; + pACInfo->curr_QoSInfo[tspec_pending - 1].nominal_msdu_size = + pRsp->tspec.nomMsduSz; + pACInfo->curr_QoSInfo[tspec_pending - 1].maximum_msdu_size = + pRsp->tspec.maxMsduSz; + pACInfo->curr_QoSInfo[tspec_pending - 1].min_service_interval = + pRsp->tspec.minSvcInterval; + pACInfo->curr_QoSInfo[tspec_pending - 1].max_service_interval = + pRsp->tspec.maxSvcInterval; + pACInfo->curr_QoSInfo[tspec_pending - 1].inactivity_interval = + pRsp->tspec.inactInterval; + pACInfo->curr_QoSInfo[tspec_pending - 1].suspension_interval = + pRsp->tspec.suspendInterval; + pACInfo->curr_QoSInfo[tspec_pending - 1].svc_start_time = + pRsp->tspec.svcStartTime; + pACInfo->curr_QoSInfo[tspec_pending - 1].min_data_rate = + pRsp->tspec.minDataRate; + pACInfo->curr_QoSInfo[tspec_pending - 1].mean_data_rate = + pRsp->tspec.meanDataRate; + pACInfo->curr_QoSInfo[tspec_pending - 1].peak_data_rate = + pRsp->tspec.peakDataRate; + pACInfo->curr_QoSInfo[tspec_pending - 1].max_burst_size = + pRsp->tspec.maxBurstSz; + pACInfo->curr_QoSInfo[tspec_pending - 1].delay_bound = + pRsp->tspec.delayBound; + + pACInfo->curr_QoSInfo[tspec_pending - 1].min_phy_rate = + pRsp->tspec.minPhyRate; + pACInfo->curr_QoSInfo[tspec_pending - 1].surplus_bw_allowance = + pRsp->tspec.surplusBw; + pACInfo->curr_QoSInfo[tspec_pending - 1].medium_time = + pRsp->tspec.mediumTime; + + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, + "%s: %d: On session %d AddTspec Medium Time %d", + __func__, __LINE__, + sessionId, pRsp->tspec.mediumTime); + /* Check if the current flow is for bi-directional. If so, update the number of flows * to reflect that all flows are aggregated into tspec index 0. */ if((pACInfo->curr_QoSInfo[pACInfo->tspec_pending - 1].ts_info.direction == SME_QOS_WMM_TS_DIR_BOTH) && @@ -5506,7 +5605,7 @@ eHalStatus sme_QosProcessAddTsSuccessRsp(tpAniSirGlobal pMac, } WLAN_VOS_DIAG_LOG_REPORT(log_ptr); #endif //FEATURE_WLAN_DIAG_SUPPORT -#ifdef FEATURE_WLAN_CCX +#if defined(FEATURE_WLAN_CCX) && !defined(FEATURE_WLAN_CCX_UPLOAD) if (ac == SME_QOS_EDCA_AC_VO) { // Indicate to neighbor roam logic of the new required VO @@ -5562,10 +5661,14 @@ eHalStatus sme_QosAggregateParams( } vos_mem_copy(&TspecInfo, pCurrent_Tspec_Info, sizeof(sme_QosWmmTspecInfo)); + TspecInfo.ts_info.psb = pInput_Tspec_Info->ts_info.psb; /*------------------------------------------------------------------------- APSD preference is only meaningful if service interval was set by app -------------------------------------------------------------------------*/ - if(pCurrent_Tspec_Info->min_service_interval && pInput_Tspec_Info->min_service_interval) + if(pCurrent_Tspec_Info->min_service_interval && + pInput_Tspec_Info->min_service_interval && + (pCurrent_Tspec_Info->ts_info.direction != + pInput_Tspec_Info->ts_info.direction)) { TspecInfo.min_service_interval = VOS_MIN( pCurrent_Tspec_Info->min_service_interval, @@ -5575,7 +5678,10 @@ eHalStatus sme_QosAggregateParams( { TspecInfo.min_service_interval = pInput_Tspec_Info->min_service_interval; } - if(pCurrent_Tspec_Info->max_service_interval) + if(pCurrent_Tspec_Info->max_service_interval && + pInput_Tspec_Info->max_service_interval && + (pCurrent_Tspec_Info->ts_info.direction != + pInput_Tspec_Info->ts_info.direction)) { TspecInfo.max_service_interval = VOS_MIN( pCurrent_Tspec_Info->max_service_interval, @@ -6687,6 +6793,9 @@ eHalStatus sme_QosDelTsIndFnp(tpAniSirGlobal pMac, tListElem *pEntry) sme_QosACInfo *pACInfo; sme_QosFlowInfoEntry *flow_info = NULL; sme_QosEdcaAcType ac; + eHalStatus lock_status = eHAL_STATUS_FAILURE; + sme_QosStatusType status; + if(!pEntry) { VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, @@ -6701,18 +6810,24 @@ eHalStatus sme_QosDelTsIndFnp(tpAniSirGlobal pMac, tListElem *pEntry) ac = flow_info->ac_type; pSession = &sme_QosCb.sessionInfo[flow_info->sessionId]; pACInfo = &pSession->ac_info[ac]; - flow_info->QoSCallback(pMac, flow_info->HDDcontext, - &pACInfo->curr_QoSInfo[flow_info->tspec_mask - 1], - SME_QOS_STATUS_RELEASE_QOS_LOST_IND, - flow_info->QosFlowID); - pACInfo->num_flows[flow_info->tspec_mask - 1]--; + pACInfo->relTrig = SME_QOS_RELEASE_BY_AP; + + lock_status = sme_AcquireGlobalLock( &pMac->sme ); + if ( !HAL_STATUS_SUCCESS( lock_status ) ) + { + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, + "%s: %d: Unable to obtain lock", + __func__, __LINE__); + return SME_QOS_STATUS_RELEASE_FAILURE_RSP; + } + //Call the internal function for QoS release, adding a layer of abstraction + status = sme_QosInternalReleaseReq(pMac, flow_info->QosFlowID, VOS_FALSE); + sme_ReleaseGlobalLock( &pMac->sme ); VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO_HIGH, - "%s: %d: Deleting entry at %p with flowID %d", + "%s: %d: QoS Release return status on Flow %d is %d", __func__, __LINE__, - flow_info, flow_info->QosFlowID); - csrLLRemoveEntry(&sme_QosCb.flow_list, pEntry, VOS_TRUE ); - // reclaim the memory - vos_mem_free(flow_info); + flow_info->QosFlowID, status); + return eHAL_STATUS_SUCCESS; } /*-------------------------------------------------------------------------- @@ -7587,9 +7702,8 @@ eHalStatus sme_QosProcessIntoUapsdMode(tpAniSirGlobal pMac) flow_info = GET_BASE_ADDR( pEntry, sme_QosFlowInfoEntry, link ); pSession = &sme_QosCb.sessionInfo[flow_info->sessionId]; //only notify the flows which already successfully setup UAPSD - if((flow_info->QoSInfo.max_service_interval || - flow_info->QoSInfo.min_service_interval) && - (SME_QOS_REASON_REQ_SUCCESS == flow_info->reason)) + if( (flow_info->QoSInfo.ts_info.psb) && + (SME_QOS_REASON_REQ_SUCCESS == flow_info->reason) ) { flow_info->QoSCallback(pMac, flow_info->HDDcontext, &pSession->ac_info[flow_info->ac_type].curr_QoSInfo[flow_info->tspec_mask - 1], @@ -7924,8 +8038,7 @@ sme_QosStatusType sme_QosTriggerUapsdChange( tpAniSirGlobal pMac ) tspec1 = SME_QOS_TSPEC_MASK_BIT_1_2_SET & pACInfo->tspec_mask_status; } // Does TSPEC 1 really require UAPSD? - fIsUapsdNeeded = (v_BOOL_t)(pACInfo->curr_QoSInfo[tspec1 - 1].max_service_interval || - pACInfo->curr_QoSInfo[tspec1 - 1].min_service_interval); + fIsUapsdNeeded = (v_BOOL_t)(pACInfo->curr_QoSInfo[tspec1 - 1].ts_info.psb); //double check whether we need to do anything if( fIsUapsdNeeded ) { @@ -7940,8 +8053,7 @@ sme_QosStatusType sme_QosTriggerUapsdChange( tpAniSirGlobal pMac ) if( tspec2 ) { // Does TSPEC 2 really require UAPSD? - fIsUapsdNeeded = (v_BOOL_t)(pACInfo->curr_QoSInfo[tspec2 - 1].max_service_interval || - pACInfo->curr_QoSInfo[tspec2 - 1].min_service_interval); + fIsUapsdNeeded = (v_BOOL_t)(pACInfo->curr_QoSInfo[tspec2 - 1].ts_info.psb); if( fIsUapsdNeeded ) { //No need to inform HDD @@ -7968,8 +8080,7 @@ sme_QosStatusType sme_QosTriggerUapsdChange( tpAniSirGlobal pMac ) else { //Since ACM bit is not set, there should be only one QoS information for both directions. - fIsUapsdNeeded = (v_BOOL_t)(pACInfo->curr_QoSInfo[0].max_service_interval || - pACInfo->curr_QoSInfo[0].min_service_interval); + fIsUapsdNeeded = (v_BOOL_t)(pACInfo->curr_QoSInfo[0].ts_info.psb); if(fIsUapsdNeeded) { // we need UAPSD on this AC (and we may not currently have it) diff --git a/CORE/SME/src/btc/btcApi.c b/CORE/SME/src/btc/btcApi.c index 805dbf312d1f..fbdea584afd7 100644 --- a/CORE/SME/src/btc/btcApi.c +++ b/CORE/SME/src/btc/btcApi.c @@ -71,6 +71,8 @@ VOS_STATUS btcOpen (tHalHandle hHal) { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); VOS_STATUS vosStatus; + int i; + /* Initialize BTC configuartion. */ pMac->btc.btcConfig.btcExecutionMode = BTC_SMART_COEXISTENCE; pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp = 0; @@ -98,6 +100,22 @@ VOS_STATUS btcOpen (tHalHandle hHal) pMac->btc.btcHBActive = VOS_TRUE; pMac->btc.btcScanCompromise = VOS_FALSE; + for (i = 0; i < MWS_COEX_MAX_VICTIM_TABLE; i++) + { + pMac->btc.btcConfig.mwsCoexVictimWANFreq[i] = 0; + pMac->btc.btcConfig.mwsCoexVictimWLANFreq[i] = 0; + pMac->btc.btcConfig.mwsCoexVictimConfig[i] = 0; + pMac->btc.btcConfig.mwsCoexVictimConfig2[i] = 0; + } + + for (i = 0; i < MWS_COEX_MAX_CONFIG; i++) + { + pMac->btc.btcConfig.mwsCoexConfig[i] = 0; + } + + pMac->btc.btcConfig.mwsCoexModemBackoff = 0; + pMac->btc.btcConfig.SARPowerBackoff = 0; + vosStatus = vos_timer_init( &pMac->btc.restoreHBTimer, VOS_TIMER_TYPE_SW, btcRestoreHeartBeatMonitoringHandle, @@ -1797,15 +1815,15 @@ void btcUapsdCheck( tpAniSirGlobal pMac, tpSmeBtEvent pBtEvent ) if( !fMoreSCO && !pMac->btc.fA2DPUp ) { //All SCO is disconnected - pMac->btc.btcUapsdOk = VOS_TRUE; smsLog( pMac, LOGE, "BT event (DISCONNECTION) happens, UAPSD-allowed flag (%d) change to TRUE", - pBtEvent->btEventType, pMac->btc.btcUapsdOk ); + pMac->btc.btcUapsdOk ); + pMac->btc.btcUapsdOk = VOS_TRUE; } } break; case BT_EVENT_DEVICE_SWITCHED_OFF: smsLog( pMac, LOGE, "BT event (DEVICE_OFF) happens, UAPSD-allowed flag (%d) change to TRUE", - pBtEvent->btEventType, pMac->btc.btcUapsdOk ); + pMac->btc.btcUapsdOk ); //Clean up SCO for(i=0; i < BT_MAX_SCO_SUPPORT; i++) { @@ -1978,6 +1996,38 @@ eHalStatus btcHandleCoexInd(tHalHandle hHal, void* pMsg) smsLog(pMac, LOGW, "Coex indication in %s(), type - SIR_COEX_IND_TYPE_SCAN_NOT_COMPROMISED", __func__); } + else if (pSmeCoexInd->coexIndType == SIR_COEX_IND_TYPE_DISABLE_AGGREGATION_IN_2p4) + { + if (pMac->roam.configParam.disableAggWithBtc) + { + ccmCfgSetInt(pMac, WNI_CFG_DEL_ALL_RX_BA_SESSIONS_2_4_G_BTC, 1, + NULL, eANI_BOOLEAN_FALSE); + pMac->btc.btcBssfordisableaggr[0] = pSmeCoexInd->coexIndData[0] & 0xFF; + pMac->btc.btcBssfordisableaggr[1] = pSmeCoexInd->coexIndData[0] >> 8; + pMac->btc.btcBssfordisableaggr[2] = pSmeCoexInd->coexIndData[1] & 0xFF; + pMac->btc.btcBssfordisableaggr[3] = pSmeCoexInd->coexIndData[1] >> 8; + pMac->btc.btcBssfordisableaggr[4] = pSmeCoexInd->coexIndData[2] & 0xFF; + pMac->btc.btcBssfordisableaggr[5] = pSmeCoexInd->coexIndData[2] >> 8; + smsLog(pMac, LOGW, + "Coex indication in %s(), \ + type - SIR_COEX_IND_TYPE_DISABLE_AGGREGATION_IN_2p4 \ + for BSSID %02x:%02x:%02x:%02x:%02x:%02x",__func__, + pMac->btc.btcBssfordisableaggr[0],pMac->btc.btcBssfordisableaggr[1], + pMac->btc.btcBssfordisableaggr[2],pMac->btc.btcBssfordisableaggr[3], + pMac->btc.btcBssfordisableaggr[4],pMac->btc.btcBssfordisableaggr[5]); + } + } + else if (pSmeCoexInd->coexIndType == SIR_COEX_IND_TYPE_ENABLE_AGGREGATION_IN_2p4) + { + if (pMac->roam.configParam.disableAggWithBtc) + { + ccmCfgSetInt(pMac, WNI_CFG_DEL_ALL_RX_BA_SESSIONS_2_4_G_BTC, 0, + NULL, eANI_BOOLEAN_FALSE); + smsLog(pMac, LOGW, + "Coex indication in %s(), type - SIR_COEX_IND_TYPE_ENABLE_AGGREGATION_IN_2p4", + __func__); + } + } // unknown indication type else { diff --git a/CORE/SME/src/ccm/ccmApi.c b/CORE/SME/src/ccm/ccmApi.c index a6d33eef2dc8..a2772559c060 100644 --- a/CORE/SME/src/ccm/ccmApi.c +++ b/CORE/SME/src/ccm/ccmApi.c @@ -76,7 +76,7 @@ static tANI_U32 * encodeCfgReq(tHddHandle hHdd, tANI_U32 *pl, tANI_U32 cfgId, tA } else { - palCopyMemory(hHdd, (void *)pl, (void *)pBuf, length); + vos_mem_copy((void *)pl, (void *)pBuf, length); pl += (CFGOBJ_ALIGN(length) / CFGOBJ_ALIGNTO); } return pl ; @@ -110,8 +110,8 @@ static eHalStatus sendCfg(tpAniSirGlobal pMac, tHddHandle hHdd, tCfgReq *req, tA CFGOBJ_LEN_SIZE + CFGOBJ_ALIGN(req->length)) ; - status = palAllocateMemory(hHdd, (void **)&msg, msgLen); - if (status == eHAL_STATUS_SUCCESS) + msg = vos_mem_malloc(msgLen); + if ( NULL != msg ) { if( fRsp ) { @@ -134,7 +134,8 @@ static eHalStatus sendCfg(tpAniSirGlobal pMac, tHddHandle hHdd, tCfgReq *req, tA } else { - smsLog( pMac, LOGW, FL("palAllocateMemory(len=%d)"), msgLen ); + smsLog( pMac, LOGW, FL("failed to allocate memory(len=%d)"), msgLen ); + status = eHAL_STATUS_FAILURE; } return status ; @@ -150,7 +151,8 @@ static tCfgReq * allocateCfgReq(tHddHandle hHdd, tANI_U32 type, tANI_S32 length) alloc_len += length ; } - if (palAllocateMemory(hHdd, (void **)&req, alloc_len) != eHAL_STATUS_SUCCESS) + req = vos_mem_malloc(alloc_len); + if ( NULL == req ) { return NULL ; } @@ -162,7 +164,7 @@ static tCfgReq * allocateCfgReq(tHddHandle hHdd, tANI_U32 type, tANI_S32 length) static void freeCfgReq(tHddHandle hHdd, tCfgReq *req) { - palFreeMemory(hHdd, (void*)req) ; + vos_mem_free(req); } static void add_req_tail(tCfgReq *req, struct ccmlink *q) @@ -291,7 +293,7 @@ static eHalStatus cfgSetSub(tpAniSirGlobal pMac, tHddHandle hHdd, tANI_U32 cfgId } else { - palCopyMemory(hHdd, (void*)req->ccmPtr, (void*)ccmPtr, length); + vos_mem_copy((void *)req->ccmPtr, (void *)ccmPtr, length); } palSpinLockTake(hHdd, pMac->ccm.lock); @@ -399,7 +401,7 @@ eHalStatus ccmOpen(tHalHandle hHal) tHddHandle hHdd = halHandle2HddHandle(hHal); tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - (void)palZeroMemory(hHdd, &pMac->ccm, sizeof(tCcm)) ; + vos_mem_set(&pMac->ccm, sizeof(tCcm), 0); return palSpinLockAlloc(hHdd, &pMac->ccm.lock); } @@ -667,8 +669,8 @@ eHalStatus ccmCfgGetStr(tHalHandle hHal, tANI_U32 cfgId, tANI_U8 *pBuf, tANI_U32 if (req && req->state == eCCM_REQ_DONE && (tANI_U32)req->length <= *pLength) { - *pLength = req->length ; - palCopyMemory(hHdd, (void*)pBuf, (void*)req->ccmPtr, req->length); + *pLength = req->length ; + vos_mem_copy((void *)pBuf, (void *)req->ccmPtr, req->length); } else { @@ -737,11 +739,12 @@ static eHalStatus cfgUpdate(tpAniSirGlobal pMac, tHddHandle hHdd, tCcmCfgSetCall pMac->ccm.replay.callback = callback ; pMac->ccm.replay.done = NULL ; - status = palAllocateMemory(hHdd, (void **)&msg, msgLen) ; - if (status != eHAL_STATUS_SUCCESS) + msg = vos_mem_malloc(msgLen); + if ( NULL == msg ) { pMac->ccm.replay.started = 0 ; - goto end ; + status = eHAL_STATUS_FAILURE; + goto end; } msg->type = pal_cpu_to_be16(WNI_CFG_SET_REQ); diff --git a/CORE/SME/src/csr/csrApiRoam.c b/CORE/SME/src/csr/csrApiRoam.c index 1ba97dc5da02..8d8f9cb859b1 100644 --- a/CORE/SME/src/csr/csrApiRoam.c +++ b/CORE/SME/src/csr/csrApiRoam.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /** ------------------------------------------------------------------------- * ------------------------------------------------------------------------- * @@ -45,7 +44,7 @@ when who what, where, why ---------- --- -------------------------------------------------------- -06/03/10 js Added support to hostapd driven +06/03/10 js Added support to hostapd driven * deauth/disassoc/mic failure ===========================================================================*/ #include "aniGlobal.h" //for tpAniSirGlobal @@ -67,22 +66,21 @@ #ifdef WLAN_FEATURE_NEIGHBOR_ROAMING #include "csrNeighborRoam.h" #endif /* WLAN_FEATURE_NEIGHBOR_ROAMING */ -#ifdef FEATURE_WLAN_CCX +#if defined(FEATURE_WLAN_CCX) && !defined(FEATURE_WLAN_CCX_UPLOAD) #include "csrCcx.h" -#endif /* FEATURE_WLAN_CCX */ +#endif /* FEATURE_WLAN_CCX && !FEATURE_WLAN_CCX_UPLOAD */ #define CSR_NUM_IBSS_START_CHANNELS_50 4 #define CSR_NUM_IBSS_START_CHANNELS_24 3 #define CSR_DEF_IBSS_START_CHANNEL_50 36 #define CSR_DEF_IBSS_START_CHANNEL_24 1 -#define CSR_IBSS_JOIN_TIMEOUT_PERIOD ( 1 * PAL_TIMER_TO_SEC_UNIT ) // 1 second #define CSR_WAIT_FOR_KEY_TIMEOUT_PERIOD ( 5 * PAL_TIMER_TO_SEC_UNIT ) // 5 seconds, for WPA, WPA2, CCKM #define CSR_WAIT_FOR_WPS_KEY_TIMEOUT_PERIOD ( 120 * PAL_TIMER_TO_SEC_UNIT ) // 120 seconds, for WPS /*--------------------------------------------------------------------------- - OBIWAN recommends [8 10]% : pick 9% + OBIWAN recommends [8 10]% : pick 9% ---------------------------------------------------------------------------*/ #define CSR_VCC_UL_MAC_LOSS_THRESHOLD 9 /*--------------------------------------------------------------------------- - OBIWAN recommends -85dBm + OBIWAN recommends -85dBm ---------------------------------------------------------------------------*/ #define CSR_VCC_RSSI_THRESHOLD 80 #define CSR_MIN_GLOBAL_STAT_QUERY_PERIOD 500 //ms @@ -99,22 +97,16 @@ #define RSSI_HACK_BMPS (-40) #define MAX_CB_VALUE_IN_INI (2) -/*-------------------------------------------------------------------------- +#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD +static tANI_BOOLEAN bRoamScanOffloadStarted = VOS_FALSE; +#endif + +/*-------------------------------------------------------------------------- Static Type declarations ------------------------------------------------------------------------*/ static tCsrRoamSession csrRoamRoamSession[CSR_ROAM_SESSION_MAX]; -#if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR) -static const char KR_3[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, - 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, - 108, 112, 116, 120, 124, 149, 153, 157, 161}; -static const char KR_24[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, - 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, - 108, 112, 116, 120, 124, 149, 153, 157, 161}; -static const char KR_25[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, - 36, 40, 44, 48, 149, 153, 157, 161}; -#endif -/*-------------------------------------------------------------------------- +/*-------------------------------------------------------------------------- Type declarations ------------------------------------------------------------------------*/ #ifdef FEATURE_WLAN_DIAG_SUPPORT_CSR @@ -184,16 +176,16 @@ int diagEncTypeFromCSRType(eCsrEncryptionType encType) return (n); } #endif //#ifdef FEATURE_WLAN_DIAG_SUPPORT_CSR -static const tANI_U8 csrStartIbssChannels50[ CSR_NUM_IBSS_START_CHANNELS_50 ] = { 36, 40, 44, 48}; +static const tANI_U8 csrStartIbssChannels50[ CSR_NUM_IBSS_START_CHANNELS_50 ] = { 36, 40, 44, 48}; static const tANI_U8 csrStartIbssChannels24[ CSR_NUM_IBSS_START_CHANNELS_24 ] = { 1, 6, 11 }; static void initConfigParam(tpAniSirGlobal pMac); static tANI_BOOLEAN csrRoamProcessResults( tpAniSirGlobal pMac, tSmeCmd *pCommand, eCsrRoamCompleteResult Result, void *Context ); -static eHalStatus csrRoamStartIbss( tpAniSirGlobal pMac, tANI_U32 sessionId, - tCsrRoamProfile *pProfile, +static eHalStatus csrRoamStartIbss( tpAniSirGlobal pMac, tANI_U32 sessionId, + tCsrRoamProfile *pProfile, tANI_BOOLEAN *pfSameIbss ); static void csrRoamUpdateConnectedProfileFromNewBss( tpAniSirGlobal pMac, tANI_U32 sessionId, tSirSmeNewBssInfo *pNewBss ); -static void csrRoamPrepareBssParams(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamProfile *pProfile, +static void csrRoamPrepareBssParams(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamProfile *pProfile, tSirBssDescription *pBssDesc, tBssConfigParam *pBssConfig, tDot11fBeaconIEs *pIes); static ePhyChanBondState csrGetCBModeFromIes(tpAniSirGlobal pMac, tANI_U8 primaryChn, tDot11fBeaconIEs *pIes); eHalStatus csrInitGetChannels(tpAniSirGlobal pMac); @@ -203,33 +195,29 @@ eHalStatus csrRoamClose(tpAniSirGlobal pMac); void csrRoamMICErrorTimerHandler(void *pv); void csrRoamTKIPCounterMeasureTimerHandler(void *pv); tANI_BOOLEAN csrRoamIsSameProfileKeys(tpAniSirGlobal pMac, tCsrRoamConnectedProfile *pConnProfile, tCsrRoamProfile *pProfile2); - + static eHalStatus csrRoamStartRoamingTimer(tpAniSirGlobal pMac, tANI_U32 sessionId, tANI_U32 interval); static eHalStatus csrRoamStopRoamingTimer(tpAniSirGlobal pMac, tANI_U32 sessionId); static void csrRoamRoamingTimerHandler(void *pv); -eHalStatus csrRoamStartIbssJoinTimer(tpAniSirGlobal pMac, tANI_U32 sessionId, tANI_U32 interval); -eHalStatus csrRoamStopIbssJoinTimer(tpAniSirGlobal pMac, tANI_U32 sessionId); -static void csrRoamIbssJoinTimerHandler(void *pv); eHalStatus csrRoamStartWaitForKeyTimer(tpAniSirGlobal pMac, tANI_U32 interval); eHalStatus csrRoamStopWaitForKeyTimer(tpAniSirGlobal pMac); static void csrRoamWaitForKeyTimeOutHandler(void *pv); - static eHalStatus CsrInit11dInfo(tpAniSirGlobal pMac, tCsr11dinfo *ps11dinfo); static eHalStatus csrInitChannelPowerList( tpAniSirGlobal pMac, tCsr11dinfo *ps11dinfo); static eHalStatus csrRoamFreeConnectedInfo( tpAniSirGlobal pMac, tCsrRoamConnectedInfo *pConnectedInfo ); -eHalStatus csrSendMBSetContextReqMsg( tpAniSirGlobal pMac, tANI_U32 sessionId, - tSirMacAddr peerMacAddr, tANI_U8 numKeys, tAniEdType edType, +eHalStatus csrSendMBSetContextReqMsg( tpAniSirGlobal pMac, tANI_U32 sessionId, + tSirMacAddr peerMacAddr, tANI_U8 numKeys, tAniEdType edType, tANI_BOOLEAN fUnicast, tAniKeyDirection aniKeyDirection, - tANI_U8 keyId, tANI_U8 keyLength, tANI_U8 *pKey, tANI_U8 paeRole, + tANI_U8 keyId, tANI_U8 keyLength, tANI_U8 *pKey, tANI_U8 paeRole, tANI_U8 *pKeyRsc ); -static eHalStatus csrRoamIssueReassociate( tpAniSirGlobal pMac, tANI_U32 sessionId, - tSirBssDescription *pSirBssDesc, tDot11fBeaconIEs *pIes, +static eHalStatus csrRoamIssueReassociate( tpAniSirGlobal pMac, tANI_U32 sessionId, + tSirBssDescription *pSirBssDesc, tDot11fBeaconIEs *pIes, tCsrRoamProfile *pProfile ); void csrRoamStatisticsTimerHandler(void *pv); void csrRoamStatsGlobalClassDTimerHandler(void *pv); static void csrRoamLinkUp(tpAniSirGlobal pMac, tCsrBssid bssid); -VOS_STATUS csrRoamVccTriggerRssiIndCallback(tHalHandle hHal, - v_U8_t rssiNotification, +VOS_STATUS csrRoamVccTriggerRssiIndCallback(tHalHandle hHal, + v_U8_t rssiNotification, void * context); static void csrRoamLinkDown(tpAniSirGlobal pMac, tANI_U32 sessionId); void csrRoamVccTrigger(tpAniSirGlobal pMac); @@ -244,9 +232,9 @@ tCsrStatsClientReqInfo * csrRoamInsertEntryIntoList( tpAniSirGlobal pMac, tDblLinkList *pStaList, tCsrStatsClientReqInfo *pStaEntry); void csrRoamStatsClientTimerHandler(void *pv); -tCsrPeStatsReqInfo * csrRoamCheckPeStatsReqList(tpAniSirGlobal pMac, tANI_U32 statsMask, +tCsrPeStatsReqInfo * csrRoamCheckPeStatsReqList(tpAniSirGlobal pMac, tANI_U32 statsMask, tANI_U32 periodicity, tANI_BOOLEAN *pFound, tANI_U8 staId); -void csrRoamReportStatistics(tpAniSirGlobal pMac, tANI_U32 statsMask, +void csrRoamReportStatistics(tpAniSirGlobal pMac, tANI_U32 statsMask, tCsrStatsCallback callback, tANI_U8 staId, void *pContext); void csrRoamSaveStatsFromTl(tpAniSirGlobal pMac, WLANTL_TRANSFER_STA_TYPE *pTlStats); void csrRoamTlStatsTimerHandler(void *pv); @@ -258,7 +246,7 @@ eHalStatus csrRoamDeregStatisticsReq(tpAniSirGlobal pMac); static tANI_U32 csrFindIbssSession( tpAniSirGlobal pMac ); static eHalStatus csrRoamStartWds( tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamProfile *pProfile, tSirBssDescription *pBssDesc ); static void csrInitSession( tpAniSirGlobal pMac, tANI_U32 sessionId ); -static eHalStatus csrRoamIssueSetKeyCommand( tpAniSirGlobal pMac, tANI_U32 sessionId, +static eHalStatus csrRoamIssueSetKeyCommand( tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamSetKey *pSetKey, tANI_U32 roamId ); //static eHalStatus csrRoamProcessStopBss( tpAniSirGlobal pMac, tSmeCmd *pCommand ); static eHalStatus csrRoamGetQosInfoFromBss(tpAniSirGlobal pMac, tSirBssDescription *pBssDesc); @@ -297,7 +285,7 @@ eHalStatus csrOpen(tpAniSirGlobal pMac) VOS_STATUS vosStatus = VOS_STATUS_SUCCESS; v_REGDOMAIN_t regId; tANI_U32 i; - + do { /* Initialize CSR Roam Globals */ @@ -320,9 +308,9 @@ eHalStatus csrOpen(tpAniSirGlobal pMac) vosStatus = vos_nv_readDefaultCountryTable( &nvTables ); if ( VOS_IS_STATUS_SUCCESS(vosStatus) ) { - palCopyMemory( pMac->hHdd, pMac->scan.countryCodeDefault, - nvTables.defaultCountryTable.countryCode, WNI_CFG_COUNTRY_CODE_LEN ); - status = eHAL_STATUS_SUCCESS; + vos_mem_copy(pMac->scan.countryCodeDefault, nvTables.defaultCountryTable.countryCode, + WNI_CFG_COUNTRY_CODE_LEN); + status = eHAL_STATUS_SUCCESS; } else { @@ -334,15 +322,25 @@ eHalStatus csrOpen(tpAniSirGlobal pMac) //status = eHAL_STATUS_SUCCESS; } smsLog( pMac, LOG1, FL(" country Code from nvRam %.2s"), pMac->scan.countryCodeDefault ); - csrGetRegulatoryDomainForCountry(pMac, pMac->scan.countryCodeDefault, ®Id); - WDA_SetRegDomain(pMac, regId); + + if (!('0' == pMac->scan.countryCodeDefault[0] && + '0' == pMac->scan.countryCodeDefault[1])) + { + csrGetRegulatoryDomainForCountry(pMac, pMac->scan.countryCodeDefault, + ®Id, COUNTRY_NV); + } + else + { + regId = REGDOMAIN_WORLD; + } + WDA_SetRegDomain(pMac, regId, eSIR_TRUE); pMac->scan.domainIdDefault = regId; pMac->scan.domainIdCurrent = pMac->scan.domainIdDefault; - status = palCopyMemory(pMac->hHdd, pMac->scan.countryCodeCurrent, - pMac->scan.countryCodeDefault, WNI_CFG_COUNTRY_CODE_LEN); + vos_mem_copy(pMac->scan.countryCodeCurrent, pMac->scan.countryCodeDefault, + WNI_CFG_COUNTRY_CODE_LEN); status = csrInitGetChannels( pMac ); }while(0); - + return (status); } @@ -353,11 +351,9 @@ eHalStatus csr_init_chan_list(tpAniSirGlobal mac) v_REGDOMAIN_t reg_id; if (vos_nv_readDefaultCountryTable(&nv_tbl) == VOS_STATUS_SUCCESS) { - status = palCopyMemory(mac->hHdd, mac->scan.countryCodeDefault, - nv_tbl.defaultCountryTable.countryCode, - WNI_CFG_COUNTRY_CODE_LEN); - if (status != eHAL_STATUS_SUCCESS) - return status; + vos_mem_copy(mac->scan.countryCodeDefault, + nv_tbl.defaultCountryTable.countryCode, + WNI_CFG_COUNTRY_CODE_LEN); } else { smsLog(mac, LOGE, FL("fail to get NV_FIELD_IMAGE")); /* hardcoded for now */ @@ -369,19 +365,17 @@ eHalStatus csr_init_chan_list(tpAniSirGlobal mac) mac->scan.countryCodeDefault); status = csrGetRegulatoryDomainForCountry(mac, mac->scan.countryCodeDefault, - ®_id); + ®_id, COUNTRY_IE); if (status != eHAL_STATUS_SUCCESS) return status; - if (vos_nv_setRegDomain(mac, reg_id) != VOS_STATUS_SUCCESS) + if (vos_nv_setRegDomain(mac, reg_id, FALSE) != VOS_STATUS_SUCCESS) return eHAL_STATUS_FAILURE; mac->scan.domainIdDefault = reg_id; mac->scan.domainIdCurrent = mac->scan.domainIdDefault; - status = palCopyMemory(mac->hHdd, mac->scan.countryCodeCurrent, - mac->scan.countryCodeDefault, - WNI_CFG_COUNTRY_CODE_LEN); - if (status != eHAL_STATUS_SUCCESS) - return status; + vos_mem_copy(mac->scan.countryCodeCurrent, + mac->scan.countryCodeDefault, + WNI_CFG_COUNTRY_CODE_LEN); status = csrInitGetChannels(mac); return status; @@ -399,7 +393,7 @@ eHalStatus csrSetRegInfo(tHalHandle hHal, tANI_U8 *apCntryCode) return eHAL_STATUS_FAILURE; } smsLog( pMac, LOGW, FL(" country Code %.2s"), apCntryCode ); - /* To get correct Regulatory domain from NV table + /* To get correct Regulatory domain from NV table * 2 character Country code should be used * 3rd charater is optional for indoor/outdoor setting */ cntryCodeLength = WNI_CFG_COUNTRY_CODE_LEN; @@ -412,13 +406,14 @@ eHalStatus csrSetRegInfo(tHalHandle hHal, tANI_U8 *apCntryCode) return eHAL_STATUS_FAILURE; } */ - status = csrGetRegulatoryDomainForCountry(pMac, apCntryCode, ®Id); + status = csrGetRegulatoryDomainForCountry(pMac, apCntryCode, ®Id, + COUNTRY_USER); if (status != eHAL_STATUS_SUCCESS) { smsLog( pMac, LOGE, FL(" fail to get regId for country Code %.2s"), apCntryCode ); return status; } - status = WDA_SetRegDomain(hHal, regId); + status = WDA_SetRegDomain(hHal, regId, eSIR_TRUE); if (status != eHAL_STATUS_SUCCESS) { smsLog( pMac, LOGE, FL(" fail to get regId for country Code %.2s"), apCntryCode ); @@ -427,23 +422,18 @@ eHalStatus csrSetRegInfo(tHalHandle hHal, tANI_U8 *apCntryCode) pMac->scan.domainIdDefault = regId; pMac->scan.domainIdCurrent = pMac->scan.domainIdDefault; /* Clear CC field */ - palFillMemory( pMac->hHdd, - pMac->scan.countryCodeDefault, - WNI_CFG_COUNTRY_CODE_LEN, - 0 ); + vos_mem_set(pMac->scan.countryCodeDefault, WNI_CFG_COUNTRY_CODE_LEN, 0); + /* Copy 2 or 3 bytes country code */ - palCopyMemory( pMac->hHdd, pMac->scan.countryCodeDefault, - apCntryCode, cntryCodeLength ); + vos_mem_copy(pMac->scan.countryCodeDefault, apCntryCode, cntryCodeLength); + /* If 2 bytes country code, 3rd byte must be filled with space */ if((WNI_CFG_COUNTRY_CODE_LEN - 1) == cntryCodeLength) { - palFillMemory( pMac->hHdd, - pMac->scan.countryCodeDefault + 2, - 1, - 0x20 ); + vos_mem_set(pMac->scan.countryCodeDefault + 2, 1, 0x20); } - status = palCopyMemory(pMac->hHdd, pMac->scan.countryCodeCurrent, - pMac->scan.countryCodeDefault, WNI_CFG_COUNTRY_CODE_LEN); + vos_mem_copy(pMac->scan.countryCodeCurrent, pMac->scan.countryCodeDefault, + WNI_CFG_COUNTRY_CODE_LEN); status = csrInitGetChannels( pMac ); return status; } @@ -452,8 +442,8 @@ eHalStatus csrSetChannels(tHalHandle hHal, tCsrConfigParam *pParam ) eHalStatus status = eHAL_STATUS_SUCCESS; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); tANI_U8 index = 0; - palCopyMemory( pMac->hHdd, pParam->Csr11dinfo.countryCode, - pMac->scan.countryCodeCurrent, WNI_CFG_COUNTRY_CODE_LEN ); + vos_mem_copy(pParam->Csr11dinfo.countryCode, pMac->scan.countryCodeCurrent, + WNI_CFG_COUNTRY_CODE_LEN); for ( index = 0; index < pMac->scan.base20MHzChannels.numChannels ; index++) { pParam->Csr11dinfo.Channels.channelList[index] = pMac->scan.base20MHzChannels.channelList[ index ]; @@ -462,14 +452,13 @@ eHalStatus csrSetChannels(tHalHandle hHal, tCsrConfigParam *pParam ) pParam->Csr11dinfo.ChnPower[index].maxtxPower = pMac->scan.defaultPowerTable[index].pwr; } pParam->Csr11dinfo.Channels.numChannels = pMac->scan.base20MHzChannels.numChannels; - + return status; } eHalStatus csrClose(tpAniSirGlobal pMac) { eHalStatus status = eHAL_STATUS_SUCCESS; - csrStop(pMac); csrRoamClose(pMac); csrScanClose(pMac); csrLLClose(&pMac->roam.statsClientReqList); @@ -478,7 +467,7 @@ eHalStatus csrClose(tpAniSirGlobal pMac) /* DeInit Globals */ csrRoamDeInitGlobals(pMac); return (status); -} +} eHalStatus csrUpdateChannelList(tCsrScanStruct *pScan) { @@ -528,7 +517,7 @@ eHalStatus csrStart(tpAniSirGlobal pMac) { eHalStatus status = eHAL_STATUS_SUCCESS; tANI_U32 i; - + do { //save the global vos context @@ -569,7 +558,7 @@ eHalStatus csrStart(tpAniSirGlobal pMac) pMac->roam.tlStatsReqInfo.timerRunning = FALSE; //init the link quality indication also pMac->roam.vccLinkQuality = eCSR_ROAM_LINK_QUAL_MIN_IND; - if(!HAL_STATUS_SUCCESS(status)) + if(!HAL_STATUS_SUCCESS(status)) { smsLog(pMac, LOGW, " csrStart: Couldn't Init HO control blk "); break; @@ -589,7 +578,7 @@ eHalStatus csrStart(tpAniSirGlobal pMac) return (status); } -eHalStatus csrStop(tpAniSirGlobal pMac) +eHalStatus csrStop(tpAniSirGlobal pMac, tHalStopType stopType) { tANI_U32 sessionId; tANI_U32 i; @@ -602,7 +591,7 @@ eHalStatus csrStop(tpAniSirGlobal pMac) pMac->scan.fCancelIdleScan = eANI_BOOLEAN_FALSE; pMac->scan.fRestartIdleScan = eANI_BOOLEAN_FALSE; csrLLPurge( &pMac->roam.roamCmdPendingList, eANI_BOOLEAN_TRUE ); - + #if defined WLAN_FEATURE_NEIGHBOR_ROAMING csrNeighborRoamClose(pMac); #endif @@ -628,10 +617,22 @@ eHalStatus csrStop(tpAniSirGlobal pMac) for( i = 0; i < CSR_ROAM_SESSION_MAX; i++ ) { - csrRoamStateChange( pMac, eCSR_ROAMING_STATE_STOP ,i ); + csrRoamStateChange( pMac, eCSR_ROAMING_STATE_STOP, i ); pMac->roam.curSubState[i] = eCSR_ROAM_SUBSTATE_NONE; } +#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD + /* When HAL resets all the context information + * in HAL is lost, so we might need to send the + * scan offload request again when it comes + * out of reset for scan offload to be functional + */ + if (HAL_STOP_TYPE_SYS_RESET == stopType) + { + bRoamScanOffloadStarted = VOS_FALSE; + } +#endif + return (eHAL_STATUS_SUCCESS); } @@ -644,8 +645,8 @@ eHalStatus csrReady(tpAniSirGlobal pMac) csrInitBGScanChannelList(pMac); /* HDD issues the init scan */ csrScanStartResultAgingTimer(pMac); - /* If the gScanAgingTime is set to '0' then scan results aging timeout - based on timer feature is not enabled*/ + /* If the gScanAgingTime is set to '0' then scan results aging timeout + based on timer feature is not enabled*/ if(0 != pMac->scan.scanResultCfgAgingTime ) { csrScanStartResultCfgAgingTimer(pMac); @@ -672,7 +673,7 @@ void csrSetGlobalCfgs( tpAniSirGlobal pMac ) ccmCfgSetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD, csrGetFragThresh(pMac), NULL, eANI_BOOLEAN_FALSE); ccmCfgSetInt(pMac, WNI_CFG_RTS_THRESHOLD, csrGetRTSThresh(pMac), NULL, eANI_BOOLEAN_FALSE); ccmCfgSetInt(pMac, WNI_CFG_11D_ENABLED, - ((pMac->roam.configParam.Is11hSupportEnabled) ? pMac->roam.configParam.Is11dSupportEnabled : pMac->roam.configParam.Is11dSupportEnabled), + ((pMac->roam.configParam.Is11hSupportEnabled) ? pMac->roam.configParam.Is11dSupportEnabled : pMac->roam.configParam.Is11dSupportEnabled), NULL, eANI_BOOLEAN_FALSE); ccmCfgSetInt(pMac, WNI_CFG_11H_ENABLED, pMac->roam.configParam.Is11hSupportEnabled, NULL, eANI_BOOLEAN_FALSE); /* For now we will just use the 5GHz CB mode ini parameter to decide whether CB supported or not in Probes when there is no session @@ -680,10 +681,10 @@ void csrSetGlobalCfgs( tpAniSirGlobal pMac ) */ ccmCfgSetInt(pMac, WNI_CFG_CHANNEL_BONDING_MODE, !!(pMac->roam.configParam.channelBondingMode5GHz), NULL, eANI_BOOLEAN_FALSE); ccmCfgSetInt(pMac, WNI_CFG_HEART_BEAT_THRESHOLD, pMac->roam.configParam.HeartbeatThresh24, NULL, eANI_BOOLEAN_FALSE); - + //Update the operating mode to configured value during initialization, //So that client can advertise full capabilities in Probe request frame. - csrSetDefaultDot11Mode( pMac ); + csrSetDefaultDot11Mode( pMac ); } eHalStatus csrRoamOpen(tpAniSirGlobal pMac) @@ -701,15 +702,17 @@ eHalStatus csrRoamOpen(tpAniSirGlobal pMac) } pMac->roam.WaitForKeyTimerInfo.pMac = pMac; pMac->roam.WaitForKeyTimerInfo.sessionId = CSR_SESSION_ID_INVALID; - status = palTimerAlloc(pMac->hHdd, &pMac->roam.hTimerWaitForKey, csrRoamWaitForKeyTimeOutHandler, + status = vos_timer_init(&pMac->roam.hTimerWaitForKey, VOS_TIMER_TYPE_SW, + csrRoamWaitForKeyTimeOutHandler, &pMac->roam.WaitForKeyTimerInfo); - if(!HAL_STATUS_SUCCESS(status)) + if (!HAL_STATUS_SUCCESS(status)) { smsLog(pMac, LOGE, FL("cannot allocate memory for WaitForKey time out timer")); break; } - status = palTimerAlloc(pMac->hHdd, &pMac->roam.tlStatsReqInfo.hTlStatsTimer, csrRoamTlStatsTimerHandler, pMac); - if(!HAL_STATUS_SUCCESS(status)) + status = vos_timer_init(&pMac->roam.tlStatsReqInfo.hTlStatsTimer, + VOS_TIMER_TYPE_SW, csrRoamTlStatsTimerHandler, pMac); + if (!HAL_STATUS_SUCCESS(status)) { smsLog(pMac, LOGE, FL("cannot allocate memory for summary Statistics timer")); return eHAL_STATUS_FAILURE; @@ -725,10 +728,10 @@ eHalStatus csrRoamClose(tpAniSirGlobal pMac) { csrRoamCloseSession(pMac, sessionId, TRUE, NULL, NULL); } - palTimerStop(pMac->hHdd, pMac->roam.hTimerWaitForKey); - palTimerFree(pMac->hHdd, pMac->roam.hTimerWaitForKey); - palTimerStop(pMac->hHdd, pMac->roam.tlStatsReqInfo.hTlStatsTimer); - palTimerFree(pMac->hHdd, pMac->roam.tlStatsReqInfo.hTlStatsTimer); + vos_timer_stop(&pMac->roam.hTimerWaitForKey); + vos_timer_destroy(&pMac->roam.hTimerWaitForKey); + vos_timer_stop(&pMac->roam.tlStatsReqInfo.hTlStatsTimer); + vos_timer_destroy(&pMac->roam.tlStatsReqInfo.hTlStatsTimer); return (eHAL_STATUS_SUCCESS); } @@ -751,7 +754,7 @@ eHalStatus csrRoamGetConnectState(tpAniSirGlobal pMac, tANI_U32 sessionId, eCsrC { status = eHAL_STATUS_SUCCESS; *pState = pMac->roam.roamSession[sessionId].connectState; - } + } return (status); } @@ -766,7 +769,7 @@ eHalStatus csrRoamCopyConnectProfile(tpAniSirGlobal pMac, tANI_U32 sessionId, tC smsLog(pMac, LOGE, FL(" session %d not found "), sessionId); return eHAL_STATUS_FAILURE; } - + if(pProfile) { if(pSession->pConnectBssDesc) @@ -776,10 +779,12 @@ eHalStatus csrRoamCopyConnectProfile(tpAniSirGlobal pMac, tANI_U32 sessionId, tC size = pSession->pConnectBssDesc->length + sizeof(pSession->pConnectBssDesc->length); if(size) { - status = palAllocateMemory(pMac->hHdd, (void **)&pProfile->pBssDesc, size); - if(HAL_STATUS_SUCCESS(status)) + pProfile->pBssDesc = vos_mem_malloc(size); + if ( NULL != pProfile->pBssDesc ) { - palCopyMemory(pMac->hHdd, pProfile->pBssDesc, pSession->pConnectBssDesc, size); + vos_mem_copy(pProfile->pBssDesc, + pSession->pConnectBssDesc, size); + status = eHAL_STATUS_SUCCESS; } else break; @@ -794,8 +799,10 @@ eHalStatus csrRoamCopyConnectProfile(tpAniSirGlobal pMac, tANI_U32 sessionId, tC pProfile->BSSType = pSession->connectedProfile.BSSType; pProfile->operationChannel = pSession->connectedProfile.operationChannel; pProfile->CBMode = pSession->connectedProfile.CBMode; - palCopyMemory(pMac->hHdd, &pProfile->bssid, &pSession->connectedProfile.bssid, sizeof(tCsrBssid)); - palCopyMemory(pMac->hHdd, &pProfile->SSID, &pSession->connectedProfile.SSID, sizeof(tSirMacSSid)); + vos_mem_copy(&pProfile->bssid, &pSession->connectedProfile.bssid, + sizeof(tCsrBssid)); + vos_mem_copy(&pProfile->SSID, &pSession->connectedProfile.SSID, + sizeof(tSirMacSSid)); #ifdef WLAN_FEATURE_VOWIFI_11R if (pSession->connectedProfile.MDID.mdiePresent) { @@ -812,18 +819,19 @@ eHalStatus csrRoamCopyConnectProfile(tpAniSirGlobal pMac, tANI_U32 sessionId, tC pProfile->isCCXAssoc = pSession->connectedProfile.isCCXAssoc; if (csrIsAuthTypeCCX(pSession->connectedProfile.AuthType)) { - palCopyMemory( pMac->hHdd, pProfile->ccxCckmInfo.krk, - pSession->connectedProfile.ccxCckmInfo.krk, CSR_KRK_KEY_LEN ); + vos_mem_copy (pProfile->ccxCckmInfo.krk, + pSession->connectedProfile.ccxCckmInfo.krk, + CSR_KRK_KEY_LEN); pProfile->ccxCckmInfo.reassoc_req_num= pSession->connectedProfile.ccxCckmInfo.reassoc_req_num; - pProfile->ccxCckmInfo.krk_plumbed = + pProfile->ccxCckmInfo.krk_plumbed = pSession->connectedProfile.ccxCckmInfo.krk_plumbed; } #endif }while(0); } } - + return (status); } @@ -845,16 +853,17 @@ eHalStatus csrRoamGetConnectProfile(tpAniSirGlobal pMac, tANI_U32 sessionId, tCs eHalStatus csrRoamFreeConnectProfile(tpAniSirGlobal pMac, tCsrRoamConnectedProfile *pProfile) { eHalStatus status = eHAL_STATUS_SUCCESS; - - if(pProfile->pBssDesc) + + if (pProfile->pBssDesc) { - palFreeMemory(pMac->hHdd, pProfile->pBssDesc); + vos_mem_free(pProfile->pBssDesc); } - if(pProfile->pAddIEAssoc) + if (pProfile->pAddIEAssoc) { - palFreeMemory(pMac->hHdd, pProfile->pAddIEAssoc); + vos_mem_free(pProfile->pAddIEAssoc); } - palZeroMemory(pMac->hHdd, pProfile, sizeof(tCsrRoamConnectedProfile)); + vos_mem_set(pProfile, sizeof(tCsrRoamConnectedProfile), 0); + pProfile->AuthType = eCSR_AUTH_TYPE_UNKNOWN; return (status); } @@ -864,7 +873,7 @@ static eHalStatus csrRoamFreeConnectedInfo( tpAniSirGlobal pMac, tCsrRoamConnect eHalStatus status = eHAL_STATUS_SUCCESS; if( pConnectedInfo->pbFrames ) { - palFreeMemory( pMac->hHdd, pConnectedInfo->pbFrames ); + vos_mem_free(pConnectedInfo->pbFrames); pConnectedInfo->pbFrames = NULL; } pConnectedInfo->nBeaconLength = 0; @@ -873,22 +882,22 @@ static eHalStatus csrRoamFreeConnectedInfo( tpAniSirGlobal pMac, tCsrRoamConnect pConnectedInfo->staId = 0; #ifdef WLAN_FEATURE_VOWIFI_11R pConnectedInfo->nRICRspLength = 0; -#endif +#endif #ifdef FEATURE_WLAN_CCX pConnectedInfo->nTspecIeLength = 0; -#endif +#endif return ( status ); } - - - + + + void csrReleaseCommandPreauth(tpAniSirGlobal pMac, tSmeCmd *pCommand) { csrReinitPreauthCmd(pMac, pCommand); csrReleaseCommand( pMac, pCommand ); } - + void csrReleaseCommandRoam(tpAniSirGlobal pMac, tSmeCmd *pCommand) { csrReinitRoamCmd(pMac, pCommand); @@ -909,12 +918,12 @@ void csrReleaseCommandWmStatusChange(tpAniSirGlobal pMac, tSmeCmd *pCommand) void csrReinitSetKeyCmd(tpAniSirGlobal pMac, tSmeCmd *pCommand) { - palZeroMemory(pMac->hHdd, &pCommand->u.setKeyCmd, sizeof(tSetKeyCmd)); + vos_mem_set(&pCommand->u.setKeyCmd, sizeof(tSetKeyCmd), 0); } void csrReinitRemoveKeyCmd(tpAniSirGlobal pMac, tSmeCmd *pCommand) { - palZeroMemory(pMac->hHdd, &pCommand->u.removeKeyCmd, sizeof(tRemoveKeyCmd)); + vos_mem_set(&pCommand->u.removeKeyCmd, sizeof(tRemoveKeyCmd), 0); } void csrReleaseCommandSetKey(tpAniSirGlobal pMac, tSmeCmd *pCommand) @@ -936,8 +945,9 @@ void csrAbortCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand, tANI_BOOLEAN fStop { case eSmeCommandScan: // We need to inform the requester before dropping the scan command - smsLog( pMac, LOGW, "%s: Drop scan reason %d callback 0x%X", - __func__, pCommand->u.scanCmd.reason, (unsigned int)pCommand->u.scanCmd.callback); + smsLog( pMac, LOGW, "%s: Drop scan reason %d callback %p", + __func__, pCommand->u.scanCmd.reason, + pCommand->u.scanCmd.callback); if (NULL != pCommand->u.scanCmd.callback) { smsLog( pMac, LOGW, "%s callback scan requester", __func__); @@ -983,16 +993,16 @@ void csrRoamSubstateChange( tpAniSirGlobal pMac, eCsrRoamSubState NewSubstate, t eCsrRoamState csrRoamStateChange( tpAniSirGlobal pMac, eCsrRoamState NewRoamState, tANI_U8 sessionId) { eCsrRoamState PreviousState; - + smsLog( pMac, LOG1, "CSR RoamState[%hu]: [ %d <== %d ]", sessionId, NewRoamState, pMac->roam.curState[sessionId]); PreviousState = pMac->roam.curState[sessionId]; - - if ( NewRoamState != pMac->roam.curState[sessionId] ) + + if ( NewRoamState != pMac->roam.curState[sessionId] ) { // Whenever we transition OUT of the Roaming state, clear the Roaming substate... - if ( CSR_IS_ROAM_JOINING(pMac, sessionId) ) + if ( CSR_IS_ROAM_JOINING(pMac, sessionId) ) { csrRoamSubstateChange( pMac, eCSR_ROAM_SUBSTATE_NONE, sessionId ); } @@ -1002,7 +1012,7 @@ eCsrRoamState csrRoamStateChange( tpAniSirGlobal pMac, eCsrRoamState NewRoamStat return( PreviousState ); } -void csrAssignRssiForCategory(tpAniSirGlobal pMac, tANI_U8 catOffset) +void csrAssignRssiForCategory(tpAniSirGlobal pMac, tANI_S8 bestApRssi, tANI_U8 catOffset) { int i; if(catOffset) @@ -1010,7 +1020,7 @@ void csrAssignRssiForCategory(tpAniSirGlobal pMac, tANI_U8 catOffset) pMac->roam.configParam.bCatRssiOffset = catOffset; for(i = 0; i < CSR_NUM_RSSI_CAT; i++) { - pMac->roam.configParam.RSSICat[CSR_NUM_RSSI_CAT - i - 1] = (int)CSR_BEST_RSSI_VALUE - (int)(i * catOffset); + pMac->roam.configParam.RSSICat[CSR_NUM_RSSI_CAT - i - 1] = (int)bestApRssi - pMac->roam.configParam.nSelect5GHzMargin - (int)(i * catOffset); } } } @@ -1038,15 +1048,15 @@ static void initConfigParam(tpAniSirGlobal pMac) pMac->roam.configParam.ProprietaryRatesEnabled = eANI_BOOLEAN_TRUE; pMac->roam.configParam.TxRate = eCSR_TX_RATE_AUTO; pMac->roam.configParam.impsSleepTime = CSR_IDLE_SCAN_NO_PS_INTERVAL; - pMac->roam.configParam.scanAgeTimeNCNPS = CSR_SCAN_AGING_TIME_NOT_CONNECT_NO_PS; - pMac->roam.configParam.scanAgeTimeNCPS = CSR_SCAN_AGING_TIME_NOT_CONNECT_W_PS; - pMac->roam.configParam.scanAgeTimeCNPS = CSR_SCAN_AGING_TIME_CONNECT_NO_PS; - pMac->roam.configParam.scanAgeTimeCPS = CSR_SCAN_AGING_TIME_CONNECT_W_PS; + pMac->roam.configParam.scanAgeTimeNCNPS = CSR_SCAN_AGING_TIME_NOT_CONNECT_NO_PS; + pMac->roam.configParam.scanAgeTimeNCPS = CSR_SCAN_AGING_TIME_NOT_CONNECT_W_PS; + pMac->roam.configParam.scanAgeTimeCNPS = CSR_SCAN_AGING_TIME_CONNECT_NO_PS; + pMac->roam.configParam.scanAgeTimeCPS = CSR_SCAN_AGING_TIME_CONNECT_W_PS; for(i = 0; i < CSR_NUM_RSSI_CAT; i++) { pMac->roam.configParam.BssPreferValue[i] = i; } - csrAssignRssiForCategory(pMac, CSR_DEFAULT_RSSI_DB_GAP); + csrAssignRssiForCategory(pMac, CSR_BEST_RSSI_VALUE, CSR_DEFAULT_RSSI_DB_GAP); pMac->roam.configParam.nRoamingTime = CSR_DEFAULT_ROAMING_TIME; pMac->roam.configParam.fEnforce11dChannels = eANI_BOOLEAN_FALSE; pMac->roam.configParam.fSupplicantCountryCodeHasPriority = eANI_BOOLEAN_FALSE; @@ -1058,13 +1068,15 @@ static void initConfigParam(tpAniSirGlobal pMac) pMac->roam.configParam.nPassiveMinChnTime = CSR_PASSIVE_MIN_CHANNEL_TIME; pMac->roam.configParam.nActiveMaxChnTimeBtc = CSR_ACTIVE_MAX_CHANNEL_TIME_BTC; pMac->roam.configParam.nActiveMinChnTimeBtc = CSR_ACTIVE_MIN_CHANNEL_TIME_BTC; + pMac->roam.configParam.disableAggWithBtc = eANI_BOOLEAN_TRUE; #ifdef WLAN_AP_STA_CONCURRENCY pMac->roam.configParam.nActiveMaxChnTimeConc = CSR_ACTIVE_MAX_CHANNEL_TIME_CONC; pMac->roam.configParam.nActiveMinChnTimeConc = CSR_ACTIVE_MIN_CHANNEL_TIME_CONC; pMac->roam.configParam.nPassiveMaxChnTimeConc = CSR_PASSIVE_MAX_CHANNEL_TIME_CONC; pMac->roam.configParam.nPassiveMinChnTimeConc = CSR_PASSIVE_MIN_CHANNEL_TIME_CONC; pMac->roam.configParam.nRestTimeConc = CSR_REST_TIME_CONC; - pMac->roam.configParam.nNumChanCombinedConc = CSR_NUM_CHAN_COMBINED_CONC; + pMac->roam.configParam.nNumStaChanCombinedConc = CSR_NUM_STA_CHAN_COMBINED_CONC; + pMac->roam.configParam.nNumP2PChanCombinedConc = CSR_NUM_P2P_CHAN_COMBINED_CONC; #endif pMac->roam.configParam.IsIdleScanEnabled = TRUE; //enable the idle scan by default pMac->roam.configParam.nTxPowerCap = CSR_MAX_TX_POWER; @@ -1094,7 +1106,7 @@ static void initConfigParam(tpAniSirGlobal pMac) pMac->roam.configParam.addTSWhenACMIsOff = 0; pMac->roam.configParam.fScanTwice = eANI_BOOLEAN_FALSE; - //Remove this code once SLM_Sessionization is supported + //Remove this code once SLM_Sessionization is supported //BMPS_WORKAROUND_NOT_NEEDED pMac->roam.configParam.doBMPSWorkaround = 0; @@ -1105,47 +1117,36 @@ eCsrBand csrGetCurrentBand(tHalHandle hHal) return pMac->roam.configParam.bandCapability; } -#if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR) -tANI_BOOLEAN csrIsChannelInCountryValidList(tpAniSirGlobal pMac, tANI_U8 channel) +#if defined(FEATURE_WLAN_CCX) && defined(FEATURE_WLAN_CCX_UPLOAD) +/* + This function flushes the roam scan cache +*/ +eHalStatus csrFlushRoamScanRoamChannelList(tpAniSirGlobal pMac) { - /* Get country code from CFG */ - tANI_U8 *pCountryCode = pMac->scan.countryCodeCurrent; - tANI_U8 i = 0; - v_BOOL_t retVal = FALSE; - tANI_U8 *pCountryValidChannelList = pMac->roam.neighborRoamInfo.cfgParams.countryChannelInfo.countryValidChannelList.ChannelList; - tANI_U8 *pNumChannels = &pMac->roam.neighborRoamInfo.cfgParams.countryChannelInfo.countryValidChannelList.numOfChannels; - - /* Compare against KR valid list */ - if ((0 == strncmp(pCountryCode, "KR", 2)) && - (NULL != pCountryValidChannelList)) - { - for (i = 0; i <(*pNumChannels); i++) - { - if (channel == pCountryValidChannelList[i]) - { - retVal = TRUE; - break; - } - } - } - else + eHalStatus status = eHAL_STATUS_SUCCESS; + tpCsrNeighborRoamControlInfo pNeighborRoamInfo + = &pMac->roam.neighborRoamInfo; + /* Free up the memory first (if required) */ + if (NULL != + pNeighborRoamInfo->roamChannelInfo.currentChannelListInfo.ChannelList) { - retVal = csrRoamIsChannelValid(pMac, channel); + vos_mem_free( + pNeighborRoamInfo->roamChannelInfo.currentChannelListInfo.ChannelList + ); + pNeighborRoamInfo->roamChannelInfo.currentChannelListInfo.ChannelList + = NULL; + pNeighborRoamInfo->roamChannelInfo.currentChannelListInfo.numOfChannels + = 0; } - - return retVal; -} - -void csr_SetRevision(tpAniSirGlobal pMac, tANI_U8 revision) -{ - tpCsrNeighborRoamControlInfo pNeighborRoamInfo = &pMac->roam.neighborRoamInfo; - pNeighborRoamInfo->cfgParams.countryChannelInfo.revision = revision; + return status; } +#endif /* FEATURE_WLAN_CCX && FEATURE_WLAN_CCX_UPLOAD */ +#if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR) /* This function flushes the roam scan cache */ -eHalStatus csrFlushBgScanRoamChannelList(tpAniSirGlobal pMac) +eHalStatus csrFlushCfgBgScanRoamChannelList(tpAniSirGlobal pMac) { eHalStatus status = eHAL_STATUS_SUCCESS; tpCsrNeighborRoamControlInfo pNeighborRoamInfo = &pMac->roam.neighborRoamInfo; @@ -1186,9 +1187,9 @@ eHalStatus csrCreateBgScanRoamChannelList(tpAniSirGlobal pMac, } /* Update the roam global structure */ - palCopyMemory(pMac->hHdd, pNeighborRoamInfo->cfgParams.channelInfo.ChannelList, - pChannelList, - pNeighborRoamInfo->cfgParams.channelInfo.numOfChannels); + vos_mem_copy(pNeighborRoamInfo->cfgParams.channelInfo.ChannelList, + pChannelList, + pNeighborRoamInfo->cfgParams.channelInfo.numOfChannels); return status; } @@ -1225,12 +1226,12 @@ eHalStatus csrUpdateBgScanConfigIniChannelList(tpAniSirGlobal pMac, { for (i = 0; i < inNumChannels; i++) { - if (CSR_IS_CHANNEL_24GHZ(inPtr[i]) && csrIsChannelInCountryValidList(pMac, inPtr[i])) + if (CSR_IS_CHANNEL_24GHZ(inPtr[i]) && csrRoamIsChannelValid(pMac, inPtr[i])) { ChannelList[outNumChannels++] = inPtr[i]; } } - csrFlushBgScanRoamChannelList(pMac); + csrFlushCfgBgScanRoamChannelList(pMac); csrCreateBgScanRoamChannelList(pMac, ChannelList, outNumChannels); } else if (eCSR_BAND_5G == eBand) @@ -1239,26 +1240,26 @@ eHalStatus csrUpdateBgScanConfigIniChannelList(tpAniSirGlobal pMac, { /* Add 5G Non-DFS channel */ if (CSR_IS_CHANNEL_5GHZ(inPtr[i]) && - csrIsChannelInCountryValidList(pMac, inPtr[i]) && + csrRoamIsChannelValid(pMac, inPtr[i]) && !CSR_IS_CHANNEL_DFS(inPtr[i])) { ChannelList[outNumChannels++] = inPtr[i]; } } - csrFlushBgScanRoamChannelList(pMac); + csrFlushCfgBgScanRoamChannelList(pMac); csrCreateBgScanRoamChannelList(pMac, ChannelList, outNumChannels); } else if (eCSR_BAND_ALL == eBand) { for (i = 0; i < inNumChannels; i++) { - if (csrIsChannelInCountryValidList(pMac, inPtr[i]) && + if (csrRoamIsChannelValid(pMac, inPtr[i]) && !CSR_IS_CHANNEL_DFS(inPtr[i])) { ChannelList[outNumChannels++] = inPtr[i]; } } - csrFlushBgScanRoamChannelList(pMac); + csrFlushCfgBgScanRoamChannelList(pMac); csrCreateBgScanRoamChannelList(pMac, ChannelList, outNumChannels); } else @@ -1270,54 +1271,135 @@ eHalStatus csrUpdateBgScanConfigIniChannelList(tpAniSirGlobal pMac, return status; } +#endif +#if defined(FEATURE_WLAN_CCX) && defined(FEATURE_WLAN_CCX_UPLOAD) /* - This function initializes the valid channel list based on country code -*/ -eHalStatus csrInitCountryValidChannelList(tpAniSirGlobal pMac, - tANI_U8 Revision) -{ - eHalStatus status = eHAL_STATUS_SUCCESS; - tpCsrNeighborRoamControlInfo pNeighborRoamInfo = &pMac->roam.neighborRoamInfo; - tANI_U8 **pOutChannelList = &pNeighborRoamInfo->cfgParams.countryChannelInfo.countryValidChannelList.ChannelList; - tANI_U8 *pNumChannels = &pNeighborRoamInfo->cfgParams.countryChannelInfo.countryValidChannelList.numOfChannels; - const tANI_U8 *pChannelList = NULL; - - if (SME_KR_3 == Revision) + * This function modifies the roam scan channel list as per AP neighbor + * report; AP neighbor report may be empty or may include only other AP + * channels; in any case, we merge the channel list with the learned occupied + * channels list. + * if the band is 2.4G, then make sure channel list contains only 2.4G + * valid channels if the band is 5G, then make sure channel list contains + * only 5G valid channels + */ +eHalStatus csrCreateRoamScanChannelList(tpAniSirGlobal pMac, + tANI_U8 *pChannelList, + tANI_U8 numChannels, + const eCsrBand eBand) +{ + eHalStatus status = eHAL_STATUS_SUCCESS; + tpCsrNeighborRoamControlInfo pNeighborRoamInfo + = &pMac->roam.neighborRoamInfo; + tANI_U8 outNumChannels = 0; + tANI_U8 inNumChannels = numChannels; + tANI_U8 *inPtr = pChannelList; + tANI_U8 i = 0; + tANI_U8 ChannelList[WNI_CFG_VALID_CHANNEL_LIST_LEN] = {0}; + tANI_U8 tmpChannelList[WNI_CFG_VALID_CHANNEL_LIST_LEN] = {0}; + tANI_U8 mergedOutputNumOfChannels = 0; + tpCsrChannelInfo currChannelListInfo + = &pNeighborRoamInfo->roamChannelInfo.currentChannelListInfo; + /* + * Create a Union of occupied channel list learnt by the DUT along + * with the Neighbor report Channels. This increases the chances of + * the DUT to get a candidate AP while roaming even if the Neighbor + * Report is not able to provide sufficient information. + */ + if (pMac->scan.occupiedChannels.numChannels) + { + csrNeighborRoamMergeChannelLists(pMac, + &pMac->scan.occupiedChannels.channelList[0], + pMac->scan.occupiedChannels.numChannels, + inPtr, + inNumChannels, + &mergedOutputNumOfChannels); + inNumChannels = mergedOutputNumOfChannels; + } + if (eCSR_BAND_24 == eBand) { - pChannelList = KR_3; - *pNumChannels = sizeof(KR_3)/sizeof(KR_3[0]); + for (i = 0; i < inNumChannels; i++) + { + if (CSR_IS_CHANNEL_24GHZ(inPtr[i]) + && csrRoamIsChannelValid(pMac, inPtr[i])) + { + ChannelList[outNumChannels++] = inPtr[i]; + } + } } - else if (SME_KR_24 == Revision) + else if (eCSR_BAND_5G == eBand) { - pChannelList = KR_24; - *pNumChannels = sizeof(KR_24)/sizeof(KR_24[0]); + for (i = 0; i < inNumChannels; i++) + { + /* Add 5G Non-DFS channel */ + if (CSR_IS_CHANNEL_5GHZ(inPtr[i]) && + csrRoamIsChannelValid(pMac, inPtr[i]) && + !CSR_IS_CHANNEL_DFS(inPtr[i])) + { + ChannelList[outNumChannels++] = inPtr[i]; + } + } } - else if (SME_KR_25 == Revision) + else if (eCSR_BAND_ALL == eBand) { - pChannelList = KR_25; - *pNumChannels = sizeof(KR_25)/sizeof(KR_25[0]); + for (i = 0; i < inNumChannels; i++) + { + if (csrRoamIsChannelValid(pMac, inPtr[i]) && + !CSR_IS_CHANNEL_DFS(inPtr[i])) + { + ChannelList[outNumChannels++] = inPtr[i]; + } + } } else + { + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_WARN, + "Invalid band, No operation carried out (Band %d)", eBand); return eHAL_STATUS_INVALID_PARAMETER; - - /* Free any existing channel list */ - vos_mem_free(*pOutChannelList); - - *pOutChannelList = vos_mem_malloc(*pNumChannels); - - if (NULL == *pOutChannelList) + } + /* + * if roaming within band is enabled, then select only the + * in band channels . + * This is required only if the band capability is set to ALL, + * E.g., if band capability is only 2.4G then all the channels in the + * list are already filtered for 2.4G channels, hence ignore this check + */ + if ((eCSR_BAND_ALL == eBand) && CSR_IS_ROAM_INTRA_BAND_ENABLED(pMac)) { - smsLog(pMac, LOGE, FL("Memory Allocation for CFG Channel List failed")); - *pNumChannels = 0; - return eHAL_STATUS_RESOURCES; + csrNeighborRoamChannelsFilterByCurrentBand( + pMac, + ChannelList, + outNumChannels, + tmpChannelList, + &outNumChannels); + vos_mem_copy(ChannelList, + tmpChannelList, outNumChannels); + } + /* Prepare final roam scan channel list */ + if(outNumChannels) + { + /* Clear the channel list first */ + if (NULL != currChannelListInfo->ChannelList) + { + vos_mem_free(currChannelListInfo->ChannelList); + currChannelListInfo->ChannelList = NULL; + currChannelListInfo->numOfChannels = 0; + } + currChannelListInfo->ChannelList + = vos_mem_malloc(outNumChannels * sizeof(tANI_U8)); + if (NULL == currChannelListInfo->ChannelList) + { + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_FATAL, + "Failed to allocate memory for roam scan channel list"); + currChannelListInfo->numOfChannels = 0; + return VOS_STATUS_E_RESOURCES; + } + vos_mem_copy(currChannelListInfo->ChannelList, + ChannelList, outNumChannels); } - /* Update the roam global structure */ - palCopyMemory(pMac->hHdd, *pOutChannelList, pChannelList, *pNumChannels); return status; } - -#endif +#endif /* FEATURE_WLAN_CCX && FEATURE_WLAN_CCX_UPLOAD */ eHalStatus csrSetBand(tHalHandle hHal, eCsrBand eBand) { @@ -1362,10 +1444,10 @@ eHalStatus csrSetBand(tHalHandle hHal, eCsrBand eBand) /* The funcns csrConvertCBIniValueToPhyCBState and csrConvertPhyCBStateToIniValue have been * introduced to convert the ini value to the ENUM used in csr and MAC for CB state * Ideally we should have kept the ini value and enum value same and representing the same - * cb values as in 11n standard i.e. - * Set to 1 (SCA) if the secondary channel is above the primary channel - * Set to 3 (SCB) if the secondary channel is below the primary channel - * Set to 0 (SCN) if no secondary channel is present + * cb values as in 11n standard i.e. + * Set to 1 (SCA) if the secondary channel is above the primary channel + * Set to 3 (SCB) if the secondary channel is below the primary channel + * Set to 0 (SCN) if no secondary channel is present * However, since our driver is already distributed we will keep the ini definition as it is which is: * 0 - secondary none * 1 - secondary LOW @@ -1395,27 +1477,27 @@ ePhyChanBondState csrConvertCBIniValueToPhyCBState(v_U32_t cbIniValue) break; #ifdef WLAN_FEATURE_11AC case 3: - phyCbState = PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_CENTERED; + phyCbState = PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_CENTERED; break; case 4: phyCbState = PHY_QUADRUPLE_CHANNEL_20MHZ_CENTERED_40MHZ_CENTERED; break; case 5: phyCbState = PHY_QUADRUPLE_CHANNEL_20MHZ_CENTERED_40MHZ_CENTERED; - break; + break; case 6: phyCbState = PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_LOW; break; case 7: phyCbState = PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_LOW; - break; + break; case 8: phyCbState = PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_HIGH; break; case 9: phyCbState = PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_HIGH; - break; -#endif + break; +#endif default: // If an invalid value is passed, disable CHANNEL BONDING phyCbState = PHY_SINGLE_CHANNEL_CENTERED; @@ -1487,7 +1569,7 @@ eHalStatus csrChangeDefaultConfigParam(tpAniSirGlobal pMac, tCsrConfigParam *pPa pMac->roam.configParam.fenableMCCMode = pParam->fEnableMCCMode; pMac->roam.configParam.fAllowMCCGODiffBI = pParam->fAllowMCCGODiffBI; - + /* channelBondingMode5GHz plays a dual role right now * INFRA STA will use this non zero value as CB enabled and SOFTAP will use this non-zero value to determine the secondary channel offset * This is how channelBondingMode5GHz works now and this is kept intact to avoid any cfg.ini change @@ -1514,6 +1596,7 @@ eHalStatus csrChangeDefaultConfigParam(tpAniSirGlobal pMac, tCsrConfigParam *pPa pMac->roam.configParam.bandCapability = pParam->bandCapability; pMac->roam.configParam.cbChoice = pParam->cbChoice; pMac->roam.configParam.bgScanInterval = pParam->bgScanInterval; + pMac->roam.configParam.disableAggWithBtc = pParam->disableAggWithBtc; //if HDD passed down non zero values then only update, //otherwise keep using the defaults if (pParam->nActiveMaxChnTime) @@ -1561,9 +1644,13 @@ eHalStatus csrChangeDefaultConfigParam(tpAniSirGlobal pMac, tCsrConfigParam *pPa { pMac->roam.configParam.nRestTimeConc = pParam->nRestTimeConc; } - if (pParam->nNumChanCombinedConc) + if (pParam->nNumStaChanCombinedConc) + { + pMac->roam.configParam.nNumStaChanCombinedConc = pParam->nNumStaChanCombinedConc; + } + if (pParam->nNumP2PChanCombinedConc) { - pMac->roam.configParam.nNumChanCombinedConc = pParam->nNumChanCombinedConc; + pMac->roam.configParam.nNumP2PChanCombinedConc = pParam->nNumP2PChanCombinedConc; } #endif //if upper layer wants to disable idle scan altogether set it to 0 @@ -1585,7 +1672,7 @@ eHalStatus csrChangeDefaultConfigParam(tpAniSirGlobal pMac, tCsrConfigParam *pPa pMac->roam.configParam.impsSleepTime = 0; } pMac->roam.configParam.eBand = pParam->eBand; - pMac->roam.configParam.uCfgDot11Mode = csrGetCfgDot11ModeFromCsrPhyMode(NULL, pMac->roam.configParam.phyMode, + pMac->roam.configParam.uCfgDot11Mode = csrGetCfgDot11ModeFromCsrPhyMode(NULL, pMac->roam.configParam.phyMode, pMac->roam.configParam.ProprietaryRatesEnabled); //if HDD passed down non zero values for age params, then only update, //otherwise keep using the defaults @@ -1595,22 +1682,22 @@ eHalStatus csrChangeDefaultConfigParam(tpAniSirGlobal pMac, tCsrConfigParam *pPa } if(pParam->scanAgeTimeNCNPS) { - pMac->roam.configParam.scanAgeTimeNCNPS = pParam->scanAgeTimeNCNPS; + pMac->roam.configParam.scanAgeTimeNCNPS = pParam->scanAgeTimeNCNPS; } if(pParam->scanAgeTimeNCPS) { - pMac->roam.configParam.scanAgeTimeNCPS = pParam->scanAgeTimeNCPS; + pMac->roam.configParam.scanAgeTimeNCPS = pParam->scanAgeTimeNCPS; } if(pParam->scanAgeTimeCNPS) { - pMac->roam.configParam.scanAgeTimeCNPS = pParam->scanAgeTimeCNPS; + pMac->roam.configParam.scanAgeTimeCNPS = pParam->scanAgeTimeCNPS; } if(pParam->scanAgeTimeCPS) { - pMac->roam.configParam.scanAgeTimeCPS = pParam->scanAgeTimeCPS; + pMac->roam.configParam.scanAgeTimeCPS = pParam->scanAgeTimeCPS; } - - csrAssignRssiForCategory(pMac, pParam->bCatRssiOffset); + + csrAssignRssiForCategory(pMac, CSR_BEST_RSSI_VALUE, pParam->bCatRssiOffset); pMac->roam.configParam.nRoamingTime = pParam->nRoamingTime; pMac->roam.configParam.fEnforce11dChannels = pParam->fEnforce11dChannels; pMac->roam.configParam.fSupplicantCountryCodeHasPriority = pParam->fSupplicantCountryCodeHasPriority; @@ -1641,7 +1728,8 @@ eHalStatus csrChangeDefaultConfigParam(tpAniSirGlobal pMac, tCsrConfigParam *pPa #ifdef WLAN_FEATURE_VOWIFI_11R - palCopyMemory( pMac->hHdd, &pMac->roam.configParam.csr11rConfig, &pParam->csr11rConfig, sizeof(tCsr11rConfigParams) ); + vos_mem_copy(&pMac->roam.configParam.csr11rConfig, + &pParam->csr11rConfig, sizeof(tCsr11rConfigParams)); smsLog( pMac, LOG1, "IsFTResourceReqSupp = %d", pMac->roam.configParam.csr11rConfig.IsFTResourceReqSupported); #endif #if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR) @@ -1653,19 +1741,24 @@ eHalStatus csrChangeDefaultConfigParam(tpAniSirGlobal pMac, tCsrConfigParam *pPa pMac->roam.configParam.nRoamPrefer5GHz = pParam->nRoamPrefer5GHz; pMac->roam.configParam.nRoamIntraBand = pParam->nRoamIntraBand; pMac->roam.configParam.isWESModeEnabled = pParam->isWESModeEnabled; + pMac->roam.configParam.nProbes = pParam->nProbes; + pMac->roam.configParam.nRoamScanHomeAwayTime = pParam->nRoamScanHomeAwayTime; #endif #ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD pMac->roam.configParam.isRoamOffloadScanEnabled = pParam->isRoamOffloadScanEnabled; + pMac->roam.configParam.bFastRoamInConIniFeatureEnabled = pParam->bFastRoamInConIniFeatureEnabled; #endif #ifdef FEATURE_WLAN_LFR pMac->roam.configParam.isFastRoamIniFeatureEnabled = pParam->isFastRoamIniFeatureEnabled; + pMac->roam.configParam.MAWCEnabled = pParam->MAWCEnabled; #endif #ifdef FEATURE_WLAN_CCX pMac->roam.configParam.isCcxIniFeatureEnabled = pParam->isCcxIniFeatureEnabled; #endif #ifdef WLAN_FEATURE_NEIGHBOR_ROAMING - palCopyMemory( pMac->hHdd, &pMac->roam.configParam.neighborRoamConfig, &pParam->neighborRoamConfig, sizeof(tCsrNeighborRoamConfigParams) ); + vos_mem_copy(&pMac->roam.configParam.neighborRoamConfig, + &pParam->neighborRoamConfig, sizeof(tCsrNeighborRoamConfigParams)); smsLog( pMac, LOG1, "nNeighborScanTimerPerioid = %d", pMac->roam.configParam.neighborRoamConfig.nNeighborScanTimerPeriod); smsLog( pMac, LOG1, "nNeighborReassocRssiThreshold = %d", pMac->roam.configParam.neighborRoamConfig.nNeighborReassocRssiThreshold); smsLog( pMac, LOG1, "nNeighborLookupRssiThreshold = %d", pMac->roam.configParam.neighborRoamConfig.nNeighborLookupRssiThreshold); @@ -1681,7 +1774,6 @@ eHalStatus csrChangeDefaultConfigParam(tpAniSirGlobal pMac, tCsrConfigParam *pPa { smsLog( pMac, LOG1, "%d ", pMac->roam.configParam.neighborRoamConfig.neighborScanChanList.channelList[i] ); } - smsLog( pMac, LOG1, ""); } #endif pMac->roam.configParam.addTSWhenACMIsOff = pParam->addTSWhenACMIsOff; @@ -1697,7 +1789,7 @@ eHalStatus csrChangeDefaultConfigParam(tpAniSirGlobal pMac, tCsrConfigParam *pPa * will automatically connect back and resume BMPS since resume BMPS is not working when moving from concurrent to * single session */ - //Remove this code once SLM_Sessionization is supported + //Remove this code once SLM_Sessionization is supported //BMPS_WORKAROUND_NOT_NEEDED pMac->roam.configParam.doBMPSWorkaround = 0; @@ -1716,11 +1808,12 @@ eHalStatus csrChangeDefaultConfigParam(tpAniSirGlobal pMac, tCsrConfigParam *pPa pMac->roam.configParam.htSmps= pParam->htSmps; pMac->roam.configParam.txLdpcEnable = pParam->enableTxLdpc; + pMac->roam.configParam.isAmsduSupportInAMPDU = pParam->isAmsduSupportInAMPDU; + pMac->roam.configParam.nSelect5GHzMargin = pParam->nSelect5GHzMargin; pMac->roam.configParam.isCoalesingInIBSSAllowed = pParam->isCoalesingInIBSSAllowed; - } - + return status; } @@ -1753,28 +1846,32 @@ eHalStatus csrGetConfigParam(tpAniSirGlobal pMac, tCsrConfigParam *pParam) pParam->nActiveMinChnTime = pMac->roam.configParam.nActiveMinChnTime; pParam->nPassiveMaxChnTime = pMac->roam.configParam.nPassiveMaxChnTime; pParam->nPassiveMinChnTime = pMac->roam.configParam.nPassiveMinChnTime; + pParam->nActiveMaxChnTimeBtc = pMac->roam.configParam.nActiveMaxChnTimeBtc; + pParam->nActiveMinChnTimeBtc = pMac->roam.configParam.nActiveMinChnTimeBtc; + pParam->disableAggWithBtc = pMac->roam.configParam.disableAggWithBtc; #ifdef WLAN_AP_STA_CONCURRENCY pParam->nActiveMaxChnTimeConc = pMac->roam.configParam.nActiveMaxChnTimeConc; pParam->nActiveMinChnTimeConc = pMac->roam.configParam.nActiveMinChnTimeConc; pParam->nPassiveMaxChnTimeConc = pMac->roam.configParam.nPassiveMaxChnTimeConc; pParam->nPassiveMinChnTimeConc = pMac->roam.configParam.nPassiveMinChnTimeConc; pParam->nRestTimeConc = pMac->roam.configParam.nRestTimeConc; - pParam->nNumChanCombinedConc = pMac->roam.configParam.nNumChanCombinedConc; + pParam->nNumStaChanCombinedConc = pMac->roam.configParam.nNumStaChanCombinedConc; + pParam->nNumP2PChanCombinedConc = pMac->roam.configParam.nNumP2PChanCombinedConc; #endif //Change the unit from microsecond to second pParam->impsSleepTime = pMac->roam.configParam.impsSleepTime / PAL_TIMER_TO_SEC_UNIT; pParam->eBand = pMac->roam.configParam.eBand; pParam->nScanResultAgeCount = pMac->roam.configParam.agingCount; - pParam->scanAgeTimeNCNPS = pMac->roam.configParam.scanAgeTimeNCNPS; - pParam->scanAgeTimeNCPS = pMac->roam.configParam.scanAgeTimeNCPS; - pParam->scanAgeTimeCNPS = pMac->roam.configParam.scanAgeTimeCNPS; - pParam->scanAgeTimeCPS = pMac->roam.configParam.scanAgeTimeCPS; + pParam->scanAgeTimeNCNPS = pMac->roam.configParam.scanAgeTimeNCNPS; + pParam->scanAgeTimeNCPS = pMac->roam.configParam.scanAgeTimeNCPS; + pParam->scanAgeTimeCNPS = pMac->roam.configParam.scanAgeTimeCNPS; + pParam->scanAgeTimeCPS = pMac->roam.configParam.scanAgeTimeCPS; pParam->bCatRssiOffset = pMac->roam.configParam.bCatRssiOffset; pParam->nRoamingTime = pMac->roam.configParam.nRoamingTime; pParam->fEnforce11dChannels = pMac->roam.configParam.fEnforce11dChannels; pParam->fSupplicantCountryCodeHasPriority = pMac->roam.configParam.fSupplicantCountryCodeHasPriority; pParam->fEnforceCountryCodeMatch = pMac->roam.configParam.fEnforceCountryCodeMatch; - pParam->fEnforceDefaultDomain = pMac->roam.configParam.fEnforceDefaultDomain; + pParam->fEnforceDefaultDomain = pMac->roam.configParam.fEnforceDefaultDomain; pParam->vccRssiThreshold = pMac->roam.configParam.vccRssiThreshold; pParam->vccUlMacLossThreshold = pMac->roam.configParam.vccUlMacLossThreshold; pParam->IsIdleScanEnabled = pMac->roam.configParam.IsIdleScanEnabled; @@ -1792,16 +1889,61 @@ eHalStatus csrGetConfigParam(tpAniSirGlobal pMac, tCsrConfigParam *pParam) pParam->scanCfgAgingTime = pMac->scan.scanResultCfgAgingTime; #ifdef WLAN_FEATURE_NEIGHBOR_ROAMING - palCopyMemory( pMac->hHdd, &pParam->neighborRoamConfig, &pMac->roam.configParam.neighborRoamConfig, sizeof(tCsrNeighborRoamConfigParams) ); + vos_mem_copy(&pParam->neighborRoamConfig, + &pMac->roam.configParam.neighborRoamConfig, + sizeof(tCsrNeighborRoamConfigParams)); #endif #ifdef WLAN_FEATURE_11AC pParam->nVhtChannelWidth = pMac->roam.configParam.nVhtChannelWidth; pParam->enableTxBF = pMac->roam.configParam.txBFEnable; pParam->txBFCsnValue = pMac->roam.configParam.txBFCsnValue; pParam->enableMuBformee = pMac->roam.configParam.txMuBformee; + pParam->enableVhtFor24GHz = pMac->roam.configParam.enableVhtFor24GHz; +#endif +#ifdef WLAN_FEATURE_VOWIFI_11R + vos_mem_copy(&pMac->roam.configParam.csr11rConfig, + &pParam->csr11rConfig, sizeof(tCsr11rConfigParams)); +#endif +#if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR) + pParam->isFastTransitionEnabled = pMac->roam.configParam.isFastTransitionEnabled; + pParam->RoamRssiDiff = pMac->roam.configParam.RoamRssiDiff; + pParam->nImmediateRoamRssiDiff = pMac->roam.configParam.nImmediateRoamRssiDiff; + pParam->nRoamPrefer5GHz = pMac->roam.configParam.nRoamPrefer5GHz; + pParam->nRoamIntraBand = pMac->roam.configParam.nRoamIntraBand; + pParam->isWESModeEnabled = pMac->roam.configParam.isWESModeEnabled; + pParam->nProbes = pMac->roam.configParam.nProbes; + pParam->nRoamScanHomeAwayTime = pMac->roam.configParam.nRoamScanHomeAwayTime; +#endif +#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD + pParam->isRoamOffloadScanEnabled = pMac->roam.configParam.isRoamOffloadScanEnabled; + pParam->bFastRoamInConIniFeatureEnabled = pMac->roam.configParam.bFastRoamInConIniFeatureEnabled; +#endif +#ifdef FEATURE_WLAN_LFR + pParam->isFastRoamIniFeatureEnabled = pMac->roam.configParam.isFastRoamIniFeatureEnabled; +#endif + +#ifdef FEATURE_WLAN_CCX + pParam->isCcxIniFeatureEnabled = pMac->roam.configParam.isCcxIniFeatureEnabled; +#endif +#ifdef WLAN_FEATURE_NEIGHBOR_ROAMING + vos_mem_copy(&pParam->neighborRoamConfig, + &pMac->roam.configParam.neighborRoamConfig, + sizeof(tCsrNeighborRoamConfigParams)); + { + int i; + smsLog( pMac, LOG1, FL("Num of Channels in CFG Channel List: %d"), pMac->roam.configParam.neighborRoamConfig.neighborScanChanList.numChannels); + for( i=0; i< pMac->roam.configParam.neighborRoamConfig.neighborScanChanList.numChannels; i++) + { + smsLog( pMac, LOG1, "%d ", pMac->roam.configParam.neighborRoamConfig.neighborScanChanList.channelList[i] ); + } + } #endif + pParam->enableTxLdpc = pMac->roam.configParam.txLdpcEnable; + pParam->isAmsduSupportInAMPDU = pMac->roam.configParam.isAmsduSupportInAMPDU; + pParam->nSelect5GHzMargin = pMac->roam.configParam.nSelect5GHzMargin; + pParam->isCoalesingInIBSSAllowed = pMac->roam.configParam.isCoalesingInIBSSAllowed; @@ -1829,8 +1971,8 @@ eHalStatus csrSetPhyMode(tHalHandle hHal, tANI_U32 phyMode, eCsrBand eBand, tANI { if(CSR_IS_RADIO_BG_ONLY(pMac)) break; if((eCSR_DOT11_MODE_11b & phyMode) || (eCSR_DOT11_MODE_11b_ONLY & phyMode) || - (eCSR_DOT11_MODE_11g & phyMode) || (eCSR_DOT11_MODE_11g_ONLY & phyMode) - ) + (eCSR_DOT11_MODE_11g & phyMode) || (eCSR_DOT11_MODE_11g_ONLY & phyMode) + ) { break; } @@ -1942,7 +2084,7 @@ eHalStatus csrSetPhyMode(tHalHandle hHal, tANI_U32 phyMode, eCsrBand eBand, tANI } return (status); } - + void csrPruneChannelListForMode( tpAniSirGlobal pMac, tCsrChannel *pChannelList ) { tANI_U8 Index; @@ -1964,20 +2106,20 @@ void csrPruneChannelListForMode( tpAniSirGlobal pMac, tCsrChannel *pChannelList } } // Cleanup the rest of channels. Note we only need to clean up the channels if we had - // to trim the list. Calling palZeroMemory() with a 0 size is going to throw asserts on + // to trim the list. Calling palZeroMemory() with a 0 size is going to throw asserts on // the debug builds so let's be a bit smarter about that. Zero out the reset of the channels // only if we need to. // - // The amount of memory to clear is the number of channesl that we trimmed + // The amount of memory to clear is the number of channesl that we trimmed // (pChannelList->numChannels - cChannels) times the size of a channel in the structure. - + if ( pChannelList->numChannels > cChannels ) { - palZeroMemory( pMac->hHdd, &pChannelList->channelList[ cChannels ], - sizeof( pChannelList->channelList[ 0 ] ) * ( pChannelList->numChannels - cChannels ) ); - + vos_mem_set(&pChannelList->channelList[ cChannels ], + sizeof( pChannelList->channelList[ 0 ] ) * + ( pChannelList->numChannels - cChannels ), 0); } - + pChannelList->numChannels = cChannels; } else if ( CSR_IS_5G_BAND_ONLY( pMac ) ) @@ -1991,18 +2133,19 @@ void csrPruneChannelListForMode( tpAniSirGlobal pMac, tCsrChannel *pChannelList } } // Cleanup the rest of channels. Note we only need to clean up the channels if we had - // to trim the list. Calling palZeroMemory() with a 0 size is going to throw asserts on + // to trim the list. Calling palZeroMemory() with a 0 size is going to throw asserts on // the debug builds so let's be a bit smarter about that. Zero out the reset of the channels // only if we need to. // - // The amount of memory to clear is the number of channesl that we trimmed + // The amount of memory to clear is the number of channesl that we trimmed // (pChannelList->numChannels - cChannels) times the size of a channel in the structure. if ( pChannelList->numChannels > cChannels ) { - palZeroMemory( pMac->hHdd, &pChannelList->channelList[ cChannels ], - sizeof( pChannelList->channelList[ 0 ] ) * ( pChannelList->numChannels - cChannels ) ); - } - + vos_mem_set(&pChannelList->channelList[ cChannels ], + sizeof( pChannelList->channelList[ 0 ] ) * + ( pChannelList->numChannels - cChannels ), 0); + } + pChannelList->numChannels = cChannels; } } @@ -2022,125 +2165,6 @@ eHalStatus csrIsValidChannel(tpAniSirGlobal pMac, tANI_U8 chnNum) return status; } -eHalStatus csrGet5GChannels(tpAniSirGlobal pMac) -{ - eHalStatus status = eHAL_STATUS_SUCCESS; - tANI_U8 num20MHzChannelsFound = 0; - VOS_STATUS vosStatus; - tANI_U8 num40MHzChannelsFound = 0; - tANI_U8 Index = 0; - tANI_U8 channelList = 0; - - // Updating the defaultpower Table for changed Domain Id - vosStatus = vos_nv_getChannelListWithPower( pMac->scan.defaultPowerTable, &num20MHzChannelsFound, - pMac->scan.defaultPowerTable40MHz, &num40MHzChannelsFound); - - if ( (VOS_STATUS_SUCCESS != vosStatus) || (num20MHzChannelsFound == 0) ) - { - smsLog( pMac, LOGE, FL("failed to get channels")); - status = eHAL_STATUS_FAILURE; - } - else - { - if ( num20MHzChannelsFound > WNI_CFG_VALID_CHANNEL_LIST_LEN ) - { - num20MHzChannelsFound = WNI_CFG_VALID_CHANNEL_LIST_LEN; - } - - // Move the only 5GHZ channel list to the global data, - // As 2.4GHZ list coming from the AP for the changed domain - // structure -- this will be used as the scan list - for(channelList = 0; channelList < WNI_CFG_VALID_CHANNEL_LIST_LEN; channelList++) - { - // If Channel is 5GHz just break the for loop - if(!(pMac->scan.base20MHzChannels.channelList[ channelList ] > 0 && pMac->scan.base20MHzChannels.channelList[ channelList ] <= 14)) - break; - } - // Update the 5G channels from nv.bin - for ( Index = 0; Index < num20MHzChannelsFound; Index++) - { - if(pMac->scan.defaultPowerTable[Index].chanId >= 36 && pMac->scan.defaultPowerTable[Index].chanId <= 165) - { - if (channelList < WNI_CFG_VALID_CHANNEL_LIST_LEN) - { - pMac->scan.base20MHzChannels.channelList[ channelList ] = pMac->scan.defaultPowerTable[Index].chanId; - channelList++; - } - } - } - - pMac->scan.numChannelsDefault = (num20MHzChannelsFound > channelList) ? num20MHzChannelsFound : channelList; - pMac->scan.base20MHzChannels.numChannels = (num20MHzChannelsFound > channelList) ? num20MHzChannelsFound : channelList; - // Filling the remaining index as Zero Just for causion - for(Index = pMac->scan.base20MHzChannels.numChannels; Index < WNI_CFG_VALID_CHANNEL_LIST_LEN; Index++) - pMac->scan.base20MHzChannels.channelList[ Index ] = 0; - } - return status; -} - -eHalStatus csrGet24GChannels(tpAniSirGlobal pMac) -{ - eHalStatus status = eHAL_STATUS_SUCCESS; - tANI_U8 num20MHzChannelsFound = 0; - VOS_STATUS vosStatus; - tANI_U8 Index = 0; - tANI_U8 numChan = 0; - tANI_U8 num40MHzChannelsFound = 0; - tANI_U8 channelList5GBackup[WNI_CFG_VALID_CHANNEL_LIST_LEN] = {0}, nuum5GchannelListBackup; - tANI_U8 channelList = 0; - - // Read the scan channel list (including the power limit) from EEPROM - vosStatus = vos_nv_getChannelListWithPower( pMac->scan.defaultPowerTable, &num20MHzChannelsFound, - pMac->scan.defaultPowerTable40MHz, &num40MHzChannelsFound); - - if ( (VOS_STATUS_SUCCESS != vosStatus) || (num20MHzChannelsFound == 0) ) - { - smsLog( pMac, LOGE, FL("failed to get channels \n")); - status = eHAL_STATUS_FAILURE; - } - else - { - if ( num20MHzChannelsFound > WNI_CFG_VALID_CHANNEL_LIST_LEN ) - { - num20MHzChannelsFound = WNI_CFG_VALID_CHANNEL_LIST_LEN; - } - - // Move the 2.4GHZ channel list only to the global data, - // As 5GHz list been provided by AP as part of 11d IE - // structure -- this will be used as the scan list - for(channelList = 0, nuum5GchannelListBackup = 0; channelList < WNI_CFG_VALID_CHANNEL_LIST_LEN; channelList++) - { - if(pMac->scan.base20MHzChannels.channelList[ channelList ] >= 36 && pMac->scan.base20MHzChannels.channelList[ channelList ] <= 165) - { - // First taking the 5GHz channel list backup - channelList5GBackup[nuum5GchannelListBackup] = pMac->scan.base20MHzChannels.channelList[ channelList ]; - nuum5GchannelListBackup++; - } - } - // Updating the 2.4GHz list - for ( Index = 0, numChan = 0; Index < num20MHzChannelsFound; Index++) - { - if(pMac->scan.defaultPowerTable[Index].chanId > 0 && pMac->scan.defaultPowerTable[Index].chanId <= 14) - { - pMac->scan.base20MHzChannels.channelList[ numChan ] = pMac->scan.defaultPowerTable[Index].chanId; - numChan++; - } - } - // Restoring the Backed up 5 GHZ channels - for(channelList = 0;channelList < nuum5GchannelListBackup; channelList++ ) - { - if (numChan < WNI_CFG_VALID_CHANNEL_LIST_LEN) - { - pMac->scan.base20MHzChannels.channelList[ numChan ] = channelList5GBackup[channelList]; - numChan++; - } - } - - pMac->scan.numChannelsDefault = (num20MHzChannelsFound > numChan) ? num20MHzChannelsFound : numChan; - pMac->scan.base20MHzChannels.numChannels = (num20MHzChannelsFound > numChan) ? num20MHzChannelsFound : numChan; - } - return (status); -} eHalStatus csrInitGetChannels(tpAniSirGlobal pMac) { @@ -2149,12 +2173,12 @@ eHalStatus csrInitGetChannels(tpAniSirGlobal pMac) VOS_STATUS vosStatus; tANI_U8 Index = 0; tANI_U8 num40MHzChannelsFound = 0; - - + + //TODO: this interface changed to include the 40MHz channel list // this needs to be tied into the adapter structure somehow and referenced appropriately for CB operation // Read the scan channel list (including the power limit) from EEPROM - vosStatus = vos_nv_getChannelListWithPower( pMac->scan.defaultPowerTable, &num20MHzChannelsFound, + vosStatus = vos_nv_getChannelListWithPower( pMac->scan.defaultPowerTable, &num20MHzChannelsFound, pMac->scan.defaultPowerTable40MHz, &num40MHzChannelsFound); if ( (VOS_STATUS_SUCCESS != vosStatus) || (num20MHzChannelsFound == 0) ) { @@ -2185,7 +2209,7 @@ eHalStatus csrInitGetChannels(tpAniSirGlobal pMac) } pMac->scan.base40MHzChannels.numChannels = num40MHzChannelsFound; } - return (status); + return (status); } eHalStatus csrInitChannelList( tHalHandle hHal ) @@ -2198,10 +2222,10 @@ eHalStatus csrInitChannelList( tHalHandle hHal ) csrSaveChannelPowerForBand(pMac, eANI_BOOLEAN_TRUE); // Apply the base channel list, power info, and set the Country code... csrApplyChannelPowerCountryInfo( pMac, &pMac->scan.base20MHzChannels, pMac->scan.countryCodeCurrent, eANI_BOOLEAN_TRUE ); - + return (status); } -eHalStatus csrChangeConfigParams(tpAniSirGlobal pMac, +eHalStatus csrChangeConfigParams(tpAniSirGlobal pMac, tCsrUpdateConfigParam *pUpdateConfigParam) { eHalStatus status = eHAL_STATUS_FAILURE; @@ -2224,12 +2248,12 @@ static eHalStatus CsrInit11dInfo(tpAniSirGlobal pMac, tCsr11dinfo *ps11dinfo) { return (status); } - if ( ps11dinfo->Channels.numChannels && ( WNI_CFG_VALID_CHANNEL_LIST_LEN >= ps11dinfo->Channels.numChannels ) ) + if ( ps11dinfo->Channels.numChannels && ( WNI_CFG_VALID_CHANNEL_LIST_LEN >= ps11dinfo->Channels.numChannels ) ) { - pMac->scan.base20MHzChannels.numChannels = ps11dinfo->Channels.numChannels; - status = palCopyMemory(pMac->hHdd, pMac->scan.base20MHzChannels.channelList, - ps11dinfo->Channels.channelList, ps11dinfo->Channels.numChannels); - if(!HAL_STATUS_SUCCESS(status)) return (status); + pMac->scan.base20MHzChannels.numChannels = ps11dinfo->Channels.numChannels; + vos_mem_copy(pMac->scan.base20MHzChannels.channelList, + ps11dinfo->Channels.channelList, + ps11dinfo->Channels.numChannels); } else { @@ -2237,21 +2261,26 @@ static eHalStatus CsrInit11dInfo(tpAniSirGlobal pMac, tCsr11dinfo *ps11dinfo) return (eHAL_STATUS_SUCCESS); } //legacy maintenance - status = palCopyMemory(pMac->hHdd, pMac->scan.countryCodeDefault, - ps11dinfo->countryCode, WNI_CFG_COUNTRY_CODE_LEN); - if(!HAL_STATUS_SUCCESS(status)) return (status); - //Tush: at csropen get this initialized with default, during csr reset if this + + vos_mem_copy(pMac->scan.countryCodeDefault, ps11dinfo->countryCode, + WNI_CFG_COUNTRY_CODE_LEN); + + + //Tush: at csropen get this initialized with default, during csr reset if this // already set with some value no need initilaize with default again if(0 == pMac->scan.countryCodeCurrent[0]) { - status = palCopyMemory(pMac->hHdd, pMac->scan.countryCodeCurrent, - ps11dinfo->countryCode, WNI_CFG_COUNTRY_CODE_LEN); - if(!HAL_STATUS_SUCCESS(status)) return (status); + vos_mem_copy(pMac->scan.countryCodeCurrent, ps11dinfo->countryCode, + WNI_CFG_COUNTRY_CODE_LEN); } // need to add the max power channel list - if(HAL_STATUS_SUCCESS(palAllocateMemory(pMac->hHdd, (void **)&pChanInfo, sizeof(tSirMacChanInfo) * WNI_CFG_VALID_CHANNEL_LIST_LEN))) + pChanInfo = vos_mem_malloc(sizeof(tSirMacChanInfo) * WNI_CFG_VALID_CHANNEL_LIST_LEN); + if (pChanInfo != NULL) { - palZeroMemory(pMac->hHdd, pChanInfo, sizeof(tSirMacChanInfo) * WNI_CFG_VALID_CHANNEL_LIST_LEN); + vos_mem_set(pChanInfo, + sizeof(tSirMacChanInfo) * WNI_CFG_VALID_CHANNEL_LIST_LEN , + 0); + pChanInfoStart = pChanInfo; for(index = 0; index < ps11dinfo->Channels.numChannels; index++) { @@ -2265,7 +2294,7 @@ static eHalStatus CsrInit11dInfo(tpAniSirGlobal pMac, tCsr11dinfo *ps11dinfo) { csrSaveToChannelPower2G_5G( pMac, count * sizeof(tSirMacChanInfo), pChanInfoStart ); } - palFreeMemory(pMac->hHdd, pChanInfoStart); + vos_mem_free(pChanInfoStart); } //Only apply them to CFG when not in STOP state. Otherwise they will be applied later if( HAL_STATUS_SUCCESS(status) ) @@ -2300,9 +2329,12 @@ eHalStatus csrInitChannelPowerList( tpAniSirGlobal pMac, tCsr11dinfo *ps11dinfo) return eHAL_STATUS_FAILURE; } - if(HAL_STATUS_SUCCESS(palAllocateMemory(pMac->hHdd, (void **)&pChanInfo, sizeof(tSirMacChanInfo) * WNI_CFG_VALID_CHANNEL_LIST_LEN))) + pChanInfo = vos_mem_malloc(sizeof(tSirMacChanInfo) * WNI_CFG_VALID_CHANNEL_LIST_LEN); + if (pChanInfo != NULL) { - palZeroMemory(pMac->hHdd, pChanInfo, sizeof(tSirMacChanInfo) * WNI_CFG_VALID_CHANNEL_LIST_LEN); + vos_mem_set(pChanInfo, + sizeof(tSirMacChanInfo) * WNI_CFG_VALID_CHANNEL_LIST_LEN, + 0); pChanInfoStart = pChanInfo; for(index = 0; index < ps11dinfo->Channels.numChannels; index++) @@ -2317,7 +2349,7 @@ eHalStatus csrInitChannelPowerList( tpAniSirGlobal pMac, tCsr11dinfo *ps11dinfo) { csrSaveToChannelPower2G_5G( pMac, count * sizeof(tSirMacChanInfo), pChanInfoStart ); } - palFreeMemory(pMac->hHdd, pChanInfoStart); + vos_mem_free(pChanInfoStart); } return eHAL_STATUS_SUCCESS; @@ -2348,17 +2380,17 @@ void csrRoamRemoveDuplicateCommand(tpAniSirGlobal pMac, tANI_U32 sessionId, tSme // - the new roam command is a NewProfileList. // - the new roam command is a Forced Dissoc // - the new roam command is from an 802.11 OID (OID_SSID or OID_BSSID). - if ( + if ( (pCommand && ( pCommand->sessionId == pDupCommand->sessionId ) && ((pCommand->command == pDupCommand->command) && /* This peermac check is requried for Softap/GO scenarios - * For STA scenario below OR check will suffice as pCommand will + * For STA scenario below OR check will suffice as pCommand will * always be NULL for STA scenarios */ (vos_mem_compare(pDupCommand->u.roamCmd.peerMac, pCommand->u.roamCmd.peerMac, sizeof(v_MACADDR_t))) && (pCommand->u.roamCmd.roamReason == pDupCommand->u.roamCmd.roamReason || eCsrForcedDisassoc == pCommand->u.roamCmd.roamReason || - eCsrHddIssued == pCommand->u.roamCmd.roamReason))) + eCsrHddIssued == pCommand->u.roamCmd.roamReason))) || //below the pCommand is NULL ( (sessionId == pDupCommand->sessionId) && @@ -2389,11 +2421,12 @@ void csrRoamRemoveDuplicateCommand(tpAniSirGlobal pMac, tANI_U32 sessionId, tSme } csrLLClose(&localList); } -eHalStatus csrRoamCallCallback(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamInfo *pRoamInfo, +eHalStatus csrRoamCallCallback(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamInfo *pRoamInfo, tANI_U32 roamId, eRoamCmdStatus u1, eCsrRoamResult u2) { eHalStatus status = eHAL_STATUS_SUCCESS; #ifdef FEATURE_WLAN_DIAG_SUPPORT_CSR + tANI_U32 rssi = 0; WLAN_VOS_DIAG_EVENT_DEF(connectionStatus, vos_event_wlan_status_payload_type); #endif tCsrRoamSession *pSession; @@ -2407,6 +2440,9 @@ eHalStatus csrRoamCallCallback(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoam VOS_ASSERT(0); return eHAL_STATUS_FAILURE; } + + smsLog(pMac, LOG4, "Recieved RoamCmdStatus %d with Roam Result %d", u1, u2); + if(eCSR_ROAM_ASSOCIATION_COMPLETION == u1 && pRoamInfo) { smsLog(pMac, LOGW, " Assoc complete result = %d statusCode = %d reasonCode = %d", u2, pRoamInfo->statusCode, pRoamInfo->reasonCode); @@ -2414,12 +2450,12 @@ eHalStatus csrRoamCallCallback(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoam if ((u1 == eCSR_ROAM_FT_REASSOC_FAILED) && (pSession->bRefAssocStartCnt)) { /* * Decrement bRefAssocStartCnt for FT reassoc failure. - * Reason: For FT reassoc failures, we first call - * csrRoamCallCallback before notifying a failed roam - * completion through csrRoamComplete. The latter in - * turn calls csrRoamProcessResults which tries to + * Reason: For FT reassoc failures, we first call + * csrRoamCallCallback before notifying a failed roam + * completion through csrRoamComplete. The latter in + * turn calls csrRoamProcessResults which tries to * once again call csrRoamCallCallback if bRefAssocStartCnt - * is non-zero. Since this is redundant for FT reassoc + * is non-zero. Since this is redundant for FT reassoc * failure, decrement bRefAssocStartCnt. */ pSession->bRefAssocStartCnt--; @@ -2439,7 +2475,7 @@ eHalStatus csrRoamCallCallback(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoam pRoamInfo->sessionId = (tANI_U8)sessionId; } - /* avoid holding the global lock when making the roaming callback , original change came + /* avoid holding the global lock when making the roaming callback, original change came from a raised CR (CR304874). Since this callback is in HDD a potential deadlock is possible on other OS ports where the callback may need to take locks to protect HDD state @@ -2449,66 +2485,98 @@ eHalStatus csrRoamCallCallback(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoam status = pSession->callback(pSession->pContext, pRoamInfo, roamId, u1, u2); // TODO: revisit: sme_AcquireGlobalLock( &pMac->sme ); } - //EVENT_WLAN_STATUS: eCSR_ROAM_ASSOCIATION_COMPLETION, - // eCSR_ROAM_LOSTLINK, eCSR_ROAM_DISASSOCIATED, -#ifdef FEATURE_WLAN_DIAG_SUPPORT_CSR - palZeroMemory(pMac->hHdd, &connectionStatus, sizeof(vos_event_wlan_status_payload_type)); + //EVENT_WLAN_STATUS: eCSR_ROAM_ASSOCIATION_COMPLETION, + // eCSR_ROAM_LOSTLINK, eCSR_ROAM_DISASSOCIATED, +#ifdef FEATURE_WLAN_DIAG_SUPPORT_CSR + vos_mem_set(&connectionStatus, + sizeof(vos_event_wlan_status_payload_type), 0); + if((eCSR_ROAM_ASSOCIATION_COMPLETION == u1) && (eCSR_ROAM_RESULT_ASSOCIATED == u2)) { connectionStatus.eventId = eCSR_WLAN_STATUS_CONNECT; connectionStatus.bssType = pRoamInfo->u.pConnectedProfile->BSSType; + if(NULL != pRoamInfo->pBssDesc) { connectionStatus.rssi = pRoamInfo->pBssDesc->rssi * (-1); connectionStatus.channel = pRoamInfo->pBssDesc->channelId; } + if (ccmCfgSetInt(pMac, WNI_CFG_CURRENT_RSSI, connectionStatus.rssi, NULL, + eANI_BOOLEAN_FALSE) == eHAL_STATUS_FAILURE) { + smsLog(pMac, LOGE, "Could not pass WNI_CFG_CURRENT_RSSI to Cfg"); + } + connectionStatus.qosCapability = pRoamInfo->u.pConnectedProfile->qosConnection; connectionStatus.authType = (v_U8_t)diagAuthTypeFromCSRType(pRoamInfo->u.pConnectedProfile->AuthType); connectionStatus.encryptionType = (v_U8_t)diagEncTypeFromCSRType(pRoamInfo->u.pConnectedProfile->EncryptionType); - palCopyMemory(pMac->hHdd, connectionStatus.ssid, pRoamInfo->u.pConnectedProfile->SSID.ssId, 6); + vos_mem_copy(connectionStatus.ssid, + pRoamInfo->u.pConnectedProfile->SSID.ssId, 6); + connectionStatus.reason = eCSR_REASON_UNSPECIFIED; + vos_mem_copy(&pMac->sme.eventPayload, &connectionStatus, + sizeof(vos_event_wlan_status_payload_type)); WLAN_VOS_DIAG_EVENT_REPORT(&connectionStatus, EVENT_WLAN_STATUS); } if((eCSR_ROAM_MIC_ERROR_IND == u1) || (eCSR_ROAM_RESULT_MIC_FAILURE == u2)) { + vos_mem_copy(&connectionStatus, &pMac->sme.eventPayload, + sizeof(vos_event_wlan_status_payload_type)); + if (HAL_STATUS_SUCCESS(ccmCfgGetInt(pMac, WNI_CFG_CURRENT_RSSI, &rssi))) + connectionStatus.rssi = rssi; + connectionStatus.eventId = eCSR_WLAN_STATUS_DISCONNECT; connectionStatus.reason = eCSR_REASON_MIC_ERROR; WLAN_VOS_DIAG_EVENT_REPORT(&connectionStatus, EVENT_WLAN_STATUS); } if(eCSR_ROAM_RESULT_FORCED == u2) { + vos_mem_copy(&connectionStatus, &pMac->sme.eventPayload, + sizeof(vos_event_wlan_status_payload_type)); + if (HAL_STATUS_SUCCESS(ccmCfgGetInt(pMac, WNI_CFG_CURRENT_RSSI, &rssi))) + connectionStatus.rssi = rssi; + connectionStatus.eventId = eCSR_WLAN_STATUS_DISCONNECT; connectionStatus.reason = eCSR_REASON_USER_REQUESTED; WLAN_VOS_DIAG_EVENT_REPORT(&connectionStatus, EVENT_WLAN_STATUS); } if(eCSR_ROAM_RESULT_DISASSOC_IND == u2) { + vos_mem_copy(&connectionStatus, &pMac->sme.eventPayload, + sizeof(vos_event_wlan_status_payload_type)); + if (HAL_STATUS_SUCCESS(ccmCfgGetInt(pMac, WNI_CFG_CURRENT_RSSI, &rssi))) + connectionStatus.rssi = rssi; + connectionStatus.eventId = eCSR_WLAN_STATUS_DISCONNECT; connectionStatus.reason = eCSR_REASON_DISASSOC; WLAN_VOS_DIAG_EVENT_REPORT(&connectionStatus, EVENT_WLAN_STATUS); } if(eCSR_ROAM_RESULT_DEAUTH_IND == u2) { + vos_mem_copy(&connectionStatus, &pMac->sme.eventPayload, + sizeof(vos_event_wlan_status_payload_type)); + if (HAL_STATUS_SUCCESS(ccmCfgGetInt(pMac, WNI_CFG_CURRENT_RSSI, &rssi))) + connectionStatus.rssi = rssi; + connectionStatus.eventId = eCSR_WLAN_STATUS_DISCONNECT; connectionStatus.reason = eCSR_REASON_DEAUTH; WLAN_VOS_DIAG_EVENT_REPORT(&connectionStatus, EVENT_WLAN_STATUS); } #endif //FEATURE_WLAN_DIAG_SUPPORT_CSR - + return (status); } // Returns whether handoff is currently in progress or not tANI_BOOLEAN csrRoamIsHandoffInProgress(tpAniSirGlobal pMac) { #ifdef WLAN_FEATURE_NEIGHBOR_ROAMING - return csrNeighborRoamIsHandoffInProgress(pMac); + return csrNeighborRoamIsHandoffInProgress(pMac); #else return eANI_BOOLEAN_FALSE; #endif } eHalStatus csrRoamIssueDisassociate( tpAniSirGlobal pMac, tANI_U32 sessionId, eCsrRoamSubState NewSubstate, tANI_BOOLEAN fMICFailure ) -{ +{ eHalStatus status = eHAL_STATUS_SUCCESS; tCsrBssid bssId = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; tANI_U16 reasonCode; @@ -2519,15 +2587,15 @@ eHalStatus csrRoamIssueDisassociate( tpAniSirGlobal pMac, tANI_U32 sessionId, smsLog(pMac, LOGE, FL(" session %d not found "), sessionId); return eHAL_STATUS_FAILURE; } - - //Restore AC weight in case we change it + + //Restore AC weight in case we change it if ( csrIsConnStateConnectedInfra( pMac, sessionId ) ) { smsLog(pMac, LOG1, FL(" restore AC weights (%d-%d-%d-%d)"), pMac->roam.ucACWeights[0], pMac->roam.ucACWeights[1], pMac->roam.ucACWeights[2], pMac->roam.ucACWeights[3]); WLANTL_SetACWeights(pMac->roam.gVosContext, pMac->roam.ucACWeights); } - + if ( fMICFailure ) { reasonCode = eSIR_MAC_MIC_FAILURE_REASON; @@ -2535,35 +2603,37 @@ eHalStatus csrRoamIssueDisassociate( tpAniSirGlobal pMac, tANI_U32 sessionId, else if (NewSubstate == eCSR_ROAM_SUBSTATE_DISASSOC_HANDOFF) { reasonCode = eSIR_MAC_DISASSOC_DUE_TO_FTHANDOFF_REASON; - } - else + } + else { reasonCode = eSIR_MAC_UNSPEC_FAILURE_REASON; - } + } #ifdef WLAN_FEATURE_VOWIFI_11R - if ( (csrRoamIsHandoffInProgress(pMac)) && + if ( (csrRoamIsHandoffInProgress(pMac)) && (NewSubstate != eCSR_ROAM_SUBSTATE_DISASSOC_HANDOFF)) { tpCsrNeighborRoamControlInfo pNeighborRoamInfo = &pMac->roam.neighborRoamInfo; - palCopyMemory(pMac->hHdd, &bssId, pNeighborRoamInfo->csrNeighborRoamProfile.BSSIDs.bssid, sizeof(tSirMacAddr)); - } - else + vos_mem_copy(&bssId, + pNeighborRoamInfo->csrNeighborRoamProfile.BSSIDs.bssid, + sizeof(tSirMacAddr)); + } + else #endif if(pSession->pConnectBssDesc) { - palCopyMemory(pMac->hHdd, &bssId, pSession->pConnectBssDesc->bssId, sizeof(tCsrBssid)); + vos_mem_copy(&bssId, pSession->pConnectBssDesc->bssId, sizeof(tCsrBssid)); } - - + + smsLog( pMac, LOG2, "CSR Attempting to Disassociate Bssid=%02x-%02x-%02x-%02x-%02x-%02x" - "subState = %d reason=%d", bssId[ 0 ], bssId[ 1 ], bssId[ 2 ], bssId[ 3 ], + "subState = %d reason=%d", bssId[ 0 ], bssId[ 1 ], bssId[ 2 ], bssId[ 3 ], bssId[ 4 ], bssId[ 5 ], NewSubstate, reasonCode); csrRoamSubstateChange( pMac, NewSubstate, sessionId); - status = csrSendMBDisassocReqMsg( pMac, sessionId, bssId, reasonCode ); - - if(HAL_STATUS_SUCCESS(status)) + status = csrSendMBDisassocReqMsg( pMac, sessionId, bssId, reasonCode ); + + if(HAL_STATUS_SUCCESS(status)) { csrRoamLinkDown(pMac, sessionId); #ifndef WLAN_MDM_CODE_REDUCTION_OPT @@ -2591,8 +2661,8 @@ eHalStatus csrRoamIssueDisassociate( tpAniSirGlobal pMac, tANI_U32 sessionId, \param reason - reason code, be one of the tSirMacReasonCodes \return eHalStatus ---------------------------------------------------------------------------*/ -eHalStatus csrRoamIssueDisassociateStaCmd( tpAniSirGlobal pMac, - tANI_U32 sessionId, +eHalStatus csrRoamIssueDisassociateStaCmd( tpAniSirGlobal pMac, + tANI_U32 sessionId, tANI_U8 *pPeerMacAddr, tANI_U32 reason) { @@ -2602,7 +2672,7 @@ eHalStatus csrRoamIssueDisassociateStaCmd( tpAniSirGlobal pMac, do { pCommand = csrGetCommandBuffer( pMac ); - if ( !pCommand ) + if ( !pCommand ) { smsLog( pMac, LOGE, FL(" fail to get command buffer") ); status = eHAL_STATUS_RESOURCES; @@ -2633,8 +2703,8 @@ eHalStatus csrRoamIssueDisassociateStaCmd( tpAniSirGlobal pMac, \param reason - reason code, be one of the tSirMacReasonCodes \return eHalStatus ---------------------------------------------------------------------------*/ -eHalStatus csrRoamIssueDeauthStaCmd( tpAniSirGlobal pMac, - tANI_U32 sessionId, +eHalStatus csrRoamIssueDeauthStaCmd( tpAniSirGlobal pMac, + tANI_U32 sessionId, tANI_U8 *pPeerMacAddr, tANI_U32 reason) { @@ -2644,7 +2714,7 @@ eHalStatus csrRoamIssueDeauthStaCmd( tpAniSirGlobal pMac, do { pCommand = csrGetCommandBuffer( pMac ); - if ( !pCommand ) + if ( !pCommand ) { smsLog( pMac, LOGE, FL(" fail to get command buffer") ); status = eHAL_STATUS_RESOURCES; @@ -2679,7 +2749,7 @@ csrRoamIssueTkipCounterMeasures( tpAniSirGlobal pMac, tANI_U32 sessionId, } if (pSession->pConnectBssDesc) { - palCopyMemory(pMac->hHdd, &bssId, pSession->pConnectBssDesc->bssId, sizeof(tCsrBssid)); + vos_mem_copy(&bssId, pSession->pConnectBssDesc->bssId, sizeof(tCsrBssid)); } else { @@ -2688,7 +2758,7 @@ csrRoamIssueTkipCounterMeasures( tpAniSirGlobal pMac, tANI_U32 sessionId, } smsLog( pMac, LOG2, "CSR issuing tkip counter measures for Bssid = %02x-%02x-%02x-%02x-%02x-%02x, Enable = %d", bssId[ 0 ], bssId[ 1 ], bssId[ 2 ], - bssId[ 3 ], bssId[ 4 ], bssId[ 5 ] , bEnable); + bssId[ 3 ], bssId[ 4 ], bssId[ 5 ], bEnable); status = csrSendMBTkipCounterMeasuresReqMsg( pMac, sessionId, bEnable, bssId ); return (status); } @@ -2707,7 +2777,7 @@ csrRoamGetAssociatedStas( tpAniSirGlobal pMac, tANI_U32 sessionId, } if(pSession->pConnectBssDesc) { - palCopyMemory( pMac->hHdd, &bssId, pSession->pConnectBssDesc->bssId, sizeof(tCsrBssid) ); + vos_mem_copy(&bssId, pSession->pConnectBssDesc->bssId, sizeof(tCsrBssid)); } else { @@ -2727,7 +2797,7 @@ csrRoamGetWpsSessionOverlap( tpAniSirGlobal pMac, tANI_U32 sessionId, eHalStatus status = eHAL_STATUS_SUCCESS; tCsrBssid bssId = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, sessionId ); - + if (!pSession) { smsLog( pMac, LOGE, "csrRoamGetWpsSessionOverlap:CSR Session not found"); @@ -2735,7 +2805,7 @@ csrRoamGetWpsSessionOverlap( tpAniSirGlobal pMac, tANI_U32 sessionId, } if(pSession->pConnectBssDesc) { - palCopyMemory( pMac->hHdd, &bssId, pSession->pConnectBssDesc->bssId, sizeof(tCsrBssid) ); + vos_mem_copy(&bssId, pSession->pConnectBssDesc->bssId, sizeof(tCsrBssid)); } else { @@ -2745,13 +2815,13 @@ csrRoamGetWpsSessionOverlap( tpAniSirGlobal pMac, tANI_U32 sessionId, smsLog( pMac, LOG2, "CSR getting WPS Session Overlap for Bssid = %02x-%02x-%02x-%02x-%02x-%02x", bssId[ 0 ], bssId[ 1 ], bssId[ 2 ], bssId[ 3 ], bssId[ 4 ], bssId[ 5 ] ); - - status = csrSendMBGetWPSPBCSessions( pMac, sessionId, bssId, pUsrContext, pfnSapEventCallback, pRemoveMac); - + + status = csrSendMBGetWPSPBCSessions( pMac, sessionId, bssId, pUsrContext, pfnSapEventCallback, pRemoveMac); + return (status); } eHalStatus csrRoamIssueDeauth( tpAniSirGlobal pMac, tANI_U32 sessionId, eCsrRoamSubState NewSubstate ) -{ +{ eHalStatus status = eHAL_STATUS_SUCCESS; tCsrBssid bssId = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, sessionId ); @@ -2761,16 +2831,16 @@ eHalStatus csrRoamIssueDeauth( tpAniSirGlobal pMac, tANI_U32 sessionId, eCsrRoam smsLog(pMac, LOGE, FL(" session %d not found "), sessionId); return eHAL_STATUS_FAILURE; } - + if(pSession->pConnectBssDesc) { - palCopyMemory(pMac->hHdd, &bssId, pSession->pConnectBssDesc->bssId, sizeof(tCsrBssid)); + vos_mem_copy(&bssId, pSession->pConnectBssDesc->bssId, sizeof(tCsrBssid)); } smsLog( pMac, LOG2, "CSR Attempting to Deauth Bssid= %02x-%02x-%02x-%02x-%02x-%02x", bssId[ 0 ], bssId[ 1 ], bssId[ 2 ], - bssId[ 3 ], bssId[ 4 ], bssId[ 5 ] ); + bssId[ 3 ], bssId[ 4 ], bssId[ 5 ] ); csrRoamSubstateChange( pMac, NewSubstate, sessionId); - + status = csrSendMBDeauthReqMsg( pMac, sessionId, bssId, eSIR_MAC_DEAUTH_LEAVING_BSS_REASON ); if(!HAL_STATUS_SUCCESS(status)) { @@ -2791,14 +2861,14 @@ eHalStatus csrRoamSaveConnectedBssDesc( tpAniSirGlobal pMac, tANI_U32 sessionId, smsLog(pMac, LOGE, FL(" session %d not found "), sessionId); return eHAL_STATUS_FAILURE; } - - // If no BSS description was found in this connection (happens with start IBSS), then + + // If no BSS description was found in this connection (happens with start IBSS), then // nix the BSS description that we keep around for the connected BSS) and get out... if(NULL == pBssDesc) { csrFreeConnectBssDesc(pMac, sessionId); } - else + else { size = pBssDesc->length + sizeof( pBssDesc->length ); if(NULL != pSession->pConnectBssDesc) @@ -2811,18 +2881,17 @@ eHalStatus csrRoamSaveConnectedBssDesc( tpAniSirGlobal pMac, tANI_U32 sessionId, } if(NULL == pSession->pConnectBssDesc) { - status = palAllocateMemory( pMac->hHdd, (void **)&pSession->pConnectBssDesc, size); + pSession->pConnectBssDesc = vos_mem_malloc(size); } - if ( HAL_STATUS_SUCCESS(status) && pSession->pConnectBssDesc ) - { - palCopyMemory( pMac->hHdd, pSession->pConnectBssDesc, pBssDesc, size ); - } - } - + if (NULL == pSession->pConnectBssDesc) + status = eHAL_STATUS_FAILURE; + else + vos_mem_copy(pSession->pConnectBssDesc, pBssDesc, size); + } return (status); } -eHalStatus csrRoamPrepareBssConfig(tpAniSirGlobal pMac, tCsrRoamProfile *pProfile, +eHalStatus csrRoamPrepareBssConfig(tpAniSirGlobal pMac, tCsrRoamProfile *pProfile, tSirBssDescription *pBssDesc, tBssConfigParam *pBssConfig, tDot11fBeaconIEs *pIes) { @@ -2834,13 +2903,14 @@ eHalStatus csrRoamPrepareBssConfig(tpAniSirGlobal pMac, tCsrRoamProfile *pProfil do { - palCopyMemory(pMac->hHdd, &pBssConfig->BssCap, &pBssDesc->capabilityInfo, sizeof(tSirMacCapabilityInfo)); + vos_mem_copy(&pBssConfig->BssCap, &pBssDesc->capabilityInfo, + sizeof(tSirMacCapabilityInfo)); //get qos pBssConfig->qosType = csrGetQoSFromBssDesc(pMac, pBssDesc, pIes); //get SSID if(pIes->SSID.present) { - palCopyMemory(pMac->hHdd, &pBssConfig->SSID.ssId, pIes->SSID.ssid, pIes->SSID.num_ssid); + vos_mem_copy(&pBssConfig->SSID.ssId, pIes->SSID.ssid, pIes->SSID.num_ssid); pBssConfig->SSID.length = pIes->SSID.num_ssid; } else @@ -2869,7 +2939,7 @@ eHalStatus csrRoamPrepareBssConfig(tpAniSirGlobal pMac, tCsrRoamProfile *pProfil { pBssConfig->uCfgDot11Mode = cfgDot11Mode; } - else + else { smsLog(pMac, LOGW, " Can not find match phy mode"); //force it @@ -2891,7 +2961,7 @@ eHalStatus csrRoamPrepareBssConfig(tpAniSirGlobal pMac, tCsrRoamProfile *pProfil pBssConfig->qosType = eCSR_MEDIUM_ACCESS_DCF; } - if (((pBssConfig->uCfgDot11Mode == eCSR_CFG_DOT11_MODE_11N) || + if (((pBssConfig->uCfgDot11Mode == eCSR_CFG_DOT11_MODE_11N) || (pBssConfig->uCfgDot11Mode == eCSR_CFG_DOT11_MODE_11AC)) && ((pBssConfig->qosType != eCSR_MEDIUM_ACCESS_WMM_eDCF_DSCP) || (pBssConfig->qosType != eCSR_MEDIUM_ACCESS_11e_HCF) || @@ -2903,7 +2973,7 @@ eHalStatus csrRoamPrepareBssConfig(tpAniSirGlobal pMac, tCsrRoamProfile *pProfil } //auth type - switch( pProfile->negotiatedAuthType ) + switch( pProfile->negotiatedAuthType ) { default: case eCSR_AUTH_TYPE_WPA: @@ -2931,7 +3001,7 @@ eHalStatus csrRoamPrepareBssConfig(tpAniSirGlobal pMac, tCsrRoamProfile *pProfil if(pBssConfig->BssCap.ibss) { //We don't support 11h on IBSS - pBssConfig->f11hSupport = eANI_BOOLEAN_FALSE; + pBssConfig->f11hSupport = eANI_BOOLEAN_FALSE; } else { @@ -2942,21 +3012,21 @@ eHalStatus csrRoamPrepareBssConfig(tpAniSirGlobal pMac, tCsrRoamProfile *pProfil //heartbeat if ( CSR_IS_11A_BSS( pBssDesc ) ) { - pBssConfig->uHeartBeatThresh = pMac->roam.configParam.HeartbeatThresh50; + pBssConfig->uHeartBeatThresh = pMac->roam.configParam.HeartbeatThresh50; } else { pBssConfig->uHeartBeatThresh = pMac->roam.configParam.HeartbeatThresh24; } //Join timeout - // if we find a BeaconInterval in the BssDescription, then set the Join Timeout to - // be 10 x the BeaconInterval. + // if we find a BeaconInterval in the BssDescription, then set the Join Timeout to + // be 10 x the BeaconInterval. if ( pBssDesc->beaconInterval ) { //Make sure it is bigger than the minimal pBssConfig->uJoinTimeOut = CSR_ROAM_MAX(10 * pBssDesc->beaconInterval, CSR_JOIN_FAILURE_TIMEOUT_MIN); } - else + else { pBssConfig->uJoinTimeOut = CSR_JOIN_FAILURE_TIMEOUT_DEFAULT; } @@ -2966,18 +3036,19 @@ eHalStatus csrRoamPrepareBssConfig(tpAniSirGlobal pMac, tCsrRoamProfile *pProfil return (status); } -static eHalStatus csrRoamPrepareBssConfigFromProfile(tpAniSirGlobal pMac, tCsrRoamProfile *pProfile, +static eHalStatus csrRoamPrepareBssConfigFromProfile(tpAniSirGlobal pMac, tCsrRoamProfile *pProfile, tBssConfigParam *pBssConfig, tSirBssDescription *pBssDesc) { eHalStatus status = eHAL_STATUS_SUCCESS; - tANI_U8 operationChannel = 0; + tANI_U8 operationChannel = 0; tANI_U8 qAPisEnabled = FALSE; //SSID pBssConfig->SSID.length = 0; if(pProfile->SSIDs.numOfSSIDs) { //only use the first one - palCopyMemory(pMac->hHdd, &pBssConfig->SSID, &pProfile->SSIDs.SSIDList[0].SSID, sizeof(tSirMacSSid)); + vos_mem_copy(&pBssConfig->SSID, &pProfile->SSIDs.SSIDList[0].SSID, + sizeof(tSirMacSSid)); } else { @@ -3003,11 +3074,11 @@ static eHalStatus csrRoamPrepareBssConfigFromProfile(tpAniSirGlobal pMac, tCsrRo { operationChannel = pProfile->ChannelInfo.ChannelList[0]; } - pBssConfig->uCfgDot11Mode = csrRoamGetPhyModeBandForBss(pMac, pProfile, operationChannel, + pBssConfig->uCfgDot11Mode = csrRoamGetPhyModeBandForBss(pMac, pProfile, operationChannel, &pBssConfig->eBand); //QOS //Is this correct to always set to this //*** - if ( pBssConfig->BssCap.ess == 1 ) + if ( pBssConfig->BssCap.ess == 1 ) { /*For Softap case enable WMM*/ if(CSR_IS_INFRA_AP(pProfile) && (eCsrRoamWmmNoQos != pMac->roam.configParam.WMMSupportMode )){ @@ -3031,7 +3102,7 @@ static eHalStatus csrRoamPrepareBssConfigFromProfile(tpAniSirGlobal pMac, tCsrRo } else { pBssConfig->qosType = eCSR_MEDIUM_ACCESS_DCF; } - + //auth type switch( pProfile->AuthType.authType[0] ) //Take the preferred Auth type. { @@ -3064,7 +3135,7 @@ static eHalStatus csrRoamPrepareBssConfigFromProfile(tpAniSirGlobal pMac, tCsrRo //heartbeat if ( eCSR_BAND_5G == pBssConfig->eBand ) { - pBssConfig->uHeartBeatThresh = pMac->roam.configParam.HeartbeatThresh50; + pBssConfig->uHeartBeatThresh = pMac->roam.configParam.HeartbeatThresh50; } else { @@ -3079,29 +3150,35 @@ static eHalStatus csrRoamGetQosInfoFromBss(tpAniSirGlobal pMac, tSirBssDescripti { eHalStatus status = eHAL_STATUS_FAILURE; tDot11fBeaconIEs *pIes = NULL; - + do { if(!HAL_STATUS_SUCCESS(csrGetParsedBssDescriptionIEs(pMac, pBssDesc, &pIes))) { //err msg - VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, "csrRoamGetQosInfoFromBss() failed"); break; } //check if the AP is QAP & it supports APSD if( CSR_IS_QOS_BSS(pIes) ) { - return eHAL_STATUS_SUCCESS; + status = eHAL_STATUS_SUCCESS; } } while (0); + + if (NULL != pIes) + { + vos_mem_free(pIes); + } + return status; } void csrSetCfgPrivacy( tpAniSirGlobal pMac, tCsrRoamProfile *pProfile, tANI_BOOLEAN fPrivacy ) { - // !! Note: the only difference between this function and the csrSetCfgPrivacyFromProfile() is the - // setting of the privacy CFG based on the advertised privacy setting from the AP for WPA associations. + // !! Note: the only difference between this function and the csrSetCfgPrivacyFromProfile() is the + // setting of the privacy CFG based on the advertised privacy setting from the AP for WPA associations. // See !!Note: below in this function... tANI_U32 PrivacyEnabled = 0; tANI_U32 RsnEnabled = 0; @@ -3111,168 +3188,176 @@ void csrSetCfgPrivacy( tpAniSirGlobal pMac, tCsrRoamProfile *pProfile, tANI_BOOL tANI_U32 Key1Length = 0; tANI_U32 Key2Length = 0; tANI_U32 Key3Length = 0; - - // Reserve for the biggest key + + // Reserve for the biggest key tANI_U8 Key0[ WNI_CFG_WEP_DEFAULT_KEY_1_LEN ]; tANI_U8 Key1[ WNI_CFG_WEP_DEFAULT_KEY_2_LEN ]; tANI_U8 Key2[ WNI_CFG_WEP_DEFAULT_KEY_3_LEN ]; tANI_U8 Key3[ WNI_CFG_WEP_DEFAULT_KEY_4_LEN ]; - + switch ( pProfile->negotiatedUCEncryptionType ) { case eCSR_ENCRYPT_TYPE_NONE: - + // for NO encryption, turn off Privacy and Rsn. - PrivacyEnabled = 0; + PrivacyEnabled = 0; RsnEnabled = 0; - + // WEP key length and Wep Default Key ID don't matter in this case.... - + // clear out the WEP keys that may be hanging around. Key0Length = 0; Key1Length = 0; Key2Length = 0; Key3Length = 0; - + break; - + case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY: case eCSR_ENCRYPT_TYPE_WEP40: - + // Privacy is ON. NO RSN for Wep40 static key. - PrivacyEnabled = 1; + PrivacyEnabled = 1; RsnEnabled = 0; - + // Set the Wep default key ID. WepDefaultKeyId = pProfile->Keys.defaultIndex; // Wep key size if 5 bytes (40 bits). - WepKeyLength = WNI_CFG_WEP_KEY_LENGTH_5; - + WepKeyLength = WNI_CFG_WEP_KEY_LENGTH_5; + // set encryption keys in the CFG database or clear those that are not present in this profile. - if ( pProfile->Keys.KeyLength[0] ) + if ( pProfile->Keys.KeyLength[0] ) { - palCopyMemory( pMac->hHdd, Key0, pProfile->Keys.KeyMaterial[0], WNI_CFG_WEP_KEY_LENGTH_5 ); + vos_mem_copy(Key0, pProfile->Keys.KeyMaterial[0], + WNI_CFG_WEP_KEY_LENGTH_5); Key0Length = WNI_CFG_WEP_KEY_LENGTH_5; } else { Key0Length = 0; } - - if ( pProfile->Keys.KeyLength[1] ) + + if ( pProfile->Keys.KeyLength[1] ) { - palCopyMemory( pMac->hHdd, Key1, pProfile->Keys.KeyMaterial[1], WNI_CFG_WEP_KEY_LENGTH_5 ); - Key1Length = WNI_CFG_WEP_KEY_LENGTH_5; + vos_mem_copy(Key1, pProfile->Keys.KeyMaterial[1], + WNI_CFG_WEP_KEY_LENGTH_5); + Key1Length = WNI_CFG_WEP_KEY_LENGTH_5; } else { Key1Length = 0; } - - if ( pProfile->Keys.KeyLength[2] ) + + if ( pProfile->Keys.KeyLength[2] ) { - palCopyMemory( pMac->hHdd, Key2, pProfile->Keys.KeyMaterial[2], WNI_CFG_WEP_KEY_LENGTH_5 ); - Key2Length = WNI_CFG_WEP_KEY_LENGTH_5; + vos_mem_copy(Key2, pProfile->Keys.KeyMaterial[2], + WNI_CFG_WEP_KEY_LENGTH_5); + Key2Length = WNI_CFG_WEP_KEY_LENGTH_5; } else { Key2Length = 0; } - - if ( pProfile->Keys.KeyLength[3] ) + + if ( pProfile->Keys.KeyLength[3] ) { - palCopyMemory( pMac->hHdd, Key3, pProfile->Keys.KeyMaterial[3], WNI_CFG_WEP_KEY_LENGTH_5 ); - Key3Length = WNI_CFG_WEP_KEY_LENGTH_5; + vos_mem_copy(Key3, pProfile->Keys.KeyMaterial[3], + WNI_CFG_WEP_KEY_LENGTH_5); + Key3Length = WNI_CFG_WEP_KEY_LENGTH_5; } else { Key3Length = 0; - } + } break; - + case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY: case eCSR_ENCRYPT_TYPE_WEP104: - + // Privacy is ON. NO RSN for Wep40 static key. - PrivacyEnabled = 1; + PrivacyEnabled = 1; RsnEnabled = 0; - + // Set the Wep default key ID. WepDefaultKeyId = pProfile->Keys.defaultIndex; - + // Wep key size if 13 bytes (104 bits). WepKeyLength = WNI_CFG_WEP_KEY_LENGTH_13; - + // set encryption keys in the CFG database or clear those that are not present in this profile. - if ( pProfile->Keys.KeyLength[0] ) + if ( pProfile->Keys.KeyLength[0] ) { - palCopyMemory( pMac->hHdd, Key0, pProfile->Keys.KeyMaterial[ 0 ], WNI_CFG_WEP_KEY_LENGTH_13 ); + vos_mem_copy(Key0, pProfile->Keys.KeyMaterial[ 0 ], + WNI_CFG_WEP_KEY_LENGTH_13); Key0Length = WNI_CFG_WEP_KEY_LENGTH_13; } else { Key0Length = 0; } - - if ( pProfile->Keys.KeyLength[1] ) + + if ( pProfile->Keys.KeyLength[1] ) { - palCopyMemory( pMac->hHdd, Key1, pProfile->Keys.KeyMaterial[ 1 ], WNI_CFG_WEP_KEY_LENGTH_13 ); + vos_mem_copy(Key1, pProfile->Keys.KeyMaterial[ 1 ], + WNI_CFG_WEP_KEY_LENGTH_13); Key1Length = WNI_CFG_WEP_KEY_LENGTH_13; } else { Key1Length = 0; } - - if ( pProfile->Keys.KeyLength[2] ) + + if ( pProfile->Keys.KeyLength[2] ) { - palCopyMemory( pMac->hHdd, Key2, pProfile->Keys.KeyMaterial[ 2 ], WNI_CFG_WEP_KEY_LENGTH_13 ); + vos_mem_copy(Key2, pProfile->Keys.KeyMaterial[ 2 ], + WNI_CFG_WEP_KEY_LENGTH_13); Key2Length = WNI_CFG_WEP_KEY_LENGTH_13; } else { Key2Length = 0; } - - if ( pProfile->Keys.KeyLength[3] ) + + if ( pProfile->Keys.KeyLength[3] ) { - palCopyMemory( pMac->hHdd, Key3, pProfile->Keys.KeyMaterial[ 3 ], WNI_CFG_WEP_KEY_LENGTH_13 ); + vos_mem_copy(Key3, pProfile->Keys.KeyMaterial[ 3 ], + WNI_CFG_WEP_KEY_LENGTH_13); Key3Length = WNI_CFG_WEP_KEY_LENGTH_13; } else { Key3Length = 0; } - + break; - + case eCSR_ENCRYPT_TYPE_TKIP: case eCSR_ENCRYPT_TYPE_AES: #ifdef FEATURE_WLAN_WAPI case eCSR_ENCRYPT_TYPE_WPI: #endif /* FEATURE_WLAN_WAPI */ // !! Note: this is the only difference between this function and the csrSetCfgPrivacyFromProfile() - // (setting of the privacy CFG based on the advertised privacy setting from the AP for WPA/WAPI associations ). + // (setting of the privacy CFG based on the advertised privacy setting from the AP for WPA/WAPI associations ). PrivacyEnabled = (0 != fPrivacy); - - // turn on RSN enabled for WPA associations + + // turn on RSN enabled for WPA associations RsnEnabled = 1; - + // WEP key length and Wep Default Key ID don't matter in this case.... - + // clear out the static WEP keys that may be hanging around. Key0Length = 0; Key1Length = 0; Key2Length = 0; - Key3Length = 0; - - break; + Key3Length = 0; + + break; default: PrivacyEnabled = 0; RsnEnabled = 0; - break; - } - + break; + } + ccmCfgSetInt(pMac, WNI_CFG_PRIVACY_ENABLED, PrivacyEnabled, NULL, eANI_BOOLEAN_FALSE); ccmCfgSetInt(pMac, WNI_CFG_RSN_ENABLED, RsnEnabled, NULL, eANI_BOOLEAN_FALSE); ccmCfgSetStr(pMac, WNI_CFG_WEP_DEFAULT_KEY_1, Key0, Key0Length, NULL, eANI_BOOLEAN_FALSE); @@ -3340,10 +3425,10 @@ static eHalStatus csrGetRateSet( tpAniSirGlobal pMac, tCsrRoamProfile *pProfile int i; eCsrCfgDot11Mode cfgDot11Mode; tANI_U8 *pDstRate; - palZeroMemory(pMac->hHdd, pOpRateSet, sizeof(tSirMacRateSet)); - palZeroMemory(pMac->hHdd, pExRateSet, sizeof(tSirMacRateSet)); + vos_mem_set(pOpRateSet, sizeof(tSirMacRateSet), 0); + vos_mem_set(pExRateSet, sizeof(tSirMacRateSet), 0); VOS_ASSERT( pIes != NULL ); - + if( NULL != pIes ) { csrIsPhyModeMatch( pMac, phyMode, pBssDesc, pProfile, &cfgDot11Mode, pIes ); @@ -3359,16 +3444,16 @@ static eHalStatus csrGetRateSet( tpAniSirGlobal pMac, tCsrRoamProfile *pProfile pDstRate = pOpRateSet->rate; if(pIes->SuppRates.present) { - for ( i = 0; i < pIes->SuppRates.num_rates; i++ ) + for ( i = 0; i < pIes->SuppRates.num_rates; i++ ) { - if ( csrRatesIsDot11RateSupported( pMac, pIes->SuppRates.rates[ i ] ) ) + if ( csrRatesIsDot11RateSupported( pMac, pIes->SuppRates.rates[ i ] ) ) { *pDstRate++ = pIes->SuppRates.rates[ i ]; pOpRateSet->numRates++; } } } - if ( eCSR_CFG_DOT11_MODE_11G == cfgDot11Mode || + if ( eCSR_CFG_DOT11_MODE_11G == cfgDot11Mode || eCSR_CFG_DOT11_MODE_11N == cfgDot11Mode || eCSR_CFG_DOT11_MODE_TAURUS == cfgDot11Mode || eCSR_CFG_DOT11_MODE_ABG == cfgDot11Mode ) @@ -3379,9 +3464,9 @@ static eHalStatus csrGetRateSet( tpAniSirGlobal pMac, tCsrRoamProfile *pProfile pDstRate = pExRateSet->rate; if(pIes->ExtSuppRates.present) { - for ( i = 0; i < pIes->ExtSuppRates.num_rates; i++ ) + for ( i = 0; i < pIes->ExtSuppRates.num_rates; i++ ) { - if ( csrRatesIsDot11RateSupported( pMac, pIes->ExtSuppRates.rates[ i ] ) ) + if ( csrRatesIsDot11RateSupported( pMac, pIes->ExtSuppRates.rates[ i ] ) ) { *pDstRate++ = pIes->ExtSuppRates.rates[ i ]; pExRateSet->numRates++; @@ -3397,7 +3482,7 @@ static eHalStatus csrGetRateSet( tpAniSirGlobal pMac, tCsrRoamProfile *pProfile if (pOpRateSet->numRates > 0 || pExRateSet->numRates > 0) status = eHAL_STATUS_SUCCESS; return status; } - + static void csrSetCfgRateSet( tpAniSirGlobal pMac, eCsrPhyMode phyMode, tCsrRoamProfile *pProfile, tSirBssDescription *pBssDesc, tDot11fBeaconIEs *pIes) { @@ -3429,7 +3514,7 @@ static void csrSetCfgRateSet( tpAniSirGlobal pMac, eCsrPhyMode phyMode, tCsrRoam pDstRate = OperationalRates; if(pIes->SuppRates.present) { - for ( i = 0; i < pIes->SuppRates.num_rates; i++ ) + for ( i = 0; i < pIes->SuppRates.num_rates; i++ ) { if ( csrRatesIsDot11RateSupported( pMac, pIes->SuppRates.rates[ i ] ) && ( OperationalRatesLength < CSR_DOT11_SUPPORTED_RATES_MAX )) @@ -3439,7 +3524,7 @@ static void csrSetCfgRateSet( tpAniSirGlobal pMac, eCsrPhyMode phyMode, tCsrRoam } } } - if ( eCSR_CFG_DOT11_MODE_11G == cfgDot11Mode || + if ( eCSR_CFG_DOT11_MODE_11G == cfgDot11Mode || eCSR_CFG_DOT11_MODE_11N == cfgDot11Mode || eCSR_CFG_DOT11_MODE_TAURUS == cfgDot11Mode || eCSR_CFG_DOT11_MODE_ABG == cfgDot11Mode ) @@ -3450,7 +3535,7 @@ static void csrSetCfgRateSet( tpAniSirGlobal pMac, eCsrPhyMode phyMode, tCsrRoam pDstRate = ExtendedOperationalRates; if(pIes->ExtSuppRates.present) { - for ( i = 0; i < pIes->ExtSuppRates.num_rates; i++ ) + for ( i = 0; i < pIes->ExtSuppRates.num_rates; i++ ) { if ( csrRatesIsDot11RateSupported( pMac, pIes->ExtSuppRates.rates[ i ] ) && ( ExtendedOperationalRatesLength < CSR_DOT11_EXTENDED_SUPPORTED_RATES_MAX )) @@ -3475,14 +3560,16 @@ static void csrSetCfgRateSet( tpAniSirGlobal pMac, eCsrPhyMode phyMode, tCsrRoam // set with any proprietary rates we found in the beacon, only if user // allows them... if ( PropRatesEnable && pIes->Airgo.PropSuppRates.present && - ( pIes->Airgo.PropSuppRates.num_rates > 0 )) + ( pIes->Airgo.PropSuppRates.num_rates > 0 )) { ProprietaryOperationalRatesLength = pIes->Airgo.PropSuppRates.num_rates; if ( ProprietaryOperationalRatesLength > sizeof(ProprietaryOperationalRates) ) { ProprietaryOperationalRatesLength = sizeof (ProprietaryOperationalRates); } - palCopyMemory( pMac->hHdd, ProprietaryOperationalRates, pIes->Airgo.PropSuppRates.rates, ProprietaryOperationalRatesLength ); + vos_mem_copy(ProprietaryOperationalRates, + pIes->Airgo.PropSuppRates.rates, + ProprietaryOperationalRatesLength); } else { // No proprietary modes... @@ -3502,16 +3589,16 @@ static void csrSetCfgRateSet( tpAniSirGlobal pMac, eCsrPhyMode phyMode, tCsrRoam } } // Set the operational rate set CFG variables... - ccmCfgSetStr(pMac, WNI_CFG_OPERATIONAL_RATE_SET, OperationalRates, + ccmCfgSetStr(pMac, WNI_CFG_OPERATIONAL_RATE_SET, OperationalRates, OperationalRatesLength, NULL, eANI_BOOLEAN_FALSE); - ccmCfgSetStr(pMac, WNI_CFG_EXTENDED_OPERATIONAL_RATE_SET, ExtendedOperationalRates, + ccmCfgSetStr(pMac, WNI_CFG_EXTENDED_OPERATIONAL_RATE_SET, ExtendedOperationalRates, ExtendedOperationalRatesLength, NULL, eANI_BOOLEAN_FALSE); - ccmCfgSetStr(pMac, WNI_CFG_PROPRIETARY_OPERATIONAL_RATE_SET, - ProprietaryOperationalRates, + ccmCfgSetStr(pMac, WNI_CFG_PROPRIETARY_OPERATIONAL_RATE_SET, + ProprietaryOperationalRates, ProprietaryOperationalRatesLength, NULL, eANI_BOOLEAN_FALSE); ccmCfgSetInt(pMac, WNI_CFG_PROPRIETARY_ANI_FEATURES_ENABLED, PropRatesEnable, NULL, eANI_BOOLEAN_FALSE); - ccmCfgSetStr(pMac, WNI_CFG_CURRENT_MCS_SET, MCSRateIdxSet, - MCSRateLength, NULL, eANI_BOOLEAN_FALSE); + ccmCfgSetStr(pMac, WNI_CFG_CURRENT_MCS_SET, MCSRateIdxSet, + MCSRateLength, NULL, eANI_BOOLEAN_FALSE); }//Parsing BSSDesc else { @@ -3522,25 +3609,25 @@ static void csrSetCfgRateSet( tpAniSirGlobal pMac, eCsrPhyMode phyMode, tCsrRoam static void csrSetCfgRateSetFromProfile( tpAniSirGlobal pMac, tCsrRoamProfile *pProfile ) { - tSirMacRateSetIE DefaultSupportedRates11a = { SIR_MAC_RATESET_EID, - { 8, - { SIR_MAC_RATE_6, - SIR_MAC_RATE_9, - SIR_MAC_RATE_12, + tSirMacRateSetIE DefaultSupportedRates11a = { SIR_MAC_RATESET_EID, + { 8, + { SIR_MAC_RATE_6, + SIR_MAC_RATE_9, + SIR_MAC_RATE_12, SIR_MAC_RATE_18, SIR_MAC_RATE_24, SIR_MAC_RATE_36, SIR_MAC_RATE_48, SIR_MAC_RATE_54 } } }; - tSirMacRateSetIE DefaultSupportedRates11b = { SIR_MAC_RATESET_EID, - { 4, - { SIR_MAC_RATE_1, - SIR_MAC_RATE_2, - SIR_MAC_RATE_5_5, + tSirMacRateSetIE DefaultSupportedRates11b = { SIR_MAC_RATESET_EID, + { 4, + { SIR_MAC_RATE_1, + SIR_MAC_RATE_2, + SIR_MAC_RATE_5_5, SIR_MAC_RATE_11 } } }; - - - tSirMacPropRateSet DefaultSupportedPropRates = { 3, + + + tSirMacPropRateSet DefaultSupportedPropRates = { 3, { SIR_MAC_RATE_72, SIR_MAC_RATE_96, SIR_MAC_RATE_108 } }; @@ -3553,106 +3640,106 @@ static void csrSetCfgRateSetFromProfile( tpAniSirGlobal pMac, tANI_U8 ProprietaryOperationalRates[ 4 ]; // leave enough room for the max number of proprietary rates tANI_U32 ProprietaryOperationalRatesLength = 0; tANI_U32 PropRatesEnable = 0; - tANI_U8 operationChannel = 0; + tANI_U8 operationChannel = 0; if(pProfile->ChannelInfo.ChannelList) { operationChannel = pProfile->ChannelInfo.ChannelList[0]; } cfgDot11Mode = csrRoamGetPhyModeBandForBss( pMac, pProfile, operationChannel, &eBand ); - // For 11a networks, the 11a rates go into the Operational Rate set. For 11b and 11g + // For 11a networks, the 11a rates go into the Operational Rate set. For 11b and 11g // networks, the 11b rates appear in the Operational Rate set. In either case, - // we can blindly put the rates we support into our Operational Rate set - // (including the basic rates, which we have already verified are supported + // we can blindly put the rates we support into our Operational Rate set + // (including the basic rates, which we have already verified are supported // earlier in the roaming decision). - if ( eCSR_BAND_5G == eBand ) - { - // 11a rates into the Operational Rate Set. + if ( eCSR_BAND_5G == eBand ) + { + // 11a rates into the Operational Rate Set. OperationalRatesLength = DefaultSupportedRates11a.supportedRateSet.numRates * sizeof(*DefaultSupportedRates11a.supportedRateSet.rate); - palCopyMemory( pMac->hHdd, OperationalRates, - DefaultSupportedRates11a.supportedRateSet.rate, - OperationalRatesLength ); - + vos_mem_copy(OperationalRates, + DefaultSupportedRates11a.supportedRateSet.rate, + OperationalRatesLength); + // Nothing in the Extended rate set. ExtendedOperationalRatesLength = 0; // populate proprietary rates if user allows them - if ( pMac->roam.configParam.ProprietaryRatesEnabled ) - { - ProprietaryOperationalRatesLength = DefaultSupportedPropRates.numPropRates * - sizeof(*DefaultSupportedPropRates.propRate); - palCopyMemory( pMac->hHdd, ProprietaryOperationalRates, - DefaultSupportedPropRates.propRate, - ProprietaryOperationalRatesLength ); - } - else - { + if ( pMac->roam.configParam.ProprietaryRatesEnabled ) + { + ProprietaryOperationalRatesLength = DefaultSupportedPropRates.numPropRates * + sizeof(*DefaultSupportedPropRates.propRate); + vos_mem_copy(ProprietaryOperationalRates, + DefaultSupportedPropRates.propRate, + ProprietaryOperationalRatesLength); + } + else + { // No proprietary modes - ProprietaryOperationalRatesLength = 0; - } - } - else if ( eCSR_CFG_DOT11_MODE_11B == cfgDot11Mode ) - { - // 11b rates into the Operational Rate Set. + ProprietaryOperationalRatesLength = 0; + } + } + else if ( eCSR_CFG_DOT11_MODE_11B == cfgDot11Mode ) + { + // 11b rates into the Operational Rate Set. OperationalRatesLength = DefaultSupportedRates11b.supportedRateSet.numRates * sizeof(*DefaultSupportedRates11b.supportedRateSet.rate); - palCopyMemory( pMac->hHdd, OperationalRates, - DefaultSupportedRates11b.supportedRateSet.rate, - OperationalRatesLength ); + vos_mem_copy(OperationalRates, + DefaultSupportedRates11b.supportedRateSet.rate, + OperationalRatesLength); // Nothing in the Extended rate set. ExtendedOperationalRatesLength = 0; // No proprietary modes ProprietaryOperationalRatesLength = 0; - } - else - { + } + else + { // 11G - - // 11b rates into the Operational Rate Set. - OperationalRatesLength = DefaultSupportedRates11b.supportedRateSet.numRates * + + // 11b rates into the Operational Rate Set. + OperationalRatesLength = DefaultSupportedRates11b.supportedRateSet.numRates * sizeof(*DefaultSupportedRates11b.supportedRateSet.rate); - palCopyMemory( pMac->hHdd, OperationalRates, - DefaultSupportedRates11b.supportedRateSet.rate, - OperationalRatesLength ); - + vos_mem_copy(OperationalRates, + DefaultSupportedRates11b.supportedRateSet.rate, + OperationalRatesLength); + // 11a rates go in the Extended rate set. - ExtendedOperationalRatesLength = DefaultSupportedRates11a.supportedRateSet.numRates * + ExtendedOperationalRatesLength = DefaultSupportedRates11a.supportedRateSet.numRates * sizeof(*DefaultSupportedRates11a.supportedRateSet.rate); - palCopyMemory( pMac->hHdd, ExtendedOperationalRates, - DefaultSupportedRates11a.supportedRateSet.rate, - ExtendedOperationalRatesLength ); - + vos_mem_copy(ExtendedOperationalRates, + DefaultSupportedRates11a.supportedRateSet.rate, + ExtendedOperationalRatesLength); + // populate proprietary rates if user allows them - if ( pMac->roam.configParam.ProprietaryRatesEnabled ) + if ( pMac->roam.configParam.ProprietaryRatesEnabled ) { ProprietaryOperationalRatesLength = DefaultSupportedPropRates.numPropRates * - sizeof(*DefaultSupportedPropRates.propRate); - palCopyMemory( pMac->hHdd, ProprietaryOperationalRates, - DefaultSupportedPropRates.propRate, - ProprietaryOperationalRatesLength ); - } - else - { + sizeof(*DefaultSupportedPropRates.propRate); + vos_mem_copy(ProprietaryOperationalRates, + DefaultSupportedPropRates.propRate, + ProprietaryOperationalRatesLength); + } + else + { // No proprietary modes - ProprietaryOperationalRatesLength = 0; - } - } + ProprietaryOperationalRatesLength = 0; + } + } // set this to 1 if prop. rates need to be advertised in to the IBSS beacon and user wants to use them - if ( ProprietaryOperationalRatesLength && pMac->roam.configParam.ProprietaryRatesEnabled ) + if ( ProprietaryOperationalRatesLength && pMac->roam.configParam.ProprietaryRatesEnabled ) { - PropRatesEnable = 1; + PropRatesEnable = 1; } - else + else { - PropRatesEnable = 0; + PropRatesEnable = 0; } - + // Set the operational rate set CFG variables... - ccmCfgSetStr(pMac, WNI_CFG_OPERATIONAL_RATE_SET, OperationalRates, + ccmCfgSetStr(pMac, WNI_CFG_OPERATIONAL_RATE_SET, OperationalRates, OperationalRatesLength, NULL, eANI_BOOLEAN_FALSE); - ccmCfgSetStr(pMac, WNI_CFG_EXTENDED_OPERATIONAL_RATE_SET, ExtendedOperationalRates, + ccmCfgSetStr(pMac, WNI_CFG_EXTENDED_OPERATIONAL_RATE_SET, ExtendedOperationalRates, ExtendedOperationalRatesLength, NULL, eANI_BOOLEAN_FALSE); - ccmCfgSetStr(pMac, WNI_CFG_PROPRIETARY_OPERATIONAL_RATE_SET, - ProprietaryOperationalRates, + ccmCfgSetStr(pMac, WNI_CFG_PROPRIETARY_OPERATIONAL_RATE_SET, + ProprietaryOperationalRates, ProprietaryOperationalRatesLength, NULL, eANI_BOOLEAN_FALSE); ccmCfgSetInt(pMac, WNI_CFG_PROPRIETARY_ANI_FEATURES_ENABLED, PropRatesEnable, NULL, eANI_BOOLEAN_FALSE); } @@ -3692,8 +3779,8 @@ tANI_U32 csrRoamGetPhyModeFromDot11Mode(eCsrCfgDot11Mode dot11Mode, eCsrBand ban } return (WNI_CFG_PHY_MODE_11A); } - - + + #ifdef WLAN_FEATURE_11AC ePhyChanBondState csrGetHTCBStateFromVHTCBState(ePhyChanBondState aniCBMode) { @@ -3717,25 +3804,41 @@ ePhyChanBondState csrGetHTCBStateFromVHTCBState(ePhyChanBondState aniCBMode) //pIes may be NULL eHalStatus csrRoamSetBssConfigCfg(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamProfile *pProfile, tSirBssDescription *pBssDesc, tBssConfigParam *pBssConfig, - tDot11fBeaconIEs *pIes) + tDot11fBeaconIEs *pIes, tANI_BOOLEAN resetCountry) { eHalStatus status = eHAL_STATUS_SUCCESS; tANI_U32 cfgCb = WNI_CFG_CHANNEL_BONDING_MODE_DISABLE; tANI_U8 channel = 0; //Make sure we have the domain info for the BSS we try to connect to. //Do we need to worry about sequence for OSs that are not Windows?? - if(pBssDesc) + if (pBssDesc) { - if(csrLearnCountryInformation(pMac, pBssDesc, pIes, eANI_BOOLEAN_TRUE)) + if (csrLearnCountryInformation(pMac, pBssDesc, pIes, eANI_BOOLEAN_TRUE)) { //Make sure the 11d info from this BSSDesc can be applied pMac->scan.fAmbiguous11dInfoFound = eANI_BOOLEAN_FALSE; - csrApplyCountryInformation( pMac, TRUE ); + if (VOS_TRUE == resetCountry) + { + csrApplyCountryInformation(pMac, FALSE); + } + else + { + csrApplyCountryInformation(pMac, TRUE); + } } if ((csrIs11dSupported (pMac)) && pIes) { if (!pIes->Country.present) + { csrResetCountryInformation(pMac, eANI_BOOLEAN_FALSE, eANI_BOOLEAN_FALSE ); + } + else + { + //Let's also update the below to make sure we don't update CC while + //connected to an AP which is advertising some CC + vos_mem_copy(pMac->scan.currentCountryBssid, + pBssDesc->bssId, sizeof(tSirMacAddr)); + } } } //Qos @@ -3748,7 +3851,7 @@ eHalStatus csrRoamSetBssConfigCfg(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrR //ccmCfgSetInt(pMac, WNI_CFG_RTS_THRESHOLD, csrGetRTSThresh(pMac), NULL, eANI_BOOLEAN_FALSE); //ccmCfgSetInt(pMac, WNI_CFG_DOT11_MODE, csrTranslateToWNICfgDot11Mode(pMac, pBssConfig->uCfgDot11Mode), NULL, eANI_BOOLEAN_FALSE); - + //Auth type ccmCfgSetInt(pMac, WNI_CFG_AUTHENTICATION_TYPE, pBssConfig->authType, NULL, eANI_BOOLEAN_FALSE); //encryption type @@ -3796,7 +3899,7 @@ eHalStatus csrRoamSetBssConfigCfg(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrR if(!WDA_getFwWlanFeatCaps(DOT11AC)) { cfgCb = csrGetHTCBStateFromVHTCBState(cfgCb); } - else + else { ccmCfgSetInt(pMac, WNI_CFG_VHT_CHANNEL_WIDTH, pMac->roam.configParam.nVhtChannelWidth, NULL, eANI_BOOLEAN_FALSE); } @@ -3822,23 +3925,25 @@ eHalStatus csrRoamSetBssConfigCfg(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrR return (status); } -eHalStatus csrRoamStopNetwork( tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamProfile *pProfile, +eHalStatus csrRoamStopNetwork( tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamProfile *pProfile, tSirBssDescription *pBssDesc, tDot11fBeaconIEs *pIes) { eHalStatus status; tBssConfigParam *pBssConfig; tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, sessionId ); - + if(!pSession) { smsLog(pMac, LOGE, FL(" session %d not found "), sessionId); return eHAL_STATUS_FAILURE; } - - status = palAllocateMemory(pMac->hHdd, (void **)&pBssConfig, sizeof(tBssConfigParam)); - if(HAL_STATUS_SUCCESS(status)) + + pBssConfig = vos_mem_malloc(sizeof(tBssConfigParam)); + if ( NULL == pBssConfig ) + status = eHAL_STATUS_FAILURE; + else { - palZeroMemory(pMac->hHdd, pBssConfig, sizeof(tBssConfigParam)); + vos_mem_set(pBssConfig, sizeof(tBssConfigParam), 0); status = csrRoamPrepareBssConfig(pMac, pProfile, pBssDesc, pBssConfig, pIes); if(HAL_STATUS_SUCCESS(status)) { @@ -3854,23 +3959,24 @@ eHalStatus csrRoamStopNetwork( tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoam } // If we are in an IBSS, then stop the IBSS... ////Not worry about WDS connection for now - if ( csrIsConnStateIbss( pMac, sessionId ) ) + if ( csrIsConnStateIbss( pMac, sessionId ) ) { status = csrRoamIssueStopBss( pMac, sessionId, eCSR_ROAM_SUBSTATE_DISCONNECT_CONTINUE_ROAMING ); } - else + else { // if we are in an Infrastructure association.... - if ( csrIsConnStateInfra( pMac, sessionId ) ) + if ( csrIsConnStateInfra( pMac, sessionId ) ) { // and the new Bss is an Ibss OR we are roaming from Infra to Infra - // across SSIDs (roaming to a new SSID)... // + // across SSIDs (roaming to a new SSID)... // //Not worry about WDS connection for now if ( pBssDesc && ( ( csrIsIbssBssDesc( pBssDesc ) ) || !csrIsSsidEqual( pMac, pSession->pConnectBssDesc, pBssDesc, pIes ) ) ) { // then we need to disassociate from the Infrastructure network... - status = csrRoamIssueDisassociate( pMac, sessionId, eCSR_ROAM_SUBSTATE_DISCONNECT_CONTINUE_ROAMING, FALSE ); + status = csrRoamIssueDisassociate( pMac, sessionId, + eCSR_ROAM_SUBSTATE_DISCONNECT_CONTINUE_ROAMING, FALSE ); } else { @@ -3879,7 +3985,9 @@ eHalStatus csrRoamStopNetwork( tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoam if ( pBssDesc ) { // Set parameters for this Bss. - status = csrRoamSetBssConfigCfg(pMac, sessionId, pProfile, pBssDesc, pBssConfig, pIes); + status = csrRoamSetBssConfigCfg(pMac, sessionId, pProfile, + pBssDesc, pBssConfig, + pIes, eANI_BOOLEAN_FALSE); } } } @@ -3891,19 +3999,22 @@ eHalStatus csrRoamStopNetwork( tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoam || CSR_IS_INFRA_AP(pProfile) ) { + tANI_BOOLEAN is11rRoamingFlag = eANI_BOOLEAN_FALSE; + is11rRoamingFlag = csrRoamIs11rAssoc(pMac); // Set parameters for this Bss. - status = csrRoamSetBssConfigCfg(pMac, sessionId, pProfile, pBssDesc, pBssConfig, pIes); + status = csrRoamSetBssConfigCfg(pMac, sessionId, pProfile, + pBssDesc, pBssConfig, + pIes, is11rRoamingFlag); } } } }//Success getting BSS config info - palFreeMemory(pMac->hHdd, pBssConfig); + vos_mem_free(pBssConfig); }//Allocate memory - return (status); } -eCsrJoinState csrRoamJoin( tpAniSirGlobal pMac, tANI_U32 sessionId, +eCsrJoinState csrRoamJoin( tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrScanResultInfo *pScanResult, tCsrRoamProfile *pProfile ) { eCsrJoinState eRoamState = eCsrContinueRoaming; @@ -3917,7 +4028,7 @@ eCsrJoinState csrRoamJoin( tpAniSirGlobal pMac, tANI_U32 sessionId, smsLog(pMac, LOGE, FL(" session %d not found "), sessionId); return (eCsrStopRoaming); } - + if( CSR_IS_WDS_STA( pProfile ) ) { status = csrRoamStartWds( pMac, sessionId, pProfile, pBssDesc ); @@ -3933,24 +4044,24 @@ eCsrJoinState csrRoamJoin( tpAniSirGlobal pMac, tANI_U32 sessionId, smsLog(pMac, LOGE, FL(" fail to parse IEs")); return (eCsrStopRoaming); } - if ( csrIsInfraBssDesc( pBssDesc ) ) + if ( csrIsInfraBssDesc( pBssDesc ) ) { // If we are connected in infrastructure mode and the Join Bss description is for the same BssID, then we are // attempting to join the AP we are already connected with. In that case, see if the Bss or Sta capabilities // have changed and handle the changes (without disturbing the current association). - - if ( csrIsConnStateConnectedInfra(pMac, sessionId) && + + if ( csrIsConnStateConnectedInfra(pMac, sessionId) && csrIsBssIdEqual( pMac, pBssDesc, pSession->pConnectBssDesc ) && csrIsSsidEqual( pMac, pSession->pConnectBssDesc, pBssDesc, pIesLocal ) - ) - { + ) + { // Check to see if the Auth type has changed in the Profile. If so, we don't want to Reassociate - // with Authenticating first. To force this, stop the current association (Disassociate) and - // then re 'Join' the AP, wihch will force an Authentication (with the new Auth type) followed by + // with Authenticating first. To force this, stop the current association (Disassociate) and + // then re 'Join' the AP, wihch will force an Authentication (with the new Auth type) followed by // a new Association. if(csrIsSameProfile(pMac, &pSession->connectedProfile, pProfile)) { - smsLog(pMac, LOGW, FL(" detect same profile authType = %d encryType = %d"), pProfile->AuthType, pProfile->EncryptionType); + smsLog(pMac, LOGW, FL(" detect same profile")); if(csrRoamIsSameProfileKeys(pMac, &pSession->connectedProfile, pProfile)) { eRoamState = eCsrReassocToSelfNoCapChange; @@ -3959,14 +4070,16 @@ eCsrJoinState csrRoamJoin( tpAniSirGlobal pMac, tANI_U32 sessionId, { tBssConfigParam bssConfig; //The key changes - palZeroMemory(pMac->hHdd, &bssConfig, sizeof(bssConfig)); + vos_mem_set(&bssConfig, sizeof(bssConfig), 0); status = csrRoamPrepareBssConfig(pMac, pProfile, pBssDesc, &bssConfig, pIesLocal); if(HAL_STATUS_SUCCESS(status)) { pSession->bssParams.uCfgDot11Mode = bssConfig.uCfgDot11Mode; pSession->bssParams.cbMode = bssConfig.cbMode; //Reapply the config including Keys so reassoc is happening. - status = csrRoamSetBssConfigCfg(pMac, sessionId, pProfile, pBssDesc, &bssConfig, pIesLocal); + status = csrRoamSetBssConfigCfg(pMac, sessionId, pProfile, + pBssDesc, &bssConfig, + pIesLocal, eANI_BOOLEAN_FALSE); if(!HAL_STATUS_SUCCESS(status)) { eRoamState = eCsrStopRoaming; @@ -4011,18 +4124,18 @@ eCsrJoinState csrRoamJoin( tpAniSirGlobal pMac, tANI_U32 sessionId, } if( pIesLocal && !pScanResult->pvIes ) { - palFreeMemory(pMac->hHdd, pIesLocal); + vos_mem_free(pIesLocal); } } return( eRoamState ); } -eHalStatus csrRoamShouldRoam(tpAniSirGlobal pMac, tANI_U32 sessionId, +eHalStatus csrRoamShouldRoam(tpAniSirGlobal pMac, tANI_U32 sessionId, tSirBssDescription *pBssDesc, tANI_U32 roamId) { eHalStatus status = eHAL_STATUS_SUCCESS; tCsrRoamInfo roamInfo; - palZeroMemory(pMac->hHdd, &roamInfo, sizeof(tCsrRoamInfo)); + vos_mem_set(&roamInfo, sizeof(tCsrRoamInfo), 0); roamInfo.pBssDesc = pBssDesc; status = csrRoamCallCallback(pMac, sessionId, &roamInfo, roamId, eCSR_ROAM_SHOULD_ROAM, eCSR_ROAM_RESULT_NONE); return (status); @@ -4050,10 +4163,10 @@ static void csrRoamAssignDefaultParam( tpAniSirGlobal pMac, tSmeCmd *pCommand ) pCommand->u.roamCmd.roamProfile.negotiatedAuthType = eCSR_AUTH_TYPE_AUTOSWITCH; break; } - pCommand->u.roamCmd.roamProfile.negotiatedUCEncryptionType = - pCommand->u.roamCmd.roamProfile.EncryptionType.encryptionType[0]; + pCommand->u.roamCmd.roamProfile.negotiatedUCEncryptionType = + pCommand->u.roamCmd.roamProfile.EncryptionType.encryptionType[0]; //In this case, the multicast encryption needs to follow the uncast ones. - pCommand->u.roamCmd.roamProfile.negotiatedMCEncryptionType = + pCommand->u.roamCmd.roamProfile.negotiatedMCEncryptionType = pCommand->u.roamCmd.roamProfile.EncryptionType.encryptionType[0]; } @@ -4088,24 +4201,24 @@ static eCsrJoinState csrRoamJoinNextBss( tpAniSirGlobal pMac, tSmeCmd *pCommand, tCsrRoamInfo roamInfo, *pRoamInfo = NULL; #ifndef WLAN_MDM_CODE_REDUCTION_OPT v_U8_t acm_mask = 0; -#endif +#endif tANI_U32 sessionId = pCommand->sessionId; tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, sessionId ); tCsrRoamProfile *pProfile = &pCommand->u.roamCmd.roamProfile; tANI_U8 concurrentChannel = 0; - + if(!pSession) { smsLog(pMac, LOGE, FL(" session %d not found "), sessionId); return (eCsrStopRoaming); } - - do + + do { // Check for Cardbus eject condition, before trying to Roam to any BSS //***if( !balIsCardPresent(pAdapter) ) break; - - palZeroMemory(pMac->hHdd, &roamInfo, sizeof(roamInfo)); + + vos_mem_set(&roamInfo, sizeof(roamInfo), 0); memcpy (&roamInfo.bssid, &pSession->joinFailStatusCode.bssId, sizeof(tSirMacAddr)); if(NULL != pBSSList) { @@ -4131,7 +4244,7 @@ static eCsrJoinState csrRoamJoinNextBss( tpAniSirGlobal pMac, tSmeCmd *pCommand, else { //We need to indicate to HDD that we are done with this one. - //palZeroMemory(pMac->hHdd, &roamInfo, sizeof(tCsrRoamInfo)); + //vos_mem_set(&roamInfo, sizeof(tCsrRoamInfo), 0); roamInfo.pBssDesc = pCommand->u.roamCmd.pLastRoamBss; //this shall not be NULL roamInfo.statusCode = pSession->joinFailStatusCode.statusCode; roamInfo.reasonCode = pSession->joinFailStatusCode.reasonCode; @@ -4143,30 +4256,30 @@ static eCsrJoinState csrRoamJoinNextBss( tpAniSirGlobal pMac, tSmeCmd *pCommand, pScanResult = GET_BASE_ADDR(pCommand->u.roamCmd.pRoamBssEntry, tCsrScanResult, Link); /*If concurrency enabled take the concurrent connected channel first. */ /* Valid multichannel concurrent sessions exempted */ - if (vos_concurrent_sessions_running() && + if (vos_concurrent_sessions_running() && !csrIsValidMcConcurrentSession(pMac, sessionId, &pScanResult->Result.BssDescriptor)) { - concurrentChannel = + concurrentChannel = csrGetConcurrentOperationChannel(pMac); VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO_HIGH, "%s: " " csr Concurrent Channel = %d", __func__, concurrentChannel); - if ((concurrentChannel) && - (concurrentChannel == + if ((concurrentChannel) && + (concurrentChannel == pScanResult->Result.BssDescriptor.channelId)) { - //make this 0 because we do not want the - //below check to pass as we don't want to + //make this 0 because we do not want the + //below check to pass as we don't want to //connect on other channel VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, FL("Concurrent channel match =%d"), concurrentChannel); - concurrentChannel = 0; + concurrentChannel = 0; } } if (!concurrentChannel) { - + if(HAL_STATUS_SUCCESS(csrRoamShouldRoam(pMac, sessionId, &pScanResult->Result.BssDescriptor, pCommand->u.roamCmd.roamId))) @@ -4219,7 +4332,7 @@ static eCsrJoinState csrRoamJoinNextBss( tpAniSirGlobal pMac, tSmeCmd *pCommand, csrSetAbortRoamingCommand(pMac, pCommand); break; } - palZeroMemory(pMac->hHdd, &roamInfo, sizeof(roamInfo)); + vos_mem_set(&roamInfo, sizeof(roamInfo), 0); if(pScanResult) { tDot11fBeaconIEs *pIesLocal = (tDot11fBeaconIEs *)pScanResult->Result.pvIes; @@ -4238,7 +4351,7 @@ static eCsrJoinState csrRoamJoinNextBss( tpAniSirGlobal pMac, tSmeCmd *pCommand, CSR_IS_UAPSD_BSS(pIesLocal) ) { #ifndef WLAN_MDM_CODE_REDUCTION_OPT - acm_mask = sme_QosGetACMMask(pMac, &pScanResult->Result.BssDescriptor, + acm_mask = sme_QosGetACMMask(pMac, &pScanResult->Result.BssDescriptor, pIesLocal); pCommand->u.roamCmd.roamProfile.uapsd_mask &= ~(acm_mask); #endif /* WLAN_MDM_CODE_REDUCTION_OPT*/ @@ -4249,7 +4362,7 @@ static eCsrJoinState csrRoamJoinNextBss( tpAniSirGlobal pMac, tSmeCmd *pCommand, } if( pIesLocal && !pScanResult->Result.pvIes) { - palFreeMemory(pMac->hHdd, pIesLocal); + vos_mem_free(pIesLocal); } } else @@ -4258,13 +4371,13 @@ static eCsrJoinState csrRoamJoinNextBss( tpAniSirGlobal pMac, tSmeCmd *pCommand, } roamInfo.pProfile = pProfile; pSession->bRefAssocStartCnt++; - csrRoamCallCallback( pMac, sessionId, &roamInfo, pCommand->u.roamCmd.roamId, + csrRoamCallCallback( pMac, sessionId, &roamInfo, pCommand->u.roamCmd.roamId, eCSR_ROAM_ASSOCIATION_START, eCSR_ROAM_RESULT_NONE ); } - if ( NULL == pCommand->u.roamCmd.pRoamBssEntry ) + if ( NULL == pCommand->u.roamCmd.pRoamBssEntry ) { // If this is a start IBSS profile, then we need to start the IBSS. - if ( CSR_IS_START_IBSS(pProfile) ) + if ( CSR_IS_START_IBSS(pProfile) ) { tANI_BOOLEAN fSameIbss = eANI_BOOLEAN_FALSE; // Attempt to start this IBSS... @@ -4272,7 +4385,7 @@ static eCsrJoinState csrRoamJoinNextBss( tpAniSirGlobal pMac, tSmeCmd *pCommand, status = csrRoamStartIbss( pMac, sessionId, pProfile, &fSameIbss ); if(HAL_STATUS_SUCCESS(status)) { - if ( fSameIbss ) + if ( fSameIbss ) { eRoamState = eCsrStartIbssSameIbss; } @@ -4300,21 +4413,21 @@ static eCsrJoinState csrRoamJoinNextBss( tpAniSirGlobal pMac, tSmeCmd *pCommand, { eRoamState = eCsrContinueRoaming; } - else + else { //it somehow fail need to stop eRoamState = eCsrStopRoaming; } } - else + else { //Nothing we can do smsLog(pMac, LOGW, FL("cannot continue without BSS list")); eRoamState = eCsrStopRoaming; break; } - } - else //We have BSS + } + else //We have BSS { //Need to assign these value because they are used in csrIsSameProfile pScanResult = GET_BASE_ADDR(pCommand->u.roamCmd.pRoamBssEntry, tCsrScanResult, Link); @@ -4327,7 +4440,7 @@ static eCsrJoinState csrRoamJoinNextBss( tpAniSirGlobal pMac, tSmeCmd *pCommand, { eRoamState = eCsrStartIbssSameIbss; break; - } + } } if( pCommand->u.roamCmd.fReassocToSelfNoCapChange ) { @@ -4340,7 +4453,7 @@ static eCsrJoinState csrRoamJoinNextBss( tpAniSirGlobal pMac, tSmeCmd *pCommand, eRoamState = csrRoamJoin( pMac, sessionId, &pScanResult->Result, pProfile ); break; } - + } while( 0 ); if( (eCsrStopRoaming == eRoamState) && (CSR_IS_INFRASTRUCTURE( pProfile )) ) { @@ -4350,8 +4463,8 @@ static eCsrJoinState csrRoamJoinNextBss( tpAniSirGlobal pMac, tSmeCmd *pCommand, pSession->bRefAssocStartCnt--; //Complete the last association attemp because a new one is about to be tried pRoamInfo = &roamInfo; - csrRoamCallCallback(pMac, sessionId, pRoamInfo, pCommand->u.roamCmd.roamId, - eCSR_ROAM_ASSOCIATION_COMPLETION, + csrRoamCallCallback(pMac, sessionId, pRoamInfo, pCommand->u.roamCmd.roamId, + eCSR_ROAM_ASSOCIATION_COMPLETION, eCSR_ROAM_RESULT_NOT_ASSOCIATED); } } @@ -4364,7 +4477,7 @@ static eHalStatus csrRoam( tpAniSirGlobal pMac, tSmeCmd *pCommand ) eHalStatus status = eHAL_STATUS_SUCCESS; eCsrJoinState RoamState; tANI_U32 sessionId = pCommand->sessionId; - + //***if( hddIsRadioStateOn( pAdapter ) ) { // Attept to join a Bss... @@ -4375,7 +4488,7 @@ static eHalStatus csrRoam( tpAniSirGlobal pMac, tSmeCmd *pCommand ) { tANI_BOOLEAN fComplete = eANI_BOOLEAN_FALSE; // and if connected in Infrastructure mode... - if ( csrIsConnStateInfra(pMac, sessionId) ) + if ( csrIsConnStateInfra(pMac, sessionId) ) { //... then we need to issue a disassociation status = csrRoamIssueDisassociate( pMac, sessionId, eCSR_ROAM_SUBSTATE_DISASSOC_NOTHING_TO_JOIN, FALSE ); @@ -4407,7 +4520,7 @@ static eHalStatus csrRoam( tpAniSirGlobal pMac, tSmeCmd *pCommand ) } } else - { + { fComplete = eANI_BOOLEAN_TRUE; } if(fComplete) @@ -4421,7 +4534,7 @@ static eHalStatus csrRoam( tpAniSirGlobal pMac, tSmeCmd *pCommand ) { csrRoamComplete( pMac, eCsrNothingToJoin, NULL ); } - } + } } else if ( eCsrReassocToSelfNoCapChange == RoamState ) { @@ -4429,10 +4542,10 @@ static eHalStatus csrRoam( tpAniSirGlobal pMac, tSmeCmd *pCommand ) } else if ( eCsrStartIbssSameIbss == RoamState ) { - csrRoamComplete( pMac, eCsrSilentlyStopRoaming, NULL ); + csrRoamComplete( pMac, eCsrSilentlyStopRoaming, NULL ); } }//hddIsRadioStateOn - + return status; } eHalStatus csrProcessFTReassocRoamCommand ( tpAniSirGlobal pMac, tSmeCmd *pCommand ) @@ -4450,12 +4563,12 @@ eHalStatus csrProcessFTReassocRoamCommand ( tpAniSirGlobal pMac, tSmeCmd *pComma smsLog(pMac, LOGE, FL(" session %d not found "), sessionId); return eHAL_STATUS_FAILURE; } - + if(CSR_IS_ROAMING(pSession) && pSession->fCancelRoaming) { //the roaming is cancelled. Simply complete the command smsLog(pMac, LOG1, FL(" Roam command cancelled")); - csrRoamComplete(pMac, eCsrNothingToJoin, NULL); + csrRoamComplete(pMac, eCsrNothingToJoin, NULL); return eHAL_STATUS_FAILURE; } if (pCommand->u.roamCmd.pRoamBssEntry) @@ -4467,10 +4580,10 @@ eHalStatus csrProcessFTReassocRoamCommand ( tpAniSirGlobal pMac, tSmeCmd *pComma { //the roaming is cancelled. Simply complete the command smsLog(pMac, LOG1, FL(" Roam command cancelled")); - csrRoamComplete(pMac, eCsrNothingToJoin, NULL); + csrRoamComplete(pMac, eCsrNothingToJoin, NULL); return eHAL_STATUS_FAILURE; } - status = csrRoamIssueReassociate(pMac, sessionId, pBssDesc, + status = csrRoamIssueReassociate(pMac, sessionId, pBssDesc, (tDot11fBeaconIEs *)( pScanResult->Result.pvIes ), &pCommand->u.roamCmd.roamProfile); return status; } @@ -4487,7 +4600,7 @@ eHalStatus csrRoamProcessCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand ) smsLog(pMac, LOGE, FL(" session %d not found "), sessionId); return eHAL_STATUS_FAILURE; } - + switch ( pCommand->u.roamCmd.roamReason ) { case eCsrForcedDisassoc: @@ -4537,9 +4650,9 @@ eHalStatus csrRoamProcessCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand ) roamInfo.pBssDesc = pSession->pConnectBssDesc; roamInfo.pProfile = &pCommand->u.roamCmd.roamProfile; pSession->bRefAssocStartCnt++; - csrRoamCallCallback( pMac, sessionId, &roamInfo, pCommand->u.roamCmd.roamId, + csrRoamCallCallback( pMac, sessionId, &roamInfo, pCommand->u.roamCmd.roamId, eCSR_ROAM_ASSOCIATION_START, eCSR_ROAM_RESULT_NONE ); - + smsLog(pMac, LOG1, FL(" calling csrRoamIssueReassociate")); status = csrRoamIssueReassociate( pMac, sessionId, pSession->pConnectBssDesc, pIes, &pCommand->u.roamCmd.roamProfile ); @@ -4549,7 +4662,7 @@ eHalStatus csrRoamProcessCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand ) csrReleaseCommandRoam( pMac, pCommand ); } - palFreeMemory(pMac->hHdd, pIes); + vos_mem_free(pIes); pIes = NULL; } } @@ -4558,10 +4671,10 @@ eHalStatus csrRoamProcessCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand ) case eCsrCapsChange: smsLog(pMac, LOGE, FL("received eCsrCapsChange ")); csrRoamStateChange( pMac, eCSR_ROAMING_STATE_JOINING, sessionId ); - status = csrRoamIssueDisassociate( pMac, sessionId, eCSR_ROAM_SUBSTATE_DISCONNECT_CONTINUE_ROAMING, FALSE); + status = csrRoamIssueDisassociate( pMac, sessionId, eCSR_ROAM_SUBSTATE_DISCONNECT_CONTINUE_ROAMING, FALSE); break; case eCsrSmeIssuedFTReassoc: - smsLog(pMac, LOGE, FL("received FT Reassoc Req ")); + smsLog(pMac, LOG1, FL("received FT Reassoc Req ")); status = csrProcessFTReassocRoamCommand(pMac, pCommand); break; @@ -4573,20 +4686,20 @@ eHalStatus csrRoamProcessCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand ) case eCsrForcedDisassocSta: csrRoamStateChange( pMac, eCSR_ROAMING_STATE_JOINING, sessionId); csrRoamSubstateChange( pMac, eCSR_ROAM_SUBSTATE_DISASSOC_REQ, sessionId); - status = csrSendMBDisassocReqMsg( pMac, sessionId, pCommand->u.roamCmd.peerMac, + status = csrSendMBDisassocReqMsg( pMac, sessionId, pCommand->u.roamCmd.peerMac, pCommand->u.roamCmd.reason); break; case eCsrForcedDeauthSta: csrRoamStateChange( pMac, eCSR_ROAMING_STATE_JOINING, sessionId); csrRoamSubstateChange( pMac, eCSR_ROAM_SUBSTATE_DEAUTH_REQ, sessionId); - status = csrSendMBDeauthReqMsg( pMac, sessionId, pCommand->u.roamCmd.peerMac, + status = csrSendMBDeauthReqMsg( pMac, sessionId, pCommand->u.roamCmd.peerMac, pCommand->u.roamCmd.reason); break; case eCsrPerformPreauth: smsLog(pMac, LOG1, FL("Attempting FT PreAuth Req")); - status = csrRoamIssueFTPreauthReq(pMac, sessionId, + status = csrRoamIssueFTPreauthReq(pMac, sessionId, pCommand->u.roamCmd.pLastRoamBss); break; @@ -4595,18 +4708,19 @@ eHalStatus csrRoamProcessCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand ) if( pCommand->u.roamCmd.fUpdateCurRoamProfile ) { - //Remember the roaming profile + //Remember the roaming profile csrFreeRoamProfile(pMac, sessionId); - if(HAL_STATUS_SUCCESS(palAllocateMemory(pMac->hHdd, (void **)&pSession->pCurRoamProfile, sizeof(tCsrRoamProfile)))) + pSession->pCurRoamProfile = vos_mem_malloc(sizeof(tCsrRoamProfile)); + if ( NULL != pSession->pCurRoamProfile ) { - palZeroMemory(pMac->hHdd, pSession->pCurRoamProfile, sizeof(tCsrRoamProfile)); + vos_mem_set(pSession->pCurRoamProfile, sizeof(tCsrRoamProfile), 0); csrRoamCopyProfile(pMac, pSession->pCurRoamProfile, &pCommand->u.roamCmd.roamProfile); } } - + //At this point, original uapsd_mask is saved in pCurRoamProfile //uapsd_mask in the pCommand may change from this point on. - + // Attempt to roam with the new scan results (if we need to..) status = csrRoam( pMac, pCommand ); if(!HAL_STATUS_SUCCESS(status)) @@ -4618,15 +4732,15 @@ eHalStatus csrRoamProcessCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand ) return (status); } -void csrReinitPreauthCmd(tpAniSirGlobal pMac, tSmeCmd *pCommand) +void csrReinitPreauthCmd(tpAniSirGlobal pMac, tSmeCmd *pCommand) { pCommand->u.roamCmd.pLastRoamBss = NULL; pCommand->u.roamCmd.pRoamBssEntry = NULL; //Because u.roamCmd is union and share with scanCmd and StatusChange - palZeroMemory(pMac->hHdd, &pCommand->u.roamCmd, sizeof(tRoamCmd)); + vos_mem_set(&pCommand->u.roamCmd, sizeof(tRoamCmd), 0); } -void csrReinitRoamCmd(tpAniSirGlobal pMac, tSmeCmd *pCommand) +void csrReinitRoamCmd(tpAniSirGlobal pMac, tSmeCmd *pCommand) { if(pCommand->u.roamCmd.fReleaseBssList) { @@ -4641,12 +4755,12 @@ void csrReinitRoamCmd(tpAniSirGlobal pMac, tSmeCmd *pCommand) } pCommand->u.roamCmd.pRoamBssEntry = NULL; //Because u.roamCmd is union and share with scanCmd and StatusChange - palZeroMemory(pMac->hHdd, &pCommand->u.roamCmd, sizeof(tRoamCmd)); + vos_mem_set(&pCommand->u.roamCmd, sizeof(tRoamCmd), 0); } void csrReinitWmStatusChangeCmd(tpAniSirGlobal pMac, tSmeCmd *pCommand) { - palZeroMemory(pMac->hHdd, &pCommand->u.wmStatusChangeCmd, sizeof(tWmStatusChangeCmd)); + vos_mem_set(&pCommand->u.wmStatusChangeCmd, sizeof(tWmStatusChangeCmd), 0); } void csrRoamComplete( tpAniSirGlobal pMac, eCsrRoamCompleteResult Result, void *Context ) { @@ -4662,7 +4776,7 @@ void csrRoamComplete( tpAniSirGlobal pMac, eCsrRoamCompleteResult Result, void * // and put this on the Free queue. if ( eSmeCommandRoam == pCommand->command ) { - //we need to process the result first before removing it from active list because state changes + //we need to process the result first before removing it from active list because state changes //still happening insides roamQProcessRoamResults so no other roam command should be issued fReleaseCommand = csrRoamProcessResults( pMac, pCommand, Result, Context ); if( fReleaseCommand ) @@ -4706,7 +4820,8 @@ void csrResetPMKIDCandidateList( tpAniSirGlobal pMac, tANI_U32 sessionId ) smsLog(pMac, LOGE, FL(" session %d not found "), sessionId); return; } - palZeroMemory( pMac->hHdd, &(pSession->PmkidCandidateInfo[0]), sizeof(tPmkidCandidateInfo) * CSR_MAX_PMKID_ALLOWED ); + vos_mem_set(&(pSession->PmkidCandidateInfo[0]), + sizeof(tPmkidCandidateInfo) * CSR_MAX_PMKID_ALLOWED, 0); pSession->NumPmkidCandidate = 0; } #ifdef FEATURE_WLAN_WAPI @@ -4718,13 +4833,14 @@ void csrResetBKIDCandidateList( tpAniSirGlobal pMac, tANI_U32 sessionId ) smsLog(pMac, LOGE, FL(" session %d not found "), sessionId); return; } - palZeroMemory( pMac->hHdd, &(pSession->BkidCandidateInfo[0]), sizeof(tBkidCandidateInfo) * CSR_MAX_BKID_ALLOWED ); + vos_mem_set(&(pSession->BkidCandidateInfo[0]), + sizeof(tBkidCandidateInfo) * CSR_MAX_BKID_ALLOWED, 0); pSession->NumBkidCandidate = 0; } #endif /* FEATURE_WLAN_WAPI */ extern tANI_U8 csrWpaOui[][ CSR_WPA_OUI_SIZE ]; -static eHalStatus csrRoamSaveSecurityRspIE(tpAniSirGlobal pMac, tANI_U32 sessionId, eCsrAuthType authType, +static eHalStatus csrRoamSaveSecurityRspIE(tpAniSirGlobal pMac, tANI_U32 sessionId, eCsrAuthType authType, tSirBssDescription *pSirBssDesc, tDot11fBeaconIEs *pIes) { @@ -4737,7 +4853,7 @@ static eHalStatus csrRoamSaveSecurityRspIE(tpAniSirGlobal pMac, tANI_U32 session smsLog(pMac, LOGE, FL(" session %d not found "), sessionId); return eHAL_STATUS_FAILURE; } - + if((eCSR_AUTH_TYPE_WPA == authType) || (eCSR_AUTH_TYPE_WPA_PSK == authType) || (eCSR_AUTH_TYPE_RSN == authType) || @@ -4747,7 +4863,7 @@ static eHalStatus csrRoamSaveSecurityRspIE(tpAniSirGlobal pMac, tANI_U32 session (eCSR_AUTH_TYPE_FT_RSN == authType) || (eCSR_AUTH_TYPE_FT_RSN_PSK == authType) #endif /* FEATURE_WLAN_WAPI */ -#ifdef FEATURE_WLAN_WAPI +#ifdef FEATURE_WLAN_WAPI || (eCSR_AUTH_TYPE_WAPI_WAI_PSK == authType) || (eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE == authType) @@ -4789,40 +4905,48 @@ static eHalStatus csrRoamSaveSecurityRspIE(tpAniSirGlobal pMac, tANI_U32 session nIeLen += 2 + pIesLocal->RSN.pmkid_count * 4; //pmkid } //nIeLen doesn't count EID and length fields - if(HAL_STATUS_SUCCESS((status = palAllocateMemory(pMac->hHdd, (void **)&pSession->pWpaRsnRspIE, nIeLen + 2)))) + pSession->pWpaRsnRspIE = vos_mem_malloc(nIeLen + 2); + if (NULL == pSession->pWpaRsnRspIE) + status = eHAL_STATUS_FAILURE; + else { - palZeroMemory(pMac->hHdd, pSession->pWpaRsnRspIE, nIeLen + 2); + vos_mem_set(pSession->pWpaRsnRspIE, nIeLen + 2, 0); pSession->pWpaRsnRspIE[0] = DOT11F_EID_RSN; pSession->pWpaRsnRspIE[1] = (tANI_U8)nIeLen; //copy upto akm_suites pIeBuf = pSession->pWpaRsnRspIE + 2; - palCopyMemory(pMac->hHdd, pIeBuf, &pIesLocal->RSN.version, sizeof(pIesLocal->RSN.version)); + vos_mem_copy(pIeBuf, &pIesLocal->RSN.version, + sizeof(pIesLocal->RSN.version)); pIeBuf += sizeof(pIesLocal->RSN.version); - palCopyMemory(pMac->hHdd, pIeBuf, &pIesLocal->RSN.gp_cipher_suite, sizeof(pIesLocal->RSN.gp_cipher_suite)); + vos_mem_copy(pIeBuf, &pIesLocal->RSN.gp_cipher_suite, + sizeof(pIesLocal->RSN.gp_cipher_suite)); pIeBuf += sizeof(pIesLocal->RSN.gp_cipher_suite); - palCopyMemory(pMac->hHdd, pIeBuf, &pIesLocal->RSN.pwise_cipher_suite_count, sizeof(pIesLocal->RSN.pwise_cipher_suite_count)); + vos_mem_copy(pIeBuf, &pIesLocal->RSN.pwise_cipher_suite_count, + sizeof(pIesLocal->RSN.pwise_cipher_suite_count)); pIeBuf += sizeof(pIesLocal->RSN.pwise_cipher_suite_count ); if( pIesLocal->RSN.pwise_cipher_suite_count ) { //copy pwise_cipher_suites - palCopyMemory(pMac->hHdd, pIeBuf, pIesLocal->RSN.pwise_cipher_suites, - pIesLocal->RSN.pwise_cipher_suite_count * 4); + vos_mem_copy(pIeBuf, + pIesLocal->RSN.pwise_cipher_suites, + pIesLocal->RSN.pwise_cipher_suite_count * 4); pIeBuf += pIesLocal->RSN.pwise_cipher_suite_count * 4; } - palCopyMemory(pMac->hHdd, pIeBuf, &pIesLocal->RSN.akm_suite_count, 2); + vos_mem_copy(pIeBuf, &pIesLocal->RSN.akm_suite_count, 2); pIeBuf += 2; if( pIesLocal->RSN.akm_suite_count ) { //copy akm_suites - palCopyMemory(pMac->hHdd, pIeBuf, pIesLocal->RSN.akm_suites, - pIesLocal->RSN.akm_suite_count * 4); + vos_mem_copy(pIeBuf, + pIesLocal->RSN.akm_suites, + pIesLocal->RSN.akm_suite_count * 4); pIeBuf += pIesLocal->RSN.akm_suite_count * 4; } //copy the rest - palCopyMemory(pMac->hHdd, pIeBuf, pIesLocal->RSN.akm_suites + - pIesLocal->RSN.akm_suite_count * 4, - 2 + pIesLocal->RSN.pmkid_count * 4); - pSession->nWpaRsnRspIeLength = nIeLen + 2; + vos_mem_copy(pIeBuf, + pIesLocal->RSN.akm_suites + pIesLocal->RSN.akm_suite_count * 4, + 2 + pIesLocal->RSN.pmkid_count * 4); + pSession->nWpaRsnRspIeLength = nIeLen + 2; } } } @@ -4841,21 +4965,25 @@ static eHalStatus csrRoamSaveSecurityRspIE(tpAniSirGlobal pMac, tANI_U32 session // remove it. This is consistent with our assumptions in the // frames compiler; c.f. bug 15234: //nIeLen doesn't count EID and length fields - if(HAL_STATUS_SUCCESS((status = palAllocateMemory(pMac->hHdd, (void **)&pSession->pWpaRsnRspIE, nIeLen + 2)))) + + pSession->pWpaRsnRspIE = vos_mem_malloc(nIeLen + 2); + if ( NULL == pSession->pWpaRsnRspIE ) + status = eHAL_STATUS_FAILURE; + else { pSession->pWpaRsnRspIE[0] = DOT11F_EID_WPA; pSession->pWpaRsnRspIE[1] = (tANI_U8)nIeLen; pIeBuf = pSession->pWpaRsnRspIE + 2; //Copy WPA OUI - palCopyMemory(pMac->hHdd, pIeBuf, &csrWpaOui[1], 4); + vos_mem_copy(pIeBuf, &csrWpaOui[1], 4); pIeBuf += 4; - palCopyMemory(pMac->hHdd, pIeBuf, &pIesLocal->WPA.version, 8 + - pIesLocal->WPA.unicast_cipher_count * 4); + vos_mem_copy(pIeBuf, &pIesLocal->WPA.version, + 8 + pIesLocal->WPA.unicast_cipher_count * 4); pIeBuf += 8 + pIesLocal->WPA.unicast_cipher_count * 4; - palCopyMemory(pMac->hHdd, pIeBuf, &pIesLocal->WPA.auth_suite_count, 2 + - pIesLocal->WPA.auth_suite_count * 4); + vos_mem_copy(pIeBuf, &pIesLocal->WPA.auth_suite_count, + 2 + pIesLocal->WPA.auth_suite_count * 4); pIeBuf += pIesLocal->WPA.auth_suite_count * 4; - pSession->nWpaRsnRspIeLength = nIeLen + 2; + pSession->nWpaRsnRspIeLength = nIeLen + 2; } } } @@ -4866,7 +4994,7 @@ static eHalStatus csrRoamSaveSecurityRspIE(tpAniSirGlobal pMac, tANI_U32 session if(pIesLocal->WAPI.present) { //Calculate the actual length - nIeLen = 4 //version + akm_suite_count + nIeLen = 4 //version + akm_suite_count + pIesLocal->WAPI.akm_suite_count * 4 // akm_suites + 2 //pwise_cipher_suite_count + pIesLocal->WAPI.unicast_cipher_suite_count * 4 //pwise_cipher_suites @@ -4875,39 +5003,57 @@ static eHalStatus csrRoamSaveSecurityRspIE(tpAniSirGlobal pMac, tANI_U32 session { nIeLen += 2 + pIesLocal->WAPI.bkid_count * 4; //bkid } - + //nIeLen doesn't count EID and length fields - if(HAL_STATUS_SUCCESS((status = palAllocateMemory(pMac->hHdd, (void **)&pSession->pWapiRspIE, nIeLen + 2)))) + pSession->pWapiRspIE = vos_mem_malloc(nIeLen + 2); + if ( NULL == pSession->pWapiRspIE ) + status = eHAL_STATUS_FAILURE; + else { pSession->pWapiRspIE[0] = DOT11F_EID_WAPI; pSession->pWapiRspIE[1] = (tANI_U8)nIeLen; pIeBuf = pSession->pWapiRspIE + 2; //copy upto akm_suite_count - palCopyMemory(pMac->hHdd, pIeBuf, &pIesLocal->WAPI.version, 4); + vos_mem_copy(pIeBuf, &pIesLocal->WAPI.version, 2); pIeBuf += 4; if( pIesLocal->WAPI.akm_suite_count ) { //copy akm_suites - palCopyMemory(pMac->hHdd, pIeBuf, pIesLocal->WAPI.akm_suites, - pIesLocal->WAPI.akm_suite_count * 4); + vos_mem_copy(pIeBuf, pIesLocal->WAPI.akm_suites, + pIesLocal->WAPI.akm_suite_count * 4); pIeBuf += pIesLocal->WAPI.akm_suite_count * 4; - } - palCopyMemory(pMac->hHdd, pIeBuf, &pIesLocal->WAPI.unicast_cipher_suite_count, 2); + } + vos_mem_copy(pIeBuf, + &pIesLocal->WAPI.unicast_cipher_suite_count, + 2); pIeBuf += 2; if( pIesLocal->WAPI.unicast_cipher_suite_count ) { //copy pwise_cipher_suites - palCopyMemory(pMac->hHdd, pIeBuf, pIesLocal->WAPI.unicast_cipher_suites, - pIesLocal->WAPI.unicast_cipher_suite_count * 4); + vos_mem_copy( pIeBuf, + pIesLocal->WAPI.unicast_cipher_suites, + pIesLocal->WAPI.unicast_cipher_suite_count * 4); pIeBuf += pIesLocal->WAPI.unicast_cipher_suite_count * 4; } - //gp_cipher_suite + preauth + reserved + bkid_count - palCopyMemory(pMac->hHdd, pIeBuf, &pIesLocal->WAPI.multicast_cipher_suite, 8); - pIeBuf += 8; + //gp_cipher_suite + vos_mem_copy(pIeBuf, + pIesLocal->WAPI.multicast_cipher_suite, + 4); + pIeBuf += 4; + //preauth + reserved + vos_mem_copy(pIeBuf, + pIesLocal->WAPI.multicast_cipher_suite + 4, + 2); + pIeBuf += 2; + //bkid_count + vos_mem_copy(pIeBuf, &pIesLocal->WAPI.bkid_count, 2); + + pIeBuf += 2; if( pIesLocal->WAPI.bkid_count ) { //copy akm_suites - palCopyMemory(pMac->hHdd, pIeBuf, pIesLocal->WAPI.bkid, pIesLocal->WAPI.bkid_count * 4); + vos_mem_copy(pIeBuf, pIesLocal->WAPI.bkid, + pIesLocal->WAPI.bkid_count * 4); pIeBuf += pIesLocal->WAPI.bkid_count * 4; } pSession->nWapiRspIeLength = nIeLen + 2; @@ -4918,7 +5064,7 @@ static eHalStatus csrRoamSaveSecurityRspIE(tpAniSirGlobal pMac, tANI_U32 session if( !pIes ) { //locally allocated - palFreeMemory(pMac->hHdd, pIesLocal); + vos_mem_free(pIesLocal); } } } @@ -5023,9 +5169,37 @@ tANI_BOOLEAN csrRoamIsFastRoamEnabled(tpAniSirGlobal pMac, tANI_U32 sessionId) } } - return (pMac->roam.configParam.isFastRoamIniFeatureEnabled && +#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD + if (eANI_BOOLEAN_TRUE == CSR_IS_FASTROAM_IN_CONCURRENCY_INI_FEATURE_ENABLED(pMac)) + { + return (pMac->roam.configParam.isFastRoamIniFeatureEnabled); + } + else +#endif + { + return (pMac->roam.configParam.isFastRoamIniFeatureEnabled && (!csrIsConcurrentSessionRunning(pMac))); + } +} + +#ifdef FEATURE_WLAN_CCX +/* --------------------------------------------------------------------------- + \fn csrNeighborRoamIsCCXAssoc + + \brief This function returns whether the current association + is a CCX assoc or not + + \param pMac - The handle returned by macOpen. + + \return eANI_BOOLEAN_TRUE if current assoc is CCX, eANI_BOOLEAN_FALSE + otherwise +---------------------------------------------------------------------------*/ +tANI_BOOLEAN csrNeighborRoamIsCCXAssoc(tpAniSirGlobal pMac) +{ + return pMac->roam.neighborRoamInfo.isCCXAssoc; } +#endif /* FEATURE_WLAN_CCX */ + #ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD //Returns whether "FW based BG scan" is currently enabled...or not tANI_BOOLEAN csrRoamIsRoamOffloadScanEnabled(tpAniSirGlobal pMac) @@ -5035,12 +5209,19 @@ tANI_BOOLEAN csrRoamIsRoamOffloadScanEnabled(tpAniSirGlobal pMac) #endif #endif +#if defined(FEATURE_WLAN_CCX) +tANI_BOOLEAN csrRoamIsCcxIniFeatureEnabled(tpAniSirGlobal pMac) +{ + return pMac->roam.configParam.isCcxIniFeatureEnabled; +} +#endif /*FEATURE_WLAN_CCX*/ + //Return true means the command can be release, else not static tANI_BOOLEAN csrRoamProcessResults( tpAniSirGlobal pMac, tSmeCmd *pCommand, eCsrRoamCompleteResult Result, void *Context ) { tANI_BOOLEAN fReleaseCommand = eANI_BOOLEAN_TRUE; - tSirBssDescription *pSirBssDesc = NULL; + tSirBssDescription *pSirBssDesc = NULL; tSirMacAddr BroadcastMac = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; tCsrScanResult *pScanResult = NULL; tCsrRoamInfo roamInfo; @@ -5083,19 +5264,19 @@ static tANI_BOOLEAN csrRoamProcessResults( tpAniSirGlobal pMac, tSmeCmd *pComman // Success Join Response from LIM. Tell NDIS we are connected and save the // Connected state... smsLog(pMac, LOGW, FL("receives association indication")); - palZeroMemory(pMac->hHdd, &roamInfo, sizeof(roamInfo)); + vos_mem_set(&roamInfo, sizeof(roamInfo), 0); //always free the memory here if(pSession->pWpaRsnRspIE) { pSession->nWpaRsnRspIeLength = 0; - palFreeMemory(pMac->hHdd, pSession->pWpaRsnRspIE); + vos_mem_free(pSession->pWpaRsnRspIE); pSession->pWpaRsnRspIE = NULL; } #ifdef FEATURE_WLAN_WAPI if(pSession->pWapiRspIE) { pSession->nWapiRspIeLength = 0; - palFreeMemory(pMac->hHdd, pSession->pWapiRspIE); + vos_mem_free(pSession->pWapiRspIE); pSession->pWapiRspIE = NULL; } #endif /* FEATURE_WLAN_WAPI */ @@ -5124,12 +5305,13 @@ static tANI_BOOLEAN csrRoamProcessResults( tpAniSirGlobal pMac, tSmeCmd *pComman pSirBssDesc = pSession->pConnectBssDesc; if(pSirBssDesc) { - palCopyMemory(pMac->hHdd, &roamInfo.bssid, &pSirBssDesc->bssId, sizeof(tCsrBssid)); - } + vos_mem_copy(&roamInfo.bssid, &pSirBssDesc->bssId, + sizeof(tCsrBssid)); + } } else { - + if(pCommand->u.roamCmd.pRoamBssEntry) { pScanResult = GET_BASE_ADDR(pCommand->u.roamCmd.pRoamBssEntry, tCsrScanResult, Link); @@ -5138,7 +5320,8 @@ static tANI_BOOLEAN csrRoamProcessResults( tpAniSirGlobal pMac, tSmeCmd *pComman pSirBssDesc = &pScanResult->Result.BssDescriptor; //this can be NULL pIes = (tDot11fBeaconIEs *)( pScanResult->Result.pvIes ); - palCopyMemory(pMac->hHdd, &roamInfo.bssid, &pSirBssDesc->bssId, sizeof(tCsrBssid)); + vos_mem_copy(&roamInfo.bssid, &pSirBssDesc->bssId, + sizeof(tCsrBssid)); } } } @@ -5151,28 +5334,28 @@ static tANI_BOOLEAN csrRoamProcessResults( tpAniSirGlobal pMac, tSmeCmd *pComman #ifdef FEATURE_WLAN_CCX roamInfo.isCCXAssoc = pSession->connectedProfile.isCCXAssoc; #endif - + // csrRoamStateChange also affects sub-state. Hence, csrRoamStateChange happens first and then // substate change. // Moving even save profile above so that below mentioned conditon is also met. // JEZ100225: Moved to after saving the profile. Fix needed in main/latest csrRoamStateChange( pMac, eCSR_ROAMING_STATE_JOINED, sessionId ); - // Make sure the Set Context is issued before link indication to NDIS. After link indication is + // Make sure the Set Context is issued before link indication to NDIS. After link indication is // made to NDIS, frames could start flowing. If we have not set context with LIM, the frames - // will be dropped for the security context may not be set properly. + // will be dropped for the security context may not be set properly. // // this was causing issues in the 2c_wlan_wep WHQL test when the SetContext was issued after the link // indication. (Link Indication happens in the profFSMSetConnectedInfra call). // // this reordering was done on titan_prod_usb branch and is being replicated here. // - + if( CSR_IS_ENC_TYPE_STATIC( pProfile->negotiatedUCEncryptionType ) && !pProfile->bWPSAssociation) { // Issue the set Context request to LIM to establish the Unicast STA context if( !HAL_STATUS_SUCCESS( csrRoamIssueSetContextReq( pMac, sessionId, - pProfile->negotiatedUCEncryptionType, + pProfile->negotiatedUCEncryptionType, pSirBssDesc, &(pSirBssDesc->bssId), FALSE, TRUE, eSIR_TX_RX, 0, 0, NULL, 0 ) ) ) // NO keys... these key parameters don't matter. { @@ -5199,7 +5382,7 @@ static tANI_BOOLEAN csrRoamProcessResults( tpAniSirGlobal pMac, tSmeCmd *pComman { key_timeout_interval = CSR_WAIT_FOR_KEY_TIMEOUT_PERIOD; } - + //Save sessionId in case of timeout pMac->roam.WaitForKeyTimerInfo.sessionId = (tANI_U8)sessionId; //This time should be long enough for the rest of the process plus setting key @@ -5210,7 +5393,7 @@ static tANI_BOOLEAN csrRoamProcessResults( tpAniSirGlobal pMac, tSmeCmd *pComman csrRoamSubstateChange( pMac, eCSR_ROAM_SUBSTATE_NONE, sessionId); } } - + assocInfo.pBssDesc = pSirBssDesc; //could be NULL assocInfo.pProfile = pProfile; if(Context) @@ -5221,39 +5404,30 @@ static tANI_BOOLEAN csrRoamProcessResults( tpAniSirGlobal pMac, tSmeCmd *pComman len = pJoinRsp->assocReqLength + pJoinRsp->assocRspLength + pJoinRsp->beaconLength; #ifdef WLAN_FEATURE_VOWIFI_11R len += pJoinRsp->parsedRicRspLen; -#endif /* WLAN_FEATURE_VOWIFI_11R */ +#endif /* WLAN_FEATURE_VOWIFI_11R */ #ifdef FEATURE_WLAN_CCX len += pJoinRsp->tspecIeLen; #endif if(len) { - if(HAL_STATUS_SUCCESS(palAllocateMemory(pMac->hHdd, - (void **)&pSession->connectedInfo.pbFrames, len))) + pSession->connectedInfo.pbFrames = vos_mem_malloc(len); + if ( pSession->connectedInfo.pbFrames != NULL ) { - if(HAL_STATUS_SUCCESS( palCopyMemory(pMac->hHdd, - pSession->connectedInfo.pbFrames, pJoinRsp->frames, len) )) - { - pSession->connectedInfo.nAssocReqLength = pJoinRsp->assocReqLength; - pSession->connectedInfo.nAssocRspLength = pJoinRsp->assocRspLength; - pSession->connectedInfo.nBeaconLength = pJoinRsp->beaconLength; + vos_mem_copy(pSession->connectedInfo.pbFrames, + pJoinRsp->frames, len); + pSession->connectedInfo.nAssocReqLength = pJoinRsp->assocReqLength; + pSession->connectedInfo.nAssocRspLength = pJoinRsp->assocRspLength; + pSession->connectedInfo.nBeaconLength = pJoinRsp->beaconLength; #ifdef WLAN_FEATURE_VOWIFI_11R - pSession->connectedInfo.nRICRspLength = pJoinRsp->parsedRicRspLen; -#endif /* WLAN_FEATURE_VOWIFI_11R */ + pSession->connectedInfo.nRICRspLength = pJoinRsp->parsedRicRspLen; +#endif /* WLAN_FEATURE_VOWIFI_11R */ #ifdef FEATURE_WLAN_CCX - pSession->connectedInfo.nTspecIeLength = pJoinRsp->tspecIeLen; + pSession->connectedInfo.nTspecIeLength = pJoinRsp->tspecIeLen; #endif - roamInfo.nAssocReqLength = pJoinRsp->assocReqLength; - roamInfo.nAssocRspLength = pJoinRsp->assocRspLength; - roamInfo.nBeaconLength = pJoinRsp->beaconLength; - roamInfo.pbFrames = pSession->connectedInfo.pbFrames; - } - else - { - smsLog(pMac, LOGE, "%s: Copying of memory failed for %d bytes !!!", - __func__, len); - palFreeMemory( pMac->hHdd, pSession->connectedInfo.pbFrames ); - pSession->connectedInfo.pbFrames = NULL; - } + roamInfo.nAssocReqLength = pJoinRsp->assocReqLength; + roamInfo.nAssocRspLength = pJoinRsp->assocRspLength; + roamInfo.nBeaconLength = pJoinRsp->beaconLength; + roamInfo.pbFrames = pSession->connectedInfo.pbFrames; } } if(pCommand->u.roamCmd.fReassoc) @@ -5277,8 +5451,8 @@ static tANI_BOOLEAN csrRoamProcessResults( tpAniSirGlobal pMac, tSmeCmd *pComman } } #ifndef WLAN_MDM_CODE_REDUCTION_OPT - // Indicate SME-QOS with reassoc success event, only after - // copying the frames + // Indicate SME-QOS with reassoc success event, only after + // copying the frames sme_QosCsrEventInd(pMac, (v_U8_t)sessionId, ind_qos, &assocInfo); #endif roamInfo.pBssDesc = pSirBssDesc; @@ -5305,10 +5479,11 @@ static tANI_BOOLEAN csrRoamProcessResults( tpAniSirGlobal pMac, tSmeCmd *pComman } pSession->connectedProfile.dot11Mode = pSession->bssParams.uCfgDot11Mode; roamInfo.u.pConnectedProfile = &pSession->connectedProfile; + if( pSession->bRefAssocStartCnt > 0 ) { pSession->bRefAssocStartCnt--; - //Remove this code once SLM_Sessionization is supported + //Remove this code once SLM_Sessionization is supported //BMPS_WORKAROUND_NOT_NEEDED if(!IS_FEATURE_SUPPORTED_BY_FW(SLM_SESSIONIZATION) && ( csrIsConcurrentSessionRunning( pMac ))) { @@ -5316,14 +5491,14 @@ static tANI_BOOLEAN csrRoamProcessResults( tpAniSirGlobal pMac, tSmeCmd *pComman } csrRoamCallCallback(pMac, sessionId, &roamInfo, pCommand->u.roamCmd.roamId, eCSR_ROAM_ASSOCIATION_COMPLETION, eCSR_ROAM_RESULT_ASSOCIATED); } - + csrRoamCompletion(pMac, sessionId, NULL, pCommand, eCSR_ROAM_RESULT_NONE, eANI_BOOLEAN_TRUE); // reset the PMKID candidate list csrResetPMKIDCandidateList( pMac, sessionId ); //Update TL's AC weight base on the current EDCA parameters //These parameters may change in the course of the connection, that sictuation //is not taken care here. This change is mainly to address a WIFI WMM test where - //BE has a equal or higher TX priority than VI. + //BE has a equal or higher TX priority than VI. //We only do this for infra link if( csrIsConnStateConnectedInfra(pMac, sessionId ) && pIes ) { @@ -5347,7 +5522,7 @@ static tANI_BOOLEAN csrRoamProcessResults( tpAniSirGlobal pMac, tSmeCmd *pComman } //Check if BMPS is required and start the BMPS retry timer. Timer period is large //enough to let security and DHCP handshake succeed before entry into BMPS - if (pmcShouldBmpsTimerRun(pMac)) + if (!pMac->psOffloadEnabled && pmcShouldBmpsTimerRun(pMac)) { if (pmcStartTrafficTimer(pMac, BMPS_TRAFFIC_TIMER_ALLOW_SECURITY_DHCP) != eHAL_STATUS_SUCCESS) @@ -5368,7 +5543,7 @@ static tANI_BOOLEAN csrRoamProcessResults( tpAniSirGlobal pMac, tSmeCmd *pComman smsLog(pMac, LOG2, FL("receives start BSS ok indication")); status = eHAL_STATUS_FAILURE; pSmeStartBssRsp = (tSirSmeStartBssRsp *)Context; - palZeroMemory(pMac->hHdd, &roamInfo, sizeof(tCsrRoamInfo)); + vos_mem_set(&roamInfo, sizeof(tCsrRoamInfo), 0); if( CSR_IS_IBSS( pProfile ) ) { pSession->connectState = eCSR_ASSOC_STATE_TYPE_IBSS_DISCONNECTED; @@ -5390,13 +5565,13 @@ static tANI_BOOLEAN csrRoamProcessResults( tpAniSirGlobal pMac, tSmeCmd *pComman smsLog(pMac, LOG2, FL("cannot parse IBSS IEs")); roamInfo.pBssDesc = pSirBssDesc; //We need to associate_complete it first, becasue Associate_start already indicated. - csrRoamCallCallback( pMac, sessionId, &roamInfo, pCommand->u.roamCmd.roamId, + csrRoamCallCallback( pMac, sessionId, &roamInfo, pCommand->u.roamCmd.roamId, eCSR_ROAM_IBSS_IND, eCSR_ROAM_RESULT_IBSS_START_FAILED ); break; } if (!CSR_IS_INFRA_AP(pProfile)) { - pScanResult = csrScanAppendBssDescription( pMac, pSirBssDesc, pIes ); + pScanResult = csrScanAppendBssDescription( pMac, pSirBssDesc, pIes, FALSE ); } csrRoamSaveConnectedBssDesc(pMac, sessionId, pSirBssDesc); csrRoamFreeConnectProfile(pMac, &pSession->connectedProfile); @@ -5404,18 +5579,19 @@ static tANI_BOOLEAN csrRoamProcessResults( tpAniSirGlobal pMac, tSmeCmd *pComman if(pSirBssDesc) { csrRoamSaveConnectedInfomation(pMac, sessionId, pProfile, pSirBssDesc, pIes); - palCopyMemory(pMac->hHdd, &roamInfo.bssid, &pSirBssDesc->bssId, sizeof(tCsrBssid)); + vos_mem_copy(&roamInfo.bssid, &pSirBssDesc->bssId, + sizeof(tCsrBssid)); } //We are doen with the IEs so free it - palFreeMemory(pMac->hHdd, pIes); + vos_mem_free(pIes); #ifdef FEATURE_WLAN_DIAG_SUPPORT_CSR { vos_log_ibss_pkt_type *pIbssLog; tANI_U32 bi; - + WLAN_VOS_DIAG_LOG_ALLOC(pIbssLog, vos_log_ibss_pkt_type, LOG_WLAN_IBSS_C); if(pIbssLog) - { + { if(CSR_INVALID_SCANRESULT_HANDLE == pCommand->u.roamCmd.hBSSList) { //We start the IBSS (didn't find any matched IBSS out there) @@ -5427,7 +5603,7 @@ static tANI_BOOLEAN csrRoamProcessResults( tpAniSirGlobal pMac, tSmeCmd *pComman } if(pSirBssDesc) { - palCopyMemory(pMac->hHdd, pIbssLog->bssid, pSirBssDesc->bssId, 6); + vos_mem_copy(pIbssLog->bssid, pSirBssDesc->bssId, 6); pIbssLog->operatingChannel = pSirBssDesc->channelId; } if(HAL_STATUS_SUCCESS(ccmCfgGetInt(pMac, WNI_CFG_BEACON_INTERVAL, &bi))) @@ -5444,8 +5620,8 @@ static tANI_BOOLEAN csrRoamProcessResults( tpAniSirGlobal pMac, tSmeCmd *pComman if( CSR_IS_ENC_TYPE_STATIC( pProfile->negotiatedUCEncryptionType ) && !CSR_IS_INFRA_AP( pSession->pCurRoamProfile )) { // Issue the set Context request to LIM to establish the Broadcast STA context for the Ibss. - csrRoamIssueSetContextReq( pMac, sessionId, - pProfile->negotiatedMCEncryptionType, + csrRoamIssueSetContextReq( pMac, sessionId, + pProfile->negotiatedMCEncryptionType, pSirBssDesc, &BroadcastMac, FALSE, FALSE, eSIR_TX_RX, 0, 0, NULL, 0 ); // NO keys... these key parameters don't matter. } @@ -5472,7 +5648,7 @@ static tANI_BOOLEAN csrRoamProcessResults( tpAniSirGlobal pMac, tSmeCmd *pComman } } //Only tell upper layer is we start the BSS because Vista doesn't like multiple connection - //indications. If we don't start the BSS ourself, handler of eSIR_SME_JOINED_NEW_BSS will + //indications. If we don't start the BSS ourself, handler of eSIR_SME_JOINED_NEW_BSS will //trigger the connection start indication in Vista if( !CSR_IS_JOIN_TO_IBSS( pProfile ) ) { @@ -5488,21 +5664,19 @@ static tANI_BOOLEAN csrRoamProcessResults( tpAniSirGlobal pMac, tSmeCmd *pComman roamStatus = eCSR_ROAM_INFRA_IND; roamResult = eCSR_ROAM_RESULT_INFRA_STARTED; } - + //Only tell upper layer is we start the BSS because Vista doesn't like multiple connection - //indications. If we don't start the BSS ourself, handler of eSIR_SME_JOINED_NEW_BSS will + //indications. If we don't start the BSS ourself, handler of eSIR_SME_JOINED_NEW_BSS will //trigger the connection start indication in Vista - palZeroMemory(pMac->hHdd, &roamInfo, sizeof(tCsrRoamInfo)); + vos_mem_set(&roamInfo, sizeof(tCsrRoamInfo), 0); roamInfo.statusCode = pSession->joinFailStatusCode.statusCode; roamInfo.reasonCode = pSession->joinFailStatusCode.reasonCode; - if(CSR_INVALID_SCANRESULT_HANDLE == pCommand->u.roamCmd.hBSSList) - { - //We start the IBSS (didn't find any matched IBSS out there) - roamInfo.pBssDesc = pSirBssDesc; - } + //We start the IBSS (didn't find any matched IBSS out there) + roamInfo.pBssDesc = pSirBssDesc; roamInfo.staId = (tANI_U8)pSmeStartBssRsp->staId; - vos_mem_copy (roamInfo.bssid, pSirBssDesc->bssId, sizeof(tCsrBssid)); - //Remove this code once SLM_Sessionization is supported + vos_mem_copy(roamInfo.bssid, pSirBssDesc->bssId, + sizeof(tCsrBssid)); + //Remove this code once SLM_Sessionization is supported //BMPS_WORKAROUND_NOT_NEEDED if(!IS_FEATURE_SUPPORTED_BY_FW(SLM_SESSIONIZATION) && ( csrIsConcurrentSessionRunning( pMac ))) @@ -5512,25 +5686,14 @@ static tANI_BOOLEAN csrRoamProcessResults( tpAniSirGlobal pMac, tSmeCmd *pComman csrRoamCallCallback( pMac, sessionId, &roamInfo, pCommand->u.roamCmd.roamId, roamStatus, roamResult ); } - + csrScanCancelIdleScan(pMac); - //Only use this timer for ibss. BAP has its own timer for WDS - if( CSR_IS_IBSS( pProfile) && CSR_INVALID_SCANRESULT_HANDLE != pCommand->u.roamCmd.hBSSList) - { - //start the join IBSS timer - csrRoamStartIbssJoinTimer(pMac, sessionId, CSR_IBSS_JOIN_TIMEOUT_PERIOD); //interval - pSession->ibss_join_pending = TRUE; - } - if( HAL_STATUS_SUCCESS( status ) ) - { - //Already sent join_req for the WDS station - fReleaseCommand = eANI_BOOLEAN_FALSE; - } - else if( CSR_IS_WDS_STA( pProfile ) ) + + if( CSR_IS_WDS_STA( pProfile ) ) { //need to send stop BSS because we fail to send join_req csrRoamIssueDisassociateCmd( pMac, sessionId, eCSR_DISCONNECT_REASON_UNSPECIFIED ); - csrRoamCallCallback( pMac, sessionId, &roamInfo, pCommand->u.roamCmd.roamId, + csrRoamCallCallback( pMac, sessionId, &roamInfo, pCommand->u.roamCmd.roamId, eCSR_ROAM_WDS_IND, eCSR_ROAM_RESULT_WDS_STOPPED ); } break; @@ -5566,7 +5729,7 @@ static tANI_BOOLEAN csrRoamProcessResults( tpAniSirGlobal pMac, tSmeCmd *pComman { pSirBssDesc = NULL; } - palZeroMemory(pMac->hHdd, &roamInfo, sizeof(tCsrRoamInfo)); + vos_mem_set(&roamInfo, sizeof(tCsrRoamInfo), 0); roamInfo.pBssDesc = pSirBssDesc; //We need to associate_complete it first, becasue Associate_start already indicated. csrRoamCallCallback( pMac, sessionId, &roamInfo, pCommand->u.roamCmd.roamId, roamStatus, roamResult ); @@ -5579,30 +5742,32 @@ static tANI_BOOLEAN csrRoamProcessResults( tpAniSirGlobal pMac, tSmeCmd *pComman smsLog(pMac, LOGW, FL("receives silently roaming indication")); csrRoamStateChange( pMac, eCSR_ROAMING_STATE_JOINED, sessionId ); csrRoamSubstateChange( pMac, eCSR_ROAM_SUBSTATE_NONE, sessionId ); - palZeroMemory(pMac->hHdd, &roamInfo, sizeof(tCsrRoamInfo)); + vos_mem_set(&roamInfo, sizeof(tCsrRoamInfo), 0); roamInfo.pBssDesc = pSession->pConnectBssDesc; if( roamInfo.pBssDesc ) { - palCopyMemory(pMac->hHdd, &roamInfo.bssid, &roamInfo.pBssDesc->bssId, sizeof(tCsrBssid)); + vos_mem_copy(&roamInfo.bssid, &roamInfo.pBssDesc->bssId, + sizeof(tCsrBssid)); } //Since there is no change in the current state, simply pass back no result otherwise //HDD may be mistakenly mark to disconnected state. - csrRoamCallCallback( pMac, sessionId, &roamInfo, pCommand->u.roamCmd.roamId, + csrRoamCallCallback( pMac, sessionId, &roamInfo, pCommand->u.roamCmd.roamId, eCSR_ROAM_IBSS_IND, eCSR_ROAM_RESULT_NONE ); break; case eCsrSilentlyStopRoamingSaveState: //We are here because we try to connect to the same AP //No message to PE smsLog(pMac, LOGW, FL("receives silently stop roaming indication")); - palZeroMemory(pMac->hHdd, &roamInfo, sizeof(roamInfo)); - + vos_mem_set(&roamInfo, sizeof(roamInfo), 0); + //to aviod resetting the substate to NONE pMac->roam.curState[sessionId] = eCSR_ROAMING_STATE_JOINED; //No need to change substate to wai_for_key because there is no state change roamInfo.pBssDesc = pSession->pConnectBssDesc; if( roamInfo.pBssDesc ) { - palCopyMemory(pMac->hHdd, &roamInfo.bssid, &roamInfo.pBssDesc->bssId, sizeof(tCsrBssid)); + vos_mem_copy(&roamInfo.bssid, &roamInfo.pBssDesc->bssId, + sizeof(tCsrBssid)); } roamInfo.statusCode = pSession->joinFailStatusCode.statusCode; roamInfo.reasonCode = pSession->joinFailStatusCode.reasonCode; @@ -5614,7 +5779,7 @@ static tANI_BOOLEAN csrRoamProcessResults( tpAniSirGlobal pMac, tSmeCmd *pComman roamInfo.u.pConnectedProfile = &pSession->connectedProfile; VOS_ASSERT( roamInfo.staId != 0 ); pSession->bRefAssocStartCnt--; - csrRoamCallCallback(pMac, sessionId, &roamInfo, pCommand->u.roamCmd.roamId, + csrRoamCallCallback(pMac, sessionId, &roamInfo, pCommand->u.roamCmd.roamId, eCSR_ROAM_ASSOCIATION_COMPLETION, eCSR_ROAM_RESULT_ASSOCIATED); csrRoamCompletion(pMac, sessionId, NULL, pCommand, eCSR_ROAM_RESULT_ASSOCIATED, eANI_BOOLEAN_TRUE); break; @@ -5627,12 +5792,12 @@ static tANI_BOOLEAN csrRoamProcessResults( tpAniSirGlobal pMac, tSmeCmd *pComman csrFreeConnectBssDesc(pMac, sessionId); csrRoamFreeConnectProfile(pMac, &pSession->connectedProfile); csrRoamFreeConnectedInfo( pMac, &pSession->connectedInfo ); - palZeroMemory(pMac->hHdd, &roamInfo, sizeof(tCsrRoamInfo)); + vos_mem_set(&roamInfo, sizeof(tCsrRoamInfo), 0); roamInfo.pBssDesc = pCommand->u.roamCmd.pLastRoamBss; roamInfo.statusCode = pSession->joinFailStatusCode.statusCode; roamInfo.reasonCode = pSession->joinFailStatusCode.reasonCode; - csrRoamCallCallback(pMac, sessionId, &roamInfo, pCommand->u.roamCmd.roamId, - eCSR_ROAM_WDS_IND, + csrRoamCallCallback(pMac, sessionId, &roamInfo, pCommand->u.roamCmd.roamId, + eCSR_ROAM_WDS_IND, eCSR_ROAM_RESULT_WDS_NOT_ASSOCIATED); //Need to issue stop_bss break; @@ -5644,7 +5809,7 @@ static tANI_BOOLEAN csrRoamProcessResults( tpAniSirGlobal pMac, tSmeCmd *pComman smsLog(pMac, LOGW, FL("receives no association indication")); smsLog(pMac, LOG1, FL("Assoc ref count %d"), pSession->bRefAssocStartCnt); - if( CSR_IS_INFRASTRUCTURE( &pSession->connectedProfile ) || + if( CSR_IS_INFRASTRUCTURE( &pSession->connectedProfile ) || CSR_IS_ROAM_SUBSTATE_STOP_BSS_REQ( pMac, sessionId ) ) { //do not free for the other profiles as we need to send down stop BSS later @@ -5664,11 +5829,13 @@ static tANI_BOOLEAN csrRoamProcessResults( tpAniSirGlobal pMac, tSmeCmd *pComman case eCsrHddIssued: case eCsrSmeIssuedDisassocForHandoff: csrRoamStateChange( pMac, eCSR_ROAMING_STATE_IDLE, sessionId ); - palZeroMemory(pMac->hHdd, &roamInfo, sizeof(tCsrRoamInfo)); + vos_mem_set(&roamInfo, sizeof(tCsrRoamInfo), 0); roamInfo.pBssDesc = pCommand->u.roamCmd.pLastRoamBss; roamInfo.statusCode = pSession->joinFailStatusCode.statusCode; roamInfo.reasonCode = pSession->joinFailStatusCode.reasonCode; - palCopyMemory(pMac->hHdd, &roamInfo.bssid, &pSession->joinFailStatusCode.bssId, sizeof(tCsrBssid)); + vos_mem_copy(&roamInfo.bssid, + &pSession->joinFailStatusCode.bssId, + sizeof(tCsrBssid)); /* Defeaturize this later if needed */ #ifdef WLAN_FEATURE_NEIGHBOR_ROAMING @@ -5684,14 +5851,14 @@ static tANI_BOOLEAN csrRoamProcessResults( tpAniSirGlobal pMac, tSmeCmd *pComman pSession->bRefAssocStartCnt--; if(eCsrJoinFailureDueToConcurrency == Result) { - csrRoamCallCallback(pMac, sessionId, &roamInfo, pCommand->u.roamCmd.roamId, - eCSR_ROAM_ASSOCIATION_COMPLETION, + csrRoamCallCallback(pMac, sessionId, &roamInfo, pCommand->u.roamCmd.roamId, + eCSR_ROAM_ASSOCIATION_COMPLETION, eCSR_ROAM_RESULT_ASSOC_FAIL_CON_CHANNEL); } else { - csrRoamCallCallback(pMac, sessionId, &roamInfo, pCommand->u.roamCmd.roamId, - eCSR_ROAM_ASSOCIATION_COMPLETION, + csrRoamCallCallback(pMac, sessionId, &roamInfo, pCommand->u.roamCmd.roamId, + eCSR_ROAM_ASSOCIATION_COMPLETION, eCSR_ROAM_RESULT_FAILURE); } } @@ -5727,7 +5894,7 @@ static tANI_BOOLEAN csrRoamProcessResults( tpAniSirGlobal pMac, tSmeCmd *pComman csrRoamStateChange( pMac, eCSR_ROAMING_STATE_IDLE, sessionId); csrRoamCallCallback(pMac, sessionId, NULL, pCommand->u.roamCmd.roamId, eCSR_ROAM_DISASSOCIATED, eCSR_ROAM_RESULT_FORCED); -#ifndef WLAN_MDM_CODE_REDUCTION_OPT +#ifndef WLAN_MDM_CODE_REDUCTION_OPT sme_QosCsrEventInd(pMac, (tANI_U8)sessionId, SME_QOS_CSR_DISCONNECT_IND, NULL); #endif csrRoamCompletion(pMac, sessionId, NULL, pCommand, eCSR_ROAM_RESULT_FAILURE, eANI_BOOLEAN_FALSE); @@ -5745,8 +5912,8 @@ static tANI_BOOLEAN csrRoamProcessResults( tpAniSirGlobal pMac, tSmeCmd *pComman } else { - csrRoamCallCallback(pMac, sessionId, NULL, - pCommand->u.roamCmd.roamId, + csrRoamCallCallback(pMac, sessionId, NULL, + pCommand->u.roamCmd.roamId, eCSR_ROAM_DISASSOCIATED, eCSR_ROAM_RESULT_FORCED); } #ifndef WLAN_MDM_CODE_REDUCTION_OPT @@ -5756,8 +5923,8 @@ static tANI_BOOLEAN csrRoamProcessResults( tpAniSirGlobal pMac, tSmeCmd *pComman csrScanStartIdleScan(pMac); break; case eCsrForcedIbssLeave: - csrRoamCallCallback(pMac, sessionId, NULL, - pCommand->u.roamCmd.roamId, + csrRoamCallCallback(pMac, sessionId, NULL, + pCommand->u.roamCmd.roamId, eCSR_ROAM_IBSS_LEAVE, eCSR_ROAM_RESULT_IBSS_STOP); break; @@ -5771,16 +5938,16 @@ static tANI_BOOLEAN csrRoamProcessResults( tpAniSirGlobal pMac, tSmeCmd *pComman csrScanStartIdleScan(pMac); break; case eCsrStopBss: - csrRoamCallCallback(pMac, sessionId, NULL, - pCommand->u.roamCmd.roamId, - eCSR_ROAM_INFRA_IND, + csrRoamCallCallback(pMac, sessionId, NULL, + pCommand->u.roamCmd.roamId, + eCSR_ROAM_INFRA_IND, eCSR_ROAM_RESULT_INFRA_STOPPED); break; case eCsrForcedDisassocSta: case eCsrForcedDeauthSta: csrRoamStateChange( pMac, eCSR_ROAMING_STATE_JOINED, sessionId); if( CSR_IS_SESSION_VALID(pMac, sessionId) ) - { + { pSession = CSR_GET_SESSION(pMac, sessionId); if (!pSession) break; @@ -5788,12 +5955,13 @@ static tANI_BOOLEAN csrRoamProcessResults( tpAniSirGlobal pMac, tSmeCmd *pComman if ( CSR_IS_INFRA_AP(&pSession->connectedProfile) ) { roamInfo.u.pConnectedProfile = &pSession->connectedProfile; - palCopyMemory(pMac->hHdd, roamInfo.peerMac, - pCommand->u.roamCmd.peerMac, sizeof(tSirMacAddr)); + vos_mem_copy(roamInfo.peerMac, + pCommand->u.roamCmd.peerMac, + sizeof(tSirMacAddr)); roamInfo.reasonCode = eCSR_ROAM_RESULT_FORCED; roamInfo.statusCode = eSIR_SME_SUCCESS; - status = csrRoamCallCallback(pMac, sessionId, - &roamInfo, pCommand->u.roamCmd.roamId, + status = csrRoamCallCallback(pMac, sessionId, + &roamInfo, pCommand->u.roamCmd.roamId, eCSR_ROAM_LOSTLINK, eCSR_ROAM_RESULT_FORCED); } } @@ -5830,97 +5998,139 @@ eHalStatus csrRoamCopyProfile(tpAniSirGlobal pMac, tCsrRoamProfile *pDstProfile, { eHalStatus status = eHAL_STATUS_SUCCESS; tANI_U32 size = 0; - + do { - palZeroMemory(pMac->hHdd, pDstProfile, sizeof(tCsrRoamProfile)); + vos_mem_set(pDstProfile, sizeof(tCsrRoamProfile), 0); if(pSrcProfile->BSSIDs.numOfBSSIDs) { size = sizeof(tCsrBssid) * pSrcProfile->BSSIDs.numOfBSSIDs; - status = palAllocateMemory(pMac->hHdd, (void **)&pDstProfile->BSSIDs.bssid, size); + pDstProfile->BSSIDs.bssid = vos_mem_malloc(size); + if ( NULL == pDstProfile->BSSIDs.bssid ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; if(!HAL_STATUS_SUCCESS(status)) { break; } pDstProfile->BSSIDs.numOfBSSIDs = pSrcProfile->BSSIDs.numOfBSSIDs; - palCopyMemory(pMac->hHdd, pDstProfile->BSSIDs.bssid, pSrcProfile->BSSIDs.bssid, size); + vos_mem_copy(pDstProfile->BSSIDs.bssid, + pSrcProfile->BSSIDs.bssid, size); } if(pSrcProfile->SSIDs.numOfSSIDs) { size = sizeof(tCsrSSIDInfo) * pSrcProfile->SSIDs.numOfSSIDs; - status = palAllocateMemory(pMac->hHdd, (void **)&pDstProfile->SSIDs.SSIDList, size); - if(!HAL_STATUS_SUCCESS(status)) + pDstProfile->SSIDs.SSIDList = vos_mem_malloc(size); + if ( NULL == pDstProfile->SSIDs.SSIDList ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; + if (!HAL_STATUS_SUCCESS(status)) { break; } pDstProfile->SSIDs.numOfSSIDs = pSrcProfile->SSIDs.numOfSSIDs; - palCopyMemory(pMac->hHdd, pDstProfile->SSIDs.SSIDList, pSrcProfile->SSIDs.SSIDList, size); + vos_mem_copy(pDstProfile->SSIDs.SSIDList, + pSrcProfile->SSIDs.SSIDList, size); } if(pSrcProfile->nWPAReqIELength) { - status = palAllocateMemory(pMac->hHdd, (void **)&pDstProfile->pWPAReqIE, pSrcProfile->nWPAReqIELength); - if(!HAL_STATUS_SUCCESS(status)) + pDstProfile->pWPAReqIE = vos_mem_malloc(pSrcProfile->nWPAReqIELength); + if ( NULL == pDstProfile->pWPAReqIE ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; + + if (!HAL_STATUS_SUCCESS(status)) { break; } pDstProfile->nWPAReqIELength = pSrcProfile->nWPAReqIELength; - palCopyMemory(pMac->hHdd, pDstProfile->pWPAReqIE, pSrcProfile->pWPAReqIE, pSrcProfile->nWPAReqIELength); + vos_mem_copy(pDstProfile->pWPAReqIE, pSrcProfile->pWPAReqIE, + pSrcProfile->nWPAReqIELength); } if(pSrcProfile->nRSNReqIELength) { - status = palAllocateMemory(pMac->hHdd, (void **)&pDstProfile->pRSNReqIE, pSrcProfile->nRSNReqIELength); - if(!HAL_STATUS_SUCCESS(status)) + pDstProfile->pRSNReqIE = vos_mem_malloc(pSrcProfile->nRSNReqIELength); + if ( NULL == pDstProfile->pRSNReqIE ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; + + if (!HAL_STATUS_SUCCESS(status)) { break; } pDstProfile->nRSNReqIELength = pSrcProfile->nRSNReqIELength; - palCopyMemory(pMac->hHdd, pDstProfile->pRSNReqIE, pSrcProfile->pRSNReqIE, pSrcProfile->nRSNReqIELength); + vos_mem_copy(pDstProfile->pRSNReqIE, pSrcProfile->pRSNReqIE, + pSrcProfile->nRSNReqIELength); } #ifdef FEATURE_WLAN_WAPI if(pSrcProfile->nWAPIReqIELength) { - status = palAllocateMemory(pMac->hHdd, (void **)&pDstProfile->pWAPIReqIE, pSrcProfile->nWAPIReqIELength); + pDstProfile->pWAPIReqIE = vos_mem_malloc(pSrcProfile->nWAPIReqIELength); + if ( NULL == pDstProfile->pWAPIReqIE ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; if(!HAL_STATUS_SUCCESS(status)) { break; } pDstProfile->nWAPIReqIELength = pSrcProfile->nWAPIReqIELength; - palCopyMemory(pMac->hHdd, pDstProfile->pWAPIReqIE, pSrcProfile->pWAPIReqIE, pSrcProfile->nWAPIReqIELength); + vos_mem_copy(pDstProfile->pWAPIReqIE, pSrcProfile->pWAPIReqIE, + pSrcProfile->nWAPIReqIELength); } #endif /* FEATURE_WLAN_WAPI */ if(pSrcProfile->nAddIEScanLength) { - status = palAllocateMemory(pMac->hHdd, - (void **)&pDstProfile->pAddIEScan, pSrcProfile->nAddIEScanLength); - if(!HAL_STATUS_SUCCESS(status)) - { - break; + pDstProfile->pAddIEScan = vos_mem_malloc(pSrcProfile->nAddIEScanLength); + if ( NULL == pDstProfile->pAddIEScan ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; + + if(!HAL_STATUS_SUCCESS(status)) + { + break; } pDstProfile->nAddIEScanLength = pSrcProfile->nAddIEScanLength; - palCopyMemory(pMac->hHdd, pDstProfile->pAddIEScan, pSrcProfile->pAddIEScan, - pSrcProfile->nAddIEScanLength); + vos_mem_copy(pDstProfile->pAddIEScan, pSrcProfile->pAddIEScan, + pSrcProfile->nAddIEScanLength); } if(pSrcProfile->nAddIEAssocLength) { - status = palAllocateMemory(pMac->hHdd, - (void **)&pDstProfile->pAddIEAssoc, pSrcProfile->nAddIEAssocLength); + pDstProfile->pAddIEAssoc = vos_mem_malloc(pSrcProfile->nAddIEAssocLength); + if ( NULL == pDstProfile->pAddIEAssoc ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; + if(!HAL_STATUS_SUCCESS(status)) { break; } pDstProfile->nAddIEAssocLength = pSrcProfile->nAddIEAssocLength; - palCopyMemory(pMac->hHdd, pDstProfile->pAddIEAssoc, pSrcProfile->pAddIEAssoc, - pSrcProfile->nAddIEAssocLength); + vos_mem_copy(pDstProfile->pAddIEAssoc, pSrcProfile->pAddIEAssoc, + pSrcProfile->nAddIEAssocLength); } if(pSrcProfile->ChannelInfo.ChannelList) { - status = palAllocateMemory(pMac->hHdd, (void **)&pDstProfile->ChannelInfo.ChannelList, pSrcProfile->ChannelInfo.numOfChannels); + pDstProfile->ChannelInfo.ChannelList = vos_mem_malloc( + pSrcProfile->ChannelInfo.numOfChannels); + if ( NULL == pDstProfile->ChannelInfo.ChannelList ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; if(!HAL_STATUS_SUCCESS(status)) { break; } pDstProfile->ChannelInfo.numOfChannels = pSrcProfile->ChannelInfo.numOfChannels; - palCopyMemory(pMac->hHdd, pDstProfile->ChannelInfo.ChannelList, pSrcProfile->ChannelInfo.ChannelList, pSrcProfile->ChannelInfo.numOfChannels); + vos_mem_copy(pDstProfile->ChannelInfo.ChannelList, + pSrcProfile->ChannelInfo.ChannelList, + pSrcProfile->ChannelInfo.numOfChannels); } pDstProfile->AuthType = pSrcProfile->AuthType; pDstProfile->EncryptionType = pSrcProfile->EncryptionType; @@ -5936,7 +6146,7 @@ eHalStatus csrRoamCopyProfile(tpAniSirGlobal pMac, tCsrRoamProfile *pDstProfile, pDstProfile->BSSType = pSrcProfile->BSSType; pDstProfile->phyMode = pSrcProfile->phyMode; pDstProfile->csrPersona = pSrcProfile->csrPersona; - + #ifdef FEATURE_WLAN_WAPI if(csrIsProfileWapi(pSrcProfile)) { @@ -5955,14 +6165,15 @@ eHalStatus csrRoamCopyProfile(tpAniSirGlobal pMac, tCsrRoamProfile *pDstProfile, pDstProfile->fwdWPSPBCProbeReq = pSrcProfile->fwdWPSPBCProbeReq; pDstProfile->csr80211AuthType = pSrcProfile->csr80211AuthType; pDstProfile->dtimPeriod = pSrcProfile->dtimPeriod; - pDstProfile->ApUapsdEnable = pSrcProfile->ApUapsdEnable; + pDstProfile->ApUapsdEnable = pSrcProfile->ApUapsdEnable; pDstProfile->SSIDs.SSIDList[0].ssidHidden = pSrcProfile->SSIDs.SSIDList[0].ssidHidden; - pDstProfile->protEnabled = pSrcProfile->protEnabled; - pDstProfile->obssProtEnabled = pSrcProfile->obssProtEnabled; + pDstProfile->protEnabled = pSrcProfile->protEnabled; + pDstProfile->obssProtEnabled = pSrcProfile->obssProtEnabled; pDstProfile->cfg_protection = pSrcProfile->cfg_protection; pDstProfile->wps_state = pSrcProfile->wps_state; pDstProfile->ieee80211d = pSrcProfile->ieee80211d; - palCopyMemory(pMac->hHdd, &pDstProfile->Keys, &pSrcProfile->Keys, sizeof(pDstProfile->Keys)); + vos_mem_copy(&pDstProfile->Keys, &pSrcProfile->Keys, + sizeof(pDstProfile->Keys)); #ifdef WLAN_FEATURE_VOWIFI_11R if (pSrcProfile->MDID.mdiePresent) { @@ -5971,35 +6182,44 @@ eHalStatus csrRoamCopyProfile(tpAniSirGlobal pMac, tCsrRoamProfile *pDstProfile, } #endif }while(0); - + if(!HAL_STATUS_SUCCESS(status)) { csrReleaseProfile(pMac, pDstProfile); pDstProfile = NULL; } - + return (status); } eHalStatus csrRoamCopyConnectedProfile(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamProfile *pDstProfile ) { eHalStatus status = eHAL_STATUS_SUCCESS; - tCsrRoamConnectedProfile *pSrcProfile = &pMac->roam.roamSession[sessionId].connectedProfile; + tCsrRoamConnectedProfile *pSrcProfile = &pMac->roam.roamSession[sessionId].connectedProfile; do { - palZeroMemory(pMac->hHdd, pDstProfile, sizeof(tCsrRoamProfile)); + vos_mem_set(pDstProfile, sizeof(tCsrRoamProfile), 0); if(pSrcProfile->bssid) { - status = palAllocateMemory(pMac->hHdd, (void **)&pDstProfile->BSSIDs.bssid, sizeof(tCsrBssid)); + pDstProfile->BSSIDs.bssid = vos_mem_malloc(sizeof(tCsrBssid)); + if ( NULL == pDstProfile->BSSIDs.bssid ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; if(!HAL_STATUS_SUCCESS(status)) { break; } pDstProfile->BSSIDs.numOfBSSIDs = 1; - palCopyMemory(pMac->hHdd, pDstProfile->BSSIDs.bssid, pSrcProfile->bssid, sizeof(tCsrBssid)); + vos_mem_copy(pDstProfile->BSSIDs.bssid, pSrcProfile->bssid, + sizeof(tCsrBssid)); } if(pSrcProfile->SSID.ssId) { - status = palAllocateMemory(pMac->hHdd, (void **)&pDstProfile->SSIDs.SSIDList, sizeof(tCsrSSIDInfo)); + pDstProfile->SSIDs.SSIDList = vos_mem_malloc(sizeof(tCsrSSIDInfo)); + if ( NULL == pDstProfile->SSIDs.SSIDList ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; if(!HAL_STATUS_SUCCESS(status)) { break; @@ -6007,21 +6227,31 @@ eHalStatus csrRoamCopyConnectedProfile(tpAniSirGlobal pMac, tANI_U32 sessionId, pDstProfile->SSIDs.numOfSSIDs = 1; pDstProfile->SSIDs.SSIDList[0].handoffPermitted = pSrcProfile->handoffPermitted; pDstProfile->SSIDs.SSIDList[0].ssidHidden = pSrcProfile->ssidHidden; - palCopyMemory(pMac->hHdd, &pDstProfile->SSIDs.SSIDList[0].SSID, &pSrcProfile->SSID, sizeof(tSirMacSSid)); + vos_mem_copy(&pDstProfile->SSIDs.SSIDList[0].SSID, + &pSrcProfile->SSID, sizeof(tSirMacSSid)); } if(pSrcProfile->nAddIEAssocLength) { - status = palAllocateMemory(pMac->hHdd, (void **)&pDstProfile->pAddIEAssoc, pSrcProfile->nAddIEAssocLength); + pDstProfile->pAddIEAssoc = vos_mem_malloc(pSrcProfile->nAddIEAssocLength); + if ( NULL == pDstProfile->pAddIEAssoc) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; if(!HAL_STATUS_SUCCESS(status)) { smsLog( pMac, LOGE, FL(" failed to allocate memory for additional IEs ") ); break; } pDstProfile->nAddIEAssocLength = pSrcProfile->nAddIEAssocLength; - palCopyMemory(pMac->hHdd, pDstProfile->pAddIEAssoc, pSrcProfile->pAddIEAssoc, - pSrcProfile->nAddIEAssocLength); + vos_mem_copy(pDstProfile->pAddIEAssoc, pSrcProfile->pAddIEAssoc, + pSrcProfile->nAddIEAssocLength); } - status = palAllocateMemory(pMac->hHdd, (void **)&pDstProfile->ChannelInfo.ChannelList, 1); + pDstProfile->ChannelInfo.ChannelList = vos_mem_malloc(1); + if ( NULL == pDstProfile->ChannelInfo.ChannelList ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; + if(!HAL_STATUS_SUCCESS(status)) { break; @@ -6039,7 +6269,8 @@ eHalStatus csrRoamCopyConnectedProfile(tpAniSirGlobal pMac, tANI_U32 sessionId, pDstProfile->negotiatedMCEncryptionType = pSrcProfile->mcEncryptionType; pDstProfile->BSSType = pSrcProfile->BSSType; pDstProfile->CBMode = pSrcProfile->CBMode; - palCopyMemory(pMac->hHdd, &pDstProfile->Keys, &pSrcProfile->Keys, sizeof(pDstProfile->Keys)); + vos_mem_copy(&pDstProfile->Keys, &pSrcProfile->Keys, + sizeof(pDstProfile->Keys)); #ifdef WLAN_FEATURE_VOWIFI_11R if (pSrcProfile->MDID.mdiePresent) { @@ -6047,26 +6278,26 @@ eHalStatus csrRoamCopyConnectedProfile(tpAniSirGlobal pMac, tANI_U32 sessionId, pDstProfile->MDID.mobilityDomain = pSrcProfile->MDID.mobilityDomain; } #endif - + }while(0); - + if(!HAL_STATUS_SUCCESS(status)) { csrReleaseProfile(pMac, pDstProfile); pDstProfile = NULL; } - + return (status); } -eHalStatus csrRoamIssueConnect(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamProfile *pProfile, - tScanResultHandle hBSSList, +eHalStatus csrRoamIssueConnect(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamProfile *pProfile, + tScanResultHandle hBSSList, eCsrRoamReason reason, tANI_U32 roamId, tANI_BOOLEAN fImediate, tANI_BOOLEAN fClearScan) { eHalStatus status = eHAL_STATUS_SUCCESS; tSmeCmd *pCommand; - + pCommand = csrGetCommandBuffer(pMac); if(NULL == pCommand) { @@ -6086,11 +6317,11 @@ eHalStatus csrRoamIssueConnect(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoam //We can roam now //Since pProfile is NULL, we need to build our own profile, set everything to default //We can only support open and no encryption - pCommand->u.roamCmd.roamProfile.AuthType.numEntries = 1; + pCommand->u.roamCmd.roamProfile.AuthType.numEntries = 1; pCommand->u.roamCmd.roamProfile.AuthType.authType[0] = eCSR_AUTH_TYPE_OPEN_SYSTEM; pCommand->u.roamCmd.roamProfile.EncryptionType.numEntries = 1; pCommand->u.roamCmd.roamProfile.EncryptionType.encryptionType[0] = eCSR_ENCRYPT_TYPE_NONE; - pCommand->u.roamCmd.roamProfile.csrPersona = VOS_STA_MODE; + pCommand->u.roamCmd.roamProfile.csrPersona = VOS_STA_MODE; } else { @@ -6101,6 +6332,7 @@ eHalStatus csrRoamIssueConnect(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoam pCommand->u.roamCmd.fReleaseProfile = eANI_BOOLEAN_TRUE; } } + pCommand->command = eSmeCommandRoam; pCommand->sessionId = (tANI_U8)sessionId; pCommand->u.roamCmd.hBSSList = hBSSList; @@ -6119,7 +6351,7 @@ eHalStatus csrRoamIssueConnect(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoam csrReleaseCommandRoam( pMac, pCommand ); } } - + return (status); } eHalStatus csrRoamIssueReassoc(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamProfile *pProfile, @@ -6128,7 +6360,7 @@ eHalStatus csrRoamIssueReassoc(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoam { eHalStatus status = eHAL_STATUS_SUCCESS; tSmeCmd *pCommand; - + pCommand = csrGetCommandBuffer(pMac); if(NULL == pCommand) { @@ -6163,7 +6395,7 @@ eHalStatus csrRoamIssueReassoc(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoam pCommand->u.roamCmd.roamReason = reason; //We need to free the BssList when the command is done //For reassoc there is no BSS list, so the boolean set to false - pCommand->u.roamCmd.hBSSList = CSR_INVALID_SCANRESULT_HANDLE; + pCommand->u.roamCmd.hBSSList = CSR_INVALID_SCANRESULT_HANDLE; pCommand->u.roamCmd.fReleaseBssList = eANI_BOOLEAN_FALSE; pCommand->u.roamCmd.fReassoc = eANI_BOOLEAN_TRUE; status = csrQueueSmeCommand(pMac, pCommand, fImediate); @@ -6179,11 +6411,11 @@ eHalStatus csrRoamIssueReassoc(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoam eHalStatus csrRoamEnqueuePreauth(tpAniSirGlobal pMac, tANI_U32 sessionId, tpSirBssDescription pBssDescription, eCsrRoamReason reason, tANI_BOOLEAN fImmediate) -// , eCsrRoamReason reason, tANI_U32 roamId, tANI_BOOLEAN fImediate) +// , eCsrRoamReason reason, tANI_U32 roamId, tANI_BOOLEAN fImediate) { eHalStatus status = eHAL_STATUS_SUCCESS; tSmeCmd *pCommand; - + pCommand = csrGetCommandBuffer(pMac); if(NULL == pCommand) { @@ -6199,7 +6431,7 @@ eHalStatus csrRoamEnqueuePreauth(tpAniSirGlobal pMac, tANI_U32 sessionId, tpSirB pCommand->sessionId = (tANI_U8)sessionId; pCommand->u.roamCmd.roamReason = reason; //this is the important parameter - //in this case we are using this field for the "next" BSS + //in this case we are using this field for the "next" BSS pCommand->u.roamCmd.pLastRoamBss = pBssDescription; status = csrQueueSmeCommand(pMac, pCommand, fImmediate); if( !HAL_STATUS_SUCCESS( status ) ) @@ -6225,9 +6457,9 @@ eHalStatus csrRoamDequeuePreauth(tpAniSirGlobal pMac) if ( pEntry ) { pCommand = GET_BASE_ADDR( pEntry, tSmeCmd, Link ); - if ( (eSmeCommandRoam == pCommand->command) && + if ( (eSmeCommandRoam == pCommand->command) && (eCsrPerformPreauth == pCommand->u.roamCmd.roamReason)) - { + { smsLog( pMac, LOG1, FL("DQ-Command = %d, Reason = %d"), pCommand->command, pCommand->u.roamCmd.roamReason); if (csrLLRemoveEntry( &pMac->sme.smeCmdActiveList, pEntry, LL_ACCESS_LOCK )) { @@ -6245,7 +6477,7 @@ eHalStatus csrRoamDequeuePreauth(tpAniSirGlobal pMac) return eHAL_STATUS_SUCCESS; } -eHalStatus csrRoamConnectWithBSSList(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamProfile *pProfile, +eHalStatus csrRoamConnectWithBSSList(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamProfile *pProfile, tScanResultHandle hBssListIn, tANI_U32 *pRoamId) { eHalStatus status = eHAL_STATUS_FAILURE; @@ -6259,7 +6491,7 @@ eHalStatus csrRoamConnectWithBSSList(tpAniSirGlobal pMac, tANI_U32 sessionId, tC { *pRoamId = roamId; } - status = csrRoamIssueConnect(pMac, sessionId, pProfile, hBSSList, eCsrHddIssued, + status = csrRoamIssueConnect(pMac, sessionId, pProfile, hBSSList, eCsrHddIssued, roamId, eANI_BOOLEAN_FALSE, eANI_BOOLEAN_FALSE); if(!HAL_STATUS_SUCCESS(status)) { @@ -6270,7 +6502,7 @@ eHalStatus csrRoamConnectWithBSSList(tpAniSirGlobal pMac, tANI_U32 sessionId, tC return (status); } -eHalStatus csrRoamConnect(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamProfile *pProfile, +eHalStatus csrRoamConnect(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamProfile *pProfile, tScanResultHandle hBssListIn, tANI_U32 *pRoamId) { eHalStatus status = eHAL_STATUS_SUCCESS; @@ -6286,7 +6518,7 @@ eHalStatus csrRoamConnect(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamProfi } smsLog(pMac, LOG1, FL("called BSSType = %d authtype = %d encryType = %d"), pProfile->BSSType, pProfile->AuthType.authType[0], pProfile->EncryptionType.encryptionType[0]); - if( CSR_IS_WDS( pProfile ) && + if( CSR_IS_WDS( pProfile ) && !HAL_STATUS_SUCCESS( status = csrIsBTAMPAllowed( pMac, pProfile->operationChannel ) ) ) { smsLog(pMac, LOGE, FL("Request for BT AMP connection failed, channel requested is different than infra = %d"), @@ -6312,7 +6544,7 @@ eHalStatus csrRoamConnect(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamProfi } } #ifdef FEATURE_WLAN_BTAMP_UT_RF - pSession->maxRetryCount = CSR_JOIN_MAX_RETRY_COUNT; + pSession->maxRetryCount = CSR_JOIN_MAX_RETRY_COUNT; #endif if(CSR_INVALID_SCANRESULT_HANDLE != hBssListIn) { @@ -6329,10 +6561,14 @@ eHalStatus csrRoamConnect(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamProfi } else { - status = palAllocateMemory(pMac->hHdd, (void **)&pScanFilter, sizeof(tCsrScanResultFilter)); + pScanFilter = vos_mem_malloc(sizeof(tCsrScanResultFilter)); + if ( NULL == pScanFilter ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; if(HAL_STATUS_SUCCESS(status)) { - palZeroMemory(pMac->hHdd, pScanFilter, sizeof(tCsrScanResultFilter)); + vos_mem_set(pScanFilter, sizeof(tCsrScanResultFilter), 0); //Try to connect to any BSS if(NULL == pProfile) { @@ -6340,7 +6576,7 @@ eHalStatus csrRoamConnect(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamProfi pScanFilter->EncryptionType.numEntries = 1; pScanFilter->EncryptionType.encryptionType[0] = eCSR_ENCRYPT_TYPE_NONE; }//we don't have a profile - else + else { //Here is the profile we need to connect to status = csrRoamPrepareFilterFromProfile(pMac, pProfile, pScanFilter); @@ -6350,7 +6586,7 @@ eHalStatus csrRoamConnect(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamProfi { *pRoamId = roamId; } - + if(HAL_STATUS_SUCCESS(status)) { /*Save the WPS info*/ @@ -6369,7 +6605,7 @@ eHalStatus csrRoamConnect(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamProfi ) { //This can be started right away - status = csrRoamIssueConnect(pMac, sessionId, pProfile, NULL, eCsrHddIssued, + status = csrRoamIssueConnect(pMac, sessionId, pProfile, NULL, eCsrHddIssued, roamId, eANI_BOOLEAN_FALSE, eANI_BOOLEAN_FALSE); if(!HAL_STATUS_SUCCESS(status)) { @@ -6386,7 +6622,7 @@ eHalStatus csrRoamConnect(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamProfi smsLog(pMac, LOG1, "************ csrScanGetResult Status ********* %d", status); if(HAL_STATUS_SUCCESS(status)) { - status = csrRoamIssueConnect(pMac, sessionId, pProfile, hBSSList, eCsrHddIssued, + status = csrRoamIssueConnect(pMac, sessionId, pProfile, hBSSList, eCsrHddIssued, roamId, eANI_BOOLEAN_FALSE, eANI_BOOLEAN_FALSE); if(!HAL_STATUS_SUCCESS(status)) { @@ -6400,7 +6636,7 @@ eHalStatus csrRoamConnect(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamProfi //Check whether it is for start ibss if(CSR_IS_START_IBSS(pProfile)) { - status = csrRoamIssueConnect(pMac, sessionId, pProfile, NULL, eCsrHddIssued, + status = csrRoamIssueConnect(pMac, sessionId, pProfile, NULL, eCsrHddIssued, roamId, eANI_BOOLEAN_FALSE, eANI_BOOLEAN_FALSE); if(!HAL_STATUS_SUCCESS(status)) { @@ -6411,7 +6647,7 @@ eHalStatus csrRoamConnect(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamProfi else { //scan for this SSID - status = csrScanForSSID(pMac, sessionId, pProfile, roamId); + status = csrScanForSSID(pMac, sessionId, pProfile, roamId, TRUE); if(!HAL_STATUS_SUCCESS(status)) { smsLog(pMac, LOGE, FL(" CSR failed to issue SSID scan command with status = 0x%08X"), status); @@ -6434,8 +6670,8 @@ eHalStatus csrRoamConnect(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamProfi csrFreeScanFilter(pMac, pScanFilter); } }//Got the scan filter from profile - - palFreeMemory(pMac->hHdd, pScanFilter); + + vos_mem_free(pScanFilter); }//allocated memory for pScanFilter }//No Bsslist coming in //tell the caller if we fail to trigger a join request @@ -6443,9 +6679,9 @@ eHalStatus csrRoamConnect(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamProfi { csrRoamCallCallback(pMac, sessionId, NULL, roamId, eCSR_ROAM_FAILED, eCSR_ROAM_RESULT_FAILURE); } - + return (status); -} +} eHalStatus csrRoamReassoc(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamProfile *pProfile, tCsrRoamModifyProfileFields modProfileFields, tANI_U32 *pRoamId) @@ -6469,7 +6705,7 @@ eHalStatus csrRoamReassoc(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamProfi { if(pProfile) { - if(pProfile->SSIDs.numOfSSIDs && + if(pProfile->SSIDs.numOfSSIDs && csrIsSsidInList(pMac, &pSession->connectedProfile.SSID, &pProfile->SSIDs)) { fCallCallback = eANI_BOOLEAN_FALSE; @@ -6479,9 +6715,9 @@ eHalStatus csrRoamReassoc(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamProfi smsLog(pMac, LOG1, FL("Not connected to the same SSID asked in the profile")); } } - else if(!palEqualMemory(pMac->hHdd, &modProfileFields, - &pSession->connectedProfile.modifyProfileFields, - sizeof(tCsrRoamModifyProfileFields))) + else if (!vos_mem_compare(&modProfileFields, + &pSession->connectedProfile.modifyProfileFields, + sizeof(tCsrRoamModifyProfileFields))) { fCallCallback = eANI_BOOLEAN_FALSE; } @@ -6503,12 +6739,12 @@ eHalStatus csrRoamReassoc(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamProfi *pRoamId = roamId; } - status = csrRoamIssueReassoc(pMac, sessionId, pProfile, &modProfileFields, + status = csrRoamIssueReassoc(pMac, sessionId, pProfile, &modProfileFields, eCsrHddIssuedReassocToSameAP, roamId, eANI_BOOLEAN_FALSE); } else { - status = csrRoamCallCallback(pMac, sessionId, NULL, roamId, + status = csrRoamCallCallback(pMac, sessionId, NULL, roamId, eCSR_ROAM_FAILED, eCSR_ROAM_RESULT_FAILURE); } return status; @@ -6527,7 +6763,7 @@ eHalStatus csrRoamJoinLastProfile(tpAniSirGlobal pMac, tANI_U32 sessionId) smsLog(pMac, LOGE, FL(" session %d not found "), sessionId); return eHAL_STATUS_FAILURE; } - + do { if(pSession->pCurRoamProfile) @@ -6535,19 +6771,28 @@ eHalStatus csrRoamJoinLastProfile(tpAniSirGlobal pMac, tANI_U32 sessionId) csrScanCancelIdleScan(pMac); csrScanAbortMacScanNotForConnect(pMac, sessionId); //We have to make a copy of pCurRoamProfile because it will be free inside csrRoamIssueConnect - status = palAllocateMemory(pMac->hHdd, (void **)&pProfile, sizeof(tCsrRoamProfile)); + pProfile = vos_mem_malloc(sizeof(tCsrRoamProfile)); + if ( NULL == pProfile ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; if(!HAL_STATUS_SUCCESS(status)) break; - palZeroMemory(pMac->hHdd, pProfile, sizeof(tCsrRoamProfile)); + vos_mem_set(pProfile, sizeof(tCsrRoamProfile), 0); status = csrRoamCopyProfile(pMac, pProfile, pSession->pCurRoamProfile); - if(!HAL_STATUS_SUCCESS(status)) + if (!HAL_STATUS_SUCCESS(status)) break; - status = palAllocateMemory(pMac->hHdd, (void **)&pScanFilter, sizeof(tCsrScanResultFilter)); + pScanFilter = vos_mem_malloc(sizeof(tCsrScanResultFilter)); + if ( NULL == pScanFilter ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; + if(!HAL_STATUS_SUCCESS(status)) { break; } - palZeroMemory(pMac->hHdd, pScanFilter, sizeof(tCsrScanResultFilter)); + vos_mem_set(pScanFilter, sizeof(tCsrScanResultFilter), 0); status = csrRoamPrepareFilterFromProfile(pMac, pProfile, pScanFilter); if(!HAL_STATUS_SUCCESS(status)) { @@ -6559,7 +6804,7 @@ eHalStatus csrRoamJoinLastProfile(tpAniSirGlobal pMac, tANI_U32 sessionId) { //we want to put the last connected BSS to the very beginning, if possible csrMoveBssToHeadFromBSSID(pMac, &pSession->connectedProfile.bssid, hBSSList); - status = csrRoamIssueConnect(pMac, sessionId, pProfile, hBSSList, eCsrHddIssued, + status = csrRoamIssueConnect(pMac, sessionId, pProfile, hBSSList, eCsrHddIssued, roamId, eANI_BOOLEAN_FALSE, eANI_BOOLEAN_FALSE); if(!HAL_STATUS_SUCCESS(status)) { @@ -6571,7 +6816,7 @@ eHalStatus csrRoamJoinLastProfile(tpAniSirGlobal pMac, tANI_U32 sessionId) { //Do a scan on this profile //scan for this SSID only in case the AP suppresses SSID - status = csrScanForSSID(pMac, sessionId, pProfile, roamId); + status = csrScanForSSID(pMac, sessionId, pProfile, roamId, TRUE); if(!HAL_STATUS_SUCCESS(status)) { break; @@ -6587,12 +6832,12 @@ eHalStatus csrRoamJoinLastProfile(tpAniSirGlobal pMac, tANI_U32 sessionId) if(pScanFilter) { csrFreeScanFilter(pMac, pScanFilter); - palFreeMemory(pMac->hHdd, pScanFilter); + vos_mem_free(pScanFilter); } if(NULL != pProfile) { csrReleaseProfile(pMac, pProfile); - palFreeMemory(pMac->hHdd, pProfile); + vos_mem_free(pProfile); } return (status); } @@ -6629,7 +6874,7 @@ eHalStatus csrRoamProcessDisassocDeauth( tpAniSirGlobal pMac, tSmeCmd *pCommand, tANI_BOOLEAN fComplete = eANI_BOOLEAN_FALSE; eCsrRoamSubState NewSubstate; tANI_U32 sessionId = pCommand->sessionId; - + // change state to 'Roaming'... csrRoamStateChange( pMac, eCSR_ROAMING_STATE_JOINING, sessionId ); @@ -6643,7 +6888,7 @@ eHalStatus csrRoamProcessDisassocDeauth( tpAniSirGlobal pMac, tSmeCmd *pCommand, { smsLog(pMac, LOG1, FL(" restore AC weights (%d-%d-%d-%d)"), pMac->roam.ucACWeights[0], pMac->roam.ucACWeights[1], pMac->roam.ucACWeights[2], pMac->roam.ucACWeights[3]); - //Restore AC weight in case we change it + //Restore AC weight in case we change it WLANTL_SetACWeights(pMac->roam.gVosContext, pMac->roam.ucACWeights); // in Infrasturcture, we need to disassociate from the Infrastructure network... NewSubstate = eCSR_ROAM_SUBSTATE_DISASSOC_FORCED; @@ -6671,11 +6916,11 @@ eHalStatus csrRoamProcessDisassocDeauth( tpAniSirGlobal pMac, tSmeCmd *pCommand, //This has to be WDS station else if( csrIsConnStateConnectedWds( pMac, sessionId ) ) //This has to be WDS station { - + pCommand->u.roamCmd.fStopWds = eANI_BOOLEAN_TRUE; if( fDisassoc ) { - status = csrRoamIssueDisassociate( pMac, sessionId, + status = csrRoamIssueDisassociate( pMac, sessionId, eCSR_ROAM_SUBSTATE_DISCONNECT_CONTINUE_ROAMING, fMICFailure ); fComplete = (!HAL_STATUS_SUCCESS(status)); } @@ -6695,7 +6940,7 @@ eHalStatus csrRoamProcessDisassocDeauth( tpAniSirGlobal pMac, tSmeCmd *pCommand, { if ( csrIsConnStateInfra( pMac, sessionId ) ) { - //Set the state to disconnect here + //Set the state to disconnect here pMac->roam.roamSession[sessionId].connectState = eCSR_ASSOC_STATE_TYPE_NOT_CONNECTED; } } @@ -6727,7 +6972,7 @@ eHalStatus csrRoamIssueDisassociateCmd( tpAniSirGlobal pMac, tANI_U32 sessionId, { smsLog( pMac, LOG1, FL(" reason = %d"), reason ); pCommand = csrGetCommandBuffer( pMac ); - if ( !pCommand ) + if ( !pCommand ) { smsLog( pMac, LOGE, FL(" fail to get command buffer") ); status = eHAL_STATUS_RESOURCES; @@ -6781,7 +7026,7 @@ eHalStatus csrRoamIssueStopBssCmd( tpAniSirGlobal pMac, tANI_U32 sessionId, tANI eHalStatus status = eHAL_STATUS_SUCCESS; tSmeCmd *pCommand; pCommand = csrGetCommandBuffer( pMac ); - if ( NULL != pCommand ) + if ( NULL != pCommand ) { //Change the substate in case it is wait-for-key if( CSR_IS_WAIT_FOR_KEY( pMac, sessionId) ) @@ -6817,7 +7062,7 @@ eHalStatus csrRoamDisconnectInternal(tpAniSirGlobal pMac, tANI_U32 sessionId, eC smsLog(pMac, LOGE, FL(" session %d not found "), sessionId); return eHAL_STATUS_FAILURE; } - + #ifdef FEATURE_WLAN_BTAMP_UT_RF //Stop te retry pSession->maxRetryCount = 0; @@ -6825,10 +7070,10 @@ eHalStatus csrRoamDisconnectInternal(tpAniSirGlobal pMac, tANI_U32 sessionId, eC #endif //Not to call cancel roaming here //Only issue disconnect when necessary - if(csrIsConnStateConnected(pMac, sessionId) || csrIsBssTypeIBSS(pSession->connectedProfile.BSSType) - || csrIsBssTypeWDS(pSession->connectedProfile.BSSType) + if(csrIsConnStateConnected(pMac, sessionId) || csrIsBssTypeIBSS(pSession->connectedProfile.BSSType) + || csrIsBssTypeWDS(pSession->connectedProfile.BSSType) || csrIsRoamCommandWaitingForSession(pMac, sessionId) ) - + { smsLog(pMac, LOG2, FL("called")); status = csrRoamIssueDisassociateCmd(pMac, sessionId, reason); @@ -6845,16 +7090,14 @@ eHalStatus csrRoamDisconnect(tpAniSirGlobal pMac, tANI_U32 sessionId, eCsrRoamDi smsLog(pMac, LOGE, FL(" session %d not found "), sessionId); return eHAL_STATUS_FAILURE; } - + csrRoamCancelRoaming(pMac, sessionId); - pSession->ibss_join_pending = FALSE; - csrRoamStopIbssJoinTimer(pMac, sessionId); csrRoamRemoveDuplicateCommand(pMac, sessionId, NULL, eCsrForcedDisassoc); - + return (csrRoamDisconnectInternal(pMac, sessionId, reason)); } -eHalStatus csrRoamSaveConnectedInfomation(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamProfile *pProfile, +eHalStatus csrRoamSaveConnectedInfomation(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamProfile *pProfile, tSirBssDescription *pSirBssDesc, tDot11fBeaconIEs *pIes) { eHalStatus status = eHAL_STATUS_SUCCESS; @@ -6868,8 +7111,12 @@ eHalStatus csrRoamSaveConnectedInfomation(tpAniSirGlobal pMac, tANI_U32 sessionI smsLog(pMac, LOGE, FL(" session %d not found "), sessionId); return eHAL_STATUS_FAILURE; } - - palZeroMemory(pMac->hHdd, &pSession->connectedProfile, sizeof(tCsrRoamConnectedProfile)); + if(pConnectProfile->pAddIEAssoc) + { + vos_mem_free(pConnectProfile->pAddIEAssoc); + pConnectProfile->pAddIEAssoc = NULL; + } + vos_mem_set(&pSession->connectedProfile, sizeof(tCsrRoamConnectedProfile), 0); pConnectProfile->AuthType = pProfile->negotiatedAuthType; pConnectProfile->AuthInfo = pProfile->AuthType; pConnectProfile->CBMode = pProfile->CBMode; //*** this may not be valid @@ -6882,22 +7129,25 @@ eHalStatus csrRoamSaveConnectedInfomation(tpAniSirGlobal pMac, tANI_U32 sessionI pConnectProfile->operationChannel = pSirBssDesc->channelId; pConnectProfile->beaconInterval = pSirBssDesc->beaconInterval; - palCopyMemory(pMac->hHdd, &pConnectProfile->Keys, &pProfile->Keys, sizeof(tCsrKeys)); + vos_mem_copy(&pConnectProfile->Keys, &pProfile->Keys, sizeof(tCsrKeys)); /* saving the addional IE`s like Hot spot indication element and extended capabilities */ if(pProfile->nAddIEAssocLength) { - status = palAllocateMemory(pMac->hHdd, - (void **)&pConnectProfile->pAddIEAssoc, pProfile->nAddIEAssocLength); - if(!HAL_STATUS_SUCCESS(status)) + pConnectProfile->pAddIEAssoc = vos_mem_malloc(pProfile->nAddIEAssocLength); + if ( NULL == pConnectProfile->pAddIEAssoc ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; + if (!HAL_STATUS_SUCCESS(status)) { smsLog(pMac, LOGE, FL("Failed to allocate memory for additional IEs")) ; return eHAL_STATUS_FAILURE; } pConnectProfile->nAddIEAssocLength = pProfile->nAddIEAssocLength; - palCopyMemory(pMac->hHdd, pConnectProfile->pAddIEAssoc, pProfile->pAddIEAssoc, - pProfile->nAddIEAssocLength); + vos_mem_copy(pConnectProfile->pAddIEAssoc, pProfile->pAddIEAssoc, + pProfile->nAddIEAssocLength); } - + //Save bssid csrGetBssIdBssDesc(pMac, pSirBssDesc, &pConnectProfile->bssid); #ifdef WLAN_FEATURE_VOWIFI_11R @@ -6912,12 +7162,12 @@ eHalStatus csrRoamSaveConnectedInfomation(tpAniSirGlobal pMac, tANI_U32 sessionI status = csrGetParsedBssDescriptionIEs(pMac, pSirBssDesc, &pIesTemp); } #ifdef FEATURE_WLAN_CCX - if ((csrIsProfileCCX(pProfile) || - ((pIesTemp->CCXVersion.present) - && ((pProfile->negotiatedAuthType == eCSR_AUTH_TYPE_OPEN_SYSTEM) - || (pProfile->negotiatedAuthType == eCSR_AUTH_TYPE_WPA) - || (pProfile->negotiatedAuthType == eCSR_AUTH_TYPE_WPA_PSK) - || (pProfile->negotiatedAuthType == eCSR_AUTH_TYPE_RSN) + if ((csrIsProfileCCX(pProfile) || + ((pIesTemp->CCXVersion.present) + && ((pProfile->negotiatedAuthType == eCSR_AUTH_TYPE_OPEN_SYSTEM) + || (pProfile->negotiatedAuthType == eCSR_AUTH_TYPE_WPA) + || (pProfile->negotiatedAuthType == eCSR_AUTH_TYPE_WPA_PSK) + || (pProfile->negotiatedAuthType == eCSR_AUTH_TYPE_RSN) #ifdef WLAN_FEATURE_11W || (pProfile->negotiatedAuthType == eCSR_AUTH_TYPE_RSN_PSK_SHA256) #endif @@ -6933,13 +7183,13 @@ eHalStatus csrRoamSaveConnectedInfomation(tpAniSirGlobal pMac, tANI_U32 sessionI if(pIesTemp->SSID.present) { pConnectProfile->SSID.length = pIesTemp->SSID.num_ssid; - palCopyMemory(pMac->hHdd, pConnectProfile->SSID.ssId, - pIesTemp->SSID.ssid, pIesTemp->SSID.num_ssid); + vos_mem_copy(pConnectProfile->SSID.ssId, pIesTemp->SSID.ssid, + pIesTemp->SSID.num_ssid); } - + //Save the bss desc status = csrRoamSaveConnectedBssDesc(pMac, sessionId, pSirBssDesc); - + if( CSR_IS_QOS_BSS(pIesTemp) || pIesTemp->HTCaps.present) { //Some HT AP's dont send WMM IE so in that case we assume all HT Ap's are Qos Enabled AP's @@ -6952,28 +7202,29 @@ eHalStatus csrRoamSaveConnectedInfomation(tpAniSirGlobal pMac, tANI_U32 sessionI if ( NULL == pIes ) { //Free memory if it allocated locally - palFreeMemory(pMac->hHdd, pIesTemp); + vos_mem_free(pIesTemp); } } //Save Qos connection pConnectProfile->qosConnection = pMac->roam.roamSession[sessionId].fWMMConnection; - + if(!HAL_STATUS_SUCCESS(status)) { csrFreeConnectBssDesc(pMac, sessionId); } for(index = 0; index < pProfile->SSIDs.numOfSSIDs; index++) { - if((pProfile->SSIDs.SSIDList[index].SSID.length == pConnectProfile->SSID.length) && - palEqualMemory(pMac->hHdd, pProfile->SSIDs.SSIDList[index].SSID.ssId, - pConnectProfile->SSID.ssId, pConnectProfile->SSID.length)) + if ((pProfile->SSIDs.SSIDList[index].SSID.length == pConnectProfile->SSID.length) && + vos_mem_compare(pProfile->SSIDs.SSIDList[index].SSID.ssId, + pConnectProfile->SSID.ssId, + pConnectProfile->SSID.length)) { pConnectProfile->handoffPermitted = pProfile->SSIDs.SSIDList[index].handoffPermitted; break; } pConnectProfile->handoffPermitted = FALSE; } - + return (status); } @@ -6987,7 +7238,7 @@ static void csrRoamJoinRspProcessor( tpAniSirGlobal pMac, tSirSmeJoinRsp *pSmeJo { pCommand = GET_BASE_ADDR(pEntry, tSmeCmd, Link); } - if ( eSIR_SME_SUCCESS == pSmeJoinRsp->statusCode ) + if ( eSIR_SME_SUCCESS == pSmeJoinRsp->statusCode ) { if(pCommand && eCsrSmeIssuedAssocToSimilarAP == pCommand->u.roamCmd.roamReason) { @@ -7006,8 +7257,8 @@ static void csrRoamJoinRspProcessor( tpAniSirGlobal pMac, tSirSmeJoinRsp *pSmeJo smsLog(pMac, LOGE, FL(" session %d not found "), pSmeJoinRsp->sessionId); return; } - - + + //The head of the active list is the request we sent //Try to get back the same profile and roam again if(pCommand) @@ -7016,7 +7267,7 @@ static void csrRoamJoinRspProcessor( tpAniSirGlobal pMac, tSirSmeJoinRsp *pSmeJo } pSession->joinFailStatusCode.statusCode = pSmeJoinRsp->statusCode; pSession->joinFailStatusCode.reasonCode = pSmeJoinRsp->protStatusCode; - smsLog( pMac, LOGW, "SmeJoinReq failed with statusCode= 0x%08lX [%d]", pSmeJoinRsp->statusCode, pSmeJoinRsp->statusCode ); + smsLog( pMac, LOGW, "SmeJoinReq failed with statusCode= 0x%08X [%d]", pSmeJoinRsp->statusCode, pSmeJoinRsp->statusCode ); #if defined WLAN_FEATURE_NEIGHBOR_ROAMING /* If Join fails while Handoff is in progress, indicate disassociated event to supplicant to reconnect */ if (csrRoamIsHandoffInProgress(pMac)) @@ -7041,8 +7292,8 @@ static void csrRoamJoinRspProcessor( tpAniSirGlobal pMac, tSirSmeJoinRsp *pSmeJo else { csrRoam(pMac, pCommand); - } - } + } + } else { csrRoamComplete( pMac, eCsrNothingToJoin, NULL ); @@ -7050,7 +7301,7 @@ static void csrRoamJoinRspProcessor( tpAniSirGlobal pMac, tSirSmeJoinRsp *pSmeJo } /*else: ( eSIR_SME_SUCCESS == pSmeJoinRsp->statusCode ) */ } -eHalStatus csrRoamIssueJoin( tpAniSirGlobal pMac, tANI_U32 sessionId, tSirBssDescription *pSirBssDesc, +eHalStatus csrRoamIssueJoin( tpAniSirGlobal pMac, tANI_U32 sessionId, tSirBssDescription *pSirBssDesc, tDot11fBeaconIEs *pIes, tCsrRoamProfile *pProfile, tANI_U32 roamId ) { @@ -7058,7 +7309,7 @@ eHalStatus csrRoamIssueJoin( tpAniSirGlobal pMac, tANI_U32 sessionId, tSirBssDes smsLog( pMac, LOG1, "Attempting to Join Bssid= %02x-%02x-%02x-%02x-%02x-%02x", pSirBssDesc->bssId[ 0 ],pSirBssDesc->bssId[ 1 ],pSirBssDesc->bssId[ 2 ], pSirBssDesc->bssId[ 3 ],pSirBssDesc->bssId[ 4 ],pSirBssDesc->bssId[ 5 ] ); - + // Set the roaming substate to 'join attempt'... csrRoamSubstateChange( pMac, eCSR_ROAM_SUBSTATE_JOIN_REQ, sessionId); // attempt to Join this BSS... @@ -7066,7 +7317,7 @@ eHalStatus csrRoamIssueJoin( tpAniSirGlobal pMac, tANI_U32 sessionId, tSirBssDes return (status); } -static eHalStatus csrRoamIssueReassociate( tpAniSirGlobal pMac, tANI_U32 sessionId, tSirBssDescription *pSirBssDesc, +static eHalStatus csrRoamIssueReassociate( tpAniSirGlobal pMac, tANI_U32 sessionId, tSirBssDescription *pSirBssDesc, tDot11fBeaconIEs *pIes, tCsrRoamProfile *pProfile) { csrRoamStateChange( pMac, eCSR_ROAMING_STATE_JOINING, sessionId); @@ -7074,7 +7325,7 @@ static eHalStatus csrRoamIssueReassociate( tpAniSirGlobal pMac, tANI_U32 session csrRoamSubstateChange( pMac, eCSR_ROAM_SUBSTATE_REASSOC_REQ, sessionId ); smsLog(pMac, LOGE, FL(" calling csrSendJoinReqMsg (eWNI_SME_REASSOC_REQ)")); - + // attempt to Join this BSS... return csrSendJoinReqMsg( pMac, sessionId, pSirBssDesc, pProfile, pIes, eWNI_SME_REASSOC_REQ); } @@ -7086,7 +7337,7 @@ void csrRoamReissueRoamCommand(tpAniSirGlobal pMac) tCsrRoamInfo roamInfo; tANI_U32 sessionId; tCsrRoamSession *pSession; - + pEntry = csrLLPeekHead(&pMac->sme.smeCmdActiveList, LL_ACCESS_LOCK); if(pEntry) { @@ -7101,25 +7352,25 @@ void csrRoamReissueRoamCommand(tpAniSirGlobal pMac) smsLog(pMac, LOGE, FL(" session %d not found "), sessionId); return; } - + if( pCommand->u.roamCmd.fStopWds ) { - palZeroMemory(pMac->hHdd, &roamInfo, sizeof(tCsrRoamInfo)); + vos_mem_set(&roamInfo, sizeof(tCsrRoamInfo), 0); roamInfo.pBssDesc = pCommand->u.roamCmd.pLastRoamBss; roamInfo.statusCode = pSession->joinFailStatusCode.statusCode; roamInfo.reasonCode = pSession->joinFailStatusCode.reasonCode; if (CSR_IS_WDS(&pSession->connectedProfile)){ pSession->connectState = eCSR_ASSOC_STATE_TYPE_WDS_DISCONNECTED; - csrRoamCallCallback(pMac, sessionId, &roamInfo, pCommand->u.roamCmd.roamId, - eCSR_ROAM_WDS_IND, + csrRoamCallCallback(pMac, sessionId, &roamInfo, pCommand->u.roamCmd.roamId, + eCSR_ROAM_WDS_IND, eCSR_ROAM_RESULT_WDS_DISASSOCIATED); }else if (CSR_IS_INFRA_AP(&pSession->connectedProfile)){ pSession->connectState = eCSR_ASSOC_STATE_TYPE_INFRA_DISCONNECTED; csrRoamCallCallback(pMac, sessionId, &roamInfo, pCommand->u.roamCmd.roamId, eCSR_ROAM_INFRA_IND, eCSR_ROAM_RESULT_INFRA_DISASSOCIATED); - } - + } + if( !HAL_STATUS_SUCCESS( csrRoamIssueStopBss( pMac, sessionId, eCSR_ROAM_SUBSTATE_STOP_BSS_REQ ) ) ) { @@ -7138,7 +7389,7 @@ void csrRoamReissueRoamCommand(tpAniSirGlobal pMac) smsLog(pMac, LOGW, " Command is not roaming after disassociated"); } } - else + else { smsLog(pMac, LOGE, " Disassoc rsp cannot continue because no command is available"); } @@ -7219,8 +7470,8 @@ tANI_BOOLEAN csrIsScanForRoamCommandActive( tpAniSirGlobal pMac ) if( pEntry ) { pCommand = GET_BASE_ADDR(pEntry, tCsrCmd, Link); - if( ( eCsrRoamCommandScan == pCommand->command ) && - ( ( eCsrScanForSsid == pCommand->u.scanCmd.reason ) || + if( ( eCsrRoamCommandScan == pCommand->command ) && + ( ( eCsrScanForSsid == pCommand->u.scanCmd.reason ) || ( eCsrScanForCapsChange == pCommand->u.scanCmd.reason ) || ( eCsrScanP2PFindPeer == pCommand->u.scanCmd.reason ) ) ) { @@ -7236,13 +7487,13 @@ eHalStatus csrRoamIssueReassociateCmd( tpAniSirGlobal pMac, tANI_U32 sessionId ) tSmeCmd *pCommand = NULL; tANI_BOOLEAN fHighPriority = eANI_BOOLEAN_TRUE; tANI_BOOLEAN fRemoveCmd = FALSE; - tListElem *pEntry; + tListElem *pEntry; // Delete the old assoc command. All is setup for reassoc to be serialized pEntry = csrLLPeekHead( &pMac->sme.smeCmdActiveList, LL_ACCESS_LOCK ); if ( pEntry ) { pCommand = GET_BASE_ADDR( pEntry, tSmeCmd, Link ); - if ( !pCommand ) + if ( !pCommand ) { smsLog( pMac, LOGE, FL(" fail to get command buffer") ); return eHAL_STATUS_RESOURCES; @@ -7253,7 +7504,7 @@ eHalStatus csrRoamIssueReassociateCmd( tpAniSirGlobal pMac, tANI_U32 sessionId ) { fRemoveCmd = csrLLRemoveEntry( &pMac->sme.smeCmdActiveList, pEntry, LL_ACCESS_LOCK ); } - else + else { smsLog( pMac, LOGE, FL(" Unexpected active roam command present ") ); } @@ -7270,7 +7521,7 @@ eHalStatus csrRoamIssueReassociateCmd( tpAniSirGlobal pMac, tANI_U32 sessionId ) smsLog( pMac, LOGE, FL(" fail to get command buffer as expected based on previous connect roam command") ); return eHAL_STATUS_RESOURCES; } - do + do { //Change the substate in case it is wait-for-key if( CSR_IS_WAIT_FOR_KEY( pMac, sessionId ) ) @@ -7313,12 +7564,12 @@ static void csrRoamingStateConfigCnfProcessor( tpAniSirGlobal pMac, tANI_U32 res smsLog(pMac, LOGE, FL(" session %d not found "), sessionId); return; } - + if(CSR_IS_ROAMING(pSession) && pSession->fCancelRoaming) { //the roaming is cancelled. Simply complete the command smsLog(pMac, LOGW, FL(" Roam command cancelled")); - csrRoamComplete(pMac, eCsrNothingToJoin, NULL); + csrRoamComplete(pMac, eCsrNothingToJoin, NULL); } /* If the roaming has stopped, not to continue the roaming command*/ else if ( !CSR_IS_ROAMING(pSession) && CSR_IS_ROAMING_COMMAND(pCommand) ) @@ -7342,12 +7593,12 @@ static void csrRoamingStateConfigCnfProcessor( tpAniSirGlobal pMac, tANI_U32 res pBssDesc = &pScanResult->Result.BssDescriptor; } if ( csrIsBssTypeIBSS( pCommand->u.roamCmd.roamProfile.BSSType ) || - CSR_IS_WDS( &pCommand->u.roamCmd.roamProfile ) - || CSR_IS_INFRA_AP(&pCommand->u.roamCmd.roamProfile) + CSR_IS_WDS( &pCommand->u.roamCmd.roamProfile ) + || CSR_IS_INFRA_AP(&pCommand->u.roamCmd.roamProfile) ) { if(!HAL_STATUS_SUCCESS(csrRoamIssueStartBss( pMac, sessionId, - &pSession->bssParams, &pCommand->u.roamCmd.roamProfile, + &pSession->bssParams, &pCommand->u.roamCmd.roamProfile, pBssDesc, pCommand->u.roamCmd.roamId ))) { smsLog(pMac, LOGW, " CSR start BSS failed"); @@ -7363,9 +7614,9 @@ static void csrRoamingStateConfigCnfProcessor( tpAniSirGlobal pMac, tANI_U32 res //We need to complete the command csrRoamComplete(pMac, eCsrJoinFailure, NULL); return; - } + } // If we are roaming TO an Infrastructure BSS... - VOS_ASSERT(pScanResult != NULL); + VOS_ASSERT(pScanResult != NULL); if ( csrIsInfraBssDesc( pBssDesc ) ) { tDot11fBeaconIEs *pIesLocal = (tDot11fBeaconIEs *)pScanResult->Result.pvIes; @@ -7375,7 +7626,7 @@ static void csrRoamingStateConfigCnfProcessor( tpAniSirGlobal pMac, tANI_U32 res if( csrIsConnStateConnectedInfra( pMac, sessionId ) ) { // ...and the SSIDs are equal, then we Reassoc. - if ( csrIsSsidEqual( pMac, pSession->pConnectBssDesc, pBssDesc, + if ( csrIsSsidEqual( pMac, pSession->pConnectBssDesc, pBssDesc, pIesLocal ) ) // ..and currently in an infrastructure connection { @@ -7386,11 +7637,11 @@ static void csrRoamingStateConfigCnfProcessor( tpAniSirGlobal pMac, tANI_U32 res } else { - + // otherwise, we have to issue a new Join request to LIM because we disassociated from the // previously associated AP. - if(!HAL_STATUS_SUCCESS(csrRoamIssueJoin( pMac, sessionId, pBssDesc, - pIesLocal, + if(!HAL_STATUS_SUCCESS(csrRoamIssueJoin( pMac, sessionId, pBssDesc, + pIesLocal, &pCommand->u.roamCmd.roamProfile, pCommand->u.roamCmd.roamId ))) { //try something else @@ -7401,22 +7652,22 @@ static void csrRoamingStateConfigCnfProcessor( tpAniSirGlobal pMac, tANI_U32 res else { eHalStatus status = eHAL_STATUS_SUCCESS; - + /* We need to come with other way to figure out that this is because of HO in BMP The below API will be only available for Android as it uses a different HO algorithm */ - /* Reassoc request will be used only for CCX and 11r handoff whereas other legacy roaming should + /* Reassoc request will be used only for CCX and 11r handoff whereas other legacy roaming should * use join request */ #ifdef WLAN_FEATURE_VOWIFI_11R - if (csrRoamIsHandoffInProgress(pMac) && + if (csrRoamIsHandoffInProgress(pMac) && csrRoamIs11rAssoc(pMac)) { - status = csrRoamIssueReassociate(pMac, sessionId, pBssDesc, + status = csrRoamIssueReassociate(pMac, sessionId, pBssDesc, (tDot11fBeaconIEs *)( pScanResult->Result.pvIes ), &pCommand->u.roamCmd.roamProfile); } else #endif #ifdef FEATURE_WLAN_CCX - if (csrRoamIsHandoffInProgress(pMac) && + if (csrRoamIsHandoffInProgress(pMac) && csrRoamIsCCXAssoc(pMac)) { // Now serialize the reassoc command. @@ -7425,7 +7676,7 @@ static void csrRoamingStateConfigCnfProcessor( tpAniSirGlobal pMac, tANI_U32 res else #endif #ifdef FEATURE_WLAN_LFR - if (csrRoamIsHandoffInProgress(pMac) && + if (csrRoamIsHandoffInProgress(pMac) && csrRoamIsFastRoamEnabled(pMac, sessionId)) { // Now serialize the reassoc command. @@ -7436,7 +7687,7 @@ static void csrRoamingStateConfigCnfProcessor( tpAniSirGlobal pMac, tANI_U32 res // else we are not connected and attempting to Join. Issue the // Join request. { - status = csrRoamIssueJoin( pMac, sessionId, pBssDesc, + status = csrRoamIssueJoin( pMac, sessionId, pBssDesc, (tDot11fBeaconIEs *)( pScanResult->Result.pvIes ), &pCommand->u.roamCmd.roamProfile, pCommand->u.roamCmd.roamId ); } @@ -7449,7 +7700,7 @@ static void csrRoamingStateConfigCnfProcessor( tpAniSirGlobal pMac, tANI_U32 res if( !pScanResult->Result.pvIes ) { //Locally allocated - palFreeMemory(pMac->hHdd, pIesLocal); + vos_mem_free(pIesLocal); } } }//if ( csrIsInfraBssDesc( pBssDesc ) ) @@ -7461,7 +7712,7 @@ static void csrRoamingStateConfigCnfProcessor( tpAniSirGlobal pMac, tANI_U32 res }//if ( WNI_CFG_SUCCESS == result ) else { - // In the event the configuration failed, for infra let the roam processor + // In the event the configuration failed, for infra let the roam processor //attempt to join something else... if( pCommand->u.roamCmd.pRoamBssEntry && CSR_IS_INFRASTRUCTURE( &pCommand->u.roamCmd.roamProfile ) ) { @@ -7487,7 +7738,7 @@ static void csrRoamRoamingStateAuthRspProcessor( tpAniSirGlobal pMac, tSirSmeAut { //No one is sending eWNI_SME_AUTH_REQ to PE. smsLog(pMac, LOGW, FL("is no-op")); - if ( eSIR_SME_SUCCESS == pSmeAuthRsp->statusCode ) + if ( eSIR_SME_SUCCESS == pSmeAuthRsp->statusCode ) { smsLog( pMac, LOGW, "CSR SmeAuthReq Successful" ); // Successfully authenticated with a new Bss. Attempt to stop the current Bss and @@ -7496,7 +7747,7 @@ static void csrRoamRoamingStateAuthRspProcessor( tpAniSirGlobal pMac, tSirSmeAut roamStopNetwork( pAdapter, &pBssDesc->SirBssDescription );***/ } else { - smsLog( pMac, LOGW, "CSR SmeAuthReq failed with statusCode= 0x%08lX [%d]", pSmeAuthRsp->statusCode, pSmeAuthRsp->statusCode ); + smsLog( pMac, LOGW, "CSR SmeAuthReq failed with statusCode= 0x%08X [%d]", pSmeAuthRsp->statusCode, pSmeAuthRsp->statusCode ); /***profHandleLostLinkAfterReset(pAdapter); // In the event the authenticate fails, let the roam processor attempt to join something else... roamRoam( pAdapter );***/ @@ -7509,14 +7760,14 @@ static void csrRoamRoamingStateReassocRspProcessor( tpAniSirGlobal pMac, tpSirSm tpCsrNeighborRoamControlInfo pNeighborRoamInfo = &pMac->roam.neighborRoamInfo; tCsrRoamInfo roamInfo; tANI_U32 roamId = 0; - - if ( eSIR_SME_SUCCESS == pSmeJoinRsp->statusCode ) + + if ( eSIR_SME_SUCCESS == pSmeJoinRsp->statusCode ) { smsLog( pMac, LOGW, "CSR SmeReassocReq Successful" ); result = eCsrReassocSuccess; /* Defeaturize this part later if needed */ #ifdef WLAN_FEATURE_NEIGHBOR_ROAMING - /* Since the neighbor roam algorithm uses reassoc req for handoff instead of join, + /* Since the neighbor roam algorithm uses reassoc req for handoff instead of join, * we need the response contents while processing the result in csrRoamProcessResults() */ if (csrRoamIsHandoffInProgress(pMac)) { @@ -7534,13 +7785,13 @@ static void csrRoamRoamingStateReassocRspProcessor( tpAniSirGlobal pMac, tpSirSm * to call csrRoamComplete() with state as CsrJoinFailure */ else { - smsLog( pMac, LOGW, "CSR SmeReassocReq failed with statusCode= 0x%08lX [%d]", pSmeJoinRsp->statusCode, pSmeJoinRsp->statusCode ); + smsLog( pMac, LOGW, "CSR SmeReassocReq failed with statusCode= 0x%08X [%d]", pSmeJoinRsp->statusCode, pSmeJoinRsp->statusCode ); result = eCsrReassocFailure; #ifdef WLAN_FEATURE_VOWIFI_11R if ((eSIR_SME_FT_REASSOC_TIMEOUT_FAILURE == pSmeJoinRsp->statusCode) || (eSIR_SME_FT_REASSOC_FAILURE == pSmeJoinRsp->statusCode)) { - // Inform HDD to turn off FT flag in HDD + // Inform HDD to turn off FT flag in HDD if (pNeighborRoamInfo) { vos_mem_zero(&roamInfo, sizeof(tCsrRoamInfo)); @@ -7548,12 +7799,12 @@ static void csrRoamRoamingStateReassocRspProcessor( tpAniSirGlobal pMac, tpSirSm &roamInfo, roamId, eCSR_ROAM_FT_REASSOC_FAILED, eSIR_SME_SUCCESS); /* * Since the above callback sends a disconnect - * to HDD, we should clean-up our state + * to HDD, we should clean-up our state * machine as well to be in sync with the upper - * layers. There is no need to send a disassoc - * since: 1) we will never reassoc to the current - * AP in LFR, and 2) there is no need to issue a - * disassoc to the AP with which we were trying + * layers. There is no need to send a disassoc + * since: 1) we will never reassoc to the current + * AP in LFR, and 2) there is no need to issue a + * disassoc to the AP with which we were trying * to reassoc. */ csrRoamComplete( pMac, eCsrJoinFailure, NULL ); @@ -7637,7 +7888,7 @@ void csrRoamRoamingStateDisassocRspProcessor( tpAniSirGlobal pMac, tSirSmeDisass smsLog(pMac, LOGE, FL(" session %d not found "), sessionId); return; } - + if ( CSR_IS_ROAM_SUBSTATE_DISASSOC_NO_JOIN( pMac, sessionId ) ) { csrRoamComplete( pMac, eCsrNothingToJoin, NULL ); @@ -7649,7 +7900,7 @@ void csrRoamRoamingStateDisassocRspProcessor( tpAniSirGlobal pMac, tSirSmeDisass { smsLog( pMac, LOG2, "CSR SmeDisassocReq force disassociated Successfully" ); //A callback to HDD will be issued from csrRoamComplete so no need to do anything here - } + } csrRoamComplete( pMac, eCsrNothingToJoin, NULL ); } else if ( CSR_IS_ROAM_SUBSTATE_DISASSOC_HO( pMac, sessionId ) ) @@ -7660,11 +7911,15 @@ void csrRoamRoamingStateDisassocRspProcessor( tpAniSirGlobal pMac, tSirSmeDisass * First ensure if the roam profile is in the scan cache. * If not, post a reassoc failure and disconnect. */ - status = palAllocateMemory(pMac->hHdd, (void **)&pScanFilter, sizeof(tCsrScanResultFilter)); + pScanFilter = vos_mem_malloc(sizeof(tCsrScanResultFilter)); + if ( NULL == pScanFilter ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; if(HAL_STATUS_SUCCESS(status)) { - palZeroMemory(pMac->hHdd, pScanFilter, sizeof(tCsrScanResultFilter)); - status = csrRoamPrepareFilterFromProfile(pMac, + vos_mem_set(pScanFilter, sizeof(tCsrScanResultFilter), 0); + status = csrRoamPrepareFilterFromProfile(pMac, &pMac->roam.neighborRoamInfo.csrNeighborRoamProfile, pScanFilter); if(!HAL_STATUS_SUCCESS(status)) { @@ -7705,7 +7960,7 @@ void csrRoamRoamingStateDisassocRspProcessor( tpAniSirGlobal pMac, tSirSmeDisass { /* - * we need to process the result first before removing it from active list + * we need to process the result first before removing it from active list * because state changes still happening insides roamQProcessRoamResults so * no other roam command should be issued. */ @@ -7736,22 +7991,22 @@ void csrRoamRoamingStateDisassocRspProcessor( tpAniSirGlobal pMac, tSirSmeDisass /* Notify HDD about handoff and provide the BSSID too */ roamInfo.reasonCode = eCsrRoamReasonBetterAP; - palCopyMemory(pMac->hHdd, roamInfo.bssid, - pMac->roam.neighborRoamInfo.csrNeighborRoamProfile.BSSIDs.bssid, - sizeof(tSirMacAddr)); + vos_mem_copy(roamInfo.bssid, + pMac->roam.neighborRoamInfo.csrNeighborRoamProfile.BSSIDs.bssid, + sizeof(tSirMacAddr)); - csrRoamCallCallback(pMac,sessionId, &roamInfo, 0, + csrRoamCallCallback(pMac,sessionId, &roamInfo, 0, eCSR_ROAM_ROAMING_START, eCSR_ROAM_RESULT_NONE); /* Copy the connected profile to apply the same for this connection as well */ - if(HAL_STATUS_SUCCESS(palAllocateMemory(pMac->hHdd, - (void **)&pCurRoamProfile, sizeof(tCsrRoamProfile)))) + pCurRoamProfile = vos_mem_malloc(sizeof(tCsrRoamProfile)); + if ( pCurRoamProfile != NULL ) { - palZeroMemory(pMac->hHdd, pCurRoamProfile, sizeof(tCsrRoamProfile)); + vos_mem_set(pCurRoamProfile, sizeof(tCsrRoamProfile), 0); csrRoamCopyProfile(pMac, pCurRoamProfile, pSession->pCurRoamProfile); //make sure to put it at the head of the cmd queue - status = csrRoamIssueConnect(pMac, sessionId, pCurRoamProfile, - hBSSList, eCsrSmeIssuedAssocToSimilarAP, + status = csrRoamIssueConnect(pMac, sessionId, pCurRoamProfile, + hBSSList, eCsrSmeIssuedAssocToSimilarAP, roamId, eANI_BOOLEAN_TRUE, eANI_BOOLEAN_FALSE); if(!HAL_STATUS_SUCCESS(status)) @@ -7760,13 +8015,13 @@ void csrRoamRoamingStateDisassocRspProcessor( tpAniSirGlobal pMac, tSirSmeDisass __func__, status); fCallCallback = eANI_BOOLEAN_TRUE; } - + /* Notify sub-modules like QoS etc. that handoff happening */ sme_QosCsrEventInd(pMac, sessionId, SME_QOS_CSR_HANDOFF_ASSOC_REQ, NULL); csrReleaseProfile(pMac, pCurRoamProfile); - palFreeMemory(pMac->hHdd, pCurRoamProfile); + vos_mem_free(pCurRoamProfile); csrFreeScanFilter(pMac, pScanFilter); - palFreeMemory( pMac->hHdd, pScanFilter ); + vos_mem_free(pScanFilter); return; } @@ -7774,24 +8029,24 @@ POST_ROAM_FAILURE: if (pScanFilter) { csrFreeScanFilter(pMac, pScanFilter); - palFreeMemory( pMac->hHdd, pScanFilter ); + vos_mem_free(pScanFilter); } if (pCurRoamProfile) - palFreeMemory(pMac->hHdd, pCurRoamProfile); + vos_mem_free(pCurRoamProfile); /* Inform the upper layers that the reassoc failed */ vos_mem_zero(&roamInfo, sizeof(tCsrRoamInfo)); csrRoamCallCallback(pMac, sessionId, &roamInfo, 0, eCSR_ROAM_FT_REASSOC_FAILED, eSIR_SME_SUCCESS); - /* + /* * Issue a disassoc request so that PE/LIM uses this to clean-up the FT session. * Upon success, we would re-enter this routine after receiving the disassoc * response and will fall into the reassoc fail sub-state. And, eventually - * call csrRoamComplete which would remove the roam command from SME active + * call csrRoamComplete which would remove the roam command from SME active * queue. */ - if (!HAL_STATUS_SUCCESS(csrRoamIssueDisassociate(pMac, sessionId, + if (!HAL_STATUS_SUCCESS(csrRoamIssueDisassociate(pMac, sessionId, eCSR_ROAM_SUBSTATE_DISASSOC_REASSOC_FAILURE, FALSE))) { smsLog( pMac, LOGE,"%s: csrRoamIssueDisassociate failed with status %d", @@ -7818,12 +8073,12 @@ POST_ROAM_FAILURE: // Infrastructure network. // - Third is where we are doing an Infra to Infra roam between networks with different // SSIDs. In all cases, we set the new Bss configuration here and attempt to join - + smsLog( pMac, LOG2, "CSR SmeDisassocReq disassociated Successfully" ); } else { - smsLog( pMac, LOGE, "SmeDisassocReq failed with statusCode= 0x%08lX", statusCode ); + smsLog( pMac, LOGE, "SmeDisassocReq failed with statusCode= 0x%08X", statusCode ); } //We are not done yet. Get the data and continue roaming csrRoamReissueRoamCommand(pMac); @@ -7842,7 +8097,7 @@ static void csrRoamRoamingStateDeauthRspProcessor( tpAniSirGlobal pMac, tSirSmeD } else { - if ( eSIR_SME_SUCCESS == statusCode ) + if ( eSIR_SME_SUCCESS == statusCode ) { // Successfully deauth from the 'old' Bss... // @@ -7850,7 +8105,7 @@ static void csrRoamRoamingStateDeauthRspProcessor( tpAniSirGlobal pMac, tSirSmeD } else { - smsLog( pMac, LOGW, "SmeDeauthReq failed with statusCode= 0x%08lX", statusCode ); + smsLog( pMac, LOGW, "SmeDeauthReq failed with statusCode= 0x%08X", statusCode ); } //We are not done yet. Get the data and continue roaming csrRoamReissueRoamCommand(pMac); @@ -7860,15 +8115,15 @@ static void csrRoamRoamingStateDeauthRspProcessor( tpAniSirGlobal pMac, tSirSmeD static void csrRoamRoamingStateStartBssRspProcessor( tpAniSirGlobal pMac, tSirSmeStartBssRsp *pSmeStartBssRsp ) { eCsrRoamCompleteResult result; - - if ( eSIR_SME_SUCCESS == pSmeStartBssRsp->statusCode ) + + if ( eSIR_SME_SUCCESS == pSmeStartBssRsp->statusCode ) { smsLog( pMac, LOGW, "SmeStartBssReq Successful" ); result = eCsrStartBssSuccess; } - else + else { - smsLog( pMac, LOGW, "SmeStartBssReq failed with statusCode= 0x%08lX", pSmeStartBssRsp->statusCode ); + smsLog( pMac, LOGW, "SmeStartBssReq failed with statusCode= 0x%08X", pSmeStartBssRsp->statusCode ); //Let csrRoamComplete decide what to do result = eCsrStartBssFailure; } @@ -7879,7 +8134,7 @@ static void csrRoamRoamingStateStartBssRspProcessor( tpAniSirGlobal pMac, tSirSm We need to be careful on whether to cast pMsgBuf (pSmeRsp) to other type of strucutres. It depends on how the message is constructed. If the message is sent by limSendSmeRsp, the pMsgBuf is only a generic response and can only be used as pointer to tSirSmeRsp. - For the messages where sender allocates memory for specific structures, then it can be + For the messages where sender allocates memory for specific structures, then it can be cast accordingly. */ void csrRoamingStateMsgProcessor( tpAniSirGlobal pMac, void *pMsgBuf ) @@ -7896,9 +8151,9 @@ void csrRoamingStateMsgProcessor( tpAniSirGlobal pMac, void *pMsgBuf ) pSmeRsp->messageType = (pSmeRsp->messageType); pSmeRsp->length = (pSmeRsp->length); pSmeRsp->statusCode = (pSmeRsp->statusCode); - switch (pSmeRsp->messageType) + switch (pSmeRsp->messageType) { - + case eWNI_SME_JOIN_RSP: // in Roaming state, process the Join response message... if (CSR_IS_ROAM_SUBSTATE_JOIN_REQ(pMac, pSmeRsp->sessionId)) { @@ -7906,28 +8161,28 @@ void csrRoamingStateMsgProcessor( tpAniSirGlobal pMac, void *pMsgBuf ) csrRoamJoinRspProcessor( pMac, (tSirSmeJoinRsp *)pSmeRsp ); } break; - + case eWNI_SME_AUTH_RSP: // or the Authenticate response message... - if (CSR_IS_ROAM_SUBSTATE_AUTH_REQ( pMac, pSmeRsp->sessionId) ) + if (CSR_IS_ROAM_SUBSTATE_AUTH_REQ( pMac, pSmeRsp->sessionId) ) { //We sent a AUTH_REQ csrRoamRoamingStateAuthRspProcessor( pMac, (tSirSmeAuthRsp *)pSmeRsp ); } break; - + case eWNI_SME_REASSOC_RSP: // or the Reassociation response message... - if (CSR_IS_ROAM_SUBSTATE_REASSOC_REQ( pMac, pSmeRsp->sessionId) ) + if (CSR_IS_ROAM_SUBSTATE_REASSOC_REQ( pMac, pSmeRsp->sessionId) ) { csrRoamRoamingStateReassocRspProcessor( pMac, (tpSirSmeJoinRsp )pSmeRsp ); } break; - + case eWNI_SME_STOP_BSS_RSP: // or the Stop Bss response message... { csrRoamRoamingStateStopBssRspProcessor(pMac, pSmeRsp); } break; - + case eWNI_SME_DISASSOC_RSP: // or the Disassociate response message... if ( CSR_IS_ROAM_SUBSTATE_DISASSOC_REQ( pMac, pSmeRsp->sessionId ) || CSR_IS_ROAM_SUBSTATE_DISASSOC_NO_JOIN( pMac, pSmeRsp->sessionId ) || @@ -7941,23 +8196,23 @@ void csrRoamingStateMsgProcessor( tpAniSirGlobal pMac, void *pMsgBuf ) csrRoamRoamingStateDisassocRspProcessor( pMac, (tSirSmeDisassocRsp *)pSmeRsp ); } break; - + case eWNI_SME_DEAUTH_RSP: // or the Deauthentication response message... - if ( CSR_IS_ROAM_SUBSTATE_DEAUTH_REQ( pMac, pSmeRsp->sessionId ) ) + if ( CSR_IS_ROAM_SUBSTATE_DEAUTH_REQ( pMac, pSmeRsp->sessionId ) ) { csrRoamRoamingStateDeauthRspProcessor( pMac, (tSirSmeDeauthRsp *)pSmeRsp ); } break; - + case eWNI_SME_START_BSS_RSP: // or the Start BSS response message... - if (CSR_IS_ROAM_SUBSTATE_START_BSS_REQ( pMac, pSmeRsp->sessionId ) ) + if (CSR_IS_ROAM_SUBSTATE_START_BSS_REQ( pMac, pSmeRsp->sessionId ) ) { csrRoamRoamingStateStartBssRspProcessor( pMac, (tSirSmeStartBssRsp *)pSmeRsp ); - } + } break; - + case WNI_CFG_SET_CNF: // process the Config Confirm messages when we are in 'Config' substate... - if ( CSR_IS_ROAM_SUBSTATE_CONFIG( pMac, pSmeRsp->sessionId ) ) + if ( CSR_IS_ROAM_SUBSTATE_CONFIG( pMac, pSmeRsp->sessionId ) ) { csrRoamingStateConfigCnfProcessor( pMac, ((tCsrCfgSetRsp *)pSmeRsp)->respStatus ); } @@ -7966,13 +8221,14 @@ void csrRoamingStateMsgProcessor( tpAniSirGlobal pMac, void *pMsgBuf ) case eWNI_SME_IBSS_PEER_DEPARTED_IND: pIbssPeerInd = (tSmeIbssPeerInd*)pSmeRsp; smsLog(pMac, LOGE, "CSR: Peer departed notification from LIM in joining state"); - palZeroMemory( pMac->hHdd, &roamInfo, sizeof(tCsrRoamInfo) ); - roamInfo.staId = (tANI_U8)pIbssPeerInd->staId; + vos_mem_set(&roamInfo, sizeof(tCsrRoamInfo), 0); + roamInfo.staId = (tANI_U8)pIbssPeerInd->staId; roamInfo.ucastSig = (tANI_U8)pIbssPeerInd->ucastSig; roamInfo.bcastSig = (tANI_U8)pIbssPeerInd->bcastSig; - palCopyMemory(pMac->hHdd, &roamInfo.peerMac, pIbssPeerInd->peerAddr, sizeof(tCsrBssid)); - csrRoamCallCallback(pMac, sessionId, &roamInfo, 0, - eCSR_ROAM_CONNECT_STATUS_UPDATE, + vos_mem_copy(&roamInfo.peerMac, pIbssPeerInd->peerAddr, + sizeof(tCsrBssid)); + csrRoamCallCallback(pMac, sessionId, &roamInfo, 0, + eCSR_ROAM_CONNECT_STATUS_UPDATE, eCSR_ROAM_RESULT_IBSS_PEER_DEPARTED); break; default: @@ -7980,19 +8236,19 @@ void csrRoamingStateMsgProcessor( tpAniSirGlobal pMac, void *pMsgBuf ) pSmeRsp->messageType, pSmeRsp->messageType, pMac->roam.curSubState[pSmeRsp->sessionId] ); - //If we are connected, check the link status change + //If we are connected, check the link status change if(!csrIsConnStateDisconnected(pMac, sessionId)) { csrRoamCheckForLinkStatusChange( pMac, pSmeRsp ); } - break; + break; } } void csrRoamJoinedStateMsgProcessor( tpAniSirGlobal pMac, void *pMsgBuf ) { tSirSmeRsp *pSirMsg = (tSirSmeRsp *)pMsgBuf; - switch (pSirMsg->messageType) + switch (pSirMsg->messageType) { case eWNI_SME_GET_STATISTICS_RSP: smsLog( pMac, LOG2, FL("Stats rsp from PE")); @@ -8007,7 +8263,7 @@ void csrRoamJoinedStateMsgProcessor( tpAniSirGlobal pMac, void *pMsgBuf ) tANI_U32 sessionId; eHalStatus status; smsLog( pMac, LOG1, FL("ASSOCIATION confirmation can be given to upper layer ")); - palZeroMemory(pMac->hHdd, &roamInfo, sizeof(tCsrRoamInfo)); + vos_mem_set(&roamInfo, sizeof(tCsrRoamInfo), 0); pRoamInfo = &roamInfo; pUpperLayerAssocCnf = (tSirSmeAssocIndToUpperLayerCnf *)pMsgBuf; status = csrRoamGetSessionIdFromBSSID( pMac, (tCsrBssid *)pUpperLayerAssocCnf->bssId, &sessionId ); @@ -8018,16 +8274,18 @@ void csrRoamJoinedStateMsgProcessor( tpAniSirGlobal pMac, void *pMsgBuf ) smsLog(pMac, LOGE, FL(" session %d not found "), sessionId); return; } - - pRoamInfo->statusCode = eSIR_SME_SUCCESS; //send the status code as Success + + pRoamInfo->statusCode = eSIR_SME_SUCCESS; //send the status code as Success pRoamInfo->u.pConnectedProfile = &pSession->connectedProfile; pRoamInfo->staId = (tANI_U8)pUpperLayerAssocCnf->aid; pRoamInfo->rsnIELen = (tANI_U8)pUpperLayerAssocCnf->rsnIE.length; pRoamInfo->prsnIE = pUpperLayerAssocCnf->rsnIE.rsnIEdata; pRoamInfo->addIELen = (tANI_U8)pUpperLayerAssocCnf->addIE.length; - pRoamInfo->paddIE = pUpperLayerAssocCnf->addIE.addIEdata; - palCopyMemory(pMac->hHdd, pRoamInfo->peerMac, pUpperLayerAssocCnf->peerMacAddr, sizeof(tSirMacAddr)); - palCopyMemory(pMac->hHdd, &pRoamInfo->bssid, pUpperLayerAssocCnf->bssId, sizeof(tCsrBssid)); + pRoamInfo->paddIE = pUpperLayerAssocCnf->addIE.addIEdata; + vos_mem_copy(pRoamInfo->peerMac, pUpperLayerAssocCnf->peerMacAddr, + sizeof(tSirMacAddr)); + vos_mem_copy(&pRoamInfo->bssid, pUpperLayerAssocCnf->bssId, + sizeof(tCsrBssid)); pRoamInfo->wmmEnabledSta = pUpperLayerAssocCnf->wmmEnabledSta; if(CSR_IS_INFRA_AP(pRoamInfo->u.pConnectedProfile) ) { @@ -8050,45 +8308,45 @@ void csrRoamJoinedStateMsgProcessor( tpAniSirGlobal pMac, void *pMsgBuf ) } } -eHalStatus csrRoamIssueSetContextReq( tpAniSirGlobal pMac, tANI_U32 sessionId, eCsrEncryptionType EncryptType, +eHalStatus csrRoamIssueSetContextReq( tpAniSirGlobal pMac, tANI_U32 sessionId, eCsrEncryptionType EncryptType, tSirBssDescription *pBssDescription, tSirMacAddr *bssId, tANI_BOOLEAN addKey, - tANI_BOOLEAN fUnicast, tAniKeyDirection aniKeyDirection, - tANI_U8 keyId, tANI_U16 keyLength, + tANI_BOOLEAN fUnicast, tAniKeyDirection aniKeyDirection, + tANI_U8 keyId, tANI_U16 keyLength, tANI_U8 *pKey, tANI_U8 paeRole ) { eHalStatus status = eHAL_STATUS_SUCCESS; tAniEdType edType; - + if(eCSR_ENCRYPT_TYPE_UNKNOWN == EncryptType) { EncryptType = eCSR_ENCRYPT_TYPE_NONE; //*** } - + edType = csrTranslateEncryptTypeToEdType( EncryptType ); - + // Allow 0 keys to be set for the non-WPA encrypt types... For WPA encrypt types, the num keys must be non-zero // or LIM will reject the set context (assumes the SET_CONTEXT does not occur until the keys are distrubuted). if ( CSR_IS_ENC_TYPE_STATIC( EncryptType ) || - addKey ) + addKey ) { tCsrRoamSetKey setKey; setKey.encType = EncryptType; setKey.keyDirection = aniKeyDirection; //Tx, Rx or Tx-and-Rx - palCopyMemory( pMac->hHdd, &setKey.peerMac, bssId, sizeof(tCsrBssid) ); + vos_mem_copy(&setKey.peerMac, bssId, sizeof(tCsrBssid)); setKey.paeRole = paeRole; //0 for supplicant setKey.keyId = keyId; // Kye index - setKey.keyLength = keyLength; + setKey.keyLength = keyLength; if( keyLength ) { - palCopyMemory( pMac->hHdd, setKey.Key, pKey, keyLength ); + vos_mem_copy(setKey.Key, pKey, keyLength); } status = csrRoamIssueSetKeyCommand( pMac, sessionId, &setKey, 0 ); } return (status); } -static eHalStatus csrRoamIssueSetKeyCommand( tpAniSirGlobal pMac, tANI_U32 sessionId, +static eHalStatus csrRoamIssueSetKeyCommand( tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamSetKey *pSetKey, tANI_U32 roamId ) { eHalStatus status = eHAL_STATUS_INVALID_PARAMETER; @@ -8096,7 +8354,7 @@ static eHalStatus csrRoamIssueSetKeyCommand( tpAniSirGlobal pMac, tANI_U32 sessi #ifdef FEATURE_WLAN_CCX tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, sessionId ); #endif /* FEATURE_WLAN_CCX */ - + do { pCommand = csrGetCommandBuffer(pMac); @@ -8110,39 +8368,41 @@ static eHalStatus csrRoamIssueSetKeyCommand( tpAniSirGlobal pMac, tANI_U32 sessi pCommand->sessionId = (tANI_U8)sessionId; // validate the key length, Adjust if too long... // for static WEP the keys are not set thru' SetContextReq - if ( ( eCSR_ENCRYPT_TYPE_WEP40 == pSetKey->encType ) || - ( eCSR_ENCRYPT_TYPE_WEP40_STATICKEY == pSetKey->encType ) ) + if ( ( eCSR_ENCRYPT_TYPE_WEP40 == pSetKey->encType ) || + ( eCSR_ENCRYPT_TYPE_WEP40_STATICKEY == pSetKey->encType ) ) { //KeyLength maybe 0 for static WEP if( pSetKey->keyLength ) { - if ( pSetKey->keyLength < CSR_WEP40_KEY_LEN ) + if ( pSetKey->keyLength < CSR_WEP40_KEY_LEN ) { smsLog( pMac, LOGW, "Invalid WEP40 keylength [= %d] in SetContext call", pSetKey->keyLength ); - break; + break; } - + pCommand->u.setKeyCmd.keyLength = CSR_WEP40_KEY_LEN; - palCopyMemory( pMac->hHdd, pCommand->u.setKeyCmd.Key, pSetKey->Key, CSR_WEP40_KEY_LEN ); + vos_mem_copy(pCommand->u.setKeyCmd.Key, pSetKey->Key, + CSR_WEP40_KEY_LEN); } } - else if ( ( eCSR_ENCRYPT_TYPE_WEP104 == pSetKey->encType ) || - ( eCSR_ENCRYPT_TYPE_WEP104_STATICKEY == pSetKey->encType ) ) + else if ( ( eCSR_ENCRYPT_TYPE_WEP104 == pSetKey->encType ) || + ( eCSR_ENCRYPT_TYPE_WEP104_STATICKEY == pSetKey->encType ) ) { //KeyLength maybe 0 for static WEP if( pSetKey->keyLength ) { - if ( pSetKey->keyLength < CSR_WEP104_KEY_LEN ) + if ( pSetKey->keyLength < CSR_WEP104_KEY_LEN ) { smsLog( pMac, LOGW, "Invalid WEP104 keylength [= %d] in SetContext call", pSetKey->keyLength ); - break; + break; } - + pCommand->u.setKeyCmd.keyLength = CSR_WEP104_KEY_LEN; - palCopyMemory( pMac->hHdd, pCommand->u.setKeyCmd.Key, pSetKey->Key, CSR_WEP104_KEY_LEN ); + vos_mem_copy(pCommand->u.setKeyCmd.Key, pSetKey->Key, + CSR_WEP104_KEY_LEN); } } - else if ( eCSR_ENCRYPT_TYPE_TKIP == pSetKey->encType ) + else if ( eCSR_ENCRYPT_TYPE_TKIP == pSetKey->encType ) { if ( pSetKey->keyLength < CSR_TKIP_KEY_LEN ) { @@ -8150,9 +8410,10 @@ static eHalStatus csrRoamIssueSetKeyCommand( tpAniSirGlobal pMac, tANI_U32 sessi break; } pCommand->u.setKeyCmd.keyLength = CSR_TKIP_KEY_LEN; - palCopyMemory( pMac->hHdd, pCommand->u.setKeyCmd.Key, pSetKey->Key, CSR_TKIP_KEY_LEN ); + vos_mem_copy(pCommand->u.setKeyCmd.Key, pSetKey->Key, + CSR_TKIP_KEY_LEN); } - else if ( eCSR_ENCRYPT_TYPE_AES == pSetKey->encType ) + else if ( eCSR_ENCRYPT_TYPE_AES == pSetKey->encType ) { if ( pSetKey->keyLength < CSR_AES_KEY_LEN ) { @@ -8160,10 +8421,11 @@ static eHalStatus csrRoamIssueSetKeyCommand( tpAniSirGlobal pMac, tANI_U32 sessi break; } pCommand->u.setKeyCmd.keyLength = CSR_AES_KEY_LEN; - palCopyMemory( pMac->hHdd, pCommand->u.setKeyCmd.Key, pSetKey->Key, CSR_AES_KEY_LEN ); + vos_mem_copy(pCommand->u.setKeyCmd.Key, pSetKey->Key, + CSR_AES_KEY_LEN); } #ifdef FEATURE_WLAN_WAPI - else if ( eCSR_ENCRYPT_TYPE_WPI == pSetKey->encType ) + else if ( eCSR_ENCRYPT_TYPE_WPI == pSetKey->encType ) { if ( pSetKey->keyLength < CSR_WAPI_KEY_LEN ) { @@ -8171,18 +8433,20 @@ static eHalStatus csrRoamIssueSetKeyCommand( tpAniSirGlobal pMac, tANI_U32 sessi break; } pCommand->u.setKeyCmd.keyLength = CSR_WAPI_KEY_LEN; - palCopyMemory( pMac->hHdd, pCommand->u.setKeyCmd.Key, pSetKey->Key, CSR_WAPI_KEY_LEN ); + vos_mem_copy(pCommand->u.setKeyCmd.Key, pSetKey->Key, + CSR_WAPI_KEY_LEN); } #endif /* FEATURE_WLAN_WAPI */ #ifdef FEATURE_WLAN_CCX - else if ( eCSR_ENCRYPT_TYPE_KRK == pSetKey->encType ) + else if ( eCSR_ENCRYPT_TYPE_KRK == pSetKey->encType ) { if ( pSetKey->keyLength < CSR_KRK_KEY_LEN ) { smsLog( pMac, LOGW, "Invalid KRK keylength [= %d] in SetContext call", pSetKey->keyLength ); break; } - palCopyMemory( pMac->hHdd, pSession->ccxCckmInfo.krk, pSetKey->Key, CSR_KRK_KEY_LEN ); + vos_mem_copy(pSession->ccxCckmInfo.krk, pSetKey->Key, + CSR_KRK_KEY_LEN); pSession->ccxCckmInfo.reassoc_req_num=1; pSession->ccxCckmInfo.krk_plumbed = eANI_BOOLEAN_TRUE; status = eHAL_STATUS_SUCCESS; @@ -8200,31 +8464,32 @@ static eHalStatus csrRoamIssueSetKeyCommand( tpAniSirGlobal pMac, tANI_U32 sessi break; } pCommand->u.setKeyCmd.keyLength = CSR_AES_KEY_LEN; - palCopyMemory(pMac->hHdd, pCommand->u.setKeyCmd.Key, pSetKey->Key, CSR_AES_KEY_LEN); + vos_mem_copy(pCommand->u.setKeyCmd.Key, pSetKey->Key, CSR_AES_KEY_LEN); } #endif status = eHAL_STATUS_SUCCESS; pCommand->u.setKeyCmd.roamId = roamId; pCommand->u.setKeyCmd.encType = pSetKey->encType; pCommand->u.setKeyCmd.keyDirection = pSetKey->keyDirection; //Tx, Rx or Tx-and-Rx - palCopyMemory( pMac->hHdd, &pCommand->u.setKeyCmd.peerMac, &pSetKey->peerMac, sizeof(tCsrBssid) ); + vos_mem_copy(&pCommand->u.setKeyCmd.peerMac, &pSetKey->peerMac, + sizeof(tCsrBssid)); pCommand->u.setKeyCmd.paeRole = pSetKey->paeRole; //0 for supplicant pCommand->u.setKeyCmd.keyId = pSetKey->keyId; - palCopyMemory( pMac->hHdd, pCommand->u.setKeyCmd.keyRsc, pSetKey->keyRsc, CSR_MAX_RSC_LEN ); + vos_mem_copy(pCommand->u.setKeyCmd.keyRsc, pSetKey->keyRsc, CSR_MAX_RSC_LEN); //Always put set key to the head of the Q because it is the only thing to get executed in case of WT_KEY state - + status = csrQueueSmeCommand(pMac, pCommand, eANI_BOOLEAN_TRUE); if( !HAL_STATUS_SUCCESS( status ) ) { smsLog( pMac, LOGE, FL(" fail to send message status = %d"), status ); } } while (0); - // Free the command if there has been a failure, or it is a + // Free the command if there has been a failure, or it is a // "local" operation like the set CCX CCKM KRK key. if ( ( NULL != pCommand ) && ( (!HAL_STATUS_SUCCESS( status ) ) #ifdef FEATURE_WLAN_CCX - || ( eCSR_ENCRYPT_TYPE_KRK == pSetKey->encType ) + || ( eCSR_ENCRYPT_TYPE_KRK == pSetKey->encType ) #endif /* FEATURE_WLAN_CCX */ ) ) { @@ -8241,7 +8506,7 @@ eHalStatus csrRoamIssueRemoveKeyCommand( tpAniSirGlobal pMac, tANI_U32 sessionId tANI_BOOLEAN fImediate = eANI_BOOLEAN_TRUE; do { - if( !csrIsSetKeyAllowed(pMac, sessionId) ) + if( !csrIsSetKeyAllowed(pMac, sessionId) ) { smsLog( pMac, LOGW, FL(" wrong state not allowed to set key") ); status = eHAL_STATUS_CSR_WRONG_STATE; @@ -8258,7 +8523,8 @@ eHalStatus csrRoamIssueRemoveKeyCommand( tpAniSirGlobal pMac, tANI_U32 sessionId pCommand->sessionId = (tANI_U8)sessionId; pCommand->u.removeKeyCmd.roamId = roamId; pCommand->u.removeKeyCmd.encType = pRemoveKey->encType; - palCopyMemory( pMac->hHdd, &pCommand->u.removeKeyCmd.peerMac, &pRemoveKey->peerMac, sizeof(tSirMacAddr) ); + vos_mem_copy(&pCommand->u.removeKeyCmd.peerMac, &pRemoveKey->peerMac, + sizeof(tSirMacAddr)); pCommand->u.removeKeyCmd.keyId = pRemoveKey->keyId; if( CSR_IS_WAIT_FOR_KEY( pMac, sessionId ) ) { @@ -8269,8 +8535,8 @@ eHalStatus csrRoamIssueRemoveKeyCommand( tpAniSirGlobal pMac, tANI_U32 sessionId pRemoveKey->encType, pRemoveKey->keyId, pCommand->u.removeKeyCmd.peerMac[0], pCommand->u.removeKeyCmd.peerMac[1], - pCommand->u.removeKeyCmd.peerMac[2], - pCommand->u.removeKeyCmd.peerMac[3], + pCommand->u.removeKeyCmd.peerMac[2], + pCommand->u.removeKeyCmd.peerMac[3], pCommand->u.removeKeyCmd.peerMac[4], pCommand->u.removeKeyCmd.peerMac[5]); status = csrQueueSmeCommand(pMac, pCommand, fImediate); @@ -8296,11 +8562,11 @@ eHalStatus csrRoamProcessSetKeyCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand ) tANI_U32 sessionId = pCommand->sessionId; #ifdef FEATURE_WLAN_DIAG_SUPPORT_CSR tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, sessionId ); - eCsrEncryptionType eCEType = (eCsrEncryptionType)edType; WLAN_VOS_DIAG_EVENT_DEF(setKeyEvent, vos_event_wlan_security_payload_type); - if(eCSR_ENCRYPT_TYPE_NONE != eCEType) + if(eSIR_ED_NONE != edType) { - palZeroMemory(pMac->hHdd, &setKeyEvent, sizeof(vos_event_wlan_security_payload_type)); + vos_mem_set(&setKeyEvent, + sizeof(vos_event_wlan_security_payload_type), 0); if( *(( tANI_U8 *)&pCommand->u.setKeyCmd.peerMac) & 0x01 ) { setKeyEvent.eventId = WLAN_SECURITY_EVENT_SET_GTK_REQ; @@ -8313,8 +8579,8 @@ eHalStatus csrRoamProcessSetKeyCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand ) setKeyEvent.encryptionModeUnicast = (v_U8_t)diagEncTypeFromCSRType(pCommand->u.setKeyCmd.encType); setKeyEvent.encryptionModeMulticast = (v_U8_t)diagEncTypeFromCSRType(pSession->connectedProfile.mcEncryptionType); } - palCopyMemory( pMac->hHdd, setKeyEvent.bssid, pSession->connectedProfile.bssid, 6 ); - if(CSR_IS_ENC_TYPE_STATIC(eCEType)) + vos_mem_copy(setKeyEvent.bssid, pSession->connectedProfile.bssid, 6); + if(CSR_IS_ENC_TYPE_STATIC(pCommand->u.setKeyCmd.encType)) { tANI_U32 defKeyId; //It has to be static WEP here @@ -8333,11 +8599,11 @@ eHalStatus csrRoamProcessSetKeyCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand ) #endif //FEATURE_WLAN_DIAG_SUPPORT_CSR if( csrIsSetKeyAllowed(pMac, sessionId) ) { - status = csrSendMBSetContextReqMsg( pMac, sessionId, - ( tANI_U8 *)&pCommand->u.setKeyCmd.peerMac, - numKeys, edType, fUnicast, pCommand->u.setKeyCmd.keyDirection, - pCommand->u.setKeyCmd.keyId, pCommand->u.setKeyCmd.keyLength, - pCommand->u.setKeyCmd.Key, pCommand->u.setKeyCmd.paeRole, + status = csrSendMBSetContextReqMsg( pMac, sessionId, + ( tANI_U8 *)&pCommand->u.setKeyCmd.peerMac, + numKeys, edType, fUnicast, pCommand->u.setKeyCmd.keyDirection, + pCommand->u.setKeyCmd.keyId, pCommand->u.setKeyCmd.keyLength, + pCommand->u.setKeyCmd.Key, pCommand->u.setKeyCmd.paeRole, pCommand->u.setKeyCmd.keyRsc); } else @@ -8351,7 +8617,7 @@ eHalStatus csrRoamProcessSetKeyCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand ) smsLog( pMac, LOGE, FL(" error status %d"), status ); csrRoamCallCallback( pMac, sessionId, NULL, pCommand->u.setKeyCmd.roamId, eCSR_ROAM_SET_KEY_COMPLETE, eCSR_ROAM_RESULT_FAILURE); #ifdef FEATURE_WLAN_DIAG_SUPPORT_CSR - if(eCSR_ENCRYPT_TYPE_NONE != eCEType) + if(eSIR_ED_NONE != edType) { if( *(( tANI_U8 *)&pCommand->u.setKeyCmd.peerMac) & 0x01 ) { @@ -8379,18 +8645,23 @@ eHalStatus csrRoamProcessRemoveKeyCommand( tpAniSirGlobal pMac, tSmeCmd *pComman #ifdef FEATURE_WLAN_DIAG_SUPPORT_CSR tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, sessionId ); WLAN_VOS_DIAG_EVENT_DEF(removeKeyEvent, vos_event_wlan_security_payload_type); - palZeroMemory(pMac->hHdd, &removeKeyEvent, sizeof(vos_event_wlan_security_payload_type)); + vos_mem_set(&removeKeyEvent, + sizeof(vos_event_wlan_security_payload_type),0); removeKeyEvent.eventId = WLAN_SECURITY_EVENT_REMOVE_KEY_REQ; removeKeyEvent.encryptionModeMulticast = (v_U8_t)diagEncTypeFromCSRType(pSession->connectedProfile.mcEncryptionType); removeKeyEvent.encryptionModeUnicast = (v_U8_t)diagEncTypeFromCSRType(pSession->connectedProfile.EncryptionType); - palCopyMemory( pMac->hHdd, removeKeyEvent.bssid, pSession->connectedProfile.bssid, 6 ); + vos_mem_copy(removeKeyEvent.bssid, pSession->connectedProfile.bssid, 6); removeKeyEvent.keyId = pCommand->u.removeKeyCmd.keyId; removeKeyEvent.authMode = (v_U8_t)diagAuthTypeFromCSRType(pSession->connectedProfile.AuthType); WLAN_VOS_DIAG_EVENT_REPORT(&removeKeyEvent, EVENT_WLAN_SECURITY); #endif //FEATURE_WLAN_DIAG_SUPPORT_CSR if( csrIsSetKeyAllowed(pMac, sessionId) ) { - status = palAllocateMemory( pMac->hHdd, (void **)&pMsg, wMsgLen ); + pMsg = vos_mem_malloc(wMsgLen); + if ( NULL == pMsg ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; } else { @@ -8400,7 +8671,7 @@ eHalStatus csrRoamProcessRemoveKeyCommand( tpAniSirGlobal pMac, tSmeCmd *pComman } if( HAL_STATUS_SUCCESS( status ) ) { - palZeroMemory(pMac->hHdd, pMsg, wMsgLen); + vos_mem_set(pMsg, wMsgLen ,0); pMsg->messageType = pal_cpu_to_be16((tANI_U16)eWNI_SME_REMOVEKEY_REQ); pMsg->length = pal_cpu_to_be16(wMsgLen); pMsg->sessionId = (tANI_U8)sessionId; @@ -8408,16 +8679,18 @@ eHalStatus csrRoamProcessRemoveKeyCommand( tpAniSirGlobal pMac, tSmeCmd *pComman p = (tANI_U8 *)pMsg + sizeof(pMsg->messageType) + sizeof(pMsg->length) + sizeof(pMsg->sessionId) + sizeof(pMsg->transactionId); // bssId - copy from session Info - palCopyMemory( pMac->hHdd, p, &pMac->roam.roamSession[sessionId].connectedProfile.bssid, sizeof(tSirMacAddr) ); + vos_mem_copy(p, + &pMac->roam.roamSession[sessionId].connectedProfile.bssid, + sizeof(tSirMacAddr)); p += sizeof(tSirMacAddr); // peerMacAddr - palCopyMemory( pMac->hHdd, p, pCommand->u.removeKeyCmd.peerMac, sizeof(tSirMacAddr) ); + vos_mem_copy(p, pCommand->u.removeKeyCmd.peerMac, sizeof(tSirMacAddr)); p += sizeof(tSirMacAddr); // edType *p = (tANI_U8)csrTranslateEncryptTypeToEdType( pCommand->u.removeKeyCmd.encType ); p++; // weptype - if( ( eCSR_ENCRYPT_TYPE_WEP40_STATICKEY == pCommand->u.removeKeyCmd.encType ) || + if( ( eCSR_ENCRYPT_TYPE_WEP40_STATICKEY == pCommand->u.removeKeyCmd.encType ) || ( eCSR_ENCRYPT_TYPE_WEP104_STATICKEY == pCommand->u.removeKeyCmd.encType ) ) { *p = (tANI_U8)eSIR_WEP_STATIC; @@ -8435,7 +8708,7 @@ eHalStatus csrRoamProcessRemoveKeyCommand( tpAniSirGlobal pMac, tSmeCmd *pComman } if( !HAL_STATUS_SUCCESS( status ) ) { - smsLog( pMac, LOGE, FL(" error status "), status ); + smsLog( pMac, LOGE, FL(" error status %d"), status ); #ifdef FEATURE_WLAN_DIAG_SUPPORT_CSR removeKeyEvent.eventId = WLAN_SECURITY_EVENT_REMOVE_KEY_RSP; removeKeyEvent.status = WLAN_SECURITY_STATUS_FAILURE; @@ -8449,7 +8722,7 @@ eHalStatus csrRoamProcessRemoveKeyCommand( tpAniSirGlobal pMac, tSmeCmd *pComman eHalStatus csrRoamSetKey( tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamSetKey *pSetKey, tANI_U32 roamId ) { eHalStatus status; - + if( !csrIsSetKeyAllowed(pMac, sessionId) ) { status = eHAL_STATUS_CSR_WRONG_STATE; @@ -8463,28 +8736,32 @@ eHalStatus csrRoamSetKey( tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamSetKe /* Prepare a filter base on a profile for parsing the scan results. - Upon successful return, caller MUST call csrFreeScanFilter on + Upon successful return, caller MUST call csrFreeScanFilter on pScanFilter when it is done with the filter. */ -eHalStatus csrRoamPrepareFilterFromProfile(tpAniSirGlobal pMac, tCsrRoamProfile *pProfile, +eHalStatus csrRoamPrepareFilterFromProfile(tpAniSirGlobal pMac, tCsrRoamProfile *pProfile, tCsrScanResultFilter *pScanFilter) { eHalStatus status = eHAL_STATUS_SUCCESS; tANI_U32 size = 0; tANI_U8 index = 0; - + do { if(pProfile->BSSIDs.numOfBSSIDs) { size = sizeof(tCsrBssid) * pProfile->BSSIDs.numOfBSSIDs; - status = palAllocateMemory(pMac->hHdd, (void **)&pScanFilter->BSSIDs.bssid, size); + pScanFilter->BSSIDs.bssid = vos_mem_malloc(size); + if ( NULL == pScanFilter->BSSIDs.bssid ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; if(!HAL_STATUS_SUCCESS(status)) { break; } pScanFilter->BSSIDs.numOfBSSIDs = pProfile->BSSIDs.numOfBSSIDs; - palCopyMemory(pMac->hHdd, pScanFilter->BSSIDs.bssid, pProfile->BSSIDs.bssid, size); + vos_mem_copy(pScanFilter->BSSIDs.bssid, pProfile->BSSIDs.bssid, size); } if(pProfile->SSIDs.numOfSSIDs) { @@ -8499,12 +8776,17 @@ eHalStatus csrRoamPrepareFilterFromProfile(tpAniSirGlobal pMac, tCsrRoamProfile pScanFilter->SSIDs.numOfSSIDs = 1; } size = sizeof(tCsrSSIDInfo) * pProfile->SSIDs.numOfSSIDs; - status = palAllocateMemory(pMac->hHdd, (void **)&pScanFilter->SSIDs.SSIDList, size); + pScanFilter->SSIDs.SSIDList = vos_mem_malloc(size); + if ( NULL == pScanFilter->SSIDs.SSIDList ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; if(!HAL_STATUS_SUCCESS(status)) { break; } - palCopyMemory(pMac->hHdd, pScanFilter->SSIDs.SSIDList, pProfile->SSIDs.SSIDList, size); + vos_mem_copy(pScanFilter->SSIDs.SSIDList, pProfile->SSIDs.SSIDList, + size); } if(!pProfile->ChannelInfo.ChannelList || (pProfile->ChannelInfo.ChannelList[0] == 0) ) { @@ -8513,7 +8795,14 @@ eHalStatus csrRoamPrepareFilterFromProfile(tpAniSirGlobal pMac, tCsrRoamProfile } else if(pProfile->ChannelInfo.numOfChannels) { - status = palAllocateMemory(pMac->hHdd, (void **)&pScanFilter->ChannelInfo.ChannelList, sizeof(*pScanFilter->ChannelInfo.ChannelList) * pProfile->ChannelInfo.numOfChannels); + pScanFilter->ChannelInfo.ChannelList = vos_mem_malloc( + sizeof(*pScanFilter->ChannelInfo.ChannelList) * + pProfile->ChannelInfo.numOfChannels); + if ( NULL == pScanFilter->ChannelInfo.ChannelList ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; + pScanFilter->ChannelInfo.numOfChannels = 0; if(HAL_STATUS_SUCCESS(status)) { @@ -8521,11 +8810,11 @@ eHalStatus csrRoamPrepareFilterFromProfile(tpAniSirGlobal pMac, tCsrRoamProfile { if(csrRoamIsChannelValid(pMac, pProfile->ChannelInfo.ChannelList[index])) { - pScanFilter->ChannelInfo.ChannelList[pScanFilter->ChannelInfo.numOfChannels] + pScanFilter->ChannelInfo.ChannelList[pScanFilter->ChannelInfo.numOfChannels] = pProfile->ChannelInfo.ChannelList[index]; pScanFilter->ChannelInfo.numOfChannels++; } - else + else { smsLog(pMac, LOG1, FL("process a channel (%d) that is invalid"), pProfile->ChannelInfo.ChannelList[index]); } @@ -8536,7 +8825,7 @@ eHalStatus csrRoamPrepareFilterFromProfile(tpAniSirGlobal pMac, tCsrRoamProfile break; } } - else + else { smsLog(pMac, LOGW, FL("Channel list empty")); status = eHAL_STATUS_FAILURE; @@ -8572,8 +8861,8 @@ eHalStatus csrRoamPrepareFilterFromProfile(tpAniSirGlobal pMac, tCsrRoamProfile if( pProfile->countryCode[0] ) { //This causes the matching function to use countryCode as one of the criteria. - palCopyMemory( pMac->hHdd, pScanFilter->countryCode, pProfile->countryCode, - WNI_CFG_COUNTRY_CODE_LEN ); + vos_mem_copy(pScanFilter->countryCode, pProfile->countryCode, + WNI_CFG_COUNTRY_CODE_LEN); } #ifdef WLAN_FEATURE_VOWIFI_11R if (pProfile->MDID.mdiePresent) @@ -8582,14 +8871,14 @@ eHalStatus csrRoamPrepareFilterFromProfile(tpAniSirGlobal pMac, tCsrRoamProfile pScanFilter->MDID.mobilityDomain = pProfile->MDID.mobilityDomain; } #endif - + }while(0); - + if(!HAL_STATUS_SUCCESS(status)) { csrFreeScanFilter(pMac, pScanFilter); } - + return(status); } @@ -8619,13 +8908,15 @@ tANI_BOOLEAN csrRoamIssueWmStatusChange( tpAniSirGlobal pMac, tANI_U32 sessionId pCommand->u.wmStatusChangeCmd.Type = Type; if ( eCsrDisassociated == Type ) { - palCopyMemory( pMac->hHdd, &pCommand->u.wmStatusChangeCmd.u.DisassocIndMsg, pSmeRsp, - sizeof( pCommand->u.wmStatusChangeCmd.u.DisassocIndMsg ) ); + vos_mem_copy(&pCommand->u.wmStatusChangeCmd.u.DisassocIndMsg, + pSmeRsp, + sizeof( pCommand->u.wmStatusChangeCmd.u.DisassocIndMsg )); } else { - palCopyMemory( pMac->hHdd, &pCommand->u.wmStatusChangeCmd.u.DeauthIndMsg, pSmeRsp, - sizeof( pCommand->u.wmStatusChangeCmd.u.DeauthIndMsg ) ); + vos_mem_copy(&pCommand->u.wmStatusChangeCmd.u.DeauthIndMsg, + pSmeRsp, + sizeof( pCommand->u.wmStatusChangeCmd.u.DeauthIndMsg )); } if( HAL_STATUS_SUCCESS( csrQueueSmeCommand(pMac, pCommand, eANI_BOOLEAN_TRUE) ) ) { @@ -8647,11 +8938,12 @@ static void csrUpdateRssi(tpAniSirGlobal pMac, void* pMsg) { v_S7_t rssi = 0; tAniGetRssiReq *pGetRssiReq = (tAniGetRssiReq*)pMsg; + VOS_STATUS vosStatus = VOS_STATUS_SUCCESS; if(pGetRssiReq) { if(NULL != pGetRssiReq->pVosContext) { - WLANTL_GetRssi(pGetRssiReq->pVosContext, pGetRssiReq->staId, &rssi); + vosStatus = WLANTL_GetRssi(pGetRssiReq->pVosContext, pGetRssiReq->staId, &rssi,pGetRssiReq); } else { @@ -8661,7 +8953,9 @@ static void csrUpdateRssi(tpAniSirGlobal pMac, void* pMsg) if(NULL != pGetRssiReq->rssiCallback) { - ((tCsrRssiCallback)(pGetRssiReq->rssiCallback))(rssi, pGetRssiReq->staId, pGetRssiReq->pDevContext); + if(vosStatus!=VOS_STATUS_E_BUSY) + ((tCsrRssiCallback)(pGetRssiReq->rssiCallback))(rssi, pGetRssiReq->staId, pGetRssiReq->pDevContext); + else smsLog( pMac, LOGE, FL("rssi request is posted. waiting for reply")); } else { @@ -8674,6 +8968,39 @@ static void csrUpdateRssi(tpAniSirGlobal pMac, void* pMsg) smsLog( pMac, LOGE, FL("pGetRssiReq is NULL")); } return; + +} + +static void csrUpdateSnr(tpAniSirGlobal pMac, void* pMsg) +{ + tANI_S8 snr = 0; + tAniGetSnrReq *pGetSnrReq = (tAniGetSnrReq*)pMsg; + + if (pGetSnrReq) + { + if (VOS_STATUS_SUCCESS != + WDA_GetSnr(pGetSnrReq->staId, &snr)) + { + smsLog(pMac, LOGE, FL("Error in WLANTL_GetSnr")); + return; + } + + if (pGetSnrReq->snrCallback) + { + ((tCsrSnrCallback)(pGetSnrReq->snrCallback))(snr, pGetSnrReq->staId, + pGetSnrReq->pDevContext); + } + else + { + smsLog(pMac, LOGE, FL("pGetSnrReq->snrCallback is NULL")); + return; + } + } + else + { + smsLog(pMac, LOGE, FL("pGetSnrReq is NULL")); + } + return; } #if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR) void csrRoamRssiRspProcessor(tpAniSirGlobal pMac, void* pMsg) @@ -8710,6 +9037,89 @@ void csrRoamRssiRspProcessor(tpAniSirGlobal pMac, void* pMsg) } #endif +#if defined(FEATURE_WLAN_CCX) && defined(FEATURE_WLAN_CCX_UPLOAD) +void csrTsmStatsRspProcessor(tpAniSirGlobal pMac, void* pMsg) +{ + tAniGetTsmStatsRsp* pTsmStatsRsp = (tAniGetTsmStatsRsp*)pMsg; + + if (NULL != pTsmStatsRsp) + { + /* Get roam Rssi request is backed up and passed back to the response, + Extract the request message to fetch callback */ + tpAniGetTsmStatsReq reqBkp + = (tAniGetTsmStatsReq*)pTsmStatsRsp->tsmStatsReq; + + if (NULL != reqBkp) + { + if (NULL != reqBkp->tsmStatsCallback) + { + ((tCsrTsmStatsCallback)(reqBkp->tsmStatsCallback))( + pTsmStatsRsp->tsmMetrics, + pTsmStatsRsp->staId, + reqBkp->pDevContext + ); + reqBkp->tsmStatsCallback = NULL; + } + vos_mem_free(reqBkp); + } + else + { + smsLog( pMac, LOGE, FL("reqBkp is NULL")); + if (NULL != reqBkp) + { + vos_mem_free(reqBkp); + } + } + } + else + { + smsLog( pMac, LOGE, FL("pTsmStatsRsp is NULL")); + } + return; +} + +void csrSendCcxAdjacentApRepInd(tpAniSirGlobal pMac, tCsrRoamSession *pSession) +{ + tANI_U32 roamTS2 = 0; + tCsrRoamInfo roamInfo; + tpPESession pSessionEntry = NULL; + tANI_U8 sessionId = CSR_SESSION_ID_INVALID; + + if (NULL == pSession) + { + smsLog(pMac, LOGE, FL("pSession is NULL")); + return; + } + + roamTS2 = vos_timer_get_system_time(); + roamInfo.tsmRoamDelay = roamTS2 - pSession->roamTS1; + smsLog(pMac, LOG1, + "Bssid(%02X:%02X:%02X:%02X:%02X:%02X) Roaming Delay(%u ms)", + pSession->connectedProfile.bssid[0], + pSession->connectedProfile.bssid[1], + pSession->connectedProfile.bssid[2], + pSession->connectedProfile.bssid[3], + pSession->connectedProfile.bssid[4], + pSession->connectedProfile.bssid[5], + roamInfo.tsmRoamDelay); + + pSessionEntry = peFindSessionByBssid(pMac, + pSession->connectedProfile.bssid, + &sessionId); + if (NULL == pSessionEntry) + { + smsLog(pMac, LOGE, FL("session %d not found"), sessionId); + return; + } + + pSessionEntry->ccxContext.tsm.tsmMetrics.RoamingDly + = roamInfo.tsmRoamDelay; + + csrRoamCallCallback(pMac, pSession->sessionId, &roamInfo, + 0, eCSR_ROAM_CCX_ADJ_AP_REPORT_IND, 0); +} +#endif /* FEATURE_WLAN_CCX && FEATURE_WLAN_CCX_UPLOAD */ + static void csrRoamRssiIndHdlr(tpAniSirGlobal pMac, void* pMsg) { WLANTL_TlIndicationReq *pTlRssiInd = (WLANTL_TlIndicationReq*)pMsg; @@ -8740,13 +9150,17 @@ eHalStatus csrSendResetApCapsChanged(tpAniSirGlobal pMac, tSirMacAddr *bssId) /* Create the message and send to lim */ len = sizeof(tSirResetAPCapsChange); - status = palAllocateMemory( pMac->hHdd, (void **)&pMsg, len ); + pMsg = vos_mem_malloc(len); + if ( NULL == pMsg ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; if (HAL_STATUS_SUCCESS(status)) { - palZeroMemory(pMac->hHdd, pMsg, sizeof(tSirResetAPCapsChange) ); + vos_mem_set(pMsg, sizeof(tSirResetAPCapsChange), 0); pMsg->messageType = eWNI_SME_RESET_AP_CAPS_CHANGED; pMsg->length = len; - palCopyMemory( pMac->hHdd, pMsg->bssId, bssId, sizeof(tSirMacAddr) ); + vos_mem_copy(pMsg->bssId, bssId, sizeof(tSirMacAddr)); smsLog( pMac, LOG1, FL("CSR reset caps change for Bssid= %02x-%02x-%02x-%02x-%02x-%02x"), pMsg->bssId[ 0 ], pMsg->bssId[ 1 ], pMsg->bssId[ 2 ], pMsg->bssId[ 3 ], pMsg->bssId[ 4 ], pMsg->bssId[ 5 ]); @@ -8782,8 +9196,8 @@ void csrRoamCheckForLinkStatusChange( tpAniSirGlobal pMac, tSirSmeRsp *pSirMsg ) pSirMsg->messageType = (pSirMsg->messageType); pSirMsg->length = (pSirMsg->length); pSirMsg->statusCode = (pSirMsg->statusCode); - palZeroMemory(pMac->hHdd, &roamInfo, sizeof(roamInfo)); - switch( pSirMsg->messageType ) + vos_mem_set(&roamInfo, sizeof(roamInfo), 0); + switch( pSirMsg->messageType ) { case eWNI_SME_ASSOC_IND: { @@ -8808,18 +9222,20 @@ void csrRoamCheckForLinkStatusChange( tpAniSirGlobal pMac, tSirSmeRsp *pSirMsg ) pRoamInfo->assocReqPtr = pAssocInd->assocReqPtr; pRoamInfo->beaconPtr = pAssocInd->beaconPtr; - pRoamInfo->beaconLength = pAssocInd->beaconLength; - pRoamInfo->statusCode = eSIR_SME_SUCCESS; //send the status code as Success + pRoamInfo->beaconLength = pAssocInd->beaconLength; + pRoamInfo->statusCode = eSIR_SME_SUCCESS; //send the status code as Success pRoamInfo->u.pConnectedProfile = &pSession->connectedProfile; pRoamInfo->staId = (tANI_U8)pAssocInd->staId; pRoamInfo->rsnIELen = (tANI_U8)pAssocInd->rsnIE.length; pRoamInfo->prsnIE = pAssocInd->rsnIE.rsnIEdata; - + pRoamInfo->addIELen = (tANI_U8)pAssocInd->addIE.length; pRoamInfo->paddIE = pAssocInd->addIE.addIEdata; - palCopyMemory(pMac->hHdd, pRoamInfo->peerMac, pAssocInd->peerMacAddr, sizeof(tSirMacAddr)); - palCopyMemory(pMac->hHdd, &pRoamInfo->bssid, pAssocInd->bssId, sizeof(tCsrBssid)); + vos_mem_copy(pRoamInfo->peerMac, pAssocInd->peerMacAddr, + sizeof(tSirMacAddr)); + vos_mem_copy(&pRoamInfo->bssid, pAssocInd->bssId, + sizeof(tCsrBssid)); pRoamInfo->wmmEnabledSta = pAssocInd->wmmEnabledSta; if(CSR_IS_WDS_AP( pRoamInfo->u.pConnectedProfile)) status = csrRoamCallCallback(pMac, sessionId, pRoamInfo, 0, eCSR_ROAM_WDS_IND, eCSR_ROAM_RESULT_WDS_ASSOCIATION_IND);//Sta @@ -8827,7 +9243,7 @@ void csrRoamCheckForLinkStatusChange( tpAniSirGlobal pMac, tSirSmeRsp *pSirMsg ) { if( CSR_IS_ENC_TYPE_STATIC( pSession->pCurRoamProfile->negotiatedUCEncryptionType )) { - csrRoamIssueSetContextReq( pMac, sessionId, pSession->pCurRoamProfile->negotiatedUCEncryptionType, + csrRoamIssueSetContextReq( pMac, sessionId, pSession->pCurRoamProfile->negotiatedUCEncryptionType, pSession->pConnectBssDesc, &(pRoamInfo->peerMac), FALSE, TRUE, eSIR_TX_RX, 0, 0, NULL, 0 ); // NO keys... these key parameters don't matter. @@ -8839,11 +9255,11 @@ void csrRoamCheckForLinkStatusChange( tpAniSirGlobal pMac, tSirSmeRsp *pSirMsg ) } status = csrRoamCallCallback(pMac, sessionId, pRoamInfo, 0, eCSR_ROAM_INFRA_IND, eCSR_ROAM_RESULT_INFRA_ASSOCIATION_IND); if (!HAL_STATUS_SUCCESS(status)) - pRoamInfo->statusCode = eSIR_SME_ASSOC_REFUSED;// Refused due to Mac filtering + pRoamInfo->statusCode = eSIR_SME_ASSOC_REFUSED;// Refused due to Mac filtering } /* Send Association completion message to PE */ status = csrSendAssocCnfMsg( pMac, pAssocInd, status );//Sta - + /* send a message to CSR itself just to avoid the EAPOL frames going * OTA before association response */ if(CSR_IS_WDS_AP( pRoamInfo->u.pConnectedProfile)) @@ -8860,7 +9276,6 @@ void csrRoamCheckForLinkStatusChange( tpAniSirGlobal pMac, tSirSmeRsp *pSirMsg ) } break; case eWNI_SME_DISASSOC_IND: - smsLog( pMac, LOGE, FL("DISASSOCIATION Indication from MAC")); // Check if AP dis-associated us because of MIC failure. If so, // then we need to take action immediately and not wait till the // the WmStatusChange requests is pushed and processed @@ -8868,9 +9283,14 @@ void csrRoamCheckForLinkStatusChange( tpAniSirGlobal pMac, tSirSmeRsp *pSirMsg ) status = csrRoamGetSessionIdFromBSSID( pMac, (tCsrBssid *)pDisassocInd->bssId, &sessionId ); if( HAL_STATUS_SUCCESS( status ) ) { + smsLog( pMac, LOGE, FL("DISASSOCIATION Indication from MAC for session %d "), sessionId); + smsLog( pMac, LOGE, FL("DISASSOCIATION from peer =" MAC_ADDRESS_STR " " + " reason = %d status = %d "), + MAC_ADDR_ARRAY(pDisassocInd->peerMacAddr), + pDisassocInd->reasonCode, pDisassocInd->statusCode); // If we are in neighbor preauth done state then on receiving // disassoc or deauth we dont roam instead we just disassoc - // from current ap and then go to disconnected state + // from current ap and then go to disconnected state // This happens for CCX and 11r FT connections ONLY. #ifdef WLAN_FEATURE_VOWIFI_11R if (csrRoamIs11rAssoc(pMac) && (csrNeighborRoamStatePreauthDone(pMac))) @@ -8912,27 +9332,36 @@ void csrRoamCheckForLinkStatusChange( tpAniSirGlobal pMac, tSirSmeRsp *pSirMsg ) pRoamInfo = &roamInfo; - pRoamInfo->statusCode = pDisassocInd->statusCode; + pRoamInfo->statusCode = pDisassocInd->statusCode; pRoamInfo->u.pConnectedProfile = &pSession->connectedProfile; pRoamInfo->staId = (tANI_U8)pDisassocInd->staId; - palCopyMemory(pMac->hHdd, pRoamInfo->peerMac, pDisassocInd->peerMacAddr, sizeof(tSirMacAddr)); - palCopyMemory(pMac->hHdd, &pRoamInfo->bssid, pDisassocInd->bssId, sizeof(tCsrBssid)); + vos_mem_copy(pRoamInfo->peerMac, pDisassocInd->peerMacAddr, + sizeof(tSirMacAddr)); + vos_mem_copy(&pRoamInfo->bssid, pDisassocInd->bssId, + sizeof(tCsrBssid)); status = csrRoamCallCallback(pMac, sessionId, pRoamInfo, 0, eCSR_ROAM_INFRA_IND, eCSR_ROAM_RESULT_DISASSOC_IND); /* - * STA/P2P client got disassociated so remove any pending deauth + * STA/P2P client got disassociated so remove any pending deauth * commands in sme pending list */ pCommand.command = eSmeCommandRoam; pCommand.sessionId = (tANI_U8)sessionId; pCommand.u.roamCmd.roamReason = eCsrForcedDeauthSta; - vos_mem_copy(pCommand.u.roamCmd.peerMac, pDisassocInd->peerMacAddr, sizeof(tSirMacAddr)); + vos_mem_copy(pCommand.u.roamCmd.peerMac, + pDisassocInd->peerMacAddr, + sizeof(tSirMacAddr)); csrRoamRemoveDuplicateCommand(pMac, sessionId, &pCommand, eCsrForcedDeauthSta); } } + else + { + smsLog(pMac, LOGE, FL(" Session Id not found for BSSID " MAC_ADDRESS_STR), + MAC_ADDR_ARRAY(pDisassocInd->bssId)); + } break; case eWNI_SME_DEAUTH_IND: smsLog( pMac, LOG1, FL("DEAUTHENTICATION Indication from MAC")); @@ -8942,7 +9371,7 @@ void csrRoamCheckForLinkStatusChange( tpAniSirGlobal pMac, tSirSmeRsp *pSirMsg ) { // If we are in neighbor preauth done state then on receiving // disassoc or deauth we dont roam instead we just disassoc - // from current ap and then go to disconnected state + // from current ap and then go to disconnected state // This happens for CCX and 11r FT connections ONLY. #ifdef WLAN_FEATURE_VOWIFI_11R if (csrRoamIs11rAssoc(pMac) && (csrNeighborRoamStatePreauthDone(pMac))) @@ -8989,14 +9418,16 @@ void csrRoamCheckForLinkStatusChange( tpAniSirGlobal pMac, tSirSmeRsp *pSirMsg ) pRoamInfo->staId = (tANI_U8)pDeauthInd->staId; - palCopyMemory(pMac->hHdd, pRoamInfo->peerMac, pDeauthInd->peerMacAddr, sizeof(tSirMacAddr)); - palCopyMemory(pMac->hHdd, &pRoamInfo->bssid, pDeauthInd->bssId, sizeof(tCsrBssid)); + vos_mem_copy(pRoamInfo->peerMac, pDeauthInd->peerMacAddr, + sizeof(tSirMacAddr)); + vos_mem_copy(&pRoamInfo->bssid, pDeauthInd->bssId, + sizeof(tCsrBssid)); status = csrRoamCallCallback(pMac, sessionId, pRoamInfo, 0, eCSR_ROAM_INFRA_IND, eCSR_ROAM_RESULT_DEAUTH_IND); } } break; - + case eWNI_SME_SWITCH_CHL_REQ: // in case of STA, the SWITCH_CHANNEL originates from its AP smsLog( pMac, LOGW, FL("eWNI_SME_SWITCH_CHL_REQ from SME")); pSwitchChnInd = (tpSirSmeSwitchChannelInd)pSirMsg; @@ -9018,14 +9449,14 @@ void csrRoamCheckForLinkStatusChange( tpAniSirGlobal pMac, tSirSmeRsp *pSirMsg ) } } break; - + case eWNI_SME_DEAUTH_RSP: smsLog( pMac, LOGW, FL("eWNI_SME_DEAUTH_RSP from SME")); { tSirSmeDeauthRsp* pDeauthRsp = (tSirSmeDeauthRsp *)pSirMsg; sessionId = pDeauthRsp->sessionId; if( CSR_IS_SESSION_VALID(pMac, sessionId) ) - { + { pSession = CSR_GET_SESSION(pMac, sessionId); if(!pSession) { @@ -9036,7 +9467,8 @@ void csrRoamCheckForLinkStatusChange( tpAniSirGlobal pMac, tSirSmeRsp *pSirMsg ) { pRoamInfo = &roamInfo; pRoamInfo->u.pConnectedProfile = &pSession->connectedProfile; - palCopyMemory(pMac->hHdd, pRoamInfo->peerMac, pDeauthRsp->peerMacAddr, sizeof(tSirMacAddr)); + vos_mem_copy(pRoamInfo->peerMac, pDeauthRsp->peerMacAddr, + sizeof(tSirMacAddr)); pRoamInfo->reasonCode = eCSR_ROAM_RESULT_FORCED; pRoamInfo->statusCode = pDeauthRsp->statusCode; status = csrRoamCallCallback(pMac, sessionId, pRoamInfo, 0, eCSR_ROAM_LOSTLINK, eCSR_ROAM_RESULT_FORCED); @@ -9044,7 +9476,7 @@ void csrRoamCheckForLinkStatusChange( tpAniSirGlobal pMac, tSirSmeRsp *pSirMsg ) } } break; - + case eWNI_SME_DISASSOC_RSP: /* session id is invalid here so cant use it to access the array curSubstate as index */ smsLog( pMac, LOGW, FL("eWNI_SME_DISASSOC_RSP from SME ")); @@ -9052,7 +9484,7 @@ void csrRoamCheckForLinkStatusChange( tpAniSirGlobal pMac, tSirSmeRsp *pSirMsg ) tSirSmeDisassocRsp *pDisassocRsp = (tSirSmeDisassocRsp *)pSirMsg; sessionId = pDisassocRsp->sessionId; if( CSR_IS_SESSION_VALID(pMac, sessionId) ) - { + { pSession = CSR_GET_SESSION(pMac, sessionId); if(!pSession) { @@ -9063,7 +9495,8 @@ void csrRoamCheckForLinkStatusChange( tpAniSirGlobal pMac, tSirSmeRsp *pSirMsg ) { pRoamInfo = &roamInfo; pRoamInfo->u.pConnectedProfile = &pSession->connectedProfile; - palCopyMemory(pMac->hHdd, pRoamInfo->peerMac, pDisassocRsp->peerMacAddr, sizeof(tSirMacAddr)); + vos_mem_copy(pRoamInfo->peerMac, pDisassocRsp->peerMacAddr, + sizeof(tSirMacAddr)); pRoamInfo->reasonCode = eCSR_ROAM_RESULT_FORCED; pRoamInfo->statusCode = pDisassocRsp->statusCode; status = csrRoamCallCallback(pMac, sessionId, pRoamInfo, 0, eCSR_ROAM_LOSTLINK, eCSR_ROAM_RESULT_FORCED); @@ -9076,31 +9509,11 @@ void csrRoamCheckForLinkStatusChange( tpAniSirGlobal pMac, tSirSmeRsp *pSirMsg ) tpSirSmeMicFailureInd pMicInd = (tpSirSmeMicFailureInd)pSirMsg; tCsrRoamInfo roamInfo, *pRoamInfo = NULL; eCsrRoamResult result = eCSR_ROAM_RESULT_MIC_ERROR_UNICAST; -#ifdef FEATURE_WLAN_DIAG_SUPPORT_CSR - { - tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, sessionId ); - WLAN_VOS_DIAG_EVENT_DEF(secEvent, vos_event_wlan_security_payload_type); - if(!pSession) - { - smsLog(pMac, LOGE, FL(" session %d not found "), sessionId); - return; - } - palZeroMemory(pMac->hHdd, &secEvent, sizeof(vos_event_wlan_security_payload_type)); - secEvent.eventId = WLAN_SECURITY_EVENT_MIC_ERROR; - secEvent.encryptionModeMulticast = - (v_U8_t)diagEncTypeFromCSRType(pSession->connectedProfile.mcEncryptionType); - secEvent.encryptionModeUnicast = - (v_U8_t)diagEncTypeFromCSRType(pSession->connectedProfile.EncryptionType); - secEvent.authMode = - (v_U8_t)diagAuthTypeFromCSRType(pSession->connectedProfile.AuthType); - palCopyMemory( pMac->hHdd, secEvent.bssid, pSession->connectedProfile.bssid, 6 ); - WLAN_VOS_DIAG_EVENT_REPORT(&secEvent, EVENT_WLAN_SECURITY); - } -#endif//FEATURE_WLAN_DIAG_SUPPORT_CSR + status = csrRoamGetSessionIdFromBSSID( pMac, (tCsrBssid *)pMicInd->bssId, &sessionId ); if( HAL_STATUS_SUCCESS( status ) ) { - palZeroMemory(pMac->hHdd, &roamInfo, sizeof(tCsrRoamInfo)); + vos_mem_set(&roamInfo, sizeof(tCsrRoamInfo), 0); roamInfo.u.pMICFailureInfo = &pMicInd->info; pRoamInfo = &roamInfo; if(pMicInd->info.multicast) @@ -9113,6 +9526,30 @@ void csrRoamCheckForLinkStatusChange( tpAniSirGlobal pMac, tSirSmeRsp *pSirMsg ) } csrRoamCallCallback(pMac, sessionId, pRoamInfo, 0, eCSR_ROAM_MIC_ERROR_IND, result); } + +#ifdef FEATURE_WLAN_DIAG_SUPPORT_CSR + { + WLAN_VOS_DIAG_EVENT_DEF(secEvent, vos_event_wlan_security_payload_type); + tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, sessionId ); + if(!pSession) + { + smsLog(pMac, LOGE, FL(" session %d not found "), sessionId); + return; + } + + vos_mem_set(&secEvent, sizeof(vos_event_wlan_security_payload_type), 0); + secEvent.eventId = WLAN_SECURITY_EVENT_MIC_ERROR; + secEvent.encryptionModeMulticast = + (v_U8_t)diagEncTypeFromCSRType(pSession->connectedProfile.mcEncryptionType); + secEvent.encryptionModeUnicast = + (v_U8_t)diagEncTypeFromCSRType(pSession->connectedProfile.EncryptionType); + secEvent.authMode = + (v_U8_t)diagAuthTypeFromCSRType(pSession->connectedProfile.AuthType); + vos_mem_copy(secEvent.bssid, + pSession->connectedProfile.bssid, 6); + WLAN_VOS_DIAG_EVENT_REPORT(&secEvent, EVENT_WLAN_SECURITY); + } +#endif//FEATURE_WLAN_DIAG_SUPPORT_CSR } break; case eWNI_SME_WPS_PBC_PROBE_REQ_IND: @@ -9120,21 +9557,21 @@ void csrRoamCheckForLinkStatusChange( tpAniSirGlobal pMac, tSirSmeRsp *pSirMsg ) tpSirSmeProbeReqInd pProbeReqInd = (tpSirSmeProbeReqInd)pSirMsg; tCsrRoamInfo roamInfo; smsLog( pMac, LOG1, FL("WPS PBC Probe request Indication from SME")); - + status = csrRoamGetSessionIdFromBSSID( pMac, (tCsrBssid *)pProbeReqInd->bssId, &sessionId ); if( HAL_STATUS_SUCCESS( status ) ) { - palZeroMemory(pMac->hHdd, &roamInfo, sizeof(tCsrRoamInfo)); + vos_mem_set(&roamInfo, sizeof(tCsrRoamInfo), 0); roamInfo.u.pWPSPBCProbeReq = &pProbeReqInd->WPSPBCProbeReq; - csrRoamCallCallback(pMac, sessionId, &roamInfo, 0, eCSR_ROAM_WPS_PBC_PROBE_REQ_IND, + csrRoamCallCallback(pMac, sessionId, &roamInfo, 0, eCSR_ROAM_WPS_PBC_PROBE_REQ_IND, eCSR_ROAM_RESULT_WPS_PBC_PROBE_REQ_IND); } } - break; - + break; + case eWNI_SME_WM_STATUS_CHANGE_NTF: pStatusChangeMsg = (tSirSmeWmStatusChangeNtf *)pSirMsg; - switch( pStatusChangeMsg->statusChangeCode ) + switch( pStatusChangeMsg->statusChangeCode ) { case eSIR_SME_IBSS_ACTIVE: sessionId = csrFindIbssSession( pMac ); @@ -9149,7 +9586,9 @@ void csrRoamCheckForLinkStatusChange( tpAniSirGlobal pMac, tSirSmeRsp *pSirMsg ) pSession->connectState = eCSR_ASSOC_STATE_TYPE_IBSS_CONNECTED; if(pSession->pConnectBssDesc) { - palCopyMemory(pMac->hHdd, &roamInfo.bssid, pSession->pConnectBssDesc->bssId, sizeof(tCsrBssid)); + vos_mem_copy(&roamInfo.bssid, + pSession->pConnectBssDesc->bssId, + sizeof(tCsrBssid)); roamInfo.u.pConnectedProfile = &pSession->connectedProfile; pRoamInfo = &roamInfo; } @@ -9198,10 +9637,11 @@ void csrRoamCheckForLinkStatusChange( tpAniSirGlobal pMac, tSirSmeRsp *pSirMsg ) pIbssLog->eventId = WLAN_IBSS_EVENT_COALESCING; if(pNewBss) { - palCopyMemory(pMac->hHdd, pIbssLog->bssid, pNewBss->bssId, 6); + vos_mem_copy(pIbssLog->bssid, pNewBss->bssId, 6); if(pNewBss->ssId.length) { - palCopyMemory(pMac->hHdd, pIbssLog->ssid, pNewBss->ssId.ssId, pNewBss->ssId.length); + vos_mem_copy(pIbssLog->ssid, pNewBss->ssId.ssId, + pNewBss->ssId.length); } pIbssLog->operatingChannel = pNewBss->channelNumber; } @@ -9215,26 +9655,26 @@ void csrRoamCheckForLinkStatusChange( tpAniSirGlobal pMac, tSirSmeRsp *pSirMsg ) } #endif //FEATURE_WLAN_DIAG_SUPPORT_CSR csrRoamUpdateConnectedProfileFromNewBss( pMac, sessionId, pNewBss ); - csrRoamIssueSetContextReq( pMac, sessionId, pSession->connectedProfile.EncryptionType, - pSession->pConnectBssDesc, - &Broadcastaddr, - FALSE, FALSE, eSIR_TX_RX, 0, 0, NULL, 0 ); + + if ((eCSR_ENCRYPT_TYPE_NONE == + pSession->connectedProfile.EncryptionType )) + { + csrRoamIssueSetContextReq( pMac, sessionId, + pSession->connectedProfile.EncryptionType, + pSession->pConnectBssDesc, + &Broadcastaddr, + FALSE, FALSE, eSIR_TX_RX, 0, 0, NULL, 0 ); + } result = eCSR_ROAM_RESULT_IBSS_COALESCED; roamStatus = eCSR_ROAM_IBSS_IND; - palCopyMemory(pMac->hHdd, &roamInfo.bssid, &pNewBss->bssId, sizeof(tCsrBssid)); + vos_mem_copy(&roamInfo.bssid, &pNewBss->bssId, + sizeof(tCsrBssid)); pRoamInfo = &roamInfo; //This BSSID is th ereal BSSID, let's save it if(pSession->pConnectBssDesc) { - palCopyMemory(pMac->hHdd, pSession->pConnectBssDesc->bssId, &pNewBss->bssId, sizeof(tCsrBssid)); - } - // Stop the join IBSS timer in case of join, for - // genuine merge do nothing - if(pSession->ibss_join_pending) - { - pSession->ibss_join_pending = FALSE; - csrRoamStopIbssJoinTimer(pMac, sessionId); - result = eCSR_ROAM_RESULT_IBSS_JOIN_SUCCESS; + vos_mem_copy(pSession->pConnectBssDesc->bssId, + &pNewBss->bssId, sizeof(tCsrBssid)); } } smsLog(pMac, LOGW, "CSR: eSIR_SME_JOINED_NEW_BSS received from PE"); @@ -9291,7 +9731,7 @@ void csrRoamCheckForLinkStatusChange( tpAniSirGlobal pMac, tSirSmeRsp *pSirMsg ) if(pIbssLog) { pIbssLog->eventId = WLAN_IBSS_EVENT_PEER_JOIN; - palCopyMemory(pMac->hHdd, pIbssLog->peerMacAddr, &pIbssPeerInd->peerAddr, 6); + vos_mem_copy(pIbssLog->peerMacAddr, &pIbssPeerInd->peerAddr, 6); WLAN_VOS_DIAG_LOG_REPORT(pIbssLog); } } @@ -9309,27 +9749,38 @@ void csrRoamCheckForLinkStatusChange( tpAniSirGlobal pMac, tSirSmeRsp *pSirMsg ) // Issue the set Context request to LIM to establish the Unicast STA context for the new peer... if(pSession->pConnectBssDesc) { - palCopyMemory(pMac->hHdd, &roamInfo.peerMac, pIbssPeerInd->peerAddr, sizeof(tCsrBssid)); - palCopyMemory(pMac->hHdd, &roamInfo.bssid, pSession->pConnectBssDesc->bssId, sizeof(tCsrBssid)); + vos_mem_copy(&roamInfo.peerMac, pIbssPeerInd->peerAddr, + sizeof(tCsrBssid)); + vos_mem_copy(&roamInfo.bssid, pSession->pConnectBssDesc->bssId, + sizeof(tCsrBssid)); if(pIbssPeerInd->mesgLen > sizeof(tSmeIbssPeerInd)) { - status = palAllocateMemory(pMac->hHdd, (void **)&roamInfo.pbFrames, - (pIbssPeerInd->mesgLen - sizeof(tSmeIbssPeerInd))); - if(HAL_STATUS_SUCCESS(status)) + roamInfo.pbFrames = vos_mem_malloc((pIbssPeerInd->mesgLen + - sizeof(tSmeIbssPeerInd))); + if ( NULL == roamInfo.pbFrames ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; + if (HAL_STATUS_SUCCESS(status)) { roamInfo.nBeaconLength = (pIbssPeerInd->mesgLen - sizeof(tSmeIbssPeerInd)); - palCopyMemory(pMac->hHdd, roamInfo.pbFrames, ((tANI_U8 *)pIbssPeerInd) + sizeof(tSmeIbssPeerInd), - roamInfo.nBeaconLength); + vos_mem_copy(roamInfo.pbFrames, + ((tANI_U8 *)pIbssPeerInd) + sizeof(tSmeIbssPeerInd), + roamInfo.nBeaconLength); } roamInfo.staId = (tANI_U8)pIbssPeerInd->staId; roamInfo.ucastSig = (tANI_U8)pIbssPeerInd->ucastSig; roamInfo.bcastSig = (tANI_U8)pIbssPeerInd->bcastSig; - status = palAllocateMemory(pMac->hHdd, (void **)&roamInfo.pBssDesc, - pSession->pConnectBssDesc->length); - if(HAL_STATUS_SUCCESS(status)) + roamInfo.pBssDesc = vos_mem_malloc(pSession->pConnectBssDesc->length); + if ( NULL == roamInfo.pBssDesc ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; + if (HAL_STATUS_SUCCESS(status)) { - palCopyMemory(pMac->hHdd, roamInfo.pBssDesc, pSession->pConnectBssDesc, - pSession->pConnectBssDesc->length); + vos_mem_copy(roamInfo.pBssDesc, + pSession->pConnectBssDesc, + pSession->pConnectBssDesc->length); } if(HAL_STATUS_SUCCESS(status)) { @@ -9339,11 +9790,11 @@ void csrRoamCheckForLinkStatusChange( tpAniSirGlobal pMac, tSirSmeRsp *pSirMsg ) { if(roamInfo.pbFrames) { - palFreeMemory(pMac->hHdd, roamInfo.pbFrames); + vos_mem_free(roamInfo.pbFrames); } if(roamInfo.pBssDesc) { - palFreeMemory(pMac->hHdd, roamInfo.pBssDesc); + vos_mem_free(roamInfo.pBssDesc); } } } @@ -9351,10 +9802,15 @@ void csrRoamCheckForLinkStatusChange( tpAniSirGlobal pMac, tSirSmeRsp *pSirMsg ) { pRoamInfo = &roamInfo; } - csrRoamIssueSetContextReq( pMac, sessionId, pSession->connectedProfile.EncryptionType, - pSession->pConnectBssDesc, - &(pIbssPeerInd->peerAddr), - FALSE, TRUE, eSIR_TX_RX, 0, 0, NULL, 0 ); // NO keys... these key parameters don't matter. + if ((eCSR_ENCRYPT_TYPE_NONE == + pSession->connectedProfile.EncryptionType )) + { + csrRoamIssueSetContextReq( pMac, sessionId, + pSession->connectedProfile.EncryptionType, + pSession->pConnectBssDesc, + &(pIbssPeerInd->peerAddr), + FALSE, TRUE, eSIR_TX_RX, 0, 0, NULL, 0 ); // NO keys... these key parameters don't matter. + } } else { @@ -9365,17 +9821,17 @@ void csrRoamCheckForLinkStatusChange( tpAniSirGlobal pMac, tSirSmeRsp *pSirMsg ) { pRoamInfo->u.pConnectedProfile = &pSession->connectedProfile; } - csrRoamCallCallback(pMac, sessionId, pRoamInfo, 0, + csrRoamCallCallback(pMac, sessionId, pRoamInfo, 0, eCSR_ROAM_CONNECT_STATUS_UPDATE, eCSR_ROAM_RESULT_IBSS_NEW_PEER); if(pRoamInfo) { if(roamInfo.pbFrames) { - palFreeMemory(pMac->hHdd, roamInfo.pbFrames); + vos_mem_free(roamInfo.pbFrames); } if(roamInfo.pBssDesc) { - palFreeMemory(pMac->hHdd, roamInfo.pBssDesc); + vos_mem_free(roamInfo.pBssDesc); } } } @@ -9388,14 +9844,15 @@ void csrRoamCheckForLinkStatusChange( tpAniSirGlobal pMac, tSirSmeRsp *pSirMsg ) #ifdef FEATURE_WLAN_DIAG_SUPPORT_CSR { vos_log_ibss_pkt_type *pIbssLog; - + WLAN_VOS_DIAG_LOG_ALLOC(pIbssLog, vos_log_ibss_pkt_type, LOG_WLAN_IBSS_C); if(pIbssLog) { pIbssLog->eventId = WLAN_IBSS_EVENT_PEER_LEAVE; if(pIbssPeerInd) { - palCopyMemory(pMac->hHdd, pIbssLog->peerMacAddr, &pIbssPeerInd->peerAddr, 6); + vos_mem_copy(pIbssLog->peerMacAddr, + &pIbssPeerInd->peerAddr, 6); } WLAN_VOS_DIAG_LOG_REPORT(pIbssLog); } @@ -9405,8 +9862,9 @@ void csrRoamCheckForLinkStatusChange( tpAniSirGlobal pMac, tSirSmeRsp *pSirMsg ) roamInfo.staId = (tANI_U8)pIbssPeerInd->staId; roamInfo.ucastSig = (tANI_U8)pIbssPeerInd->ucastSig; roamInfo.bcastSig = (tANI_U8)pIbssPeerInd->bcastSig; - palCopyMemory(pMac->hHdd, &roamInfo.peerMac, pIbssPeerInd->peerAddr, sizeof(tCsrBssid)); - csrRoamCallCallback(pMac, sessionId, &roamInfo, 0, + vos_mem_copy(&roamInfo.peerMac, pIbssPeerInd->peerAddr, + sizeof(tCsrBssid)); + csrRoamCallCallback(pMac, sessionId, &roamInfo, 0, eCSR_ROAM_CONNECT_STATUS_UPDATE, eCSR_ROAM_RESULT_IBSS_PEER_DEPARTED); } break; @@ -9415,14 +9873,14 @@ void csrRoamCheckForLinkStatusChange( tpAniSirGlobal pMac, tSirSmeRsp *pSirMsg ) tSirSmeSetContextRsp *pRsp = (tSirSmeSetContextRsp *)pSirMsg; tListElem *pEntry; tSmeCmd *pCommand; - + pEntry = csrLLPeekHead( &pMac->sme.smeCmdActiveList, LL_ACCESS_LOCK ); if ( pEntry ) { pCommand = GET_BASE_ADDR( pEntry, tSmeCmd, Link ); if ( eSmeCommandSetKey == pCommand->command ) - { - sessionId = pCommand->sessionId; + { + sessionId = pCommand->sessionId; pSession = CSR_GET_SESSION( pMac, sessionId ); if(!pSession) @@ -9430,12 +9888,13 @@ void csrRoamCheckForLinkStatusChange( tpAniSirGlobal pMac, tSirSmeRsp *pSirMsg ) smsLog(pMac, LOGE, FL(" session %d not found "), sessionId); return; } - + #ifdef FEATURE_WLAN_DIAG_SUPPORT_CSR if(eCSR_ENCRYPT_TYPE_NONE != pSession->connectedProfile.EncryptionType) { WLAN_VOS_DIAG_EVENT_DEF(setKeyEvent, vos_event_wlan_security_payload_type); - palZeroMemory(pMac->hHdd, &setKeyEvent, sizeof(vos_event_wlan_security_payload_type)); + vos_mem_set(&setKeyEvent, + sizeof(vos_event_wlan_security_payload_type), 0); if( pRsp->peerMacAddr[0] & 0x01 ) { setKeyEvent.eventId = WLAN_SECURITY_EVENT_SET_GTK_RSP; @@ -9444,12 +9903,13 @@ void csrRoamCheckForLinkStatusChange( tpAniSirGlobal pMac, tSirSmeRsp *pSirMsg ) { setKeyEvent.eventId = WLAN_SECURITY_EVENT_SET_PTK_RSP; } - setKeyEvent.encryptionModeMulticast = + setKeyEvent.encryptionModeMulticast = (v_U8_t)diagEncTypeFromCSRType(pSession->connectedProfile.mcEncryptionType); - setKeyEvent.encryptionModeUnicast = + setKeyEvent.encryptionModeUnicast = (v_U8_t)diagEncTypeFromCSRType(pSession->connectedProfile.EncryptionType); - palCopyMemory( pMac->hHdd, setKeyEvent.bssid, pSession->connectedProfile.bssid, 6 ); - setKeyEvent.authMode = + vos_mem_copy(setKeyEvent.bssid, + pSession->connectedProfile.bssid, 6); + setKeyEvent.authMode = (v_U8_t)diagAuthTypeFromCSRType(pSession->connectedProfile.AuthType); if( eSIR_SME_SUCCESS != pRsp->statusCode ) { @@ -9464,30 +9924,31 @@ void csrRoamCheckForLinkStatusChange( tpAniSirGlobal pMac, tSirSmeRsp *pSirMsg ) //We are done with authentication, whethere succeed or not csrRoamSubstateChange( pMac, eCSR_ROAM_SUBSTATE_NONE, sessionId); - //We do it here because this linkup function is not called after association - //when a key needs to be set. - if( csrIsConnStateConnectedInfra(pMac, sessionId) ) + //We do it here because this linkup function is not called after association + //when a key needs to be set. + if( csrIsConnStateConnectedInfra(pMac, sessionId) ) { csrRoamLinkUp(pMac, pSession->connectedProfile.bssid); } } if( eSIR_SME_SUCCESS == pRsp->statusCode ) { - palCopyMemory( pMac, &roamInfo.peerMac, &pRsp->peerMacAddr, sizeof(tCsrBssid) ); + vos_mem_copy(&roamInfo.peerMac, + &pRsp->peerMacAddr, sizeof(tCsrBssid)); //Make sure we install the GTK before indicating to HDD as authenticated //This is to prevent broadcast packets go out after PTK and before GTK. - if( palEqualMemory( pMac->hHdd, &Broadcastaddr, pRsp->peerMacAddr, - sizeof(tSirMacAddr) ) ) + if ( vos_mem_compare( &Broadcastaddr, pRsp->peerMacAddr, + sizeof(tSirMacAddr) ) ) { #ifdef WLAN_ACTIVEMODE_OFFLOAD_FEATURE if(IS_ACTIVEMODE_OFFLOAD_FEATURE_ENABLE) { tpSirSetActiveModeSetBncFilterReq pMsg; - palAllocateMemory(pMac->hHdd, (void **)&pMsg, sizeof(tSirSetActiveModeSetBncFilterReq)); + pMsg = vos_mem_malloc(sizeof(tSirSetActiveModeSetBncFilterReq)); pMsg->messageType = pal_cpu_to_be16((tANI_U16)eWNI_SME_SET_BCN_FILTER_REQ); pMsg->length = pal_cpu_to_be16(sizeof( tANI_U8)); pMsg->seesionId = sessionId; - status = palSendMBMessage(pMac->hHdd, pMsg ); + status = palSendMBMessage(pMac->hHdd, pMsg ); } #endif result = eCSR_ROAM_RESULT_AUTHENTICATED; @@ -9505,7 +9966,7 @@ void csrRoamCheckForLinkStatusChange( tpAniSirGlobal pMac, tSirSmeRsp *pSirMsg ) pRsp->statusCode, pRsp->peerMacAddr[0], pRsp->peerMacAddr[1], pRsp->peerMacAddr[2], pRsp->peerMacAddr[3], pRsp->peerMacAddr[4], pRsp->peerMacAddr[5] ); } - csrRoamCallCallback(pMac, sessionId, &roamInfo, pCommand->u.setKeyCmd.roamId, + csrRoamCallCallback(pMac, sessionId, &roamInfo, pCommand->u.setKeyCmd.roamId, eCSR_ROAM_SET_KEY_COMPLETE, result); // Indicate SME_QOS that the SET_KEY is completed, so that SME_QOS // can go ahead and initiate the TSPEC if any are pending @@ -9513,10 +9974,12 @@ void csrRoamCheckForLinkStatusChange( tpAniSirGlobal pMac, tSirSmeRsp *pSirMsg ) #ifdef FEATURE_WLAN_CCX //Send Adjacent AP repot to new AP. if (result == eCSR_ROAM_RESULT_AUTHENTICATED && - pSession->isPrevApInfoValid && + pSession->isPrevApInfoValid && pSession->connectedProfile.isCCXAssoc) { -#ifdef WLAN_FEATURE_VOWIFI +#ifdef FEATURE_WLAN_CCX_UPLOAD + csrSendCcxAdjacentApRepInd(pMac, pSession); +#else csrCcxSendAdjacentApRepMsg(pMac, pSession); #endif pSession->isPrevApInfoValid = FALSE; @@ -9544,13 +10007,13 @@ void csrRoamCheckForLinkStatusChange( tpAniSirGlobal pMac, tSirSmeRsp *pSirMsg ) tSirSmeRemoveKeyRsp *pRsp = (tSirSmeRemoveKeyRsp *)pSirMsg; tListElem *pEntry; tSmeCmd *pCommand; - + pEntry = csrLLPeekHead( &pMac->sme.smeCmdActiveList, LL_ACCESS_LOCK ); if ( pEntry ) { pCommand = GET_BASE_ADDR( pEntry, tSmeCmd, Link ); if ( eSmeCommandRemoveKey == pCommand->command ) - { + { sessionId = pCommand->sessionId; pSession = CSR_GET_SESSION( pMac, sessionId ); @@ -9562,14 +10025,16 @@ void csrRoamCheckForLinkStatusChange( tpAniSirGlobal pMac, tSirSmeRsp *pSirMsg ) #ifdef FEATURE_WLAN_DIAG_SUPPORT_CSR { WLAN_VOS_DIAG_EVENT_DEF(removeKeyEvent, vos_event_wlan_security_payload_type); - palZeroMemory(pMac->hHdd, &removeKeyEvent, sizeof(vos_event_wlan_security_payload_type)); + vos_mem_set(&removeKeyEvent, + sizeof(vos_event_wlan_security_payload_type), 0); removeKeyEvent.eventId = WLAN_SECURITY_EVENT_REMOVE_KEY_RSP; - removeKeyEvent.encryptionModeMulticast = + removeKeyEvent.encryptionModeMulticast = (v_U8_t)diagEncTypeFromCSRType(pSession->connectedProfile.mcEncryptionType); - removeKeyEvent.encryptionModeUnicast = + removeKeyEvent.encryptionModeUnicast = (v_U8_t)diagEncTypeFromCSRType(pSession->connectedProfile.EncryptionType); - palCopyMemory( pMac->hHdd, removeKeyEvent.bssid, pSession->connectedProfile.bssid, 6 ); - removeKeyEvent.authMode = + vos_mem_copy( removeKeyEvent.bssid, + pSession->connectedProfile.bssid, 6); + removeKeyEvent.authMode = (v_U8_t)diagAuthTypeFromCSRType(pSession->connectedProfile.AuthType); if( eSIR_SME_SUCCESS != pRsp->statusCode ) { @@ -9580,7 +10045,8 @@ void csrRoamCheckForLinkStatusChange( tpAniSirGlobal pMac, tSirSmeRsp *pSirMsg ) #endif //FEATURE_WLAN_DIAG_SUPPORT_CSR if( eSIR_SME_SUCCESS == pRsp->statusCode ) { - palCopyMemory( pMac, &roamInfo.peerMac, &pRsp->peerMacAddr, sizeof(tCsrBssid) ); + vos_mem_copy(&roamInfo.peerMac, &pRsp->peerMacAddr, + sizeof(tCsrBssid)); result = eCSR_ROAM_RESULT_NONE; pRoamInfo = &roamInfo; } @@ -9588,7 +10054,7 @@ void csrRoamCheckForLinkStatusChange( tpAniSirGlobal pMac, tSirSmeRsp *pSirMsg ) { result = eCSR_ROAM_RESULT_FAILURE; } - csrRoamCallCallback(pMac, sessionId, &roamInfo, pCommand->u.setKeyCmd.roamId, + csrRoamCallCallback(pMac, sessionId, &roamInfo, pCommand->u.setKeyCmd.roamId, eCSR_ROAM_REMOVE_KEY_COMPLETE, result); if( csrLLRemoveEntry( &pMac->sme.smeCmdActiveList, pEntry, LL_ACCESS_LOCK ) ) { @@ -9617,11 +10083,22 @@ void csrRoamCheckForLinkStatusChange( tpAniSirGlobal pMac, tSirSmeRsp *pSirMsg ) csrRoamRssiRspProcessor( pMac, pSirMsg ); break; #endif +#if defined(FEATURE_WLAN_CCX) && defined(FEATURE_WLAN_CCX_UPLOAD) + case eWNI_SME_GET_TSM_STATS_RSP: + smsLog( pMac, LOG2, FL("TSM Stats rsp from PE")); + csrTsmStatsRspProcessor( pMac, pSirMsg ); + break; +#endif /* FEATURE_WLAN_CCX && FEATURE_WLAN_CCX_UPLOAD */ case eWNI_SME_GET_RSSI_REQ: smsLog( pMac, LOG2, FL("GetRssiReq from self")); csrUpdateRssi( pMac, pSirMsg ); break; + case eWNI_SME_GET_SNR_REQ: + smsLog( pMac, LOG2, FL("GetSnrReq from self")); + csrUpdateSnr(pMac, pSirMsg); + break; + #ifdef WLAN_FEATURE_VOWIFI_11R case eWNI_SME_FT_PRE_AUTH_RSP: csrRoamFTPreAuthRspProcessor( pMac, (tpSirFTPreAuthRsp)pSirMsg ); @@ -9632,11 +10109,12 @@ void csrRoamCheckForLinkStatusChange( tpAniSirGlobal pMac, tSirSmeRsp *pSirMsg ) smsLog( pMac, LOG1, FL("send indication that max assoc have been reached and the new peer cannot be accepted")); sessionId = pSmeMaxAssocInd->sessionId; roamInfo.sessionId = sessionId; - palCopyMemory(pMac->hHdd, &roamInfo.peerMac, pSmeMaxAssocInd->peerMac, sizeof(tCsrBssid)); - csrRoamCallCallback(pMac, sessionId, &roamInfo, 0, + vos_mem_copy(&roamInfo.peerMac, pSmeMaxAssocInd->peerMac, + sizeof(tCsrBssid)); + csrRoamCallCallback(pMac, sessionId, &roamInfo, 0, eCSR_ROAM_INFRA_IND, eCSR_ROAM_RESULT_MAX_ASSOC_EXCEEDED); break; - + case eWNI_SME_BTAMP_LOG_LINK_IND: smsLog( pMac, LOG1, FL("Establish logical link req from HCI serialized through MC thread")); btampEstablishLogLinkHdlr( pSirMsg ); @@ -9650,6 +10128,10 @@ void csrRoamCheckForLinkStatusChange( tpAniSirGlobal pMac, tSirSmeRsp *pSirMsg ) smsLog( pMac, LOG2, FL("Candidate found indication from PE")); csrNeighborRoamCandidateFoundIndHdlr( pMac, pSirMsg ); break; + case eWNI_SME_HANDOFF_REQ: + smsLog( pMac, LOG2, FL("Handoff Req from self")); + csrNeighborRoamHandoffReqHdlr( pMac, pSirMsg ); + break; #endif default: @@ -9657,7 +10139,7 @@ void csrRoamCheckForLinkStatusChange( tpAniSirGlobal pMac, tSirSmeRsp *pSirMsg ) } // end switch on message type } -void csrCallRoamingCompletionCallback(tpAniSirGlobal pMac, tCsrRoamSession *pSession, +void csrCallRoamingCompletionCallback(tpAniSirGlobal pMac, tCsrRoamSession *pSession, tCsrRoamInfo *pRoamInfo, tANI_U32 roamId, eCsrRoamResult roamResult) { if(pSession) @@ -9667,8 +10149,8 @@ void csrCallRoamingCompletionCallback(tpAniSirGlobal pMac, tCsrRoamSession *pSes pSession->bRefAssocStartCnt--; VOS_ASSERT( pSession->bRefAssocStartCnt == 0); //Need to call association_completion because there is an assoc_start pending. - csrRoamCallCallback(pMac, pSession->sessionId, NULL, roamId, - eCSR_ROAM_ASSOCIATION_COMPLETION, + csrRoamCallCallback(pMac, pSession->sessionId, NULL, roamId, + eCSR_ROAM_ASSOCIATION_COMPLETION, eCSR_ROAM_RESULT_FAILURE); } csrRoamCallCallback(pMac, pSession->sessionId, pRoamInfo, roamId, eCSR_ROAM_ROAMING_COMPLETION, roamResult); @@ -9683,7 +10165,7 @@ void csrCallRoamingCompletionCallback(tpAniSirGlobal pMac, tCsrRoamSession *pSes eHalStatus csrRoamStartRoaming(tpAniSirGlobal pMac, tANI_U32 sessionId, eCsrRoamingReason roamingReason) { eHalStatus status = eHAL_STATUS_FAILURE; - if(CSR_IS_LOSTLINK_ROAMING(roamingReason) && + if(CSR_IS_LOSTLINK_ROAMING(roamingReason) && (eANI_BOOLEAN_FALSE == pMac->roam.roamSession[sessionId].fCancelRoaming)) { status = csrScanRequestLostLink1( pMac, sessionId ); @@ -9692,7 +10174,7 @@ eHalStatus csrRoamStartRoaming(tpAniSirGlobal pMac, tANI_U32 sessionId, eCsrRoam } //return a boolean to indicate whether roaming completed or continue. -tANI_BOOLEAN csrRoamCompleteRoaming(tpAniSirGlobal pMac, tANI_U32 sessionId, +tANI_BOOLEAN csrRoamCompleteRoaming(tpAniSirGlobal pMac, tANI_U32 sessionId, tANI_BOOLEAN fForce, eCsrRoamResult roamResult) { tANI_BOOLEAN fCompleted = eANI_BOOLEAN_TRUE; @@ -9705,7 +10187,7 @@ tANI_BOOLEAN csrRoamCompleteRoaming(tpAniSirGlobal pMac, tANI_U32 sessionId, return eANI_BOOLEAN_FALSE; } //Check whether time is up - if(pSession->fCancelRoaming || fForce || + if(pSession->fCancelRoaming || fForce || ((curTime - pSession->roamingStartTime) > roamTime) || eCsrReassocRoaming == pSession->roamingReason || eCsrDynamicRoaming == pSession->roamingReason) @@ -9762,7 +10244,7 @@ void csrRoamCancelRoaming(tpAniSirGlobal pMac, tANI_U32 sessionId) smsLog(pMac, LOGE, FL(" session %d not found "), sessionId); return; } - + if(CSR_IS_ROAMING(pSession)) { smsLog(pMac, LOGW, " Cancelling roaming"); @@ -9773,9 +10255,9 @@ void csrRoamCancelRoaming(tpAniSirGlobal pMac, tANI_U32 sessionId) } else { - eCsrRoamResult roamResult = CSR_IS_LOSTLINK_ROAMING(pSession->roamingReason) ? + eCsrRoamResult roamResult = CSR_IS_LOSTLINK_ROAMING(pSession->roamingReason) ? eCSR_ROAM_RESULT_LOSTLINK : eCSR_ROAM_RESULT_NONE; - //Roaming is stopped after here + //Roaming is stopped after here csrRoamCompleteRoaming(pMac, sessionId, eANI_BOOLEAN_TRUE, roamResult); //Since CSR may be in lostlink roaming situation, abort all roaming related activities csrScanAbortMacScan(pMac, sessionId); @@ -9796,8 +10278,8 @@ void csrRoamRoamingTimerHandler(void *pv) smsLog(pMac, LOGE, FL(" session %d not found "), sessionId); return; } - - if(eANI_BOOLEAN_FALSE == pSession->fCancelRoaming) + + if(eANI_BOOLEAN_FALSE == pSession->fCancelRoaming) { if(!HAL_STATUS_SUCCESS(csrRoamStartRoaming(pMac, sessionId, pSession->roamingReason))) { @@ -9817,17 +10299,17 @@ eHalStatus csrRoamStartRoamingTimer(tpAniSirGlobal pMac, tANI_U32 sessionId, tAN smsLog(pMac, LOGE, FL(" session %d not found"), sessionId); return eHAL_STATUS_FAILURE; } - + smsLog(pMac, LOG1, " csrScanStartRoamingTimer"); pSession->roamingTimerInfo.sessionId = (tANI_U8)sessionId; - status = palTimerStart(pMac->hHdd, pSession->hTimerRoaming, interval, eANI_BOOLEAN_FALSE); - + status = vos_timer_start(&pSession->hTimerRoaming, interval/PAL_TIMER_TO_MS_UNIT); + return (status); } eHalStatus csrRoamStopRoamingTimer(tpAniSirGlobal pMac, tANI_U32 sessionId) { - return (palTimerStop(pMac->hHdd, pMac->roam.roamSession[sessionId].hTimerRoaming)); + return (vos_timer_stop(&pMac->roam.roamSession[sessionId].hTimerRoaming)); } void csrRoamWaitForKeyTimeOutHandler(void *pv) @@ -9845,9 +10327,9 @@ void csrRoamWaitForKeyTimeOutHandler(void *pv) #ifdef FEATURE_WLAN_LFR if (csrNeighborRoamIsHandoffInProgress(pMac)) { - /* + /* * Enable heartbeat timer when hand-off is in progress - * and Key Wait timer expired. + * and Key Wait timer expired. */ smsLog(pMac, LOG2, "Enabling HB timer after WaitKey expiry" " (nHBCount=%d)", @@ -9858,11 +10340,17 @@ void csrRoamWaitForKeyTimeOutHandler(void *pv) } #endif smsLog(pMac, LOGW, " SME pre-auth state timeout. "); + //Change the substate so command queue is unblocked. - csrRoamSubstateChange( pMac, eCSR_ROAM_SUBSTATE_NONE, pInfo->sessionId); + if (CSR_ROAM_SESSION_MAX > pInfo->sessionId) + { + csrRoamSubstateChange(pMac, eCSR_ROAM_SUBSTATE_NONE, + pInfo->sessionId); + } + if (pSession) { - if( csrIsConnStateConnectedInfra(pMac, pInfo->sessionId) ) + if( csrIsConnStateConnectedInfra(pMac, pInfo->sessionId) ) { csrRoamLinkUp(pMac, pSession->connectedProfile.bssid); smeProcessPendingQueue(pMac); @@ -9878,7 +10366,7 @@ void csrRoamWaitForKeyTimeOutHandler(void *pv) smsLog(pMac, LOGW, "%s: session not found", __func__); } } - + } eHalStatus csrRoamStartWaitForKeyTimer(tpAniSirGlobal pMac, tANI_U32 interval) @@ -9896,8 +10384,8 @@ eHalStatus csrRoamStartWaitForKeyTimer(tpAniSirGlobal pMac, tANI_U32 interval) } #endif smsLog(pMac, LOG1, " csrScanStartWaitForKeyTimer"); - status = palTimerStart(pMac->hHdd, pMac->roam.hTimerWaitForKey, interval, eANI_BOOLEAN_FALSE); - + status = vos_timer_start(&pMac->roam.hTimerWaitForKey, interval/PAL_TIMER_TO_MS_UNIT); + return (status); } @@ -9909,9 +10397,9 @@ eHalStatus csrRoamStopWaitForKeyTimer(tpAniSirGlobal pMac) #ifdef FEATURE_WLAN_LFR if (csrNeighborRoamIsHandoffInProgress(pMac)) { - /* + /* * Enable heartbeat timer when hand-off is in progress - * and Key Wait timer got stopped for some reason + * and Key Wait timer got stopped for some reason */ smsLog(pMac, LOG2, "Enabling HB timer after WaitKey stop" " (nHBCount=%d)", @@ -9921,51 +10409,10 @@ eHalStatus csrRoamStopWaitForKeyTimer(tpAniSirGlobal pMac) NULL, eANI_BOOLEAN_FALSE); } #endif - return (palTimerStop(pMac->hHdd, pMac->roam.hTimerWaitForKey)); -} - -void csrRoamIbssJoinTimerHandler(void *pv) -{ - tCsrTimerInfo *pInfo = (tCsrTimerInfo *)pv; - tpAniSirGlobal pMac = pInfo->pMac; - eCsrRoamDisconnectReason reason = eCSR_DISCONNECT_REASON_IBSS_JOIN_FAILURE; - tANI_U32 sessionId = pInfo->sessionId; - tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, sessionId ); - - if(!pSession) - { - smsLog(pMac, LOGE, FL(" session %d not found "), sessionId); - return; - } - - pSession->ibss_join_pending = FALSE; - // JEZ100225: As of main/latest "tip", we are no longer doing this. Check on this. - //csrRoamCallCallback(pMac, sessionId, NULL, 0, eCSR_ROAM_IBS_IND, eCSR_ROAM_RESULT_IBSS_JOIN_FAILED); - // Send an IBSS stop request to PE - csrRoamDisconnectInternal(pMac, sessionId, reason); + return (vos_timer_stop(&pMac->roam.hTimerWaitForKey)); } -eHalStatus csrRoamStartIbssJoinTimer(tpAniSirGlobal pMac, tANI_U32 sessionId, tANI_U32 interval) -{ - eHalStatus status; - tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, sessionId ); - - if(!pSession) - { - smsLog(pMac, LOGE, FL(" session %d not found "), sessionId); - return eHAL_STATUS_FAILURE; - } - - smsLog(pMac, LOG1, " csrRoamStartIbssJoinTimer"); - pSession->ibssJoinTimerInfo.sessionId = (tANI_U8)sessionId; - status = palTimerStart(pMac->hHdd, pSession->hTimerIbssJoining, interval, eANI_BOOLEAN_FALSE); - return (status); -} -eHalStatus csrRoamStopIbssJoinTimer(tpAniSirGlobal pMac, tANI_U32 sessionId) -{ - return (palTimerStop(pMac->hHdd, pMac->roam.roamSession[sessionId].hTimerIbssJoining)); -} -void csrRoamCompletion(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamInfo *pRoamInfo, tSmeCmd *pCommand, +void csrRoamCompletion(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamInfo *pRoamInfo, tSmeCmd *pCommand, eCsrRoamResult roamResult, tANI_BOOLEAN fSuccess) { eRoamCmdStatus roamStatus = csrGetRoamCompleteStatus(pMac, sessionId); @@ -9977,7 +10424,7 @@ void csrRoamCompletion(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamInfo *pR smsLog(pMac, LOGE, FL(" session %d not found "), sessionId); return; } - + if(pCommand) { roamId = pCommand->u.roamCmd.roamId; @@ -10041,13 +10488,13 @@ eHalStatus csrRoamLostLink( tpAniSirGlobal pMac, tANI_U32 sessionId, tANI_U32 ty result = eCSR_ROAM_RESULT_NONE; pSession->joinFailStatusCode.reasonCode = 1; } - + // call profile lost link routine here if(!CSR_IS_INFRA_AP(&pSession->connectedProfile)) { csrRoamCallCallback(pMac, sessionId, NULL, 0, eCSR_ROAM_LOSTLINK_DETECTED, result); } - + if ( eWNI_SME_DISASSOC_IND == type ) { status = csrSendMBDisassocCnfMsg(pMac, pDisassocIndMsg); @@ -10063,19 +10510,21 @@ eHalStatus csrRoamLostLink( tpAniSirGlobal pMac, tANI_U32 sessionId, tANI_U32 ty } //prepare to tell HDD to disconnect - palZeroMemory(pMac->hHdd, &roamInfo, sizeof(tCsrRoamInfo)); + vos_mem_set(&roamInfo, sizeof(tCsrRoamInfo), 0); roamInfo.statusCode = (tSirResultCodes)pSession->roamingStatusCode; roamInfo.reasonCode = pSession->joinFailStatusCode.reasonCode; if( eWNI_SME_DISASSOC_IND == type) { //staMacAddr - palCopyMemory(pMac->hHdd, roamInfo.peerMac, pDisassocIndMsg->peerMacAddr, sizeof(tSirMacAddr)); + vos_mem_copy(roamInfo.peerMac, pDisassocIndMsg->peerMacAddr, + sizeof(tSirMacAddr)); roamInfo.staId = (tANI_U8)pDisassocIndMsg->staId; } else if( eWNI_SME_DEAUTH_IND == type ) { //staMacAddr - palCopyMemory(pMac->hHdd, roamInfo.peerMac, pDeauthIndMsg->peerMacAddr, sizeof(tSirMacAddr)); + vos_mem_copy(roamInfo.peerMac, pDeauthIndMsg->peerMacAddr, + sizeof(tSirMacAddr)); roamInfo.staId = (tANI_U8)pDeauthIndMsg->staId; } smsLog(pMac, LOGW, FL("roamInfo.staId (%d)"), roamInfo.staId); @@ -10091,10 +10540,10 @@ eHalStatus csrRoamLostLink( tpAniSirGlobal pMac, tANI_U32 sessionId, tANI_U32 ty if( pMac->roam.configParam.nRoamingTime ) { if(HAL_STATUS_SUCCESS(status = csrRoamStartRoaming(pMac, sessionId, - ( eWNI_SME_DEAUTH_IND == type ) ? + ( eWNI_SME_DEAUTH_IND == type ) ? eCsrLostlinkRoamingDeauth : eCsrLostlinkRoamingDisassoc))) { - palZeroMemory(pMac->hHdd, &roamInfo, sizeof(tCsrRoamInfo)); + vos_mem_set(&roamInfo, sizeof(tCsrRoamInfo), 0); //For IBSS, we need to give some more info to HDD if(csrIsBssTypeIBSS(pSession->connectedProfile.BSSType)) { @@ -10107,7 +10556,7 @@ eHalStatus csrRoamLostLink( tpAniSirGlobal pMac, tANI_U32 sessionId, tANI_U32 ty roamInfo.reasonCode = eCsrRoamReasonSmeIssuedForLostLink; } pRoamInfo = &roamInfo; - pSession->roamingReason = ( eWNI_SME_DEAUTH_IND == type ) ? + pSession->roamingReason = ( eWNI_SME_DEAUTH_IND == type ) ? eCsrLostlinkRoamingDeauth : eCsrLostlinkRoamingDisassoc; pSession->roamingStartTime = (tANI_TIMESTAMP)palGetTickCount(pMac->hHdd); csrRoamCallCallback(pMac, sessionId, pRoamInfo, 0, eCSR_ROAM_ROAMING_START, eCSR_ROAM_RESULT_LOSTLINK); @@ -10136,14 +10585,14 @@ eHalStatus csrRoamLostLink( tpAniSirGlobal pMac, tANI_U32 sessionId, tANI_U32 ty csrRoamCallCallback(pMac, sessionId, &roamInfo, 0, eCSR_ROAM_LOSTLINK, result); } - /*No need to start idle scan in case of IBSS/SAP + /*No need to start idle scan in case of IBSS/SAP Still enable idle scan for polling in case concurrent sessions are running */ if(CSR_IS_INFRASTRUCTURE(&pSession->connectedProfile)) { csrScanStartIdleScan(pMac); } } - + return (status); } @@ -10159,7 +10608,7 @@ eHalStatus csrRoamLostLinkAfterhandoffFailure( tpAniSirGlobal pMac,tANI_U32 sess smsLog(pMac, LOGE, FL(" session %d not found "), sessionId); return eHAL_STATUS_FAILURE; } - + pSession->fCancelRoaming = eANI_BOOLEAN_FALSE; //Only remove the connected BSS in infrastructure mode csrRoamRemoveConnectedBssFromScanCache(pMac, &pSession->connectedProfile); @@ -10192,7 +10641,7 @@ eHalStatus csrRoamLostLinkAfterhandoffFailure( tpAniSirGlobal pMac,tANI_U32 sess //We are told not to roam, indicate lostlink status = eHAL_STATUS_FAILURE; } - + return (status); } void csrRoamWmStatusChangeComplete( tpAniSirGlobal pMac ) @@ -10209,13 +10658,13 @@ void csrRoamWmStatusChangeComplete( tpAniSirGlobal pMac ) // roaming sequence. if( csrLLRemoveEntry( &pMac->sme.smeCmdActiveList, pEntry, LL_ACCESS_LOCK ) ) { - csrReleaseCommandWmStatusChange( pMac, pCommand ); + csrReleaseCommandWmStatusChange( pMac, pCommand ); } else { smsLog( pMac, LOGE, " ******csrRoamWmStatusChangeComplete fail to release command"); } - + } else { @@ -10240,7 +10689,7 @@ void csrRoamProcessWmStatusChangeCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand smsLog(pMac, LOGE, FL(" session %d not found "), pCommand->sessionId); return; } - + switch ( pCommand->u.wmStatusChangeCmd.Type ) { case eCsrDisassociated: @@ -10272,16 +10721,16 @@ void csrRoamProcessWmStatusChangeCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand //This function returns band and mode information. //The only tricky part is that if phyMode is set to 11abg, this function may return eCSR_CFG_DOT11_MODE_11B //instead of eCSR_CFG_DOT11_MODE_11G if everything is set to auto-pick. -static eCsrCfgDot11Mode csrRoamGetPhyModeBandForBss( tpAniSirGlobal pMac, tCsrRoamProfile *pProfile, +static eCsrCfgDot11Mode csrRoamGetPhyModeBandForBss( tpAniSirGlobal pMac, tCsrRoamProfile *pProfile, tANI_U8 operationChn, eCsrBand *pBand ) { eCsrPhyMode phyModeIn = (eCsrPhyMode)pProfile->phyMode; - eCsrCfgDot11Mode cfgDot11Mode = csrGetCfgDot11ModeFromCsrPhyMode(pProfile, phyModeIn, + eCsrCfgDot11Mode cfgDot11Mode = csrGetCfgDot11ModeFromCsrPhyMode(pProfile, phyModeIn, pMac->roam.configParam.ProprietaryRatesEnabled); eCsrBand eBand; - + //If the global setting for dot11Mode is set to auto/abg, we overwrite the setting in the profile. - if( ((!CSR_IS_INFRA_AP(pProfile )&& !CSR_IS_WDS(pProfile )) && + if( ((!CSR_IS_INFRA_AP(pProfile )&& !CSR_IS_WDS(pProfile )) && ((eCSR_CFG_DOT11_MODE_AUTO == pMac->roam.configParam.uCfgDot11Mode) || (eCSR_CFG_DOT11_MODE_ABG == pMac->roam.configParam.uCfgDot11Mode))) || (eCSR_CFG_DOT11_MODE_AUTO == cfgDot11Mode) || (eCSR_CFG_DOT11_MODE_ABG == cfgDot11Mode) ) @@ -10299,15 +10748,112 @@ static eCsrCfgDot11Mode csrRoamGetPhyModeBandForBss( tpAniSirGlobal pMac, tCsrRo case eCSR_CFG_DOT11_MODE_11G: cfgDot11Mode = eCSR_CFG_DOT11_MODE_11G; eBand = eCSR_BAND_24; - break; + break; case eCSR_CFG_DOT11_MODE_11N: cfgDot11Mode = eCSR_CFG_DOT11_MODE_11N; - eBand = eCSR_BAND_24; + eBand = CSR_IS_CHANNEL_24GHZ(operationChn) ? eCSR_BAND_24 : eCSR_BAND_5G; + break; +#ifdef WLAN_FEATURE_11AC + case eCSR_CFG_DOT11_MODE_11AC: + if (IS_FEATURE_SUPPORTED_BY_FW(DOT11AC)) + { + /* If the operating channel is in 2.4 GHz band, check for + * INI item to disable VHT operation in 2.4 GHz band + */ + if (CSR_IS_CHANNEL_24GHZ(operationChn) && + !pMac->roam.configParam.enableVhtFor24GHz) + { + /* Disable 11AC operation */ + cfgDot11Mode = eCSR_CFG_DOT11_MODE_11N; + } + else + { + cfgDot11Mode = eCSR_CFG_DOT11_MODE_11AC; + } + eBand = CSR_IS_CHANNEL_24GHZ(operationChn) ? eCSR_BAND_24 : eCSR_BAND_5G; + } + else + { + cfgDot11Mode = eCSR_CFG_DOT11_MODE_11N; + eBand = CSR_IS_CHANNEL_24GHZ(operationChn) ? eCSR_BAND_24 : eCSR_BAND_5G; + } + break; + case eCSR_CFG_DOT11_MODE_11AC_ONLY: + if (IS_FEATURE_SUPPORTED_BY_FW(DOT11AC)) + { + /* If the operating channel is in 2.4 GHz band, check for + * INI item to disable VHT operation in 2.4 GHz band + */ + if (CSR_IS_CHANNEL_24GHZ(operationChn) && + !pMac->roam.configParam.enableVhtFor24GHz) + { + /* Disable 11AC operation */ + cfgDot11Mode = eCSR_CFG_DOT11_MODE_11N; + } + else + { + cfgDot11Mode = eCSR_CFG_DOT11_MODE_11AC_ONLY; + } + eBand = CSR_IS_CHANNEL_24GHZ(operationChn) ? eCSR_BAND_24 : eCSR_BAND_5G; + } + else + { + eBand = CSR_IS_CHANNEL_24GHZ(operationChn) ? eCSR_BAND_24 : eCSR_BAND_5G; + cfgDot11Mode = eCSR_CFG_DOT11_MODE_11N; + } + break; +#endif + case eCSR_CFG_DOT11_MODE_AUTO: + eBand = pMac->roam.configParam.eBand; + if (eCSR_BAND_24 == eBand) + { + // WiFi tests require IBSS networks to start in 11b mode + // without any change to the default parameter settings + // on the adapter. We use ACU to start an IBSS through + // creation of a startIBSS profile. This startIBSS profile + // has Auto MACProtocol and the adapter property setting + // for dot11Mode is also AUTO. So in this case, let's + // start the IBSS network in 11b mode instead of 11g mode. + // So this is for Auto=profile->MacProtocol && Auto=Global. + // dot11Mode && profile->channel is < 14, then start the IBSS + // in b mode. + // + // Note: we used to have this start as an 11g IBSS for best + // performance... now to specify that the user will have to + // set the do11Mode in the property page to 11g to force it. + cfgDot11Mode = eCSR_CFG_DOT11_MODE_11B; + } + else + { +#ifdef WLAN_FEATURE_11AC + if (IS_FEATURE_SUPPORTED_BY_FW(DOT11AC)) + { + /* If the operating channel is in 2.4 GHz band, check for + * INI item to disable VHT operation in 2.4 GHz band + */ + if (CSR_IS_CHANNEL_24GHZ(operationChn) && + !pMac->roam.configParam.enableVhtFor24GHz) + { + /* Disable 11AC operation */ + cfgDot11Mode = eCSR_CFG_DOT11_MODE_11N; + } + else + { + cfgDot11Mode = eCSR_CFG_DOT11_MODE_11AC; + } + eBand = CSR_IS_CHANNEL_24GHZ(operationChn) ? eCSR_BAND_24 : eCSR_BAND_5G; + } + else + { + cfgDot11Mode = eCSR_CFG_DOT11_MODE_11N; + eBand = CSR_IS_CHANNEL_24GHZ(operationChn) ? eCSR_BAND_24 : eCSR_BAND_5G; + } +#else + cfgDot11Mode = eCSR_CFG_DOT11_MODE_11N; + eBand = CSR_IS_CHANNEL_24GHZ(operationChn) ? eCSR_BAND_24 : eCSR_BAND_5G; +#endif + } break; - //case eCSR_CFG_DOT11_MODE_BEST: - // cfgDot11Mode = eCSR_CFG_DOT11_MODE_BEST; - // eBand = eCSR_BAND_24; - // break; default: // Global dot11 Mode setting is 11a/b/g. // use the channel number to determine the Mode setting. @@ -10328,24 +10874,25 @@ static eCsrCfgDot11Mode csrRoamGetPhyModeBandForBss( tpAniSirGlobal pMac, tCsrRo } else if ( CSR_IS_CHANNEL_24GHZ(operationChn) ) { - // channel is a 2.4GHz channel. Set mode to 11g. + // WiFi tests require IBSS networks to start in 11b mode + // without any change to the default parameter settings + // on the adapter. We use ACU to start an IBSS through + // creation of a startIBSS profile. This startIBSS profile + // has Auto MACProtocol and the adapter property setting + // for dot11Mode is also AUTO. So in this case, let's + // start the IBSS network in 11b mode instead of 11g mode. + // So this is for Auto=profile->MacProtocol && Auto=Global. + // dot11Mode && profile->channel is < 14, then start the IBSS + // in b mode. // - // !!LAC - WiFi tests require IBSS networks to start in 11b mode without any change to the - // default parameter settings on the adapter. We use ACU to start an IBSS through creation - // of a startIBSS profile. this startIBSS profile has Auto MACProtocol and the - // adapter property setting for dot11Mode is also AUTO. So in this case, let's start - // the IBSS network in 11b mode instead of 11g mode. - // - // so this is for Auto=profile->MacProtocol && Auto=Global.dot11Mode && profile->channel is < 14, - // then start the IBSS in b mode. - // - // Note: we used to have this start as an 11g IBSS for best performance... now to specify that - // the user will have to set the do11Mode in the property page to 11g to force it. + // Note: we used to have this start as an 11g IBSS for best + // performance... now to specify that the user will have to + // set the do11Mode in the property page to 11g to force it. cfgDot11Mode = eCSR_CFG_DOT11_MODE_11B; eBand = eCSR_BAND_24; } - else - { + else + { // else, it's a 5.0GHz channel. Set mode to 11a. cfgDot11Mode = eCSR_CFG_DOT11_MODE_11A; eBand = eCSR_BAND_5G; @@ -10358,7 +10905,7 @@ static eCsrCfgDot11Mode csrRoamGetPhyModeBandForBss( tpAniSirGlobal pMac, tCsrRo //dot11 mode is set, lets pick the band if ( eCSR_OPERATING_CHANNEL_AUTO == operationChn ) { - // channel is Auto also. + // channel is Auto also. eBand = pMac->roam.configParam.eBand; if(eCSR_BAND_ALL == eBand) { @@ -10370,17 +10917,17 @@ static eCsrCfgDot11Mode csrRoamGetPhyModeBandForBss( tpAniSirGlobal pMac, tCsrRo { eBand = eCSR_BAND_24; } - else - { + else + { eBand = eCSR_BAND_5G; } - } + } if(pBand) { *pBand = eBand; } - - if (operationChn == 14){ + + if (operationChn == 14){ smsLog(pMac, LOGE, FL(" Switching to Dot11B mode ")); cfgDot11Mode = eCSR_CFG_DOT11_MODE_11B; } @@ -10416,7 +10963,7 @@ eHalStatus csrRoamIssueStopBss( tpAniSirGlobal pMac, tANI_U32 sessionId, eCsrRoa smsLog(pMac, LOGE, FL(" session %d not found "), sessionId); return eHAL_STATUS_FAILURE; } - + #ifdef FEATURE_WLAN_DIAG_SUPPORT_CSR { vos_log_ibss_pkt_type *pIbssLog; @@ -10428,8 +10975,6 @@ eHalStatus csrRoamIssueStopBss( tpAniSirGlobal pMac, tANI_U32 sessionId, eCsrRoa } } #endif //FEATURE_WLAN_DIAG_SUPPORT_CSR - pSession->ibss_join_pending = FALSE; - csrRoamStopIbssJoinTimer(pMac, sessionId ); // Set the roaming substate to 'stop Bss request'... csrRoamSubstateChange( pMac, NewSubstate, sessionId ); @@ -10445,7 +10990,7 @@ eHalStatus csrRoamIssueStopBss( tpAniSirGlobal pMac, tANI_U32 sessionId, eCsrRoa //pNumChan is a caller allocated space with the sizeof pChannels eHalStatus csrGetCfgValidChannels(tpAniSirGlobal pMac, tANI_U8 *pChannels, tANI_U32 *pNumChan) { - + return (ccmCfgGetStr(pMac, WNI_CFG_VALID_CHANNEL_LIST, (tANI_U8 *)pChannels, pNumChan)); @@ -10475,11 +11020,15 @@ tPowerdBm csrGetCfgMaxTxPower (tpAniSirGlobal pMac, tANI_U8 channel) else return maxTxPwr; - status = palAllocateMemory(pMac->hHdd, (void **)&pCountryInfo, cfgLength); + pCountryInfo = vos_mem_malloc(cfgLength); + if ( NULL == pCountryInfo ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; if (status != eHAL_STATUS_SUCCESS) { VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, - FL("%s: palAllocateMemory() failed, status = %d"), + FL("%s: failed to allocate memory, status = %d"), __FUNCTION__, status); goto error; } @@ -10504,7 +11053,7 @@ tPowerdBm csrGetCfgMaxTxPower (tpAniSirGlobal pMac, tANI_U8 channel) error: if (NULL != pCountryInfo) - palFreeMemory(pMac->hHdd, pCountryInfo); + vos_mem_free(pCountryInfo); return maxTxPwr; } @@ -10515,7 +11064,7 @@ tANI_BOOLEAN csrRoamIsChannelValid( tpAniSirGlobal pMac, tANI_U8 channel ) tANI_BOOLEAN fValid = FALSE; tANI_U32 idxValidChannels; tANI_U32 len = sizeof(pMac->roam.validChannelList); - + if (HAL_STATUS_SUCCESS(csrGetCfgValidChannels(pMac, pMac->roam.validChannelList, &len))) { for ( idxValidChannels = 0; ( idxValidChannels < len ); idxValidChannels++ ) @@ -10526,8 +11075,8 @@ tANI_BOOLEAN csrRoamIsChannelValid( tpAniSirGlobal pMac, tANI_U8 channel ) break; } } - } - pMac->roam.numValidChannels = len; + } + pMac->roam.numValidChannels = len; return fValid; } @@ -10567,7 +11116,7 @@ tANI_BOOLEAN csrRoamIsValid40MhzChannel(tpAniSirGlobal pMac, tANI_U8 channel) { if(pIes->HTInfo.present) { - /* This is called during INFRA STA/CLIENT and should use the merged value of + /* This is called during INFRA STA/CLIENT and should use the merged value of * supported channel width and recommended tx width as per standard */ smsLog(pMac, LOG1, "scws %u rtws %u sco %u", @@ -10634,13 +11183,17 @@ tANI_BOOLEAN csrIsSameProfile(tpAniSirGlobal pMac, tCsrRoamConnectedProfile *pPr tANI_BOOLEAN fCheck = eANI_BOOLEAN_FALSE; tCsrScanResultFilter *pScanFilter = NULL; eHalStatus status = eHAL_STATUS_SUCCESS; - + if(pProfile1 && pProfile2) { - status = palAllocateMemory(pMac->hHdd, (void **)&pScanFilter, sizeof(tCsrScanResultFilter)); + pScanFilter = vos_mem_malloc(sizeof(tCsrScanResultFilter)); + if ( NULL == pScanFilter ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; if(HAL_STATUS_SUCCESS(status)) { - palZeroMemory(pMac->hHdd, pScanFilter, sizeof(tCsrScanResultFilter)); + vos_mem_set(pScanFilter, sizeof(tCsrScanResultFilter), 0); status = csrRoamPrepareFilterFromProfile(pMac, pProfile2, pScanFilter); if(HAL_STATUS_SUCCESS(status)) { @@ -10650,7 +11203,7 @@ tANI_BOOLEAN csrIsSameProfile(tpAniSirGlobal pMac, tCsrRoamConnectedProfile *pPr tANI_U32 i; for(i = 0; i < pScanFilter->SSIDs.numOfSSIDs; i++) { - fCheck = csrIsSsidMatch( pMac, pScanFilter->SSIDs.SSIDList[i].SSID.ssId, + fCheck = csrIsSsidMatch( pMac, pScanFilter->SSIDs.SSIDList[i].SSID.ssId, pScanFilter->SSIDs.SSIDList[i].SSID.length, pProfile1->SSID.ssId, pProfile1->SSID.length, eANI_BOOLEAN_FALSE ); if ( fCheck ) break; @@ -10682,10 +11235,10 @@ tANI_BOOLEAN csrIsSameProfile(tpAniSirGlobal pMac, tCsrRoamConnectedProfile *pPr }while(0); csrFreeScanFilter(pMac, pScanFilter); } - palFreeMemory(pMac->hHdd, pScanFilter); + vos_mem_free(pScanFilter); } } - + return (fCheck); } @@ -10707,8 +11260,8 @@ tANI_BOOLEAN csrRoamIsSameProfileKeys(tpAniSirGlobal pMac, tCsrRoamConnectedProf for(i = 0; i < CSR_MAX_NUM_KEY; i++) { if(pConnProfile->Keys.KeyLength[i] != pProfile2->Keys.KeyLength[i]) break; - if(!palEqualMemory(pMac->hHdd, &pConnProfile->Keys.KeyMaterial[i], - &pProfile2->Keys.KeyMaterial[i], pProfile2->Keys.KeyLength[i])) + if (!vos_mem_compare(&pConnProfile->Keys.KeyMaterial[i], + &pProfile2->Keys.KeyMaterial[i], pProfile2->Keys.KeyLength[i])) { break; } @@ -10725,12 +11278,12 @@ tANI_BOOLEAN csrRoamIsSameProfileKeys(tpAniSirGlobal pMac, tCsrRoamConnectedProf tANI_U8 csrRoamGetIbssStartChannelNumber50( tpAniSirGlobal pMac ) { - tANI_U8 channel = 0; + tANI_U8 channel = 0; tANI_U32 idx; tANI_U32 idxValidChannels; tANI_BOOLEAN fFound = FALSE; tANI_U32 len = sizeof(pMac->roam.validChannelList); - + if(eCSR_OPERATING_CHANNEL_ANY != pMac->roam.configParam.AdHocChannel5G) { channel = pMac->roam.configParam.AdHocChannel5G; @@ -10741,7 +11294,7 @@ tANI_U8 csrRoamGetIbssStartChannelNumber50( tpAniSirGlobal pMac ) } if (0 == channel && HAL_STATUS_SUCCESS(csrGetCfgValidChannels(pMac, (tANI_U8 *)pMac->roam.validChannelList, &len))) { - for ( idx = 0; ( idx < CSR_NUM_IBSS_START_CHANNELS_50 ) && !fFound; idx++ ) + for ( idx = 0; ( idx < CSR_NUM_IBSS_START_CHANNELS_50 ) && !fFound; idx++ ) { for ( idxValidChannels = 0; ( idxValidChannels < len ) && !fFound; idxValidChannels++ ) { @@ -10753,7 +11306,7 @@ tANI_U8 csrRoamGetIbssStartChannelNumber50( tpAniSirGlobal pMac ) } } // this is rare, but if it does happen, we find anyone in 11a bandwidth and return the first 11a channel found! - if (!fFound) + if (!fFound) { for ( idxValidChannels = 0; idxValidChannels < len ; idxValidChannels++ ) { @@ -10765,8 +11318,8 @@ tANI_U8 csrRoamGetIbssStartChannelNumber50( tpAniSirGlobal pMac ) } } }//if - - return( channel ); + + return( channel ); } tANI_U8 csrRoamGetIbssStartChannelNumber24( tpAniSirGlobal pMac ) @@ -10776,7 +11329,7 @@ tANI_U8 csrRoamGetIbssStartChannelNumber24( tpAniSirGlobal pMac ) tANI_U32 idxValidChannels; tANI_BOOLEAN fFound = FALSE; tANI_U32 len = sizeof(pMac->roam.validChannelList); - + if(eCSR_OPERATING_CHANNEL_ANY != pMac->roam.configParam.AdHocChannel24) { channel = pMac->roam.configParam.AdHocChannel24; @@ -10785,10 +11338,10 @@ tANI_U8 csrRoamGetIbssStartChannelNumber24( tpAniSirGlobal pMac ) channel = 0; } } - + if (0 == channel && HAL_STATUS_SUCCESS(csrGetCfgValidChannels(pMac, (tANI_U8 *)pMac->roam.validChannelList, &len))) { - for ( idx = 0; ( idx < CSR_NUM_IBSS_START_CHANNELS_24 ) && !fFound; idx++ ) + for ( idx = 0; ( idx < CSR_NUM_IBSS_START_CHANNELS_24 ) && !fFound; idx++ ) { for ( idxValidChannels = 0; ( idxValidChannels < len ) && !fFound; idxValidChannels++ ) { @@ -10800,33 +11353,33 @@ tANI_U8 csrRoamGetIbssStartChannelNumber24( tpAniSirGlobal pMac ) } } } - - return( channel ); + + return( channel ); } -static void csrRoamGetBssStartParms( tpAniSirGlobal pMac, tCsrRoamProfile *pProfile, +static void csrRoamGetBssStartParms( tpAniSirGlobal pMac, tCsrRoamProfile *pProfile, tCsrRoamStartBssParams *pParam ) { eCsrCfgDot11Mode cfgDot11Mode; eCsrBand eBand; tANI_U8 channel = 0; tSirNwType nwType; - tANI_U8 operationChannel = 0; - + tANI_U8 operationChannel = 0; + if(pProfile->ChannelInfo.numOfChannels && pProfile->ChannelInfo.ChannelList) { operationChannel = pProfile->ChannelInfo.ChannelList[0]; } - + cfgDot11Mode = csrRoamGetPhyModeBandForBss( pMac, pProfile, operationChannel, &eBand ); - + if( ( (pProfile->csrPersona == VOS_P2P_CLIENT_MODE) || (pProfile->csrPersona == VOS_P2P_GO_MODE) ) && ( cfgDot11Mode == eCSR_CFG_DOT11_MODE_11B) ) { /* This should never happen */ - VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_FATAL, + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_FATAL, FL("For P2PClient/P2P-GO (persona %d) cfgDot11Mode is 11B"), pProfile->csrPersona); VOS_ASSERT(0); @@ -10838,7 +11391,7 @@ static void csrRoamGetBssStartParms( tpAniSirGlobal pMac, tCsrRoamProfile *pProf break; case eCSR_CFG_DOT11_MODE_11B: nwType = eSIR_11B_NW_TYPE; - break; + break; case eCSR_CFG_DOT11_MODE_11A: nwType = eSIR_11A_NW_TYPE; break; @@ -10855,7 +11408,7 @@ static void csrRoamGetBssStartParms( tpAniSirGlobal pMac, tCsrRoamProfile *pProf nwType = eSIR_11A_NW_TYPE; } break; - } + } pParam->extendedRateSet.numRates = 0; @@ -10864,9 +11417,9 @@ static void csrRoamGetBssStartParms( tpAniSirGlobal pMac, tCsrRoamProfile *pProf default: smsLog(pMac, LOGE, FL("sees an unknown pSirNwType (%d)"), nwType); case eSIR_11A_NW_TYPE: - + pParam->operationalRateSet.numRates = 8; - + pParam->operationalRateSet.rate[0] = SIR_MAC_RATE_6 | CSR_DOT11_BASIC_RATE_MASK; pParam->operationalRateSet.rate[1] = SIR_MAC_RATE_9; pParam->operationalRateSet.rate[2] = SIR_MAC_RATE_12 | CSR_DOT11_BASIC_RATE_MASK; @@ -10875,13 +11428,13 @@ static void csrRoamGetBssStartParms( tpAniSirGlobal pMac, tCsrRoamProfile *pProf pParam->operationalRateSet.rate[5] = SIR_MAC_RATE_36; pParam->operationalRateSet.rate[6] = SIR_MAC_RATE_48; pParam->operationalRateSet.rate[7] = SIR_MAC_RATE_54; - - if ( eCSR_OPERATING_CHANNEL_ANY == operationChannel ) + + if ( eCSR_OPERATING_CHANNEL_ANY == operationChannel ) { channel = csrRoamGetIbssStartChannelNumber50( pMac ); if( 0 == channel && - CSR_IS_PHY_MODE_DUAL_BAND(pProfile->phyMode) && - CSR_IS_PHY_MODE_DUAL_BAND(pMac->roam.configParam.phyMode) + CSR_IS_PHY_MODE_DUAL_BAND(pProfile->phyMode) && + CSR_IS_PHY_MODE_DUAL_BAND(pMac->roam.configParam.phyMode) ) { //We could not find a 5G channel by auto pick, let's try 2.4G channels @@ -10895,36 +11448,36 @@ static void csrRoamGetBssStartParms( tpAniSirGlobal pMac, tCsrRoamProfile *pProf pParam->operationalRateSet.rate[3] = SIR_MAC_RATE_11 | CSR_DOT11_BASIC_RATE_MASK; } } - else + else { channel = operationChannel; } break; - + case eSIR_11B_NW_TYPE: pParam->operationalRateSet.numRates = 4; pParam->operationalRateSet.rate[0] = SIR_MAC_RATE_1 | CSR_DOT11_BASIC_RATE_MASK; pParam->operationalRateSet.rate[1] = SIR_MAC_RATE_2 | CSR_DOT11_BASIC_RATE_MASK; pParam->operationalRateSet.rate[2] = SIR_MAC_RATE_5_5 | CSR_DOT11_BASIC_RATE_MASK; pParam->operationalRateSet.rate[3] = SIR_MAC_RATE_11 | CSR_DOT11_BASIC_RATE_MASK; - if ( eCSR_OPERATING_CHANNEL_ANY == operationChannel ) + if ( eCSR_OPERATING_CHANNEL_ANY == operationChannel ) { channel = csrRoamGetIbssStartChannelNumber24( pMac ); } - else + else { channel = operationChannel; } - - break; + + break; case eSIR_11G_NW_TYPE: - /* For P2P Client and P2P GO, disable 11b rates */ + /* For P2P Client and P2P GO, disable 11b rates */ if( (pProfile->csrPersona == VOS_P2P_CLIENT_MODE) || (pProfile->csrPersona == VOS_P2P_GO_MODE) ) { pParam->operationalRateSet.numRates = 8; - + pParam->operationalRateSet.rate[0] = SIR_MAC_RATE_6 | CSR_DOT11_BASIC_RATE_MASK; pParam->operationalRateSet.rate[1] = SIR_MAC_RATE_9; pParam->operationalRateSet.rate[2] = SIR_MAC_RATE_12 | CSR_DOT11_BASIC_RATE_MASK; @@ -10941,7 +11494,7 @@ static void csrRoamGetBssStartParms( tpAniSirGlobal pMac, tCsrRoamProfile *pProf pParam->operationalRateSet.rate[1] = SIR_MAC_RATE_2 | CSR_DOT11_BASIC_RATE_MASK; pParam->operationalRateSet.rate[2] = SIR_MAC_RATE_5_5 | CSR_DOT11_BASIC_RATE_MASK; pParam->operationalRateSet.rate[3] = SIR_MAC_RATE_11 | CSR_DOT11_BASIC_RATE_MASK; - + pParam->extendedRateSet.numRates = 8; pParam->extendedRateSet.rate[0] = SIR_MAC_RATE_6; pParam->extendedRateSet.rate[1] = SIR_MAC_RATE_9; @@ -10952,33 +11505,33 @@ static void csrRoamGetBssStartParms( tpAniSirGlobal pMac, tCsrRoamProfile *pProf pParam->extendedRateSet.rate[6] = SIR_MAC_RATE_48; pParam->extendedRateSet.rate[7] = SIR_MAC_RATE_54; } - - if ( eCSR_OPERATING_CHANNEL_ANY == operationChannel ) + + if ( eCSR_OPERATING_CHANNEL_ANY == operationChannel ) { channel = csrRoamGetIbssStartChannelNumber24( pMac ); } - else + else { channel = operationChannel; } - - break; + + break; } pParam->operationChn = channel; pParam->sirNwType = nwType; } -static void csrRoamGetBssStartParmsFromBssDesc( tpAniSirGlobal pMac, tSirBssDescription *pBssDesc, +static void csrRoamGetBssStartParmsFromBssDesc( tpAniSirGlobal pMac, tSirBssDescription *pBssDesc, tDot11fBeaconIEs *pIes, tCsrRoamStartBssParams *pParam ) { - + if( pParam ) { pParam->sirNwType = pBssDesc->nwType; pParam->cbMode = PHY_SINGLE_CHANNEL_CENTERED; pParam->operationChn = pBssDesc->channelId; - palCopyMemory( pMac->hHdd, &pParam->bssid, pBssDesc->bssId, sizeof(tCsrBssid) ); - + vos_mem_copy(&pParam->bssid, pBssDesc->bssId, sizeof(tCsrBssid)); + if( pIes ) { if(pIes->SuppRates.present) @@ -10990,13 +11543,29 @@ static void csrRoamGetBssStartParmsFromBssDesc( tpAniSirGlobal pMac, tSirBssDesc pIes->SuppRates.num_rates); pIes->SuppRates.num_rates = SIR_MAC_RATESET_EID_MAX; } - palCopyMemory(pMac->hHdd, pParam->operationalRateSet.rate, pIes->SuppRates.rates, - sizeof(*pIes->SuppRates.rates) * pIes->SuppRates.num_rates); + vos_mem_copy(pParam->operationalRateSet.rate, pIes->SuppRates.rates, + sizeof(*pIes->SuppRates.rates) * pIes->SuppRates.num_rates); + } + if (pIes->ExtSuppRates.present) + { + pParam->extendedRateSet.numRates = pIes->ExtSuppRates.num_rates; + if(pIes->ExtSuppRates.num_rates > SIR_MAC_EXTENDED_RATE_EID_MAX) + { + smsLog(pMac, LOGE, FL("num_rates :%d is more than \ + SIR_MAC_RATESET_EID_MAX, resetting to \ + SIR_MAC_RATESET_EID_MAX"), + pIes->ExtSuppRates.num_rates); + pIes->ExtSuppRates.num_rates = SIR_MAC_EXTENDED_RATE_EID_MAX; + } + vos_mem_copy(pParam->extendedRateSet.rate, + pIes->ExtSuppRates.rates, + sizeof(*pIes->ExtSuppRates.rates) * pIes->ExtSuppRates.num_rates); } if( pIes->SSID.present ) { pParam->ssId.length = pIes->SSID.num_ssid; - palCopyMemory(pMac->hHdd, pParam->ssId.ssId, pIes->SSID.ssid, pParam->ssId.length); + vos_mem_copy(pParam->ssId.ssId, pIes->SSID.ssid, + pParam->ssId.length); } pParam->cbMode = csrGetCBModeFromIes(pMac, pParam->operationChn, pIes); } @@ -11012,22 +11581,22 @@ static void csrRoamDetermineMaxRateForAdHoc( tpAniSirGlobal pMac, tSirMacRateSet { tANI_U8 MaxRate = 0; tANI_U32 i; - tANI_U8 *pRate; - + tANI_U8 *pRate; + pRate = pSirRateSet->rate; for ( i = 0; i < pSirRateSet->numRates; i++ ) { MaxRate = CSR_MAX( MaxRate, ( pRate[ i ] & (~CSR_DOT11_BASIC_RATE_MASK) ) ); } - + // Save the max rate in the connected state information... - + // modify LastRates variable as well - + return; } -eHalStatus csrRoamIssueStartBss( tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamStartBssParams *pParam, +eHalStatus csrRoamIssueStartBss( tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamStartBssParams *pParam, tCsrRoamProfile *pProfile, tSirBssDescription *pBssDesc, tANI_U32 roamId ) { eHalStatus status = eHAL_STATUS_SUCCESS; @@ -11045,14 +11614,13 @@ eHalStatus csrRoamIssueStartBss( tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRo if(pBssDesc) { pIbssLog->eventId = WLAN_IBSS_EVENT_JOIN_IBSS_REQ; - palCopyMemory(pMac->hHdd, pIbssLog->bssid, pBssDesc->bssId, 6); + vos_mem_copy(pIbssLog->bssid, pBssDesc->bssId, 6); } else { pIbssLog->eventId = WLAN_IBSS_EVENT_START_IBSS_REQ; } - palCopyMemory(pMac->hHdd, pIbssLog->ssid, pParam->ssId.ssId, - pParam->ssId.length); + vos_mem_copy(pIbssLog->ssid, pParam->ssId.ssId, pParam->ssId.length); if(pProfile->ChannelInfo.numOfChannels == 0) { pIbssLog->channelSetting = AUTO_PICK; @@ -11071,7 +11639,7 @@ eHalStatus csrRoamIssueStartBss( tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRo pParam->pRSNIE = pProfile->pRSNReqIE; pParam->privacy = pProfile->privacy; - pParam->fwdWPSPBCProbeReq = pProfile->fwdWPSPBCProbeReq; + pParam->fwdWPSPBCProbeReq = pProfile->fwdWPSPBCProbeReq; pParam->authType = pProfile->csr80211AuthType; pParam->beaconInterval = pProfile->beaconInterval; pParam->dtimPeriod = pProfile->dtimPeriod; @@ -11081,15 +11649,15 @@ eHalStatus csrRoamIssueStartBss( tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRo { if (csrIsValidChannel(pMac, pParam->operationChn) != eHAL_STATUS_SUCCESS) { - pParam->operationChn = INFRA_AP_DEFAULT_CHANNEL; - } + pParam->operationChn = INFRA_AP_DEFAULT_CHANNEL; + } } pParam->protEnabled = pProfile->protEnabled; pParam->obssProtEnabled = pProfile->obssProtEnabled; pParam->ht_protection = pProfile->cfg_protection; pParam->wps_state = pProfile->wps_state; - pParam->uCfgDot11Mode = csrRoamGetPhyModeBandForBss(pMac, pProfile, pParam->operationChn /* pProfile->operationChannel*/, + pParam->uCfgDot11Mode = csrRoamGetPhyModeBandForBss(pMac, pProfile, pParam->operationChn /* pProfile->operationChannel*/, &eBand); pParam->bssPersona = pProfile->csrPersona; // When starting an IBSS, start on the channel from the Profile. @@ -11097,7 +11665,7 @@ eHalStatus csrRoamIssueStartBss( tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRo return (status); } -static void csrRoamPrepareBssParams(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamProfile *pProfile, +static void csrRoamPrepareBssParams(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamProfile *pProfile, tSirBssDescription *pBssDesc, tBssConfigParam *pBssConfig, tDot11fBeaconIEs *pIes) { tANI_U8 Channel; @@ -11109,7 +11677,7 @@ static void csrRoamPrepareBssParams(tpAniSirGlobal pMac, tANI_U32 sessionId, tCs smsLog(pMac, LOGE, FL(" session %d not found "), sessionId); return; } - + if( pBssDesc ) { csrRoamGetBssStartParmsFromBssDesc( pMac, pBssDesc, pIes, &pSession->bssParams ); @@ -11118,7 +11686,8 @@ static void csrRoamPrepareBssParams(tpAniSirGlobal pMac, tANI_U32 sessionId, tCs //For WDS station, use selfMac as the self BSSID if( CSR_IS_WDS_STA( pProfile ) ) { - palCopyMemory(pMac->hHdd, &pSession->bssParams.bssid, &pSession->selfMacAddr, sizeof(tCsrBssid)); + vos_mem_copy(&pSession->bssParams.bssid, &pSession->selfMacAddr, + sizeof(tCsrBssid)); } } else @@ -11127,36 +11696,39 @@ static void csrRoamPrepareBssParams(tpAniSirGlobal pMac, tANI_U32 sessionId, tCs //Use the first SSID if(pProfile->SSIDs.numOfSSIDs) { - palCopyMemory(pMac->hHdd, &pSession->bssParams.ssId, pProfile->SSIDs.SSIDList, sizeof(tSirMacSSid)); + vos_mem_copy(&pSession->bssParams.ssId, pProfile->SSIDs.SSIDList, + sizeof(tSirMacSSid)); } //For WDS station, use selfMac as the self BSSID if( CSR_IS_WDS_STA( pProfile ) ) { - palCopyMemory(pMac->hHdd, &pSession->bssParams.bssid, &pSession->selfMacAddr, sizeof(tCsrBssid)); + vos_mem_copy(&pSession->bssParams.bssid, &pSession->selfMacAddr, + sizeof(tCsrBssid)); } //Use the first BSSID else if( pProfile->BSSIDs.numOfBSSIDs ) { - palCopyMemory(pMac->hHdd, &pSession->bssParams.bssid, pProfile->BSSIDs.bssid, sizeof(tCsrBssid)); + vos_mem_copy(&pSession->bssParams.bssid, pProfile->BSSIDs.bssid, + sizeof(tCsrBssid)); } else { - palZeroMemory( pMac->hHdd, &pSession->bssParams.bssid, sizeof(tCsrBssid) ); + vos_mem_set(&pSession->bssParams.bssid, sizeof(tCsrBssid), 0); } } Channel = pSession->bssParams.operationChn; - //Set operating channel in pProfile which will be used + //Set operating channel in pProfile which will be used //in csrRoamSetBssConfigCfg() to determine channel bonding - //mode and will be configured in CFG later + //mode and will be configured in CFG later pProfile->operationChannel = Channel; - + if(Channel == 0) { smsLog(pMac, LOGW, " CSR cannot find a channel to start IBSS"); } else { - + csrRoamDetermineMaxRateForAdHoc( pMac, &pSession->bssParams.operationalRateSet ); if (CSR_IS_INFRA_AP(pProfile) || CSR_IS_START_IBSS( pProfile ) ) { @@ -11175,38 +11747,42 @@ static void csrRoamPrepareBssParams(tpAniSirGlobal pMac, tANI_U32 sessionId, tCs } } -static eHalStatus csrRoamStartIbss( tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamProfile *pProfile, +static eHalStatus csrRoamStartIbss( tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamProfile *pProfile, tANI_BOOLEAN *pfSameIbss ) { eHalStatus status = eHAL_STATUS_SUCCESS; tANI_BOOLEAN fSameIbss = FALSE; - - if ( csrIsConnStateIbss( pMac, sessionId ) ) - { + + if ( csrIsConnStateIbss( pMac, sessionId ) ) + { // Check if any profile parameter has changed ? If any profile parameter // has changed then stop old BSS and start a new one with new parameters - if ( csrIsSameProfile( pMac, &pMac->roam.roamSession[sessionId].connectedProfile, pProfile ) ) + if ( csrIsSameProfile( pMac, &pMac->roam.roamSession[sessionId].connectedProfile, pProfile ) ) { fSameIbss = TRUE; } else { status = csrRoamIssueStopBss( pMac, sessionId, eCSR_ROAM_SUBSTATE_DISCONNECT_CONTINUE_ROAMING ); - } + } } - else if ( csrIsConnStateConnectedInfra( pMac, sessionId ) ) + else if ( csrIsConnStateConnectedInfra( pMac, sessionId ) ) { // Disassociate from the connected Infrastructure network... status = csrRoamIssueDisassociate( pMac, sessionId, eCSR_ROAM_SUBSTATE_DISCONNECT_CONTINUE_ROAMING, FALSE ); } - else + else { tBssConfigParam *pBssConfig; - - status = palAllocateMemory(pMac->hHdd, (void **)&pBssConfig, sizeof(tBssConfigParam)); + + pBssConfig = vos_mem_malloc(sizeof(tBssConfigParam)); + if ( NULL == pBssConfig ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; if(HAL_STATUS_SUCCESS(status)) { - palZeroMemory(pMac->hHdd, pBssConfig, sizeof(tBssConfigParam)); + vos_mem_set(pBssConfig, sizeof(tBssConfigParam), 0); // there is no Bss description before we start an IBSS so we need to adopt // all Bss configuration parameters from the Profile. status = csrRoamPrepareBssConfigFromProfile(pMac, pProfile, pBssConfig, NULL); @@ -11216,13 +11792,15 @@ static eHalStatus csrRoamStartIbss( tpAniSirGlobal pMac, tANI_U32 sessionId, tCs pMac->roam.roamSession[sessionId].bssParams.uCfgDot11Mode = pBssConfig->uCfgDot11Mode; //Prepare some more parameters for this IBSS csrRoamPrepareBssParams(pMac, sessionId, pProfile, NULL, pBssConfig, NULL); - status = csrRoamSetBssConfigCfg(pMac, sessionId, pProfile, NULL, pBssConfig, NULL); + status = csrRoamSetBssConfigCfg(pMac, sessionId, pProfile, + NULL, pBssConfig, + NULL, eANI_BOOLEAN_FALSE); } - palFreeMemory(pMac->hHdd, pBssConfig); + vos_mem_free(pBssConfig); }//Allocate memory } - + if(pfSameIbss) { *pfSameIbss = fSameIbss; @@ -11230,7 +11808,7 @@ static eHalStatus csrRoamStartIbss( tpAniSirGlobal pMac, tANI_U32 sessionId, tCs return( status ); } -static void csrRoamUpdateConnectedProfileFromNewBss( tpAniSirGlobal pMac, tANI_U32 sessionId, +static void csrRoamUpdateConnectedProfileFromNewBss( tpAniSirGlobal pMac, tANI_U32 sessionId, tSirSmeNewBssInfo *pNewBss ) { tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, sessionId ); @@ -11240,14 +11818,14 @@ static void csrRoamUpdateConnectedProfileFromNewBss( tpAniSirGlobal pMac, tANI_U smsLog(pMac, LOGE, FL(" session %d not found "), sessionId); return; } - + if( pNewBss ) { // Set the operating channel. pSession->connectedProfile.operationChannel = pNewBss->channelNumber; // move the BSSId from the BSS description into the connected state information. - palCopyMemory( pMac->hHdd, &pSession->connectedProfile.bssid, - &(pNewBss->bssId), sizeof( tCsrBssid ) ); + vos_mem_copy(&pSession->connectedProfile.bssid, &(pNewBss->bssId), + sizeof( tCsrBssid )); } return; } @@ -11272,8 +11850,9 @@ eHalStatus csrRoamSetBKIDCache( tpAniSirGlobal pMac, tANI_U32 sessionId, tBkidCa pSession->NumBkidCache = (tANI_U16)numItems; if(numItems && pBKIDCache) { - status = palCopyMemory( pMac->hHdd, pSession->BkidCacheInfo, pBKIDCache, - sizeof(tBkidCacheInfo) * numItems ); + vos_mem_copy(pSession->BkidCacheInfo, pBKIDCache, + sizeof(tBkidCacheInfo) * numItems); + status = eHAL_STATUS_SUCCESS; } } return (status); @@ -11304,8 +11883,8 @@ eHalStatus csrRoamGetBKIDCache(tpAniSirGlobal pMac, tANI_U32 sessionId, tANI_U32 pSession->NumBkidCache); pSession->NumBkidCache = CSR_MAX_PMKID_ALLOWED; } - palCopyMemory( pMac->hHdd, pBkidCache, pSession->BkidCacheInfo, - sizeof(tBkidCacheInfo) * pSession->NumBkidCache ); + vos_mem_copy(pBkidCache, pSession->BkidCacheInfo, + sizeof(tBkidCacheInfo) * pSession->NumBkidCache); *pNum = pSession->NumBkidCache; status = eHAL_STATUS_SUCCESS; } @@ -11322,27 +11901,28 @@ eHalStatus csrRoamSetPMKIDCache( tpAniSirGlobal pMac, tANI_U32 sessionId, { eHalStatus status = eHAL_STATUS_INVALID_PARAMETER; tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, sessionId ); - + if(!pSession) { smsLog(pMac, LOGE, FL(" session %d not found "), sessionId); return eHAL_STATUS_FAILURE; } - + smsLog(pMac, LOGW, "csrRoamSetPMKIDCache called, numItems = %d", numItems); if(numItems <= CSR_MAX_PMKID_ALLOWED) { #ifdef FEATURE_WLAN_DIAG_SUPPORT_CSR { WLAN_VOS_DIAG_EVENT_DEF(secEvent, vos_event_wlan_security_payload_type); - palZeroMemory(pMac->hHdd, &secEvent, sizeof(vos_event_wlan_security_payload_type)); + vos_mem_set(&secEvent, + sizeof(vos_event_wlan_security_payload_type), 0); secEvent.eventId = WLAN_SECURITY_EVENT_PMKID_UPDATE; - secEvent.encryptionModeMulticast = + secEvent.encryptionModeMulticast = (v_U8_t)diagEncTypeFromCSRType(pSession->connectedProfile.mcEncryptionType); - secEvent.encryptionModeUnicast = + secEvent.encryptionModeUnicast = (v_U8_t)diagEncTypeFromCSRType(pSession->connectedProfile.EncryptionType); - palCopyMemory( pMac->hHdd, secEvent.bssid, pSession->connectedProfile.bssid, 6 ); - secEvent.authMode = + vos_mem_copy(secEvent.bssid, pSession->connectedProfile.bssid, 6); + secEvent.authMode = (v_U8_t)diagAuthTypeFromCSRType(pSession->connectedProfile.AuthType); WLAN_VOS_DIAG_EVENT_REPORT(&secEvent, EVENT_WLAN_SECURITY); } @@ -11352,8 +11932,9 @@ eHalStatus csrRoamSetPMKIDCache( tpAniSirGlobal pMac, tANI_U32 sessionId, pSession->NumPmkidCache = (tANI_U16)numItems; if(numItems && pPMKIDCache) { - status = palCopyMemory( pMac->hHdd, pSession->PmkidCacheInfo, pPMKIDCache, - sizeof(tPmkidCacheInfo) * numItems ); + vos_mem_copy(pSession->PmkidCacheInfo, pPMKIDCache, + sizeof(tPmkidCacheInfo) * numItems); + status = eHAL_STATUS_SUCCESS; } } return (status); @@ -11377,14 +11958,14 @@ eHalStatus csrRoamDelPMKIDfromCache( tpAniSirGlobal pMac, tANI_U32 sessionId, { smsLog(pMac, LOGW, "Delete PMKID for %02X-%02X-%02X-%02X-%02X-%02X ", pBSSId[0], pBSSId[1], pBSSId[2], pBSSId[3], pBSSId[4], pBSSId[5]); - if( palEqualMemory( pMac->hHdd, pBSSId, pSession->PmkidCacheInfo[Index].BSSID, sizeof(tCsrBssid) ) ) + if( vos_mem_compare( pBSSId, pSession->PmkidCacheInfo[Index].BSSID, sizeof(tCsrBssid) ) ) { fMatchFound = TRUE; break; } } if( !fMatchFound ) break; - palZeroMemory( pMac->hHdd, pSession->PmkidCacheInfo[Index].BSSID, sizeof(tPmkidCacheInfo)); + vos_mem_set(pSession->PmkidCacheInfo[Index].BSSID, sizeof(tPmkidCacheInfo), 0); status = eHAL_STATUS_SUCCESS; } while( 0 ); @@ -11407,7 +11988,7 @@ eHalStatus csrRoamGetPMKIDCache(tpAniSirGlobal pMac, tANI_U32 sessionId, tANI_U3 smsLog(pMac, LOGE, FL(" session %d not found "), sessionId); return eHAL_STATUS_FAILURE; } - + if(pNum && pPmkidCache) { if(pSession->NumPmkidCache == 0) @@ -11423,8 +12004,8 @@ eHalStatus csrRoamGetPMKIDCache(tpAniSirGlobal pMac, tANI_U32 sessionId, tANI_U3 pSession->NumPmkidCache); pSession->NumPmkidCache = CSR_MAX_PMKID_ALLOWED; } - palCopyMemory( pMac->hHdd, pPmkidCache, pSession->PmkidCacheInfo, - sizeof(tPmkidCacheInfo) * pSession->NumPmkidCache ); + vos_mem_copy(pPmkidCache, pSession->PmkidCacheInfo, + sizeof(tPmkidCacheInfo) * pSession->NumPmkidCache); *pNum = pSession->NumPmkidCache; status = eHAL_STATUS_SUCCESS; } @@ -11437,13 +12018,13 @@ eHalStatus csrRoamGetWpaRsnReqIE(tpAniSirGlobal pMac, tANI_U32 sessionId, tANI_U eHalStatus status = eHAL_STATUS_INVALID_PARAMETER; tANI_U32 len; tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, sessionId ); - + if(!pSession) { smsLog(pMac, LOGE, FL(" session %d not found "), sessionId); return eHAL_STATUS_FAILURE; } - + if(pLen) { len = *pLen; @@ -11452,7 +12033,9 @@ eHalStatus csrRoamGetWpaRsnReqIE(tpAniSirGlobal pMac, tANI_U32 sessionId, tANI_U { if(len >= pSession->nWpaRsnReqIeLength) { - status = palCopyMemory(pMac->hHdd, pBuf, pSession->pWpaRsnReqIE, pSession->nWpaRsnReqIeLength); + vos_mem_copy(pBuf, pSession->pWpaRsnReqIE, + pSession->nWpaRsnReqIeLength); + status = eHAL_STATUS_SUCCESS; } } } @@ -11470,7 +12053,7 @@ eHalStatus csrRoamGetWpaRsnRspIE(tpAniSirGlobal pMac, tANI_U32 sessionId, tANI_U smsLog(pMac, LOGE, FL(" session %d not found "), sessionId); return eHAL_STATUS_FAILURE; } - + if(pLen) { len = *pLen; @@ -11479,7 +12062,9 @@ eHalStatus csrRoamGetWpaRsnRspIE(tpAniSirGlobal pMac, tANI_U32 sessionId, tANI_U { if(len >= pSession->nWpaRsnRspIeLength) { - status = palCopyMemory(pMac->hHdd, pBuf, pSession->pWpaRsnRspIE, pSession->nWpaRsnRspIeLength); + vos_mem_copy(pBuf, pSession->pWpaRsnRspIE, + pSession->nWpaRsnRspIeLength); + status = eHAL_STATUS_SUCCESS; } } } @@ -11497,7 +12082,7 @@ eHalStatus csrRoamGetWapiReqIE(tpAniSirGlobal pMac, tANI_U32 sessionId, tANI_U32 smsLog(pMac, LOGE, FL(" session %d not found "), sessionId); return eHAL_STATUS_FAILURE; } - + if(pLen) { len = *pLen; @@ -11506,7 +12091,9 @@ eHalStatus csrRoamGetWapiReqIE(tpAniSirGlobal pMac, tANI_U32 sessionId, tANI_U32 { if(len >= pSession->nWapiReqIeLength) { - status = palCopyMemory(pMac->hHdd, pBuf, pSession->pWapiReqIE, pSession->nWapiReqIeLength); + vos_mem_copy(pBuf, pSession->pWapiReqIE, + pSession->nWapiReqIeLength); + status = eHAL_STATUS_SUCCESS; } } } @@ -11523,7 +12110,7 @@ eHalStatus csrRoamGetWapiRspIE(tpAniSirGlobal pMac, tANI_U32 sessionId, tANI_U32 smsLog(pMac, LOGE, FL(" session %d not found "), sessionId); return eHAL_STATUS_FAILURE; } - + if(pLen) { len = *pLen; @@ -11532,7 +12119,9 @@ eHalStatus csrRoamGetWapiRspIE(tpAniSirGlobal pMac, tANI_U32 sessionId, tANI_U32 { if(len >= pSession->nWapiRspIeLength) { - status = palCopyMemory(pMac->hHdd, pBuf, pSession->pWapiRspIE, pSession->nWapiRspIeLength); + vos_mem_copy(pBuf, pSession->pWapiRspIE, + pSession->nWapiRspIeLength); + status = eHAL_STATUS_SUCCESS; } } } @@ -11549,7 +12138,7 @@ eRoamCmdStatus csrGetRoamCompleteStatus(tpAniSirGlobal pMac, tANI_U32 sessionId) smsLog(pMac, LOGE, FL(" session %d not found "), sessionId); return (retStatus); } - + if(CSR_IS_ROAMING(pSession)) { retStatus = eCSR_ROAM_ROAMING_COMPLETION; @@ -11574,18 +12163,32 @@ eHalStatus csrRoamRemoveConnectedBssFromScanCache(tpAniSirGlobal pMac, do { //Prepare the filter. Only fill in the necessary fields. Not all fields are needed - status = palAllocateMemory(pMac->hHdd, (void **)&pScanFilter, sizeof(tCsrScanResultFilter)); + pScanFilter = vos_mem_malloc(sizeof(tCsrScanResultFilter)); + if ( NULL == pScanFilter ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; if(!HAL_STATUS_SUCCESS(status)) break; - palZeroMemory(pMac->hHdd, pScanFilter, sizeof(tCsrScanResultFilter)); - status = palAllocateMemory(pMac->hHdd, (void **)&pScanFilter->BSSIDs.bssid, sizeof(tCsrBssid)); + vos_mem_set(pScanFilter, sizeof(tCsrScanResultFilter), 0); + pScanFilter->BSSIDs.bssid = vos_mem_malloc(sizeof(tCsrBssid)); + if ( NULL == pScanFilter->BSSIDs.bssid ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; if(!HAL_STATUS_SUCCESS(status)) break; - palCopyMemory(pMac->hHdd, pScanFilter->BSSIDs.bssid, &pConnProfile->bssid, sizeof(tCsrBssid)); + vos_mem_copy(pScanFilter->BSSIDs.bssid, &pConnProfile->bssid, + sizeof(tCsrBssid)); pScanFilter->BSSIDs.numOfBSSIDs = 1; if(!csrIsNULLSSID(pConnProfile->SSID.ssId, pConnProfile->SSID.length)) { - status = palAllocateMemory(pMac->hHdd, (void **)&pScanFilter->SSIDs.SSIDList, sizeof(tCsrSSIDInfo)); - if(!HAL_STATUS_SUCCESS(status)) break; - palCopyMemory(pMac->hHdd, &pScanFilter->SSIDs.SSIDList[0].SSID, &pConnProfile->SSID, sizeof(tSirMacSSid)); + pScanFilter->SSIDs.SSIDList = vos_mem_malloc(sizeof(tCsrSSIDInfo)); + if ( NULL == pScanFilter->SSIDs.SSIDList ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; + if (!HAL_STATUS_SUCCESS(status)) break; + vos_mem_copy(&pScanFilter->SSIDs.SSIDList[0].SSID, + &pConnProfile->SSID, sizeof(tSirMacSSid)); } pScanFilter->authType.numEntries = 1; pScanFilter->authType.authType[0] = pConnProfile->AuthType; @@ -11603,17 +12206,17 @@ eHalStatus csrRoamRemoveConnectedBssFromScanCache(tpAniSirGlobal pMac, pScanFilter->phyMode = eCSR_DOT11_MODE_TAURUS; csrLLLock(&pMac->scan.scanResultList); pEntry = csrLLPeekHead( &pMac->scan.scanResultList, LL_ACCESS_NOLOCK ); - while( pEntry ) + while( pEntry ) { pResult = GET_BASE_ADDR( pEntry, tCsrScanResult, Link ); pIes = (tDot11fBeaconIEs *)( pResult->Result.pvIes ); - fMatch = csrMatchBSS(pMac, &pResult->Result.BssDescriptor, + fMatch = csrMatchBSS(pMac, &pResult->Result.BssDescriptor, pScanFilter, NULL, NULL, NULL, &pIes); //Release the IEs allocated by csrMatchBSS is needed if( !pResult->Result.pvIes ) { //need to free the IEs since it is allocated by csrMatchBSS - palFreeMemory(pMac->hHdd, pIes); + vos_mem_free(pIes); } if(fMatch) { @@ -11632,7 +12235,7 @@ eHalStatus csrRoamRemoveConnectedBssFromScanCache(tpAniSirGlobal pMac, if(pScanFilter) { csrFreeScanFilter(pMac, pScanFilter); - palFreeMemory(pMac->hHdd, pScanFilter); + vos_mem_free(pScanFilter); } } return (status); @@ -11656,7 +12259,7 @@ eHalStatus csrIsBTAMPAllowed( tpAniSirGlobal pMac, tANI_U32 chnId ) } if( csrIsConnStateInfra( pMac, sessionId ) ) { - if( chnId && + if( chnId && ( (tANI_U8)chnId != pMac->roam.roamSession[sessionId].connectedProfile.operationChannel ) ) { smsLog( pMac, LOGW, " BTAMP is not allowed due to channel (%d) diff than infr channel (%d)", @@ -11681,26 +12284,27 @@ static eHalStatus csrRoamStartWds( tpAniSirGlobal pMac, tANI_U32 sessionId, tCsr smsLog(pMac, LOGE, FL(" session %d not found "), sessionId); return eHAL_STATUS_FAILURE; } - - if ( csrIsConnStateIbss( pMac, sessionId ) ) - { + + if ( csrIsConnStateIbss( pMac, sessionId ) ) + { status = csrRoamIssueStopBss( pMac, sessionId, eCSR_ROAM_SUBSTATE_DISCONNECT_CONTINUE_ROAMING ); } - else if ( csrIsConnStateConnectedInfra( pMac, sessionId ) ) + else if ( csrIsConnStateConnectedInfra( pMac, sessionId ) ) { // Disassociate from the connected Infrastructure network... status = csrRoamIssueDisassociate( pMac, sessionId, eCSR_ROAM_SUBSTATE_DISCONNECT_CONTINUE_ROAMING, FALSE ); } else { - //We don't expect Bt-AMP HDD not to disconnect the last connection first at this time. + //We don't expect Bt-AMP HDD not to disconnect the last connection first at this time. //Otherwise we need to add code to handle the - //situation just like IBSS. Though for WDS station, we need to send disassoc to PE first then + //situation just like IBSS. Though for WDS station, we need to send disassoc to PE first then //send stop_bss to PE, before we can continue. VOS_ASSERT( !csrIsConnStateWds( pMac, sessionId ) ); - palZeroMemory(pMac->hHdd, &bssConfig, sizeof(tBssConfigParam)); + vos_mem_set(&bssConfig, sizeof(tBssConfigParam), 0); /* Assume HDD provide bssid in profile */ - palCopyMemory( pMac->hHdd, &pSession->bssParams.bssid, pProfile->BSSIDs.bssid[0], sizeof(tCsrBssid) ); + vos_mem_copy(&pSession->bssParams.bssid, pProfile->BSSIDs.bssid[0], + sizeof(tCsrBssid)); // there is no Bss description before we start an WDS so we need // to adopt all Bss configuration parameters from the Profile. status = csrRoamPrepareBssConfigFromProfile(pMac, pProfile, &bssConfig, pBssDesc); @@ -11708,16 +12312,18 @@ static eHalStatus csrRoamStartWds( tpAniSirGlobal pMac, tANI_U32 sessionId, tCsr { //Save profile for late use csrFreeRoamProfile( pMac, sessionId ); - if (HAL_STATUS_SUCCESS(palAllocateMemory(pMac->hHdd, - (void **)&pSession->pCurRoamProfile, - sizeof(tCsrRoamProfile)))) + pSession->pCurRoamProfile = vos_mem_malloc(sizeof(tCsrRoamProfile)); + if (pSession->pCurRoamProfile != NULL ) { - palZeroMemory(pMac->hHdd, pSession->pCurRoamProfile, sizeof(tCsrRoamProfile)); + vos_mem_set(pSession->pCurRoamProfile, + sizeof(tCsrRoamProfile), 0); csrRoamCopyProfile(pMac, pSession->pCurRoamProfile, pProfile); } //Prepare some more parameters for this WDS csrRoamPrepareBssParams(pMac, sessionId, pProfile, NULL, &bssConfig, NULL); - status = csrRoamSetBssConfigCfg(pMac, sessionId, pProfile, NULL, &bssConfig, NULL); + status = csrRoamSetBssConfigCfg(pMac, sessionId, pProfile, + NULL, &bssConfig, + NULL, eANI_BOOLEAN_FALSE); } } @@ -11753,14 +12359,14 @@ static void csrPrepareJoinReassocReqBuffer( tpAniSirGlobal pMac, } else fTmp = (tAniBool)0; - + // corresponds to --- pMsg->spectrumMgtIndicator = ON; - palCopyMemory( pMac->hHdd, pBuf, (tANI_U8 *)&fTmp, sizeof(tAniBool) ); + vos_mem_copy(pBuf, (tANI_U8 *)&fTmp, sizeof(tAniBool)); pBuf += sizeof(tAniBool); *pBuf++ = MIN_STA_PWR_CAP_DBM; // it is for pMsg->powerCap.minTxPower = 0; found = csrSearchChannelListForTxPower(pMac, pBssDescription, &channelGroup); // This is required for 11k test VoWiFi Ent: Test 2. - // We need the power capabilities for Assoc Req. + // We need the power capabilities for Assoc Req. // This macro is provided by the halPhyCfg.h. We pick our // max and min capability by the halPhy provided macros pwrLimit = csrGetCfgMaxTxPower (pMac, pBssDescription->channelId); @@ -11774,19 +12380,19 @@ static void csrPrepareJoinReassocReqBuffer( tpAniSirGlobal pMac, } size = sizeof(pMac->roam.validChannelList); if(HAL_STATUS_SUCCESS(csrGetCfgValidChannels(pMac, (tANI_U8 *)pMac->roam.validChannelList, &size))) - { - *pBuf++ = (tANI_U8)size; //tSirSupChnl->numChnl - for ( i = 0; i < size; i++) + { + *pBuf++ = (tANI_U8)size; //tSirSupChnl->numChnl + for ( i = 0; i < size; i++) { *pBuf++ = pMac->roam.validChannelList[ i ]; //tSirSupChnl->channelList[ i ] - + } } else { smsLog(pMac, LOGE, FL("can not find any valid channel")); *pBuf++ = 0; //tSirSupChnl->numChnl - } + } //Check whether it is ok to enter UAPSD #ifndef WLAN_MDM_CODE_REDUCTION_OPT if( btcIsReadyForUapsd(pMac) ) @@ -11801,14 +12407,14 @@ static void csrPrepareJoinReassocReqBuffer( tpAniSirGlobal pMac, *pBuf++ = 0; } #endif /* WLAN_MDM_CODE_REDUCTION_OPT*/ - + // move the entire BssDescription into the join request. - palCopyMemory( pMac->hHdd, pBuf, pBssDescription, - pBssDescription->length + sizeof( pBssDescription->length ) ); + vos_mem_copy(pBuf, pBssDescription, + pBssDescription->length + sizeof( pBssDescription->length )); pBuf += pBssDescription->length + sizeof( pBssDescription->length ); // update to new location } -/* +/* * The communication between HDD and LIM is thru mailbox (MB). * Both sides will access the data structure "tSirSmeJoinReq". * The rule is, while the components of "tSirSmeJoinReq" can be accessed in the regular way like tSirSmeJoinReq.assocType, this guideline @@ -11816,7 +12422,7 @@ static void csrPrepareJoinReassocReqBuffer( tpAniSirGlobal pMac, * with the component "tSirBssDescription". And since the size of actual 'tSirBssDescription' varies, the receiving side (which is the routine * limJoinReqSerDes() of limSerDesUtils.cc) should keep in mind not to access the components DIRECTLY after tSirRSNie. */ -eHalStatus csrSendJoinReqMsg( tpAniSirGlobal pMac, tANI_U32 sessionId, tSirBssDescription *pBssDescription, +eHalStatus csrSendJoinReqMsg( tpAniSirGlobal pMac, tANI_U32 sessionId, tSirBssDescription *pBssDescription, tCsrRoamProfile *pProfile, tDot11fBeaconIEs *pIes, tANI_U16 messageType ) { eHalStatus status = eHAL_STATUS_SUCCESS; @@ -11848,19 +12454,23 @@ eHalStatus csrSendJoinReqMsg( tpAniSirGlobal pMac, tANI_U32 sessionId, tSirBssDe pSession->joinFailStatusCode.reasonCode = 0; memcpy (&pSession->joinFailStatusCode.bssId, &pBssDescription->bssId, sizeof(tSirMacAddr)); // There are a number of variable length fields to consider. First, the tSirSmeJoinReq - // includes a single bssDescription. bssDescription includes a single tANI_U32 for the - // IE fields, but the length field in the bssDescription needs to be interpreted to + // includes a single bssDescription. bssDescription includes a single tANI_U32 for the + // IE fields, but the length field in the bssDescription needs to be interpreted to // determine length of the IE fields. // - // So, take the size of the JoinReq, subtract the size of the bssDescription and + // So, take the size of the JoinReq, subtract the size of the bssDescription and // add in the length from the bssDescription (then add the size of the 'length' field // itself because that is NOT included in the length field). - msgLen = sizeof( tSirSmeJoinReq ) - sizeof( *pBssDescription ) + + msgLen = sizeof( tSirSmeJoinReq ) - sizeof( *pBssDescription ) + pBssDescription->length + sizeof( pBssDescription->length ) + sizeof( tCsrWpaIe ) + sizeof( tCsrWpaAuthIe ) + sizeof( tANI_U16 ); // add in the size of the WPA IE that we may build. - status = palAllocateMemory(pMac->hHdd, (void **)&pMsg, msgLen); + pMsg = vos_mem_malloc(msgLen); + if (NULL == pMsg) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; if ( !HAL_STATUS_SUCCESS(status) ) break; - palZeroMemory(pMac->hHdd, pMsg, msgLen); + vos_mem_set(pMsg, msgLen , 0); pMsg->messageType = pal_cpu_to_be16((tANI_U16)messageType); pMsg->length = pal_cpu_to_be16(msgLen); pBuf = &pMsg->sessionId; @@ -11877,7 +12487,7 @@ eHalStatus csrSendJoinReqMsg( tpAniSirGlobal pMac, tANI_U32 sessionId, tSirBssDe // ssId len *pBuf = pIes->SSID.num_ssid; pBuf++; - palCopyMemory( pMac->hHdd, pBuf, pIes->SSID.ssid, pIes->SSID.num_ssid ); + vos_mem_copy(pBuf, pIes->SSID.ssid, pIes->SSID.num_ssid); pBuf += pIes->SSID.num_ssid; } else @@ -11886,12 +12496,13 @@ eHalStatus csrSendJoinReqMsg( tpAniSirGlobal pMac, tANI_U32 sessionId, tSirBssDe pBuf++; } // selfMacAddr - palCopyMemory( pMac->hHdd, (tSirMacAddr *)pBuf, &pSession->selfMacAddr, sizeof(tSirMacAddr) ); + vos_mem_copy((tSirMacAddr *)pBuf, &pSession->selfMacAddr, + sizeof(tSirMacAddr)); pBuf += sizeof(tSirMacAddr); // bsstype dwTmp = pal_cpu_to_be32( csrTranslateBsstypeToMacType( pProfile->BSSType ) ); if (dwTmp == eSIR_BTAMP_STA_MODE) dwTmp = eSIR_BTAMP_AP_MODE; // Override BssType for BTAMP - palCopyMemory( pMac->hHdd, pBuf, &dwTmp, sizeof(tSirBssType) ); + vos_mem_copy(pBuf, &dwTmp, sizeof(tSirBssType)); pBuf += sizeof(tSirBssType); // dot11mode ucDot11Mode = csrTranslateToWNICfgDot11Mode( pMac, pSession->bssParams.uCfgDot11Mode ); @@ -11926,13 +12537,13 @@ eHalStatus csrSendJoinReqMsg( tpAniSirGlobal pMac, tANI_U32 sessionId, tSirBssDe // OperationalRateSet if (OpRateSet.numRates) { *pBuf++ = OpRateSet.numRates; - palCopyMemory(pMac->hHdd, pBuf, OpRateSet.rate, OpRateSet.numRates); + vos_mem_copy(pBuf, OpRateSet.rate, OpRateSet.numRates); pBuf += OpRateSet.numRates; } else *pBuf++ = 0; // ExtendedRateSet if (ExRateSet.numRates) { *pBuf++ = ExRateSet.numRates; - palCopyMemory(pMac->hHdd, pBuf, ExRateSet.rate, ExRateSet.numRates); + vos_mem_copy(pBuf, ExRateSet.rate, ExRateSet.numRates); pBuf += ExRateSet.numRates; } else *pBuf++ = 0; } @@ -11982,17 +12593,21 @@ eHalStatus csrSendJoinReqMsg( tpAniSirGlobal pMac, tANI_U32 sessionId, tSirBssDe { if(pSession->pWapiReqIE && pSession->nWapiReqIeLength) { - palFreeMemory(pMac->hHdd, pSession->pWapiReqIE); + vos_mem_free(pSession->pWapiReqIE); } - status = palAllocateMemory(pMac->hHdd, (void **)&pSession->pWapiReqIE, ieLen); + pSession->pWapiReqIE = vos_mem_malloc(ieLen); + if (NULL == pSession->pWapiReqIE) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; if(!HAL_STATUS_SUCCESS(status)) break; } pSession->nWapiReqIeLength = ieLen; - palCopyMemory(pMac->hHdd, pSession->pWapiReqIE, wpaRsnIE, ieLen); + vos_mem_copy(pSession->pWapiReqIE, wpaRsnIE, ieLen); wTmp = pal_cpu_to_be16( ieLen ); - palCopyMemory( pMac->hHdd, pBuf, &wTmp, sizeof(tANI_U16) ); + vos_mem_copy(pBuf, &wTmp, sizeof(tANI_U16)); pBuf += sizeof(tANI_U16); - palCopyMemory( pMac->hHdd, pBuf, wpaRsnIE, ieLen ); + vos_mem_copy(pBuf, wpaRsnIE, ieLen); pBuf += ieLen; } else//should be WPA/WPA2 otherwise @@ -12003,17 +12618,21 @@ eHalStatus csrSendJoinReqMsg( tpAniSirGlobal pMac, tANI_U32 sessionId, tSirBssDe { if(pSession->pWpaRsnReqIE && pSession->nWpaRsnReqIeLength) { - palFreeMemory(pMac->hHdd, pSession->pWpaRsnReqIE); + vos_mem_free(pSession->pWpaRsnReqIE); } - status = palAllocateMemory(pMac->hHdd, (void **)&pSession->pWpaRsnReqIE, ieLen); + pSession->pWpaRsnReqIE = vos_mem_malloc(ieLen); + if (NULL == pSession->pWpaRsnReqIE) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; if(!HAL_STATUS_SUCCESS(status)) break; } pSession->nWpaRsnReqIeLength = ieLen; - palCopyMemory(pMac->hHdd, pSession->pWpaRsnReqIE, wpaRsnIE, ieLen); + vos_mem_copy(pSession->pWpaRsnReqIE, wpaRsnIE, ieLen); wTmp = pal_cpu_to_be16( ieLen ); - palCopyMemory( pMac->hHdd, pBuf, &wTmp, sizeof(tANI_U16) ); + vos_mem_copy(pBuf, &wTmp, sizeof(tANI_U16)); pBuf += sizeof(tANI_U16); - palCopyMemory( pMac->hHdd, pBuf, wpaRsnIE, ieLen ); + vos_mem_copy(pBuf, wpaRsnIE, ieLen); pBuf += ieLen; } } @@ -12023,14 +12642,14 @@ eHalStatus csrSendJoinReqMsg( tpAniSirGlobal pMac, tANI_U32 sessionId, tSirBssDe pSession->nWpaRsnReqIeLength = 0; if(pSession->pWpaRsnReqIE) { - palFreeMemory(pMac->hHdd, pSession->pWpaRsnReqIE); + vos_mem_free(pSession->pWpaRsnReqIE); pSession->pWpaRsnReqIE = NULL; } #ifdef FEATURE_WLAN_WAPI pSession->nWapiReqIeLength = 0; if(pSession->pWapiReqIE) { - palFreeMemory(pMac->hHdd, pSession->pWapiReqIE); + vos_mem_free(pSession->pWapiReqIE); pSession->pWapiReqIE = NULL; } #endif /* FEATURE_WLAN_WAPI */ @@ -12054,6 +12673,11 @@ eHalStatus csrSendJoinReqMsg( tpAniSirGlobal pMac, tANI_U32 sessionId, tSirBssDe if( csrIsProfileCCX( pProfile ) ) { // Insert the CCKM IE into the join request +#ifdef FEATURE_WLAN_CCX_UPLOAD + ieLen = pSession->suppCckmIeInfo.cckmIeLen; + vos_mem_copy((void *) (wpaRsnIE), + pSession->suppCckmIeInfo.cckmIe, ieLen); +#else ieLen = csrConstructCcxCckmIe( pMac, pSession, pProfile, @@ -12061,6 +12685,7 @@ eHalStatus csrSendJoinReqMsg( tpAniSirGlobal pMac, tANI_U32 sessionId, tSirBssDe pSession->pWpaRsnReqIE, pSession->nWpaRsnReqIeLength, (void *)( wpaRsnIE ) ); +#endif /* FEATURE_WLAN_CCX_UPLOAD */ } else { @@ -12071,9 +12696,9 @@ eHalStatus csrSendJoinReqMsg( tpAniSirGlobal pMac, tANI_U32 sessionId, tSirBssDe { //Copy the CCKM IE over from the temp buffer (wpaRsnIE) wTmp = pal_cpu_to_be16( ieLen ); - palCopyMemory( pMac->hHdd, pBuf, &wTmp, sizeof(tANI_U16) ); + vos_mem_copy(pBuf, &wTmp, sizeof(tANI_U16)); pBuf += sizeof(tANI_U16); - palCopyMemory( pMac->hHdd, pBuf, wpaRsnIE, ieLen ); + vos_mem_copy(pBuf, wpaRsnIE, ieLen); pBuf += ieLen; } else @@ -12094,19 +12719,21 @@ eHalStatus csrSendJoinReqMsg( tpAniSirGlobal pMac, tANI_U32 sessionId, tSirBssDe { if(pSession->pAddIEScan && pSession->nAddIEScanLength) { - palFreeMemory(pMac->hHdd, pSession->pAddIEScan); + vos_mem_free(pSession->pAddIEScan); } - status = palAllocateMemory(pMac->hHdd, - (void **)&pSession->pAddIEScan, ieLen); + pSession->pAddIEScan = vos_mem_malloc(ieLen); + if (NULL == pSession->pAddIEScan) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; if(!HAL_STATUS_SUCCESS(status)) break; } pSession->nAddIEScanLength = ieLen; - palCopyMemory(pMac->hHdd, pSession->pAddIEScan, - pProfile->pAddIEScan, ieLen); + vos_mem_copy(pSession->pAddIEScan, pProfile->pAddIEScan, ieLen); wTmp = pal_cpu_to_be16( ieLen ); - palCopyMemory( pMac->hHdd, pBuf, &wTmp, sizeof(tANI_U16) ); + vos_mem_copy(pBuf, &wTmp, sizeof(tANI_U16)); pBuf += sizeof(tANI_U16); - palCopyMemory( pMac->hHdd, pBuf, pProfile->pAddIEScan, ieLen ); + vos_mem_copy(pBuf, pProfile->pAddIEScan, ieLen); pBuf += ieLen; } else @@ -12114,7 +12741,7 @@ eHalStatus csrSendJoinReqMsg( tpAniSirGlobal pMac, tANI_U32 sessionId, tSirBssDe pSession->nAddIEScanLength = 0; if(pSession->pAddIEScan) { - palFreeMemory(pMac->hHdd, pSession->pAddIEScan); + vos_mem_free(pSession->pAddIEScan); pSession->pAddIEScan = NULL; } *pBuf = 0; @@ -12128,20 +12755,22 @@ eHalStatus csrSendJoinReqMsg( tpAniSirGlobal pMac, tANI_U32 sessionId, tSirBssDe if(ieLen > pSession->nAddIEAssocLength) { if(pSession->pAddIEAssoc && pSession->nAddIEAssocLength) - { - palFreeMemory(pMac->hHdd, pSession->pAddIEAssoc); - } - status = palAllocateMemory(pMac->hHdd, - (void **)&pSession->pAddIEAssoc, ieLen); + { + vos_mem_free(pSession->pAddIEAssoc); + } + pSession->pAddIEAssoc = vos_mem_malloc(ieLen); + if (NULL == pSession->pAddIEAssoc) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; if(!HAL_STATUS_SUCCESS(status)) break; - } + } pSession->nAddIEAssocLength = ieLen; - palCopyMemory(pMac->hHdd, pSession->pAddIEAssoc, - pProfile->pAddIEAssoc, ieLen); + vos_mem_copy(pSession->pAddIEAssoc, pProfile->pAddIEAssoc, ieLen); wTmp = pal_cpu_to_be16( ieLen ); - palCopyMemory( pMac->hHdd, pBuf, &wTmp, sizeof(tANI_U16) ); + vos_mem_copy(pBuf, &wTmp, sizeof(tANI_U16)); pBuf += sizeof(tANI_U16); - palCopyMemory( pMac->hHdd, pBuf, pProfile->pAddIEAssoc, ieLen ); + vos_mem_copy(pBuf, pProfile->pAddIEAssoc, ieLen); pBuf += ieLen; } else @@ -12149,7 +12778,7 @@ eHalStatus csrSendJoinReqMsg( tpAniSirGlobal pMac, tANI_U32 sessionId, tSirBssDe pSession->nAddIEAssocLength = 0; if(pSession->pAddIEAssoc) { - palFreeMemory(pMac->hHdd, pSession->pAddIEAssoc); + vos_mem_free(pSession->pAddIEAssoc); pSession->pAddIEAssoc = NULL; } *pBuf = 0; @@ -12178,11 +12807,11 @@ eHalStatus csrSendJoinReqMsg( tpAniSirGlobal pMac, tANI_U32 sessionId, tSirBssDe } dwTmp = pal_cpu_to_be32( csrTranslateEncryptTypeToEdType( pProfile->negotiatedUCEncryptionType) ); - palCopyMemory( pMac->hHdd, pBuf, &dwTmp, sizeof(tANI_U32) ); + vos_mem_copy(pBuf, &dwTmp, sizeof(tANI_U32)); pBuf += sizeof(tANI_U32); dwTmp = pal_cpu_to_be32( csrTranslateEncryptTypeToEdType( pProfile->negotiatedMCEncryptionType) ); - palCopyMemory( pMac->hHdd, pBuf, &dwTmp, sizeof(tANI_U32) ); + vos_mem_copy(pBuf, &dwTmp, sizeof(tANI_U32)); pBuf += sizeof(tANI_U32); #ifdef WLAN_FEATURE_11W //MgmtEncryption @@ -12194,7 +12823,7 @@ eHalStatus csrSendJoinReqMsg( tpAniSirGlobal pMac, tANI_U32 sessionId, tSirBssDe { dwTmp = pal_cpu_to_be32(eSIR_ED_NONE); } - palCopyMemory(pMac->hHdd, pBuf, &dwTmp, sizeof(tANI_U32)); + vos_mem_copy(pBuf, &dwTmp, sizeof(tANI_U32)); pBuf += sizeof(tANI_U32); #endif #ifdef WLAN_FEATURE_VOWIFI_11R @@ -12208,18 +12837,33 @@ eHalStatus csrSendJoinReqMsg( tpAniSirGlobal pMac, tANI_U32 sessionId, tSirBssDe { // is11Rconnection; dwTmp = pal_cpu_to_be32(TRUE); - palCopyMemory( pMac->hHdd, pBuf, &dwTmp, sizeof(tAniBool) ); + vos_mem_copy(pBuf, &dwTmp, sizeof(tAniBool)) ; pBuf += sizeof(tAniBool); } else { // is11Rconnection; dwTmp = pal_cpu_to_be32(FALSE); - palCopyMemory( pMac->hHdd, pBuf, &dwTmp, sizeof(tAniBool) ); + vos_mem_copy(pBuf, &dwTmp, sizeof(tAniBool)); pBuf += sizeof(tAniBool); } #endif #ifdef FEATURE_WLAN_CCX + + // isCCXFeatureIniEnabled + if (TRUE == pMac->roam.configParam.isCcxIniFeatureEnabled) + { + dwTmp = pal_cpu_to_be32(TRUE); + vos_mem_copy(pBuf, &dwTmp, sizeof(tAniBool)); + pBuf += sizeof(tAniBool); + } + else + { + dwTmp = pal_cpu_to_be32(FALSE); + vos_mem_copy(pBuf, &dwTmp, sizeof(tAniBool)); + pBuf += sizeof(tAniBool); + } + /* A profile can not be both CCX and 11R. But an 802.11R AP * may be advertising support for CCX as well. So if we are * associating Open or explicitly CCX then we will get CCX. @@ -12240,14 +12884,14 @@ eHalStatus csrSendJoinReqMsg( tpAniSirGlobal pMac, tANI_U32 sessionId, tSirBssDe { // isCCXconnection; dwTmp = pal_cpu_to_be32(TRUE); - palCopyMemory( pMac->hHdd, pBuf, &dwTmp, sizeof(tAniBool) ); + vos_mem_copy(pBuf, &dwTmp, sizeof(tAniBool)); pBuf += sizeof(tAniBool); } else { //isCCXconnection; dwTmp = pal_cpu_to_be32(FALSE); - palCopyMemory( pMac->hHdd, pBuf, &dwTmp, sizeof(tAniBool) ); + vos_mem_copy(pBuf, &dwTmp, sizeof(tAniBool)); pBuf += sizeof(tAniBool); } @@ -12256,8 +12900,8 @@ eHalStatus csrSendJoinReqMsg( tpAniSirGlobal pMac, tANI_U32 sessionId, tSirBssDe tCCXTspecInfo ccxTspec; // CCX-Tspec IEs in the ASSOC request is presently not supported // so nullify the TSPEC parameters - palZeroMemory(pMac->hHdd, &ccxTspec, sizeof(tCCXTspecInfo)); - palCopyMemory( pMac->hHdd, pBuf, &ccxTspec, sizeof(tCCXTspecInfo)); + vos_mem_set(&ccxTspec, sizeof(tCCXTspecInfo), 0); + vos_mem_copy(pBuf, &ccxTspec, sizeof(tCCXTspecInfo)); pBuf += sizeof(tCCXTspecInfo); } else if (eWNI_SME_REASSOC_REQ == messageType) @@ -12276,13 +12920,14 @@ eHalStatus csrSendJoinReqMsg( tpAniSirGlobal pMac, tANI_U32 sessionId, tSirBssDe { tCCXTspecInfo ccxTspec; // CCX Tspec information - palZeroMemory(pMac->hHdd, &ccxTspec, sizeof(tCCXTspecInfo)); + vos_mem_set(&ccxTspec, sizeof(tCCXTspecInfo), 0); ccxTspec.numTspecs = sme_QosCCxRetrieveTspecInfo(pMac, sessionId, (tTspecInfo *) &ccxTspec.tspec[0]); *pBuf = ccxTspec.numTspecs; pBuf += sizeof(tANI_U8); // Copy the TSPEC information only if present if (ccxTspec.numTspecs) { - palCopyMemory(pMac->hHdd, pBuf, (void*)&ccxTspec.tspec[0], (ccxTspec.numTspecs*sizeof(tTspecInfo))); + vos_mem_copy(pBuf, (void*)&ccxTspec.tspec[0], + (ccxTspec.numTspecs*sizeof(tTspecInfo))); } pBuf += sizeof(ccxTspec.tspec); } @@ -12291,8 +12936,8 @@ eHalStatus csrSendJoinReqMsg( tpAniSirGlobal pMac, tANI_U32 sessionId, tSirBssDe tCCXTspecInfo ccxTspec; // CCX-Tspec IEs in the ASSOC request is presently not supported // so nullify the TSPEC parameters - palZeroMemory(pMac->hHdd, &ccxTspec, sizeof(tCCXTspecInfo)); - palCopyMemory( pMac->hHdd, pBuf, &ccxTspec, sizeof(tCCXTspecInfo)); + vos_mem_set(&ccxTspec, sizeof(tCCXTspecInfo), 0); + vos_mem_copy(pBuf, &ccxTspec, sizeof(tCCXTspecInfo)); pBuf += sizeof(tCCXTspecInfo); } } @@ -12306,13 +12951,13 @@ eHalStatus csrSendJoinReqMsg( tpAniSirGlobal pMac, tANI_U32 sessionId, tSirBssDe ) { dwTmp = pal_cpu_to_be32(TRUE); - palCopyMemory( pMac->hHdd, pBuf, &dwTmp, sizeof(tAniBool) ); + vos_mem_copy(pBuf, &dwTmp, sizeof(tAniBool)); pBuf += sizeof(tAniBool); } else { dwTmp = pal_cpu_to_be32(FALSE); - palCopyMemory( pMac->hHdd, pBuf, &dwTmp, sizeof(tAniBool) ); + vos_mem_copy(pBuf, &dwTmp, sizeof(tAniBool)); pBuf += sizeof(tAniBool); } #endif @@ -12321,13 +12966,13 @@ eHalStatus csrSendJoinReqMsg( tpAniSirGlobal pMac, tANI_U32 sessionId, tSirBssDe { //legacy fast roaming enabled dwTmp = pal_cpu_to_be32(TRUE); - palCopyMemory( pMac->hHdd, pBuf, &dwTmp, sizeof(tAniBool) ); + vos_mem_copy(pBuf, &dwTmp, sizeof(tAniBool)); pBuf += sizeof(tAniBool); } else { dwTmp = pal_cpu_to_be32(FALSE); - palCopyMemory( pMac->hHdd, pBuf, &dwTmp, sizeof(tAniBool) ); + vos_mem_copy(pBuf, &dwTmp, sizeof(tAniBool)); pBuf += sizeof(tAniBool); } #endif @@ -12345,9 +12990,9 @@ eHalStatus csrSendJoinReqMsg( tpAniSirGlobal pMac, tANI_U32 sessionId, tSirBssDe } //HT Config - palCopyMemory(pMac->hHdd, pBuf, &pSession->htConfig, - sizeof(tSirHTConfig)); - pBuf += sizeof(tSirHTConfig); + vos_mem_copy(pBuf, &pSession->htConfig, + sizeof(tSirHTConfig)); + pBuf += sizeof(tSirHTConfig); #ifdef WLAN_FEATURE_11AC // txBFIniFeatureEnabled *pBuf = (tANI_U8)pMac->roam.configParam.txBFEnable; @@ -12382,9 +13027,13 @@ eHalStatus csrSendJoinReqMsg( tpAniSirGlobal pMac, tANI_U32 sessionId, tSirBssDe *pBuf = (tANI_U8)pMac->roam.configParam.htSmps; pBuf++; - //BssDesc + *pBuf = (tANI_U8)pMac->roam.configParam.isAmsduSupportInAMPDU; + pBuf++; + + //BssDesc csrPrepareJoinReassocReqBuffer( pMac, pBssDescription, pBuf, (tANI_U8)pProfile->uapsd_mask); + status = palSendMBMessage(pMac->hHdd, pMsg ); if(!HAL_STATUS_SUCCESS(status)) { @@ -12420,9 +13069,13 @@ eHalStatus csrSendMBDisassocReqMsg( tpAniSirGlobal pMac, tANI_U32 sessionId, tSi if (!CSR_IS_SESSION_VALID( pMac, sessionId )) return eHAL_STATUS_FAILURE; do { - status = palAllocateMemory(pMac->hHdd, (void **)&pMsg, sizeof( tSirSmeDisassocReq )); + pMsg = vos_mem_malloc(sizeof(tSirSmeDisassocReq)); + if (NULL == pMsg) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; if ( !HAL_STATUS_SUCCESS(status) ) break; - palZeroMemory(pMac->hHdd, pMsg, sizeof( tSirSmeDisassocReq )); + vos_mem_set(pMsg, sizeof( tSirSmeDisassocReq ), 0); pMsg->messageType = pal_cpu_to_be16((tANI_U16)eWNI_SME_DISASSOC_REQ); pMsg->length = pal_cpu_to_be16((tANI_U16)sizeof( tSirSmeDisassocReq )); pBuf = &pMsg->sessionId; @@ -12432,47 +13085,54 @@ eHalStatus csrSendMBDisassocReqMsg( tpAniSirGlobal pMac, tANI_U32 sessionId, tSi *pBuf = 0; *( pBuf + 1 ) = 0; pBuf += sizeof(tANI_U16); - + if ( (pSession->pCurRoamProfile != NULL) && ((CSR_IS_INFRA_AP(pSession->pCurRoamProfile)) || (CSR_IS_WDS_AP(pSession->pCurRoamProfile))) ) { // Set the bssid address before sending the message to LIM - status = palCopyMemory( pMac->hHdd, (tSirMacAddr *)pBuf, pSession->selfMacAddr, sizeof( tSirMacAddr ) ); + vos_mem_copy((tSirMacAddr *)pBuf, pSession->selfMacAddr, + sizeof( tSirMacAddr )); + status = eHAL_STATUS_SUCCESS; pBuf = pBuf + sizeof ( tSirMacAddr ); // Set the peer MAC address before sending the message to LIM - status = palCopyMemory( pMac->hHdd, (tSirMacAddr *)pBuf, bssId, sizeof( tSirMacAddr ) ); //perMacAddr is passed as bssId for softAP + vos_mem_copy((tSirMacAddr *)pBuf, bssId, sizeof( tSirMacAddr )); + //perMacAddr is passed as bssId for softAP + status = eHAL_STATUS_SUCCESS; pBuf = pBuf + sizeof ( tSirMacAddr ); } else { // Set the peer MAC address before sending the message to LIM - status = palCopyMemory( pMac->hHdd, (tSirMacAddr *)pBuf, bssId, sizeof( tSirMacAddr ) ); + vos_mem_copy((tSirMacAddr *)pBuf, bssId, sizeof( tSirMacAddr )); + status = eHAL_STATUS_SUCCESS; pBuf = pBuf + sizeof ( tSirMacAddr ); - status = palCopyMemory( pMac->hHdd, (tSirMacAddr *)pBuf, bssId, sizeof( pMsg->bssId ) ); + vos_mem_copy((tSirMacAddr *)pBuf, bssId, sizeof( pMsg->bssId )); + status = eHAL_STATUS_SUCCESS; pBuf = pBuf + sizeof ( tSirMacAddr ); } if(!HAL_STATUS_SUCCESS(status)) { - palFreeMemory(pMac->hHdd, pMsg); + vos_mem_free(pMsg); break; } // reasonCode wTmp = pal_cpu_to_be16(reasonCode); - status = palCopyMemory( pMac->hHdd, pBuf, &wTmp, sizeof(tANI_U16) ); + vos_mem_copy(pBuf, &wTmp, sizeof(tANI_U16)); + status = eHAL_STATUS_SUCCESS; if(!HAL_STATUS_SUCCESS(status)) { - palFreeMemory(pMac->hHdd, pMsg); + vos_mem_free(pMsg); break; } pBuf += sizeof(tANI_U16); - /* The state will be DISASSOC_HANDOFF only when we are doing handoff. + /* The state will be DISASSOC_HANDOFF only when we are doing handoff. Here we should not send the disassoc over the air to the AP */ if ( CSR_IS_ROAM_SUBSTATE_DISASSOC_HO(pMac, sessionId) #ifdef WLAN_FEATURE_VOWIFI_11R && csrRoamIs11rAssoc(pMac) #endif - ) + ) { *pBuf = CSR_DONT_SEND_DISASSOC_OVER_THE_AIR; /* Set DoNotSendOverTheAir flag to 1 only for handoff case */ } @@ -12488,9 +13148,13 @@ eHalStatus csrSendMBTkipCounterMeasuresReqMsg( tpAniSirGlobal pMac, tANI_U32 ses tANI_U8 *pBuf; do { - status = palAllocateMemory(pMac->hHdd, (void **)&pMsg, sizeof( tSirSmeTkipCntrMeasReq )); + pMsg = vos_mem_malloc(sizeof( tSirSmeTkipCntrMeasReq )); + if ( NULL == pMsg ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; if ( !HAL_STATUS_SUCCESS(status) ) break; - palZeroMemory(pMac->hHdd, pMsg, sizeof( tSirSmeTkipCntrMeasReq )); + vos_mem_set(pMsg, sizeof( tSirSmeTkipCntrMeasReq ), 0); pMsg->messageType = pal_cpu_to_be16((tANI_U16)eWNI_SME_TKIP_CNTR_MEAS_REQ); pMsg->length = pal_cpu_to_be16((tANI_U16)sizeof( tSirSmeTkipCntrMeasReq )); pBuf = &pMsg->sessionId; @@ -12501,13 +13165,14 @@ eHalStatus csrSendMBTkipCounterMeasuresReqMsg( tpAniSirGlobal pMac, tANI_U32 ses *( pBuf + 1 ) = 0; pBuf += sizeof(tANI_U16); // bssid - status = palCopyMemory( pMac->hHdd, pMsg->bssId, bssId, sizeof( tSirMacAddr ) ); + vos_mem_copy(pMsg->bssId, bssId, sizeof( tSirMacAddr )); + status = eHAL_STATUS_SUCCESS; pBuf = pBuf + sizeof ( tSirMacAddr ); // bEnable *pBuf = (tANI_BOOLEAN)bEnable; if(!HAL_STATUS_SUCCESS(status)) { - palFreeMemory(pMac->hHdd, pMsg); + vos_mem_free(pMsg); break; } status = palSendMBMessage( pMac->hHdd, pMsg ); @@ -12526,30 +13191,34 @@ csrSendMBGetAssociatedStasReqMsg( tpAniSirGlobal pMac, tANI_U32 sessionId, tANI_U32 dwTmp; do { - status = palAllocateMemory( pMac->hHdd, (void **)&pMsg, sizeof( tSirSmeGetAssocSTAsReq ) ); + pMsg = vos_mem_malloc(sizeof( tSirSmeGetAssocSTAsReq )); + if ( NULL == pMsg ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; if (!HAL_STATUS_SUCCESS(status)) break; - palZeroMemory( pMac->hHdd, pMsg, sizeof( tSirSmeGetAssocSTAsReq ) ); + vos_mem_set(pMsg, sizeof( tSirSmeGetAssocSTAsReq ), 0); pMsg->messageType = pal_cpu_to_be16((tANI_U16)eWNI_SME_GET_ASSOC_STAS_REQ); pBuf = (tANI_U8 *)&pMsg->bssId; wTmpBuf = pBuf; // bssId - palCopyMemory( pMac->hHdd, (tSirMacAddr *)pBuf, bssId, sizeof(tSirMacAddr) ); + vos_mem_copy((tSirMacAddr *)pBuf, bssId, sizeof(tSirMacAddr)); pBuf += sizeof(tSirMacAddr); - // modId + // modId dwTmp = pal_cpu_to_be16((tANI_U16)modId); - palCopyMemory( pMac->hHdd, pBuf, (tANI_U8 *)&dwTmp, sizeof(tANI_U16)); + vos_mem_copy(pBuf, (tANI_U8 *)&dwTmp, sizeof(tANI_U16)); pBuf += sizeof(tANI_U16); // pUsrContext dwTmp = pal_cpu_to_be32((tANI_U32)pUsrContext); - palCopyMemory( pMac->hHdd, pBuf, (tANI_U8 *)&dwTmp, sizeof(tANI_U32)); + vos_mem_copy(pBuf, (tANI_U8 *)&dwTmp, sizeof(tANI_U32)); pBuf += sizeof(tANI_U32); // pfnSapEventCallback dwTmp = pal_cpu_to_be32((tANI_U32)pfnSapEventCallback); - palCopyMemory( pMac->hHdd, pBuf, (tANI_U8 *)&dwTmp, sizeof(tANI_U32)); + vos_mem_copy(pBuf, (tANI_U8 *)&dwTmp, sizeof(tANI_U32)); pBuf += sizeof(tANI_U32); // pAssocStasBuf dwTmp = pal_cpu_to_be32((tANI_U32)pAssocStasBuf); - palCopyMemory( pMac->hHdd, pBuf, (tANI_U8 *)&dwTmp, sizeof(tANI_U32)); + vos_mem_copy(pBuf, (tANI_U8 *)&dwTmp, sizeof(tANI_U32)); pBuf += sizeof(tANI_U32); pMsg->length = pal_cpu_to_be16((tANI_U16)(sizeof(tANI_U32 ) + (pBuf - wTmpBuf)));//msg_header + msg status = palSendMBMessage( pMac->hHdd, pMsg ); @@ -12566,25 +13235,31 @@ csrSendMBGetWPSPBCSessions( tpAniSirGlobal pMac, tANI_U32 sessionId, tANI_U32 dwTmp; do { - status = palAllocateMemory( pMac->hHdd, (void **)&pMsg, sizeof(tSirSmeGetWPSPBCSessionsReq) ); + pMsg = vos_mem_malloc(sizeof(tSirSmeGetWPSPBCSessionsReq)); + if ( NULL == pMsg ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; if (!HAL_STATUS_SUCCESS(status)) break; - palZeroMemory( pMac->hHdd, pMsg, sizeof( tSirSmeGetWPSPBCSessionsReq ) ); + vos_mem_set(pMsg, sizeof( tSirSmeGetWPSPBCSessionsReq ), 0); pMsg->messageType = pal_cpu_to_be16((tANI_U16)eWNI_SME_GET_WPSPBC_SESSION_REQ); pBuf = (tANI_U8 *)&pMsg->pUsrContext; + VOS_ASSERT(pBuf); + wTmpBuf = pBuf; // pUsrContext dwTmp = pal_cpu_to_be32((tANI_U32)pUsrContext); - palCopyMemory( pMac->hHdd, pBuf, (tANI_U8 *)&dwTmp, sizeof(tANI_U32)); + vos_mem_copy(pBuf, (tANI_U8 *)&dwTmp, sizeof(tANI_U32)); pBuf += sizeof(tANI_U32); // pSapEventCallback dwTmp = pal_cpu_to_be32((tANI_U32)pfnSapEventCallback); - palCopyMemory( pMac->hHdd, pBuf, (tANI_U8 *)&dwTmp, sizeof(tANI_U32)); + vos_mem_copy(pBuf, (tANI_U8 *)&dwTmp, sizeof(tANI_U32)); pBuf += sizeof(tANI_U32); // bssId - palCopyMemory( pMac->hHdd, (tSirMacAddr *)pBuf, bssId, sizeof(tSirMacAddr) ); + vos_mem_copy((tSirMacAddr *)pBuf, bssId, sizeof(tSirMacAddr)); pBuf += sizeof(tSirMacAddr); // MAC Address of STA in WPS session - palCopyMemory( pMac->hHdd, (tSirMacAddr *)pBuf, pRemoveMac.bytes, sizeof(v_MACADDR_t)); + vos_mem_copy((tSirMacAddr *)pBuf, pRemoveMac.bytes, sizeof(v_MACADDR_t)); pBuf += sizeof(v_MACADDR_t); pMsg->length = pal_cpu_to_be16((tANI_U16)(sizeof(tANI_U32 ) + (pBuf - wTmpBuf)));//msg_header + msg status = palSendMBMessage( pMac->hHdd, pMsg ); @@ -12613,22 +13288,27 @@ csrSendChngMCCBeaconInterval(tpAniSirGlobal pMac, tANI_U32 sessionId) pMac->roam.roamSession[sessionId].bssParams.updatebeaconInterval = eANI_BOOLEAN_FALSE; /* Create the message and send to lim */ - len = sizeof(tSirChangeBIParams); - status = palAllocateMemory( pMac->hHdd, (void **)&pMsg, len ); + len = sizeof(tSirChangeBIParams); + pMsg = vos_mem_malloc(len); + if ( NULL == pMsg ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; if(HAL_STATUS_SUCCESS(status)) { - palZeroMemory(pMac->hHdd, pMsg, sizeof(tSirChangeBIParams) ); + vos_mem_set(pMsg, sizeof(tSirChangeBIParams), 0); pMsg->messageType = eWNI_SME_CHNG_MCC_BEACON_INTERVAL; pMsg->length = len; // bssId - palCopyMemory( pMac->hHdd, (tSirMacAddr *)pMsg->bssId, &pSession->selfMacAddr, sizeof(tSirMacAddr) ); + vos_mem_copy((tSirMacAddr *)pMsg->bssId, &pSession->selfMacAddr, + sizeof(tSirMacAddr)); smsLog( pMac, LOG1, FL("CSR Attempting to change BI for Bssid= %02x-%02x-%02x-%02x-%02x-%02x "), pMsg->bssId[ 0 ], pMsg->bssId[ 1 ], pMsg->bssId[ 2 ], pMsg->bssId[ 3 ], pMsg->bssId[ 4 ], pMsg->bssId[ 5 ] ); pMsg->sessionId = sessionId; smsLog(pMac, LOG1, FL(" session %d BeaconInterval %d"), sessionId, pMac->roam.roamSession[sessionId].bssParams.beaconInterval); - pMsg->beaconInterval = pMac->roam.roamSession[sessionId].bssParams.beaconInterval; + pMsg->beaconInterval = pMac->roam.roamSession[sessionId].bssParams.beaconInterval; status = palSendMBMessage(pMac->hHdd, pMsg); } return status; @@ -12644,50 +13324,59 @@ eHalStatus csrSendMBDeauthReqMsg( tpAniSirGlobal pMac, tANI_U32 sessionId, tSirM if (!CSR_IS_SESSION_VALID( pMac, sessionId )) return eHAL_STATUS_FAILURE; do { - status = palAllocateMemory(pMac->hHdd, (void **)&pMsg, sizeof( tSirSmeDeauthReq )); + pMsg = vos_mem_malloc(sizeof( tSirSmeDeauthReq )); + if ( NULL == pMsg ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; if ( !HAL_STATUS_SUCCESS(status) ) break; - palZeroMemory(pMac->hHdd, pMsg, sizeof( tSirSmeDeauthReq )); + vos_mem_set(pMsg, sizeof( tSirSmeDeauthReq ), 0); pMsg->messageType = pal_cpu_to_be16((tANI_U16)eWNI_SME_DEAUTH_REQ); pMsg->length = pal_cpu_to_be16((tANI_U16)sizeof( tSirSmeDeauthReq )); //sessionId pBuf = &pMsg->sessionId; *pBuf++ = (tANI_U8)sessionId; - + //tansactionId *pBuf = 0; *(pBuf + 1 ) = 0; pBuf += sizeof(tANI_U16); if ((pSession->pCurRoamProfile != NULL) && ( - (CSR_IS_INFRA_AP(pSession->pCurRoamProfile)) || - (CSR_IS_WDS_AP(pSession->pCurRoamProfile)))){ + (CSR_IS_INFRA_AP(pSession->pCurRoamProfile)) || + (CSR_IS_WDS_AP(pSession->pCurRoamProfile)))){ // Set the BSSID before sending the message to LIM - status = palCopyMemory( pMac->hHdd, (tSirMacAddr *)pBuf, pSession->selfMacAddr, sizeof( pMsg->peerMacAddr ) ); + vos_mem_copy( (tSirMacAddr *)pBuf, pSession->selfMacAddr, + sizeof( pMsg->peerMacAddr ) ); + status = eHAL_STATUS_SUCCESS; pBuf = pBuf + sizeof(tSirMacAddr); } else { // Set the BSSID before sending the message to LIM - status = palCopyMemory( pMac->hHdd, (tSirMacAddr *)pBuf, bssId, sizeof( pMsg->peerMacAddr ) ); + vos_mem_copy( (tSirMacAddr *)pBuf, bssId, sizeof( pMsg->peerMacAddr ) ); + status = eHAL_STATUS_SUCCESS; pBuf = pBuf + sizeof(tSirMacAddr); } if(!HAL_STATUS_SUCCESS(status)) { - palFreeMemory(pMac->hHdd, pMsg); + vos_mem_free(pMsg); break; - } + } // Set the peer MAC address before sending the message to LIM - status = palCopyMemory( pMac->hHdd, (tSirMacAddr *) pBuf, bssId, sizeof( pMsg->peerMacAddr ) ); + vos_mem_copy( (tSirMacAddr *) pBuf, bssId, sizeof( pMsg->peerMacAddr ) ); + status = eHAL_STATUS_SUCCESS; pBuf = pBuf + sizeof(tSirMacAddr); if(!HAL_STATUS_SUCCESS(status)) { - palFreeMemory(pMac->hHdd, pMsg); + vos_mem_free(pMsg); break; - } + } wTmp = pal_cpu_to_be16(reasonCode); - status = palCopyMemory( pMac->hHdd, pBuf, &wTmp,sizeof( tANI_U16 ) ); + vos_mem_copy( pBuf, &wTmp,sizeof( tANI_U16 ) ); + status = eHAL_STATUS_SUCCESS; if(!HAL_STATUS_SUCCESS(status)) { - palFreeMemory(pMac->hHdd, pMsg); + vos_mem_free(pMsg); break; } status = palSendMBMessage( pMac->hHdd, pMsg ); @@ -12700,23 +13389,30 @@ eHalStatus csrSendMBDisassocCnfMsg( tpAniSirGlobal pMac, tpSirSmeDisassocInd pDi eHalStatus status = eHAL_STATUS_SUCCESS; tSirSmeDisassocCnf *pMsg; do { - status = palAllocateMemory(pMac->hHdd, (void **)&pMsg, sizeof( tSirSmeDisassocCnf )); + pMsg = vos_mem_malloc(sizeof( tSirSmeDisassocCnf )); + if ( NULL == pMsg ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; if ( !HAL_STATUS_SUCCESS(status) ) break; - palZeroMemory(pMac->hHdd, pMsg, sizeof( tSirSmeDisassocCnf )); + vos_mem_set(pMsg, sizeof( tSirSmeDisassocCnf), 0); pMsg->messageType = pal_cpu_to_be16((tANI_U16)eWNI_SME_DISASSOC_CNF); pMsg->statusCode = (tSirResultCodes)pal_cpu_to_be32(eSIR_SME_SUCCESS); pMsg->length = pal_cpu_to_be16((tANI_U16)sizeof( tSirSmeDisassocCnf )); - status = palCopyMemory(pMac->hHdd, pMsg->peerMacAddr, pDisassocInd->peerMacAddr, sizeof(pMsg->peerMacAddr)); + vos_mem_copy(pMsg->peerMacAddr, pDisassocInd->peerMacAddr, + sizeof(pMsg->peerMacAddr)); + status = eHAL_STATUS_SUCCESS; if(!HAL_STATUS_SUCCESS(status)) { - palFreeMemory(pMac->hHdd, pMsg); + vos_mem_free(pMsg); break; } -//To test reconn - status = palCopyMemory(pMac->hHdd, pMsg->bssId, pDisassocInd->bssId, sizeof(pMsg->peerMacAddr)); +//To test reconn + vos_mem_copy(pMsg->bssId, pDisassocInd->bssId, sizeof(pMsg->peerMacAddr)); + status = eHAL_STATUS_SUCCESS; if(!HAL_STATUS_SUCCESS(status)) { - palFreeMemory(pMac->hHdd, pMsg); + vos_mem_free(pMsg); break; } //To test reconn ends @@ -12730,22 +13426,29 @@ eHalStatus csrSendMBDeauthCnfMsg( tpAniSirGlobal pMac, tpSirSmeDeauthInd pDeauth eHalStatus status = eHAL_STATUS_SUCCESS; tSirSmeDeauthCnf *pMsg; do { - status = palAllocateMemory(pMac->hHdd, (void **)&pMsg, sizeof( tSirSmeDeauthCnf )); + pMsg = vos_mem_malloc(sizeof( tSirSmeDeauthCnf )); + if ( NULL == pMsg ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; if ( !HAL_STATUS_SUCCESS(status) ) break; - palZeroMemory(pMac->hHdd, pMsg, sizeof( tSirSmeDeauthCnf )); + vos_mem_set(pMsg, sizeof( tSirSmeDeauthCnf ), 0); pMsg->messageType = pal_cpu_to_be16((tANI_U16)eWNI_SME_DEAUTH_CNF); pMsg->statusCode = (tSirResultCodes)pal_cpu_to_be32(eSIR_SME_SUCCESS); pMsg->length = pal_cpu_to_be16((tANI_U16)sizeof( tSirSmeDeauthCnf )); - status = palCopyMemory(pMac->hHdd, pMsg->bssId, pDeauthInd->bssId, sizeof(pMsg->bssId)); + vos_mem_copy(pMsg->bssId, pDeauthInd->bssId, sizeof(pMsg->bssId)); + status = eHAL_STATUS_SUCCESS; if(!HAL_STATUS_SUCCESS(status)) { - palFreeMemory(pMac->hHdd, pMsg); + vos_mem_free(pMsg); break; } - status = palCopyMemory(pMac->hHdd, pMsg->peerMacAddr, pDeauthInd->peerMacAddr, sizeof(pMsg->peerMacAddr)); + vos_mem_copy(pMsg->peerMacAddr, pDeauthInd->peerMacAddr, + sizeof(pMsg->peerMacAddr)); + status = eHAL_STATUS_SUCCESS; if(!HAL_STATUS_SUCCESS(status)) { - palFreeMemory(pMac->hHdd, pMsg); + vos_mem_free(pMsg); break; } status = palSendMBMessage( pMac->hHdd, pMsg ); @@ -12760,9 +13463,13 @@ eHalStatus csrSendAssocCnfMsg( tpAniSirGlobal pMac, tpSirSmeAssocInd pAssocInd, tSirResultCodes statusCode; tANI_U16 wTmp; do { - status = palAllocateMemory(pMac->hHdd, (void **)&pMsg, sizeof( tSirSmeAssocCnf )); + pMsg = vos_mem_malloc(sizeof( tSirSmeAssocCnf )); + if ( NULL == pMsg ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; if ( !HAL_STATUS_SUCCESS(status) ) break; - palZeroMemory(pMac->hHdd, pMsg, sizeof( tSirSmeAssocCnf )); + vos_mem_set(pMsg, sizeof( tSirSmeAssocCnf ), 0); pMsg->messageType = pal_cpu_to_be16((tANI_U16)eWNI_SME_ASSOC_CNF); pMsg->length = pal_cpu_to_be16((tANI_U16)sizeof( tSirSmeAssocCnf )); pBuf = (tANI_U8 *)&pMsg->statusCode; @@ -12770,20 +13477,24 @@ eHalStatus csrSendAssocCnfMsg( tpAniSirGlobal pMac, tpSirSmeAssocInd pAssocInd, statusCode = (tSirResultCodes)pal_cpu_to_be32(eSIR_SME_SUCCESS); else statusCode = (tSirResultCodes)pal_cpu_to_be32(eSIR_SME_ASSOC_REFUSED); - palCopyMemory( pMac->hHdd, pBuf, &statusCode, sizeof(tSirResultCodes) ); + vos_mem_copy(pBuf, &statusCode, sizeof(tSirResultCodes)); pBuf += sizeof(tSirResultCodes); // bssId - status = palCopyMemory(pMac->hHdd, (tSirMacAddr *)pBuf, pAssocInd->bssId, sizeof(tSirMacAddr)); + vos_mem_copy((tSirMacAddr *)pBuf, pAssocInd->bssId, sizeof(tSirMacAddr)); + status = eHAL_STATUS_SUCCESS; pBuf += sizeof (tSirMacAddr); // peerMacAddr - status = palCopyMemory(pMac->hHdd, (tSirMacAddr *)pBuf, pAssocInd->peerMacAddr, sizeof(tSirMacAddr)); + vos_mem_copy((tSirMacAddr *)pBuf, pAssocInd->peerMacAddr, + sizeof(tSirMacAddr)); + status = eHAL_STATUS_SUCCESS; pBuf += sizeof (tSirMacAddr); // aid wTmp = pal_cpu_to_be16(pAssocInd->aid); - palCopyMemory( pMac->hHdd, pBuf, &wTmp, sizeof(tANI_U16) ); + vos_mem_copy(pBuf, &wTmp, sizeof(tANI_U16)); pBuf += sizeof (tANI_U16); // alternateBssId - status = palCopyMemory(pMac->hHdd, (tSirMacAddr *)pBuf, pAssocInd->bssId, sizeof(tSirMacAddr)); + vos_mem_copy((tSirMacAddr *)pBuf, pAssocInd->bssId, sizeof(tSirMacAddr)); + status = eHAL_STATUS_SUCCESS; pBuf += sizeof (tSirMacAddr); // alternateChannelId *pBuf = 11; @@ -12796,21 +13507,20 @@ eHalStatus csrSendAssocCnfMsg( tpAniSirGlobal pMac, tpSirSmeAssocInd pAssocInd, } while( 0 ); return( status ); } -eHalStatus csrSendAssocIndToUpperLayerCnfMsg( tpAniSirGlobal pMac, - tpSirSmeAssocInd pAssocInd, - eHalStatus Halstatus, +eHalStatus csrSendAssocIndToUpperLayerCnfMsg( tpAniSirGlobal pMac, + tpSirSmeAssocInd pAssocInd, + eHalStatus Halstatus, tANI_U8 sessionId) { tSirMsgQ msgQ; - eHalStatus status = eHAL_STATUS_SUCCESS; tSirSmeAssocIndToUpperLayerCnf *pMsg; tANI_U8 *pBuf; tSirResultCodes statusCode; tANI_U16 wTmp; do { - status = palAllocateMemory(pMac->hHdd, (void **)&pMsg, sizeof( tSirSmeAssocIndToUpperLayerCnf )); - if ( !HAL_STATUS_SUCCESS(status) ) break; - palZeroMemory(pMac->hHdd, pMsg, sizeof( tSirSmeAssocIndToUpperLayerCnf )); + pMsg = vos_mem_malloc(sizeof( tSirSmeAssocIndToUpperLayerCnf )); + if ( NULL == pMsg ) return eHAL_STATUS_FAILURE; + vos_mem_set(pMsg, sizeof( tSirSmeAssocIndToUpperLayerCnf ), 0); pMsg->messageType = pal_cpu_to_be16((tANI_U16)eWNI_SME_UPPER_LAYER_ASSOC_CNF); pMsg->length = pal_cpu_to_be16((tANI_U16)sizeof( tSirSmeAssocIndToUpperLayerCnf )); @@ -12822,33 +13532,34 @@ eHalStatus csrSendAssocIndToUpperLayerCnfMsg( tpAniSirGlobal pMac, statusCode = (tSirResultCodes)pal_cpu_to_be32(eSIR_SME_SUCCESS); else statusCode = (tSirResultCodes)pal_cpu_to_be32(eSIR_SME_ASSOC_REFUSED); - palCopyMemory( pMac->hHdd, pBuf, &statusCode, sizeof(tSirResultCodes) ); + vos_mem_copy(pBuf, &statusCode, sizeof(tSirResultCodes)) ; pBuf += sizeof(tSirResultCodes); // bssId - status = palCopyMemory(pMac->hHdd, (tSirMacAddr *)pBuf, pAssocInd->bssId, sizeof(tSirMacAddr)); + vos_mem_copy((tSirMacAddr *)pBuf, pAssocInd->bssId, sizeof(tSirMacAddr)); pBuf += sizeof (tSirMacAddr); // peerMacAddr - status = palCopyMemory(pMac->hHdd, (tSirMacAddr *)pBuf, pAssocInd->peerMacAddr, sizeof(tSirMacAddr)); + vos_mem_copy((tSirMacAddr *)pBuf, pAssocInd->peerMacAddr, + sizeof(tSirMacAddr)); pBuf += sizeof (tSirMacAddr); // StaId wTmp = pal_cpu_to_be16(pAssocInd->staId); - palCopyMemory( pMac->hHdd, pBuf, &wTmp, sizeof(tANI_U16) ); + vos_mem_copy(pBuf, &wTmp, sizeof(tANI_U16)); pBuf += sizeof (tANI_U16); // alternateBssId - status = palCopyMemory(pMac->hHdd, (tSirMacAddr *)pBuf, pAssocInd->bssId, sizeof(tSirMacAddr)); + vos_mem_copy((tSirMacAddr *)pBuf, pAssocInd->bssId, sizeof(tSirMacAddr)); pBuf += sizeof (tSirMacAddr); // alternateChannelId *pBuf = 11; pBuf += sizeof (tANI_U8); - // Instead of copying roam Info, we just copy only WmmEnabled , RsnIE information + // Instead of copying roam Info, we just copy only WmmEnabled, RsnIE information //Wmm *pBuf = pAssocInd->wmmEnabledSta; pBuf += sizeof (tANI_U8); //RSN IE - status = palCopyMemory(pMac->hHdd, (tSirRSNie *)pBuf, &pAssocInd->rsnIE, sizeof(tSirRSNie)); + vos_mem_copy((tSirRSNie *)pBuf, &pAssocInd->rsnIE, sizeof(tSirRSNie)); pBuf += sizeof (tSirRSNie); //Additional IE - status = palCopyMemory(pMac->hHdd, (void *)pBuf, &pAssocInd->addIE, sizeof(tSirAddie)); + vos_mem_copy((void *)pBuf, &pAssocInd->addIE, sizeof(tSirAddie)); pBuf += sizeof (tSirAddie); //reassocReq *pBuf = pAssocInd->reassocReq; @@ -12858,13 +13569,13 @@ eHalStatus csrSendAssocIndToUpperLayerCnfMsg( tpAniSirGlobal pMac, msgQ.bodyval = 0; SysProcessMmhMsg(pMac, &msgQ); } while( 0 ); - return( status ); + return( eHAL_STATUS_SUCCESS ); } -eHalStatus csrSendMBSetContextReqMsg( tpAniSirGlobal pMac, tANI_U32 sessionId , - tSirMacAddr peerMacAddr, tANI_U8 numKeys, tAniEdType edType, +eHalStatus csrSendMBSetContextReqMsg( tpAniSirGlobal pMac, tANI_U32 sessionId, + tSirMacAddr peerMacAddr, tANI_U8 numKeys, tAniEdType edType, tANI_BOOLEAN fUnicast, tAniKeyDirection aniKeyDirection, - tANI_U8 keyId, tANI_U8 keyLength, tANI_U8 *pKey, tANI_U8 paeRole, + tANI_U8 keyId, tANI_U8 keyLength, tANI_U8 *pKey, tANI_U8 paeRole, tANI_U8 *pKeyRsc ) { tSirSmeSetContextReq *pMsg; @@ -12877,16 +13588,16 @@ eHalStatus csrSendMBSetContextReqMsg( tpAniSirGlobal pMac, tANI_U32 sessionId , tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, sessionId ); do { if( ( 1 != numKeys ) && ( 0 != numKeys ) ) break; - // all of these fields appear in every SET_CONTEXT message. Below we'll add in the size for each + // all of these fields appear in every SET_CONTEXT message. Below we'll add in the size for each // key set. Since we only support upto one key, we always allocate memory for 1 key msgLen = sizeof( tANI_U16) + sizeof( tANI_U16 ) + sizeof( tSirMacAddr ) + sizeof( tSirMacAddr ) + 1 + sizeof(tANI_U16) + sizeof( pMsg->keyMaterial.length ) + sizeof( pMsg->keyMaterial.edType ) + sizeof( pMsg->keyMaterial.numKeys ) + ( sizeof( pMsg->keyMaterial.key ) ); - - status = palAllocateMemory(pMac->hHdd, (void **)&pMsg, msgLen); - if ( !HAL_STATUS_SUCCESS(status) ) break; - palZeroMemory(pMac->hHdd, pMsg, msgLen); + + pMsg = vos_mem_malloc(msgLen); + if ( NULL == pMsg ) return eHAL_STATUS_FAILURE; + vos_mem_set(pMsg, msgLen, 0); pMsg->messageType = pal_cpu_to_be16((tANI_U16)eWNI_SME_SETCONTEXT_REQ); pMsg->length = pal_cpu_to_be16(msgLen); //sessionId @@ -12898,14 +13609,13 @@ eHalStatus csrSendMBSetContextReqMsg( tpAniSirGlobal pMac, tANI_U32 sessionId , *(pBuf + 1) = 0; pBuf += sizeof(tANI_U16); // peerMacAddr - palCopyMemory( pMac->hHdd, pBuf, - (tANI_U8 *)peerMacAddr, sizeof(tSirMacAddr) ); + vos_mem_copy(pBuf, (tANI_U8 *)peerMacAddr, sizeof(tSirMacAddr)); pBuf += sizeof(tSirMacAddr); // bssId - palCopyMemory( pMac->hHdd, pBuf, - (tANI_U8 *)&pSession->connectedProfile.bssid, sizeof(tSirMacAddr) ); + vos_mem_copy(pBuf, (tANI_U8 *)&pSession->connectedProfile.bssid, + sizeof(tSirMacAddr)); pBuf += sizeof(tSirMacAddr); @@ -12913,16 +13623,16 @@ eHalStatus csrSendMBSetContextReqMsg( tpAniSirGlobal pMac, tANI_U32 sessionId , // Set the pMsg->keyMaterial.length field (this length is defined as all data that follows the edType field // in the tSirKeyMaterial keyMaterial; field). // - // !!NOTE: This keyMaterial.length contains the length of a MAX size key, though the keyLength can be + // !!NOTE: This keyMaterial.length contains the length of a MAX size key, though the keyLength can be // shorter than this max size. Is LIM interpreting this ok ? p = pal_set_U16( p, pal_cpu_to_be16((tANI_U16)( sizeof( pMsg->keyMaterial.numKeys ) + ( numKeys * sizeof( pMsg->keyMaterial.key ) ) )) ); // set pMsg->keyMaterial.edType tmpEdType = (tAniEdType)pal_cpu_to_be32(edType); - palCopyMemory( pMac->hHdd, p, (tANI_U8 *)&tmpEdType, sizeof(tAniEdType) ); + vos_mem_copy(p, (tANI_U8 *)&tmpEdType, sizeof(tAniEdType)); p += sizeof( pMsg->keyMaterial.edType ); // set the pMsg->keyMaterial.numKeys field *p = numKeys; - p += sizeof( pMsg->keyMaterial.numKeys ); + p += sizeof( pMsg->keyMaterial.numKeys ); // set pSirKey->keyId = keyId; *p = keyId; p += sizeof( pMsg->keyMaterial.key[ 0 ].keyId ); @@ -12931,19 +13641,19 @@ eHalStatus csrSendMBSetContextReqMsg( tpAniSirGlobal pMac, tANI_U32 sessionId , p += sizeof( pMsg->keyMaterial.key[ 0 ].unicast ); // set pSirKey->keyDirection = aniKeyDirection; tmpDirection = (tAniKeyDirection)pal_cpu_to_be32(aniKeyDirection); - palCopyMemory( pMac->hHdd, p, (tANI_U8 *)&tmpDirection, sizeof(tAniKeyDirection) ); + vos_mem_copy(p, (tANI_U8 *)&tmpDirection, sizeof(tAniKeyDirection)); p += sizeof(tAniKeyDirection); // pSirKey->keyRsc = ;; - palCopyMemory( pMac->hHdd, p, pKeyRsc, CSR_MAX_RSC_LEN ); + vos_mem_copy(p, pKeyRsc, CSR_MAX_RSC_LEN); p += sizeof( pMsg->keyMaterial.key[ 0 ].keyRsc ); // set pSirKey->paeRole *p = paeRole; // 0 is Supplicant p++; // set pSirKey->keyLength = keyLength; p = pal_set_U16( p, pal_cpu_to_be16(keyLength) ); - if ( keyLength && pKey ) - { - palCopyMemory( pMac->hHdd, p, pKey, keyLength ); + if ( keyLength && pKey ) + { + vos_mem_copy(p, pKey, keyLength); if(keyLength == 16) { smsLog(pMac, LOG1, " SME Set keyIdx (%d) encType(%d) key = %02X-%02X-%02X-%02X-%02X-%02X-%02X-%02X-%02X-%02X-%02X-%02X-%02X-%02X-%02X-%02X", @@ -12957,7 +13667,7 @@ eHalStatus csrSendMBSetContextReqMsg( tpAniSirGlobal pMac, tANI_U32 sessionId , return( status ); } -eHalStatus csrSendMBStartBssReqMsg( tpAniSirGlobal pMac, tANI_U32 sessionId, eCsrRoamBssType bssType, +eHalStatus csrSendMBStartBssReqMsg( tpAniSirGlobal pMac, tANI_U32 sessionId, eCsrRoamBssType bssType, tCsrRoamStartBssParams *pParam, tSirBssDescription *pBssDesc ) { eHalStatus status; @@ -12976,14 +13686,14 @@ eHalStatus csrSendMBStartBssReqMsg( tpAniSirGlobal pMac, tANI_U32 sessionId, eCs smsLog(pMac, LOGE, FL(" session %d not found "), sessionId); return eHAL_STATUS_FAILURE; } - + do { pSession->joinFailStatusCode.statusCode = eSIR_SME_SUCCESS; pSession->joinFailStatusCode.reasonCode = 0; msgLen = sizeof(tSirSmeStartBssReq); - status = palAllocateMemory(pMac->hHdd, (void **)&pMsg, msgLen); - if ( !HAL_STATUS_SUCCESS(status) ) break; - palZeroMemory(pMac->hHdd, pMsg, msgLen); + pMsg = vos_mem_malloc(msgLen); + if ( NULL == pMsg ) return eHAL_STATUS_FAILURE; + vos_mem_set(pMsg, msgLen, 0); pMsg->messageType = pal_cpu_to_be16((tANI_U16)eWNI_SME_START_BSS_REQ); pBuf = &pMsg->sessionId; wTmpBuf = pBuf; @@ -12994,11 +13704,11 @@ eHalStatus csrSendMBStartBssReqMsg( tpAniSirGlobal pMac, tANI_U32 sessionId, eCs *pBuf = 0; *(pBuf + 1) = 0; pBuf += sizeof(tANI_U16); - // bssid - palCopyMemory( pMac->hHdd, pBuf, pParam->bssid, sizeof(tSirMacAddr) ); + // bssid + vos_mem_copy(pBuf, pParam->bssid, sizeof(tSirMacAddr)); pBuf += sizeof(tSirMacAddr); // selfMacAddr - palCopyMemory( pMac->hHdd, pBuf, pSession->selfMacAddr, sizeof(tSirMacAddr) ); + vos_mem_copy(pBuf, pSession->selfMacAddr, sizeof(tSirMacAddr)); pBuf += sizeof(tSirMacAddr); // beaconInterval if( pBssDesc && pBssDesc->beaconInterval ) @@ -13016,28 +13726,28 @@ eHalStatus csrSendMBStartBssReqMsg( tpAniSirGlobal pMac, tANI_U32 sessionId, eCs if(csrIsconcurrentsessionValid (pMac, sessionId, pParam->bssPersona) == eHAL_STATUS_SUCCESS ) - { + { csrValidateMCCBeaconInterval(pMac, pParam->operationChn, &wTmp, sessionId, pParam->bssPersona); - //Update the beacon Interval + //Update the beacon Interval pParam->beaconInterval = wTmp; } else { smsLog( pMac,LOGE, FL("****Start BSS failed persona already exists***")); status = eHAL_STATUS_FAILURE; - palFreeMemory( pMac->hHdd, pMsg ); + vos_mem_free(pMsg); return status; } - palCopyMemory( pMac->hHdd, pBuf, &wTmp, sizeof( tANI_U16 ) ); + vos_mem_copy(pBuf, &wTmp, sizeof( tANI_U16 )); pBuf += sizeof(tANI_U16); // dot11mode *pBuf = (tANI_U8)csrTranslateToWNICfgDot11Mode( pMac, pParam->uCfgDot11Mode ); pBuf += 1; // bssType dwTmp = pal_cpu_to_be32( csrTranslateBsstypeToMacType( bssType ) ); - palCopyMemory( pMac->hHdd, pBuf, &dwTmp, sizeof(tSirBssType) ); + vos_mem_copy(pBuf, &dwTmp, sizeof(tSirBssType)); pBuf += sizeof(tSirBssType); // ssId if( pParam->ssId.length ) @@ -13045,27 +13755,27 @@ eHalStatus csrSendMBStartBssReqMsg( tpAniSirGlobal pMac, tANI_U32 sessionId, eCs // ssId len *pBuf = pParam->ssId.length; pBuf++; - palCopyMemory( pMac->hHdd, pBuf, pParam->ssId.ssId, pParam->ssId.length ); + vos_mem_copy(pBuf, pParam->ssId.ssId, pParam->ssId.length); pBuf += pParam->ssId.length; } else { *pBuf = 0; - pBuf++; + pBuf++; } // set the channel Id *pBuf = pParam->operationChn; pBuf++; //What should we really do for the cbmode. cbMode = (ePhyChanBondState)pal_cpu_to_be32(pParam->cbMode); - palCopyMemory( pMac->hHdd, pBuf, (tANI_U8 *)&cbMode, sizeof(ePhyChanBondState) ); + vos_mem_copy(pBuf, (tANI_U8 *)&cbMode, sizeof(ePhyChanBondState)); pBuf += sizeof(ePhyChanBondState); // Set privacy *pBuf = pParam->privacy; pBuf++; - - //Set Uapsd + + //Set Uapsd *pBuf = pParam->ApUapsdEnable; pBuf++; //Set SSID hidden @@ -13073,7 +13783,7 @@ eHalStatus csrSendMBStartBssReqMsg( tpAniSirGlobal pMac, tANI_U32 sessionId, eCs pBuf++; *pBuf = (tANI_U8)pParam->fwdWPSPBCProbeReq; pBuf++; - + //Ht protection Enable/Disable *pBuf = (tANI_U8)pParam->protEnabled; pBuf++; @@ -13082,70 +13792,69 @@ eHalStatus csrSendMBStartBssReqMsg( tpAniSirGlobal pMac, tANI_U32 sessionId, eCs pBuf++; //set cfg related to protection wTmp = pal_cpu_to_be16( pParam->ht_protection ); - palCopyMemory( pMac->hHdd, pBuf, &wTmp, sizeof( tANI_U16 ) ); + vos_mem_copy(pBuf, &wTmp, sizeof( tANI_U16 )); pBuf += sizeof(tANI_U16); // Set Auth type authType = pal_cpu_to_be32(pParam->authType); - palCopyMemory( pMac->hHdd, pBuf, (tANI_U8 *)&authType, sizeof(tANI_U32)); + vos_mem_copy(pBuf, (tANI_U8 *)&authType, sizeof(tANI_U32)); pBuf += sizeof(tANI_U32); // Set DTIM dwTmp = pal_cpu_to_be32(pParam->dtimPeriod); - palCopyMemory( pMac->hHdd, pBuf, (tANI_U8 *)&dwTmp, sizeof(tANI_U32)); + vos_mem_copy(pBuf, (tANI_U8 *)&dwTmp, sizeof(tANI_U32)); pBuf += sizeof(tANI_U32); // Set wps_state *pBuf = pParam->wps_state; pBuf++; - - // set isCoalesingInIBSSAllowed + // set isCoalesingInIBSSAllowed *pBuf = pMac->isCoalesingInIBSSAllowed; pBuf++; - //Persona *pBuf = (tANI_U8)pParam->bssPersona; pBuf++; - + //txLdpcIniFeatureEnabled *pBuf = (tANI_U8)(tANI_U8)pMac->roam.configParam.txLdpcEnable; pBuf++; - // set RSN IE if( pParam->nRSNIELength > sizeof(pMsg->rsnIE.rsnIEdata) ) { status = eHAL_STATUS_INVALID_PARAMETER; - palFreeMemory( pMac->hHdd, pMsg ); + vos_mem_free(pMsg); break; } wTmp = pal_cpu_to_be16( pParam->nRSNIELength ); - palCopyMemory( pMac->hHdd, pBuf, &wTmp, sizeof(tANI_U16) ); + vos_mem_copy(pBuf, &wTmp, sizeof(tANI_U16)); pBuf += sizeof(tANI_U16); if( wTmp ) { wTmp = pParam->nRSNIELength; - palCopyMemory( pMac->hHdd, pBuf, pParam->pRSNIE, wTmp ); + vos_mem_copy(pBuf, pParam->pRSNIE, wTmp); pBuf += wTmp; } nwType = (tSirNwType)pal_cpu_to_be32(pParam->sirNwType); - palCopyMemory( pMac->hHdd, pBuf, (tANI_U8 *)&nwType, sizeof(tSirNwType) ); + vos_mem_copy(pBuf, (tANI_U8 *)&nwType, sizeof(tSirNwType)); pBuf += sizeof(tSirNwType); *pBuf = pParam->operationalRateSet.numRates; //tSirMacRateSet->numRates pBuf++; - palCopyMemory( pMac->hHdd, pBuf, pParam->operationalRateSet.rate, pParam->operationalRateSet.numRates ); + vos_mem_copy(pBuf, pParam->operationalRateSet.rate, + pParam->operationalRateSet.numRates ); pBuf += pParam->operationalRateSet.numRates ; *pBuf++ = pParam->extendedRateSet.numRates; if(0 != pParam->extendedRateSet.numRates) { - palCopyMemory( pMac->hHdd, pBuf, pParam->extendedRateSet.rate, pParam->extendedRateSet.numRates ); + vos_mem_copy(pBuf, pParam->extendedRateSet.rate, + pParam->extendedRateSet.numRates); pBuf += pParam->extendedRateSet.numRates; } //HT Config - palCopyMemory(pMac->hHdd, pBuf, &pSession->htConfig, - sizeof(tSirHTConfig)); - pBuf += sizeof(tSirHTConfig); + vos_mem_copy(pBuf, &pSession->htConfig, + sizeof(tSirHTConfig)); + pBuf += sizeof(tSirHTConfig); msgLen = (tANI_U16)(sizeof(tANI_U32 ) + (pBuf - wTmpBuf)); //msg_header + msg pMsg->length = pal_cpu_to_be16(msgLen); - + status = palSendMBMessage(pMac->hHdd, pMsg); } while( 0 ); return( status ); @@ -13164,11 +13873,11 @@ eHalStatus csrSendMBStopBssReqMsg( tpAniSirGlobal pMac, tANI_U32 sessionId ) smsLog(pMac, LOGE, FL(" session %d not found "), sessionId); return eHAL_STATUS_FAILURE; } - + do { - status = palAllocateMemory(pMac, (void **)&pMsg, sizeof(tSirSmeStopBssReq)); - if ( !HAL_STATUS_SUCCESS(status) ) break; - palZeroMemory(pMac->hHdd, pMsg, sizeof( tSirSmeStopBssReq )); + pMsg = vos_mem_malloc(sizeof(tSirSmeStopBssReq)); + if ( NULL == pMsg ) return eHAL_STATUS_FAILURE; + vos_mem_set(pMsg, sizeof( tSirSmeStopBssReq ), 0); pMsg->messageType = pal_cpu_to_be16((tANI_U16)eWNI_SME_STOP_BSS_REQ); pBuf = &pMsg->sessionId; //sessionId @@ -13180,24 +13889,26 @@ eHalStatus csrSendMBStopBssReqMsg( tpAniSirGlobal pMac, tANI_U32 sessionId ) //reason code *pBuf = 0; pBuf += sizeof(tSirResultCodes); - // bssid + // bssid // if BSSType is WDS sta, use selfmacAddr as bssid, else use bssid in connectedProfile if( CSR_IS_CONN_WDS_STA(&pSession->connectedProfile) ) { - palCopyMemory( pMac->hHdd, pBuf,(tANI_U8 *)&pSession->selfMacAddr, sizeof(tSirMacAddr) ); + vos_mem_copy(pBuf, (tANI_U8 *)&pSession->selfMacAddr, + sizeof(tSirMacAddr)); } else { - palCopyMemory( pMac->hHdd, pBuf,(tANI_U8 *)&pSession->connectedProfile.bssid, sizeof(tSirMacAddr) ); + vos_mem_copy(pBuf, (tANI_U8 *)&pSession->connectedProfile.bssid, + sizeof(tSirMacAddr)); } pBuf += sizeof(tSirMacAddr); msgLen = sizeof(tANI_U16) + sizeof(tANI_U16) + 1 + sizeof(tANI_U16) + sizeof(tSirResultCodes) + sizeof(tSirMacAddr); pMsg->length = pal_cpu_to_be16(msgLen); status = palSendMBMessage( pMac->hHdd, pMsg ); -#if 0 - status = palAllocateMemory(pMac, (void **)&pMsg, sizeof(tSirSmeStopBssReq)); - if ( !HAL_STATUS_SUCCESS(status) ) break; - palZeroMemory(pMac->hHdd, pMsg, sizeof( tSirSmeStopBssReq )); +#if 0 + pMsg = vos_mem_malloc(sizeof(tSirSmeStopBssReq)); + if ( NULL == pMsg ) return eHAL_STATUS_FAILURE; + vos_mem_set(pMsg, sizeof( tSirSmeStopBssReq ), 0); pMsg->messageType = pal_cpu_to_be16((tANI_U16)eWNI_SME_STOP_BSS_REQ); pMsg->reasonCode = 0; // bssid @@ -13210,17 +13921,17 @@ eHalStatus csrSendMBStopBssReqMsg( tpAniSirGlobal pMac, tANI_U32 sessionId ) { pbBssid = (tANI_U8 *)&pSession->connectedProfile.bssid; } - palCopyMemory( pMac->hHdd, &pMsg->bssId, pbBssid, sizeof(tSirMacAddr) ); + vos_mem_copy(&pMsg->bssId, pbBssid, sizeof(tSirMacAddr)); pMsg->transactionId = 0; pMsg->sessionId = (tANI_U8)sessionId; pMsg->length = pal_cpu_to_be16((tANI_U16)sizeof( tSirSmeStopBssReq )); status = palSendMBMessage( pMac->hHdd, pMsg ); -#endif +#endif } while( 0 ); return( status ); } -eHalStatus csrReassoc(tpAniSirGlobal pMac, tANI_U32 sessionId, +eHalStatus csrReassoc(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamModifyProfileFields *pModProfileFields, tANI_U32 *pRoamId, v_BOOL_t fForce) { @@ -13228,9 +13939,9 @@ eHalStatus csrReassoc(tpAniSirGlobal pMac, tANI_U32 sessionId, tANI_U32 roamId = 0; tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, sessionId ); if((csrIsConnStateConnected(pMac, sessionId)) && - (fForce || (!palEqualMemory(pMac->hHdd, &pModProfileFields, - &pSession->connectedProfile.modifyProfileFields, - sizeof(tCsrRoamModifyProfileFields)))) ) + (fForce || (!vos_mem_compare( &pModProfileFields, + &pSession->connectedProfile.modifyProfileFields, + sizeof(tCsrRoamModifyProfileFields)))) ) { roamId = GET_NEXT_ROAM_ID(&pMac->roam); if(pRoamId) @@ -13238,8 +13949,8 @@ eHalStatus csrReassoc(tpAniSirGlobal pMac, tANI_U32 sessionId, *pRoamId = roamId; } - status = csrRoamIssueReassoc(pMac, sessionId, NULL, pModProfileFields, - eCsrSmeIssuedReassocToSameAP, roamId, + status = csrRoamIssueReassoc(pMac, sessionId, NULL, pModProfileFields, + eCsrSmeIssuedReassocToSameAP, roamId, eANI_BOOLEAN_FALSE); } return status; @@ -13248,7 +13959,7 @@ static eHalStatus csrRoamSessionOpened(tpAniSirGlobal pMac, tANI_U32 sessionId) { eHalStatus status = eHAL_STATUS_SUCCESS; tCsrRoamInfo roamInfo; - palZeroMemory(pMac->hHdd, &roamInfo, sizeof(tCsrRoamInfo)); + vos_mem_set(&roamInfo, sizeof(tCsrRoamInfo), 0); status = csrRoamCallCallback(pMac, sessionId, &roamInfo, 0, eCSR_ROAM_SESSION_OPENED, eCSR_ROAM_RESULT_NONE); return (status); @@ -13303,25 +14014,31 @@ eHalStatus csrProcessAddStaSessionRsp( tpAniSirGlobal pMac, tANI_U8 *pMsg) } while(0); return status; } -eHalStatus csrSendMBAddSelfStaReqMsg( tpAniSirGlobal pMac, tSirMacAddr macAddr, - tANI_U32 type, tANI_U32 subType, tANI_U8 sessionId) +eHalStatus csrSendMBAddSelfStaReqMsg( tpAniSirGlobal pMac, + tAddStaForSessionCmd *pAddStaReq, + tANI_U8 sessionId) { tSirSmeAddStaSelfReq *pMsg; tANI_U16 msgLen; eHalStatus status = eHAL_STATUS_FAILURE; do { msgLen = sizeof(tSirSmeAddStaSelfReq); - status = palAllocateMemory(pMac->hHdd, (void **)&pMsg, msgLen); - if ( !HAL_STATUS_SUCCESS(status) ) break; - palZeroMemory(pMac->hHdd, pMsg, msgLen); + pMsg = vos_mem_malloc(msgLen); + if ( NULL == pMsg ) break; + vos_mem_set(pMsg, msgLen, 0); pMsg->mesgType = pal_cpu_to_be16((tANI_U16)eWNI_SME_ADD_STA_SELF_REQ); pMsg->mesgLen = pal_cpu_to_be16(msgLen); - pMsg->type = type; - pMsg->subType = subType; - pMsg->sessionId = sessionId; // self station address - palCopyMemory( pMac->hHdd, (tANI_U8 *)pMsg->selfMacAddr, (tANI_U8 *)macAddr, sizeof(tSirMacAddr) ); - smsLog( pMac, LOG1, FL("selfMac=%02x, %02x, %02x, %02x, %02x, %02x"), + vos_mem_copy((tANI_U8 *)pMsg->selfMacAddr, + (tANI_U8 *)&pAddStaReq->selfMacAddr, sizeof(tSirMacAddr)); + + pMsg->currDeviceMode = pAddStaReq->currDeviceMode; + pMsg->type = pAddStaReq->type; + pMsg->subType = pAddStaReq->subType; + pMsg->sessionId = sessionId; + printk("session id - %d, AddSta session - %d\n", sessionId, pAddStaReq->sessionId); + + smsLog( pMac, LOG1, FL("selfMac=%02x, %02x, %02x, %02x, %02x, %02x"), pMsg->selfMacAddr[0], pMsg->selfMacAddr[1], pMsg->selfMacAddr[2], @@ -13332,8 +14049,9 @@ eHalStatus csrSendMBAddSelfStaReqMsg( tpAniSirGlobal pMac, tSirMacAddr macAddr, } while( 0 ); return( status ); } -eHalStatus csrIssueAddStaForSessionReq(tpAniSirGlobal pMac, tANI_U32 sessionId, tSirMacAddr sessionMacAddr, - tANI_U32 type, tANI_U32 subType) +eHalStatus csrIssueAddStaForSessionReq(tpAniSirGlobal pMac, tANI_U32 sessionId, + tSirMacAddr sessionMacAddr, + tANI_U32 type, tANI_U32 subType) { eHalStatus status = eHAL_STATUS_SUCCESS; tSmeCmd *pCommand; @@ -13346,7 +14064,9 @@ eHalStatus csrIssueAddStaForSessionReq(tpAniSirGlobal pMac, tANI_U32 sessionId, { pCommand->command = eSmeCommandAddStaSession; pCommand->sessionId = (tANI_U8)sessionId; - palCopyMemory( pMac->hHdd, pCommand->u.addStaSessionCmd.selfMacAddr, sessionMacAddr, sizeof( tSirMacAddr ) ); + vos_mem_copy(pCommand->u.addStaSessionCmd.selfMacAddr, sessionMacAddr, + sizeof( tSirMacAddr ) ); + pCommand->u.addStaSessionCmd.currDeviceMode = pMac->sme.currDeviceMode; pCommand->u.addStaSessionCmd.type = type; pCommand->u.addStaSessionCmd.subType = subType; status = csrQueueSmeCommand(pMac, pCommand, TRUE); @@ -13360,15 +14080,15 @@ eHalStatus csrIssueAddStaForSessionReq(tpAniSirGlobal pMac, tANI_U32 sessionId, } eHalStatus csrProcessAddStaSessionCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand ) { - return csrSendMBAddSelfStaReqMsg( pMac, - pCommand->u.addStaSessionCmd.selfMacAddr, - pCommand->u.addStaSessionCmd.type, - pCommand->u.addStaSessionCmd.subType, + return csrSendMBAddSelfStaReqMsg(pMac, + &pCommand->u.addStaSessionCmd, pCommand->sessionId); } -eHalStatus csrRoamOpenSession( tpAniSirGlobal pMac, csrRoamCompleteCallback callback, void *pContext, - tANI_U8 *pSelfMacAddr, tANI_U8 *pbSessionId, - tANI_U32 type, tANI_U32 subType ) +eHalStatus csrRoamOpenSession(tpAniSirGlobal pMac, + csrRoamCompleteCallback callback, + void *pContext, + tANI_U8 *pSelfMacAddr, tANI_U8 *pbSessionId, + tANI_U32 type, tANI_U32 subType ) { eHalStatus status = eHAL_STATUS_SUCCESS; tANI_U32 i, value = 0; @@ -13389,8 +14109,16 @@ eHalStatus csrRoamOpenSession( tpAniSirGlobal pMac, csrRoamCompleteCallback call pSession->sessionId = (tANI_U8)i; pSession->callback = callback; pSession->pContext = pContext; - palCopyMemory( pMac->hHdd, &pSession->selfMacAddr, pSelfMacAddr, sizeof(tCsrBssid) ); + vos_mem_copy(&pSession->selfMacAddr, pSelfMacAddr, sizeof(tCsrBssid)); *pbSessionId = (tANI_U8)i; + status = vos_timer_init(&pSession->hTimerRoaming, VOS_TIMER_TYPE_SW, + csrRoamRoamingTimerHandler, + &pSession->roamingTimerInfo); + if (!HAL_STATUS_SUCCESS(status)) + { + smsLog(pMac, LOGE, FL("cannot allocate memory for Roaming timer")); + break; + } /* get the HT capability info*/ status = ccmCfgGetInt(pMac, WNI_CFG_HT_CAP_INFO, &value); if (!HAL_STATUS_SUCCESS(status)) { @@ -13400,32 +14128,16 @@ eHalStatus csrRoamOpenSession( tpAniSirGlobal pMac, csrRoamCompleteCallback call break; } - status = palTimerAlloc(pMac->hHdd, &pSession->hTimerRoaming, csrRoamRoamingTimerHandler, - &pSession->roamingTimerInfo); - if(!HAL_STATUS_SUCCESS(status)) - { - smsLog(pMac, LOGE, FL("cannot allocate memory for Roaming timer")); - break; - } #ifdef FEATURE_WLAN_BTAMP_UT_RF - status = palTimerAlloc(pMac->hHdd, &pSession->hTimerJoinRetry, csrRoamJoinRetryTimerHandler, + status = vos_timer_init(&pSession->hTimerJoinRetry, VOS_TIMER_TYPE_SW, + csrRoamJoinRetryTimerHandler, &pSession->joinRetryTimerInfo); - if(!HAL_STATUS_SUCCESS(status)) + if (!HAL_STATUS_SUCCESS(status)) { smsLog(pMac, LOGE, FL("cannot allocate memory for joinretry timer")); break; } #endif - pSession->ibssJoinTimerInfo.pMac = pMac; - pSession->ibssJoinTimerInfo.sessionId = CSR_SESSION_ID_INVALID; - status = palTimerAlloc(pMac->hHdd, &pSession->hTimerIbssJoining, csrRoamIbssJoinTimerHandler, - &pSession->ibssJoinTimerInfo); - if(!HAL_STATUS_SUCCESS(status)) - { - smsLog(pMac, LOGE, FL("cannot allocate memory for IbssJoining timer")); - break; - } - uHTCapabilityInfo.nCfgValue16 = 0xFFFF & value; pSession->htConfig.ht_rx_ldpc = uHTCapabilityInfo.htCapInfo.advCodingCap; @@ -13470,7 +14182,7 @@ eHalStatus csrProcessDelStaSessionRsp( tpAniSirGlobal pMac, tANI_U8 *pMsg) csrCleanupSession(pMac, sessionId); if(pCommand->u.delStaSessionCmd.callback) { - + status = sme_ReleaseGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { @@ -13486,8 +14198,8 @@ eHalStatus csrProcessDelStaSessionRsp( tpAniSirGlobal pMac, tANI_U8 *pMsg) else { smsLog(pMac, LOGE, "%s: Failed to Release Lock", __func__); } - } - + } + //Remove this command out of the active list if(csrLLRemoveEntry(&pMac->sme.smeCmdActiveList, pEntry, LL_ACCESS_LOCK)) { @@ -13522,15 +14234,17 @@ eHalStatus csrSendMBDelSelfStaReqMsg( tpAniSirGlobal pMac, tSirMacAddr macAddr, eHalStatus status = eHAL_STATUS_FAILURE; do { msgLen = sizeof(tSirSmeDelStaSelfReq); - status = palAllocateMemory(pMac->hHdd, (void **)&pMsg, msgLen); - if ( !HAL_STATUS_SUCCESS(status) ) break; - - palZeroMemory(pMac->hHdd, pMsg, msgLen); + pMsg = vos_mem_malloc(msgLen); + if (NULL == pMsg) + return eHAL_STATUS_FAILURE; + vos_mem_set(pMsg, msgLen, 0); + pMsg->mesgType = pal_cpu_to_be16((tANI_U16)eWNI_SME_DEL_STA_SELF_REQ); pMsg->mesgLen = pal_cpu_to_be16(msgLen); pMsg->sessionId = sessionId; // self station address - palCopyMemory( pMac->hHdd, (tANI_U8 *)pMsg->selfMacAddr, (tANI_U8 *)macAddr, sizeof(tSirMacAddr) ); + vos_mem_copy((tANI_U8 *)pMsg->selfMacAddr, (tANI_U8 *)macAddr, + sizeof(tSirMacAddr)); status = palSendMBMessage(pMac->hHdd, pMsg); } while( 0 ); return( status ); @@ -13553,7 +14267,8 @@ eHalStatus csrIssueDelStaForSessionReq(tpAniSirGlobal pMac, tANI_U32 sessionId, pCommand->sessionId = (tANI_U8)sessionId; pCommand->u.delStaSessionCmd.callback = callback; pCommand->u.delStaSessionCmd.pContext = pContext; - palCopyMemory( pMac->hHdd, pCommand->u.delStaSessionCmd.selfMacAddr, sessionMacAddr, sizeof( tSirMacAddr ) ); + vos_mem_copy(pCommand->u.delStaSessionCmd.selfMacAddr, sessionMacAddr, + sizeof( tSirMacAddr )); status = csrQueueSmeCommand(pMac, pCommand, TRUE); if( !HAL_STATUS_SUCCESS( status ) ) { @@ -13565,7 +14280,7 @@ eHalStatus csrIssueDelStaForSessionReq(tpAniSirGlobal pMac, tANI_U32 sessionId, } eHalStatus csrProcessDelStaSessionCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand ) { - return csrSendMBDelSelfStaReqMsg( pMac, + return csrSendMBDelSelfStaReqMsg( pMac, pCommand->u.delStaSessionCmd.selfMacAddr, (tANI_U8)pCommand->sessionId); } @@ -13616,24 +14331,24 @@ void csrCleanupSession(tpAniSirGlobal pMac, tANI_U32 sessionId) csrFreeConnectBssDesc(pMac, sessionId); csrRoamFreeConnectProfile( pMac, &pSession->connectedProfile ); csrRoamFreeConnectedInfo ( pMac, &pSession->connectedInfo); - palTimerFree(pMac->hHdd, pSession->hTimerRoaming); + vos_timer_destroy(&pSession->hTimerRoaming); #ifdef FEATURE_WLAN_BTAMP_UT_RF - palTimerFree(pMac->hHdd, pSession->hTimerJoinRetry); + vos_timer_destroy(&pSession->hTimerJoinRetry); #endif - palTimerFree(pMac->hHdd, pSession->hTimerIbssJoining); purgeSmeSessionCmdList(pMac, sessionId, &pMac->sme.smeCmdPendingList); if (pMac->fScanOffload) { purgeSmeSessionCmdList(pMac, sessionId, &pMac->sme.smeScanCmdPendingList); } + purgeCsrSessionCmdList(pMac, sessionId); csrInitSession(pMac, sessionId); } } eHalStatus csrRoamCloseSession( tpAniSirGlobal pMac, tANI_U32 sessionId, - tANI_BOOLEAN fSync, + tANI_BOOLEAN fSync, csrRoamSessionCloseCallback callback, void *pContext ) { @@ -13646,7 +14361,7 @@ eHalStatus csrRoamCloseSession( tpAniSirGlobal pMac, tANI_U32 sessionId, csrCleanupSession(pMac, sessionId); } else - { + { purgeSmeSessionCmdList(pMac, sessionId, &pMac->sme.smeCmdPendingList); if (pMac->fScanOffload) @@ -13675,12 +14390,11 @@ static void csrInitSession( tpAniSirGlobal pMac, tANI_U32 sessionId ) smsLog(pMac, LOGE, FL(" session %d not found "), sessionId); return; } - + pSession->sessionActive = eANI_BOOLEAN_FALSE; pSession->sessionId = CSR_SESSION_ID_INVALID; pSession->callback = NULL; pSession->pContext = NULL; - pSession->ibss_join_pending = FALSE; pSession->connectState = eCSR_ASSOC_STATE_TYPE_NOT_CONNECTED; // TODO : Confirm pMac->roam.fReadyForPowerSave = eANI_BOOLEAN_FALSE; csrFreeRoamProfile( pMac, sessionId ); @@ -13688,44 +14402,44 @@ static void csrInitSession( tpAniSirGlobal pMac, tANI_U32 sessionId ) csrRoamFreeConnectedInfo( pMac, &pSession->connectedInfo ); csrFreeConnectBssDesc(pMac, sessionId); csrScanEnable(pMac); - palZeroMemory( pMac->hHdd, &pSession->selfMacAddr, sizeof(tCsrBssid) ); - if(pSession->pWpaRsnReqIE) + vos_mem_set(&pSession->selfMacAddr, sizeof(tCsrBssid), 0); + if (pSession->pWpaRsnReqIE) { - palFreeMemory(pMac->hHdd, pSession->pWpaRsnReqIE); + vos_mem_free(pSession->pWpaRsnReqIE); pSession->pWpaRsnReqIE = NULL; } pSession->nWpaRsnReqIeLength = 0; - if(pSession->pWpaRsnRspIE) + if (pSession->pWpaRsnRspIE) { - palFreeMemory(pMac->hHdd, pSession->pWpaRsnRspIE); + vos_mem_free(pSession->pWpaRsnRspIE); pSession->pWpaRsnRspIE = NULL; } pSession->nWpaRsnRspIeLength = 0; #ifdef FEATURE_WLAN_WAPI - if(pSession->pWapiReqIE) + if (pSession->pWapiReqIE) { - palFreeMemory(pMac->hHdd, pSession->pWapiReqIE); + vos_mem_free(pSession->pWapiReqIE); pSession->pWapiReqIE = NULL; } pSession->nWapiReqIeLength = 0; - if(pSession->pWapiRspIE) + if (pSession->pWapiRspIE) { - palFreeMemory(pMac->hHdd, pSession->pWapiRspIE); + vos_mem_free(pSession->pWapiRspIE); pSession->pWapiRspIE = NULL; } pSession->nWapiRspIeLength = 0; #endif /* FEATURE_WLAN_WAPI */ - if(pSession->pAddIEScan) + if (pSession->pAddIEScan) { - palFreeMemory(pMac->hHdd, pSession->pAddIEScan); + vos_mem_free(pSession->pAddIEScan); pSession->pAddIEScan = NULL; } pSession->nAddIEScanLength = 0; - if(pSession->pAddIEAssoc) + if (pSession->pAddIEAssoc) { - palFreeMemory(pMac->hHdd, pSession->pAddIEAssoc); + vos_mem_free(pSession->pAddIEAssoc); pSession->pAddIEAssoc = NULL; -} + } pSession->nAddIEAssocLength = 0; } @@ -13749,7 +14463,7 @@ eHalStatus csrRoamGetSessionIdFromBSSID( tpAniSirGlobal pMac, tCsrBssid *bssid, return( status ); } -//This function assumes that we only support one IBSS session. We cannot use BSSID to identify +//This function assumes that we only support one IBSS session. We cannot use BSSID to identify //session because for IBSS, the bssid changes. static tANI_U32 csrFindIbssSession( tpAniSirGlobal pMac ) { @@ -13772,20 +14486,20 @@ static tANI_U32 csrFindIbssSession( tpAniSirGlobal pMac ) } static void csrRoamLinkUp(tpAniSirGlobal pMac, tCsrBssid bssid) { - /* Update the current BSS info in ho control block based on connected + /* Update the current BSS info in ho control block based on connected profile info from pmac global structure */ - + smsLog(pMac, LOGW, " csrRoamLinkUp: WLAN link UP with AP= %02x-%02x-%02x-%02x-%02x-%02x", bssid[ 0 ], bssid[ 1 ], bssid[ 2 ], bssid[ 3 ], bssid[ 4 ], bssid[ 5 ] ); /* Check for user misconfig of RSSI trigger threshold */ pMac->roam.configParam.vccRssiThreshold = - ( 0 == pMac->roam.configParam.vccRssiThreshold ) ? + ( 0 == pMac->roam.configParam.vccRssiThreshold ) ? CSR_VCC_RSSI_THRESHOLD : pMac->roam.configParam.vccRssiThreshold; pMac->roam.vccLinkQuality = eCSR_ROAM_LINK_QUAL_POOR_IND; /* Check for user misconfig of UL MAC Loss trigger threshold */ pMac->roam.configParam.vccUlMacLossThreshold = - ( 0 == pMac->roam.configParam.vccUlMacLossThreshold ) ? + ( 0 == pMac->roam.configParam.vccUlMacLossThreshold ) ? CSR_VCC_UL_MAC_LOSS_THRESHOLD : pMac->roam.configParam.vccUlMacLossThreshold; #if defined WLAN_FEATURE_NEIGHBOR_ROAMING { @@ -13806,7 +14520,7 @@ static void csrRoamLinkDown(tpAniSirGlobal pMac, tANI_U32 sessionId) smsLog(pMac, LOGE, FL(" session %d not found "), sessionId); return; } - + //Only to handle the case for Handover on infra link if( eCSR_BSS_TYPE_INFRASTRUCTURE != pSession->connectedProfile.BSSType ) { @@ -13816,7 +14530,12 @@ static void csrRoamLinkDown(tpAniSirGlobal pMac, tANI_U32 sessionId) * Incase of station mode, immediately stop data transmission whenever * link down is detected. */ - if (csrRoamIsStaMode(pMac, sessionId)) { + if (csrRoamIsStaMode(pMac, sessionId) + && !CSR_IS_ROAM_SUBSTATE_DISASSOC_HO(pMac, sessionId) +#ifdef WLAN_FEATURE_VOWIFI_11R + && !csrRoamIs11rAssoc(pMac) +#endif + ) { smsLog(pMac, LOG1, FL("Inform Link lost for session %d"), sessionId); csrRoamCallCallback(pMac, sessionId, NULL, 0, eCSR_ROAM_LOSTLINK, eCSR_ROAM_RESULT_LOSTLINK); @@ -13829,10 +14548,10 @@ static void csrRoamLinkDown(tpAniSirGlobal pMac, tANI_U32 sessionId) csrNeighborRoamIndicateDisconnect(pMac, sessionId); #endif - //Remove this code once SLM_Sessionization is supported + //Remove this code once SLM_Sessionization is supported //BMPS_WORKAROUND_NOT_NEEDED - if(!IS_FEATURE_SUPPORTED_BY_FW(SLM_SESSIONIZATION) && - csrIsInfraApStarted( pMac ) && + if(!IS_FEATURE_SUPPORTED_BY_FW(SLM_SESSIONIZATION) && + csrIsInfraApStarted( pMac ) && pMac->roam.configParam.doBMPSWorkaround) { pMac->roam.configParam.doBMPSWorkaround = 0; @@ -13869,9 +14588,9 @@ void csrRoamTlStatsTimerHandler(void *pv) if(pMac->roam.tlStatsReqInfo.periodicity) { //start timer - status = palTimerStart(pMac->hHdd, pMac->roam.tlStatsReqInfo.hTlStatsTimer, - pMac->roam.tlStatsReqInfo.periodicity * PAL_TIMER_TO_MS_UNIT, eANI_BOOLEAN_FALSE); - if(!HAL_STATUS_SUCCESS(status)) + status = vos_timer_start(&pMac->roam.tlStatsReqInfo.hTlStatsTimer, + pMac->roam.tlStatsReqInfo.periodicity); + if (!HAL_STATUS_SUCCESS(status)) { smsLog(pMac, LOGE, FL("csrRoamTlStatsTimerHandler:cannot start TlStatsTimer timer")); return; @@ -13890,7 +14609,7 @@ void csrRoamPeStatsTimerHandler(void *pv) pPeStatsReqListEntry->timerRunning = FALSE; if( pPeStatsReqListEntry->timerStopFailed == TRUE ) { - // If we entered here, meaning the timer could not be successfully + // If we entered here, meaning the timer could not be successfully // stopped in csrRoamRemoveEntryFromPeStatsReqList(). So do it here. /* Destroy the timer */ @@ -13901,14 +14620,14 @@ void csrRoamPeStatsTimerHandler(void *pv) } // Free the entry - palFreeMemory(pMac->hHdd, pPeStatsReqListEntry); + vos_mem_free(pPeStatsReqListEntry); pPeStatsReqListEntry = NULL; } else { if(!pPeStatsReqListEntry->rspPending) { - status = csrSendMBStatsReqMsg(pMac, pPeStatsReqListEntry->statsMask & ~(1 << eCsrGlobalClassDStats), + status = csrSendMBStatsReqMsg(pMac, pPeStatsReqListEntry->statsMask & ~(1 << eCsrGlobalClassDStats), pPeStatsReqListEntry->staId); if(!HAL_STATUS_SUCCESS(status)) { @@ -13921,7 +14640,7 @@ void csrRoamPeStatsTimerHandler(void *pv) } //send down a req - if(pPeStatsReqListEntry->periodicity && + if(pPeStatsReqListEntry->periodicity && (VOS_TIMER_STATE_STOPPED == vos_timer_getCurrentState(&pPeStatsReqListEntry->hPeStatsTimer))) { pmcQueryPowerState(pMac, &powerState, NULL, NULL); @@ -13941,7 +14660,7 @@ void csrRoamPeStatsTimerHandler(void *pv) } //start timer vosStatus = vos_timer_start( &pPeStatsReqListEntry->hPeStatsTimer, pPeStatsReqListEntry->periodicity ); - if ( !VOS_IS_STATUS_SUCCESS( vosStatus ) ) + if ( !VOS_IS_STATUS_SUCCESS( vosStatus ) ) { smsLog(pMac, LOGE, FL("csrRoamPeStatsTimerHandler:cannot start hPeStatsTimer timer")); return; @@ -13961,16 +14680,16 @@ void csrRoamStatsClientTimerHandler(void *pv) // TODO Stats fix for multisession //start the timer vosStatus = vos_timer_start( &pStaEntry->timer, pStaEntry->periodicity ); - - if ( !VOS_IS_STATUS_SUCCESS( vosStatus ) ) + + if ( !VOS_IS_STATUS_SUCCESS( vosStatus ) ) { smsLog(pStaEntry->pMac, LOGE, FL("csrGetStatistics:cannot start StatsClient timer")); } -#endif +#endif } #if 0 //send up the stats report - csrRoamReportStatistics(pStaEntry->pMac, pStaEntry->statsMask, pStaEntry->callback, + csrRoamReportStatistics(pStaEntry->pMac, pStaEntry->statsMask, pStaEntry->callback, pStaEntry->staId, pStaEntry->pContext); #endif } @@ -13981,18 +14700,18 @@ eHalStatus csrSendMBStatsReqMsg( tpAniSirGlobal pMac, tANI_U32 statsMask, tANI_U { tAniGetPEStatsReq *pMsg; eHalStatus status = eHAL_STATUS_SUCCESS; - status = palAllocateMemory(pMac->hHdd, (void **)&pMsg, sizeof(tAniGetPEStatsReq)); - if ( !HAL_STATUS_SUCCESS(status) ) + pMsg = vos_mem_malloc(sizeof(tAniGetPEStatsReq)); + if ( NULL == pMsg ) { smsLog(pMac, LOG1, " csrSendMBStatsReqMsg: failed to allocate mem for stats req "); - return status; + return eHAL_STATUS_FAILURE; } // need to initiate a stats request to PE pMsg->msgType = pal_cpu_to_be16((tANI_U16)eWNI_SME_GET_STATISTICS_REQ); pMsg->msgLen = (tANI_U16)sizeof(tAniGetPEStatsReq); pMsg->staId = staId; pMsg->statsMask = statsMask; - status = palSendMBMessage(pMac->hHdd, pMsg ); + status = palSendMBMessage(pMac->hHdd, pMsg ); if(!HAL_STATUS_SUCCESS(status)) { smsLog(pMac, LOG1, " csrSendMBStatsReqMsg: failed to send down the stats req "); @@ -14011,8 +14730,9 @@ void csrRoamStatsRspProcessor(tpAniSirGlobal pMac, tSirSmeRsp *pSirMsg) tANI_U8 *pStats = NULL; tANI_U32 length = 0; v_PVOID_t pvosGCtx; - v_S7_t rssi = 0; - tANI_U32 *pRssi = NULL; + v_S7_t rssi = 0, snr = 0; + tANI_U32 *pRssi = NULL, *pSnr = NULL; + tANI_U32 linkCapacity; pSmeStatsRsp = (tAniGetPEStatsRsp *)pSirMsg; if(pSmeStatsRsp->rc) { @@ -14021,8 +14741,8 @@ void csrRoamStatsRspProcessor(tpAniSirGlobal pMac, tSirSmeRsp *pSirMsg) } tempMask = pSmeStatsRsp->statsMask; pStats = ((tANI_U8 *)&pSmeStatsRsp->statsMask) + sizeof(pSmeStatsRsp->statsMask); - /* subtract all statistics from this length, and after processing the entire - * 'stat' part of the message, if the length is not zero, then rssi is piggy packed + /* subtract all statistics from this length, and after processing the entire + * 'stat' part of the message, if the length is not zero, then rssi is piggy packed * in this 'stats' message. */ length = pSmeStatsRsp->msgLen - sizeof(tAniGetPEStatsRsp); @@ -14035,45 +14755,29 @@ void csrRoamStatsRspProcessor(tpAniSirGlobal pMac, tSirSmeRsp *pSirMsg) { case eCsrSummaryStats: smsLog( pMac, LOG2, FL("csrRoamStatsRspProcessor:summary stats")); - status = palCopyMemory(pMac->hHdd, (tANI_U8 *)&pMac->roam.summaryStatsInfo, - pStats, sizeof(tCsrSummaryStatsInfo)); - if(!HAL_STATUS_SUCCESS(status)) - { - smsLog( pMac, LOGW, FL("csrRoamStatsRspProcessor:failed to copy summary stats")); - } + vos_mem_copy((tANI_U8 *)&pMac->roam.summaryStatsInfo, + pStats, sizeof(tCsrSummaryStatsInfo)); pStats += sizeof(tCsrSummaryStatsInfo); length -= sizeof(tCsrSummaryStatsInfo); break; case eCsrGlobalClassAStats: smsLog( pMac, LOG2, FL("csrRoamStatsRspProcessor:ClassA stats")); - status = palCopyMemory(pMac->hHdd, (tANI_U8 *)&pMac->roam.classAStatsInfo, - pStats, sizeof(tCsrGlobalClassAStatsInfo)); - if(!HAL_STATUS_SUCCESS(status)) - { - smsLog( pMac, LOGW, FL("csrRoamStatsRspProcessor:failed to copy ClassA stats")); - } + vos_mem_copy((tANI_U8 *)&pMac->roam.classAStatsInfo, + pStats, sizeof(tCsrGlobalClassAStatsInfo)); pStats += sizeof(tCsrGlobalClassAStatsInfo); length -= sizeof(tCsrGlobalClassAStatsInfo); break; case eCsrGlobalClassBStats: smsLog( pMac, LOG2, FL("csrRoamStatsRspProcessor:ClassB stats")); - status = palCopyMemory(pMac->hHdd, (tANI_U8 *)&pMac->roam.classBStatsInfo, - pStats, sizeof(tCsrGlobalClassBStatsInfo)); - if(!HAL_STATUS_SUCCESS(status)) - { - smsLog( pMac, LOGW, FL("csrRoamStatsRspProcessor:failed to copy ClassB stats")); - } + vos_mem_copy((tANI_U8 *)&pMac->roam.classBStatsInfo, + pStats, sizeof(tCsrGlobalClassBStatsInfo)); pStats += sizeof(tCsrGlobalClassBStatsInfo); length -= sizeof(tCsrGlobalClassBStatsInfo); break; case eCsrGlobalClassCStats: smsLog( pMac, LOG2, FL("csrRoamStatsRspProcessor:ClassC stats")); - status = palCopyMemory(pMac->hHdd, (tANI_U8 *)&pMac->roam.classCStatsInfo, - pStats, sizeof(tCsrGlobalClassCStatsInfo)); - if(!HAL_STATUS_SUCCESS(status)) - { - smsLog( pMac, LOGW, FL("csrRoamStatsRspProcessor:failed to copy ClassC stats")); - } + vos_mem_copy((tANI_U8 *)&pMac->roam.classCStatsInfo, + pStats, sizeof(tCsrGlobalClassCStatsInfo)); pStats += sizeof(tCsrGlobalClassCStatsInfo); length -= sizeof(tCsrGlobalClassCStatsInfo); break; @@ -14081,8 +14785,8 @@ void csrRoamStatsRspProcessor(tpAniSirGlobal pMac, tSirSmeRsp *pSirMsg) smsLog( pMac, LOG2, FL("csrRoamStatsRspProcessor:PerSta stats")); if( CSR_MAX_STA > pSmeStatsRsp->staId ) { - status = palCopyMemory(pMac->hHdd, (tANI_U8 *)&pMac->roam.perStaStatsInfo[pSmeStatsRsp->staId], - pStats, sizeof(tCsrPerStaStatsInfo)); + vos_mem_copy((tANI_U8 *)&pMac->roam.perStaStatsInfo[pSmeStatsRsp->staId], + pStats, sizeof(tCsrPerStaStatsInfo)); } else { @@ -14110,21 +14814,49 @@ void csrRoamStatsRspProcessor(tpAniSirGlobal pMac, tSirSmeRsp *pSirMsg) { pRssi = (tANI_U32*)pStats; rssi = (v_S7_t)*pRssi; + pStats += sizeof(tANI_U32); + length -= sizeof(tANI_U32); } else { /* If riva is not sending rssi, continue to use the hack */ rssi = RSSI_HACK_BMPS; } + WDA_UpdateRssiBmps(pvosGCtx, pSmeStatsRsp->staId, rssi); -post_update: - //make sure to update the pe stats req list + + if (length != 0) + { + linkCapacity = *(tANI_U32*)pStats; + pStats += sizeof(tANI_U32); + length -= sizeof(tANI_U32); + } + else + { + linkCapacity = 0; + } + + WDA_UpdateLinkCapacity(pvosGCtx, pSmeStatsRsp->staId, linkCapacity); + + if (length != 0) + { + pSnr = (tANI_U32*)pStats; + snr = (v_S7_t)*pSnr; + } + else + { + snr = SNR_HACK_BMPS; + } + + WDA_UpdateSnrBmps(pvosGCtx, pSmeStatsRsp->staId, snr); +post_update: + //make sure to update the pe stats req list pEntry = csrRoamFindInPeStatsReqList(pMac, pSmeStatsRsp->statsMask); if(pEntry) { pPeStaEntry = GET_BASE_ADDR( pEntry, tCsrPeStatsReqInfo, link ); pPeStaEntry->rspPending = FALSE; - + } //check the one timer cases pEntry = csrRoamCheckClientReqList(pMac, pSmeStatsRsp->statsMask); @@ -14134,7 +14866,7 @@ post_update: if(pTempStaEntry->timerExpired) { //send up the stats report - csrRoamReportStatistics(pMac, pTempStaEntry->statsMask, pTempStaEntry->callback, + csrRoamReportStatistics(pMac, pTempStaEntry->statsMask, pTempStaEntry->callback, pTempStaEntry->staId, pTempStaEntry->pContext); //also remove from the client list csrRoamRemoveStatListEntry(pMac, pEntry); @@ -14182,7 +14914,7 @@ tListElem * csrRoamChecknUpdateClientReqList(tpAniSirGlobal pMac, tCsrStatsClien while( pEntry ) { pTempStaEntry = GET_BASE_ADDR( pEntry, tCsrStatsClientReqInfo, link ); - if((pTempStaEntry->requesterId == pStaEntry->requesterId) && + if((pTempStaEntry->requesterId == pStaEntry->requesterId) && (pTempStaEntry->statsMask == pStaEntry->statsMask)) { smsLog(pMac, LOG3, "csrRoamChecknUpdateClientReqList: match found"); @@ -14223,7 +14955,7 @@ tListElem * csrRoamCheckClientReqList(tpAniSirGlobal pMac, tANI_U32 statsMask) return pEntry; } eHalStatus csrRoamRegisterLinkQualityIndCallback(tpAniSirGlobal pMac, - csrRoamLinkQualityIndCallback callback, + csrRoamLinkQualityIndCallback callback, void *pContext) { pMac->roam.linkQualityIndInfo.callback = callback; @@ -14249,7 +14981,7 @@ void csrRoamVccTrigger(tpAniSirGlobal pMac) Link quality is currently binary based on OBIWAN recommended triggers Check for a change in link quality and notify client if necessary -------------------------------------------------------------------------*/ - ul_mac_loss_trigger_threshold = + ul_mac_loss_trigger_threshold = pMac->roam.configParam.vccUlMacLossThreshold; VOS_ASSERT( ul_mac_loss_trigger_threshold != 0 ); smsLog(pMac, LOGW, "csrRoamVccTrigger: UL_MAC_LOSS_THRESHOLD is %d", @@ -14269,13 +15001,13 @@ void csrRoamVccTrigger(tpAniSirGlobal pMac) if(newVccLinkQuality != pMac->roam.vccLinkQuality) { smsLog(pMac, LOGW, "csrRoamVccTrigger: link quality changed: trigger necessary"); - if(NULL != pMac->roam.linkQualityIndInfo.callback) + if(NULL != pMac->roam.linkQualityIndInfo.callback) { smsLog(pMac, LOGW, "csrRoamVccTrigger: link quality indication %d", newVccLinkQuality ); - + /* we now invoke the callback once to notify client of initial value */ - pMac->roam.linkQualityIndInfo.callback( newVccLinkQuality, + pMac->roam.linkQualityIndInfo.callback( newVccLinkQuality, pMac->roam.linkQualityIndInfo.context ); //event: EVENT_WLAN_VCC } @@ -14283,8 +15015,8 @@ void csrRoamVccTrigger(tpAniSirGlobal pMac) pMac->roam.vccLinkQuality = newVccLinkQuality; } -VOS_STATUS csrRoamVccTriggerRssiIndCallback(tHalHandle hHal, - v_U8_t rssiNotification, +VOS_STATUS csrRoamVccTriggerRssiIndCallback(tHalHandle hHal, + v_U8_t rssiNotification, void * context) { tpAniSirGlobal pMac = PMAC_STRUCT( context ); @@ -14317,19 +15049,19 @@ VOS_STATUS csrRoamVccTriggerRssiIndCallback(tHalHandle hHal, { smsLog(pMac, LOGW, "csrRoamVccTriggerRssiIndCallback: unknown rssi notification %d", rssiNotification); //Set to this so the code below won't do anything - newVccLinkQuality = pMac->roam.vccLinkQuality; + newVccLinkQuality = pMac->roam.vccLinkQuality; VOS_ASSERT(0); } if(newVccLinkQuality != pMac->roam.vccLinkQuality) { smsLog(pMac, LOGW, "csrRoamVccTriggerRssiIndCallback: link quality changed: trigger necessary"); - if(NULL != pMac->roam.linkQualityIndInfo.callback) + if(NULL != pMac->roam.linkQualityIndInfo.callback) { smsLog(pMac, LOGW, "csrRoamVccTriggerRssiIndCallback: link quality indication %d", newVccLinkQuality); /* we now invoke the callback once to notify client of initial value */ - pMac->roam.linkQualityIndInfo.callback( newVccLinkQuality, + pMac->roam.linkQualityIndInfo.callback( newVccLinkQuality, pMac->roam.linkQualityIndInfo.context ); //event: EVENT_WLAN_VCC } @@ -14342,20 +15074,19 @@ tCsrStatsClientReqInfo * csrRoamInsertEntryIntoList( tpAniSirGlobal pMac, tCsrStatsClientReqInfo *pStaEntry) { tCsrStatsClientReqInfo *pNewStaEntry = NULL; - eHalStatus status; - //if same entity requested for same set of stats with different periodicity & + //if same entity requested for same set of stats with different periodicity & // callback update it if(NULL == csrRoamChecknUpdateClientReqList(pMac, pStaEntry, TRUE)) { - - status = palAllocateMemory(pMac->hHdd, (void **)&pNewStaEntry, sizeof(tCsrStatsClientReqInfo)); - if (!HAL_STATUS_SUCCESS(status)) + + pNewStaEntry = vos_mem_malloc(sizeof(tCsrStatsClientReqInfo)); + if (NULL == pNewStaEntry) { smsLog(pMac, LOGW, "csrRoamInsertEntryIntoList: couldn't allocate memory for the " "entry"); return NULL; } - + pNewStaEntry->callback = pStaEntry->callback; pNewStaEntry->pContext = pStaEntry->pContext; pNewStaEntry->periodicity = pStaEntry->periodicity; @@ -14365,7 +15096,7 @@ tCsrStatsClientReqInfo * csrRoamInsertEntryIntoList( tpAniSirGlobal pMac, pNewStaEntry->pMac = pStaEntry->pMac; pNewStaEntry->staId = pStaEntry->staId; pNewStaEntry->timerExpired = pStaEntry->timerExpired; - + csrLLInsertTail( pStaList, &pNewStaEntry->link, LL_ACCESS_LOCK ); } return pNewStaEntry; @@ -14376,15 +15107,14 @@ tCsrPeStatsReqInfo * csrRoamInsertEntryIntoPeStatsReqList( tpAniSirGlobal pMac, tCsrPeStatsReqInfo *pStaEntry) { tCsrPeStatsReqInfo *pNewStaEntry = NULL; - eHalStatus status; - status = palAllocateMemory(pMac->hHdd, (void **)&pNewStaEntry, sizeof(tCsrPeStatsReqInfo)); - if (!HAL_STATUS_SUCCESS(status)) + pNewStaEntry = vos_mem_malloc(sizeof(tCsrPeStatsReqInfo)); + if (NULL == pNewStaEntry) { smsLog(pMac, LOGW, "csrRoamInsertEntryIntoPeStatsReqList: couldn't allocate memory for the " "entry"); return NULL; } - + pNewStaEntry->hPeStatsTimer = pStaEntry->hPeStatsTimer; pNewStaEntry->numClient = pStaEntry->numClient; pNewStaEntry->periodicity = pStaEntry->periodicity; @@ -14393,25 +15123,25 @@ tCsrPeStatsReqInfo * csrRoamInsertEntryIntoPeStatsReqList( tpAniSirGlobal pMac, pNewStaEntry->staId = pStaEntry->staId; pNewStaEntry->timerRunning = pStaEntry->timerRunning; pNewStaEntry->rspPending = pStaEntry->rspPending; - + csrLLInsertTail( pStaList, &pNewStaEntry->link, LL_ACCESS_LOCK ); return pNewStaEntry; } -eHalStatus csrGetRssi(tpAniSirGlobal pMac, - tCsrRssiCallback callback, +eHalStatus csrGetRssi(tpAniSirGlobal pMac, + tCsrRssiCallback callback, tANI_U8 staId, tCsrBssid bssId, void *pContext, void* pVosContext) -{ +{ eHalStatus status = eHAL_STATUS_SUCCESS; vos_msg_t msg; tANI_U32 sessionId; tAniGetRssiReq *pMsg; smsLog(pMac, LOG2, FL("called")); - status = palAllocateMemory(pMac->hHdd, (void **)&pMsg, sizeof(tAniGetRssiReq)); - if ( !HAL_STATUS_SUCCESS(status) ) + pMsg = vos_mem_malloc(sizeof(tAniGetRssiReq)); + if ( NULL == pMsg ) { smsLog(pMac, LOGE, " csrGetRssi: failed to allocate mem for req "); - return status; + return eHAL_STATUS_FAILURE; } csrRoamGetSessionIdFromBSSID(pMac, (tCsrBssid *)bssId, &sessionId); @@ -14428,13 +15158,56 @@ eHalStatus csrGetRssi(tpAniSirGlobal pMac, if(VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, &msg)) { smsLog(pMac, LOGE, " csrGetRssi failed to post msg to self "); - palFreeMemory(pMac->hHdd, (void *)pMsg); + vos_mem_free((void *)pMsg); status = eHAL_STATUS_FAILURE; } smsLog(pMac, LOG2, FL("returned")); return status; } +eHalStatus csrGetSnr(tpAniSirGlobal pMac, + tCsrSnrCallback callback, + tANI_U8 staId, tCsrBssid bssId, + void *pContext) +{ + eHalStatus status = eHAL_STATUS_SUCCESS; + vos_msg_t msg; + tANI_U32 sessionId; + + tAniGetSnrReq *pMsg; + + smsLog(pMac, LOG2, FL("called")); + + pMsg =(tAniGetSnrReq *)vos_mem_malloc(sizeof(tAniGetSnrReq)); + if (NULL == pMsg ) + { + smsLog(pMac, LOGE, "%s: failed to allocate mem for req",__func__); + return status; + } + + csrRoamGetSessionIdFromBSSID(pMac, (tCsrBssid *)bssId, &sessionId); + + pMsg->msgType = pal_cpu_to_be16((tANI_U16)eWNI_SME_GET_SNR_REQ); + pMsg->msgLen = (tANI_U16)sizeof(tAniGetSnrReq); + pMsg->sessionId = sessionId; + pMsg->staId = staId; + pMsg->snrCallback = callback; + pMsg->pDevContext = pContext; + msg.type = eWNI_SME_GET_SNR_REQ; + msg.bodyptr = pMsg; + msg.reserved = 0; + + if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, &msg)) + { + smsLog(pMac, LOGE, "%s failed to post msg to self", __func__); + vos_mem_free((v_VOID_t *)pMsg); + status = eHAL_STATUS_FAILURE; + } + + smsLog(pMac, LOG2, FL("returned")); + return status; +} + #if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR) eHalStatus csrGetRoamRssi(tpAniSirGlobal pMac, tCsrRssiCallback callback, @@ -14443,11 +15216,11 @@ eHalStatus csrGetRoamRssi(tpAniSirGlobal pMac, eHalStatus status = eHAL_STATUS_SUCCESS; tAniGetRssiReq *pMsg; - status = palAllocateMemory(pMac->hHdd, (void **)&pMsg, sizeof(tAniGetRssiReq)); - if ( !HAL_STATUS_SUCCESS(status) ) + pMsg = vos_mem_malloc(sizeof(tAniGetRssiReq)); + if ( NULL == pMsg ) { smsLog(pMac, LOGE, " csrGetRoamRssi: failed to allocate mem for req"); - return status; + return eHAL_STATUS_FAILURE; } // need to initiate a stats request to PE pMsg->msgType = pal_cpu_to_be16((tANI_U16)eWNI_SME_GET_ROAM_RSSI_REQ); @@ -14467,15 +15240,74 @@ eHalStatus csrGetRoamRssi(tpAniSirGlobal pMac, } #endif -eHalStatus csrGetStatistics(tpAniSirGlobal pMac, eCsrStatsRequesterType requesterId, - tANI_U32 statsMask, - tCsrStatsCallback callback, - tANI_U32 periodicity, tANI_BOOLEAN cache, - tANI_U8 staId, void *pContext) +#if defined(FEATURE_WLAN_CCX) && defined(FEATURE_WLAN_CCX_UPLOAD) +eHalStatus csrGetTsmStats(tpAniSirGlobal pMac, + tCsrTsmStatsCallback callback, + tANI_U8 staId, + tCsrBssid bssId, + void *pContext, + void* pVosContext, + tANI_U8 tid) +{ + eHalStatus status = eHAL_STATUS_SUCCESS; + tAniGetTsmStatsReq *pMsg = NULL; + pMsg = vos_mem_malloc(sizeof(tAniGetTsmStatsReq)); + if (!pMsg) + { + smsLog(pMac, LOGE, "csrGetTsmStats: failed to allocate mem for req"); + return status; + } + // need to initiate a stats request to PE + pMsg->msgType = pal_cpu_to_be16((tANI_U16)eWNI_SME_GET_TSM_STATS_REQ); + pMsg->msgLen = (tANI_U16)sizeof(tAniGetTsmStatsReq); + pMsg->staId = staId; + pMsg->tid = tid; + vos_mem_copy(pMsg->bssId, bssId, sizeof(tSirMacAddr)); + pMsg->tsmStatsCallback = callback; + pMsg->pDevContext = pContext; + pMsg->pVosContext = pVosContext; + status = palSendMBMessage(pMac->hHdd, pMsg ); + if(!HAL_STATUS_SUCCESS(status)) + { + smsLog(pMac, LOG1, " csrGetTsmStats: failed to send down the rssi req"); + //pMsg is freed by palSendMBMessage + status = eHAL_STATUS_FAILURE; + } + return status; +} +#endif /* FEATURE_WLAN_CCX && FEATURE_WLAN_CCX_UPLOAD */ + +/* --------------------------------------------------------------------------- + \fn csrGetTLSTAState + \helper function to get teh TL STA State whenever the function is called. + + \param staId - The staID to be passed to the TL + to get the relevant TL STA State + \return the state as tANI_U16 + ---------------------------------------------------------------------------*/ +tANI_U16 csrGetTLSTAState(tpAniSirGlobal pMac, tANI_U8 staId) { + WLANTL_STAStateType tlSTAState; + tlSTAState = WLANTL_STA_INIT; + + //request TL for STA State + if ( !VOS_IS_STATUS_SUCCESS(WLANTL_GetSTAState(pMac->roam.gVosContext, staId, &tlSTAState)) ) + { + smsLog(pMac, LOGE, FL("csrGetTLSTAState:couldn't get the STA state from TL")); + } + + return tlSTAState; +} + +eHalStatus csrGetStatistics(tpAniSirGlobal pMac, eCsrStatsRequesterType requesterId, + tANI_U32 statsMask, + tCsrStatsCallback callback, + tANI_U32 periodicity, tANI_BOOLEAN cache, + tANI_U8 staId, void *pContext) +{ tCsrStatsClientReqInfo staEntry; tCsrStatsClientReqInfo *pStaEntry = NULL; - tCsrPeStatsReqInfo *pPeStaEntry = NULL; + tCsrPeStatsReqInfo *pPeStaEntry = NULL; tListElem *pEntry = NULL; tANI_BOOLEAN found = FALSE; eHalStatus status = eHAL_STATUS_SUCCESS; @@ -14522,14 +15354,14 @@ eHalStatus csrGetStatistics(tpAniSirGlobal pMac, eCsrStatsRequesterType requeste } } - //check if we need to stop the tl stats timer too + //check if we need to stop the tl stats timer too pMac->roam.tlStatsReqInfo.numClient--; if(!pMac->roam.tlStatsReqInfo.numClient) { if(pMac->roam.tlStatsReqInfo.timerRunning) { - status = palTimerStop(pMac->hHdd, pMac->roam.tlStatsReqInfo.hTlStatsTimer); - if(!HAL_STATUS_SUCCESS(status)) + status = vos_timer_stop(&pMac->roam.tlStatsReqInfo.hTlStatsTimer); + if (!HAL_STATUS_SUCCESS(status)) { smsLog(pMac, LOGE, FL("csrGetStatistics:cannot stop TlStatsTimer timer")); return eHAL_STATUS_FAILURE; @@ -14539,7 +15371,7 @@ eHalStatus csrGetStatistics(tpAniSirGlobal pMac, eCsrStatsRequesterType requeste pMac->roam.tlStatsReqInfo.timerRunning = FALSE; } vos_timer_stop( &pStaEntry->timer ); - // Destroy the vos timer... + // Destroy the vos timer... vosStatus = vos_timer_destroy( &pStaEntry->timer ); if ( !VOS_IS_STATUS_SUCCESS( vosStatus ) ) { @@ -14550,7 +15382,7 @@ eHalStatus csrGetStatistics(tpAniSirGlobal pMac, eCsrStatsRequesterType requeste return eHAL_STATUS_SUCCESS; } } - + if(cache && !periodicity) { //return the cached stats @@ -14566,18 +15398,18 @@ eHalStatus csrGetStatistics(tpAniSirGlobal pMac, eCsrStatsRequesterType requeste staEntry.staId = staId; staEntry.pMac = pMac; staEntry.timerExpired = FALSE; - - + + //if periodic report requested with non cached result from PE/TL if(periodicity) { - + //if looking for stats from PE if(statsMask & ~(1 << eCsrGlobalClassDStats)) { - + //check if same request made already & waiting for rsp - pPeStaEntry = csrRoamCheckPeStatsReqList(pMac, statsMask & ~(1 << eCsrGlobalClassDStats), + pPeStaEntry = csrRoamCheckPeStatsReqList(pMac, statsMask & ~(1 << eCsrGlobalClassDStats), periodicity, &found, staId); if(!pPeStaEntry) { @@ -14588,7 +15420,7 @@ eHalStatus csrGetStatistics(tpAniSirGlobal pMac, eCsrStatsRequesterType requeste { staEntry.pPeStaEntry = pPeStaEntry; } - + } //request stats from TL rightaway if requested by client, update tlStatsReqInfo if needed if(statsMask & (1 << eCsrGlobalClassDStats)) @@ -14599,11 +15431,11 @@ eHalStatus csrGetStatistics(tpAniSirGlobal pMac, eCsrStatsRequesterType requeste } else { - + //update periodicity if(pMac->roam.tlStatsReqInfo.periodicity) { - pMac->roam.tlStatsReqInfo.periodicity = + pMac->roam.tlStatsReqInfo.periodicity = CSR_ROAM_MIN(periodicity, pMac->roam.tlStatsReqInfo.periodicity); } else @@ -14614,11 +15446,11 @@ eHalStatus csrGetStatistics(tpAniSirGlobal pMac, eCsrStatsRequesterType requeste { pMac->roam.tlStatsReqInfo.periodicity = CSR_MIN_TL_STAT_QUERY_PERIOD; } - + if(!pMac->roam.tlStatsReqInfo.timerRunning) { pTlStats = (WLANTL_TRANSFER_STA_TYPE *)vos_mem_malloc(sizeof(WLANTL_TRANSFER_STA_TYPE)); - if(NULL != pTlStats) + if (NULL != pTlStats) { //req TL for class D stats if(WLANTL_GetStatistics(pMac->roam.gVosContext, pTlStats, staId)) @@ -14641,9 +15473,9 @@ eHalStatus csrGetStatistics(tpAniSirGlobal pMac, eCsrStatsRequesterType requeste if(pMac->roam.tlStatsReqInfo.periodicity) { //start timer - status = palTimerStart(pMac->hHdd, pMac->roam.tlStatsReqInfo.hTlStatsTimer, - pMac->roam.tlStatsReqInfo.periodicity * PAL_TIMER_TO_MS_UNIT, eANI_BOOLEAN_FALSE); - if(!HAL_STATUS_SUCCESS(status)) + status = vos_timer_start(&pMac->roam.tlStatsReqInfo.hTlStatsTimer, + pMac->roam.tlStatsReqInfo.periodicity); + if (!HAL_STATUS_SUCCESS(status)) { smsLog(pMac, LOGE, FL("csrGetStatistics:cannot start TlStatsTimer timer")); return eHAL_STATUS_FAILURE; @@ -14654,7 +15486,7 @@ eHalStatus csrGetStatistics(tpAniSirGlobal pMac, eCsrStatsRequesterType requeste } pMac->roam.tlStatsReqInfo.numClient++; } - + insertInClientList = TRUE; } //if one time report requested with non cached result from PE/TL @@ -14676,7 +15508,7 @@ eHalStatus csrGetStatistics(tpAniSirGlobal pMac, eCsrStatsRequesterType requeste if(statsMask & (1 << eCsrGlobalClassDStats)) { pTlStats = (WLANTL_TRANSFER_STA_TYPE *)vos_mem_malloc(sizeof(WLANTL_TRANSFER_STA_TYPE)); - if(NULL != pTlStats) + if (NULL != pTlStats) { //req TL for class D stats if(!VOS_IS_STATUS_SUCCESS(WLANTL_GetStatistics(pMac->roam.gVosContext, pTlStats, staId))) @@ -14697,7 +15529,7 @@ eHalStatus csrGetStatistics(tpAniSirGlobal pMac, eCsrStatsRequesterType requeste } } - //if looking for stats from TL only + //if looking for stats from TL only if(!insertInClientList) { //return the stats @@ -14706,7 +15538,7 @@ eHalStatus csrGetStatistics(tpAniSirGlobal pMac, eCsrStatsRequesterType requeste } if(insertInClientList) { - pStaEntry = csrRoamInsertEntryIntoList(pMac, &pMac->roam.statsClientReqList, &staEntry); + pStaEntry = csrRoamInsertEntryIntoList(pMac, &pMac->roam.statsClientReqList, &staEntry); if(!pStaEntry) { //msg @@ -14717,7 +15549,7 @@ eHalStatus csrGetStatistics(tpAniSirGlobal pMac, eCsrStatsRequesterType requeste //Init & start timer if needed if(periodicity) { - vosStatus = vos_timer_init( &pStaEntry->timer, VOS_TIMER_TYPE_SW, + vosStatus = vos_timer_init( &pStaEntry->timer, VOS_TIMER_TYPE_SW, csrRoamStatsClientTimerHandler, pStaEntry ); if ( !VOS_IS_STATUS_SUCCESS( vosStatus ) ) { @@ -14725,7 +15557,7 @@ eHalStatus csrGetStatistics(tpAniSirGlobal pMac, eCsrStatsRequesterType requeste return eHAL_STATUS_FAILURE; } vosStatus = vos_timer_start( &pStaEntry->timer, periodicity ); - if ( !VOS_IS_STATUS_SUCCESS( vosStatus ) ) + if ( !VOS_IS_STATUS_SUCCESS( vosStatus ) ) { smsLog(pMac, LOGE, FL("csrGetStatistics:cannot start StatsClient timer")); return eHAL_STATUS_FAILURE; @@ -14758,18 +15590,14 @@ csrRoamScanOffloadPopulateMacHeader(tpAniSirGlobal pMac, pMacHdr->fc.subType = subType; /* Prepare Address 1 */ - palCopyMemory( pMac->hHdd, - (tANI_U8 *) pMacHdr->da, - (tANI_U8 *) peerAddr, - sizeof( tSirMacAddr )); + vos_mem_copy((tANI_U8 *) pMacHdr->da, (tANI_U8 *) peerAddr, + sizeof( tSirMacAddr )); sirCopyMacAddr(pMacHdr->sa,selfMacAddr); /* Prepare Address 3 */ - palCopyMemory( pMac->hHdd, - (tANI_U8 *) pMacHdr->bssId, - (tANI_U8 *) peerAddr, - sizeof( tSirMacAddr )); + vos_mem_copy((tANI_U8 *) pMacHdr->bssId, (tANI_U8 *) peerAddr, + sizeof( tSirMacAddr )); return statusCode; } /*** csrRoamScanOffloadPopulateMacHeader() ***/ @@ -14790,7 +15618,7 @@ csrRoamScanOffloadPrepareProbeReqTemplate(tpAniSirGlobal pMac, /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ - palZeroMemory( pMac->hHdd, ( tANI_U8* )&pr, sizeof( pr ) ); + vos_mem_set(( tANI_U8* )&pr, sizeof( pr ), 0); PopulateDot11fSuppRates( pMac, nChannelNum, &pr.SuppRates,NULL); @@ -14833,11 +15661,11 @@ csrRoamScanOffloadPrepareProbeReqTemplate(tpAniSirGlobal pMac, nBytes = nPayload + sizeof( tSirMacMgmtHdr ); /* Prepare outgoing frame*/ - palZeroMemory( pMac->hHdd, pFrame, nBytes ); + vos_mem_set(pFrame, nBytes , 0); nSirStatus = csrRoamScanOffloadPopulateMacHeader( pMac, pFrame, SIR_MAC_MGMT_FRAME, - SIR_MAC_MGMT_PROBE_REQ, bssId ,selfMacAddr); + SIR_MAC_MGMT_PROBE_REQ, bssId,selfMacAddr); if ( eSIR_SUCCESS != nSirStatus ) { @@ -14860,7 +15688,8 @@ csrRoamScanOffloadPrepareProbeReqTemplate(tpAniSirGlobal pMac, else if ( DOT11F_WARNED( nStatus ) ) { VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, - "There were warnings while packing a Probe Request (0x%08x).\n" ); + "There were warnings while packing a Probe Request (0x%08x).\n", + nStatus ); } *pusLen = nPayload + sizeof(tSirMacMgmtHdr); @@ -14873,17 +15702,26 @@ eHalStatus csrRoamOffloadScan(tpAniSirGlobal pMac, tANI_U8 command, tANI_U8 reas tSirRoamOffloadScanReq *pRequestBuf; tpCsrNeighborRoamControlInfo pNeighborRoamInfo = &pMac->roam.neighborRoamInfo; tCsrRoamSession *pSession; - tANI_U8 i,num_channels = 0, ucDot11Mode; + tANI_U8 i,j,num_channels = 0, ucDot11Mode; tANI_U8 *ChannelList = NULL; tANI_U32 sessionId; eHalStatus status = eHAL_STATUS_SUCCESS; tpCsrChannelInfo currChannelListInfo; + tANI_U32 host_channels = 0; + tANI_U8 ChannelCacheStr[128] = {0}; currChannelListInfo = &pNeighborRoamInfo->roamChannelInfo.currentChannelListInfo; - if (0 == pMac->roam.configParam.isRoamOffloadScanEnabled) + if (0 == csrRoamIsRoamOffloadScanEnabled(pMac)) { + smsLog( pMac, LOGE,"isRoamOffloadScanEnabled not set"); return eHAL_STATUS_FAILURE; } + + if ((VOS_TRUE == bRoamScanOffloadStarted) && (ROAM_SCAN_OFFLOAD_START == command)) + { + smsLog( pMac, LOGE,"Roam Scan Offload is already started"); + return eHAL_STATUS_FAILURE; + } status = csrRoamGetSessionIdFromBSSID(pMac, (tCsrBssid *)pNeighborRoamInfo->currAPbssid, &sessionId); @@ -14914,14 +15752,15 @@ eHalStatus csrRoamOffloadScan(tpAniSirGlobal pMac, tANI_U8 command, tANI_U8 reas return eHAL_STATUS_FAILED_ALLOC; } - vos_mem_zero(pRequestBuf,sizeof(tSirRoamOffloadScanReq)); + vos_mem_zero(pRequestBuf, sizeof(tSirRoamOffloadScanReq)); /* If command is STOP, then pass down ScanOffloadEnabled as Zero.This will handle the case of * host driver reloads, but Riva still up and running*/ if(command == ROAM_SCAN_OFFLOAD_STOP) pRequestBuf->RoamScanOffloadEnabled = 0; else pRequestBuf->RoamScanOffloadEnabled = pMac->roam.configParam.isRoamOffloadScanEnabled; - vos_mem_copy(pRequestBuf->ConnectedNetwork.currAPbssid, pNeighborRoamInfo->currAPbssid, + vos_mem_copy(pRequestBuf->ConnectedNetwork.currAPbssid, + pNeighborRoamInfo->currAPbssid, sizeof(tCsrBssid)); pRequestBuf->ConnectedNetwork.ssId.length = pMac->roam.roamSession[sessionId].connectedProfile.SSID.length; @@ -14950,6 +15789,9 @@ eHalStatus csrRoamOffloadScan(tpAniSirGlobal pMac, tANI_U8 command, tANI_U8 reas pNeighborRoamInfo->cfgParams.maxChannelScanTime; pRequestBuf->EmptyRefreshScanPeriod = pNeighborRoamInfo->cfgParams.emptyScanRefreshPeriod; + /* MAWC feature */ + pRequestBuf->MAWCEnabled = + pMac->roam.configParam.MAWCEnabled; #ifdef FEATURE_WLAN_CCX pRequestBuf->IsCCXEnabled = pMac->roam.configParam.isCcxIniFeatureEnabled; #endif @@ -15009,53 +15851,68 @@ eHalStatus csrRoamOffloadScan(tpAniSirGlobal pMac, tANI_U8 command, tANI_U8 reas /* If CCX is enabled, and a neighbor Report is received,then * Ignore the INI Channels or the Occupied Channel List. Consider * the channels in the neighbor list sent by the CCX AP.*/ - if (currChannelListInfo->numOfChannels != 0) - { - ChannelList = currChannelListInfo->ChannelList; - for (i=0;inumOfChannels;i++) - { - if(!CSR_IS_CHANNEL_DFS(*ChannelList) && *ChannelList) + if (currChannelListInfo->numOfChannels != 0) + { + ChannelList = currChannelListInfo->ChannelList; + for (i=0;inumOfChannels;i++) { - pRequestBuf->ConnectedNetwork.ChannelCache[num_channels++] = *ChannelList; + if(!CSR_IS_CHANNEL_DFS(*ChannelList) && *ChannelList) + { + pRequestBuf->ConnectedNetwork.ChannelCache[num_channels++] = *ChannelList; + } + ChannelList++; } - ChannelList++; - } - pRequestBuf->ConnectedNetwork.ChannelCount = num_channels; - pRequestBuf->ChannelCacheType = CHANNEL_LIST_STATIC; - } - } + pRequestBuf->ConnectedNetwork.ChannelCount = num_channels; + pRequestBuf->ChannelCacheType = CHANNEL_LIST_DYNAMIC_UPDATE; + } + } #endif + for (i = 0, j = 0; i < pRequestBuf->ConnectedNetwork.ChannelCount; i++) + { + j += snprintf(ChannelCacheStr + j, sizeof(ChannelCacheStr) - j," %d", + pRequestBuf->ConnectedNetwork.ChannelCache[i]); + } + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_DEBUG, + "ChnlCacheType:%d, No of Chnls:%d,Channels: %s", + pRequestBuf->ChannelCacheType, + pRequestBuf->ConnectedNetwork.ChannelCount, + ChannelCacheStr); num_channels = 0; ChannelList = NULL; /* Maintain the Valid Channels List*/ - if (0 == strncmp(pMac->scan.countryCodeCurrent, "KR", 2)) + host_channels = sizeof(pMac->roam.validChannelList); + if (HAL_STATUS_SUCCESS(csrGetCfgValidChannels(pMac, pMac->roam.validChannelList, &host_channels))) { - ChannelList = pNeighborRoamInfo->cfgParams.countryChannelInfo.countryValidChannelList.ChannelList; - for(i=0; icfgParams.countryChannelInfo.countryValidChannelList.numOfChannels; i++) - { - if(!CSR_IS_CHANNEL_DFS(*ChannelList) && *ChannelList) - { - pRequestBuf->ValidChannelList[num_channels++] = *ChannelList; - } - ChannelList++; - } - pRequestBuf->ValidChannelCount = num_channels; - } else { - ChannelList = pMac->roam.validChannelList; - for(i=0; iroam.numValidChannels; i++) - { - if(!CSR_IS_CHANNEL_DFS(*ChannelList) && *ChannelList) - { - pRequestBuf->ValidChannelList[num_channels++] = *ChannelList; - } - ChannelList++; - } - pRequestBuf->ValidChannelCount = num_channels; + ChannelList = pMac->roam.validChannelList; + pMac->roam.numValidChannels = host_channels; } - pRequestBuf->MDID.mdiePresent = pMac->roam.roamSession[sessionId].connectedProfile.MDID.mdiePresent; - pRequestBuf->MDID.mobilityDomain = pMac->roam.roamSession[sessionId].connectedProfile.MDID.mobilityDomain; + else + { + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, + "%s:Failed to get the valid channel list", __func__); + vos_mem_free(pRequestBuf); + return eHAL_STATUS_FAILURE; + } + for(i=0; iroam.numValidChannels; i++) + { + if(!CSR_IS_CHANNEL_DFS(*ChannelList) && *ChannelList) + { + pRequestBuf->ValidChannelList[num_channels++] = *ChannelList; + } + ChannelList++; + } + pRequestBuf->ValidChannelCount = num_channels; + + pRequestBuf->MDID.mdiePresent = + pMac->roam.roamSession[sessionId].connectedProfile.MDID.mdiePresent; + pRequestBuf->MDID.mobilityDomain = + pMac->roam.roamSession[sessionId].connectedProfile.MDID.mobilityDomain; pRequestBuf->sessionId = sessionId; + pRequestBuf->nProbes = pMac->roam.configParam.nProbes; + + pRequestBuf->HomeAwayTime = pMac->roam.configParam.nRoamScanHomeAwayTime; + /*Prepare a probe request for 2.4GHz band and one for 5GHz band*/ ucDot11Mode = (tANI_U8) csrTranslateToWNICfgDot11Mode(pMac, csrFindBestPhyMode( pMac, pMac->roam.configParam.phyMode )); @@ -15068,22 +15925,45 @@ eHalStatus csrRoamOffloadScan(tpAniSirGlobal pMac, tANI_U8 command, tANI_U8 reas pRequestBuf->p5GProbeTemplate, &pRequestBuf->us5GProbeTemplateLen, pSession); - msg.type = WDA_START_ROAM_CANDIDATE_LOOKUP_REQ; + msg.type = WDA_ROAM_SCAN_OFFLOAD_REQ; msg.reserved = 0; msg.bodyptr = pRequestBuf; if (!VOS_IS_STATUS_SUCCESS(vos_mq_post_message(VOS_MODULE_ID_WDA, &msg))) { - VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, "%s: Not able to post WDA_START_ROAM_CANDIDATE_LOOKUP_REQ message to WDA", __func__); - vos_mem_free(pRequestBuf); - return eHAL_STATUS_FAILURE; + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, "%s: Not able to post WDA_ROAM_SCAN_OFFLOAD_REQ message to WDA", __func__); + vos_mem_free(pRequestBuf); + return eHAL_STATUS_FAILURE; } + else + { + if (ROAM_SCAN_OFFLOAD_START == command) + bRoamScanOffloadStarted = VOS_TRUE; + else if (ROAM_SCAN_OFFLOAD_STOP == command) + bRoamScanOffloadStarted = VOS_FALSE; + } VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_DEBUG, "Roam Scan Offload Command %d, Reason %d", command, reason); return status; } + +eHalStatus csrRoamOffloadScanRspHdlr(tpAniSirGlobal pMac, tANI_U8 reason) +{ + switch(reason) + { + case 0: + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_DEBUG, "Rsp for Roam Scan Offload with failure status"); + break; + case REASON_OS_REQUESTED_ROAMING_NOW: + csrNeighborRoamProceedWithHandoffReq(pMac); + break; + default: + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, "Rsp for Roam Scan Offload with reason %d", reason); + } + return eHAL_STATUS_SUCCESS; +} #endif -tCsrPeStatsReqInfo * csrRoamCheckPeStatsReqList(tpAniSirGlobal pMac, tANI_U32 statsMask, +tCsrPeStatsReqInfo * csrRoamCheckPeStatsReqList(tpAniSirGlobal pMac, tANI_U32 statsMask, tANI_U32 periodicity, tANI_BOOLEAN *pFound, tANI_U8 staId) { tANI_BOOLEAN found = FALSE; @@ -15094,14 +15974,14 @@ tCsrPeStatsReqInfo * csrRoamCheckPeStatsReqList(tpAniSirGlobal pMac, tANI_U32 s VOS_STATUS vosStatus; tPmcPowerState powerState; *pFound = FALSE; - + pStaEntry = csrRoamFindInPeStatsReqList(pMac, statsMask); if(pStaEntry) { pTempStaEntry = GET_BASE_ADDR( pStaEntry, tCsrPeStatsReqInfo, link ); if(pTempStaEntry->periodicity) { - pTempStaEntry->periodicity = + pTempStaEntry->periodicity = CSR_ROAM_MIN(periodicity, pTempStaEntry->periodicity); } else @@ -15113,7 +15993,7 @@ tCsrPeStatsReqInfo * csrRoamCheckPeStatsReqList(tpAniSirGlobal pMac, tANI_U32 s } else { - palZeroMemory(pMac->hHdd, &staEntry, sizeof(tCsrPeStatsReqInfo)); + vos_mem_set(&staEntry, sizeof(tCsrPeStatsReqInfo), 0); staEntry.numClient = 1; staEntry.periodicity = periodicity; staEntry.pMac = pMac; @@ -15121,7 +16001,7 @@ tCsrPeStatsReqInfo * csrRoamCheckPeStatsReqList(tpAniSirGlobal pMac, tANI_U32 s staEntry.staId = staId; staEntry.statsMask = statsMask; staEntry.timerRunning = FALSE; - pTempStaEntry = csrRoamInsertEntryIntoPeStatsReqList(pMac, &pMac->roam.peStatsReqList, &staEntry); + pTempStaEntry = csrRoamInsertEntryIntoPeStatsReqList(pMac, &pMac->roam.peStatsReqList, &staEntry); if(!pTempStaEntry) { //msg @@ -15147,7 +16027,7 @@ tCsrPeStatsReqInfo * csrRoamCheckPeStatsReqList(tpAniSirGlobal pMac, tANI_U32 s if(!pTempStaEntry->timerRunning) { //send down a req in case of one time req, for periodic ones wait for timer to expire - if(!pTempStaEntry->rspPending && + if(!pTempStaEntry->rspPending && !pTempStaEntry->periodicity) { status = csrSendMBStatsReqMsg(pMac, statsMask & ~(1 << eCsrGlobalClassDStats), staId); @@ -15164,8 +16044,8 @@ tCsrPeStatsReqInfo * csrRoamCheckPeStatsReqList(tpAniSirGlobal pMac, tANI_U32 s { if(!found) { - - vosStatus = vos_timer_init( &pTempStaEntry->hPeStatsTimer, VOS_TIMER_TYPE_SW, + + vosStatus = vos_timer_init( &pTempStaEntry->hPeStatsTimer, VOS_TIMER_TYPE_SW, csrRoamPeStatsTimerHandler, pTempStaEntry ); if ( !VOS_IS_STATUS_SUCCESS( vosStatus ) ) { @@ -15176,7 +16056,7 @@ tCsrPeStatsReqInfo * csrRoamCheckPeStatsReqList(tpAniSirGlobal pMac, tANI_U32 s //start timer smsLog(pMac, LOG1, "csrRoamCheckPeStatsReqList:peStatsTimer period %d", pTempStaEntry->periodicity); vosStatus = vos_timer_start( &pTempStaEntry->hPeStatsTimer, pTempStaEntry->periodicity ); - if ( !VOS_IS_STATUS_SUCCESS( vosStatus ) ) + if ( !VOS_IS_STATUS_SUCCESS( vosStatus ) ) { smsLog(pMac, LOGE, FL("csrRoamCheckPeStatsReqList:cannot start hPeStatsTimer timer")); return NULL; @@ -15197,7 +16077,7 @@ static void csrRoamRemoveStatListEntry(tpAniSirGlobal pMac, tListElem *pEntry) { if(csrLLRemoveEntry(&pMac->roam.statsClientReqList, pEntry, LL_ACCESS_LOCK)) { - palFreeMemory(pMac->hHdd, GET_BASE_ADDR( pEntry, tCsrStatsClientReqInfo, link )); + vos_mem_free(GET_BASE_ADDR( pEntry, tCsrStatsClientReqInfo, link )); } } } @@ -15223,11 +16103,11 @@ void csrRoamRemoveEntryFromPeStatsReqList(tpAniSirGlobal pMac, tCsrPeStatsReqInf if(pTempStaEntry->timerRunning) { vosStatus = vos_timer_stop( &pTempStaEntry->hPeStatsTimer ); - /* If we are not able to stop the timer here, just remove - * the entry from the linked list. Destroy the timer object + /* If we are not able to stop the timer here, just remove + * the entry from the linked list. Destroy the timer object * and free the memory in the timer CB */ - if( vosStatus == VOS_STATUS_SUCCESS ) + if ( vosStatus == VOS_STATUS_SUCCESS ) { /* the timer is successfully stopped */ pTempStaEntry->timerRunning = FALSE; @@ -15241,18 +16121,18 @@ void csrRoamRemoveEntryFromPeStatsReqList(tpAniSirGlobal pMac, tCsrPeStatsReqInf } else { - // the timer could not be stopped. Hence destroy and free the + // the timer could not be stopped. Hence destroy and free the // memory for the PE stat entry in the timer CB. pTempStaEntry->timerStopFailed = TRUE; } - } + } if(csrLLRemoveEntry(&pMac->roam.peStatsReqList, pEntry, LL_ACCESS_LOCK)) { // Only free the memory if we could stop the timer successfully if(!pTempStaEntry->timerStopFailed) { - palFreeMemory(pMac->hHdd, pTempStaEntry); + vos_mem_free(pTempStaEntry); pTempStaEntry = NULL; } break; @@ -15288,14 +16168,13 @@ void csrRoamSaveStatsFromTl(tpAniSirGlobal pMac, WLANTL_TRANSFER_STA_TYPE *pTlSt } -void csrRoamReportStatistics(tpAniSirGlobal pMac, tANI_U32 statsMask, +void csrRoamReportStatistics(tpAniSirGlobal pMac, tANI_U32 statsMask, tCsrStatsCallback callback, tANI_U8 staId, void *pContext) { tANI_U8 stats[500]; tANI_U8 *pStats = NULL; tANI_U32 tempMask = 0; tANI_U8 counter = 0; - eHalStatus status = eHAL_STATUS_FAILURE; if(!callback) { smsLog(pMac, LOGE, FL("csrRoamReportStatistics:cannot report callback NULL")); @@ -15317,62 +16196,38 @@ void csrRoamReportStatistics(tpAniSirGlobal pMac, tANI_U32 statsMask, { case eCsrSummaryStats: smsLog( pMac, LOG2, FL("csrRoamReportStatistics:summary stats")); - status = palCopyMemory(pMac->hHdd, pStats, (tANI_U8 *)&pMac->roam.summaryStatsInfo, - sizeof(tCsrSummaryStatsInfo)); - if(!HAL_STATUS_SUCCESS(status)) - { - smsLog( pMac, LOG1, FL("csrRoamReportStatistics:failed to copy summary stats")); - } + vos_mem_copy( pStats, (tANI_U8 *)&pMac->roam.summaryStatsInfo, + sizeof(tCsrSummaryStatsInfo)); pStats += sizeof(tCsrSummaryStatsInfo); break; case eCsrGlobalClassAStats: smsLog( pMac, LOG2, FL("csrRoamReportStatistics:ClassA stats")); - status = palCopyMemory(pMac->hHdd, pStats, (tANI_U8 *)&pMac->roam.classAStatsInfo, - sizeof(tCsrGlobalClassAStatsInfo)); - if(!HAL_STATUS_SUCCESS(status)) - { - smsLog( pMac, LOG1, FL("csrRoamReportStatistics:failed to copy ClassA stats")); - } + vos_mem_copy( pStats, (tANI_U8 *)&pMac->roam.classAStatsInfo, + sizeof(tCsrGlobalClassAStatsInfo)); pStats += sizeof(tCsrGlobalClassAStatsInfo); break; case eCsrGlobalClassBStats: smsLog( pMac, LOG2, FL("csrRoamReportStatistics:ClassB stats")); - status = palCopyMemory(pMac->hHdd, pStats, (tANI_U8 *)&pMac->roam.classBStatsInfo, - sizeof(tCsrGlobalClassBStatsInfo)); - if(!HAL_STATUS_SUCCESS(status)) - { - smsLog( pMac, LOG1, FL("csrRoamReportStatistics:failed to copy ClassB stats")); - } + vos_mem_copy( pStats, (tANI_U8 *)&pMac->roam.classBStatsInfo, + sizeof(tCsrGlobalClassBStatsInfo)); pStats += sizeof(tCsrGlobalClassBStatsInfo); break; case eCsrGlobalClassCStats: smsLog( pMac, LOG2, FL("csrRoamReportStatistics:ClassC stats")); - status = palCopyMemory(pMac->hHdd, pStats, (tANI_U8 *)&pMac->roam.classCStatsInfo, - sizeof(tCsrGlobalClassCStatsInfo)); - if(!HAL_STATUS_SUCCESS(status)) - { - smsLog( pMac, LOG1, FL("csrRoamReportStatistics:failed to copy ClassC stats")); - } + vos_mem_copy( pStats, (tANI_U8 *)&pMac->roam.classCStatsInfo, + sizeof(tCsrGlobalClassCStatsInfo)); pStats += sizeof(tCsrGlobalClassCStatsInfo); break; case eCsrGlobalClassDStats: smsLog( pMac, LOG2, FL("csrRoamReportStatistics:ClassD stats")); - status = palCopyMemory(pMac->hHdd, pStats, (tANI_U8 *)&pMac->roam.classDStatsInfo, - sizeof(tCsrGlobalClassDStatsInfo)); - if(!HAL_STATUS_SUCCESS(status)) - { - smsLog( pMac, LOG1, FL("csrRoamReportStatistics:failed to copy ClassD stats")); - } + vos_mem_copy( pStats, (tANI_U8 *)&pMac->roam.classDStatsInfo, + sizeof(tCsrGlobalClassDStatsInfo)); pStats += sizeof(tCsrGlobalClassDStatsInfo); break; case eCsrPerStaStats: smsLog( pMac, LOG2, FL("csrRoamReportStatistics:PerSta stats")); - status = palCopyMemory(pMac->hHdd, pStats, (tANI_U8 *)&pMac->roam.perStaStatsInfo[staId], - sizeof(tCsrPerStaStatsInfo)); - if(!HAL_STATUS_SUCCESS(status)) - { - smsLog( pMac, LOG1, FL("csrRoamReportStatistics:failed to copy PerSta stats")); - } + vos_mem_copy( pStats, (tANI_U8 *)&pMac->roam.perStaStatsInfo[staId], + sizeof(tCsrPerStaStatsInfo)); pStats += sizeof(tCsrPerStaStatsInfo); break; default: @@ -15407,7 +16262,7 @@ eHalStatus csrRoamDeregStatisticsReq(tpAniSirGlobal pMac) { pTempStaEntry = GET_BASE_ADDR( pPrevEntry, tCsrStatsClientReqInfo, link ); //send up the stats report - csrRoamReportStatistics(pMac, pTempStaEntry->statsMask, pTempStaEntry->callback, + csrRoamReportStatistics(pMac, pTempStaEntry->statsMask, pTempStaEntry->callback, pTempStaEntry->staId, pTempStaEntry->pContext); csrRoamRemoveStatListEntry(pMac, pPrevEntry); } @@ -15421,14 +16276,14 @@ eHalStatus csrRoamDeregStatisticsReq(tpAniSirGlobal pMac) csrRoamRemoveEntryFromPeStatsReqList(pMac, pTempStaEntry->pPeStaEntry); } } - //check if we need to stop the tl stats timer too + //check if we need to stop the tl stats timer too pMac->roam.tlStatsReqInfo.numClient--; if(!pMac->roam.tlStatsReqInfo.numClient) { if(pMac->roam.tlStatsReqInfo.timerRunning) { - status = palTimerStop(pMac->hHdd, pMac->roam.tlStatsReqInfo.hTlStatsTimer); - if(!HAL_STATUS_SUCCESS(status)) + status = vos_timer_stop(&pMac->roam.tlStatsReqInfo.hTlStatsTimer); + if (!HAL_STATUS_SUCCESS(status)) { smsLog(pMac, LOGE, FL("csrRoamDeregStatisticsReq:cannot stop TlStatsTimer timer")); //we will continue @@ -15440,19 +16295,19 @@ eHalStatus csrRoamDeregStatisticsReq(tpAniSirGlobal pMac) if (pTempStaEntry->periodicity) { //While creating StaEntry in csrGetStatistics, - //Initializing and starting timer only when periodicity is set. + //Initializing and starting timer only when periodicity is set. //So Stop and Destroy timer only when periodicity is set. - + vos_timer_stop( &pTempStaEntry->timer ); - // Destroy the vos timer... + // Destroy the vos timer... vosStatus = vos_timer_destroy( &pTempStaEntry->timer ); if ( !VOS_IS_STATUS_SUCCESS( vosStatus ) ) { smsLog(pMac, LOGE, FL("csrRoamDeregStatisticsReq:failed to destroy Client req timer")); } } - - + + pPrevEntry = pEntry; pEntry = csrLLNext( &pMac->roam.statsClientReqList, pEntry, LL_ACCESS_NOLOCK ); } @@ -15461,15 +16316,15 @@ eHalStatus csrRoamDeregStatisticsReq(tpAniSirGlobal pMac) { pTempStaEntry = GET_BASE_ADDR( pPrevEntry, tCsrStatsClientReqInfo, link ); //send up the stats report - csrRoamReportStatistics(pMac, pTempStaEntry->statsMask, pTempStaEntry->callback, + csrRoamReportStatistics(pMac, pTempStaEntry->statsMask, pTempStaEntry->callback, pTempStaEntry->staId, pTempStaEntry->pContext); csrRoamRemoveStatListEntry(pMac, pPrevEntry); } return status; - + } -eHalStatus csrIsFullPowerNeeded( tpAniSirGlobal pMac, tSmeCmd *pCommand, +eHalStatus csrIsFullPowerNeeded( tpAniSirGlobal pMac, tSmeCmd *pCommand, tRequestFullPowerReason *pReason, tANI_BOOLEAN *pfNeedPower ) { @@ -15561,12 +16416,12 @@ eHalStatus csrIsFullPowerNeeded( tpAniSirGlobal pMac, tSmeCmd *pCommand, #if 0 // TODO : Session Specific info pConnectBssDesc if( csrIsBssIdEqual( pMac, &pScanResult->Result.BssDescriptor, pMac->roam.pConnectBssDesc ) && - csrIsSsidEqual( pMac, pMac->roam.pConnectBssDesc, + csrIsSsidEqual( pMac, pMac->roam.pConnectBssDesc, &pScanResult->Result.BssDescriptor, (tDot11fBeaconIEs *)( pScanResult->Result.pvIes ) ) ) { // Check to see if the Auth type has changed in the Profile. If so, we don't want to Reassociate - // with Authenticating first. To force this, stop the current association (Disassociate) and - // then re 'Join' the AP, wihch will force an Authentication (with the new Auth type) followed by + // with Authenticating first. To force this, stop the current association (Disassociate) and + // then re 'Join' the AP, wihch will force an Authentication (with the new Auth type) followed by // a new Association. if(csrIsSameProfile(pMac, &pMac->roam.connectedProfile, pProfile)) { @@ -15598,7 +16453,7 @@ eHalStatus csrIsFullPowerNeeded( tpAniSirGlobal pMac, tSmeCmd *pCommand, #ifdef FEATURE_WLAN_TDLS else if( eSmeCommandTdlsAddPeer == pCommand->command ) { - //TDLS link is getting established. need full power + //TDLS link is getting established. need full power fNeedFullPower = eANI_BOOLEAN_TRUE; reason = eSME_FULL_PWR_NEEDED_BY_TDLS_PEER_SETUP; } @@ -15889,7 +16744,7 @@ eHalStatus csrRoamUpdateAPWPSIE( tpAniSirGlobal pMac, tANI_U32 sessionId, tSirAP eHalStatus status = eHAL_STATUS_SUCCESS; tSirUpdateAPWPSIEsReq *pMsg; tANI_U8 *pBuf = NULL, *wTmpBuf = NULL; - + tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, sessionId ); if (NULL == pSession) { @@ -15899,24 +16754,27 @@ eHalStatus csrRoamUpdateAPWPSIE( tpAniSirGlobal pMac, tANI_U32 sessionId, tSirAP do { - status = palAllocateMemory( pMac->hHdd, (void **)&pMsg, sizeof(tSirUpdateAPWPSIEsReq) ); - if (!HAL_STATUS_SUCCESS(status)) break; - palZeroMemory( pMac->hHdd, pMsg, sizeof(tSirUpdateAPWPSIEsReq) ); + pMsg = vos_mem_malloc(sizeof(tSirUpdateAPWPSIEsReq)); + if ( NULL == pMsg ) return eHAL_STATUS_FAILURE; + vos_mem_set(pMsg, sizeof(tSirUpdateAPWPSIEsReq), 0); pMsg->messageType = pal_cpu_to_be16((tANI_U16)eWNI_SME_UPDATE_APWPSIE_REQ); pBuf = (tANI_U8 *)&pMsg->transactionId; + VOS_ASSERT(pBuf); + wTmpBuf = pBuf; // transactionId *pBuf = 0; *( pBuf + 1 ) = 0; pBuf += sizeof(tANI_U16); // bssId - palCopyMemory( pMac->hHdd, (tSirMacAddr *)pBuf, &pSession->selfMacAddr, sizeof(tSirMacAddr) ); + vos_mem_copy((tSirMacAddr *)pBuf, &pSession->selfMacAddr, + sizeof(tSirMacAddr) ); pBuf += sizeof(tSirMacAddr); //sessionId *pBuf++ = (tANI_U8)sessionId; // APWPSIEs - palCopyMemory( pMac->hHdd, (tSirAPWPSIEs *)pBuf, pAPWPSIES, sizeof(tSirAPWPSIEs)); + vos_mem_copy((tSirAPWPSIEs *)pBuf, pAPWPSIES, sizeof(tSirAPWPSIEs)); pBuf += sizeof(tSirAPWPSIEs); pMsg->length = pal_cpu_to_be16((tANI_U16)(sizeof(tANI_U32) + (pBuf - wTmpBuf))); //msg_header + msg status = palSendMBMessage(pMac->hHdd, pMsg); @@ -15936,9 +16794,9 @@ eHalStatus csrRoamUpdateWPARSNIEs( tpAniSirGlobal pMac, tANI_U32 sessionId, tSir } do { - status = palAllocateMemory( pMac->hHdd, (void **)&pMsg, sizeof(tSirUpdateAPWPARSNIEsReq) ); - if (!HAL_STATUS_SUCCESS(status)) break; - palZeroMemory( pMac->hHdd, pMsg, sizeof( tSirUpdateAPWPARSNIEsReq ) ); + pMsg = vos_mem_malloc(sizeof(tSirUpdateAPWPARSNIEsReq)); + if ( NULL == pMsg ) return eHAL_STATUS_FAILURE; + vos_mem_set(pMsg, sizeof( tSirUpdateAPWPARSNIEsReq ), 0); pMsg->messageType = pal_cpu_to_be16((tANI_U16)eWNI_SME_SET_APWPARSNIEs_REQ); pBuf = (tANI_U8 *)&pMsg->transactionId; wTmpBuf = pBuf; @@ -15946,15 +16804,17 @@ eHalStatus csrRoamUpdateWPARSNIEs( tpAniSirGlobal pMac, tANI_U32 sessionId, tSir *pBuf = 0; *( pBuf + 1 ) = 0; pBuf += sizeof(tANI_U16); + VOS_ASSERT(pBuf); // bssId - palCopyMemory( pMac->hHdd, (tSirMacAddr *)pBuf, &pSession->selfMacAddr, sizeof(tSirMacAddr) ); + vos_mem_copy((tSirMacAddr *)pBuf, &pSession->selfMacAddr, + sizeof(tSirMacAddr)); pBuf += sizeof(tSirMacAddr); // sessionId *pBuf++ = (tANI_U8)sessionId; - + // APWPARSNIEs - palCopyMemory( pMac->hHdd, (tSirRSNie *)pBuf, pAPSirRSNie, sizeof(tSirRSNie)); + vos_mem_copy((tSirRSNie *)pBuf, pAPSirRSNie, sizeof(tSirRSNie)); pBuf += sizeof(tSirRSNie); pMsg->length = pal_cpu_to_be16((tANI_U16)(sizeof(tANI_U32 ) + (pBuf - wTmpBuf))); //msg_header + msg status = palSendMBMessage(pMac->hHdd, pMsg); @@ -15972,7 +16832,7 @@ eHalStatus csrRoamIssueFTPreauthReq(tHalHandle hHal, tANI_U32 sessionId, tpSirBs tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, sessionId ); auth_req_len = sizeof(tSirFTPreAuthReq); pftPreAuthReq = (tpSirFTPreAuthReq)vos_mem_malloc(auth_req_len); - if (pftPreAuthReq == NULL) + if (NULL == pftPreAuthReq) { smsLog(pMac, LOGE, FL("Memory allocation for FT Preauth request failed")); return eHAL_STATUS_RESOURCES; @@ -15988,31 +16848,33 @@ eHalStatus csrRoamIssueFTPreauthReq(tHalHandle hHal, tANI_U32 sessionId, tpSirBs pftPreAuthReq->preAuthchannelNum = pBssDescription->channelId; - palCopyMemory(pMac->hHdd, (void *)&pftPreAuthReq->currbssId, (void *)pSession->connectedProfile.bssid, sizeof(tSirMacAddr)); - palCopyMemory(pMac->hHdd, (void *)&pftPreAuthReq->preAuthbssId, (void *)pBssDescription->bssId, sizeof(tSirMacAddr)); + vos_mem_copy((void *)&pftPreAuthReq->currbssId, + (void *)pSession->connectedProfile.bssid, sizeof(tSirMacAddr)); + vos_mem_copy((void *)&pftPreAuthReq->preAuthbssId, + (void *)pBssDescription->bssId, sizeof(tSirMacAddr)); #ifdef WLAN_FEATURE_VOWIFI_11R - if (csrRoamIs11rAssoc(pMac) && + if (csrRoamIs11rAssoc(pMac) && (pMac->roam.roamSession[sessionId].connectedProfile.AuthType != eCSR_AUTH_TYPE_OPEN_SYSTEM)) { pftPreAuthReq->ft_ies_length = (tANI_U16)pMac->ft.ftSmeContext.auth_ft_ies_length; - palCopyMemory(pMac->hHdd, pftPreAuthReq->ft_ies, pMac->ft.ftSmeContext.auth_ft_ies, - pMac->ft.ftSmeContext.auth_ft_ies_length); + vos_mem_copy(pftPreAuthReq->ft_ies, pMac->ft.ftSmeContext.auth_ft_ies, + pMac->ft.ftSmeContext.auth_ft_ies_length); } else #endif { - pftPreAuthReq->ft_ies_length = 0; + pftPreAuthReq->ft_ies_length = 0; } vos_mem_copy(pftPreAuthReq->pbssDescription, pBssDescription, sizeof(pBssDescription->length) + pBssDescription->length); - pftPreAuthReq->length = pal_cpu_to_be16(auth_req_len); + pftPreAuthReq->length = pal_cpu_to_be16(auth_req_len); return palSendMBMessage(pMac->hHdd, pftPreAuthReq); } /*-------------------------------------------------------------------------- - * This will receive and process the FT Pre Auth Rsp from the current - * associated ap. - * + * This will receive and process the FT Pre Auth Rsp from the current + * associated ap. + * * This will invoke the hdd call back. This is so that hdd can now * send the FTIEs from the Auth Rsp (Auth Seq 2) to the supplicant. ------------------------------------------------------------------------*/ @@ -16020,7 +16882,7 @@ void csrRoamFTPreAuthRspProcessor( tHalHandle hHal, tpSirFTPreAuthRsp pFTPreAuth { tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); eHalStatus status = eHAL_STATUS_SUCCESS; -#ifdef FEATURE_WLAN_LFR +#if defined(FEATURE_WLAN_LFR) || defined(FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_CCX_UPLOAD) tCsrRoamInfo roamInfo; #endif @@ -16044,31 +16906,48 @@ void csrRoamFTPreAuthRspProcessor( tHalHandle hHal, tpSirFTPreAuthRsp pFTPreAuth pMac->ft.ftSmeContext.FTState = eFT_AUTH_COMPLETE; // Indicate SME QoS module the completion of Preauth success. This will trigger the creation of RIC IEs pMac->ft.ftSmeContext.psavedFTPreAuthRsp = pFTPreAuthRsp; - sme_QosCsrEventInd(pMac, pMac->ft.ftSmeContext.smeSessionId, SME_QOS_CSR_PREAUTH_SUCCESS_IND, NULL); - /* Start the pre-auth reassoc interval timer with a period of 400ms. When this expires, + /* No need to notify qos module if this is a non 11r roam*/ + if (csrRoamIs11rAssoc(pMac)) + { + sme_QosCsrEventInd(pMac, pMac->ft.ftSmeContext.smeSessionId, SME_QOS_CSR_PREAUTH_SUCCESS_IND, NULL); + } + /* Start the pre-auth reassoc interval timer with a period of 400ms. When this expires, * actual transition from the current to handoff AP is triggered */ - status = palTimerStart(pMac->hHdd, pMac->ft.ftSmeContext.preAuthReassocIntvlTimer, - 60 * PAL_TIMER_TO_MS_UNIT, - eANI_BOOLEAN_FALSE); + status = vos_timer_start(&pMac->ft.ftSmeContext.preAuthReassocIntvlTimer, + 60); if (eHAL_STATUS_SUCCESS != status) { smsLog(pMac, LOGE, FL("Preauth reassoc interval timer start failed to start with status %d"), status); return; } // Save the received response - palCopyMemory(pMac->hHdd, (void *)&pMac->ft.ftSmeContext.preAuthbssId, (void *)pFTPreAuthRsp->preAuthbssId, sizeof(tCsrBssid)); + vos_mem_copy((void *)&pMac->ft.ftSmeContext.preAuthbssId, + (void *)pFTPreAuthRsp->preAuthbssId, sizeof(tCsrBssid)); if (csrRoamIs11rAssoc(pMac)) - csrRoamCallCallback(pMac, pFTPreAuthRsp->smeSessionId, NULL, 0, + csrRoamCallCallback(pMac, pFTPreAuthRsp->smeSessionId, NULL, 0, eCSR_ROAM_FT_RESPONSE, eCSR_ROAM_RESULT_NONE); - // Currently we dont do anything special for CCX connection. +#if defined(FEATURE_WLAN_CCX) && defined(FEATURE_WLAN_CCX_UPLOAD) + if (csrRoamIsCCXAssoc(pMac)) + { + /* read TSF */ + csrRoamReadTSF(pMac, (tANI_U8 *)roamInfo.timestamp); + // Save the bssid from the received response + vos_mem_copy((void *)&roamInfo.bssid, + (void *)pFTPreAuthRsp->preAuthbssId, sizeof(tCsrBssid)); + csrRoamCallCallback(pMac, pFTPreAuthRsp->smeSessionId, &roamInfo, + 0, eCSR_ROAM_CCKM_PREAUTH_NOTIFY, 0); + } +#endif /* FEATURE_WLAN_CCX && FEATURE_WLAN_CCX_UPLOAD */ + #ifdef FEATURE_WLAN_LFR - // If Legacy Fast Roaming is enabled, signal the supplicant + // If Legacy Fast Roaming is enabled, signal the supplicant // So he can send us a PMK-ID for this candidate AP. if (csrRoamIsFastRoamEnabled(pMac, CSR_SESSION_ID_INVALID)) { - // Save the bssid from the received response - palCopyMemory(pMac->hHdd, (void *)&roamInfo.bssid, (void *)pFTPreAuthRsp->preAuthbssId, sizeof(tCsrBssid)); + // Save the bssid from the received response + vos_mem_copy((void *)&roamInfo.bssid, + (void *)pFTPreAuthRsp->preAuthbssId, sizeof(tCsrBssid)); csrRoamCallCallback(pMac, pFTPreAuthRsp->smeSessionId, &roamInfo, 0, eCSR_ROAM_PMK_NOTIFY, 0); } @@ -16085,7 +16964,7 @@ void csrRoamJoinRetryTimerHandler(void *pv) tpAniSirGlobal pMac = pInfo->pMac; tANI_U32 sessionId = pInfo->sessionId; tCsrRoamSession *pSession; - + if( CSR_IS_SESSION_VALID(pMac, sessionId) ) { smsLog( pMac, LOGE, FL( " retrying the last roam profile on session %d" ), sessionId ); @@ -16103,15 +16982,15 @@ eHalStatus csrRoamStartJoinRetryTimer(tpAniSirGlobal pMac, tANI_U32 sessionId, t { eHalStatus status = eHAL_STATUS_FAILURE; tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, sessionId ); - + if(pSession->pCurRoamProfile && pSession->maxRetryCount) { smsLog(pMac, LOGE, FL(" call sessionId %d retry count %d left"), sessionId, pSession->maxRetryCount); pSession->maxRetryCount--; pSession->joinRetryTimerInfo.pMac = pMac; pSession->joinRetryTimerInfo.sessionId = (tANI_U8)sessionId; - status = palTimerStart(pMac->hHdd, pSession->hTimerJoinRetry, interval, eANI_BOOLEAN_FALSE); - if(!HAL_STATUS_SUCCESS(status)) + status = vos_timer_start(&pSession->hTimerJoinRetry, interval/PAL_TIMER_TO_MS_UNIT); + if (!HAL_STATUS_SUCCESS(status)) { smsLog(pMac, LOGE, FL(" fail to start timer status %s"), status); } @@ -16121,7 +17000,7 @@ eHalStatus csrRoamStartJoinRetryTimer(tpAniSirGlobal pMac, tANI_U32 sessionId, t smsLog(pMac, LOGE, FL(" not to start timer due to no profile or reach mac ret (%d)"), pSession->maxRetryCount); } - + return (status); } eHalStatus csrRoamStopJoinRetryTimer(tpAniSirGlobal pMac, tANI_U32 sessionId) @@ -16129,9 +17008,9 @@ eHalStatus csrRoamStopJoinRetryTimer(tpAniSirGlobal pMac, tANI_U32 sessionId) smsLog(pMac, LOGE, " csrRoamStopJoinRetryTimer"); if( CSR_IS_SESSION_VALID(pMac, sessionId) ) { - return (palTimerStop(pMac->hHdd, pMac->roam.roamSession[sessionId].hTimerJoinRetry)); + return (vos_timer_stop(&pMac->roam.roamSession[sessionId].hTimerJoinRetry)); } - + return eHAL_STATUS_SUCCESS; } #endif @@ -16171,16 +17050,13 @@ eHalStatus csrGetDefaultCountryCodeFrmNv(tpAniSirGlobal pMac, tANI_U8 *pCountry) /* read the country code from NV and use it */ if ( VOS_IS_STATUS_SUCCESS(vosStatus) ) { - palCopyMemory( pMac->hHdd, pCountry, - nvTables.defaultCountryTable.countryCode, - WNI_CFG_COUNTRY_CODE_LEN ); + vos_mem_copy(pCountry, nvTables.defaultCountryTable.countryCode, + WNI_CFG_COUNTRY_CODE_LEN); return status; } else { - palCopyMemory( pMac->hHdd, pCountry, - "XXX", - WNI_CFG_COUNTRY_CODE_LEN ); + vos_mem_copy(pCountry, "XXX", WNI_CFG_COUNTRY_CODE_LEN); status = eHAL_STATUS_FAILURE; return status; } @@ -16188,9 +17064,7 @@ eHalStatus csrGetDefaultCountryCodeFrmNv(tpAniSirGlobal pMac, tANI_U8 *pCountry) eHalStatus csrGetCurrentCountryCode(tpAniSirGlobal pMac, tANI_U8 *pCountry) { - palCopyMemory( pMac->hHdd, pCountry, - pMac->scan.countryCode11d, - WNI_CFG_COUNTRY_CODE_LEN ); + vos_mem_copy(pCountry, pMac->scan.countryCode11d, WNI_CFG_COUNTRY_CODE_LEN); return eHAL_STATUS_SUCCESS; } @@ -16206,23 +17080,19 @@ eHalStatus csrSetTxPower(tpAniSirGlobal pMac, v_U8_t sessionId, v_U8_t mW) return eHAL_STATUS_FAILURE; } - status = palAllocateMemory(pMac->hHdd, (void **)&pMsg, sizeof(tSirSetTxPowerReq)); - if (HAL_STATUS_SUCCESS(status)) + pMsg = vos_mem_malloc(sizeof(tSirSetTxPowerReq)); + if ( NULL == pMsg ) return eHAL_STATUS_FAILURE; + vos_mem_set((void *)pMsg, sizeof(tSirSetTxPowerReq), 0); + pMsg->messageType = eWNI_SME_SET_TX_POWER_REQ; + pMsg->length = sizeof(tSirSetTxPowerReq); + pMsg->mwPower = mW; + vos_mem_copy((tSirMacAddr *)pMsg->bssId, &pSession->selfMacAddr, + sizeof(tSirMacAddr)); + status = palSendMBMessage(pMac->hHdd, pMsg); + if (!HAL_STATUS_SUCCESS(status)) { - palZeroMemory(pMac->hHdd, (void *)pMsg, sizeof(tSirSetTxPowerReq)); - pMsg->messageType = eWNI_SME_SET_TX_POWER_REQ; - pMsg->length = sizeof(tSirSetTxPowerReq); - pMsg->mwPower = mW; - palCopyMemory( pMac->hHdd, - (tSirMacAddr *)pMsg->bssId, - &pSession->selfMacAddr, - sizeof(tSirMacAddr) ); - status = palSendMBMessage(pMac->hHdd, pMsg); - if (!HAL_STATUS_SUCCESS(status)) - { - smsLog(pMac, LOGE, FL(" csr set TX Power Post MSG Fail %d "), status); - //pMsg is freed by palSendMBMessage - } + smsLog(pMac, LOGE, FL(" csr set TX Power Post MSG Fail %d "), status); + //pMsg is freed by palSendMBMessage } return status; } @@ -16266,3 +17136,161 @@ tANI_BOOLEAN csrRoamIsStaMode(tpAniSirGlobal pMac, tANI_U32 sessionId) return eANI_BOOLEAN_FALSE; } + +#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD +eHalStatus csrHandoffRequest(tpAniSirGlobal pMac, + tCsrHandoffRequest *pHandoffInfo) +{ + eHalStatus status = eHAL_STATUS_SUCCESS; + vos_msg_t msg; + + tAniHandoffReq *pMsg; + pMsg = vos_mem_malloc(sizeof(tAniHandoffReq)); + if ( NULL == pMsg ) + { + smsLog(pMac, LOGE, " csrHandoffRequest: failed to allocate mem for req "); + return eHAL_STATUS_FAILURE; + } + pMsg->msgType = pal_cpu_to_be16((tANI_U16)eWNI_SME_HANDOFF_REQ); + pMsg->msgLen = (tANI_U16)sizeof(tAniHandoffReq); + pMsg->sessionId = pMac->roam.neighborRoamInfo.csrSessionId; + pMsg->channel = pHandoffInfo->channel; + vos_mem_copy(pMsg->bssid, + pHandoffInfo->bssid, + 6); + msg.type = eWNI_SME_HANDOFF_REQ; + msg.bodyptr = pMsg; + msg.reserved = 0; + if(VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, &msg)) + { + smsLog(pMac, LOGE, " csrHandoffRequest failed to post msg to self "); + vos_mem_free((void *)pMsg); + status = eHAL_STATUS_FAILURE; + } + return status; +} +#endif /* WLAN_FEATURE_ROAM_SCAN_OFFLOAD */ + +#if defined WLAN_FEATURE_RELIABLE_MCAST +eHalStatus csrEnableRMC(tpAniSirGlobal pMac, tANI_U32 sessionId) +{ + tSirSetRMCReq *pMsg = NULL; + eHalStatus status = eHAL_STATUS_SUCCESS; + tCsrRoamSession *pSession = CSR_GET_SESSION(pMac, sessionId); + + if (!pSession) + { + smsLog(pMac, LOGE, FL(" session %d not found "), sessionId); + return eHAL_STATUS_FAILURE; + } + + pMsg = vos_mem_malloc(sizeof(tSirSetRMCReq)); + if (NULL == pMsg) + { + vos_mem_set((void *)pMsg, sizeof(tSirSetRMCReq), 0); + pMsg->msgType = eWNI_SME_ENABLE_RMC_REQ; + pMsg->msgLen = sizeof(tSirSetRMCReq); + vos_mem_copy((v_U8_t *)pMsg->mcastTransmitter, + &pSession->selfMacAddr, sizeof(tSirMacAddr)); + + status = palSendMBMessage(pMac->hHdd, pMsg); + if (!HAL_STATUS_SUCCESS(status)) + { + smsLog(pMac, LOGE, FL(" csr enable RMC Post MSG Fail %d "), status); + //pMsg is freed by palSendMBMessage + } + } + return status; +} + +eHalStatus csrDisableRMC(tpAniSirGlobal pMac, tANI_U32 sessionId) +{ + tSirSetRMCReq *pMsg = NULL; + eHalStatus status = eHAL_STATUS_SUCCESS; + tCsrRoamSession *pSession = CSR_GET_SESSION(pMac, sessionId); + + if (!pSession) + { + smsLog(pMac, LOGE, FL(" session %d not found "), sessionId); + return eHAL_STATUS_FAILURE; + } + + pMsg = vos_mem_malloc(sizeof(tSirSetRMCReq)); + if (NULL == pMsg) + { + vos_mem_set((void *)pMsg, sizeof(tSirSetRMCReq), 0); + pMsg->msgType = eWNI_SME_DISABLE_RMC_REQ; + pMsg->msgLen = sizeof(tSirSetRMCReq); + vos_mem_copy((v_U8_t *)pMsg->mcastTransmitter, + &pSession->selfMacAddr, sizeof(tSirMacAddr)); + + status = palSendMBMessage(pMac->hHdd, pMsg); + if (!HAL_STATUS_SUCCESS(status)) + { + smsLog(pMac, LOGE, FL(" csr disable RMC Post MSG Fail %d "), status); + //pMsg is freed by palSendMBMessage + } + } + return status; +} + +#endif /* defined WLAN_FEATURE_RELIABLE_MCAST */ + +#if defined(FEATURE_WLAN_CCX) && defined(FEATURE_WLAN_CCX_UPLOAD) +/* --------------------------------------------------------------------------- + \fn csrSetCCKMIe + \brief This function stores the CCKM IE passed by the supplicant + in a place holder data structure and this IE will be packed inside + reassociation request + \param pMac - pMac global structure + \param sessionId - Current session id + \param pCckmIe - pointer to CCKM IE data + \param ccKmIeLen - length of the CCKM IE + \- return Success or failure + -------------------------------------------------------------------------*/ +VOS_STATUS csrSetCCKMIe(tpAniSirGlobal pMac, const tANI_U8 sessionId, + const tANI_U8 *pCckmIe, + const tANI_U8 ccKmIeLen) +{ + eHalStatus status = eHAL_STATUS_SUCCESS; + tCsrRoamSession *pSession = CSR_GET_SESSION(pMac, sessionId); + if (!pSession) + { + smsLog(pMac, LOGE, FL(" session %d not found "), sessionId); + return eHAL_STATUS_FAILURE; + } + vos_mem_copy(pSession->suppCckmIeInfo.cckmIe, pCckmIe, + ccKmIeLen); + pSession->suppCckmIeInfo.cckmIeLen = ccKmIeLen; + return status; +} +/* --------------------------------------------------------------------------- + \fn csrRoamReadTSF + \brief This function reads the TSF; and also add the time elapsed since + last beacon or probe response reception from the hand off AP to arrive at + the latest TSF value. + \param pMac - pMac global structure + \param pTimestamp - output TSF timestamp + \- return Success or failure + -------------------------------------------------------------------------*/ +VOS_STATUS csrRoamReadTSF(tpAniSirGlobal pMac, tANI_U8 *pTimestamp) +{ + eHalStatus status = eHAL_STATUS_SUCCESS; + tCsrNeighborRoamBSSInfo handoffNode; + tANI_U32 timer_diff = 0; + tANI_U32 timeStamp[2]; + tpSirBssDescription pBssDescription = NULL; + csrNeighborRoamGetHandoffAPInfo(pMac, &handoffNode); + pBssDescription = handoffNode.pBssDescription; + // Get the time diff in milli seconds + timer_diff = vos_timer_get_system_time() - pBssDescription->scanSysTimeMsec; + // Convert msec to micro sec timer + timer_diff = (tANI_U32)(timer_diff * SYSTEM_TIME_MSEC_TO_USEC); + timeStamp[0] = pBssDescription->timeStamp[0]; + timeStamp[1] = pBssDescription->timeStamp[1]; + UpdateCCKMTSF(&(timeStamp[0]), &(timeStamp[1]), &timer_diff); + vos_mem_copy(pTimestamp, (void *) &timeStamp[0], + sizeof (tANI_U32) * 2); + return status; +} +#endif /*FEATURE_WLAN_CCX && FEATURE_WLAN_CCX_UPLOAD */ diff --git a/CORE/SME/src/csr/csrApiScan.c b/CORE/SME/src/csr/csrApiScan.c index 479c1e810b0a..6c6303accc6e 100644 --- a/CORE/SME/src/csr/csrApiScan.c +++ b/CORE/SME/src/csr/csrApiScan.c @@ -53,13 +53,16 @@ #include "wlan_qct_wda.h" #define CSR_VALIDATE_LIST //This portion of code need to be removed once the issue is resolved. +#define MIN_CHN_TIME_TO_FIND_GO 100 +#define MAX_CHN_TIME_TO_FIND_GO 100 +#define DIRECT_SSID_LEN 7 #ifdef CSR_VALIDATE_LIST tDblLinkList *g_pchannelPowerInfoList24 = NULL, * g_pchannelPowerInfoList5 = NULL; tpAniSirGlobal g_pMac; #endif -/* Purpose of HIDDEN_TIMER +/* Purpose of HIDDEN_TIMER ** When we remove hidden ssid from the profile i.e., forget the SSID via GUI that SSID shouldn't see in the profile ** For above requirement we used timer limit, logic is explained below ** Timer value is initialsed to current time when it receives corresponding probe response of hidden SSID (The probe request is @@ -67,22 +70,22 @@ tpAniSirGlobal g_pMac; ** for broadcast probe request, during update SSID with saved SSID we will diff current time with saved SSID time if it is greater than 1 min ** then we are not updating with old one */ - -#define HIDDEN_TIMER (1*60*1000) + +#define HIDDEN_TIMER (1*60*1000) #define CSR_SCAN_RESULT_RSSI_WEIGHT 80 // must be less than 100, represent the persentage of new RSSI - + /*--------------------------------------------------------------------------- PER filter constant fraction: it is a % ----------------------------------------------------------------------------*/ +---------------------------------------------------------------------------*/ #define CSR_SCAN_PER_FILTER_FRAC 100 - + /*--------------------------------------------------------------------------- RSSI filter constant fraction: it is a % ----------------------------------------------------------------------------*/ +---------------------------------------------------------------------------*/ #define CSR_SCAN_RSSI_FILTER_FRAC 100 /*--------------------------------------------------------------------------- -Convert RSSI into overall score: Since RSSI is in -dBm values, and the +Convert RSSI into overall score: Since RSSI is in -dBm values, and the overall needs to be weighted inversely (where greater value means better system), we convert. RSSI *cannot* be more than 0xFF or less than 0 for meaningful WLAN operation @@ -95,7 +98,7 @@ RSSI *cannot* be more than 0xFF or less than 0 for meaningful WLAN operation #define CSR_SCAN_OVERALL_SCORE( rssi ) \ (( rssi < CSR_SCAN_MAX_SCORE_VAL ) \ ? (CSR_SCAN_MAX_SCORE_VAL-rssi) : CSR_SCAN_MIN_SCORE_VAL) - + #define CSR_SCAN_IS_OVER_BSS_LIMIT(pMac) \ ( (pMac)->scan.nBssLimit <= (csrLLCount(&(pMac)->scan.scanResultList)) ) @@ -103,7 +106,9 @@ RSSI *cannot* be more than 0xFF or less than 0 for meaningful WLAN operation /* Maximum number of channels per country can be ignored */ #define MAX_CHANNELS_IGNORE 10 -#define MAX_COUNTRY_IGNORE 3 +#define MAX_COUNTRY_IGNORE 5 + +#define THIRTY_PERCENT(x) (x*30/100); /*struct to hold the ignored channel list based on country */ typedef struct sCsrIgnoreChannels @@ -113,11 +118,17 @@ typedef struct sCsrIgnoreChannels tANI_U16 channelCount; }tCsrIgnoreChannels; +#ifndef CONFIG_ENABLE_LINUX_REG static tCsrIgnoreChannels countryIgnoreList[MAX_COUNTRY_IGNORE] = { { {'U','A'}, { 136, 140}, 2}, { {'T','W'}, { 36, 40, 44, 48, 52}, 5}, - { {'I','D'}, { 165}, 1 } + { {'I','D'}, { 165}, 1 }, + { {'A','U'}, { 120, 124, 128}, 3 }, + { {'A','R'}, { 120, 124, 128}, 3 } }; +#else +static tCsrIgnoreChannels countryIgnoreList[MAX_COUNTRY_IGNORE] = { }; +#endif //CONFIG_ENABLE_LINUX_REG //*** This is temporary work around. It need to call CCM api to get to CFG later /// Get string parameter value @@ -141,8 +152,8 @@ void csrPurgeChannelPower( tpAniSirGlobal pMac, tDblLinkList *pChannelList ); eHalStatus csrSetCfgBackgroundScanPeriod(tpAniSirGlobal pMac, tANI_U32 bgPeriod); eHalStatus csrProcessSetBGScanParam(tpAniSirGlobal pMac, tSmeCmd *pCommand); void csrReleaseScanCommand(tpAniSirGlobal pMac, tSmeCmd *pCommand, eCsrScanStatus scanStatus); -static tANI_BOOLEAN csrScanValidateScanResult( tpAniSirGlobal pMac, tANI_U8 *pChannels, - tANI_U8 numChn, tSirBssDescription *pBssDesc, +static tANI_BOOLEAN csrScanValidateScanResult( tpAniSirGlobal pMac, tANI_U8 *pChannels, + tANI_U8 numChn, tSirBssDescription *pBssDesc, tDot11fBeaconIEs **ppIes ); eHalStatus csrSetBGScanChannelList( tpAniSirGlobal pMac, tANI_U8 *pAdjustChannels, tANI_U8 NumAdjustChannels); void csrReleaseCmdSingle(tpAniSirGlobal pMac, tSmeCmd *pCommand); @@ -176,9 +187,9 @@ void csrFreeScanResultEntry( tpAniSirGlobal pMac, tCsrScanResult *pResult ) { if( NULL != pResult->Result.pvIes ) { - palFreeMemory( pMac->hHdd, pResult->Result.pvIes ); + vos_mem_free(pResult->Result.pvIes); } - palFreeMemory(pMac->hHdd, pResult); + vos_mem_free(pResult); } @@ -187,17 +198,17 @@ static eHalStatus csrLLScanPurgeResult(tpAniSirGlobal pMac, tDblLinkList *pList) eHalStatus status = eHAL_STATUS_SUCCESS; tListElem *pEntry; tCsrScanResult *pBssDesc; - + csrLLLock(pList); - + while((pEntry = csrLLRemoveHead(pList, LL_ACCESS_NOLOCK)) != NULL) { pBssDesc = GET_BASE_ADDR( pEntry, tCsrScanResult, Link ); csrFreeScanResultEntry( pMac, pBssDesc ); } - - csrLLUnlock(pList); - + + csrLLUnlock(pList); + return (status); } @@ -217,7 +228,7 @@ int csrCheckValidateLists(void * dest, const void *src, v_SIZE_t num, int idx) //check 2.4 list tListElem *pElem, *pHead; int count; - + count = (int)(g_pchannelPowerInfoList24->Count); pHead = &g_pchannelPowerInfoList24->ListHead; pElem = pHead->next; @@ -234,10 +245,10 @@ int csrCheckValidateLists(void * dest, const void *src, v_SIZE_t num, int idx) } else { - VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_FATAL, + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_FATAL, " %d Detect 1 list(0x%X) error Head(0x%X) next(0x%X) Count %d, dest(0x%X) src(0x%X) numBytes(%d)", - idx, (unsigned int)g_pchannelPowerInfoList24, (unsigned int)pHead, - (unsigned int)(pHead->next), (int)g_pchannelPowerInfoList24->Count, + idx, (unsigned int)g_pchannelPowerInfoList24, (unsigned int)pHead, + (unsigned int)(pHead->next), (int)g_pchannelPowerInfoList24->Count, (unsigned int)dest, (unsigned int)src, (int)num); VOS_ASSERT(0); ii = 0; @@ -248,9 +259,9 @@ int csrCheckValidateLists(void * dest, const void *src, v_SIZE_t num, int idx) else { //Bad list - VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_FATAL, " %d Detect list(0x%X) error Head(0x%X) next(0x%X) Count %d, dest(0x%X) src(0x%X) numBytes(%d)", - idx, (unsigned int)g_pchannelPowerInfoList24, (unsigned int)pHead, - (unsigned int)(pHead->next), (int)g_pchannelPowerInfoList24->Count, + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_FATAL, " %d Detect list(0x%X) error Head(0x%X) next(0x%X) Count %d, dest(0x%X) src(0x%X) numBytes(%d)", + idx, (unsigned int)g_pchannelPowerInfoList24, (unsigned int)pHead, + (unsigned int)(pHead->next), (int)g_pchannelPowerInfoList24->Count, (unsigned int)dest, (unsigned int)src, (int)num); VOS_ASSERT(0); ii = 0; @@ -274,7 +285,7 @@ int csrCheckValidateLists(void * dest, const void *src, v_SIZE_t num, int idx) eHalStatus csrScanOpen( tpAniSirGlobal pMac ) { eHalStatus status; - + do { csrLLOpen(pMac->hHdd, &pMac->scan.scanResultList); @@ -291,41 +302,41 @@ eHalStatus csrScanOpen( tpAniSirGlobal pMac ) #endif pMac->scan.fFullScanIssued = eANI_BOOLEAN_FALSE; pMac->scan.nBssLimit = CSR_MAX_BSS_SUPPORT; - status = palTimerAlloc(pMac->hHdd, &pMac->scan.hTimerGetResult, csrScanGetResultTimerHandler, pMac); - if(!HAL_STATUS_SUCCESS(status)) + status = vos_timer_init(&pMac->scan.hTimerGetResult, VOS_TIMER_TYPE_SW, csrScanGetResultTimerHandler, pMac); + if (!HAL_STATUS_SUCCESS(status)) { smsLog(pMac, LOGE, FL("cannot allocate memory for getResult timer")); break; } #ifdef WLAN_AP_STA_CONCURRENCY - status = palTimerAlloc(pMac->hHdd, &pMac->scan.hTimerStaApConcTimer, csrStaApConcTimerHandler, pMac); - if(!HAL_STATUS_SUCCESS(status)) + status = vos_timer_init(&pMac->scan.hTimerStaApConcTimer, VOS_TIMER_TYPE_SW, csrStaApConcTimerHandler, pMac); + if (!HAL_STATUS_SUCCESS(status)) { smsLog(pMac, LOGE, FL("cannot allocate memory for hTimerStaApConcTimer timer")); break; } -#endif - status = palTimerAlloc(pMac->hHdd, &pMac->scan.hTimerIdleScan, csrScanIdleScanTimerHandler, pMac); - if(!HAL_STATUS_SUCCESS(status)) +#endif + status = vos_timer_init(&pMac->scan.hTimerIdleScan, VOS_TIMER_TYPE_SW, csrScanIdleScanTimerHandler, pMac); + if (!HAL_STATUS_SUCCESS(status)) { smsLog(pMac, LOGE, FL("cannot allocate memory for idleScan timer")); break; } - status = palTimerAlloc(pMac->hHdd, &pMac->scan.hTimerResultAging, csrScanResultAgingTimerHandler, pMac); - if(!HAL_STATUS_SUCCESS(status)) + status = vos_timer_init(&pMac->scan.hTimerResultAging, VOS_TIMER_TYPE_SW, csrScanResultAgingTimerHandler, pMac); + if (!HAL_STATUS_SUCCESS(status)) { smsLog(pMac, LOGE, FL("cannot allocate memory for ResultAging timer")); break; } - status = palTimerAlloc(pMac->hHdd, &pMac->scan.hTimerResultCfgAging, - csrScanResultCfgAgingTimerHandler, pMac); - if(!HAL_STATUS_SUCCESS(status)) + status = vos_timer_init(&pMac->scan.hTimerResultCfgAging, VOS_TIMER_TYPE_SW, + csrScanResultCfgAgingTimerHandler, pMac); + if (!HAL_STATUS_SUCCESS(status)) { smsLog(pMac, LOGE, FL("cannot allocate memory for CFG ResultAging timer")); break; } }while(0); - + return (status); } @@ -352,45 +363,45 @@ eHalStatus csrScanClose( tpAniSirGlobal pMac ) csrLLClose(&pMac->scan.channelPowerInfoList24); csrLLClose(&pMac->scan.channelPowerInfoList5G); csrScanDisable(pMac); - palTimerFree(pMac->hHdd, pMac->scan.hTimerResultAging); - palTimerFree(pMac->hHdd, pMac->scan.hTimerResultCfgAging); - palTimerFree(pMac->hHdd, pMac->scan.hTimerGetResult); + vos_timer_destroy(&pMac->scan.hTimerResultAging); + vos_timer_destroy(&pMac->scan.hTimerResultCfgAging); + vos_timer_destroy(&pMac->scan.hTimerGetResult); #ifdef WLAN_AP_STA_CONCURRENCY - palTimerFree(pMac->hHdd, pMac->scan.hTimerStaApConcTimer); + vos_timer_destroy(&pMac->scan.hTimerStaApConcTimer); #endif - palTimerFree(pMac->hHdd, pMac->scan.hTimerIdleScan); + vos_timer_destroy(&pMac->scan.hTimerIdleScan); return eHAL_STATUS_SUCCESS; } eHalStatus csrScanEnable( tpAniSirGlobal pMac ) { - + pMac->scan.fScanEnable = eANI_BOOLEAN_TRUE; pMac->scan.fRestartIdleScan = eANI_BOOLEAN_TRUE; - + return eHAL_STATUS_SUCCESS; } eHalStatus csrScanDisable( tpAniSirGlobal pMac ) { - + csrScanStopTimers(pMac); pMac->scan.fScanEnable = eANI_BOOLEAN_FALSE; - + return eHAL_STATUS_SUCCESS; } -//Set scan timing parameters according to state of other driver sessions -//No validation of the parameters is performed. +//Set scan timing parameters according to state of other driver sessions +//No validation of the parameters is performed. static void csrSetDefaultScanTiming( tpAniSirGlobal pMac, tSirScanType scanType, tCsrScanRequest *pScanRequest) { #ifdef WLAN_AP_STA_CONCURRENCY if(csrIsAnySessionConnected(pMac)) { - //If multi-session, use the appropriate default scan times + //If multi-session, use the appropriate default scan times if(scanType == eSIR_ACTIVE_SCAN) { pScanRequest->maxChnTime = pMac->roam.configParam.nActiveMaxChnTimeConc; @@ -401,11 +412,11 @@ static void csrSetDefaultScanTiming( tpAniSirGlobal pMac, tSirScanType scanType, pScanRequest->maxChnTime = pMac->roam.configParam.nPassiveMaxChnTimeConc; pScanRequest->minChnTime = pMac->roam.configParam.nPassiveMinChnTimeConc; } - pScanRequest->maxChnTimeBtc = pMac->roam.configParam.nActiveMaxChnTimeBtc; - pScanRequest->minChnTimeBtc = pMac->roam.configParam.nActiveMinChnTimeBtc; + pScanRequest->maxChnTimeBtc = pMac->roam.configParam.nActiveMaxChnTimeBtc; + pScanRequest->minChnTimeBtc = pMac->roam.configParam.nActiveMinChnTimeBtc; pScanRequest->restTime = pMac->roam.configParam.nRestTimeConc; - + //Return so that fields set above will not be overwritten. return; } @@ -424,8 +435,8 @@ static void csrSetDefaultScanTiming( tpAniSirGlobal pMac, tSirScanType scanType, pScanRequest->maxChnTime = pMac->roam.configParam.nPassiveMaxChnTime; pScanRequest->minChnTime = pMac->roam.configParam.nPassiveMinChnTime; } - pScanRequest->maxChnTimeBtc = pMac->roam.configParam.nActiveMaxChnTimeBtc; - pScanRequest->minChnTimeBtc = pMac->roam.configParam.nActiveMinChnTimeBtc; + pScanRequest->maxChnTimeBtc = pMac->roam.configParam.nActiveMaxChnTimeBtc; + pScanRequest->minChnTimeBtc = pMac->roam.configParam.nActiveMinChnTimeBtc; #ifdef WLAN_AP_STA_CONCURRENCY //No rest time if no sessions are connected. @@ -434,7 +445,7 @@ static void csrSetDefaultScanTiming( tpAniSirGlobal pMac, tSirScanType scanType, } #ifdef WLAN_AP_STA_CONCURRENCY -//Return SUCCESS is the command is queued, else returns eHAL_STATUS_FAILURE +//Return SUCCESS is the command is queued, else returns eHAL_STATUS_FAILURE eHalStatus csrQueueScanRequest( tpAniSirGlobal pMac, tSmeCmd *pScanCmd ) { eHalStatus status = eHAL_STATUS_SUCCESS; @@ -442,7 +453,7 @@ eHalStatus csrQueueScanRequest( tpAniSirGlobal pMac, tSmeCmd *pScanCmd ) tANI_BOOLEAN fNoCmdPending; tSmeCmd *pQueueScanCmd=NULL; tSmeCmd *pSendScanCmd=NULL; - + tANI_U8 nNumChanCombinedConc = 0; if (NULL == pScanCmd) { smsLog (pMac, LOGE, FL("Scan Req cmd is NULL")); @@ -451,17 +462,27 @@ eHalStatus csrQueueScanRequest( tpAniSirGlobal pMac, tSmeCmd *pScanCmd ) /* split scan if any one of the following: * - STA session is connected and the scan is not a P2P search * - any P2P session is connected - * Do not split scans if no concurrent infra connections are + * Do not split scans if no concurrent infra connections are * active and if the scan is a BG scan triggered by LFR (OR) * any scan if LFR is in the middle of a BG scan. Splitting * the scan is delaying the time it takes for LFR to find * candidates and resulting in disconnects. */ - if ( (csrIsStaSessionConnected(pMac) && + + if(csrIsStaSessionConnected(pMac) && + !csrIsP2pSessionConnected(pMac)) + { + nNumChanCombinedConc = pMac->roam.configParam.nNumStaChanCombinedConc; + } + else if(csrIsP2pSessionConnected(pMac)) + { + nNumChanCombinedConc = pMac->roam.configParam.nNumP2PChanCombinedConc; + } + if ( (csrIsStaSessionConnected(pMac) && #ifdef FEATURE_WLAN_LFR (csrIsConcurrentInfraConnected(pMac) || ((pScanCmd->u.scanCmd.reason != eCsrScanBgScan) && - (pMac->roam.neighborRoamInfo.neighborRoamState != + (pMac->roam.neighborRoamInfo.neighborRoamState != eCSR_NEIGHBOR_ROAM_STATE_CFG_CHAN_LIST_SCAN))) && #endif (pScanCmd->u.scanCmd.u.scanRequest.p2pSearch != 1)) || @@ -478,18 +499,19 @@ eHalStatus csrQueueScanRequest( tpAniSirGlobal pMac, tSmeCmd *pScanCmd ) numChn = pMac->scan.baseChannels.numChannels; - status = palAllocateMemory( pMac->hHdd, (void **)&pScanCmd->u.scanCmd.u.scanRequest.ChannelInfo.ChannelList, numChn ); - if( !HAL_STATUS_SUCCESS( status ) ) + pScanCmd->u.scanCmd.u.scanRequest.ChannelInfo.ChannelList = vos_mem_malloc(numChn); + if ( NULL == pScanCmd->u.scanCmd.u.scanRequest.ChannelInfo.ChannelList ) { smsLog( pMac, LOGE, FL(" Failed to get memory for channel list ") ); return eHAL_STATUS_FAILURE; } bMemAlloc = eANI_BOOLEAN_TRUE; - status = palCopyMemory( pMac->hHdd, pScanCmd->u.scanCmd.u.scanRequest.ChannelInfo.ChannelList, - pMac->scan.baseChannels.channelList, numChn ); + vos_mem_copy(pScanCmd->u.scanCmd.u.scanRequest.ChannelInfo.ChannelList, + pMac->scan.baseChannels.channelList, numChn); + status = eHAL_STATUS_SUCCESS; if( !HAL_STATUS_SUCCESS( status ) ) { - palFreeMemory( pMac->hHdd, pScanCmd->u.scanCmd.u.scanRequest.ChannelInfo.ChannelList ); + vos_mem_free(pScanCmd->u.scanCmd.u.scanRequest.ChannelInfo.ChannelList); pScanCmd->u.scanCmd.u.scanRequest.ChannelInfo.ChannelList = NULL; smsLog( pMac, LOGE, FL(" Failed to copy memory to channel list ") ); return eHAL_STATUS_FAILURE; @@ -499,16 +521,16 @@ eHalStatus csrQueueScanRequest( tpAniSirGlobal pMac, tSmeCmd *pScanCmd ) //Whenever we get a scan request with multiple channels we break it up into 2 requests //First request for first channel to scan and second request to scan remaining channels - if (numChn > pMac->roam.configParam.nNumChanCombinedConc) + if ( numChn > nNumChanCombinedConc) { - palZeroMemory(pMac->hHdd, &scanReq, sizeof(tCsrScanRequest)); + vos_mem_set(&scanReq, sizeof(tCsrScanRequest), 0); pQueueScanCmd = csrGetCommandBuffer(pMac); //optimize this to use 2 command buffer only if (!pQueueScanCmd) { if (bMemAlloc) { - palFreeMemory( pMac->hHdd, pScanCmd->u.scanCmd.u.scanRequest.ChannelInfo.ChannelList ); + vos_mem_free(pScanCmd->u.scanCmd.u.scanRequest.ChannelInfo.ChannelList); pScanCmd->u.scanCmd.u.scanRequest.ChannelInfo.ChannelList = NULL; } @@ -528,25 +550,28 @@ eHalStatus csrQueueScanRequest( tpAniSirGlobal pMac, tSmeCmd *pScanCmd ) /* Now modify the elements of local var scan request required to be modified for split scan */ if(scanReq.ChannelInfo.ChannelList != NULL) { - palFreeMemory(pMac->hHdd, scanReq.ChannelInfo.ChannelList); + vos_mem_free(scanReq.ChannelInfo.ChannelList); scanReq.ChannelInfo.ChannelList = NULL; } - pChnInfo->numOfChannels = pScanCmd->u.scanCmd.u.scanRequest.ChannelInfo.numOfChannels - pMac->roam.configParam.nNumChanCombinedConc; + pChnInfo->numOfChannels = pScanCmd->u.scanCmd.u.scanRequest.ChannelInfo.numOfChannels - nNumChanCombinedConc; VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_WARN, FL(" &channelToScan %p pScanCmd(%p) pScanCmd->u.scanCmd.u.scanRequest.ChannelInfo.ChannelList(%p)numChn(%d)"), &channelToScan[0], pScanCmd, pScanCmd->u.scanCmd.u.scanRequest.ChannelInfo.ChannelList, numChn); - palCopyMemory(pMac->hHdd, &channelToScan[0], &pScanCmd->u.scanCmd.u.scanRequest.ChannelInfo.ChannelList[pMac->roam.configParam.nNumChanCombinedConc], - pChnInfo->numOfChannels * sizeof(tANI_U8)); + vos_mem_copy(&channelToScan[0], + &pScanCmd->u.scanCmd.u.scanRequest.ChannelInfo.ChannelList[ + nNumChanCombinedConc], + pChnInfo->numOfChannels * sizeof(tANI_U8)); pChnInfo->ChannelList = &channelToScan[0]; scanReq.BSSType = eCSR_BSS_TYPE_ANY; //Modify callers parameters in case of concurrency - scanReq.scanType = eSIR_ACTIVE_SCAN; + if (!pScanCmd->u.scanCmd.u.scanRequest.bcnRptReqScan) + scanReq.scanType = eSIR_ACTIVE_SCAN; //Use concurrency values for min/maxChnTime. //We know csrIsAnySessionConnected(pMac) returns TRUE here csrSetDefaultScanTiming(pMac, scanReq.scanType, &scanReq); @@ -557,13 +582,13 @@ eHalStatus csrQueueScanRequest( tpAniSirGlobal pMac, tSmeCmd *pScanCmd ) { if (bMemAlloc) { - palFreeMemory( pMac->hHdd, pScanCmd->u.scanCmd.u.scanRequest.ChannelInfo.ChannelList ); + vos_mem_free(pScanCmd->u.scanCmd.u.scanRequest.ChannelInfo.ChannelList); pScanCmd->u.scanCmd.u.scanRequest.ChannelInfo.ChannelList = NULL; } if( scanReq.pIEField != NULL) { - palFreeMemory(pMac->hHdd, scanReq.pIEField); + vos_mem_free(scanReq.pIEField); scanReq.pIEField = NULL; } smsLog( pMac, LOGE, FL(" Failed to get copy csrScanRequest = %d"), status ); @@ -576,9 +601,10 @@ eHalStatus csrQueueScanRequest( tpAniSirGlobal pMac, tSmeCmd *pScanCmd ) /* setup the command to scan 2 channels */ pSendScanCmd = pScanCmd; - pSendScanCmd->u.scanCmd.u.scanRequest.ChannelInfo.numOfChannels = pMac->roam.configParam.nNumChanCombinedConc; + pSendScanCmd->u.scanCmd.u.scanRequest.ChannelInfo.numOfChannels = nNumChanCombinedConc; pSendScanCmd->u.scanCmd.u.scanRequest.BSSType = eCSR_BSS_TYPE_ANY; - pSendScanCmd->u.scanCmd.u.scanRequest.scanType = eSIR_ACTIVE_SCAN; + if (!pSendScanCmd->u.scanCmd.u.scanRequest.bcnRptReqScan) + pSendScanCmd->u.scanCmd.u.scanRequest.scanType = eSIR_ACTIVE_SCAN; //Use concurrency values for min/maxChnTime. //We know csrIsAnySessionConnected(pMac) returns TRUE here csrSetDefaultScanTiming(pMac, pSendScanCmd->u.scanCmd.u.scanRequest.scanType, &pSendScanCmd->u.scanCmd.u.scanRequest); @@ -586,7 +612,8 @@ eHalStatus csrQueueScanRequest( tpAniSirGlobal pMac, tSmeCmd *pScanCmd ) } else { pSendScanCmd = pScanCmd; pSendScanCmd->u.scanCmd.u.scanRequest.BSSType = eCSR_BSS_TYPE_ANY; - pSendScanCmd->u.scanCmd.u.scanRequest.scanType = eSIR_ACTIVE_SCAN; + if (!pSendScanCmd->u.scanCmd.u.scanRequest.bcnRptReqScan) + pSendScanCmd->u.scanCmd.u.scanRequest.scanType = eSIR_ACTIVE_SCAN; //Use concurrency values for min/maxChnTime. //We know csrIsAnySessionConnected(pMac) returns TRUE here csrSetDefaultScanTiming(pMac, pSendScanCmd->u.scanCmd.u.scanRequest.scanType, &pSendScanCmd->u.scanCmd.u.scanRequest); @@ -600,12 +627,12 @@ eHalStatus csrQueueScanRequest( tpAniSirGlobal pMac, tSmeCmd *pScanCmd ) if( fNoCmdPending ) { if (pQueueScanCmd != NULL) - { + { csrLLInsertTail( &pMac->scan.scanCmdPendingList, &pQueueScanCmd->Link, LL_ACCESS_LOCK ); } if (pSendScanCmd != NULL) - { + { return csrQueueSmeCommand(pMac, pSendScanCmd, eANI_BOOLEAN_FALSE); } } @@ -626,7 +653,7 @@ eHalStatus csrQueueScanRequest( tpAniSirGlobal pMac, tSmeCmd *pScanCmd ) { //No concurrency case smsLog( pMac, LOG2, FL("Queuing scan command (reason=%d, roamState=%d" " numOfChannels=%d)"), - pScanCmd->u.scanCmd.reason, + pScanCmd->u.scanCmd.reason, pMac->roam.neighborRoamInfo.neighborRoamState, pScanCmd->u.scanCmd.u.scanRequest.ChannelInfo.numOfChannels); return csrQueueSmeCommand(pMac, pScanCmd, eANI_BOOLEAN_FALSE); @@ -638,14 +665,14 @@ eHalStatus csrQueueScanRequest( tpAniSirGlobal pMac, tSmeCmd *pScanCmd ) /* --------------------------------------------------------------------------- \fn csrScan2GOnyRequest - \brief This function will update the scan request with only + \brief This function will update the scan request with only 2.4GHz valid channel list. \param pMac \param pScanCmd \param pScanRequest \return None -------------------------------------------------------------------------------*/ -static void csrScan2GOnyRequest(tpAniSirGlobal pMac,tSmeCmd *pScanCmd, +static void csrScan2GOnyRequest(tpAniSirGlobal pMac,tSmeCmd *pScanCmd, tCsrScanRequest *pScanRequest) { tANI_U8 index, channelId, channelListSize = 0; @@ -655,10 +682,10 @@ static void csrScan2GOnyRequest(tpAniSirGlobal pMac,tSmeCmd *pScanCmd, VOS_ASSERT(pScanCmd && pScanRequest); /* To silence the KW tool null check is added */ if((pScanCmd == NULL) || (pScanRequest == NULL)) - { + { smsLog( pMac, LOGE, FL(" pScanCmd or pScanRequest is NULL ")); return; - } + } if (pScanCmd->u.scanCmd.scanID || (eCSR_SCAN_REQUEST_FULL_SCAN != pScanRequest->requestType)) @@ -678,20 +705,37 @@ static void csrScan2GOnyRequest(tpAniSirGlobal pMac,tSmeCmd *pScanCmd, pScanRequest->ChannelInfo.ChannelList = validchannelList; } -eHalStatus csrScanRequest(tpAniSirGlobal pMac, tANI_U16 sessionId, - tCsrScanRequest *pScanRequest, tANI_U32 *pScanRequestID, +eHalStatus csrScanRequest(tpAniSirGlobal pMac, tANI_U16 sessionId, + tCsrScanRequest *pScanRequest, tANI_U32 *pScanRequestID, csrScanCompleteCallback callback, void *pContext) { eHalStatus status = eHAL_STATUS_FAILURE; tSmeCmd *pScanCmd = NULL; eCsrConnectState ConnectState; - + if(pScanRequest == NULL) { smsLog( pMac, LOGE, FL(" pScanRequest is NULL")); VOS_ASSERT(0); } + /* During group formation, the P2P client scans for GO with the specific SSID. + * There will be chances of GO switching to other channels because of scan or + * to STA channel in case of STA+GO MCC scenario. So to increase the possibility + * of client to find the GO, the dwell time of scan is increased to 100ms. + */ + if(pScanRequest->p2pSearch) + { + //If the scan request is for specific SSId the length of SSID will be + //greater than 7 as SSID for p2p search contains "DIRECT-") + if(pScanRequest->SSIDs.SSIDList->SSID.length > DIRECT_SSID_LEN) + { + smsLog( pMac, LOG1, FL(" Increase the Dwell time to 100ms.")); + pScanRequest->maxChnTime = MAX_CHN_TIME_TO_FIND_GO; + pScanRequest->minChnTime = MIN_CHN_TIME_TO_FIND_GO; + } + } + do { if(pMac->scan.fScanEnable) @@ -699,8 +743,8 @@ eHalStatus csrScanRequest(tpAniSirGlobal pMac, tANI_U16 sessionId, pScanCmd = csrGetCommandBuffer(pMac); if(pScanCmd) { - palZeroMemory(pMac->hHdd, &pScanCmd->u.scanCmd, sizeof(tScanCmd)); - pScanCmd->command = eSmeCommandScan; + vos_mem_set(&pScanCmd->u.scanCmd, sizeof(tScanCmd), 0); + pScanCmd->command = eSmeCommandScan; pScanCmd->sessionId = sessionId; pScanCmd->u.scanCmd.callback = callback; pScanCmd->u.scanCmd.pContext = pContext; @@ -745,11 +789,21 @@ eHalStatus csrScanRequest(tpAniSirGlobal pMac, tANI_U16 sessionId, if(csrIsAnySessionConnected(pMac)) { pScanRequest->restTime = pMac->roam.configParam.nRestTimeConc; + if(pScanRequest->scanType == eSIR_ACTIVE_SCAN) + { + pScanRequest->maxChnTime = pMac->roam.configParam.nActiveMaxChnTimeConc; + pScanRequest->minChnTime = pMac->roam.configParam.nActiveMinChnTimeConc; + } + else + { + pScanRequest->maxChnTime = pMac->roam.configParam.nPassiveMaxChnTimeConc; + pScanRequest->minChnTime = pMac->roam.configParam.nPassiveMinChnTimeConc; + } } } #endif /*For Standalone wlan : channel time will remain the same. - For BTC with A2DP up: Channel time = Channel time * 2 , if station is not already associated. + For BTC with A2DP up: Channel time = Channel time * 2, if station is not already associated. This has been done to provide a larger scan window for faster connection during btc.Else Scan is seen to take a long time. For BTC with A2DP up: Channel time will not be doubled, if station is already associated. @@ -762,26 +816,26 @@ eHalStatus csrScanRequest(tpAniSirGlobal pMac, tANI_U16 sessionId, { pScanRequest->maxChnTime = pScanRequest->maxChnTime << 1; pScanRequest->minChnTime = pScanRequest->minChnTime << 1; - } + } - pScanRequest->maxChnTimeBtc = pMac->roam.configParam.nActiveMaxChnTimeBtc; - pScanRequest->minChnTimeBtc = pMac->roam.configParam.nActiveMinChnTimeBtc; + pScanRequest->maxChnTimeBtc = pMac->roam.configParam.nActiveMaxChnTimeBtc; + pScanRequest->minChnTimeBtc = pMac->roam.configParam.nActiveMinChnTimeBtc; //Need to make the following atomic pScanCmd->u.scanCmd.scanID = pMac->scan.nextScanID++; //let it wrap around - + if(pScanRequestID) { - *pScanRequestID = pScanCmd->u.scanCmd.scanID; + *pScanRequestID = pScanCmd->u.scanCmd.scanID; } - // If it is the first scan request from HDD, CSR checks if it is for 11d. - // If it is not, CSR will save the scan request in the pending cmd queue + // If it is the first scan request from HDD, CSR checks if it is for 11d. + // If it is not, CSR will save the scan request in the pending cmd queue // & issue an 11d scan request to PE. if (((0 == pScanCmd->u.scanCmd.scanID) && (eCSR_SCAN_REQUEST_11D_SCAN != pScanRequest->requestType)) #ifdef SOFTAP_CHANNEL_RANGE && (eCSR_SCAN_SOFTAP_CHANNEL_RANGE != pScanRequest->requestType) -#endif +#endif && (eANI_BOOLEAN_FALSE == pMac->scan.fEnableBypass11d) ) { @@ -789,24 +843,23 @@ eHalStatus csrScanRequest(tpAniSirGlobal pMac, tANI_U16 sessionId, tCsrScanRequest scanReq; tCsrChannelInfo *pChnInfo = &scanReq.ChannelInfo; - palZeroMemory(pMac->hHdd, &scanReq, sizeof(tCsrScanRequest)); + vos_mem_set(&scanReq, sizeof(tCsrScanRequest), 0); p11dScanCmd = csrGetCommandBuffer(pMac); if (p11dScanCmd) { tANI_U32 numChn = pMac->scan.baseChannels.numChannels; - palZeroMemory(pMac->hHdd, &p11dScanCmd->u.scanCmd, sizeof(tScanCmd)); - status = palAllocateMemory( pMac->hHdd, (void **)&pChnInfo->ChannelList, numChn ); - if ( !HAL_STATUS_SUCCESS( status ) ) - { - break; - } - status = palCopyMemory( pMac->hHdd, pChnInfo->ChannelList, - pMac->scan.baseChannels.channelList, numChn ); + vos_mem_set(&p11dScanCmd->u.scanCmd, sizeof(tScanCmd), 0); + pChnInfo->ChannelList = vos_mem_malloc(numChn); + if ( NULL == pChnInfo->ChannelList ) + return eHAL_STATUS_FAILURE; + vos_mem_copy(pChnInfo->ChannelList, + pMac->scan.baseChannels.channelList, numChn); + status = eHAL_STATUS_SUCCESS; if ( !HAL_STATUS_SUCCESS( status ) ) { - palFreeMemory( pMac->hHdd, pChnInfo->ChannelList ); + vos_mem_free(pChnInfo->ChannelList); pChnInfo->ChannelList = NULL; break; } @@ -814,12 +867,18 @@ eHalStatus csrScanRequest(tpAniSirGlobal pMac, tANI_U16 sessionId, p11dScanCmd->command = eSmeCommandScan; p11dScanCmd->u.scanCmd.callback = NULL; p11dScanCmd->u.scanCmd.pContext = NULL; - p11dScanCmd->u.scanCmd.scanID = pMac->scan.nextScanID++; + p11dScanCmd->u.scanCmd.scanID = pMac->scan.nextScanID++; scanReq.BSSType = eCSR_BSS_TYPE_ANY; if ( csrIs11dSupported(pMac) ) { - scanReq.scanType = eSIR_PASSIVE_SCAN; + scanReq.bcnRptReqScan = pScanRequest->bcnRptReqScan; + if (pScanRequest->bcnRptReqScan) + scanReq.scanType = pScanRequest->scanType ? + eSIR_PASSIVE_SCAN : + pScanRequest->scanType; + else + scanReq.scanType = eSIR_PASSIVE_SCAN; scanReq.requestType = eCSR_SCAN_REQUEST_11D_SCAN; p11dScanCmd->u.scanCmd.reason = eCsrScan11d1; scanReq.maxChnTime = pMac->roam.configParam.nPassiveMaxChnTime; @@ -827,19 +886,23 @@ eHalStatus csrScanRequest(tpAniSirGlobal pMac, tANI_U16 sessionId, } else { - scanReq.scanType = eSIR_ACTIVE_SCAN; + scanReq.bcnRptReqScan = pScanRequest->bcnRptReqScan; + if (pScanRequest->bcnRptReqScan) + scanReq.scanType = pScanRequest->scanType; + else + scanReq.scanType = eSIR_ACTIVE_SCAN; scanReq.requestType = eCSR_SCAN_IDLE_MODE_SCAN; p11dScanCmd->u.scanCmd.reason = eCsrScanIdleScan; scanReq.maxChnTime = pMac->roam.configParam.nActiveMaxChnTime; scanReq.minChnTime = pMac->roam.configParam.nActiveMinChnTime; - scanReq.maxChnTimeBtc = pMac->roam.configParam.nActiveMaxChnTimeBtc; - scanReq.minChnTimeBtc = pMac->roam.configParam.nActiveMinChnTimeBtc; + scanReq.maxChnTimeBtc = pMac->roam.configParam.nActiveMaxChnTimeBtc; + scanReq.minChnTimeBtc = pMac->roam.configParam.nActiveMinChnTimeBtc; } status = csrScanCopyRequest(pMac, &p11dScanCmd->u.scanCmd.u.scanRequest, &scanReq); //Free the channel list - palFreeMemory( pMac->hHdd, pChnInfo->ChannelList ); + vos_mem_free(pChnInfo->ChannelList); pChnInfo->ChannelList = NULL; if (HAL_STATUS_SUCCESS(status)) @@ -853,14 +916,14 @@ eHalStatus csrScanRequest(tpAniSirGlobal pMac, tANI_U16 sessionId, eANI_BOOLEAN_FALSE); #else status = csrQueueSmeCommand(pMac, p11dScanCmd, eANI_BOOLEAN_FALSE); -#endif +#endif if( !HAL_STATUS_SUCCESS( status ) ) { smsLog( pMac, LOGE, FL(" fail to send message status = %d"), status ); break; } } - else + else { break; } @@ -892,7 +955,7 @@ eHalStatus csrScanRequest(tpAniSirGlobal pMac, tANI_U16 sessionId, status = csrQueueSmeCommand(pMac, pScanCmd, eANI_BOOLEAN_FALSE); #else - status = csrQueueSmeCommand(pMac, pScanCmd, eANI_BOOLEAN_FALSE); + status = csrQueueSmeCommand(pMac, pScanCmd, eANI_BOOLEAN_FALSE); #endif if( !HAL_STATUS_SUCCESS( status ) ) { @@ -900,13 +963,13 @@ eHalStatus csrScanRequest(tpAniSirGlobal pMac, tANI_U16 sessionId, break; } } - else + else { smsLog( pMac, LOGE, FL(" fail to copy request status = %d"), status ); break; } } - else + else { smsLog( pMac, LOGE, FL(" pScanCmd is NULL")); break; @@ -932,14 +995,14 @@ eHalStatus csrScanRequestResult(tpAniSirGlobal pMac) { eHalStatus status = eHAL_STATUS_SUCCESS; tSmeCmd *pScanCmd; - + if(pMac->scan.fScanEnable) { pScanCmd = csrGetCommandBuffer(pMac); if(pScanCmd) { pScanCmd->command = eSmeCommandScan; - palZeroMemory(pMac->hHdd, &pScanCmd->u.scanCmd, sizeof(tScanCmd)); + vos_mem_set(&pScanCmd->u.scanCmd, sizeof(tScanCmd), 0); pScanCmd->u.scanCmd.callback = NULL; pScanCmd->u.scanCmd.pContext = NULL; pScanCmd->u.scanCmd.reason = eCsrScanGetResult; @@ -952,14 +1015,14 @@ eHalStatus csrScanRequestResult(tpAniSirGlobal pMac) csrReleaseCommandScan(pMac, pScanCmd); } } - else + else { //log error smsLog(pMac, LOGE, FL("can not obtain a common buffer")); status = eHAL_STATUS_RESOURCES; } } - + return (status); } @@ -977,7 +1040,7 @@ eHalStatus csrScanRequestLfrResult(tpAniSirGlobal pMac, tANI_U32 sessionId, { pScanCmd->command = eSmeCommandScan; pScanCmd->sessionId = sessionId; - palZeroMemory(pMac->hHdd, &pScanCmd->u.scanCmd, sizeof(tScanCmd)); + vos_mem_set(&pScanCmd->u.scanCmd, sizeof(tScanCmd), 0); pScanCmd->u.scanCmd.callback = callback; pScanCmd->u.scanCmd.pContext = pContext; pScanCmd->u.scanCmd.reason = eCsrScanGetLfrResult; @@ -1008,7 +1071,7 @@ eHalStatus csrScanAllChannels(tpAniSirGlobal pMac, eCsrRequestType reqType) tANI_U32 scanId; tCsrScanRequest scanReq; - palZeroMemory(pMac->hHdd, &scanReq, sizeof(tCsrScanRequest)); + vos_mem_set(&scanReq, sizeof(tCsrScanRequest), 0); scanReq.BSSType = eCSR_BSS_TYPE_ANY; scanReq.scanType = eSIR_ACTIVE_SCAN; scanReq.requestType = reqType; @@ -1016,9 +1079,9 @@ eHalStatus csrScanAllChannels(tpAniSirGlobal pMac, eCsrRequestType reqType) scanReq.minChnTime = pMac->roam.configParam.nActiveMinChnTime; scanReq.maxChnTimeBtc = pMac->roam.configParam.nActiveMaxChnTimeBtc; scanReq.minChnTimeBtc = pMac->roam.configParam.nActiveMinChnTimeBtc; - //Scan with invalid sessionId. + //Scan with invalid sessionId. //This results in SME using the first available session to scan. - status = csrScanRequest(pMac, CSR_SESSION_ID_INVALID, &scanReq, + status = csrScanRequest(pMac, CSR_SESSION_ID_INVALID, &scanReq, &scanId, NULL, NULL); return (status); @@ -1053,10 +1116,14 @@ eHalStatus csrIssueRoamAfterLostlinkScan(tpAniSirGlobal pMac, tANI_U32 sessionId break; } //Here is the profile we need to connect to - status = palAllocateMemory(pMac->hHdd, (void **)&pScanFilter, sizeof(tCsrScanResultFilter)); - if(!HAL_STATUS_SUCCESS(status)) + pScanFilter = vos_mem_malloc(sizeof(tCsrScanResultFilter)); + if ( NULL == pScanFilter) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; + if (!HAL_STATUS_SUCCESS(status)) break; - palZeroMemory(pMac->hHdd, pScanFilter, sizeof(tCsrScanResultFilter)); + vos_mem_set(pScanFilter, sizeof(tCsrScanResultFilter), 0); if(NULL == pSession->pCurRoamProfile) { pScanFilter->EncryptionType.numEntries = 1; @@ -1065,10 +1132,14 @@ eHalStatus csrIssueRoamAfterLostlinkScan(tpAniSirGlobal pMac, tANI_U32 sessionId else { //We have to make a copy of pCurRoamProfile because it will be free inside csrRoamIssueConnect - status = palAllocateMemory(pMac->hHdd, (void **)&pProfile, sizeof(tCsrRoamProfile)); - if(!HAL_STATUS_SUCCESS(status)) - break; - palZeroMemory(pMac->hHdd, pProfile, sizeof(tCsrRoamProfile)); + pProfile = vos_mem_malloc(sizeof(tCsrRoamProfile)); + if ( NULL == pProfile ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; + if (!HAL_STATUS_SUCCESS(status)) + break; + vos_mem_set(pProfile, sizeof(tCsrRoamProfile), 0); status = csrRoamCopyProfile(pMac, pProfile, pSession->pCurRoamProfile); if(!HAL_STATUS_SUCCESS(status)) break; @@ -1085,7 +1156,7 @@ eHalStatus csrIssueRoamAfterLostlinkScan(tpAniSirGlobal pMac, tANI_U32 sessionId //we want to put the last connected BSS to the very beginning, if possible csrMoveBssToHeadFromBSSID(pMac, &pSession->connectedProfile.bssid, hBSSList); } - status = csrRoamIssueConnect(pMac, sessionId, pProfile, hBSSList, reason, + status = csrRoamIssueConnect(pMac, sessionId, pProfile, hBSSList, reason, roamId, eANI_BOOLEAN_TRUE, eANI_BOOLEAN_TRUE); if(!HAL_STATUS_SUCCESS(status)) { @@ -1098,12 +1169,12 @@ eHalStatus csrIssueRoamAfterLostlinkScan(tpAniSirGlobal pMac, tANI_U32 sessionId { //we need to free memory for filter if profile exists csrFreeScanFilter(pMac, pScanFilter); - palFreeMemory(pMac->hHdd, pScanFilter); + vos_mem_free(pScanFilter); } if(NULL != pProfile) { csrReleaseProfile(pMac, pProfile); - palFreeMemory(pMac->hHdd, (void *)pProfile); + vos_mem_free(pProfile); } return (status); @@ -1115,14 +1186,14 @@ eHalStatus csrScanGetScanChnInfo(tpAniSirGlobal pMac, tANI_U8 sessionId, { eHalStatus status = eHAL_STATUS_SUCCESS; tSmeCmd *pScanCmd; - + if(pMac->scan.fScanEnable) { pScanCmd = csrGetCommandBuffer(pMac); if(pScanCmd) { pScanCmd->command = eSmeCommandScan; - palZeroMemory(pMac->hHdd, &pScanCmd->u.scanCmd, sizeof(tScanCmd)); + vos_mem_set(&pScanCmd->u.scanCmd, sizeof(tScanCmd), 0); pScanCmd->u.scanCmd.callback = callback; pScanCmd->u.scanCmd.pContext = pContext; pScanCmd->u.scanCmd.reason = eCsrScanGetScanChnInfo; @@ -1136,14 +1207,14 @@ eHalStatus csrScanGetScanChnInfo(tpAniSirGlobal pMac, tANI_U8 sessionId, csrReleaseCommandScan(pMac, pScanCmd); } } - else + else { //log error smsLog(pMac, LOGE, FL("can not obtain a common buffer")); status = eHAL_STATUS_RESOURCES; } } - + return (status); } @@ -1173,7 +1244,7 @@ eHalStatus csrScanHandleFailedLostlink1(tpAniSirGlobal pMac, tANI_U32 sessionId) //try lostlink scan2 status = csrScanRequestLostLink2(pMac, sessionId); } - else if(!pSession->pCurRoamProfile->ChannelInfo.ChannelList || + else if(!pSession->pCurRoamProfile->ChannelInfo.ChannelList || pSession->pCurRoamProfile->ChannelInfo.ChannelList[0] == 0) { //go straight to lostlink scan3 @@ -1194,7 +1265,7 @@ eHalStatus csrScanHandleFailedLostlink1(tpAniSirGlobal pMac, tANI_U32 sessionId) status = csrScanRequestLostLink3(pMac, sessionId); } - return (status); + return (status); } @@ -1215,7 +1286,7 @@ eHalStatus csrScanHandleFailedLostlink2(tpAniSirGlobal pMac, tANI_U32 sessionId) { csrScanStartIdleScan(pMac); } - else if(!pSession->pCurRoamProfile || !pSession->pCurRoamProfile->ChannelInfo.ChannelList || + else if(!pSession->pCurRoamProfile || !pSession->pCurRoamProfile->ChannelInfo.ChannelList || pSession->pCurRoamProfile->ChannelInfo.ChannelList[0] == 0) { //try lostlink scan3 @@ -1230,7 +1301,7 @@ eHalStatus csrScanHandleFailedLostlink2(tpAniSirGlobal pMac, tANI_U32 sessionId) } } - return (status); + return (status); } @@ -1245,8 +1316,8 @@ eHalStatus csrScanHandleFailedLostlink3(tpAniSirGlobal pMac, tANI_U32 sessionId) //we are done with lostlink csrScanStartIdleScan(pMac); } - - return (status); + + return (status); } @@ -1279,7 +1350,7 @@ eHalStatus csrScanRequestLostLink1( tpAniSirGlobal pMac, tANI_U32 sessionId ) status = eHAL_STATUS_RESOURCES; break; } - palZeroMemory(pMac->hHdd, &pCommand->u.scanCmd, sizeof(tScanCmd)); + vos_mem_set(&pCommand->u.scanCmd, sizeof(tScanCmd), 0); pCommand->command = eSmeCommandScan; pCommand->sessionId = (tANI_U8)sessionId; pCommand->u.scanCmd.reason = eCsrScanLostLink1; @@ -1292,14 +1363,18 @@ eHalStatus csrScanRequestLostLink1( tpAniSirGlobal pMac, tANI_U32 sessionId ) pCommand->u.scanCmd.u.scanRequest.scanType = eSIR_ACTIVE_SCAN; if(pSession->connectedProfile.SSID.length) { - status = palAllocateMemory(pMac->hHdd, (void **)&pCommand->u.scanCmd.u.scanRequest.SSIDs.SSIDList, sizeof(tCsrSSIDInfo)); + pCommand->u.scanCmd.u.scanRequest.SSIDs.SSIDList = vos_mem_malloc(sizeof(tCsrSSIDInfo)); + if ( NULL == pCommand->u.scanCmd.u.scanRequest.SSIDs.SSIDList ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; if(!HAL_STATUS_SUCCESS(status)) { break; } pCommand->u.scanCmd.u.scanRequest.SSIDs.numOfSSIDs = 1; - palCopyMemory(pMac->hHdd, &pCommand->u.scanCmd.u.scanRequest.SSIDs.SSIDList[0].SSID, - &pSession->connectedProfile.SSID, sizeof(tSirMacSSid)); + vos_mem_copy(&pCommand->u.scanCmd.u.scanRequest.SSIDs.SSIDList[0].SSID, + &pSession->connectedProfile.SSID, sizeof(tSirMacSSid)); } else { @@ -1307,12 +1382,16 @@ eHalStatus csrScanRequestLostLink1( tpAniSirGlobal pMac, tANI_U32 sessionId ) } if(pSession->pCurRoamProfile) { - status = palAllocateMemory(pMac->hHdd, (void **)&pScanFilter, sizeof(tCsrScanResultFilter)); + pScanFilter = vos_mem_malloc(sizeof(tCsrScanResultFilter)); + if ( NULL == pScanFilter ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; if(!HAL_STATUS_SUCCESS(status)) { break; } - palZeroMemory(pMac->hHdd, pScanFilter, sizeof(tCsrScanResultFilter)); + vos_mem_set(pScanFilter, sizeof(tCsrScanResultFilter), 0); status = csrRoamPrepareFilterFromProfile(pMac, pSession->pCurRoamProfile, pScanFilter); if(!HAL_STATUS_SUCCESS(status)) { @@ -1323,8 +1402,12 @@ eHalStatus csrScanRequestLostLink1( tpAniSirGlobal pMac, tANI_U32 sessionId ) if(HAL_STATUS_SUCCESS((csrScanGetResult(pMac, pScanFilter, &hBSSList))) && hBSSList) { tANI_U8 i, nChn = 0; - status = palAllocateMemory(pMac->hHdd, (void **)&pCommand->u.scanCmd.u.scanRequest.ChannelInfo.ChannelList, - WNI_CFG_VALID_CHANNEL_LIST_LEN); + pCommand->u.scanCmd.u.scanRequest.ChannelInfo.ChannelList = + vos_mem_malloc(WNI_CFG_VALID_CHANNEL_LIST_LEN); + if ( NULL == pCommand->u.scanCmd.u.scanRequest.ChannelInfo.ChannelList ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; if(!HAL_STATUS_SUCCESS(status)) { break; @@ -1334,7 +1417,7 @@ eHalStatus csrScanRequestLostLink1( tpAniSirGlobal pMac, tANI_U32 sessionId ) { for(i = 0; i < nChn; i++) { - if(pCommand->u.scanCmd.u.scanRequest.ChannelInfo.ChannelList[i] == + if(pCommand->u.scanCmd.u.scanRequest.ChannelInfo.ChannelList[i] == pScanResult->BssDescriptor.channelId) { break; @@ -1350,7 +1433,7 @@ eHalStatus csrScanRequestLostLink1( tpAniSirGlobal pMac, tANI_U32 sessionId ) { for(i = 0; i < nChn; i++) { - if(pCommand->u.scanCmd.u.scanRequest.ChannelInfo.ChannelList[i] == + if(pCommand->u.scanCmd.u.scanRequest.ChannelInfo.ChannelList[i] == pSession->connectedProfile.operationChannel) { break; @@ -1367,22 +1450,25 @@ eHalStatus csrScanRequestLostLink1( tpAniSirGlobal pMac, tANI_U32 sessionId ) { if(csrRoamIsChannelValid(pMac, pSession->connectedProfile.operationChannel)) { - status = palAllocateMemory(pMac->hHdd, (void **)&pCommand->u.scanCmd.u.scanRequest.ChannelInfo.ChannelList, - 1); + pCommand->u.scanCmd.u.scanRequest.ChannelInfo.ChannelList = vos_mem_malloc(1); + if ( NULL == pCommand->u.scanCmd.u.scanRequest.ChannelInfo.ChannelList ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; //just try the last connected channel if(HAL_STATUS_SUCCESS(status)) { pCommand->u.scanCmd.u.scanRequest.ChannelInfo.ChannelList[0] = pSession->connectedProfile.operationChannel; pCommand->u.scanCmd.u.scanRequest.ChannelInfo.numOfChannels = 1; } - else + else { break; } } } } - palCopyMemory(pMac->hHdd, &pCommand->u.scanCmd.u.scanRequest.bssid, bAddr, sizeof(tCsrBssid)); + vos_mem_copy(&pCommand->u.scanCmd.u.scanRequest.bssid, bAddr, sizeof(tCsrBssid)); status = csrQueueSmeCommand(pMac, pCommand, eANI_BOOLEAN_FALSE); if( !HAL_STATUS_SUCCESS( status ) ) { @@ -1403,7 +1489,7 @@ eHalStatus csrScanRequestLostLink1( tpAniSirGlobal pMac, tANI_U32 sessionId ) if(pScanFilter) { csrFreeScanFilter(pMac, pScanFilter); - palFreeMemory(pMac->hHdd, pScanFilter); + vos_mem_free(pScanFilter); } if(hBSSList) { @@ -1441,7 +1527,7 @@ eHalStatus csrScanRequestLostLink2( tpAniSirGlobal pMac, tANI_U32 sessionId ) status = eHAL_STATUS_RESOURCES; break; } - palZeroMemory(pMac->hHdd, &pCommand->u.scanCmd, sizeof(tScanCmd)); + vos_mem_set(&pCommand->u.scanCmd, sizeof(tScanCmd), 0); pCommand->command = eSmeCommandScan; pCommand->sessionId = (tANI_U8)sessionId; pCommand->u.scanCmd.reason = eCsrScanLostLink2; @@ -1454,12 +1540,16 @@ eHalStatus csrScanRequestLostLink2( tpAniSirGlobal pMac, tANI_U32 sessionId ) pCommand->u.scanCmd.u.scanRequest.scanType = eSIR_ACTIVE_SCAN; if(pSession->pCurRoamProfile) { - status = palAllocateMemory(pMac->hHdd, (void **)&pScanFilter, sizeof(tCsrScanResultFilter)); - if(!HAL_STATUS_SUCCESS(status)) + pScanFilter = vos_mem_malloc(sizeof(tCsrScanResultFilter)); + if ( NULL == pScanFilter ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; + if (!HAL_STATUS_SUCCESS(status)) { break; } - palZeroMemory(pMac->hHdd, pScanFilter, sizeof(tCsrScanResultFilter)); + vos_mem_set(pScanFilter, sizeof(tCsrScanResultFilter), 0); status = csrRoamPrepareFilterFromProfile(pMac, pSession->pCurRoamProfile, pScanFilter); if(!HAL_STATUS_SUCCESS(status)) { @@ -1473,9 +1563,13 @@ eHalStatus csrScanRequestLostLink2( tpAniSirGlobal pMac, tANI_U32 sessionId ) if(hBSSList) { tANI_U8 i, nChn = 0; - status = palAllocateMemory(pMac->hHdd, (void **)&pCommand->u.scanCmd.u.scanRequest.ChannelInfo.ChannelList, - WNI_CFG_VALID_CHANNEL_LIST_LEN); - if(!HAL_STATUS_SUCCESS(status)) + pCommand->u.scanCmd.u.scanRequest.ChannelInfo.ChannelList = + vos_mem_malloc(WNI_CFG_VALID_CHANNEL_LIST_LEN); + if ( NULL == pCommand->u.scanCmd.u.scanRequest.ChannelInfo.ChannelList ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; + if (!HAL_STATUS_SUCCESS(status)) { break; } @@ -1484,7 +1578,7 @@ eHalStatus csrScanRequestLostLink2( tpAniSirGlobal pMac, tANI_U32 sessionId ) { for(i = 0; i < nChn; i++) { - if(pCommand->u.scanCmd.u.scanRequest.ChannelInfo.ChannelList[i] == + if(pCommand->u.scanCmd.u.scanRequest.ChannelInfo.ChannelList[i] == pScanResult->BssDescriptor.channelId) { break; @@ -1498,7 +1592,7 @@ eHalStatus csrScanRequestLostLink2( tpAniSirGlobal pMac, tANI_U32 sessionId ) pCommand->u.scanCmd.u.scanRequest.ChannelInfo.numOfChannels = nChn; } } - palCopyMemory(pMac->hHdd, &pCommand->u.scanCmd.u.scanRequest.bssid, bAddr, sizeof(tCsrBssid)); + vos_mem_copy(&pCommand->u.scanCmd.u.scanRequest.bssid, bAddr, sizeof(tCsrBssid)); //Put to the head in pending queue status = csrQueueSmeCommand(pMac, pCommand, eANI_BOOLEAN_TRUE); if( !HAL_STATUS_SUCCESS( status ) ) @@ -1520,7 +1614,7 @@ eHalStatus csrScanRequestLostLink2( tpAniSirGlobal pMac, tANI_U32 sessionId ) if(pScanFilter) { csrFreeScanFilter(pMac, pScanFilter); - palFreeMemory(pMac->hHdd, pScanFilter); + vos_mem_free(pScanFilter); } if(hBSSList) { @@ -1547,7 +1641,7 @@ eHalStatus csrScanRequestLostLink3( tpAniSirGlobal pMac, tANI_U32 sessionId ) status = eHAL_STATUS_RESOURCES; break; } - palZeroMemory(pMac->hHdd, &pCommand->u.scanCmd, sizeof(tScanCmd)); + vos_mem_set(&pCommand->u.scanCmd, sizeof(tScanCmd), 0); pCommand->command = eSmeCommandScan; pCommand->sessionId = (tANI_U8)sessionId; pCommand->u.scanCmd.reason = eCsrScanLostLink3; @@ -1558,7 +1652,7 @@ eHalStatus csrScanRequestLostLink3( tpAniSirGlobal pMac, tANI_U32 sessionId ) pCommand->u.scanCmd.u.scanRequest.maxChnTimeBtc = pMac->roam.configParam.nActiveMaxChnTimeBtc; pCommand->u.scanCmd.u.scanRequest.minChnTimeBtc = pMac->roam.configParam.nActiveMinChnTimeBtc; pCommand->u.scanCmd.u.scanRequest.scanType = eSIR_ACTIVE_SCAN; - palCopyMemory(pMac->hHdd, &pCommand->u.scanCmd.u.scanRequest.bssid, bAddr, sizeof(tCsrBssid)); + vos_mem_copy(&pCommand->u.scanCmd.u.scanRequest.bssid, bAddr, sizeof(tCsrBssid)); //Put to the head of pending queue status = csrQueueSmeCommand(pMac, pCommand, eANI_BOOLEAN_TRUE); if( !HAL_STATUS_SUCCESS( status ) ) @@ -1596,6 +1690,19 @@ eHalStatus csrScanHandleSearchForSSID(tpAniSirGlobal pMac, tSmeCmd *pCommand) #endif do { +#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD + //if this scan is for LFR + if(pMac->roam.neighborRoamInfo.uOsRequestedHandoff) + { + //notify LFR state m/c + if(eHAL_STATUS_SUCCESS != csrNeighborRoamSssidScanDone(pMac, eHAL_STATUS_SUCCESS)) + { + csrNeighborRoamStartLfrScan(pMac); + } + status = eHAL_STATUS_SUCCESS; + break; + } +#endif //If there is roam command waiting, ignore this roam because the newer roam command is the one to execute if(csrIsRoamCommandWaitingForSession(pMac, sessionId)) { @@ -1604,17 +1711,21 @@ eHalStatus csrScanHandleSearchForSSID(tpAniSirGlobal pMac, tSmeCmd *pCommand) } if(pProfile == NULL) break; - status = palAllocateMemory(pMac->hHdd, (void **)&pScanFilter, sizeof(tCsrScanResultFilter)); - if(!HAL_STATUS_SUCCESS(status)) + pScanFilter = vos_mem_malloc(sizeof(tCsrScanResultFilter)); + if ( NULL == pScanFilter ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; + if (!HAL_STATUS_SUCCESS(status)) break; - palZeroMemory(pMac->hHdd, pScanFilter, sizeof(tCsrScanResultFilter)); + vos_mem_set(pScanFilter, sizeof(tCsrScanResultFilter), 0); status = csrRoamPrepareFilterFromProfile(pMac, pProfile, pScanFilter); if(!HAL_STATUS_SUCCESS(status)) break; status = csrScanGetResult(pMac, pScanFilter, &hBSSList); if(!HAL_STATUS_SUCCESS(status)) break; - status = csrRoamIssueConnect(pMac, sessionId, pProfile, hBSSList, eCsrHddIssued, + status = csrRoamIssueConnect(pMac, sessionId, pProfile, hBSSList, eCsrHddIssued, pCommand->u.scanCmd.roamId, eANI_BOOLEAN_TRUE, eANI_BOOLEAN_TRUE); if(!HAL_STATUS_SUCCESS(status)) { @@ -1641,21 +1752,20 @@ eHalStatus csrScanHandleSearchForSSID(tpAniSirGlobal pMac, tSmeCmd *pCommand) { //Save the roma profile so we can retry csrFreeRoamProfile( pMac, sessionId ); - if (HAL_STATUS_SUCCESS(palAllocateMemory(pMac->hHdd, - (void **)&pSession->pCurRoamProfile, - sizeof(tCsrRoamProfile)))) + pSession->pCurRoamProfile = vos_mem_malloc(sizeof(tCsrRoamProfile)); + if ( NULL != pSession->pCurRoamProfile ) { - palZeroMemory(pMac->hHdd, pSession->pCurRoamProfile, sizeof(tCsrRoamProfile)); + vos_mem_set(pSession->pCurRoamProfilee, sizeof(tCsrRoamProfile), 0); csrRoamCopyProfile(pMac, pSession->pCurRoamProfile, pProfile); } csrRoamStartJoinRetryTimer(pMac, sessionId, CSR_JOIN_RETRY_TIMEOUT_PERIOD); } #endif } - if(pScanFilter) + if (pScanFilter) { csrFreeScanFilter(pMac, pScanFilter); - palFreeMemory(pMac->hHdd, pScanFilter); + vos_mem_free(pScanFilter); } return (status); @@ -1668,7 +1778,18 @@ eHalStatus csrScanHandleSearchForSSIDFailure(tpAniSirGlobal pMac, tSmeCmd *pComm tANI_U32 sessionId = pCommand->sessionId; tCsrRoamProfile *pProfile = pCommand->u.scanCmd.pToRoamProfile; tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, sessionId ); - +#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD + //if this scan is for LFR + if(pMac->roam.neighborRoamInfo.uOsRequestedHandoff) + { + //notify LFR state m/c + if(eHAL_STATUS_SUCCESS != csrNeighborRoamSssidScanDone(pMac, eHAL_STATUS_FAILURE)) + { + csrNeighborRoamStartLfrScan(pMac); + } + return eHAL_STATUS_SUCCESS; + } +#endif if(!pSession) { smsLog(pMac, LOGE, FL(" session %d not found "), sessionId); @@ -1679,8 +1800,9 @@ eHalStatus csrScanHandleSearchForSSIDFailure(tpAniSirGlobal pMac, tSmeCmd *pComm if(pCommand->u.scanCmd.u.scanRequest.SSIDs.numOfSSIDs == 1) { char str[36]; - palCopyMemory(pMac->hHdd, str, pCommand->u.scanCmd.u.scanRequest.SSIDs.SSIDList[0].SSID.ssId, - pCommand->u.scanCmd.u.scanRequest.SSIDs.SSIDList[0].SSID.length); + vos_mem_copy(str, + pCommand->u.scanCmd.u.scanRequest.SSIDs.SSIDList[0].SSID.ssId, + pCommand->u.scanCmd.u.scanRequest.SSIDs.SSIDList[0].SSID.length); str[pCommand->u.scanCmd.u.scanRequest.SSIDs.SSIDList[0].SSID.length] = 0; smsLog(pMac, LOGW, FL(" SSID = %s"), str); } @@ -1688,7 +1810,7 @@ eHalStatus csrScanHandleSearchForSSIDFailure(tpAniSirGlobal pMac, tSmeCmd *pComm //Check whether it is for start ibss. No need to do anything if it is a JOIN request if(pProfile && CSR_IS_START_IBSS(pProfile)) { - status = csrRoamIssueConnect(pMac, sessionId, pProfile, NULL, eCsrHddIssued, + status = csrRoamIssueConnect(pMac, sessionId, pProfile, NULL, eCsrHddIssued, pCommand->u.scanCmd.roamId, eANI_BOOLEAN_TRUE, eANI_BOOLEAN_TRUE); if(!HAL_STATUS_SUCCESS(status)) { @@ -1696,7 +1818,7 @@ eHalStatus csrScanHandleSearchForSSIDFailure(tpAniSirGlobal pMac, tSmeCmd *pComm csrRoamCallCallback(pMac, sessionId, NULL, pCommand->u.scanCmd.roamId, eCSR_ROAM_FAILED, eCSR_ROAM_RESULT_FAILURE); } } - else + else { eCsrRoamResult roamResult = eCSR_ROAM_RESULT_FAILURE; @@ -1711,11 +1833,11 @@ eHalStatus csrScanHandleSearchForSSIDFailure(tpAniSirGlobal pMac, tSmeCmd *pComm if(pSession->bRefAssocStartCnt > 0) { tCsrRoamInfo *pRoamInfo = NULL, roamInfo; - palZeroMemory(pMac->hHdd, &roamInfo, sizeof(tCsrRoamInfo)); + vos_mem_set(&roamInfo, sizeof(tCsrRoamInfo), 0); pRoamInfo = &roamInfo; if(pCommand->u.roamCmd.pRoamBssEntry) { - tCsrScanResult *pScanResult = + tCsrScanResult *pScanResult = GET_BASE_ADDR(pCommand->u.roamCmd.pRoamBssEntry, tCsrScanResult, Link); roamInfo.pBssDesc = &pScanResult->Result.BssDescriptor; @@ -1741,11 +1863,10 @@ eHalStatus csrScanHandleSearchForSSIDFailure(tpAniSirGlobal pMac, tSmeCmd *pComm { //Save the roma profile so we can retry csrFreeRoamProfile( pMac, sessionId ); - if (HAL_STATUS_SUCCESS(palAllocateMemory(pMac->hHdd, - (void **)&pSession->pCurRoamProfile, - sizeof(tCsrRoamProfile)))) + pSession->pCurRoamProfile = vos_mem_malloc(sizeof(tCsrRoamProfile)); + if ( NULL != pSession->pCurRoamProfile ) { - palZeroMemory(pMac->hHdd, pSession->pCurRoamProfile, sizeof(tCsrRoamProfile)); + vos_mem_set(pSession->pCurRoamProfile, sizeof(tCsrRoamProfile), 0); csrRoamCopyProfile(pMac, pSession->pCurRoamProfile, pProfile); } csrRoamStartJoinRetryTimer(pMac, sessionId, CSR_JOIN_RETRY_TIMEOUT_PERIOD); @@ -1776,12 +1897,16 @@ eHalStatus csrScanHandleCapChangeScanComplete(tpAniSirGlobal pMac, tANI_U32 sess do { //Here is the profile we need to connect to - status = palAllocateMemory(pMac->hHdd, (void **)&pScanFilter, sizeof(tCsrScanResultFilter)); - if(!HAL_STATUS_SUCCESS(status)) + pScanFilter = vos_mem_malloc(sizeof(tCsrScanResultFilter)); + if ( NULL == pScanFilter ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; + if (!HAL_STATUS_SUCCESS(status)) break; - palZeroMemory(pMac->hHdd, pScanFilter, sizeof(tCsrScanResultFilter)); - if(NULL == pSession) break; - if(NULL == pSession->pCurRoamProfile) + vos_mem_set(pScanFilter, sizeof(tCsrScanResultFilter), 0); + if (NULL == pSession) break; + if (NULL == pSession->pCurRoamProfile) { pScanFilter->EncryptionType.numEntries = 1; pScanFilter->EncryptionType.encryptionType[0] = eCSR_ENCRYPT_TYPE_NONE; @@ -1789,7 +1914,11 @@ eHalStatus csrScanHandleCapChangeScanComplete(tpAniSirGlobal pMac, tANI_U32 sess else { //We have to make a copy of pCurRoamProfile because it will be free inside csrRoamIssueConnect - status = palAllocateMemory(pMac->hHdd, (void **)&pProfile, sizeof(tCsrRoamProfile)); + pProfile = vos_mem_malloc(sizeof(tCsrRoamProfile)); + if ( NULL == pProfile ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; if(!HAL_STATUS_SUCCESS(status)) break; status = csrRoamCopyProfile(pMac, pProfile, pSession->pCurRoamProfile); @@ -1805,7 +1934,7 @@ eHalStatus csrScanHandleCapChangeScanComplete(tpAniSirGlobal pMac, tANI_U32 sess { //we want to put the last connected BSS to the very beginning, if possible csrMoveBssToHeadFromBSSID(pMac, &pSession->connectedProfile.bssid, hBSSList); - status = csrRoamIssueConnect(pMac, sessionId, pProfile, hBSSList, + status = csrRoamIssueConnect(pMac, sessionId, pProfile, hBSSList, eCsrCapsChange, 0, eANI_BOOLEAN_TRUE, eANI_BOOLEAN_TRUE); if(!HAL_STATUS_SUCCESS(status)) { @@ -1829,12 +1958,12 @@ eHalStatus csrScanHandleCapChangeScanComplete(tpAniSirGlobal pMac, tANI_U32 sess if(pScanFilter) { csrFreeScanFilter(pMac, pScanFilter); - palFreeMemory(pMac->hHdd, pScanFilter); + vos_mem_free(pScanFilter); } if(NULL != pProfile) { csrReleaseProfile(pMac, pProfile); - palFreeMemory(pMac->hHdd, pProfile); + vos_mem_free(pProfile); } return (status); @@ -1846,12 +1975,12 @@ eHalStatus csrScanResultPurge(tpAniSirGlobal pMac, tScanResultHandle hScanList) { eHalStatus status = eHAL_STATUS_INVALID_PARAMETER; tScanResultList *pScanList = (tScanResultList *)hScanList; - + if(pScanList) { status = csrLLScanPurgeResult(pMac, &pScanList->List); csrLLClose(&pScanList->List); - palFreeMemory(pMac->hHdd, pScanList); + vos_mem_free(pScanList); } return (status); } @@ -1889,7 +2018,8 @@ static tANI_U32 csrGetBssCapValue(tpAniSirGlobal pMac, tSirBssDescription *pBssD } } #endif - if( pIes ) + /* if strict select 5GHz is non-zero then ignore the capability checking */ + if (pIes && !CSR_IS_SELECT_5GHZ_MARGIN(pMac)) { //We only care about 11N capability if(pIes->HTCaps.present) @@ -1940,12 +2070,12 @@ static tANI_BOOLEAN csrIsBetterBss(tCsrScanResult *pBss1, tCsrScanResult *pBss2) } -#ifdef FEATURE_WLAN_LFR +#ifdef FEATURE_WLAN_LFR //Add the channel to the occupiedChannels array static void csrScanAddToOccupiedChannels( - tpAniSirGlobal pMac, - tCsrScanResult *pResult, - tCsrChannel *pOccupiedChannels, + tpAniSirGlobal pMac, + tCsrScanResult *pResult, + tCsrChannel *pOccupiedChannels, tDot11fBeaconIEs *pIes) { eHalStatus status; @@ -1958,15 +2088,15 @@ static void csrScanAddToOccupiedChannels( if (!csrIsChannelPresentInList(pOccupiedChannelList, numOccupiedChannels, channel) && csrNeighborRoamConnectedProfileMatch(pMac, pResult, pIes)) { - status = csrAddToChannelListFront(pOccupiedChannelList, numOccupiedChannels, channel); + status = csrAddToChannelListFront(pOccupiedChannelList, numOccupiedChannels, channel); if(HAL_STATUS_SUCCESS(status)) - { + { pOccupiedChannels->numChannels++; smsLog(pMac, LOG2, FL("%s: added channel %d to the list (count=%d)"), __func__, channel, pOccupiedChannels->numChannels); - if (pOccupiedChannels->numChannels > CSR_BG_SCAN_OCCUPIED_CHANNEL_LIST_LEN) - pOccupiedChannels->numChannels = CSR_BG_SCAN_OCCUPIED_CHANNEL_LIST_LEN; - } + if (pOccupiedChannels->numChannels > CSR_BG_SCAN_OCCUPIED_CHANNEL_LIST_LEN) + pOccupiedChannels->numChannels = CSR_BG_SCAN_OCCUPIED_CHANNEL_LIST_LEN; + } } } #endif @@ -1975,17 +2105,17 @@ static void csrScanAddToOccupiedChannels( //pIes can not be NULL static void csrScanAddResult(tpAniSirGlobal pMac, tCsrScanResult *pResult, tDot11fBeaconIEs *pIes) { -#ifdef FEATURE_WLAN_LFR +#ifdef FEATURE_WLAN_LFR tpCsrNeighborRoamControlInfo pNeighborRoamInfo = &pMac->roam.neighborRoamInfo; #endif pResult->preferValue = csrGetBssPreferValue(pMac, (int)pResult->Result.BssDescriptor.rssi); pResult->capValue = csrGetBssCapValue(pMac, &pResult->Result.BssDescriptor, pIes); csrLLInsertTail( &pMac->scan.scanResultList, &pResult->Link, LL_ACCESS_LOCK ); -#ifdef FEATURE_WLAN_LFR +#ifdef FEATURE_WLAN_LFR if(0 == pNeighborRoamInfo->cfgParams.channelInfo.numOfChannels) { - /* Build the occupied channel list, only if "gNeighborScanChannelList" is + /* Build the occupied channel list, only if "gNeighborScanChannelList" is NOT set in the cfg.ini file */ csrScanAddToOccupiedChannels(pMac, pResult, &pMac->scan.occupiedChannels, pIes); } @@ -2005,21 +2135,108 @@ eHalStatus csrScanGetResult(tpAniSirGlobal pMac, tCsrScanResultFilter *pFilter, eCsrAuthType auth = eCSR_AUTH_TYPE_OPEN_SYSTEM; tDot11fBeaconIEs *pIes, *pNewIes; tANI_BOOLEAN fMatch; - + tANI_U16 i = 0; + if(phResult) { *phResult = CSR_INVALID_SCANRESULT_HANDLE; } - status = palAllocateMemory(pMac->hHdd, (void **)&pRetList, sizeof(tScanResultList)); - if(HAL_STATUS_SUCCESS(status)) + + if (pMac->roam.configParam.nSelect5GHzMargin) + { + pMac->scan.inScanResultBestAPRssi = -128; + csrLLLock(&pMac->scan.scanResultList); + + /* Find out the best AP Rssi going thru the scan results */ + pEntry = csrLLPeekHead(&pMac->scan.scanResultList, LL_ACCESS_NOLOCK); + while ( NULL != pEntry) + { + pBssDesc = GET_BASE_ADDR( pEntry, tCsrScanResult, Link ); + fMatch = FALSE; + + if (pFilter) + for(i = 0; i < pFilter->SSIDs.numOfSSIDs; i++) + { + fMatch = csrIsSsidMatch( pMac, pFilter->SSIDs.SSIDList[i].SSID.ssId, pFilter->SSIDs.SSIDList[i].SSID.length, + pBssDesc->Result.ssId.ssId, + pBssDesc->Result.ssId.length, eANI_BOOLEAN_TRUE ); + if (fMatch) + { + pIes = (tDot11fBeaconIEs *)( pBssDesc->Result.pvIes ); + + //At this time, pBssDescription->Result.pvIes may be NULL + if( !pIes && (!HAL_STATUS_SUCCESS(csrGetParsedBssDescriptionIEs(pMac, + &pBssDesc->Result.BssDescriptor, &pIes))) ) + { + continue; + } + + smsLog(pMac, LOG1, FL("SSID Matched")); + fMatch = csrIsSecurityMatch( pMac, &pFilter->authType, &pFilter->EncryptionType, &pFilter->mcEncryptionType, + &pBssDesc->Result.BssDescriptor, pIes, NULL, NULL, NULL ); + if ((pBssDesc->Result.pvIes == NULL) && pIes) + vos_mem_free(pIes); + + if (fMatch) + smsLog(pMac, LOG1, FL(" Security Matched")); + } + } + + if (fMatch && (pBssDesc->Result.BssDescriptor.rssi > pMac->scan.inScanResultBestAPRssi)) + { + smsLog(pMac, LOG1, FL("Best AP Rssi changed from %d to %d"), + pMac->scan.inScanResultBestAPRssi, + pBssDesc->Result.BssDescriptor.rssi); + pMac->scan.inScanResultBestAPRssi = pBssDesc->Result.BssDescriptor.rssi; + } + pEntry = csrLLNext(&pMac->scan.scanResultList, pEntry, LL_ACCESS_NOLOCK); + } + + if ( -128 != pMac->scan.inScanResultBestAPRssi) + { + smsLog(pMac, LOG1, FL("Best AP Rssi is %d"), pMac->scan.inScanResultBestAPRssi); + /* Modify Rssi category based on best AP Rssi */ + csrAssignRssiForCategory(pMac, pMac->scan.inScanResultBestAPRssi, pMac->roam.configParam.bCatRssiOffset); + pEntry = csrLLPeekHead(&pMac->scan.scanResultList, LL_ACCESS_NOLOCK); + while ( NULL != pEntry) + { + pBssDesc = GET_BASE_ADDR( pEntry, tCsrScanResult, Link ); + + /* re-assign preference value based on modified rssi bucket */ + pBssDesc->preferValue = csrGetBssPreferValue(pMac, (int)pBssDesc->Result.BssDescriptor.rssi); + + smsLog(pMac, LOG2, FL("BSSID(%02X:%02X:%02X:%02X:%02X:%02X) Rssi(%d) Chnl(%d) PrefVal(%lu) SSID=%.*s"), + pBssDesc->Result.BssDescriptor.bssId[0], + pBssDesc->Result.BssDescriptor.bssId[1], + pBssDesc->Result.BssDescriptor.bssId[2], + pBssDesc->Result.BssDescriptor.bssId[3], + pBssDesc->Result.BssDescriptor.bssId[4], + pBssDesc->Result.BssDescriptor.bssId[5], + pBssDesc->Result.BssDescriptor.rssi, + pBssDesc->Result.BssDescriptor.channelId, + pBssDesc->preferValue, + pBssDesc->Result.ssId.length, pBssDesc->Result.ssId.ssId); + + pEntry = csrLLNext(&pMac->scan.scanResultList, pEntry, LL_ACCESS_NOLOCK); + } + } + + csrLLUnlock(&pMac->scan.scanResultList); + } + + pRetList = vos_mem_malloc(sizeof(tScanResultList)); + if ( NULL == pRetList ) + status = eHAL_STATUS_FAILURE; + else { - palZeroMemory(pMac->hHdd, pRetList, sizeof(tScanResultList)); + status = eHAL_STATUS_SUCCESS; + vos_mem_set(pRetList, sizeof(tScanResultList), 0); csrLLOpen(pMac->hHdd, &pRetList->List); pRetList->pCurEntry = NULL; - + csrLLLock(&pMac->scan.scanResultList); pEntry = csrLLPeekHead( &pMac->scan.scanResultList, LL_ACCESS_NOLOCK ); - while( pEntry ) + while( pEntry ) { pBssDesc = GET_BASE_ADDR( pEntry, tCsrScanResult, Link ); pIes = (tDot11fBeaconIEs *)( pBssDesc->Result.pvIes ); @@ -2047,10 +2264,14 @@ eHalStatus csrScanGetResult(tpAniSirGlobal pMac, tCsrScanResultFilter *pFilter, //The pIes is allocated by someone else. make a copy //Only to save parsed IEs if caller provides a filter. Most likely the caller //is using to for association, hence save the parsed IEs - status = palAllocateMemory(pMac->hHdd, (void **)&pNewIes, sizeof(tDot11fBeaconIEs)); - if( HAL_STATUS_SUCCESS( status ) ) + pNewIes = vos_mem_malloc(sizeof(tDot11fBeaconIEs)); + if ( NULL == pNewIes ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; + if ( HAL_STATUS_SUCCESS( status ) ) { - palCopyMemory( pMac->hHdd, pNewIes, pIes, sizeof( tDot11fBeaconIEs ) ); + vos_mem_copy(pNewIes, pIes, sizeof( tDot11fBeaconIEs )); } else { @@ -2058,7 +2279,7 @@ eHalStatus csrScanGetResult(tpAniSirGlobal pMac, tCsrScanResultFilter *pFilter, //Need to free memory allocated by csrMatchBSS if( !pBssDesc->Result.pvIes ) { - palFreeMemory(pMac->hHdd, pIes); + vos_mem_free(pIes); } break; } @@ -2066,7 +2287,7 @@ eHalStatus csrScanGetResult(tpAniSirGlobal pMac, tCsrScanResultFilter *pFilter, }//fMatch else if( !pBssDesc->Result.pvIes ) { - palFreeMemory(pMac->hHdd, pIes); + vos_mem_free(pIes); } } } @@ -2074,17 +2295,21 @@ eHalStatus csrScanGetResult(tpAniSirGlobal pMac, tCsrScanResultFilter *pFilter, { bssLen = pBssDesc->Result.BssDescriptor.length + sizeof(pBssDesc->Result.BssDescriptor.length); allocLen = sizeof( tCsrScanResult ) + bssLen; - status = palAllocateMemory(pMac->hHdd, (void **)&pResult, allocLen); + pResult = vos_mem_malloc(allocLen); + if ( NULL == pResult ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; if(!HAL_STATUS_SUCCESS(status)) { smsLog(pMac, LOGE, FL(" fail to allocate memory for scan result, len=%d"), allocLen); if(pNewIes) { - palFreeMemory(pMac->hHdd, pNewIes); + vos_mem_free(pNewIes); } break; } - palZeroMemory(pMac->hHdd, pResult, allocLen); + vos_mem_set(pResult, allocLen, 0); pResult->capValue = pBssDesc->capValue; pResult->preferValue = pBssDesc->preferValue; pResult->ucEncryptionType = uc; @@ -2095,17 +2320,8 @@ eHalStatus csrScanGetResult(tpAniSirGlobal pMac, tCsrScanResultFilter *pFilter, //save the pIes for later use pResult->Result.pvIes = pNewIes; //save bss description - status = palCopyMemory(pMac->hHdd, &pResult->Result.BssDescriptor, &pBssDesc->Result.BssDescriptor, bssLen); - if(!HAL_STATUS_SUCCESS(status)) - { - smsLog(pMac, LOGE, FL(" fail to copy memory for scan result")); - palFreeMemory(pMac->hHdd, pResult); - if(pNewIes) - { - palFreeMemory(pMac->hHdd, pNewIes); - } - break; - } + vos_mem_copy(&pResult->Result.BssDescriptor, + &pBssDesc->Result.BssDescriptor, bssLen); //No need to lock pRetList because it is locally allocated and no outside can access it at this time if(csrLLIsListEmpty(&pRetList->List, LL_ACCESS_NOLOCK)) { @@ -2116,7 +2332,7 @@ eHalStatus csrScanGetResult(tpAniSirGlobal pMac, tCsrScanResultFilter *pFilter, //To sort the list tListElem *pTmpEntry; tCsrScanResult *pTmpResult; - + pTmpEntry = csrLLPeekHead(&pRetList->List, LL_ACCESS_NOLOCK); while(pTmpEntry) { @@ -2141,9 +2357,9 @@ eHalStatus csrScanGetResult(tpAniSirGlobal pMac, tCsrScanResultFilter *pFilter, pEntry = csrLLNext( &pMac->scan.scanResultList, pEntry, LL_ACCESS_NOLOCK ); }//while csrLLUnlock(&pMac->scan.scanResultList); - + smsLog(pMac, LOG2, FL("return %d BSS"), csrLLCount(&pRetList->List)); - + if( !HAL_STATUS_SUCCESS(status) || (phResult == NULL) ) { //Fail or No one wants the result. @@ -2155,7 +2371,7 @@ eHalStatus csrScanGetResult(tpAniSirGlobal pMac, tCsrScanResultFilter *pFilter, { //We are here meaning the there is no match csrLLClose(&pRetList->List); - palFreeMemory(pMac->hHdd, pRetList); + vos_mem_free(pRetList); status = eHAL_STATUS_E_NULL_VALUE; } else if(phResult) @@ -2164,7 +2380,7 @@ eHalStatus csrScanGetResult(tpAniSirGlobal pMac, tCsrScanResultFilter *pFilter, } } }//Allocated pRetList - + return (status); } @@ -2175,9 +2391,9 @@ eHalStatus csrScanGetResult(tpAniSirGlobal pMac, tCsrScanResultFilter *pFilter, * we are unable to recover from * csrRoamRoamingStateDisassocRspProcessor. * If it is needed to remove this routine, - * first ensure that we recover gracefully from - * csrRoamRoamingStateDisassocRspProcessor if - * csrScanGetResult returns with a failure because + * first ensure that we recover gracefully from + * csrRoamRoamingStateDisassocRspProcessor if + * csrScanGetResult returns with a failure because * of not being able to find the roaming BSS. */ tANI_U8 csrScanFlushDenied(tpAniSirGlobal pMac) @@ -2217,7 +2433,7 @@ eHalStatus csrScanFlushSelectiveResult(tpAniSirGlobal pMac, v_BOOL_t flushP2P) while( pEntry != NULL) { pBssDesc = GET_BASE_ADDR( pEntry, tCsrScanResult, Link ); - if( flushP2P == vos_mem_compare( pBssDesc->Result.ssId.ssId, + if( flushP2P == vos_mem_compare( pBssDesc->Result.ssId.ssId, "DIRECT-", 7) ) { pFreeElem = pEntry; @@ -2312,7 +2528,7 @@ eHalStatus csrScanFilter11dResult(tpAniSirGlobal pMac) while( pEntry ) { pBssDesc = GET_BASE_ADDR( pEntry, tCsrScanResult, Link ); - pTempEntry = csrLLNext( &pMac->scan.scanResultList, pEntry, + pTempEntry = csrLLNext( &pMac->scan.scanResultList, pEntry, LL_ACCESS_LOCK ); if(csrCheck11dChannel(pBssDesc->Result.BssDescriptor.channelId, pMac->roam.validChannelList, len)) @@ -2338,62 +2554,58 @@ eHalStatus csrScanCopyResultList(tpAniSirGlobal pMac, tScanResultHandle hIn, tSc tANI_U32 count = 0; tListElem *pEntry; tANI_U32 bssLen, allocLen; - + if(phResult) { *phResult = CSR_INVALID_SCANRESULT_HANDLE; } - status = palAllocateMemory(pMac->hHdd, (void **)&pRetList, sizeof(tScanResultList)); - if(HAL_STATUS_SUCCESS(status)) + pRetList = vos_mem_malloc(sizeof(tScanResultList)); + if ( NULL == pRetList ) + status = eHAL_STATUS_FAILURE; + else { - palZeroMemory(pMac->hHdd, pRetList, sizeof(tScanResultList)); + vos_mem_set(pRetList, sizeof(tScanResultList), 0); csrLLOpen(pMac->hHdd, &pRetList->List); pRetList->pCurEntry = NULL; csrLLLock(&pMac->scan.scanResultList); csrLLLock(&pInList->List); - + pEntry = csrLLPeekHead( &pInList->List, LL_ACCESS_NOLOCK ); - while( pEntry ) + while( pEntry ) { pScanResult = GET_BASE_ADDR( pEntry, tCsrScanResult, Link ); bssLen = pScanResult->Result.BssDescriptor.length + sizeof(pScanResult->Result.BssDescriptor.length); allocLen = sizeof( tCsrScanResult ) + bssLen; - status = palAllocateMemory(pMac->hHdd, (void **)&pResult, allocLen); - if(!HAL_STATUS_SUCCESS(status)) - { - csrScanResultPurge(pMac, (tScanResultHandle *)pRetList); - count = 0; - break; - } - palZeroMemory(pMac->hHdd, pResult, allocLen); - status = palCopyMemory(pMac->hHdd, &pResult->Result.BssDescriptor, &pScanResult->Result.BssDescriptor, bssLen); - if(!HAL_STATUS_SUCCESS(status)) + pResult = vos_mem_malloc(allocLen); + if ( NULL == pResult ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; + if (!HAL_STATUS_SUCCESS(status)) { csrScanResultPurge(pMac, (tScanResultHandle *)pRetList); count = 0; break; } + vos_mem_set(pResult, allocLen , 0); + vos_mem_copy(&pResult->Result.BssDescriptor, &pScanResult->Result.BssDescriptor, bssLen); if( pScanResult->Result.pvIes ) { - status = palAllocateMemory(pMac->hHdd, (void **)&pResult->Result.pvIes, sizeof( tDot11fBeaconIEs )); - if(!HAL_STATUS_SUCCESS(status)) - { - //Free the memory we allocate above first - palFreeMemory( pMac->hHdd, pResult ); - csrScanResultPurge(pMac, (tScanResultHandle *)pRetList); - count = 0; - break; - } - status = palCopyMemory(pMac->hHdd, pResult->Result.pvIes, - pScanResult->Result.pvIes, sizeof( tDot11fBeaconIEs )); - if(!HAL_STATUS_SUCCESS(status)) + pResult->Result.pvIes = vos_mem_malloc(sizeof( tDot11fBeaconIEs )); + if ( NULL == pResult->Result.pvIes ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; + if (!HAL_STATUS_SUCCESS(status)) { //Free the memory we allocate above first - palFreeMemory( pMac->hHdd, pResult ); + vos_mem_free(pResult); csrScanResultPurge(pMac, (tScanResultHandle *)pRetList); count = 0; break; } + vos_mem_copy(pResult->Result.pvIes, pScanResult->Result.pvIes, + sizeof( tDot11fBeaconIEs )); } csrLLInsertTail(&pRetList->List, &pResult->Link, LL_ACCESS_LOCK); count++; @@ -2401,13 +2613,13 @@ eHalStatus csrScanCopyResultList(tpAniSirGlobal pMac, tScanResultHandle hIn, tSc }//while csrLLUnlock(&pInList->List); csrLLUnlock(&pMac->scan.scanResultList); - + if(HAL_STATUS_SUCCESS(status)) { if(0 == count) { csrLLClose(&pRetList->List); - palFreeMemory(pMac->hHdd, pRetList); + vos_mem_free(pRetList); status = eHAL_STATUS_E_NULL_VALUE; } else if(phResult) @@ -2416,12 +2628,12 @@ eHalStatus csrScanCopyResultList(tpAniSirGlobal pMac, tScanResultHandle hIn, tSc } } }//Allocated pRetList - + return (status); } - + eHalStatus csrScanningStateMsgProcessor( tpAniSirGlobal pMac, void *pMsgBuf ) { eHalStatus status = eHAL_STATUS_SUCCESS; @@ -2433,7 +2645,7 @@ eHalStatus csrScanningStateMsgProcessor( tpAniSirGlobal pMac, void *pMsgBuf ) } else { - if(pMsg->type == eWNI_SME_UPPER_LAYER_ASSOC_CNF) + if(pMsg->type == eWNI_SME_UPPER_LAYER_ASSOC_CNF) { tCsrRoamSession *pSession; tSirSmeAssocIndToUpperLayerCnf *pUpperLayerAssocCnf; @@ -2442,7 +2654,7 @@ eHalStatus csrScanningStateMsgProcessor( tpAniSirGlobal pMac, void *pMsgBuf ) tANI_U32 sessionId; eHalStatus status; smsLog( pMac, LOG1, FL("Scanning : ASSOCIATION confirmation can be given to upper layer ")); - palZeroMemory(pMac->hHdd, &roamInfo, sizeof(tCsrRoamInfo)); + vos_mem_set(&roamInfo, sizeof(tCsrRoamInfo), 0); pRoamInfo = &roamInfo; pUpperLayerAssocCnf = (tSirSmeAssocIndToUpperLayerCnf *)pMsgBuf; status = csrRoamGetSessionIdFromBSSID( pMac, (tCsrBssid *)pUpperLayerAssocCnf->bssId, &sessionId ); @@ -2454,15 +2666,15 @@ eHalStatus csrScanningStateMsgProcessor( tpAniSirGlobal pMac, void *pMsgBuf ) return eHAL_STATUS_FAILURE; } - pRoamInfo->statusCode = eSIR_SME_SUCCESS; //send the status code as Success + pRoamInfo->statusCode = eSIR_SME_SUCCESS; //send the status code as Success pRoamInfo->u.pConnectedProfile = &pSession->connectedProfile; pRoamInfo->staId = (tANI_U8)pUpperLayerAssocCnf->aid; pRoamInfo->rsnIELen = (tANI_U8)pUpperLayerAssocCnf->rsnIE.length; pRoamInfo->prsnIE = pUpperLayerAssocCnf->rsnIE.rsnIEdata; pRoamInfo->addIELen = (tANI_U8)pUpperLayerAssocCnf->addIE.length; - pRoamInfo->paddIE = pUpperLayerAssocCnf->addIE.addIEdata; - palCopyMemory(pMac->hHdd, pRoamInfo->peerMac, pUpperLayerAssocCnf->peerMacAddr, sizeof(tSirMacAddr)); - palCopyMemory(pMac->hHdd, &pRoamInfo->bssid, pUpperLayerAssocCnf->bssId, sizeof(tCsrBssid)); + pRoamInfo->paddIE = pUpperLayerAssocCnf->addIE.addIEdata; + vos_mem_copy(pRoamInfo->peerMac, pUpperLayerAssocCnf->peerMacAddr, sizeof(tSirMacAddr)); + vos_mem_copy(&pRoamInfo->bssid, pUpperLayerAssocCnf->bssId, sizeof(tCsrBssid)); pRoamInfo->wmmEnabledSta = pUpperLayerAssocCnf->wmmEnabledSta; if(CSR_IS_INFRA_AP(pRoamInfo->u.pConnectedProfile) ) { @@ -2509,7 +2721,7 @@ void csrCheckNSaveWscIe(tpAniSirGlobal pMac, tSirBssDescription *pNewBssDescr, t (0 == pNewBssDescr->WscIeLen)) { idx = 0; - len = pOldBssDescr->length - sizeof(tSirBssDescription) + + len = pOldBssDescr->length - sizeof(tSirBssDescription) + sizeof(tANI_U16) + sizeof(tANI_U32) - DOT11F_IE_WSCPROBERES_MIN_LEN - 2; pbIe = (tANI_U8 *)pOldBssDescr->ieFields; //Save WPS IE if it exists @@ -2522,8 +2734,7 @@ void csrCheckNSaveWscIe(tpAniSirGlobal pMac, tSirBssDescription *pNewBssDescr, t //Founrd it if((DOT11F_IE_WSCPROBERES_MAX_LEN - 2) >= pbIe[1]) { - palCopyMemory(pMac->hHdd, pNewBssDescr->WscIeProbeRsp, - pbIe, pbIe[1] + 2); + vos_mem_copy(pNewBssDescr->WscIeProbeRsp, pbIe, pbIe[1] + 2); pNewBssDescr->WscIeLen = pbIe[1] + 2; } break; @@ -2538,7 +2749,7 @@ void csrCheckNSaveWscIe(tpAniSirGlobal pMac, tSirBssDescription *pNewBssDescr, t //pIes may be NULL tANI_BOOLEAN csrRemoveDupBssDescription( tpAniSirGlobal pMac, tSirBssDescription *pSirBssDescr, - tDot11fBeaconIEs *pIes, tAniSSID *pSsid , v_TIME_t *timer ) + tDot11fBeaconIEs *pIes, tAniSSID *pSsid, v_TIME_t *timer, tANI_BOOLEAN fForced ) { tListElem *pEntry; @@ -2550,14 +2761,14 @@ tANI_BOOLEAN csrRemoveDupBssDescription( tpAniSirGlobal pMac, tSirBssDescription // results for this Bss. In that case, remove the 'old' Bss description from the linked list. pEntry = csrLLPeekHead( &pMac->scan.scanResultList, LL_ACCESS_LOCK ); - while( pEntry ) + while( pEntry ) { pBssDesc = GET_BASE_ADDR( pEntry, tCsrScanResult, Link ); // we have a duplicate scan results only when BSSID, SSID, Channel and NetworkType // matches - if ( csrIsDuplicateBssDescription( pMac, &pBssDesc->Result.BssDescriptor, - pSirBssDescr, pIes ) ) + if ( csrIsDuplicateBssDescription( pMac, &pBssDesc->Result.BssDescriptor, + pSirBssDescr, pIes, fForced ) ) { pSirBssDescr->rssi = (tANI_S8)( (((tANI_S32)pSirBssDescr->rssi * CSR_SCAN_RESULT_RSSI_WEIGHT ) + ((tANI_S32)pBssDesc->Result.BssDescriptor.rssi * (100 - CSR_SCAN_RESULT_RSSI_WEIGHT) )) / 100 ); @@ -2569,7 +2780,7 @@ tANI_BOOLEAN csrRemoveDupBssDescription( tpAniSirGlobal pMac, tSirBssDescription *pSsid = pBssDesc->Result.ssId; *timer = pBssDesc->Result.timer; csrCheckNSaveWscIe(pMac, pSirBssDescr, &pBssDesc->Result.BssDescriptor); - + csrFreeScanResultEntry( pMac, pBssDesc ); } else @@ -2614,35 +2825,34 @@ eHalStatus csrAddPMKIDCandidateList( tpAniSirGlobal pMac, tANI_U32 sessionId, #ifdef FEATURE_WLAN_DIAG_SUPPORT_CSR { WLAN_VOS_DIAG_EVENT_DEF(secEvent, vos_event_wlan_security_payload_type); - palZeroMemory(pMac->hHdd, &secEvent, sizeof(vos_event_wlan_security_payload_type)); + vos_mem_set(&secEvent, sizeof(vos_event_wlan_security_payload_type), 0); secEvent.eventId = WLAN_SECURITY_EVENT_PMKID_CANDIDATE_FOUND; - secEvent.encryptionModeMulticast = + secEvent.encryptionModeMulticast = (v_U8_t)diagEncTypeFromCSRType(pSession->connectedProfile.mcEncryptionType); - secEvent.encryptionModeUnicast = + secEvent.encryptionModeUnicast = (v_U8_t)diagEncTypeFromCSRType(pSession->connectedProfile.EncryptionType); - palCopyMemory( pMac->hHdd, secEvent.bssid, pSession->connectedProfile.bssid, 6 ); - secEvent.authMode = + vos_mem_copy(secEvent.bssid, pSession->connectedProfile.bssid, 6); + secEvent.authMode = (v_U8_t)diagAuthTypeFromCSRType(pSession->connectedProfile.AuthType); WLAN_VOS_DIAG_EVENT_REPORT(&secEvent, EVENT_WLAN_SECURITY); } #endif//#ifdef FEATURE_WLAN_DIAG_SUPPORT_CSR // if yes, then add to PMKIDCandidateList - status = palCopyMemory(pMac->hHdd, pSession->PmkidCandidateInfo[pSession->NumPmkidCandidate].BSSID, - pBssDesc->bssId, WNI_CFG_BSSID_LEN); - - if( HAL_STATUS_SUCCESS( status ) ) + vos_mem_copy(pSession->PmkidCandidateInfo[pSession->NumPmkidCandidate].BSSID, + pBssDesc->bssId, WNI_CFG_BSSID_LEN); + // Bit 0 offirst byte - PreAuthentication Capability + if ( (pIes->RSN.RSN_Cap[0] >> 0) & 0x1 ) { - if ( (pIes->RSN.RSN_Cap[0] >> 0) & 0x1 ) // Bit 0 offirst byte - PreAuthentication Capability - { - pSession->PmkidCandidateInfo[pSession->NumPmkidCandidate].preAuthSupported = eANI_BOOLEAN_TRUE; - } - else - { - pSession->PmkidCandidateInfo[pSession->NumPmkidCandidate].preAuthSupported = eANI_BOOLEAN_FALSE; - } - pSession->NumPmkidCandidate++; + pSession->PmkidCandidateInfo[pSession->NumPmkidCandidate].preAuthSupported + = eANI_BOOLEAN_TRUE; + } + else + { + pSession->PmkidCandidateInfo[pSession->NumPmkidCandidate].preAuthSupported + = eANI_BOOLEAN_FALSE; } + pSession->NumPmkidCandidate++; } else { @@ -2656,7 +2866,7 @@ eHalStatus csrAddPMKIDCandidateList( tpAniSirGlobal pMac, tANI_U32 sessionId, //This function checks whether new AP is found for the current connected profile //If it is found, it return the sessionId, else it return invalid sessionID -tANI_U32 csrProcessBSSDescForPMKIDList(tpAniSirGlobal pMac, +tANI_U32 csrProcessBSSDescForPMKIDList(tpAniSirGlobal pMac, tSirBssDescription *pBssDesc, tDot11fBeaconIEs *pIes) { @@ -2671,7 +2881,7 @@ tANI_U32 csrProcessBSSDescForPMKIDList(tpAniSirGlobal pMac, if( CSR_IS_SESSION_VALID( pMac, i ) ) { pSession = CSR_GET_SESSION( pMac, i ); - if( csrIsConnStateConnectedInfra( pMac, i ) && + if( csrIsConnStateConnectedInfra( pMac, i ) && ( eCSR_AUTH_TYPE_RSN == pSession->connectedProfile.AuthType ) ) { if(csrMatchBSSToConnectProfile(pMac, &pSession->connectedProfile, pBssDesc, pIesLocal)) @@ -2688,7 +2898,7 @@ tANI_U32 csrProcessBSSDescForPMKIDList(tpAniSirGlobal pMac, } if( !pIes ) { - palFreeMemory(pMac->hHdd, pIesLocal); + vos_mem_free(pIesLocal); } } @@ -2708,7 +2918,8 @@ eHalStatus csrAddBKIDCandidateList( tpAniSirGlobal pMac, tANI_U32 sessionId, return eHAL_STATUS_FAILURE; } - smsLog(pMac, LOGW, "csrAddBKIDCandidateList called pMac->scan.NumBkidCandidate = %d", pSession->NumBkidCandidate); + smsLog(pMac, LOGW, "csrAddBKIDCandidateList called pMac->scan.NumBkidCandidate = %d", + pSession->NumBkidCandidate); if( pIes ) { // check if this is a WAPI BSS @@ -2719,21 +2930,19 @@ eHalStatus csrAddBKIDCandidateList( tpAniSirGlobal pMac, tANI_U32 sessionId, { // if yes, then add to BKIDCandidateList - status = palCopyMemory(pMac->hHdd, pSession->BkidCandidateInfo[pSession->NumBkidCandidate].BSSID, - pBssDesc->bssId, WNI_CFG_BSSID_LEN); - - if( HAL_STATUS_SUCCESS( status ) ) + vos_mem_copy(pSession->BkidCandidateInfo[pSession->NumBkidCandidate].BSSID, + pBssDesc->bssId, WNI_CFG_BSSID_LEN); + if ( pIes->WAPI.preauth ) { - if ( pIes->WAPI.preauth ) - { - pSession->BkidCandidateInfo[pSession->NumBkidCandidate].preAuthSupported = eANI_BOOLEAN_TRUE; - } - else - { - pSession->BkidCandidateInfo[pSession->NumBkidCandidate].preAuthSupported = eANI_BOOLEAN_FALSE; - } - pSession->NumBkidCandidate++; + pSession->BkidCandidateInfo[pSession->NumBkidCandidate].preAuthSupported + = eANI_BOOLEAN_TRUE; } + else + { + pSession->BkidCandidateInfo[pSession->NumBkidCandidate].preAuthSupported + = eANI_BOOLEAN_FALSE; + } + pSession->NumBkidCandidate++; } else { @@ -2762,7 +2971,7 @@ tANI_BOOLEAN csrProcessBSSDescForBKIDList(tpAniSirGlobal pMac, tSirBssDescriptio if( CSR_IS_SESSION_VALID( pMac, sessionId) ) { pSession = CSR_GET_SESSION( pMac, sessionId ); - if( csrIsConnStateConnectedInfra( pMac, sessionId ) && + if( csrIsConnStateConnectedInfra( pMac, sessionId ) && eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE == pSession->connectedProfile.AuthType) { if(csrMatchBSSToConnectProfile(pMac, &pSession->connectedProfile,pBssDesc, pIesLocal)) @@ -2778,7 +2987,7 @@ tANI_BOOLEAN csrProcessBSSDescForBKIDList(tpAniSirGlobal pMac, tSirBssDescriptio } if(!pIes) { - palFreeMemory(pMac->hHdd, pIesLocal); + vos_mem_free(pIesLocal); } } @@ -2791,8 +3000,11 @@ tANI_BOOLEAN csrProcessBSSDescForBKIDList(tpAniSirGlobal pMac, tSirBssDescriptio static void csrMoveTempScanResultsToMainList( tpAniSirGlobal pMac, tANI_U8 reason ) { tListElem *pEntry; + tListElem *pEntryTemp; + tListElem *pNext; tCsrScanResult *pBssDescription; tANI_S8 cand_Bss_rssi; + tANI_S8 rssi_of_current_country; tANI_BOOLEAN fDupBss; #ifdef FEATURE_WLAN_WAPI tANI_BOOLEAN fNewWapiBSSForCurConnection = eANI_BOOLEAN_FALSE; @@ -2801,9 +3013,11 @@ static void csrMoveTempScanResultsToMainList( tpAniSirGlobal pMac, tANI_U8 reaso tANI_U32 sessionId = CSR_SESSION_ID_INVALID; tAniSSID tmpSsid; v_TIME_t timer=0; + tCsrBssid bssid_temp = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; tmpSsid.length = 0; cand_Bss_rssi = -128; // RSSI coming from PE is -ve + rssi_of_current_country = -128; // remove the BSS descriptions from temporary list while( ( pEntry = csrLLRemoveTail( &pMac->scan.tempScanResults, LL_ACCESS_LOCK ) ) != NULL) @@ -2825,7 +3039,7 @@ static void csrMoveTempScanResultsToMainList( tpAniSirGlobal pMac, tANI_U8 reaso csrFreeScanResultEntry(pMac, pBssDescription); continue; } - fDupBss = csrRemoveDupBssDescription( pMac, &pBssDescription->Result.BssDescriptor, pIesLocal, &tmpSsid , &timer ); + fDupBss = csrRemoveDupBssDescription( pMac, &pBssDescription->Result.BssDescriptor, pIesLocal, &tmpSsid, &timer, FALSE ); //Check whether we have reach out limit, but don't lose the LFR candidates came from FW if( CSR_SCAN_IS_OVER_BSS_LIMIT(pMac) #ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD @@ -2838,7 +3052,7 @@ static void csrMoveTempScanResultsToMainList( tpAniSirGlobal pMac, tANI_U8 reaso //Free the resources if( (pBssDescription->Result.pvIes == NULL) && pIesLocal ) { - palFreeMemory(pMac->hHdd, pIesLocal); + vos_mem_free(pIesLocal); } csrFreeScanResultEntry(pMac, pBssDescription); //Continue because there may be duplicated BSS @@ -2848,11 +3062,11 @@ static void csrMoveTempScanResultsToMainList( tpAniSirGlobal pMac, tANI_U8 reaso if ( !fDupBss ) { //Found a new BSS - sessionId = csrProcessBSSDescForPMKIDList(pMac, + sessionId = csrProcessBSSDescForPMKIDList(pMac, &pBssDescription->Result.BssDescriptor, pIesLocal); if( CSR_SESSION_ID_INVALID != sessionId) { - csrRoamCallCallback(pMac, sessionId, NULL, 0, + csrRoamCallCallback(pMac, sessionId, NULL, 0, eCSR_ROAM_SCAN_FOUND_NEW_BSS, eCSR_ROAM_RESULT_NONE); } } @@ -2861,11 +3075,11 @@ static void csrMoveTempScanResultsToMainList( tpAniSirGlobal pMac, tANI_U8 reaso //Check if the new one has SSID it it, if not, use the older SSID if it exists. if( (0 == pBssDescription->Result.ssId.length) && tmpSsid.length ) { - //New BSS has a hidden SSID and old one has the SSID. Keep the SSID only + //New BSS has a hidden SSID and old one has the SSID. Keep the SSID only //if diff of saved SSID time and current time is less than 1 min to avoid //side effect of saving SSID with old one is that if AP changes its SSID while remain - //hidden, we may never see it and also to address the requirement of - //When we remove hidden ssid from the profile i.e., forget the SSID via + //hidden, we may never see it and also to address the requirement of + //When we remove hidden ssid from the profile i.e., forget the SSID via // GUI that SSID shouldn't see in the profile if( (vos_timer_get_system_time() - timer) <= HIDDEN_TIMER) { @@ -2875,36 +3089,127 @@ static void csrMoveTempScanResultsToMainList( tpAniSirGlobal pMac, tANI_U8 reaso } } - //Tush: find a good AP for 11d info - if( csrIs11dSupported( pMac ) ) + //Find a good AP for 11d info + if ( csrIs11dSupported( pMac ) ) { - if(cand_Bss_rssi < pBssDescription->Result.BssDescriptor.rssi) + if (cand_Bss_rssi < pBssDescription->Result.BssDescriptor.rssi) { // check if country information element is present - if(pIesLocal->Country.present) + if (pIesLocal->Country.present) { cand_Bss_rssi = pBssDescription->Result.BssDescriptor.rssi; - // learn country information - csrLearnCountryInformation( pMac, &pBssDescription->Result.BssDescriptor, - pIesLocal, eANI_BOOLEAN_FALSE ); + smsLog(pMac, LOGW, FL("11d AP Bssid " MAC_ADDRESS_STR + " chan= %d, rssi = -%d, countryCode %c%c"), + MAC_ADDR_ARRAY( pBssDescription->Result.BssDescriptor.bssId), + pBssDescription->Result.BssDescriptor.channelId, + pBssDescription->Result.BssDescriptor.rssi * (-1), + pIesLocal->Country.country[0],pIesLocal->Country.country[1] ); + //Getting BSSID for best AP in scan result. + vos_mem_copy(bssid_temp, + pBssDescription->Result.BssDescriptor.bssId, sizeof(tSirMacAddr)); + } } } + //get current rssi for BSS from which country code is acquired. + if ( csrIs11dSupported(pMac) && (csrIsMacAddressEqual(pMac, + &pMac->scan.currentCountryBssid, + &pBssDescription->Result.BssDescriptor.bssId) )) + { + smsLog(pMac, LOGW, FL("Information about current country Bssid " + MAC_ADDRESS_STR + " chan= %d, rssi = -%d, countryCode %c%c"), + MAC_ADDR_ARRAY( pBssDescription->Result.BssDescriptor.bssId), + pBssDescription->Result.BssDescriptor.channelId, + pBssDescription->Result.BssDescriptor.rssi * (-1), + pIesLocal->Country.country[0],pIesLocal->Country.country[1] ); + rssi_of_current_country = pBssDescription->Result.BssDescriptor.rssi ; + } + // append to main list csrScanAddResult(pMac, pBssDescription, pIesLocal); - if( (pBssDescription->Result.pvIes == NULL) && pIesLocal ) + if ( (pBssDescription->Result.pvIes == NULL) && pIesLocal ) + { + vos_mem_free(pIesLocal); + } + } + + //we don't need to update CC while connected to an AP which is advertising CC already + if (csrIs11dSupported(pMac)) + { + tANI_U32 i; + tCsrRoamSession *pSession; + + for (i = 0; i < CSR_ROAM_SESSION_MAX; i++ ) + { + if (CSR_IS_SESSION_VALID( pMac, i ) ) + { + pSession = CSR_GET_SESSION( pMac, i ); + if (csrIsConnStateConnected(pMac, i)) + { + if (csrIsBssidMatch(pMac, (tCsrBssid *)&pMac->scan.currentCountryBssid, + &pSession->connectedProfile.bssid)) + { + smsLog(pMac, LOGW, FL("No need for updating CC, we will" + "continue with current AP's CC")); + goto end; + } + } + } + } + + // Calculating 30% of current rssi is an idea for not to change + // country code so freq. + if (rssi_of_current_country != -128) { - palFreeMemory(pMac->hHdd, pIesLocal); + rssi_of_current_country = rssi_of_current_country + - THIRTY_PERCENT(rssi_of_current_country); + } + //if new candidate AP has 30% better RSSI or this is the first time or + //AP aged out of CSR cache or we are in world CC now + if ((rssi_of_current_country <= cand_Bss_rssi ) || (rssi_of_current_country == -128) + ||( '0' == pMac->scan.countryCode11d[ 0 ] && '0' == pMac->scan.countryCode11d[ 1 ] )) + { + csrLLLock(&pMac->scan.scanResultList); + pEntryTemp = csrLLPeekHead(&pMac->scan.scanResultList, LL_ACCESS_NOLOCK); + while ( NULL != pEntryTemp) + { + pNext = csrLLNext(&pMac->scan.scanResultList, pEntryTemp, + LL_ACCESS_NOLOCK); + pBssDescription = GET_BASE_ADDR( pEntryTemp, tCsrScanResult, Link ); + pIesLocal = (tDot11fBeaconIEs *)( pBssDescription->Result.pvIes ); + // Need to traverse whole scan list to get description for best 11d AP. + if (csrIsMacAddressEqual(pMac, (tCsrBssid *)&bssid_temp, + (tCsrBssid *) pBssDescription->Result.BssDescriptor.bssId)) + { + // Best AP should be passed to update reg domain. + csrLearnCountryInformation( pMac, &pBssDescription->Result.BssDescriptor, + pIesLocal, eANI_BOOLEAN_TRUE ); + //this check is to avoid the case of invalid CC set via 11d + //In that case we move to world CC & we are open to any new + //valid CC we can get during scan + if(( '0' != pMac->scan.countryCode11d[ 0 ] && '0' != pMac->scan.countryCode11d[ 1 ] )) + { + vos_mem_copy(pMac->scan.currentCountryBssid, + bssid_temp, sizeof(tSirMacAddr)); + } + break; + } + pEntryTemp = pNext; + } + csrLLUnlock(&pMac->scan.scanResultList); } } - //Tush: If we can find the current 11d info in any of the scan results, or + +end: + //If we can find the current 11d info in any of the scan results, or // a good enough AP with the 11d info from the scan results then no need to // get into ambiguous state - if(pMac->scan.fAmbiguous11dInfoFound) + if(pMac->scan.fAmbiguous11dInfoFound) { if((pMac->scan.fCurrent11dInfoMatch) || (cand_Bss_rssi != -128)) { @@ -2930,7 +3235,6 @@ static tCsrScanResult *csrScanSaveBssDescription( tpAniSirGlobal pMac, tSirBssDe tCsrScanResult *pCsrBssDescription = NULL; tANI_U32 cbBSSDesc; tANI_U32 cbAllocated; - eHalStatus halStatus; // figure out how big the BSS description is (the BSSDesc->length does NOT // include the size of the length field itself). @@ -2938,12 +3242,12 @@ static tCsrScanResult *csrScanSaveBssDescription( tpAniSirGlobal pMac, tSirBssDe cbAllocated = sizeof( tCsrScanResult ) + cbBSSDesc; - halStatus = palAllocateMemory( pMac->hHdd, (void **)&pCsrBssDescription, cbAllocated ); - if ( HAL_STATUS_SUCCESS(halStatus) ) + pCsrBssDescription = vos_mem_malloc(cbAllocated); + if ( NULL != pCsrBssDescription ) { - palZeroMemory( pMac->hHdd, pCsrBssDescription, cbAllocated ); + vos_mem_set(pCsrBssDescription, cbAllocated, 0); pCsrBssDescription->AgingCount = (tANI_S32)pMac->roam.configParam.agingCount; - palCopyMemory(pMac->hHdd, &pCsrBssDescription->Result.BssDescriptor, pBSSDescription, cbBSSDesc ); + vos_mem_copy(&pCsrBssDescription->Result.BssDescriptor, pBSSDescription, cbBSSDesc); #if defined(VOSS_ENSBALED) VOS_ASSERT( pCsrBssDescription->Result.pvIes == NULL ); #endif @@ -2954,9 +3258,9 @@ static tCsrScanResult *csrScanSaveBssDescription( tpAniSirGlobal pMac, tSirBssDe } // Append a Bss Description... -tCsrScanResult *csrScanAppendBssDescription( tpAniSirGlobal pMac, - tSirBssDescription *pSirBssDescription, - tDot11fBeaconIEs *pIes ) +tCsrScanResult *csrScanAppendBssDescription( tpAniSirGlobal pMac, + tSirBssDescription *pSirBssDescription, + tDot11fBeaconIEs *pIes, tANI_BOOLEAN fForced ) { tCsrScanResult *pCsrBssDescription = NULL; tAniSSID tmpSsid; @@ -2964,7 +3268,7 @@ tCsrScanResult *csrScanAppendBssDescription( tpAniSirGlobal pMac, int result; tmpSsid.length = 0; - result = csrRemoveDupBssDescription( pMac, pSirBssDescription, pIes, &tmpSsid, &timer ); + result = csrRemoveDupBssDescription( pMac, pSirBssDescription, pIes, &tmpSsid, &timer, fForced ); pCsrBssDescription = csrScanSaveBssDescription( pMac, pSirBssDescription, pIes ); if (result && (pCsrBssDescription != NULL)) { @@ -2978,7 +3282,7 @@ tCsrScanResult *csrScanAppendBssDescription( tpAniSirGlobal pMac, //When we remove hidden ssid from the profile i.e., forget the SSID via // GUI that SSID shouldn't see in the profile if((vos_timer_get_system_time()-timer) <= HIDDEN_TIMER) - { + { pCsrBssDescription->Result.ssId = tmpSsid; pCsrBssDescription->Result.timer = timer; } @@ -2996,14 +3300,14 @@ void csrPurgeChannelPower( tpAniSirGlobal pMac, tDblLinkList *pChannelList ) tCsrChannelPowerInfo *pChannelSet; tListElem *pEntry; - csrLLLock(pChannelList); + csrLLLock(pChannelList); // Remove the channel sets from the learned list and put them in the free list while( ( pEntry = csrLLRemoveHead( pChannelList, LL_ACCESS_NOLOCK ) ) != NULL) { pChannelSet = GET_BASE_ADDR( pEntry, tCsrChannelPowerInfo, link ); if( pChannelSet ) { - palFreeMemory( pMac->hHdd, pChannelSet ); + vos_mem_free(pChannelSet); } } csrLLUnlock(pChannelList); @@ -3012,7 +3316,7 @@ void csrPurgeChannelPower( tpAniSirGlobal pMac, tDblLinkList *pChannelList ) /* - * Save the channelList into the ultimate storage as the final stage of channel + * Save the channelList into the ultimate storage as the final stage of channel * Input: pCountryInfo -- the country code (e.g. "USI"), channel list, and power limit are all stored inside this data structure */ eHalStatus csrSaveToChannelPower2G_5G( tpAniSirGlobal pMac, tANI_U32 tableSize, tSirMacChanInfo *channelTable ) @@ -3022,16 +3326,15 @@ eHalStatus csrSaveToChannelPower2G_5G( tpAniSirGlobal pMac, tANI_U32 tableSize, tCsrChannelPowerInfo *pChannelSet; tANI_BOOLEAN f2GHzInfoFound = FALSE; tANI_BOOLEAN f2GListPurged = FALSE, f5GListPurged = FALSE; - eHalStatus halStatus; pChannelInfo = channelTable; // atleast 3 bytes have to be remaining -- from "countryString" while ( i-- ) { - halStatus = palAllocateMemory( pMac->hHdd, (void **)&pChannelSet, sizeof(tCsrChannelPowerInfo) ); - if ( eHAL_STATUS_SUCCESS == halStatus ) + pChannelSet = vos_mem_malloc(sizeof(tCsrChannelPowerInfo)); + if ( NULL != pChannelSet ) { - palZeroMemory(pMac->hHdd, pChannelSet, sizeof(tCsrChannelPowerInfo)); + vos_mem_set(pChannelSet, sizeof(tCsrChannelPowerInfo), 0); pChannelSet->firstChannel = pChannelInfo->firstChanNum; pChannelSet->numChannels = pChannelInfo->numChannels; @@ -3053,7 +3356,7 @@ eHalStatus csrSaveToChannelPower2G_5G( tpAniSirGlobal pMac, tANI_U32 tableSize, { smsLog( pMac, LOGW, FL("Invalid Channel %d Present in Country IE"), pChannelSet->firstChannel); - palFreeMemory(pMac->hHdd, pChannelSet); + vos_mem_free(pChannelSet); return eHAL_STATUS_FAILURE; } @@ -3076,7 +3379,7 @@ eHalStatus csrSaveToChannelPower2G_5G( tpAniSirGlobal pMac, tANI_U32 tableSize, else { smsLog( pMac, LOGW, FL("Adding 11B/G channels in 11A mode -- First Channel is %d"), pChannelSet->firstChannel); - palFreeMemory(pMac->hHdd, pChannelSet); + vos_mem_free(pChannelSet); } } else @@ -3097,7 +3400,7 @@ eHalStatus csrSaveToChannelPower2G_5G( tpAniSirGlobal pMac, tANI_U32 tableSize, else { smsLog( pMac, LOGW, FL("Adding 11A channels in B/G mode -- First Channel is %d"), pChannelSet->firstChannel); - palFreeMemory(pMac->hHdd, pChannelSet); + vos_mem_free(pChannelSet); } } } @@ -3108,7 +3411,21 @@ eHalStatus csrSaveToChannelPower2G_5G( tpAniSirGlobal pMac, tANI_U32 tableSize, return eHAL_STATUS_SUCCESS; } +static void csrClearDfsChannelList( tpAniSirGlobal pMac ) +{ + tSirMbMsg *pMsg; + tANI_U16 msgLen; + msgLen = (tANI_U16)(sizeof( tSirMbMsg )); + pMsg = vos_mem_malloc(msgLen); + if ( NULL != pMsg ) + { + vos_mem_set((void *)pMsg, msgLen, 0); + pMsg->type = pal_cpu_to_be16((tANI_U16)eWNI_SME_CLEAR_DFS_CHANNEL_LIST); + pMsg->msgLen = pal_cpu_to_be16(msgLen); + palSendMBMessage(pMac->hHdd, pMsg); + } +} void csrApplyPower2Current( tpAniSirGlobal pMac ) { @@ -3139,7 +3456,7 @@ void csrApplyChannelPowerCountryInfo( tpAniSirGlobal pMac, tCsrChannel *pChannel } } tempNumChannels = CSR_MIN(pChannelList->numChannels, WNI_CFG_VALID_CHANNEL_LIST_LEN); - /* If user doesn't want to scan the DFS channels lets trim them from + /* If user doesn't want to scan the DFS channels lets trim them from the valid channel list*/ for(i=0; i < tempNumChannels; i++) { @@ -3179,6 +3496,8 @@ void csrApplyChannelPowerCountryInfo( tpAniSirGlobal pMac, tCsrChannel *pChannel // extend scan capability // build a scan list based on the channel list : channel# + active/passive scan csrSetCfgScanControlList(pMac, countryCode, &ChannelList); + /*Send msg to Lim to clear DFS channel list */ + csrClearDfsChannelList(pMac); #ifdef FEATURE_WLAN_SCAN_PNO if (updateRiva) { @@ -3192,7 +3511,7 @@ void csrApplyChannelPowerCountryInfo( tpAniSirGlobal pMac, tCsrChannel *pChannel { smsLog( pMac, LOGE, FL(" 11D channel list is empty")); } - csrApplyPower2Current( pMac ); // Store the channel+power info in the global place: Cfg + csrApplyPower2Current( pMac ); // Store the channel+power info in the global place: Cfg csrSetCfgCountryCode(pMac, countryCode); } @@ -3211,12 +3530,13 @@ void csrResetCountryInformation( tpAniSirGlobal pMac, tANI_BOOLEAN fForce, tANI_ if(p11dLog) { p11dLog->eventId = WLAN_80211D_EVENT_RESET; - palCopyMemory(pMac->hHdd, p11dLog->countryCode, pMac->scan.countryCodeCurrent, 3); + vos_mem_copy(p11dLog->countryCode, pMac->scan.countryCodeCurrent, 3); p11dLog->numChannel = pMac->scan.base20MHzChannels.numChannels; if(p11dLog->numChannel <= VOS_LOG_MAX_NUM_CHANNEL) { - palCopyMemory(pMac->hHdd, p11dLog->Channels, pMac->scan.base20MHzChannels.channelList, - p11dLog->numChannel); + vos_mem_copy(p11dLog->Channels, + pMac->scan.base20MHzChannels.channelList, + p11dLog->numChannel); for (Index=0; Index < pMac->scan.base20MHzChannels.numChannels; Index++) { p11dLog->TxPwr[Index] = CSR_ROAM_MIN( pMac->scan.defaultPowerTable[Index].pwr, pMac->roam.configParam.nTxPowerCap ); @@ -3239,12 +3559,6 @@ void csrResetCountryInformation( tpAniSirGlobal pMac, tANI_BOOLEAN fForce, tANI_ } #endif //#ifdef FEATURE_WLAN_DIAG_SUPPORT_CSR - // switch to passive scans only when 11d is enabled - if( csrIs11dSupported( pMac ) ) - { - pMac->scan.curScanType = eSIR_PASSIVE_SCAN; - } - csrPruneChannelListForMode(pMac, &pMac->scan.baseChannels); csrPruneChannelListForMode(pMac, &pMac->scan.base20MHzChannels); @@ -3253,7 +3567,7 @@ void csrResetCountryInformation( tpAniSirGlobal pMac, tANI_BOOLEAN fForce, tANI_ // ... and apply the channel list, power settings, and the country code. csrApplyChannelPowerCountryInfo( pMac, &pMac->scan.base20MHzChannels, pMac->scan.countryCodeCurrent, updateRiva ); // clear the 11d channel list - palZeroMemory( pMac->hHdd, &pMac->scan.channels11d, sizeof(pMac->scan.channels11d) ); + vos_mem_set(&pMac->scan.channels11d, sizeof(pMac->scan.channels11d), 0); pMac->scan.f11dInfoReset = eANI_BOOLEAN_TRUE; pMac->scan.f11dInfoApplied = eANI_BOOLEAN_FALSE; } @@ -3268,7 +3582,8 @@ eHalStatus csrResetCountryCodeInformation(tpAniSirGlobal pMac, tANI_BOOLEAN *pfR tANI_BOOLEAN fRestart = eANI_BOOLEAN_FALSE; //Use the Country code and domain from EEPROM - palCopyMemory(pMac->hHdd, pMac->scan.countryCodeCurrent, pMac->scan.countryCodeDefault, WNI_CFG_COUNTRY_CODE_LEN); + vos_mem_copy(pMac->scan.countryCodeCurrent, pMac->scan.countryCodeDefault, + WNI_CFG_COUNTRY_CODE_LEN); csrSetRegulatoryDomain(pMac, pMac->scan.domainIdCurrent, &fRestart); if( ((eANI_BOOLEAN_FALSE == fRestart) || (pfRestartNeeded == NULL) ) && !csrIsInfraConnected(pMac)) @@ -3292,7 +3607,7 @@ eHalStatus csrSetCountryCode(tpAniSirGlobal pMac, tANI_U8 *pCountry, tANI_BOOLEA if(pCountry) { - status = csrGetRegulatoryDomainForCountry(pMac, pCountry, &domainId); + status = csrGetRegulatoryDomainForCountry(pMac, pCountry, &domainId, COUNTRY_USER); if(HAL_STATUS_SUCCESS(status)) { status = csrSetRegulatoryDomain(pMac, domainId, pfRestartNeeded); @@ -3300,7 +3615,7 @@ eHalStatus csrSetCountryCode(tpAniSirGlobal pMac, tANI_U8 *pCountry, tANI_BOOLEA { //We don't need to check the pMac->roam.configParam.fEnforceDefaultDomain flag here, //csrSetRegulatoryDomain will fail if the country doesn't fit our domain criteria. - palCopyMemory(pMac->hHdd, pMac->scan.countryCodeCurrent, pCountry, WNI_CFG_COUNTRY_CODE_LEN); + vos_mem_copy(pMac->scan.countryCodeCurrent, pCountry, WNI_CFG_COUNTRY_CODE_LEN); if((pfRestartNeeded == NULL) || !(*pfRestartNeeded)) { //Simply set it to cfg. If we need to restart, restart will apply it to the CFG @@ -3368,7 +3683,9 @@ void csrApplyCountryInformation( tpAniSirGlobal pMac, tANI_BOOLEAN fForce ) { // ambiguous info found //Restore te default domain as well - if(HAL_STATUS_SUCCESS(csrGetRegulatoryDomainForCountry( pMac, pMac->scan.countryCodeCurrent, &domainId ))) + if(HAL_STATUS_SUCCESS(csrGetRegulatoryDomainForCountry( + pMac, pMac->scan.countryCodeCurrent, + &domainId, COUNTRY_QUERY))) { pMac->scan.domainIdCurrent = domainId; } @@ -3381,7 +3698,9 @@ void csrApplyCountryInformation( tpAniSirGlobal pMac, tANI_BOOLEAN fForce ) break; } if ( pMac->scan.f11dInfoApplied && !fForce ) break; - if(HAL_STATUS_SUCCESS(csrGetRegulatoryDomainForCountry( pMac, pMac->scan.countryCode11d, &domainId ))) + if(HAL_STATUS_SUCCESS(csrGetRegulatoryDomainForCountry( + pMac, pMac->scan.countryCode11d, + &domainId, COUNTRY_QUERY))) { //Check whether we need to enforce default domain if( ( !pMac->roam.configParam.fEnforceDefaultDomain ) || @@ -3398,12 +3717,13 @@ void csrApplyCountryInformation( tpAniSirGlobal pMac, tANI_BOOLEAN fForce ) if(p11dLog) { p11dLog->eventId = WLAN_80211D_EVENT_COUNTRY_SET; - palCopyMemory(pMac->hHdd, p11dLog->countryCode, pMac->scan.countryCode11d, 3); + vos_mem_copy(p11dLog->countryCode, pMac->scan.countryCode11d, 3); p11dLog->numChannel = pMac->scan.channels11d.numChannels; if(p11dLog->numChannel <= VOS_LOG_MAX_NUM_CHANNEL) { - palCopyMemory(pMac->hHdd, p11dLog->Channels, pMac->scan.channels11d.channelList, - p11dLog->numChannel); + vos_mem_copy(p11dLog->Channels, + pMac->scan.channels11d.channelList, + p11dLog->numChannel); csrGetChannelPowerInfo(pMac, &pMac->scan.channelPowerInfoList24, &nChnInfo, chnPwrInfo); nTmp = nChnInfo; @@ -3440,21 +3760,18 @@ void csrApplyCountryInformation( tpAniSirGlobal pMac, tANI_BOOLEAN fForce ) #endif //#ifdef FEATURE_WLAN_DIAG_SUPPORT_CSR if(pMac->scan.domainIdCurrent != domainId) { - /* Regulatory Domain Changed, Purge Only scan result - * which does not have channel number belong to 11d - * channel list - * */ smsLog(pMac, LOGW, FL("Domain Changed Old %d, new %d"), pMac->scan.domainIdCurrent, domainId); - csrScanFilter11dResult(pMac); + status = WDA_SetRegDomain(pMac, domainId, eSIR_TRUE); } - status = WDA_SetRegDomain(pMac, domainId); if (status != eHAL_STATUS_SUCCESS) { smsLog( pMac, LOGE, FL(" fail to set regId %d"), domainId ); } pMac->scan.domainIdCurrent = domainId; +#ifndef CONFIG_ENABLE_LINUX_REG csrApplyChannelPowerCountryInfo( pMac, &pMac->scan.channels11d, pMac->scan.countryCode11d, eANI_BOOLEAN_TRUE ); +#endif // switch to active scans using this new channel list pMac->scan.curScanType = eSIR_ACTIVE_SCAN; pMac->scan.f11dInfoApplied = eANI_BOOLEAN_TRUE; @@ -3474,6 +3791,8 @@ tANI_BOOLEAN csrSave11dCountryString( tpAniSirGlobal pMac, tANI_U8 *pCountryCode { tANI_BOOLEAN fCountryStringChanged = FALSE, fUnknownCountryCode = FALSE; tANI_U32 i; + v_REGDOMAIN_t regd; + tANI_BOOLEAN fCountryNotPresentInDriver = FALSE; // convert to UPPER here so we are assured the strings are always in upper case. for( i = 0; i < 3; i++ ) @@ -3486,7 +3805,10 @@ tANI_BOOLEAN csrSave11dCountryString( tpAniSirGlobal pMac, tANI_U8 *pCountryCode // country code (which is US). We've also seen some NETGEAR AP's that have "XX " as the country code // with valid 2.4 GHz US channel information. If we cannot find the country code advertised in the // 11d information element, let's default to US. - if ( !HAL_STATUS_SUCCESS(csrGetRegulatoryDomainForCountry( pMac, pCountryCode, NULL ) ) ) + if ( !HAL_STATUS_SUCCESS(csrGetRegulatoryDomainForCountry(pMac, + pCountryCode, + ®d, + COUNTRY_QUERY) ) ) { // Check the enforcement first if( pMac->roam.configParam.fEnforceDefaultDomain || pMac->roam.configParam.fEnforceCountryCodeMatch ) @@ -3495,10 +3817,16 @@ tANI_BOOLEAN csrSave11dCountryString( tpAniSirGlobal pMac, tANI_U8 *pCountryCode } else { - pCountryCode[ 0 ] = 'U'; - pCountryCode[ 1 ] = 'S'; + fCountryNotPresentInDriver = TRUE; } } + //right now, even if we don't find the CC in driver we set to world. Making + //sure countryCode11d doesn't get updated with the invalid CC, instead + //reflect the world CC + else if (REGDOMAIN_WORLD == regd) + { + fCountryNotPresentInDriver = TRUE; + } // We've seen some of the AP's improperly put a 0 for the third character of the country code. // spec says valid charcters are 'O' (for outdoor), 'I' for Indoor, or ' ' (space; for either). @@ -3510,15 +3838,24 @@ tANI_BOOLEAN csrSave11dCountryString( tpAniSirGlobal pMac, tANI_U8 *pCountryCode if( !fUnknownCountryCode ) { - fCountryStringChanged = (!palEqualMemory( pMac->hHdd, - pMac->scan.countryCode11d, pCountryCode, 2)); + fCountryStringChanged = (!vos_mem_compare(pMac->scan.countryCode11d, pCountryCode, 2)); if(( 0 == pMac->scan.countryCode11d[ 0 ] && 0 == pMac->scan.countryCode11d[ 1 ] ) || (fForce)) { - // this is the first .11d information - palCopyMemory( pMac->hHdd, pMac->scan.countryCode11d, pCountryCode, sizeof( pMac->scan.countryCode11d ) ); + if (!fCountryNotPresentInDriver) + { + // this is the first .11d information + vos_mem_copy(pMac->scan.countryCode11d, pCountryCode, + sizeof( pMac->scan.countryCode11d )); + + } + else + { + pMac->scan.countryCode11d[0] = '0'; + pMac->scan.countryCode11d[1] = '0'; + } } } @@ -3536,9 +3873,10 @@ void csrSaveChannelPowerForBand( tpAniSirGlobal pMac, tANI_BOOLEAN fPopulate5GBa maxChannelIndex = ( pMac->scan.base20MHzChannels.numChannels < WNI_CFG_VALID_CHANNEL_LIST_LEN ) ? pMac->scan.base20MHzChannels.numChannels : WNI_CFG_VALID_CHANNEL_LIST_LEN ; - if(HAL_STATUS_SUCCESS(palAllocateMemory(pMac->hHdd, (void **)&pChanInfo, sizeof(tSirMacChanInfo) * WNI_CFG_VALID_CHANNEL_LIST_LEN))) + pChanInfo = vos_mem_malloc(sizeof(tSirMacChanInfo) * WNI_CFG_VALID_CHANNEL_LIST_LEN); + if ( NULL != pChanInfo ) { - palZeroMemory(pMac->hHdd, pChanInfo, sizeof(tSirMacChanInfo) * WNI_CFG_VALID_CHANNEL_LIST_LEN); + vos_mem_set(pChanInfo, sizeof(tSirMacChanInfo) * WNI_CFG_VALID_CHANNEL_LIST_LEN, 0); pChanInfoStart = pChanInfo; for (Index=0; Index < maxChannelIndex; Index++) { @@ -3561,7 +3899,7 @@ void csrSaveChannelPowerForBand( tpAniSirGlobal pMac, tANI_BOOLEAN fPopulate5GBa { csrSaveToChannelPower2G_5G( pMac, count * sizeof(tSirMacChanInfo), pChanInfoStart ); } - palFreeMemory(pMac->hHdd, pChanInfoStart); + vos_mem_free(pChanInfoStart); } } @@ -3570,7 +3908,7 @@ void csrSetOppositeBandChannelInfo( tpAniSirGlobal pMac ) { tANI_BOOLEAN fPopulate5GBand = FALSE; - do + do { // if this is not a dual band product, then we don't need to set the opposite // band info. We only work in one band so no need to look in the other band. @@ -3579,12 +3917,14 @@ void csrSetOppositeBandChannelInfo( tpAniSirGlobal pMac ) if ( CSR_IS_CHANNEL_5GHZ( pMac->scan.channelOf11dInfo ) ) { // and the 2.4 band is empty, then populate the 2.4 channel info + if ( !csrLLIsListEmpty( &pMac->scan.channelPowerInfoList24, LL_ACCESS_LOCK ) ) break; fPopulate5GBand = FALSE; } else { // else, we found channel info in the 2.4 GHz band. If the 5.0 band is empty // set the 5.0 band info from the 2.4 country code. + if ( !csrLLIsListEmpty( &pMac->scan.channelPowerInfoList5G, LL_ACCESS_LOCK ) ) break; fPopulate5GBand = TRUE; } csrSaveChannelPowerForBand( pMac, fPopulate5GBand ); @@ -3648,7 +3988,7 @@ tANI_U8 csrGetChannelListFromChannelSet( tpAniSirGlobal pMac, tANI_U8 *pChannelL //bSize -- specify the buffer size of pChannelList -void csrConstructCurrentValidChannelList( tpAniSirGlobal pMac, tDblLinkList *pChannelSetList, +void csrConstructCurrentValidChannelList( tpAniSirGlobal pMac, tDblLinkList *pChannelSetList, tANI_U8 *pChannelList, tANI_U8 bSize, tANI_U8 *pNumChannels ) { tListElem *pEntry; @@ -3679,7 +4019,6 @@ void csrConstructCurrentValidChannelList( tpAniSirGlobal pMac, tDblLinkList *pCh tANI_BOOLEAN csrLearnCountryInformation( tpAniSirGlobal pMac, tSirBssDescription *pSirBssDesc, tDot11fBeaconIEs *pIes, tANI_BOOLEAN fForce) { - tANI_U8 Num2GChannels, bMaxNumChn; eHalStatus status; tANI_BOOLEAN fRet = eANI_BOOLEAN_FALSE; v_REGDOMAIN_t domainId; @@ -3720,7 +4059,7 @@ tANI_BOOLEAN csrLearnCountryInformation( tpAniSirGlobal pMac, tSirBssDescription { tCsrScanResultFilter filter; - palZeroMemory(pMac->hHdd, &filter, sizeof(tCsrScanResultFilter)); + vos_mem_set(&filter, sizeof(tCsrScanResultFilter), 0); status = csrRoamPrepareFilterFromProfile(pMac, pSession->pCurRoamProfile, &filter); if(HAL_STATUS_SUCCESS(status)) { @@ -3730,7 +4069,7 @@ tANI_BOOLEAN csrLearnCountryInformation( tpAniSirGlobal pMac, tSirBssDescription if(fMatch) { smsLog(pMac, LOGW, " Matching roam profile BSSID %02X-%02X-%02X-%02X-%02X-%02X causing ambiguous domain info", - pSirBssDesc->bssId[0], pSirBssDesc->bssId[1], pSirBssDesc->bssId[2], + pSirBssDesc->bssId[0], pSirBssDesc->bssId[1], pSirBssDesc->bssId[2], pSirBssDesc->bssId[3], pSirBssDesc->bssId[4], pSirBssDesc->bssId[5]); pMac->scan.fAmbiguous11dInfoFound = eANI_BOOLEAN_TRUE; break; @@ -3739,7 +4078,7 @@ tANI_BOOLEAN csrLearnCountryInformation( tpAniSirGlobal pMac, tSirBssDescription } else if( csrIsConnStateConnected(pMac, i)) { - //Reach here only when the currention is base on no profile. + //Reach here only when the currention is base on no profile. //User doesn't give profile and just connect to anything. if(csrMatchBSSToConnectProfile(pMac, &pSession->connectedProfile, pSirBssDesc, pIesLocal)) { @@ -3748,7 +4087,7 @@ tANI_BOOLEAN csrLearnCountryInformation( tpAniSirGlobal pMac, tSirBssDescription pSirBssDesc->bssId[3], pSirBssDesc->bssId[4], pSirBssDesc->bssId[5]); //Tush pMac->scan.fAmbiguous11dInfoFound = eANI_BOOLEAN_TRUE; - if(csrIsBssidMatch(pMac, (tCsrBssid *)&pSirBssDesc->bssId, + if(csrIsBssidMatch(pMac, (tCsrBssid *)&pSirBssDesc->bssId, &pSession->connectedProfile.bssid)) { //AP changed the 11d info on the fly, modify cfg @@ -3760,24 +4099,29 @@ tANI_BOOLEAN csrLearnCountryInformation( tpAniSirGlobal pMac, tSirBssDescription } } //valid session } //for - if ( i == CSR_ROAM_SESSION_MAX ) + if ( i == CSR_ROAM_SESSION_MAX ) { //Check whether we can use this country's 11d information if( !pMac->roam.configParam.fEnforceDefaultDomain ) { pMac->scan.fAmbiguous11dInfoFound = eANI_BOOLEAN_TRUE; } - else + else { VOS_ASSERT( pMac->scan.domainIdCurrent == pMac->scan.domainIdDefault ); - if( HAL_STATUS_SUCCESS(csrGetRegulatoryDomainForCountry( - pMac, pIesLocal->Country.country, &domainId )) && + if( HAL_STATUS_SUCCESS(csrGetRegulatoryDomainForCountry( + pMac, pIesLocal->Country.country, &domainId, + COUNTRY_QUERY)) && ( domainId == pMac->scan.domainIdCurrent ) ) { //Two countries in the same domain } } } +#ifdef CONFIG_ENABLE_LINUX_REG + csrGetRegulatoryDomainForCountry(pMac, pIesLocal->Country.country, + &domainId, COUNTRY_IE); +#endif } else //Tush { @@ -3799,58 +4143,74 @@ tANI_BOOLEAN csrLearnCountryInformation( tpAniSirGlobal pMac, tSirBssDescription } } smsLog(pMac, LOG3, FL(" %d sets each one is %d"), pIesLocal->Country.num_triplets, sizeof(tSirMacChanInfo)); - // save the channel/power information from the Channel IE. - //sizeof(tSirMacChanInfo) has to be 3 - if (eHAL_STATUS_SUCCESS != csrSaveToChannelPower2G_5G( pMac, pIesLocal->Country.num_triplets * sizeof(tSirMacChanInfo), - (tSirMacChanInfo *)(&pIesLocal->Country.triplets[0]) )) - { - fRet = eANI_BOOLEAN_FALSE; - return fRet; - } // set the indicator of the channel where the country IE was found... pMac->scan.channelOf11dInfo = pSirBssDesc->channelId; - csrGetRegulatoryDomainForCountry(pMac, pIesLocal->Country.country, &domainId ); +#ifndef CONFIG_ENABLE_LINUX_REG + status = csrGetRegulatoryDomainForCountry(pMac, + pIesLocal->Country.country, &domainId, COUNTRY_IE); + if ( status != eHAL_STATUS_SUCCESS ) + { + smsLog( pMac, LOGE, FL(" fail to get regId %d"), domainId ); + fRet = eANI_BOOLEAN_FALSE; + break; + } // Checking for Domain Id change if ( domainId != pMac->scan.domainIdCurrent ) { - tSirMacChanInfo* pMacChnSet = (tSirMacChanInfo *)(&pIesLocal->Country.triplets[0]); - WDA_SetRegDomain(pMac, domainId); - // Check weather AP provided the 2.4GHZ list or 5GHZ list - if(CSR_IS_CHANNEL_24GHZ(pMacChnSet[0].firstChanNum)) + vos_mem_copy(pMac->scan.countryCode11d, + pIesLocal->Country.country, + sizeof( pMac->scan.countryCode11d ) ); + /* Set Current Country code and Current Regulatory domain */ + status = csrSetRegulatoryDomain(pMac, domainId, NULL); + if (eHAL_STATUS_SUCCESS != status) { - // AP Provided the 2.4 Channels, Update the 5GHz channels from nv.bin - csrGet5GChannels(pMac ); + smsLog(pMac, LOGE, "Set Reg Domain Fail %d", status); + fRet = eANI_BOOLEAN_FALSE; + break; } - else + //csrSetRegulatoryDomain will fail if the country doesn't fit our domain criteria. + vos_mem_copy(pMac->scan.countryCodeCurrent, + pIesLocal->Country.country, WNI_CFG_COUNTRY_CODE_LEN); + //Simply set it to cfg. + csrSetCfgCountryCode(pMac, pIesLocal->Country.country); + + /* overwrite the defualt country code */ + vos_mem_copy(pMac->scan.countryCodeDefault, + pMac->scan.countryCodeCurrent, + WNI_CFG_COUNTRY_CODE_LEN); + /* Set Current RegDomain */ + status = WDA_SetRegDomain(pMac, domainId, eSIR_TRUE); + if ( status != eHAL_STATUS_SUCCESS ) + { + smsLog( pMac, LOGE, FL(" fail to Set regId %d"), domainId ); + fRet = eANI_BOOLEAN_FALSE; + break; + } + /* set to default domain ID */ + pMac->scan.domainIdCurrent = domainId; + /* get the channels based on new cc */ + status = csrInitGetChannels( pMac ); + + if ( status != eHAL_STATUS_SUCCESS ) { - // AP Provided the 5G Channels, Update the 2.4GHZ channel list from nv.bin - csrGet24GChannels(pMac ); + smsLog( pMac, LOGE, FL(" fail to get Channels ")); + fRet = eANI_BOOLEAN_FALSE; + break; } - } - // Populate both band channel lists based on what we found in the country information... - csrSetOppositeBandChannelInfo( pMac ); - bMaxNumChn = WNI_CFG_VALID_CHANNEL_LIST_LEN; - // construct 2GHz channel list first - csrConstructCurrentValidChannelList( pMac, &pMac->scan.channelPowerInfoList24, pMac->scan.channels11d.channelList, - bMaxNumChn, &Num2GChannels ); - // construct 5GHz channel list now - if(bMaxNumChn > Num2GChannels) - { - csrConstructCurrentValidChannelList( pMac, &pMac->scan.channelPowerInfoList5G, pMac->scan.channels11d.channelList + Num2GChannels, - bMaxNumChn - Num2GChannels, - &pMac->scan.channels11d.numChannels ); - } - pMac->scan.channels11d.numChannels += Num2GChannels; + /* reset info based on new cc, and we are done */ + csrResetCountryInformation(pMac, eANI_BOOLEAN_TRUE, eANI_BOOLEAN_TRUE); + } +#endif fRet = eANI_BOOLEAN_TRUE; } while( 0 ); - + if( !pIes && pIesLocal ) { //locally allocated - palFreeMemory(pMac->hHdd, pIesLocal); + vos_mem_free(pIesLocal); } return( fRet ); @@ -3888,7 +4248,7 @@ void csrReinitScanCmd(tpAniSirGlobal pMac, tSmeCmd *pCommand) case eCsrScanAbortBgScan: if(pCommand->u.scanCmd.u.bgScanRequest.ChannelInfo.ChannelList) { - palFreeMemory(pMac->hHdd, pCommand->u.scanCmd.u.bgScanRequest.ChannelInfo.ChannelList); + vos_mem_free(pCommand->u.scanCmd.u.bgScanRequest.ChannelInfo.ChannelList); pCommand->u.scanCmd.u.bgScanRequest.ChannelInfo.ChannelList = NULL; } break; @@ -3904,9 +4264,9 @@ void csrReinitScanCmd(tpAniSirGlobal pMac, tSmeCmd *pCommand) if(pCommand->u.scanCmd.pToRoamProfile) { csrReleaseProfile(pMac, pCommand->u.scanCmd.pToRoamProfile); - palFreeMemory(pMac->hHdd, pCommand->u.scanCmd.pToRoamProfile); + vos_mem_free(pCommand->u.scanCmd.pToRoamProfile); } - palZeroMemory(pMac->hHdd, &pCommand->u.scanCmd, sizeof(tScanCmd)); + vos_mem_set(&pCommand->u.scanCmd, sizeof(tScanCmd), 0); } @@ -3964,7 +4324,7 @@ tANI_BOOLEAN csrGetRemainingChannelsFor11dScan( tpAniSirGlobal pMac, tANI_U8 *pC eCsrScanCompleteNextCommand csrScanGetNextCommandState( tpAniSirGlobal pMac, tSmeCmd *pCommand, tANI_BOOLEAN fSuccess ) { eCsrScanCompleteNextCommand NextCommand = eCsrNextScanNothing; - + switch( pCommand->u.scanCmd.reason ) { case eCsrScan11d1: @@ -3972,7 +4332,7 @@ eCsrScanCompleteNextCommand csrScanGetNextCommandState( tpAniSirGlobal pMac, tSm break; case eCsrScan11d2: NextCommand = (fSuccess) ? eCsrNext11dScan2Success : eCsrNext11dScan2Failure; - break; + break; case eCsrScan11dDone: NextCommand = eCsrNext11dScanComplete; break; @@ -4006,7 +4366,7 @@ eCsrScanCompleteNextCommand csrScanGetNextCommandState( tpAniSirGlobal pMac, tSm tANI_BOOLEAN csrHandleScan11d1Failure(tpAniSirGlobal pMac, tSmeCmd *pCommand) { tANI_BOOLEAN fRet = eANI_BOOLEAN_TRUE; - + //Apply back the default setting and passively scan one more time. csrResetCountryInformation(pMac, eANI_BOOLEAN_FALSE, eANI_BOOLEAN_TRUE); pCommand->u.scanCmd.reason = eCsrScan11d2; @@ -4014,7 +4374,7 @@ tANI_BOOLEAN csrHandleScan11d1Failure(tpAniSirGlobal pMac, tSmeCmd *pCommand) { fRet = eANI_BOOLEAN_FALSE; } - + return (fRet); } @@ -4024,21 +4384,24 @@ tANI_BOOLEAN csrHandleScan11dSuccess(tpAniSirGlobal pMac, tSmeCmd *pCommand) tANI_BOOLEAN fRet = eANI_BOOLEAN_TRUE; tANI_U8 *pChannels; tANI_U8 cChannels; - - if(HAL_STATUS_SUCCESS(palAllocateMemory(pMac->hHdd, (void **)&pChannels, WNI_CFG_VALID_CHANNEL_LIST_LEN))) + + pChannels = vos_mem_malloc(WNI_CFG_VALID_CHANNEL_LIST_LEN); + if ( NULL != pChannels ) { - palZeroMemory(pMac->hHdd, pChannels, WNI_CFG_VALID_CHANNEL_LIST_LEN); + vos_mem_set(pChannels, WNI_CFG_VALID_CHANNEL_LIST_LEN, 0); if ( csrGetRemainingChannelsFor11dScan( pMac, pChannels, &cChannels ) ) { pCommand->u.scanCmd.reason = eCsrScan11dDone; if(pCommand->u.scanCmd.u.scanRequest.ChannelInfo.ChannelList) { - palFreeMemory(pMac->hHdd, pCommand->u.scanCmd.u.scanRequest.ChannelInfo.ChannelList); + vos_mem_free(pCommand->u.scanCmd.u.scanRequest.ChannelInfo.ChannelList); pCommand->u.scanCmd.u.scanRequest.ChannelInfo.ChannelList = NULL; } - if(HAL_STATUS_SUCCESS(palAllocateMemory(pMac->hHdd, (void **)&pCommand->u.scanCmd.u.scanRequest.ChannelInfo.ChannelList, cChannels))) + pCommand->u.scanCmd.u.scanRequest.ChannelInfo.ChannelList = vos_mem_malloc(cChannels); + if ( NULL != pCommand->u.scanCmd.u.scanRequest.ChannelInfo.ChannelList ) { - palCopyMemory(pMac->hHdd, pCommand->u.scanCmd.u.scanRequest.ChannelInfo.ChannelList, pChannels, cChannels); + vos_mem_copy(pCommand->u.scanCmd.u.scanRequest.ChannelInfo.ChannelList, + pChannels, cChannels); pCommand->u.scanCmd.u.scanRequest.ChannelInfo.numOfChannels = cChannels; pCommand->u.scanCmd.u.scanRequest.requestType = eCSR_SCAN_REQUEST_FULL_SCAN; pCommand->u.scanCmd.u.scanRequest.scanType = eSIR_ACTIVE_SCAN; @@ -4049,9 +4412,9 @@ tANI_BOOLEAN csrHandleScan11dSuccess(tpAniSirGlobal pMac, tSmeCmd *pCommand) } } } - palFreeMemory(pMac->hHdd, pChannels); + vos_mem_free(pChannels); } - + return (fRet); } @@ -4076,7 +4439,7 @@ tANI_BOOLEAN csrScanComplete( tpAniSirGlobal pMac, tSirSmeScanRsp *pScanRsp ) // If the head of the queue is Active and it is a SCAN command, remove // and put this on the Free queue. if ( eSmeCommandScan == pCommand->command ) - { + { tANI_U32 sessionId = pCommand->sessionId; if(eSIR_SME_SUCCESS != pScanRsp->statusCode) @@ -4102,7 +4465,7 @@ tANI_BOOLEAN csrScanComplete( tpAniSirGlobal pMac, tSirSmeScanRsp *pScanRsp ) WLAN_VOS_DIAG_LOG_ALLOC(pScanLog, vos_log_scan_pkt_type, LOG_WLAN_SCAN_C); if(pScanLog) { - if(eCsrScanBgScan == pCommand->u.scanCmd.reason || + if(eCsrScanBgScan == pCommand->u.scanCmd.reason || eCsrScanProbeBss == pCommand->u.scanCmd.reason || eCsrScanSetBGScanParam == pCommand->u.scanCmd.reason) { @@ -4132,13 +4495,14 @@ tANI_BOOLEAN csrScanComplete( tpAniSirGlobal pMac, tSirSmeScanRsp *pScanRsp ) smsLog(pMac, LOGE, FL(" fail to parse IEs")); break; } - palCopyMemory(pMac->hHdd, pScanLog->bssid[n], pScanResult->BssDescriptor.bssId, 6); + vos_mem_copy(pScanLog->bssid[n], + pScanResult->BssDescriptor.bssId, 6); if(pIes && pIes->SSID.present && VOS_LOG_MAX_SSID_SIZE >= pIes->SSID.num_ssid) { - palCopyMemory(pMac->hHdd, pScanLog->ssid[n], - pIes->SSID.ssid, pIes->SSID.num_ssid); + vos_mem_copy(pScanLog->ssid[n], + pIes->SSID.ssid, pIes->SSID.num_ssid); } - palFreeMemory(pMac->hHdd, pIes); + vos_mem_free(pIes); n++; } c++; @@ -4176,7 +4540,7 @@ tANI_BOOLEAN csrScanComplete( tpAniSirGlobal pMac, tSirSmeScanRsp *pScanRsp ) if(fRemoveCommand) { NextCommand = eCsrNext11dScanComplete; - } + } break; case eCsrNextLostLinkScan1Success: if(!HAL_STATUS_SUCCESS(csrIssueRoamAfterLostlinkScan(pMac, sessionId, eCsrLostLink1))) @@ -4204,7 +4568,7 @@ tANI_BOOLEAN csrScanComplete( tpAniSirGlobal pMac, tSirSmeScanRsp *pScanRsp ) break; case eCsrNextLostLinkScan3Failed: csrScanHandleFailedLostlink3(pMac, sessionId); - break; + break; case eCsrNexteScanForSsidSuccess: csrScanHandleSearchForSSID(pMac, pCommand); break; @@ -4233,13 +4597,13 @@ tANI_BOOLEAN csrScanComplete( tpAniSirGlobal pMac, tSirSmeScanRsp *pScanRsp ) smsLog( pMac, LOGW, FL("Scan Completion called but NO commands are ACTIVE ...")); fRemoveCommand = eANI_BOOLEAN_FALSE; } - + return( fRemoveCommand ); } -static void csrScanRemoveDupBssDescriptionFromInterimList( tpAniSirGlobal pMac, +static void csrScanRemoveDupBssDescriptionFromInterimList( tpAniSirGlobal pMac, tSirBssDescription *pSirBssDescr, tDot11fBeaconIEs *pIes) { @@ -4250,15 +4614,15 @@ static void csrScanRemoveDupBssDescriptionFromInterimList( tpAniSirGlobal pMac, // matches the BssID of the BssDescription passed in, then these must be duplicate scan // results for this Bss. In that case, remove the 'old' Bss description from the linked list. pEntry = csrLLPeekHead( &pMac->scan.tempScanResults, LL_ACCESS_LOCK ); - while( pEntry ) + while( pEntry ) { pCsrBssDescription = GET_BASE_ADDR( pEntry, tCsrScanResult, Link ); // we have a duplicate scan results only when BSSID, SSID, Channel and NetworkType // matches - if ( csrIsDuplicateBssDescription( pMac, &pCsrBssDescription->Result.BssDescriptor, - pSirBssDescr, pIes ) ) + if ( csrIsDuplicateBssDescription( pMac, &pCsrBssDescription->Result.BssDescriptor, + pSirBssDescr, pIes, FALSE ) ) { pSirBssDescr->rssi = (tANI_S8)( (((tANI_S32)pSirBssDescr->rssi * CSR_SCAN_RESULT_RSSI_WEIGHT ) + ((tANI_S32)pCsrBssDescription->Result.BssDescriptor.rssi * (100 - CSR_SCAN_RESULT_RSSI_WEIGHT) )) / 100 ); @@ -4270,7 +4634,7 @@ static void csrScanRemoveDupBssDescriptionFromInterimList( tpAniSirGlobal pMac, // we need to free the memory associated with this node csrFreeScanResultEntry( pMac, pCsrBssDescription ); } - + // If we found a match, we can stop looking through the list. break; } @@ -4283,27 +4647,26 @@ static void csrScanRemoveDupBssDescriptionFromInterimList( tpAniSirGlobal pMac, //Caller allocated memory pfNewBssForConn to return whether new candidate for //current connection is found. Cannot be NULL -tCsrScanResult *csrScanSaveBssDescriptionToInterimList( tpAniSirGlobal pMac, +tCsrScanResult *csrScanSaveBssDescriptionToInterimList( tpAniSirGlobal pMac, tSirBssDescription *pBSSDescription, tDot11fBeaconIEs *pIes) { tCsrScanResult *pCsrBssDescription = NULL; tANI_U32 cbBSSDesc; tANI_U32 cbAllocated; - eHalStatus halStatus; - + // figure out how big the BSS description is (the BSSDesc->length does NOT // include the size of the length field itself). cbBSSDesc = pBSSDescription->length + sizeof( pBSSDescription->length ); cbAllocated = sizeof( tCsrScanResult ) + cbBSSDesc; - halStatus = palAllocateMemory( pMac->hHdd, (void **)&pCsrBssDescription, cbAllocated ); - if ( HAL_STATUS_SUCCESS(halStatus) ) + pCsrBssDescription = vos_mem_malloc(cbAllocated); + if ( NULL != pCsrBssDescription ) { - palZeroMemory(pMac->hHdd, pCsrBssDescription, cbAllocated); + vos_mem_set(pCsrBssDescription, cbAllocated, 0); pCsrBssDescription->AgingCount = (tANI_S32)pMac->roam.configParam.agingCount; - palCopyMemory(pMac->hHdd, &pCsrBssDescription->Result.BssDescriptor, pBSSDescription, cbBSSDesc ); + vos_mem_copy(&pCsrBssDescription->Result.BssDescriptor, pBSSDescription, cbBSSDesc ); //Save SSID separately for later use if( pIes->SSID.present && !csrIsNULLSSID(pIes->SSID.ssid, pIes->SSID.num_ssid) ) { @@ -4316,8 +4679,7 @@ tCsrScanResult *csrScanSaveBssDescriptionToInterimList( tpAniSirGlobal pMac, } pCsrBssDescription->Result.ssId.length = len; pCsrBssDescription->Result.timer = vos_timer_get_system_time(); - palCopyMemory(pMac->hHdd, pCsrBssDescription->Result.ssId.ssId, - pIes->SSID.ssid, len ); + vos_mem_copy(pCsrBssDescription->Result.ssId.ssId, pIes->SSID.ssid, len); } csrLLInsertTail( &pMac->scan.tempScanResults, &pCsrBssDescription->Link, LL_ACCESS_LOCK ); } @@ -4326,10 +4688,10 @@ tCsrScanResult *csrScanSaveBssDescriptionToInterimList( tpAniSirGlobal pMac, } + - -tANI_BOOLEAN csrIsDuplicateBssDescription( tpAniSirGlobal pMac, tSirBssDescription *pSirBssDesc1, - tSirBssDescription *pSirBssDesc2, tDot11fBeaconIEs *pIes2 ) +tANI_BOOLEAN csrIsDuplicateBssDescription( tpAniSirGlobal pMac, tSirBssDescription *pSirBssDesc1, + tSirBssDescription *pSirBssDesc2, tDot11fBeaconIEs *pIes2, tANI_BOOLEAN fForced ) { tANI_BOOLEAN fMatch = FALSE; tSirMacCapabilityInfo *pCap1, *pCap2; @@ -4340,9 +4702,9 @@ tANI_BOOLEAN csrIsDuplicateBssDescription( tpAniSirGlobal pMac, tSirBssDescripti pCap2 = (tSirMacCapabilityInfo *)&pSirBssDesc2->capabilityInfo; if(pCap1->ess == pCap2->ess) { - if (pCap1->ess && + if (pCap1->ess && csrIsMacAddressEqual( pMac, (tCsrBssid *)pSirBssDesc1->bssId, (tCsrBssid *)pSirBssDesc2->bssId)&& - (pSirBssDesc1->channelId == pSirBssDesc2->channelId)) + (fForced || (pSirBssDesc1->channelId == pSirBssDesc2->channelId))) { fMatch = TRUE; // Check for SSID match, if exists @@ -4361,9 +4723,9 @@ tANI_BOOLEAN csrIsDuplicateBssDescription( tpAniSirGlobal pMac, tSirBssDescripti } if(pIes1->SSID.present && pIesTemp->SSID.present) { - fMatch = csrIsSsidMatch(pMac, pIes1->SSID.ssid, pIes1->SSID.num_ssid, + fMatch = csrIsSsidMatch(pMac, pIes1->SSID.ssid, pIes1->SSID.num_ssid, pIesTemp->SSID.ssid, pIesTemp->SSID.num_ssid, eANI_BOOLEAN_TRUE); - } + } }while(0); } @@ -4386,13 +4748,13 @@ tANI_BOOLEAN csrIsDuplicateBssDescription( tpAniSirGlobal pMac, tSirBssDescripti //Same channel cannot have same SSID for different IBSS if(pIes1->SSID.present && pIesTemp->SSID.present) { - fMatch = csrIsSsidMatch(pMac, pIes1->SSID.ssid, pIes1->SSID.num_ssid, + fMatch = csrIsSsidMatch(pMac, pIes1->SSID.ssid, pIes1->SSID.num_ssid, pIesTemp->SSID.ssid, pIesTemp->SSID.num_ssid, eANI_BOOLEAN_TRUE); } }while(0); } /* In case of P2P devices, ess and ibss will be set to zero */ - else if (!pCap1->ess && + else if (!pCap1->ess && csrIsMacAddressEqual( pMac, (tCsrBssid *)pSirBssDesc1->bssId, (tCsrBssid *)pSirBssDesc2->bssId)) { fMatch = TRUE; @@ -4401,13 +4763,13 @@ tANI_BOOLEAN csrIsDuplicateBssDescription( tpAniSirGlobal pMac, tSirBssDescripti if(pIes1) { - palFreeMemory(pMac->hHdd, pIes1); + vos_mem_free(pIes1); } - + if( (NULL == pIes2) && pIesTemp ) { //locally allocated - palFreeMemory(pMac->hHdd, pIesTemp); + vos_mem_free(pIesTemp); } return( fMatch ); @@ -4421,7 +4783,7 @@ tANI_BOOLEAN csrIsNetworkTypeEqual( tSirBssDescription *pSirBssDesc1, tSirBssDes //to check whether the BSS matches the dot11Mode -static tANI_BOOLEAN csrScanIsBssAllowed(tpAniSirGlobal pMac, tSirBssDescription *pBssDesc, +static tANI_BOOLEAN csrScanIsBssAllowed(tpAniSirGlobal pMac, tSirBssDescription *pBssDesc, tDot11fBeaconIEs *pIes) { tANI_BOOLEAN fAllowed = eANI_BOOLEAN_FALSE; @@ -4475,8 +4837,8 @@ static tANI_BOOLEAN csrScanIsBssAllowed(tpAniSirGlobal pMac, tSirBssDescription //Return pIes to caller for future use when returning TRUE. -static tANI_BOOLEAN csrScanValidateScanResult( tpAniSirGlobal pMac, tANI_U8 *pChannels, - tANI_U8 numChn, tSirBssDescription *pBssDesc, +static tANI_BOOLEAN csrScanValidateScanResult( tpAniSirGlobal pMac, tANI_U8 *pChannels, + tANI_U8 numChn, tSirBssDescription *pBssDesc, tDot11fBeaconIEs **ppIes ) { tANI_BOOLEAN fValidChannel = FALSE; @@ -4486,11 +4848,11 @@ static tANI_BOOLEAN csrScanValidateScanResult( tpAniSirGlobal pMac, tANI_U8 *pCh for( index = 0; index < numChn; index++ ) { // This check relies on the fact that a single BSS description is returned in each - // ScanRsp call, which is the way LIM implemented the scan req/rsp funtions. We changed - // to this model when we ran with a large number of APs. If this were to change, then - // this check would have to mess with removing the bssDescription from somewhere in an + // ScanRsp call, which is the way LIM implemented the scan req/rsp funtions. We changed + // to this model when we ran with a large number of APs. If this were to change, then + // this check would have to mess with removing the bssDescription from somewhere in an // arbitrary index in the bssDescription array. - if ( pChannels[ index ] == pBssDesc->channelId ) + if ( pChannels[ index ] == pBssDesc->channelId ) { fValidChannel = TRUE; break; @@ -4508,7 +4870,7 @@ static tANI_BOOLEAN csrScanValidateScanResult( tpAniSirGlobal pMac, tANI_U8 *pCh } else { - palFreeMemory( pMac->hHdd, pIes ); + vos_mem_free(pIes); } } else @@ -4517,12 +4879,12 @@ static tANI_BOOLEAN csrScanValidateScanResult( tpAniSirGlobal pMac, tANI_U8 *pCh } } - return( fValidChannel ); + return( fValidChannel ); } //Return whether last scan result is received -static tANI_BOOLEAN csrScanProcessScanResults( tpAniSirGlobal pMac, tSmeCmd *pCommand, +static tANI_BOOLEAN csrScanProcessScanResults( tpAniSirGlobal pMac, tSmeCmd *pCommand, tSirSmeScanRsp *pScanRsp, tANI_BOOLEAN *pfRemoveCommand ) { tANI_BOOLEAN fRet = eANI_BOOLEAN_FALSE, fRemoveCommand = eANI_BOOLEAN_FALSE; @@ -4530,7 +4892,7 @@ static tANI_BOOLEAN csrScanProcessScanResults( tpAniSirGlobal pMac, tSmeCmd *pCo tANI_U32 cbParsed; tSirBssDescription *pSirBssDescription; tANI_U32 cbBssDesc; - tANI_U32 cbScanResult = GET_FIELD_OFFSET( tSirSmeScanRsp, bssDescription ) + tANI_U32 cbScanResult = GET_FIELD_OFFSET( tSirSmeScanRsp, bssDescription ) + sizeof(tSirBssDescription); //We need at least one CB // don't consider the scan rsp to be valid if the status code is Scan Failure. Scan Failure @@ -4539,7 +4901,7 @@ static tANI_BOOLEAN csrScanProcessScanResults( tpAniSirGlobal pMac, tSmeCmd *pCo // BssDescriptions.... do { - if ( ( cbScanResult <= pScanRsp->length ) && + if ( ( cbScanResult <= pScanRsp->length ) && (( eSIR_SME_SUCCESS == pScanRsp->statusCode ) || ( eSIR_SME_MORE_SCAN_RESULTS_FOLLOW == pScanRsp->statusCode ) ) ) { @@ -4575,19 +4937,19 @@ static tANI_BOOLEAN csrScanProcessScanResults( tpAniSirGlobal pMac, tSmeCmd *pCo // let's drop the scan result. // // The other situation is where the scan request is for a scan on a particular channel set - // and the scan result is from a - + // and the scan result is from a + // if the NumChannels is 0, then we are supposed to be scanning all channels. Use the full channel // list as the 'valid' channel list. Otherwise, use the specific channel list in the scan parms // as the valid channels. - if ( 0 == cChannels ) + if ( 0 == cChannels ) { tANI_U32 len = sizeof(pMac->roam.validChannelList); - + if (HAL_STATUS_SUCCESS(csrGetCfgValidChannels(pMac, (tANI_U8 *)pMac->roam.validChannelList, &len))) { pChannelList = pMac->roam.validChannelList; - cChannels = (tANI_U8)len; + cChannels = (tANI_U8)len; } else { @@ -4602,7 +4964,7 @@ static tANI_BOOLEAN csrScanProcessScanResults( tpAniSirGlobal pMac, tSmeCmd *pCo pSirBssDescription = pScanRsp->bssDescription; while( cbParsed < pScanRsp->length ) { - if ( csrScanValidateScanResult( pMac, pChannelList, cChannels, pSirBssDescription, &pIes ) ) + if ( csrScanValidateScanResult( pMac, pChannelList, cChannels, pSirBssDescription, &pIes ) ) { csrScanRemoveDupBssDescriptionFromInterimList(pMac, pSirBssDescription, pIes); csrScanSaveBssDescriptionToInterimList( pMac, pSirBssDescription, pIes ); @@ -4626,7 +4988,7 @@ static tANI_BOOLEAN csrScanProcessScanResults( tpAniSirGlobal pMac, tSmeCmd *pCo } } //Free the resource - palFreeMemory( pMac->hHdd, pIes ); + vos_mem_free(pIes); } // skip over the BSS description to the next one... cbBssDesc = pSirBssDescription->length + sizeof( pSirBssDescription->length ); @@ -4694,12 +5056,12 @@ static tANI_BOOLEAN csrScanProcessScanResults( tpAniSirGlobal pMac, tSmeCmd *pCo /* if active connected sessions present then continue to split scan * with specified interval between consecutive scans */ csrSetDefaultScanTiming(pMac, pCommand->u.scanCmd.u.scanRequest.scanType, &(pCommand->u.scanCmd.u.scanRequest)); - palTimerStart(pMac->hHdd, pMac->scan.hTimerStaApConcTimer, - pCommand->u.scanCmd.u.scanRequest.restTime * PAL_TIMER_TO_MS_UNIT, eANI_BOOLEAN_FALSE); + vos_timer_start(&pMac->scan.hTimerStaApConcTimer, + pCommand->u.scanCmd.u.scanRequest.restTime); } else { /* if no connected sessions present then initiate next scan command immediately */ /* minimum timer granularity is 10ms */ - palTimerStart(pMac->hHdd, pMac->scan.hTimerStaApConcTimer, 10 * 1000, eANI_BOOLEAN_FALSE); + vos_timer_start(&pMac->scan.hTimerStaApConcTimer, 10); } } #endif @@ -4710,8 +5072,8 @@ static tANI_BOOLEAN csrScanProcessScanResults( tpAniSirGlobal pMac, tSmeCmd *pCo tANI_BOOLEAN csrScanIsWildCardScan( tpAniSirGlobal pMac, tSmeCmd *pCommand ) { tANI_U8 bssid[WNI_CFG_BSSID_LEN] = {0, 0, 0, 0, 0, 0}; - tANI_BOOLEAN f = palEqualMemory( pMac->hHdd, pCommand->u.scanCmd.u.scanRequest.bssid, - bssid, sizeof(tCsrBssid) ); + tANI_BOOLEAN f = vos_mem_compare(pCommand->u.scanCmd.u.scanRequest.bssid, + bssid, sizeof(tCsrBssid)); //It is not a wild card scan if the bssid is not broadcast and the number of SSID is 1. return ((tANI_BOOLEAN)( (f || (0xff == pCommand->u.scanCmd.u.scanRequest.bssid[0])) && @@ -4751,14 +5113,14 @@ eHalStatus csrSavePnoScanResults(tpAniSirGlobal pMac, tSirSmeScanRsp *pScanRsp) ieLen = (pSirBssDescription->length + sizeof( pSirBssDescription->length ) - GET_FIELD_OFFSET( tSirBssDescription, ieFields )); - if ( !HAL_STATUS_SUCCESS(palAllocateMemory( pMac->hHdd, - (void **)&pScanResult, sizeof(tCsrScanResult) + ieLen)) ) + pScanResult = vos_mem_malloc(sizeof(tCsrScanResult) + ieLen); + if (NULL == pScanResult) { smsLog(pMac, LOGE, FL(" Fail to allocate memory for frame")); return eHAL_STATUS_RESOURCES; } - palZeroMemory( pMac->hHdd, pScanResult, sizeof(tCsrScanResult) + ieLen); + vos_mem_set(pScanResult, sizeof(tCsrScanResult) + ieLen, 0); if (!HAL_STATUS_SUCCESS(csrGetParsedBssDescriptionIEs(pMac, pSirBssDescription, (tDot11fBeaconIEs **)&pScanResult->Result.pvIes))) @@ -4776,9 +5138,8 @@ eHalStatus csrSavePnoScanResults(tpAniSirGlobal pMac, tSirSmeScanRsp *pScanRsp) // Remove duplicate entry csrRemoveDupBssDescription( pMac, &pScanResult->Result.BssDescriptor, - (tDot11fBeaconIEs *)pScanResult->Result.pvIes, - &tmpSsid , &timer ); - + (tDot11fBeaconIEs *)pScanResult->Result.pvIes, + &tmpSsid , &timer, FALSE ); //Add to scan cache csrScanAddResult(pMac, pScanResult, (tDot11fBeaconIEs *)pScanResult->Result.pvIes); @@ -4835,7 +5196,7 @@ eHalStatus csrScanSmeScanResponse( tpAniSirGlobal pMac, void *pMsgBuf ) case eCsrScanGetScanChnInfo: pScanChnInfo = (tSmeGetScanChnRsp *)pMsgBuf; /* - * status code not available in tSmeGetScanChnRsp, so + * status code not available in tSmeGetScanChnRsp, so * by default considereing it to be success */ scanStatus = eSIR_SME_SUCCESS; @@ -4904,7 +5265,7 @@ eHalStatus csrScanSmeScanResponse( tpAniSirGlobal pMac, void *pMsgBuf ) smsLog( pMac, LOGW, "CSR: Scan Completion called but NO commands are ACTIVE ..." ); status = eHAL_STATUS_FAILURE; } - + return (status); } @@ -4917,7 +5278,7 @@ tCsrScanResultInfo *csrScanResultGetFirst(tpAniSirGlobal pMac, tScanResultHandle tCsrScanResult *pResult; tCsrScanResultInfo *pRet = NULL; tScanResultList *pResultList = (tScanResultList *)hScanResult; - + if(pResultList) { csrLLLock(&pResultList->List); @@ -4930,7 +5291,7 @@ tCsrScanResultInfo *csrScanResultGetFirst(tpAniSirGlobal pMac, tScanResultHandle pResultList->pCurEntry = pEntry; csrLLUnlock(&pResultList->List); } - + return pRet; } @@ -4941,7 +5302,7 @@ tCsrScanResultInfo *csrScanResultGetNext(tpAniSirGlobal pMac, tScanResultHandle tCsrScanResult *pResult = NULL; tCsrScanResultInfo *pRet = NULL; tScanResultList *pResultList = (tScanResultList *)hScanResult; - + if(pResultList) { csrLLLock(&pResultList->List); @@ -4961,7 +5322,7 @@ tCsrScanResultInfo *csrScanResultGetNext(tpAniSirGlobal pMac, tScanResultHandle pResultList->pCurEntry = pEntry; csrLLUnlock(&pResultList->List); } - + return pRet; } @@ -4973,7 +5334,7 @@ eHalStatus csrMoveBssToHeadFromBSSID(tpAniSirGlobal pMac, tCsrBssid *bssid, tSca tScanResultList *pResultList = (tScanResultList *)hScanResult; tCsrScanResult *pResult = NULL; tListElem *pEntry = NULL; - + if(pResultList && bssid) { csrLLLock(&pResultList->List); @@ -4981,7 +5342,7 @@ eHalStatus csrMoveBssToHeadFromBSSID(tpAniSirGlobal pMac, tCsrBssid *bssid, tSca while(pEntry) { pResult = GET_BASE_ADDR(pEntry, tCsrScanResult, Link); - if(palEqualMemory(pMac->hHdd, bssid, pResult->Result.BssDescriptor.bssId, sizeof(tCsrBssid))) + if (vos_mem_compare(bssid, pResult->Result.BssDescriptor.bssId, sizeof(tCsrBssid))) { status = eHAL_STATUS_SUCCESS; csrLLRemoveEntry(&pResultList->List, pEntry, LL_ACCESS_NOLOCK); @@ -4992,7 +5353,7 @@ eHalStatus csrMoveBssToHeadFromBSSID(tpAniSirGlobal pMac, tCsrBssid *bssid, tSca } csrLLUnlock(&pResultList->List); } - + return (status); } @@ -5013,8 +5374,8 @@ tANI_BOOLEAN csrScanAgeOutBss(tpAniSirGlobal pMac, tCsrScanResult *pResult) pSession = CSR_GET_SESSION( pMac, i ); //Not to remove the BSS we are connected to. if(csrIsConnStateDisconnected(pMac, i) || (NULL == pSession->pConnectBssDesc) || - (!csrIsDuplicateBssDescription(pMac, &pResult->Result.BssDescriptor, - pSession->pConnectBssDesc, NULL)) + (!csrIsDuplicateBssDescription(pMac, &pResult->Result.BssDescriptor, + pSession->pConnectBssDesc, NULL, FALSE)) ) { smsLog(pMac, LOGW, "Aging out BSS %02X-%02X-%02X-%02X-%02X-%02X Channel %d", @@ -5059,7 +5420,7 @@ eHalStatus csrScanAgeResults(tpAniSirGlobal pMac, tSmeGetScanChnRsp *pScanChnInf { pChnInfo = &pScanChnInfo->scanChn[i]; pEntry = csrLLPeekHead( &pMac->scan.scanResultList, LL_ACCESS_NOLOCK ); - while( pEntry ) + while( pEntry ) { tmpEntry = csrLLNext(&pMac->scan.scanResultList, pEntry, LL_ACCESS_NOLOCK); pResult = GET_BASE_ADDR( pEntry, tCsrScanResult, Link ); @@ -5084,7 +5445,7 @@ eHalStatus csrScanAgeResults(tpAniSirGlobal pMac, tSmeGetScanChnRsp *pScanChnInf } -eHalStatus csrSendMBScanReq( tpAniSirGlobal pMac, tANI_U16 sessionId, +eHalStatus csrSendMBScanReq( tpAniSirGlobal pMac, tANI_U16 sessionId, tCsrScanRequest *pScanReq, tScanReqParam *pScanReqParam ) { eHalStatus status = eHAL_STATUS_SUCCESS; @@ -5098,16 +5459,20 @@ eHalStatus csrSendMBScanReq( tpAniSirGlobal pMac, tANI_U16 sessionId, tANI_U8 selfMacAddr[WNI_CFG_BSSID_LEN]; tANI_U8 *pSelfMac = NULL; - msgLen = (tANI_U16)(sizeof( tSirSmeScanReq ) - sizeof( pMsg->channelList.channelNumber ) + + msgLen = (tANI_U16)(sizeof( tSirSmeScanReq ) - sizeof( pMsg->channelList.channelNumber ) + ( sizeof( pMsg->channelList.channelNumber ) * pScanReq->ChannelInfo.numOfChannels )) + ( pScanReq->uIEFieldLen ) ; - status = palAllocateMemory(pMac->hHdd, (void **)&pMsg, msgLen); - if(HAL_STATUS_SUCCESS(status)) + pMsg = vos_mem_malloc(msgLen); + if ( NULL == pMsg ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; + if (HAL_STATUS_SUCCESS(status)) { do { - palZeroMemory(pMac->hHdd, pMsg, msgLen); + vos_mem_set(pMsg, msgLen, 0); pMsg->messageType = pal_cpu_to_be16((tANI_U16)eWNI_SME_SCAN_REQ); pMsg->length = pal_cpu_to_be16(msgLen); //ToDO: Fill in session info when we need to do scan base on session. @@ -5147,7 +5512,7 @@ eHalStatus csrSendMBScanReq( tpAniSirGlobal pMac, tANI_U16 sessionId, tANI_U32 len = WNI_CFG_BSSID_LEN; pSelfMac = selfMacAddr; status = ccmCfgGetStr( pMac, WNI_CFG_STA_ID, pSelfMac, &len ); - if( !HAL_STATUS_SUCCESS( status ) || + if( !HAL_STATUS_SUCCESS( status ) || ( len < WNI_CFG_BSSID_LEN ) ) { smsLog( pMac, LOGE, FL(" Can not get self MAC address from CFG status = %d"), status ); @@ -5157,22 +5522,22 @@ eHalStatus csrSendMBScanReq( tpAniSirGlobal pMac, tANI_U16 sessionId, } } } - palCopyMemory( pMac->hHdd, (tANI_U8 *)pMsg->selfMacAddr, pSelfMac, sizeof(tSirMacAddr) ); + vos_mem_copy((tANI_U8 *)pMsg->selfMacAddr, pSelfMac, sizeof(tSirMacAddr)); //sirCopyMacAddr - palCopyMemory( pMac->hHdd, (tANI_U8 *)pMsg->bssId, (tANI_U8 *)&pScanReq->bssid, sizeof(tSirMacAddr) ); - if( palEqualMemory( pMac->hHdd, pScanReq->bssid, bssid, sizeof(tCsrBssid) ) ) + vos_mem_copy((tANI_U8 *)pMsg->bssId, (tANI_U8 *)&pScanReq->bssid, sizeof(tSirMacAddr)); + if ( vos_mem_compare(pScanReq->bssid, bssid, sizeof(tCsrBssid))) { - palFillMemory( pMac->hHdd, pMsg->bssId, sizeof(tSirMacAddr), 0xff ); + vos_mem_set(pMsg->bssId, sizeof(tSirMacAddr), 0xff); } else { - palCopyMemory(pMac->hHdd, pMsg->bssId, pScanReq->bssid, WNI_CFG_BSSID_LEN); + vos_mem_copy(pMsg->bssId, pScanReq->bssid, WNI_CFG_BSSID_LEN); } minChnTime = pScanReq->minChnTime; maxChnTime = pScanReq->maxChnTime; - //Verify the scan type first, if the scan is active scan, we need to make sure we + //Verify the scan type first, if the scan is active scan, we need to make sure we //are allowed to do so. /* if 11d is enabled & we don't see any beacon around, scan type falls back to passive. But in BT AMP STA mode we need to send out a @@ -5184,7 +5549,7 @@ eHalStatus csrSendMBScanReq( tpAniSirGlobal pMac, tANI_U16 sessionId, scanType = pMac->scan.curScanType; if(eSIR_PASSIVE_SCAN == pMac->scan.curScanType) { - if(minChnTime < pMac->roam.configParam.nPassiveMinChnTime) + if(minChnTime < pMac->roam.configParam.nPassiveMinChnTime) { minChnTime = pMac->roam.configParam.nPassiveMinChnTime; } @@ -5202,7 +5567,8 @@ eHalStatus csrSendMBScanReq( tpAniSirGlobal pMac, tANI_U16 sessionId, { for (i = 0; i < pMsg->numSsid; i++) { - palCopyMemory(pMac->hHdd, &pMsg->ssId[i], &pScanReq->SSIDs.SSIDList[i].SSID, sizeof(tSirMacSSid)); + vos_mem_copy(&pMsg->ssId[i], + &pScanReq->SSIDs.SSIDList[i].SSID, sizeof(tSirMacSSid)); } } else @@ -5233,28 +5599,29 @@ eHalStatus csrSendMBScanReq( tpAniSirGlobal pMac, tANI_U16 sessionId, if(pScanReq->ChannelInfo.numOfChannels) { //Assuming the channelNumber is tANI_U8 (1 byte) - status = palCopyMemory(pMac->hHdd, pMsg->channelList.channelNumber, pScanReq->ChannelInfo.ChannelList, - pScanReq->ChannelInfo.numOfChannels); + vos_mem_copy(pMsg->channelList.channelNumber, + pScanReq->ChannelInfo.ChannelList, + pScanReq->ChannelInfo.numOfChannels); } pMsg->uIEFieldLen = (tANI_U16) pScanReq->uIEFieldLen; - pMsg->uIEFieldOffset = (tANI_U16)(sizeof( tSirSmeScanReq ) - sizeof( pMsg->channelList.channelNumber ) + + pMsg->uIEFieldOffset = (tANI_U16)(sizeof( tSirSmeScanReq ) - sizeof( pMsg->channelList.channelNumber ) + ( sizeof( pMsg->channelList.channelNumber ) * pScanReq->ChannelInfo.numOfChannels )) ; - if(pScanReq->uIEFieldLen != 0) + if(pScanReq->uIEFieldLen != 0) { - palCopyMemory(pMac->hHdd, (tANI_U8 *)pMsg+pMsg->uIEFieldOffset, - pScanReq->pIEField, pScanReq->uIEFieldLen ); + vos_mem_copy((tANI_U8 *)pMsg+pMsg->uIEFieldOffset, pScanReq->pIEField, + pScanReq->uIEFieldLen); } pMsg->p2pSearch = pScanReq->p2pSearch; - if (pScanReq->requestType == eCSR_SCAN_HO_BG_SCAN) + if (pScanReq->requestType == eCSR_SCAN_HO_BG_SCAN) { pMsg->backgroundScanMode = eSIR_ROAMING_SCAN; - } + } }while(0); smsLog(pMac, LOG1, FL("domainIdCurrent %d scanType %d bssType %d requestType %d numChannels %d "), - pMac->scan.domainIdCurrent, pMsg->scanType, pMsg->bssType, + pMac->scan.domainIdCurrent, pMsg->scanType, pMsg->bssType, pScanReq->requestType, pMsg->channelList.numChannels); for(i = 0; i < pMsg->channelList.numChannels; i++) @@ -5266,10 +5633,10 @@ eHalStatus csrSendMBScanReq( tpAniSirGlobal pMac, tANI_U16 sessionId, { status = palSendMBMessage(pMac->hHdd, pMsg); } - else + else { smsLog( pMac, LOGE, FL(" failed to send down scan req with status = %d"), status ); - palFreeMemory(pMac->hHdd, pMsg); + vos_mem_free(pMsg); } }//Success allocated memory else @@ -5287,10 +5654,12 @@ eHalStatus csrSendMBScanResultReq( tpAniSirGlobal pMac, tANI_U32 sessionId, tSca tANI_U16 msgLen; msgLen = (tANI_U16)(sizeof( tSirSmeScanReq )); - status = palAllocateMemory(pMac->hHdd, (void **)&pMsg, msgLen); - if(HAL_STATUS_SUCCESS(status)) + pMsg = vos_mem_malloc(msgLen); + if ( NULL == pMsg ) + status = eHAL_STATUS_FAILURE; + else { - palZeroMemory(pMac->hHdd, pMsg, msgLen); + vos_mem_set(pMsg, msgLen, 0); pMsg->messageType = pal_cpu_to_be16((tANI_U16)eWNI_SME_SCAN_REQ); pMsg->length = pal_cpu_to_be16(msgLen); pMsg->sessionId = sessionId; @@ -5305,7 +5674,7 @@ eHalStatus csrSendMBScanResultReq( tpAniSirGlobal pMac, tANI_U32 sessionId, tSca smsLog( pMac, LOGE, FL(" failed to send down scan req with status = %d\n"), status ); } - } + } return( status ); } @@ -5316,9 +5685,9 @@ eHalStatus csrScanChannels( tpAniSirGlobal pMac, tSmeCmd *pCommand ) { eHalStatus status = eHAL_STATUS_FAILURE; tScanReqParam scanReq; - + do - { + { /* * Don't delete cached results. Rome rssi based scan candidates * may land up in scan cache instead of LFR cache. @@ -5349,14 +5718,14 @@ eHalStatus csrScanChannels( tpAniSirGlobal pMac, tSmeCmd *pCommand ) WLAN_VOS_DIAG_LOG_ALLOC(pScanLog, vos_log_scan_pkt_type, LOG_WLAN_SCAN_C); if(pScanLog) { - if(eCsrScanBgScan == pCommand->u.scanCmd.reason || + if(eCsrScanBgScan == pCommand->u.scanCmd.reason || eCsrScanProbeBss == pCommand->u.scanCmd.reason) { pScanLog->eventId = WLAN_SCAN_EVENT_HO_SCAN_REQ; } else { - if( (eSIR_PASSIVE_SCAN != pCommand->u.scanCmd.u.scanRequest.scanType) && + if( (eSIR_PASSIVE_SCAN != pCommand->u.scanCmd.u.scanRequest.scanType) && (eSIR_PASSIVE_SCAN != pMac->scan.curScanType) ) { pScanLog->eventId = WLAN_SCAN_EVENT_ACTIVE_SCAN_REQ; @@ -5371,9 +5740,9 @@ eHalStatus csrScanChannels( tpAniSirGlobal pMac, tSmeCmd *pCommand ) pScanLog->numChannel = (v_U8_t)pCommand->u.scanCmd.u.scanRequest.ChannelInfo.numOfChannels; if(pScanLog->numChannel && (pScanLog->numChannel < VOS_LOG_MAX_NUM_CHANNEL)) { - palCopyMemory(pMac->hHdd, pScanLog->channels, - pCommand->u.scanCmd.u.scanRequest.ChannelInfo.ChannelList, - pScanLog->numChannel); + vos_mem_copy(pScanLog->channels, + pCommand->u.scanCmd.u.scanRequest.ChannelInfo.ChannelList, + pScanLog->numChannel); } WLAN_VOS_DIAG_LOG_REPORT(pScanLog); } @@ -5384,7 +5753,7 @@ eHalStatus csrScanChannels( tpAniSirGlobal pMac, tSmeCmd *pCommand ) status = csrSendMBScanReq(pMac, pCommand->sessionId, &pCommand->u.scanCmd.u.scanRequest, &scanReq); }while(0); - + return( status ); } @@ -5393,9 +5762,9 @@ eHalStatus csrScanRetrieveResult(tpAniSirGlobal pMac, tSmeCmd *pCommand) { eHalStatus status = eHAL_STATUS_FAILURE; tScanReqParam scanReq; - + do - { + { #ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD if (eCsrScanGetLfrResult == pCommand->u.scanCmd.reason) { @@ -5414,7 +5783,7 @@ eHalStatus csrScanRetrieveResult(tpAniSirGlobal pMac, tSmeCmd *pCommand) } status = csrSendMBScanResultReq(pMac, pCommand->sessionId, &scanReq); }while(0); - + return (status); } @@ -5528,13 +5897,13 @@ eHalStatus csrProcessScanCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand ) default: status = csrScanChannels(pMac, pCommand); break; - } - + } + if(!HAL_STATUS_SUCCESS(status)) { csrReleaseScanCommand(pMac, pCommand, eCSR_SCAN_FAILURE); } - + return (status); } @@ -5543,7 +5912,7 @@ eHalStatus csrScanSetBGScanparams(tpAniSirGlobal pMac, tCsrBGScanRequest *pScanR { eHalStatus status = eHAL_STATUS_SUCCESS; tSmeCmd *pCommand = NULL; - + if(pScanReq) { do @@ -5554,12 +5923,12 @@ eHalStatus csrScanSetBGScanparams(tpAniSirGlobal pMac, tCsrBGScanRequest *pScanR status = eHAL_STATUS_RESOURCES; break; } - palZeroMemory(pMac->hHdd, &pCommand->u.scanCmd, sizeof(tScanCmd)); + vos_mem_set(&pCommand->u.scanCmd, sizeof(tScanCmd), 0); pCommand->command = eSmeCommandScan; pCommand->u.scanCmd.reason = eCsrScanSetBGScanParam; pCommand->u.scanCmd.callback = NULL; pCommand->u.scanCmd.pContext = NULL; - palCopyMemory(pMac->hHdd, &pCommand->u.scanCmd.u.bgScanRequest, pScanReq, sizeof(tCsrBGScanRequest)); + vos_mem_copy(&pCommand->u.scanCmd.u.bgScanRequest, pScanReq, sizeof(tCsrBGScanRequest)); //we have to do the follow if(pScanReq->ChannelInfo.numOfChannels == 0) { @@ -5567,28 +5936,27 @@ eHalStatus csrScanSetBGScanparams(tpAniSirGlobal pMac, tCsrBGScanRequest *pScanR } else { - status = palAllocateMemory(pMac->hHdd, (void **)&pCommand->u.scanCmd.u.bgScanRequest.ChannelInfo.ChannelList, - pScanReq->ChannelInfo.numOfChannels); - if(HAL_STATUS_SUCCESS(status)) + pCommand->u.scanCmd.u.bgScanRequest.ChannelInfo.ChannelList + = vos_mem_malloc(pScanReq->ChannelInfo.numOfChannels); + if ( NULL != pCommand->u.scanCmd.u.bgScanRequest.ChannelInfo.ChannelList ) { - palCopyMemory(pMac->hHdd, pCommand->u.scanCmd.u.bgScanRequest.ChannelInfo.ChannelList, - pScanReq->ChannelInfo.ChannelList, pScanReq->ChannelInfo.numOfChannels); + vos_mem_copy(pCommand->u.scanCmd.u.bgScanRequest.ChannelInfo.ChannelList, + pScanReq->ChannelInfo.ChannelList, + pScanReq->ChannelInfo.numOfChannels); } else { smsLog(pMac, LOGE, FL("ran out of memory")); csrReleaseCommandScan(pMac, pCommand); - break; + return eHAL_STATUS_FAILURE; } } //scan req for SSID if(pScanReq->SSID.length) { - palCopyMemory(pMac->hHdd, - pCommand->u.scanCmd.u.bgScanRequest.SSID.ssId, - pScanReq->SSID.ssId, - pScanReq->SSID.length); + vos_mem_copy(pCommand->u.scanCmd.u.bgScanRequest.SSID.ssId, + pScanReq->SSID.ssId, pScanReq->SSID.length); pCommand->u.scanCmd.u.bgScanRequest.SSID.length = pScanReq->SSID.length; } @@ -5606,7 +5974,7 @@ eHalStatus csrScanSetBGScanparams(tpAniSirGlobal pMac, tCsrBGScanRequest *pScanR } }while(0); } - + return (status); } @@ -5614,7 +5982,7 @@ eHalStatus csrScanBGScanAbort( tpAniSirGlobal pMac ) { eHalStatus status = eHAL_STATUS_SUCCESS; tSmeCmd *pCommand = NULL; - + do { pCommand = csrGetCommandBuffer(pMac); @@ -5623,8 +5991,8 @@ eHalStatus csrScanBGScanAbort( tpAniSirGlobal pMac ) status = eHAL_STATUS_RESOURCES; break; } - palZeroMemory(pMac->hHdd, &pCommand->u.scanCmd, sizeof(tScanCmd)); - pCommand->command = eSmeCommandScan; + vos_mem_set(&pCommand->u.scanCmd, sizeof(tScanCmd), 0); + pCommand->command = eSmeCommandScan; pCommand->u.scanCmd.reason = eCsrScanBGScanAbort; pCommand->u.scanCmd.callback = NULL; pCommand->u.scanCmd.pContext = NULL; @@ -5636,17 +6004,17 @@ eHalStatus csrScanBGScanAbort( tpAniSirGlobal pMac ) break; } }while(0); - + return (status); } -//This will enable the background scan with the non-zero interval +//This will enable the background scan with the non-zero interval eHalStatus csrScanBGScanEnable(tpAniSirGlobal pMac) { eHalStatus status = eHAL_STATUS_SUCCESS; tSmeCmd *pCommand = NULL; - + if(pMac->roam.configParam.bgScanInterval) { do @@ -5657,8 +6025,8 @@ eHalStatus csrScanBGScanEnable(tpAniSirGlobal pMac) status = eHAL_STATUS_RESOURCES; break; } - palZeroMemory(pMac->hHdd, &pCommand->u.scanCmd, sizeof(tScanCmd)); - pCommand->command = eSmeCommandScan; + vos_mem_set(&pCommand->u.scanCmd, sizeof(tScanCmd), 0); + pCommand->command = eSmeCommandScan; pCommand->u.scanCmd.reason = eCsrScanBGScanEnable; pCommand->u.scanCmd.callback = NULL; pCommand->u.scanCmd.pContext = NULL; @@ -5682,7 +6050,7 @@ eHalStatus csrScanBGScanEnable(tpAniSirGlobal pMac) smsLog(pMac, LOGE, FL("cannot continue because the bgscan interval is 0")); status = eHAL_STATUS_INVALID_PARAMETER; } - + return (status); } @@ -5699,7 +6067,7 @@ eHalStatus csrScanCopyRequest(tpAniSirGlobal pMac, tCsrScanRequest *pDstReq, tCs status = csrScanFreeRequest(pMac, pDstReq); if(HAL_STATUS_SUCCESS(status)) { - status = palCopyMemory(pMac->hHdd, pDstReq, pSrcReq, sizeof(tCsrScanRequest)); + vos_mem_copy(pDstReq, pSrcReq, sizeof(tCsrScanRequest)); /* Re-initialize the pointers to NULL since we did a copy */ pDstReq->pIEField = NULL; pDstReq->ChannelInfo.ChannelList = NULL; @@ -5711,10 +6079,14 @@ eHalStatus csrScanCopyRequest(tpAniSirGlobal pMac, tCsrScanRequest *pDstReq, tCs } else { - status = palAllocateMemory(pMac->hHdd, (void **)&pDstReq->pIEField, pSrcReq->uIEFieldLen); - if(HAL_STATUS_SUCCESS(status)) + pDstReq->pIEField = vos_mem_malloc(pSrcReq->uIEFieldLen); + if ( NULL == pDstReq->pIEField ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; + if (HAL_STATUS_SUCCESS(status)) { - palCopyMemory(pMac->hHdd, pDstReq->pIEField, pSrcReq->pIEField, pSrcReq->uIEFieldLen); + vos_mem_copy(pDstReq->pIEField, pSrcReq->pIEField, pSrcReq->uIEFieldLen); pDstReq->uIEFieldLen = pSrcReq->uIEFieldLen; } else @@ -5731,8 +6103,13 @@ eHalStatus csrScanCopyRequest(tpAniSirGlobal pMac, tCsrScanRequest *pDstReq, tCs } else { - status = palAllocateMemory(pMac->hHdd, (void **)&pDstReq->ChannelInfo.ChannelList, - pSrcReq->ChannelInfo.numOfChannels * sizeof(*pDstReq->ChannelInfo.ChannelList)); + pDstReq->ChannelInfo.ChannelList = vos_mem_malloc( + pSrcReq->ChannelInfo.numOfChannels + * sizeof(*pDstReq->ChannelInfo.ChannelList)); + if ( NULL == pDstReq->ChannelInfo.ChannelList ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; if(!HAL_STATUS_SUCCESS(status)) { pDstReq->ChannelInfo.numOfChannels = 0; @@ -5757,7 +6134,7 @@ eHalStatus csrScanCopyRequest(tpAniSirGlobal pMac, tCsrScanRequest *pDstReq, tCs for ( index = 0; index < pSrcReq->ChannelInfo.numOfChannels ; index++ ) { /* Allow scan on valid channels only. - * If it is p2p scan and valid channel list doesnt contain + * If it is p2p scan and valid channel list doesnt contain * social channels, enforce scan on social channels because * that is the only way to find p2p peers. * This can happen only if band is set to 5Ghz mode. @@ -5766,12 +6143,12 @@ eHalStatus csrScanCopyRequest(tpAniSirGlobal pMac, tCsrScanRequest *pDstReq, tCs ((eCSR_SCAN_P2P_DISCOVERY == pSrcReq->requestType) && CSR_IS_SOCIAL_CHANNEL(pSrcReq->ChannelInfo.ChannelList[index]))) { - if( (pSrcReq->skipDfsChnlInP2pSearch && + if( (pSrcReq->skipDfsChnlInP2pSearch && (NV_CHANNEL_DFS == vos_nv_getChannelEnabledState(pSrcReq->ChannelInfo.ChannelList[index])) ) #ifdef FEATURE_WLAN_LFR - /* + /* * If LFR is requesting a contiguous scan - * (i.e. numOfChannels > 1), then ignore + * (i.e. numOfChannels > 1), then ignore * DFS channels. * TODO: vos_nv_getChannelEnabledState is returning * 120, 124 and 128 as non-DFS channels. Hence, the @@ -5808,7 +6185,7 @@ eHalStatus csrScanCopyRequest(tpAniSirGlobal pMac, tCsrScanRequest *pDstReq, tCs * No valid channels found in the request. * Only perform scan on the channels passed * pSrcReq if it is a eCSR_SCAN_HO_BG_SCAN. - * Passing 0 to LIM will trigger a scan on + * Passing 0 to LIM will trigger a scan on * all valid channels which is not desirable. */ smsLog(pMac, LOGE, "%s: no valid channels found (request=%d)", @@ -5826,8 +6203,10 @@ eHalStatus csrScanCopyRequest(tpAniSirGlobal pMac, tCsrScanRequest *pDstReq, tCs else { smsLog(pMac, LOGE, "Couldn't get the valid Channel List, keeping requester's list"); - palCopyMemory(pMac->hHdd, pDstReq->ChannelInfo.ChannelList, pSrcReq->ChannelInfo.ChannelList, - pSrcReq->ChannelInfo.numOfChannels * sizeof(*pDstReq->ChannelInfo.ChannelList)); + vos_mem_copy(pDstReq->ChannelInfo.ChannelList, + pSrcReq->ChannelInfo.ChannelList, + pSrcReq->ChannelInfo.numOfChannels + * sizeof(*pDstReq->ChannelInfo.ChannelList)); pDstReq->ChannelInfo.numOfChannels = pSrcReq->ChannelInfo.numOfChannels; } }//Allocate memory for Channel List @@ -5839,13 +6218,18 @@ eHalStatus csrScanCopyRequest(tpAniSirGlobal pMac, tCsrScanRequest *pDstReq, tCs } else { - status = palAllocateMemory(pMac->hHdd, (void **)&pDstReq->SSIDs.SSIDList, - pSrcReq->SSIDs.numOfSSIDs * sizeof(*pDstReq->SSIDs.SSIDList)); - if(HAL_STATUS_SUCCESS(status)) + pDstReq->SSIDs.SSIDList = vos_mem_malloc( + pSrcReq->SSIDs.numOfSSIDs * sizeof(*pDstReq->SSIDs.SSIDList)); + if ( NULL == pDstReq->SSIDs.SSIDList ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; + if (HAL_STATUS_SUCCESS(status)) { pDstReq->SSIDs.numOfSSIDs = pSrcReq->SSIDs.numOfSSIDs; - palCopyMemory(pMac->hHdd, pDstReq->SSIDs.SSIDList, pSrcReq->SSIDs.SSIDList, - pSrcReq->SSIDs.numOfSSIDs * sizeof(*pDstReq->SSIDs.SSIDList)); + vos_mem_copy(pDstReq->SSIDs.SSIDList, + pSrcReq->SSIDs.SSIDList, + pSrcReq->SSIDs.numOfSSIDs * sizeof(*pDstReq->SSIDs.SSIDList)); } else { @@ -5859,40 +6243,39 @@ eHalStatus csrScanCopyRequest(tpAniSirGlobal pMac, tCsrScanRequest *pDstReq, tCs } }while(0); - + if(!HAL_STATUS_SUCCESS(status)) { csrScanFreeRequest(pMac, pDstReq); } - + return (status); } eHalStatus csrScanFreeRequest(tpAniSirGlobal pMac, tCsrScanRequest *pReq) { - eHalStatus status = eHAL_STATUS_SUCCESS; - + if(pReq->ChannelInfo.ChannelList) { - status = palFreeMemory(pMac->hHdd, pReq->ChannelInfo.ChannelList); + vos_mem_free(pReq->ChannelInfo.ChannelList); pReq->ChannelInfo.ChannelList = NULL; } pReq->ChannelInfo.numOfChannels = 0; if(pReq->pIEField) { - status = palFreeMemory(pMac->hHdd, pReq->pIEField); + vos_mem_free(pReq->pIEField); pReq->pIEField = NULL; } pReq->uIEFieldLen = 0; if(pReq->SSIDs.SSIDList) { - palFreeMemory(pMac->hHdd, pReq->SSIDs.SSIDList); + vos_mem_free(pReq->SSIDs.SSIDList); pReq->SSIDs.SSIDList = NULL; } pReq->SSIDs.numOfSSIDs = 0; - - return (status); + + return eHAL_STATUS_SUCCESS; } @@ -5901,7 +6284,7 @@ void csrScanCallCallback(tpAniSirGlobal pMac, tSmeCmd *pCommand, eCsrScanStatus if(pCommand->u.scanCmd.callback) { // sme_ReleaseGlobalLock( &pMac->sme ); - pCommand->u.scanCmd.callback(pMac, pCommand->u.scanCmd.pContext, pCommand->u.scanCmd.scanID, scanStatus); + pCommand->u.scanCmd.callback(pMac, pCommand->u.scanCmd.pContext, pCommand->u.scanCmd.scanID, scanStatus); // sme_AcquireGlobalLock( &pMac->sme ); } else { smsLog( pMac, LOG2, "%s:%d - Callback NULL!!!", __func__, __LINE__); @@ -5925,31 +6308,33 @@ void csrScanStopTimers(tpAniSirGlobal pMac) eHalStatus csrScanStartGetResultTimer(tpAniSirGlobal pMac) { eHalStatus status; - + if(pMac->scan.fScanEnable) { - status = palTimerStart(pMac->hHdd, pMac->scan.hTimerGetResult, CSR_SCAN_GET_RESULT_INTERVAL, eANI_BOOLEAN_TRUE); + status = vos_timer_start(&pMac->scan.hTimerGetResult, CSR_SCAN_GET_RESULT_INTERVAL/PAL_TIMER_TO_MS_UNIT); } else { status = eHAL_STATUS_FAILURE; } - + return (status); } eHalStatus csrScanStopGetResultTimer(tpAniSirGlobal pMac) { - return (palTimerStop(pMac->hHdd, pMac->scan.hTimerGetResult)); + return (vos_timer_stop(&pMac->scan.hTimerGetResult)); } void csrScanGetResultTimerHandler(void *pv) { tpAniSirGlobal pMac = PMAC_STRUCT( pv ); - + csrScanRequestResult(pMac); + + vos_timer_start(&pMac->scan.hTimerGetResult, CSR_SCAN_GET_RESULT_INTERVAL/PAL_TIMER_TO_MS_UNIT); } #ifdef WLAN_AP_STA_CONCURRENCY @@ -5962,15 +6347,16 @@ static void csrStaApConcTimerHandler(void *pv) csrLLLock(&pMac->scan.scanCmdPendingList); if ( NULL != ( pEntry = csrLLPeekHead( &pMac->scan.scanCmdPendingList, LL_ACCESS_NOLOCK) ) ) - { + { tCsrScanRequest scanReq; tSmeCmd *pSendScanCmd = NULL; tANI_U8 numChn = 0; + tANI_U8 nNumChanCombinedConc = 0; tANI_U8 i, j; tCsrChannelInfo *pChnInfo = &scanReq.ChannelInfo; tANI_U8 channelToScan[WNI_CFG_VALID_CHANNEL_LIST_LEN]; eHalStatus status; - + pScanCmd = GET_BASE_ADDR( pEntry, tSmeCmd, Link ); numChn = pScanCmd->u.scanCmd.u.scanRequest.ChannelInfo.numOfChannels; @@ -5983,24 +6369,35 @@ static void csrStaApConcTimerHandler(void *pv) * any one of the following: * - STA session is connected and the scan is not a P2P search * - any P2P session is connected - * Do not split scans if no concurrent infra connections are + * Do not split scans if no concurrent infra connections are * active and if the scan is a BG scan triggered by LFR (OR) * any scan if LFR is in the middle of a BG scan. Splitting * the scan is delaying the time it takes for LFR to find * candidates and resulting in disconnects. */ - if ( (numChn > pMac->roam.configParam.nNumChanCombinedConc) && - ((csrIsStaSessionConnected(pMac) && + + if((csrIsStaSessionConnected(pMac) && + !csrIsP2pSessionConnected(pMac))) + { + nNumChanCombinedConc = pMac->roam.configParam.nNumStaChanCombinedConc; + } + else if(csrIsP2pSessionConnected(pMac)) + { + nNumChanCombinedConc = pMac->roam.configParam.nNumP2PChanCombinedConc; + } + + if ( (numChn > nNumChanCombinedConc) && + ((csrIsStaSessionConnected(pMac) && #ifdef FEATURE_WLAN_LFR (csrIsConcurrentInfraConnected(pMac) || ((pScanCmd->u.scanCmd.reason != eCsrScanBgScan) && - (pMac->roam.neighborRoamInfo.neighborRoamState != + (pMac->roam.neighborRoamInfo.neighborRoamState != eCSR_NEIGHBOR_ROAM_STATE_CFG_CHAN_LIST_SCAN))) && #endif (pScanCmd->u.scanCmd.u.scanRequest.p2pSearch != 1)) || (csrIsP2pSessionConnected(pMac)))) { - palZeroMemory(pMac->hHdd, &scanReq, sizeof(tCsrScanRequest)); + vos_mem_set(&scanReq, sizeof(tCsrScanRequest), 0); pSendScanCmd = csrGetCommandBuffer(pMac); //optimize this to use 2 command buffer only if (!pSendScanCmd) @@ -6009,7 +6406,7 @@ static void csrStaApConcTimerHandler(void *pv) csrLLUnlock(&pMac->scan.scanCmdPendingList); return; } - pSendScanCmd->command = pScanCmd->command; + pSendScanCmd->command = pScanCmd->command; pSendScanCmd->sessionId = pScanCmd->sessionId; pSendScanCmd->u.scanCmd.callback = NULL; pSendScanCmd->u.scanCmd.pContext = pScanCmd->u.scanCmd.pContext; @@ -6018,31 +6415,32 @@ static void csrStaApConcTimerHandler(void *pv) /* First copy all the parameters to local variable of scan request */ csrScanCopyRequest(pMac, &scanReq, &pScanCmd->u.scanCmd.u.scanRequest); - + /* Now modify the elements of local var scan request required to be modified for split scan */ if(scanReq.ChannelInfo.ChannelList != NULL) { - palFreeMemory(pMac->hHdd,scanReq.ChannelInfo.ChannelList); + vos_mem_free(scanReq.ChannelInfo.ChannelList); scanReq.ChannelInfo.ChannelList = NULL; } - - pChnInfo->numOfChannels = pMac->roam.configParam.nNumChanCombinedConc; - palCopyMemory(pMac->hHdd, &channelToScan[0], &pScanCmd->u.scanCmd.u.scanRequest.ChannelInfo.ChannelList[0], - pChnInfo->numOfChannels * sizeof(tANI_U8)); //just send one channel + + pChnInfo->numOfChannels = nNumChanCombinedConc; + vos_mem_copy(&channelToScan[0], + &pScanCmd->u.scanCmd.u.scanRequest.ChannelInfo.ChannelList[0], + pChnInfo->numOfChannels * sizeof(tANI_U8));//just send one channel pChnInfo->ChannelList = &channelToScan[0]; - for (i = 0, j = pMac->roam.configParam.nNumChanCombinedConc; i < (numChn-pMac->roam.configParam.nNumChanCombinedConc); i++, j++) + for (i = 0, j = nNumChanCombinedConc; i < (numChn-nNumChanCombinedConc); i++, j++) { - pScanCmd->u.scanCmd.u.scanRequest.ChannelInfo.ChannelList[i] = + pScanCmd->u.scanCmd.u.scanRequest.ChannelInfo.ChannelList[i] = pScanCmd->u.scanCmd.u.scanRequest.ChannelInfo.ChannelList[j]; //Move all the channels one step } - - pScanCmd->u.scanCmd.u.scanRequest.ChannelInfo.numOfChannels = numChn - pMac->roam.configParam.nNumChanCombinedConc; //reduce outstanding # of channels to be scanned + + pScanCmd->u.scanCmd.u.scanRequest.ChannelInfo.numOfChannels = numChn - nNumChanCombinedConc; //reduce outstanding # of channels to be scanned scanReq.BSSType = eCSR_BSS_TYPE_ANY; //Modify callers parameters in case of concurrency scanReq.scanType = eSIR_ACTIVE_SCAN; - //Use concurrency values for min/maxChnTime. + //Use concurrency values for min/maxChnTime. //We know csrIsAnySessionConnected(pMac) returns TRUE here csrSetDefaultScanTiming(pMac, scanReq.scanType, &scanReq); @@ -6063,29 +6461,29 @@ static void csrStaApConcTimerHandler(void *pv) /* no active connected session present or numChn == 1 * scan all remaining channels */ pSendScanCmd = pScanCmd; - //remove this command from pending list + //remove this command from pending list if (csrLLRemoveHead( &pMac->scan.scanCmdPendingList, LL_ACCESS_NOLOCK) == NULL) { //In case between PeekHead and here, the entry got removed by another thread. smsLog( pMac, LOGE, FL(" Failed to remove entry from scanCmdPendingList")); } - - } + + } csrQueueSmeCommand(pMac, pSendScanCmd, eANI_BOOLEAN_FALSE); } csrLLUnlock(&pMac->scan.scanCmdPendingList); - + } #endif eHalStatus csrScanStartResultAgingTimer(tpAniSirGlobal pMac) { eHalStatus status = eHAL_STATUS_FAILURE; - + if(pMac->scan.fScanEnable) { - status = palTimerStart(pMac->hHdd, pMac->scan.hTimerResultAging, CSR_SCAN_RESULT_AGING_INTERVAL, eANI_BOOLEAN_TRUE); + status = vos_timer_start(&pMac->scan.hTimerResultAging, CSR_SCAN_RESULT_AGING_INTERVAL/PAL_TIMER_TO_MS_UNIT); } return (status); } @@ -6096,20 +6494,19 @@ eHalStatus csrScanStartResultCfgAgingTimer(tpAniSirGlobal pMac) if(pMac->scan.fScanEnable) { - status = palTimerStart(pMac->hHdd, pMac->scan.hTimerResultCfgAging, - CSR_SCAN_RESULT_CFG_AGING_INTERVAL, eANI_BOOLEAN_TRUE); + status = vos_timer_start(&pMac->scan.hTimerResultCfgAging, CSR_SCAN_RESULT_CFG_AGING_INTERVAL/PAL_TIMER_TO_MS_UNIT); } return (status); } eHalStatus csrScanStopResultAgingTimer(tpAniSirGlobal pMac) { - return (palTimerStop(pMac->hHdd, pMac->scan.hTimerResultAging)); + return (vos_timer_stop(&pMac->scan.hTimerResultAging)); } eHalStatus csrScanStopResultCfgAgingTimer(tpAniSirGlobal pMac) { - return (palTimerStop(pMac->hHdd, pMac->scan.hTimerResultCfgAging)); + return (vos_timer_stop(&pMac->scan.hTimerResultCfgAging)); } //This function returns the maximum time a BSS is allowed in the scan result. @@ -6120,7 +6517,7 @@ eHalStatus csrScanStopResultCfgAgingTimer(tpAniSirGlobal pMac) //Connected w/o traffic, with PS //Connected w/ traffic, no PS -- Not supported //Connected w/ traffic, with PS -- Not supported -//the return unit is in seconds. +//the return unit is in seconds. tANI_U32 csrScanGetAgeOutTime(tpAniSirGlobal pMac) { tANI_U32 nRet; @@ -6180,10 +6577,10 @@ void csrScanResultAgingTimerHandler(void *pv) { tpAniSirGlobal pMac = PMAC_STRUCT( pv ); tANI_BOOLEAN fDisconnected = csrIsAllSessionDisconnected(pMac); - + //no scan, no aging - if(pMac->scan.fScanEnable && - (((eANI_BOOLEAN_FALSE == fDisconnected) && pMac->roam.configParam.bgScanInterval) + if(pMac->scan.fScanEnable && + (((eANI_BOOLEAN_FALSE == fDisconnected) && pMac->roam.configParam.bgScanInterval) || (fDisconnected && (pMac->scan.fCancelIdleScan == eANI_BOOLEAN_FALSE))) ) { @@ -6194,7 +6591,7 @@ void csrScanResultAgingTimerHandler(void *pv) csrLLLock(&pMac->scan.scanResultList); pEntry = csrLLPeekHead( &pMac->scan.scanResultList, LL_ACCESS_NOLOCK ); - while( pEntry ) + while( pEntry ) { tmpEntry = csrLLNext(&pMac->scan.scanResultList, pEntry, LL_ACCESS_NOLOCK); pResult = GET_BASE_ADDR( pEntry, tCsrScanResult, Link ); @@ -6207,6 +6604,7 @@ void csrScanResultAgingTimerHandler(void *pv) } csrLLUnlock(&pMac->scan.scanResultList); } + vos_timer_start(&pMac->scan.hTimerResultAging, CSR_SCAN_RESULT_AGING_INTERVAL/PAL_TIMER_TO_MS_UNIT); } static void csrScanResultCfgAgingTimerHandler(void *pv) @@ -6216,10 +6614,10 @@ static void csrScanResultCfgAgingTimerHandler(void *pv) tCsrScanResult *pResult; tANI_TIMESTAMP ageOutTime = pMac->scan.scanResultCfgAgingTime * PAL_TICKS_PER_SECOND; tANI_TIMESTAMP curTime = (tANI_TIMESTAMP)palGetTickCount(pMac->hHdd); - + csrLLLock(&pMac->scan.scanResultList); pEntry = csrLLPeekHead( &pMac->scan.scanResultList, LL_ACCESS_NOLOCK ); - while( pEntry ) + while( pEntry ) { tmpEntry = csrLLNext(&pMac->scan.scanResultList, pEntry, LL_ACCESS_NOLOCK); pResult = GET_BASE_ADDR( pEntry, tCsrScanResult, Link ); @@ -6231,18 +6629,19 @@ static void csrScanResultCfgAgingTimerHandler(void *pv) pEntry = tmpEntry; } csrLLUnlock(&pMac->scan.scanResultList); + vos_timer_start(&pMac->scan.hTimerResultCfgAging, CSR_SCAN_RESULT_CFG_AGING_INTERVAL/PAL_TIMER_TO_MS_UNIT); } eHalStatus csrScanStartIdleScanTimer(tpAniSirGlobal pMac, tANI_U32 interval) { eHalStatus status; - + smsLog(pMac, LOG1, " csrScanStartIdleScanTimer"); if((pMac->scan.fScanEnable) && (eANI_BOOLEAN_FALSE == pMac->scan.fCancelIdleScan) && interval) { pMac->scan.nIdleScanTimeGap += interval; - palTimerStop(pMac->hHdd, pMac->scan.hTimerIdleScan); - status = palTimerStart(pMac->hHdd, pMac->scan.hTimerIdleScan, interval, eANI_BOOLEAN_FALSE); + vos_timer_stop(&pMac->scan.hTimerIdleScan); + status = vos_timer_start(&pMac->scan.hTimerIdleScan, interval/PAL_TIMER_TO_MS_UNIT); if( !HAL_STATUS_SUCCESS(status) ) { smsLog(pMac, LOGE, " Fail to start Idle scan timer. status = %d interval = %d", status, interval); @@ -6258,14 +6657,14 @@ eHalStatus csrScanStartIdleScanTimer(tpAniSirGlobal pMac, tANI_U32 interval) } status = eHAL_STATUS_FAILURE; } - + return (status); } eHalStatus csrScanStopIdleScanTimer(tpAniSirGlobal pMac) { - return (palTimerStop(pMac->hHdd, pMac->scan.hTimerIdleScan)); + return (vos_timer_stop(&pMac->scan.hTimerIdleScan)); } @@ -6290,7 +6689,7 @@ void csrScanIMPSCallback(void *callbackContext, eHalStatus status) if(eANI_BOOLEAN_FALSE == pMac->scan.fCancelIdleScan) { - if(pMac->roam.configParam.IsIdleScanEnabled) + if(pMac->roam.configParam.IsIdleScanEnabled) { if(HAL_STATUS_SUCCESS(status)) { @@ -6314,7 +6713,7 @@ void csrScanIMPSCallback(void *callbackContext, eHalStatus status) } else {//we might need another flag to check if CSR needs to request imps at all - + tANI_U32 nTime = 0; pMac->scan.fRestartIdleScan = eANI_BOOLEAN_FALSE; @@ -6327,7 +6726,7 @@ void csrScanIMPSCallback(void *callbackContext, eHalStatus status) } -//Param: pTimeInterval -- Caller allocated memory in return, if failed, to specify the nxt time interval for +//Param: pTimeInterval -- Caller allocated memory in return, if failed, to specify the nxt time interval for //idle scan timer interval //Return: Not success -- meaning it cannot start IMPS, caller needs to start a timer for idle scan eHalStatus csrScanTriggerIdleScan(tpAniSirGlobal pMac, tANI_U32 *pTimeInterval) @@ -6371,7 +6770,7 @@ eHalStatus csrScanTriggerIdleScan(tpAniSirGlobal pMac, tANI_U32 *pTimeInterval) return status; } - if((pMac->scan.fScanEnable) && (eANI_BOOLEAN_FALSE == pMac->scan.fCancelIdleScan) + if((pMac->scan.fScanEnable) && (eANI_BOOLEAN_FALSE == pMac->scan.fCancelIdleScan) /*&& pMac->roam.configParam.impsSleepTime*/) { //Stop get result timer because idle scan gets scan result out of PE @@ -6393,7 +6792,7 @@ eHalStatus csrScanTriggerIdleScan(tpAniSirGlobal pMac, tANI_U32 *pTimeInterval) { *pTimeInterval = 0; } - //Set the restart flag to true because that idle scan + //Set the restart flag to true because that idle scan //can be restarted even though the timer will not be running pMac->scan.fRestartIdleScan = eANI_BOOLEAN_TRUE; } @@ -6634,11 +7033,11 @@ tANI_BOOLEAN csrScanRemoveFreshScanCommand(tpAniSirGlobal pMac, tANI_U8 sessionI pCommand = GET_BASE_ADDR(pEntry, tSmeCmd, Link); if (pCommand->u.scanCmd.callback) { - /* User scan request is pending, + /* User scan request is pending, * send response with status eCSR_SCAN_ABORT*/ - pCommand->u.scanCmd.callback(pMac, - pCommand->u.scanCmd.pContext, - pCommand->u.scanCmd.scanID, + pCommand->u.scanCmd.callback(pMac, + pCommand->u.scanCmd.pContext, + pCommand->u.scanCmd.scanID, eCSR_SCAN_ABORT); } csrReleaseCommandScan( pMac, pCommand ); @@ -6716,10 +7115,12 @@ eHalStatus csrScanGetPMKIDCandidateList(tpAniSirGlobal pMac, tANI_U32 sessionId, tANI_U32 nItems = *pNumItems; *pNumItems = 0; - status = palAllocateMemory(pMac->hHdd, (void **)&pScanFilter, sizeof(tCsrScanResultFilter)); - if(HAL_STATUS_SUCCESS(status)) + pScanFilter = vos_mem_malloc(sizeof(tCsrScanResultFilter)); + if ( NULL == pScanFilter ) + status = eHAL_STATUS_FAILURE; + else { - palZeroMemory(pMac->hHdd, pScanFilter, sizeof(tCsrScanResultFilter)); + vos_mem_set(pScanFilter, sizeof(tCsrScanResultFilter), 0); //Here is the profile we need to connect to status = csrRoamPrepareFilterFromProfile(pMac, pSession->pCurRoamProfile, pScanFilter); if(HAL_STATUS_SUCCESS(status)) @@ -6730,20 +7131,20 @@ eHalStatus csrScanGetPMKIDCandidateList(tpAniSirGlobal pMac, tANI_U32 sessionId, while(((pScanResult = csrScanResultGetNext(pMac, hBSSList)) != NULL) && ( pSession->NumPmkidCandidate < nItems)) { //NumPmkidCandidate adds up here - csrProcessBSSDescForPMKIDList(pMac, &pScanResult->BssDescriptor, + csrProcessBSSDescForPMKIDList(pMac, &pScanResult->BssDescriptor, (tDot11fBeaconIEs *)( pScanResult->pvIes )); } if(pSession->NumPmkidCandidate) { *pNumItems = pSession->NumPmkidCandidate; - palCopyMemory(pMac->hHdd, pPmkidList, pSession->PmkidCandidateInfo, - pSession->NumPmkidCandidate * sizeof(tPmkidCandidateInfo)); + vos_mem_copy(pPmkidList, pSession->PmkidCandidateInfo, + pSession->NumPmkidCandidate * sizeof(tPmkidCandidateInfo)); } csrScanResultPurge(pMac, hBSSList); }//Have scan result csrFreeScanFilter(pMac, pScanFilter); } - palFreeMemory(pMac->hHdd, pScanFilter); + vos_mem_free(pScanFilter); } } @@ -6774,10 +7175,12 @@ eHalStatus csrScanGetBKIDCandidateList(tpAniSirGlobal pMac, tANI_U32 sessionId, tScanResultHandle hBSSList; tANI_U32 nItems = *pNumItems; *pNumItems = 0; - status = palAllocateMemory(pMac->hHdd, (void **)&pScanFilter, sizeof(tCsrScanResultFilter)); - if(HAL_STATUS_SUCCESS(status)) + pScanFilter = vos_mem_malloc(sizeof(tCsrScanResultFilter)); + if ( NULL == pScanFilter ) + status = eHAL_STATUS_FAILURE; + else { - palZeroMemory(pMac->hHdd, pScanFilter, sizeof(tCsrScanResultFilter)); + vos_mem_set(pScanFilter, sizeof(tCsrScanResultFilter), 0); //Here is the profile we need to connect to status = csrRoamPrepareFilterFromProfile(pMac, pSession->pCurRoamProfile, pScanFilter); if(HAL_STATUS_SUCCESS(status)) @@ -6795,12 +7198,12 @@ eHalStatus csrScanGetBKIDCandidateList(tpAniSirGlobal pMac, tANI_U32 sessionId, if(pSession->NumBkidCandidate) { *pNumItems = pSession->NumBkidCandidate; - palCopyMemory(pMac->hHdd, pBkidList, pSession->BkidCandidateInfo, pSession->NumBkidCandidate * sizeof(tBkidCandidateInfo)); + vos_mem_copy(pBkidList, pSession->BkidCandidateInfo, pSession->NumBkidCandidate * sizeof(tBkidCandidateInfo)); } csrScanResultPurge(pMac, hBSSList); }//Have scan result } - palFreeMemory(pMac->hHdd, pScanFilter); + vos_mem_free(pScanFilter); } } @@ -6810,13 +7213,13 @@ eHalStatus csrScanGetBKIDCandidateList(tpAniSirGlobal pMac, tANI_U32 sessionId, -//This function is usually used for BSSs that suppresses SSID so the profile +//This function is usually used for BSSs that suppresses SSID so the profile //shall have one and only one SSID -eHalStatus csrScanForSSID(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamProfile *pProfile, tANI_U32 roamId) +eHalStatus csrScanForSSID(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamProfile *pProfile, tANI_U32 roamId, tANI_BOOLEAN notify) { eHalStatus status = eHAL_STATUS_INVALID_PARAMETER; tSmeCmd *pScanCmd = NULL; - tANI_U8 bAddr[6] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; + tANI_U8 bAddr[6] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; tANI_U8 index = 0; tANI_U32 numSsid = pProfile->SSIDs.numOfSSIDs; @@ -6836,10 +7239,12 @@ eHalStatus csrScanForSSID(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamProfi smsLog(pMac, LOGE, FL("failed to allocate command buffer")); break; } - palZeroMemory(pMac->hHdd, &pScanCmd->u.scanCmd, sizeof(tScanCmd)); - status = palAllocateMemory(pMac->hHdd, (void **)&pScanCmd->u.scanCmd.pToRoamProfile, sizeof(tCsrRoamProfile)); - if(!HAL_STATUS_SUCCESS(status)) - break; + vos_mem_set(&pScanCmd->u.scanCmd, sizeof(tScanCmd), 0); + pScanCmd->u.scanCmd.pToRoamProfile = vos_mem_malloc(sizeof(tCsrRoamProfile)); + if ( NULL == pScanCmd->u.scanCmd.pToRoamProfile ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; status = csrRoamCopyProfile(pMac, pScanCmd->u.scanCmd.pToRoamProfile, pProfile); if(!HAL_STATUS_SUCCESS(status)) break; @@ -6848,9 +7253,9 @@ eHalStatus csrScanForSSID(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamProfi pScanCmd->sessionId = (tANI_U8)sessionId; pScanCmd->u.scanCmd.callback = NULL; pScanCmd->u.scanCmd.pContext = NULL; - pScanCmd->u.scanCmd.reason = eCsrScanForSsid; + pScanCmd->u.scanCmd.reason = eCsrScanForSsid;//Need to check: might need a new reason for SSID scan for LFR during multisession with p2p pScanCmd->u.scanCmd.scanID = pMac->scan.nextScanID++; //let it wrap around - palZeroMemory(pMac->hHdd, &pScanCmd->u.scanCmd.u.scanRequest, sizeof(tCsrScanRequest)); + vos_mem_set(&pScanCmd->u.scanCmd.u.scanRequest, sizeof(tCsrScanRequest), 0); pScanCmd->u.scanCmd.u.scanRequest.scanType = eSIR_ACTIVE_SCAN; pScanCmd->u.scanCmd.u.scanRequest.BSSType = pProfile->BSSType; // To avoid 11b rate in probe request Set p2pSearch flag as 1 for P2P Client Mode @@ -6860,13 +7265,18 @@ eHalStatus csrScanForSSID(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamProfi } if(pProfile->pAddIEScan) { - status = palAllocateMemory(pMac->hHdd, - (void **)&pScanCmd->u.scanCmd.u.scanRequest.pIEField, - pProfile->nAddIEScanLength); - palZeroMemory(pMac->hHdd, pScanCmd->u.scanCmd.u.scanRequest.pIEField, pProfile->nAddIEScanLength); - if(HAL_STATUS_SUCCESS(status)) + pScanCmd->u.scanCmd.u.scanRequest.pIEField = vos_mem_malloc( + pProfile->nAddIEScanLength); + if ( NULL == pScanCmd->u.scanCmd.u.scanRequest.pIEField ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; + vos_mem_set(pScanCmd->u.scanCmd.u.scanRequest.pIEField, + pProfile->nAddIEScanLength, 0); + if (HAL_STATUS_SUCCESS(status)) { - palCopyMemory(pMac->hHdd, pScanCmd->u.scanCmd.u.scanRequest.pIEField, pProfile->pAddIEScan, pProfile->nAddIEScanLength); + vos_mem_copy(pScanCmd->u.scanCmd.u.scanRequest.pIEField, + pProfile->pAddIEScan, pProfile->nAddIEScanLength); pScanCmd->u.scanCmd.u.scanRequest.uIEFieldLen = pProfile->nAddIEScanLength; } else @@ -6886,35 +7296,46 @@ eHalStatus csrScanForSSID(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamProfi } else { - pScanCmd->u.scanCmd.u.scanRequest.maxChnTime = pMac->roam.configParam.nActiveMaxChnTime; - pScanCmd->u.scanCmd.u.scanRequest.minChnTime = pMac->roam.configParam.nActiveMinChnTime; + pScanCmd->u.scanCmd.u.scanRequest.maxChnTime = + pMac->roam.configParam.nActiveMaxChnTime; + pScanCmd->u.scanCmd.u.scanRequest.minChnTime = + pMac->roam.configParam.nActiveMinChnTime; } - pScanCmd->u.scanCmd.u.scanRequest.maxChnTimeBtc = pMac->roam.configParam.nActiveMaxChnTimeBtc; - pScanCmd->u.scanCmd.u.scanRequest.minChnTimeBtc = pMac->roam.configParam.nActiveMinChnTimeBtc; + pScanCmd->u.scanCmd.u.scanRequest.maxChnTimeBtc = + pMac->roam.configParam.nActiveMaxChnTimeBtc; + pScanCmd->u.scanCmd.u.scanRequest.minChnTimeBtc = + pMac->roam.configParam.nActiveMinChnTimeBtc; if(pProfile->BSSIDs.numOfBSSIDs == 1) { - palCopyMemory(pMac->hHdd, pScanCmd->u.scanCmd.u.scanRequest.bssid, pProfile->BSSIDs.bssid, sizeof(tCsrBssid)); + vos_mem_copy(pScanCmd->u.scanCmd.u.scanRequest.bssid, + pProfile->BSSIDs.bssid, sizeof(tCsrBssid)); } else { - palCopyMemory(pMac->hHdd, pScanCmd->u.scanCmd.u.scanRequest.bssid, bAddr, 6); + vos_mem_copy(pScanCmd->u.scanCmd.u.scanRequest.bssid, bAddr, 6); } if(pProfile->ChannelInfo.numOfChannels) { - status = palAllocateMemory(pMac->hHdd, (void **)&pScanCmd->u.scanCmd.u.scanRequest.ChannelInfo.ChannelList, sizeof(*pScanCmd->u.scanCmd.u.scanRequest.ChannelInfo.ChannelList) * pProfile->ChannelInfo.numOfChannels); - pScanCmd->u.scanCmd.u.scanRequest.ChannelInfo.numOfChannels = 0; - if(HAL_STATUS_SUCCESS(status)) + pScanCmd->u.scanCmd.u.scanRequest.ChannelInfo.ChannelList = vos_mem_malloc( + sizeof(*pScanCmd->u.scanCmd.u.scanRequest.ChannelInfo.ChannelList) + * pProfile->ChannelInfo.numOfChannels); + if ( NULL == pScanCmd->u.scanCmd.u.scanRequest.ChannelInfo.ChannelList ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; + pScanCmd->u.scanCmd.u.scanRequest.ChannelInfo.numOfChannels = 0; + if(HAL_STATUS_SUCCESS(status)) { csrRoamIsChannelValid(pMac, pProfile->ChannelInfo.ChannelList[0]); for(index = 0; index < pProfile->ChannelInfo.numOfChannels; index++) { if(csrRoamIsValidChannel(pMac, pProfile->ChannelInfo.ChannelList[index])) { - pScanCmd->u.scanCmd.u.scanRequest.ChannelInfo.ChannelList[pScanCmd->u.scanCmd.u.scanRequest.ChannelInfo.numOfChannels] + pScanCmd->u.scanCmd.u.scanRequest.ChannelInfo.ChannelList[pScanCmd->u.scanCmd.u.scanRequest.ChannelInfo.numOfChannels] = pProfile->ChannelInfo.ChannelList[index]; pScanCmd->u.scanCmd.u.scanRequest.ChannelInfo.numOfChannels++; } - else + else { smsLog(pMac, LOGW, FL("process a channel (%d) that is invalid"), pProfile->ChannelInfo.ChannelList[index]); } @@ -6933,15 +7354,19 @@ eHalStatus csrScanForSSID(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamProfi } if(pProfile->SSIDs.numOfSSIDs) { - status = palAllocateMemory(pMac->hHdd, (void **)&pScanCmd->u.scanCmd.u.scanRequest.SSIDs.SSIDList, - pProfile->SSIDs.numOfSSIDs * sizeof(tCsrSSIDInfo)); + pScanCmd->u.scanCmd.u.scanRequest.SSIDs.SSIDList = vos_mem_malloc( + pProfile->SSIDs.numOfSSIDs * sizeof(tCsrSSIDInfo)); + if ( NULL == pScanCmd->u.scanCmd.u.scanRequest.SSIDs.SSIDList ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; if(!HAL_STATUS_SUCCESS(status)) { break; } pScanCmd->u.scanCmd.u.scanRequest.SSIDs.numOfSSIDs = 1; - palCopyMemory(pMac->hHdd, pScanCmd->u.scanCmd.u.scanRequest.SSIDs.SSIDList, pProfile->SSIDs.SSIDList, - sizeof(tCsrSSIDInfo)); + vos_mem_copy(pScanCmd->u.scanCmd.u.scanRequest.SSIDs.SSIDList, + pProfile->SSIDs.SSIDList, sizeof(tCsrSSIDInfo)); } //Start process the command status = csrQueueSmeCommand(pMac, pScanCmd, eANI_BOOLEAN_FALSE); @@ -6958,15 +7383,18 @@ eHalStatus csrScanForSSID(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamProfi csrReleaseCommandScan(pMac, pScanCmd); //TODO:free the memory that is allocated in this function } + if(notify) + { csrRoamCallCallback(pMac, sessionId, NULL, roamId, eCSR_ROAM_FAILED, eCSR_ROAM_RESULT_FAILURE); } + } }//valid else { smsLog(pMac, LOGE, FL("cannot scan because scanEnable (%d) or numSSID (%d) is invalid"), pMac->scan.fScanEnable, pProfile->SSIDs.numOfSSIDs); } - + return (status); } @@ -6990,10 +7418,10 @@ eHalStatus csrScanForCapabilityChange(tpAniSirGlobal pMac, tSirSmeApNewCaps *pNe status = eHAL_STATUS_RESOURCES; break; } - palZeroMemory(pMac->hHdd, &pScanCmd->u.scanCmd, sizeof(tScanCmd)); + vos_mem_set(&pScanCmd->u.scanCmd, sizeof(tScanCmd), 0); status = eHAL_STATUS_SUCCESS; pScanCmd->u.scanCmd.roamId = 0; - pScanCmd->command = eSmeCommandScan; + pScanCmd->command = eSmeCommandScan; pScanCmd->u.scanCmd.callback = NULL; pScanCmd->u.scanCmd.pContext = NULL; pScanCmd->u.scanCmd.reason = eCsrScanForCapsChange; @@ -7011,7 +7439,7 @@ eHalStatus csrScanForCapabilityChange(tpAniSirGlobal pMac, tSirSmeApNewCaps *pNe { csrReleaseCommandScan(pMac, pScanCmd); } - } + } } return (status); @@ -7023,20 +7451,21 @@ void csrInitBGScanChannelList(tpAniSirGlobal pMac) { tANI_U32 len = CSR_MIN(sizeof(pMac->roam.validChannelList), sizeof(pMac->scan.bgScanChannelList)); - palZeroMemory(pMac->hHdd, pMac->scan.bgScanChannelList, len); + vos_mem_set(pMac->scan.bgScanChannelList, len, 0); pMac->scan.numBGScanChannel = 0; if(HAL_STATUS_SUCCESS(csrGetCfgValidChannels(pMac, pMac->roam.validChannelList, &len))) { pMac->roam.numValidChannels = len; pMac->scan.numBGScanChannel = (tANI_U8)CSR_MIN(len, WNI_CFG_BG_SCAN_CHANNEL_LIST_LEN); - palCopyMemory(pMac->hHdd, pMac->scan.bgScanChannelList, pMac->roam.validChannelList, pMac->scan.numBGScanChannel); + vos_mem_copy(pMac->scan.bgScanChannelList, pMac->roam.validChannelList, + pMac->scan.numBGScanChannel); csrSetBGScanChannelList(pMac, pMac->scan.bgScanChannelList, pMac->scan.numBGScanChannel); } } -//This function return TRUE if background scan channel list is adjusted. +//This function return TRUE if background scan channel list is adjusted. //this function will only shrink the background scan channel list tANI_BOOLEAN csrAdjustBGScanChannelList(tpAniSirGlobal pMac, tANI_U8 *pChannelList, tANI_U8 NumChannels, tANI_U8 *pAdjustChannels, tANI_U8 *pNumAdjustChannels) @@ -7059,7 +7488,7 @@ tANI_BOOLEAN csrAdjustBGScanChannelList(tpAniSirGlobal pMac, tANI_U8 *pChannelLi count--; if(count - i) { - palCopyMemory(pMac->hHdd, &pAdjustChannels[i], &pAdjustChannels[i+1], count - i); + vos_mem_copy(&pAdjustChannels[i], &pAdjustChannels[i+1], count - i); } else { @@ -7094,7 +7523,7 @@ eHalStatus csrScanGetSupportedChannels( tpAniSirGlobal pMac ) smsLog( pMac, LOGE, FL(" failed") ); pMac->scan.baseChannels.numChannels = 0; } - + return ( status ); } @@ -7144,9 +7573,9 @@ void csrSaveTxPowerToCfg( tpAniSirGlobal pMac, tDblLinkList *pList, tANI_U32 cfg //allocate maximum space for all channels dataLen = WNI_CFG_VALID_CHANNEL_LIST_LEN * sizeof(tSirMacChanInfo); - if(HAL_STATUS_SUCCESS(palAllocateMemory(pMac->hHdd, (void **)&pBuf, dataLen))) + if ( (pBuf = vos_mem_malloc(dataLen)) != NULL ) { - palZeroMemory(pMac->hHdd, pBuf, dataLen); + vos_mem_set(pBuf, dataLen, 0); pChannelPowerSet = (tSirMacChanInfo *)(pBuf); pEntry = csrLLPeekHead( pList, LL_ACCESS_LOCK ); @@ -7211,9 +7640,9 @@ void csrSaveTxPowerToCfg( tpAniSirGlobal pMac, tDblLinkList *pList, tANI_U32 cfg if(cbLen) { - ccmCfgSetStr(pMac, cfgId, (tANI_U8 *)pBuf, cbLen, NULL, eANI_BOOLEAN_FALSE); + ccmCfgSetStr(pMac, cfgId, (tANI_U8 *)pBuf, cbLen, NULL, eANI_BOOLEAN_FALSE); } - palFreeMemory( pMac->hHdd, pBuf ); + vos_mem_free(pBuf); }//Allocate memory } @@ -7222,9 +7651,9 @@ void csrSetCfgCountryCode( tpAniSirGlobal pMac, tANI_U8 *countryCode ) { tANI_U8 cc[WNI_CFG_COUNTRY_CODE_LEN]; ///v_REGDOMAIN_t DomainId; - + smsLog( pMac, LOG3, "Setting Country Code in Cfg from csrSetCfgCountryCode %s",countryCode ); - palCopyMemory( pMac->hHdd, cc, countryCode, WNI_CFG_COUNTRY_CODE_LEN ); + vos_mem_copy(cc, countryCode, WNI_CFG_COUNTRY_CODE_LEN); // don't program the bogus country codes that we created for Korea in the MAC. if we see // the bogus country codes, program the MAC with the right country code. @@ -7238,7 +7667,7 @@ void csrSetCfgCountryCode( tpAniSirGlobal pMac, tANI_U8 *countryCode ) } ccmCfgSetStr(pMac, WNI_CFG_COUNTRY_CODE, cc, WNI_CFG_COUNTRY_CODE_LEN, NULL, eANI_BOOLEAN_FALSE); - //Need to let HALPHY know about the current domain so it can apply some + //Need to let HALPHY know about the current domain so it can apply some //domain-specific settings (TX filter...) /*if(HAL_STATUS_SUCCESS(csrGetRegulatoryDomainForCountry(pMac, cc, &DomainId))) { @@ -7262,53 +7691,45 @@ eHalStatus csrGetCountryCode(tpAniSirGlobal pMac, tANI_U8 *pBuf, tANI_U8 *pbLen) *pbLen = (tANI_U8)len; } } - + return (status); } void csrSetCfgScanControlList( tpAniSirGlobal pMac, tANI_U8 *countryCode, tCsrChannel *pChannelList ) -{ +{ tANI_U8 i, j; - tANI_BOOLEAN found=FALSE; + tANI_BOOLEAN found=FALSE; tANI_U8 *pControlList = NULL; tANI_U32 len = WNI_CFG_SCAN_CONTROL_LIST_LEN; - if(HAL_STATUS_SUCCESS(palAllocateMemory(pMac->hHdd, (void **)&pControlList, WNI_CFG_SCAN_CONTROL_LIST_LEN))) + if ( (pControlList = vos_mem_malloc(WNI_CFG_SCAN_CONTROL_LIST_LEN)) != NULL ) { - palZeroMemory(pMac->hHdd, (void *)pControlList, WNI_CFG_SCAN_CONTROL_LIST_LEN); + vos_mem_set((void *)pControlList, WNI_CFG_SCAN_CONTROL_LIST_LEN, 0); if(HAL_STATUS_SUCCESS(ccmCfgGetStr(pMac, WNI_CFG_SCAN_CONTROL_LIST, pControlList, &len))) { for (i = 0; i < pChannelList->numChannels; i++) { - for (j = 0; j < len; j += 2) + for (j = 0; j < len; j += 2) { - if (pControlList[j] == pChannelList->channelList[i]) + if (pControlList[j] == pChannelList->channelList[i]) { found = TRUE; break; } } - + if (found) // insert a pair(channel#, flag) { - if (CSR_IS_CHANNEL_5GHZ(pControlList[j])) - { - pControlList[j+1] = csrGetScanType(pMac, pControlList[j]); - } - else - { - pControlList[j+1] = eSIR_ACTIVE_SCAN; - } - + pControlList[j+1] = csrGetScanType(pMac, pControlList[j]); found = FALSE; // reset the flag } - - } + + } ccmCfgSetStr(pMac, WNI_CFG_SCAN_CONTROL_LIST, pControlList, len, NULL, eANI_BOOLEAN_FALSE); }//Successfully getting scan control list - palFreeMemory(pMac->hHdd, pControlList); + vos_mem_free(pControlList); }//AllocateMemory } @@ -7318,7 +7739,7 @@ eHalStatus csrSetCfgBackgroundScanPeriod(tpAniSirGlobal pMac, tANI_U32 bgPeriod) { return (ccmCfgSetInt(pMac, WNI_CFG_BACKGROUND_SCAN_PERIOD, bgPeriod, (tCcmCfgSetCallback) csrScanCcmCfgSetCallback, eANI_BOOLEAN_FALSE)); } - + void csrScanCcmCfgSetCallback(tHalHandle hHal, tANI_S32 result) { @@ -7345,7 +7766,7 @@ void csrScanCcmCfgSetCallback(tHalHandle hHal, tANI_S32 result) { smsLog( pMac, LOGW, "CSR: Scan Completion called but SCAN command is not ACTIVE ..." ); } - } + } smeProcessPendingQueue( pMac ); } @@ -7354,7 +7775,7 @@ eHalStatus csrProcessSetBGScanParam(tpAniSirGlobal pMac, tSmeCmd *pCommand) eHalStatus status; tCsrBGScanRequest *pScanReq = &pCommand->u.scanCmd.u.bgScanRequest; tANI_U32 dataLen = sizeof( tANI_U8 ) * pScanReq->ChannelInfo.numOfChannels; - + //***setcfg for background scan channel list status = ccmCfgSetInt(pMac, WNI_CFG_ACTIVE_MINIMUM_CHANNEL_TIME, pScanReq->minChnTime, NULL, eANI_BOOLEAN_FALSE); status = ccmCfgSetInt(pMac, WNI_CFG_ACTIVE_MAXIMUM_CHANNEL_TIME, pScanReq->maxChnTime, NULL, eANI_BOOLEAN_FALSE); @@ -7382,8 +7803,9 @@ eHalStatus csrProcessSetBGScanParam(tpAniSirGlobal pMac, tSmeCmd *pCommand) pScanLog->numChannel = pScanReq->ChannelInfo.numOfChannels; if(pScanLog->numChannel && (pScanLog->numChannel < VOS_LOG_MAX_NUM_CHANNEL)) { - palCopyMemory(pMac->hHdd, pScanLog->channels, pScanReq->ChannelInfo.ChannelList, - pScanLog->numChannel); + vos_mem_copy(pScanLog->channels, + pScanReq->ChannelInfo.ChannelList, + pScanLog->numChannel); } WLAN_VOS_DIAG_LOG_REPORT(pScanLog); } @@ -7397,12 +7819,12 @@ eHalStatus csrProcessSetBGScanParam(tpAniSirGlobal pMac, tSmeCmd *pCommand) //No need to stop aging because IDLE scan is still running status = ccmCfgSetInt(pMac, WNI_CFG_BACKGROUND_SCAN_PERIOD, 0, NULL, eANI_BOOLEAN_FALSE); } - + if(pScanReq->SSID.length > WNI_CFG_SSID_LEN) { pScanReq->SSID.length = WNI_CFG_SSID_LEN; } - + status = ccmCfgSetStr(pMac, WNI_CFG_BG_SCAN_CHANNEL_LIST, pScanReq->ChannelInfo.ChannelList, dataLen, NULL, eANI_BOOLEAN_FALSE); status = ccmCfgSetStr(pMac, WNI_CFG_SSID, (tANI_U8 *)pScanReq->SSID.ssId, pScanReq->SSID.length, NULL, eANI_BOOLEAN_FALSE); @@ -7462,18 +7884,20 @@ eHalStatus csrScanAbortMacScan(tpAniSirGlobal pMac, tANI_U8 sessionId) pCommand->sessionId == sessionId) { msgLen = (tANI_U16)(sizeof(tSirSmeScanAbortReq)); - status = palAllocateMemory(pMac->hHdd, (void **)&pMsg, msgLen); - if(HAL_STATUS_SUCCESS(status)) + pMsg = vos_mem_malloc(msgLen); + if ( NULL == pMsg ) + { + status = eHAL_STATUS_FAILURE; + smsLog(pMac, LOGE, FL("Failed to allocate memory for SmeScanAbortReq")); + } + else { - palZeroMemory(pMac->hHdd, (void *)pMsg, msgLen); + vos_mem_set((void *)pMsg, msgLen, 0); pMsg->type = pal_cpu_to_be16((tANI_U16)eWNI_SME_SCAN_ABORT_IND); pMsg->msgLen = pal_cpu_to_be16(msgLen); pMsg->sessionId = sessionId; status = palSendMBMessage(pMac->hHdd, pMsg); } - else - smsLog(pMac, LOGE, FL("Failed to allocate memory for" - " SmeScanAbortReq")); } } @@ -7608,16 +8032,18 @@ eHalStatus csrScanGetScanChannelInfo(tpAniSirGlobal pMac, tANI_U8 sessionId) else msgLen = (tANI_U16)(sizeof(tSirMbMsg)); - status = palAllocateMemory(pMac->hHdd, (void **)&pMsg, msgLen); - if(HAL_STATUS_SUCCESS(status)) + pMsg = vos_mem_malloc(msgLen); + if ( NULL == pMsg ) + status = eHAL_STATUS_FAILURE; + else { - palZeroMemory(pMac->hHdd, pMsg, msgLen); + vos_mem_set(pMsg, msgLen, 0); pMsg->type = eWNI_SME_GET_SCANNED_CHANNEL_REQ; pMsg->msgLen = msgLen; if (pMac->fScanOffload) ((tSirSmeGetScanChanReq *)pMsg)->sessionId = sessionId; status = palSendMBMessage(pMac->hHdd, pMsg); - } + } return( status ); } @@ -7627,7 +8053,7 @@ tANI_BOOLEAN csrRoamIsValidChannel( tpAniSirGlobal pMac, tANI_U8 channel ) tANI_BOOLEAN fValid = FALSE; tANI_U32 idxValidChannels; tANI_U32 len = pMac->roam.numValidChannels; - + for ( idxValidChannels = 0; ( idxValidChannels < len ); idxValidChannels++ ) { if ( channel == pMac->roam.validChannelList[ idxValidChannels ] ) @@ -7636,7 +8062,7 @@ tANI_BOOLEAN csrRoamIsValidChannel( tpAniSirGlobal pMac, tANI_U8 channel ) break; } } - + return fValid; } @@ -7653,7 +8079,9 @@ void csrMoveToScanStateForPno( tpAniSirGlobal pMac, tANI_U8 sessionId ) pSession->lastRoamStateBeforePno = csrRoamStateChange(pMac, eCSR_ROAMING_STATE_SCANNING, sessionId); } +#endif +#ifdef FEATURE_WLAN_SCAN_PNO eHalStatus csrScanSavePreferredNetworkFound(tpAniSirGlobal pMac, tSirPrefNetworkFoundInd *pPrefNetworkFoundInd) { @@ -7668,7 +8096,7 @@ eHalStatus csrScanSavePreferredNetworkFound(tpAniSirGlobal pMac, tpSirMacMgmtHdr macHeader = (tpSirMacMgmtHdr)pPrefNetworkFoundInd->data; pParsedFrame = - (tpSirProbeRespBeacon) vos_mem_malloc(sizeof(tSirProbeRespBeacon)); + (tpSirProbeRespBeacon)vos_mem_malloc(sizeof(tSirProbeRespBeacon)); if (NULL == pParsedFrame) { @@ -7705,15 +8133,15 @@ eHalStatus csrScanSavePreferredNetworkFound(tpAniSirGlobal pMac, (SIR_MAC_HDR_LEN_3A + SIR_MAC_B_PR_SSID_OFFSET); } - if ( !HAL_STATUS_SUCCESS(palAllocateMemory( pMac->hHdd, - (void **)&pScanResult, sizeof(tCsrScanResult) + uLen )) ) + pScanResult = vos_mem_malloc(sizeof(tCsrScanResult) + uLen); + if ( NULL == pScanResult ) { smsLog(pMac, LOGE, FL(" fail to allocate memory for frame")); vos_mem_free(pParsedFrame); return eHAL_STATUS_RESOURCES; } - palZeroMemory( pMac->hHdd, pScanResult, sizeof(tCsrScanResult) + uLen ); + vos_mem_set(pScanResult, sizeof(tCsrScanResult) + uLen, 0); pBssDescr = &pScanResult->Result.BssDescriptor; /** * Length of BSS desription is without length of @@ -7767,9 +8195,7 @@ eHalStatus csrScanSavePreferredNetworkFound(tpAniSirGlobal pMac, pBssDescr->timeStamp[0] = pParsedFrame->timeStamp[0]; pBssDescr->timeStamp[1] = pParsedFrame->timeStamp[1]; pBssDescr->capabilityInfo = *((tANI_U16 *)&pParsedFrame->capabilityInfo); - palCopyMemory( pMac->hHdd, (tANI_U8 *) &pBssDescr->bssId, - (tANI_U8 *) macHeader->bssId, - sizeof(tSirMacAddr)); + vos_mem_copy((tANI_U8 *) &pBssDescr->bssId, (tANI_U8 *) macHeader->bssId, sizeof(tSirMacAddr)); pBssDescr->nReceivedTime = (tANI_TIMESTAMP)palGetTickCount(pMac->hHdd); smsLog( pMac, LOG2, "(%s):Bssid= %02x-%02x-%02x-%02x-%02x-%02x " @@ -7783,10 +8209,9 @@ eHalStatus csrScanSavePreferredNetworkFound(tpAniSirGlobal pMac, //IEs if (uLen) { - vos_mem_copy( &pBssDescr->ieFields, - pPrefNetworkFoundInd->data + - (SIR_MAC_HDR_LEN_3A + SIR_MAC_B_PR_SSID_OFFSET), - uLen); + vos_mem_copy(&pBssDescr->ieFields, + pPrefNetworkFoundInd->data + (SIR_MAC_HDR_LEN_3A + SIR_MAC_B_PR_SSID_OFFSET), + uLen); } pIesLocal = (tDot11fBeaconIEs *)( pScanResult->Result.pvIes ); @@ -7801,7 +8226,7 @@ eHalStatus csrScanSavePreferredNetworkFound(tpAniSirGlobal pMac, } fDupBss = csrRemoveDupBssDescription( pMac, - &pScanResult->Result.BssDescriptor, pIesLocal, &tmpSsid , &timer); + &pScanResult->Result.BssDescriptor, pIesLocal, &tmpSsid, &timer, FALSE); //Check whether we have reach out limit if ( CSR_SCAN_IS_OVER_BSS_LIMIT(pMac) ) { @@ -7810,7 +8235,7 @@ eHalStatus csrScanSavePreferredNetworkFound(tpAniSirGlobal pMac, //Free the resources if( (pScanResult->Result.pvIes == NULL) && pIesLocal ) { - palFreeMemory(pMac->hHdd, pIesLocal); + vos_mem_free(pIesLocal); } csrFreeScanResultEntry(pMac, pScanResult); vos_mem_free(pParsedFrame); @@ -7819,11 +8244,16 @@ eHalStatus csrScanSavePreferredNetworkFound(tpAniSirGlobal pMac, //Add to scan cache csrScanAddResult(pMac, pScanResult, pIesLocal); + if( (pScanResult->Result.pvIes == NULL) && pIesLocal ) + { + vos_mem_free(pIesLocal); + } + vos_mem_free(pParsedFrame); return eHAL_STATUS_SUCCESS; } -#endif +#endif //FEATURE_WLAN_SCAN_PNO #ifdef FEATURE_WLAN_LFR void csrInitOccupiedChannelsList(tpAniSirGlobal pMac) @@ -7860,7 +8290,7 @@ void csrInitOccupiedChannelsList(tpAniSirGlobal pMac) pIes = (tDot11fBeaconIEs *)( pBssDesc->Result.pvIes ); //At this time, pBssDescription->Result.pvIes may be NULL - if( !pIes && (!HAL_STATUS_SUCCESS(csrGetParsedBssDescriptionIEs(pMac, + if( !pIes && (!HAL_STATUS_SUCCESS(csrGetParsedBssDescriptionIEs(pMac, &pBssDesc->Result.BssDescriptor, &pIes))) ) { continue; @@ -7873,13 +8303,115 @@ void csrInitOccupiedChannelsList(tpAniSirGlobal pMac) */ if( (pBssDesc->Result.pvIes == NULL) && pIes ) { - palFreeMemory(pMac->hHdd, pIes); + vos_mem_free(pIes); } pEntry = csrLLNext( &pMac->scan.scanResultList, pEntry, LL_ACCESS_NOLOCK ); }//while csrLLUnlock(&pMac->scan.scanResultList); + +} +#endif + +eHalStatus csrScanCreateEntryInScanCache(tpAniSirGlobal pMac, tANI_U32 sessionId, + tCsrBssid bssid, tANI_U8 channel) +{ + eHalStatus status = eHAL_STATUS_SUCCESS; + tDot11fBeaconIEs *pNewIes = NULL; + tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, sessionId ); + tSirBssDescription *pNewBssDescriptor = NULL; + tANI_U32 size = 0; + + if(NULL == pSession) + { + status = eHAL_STATUS_FAILURE; + return status; + } + smsLog(pMac, LOG2, FL("csrScanCreateEntryInScanCache: Current bssid::" + "0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x"), + pSession->pConnectBssDesc->bssId[0], + pSession->pConnectBssDesc->bssId[1], + pSession->pConnectBssDesc->bssId[2], + pSession->pConnectBssDesc->bssId[3], + pSession->pConnectBssDesc->bssId[4], + pSession->pConnectBssDesc->bssId[5]); + smsLog(pMac, LOG2, FL("csrScanCreateEntryInScanCache: My bssid::" + "0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x channel %d"), + bssid[0],bssid[1],bssid[2], + bssid[3],bssid[4],bssid[5],channel); + do + { + if(!HAL_STATUS_SUCCESS(csrGetParsedBssDescriptionIEs(pMac, + pSession->pConnectBssDesc, &pNewIes))) + { + smsLog(pMac, LOGE, FL("%s: Failed to parse IEs"), + __func__); + status = eHAL_STATUS_FAILURE; + break; + } + + size = pSession->pConnectBssDesc->length + sizeof(pSession->pConnectBssDesc->length); + if (size) + { + pNewBssDescriptor = vos_mem_malloc(size); + if ( NULL == pNewBssDescriptor ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; + if (HAL_STATUS_SUCCESS(status)) + { + vos_mem_copy(pNewBssDescriptor, pSession->pConnectBssDesc, size); + } + else + { + smsLog(pMac, LOGE, FL("%s: memory allocation failed"), + __func__); + status = eHAL_STATUS_FAILURE; + break; + } + + //change the BSSID & channel as passed + vos_mem_copy(pNewBssDescriptor->bssId, bssid, sizeof(tSirMacAddr)); + pNewBssDescriptor->channelId = channel; + if(NULL == csrScanAppendBssDescription( pMac, pNewBssDescriptor, pNewIes, TRUE )) + { + smsLog(pMac, LOGE, FL("%s: csrScanAppendBssDescription failed"), + __func__); + status = eHAL_STATUS_FAILURE; + break; + } + } + else + { + smsLog(pMac, LOGE, FL("%s: length of bss descriptor is 0"), + __func__); + status = eHAL_STATUS_FAILURE; + break; + } + smsLog(pMac, LOGE, FL("%s: entry successfully added in scan cache"), + __func__); + }while(0); + + if(pNewIes) + { + vos_mem_free(pNewIes); + } + if(pNewBssDescriptor) + { + vos_mem_free(pNewBssDescriptor); + } + return status; +} + +#ifdef FEATURE_WLAN_CCX +// Update the TSF with the difference in system time +void UpdateCCKMTSF(tANI_U32 *timeStamp0, tANI_U32 *timeStamp1, tANI_U32 *incr) +{ + tANI_U64 timeStamp64 = ((tANI_U64)*timeStamp1 << 32) | (*timeStamp0); + timeStamp64 = (tANI_U64)(timeStamp64 + (tANI_U64)*incr); + *timeStamp0 = (tANI_U32)(timeStamp64 & 0xffffffff); + *timeStamp1 = (tANI_U32)((timeStamp64 >> 32) & 0xffffffff); } #endif diff --git a/CORE/SME/src/csr/csrCmdProcess.c b/CORE/SME/src/csr/csrCmdProcess.c index 100aca73748b..41d5f26fc06e 100644 --- a/CORE/SME/src/csr/csrCmdProcess.c +++ b/CORE/SME/src/csr/csrCmdProcess.c @@ -171,3 +171,5 @@ void csrFullPowerOffloadCallback(void *pv, tANI_U32 sessionId, eHalStatus status } } + + diff --git a/CORE/SME/src/csr/csrInsideApi.h b/CORE/SME/src/csr/csrInsideApi.h index bdfc9cfac5ca..b1d545ec5bc4 100644 --- a/CORE/SME/src/csr/csrInsideApi.h +++ b/CORE/SME/src/csr/csrInsideApi.h @@ -62,7 +62,8 @@ #define CSR_REST_TIME_CONC 100 -#define CSR_NUM_CHAN_COMBINED_CONC 1 +#define CSR_NUM_STA_CHAN_COMBINED_CONC 3 +#define CSR_NUM_P2P_CHAN_COMBINED_CONC 1 #endif #define CSR_MAX_NUM_SUPPORTED_CHANNELS 55 @@ -70,6 +71,7 @@ #define CSR_MAX_2_4_GHZ_SUPPORTED_CHANNELS 14 #define CSR_MAX_BSS_SUPPORT 250 +#define SYSTEM_TIME_MSEC_TO_USEC 1000 //This number minus 1 means the number of times a channel is scanned before a BSS is remvoed from //cache scan result @@ -210,7 +212,7 @@ void csrReleaseCommandScan(tpAniSirGlobal pMac, tSmeCmd *pCommand); void csrReleaseCommandWmStatusChange(tpAniSirGlobal pMac, tSmeCmd *pCommand); //pIes2 can be NULL tANI_BOOLEAN csrIsDuplicateBssDescription( tpAniSirGlobal pMac, tSirBssDescription *pSirBssDesc1, - tSirBssDescription *pSirBssDesc2, tDot11fBeaconIEs *pIes2 ); + tSirBssDescription *pSirBssDesc2, tDot11fBeaconIEs *pIes2, tANI_BOOLEAN fForced ); eHalStatus csrRoamSaveConnectedBssDesc( tpAniSirGlobal pMac, tANI_U32 sessionId, tSirBssDescription *pBssDesc ); tANI_BOOLEAN csrIsNetworkTypeEqual( tSirBssDescription *pSirBssDesc1, tSirBssDescription *pSirBssDesc2 ); eHalStatus csrScanSmeScanResponse( tpAniSirGlobal pMac, void *pMsgBuf ); @@ -238,13 +240,13 @@ eHalStatus csrScanHandleFailedLostlink2(tpAniSirGlobal pMac, tANI_U32 sessionId) eHalStatus csrScanHandleFailedLostlink3(tpAniSirGlobal pMac, tANI_U32 sessionId); tCsrScanResult *csrScanAppendBssDescription( tpAniSirGlobal pMac, tSirBssDescription *pSirBssDescription, - tDot11fBeaconIEs *pIes); + tDot11fBeaconIEs *pIes, tANI_BOOLEAN fForced); void csrScanCallCallback(tpAniSirGlobal pMac, tSmeCmd *pCommand, eCsrScanStatus scanStatus); eHalStatus csrScanCopyRequest(tpAniSirGlobal pMac, tCsrScanRequest *pDstReq, tCsrScanRequest *pSrcReq); eHalStatus csrScanFreeRequest(tpAniSirGlobal pMac, tCsrScanRequest *pReq); eHalStatus csrScanCopyResultList(tpAniSirGlobal pMac, tScanResultHandle hIn, tScanResultHandle *phResult); void csrInitBGScanChannelList(tpAniSirGlobal pMac); -eHalStatus csrScanForSSID(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamProfile *pProfile, tANI_U32 roamId); +eHalStatus csrScanForSSID(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamProfile *pProfile, tANI_U32 roamId, tANI_BOOLEAN notify); eHalStatus csrScanForCapabilityChange(tpAniSirGlobal pMac, tSirSmeApNewCaps *pNewCaps); eHalStatus csrScanStartGetResultTimer(tpAniSirGlobal pMac); eHalStatus csrScanStopGetResultTimer(tpAniSirGlobal pMac); @@ -377,7 +379,7 @@ tANI_U32 csrTranslateToWNICfgDot11Mode(tpAniSirGlobal pMac, eCsrCfgDot11Mode csr void csrSaveChannelPowerForBand( tpAniSirGlobal pMac, tANI_BOOLEAN fPopulate5GBand ); void csrApplyChannelPowerCountryInfo( tpAniSirGlobal pMac, tCsrChannel *pChannelList, tANI_U8 *countryCode, tANI_BOOLEAN updateRiva); void csrApplyPower2Current( tpAniSirGlobal pMac ); -void csrAssignRssiForCategory(tpAniSirGlobal pMac, tANI_U8 catOffset); +void csrAssignRssiForCategory(tpAniSirGlobal pMac, tANI_S8 bestApRssi, tANI_U8 catOffset); tANI_BOOLEAN csrIsMacAddressZero( tpAniSirGlobal pMac, tCsrBssid *pMacAddr ); tANI_BOOLEAN csrIsMacAddressBroadcast( tpAniSirGlobal pMac, tCsrBssid *pMacAddr ); eHalStatus csrRoamRemoveConnectedBssFromScanCache(tpAniSirGlobal pMac, tCsrRoamConnectedProfile *pConnProfile); @@ -404,9 +406,11 @@ eHalStatus csrScanGetSupportedChannels( tpAniSirGlobal pMac ); //pIes cannot be NULL tANI_BOOLEAN csrMatchCountryCode( tpAniSirGlobal pMac, tANI_U8 *pCountry, tDot11fBeaconIEs *pIes ); eHalStatus csrRoamSetKey( tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamSetKey *pSetKey, tANI_U32 roamId ); -eHalStatus csrRoamOpenSession( tpAniSirGlobal pMac, csrRoamCompleteCallback callback, void *pContext, - tANI_U8 *pSelfMacAddr, tANI_U8 *pbSessionId, - tANI_U32 type, tANI_U32 subType ); +eHalStatus csrRoamOpenSession(tpAniSirGlobal pMac, + csrRoamCompleteCallback callback, + void *pContext, + tANI_U8 *pSelfMacAddr, tANI_U8 *pbSessionId, + tANI_U32 type, tANI_U32 subType ); //fSync: TRUE means cleanupneeds to handle synchronously. eHalStatus csrRoamCloseSession( tpAniSirGlobal pMac, tANI_U32 sessionId, tANI_BOOLEAN fSync, @@ -565,9 +569,13 @@ v_REGDOMAIN_t csrGetCurrentRegulatoryDomain(tpAniSirGlobal pMac); CSR. \param pCountry - Caller allocated buffer with at least 3 bytes specifying the country code \param pDomainId - Caller allocated buffer to get the return domain ID upon success return. Can be NULL. + \param source - the source of country information. \return eHalStatus -------------------------------------------------------------------------------*/ -eHalStatus csrGetRegulatoryDomainForCountry(tpAniSirGlobal pMac, tANI_U8 *pCountry, v_REGDOMAIN_t *pDomainId); +eHalStatus csrGetRegulatoryDomainForCountry(tpAniSirGlobal pMac, + tANI_U8 *pCountry, + v_REGDOMAIN_t *pDomainId, + v_CountryInfoSource_t source); tANI_BOOLEAN csrSave11dCountryString( tpAniSirGlobal pMac, tANI_U8 *pCountryCode, tANI_BOOLEAN fForce ); @@ -945,10 +953,14 @@ eHalStatus csrRoamStopJoinRetryTimer(tpAniSirGlobal pMac, tANI_U32 sessionId); void csrRoamFTPreAuthRspProcessor( tHalHandle hHal, tpSirFTPreAuthRsp pFTPreAuthRsp ); #endif -#ifdef FEATURE_WLAN_CCX +#if defined(FEATURE_WLAN_CCX) && !defined(FEATURE_WLAN_CCX_UPLOAD) void csrCcxSendAdjacentApRepMsg(tpAniSirGlobal pMac, tCsrRoamSession *pSession); #endif +#if defined(FEATURE_WLAN_CCX) +void UpdateCCKMTSF(tANI_U32 *timeStamp0, tANI_U32 *timeStamp1, tANI_U32 *incr); +#endif + eHalStatus csrGetDefaultCountryCodeFrmNv(tpAniSirGlobal pMac, tANI_U8 *pCountry); eHalStatus csrGetCurrentCountryCode(tpAniSirGlobal pMac, tANI_U8 *pCountry); @@ -964,6 +976,9 @@ tANI_BOOLEAN csrNeighborRoamConnectedProfileMatch(tpAniSirGlobal pMac, tCsrScanR #endif eHalStatus csrSetTxPower(tpAniSirGlobal pMac, v_U8_t sessionId, v_U8_t mW); +eHalStatus csrScanCreateEntryInScanCache(tpAniSirGlobal pMac, tANI_U32 sessionId, + tCsrBssid bssid, tANI_U8 channel); + eHalStatus csrUpdateChannelList(tCsrScanStruct *pScan); eHalStatus csrRoamDelPMKIDfromCache( tpAniSirGlobal pMac, tANI_U32 sessionId, tANI_U8 *pBSSId ); diff --git a/CORE/SME/src/csr/csrLinkList.c b/CORE/SME/src/csr/csrLinkList.c index b7482d1b127b..a2f1422de400 100644 --- a/CORE/SME/src/csr/csrLinkList.c +++ b/CORE/SME/src/csr/csrLinkList.c @@ -31,7 +31,6 @@ Implementation for the Common link list interfaces. - Copyright (C) 2006 Airgo Networks, Incorporated ========================================================================== */ @@ -40,6 +39,8 @@ #include "vos_lock.h" #include "vos_memory.h" #include "vos_trace.h" +#include "vos_timer.h" + ANI_INLINE_FUNCTION void csrListInit(tListElem *pList) { @@ -260,7 +261,7 @@ eHalStatus csrLLOpen( tHddHandle hHdd, tDblLinkList *pList ) if ( LIST_FLAG_OPEN != pList->Flag ) { pList->Count = 0; - + pList->cmdTimeoutTimer = NULL; vosStatus = vos_lock_init(&pList->Lock); if(VOS_IS_STATUS_SUCCESS(vosStatus)) @@ -340,6 +341,12 @@ void csrLLInsertHead( tDblLinkList *pList, tListElem *pEntry, tANI_BOOLEAN fInte { csrLLUnlock(pList); } + if ( pList->cmdTimeoutTimer && pList->cmdTimeoutDuration ) + { + /* timer to detect pending command in activelist*/ + vos_timer_start( pList->cmdTimeoutTimer, + pList->cmdTimeoutDuration); + } } } @@ -569,6 +576,10 @@ tANI_BOOLEAN csrLLRemoveEntry( tDblLinkList *pList, tListElem *pEntryToRemove, t { csrLLUnlock( pList ); } + if ( pList->cmdTimeoutTimer ) + { + vos_timer_stop(pList->cmdTimeoutTimer); + } } return( fFound ); diff --git a/CORE/SME/src/csr/csrLogDump.c b/CORE/SME/src/csr/csrLogDump.c index a93e00bf6ef1..9885ade7acb9 100644 --- a/CORE/SME/src/csr/csrLogDump.c +++ b/CORE/SME/src/csr/csrLogDump.c @@ -46,11 +46,11 @@ dump_csr( tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3, tANI static tCsrRoamProfile x; static tSirMacSSid ssid; //To be allocated for array of SSIDs static tANI_U8 sessionId; // Defined for fixed session ID - palZeroMemory(pMac->hHdd, (void*)&x, sizeof(x)); + vos_mem_set((void*)&x, sizeof(x), 0); x.SSIDs.numOfSSIDs=1 ; x.SSIDs.SSIDList[0].SSID = ssid ; ssid.length=6 ; - palCopyMemory(pMac->hHdd, ssid.ssId, "AniNet", 6); + vos_mem_copy(ssid.ssId, "AniNet", 6); if(HAL_STATUS_SUCCESS(sme_AcquireGlobalLock( &pMac->sme ))) { (void)csrRoamConnect(pMac, sessionId, &x, NULL, NULL); diff --git a/CORE/SME/src/csr/csrNeighborRoam.c b/CORE/SME/src/csr/csrNeighborRoam.c index 4c707a18996d..d61113cdf90f 100644 --- a/CORE/SME/src/csr/csrNeighborRoam.c +++ b/CORE/SME/src/csr/csrNeighborRoam.c @@ -68,7 +68,7 @@ #include "wlan_qct_tl.h" #include "sme_Api.h" #include "csrNeighborRoam.h" -#ifdef FEATURE_WLAN_CCX +#if defined(FEATURE_WLAN_CCX) && !defined(FEATURE_WLAN_CCX_UPLOAD) #include "csrCcx.h" #endif @@ -262,9 +262,14 @@ static void csrNeighborRoamTriggerHandoff(tpAniSirGlobal pMac, #endif ) { - if (eCSR_NEIGHBOR_ROAM_STATE_REPORT_SCAN == pNeighborRoamInfo->neighborRoamState) + if ((eCSR_NEIGHBOR_ROAM_STATE_REPORT_SCAN == pNeighborRoamInfo->neighborRoamState) || + (eSME_ROAM_TRIGGER_FAST_ROAM == pNeighborRoamInfo->cfgRoamEn)) { csrNeighborRoamIssuePreauthReq(pMac); + pNeighborRoamInfo->cfgRoamEn = eSME_ROAM_TRIGGER_NONE; + vos_mem_set(&pNeighborRoamInfo->cfgRoambssId[0], + sizeof(pNeighborRoamInfo->cfgRoambssId), + 0xFF); } else { @@ -299,11 +304,16 @@ static void csrNeighborRoamTriggerHandoff(tpAniSirGlobal pMac, { if ((eCSR_NEIGHBOR_ROAM_STATE_REPORT_SCAN == pNeighborRoamInfo->neighborRoamState) #ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD - || csrRoamIsRoamOffloadScanEnabled(pMac) + || csrRoamIsRoamOffloadScanEnabled(pMac) || + (eSME_ROAM_TRIGGER_FAST_ROAM == pNeighborRoamInfo->cfgRoamEn) #endif ) { csrNeighborRoamIssuePreauthReq(pMac); + pNeighborRoamInfo->cfgRoamEn = eSME_ROAM_TRIGGER_NONE; + vos_mem_set(&pNeighborRoamInfo->cfgRoambssId[0], + sizeof(pNeighborRoamInfo->cfgRoambssId), + 0xFF); } else { @@ -320,8 +330,8 @@ static void csrNeighborRoamTriggerHandoff(tpAniSirGlobal pMac, } else { - smsLog(pMac, LOGE, FL("Non-11R Reassoc indication received in unexpected state %d"), pNeighborRoamInfo->neighborRoamState); - VOS_ASSERT(0); + smsLog(pMac, LOGE, FL("Non-11R Reassoc indication received in unexpected state %d" + " or Roaming is disabled"), pNeighborRoamInfo->neighborRoamState); } } } @@ -335,6 +345,12 @@ VOS_STATUS csrNeighborRoamUpdateFastRoamingEnabled(tpAniSirGlobal pMac, const v_ { if (VOS_TRUE == fastRoamEnabled) { +#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD + if (pMac->roam.configParam.isRoamOffloadScanEnabled) + { + csrRoamOffloadScan(pMac, ROAM_SCAN_OFFLOAD_START, REASON_CONNECT); + } else { +#endif NEIGHBOR_ROAM_DEBUG(pMac, LOG2, FL("Registering neighbor lookup DOWN event with TL, RSSI = %d"), pNeighborRoamInfo->currentNeighborLookupThreshold); /* Register Neighbor Lookup threshold callback with TL for DOWN event only */ @@ -348,12 +364,24 @@ VOS_STATUS csrNeighborRoamUpdateFastRoamingEnabled(tpAniSirGlobal pMac, const v_ smsLog(pMac, LOGW, FL(" Couldn't register csrNeighborRoamNeighborLookupDOWNCallback with TL: Status = %d"), vosStatus); vosStatus = VOS_STATUS_E_FAILURE; } +#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD + } +#endif } else if (VOS_FALSE == fastRoamEnabled) { NEIGHBOR_ROAM_DEBUG(pMac, LOG2, FL("Currently in CONNECTED state, so deregister all events")); /* De-register existing lookup UP/DOWN, Rssi indications */ +#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD + if (pMac->roam.configParam.isRoamOffloadScanEnabled) + { + csrRoamOffloadScan(pMac, ROAM_SCAN_OFFLOAD_STOP, REASON_DISCONNECTED); + } else { +#endif csrNeighborRoamDeregAllRssiIndication(pMac); +#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD + } +#endif } } else if (eCSR_NEIGHBOR_ROAM_STATE_INIT == pNeighborRoamInfo->neighborRoamState) @@ -380,6 +408,12 @@ VOS_STATUS csrNeighborRoamUpdateCcxModeEnabled(tpAniSirGlobal pMac, const v_BOOL { NEIGHBOR_ROAM_DEBUG(pMac, LOG2, FL("Registering neighbor lookup DOWN event with TL, RSSI = %d"), pNeighborRoamInfo->currentNeighborLookupThreshold); +#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD + if (pMac->roam.configParam.isRoamOffloadScanEnabled) + { + csrRoamOffloadScan(pMac, ROAM_SCAN_OFFLOAD_START, REASON_CONNECT); + } else { +#endif /* Register Neighbor Lookup threshold callback with TL for DOWN event only */ vosStatus = WLANTL_RegRSSIIndicationCB(pMac->roam.gVosContext, (v_S7_t)pNeighborRoamInfo->currentNeighborLookupThreshold * (-1), WLANTL_HO_THRESHOLD_DOWN, @@ -391,12 +425,24 @@ VOS_STATUS csrNeighborRoamUpdateCcxModeEnabled(tpAniSirGlobal pMac, const v_BOOL smsLog(pMac, LOGW, FL(" Couldn't register csrNeighborRoamNeighborLookupDOWNCallback with TL: Status = %d"), vosStatus); vosStatus = VOS_STATUS_E_FAILURE; } +#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD + } +#endif } else if (VOS_FALSE == ccxMode) { NEIGHBOR_ROAM_DEBUG(pMac, LOG2, FL("Currently in CONNECTED state, so deregister all events")); /* De-register existing lookup UP/DOWN, Rssi indications */ +#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD + if (pMac->roam.configParam.isRoamOffloadScanEnabled) + { + csrRoamOffloadScan(pMac, ROAM_SCAN_OFFLOAD_STOP, REASON_DISCONNECTED); + } else { +#endif csrNeighborRoamDeregAllRssiIndication(pMac); +#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD + } +#endif } } else if (eCSR_NEIGHBOR_ROAM_STATE_INIT == pNeighborRoamInfo->neighborRoamState) @@ -422,23 +468,39 @@ VOS_STATUS csrNeighborRoamSetLookupRssiThreshold(tpAniSirGlobal pMac, v_U8_t nei if (eCSR_NEIGHBOR_ROAM_STATE_CONNECTED == pNeighborRoamInfo->neighborRoamState) { NEIGHBOR_ROAM_DEBUG(pMac, LOG2, FL("Currently in CONNECTED state, so deregister all and re-register for DOWN event again")); - /* De-register existing lookup UP/DOWN, Rssi indications */ - csrNeighborRoamDeregAllRssiIndication(pMac); + pMac->roam.neighborRoamInfo.cfgParams.neighborLookupThreshold = neighborLookupRssiThreshold; pNeighborRoamInfo->currentNeighborLookupThreshold = pMac->roam.neighborRoamInfo.cfgParams.neighborLookupThreshold; - NEIGHBOR_ROAM_DEBUG(pMac, LOG2, FL("Registering neighbor lookup DOWN event with TL, RSSI = %d"), pNeighborRoamInfo->currentNeighborLookupThreshold); - /* Register Neighbor Lookup threshold callback with TL for DOWN event only */ - vosStatus = WLANTL_RegRSSIIndicationCB(pMac->roam.gVosContext, (v_S7_t)pNeighborRoamInfo->currentNeighborLookupThreshold * (-1), - WLANTL_HO_THRESHOLD_DOWN, - csrNeighborRoamNeighborLookupDOWNCallback, - VOS_MODULE_ID_SME, pMac); - if (!VOS_IS_STATUS_SUCCESS(vosStatus)) + /* De-register existing lookup UP/DOWN, Rssi indications */ +#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD + if (pMac->roam.configParam.isRoamOffloadScanEnabled) { - //err msg - smsLog(pMac, LOGW, FL(" Couldn't register csrNeighborRoamNeighborLookupDOWNCallback with TL: Status = %d"), vosStatus); - vosStatus = VOS_STATUS_E_FAILURE; + csrRoamOffloadScan(pMac, ROAM_SCAN_OFFLOAD_UPDATE_CFG, REASON_LOOKUP_THRESH_CHANGED); } + else + { +#endif + csrNeighborRoamDeregAllRssiIndication(pMac); + + NEIGHBOR_ROAM_DEBUG(pMac, LOG2, + FL("Registering neighbor lookup DOWN event with TL, RSSI = %d"), + pNeighborRoamInfo->currentNeighborLookupThreshold); + /* Register Neighbor Lookup threshold callback with TL for DOWN event only */ + vosStatus = WLANTL_RegRSSIIndicationCB(pMac->roam.gVosContext, + (v_S7_t)pNeighborRoamInfo->currentNeighborLookupThreshold * (-1), + WLANTL_HO_THRESHOLD_DOWN, + csrNeighborRoamNeighborLookupDOWNCallback, + VOS_MODULE_ID_SME, pMac); + if (!VOS_IS_STATUS_SUCCESS(vosStatus)) + { + //err msg + smsLog(pMac, LOGW, FL(" Couldn't register csrNeighborRoamNeighborLookupDOWNCallback with TL: Status = %d"), vosStatus); + vosStatus = VOS_STATUS_E_FAILURE; + } +#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD + } +#endif } else if (eCSR_NEIGHBOR_ROAM_STATE_INIT == pNeighborRoamInfo->neighborRoamState) { @@ -477,39 +539,41 @@ VOS_STATUS csrNeighborRoamReassocIndCallback(v_PVOID_t pAdapter, tpAniSirGlobal pMac = PMAC_STRUCT( pUserCtxt ); tpCsrNeighborRoamControlInfo pNeighborRoamInfo = &pMac->roam.neighborRoamInfo; VOS_STATUS vosStatus = VOS_STATUS_SUCCESS; - - NEIGHBOR_ROAM_DEBUG(pMac, LOG2, FL("Deregistering DOWN event reassoc callback with TL. Threshold RSSI = %d Reported RSSI = %d"), + + if (eSME_ROAM_TRIGGER_FAST_ROAM != pNeighborRoamInfo->cfgRoamEn) + { + NEIGHBOR_ROAM_DEBUG(pMac, LOG2, FL("Deregistering DOWN event reassoc callback with TL. Threshold RSSI = %d Reported RSSI = %d"), pNeighborRoamInfo->cfgParams.neighborReassocThreshold * (-1), avgRssi); - vosStatus = WLANTL_DeregRSSIIndicationCB(pMac->roam.gVosContext, (v_S7_t)pNeighborRoamInfo->cfgParams.neighborReassocThreshold * (-1), + vosStatus = WLANTL_DeregRSSIIndicationCB(pMac->roam.gVosContext, (v_S7_t)pNeighborRoamInfo->cfgParams.neighborReassocThreshold * (-1), WLANTL_HO_THRESHOLD_DOWN, csrNeighborRoamReassocIndCallback, VOS_MODULE_ID_SME); - if(!VOS_IS_STATUS_SUCCESS(vosStatus)) - { - //err msg - smsLog(pMac, LOGW, FL(" Couldn't deregister csrNeighborRoamReassocIndCallback with TL: Status = %d"), vosStatus); - } - - NEIGHBOR_ROAM_DEBUG(pMac, LOG2, FL("Rcvd reassoc notification-deregister UP indication. Threshold RSSI = %d Reported RSSI = %d"), - NEIGHBOR_ROAM_LOOKUP_UP_THRESHOLD * (-1), avgRssi); - vosStatus = WLANTL_DeregRSSIIndicationCB(pMac->roam.gVosContext, - (v_S7_t)NEIGHBOR_ROAM_LOOKUP_UP_THRESHOLD * (-1), - WLANTL_HO_THRESHOLD_UP, - csrNeighborRoamNeighborLookupUPCallback, - VOS_MODULE_ID_SME); - - if(!VOS_IS_STATUS_SUCCESS(vosStatus)) - { - //err msg - smsLog(pMac, LOGW, FL(" Couldn't deregister csrNeighborRoamNeighborLookupUPCallback with TL: Status = %d"), vosStatus); - } + if(!VOS_IS_STATUS_SUCCESS(vosStatus)) + { + //err msg + smsLog(pMac, LOGW, FL(" Couldn't deregister csrNeighborRoamReassocIndCallback with TL: Status = %d"), vosStatus); + } + + NEIGHBOR_ROAM_DEBUG(pMac, LOG2, FL("Rcvd reassoc notification-deregister UP indication. Threshold RSSI = %d Reported RSSI = %d"), + NEIGHBOR_ROAM_LOOKUP_UP_THRESHOLD * (-1), avgRssi); + vosStatus = WLANTL_DeregRSSIIndicationCB(pMac->roam.gVosContext, + (v_S7_t)NEIGHBOR_ROAM_LOOKUP_UP_THRESHOLD * (-1), + WLANTL_HO_THRESHOLD_UP, + csrNeighborRoamNeighborLookupUPCallback, + VOS_MODULE_ID_SME); + if(!VOS_IS_STATUS_SUCCESS(vosStatus)) + { + //err msg + smsLog(pMac, LOGW, FL(" Couldn't deregister csrNeighborRoamNeighborLookupUPCallback with TL: Status = %d"), vosStatus); + } + } /* We dont need to run this timer any more. */ - palTimerStop(pMac->hHdd, pNeighborRoamInfo->neighborResultsRefreshTimer); - palTimerStop(pMac->hHdd, pNeighborRoamInfo->emptyScanRefreshTimer); + vos_timer_stop(&pNeighborRoamInfo->neighborResultsRefreshTimer); + vos_timer_stop(&pNeighborRoamInfo->emptyScanRefreshTimer); csrNeighborRoamTriggerHandoff(pMac, pNeighborRoamInfo); @@ -543,13 +607,13 @@ static void csrNeighborRoamResetCfgListChanScanControlInfo(tpAniSirGlobal pMac) tpCsrNeighborRoamControlInfo pNeighborRoamInfo = &pMac->roam.neighborRoamInfo; /* Stop neighbor scan timer */ - palTimerStop(pMac->hHdd, pNeighborRoamInfo->neighborScanTimer); + vos_timer_stop(&pNeighborRoamInfo->neighborScanTimer); /* Stop neighbor scan results refresh timer */ - palTimerStop(pMac->hHdd, pNeighborRoamInfo->neighborResultsRefreshTimer); + vos_timer_stop(&pNeighborRoamInfo->neighborResultsRefreshTimer); /* Stop empty scan results refresh timer */ - palTimerStop(pMac->hHdd, pNeighborRoamInfo->emptyScanRefreshTimer); + vos_timer_stop(&pNeighborRoamInfo->emptyScanRefreshTimer); /* Abort any ongoing scan */ if (eANI_BOOLEAN_TRUE == pNeighborRoamInfo->scanRspPending) @@ -581,6 +645,11 @@ static void csrNeighborRoamResetPreauthControlInfo(tpAniSirGlobal pMac) pNeighborRoamInfo->FTRoamInfo.numBssFromNeighborReport = 0; vos_mem_zero(pNeighborRoamInfo->FTRoamInfo.neighboReportBssInfo, sizeof(tCsrNeighborReportBssInfo) * MAX_BSS_IN_NEIGHBOR_RPT); #endif +#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD + pNeighborRoamInfo->uOsRequestedHandoff = 0; + vos_mem_zero(&pNeighborRoamInfo->handoffReqInfo, sizeof(tCsrHandoffRequest)); +#endif + } static void csrNeighborRoamDeregAllRssiIndication(tpAniSirGlobal pMac) @@ -673,8 +742,8 @@ void csrNeighborRoamResetConnectedStateControlInfo(tpAniSirGlobal pMac) csrNeighborRoamFreeRoamableBSSList(pMac, &pNeighborRoamInfo->roamableAPList); /* We dont need to run this timer any more. */ - palTimerStop(pMac->hHdd, pNeighborRoamInfo->neighborResultsRefreshTimer); - palTimerStop(pMac->hHdd, pNeighborRoamInfo->emptyScanRefreshTimer); + vos_timer_stop(&pNeighborRoamInfo->neighborResultsRefreshTimer); + vos_timer_stop(&pNeighborRoamInfo->emptyScanRefreshTimer); #ifdef WLAN_FEATURE_VOWIFI_11R /* Do not free up the preauth done list here */ @@ -685,6 +754,10 @@ void csrNeighborRoamResetConnectedStateControlInfo(tpAniSirGlobal pMac) pNeighborRoamInfo->FTRoamInfo.preauthRspPending = 0; vos_mem_zero(pNeighborRoamInfo->FTRoamInfo.neighboReportBssInfo, sizeof(tCsrNeighborReportBssInfo) * MAX_BSS_IN_NEIGHBOR_RPT); #endif +#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD + pNeighborRoamInfo->uOsRequestedHandoff = 0; + vos_mem_zero(&pNeighborRoamInfo->handoffReqInfo, sizeof(tCsrHandoffRequest)); +#endif } void csrNeighborRoamResetReportScanStateControlInfo(tpAniSirGlobal pMac) @@ -701,9 +774,9 @@ void csrNeighborRoamResetReportScanStateControlInfo(tpAniSirGlobal pMac) #endif /* Stop scan refresh timer */ - palTimerStop(pMac->hHdd, pNeighborRoamInfo->neighborResultsRefreshTimer); + vos_timer_stop(&pNeighborRoamInfo->neighborResultsRefreshTimer); /* Stop empty scan results refresh timer */ - palTimerStop(pMac->hHdd, pNeighborRoamInfo->emptyScanRefreshTimer); + vos_timer_stop(&pNeighborRoamInfo->emptyScanRefreshTimer); /* Purge roamable AP list */ csrNeighborRoamFreeRoamableBSSList(pMac, &pNeighborRoamInfo->roamableAPList); return; @@ -832,8 +905,10 @@ eHalStatus csrNeighborRoamAddBssIdToPreauthFailList(tpAniSirGlobal pMac, tSirMac smsLog(pMac, LOGE, FL("Preauth fail list already full.. Cannot add new one")); return eHAL_STATUS_FAILURE; } - vos_mem_copy(pNeighborRoamInfo->FTRoamInfo.preAuthFailList.macAddress[pNeighborRoamInfo->FTRoamInfo.preAuthFailList.numMACAddress], - bssId, sizeof(tSirMacAddr)); + vos_mem_copy(pNeighborRoamInfo->FTRoamInfo.preAuthFailList.macAddress[ + pNeighborRoamInfo->FTRoamInfo.preAuthFailList.numMACAddress], + bssId, + sizeof(tSirMacAddr)); pNeighborRoamInfo->FTRoamInfo.preAuthFailList.numMACAddress++; return eHAL_STATUS_SUCCESS; @@ -896,6 +971,10 @@ static eHalStatus csrNeighborRoamIssuePreauthReq(tpAniSirGlobal pMac) tpCsrNeighborRoamControlInfo pNeighborRoamInfo = &pMac->roam.neighborRoamInfo; eHalStatus status = eHAL_STATUS_SUCCESS; tpCsrNeighborRoamBSSInfo pNeighborBssNode; + +#ifdef FEATURE_WLAN_LFR_METRICS + tCsrRoamInfo *roamInfo; +#endif /* This must not be true here */ VOS_ASSERT(pNeighborRoamInfo->FTRoamInfo.preauthRspPending == eANI_BOOLEAN_FALSE); @@ -913,6 +992,25 @@ static eHalStatus csrNeighborRoamIssuePreauthReq(tpAniSirGlobal pMac) } else { +#ifdef FEATURE_WLAN_LFR_METRICS + /* LFR metrics - pre-auth initiation metric. + Send the event to supplicant that pre-auth was initiated */ + roamInfo = vos_mem_malloc(sizeof(tCsrRoamInfo)); + if (NULL == roamInfo) + { + smsLog(pMac, LOG1, FL("Memory allocation failed!")); + } + else + { + vos_mem_copy((void *)roamInfo->bssid, + (void *)pNeighborBssNode->pBssDescription->bssId, + sizeof(tCsrBssid)); + csrRoamCallCallback(pMac, pNeighborRoamInfo->csrSessionId, + roamInfo, 0, eCSR_ROAM_PREAUTH_INIT_NOTIFY, 0); + vos_mem_free(pRoamInfo); + } +#endif + status = csrRoamEnqueuePreauth(pMac, pNeighborRoamInfo->csrSessionId, pNeighborBssNode->pBssDescription, eCsrPerformPreauth, eANI_BOOLEAN_TRUE); @@ -970,6 +1068,10 @@ eHalStatus csrNeighborRoamPreauthRspHandler(tpAniSirGlobal pMac, tSirRetStatus l eHalStatus preauthProcessed = eHAL_STATUS_SUCCESS; tpCsrNeighborRoamBSSInfo pPreauthRspNode = NULL; +#ifdef FEATURE_WLAN_LFR_METRICS + tCsrRoamInfo *roamInfo; +#endif + if (eANI_BOOLEAN_FALSE == pNeighborRoamInfo->FTRoamInfo.preauthRspPending) { @@ -1003,7 +1105,7 @@ eHalStatus csrNeighborRoamPreauthRspHandler(tpAniSirGlobal pMac, tSirRetStatus l } if ((eSIR_SUCCESS == limStatus) && (NULL != pPreauthRspNode)) { - NEIGHBOR_ROAM_DEBUG(pMac, LOGE, FL("Preauth completed successfully after %d tries"), pNeighborRoamInfo->FTRoamInfo.numPreAuthRetries); + NEIGHBOR_ROAM_DEBUG(pMac, LOG1, FL("Preauth completed successfully after %d tries"), pNeighborRoamInfo->FTRoamInfo.numPreAuthRetries); smsLog(pMac, LOG1, FL("After Pre-Auth: BSSID %02x:%02x:%02x:%02x:%02x:%02x, Ch:%d"), pPreauthRspNode->pBssDescription->bssId[0], @@ -1014,6 +1116,25 @@ eHalStatus csrNeighborRoamPreauthRspHandler(tpAniSirGlobal pMac, tSirRetStatus l pPreauthRspNode->pBssDescription->bssId[5], (int)pPreauthRspNode->pBssDescription->channelId); +#ifdef FEATURE_WLAN_LFR_METRICS + /* LFR metrics - pre-auth completion metric. + Send the event to supplicant that pre-auth successfully completed */ + roamInfo = vos_mem_malloc(sizeof(tCsrRoamInfo)); + if (NULL == roamInfo) + { + smsLog(pMac, LOG1, FL("Memory allocation failed!")); + } + else + { + vos_mem_copy((void *)roamInfo->bssid, + (void *)pPreauthRspNode->pBssDescription->bssId, + sizeof(tCsrBssid)); + csrRoamCallCallback(pMac, pNeighborRoamInfo->csrSessionId, + roamInfo, 0, eCSR_ROAM_PREAUTH_STATUS_SUCCESS, 0); + vos_mem_free(pRoamInfo); + } +#endif + /* Preauth competer successfully. Insert the preauthenticated node to tail of preAuthDoneList */ csrNeighborRoamRemoveRoamableAPListEntry(pMac, &pNeighborRoamInfo->roamableAPList, pPreauthRspNode); csrLLInsertTail(&pNeighborRoamInfo->FTRoamInfo.preAuthDoneList, &pPreauthRspNode->List, LL_ACCESS_LOCK); @@ -1046,8 +1167,33 @@ eHalStatus csrNeighborRoamPreauthRspHandler(tpAniSirGlobal pMac, tSirRetStatus l if(pEntry) { pNeighborBssNode = GET_BASE_ADDR(pEntry, tCsrNeighborRoamBSSInfo, List); - /* Add the BSSID to pre-auth fail list */ + /* Add the BSSID to pre-auth fail list if it is not requested by HDD */ +#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD + if(!pNeighborRoamInfo->uOsRequestedHandoff) +#endif + { status = csrNeighborRoamAddBssIdToPreauthFailList(pMac, pNeighborBssNode->pBssDescription->bssId); + } + +#ifdef FEATURE_WLAN_LFR_METRICS + /* LFR metrics - pre-auth completion metric. Send the event + to supplicant that pre-auth successfully completed */ + roamInfo = vos_mem_malloc(sizeof(tCsrRoamInfo)); + if (NULL == roamInfo) + { + smsLog(pMac, LOG1, FL("Memory allocation failed!")); + } + else + { + vos_mem_copy((void *)roamInfo->bssid, + (void *)pNeighborBssNode->pBssDescription->bssId, + sizeof(tCsrBssid)); + csrRoamCallCallback(pMac, pNeighborRoamInfo->csrSessionId, + roamInfo, 0, eCSR_ROAM_PREAUTH_STATUS_FAILURE, 0); + vos_mem_free(pRoamInfo); + } +#endif + /* Now we can free this node */ csrNeighborRoamFreeNeighborRoamBSSNode(pMac, pNeighborBssNode); } @@ -1060,7 +1206,15 @@ eHalStatus csrNeighborRoamPreauthRspHandler(tpAniSirGlobal pMac, tSirRetStatus l #ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD if (csrRoamIsRoamOffloadScanEnabled(pMac)) { - csrRoamOffloadScan(pMac, ROAM_SCAN_OFFLOAD_RESTART, REASON_PREAUTH_FAILED_FOR_ALL); + if(pNeighborRoamInfo->uOsRequestedHandoff) + { + pNeighborRoamInfo->uOsRequestedHandoff = 0; + csrRoamOffloadScan(pMac, ROAM_SCAN_OFFLOAD_START, REASON_PREAUTH_FAILED_FOR_ALL); + } + else + { + csrRoamOffloadScan(pMac, ROAM_SCAN_OFFLOAD_RESTART, REASON_PREAUTH_FAILED_FOR_ALL); + } CSR_NEIGHBOR_ROAM_STATE_TRANSITION(eCSR_NEIGHBOR_ROAM_STATE_CONNECTED); } else { @@ -1083,10 +1237,9 @@ eHalStatus csrNeighborRoamPreauthRspHandler(tpAniSirGlobal pMac, tSirRetStatus l } /* Start the neighbor results refresh timer and transition to REPORT_SCAN state to perform scan again */ - status = palTimerStart(pMac->hHdd, pNeighborRoamInfo->neighborResultsRefreshTimer, - pNeighborRoamInfo->cfgParams.neighborResultsRefreshPeriod * PAL_TIMER_TO_MS_UNIT, - eANI_BOOLEAN_FALSE); - if (eHAL_STATUS_SUCCESS != status) + status = vos_timer_start(&pNeighborRoamInfo->neighborResultsRefreshTimer, + pNeighborRoamInfo->cfgParams.neighborResultsRefreshPeriod); + if ( status != eHAL_STATUS_SUCCESS ) { smsLog(pMac, LOGE, FL("Neighbor results refresh timer start failed with status %d"), status); } @@ -1130,6 +1283,28 @@ eHalStatus csrNeighborRoamPrepareScanProfileFilter(tpAniSirGlobal pMac, tCsrScan /* We dont want to set BSSID based Filter */ pScanFilter->BSSIDs.numOfBSSIDs = 0; + //only for HDD requested handoff fill in the BSSID in the filter +#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD + if (pNeighborRoamInfo->uOsRequestedHandoff) + { + pScanFilter->BSSIDs.numOfBSSIDs = 1; + pScanFilter->BSSIDs.bssid = vos_mem_malloc(sizeof(tSirMacAddr) * pScanFilter->BSSIDs.numOfBSSIDs); + if (NULL == pScanFilter->BSSIDs.bssid) + { + smsLog(pMac, LOGE, FL("Scan Filter BSSID mem alloc failed")); + return eHAL_STATUS_FAILED_ALLOC; + } + + vos_mem_zero(pScanFilter->BSSIDs.bssid, sizeof(tSirMacAddr) * pScanFilter->BSSIDs.numOfBSSIDs); + + /* Populate the BSSID from handoff info received from HDD */ + for (i = 0; i < pScanFilter->BSSIDs.numOfBSSIDs; i++) + { + vos_mem_copy(&pScanFilter->BSSIDs.bssid[i], + pNeighborRoamInfo->handoffReqInfo.bssid, sizeof(tSirMacAddr)); + } + } +#endif /* Populate all the information from the connected profile */ pScanFilter->SSIDs.numOfSSIDs = 1; pScanFilter->SSIDs.SSIDList = vos_mem_malloc(sizeof(tCsrSSIDInfo)); @@ -1143,17 +1318,11 @@ eHalStatus csrNeighborRoamPrepareScanProfileFilter(tpAniSirGlobal pMac, tCsrScan pScanFilter->SSIDs.SSIDList->SSID.length = pCurProfile->SSID.length; vos_mem_copy((void *)pScanFilter->SSIDs.SSIDList->SSID.ssId, (void *)pCurProfile->SSID.ssId, pCurProfile->SSID.length); - NEIGHBOR_ROAM_DEBUG(pMac, LOGE, FL("Filtering from scan results for" - "SSID = 0x%08lx%08lx%08lx%08lx%08lx%08lx%08lx%08lx\nSSID Length = %d"), - pScanFilter->SSIDs.SSIDList->SSID.ssId[0], - pScanFilter->SSIDs.SSIDList->SSID.ssId[4], - pScanFilter->SSIDs.SSIDList->SSID.ssId[8], - pScanFilter->SSIDs.SSIDList->SSID.ssId[12], - pScanFilter->SSIDs.SSIDList->SSID.ssId[16], - pScanFilter->SSIDs.SSIDList->SSID.ssId[20], - pScanFilter->SSIDs.SSIDList->SSID.ssId[24], - pScanFilter->SSIDs.SSIDList->SSID.ssId[28], - pScanFilter->SSIDs.SSIDList->SSID.length); + NEIGHBOR_ROAM_DEBUG(pMac, LOG1, FL("Filtering for SSID %.*s from scan results," + "length of SSID = %u"), + pScanFilter->SSIDs.SSIDList->SSID.length, + pScanFilter->SSIDs.SSIDList->SSID.ssId, + pScanFilter->SSIDs.SSIDList->SSID.length); pScanFilter->authType.numEntries = 1; pScanFilter->authType.authType[0] = pCurProfile->AuthType; @@ -1274,7 +1443,7 @@ static tANI_BOOLEAN csrNeighborRoamProcessScanResults(tpAniSirGlobal pMac, while (NULL != (pScanResult = csrScanResultGetNext(pMac, *pScanResultList))) { VOS_TRACE (VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_DEBUG, - FL("Scan result: BSSID %02x:%02x:%02x:%02x:%02x:%02x (Rssi %d, Ch:%d)"), + FL("Scan result: BSSID %02x:%02x:%02x:%02x:%02x:%02x (Rssi %ld, Ch:%d)"), pScanResult->BssDescriptor.bssId[0], pScanResult->BssDescriptor.bssId[1], pScanResult->BssDescriptor.bssId[2], @@ -1284,8 +1453,11 @@ static tANI_BOOLEAN csrNeighborRoamProcessScanResults(tpAniSirGlobal pMac, abs(pScanResult->BssDescriptor.rssi), pScanResult->BssDescriptor.channelId); - if (VOS_TRUE == vos_mem_compare(pScanResult->BssDescriptor.bssId, - pNeighborRoamInfo->currAPbssid, sizeof(tSirMacAddr))) + if ((VOS_TRUE == vos_mem_compare(pScanResult->BssDescriptor.bssId, + pNeighborRoamInfo->currAPbssid, sizeof(tSirMacAddr))) || + ((eSME_ROAM_TRIGGER_SCAN == pNeighborRoamInfo->cfgRoamEn) && + (VOS_TRUE != vos_mem_compare(pScanResult->BssDescriptor.bssId, + pNeighborRoamInfo->cfgRoambssId, sizeof(tSirMacAddr))))) { /* currently associated AP. Do not have this in the roamable AP list */ VOS_TRACE (VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, @@ -1293,13 +1465,32 @@ static tANI_BOOLEAN csrNeighborRoamProcessScanResults(tpAniSirGlobal pMac, continue; } +#ifdef FEATURE_WLAN_LFR +#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD + /* In case of reassoc requested by upper layer, look for exact match of bssid & channel; + csr cache might have duplicates*/ + if ((pNeighborRoamInfo->uOsRequestedHandoff) && + ((VOS_FALSE == vos_mem_compare(pScanResult->BssDescriptor.bssId, + pNeighborRoamInfo->handoffReqInfo.bssid, + sizeof(tSirMacAddr)))|| + (pScanResult->BssDescriptor.channelId != pNeighborRoamInfo->handoffReqInfo.channel))) + + { + VOS_TRACE (VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, + "SKIP-not a candidate AP for OS requested roam"); + continue; + } +#endif +#endif + /* This condition is to ensure to roam to an AP with better RSSI. if the value of RoamRssiDiff is Zero, this feature * is disabled and we continue to roam without any check*/ if ((RoamRssiDiff > 0) #ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD && !csrRoamIsRoamOffloadScanEnabled(pMac) #endif - ) + && ((eSME_ROAM_TRIGGER_SCAN != pNeighborRoamInfo->cfgRoamEn) || + (eSME_ROAM_TRIGGER_FAST_ROAM != pNeighborRoamInfo->cfgRoamEn))) { /* * If RSSI is lower than the lookup threshold, then continue. @@ -1460,14 +1651,19 @@ static tANI_BOOLEAN csrNeighborRoamProcessScanResults(tpAniSirGlobal pMac, csrLLInsertTail(&pNeighborRoamInfo->roamableAPList, &pBssInfo->List, LL_ACCESS_LOCK); #if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR) - if ((abs(abs(CurrAPRssi) - abs(pScanResult->BssDescriptor.rssi)) >= immediateRoamRssiDiff) + if ((eSME_ROAM_TRIGGER_SCAN == pNeighborRoamInfo->cfgRoamEn) || + (eSME_ROAM_TRIGGER_FAST_ROAM == pNeighborRoamInfo->cfgRoamEn)) + { + roamNow = eANI_BOOLEAN_FALSE; + } + else if ((abs(abs(CurrAPRssi) - abs(pScanResult->BssDescriptor.rssi)) >= immediateRoamRssiDiff) #ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD && !csrRoamIsRoamOffloadScanEnabled(pMac) #endif ) { VOS_TRACE (VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, - "%s: [INFOLOG] potential candidate to roam immediately (diff=%d, expected=%d)", + "%s: [INFOLOG] potential candidate to roam immediately (diff=%ld, expected=%d)", __func__, abs(abs(CurrAPRssi) - abs(pScanResult->BssDescriptor.rssi)), immediateRoamRssiDiff); roamNow = eANI_BOOLEAN_TRUE; @@ -1554,11 +1750,7 @@ static VOS_STATUS csrNeighborRoamHandleEmptyScanResult(tpAniSirGlobal pMac) #endif /* Stop neighbor scan timer */ - status = palTimerStop(pMac->hHdd, pNeighborRoamInfo->neighborScanTimer); - if (eHAL_STATUS_SUCCESS != status) - { - smsLog(pMac, LOGW, FL("stopping neighborScanTimer failed with status %d"), status); - } + vos_timer_stop(&pNeighborRoamInfo->neighborScanTimer); /* * Increase the neighbor lookup threshold by 3 dB @@ -1666,10 +1858,9 @@ static VOS_STATUS csrNeighborRoamHandleEmptyScanResult(tpAniSirGlobal pMac) pNeighborRoamInfo->uScanMode = SPLIT_SCAN_OCCUPIED_LIST; /* Start empty scan refresh timer */ - if (eHAL_STATUS_SUCCESS != - palTimerStart(pMac->hHdd, pNeighborRoamInfo->emptyScanRefreshTimer, - pNeighborRoamInfo->cfgParams.emptyScanRefreshPeriod * PAL_TIMER_TO_MS_UNIT, - eANI_BOOLEAN_FALSE)) + if (VOS_STATUS_SUCCESS != + vos_timer_start(&pNeighborRoamInfo->emptyScanRefreshTimer, + pNeighborRoamInfo->cfgParams.emptyScanRefreshPeriod)) { smsLog(pMac, LOGE, FL("Empty scan refresh timer failed to start (%d)"), status); @@ -1680,17 +1871,16 @@ static VOS_STATUS csrNeighborRoamHandleEmptyScanResult(tpAniSirGlobal pMac) } else { - smsLog(pMac, LOGE, FL("Empty scan refresh timer started (%ld ms)"), + smsLog(pMac, LOGE, FL("Empty scan refresh timer started (%d ms)"), (pNeighborRoamInfo->cfgParams.emptyScanRefreshPeriod)); } } else if (eThirdEmptyScan == pNeighborRoamInfo->uEmptyScanCount) { /* Start neighbor scan results refresh timer */ - if (eHAL_STATUS_SUCCESS != - palTimerStart(pMac->hHdd, pNeighborRoamInfo->neighborResultsRefreshTimer, - pNeighborRoamInfo->cfgParams.neighborResultsRefreshPeriod * PAL_TIMER_TO_MS_UNIT, - eANI_BOOLEAN_FALSE)) + if (VOS_STATUS_SUCCESS != + vos_timer_start(&pNeighborRoamInfo->neighborResultsRefreshTimer, + pNeighborRoamInfo->cfgParams.neighborResultsRefreshPeriod)) { smsLog(pMac, LOGE, FL("Neighbor results refresh timer failed to start (%d)"), status); @@ -1701,7 +1891,7 @@ static VOS_STATUS csrNeighborRoamHandleEmptyScanResult(tpAniSirGlobal pMac) } else { - smsLog(pMac, LOG2, FL("Neighbor results refresh timer started (%ld ms)"), + smsLog(pMac, LOG2, FL("Neighbor results refresh timer started (%d ms)"), (pNeighborRoamInfo->cfgParams.neighborResultsRefreshPeriod * PAL_TIMER_TO_MS_UNIT)); } } @@ -1815,7 +2005,7 @@ static eHalStatus csrNeighborRoamProcessScanComplete (tpAniSirGlobal pMac) need to restart the CFG CHAN list scan procedure if reassoc callback is not invoked from TL within certain duration */ -// palTimerStop(pMac->hHdd, pNeighborRoamInfo->neighborScanTimer); +// vos_timer_stop(&pNeighborRoamInfo->neighborScanTimer); } } else @@ -1882,13 +2072,12 @@ static eHalStatus csrNeighborRoamProcessScanComplete (tpAniSirGlobal pMac) return eHAL_STATUS_SUCCESS; } - hstatus = palTimerStart(pMac->hHdd, pNeighborRoamInfo->neighborResultsRefreshTimer, - pNeighborRoamInfo->cfgParams.neighborResultsRefreshPeriod * PAL_TIMER_TO_MS_UNIT, - eANI_BOOLEAN_FALSE); + hstatus = vos_timer_start(&pNeighborRoamInfo->neighborResultsRefreshTimer, + pNeighborRoamInfo->cfgParams.neighborResultsRefreshPeriod); /* This timer should be started before registering the Reassoc callback with TL. This is because, it is very likely * that the callback getting called immediately and the timer would never be stopped when pre-auth is in progress */ - if (eHAL_STATUS_SUCCESS != hstatus) + if( hstatus != eHAL_STATUS_SUCCESS) { smsLog(pMac, LOGE, FL("Neighbor results refresh timer failed to start, status = %d"), hstatus); vos_mem_free(pNeighborRoamInfo->roamChannelInfo.currentChannelListInfo.ChannelList); @@ -1917,9 +2106,17 @@ if (csrRoamIsRoamOffloadScanEnabled(pMac)) { if (!tempVal || !roamNow) { - /* There is no candidate or We are not roaming Now. - * Inform the FW to restart Roam Offload Scan */ - csrRoamOffloadScan(pMac, ROAM_SCAN_OFFLOAD_RESTART, REASON_NO_CAND_FOUND_OR_NOT_ROAMING_NOW); + if (pNeighborRoamInfo->uOsRequestedHandoff) + { + csrRoamOffloadScan(pMac, ROAM_SCAN_OFFLOAD_START, REASON_NO_CAND_FOUND_OR_NOT_ROAMING_NOW); + pNeighborRoamInfo->uOsRequestedHandoff = 0; + } + else + { + /* There is no candidate or We are not roaming Now. + * Inform the FW to restart Roam Offload Scan */ + csrRoamOffloadScan(pMac, ROAM_SCAN_OFFLOAD_RESTART, REASON_NO_CAND_FOUND_OR_NOT_ROAMING_NOW); + } CSR_NEIGHBOR_ROAM_STATE_TRANSITION(eCSR_NEIGHBOR_ROAM_STATE_CONNECTED); } } @@ -1961,6 +2158,15 @@ static eHalStatus csrNeighborRoamScanRequestCallback(tHalHandle halHandle, void if (NULL != pContext) { sessionId = *((tANI_U32*)pContext); + + if (!csrRoamIsStaMode(pMac, sessionId)) + { + smsLog(pMac, LOGE, FL("%s: Ignoring scan request callback on non-infra session %d in state %d"), + __FUNCTION__, sessionId, pNeighborRoamInfo->neighborRoamState); + vos_mem_free(pContext); + return eHAL_STATUS_SUCCESS; + } + if (!csrRoamIsFastRoamEnabled(pMac,sessionId)) { smsLog(pMac, LOGE, FL("Received when fast roam is disabled. Ignore it")); @@ -1984,7 +2190,7 @@ static eHalStatus csrNeighborRoamScanRequestCallback(tHalHandle halHandle, void currentChanIndex = (pMac->roam.neighborRoamInfo.roamChannelInfo.currentChanIndex) ? (pMac->roam.neighborRoamInfo.roamChannelInfo.currentChanIndex - 1) : 0; /* Validate inputs */ - if (pMac->roam.neighborRoamInfo.roamChannelInfo.currentChannelListInfo.ChannelList) { + if (pMac->roam.neighborRoamInfo.roamChannelInfo.currentChannelListInfo.ChannelList) { NEIGHBOR_ROAM_DEBUG(pMac, LOGW, FL("csrNeighborRoamScanRequestCallback received for Channel = %d, ChanIndex = %d"), pMac->roam.neighborRoamInfo.roamChannelInfo.currentChannelListInfo.ChannelList[currentChanIndex], currentChanIndex); } @@ -1998,7 +2204,7 @@ static eHalStatus csrNeighborRoamScanRequestCallback(tHalHandle halHandle, void if (eANI_BOOLEAN_FALSE == pNeighborRoamInfo->roamChannelInfo.chanListScanInProgress) { - /* Scan is completed in the CFG_CHAN_SCAN state. We can transition to REPORT_SCAN state + /* Scan is completed in the CFG_CHAN_SCAN state. We can transition to REPORT_SCAN state just to get the results and perform PREAUTH */ /* Now we have completed scanning the channel list. We have get the result by applying appropriate filter sort the results based on neighborScore and RSSI and select the best candidate out of the list */ @@ -2019,10 +2225,8 @@ static eHalStatus csrNeighborRoamScanRequestCallback(tHalHandle halHandle, void { /* Restart the timer for the next scan sequence as scanning is not over */ - hstatus = palTimerStart(pMac->hHdd, pNeighborRoamInfo->neighborScanTimer, - pNeighborRoamInfo->cfgParams.neighborScanPeriod * PAL_TIMER_TO_MS_UNIT, - eANI_BOOLEAN_FALSE); - + hstatus = vos_timer_start(&pNeighborRoamInfo->neighborScanTimer, + pNeighborRoamInfo->cfgParams.neighborScanPeriod); if (eHAL_STATUS_SUCCESS != hstatus) { /* Timer start failed.. Should we ASSERT here??? */ @@ -2090,7 +2294,7 @@ static eHalStatus csrNeighborRoamScanResultRequestCallback(tHalHandle halHandle, #endif //WLAN_FEATURE_ROAM_SCAN_OFFLOAD #ifdef FEATURE_WLAN_LFR -static eHalStatus csrNeighborRoamContiguousScanRequestCallback(tHalHandle halHandle, +static eHalStatus csrNeighborRoamContiguousScanRequestCallback(tHalHandle halHandle, void *pContext, tANI_U32 scanId, eCsrScanStatus status) { tpAniSirGlobal pMac = (tpAniSirGlobal) halHandle; @@ -2110,7 +2314,7 @@ static eHalStatus csrNeighborRoamContiguousScanRequestCallback(tHalHandle halHan } pMac->roam.neighborRoamInfo.scanRspPending = eANI_BOOLEAN_FALSE; - + /* This can happen when we receive a UP event from TL in any of the scan states. Silently ignore it */ if (eCSR_NEIGHBOR_ROAM_STATE_CONNECTED == pNeighborRoamInfo->neighborRoamState) { @@ -2130,12 +2334,12 @@ static eHalStatus csrNeighborRoamContiguousScanRequestCallback(tHalHandle halHan NEIGHBOR_ROAM_DEBUG(pMac, LOGW, "%s: process scan results", __func__); hstatus = csrNeighborRoamProcessScanComplete(pMac); - + if (eHAL_STATUS_SUCCESS != hstatus) { smsLog(pMac, LOGE, FL("Neighbor scan process complete failed with status %d"), hstatus); } - + if (NULL != pContext) vos_mem_free(pContext); @@ -2173,11 +2377,11 @@ eHalStatus csrNeighborRoamIssueBgScanRequest(tpAniSirGlobal pMac, pMac->roam.neighborRoamInfo.roamChannelInfo.currentChanIndex); //send down the scan req for 1 channel on the associated SSID - palZeroMemory(pMac->hHdd, &scanReq, sizeof(tCsrScanRequest)); + vos_mem_set(&scanReq, sizeof(tCsrScanRequest), 0); /* Fill in the SSID Info */ scanReq.SSIDs.numOfSSIDs = 1; scanReq.SSIDs.SSIDList = vos_mem_malloc(sizeof(tCsrSSIDInfo) * scanReq.SSIDs.numOfSSIDs); - if(NULL == scanReq.SSIDs.SSIDList) + if (NULL == scanReq.SSIDs.SSIDList) { //err msg smsLog(pMac, LOGE, FL("Couldn't allocate memory for the SSID..Freeing memory allocated for Channel List")); @@ -2227,7 +2431,7 @@ eHalStatus csrNeighborRoamIssueBgScanRequest(tpAniSirGlobal pMac, vos_mem_free(scanReq.SSIDs.SSIDList); if (1 == pBgScanParams->ChannelInfo.numOfChannels) - NEIGHBOR_ROAM_DEBUG(pMac, LOG1, FL("Channel List Address = %08x, Actual index = %d"), + NEIGHBOR_ROAM_DEBUG(pMac, LOG1, FL("Channel List Address = %p, Actual index = %d"), &pMac->roam.neighborRoamInfo.roamChannelInfo.currentChannelListInfo.ChannelList[0], pMac->roam.neighborRoamInfo.roamChannelInfo.currentChanIndex); @@ -2273,7 +2477,7 @@ eHalStatus csrNeighborRoamPerformBgScan(tpAniSirGlobal pMac, tANI_U32 sessionId) if (pNeighborRoamInfo->roamChannelInfo.currentChannelListInfo.ChannelList) { - NEIGHBOR_ROAM_DEBUG(pMac, LOG1, FL("Channel List Address = %08x"), &pNeighborRoamInfo->roamChannelInfo.currentChannelListInfo.ChannelList[0]); + NEIGHBOR_ROAM_DEBUG(pMac, LOG1, FL("Channel List Address = %p"), &pNeighborRoamInfo->roamChannelInfo.currentChannelListInfo.ChannelList[0]); } else { @@ -2298,7 +2502,7 @@ eHalStatus csrNeighborRoamPerformBgScan(tpAniSirGlobal pMac, tANI_U32 sessionId) /* Need to perform scan here before getting the list */ - palZeroMemory(pMac->hHdd, &bgScanParams, sizeof(tCsrBGScanRequest)); + vos_mem_set(&bgScanParams, sizeof(tCsrBGScanRequest), 0); channel = pNeighborRoamInfo->roamChannelInfo.currentChannelListInfo.ChannelList[pNeighborRoamInfo->roamChannelInfo.currentChanIndex]; bgScanParams.ChannelInfo.numOfChannels = 1; @@ -2347,35 +2551,26 @@ eHalStatus csrNeighborRoamPerformContiguousBgScan(tpAniSirGlobal pMac, tANI_U32 { eHalStatus status = eHAL_STATUS_SUCCESS; tCsrBGScanRequest bgScanParams; - int numOfChannels = 0, i = 0; + tANI_U8 numOfChannels = 0, i = 0; tANI_U8 *channelList = NULL; tANI_U8 *pInChannelList = NULL; tANI_U8 tmpChannelList[WNI_CFG_VALID_CHANNEL_LIST_LEN]; - palZeroMemory(pMac->hHdd, &bgScanParams, sizeof(tCsrBGScanRequest)); + vos_mem_set(&bgScanParams, sizeof(tCsrBGScanRequest), 0); /* Contiguously scan all channels from valid list */ NEIGHBOR_ROAM_DEBUG(pMac, LOG2, "%s: get valid channel list", __func__); - if (NULL != pMac->roam.neighborRoamInfo.cfgParams.countryChannelInfo.countryValidChannelList.ChannelList) - { - /* this list is filled only if the country code is set to KR */ - numOfChannels = pMac->roam.neighborRoamInfo.cfgParams.countryChannelInfo.countryValidChannelList.numOfChannels; - pInChannelList = pMac->roam.neighborRoamInfo.cfgParams.countryChannelInfo.countryValidChannelList.ChannelList; - } - else - { - numOfChannels = sizeof(pMac->roam.validChannelList); + numOfChannels = sizeof(pMac->roam.validChannelList); - if(!HAL_STATUS_SUCCESS(csrGetCfgValidChannels(pMac, - (tANI_U8 *)pMac->roam.validChannelList, - (tANI_U32 *) &numOfChannels))) - { - smsLog(pMac, LOGE, FL("Could not get valid channel list")); - return eHAL_STATUS_FAILURE; - } - pInChannelList = pMac->roam.validChannelList; + if(!HAL_STATUS_SUCCESS(csrGetCfgValidChannels(pMac, + (tANI_U8 *)pMac->roam.validChannelList, + (tANI_U32 *) &numOfChannels))) + { + smsLog(pMac, LOGE, FL("Could not get valid channel list")); + return eHAL_STATUS_FAILURE; } + pInChannelList = pMac->roam.validChannelList; if (CSR_IS_ROAM_INTRA_BAND_ENABLED(pMac)) { @@ -2388,8 +2583,8 @@ eHalStatus csrNeighborRoamPerformContiguousBgScan(tpAniSirGlobal pMac, tANI_U32 pInChannelList = tmpChannelList; } - channelList = vos_mem_malloc( numOfChannels ); - if( NULL == channelList ) + channelList = vos_mem_malloc(numOfChannels); + if ( NULL == channelList ) { smsLog(pMac, LOGE, FL("could not allocate memory for channelList")); return eHAL_STATUS_FAILURE; @@ -2409,7 +2604,7 @@ eHalStatus csrNeighborRoamPerformContiguousBgScan(tpAniSirGlobal pMac, tANI_U32 status = csrNeighborRoamIssueBgScanRequest(pMac, &bgScanParams, sessionId, csrNeighborRoamContiguousScanRequestCallback); - vos_mem_free( channelList ); + vos_mem_free(channelList); if (eHAL_STATUS_SUCCESS != status) { @@ -2634,13 +2829,13 @@ VOS_STATUS csrNeighborRoamIssueNeighborRptRequest(tpAniSirGlobal pMac) VOS_STATUS csrNeighborRoamChannelsFilterByCurrentBand( tpAniSirGlobal pMac, tANI_U8* pInputChannelList, - int inputNumOfChannels, + tANI_U8 inputNumOfChannels, tANI_U8* pOutputChannelList, - int* pMergedOutputNumOfChannels + tANI_U8* pMergedOutputNumOfChannels ) { - int i = 0; - int numChannels = 0; + tANI_U8 i = 0; + tANI_U8 numChannels = 0; tANI_U8 currAPoperationChannel = pMac->roam.neighborRoamInfo.currAPoperationChannel; // Check for NULL pointer if (!pInputChannelList) return VOS_STATUS_E_INVAL; @@ -2690,16 +2885,16 @@ VOS_STATUS csrNeighborRoamChannelsFilterByCurrentBand( ---------------------------------------------------------------------------*/ VOS_STATUS csrNeighborRoamMergeChannelLists( tpAniSirGlobal pMac, - tANI_U8 *pInputChannelList, - int inputNumOfChannels, - tANI_U8 *pOutputChannelList, - int outputNumOfChannels, - int *pMergedOutputNumOfChannels + tANI_U8 *pInputChannelList, + tANI_U8 inputNumOfChannels, + tANI_U8 *pOutputChannelList, + tANI_U8 outputNumOfChannels, + tANI_U8 *pMergedOutputNumOfChannels ) { - int i = 0; - int j = 0; - int numChannels = outputNumOfChannels; + tANI_U8 i = 0; + tANI_U8 j = 0; + tANI_U8 numChannels = outputNumOfChannels; // Check for NULL pointer if (!pInputChannelList) return VOS_STATUS_E_INVAL; @@ -2761,6 +2956,7 @@ VOS_STATUS csrNeighborRoamCreateChanListFromNeighborReport(tpAniSirGlobal pMac) tpCsrNeighborRoamControlInfo pNeighborRoamInfo = &pMac->roam.neighborRoamInfo; tANI_U8 numChannels = 0, i = 0; tANI_U8 channelList[MAX_BSS_IN_NEIGHBOR_RPT]; + tANI_U8 mergedOutputNumOfChannels = 0; #if 0 eHalStatus status = eHAL_STATUS_SUCCESS; #endif @@ -2855,13 +3051,33 @@ VOS_STATUS csrNeighborRoamCreateChanListFromNeighborReport(tpAniSirGlobal pMac) vos_mem_copy(pNeighborRoamInfo->roamChannelInfo.currentChannelListInfo.ChannelList, channelList, (numChannels) * sizeof(tANI_U8)); pNeighborRoamInfo->roamChannelInfo.currentChannelListInfo.numOfChannels = numChannels; + /* + * Create a Union of occupied channel list learnt by the DUT along with the Neighbor + * report Channels. This increases the chances of the DUT to get a candidate AP while + * roaming even if the Neighbor Report is not able to provide sufficient information. + * */ + if (pMac->scan.occupiedChannels.numChannels) + { + csrNeighborRoamMergeChannelLists(pMac, + &pMac->scan.occupiedChannels.channelList[0], + pMac->scan.occupiedChannels.numChannels, + &pNeighborRoamInfo->roamChannelInfo.currentChannelListInfo.ChannelList[0], + pNeighborRoamInfo->roamChannelInfo.currentChannelListInfo.numOfChannels, + &mergedOutputNumOfChannels); + pNeighborRoamInfo->roamChannelInfo.currentChannelListInfo.numOfChannels = + mergedOutputNumOfChannels; + + } + /*Indicate the firmware about the update only if any new channels are added. + * Otherwise, the firmware would already be knowing the non-IAPPneighborlist + * channels. There is no need to update.*/ if (numChannels) { smsLog(pMac, LOG1, FL("IAPP Neighbor list callback received as expected in state %d."), pNeighborRoamInfo->neighborRoamState); pNeighborRoamInfo->roamChannelInfo.IAPPNeighborListReceived = eANI_BOOLEAN_TRUE; #ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD - if (pMac->roam.configParam.isRoamOffloadScanEnabled) + if (csrRoamIsRoamOffloadScanEnabled(pMac)) { csrRoamOffloadScan(pMac, ROAM_SCAN_OFFLOAD_UPDATE_CFG, REASON_CHANNEL_LIST_CHANGED); } @@ -2916,9 +3132,8 @@ void csrNeighborRoamRRMNeighborReportResult(void *context, VOS_STATUS vosStatus) /* Now ready for neighbor scan based on the channel list created */ /* Start Neighbor scan timer now. Multiplication by PAL_TIMER_TO_MS_UNIT is to convert ms to us which is what palTimerStart expects */ - status = palTimerStart(pMac->hHdd, pNeighborRoamInfo->neighborScanTimer, - pNeighborRoamInfo->cfgParams.neighborScanPeriod * PAL_TIMER_TO_MS_UNIT, - eANI_BOOLEAN_FALSE); + status = vos_timer_start(&pNeighborRoamInfo->neighborScanTimer, + pNeighborRoamInfo->cfgParams.neighborScanPeriod); if (eHAL_STATUS_SUCCESS != status) { /* Timer start failed.. Should we ASSERT here??? */ @@ -3061,8 +3276,9 @@ tANI_BOOLEAN csrNeighborRoamIsNewConnectedProfile( { fNew = FALSE; } - if (pIes) { - palFreeMemory(pMac->hHdd, pIes); + if (pIes) + { + vos_mem_free(pIes); } } @@ -3123,14 +3339,14 @@ tANI_BOOLEAN csrNeighborRoamConnectedProfileMatch( ---------------------------------------------------------------------------*/ VOS_STATUS csrNeighborRoamPrepareNonOccupiedChannelList( tpAniSirGlobal pMac, - tANI_U8 *pInputChannelList, - int numOfChannels, - tANI_U8 *pOutputChannelList, - int *pOutputNumOfChannels + tANI_U8 *pInputChannelList, + tANI_U8 numOfChannels, + tANI_U8 *pOutputChannelList, + tANI_U8 *pOutputNumOfChannels ) { - int i = 0; - int outputNumOfChannels = 0; // Clear the output number of channels + tANI_U8 i = 0; + tANI_U8 outputNumOfChannels = 0; // Clear the output number of channels tANI_U8 numOccupiedChannels = pMac->scan.occupiedChannels.numChannels; tANI_U8 *pOccupiedChannelList = pMac->scan.occupiedChannels.channelList; @@ -3173,7 +3389,7 @@ VOS_STATUS csrNeighborRoamTransitToCFGChanScan(tpAniSirGlobal pMac) tpCsrNeighborRoamControlInfo pNeighborRoamInfo = &pMac->roam.neighborRoamInfo; eHalStatus status = eHAL_STATUS_SUCCESS; int i = 0; - int numOfChannels = 0; + tANI_U8 numOfChannels = 0; tANI_U8 channelList[WNI_CFG_VALID_CHANNEL_LIST_LEN]; tpCsrChannelInfo currChannelListInfo; #ifdef FEATURE_WLAN_LFR @@ -3258,17 +3474,17 @@ VOS_STATUS csrNeighborRoamTransitToCFGChanScan(tpAniSirGlobal pMac) pNeighborRoamInfo->scanRequestTimeStamp = (tANI_TIMESTAMP)palGetTickCount(pMac->hHdd); - palTimerStop(pMac->hHdd, pNeighborRoamInfo->neighborScanTimer); + vos_timer_stop(&pNeighborRoamInfo->neighborScanTimer); /* We are about to start a fresh scan cycle, * purge non-P2P results from the past */ csrScanFlushSelectiveResult(pMac, VOS_FALSE); - + csrNeighborRoamPerformContiguousBgScan(pMac, sessionId); /* Transition to CFG_CHAN_LIST_SCAN */ CSR_NEIGHBOR_ROAM_STATE_TRANSITION(eCSR_NEIGHBOR_ROAM_STATE_CFG_CHAN_LIST_SCAN); - + return VOS_STATUS_SUCCESS; } #endif @@ -3322,6 +3538,10 @@ VOS_STATUS csrNeighborRoamTransitToCFGChanScan(tpAniSirGlobal pMac) smsLog(pMac, LOGE, FL("Memory allocation for Channel list failed")); return VOS_STATUS_E_RESOURCES; } + if (numOfChannels > WNI_CFG_VALID_CHANNEL_LIST_LEN) + { + numOfChannels = WNI_CFG_VALID_CHANNEL_LIST_LEN; + } vos_mem_copy(currChannelListInfo->ChannelList, channelList, numOfChannels * sizeof(tANI_U8)); @@ -3413,12 +3633,11 @@ VOS_STATUS csrNeighborRoamTransitToCFGChanScan(tpAniSirGlobal pMac) /* We are gonna scan now. Remember the time stamp to filter out results only after this timestamp */ pNeighborRoamInfo->scanRequestTimeStamp = (tANI_TIMESTAMP)palGetTickCount(pMac->hHdd); - palTimerStop(pMac->hHdd, pNeighborRoamInfo->neighborScanTimer); + vos_timer_stop(&pNeighborRoamInfo->neighborScanTimer); /* Start Neighbor scan timer now. Multiplication by PAL_TIMER_TO_MS_UNIT is to convert ms to us which is what palTimerStart expects */ - status = palTimerStart(pMac->hHdd, pNeighborRoamInfo->neighborScanTimer, - pNeighborRoamInfo->cfgParams.neighborScanPeriod * PAL_TIMER_TO_MS_UNIT, - eANI_BOOLEAN_FALSE); + status = vos_timer_start(&pNeighborRoamInfo->neighborScanTimer, + pNeighborRoamInfo->cfgParams.neighborScanPeriod); if (eHAL_STATUS_SUCCESS != status) { @@ -3698,13 +3917,14 @@ eHalStatus csrNeighborRoamIndicateDisconnect(tpAniSirGlobal pMac, tANI_U8 sessio #endif tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, sessionId); - smsLog(pMac, LOGE, FL("Disconnect indication on session %d in state %d"), - sessionId, pNeighborRoamInfo->neighborRoamState); + smsLog(pMac, LOGE, FL("Disconnect indication on session %d in state %d from BSSID : " + MAC_ADDRESS_STR), sessionId, pNeighborRoamInfo->neighborRoamState, + MAC_ADDR_ARRAY(pSession->connectedProfile.bssid)); #ifdef FEATURE_WLAN_LFR /*Free the current previous profile and move the current profile to prev profile.*/ csrRoamFreeConnectProfile(pMac, pPrevProfile); - csrRoamGetConnectProfile(pMac, sessionId, pPrevProfile); + csrRoamCopyConnectProfile(pMac, sessionId, pPrevProfile); #endif if (NULL != pSession) { @@ -3718,21 +3938,20 @@ eHalStatus csrNeighborRoamIndicateDisconnect(tpAniSirGlobal pMac, tANI_U8 sessio return eHAL_STATUS_SUCCESS; } } - } #ifdef FEATURE_WLAN_CCX - { - if (pSession->connectedProfile.isCCXAssoc) - { - vos_mem_copy(&pSession->prevApSSID, &pSession->connectedProfile.SSID, sizeof(tSirMacSSid)); - vos_mem_copy(pSession->prevApBssid, pSession->connectedProfile.bssid, sizeof(tSirMacAddr)); - pSession->prevOpChannel = pSession->connectedProfile.operationChannel; - pSession->isPrevApInfoValid = TRUE; - pSession->roamTS1 = vos_timer_get_system_time(); - - } - } + if (pSession->connectedProfile.isCCXAssoc) + { + vos_mem_copy(&pSession->prevApSSID, &pSession->connectedProfile.SSID, + sizeof(tSirMacSSid)); + vos_mem_copy(pSession->prevApBssid, pSession->connectedProfile.bssid, + sizeof(tSirMacAddr)); + pSession->prevOpChannel = pSession->connectedProfile.operationChannel; + pSession->isPrevApInfoValid = TRUE; + pSession->roamTS1 = vos_timer_get_system_time(); + } #endif + } //if (NULL != pSession) #ifdef RSSI_HACK dumpCmdRSSI = -40; @@ -3743,9 +3962,9 @@ eHalStatus csrNeighborRoamIndicateDisconnect(tpAniSirGlobal pMac, tANI_U8 sessio // Stop scan and neighbor refresh timers. // These are indeed not required when we are in reassociating // state. - palTimerStop(pMac->hHdd, pNeighborRoamInfo->neighborScanTimer); - palTimerStop(pMac->hHdd, pNeighborRoamInfo->neighborResultsRefreshTimer); - palTimerStop(pMac->hHdd, pNeighborRoamInfo->emptyScanRefreshTimer); + vos_timer_stop(&pNeighborRoamInfo->neighborScanTimer); + vos_timer_stop(&pNeighborRoamInfo->neighborResultsRefreshTimer); + vos_timer_stop(&pNeighborRoamInfo->emptyScanRefreshTimer); if (!CSR_IS_ROAM_SUBSTATE_DISASSOC_HO( pMac, sessionId )) { /* * Disconnect indication during Disassoc Handoff sub-state @@ -3757,13 +3976,14 @@ eHalStatus csrNeighborRoamIndicateDisconnect(tpAniSirGlobal pMac, tANI_U8 sessio * in-turn block scans (see csrIsScanAllowed). */ CSR_NEIGHBOR_ROAM_STATE_TRANSITION(eCSR_NEIGHBOR_ROAM_STATE_INIT); + pNeighborRoamInfo->roamChannelInfo.IAPPNeighborListReceived = eANI_BOOLEAN_FALSE; } break; case eCSR_NEIGHBOR_ROAM_STATE_INIT: csrNeighborRoamResetInitStateControlInfo(pMac); #ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD - if(!pMac->roam.configParam.isRoamOffloadScanEnabled) + if (!csrRoamIsRoamOffloadScanEnabled(pMac)) { #endif csrNeighborRoamDeregAllRssiIndication(pMac); @@ -3774,9 +3994,10 @@ eHalStatus csrNeighborRoamIndicateDisconnect(tpAniSirGlobal pMac, tANI_U8 sessio case eCSR_NEIGHBOR_ROAM_STATE_CONNECTED: CSR_NEIGHBOR_ROAM_STATE_TRANSITION(eCSR_NEIGHBOR_ROAM_STATE_INIT) + pNeighborRoamInfo->roamChannelInfo.IAPPNeighborListReceived = eANI_BOOLEAN_FALSE; csrNeighborRoamResetConnectedStateControlInfo(pMac); #ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD - if(!pMac->roam.configParam.isRoamOffloadScanEnabled) + if (!csrRoamIsRoamOffloadScanEnabled(pMac)) { #endif csrNeighborRoamDeregAllRssiIndication(pMac); @@ -3787,9 +4008,10 @@ eHalStatus csrNeighborRoamIndicateDisconnect(tpAniSirGlobal pMac, tANI_U8 sessio case eCSR_NEIGHBOR_ROAM_STATE_CFG_CHAN_LIST_SCAN: CSR_NEIGHBOR_ROAM_STATE_TRANSITION(eCSR_NEIGHBOR_ROAM_STATE_INIT); + pNeighborRoamInfo->roamChannelInfo.IAPPNeighborListReceived = eANI_BOOLEAN_FALSE; csrNeighborRoamResetCfgListChanScanControlInfo(pMac); #ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD - if (!pMac->roam.configParam.isRoamOffloadScanEnabled) + if (!csrRoamIsRoamOffloadScanEnabled(pMac)) { #endif csrNeighborRoamDeregAllRssiIndication(pMac); @@ -3800,14 +4022,15 @@ eHalStatus csrNeighborRoamIndicateDisconnect(tpAniSirGlobal pMac, tANI_U8 sessio case eCSR_NEIGHBOR_ROAM_STATE_PREAUTH_DONE: /* Stop pre-auth to reassoc interval timer */ - palTimerStop(pMac->hHdd, pMac->ft.ftSmeContext.preAuthReassocIntvlTimer); + vos_timer_stop(&pMac->ft.ftSmeContext.preAuthReassocIntvlTimer); case eCSR_NEIGHBOR_ROAM_STATE_REPORT_SCAN: case eCSR_NEIGHBOR_ROAM_STATE_PREAUTHENTICATING: CSR_NEIGHBOR_ROAM_STATE_TRANSITION(eCSR_NEIGHBOR_ROAM_STATE_INIT) + pNeighborRoamInfo->roamChannelInfo.IAPPNeighborListReceived = eANI_BOOLEAN_FALSE; csrNeighborRoamResetPreauthControlInfo(pMac); csrNeighborRoamResetReportScanStateControlInfo(pMac); #ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD - if (!pMac->roam.configParam.isRoamOffloadScanEnabled) + if (!csrRoamIsRoamOffloadScanEnabled(pMac)) { #endif csrNeighborRoamDeregAllRssiIndication(pMac); @@ -3820,12 +4043,15 @@ eHalStatus csrNeighborRoamIndicateDisconnect(tpAniSirGlobal pMac, tANI_U8 sessio NEIGHBOR_ROAM_DEBUG(pMac, LOGW, FL("Received disconnect event in state %d"), pNeighborRoamInfo->neighborRoamState); NEIGHBOR_ROAM_DEBUG(pMac, LOGW, FL("Transitioning to INIT state")); CSR_NEIGHBOR_ROAM_STATE_TRANSITION(eCSR_NEIGHBOR_ROAM_STATE_INIT) + pNeighborRoamInfo->roamChannelInfo.IAPPNeighborListReceived = eANI_BOOLEAN_FALSE; break; } #ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD /*Inform the Firmware to STOP Scanning as the host has a disconnect.*/ if (csrRoamIsStaMode(pMac, sessionId)) + { csrRoamOffloadScan(pMac, ROAM_SCAN_OFFLOAD_STOP, REASON_DISCONNECTED); + } #endif return eHAL_STATUS_SUCCESS; } @@ -3855,20 +4081,39 @@ eHalStatus csrNeighborRoamIndicateConnect(tpAniSirGlobal pMac, tANI_U8 sessionId int init_ft_flag = FALSE; #endif + // if session id invalid then we need return failure + if (NULL == pNeighborRoamInfo || !CSR_IS_SESSION_VALID(pMac, sessionId) || + (NULL == pMac->roam.roamSession[sessionId].pCurRoamProfile)) + { + return eHAL_STATUS_FAILURE; + } smsLog(pMac, LOG2, FL("Connect indication received with session id %d in state %d"), sessionId, pNeighborRoamInfo->neighborRoamState); - // Bail out if this is NOT a STA persona or if a concurrent session is running - if ((pMac->roam.roamSession[sessionId].pCurRoamProfile->csrPersona != VOS_STA_MODE)|| - csrIsConcurrentSessionRunning(pMac)) + // Bail out if this is NOT a STA persona + if (pMac->roam.roamSession[sessionId].pCurRoamProfile->csrPersona != VOS_STA_MODE) { smsLog(pMac, LOGE, FL("Ignoring Connect indication received from a non STA persona." - "sessionId: %d, csrPersonna %d, is multisession %d"), + "sessionId: %d, csrPersonna %d"), sessionId, - (int)pMac->roam.roamSession[sessionId].pCurRoamProfile->csrPersona, - csrIsConcurrentSessionRunning(pMac)); + (int)pMac->roam.roamSession[sessionId].pCurRoamProfile->csrPersona); return eHAL_STATUS_SUCCESS; } + // if a concurrent session is running +#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD + if (eANI_BOOLEAN_FALSE == CSR_IS_FASTROAM_IN_CONCURRENCY_INI_FEATURE_ENABLED(pMac)) + { +#endif + if (csrIsConcurrentSessionRunning(pMac)) + { + smsLog(pMac, LOGE, FL("Ignoring Connect indication received in multisession %d"), + csrIsConcurrentSessionRunning(pMac)); + return eHAL_STATUS_SUCCESS; + } +#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD + } +#endif + switch (pNeighborRoamInfo->neighborRoamState) { case eCSR_NEIGHBOR_ROAM_STATE_REASSOCIATING: @@ -3876,6 +4121,7 @@ eHalStatus csrNeighborRoamIndicateConnect(tpAniSirGlobal pMac, tANI_U8 sessionId { /* Just transition the state to INIT state. Rest of the clean up happens when we get next connect indication */ CSR_NEIGHBOR_ROAM_STATE_TRANSITION(eCSR_NEIGHBOR_ROAM_STATE_INIT) + pNeighborRoamInfo->roamChannelInfo.IAPPNeighborListReceived = eANI_BOOLEAN_FALSE; break; } /* Fall through if the status is SUCCESS */ @@ -3958,13 +4204,16 @@ eHalStatus csrNeighborRoamIndicateConnect(tpAniSirGlobal pMac, tANI_U8 sessionId pNeighborRoamInfo->FTRoamInfo.currentNeighborRptRetryNum = 0; csrNeighborRoamPurgePreauthFailedList(pMac); #ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD - if (pMac->roam.configParam.isRoamOffloadScanEnabled) + if (csrRoamIsRoamOffloadScanEnabled(pMac)) { /*If this is not a INFRA type BSS, then do not send the command * down to firmware.Do not send the START command for other session * connections.*/ if(csrRoamIsStaMode(pMac, sessionId)) - csrRoamOffloadScan(pMac, ROAM_SCAN_OFFLOAD_START, REASON_CONNECT); + { + pNeighborRoamInfo->uOsRequestedHandoff = 0; + csrRoamOffloadScan(pMac, ROAM_SCAN_OFFLOAD_START, REASON_CONNECT); + } } else { #endif @@ -4089,17 +4338,6 @@ eHalStatus csrNeighborRoamInit(tpAniSirGlobal pMac) pNeighborRoamInfo->cfgParams.neighborResultsRefreshPeriod = pMac->roam.configParam.neighborRoamConfig.nNeighborResultsRefreshPeriod; pNeighborRoamInfo->cfgParams.emptyScanRefreshPeriod = pMac->roam.configParam.neighborRoamConfig.nEmptyScanRefreshPeriod; -#if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR) - pNeighborRoamInfo->cfgParams.countryChannelInfo.revision = SME_KR_25; - pNeighborRoamInfo->cfgParams.countryChannelInfo.countryValidChannelList.ChannelList = NULL; - pNeighborRoamInfo->cfgParams.countryChannelInfo.countryValidChannelList.numOfChannels = 0; - - if (0 == strncmp(pMac->scan.countryCodeCurrent, "KR", 2)) - { - csrInitCountryValidChannelList(pMac, SME_KR_25); - } -#endif - pNeighborRoamInfo->cfgParams.channelInfo.numOfChannels = pMac->roam.configParam.neighborRoamConfig.neighborScanChanList.numChannels; @@ -4113,7 +4351,7 @@ eHalStatus csrNeighborRoamInit(tpAniSirGlobal pMac) } /* Update the roam global structure from CFG */ - palCopyMemory(pMac->hHdd, pNeighborRoamInfo->cfgParams.channelInfo.ChannelList, + vos_mem_copy(pNeighborRoamInfo->cfgParams.channelInfo.ChannelList, pMac->roam.configParam.neighborRoamConfig.neighborScanChanList.channelList, pMac->roam.configParam.neighborRoamConfig.neighborScanChanList.numChannels); @@ -4123,14 +4361,13 @@ eHalStatus csrNeighborRoamInit(tpAniSirGlobal pMac) pNeighborRoamInfo->lookupDOWNRssi = 0; pNeighborRoamInfo->uEmptyScanCount = 0; pNeighborRoamInfo->uScanMode = DEFAULT_SCAN; - palZeroMemory(pMac->hHdd, &pNeighborRoamInfo->prevConnProfile, - sizeof(tCsrRoamConnectedProfile)); + vos_mem_set(&pNeighborRoamInfo->prevConnProfile, sizeof(tCsrRoamConnectedProfile), 0); #endif pNeighborRoamInfo->scanRspPending = eANI_BOOLEAN_FALSE; pNeighborRoamInfo->neighborScanTimerInfo.pMac = pMac; pNeighborRoamInfo->neighborScanTimerInfo.sessionId = CSR_SESSION_ID_INVALID; - status = palTimerAlloc(pMac->hHdd, &pNeighborRoamInfo->neighborScanTimer, + status = vos_timer_init(&pNeighborRoamInfo->neighborScanTimer, VOS_TIMER_TYPE_SW, csrNeighborRoamNeighborScanTimerCallback, (void *)&pNeighborRoamInfo->neighborScanTimerInfo); if (eHAL_STATUS_SUCCESS != status) @@ -4141,7 +4378,7 @@ eHalStatus csrNeighborRoamInit(tpAniSirGlobal pMac) return eHAL_STATUS_RESOURCES; } - status = palTimerAlloc(pMac->hHdd, &pNeighborRoamInfo->neighborResultsRefreshTimer, + status = vos_timer_init(&pNeighborRoamInfo->neighborResultsRefreshTimer, VOS_TIMER_TYPE_SW, csrNeighborRoamResultsRefreshTimerCallback, (void *)&pNeighborRoamInfo->neighborScanTimerInfo); if (eHAL_STATUS_SUCCESS != status) @@ -4149,11 +4386,11 @@ eHalStatus csrNeighborRoamInit(tpAniSirGlobal pMac) smsLog(pMac, LOGE, FL("Neighbor results refresh timer allocation failed")); vos_mem_free(pNeighborRoamInfo->cfgParams.channelInfo.ChannelList); pNeighborRoamInfo->cfgParams.channelInfo.ChannelList = NULL; - palTimerFree(pMac->hHdd, pNeighborRoamInfo->neighborScanTimer); + vos_timer_destroy(&pNeighborRoamInfo->neighborScanTimer); return eHAL_STATUS_RESOURCES; } - status = palTimerAlloc(pMac->hHdd, &pNeighborRoamInfo->emptyScanRefreshTimer, + status = vos_timer_init(&pNeighborRoamInfo->emptyScanRefreshTimer, VOS_TIMER_TYPE_SW, csrNeighborRoamEmptyScanRefreshTimerCallback, (void *)&pNeighborRoamInfo->neighborScanTimerInfo); @@ -4162,8 +4399,8 @@ eHalStatus csrNeighborRoamInit(tpAniSirGlobal pMac) smsLog(pMac, LOGE, FL("Empty scan refresh timer allocation failed")); vos_mem_free(pNeighborRoamInfo->cfgParams.channelInfo.ChannelList); pNeighborRoamInfo->cfgParams.channelInfo.ChannelList = NULL; - palTimerFree(pMac->hHdd, pNeighborRoamInfo->neighborScanTimer); - palTimerFree(pMac->hHdd, pNeighborRoamInfo->neighborResultsRefreshTimer); + vos_timer_destroy(&pNeighborRoamInfo->neighborScanTimer); + vos_timer_destroy(&pNeighborRoamInfo->neighborResultsRefreshTimer); return eHAL_STATUS_RESOURCES; } @@ -4173,9 +4410,9 @@ eHalStatus csrNeighborRoamInit(tpAniSirGlobal pMac) smsLog(pMac, LOGE, FL("LL Open of roamable AP List failed")); vos_mem_free(pNeighborRoamInfo->cfgParams.channelInfo.ChannelList); pNeighborRoamInfo->cfgParams.channelInfo.ChannelList = NULL; - palTimerFree(pMac->hHdd, pNeighborRoamInfo->neighborScanTimer); - palTimerFree(pMac->hHdd, pNeighborRoamInfo->neighborResultsRefreshTimer); - palTimerFree(pMac->hHdd, pNeighborRoamInfo->emptyScanRefreshTimer); + vos_timer_destroy(&pNeighborRoamInfo->neighborScanTimer); + vos_timer_destroy(&pNeighborRoamInfo->neighborResultsRefreshTimer); + vos_timer_destroy(&pNeighborRoamInfo->emptyScanRefreshTimer); return eHAL_STATUS_RESOURCES; } @@ -4192,9 +4429,9 @@ eHalStatus csrNeighborRoamInit(tpAniSirGlobal pMac) smsLog(pMac, LOGE, FL("LL Open of roamable AP List failed")); vos_mem_free(pNeighborRoamInfo->cfgParams.channelInfo.ChannelList); pNeighborRoamInfo->cfgParams.channelInfo.ChannelList = NULL; - palTimerFree(pMac->hHdd, pNeighborRoamInfo->neighborScanTimer); - palTimerFree(pMac->hHdd, pNeighborRoamInfo->neighborResultsRefreshTimer); - palTimerFree(pMac->hHdd, pNeighborRoamInfo->emptyScanRefreshTimer); + vos_timer_destroy(&pNeighborRoamInfo->neighborScanTimer); + vos_timer_destroy(&pNeighborRoamInfo->neighborResultsRefreshTimer); + vos_timer_destroy(&pNeighborRoamInfo->emptyScanRefreshTimer); csrLLClose(&pNeighborRoamInfo->roamableAPList); return eHAL_STATUS_RESOURCES; } @@ -4203,7 +4440,7 @@ eHalStatus csrNeighborRoamInit(tpAniSirGlobal pMac) pNeighborRoamInfo->scanRequestTimeStamp = (tANI_TIMESTAMP)palGetTickCount(pMac->hHdd); CSR_NEIGHBOR_ROAM_STATE_TRANSITION(eCSR_NEIGHBOR_ROAM_STATE_INIT) - + pNeighborRoamInfo->roamChannelInfo.IAPPNeighborListReceived = eANI_BOOLEAN_FALSE; return eHAL_STATUS_SUCCESS; } @@ -4235,9 +4472,9 @@ void csrNeighborRoamClose(tpAniSirGlobal pMac) pNeighborRoamInfo->neighborScanTimerInfo.pMac = NULL; pNeighborRoamInfo->neighborScanTimerInfo.sessionId = CSR_SESSION_ID_INVALID; - palTimerFree(pMac->hHdd, pNeighborRoamInfo->neighborScanTimer); - palTimerFree(pMac->hHdd, pNeighborRoamInfo->neighborResultsRefreshTimer); - palTimerFree(pMac->hHdd, pNeighborRoamInfo->emptyScanRefreshTimer); + vos_timer_destroy(&pNeighborRoamInfo->neighborScanTimer); + vos_timer_destroy(&pNeighborRoamInfo->neighborResultsRefreshTimer); + vos_timer_destroy(&pNeighborRoamInfo->emptyScanRefreshTimer); /* Should free up the nodes in the list before closing the double Linked list */ csrNeighborRoamFreeRoamableBSSList(pMac, &pNeighborRoamInfo->roamableAPList); @@ -4297,6 +4534,10 @@ void csrNeighborRoamRequestHandoff(tpAniSirGlobal pMac) extern void csrRoamRoamingStateDisassocRspProcessor( tpAniSirGlobal pMac, tSirSmeDisassocRsp *pSmeDisassocRsp ); tANI_U32 roamId = 0; +#ifdef FEATURE_WLAN_LFR_METRICS + tCsrRoamInfo *roamInfoMetrics; +#endif + if (pMac->roam.neighborRoamInfo.neighborRoamState != eCSR_NEIGHBOR_ROAM_STATE_PREAUTH_DONE) { smsLog(pMac, LOGE, FL("Roam requested when Neighbor roam is in %d state"), @@ -4320,7 +4561,25 @@ void csrNeighborRoamRequestHandoff(tpAniSirGlobal pMac) handoffNode.pBssDescription->bssId[3], handoffNode.pBssDescription->bssId[4], handoffNode.pBssDescription->bssId[5]); - + +#ifdef FEATURE_WLAN_LFR_METRICS + /* LFR metrics - pre-auth completion metric. + Send the event to supplicant that pre-auth successfully completed */ + roamInfoMetrics = vos_mem_malloc(sizeof(tCsrRoamInfo)); + if (NULL == roamInfoMetrics) + { + smsLog(pMac, LOG1, FL("Memory allocation failed!")); + } + else + { + vos_mem_copy((void *)roamInfoMetrics->bssid, + (void *)&handoffNode.pBssDescription->bssId, sizeof(tCsrBssid)); + csrRoamCallCallback(pMac, pNeighborRoamInfo->csrSessionId, + roamInfoMetrics, 0, eCSR_ROAM_HANDOVER_SUCCESS, 0); + vos_mem_free(pRoamInfo); + } +#endif + /* Free the profile.. Just to make sure we dont leak memory here */ csrReleaseProfile(pMac, &pNeighborRoamInfo->csrNeighborRoamProfile); /* Create the Handoff AP profile. Copy the currently connected profile and update only the BSSID and channel number @@ -4476,14 +4735,16 @@ tANI_BOOLEAN csrNeighborRoamStatePreauthDone(tpAniSirGlobal pMac) ---------------------------------------------------------------------------*/ void csrNeighborRoamTranistionPreauthDoneToDisconnected(tpAniSirGlobal pMac) { + tpCsrNeighborRoamControlInfo pNeighborRoamInfo = &pMac->roam.neighborRoamInfo; if (pMac->roam.neighborRoamInfo.neighborRoamState != eCSR_NEIGHBOR_ROAM_STATE_PREAUTH_DONE) return; // Stop timer - palTimerStop(pMac->hHdd, pMac->ft.ftSmeContext.preAuthReassocIntvlTimer); + vos_timer_stop(&pMac->ft.ftSmeContext.preAuthReassocIntvlTimer); // Transition to init state CSR_NEIGHBOR_ROAM_STATE_TRANSITION(eCSR_NEIGHBOR_ROAM_STATE_INIT) + pNeighborRoamInfo->roamChannelInfo.IAPPNeighborListReceived = eANI_BOOLEAN_FALSE; } /* --------------------------------------------------------------------------- @@ -4538,9 +4799,10 @@ eHalStatus csrNeighborRoamCandidateFoundIndHdlr(tpAniSirGlobal pMac, void* pMsg) tpCsrNeighborRoamControlInfo pNeighborRoamInfo = &pMac->roam.neighborRoamInfo; eHalStatus status = eHAL_STATUS_SUCCESS; /* we must be in connected state, if not ignore it */ - if (eCSR_NEIGHBOR_ROAM_STATE_CONNECTED != pNeighborRoamInfo->neighborRoamState) + if ((eCSR_NEIGHBOR_ROAM_STATE_CONNECTED != pNeighborRoamInfo->neighborRoamState) + || (pNeighborRoamInfo->uOsRequestedHandoff)) { - smsLog(pMac, LOGW, FL("Received in not CONNECTED state. Ignore it")); + smsLog(pMac, LOGE, FL("Received in not CONNECTED state OR uOsRequestedHandoff is set. Ignore it")); status = eHAL_STATUS_FAILURE; } else @@ -4558,5 +4820,269 @@ eHalStatus csrNeighborRoamCandidateFoundIndHdlr(tpAniSirGlobal pMac, void* pMsg) return status; } + +/* --------------------------------------------------------------------------- + + \fn csrNeighborRoamProcessHandoffReq + + \brief This function is called start with the handoff process. First do a + SSID scan for the BSSID provided + + \param pMac - The handle returned by macOpen. + + \return eHAL_STATUS_SUCCESS on success, corresponding error code otherwise + +---------------------------------------------------------------------------*/ +eHalStatus csrNeighborRoamProcessHandoffReq(tpAniSirGlobal pMac) +{ + tpCsrNeighborRoamControlInfo pNeighborRoamInfo = &pMac->roam.neighborRoamInfo; + eHalStatus status = eHAL_STATUS_SUCCESS; + tANI_U32 roamId; + tCsrRoamProfile *pProfile = NULL; + tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, pNeighborRoamInfo->csrSessionId ); + tANI_U8 i = 0; + + do + { + roamId = GET_NEXT_ROAM_ID(&pMac->roam); + pProfile = vos_mem_malloc(sizeof(tCsrRoamProfile)); + if ( NULL == pProfile ) + { + smsLog(pMac, LOGE, FL("Memory alloc failed")); + return eHAL_STATUS_FAILURE; + } + vos_mem_set(pProfile, sizeof(tCsrRoamProfile), 0); + status = csrRoamCopyProfile(pMac, pProfile, pSession->pCurRoamProfile); + if(!HAL_STATUS_SUCCESS(status)) + { + smsLog(pMac, LOGE, FL("Profile copy failed")); + break; + } + + //Add the BSSID & Channel + pProfile->BSSIDs.numOfBSSIDs = 1; + pProfile->BSSIDs.bssid = vos_mem_malloc(sizeof(tSirMacAddr) * pProfile->BSSIDs.numOfBSSIDs); + if (NULL == pProfile->BSSIDs.bssid) + { + smsLog(pMac, LOGE, FL("mem alloc failed for BSSID")); + status = eHAL_STATUS_FAILURE; + break; + } + + vos_mem_zero(pProfile->BSSIDs.bssid, sizeof(tSirMacAddr) * pProfile->BSSIDs.numOfBSSIDs); + + /* Populate the BSSID from handoff info received from HDD */ + for (i = 0; i < pProfile->BSSIDs.numOfBSSIDs; i++) + { + vos_mem_copy(&pProfile->BSSIDs.bssid[i], + pNeighborRoamInfo->handoffReqInfo.bssid, sizeof(tSirMacAddr)); + } + + pProfile->ChannelInfo.numOfChannels = 1; + pProfile->ChannelInfo.ChannelList = + vos_mem_malloc(sizeof(*pProfile->ChannelInfo.ChannelList) * + pProfile->ChannelInfo.numOfChannels); + if (NULL == pProfile->ChannelInfo.ChannelList) + { + smsLog(pMac, LOGE, FL("mem alloc failed for ChannelList")); + status = eHAL_STATUS_FAILURE; + break; + } + pProfile->ChannelInfo.ChannelList[0] = pNeighborRoamInfo->handoffReqInfo.channel; + + //clean up csr cache first + //csrScanFlushSelectiveResult(pMac, VOS_FALSE); + //do a SSID scan + status = csrScanForSSID(pMac, pNeighborRoamInfo->csrSessionId, pProfile, roamId, FALSE); + if(!HAL_STATUS_SUCCESS(status)) + { + smsLog(pMac, LOGE, FL("SSID scan failed")); + } + }while(0); + + if(NULL != pProfile) + { + csrReleaseProfile(pMac, pProfile); + vos_mem_free(pProfile); + } + + return status; +} + +/* --------------------------------------------------------------------------- + + \fn csrNeighborRoamSssidScanDone + + \brief This function is called once SSID scan is done. If SSID scan failed + to find our candidate add an entry to csr scan cache ourself before starting + the handoff process + + \param pMac - The handle returned by macOpen. + + \return eHAL_STATUS_SUCCESS on success, corresponding error code otherwise + +---------------------------------------------------------------------------*/ +eHalStatus csrNeighborRoamSssidScanDone(tpAniSirGlobal pMac, eHalStatus status) +{ + tpCsrNeighborRoamControlInfo pNeighborRoamInfo = &pMac->roam.neighborRoamInfo; + eHalStatus hstatus; + + smsLog(pMac, LOGE, FL("called ")); + + /* we must be in connected state, if not ignore it */ + if (eCSR_NEIGHBOR_ROAM_STATE_CONNECTED != pNeighborRoamInfo->neighborRoamState) + { + smsLog(pMac, LOGE, FL("Received in not CONNECTED state. Ignore it")); + return eHAL_STATUS_FAILURE; + } + + //if SSID scan failed to find our candidate add an entry to csr scan cache ourself + if(!HAL_STATUS_SUCCESS(status)) + { + smsLog(pMac, LOGE, FL("Add an entry to csr scan cache")); + hstatus = csrScanCreateEntryInScanCache(pMac, pNeighborRoamInfo->csrSessionId, + pNeighborRoamInfo->handoffReqInfo.bssid, + pNeighborRoamInfo->handoffReqInfo.channel); + if (eHAL_STATUS_SUCCESS != hstatus) + { + smsLog(pMac, LOGE, FL("csrScanCreateEntryInScanCache failed with status %d"), hstatus); + return eHAL_STATUS_FAILURE; + } + } + + /* Now we have completed scanning for the candidate provided by HDD. Let move on to HO*/ + hstatus = csrNeighborRoamProcessScanComplete(pMac); + + if (eHAL_STATUS_SUCCESS != hstatus) + { + smsLog(pMac, LOGE, FL("Neighbor scan process complete failed with status %d"), hstatus); + return eHAL_STATUS_FAILURE; + } + return eHAL_STATUS_SUCCESS; +} + +/* --------------------------------------------------------------------------- + + \fn csrNeighborRoamHandoffReqHdlr + + \brief This function is called by CSR as soon as it gets a handoff request + to SME via MC thread + + \param pMac - The handle returned by macOpen. + pMsg - Msg sent by HDD + + \return eHAL_STATUS_SUCCESS on success, corresponding error code otherwise + +---------------------------------------------------------------------------*/ +eHalStatus csrNeighborRoamHandoffReqHdlr(tpAniSirGlobal pMac, void* pMsg) +{ + tpCsrNeighborRoamControlInfo pNeighborRoamInfo = &pMac->roam.neighborRoamInfo; + tAniHandoffReq *pHandoffReqInfo; + eHalStatus status = eHAL_STATUS_SUCCESS; + /* we must be in connected state, if not ignore it */ + if (eCSR_NEIGHBOR_ROAM_STATE_CONNECTED != pNeighborRoamInfo->neighborRoamState) + { + smsLog(pMac, LOGE, FL("Received in not CONNECTED state. Ignore it")); + status = eHAL_STATUS_FAILURE; + } + else + { + //save the handoff info came from HDD as part of the reassoc req + pHandoffReqInfo = (tAniHandoffReq *)pMsg; + if (NULL != pHandoffReqInfo) + { + //sanity check + if (VOS_FALSE == vos_mem_compare(pHandoffReqInfo->bssid, + pNeighborRoamInfo->currAPbssid, + sizeof(tSirMacAddr))) + { + + pNeighborRoamInfo->handoffReqInfo.channel = pHandoffReqInfo->channel; + vos_mem_copy(pNeighborRoamInfo->handoffReqInfo.bssid, + pHandoffReqInfo->bssid, + 6); + pNeighborRoamInfo->uOsRequestedHandoff = 1; + status = csrRoamOffloadScan(pMac, ROAM_SCAN_OFFLOAD_STOP, + REASON_OS_REQUESTED_ROAMING_NOW); + if (eHAL_STATUS_SUCCESS != status) + { + smsLog(pMac, LOGE, FL("csrRoamOffloadScan failed")); + pNeighborRoamInfo->uOsRequestedHandoff = 0; + } + } + else + { + smsLog(pMac, LOGE, FL("Received req has same BSSID as current AP!!")); + status = eHAL_STATUS_FAILURE; + } + } + else + { + smsLog(pMac, LOGE, FL("Received msg is NULL")); + status = eHAL_STATUS_FAILURE; + } + } + + return status; +} + +/* --------------------------------------------------------------------------- + + \fn csrNeighborRoamProceedWithHandoffReq + + \brief This function is called by CSR as soon as it gets rsp back for + ROAM_SCAN_OFFLOAD_STOP with reason REASON_OS_REQUESTED_ROAMING_NOW + + \param pMac - The handle returned by macOpen. + + \return eHAL_STATUS_SUCCESS on success, corresponding error code otherwise + +---------------------------------------------------------------------------*/ +eHalStatus csrNeighborRoamProceedWithHandoffReq(tpAniSirGlobal pMac) +{ + tpCsrNeighborRoamControlInfo pNeighborRoamInfo = &pMac->roam.neighborRoamInfo; + eHalStatus status = eHAL_STATUS_SUCCESS; + /* we must be in connected state, if not ignore it */ + if ((eCSR_NEIGHBOR_ROAM_STATE_CONNECTED != pNeighborRoamInfo->neighborRoamState) + || (!pNeighborRoamInfo->uOsRequestedHandoff)) + { + smsLog(pMac, LOGE, FL("Received in not CONNECTED state or uOsRequestedHandoff is not set. Ignore it")); + status = eHAL_STATUS_FAILURE; + } + else + { + //Let's go ahead with handoff + status = csrNeighborRoamProcessHandoffReq(pMac); + } + if(!HAL_STATUS_SUCCESS(status)) + { + pNeighborRoamInfo->uOsRequestedHandoff = 0; + } + return status; +} + +/* --------------------------------------------------------------------------- + + \fn csrNeighborRoamStartLfrScan + + \brief This function is called if HDD requested handoff failed for some + reason. start the LFR logic at that point.By the time, this function is + called, a STOP command has already been issued. + + \param pMac - The handle returned by macOpen. + + \return eHAL_STATUS_SUCCESS on success, corresponding error code otherwise + +---------------------------------------------------------------------------*/ +eHalStatus csrNeighborRoamStartLfrScan(tpAniSirGlobal pMac) +{ + tpCsrNeighborRoamControlInfo pNeighborRoamInfo = &pMac->roam.neighborRoamInfo; + pNeighborRoamInfo->uOsRequestedHandoff = 0; + /* There is no candidate or We are not roaming Now. + * Inform the FW to restart Roam Offload Scan */ + csrRoamOffloadScan(pMac, ROAM_SCAN_OFFLOAD_START, REASON_NO_CAND_FOUND_OR_NOT_ROAMING_NOW); + + return eHAL_STATUS_SUCCESS; +} #endif //WLAN_FEATURE_ROAM_SCAN_OFFLOAD #endif /* WLAN_FEATURE_NEIGHBOR_ROAMING */ diff --git a/CORE/SME/src/csr/csrTdlsProcess.c b/CORE/SME/src/csr/csrTdlsProcess.c index 5ea523b4f7a7..cca0add5a3fe 100644 --- a/CORE/SME/src/csr/csrTdlsProcess.c +++ b/CORE/SME/src/csr/csrTdlsProcess.c @@ -128,20 +128,23 @@ eHalStatus csrTdlsSendMgmtReq(tHalHandle hHal, tANI_U8 sessionId, tCsrTdlsSendMg tdlsSendMgmtCmdInfo->dialog = tdlsSendMgmt->dialog ; tdlsSendMgmtCmdInfo->statusCode = tdlsSendMgmt->statusCode ; tdlsSendMgmtCmdInfo->responder = tdlsSendMgmt->responder; - palCopyMemory(pMac->hHdd, tdlsSendMgmtCmdInfo->peerMac, + vos_mem_copy(tdlsSendMgmtCmdInfo->peerMac, tdlsSendMgmt->peerMac, sizeof(tSirMacAddr)) ; if( (0 != tdlsSendMgmt->len) && (NULL != tdlsSendMgmt->buf) ) { - status = palAllocateMemory( pMac->hHdd, (void **)&tdlsSendMgmtCmdInfo->buf, - tdlsSendMgmt->len ); + tdlsSendMgmtCmdInfo->buf = vos_mem_malloc(tdlsSendMgmt->len); + if ( NULL == tdlsSendMgmtCmdInfo->buf ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; if(!HAL_STATUS_SUCCESS( status ) ) { smsLog( pMac, LOGE, FL("Alloc Failed") ); VOS_ASSERT(0) ; return status ; } - palCopyMemory(pMac->hHdd, tdlsSendMgmtCmdInfo->buf, + vos_mem_copy(tdlsSendMgmtCmdInfo->buf, tdlsSendMgmt->buf, tdlsSendMgmt->len ); tdlsSendMgmtCmdInfo->len = tdlsSendMgmt->len; } @@ -187,33 +190,33 @@ eHalStatus csrTdlsChangePeerSta(tHalHandle hHal, tANI_U8 sessionId, tSirMacAddr tdlsAddStaCmd->sessionId = sessionId; - palCopyMemory(pMac->hHdd, tdlsAddStaCmdInfo->peerMac, + vos_mem_copy(tdlsAddStaCmdInfo->peerMac, peerMac, sizeof(tSirMacAddr)) ; tdlsAddStaCmdInfo->capability = pstaParams->capability; tdlsAddStaCmdInfo->uapsdQueues = pstaParams->uapsd_queues; tdlsAddStaCmdInfo->maxSp = pstaParams->max_sp; - palCopyMemory(pMac->hHdd, tdlsAddStaCmdInfo->extnCapability, + vos_mem_copy(tdlsAddStaCmdInfo->extnCapability, pstaParams->extn_capability, sizeof(pstaParams->extn_capability)); tdlsAddStaCmdInfo->htcap_present = pstaParams->htcap_present; - if(pstaParams->htcap_present) - palCopyMemory(pMac->hHdd, &tdlsAddStaCmdInfo->HTCap, - &pstaParams->HTCap, sizeof(pstaParams->HTCap)); + if(pstaParams->htcap_present) + vos_mem_copy(&tdlsAddStaCmdInfo->HTCap, + &pstaParams->HTCap, sizeof(pstaParams->HTCap)); else - palZeroMemory(pMac->hHdd, &tdlsAddStaCmdInfo->HTCap, sizeof(pstaParams->HTCap)); + vos_mem_set(&tdlsAddStaCmdInfo->HTCap, sizeof(pstaParams->HTCap), 0); tdlsAddStaCmdInfo->vhtcap_present = pstaParams->vhtcap_present; if(pstaParams->vhtcap_present) - palCopyMemory(pMac->hHdd, &tdlsAddStaCmdInfo->VHTCap, + vos_mem_copy(&tdlsAddStaCmdInfo->VHTCap, &pstaParams->VHTCap, sizeof(pstaParams->VHTCap)); else - palZeroMemory(pMac->hHdd, &tdlsAddStaCmdInfo->VHTCap, sizeof(pstaParams->VHTCap)); + vos_mem_set(&tdlsAddStaCmdInfo->VHTCap, sizeof(pstaParams->VHTCap), 0); - tdlsAddStaCmdInfo->supportedRatesLen = pstaParams->supported_rates_len; + tdlsAddStaCmdInfo->supportedRatesLen = pstaParams->supported_rates_len; if (0 != pstaParams->supported_rates_len) - palCopyMemory(pMac->hHdd, &tdlsAddStaCmdInfo->supportedRates, + vos_mem_copy(&tdlsAddStaCmdInfo->supportedRates, pstaParams->supported_rates, pstaParams->supported_rates_len); @@ -226,6 +229,46 @@ eHalStatus csrTdlsChangePeerSta(tHalHandle hHal, tANI_U8 sessionId, tSirMacAddr return status ; } +/* + * TDLS request API, called from HDD to Send Link Establishment Parameters + */ +VOS_STATUS csrTdlsSendLinkEstablishParams(tHalHandle hHal, + tANI_U8 sessionId, + tSirMacAddr peerMac, + tCsrTdlsLinkEstablishParams *tdlsLinkEstablishParams) +{ + tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + tSmeCmd *tdlsLinkEstablishCmd; + eHalStatus status = eHAL_STATUS_FAILURE ; + //If connected and in Infra. Only then allow this + if( CSR_IS_SESSION_VALID( pMac, sessionId ) && + csrIsConnStateConnectedInfra( pMac, sessionId ) && + (NULL != peerMac) ) + { + tdlsLinkEstablishCmd = csrGetCommandBuffer(pMac) ; + + if(tdlsLinkEstablishCmd) + { + tTdlsLinkEstablishCmdInfo *tdlsLinkEstablishCmdInfo = + &tdlsLinkEstablishCmd->u.tdlsCmd.u.tdlsLinkEstablishCmdInfo ; + + tdlsLinkEstablishCmd->sessionId = sessionId; + + vos_mem_copy( tdlsLinkEstablishCmdInfo->peerMac, + peerMac, sizeof(tSirMacAddr)); + tdlsLinkEstablishCmdInfo->isBufSta = tdlsLinkEstablishParams->isBufSta; + tdlsLinkEstablishCmdInfo->isResponder= tdlsLinkEstablishParams->isResponder; + tdlsLinkEstablishCmdInfo->maxSp= tdlsLinkEstablishParams->maxSp; + tdlsLinkEstablishCmdInfo->uapsdQueues= tdlsLinkEstablishParams->uapsdQueues; + tdlsLinkEstablishCmd->command = eSmeCommandTdlsLinkEstablish ; + tdlsLinkEstablishCmd->u.tdlsCmd.size = sizeof(tTdlsLinkEstablishCmdInfo) ; + smePushCommand(pMac, tdlsLinkEstablishCmd, FALSE) ; + status = eHAL_STATUS_SUCCESS ; + } + } + + return status ; +} /* * TDLS request API, called from HDD to add a TDLS peer @@ -251,7 +294,7 @@ eHalStatus csrTdlsAddPeerSta(tHalHandle hHal, tANI_U8 sessionId, tSirMacAddr pee tdlsAddStaCmd->sessionId = sessionId; tdlsAddStaCmdInfo->tdlsAddOper = TDLS_OPER_ADD; - palCopyMemory(pMac->hHdd, tdlsAddStaCmdInfo->peerMac, + vos_mem_copy( tdlsAddStaCmdInfo->peerMac, peerMac, sizeof(tSirMacAddr)) ; tdlsAddStaCmd->command = eSmeCommandTdlsAddPeer ; @@ -287,7 +330,7 @@ eHalStatus csrTdlsDelPeerSta(tHalHandle hHal, tANI_U8 sessionId, tSirMacAddr pee tdlsDelStaCmd->sessionId = sessionId; - palCopyMemory(pMac->hHdd, tdlsDelStaCmdInfo->peerMac, + vos_mem_copy(tdlsDelStaCmdInfo->peerMac, peerMac, sizeof(tSirMacAddr)) ; tdlsDelStaCmd->command = eSmeCommandTdlsDelPeer ; @@ -322,7 +365,7 @@ eHalStatus csrTdlsDiscoveryReq(tHalHandle hHal, tANI_U8 sessionId, tCsrTdlsDisRe tdlsDisReqCmd->sessionId = sessionId; disReqCmdInfo->tdlsDisType = tdlsDisReq->disType ; - palCopyMemory(pMac->hHdd, disReqCmdInfo->peerMac, + vos_mem_copy(disReqCmdInfo->peerMac, tdlsDisReq->peerMac, sizeof(tSirMacAddr)) ; tdlsDisReqCmd->command = eSmeCommandTdlsDiscovery ; tdlsDisReqCmd->u.tdlsCmd.size = sizeof(tTdlsDisReqCmdinfo) ; @@ -355,7 +398,7 @@ eHalStatus csrTdlsSetupReq(tHalHandle hHal, tANI_U8 sessionId, tCsrTdlsSetupRequ tdlsSetupReqCmd->sessionId = sessionId; - palCopyMemory(pMac->hHdd, setupCmdInfo->peerMac, + vos_mem_copy(setupCmdInfo->peerMac, tdlsSetupReq->peerMac, sizeof(tSirMacAddr)) ; tdlsSetupReqCmd->command = eSmeCommandTdlsLinkSetup ; tdlsSetupReqCmd->u.tdlsCmd.size = sizeof(tTdlsLinkSetupReqCmdinfo) ; @@ -388,7 +431,7 @@ eHalStatus csrTdlsTeardownReq(tHalHandle hHal, tANI_U8 sessionId, tdlsTeardownReqCmd->sessionId = sessionId; - palCopyMemory(pMac->hHdd, teardownCmdInfo->peerMac, + vos_mem_copy(teardownCmdInfo->peerMac, tdlsTeardownReq->peerMac, sizeof(tSirMacAddr)) ; tdlsTeardownReqCmd->command = eSmeCommandTdlsLinkTear ; tdlsTeardownReqCmd->u.tdlsCmd.size = @@ -439,8 +482,12 @@ eHalStatus csrTdlsProcessSendMgmt( tpAniSirGlobal pMac, tSmeCmd *cmd ) return eHAL_STATUS_FAILURE; } - status = palAllocateMemory( pMac->hHdd, (void **)&tdlsSendMgmtReq, - (sizeof(tSirTdlsSendMgmtReq) + tdlsSendMgmtCmdInfo->len ) ); + tdlsSendMgmtReq = vos_mem_malloc( + sizeof(tSirTdlsSendMgmtReq) + tdlsSendMgmtCmdInfo->len); + if ( NULL == tdlsSendMgmtReq ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; if (!HAL_STATUS_SUCCESS( status ) ) { @@ -456,15 +503,15 @@ eHalStatus csrTdlsProcessSendMgmt( tpAniSirGlobal pMac, tSmeCmd *cmd ) tdlsSendMgmtReq->statusCode = tdlsSendMgmtCmdInfo->statusCode ; tdlsSendMgmtReq->responder = tdlsSendMgmtCmdInfo->responder; - palCopyMemory(pMac->hHdd, tdlsSendMgmtReq->bssid, + vos_mem_copy(tdlsSendMgmtReq->bssid, pSession->pConnectBssDesc->bssId, sizeof (tSirMacAddr)); - palCopyMemory(pMac->hHdd, tdlsSendMgmtReq->peerMac, + vos_mem_copy(tdlsSendMgmtReq->peerMac, tdlsSendMgmtCmdInfo->peerMac, sizeof(tSirMacAddr)) ; if(tdlsSendMgmtCmdInfo->len && tdlsSendMgmtCmdInfo->buf) { - palCopyMemory(pMac->hHdd, tdlsSendMgmtReq->addIe, tdlsSendMgmtCmdInfo->buf, + vos_mem_copy(tdlsSendMgmtReq->addIe, tdlsSendMgmtCmdInfo->buf, tdlsSendMgmtCmdInfo->len); } @@ -479,7 +526,7 @@ eHalStatus csrTdlsProcessSendMgmt( tpAniSirGlobal pMac, tSmeCmd *cmd ) if(tdlsSendMgmtCmdInfo->len && tdlsSendMgmtCmdInfo->buf) { //Done with the buf. Free it. - palFreeMemory( pMac->hHdd, tdlsSendMgmtCmdInfo->buf ); + vos_mem_free( tdlsSendMgmtCmdInfo->buf ); tdlsSendMgmtCmdInfo->len = 0; } @@ -499,8 +546,11 @@ eHalStatus csrTdlsProcessAddSta( tpAniSirGlobal pMac, tSmeCmd *cmd ) return eHAL_STATUS_FAILURE; } - status = palAllocateMemory( pMac->hHdd, (void **)&tdlsAddStaReq, - (sizeof(tSirTdlsAddStaReq) ) ); + tdlsAddStaReq = vos_mem_malloc(sizeof(tSirTdlsAddStaReq)); + if ( NULL == tdlsAddStaReq ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; if (!HAL_STATUS_SUCCESS( status ) ) { @@ -513,27 +563,27 @@ eHalStatus csrTdlsProcessAddSta( tpAniSirGlobal pMac, tSmeCmd *cmd ) //Using dialog as transactionId. This can be used to match response with request tdlsAddStaReq->transactionId = 0; - palCopyMemory(pMac->hHdd, tdlsAddStaReq->bssid, + vos_mem_copy( tdlsAddStaReq->bssid, pSession->pConnectBssDesc->bssId, sizeof (tSirMacAddr)); - palCopyMemory(pMac->hHdd, tdlsAddStaReq->peerMac, + vos_mem_copy( tdlsAddStaReq->peerMac, tdlsAddStaCmdInfo->peerMac, sizeof(tSirMacAddr)) ; tdlsAddStaReq->capability = tdlsAddStaCmdInfo->capability; tdlsAddStaReq->uapsd_queues = tdlsAddStaCmdInfo->uapsdQueues; tdlsAddStaReq->max_sp = tdlsAddStaCmdInfo->maxSp; - palCopyMemory(pMac->hHdd, tdlsAddStaReq->extn_capability, + vos_mem_copy( tdlsAddStaReq->extn_capability, tdlsAddStaCmdInfo->extnCapability, SIR_MAC_MAX_EXTN_CAP); tdlsAddStaReq->htcap_present = tdlsAddStaCmdInfo->htcap_present; - palCopyMemory(pMac->hHdd, &tdlsAddStaReq->htCap, + vos_mem_copy( &tdlsAddStaReq->htCap, &tdlsAddStaCmdInfo->HTCap, sizeof(tdlsAddStaCmdInfo->HTCap)); tdlsAddStaReq->vhtcap_present = tdlsAddStaCmdInfo->vhtcap_present; - palCopyMemory(pMac->hHdd, &tdlsAddStaReq->vhtCap, + vos_mem_copy( &tdlsAddStaReq->vhtCap, &tdlsAddStaCmdInfo->VHTCap, sizeof(tdlsAddStaCmdInfo->VHTCap)); tdlsAddStaReq->supported_rates_length = tdlsAddStaCmdInfo->supportedRatesLen; - palCopyMemory(pMac->hHdd, &tdlsAddStaReq->supported_rates, + vos_mem_copy( &tdlsAddStaReq->supported_rates, tdlsAddStaCmdInfo->supportedRates, tdlsAddStaCmdInfo->supportedRatesLen); // Send the request to PE. @@ -560,8 +610,12 @@ eHalStatus csrTdlsProcessDelSta( tpAniSirGlobal pMac, tSmeCmd *cmd ) return eHAL_STATUS_FAILURE; } - status = palAllocateMemory( pMac->hHdd, (void **)&tdlsDelStaReq, - (sizeof(tSirTdlsDelStaReq) ) ); + tdlsDelStaReq = vos_mem_malloc(sizeof(tSirTdlsDelStaReq)); + if ( NULL == tdlsDelStaReq ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; + if (!HAL_STATUS_SUCCESS( status ) ) { @@ -573,10 +627,10 @@ eHalStatus csrTdlsProcessDelSta( tpAniSirGlobal pMac, tSmeCmd *cmd ) //Using dialog as transactionId. This can be used to match response with request tdlsDelStaReq->transactionId = 0; - palCopyMemory(pMac->hHdd, tdlsDelStaReq->bssid, + vos_mem_copy( tdlsDelStaReq->bssid, pSession->pConnectBssDesc->bssId, sizeof (tSirMacAddr)); - palCopyMemory(pMac->hHdd, tdlsDelStaReq->peerMac, + vos_mem_copy( tdlsDelStaReq->peerMac, tdlsDelStaCmdInfo->peerMac, sizeof(tSirMacAddr)) ; // Send the request to PE. @@ -635,6 +689,15 @@ eHalStatus csrTdlsProcessCmd(tpAniSirGlobal pMac, tSmeCmd *cmd) } } break; + case eSmeCommandTdlsLinkEstablish: + { + status = csrTdlsProcessLinkEstablish( pMac, cmd ); + if(HAL_STATUS_SUCCESS( status ) ) + { + status = eANI_BOOLEAN_FALSE ; + } + } + break; #ifdef FEATURE_WLAN_TDLS_INTERNAL case eSmeCommandTdlsDiscovery: { @@ -642,8 +705,11 @@ eHalStatus csrTdlsProcessCmd(tpAniSirGlobal pMac, tSmeCmd *cmd) tSirTdlsDisReq *disReq = NULL ; tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, cmd->sessionId ); - status = palAllocateMemory( pMac->hHdd, (void **)&disReq, - sizeof(tSirTdlsDisReq)); + disReq = vos_mem_malloc(sizeof(tSirTdlsDisReq)); + if ( NULL == disReq ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; if(!HAL_STATUS_SUCCESS( status ) ) { @@ -654,9 +720,9 @@ eHalStatus csrTdlsProcessCmd(tpAniSirGlobal pMac, tSmeCmd *cmd) disReq->sessionId = cmd->sessionId; disReq->transactionId = 0; /* TODO ? */ disReq->reqType = disReqCmdInfo->tdlsDisType ; - palCopyMemory(pMac->hHdd, disReq->bssid, pSession->pConnectBssDesc->bssId, + vos_mem_copy( disReq->bssid, pSession->pConnectBssDesc->bssId, sizeof (tSirMacAddr)); - palCopyMemory(pMac->hHdd, disReq->peerMac, + vos_mem_copy( disReq->peerMac, disReqCmdInfo->peerMac, sizeof(tSirMacAddr)) ; smsLog( pMac, LOGE, "sending TDLS discovery to PE " ); status = tdlsSendMessage(pMac, eWNI_SME_TDLS_DISCOVERY_START_REQ, @@ -676,8 +742,12 @@ eHalStatus csrTdlsProcessCmd(tpAniSirGlobal pMac, tSmeCmd *cmd) tSirTdlsSetupReq *setupReq = NULL ; tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, cmd->sessionId ); - status = palAllocateMemory( pMac->hHdd, (void **)&setupReq, - sizeof(tSirTdlsSetupReq)); + setupReq = vos_mem_malloc(sizeof(tSirTdlsSetupReq)); + if ( NULL == setupReq ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; + if(!HAL_STATUS_SUCCESS( status ) ) { @@ -688,9 +758,9 @@ eHalStatus csrTdlsProcessCmd(tpAniSirGlobal pMac, tSmeCmd *cmd) setupReq->sessionId = cmd->sessionId; setupReq->transactionId = 0; /* TODO ? */ - palCopyMemory(pMac->hHdd, setupReq->bssid, pSession->pConnectBssDesc->bssId, + vos_mem_copy( setupReq->bssid, pSession->pConnectBssDesc->bssId, sizeof (tSirMacAddr)); - palCopyMemory(pMac->hHdd, setupReq->peerMac, + vos_mem_copy( setupReq->peerMac, linkSetupReqCmdInfo->peerMac, sizeof(tSirMacAddr)) ; VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, @@ -712,8 +782,12 @@ eHalStatus csrTdlsProcessCmd(tpAniSirGlobal pMac, tSmeCmd *cmd) tSirTdlsTeardownReq *teardownReq = NULL ; tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, cmd->sessionId ); - status = palAllocateMemory( pMac->hHdd, (void **)&teardownReq, - sizeof(tSirTdlsTeardownReq)); + teardownReq = vos_mem_malloc(sizeof(tSirTdlsTeardownReq)); + if ( NULL == teardownReq ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; + if(!HAL_STATUS_SUCCESS( status ) ) { smsLog( pMac, LOGE, "teardown Req alloc failed " ); @@ -723,9 +797,9 @@ eHalStatus csrTdlsProcessCmd(tpAniSirGlobal pMac, tSmeCmd *cmd) teardownReq->sessionId = cmd->sessionId; teardownReq->transactionId = 0; /* TODO ? */ - palCopyMemory(pMac->hHdd, teardownReq->bssid, pSession->pConnectBssDesc->bssId, + vos_mem_copy( teardownReq->bssid, pSession->pConnectBssDesc->bssId, sizeof (tSirMacAddr)); - palCopyMemory(pMac->hHdd, &teardownReq->peerMac, + vos_mem_copy( &teardownReq->peerMac, linkTeardownCmdInfo->peerMac, sizeof(tSirMacAddr)) ; VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, ("teardown request..")) ; @@ -750,6 +824,46 @@ eHalStatus csrTdlsProcessCmd(tpAniSirGlobal pMac, tSmeCmd *cmd) return status ; } +eHalStatus csrTdlsProcessLinkEstablish( tpAniSirGlobal pMac, tSmeCmd *cmd ) +{ + tTdlsLinkEstablishCmdInfo *tdlsLinkEstablishCmdInfo = &cmd->u.tdlsCmd.u.tdlsLinkEstablishCmdInfo ; + tSirTdlsLinkEstablishReq *tdlsLinkEstablishReq = NULL ; + eHalStatus status = eHAL_STATUS_FAILURE; + tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, cmd->sessionId ); + + tdlsLinkEstablishReq = vos_mem_malloc(sizeof(tSirTdlsLinkEstablishReq)); + + if (tdlsLinkEstablishReq == NULL) + { + smsLog( pMac, LOGE, FL("alloc failed \n") ); + VOS_ASSERT(0) ; + return status ; + } + tdlsLinkEstablishReq->sessionId = cmd->sessionId; + //Using dialog as transactionId. This can be used to match response with request + tdlsLinkEstablishReq->transactionId = 0; + vos_mem_copy(tdlsLinkEstablishReq->peerMac, + tdlsLinkEstablishCmdInfo->peerMac, sizeof(tSirMacAddr)); + vos_mem_copy(tdlsLinkEstablishReq->bssid, pSession->pConnectBssDesc->bssId, + sizeof (tSirMacAddr)); + tdlsLinkEstablishReq->isBufSta = tdlsLinkEstablishCmdInfo->isBufSta; + tdlsLinkEstablishReq->isResponder= tdlsLinkEstablishCmdInfo->isResponder; + tdlsLinkEstablishReq->uapsdQueues= tdlsLinkEstablishCmdInfo->uapsdQueues; + tdlsLinkEstablishReq->maxSp= tdlsLinkEstablishCmdInfo->maxSp; + + + // Send the request to PE. + smsLog( pMac, LOGE, "sending TDLS Link Establish Request to PE \n" ); + status = tdlsSendMessage(pMac, eWNI_SME_TDLS_LINK_ESTABLISH_REQ, + (void *)tdlsLinkEstablishReq, + sizeof(tSirTdlsLinkEstablishReq)); + if (!HAL_STATUS_SUCCESS( status ) ) + { + smsLog( pMac, LOGE, FL("Failed to send request to MAC\n")); + } + return status; +} + #ifdef FEATURE_WLAN_TDLS_INTERNAL /* * Find specific TDLS peer (based on peer MAC address). @@ -768,7 +882,7 @@ tCsrTdlsPeerLinkinfo *findTdlsPeer(tpAniSirGlobal pMac, tdlsPeerStaLink) ; peerInfo = &peerLinkInfo->tdlsDisPeerInfo ; - if(palEqualMemory( pMac->hHdd,(tANI_U8 *)peerInfo->peerMac, + if ( vos_mem_compare( (tANI_U8 *)peerInfo->peerMac, (tANI_U8 *) peerMac, sizeof(tSirMacAddr)) ) { break ; @@ -793,7 +907,8 @@ static eHalStatus tdlsDeleteTdlsPeerInfo(tpAniSirGlobal pMac, if((csrLLRemoveEntry(&disInfo->tdlsPotentialPeerList, &peerInfo->tdlsPeerStaLink, LL_ACCESS_NOLOCK))) { - status = palFreeMemory(pMac->hHdd, (void *)peerInfo) ; + vos_mem_free((void *)peerInfo) ; + status = eHAL_STATUS_SUCCESS; } @@ -845,8 +960,11 @@ static eHalStatus tdlsSaveTdlsPeerInfo(tpAniSirGlobal pMac, * at the time the peer node is getting deleted, possible case is * teardown */ - status = palAllocateMemory( pMac->hHdd, (void **)&peerInfo, - sizeof(tCsrTdlsPeerLinkinfo)); + peerInfo = vos_mem_malloc(sizeof(tCsrTdlsPeerLinkinfo)); + if ( NULL = peerInfo ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; /* * go ahead and copy peerInfo and insert this node info discovery rsp @@ -854,9 +972,9 @@ static eHalStatus tdlsSaveTdlsPeerInfo(tpAniSirGlobal pMac, */ if (HAL_STATUS_SUCCESS(status)) { - palZeroMemory(pMac->hHdd, &peerInfo->tdlsDisPeerInfo, - sizeof(tSirTdlsPeerInfo)); - palCopyMemory(pMac->hHdd, &peerInfo->tdlsDisPeerInfo, disPeerInfo, + vos_mem_set( &peerInfo->tdlsDisPeerInfo, + sizeof(tSirTdlsPeerInfo), 0); + vos_mem_copy( &peerInfo->tdlsDisPeerInfo, disPeerInfo, sizeof(tSirTdlsPeerInfo)); /* @@ -897,7 +1015,7 @@ eHalStatus tdlsMsgProcessor(tpAniSirGlobal pMac, v_U16_t msgType, tSirTdlsAddStaRsp *addStaRsp = (tSirTdlsAddStaRsp *) pMsgBuf ; eCsrRoamResult roamResult ; tCsrRoamInfo roamInfo = {0} ; - palCopyMemory(pMac->hHdd, &roamInfo.peerMac, addStaRsp->peerMac, + vos_mem_copy( &roamInfo.peerMac, addStaRsp->peerMac, sizeof(tSirMacAddr)) ; roamInfo.staId = addStaRsp->staId ; roamInfo.ucastSig = addStaRsp->ucastSig ; @@ -924,7 +1042,7 @@ eHalStatus tdlsMsgProcessor(tpAniSirGlobal pMac, v_U16_t msgType, tSirTdlsDelStaRsp *delStaRsp = (tSirTdlsDelStaRsp *) pMsgBuf ; tCsrRoamInfo roamInfo = {0} ; - palCopyMemory(pMac->hHdd, &roamInfo.peerMac, delStaRsp->peerMac, + vos_mem_copy( &roamInfo.peerMac, delStaRsp->peerMac, sizeof(tSirMacAddr)) ; roamInfo.staId = delStaRsp->staId ; roamInfo.statusCode = delStaRsp->statusCode ; @@ -943,7 +1061,7 @@ eHalStatus tdlsMsgProcessor(tpAniSirGlobal pMac, v_U16_t msgType, { tpSirTdlsDelStaInd pSirTdlsDelStaInd = (tpSirTdlsDelStaInd) pMsgBuf ; tCsrRoamInfo roamInfo = {0} ; - palCopyMemory(pMac->hHdd, &roamInfo.peerMac, pSirTdlsDelStaInd->peerMac, + vos_mem_copy( &roamInfo.peerMac, pSirTdlsDelStaInd->peerMac, sizeof(tSirMacAddr)) ; roamInfo.staId = pSirTdlsDelStaInd->staId ; roamInfo.reasonCode = pSirTdlsDelStaInd->reasonCode ; @@ -973,6 +1091,24 @@ eHalStatus tdlsMsgProcessor(tpAniSirGlobal pMac, v_U16_t msgType, csrRoamCallCallback(pMac, pSirTdlsDelAllPeerInd->sessionId, &roamInfo, 0, eCSR_ROAM_RESULT_MGMT_TX_COMPLETE_IND, 0); + break; + } + case eWNI_SME_TDLS_LINK_ESTABLISH_RSP: + { + tSirTdlsLinkEstablishReqRsp *linkEstablishReqRsp = (tSirTdlsLinkEstablishReqRsp *) pMsgBuf ; + tCsrRoamInfo roamInfo = {0} ; +#if 0 + vos_mem_copy(&roamInfo.peerMac, delStaRsp->peerMac, + sizeof(tSirMacAddr)) ; + roamInfo.staId = delStaRsp->staId ; + roamInfo.statusCode = delStaRsp->statusCode ; +#endif + csrRoamCallCallback(pMac, linkEstablishReqRsp->sessionId, &roamInfo, 0, + eCSR_ROAM_TDLS_STATUS_UPDATE, + eCSR_ROAM_RESULT_LINK_ESTABLISH_REQ_RSP); + /* remove pending eSmeCommandTdlsLinkEstablish command */ + csrTdlsRemoveSmeCmd(pMac, eSmeCommandTdlsLinkEstablish); + break; } #ifdef FEATURE_WLAN_TDLS_INTERNAL case eWNI_SME_TDLS_DISCOVERY_START_RSP: @@ -1106,7 +1242,7 @@ eHalStatus tdlsMsgProcessor(tpAniSirGlobal pMac, v_U16_t msgType, { tSirTdlsPeerInd *peerInd = (tSirTdlsPeerInd *) pMsgBuf ; tCsrRoamInfo roamInfo = {0} ; - palCopyMemory(pMac->hHdd, &roamInfo.peerMac, peerInd->peerMac, + vos_mem_copy( &roamInfo.peerMac, peerInd->peerMac, sizeof(tSirMacAddr)) ; roamInfo.staId = peerInd->staId ; roamInfo.ucastSig = peerInd->ucastSig ; @@ -1125,7 +1261,7 @@ eHalStatus tdlsMsgProcessor(tpAniSirGlobal pMac, v_U16_t msgType, { tSirTdlsPeerInd *peerInd = (tSirTdlsPeerInd *) pMsgBuf ; tCsrRoamInfo roamInfo = {0} ; - palCopyMemory(pMac->hHdd, &roamInfo.peerMac, peerInd->peerMac, + vos_mem_copy( &roamInfo.peerMac, peerInd->peerMac, sizeof(tSirMacAddr)) ; roamInfo.staId = peerInd->staId ; /* diff --git a/CORE/SME/src/csr/csrUtil.c b/CORE/SME/src/csr/csrUtil.c index 1d765c11bda7..6e4859aeaad3 100644 --- a/CORE/SME/src/csr/csrUtil.c +++ b/CORE/SME/src/csr/csrUtil.c @@ -47,10 +47,10 @@ #include "smeQosInternal.h" #include "wlan_qct_wda.h" -#ifdef FEATURE_WLAN_CCX +#if defined(FEATURE_WLAN_CCX) && !defined(FEATURE_WLAN_CCX_UPLOAD) #include "vos_utils.h" #include "csrCcx.h" -#endif /* FEATURE_WLAN_CCX */ +#endif /* FEATURE_WLAN_CCX && !FEATURE_WLAN_CCX_UPLOAD*/ tANI_U8 csrWpaOui[][ CSR_WPA_OUI_SIZE ] = { { 0x00, 0x50, 0xf2, 0x00 }, @@ -1285,8 +1285,7 @@ get_eCsrRoamResult_str(eCsrRoamResult val) tANI_BOOLEAN csrGetBssIdBssDesc( tHalHandle hHal, tSirBssDescription *pSirBssDesc, tCsrBssid *pBssId ) { - tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - palCopyMemory( pMac->hHdd, pBssId, &pSirBssDesc->bssId[ 0 ], sizeof(tCsrBssid) ); + vos_mem_copy(pBssId, &pSirBssDesc->bssId[ 0 ], sizeof(tCsrBssid)); return( TRUE ); } @@ -1853,19 +1852,19 @@ tANI_BOOLEAN csrIsSsidEqual( tHalHandle hHal, tSirBssDescription *pSirBssDesc1, } if( ( !pIes1->SSID.present ) || ( !pIesLocal->SSID.present ) ) break; if ( pIes1->SSID.num_ssid != pIesLocal->SSID.num_ssid ) break; - palCopyMemory(pMac->hHdd, Ssid1.ssId, pIes1->SSID.ssid, pIes1->SSID.num_ssid); - palCopyMemory(pMac->hHdd, Ssid2.ssId, pIesLocal->SSID.ssid, pIesLocal->SSID.num_ssid); + vos_mem_copy(Ssid1.ssId, pIes1->SSID.ssid, pIes1->SSID.num_ssid); + vos_mem_copy(Ssid2.ssId, pIesLocal->SSID.ssid, pIesLocal->SSID.num_ssid); - fEqual = palEqualMemory(pMac->hHdd, Ssid1.ssId, Ssid2.ssId, pIesLocal->SSID.num_ssid ); + fEqual = vos_mem_compare(Ssid1.ssId, Ssid2.ssId, pIesLocal->SSID.num_ssid); } while( 0 ); if(pIes1) { - palFreeMemory(pMac->hHdd, pIes1); + vos_mem_free(pIes1); } if( pIesLocal && !pIes2 ) { - palFreeMemory(pMac->hHdd, pIesLocal); + vos_mem_free(pIesLocal); } return( fEqual ); @@ -1921,7 +1920,7 @@ tANI_BOOLEAN csrIsBssDescriptionWme( tHalHandle hHal, tSirBssDescription *pSirBs if( ( pIes == NULL ) && ( NULL != pIesTemp ) ) { //we allocate memory here so free it before returning - palFreeMemory(pMac->hHdd, pIesTemp); + vos_mem_free(pIesTemp); } return( fWme ); @@ -2015,14 +2014,14 @@ eHalStatus csrGetParsedBssDescriptionIEs(tHalHandle hHal, tSirBssDescription *pB if(pBssDesc && ppIEStruct) { - status = palAllocateMemory(pMac->hHdd, (void **)ppIEStruct, sizeof(tDot11fBeaconIEs)); - if(HAL_STATUS_SUCCESS(status)) + *ppIEStruct = vos_mem_malloc(sizeof(tDot11fBeaconIEs)); + if ( (*ppIEStruct) != NULL) { - palZeroMemory(pMac->hHdd, (void *)*ppIEStruct, sizeof(tDot11fBeaconIEs)); + vos_mem_set((void *)*ppIEStruct, sizeof(tDot11fBeaconIEs), 0); status = csrParseBssDescriptionIEs(hHal, pBssDesc, *ppIEStruct); if(!HAL_STATUS_SUCCESS(status)) { - palFreeMemory(pMac->hHdd, *ppIEStruct); + vos_mem_free(*ppIEStruct); *ppIEStruct = NULL; } } @@ -2030,7 +2029,8 @@ eHalStatus csrGetParsedBssDescriptionIEs(tHalHandle hHal, tSirBssDescription *pB { smsLog( pMac, LOGE, FL(" failed to allocate memory") ); VOS_ASSERT( 0 ); - } + return eHAL_STATUS_FAILURE; + } } return (status); @@ -2571,18 +2571,25 @@ eCsrCfgDot11Mode csrFindBestPhyMode( tpAniSirGlobal pMac, tANI_U32 phyMode ) eCsrBand eBand = pMac->roam.configParam.eBand; + if ((0 == phyMode) || #ifdef WLAN_FEATURE_11AC - if ((0 == phyMode) || ((eCSR_DOT11_MODE_AUTO & phyMode) && (IS_FEATURE_SUPPORTED_BY_FW(DOT11AC))) - || ((eCSR_DOT11_MODE_11ac & phyMode) && (IS_FEATURE_SUPPORTED_BY_FW(DOT11AC)))) - { - cfgDot11ModeToUse = eCSR_CFG_DOT11_MODE_11AC; - } - else + (eCSR_DOT11_MODE_11ac & phyMode) || #endif - - if ((0 == phyMode) || (eCSR_DOT11_MODE_AUTO & phyMode)) + (eCSR_DOT11_MODE_AUTO & phyMode)) { - cfgDot11ModeToUse = eCSR_CFG_DOT11_MODE_11N; +#ifdef WLAN_FEATURE_11AC + if (IS_FEATURE_SUPPORTED_BY_FW(DOT11AC)) + { + cfgDot11ModeToUse = eCSR_CFG_DOT11_MODE_11AC; + } + else +#endif + { + /* Default to 11N mode if user has configured 11ac mode + * and FW doesn't supports 11ac mode . + */ + cfgDot11ModeToUse = eCSR_CFG_DOT11_MODE_11N; + } } else { @@ -2741,23 +2748,37 @@ csrIsconcurrentsessionValid(tpAniSirGlobal pMac,tANI_U32 cursessionId, switch (currBssPersona) { case VOS_STA_MODE: - case VOS_P2P_CLIENT_MODE: - smsLog(pMac, LOG4, FL(" Second session for persona %d"), currBssPersona); - return eHAL_STATUS_SUCCESS; +#ifndef QCA_WIFI_2_0 + if(pMac->roam.roamSession[sessionId].pCurRoamProfile && + (pMac->roam.roamSession[sessionId].pCurRoamProfile->csrPersona + == VOS_STA_MODE)) //check for P2P client mode + { + smsLog(pMac, LOGE, FL(" ****STA mode already exists ****")); + return eHAL_STATUS_FAILURE; + } break; +#else + smsLog(pMac, LOG1, FL(" **** STA session ****")); + return eHAL_STATUS_SUCCESS; +#endif case VOS_STA_SAP_MODE: if((pMac->roam.roamSession[sessionId].bssParams.bssPersona == VOS_STA_SAP_MODE)&& - (pMac->roam.roamSession[sessionId].connectState != eCSR_ASSOC_STATE_TYPE_NOT_CONNECTED)) + (pMac->roam.roamSession[sessionId].connectState + != eCSR_ASSOC_STATE_TYPE_NOT_CONNECTED)) { smsLog(pMac, LOGE, FL(" ****SoftAP mode already exists ****")); return eHAL_STATUS_FAILURE; } - - else if((pMac->roam.roamSession[sessionId].bssParams.bssPersona - == VOS_P2P_GO_MODE) && - (pMac->roam.roamSession[sessionId].connectState != eCSR_ASSOC_STATE_TYPE_NOT_CONNECTED)) + else if( (pMac->roam.roamSession[sessionId].bssParams.bssPersona + == VOS_P2P_GO_MODE && + pMac->roam.roamSession[sessionId].connectState + != eCSR_ASSOC_STATE_TYPE_NOT_CONNECTED) || + (pMac->roam.roamSession[sessionId].bssParams.bssPersona + == VOS_IBSS_MODE && + pMac->roam.roamSession[sessionId].connectState + != eCSR_ASSOC_STATE_TYPE_IBSS_DISCONNECTED)) { smsLog(pMac, LOGE, FL(" ****Cannot start Multiple Beaconing Role ****")); return eHAL_STATUS_FAILURE; @@ -2767,20 +2788,50 @@ csrIsconcurrentsessionValid(tpAniSirGlobal pMac,tANI_U32 cursessionId, case VOS_P2P_GO_MODE: if((pMac->roam.roamSession[sessionId].bssParams.bssPersona == VOS_P2P_GO_MODE) && - (pMac->roam.roamSession[sessionId].connectState != eCSR_ASSOC_STATE_TYPE_NOT_CONNECTED)) + (pMac->roam.roamSession[sessionId].connectState + != eCSR_ASSOC_STATE_TYPE_NOT_CONNECTED)) { smsLog(pMac, LOGE, FL(" ****P2P GO mode already exists ****")); return eHAL_STATUS_FAILURE; } - else if((pMac->roam.roamSession[sessionId].bssParams.bssPersona + else if( (pMac->roam.roamSession[sessionId].bssParams.bssPersona + == VOS_STA_SAP_MODE && + pMac->roam.roamSession[sessionId].connectState + != eCSR_ASSOC_STATE_TYPE_NOT_CONNECTED) || + (pMac->roam.roamSession[sessionId].bssParams.bssPersona + == VOS_IBSS_MODE && + pMac->roam.roamSession[sessionId].connectState + != eCSR_ASSOC_STATE_TYPE_IBSS_DISCONNECTED) ) + { + smsLog(pMac, LOGE, FL(" ****Cannot start Multiple Beaconing Role ****")); + return eHAL_STATUS_FAILURE; + } + break; + case VOS_IBSS_MODE: + if((pMac->roam.roamSession[sessionId].bssParams.bssPersona + == VOS_IBSS_MODE) && + (pMac->roam.roamSession[sessionId].connectState + != eCSR_ASSOC_STATE_TYPE_IBSS_CONNECTED)) + { + smsLog(pMac, LOGE, FL(" ****IBSS mode already exists ****")); + return eHAL_STATUS_FAILURE; + } + else if( (pMac->roam.roamSession[sessionId].bssParams.bssPersona + == VOS_P2P_GO_MODE || + pMac->roam.roamSession[sessionId].bssParams.bssPersona == VOS_STA_SAP_MODE) && - (pMac->roam.roamSession[sessionId].connectState != eCSR_ASSOC_STATE_TYPE_NOT_CONNECTED)) + pMac->roam.roamSession[sessionId].connectState + != eCSR_ASSOC_STATE_TYPE_NOT_CONNECTED) { smsLog(pMac, LOGE, FL(" ****Cannot start Multiple Beaconing Role ****")); return eHAL_STATUS_FAILURE; } break; - +#ifdef QCA_WIFI_2_0 + case VOS_P2P_CLIENT_MODE: + smsLog(pMac, LOG1, FL(" **** P2P-Client session ****")); + return eHAL_STATUS_SUCCESS; +#endif default : smsLog(pMac, LOGE, FL("***Persona not handled = %d*****"),currBssPersona); break; @@ -2910,11 +2961,16 @@ eHalStatus csrValidateMCCBeaconInterval(tpAniSirGlobal pMac, tANI_U8 channelId, else if (pMac->roam.roamSession[sessionId].bssParams.bssPersona == VOS_STA_SAP_MODE) { - if (pMac->roam.roamSession[sessionId].bssParams.operationChn + if (pMac->roam.roamSession[sessionId].bssParams.operationChn != channelId ) { +#ifndef QCA_WIFI_2_0 + smsLog(pMac, LOGE, FL("***MCC is not enabled for SAP +STA****")); + return eHAL_STATUS_FAILURE; +#else smsLog(pMac, LOGE, FL("*** MCC with SAP+STA sessions ****")); return eHAL_STATUS_SUCCESS; +#endif } } else if (pMac->roam.roamSession[sessionId].bssParams.bssPersona @@ -3140,7 +3196,7 @@ tANI_BOOLEAN csrIsProfileWapi( tCsrRoamProfile *pProfile ) static tANI_BOOLEAN csrIsWapiOuiEqual( tpAniSirGlobal pMac, tANI_U8 *Oui1, tANI_U8 *Oui2 ) { - return( palEqualMemory(pMac->hHdd, Oui1, Oui2, CSR_WAPI_OUI_SIZE ) ); + return (vos_mem_compare(Oui1, Oui2, CSR_WAPI_OUI_SIZE)); } static tANI_BOOLEAN csrIsWapiOuiMatch( tpAniSirGlobal pMac, tANI_U8 AllCyphers[][CSR_WAPI_OUI_SIZE], @@ -3162,7 +3218,7 @@ static tANI_BOOLEAN csrIsWapiOuiMatch( tpAniSirGlobal pMac, tANI_U8 AllCyphers[] if ( fYes && Oui ) { - palCopyMemory( pMac->hHdd, Oui, AllCyphers[ idx ], CSR_WAPI_OUI_SIZE ); + vos_mem_copy(Oui, AllCyphers[ idx ], CSR_WAPI_OUI_SIZE); } return( fYes ); @@ -3171,7 +3227,7 @@ static tANI_BOOLEAN csrIsWapiOuiMatch( tpAniSirGlobal pMac, tANI_U8 AllCyphers[] static tANI_BOOLEAN csrIsWpaOuiEqual( tpAniSirGlobal pMac, tANI_U8 *Oui1, tANI_U8 *Oui2 ) { - return( palEqualMemory(pMac->hHdd, Oui1, Oui2, CSR_WPA_OUI_SIZE ) ); + return(vos_mem_compare(Oui1, Oui2, CSR_WPA_OUI_SIZE)); } static tANI_BOOLEAN csrIsOuiMatch( tpAniSirGlobal pMac, tANI_U8 AllCyphers[][CSR_WPA_OUI_SIZE], @@ -3193,7 +3249,7 @@ static tANI_BOOLEAN csrIsOuiMatch( tpAniSirGlobal pMac, tANI_U8 AllCyphers[][CSR if ( fYes && Oui ) { - palCopyMemory( pMac->hHdd, Oui, AllCyphers[ idx ], CSR_WPA_OUI_SIZE ); + vos_mem_copy(Oui, AllCyphers[ idx ], CSR_WPA_OUI_SIZE); } return( fYes ); @@ -3511,13 +3567,14 @@ tANI_BOOLEAN csrGetRSNInformation( tHalHandle hHal, tCsrAuthList *pAuthType, eCs if ( pRSNIe->present ) { cMulticastCyphers++; - palCopyMemory(pMac->hHdd, MulticastCyphers, pRSNIe->gp_cipher_suite, CSR_RSN_OUI_SIZE); + vos_mem_copy(MulticastCyphers, pRSNIe->gp_cipher_suite, CSR_RSN_OUI_SIZE); cUnicastCyphers = (tANI_U8)(pRSNIe->pwise_cipher_suite_count); cAuthSuites = (tANI_U8)(pRSNIe->akm_suite_count); for(i = 0; i < cAuthSuites && i < CSR_RSN_MAX_AUTH_SUITES; i++) { - palCopyMemory(pMac->hHdd, (void *)&AuthSuites[i], - (void *)&pRSNIe->akm_suites[i], CSR_RSN_OUI_SIZE); + vos_mem_copy((void *)&AuthSuites[i], + (void *)&pRSNIe->akm_suites[i], + CSR_RSN_OUI_SIZE); } //Check - Is requested Unicast Cipher supported by the BSS. @@ -3603,17 +3660,17 @@ tANI_BOOLEAN csrGetRSNInformation( tHalHandle hHal, tCsrAuthList *pAuthType, eCs { if ( MulticastCypher ) { - palCopyMemory( pMac->hHdd, MulticastCypher, Multicast, CSR_RSN_OUI_SIZE ); + vos_mem_copy(MulticastCypher, Multicast, CSR_RSN_OUI_SIZE); } if ( UnicastCypher ) { - palCopyMemory( pMac->hHdd, UnicastCypher, Unicast, CSR_RSN_OUI_SIZE ); + vos_mem_copy(UnicastCypher, Unicast, CSR_RSN_OUI_SIZE); } if ( AuthSuite ) { - palCopyMemory( pMac->hHdd, AuthSuite, Authentication, CSR_RSN_OUI_SIZE ); + vos_mem_copy(AuthSuite, Authentication, CSR_RSN_OUI_SIZE); } if ( pNegotiatedAuthtype ) @@ -3626,10 +3683,8 @@ tANI_BOOLEAN csrGetRSNInformation( tHalHandle hHal, tCsrAuthList *pAuthType, eCs Capabilities->NoPairwise = (pRSNIe->RSN_Cap[0] >> 1) & 0x1 ; // Bit 1 No Pairwise Capabilities->PTKSAReplayCounter = (pRSNIe->RSN_Cap[0] >> 2) & 0x3 ; // Bit 2, 3 PTKSA Replay Counter Capabilities->GTKSAReplayCounter = (pRSNIe->RSN_Cap[0] >> 4) & 0x3 ; // Bit 4, 5 GTKSA Replay Counter -#ifdef WLAN_FEATURE_11W Capabilities->MFPRequired = (pRSNIe->RSN_Cap[0] >> 6) & 0x1 ; // Bit 6 MFPR Capabilities->MFPCapable = (pRSNIe->RSN_Cap[0] >> 7) & 0x1 ; // Bit 7 MFPC -#endif Capabilities->Reserved = pRSNIe->RSN_Cap[1] & 0xff ; // remaining reserved } } @@ -3677,7 +3732,7 @@ tANI_BOOLEAN csrLookupPMKID( tpAniSirGlobal pMac, tANI_U32 sessionId, tANI_U8 *p { smsLog(pMac, LOGW, "match PMKID %02X-%02X-%02X-%02X-%02X-%02X to ", pBSSId[0], pBSSId[1], pBSSId[2], pBSSId[3], pBSSId[4], pBSSId[5]); - if( palEqualMemory( pMac->hHdd, pBSSId, pSession->PmkidCacheInfo[Index].BSSID, sizeof(tCsrBssid) ) ) + if( vos_mem_compare(pBSSId, pSession->PmkidCacheInfo[Index].BSSID, sizeof(tCsrBssid)) ) { // match found fMatchFound = TRUE; @@ -3687,7 +3742,7 @@ tANI_BOOLEAN csrLookupPMKID( tpAniSirGlobal pMac, tANI_U32 sessionId, tANI_U8 *p if( !fMatchFound ) break; - palCopyMemory( pMac->hHdd, pPMKId, pSession->PmkidCacheInfo[Index].PMKID, CSR_RSN_PMKID_SIZE ); + vos_mem_copy(pPMKId, pSession->PmkidCacheInfo[Index].PMKID, CSR_RSN_PMKID_SIZE); fRC = TRUE; } @@ -3712,6 +3767,9 @@ tANI_U8 csrConstructRSNIe( tHalHandle hHal, tANI_U32 sessionId, tCsrRoamProfile tCsrRSNCapabilities RSNCapabilities; tCsrRSNPMKIe *pPMK; tANI_U8 PMKId[CSR_RSN_PMKID_SIZE]; +#ifdef WLAN_FEATURE_11W + tANI_U8 *pGroupMgmtCipherSuite; +#endif tDot11fBeaconIEs *pIesLocal = pIes; smsLog(pMac, LOGW, "%s called...", __func__); @@ -3735,16 +3793,16 @@ tANI_U8 csrConstructRSNIe( tHalHandle hHal, tANI_U32 sessionId, tCsrRoamProfile pRSNIe->Version = CSR_RSN_VERSION_SUPPORTED; - palCopyMemory( pMac->hHdd, pRSNIe->MulticastOui, MulticastCypher, sizeof( MulticastCypher ) ); + vos_mem_copy(pRSNIe->MulticastOui, MulticastCypher, sizeof( MulticastCypher )); pRSNIe->cUnicastCyphers = 1; - palCopyMemory( pMac->hHdd, &pRSNIe->UnicastOui[ 0 ], UnicastCypher, sizeof( UnicastCypher ) ); + vos_mem_copy(&pRSNIe->UnicastOui[ 0 ], UnicastCypher, sizeof( UnicastCypher )); pAuthSuite = (tCsrRSNAuthIe *)( &pRSNIe->UnicastOui[ pRSNIe->cUnicastCyphers ] ); pAuthSuite->cAuthenticationSuites = 1; - palCopyMemory( pMac->hHdd, &pAuthSuite->AuthOui[ 0 ], AuthSuite, sizeof( AuthSuite ) ); + vos_mem_copy(&pAuthSuite->AuthOui[ 0 ], AuthSuite, sizeof( AuthSuite )); // RSN capabilities follows the Auth Suite (two octects) // !!REVIEW - What should STA put in RSN capabilities, currently @@ -3764,17 +3822,27 @@ tANI_U8 csrConstructRSNIe( tHalHandle hHal, tANI_U32 sessionId, tCsrRoamProfile { pPMK->cPMKIDs = 1; - palCopyMemory( pMac->hHdd, pPMK->PMKIDList[0].PMKID, PMKId, CSR_RSN_PMKID_SIZE ); + vos_mem_copy(pPMK->PMKIDList[0].PMKID, PMKId, CSR_RSN_PMKID_SIZE); } else { pPMK->cPMKIDs = 0; } +#ifdef WLAN_FEATURE_11W + if ( pProfile->MFPEnabled ) + { + pGroupMgmtCipherSuite = (tANI_U8 *) pPMK + sizeof ( tANI_U16 ) + + ( pPMK->cPMKIDs * CSR_RSN_PMKID_SIZE ); + vos_mem_copy(pGroupMgmtCipherSuite, csrRSNOui[07], CSR_WPA_OUI_SIZE); + } +#endif + // Add in the fixed fields plus 1 Unicast cypher, less the IE Header length // Add in the size of the Auth suite (count plus a single OUI) // Add in the RSN caps field. // Add PMKID count and PMKID (if any) + // Add group management cipher suite pRSNIe->IeHeader.Length = (tANI_U8) (sizeof( *pRSNIe ) - sizeof ( pRSNIe->IeHeader ) + sizeof( *pAuthSuite ) + sizeof( tCsrRSNCapabilities )); @@ -3783,6 +3851,15 @@ tANI_U8 csrConstructRSNIe( tHalHandle hHal, tANI_U32 sessionId, tCsrRoamProfile pRSNIe->IeHeader.Length += (tANI_U8)(sizeof( tANI_U16 ) + (pPMK->cPMKIDs * CSR_RSN_PMKID_SIZE)); } +#ifdef WLAN_FEATURE_11W + if ( pProfile->MFPEnabled ) + { + if ( 0 == pPMK->cPMKIDs ) + pRSNIe->IeHeader.Length += sizeof( tANI_U16 ); + pRSNIe->IeHeader.Length += CSR_WPA_OUI_SIZE; + } +#endif + // return the size of the IE header (total) constructed... cbRSNIe = pRSNIe->IeHeader.Length + sizeof( pRSNIe->IeHeader ); @@ -3791,7 +3868,7 @@ tANI_U8 csrConstructRSNIe( tHalHandle hHal, tANI_U32 sessionId, tCsrRoamProfile if( !pIes && pIesLocal ) { //locally allocated - palFreeMemory(pMac->hHdd, pIesLocal); + vos_mem_free(pIesLocal); } return( cbRSNIe ); @@ -3823,13 +3900,14 @@ tANI_BOOLEAN csrGetWapiInformation( tHalHandle hHal, tCsrAuthList *pAuthType, eC if ( pWapiIe->present ) { cMulticastCyphers++; - palCopyMemory(pMac->hHdd, MulticastCyphers, pWapiIe->multicast_cipher_suite, CSR_WAPI_OUI_SIZE); + vos_mem_copy(MulticastCyphers, pWapiIe->multicast_cipher_suite, + CSR_WAPI_OUI_SIZE); cUnicastCyphers = (tANI_U8)(pWapiIe->unicast_cipher_suite_count); cAuthSuites = (tANI_U8)(pWapiIe->akm_suite_count); for(i = 0; i < cAuthSuites && i < CSR_WAPI_MAX_AUTH_SUITES; i++) { - palCopyMemory(pMac->hHdd, (void *)&AuthSuites[i], - (void *)&pWapiIe->akm_suites[i], CSR_WAPI_OUI_SIZE); + vos_mem_copy((void *)&AuthSuites[i], (void *)&pWapiIe->akm_suites[i], + CSR_WAPI_OUI_SIZE); } //Check - Is requested Unicast Cipher supported by the BSS. @@ -3889,17 +3967,17 @@ tANI_BOOLEAN csrGetWapiInformation( tHalHandle hHal, tCsrAuthList *pAuthType, eC { if ( MulticastCypher ) { - palCopyMemory( pMac->hHdd, MulticastCypher, Multicast, CSR_WAPI_OUI_SIZE ); + vos_mem_copy(MulticastCypher, Multicast, CSR_WAPI_OUI_SIZE); } if ( UnicastCypher ) { - palCopyMemory( pMac->hHdd, UnicastCypher, Unicast, CSR_WAPI_OUI_SIZE ); + vos_mem_copy(UnicastCypher, Unicast, CSR_WAPI_OUI_SIZE); } if ( AuthSuite ) { - palCopyMemory( pMac->hHdd, AuthSuite, Authentication, CSR_WAPI_OUI_SIZE ); + vos_mem_copy(AuthSuite, Authentication, CSR_WAPI_OUI_SIZE); } if ( pNegotiatedAuthtype ) @@ -3940,7 +4018,7 @@ tANI_BOOLEAN csrLookupBKID( tpAniSirGlobal pMac, tANI_U32 sessionId, tANI_U8 *pB { smsLog(pMac, LOGW, "match BKID %02X-%02X-%02X-%02X-%02X-%02X to ", pBSSId[0], pBSSId[1], pBSSId[2], pBSSId[3], pBSSId[4], pBSSId[5]); - if( palEqualMemory( pMac->hHdd, pBSSId, pSession->BkidCacheInfo[Index].BSSID, sizeof(tCsrBssid) ) ) + if (vos_mem_compare(pBSSId, pSession->BkidCacheInfo[Index].BSSID, sizeof(tCsrBssid) ) ) { // match found fMatchFound = TRUE; @@ -3950,7 +4028,7 @@ tANI_BOOLEAN csrLookupBKID( tpAniSirGlobal pMac, tANI_U32 sessionId, tANI_U8 *pB if( !fMatchFound ) break; - palCopyMemory( pMac->hHdd, pBKId, pSession->BkidCacheInfo[Index].BKID, CSR_WAPI_BKID_SIZE ); + vos_mem_copy(pBKId, pSession->BkidCacheInfo[Index].BKID, CSR_WAPI_BKID_SIZE); fRC = TRUE; } @@ -3988,23 +4066,23 @@ tANI_U8 csrConstructWapiIe( tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamPro UnicastCypher, MulticastCypher, AuthSuite, NULL, NULL ); if ( !fWapiMatch ) break; - palZeroMemory(pMac->hHdd, pWapiIe, sizeof(tCsrWapiIe)); + vos_mem_set(pWapiIe, sizeof(tCsrWapiIe), 0); pWapiIe->IeHeader.ElementID = DOT11F_EID_WAPI; pWapiIe->Version = CSR_WAPI_VERSION_SUPPORTED; pWapiIe->cAuthenticationSuites = 1; - palCopyMemory( pMac->hHdd, &pWapiIe->AuthOui[ 0 ], AuthSuite, sizeof( AuthSuite ) ); + vos_mem_copy(&pWapiIe->AuthOui[ 0 ], AuthSuite, sizeof( AuthSuite )); pWapi = (tANI_U8 *) (&pWapiIe->AuthOui[ 1 ]); *pWapi = (tANI_U16)1; //cUnicastCyphers pWapi+=2; - palCopyMemory( pMac->hHdd, pWapi, UnicastCypher, sizeof( UnicastCypher ) ); + vos_mem_copy(pWapi, UnicastCypher, sizeof( UnicastCypher )); pWapi += sizeof( UnicastCypher ); - palCopyMemory( pMac->hHdd, pWapi, MulticastCypher, sizeof( MulticastCypher ) ); + vos_mem_copy(pWapi, MulticastCypher, sizeof( MulticastCypher )); pWapi += sizeof( MulticastCypher ); @@ -4021,7 +4099,7 @@ tANI_U8 csrConstructWapiIe( tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamPro /* Do we need to change the endianness here */ *pWapi = (tANI_U16)1; //cBKIDs pWapi+=2; - palCopyMemory( pMac->hHdd, pWapi, BKId, CSR_WAPI_BKID_SIZE ); + vos_mem_copy(pWapi, BKId, CSR_WAPI_BKID_SIZE); } else { @@ -4050,7 +4128,7 @@ tANI_U8 csrConstructWapiIe( tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamPro if( !pIes && pIesLocal ) { //locally allocated - palFreeMemory(pMac->hHdd, pIesLocal); + vos_mem_free(pIesLocal); } return( cbWapiIe ); @@ -4081,7 +4159,7 @@ tANI_BOOLEAN csrGetWpaCyphers( tpAniSirGlobal pMac, tCsrAuthList *pAuthType, eCs if ( pWpaIe->present ) { cMulticastCyphers = 1; - palCopyMemory(pMac->hHdd, MulticastCyphers, pWpaIe->multicast_cipher, CSR_WPA_OUI_SIZE); + vos_mem_copy(MulticastCyphers, pWpaIe->multicast_cipher, CSR_WPA_OUI_SIZE); cUnicastCyphers = (tANI_U8)(pWpaIe->unicast_cipher_count); cAuthSuites = (tANI_U8)(pWpaIe->auth_suite_count); @@ -4146,17 +4224,17 @@ tANI_BOOLEAN csrGetWpaCyphers( tpAniSirGlobal pMac, tCsrAuthList *pAuthType, eCs { if ( MulticastCypher ) { - palCopyMemory( pMac->hHdd, (tANI_U8 **)MulticastCypher, Multicast, CSR_WPA_OUI_SIZE ); + vos_mem_copy((tANI_U8 **)MulticastCypher, Multicast, CSR_WPA_OUI_SIZE); } if ( UnicastCypher ) { - palCopyMemory( pMac->hHdd, (tANI_U8 **)UnicastCypher, Unicast, CSR_WPA_OUI_SIZE ); + vos_mem_copy((tANI_U8 **)UnicastCypher, Unicast, CSR_WPA_OUI_SIZE); } if ( AuthSuite ) { - palCopyMemory( pMac->hHdd, (tANI_U8 **)AuthSuite, Authentication, CSR_WPA_OUI_SIZE ); + vos_mem_copy((tANI_U8 **)AuthSuite, Authentication, CSR_WPA_OUI_SIZE); } if( pNegotiatedAuthtype ) @@ -4209,20 +4287,20 @@ tANI_U8 csrConstructWpaIe( tHalHandle hHal, tCsrRoamProfile *pProfile, tSirBssDe pWpaIe->IeHeader.ElementID = SIR_MAC_WPA_EID; - palCopyMemory( pMac->hHdd, pWpaIe->Oui, csrWpaOui[01], sizeof( pWpaIe->Oui ) ); + vos_mem_copy(pWpaIe->Oui, csrWpaOui[01], sizeof( pWpaIe->Oui )); pWpaIe->Version = CSR_WPA_VERSION_SUPPORTED; - palCopyMemory( pMac->hHdd, pWpaIe->MulticastOui, MulticastCypher, sizeof( MulticastCypher ) ); + vos_mem_copy(pWpaIe->MulticastOui, MulticastCypher, sizeof( MulticastCypher )); pWpaIe->cUnicastCyphers = 1; - palCopyMemory( pMac->hHdd, &pWpaIe->UnicastOui[ 0 ], UnicastCypher, sizeof( UnicastCypher ) ); + vos_mem_copy(&pWpaIe->UnicastOui[ 0 ], UnicastCypher, sizeof( UnicastCypher )); pAuthSuite = (tCsrWpaAuthIe *)( &pWpaIe->UnicastOui[ pWpaIe->cUnicastCyphers ] ); pAuthSuite->cAuthenticationSuites = 1; - palCopyMemory( pMac->hHdd, &pAuthSuite->AuthOui[ 0 ], AuthSuite, sizeof( AuthSuite ) ); + vos_mem_copy(&pAuthSuite->AuthOui[ 0 ], AuthSuite, sizeof( AuthSuite )); // The WPA capabilities follows the Auth Suite (two octects)-- // this field is optional, and we always "send" zero, so just @@ -4243,7 +4321,7 @@ tANI_U8 csrConstructWpaIe( tHalHandle hHal, tCsrRoamProfile *pProfile, tSirBssDe if( !pIes && pIesLocal ) { //locally allocated - palFreeMemory(pMac->hHdd, pIesLocal); + vos_mem_free(pIesLocal); } return( cbWpaIe ); @@ -4253,7 +4331,6 @@ tANI_U8 csrConstructWpaIe( tHalHandle hHal, tCsrRoamProfile *pProfile, tSirBssDe tANI_BOOLEAN csrGetWpaRsnIe( tHalHandle hHal, tANI_U8 *pIes, tANI_U32 len, tANI_U8 *pWpaIe, tANI_U8 *pcbWpaIe, tANI_U8 *pRSNIe, tANI_U8 *pcbRSNIe) { - tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); tDot11IEHeader *pIEHeader; tSirMacPropIE *pSirMacPropIE; tANI_U32 cbParsed; @@ -4312,10 +4389,12 @@ tANI_BOOLEAN csrGetWpaRsnIe( tHalHandle hHal, tANI_U8 *pIes, tANI_U32 len, // Check if this is a valid WPA IE. Then check that the // WPA OUI is in place and the version is one that we support. if ( ( pIe->IeHeader.Length >= SIR_MAC_WPA_IE_MIN_LENGTH ) && - ( palEqualMemory(pMac->hHdd, pIe->Oui, (void *)csrWpaOui[1], sizeof( pIe->Oui ) ) ) && + ( vos_mem_compare( pIe->Oui, (void *)csrWpaOui[1], + sizeof( pIe->Oui ) ) ) && ( pIe->Version <= CSR_WPA_VERSION_SUPPORTED ) ) { - palCopyMemory(pMac->hHdd, pWpaIe, pIe, pIe->IeHeader.Length + sizeof( pIe->IeHeader ) ); + vos_mem_copy(pWpaIe, pIe, + pIe->IeHeader.Length + sizeof( pIe->IeHeader )); *pcbWpaIe = pIe->IeHeader.Length + sizeof( pIe->IeHeader ); cFoundIEs++; @@ -4344,7 +4423,8 @@ tANI_BOOLEAN csrGetWpaRsnIe( tHalHandle hHal, tANI_U8 *pIes, tANI_U32 len, // if there is enough room in the WpaIE passed in, then copy the Wpa IE into // the buffer passed in. if ( *pcbRSNIe < pIe->IeHeader.Length + sizeof( pIe->IeHeader ) ) break; - palCopyMemory(pMac->hHdd, pRSNIe, pIe, pIe->IeHeader.Length + sizeof( pIe->IeHeader ) ); + vos_mem_copy(pRSNIe, pIe, + pIe->IeHeader.Length + sizeof( pIe->IeHeader )); *pcbRSNIe = pIe->IeHeader.Length + sizeof( pIe->IeHeader ); break; @@ -4383,7 +4463,7 @@ tANI_U8 csrRetrieveWpaIe( tHalHandle hHal, tCsrRoamProfile *pProfile, tSirBssDes if(SIR_MAC_WPA_IE_MAX_LENGTH >= pProfile->nWPAReqIELength) { cbWpaIe = (tANI_U8)pProfile->nWPAReqIELength; - palCopyMemory(pMac->hHdd, pWpaIe, pProfile->pWPAReqIE, cbWpaIe); + vos_mem_copy(pWpaIe, pProfile->pWPAReqIE, cbWpaIe); } else { @@ -4426,7 +4506,7 @@ tANI_U8 csrRetrieveRsnIe( tHalHandle hHal, tANI_U32 sessionId, tCsrRoamProfile * if(SIR_MAC_WPA_IE_MAX_LENGTH >= pProfile->nRSNReqIELength) { cbRsnIe = (tANI_U8)pProfile->nRSNReqIELength; - palCopyMemory(pMac->hHdd, pRsnIe, pProfile->pRSNReqIE, cbRsnIe); + vos_mem_copy(pRsnIe, pProfile->pRSNReqIE, cbRsnIe); } else { @@ -4461,7 +4541,7 @@ tANI_U8 csrRetrieveWapiIe( tHalHandle hHal, tANI_U32 sessionId, if(DOT11F_IE_WAPI_MAX_LEN >= pProfile->nWAPIReqIELength) { cbWapiIe = (tANI_U8)pProfile->nWAPIReqIELength; - palCopyMemory(pMac->hHdd, pWapiIe, pProfile->pWAPIReqIE, cbWapiIe); + vos_mem_copy(pWapiIe, pProfile->pWAPIReqIE, cbWapiIe); } else { @@ -4504,7 +4584,7 @@ tANI_BOOLEAN csrSearchChannelListForTxPower(tHalHandle hHal, tSirBssDescription if ( found ) { - palCopyMemory(pMac->hHdd, returnChannelGroup, pChannelGroup, sizeof(tCsrChannelSet)); + vos_mem_copy(returnChannelGroup, pChannelGroup, sizeof(tCsrChannelSet)); break; } else @@ -4595,6 +4675,7 @@ tAniEdType csrTranslateEncryptTypeToEdType( eCsrEncryptionType EncryptType ) #ifdef FEATURE_WLAN_WAPI case eCSR_ENCRYPT_TYPE_WPI: edType = eSIR_ED_WPI; + break ; #endif #ifdef WLAN_FEATURE_11W //11w BIP @@ -4681,16 +4762,18 @@ tANI_BOOLEAN csrValidateWep( tpAniSirGlobal pMac, eCsrEncryptionType ucEncryptio ucEncryptionType = eCSR_ENCRYPT_TYPE_WEP104; } //else we can use the encryption type directly - if( pIes->WPA.present ) + if ( pIes->WPA.present ) { - fMatch = palEqualMemory(pMac->hHdd, pIes->WPA.multicast_cipher, - csrWpaOui[csrGetOUIIndexFromCipher( ucEncryptionType )], CSR_WPA_OUI_SIZE ); + fMatch = vos_mem_compare(pIes->WPA.multicast_cipher, + csrWpaOui[csrGetOUIIndexFromCipher( ucEncryptionType )], + CSR_WPA_OUI_SIZE); if( fMatch ) break; } - if( pIes->RSN.present ) + if ( pIes->RSN.present ) { - fMatch = palEqualMemory(pMac->hHdd, pIes->RSN.gp_cipher_suite, - csrRSNOui[csrGetOUIIndexFromCipher( ucEncryptionType )], CSR_RSN_OUI_SIZE ); + fMatch = vos_mem_compare(pIes->RSN.gp_cipher_suite, + csrRSNOui[csrGetOUIIndexFromCipher( ucEncryptionType )], + CSR_RSN_OUI_SIZE); } } @@ -4936,7 +5019,7 @@ tANI_BOOLEAN csrIsSsidMatch( tpAniSirGlobal pMac, tANI_U8 *ssid1, tANI_U8 ssid1L } if(ssid1Len != bssSsidLen) break; - if(palEqualMemory(pMac->hHdd, bssSsid, ssid1, bssSsidLen)) + if (vos_mem_compare(bssSsid, ssid1, bssSsidLen)) { fMatch = TRUE; break; @@ -4951,7 +5034,6 @@ tANI_BOOLEAN csrIsSsidMatch( tpAniSirGlobal pMac, tANI_U8 *ssid1, tANI_U8 ssid1L //Null ssid means match tANI_BOOLEAN csrIsSsidInList( tHalHandle hHal, tSirMacSSid *pSsid, tCsrSSIDs *pSsidList ) { - tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); tANI_BOOLEAN fMatch = FALSE; tANI_U32 i; @@ -4960,8 +5042,8 @@ tANI_BOOLEAN csrIsSsidInList( tHalHandle hHal, tSirMacSSid *pSsid, tCsrSSIDs *pS for(i = 0; i < pSsidList->numOfSSIDs; i++) { if(csrIsNULLSSID(pSsidList->SSIDList[i].SSID.ssId, pSsidList->SSIDList[i].SSID.length) || - ((pSsidList->SSIDList[i].SSID.length == pSsid->length) && - palEqualMemory(pMac->hHdd, pSsid->ssId, pSsidList->SSIDList[i].SSID.ssId, pSsid->length))) + ((pSsidList->SSIDList[i].SSID.length == pSsid->length) && + vos_mem_compare(pSsid->ssId, pSsidList->SSIDList[i].SSID.ssId, pSsid->length))) { fMatch = TRUE; break; @@ -4977,7 +5059,7 @@ tANI_BOOLEAN csrIsMacAddressZero( tpAniSirGlobal pMac, tCsrBssid *pMacAddr ) { tANI_U8 bssid[WNI_CFG_BSSID_LEN] = {0, 0, 0, 0, 0, 0}; - return( palEqualMemory(pMac->hHdd, bssid, pMacAddr, WNI_CFG_BSSID_LEN)); + return (vos_mem_compare(bssid, pMacAddr, WNI_CFG_BSSID_LEN)); } //like to use sirCompareMacAddr @@ -4985,14 +5067,14 @@ tANI_BOOLEAN csrIsMacAddressBroadcast( tpAniSirGlobal pMac, tCsrBssid *pMacAddr { tANI_U8 bssid[WNI_CFG_BSSID_LEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; - return( palEqualMemory(pMac->hHdd, bssid, pMacAddr, WNI_CFG_BSSID_LEN)); + return(vos_mem_compare(bssid, pMacAddr, WNI_CFG_BSSID_LEN)); } //like to use sirCompareMacAddr tANI_BOOLEAN csrIsMacAddressEqual( tpAniSirGlobal pMac, tCsrBssid *pMacAddr1, tCsrBssid *pMacAddr2 ) { - return( palEqualMemory(pMac->hHdd, pMacAddr1, pMacAddr2, sizeof(tCsrBssid)) ); + return(vos_mem_compare(pMacAddr1, pMacAddr2, sizeof(tCsrBssid))); } @@ -5004,7 +5086,7 @@ tANI_BOOLEAN csrIsBssidMatch( tHalHandle hHal, tCsrBssid *pProfBssid, tCsrBssid // for efficiency of the MAC_ADDRESS functions, move the // Bssid's into MAC_ADDRESS structs. - palCopyMemory( pMac->hHdd, &ProfileBssid, pProfBssid, sizeof(tCsrBssid) ); + vos_mem_copy(&ProfileBssid, pProfBssid, sizeof(tCsrBssid)); do { @@ -5483,7 +5565,7 @@ tANI_BOOLEAN csrMatchBSS( tHalHandle hHal, tSirBssDescription *pBssDesc, tCsrSca } else if( pIes ) { - palFreeMemory(pMac->hHdd, pIes); + vos_mem_free(pIes); } return( fRC ); @@ -5550,7 +5632,7 @@ tANI_BOOLEAN csrMatchBSSToConnectProfile( tHalHandle hHal, tCsrRoamConnectedProf if( !pIes && pIesLocal ) { //locally allocated - palFreeMemory(pMac->hHdd, pIesLocal); + vos_mem_free(pIesLocal); } return( fRC ); @@ -5697,56 +5779,49 @@ void csrReleaseProfile(tpAniSirGlobal pMac, tCsrRoamProfile *pProfile) { if(pProfile->BSSIDs.bssid) { - palFreeMemory(pMac->hHdd, pProfile->BSSIDs.bssid); + vos_mem_free(pProfile->BSSIDs.bssid); pProfile->BSSIDs.bssid = NULL; } if(pProfile->SSIDs.SSIDList) { - palFreeMemory(pMac->hHdd, pProfile->SSIDs.SSIDList); + vos_mem_free(pProfile->SSIDs.SSIDList); pProfile->SSIDs.SSIDList = NULL; } if(pProfile->pWPAReqIE) { - palFreeMemory(pMac->hHdd, pProfile->pWPAReqIE); + vos_mem_free(pProfile->pWPAReqIE); pProfile->pWPAReqIE = NULL; } if(pProfile->pRSNReqIE) { - palFreeMemory(pMac->hHdd, pProfile->pRSNReqIE); + vos_mem_free(pProfile->pRSNReqIE); pProfile->pRSNReqIE = NULL; } #ifdef FEATURE_WLAN_WAPI if(pProfile->pWAPIReqIE) { - palFreeMemory(pMac->hHdd, pProfile->pWAPIReqIE); + vos_mem_free(pProfile->pWAPIReqIE); pProfile->pWAPIReqIE = NULL; } #endif /* FEATURE_WLAN_WAPI */ if(pProfile->pAddIEScan) { - palFreeMemory(pMac->hHdd, pProfile->pAddIEScan); + vos_mem_free(pProfile->pAddIEScan); pProfile->pAddIEScan = NULL; } if(pProfile->pAddIEAssoc) { - palFreeMemory(pMac->hHdd, pProfile->pAddIEAssoc); + vos_mem_free(pProfile->pAddIEAssoc); pProfile->pAddIEAssoc = NULL; } - { - palFreeMemory(pMac->hHdd, pProfile->pAddIEAssoc); - pProfile->pAddIEAssoc = NULL; - } - if(pProfile->ChannelInfo.ChannelList) { - palFreeMemory(pMac->hHdd, pProfile->ChannelInfo.ChannelList); + vos_mem_free(pProfile->ChannelInfo.ChannelList); pProfile->ChannelInfo.ChannelList = NULL; } - - - palZeroMemory(pMac->hHdd, pProfile, sizeof(tCsrRoamProfile)); + vos_mem_set(pProfile, sizeof(tCsrRoamProfile), 0); } } @@ -5754,17 +5829,17 @@ void csrFreeScanFilter(tpAniSirGlobal pMac, tCsrScanResultFilter *pScanFilter) { if(pScanFilter->BSSIDs.bssid) { - palFreeMemory(pMac->hHdd, pScanFilter->BSSIDs.bssid); + vos_mem_free(pScanFilter->BSSIDs.bssid); pScanFilter->BSSIDs.bssid = NULL; } if(pScanFilter->ChannelInfo.ChannelList) { - palFreeMemory(pMac->hHdd, pScanFilter->ChannelInfo.ChannelList); + vos_mem_free(pScanFilter->ChannelInfo.ChannelList); pScanFilter->ChannelInfo.ChannelList = NULL; } if(pScanFilter->SSIDs.SSIDList) { - palFreeMemory(pMac->hHdd, pScanFilter->SSIDs.SSIDList); + vos_mem_free(pScanFilter->SSIDs.SSIDList); pScanFilter->SSIDs.SSIDList = NULL; } } @@ -5777,7 +5852,7 @@ void csrFreeRoamProfile(tpAniSirGlobal pMac, tANI_U32 sessionId) if(pSession->pCurRoamProfile) { csrReleaseProfile(pMac, pSession->pCurRoamProfile); - palFreeMemory(pMac->hHdd, pSession->pCurRoamProfile); + vos_mem_free(pSession->pCurRoamProfile); pSession->pCurRoamProfile = NULL; } } @@ -5789,7 +5864,7 @@ void csrFreeConnectBssDesc(tpAniSirGlobal pMac, tANI_U32 sessionId) if(pSession->pConnectBssDesc) { - palFreeMemory(pMac->hHdd, pSession->pConnectBssDesc); + vos_mem_free(pSession->pConnectBssDesc); pSession->pConnectBssDesc = NULL; } } @@ -5962,11 +6037,18 @@ eCsrCfgDot11Mode csrGetCfgDot11ModeFromCsrPhyMode(tCsrRoamProfile *pProfile, eCs } else { - cfgDot11Mode = eCSR_CFG_DOT11_MODE_11AC; + cfgDot11Mode = eCSR_CFG_DOT11_MODE_11N; } break; case eCSR_DOT11_MODE_11ac_ONLY: - cfgDot11Mode = eCSR_CFG_DOT11_MODE_11AC_ONLY; + if (IS_FEATURE_SUPPORTED_BY_FW(DOT11AC)) + { + cfgDot11Mode = eCSR_CFG_DOT11_MODE_11AC_ONLY; + } + else + { + cfgDot11Mode = eCSR_CFG_DOT11_MODE_11N; + } break; #endif default: @@ -6014,7 +6096,13 @@ v_REGDOMAIN_t csrGetCurrentRegulatoryDomain(tpAniSirGlobal pMac) } -eHalStatus csrGetRegulatoryDomainForCountry(tpAniSirGlobal pMac, tANI_U8 *pCountry, v_REGDOMAIN_t *pDomainId) +eHalStatus csrGetRegulatoryDomainForCountry +( +tpAniSirGlobal pMac, +tANI_U8 *pCountry, +v_REGDOMAIN_t *pDomainId, +v_CountryInfoSource_t source +) { eHalStatus status = eHAL_STATUS_INVALID_PARAMETER; VOS_STATUS vosStatus; @@ -6025,7 +6113,10 @@ eHalStatus csrGetRegulatoryDomainForCountry(tpAniSirGlobal pMac, tANI_U8 *pCount { countryCode[0] = pCountry[0]; countryCode[1] = pCountry[1]; - vosStatus = vos_nv_getRegDomainFromCountryCode( &domainId, countryCode ); + vosStatus = vos_nv_getRegDomainFromCountryCode(&domainId, + countryCode, + source); + if( VOS_IS_STATUS_SUCCESS(vosStatus) ) { if( pDomainId ) @@ -6073,10 +6164,15 @@ tANI_BOOLEAN csrMatchCountryCode( tpAniSirGlobal pMac, tANI_U8 *pCountry, tDot11 //Make sure this country is recognizable if( pIes->Country.present ) { - status = csrGetRegulatoryDomainForCountry( pMac, pIes->Country.country, &domainId ); + status = csrGetRegulatoryDomainForCountry(pMac, + pIes->Country.country, + &domainId, COUNTRY_QUERY); if( !HAL_STATUS_SUCCESS( status ) ) { - status = csrGetRegulatoryDomainForCountry( pMac, pMac->scan.countryCode11d,(v_REGDOMAIN_t *) &domainId ); + status = csrGetRegulatoryDomainForCountry(pMac, + pMac->scan.countryCode11d, + (v_REGDOMAIN_t *) &domainId, + COUNTRY_QUERY); if( !HAL_STATUS_SUCCESS( status ) ) { fRet = eANI_BOOLEAN_FALSE; @@ -6116,7 +6212,8 @@ tANI_BOOLEAN csrMatchCountryCode( tpAniSirGlobal pMac, tANI_U8 *pCountry, tDot11 { pCountry[i] = csrToUpper( pCountry[i] ); } - if( !palEqualMemory(pMac->hHdd, pIes->Country.country, pCountry, WNI_CFG_COUNTRY_CODE_LEN - 1) ) + if (!vos_mem_compare(pIes->Country.country, pCountry, + WNI_CFG_COUNTRY_CODE_LEN - 1)) { fRet = eANI_BOOLEAN_FALSE; break; @@ -6146,16 +6243,18 @@ eHalStatus csrSetCountryDomainMapping(tpAniSirGlobal pMac, tCsrCountryDomainMapp { for(j = 0; j < eCSR_NUM_COUNTRY_INDEX; j++) { - if(palEqualMemory(pMac->hHdd, gCsrCountryInfo[j].countryCode, - pCountryDomainMapping->pCountryInfo[i].countryCode, 2)) + if (vos_mem_compare(gCsrCountryInfo[j].countryCode, + pCountryDomainMapping->pCountryInfo[i].countryCode, + 2)) { if(gCsrCountryInfo[j].domainId != pCountryDomainMapping->pCountryInfo[i].domainId) { gCsrCountryInfo[j].domainId = pCountryDomainMapping->pCountryInfo[i].domainId; //Check whether it matches the currently used country code //If matching, need to update base on the new domain setting. - if(palEqualMemory(pMac->hHdd, countryCode, - pCountryDomainMapping->pCountryInfo[i].countryCode, 2)) + if (vos_mem_compare(countryCode, + pCountryDomainMapping->pCountryInfo[i].countryCode, + 2)) { fDomainChanged = eANI_BOOLEAN_TRUE; } @@ -6240,9 +6339,9 @@ eHalStatus csrGetModifyProfileFields(tpAniSirGlobal pMac, tANI_U32 sessionId, return eHAL_STATUS_FAILURE; } - palCopyMemory( pMac->hHdd, pModifyProfileFields, - &pMac->roam.roamSession[sessionId].connectedProfile.modifyProfileFields, - sizeof(tCsrRoamModifyProfileFields) ); + vos_mem_copy(pModifyProfileFields, + &pMac->roam.roamSession[sessionId].connectedProfile.modifyProfileFields, + sizeof(tCsrRoamModifyProfileFields)); return eHAL_STATUS_SUCCESS; } @@ -6252,9 +6351,9 @@ eHalStatus csrSetModifyProfileFields(tpAniSirGlobal pMac, tANI_U32 sessionId, { tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, sessionId ); - palCopyMemory( pMac->hHdd, &pSession->connectedProfile.modifyProfileFields, - pModifyProfileFields, - sizeof(tCsrRoamModifyProfileFields) ); + vos_mem_copy(&pSession->connectedProfile.modifyProfileFields, + pModifyProfileFields, + sizeof(tCsrRoamModifyProfileFields)); return eHAL_STATUS_SUCCESS; } @@ -6289,10 +6388,11 @@ eHalStatus csrGetSupportedCountryCode(tpAniSirGlobal pMac, tANI_U8 *pBuf, tANI_U //We may need to alter the data structure and find a way to make this faster. tANI_U32 i; - for( i = 0; i < numOfCountry; i++ ) + for ( i = 0; i < numOfCountry; i++ ) { - palCopyMemory( pMac->hHdd, pBuf + ( i * WNI_CFG_COUNTRY_CODE_LEN ), - gCsrCountryInfo[i].countryCode, WNI_CFG_COUNTRY_CODE_LEN ); + vos_mem_copy(pBuf + ( i * WNI_CFG_COUNTRY_CODE_LEN ), + gCsrCountryInfo[i].countryCode, + WNI_CFG_COUNTRY_CODE_LEN); } } } @@ -6356,19 +6456,15 @@ eHalStatus csrScanGetBaseChannels( tpAniSirGlobal pMac, tCsrChannelInfo * pChann { break; } - status = palAllocateMemory( pMac->hHdd, (void **)&pChannelInfo->ChannelList, - pMac->scan.baseChannels.numChannels ); - if( !HAL_STATUS_SUCCESS( status ) ) + pChannelInfo->ChannelList = vos_mem_malloc(pMac->scan.baseChannels.numChannels); + if ( NULL == pChannelInfo->ChannelList ) { smsLog( pMac, LOGE, FL("csrScanGetBaseChannels: fail to allocate memory") ); - break; - } - status = palCopyMemory( pMac->hHdd, pChannelInfo->ChannelList, pMac->scan.baseChannels.channelList, - pMac->scan.baseChannels.numChannels ); - if( !HAL_STATUS_SUCCESS( status ) ) - { - break; + return eHAL_STATUS_FAILURE; } + vos_mem_copy(pChannelInfo->ChannelList, + pMac->scan.baseChannels.channelList, + pMac->scan.baseChannels.numChannels); pChannelInfo->numOfChannels = pMac->scan.baseChannels.numChannels; }while(0); diff --git a/CORE/SME/src/oemData/oemDataApi.c b/CORE/SME/src/oemData/oemDataApi.c index 79a9892e39d7..3b422a294f40 100644 --- a/CORE/SME/src/oemData/oemDataApi.c +++ b/CORE/SME/src/oemData/oemDataApi.c @@ -164,7 +164,9 @@ eHalStatus oemData_OemDataReq(tHalHandle hHal, pMac->oemData.pContext = pContext; pMac->oemData.oemDataReqID = *(pOemDataReqID); - vos_mem_copy((v_VOID_t*)(pMac->oemData.oemDataReqConfig.oemDataReq), (v_VOID_t*)(oemDataReqConfig->oemDataReq), OEM_DATA_REQ_SIZE); + vos_mem_copy((v_VOID_t*)(pMac->oemData.oemDataReqConfig.oemDataReq), + (v_VOID_t*)(oemDataReqConfig->oemDataReq), + OEM_DATA_REQ_SIZE); pMac->oemData.oemDataReqActive = eANI_BOOLEAN_FALSE; @@ -181,7 +183,8 @@ eHalStatus oemData_OemDataReq(tHalHandle hHal, //set the oem data request pOemDataCmd->u.oemDataCmd.oemDataReq.sessionId = pMac->oemData.oemDataReqConfig.sessionId; vos_mem_copy((v_VOID_t*)(pOemDataCmd->u.oemDataCmd.oemDataReq.oemDataReq), - (v_VOID_t*)(pMac->oemData.oemDataReqConfig.oemDataReq), OEM_DATA_REQ_SIZE); + (v_VOID_t*)(pMac->oemData.oemDataReqConfig.oemDataReq), + OEM_DATA_REQ_SIZE); } else { @@ -223,22 +226,19 @@ eHalStatus oemData_SendMBOemDataReq(tpAniSirGlobal pMac, tOemDataReq *pOemDataRe msgLen = (tANI_U16)(sizeof(tSirOemDataReq)); - status = palAllocateMemory(pMac->hHdd, (void**)&pMsg, msgLen); + pMsg = vos_mem_malloc(msgLen); + if ( NULL == pMsg ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; if(HAL_STATUS_SUCCESS(status)) { - palZeroMemory(pMac->hHdd, pMsg, msgLen); + vos_mem_set(pMsg, msgLen, 0); pMsg->messageType = pal_cpu_to_be16((tANI_U16)eWNI_SME_OEM_DATA_REQ); - palCopyMemory(pMac->hHdd, pMsg->selfMacAddr, pSession->selfMacAddr, sizeof(tSirMacAddr) ); - status = palCopyMemory(pMac->hHdd, pMsg->oemDataReq, pOemDataReq->oemDataReq, OEM_DATA_REQ_SIZE); - if(HAL_STATUS_SUCCESS(status)) - { - smsLog(pMac, LOGW, "OEM_DATA: sending message to pe%s", __func__); - status = palSendMBMessage(pMac->hHdd, pMsg); - } - else - { - palFreeMemory(pMac->hHdd, pMsg); - } + vos_mem_copy(pMsg->selfMacAddr, pSession->selfMacAddr, sizeof(tSirMacAddr) ); + vos_mem_copy(pMsg->oemDataReq, pOemDataReq->oemDataReq, OEM_DATA_REQ_SIZE); + smsLog(pMac, LOGW, "OEM_DATA: sending message to pe%s", __func__); + status = palSendMBMessage(pMac->hHdd, pMsg); } smsLog(pMac, LOGW, "OEM_DATA: exiting Function %s", __func__); @@ -339,7 +339,9 @@ eHalStatus sme_HandleOemDataRsp(tHalHandle hHal, tANI_U8* pMsg) } smsLog(pMac, LOGE, "Before memory copy"); - vos_mem_copy((v_VOID_t*)(pMac->oemData.pOemDataRsp), (v_VOID_t*)(&pOemDataRsp->oemDataRsp), sizeof(tOemDataRsp)); + vos_mem_copy((v_VOID_t*)(pMac->oemData.pOemDataRsp), + (v_VOID_t*)(&pOemDataRsp->oemDataRsp), + sizeof(tOemDataRsp)); smsLog(pMac, LOGE, "after memory copy"); sme_ReleaseGlobalLock(&pMac->sme); } diff --git a/CORE/SME/src/p2p/p2p_Api.c b/CORE/SME/src/p2p/p2p_Api.c index 961a03e39cdf..52113b220619 100644 --- a/CORE/SME/src/p2p/p2p_Api.c +++ b/CORE/SME/src/p2p/p2p_Api.c @@ -25,6 +25,7 @@ * to the Linux Foundation. */ + /* * Copyright (c) 2008 Qualcomm Technologies, Inc. All Rights Reserved. * Qualcomm Technologies Confidential and Proprietary @@ -62,7 +63,7 @@ eHalStatus p2pProcessRemainOnChannelCmd(tpAniSirGlobal pMac, tSmeCmd *p2pRemaino { eHalStatus status = eHAL_STATUS_SUCCESS; tSirRemainOnChnReq* pMsg; - tANI_U16 len; + tANI_U32 len; tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, p2pRemainonChn->sessionId ); if(!pSession) @@ -102,29 +103,40 @@ eHalStatus p2pProcessRemainOnChannelCmd(tpAniSirGlobal pMac, tSmeCmd *p2pRemaino len = sizeof(tSirRemainOnChnReq) + pMac->p2pContext.probeRspIeLength; #endif - status = palAllocateMemory(pMac->hHdd, (void**)&pMsg, len ); - if(HAL_STATUS_SUCCESS(status)) + if( len > 0xFFFF ) + { + /*In coming len for Msg is more then 16bit value*/ + smsLog(pMac, LOGE, FL(" Message length is very large, %d"), + len); + return eHAL_STATUS_FAILURE; + } + + pMsg = vos_mem_malloc(len); + if ( NULL == pMsg ) + status = eHAL_STATUS_FAILURE; + else { VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, "%s call", __func__); - palZeroMemory(pMac->hHdd, pMsg, sizeof(tSirRemainOnChnReq)); + vos_mem_set(pMsg, sizeof(tSirRemainOnChnReq), 0); pMsg->messageType = eWNI_SME_REMAIN_ON_CHANNEL_REQ; - pMsg->length = len; - palCopyMemory( pMac, pMsg->selfMacAddr, pSession->selfMacAddr, sizeof(tSirMacAddr) ); + pMsg->length = (tANI_U16)len; + vos_mem_copy(pMsg->selfMacAddr, pSession->selfMacAddr, sizeof(tSirMacAddr)); pMsg->chnNum = p2pRemainonChn->u.remainChlCmd.chn; pMsg->phyMode = p2pRemainonChn->u.remainChlCmd.phyMode; pMsg->duration = p2pRemainonChn->u.remainChlCmd.duration; pMsg->sessionId = p2pRemainonChn->sessionId; + pMsg->isProbeRequestAllowed = p2pRemainonChn->u.remainChlCmd.isP2PProbeReqAllowed; #ifdef WLAN_FEATURE_P2P_INTERNAL pMsg->sessionId = pSession->sessionId; if( p2pContext->probeRspIeLength ) { - palCopyMemory(pMac->hHdd, (void *)pMsg->probeRspIe, - (void *)p2pContext->probeRspIe, + vos_mem_copy((void *)pMsg->probeRspIe, (void *)p2pContext->probeRspIe, p2pContext->probeRspIeLength); } #else if( pMac->p2pContext.probeRspIeLength ) - palCopyMemory(pMac->hHdd, (void *)pMsg->probeRspIe, (void *)pMac->p2pContext.probeRspIe, pMac->p2pContext.probeRspIeLength); + vos_mem_copy((void *)pMsg->probeRspIe, (void *)pMac->p2pContext.probeRspIe, + pMac->p2pContext.probeRspIeLength); #endif status = palSendMBMessage(pMac->hHdd, pMsg); } @@ -194,12 +206,12 @@ eHalStatus sme_mgmtFrmInd( tHalHandle hHal, tpSirSmeMgmtFrameInd pSmeMgmtFrm) tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); eHalStatus status = eHAL_STATUS_SUCCESS; tCsrRoamInfo pRoamInfo = {0}; + tANI_U8 i; #ifndef WLAN_FEATURE_P2P_INTERNAL tANI_U32 SessionId = pSmeMgmtFrm->sessionId; #endif #ifdef WLAN_FEATURE_P2P_INTERNAL - tANI_U8 i; //For now, only action frames are needed. if(SIR_MAC_MGMT_ACTION == pSmeMgmtFrm->frameType) @@ -227,6 +239,17 @@ eHalStatus sme_mgmtFrmInd( tHalHandle hHal, tpSirSmeMgmtFrameInd pSmeMgmtFrm) pRoamInfo.frameType = pSmeMgmtFrm->frameType; pRoamInfo.rxChan = pSmeMgmtFrm->rxChan; pRoamInfo.rxRssi = pSmeMgmtFrm->rxRssi; + if(CSR_IS_SESSION_ANY(SessionId)) + { + for(i = 0; i < CSR_ROAM_SESSION_MAX; i++) + { + if(CSR_IS_SESSION_VALID(pMac, i)) + { + SessionId = i; + break; + } + } + } /* forward the mgmt frame to HDD */ csrRoamCallCallback(pMac, SessionId, &pRoamInfo, 0, eCSR_ROAM_INDICATE_MGMT_FRAME, 0); @@ -323,9 +346,8 @@ eHalStatus sme_sendActionCnf( tHalHandle hHal, tANI_U8* pMsg) if(NULL == pP2pContext->pNextActionFrm) { - status = palTimerStart(pMac->hHdd, pP2pContext->retryActionFrameTimer, - ACTION_FRAME_RETRY_TIMEOUT * PAL_TIMER_TO_MS_UNIT, eANI_BOOLEAN_FALSE); - if (!HAL_STATUS_SUCCESS(status)) + status = vos_timer_start(&pP2pContext->retryActionFrameTimer, ACTION_FRAME_RETRY_TIMEOUT); + if (!VOS_IS_STATUS_SUCCESS(status)) { smsLog(pMac, LOGE, " %s fail to start retryActionFrameTimerHandler", __func__, pP2pContext->NextActionFrameType); @@ -344,12 +366,14 @@ eHalStatus sme_sendActionCnf( tHalHandle hHal, tANI_U8* pMsg) if (pP2pContext->actionFrameTimer) { - status = palTimerStop(pMac, pP2pContext->actionFrameTimer); + vos_timer_stop(&pP2pContext->actionFrameTimer); + status = eHAL_STATUS_SUCCESS; } if (pP2pContext->retryActionFrameTimer) { - status = palTimerStop(pMac, pP2pContext->retryActionFrameTimer); + vos_timer_stop(&pP2pContext->retryActionFrameTimer); + status = eHAL_STATUS_SUCCESS; } if(pP2pContext->pSentActionFrame) @@ -398,9 +422,8 @@ eHalStatus sme_sendActionCnf( tHalHandle hHal, tANI_U8* pMsg) { VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, " sending next frame %d type", pP2pContext->NextActionFrameType); - status = palTimerStart(pMac->hHdd, pP2pContext->actionFrameTimer, - pP2pContext->ActionFrameSendTimeout * PAL_TIMER_TO_MS_UNIT, eANI_BOOLEAN_FALSE); - if (!HAL_STATUS_SUCCESS(status)) + status = vos_timer_start(&pP2pContext->actionFrameTimer, pP2pContext->ActionFrameSendTimeout); + if (!VOS_IS_STATUS_SUCCESS(status)) { smsLog(pMac, LOGE, FL(" %s fail to start timer status %d"), __func__, status); //Without the timer we cannot continue @@ -422,9 +445,8 @@ eHalStatus sme_sendActionCnf( tHalHandle hHal, tANI_U8* pMsg) { VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, " sending next frame %d type", pP2pContext->NextActionFrameType); - status = palTimerStart(pMac->hHdd, pP2pContext->retryActionFrameTimer, - ACTION_FRAME_RETRY_TIMEOUT * PAL_TIMER_TO_MS_UNIT, eANI_BOOLEAN_FALSE); - if (!HAL_STATUS_SUCCESS(status)) + status = vos_timer_start(&pP2pContext->retryActionFrameTimer, ACTION_FRAME_RETRY_TIMEOUT); + if (!VOS_IS_STATUS_SUCCESS(status)) { smsLog(pMac, LOGE, " %s fail to start retryActionFrameTimerHandler", __func__); } @@ -494,71 +516,71 @@ void p2pResetContext(tp2pContext *pP2pContext) } if( pP2pContext->probeRspIe ) { - vos_mem_free( pP2pContext->probeRspIe ); + vos_mem_free(pP2pContext->probeRspIe); pP2pContext->probeRspIe = NULL; pP2pContext->probeRspIeLength = 0; } if( pP2pContext->DiscoverReqIeField ) { - vos_mem_free(pP2pContext->DiscoverReqIeField ); + vos_mem_free(pP2pContext->DiscoverReqIeField); pP2pContext->DiscoverReqIeField = NULL; pP2pContext->DiscoverReqIeLength = 0; } if( pP2pContext->GoNegoCnfIeField ) { - vos_mem_free( pP2pContext->GoNegoCnfIeField); + vos_mem_free(pP2pContext->GoNegoCnfIeField); pP2pContext->GoNegoCnfIeField = NULL; pP2pContext->GoNegoCnfIeLength = 0; } if( pP2pContext->GoNegoReqIeField ) { - vos_mem_free( pP2pContext->GoNegoReqIeField ); + vos_mem_free(pP2pContext->GoNegoReqIeField); pP2pContext->GoNegoReqIeField = NULL; pP2pContext->GoNegoReqIeLength = 0; } if( pP2pContext->GoNegoResIeField ) { - vos_mem_free( pP2pContext->GoNegoResIeField ); + vos_mem_free(pP2pContext->GoNegoResIeField); pP2pContext->GoNegoResIeField = NULL; pP2pContext->GoNegoResIeLength = 0; } if( pP2pContext->ProvDiscReqIeField ) { - vos_mem_free( pP2pContext->ProvDiscReqIeField ); + vos_mem_free(pP2pContext->ProvDiscReqIeField); pP2pContext->ProvDiscReqIeField = NULL; pP2pContext->ProvDiscReqIeLength = 0; } if( pP2pContext->ProvDiscResIeField ) { - vos_mem_free( pP2pContext->ProvDiscResIeField ); + vos_mem_free(pP2pContext->ProvDiscResIeField); pP2pContext->ProvDiscResIeLength = 0; pP2pContext->ProvDiscResIeField = NULL; } if (pP2pContext->actionFrameTimer) { - palTimerStop(pMac->hHdd, pP2pContext->actionFrameTimer); + vos_timer_stop(&pP2pContext->actionFrameTimer); } if (pP2pContext->discoverTimer) { - palTimerStop(pMac->hHdd, pP2pContext->discoverTimer); + vos_timer_stop(&pP2pContext->discoverTimer); } if (pP2pContext->listenTimerHandler) { - palTimerStop(pMac->hHdd, pP2pContext->listenTimerHandler); + vos_timer_stop(&pP2pContext->listenTimerHandler); } if (pP2pContext->WPSRegistrarCheckTimerHandler) { - palTimerStop(pMac->hHdd, pP2pContext->WPSRegistrarCheckTimerHandler); + vos_timer_stop(&pP2pContext->WPSRegistrarCheckTimerHandler); } if (pP2pContext->directedDiscoveryFilter) @@ -596,30 +618,29 @@ eHalStatus sme_p2pOpen( tHalHandle hHal ) p2pResetContext(pP2pContext); - status = palTimerAlloc(pMac->hHdd, &pP2pContext->actionFrameTimer, - p2pActionFrameTimerHandler, pP2pContext); - if (!HAL_STATUS_SUCCESS(status)) + status = vos_timer_init(&pP2pContext->actionFrameTimer, VOS_TIMER_TYPE_SW, p2pActionFrameTimerHandler, pP2pContext); + if (!VOS_IS_STATUS_SUCCESS(status)) { smsLog(pMac, LOGE, " %s fail to alloc actionFrame timer for session %d", __func__, i); break; } - status = palTimerAlloc(pMac->hHdd, &pP2pContext->listenTimerHandler, - p2pListenDiscoverTimerHandler, pP2pContext); - if (!HAL_STATUS_SUCCESS(status)) + status = vos_timer_init(&pP2pContext->listenTimerHandler, VOS_TIMER_TYPE_SW, + p2pListenDiscoverTimerHandler, pP2pContext); + if (!VOS_IS_STATUS_SUCCESS(status)) { smsLog(pMac, LOGE, " %s fail to alloc listen timer for session %d", __func__, i); break; } - status = palTimerAlloc(pMac->hHdd, &pP2pContext->discoverTimer, p2pDiscoverTimerHandler, pP2pContext); - if (!HAL_STATUS_SUCCESS(status)) + status = vos_timer_init(&pP2pContext->discoverTimer, VOS_TIMER_TYPE_SW, p2pDiscoverTimerHandler, pP2pContext); + if (!VOS_IS_STATUS_SUCCESS(status)) { smsLog(pMac, LOGE, " %s fail to alloc discover timer for session %d", __func__, i); break; } - status = palTimerAlloc(pMac->hHdd, &pP2pContext->retryActionFrameTimer, + status = vos_timer_init(&pP2pContext->retryActionFrameTimer, VOS_TIMER_TYPE_SW, p2pRetryActionFrameTimerHandler, pP2pContext); - if (!HAL_STATUS_SUCCESS(status)) + if (!VOS_IS_STATUS_SUCCESS(status)) { smsLog(pMac, LOGE, " %s fail to alloc retryActionFrameTimerHandler timer for session %d", __func__, i); break; @@ -629,7 +650,7 @@ eHalStatus sme_p2pOpen( tHalHandle hHal ) } #else //If static structure is too big, Need to change this function to allocate memory dynamically - vos_mem_zero( &pMac->p2pContext, sizeof( tp2pContext ) ); + vos_mem_zero(&pMac->p2pContext, sizeof( tp2pContext )); #endif if(!HAL_STATUS_SUCCESS(status)) @@ -655,7 +676,7 @@ eHalStatus p2pStop( tHalHandle hHal ) #else if( pMac->p2pContext.probeRspIe ) { - vos_mem_free( pMac->p2pContext.probeRspIe ); + vos_mem_free(pMac->p2pContext.probeRspIe); pMac->p2pContext.probeRspIe = NULL; } @@ -682,25 +703,25 @@ eHalStatus sme_p2pClose( tHalHandle hHal ) pContext = &pMac->p2pContext[i]; if (pContext->actionFrameTimer) { - palTimerFree(hHal, pContext->actionFrameTimer); + vos_timer_destroy(&pContext->actionFrameTimer); pContext->actionFrameTimer = NULL; } if (pContext->discoverTimer) { - palTimerFree(hHal, pContext->discoverTimer); + vos_timer_destroy(&pContext->discoverTimer); pContext->discoverTimer = NULL; } if (pContext->listenTimerHandler) { - palTimerFree(hHal, pContext->listenTimerHandler); + vos_timer_destroy(&pContext->listenTimerHandler); pContext->listenTimerHandler = NULL; } if (pContext->WPSRegistrarCheckTimerHandler) { - palTimerFree(hHal, pContext->WPSRegistrarCheckTimerHandler); + vos_timer_destroy(&pContext->WPSRegistrarCheckTimerHandler); pContext->WPSRegistrarCheckTimerHandler = NULL; } @@ -709,7 +730,7 @@ eHalStatus sme_p2pClose( tHalHandle hHal ) #else if( pMac->p2pContext.probeRspIe ) { - vos_mem_free( pMac->p2pContext.probeRspIe ); + vos_mem_free(pMac->p2pContext.probeRspIe); pMac->p2pContext.probeRspIe = NULL; } @@ -749,7 +770,7 @@ tSirRFBand GetRFBand(tANI_U8 channel) eHalStatus p2pRemainOnChannel(tHalHandle hHal, tANI_U8 sessionId, tANI_U8 channel, tANI_U32 duration, remainOnChanCallback callback, - void *pContext + void *pContext, tANI_U8 isP2PProbeReqAllowed #ifdef WLAN_FEATURE_P2P_INTERNAL , eP2PRemainOnChnReason reason #endif @@ -782,6 +803,7 @@ eHalStatus p2pRemainOnChannel(tHalHandle hHal, tANI_U8 sessionId, pRemainChlCmd->sessionId = sessionId; pRemainChlCmd->u.remainChlCmd.chn = channel; pRemainChlCmd->u.remainChlCmd.duration = duration; + pRemainChlCmd->u.remainChlCmd.isP2PProbeReqAllowed = isP2PProbeReqAllowed; pRemainChlCmd->u.remainChlCmd.callback = callback; pRemainChlCmd->u.remainChlCmd.callbackCtx = pContext; @@ -809,16 +831,18 @@ eHalStatus p2pSendAction(tHalHandle hHal, tANI_U8 sessionId, VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO_MED, " %s sends action frame", __func__); msgLen = (tANI_U16)((sizeof( tSirMbMsg )) + len); - status = palAllocateMemory(pMac->hHdd, (void **)&pMsg, msgLen); - if(HAL_STATUS_SUCCESS(status)) + pMsg = vos_mem_malloc(msgLen); + if ( NULL == pMsg ) + status = eHAL_STATUS_FAILURE; + else { - palZeroMemory(pMac->hHdd, (void *)pMsg, msgLen); + vos_mem_set((void *)pMsg, msgLen, 0); pMsg->type = pal_cpu_to_be16((tANI_U16)eWNI_SME_SEND_ACTION_FRAME_IND); pMsg->msgLen = pal_cpu_to_be16(msgLen); pMsg->sessionId = sessionId; pMsg->noack = noack; pMsg->wait = (tANI_U16)wait; - palCopyMemory( pMac->hHdd, pMsg->data, pBuf, len ); + vos_mem_copy(pMsg->data, pBuf, len); status = palSendMBMessage(pMac->hHdd, pMsg); } @@ -835,10 +859,12 @@ eHalStatus p2pCancelRemainOnChannel(tHalHandle hHal, tANI_U8 sessionId) //Need to check session ID to support concurrency msgLen = (tANI_U16)(sizeof( tSirMbMsg )); - status = palAllocateMemory(pMac->hHdd, (void **)&pMsg, msgLen); - if(HAL_STATUS_SUCCESS(status)) + pMsg = vos_mem_malloc(msgLen); + if ( NULL == pMsg ) + status = eHAL_STATUS_FAILURE; + else { - palZeroMemory(pMac->hHdd, (void *)pMsg, msgLen); + vos_mem_set((void *)pMsg, msgLen, 0); pMsg->type = pal_cpu_to_be16((tANI_U16)eWNI_SME_ABORT_REMAIN_ON_CHAN_IND); pMsg->msgLen = pal_cpu_to_be16(msgLen); pMsg->sessionId = sessionId; @@ -855,11 +881,13 @@ eHalStatus p2pSetPs(tHalHandle hHal, tP2pPsConfig *pNoA) eHalStatus status = eHAL_STATUS_SUCCESS; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - status = palAllocateMemory(pMac->hHdd, (void**)&pNoAParam, sizeof(tP2pPsConfig)); - if(HAL_STATUS_SUCCESS(status)) + pNoAParam = vos_mem_malloc(sizeof(tP2pPsConfig)); + if ( NULL == pNoAParam ) + status = eHAL_STATUS_FAILURE; + else { - palZeroMemory(pMac->hHdd, pNoAParam, sizeof(tP2pPsConfig)); - palCopyMemory(pMac->hHdd, pNoAParam, pNoA, sizeof(tP2pPsConfig)); + vos_mem_set(pNoAParam, sizeof(tP2pPsConfig), 0); + vos_mem_copy(pNoAParam, pNoA, sizeof(tP2pPsConfig)); msg.type = eWNI_SME_UPDATE_NOA; msg.bodyval = 0; msg.bodyptr = pNoAParam; @@ -1026,9 +1054,12 @@ void P2P_UpdateMacHdr(tHalHandle hHal, tANI_U8 SessionID, tANI_U8 *pBuf) macHdr->fc.subType = 13; macHdr->durationLo = 0; macHdr->durationHi = 0; - vos_mem_copy(macHdr->da, pMac->p2pContext[SessionID].peerMacAddress, P2P_MAC_ADDRESS_LEN); - vos_mem_copy(macHdr->sa, pMac->p2pContext[SessionID].selfMacAddress, P2P_MAC_ADDRESS_LEN); - vos_mem_copy(macHdr->bssId, pMac->p2pContext[SessionID].peerMacAddress, P2P_MAC_ADDRESS_LEN); + vos_mem_copy(macHdr->da, pMac->p2pContext[SessionID].peerMacAddress, + P2P_MAC_ADDRESS_LEN); + vos_mem_copy(macHdr->sa, pMac->p2pContext[SessionID].selfMacAddress, + P2P_MAC_ADDRESS_LEN); + vos_mem_copy(macHdr->bssId, pMac->p2pContext[SessionID].peerMacAddress, + P2P_MAC_ADDRESS_LEN); return; } @@ -1081,7 +1112,7 @@ void p2pRetryActionFrameTimerHandler(void *pContext) p2pContext->PeerFound = TRUE; smsLog( pMac, LOGE, "%s Calling remain on channel ", __func__); status = p2pRemainOnChannel( pMac, p2pContext->SMEsessionId, p2pContext->P2PListenChannel/*pScanResult->BssDescriptor.channelId*/, P2P_REMAIN_ON_CHAN_TIMEOUT_LOW, - NULL, NULL, eP2PRemainOnChnReasonSendFrame); + NULL, NULL, TRUE, eP2PRemainOnChnReasonSendFrame); if(status != eHAL_STATUS_SUCCESS) { smsLog( pMac, LOGE, "%s remain on channel failed", __func__); @@ -1212,7 +1243,7 @@ eHalStatus p2pCreateActionFrame(tpAniSirGlobal pMac, tANI_U8 SessionID, void *p2 P2P_UpdateMacHdr(pMac, SessionID, pActionFrm); pBuf = (tANI_U8 *)vos_mem_malloc( nActionFrmlen); - if(NULL == pBuf) + if (NULL == pBuf) { smsLog(pMac, LOGE, FL(" fail to allocate memory")); if (pActionFrm) @@ -1301,7 +1332,9 @@ static eHalStatus p2pSendActionFrame(tpAniSirGlobal pMac, tANI_U8 HDDSessionID, __func__, pScanResult->BssDescriptor.channelId); p2pSetListenChannel(pMac, pP2pContext->sessionId, pScanResult->BssDescriptor.channelId); } - vos_mem_copy(pP2pContext->formationReq.deviceAddress, pScanResult->BssDescriptor.bssId, P2P_MAC_ADDRESS_LEN); + vos_mem_copy(pP2pContext->formationReq.deviceAddress, + pScanResult->BssDescriptor.bssId, + P2P_MAC_ADDRESS_LEN); } csrScanResultPurge(pMac, hScanResult); } @@ -1311,9 +1344,9 @@ static eHalStatus p2pSendActionFrame(tpAniSirGlobal pMac, tANI_U8 HDDSessionID, filter.bWPSAssociation = TRUE; filter.BSSType = eCSR_BSS_TYPE_ANY; filter.SSIDs.SSIDList =( tCsrSSIDInfo *)vos_mem_malloc(sizeof(tCsrSSIDInfo)); - if( filter.SSIDs.SSIDList == NULL ) + if ( NULL == filter.SSIDs.SSIDList ) { - smsLog( pMac, LOGP, FL("vos_mem_malloc failed:") ); + smsLog( pMac, LOGP, FL("memory allocation failed for SSIDList") ); pP2pContext->GroupFormationPending = FALSE; return eHAL_STATUS_FAILURE; } @@ -1330,14 +1363,17 @@ static eHalStatus p2pSendActionFrame(tpAniSirGlobal pMac, tANI_U8 HDDSessionID, { pScanResult = csrScanResultGetFirst(pMac, hScanResult ); pP2pContext->formationReq.targetListenChannel = pScanResult->BssDescriptor.channelId; - vos_mem_copy(pP2pContext->formationReq.deviceAddress, pScanResult->BssDescriptor.bssId, P2P_MAC_ADDRESS_LEN); + vos_mem_copy(pP2pContext->formationReq.deviceAddress, + pScanResult->BssDescriptor.bssId, + P2P_MAC_ADDRESS_LEN); csrScanResultPurge(pMac, hScanResult); } else { VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, "%s not found match", __func__); pP2pContext->formationReq.targetListenChannel = 0; - vos_mem_copy(pP2pContext->formationReq.deviceAddress, pP2pContext->peerMacAddress, P2P_MAC_ADDRESS_LEN); + vos_mem_copy(pP2pContext->formationReq.deviceAddress, pP2pContext->peerMacAddress, + P2P_MAC_ADDRESS_LEN); status = eHAL_STATUS_SUCCESS; } vos_mem_free(filter.SSIDs.SSIDList); @@ -1346,7 +1382,8 @@ static eHalStatus p2pSendActionFrame(tpAniSirGlobal pMac, tANI_U8 HDDSessionID, { VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, "%s not found match", __func__); pP2pContext->formationReq.targetListenChannel = 0; - vos_mem_copy(pP2pContext->formationReq.deviceAddress, pP2pContext->peerMacAddress, P2P_MAC_ADDRESS_LEN); + vos_mem_copy(pP2pContext->formationReq.deviceAddress, + pP2pContext->peerMacAddress, P2P_MAC_ADDRESS_LEN); status = eHAL_STATUS_SUCCESS; } } @@ -1376,7 +1413,7 @@ static eHalStatus p2pSendActionFrame(tpAniSirGlobal pMac, tANI_U8 HDDSessionID, if(p2pRemainOnChannel( pMac, pP2pContext->SMEsessionId, pP2pContext->P2PListenChannel, P2P_REMAIN_ON_CHAN_TIMEOUT_LOW, - NULL, NULL, eP2PRemainOnChnReasonSendFrame)) + NULL, NULL, TRUE, eP2PRemainOnChnReasonSendFrame)) { VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, "%s remain on channel failed", __func__); } @@ -1418,9 +1455,9 @@ eHalStatus p2pCreateSendActionFrame(tHalHandle hHal, tANI_U8 HDDSessionID, pP2pContext->ActionFrameSendTimeout = WLAN_P2P_DEF_ACTION_FRM_TIMEOUT_VALUE; } - status = palTimerStart(pMac->hHdd, pP2pContext->actionFrameTimer, - pP2pContext->ActionFrameSendTimeout * PAL_TIMER_TO_MS_UNIT, eANI_BOOLEAN_FALSE); - if (!HAL_STATUS_SUCCESS(status)) + status = vos_timer_start(&pP2pContext->actionFrameTimer, + pP2pContext->ActionFrameSendTimeout); + if (!VOS_IS_STATUS_SUCCESS(status)) { tCsrRoamInfo RoamInfo; @@ -1482,7 +1519,7 @@ void p2pListenDiscoverTimerHandler(void *pContext) VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, "%s Calling RemainOnChannel with duration %d on channel %d", __func__, p2pContext->listenDuration, p2pContext->P2PListenChannel); status = p2pRemainOnChannel( p2pContext->hHal, p2pContext->SMEsessionId, p2pContext->P2PListenChannel, p2pContext->listenDuration, - p2pListenStateDiscoverableCallback, p2pContext, eP2PRemainOnChnReasonListen); + p2pListenStateDiscoverableCallback, p2pContext, TRUE, eP2PRemainOnChnReasonListen); } else { @@ -1506,8 +1543,8 @@ static eHalStatus p2pListenStateDiscoverableCallback(tHalHandle halHandle, void VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, "%s restart listen timer expire time %d", __func__, p2pContext->expire_time); //We can restart the listening - status = palTimerStart(pMac->hHdd, p2pContext->listenTimerHandler, p2pContext->expire_time, eANI_BOOLEAN_FALSE); - if (eHAL_STATUS_SUCCESS != status) + status = vos_timer_start(&p2pContext->listenTimerHandler, (p2pContext->expire_time)/PAL_TIMER_TO_MS_UNIT); + if (!VOS_IS_STATUS_SUCCESS(status)) { VOS_ASSERT(status); } @@ -1540,7 +1577,8 @@ eHalStatus P2P_ListenStateDiscoverable(tHalHandle hHal, tANI_U8 sessionId, if (pMac->p2pContext[sessionId].listenTimerHandler) { - status = palTimerStop(pMac->hHdd, pMac->p2pContext[sessionId].listenTimerHandler); + vos_timer_stop(&pMac->p2pContext[sessionId].listenTimerHandler); + status = eHAL_STATUS_SUCCESS; VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, "%s Timer Stop status %d", __func__, status); } @@ -1564,7 +1602,7 @@ eHalStatus P2P_ListenStateDiscoverable(tHalHandle hHal, tANI_U8 sessionId, __func__, pMac->p2pContext[sessionId].listenDuration, pMac->p2pContext[sessionId].P2PListenChannel); p2pRemainOnChannel( pMac, pMac->p2pContext[sessionId].SMEsessionId, pMac->p2pContext[sessionId].P2PListenChannel, pMac->p2pContext[sessionId].listenDuration, p2pListenStateDiscoverableCallback, - &pMac->p2pContext[sessionId], eP2PRemainOnChnReasonListen); + &pMac->p2pContext[sessionId], TRUE, eP2PRemainOnChnReasonListen); } else { @@ -1585,7 +1623,7 @@ eHalStatus P2P_ListenStateDiscoverable(tHalHandle hHal, tANI_U8 sessionId, __func__, pMac->p2pContext[sessionId].listenDuration, pMac->p2pContext[sessionId].P2PListenChannel); p2pRemainOnChannel( pMac, pMac->p2pContext[sessionId].SMEsessionId, pMac->p2pContext[sessionId].P2PListenChannel, pMac->p2pContext[sessionId].listenDuration, p2pListenStateDiscoverableCallback, - &pMac->p2pContext[sessionId], eP2PRemainOnChnReasonListen); + &pMac->p2pContext[sessionId], TRUE, eP2PRemainOnChnReasonListen); } else { @@ -1617,7 +1655,7 @@ eHalStatus P2P_ListenStateDiscoverable(tHalHandle hHal, tANI_U8 sessionId, __func__, pMac->p2pContext[sessionId].listenDuration, pMac->p2pContext[sessionId].P2PListenChannel); p2pRemainOnChannel( pMac, pMac->p2pContext[sessionId].SMEsessionId, pMac->p2pContext[sessionId].P2PListenChannel, pMac->p2pContext[sessionId].listenDuration, p2pListenStateDiscoverableCallback, - &pMac->p2pContext[sessionId], eP2PRemainOnChnReasonListen); + &pMac->p2pContext[sessionId], TRUE, eP2PRemainOnChnReasonListen); } break; @@ -1699,8 +1737,9 @@ eHalStatus p2pGetResultFilter(tp2pContext *pP2pContext, directedDiscoveryFilter = pP2pContext->directedDiscoveryFilter; if (pFilter->BSSIDs.numOfBSSIDs) { - bssid = ( tCsrBssid *) vos_mem_malloc( sizeof( tCsrBssid ) * pFilter->BSSIDs.numOfBSSIDs ); - if(NULL == bssid) + bssid = ( tCsrBssid *) vos_mem_malloc( + sizeof( tCsrBssid ) * pFilter->BSSIDs.numOfBSSIDs ); + if (NULL == bssid) { VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, " %s fail to allocate bssid", __func__); @@ -1712,7 +1751,8 @@ eHalStatus p2pGetResultFilter(tp2pContext *pP2pContext, for (i = 0; i < uNumDeviceFilters; i++) { - vos_mem_copy(bssid, directedDiscoveryFilter->DeviceID, P2P_MAC_ADDRESS_LEN); + vos_mem_copy(bssid, directedDiscoveryFilter->DeviceID, + P2P_MAC_ADDRESS_LEN); bssid += sizeof(tCsrBssid); directedDiscoveryFilter += sizeof(tp2pDiscoverDeviceFilter); } @@ -1721,9 +1761,9 @@ eHalStatus p2pGetResultFilter(tp2pContext *pP2pContext, directedDiscoveryFilter = pP2pContext->directedDiscoveryFilter; if (pFilter->SSIDs.numOfSSIDs) { - pFilter->SSIDs.SSIDList = (tCsrSSIDInfo *)vos_mem_malloc( sizeof( *pFilter->SSIDs.SSIDList ) * - pFilter->SSIDs.numOfSSIDs ); - if(NULL == pFilter->SSIDs.SSIDList) + pFilter->SSIDs.SSIDList = (tCsrSSIDInfo *)vos_mem_malloc( + sizeof( *pFilter->SSIDs.SSIDList ) * pFilter->SSIDs.numOfSSIDs ); + if (NULL == pFilter->SSIDs.SSIDList) { VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, " %s fail to allocate bssid", __func__); @@ -1825,7 +1865,8 @@ eHalStatus P2P_DiscoverRequest(tHalHandle hHal, if (pDiscoverRequest->uIELen) { pP2pContext->DiscoverReqIeField = (tANI_U8 *)vos_mem_malloc(pDiscoverRequest->uIELen); - vos_mem_copy((tANI_U8 *)pP2pContext->DiscoverReqIeField, pDiscoverRequest->pIEField, pDiscoverRequest->uIELen); + vos_mem_copy((tANI_U8 *)pP2pContext->DiscoverReqIeField, + pDiscoverRequest->pIEField, pDiscoverRequest->uIELen); pP2pContext->DiscoverReqIeLength = pDiscoverRequest->uIELen; } else @@ -1855,7 +1896,7 @@ eHalStatus P2P_DiscoverRequest(tHalHandle hHal, } pP2pContext->directedDiscoveryFilter = (tp2pDiscoverDeviceFilter *) vos_mem_malloc(sizeof(tp2pDiscoverDeviceFilter) * uNumDeviceFilters); - if(NULL == pP2pContext->directedDiscoveryFilter) + if (NULL == pP2pContext->directedDiscoveryFilter) { VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, "%s fail to allocate memory for discoverFilter", __func__); @@ -1868,8 +1909,8 @@ eHalStatus P2P_DiscoverRequest(tHalHandle hHal, pDeviceFilters = pDiscoverRequest->pDeviceFilters; if(NULL != pDeviceFilters) { - vos_mem_copy ( pP2pContext->directedDiscoveryFilter, pDeviceFilters, - sizeof(tp2pDiscoverDeviceFilter) * uNumDeviceFilters); + vos_mem_copy (pP2pContext->directedDiscoveryFilter, pDeviceFilters, + sizeof(tp2pDiscoverDeviceFilter) * uNumDeviceFilters); if(!HAL_STATUS_SUCCESS(status = p2pGetResultFilter(pP2pContext, &filter))) { @@ -1900,7 +1941,8 @@ eHalStatus P2P_DiscoverRequest(tHalHandle hHal, if (pDiscoverRequest->uNumDeviceFilters == 1 && filter.BSSIDs.numOfBSSIDs == 1) { vos_mem_copy(&pP2pContext->formationReq.deviceAddress, - pDiscoverRequest->pDeviceFilters->DeviceID, P2P_MAC_ADDRESS_LEN); + pDiscoverRequest->pDeviceFilters->DeviceID, + P2P_MAC_ADDRESS_LEN); } } } @@ -1920,9 +1962,9 @@ eHalStatus P2P_DiscoverRequest(tHalHandle hHal, pP2pContext->uDiscoverTimeout = pDiscoverRequest->uDiscoverTimeout; VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO_MED, "%s Start discover", __func__); - status = palTimerStart(pMac->hHdd, pP2pContext->discoverTimer, - pP2pContext->uDiscoverTimeout * 1000, eANI_BOOLEAN_FALSE); - if(!HAL_STATUS_SUCCESS(status)) + status = vos_timer_start(&pP2pContext->discoverTimer, + pP2pContext->uDiscoverTimeout); + if (!VOS_IS_STATUS_SUCCESS(status)) { VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, "%s failt to start discover timer", __func__); @@ -1986,7 +2028,7 @@ eHalStatus p2pScanRequest(tp2pContext *p2pContext, p2pDiscoverCompleteCallback c /* set the scan type to active */ scanRequest.scanType = eSIR_ACTIVE_SCAN; - vos_mem_set( scanRequest.bssid, sizeof( tCsrBssid ), 0xff ); + vos_mem_set(scanRequest.bssid, sizeof( tCsrBssid ), 0xff); scanRequest.requestType = eCSR_SCAN_P2P_FIND_PEER; /* set min and max channel time to zero */ @@ -2001,7 +2043,8 @@ eHalStatus p2pScanRequest(tp2pContext *p2pContext, p2pDiscoverCompleteCallback c scanRequest.p2pSearch = VOS_FALSE; P2P_GetIE(p2pContext, p2pContext->sessionId, eP2P_GROUP_ID, &p2pIe, &p2pIeLen); - vos_mem_copy(scanRequest.bssid, ((tP2PGroupId *)p2pIe)->deviceAddress, P2P_MAC_ADDRESS_LEN); + vos_mem_copy(scanRequest.bssid, ((tP2PGroupId *)p2pIe)->deviceAddress, + P2P_MAC_ADDRESS_LEN); P2P_GetIE(p2pContext, p2pContext->sessionId, eP2P_PROBE_REQ, &scanRequest.pIEField, &len); @@ -2128,7 +2171,7 @@ eHalStatus p2pStopDiscovery(tHalHandle hHal, tANI_U8 SessionID) tpAniSirGlobal pMac = PMAC_STRUCT(hHal); eHalStatus status = eHAL_STATUS_SUCCESS; - status = palTimerStop(pMac->hHdd, pMac->p2pContext[SessionID].discoverTimer); + status = vos_timer_stop(&pMac->p2pContext[SessionID].discoverTimer); if (status != eHAL_STATUS_SUCCESS) { VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, "%s Timer Stop status %d", __func__, status); @@ -2175,7 +2218,7 @@ eHalStatus p2pPurgeDeviceList(tpAniSirGlobal pMac, tDblLinkList *pList) csrFreeScanResultEntry( pMac, pBssResult ); } } - palFreeMemory(pMac->hHdd, pIes); + vos_mem_free(pIes); pEntry = pNext; } @@ -2253,10 +2296,12 @@ eHalStatus p2pProcessNoAReq(tpAniSirGlobal pMac, tSmeCmd *pNoACmd) tSirMsgQ msg; eHalStatus status = eHAL_STATUS_SUCCESS; - status = palAllocateMemory(pMac->hHdd, (void**)&pNoA, sizeof(tP2pPsConfig)); - if(HAL_STATUS_SUCCESS(status)) + pNoA = vos_mem_malloc(sizeof(tP2pPsConfig)); + if ( NULL == pNoA ) + status = eHAL_STATUS_FAILURE; + else { - palZeroMemory(pMac->hHdd, pNoA, sizeof(tP2pPsConfig)); + vos_mem_set(pNoA, sizeof(tP2pPsConfig), 0); pNoA->opp_ps = pNoACmd->u.NoACmd.NoA.opp_ps; pNoA->ctWindow = pNoACmd->u.NoACmd.NoA.ctWindow; pNoA->duration = pNoACmd->u.NoACmd.NoA.duration; diff --git a/CORE/SME/src/pmc/pmc.c b/CORE/SME/src/pmc/pmc.c index 692613b29cce..e9020b639ddc 100644 --- a/CORE/SME/src/pmc/pmc.c +++ b/CORE/SME/src/pmc/pmc.c @@ -72,24 +72,24 @@ eHalStatus pmcEnterLowPowerState (tHalHandle hHal) { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - smsLog(pMac, LOG2, FL("Entering pmcEnterLowPowerState")); + pmcLog(pMac, LOG2, FL("Entering pmcEnterLowPowerState")); /* If already in Low Power State, just return. */ if (pMac->pmc.pmcState == LOW_POWER) return eHAL_STATUS_SUCCESS; /* Cancel any running timers. */ - if (palTimerStop(pMac->hHdd, pMac->pmc.hImpsTimer) != eHAL_STATUS_SUCCESS) + if (vos_timer_stop(&pMac->pmc.hImpsTimer) != VOS_STATUS_SUCCESS) { - smsLog(pMac, LOGE, FL("Cannot cancel IMPS timer")); + pmcLog(pMac, LOGE, FL("Cannot cancel IMPS timer")); return eHAL_STATUS_FAILURE; } pmcStopTrafficTimer(hHal); - if (palTimerStop(pMac->hHdd, pMac->pmc.hExitPowerSaveTimer) != eHAL_STATUS_SUCCESS) + if (vos_timer_stop(&pMac->pmc.hExitPowerSaveTimer) != VOS_STATUS_SUCCESS) { - smsLog(pMac, LOGE, FL("Cannot cancel exit power save mode timer")); + pmcLog(pMac, LOGE, FL("Cannot cancel exit power save mode timer")); return eHAL_STATUS_FAILURE; } @@ -122,12 +122,12 @@ eHalStatus pmcExitLowPowerState (tHalHandle hHal) { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - smsLog(pMac, LOG2, FL("Entering pmcExitLowPowerState")); + pmcLog(pMac, LOG2, FL("Entering pmcExitLowPowerState")); /* Must be in Low Power State if we are going to exit that state. */ if (pMac->pmc.pmcState != LOW_POWER) { - smsLog(pMac, LOGE, FL("Cannot exit Low Power State if not in that state")); + pmcLog(pMac, LOGE, FL("Cannot exit Low Power State if not in that state")); return eHAL_STATUS_FAILURE; } @@ -166,7 +166,7 @@ eHalStatus pmcEnterFullPowerState (tHalHandle hHal) { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - smsLog(pMac, LOG2, FL("Entering pmcEnterFullPowerState")); + pmcLog(pMac, LOG2, FL("Entering pmcEnterFullPowerState")); /* Take action based on the current state. */ switch (pMac->pmc.pmcState) @@ -202,15 +202,15 @@ eHalStatus pmcEnterFullPowerState (tHalHandle hHal) /* Cannot go directly to Full Power State from these states. */ default: - smsLog(pMac, LOGE, FL("Trying to enter Full Power State from state %d"), pMac->pmc.pmcState); + pmcLog(pMac, LOGE, FL("Trying to enter Full Power State from state %d"), pMac->pmc.pmcState); PMC_ABORT; return eHAL_STATUS_FAILURE; } - smsLog(pMac, LOG1, "PMC: Enter full power done: Cancel XO Core ON vote"); + pmcLog(pMac, LOG1, "PMC: Enter full power done: Cancel XO Core ON vote"); if (vos_chipVoteXOCore(NULL, NULL, NULL, VOS_FALSE) != VOS_STATUS_SUCCESS) { - smsLog(pMac, LOGE, "Could not cancel XO Core ON vote. Not returning failure. " + pmcLog(pMac, LOGE, "Could not cancel XO Core ON vote. Not returning failure. " "Power consumed will be high"); } @@ -240,7 +240,7 @@ eHalStatus pmcEnterRequestFullPowerState (tHalHandle hHal, tRequestFullPowerReas vos_call_status_type callType; VOS_STATUS status; - smsLog(pMac, LOG2, FL("Entering pmcEnterRequestFullPowerState")); + pmcLog(pMac, LOG2, FL("Entering pmcEnterRequestFullPowerState")); /* Take action based on the current state of the device. */ switch (pMac->pmc.pmcState) @@ -248,12 +248,12 @@ eHalStatus pmcEnterRequestFullPowerState (tHalHandle hHal, tRequestFullPowerReas /* Should not request full power if already there. */ case FULL_POWER: - smsLog(pMac, LOGE, FL("Requesting Full Power State when already there")); + pmcLog(pMac, LOGE, FL("Requesting Full Power State when already there")); return eHAL_STATUS_FAILURE; /* Only power events can take device out of Low Power State. */ case LOW_POWER: - smsLog(pMac, LOGE, FL("Cannot request exit from Low Power State")); + pmcLog(pMac, LOGE, FL("Cannot request exit from Low Power State")); return eHAL_STATUS_FAILURE; /* Cannot go directly to Request Full Power state from these states. @@ -265,7 +265,7 @@ eHalStatus pmcEnterRequestFullPowerState (tHalHandle hHal, tRequestFullPowerReas case REQUEST_BMPS: case REQUEST_ENTER_WOWL: case REQUEST_EXIT_WOWL: - smsLog(pMac, LOGW, FL("Request for full power is being buffered. " + pmcLog(pMac, LOGW, FL("Request for full power is being buffered. " "Current state is %d"), pMac->pmc.pmcState); //Ignore the new reason if request for full power is already pending if( !pMac->pmc.requestFullPowerPending ) @@ -333,7 +333,7 @@ eHalStatus pmcEnterRequestFullPowerState (tHalHandle hHal, tRequestFullPowerReas if (pmcIssueCommand(hHal, 0, eSmeCommandExitImps, NULL, 0, FALSE) != eHAL_STATUS_SUCCESS) { - smsLog(pMac, LOGE, "PMC: failure to send message " + pmcLog(pMac, LOGE, "PMC: failure to send message " "eWNI_PMC_EXIT_IMPS_REQ"); return eHAL_STATUS_FAILURE; } @@ -346,7 +346,7 @@ eHalStatus pmcEnterRequestFullPowerState (tHalHandle hHal, tRequestFullPowerReas if (pmcIssueCommand(hHal, 0, eSmeCommandExitUapsd, &fullPowerReason, sizeof(tRequestFullPowerReason), FALSE) != eHAL_STATUS_SUCCESS) { - smsLog(pMac, LOGE, "PMC: failure to send message " + pmcLog(pMac, LOGE, "PMC: failure to send message " "eWNI_PMC_EXIT_UAPSD_REQ"); return eHAL_STATUS_FAILURE; } @@ -357,7 +357,7 @@ eHalStatus pmcEnterRequestFullPowerState (tHalHandle hHal, tRequestFullPowerReas if (pmcIssueCommand(hHal, 0, eSmeCommandExitWowl, &fullPowerReason, sizeof(tRequestFullPowerReason), FALSE) != eHAL_STATUS_SUCCESS) { - smsLog(pMac, LOGP, "PMC: failure to send message " + pmcLog(pMac, LOGP, "PMC: failure to send message " "eWNI_PMC_EXIT_WOWL_REQ"); return eHAL_STATUS_FAILURE; } @@ -365,7 +365,8 @@ eHalStatus pmcEnterRequestFullPowerState (tHalHandle hHal, tRequestFullPowerReas /* Cannot go directly to Request Full Power State from these states. */ default: - smsLog(pMac, LOGE, FL("Trying to enter Request Full Power State from state %d"), pMac->pmc.pmcState); + pmcLog(pMac, LOGE, + FL("Trying to enter Request Full Power State from state %d"), pMac->pmc.pmcState); PMC_ABORT; return eHAL_STATUS_FAILURE; } @@ -391,12 +392,12 @@ eHalStatus pmcEnterRequestImpsState (tHalHandle hHal) { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - smsLog(pMac, LOG2, FL("Entering pmcEnterRequestImpsState")); + pmcLog(pMac, LOG2, FL("Entering pmcEnterRequestImpsState")); /* Can enter Request IMPS State only from Full Power State. */ if (pMac->pmc.pmcState != FULL_POWER) { - smsLog(pMac, LOGE, FL("Trying to enter Request IMPS State from state %d"), pMac->pmc.pmcState); + pmcLog(pMac, LOGE, FL("Trying to enter Request IMPS State from state %d"), pMac->pmc.pmcState); return eHAL_STATUS_FAILURE; } @@ -407,14 +408,14 @@ eHalStatus pmcEnterRequestImpsState (tHalHandle hHal) if (pmcIssueCommand(hHal, 0, eSmeCommandEnterImps, NULL, 0, FALSE) != eHAL_STATUS_SUCCESS) { - smsLog(pMac, LOGE, "PMC: failure to send message eWNI_PMC_ENTER_IMPS_REQ"); + pmcLog(pMac, LOGE, "PMC: failure to send message eWNI_PMC_ENTER_IMPS_REQ"); pMac->pmc.pmcState = FULL_POWER; if(pmcShouldBmpsTimerRun(pMac)) (void)pmcStartTrafficTimer(hHal, pMac->pmc.bmpsConfig.trafficMeasurePeriod); return eHAL_STATUS_FAILURE; } - smsLog(pMac, LOG2, FL("eWNI_PMC_ENTER_IMPS_REQ sent to PE")); + pmcLog(pMac, LOG2, FL("eWNI_PMC_ENTER_IMPS_REQ sent to PE")); return eHAL_STATUS_SUCCESS; } @@ -440,12 +441,12 @@ eHalStatus pmcEnterImpsState (tHalHandle hHal) tpAniSirGlobal pMac = PMAC_STRUCT(hHal); vos_call_status_type callType; VOS_STATUS status; - smsLog(pMac, LOG2, FL("Entering pmcEnterImpsState")); + pmcLog(pMac, LOG2, FL("Entering pmcEnterImpsState")); /* Can enter IMPS State only from Request IMPS State. */ if (pMac->pmc.pmcState != REQUEST_IMPS) { - smsLog(pMac, LOGE, FL("Trying to enter IMPS State from state %d"), pMac->pmc.pmcState); + pmcLog(pMac, LOGE, FL("Trying to enter IMPS State from state %d"), pMac->pmc.pmcState); return eHAL_STATUS_FAILURE; } @@ -464,21 +465,23 @@ eHalStatus pmcEnterImpsState (tHalHandle hHal) /* Set timer to come out of IMPS.only if impsPeriod is non-Zero*/ if(0 != pMac->pmc.impsPeriod) { - if (palTimerStart(pMac->hHdd, pMac->pmc.hImpsTimer, pMac->pmc.impsPeriod * 1000, FALSE) != eHAL_STATUS_SUCCESS) + if (vos_timer_start(&pMac->pmc.hImpsTimer, pMac->pmc.impsPeriod) != VOS_STATUS_SUCCESS) { PMC_ABORT; pMac->pmc.ImpsReqTimerFailed = VOS_TRUE; if (!(pMac->pmc.ImpsReqTimerfailCnt & 0xF)) { pMac->pmc.ImpsReqTimerfailCnt++; - smsLog(pMac, LOGE, FL("Cannot start IMPS timer, FailCnt - %d"), pMac->pmc.ImpsReqTimerfailCnt); + pmcLog(pMac, LOGE, + FL("Cannot start IMPS timer, FailCnt - %d"), pMac->pmc.ImpsReqTimerfailCnt); } pmcEnterRequestFullPowerState(hHal, eSME_REASON_OTHER); return eHAL_STATUS_FAILURE; } if (pMac->pmc.ImpsReqTimerfailCnt) { - smsLog(pMac, LOGE, FL("Start IMPS timer was failed %d times before success"), pMac->pmc.ImpsReqTimerfailCnt); + pmcLog(pMac, LOGE, + FL("Start IMPS timer was failed %d times before success"), pMac->pmc.ImpsReqTimerfailCnt); } pMac->pmc.ImpsReqTimerfailCnt = 0; } @@ -516,12 +519,13 @@ eHalStatus pmcEnterRequestBmpsState (tHalHandle hHal) { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - smsLog(pMac, LOG2, FL("Entering pmcEnterRequestBmpsState")); + pmcLog(pMac, LOG2, FL("Entering pmcEnterRequestBmpsState")); /* Can enter Request BMPS State only from Full Power State. */ if (pMac->pmc.pmcState != FULL_POWER) { - smsLog(pMac, LOGE, FL("Trying to enter Request BMPS State from state %d"), pMac->pmc.pmcState); + pmcLog(pMac, LOGE, + FL("Trying to enter Request BMPS State from state %d"), pMac->pmc.pmcState); return eHAL_STATUS_FAILURE; } @@ -536,7 +540,7 @@ eHalStatus pmcEnterRequestBmpsState (tHalHandle hHal) if(pmcIssueCommand(hHal, 0, eSmeCommandEnterBmps, NULL, 0, FALSE) != eHAL_STATUS_SUCCESS) { - smsLog(pMac, LOGE, "PMC: failure to send message eWNI_PMC_ENTER_BMPS_REQ"); + pmcLog(pMac, LOGE, "PMC: failure to send message eWNI_PMC_ENTER_BMPS_REQ"); pMac->pmc.bmpsRequestQueued = eANI_BOOLEAN_FALSE; pMac->pmc.pmcState = FULL_POWER; if(pmcShouldBmpsTimerRun(pMac)) @@ -548,7 +552,7 @@ eHalStatus pmcEnterRequestBmpsState (tHalHandle hHal) } else { - smsLog(pMac, LOGE, "PMC: enter BMPS command already queued"); + pmcLog(pMac, LOGE, "PMC: enter BMPS command already queued"); //restart the timer if needed if(pmcShouldBmpsTimerRun(pMac)) { @@ -557,7 +561,7 @@ eHalStatus pmcEnterRequestBmpsState (tHalHandle hHal) return eHAL_STATUS_SUCCESS; } - smsLog(pMac, LOGW, FL("eWNI_PMC_ENTER_BMPS_REQ sent to PE")); + pmcLog(pMac, LOGW, FL("eWNI_PMC_ENTER_BMPS_REQ sent to PE")); return eHAL_STATUS_SUCCESS; } @@ -582,7 +586,7 @@ eHalStatus pmcEnterBmpsState (tHalHandle hHal) { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - smsLog(pMac, LOG2, FL("Entering pmcEnterBmpsState")); + pmcLog(pMac, LOG2, FL("Entering pmcEnterBmpsState")); /* Can enter BMPS State only from 5 states. */ if (pMac->pmc.pmcState != REQUEST_BMPS && @@ -591,7 +595,7 @@ eHalStatus pmcEnterBmpsState (tHalHandle hHal) pMac->pmc.pmcState != REQUEST_ENTER_WOWL && pMac->pmc.pmcState != REQUEST_EXIT_WOWL) { - smsLog(pMac, LOGE, FL("Trying to enter BMPS State from state %d"), pMac->pmc.pmcState); + pmcLog(pMac, LOGE, FL("Trying to enter BMPS State from state %d"), pMac->pmc.pmcState); return eHAL_STATUS_FAILURE; } @@ -608,7 +612,7 @@ eHalStatus pmcEnterBmpsState (tHalHandle hHal) { /* Start exit BMPS sequence now. */ - smsLog(pMac, LOGW, FL("Pending Full Power request found on entering BMPS mode. " + pmcLog(pMac, LOGW, FL("Pending Full Power request found on entering BMPS mode. " "Start exit BMPS exit sequence")); //Note: Reason must have been set when requestFullPowerPending flag was set. pmcEnterRequestFullPowerState(hHal, pMac->pmc.requestFullPowerReason); @@ -618,14 +622,14 @@ eHalStatus pmcEnterBmpsState (tHalHandle hHal) /*This should never happen ideally. WOWL and UAPSD not supported at the same time */ if (pMac->pmc.wowlModeRequired && pMac->pmc.uapsdSessionRequired) { - smsLog(pMac, LOGW, FL("Both UAPSD and WOWL is required on entering BMPS mode. " + pmcLog(pMac, LOGW, FL("Both UAPSD and WOWL is required on entering BMPS mode. " "UAPSD will be prioritized over WOWL")); } /* Do we need Uapsd?*/ if (pMac->pmc.uapsdSessionRequired) { - smsLog(pMac, LOGW, FL("UAPSD session is required on entering BMPS mode. " + pmcLog(pMac, LOGW, FL("UAPSD session is required on entering BMPS mode. " "Start UAPSD entry sequence")); pmcEnterRequestStartUapsdState(hHal); return eHAL_STATUS_SUCCESS; @@ -634,7 +638,7 @@ eHalStatus pmcEnterBmpsState (tHalHandle hHal) /* Do we need WOWL?*/ if (pMac->pmc.wowlModeRequired) { - smsLog(pMac, LOGW, FL("WOWL is required on entering BMPS mode. " + pmcLog(pMac, LOGW, FL("WOWL is required on entering BMPS mode. " "Start WOWL entry sequence")); pmcRequestEnterWowlState(hHal, &(pMac->pmc.wowlEnterParams)); } @@ -666,7 +670,7 @@ tANI_BOOLEAN pmcPowerSaveCheck (tHalHandle hHal) tANI_BOOLEAN (*checkRoutine) (void *checkContext); tANI_BOOLEAN bResult=FALSE; - smsLog(pMac, LOG2, FL("Entering pmcPowerSaveCheck")); + pmcLog(pMac, LOG2, FL("Entering pmcPowerSaveCheck")); /* Call the routines in the power save check routine list. If any return FALSE, then we cannot go into power save mode. */ @@ -682,7 +686,7 @@ tANI_BOOLEAN pmcPowerSaveCheck (tHalHandle hHal) { if (!checkRoutine(pPowerSaveCheckEntry->checkContext)) { - smsLog(pMac, LOGE, FL("pmcPowerSaveCheck fail!")); + pmcLog(pMac, LOGE, FL("pmcPowerSaveCheck fail!")); bResult = FALSE; break; } @@ -718,9 +722,9 @@ eHalStatus pmcSendPowerSaveConfigMessage (tHalHandle hHal) tpAniSirGlobal pMac = PMAC_STRUCT(hHal); tSirPowerSaveCfg powerSaveConfig; - smsLog(pMac, LOG2, FL("Entering pmcSendPowerSaveConfigMessage")); + pmcLog(pMac, LOG2, FL("Entering pmcSendPowerSaveConfigMessage")); - palZeroMemory(pMac->hHdd, &(powerSaveConfig), sizeof(tSirPowerSaveCfg)); + vos_mem_set(&(powerSaveConfig), sizeof(tSirPowerSaveCfg), 0); switch (pMac->pmc.bmpsConfig.forwardBeacons) { @@ -779,7 +783,7 @@ eHalStatus pmcSendPowerSaveConfigMessage (tHalHandle hHal) if (pmcSendMessage(hHal, eWNI_PMC_PWR_SAVE_CFG, &powerSaveConfig, sizeof(tSirPowerSaveCfg)) != eHAL_STATUS_SUCCESS) { - smsLog(pMac, LOGE, FL("Send of eWNI_PMC_PWR_SAVE_CFG to PE failed")); + pmcLog(pMac, LOGE, FL("Send of eWNI_PMC_PWR_SAVE_CFG to PE failed")); return eHAL_STATUS_FAILURE; } @@ -809,12 +813,13 @@ eHalStatus pmcSendMessage (tpAniSirGlobal pMac, tANI_U16 messageType, void *pMes { tSirMbMsg *pMsg; - smsLog(pMac, LOG2, FL("Entering pmcSendMessage, message type %d"), messageType); + pmcLog(pMac, LOG2, FL("Entering pmcSendMessage, message type %d"), messageType); /* Allocate and fill in message. */ - if (palAllocateMemory(pMac->hHdd, (void **)&pMsg, WNI_CFG_MB_HDR_LEN + messageSize) != eHAL_STATUS_SUCCESS) + pMsg = vos_mem_malloc(WNI_CFG_MB_HDR_LEN + messageSize); + if ( NULL == pMsg ) { - smsLog(pMac, LOGE, FL("Cannot allocate memory for message")); + pmcLog(pMac, LOGE, FL("Cannot allocate memory for message")); PMC_ABORT; return eHAL_STATUS_FAILURE; } @@ -822,18 +827,13 @@ eHalStatus pmcSendMessage (tpAniSirGlobal pMac, tANI_U16 messageType, void *pMes pMsg->msgLen = (tANI_U16) (WNI_CFG_MB_HDR_LEN + messageSize); if (messageSize > 0) { - if (palCopyMemory(pMac->hHdd, pMsg->data, pMessageData, messageSize) != eHAL_STATUS_SUCCESS) - { - smsLog(pMac, LOGE, FL("Cannot copy message data")); - PMC_ABORT; - return eHAL_STATUS_FAILURE; - } + vos_mem_copy(pMsg->data, pMessageData, messageSize); } /* Send message. */ if (palSendMBMessage(pMac->hHdd, pMsg) != eHAL_STATUS_SUCCESS) { - smsLog(pMac, LOGE, FL("Cannot send message")); + pmcLog(pMac, LOGE, FL("Cannot send message")); PMC_ABORT; return eHAL_STATUS_FAILURE; } @@ -864,7 +864,7 @@ void pmcDoCallbacks (tHalHandle hHal, eHalStatus callbackStatus) tListElem *pEntry; tpRequestFullPowerEntry pRequestFullPowerEntry; - smsLog(pMac, LOG2, FL("Entering pmcDoCallbacks")); + pmcLog(pMac, LOG2, FL("Entering pmcDoCallbacks")); /* Call IMPS callback routine. */ if (pMac->pmc.impsCallbackRoutine != NULL) @@ -879,11 +879,7 @@ void pmcDoCallbacks (tHalHandle hHal, eHalStatus callbackStatus) pRequestFullPowerEntry = GET_BASE_ADDR(pEntry, tRequestFullPowerEntry, link); if (pRequestFullPowerEntry->callbackRoutine) pRequestFullPowerEntry->callbackRoutine(pRequestFullPowerEntry->callbackContext, callbackStatus); - if (palFreeMemory(pMac->hHdd, pRequestFullPowerEntry) != eHAL_STATUS_SUCCESS) - { - smsLog(pMac, LOGE, FL("Cannot free request full power routine list entry")); - PMC_ABORT; - } + vos_mem_free(pRequestFullPowerEntry); } } @@ -910,7 +906,7 @@ eHalStatus pmcStartTrafficTimer (tHalHandle hHal, tANI_U32 expirationTime) tpAniSirGlobal pMac = PMAC_STRUCT(hHal); VOS_STATUS vosStatus; - smsLog(pMac, LOG2, FL("Entering pmcStartTrafficTimer")); + pmcLog(pMac, LOG2, FL("Entering pmcStartTrafficTimer")); vosStatus = vos_timer_start(&pMac->pmc.hTrafficTimer, expirationTime); if ( !VOS_IS_STATUS_SUCCESS(vosStatus) ) @@ -918,11 +914,11 @@ eHalStatus pmcStartTrafficTimer (tHalHandle hHal, tANI_U32 expirationTime) if( VOS_STATUS_E_ALREADY == vosStatus ) { //Consider this ok since the timer is already started. - smsLog(pMac, LOGW, FL(" traffic timer is already started")); + pmcLog(pMac, LOGW, FL(" traffic timer is already started")); } else { - smsLog(pMac, LOGP, FL("Cannot start traffic timer")); + pmcLog(pMac, LOGP, FL("Cannot start traffic timer")); return eHAL_STATUS_FAILURE; } } @@ -947,7 +943,7 @@ eHalStatus pmcStartTrafficTimer (tHalHandle hHal, tANI_U32 expirationTime) void pmcStopTrafficTimer (tHalHandle hHal) { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - smsLog(pMac, LOG2, FL("Entering pmcStopTrafficTimer")); + pmcLog(pMac, LOG2, FL("Entering pmcStopTrafficTimer")); vos_timer_stop(&pMac->pmc.hTrafficTimer); } @@ -970,12 +966,12 @@ void pmcImpsTimerExpired (tHalHandle hHal) { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - smsLog(pMac, LOG2, FL("Entering pmcImpsTimerExpired")); + pmcLog(pMac, LOG2, FL("Entering pmcImpsTimerExpired")); /* If timer expires and we are in a state other than IMPS State then something is wrong. */ if (pMac->pmc.pmcState != IMPS) { - smsLog(pMac, LOGE, FL("Got IMPS timer expiration in state %d"), pMac->pmc.pmcState); + pmcLog(pMac, LOGE, FL("Got IMPS timer expiration in state %d"), pMac->pmc.pmcState); PMC_ABORT; return; } @@ -1005,23 +1001,24 @@ void pmcTrafficTimerExpired (tHalHandle hHal) tpAniSirGlobal pMac = PMAC_STRUCT(hHal); VOS_STATUS vosStatus; - smsLog(pMac, LOG2, FL("BMPS Traffic timer expired")); + pmcLog(pMac, LOG2, FL("BMPS Traffic timer expired")); /* If timer expires and we are in a state other than Full Power State then something is wrong. */ if (pMac->pmc.pmcState != FULL_POWER) { - smsLog(pMac, LOGE, FL("Got traffic timer expiration in state %d"), pMac->pmc.pmcState); + pmcLog(pMac, LOGE, FL("Got traffic timer expiration in state %d"), pMac->pmc.pmcState); return; } /* Untill DHCP is not completed remain in power active */ if(pMac->pmc.remainInPowerActiveTillDHCP) { - smsLog(pMac, LOG2, FL("BMPS Traffic Timer expired before DHCP completion ignore enter BMPS")); + pmcLog(pMac, LOG2, FL("BMPS Traffic Timer expired before DHCP completion ignore enter BMPS")); pMac->pmc.remainInPowerActiveThreshold++; if( pMac->pmc.remainInPowerActiveThreshold >= DHCP_REMAIN_POWER_ACTIVE_THRESHOLD) { - smsLog(pMac, LOGE, FL("Remain in power active DHCP threshold reached FALLBACK to enable enter BMPS")); + pmcLog(pMac, LOGE, + FL("Remain in power active DHCP threshold reached FALLBACK to enable enter BMPS")); /*FALLBACK: reset the flag to make BMPS entry possible*/ pMac->pmc.remainInPowerActiveTillDHCP = FALSE; pMac->pmc.remainInPowerActiveThreshold = 0; @@ -1030,7 +1027,7 @@ void pmcTrafficTimerExpired (tHalHandle hHal) vosStatus = vos_timer_start(&pMac->pmc.hTrafficTimer, pMac->pmc.bmpsConfig.trafficMeasurePeriod); if ( !VOS_IS_STATUS_SUCCESS(vosStatus) && (VOS_STATUS_E_ALREADY != vosStatus) ) { - smsLog(pMac, LOGP, FL("Cannot re-start traffic timer")); + pmcLog(pMac, LOGP, FL("Cannot re-start traffic timer")); } return; } @@ -1041,32 +1038,32 @@ void pmcTrafficTimerExpired (tHalHandle hHal) /* Check if the timer should be running */ if (!pmcShouldBmpsTimerRun(pMac)) { - smsLog(pMac, LOGE, FL("BMPS timer should not be running")); + pmcLog(pMac, LOGE, FL("BMPS timer should not be running")); return; } #ifdef FEATURE_WLAN_TDLS if (pMac->isTdlsPowerSaveProhibited) { - smsLog(pMac, LOGE, FL("TDLS peer(s) connected/discovery sent. Dont enter BMPS")); + pmcLog(pMac, LOGE, FL("TDLS peer(s) connected/discovery sent. Dont enter BMPS")); return; } #endif if (pmcPowerSaveCheck(hHal)) { - smsLog(pMac, LOGW, FL("BMPS entry criteria satisfied. Requesting BMPS state")); + pmcLog(pMac, LOGW, FL("BMPS entry criteria satisfied. Requesting BMPS state")); (void)pmcEnterRequestBmpsState(hHal); } else { /*Some module voted against Power Save. So timer should be restarted again to retry BMPS */ - smsLog(pMac, LOGE, FL("Power Save check failed. Retry BMPS again later")); + pmcLog(pMac, LOGE, FL("Power Save check failed. Retry BMPS again later")); //Since hTrafficTimer is a vos_timer now, we need to restart the timer here vosStatus = vos_timer_start(&pMac->pmc.hTrafficTimer, pMac->pmc.bmpsConfig.trafficMeasurePeriod); if ( !VOS_IS_STATUS_SUCCESS(vosStatus) && (VOS_STATUS_E_ALREADY != vosStatus) ) { - smsLog(pMac, LOGP, FL("Cannot start traffic timer")); + pmcLog(pMac, LOGP, FL("Cannot start traffic timer")); return; } } @@ -1091,7 +1088,7 @@ void pmcExitPowerSaveTimerExpired (tHalHandle hHal) { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - smsLog(pMac, LOG2, FL("Entering pmcExitPowerSaveTimerExpired")); + pmcLog(pMac, LOG2, FL("Entering pmcExitPowerSaveTimerExpired")); /* Make sure process of exiting power save mode might hasn't already been started due to another trigger. */ if (pMac->pmc.requestFullPowerPending) @@ -1122,7 +1119,7 @@ void pmcDoBmpsCallbacks (tHalHandle hHal, eHalStatus callbackStatus) tListElem *pEntry; tpRequestBmpsEntry pRequestBmpsEntry; - smsLog(pMac, LOG2, "PMC: entering pmcDoBmpsCallbacks"); + pmcLog(pMac, LOG2, "PMC: entering pmcDoBmpsCallbacks"); /* Call the routines in the request BMPS callback routine list. */ csrLLLock(&pMac->pmc.requestBmpsList); @@ -1133,7 +1130,7 @@ void pmcDoBmpsCallbacks (tHalHandle hHal, eHalStatus callbackStatus) if (pRequestBmpsEntry->callbackRoutine) pRequestBmpsEntry->callbackRoutine(pRequestBmpsEntry->callbackContext, callbackStatus); - palFreeMemory(pMac->hHdd, pRequestBmpsEntry); + vos_mem_free(pRequestBmpsEntry); pEntry = csrLLRemoveHead(&pMac->pmc.requestBmpsList, FALSE); } csrLLUnlock(&pMac->pmc.requestBmpsList); @@ -1164,7 +1161,7 @@ void pmcDoStartUapsdCallbacks (tHalHandle hHal, eHalStatus callbackStatus) tListElem *pEntry; tpStartUapsdEntry pStartUapsdEntry; - smsLog(pMac, LOG2, "PMC: entering pmcDoStartUapsdCallbacks"); + pmcLog(pMac, LOG2, "PMC: entering pmcDoStartUapsdCallbacks"); csrLLLock(&pMac->pmc.requestStartUapsdList); /* Call the routines in the request start UAPSD callback routine list. */ pEntry = csrLLRemoveHead(&pMac->pmc.requestStartUapsdList, FALSE); @@ -1173,7 +1170,7 @@ void pmcDoStartUapsdCallbacks (tHalHandle hHal, eHalStatus callbackStatus) pStartUapsdEntry = GET_BASE_ADDR(pEntry, tStartUapsdEntry, link); pStartUapsdEntry->callbackRoutine(pStartUapsdEntry->callbackContext, callbackStatus); - palFreeMemory(pMac->hHdd, pStartUapsdEntry); + vos_mem_free(pStartUapsdEntry); pEntry = csrLLRemoveHead(&pMac->pmc.requestStartUapsdList, FALSE); } csrLLUnlock(&pMac->pmc.requestStartUapsdList); @@ -1199,7 +1196,7 @@ eHalStatus pmcEnterRequestStartUapsdState (tHalHandle hHal) tpAniSirGlobal pMac = PMAC_STRUCT(hHal); v_BOOL_t fFullPower = VOS_FALSE; //need to get back to full power state - smsLog(pMac, LOG2, "PMC: entering pmcEnterRequestStartUapsdState"); + pmcLog(pMac, LOG2, "PMC: entering pmcEnterRequestStartUapsdState"); /* Can enter UAPSD State only from FULL_POWER or BMPS State. */ switch (pMac->pmc.pmcState) @@ -1208,7 +1205,7 @@ eHalStatus pmcEnterRequestStartUapsdState (tHalHandle hHal) /* Check that entry into a power save mode is allowed at this time. */ if (!pmcPowerSaveCheck(hHal)) { - smsLog(pMac, LOGW, "PMC: Power save check failed. UAPSD request " + pmcLog(pMac, LOGW, "PMC: Power save check failed. UAPSD request " "will be accepted and buffered"); /* UAPSD mode will be attempted when we enter BMPS later */ pMac->pmc.uapsdSessionRequired = TRUE; @@ -1229,7 +1226,7 @@ eHalStatus pmcEnterRequestStartUapsdState (tHalHandle hHal) That is why no need to buffer the UAPSD request*/ if(pmcEnterRequestBmpsState(hHal) != eHAL_STATUS_SUCCESS) { - smsLog(pMac, LOGE, "PMC: Device in Full Power. Enter Request Bmps failed. " + pmcLog(pMac, LOGE, "PMC: Device in Full Power. Enter Request Bmps failed. " "UAPSD request will be dropped "); return eHAL_STATUS_FAILURE; } @@ -1253,7 +1250,7 @@ eHalStatus pmcEnterRequestStartUapsdState (tHalHandle hHal) if (pmcIssueCommand(hHal, 0, eSmeCommandEnterUapsd, NULL, 0, FALSE) != eHAL_STATUS_SUCCESS) { - smsLog(pMac, LOGE, "PMC: failure to send message " + pmcLog(pMac, LOGE, "PMC: failure to send message " "eWNI_PMC_ENTER_BMPS_REQ"); return eHAL_STATUS_FAILURE; } @@ -1262,7 +1259,7 @@ eHalStatus pmcEnterRequestStartUapsdState (tHalHandle hHal) else { //Not ready for UAPSD at this time, save it first and wake up the chip - smsLog(pMac, LOGE, " PMC state = %d",pMac->pmc.pmcState); + pmcLog(pMac, LOGE, " PMC state = %d",pMac->pmc.pmcState); pMac->pmc.uapsdSessionRequired = TRUE; /* While BTC traffic is going on, STA can be in BMPS * and need not go to Full Power */ @@ -1294,7 +1291,7 @@ eHalStatus pmcEnterRequestStartUapsdState (tHalHandle hHal) break; default: - smsLog(pMac, LOGE, "PMC: trying to enter UAPSD State from state %d", + pmcLog(pMac, LOGE, "PMC: trying to enter UAPSD State from state %d", pMac->pmc.pmcState); return eHAL_STATUS_FAILURE; } @@ -1304,7 +1301,7 @@ eHalStatus pmcEnterRequestStartUapsdState (tHalHandle hHal) if( eHAL_STATUS_PMC_PENDING != pmcRequestFullPower( pMac, NULL, NULL, eSME_REASON_OTHER ) ) { //This is an error - smsLog(pMac, LOGE, FL(" fail to request full power because BTC")); + pmcLog(pMac, LOGE, FL(" fail to request full power because BTC")); } } @@ -1330,12 +1327,12 @@ eHalStatus pmcEnterUapsdState (tHalHandle hHal) { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - smsLog(pMac, LOG2, "PMC: entering pmcEnterUapsdState"); + pmcLog(pMac, LOG2, "PMC: entering pmcEnterUapsdState"); /* Can enter UAPSD State only from Request UAPSD State. */ if (pMac->pmc.pmcState != REQUEST_START_UAPSD ) { - smsLog(pMac, LOGE, "PMC: trying to enter UAPSD State from state %d", + pmcLog(pMac, LOGE, "PMC: trying to enter UAPSD State from state %d", pMac->pmc.pmcState); return eHAL_STATUS_FAILURE; } @@ -1379,7 +1376,7 @@ eHalStatus pmcEnterRequestStopUapsdState (tHalHandle hHal) { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - smsLog(pMac, LOG2, "PMC: entering pmcEnterRequestStopUapsdState"); + pmcLog(pMac, LOG2, "PMC: entering pmcEnterRequestStopUapsdState"); /* If already in REQUEST_STOP_UAPSD, simply return */ if (pMac->pmc.pmcState == REQUEST_STOP_UAPSD) @@ -1390,7 +1387,7 @@ eHalStatus pmcEnterRequestStopUapsdState (tHalHandle hHal) /* Can enter Request Stop UAPSD State only from UAPSD */ if (pMac->pmc.pmcState != UAPSD) { - smsLog(pMac, LOGE, "PMC: trying to enter Request Stop UAPSD State from " + pmcLog(pMac, LOGE, "PMC: trying to enter Request Stop UAPSD State from " "state %d", pMac->pmc.pmcState); return eHAL_STATUS_FAILURE; } @@ -1399,7 +1396,7 @@ eHalStatus pmcEnterRequestStopUapsdState (tHalHandle hHal) if (pmcIssueCommand(hHal, 0, eSmeCommandExitUapsd, NULL, 0, FALSE) != eHAL_STATUS_SUCCESS) { - smsLog(pMac, LOGE, "PMC: failure to send message " + pmcLog(pMac, LOGE, "PMC: failure to send message " "eWNI_PMC_EXIT_UAPSD_REQ"); return eHAL_STATUS_FAILURE; } @@ -1426,12 +1423,12 @@ eHalStatus pmcEnterRequestStandbyState (tHalHandle hHal) { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - smsLog(pMac, LOG2, "PMC: entering pmcEnterRequestStandbyState"); + pmcLog(pMac, LOG2, "PMC: entering pmcEnterRequestStandbyState"); /* Can enter Standby State only from Full Power State. */ if (pMac->pmc.pmcState != FULL_POWER) { - smsLog(pMac, LOGE, "PMC: trying to enter Standby State from " + pmcLog(pMac, LOGE, "PMC: trying to enter Standby State from " "state %d", pMac->pmc.pmcState); return eHAL_STATUS_FAILURE; } @@ -1444,7 +1441,7 @@ eHalStatus pmcEnterRequestStandbyState (tHalHandle hHal) if (pmcIssueCommand(hHal, 0, eSmeCommandEnterStandby, NULL, 0, FALSE) != eHAL_STATUS_SUCCESS) { - smsLog(pMac, LOGE, "PMC: failure to send message " + pmcLog(pMac, LOGE, "PMC: failure to send message " "eWNI_PMC_ENTER_IMPS_REQ"); pMac->pmc.pmcState = FULL_POWER; @@ -1477,12 +1474,12 @@ eHalStatus pmcEnterStandbyState (tHalHandle hHal) vos_call_status_type callType; VOS_STATUS status; - smsLog(pMac, LOG2, "PMC: entering pmcEnterStandbyState"); + pmcLog(pMac, LOG2, "PMC: entering pmcEnterStandbyState"); /* Can enter STANDBY State only from REQUEST_STANDBY State. */ if (pMac->pmc.pmcState != REQUEST_STANDBY) { - smsLog(pMac, LOGE, "PMC: trying to enter STANDBY State from state %d", + pmcLog(pMac, LOGE, "PMC: trying to enter STANDBY State from state %d", pMac->pmc.pmcState); return eHAL_STATUS_FAILURE; } @@ -1530,7 +1527,7 @@ void pmcDoStandbyCallbacks (tHalHandle hHal, eHalStatus callbackStatus) { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - smsLog(pMac, LOG2, "PMC: entering pmcDoStandbyCallbacks"); + pmcLog(pMac, LOG2, "PMC: entering pmcDoStandbyCallbacks"); /* Call Standby callback routine. */ if (pMac->pmc.standbyCallbackRoutine != NULL) @@ -1609,7 +1606,7 @@ void pmcDoDeviceStateUpdateCallbacks (tHalHandle hHal, tPmcState state) tpDeviceStateUpdateIndEntry pDeviceStateUpdateIndEntry; void (*callbackRoutine) (void *callbackContext, tPmcState pmcState); - smsLog(pMac, LOG2, FL("PMC - Update registered modules of new device " + pmcLog(pMac, LOG2, FL("PMC - Update registered modules of new device " "state: %s"), pmcGetPmcStateStr(state)); /* Call the routines in the update device state routine list. */ @@ -1641,7 +1638,7 @@ void pmcDoDeviceStateUpdateCallbacks (tHalHandle hHal, tPmcState state) eHalStatus pmcRequestEnterWowlState(tHalHandle hHal, tpSirSmeWowlEnterParams wowlEnterParams) { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - smsLog(pMac, LOG2, "PMC: entering pmcRequestEnterWowlState"); + pmcLog(pMac, LOG2, "PMC: entering pmcRequestEnterWowlState"); if(pMac->psOffloadEnabled) { @@ -1661,14 +1658,14 @@ eHalStatus pmcRequestEnterWowlState(tHalHandle hHal, tpSirSmeWowlEnterParams wow /* Put device in BMPS mode first. This step should NEVER fail. */ if(pmcEnterRequestBmpsState(hHal) != eHAL_STATUS_SUCCESS) { - smsLog(pMac, LOGE, "PMC: Device in Full Power. pmcEnterRequestBmpsState failed. " + pmcLog(pMac, LOGE, "PMC: Device in Full Power. pmcEnterRequestBmpsState failed. " "Cannot enter WOWL"); return eHAL_STATUS_FAILURE; } break; case REQUEST_BMPS: - smsLog(pMac, LOGW, "PMC: BMPS transaction going on. WOWL request " + pmcLog(pMac, LOGW, "PMC: BMPS transaction going on. WOWL request " "will be buffered"); break; @@ -1680,24 +1677,24 @@ eHalStatus pmcRequestEnterWowlState(tHalHandle hHal, tpSirSmeWowlEnterParams wow if (pmcIssueCommand(hHal, 0, eSmeCommandEnterWowl, wowlEnterParams, sizeof(tSirSmeWowlEnterParams), FALSE) != eHAL_STATUS_SUCCESS) { - smsLog(pMac, LOGE, "PMC: failure to send message eWNI_PMC_ENTER_WOWL_REQ"); + pmcLog(pMac, LOGE, "PMC: failure to send message eWNI_PMC_ENTER_WOWL_REQ"); return eHAL_STATUS_FAILURE; } break; case REQUEST_ENTER_WOWL: //Multiple enter WOWL requests at the same time are not accepted - smsLog(pMac, LOGE, "PMC: Enter WOWL transaction already going on. New WOWL request " + pmcLog(pMac, LOGE, "PMC: Enter WOWL transaction already going on. New WOWL request " "will be rejected"); return eHAL_STATUS_FAILURE; case REQUEST_EXIT_WOWL: - smsLog(pMac, LOGW, "PMC: Exit WOWL transaction going on. New WOWL request " + pmcLog(pMac, LOGW, "PMC: Exit WOWL transaction going on. New WOWL request " "will be buffered"); break; default: - smsLog(pMac, LOGE, "PMC: Trying to enter WOWL State from state %s", + pmcLog(pMac, LOGE, "PMC: Trying to enter WOWL State from state %s", pmcGetPmcStateStr(pMac->pmc.pmcState)); return eHAL_STATUS_FAILURE; } @@ -1724,12 +1721,12 @@ eHalStatus pmcEnterWowlState (tHalHandle hHal) { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - smsLog(pMac, LOG2, "PMC: entering pmcEnterWowlState"); + pmcLog(pMac, LOG2, "PMC: entering pmcEnterWowlState"); /* Can enter WOWL State only from Request WOWL State. */ if (pMac->pmc.pmcState != REQUEST_ENTER_WOWL ) { - smsLog(pMac, LOGP, "PMC: trying to enter WOWL State from state %d", + pmcLog(pMac, LOGP, "PMC: trying to enter WOWL State from state %d", pMac->pmc.pmcState); return eHAL_STATUS_FAILURE; } @@ -1772,7 +1769,7 @@ eHalStatus pmcRequestExitWowlState(tHalHandle hHal, { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - smsLog(pMac, LOG2, "PMC: entering pmcRequestExitWowlState"); + pmcLog(pMac, LOG2, "PMC: entering pmcRequestExitWowlState"); if (pMac->psOffloadEnabled) { @@ -1793,17 +1790,17 @@ eHalStatus pmcRequestExitWowlState(tHalHandle hHal, if (pmcIssueCommand(hHal, 0, eSmeCommandExitWowl, NULL, 0, FALSE) != eHAL_STATUS_SUCCESS) { - smsLog(pMac, LOGP, "PMC: failure to send message eWNI_PMC_EXIT_WOWL_REQ"); + pmcLog(pMac, LOGP, "PMC: failure to send message eWNI_PMC_EXIT_WOWL_REQ"); return eHAL_STATUS_FAILURE; } break; case REQUEST_ENTER_WOWL: - smsLog(pMac, LOGP, "PMC: Rcvd exit WOWL even before enter WOWL was completed"); + pmcLog(pMac, LOGP, "PMC: Rcvd exit WOWL even before enter WOWL was completed"); return eHAL_STATUS_FAILURE; default: - smsLog(pMac, LOGW, "PMC: Got exit WOWL in state %s. Nothing to do as already out of WOWL", + pmcLog(pMac, LOGW, "PMC: Got exit WOWL in state %s. Nothing to do as already out of WOWL", pmcGetPmcStateStr(pMac->pmc.pmcState)); break; } @@ -1828,7 +1825,7 @@ void pmcDoEnterWowlCallbacks (tHalHandle hHal, eHalStatus callbackStatus) { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - smsLog(pMac, LOG2, "PMC: entering pmcDoWowlCallbacks"); + pmcLog(pMac, LOG2, "PMC: entering pmcDoWowlCallbacks"); /* Call Wowl callback routine. */ if (pMac->pmc.enterWowlCallbackRoutine != NULL) @@ -1855,7 +1852,7 @@ static void pmcProcessDeferredMsg( tpAniSirGlobal pMac ) &pDeferredMsg->u.wowlAddPattern, sizeof(tSirWowlAddBcastPtrn)) != eHAL_STATUS_SUCCESS) { - smsLog(pMac, LOGE, FL("Send of eWNI_PMC_WOWL_ADD_BCAST_PTRN to PE failed")); + pmcLog(pMac, LOGE, FL("Send of eWNI_PMC_WOWL_ADD_BCAST_PTRN to PE failed")); } break; @@ -1865,7 +1862,7 @@ static void pmcProcessDeferredMsg( tpAniSirGlobal pMac ) &pDeferredMsg->u.wowlDelPattern, sizeof(tSirWowlDelBcastPtrn)) != eHAL_STATUS_SUCCESS) { - smsLog(pMac, LOGE, FL("Send of eWNI_PMC_WOWL_ADD_BCAST_PTRN to PE failed")); + pmcLog(pMac, LOGE, FL("Send of eWNI_PMC_WOWL_ADD_BCAST_PTRN to PE failed")); } break; @@ -1875,16 +1872,16 @@ static void pmcProcessDeferredMsg( tpAniSirGlobal pMac ) &pDeferredMsg->u.powerSaveConfig, sizeof(tSirPowerSaveCfg)) != eHAL_STATUS_SUCCESS) { - smsLog(pMac, LOGE, FL("Send of eWNI_PMC_PWR_SAVE_CFG to PE failed")); + pmcLog(pMac, LOGE, FL("Send of eWNI_PMC_PWR_SAVE_CFG to PE failed")); } break; default: - smsLog(pMac, LOGE, FL("unknown message (%d)"), pDeferredMsg->messageType); + pmcLog(pMac, LOGE, FL("unknown message (%d)"), pDeferredMsg->messageType); break; } //Need to free the memory here - palFreeMemory( pMac->hHdd, pDeferredMsg ); + vos_mem_free(pDeferredMsg); } //while } @@ -1894,23 +1891,18 @@ eHalStatus pmcDeferMsg( tpAniSirGlobal pMac, tANI_U16 messageType, void *pData, tPmcDeferredMsg *pDeferredMsg; eHalStatus status; - if( !HAL_STATUS_SUCCESS( palAllocateMemory( pMac->hHdd, (void **)&pDeferredMsg, sizeof(tPmcDeferredMsg) ) ) ) + pDeferredMsg = vos_mem_malloc(sizeof(tPmcDeferredMsg)); + if ( NULL == pDeferredMsg ) { - smsLog(pMac, LOGE, FL("Cannot allocate memory for callback context")); + pmcLog(pMac, LOGE, FL("Cannot allocate memory for callback context")); return eHAL_STATUS_RESOURCES; } - palZeroMemory( pMac->hHdd, pDeferredMsg, sizeof(tPmcDeferredMsg) ); + vos_mem_set(pDeferredMsg, sizeof(tPmcDeferredMsg), 0); pDeferredMsg->messageType = messageType; pDeferredMsg->size = (tANI_U16)size; if( pData ) { - if( !HAL_STATUS_SUCCESS( palCopyMemory( pMac->hHdd, &pDeferredMsg->u.data, - pData, size ) ) ) - { - smsLog(pMac, LOGE, FL("Cannot copy pattern for callback context")); - palFreeMemory( pMac->hHdd, pDeferredMsg ); - return eHAL_STATUS_FAILURE; - } + vos_mem_copy(&pDeferredMsg->u.data, pData, size); } csrLLInsertTail( &pMac->pmc.deferredMsgList, &pDeferredMsg->link, eANI_BOOLEAN_TRUE ); //No callback is needed. The messages are put into deferred queue and be processed first @@ -1921,11 +1913,11 @@ eHalStatus pmcDeferMsg( tpAniSirGlobal pMac, tANI_U16 messageType, void *pData, //either fail or already in full power if( csrLLRemoveEntry( &pMac->pmc.deferredMsgList, &pDeferredMsg->link, eANI_BOOLEAN_TRUE ) ) { - palFreeMemory( pMac->hHdd, pDeferredMsg ); + vos_mem_free(pDeferredMsg); } if( !HAL_STATUS_SUCCESS( status ) ) { - smsLog(pMac, LOGE, FL("failed to request full power status = %d"), status); + pmcLog(pMac, LOGE, FL("failed to request full power status = %d"), status); } } @@ -1943,7 +1935,7 @@ void pmcReleaseCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand ) else { //this is a specially allocated comamnd due to out of command buffer. free it. - palFreeMemory(pMac->hHdd, pCommand); + vos_mem_free(pCommand); } } @@ -1960,54 +1952,54 @@ void pmcAbortCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand, tANI_BOOLEAN fStop switch( pCommand->command ) { case eSmeCommandEnterImps: - smsLog(pMac, LOGE, FL("aborting request to enter IMPS")); + pmcLog(pMac, LOGE, FL("aborting request to enter IMPS")); pmcEnterFullPowerState(pMac); break; case eSmeCommandExitImps: - smsLog(pMac, LOGE, FL("aborting request to exit IMPS ")); + pmcLog(pMac, LOGE, FL("aborting request to exit IMPS ")); pmcEnterFullPowerState(pMac); break; case eSmeCommandEnterBmps: - smsLog(pMac, LOGE, FL("aborting request to enter BMPS ")); + pmcLog(pMac, LOGE, FL("aborting request to enter BMPS ")); pMac->pmc.bmpsRequestQueued = eANI_BOOLEAN_FALSE; pmcEnterFullPowerState(pMac); pmcDoBmpsCallbacks(pMac, eHAL_STATUS_FAILURE); break; case eSmeCommandExitBmps: - smsLog(pMac, LOGE, FL("aborting request to exit BMPS ")); + pmcLog(pMac, LOGE, FL("aborting request to exit BMPS ")); pmcEnterFullPowerState(pMac); break; case eSmeCommandEnterUapsd: - smsLog(pMac, LOGE, FL("aborting request to enter UAPSD ")); + pmcLog(pMac, LOGE, FL("aborting request to enter UAPSD ")); //Since there is no retry for UAPSD, tell the requester here we are done with failure pMac->pmc.uapsdSessionRequired = FALSE; pmcDoStartUapsdCallbacks(pMac, eHAL_STATUS_FAILURE); break; case eSmeCommandExitUapsd: - smsLog(pMac, LOGE, FL("aborting request to exit UAPSD ")); + pmcLog(pMac, LOGE, FL("aborting request to exit UAPSD ")); break; case eSmeCommandEnterWowl: - smsLog(pMac, LOGE, FL("aborting request to enter WOWL ")); + pmcLog(pMac, LOGE, FL("aborting request to enter WOWL ")); pmcDoEnterWowlCallbacks(pMac, eHAL_STATUS_FAILURE); break; case eSmeCommandExitWowl: - smsLog(pMac, LOGE, FL("aborting request to exit WOWL ")); + pmcLog(pMac, LOGE, FL("aborting request to exit WOWL ")); break; case eSmeCommandEnterStandby: - smsLog(pMac, LOGE, FL("aborting request to enter Standby ")); + pmcLog(pMac, LOGE, FL("aborting request to enter Standby ")); pmcDoStandbyCallbacks(pMac, eHAL_STATUS_FAILURE); break; default: - smsLog(pMac, LOGE, FL("Request for PMC command (%d) is dropped"), pCommand->command); + pmcLog(pMac, LOGE, FL("Request for PMC command (%d) is dropped"), pCommand->command); break; } }// !stopping @@ -2044,20 +2036,24 @@ eHalStatus pmcPrepareCommand( tpAniSirGlobal pMac, tANI_U32 sessionId, } else { - smsLog( pMac, LOGE, FL(" fail to get command buffer for command 0x%X curState = %d"), cmdType, pMac->pmc.pmcState ); + pmcLog( pMac, LOGE, + FL(" fail to get command buffer for command 0x%X curState = %d"), + cmdType, pMac->pmc.pmcState ); //For certain PMC command, we cannot fail if( PMC_IS_COMMAND_CANNOT_FAIL(cmdType) ) { - smsLog( pMac, LOGE, FL(" command 0x%X cannot fail try allocating memory for it"), cmdType ); - status = palAllocateMemory(pMac->hHdd, (void **)&pCommand, sizeof(tSmeCmd)); - if(!HAL_STATUS_SUCCESS(status)) + pmcLog( pMac, LOGE, + FL(" command 0x%X cannot fail try allocating memory for it"), cmdType ); + pCommand = vos_mem_malloc(sizeof(tSmeCmd)); + if ( NULL == pCommand ) { - VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_FATAL, "%s fail to allocate memory for command (0x%X)", - __func__, cmdType); + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_FATAL, + "%s fail to allocate memory for command (0x%X)", + __func__, cmdType); pCommand = NULL; - break; + return eHAL_STATUS_FAILURE; } - palZeroMemory(pMac->hHdd, pCommand, sizeof(tSmeCmd)); + vos_mem_set(pCommand, sizeof(tSmeCmd), 0); //Make sure it will be free when it is done pCommand->u.pmcCmd.fReleaseWhenDone = TRUE; } @@ -2109,7 +2105,7 @@ eHalStatus pmcPrepareCommand( tpAniSirGlobal pMac, tANI_U32 sessionId, } else { - smsLog( pMac, LOGE, (" exit BMPS must have a reason code") ); + pmcLog( pMac, LOGE, (" exit BMPS must have a reason code") ); } break; @@ -2122,7 +2118,7 @@ eHalStatus pmcPrepareCommand( tpAniSirGlobal pMac, tANI_U32 sessionId, break; default: - smsLog( pMac, LOGE, FL(" invalid command type %d"), cmdType ); + pmcLog( pMac, LOGE, FL(" invalid command type %d"), cmdType ); status = eHAL_STATUS_INVALID_PARAMETER; break; } @@ -2196,7 +2192,8 @@ tANI_BOOLEAN pmcProcessCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand ) } if( !HAL_STATUS_SUCCESS( status ) ) { - smsLog(pMac, LOGE, "PMC: failure to send message eWNI_PMC_ENTER_IMPS_REQ or pmcEnterImpsCheck failed"); + pmcLog(pMac, LOGE, + "PMC: failure to send message eWNI_PMC_ENTER_IMPS_REQ or pmcEnterImpsCheck failed"); pmcEnterFullPowerState( pMac ); if(pmcShouldBmpsTimerRun(pMac)) (void)pmcStartTrafficTimer(pMac, pMac->pmc.bmpsConfig.trafficMeasurePeriod); @@ -2219,12 +2216,13 @@ tANI_BOOLEAN pmcProcessCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand ) if ( HAL_STATUS_SUCCESS( status ) ) { pMac->pmc.pmcState = REQUEST_FULL_POWER; - smsLog(pMac, LOG2, FL("eWNI_PMC_EXIT_IMPS_REQ sent to PE")); + pmcLog(pMac, LOG2, FL("eWNI_PMC_EXIT_IMPS_REQ sent to PE")); fRemoveCmd = eANI_BOOLEAN_FALSE; } else { - smsLog(pMac, LOGE, FL("eWNI_PMC_EXIT_IMPS_REQ fail to be sent to PE status %d"), status); + pmcLog(pMac, LOGE, + FL("eWNI_PMC_EXIT_IMPS_REQ fail to be sent to PE status %d"), status); //Callbacks are called with success srarus, do we need to pass in real status?? pmcEnterFullPowerState(pMac); } @@ -2240,11 +2238,11 @@ tANI_BOOLEAN pmcProcessCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand ) { /* Change PMC state */ pMac->pmc.pmcState = REQUEST_BMPS; - smsLog(pMac, LOG2, "PMC: Enter BMPS req done: Force XO Core ON"); + pmcLog(pMac, LOG2, "PMC: Enter BMPS req done: Force XO Core ON"); vstatus = vos_chipVoteXOCore(NULL, NULL, NULL, VOS_TRUE); if ( !VOS_IS_STATUS_SUCCESS(vstatus) ) { - smsLog(pMac, LOGE, "Could not turn XO Core ON. Can't go to BMPS"); + pmcLog(pMac, LOGE, "Could not turn XO Core ON. Can't go to BMPS"); } else /* XO Core turn ON was successful */ { @@ -2256,13 +2254,13 @@ tANI_BOOLEAN pmcProcessCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand ) } else { - smsLog(pMac, LOGE, "Fail to send enter BMPS msg to PE"); + pmcLog(pMac, LOGE, "Fail to send enter BMPS msg to PE"); /* Cancel the vote for XO Core */ - smsLog(pMac, LOGW, "In module init: Cancel the vote for XO CORE ON " + pmcLog(pMac, LOGW, "In module init: Cancel the vote for XO CORE ON " "since send enter bmps failed"); if (vos_chipVoteXOCore(NULL, NULL, NULL, VOS_FALSE) != VOS_STATUS_SUCCESS) { - smsLog(pMac, LOGE, "Could not cancel XO Core ON vote." + pmcLog(pMac, LOGE, "Could not cancel XO Core ON vote." "Not returning failure." "Power consumed will be high"); } @@ -2272,7 +2270,8 @@ tANI_BOOLEAN pmcProcessCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand ) } if( !HAL_STATUS_SUCCESS( status ) ) { - smsLog(pMac, LOGE, "PMC: failure to send message eWNI_PMC_ENTER_BMPS_REQ status %d", status); + pmcLog(pMac, LOGE, + "PMC: failure to send message eWNI_PMC_ENTER_BMPS_REQ status %d", status); pMac->pmc.bmpsRequestQueued = eANI_BOOLEAN_FALSE; pmcEnterFullPowerState(pMac); //Do not call UAPSD callback here since it may be retried @@ -2294,12 +2293,12 @@ tANI_BOOLEAN pmcProcessCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand ) { pMac->pmc.pmcState = REQUEST_FULL_POWER; fRemoveCmd = eANI_BOOLEAN_FALSE; - smsLog(pMac, LOG2, FL("eWNI_PMC_EXIT_BMPS_REQ sent to PE")); + pmcLog(pMac, LOG2, FL("eWNI_PMC_EXIT_BMPS_REQ sent to PE")); } else { - smsLog(pMac, LOGE, FL("eWNI_PMC_EXIT_BMPS_REQ fail to be sent to PE status %d"), status); + pmcLog(pMac, LOGE, FL("eWNI_PMC_EXIT_BMPS_REQ fail to be sent to PE status %d"), status); pmcEnterFullPowerState(pMac); } } @@ -2317,7 +2316,7 @@ tANI_BOOLEAN pmcProcessCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand ) } else { - smsLog(pMac, LOGE, "PMC: failure to send message " + pmcLog(pMac, LOGE, "PMC: failure to send message " "eWNI_PMC_ENTER_BMPS_REQ"); //there is no retry for re-entering UAPSD so tell the requester we are done witgh failure. pMac->pmc.uapsdSessionRequired = FALSE; @@ -2349,7 +2348,7 @@ tANI_BOOLEAN pmcProcessCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand ) } else { - smsLog(pMac, LOGE, "PMC: failure to send message " + pmcLog(pMac, LOGE, "PMC: failure to send message " "eWNI_PMC_EXIT_UAPSD_REQ"); pmcEnterBmpsState(pMac); } @@ -2369,7 +2368,7 @@ tANI_BOOLEAN pmcProcessCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand ) } else { - smsLog(pMac, LOGE, "PMC: failure to send message eWNI_PMC_ENTER_WOWL_REQ"); + pmcLog(pMac, LOGE, "PMC: failure to send message eWNI_PMC_ENTER_WOWL_REQ"); pmcDoEnterWowlCallbacks(pMac, eHAL_STATUS_FAILURE); } } @@ -2393,7 +2392,7 @@ tANI_BOOLEAN pmcProcessCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand ) } else { - smsLog(pMac, LOGP, "PMC: failure to send message eWNI_PMC_EXIT_WOWL_REQ"); + pmcLog(pMac, LOGP, "PMC: failure to send message eWNI_PMC_EXIT_WOWL_REQ"); pmcEnterBmpsState(pMac); } } @@ -2436,7 +2435,7 @@ tANI_BOOLEAN pmcProcessCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand ) } else { - smsLog(pMac, LOGE, "PMC: failure to send message " + pmcLog(pMac, LOGE, "PMC: failure to send message " "eWNI_PMC_ENTER_IMPS_REQ"); pmcEnterFullPowerState(pMac); pmcDoStandbyCallbacks(pMac, eHAL_STATUS_FAILURE); @@ -2449,7 +2448,7 @@ tANI_BOOLEAN pmcProcessCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand ) break; default: - smsLog( pMac, LOGE, FL(" invalid command type %d"), pCommand->command ); + pmcLog( pMac, LOGE, FL(" invalid command type %d"), pCommand->command ); break; } @@ -2463,8 +2462,8 @@ eHalStatus pmcEnterImpsCheck( tpAniSirGlobal pMac ) if( !PMC_IS_READY(pMac) ) { - smsLog(pMac, LOGE, FL("Requesting IMPS when PMC not ready")); - smsLog(pMac, LOGE, FL("pmcReady = %d pmcState = %s"), + pmcLog(pMac, LOGE, FL("Requesting IMPS when PMC not ready")); + pmcLog(pMac, LOGE, FL("pmcReady = %d pmcState = %s"), pMac->pmc.pmcReady, pmcGetPmcStateStr(pMac->pmc.pmcState)); return eHAL_STATUS_FAILURE; } @@ -2472,21 +2471,21 @@ eHalStatus pmcEnterImpsCheck( tpAniSirGlobal pMac ) /* Check if IMPS is enabled. */ if (!pMac->pmc.impsEnabled) { - smsLog(pMac, LOG2, FL("IMPS is disabled")); + pmcLog(pMac, LOG2, FL("IMPS is disabled")); return eHAL_STATUS_PMC_DISABLED; } /* Check if IMPS enabled for current power source. */ if ((pMac->pmc.powerSource == AC_POWER) && !pMac->pmc.impsConfig.enterOnAc) { - smsLog(pMac, LOG2, FL("IMPS is disabled when operating on AC power")); + pmcLog(pMac, LOG2, FL("IMPS is disabled when operating on AC power")); return eHAL_STATUS_PMC_AC_POWER; } /* Check that entry into a power save mode is allowed at this time. */ if (!pmcPowerSaveCheck(pMac)) { - smsLog(pMac, LOG2, FL("IMPS cannot be entered now")); + pmcLog(pMac, LOG2, FL("IMPS cannot be entered now")); return eHAL_STATUS_PMC_NOT_NOW; } @@ -2494,7 +2493,7 @@ eHalStatus pmcEnterImpsCheck( tpAniSirGlobal pMac ) running sessions agree. */ if (!pmcAllowImps(pMac)) { - smsLog(pMac, LOG2, FL("IMPS cannot be entered now")); + pmcLog(pMac, LOG2, FL("IMPS cannot be entered now")); return eHAL_STATUS_PMC_NOT_NOW; } @@ -2502,10 +2501,17 @@ eHalStatus pmcEnterImpsCheck( tpAniSirGlobal pMac ) if ((pMac->pmc.pmcState == REQUEST_IMPS) || (pMac->pmc.pmcState == IMPS) || (pMac->pmc.pmcState == REQUEST_FULL_POWER)) { - smsLog(pMac, LOG2, FL("Already in IMPS")); + pmcLog(pMac, LOG2, FL("Already in IMPS")); return eHAL_STATUS_PMC_ALREADY_IN_IMPS; } + /* Check whether driver load unload is in progress */ + if(vos_is_load_unload_in_progress( VOS_MODULE_ID_VOSS, NULL)) + { + pmcLog(pMac, LOGW, FL("Driver load/unload is in progress")); + return eHAL_STATUS_PMC_NOT_NOW; + } + return ( eHAL_STATUS_SUCCESS ); } @@ -2518,14 +2524,14 @@ eHalStatus pmcEnterBmpsCheck( tpAniSirGlobal pMac ) /* Check if BMPS is enabled. */ if (!pMac->pmc.bmpsEnabled) { - smsLog(pMac, LOGE, "PMC: Cannot initiate BMPS. BMPS is disabled"); + pmcLog(pMac, LOGE, "PMC: Cannot initiate BMPS. BMPS is disabled"); return eHAL_STATUS_PMC_DISABLED; } if( !PMC_IS_READY(pMac) ) { - smsLog(pMac, LOGE, FL("Requesting BMPS when PMC not ready")); - smsLog(pMac, LOGE, FL("pmcReady = %d pmcState = %s"), + pmcLog(pMac, LOGE, FL("Requesting BMPS when PMC not ready")); + pmcLog(pMac, LOGE, FL("pmcReady = %d pmcState = %s"), pMac->pmc.pmcReady, pmcGetPmcStateStr(pMac->pmc.pmcState)); return eHAL_STATUS_FAILURE; } @@ -2533,20 +2539,21 @@ eHalStatus pmcEnterBmpsCheck( tpAniSirGlobal pMac ) /* Check that we are associated with a single active session. */ if (!pmcValidateConnectState( pMac )) { - smsLog(pMac, LOGE, "PMC: STA not associated with an AP with single active session. BMPS cannot be entered"); + pmcLog(pMac, LOGE, "PMC: STA not associated with an AP with single active session. BMPS cannot be entered"); return eHAL_STATUS_FAILURE; } /* BMPS can only be requested when device is in Full Power */ if (pMac->pmc.pmcState != FULL_POWER) { - smsLog(pMac, LOGE, "PMC: Device not in full power. Cannot request BMPS. pmcState %d", pMac->pmc.pmcState); + pmcLog(pMac, LOGE, + "PMC: Device not in full power. Cannot request BMPS. pmcState %d", pMac->pmc.pmcState); return eHAL_STATUS_FAILURE; } /* Check that entry into a power save mode is allowed at this time. */ if (!pmcPowerSaveCheck(pMac)) { - smsLog(pMac, LOGE, "PMC: Power save check failed. BMPS cannot be entered now"); + pmcLog(pMac, LOGE, "PMC: Power save check failed. BMPS cannot be entered now"); return eHAL_STATUS_PMC_NOT_NOW; } @@ -2554,13 +2561,15 @@ eHalStatus pmcEnterBmpsCheck( tpAniSirGlobal pMac ) //BMPS_WORKAROUND_NOT_NEEDED if(!IS_FEATURE_SUPPORTED_BY_FW(SLM_SESSIONIZATION)) { - smsLog(pMac, LOG1, FL("doBMPSWorkaround %u"), pMac->roam.configParam.doBMPSWorkaround); + pmcLog(pMac, LOG1, FL("doBMPSWorkaround %u"), pMac->roam.configParam.doBMPSWorkaround); if (pMac->roam.configParam.doBMPSWorkaround) { pMac->roam.configParam.doBMPSWorkaround = 0; - smsLog(pMac, LOG1, FL("reset doBMPSWorkaround to disabled %u"), pMac->roam.configParam.doBMPSWorkaround); + pmcLog(pMac, LOG1, + FL("reset doBMPSWorkaround to disabled %u"), pMac->roam.configParam.doBMPSWorkaround); csrDisconnectAllActiveSessions(pMac); - smsLog(pMac, LOGE, "PMC: doBMPSWorkaround was enabled. First Disconnect all sessions. pmcState %d", pMac->pmc.pmcState); + pmcLog(pMac, LOGE, + "PMC: doBMPSWorkaround was enabled. First Disconnect all sessions. pmcState %d", pMac->pmc.pmcState); return eHAL_STATUS_FAILURE; } } @@ -2579,13 +2588,14 @@ tANI_BOOLEAN pmcShouldBmpsTimerRun( tpAniSirGlobal pMac ) pMac->pmc.uapsdSessionRequired || pMac->pmc.bmpsRequestedByHdd || pMac->pmc.wowlModeRequired ))) { - smsLog(pMac, LOG1, FL("BMPS is not enabled or not required")); + pmcLog(pMac, LOG1, FL("BMPS is not enabled or not required")); return eANI_BOOLEAN_FALSE; } if(pMac->pmc.isHostPsEn && pMac->pmc.remainInPowerActiveTillDHCP) { - smsLog(pMac, LOG1, FL("Host controlled ps enabled and host wants active mode, so dont allow BMPS")); + pmcLog(pMac, LOG1, + FL("Host controlled ps enabled and host wants active mode, so dont allow BMPS")); return eANI_BOOLEAN_FALSE; } @@ -2594,14 +2604,14 @@ tANI_BOOLEAN pmcShouldBmpsTimerRun( tpAniSirGlobal pMac ) (vos_get_concurrency_mode()& VOS_SAP) || (vos_get_concurrency_mode()& VOS_P2P_GO)))) { - smsLog(pMac, LOG1, FL("Multiple Sessions/GO/SAP sessions . BMPS should not be started")); + pmcLog(pMac, LOG1, FL("Multiple Sessions/GO/SAP sessions . BMPS should not be started")); return eANI_BOOLEAN_FALSE; } /* Check if there is an Infra session. BMPS is possible only if there is * an Infra session */ if (!csrIsInfraConnected(pMac)) { - smsLog(pMac, LOG1, FL("No Infra Session or multiple sessions. BMPS should not be started")); + pmcLog(pMac, LOG1, FL("No Infra Session or multiple sessions. BMPS should not be started")); return eANI_BOOLEAN_FALSE; } return eANI_BOOLEAN_TRUE; @@ -2623,25 +2633,25 @@ void pmcDiagEvtTimerExpired (tHalHandle hHal) WLAN_VOS_DIAG_EVENT_REPORT(&psRequest, EVENT_WLAN_POWERSAVE_GENERIC); - smsLog(pMac, LOGW, FL("DIAG event timer expired")); + pmcLog(pMac, LOGW, FL("DIAG event timer expired")); /* re-arm timer */ if (pmcStartDiagEvtTimer(hHal) != eHAL_STATUS_SUCCESS) { - smsLog(pMac, LOGP, FL("Cannot re-arm DIAG evt timer")); + pmcLog(pMac, LOGP, FL("Cannot re-arm DIAG evt timer")); } + vos_timer_start(&pMac->pmc.hDiagEvtTimer, PMC_DIAG_EVT_TIMER_INTERVAL); } eHalStatus pmcStartDiagEvtTimer (tHalHandle hHal) { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - smsLog(pMac, LOG2, FL("Entering pmcStartDiagEvtTimer")); + pmcLog(pMac, LOG2, FL("Entering pmcStartDiagEvtTimer")); - if (palTimerStart(pMac->hHdd, pMac->pmc.hDiagEvtTimer, PMC_DIAG_EVT_TIMER_INTERVAL * - 1000, TRUE) != eHAL_STATUS_SUCCESS) + if ( vos_timer_start(&pMac->pmc.hDiagEvtTimer, PMC_DIAG_EVT_TIMER_INTERVAL) != VOS_STATUS_SUCCESS) { - smsLog(pMac, LOGP, FL("Cannot start DIAG evt timer")); + pmcLog(pMac, LOGP, FL("Cannot start DIAG evt timer")); return eHAL_STATUS_FAILURE; } @@ -2651,8 +2661,8 @@ eHalStatus pmcStartDiagEvtTimer (tHalHandle hHal) void pmcStopDiagEvtTimer (tHalHandle hHal) { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - smsLog(pMac, LOG2, FL("Entering pmcStopDiagEvtTimer")); - (void)palTimerStop(pMac->hHdd, pMac->pmc.hDiagEvtTimer); + pmcLog(pMac, LOG2, FL("Entering pmcStopDiagEvtTimer")); + (void)vos_timer_stop(&pMac->pmc.hDiagEvtTimer); } #endif @@ -2668,12 +2678,7 @@ void pmcOffloadClosePowerSaveCheckList(tpAniSirGlobal pMac, tANI_U32 sessionId) { pPowerSaveCheckEntry = GET_BASE_ADDR(pEntry, tPmcOffloadPsCheckEntry, link); - if(palFreeMemory(pMac->hHdd, pPowerSaveCheckEntry) - != eHAL_STATUS_SUCCESS) - { - smsLog(pMac, LOGE, FL("Cannot free memory ")); - break; - } + vos_mem_free(pPowerSaveCheckEntry); pEntry = csrLLRemoveHead(&pmc->pwrsaveCheckList, FALSE); } csrLLUnlock(&pmc->pwrsaveCheckList); @@ -2692,12 +2697,7 @@ void pmcOffloadCloseDeviceStateUpdateList(tpAniSirGlobal pMac, tANI_U32 sessionI { pPowerSaveDevStateEntry = GET_BASE_ADDR(pEntry, tPmcOffloadDevStateUpdIndEntry, link); - if(palFreeMemory(pMac->hHdd, pPowerSaveDevStateEntry) - != eHAL_STATUS_SUCCESS) - { - smsLog(pMac, LOGE, FL("Cannot free memory ")); - break; - } + vos_mem_free(pPowerSaveDevStateEntry); pEntry = csrLLRemoveHead(&pmc->deviceStateUpdateIndList, FALSE); } csrLLUnlock(&pmc->deviceStateUpdateIndList); @@ -2716,12 +2716,7 @@ void pmcOffloadCloseReqStartUapsdList(tpAniSirGlobal pMac, tANI_U32 sessionId) { pPowerSaveStartUapsdEntry = GET_BASE_ADDR(pEntry, tPmcOffloadStartUapsdEntry, link); - if(palFreeMemory(pMac->hHdd, pPowerSaveStartUapsdEntry) - != eHAL_STATUS_SUCCESS) - { - smsLog(pMac, LOGE, FL("Cannot free memory ")); - break; - } + vos_mem_free(pPowerSaveStartUapsdEntry); pEntry = csrLLRemoveHead(&pmc->uapsdCbList, FALSE); } csrLLUnlock(&pmc->uapsdCbList); @@ -2740,12 +2735,7 @@ void pmcOffloadCloseReqFullPwrList(tpAniSirGlobal pMac, tANI_U32 sessionId) { pPowerSaveFullPowerReqEntry = GET_BASE_ADDR(pEntry, tPmcOffloadReqFullPowerEntry, link); - if(palFreeMemory(pMac->hHdd, pPowerSaveFullPowerReqEntry) - != eHAL_STATUS_SUCCESS) - { - smsLog(pMac, LOGE, FL("Cannot free memory ")); - break; - } + vos_mem_free(pPowerSaveFullPowerReqEntry); pEntry = csrLLRemoveHead(&pmc->fullPowerCbList, FALSE); } csrLLUnlock(&pmc->fullPowerCbList); @@ -2883,11 +2873,7 @@ void pmcOffloadDoFullPowerCallbacks(tpAniSirGlobal pMac, tANI_U32 sessionId, if(pReqFullPwrEntry->fullPwrCb) pReqFullPwrEntry->fullPwrCb(pReqFullPwrEntry->callbackContext, sessionId, status); - if(palFreeMemory(pMac->hHdd, pReqFullPwrEntry) != eHAL_STATUS_SUCCESS) - { - smsLog(pMac, LOGE, - FL("Cannot free request full power routine list entry")); - } + vos_mem_free(pReqFullPwrEntry); pEntry = csrLLRemoveHead(&pmc->fullPowerCbList, TRUE); } } @@ -2933,7 +2919,7 @@ void pmcOffloadDoStartUapsdCallbacks(tpAniSirGlobal pMac, tANI_U32 sessionId, pStartUapsdEntry = GET_BASE_ADDR(pEntry, tPmcOffloadStartUapsdEntry, link); pStartUapsdEntry->uapsdStartInd(pStartUapsdEntry->callbackContext, pStartUapsdEntry->sessionId, status); - palFreeMemory(pMac->hHdd, pStartUapsdEntry); + vos_mem_free(pStartUapsdEntry); pEntry = csrLLRemoveHead(&pmc->uapsdCbList, FALSE); } csrLLUnlock(&pmc->uapsdCbList); @@ -3463,8 +3449,9 @@ eHalStatus pmcOffloadEnterUapsdState(tpAniSirGlobal pMac, tANI_U32 sessionId) void pmcOffloadExitBmpsIndHandler(tpAniSirGlobal pMac, tSirSmeRsp *pMsg) { + tpSirSmeExitBmpsInd pExitBmpsInd = (tpSirSmeExitBmpsInd)pMsg; /* Enter Full Power State. */ - if (pMsg->statusCode != eSIR_SME_SUCCESS) + if (pExitBmpsInd->statusCode != eSIR_SME_SUCCESS) { smsLog(pMac, LOGP, FL("Exit BMPS indication indicates failure, status %x"), @@ -3472,8 +3459,10 @@ void pmcOffloadExitBmpsIndHandler(tpAniSirGlobal pMac, tSirSmeRsp *pMsg) } else { - tpSirSmeExitBmpsInd pExitBmpsInd = (tpSirSmeExitBmpsInd)pMsg; - pmcOffloadQueueRequestFullPower(pMac, pMsg->sessionId, + smsLog(pMac, LOG1, + FL("Exit BMPS indication on session %lu, reason %d"), + pExitBmpsInd->smeSessionId, pExitBmpsInd->exitBmpsReason); + pmcOffloadQueueRequestFullPower(pMac, pExitBmpsInd->smeSessionId, pExitBmpsInd->exitBmpsReason); } } diff --git a/CORE/SME/src/pmc/pmcApi.c b/CORE/SME/src/pmc/pmcApi.c index 140fbe5b8a26..ec2ae65baf65 100644 --- a/CORE/SME/src/pmc/pmcApi.c +++ b/CORE/SME/src/pmc/pmcApi.c @@ -81,7 +81,7 @@ eHalStatus pmcOpen (tHalHandle hHal) { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - smsLog(pMac, LOG2, FL("Entering pmcOpen")); + pmcLog(pMac, LOG2, FL("Entering pmcOpen")); /* Initialize basic PMC information about device. */ pMac->pmc.powerSource = BATTERY_POWER; @@ -98,14 +98,14 @@ eHalStatus pmcOpen (tHalHandle hHal) pMac->pmc.wowlEnabled = TRUE; pMac->pmc.rfSuppliesVotedOff= FALSE; - palZeroMemory(pMac->hHdd, &(pMac->pmc.bmpsConfig), sizeof(tPmcBmpsConfigParams)); - palZeroMemory(pMac->hHdd, &(pMac->pmc.impsConfig), sizeof(tPmcImpsConfigParams)); - palZeroMemory(pMac->hHdd, &(pMac->pmc.smpsConfig), sizeof(tPmcSmpsConfigParams)); + vos_mem_set(&(pMac->pmc.bmpsConfig), sizeof(tPmcBmpsConfigParams), 0); + vos_mem_set(&(pMac->pmc.impsConfig), sizeof(tPmcImpsConfigParams), 0); + vos_mem_set(&(pMac->pmc.smpsConfig), sizeof(tPmcSmpsConfigParams), 0); /* Allocate a timer to use with IMPS. */ - if (palTimerAlloc(pMac->hHdd, &pMac->pmc.hImpsTimer, pmcImpsTimerExpired, hHal) != eHAL_STATUS_SUCCESS) + if (vos_timer_init(&pMac->pmc.hImpsTimer, VOS_TIMER_TYPE_SW, pmcImpsTimerExpired, hHal) != VOS_STATUS_SUCCESS) { - smsLog(pMac, LOGE, FL("Cannot allocate timer for IMPS")); + pmcLog(pMac, LOGE, FL("Cannot allocate timer for IMPS")); return eHAL_STATUS_FAILURE; } @@ -114,15 +114,15 @@ eHalStatus pmcOpen (tHalHandle hHal) if (!VOS_IS_STATUS_SUCCESS(vos_timer_init(&pMac->pmc.hTrafficTimer, VOS_TIMER_TYPE_SW, pmcTrafficTimerExpired, hHal))) { - smsLog(pMac, LOGE, FL("Cannot allocate timer for traffic measurement")); + pmcLog(pMac, LOGE, FL("Cannot allocate timer for traffic measurement")); return eHAL_STATUS_FAILURE; } #ifdef FEATURE_WLAN_DIAG_SUPPORT /* Allocate a timer used to report current PMC state through periodic DIAG event */ - if (palTimerAlloc(pMac->hHdd, &pMac->pmc.hDiagEvtTimer, pmcDiagEvtTimerExpired, hHal) != eHAL_STATUS_SUCCESS) + if (vos_timer_init(&pMac->pmc.hDiagEvtTimer, VOS_TIMER_TYPE_SW, pmcDiagEvtTimerExpired, hHal) != VOS_STATUS_SUCCESS) { - smsLog(pMac, LOGE, FL("Cannot allocate timer for diag event reporting")); + pmcLog(pMac, LOGE, FL("Cannot allocate timer for diag event reporting")); return eHAL_STATUS_FAILURE; } #endif @@ -132,10 +132,10 @@ eHalStatus pmcOpen (tHalHandle hHal) pMac->pmc.bmpsConfig.bmpsPeriod = WNI_CFG_LISTEN_INTERVAL_STADEF; /* Allocate a timer used to schedule a deferred power save mode exit. */ - if (palTimerAlloc(pMac->hHdd, &pMac->pmc.hExitPowerSaveTimer, - pmcExitPowerSaveTimerExpired, hHal) != eHAL_STATUS_SUCCESS) + if (vos_timer_init(&pMac->pmc.hExitPowerSaveTimer, VOS_TIMER_TYPE_SW, + pmcExitPowerSaveTimerExpired, hHal) !=VOS_STATUS_SUCCESS) { - smsLog(pMac, LOGE, FL("Cannot allocate exit power save mode timer")); + pmcLog(pMac, LOGE, FL("Cannot allocate exit power save mode timer")); PMC_ABORT; return eHAL_STATUS_FAILURE; } @@ -143,13 +143,13 @@ eHalStatus pmcOpen (tHalHandle hHal) /* Initialize lists for power save check routines and request full power callback routines. */ if (csrLLOpen(pMac->hHdd, &pMac->pmc.powerSaveCheckList) != eHAL_STATUS_SUCCESS) { - smsLog(pMac, LOGE, FL("Cannot initialize power save check routine list")); + pmcLog(pMac, LOGE, FL("Cannot initialize power save check routine list")); PMC_ABORT; return eHAL_STATUS_FAILURE; } if (csrLLOpen(pMac->hHdd, &pMac->pmc.requestFullPowerList) != eHAL_STATUS_SUCCESS) { - smsLog(pMac, LOGE, FL("Cannot initialize request full power callback routine list")); + pmcLog(pMac, LOGE, FL("Cannot initialize request full power callback routine list")); PMC_ABORT; return eHAL_STATUS_FAILURE; } @@ -158,27 +158,27 @@ eHalStatus pmcOpen (tHalHandle hHal) if (csrLLOpen(pMac->hHdd, &pMac->pmc.requestBmpsList) != eHAL_STATUS_SUCCESS) { - smsLog(pMac, LOGE, "PMC: cannot initialize request BMPS callback routine list"); + pmcLog(pMac, LOGE, "PMC: cannot initialize request BMPS callback routine list"); return eHAL_STATUS_FAILURE; } /* Initialize lists for request start UAPSD callback routines. */ if (csrLLOpen(pMac->hHdd, &pMac->pmc.requestStartUapsdList) != eHAL_STATUS_SUCCESS) { - smsLog(pMac, LOGE, "PMC: cannot initialize request start UAPSD callback routine list"); + pmcLog(pMac, LOGE, "PMC: cannot initialize request start UAPSD callback routine list"); return eHAL_STATUS_FAILURE; } /* Initialize lists for device state update indication callback routines. */ if (csrLLOpen(pMac->hHdd, &pMac->pmc.deviceStateUpdateIndList) != eHAL_STATUS_SUCCESS) { - smsLog(pMac, LOGE, "PMC: cannot initialize device state update indication callback list"); + pmcLog(pMac, LOGE, "PMC: cannot initialize device state update indication callback list"); return eHAL_STATUS_FAILURE; } if (csrLLOpen(pMac->hHdd, &pMac->pmc.deferredMsgList) != eHAL_STATUS_SUCCESS) { - smsLog(pMac, LOGE, FL("Cannot initialize deferred msg list")); + pmcLog(pMac, LOGE, FL("Cannot initialize deferred msg list")); PMC_ABORT; return eHAL_STATUS_FAILURE; } @@ -207,7 +207,7 @@ eHalStatus pmcStart (tHalHandle hHal) tpAniSirGlobal pMac = PMAC_STRUCT(hHal); tSirMacHTMIMOPowerSaveState htMimoPowerSaveState; - smsLog(pMac, LOG2, FL("Entering pmcStart")); + pmcLog(pMac, LOG2, FL("Entering pmcStart")); /* Initialize basic PMC information about device. */ pMac->pmc.pmcState = FULL_POWER; @@ -290,12 +290,12 @@ eHalStatus pmcStop (tHalHandle hHal) tListElem *pEntry; tPmcDeferredMsg *pDeferredMsg; - smsLog(pMac, LOG2, FL("Entering pmcStop")); + pmcLog(pMac, LOG2, FL("Entering pmcStop")); /* Cancel any running timers. */ - if (palTimerStop(pMac->hHdd, pMac->pmc.hImpsTimer) != eHAL_STATUS_SUCCESS) + if (vos_timer_stop(&pMac->pmc.hImpsTimer) != VOS_STATUS_SUCCESS) { - smsLog(pMac, LOGE, FL("Cannot cancel IMPS timer")); + pmcLog(pMac, LOGE, FL("Cannot cancel IMPS timer")); } pmcStopTrafficTimer(hHal); @@ -304,9 +304,9 @@ eHalStatus pmcStop (tHalHandle hHal) pmcStopDiagEvtTimer(hHal); #endif - if (palTimerStop(pMac->hHdd, pMac->pmc.hExitPowerSaveTimer) != eHAL_STATUS_SUCCESS) + if (vos_timer_stop(&pMac->pmc.hExitPowerSaveTimer) != VOS_STATUS_SUCCESS) { - smsLog(pMac, LOGE, FL("Cannot cancel exit power save mode timer")); + pmcLog(pMac, LOGE, FL("Cannot cancel exit power save mode timer")); } /* Do all the callbacks. */ @@ -321,7 +321,7 @@ eHalStatus pmcStop (tHalHandle hHal) while( NULL != ( pEntry = csrLLRemoveHead( &pMac->pmc.deferredMsgList, eANI_BOOLEAN_FALSE ) ) ) { pDeferredMsg = GET_BASE_ADDR( pEntry, tPmcDeferredMsg, link ); - palFreeMemory( pMac->hHdd, pDeferredMsg ); + vos_mem_free(pDeferredMsg); } csrLLUnlock( &pMac->pmc.deferredMsgList ); @@ -352,26 +352,26 @@ eHalStatus pmcClose (tHalHandle hHal) { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - smsLog(pMac, LOG2, FL("Entering pmcClose")); + pmcLog(pMac, LOG2, FL("Entering pmcClose")); /* Free up allocated resources. */ - if (palTimerFree(pMac->hHdd, pMac->pmc.hImpsTimer) != eHAL_STATUS_SUCCESS) + if (vos_timer_destroy(&pMac->pmc.hImpsTimer) != VOS_STATUS_SUCCESS) { - smsLog(pMac, LOGE, FL("Cannot deallocate IMPS timer")); + pmcLog(pMac, LOGE, FL("Cannot deallocate IMPS timer")); } if (!VOS_IS_STATUS_SUCCESS(vos_timer_destroy(&pMac->pmc.hTrafficTimer))) { - smsLog(pMac, LOGE, FL("Cannot deallocate traffic timer")); + pmcLog(pMac, LOGE, FL("Cannot deallocate traffic timer")); } #ifdef FEATURE_WLAN_DIAG_SUPPORT - if (palTimerFree(pMac->hHdd, pMac->pmc.hDiagEvtTimer) != eHAL_STATUS_SUCCESS) + if (vos_timer_destroy(&pMac->pmc.hDiagEvtTimer) != VOS_STATUS_SUCCESS) { - smsLog(pMac, LOGE, FL("Cannot deallocate timer for diag event reporting")); + pmcLog(pMac, LOGE, FL("Cannot deallocate timer for diag event reporting")); } #endif - if (palTimerFree(pMac->hHdd, pMac->pmc.hExitPowerSaveTimer) != eHAL_STATUS_SUCCESS) + if (vos_timer_destroy(&pMac->pmc.hExitPowerSaveTimer) != VOS_STATUS_SUCCESS) { - smsLog(pMac, LOGE, FL("Cannot deallocate exit power save mode timer")); + pmcLog(pMac, LOGE, FL("Cannot deallocate exit power save mode timer")); } /* @@ -412,7 +412,7 @@ eHalStatus pmcSignalPowerEvent (tHalHandle hHal, tPmcPowerEvent event) tSirMacHTMIMOPowerSaveState htMimoPowerSaveState; #endif - smsLog(pMac, LOG2, FL("Entering pmcSignalPowerEvent, event %d"), event); + pmcLog(pMac, LOG2, FL("Entering pmcSignalPowerEvent, event %d"), event); /* Take action based on the event being signaled. */ switch (event) @@ -470,7 +470,7 @@ eHalStatus pmcSignalPowerEvent (tHalHandle hHal, tPmcPowerEvent event) return eHAL_STATUS_SUCCESS; #endif //GEN6_ONWARDS default: - smsLog(pMac, LOGE, FL("Invalid event %d"), event); + pmcLog(pMac, LOGE, FL("Invalid event %d"), event); PMC_ABORT; return eHAL_STATUS_FAILURE; } @@ -503,7 +503,7 @@ eHalStatus pmcSetConfigPowerSave (tHalHandle hHal, tPmcPowerSavingMode psMode, v WLAN_VOS_DIAG_EVENT_DEF(psRequest, vos_event_wlan_powersave_payload_type); #endif - smsLog(pMac, LOG2, FL("Entering pmcSetConfigPowerSave, power save mode %d"), psMode); + pmcLog(pMac, LOG2, FL("Entering pmcSetConfigPowerSave, power save mode %d"), psMode); /* Configure the specified power saving mode. */ switch (psMode) @@ -511,35 +511,35 @@ eHalStatus pmcSetConfigPowerSave (tHalHandle hHal, tPmcPowerSavingMode psMode, v case ePMC_IDLE_MODE_POWER_SAVE: pMac->pmc.impsConfig = *(tpPmcImpsConfigParams)pConfigParams; - smsLog(pMac, LOG3, FL("IMPS configuration")); - smsLog(pMac, LOG3, " enter on AC: %d", + pmcLog(pMac, LOG3, FL("IMPS configuration")); + pmcLog(pMac, LOG3, " enter on AC: %d", pMac->pmc.impsConfig.enterOnAc); break; case ePMC_BEACON_MODE_POWER_SAVE: pMac->pmc.bmpsConfig = *(tpPmcBmpsConfigParams)pConfigParams; - smsLog(pMac, LOG3, FL("BMPS configuration")); - smsLog(pMac, LOG3, " enter on AC: %d", + pmcLog(pMac, LOG3, FL("BMPS configuration")); + pmcLog(pMac, LOG3, " enter on AC: %d", pMac->pmc.bmpsConfig.enterOnAc); - smsLog(pMac, LOG3, " TX threshold: %d", + pmcLog(pMac, LOG3, " TX threshold: %d", pMac->pmc.bmpsConfig.txThreshold); - smsLog(pMac, LOG3, " RX threshold: %d", + pmcLog(pMac, LOG3, " RX threshold: %d", pMac->pmc.bmpsConfig.rxThreshold); - smsLog(pMac, LOG3, " traffic measurement period (ms): %d", + pmcLog(pMac, LOG3, " traffic measurement period (ms): %d", pMac->pmc.bmpsConfig.trafficMeasurePeriod); - smsLog(pMac, LOG3, " BMPS period: %d", + pmcLog(pMac, LOG3, " BMPS period: %d", pMac->pmc.bmpsConfig.bmpsPeriod); - smsLog(pMac, LOG3, " beacons to forward code: %d", + pmcLog(pMac, LOG3, " beacons to forward code: %d", pMac->pmc.bmpsConfig.forwardBeacons); - smsLog(pMac, LOG3, " value of N: %d", + pmcLog(pMac, LOG3, " value of N: %d", pMac->pmc.bmpsConfig.valueOfN); - smsLog(pMac, LOG3, " use PS poll: %d", + pmcLog(pMac, LOG3, " use PS poll: %d", pMac->pmc.bmpsConfig.usePsPoll); - smsLog(pMac, LOG3, " set PM on last frame: %d", + pmcLog(pMac, LOG3, " set PM on last frame: %d", pMac->pmc.bmpsConfig.setPmOnLastFrame); - smsLog(pMac, LOG3, " value of enableBeaconEarlyTermination: %d", + pmcLog(pMac, LOG3, " value of enableBeaconEarlyTermination: %d", pMac->pmc.bmpsConfig.enableBeaconEarlyTermination); - smsLog(pMac, LOG3, " value of bcnEarlyTermWakeInterval: %d", + pmcLog(pMac, LOG3, " value of bcnEarlyTermWakeInterval: %d", pMac->pmc.bmpsConfig.bcnEarlyTermWakeInterval); #ifdef FEATURE_WLAN_DIAG_SUPPORT @@ -558,14 +558,14 @@ eHalStatus pmcSetConfigPowerSave (tHalHandle hHal, tPmcPowerSavingMode psMode, v case ePMC_SPATIAL_MULTIPLEX_POWER_SAVE: pMac->pmc.smpsConfig = *(tpPmcSmpsConfigParams)pConfigParams; - smsLog(pMac, LOG3, FL("SMPS configuration")); - smsLog(pMac, LOG3, " mode: %d", pMac->pmc.smpsConfig.mode); - smsLog(pMac, LOG3, " enter on AC: %d", + pmcLog(pMac, LOG3, FL("SMPS configuration")); + pmcLog(pMac, LOG3, " mode: %d", pMac->pmc.smpsConfig.mode); + pmcLog(pMac, LOG3, " enter on AC: %d", pMac->pmc.smpsConfig.enterOnAc); break; default: - smsLog(pMac, LOGE, FL("Invalid power save mode %d"), psMode); + pmcLog(pMac, LOGE, FL("Invalid power save mode %d"), psMode); PMC_ABORT; return eHAL_STATUS_FAILURE; } @@ -603,7 +603,7 @@ eHalStatus pmcGetConfigPowerSave (tHalHandle hHal, tPmcPowerSavingMode psMode, v { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - smsLog(pMac, LOG2, FL("Entering pmcGetConfigPowerSave, power save mode %d"), psMode); + pmcLog(pMac, LOG2, FL("Entering pmcGetConfigPowerSave, power save mode %d"), psMode); /* Configure the specified power saving mode. */ switch (psMode) @@ -622,7 +622,7 @@ eHalStatus pmcGetConfigPowerSave (tHalHandle hHal, tPmcPowerSavingMode psMode, v break; default: - smsLog(pMac, LOGE, FL("Invalid power save mode %d"), psMode); + pmcLog(pMac, LOGE, FL("Invalid power save mode %d"), psMode); return eHAL_STATUS_FAILURE; } @@ -659,7 +659,7 @@ eHalStatus pmcEnablePowerSave (tHalHandle hHal, tPmcPowerSavingMode psMode) WLAN_VOS_DIAG_EVENT_REPORT(&psRequest, EVENT_WLAN_POWERSAVE_GENERIC); #endif - smsLog(pMac, LOG2, FL("Entering pmcEnablePowerSave, power save mode %d"), psMode); + pmcLog(pMac, LOG2, FL("Entering pmcEnablePowerSave, power save mode %d"), psMode); /* Enable the specified power saving mode. */ switch (psMode) @@ -704,7 +704,7 @@ eHalStatus pmcEnablePowerSave (tHalHandle hHal, tPmcPowerSavingMode psMode) break; default: - smsLog(pMac, LOGE, FL("Invalid power save mode %d"), psMode); + pmcLog(pMac, LOGE, FL("Invalid power save mode %d"), psMode); PMC_ABORT; return eHAL_STATUS_FAILURE; } @@ -732,12 +732,12 @@ eHalStatus pmcStartAutoBmpsTimer (tHalHandle hHal) WLAN_VOS_DIAG_EVENT_REPORT(&psRequest, EVENT_WLAN_POWERSAVE_GENERIC); #endif - smsLog(pMac, LOG2, FL("Entering pmcStartAutoBmpsTimer")); + pmcLog(pMac, LOG2, FL("Entering pmcStartAutoBmpsTimer")); /* Check if BMPS is enabled. */ if (!pMac->pmc.bmpsEnabled) { - smsLog(pMac, LOGE, "PMC: Cannot enable BMPS timer. BMPS is disabled"); + pmcLog(pMac, LOGE, "PMC: Cannot enable BMPS timer. BMPS is disabled"); return eHAL_STATUS_FAILURE; } @@ -778,7 +778,7 @@ eHalStatus pmcStopAutoBmpsTimer (tHalHandle hHal) WLAN_VOS_DIAG_EVENT_REPORT(&psRequest, EVENT_WLAN_POWERSAVE_GENERIC); #endif - smsLog(pMac, LOG2, FL("Entering pmcStopAutoBmpsTimer")); + pmcLog(pMac, LOG2, FL("Entering pmcStopAutoBmpsTimer")); pMac->pmc.autoBmpsEntryEnabled = FALSE; /* If uapsd session is not required or HDD has not requested BMPS, stop the auto bmps timer.*/ @@ -819,7 +819,7 @@ eHalStatus pmcDisablePowerSave (tHalHandle hHal, tPmcPowerSavingMode psMode) WLAN_VOS_DIAG_EVENT_REPORT(&psRequest, EVENT_WLAN_POWERSAVE_GENERIC); #endif - smsLog(pMac, LOG2, FL("Entering pmcDisablePowerSave, power save mode %d"), psMode); + pmcLog(pMac, LOG2, FL("Entering pmcDisablePowerSave, power save mode %d"), psMode); /* Disable the specified power saving mode. */ switch (psMode) @@ -856,7 +856,7 @@ eHalStatus pmcDisablePowerSave (tHalHandle hHal, tPmcPowerSavingMode psMode) break; default: - smsLog(pMac, LOGE, FL("Invalid power save mode %d"), psMode); + pmcLog(pMac, LOGE, FL("Invalid power save mode %d"), psMode); PMC_ABORT; return eHAL_STATUS_FAILURE; } @@ -890,7 +890,7 @@ eHalStatus pmcQueryPowerState (tHalHandle hHal, tPmcPowerState *pPowerState, { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - smsLog(pMac, LOG2, FL("Entering pmcQueryPowerState")); + pmcLog(pMac, LOG2, FL("Entering pmcQueryPowerState")); /* Return current power state based on PMC state. */ if(pPowerState != NULL) @@ -942,7 +942,7 @@ tANI_BOOLEAN pmcIsPowerSaveEnabled (tHalHandle hHal, tPmcPowerSavingMode psMode) { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - smsLog(pMac, LOG2, FL("Entering pmcIsPowerSaveEnabled, power save mode %d"), psMode); + pmcLog(pMac, LOG2, FL("Entering pmcIsPowerSaveEnabled, power save mode %d"), psMode); /* Check ability to enter based on the specified power saving mode. */ switch (psMode) @@ -968,7 +968,7 @@ tANI_BOOLEAN pmcIsPowerSaveEnabled (tHalHandle hHal, tPmcPowerSavingMode psMode) break; default: - smsLog(pMac, LOGE, FL("Invalid power save mode %d"), psMode); + pmcLog(pMac, LOGE, FL("Invalid power save mode %d"), psMode); PMC_ABORT; return FALSE; } @@ -1018,12 +1018,12 @@ eHalStatus pmcRequestFullPower (tHalHandle hHal, void (*callbackRoutine) (void * WLAN_VOS_DIAG_EVENT_REPORT(&psRequest, EVENT_WLAN_POWERSAVE_GENERIC); #endif - smsLog(pMac, LOG2, FL("Entering pmcRequestFullPower")); + pmcLog(pMac, LOG2, FL("Entering pmcRequestFullPower")); if( !PMC_IS_READY(pMac) ) { - smsLog(pMac, LOGE, FL("Requesting Full Power when PMC not ready")); - smsLog(pMac, LOGE, FL("pmcReady = %d pmcState = %s"), + pmcLog(pMac, LOGE, FL("Requesting Full Power when PMC not ready")); + pmcLog(pMac, LOGE, FL("pmcReady = %d pmcState = %s"), pMac->pmc.pmcReady, pmcGetPmcStateStr(pMac->pmc.pmcState)); return eHAL_STATUS_FAILURE; } @@ -1042,12 +1042,10 @@ eHalStatus pmcRequestFullPower (tHalHandle hHal, void (*callbackRoutine) (void * /* If in IMPS State, then cancel the timer. */ if (pMac->pmc.pmcState == IMPS) - if (palTimerStop(pMac->hHdd, pMac->pmc.hImpsTimer) != eHAL_STATUS_SUCCESS) + if (vos_timer_stop(&pMac->pmc.hImpsTimer) != VOS_STATUS_SUCCESS) { - smsLog(pMac, LOGE, FL("Cannot cancel IMPS timer")); - return eHAL_STATUS_FAILURE; + pmcLog(pMac, LOGE, FL("Cannot cancel IMPS timer")); } - /* Enter Request Full Power State. */ if (pmcEnterRequestFullPowerState(hHal, fullPowerReason) != eHAL_STATUS_SUCCESS) return eHAL_STATUS_FAILURE; @@ -1057,9 +1055,11 @@ eHalStatus pmcRequestFullPower (tHalHandle hHal, void (*callbackRoutine) (void * //If caller doesn't need a callback, simply waits up the chip. if( callbackRoutine ) { - if (palAllocateMemory(pMac->hHdd, (void **)&pEntry, sizeof(tRequestFullPowerEntry)) != eHAL_STATUS_SUCCESS) + pEntry = vos_mem_malloc(sizeof(tRequestFullPowerEntry)); + if ( NULL == pEntry ) { - smsLog(pMac, LOGE, FL("Cannot allocate memory for request full power routine list entry")); + pmcLog(pMac, LOGE, + FL("Cannot allocate memory for request full power routine list entry")); PMC_ABORT; return eHAL_STATUS_FAILURE; } @@ -1123,7 +1123,7 @@ eHalStatus pmcRequestImps (tHalHandle hHal, tANI_U32 impsPeriod, #endif - smsLog(pMac, LOG2, FL("Entering pmcRequestImps")); + pmcLog(pMac, LOG2, FL("Entering pmcRequestImps")); status = pmcEnterImpsCheck( pMac ); if( HAL_STATUS_SUCCESS( status ) ) @@ -1176,12 +1176,13 @@ eHalStatus pmcRegisterPowerSaveCheck (tHalHandle hHal, tANI_BOOLEAN (*checkRouti tpAniSirGlobal pMac = PMAC_STRUCT(hHal); tpPowerSaveCheckEntry pEntry; - smsLog(pMac, LOG2, FL("Entering pmcRegisterPowerSaveCheck")); + pmcLog(pMac, LOG2, FL("Entering pmcRegisterPowerSaveCheck")); /* Allocate entry for power save check routine list. */ - if (palAllocateMemory(pMac->hHdd, (void **)&pEntry, sizeof(tPowerSaveCheckEntry)) != eHAL_STATUS_SUCCESS) + pEntry = vos_mem_malloc(sizeof(tPowerSaveCheckEntry)); + if ( NULL == pEntry ) { - smsLog(pMac, LOGE, FL("Cannot allocate memory for power save check routine list entry")); + pmcLog(pMac, LOGE, FL("Cannot allocate memory for power save check routine list entry")); PMC_ABORT; return eHAL_STATUS_FAILURE; } @@ -1220,7 +1221,7 @@ eHalStatus pmcDeregisterPowerSaveCheck (tHalHandle hHal, tANI_BOOLEAN (*checkRou tListElem *pEntry; tpPowerSaveCheckEntry pPowerSaveCheckEntry; - smsLog(pMac, LOG2, FL("Entering pmcDeregisterPowerSaveCheck")); + pmcLog(pMac, LOG2, FL("Entering pmcDeregisterPowerSaveCheck")); /* Find entry in the power save check routine list that matches the specified routine and remove it. */ @@ -1232,16 +1233,11 @@ eHalStatus pmcDeregisterPowerSaveCheck (tHalHandle hHal, tANI_BOOLEAN (*checkRou { if (csrLLRemoveEntry(&pMac->pmc.powerSaveCheckList, pEntry, FALSE)) { - if (palFreeMemory(pMac->hHdd, pPowerSaveCheckEntry) != eHAL_STATUS_SUCCESS) - { - smsLog(pMac, LOGE, FL("Cannot free memory for power save check routine list entry")); - PMC_ABORT; - return eHAL_STATUS_FAILURE; - } + vos_mem_free(pPowerSaveCheckEntry); } else { - smsLog(pMac, LOGE, FL("Cannot remove power save check routine list entry")); + pmcLog(pMac, LOGE, FL("Cannot remove power save check routine list entry")); return eHAL_STATUS_FAILURE; } return eHAL_STATUS_SUCCESS; @@ -1265,7 +1261,7 @@ static void pmcProcessResponse( tpAniSirGlobal pMac, tSirSmeRsp *pMsg ) { pCommand = GET_BASE_ADDR(pEntry, tSmeCmd, Link); - smsLog(pMac, LOG2, FL("process message = %d"), pMsg->messageType); + pmcLog(pMac, LOG2, FL("process message = %d"), pMsg->messageType); /* Process each different type of message. */ switch (pMsg->messageType) @@ -1273,10 +1269,10 @@ static void pmcProcessResponse( tpAniSirGlobal pMac, tSirSmeRsp *pMsg ) /* We got a response to our IMPS request. */ case eWNI_PMC_ENTER_IMPS_RSP: - smsLog(pMac, LOG2, FL("Rcvd eWNI_PMC_ENTER_IMPS_RSP with status = %d"), pMsg->statusCode); + pmcLog(pMac, LOG2, FL("Rcvd eWNI_PMC_ENTER_IMPS_RSP with status = %d"), pMsg->statusCode); if( (eSmeCommandEnterImps != pCommand->command) && (eSmeCommandEnterStandby != pCommand->command) ) { - smsLog(pMac, LOGW, FL("Rcvd eWNI_PMC_ENTER_IMPS_RSP without request")); + pmcLog(pMac, LOGW, FL("Rcvd eWNI_PMC_ENTER_IMPS_RSP without request")); fRemoveCommand = eANI_BOOLEAN_FALSE; break; } @@ -1289,7 +1285,8 @@ static void pmcProcessResponse( tpAniSirGlobal pMac, tSirSmeRsp *pMsg ) pmcEnterImpsState(pMac); if (!(pMac->pmc.ImpsReqFailed || pMac->pmc.ImpsReqTimerFailed) && pMac->pmc.ImpsReqFailCnt) { - smsLog(pMac, LOGE, FL("Response message to request to enter IMPS was failed %d times before success"), + pmcLog(pMac, LOGE, + FL("Response message to request to enter IMPS was failed %d times before success"), pMac->pmc.ImpsReqFailCnt); pMac->pmc.ImpsReqFailCnt = 0; } @@ -1301,7 +1298,8 @@ static void pmcProcessResponse( tpAniSirGlobal pMac, tSirSmeRsp *pMsg ) pMac->pmc.ImpsReqFailed = VOS_TRUE; if (!(pMac->pmc.ImpsReqFailCnt & 0xF)) { - smsLog(pMac, LOGE, FL("Response message to request to enter IMPS indicates failure, status %x, FailCnt - %d"), + pmcLog(pMac, LOGE, + FL("Response message to request to enter IMPS indicates failure, status %x, FailCnt - %d"), pMsg->statusCode, ++pMac->pmc.ImpsReqFailCnt); } else @@ -1324,7 +1322,7 @@ static void pmcProcessResponse( tpAniSirGlobal pMac, tSirSmeRsp *pMsg ) and tell everyone that we aren't going into STANDBY. */ else { - smsLog(pMac, LOGE, "PMC: response message to request to enter " + pmcLog(pMac, LOGE, "PMC: response message to request to enter " "standby indicates failure, status %x", pMsg->statusCode); pmcEnterFullPowerState(pMac); pmcDoStandbyCallbacks(pMac, eHAL_STATUS_FAILURE); @@ -1332,42 +1330,43 @@ static void pmcProcessResponse( tpAniSirGlobal pMac, tSirSmeRsp *pMsg ) } else { - smsLog(pMac, LOGE, "PMC: Enter IMPS rsp rcvd when device is " + pmcLog(pMac, LOGE, "PMC: Enter IMPS rsp rcvd when device is " "in %d state", pMac->pmc.pmcState); } break; /* We got a response to our wake from IMPS request. */ case eWNI_PMC_EXIT_IMPS_RSP: - smsLog(pMac, LOG2, FL("Rcvd eWNI_PMC_EXIT_IMPS_RSP with status = %d"), pMsg->statusCode); + pmcLog(pMac, LOG2, FL("Rcvd eWNI_PMC_EXIT_IMPS_RSP with status = %d"), pMsg->statusCode); if( eSmeCommandExitImps != pCommand->command ) { - smsLog(pMac, LOGW, FL("Rcvd eWNI_PMC_EXIT_IMPS_RSP without request")); + pmcLog(pMac, LOGW, FL("Rcvd eWNI_PMC_EXIT_IMPS_RSP without request")); fRemoveCommand = eANI_BOOLEAN_FALSE; break; } /* Check that we are in the correct state for this message. */ if (pMac->pmc.pmcState != REQUEST_FULL_POWER) { - smsLog(pMac, LOGE, FL("Got Exit IMPS Response Message while in state %d"), pMac->pmc.pmcState); + pmcLog(pMac, LOGE, FL("Got Exit IMPS Response Message while " + "in state %d"), pMac->pmc.pmcState); break; } /* Enter Full Power State. */ if (pMsg->statusCode != eSIR_SME_SUCCESS) { - smsLog(pMac, LOGP, FL("Response message to request to exit IMPS indicates failure, status %x"), - pMsg->statusCode); + pmcLog(pMac, LOGE, FL("Response message to request to exit " + "IMPS indicates failure, status %x"), pMsg->statusCode); } pmcEnterFullPowerState(pMac); break; /* We got a response to our BMPS request. */ case eWNI_PMC_ENTER_BMPS_RSP: - smsLog(pMac, LOG2, FL("Rcvd eWNI_PMC_ENTER_BMPS_RSP with status = %d"), pMsg->statusCode); + pmcLog(pMac, LOG2, FL("Rcvd eWNI_PMC_ENTER_BMPS_RSP with status = %d"), pMsg->statusCode); if( eSmeCommandEnterBmps != pCommand->command ) { - smsLog(pMac, LOGW, FL("Rcvd eWNI_PMC_ENTER_BMPS_RSP without request")); + pmcLog(pMac, LOGW, FL("Rcvd eWNI_PMC_ENTER_BMPS_RSP without request")); fRemoveCommand = eANI_BOOLEAN_FALSE; break; } @@ -1375,7 +1374,8 @@ static void pmcProcessResponse( tpAniSirGlobal pMac, tSirSmeRsp *pMsg ) /* Check that we are in the correct state for this message. */ if (pMac->pmc.pmcState != REQUEST_BMPS) { - smsLog(pMac, LOGE, FL("Got Enter BMPS Response Message while in state %d"), pMac->pmc.pmcState); + pmcLog(pMac, LOGE, + FL("Got Enter BMPS Response Message while in state %d"), pMac->pmc.pmcState); break; } @@ -1391,7 +1391,8 @@ static void pmcProcessResponse( tpAniSirGlobal pMac, tSirSmeRsp *pMsg ) /* If response is failure, then we stay in Full Power State and tell everyone that we aren't going into BMPS. */ else { - smsLog(pMac, LOGE, FL("Response message to request to enter BMPS indicates failure, status %x"), + pmcLog(pMac, LOGE, + FL("Response message to request to enter BMPS indicates failure, status %x"), pMsg->statusCode); pmcEnterFullPowerState(pMac); //Do not call UAPSD callback here since it may be re-entered @@ -1401,24 +1402,26 @@ static void pmcProcessResponse( tpAniSirGlobal pMac, tSirSmeRsp *pMsg ) /* We got a response to our wake from BMPS request. */ case eWNI_PMC_EXIT_BMPS_RSP: - smsLog(pMac, LOG2, FL("Rcvd eWNI_PMC_EXIT_BMPS_RSP with status = %d"), pMsg->statusCode); + pmcLog(pMac, LOG2, FL("Rcvd eWNI_PMC_EXIT_BMPS_RSP with status = %d"), pMsg->statusCode); if( eSmeCommandExitBmps != pCommand->command ) { - smsLog(pMac, LOGW, FL("Rcvd eWNI_PMC_EXIT_BMPS_RSP without request")); + pmcLog(pMac, LOGW, FL("Rcvd eWNI_PMC_EXIT_BMPS_RSP without request")); fRemoveCommand = eANI_BOOLEAN_FALSE; break; } /* Check that we are in the correct state for this message. */ if (pMac->pmc.pmcState != REQUEST_FULL_POWER) { - smsLog(pMac, LOGE, FL("Got Exit BMPS Response Message while in state %d"), pMac->pmc.pmcState); + pmcLog(pMac, LOGE, + FL("Got Exit BMPS Response Message while in state %d"), pMac->pmc.pmcState); break; } /* Enter Full Power State. */ if (pMsg->statusCode != eSIR_SME_SUCCESS) { - smsLog(pMac, LOGP, FL("Response message to request to exit BMPS indicates failure, status %x"), + pmcLog(pMac, LOGP, + FL("Response message to request to exit BMPS indicates failure, status %x"), pMsg->statusCode); } pmcEnterFullPowerState(pMac); @@ -1426,17 +1429,18 @@ static void pmcProcessResponse( tpAniSirGlobal pMac, tSirSmeRsp *pMsg ) /* We got a response to our Start UAPSD request. */ case eWNI_PMC_ENTER_UAPSD_RSP: - smsLog(pMac, LOG2, FL("Rcvd eWNI_PMC_ENTER_UAPSD_RSP with status = %d"), pMsg->statusCode); + pmcLog(pMac, LOG2, FL("Rcvd eWNI_PMC_ENTER_UAPSD_RSP with status = %d"), pMsg->statusCode); if( eSmeCommandEnterUapsd != pCommand->command ) { - smsLog(pMac, LOGW, FL("Rcvd eWNI_PMC_ENTER_UAPSD_RSP without request")); + pmcLog(pMac, LOGW, FL("Rcvd eWNI_PMC_ENTER_UAPSD_RSP without request")); fRemoveCommand = eANI_BOOLEAN_FALSE; break; } /* Check that we are in the correct state for this message. */ if (pMac->pmc.pmcState != REQUEST_START_UAPSD) { - smsLog(pMac, LOGE, FL("Got Enter Uapsd rsp Message while in state %d"), pMac->pmc.pmcState); + pmcLog(pMac, LOGE, + FL("Got Enter Uapsd rsp Message while in state %d"), pMac->pmc.pmcState); break; } @@ -1449,7 +1453,7 @@ static void pmcProcessResponse( tpAniSirGlobal pMac, tSirSmeRsp *pMsg ) /* If response is failure, then we try to put the chip back in BMPS mode*/ else { - smsLog(pMac, LOGE, "PMC: response message to request to enter " + pmcLog(pMac, LOGE, "PMC: response message to request to enter " "UAPSD indicates failure, status %x", pMsg->statusCode); //Need to reset the UAPSD flag so pmcEnterBmpsState won't try to enter UAPSD. pMac->pmc.uapsdSessionRequired = FALSE; @@ -1461,23 +1465,24 @@ static void pmcProcessResponse( tpAniSirGlobal pMac, tSirSmeRsp *pMsg ) /* We got a response to our Stop UAPSD request. */ case eWNI_PMC_EXIT_UAPSD_RSP: - smsLog(pMac, LOG2, FL("Rcvd eWNI_PMC_EXIT_UAPSD_RSP with status = %d"), pMsg->statusCode); + pmcLog(pMac, LOG2, FL("Rcvd eWNI_PMC_EXIT_UAPSD_RSP with status = %d"), pMsg->statusCode); if( eSmeCommandExitUapsd != pCommand->command ) { - smsLog(pMac, LOGW, FL("Rcvd eWNI_PMC_EXIT_UAPSD_RSP without request")); + pmcLog(pMac, LOGW, FL("Rcvd eWNI_PMC_EXIT_UAPSD_RSP without request")); fRemoveCommand = eANI_BOOLEAN_FALSE; break; } /* Check that we are in the correct state for this message. */ if (pMac->pmc.pmcState != REQUEST_STOP_UAPSD) { - smsLog(pMac, LOGE, FL("Got Exit Uapsd rsp Message while in state %d"), pMac->pmc.pmcState); + pmcLog(pMac, LOGE, + FL("Got Exit Uapsd rsp Message while in state %d"), pMac->pmc.pmcState); break; } /* Enter BMPS State */ if (pMsg->statusCode != eSIR_SME_SUCCESS) { - smsLog(pMac, LOGP, "PMC: response message to request to exit " + pmcLog(pMac, LOGP, "PMC: response message to request to exit " "UAPSD indicates failure, status %x", pMsg->statusCode); } pmcEnterBmpsState(pMac); @@ -1488,14 +1493,14 @@ static void pmcProcessResponse( tpAniSirGlobal pMac, tSirSmeRsp *pMsg ) if( eSmeCommandEnterWowl != pCommand->command ) { - smsLog(pMac, LOGW, FL("Rcvd eWNI_PMC_ENTER_WOWL_RSP without request")); + pmcLog(pMac, LOGW, FL("Rcvd eWNI_PMC_ENTER_WOWL_RSP without request")); fRemoveCommand = eANI_BOOLEAN_FALSE; break; } /* Check that we are in the correct state for this message. */ if (pMac->pmc.pmcState != REQUEST_ENTER_WOWL) { - smsLog(pMac, LOGE, FL("Got eWNI_PMC_ENTER_WOWL_RSP while in state %s"), + pmcLog(pMac, LOGE, FL("Got eWNI_PMC_ENTER_WOWL_RSP while in state %s"), pmcGetPmcStateStr(pMac->pmc.pmcState)); break; } @@ -1509,7 +1514,7 @@ static void pmcProcessResponse( tpAniSirGlobal pMac, tSirSmeRsp *pMsg ) /* If response is failure, then we try to put the chip back in BMPS mode*/ else { - smsLog(pMac, LOGE, "PMC: response message to request to enter " + pmcLog(pMac, LOGE, "PMC: response message to request to enter " "WOWL indicates failure, status %x", pMsg->statusCode); pmcEnterBmpsState(pMac); pmcDoEnterWowlCallbacks(pMac, eHAL_STATUS_FAILURE); @@ -1521,27 +1526,27 @@ static void pmcProcessResponse( tpAniSirGlobal pMac, tSirSmeRsp *pMsg ) if( eSmeCommandExitWowl != pCommand->command ) { - smsLog(pMac, LOGW, FL("Rcvd eWNI_PMC_EXIT_WOWL_RSP without request")); + pmcLog(pMac, LOGW, FL("Rcvd eWNI_PMC_EXIT_WOWL_RSP without request")); fRemoveCommand = eANI_BOOLEAN_FALSE; break; } /* Check that we are in the correct state for this message. */ if (pMac->pmc.pmcState != REQUEST_EXIT_WOWL) { - smsLog(pMac, LOGE, FL("Got Exit WOWL rsp Message while in state %d"), pMac->pmc.pmcState); + pmcLog(pMac, LOGE, FL("Got Exit WOWL rsp Message while in state %d"), pMac->pmc.pmcState); break; } /* Enter BMPS State */ if (pMsg->statusCode != eSIR_SME_SUCCESS) { - smsLog(pMac, LOGP, "PMC: response message to request to exit " + pmcLog(pMac, LOGP, "PMC: response message to request to exit " "WOWL indicates failure, status %x", pMsg->statusCode); } pmcEnterBmpsState(pMac); break; default: - smsLog(pMac, LOGE, FL("Invalid message type %d received"), pMsg->messageType); + pmcLog(pMac, LOGE, FL("Invalid message type %d received"), pMsg->messageType); PMC_ABORT; break; }//switch @@ -1557,7 +1562,7 @@ static void pmcProcessResponse( tpAniSirGlobal pMac, tSirSmeRsp *pMsg ) } else { - smsLog(pMac, LOGE, FL("message type %d received but no request is found"), pMsg->messageType); + pmcLog(pMac, LOGE, FL("message type %d received but no request is found"), pMsg->messageType); } } @@ -1581,7 +1586,7 @@ void pmcMessageProcessor (tHalHandle hHal, tSirSmeRsp *pMsg) { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - smsLog(pMac, LOG2, FL("Entering pmcMessageProcessor, message type %d"), pMsg->messageType); + pmcLog(pMac, LOG2, FL("Entering pmcMessageProcessor, message type %d"), pMsg->messageType); switch( pMsg->messageType ) { @@ -1589,7 +1594,7 @@ void pmcMessageProcessor (tHalHandle hHal, tSirSmeRsp *pMsg) //When PMC needs to handle more indication from PE, they need to be added here. { /* Device left BMPS on its own. */ - smsLog(pMac, LOGW, FL("Rcvd eWNI_PMC_EXIT_BMPS_IND with status = %d"), pMsg->statusCode); + pmcLog(pMac, LOGW, FL("Rcvd eWNI_PMC_EXIT_BMPS_IND with status = %d"), pMsg->statusCode); /* Check that we are in the correct state for this message. */ switch(pMac->pmc.pmcState) { @@ -1601,10 +1606,10 @@ void pmcMessageProcessor (tHalHandle hHal, tSirSmeRsp *pMsg) case WOWL: case REQUEST_EXIT_WOWL: case REQUEST_FULL_POWER: - smsLog(pMac, LOGW, FL("Got eWNI_PMC_EXIT_BMPS_IND while in state %d"), pMac->pmc.pmcState); + pmcLog(pMac, LOGW, FL("Got eWNI_PMC_EXIT_BMPS_IND while in state %d"), pMac->pmc.pmcState); break; default: - smsLog(pMac, LOGE, FL("Got eWNI_PMC_EXIT_BMPS_IND while in state %d"), pMac->pmc.pmcState); + pmcLog(pMac, LOGE, FL("Got eWNI_PMC_EXIT_BMPS_IND while in state %d"), pMac->pmc.pmcState); PMC_ABORT; break; } @@ -1612,7 +1617,7 @@ void pmcMessageProcessor (tHalHandle hHal, tSirSmeRsp *pMsg) /* Enter Full Power State. */ if (pMsg->statusCode != eSIR_SME_SUCCESS) { - smsLog(pMac, LOGP, FL("Exit BMPS indication indicates failure, status %x"), pMsg->statusCode); + pmcLog(pMac, LOGP, FL("Exit BMPS indication indicates failure, status %x"), pMsg->statusCode); } else { @@ -1636,19 +1641,19 @@ tANI_BOOLEAN pmcValidateConnectState( tHalHandle hHal ) if ( !csrIsInfraConnected( pMac ) ) { - smsLog(pMac, LOGW, "PMC: STA not associated. BMPS cannot be entered"); + pmcLog(pMac, LOGW, "PMC: STA not associated. BMPS cannot be entered"); return eANI_BOOLEAN_FALSE; } //Cannot have other session if ( csrIsIBSSStarted( pMac ) ) { - smsLog(pMac, LOGW, "PMC: IBSS started. BMPS cannot be entered"); + pmcLog(pMac, LOGW, "PMC: IBSS started. BMPS cannot be entered"); return eANI_BOOLEAN_FALSE; } if ( csrIsBTAMPStarted( pMac ) ) { - smsLog(pMac, LOGW, "PMC: BT-AMP exists. BMPS cannot be entered"); + pmcLog(pMac, LOGW, "PMC: BT-AMP exists. BMPS cannot be entered"); return eANI_BOOLEAN_FALSE; } if ((vos_concurrent_sessions_running()) && @@ -1656,7 +1661,7 @@ tANI_BOOLEAN pmcValidateConnectState( tHalHandle hHal ) (vos_get_concurrency_mode()& VOS_SAP) || (vos_get_concurrency_mode()& VOS_P2P_GO))) { - smsLog(pMac, LOGW, "PMC: Multiple active sessions exists. BMPS cannot be entered"); + pmcLog(pMac, LOGW, "PMC: Multiple active sessions exists. BMPS cannot be entered"); return eANI_BOOLEAN_FALSE; } return eANI_BOOLEAN_TRUE; @@ -1669,19 +1674,19 @@ tANI_BOOLEAN pmcAllowImps( tHalHandle hHal ) //Cannot have other session like IBSS or BT AMP running if ( csrIsIBSSStarted( pMac ) ) { - smsLog(pMac, LOGW, "PMC: IBSS started. IMPS cannot be entered"); + pmcLog(pMac, LOGW, "PMC: IBSS started. IMPS cannot be entered"); return eANI_BOOLEAN_FALSE; } if ( csrIsBTAMPStarted( pMac ) ) { - smsLog(pMac, LOGW, "PMC: BT-AMP exists. IMPS cannot be entered"); + pmcLog(pMac, LOGW, "PMC: BT-AMP exists. IMPS cannot be entered"); return eANI_BOOLEAN_FALSE; } //All sessions must be disconnected to allow IMPS if ( !csrIsAllSessionDisconnected( pMac ) ) { - smsLog(pMac, LOGW, "PMC: Atleast one connected session. IMPS cannot be entered"); + pmcLog(pMac, LOGW, "PMC: Atleast one connected session. IMPS cannot be entered"); return eANI_BOOLEAN_FALSE; } @@ -1725,12 +1730,12 @@ eHalStatus pmcRequestBmps ( WLAN_VOS_DIAG_EVENT_REPORT(&psRequest, EVENT_WLAN_POWERSAVE_GENERIC); #endif - smsLog(pMac, LOG2, "PMC: entering pmcRequestBmps"); + pmcLog(pMac, LOG2, "PMC: entering pmcRequestBmps"); /* If already in BMPS, just return. */ if (pMac->pmc.pmcState == BMPS || REQUEST_START_UAPSD == pMac->pmc.pmcState || UAPSD == pMac->pmc.pmcState) { - smsLog(pMac, LOG2, "PMC: Device already in BMPS pmcState %d", pMac->pmc.pmcState); + pmcLog(pMac, LOG2, "PMC: Device already in BMPS pmcState %d", pMac->pmc.pmcState); pMac->pmc.bmpsRequestedByHdd = TRUE; return eHAL_STATUS_SUCCESS; } @@ -1749,11 +1754,10 @@ eHalStatus pmcRequestBmps ( /* If able to enter Request BMPS State, then request is pending. Allocate entry for request BMPS callback routine list. */ - if (palAllocateMemory( - pMac->hHdd, (void **)&pEntry, - sizeof(tRequestBmpsEntry)) != eHAL_STATUS_SUCCESS) + pEntry = vos_mem_malloc(sizeof(tRequestBmpsEntry)); + if ( NULL == pEntry ) { - smsLog(pMac, LOGE, "PMC: cannot allocate memory for request " + pmcLog(pMac, LOGE, "PMC: cannot allocate memory for request " "BMPS routine list entry"); return eHAL_STATUS_FAILURE; } @@ -1777,16 +1781,16 @@ eHalStatus pmcRequestBmps ( else if (status == eHAL_STATUS_PMC_NOT_NOW) { pmcStopTrafficTimer(hHal); - smsLog(pMac, LOG1, FL("Can't enter BMPS+++")); + pmcLog(pMac, LOG1, FL("Can't enter BMPS+++")); if (pmcShouldBmpsTimerRun(pMac)) { if (pmcStartTrafficTimer(pMac, pMac->pmc.bmpsConfig.trafficMeasurePeriod) != eHAL_STATUS_SUCCESS) { - smsLog(pMac, LOG1, FL("Cannot start BMPS Retry timer")); + pmcLog(pMac, LOG1, FL("Cannot start BMPS Retry timer")); } - smsLog(pMac, LOG1, + pmcLog(pMac, LOG1, FL("BMPS Retry Timer already running or started")); } } @@ -1831,12 +1835,12 @@ eHalStatus pmcStartUapsd ( WLAN_VOS_DIAG_EVENT_REPORT(&psRequest, EVENT_WLAN_POWERSAVE_GENERIC); #endif - smsLog(pMac, LOG2, "PMC: entering pmcStartUapsd"); + pmcLog(pMac, LOG2, "PMC: entering pmcStartUapsd"); if( !PMC_IS_READY(pMac) ) { - smsLog(pMac, LOGE, FL("Requesting UAPSD when PMC not ready")); - smsLog(pMac, LOGE, FL("pmcReady = %d pmcState = %s"), + pmcLog(pMac, LOGE, FL("Requesting UAPSD when PMC not ready")); + pmcLog(pMac, LOGE, FL("pmcReady = %d pmcState = %s"), pMac->pmc.pmcReady, pmcGetPmcStateStr(pMac->pmc.pmcState)); return eHAL_STATUS_FAILURE; } @@ -1844,14 +1848,14 @@ eHalStatus pmcStartUapsd ( /* Check if BMPS is enabled. */ if (!pMac->pmc.bmpsEnabled) { - smsLog(pMac, LOGE, "PMC: Cannot enter UAPSD. BMPS is disabled"); + pmcLog(pMac, LOGE, "PMC: Cannot enter UAPSD. BMPS is disabled"); return eHAL_STATUS_PMC_DISABLED; } /* Check if UAPSD is enabled. */ if (!pMac->pmc.uapsdEnabled) { - smsLog(pMac, LOGE, "PMC: Cannot enter UAPSD. UAPSD is disabled"); + pmcLog(pMac, LOGE, "PMC: Cannot enter UAPSD. UAPSD is disabled"); return eHAL_STATUS_PMC_DISABLED; } @@ -1862,7 +1866,7 @@ eHalStatus pmcStartUapsd ( /* Check that we are associated. */ if (!pmcValidateConnectState( pMac )) { - smsLog(pMac, LOGE, "PMC: STA not associated with an AP. UAPSD cannot be entered"); + pmcLog(pMac, LOGE, "PMC: STA not associated with an AP. UAPSD cannot be entered"); return eHAL_STATUS_FAILURE; } @@ -1873,10 +1877,10 @@ eHalStatus pmcStartUapsd ( if( NULL != callbackRoutine ) { /* If success then request is pending. Allocate entry for callback routine list. */ - if (palAllocateMemory(pMac->hHdd, (void **)&pEntry, - sizeof(tStartUapsdEntry)) != eHAL_STATUS_SUCCESS) + pEntry = vos_mem_malloc(sizeof(tStartUapsdEntry)); + if ( NULL == pEntry ) { - smsLog(pMac, LOGE, "PMC: cannot allocate memory for request " + pmcLog(pMac, LOGE, "PMC: cannot allocate memory for request " "start UAPSD routine list entry"); return eHAL_STATUS_FAILURE; } @@ -1920,7 +1924,7 @@ eHalStatus pmcStopUapsd (tHalHandle hHal) WLAN_VOS_DIAG_EVENT_REPORT(&psRequest, EVENT_WLAN_POWERSAVE_GENERIC); #endif - smsLog(pMac, LOG2, "PMC: entering pmcStopUapsd"); + pmcLog(pMac, LOG2, "PMC: entering pmcStopUapsd"); /* Clear any buffered command for entering UAPSD */ pMac->pmc.uapsdSessionRequired = FALSE; @@ -1929,7 +1933,7 @@ eHalStatus pmcStopUapsd (tHalHandle hHal) some other module (HDD, BT-AMP) requested Full Power.*/ if (pMac->pmc.pmcState != UAPSD && pMac->pmc.pmcState != REQUEST_STOP_UAPSD) { - smsLog(pMac, LOGW, "PMC: Device is already out of UAPSD " + pmcLog(pMac, LOGW, "PMC: Device is already out of UAPSD " "state. Current state is %d", pMac->pmc.pmcState); return eHAL_STATUS_SUCCESS; } @@ -1968,19 +1972,19 @@ extern eHalStatus pmcRequestStandby ( WLAN_VOS_DIAG_EVENT_REPORT(&psRequest, EVENT_WLAN_POWERSAVE_GENERIC); #endif - smsLog(pMac, LOG2, "PMC: entering pmcRequestStandby"); + pmcLog(pMac, LOG2, "PMC: entering pmcRequestStandby"); /* Check if standby is enabled. */ if (!pMac->pmc.standbyEnabled) { - smsLog(pMac, LOGE, "PMC: Cannot enter standby. Standby is disabled"); + pmcLog(pMac, LOGE, "PMC: Cannot enter standby. Standby is disabled"); return eHAL_STATUS_PMC_DISABLED; } if( !PMC_IS_READY(pMac) ) { - smsLog(pMac, LOGE, FL("Requesting standby when PMC not ready")); - smsLog(pMac, LOGE, FL("pmcReady = %d pmcState = %s"), + pmcLog(pMac, LOGE, FL("Requesting standby when PMC not ready")); + pmcLog(pMac, LOGE, FL("pmcReady = %d pmcState = %s"), pMac->pmc.pmcReady, pmcGetPmcStateStr(pMac->pmc.pmcState)); return eHAL_STATUS_FAILURE; } @@ -2027,12 +2031,13 @@ extern eHalStatus pmcRegisterDeviceStateUpdateInd (tHalHandle hHal, tpAniSirGlobal pMac = PMAC_STRUCT(hHal); tpDeviceStateUpdateIndEntry pEntry; - smsLog(pMac, LOG2, FL("Entering pmcRegisterDeviceStateUpdateInd")); + pmcLog(pMac, LOG2, FL("Entering pmcRegisterDeviceStateUpdateInd")); /* Allocate entry for device power state update indication. */ - if (palAllocateMemory(pMac->hHdd, (void **)&pEntry, sizeof(tDeviceStateUpdateIndEntry)) != eHAL_STATUS_SUCCESS) + pEntry = vos_mem_malloc(sizeof(tDeviceStateUpdateIndEntry)); + if ( NULL == pEntry ) { - smsLog(pMac, LOGE, FL("Cannot allocate memory for device power state update indication")); + pmcLog(pMac, LOGE, FL("Cannot allocate memory for device power state update indication")); PMC_ABORT; return eHAL_STATUS_FAILURE; } @@ -2063,7 +2068,7 @@ eHalStatus pmcDeregisterDeviceStateUpdateInd (tHalHandle hHal, tListElem *pEntry; tpDeviceStateUpdateIndEntry pDeviceStateUpdateIndEntry; - smsLog(pMac, LOG2, FL("Entering pmcDeregisterDeviceStateUpdateInd")); + pmcLog(pMac, LOG2, FL("Entering pmcDeregisterDeviceStateUpdateInd")); /* Find entry in the power save update routine list that matches the specified routine and remove it. */ @@ -2075,15 +2080,10 @@ eHalStatus pmcDeregisterDeviceStateUpdateInd (tHalHandle hHal, { if (!csrLLRemoveEntry(&pMac->pmc.deviceStateUpdateIndList, pEntry, FALSE)) { - smsLog(pMac, LOGE, FL("Cannot remove device state update ind entry from list")); - return eHAL_STATUS_FAILURE; - } - if (palFreeMemory(pMac->hHdd, pDeviceStateUpdateIndEntry) != eHAL_STATUS_SUCCESS) - { - smsLog(pMac, LOGE, FL("Cannot free memory for device state update ind routine list entry")); - PMC_ABORT; + pmcLog(pMac, LOGE, FL("Cannot remove device state update ind entry from list")); return eHAL_STATUS_FAILURE; } + vos_mem_free(pDeviceStateUpdateIndEntry); return eHAL_STATUS_SUCCESS; } pEntry = csrLLNext(&pMac->pmc.deviceStateUpdateIndList, pEntry, FALSE); @@ -2107,11 +2107,11 @@ eHalStatus pmcReady(tHalHandle hHal) { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - smsLog(pMac, LOG2, FL("Entering pmcReady")); + pmcLog(pMac, LOG2, FL("Entering pmcReady")); if(pMac->pmc.pmcState == STOPPED) { - smsLog(pMac, LOGP, FL("pmcReady is invoked even before pmcStart")); + pmcLog(pMac, LOGP, FL("pmcReady is invoked even before pmcStart")); return eHAL_STATUS_FAILURE; } @@ -2149,17 +2149,17 @@ eHalStatus pmcWowlAddBcastPattern ( WLAN_VOS_DIAG_LOG_ALLOC(log_ptr, vos_log_powersave_wow_add_ptrn_pkt_type, LOG_WLAN_POWERSAVE_WOW_ADD_PTRN_C); #endif //#ifdef FEATURE_WLAN_DIAG_SUPPORT - smsLog(pMac, LOG2, "PMC: entering pmcWowlAddBcastPattern"); + pmcLog(pMac, LOG2, "PMC: entering pmcWowlAddBcastPattern"); if(pattern == NULL) { - smsLog(pMac, LOGE, FL("Null broadcast pattern being passed")); + pmcLog(pMac, LOGE, FL("Null broadcast pattern being passed")); return eHAL_STATUS_FAILURE; } if( pSession == NULL) { - smsLog(pMac, LOGE, FL("Session not found ")); + pmcLog(pMac, LOGE, FL("Session not found ")); return eHAL_STATUS_FAILURE; } @@ -2171,18 +2171,21 @@ eHalStatus pmcWowlAddBcastPattern ( log_ptr->pattern_size = pattern->ucPatternSize; log_ptr->pattern_mask_size = pattern->ucPatternMaskSize; - vos_mem_copy(log_ptr->pattern, pattern->ucPattern, SIR_WOWL_BCAST_PATTERN_MAX_SIZE); + vos_mem_copy(log_ptr->pattern, pattern->ucPattern, + SIR_WOWL_BCAST_PATTERN_MAX_SIZE); /* 1 bit in the pattern mask denotes 1 byte of pattern hence pattern mask size is 1/8 */ - vos_mem_copy(log_ptr->pattern_mask, pattern->ucPatternMask, SIR_WOWL_BCAST_PATTERN_MAX_SIZE >> 3); + vos_mem_copy(log_ptr->pattern_mask, pattern->ucPatternMask, + SIR_WOWL_BCAST_PATTERN_MAX_SIZE >> 3); } WLAN_VOS_DIAG_LOG_REPORT(log_ptr); + WLAN_VOS_DIAG_LOG_FREE(log_ptr); #endif if(pattern->ucPatternId >= SIR_WOWL_BCAST_MAX_NUM_PATTERNS ) { - smsLog(pMac, LOGE, FL("Pattern Id must range from 0 to %d"), SIR_WOWL_BCAST_MAX_NUM_PATTERNS-1); + pmcLog(pMac, LOGE, FL("Pattern Id must range from 0 to %d"), SIR_WOWL_BCAST_MAX_NUM_PATTERNS-1); return eHAL_STATUS_FAILURE; } @@ -2192,39 +2195,33 @@ eHalStatus pmcWowlAddBcastPattern ( if( pMac->pmc.pmcState == STANDBY || pMac->pmc.pmcState == REQUEST_STANDBY ) { - smsLog(pMac, LOGE, FL("Cannot add WoWL Pattern as chip is in %s state"), + pmcLog(pMac, LOGE, FL("Cannot add WoWL Pattern as chip is in %s state"), pmcGetPmcStateStr(pMac->pmc.pmcState)); return eHAL_STATUS_FAILURE; } + if( pMac->pmc.pmcState == IMPS || pMac->pmc.pmcState == REQUEST_IMPS ) { - eHalStatus status; - vos_mem_copy(pattern->bssId, pSession->connectedProfile.bssid, sizeof(tSirMacAddr)); - //Wake up the chip first - status = pmcDeferMsg( pMac, eWNI_PMC_WOWL_ADD_BCAST_PTRN, - pattern, sizeof(tSirWowlAddBcastPtrn) ); + pmcLog(pMac, LOGE, FL("Cannot add WoWL Pattern as chip is in %s state"), + pmcGetPmcStateStr(pMac->pmc.pmcState)); + return eHAL_STATUS_FAILURE; + } - if( eHAL_STATUS_PMC_PENDING == status ) - { - return eHAL_STATUS_SUCCESS; - } - else - { - //either fail or already in full power - if( !HAL_STATUS_SUCCESS( status ) ) - { - return ( status ); - } - //else let it through because it is in full power state - } + if( !csrIsConnStateConnected(pMac, sessionId) ) + { + pmcLog(pMac, LOGE, FL("Cannot add WoWL Pattern session in %d state"), + pSession->connectState); + return eHAL_STATUS_FAILURE; } + vos_mem_copy(pattern->bssId, pSession->connectedProfile.bssid, sizeof(tSirMacAddr)); + skip_pmc_state_transition: if (pmcSendMessage(hHal, eWNI_PMC_WOWL_ADD_BCAST_PTRN, pattern, sizeof(tSirWowlAddBcastPtrn)) != eHAL_STATUS_SUCCESS) { - smsLog(pMac, LOGE, FL("Send of eWNI_PMC_WOWL_ADD_BCAST_PTRN to PE failed")); + pmcLog(pMac, LOGE, FL("Send of eWNI_PMC_WOWL_ADD_BCAST_PTRN to PE failed")); return eHAL_STATUS_FAILURE; } @@ -2258,17 +2255,17 @@ eHalStatus pmcWowlDelBcastPattern ( WLAN_VOS_DIAG_EVENT_REPORT(&wowRequest, EVENT_WLAN_POWERSAVE_WOW); #endif - smsLog(pMac, LOG2, "PMC: entering pmcWowlDelBcastPattern"); + pmcLog(pMac, LOG2, "PMC: entering pmcWowlDelBcastPattern"); if( NULL == pSession ) { - smsLog(pMac, LOGE, FL("Session not found ")); + pmcLog(pMac, LOGE, FL("Session not found ")); return eHAL_STATUS_FAILURE; } if(pattern->ucPatternId >= SIR_WOWL_BCAST_MAX_NUM_PATTERNS ) { - smsLog(pMac, LOGE, FL("Pattern Id must range from 0 to %d"), + pmcLog(pMac, LOGE, FL("Pattern Id must range from 0 to %d"), SIR_WOWL_BCAST_MAX_NUM_PATTERNS-1); return eHAL_STATUS_FAILURE; } @@ -2279,16 +2276,19 @@ eHalStatus pmcWowlDelBcastPattern ( if(pMac->pmc.pmcState == STANDBY || pMac->pmc.pmcState == REQUEST_STANDBY) { - smsLog(pMac, LOGE, FL("Cannot delete WoWL Pattern as chip is in %s state"), + pmcLog(pMac, LOGE, FL("Cannot delete WoWL Pattern as chip is in %s state"), pmcGetPmcStateStr(pMac->pmc.pmcState)); return eHAL_STATUS_FAILURE; } + vos_mem_copy(pattern->bssId, pSession->connectedProfile.bssid, sizeof(tSirMacAddr)); + if( pMac->pmc.pmcState == IMPS || pMac->pmc.pmcState == REQUEST_IMPS ) { eHalStatus status; - vos_mem_copy(pattern->bssId, pSession->connectedProfile.bssid, sizeof(tSirMacAddr)); + vos_mem_copy(pattern->bssId, pSession->connectedProfile.bssid, + sizeof(tSirMacAddr)); //Wake up the chip first status = pmcDeferMsg( pMac, eWNI_PMC_WOWL_DEL_BCAST_PTRN, pattern, sizeof(tSirWowlDelBcastPtrn) ); @@ -2313,7 +2313,7 @@ skip_pmc_state_transition: if (pmcSendMessage(hHal, eWNI_PMC_WOWL_DEL_BCAST_PTRN, pattern, sizeof(tSirWowlDelBcastPtrn)) != eHAL_STATUS_SUCCESS) { - smsLog(pMac, LOGE, FL("Send of eWNI_PMC_WOWL_DEL_BCAST_PTRN to PE failed")); + pmcLog(pMac, LOGE, FL("Send of eWNI_PMC_WOWL_DEL_BCAST_PTRN to PE failed")); return eHAL_STATUS_FAILURE; } @@ -2378,7 +2378,8 @@ eHalStatus pmcEnterWowl ( if(wowlEnterParams->ucMagicPktEnable) { wowRequest.wow_type |= 1; - vos_mem_copy(wowRequest.wow_magic_pattern, (tANI_U8 *)wowlEnterParams->magicPtrn, 6); + vos_mem_copy(wowRequest.wow_magic_pattern, + (tANI_U8 *)wowlEnterParams->magicPtrn, 6); } if(wowlEnterParams->ucPatternFilteringEnable) @@ -2388,11 +2389,11 @@ eHalStatus pmcEnterWowl ( WLAN_VOS_DIAG_EVENT_REPORT(&wowRequest, EVENT_WLAN_POWERSAVE_WOW); #endif - smsLog(pMac, LOG2, FL("PMC: entering pmcEnterWowl")); + pmcLog(pMac, LOG2, FL("PMC: entering pmcEnterWowl")); if( NULL == pSession ) { - smsLog(pMac, LOGE, FL("Session not found ")); + pmcLog(pMac, LOGE, FL("Session not found ")); return eHAL_STATUS_FAILURE; } @@ -2400,13 +2401,10 @@ eHalStatus pmcEnterWowl ( if( pMac->psOffloadEnabled ) goto skip_pmc_state_transition; - vos_mem_copy(wowlEnterParams->bssId, pSession->connectedProfile.bssid, - sizeof(tSirMacAddr)); - if( !PMC_IS_READY(pMac) ) { - smsLog(pMac, LOGE, FL("Requesting WoWL when PMC not ready")); - smsLog(pMac, LOGE, FL("pmcReady = %d pmcState = %s"), + pmcLog(pMac, LOGE, FL("Requesting WoWL when PMC not ready")); + pmcLog(pMac, LOGE, FL("pmcReady = %d pmcState = %s"), pMac->pmc.pmcReady, pmcGetPmcStateStr(pMac->pmc.pmcState)); return eHAL_STATUS_FAILURE; } @@ -2414,21 +2412,21 @@ eHalStatus pmcEnterWowl ( /* Check if BMPS is enabled. */ if (!pMac->pmc.bmpsEnabled) { - smsLog(pMac, LOGE, "PMC: Cannot enter WoWL. BMPS is disabled"); + pmcLog(pMac, LOGE, "PMC: Cannot enter WoWL. BMPS is disabled"); return eHAL_STATUS_PMC_DISABLED; } /* Check if WoWL is enabled. */ if (!pMac->pmc.wowlEnabled) { - smsLog(pMac, LOGE, "PMC: Cannot enter WoWL. WoWL is disabled"); + pmcLog(pMac, LOGE, "PMC: Cannot enter WoWL. WoWL is disabled"); return eHAL_STATUS_PMC_DISABLED; } /* Check that we are associated with single Session. */ if (!pmcValidateConnectState( pMac )) { - smsLog(pMac, LOGE, "PMC: Cannot enable WOWL. STA not associated " + pmcLog(pMac, LOGE, "PMC: Cannot enable WOWL. STA not associated " "with an Access Point in Infra Mode with single active session"); return eHAL_STATUS_FAILURE; } @@ -2437,18 +2435,21 @@ eHalStatus pmcEnterWowl ( module to do the necessary cleanup before triggring WOWL*/ if(pMac->pmc.uapsdSessionRequired) { - smsLog(pMac, LOGE, "PMC: Cannot request WOWL. Pending UAPSD request"); + pmcLog(pMac, LOGE, "PMC: Cannot request WOWL. Pending UAPSD request"); return eHAL_STATUS_FAILURE; } /* Check that entry into a power save mode is allowed at this time. */ if (pMac->pmc.pmcState == FULL_POWER && !pmcPowerSaveCheck(hHal)) { - smsLog(pMac, LOGE, "PMC: Power save check failed. WOWL request " + pmcLog(pMac, LOGE, "PMC: Power save check failed. WOWL request " "will not be accepted"); return eHAL_STATUS_FAILURE; } + vos_mem_copy(wowlEnterParams->bssId, pSession->connectedProfile.bssid, + sizeof(tSirMacAddr)); + skip_pmc_state_transition: // To avoid race condition, set callback routines before sending message. /* cache the WOWL information */ @@ -2496,7 +2497,7 @@ eHalStatus pmcExitWowl (tHalHandle hHal, tpSirSmeWowlExitParams wowlExitParams) WLAN_VOS_DIAG_EVENT_REPORT(&wowRequest, EVENT_WLAN_POWERSAVE_WOW); #endif - smsLog(pMac, LOG2, "PMC: entering pmcExitWowl"); + pmcLog(pMac, LOG2, "PMC: entering pmcExitWowl"); /* Clear any buffered command for entering WOWL */ pMac->pmc.wowlModeRequired = FALSE; @@ -2548,7 +2549,8 @@ eHalStatus pmcSetHostOffload (tHalHandle hHal, tpSirHostOffloadReq pRequest, return eHAL_STATUS_FAILED_ALLOC; } - vos_mem_copy(pRequest->bssId, pSession->connectedProfile.bssid, sizeof(tSirMacAddr)); + vos_mem_copy(pRequest->bssId, pSession->connectedProfile.bssid, + sizeof(tSirMacAddr)); vos_mem_copy(pRequestBuf, pRequest, sizeof(tSirHostOffloadReq)); @@ -2643,7 +2645,7 @@ eHalStatus pmcSetNSOffload (tHalHandle hHal, tpSirHostOffloadReq pRequest, if( NULL == pSession ) { - smsLog(pMac, LOGE, FL("Session not found ")); + pmcLog(pMac, LOGE, FL("Session not found ")); return eHAL_STATUS_FAILURE; } @@ -2683,12 +2685,7 @@ void pmcClosePowerSaveCheckList(tpAniSirGlobal pMac) while ( (pEntry = csrLLRemoveHead(&pMac->pmc.powerSaveCheckList, FALSE)) ) { pPowerSaveCheckEntry = GET_BASE_ADDR(pEntry, tPowerSaveCheckEntry, link); - if (palFreeMemory(pMac->hHdd, pPowerSaveCheckEntry) != eHAL_STATUS_SUCCESS) - { - smsLog(pMac, LOGE, FL("Cannot free memory ")); - PMC_ABORT; - break; - } + vos_mem_free(pPowerSaveCheckEntry); } csrLLUnlock(&pMac->pmc.powerSaveCheckList); csrLLClose(&pMac->pmc.powerSaveCheckList); @@ -2704,12 +2701,7 @@ void pmcCloseRequestFullPowerList(tpAniSirGlobal pMac) while ( (pEntry = csrLLRemoveHead(&pMac->pmc.requestFullPowerList, FALSE)) ) { pRequestFullPowerEntry = GET_BASE_ADDR(pEntry, tRequestFullPowerEntry, link); - if (palFreeMemory(pMac->hHdd, pRequestFullPowerEntry) != eHAL_STATUS_SUCCESS) - { - smsLog(pMac, LOGE, FL("Cannot free memory ")); - PMC_ABORT; - break; - } + vos_mem_free(pRequestFullPowerEntry); } csrLLUnlock(&pMac->pmc.requestFullPowerList); csrLLClose(&pMac->pmc.requestFullPowerList); @@ -2725,12 +2717,7 @@ void pmcCloseRequestBmpsList(tpAniSirGlobal pMac) while ( (pEntry = csrLLRemoveHead(&pMac->pmc.requestBmpsList, FALSE)) ) { pRequestBmpsEntry = GET_BASE_ADDR(pEntry, tRequestBmpsEntry, link); - if (palFreeMemory(pMac->hHdd, pRequestBmpsEntry) != eHAL_STATUS_SUCCESS) - { - smsLog(pMac, LOGE, FL("Cannot free memory ")); - PMC_ABORT; - break; - } + vos_mem_free(pRequestBmpsEntry); } csrLLUnlock(&pMac->pmc.requestBmpsList); csrLLClose(&pMac->pmc.requestBmpsList); @@ -2746,12 +2733,7 @@ void pmcCloseRequestStartUapsdList(tpAniSirGlobal pMac) while ( (pEntry = csrLLRemoveHead(&pMac->pmc.requestStartUapsdList, FALSE)) ) { pStartUapsdEntry = GET_BASE_ADDR(pEntry, tStartUapsdEntry, link); - if (palFreeMemory(pMac->hHdd, pStartUapsdEntry) != eHAL_STATUS_SUCCESS) - { - smsLog(pMac, LOGE, FL("Cannot free memory ")); - PMC_ABORT; - break; - } + vos_mem_free(pStartUapsdEntry); } csrLLUnlock(&pMac->pmc.requestStartUapsdList); csrLLClose(&pMac->pmc.requestStartUapsdList); @@ -2767,12 +2749,7 @@ void pmcCloseDeviceStateUpdateList(tpAniSirGlobal pMac) while ( (pEntry = csrLLRemoveHead(&pMac->pmc.deviceStateUpdateIndList, FALSE)) ) { pDeviceStateUpdateIndEntry = GET_BASE_ADDR(pEntry, tDeviceStateUpdateIndEntry, link); - if (palFreeMemory(pMac->hHdd, pDeviceStateUpdateIndEntry) != eHAL_STATUS_SUCCESS) - { - smsLog(pMac, LOGE, FL("Cannot free memory ")); - PMC_ABORT; - break; - } + vos_mem_free(pDeviceStateUpdateIndEntry); } csrLLUnlock(&pMac->pmc.deviceStateUpdateIndList); csrLLClose(&pMac->pmc.deviceStateUpdateIndList); @@ -2788,12 +2765,7 @@ void pmcCloseDeferredMsgList(tpAniSirGlobal pMac) while ( (pEntry = csrLLRemoveHead(&pMac->pmc.deferredMsgList, FALSE)) ) { pDeferredMsg = GET_BASE_ADDR(pEntry, tPmcDeferredMsg, link); - if (palFreeMemory(pMac->hHdd, pDeferredMsg) != eHAL_STATUS_SUCCESS) - { - smsLog(pMac, LOGE, FL("Cannot free memory ")); - PMC_ABORT; - break; - } + vos_mem_free(pDeferredMsg); } csrLLUnlock(&pMac->pmc.deferredMsgList); csrLLClose(&pMac->pmc.deferredMsgList); @@ -2807,7 +2779,7 @@ pmcPopulateMacHeader( tpAniSirGlobal pMac, tANI_U8* pBD, tANI_U8 type, tANI_U8 subType, - tSirMacAddr peerAddr , + tSirMacAddr peerAddr, tSirMacAddr selfMacAddr) { tSirRetStatus statusCode = eSIR_SUCCESS; @@ -2822,18 +2794,12 @@ pmcPopulateMacHeader( tpAniSirGlobal pMac, pMacHdr->fc.subType = subType; // Prepare Address 1 - palCopyMemory( pMac->hHdd, - (tANI_U8 *) pMacHdr->da, - (tANI_U8 *) peerAddr, - sizeof( tSirMacAddr )); + vos_mem_copy((tANI_U8 *) pMacHdr->da, (tANI_U8 *) peerAddr, sizeof( tSirMacAddr )); sirCopyMacAddr(pMacHdr->sa,selfMacAddr); // Prepare Address 3 - palCopyMemory( pMac->hHdd, - (tANI_U8 *) pMacHdr->bssId, - (tANI_U8 *) peerAddr, - sizeof( tSirMacAddr )); + vos_mem_copy((tANI_U8 *) pMacHdr->bssId, (tANI_U8 *) peerAddr, sizeof( tSirMacAddr )); return statusCode; } /*** pmcPopulateMacHeader() ***/ @@ -2857,7 +2823,7 @@ pmcPrepareProbeReqTemplate(tpAniSirGlobal pMac, // The scheme here is to fill out a 'tDot11fProbeRequest' structure // and then hand it off to 'dot11fPackProbeRequest' (for // serialization). We start by zero-initializing the structure: - palZeroMemory( pMac->hHdd, ( tANI_U8* )&pr, sizeof( pr ) ); + vos_mem_set(( tANI_U8* )&pr, sizeof( pr ), 0); PopulateDot11fSuppRates( pMac, nChannelNum, &pr.SuppRates,NULL); @@ -2901,11 +2867,11 @@ pmcPrepareProbeReqTemplate(tpAniSirGlobal pMac, nBytes = nPayload + sizeof( tSirMacMgmtHdr ); /* Prepare outgoing frame*/ - palZeroMemory( pMac->hHdd, pFrame, nBytes ); + vos_mem_set(pFrame, nBytes, 0); // Next, we fill out the buffer descriptor: nSirStatus = pmcPopulateMacHeader( pMac, pFrame, SIR_MAC_MGMT_FRAME, - SIR_MAC_MGMT_PROBE_REQ, bssId ,selfMacAddr); + SIR_MAC_MGMT_PROBE_REQ, bssId,selfMacAddr); if ( eSIR_SUCCESS != nSirStatus ) { @@ -2952,8 +2918,8 @@ eHalStatus pmcSetPreferredNetworkList tANI_U8 ucDot11Mode; VOS_TRACE( VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, - "%s: SSID = 0x%08lx%08lx%08lx%08lx%08lx%08lx%08lx%08lx, " - "0x%08lx%08lx%08lx%08lx%08lx%08lx%08lx%08lx", __func__, + "%s: SSID = 0x%08x%08x%08x%08x%08x%08x%08x%08x, " + "0x%08x%08x%08x%08x%08x%08x%08x%08x", __func__, *((v_U32_t *) &pRequest->aNetworks[0].ssId.ssId[0]), *((v_U32_t *) &pRequest->aNetworks[0].ssId.ssId[4]), *((v_U32_t *) &pRequest->aNetworks[0].ssId.ssId[8]), @@ -2986,15 +2952,60 @@ eHalStatus pmcSetPreferredNetworkList csrFindBestPhyMode( pMac, pMac->roam.configParam.phyMode )); /*Prepare a probe request for 2.4GHz band and one for 5GHz band*/ - pmcPrepareProbeReqTemplate(pMac,SIR_PNO_24G_DEFAULT_CH, ucDot11Mode, pSession->selfMacAddr, - pRequestBuf->p24GProbeTemplate, - &pRequestBuf->us24GProbeTemplateLen, - pSession); + if (eSIR_SUCCESS == pmcPrepareProbeReqTemplate(pMac, SIR_PNO_24G_DEFAULT_CH, + ucDot11Mode, pSession->selfMacAddr, + pRequestBuf->p24GProbeTemplate, + &pRequestBuf->us24GProbeTemplateLen, pSession)) + { + /* Append IE passed by supplicant(if any) to probe request */ + if ((0 < pRequest->us24GProbeTemplateLen) && + ((pRequestBuf->us24GProbeTemplateLen + + pRequest->us24GProbeTemplateLen) < SIR_PNO_MAX_PB_REQ_SIZE )) + { + vos_mem_copy((tANI_U8 *)&pRequestBuf->p24GProbeTemplate + + pRequestBuf->us24GProbeTemplateLen, + (tANI_U8 *)&pRequest->p24GProbeTemplate, + pRequest->us24GProbeTemplateLen); + pRequestBuf->us24GProbeTemplateLen += + pRequest->us24GProbeTemplateLen; + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, + "%s: pRequest->us24GProbeTemplateLen = %d", __func__, + pRequest->us24GProbeTemplateLen); + } + else + { + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, + "%s: Extra ie discarded on 2.4G, IE length = %d", __func__, + pRequest->us24GProbeTemplateLen); + } + } - pmcPrepareProbeReqTemplate(pMac,SIR_PNO_5G_DEFAULT_CH, ucDot11Mode, pSession->selfMacAddr, + if (eSIR_SUCCESS == pmcPrepareProbeReqTemplate(pMac, SIR_PNO_5G_DEFAULT_CH, + ucDot11Mode, pSession->selfMacAddr, pRequestBuf->p5GProbeTemplate, - &pRequestBuf->us5GProbeTemplateLen, - pSession); + &pRequestBuf->us5GProbeTemplateLen, pSession)) + { + /* Append IE passed by supplicant(if any) to probe request */ + if ((0 < pRequest->us5GProbeTemplateLen ) && + ((pRequestBuf->us5GProbeTemplateLen + + pRequest->us5GProbeTemplateLen) < SIR_PNO_MAX_PB_REQ_SIZE )) + { + vos_mem_copy((tANI_U8 *)&pRequestBuf->p5GProbeTemplate + + pRequestBuf->us5GProbeTemplateLen, + (tANI_U8 *)&pRequest->p5GProbeTemplate, + pRequest->us5GProbeTemplateLen); + pRequestBuf->us5GProbeTemplateLen += pRequest->us5GProbeTemplateLen; + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, + "%s: pRequestBuf->us5GProbeTemplateLen = %d", __func__, + pRequest->us5GProbeTemplateLen); + } + else + { + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, + "%s: Extra IE discarded on 5G, IE length = %d", __func__, + pRequest->us5GProbeTemplateLen); + } + } if (pMac->pnoOffload) { @@ -3173,7 +3184,8 @@ eHalStatus pmcGetFilterMatchCount return eHAL_STATUS_FAILED_ALLOC; } - vos_mem_copy(pRequestBuf->bssId, pSession->connectedProfile.bssid, sizeof(tSirMacAddr)); + vos_mem_copy(pRequestBuf->bssId, pSession->connectedProfile.bssid, + sizeof(tSirMacAddr)); msg.type = WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ; msg.reserved = 0; @@ -3223,7 +3235,7 @@ eHalStatus pmcSetGTKOffload (tHalHandle hHal, tpSirGtkOffloadParams pGtkOffload, tpAniSirGlobal pMac = PMAC_STRUCT(hHal); tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, sessionId ); - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "%s: KeyReplayCounter: %d", + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "%s: KeyReplayCounter: %lld", __func__, pGtkOffload->ullKeyReplayCounter); if(NULL == pSession ) @@ -3241,7 +3253,8 @@ eHalStatus pmcSetGTKOffload (tHalHandle hHal, tpSirGtkOffloadParams pGtkOffload, return eHAL_STATUS_FAILED_ALLOC; } - vos_mem_copy(pGtkOffload->bssId, pSession->connectedProfile.bssid, sizeof(tSirMacAddr)); + vos_mem_copy(pGtkOffload->bssId, pSession->connectedProfile.bssid, + sizeof(tSirMacAddr)); vos_mem_copy(pRequestBuf, pGtkOffload, sizeof(tSirGtkOffloadParams)); @@ -3276,7 +3289,7 @@ eHalStatus pmcGetGTKOffload(tHalHandle hHal, GTKOffloadGetInfoCallback callbackR tpAniSirGlobal pMac = PMAC_STRUCT(hHal); tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, sessionId ); - VOS_TRACE( VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, "%s: filterId = %d", + VOS_TRACE( VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, "%s: Entered", __func__); if(NULL == pSession ) @@ -3343,6 +3356,154 @@ void pmcResetImpsFailStatus (tHalHandle hHal) pMac->pmc.ImpsReqTimerFailed = VOS_FALSE; } +#ifdef FEATURE_WLAN_BATCH_SCAN +/* ----------------------------------------------------------------------------- + \fn pmcSetBatchScanReq + \brief setting batch scan request in FW + \param hHal - The handle returned by macOpen. + \param sessionId - session ID + \param callbackRoutine - Pointer to set batch scan request callback routine + \param callbackContext - Pointer to set batch scan request callback context + \return eHalStatus + eHAL_STATUS_FAILURE Cannot set batch scan request + eHAL_STATUS_SUCCESS Request accepted. + -----------------------------------------------------------------------------*/ + +eHalStatus pmcSetBatchScanReq(tHalHandle hHal, tSirSetBatchScanReq *pRequest, + tANI_U8 sessionId, hddSetBatchScanReqCallback callbackRoutine, + void *callbackContext) +{ + tpSirSetBatchScanReq pRequestBuf; + vos_msg_t msg; + tpAniSirGlobal pMac = PMAC_STRUCT(hHal); + + pRequestBuf = vos_mem_malloc(sizeof(tSirSetBatchScanReq)); + if (NULL == pRequestBuf) + { + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, + "%s: Not able to allocate memory for SET BATCH SCAN req", __func__); + return eHAL_STATUS_FAILED_ALLOC; + } + + /* Cache HDD callback information*/ + pMac->pmc.setBatchScanReqCallback = callbackRoutine; + pMac->pmc.setBatchScanReqCallbackContext = callbackContext; + + pRequestBuf->scanFrequency = pRequest->scanFrequency; + pRequestBuf->numberOfScansToBatch = pRequest->numberOfScansToBatch; + pRequestBuf->bestNetwork = pRequest->bestNetwork; + pRequestBuf->rfBand = pRequest->rfBand; + pRequestBuf->rtt = pRequest->rtt; + + msg.type = WDA_SET_BATCH_SCAN_REQ; + msg.reserved = 0; + msg.bodyptr = pRequestBuf; + if (!VOS_IS_STATUS_SUCCESS(vos_mq_post_message(VOS_MODULE_ID_WDA, &msg))) + { + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, + "%s: Not able to post WDA_SET_BATCH_SCAN_REQ message to WDA", + __func__); + vos_mem_free(pRequestBuf); + return eHAL_STATUS_FAILURE; + } + + return eHAL_STATUS_SUCCESS; +} + +/* ----------------------------------------------------------------------------- + \fn pmcTriggerBatchScanResultInd + \brief API to trigger batch scan results indications from FW + \param hHal - The handle returned by macOpen. + \param sessionId - session ID + \param callbackRoutine - Pointer to get batch scan request callback routine + \param callbackContext - Pointer to get batch scan request callback context + \return eHalStatus + eHAL_STATUS_FAILURE Cannot set batch scan request + eHAL_STATUS_SUCCESS Request accepted. + -----------------------------------------------------------------------------*/ + +eHalStatus pmcTriggerBatchScanResultInd +( + tHalHandle hHal, tSirTriggerBatchScanResultInd *pRequest, tANI_U8 sessionId, + hddTriggerBatchScanResultIndCallback callbackRoutine, void *callbackContext +) +{ + tpSirTriggerBatchScanResultInd pRequestBuf; + vos_msg_t msg; + tpAniSirGlobal pMac = PMAC_STRUCT(hHal); + + pRequestBuf = vos_mem_malloc(sizeof(tSirTriggerBatchScanResultInd)); + if (NULL == pRequestBuf) + { + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, + "%s: Not able to allocate memory for WDA_TRIGGER_BATCH_SCAN_RESULT_IND", + __func__); + return eHAL_STATUS_FAILED_ALLOC; + } + + /*HDD callback to be called after getting batch scan result ind from FW*/ + pMac->pmc.batchScanResultCallback = callbackRoutine; + pMac->pmc.batchScanResultCallbackContext = callbackContext; + + pRequestBuf->param = pRequest->param; + + msg.type = WDA_TRIGGER_BATCH_SCAN_RESULT_IND; + msg.reserved = 0; + msg.bodyptr = pRequestBuf; + if (!VOS_IS_STATUS_SUCCESS(vos_mq_post_message(VOS_MODULE_ID_WDA, &msg))) + { + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, + "%s: Not able to post WDA_TRIGGER_BATCH_SCAN_RESULT_IND message" + " to WDA", __func__); + vos_mem_free(pRequestBuf); + return eHAL_STATUS_FAILURE; + } + + return eHAL_STATUS_SUCCESS; +} + +/* ----------------------------------------------------------------------------- + \fn pmcStopBatchScanInd + \brief Stoping batch scan request in FW + \param hHal - The handle returned by macOpen. + \param callbackRoutine - Pointer to stop batch scan request callback routine + \return eHalStatus + eHAL_STATUS_FAILURE Cannot set batch scan request + eHAL_STATUS_SUCCESS Request accepted. + -----------------------------------------------------------------------------*/ + +eHalStatus pmcStopBatchScanInd(tHalHandle hHal, tSirStopBatchScanInd *pRequest, + tANI_U8 sessionId) +{ + tSirStopBatchScanInd *pRequestBuf; + vos_msg_t msg; + + pRequestBuf = vos_mem_malloc(sizeof(tSirStopBatchScanInd)); + if (NULL == pRequestBuf) + { + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, + "%s: Not able to allocate memory for STOP BATCH SCAN IND", __func__); + return eHAL_STATUS_FAILED_ALLOC; + } + + pRequestBuf->param = pRequest->param; + + msg.type = WDA_STOP_BATCH_SCAN_IND; + msg.reserved = 0; + msg.bodyptr = pRequestBuf; + if (!VOS_IS_STATUS_SUCCESS(vos_mq_post_message(VOS_MODULE_ID_WDA, &msg))) + { + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, + "%s: Not able to post WDA_TOP_BATCH_SCAN_IND message to WDA", __func__); + vos_mem_free(pRequestBuf); + return eHAL_STATUS_FAILURE; + } + + return eHAL_STATUS_SUCCESS; +} + +#endif + eHalStatus pmcOffloadCleanup(tHalHandle hHal, tANI_U32 sessionId) { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); @@ -3482,8 +3643,8 @@ eHalStatus pmcOffloadRegisterPowerSaveCheck(tHalHandle hHal, tANI_U32 sessionId, smsLog(pMac, LOG2, FL("Enter pmcOffloadRegPowerSaveCheck")); /* Allocate entry for power save check routine list. */ - if(palAllocateMemory(pMac->hHdd, (void **)&pEntry, - sizeof(tPmcOffloadPsCheckEntry)) != eHAL_STATUS_SUCCESS) + pEntry = vos_mem_malloc(sizeof(tPmcOffloadPsCheckEntry)); + if (!pEntry) { smsLog(pMac, LOGE, FL("Cannot allocate memory for power save check routine list")); @@ -3525,13 +3686,7 @@ eHalStatus pmcOffloadDeregisterPowerSaveCheck(tHalHandle hHal, { if(csrLLRemoveEntry(&pmc->pwrsaveCheckList, pEntry, FALSE)) { - if(palFreeMemory(pMac->hHdd, pPowerSaveCheckEntry) - != eHAL_STATUS_SUCCESS) - { - smsLog(pMac, LOGE, - FL("Cannot free powersave check routine list entry")); - return eHAL_STATUS_FAILURE; - } + vos_mem_free(pPowerSaveCheckEntry); } else { @@ -3559,8 +3714,8 @@ eHalStatus pmcOffloadRegisterDeviceStateUpdateInd(tHalHandle hHal, smsLog(pMac, LOG2, FL("Enter pmcOffloadRegisterDeviceStateUpdateInd")); /* Allocate entry for device power state update indication. */ - if(palAllocateMemory(pMac->hHdd, (void **)&pEntry, - sizeof(tPmcOffloadDevStateUpdIndEntry)) != eHAL_STATUS_SUCCESS) + pEntry = vos_mem_malloc(sizeof(tPmcOffloadDevStateUpdIndEntry)); + if (!pEntry) { smsLog(pMac, LOGE, FL("Cannot allocate memory for device power state update ind")); @@ -3607,13 +3762,7 @@ eHalStatus pmcOffloadDeregisterDeviceStateUpdateInd(tHalHandle hHal, FL("Cannot remove devicestate update ind entry list")); return eHAL_STATUS_FAILURE; } - if(eHAL_STATUS_SUCCESS != - palFreeMemory(pMac->hHdd, pDeviceStateUpdateIndEntry)) - { - smsLog(pMac, LOGE, - FL("Cannot free device state update ind list entry")); - return eHAL_STATUS_FAILURE; - } + vos_mem_free(pDeviceStateUpdateIndEntry); return eHAL_STATUS_SUCCESS; } pEntry = csrLLNext(&pmc->deviceStateUpdateIndList, pEntry, FALSE); @@ -3734,8 +3883,8 @@ full_pwr_req_pending: tpPmcOffloadReqFullPowerEntry pEntry; /* Allocate entry for Full Power Cb list. */ - if(palAllocateMemory(pMac->hHdd, (void **)&pEntry, - sizeof(tPmcOffloadReqFullPowerEntry)) != eHAL_STATUS_SUCCESS) + pEntry = vos_mem_malloc(sizeof(tPmcOffloadReqFullPowerEntry)); + if (!pEntry) { smsLog(pMac, LOGE, FL("Cannot allocate memory for Full Power routine list")); @@ -3793,8 +3942,8 @@ eHalStatus pmcOffloadStartUapsd(tHalHandle hHal, tANI_U32 sessionId, tpPmcOffloadStartUapsdEntry pEntry; tpPsOffloadPerSessionInfo pmc = &pMac->pmcOffloadInfo.pmc[sessionId]; /* Allocate entry for Start Uapsd Cb list. */ - if(palAllocateMemory(pMac->hHdd, (void **)&pEntry, - sizeof(tPmcOffloadStartUapsdEntry)) != eHAL_STATUS_SUCCESS) + pEntry = vos_mem_malloc(sizeof(tPmcOffloadStartUapsdEntry)); + if (!pEntry) { smsLog(pMac, LOGE, FL("Cannot allocate memory for start uapsd list")); @@ -4056,7 +4205,7 @@ tANI_BOOLEAN pmcOffloadProcessCommand(tpAniSirGlobal pMac, tSmeCmd *pCommand) sizeof(tSirSmeWowlExitParams)); if ( !HAL_STATUS_SUCCESS( status ) ) { - smsLog(pMac, LOGE, "PMC: failure to send message eWNI_PMC_EXIT_WOWL_REQ"); + smsLog(pMac, LOGP, "PMC: failure to send message eWNI_PMC_EXIT_WOWL_REQ"); } break; diff --git a/CORE/SME/src/pmc/pmcLogDump.c b/CORE/SME/src/pmc/pmcLogDump.c index a15524db1af2..f0bf73f39b40 100644 --- a/CORE/SME/src/pmc/pmcLogDump.c +++ b/CORE/SME/src/pmc/pmcLogDump.c @@ -51,21 +51,21 @@ void dump_pmc_callbackRoutine (void *callbackContext, eHalStatus status) { tpAniSirGlobal pMac = (tpAniSirGlobal)callbackContext; - smsLog(pMac, LOGW, "*********Received callback from PMC with status = %d\n*********",status); + pmcLog(pMac, LOGW, "*********Received callback from PMC with status = %d\n*********",status); } #ifdef WLAN_WAKEUP_EVENTS void dump_pmc_callbackRoutine2 (void *callbackContext, tpSirWakeReasonInd pWakeReasonInd) { tpAniSirGlobal pMac = (tpAniSirGlobal)callbackContext; - smsLog(pMac, LOGW, "*********Received callback from PMC with reason = %d\n*********",pWakeReasonInd->ulReason); + pmcLog(pMac, LOGW, "*********Received callback from PMC with reason = %d\n*********",pWakeReasonInd->ulReason); } #endif // WLAN_WAKEUP_EVENTS void dump_pmc_deviceUpdateRoutine (void *callbackContext, tPmcState pmcState) { tpAniSirGlobal pMac = (tpAniSirGlobal)callbackContext; - smsLog(pMac, LOGW, "*********Received msg from PMC: Device is in %s state\n*********", pmcGetPmcStateStr(pmcState)); + pmcLog(pMac, LOGW, "*********Received msg from PMC: Device is in %s state\n*********", pmcGetPmcStateStr(pmcState)); } static char * @@ -89,7 +89,7 @@ dump_pmc_state( tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3 p += log_sprintf( pMac,p, " PMC: UapsdSessionRequired = %d\n", pMac->pmc.uapsdSessionRequired); p += log_sprintf( pMac,p, " PMC: wowlModeRequired = %d\n\n", pMac->pmc.wowlModeRequired); - smsLog(pMac, LOGW, "\n%s", ptr); + pmcLog(pMac, LOGW, "\n%s", ptr); return p; } @@ -222,11 +222,12 @@ dump_pmc_enter_wowl( tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2, tANI_U32 (void) arg4; - palZeroMemory(pMac->hHdd, &wowlEnterParams, sizeof(tSirSmeWowlEnterParams)); + vos_mem_set(&wowlEnterParams, sizeof(tSirSmeWowlEnterParams), 0); if (arg1 == 0 && arg2 == 0) { - smsLog(pMac, LOGE, "Requesting WoWL but neither magic pkt and ptrn byte matching is being enabled\n"); + pmcLog(pMac, LOGE, + "Requesting WoWL but neither magic pkt and ptrn byte matching is being enabled\n"); return p; } if(arg1 == 1) @@ -237,7 +238,8 @@ dump_pmc_enter_wowl( tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2, tANI_U32 status = wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8 *)wowlEnterParams.magicPtrn, &length); if (eSIR_SUCCESS != status) { - smsLog(pMac, LOGE, "Reading of WNI_CFG_STA_ID from CFG failed. Using hardcoded STA MAC Addr\n"); + pmcLog(pMac, LOGE, + "Reading of WNI_CFG_STA_ID from CFG failed. Using hardcoded STA MAC Addr\n"); wowlEnterParams.magicPtrn[0] = 0x00; wowlEnterParams.magicPtrn[1] = 0x0a; wowlEnterParams.magicPtrn[2] = 0xf5; @@ -253,7 +255,7 @@ dump_pmc_enter_wowl( tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2, tANI_U32 if(arg3 == CSR_ROAM_SESSION_MAX ) { - smsLog(pMac, LOGE, "Enter valid sessionId\n"); + pmcLog(pMac, LOGE, "Enter valid sessionId\n"); return p; } pMac->pmc.bmpsEnabled = TRUE; @@ -286,7 +288,7 @@ dump_pmc_remove_ptrn( tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2, tANI_U3 tANI_U8 sessionId = 0; (void) arg3; (void) arg4; - palZeroMemory(pMac->hHdd, &delPattern, sizeof(tSirWowlDelBcastPtrn)); + vos_mem_set(&delPattern, sizeof(tSirWowlDelBcastPtrn), 0); if((arg1 <= 7) || (arg2 == CSR_ROAM_SESSION_MAX)) { @@ -294,7 +296,7 @@ dump_pmc_remove_ptrn( tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2, tANI_U3 } else { - smsLog(pMac, LOGE, "dump_pmc_remove_ptrn: Invalid pattern Id %d\n",arg1); + pmcLog(pMac, LOGE, "dump_pmc_remove_ptrn: Invalid pattern Id %d\n",arg1); return p; } @@ -337,15 +339,15 @@ dump_pmc_test_Wowl( tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2, tANI_U32 tANI_U8 sessionId = 0; smeRsp.statusCode = eSIR_SME_SUCCESS; - palZeroMemory(pMac->hHdd, &addPattern, sizeof(tSirWowlAddBcastPtrn)); - palZeroMemory(pMac->hHdd, &delPattern, sizeof(tSirWowlDelBcastPtrn)); - palZeroMemory(pMac->hHdd, &wowlEnterParams, sizeof(tSirSmeWowlEnterParams)); + vos_mem_set(&addPattern, sizeof(tSirWowlAddBcastPtrn), 0); + vos_mem_set(&delPattern, sizeof(tSirWowlDelBcastPtrn), 0); + vos_mem_set(&wowlEnterParams, sizeof(tSirSmeWowlEnterParams), 0); (void) arg2; (void) arg3; (void) arg4; if(arg1 == CSR_ROAM_SESSION_MAX) { - smsLog(pMac, LOGE, "dump_pmc_test_Wowl: Invalid sessionId\n"); + pmcLog(pMac, LOGE, "dump_pmc_test_Wowl: Invalid sessionId\n"); return p; } diff --git a/CORE/SME/src/rrm/sme_rrm.c b/CORE/SME/src/rrm/sme_rrm.c index b770cb654287..afb2797e9dec 100644 --- a/CORE/SME/src/rrm/sme_rrm.c +++ b/CORE/SME/src/rrm/sme_rrm.c @@ -58,7 +58,7 @@ #include "rrmGlobal.h" -#ifdef FEATURE_WLAN_CCX +#if defined(FEATURE_WLAN_CCX) && !defined(FEATURE_WLAN_CCX_UPLOAD) #include "csrCcx.h" #endif @@ -131,7 +131,7 @@ void rrmIndicateNeighborReportResult(tpAniSirGlobal pMac, VOS_STATUS vosStatus) /* Stop the timer if it is already running. The timer should be running only in the SUCCESS case. */ if (VOS_TIMER_STATE_RUNNING == vos_timer_getCurrentState(&pMac->rrm.rrmSmeContext.neighborReqControlInfo.neighborRspWaitTimer)) { - VOS_ASSERT(VOS_STATUS_SUCCESS == vosStatus); + smsLog( pMac, LOG1, FL("No entry in neighbor report cache")); vos_timer_stop(&pMac->rrm.rrmSmeContext.neighborReqControlInfo.neighborRspWaitTimer); } callback = pMac->rrm.rrmSmeContext.neighborReqControlInfo.neighborRspCallbackInfo.neighborRspCallback; @@ -145,7 +145,7 @@ void rrmIndicateNeighborReportResult(tpAniSirGlobal pMac, VOS_STATUS vosStatus) /* Call the callback with the status received from caller */ if (callback) callback(callbackContext, vosStatus); -#ifdef FEATURE_WLAN_CCX +#if defined(FEATURE_WLAN_CCX) && !defined(FEATURE_WLAN_CCX_UPLOAD) // We came here with IAPP AP List // Make sure we inform CSR of the neighbor list // for CCX Associations. First clear the cache. @@ -215,7 +215,6 @@ static eHalStatus sme_RrmSendBeaconReportXmitInd( tpAniSirGlobal pMac, pBeaconRep->messageType = eWNI_SME_BEACON_REPORT_RESP_XMIT_IND; pBeaconRep->length = length; pBeaconRep->uDialogToken = pSmeRrmContext->token; - pBeaconRep->duration = pSmeRrmContext->duration; pBeaconRep->regClass = pSmeRrmContext->regClass; vos_mem_copy( pBeaconRep->bssId, pSmeRrmContext->sessionBssId, sizeof(tSirMacAddr) ); @@ -248,7 +247,7 @@ static eHalStatus sme_RrmSendBeaconReportXmitInd( tpAniSirGlobal pMac, pBeaconRep->numBssDesc++; - if (++msgCounter >= SIR_BCN_REPORT_MAX_BSS_DESC_PER_ACTION_FRAME) + if (++msgCounter >= SIR_BCN_REPORT_MAX_BSS_DESC) break; pCurResult = pResultArr[bssCounter + msgCounter]; @@ -287,6 +286,156 @@ static eHalStatus sme_RrmSendBeaconReportXmitInd( tpAniSirGlobal pMac, return status; } +#if defined(FEATURE_WLAN_CCX_UPLOAD) +/**--------------------------------------------------------------------------- + + \brief sme_CcxSendBeaconReqScanResults() + + This function sends up the scan results received as a part of + beacon request scanning. + This function is called after receiving the scan results per channel + Due to the limitation on the size of the IWEVCUSTOM buffer, we send 3 BSSIDs of + beacon report information in one custom event; + + \param - pMac - Pointer to the Hal Handle. + - sessionId - Session id + - channel - scan results belongs to this channel + - pResultArr - scan result. + - measurementDone - flag to indicate that the measurement is done. + - bss_count - number of bss found + \return - 0 for success, non zero for failure + + --------------------------------------------------------------------------*/ +static eHalStatus sme_CcxSendBeaconReqScanResults(tpAniSirGlobal pMac, + tANI_U32 sessionId, + tANI_U8 channel, + tCsrScanResultInfo **pResultArr, + tANI_U8 measurementDone, + tANI_U8 bss_count) +{ + eHalStatus status = eHAL_STATUS_FAILURE; + tpSirBssDescription pBssDesc = NULL; + tANI_U32 ie_len = 0; + tANI_U32 outIeLen = 0; + tANI_U8 bssCounter = 0; + tCsrScanResultInfo *pCurResult = NULL; + tANI_U8 msgCounter = 0; + tpRrmSMEContext pSmeRrmContext = &pMac->rrm.rrmSmeContext; + tCsrRoamInfo roamInfo; + tSirCcxBcnReportRsp bcnReport; + tpSirCcxBcnReportRsp pBcnReport = &bcnReport; + tpCsrCcxBeaconReqParams pCurMeasReqIe = NULL; + tANI_U8 i = 0; + + if (NULL == pSmeRrmContext) + { + smsLog( pMac, LOGE, "pSmeRrmContext is NULL"); + return eHAL_STATUS_FAILURE; + } + + if (NULL == pResultArr && !measurementDone) + { + smsLog( pMac, LOGE, "Beacon report xmit Ind to HDD Failed"); + return eHAL_STATUS_FAILURE; + } + + if (pResultArr) + pCurResult=pResultArr[bssCounter]; + + vos_mem_zero(&bcnReport, sizeof(tSirCcxBcnReportRsp)); + do + { + pCurMeasReqIe = NULL; + for (i = 0; i < pSmeRrmContext->ccxBcnReqInfo.numBcnReqIe; i++) + { + if(pSmeRrmContext->ccxBcnReqInfo.bcnReq[i].channel == channel) + { + pCurMeasReqIe = &pSmeRrmContext->ccxBcnReqInfo.bcnReq[i]; + break; + } + } + pBcnReport->measurementToken = pCurMeasReqIe->measurementToken; + smsLog( pMac, LOG1, "Channel(%d) MeasToken(%d)", channel, pBcnReport->measurementToken); + + msgCounter=0; + while (pCurResult) + { + pBssDesc = &pCurResult->BssDescriptor; + if (NULL != pBssDesc) + { + ie_len = GET_IE_LEN_IN_BSS( pBssDesc->length ); + pBcnReport->bcnRepBssInfo[msgCounter].bcnReportFields.ChanNum = pBssDesc->channelId; + pBcnReport->bcnRepBssInfo[msgCounter].bcnReportFields.Spare = 0; + pBcnReport->bcnRepBssInfo[msgCounter].bcnReportFields.MeasDuration = pCurMeasReqIe->measurementDuration; + pBcnReport->bcnRepBssInfo[msgCounter].bcnReportFields.PhyType = pBssDesc->nwType; + pBcnReport->bcnRepBssInfo[msgCounter].bcnReportFields.RecvSigPower = pBssDesc->rssi; + pBcnReport->bcnRepBssInfo[msgCounter].bcnReportFields.ParentTsf = pBssDesc->parentTSF; + pBcnReport->bcnRepBssInfo[msgCounter].bcnReportFields.TargetTsf[0] = pBssDesc->timeStamp[0]; + pBcnReport->bcnRepBssInfo[msgCounter].bcnReportFields.TargetTsf[1] = pBssDesc->timeStamp[1]; + pBcnReport->bcnRepBssInfo[msgCounter].bcnReportFields.BcnInterval = pBssDesc->beaconInterval; + pBcnReport->bcnRepBssInfo[msgCounter].bcnReportFields.CapabilityInfo = pBssDesc->capabilityInfo; + vos_mem_copy(pBcnReport->bcnRepBssInfo[msgCounter].bcnReportFields.Bssid, + pBssDesc->bssId, sizeof(tSirMacAddr)); + + sirFillBeaconMandatoryIEforCcxBcnReport(pMac, (tANI_U8 *)pBssDesc->ieFields, ie_len, + &(pBcnReport->bcnRepBssInfo[msgCounter].pBuf), &outIeLen); + pBcnReport->bcnRepBssInfo[msgCounter].ieLen = outIeLen; + + smsLog( pMac, LOG1,"Bssid(%02X:%02X:%02X:%02X:%02X:%02X) Channel=%d Rssi=%d", + pBssDesc->bssId[0], pBssDesc->bssId[1], pBssDesc->bssId[2], + pBssDesc->bssId[3], pBssDesc->bssId[4], pBssDesc->bssId[5], + pBssDesc->channelId, (-1) * pBssDesc->rssi); + + pBcnReport->numBss++; + + if (++msgCounter >= SIR_BCN_REPORT_MAX_BSS_DESC) + break; + + pCurResult = pResultArr[msgCounter]; + } + else + { + pCurResult = NULL; + break; + } + } + + bssCounter += msgCounter; + if (!pResultArr || !pCurResult || (bssCounter >= SIR_BCN_REPORT_MAX_BSS_DESC)) + { + pCurResult = NULL; + smsLog(pMac, LOGE, + "Reached to the max/last BSS in pCurResult list"); + } + else + { + pCurResult = pResultArr[bssCounter]; + smsLog(pMac, LOGE, + "Move to the next BSS set in pCurResult list"); + } + + pBcnReport->flag = (measurementDone << 1)|((pCurResult)?true:false); + + smsLog(pMac, LOG1, "SME Sending BcnRep to HDD numBss(%d)" + " msgCounter(%d) bssCounter(%d)", + pBcnReport->numBss, msgCounter, bssCounter, pBcnReport->flag); + + roamInfo.pCcxBcnReportRsp = pBcnReport; + status = csrRoamCallCallback(pMac, sessionId, &roamInfo, + 0, eCSR_ROAM_CCX_BCN_REPORT_IND, 0); + + /* Free the memory allocated to IE */ + for (i = 0; i < msgCounter; i++) + { + if (pBcnReport->bcnRepBssInfo[i].pBuf) + vos_mem_free(pBcnReport->bcnRepBssInfo[i].pBuf); + } + } while (pCurResult); + return status; +} + +#endif /* FEATURE_WLAN_CCX_UPLOAD */ + /**--------------------------------------------------------------------------- \brief sme_RrmSendScanRequest() - @@ -309,7 +458,7 @@ static eHalStatus sme_RrmSendScanResult( tpAniSirGlobal pMac, tCsrScanResultFilter filter; tScanResultHandle pResult; tCsrScanResultInfo *pScanResult, *pNextResult; - tCsrScanResultInfo *pScanResultsArr[SIR_BCN_REPORT_MAX_BSS_PER_CHANNEL]; + tCsrScanResultInfo *pScanResultsArr[SIR_BCN_REPORT_MAX_BSS_DESC]; eHalStatus status; tANI_U8 counter=0; tpRrmSMEContext pSmeRrmContext = &pMac->rrm.rrmSmeContext; @@ -320,7 +469,7 @@ static eHalStatus sme_RrmSendScanResult( tpAniSirGlobal pMac, #endif vos_mem_zero( &filter, sizeof(filter) ); - vos_mem_zero( pScanResultsArr, sizeof(pNextResult)*SIR_BCN_REPORT_MAX_BSS_PER_CHANNEL ); + vos_mem_zero( pScanResultsArr, sizeof(pNextResult)*SIR_BCN_REPORT_MAX_BSS_DESC ); filter.BSSIDs.numOfBSSIDs = 1; filter.BSSIDs.bssid = &pSmeRrmContext->bssId; @@ -378,14 +527,36 @@ static eHalStatus sme_RrmSendScanResult( tpAniSirGlobal pMac, // send a xmit indication with moreToFollow set to MEASURMENT_DONE // so that PE can clean any context allocated. if( measurementDone ) - status = sme_RrmSendBeaconReportXmitInd( pMac, NULL, measurementDone, 0 ); + { +#if defined(FEATURE_WLAN_CCX_UPLOAD) + status = sme_CcxSendBeaconReqScanResults(pMac, + sessionId, + chanList[0], + NULL, + measurementDone, + 0); +#else + status = sme_RrmSendBeaconReportXmitInd( pMac, NULL, measurementDone, 0); +#endif /*FEATURE_WLAN_CCX_UPLOAD*/ + } return status; } pScanResult = sme_ScanResultGetFirst(pMac, pResult); if( NULL == pScanResult && measurementDone ) + { +#if defined(FEATURE_WLAN_CCX_UPLOAD) + status = sme_CcxSendBeaconReqScanResults(pMac, + sessionId, + chanList[0], + NULL, + measurementDone, + 0); +#else status = sme_RrmSendBeaconReportXmitInd( pMac, NULL, measurementDone, 0 ); +#endif /*FEATURE_WLAN_CCX_UPLOAD*/ + } counter=0; while (pScanResult) @@ -393,18 +564,26 @@ static eHalStatus sme_RrmSendScanResult( tpAniSirGlobal pMac, pNextResult = sme_ScanResultGetNext(pMac, pResult); pScanResultsArr[counter++] = pScanResult; pScanResult = pNextResult; //sme_ScanResultGetNext(hHal, pResult); - if (counter >= SIR_BCN_REPORT_MAX_BSS_PER_CHANNEL) + if (counter >= SIR_BCN_REPORT_MAX_BSS_DESC) break; } if (counter) { + smsLog(pMac, LOG1, " Number of BSS Desc with RRM Scan %d ", counter); +#if defined(FEATURE_WLAN_CCX_UPLOAD) + status = sme_CcxSendBeaconReqScanResults(pMac, + sessionId, + chanList[0], + pScanResultsArr, + measurementDone, + counter); +#else status = sme_RrmSendBeaconReportXmitInd( pMac, pScanResultsArr, measurementDone, counter); - smsLog(pMac, LOG1, " Number of BSS Desc with RRM Scan %d ", - counter); +#endif /*FEATURE_WLAN_CCX_UPLOAD*/ } sme_ScanResultPurge(pMac, pResult); @@ -476,7 +655,7 @@ static eHalStatus sme_RrmScanRequestCallback(tHalHandle halHandle, void *pContex \brief sme_RrmIssueScanReq() - This is called to send a scan request as part of beacon report request . - \param + \param pMac - pMac global pointer \return eHAL_STATUS_SUCCESS - Validation is successful. @@ -491,67 +670,101 @@ eHalStatus sme_RrmIssueScanReq( tpAniSirGlobal pMac ) eHalStatus status = eHAL_STATUS_SUCCESS; tpRrmSMEContext pSmeRrmContext = &pMac->rrm.rrmSmeContext; tANI_U32 sessionId; + tSirScanType scanType; + + if ((pSmeRrmContext->currentIndex) >= pSmeRrmContext->channelList.numOfChannels) + return status; + scanType = pSmeRrmContext->measMode[pSmeRrmContext->currentIndex]; + if ((eSIR_ACTIVE_SCAN == scanType) || (eSIR_PASSIVE_SCAN == scanType)) + { #if defined WLAN_VOWIFI_DEBUG smsLog( pMac, LOGE, "Issue scan request " ); #endif - vos_mem_zero( &scanRequest, sizeof(scanRequest)); - - /* set scanType, active or passive */ + vos_mem_zero( &scanRequest, sizeof(scanRequest)); - scanRequest.scanType = pSmeRrmContext->measMode; + /* set scanType, active or passive */ + scanRequest.bcnRptReqScan = TRUE; + scanRequest.scanType = scanType; - vos_mem_copy(scanRequest.bssid, - pSmeRrmContext->bssId, sizeof(scanRequest.bssid) ); + vos_mem_copy(scanRequest.bssid, + pSmeRrmContext->bssId, sizeof(scanRequest.bssid) ); - if( pSmeRrmContext->ssId.length ) - { - scanRequest.SSIDs.numOfSSIDs = 1; - scanRequest.SSIDs.SSIDList =( tCsrSSIDInfo *)vos_mem_malloc(sizeof(tCsrSSIDInfo)); - if( scanRequest.SSIDs.SSIDList == NULL ) - { - smsLog( pMac, LOGP, FL("vos_mem_malloc failed:") ); - return eHAL_STATUS_FAILURE; - } + if (pSmeRrmContext->ssId.length) + { + scanRequest.SSIDs.numOfSSIDs = 1; + scanRequest.SSIDs.SSIDList =( tCsrSSIDInfo *)vos_mem_malloc(sizeof(tCsrSSIDInfo)); + if (NULL == scanRequest.SSIDs.SSIDList) + { + smsLog( pMac, LOGP, FL("vos_mem_malloc failed:") ); + return eHAL_STATUS_FAILURE; + } #if defined WLAN_VOWIFI_DEBUG - smsLog( pMac, LOGE, FL("Allocated memory for pSSIDList")); + smsLog( pMac, LOGE, FL("Allocated memory for pSSIDList")); #endif - vos_mem_zero( scanRequest.SSIDs.SSIDList, sizeof(tCsrSSIDInfo) ); - scanRequest.SSIDs.SSIDList->SSID.length = pSmeRrmContext->ssId.length; - vos_mem_copy(scanRequest.SSIDs.SSIDList->SSID.ssId, pSmeRrmContext->ssId.ssId, pSmeRrmContext->ssId.length); - } + vos_mem_zero( scanRequest.SSIDs.SSIDList, sizeof(tCsrSSIDInfo) ); + scanRequest.SSIDs.SSIDList->SSID.length = pSmeRrmContext->ssId.length; + vos_mem_copy(scanRequest.SSIDs.SSIDList->SSID.ssId, pSmeRrmContext->ssId.ssId, pSmeRrmContext->ssId.length); + } + + /* set min and max channel time */ + scanRequest.minChnTime = 0; //pSmeRrmContext->duration; Dont use min timeout. + scanRequest.maxChnTime = pSmeRrmContext->duration[pSmeRrmContext->currentIndex]; + smsLog( pMac, LOG1, "Scan Type(%d) Max Dwell Time(%d)", scanRequest.scanType, + scanRequest.maxChnTime ); - /* set min and max channel time */ - scanRequest.minChnTime = 0; //pSmeRrmContext->duration; Dont use min timeout. - scanRequest.maxChnTime = pSmeRrmContext->duration; #if defined WLAN_VOWIFI_DEBUG - smsLog( pMac, LOGE, "For Duration %d ", pSmeRrmContext->duration ); + smsLog( pMac, LOGE, "For Duration %d ", scanRequest.maxChnTime ); #endif - /* set BSSType to default type */ - scanRequest.BSSType = eCSR_BSS_TYPE_ANY; + /* set BSSType to default type */ + scanRequest.BSSType = eCSR_BSS_TYPE_ANY; - /*Scan all the channels */ - scanRequest.ChannelInfo.numOfChannels = 1; + /*Scan all the channels */ + scanRequest.ChannelInfo.numOfChannels = 1; - scanRequest.ChannelInfo.ChannelList = &pSmeRrmContext->channelList.ChannelList[pSmeRrmContext->currentIndex]; + scanRequest.ChannelInfo.ChannelList = &pSmeRrmContext->channelList.ChannelList[pSmeRrmContext->currentIndex]; #if defined WLAN_VOWIFI_DEBUG - smsLog( pMac, LOGE, "On channel %d ", pSmeRrmContext->channelList.ChannelList[pSmeRrmContext->currentIndex] ); + smsLog( pMac, LOGE, "On channel %d ", pSmeRrmContext->channelList.ChannelList[pSmeRrmContext->currentIndex] ); #endif - /* set requestType to full scan */ - scanRequest.requestType = eCSR_SCAN_REQUEST_FULL_SCAN; + /* set requestType to full scan */ + scanRequest.requestType = eCSR_SCAN_REQUEST_FULL_SCAN; - csrRoamGetSessionIdFromBSSID( pMac, (tCsrBssid*)pSmeRrmContext->sessionBssId, &sessionId ); - status = sme_ScanRequest( pMac, (tANI_U8)sessionId, &scanRequest, &scanId, &sme_RrmScanRequestCallback, NULL ); + csrRoamGetSessionIdFromBSSID( pMac, (tCsrBssid*)pSmeRrmContext->sessionBssId, &sessionId ); + status = sme_ScanRequest( pMac, (tANI_U8)sessionId, &scanRequest, &scanId, &sme_RrmScanRequestCallback, NULL ); - if ( pSmeRrmContext->ssId.length ) - { - vos_mem_free(scanRequest.SSIDs.SSIDList); + if ( pSmeRrmContext->ssId.length ) + { + vos_mem_free(scanRequest.SSIDs.SSIDList); #if defined WLAN_VOWIFI_DEBUG - smsLog( pMac, LOGE, FL("Free memory for SSIDList")); + smsLog( pMac, LOGE, FL("Free memory for SSIDList")); #endif + } + } + else if (eSIR_BEACON_TABLE == scanType) /* beacon table */ + { + if ((pSmeRrmContext->currentIndex + 1) < pSmeRrmContext->channelList.numOfChannels) + { + sme_RrmSendScanResult( pMac, 1, &pSmeRrmContext->channelList.ChannelList[pSmeRrmContext->currentIndex], false ); + pSmeRrmContext->currentIndex++; //Advance the current index. + sme_RrmIssueScanReq(pMac); + } + else + { + //Done with the measurement. Clean up all context and send a message to PE with measurement done flag set. + sme_RrmSendScanResult( pMac, 1, &pSmeRrmContext->channelList.ChannelList[pSmeRrmContext->currentIndex], true ); + vos_mem_free( pSmeRrmContext->channelList.ChannelList ); + } + } + else + { + smsLog( pMac, LOGE, "Unknown beacon report request mode(%d)", scanType); + /* Indicate measurement completion to PE */ + /* If this is not done, pCurrentReq pointer will not be freed and + PE will not handle subsequent Beacon requests */ + sme_RrmSendBeaconReportXmitInd(pMac, NULL, true, 0); } return status; @@ -574,7 +787,7 @@ void sme_RrmProcessBeaconReportReqInd(tpAniSirGlobal pMac, void *pMsgBuf) { tpSirBeaconReportReqInd pBeaconReq = (tpSirBeaconReportReqInd) pMsgBuf; tpRrmSMEContext pSmeRrmContext = &pMac->rrm.rrmSmeContext; - tANI_U32 len,i; + tANI_U32 len = 0, i = 0; #if defined WLAN_VOWIFI_DEBUG smsLog( pMac, LOGE, "Received Beacon report request ind Channel = %d", pBeaconReq->channelInfo.channelNum ); @@ -606,7 +819,7 @@ void sme_RrmProcessBeaconReportReqInd(tpAniSirGlobal pMac, void *pMsgBuf) len = 0; pSmeRrmContext->channelList.numOfChannels = 0; - //If valid channel is present. We firt Measure on the given channel. and + //If valid channel is present. We first Measure on the given channel. and //if there are additional channels present in APchannelreport, measure on these also. if ( pBeaconReq->channelInfo.channelNum != 255 ) len = 1; @@ -661,42 +874,12 @@ void sme_RrmProcessBeaconReportReqInd(tpAniSirGlobal pMac, void *pMsgBuf) pSmeRrmContext->token = pBeaconReq->uDialogToken; pSmeRrmContext->regClass = pBeaconReq->channelInfo.regulatoryClass; - - switch( pBeaconReq->fMeasurementtype ) - { - case 0: //Passive - case 1: //Active - pSmeRrmContext->measMode = pBeaconReq->fMeasurementtype? eSIR_ACTIVE_SCAN : eSIR_PASSIVE_SCAN ; - pSmeRrmContext->duration = pBeaconReq->measurementDuration; pSmeRrmContext->randnIntvl = VOS_MAX( pBeaconReq->randomizationInterval, pSmeRrmContext->rrmConfig.maxRandnInterval ); pSmeRrmContext->currentIndex = 0; -#if defined WLAN_VOWIFI_DEBUG - smsLog( pMac, LOGE, "Send beacon report after scan " ); -#endif - sme_RrmIssueScanReq( pMac ); - break; - case 2: //Table - //Get the current scan results for the given channel and send it. -#if defined WLAN_VOWIFI_DEBUG - smsLog( pMac, LOGE, "Send beacon report from table " ); -#endif - sme_RrmSendScanResult( pMac, pSmeRrmContext->channelList.numOfChannels, pSmeRrmContext->channelList.ChannelList, true ); - vos_mem_free( pSmeRrmContext->channelList.ChannelList ); -#if defined WLAN_VOWIFI_DEBUG - smsLog( pMac, LOGE, FL("Free memory for ChannelList") ); -#endif - break; - default: -#if defined WLAN_VOWIFI_DEBUG - smsLog( pMac, LOGE, "Unknown beacon report request mode"); -#endif - /* Indicate measurement completion to PE */ - /* If this is not done, pCurrentReq pointer will not be freed and - PE will not handle subsequent Beacon requests */ - sme_RrmSendBeaconReportXmitInd(pMac, NULL, true, 0); - break; + vos_mem_copy((tANI_U8*)&pSmeRrmContext->measMode, (tANI_U8*)&pBeaconReq->fMeasurementtype, SIR_CCX_MAX_MEAS_IE_REQS); + vos_mem_copy((tANI_U8*)&pSmeRrmContext->duration, (tANI_U8*)&pBeaconReq->measurementDuration, SIR_CCX_MAX_MEAS_IE_REQS); - } + sme_RrmIssueScanReq( pMac ); return; } @@ -1336,7 +1519,7 @@ tRrmNeighborReportDesc* smeRrmGetNextBssEntryFromNeighborCache( tpAniSirGlobal p return pTempBssEntry; } -#ifdef FEATURE_WLAN_CCX +#if defined(FEATURE_WLAN_CCX) && !defined(FEATURE_WLAN_CCX_UPLOAD) void csrCcxSendAdjacentApRepMsg(tpAniSirGlobal pMac, tCsrRoamSession *pSession) { tpSirAdjacentApRepInd pAdjRep; diff --git a/CORE/SME/src/sme_common/sme_Api.c b/CORE/SME/src/sme_common/sme_Api.c index 4061eed537dc..dd11e9879e98 100644 --- a/CORE/SME/src/sme_common/sme_Api.c +++ b/CORE/SME/src/sme_common/sme_Api.c @@ -66,8 +66,10 @@ #include "csrInternal.h" #include "wlan_qct_wda.h" #include "halMsgApi.h" +#include "vos_trace.h" +#include "sme_Trace.h" +#include "limTrace.h" #include "vos_utils.h" - #include "sapApi.h" @@ -75,8 +77,12 @@ extern tSirRetStatus uMacPostCtrlMsg(void* pSirGlobal, tSirMbMsg* pMb); #include - +#define LOG_SIZE 256 #define READ_MEMORY_DUMP_CMD 9 +#define TL_INIT_STATE 0 + + +#define CSR_ACTIVE_LIST_CMD_TIMEOUT_VALUE 1000*30 //30s // TxMB Functions extern eHalStatus pmcPrepareCommand( tpAniSirGlobal pMac, tANI_U32 sessionId, @@ -98,6 +104,8 @@ eCsrPhyMode sme_GetPhyMode(tHalHandle hHal); eHalStatus sme_HandleChangeCountryCode(tpAniSirGlobal pMac, void *pMsgBuf); +eHalStatus sme_HandleGenericChangeCountryCode(tpAniSirGlobal pMac, void *pMsgBuf); + eHalStatus sme_HandlePreChannelSwitchInd(tHalHandle hHal); eHalStatus sme_HandlePostChannelSwitchInd(tHalHandle hHal); @@ -149,7 +157,9 @@ static eHalStatus initSmeCmdList(tpAniSirGlobal pMac) { eHalStatus status; tSmeCmd *pCmd; - tANI_U32 c; + tANI_U32 cmd_idx; + VOS_STATUS vosStatus; + vos_timer_t* cmdTimeoutTimer = NULL; pMac->sme.totalSmeCmd = SME_TOTAL_COMMAND; if (!HAL_STATUS_SUCCESS(status = csrLLOpen(pMac->hHdd, @@ -172,21 +182,47 @@ static eHalStatus initSmeCmdList(tpAniSirGlobal pMac) &pMac->sme.smeCmdFreeList))) goto end; - status = palAllocateMemory(pMac->hHdd, - (void **)&pCmd, - sizeof(tSmeCmd) * pMac->sme.totalSmeCmd); - if (!HAL_STATUS_SUCCESS(status)) - goto end; - - palZeroMemory(pMac->hHdd, pCmd, - sizeof(tSmeCmd) * pMac->sme.totalSmeCmd); - pMac->sme.pSmeCmdBufAddr = pCmd; - for (c = 0; c < pMac->sme.totalSmeCmd; c++) + pCmd = vos_mem_malloc(sizeof(tSmeCmd) * pMac->sme.totalSmeCmd); + if ( NULL == pCmd ) + status = eHAL_STATUS_FAILURE; + else { - csrLLInsertTail(&pMac->sme.smeCmdFreeList, - &pCmd[c].Link, LL_ACCESS_LOCK); + status = eHAL_STATUS_SUCCESS; + + vos_mem_set(pCmd, sizeof(tSmeCmd) * pMac->sme.totalSmeCmd, 0); + pMac->sme.pSmeCmdBufAddr = pCmd; + + for (cmd_idx = 0; cmd_idx < pMac->sme.totalSmeCmd; cmd_idx++) + { + csrLLInsertTail(&pMac->sme.smeCmdFreeList, + &pCmd[cmd_idx].Link, LL_ACCESS_LOCK); + } } + /* This timer is only to debug the active list command timeout */ + + cmdTimeoutTimer = (vos_timer_t*)vos_mem_malloc(sizeof(vos_timer_t)); + if (cmdTimeoutTimer) + { + pMac->sme.smeCmdActiveList.cmdTimeoutTimer = cmdTimeoutTimer; + vosStatus = + vos_timer_init( pMac->sme.smeCmdActiveList.cmdTimeoutTimer, + VOS_TIMER_TYPE_SW, + activeListCmdTimeoutHandle, + (void*) pMac); + + if (!VOS_IS_STATUS_SUCCESS(vosStatus)) + { + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, + "Init Timer fail for active list command process time out"); + vos_mem_free(pMac->sme.smeCmdActiveList.cmdTimeoutTimer); + } + else + { + pMac->sme.smeCmdActiveList.cmdTimeoutDuration = + CSR_ACTIVE_LIST_CMD_TIMEOUT_VALUE; + } + } end: if (!HAL_STATUS_SUCCESS(status)) smsLog(pMac, LOGE, "failed to initialize sme command list:%d\n", @@ -279,6 +315,11 @@ static eHalStatus freeSmeCmdList(tpAniSirGlobal pMac) csrLLClose(&pMac->sme.smeScanCmdActiveList); csrLLClose(&pMac->sme.smeCmdFreeList); + /*destroy active list command time out timer */ + vos_timer_destroy(pMac->sme.smeCmdActiveList.cmdTimeoutTimer); + vos_mem_free(pMac->sme.smeCmdActiveList.cmdTimeoutTimer); + pMac->sme.smeCmdActiveList.cmdTimeoutTimer = NULL; + status = vos_lock_acquire(&pMac->sme.lkSmeGlobalLock); if(status != eHAL_STATUS_SUCCESS) { @@ -289,7 +330,7 @@ static eHalStatus freeSmeCmdList(tpAniSirGlobal pMac) if(NULL != pMac->sme.pSmeCmdBufAddr) { - status = palFreeMemory(pMac->hHdd, pMac->sme.pSmeCmdBufAddr); + vos_mem_free(pMac->sme.pSmeCmdBufAddr); pMac->sme.pSmeCmdBufAddr = NULL; } @@ -306,7 +347,6 @@ done: void dumpCsrCommandInfo(tpAniSirGlobal pMac, tSmeCmd *pCmd) { -#ifdef WLAN_DEBUG switch( pCmd->command ) { case eSmeCommandScan: @@ -332,9 +372,10 @@ void dumpCsrCommandInfo(tpAniSirGlobal pMac, tSmeCmd *pCmd) break; default: + smsLog( pMac, LOGE, " default: Unhandled command %d", + pCmd->command); break; } -#endif //#ifdef WLAN_DEBUG } tSmeCmd *smeGetCommandBuffer( tpAniSirGlobal pMac ) @@ -446,11 +487,11 @@ static eSmeCommandType smeIsFullPowerNeeded( tpAniSirGlobal pMac, tSmeCmd *pComm ( eSmeCommandDelTs == pCommand->command ) ); if( fFullPowerNeeded ) break; #ifdef FEATURE_OEM_DATA_SUPPORT - fFullPowerNeeded = (pmcState == IMPS && + fFullPowerNeeded = (pmcState == IMPS && eSmeCommandOemDataReq == pCommand->command); if(fFullPowerNeeded) break; #endif - fFullPowerNeeded = (pmcState == IMPS && + fFullPowerNeeded = (pmcState == IMPS && eSmeCommandRemainOnChannel == pCommand->command); if(fFullPowerNeeded) break; } while(0); @@ -558,12 +599,12 @@ static void smeAbortCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand, tANI_BOOLEA case eSmeCommandRemainOnChannel: if (NULL != pCommand->u.remainChlCmd.callback) { - remainOnChanCallback callback = + remainOnChanCallback callback = pCommand->u.remainChlCmd.callback; /* process the msg */ if( callback ) { - callback(pMac, pCommand->u.remainChlCmd.callbackCtx, + callback(pMac, pCommand->u.remainChlCmd.callbackCtx, eCSR_SCAN_ABORT ); } } @@ -829,6 +870,8 @@ sme_process_cmd: // .... and process the command. + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_COMMAND, pCommand->sessionId, pCommand->command)); switch ( pCommand->command ) { @@ -842,7 +885,7 @@ sme_process_cmd: status = csrRoamProcessCommand( pMac, pCommand ); if(!HAL_STATUS_SUCCESS(status)) { - if( csrLLRemoveEntry( &pMac->sme.smeCmdActiveList, + if( csrLLRemoveEntry( &pMac->sme.smeCmdActiveList, &pCommand->Link, LL_ACCESS_LOCK ) ) { csrReleaseCommandRoam( pMac, pCommand ); @@ -860,7 +903,7 @@ sme_process_cmd: status = csrRoamProcessSetKeyCommand( pMac, pCommand ); if(!HAL_STATUS_SUCCESS(status)) { - if( csrLLRemoveEntry( &pMac->sme.smeCmdActiveList, + if( csrLLRemoveEntry( &pMac->sme.smeCmdActiveList, &pCommand->Link, LL_ACCESS_LOCK ) ) { csrReleaseCommandSetKey( pMac, pCommand ); @@ -873,7 +916,7 @@ sme_process_cmd: status = csrRoamProcessRemoveKeyCommand( pMac, pCommand ); if(!HAL_STATUS_SUCCESS(status)) { - if( csrLLRemoveEntry( &pMac->sme.smeCmdActiveList, + if( csrLLRemoveEntry( &pMac->sme.smeCmdActiveList, &pCommand->Link, LL_ACCESS_LOCK ) ) { csrReleaseCommandRemoveKey( pMac, pCommand ); @@ -885,7 +928,7 @@ sme_process_cmd: csrLLUnlock( &pMac->sme.smeCmdActiveList ); csrProcessAddStaSessionCommand( pMac, pCommand ); break; - case eSmeCommandDelStaSession: + case eSmeCommandDelStaSession: csrLLUnlock( &pMac->sme.smeCmdActiveList ); csrProcessDelStaSessionCommand( pMac, pCommand ); break; @@ -1038,9 +1081,10 @@ sme_process_cmd: #endif break; #ifdef FEATURE_WLAN_TDLS - case eSmeCommandTdlsSendMgmt: + case eSmeCommandTdlsSendMgmt: case eSmeCommandTdlsAddPeer: case eSmeCommandTdlsDelPeer: + case eSmeCommandTdlsLinkEstablish: #ifdef FEATURE_WLAN_TDLS_INTERNAL case eSmeCommandTdlsDiscovery: case eSmeCommandTdlsLinkSetup: @@ -1161,6 +1205,7 @@ eHalStatus sme_Open(tHalHandle hHal) do { pMac->sme.state = SME_STATE_STOP; + pMac->sme.currDeviceMode = VOS_STA_MODE; if( !VOS_IS_STATUS_SUCCESS( vos_lock_init( &pMac->sme.lkSmeGlobalLock ) ) ) { smsLog( pMac, LOGE, "sme_Open failed init lock" ); @@ -1262,23 +1307,10 @@ eHalStatus sme_Open(tHalHandle hHal) sme_FTOpen(pMac); #endif sme_p2pOpen(pMac); + smeTraceInit(pMac); }while (0); - if (pMac->fScanOffload) - { - /* If scan offload is enabled then lim has allow the sending of - scan request to firmware even in powersave mode. The firmware has - to take care of exiting from power save mode */ - status = ccmCfgSetInt(hHal, WNI_CFG_SCAN_IN_POWERSAVE, - eANI_BOOLEAN_TRUE, NULL, eANI_BOOLEAN_FALSE); - - if (eHAL_STATUS_SUCCESS != status) - { - VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, - "Could not pass on WNI_CFG_SCAN_IN_POWERSAVE to CCM"); - } - } return status; } @@ -1314,6 +1346,8 @@ eHalStatus sme_set11dinfo(tHalHandle hHal, tpSmeConfigParams pSmeConfigParams) eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_MSG_SET_11DINFO, NO_SESSION, 0)); if (NULL == pSmeConfigParams ) { smsLog( pMac, LOGE, "Empty config param structure for SME, nothing to update"); @@ -1348,10 +1382,12 @@ eHalStatus sme_getSoftApDomain(tHalHandle hHal, v_REGDOMAIN_t *domainIdSoftAp) eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_MSG_GET_SOFTAP_DOMAIN, NO_SESSION, 0)); if (NULL == domainIdSoftAp ) { smsLog( pMac, LOGE, "Uninitialized domain Id"); return status; - } + } *domainIdSoftAp = pMac->scan.domainIdCurrent; status = eHAL_STATUS_SUCCESS; @@ -1365,6 +1401,8 @@ eHalStatus sme_setRegInfo(tHalHandle hHal, tANI_U8 *apCntryCode) eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_MSG_SET_REGINFO, NO_SESSION, 0)); if (NULL == apCntryCode ) { smsLog( pMac, LOGE, "Empty Country Code, nothing to update"); return status; @@ -1382,14 +1420,14 @@ eHalStatus sme_setRegInfo(tHalHandle hHal, tANI_U8 *apCntryCode) /*-------------------------------------------------------------------------- \brief sme_UpdateChannelConfig() - Update channel configuration in RIVA. - - It is used at driver start up to inform RIVA of the default channel - configuration. + + It is used at driver start up to inform RIVA of the default channel + configuration. This is a synchronous call \param hHal - The handle returned by macOpen. - + \return eHAL_STATUS_SUCCESS - SME update the channel config successfully. Other status means SME is failed to update the channel config. @@ -1400,7 +1438,9 @@ eHalStatus sme_UpdateChannelConfig(tHalHandle hHal) { tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - pmcUpdateScanParams( pMac, &(pMac->roam.configParam), + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_MSG_UPDATE_CHANNEL_CONFIG, NO_SESSION, 0)); + pmcUpdateScanParams( pMac, &(pMac->roam.configParam), &pMac->scan.base20MHzChannels, FALSE); return eHAL_STATUS_SUCCESS; } @@ -1432,6 +1472,8 @@ eHalStatus sme_UpdateConfig(tHalHandle hHal, tpSmeConfigParams pSmeConfigParams) eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_MSG_UPDATE_CONFIG, NO_SESSION, 0)); if (NULL == pSmeConfigParams ) { smsLog( pMac, LOGE, "Empty config param structure for SME, nothing to update"); @@ -1471,15 +1513,29 @@ eHalStatus sme_UpdateConfig(tHalHandle hHal, tpSmeConfigParams pSmeConfigParams) /* update the directed scan offload setting */ pMac->fScanOffload = pSmeConfigParams->fScanOffload; + if (pMac->fScanOffload) + { + /* If scan offload is enabled then lim has allow the sending of + scan request to firmware even in powersave mode. The firmware has + to take care of exiting from power save mode */ + status = ccmCfgSetInt(hHal, WNI_CFG_SCAN_IN_POWERSAVE, + eANI_BOOLEAN_TRUE, NULL, eANI_BOOLEAN_FALSE); + + if (eHAL_STATUS_SUCCESS != status) + { + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, + "Could not pass on WNI_CFG_SCAN_IN_POWERSAVE to CCM"); + } + } + pMac->isCoalesingInIBSSAllowed = + pSmeConfigParams->csrConfig.isCoalesingInIBSSAllowed; + /* update the p2p listen offload setting */ pMac->fP2pListenOffload = pSmeConfigParams->fP2pListenOffload; /* update p2p offload status */ pMac->pnoOffload = pSmeConfigParams->pnoOffload; - pMac->isCoalesingInIBSSAllowed = - pSmeConfigParams->csrConfig.isCoalesingInIBSSAllowed; - return status; } @@ -1514,6 +1570,8 @@ void sme_ProcessGetGtkInfoRsp( tHalHandle hHal, ready to suspend indication. \param hHal - Handle returned by macOpen. + pReadyToSuspend - Parameter received along with ready to suspend + indication from WMA. \return None @@ -1521,7 +1579,7 @@ void sme_ProcessGetGtkInfoRsp( tHalHandle hHal, --------------------------------------------------------------------------*/ void sme_ProcessReadyToSuspend( tHalHandle hHal, - tpSirReadyToSuspendInd pReadyToSuspend) + tpSirReadyToSuspendInd pReadyToSuspend) { tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); @@ -1611,6 +1669,8 @@ eHalStatus sme_HDDReadyInd(tHalHandle hHal) tPmcSwitchState swWlanSwitchState; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_MSG_HDDREADYIND, NO_SESSION, 0)); do { @@ -1843,6 +1903,129 @@ eHalStatus sme_UnprotectedMgmtFrmInd( tHalHandle hHal, } #endif +#if defined(FEATURE_WLAN_CCX) && defined(FEATURE_WLAN_CCX_UPLOAD) +/*------------------------------------------------------------------ + * + * Handle the tsm ie indication from LIM and forward it to HDD. + * + *------------------------------------------------------------------*/ +eHalStatus sme_TsmIeInd(tHalHandle hHal, tSirSmeTsmIEInd *pSmeTsmIeInd) +{ + tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + eHalStatus status = eHAL_STATUS_SUCCESS; + tCsrRoamInfo pRoamInfo = {0}; + tANI_U32 SessionId = pSmeTsmIeInd->sessionId; + pRoamInfo.tsmIe.tsid= pSmeTsmIeInd->tsmIe.tsid; + pRoamInfo.tsmIe.state= pSmeTsmIeInd->tsmIe.state; + pRoamInfo.tsmIe.msmt_interval= pSmeTsmIeInd->tsmIe.msmt_interval; + /* forward the tsm ie information to HDD */ + csrRoamCallCallback(pMac, + SessionId, + &pRoamInfo, + 0, + eCSR_ROAM_TSM_IE_IND, + 0); + return status; +} +/* --------------------------------------------------------------------------- + \fn sme_SetCCKMIe + \brief function to store the CCKM IE passed from supplicant and use + it while packing reassociation request + \param hHal - HAL handle for device + \param pCckmIe - pointer to CCKM IE data + \param pCckmIeLen - length of the CCKM IE + \- return Success or failure + -------------------------------------------------------------------------*/ +eHalStatus sme_SetCCKMIe(tHalHandle hHal, tANI_U8 sessionId, + tANI_U8 *pCckmIe, tANI_U8 cckmIeLen) +{ + tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + eHalStatus status = eHAL_STATUS_SUCCESS; + status = sme_AcquireGlobalLock( &pMac->sme ); + if ( HAL_STATUS_SUCCESS( status ) ) + { + csrSetCCKMIe(pMac, sessionId, pCckmIe, cckmIeLen); + sme_ReleaseGlobalLock( &pMac->sme ); + } + return status; +} + +/* --------------------------------------------------------------------------- + \fn sme_SetCcxBeaconRequest + \brief function to set CCX beacon request parameters + \param hHal - HAL handle for device + \param sessionId - Session id + \param pCcxBcnReq - pointer to CCX beacon request + \- return Success or failure + -------------------------------------------------------------------------*/ +eHalStatus sme_SetCcxBeaconRequest(tHalHandle hHal, const tANI_U8 sessionId, + const tCsrCcxBeaconReq* pCcxBcnReq) +{ + eHalStatus status = eSIR_SUCCESS; + tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + tpSirBeaconReportReqInd pSmeBcnReportReq = NULL; + tCsrCcxBeaconReqParams *pBeaconReq = NULL; + tANI_U8 counter = 0; + tCsrRoamSession *pSession = CSR_GET_SESSION(pMac, sessionId); + tpRrmSMEContext pSmeRrmContext = &pMac->rrm.rrmSmeContext; + + /* Store the info in RRM context */ + vos_mem_copy(&pSmeRrmContext->ccxBcnReqInfo, pCcxBcnReq, sizeof(tCsrCcxBeaconReq)); + + //Prepare the request to send to SME. + pSmeBcnReportReq = vos_mem_malloc(sizeof( tSirBeaconReportReqInd )); + if(NULL == pSmeBcnReportReq) + { + smsLog(pMac, LOGP, "Memory Allocation Failure!!! CCX BcnReq Ind to SME"); + return eSIR_FAILURE; + } + + smsLog(pMac, LOGE, "Sending Beacon Report Req to SME"); + vos_mem_zero( pSmeBcnReportReq, sizeof( tSirBeaconReportReqInd )); + + pSmeBcnReportReq->messageType = eWNI_SME_BEACON_REPORT_REQ_IND; + pSmeBcnReportReq->length = sizeof( tSirBeaconReportReqInd ); + vos_mem_copy( pSmeBcnReportReq->bssId, pSession->connectedProfile.bssid, sizeof(tSirMacAddr) ); + pSmeBcnReportReq->channelInfo.channelNum = 255; + pSmeBcnReportReq->channelList.numChannels = pCcxBcnReq->numBcnReqIe; + + for (counter = 0; counter < pCcxBcnReq->numBcnReqIe; counter++) + { + pBeaconReq = (tCsrCcxBeaconReqParams *)&pCcxBcnReq->bcnReq[counter]; + pSmeBcnReportReq->fMeasurementtype[counter] = pBeaconReq->scanMode; + pSmeBcnReportReq->measurementDuration[counter] = SYS_TU_TO_MS(pBeaconReq->measurementDuration); + pSmeBcnReportReq->channelList.channelNumber[counter] = pBeaconReq->channel; + } + + sme_RrmProcessBeaconReportReqInd(pMac, pSmeBcnReportReq); + return status; +} + +#endif /* FEATURE_WLAN_CCX && FEATURE_WLAN_CCX_UPLOAD */ + +#ifdef FEATURE_CESIUM_PROPRIETARY +eHalStatus sme_IbssPeerInfoResponseHandleer( tHalHandle hHal, + tpSirIbssGetPeerInfoRspParams pIbssPeerInfoParams) +{ + tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + + if (NULL == pMac) + { + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_FATAL, + "%s: pMac is null", __func__); + return eHAL_STATUS_FAILURE; + } + if (pMac->sme.peerInfoParams.peerInfoCbk == NULL) + { + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, + "%s: HDD callback is null", __func__); + return eHAL_STATUS_FAILURE; + } + pMac->sme.peerInfoParams.peerInfoCbk(pMac->sme.peerInfoParams.pUserData, + &pIbssPeerInfoParams->ibssPeerInfoRspParams); + return eHAL_STATUS_SUCCESS; +} +#endif /* FEATURE_CESIUM_PROPRIETARY */ /*-------------------------------------------------------------------------- @@ -1899,7 +2082,7 @@ eHalStatus sme_ProcessMsg(tHalHandle hHal, vos_msg_t* pMsg) pmcOffloadMessageProcessor(hHal, pMsg->bodyptr); } status = eHAL_STATUS_SUCCESS; - vos_mem_free( pMsg->bodyptr ); + vos_mem_free(pMsg->bodyptr); } else { smsLog( pMac, LOGE, "Empty rsp message for PMC, nothing to process"); } @@ -1915,7 +2098,7 @@ eHalStatus sme_ProcessMsg(tHalHandle hHal, vos_msg_t* pMsg) { ccmCfgCnfMsgHandler(hHal, pMsg->bodyptr); status = eHAL_STATUS_SUCCESS; - vos_mem_free( pMsg->bodyptr ); + vos_mem_free(pMsg->bodyptr); } else { smsLog( pMac, LOGE, "Empty rsp message for CCM, nothing to process"); } @@ -1926,13 +2109,13 @@ eHalStatus sme_ProcessMsg(tHalHandle hHal, vos_msg_t* pMsg) case eWNI_SME_DELTS_IND: #ifdef WLAN_FEATURE_VOWIFI_11R case eWNI_SME_FT_AGGR_QOS_RSP: -#endif +#endif //QoS if (pMsg->bodyptr) { #ifndef WLAN_MDM_CODE_REDUCTION_OPT status = sme_QosMsgProcessor(pMac, pMsg->type, pMsg->bodyptr); - vos_mem_free( pMsg->bodyptr ); + vos_mem_free(pMsg->bodyptr); #endif } else { smsLog( pMac, LOGE, "Empty rsp message for QoS, nothing to process"); @@ -1947,7 +2130,7 @@ eHalStatus sme_ProcessMsg(tHalHandle hHal, vos_msg_t* pMsg) if ( pMsg->bodyptr ) { status = sme_RrmMsgProcessor( pMac, pMsg->type, pMsg->bodyptr ); - vos_mem_free( pMsg->bodyptr ); + vos_mem_free(pMsg->bodyptr); } else { @@ -2023,7 +2206,7 @@ eHalStatus sme_ProcessMsg(tHalHandle hHal, vos_msg_t* pMsg) vos_mem_free(pMsg->bodyptr); } else - { + { smsLog( pMac, LOGE, "Empty rsp message for meas (eWNI_SME_MGMT_FRM_IND), nothing to process"); } break; @@ -2048,7 +2231,7 @@ eHalStatus sme_ProcessMsg(tHalHandle hHal, vos_msg_t* pMsg) { smsLog(pMac, LOGE, "Empty rsp message for meas (eWNI_SME_COEX_IND), nothing to process"); } - break; + break; #ifdef FEATURE_WLAN_SCAN_PNO case eWNI_SME_PREF_NETWORK_FOUND_IND: @@ -2063,7 +2246,7 @@ eHalStatus sme_ProcessMsg(tHalHandle hHal, vos_msg_t* pMsg) } break; #endif // FEATURE_WLAN_SCAN_PNO - + case eWNI_SME_TX_PER_HIT_IND: if (pMac->sme.pTxPerHitCallback) { @@ -2072,14 +2255,26 @@ eHalStatus sme_ProcessMsg(tHalHandle hHal, vos_msg_t* pMsg) break; case eWNI_SME_CHANGE_COUNTRY_CODE: - if(pMsg->bodyptr) + if(pMsg->bodyptr) { status = sme_HandleChangeCountryCode((void *)pMac, pMsg->bodyptr); vos_mem_free(pMsg->bodyptr); } else { - smsLog(pMac, LOGE, "Empty rsp message for meas (eWNI_SME_COEX_IND), nothing to process"); + smsLog(pMac, LOGE, "Empty rsp message for message (eWNI_SME_CHANGE_COUNTRY_CODE), nothing to process"); + } + break; + + case eWNI_SME_GENERIC_CHANGE_COUNTRY_CODE: + if (pMsg->bodyptr) + { + status = sme_HandleGenericChangeCountryCode((void *)pMac, pMsg->bodyptr); + vos_mem_free(pMsg->bodyptr); + } + else + { + smsLog(pMac, LOGE, "Empty rsp message for message (eWNI_SME_GENERIC_CHANGE_COUNTRY_CODE), nothing to process"); } break; @@ -2102,7 +2297,7 @@ eHalStatus sme_ProcessMsg(tHalHandle hHal, vos_msg_t* pMsg) status = sme_HandlePreChannelSwitchInd(pMac); break; } - + case eWNI_SME_POST_SWITCH_CHL_IND: { status = sme_HandlePostChannelSwitchInd(pMac); @@ -2128,12 +2323,13 @@ eHalStatus sme_ProcessMsg(tHalHandle hHal, vos_msg_t* pMsg) * command rescived from PE, SME tdls msg processor shall be called * to process commands recieved from PE */ - case eWNI_SME_TDLS_SEND_MGMT_RSP: - case eWNI_SME_TDLS_ADD_STA_RSP: + case eWNI_SME_TDLS_SEND_MGMT_RSP: + case eWNI_SME_TDLS_ADD_STA_RSP: case eWNI_SME_TDLS_DEL_STA_RSP: case eWNI_SME_TDLS_DEL_STA_IND: case eWNI_SME_TDLS_DEL_ALL_PEER_IND: case eWNI_SME_MGMT_FRM_TX_COMPLETION_IND: + case eWNI_SME_TDLS_LINK_ESTABLISH_RSP: #ifdef FEATURE_WLAN_TDLS_INTERNAL case eWNI_SME_TDLS_DISCOVERY_START_RSP: case eWNI_SME_TDLS_DISCOVERY_START_IND: @@ -2148,7 +2344,7 @@ eHalStatus sme_ProcessMsg(tHalHandle hHal, vos_msg_t* pMsg) if (pMsg->bodyptr) { status = tdlsMsgProcessor(pMac, pMsg->type, pMsg->bodyptr); - vos_mem_free( pMsg->bodyptr ); + vos_mem_free(pMsg->bodyptr); } else { @@ -2172,6 +2368,27 @@ eHalStatus sme_ProcessMsg(tHalHandle hHal, vos_msg_t* pMsg) } break; #endif +#if defined(FEATURE_WLAN_CCX) && defined(FEATURE_WLAN_CCX_UPLOAD) + case eWNI_SME_TSM_IE_IND: + { + if (pMsg->bodyptr) + { + sme_TsmIeInd(pMac, pMsg->bodyptr); + vos_mem_free(pMsg->bodyptr); + } + else + { + smsLog(pMac, LOGE, + "Empty rsp message for (eWNI_SME_TSM_IE_IND), nothing to process"); + } + break; + } +#endif /* FEATURE_WLAN_CCX && FEATURE_WLAN_CCX_UPLOAD */ +#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD + case eWNI_SME_ROAM_SCAN_OFFLOAD_RSP: + status = csrRoamOffloadScanRspHdlr((void *)pMac, pMsg->bodyval); + break; +#endif // WLAN_FEATURE_ROAM_SCAN_OFFLOAD #ifdef WLAN_FEATURE_GTK_OFFLOAD case eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP: @@ -2186,6 +2403,36 @@ eHalStatus sme_ProcessMsg(tHalHandle hHal, vos_msg_t* pMsg) } break ; #endif + +#ifdef FEATURE_WLAN_LPHB + /* LPHB timeout indication arrived, send IND to client */ + case eWNI_SME_LPHB_IND: + if (pMac->sme.pLphbIndCb) + { + pMac->sme.pLphbIndCb(pMac->pAdapter, pMsg->bodyptr); + } + vos_mem_free(pMsg->bodyptr); + + break; +#endif /* FEATURE_WLAN_LPHB */ + +#ifdef FEATURE_CESIUM_PROPRIETARY + case eWNI_SME_IBSS_PEER_INFO_RSP: + if (pMsg->bodyptr) + { + sme_IbssPeerInfoResponseHandleer(pMac, pMsg->bodyptr); + vos_mem_free(pMsg->bodyptr); + } + else + { + smsLog(pMac, LOGE, + "Empty rsp message for (eWNI_SME_IBSS_PEER_INFO_RSP)," + " nothing to process"); + } + break ; + +#endif /* FEATURE_CESIUM_PROPRIETARY */ + case eWNI_SME_READY_TO_SUSPEND_IND: if (pMsg->bodyptr) { @@ -2207,7 +2454,7 @@ eHalStatus sme_ProcessMsg(tHalHandle hHal, vos_msg_t* pMsg) if (pMsg->bodyptr) { status = csrMsgProcessor(hHal, pMsg->bodyptr); - vos_mem_free( pMsg->bodyptr ); + vos_mem_free(pMsg->bodyptr); } else { @@ -2220,7 +2467,7 @@ eHalStatus sme_ProcessMsg(tHalHandle hHal, vos_msg_t* pMsg) pMsg->type); if (pMsg->bodyptr) { - vos_mem_free( pMsg->bodyptr ); + vos_mem_free(pMsg->bodyptr); } } }//switch @@ -2230,7 +2477,7 @@ eHalStatus sme_ProcessMsg(tHalHandle hHal, vos_msg_t* pMsg) smsLog( pMac, LOGW, "message type %d in stop state ignored", pMsg->type); if (pMsg->bodyptr) { - vos_mem_free( pMsg->bodyptr ); + vos_mem_free(pMsg->bodyptr); } } sme_ReleaseGlobalLock( &pMac->sme ); @@ -2240,7 +2487,7 @@ eHalStatus sme_ProcessMsg(tHalHandle hHal, vos_msg_t* pMsg) smsLog( pMac, LOGW, "Locking failed, bailing out"); if (pMsg->bodyptr) { - vos_mem_free( pMsg->bodyptr ); + vos_mem_free(pMsg->bodyptr); } } @@ -2256,7 +2503,7 @@ v_VOID_t sme_FreeMsg( tHalHandle hHal, vos_msg_t* pMsg ) { if (pMsg->bodyptr) { - vos_mem_free( pMsg->bodyptr ); + vos_mem_free(pMsg->bodyptr); } } @@ -2272,6 +2519,7 @@ v_VOID_t sme_FreeMsg( tHalHandle hHal, vos_msg_t* pMsg ) This is a synchronous call \param hHal - The handle returned by macOpen + \param tHalStopType - reason for stopping \return eHAL_STATUS_SUCCESS - SME is stopped. @@ -2280,7 +2528,7 @@ v_VOID_t sme_FreeMsg( tHalHandle hHal, vos_msg_t* pMsg ) \sa --------------------------------------------------------------------------*/ -eHalStatus sme_Stop(tHalHandle hHal, tANI_BOOLEAN pmcFlag) +eHalStatus sme_Stop(tHalHandle hHal, tHalStopType stopType) { eHalStatus status = eHAL_STATUS_FAILURE; eHalStatus fail_status = eHAL_STATUS_SUCCESS; @@ -2295,31 +2543,28 @@ eHalStatus sme_Stop(tHalHandle hHal, tANI_BOOLEAN pmcFlag) p2pStop(hHal); - if(pmcFlag) + if(!pMac->psOffloadEnabled) { - if(!pMac->psOffloadEnabled) - { - status = pmcStop(hHal); - if ( ! HAL_STATUS_SUCCESS( status ) ) { - smsLog( pMac, LOGE, - "pmcStop failed during smeStop with status=%d", - status ); - fail_status = status; - } - } - else - { - status = pmcOffloadStop(hHal); - if ( ! HAL_STATUS_SUCCESS( status ) ) { - smsLog( pMac, LOGE, - "pmcOffloadStop failed during smeStop with status=%d", - status ); - fail_status = status; - } - } + status = pmcStop(hHal); + if ( ! HAL_STATUS_SUCCESS( status ) ) { + smsLog( pMac, LOGE, + "pmcStop failed during smeStop with status=%d", + status ); + fail_status = status; + } + } + else + { + status = pmcOffloadStop(hHal); + if ( ! HAL_STATUS_SUCCESS( status ) ) { + smsLog( pMac, LOGE, + "pmcOffloadStop failed during smeStop with status=%d", + status ); + fail_status = status; + } } - status = csrStop(pMac); + status = csrStop(pMac, stopType); if ( ! HAL_STATUS_SUCCESS( status ) ) { smsLog( pMac, LOGE, "csrStop failed during smeStop with status=%d", status ); @@ -2489,13 +2734,14 @@ tANI_BOOLEAN csrIsScanAllowed(tpAniSirGlobal pMac) \param pContext - a pointer passed in for the callback \return eHalStatus ---------------------------------------------------------------------------*/ -eHalStatus sme_ScanRequest(tHalHandle hHal, tANI_U8 sessionId, tCsrScanRequest *pscanReq, - tANI_U32 *pScanRequestID, +eHalStatus sme_ScanRequest(tHalHandle hHal, tANI_U8 sessionId, tCsrScanRequest *pscanReq, + tANI_U32 *pScanRequestID, csrScanCompleteCallback callback, void *pContext) { eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_MSG_SCAN_REQ, sessionId, pscanReq->scanType)); smsLog(pMac, LOG2, FL("enter")); do { @@ -2506,14 +2752,14 @@ eHalStatus sme_ScanRequest(tHalHandle hHal, tANI_U8 sessionId, tCsrScanRequest * { { #ifdef FEATURE_WLAN_LFR - if(csrIsScanAllowed(pMac)) + if(csrIsScanAllowed(pMac)) { #endif status = csrScanRequest( hHal, sessionId, pscanReq, pScanRequestID, callback, pContext ); #ifdef FEATURE_WLAN_LFR - } - else + } + else { smsLog(pMac, LOGE, FL("Scan denied in state %d (sub-state %d)"), pMac->roam.neighborRoamInfo.neighborRoamState, @@ -2523,7 +2769,7 @@ eHalStatus sme_ScanRequest(tHalHandle hHal, tANI_U8 sessionId, tCsrScanRequest * } #endif } - + sme_ReleaseGlobalLock( &pMac->sme ); } //sme_AcquireGlobalLock success else @@ -2556,6 +2802,8 @@ eHalStatus sme_ScanGetResult(tHalHandle hHal, tANI_U8 sessionId, tCsrScanResultF eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_MSG_SCAN_GET_RESULTS, sessionId,0 )); smsLog(pMac, LOG2, FL("enter")); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) @@ -2580,6 +2828,8 @@ eHalStatus sme_ScanFlushResult(tHalHandle hHal, tANI_U8 sessionId) eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_MSG_SCAN_FLUSH_RESULTS, sessionId,0 )); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { @@ -2595,6 +2845,8 @@ eHalStatus sme_ScanFlushP2PResult(tHalHandle hHal, tANI_U8 sessionId) eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_MSG_SCAN_FLUSH_P2PRESULTS, sessionId,0 )); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { @@ -2620,6 +2872,8 @@ tCsrScanResultInfo *sme_ScanResultGetFirst(tHalHandle hHal, tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); tCsrScanResultInfo *pRet = NULL; + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_MSG_SCAN_RESULT_GETFIRST, NO_SESSION,0 )); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { @@ -2647,6 +2901,8 @@ tCsrScanResultInfo *sme_ScanResultGetNext(tHalHandle hHal, tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); tCsrScanResultInfo *pRet = NULL; + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME , + TRACE_CODE_SME_RX_HDD_MSG_SCAN_RESULT_GETNEXT, NO_SESSION,0 )); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { @@ -2699,6 +2955,8 @@ eHalStatus sme_ScanResultPurge(tHalHandle hHal, tScanResultHandle hScanResult) eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_MSG_SCAN_RESULT_PURGE, NO_SESSION,0 )); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { @@ -2726,7 +2984,7 @@ eHalStatus sme_ScanResultPurge(tHalHandle hHal, tScanResultHandle hScanResult) not sizeof(tPmkidCandidateInfo) * something ---------------------------------------------------------------------------*/ eHalStatus sme_ScanGetPMKIDCandidateList(tHalHandle hHal, tANI_U8 sessionId, - tPmkidCandidateInfo *pPmkidList, + tPmkidCandidateInfo *pPmkidList, tANI_U32 *pNumItems ) { eHalStatus status = eHAL_STATUS_FAILURE; @@ -2806,6 +3064,8 @@ eHalStatus sme_RoamConnect(tHalHandle hHal, tANI_U8 sessionId, tCsrRoamProfile * eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_MSG_CONNECT, sessionId, 0)); smsLog(pMac, LOG2, FL("enter")); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) @@ -2880,13 +3140,15 @@ eHalStatus sme_RoamReassoc(tHalHandle hHal, tANI_U8 sessionId, tCsrRoamProfile * eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_ROAM_REASSOC, sessionId, 0)); smsLog(pMac, LOG2, FL("enter")); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { if( CSR_IS_SESSION_VALID( pMac, sessionId ) ) { - if((NULL == pProfile) && (fForce == 1)) + if((NULL == pProfile) && (fForce == 1)) { tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, sessionId ); /* to force the AP initiate fresh 802.1x authentication need to clear @@ -2898,7 +3160,7 @@ eHalStatus sme_RoamReassoc(tHalHandle hHal, tANI_U8 sessionId, tCsrRoamProfile * else { status = csrRoamReassoc( pMac, sessionId, pProfile, modProfileFields, pRoamId ); - } + } } else { @@ -2922,6 +3184,8 @@ eHalStatus sme_RoamConnectToLastProfile(tHalHandle hHal, tANI_U8 sessionId) eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_ROAM_GET_CONNECTPROFILE, sessionId, 0)); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { @@ -2952,6 +3216,8 @@ eHalStatus sme_RoamDisconnect(tHalHandle hHal, tANI_U8 sessionId, eCsrRoamDiscon eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_ROAM_DISCONNECT, sessionId, reason)); smsLog(pMac, LOG2, FL("enter")); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) @@ -3025,7 +3291,7 @@ eHalStatus sme_RoamDisconnectSta(tHalHandle hHal, tANI_U8 sessionId, { if( CSR_IS_SESSION_VALID( pMac, sessionId ) ) { - status = csrRoamIssueDisassociateStaCmd( pMac, sessionId, pPeerMacAddr, + status = csrRoamIssueDisassociateStaCmd( pMac, sessionId, pPeerMacAddr, eSIR_MAC_DEAUTH_LEAVING_BSS_REASON); } else @@ -3063,7 +3329,7 @@ eHalStatus sme_RoamDeauthSta(tHalHandle hHal, tANI_U8 sessionId, { if( CSR_IS_SESSION_VALID( pMac, sessionId ) ) { - status = csrRoamIssueDeauthStaCmd( pMac, sessionId, pPeerMacAddr, + status = csrRoamIssueDeauthStaCmd( pMac, sessionId, pPeerMacAddr, eSIR_MAC_DEAUTH_LEAVING_BSS_REASON); } else @@ -3165,7 +3431,7 @@ eHalStatus sme_RoamGetAssociatedStas(tHalHandle hHal, tANI_U8 sessionId, \return eHalStatus -------------------------------------------------------------------------------*/ eHalStatus sme_RoamGetWpsSessionOverlap(tHalHandle hHal, tANI_U8 sessionId, - void *pUsrContext, void + void *pUsrContext, void *pfnSapEventCallback, v_MACADDR_t pRemoveMac) { eHalStatus status = eHAL_STATUS_FAILURE; @@ -3240,6 +3506,8 @@ eHalStatus sme_RoamGetConnectProfile(tHalHandle hHal, tANI_U8 sessionId, eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_ROAM_FREE_CONNECTPROFILE, NO_SESSION, 0)); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { @@ -3272,6 +3540,8 @@ eHalStatus sme_RoamFreeConnectProfile(tHalHandle hHal, eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_ROAM_SET_PMKIDCACHE, NO_SESSION, 0)); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { @@ -3303,6 +3573,8 @@ eHalStatus sme_RoamSetPMKIDCache( tHalHandle hHal, tANI_U8 sessionId, tPmkidCach eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_GET_CONFIGPARAM, NO_SESSION, 0)); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { @@ -3462,6 +3734,8 @@ eHalStatus sme_RoamGetPMKIDCache(tHalHandle hHal, tANI_U8 sessionId, tANI_U32 *p eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_GET_MODPROFFIELDS, sessionId, 0)); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { @@ -3493,6 +3767,8 @@ eHalStatus sme_GetConfigParam(tHalHandle hHal, tSmeConfigParams *pParam) eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_ENABLE_PWRSAVE, NO_SESSION, 0)); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { @@ -3580,6 +3856,8 @@ eHalStatus sme_GetModifyProfileFields(tHalHandle hHal, tANI_U8 sessionId, eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_DISABLE_PWRSAVE, sessionId, 0)); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { @@ -3616,6 +3894,8 @@ eHalStatus sme_SetConfigPowerSave(tHalHandle hHal, tPmcPowerSavingMode psMode, eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_SET_CONFIG_PWRSAVE, NO_SESSION, 0)); if (NULL == pConfigParams ) { smsLog( pMac, LOGE, "Empty config param structure for PMC, " "nothing to update"); @@ -3647,6 +3927,8 @@ eHalStatus sme_GetConfigPowerSave(tHalHandle hHal, tPmcPowerSavingMode psMode, eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_GET_CONFIG_PWRSAVE, NO_SESSION, 0)); if (NULL == pConfigParams ) { smsLog( pMac, LOGE, "Empty config param structure for PMC, " "nothing to update"); @@ -3676,6 +3958,8 @@ eHalStatus sme_SignalPowerEvent (tHalHandle hHal, tPmcPowerEvent event) eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_START_AUTO_BMPSTIMER, NO_SESSION, 0)); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { @@ -3701,6 +3985,8 @@ eHalStatus sme_EnablePowerSave (tHalHandle hHal, tPmcPowerSavingMode psMode) eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_STOP_AUTO_BMPSTIMER, NO_SESSION, 0)); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { @@ -3725,6 +4011,8 @@ eHalStatus sme_DisablePowerSave (tHalHandle hHal, tPmcPowerSavingMode psMode) eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_REQUEST_FULLPOWER, NO_SESSION, psMode)); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { @@ -3767,6 +4055,8 @@ eHalStatus sme_StartAutoBmpsTimer ( tHalHandle hHal) eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_REQUEST_BMPS, NO_SESSION, 0)); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { @@ -3838,6 +4128,8 @@ tANI_BOOLEAN sme_IsPowerSaveEnabled (tHalHandle hHal, tPmcPowerSavingMode psMode tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); tANI_BOOLEAN result = false; + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_IS_PWRSAVE_ENABLED, NO_SESSION, psMode)); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { @@ -3918,13 +4210,15 @@ eHalStatus sme_RequestBmps ( /* --------------------------------------------------------------------------- \fn sme_SetDHCPTillPowerActiveFlag \brief Sets/Clears DHCP related flag in PMC to disable/enable auto BMPS - entry by PMC + entry by PMC \param hHal - The handle returned by macOpen. ---------------------------------------------------------------------------*/ void sme_SetDHCPTillPowerActiveFlag(tHalHandle hHal, tANI_U8 flag) { tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_SET_DHCP_FLAG, NO_SESSION, flag)); // Set/Clear the DHCP flag which will disable/enable auto BMPS entery by PMC pMac->pmc.remainInPowerActiveTillDHCP = flag; } @@ -4005,6 +4299,8 @@ eHalStatus sme_RequestStandby ( eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_REQUEST_STANDBY, NO_SESSION, 0)); smsLog( pMac, LOG1, FL("") ); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) @@ -4143,6 +4439,8 @@ eHalStatus sme_WowlAddBcastPattern ( { eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_WOWL_ADDBCAST_PATTERN, sessionId, 0)); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { @@ -4169,6 +4467,8 @@ eHalStatus sme_WowlDelBcastPattern ( { eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_WOWL_DELBCAST_PATTERN, sessionId, 0)); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { @@ -4221,12 +4521,14 @@ eHalStatus sme_EnterWowl ( { eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_ENTER_WOWL, sessionId, 0)); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { - status = pmcEnterWowl (hHal, enterWowlCallbackRoutine, enterWowlCallbackContext, + status = pmcEnterWowl (hHal, enterWowlCallbackRoutine, enterWowlCallbackContext, #ifdef WLAN_WAKEUP_EVENTS - wakeIndicationCB, wakeIndicationCBContext, + wakeIndicationCB, wakeIndicationCBContext, #endif // WLAN_WAKEUP_EVENTS wowlEnterParams, sessionId); sme_ReleaseGlobalLock( &pMac->sme ); @@ -4249,6 +4551,8 @@ eHalStatus sme_ExitWowl (tHalHandle hHal, tpSirSmeWowlExitParams wowlExitParams) { eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_EXIT_WOWL, NO_SESSION, 0)); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { @@ -4283,6 +4587,8 @@ eHalStatus sme_RoamSetKey(tHalHandle hHal, tANI_U8 sessionId, tCsrRoamSetKey *pS tANI_U32 i; tCsrRoamSession *pSession = NULL; + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_SET_KEY, sessionId, 0)); if (pSetKey->keyLength > CSR_MAX_KEY_LEN) { smsLog(pMac, LOGE, FL("Invalid key length %d"), pSetKey->keyLength); @@ -4361,6 +4667,8 @@ eHalStatus sme_RoamRemoveKey(tHalHandle hHal, tANI_U8 sessionId, tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); tANI_U32 roamId; + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_REMOVE_KEY, sessionId, 0)); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { @@ -4388,12 +4696,14 @@ eHalStatus sme_RoamRemoveKey(tHalHandle hHal, tANI_U8 sessionId, ---------------------------------------------------------------------------*/ eHalStatus sme_GetRssi(tHalHandle hHal, tCsrRssiCallback callback, - tANI_U8 staId, tCsrBssid bssId, + tANI_U8 staId, tCsrBssid bssId, void *pContext, void* pVosContext) { eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_GET_STATS, NO_SESSION, 0)); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { @@ -4403,6 +4713,35 @@ eHalStatus sme_GetRssi(tHalHandle hHal, } return (status); } + +/* --------------------------------------------------------------------------- + \fn sme_GetSnr + \brief a wrapper function that client calls to register a callback to + get SNR + + \param callback - SME sends back the requested stats using the callback + \param staId - The station ID for which the stats is requested for + \param pContext - user context to be passed back along with the callback + \param pVosContext - vos context + \return eHalStatus + ---------------------------------------------------------------------------*/ +eHalStatus sme_GetSnr(tHalHandle hHal, + tCsrSnrCallback callback, + tANI_U8 staId, tCsrBssid bssId, + void *pContext) +{ + eHalStatus status = eHAL_STATUS_FAILURE; + tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + + status = sme_AcquireGlobalLock( &pMac->sme ); + if ( HAL_STATUS_SUCCESS( status ) ) + { + status = csrGetSnr(pMac, callback, + staId, bssId, pContext); + sme_ReleaseGlobalLock( &pMac->sme ); + } + return status; +} #if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR) /* --------------------------------------------------------------------------- \fn sme_GetRoamRssi @@ -4433,6 +4772,34 @@ eHalStatus sme_GetRoamRssi(tHalHandle hHal, } #endif +#if defined(FEATURE_WLAN_CCX) && defined(FEATURE_WLAN_CCX_UPLOAD) +/* --------------------------------------------------------------------------- + \fn sme_GetTsmStats + \brief a wrapper function that client calls to register a callback to + get TSM Stats + \param callback - SME sends back the requested stats using the callback + \param staId - The station ID for which the stats is requested for + \param pContext - user context to be passed back along with the callback + \param pVosContext - vos context + \return eHalStatus + ---------------------------------------------------------------------------*/ +eHalStatus sme_GetTsmStats(tHalHandle hHal, + tCsrTsmStatsCallback callback, + tANI_U8 staId, tCsrBssid bssId, + void *pContext, void* pVosContext, tANI_U8 tid) +{ + eHalStatus status = eHAL_STATUS_FAILURE; + tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + status = sme_AcquireGlobalLock( &pMac->sme ); + if ( HAL_STATUS_SUCCESS( status ) ) + { + status = csrGetTsmStats( pMac, callback, + staId, bssId, pContext, pVosContext, tid); + sme_ReleaseGlobalLock( &pMac->sme ); + } + return (status); +} +#endif /* --------------------------------------------------------------------------- \fn sme_GetStatistics @@ -4470,6 +4837,30 @@ eHalStatus sme_GetStatistics(tHalHandle hHal, eCsrStatsRequesterType requesterId } +/* --------------------------------------------------------------------------- + \fn smeGetTLSTAState + \helper function to get the TL STA State whenever the function is called. + + \param staId - The staID to be passed to the TL + to get the relevant TL STA State + \return the state as tANI_U16 + ---------------------------------------------------------------------------*/ +tANI_U16 smeGetTLSTAState(tHalHandle hHal, tANI_U8 staId) +{ + tANI_U16 tlSTAState = TL_INIT_STATE; + tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + eHalStatus status = eHAL_STATUS_FAILURE; + + status = sme_AcquireGlobalLock( &pMac->sme ); + if ( HAL_STATUS_SUCCESS( status ) ) + { + tlSTAState = csrGetTLSTAState( pMac, staId); + sme_ReleaseGlobalLock( &pMac->sme ); + } + + return tlSTAState; +} + /* --------------------------------------------------------------------------- \fn sme_GetCountryCode @@ -4495,6 +4886,9 @@ eHalStatus sme_GetCountryCode(tHalHandle hHal, tANI_U8 *pBuf, tANI_U8 *pbLen) { tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_GET_CNTRYCODE, NO_SESSION, 0)); + return ( csrGetCountryCode( pMac, pBuf, pbLen ) ); } @@ -4521,6 +4915,8 @@ eHalStatus sme_SetCountryCode(tHalHandle hHal, tANI_U8 *pCountry, tANI_BOOLEAN * { tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_SET_CNTRYCODE, NO_SESSION, 0)); return ( csrSetCountryCode( pMac, pCountry, pfRestartNeeded ) ); } @@ -4630,7 +5026,8 @@ eHalStatus sme_GetRegulatoryDomainForCountry(tHalHandle hHal, tANI_U8 *pCountry, { tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - return ( csrGetRegulatoryDomainForCountry( pMac, pCountry, pDomainId ) ); + return csrGetRegulatoryDomainForCountry(pMac, pCountry, pDomainId, + COUNTRY_QUERY); } @@ -4734,6 +5131,8 @@ eHalStatus sme_ScanGetBaseChannels( tHalHandle hHal, tCsrChannelInfo * pChannelI \param pCountry New Country Code String + \param sendRegHint If we want to send reg hint to nl80211 + \return eHalStatus SUCCESS. FAILURE or RESOURCES The API finished and failed. @@ -4743,28 +5142,46 @@ eHalStatus sme_ChangeCountryCode( tHalHandle hHal, tSmeChangeCountryCallback callback, tANI_U8 *pCountry, void *pContext, - void* pVosContext ) + void* pVosContext, + tAniBool countryFromUserSpace, + tAniBool sendRegHint ) { eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); vos_msg_t msg; tAniChangeCountryCodeReq *pMsg; + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_CHANGE_CNTRYCODE, NO_SESSION, 0)); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { smsLog(pMac, LOG1, FL(" called")); - status = palAllocateMemory(pMac->hHdd, (void **)&pMsg, sizeof(tAniChangeCountryCodeReq)); - if ( !HAL_STATUS_SUCCESS(status) ) + + if ((csrGetInfraSessionId(pMac) != -1) && + (!pMac->roam.configParam.fSupplicantCountryCodeHasPriority)) + { + + smsLog(pMac, LOGW, "Set Country Code Fail since the STA is associated and userspace does not have priority "); + + sme_ReleaseGlobalLock( &pMac->sme ); + status = eHAL_STATUS_FAILURE; + return status; + } + + pMsg = vos_mem_malloc(sizeof(tAniChangeCountryCodeReq)); + if ( NULL == pMsg ) { smsLog(pMac, LOGE, " csrChangeCountryCode: failed to allocate mem for req"); sme_ReleaseGlobalLock( &pMac->sme ); - return status; + return eHAL_STATUS_FAILURE; } pMsg->msgType = pal_cpu_to_be16((tANI_U16)eWNI_SME_CHANGE_COUNTRY_CODE); pMsg->msgLen = (tANI_U16)sizeof(tAniChangeCountryCodeReq); - palCopyMemory(pMac->hHdd, pMsg->countryCode, pCountry, 3); + vos_mem_copy(pMsg->countryCode, pCountry, 3); + pMsg->countryFromUserSpace = countryFromUserSpace; + pMsg->sendRegHint = sendRegHint; pMsg->changeCCCallback = callback; pMsg->pDevContext = pContext; pMsg->pVosContext = pVosContext; @@ -4776,7 +5193,7 @@ eHalStatus sme_ChangeCountryCode( tHalHandle hHal, if(VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, &msg)) { smsLog(pMac, LOGE, " sme_ChangeCountryCode failed to post msg to self "); - palFreeMemory(pMac->hHdd, (void *)pMsg); + vos_mem_free((void *)pMsg); status = eHAL_STATUS_FAILURE; } smsLog(pMac, LOG1, FL(" returned")); @@ -4786,27 +5203,273 @@ eHalStatus sme_ChangeCountryCode( tHalHandle hHal, return (status); } -/* --------------------------------------------------------------------------- - \fn sme_BtcSignalBtEvent - \brief API to signal Bluetooth (BT) event to the WLAN driver. Based on the - BT event type and the current operating mode of Libra (full power, - BMPS, UAPSD etc), appropriate Bluetooth Coexistence (BTC) strategy - would be employed. - \param hHal - The handle returned by macOpen. - \param pBtEvent - Pointer to a caller allocated object of type tSmeBtEvent - Caller owns the memory and is responsible for freeing it. - \return VOS_STATUS - VOS_STATUS_E_FAILURE BT Event not passed to HAL. This can happen - if BTC execution mode is set to BTC_WLAN_ONLY - or BTC_PTA_ONLY. - VOS_STATUS_SUCCESS BT Event passed to HAL - ---------------------------------------------------------------------------*/ +/*-------------------------------------------------------------------------- + + \fn sme_GenericChangeCountryCode + + \brief Change Country code from upperlayer during WLAN driver operation. + This is a synchronous API. + + \param hHal - The handle returned by macOpen. + + \param pCountry New Country Code String + + \param reg_domain regulatory domain + + \return eHalStatus SUCCESS. + + FAILURE or RESOURCES The API finished and failed. + +-----------------------------------------------------------------------------*/ +eHalStatus sme_GenericChangeCountryCode( tHalHandle hHal, + tANI_U8 *pCountry, + v_REGDOMAIN_t reg_domain) +{ + eHalStatus status = eHAL_STATUS_FAILURE; + tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + vos_msg_t msg; + tAniGenericChangeCountryCodeReq *pMsg; + + if (NULL == pMac) + { + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_FATAL, + "%s: pMac is null", __func__); + return status; + } + + status = sme_AcquireGlobalLock( &pMac->sme ); + if ( HAL_STATUS_SUCCESS( status ) ) + { + smsLog(pMac, LOG1, FL(" called")); + pMsg = vos_mem_malloc(sizeof(tAniGenericChangeCountryCodeReq)); + + if (NULL == pMsg) + { + smsLog(pMac, LOGE, " sme_GenericChangeCountryCode: failed to allocate mem for req"); + sme_ReleaseGlobalLock( &pMac->sme ); + return eHAL_STATUS_FAILURE; + } + + pMsg->msgType = pal_cpu_to_be16((tANI_U16)eWNI_SME_GENERIC_CHANGE_COUNTRY_CODE); + pMsg->msgLen = (tANI_U16)sizeof(tAniGenericChangeCountryCodeReq); + vos_mem_copy(pMsg->countryCode, pCountry, 3); + pMsg->domain_index = reg_domain; + + msg.type = eWNI_SME_GENERIC_CHANGE_COUNTRY_CODE; + msg.bodyptr = pMsg; + msg.reserved = 0; + + if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, &msg)) + { + smsLog(pMac, LOGE, "sme_GenericChangeCountryCode failed to post msg to self"); + vos_mem_free(pMsg); + status = eHAL_STATUS_FAILURE; + } + smsLog(pMac, LOG1, FL(" returned")); + sme_ReleaseGlobalLock( &pMac->sme ); + } + + return (status); +} +/* --------------------------------------------------------------------------- + + \fn sme_DHCPStartInd + + \brief API to signal the FW about the DHCP Start event. + + \param hHal - HAL handle for device. + + \param device_mode - mode(AP,SAP etc) of the device. + + \param macAddr - MAC address of the device. + + \return eHalStatus SUCCESS. + + FAILURE or RESOURCES The API finished and failed. + --------------------------------------------------------------------------*/ +eHalStatus sme_DHCPStartInd( tHalHandle hHal, + tANI_U8 device_mode, + tANI_U8 *macAddr ) +{ + eHalStatus status; + VOS_STATUS vosStatus; + tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + vos_msg_t vosMessage; + tAniDHCPInd *pMsg; + + status = sme_AcquireGlobalLock(&pMac->sme); + if ( eHAL_STATUS_SUCCESS == status) + { + pMsg = (tAniDHCPInd*)vos_mem_malloc(sizeof(tAniDHCPInd)); + if (NULL == pMsg) + { + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, + "%s: Not able to allocate memory for dhcp start", __func__); + sme_ReleaseGlobalLock( &pMac->sme ); + return eHAL_STATUS_FAILURE; + } + pMsg->msgType = WDA_DHCP_START_IND; + pMsg->msgLen = (tANI_U16)sizeof(tAniDHCPInd); + pMsg->device_mode = device_mode; + vos_mem_copy( pMsg->macAddr, macAddr, sizeof(tSirMacAddr)); + + vosMessage.type = WDA_DHCP_START_IND; + vosMessage.bodyptr = pMsg; + vosMessage.reserved = 0; + + vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &vosMessage ); + if ( !VOS_IS_STATUS_SUCCESS(vosStatus) ) + { + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, + "%s: Post DHCP Start MSG fail", __func__); + vos_mem_free(pMsg); + status = eHAL_STATUS_FAILURE; + } + sme_ReleaseGlobalLock( &pMac->sme ); + } + return (status); +} +/* --------------------------------------------------------------------------- + \fn sme_DHCPStopInd + + \brief API to signal the FW about the DHCP complete event. + + \param hHal - HAL handle for device. + + \param device_mode - mode(AP, SAP etc) of the device. + + \param macAddr - MAC address of the device. + + \return eHalStatus SUCCESS. + FAILURE or RESOURCES The API finished and failed. + --------------------------------------------------------------------------*/ +eHalStatus sme_DHCPStopInd( tHalHandle hHal, + tANI_U8 device_mode, + tANI_U8 *macAddr ) +{ + eHalStatus status; + VOS_STATUS vosStatus; + tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + vos_msg_t vosMessage; + tAniDHCPInd *pMsg; + + status = sme_AcquireGlobalLock(&pMac->sme); + if ( eHAL_STATUS_SUCCESS == status) + { + pMsg = (tAniDHCPInd*)vos_mem_malloc(sizeof(tAniDHCPInd)); + if (NULL == pMsg) + { + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, + "%s: Not able to allocate memory for dhcp stop", __func__); + sme_ReleaseGlobalLock( &pMac->sme ); + return eHAL_STATUS_FAILURE; + } + + pMsg->msgType = WDA_DHCP_STOP_IND; + pMsg->msgLen = (tANI_U16)sizeof(tAniDHCPInd); + pMsg->device_mode = device_mode; + vos_mem_copy( pMsg->macAddr, macAddr, sizeof(tSirMacAddr)); + + vosMessage.type = WDA_DHCP_STOP_IND; + vosMessage.bodyptr = pMsg; + vosMessage.reserved = 0; + + vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &vosMessage ); + if ( !VOS_IS_STATUS_SUCCESS(vosStatus) ) + { + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, + "%s: Post DHCP Stop MSG fail", __func__); + vos_mem_free(pMsg); + status = eHAL_STATUS_FAILURE; + } + + sme_ReleaseGlobalLock( &pMac->sme ); + } + return (status); +} + +#ifdef FEATURE_CESIUM_PROPRIETARY +/*--------------------------------------------------------------------------- + + \fn sme_TXFailMonitorStopInd + + \brief API to signal the FW to start monitoring TX failures + + \return eHalStatus SUCCESS. + + FAILURE or RESOURCES The API finished and failed. + --------------------------------------------------------------------------*/ +eHalStatus sme_TXFailMonitorStartStopInd(tHalHandle hHal, tANI_U8 tx_fail_count, + void * txFailIndCallback) +{ + eHalStatus status; + VOS_STATUS vosStatus; + tpAniSirGlobal pMac = PMAC_STRUCT(hHal); + vos_msg_t vosMessage; + tAniTXFailMonitorInd *pMsg; + + status = sme_AcquireGlobalLock(&pMac->sme); + if ( eHAL_STATUS_SUCCESS == status) + { + pMsg = (tAniTXFailMonitorInd*) + vos_mem_malloc(sizeof(tAniTXFailMonitorInd)); + if (NULL == pMsg) + { + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, + "%s: Failed to allocate memory", __func__); + sme_ReleaseGlobalLock( &pMac->sme ); + return eHAL_STATUS_FAILURE; + } + + pMsg->msgType = WDA_TX_FAIL_MONITOR_IND; + pMsg->msgLen = (tANI_U16)sizeof(tAniTXFailMonitorInd); + + //tx_fail_count = 0 should disable the Monitoring in FW + pMsg->tx_fail_count = tx_fail_count; + pMsg->txFailIndCallback = txFailIndCallback; + + vosMessage.type = WDA_TX_FAIL_MONITOR_IND; + vosMessage.bodyptr = pMsg; + vosMessage.reserved = 0; + + vosStatus = vos_mq_post_message(VOS_MQ_ID_WDA, &vosMessage ); + if ( !VOS_IS_STATUS_SUCCESS(vosStatus) ) + { + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, + "%s: Post TX Fail monitor Start MSG fail", __func__); + vos_mem_free(pMsg); + status = eHAL_STATUS_FAILURE; + } + sme_ReleaseGlobalLock( &pMac->sme ); + } + return (status); +} +#endif /* FEATURE_CESIUM_PROPRIETARY */ + +/* --------------------------------------------------------------------------- + \fn sme_BtcSignalBtEvent + \brief API to signal Bluetooth (BT) event to the WLAN driver. Based on the + BT event type and the current operating mode of Libra (full power, + BMPS, UAPSD etc), appropriate Bluetooth Coexistence (BTC) strategy + would be employed. + \param hHal - The handle returned by macOpen. + \param pBtEvent - Pointer to a caller allocated object of type tSmeBtEvent + Caller owns the memory and is responsible for freeing it. + \return VOS_STATUS + VOS_STATUS_E_FAILURE BT Event not passed to HAL. This can happen + if BTC execution mode is set to BTC_WLAN_ONLY + or BTC_PTA_ONLY. + VOS_STATUS_SUCCESS BT Event passed to HAL + ---------------------------------------------------------------------------*/ VOS_STATUS sme_BtcSignalBtEvent (tHalHandle hHal, tpSmeBtEvent pBtEvent) { VOS_STATUS status = VOS_STATUS_E_FAILURE; + #ifndef WLAN_MDM_CODE_REDUCTION_OPT tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_BTC_SIGNALEVENT, NO_SESSION, 0)); if ( eHAL_STATUS_SUCCESS == sme_AcquireGlobalLock( &pMac->sme ) ) { status = btcSignalBTEvent (hHal, pBtEvent); @@ -4833,6 +5496,8 @@ VOS_STATUS sme_BtcSetConfig (tHalHandle hHal, tpSmeBtcConfig pSmeBtcConfig) VOS_STATUS status = VOS_STATUS_E_FAILURE; #ifndef WLAN_MDM_CODE_REDUCTION_OPT tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_BTC_SETCONFIG, NO_SESSION, 0)); if ( eHAL_STATUS_SUCCESS == sme_AcquireGlobalLock( &pMac->sme ) ) { status = btcSetConfig (hHal, pSmeBtcConfig); @@ -4859,6 +5524,8 @@ VOS_STATUS sme_BtcGetConfig (tHalHandle hHal, tpSmeBtcConfig pSmeBtcConfig) #ifndef WLAN_MDM_CODE_REDUCTION_OPT tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_BTC_GETCONFIG, NO_SESSION, 0)); if ( eHAL_STATUS_SUCCESS == sme_AcquireGlobalLock( &pMac->sme ) ) { status = btcGetConfig (hHal, pSmeBtcConfig); @@ -4872,7 +5539,7 @@ VOS_STATUS sme_BtcGetConfig (tHalHandle hHal, tpSmeBtcConfig pSmeBtcConfig) \brief API to set configure privacy parameters \param hHal - The handle returned by macOpen. \param pProfile - Pointer CSR Roam profile. - \param fPrivacy - This parameter indicates status of privacy + \param fPrivacy - This parameter indicates status of privacy \return void ---------------------------------------------------------------------------*/ @@ -4882,6 +5549,8 @@ void sme_SetCfgPrivacy( tHalHandle hHal, ) { tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_SET_CFGPRIVACY, NO_SESSION, 0)); if ( eHAL_STATUS_SUCCESS == sme_AcquireGlobalLock( &pMac->sme ) ) { csrSetCfgPrivacy(pMac, pProfile, fPrivacy); @@ -4906,6 +5575,8 @@ VOS_STATUS sme_NeighborReportRequest (tHalHandle hHal, tANI_U8 sessionId, { VOS_STATUS status = VOS_STATUS_E_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_NEIGHBOR_REPORTREQ, NO_SESSION, 0)); if ( eHAL_STATUS_SUCCESS == sme_AcquireGlobalLock( &pMac->sme ) ) { @@ -4929,6 +5600,8 @@ VOS_STATUS sme_DbgReadRegister(tHalHandle hHal, v_U32_t regAddr, v_U32_t *pRegVa tpAniSirGlobal pMac = PMAC_STRUCT(hHal); tPmcPowerState PowerState; tANI_U32 sessionId = 0; + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_DBG_READREG, NO_SESSION, 0)); /* 1) To make Quarky work in FTM mode **************************************/ @@ -4959,7 +5632,7 @@ VOS_STATUS sme_DbgReadRegister(tHalHandle hHal, v_U32_t regAddr, v_U32_t *pRegVa status = VOS_STATUS_SUCCESS; } else - { + { status = VOS_STATUS_E_FAILURE; } } @@ -4976,10 +5649,10 @@ VOS_STATUS sme_DbgReadRegister(tHalHandle hHal, v_U32_t regAddr, v_U32_t *pRegVa *pRegValue = 0xDEADBEEF; status = VOS_STATUS_SUCCESS; } - + /* Release SME global lock */ sme_ReleaseGlobalLock(&pMac->sme); - + return (status); } @@ -4995,6 +5668,8 @@ VOS_STATUS sme_DbgWriteRegister(tHalHandle hHal, v_U32_t regAddr, v_U32_t regVal /* 1) To make Quarky work in FTM mode **************************************/ + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_DBG_WRITEREG, NO_SESSION, 0)); if(eDRIVER_TYPE_MFG == pMac->gDriverType) { if (eWLAN_PAL_STATUS_SUCCESS == wpalDbgWriteRegister(regAddr, regValue)) @@ -5031,10 +5706,10 @@ VOS_STATUS sme_DbgWriteRegister(tHalHandle hHal, v_U32_t regAddr, v_U32_t regVal status = VOS_STATUS_E_FAILURE; } } - + /* Release SME global lock */ sme_ReleaseGlobalLock(&pMac->sme); - + return (status); } @@ -5056,6 +5731,8 @@ VOS_STATUS sme_DbgReadMemory(tHalHandle hHal, v_U32_t memAddr, v_U8_t *pBuf, v_U tANI_U32 arg4 = 0; /* 1) To make Quarky work in FTM mode **************************************/ + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_DBG_READMEM, NO_SESSION, 0)); if(eDRIVER_TYPE_MFG == pMac->gDriverType) { if (VOS_STATUS_SUCCESS == WDA_HALDumpCmdReq(pMac, cmd, arg1, arg2, arg3, arg4, (tANI_U8*)pBuf)) @@ -5104,7 +5781,7 @@ VOS_STATUS sme_DbgReadMemory(tHalHandle hHal, v_U32_t memAddr, v_U8_t *pBuf, v_U /* Release SME lock */ sme_ReleaseGlobalLock(&pMac->sme); - + return (status); } @@ -5120,6 +5797,8 @@ VOS_STATUS sme_DbgWriteMemory(tHalHandle hHal, v_U32_t memAddr, v_U8_t *pBuf, v_ /* 1) To make Quarky work in FTM mode **************************************/ + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_DBG_WRITEMEM, NO_SESSION, 0)); if(eDRIVER_TYPE_MFG == pMac->gDriverType) { { @@ -5158,11 +5837,29 @@ VOS_STATUS sme_DbgWriteMemory(tHalHandle hHal, v_U32_t memAddr, v_U8_t *pBuf, v_ /* Release Global lock */ sme_ReleaseGlobalLock(&pMac->sme); - + return (status); } +void pmcLog(tpAniSirGlobal pMac, tANI_U32 loglevel, const char *pString, ...) +{ + VOS_TRACE_LEVEL vosDebugLevel; + char logBuffer[LOG_SIZE]; + va_list marker; + + /* getting proper Debug level */ + vosDebugLevel = getVosDebugLevel(loglevel); + + /* extracting arguments from pstring */ + va_start( marker, pString ); + vsnprintf(logBuffer, LOG_SIZE, pString, marker); + + VOS_TRACE(VOS_MODULE_ID_PMC, vosDebugLevel, "%s", logBuffer); + va_end( marker ); +} + + void smsLog(tpAniSirGlobal pMac, tANI_U32 loglevel, const char *pString,...) { #ifdef WLAN_DEBUG @@ -5450,7 +6147,7 @@ eHalStatus sme_ScanGetBKIDCandidateList(tHalHandle hHal, tANI_U32 sessionId, \brief a wrapper function to obtain the OEM DATA RSP \param pOemDataRsp - A pointer to the response object \param pContext - a pointer passed in for the callback - \return eHalStatus + \return eHalStatus ---------------------------------------------------------------------------*/ eHalStatus sme_getOemDataRsp(tHalHandle hHal, tOemDataRsp **pOemDataRsp) @@ -5492,7 +6189,7 @@ eHalStatus sme_getOemDataRsp(tHalHandle hHal, \param pOemDataReqId - pointer to an object to get back the request ID \param callback - a callback function that is called upon finish \param pContext - a pointer passed in for the callback - \return eHalStatus + \return eHalStatus ---------------------------------------------------------------------------*/ eHalStatus sme_OemDataReq(tHalHandle hHal, tANI_U8 sessionId, @@ -5556,7 +6253,8 @@ eHalStatus sme_OemDataReq(tHalHandle hHal, \sa --------------------------------------------------------------------------*/ -eHalStatus sme_OpenSession(tHalHandle hHal, csrRoamCompleteCallback callback, void *pContext, +eHalStatus sme_OpenSession(tHalHandle hHal, csrRoamCompleteCallback callback, + void *pContext, tANI_U8 *pSelfMacAddr, tANI_U8 *pbSessionId, tANI_U32 type, tANI_U32 subType) { @@ -5573,11 +6271,14 @@ eHalStatus sme_OpenSession(tHalHandle hHal, csrRoamCompleteCallback callback, vo if ( HAL_STATUS_SUCCESS( status ) ) { status = csrRoamOpenSession( pMac, callback, pContext, pSelfMacAddr, - pbSessionId, type, subType ); + pbSessionId, type, subType ); sme_ReleaseGlobalLock( &pMac->sme ); } } + if( NULL != pbSessionId ) + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_OPEN_SESSION,*pbSessionId, 0)); return ( status ); } @@ -5607,10 +6308,12 @@ eHalStatus sme_CloseSession(tHalHandle hHal, tANI_U8 sessionId, eHalStatus status; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_CLOSE_SESSION, sessionId, 0)); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { - status = csrRoamCloseSession( pMac, sessionId, FALSE, + status = csrRoamCloseSession( pMac, sessionId, FALSE, callback, pContext ); sme_ReleaseGlobalLock( &pMac->sme ); @@ -5685,14 +6388,14 @@ eHalStatus sme_RoamUpdateAPWPARSNIEs(tHalHandle hHal, tANI_U8 sessionId, tSirRSN \fn sme_ChangeMCCBeaconInterval - \brief To update P2P-GO beaconInterval. This function should be called after - disassociating all the station is done + \brief To update P2P-GO beaconInterval. This function should be called after + disassociating all the station is done This is an asynchronous API. - \param + \param - \return eHalStatus SUCCESS - FAILURE or RESOURCES + \return eHalStatus SUCCESS + FAILURE or RESOURCES The API finished and failed. -------------------------------------------------------------------------------*/ @@ -5759,6 +6462,75 @@ eHalStatus sme_sendBTAmpEvent(tHalHandle hHal, tSmeBtAmpEvent btAmpEvent) } +/* --------------------------------------------------------------------------- + \fn smeIssueFastRoamNeighborAPEvent + \brief API to trigger fast BSS roam independent of RSSI triggers + \param hHal - The handle returned by macOpen. + \param bssid - Pointer to the BSSID to roam to. + \param fastRoamTrig - Trigger to Scan or roam + \return eHalStatus + ---------------------------------------------------------------------------*/ +eHalStatus smeIssueFastRoamNeighborAPEvent (tHalHandle hHal, + tANI_U8 *bssid, + tSmeFastRoamTrigger fastRoamTrig) +{ + tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + tpCsrNeighborRoamControlInfo pNeighborRoamInfo = &pMac->roam.neighborRoamInfo; + VOS_STATUS vosStatus = VOS_STATUS_SUCCESS; + eHalStatus status = eHAL_STATUS_SUCCESS; + + status = sme_AcquireGlobalLock( &pMac->sme ); + if ( HAL_STATUS_SUCCESS( status ) ) + { + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, + "%s: invoked", __func__); + + if (eSME_ROAM_TRIGGER_SCAN == fastRoamTrig) + { + smsLog(pMac, LOG1, FL("CFG Channel list scan... ")); + pNeighborRoamInfo->cfgRoamEn = eSME_ROAM_TRIGGER_SCAN; + vos_mem_copy((void *)(&pNeighborRoamInfo->cfgRoambssId), + (void *)bssid, sizeof(tSirMacAddr)); + smsLog(pMac, LOG1, "Calling Roam Look Up down Event BSSID %x %x %x %x %x %x", + pNeighborRoamInfo->cfgRoambssId[0], pNeighborRoamInfo->cfgRoambssId[1], + pNeighborRoamInfo->cfgRoambssId[2], pNeighborRoamInfo->cfgRoambssId[3], + pNeighborRoamInfo->cfgRoambssId[4], pNeighborRoamInfo->cfgRoambssId[5]); + + vosStatus = csrNeighborRoamTransitToCFGChanScan(pMac); + if (VOS_STATUS_SUCCESS != vosStatus) + { + smsLog(pMac, LOGE, + FL("CFG Channel list scan state failed with status %d "), + vosStatus); + } + } + else if (eSME_ROAM_TRIGGER_FAST_ROAM == fastRoamTrig) + { + vos_mem_copy((void *)(&pNeighborRoamInfo->cfgRoambssId), + (void *)bssid, sizeof(tSirMacAddr)); + pNeighborRoamInfo->cfgRoamEn = eSME_ROAM_TRIGGER_FAST_ROAM; + smsLog(pMac, LOG1, "Roam to BSSID %x-%x-%x-%x-%x-%x", + pNeighborRoamInfo->cfgRoambssId[0], pNeighborRoamInfo->cfgRoambssId[1], + pNeighborRoamInfo->cfgRoambssId[2], pNeighborRoamInfo->cfgRoambssId[3], + pNeighborRoamInfo->cfgRoambssId[4], pNeighborRoamInfo->cfgRoambssId[5]); + + vosStatus = csrNeighborRoamReassocIndCallback(pMac->roam.gVosContext, + 0, + pMac, + 0); + + if (!VOS_IS_STATUS_SUCCESS(vosStatus)) + { + smsLog(pMac, + LOGE, + FL(" Call to csrNeighborRoamReassocIndCallback failed, status = %d"), + vosStatus); + } + } + sme_ReleaseGlobalLock( &pMac->sme ); + } + return vosStatus; +} /* --------------------------------------------------------------------------- \fn sme_SetHostOffload \brief API to set the host offload feature. @@ -5766,12 +6538,14 @@ eHalStatus sme_sendBTAmpEvent(tHalHandle hHal, tSmeBtAmpEvent btAmpEvent) \param pRequest - Pointer to the offload request. \return eHalStatus ---------------------------------------------------------------------------*/ -eHalStatus sme_SetHostOffload (tHalHandle hHal, tANI_U8 sessionId, +eHalStatus sme_SetHostOffload (tHalHandle hHal, tANI_U8 sessionId, tpSirHostOffloadReq pRequest) { tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); eHalStatus status = eHAL_STATUS_FAILURE; + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_SET_HOSTOFFLOAD, sessionId, 0)); if ( eHAL_STATUS_SUCCESS == ( status = sme_AcquireGlobalLock( &pMac->sme ) ) ) { #ifdef WLAN_NS_OFFLOAD @@ -5798,12 +6572,14 @@ eHalStatus sme_SetHostOffload (tHalHandle hHal, tANI_U8 sessionId, \param pRequest - Pointer to the GTK offload request. \return eHalStatus ---------------------------------------------------------------------------*/ -eHalStatus sme_SetGTKOffload (tHalHandle hHal, tpSirGtkOffloadParams pRequest, +eHalStatus sme_SetGTKOffload (tHalHandle hHal, tpSirGtkOffloadParams pRequest, tANI_U8 sessionId) { tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); eHalStatus status; + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_SET_GTKOFFLOAD, sessionId, 0)); if ( eHAL_STATUS_SUCCESS == ( status = sme_AcquireGlobalLock( &pMac->sme ) ) ) { status = pmcSetGTKOffload( hHal, pRequest, sessionId ); @@ -5820,12 +6596,14 @@ eHalStatus sme_SetGTKOffload (tHalHandle hHal, tpSirGtkOffloadParams pRequest, \param pRequest - Pointer to the GTK offload response. \return eHalStatus ---------------------------------------------------------------------------*/ -eHalStatus sme_GetGTKOffload (tHalHandle hHal, GTKOffloadGetInfoCallback callbackRoutine, +eHalStatus sme_GetGTKOffload (tHalHandle hHal, GTKOffloadGetInfoCallback callbackRoutine, void *callbackContext, tANI_U8 sessionId ) { tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); eHalStatus status; + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_GET_GTKOFFLOAD, sessionId, 0)); if ( eHAL_STATUS_SUCCESS == ( status = sme_AcquireGlobalLock( &pMac->sme ) ) ) { pmcGetGTKOffload(hHal, callbackRoutine, callbackContext, sessionId); @@ -5843,7 +6621,7 @@ eHalStatus sme_GetGTKOffload (tHalHandle hHal, GTKOffloadGetInfoCallback callbac \param pRequest - Pointer to the Keep Alive request. \return eHalStatus ---------------------------------------------------------------------------*/ -eHalStatus sme_SetKeepAlive (tHalHandle hHal, tANI_U8 sessionId, +eHalStatus sme_SetKeepAlive (tHalHandle hHal, tANI_U8 sessionId, tpSirKeepAliveReq pRequest) { tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); @@ -5900,6 +6678,8 @@ eHalStatus sme_SetPowerParams(tHalHandle hHal, tSirSetPowerParamsReq* pwParams, tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); eHalStatus status; + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_SET_POWERPARAMS, NO_SESSION, 0)); if ( eHAL_STATUS_SUCCESS == ( status = sme_AcquireGlobalLock( &pMac->sme ) ) ) { pmcSetPowerParams(hHal, pwParams, forced); @@ -5923,14 +6703,16 @@ eHalStatus sme_AbortMacScan(tHalHandle hHal, tANI_U8 sessionId) eHalStatus status; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_ABORT_MACSCAN, NO_SESSION, 0)); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { status = csrScanAbortMacScan(pMac, sessionId); - + sme_ReleaseGlobalLock( &pMac->sme ); } - + return ( status ); } @@ -5951,7 +6733,7 @@ eHalStatus sme_GetOperationChannel(tHalHandle hHal, tANI_U32 *pChannel, tANI_U8 { pSession = CSR_GET_SESSION( pMac, sessionId ); - if(( pSession->connectedProfile.BSSType == eCSR_BSS_TYPE_INFRASTRUCTURE ) || + if(( pSession->connectedProfile.BSSType == eCSR_BSS_TYPE_INFRASTRUCTURE ) || ( pSession->connectedProfile.BSSType == eCSR_BSS_TYPE_IBSS ) || ( pSession->connectedProfile.BSSType == eCSR_BSS_TYPE_INFRA_AP ) || ( pSession->connectedProfile.BSSType == eCSR_BSS_TYPE_START_IBSS )) @@ -5967,53 +6749,57 @@ eHalStatus sme_GetOperationChannel(tHalHandle hHal, tANI_U32 *pChannel, tANI_U8 \fn sme_RegisterMgtFrame - \brief To register managment frame of specified type and subtype. + \brief To register managment frame of specified type and subtype. \param frameType - type of the frame that needs to be passed to HDD. \param matchData - data which needs to be matched before passing frame - to HDD. + to HDD. \param matchDataLen - Length of matched data. - \return eHalStatus + \return eHalStatus -------------------------------------------------------------------------------*/ -eHalStatus sme_RegisterMgmtFrame(tHalHandle hHal, tANI_U8 sessionId, +eHalStatus sme_RegisterMgmtFrame(tHalHandle hHal, tANI_U8 sessionId, tANI_U16 frameType, tANI_U8* matchData, tANI_U16 matchLen) { eHalStatus status = eHAL_STATUS_SUCCESS; tpAniSirGlobal pMac = PMAC_STRUCT(hHal); + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_REGISTER_MGMTFR, sessionId, 0)); if ( eHAL_STATUS_SUCCESS == ( status = sme_AcquireGlobalLock( &pMac->sme ) ) ) { tSirRegisterMgmtFrame *pMsg; tANI_U16 len; tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, sessionId ); - if(!pSession) + if(!CSR_IS_SESSION_ANY(sessionId) && !pSession) { smsLog(pMac, LOGE, FL(" session %d not found "), sessionId); sme_ReleaseGlobalLock( &pMac->sme ); return eHAL_STATUS_FAILURE; } - - if( !pSession->sessionActive ) + + if( !CSR_IS_SESSION_ANY(sessionId) && !pSession->sessionActive ) { VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, "%s Invalid Sessionid", __func__); sme_ReleaseGlobalLock( &pMac->sme ); return eHAL_STATUS_FAILURE; } - + len = sizeof(tSirRegisterMgmtFrame) + matchLen; - - status = palAllocateMemory(pMac->hHdd, (void**)&pMsg, len ); - if(HAL_STATUS_SUCCESS(status)) + + pMsg = vos_mem_malloc(len); + if ( NULL == pMsg ) + status = eHAL_STATUS_FAILURE; + else { - palZeroMemory(pMac->hHdd, pMsg, len); + vos_mem_set(pMsg, len, 0); pMsg->messageType = eWNI_SME_REGISTER_MGMT_FRAME_REQ; pMsg->length = len; pMsg->sessionId = sessionId; pMsg->registerFrame = VOS_TRUE; pMsg->frameType = frameType; pMsg->matchLen = matchLen; - palCopyMemory( pMac, pMsg->matchData, matchData, matchLen); + vos_mem_copy(pMsg->matchData, matchData, matchLen); status = palSendMBMessage(pMac->hHdd, pMsg); } sme_ReleaseGlobalLock( &pMac->sme ); @@ -6025,33 +6811,35 @@ eHalStatus sme_RegisterMgmtFrame(tHalHandle hHal, tANI_U8 sessionId, \fn sme_DeregisterMgtFrame - \brief To De-register managment frame of specified type and subtype. + \brief To De-register managment frame of specified type and subtype. \param frameType - type of the frame that needs to be passed to HDD. - \param matchData - data which needs to be matched before passing frame - to HDD. + \param matchData - data which needs to be matched before passing frame + to HDD. \param matchDataLen - Length of matched data. - \return eHalStatus + \return eHalStatus -------------------------------------------------------------------------------*/ -eHalStatus sme_DeregisterMgmtFrame(tHalHandle hHal, tANI_U8 sessionId, +eHalStatus sme_DeregisterMgmtFrame(tHalHandle hHal, tANI_U8 sessionId, tANI_U16 frameType, tANI_U8* matchData, tANI_U16 matchLen) { eHalStatus status = eHAL_STATUS_SUCCESS; tpAniSirGlobal pMac = PMAC_STRUCT(hHal); + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_DEREGISTER_MGMTFR, sessionId, 0)); if ( eHAL_STATUS_SUCCESS == ( status = sme_AcquireGlobalLock( &pMac->sme ) ) ) { tSirRegisterMgmtFrame *pMsg; tANI_U16 len; tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, sessionId ); - if(!pSession) + if(!CSR_IS_SESSION_ANY(sessionId) && !pSession) { smsLog(pMac, LOGE, FL(" session %d not found "), sessionId); sme_ReleaseGlobalLock( &pMac->sme ); return eHAL_STATUS_FAILURE; } - - if( !pSession->sessionActive ) + + if( !CSR_IS_SESSION_ANY(sessionId) && !pSession->sessionActive ) { VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, "%s Invalid Sessionid", __func__); @@ -6060,17 +6848,19 @@ eHalStatus sme_DeregisterMgmtFrame(tHalHandle hHal, tANI_U8 sessionId, } len = sizeof(tSirRegisterMgmtFrame) + matchLen; - - status = palAllocateMemory(pMac->hHdd, (void**)&pMsg, len ); - if(HAL_STATUS_SUCCESS(status)) + + pMsg = vos_mem_malloc(len); + if ( NULL == pMsg ) + status = eHAL_STATUS_FAILURE; + else { - palZeroMemory(pMac->hHdd, pMsg, len); + vos_mem_set(pMsg, len, 0); pMsg->messageType = eWNI_SME_REGISTER_MGMT_FRAME_REQ; - pMsg->length = len; + pMsg->length = len; pMsg->registerFrame = VOS_FALSE; pMsg->frameType = frameType; pMsg->matchLen = matchLen; - palCopyMemory( pMac, pMsg->matchData, matchData, matchLen); + vos_mem_copy(pMsg->matchData, matchData, matchLen); status = palSendMBMessage(pMac->hHdd, pMsg); } sme_ReleaseGlobalLock( &pMac->sme ); @@ -6088,18 +6878,21 @@ eHalStatus sme_DeregisterMgmtFrame(tHalHandle hHal, tANI_U8 sessionId, \param context - HDD Callback param \return eHalStatus ---------------------------------------------------------------------------*/ - eHalStatus sme_RemainOnChannel(tHalHandle hHal, tANI_U8 sessionId, tANI_U8 channel, tANI_U32 duration, - remainOnChanCallback callback, - void *pContext) + remainOnChanCallback callback, + void *pContext, + tANI_U8 isP2PProbeReqAllowed) { eHalStatus status = eHAL_STATUS_SUCCESS; tpAniSirGlobal pMac = PMAC_STRUCT(hHal); + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_REMAIN_ONCHAN, sessionId, 0)); if ( eHAL_STATUS_SUCCESS == ( status = sme_AcquireGlobalLock( &pMac->sme ) ) ) { - status = p2pRemainOnChannel (hHal, sessionId, channel, duration, callback, pContext + status = p2pRemainOnChannel (hHal, sessionId, channel, duration, callback, pContext, + isP2PProbeReqAllowed #ifdef WLAN_FEATURE_P2P_INTERNAL , eP2PRemainOnChnReasonUnknown #endif @@ -6155,6 +6948,8 @@ eHalStatus sme_updateP2pIe(tHalHandle hHal, void *p2pIe, tANI_U32 p2pIeLength) eHalStatus status = eHAL_STATUS_SUCCESS; tpAniSirGlobal pMac = PMAC_STRUCT(hHal); + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_SEND_ACTION, NO_SESSION, 0)); //acquire the lock for the sme object status = sme_AcquireGlobalLock(&pMac->sme); if(HAL_STATUS_SUCCESS(status)) @@ -6177,7 +6972,7 @@ eHalStatus sme_updateP2pIe(tHalHandle hHal, void *p2pIe, tANI_U32 p2pIeLength) sirDumpBuf( pMac, SIR_LIM_MODULE_ID, LOG2, pMac->p2pContext.probeRspIe, - pMac->p2pContext.probeRspIeLength ); + pMac->p2pContext.probeRspIeLength ); vos_mem_copy((tANI_U8 *)pMac->p2pContext.probeRspIe, p2pIe, p2pIeLength); } @@ -6185,7 +6980,7 @@ eHalStatus sme_updateP2pIe(tHalHandle hHal, void *p2pIe, tANI_U32 p2pIeLength) //release the lock for the sme object sme_ReleaseGlobalLock( &pMac->sme ); } - + smsLog(pMac, LOG2, "exiting function %s", __func__); return(status); @@ -6225,6 +7020,8 @@ eHalStatus sme_CancelRemainOnChannel(tHalHandle hHal, tANI_U8 sessionId ) eHalStatus status = eHAL_STATUS_SUCCESS; tpAniSirGlobal pMac = PMAC_STRUCT(hHal); + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_CANCEL_REMAIN_ONCHAN, sessionId, 0)); if ( eHAL_STATUS_SUCCESS == ( status = sme_AcquireGlobalLock( &pMac->sme ) ) ) { status = p2pCancelRemainOnChannel (hHal, sessionId); @@ -6252,14 +7049,14 @@ eHalStatus sme_p2pSetPs(tHalHandle hHal, tP2pPsConfig * data) \fn sme_ConfigureRxpFilter - \brief + \brief SME will pass this request to lower mac to set/reset the filter on RXP for multicast & broadcast traffic. - \param + \param + + hHal - The handle returned by macOpen. - hHal - The handle returned by macOpen. - filterMask- Currently the API takes a 1 or 0 (set or reset) as filter. Basically to enable/disable the filter (to filter "all" mcbc traffic) based on this param. In future we can use this as a mask to set various types of @@ -6268,12 +7065,12 @@ eHalStatus sme_p2pSetPs(tHalHandle hHal, tP2pPsConfig * data) FILTER_ALL_BROADCAST: FILTER_ALL_MULTICAST_BROADCAST: - - \return eHalStatus - - + + \return eHalStatus + + --------------------------------------------------------------------------- */ -eHalStatus sme_ConfigureRxpFilter( tHalHandle hHal, +eHalStatus sme_ConfigureRxpFilter( tHalHandle hHal, tpSirWlanSetRxpFilters wlanRxpFilterParam) { eHalStatus status = eHAL_STATUS_SUCCESS; @@ -6281,6 +7078,8 @@ eHalStatus sme_ConfigureRxpFilter( tHalHandle hHal, tpAniSirGlobal pMac = PMAC_STRUCT(hHal); vos_msg_t vosMessage; + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_CONFIG_RXPFIL, NO_SESSION, 0)); if ( eHAL_STATUS_SUCCESS == ( status = sme_AcquireGlobalLock( &pMac->sme ) ) ) { /* serialize the req through MC thread */ @@ -6300,16 +7099,19 @@ eHalStatus sme_ConfigureRxpFilter( tHalHandle hHal, \fn sme_ConfigureSuspendInd - \brief + \brief SME will pass this request to lower mac to Indicate that the wlan needs to be suspended - \param + \param - hHal - The handle returned by macOpen. + hHal - The handle returned by macOpen. wlanSuspendParam- Depicts the wlan suspend params + csrReadyToSuspendCallback - Callback to be called when ready to suspend + event is received. + callbackContext - Context associated with csrReadyToSuspendCallback. \return eHalStatus @@ -6325,6 +7127,8 @@ eHalStatus sme_ConfigureSuspendInd( tHalHandle hHal, tpAniSirGlobal pMac = PMAC_STRUCT(hHal); vos_msg_t vosMessage; + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_CONFIG_SUSPENDIND, NO_SESSION, 0)); if ( eHAL_STATUS_SUCCESS == ( status = sme_AcquireGlobalLock( &pMac->sme ) ) ) { /* serialize the req through MC thread */ @@ -6351,22 +7155,22 @@ eHalStatus sme_ConfigureSuspendInd( tHalHandle hHal, \fn sme_ConfigureResumeReq - \brief + \brief SME will pass this request to lower mac to Indicate that the wlan needs to be Resumed - \param + \param - hHal - The handle returned by macOpen. + hHal - The handle returned by macOpen. wlanResumeParam- Depicts the wlan resume params - - \return eHalStatus - - + + \return eHalStatus + + --------------------------------------------------------------------------- */ -eHalStatus sme_ConfigureResumeReq( tHalHandle hHal, +eHalStatus sme_ConfigureResumeReq( tHalHandle hHal, tpSirWlanResumeParam wlanResumeParam) { eHalStatus status = eHAL_STATUS_SUCCESS; @@ -6374,6 +7178,8 @@ eHalStatus sme_ConfigureResumeReq( tHalHandle hHal, tpAniSirGlobal pMac = PMAC_STRUCT(hHal); vos_msg_t vosMessage; + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_CONFIG_RESUMEREQ, NO_SESSION, 0)); if ( eHAL_STATUS_SUCCESS == ( status = sme_AcquireGlobalLock( &pMac->sme ) ) ) { /* serialize the req through MC thread */ @@ -6406,7 +7212,7 @@ tANI_S8 sme_GetInfraSessionId(tHalHandle hHal) eHalStatus status = eHAL_STATUS_FAILURE; tANI_S8 sessionid = -1; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - + status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { @@ -6450,11 +7256,11 @@ tANI_U8 sme_GetInfraOperationChannel( tHalHandle hHal, tANI_U8 sessionId) } //This routine will return poerating channel on which other BSS is operating to be used for concurrency mode. -//If other BSS is not up or not connected it will return 0 +//If other BSS is not up or not connected it will return 0 tANI_U8 sme_GetConcurrentOperationChannel( tHalHandle hHal ) { eHalStatus status = eHAL_STATUS_FAILURE; - tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); tANI_U8 channel = 0; status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) @@ -6475,7 +7281,7 @@ tANI_U8 sme_GetConcurrentOperationChannel( tHalHandle hHal ) * Name: sme_PreferredNetworkFoundInd * * Description: -* Invoke Preferred Network Found Indication +* Invoke Preferred Network Found Indication * * Parameters: * hHal - HAL handle for device @@ -6504,8 +7310,8 @@ eHalStatus sme_PreferredNetworkFoundInd (tHalHandle hHal, void* pMsg) if (pMac->pmc.prefNetwFoundCB != NULL) { pMac->pmc.prefNetwFoundCB( - pMac->pmc.preferredNetworkFoundIndCallbackContext, - pPrefNetworkFoundInd); + pMac->pmc.preferredNetworkFoundIndCallbackContext, + pPrefNetworkFoundInd); } return status; } @@ -6524,7 +7330,7 @@ eHalStatus sme_PreferredNetworkFoundInd (tHalHandle hHal, void* pMsg) { //we may have a frame status = csrScanSavePreferredNetworkFound(pMac, - pPrefNetworkFoundInd); + pPrefNetworkFoundInd); if (!HAL_STATUS_SUCCESS(status)) { smsLog(pMac, LOGE, FL(" fail to save preferred network")); @@ -6543,12 +7349,12 @@ eHalStatus sme_PreferredNetworkFoundInd (tHalHandle hHal, void* pMsg) pMac->pmc.preferredNetworkFoundIndCallbackContext, pPrefNetworkFoundInd); } - } - else - { + } + else + { smsLog(pMac, LOGE, "%s: callback failed - SSID is NULL", __func__); status = eHAL_STATUS_FAILURE; - } + } return(status); } @@ -6560,14 +7366,14 @@ eHalStatus sme_GetCfgValidChannels(tHalHandle hHal, tANI_U8 *aValidChannels, tAN { eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - + status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { status = csrGetCfgValidChannels(pMac, aValidChannels, len); sme_ReleaseGlobalLock( &pMac->sme ); } - + return (status); } @@ -6584,8 +7390,8 @@ eHalStatus sme_GetCfgValidChannels(tHalHandle hHal, tANI_U8 *aValidChannels, tAN \return eHalStatus -------------------------------------------------------------------------------*/ -eHalStatus sme_SetTxPerTracking(tHalHandle hHal, - void (*pCallbackfn) (void *pCallbackContext), +eHalStatus sme_SetTxPerTracking(tHalHandle hHal, + void (*pCallbackfn) (void *pCallbackContext), void *pCallbackContext, tpSirTxPerTrackingParam pTxPerTrackingParam) { @@ -6599,7 +7405,7 @@ eHalStatus sme_SetTxPerTracking(tHalHandle hHal, pMac->sme.pTxPerHitCbContext = pCallbackContext; sme_ReleaseGlobalLock( &pMac->sme ); } - + // free this memory in failure case or WDA request callback function pTxPerTrackingParamReq = vos_mem_malloc(sizeof(tSirTxPerTrackingParam)); if (NULL == pTxPerTrackingParamReq) @@ -6608,7 +7414,8 @@ eHalStatus sme_SetTxPerTracking(tHalHandle hHal, return eHAL_STATUS_FAILURE; } - vos_mem_copy(pTxPerTrackingParamReq, (void*)pTxPerTrackingParam, sizeof(tSirTxPerTrackingParam)); + vos_mem_copy(pTxPerTrackingParamReq, (void*)pTxPerTrackingParam, + sizeof(tSirTxPerTrackingParam)); msg.type = WDA_SET_TX_PER_TRACKING_REQ; msg.reserved = 0; msg.bodyptr = pTxPerTrackingParamReq; @@ -6652,7 +7459,7 @@ eHalStatus sme_HandleChangeCountryCode(tpAniSirGlobal pMac, void *pMsgBuf) { eHalStatus status = eHAL_STATUS_SUCCESS; tAniChangeCountryCodeReq *pMsg; - v_REGDOMAIN_t domainIdIoctl; + v_REGDOMAIN_t domainIdIoctl; VOS_STATUS vosStatus = VOS_STATUS_SUCCESS; static uNvTables nvTables; pMsg = (tAniChangeCountryCodeReq *)pMsgBuf; @@ -6668,7 +7475,9 @@ eHalStatus sme_HandleChangeCountryCode(tpAniSirGlobal pMac, void *pMsgBuf) /* read the country code from NV and use it */ if ( VOS_IS_STATUS_SUCCESS(vosStatus) ) { - palCopyMemory( pMac->hHdd, pMsg->countryCode , nvTables.defaultCountryTable.countryCode, WNI_CFG_COUNTRY_CODE_LEN ); + vos_mem_copy(pMsg->countryCode, + nvTables.defaultCountryTable.countryCode, + WNI_CFG_COUNTRY_CODE_LEN); } else { @@ -6679,7 +7488,8 @@ eHalStatus sme_HandleChangeCountryCode(tpAniSirGlobal pMac, void *pMsgBuf) else { /* if Supplicant country code has priority, disable 11d */ - if(pMac->roam.configParam.fSupplicantCountryCodeHasPriority) + if(pMac->roam.configParam.fSupplicantCountryCodeHasPriority && + pMsg->countryFromUserSpace) { pMac->roam.configParam.Is11dSupportEnabled = eANI_BOOLEAN_FALSE; } @@ -6710,7 +7520,7 @@ eHalStatus sme_HandleChangeCountryCode(tpAniSirGlobal pMac, void *pMsgBuf) /* Supplicant country code failed. So give 11D priority */ pMac->roam.configParam.Is11dSupportEnabled = pMac->roam.configParam.Is11dSupportEnabledOriginal; smsLog(pMac, LOGE, "Set Country Code Fail %d", status); - return status; + return status; } status = WDA_SetCountryCode(pMac, pMsg->countryCode); @@ -6721,31 +7531,49 @@ eHalStatus sme_HandleChangeCountryCode(tpAniSirGlobal pMac, void *pMsgBuf) return status; } - /* purge current scan results - if i don't do this than I still get old ap's (of different country code) as available (even if they are powered off). - Looks like a bug in current scan sequence. - */ - csrScanFlushResult(pMac); - /* overwrite the defualt country code */ - palCopyMemory(pMac->hHdd, pMac->scan.countryCodeDefault, pMac->scan.countryCodeCurrent, WNI_CFG_COUNTRY_CODE_LEN); + vos_mem_copy(pMac->scan.countryCodeDefault, + pMac->scan.countryCodeCurrent, + WNI_CFG_COUNTRY_CODE_LEN); /* Get Domain ID from country code */ - status = csrGetRegulatoryDomainForCountry( pMac, pMac->scan.countryCodeCurrent,(v_REGDOMAIN_t *) &domainIdIoctl ); + status = csrGetRegulatoryDomainForCountry(pMac, + pMac->scan.countryCodeCurrent, + (v_REGDOMAIN_t *) &domainIdIoctl, + COUNTRY_QUERY); if ( status != eHAL_STATUS_SUCCESS ) { smsLog( pMac, LOGE, FL(" fail to get regId %d"), domainIdIoctl ); return status; } + else if (REGDOMAIN_WORLD == domainIdIoctl) + { + /* Supplicant country code is invalid, so we are on world mode now. So + give 11D chance to update */ + pMac->roam.configParam.Is11dSupportEnabled = pMac->roam.configParam.Is11dSupportEnabledOriginal; + smsLog(pMac, LOG1, FL("Country Code unrecognized by driver")); + } + - status = WDA_SetRegDomain(pMac, domainIdIoctl); + status = WDA_SetRegDomain(pMac, domainIdIoctl, pMsg->sendRegHint); if ( status != eHAL_STATUS_SUCCESS ) { smsLog( pMac, LOGE, FL(" fail to set regId %d"), domainIdIoctl ); return status; } - + else + { + //if 11d has priority, clear currentCountryBssid & countryCode11d to get + //set again if we find AP with 11d info during scan + if (!pMac->roam.configParam.fSupplicantCountryCodeHasPriority) + { + smsLog( pMac, LOGW, FL("Clearing currentCountryBssid, countryCode11d")); + vos_mem_zero(&pMac->scan.currentCountryBssid, sizeof(tCsrBssid)); + vos_mem_zero( pMac->scan.countryCode11d, sizeof( pMac->scan.countryCode11d ) ); + } + } +#ifndef CONFIG_ENABLE_LINUX_REG /* set to default domain ID */ pMac->scan.domainIdDefault = pMac->scan.domainIdCurrent; @@ -6760,6 +7588,7 @@ eHalStatus sme_HandleChangeCountryCode(tpAniSirGlobal pMac, void *pMsgBuf) /* reset info based on new cc, and we are done */ csrResetCountryInformation(pMac, eANI_BOOLEAN_TRUE, eANI_BOOLEAN_TRUE); +#endif if( pMsg->changeCCCallback ) { ((tSmeChangeCountryCallback)(pMsg->changeCCCallback))((void *)pMsg->pDevContext); @@ -6768,6 +7597,211 @@ eHalStatus sme_HandleChangeCountryCode(tpAniSirGlobal pMac, void *pMsgBuf) return eHAL_STATUS_SUCCESS; } +/* --------------------------------------------------------------------------- + + \fn sme_HandleChangeCountryCodeByUser + + \brief Change Country code, Reg Domain and channel list + + If Supplicant country code is priority than 11d is disabled. + If 11D is enabled, we update the country code after every scan. + Hence when Supplicant country code is priority, we don't need 11D info. + Country code from Supplicant is set as current country code. + + \param pMac - The handle returned by macOpen. + \param pMsg - Carrying new CC & domain set in kernel by user + + \return eHalStatus + + -------------------------------------------------------------------------------*/ +eHalStatus sme_HandleChangeCountryCodeByUser(tpAniSirGlobal pMac, + tAniGenericChangeCountryCodeReq *pMsg) +{ + eHalStatus status = eHAL_STATUS_SUCCESS; + v_REGDOMAIN_t reg_domain_id; + v_BOOL_t is11dCountry = VOS_FALSE; + + smsLog(pMac, LOG1, FL(" called")); + reg_domain_id = (v_REGDOMAIN_t)pMsg->domain_index; + + if (memcmp(pMsg->countryCode, pMac->scan.countryCode11d, + VOS_COUNTRY_CODE_LEN) == 0) + { + is11dCountry = VOS_TRUE; + } + + if ((!is11dCountry) && (!pMac->roam.configParam.fSupplicantCountryCodeHasPriority) && + (csrGetInfraSessionId(pMac) != -1 )) + { + + smsLog( pMac, LOGW, FL(" incorrect country being set, nullify this request")); + + /* we have got a request for a country that should not have been added since the + STA is associated; nullify this request */ + status = csrGetRegulatoryDomainForCountry(pMac, + pMac->scan.countryCode11d, + (v_REGDOMAIN_t *) ®_domain_id, + COUNTRY_IE); + + return eHAL_STATUS_FAILURE; + } + + /* if Supplicant country code has priority, disable 11d */ + if (!is11dCountry && pMac->roam.configParam.fSupplicantCountryCodeHasPriority) + { + pMac->roam.configParam.Is11dSupportEnabled = eANI_BOOLEAN_FALSE; + } + + vos_mem_copy(pMac->scan.countryCodeCurrent, pMsg->countryCode, + WNI_CFG_COUNTRY_CODE_LEN); + + status = WDA_SetRegDomain(pMac, reg_domain_id, eSIR_TRUE); + + if (VOS_FALSE == is11dCountry ) + { + /* overwrite the defualt country code */ + vos_mem_copy(pMac->scan.countryCodeDefault, + pMac->scan.countryCodeCurrent, WNI_CFG_COUNTRY_CODE_LEN); + /* set to default domain ID */ + pMac->scan.domainIdDefault = pMac->scan.domainIdCurrent; + } + + if ( status != eHAL_STATUS_SUCCESS ) + { + smsLog( pMac, LOGE, FL(" fail to set regId %d"), reg_domain_id ); + return status; + } + else + { + //if 11d has priority, clear currentCountryBssid & countryCode11d to get + //set again if we find AP with 11d info during scan + if((!pMac->roam.configParam.fSupplicantCountryCodeHasPriority) && + (VOS_FALSE == is11dCountry )) + { + smsLog( pMac, LOGW, FL("Clearing currentCountryBssid, countryCode11d")); + vos_mem_zero(&pMac->scan.currentCountryBssid, sizeof(tCsrBssid)); + vos_mem_zero( pMac->scan.countryCode11d, sizeof( pMac->scan.countryCode11d ) ); + } + } + + /* get the channels based on new cc */ + status = csrInitGetChannels(pMac); + + if ( status != eHAL_STATUS_SUCCESS ) + { + smsLog( pMac, LOGE, FL(" fail to get Channels ")); + return status; + } + + /* reset info based on new cc, and we are done */ + csrResetCountryInformation(pMac, eANI_BOOLEAN_TRUE, eANI_BOOLEAN_TRUE); + if (VOS_TRUE == is11dCountry) + { + pMac->scan.f11dInfoApplied = eANI_BOOLEAN_TRUE; + pMac->scan.f11dInfoReset = eANI_BOOLEAN_FALSE; + } + + // Do active scans after the country is set by User hints or Country IE + pMac->scan.curScanType = eSIR_ACTIVE_SCAN; + + smsLog(pMac, LOG1, FL(" returned")); + return eHAL_STATUS_SUCCESS; +} + +/* --------------------------------------------------------------------------- + + \fn sme_HandleChangeCountryCodeByCore + + \brief Update Country code in the driver if set by kernel as world + + If 11D is enabled, we update the country code after every scan & notify kernel. + This is to make sure kernel & driver are in sync in case of CC found in + driver but not in kernel database + + \param pMac - The handle returned by macOpen. + \param pMsg - Carrying new CC set in kernel + + \return eHalStatus + + -------------------------------------------------------------------------------*/ +eHalStatus sme_HandleChangeCountryCodeByCore(tpAniSirGlobal pMac, tAniGenericChangeCountryCodeReq *pMsg) +{ + eHalStatus status; + + smsLog(pMac, LOG1, FL(" called")); + + //this is to make sure kernel & driver are in sync in case of CC found in + //driver but not in kernel database + if (('0' == pMsg->countryCode[0]) && ('0' == pMsg->countryCode[1])) + { + smsLog( pMac, LOGW, FL("Setting countryCode11d & countryCodeCurrent to world CC")); + vos_mem_copy(pMac->scan.countryCode11d, pMsg->countryCode, + WNI_CFG_COUNTRY_CODE_LEN); + vos_mem_copy(pMac->scan.countryCodeCurrent, pMsg->countryCode, + WNI_CFG_COUNTRY_CODE_LEN); + } + + status = WDA_SetRegDomain(pMac, REGDOMAIN_WORLD, eSIR_TRUE); + + if ( status != eHAL_STATUS_SUCCESS ) + { + smsLog( pMac, LOGE, FL(" fail to set regId") ); + return status; + } + else + { + status = csrInitGetChannels(pMac); + if ( status != eHAL_STATUS_SUCCESS ) + { + smsLog( pMac, LOGE, FL(" fail to get Channels ")); + } + else + { + csrInitChannelList(pMac); + } + } + smsLog(pMac, LOG1, FL(" returned")); + return eHAL_STATUS_SUCCESS; +} + +/* --------------------------------------------------------------------------- + + \fn sme_HandleGenericChangeCountryCode + + \brief Change Country code, Reg Domain and channel list + + If Supplicant country code is priority than 11d is disabled. + If 11D is enabled, we update the country code after every scan. + Hence when Supplicant country code is priority, we don't need 11D info. + Country code from kernel is set as current country code. + + \param pMac - The handle returned by macOpen. + \param pMsgBuf - message buffer + + \return eHalStatus + + -------------------------------------------------------------------------------*/ +eHalStatus sme_HandleGenericChangeCountryCode(tpAniSirGlobal pMac, void *pMsgBuf) +{ + tAniGenericChangeCountryCodeReq *pMsg; + v_REGDOMAIN_t reg_domain_id; + + smsLog(pMac, LOG1, FL(" called")); + pMsg = (tAniGenericChangeCountryCodeReq *)pMsgBuf; + reg_domain_id = (v_REGDOMAIN_t)pMsg->domain_index; + + if (REGDOMAIN_COUNT == reg_domain_id) + { + sme_HandleChangeCountryCodeByCore(pMac, pMsg); + } + else + { + sme_HandleChangeCountryCodeByUser(pMac, pMsg); + } + smsLog(pMac, LOG1, FL(" returned")); + return eHAL_STATUS_SUCCESS; +} + #ifdef WLAN_FEATURE_PACKET_FILTERING eHalStatus sme_8023MulticastList (tHalHandle hHal, tANI_U8 sessionId, tpSirRcvFltMcAddrList pMulticastAddrs) { @@ -6815,8 +7849,9 @@ eHalStatus sme_8023MulticastList (tHalHandle hHal, tANI_U8 sessionId, tpSirRcvFl vos_mem_copy(pRequestBuf, pMulticastAddrs, sizeof(tSirRcvFltMcAddrList)); - vos_mem_copy(pRequestBuf->selfMacAddr, pSession->selfMacAddr, sizeof(tSirMacAddr)); - vos_mem_copy(pRequestBuf->bssId, pSession->connectedProfile.bssid, + vos_mem_copy(pRequestBuf->selfMacAddr, pSession->selfMacAddr, + sizeof(tSirMacAddr)); + vos_mem_copy(pRequestBuf->bssId, pSession->connectedProfile.bssid, sizeof(tSirMacAddr)); msg.type = WDA_8023_MULTICAST_LIST_REQ; @@ -6833,7 +7868,7 @@ eHalStatus sme_8023MulticastList (tHalHandle hHal, tANI_U8 sessionId, tpSirRcvFl return eHAL_STATUS_SUCCESS; } -eHalStatus sme_ReceiveFilterSetFilter(tHalHandle hHal, tpSirRcvPktFilterCfgType pRcvPktFilterCfg, +eHalStatus sme_ReceiveFilterSetFilter(tHalHandle hHal, tpSirRcvPktFilterCfgType pRcvPktFilterCfg, tANI_U8 sessionId) { tpSirRcvPktFilterCfgType pRequestBuf; @@ -6846,9 +7881,9 @@ eHalStatus sme_ReceiveFilterSetFilter(tHalHandle hHal, tpSirRcvPktFilterCfgType VOS_TRACE( VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, "%s: filterType=%d, " "filterId = %d", __func__, pRcvPktFilterCfg->filterType, pRcvPktFilterCfg->filterId); - + allocSize = sizeof(tSirRcvPktFilterCfgType); - + pRequestBuf = vos_mem_malloc(allocSize); if (NULL == pRequestBuf) @@ -6864,11 +7899,11 @@ eHalStatus sme_ReceiveFilterSetFilter(tHalHandle hHal, tpSirRcvPktFilterCfgType vos_mem_free(pRequestBuf); return eHAL_STATUS_FAILURE; } - - vos_mem_copy( pRcvPktFilterCfg->selfMacAddr, pSession->selfMacAddr, sizeof(tSirMacAddr)); - vos_mem_copy( pRcvPktFilterCfg->bssId, pSession->connectedProfile.bssid, - sizeof(tSirMacAddr)); + vos_mem_copy(pRcvPktFilterCfg->selfMacAddr, pSession->selfMacAddr, + sizeof(tSirMacAddr)); + vos_mem_copy(pRcvPktFilterCfg->bssId, pSession->connectedProfile.bssid, + sizeof(tSirMacAddr)); vos_mem_copy(pRequestBuf, pRcvPktFilterCfg, allocSize); msg.type = WDA_RECEIVE_FILTER_SET_FILTER_REQ; @@ -6876,12 +7911,12 @@ eHalStatus sme_ReceiveFilterSetFilter(tHalHandle hHal, tpSirRcvPktFilterCfgType msg.bodyptr = pRequestBuf; VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, "Pkt Flt Req : " - "FT %d FID %d ", - pRequestBuf->filterType, pRequestBuf->filterId); + "FT %d FID %d ", + pRequestBuf->filterType, pRequestBuf->filterId); VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, "Pkt Flt Req : " - "params %d CT %d", - pRequestBuf->numFieldParams, pRequestBuf->coalesceTime); + "params %d CT %d", + pRequestBuf->numFieldParams, pRequestBuf->coalesceTime); for (idx=0; idxnumFieldParams; idx++) { @@ -6899,7 +7934,7 @@ eHalStatus sme_ReceiveFilterSetFilter(tHalHandle hHal, tpSirRcvPktFilterCfgType VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, "CData: %d:%d:%d:%d:%d:%d", pRequestBuf->paramsData[idx].compareData[0], - pRequestBuf->paramsData[idx].compareData[1], + pRequestBuf->paramsData[idx].compareData[1], pRequestBuf->paramsData[idx].compareData[2], pRequestBuf->paramsData[idx].compareData[3], pRequestBuf->paramsData[idx].compareData[4], @@ -6908,7 +7943,7 @@ eHalStatus sme_ReceiveFilterSetFilter(tHalHandle hHal, tpSirRcvPktFilterCfgType VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, "MData: %d:%d:%d:%d:%d:%d", pRequestBuf->paramsData[idx].dataMask[0], - pRequestBuf->paramsData[idx].dataMask[1], + pRequestBuf->paramsData[idx].dataMask[1], pRequestBuf->paramsData[idx].dataMask[2], pRequestBuf->paramsData[idx].dataMask[3], pRequestBuf->paramsData[idx].dataMask[4], @@ -6927,9 +7962,9 @@ eHalStatus sme_ReceiveFilterSetFilter(tHalHandle hHal, tpSirRcvPktFilterCfgType return eHAL_STATUS_SUCCESS; } -eHalStatus sme_GetFilterMatchCount(tHalHandle hHal, +eHalStatus sme_GetFilterMatchCount(tHalHandle hHal, FilterMatchCountCallback callbackRoutine, - void *callbackContext, + void *callbackContext, tANI_U8 sessionId) { tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); @@ -6948,7 +7983,7 @@ eHalStatus sme_GetFilterMatchCount(tHalHandle hHal, return (status); } -eHalStatus sme_ReceiveFilterClearFilter(tHalHandle hHal, tpSirRcvFltPktClearParam pRcvFltPktClearParam, +eHalStatus sme_ReceiveFilterClearFilter(tHalHandle hHal, tpSirRcvFltPktClearParam pRcvFltPktClearParam, tANI_U8 sessionId) { tpSirRcvFltPktClearParam pRequestBuf; @@ -6958,7 +7993,7 @@ eHalStatus sme_ReceiveFilterClearFilter(tHalHandle hHal, tpSirRcvFltPktClearPara VOS_TRACE( VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, "%s: filterId = %d", __func__, pRcvFltPktClearParam->filterId); - + pRequestBuf = vos_mem_malloc(sizeof(tSirRcvFltPktClearParam)); if (NULL == pRequestBuf) { @@ -6975,9 +8010,10 @@ eHalStatus sme_ReceiveFilterClearFilter(tHalHandle hHal, tpSirRcvFltPktClearPara return eHAL_STATUS_FAILURE; } - vos_mem_copy( pRcvFltPktClearParam->selfMacAddr, pSession->selfMacAddr, sizeof(tSirMacAddr)); - vos_mem_copy( pRcvFltPktClearParam->bssId, pSession->connectedProfile.bssid, - sizeof(tSirMacAddr)); + vos_mem_copy(pRcvFltPktClearParam->selfMacAddr, pSession->selfMacAddr, + sizeof(tSirMacAddr)); + vos_mem_copy(pRcvFltPktClearParam->bssId, pSession->connectedProfile.bssid, + sizeof(tSirMacAddr)); vos_mem_copy(pRequestBuf, pRcvFltPktClearParam, sizeof(tSirRcvFltPktClearParam)); @@ -6998,12 +8034,12 @@ eHalStatus sme_ReceiveFilterClearFilter(tHalHandle hHal, tpSirRcvFltPktClearPara /* --------------------------------------------------------------------------- \fn sme_PreChannelSwitchIndFullPowerCB - \brief call back function for the PMC full power request because of pre + \brief call back function for the PMC full power request because of pre channel switch. \param callbackContext \param status ---------------------------------------------------------------------------*/ -void sme_PreChannelSwitchIndFullPowerCB(void *callbackContext, +void sme_PreChannelSwitchIndFullPowerCB(void *callbackContext, eHalStatus status) { tpAniSirGlobal pMac = (tpAniSirGlobal)callbackContext; @@ -7011,14 +8047,14 @@ void sme_PreChannelSwitchIndFullPowerCB(void *callbackContext, tANI_U16 msgLen; msgLen = (tANI_U16)(sizeof( tSirMbMsg )); - status = palAllocateMemory(pMac->hHdd, (void **)&pMsg, msgLen); - if(HAL_STATUS_SUCCESS(status)) + pMsg = vos_mem_malloc(msgLen); + if ( NULL != pMsg ) { - palZeroMemory(pMac->hHdd, (void *)pMsg, msgLen); + vos_mem_set(pMsg, msgLen, 0); pMsg->type = pal_cpu_to_be16((tANI_U16)eWNI_SME_PRE_CHANNEL_SWITCH_FULL_POWER); pMsg->msgLen = pal_cpu_to_be16(msgLen); status = palSendMBMessage(pMac->hHdd, pMsg); - } + } return; } @@ -7036,8 +8072,8 @@ eHalStatus sme_HandlePreChannelSwitchInd(tHalHandle hHal) status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { - status = pmcRequestFullPower(hHal, sme_PreChannelSwitchIndFullPowerCB, - pMac, eSME_FULL_PWR_NEEDED_BY_CHANNEL_SWITCH); + status = pmcRequestFullPower(hHal, sme_PreChannelSwitchIndFullPowerCB, + pMac, eSME_FULL_PWR_NEEDED_BY_CHANNEL_SWITCH); sme_ReleaseGlobalLock( &pMac->sme ); } @@ -7083,7 +8119,7 @@ tANI_BOOLEAN sme_IsChannelValid(tHalHandle hHal, tANI_U8 channel) eHalStatus status = eHAL_STATUS_FAILURE; tANI_BOOLEAN valid = FALSE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - + status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { @@ -7148,7 +8184,7 @@ eHalStatus sme_GetFreqBand(tHalHandle hHal, eCsrBand *pBand) \param hHal - HAL handle for device \param pMsg - Message body passed from WDA; includes Wake Reason Indication parameter - \return eHalStatus + \return eHalStatus ******************************************************************************/ eHalStatus sme_WakeReasonIndCallback (tHalHandle hHal, void* pMsg) { @@ -7168,7 +8204,7 @@ eHalStatus sme_WakeReasonIndCallback (tHalHandle hHal, void* pMsg) /* Call Wake Reason Indication callback routine. */ if (pMac->pmc.wakeReasonIndCB != NULL) pMac->pmc.wakeReasonIndCB(pMac->pmc.wakeReasonIndCBContext, pWakeReasonInd); - + pMac->pmc.wakeReasonIndCB = NULL; pMac->pmc.wakeReasonIndCBContext = NULL; @@ -7180,6 +8216,50 @@ eHalStatus sme_WakeReasonIndCallback (tHalHandle hHal, void* pMsg) #endif // WLAN_WAKEUP_EVENTS +/* --------------------------------------------------------------------------- + \fn sme_SetMaxTxPowerPerBand + + \brief Set the Maximum Transmit Power specific to band dynamically. + Note: this setting will not persist over reboots. + + \param band + \param power to set in dB + \- return eHalStatus + + ----------------------------------------------------------------------------*/ +eHalStatus sme_SetMaxTxPowerPerBand(eCsrBand band, v_S7_t dB) +{ + vos_msg_t msg; + tpMaxTxPowerPerBandParams pMaxTxPowerPerBandParams = NULL; + + pMaxTxPowerPerBandParams = vos_mem_malloc(sizeof(tMaxTxPowerPerBandParams)); + if (NULL == pMaxTxPowerPerBandParams) + { + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, + "%s:Not able to allocate memory for pMaxTxPowerPerBandParams", + __func__); + return eHAL_STATUS_FAILURE; + } + + pMaxTxPowerPerBandParams->power = dB; + pMaxTxPowerPerBandParams->bandInfo = band; + + msg.type = WDA_SET_MAX_TX_POWER_PER_BAND_REQ; + msg.reserved = 0; + msg.bodyptr = pMaxTxPowerPerBandParams; + + if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MODULE_ID_WDA, &msg)) + { + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, + "%s:Not able to post WDA_SET_MAX_TX_POWER_PER_BAND_REQ", + __func__); + vos_mem_free(pMaxTxPowerPerBandParams); + return eHAL_STATUS_FAILURE; + } + + return eHAL_STATUS_SUCCESS; +} + /* --------------------------------------------------------------------------- \fn sme_SetMaxTxPower @@ -7194,12 +8274,16 @@ eHalStatus sme_WakeReasonIndCallback (tHalHandle hHal, void* pMsg) \- return eHalStatus -------------------------------------------------------------------------------*/ -eHalStatus sme_SetMaxTxPower(tHalHandle hHal, tSirMacAddr pBssid, +eHalStatus sme_SetMaxTxPower(tHalHandle hHal, tSirMacAddr pBssid, tSirMacAddr pSelfMacAddress, v_S7_t dB) { vos_msg_t msg; tpMaxTxPowerParams pMaxTxParams = NULL; - +#ifdef LIM_TRACE_RECORD + tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); +#endif + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_SET_MAXTXPOW, NO_SESSION, 0)); pMaxTxParams = vos_mem_malloc(sizeof(tMaxTxPowerParams)); if (NULL == pMaxTxParams) { @@ -7208,7 +8292,7 @@ eHalStatus sme_SetMaxTxPower(tHalHandle hHal, tSirMacAddr pBssid, } vos_mem_copy(pMaxTxParams->bssId, pBssid, SIR_MAC_ADDR_LENGTH); - vos_mem_copy(pMaxTxParams->selfStaMacAddr , pSelfMacAddress, + vos_mem_copy(pMaxTxParams->selfStaMacAddr, pSelfMacAddress, SIR_MAC_ADDR_LENGTH); pMaxTxParams->power = dB; @@ -7245,6 +8329,8 @@ eHalStatus sme_SetTxPower(tHalHandle hHal, v_U8_t sessionId, v_U8_t mW) eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_SET_TXPOW, NO_SESSION, 0)); smsLog(pMac, LOG1, FL("set tx power %dmW"), mW); status = sme_AcquireGlobalLock(&pMac->sme); if (HAL_STATUS_SUCCESS(status)) @@ -7286,20 +8372,22 @@ eHalStatus sme_HideSSID(tHalHandle hHal, v_U8_t sessionId, v_U8_t ssidHidden) return eHAL_STATUS_FAILURE; } - if( !pSession->sessionActive ) + if( !pSession->sessionActive ) VOS_ASSERT(0); /* Create the message and send to lim */ len = sizeof(tSirUpdateParams); - status = palAllocateMemory( pMac->hHdd, (void **)&pMsg, len ); - if(HAL_STATUS_SUCCESS(status)) + pMsg = vos_mem_malloc(len); + if ( NULL == pMsg ) + status = eHAL_STATUS_FAILURE; + else { - palZeroMemory(pMac->hHdd, pMsg, sizeof(tSirUpdateParams) ); + vos_mem_set(pMsg, sizeof(tSirUpdateParams), 0); pMsg->messageType = eWNI_SME_HIDE_SSID_REQ; pMsg->length = len; /* Data starts from here */ pMsg->sessionId = sessionId; - pMsg->ssidHidden = ssidHidden; + pMsg->ssidHidden = ssidHidden; status = palSendMBMessage(pMac->hHdd, pMsg); } sme_ReleaseGlobalLock( &pMac->sme ); @@ -7314,7 +8402,7 @@ eHalStatus sme_HideSSID(tHalHandle hHal, v_U8_t sessionId, v_U8_t ssidHidden) \param hHal - The handle returned by macOpen. \param newTMLevel - new Thermal Mitigation Level \param tmMode - Thermal Mitigation handle mode, default 0 - \return eHalStatus + \return eHalStatus ---------------------------------------------------------------------------*/ eHalStatus sme_SetTmLevel(tHalHandle hHal, v_U16_t newTMLevel, v_U16_t tmMode) { @@ -7324,10 +8412,12 @@ eHalStatus sme_SetTmLevel(tHalHandle hHal, v_U16_t newTMLevel, v_U16_t tmMode) vos_msg_t vosMessage; tAniSetTmLevelReq *setTmLevelReq = NULL; + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_SET_TMLEVEL, NO_SESSION, 0)); if ( eHAL_STATUS_SUCCESS == ( status = sme_AcquireGlobalLock( &pMac->sme ) ) ) { setTmLevelReq = (tAniSetTmLevelReq *)vos_mem_malloc(sizeof(tAniSetTmLevelReq)); - if(NULL == setTmLevelReq) + if (NULL == setTmLevelReq) { VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, "%s: Not able to allocate memory for sme_SetTmLevel", __func__); @@ -7367,6 +8457,11 @@ eHalStatus sme_SetTmLevel(tHalHandle hHal, v_U16_t newTMLevel, v_U16_t tmMode) void sme_featureCapsExchange( tHalHandle hHal) { v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_SME, NULL); +#ifdef LIM_TRACE_RECORD + tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); +#endif + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_CAPS_EXCH, NO_SESSION, 0)); WDA_featureCapsExchange(vosContext); } @@ -7401,6 +8496,8 @@ void sme_disableFeatureCapablity(tANI_U8 feature_index) eHalStatus sme_GetDefaultCountryCodeFrmNv(tHalHandle hHal, tANI_U8 *pCountry) { tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_GET_DEFCCNV, NO_SESSION, 0)); return csrGetDefaultCountryCodeFrmNv(pMac, pCountry); } @@ -7418,6 +8515,8 @@ eHalStatus sme_GetDefaultCountryCodeFrmNv(tHalHandle hHal, tANI_U8 *pCountry) eHalStatus sme_GetCurrentCountryCode(tHalHandle hHal, tANI_U8 *pCountry) { tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_GET_CURCC, NO_SESSION, 0)); return csrGetCurrentCountryCode(pMac, pCountry); } @@ -7454,6 +8553,8 @@ void sme_transportDebug(tHalHandle hHal, v_BOOL_t displaySnapshot, v_BOOL_t togg void sme_ResetPowerValuesFor5G (tHalHandle hHal) { tpAniSirGlobal pMac = PMAC_STRUCT (hHal); + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_RESET_PW5G, NO_SESSION, 0)); csrSaveChannelPowerForBand(pMac, eANI_BOOLEAN_TRUE); csrApplyPower2Current(pMac); // Store the channel+power info in the global place: Cfg } @@ -7474,6 +8575,8 @@ eHalStatus sme_UpdateRoamPrefer5GHz(tHalHandle hHal, v_BOOL_t nRoamPrefer5GHz) tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); eHalStatus status = eHAL_STATUS_SUCCESS; + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_UPDATE_RP5G, NO_SESSION, 0)); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { @@ -7502,6 +8605,8 @@ eHalStatus sme_setRoamIntraBand(tHalHandle hHal, const v_BOOL_t nRoamIntraBand) tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); eHalStatus status = eHAL_STATUS_SUCCESS; + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_SET_ROAMIBAND, NO_SESSION, 0)); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { @@ -7516,6 +8621,83 @@ eHalStatus sme_setRoamIntraBand(tHalHandle hHal, const v_BOOL_t nRoamIntraBand) return status ; } +/* --------------------------------------------------------------------------- + \fn sme_UpdateRoamScanNProbes + \brief function to update roam scan N probes + This function is called through dynamic setConfig callback function + to update roam scan N probes + \param hHal - HAL handle for device + \param nProbes number of probe requests to be sent out + \- return Success or failure + -------------------------------------------------------------------------*/ +eHalStatus sme_UpdateRoamScanNProbes(tHalHandle hHal, const v_U8_t nProbes) +{ + tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + eHalStatus status = eHAL_STATUS_SUCCESS; + + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_UPDATE_IMMRSSIDIFF, NO_SESSION, 0)); + status = sme_AcquireGlobalLock( &pMac->sme ); + if ( HAL_STATUS_SUCCESS( status ) ) + { + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, + "%s: gRoamScanNProbes is changed from %d to %d", __func__, + pMac->roam.configParam.nProbes, + nProbes); + pMac->roam.configParam.nProbes = nProbes; + sme_ReleaseGlobalLock( &pMac->sme ); + } +#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD + if (pMac->roam.configParam.isRoamOffloadScanEnabled) + { + csrRoamOffloadScan(pMac, ROAM_SCAN_OFFLOAD_UPDATE_CFG, + REASON_NPROBES_CHANGED); + } +#endif + return status ; +} + +/* --------------------------------------------------------------------------- + \fn sme_UpdateRoamScanHomeAwayTime + \brief function to update roam scan Home away time + This function is called through dynamic setConfig callback function + to update roam scan home away time + \param hHal - HAL handle for device + \param nRoamScanAwayTime Scan home away time + \param bSendOffloadCmd If TRUE then send offload command to firmware + If FALSE then command is not sent to firmware + \- return Success or failure + -------------------------------------------------------------------------*/ +eHalStatus sme_UpdateRoamScanHomeAwayTime(tHalHandle hHal, const v_U16_t nRoamScanHomeAwayTime, + const eAniBoolean bSendOffloadCmd) +{ + tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + eHalStatus status = eHAL_STATUS_SUCCESS; + + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_SET_SCANCTRL, NO_SESSION, 0)); + status = sme_AcquireGlobalLock( &pMac->sme ); + if ( HAL_STATUS_SUCCESS( status ) ) + { + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, + "%s: gRoamScanHomeAwayTime is changed from %d to %d", __func__, + pMac->roam.configParam.nRoamScanHomeAwayTime, + nRoamScanHomeAwayTime); + pMac->roam.configParam.nRoamScanHomeAwayTime = nRoamScanHomeAwayTime; + sme_ReleaseGlobalLock( &pMac->sme ); + } + +#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD + if (pMac->roam.configParam.isRoamOffloadScanEnabled && bSendOffloadCmd) + { + csrRoamOffloadScan(pMac, ROAM_SCAN_OFFLOAD_UPDATE_CFG, + REASON_HOME_AWAY_TIME_CHANGED); + } +#endif + return status; +} + + /* --------------------------------------------------------------------------- \fn sme_getRoamIntraBand \brief get Intra band roaming @@ -7525,9 +8707,35 @@ eHalStatus sme_setRoamIntraBand(tHalHandle hHal, const v_BOOL_t nRoamIntraBand) v_BOOL_t sme_getRoamIntraBand(tHalHandle hHal) { tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_GET_ROAMIBAND, NO_SESSION, 0)); return pMac->roam.configParam.nRoamIntraBand; } +/* --------------------------------------------------------------------------- + \fn sme_getRoamScanNProbes + \brief get N Probes + \param hHal - HAL handle for device + \- return Success or failure + -------------------------------------------------------------------------*/ +v_U8_t sme_getRoamScanNProbes(tHalHandle hHal) +{ + tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + return pMac->roam.configParam.nProbes; +} + +/* --------------------------------------------------------------------------- + \fn sme_getRoamScanHomeAwayTime + \brief get Roam scan home away time + \param hHal - HAL handle for device + \- return Success or failure + -------------------------------------------------------------------------*/ +v_U16_t sme_getRoamScanHomeAwayTime(tHalHandle hHal) +{ + tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + return pMac->roam.configParam.nRoamScanHomeAwayTime; +} + /* --------------------------------------------------------------------------- \fn sme_UpdateImmediateRoamRssiDiff @@ -7536,7 +8744,7 @@ v_BOOL_t sme_getRoamIntraBand(tHalHandle hHal) to configure nImmediateRoamRssiDiff Usage: adb shell iwpriv wlan0 setConfig gImmediateRoamRssiDiff=[0 .. 125] \param hHal - HAL handle for device - \param nImmediateRoamRssiDiff - minimum rssi difference between potential + \param nImmediateRoamRssiDiff - minimum rssi difference between potential candidate and current AP. \- return Success or failure -------------------------------------------------------------------------*/ @@ -7547,6 +8755,8 @@ eHalStatus sme_UpdateImmediateRoamRssiDiff(tHalHandle hHal, v_U8_t nImmediateRoa eHalStatus status = eHAL_STATUS_SUCCESS; status = sme_AcquireGlobalLock( &pMac->sme ); + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_UPDATE_RSSIDIFF, NO_SESSION, 0)); if ( HAL_STATUS_SUCCESS( status ) ) { VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_DEBUG, @@ -7600,7 +8810,7 @@ eHalStatus sme_UpdateRoamRssiDiff(tHalHandle hHal, v_U8_t RoamRssiDiff) /*-------------------------------------------------------------------------- \brief sme_UpdateFastTransitionEnabled() - enable/disable Fast Transition support at runtime - It is used at in the REG_DYNAMIC_VARIABLE macro definition of + It is used at in the REG_DYNAMIC_VARIABLE macro definition of isFastTransitionEnabled. This is a synchronous call \param hHal - The handle returned by macOpen. @@ -7608,12 +8818,14 @@ eHalStatus sme_UpdateRoamRssiDiff(tHalHandle hHal, v_U8_t RoamRssiDiff) Other status means SME is failed to update isFastTransitionEnabled. \sa --------------------------------------------------------------------------*/ -eHalStatus sme_UpdateFastTransitionEnabled(tHalHandle hHal, +eHalStatus sme_UpdateFastTransitionEnabled(tHalHandle hHal, v_BOOL_t isFastTransitionEnabled) { tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); eHalStatus status = eHAL_STATUS_SUCCESS; + MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME, + TRACE_CODE_SME_RX_HDD_UPDATE_FTENABLED, NO_SESSION, 0)); status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { @@ -7686,7 +8898,7 @@ eHalStatus sme_SetRoamScanControl(tHalHandle hHal, v_BOOL_t roamScanControl) { VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_DEBUG, "LFR runtime successfully cleared roam scan cache"); - csrFlushBgScanRoamChannelList(pMac); + csrFlushCfgBgScanRoamChannelList(pMac); #ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD if (pMac->roam.configParam.isRoamOffloadScanEnabled) { @@ -7703,7 +8915,7 @@ eHalStatus sme_SetRoamScanControl(tHalHandle hHal, v_BOOL_t roamScanControl) #ifdef FEATURE_WLAN_LFR /*-------------------------------------------------------------------------- \brief sme_UpdateIsFastRoamIniFeatureEnabled() - enable/disable LFR support at runtime - It is used at in the REG_DYNAMIC_VARIABLE macro definition of + It is used at in the REG_DYNAMIC_VARIABLE macro definition of isFastRoamIniFeatureEnabled. This is a synchronous call \param hHal - The handle returned by macOpen. @@ -7711,7 +8923,7 @@ eHalStatus sme_SetRoamScanControl(tHalHandle hHal, v_BOOL_t roamScanControl) Other status means SME is failed to update isFastRoamIniFeatureEnabled. \sa --------------------------------------------------------------------------*/ -eHalStatus sme_UpdateIsFastRoamIniFeatureEnabled(tHalHandle hHal, +eHalStatus sme_UpdateIsFastRoamIniFeatureEnabled(tHalHandle hHal, const v_BOOL_t isFastRoamIniFeatureEnabled) { tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); @@ -7732,26 +8944,72 @@ eHalStatus sme_UpdateIsFastRoamIniFeatureEnabled(tHalHandle hHal, pMac->roam.configParam.isFastRoamIniFeatureEnabled = isFastRoamIniFeatureEnabled; csrNeighborRoamUpdateFastRoamingEnabled(pMac, isFastRoamIniFeatureEnabled); - if(TRUE == isFastRoamIniFeatureEnabled) - { - sme_UpdateConfigFwRssiMonitoring(hHal, TRUE); - } - else - { - /* CCX also depend on FW Monitoring. - Hence Disabling LFR should check for CCX enable before disabling FW Monitoring */ -#ifdef FEATURE_WLAN_CCX - if(FALSE == pMac->roam.configParam.isCcxIniFeatureEnabled) -#endif - { - VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, - "%s: Turn off FW Monitoring", __func__); - sme_UpdateConfigFwRssiMonitoring(hHal, FALSE); - } + return eHAL_STATUS_SUCCESS; +} + +/*-------------------------------------------------------------------------- + \brief sme_UpdateIsMAWCIniFeatureEnabled() - + Enable/disable LFR MAWC support at runtime + It is used at in the REG_DYNAMIC_VARIABLE macro definition of + isMAWCIniFeatureEnabled. + This is a synchronous call + \param hHal - The handle returned by macOpen. + \return eHAL_STATUS_SUCCESS - SME update MAWCEnabled config successfully. + Other status means SME is failed to update MAWCEnabled. + \sa + --------------------------------------------------------------------------*/ +eHalStatus sme_UpdateIsMAWCIniFeatureEnabled(tHalHandle hHal, + const v_BOOL_t MAWCEnabled) +{ + tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + eHalStatus status = eHAL_STATUS_SUCCESS; + + status = sme_AcquireGlobalLock( &pMac->sme ); + if ( HAL_STATUS_SUCCESS( status ) ) + { + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, + "%s: MAWCEnabled is changed from %d to %d", __func__, + pMac->roam.configParam.MAWCEnabled, + MAWCEnabled); + pMac->roam.configParam.MAWCEnabled = MAWCEnabled; + sme_ReleaseGlobalLock( &pMac->sme ); } - return eHAL_STATUS_SUCCESS; + return status ; + +} + +#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD +/*-------------------------------------------------------------------------- + \brief sme_UpdateEnableFastRoamInConcurrency() - enable/disable LFR if Concurrent session exists + This is a synchronuous call + \param hHal - The handle returned by macOpen. + \return eHAL_STATUS_SUCCESS + Other status means SME is failed + \sa + --------------------------------------------------------------------------*/ + +eHalStatus sme_UpdateEnableFastRoamInConcurrency(tHalHandle hHal, + v_BOOL_t bFastRoamInConIniFeatureEnabled) +{ + + tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + eHalStatus status = eHAL_STATUS_SUCCESS; + + status = sme_AcquireGlobalLock( &pMac->sme ); + if ( HAL_STATUS_SUCCESS( status ) ) + { + pMac->roam.configParam.bFastRoamInConIniFeatureEnabled = bFastRoamInConIniFeatureEnabled; + if (0 == pMac->roam.configParam.isRoamOffloadScanEnabled) + { + pMac->roam.configParam.bFastRoamInConIniFeatureEnabled = 0; + } + sme_ReleaseGlobalLock( &pMac->sme ); + } + + return status; } +#endif #endif /* FEATURE_WLAN_LFR */ #ifdef FEATURE_WLAN_CCX @@ -7790,22 +9048,8 @@ eHalStatus sme_UpdateIsCcxFeatureEnabled(tHalHandle hHal, if(TRUE == isCcxIniFeatureEnabled) { sme_UpdateFastTransitionEnabled(hHal, TRUE); - sme_UpdateConfigFwRssiMonitoring(hHal, TRUE); - } - else - { - /* LFR also depend on FW Monitoring. - Hence Disabling CCX should check for LFR enable before disabling FW Monitoring and Fast Transition */ -#ifdef FEATURE_WLAN_LFR - if(FALSE == pMac->roam.configParam.isFastRoamIniFeatureEnabled) -#endif - { - VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, - "%s: Turn off FW Monitoring/Fast Transition", __func__); - sme_UpdateFastTransitionEnabled(hHal, FALSE); - sme_UpdateConfigFwRssiMonitoring(hHal, FALSE); - } } + #ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD if (pMac->roam.configParam.isRoamOffloadScanEnabled) { @@ -7874,13 +9118,6 @@ eHalStatus sme_setNeighborLookupRssiThreshold(tHalHandle hHal, } sme_ReleaseGlobalLock( &pMac->sme ); } - -#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD - if (pMac->roam.configParam.isRoamOffloadScanEnabled) - { - csrRoamOffloadScan(pMac, ROAM_SCAN_OFFLOAD_UPDATE_CFG, REASON_LOOKUP_THRESH_CHANGED); - } -#endif return status; } @@ -8060,6 +9297,13 @@ eHalStatus sme_UpdateEmptyScanRefreshPeriod(tHalHandle hHal, v_U16_t nEmptyScanR sme_ReleaseGlobalLock( &pMac->sme ); } +#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD + if (pMac->roam.configParam.isRoamOffloadScanEnabled) + { + csrRoamOffloadScan(pMac, ROAM_SCAN_OFFLOAD_UPDATE_CFG, + REASON_EMPTY_SCAN_REF_PERIOD_CHANGED); + } +#endif return status ; } @@ -8121,6 +9365,13 @@ eHalStatus sme_setNeighborScanMaxChanTime(tHalHandle hHal, const v_U16_t nNeighb pMac->roam.neighborRoamInfo.cfgParams.maxChannelScanTime = nNeighborScanMaxChanTime; sme_ReleaseGlobalLock( &pMac->sme ); } +#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD + if (pMac->roam.configParam.isRoamOffloadScanEnabled) + { + csrRoamOffloadScan(pMac, ROAM_SCAN_OFFLOAD_UPDATE_CFG, + REASON_SCAN_CH_TIME_CHANGED); + } +#endif return status ; } @@ -8154,7 +9405,7 @@ v_U16_t sme_getNeighborScanMaxChanTime(tHalHandle hHal) \brief Update nNeighborScanPeriod This function is called through dynamic setConfig callback function to configure nNeighborScanPeriod - Usage: adb shell iwpriv wlan0 setConfig nNeighborScanPeriod=[0 .. 60] + Usage: adb shell iwpriv wlan0 setConfig nNeighborScanPeriod=[0 .. 1000] \param hHal - HAL handle for device \param nNeighborScanPeriod - neighbor scan period \- return Success or failure @@ -8176,6 +9427,13 @@ eHalStatus sme_setNeighborScanPeriod(tHalHandle hHal, const v_U16_t nNeighborSca pMac->roam.neighborRoamInfo.cfgParams.neighborScanPeriod = nNeighborScanPeriod; sme_ReleaseGlobalLock( &pMac->sme ); } +#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD + if (pMac->roam.configParam.isRoamOffloadScanEnabled) + { + csrRoamOffloadScan(pMac, ROAM_SCAN_OFFLOAD_UPDATE_CFG, + REASON_SCAN_HOME_TIME_CHANGED); + } +#endif return status ; } @@ -8238,7 +9496,7 @@ eHalStatus sme_ChangeRoamScanChannelList(tHalHandle hHal, tANI_U8 *pChannelList, pNeighborRoamInfo->cfgParams.channelInfo.ChannelList[i]); } } - csrFlushBgScanRoamChannelList(pMac); + csrFlushCfgBgScanRoamChannelList(pMac); csrCreateBgScanRoamChannelList(pMac, pChannelList, numChannels); status = csrUpdateBgScanConfigIniChannelList(pMac, csrGetCurrentBand(hHal)); @@ -8272,43 +9530,74 @@ eHalStatus sme_ChangeRoamScanChannelList(tHalHandle hHal, tANI_U8 *pChannelList, return status ; } +#ifdef FEATURE_WLAN_CCX_UPLOAD /*-------------------------------------------------------------------------- - \brief sme_ChangeCountryValidChannelListByRevision() - Change Korea valid channel list - based on country revision number - This is a synchronous call + \brief sme_SetCcxRoamScanChannelList() - set ccx roam scan channel list + This is a synchronuous call \param hHal - The handle returned by macOpen. \return eHAL_STATUS_SUCCESS - SME update config successful. Other status means SME is failed to update \sa --------------------------------------------------------------------------*/ -eHalStatus sme_ChangeCountryValidChannelListByRevision(tHalHandle hHal, - tANI_U8 Revision) +eHalStatus sme_SetCcxRoamScanChannelList(tHalHandle hHal, + tANI_U8 *pChannelList, + tANI_U8 numChannels) { - tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); eHalStatus status = eHAL_STATUS_SUCCESS; - + tpCsrNeighborRoamControlInfo pNeighborRoamInfo + = &pMac->roam.neighborRoamInfo; + tpCsrChannelInfo currChannelListInfo + = &pNeighborRoamInfo->roamChannelInfo.currentChannelListInfo; + tANI_U8 oldChannelList[WNI_CFG_VALID_CHANNEL_LIST_LEN*2] = {0}; + tANI_U8 newChannelList[128] = {0}; + tANI_U8 i = 0, j = 0; status = sme_AcquireGlobalLock( &pMac->sme ); if ( HAL_STATUS_SUCCESS( status ) ) { - VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_DEBUG, - "LFR runtime successfully set country/revision to %s/%d - old value is %s/%d - roam state is %d", - "KR", Revision, "KR", - pMac->roam.neighborRoamInfo.cfgParams.countryChannelInfo.revision, - pMac->roam.neighborRoamInfo.neighborRoamState); - csr_SetRevision(pMac, Revision); - csrInitCountryValidChannelList(pMac, Revision); + if (NULL != currChannelListInfo->ChannelList) + { + for (i = 0; i < currChannelListInfo->numOfChannels; i++) + { + j += snprintf(oldChannelList + j, + sizeof(oldChannelList) - j, + " %d", + currChannelListInfo->ChannelList[i]); + } + } + status = csrCreateRoamScanChannelList(pMac, pChannelList, + numChannels, csrGetCurrentBand(hHal)); + if ( HAL_STATUS_SUCCESS( status )) + { + if (NULL != currChannelListInfo->ChannelList) + { + j = 0; + for (i = 0; i < currChannelListInfo->numOfChannels; i++) + { + j += snprintf(newChannelList + j, + sizeof(newChannelList) - j, + " %d", + currChannelListInfo->ChannelList[i]); + } + } + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_DEBUG, +"CCX roam scan channel list successfully set to \ +%s - old value is %s - roam state is %d", + newChannelList, oldChannelList, + pMac->roam.neighborRoamInfo.neighborRoamState); + } sme_ReleaseGlobalLock( &pMac->sme ); } #ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD - if (pMac->roam.configParam.isRoamOffloadScanEnabled) - { - csrRoamOffloadScan(pMac, ROAM_SCAN_OFFLOAD_UPDATE_CFG, REASON_VALID_CHANNEL_LIST_CHANGED); - } + if (pMac->roam.configParam.isRoamOffloadScanEnabled) + { + csrRoamOffloadScan(pMac, ROAM_SCAN_OFFLOAD_UPDATE_CFG, + REASON_CHANNEL_LIST_CHANGED); + } #endif - return status ; } - +#endif /*-------------------------------------------------------------------------- \brief csrUpdateBgScanConfigIniChannelList() - Update bgscan roam cache @@ -8365,26 +9654,6 @@ eHalStatus sme_getRoamScanChannelList(tHalHandle hHal, tANI_U8 *pChannelList, return status ; } -/*-------------------------------------------------------------------------- - \brief sme_GetCountryRevision() - get Country revision index - This is a synchronous call - \param hHal - The handle returned by macOpen. - \return eHAL_STATUS_SUCCESS - SME update config successful. - Other status means SME is failed to update - \sa - --------------------------------------------------------------------------*/ -eHalStatus sme_GetCountryRevision(tHalHandle hHal, tANI_U8 *pRevision) -{ - /* this is valid for Country KR only now */ - tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - tpCsrNeighborRoamControlInfo pNeighborRoamInfo = &pMac->roam.neighborRoamInfo; - eHalStatus status = eHAL_STATUS_SUCCESS; - - *pRevision = pNeighborRoamInfo->cfgParams.countryChannelInfo.revision; - - return status; -} - /*-------------------------------------------------------------------------- \brief sme_getIsCcxFeatureEnabled() - get CCX feature enabled or not This is a synchronuous call @@ -8397,7 +9666,7 @@ tANI_BOOLEAN sme_getIsCcxFeatureEnabled(tHalHandle hHal) { #ifdef FEATURE_WLAN_CCX tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - return pMac->roam.configParam.isCcxIniFeatureEnabled; + return csrRoamIsCcxIniFeatureEnabled(pMac); #else return eANI_BOOLEAN_FALSE; #endif @@ -8470,19 +9739,46 @@ tANI_BOOLEAN sme_getIsFtFeatureEnabled(tHalHandle hHal) /* --------------------------------------------------------------------------- \fn sme_IsFeatureSupportedByFW \brief Check if an feature is enabled by FW - + \param feattEnumValue - Enumeration value from placeHolderInCapBitmap - \- return 1/0 (TRUE/FALSE) + \- return 1/0 (TRUE/FALSE) -------------------------------------------------------------------------*/ tANI_U8 sme_IsFeatureSupportedByFW(tANI_U8 featEnumValue) { return IS_FEATURE_SUPPORTED_BY_FW(featEnumValue); } #ifdef FEATURE_WLAN_TDLS + /* --------------------------------------------------------------------------- \fn sme_SendTdlsMgmtFrame \brief API to send TDLS management frames. - + + \param peerMac - peer's Mac Adress. + \param tdlsLinkEstablishParams - TDLS Peer Link Establishment Parameters + \- return VOS_STATUS_SUCCES + -------------------------------------------------------------------------*/ +VOS_STATUS sme_SendTdlsLinkEstablishParams(tHalHandle hHal, + tANI_U8 sessionId, + tSirMacAddr peerMac, + tCsrTdlsLinkEstablishParams *tdlsLinkEstablishParams) +{ + eHalStatus status = eHAL_STATUS_SUCCESS; + tpAniSirGlobal pMac = PMAC_STRUCT(hHal); + + status = sme_AcquireGlobalLock( &pMac->sme ); + + if ( HAL_STATUS_SUCCESS( status ) ) + { + status = csrTdlsSendLinkEstablishParams(hHal, sessionId, peerMac, tdlsLinkEstablishParams) ; + sme_ReleaseGlobalLock( &pMac->sme ); + } + return status ; +} + +/* --------------------------------------------------------------------------- + \fn sme_SendTdlsMgmtFrame + \brief API to send TDLS management frames. + \param peerMac - peer's Mac Adress. \param frame_type - Type of TDLS mgmt frame to be sent. \param dialog - dialog token used in the frame. @@ -8547,7 +9843,7 @@ VOS_STATUS sme_ChangeTdlsPeerSta(tHalHandle hHal, tANI_U8 sessionId, tSirMacAddr /* --------------------------------------------------------------------------- \fn sme_AddTdlsPeerSta \brief API to Add TDLS peer sta entry. - + \param peerMac - peer's Mac Adress. \- return VOS_STATUS_SUCCES -------------------------------------------------------------------------*/ @@ -8590,16 +9886,6 @@ VOS_STATUS sme_DeleteTdlsPeerSta(tHalHandle hHal, tANI_U8 sessionId, tSirMacAddr return status ; } -/* --------------------------------------------------------------------------- - \fn sme_IsPmcBmps - \API to Check if PMC state is BMPS. - - \- return v_BOOL_t - -------------------------------------------------------------------------*/ -v_BOOL_t sme_IsPmcBmps(tHalHandle hHal) -{ - return (BMPS == pmcGetPmcState(hHal)); -} /* --------------------------------------------------------------------------- \fn sme_SetTdlsPowerSaveProhibited \API to set/reset the isTdlsPowerSaveProhibited. @@ -8621,6 +9907,17 @@ void sme_SetTdlsPowerSaveProhibited(tHalHandle hHal, tANI_U32 sessionId, v_BOOL_ return; } #endif +/* --------------------------------------------------------------------------- + \fn sme_IsPmcBmps + \API to Check if PMC state is BMPS. + + \- return v_BOOL_t + -------------------------------------------------------------------------*/ +v_BOOL_t sme_IsPmcBmps(tHalHandle hHal) +{ + return (BMPS == pmcGetPmcState(hHal)); +} + #ifdef FEATURE_WLAN_TDLS_INTERNAL /* * SME API to start TDLS discovery Procedure @@ -8665,8 +9962,8 @@ v_U8_t sme_GetTdlsDiscoveryResult(tHalHandle hHal, { if(TDLS_LINK_SETUP_STATE == peerInfo->tdlsPeerState) { - palCopyMemory(pMac->hHdd, disResult[peerCnt].tdlsPeerMac, - peerInfo->peerMac, sizeof(tSirMacAddr)) ; + vos_mem_copy(disResult[peerCnt].tdlsPeerMac, + peerInfo->peerMac, sizeof(tSirMacAddr)); disResult[peerCnt].tdlsPeerRssi = peerInfo->tdlsPeerRssi ; peerCnt++ ; } @@ -8674,8 +9971,8 @@ v_U8_t sme_GetTdlsDiscoveryResult(tHalHandle hHal, } case TDLS_DIS_LIST: { - palCopyMemory(pMac->hHdd, disResult[peerCnt].tdlsPeerMac, - peerInfo->peerMac, sizeof(tSirMacAddr)) ; + vos_mem_copy(disResult[peerCnt].tdlsPeerMac, + peerInfo->peerMac, sizeof(tSirMacAddr)); disResult[peerCnt].tdlsPeerRssi = peerInfo->tdlsPeerRssi ; peerCnt++ ; break ; @@ -8848,7 +10145,7 @@ VOS_STATUS sme_SelectCBMode(tHalHandle hHal, eCsrPhyMode eCsrPhyMode, tANI_U8 ch } } VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, - "cbmode selected=%ld\n", smeConfig.csrConfig.channelBondingMode5GHz); + "cbmode selected=%d", smeConfig.csrConfig.channelBondingMode5GHz); sme_UpdateConfig (pMac, &smeConfig); return VOS_STATUS_SUCCESS; @@ -8859,74 +10156,568 @@ ePhyChanBondState sme_GetCBPhyStateFromCBIniValue(tANI_U32 cb_ini_value) { return(csrConvertCBIniValueToPhyCBState(cb_ini_value)); } +/*-------------------------------------------------------------------------- -/* - * SME API to enable/disable idle mode powersave - * This should be called only if powersave offload - * is enabled - */ -VOS_STATUS sme_SetIdlePowersaveConfig(v_PVOID_t vosContext, tANI_U32 value) + \brief sme_SetCurrDeviceMode() - Sets the current operating device mode. + \param hHal - The handle returned by macOpen. + \param currDeviceMode - Current operating device mode. + --------------------------------------------------------------------------*/ + +void sme_SetCurrDeviceMode (tHalHandle hHal, tVOS_CON_MODE currDeviceMode) { - v_PVOID_t wdaContext = vos_get_context(VOS_MODULE_ID_WDA, vosContext); + tpAniSirGlobal pMac = PMAC_STRUCT(hHal); + pMac->sme.currDeviceMode = currDeviceMode; + return; +} - VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_DEBUG, - " Idle Ps Set Value %d", value); +#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD +/*-------------------------------------------------------------------------- + \brief sme_HandoffRequest() - a wrapper function to Request a handoff + from CSR. + This is a synchronous call + \param hHal - The handle returned by macOpen + \param pHandoffInfo - info provided by HDD with the handoff request (namely: + BSSID, channel etc.) + \return eHAL_STATUS_SUCCESS - SME passed the request to CSR successfully. + Other status means SME is failed to send the request. + \sa + --------------------------------------------------------------------------*/ - if (VOS_STATUS_SUCCESS != WDA_SetIdlePsConfig(wdaContext, value)) +eHalStatus sme_HandoffRequest(tHalHandle hHal, + tCsrHandoffRequest *pHandoffInfo) +{ + tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + eHalStatus status = eHAL_STATUS_SUCCESS; + + status = sme_AcquireGlobalLock( &pMac->sme ); + if ( HAL_STATUS_SUCCESS( status ) ) { - VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, - " Failed to Set Idle Ps Value %d", value); - return VOS_STATUS_E_FAILURE; + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, + "%s: invoked", __func__); + status = csrHandoffRequest(pMac, pHandoffInfo); + sme_ReleaseGlobalLock( &pMac->sme ); } - return VOS_STATUS_SUCCESS; -} - -eHalStatus sme_ConfigEnablePowerSave (tHalHandle hHal, tPmcPowerSavingMode psMode) -{ - eHalStatus status = eHAL_STATUS_FAILURE; - tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - status = sme_AcquireGlobalLock( &pMac->sme ); - if ( HAL_STATUS_SUCCESS( status ) ) - { - status = pmcOffloadConfigEnablePowerSave(hHal, psMode); - sme_ReleaseGlobalLock( &pMac->sme ); - } - return (status); + return status ; } +#endif -eHalStatus sme_ConfigDisablePowerSave (tHalHandle hHal, tPmcPowerSavingMode psMode) +/* + * SME API to check if there is any infra station or + * P2P client is connected + */ +VOS_STATUS sme_isSta_p2p_clientConnected(tHalHandle hHal) { - eHalStatus status = eHAL_STATUS_FAILURE; - tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - - status = sme_AcquireGlobalLock( &pMac->sme ); - if ( HAL_STATUS_SUCCESS( status ) ) - { - status = pmcOffloadConfigDisablePowerSave(hHal, psMode); - sme_ReleaseGlobalLock( &pMac->sme ); - } - return (status); + tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + if(csrIsInfraConnected(pMac)) + { + return VOS_STATUS_SUCCESS; + } + return VOS_STATUS_E_FAILURE; } -eHalStatus sme_PsOffloadEnablePowerSave (tHalHandle hHal, tANI_U32 sessionId) -{ - eHalStatus status = eHAL_STATUS_FAILURE; - tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - - status = sme_AcquireGlobalLock(&pMac->sme); - if(HAL_STATUS_SUCCESS( status )) - { - status = PmcOffloadEnableStaModePowerSave(hHal, sessionId); - sme_ReleaseGlobalLock( &pMac->sme ); - } - return (status); -} -eHalStatus sme_PsOffloadDisablePowerSave (tHalHandle hHal, tANI_U32 sessionId) +#ifdef FEATURE_WLAN_LPHB +/* --------------------------------------------------------------------------- + \fn sme_LPHBConfigReq + \API to make configuration LPHB within FW. + \param hHal - The handle returned by macOpen + \param lphdReq - LPHB request argument by client + \param pCallbackfn - LPHB timeout notification callback function pointer + \- return Configuration message posting status, SUCCESS or Fail + -------------------------------------------------------------------------*/ +eHalStatus sme_LPHBConfigReq +( + tHalHandle hHal, + tSirLPHBReq *lphdReq, + void (*pCallbackfn)(void *pAdapter, void *indParam) +) { - eHalStatus status = eHAL_STATUS_FAILURE; - tpAniSirGlobal pMac = PMAC_STRUCT(hHal); + eHalStatus status = eHAL_STATUS_SUCCESS; + VOS_STATUS vosStatus = VOS_STATUS_SUCCESS; + tpAniSirGlobal pMac = PMAC_STRUCT(hHal); + vos_msg_t vosMessage; + + status = sme_AcquireGlobalLock(&pMac->sme); + if (eHAL_STATUS_SUCCESS == status) + { + if ((LPHB_SET_EN_PARAMS_INDID == lphdReq->cmd) && + (NULL == pCallbackfn) && + (NULL == pMac->sme.pLphbIndCb)) + { + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, + "%s: Indication Call back did not registered", __func__); + sme_ReleaseGlobalLock(&pMac->sme); + return eHAL_STATUS_FAILURE; + } + else if (NULL != pCallbackfn) + { + pMac->sme.pLphbIndCb = pCallbackfn; + } + + /* serialize the req through MC thread */ + vosMessage.bodyptr = lphdReq; + vosMessage.type = WDA_LPHB_CONF_REQ; + vosStatus = vos_mq_post_message(VOS_MQ_ID_WDA, &vosMessage); + if (!VOS_IS_STATUS_SUCCESS(vosStatus)) + { + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, + "%s: Post Config LPHB MSG fail", __func__); + status = eHAL_STATUS_FAILURE; + } + sme_ReleaseGlobalLock(&pMac->sme); + } + + return(status); +} +#endif /* FEATURE_WLAN_LPHB */ +/*-------------------------------------------------------------------------- + \brief sme_enable_disable_split_scan() - a wrapper function to set the split + scan parameter. + This is a synchronous call + \param hHal - The handle returned by macOpen + \return NONE. + \sa + --------------------------------------------------------------------------*/ +void sme_enable_disable_split_scan (tHalHandle hHal, tANI_U8 nNumStaChan, + tANI_U8 nNumP2PChan) +{ + tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + + pMac->roam.configParam.nNumStaChanCombinedConc = nNumStaChan; + pMac->roam.configParam.nNumP2PChanCombinedConc = nNumP2PChan; + + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, + "%s: SCAN nNumStaChanCombinedConc : %d," + "nNumP2PChanCombinedConc : %d ", + __func__, nNumStaChan, nNumP2PChan); + + return; + +} + +/* --------------------------------------------------------------------------- + \fn sme_AddPeriodicTxPtrn + \brief API to Periodic TX Pattern Offload feature + \param hHal - The handle returned by macOpen + \param addPeriodicTxPtrnParams - Pointer to the add pattern structure + \return eHalStatus + ---------------------------------------------------------------------------*/ +eHalStatus sme_AddPeriodicTxPtrn(tHalHandle hHal, tSirAddPeriodicTxPtrn + *addPeriodicTxPtrnParams) +{ + tpAniSirGlobal pMac = PMAC_STRUCT(hHal); + eHalStatus status; + vos_msg_t msg; + + if (eHAL_STATUS_SUCCESS == (status = sme_AcquireGlobalLock(&pMac->sme))) + { + msg.type = WDA_ADD_PERIODIC_TX_PTRN_IND; + msg.bodyptr = addPeriodicTxPtrnParams; + + if (!VOS_IS_STATUS_SUCCESS(vos_mq_post_message(VOS_MODULE_ID_WDA, &msg))) + { + VOS_TRACE( VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,"%s: Not able " + "to post WDA_ADD_PERIODIC_TX_PTRN_IND to WDA!", + __func__); + + sme_ReleaseGlobalLock(&pMac->sme); + return eHAL_STATUS_FAILURE; + } + + sme_ReleaseGlobalLock(&pMac->sme); + return eHAL_STATUS_SUCCESS; + } + + return status; +} + +/* --------------------------------------------------------------------------- + \fn sme_DelPeriodicTxPtrn + \brief API to Periodic TX Pattern Offload feature + \param hHal - The handle returned by macOpen + \param delPeriodicTxPtrnParams - Pointer to the delete pattern structure + \return eHalStatus + ---------------------------------------------------------------------------*/ +eHalStatus sme_DelPeriodicTxPtrn(tHalHandle hHal, tSirDelPeriodicTxPtrn + *delPeriodicTxPtrnParams) +{ + tpAniSirGlobal pMac = PMAC_STRUCT(hHal); + eHalStatus status; + vos_msg_t msg; + + if (eHAL_STATUS_SUCCESS == (status = sme_AcquireGlobalLock(&pMac->sme))) + { + msg.type = WDA_DEL_PERIODIC_TX_PTRN_IND; + msg.bodyptr = delPeriodicTxPtrnParams; + + if (!VOS_IS_STATUS_SUCCESS(vos_mq_post_message(VOS_MODULE_ID_WDA, &msg))) + { + VOS_TRACE( VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,"%s: Not able " + "to post WDA_DEL_PERIODIC_TX_PTRN_IND to WDA!", + __func__); + + sme_ReleaseGlobalLock(&pMac->sme); + return eHAL_STATUS_FAILURE; + } + + sme_ReleaseGlobalLock(&pMac->sme); + return eHAL_STATUS_SUCCESS; + } + + return status; +} + +#if defined WLAN_FEATURE_RELIABLE_MCAST +/* --------------------------------------------------------------------------- + \fn sme_EnableReliableMcast + \brief Used to enable Reliable Multicast using Leader Based Protocol + setting will not persist over reboots + \param hHal + \param sessionId + \- return eHalStatus + -------------------------------------------------------------------------*/ +eHalStatus sme_EnableReliableMcast(tHalHandle hHal, tANI_U32 sessionId) +{ + eHalStatus status = eHAL_STATUS_FAILURE; + tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + + smsLog(pMac, LOG1, FL("enable RMC")); + status = sme_AcquireGlobalLock(&pMac->sme); + if (HAL_STATUS_SUCCESS(status)) + { + status = csrEnableRMC(pMac, sessionId); + sme_ReleaseGlobalLock(&pMac->sme); + } + return status; +} + +/* --------------------------------------------------------------------------- + \fn sme_DisableReliableMcast + \brief Used to disable Reliable Multicast using Leader Based Protocol + setting will not persist over reboots + \param hHal + \param sessionId + \- return eHalStatus + -------------------------------------------------------------------------*/ +eHalStatus sme_DisableReliableMcast(tHalHandle hHal, tANI_U32 sessionId) +{ + eHalStatus status = eHAL_STATUS_FAILURE; + tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + + smsLog(pMac, LOG1, FL("disable RMC")); + status = sme_AcquireGlobalLock(&pMac->sme); + if (HAL_STATUS_SUCCESS(status)) + { + status = csrDisableRMC(pMac, sessionId); + sme_ReleaseGlobalLock(&pMac->sme); + } + return status; +} +#endif /* defined WLAN_FEATURE_RELIABLE_MCAST */ + +#ifdef FEATURE_CESIUM_PROPRIETARY +/* --------------------------------------------------------------------------- + \fn sme_GetIBSSPeerInfo + \brief Used to disable Reliable Multicast using Leader Based Protocol + setting will not persist over reboots + \param hHal + \param ibssPeerInfoReq multicast Group IP address + \- return eHalStatus + -------------------------------------------------------------------------*/ +eHalStatus sme_RequestIBSSPeerInfo(tHalHandle hHal, void *pUserData, + pIbssPeerInfoCb peerInfoCbk, + tANI_BOOLEAN allPeerInfoReqd, + tANI_U8 staIdx) +{ + eHalStatus status = eHAL_STATUS_FAILURE; + VOS_STATUS vosStatus = VOS_STATUS_E_FAILURE; + tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + vos_msg_t vosMessage; + tSirIbssGetPeerInfoReqParams *pIbssInfoReqParams; + + status = sme_AcquireGlobalLock(&pMac->sme); + if ( eHAL_STATUS_SUCCESS == status) + { + pMac->sme.peerInfoParams.peerInfoCbk = peerInfoCbk; + pMac->sme.peerInfoParams.pUserData = pUserData; + + pIbssInfoReqParams = (tSirIbssGetPeerInfoReqParams *) + vos_mem_malloc(sizeof(tSirIbssGetPeerInfoReqParams)); + if (NULL == pIbssInfoReqParams) + { + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, + "%s: Not able to allocate memory for dhcp start", __func__); + sme_ReleaseGlobalLock( &pMac->sme ); + return eHAL_STATUS_FAILURE; + } + pIbssInfoReqParams->allPeerInfoReqd = allPeerInfoReqd; + pIbssInfoReqParams->staIdx = staIdx; + + vosMessage.type = WDA_GET_IBSS_PEER_INFO_REQ; + vosMessage.bodyptr = pIbssInfoReqParams; + vosMessage.reserved = 0; + + vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &vosMessage ); + if ( VOS_STATUS_SUCCESS != vosStatus ) + { + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, + "%s: Post WDA_GET_IBSS_PEER_INFO_REQ MSG failed", __func__); + vos_mem_free(pIbssInfoReqParams); + vosStatus = eHAL_STATUS_FAILURE; + } + sme_ReleaseGlobalLock( &pMac->sme ); + } + + return (vosStatus); +} + +/* --------------------------------------------------------------------------- + \fn sme_IBSSRouteTableUpdateInd + \API to update IBSS Route table in FW. + \param hHal - The handle returned by macOpen + \param pIbssTable - ptr to IBSS table struct + \- returns Success or Failiure + -------------------------------------------------------------------------*/ +eHalStatus sme_IBSSRouteTableUpdateInd(tHalHandle hHal, + tAniIbssRouteTable *pIbssTable) +{ + eHalStatus status = eHAL_STATUS_SUCCESS; + VOS_STATUS vosStatus = VOS_STATUS_SUCCESS; + tpAniSirGlobal pMac = PMAC_STRUCT(hHal); + vos_msg_t vosMessage; + + if (!pIbssTable) + { + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, + "%s: IBSS route table ptr null", __func__); + return eHAL_STATUS_FAILURE; + } + + status = sme_AcquireGlobalLock(&pMac->sme); + if (eHAL_STATUS_SUCCESS == status) + { + vosMessage.bodyptr = pIbssTable; + vosMessage.type = WDA_IBSS_ROUTE_TABLE_UPDATE_IND; + vosStatus = vos_mq_post_message(VOS_MQ_ID_WDA, &vosMessage); + if (!VOS_IS_STATUS_SUCCESS(vosStatus)) + { + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, + "%s: failed to post message to WDA", __func__); + status = eHAL_STATUS_FAILURE; + } + sme_ReleaseGlobalLock(&pMac->sme); + } + + return(status); +} +#endif /* FEATURE_CESIUM_PROPRIETARY */ + +void smeGetCommandQStatus( tHalHandle hHal ) +{ + tSmeCmd *pTempCmd = NULL; + tListElem *pEntry; + tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + + if (NULL == pMac) + { + smsLog( pMac, LOGE, "smeGetCommandQStatus: pMac is NULL" ); + return; + } + + pEntry = csrLLPeekHead( &pMac->sme.smeCmdActiveList, LL_ACCESS_LOCK ); + if( pEntry ) + { + pTempCmd = GET_BASE_ADDR( pEntry, tSmeCmd, Link ); + } + smsLog( pMac, LOGE, "Currently smeCmdActiveList has command (0x%X)", + (pTempCmd) ? pTempCmd->command : eSmeNoCommand ); + if(pTempCmd) + { + if( eSmeCsrCommandMask & pTempCmd->command ) + { + //CSR command is stuck. See what the reason code is for that command + dumpCsrCommandInfo(pMac, pTempCmd); + } + } //if(pTempCmd) + + smsLog( pMac, LOGE, "Currently smeCmdPendingList has %d commands", + csrLLCount(&pMac->sme.smeCmdPendingList)); + + smsLog( pMac, LOGE, "Currently roamCmdPendingList has %d commands", + csrLLCount(&pMac->roam.roamCmdPendingList)); + + return; +} + +#ifdef FEATURE_WLAN_BATCH_SCAN +/* --------------------------------------------------------------------------- + \fn sme_SetBatchScanReq + \brief API to set batch scan request in FW + \param hHal - The handle returned by macOpen. + \param pRequest - Pointer to the batch request. + \param sessionId - session ID + \param callbackRoutine - HDD callback which needs to be invoked after + getting set batch scan response from FW + \param callbackContext - pAdapter context + \return eHalStatus + ---------------------------------------------------------------------------*/ +eHalStatus sme_SetBatchScanReq +( + tHalHandle hHal, tSirSetBatchScanReq *pRequest, tANI_U8 sessionId, + void (*callbackRoutine) (void *callbackCtx, tSirSetBatchScanRsp *pRsp), + void *callbackContext +) +{ + tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + eHalStatus status; + + if ( eHAL_STATUS_SUCCESS == ( status = sme_AcquireGlobalLock( &pMac->sme ))) + { + status = pmcSetBatchScanReq(hHal, pRequest, sessionId, callbackRoutine, + callbackContext); + sme_ReleaseGlobalLock( &pMac->sme ); + } + + return status; +} + +/* --------------------------------------------------------------------------- + \fn sme_TriggerBatchScanResultInd + \brief API to trigger batch scan result indications from FW + \param hHal - The handle returned by macOpen. + \param pRequest - Pointer to get batch request. + \param sessionId - session ID + \param callbackRoutine - HDD callback which needs to be invoked after + getting batch scan result indication from FW + \param callbackContext - pAdapter context + \return eHalStatus + ---------------------------------------------------------------------------*/ +eHalStatus sme_TriggerBatchScanResultInd +( + tHalHandle hHal, tSirTriggerBatchScanResultInd *pRequest, tANI_U8 sessionId, + void (*callbackRoutine) (void *callbackCtx, void *pRsp), + void *callbackContext +) +{ + tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + eHalStatus status; + + if ( eHAL_STATUS_SUCCESS == ( status = sme_AcquireGlobalLock( &pMac->sme ))) + { + status = pmcTriggerBatchScanResultInd(hHal, pRequest, sessionId, + callbackRoutine, callbackContext); + sme_ReleaseGlobalLock( &pMac->sme ); + } + + return status; +} + + +/* --------------------------------------------------------------------------- + \fn sme_StopBatchScanInd + \brief API to stop batch scan request in FW + \param hHal - The handle returned by macOpen. + \param pRequest - Pointer to the batch request. + \param sessionId - session ID + \return eHalStatus + ---------------------------------------------------------------------------*/ +eHalStatus sme_StopBatchScanInd +( + tHalHandle hHal, tSirStopBatchScanInd *pRequest, tANI_U8 sessionId +) +{ + tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + eHalStatus status; + + if ( eHAL_STATUS_SUCCESS == ( status = sme_AcquireGlobalLock( &pMac->sme ))) + { + status = pmcStopBatchScanInd(hHal, pRequest, sessionId); + sme_ReleaseGlobalLock( &pMac->sme ); + } + + return status; +} + +#endif + +void activeListCmdTimeoutHandle(void *userData) +{ + if (NULL == userData) + return; + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, + "%s: Active List command timeout Cmd List Count %d", __func__, + csrLLCount(&((tpAniSirGlobal) userData)->sme.smeCmdActiveList) ); + smeGetCommandQStatus((tHalHandle) userData); +} + +/* + * SME API to enable/disable idle mode powersave + * This should be called only if powersave offload + * is enabled + */ +VOS_STATUS sme_SetIdlePowersaveConfig(v_PVOID_t vosContext, tANI_U32 value) +{ + v_PVOID_t wdaContext = vos_get_context(VOS_MODULE_ID_WDA, vosContext); + + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_DEBUG, + " Idle Ps Set Value %d", value); + + if (VOS_STATUS_SUCCESS != WDA_SetIdlePsConfig(wdaContext, value)) + { + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, + " Failed to Set Idle Ps Value %d", value); + return VOS_STATUS_E_FAILURE; + } + return VOS_STATUS_SUCCESS; +} + +eHalStatus sme_ConfigEnablePowerSave (tHalHandle hHal, tPmcPowerSavingMode psMode) +{ + eHalStatus status = eHAL_STATUS_FAILURE; + tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + + status = sme_AcquireGlobalLock( &pMac->sme ); + if ( HAL_STATUS_SUCCESS( status ) ) + { + status = pmcOffloadConfigEnablePowerSave(hHal, psMode); + sme_ReleaseGlobalLock( &pMac->sme ); + } + return (status); +} + +eHalStatus sme_ConfigDisablePowerSave (tHalHandle hHal, tPmcPowerSavingMode psMode) +{ + eHalStatus status = eHAL_STATUS_FAILURE; + tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + + status = sme_AcquireGlobalLock( &pMac->sme ); + if ( HAL_STATUS_SUCCESS( status ) ) + { + status = pmcOffloadConfigDisablePowerSave(hHal, psMode); + sme_ReleaseGlobalLock( &pMac->sme ); + } + return (status); +} + +eHalStatus sme_PsOffloadEnablePowerSave (tHalHandle hHal, tANI_U32 sessionId) +{ + eHalStatus status = eHAL_STATUS_FAILURE; + tpAniSirGlobal pMac = PMAC_STRUCT(hHal); + + status = sme_AcquireGlobalLock(&pMac->sme); + if(HAL_STATUS_SUCCESS( status )) + { + status = PmcOffloadEnableStaModePowerSave(hHal, sessionId); + sme_ReleaseGlobalLock( &pMac->sme ); + } + return (status); +} + +eHalStatus sme_PsOffloadDisablePowerSave (tHalHandle hHal, tANI_U32 sessionId) +{ + eHalStatus status = eHAL_STATUS_FAILURE; + tpAniSirGlobal pMac = PMAC_STRUCT(hHal); status = sme_AcquireGlobalLock(&pMac->sme); if(HAL_STATUS_SUCCESS( status )) @@ -9018,6 +10809,41 @@ eHalStatus sme_MoveCsrToScanStateForPno (tHalHandle hHal, tANI_U8 sessionId) } #endif +/* --------------------------------------------------------------------------- + \fn sme_SendRateUpdateInd + \brief API to Update rate + \param hHal - The handle returned by macOpen + \param rateUpdateParams - Pointer to rate update params + \return eHalStatus + ---------------------------------------------------------------------------*/ +eHalStatus sme_SendRateUpdateInd(tHalHandle hHal, tSirRateUpdateInd *rateUpdateParams) +{ + tpAniSirGlobal pMac = PMAC_STRUCT(hHal); + eHalStatus status; + vos_msg_t msg; + + if (eHAL_STATUS_SUCCESS == (status = sme_AcquireGlobalLock(&pMac->sme))) + { + msg.type = WDA_RATE_UPDATE_IND; + msg.bodyptr = rateUpdateParams; + + if (!VOS_IS_STATUS_SUCCESS(vos_mq_post_message(VOS_MODULE_ID_WDA, &msg))) + { + VOS_TRACE( VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,"%s: Not able " + "to post WDA_SET_RMC_RATE_IND to WDA!", + __func__); + + sme_ReleaseGlobalLock(&pMac->sme); + return eHAL_STATUS_FAILURE; + } + + sme_ReleaseGlobalLock(&pMac->sme); + return eHAL_STATUS_SUCCESS; + } + + return status; +} + eHalStatus sme_getValidChannelList(tHalHandle hHal, tANI_U8 *numChannels, tANI_U8 **chanList) { @@ -9089,38 +10915,3 @@ eHalStatus sme_getChannelInfo(tHalHandle hHal, tANI_U8 chanId, return status; } #endif /* QCA_WIFI_2_0 */ - -/* --------------------------------------------------------------------------- - \fn sme_SendRateUpdateInd - \brief API to Update rate - \param hHal - The handle returned by macOpen - \param rateUpdateParams - Pointer to rate update params - \return eHalStatus - ---------------------------------------------------------------------------*/ -eHalStatus sme_SendRateUpdateInd(tHalHandle hHal, tSirRateUpdateInd *rateUpdateParams) -{ - tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - eHalStatus status; - vos_msg_t msg; - - if (eHAL_STATUS_SUCCESS == (status = sme_AcquireGlobalLock(&pMac->sme))) - { - msg.type = WDA_RATE_UPDATE_IND; - msg.bodyptr = rateUpdateParams; - - if (!VOS_IS_STATUS_SUCCESS(vos_mq_post_message(VOS_MODULE_ID_WDA, &msg))) - { - VOS_TRACE( VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,"%s: Not able " - "to post WDA_SET_RMC_RATE_IND to WDA!", - __func__); - - sme_ReleaseGlobalLock(&pMac->sme); - return eHAL_STATUS_FAILURE; - } - - sme_ReleaseGlobalLock(&pMac->sme); - return eHAL_STATUS_SUCCESS; - } - - return status; -} diff --git a/CORE/SME/src/sme_common/sme_FTApi.c b/CORE/SME/src/sme_common/sme_FTApi.c index 6497f29b60da..de4ceb57bf41 100644 --- a/CORE/SME/src/sme_common/sme_FTApi.c +++ b/CORE/SME/src/sme_common/sme_FTApi.c @@ -25,6 +25,7 @@ * to the Linux Foundation. */ + #ifdef WLAN_FEATURE_VOWIFI_11R /**========================================================================= @@ -58,7 +59,7 @@ void sme_FTOpen(tHalHandle hHal) pMac->ft.ftSmeContext.reassoc_ft_ies_length = 0; pMac->ft.ftSmeContext.setFTPreAuthState = FALSE; pMac->ft.ftSmeContext.setFTPTKState = FALSE; - status = palTimerAlloc(pMac->hHdd, &pMac->ft.ftSmeContext.preAuthReassocIntvlTimer, + status = vos_timer_init(&pMac->ft.ftSmeContext.preAuthReassocIntvlTimer,VOS_TIMER_TYPE_SW, sme_PreauthReassocIntvlTimerCallback, (void *)pMac); if (eHAL_STATUS_SUCCESS != status) @@ -108,14 +109,14 @@ void sme_FTClose(tHalHandle hHal) if (pMac->ft.ftSmeContext.psavedFTPreAuthRsp != NULL) { #if defined WLAN_FEATURE_VOWIFI_11R_DEBUG - smsLog( pMac, LOGE, FL("%s: Freeing %p and setting to NULL"), + smsLog( pMac, LOGE, FL("Freeing %p and setting to NULL"), pMac->ft.ftSmeContext.psavedFTPreAuthRsp); #endif vos_mem_free(pMac->ft.ftSmeContext.psavedFTPreAuthRsp); pMac->ft.ftSmeContext.psavedFTPreAuthRsp = NULL; } - palTimerFree(pMac->hHdd, pMac->ft.ftSmeContext.preAuthReassocIntvlTimer); + vos_timer_destroy(&pMac->ft.ftSmeContext.preAuthReassocIntvlTimer); } void sme_SetFTPreAuthState(tHalHandle hHal, v_BOOL_t state) @@ -171,7 +172,7 @@ void sme_SetFTIEs( tHalHandle hHal, tANI_U8 sessionId, const tANI_U8 *ft_ies, // Save the FT IEs pMac->ft.ftSmeContext.auth_ft_ies = vos_mem_malloc(ft_ies_length); - if(pMac->ft.ftSmeContext.auth_ft_ies == NULL) + if ( NULL == pMac->ft.ftSmeContext.auth_ft_ies ) { smsLog( pMac, LOGE, FL("Memory allocation failed for " "auth_ft_ies")); @@ -179,9 +180,8 @@ void sme_SetFTIEs( tHalHandle hHal, tANI_U8 sessionId, const tANI_U8 *ft_ies, return; } pMac->ft.ftSmeContext.auth_ft_ies_length = ft_ies_length; - vos_mem_copy((tANI_U8 *)pMac->ft.ftSmeContext.auth_ft_ies, ft_ies, - ft_ies_length); - + vos_mem_copy((tANI_U8 *)pMac->ft.ftSmeContext.auth_ft_ies, + ft_ies,ft_ies_length); pMac->ft.ftSmeContext.FTState = eFT_AUTH_REQ_READY; #if defined WLAN_FEATURE_VOWIFI_11R_DEBUG @@ -225,7 +225,7 @@ void sme_SetFTIEs( tHalHandle hHal, tANI_U8 sessionId, const tANI_U8 *ft_ies, // Save the FT IEs pMac->ft.ftSmeContext.reassoc_ft_ies = vos_mem_malloc(ft_ies_length); - if(pMac->ft.ftSmeContext.reassoc_ft_ies == NULL) + if ( NULL == pMac->ft.ftSmeContext.reassoc_ft_ies ) { smsLog( pMac, LOGE, FL("Memory allocation failed for " "reassoc_ft_ies")); @@ -234,7 +234,7 @@ void sme_SetFTIEs( tHalHandle hHal, tANI_U8 sessionId, const tANI_U8 *ft_ies, } pMac->ft.ftSmeContext.reassoc_ft_ies_length = ft_ies_length; vos_mem_copy((tANI_U8 *)pMac->ft.ftSmeContext.reassoc_ft_ies, ft_ies, - ft_ies_length); + ft_ies_length); pMac->ft.ftSmeContext.FTState = eFT_SET_KEY_WAIT; #if defined WLAN_FEATURE_VOWIFI_11R_DEBUG @@ -274,13 +274,13 @@ eHalStatus sme_FTSendUpdateKeyInd(tHalHandle hHal, tCsrRoamSetKey * pFTKeyInfo) sizeof( pMsg->keyMaterial.length ) + sizeof( pMsg->keyMaterial.edType ) + sizeof( pMsg->keyMaterial.numKeys ) + sizeof( pMsg->keyMaterial.key ); - status = palAllocateMemory(pMac->hHdd, (void **)&pMsg, msgLen); - if ( !HAL_STATUS_SUCCESS(status) ) + pMsg = vos_mem_malloc(msgLen); + if ( NULL == pMsg ) { return eHAL_STATUS_FAILURE; } - palZeroMemory(pMac->hHdd, pMsg, msgLen); + vos_mem_set(pMsg, msgLen, 0); pMsg->messageType = pal_cpu_to_be16((tANI_U16)eWNI_SME_FT_UPDATE_KEY); pMsg->length = pal_cpu_to_be16(msgLen); @@ -304,17 +304,14 @@ eHalStatus sme_FTSendUpdateKeyInd(tHalHandle hHal, tCsrRoamSetKey * pFTKeyInfo) keymaterial->key[ 0 ].unicast = (tANI_U8)eANI_BOOLEAN_TRUE; keymaterial->key[ 0 ].keyDirection = pFTKeyInfo->keyDirection; - palCopyMemory( pMac->hHdd, &keymaterial->key[ 0 ].keyRsc, - pFTKeyInfo->keyRsc, CSR_MAX_RSC_LEN ); - + vos_mem_copy(&keymaterial->key[ 0 ].keyRsc, pFTKeyInfo->keyRsc, CSR_MAX_RSC_LEN); keymaterial->key[ 0 ].paeRole = pFTKeyInfo->paeRole; keymaterial->key[ 0 ].keyLength = pFTKeyInfo->keyLength; if ( pFTKeyInfo->keyLength && pFTKeyInfo->Key ) { - palCopyMemory( pMac->hHdd, &keymaterial->key[ 0 ].key, - pFTKeyInfo->Key, pFTKeyInfo->keyLength ); + vos_mem_copy(&keymaterial->key[ 0 ].key, pFTKeyInfo->Key, pFTKeyInfo->keyLength); if(pFTKeyInfo->keyLength == 16) { smsLog(pMac, LOG1, "SME Set Update Ind keyIdx (%d) encType(%d) key = " @@ -383,8 +380,29 @@ eHalStatus sme_FTUpdateKey( tHalHandle hHal, tCsrRoamSetKey * pFTKeyInfo ) switch(pMac->ft.ftSmeContext.FTState) { case eFT_SET_KEY_WAIT: - +#ifdef QCA_WIFI_ISOC + if (sme_GetFTPreAuthState (hHal) == TRUE) + { + status = sme_FTSendUpdateKeyInd(pMac, pFTKeyInfo); + if (status != 0 ) + { + smsLog( pMac, LOGE, "%s: Key set failure %d", __func__, + status); + pMac->ft.ftSmeContext.setFTPTKState = FALSE; + status = eHAL_STATUS_FT_PREAUTH_KEY_FAILED; + } + else + { + pMac->ft.ftSmeContext.setFTPTKState = TRUE; + status = eHAL_STATUS_FT_PREAUTH_KEY_SUCCESS; + smsLog( pMac, LOG1, "%s: Key set success", __func__); + } + sme_SetFTPreAuthState(hHal, FALSE); + } +#else status = eHAL_STATUS_FT_PREAUTH_KEY_FAILED; +#endif /* QCA_WIFI_ISOC */ + pMac->ft.ftSmeContext.FTState = eFT_START_READY; #ifdef WLAN_FEATURE_VOWIFI_11R_DEBUG smsLog( pMac, LOG1, "%s: state changed to %d status %d", __func__, diff --git a/CORE/SVC/inc/wlan_nlink_srv.h b/CORE/SVC/inc/wlan_nlink_srv.h index 64c8dc5d4b0a..05ed4e83c5cc 100644 --- a/CORE/SVC/inc/wlan_nlink_srv.h +++ b/CORE/SVC/inc/wlan_nlink_srv.h @@ -49,10 +49,17 @@ typedef int (* nl_srv_msg_callback)(struct sk_buff * skb); int nl_srv_init(void); +#ifdef WLAN_KD_READY_NOTIFIER +void nl_srv_exit(int dst_pid); +#else void nl_srv_exit(void); +#endif /* WLAN_KD_READY_NOTIFIER */ int nl_srv_register(tWlanNlModTypes msg_type, nl_srv_msg_callback msg_handler); int nl_srv_unregister(tWlanNlModTypes msg_type, nl_srv_msg_callback msg_handler); int nl_srv_ucast(struct sk_buff * skb, int dst_pid); int nl_srv_bcast(struct sk_buff * skb); - +#ifdef WLAN_KD_READY_NOTIFIER +void nl_srv_nl_ready_indication(void); +void nl_srv_nl_close_indication(int pid); +#endif /* WLAN_KD_READY_NOTIFIER */ #endif diff --git a/CORE/SVC/src/nlink/wlan_nlink_srv.c b/CORE/SVC/src/nlink/wlan_nlink_srv.c index 68c14c1a121c..70ed98468fdf 100644 --- a/CORE/SVC/src/nlink/wlan_nlink_srv.c +++ b/CORE/SVC/src/nlink/wlan_nlink_srv.c @@ -48,6 +48,11 @@ static DEFINE_MUTEX(nl_srv_sem); static struct sock *nl_srv_sock; static nl_srv_msg_callback nl_srv_msg_handler[NLINK_MAX_CALLBACKS]; +#ifdef WLAN_KD_READY_NOTIFIER +const char driverLoaded[] = "KNLREADY"; +const char driverUnLoaded[] = "KNLCLOSE"; +#endif /* WLAN_KD_READY_NOTIFIER */ + //Forward declaration static void nl_srv_rcv (struct sk_buff *sk); static void nl_srv_rcv_skb (struct sk_buff *skb); @@ -92,8 +97,18 @@ int nl_srv_init(void) * Deinit the netlink service. * Netlink service is unusable after this. */ +#ifdef WLAN_KD_READY_NOTIFIER +void nl_srv_exit(int dst_pid) +#else void nl_srv_exit(void) +#endif /* WLAN_KD_READY_NOTIFIER */ { +#ifdef WLAN_KD_READY_NOTIFIER + if (0 != dst_pid) + { + nl_srv_nl_close_indication(dst_pid); + } +#endif /* WLAN_KD_READY_NOTIFIER */ netlink_kernel_release(nl_srv_sock); } @@ -218,8 +233,8 @@ static void nl_srv_rcv_skb (struct sk_buff *skb) if (nlh->nlmsg_len < sizeof(*nlh) || skb->len < nlh->nlmsg_len) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, "NLINK: Invalid " - "Netlink message: skb[0x%X], len[%d], nlhdr[0x%X], nlmsg_len[%d]", - (u32)skb, skb->len, (u32)nlh, nlh->nlmsg_len); + "Netlink message: skb[%p], len[%d], nlhdr[%p], nlmsg_len[%d]", + skb, skb->len, nlh, nlh->nlmsg_len); return; } @@ -280,3 +295,93 @@ static void nl_srv_rcv_msg (struct sk_buff *skb, struct nlmsghdr *nlh) } } +#ifdef WLAN_KD_READY_NOTIFIER +/* + * Send Net Link interface ready indication to application daemon + * Each netlink message will have a message of type tAniMsgHdr inside. + */ +void nl_srv_nl_ready_indication +( + void +) +{ + struct sk_buff *skb = NULL; + struct nlmsghdr *nlh; + int err; + + skb = alloc_skb(NLMSG_SPACE(sizeof(driverLoaded)), GFP_KERNEL); + if (NULL == skb) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "NLINK: skb alloc fail %s", __func__); + return; + } + + nlh = (struct nlmsghdr *)skb->data; + nlh->nlmsg_pid = 0; /* from kernel */ + nlh->nlmsg_flags = 0; + nlh->nlmsg_seq = 0; + nlh->nlmsg_len = sizeof(driverLoaded); + memcpy(((char *)nlh) + sizeof(struct nlmsghdr), + driverLoaded, + sizeof(driverLoaded)); + skb_put(skb, NLMSG_SPACE(sizeof(driverLoaded))); + + /* sender is in group 1<<0 */ + NETLINK_CB(skb).dst_group = WLAN_NLINK_MCAST_GRP_ID; + + /*multicast the message to all listening processes*/ + err = netlink_broadcast(nl_srv_sock, skb, 0, 1, GFP_KERNEL); + if (err) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_LOW, + "NLINK: Ready Indication Send Fail %s, err %d", + __func__, err); + } + return; +} + +/* + * Send Net Link interface close indication to application daemon + * Each netlink message will have a message of type tAniMsgHdr inside. + */ +void nl_srv_nl_close_indication +( + int pid +) +{ + struct sk_buff *skb = NULL; + struct nlmsghdr *nlh; + int err; + + skb = alloc_skb(sizeof(driverUnLoaded),GFP_KERNEL); + if (NULL == skb) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "NLINK: skb alloc fail %s", __func__); + return; + } + + nlh = (struct nlmsghdr *)skb->data; + nlh->nlmsg_pid = 0; /* from kernel */ + nlh->nlmsg_flags = 0; + nlh->nlmsg_seq = 0; + nlh->nlmsg_len = sizeof(driverUnLoaded); + memcpy(((char *)nlh) + sizeof(struct nlmsghdr), + driverUnLoaded, + sizeof(driverUnLoaded)); + skb_put(skb, NLMSG_SPACE(sizeof(driverUnLoaded))); + + /* sender is in group 1<<0 */ + NETLINK_CB(skb).dst_group = 0; + err = netlink_unicast(nl_srv_sock, skb, pid, MSG_DONTWAIT); + if (err) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_LOW, + "NLINK: Close Indication Send Fail %s", __func__); + } + + return; +} +#endif /* WLAN_KD_READY_NOTIFIER */ + diff --git a/CORE/SVC/src/ptt/wlan_ptt_sock_svc.c b/CORE/SVC/src/ptt/wlan_ptt_sock_svc.c index 6a4782d1cb09..f2035bb7e29f 100644 --- a/CORE/SVC/src/ptt/wlan_ptt_sock_svc.c +++ b/CORE/SVC/src/ptt/wlan_ptt_sock_svc.c @@ -134,6 +134,11 @@ static void ptt_sock_proc_reg_req(tAniHdr *wmsg, int radio) //send reg response message to the application rspmsg.ret = ANI_NL_MSG_OK; rspmsg.regReq.type = reg_req->type; +#ifdef WLAN_KD_READY_NOTIFIER + /* NL client try to registration + * to make sure connection, broadcast READY notification */ + nl_srv_nl_ready_indication(); +#endif /* WLAN_KD_READY_NOTIFIER */ /*Save the pid*/ pAdapterHandle->ptt_pid = reg_req->pid; rspmsg.regReq.pid= reg_req->pid; @@ -300,6 +305,9 @@ int ptt_sock_activate_svc(void *pAdapter) pAdapterHandle = (struct hdd_context_s*)pAdapter; nl_srv_register(ANI_NL_MSG_PUMAC, ptt_sock_rx_nlink_msg); nl_srv_register(ANI_NL_MSG_PTT, ptt_sock_rx_nlink_msg); +#ifdef WLAN_KD_READY_NOTIFIER + nl_srv_nl_ready_indication(); +#endif /* WLAN_KD_READY_NOTIFIER */ return 0; } #endif //PTT_SOCK_SVC_ENABLE diff --git a/CORE/SYS/common/inc/wlan_qct_sys.h b/CORE/SYS/common/inc/wlan_qct_sys.h index 524750e85c78..9a8c3d4264e8 100644 --- a/CORE/SYS/common/inc/wlan_qct_sys.h +++ b/CORE/SYS/common/inc/wlan_qct_sys.h @@ -423,6 +423,7 @@ v_VOID_t sysTxFreeMsg( v_CONTEXT_t pVContext, vos_msg_t* pMsg ); --------------------------------------------------------------------------*/ void wlan_sys_ftm(void *pMsgPtr); +void wlan_sys_probe(void); #endif // WLAN_QCT_SYS_H__ diff --git a/CORE/SYS/common/src/wlan_qct_sys.c b/CORE/SYS/common/src/wlan_qct_sys.c index 5deb897973ec..8134a6f5e56d 100644 --- a/CORE/SYS/common/src/wlan_qct_sys.c +++ b/CORE/SYS/common/src/wlan_qct_sys.c @@ -359,7 +359,7 @@ VOS_STATUS sysMcProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg ) } else { - vosStatus = sme_Stop( hHal, TRUE ); + vosStatus = sme_Stop( hHal, HAL_STOP_TYPE_SYS_DEEP_SLEEP); VOS_ASSERT( VOS_IS_STATUS_SUCCESS( vosStatus ) ); vosStatus = macStop( hHal, HAL_STOP_TYPE_SYS_DEEP_SLEEP ); @@ -376,12 +376,9 @@ VOS_STATUS sysMcProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg ) // function that is in the message. case SYS_MSG_ID_MC_THR_PROBE: { - /* Handling for this message is not needed now so adding - *debug print and VOS_ASSERT*/ - VOS_TRACE( VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR, - " Received SYS_MSG_ID_MC_THR_PROBE message msgType= %d [0x%08lx]", - pMsg->type, pMsg->type ); - VOS_ASSERT(0); + VOS_TRACE(VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR, + " Received SYS_MSG_ID_MC_THR_PROBE message msgType = %d [0x%08lx]", + pMsg->type, pMsg->type); break; } @@ -713,7 +710,7 @@ SysProcessMmhMsg /* free the mem and return */ if(pMsg->bodyptr) { - palFreeMemory( pMac->hHdd, pMsg->bodyptr); + vos_mem_free( pMsg->bodyptr); } } @@ -763,3 +760,16 @@ void wlan_sys_ftm(void *pMsgPtr) +void wlan_sys_probe(void) +{ + vos_msg_t vosMessage; + + vosMessage.reserved = FTM_SYS_MSG_COOKIE; + vosMessage.type = SYS_MSG_ID_MC_THR_PROBE; + vosMessage.bodyptr = NULL; + + vos_mq_post_message(VOS_MQ_ID_SYS, &vosMessage); + + return; +} + diff --git a/CORE/SYS/legacy/src/pal/inc/palApi.h b/CORE/SYS/legacy/src/pal/inc/palApi.h index e8bb0a27dcc0..654cfbc58dc1 100644 --- a/CORE/SYS/legacy/src/pal/inc/palApi.h +++ b/CORE/SYS/legacy/src/pal/inc/palApi.h @@ -212,6 +212,8 @@ eHalStatus palWriteDeviceMemory( tHddHandle hHdd, tANI_U32 memOffset, tANI_U8 *p try to use it unless the status returns success). -------------------------------------------------------------------------------*/ +#ifndef FEATURE_WLAN_PAL_MEM_DISABLE + #ifdef MEMORY_DEBUG #define palAllocateMemory(hHdd, ppMemory, numBytes) palAllocateMemory_debug(hHdd, ppMemory, numBytes, __FILE__, __LINE__) eHalStatus palAllocateMemory_debug( tHddHandle hHdd, void **ppMemory, tANI_U32 numBytes, char* fileName, tANI_U32 lineNum ); @@ -332,8 +334,8 @@ eHalStatus palZeroMemory( tHddHandle hHdd, void *pMemory, tANI_U32 numBytes ) locations are equal or now equal. -------------------------------------------------------------------------------*/ -tANI_BOOLEAN palEqualMemory( tHddHandle hHdd, void *pMemory1, void *pMemory2, tANI_U32 numBytes ); - +tANI_BOOLEAN palEqualMemory( tHddHandle hHdd, void *pMemory1, void *pMemory2, tANI_U32 numBytes ); +#endif /** --------------------------------------------------------------------------- \fn palFillDeviceMemory diff --git a/CORE/SYS/legacy/src/pal/inc/palTimer.h b/CORE/SYS/legacy/src/pal/inc/palTimer.h index cfaecb2afc0e..1f56bc5790f4 100644 --- a/CORE/SYS/legacy/src/pal/inc/palTimer.h +++ b/CORE/SYS/legacy/src/pal/inc/palTimer.h @@ -25,7 +25,6 @@ * to the Linux Foundation. */ - /** ------------------------------------------------------------------------- * ------------------------------------------------------------------------- * @@ -36,7 +35,6 @@ $Id$ - Copyright (C) 2006 Airgo Networks, Incorporated ... description... @@ -61,7 +59,7 @@ typedef void (*palTimerCallback)(void *); #define PAL_TIMER_TO_MS_UNIT 1000 #define PAL_TIMER_TO_SEC_UNIT 1000000 - +#ifndef FEATURE_WLAN_PAL_TIMER_DISABLE //PAL timer functions //pPalTimer is a pointer to a caller allocated tPalTimer object //pContext is a pointer to an object that will be passed in when callback is called @@ -84,6 +82,6 @@ eHalStatus palTimerStart(tHddHandle, tPalTimerHandle, tANI_U32 uExpireTime, tANI //palTimerStop will cancel the timer but doesn't guarrantee the callback will not called afterwards //For Windows, if the driver is halting, the callback is not called after this function returns. eHalStatus palTimerStop(tHddHandle, tPalTimerHandle); - +#endif #endif diff --git a/CORE/SYS/legacy/src/pal/src/palApiComm.c b/CORE/SYS/legacy/src/pal/src/palApiComm.c index c91c45095105..dc99f46e1fd4 100644 --- a/CORE/SYS/legacy/src/pal/src/palApiComm.c +++ b/CORE/SYS/legacy/src/pal/src/palApiComm.c @@ -35,6 +35,8 @@ #include "adf_nbuf.h" #endif +#ifndef FEATURE_WLAN_PAL_MEM_DISABLE + #ifdef MEMORY_DEBUG eHalStatus palAllocateMemory_debug( tHddHandle hHdd, void **ppMemory, tANI_U32 numBytes, char* fileName, tANI_U32 lineNum ) { @@ -94,6 +96,7 @@ tANI_BOOLEAN palEqualMemory( tHddHandle hHdd, void *pMemory1, void *pMemory2, tA { return( vos_mem_compare( pMemory1, pMemory2, numBytes ) ); } +#endif #ifndef QCA_WIFI_2_0 eHalStatus palPktAlloc(tHddHandle hHdd, eFrameType frmType, tANI_U16 size, void **data, void **ppPacket) @@ -339,7 +342,7 @@ eHalStatus palSendMBMessage(tHddHandle hHdd, void *pBuf) } } - palFreeMemory( hHdd, pBuf ); + vos_mem_free( pBuf ); return( halStatus ); } diff --git a/CORE/SYS/legacy/src/pal/src/palTimer.c b/CORE/SYS/legacy/src/pal/src/palTimer.c index 404db7d11335..458ad6372cef 100644 --- a/CORE/SYS/legacy/src/pal/src/palTimer.c +++ b/CORE/SYS/legacy/src/pal/src/palTimer.c @@ -33,7 +33,6 @@ $Id$ - Copyright (C) 2006 Airgo Networks, Incorporated This file contains function implementations for the Platform @@ -46,6 +45,7 @@ #include #include +#ifndef FEATURE_WLAN_PAL_TIMER_DISABLE typedef struct sPalTimer { palTimerCallback timerCallback; @@ -58,8 +58,6 @@ typedef struct sPalTimer } tPalTimer, *tpPalTimer; - - v_VOID_t internalTimerCallback( v_PVOID_t userData ) { tPalTimer *pPalTimer = (tPalTimer *)userData; @@ -239,7 +237,7 @@ eHalStatus palTimerStop(tHddHandle hHdd, tPalTimerHandle hPalTimer) return( status ); } - +#endif diff --git a/CORE/SYS/legacy/src/system/src/macInitApi.c b/CORE/SYS/legacy/src/system/src/macInitApi.c index dff85eedd362..570a0ff3aaed 100644 --- a/CORE/SYS/legacy/src/system/src/macInitApi.c +++ b/CORE/SYS/legacy/src/system/src/macInitApi.c @@ -26,7 +26,6 @@ */ /* - * * Airgo Networks, Inc proprietary. All rights reserved. * macInitApi.c - This file has all the mac level init functions * for all the defined threads at system level. @@ -70,15 +69,15 @@ tSirRetStatus macPreStart(tHalHandle hHal) for(i=0; ihHdd, ((void *)&pMac->dumpTableEntry[i]), sizeof(tDumpModuleEntry)) - != eHAL_STATUS_SUCCESS) + pMac->dumpTableEntry[i] = vos_mem_malloc(sizeof(tDumpModuleEntry)); + if ( NULL == pMac->dumpTableEntry[i] ) { memAllocFailed = eANI_BOOLEAN_TRUE; break; } else { - palZeroMemory(pMac->hHdd, pMac->dumpTableEntry[i], sizeof(tSirMbMsg)); + vos_mem_set(pMac->dumpTableEntry[i], sizeof(tSirMbMsg), 0); } } if( memAllocFailed ) @@ -86,7 +85,7 @@ tSirRetStatus macPreStart(tHalHandle hHal) while(i>0) { i--; - palFreeMemory(pMac, pMac->dumpTableEntry[i]); + vos_mem_free(pMac->dumpTableEntry[i]); } sysLog(pMac, LOGE, FL("pMac->dumpTableEntry is NULL\n")); status = eSIR_FAILURE; @@ -124,7 +123,8 @@ tSirRetStatus macStart(tHalHandle hHal, void* pHalMacStartParams) macTraceInit(pMac); #endif - if (!HAL_STATUS_SUCCESS(palAllocateMemory(pMac->hHdd, ((void *)&pMac->pResetMsg), sizeof(tSirMbMsg)))) + pMac->pResetMsg = vos_mem_malloc(sizeof(tSirMbMsg)); + if ( NULL == pMac->pResetMsg ) { sysLog(pMac, LOGE, FL("pMac->pResetMsg is NULL\n")); status = eSIR_FAILURE; @@ -132,7 +132,7 @@ tSirRetStatus macStart(tHalHandle hHal, void* pHalMacStartParams) } else { - palZeroMemory(pMac->hHdd, pMac->pResetMsg, sizeof(tSirMbMsg)); + vos_mem_set(pMac->pResetMsg, sizeof(tSirMbMsg), 0); } if (pMac->gDriverType != eDRIVER_TYPE_MFG) @@ -166,13 +166,13 @@ tSirRetStatus macStop(tHalHandle hHal, tHalStopType stopType) // in reset context this memory will be freed by HDD. if(false == pMac->sys.abort) { - palFreeMemory(pMac->hHdd, pMac->pResetMsg); + vos_mem_free(pMac->pResetMsg); pMac->pResetMsg = NULL; } /* Free the DumpTableEntry */ for(i=0; idumpTableEntry[i]); + vos_mem_free(pMac->dumpTableEntry[i]); } return eSIR_SUCCESS; @@ -203,11 +203,12 @@ tSirRetStatus macOpen(tHalHandle *pHalHandle, tHddHandle hHdd, tMacOpenParameter */ /* Allocate pMac */ - if (palAllocateMemory(hHdd, ((void **)&pMac), sizeof(tAniSirGlobal)) != eHAL_STATUS_SUCCESS) + pMac = vos_mem_malloc(sizeof(tAniSirGlobal)); + if ( NULL == pMac ) return eSIR_FAILURE; /* Initialize the pMac structure */ - palZeroMemory(hHdd, pMac, sizeof(tAniSirGlobal)); + vos_mem_set(pMac, sizeof(tAniSirGlobal), 0); /** Store the Driver type in pMac Global.*/ //pMac->gDriverType = pMacOpenParms->driverType; @@ -268,7 +269,7 @@ tSirRetStatus macClose(tHalHandle hHal) logDeinit(pMac); // Finally, de-allocate the global MAC datastructure: - palFreeMemory( pMac->hHdd, pMac ); + vos_mem_free( pMac ); return eSIR_SUCCESS; } diff --git a/CORE/SYS/legacy/src/system/src/sysEntryFunc.c b/CORE/SYS/legacy/src/system/src/sysEntryFunc.c index 56eb748ebafd..f95d1f29ca45 100644 --- a/CORE/SYS/legacy/src/system/src/sysEntryFunc.c +++ b/CORE/SYS/legacy/src/system/src/sysEntryFunc.c @@ -82,7 +82,7 @@ tSirRetStatus sysInitGlobals(tpAniSirGlobal pMac) { - palZeroMemory(pMac->hHdd, (tANI_U8 *) &pMac->sys, sizeof(pMac->sys)); + vos_mem_set((tANI_U8 *) &pMac->sys, sizeof(pMac->sys), 0); pMac->sys.gSysEnableScanMode = 1; pMac->sys.gSysEnableLinkMonitorMode = 0; diff --git a/CORE/SYS/legacy/src/utils/inc/dot11fdefs.h b/CORE/SYS/legacy/src/utils/inc/dot11fdefs.h index e0d552c0c4e1..15fdf8962c97 100644 --- a/CORE/SYS/legacy/src/utils/inc/dot11fdefs.h +++ b/CORE/SYS/legacy/src/utils/inc/dot11fdefs.h @@ -33,7 +33,6 @@ * \brief C defines customizing our framesc-generated code * * - * * Copyright (C) 2006 Airgo Networks, Incorporated * * 'framesc' generates code written in terms of a number of macros @@ -46,11 +45,11 @@ // This controls how the "dot11f" code copies memory #define DOT11F_MEMCPY(ctx, dst, src, len) \ - palCopyMemory( ( ctx )->hHdd, ( tANI_U8* )( dst ), ( tANI_U8* )( src ), ( len ) ) + vos_mem_copy( ( tANI_U8* )( dst ), ( tANI_U8* )( src ), ( len ) ) // This controls how the "dot11f" code compares memory #define DOT11F_MEMCMP(ctx, lhs, rhs, len) \ - ( ! palEqualMemory( ( ctx )->hHdd, ( tANI_U8* )( lhs ), ( tANI_U8* )( rhs ), ( len ) ) ) + ( ! vos_mem_compare( ( tANI_U8* )( lhs ), ( tANI_U8* )( rhs ), ( len ) ) ) # if defined ( DBG ) && ( DBG != 0 ) diff --git a/CORE/SYS/legacy/src/utils/inc/utilsParser.h b/CORE/SYS/legacy/src/utils/inc/utilsParser.h index 087e453c6cc3..d0bd2879e5f6 100644 --- a/CORE/SYS/legacy/src/utils/inc/utilsParser.h +++ b/CORE/SYS/legacy/src/utils/inc/utilsParser.h @@ -26,7 +26,6 @@ */ /* - * * Airgo Networks, Inc proprietary. All rights reserved. * This file utilsParser.h contains the utility function protos * used internally by the parser @@ -47,6 +46,7 @@ void ConvertSSID (tpAniSirGlobal, tSirMacSSid*, tDot11fIESSID*); void ConvertSuppRates (tpAniSirGlobal, tSirMacRateSet*, tDot11fIESuppRates*); +void ConvertFHParams (tpAniSirGlobal, tSirMacFHParamSet*, tDot11fIEFHParamSet*); void ConvertExtSuppRates (tpAniSirGlobal, tSirMacRateSet*, tDot11fIEExtSuppRates*); void ConvertQOSCaps (tpAniSirGlobal, tSirMacQosCapabilityIE*, tDot11fIEQOSCapsAp*); void ConvertQOSCapsStation (tpAniSirGlobal, tSirMacQosCapabilityStaIE*, tDot11fIEQOSCapsStation*); diff --git a/CORE/SYS/legacy/src/utils/src/dot11f.c b/CORE/SYS/legacy/src/utils/src/dot11f.c index 71822f4c773d..9fee77b1382a 100644 --- a/CORE/SYS/legacy/src/utils/src/dot11f.c +++ b/CORE/SYS/legacy/src/utils/src/dot11f.c @@ -1,4 +1,4 @@ -/* +/** * Copyright (c) 2013, The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. @@ -25,7 +25,6 @@ * to the Linux Foundation. */ - /** * \file dot11f.c * @@ -37,10 +36,10 @@ * * * This file was automatically generated by 'framesc' - * Fri Sep 27 20:26:57 2013 from the following file(s): + * Tue Dec 3 15:04:59 2013 from the following file(s): * * dot11f.frms - * + * * PLEASE DON'T EDIT THIS FILE BY HAND! * * @@ -501,7 +500,7 @@ static tANI_U32 GetContainerIesLen(tpAniSirGlobal pCtx, *pnConsumed = len; return DOT11F_PARSE_SUCCESS; - + } @@ -548,7 +547,7 @@ tANI_U32 dot11fUnpackTlvCommonFunc2(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U1 return status; } /* End dot11fUnpackTlvCommonFunc2. */ - + void dot11fUnpackFfCommonFunc(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U16 *pDstField) { @@ -561,7 +560,7 @@ tANI_U32 dot11fUnpackIeCommonFunc(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ie { tANI_U32 status = DOT11F_PARSE_SUCCESS; (void)ielen; - (void)pBuf; + (void)pBuf; if ((*pDstPresent)) status = DOT11F_DUPLICATE_IE; *pDstPresent = 1; *pDstField = *pBuf; @@ -760,6 +759,16 @@ void dot11fUnpackFfDialogToken(tpAniSirGlobal pCtx, #define SigFfDialogToken ( 0x000d ) +void dot11fUnpackFfLeader(tpAniSirGlobal pCtx, + tANI_U8 *pBuf, + tDot11fFfLeader *pDst) +{ + DOT11F_MEMCPY(pCtx, pDst->mac, pBuf, 6); + (void)pCtx; +} /* End dot11fUnpackFfLeader. */ + +#define SigFfLeader ( 0x000e ) + void dot11fUnpackFfLinkMargin(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tDot11fFfLinkMargin *pDst) @@ -768,9 +777,19 @@ void dot11fUnpackFfLinkMargin(tpAniSirGlobal pCtx, (void)pCtx; } /* End dot11fUnpackFfLinkMargin. */ -#define SigFfLinkMargin ( 0x000e ) +#define SigFfLinkMargin ( 0x000f ) -#define SigFfListenInterval ( 0x000f ) +#define SigFfListenInterval ( 0x0010 ) + +void dot11fUnpackFfMagicCode(tpAniSirGlobal pCtx, + tANI_U8 *pBuf, + tDot11fFfMagicCode *pDst) +{ + DOT11F_MEMCPY(pCtx, pDst->magic, pBuf, 6); + (void)pCtx; +} /* End dot11fUnpackFfMagicCode. */ + +#define SigFfMagicCode ( 0x0011 ) void dot11fUnpackFfMaxTxPower(tpAniSirGlobal pCtx, tANI_U8 *pBuf, @@ -780,7 +799,7 @@ void dot11fUnpackFfMaxTxPower(tpAniSirGlobal pCtx, (void)pCtx; } /* End dot11fUnpackFfMaxTxPower. */ -#define SigFfMaxTxPower ( 0x0010 ) +#define SigFfMaxTxPower ( 0x0012 ) void dot11fUnpackFfNumOfRepetitions(tpAniSirGlobal pCtx, tANI_U8 *pBuf, @@ -790,7 +809,7 @@ void dot11fUnpackFfNumOfRepetitions(tpAniSirGlobal pCtx, (void)pCtx; } /* End dot11fUnpackFfNumOfRepetitions. */ -#define SigFfNumOfRepetitions ( 0x0011 ) +#define SigFfNumOfRepetitions ( 0x0013 ) void dot11fUnpackFfOperatingMode(tpAniSirGlobal pCtx, tANI_U8 *pBuf, @@ -805,7 +824,7 @@ void dot11fUnpackFfOperatingMode(tpAniSirGlobal pCtx, (void)pCtx; } /* End dot11fUnpackFfOperatingMode. */ -#define SigFfOperatingMode ( 0x0012 ) +#define SigFfOperatingMode ( 0x0014 ) void dot11fUnpackFfP2POUI(tpAniSirGlobal pCtx, tANI_U8 *pBuf, @@ -815,7 +834,7 @@ void dot11fUnpackFfP2POUI(tpAniSirGlobal pCtx, (void)pCtx; } /* End dot11fUnpackFfP2POUI. */ -#define SigFfP2POUI ( 0x0013 ) +#define SigFfP2POUI ( 0x0015 ) void dot11fUnpackFfP2POUISubType(tpAniSirGlobal pCtx, tANI_U8 *pBuf, @@ -825,7 +844,7 @@ void dot11fUnpackFfP2POUISubType(tpAniSirGlobal pCtx, (void)pCtx; } /* End dot11fUnpackFfP2POUISubType. */ -#define SigFfP2POUISubType ( 0x0014 ) +#define SigFfP2POUISubType ( 0x0016 ) void dot11fUnpackFfRCPI(tpAniSirGlobal pCtx, tANI_U8 *pBuf, @@ -835,7 +854,37 @@ void dot11fUnpackFfRCPI(tpAniSirGlobal pCtx, (void)pCtx; } /* End dot11fUnpackFfRCPI. */ -#define SigFfRCPI ( 0x0015 ) +#define SigFfRCPI ( 0x0017 ) + +void dot11fUnpackFfRMCDialogToken(tpAniSirGlobal pCtx, + tANI_U8 *pBuf, + tDot11fFfRMCDialogToken *pDst) +{ + framesntohl(pCtx, &pDst->token, pBuf, 0); + (void)pCtx; +} /* End dot11fUnpackFfRMCDialogToken. */ + +#define SigFfRMCDialogToken ( 0x0018 ) + +void dot11fUnpackFfRMCOUI(tpAniSirGlobal pCtx, + tANI_U8 *pBuf, + tDot11fFfRMCOUI *pDst) +{ + DOT11F_MEMCPY(pCtx, pDst->oui, pBuf, 3); + (void)pCtx; +} /* End dot11fUnpackFfRMCOUI. */ + +#define SigFfRMCOUI ( 0x0019 ) + +void dot11fUnpackFfRMCVersion(tpAniSirGlobal pCtx, + tANI_U8 *pBuf, + tDot11fFfRMCVersion *pDst) +{ + pDst->version = *pBuf; + (void)pCtx; +} /* End dot11fUnpackFfRMCVersion. */ + +#define SigFfRMCVersion ( 0x001a ) void dot11fUnpackFfRSNI(tpAniSirGlobal pCtx, tANI_U8 *pBuf, @@ -845,9 +894,9 @@ void dot11fUnpackFfRSNI(tpAniSirGlobal pCtx, (void)pCtx; } /* End dot11fUnpackFfRSNI. */ -#define SigFfRSNI ( 0x0016 ) +#define SigFfRSNI ( 0x001b ) -#define SigFfReason ( 0x0017 ) +#define SigFfReason ( 0x001c ) void dot11fUnpackFfRxAntennaId(tpAniSirGlobal pCtx, tANI_U8 *pBuf, @@ -857,7 +906,7 @@ void dot11fUnpackFfRxAntennaId(tpAniSirGlobal pCtx, (void)pCtx; } /* End dot11fUnpackFfRxAntennaId. */ -#define SigFfRxAntennaId ( 0x0018 ) +#define SigFfRxAntennaId ( 0x001d ) void dot11fUnpackFfSMPowerModeSet(tpAniSirGlobal pCtx, tANI_U8 *pBuf, @@ -871,9 +920,9 @@ void dot11fUnpackFfSMPowerModeSet(tpAniSirGlobal pCtx, (void)pCtx; } /* End dot11fUnpackFfSMPowerModeSet. */ -#define SigFfSMPowerModeSet ( 0x0019 ) +#define SigFfSMPowerModeSet ( 0x001e ) -#define SigFfStatus ( 0x001a ) +#define SigFfStatus ( 0x001f ) void dot11fUnpackFfStatusCode(tpAniSirGlobal pCtx, tANI_U8 *pBuf, @@ -883,7 +932,7 @@ void dot11fUnpackFfStatusCode(tpAniSirGlobal pCtx, (void)pCtx; } /* End dot11fUnpackFfStatusCode. */ -#define SigFfStatusCode ( 0x001b ) +#define SigFfStatusCode ( 0x0020 ) void dot11fUnpackFfTPCEleID(tpAniSirGlobal pCtx, tANI_U8 *pBuf, @@ -893,7 +942,7 @@ void dot11fUnpackFfTPCEleID(tpAniSirGlobal pCtx, (void)pCtx; } /* End dot11fUnpackFfTPCEleID. */ -#define SigFfTPCEleID ( 0x001c ) +#define SigFfTPCEleID ( 0x0021 ) void dot11fUnpackFfTPCEleLen(tpAniSirGlobal pCtx, tANI_U8 *pBuf, @@ -903,7 +952,7 @@ void dot11fUnpackFfTPCEleLen(tpAniSirGlobal pCtx, (void)pCtx; } /* End dot11fUnpackFfTPCEleLen. */ -#define SigFfTPCEleLen ( 0x001d ) +#define SigFfTPCEleLen ( 0x0022 ) void dot11fUnpackFfTSInfo(tpAniSirGlobal pCtx, tANI_U8 *pBuf, @@ -924,7 +973,7 @@ void dot11fUnpackFfTSInfo(tpAniSirGlobal pCtx, (void)pCtx; } /* End dot11fUnpackFfTSInfo. */ -#define SigFfTSInfo ( 0x001e ) +#define SigFfTSInfo ( 0x0023 ) void dot11fUnpackFfTimeStamp(tpAniSirGlobal pCtx, tANI_U8 *pBuf, @@ -934,7 +983,7 @@ void dot11fUnpackFfTimeStamp(tpAniSirGlobal pCtx, (void)pCtx; } /* End dot11fUnpackFfTimeStamp. */ -#define SigFfTimeStamp ( 0x001f ) +#define SigFfTimeStamp ( 0x0024 ) void dot11fUnpackFfTransactionId(tpAniSirGlobal pCtx, tANI_U8 *pBuf, @@ -944,7 +993,7 @@ void dot11fUnpackFfTransactionId(tpAniSirGlobal pCtx, (void)pCtx; } /* End dot11fUnpackFfTransactionId. */ -#define SigFfTransactionId ( 0x0020 ) +#define SigFfTransactionId ( 0x0025 ) void dot11fUnpackFfTxAntennaId(tpAniSirGlobal pCtx, tANI_U8 *pBuf, @@ -954,7 +1003,7 @@ void dot11fUnpackFfTxAntennaId(tpAniSirGlobal pCtx, (void)pCtx; } /* End dot11fUnpackFfTxAntennaId. */ -#define SigFfTxAntennaId ( 0x0021 ) +#define SigFfTxAntennaId ( 0x0026 ) void dot11fUnpackFfTxPower(tpAniSirGlobal pCtx, tANI_U8 *pBuf, @@ -964,7 +1013,7 @@ void dot11fUnpackFfTxPower(tpAniSirGlobal pCtx, (void)pCtx; } /* End dot11fUnpackFfTxPower. */ -#define SigFfTxPower ( 0x0022 ) +#define SigFfTxPower ( 0x0027 ) void dot11fUnpackFfVhtMembershipStatusArray(tpAniSirGlobal pCtx, tANI_U8 *pBuf, @@ -974,7 +1023,7 @@ void dot11fUnpackFfVhtMembershipStatusArray(tpAniSirGlobal pCtx, (void)pCtx; } /* End dot11fUnpackFfVhtMembershipStatusArray. */ -#define SigFfVhtMembershipStatusArray ( 0x0023 ) +#define SigFfVhtMembershipStatusArray ( 0x0028 ) void dot11fUnpackFfVhtUserPositionArray(tpAniSirGlobal pCtx, tANI_U8 *pBuf, @@ -984,7 +1033,7 @@ void dot11fUnpackFfVhtUserPositionArray(tpAniSirGlobal pCtx, (void)pCtx; } /* End dot11fUnpackFfVhtUserPositionArray. */ -#define SigFfVhtUserPositionArray ( 0x0024 ) +#define SigFfVhtUserPositionArray ( 0x0029 ) tANI_U32 dot11fUnpackTlvAuthorizedMACs(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U16 tlvlen, tDot11fTLVAuthorizedMACs *pDst) { @@ -1632,6 +1681,29 @@ tANI_U32 dot11fUnpackIeGTK(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tD #define SigIeHCF ( 0x0005 ) +tANI_U32 dot11fUnpackIeIGTK(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEIGTK *pDst) +{ + tANI_U32 status = DOT11F_PARSE_SUCCESS; + (void) pBuf; (void)ielen; /* Shutup the compiler */ + if (pDst->present) status = DOT11F_DUPLICATE_IE; + pDst->present = 1; + DOT11F_MEMCPY(pCtx, pDst->keyID, pBuf, 2); + pBuf += 2; + ielen -= (tANI_U8)2; + DOT11F_MEMCPY(pCtx, pDst->IPN, pBuf, 6); + pBuf += 6; + ielen -= (tANI_U8)6; + pDst->keyLength = *pBuf; + pBuf += 1; + ielen -= (tANI_U8)1; + DOT11F_MEMCPY(pCtx, pDst->key, pBuf, 24); + (void)pCtx; + return status; +} /* End dot11fUnpackIeIGTK. */ + +#define SigIeIGTK ( 0x0006 ) + + tANI_U32 dot11fUnpackIeLLAttr(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIELLAttr *pDst) { tANI_U32 status = DOT11F_PARSE_SUCCESS; @@ -1643,7 +1715,7 @@ tANI_U32 dot11fUnpackIeLLAttr(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, return status; } /* End dot11fUnpackIeLLAttr. */ -#define SigIeLLAttr ( 0x0006 ) +#define SigIeLLAttr ( 0x0007 ) tANI_U32 dot11fUnpackIeLoadBalance(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIELoadBalance *pDst) @@ -1660,7 +1732,7 @@ tANI_U32 dot11fUnpackIeLoadBalance(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 i return status; } /* End dot11fUnpackIeLoadBalance. */ -#define SigIeLoadBalance ( 0x0007 ) +#define SigIeLoadBalance ( 0x0008 ) tANI_U32 dot11fUnpackIeLoadInfo(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIELoadInfo *pDst) @@ -1677,10 +1749,10 @@ tANI_U32 dot11fUnpackIeLoadInfo(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 iele return status; } /* End dot11fUnpackIeLoadInfo. */ -#define SigIeLoadInfo ( 0x0008 ) +#define SigIeLoadInfo ( 0x0009 ) -#define SigIePropAssocType ( 0x0009 ) +#define SigIePropAssocType ( 0x000a ) tANI_U32 dot11fUnpackIePropCapability(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEPropCapability *pDst) @@ -1694,7 +1766,7 @@ tANI_U32 dot11fUnpackIePropCapability(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U return status; } /* End dot11fUnpackIePropCapability. */ -#define SigIePropCapability ( 0x000a ) +#define SigIePropCapability ( 0x000b ) tANI_U32 dot11fUnpackIePropChannSwitchAnn(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEPropChannSwitchAnn *pDst) @@ -1717,7 +1789,7 @@ tANI_U32 dot11fUnpackIePropChannSwitchAnn(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tA return status; } /* End dot11fUnpackIePropChannSwitchAnn. */ -#define SigIePropChannSwitchAnn ( 0x000b ) +#define SigIePropChannSwitchAnn ( 0x000c ) tANI_U32 dot11fUnpackIePropEDCAParams(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEPropEDCAParams *pDst) @@ -1802,7 +1874,7 @@ tANI_U32 dot11fUnpackIePropEDCAParams(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U return status; } /* End dot11fUnpackIePropEDCAParams. */ -#define SigIePropEDCAParams ( 0x000c ) +#define SigIePropEDCAParams ( 0x000d ) tANI_U32 dot11fUnpackIePropQuietBSS(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEPropQuietBSS *pDst) @@ -1825,7 +1897,7 @@ tANI_U32 dot11fUnpackIePropQuietBSS(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 return status; } /* End dot11fUnpackIePropQuietBSS. */ -#define SigIePropQuietBSS ( 0x000d ) +#define SigIePropQuietBSS ( 0x000e ) tANI_U32 dot11fUnpackIePropSuppRates(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEPropSuppRates *pDst) @@ -1837,7 +1909,7 @@ tANI_U32 dot11fUnpackIePropSuppRates(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 if (pDst->present) status = DOT11F_DUPLICATE_IE; pDst->present = 1; for (i = 0; i < ielen; i++) { - if ((DOT11F_IS_BG_RATE(pBuf[i] & 0x7F)) && + if ((DOT11F_IS_BG_RATE(pBuf[i] & 0x7F)) && (rate_indx < 12)) { pDst->rates[rate_indx++] = pBuf[i]; } @@ -1853,7 +1925,7 @@ tANI_U32 dot11fUnpackIePropSuppRates(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 return status; } /* End dot11fUnpackIePropSuppRates. */ -#define SigIePropSuppRates ( 0x000e ) +#define SigIePropSuppRates ( 0x000f ) tANI_U32 dot11fUnpackIeR0KH_ID(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIER0KH_ID *pDst) @@ -1873,7 +1945,7 @@ tANI_U32 dot11fUnpackIeR0KH_ID(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen return status; } /* End dot11fUnpackIeR0KH_ID. */ -#define SigIeR0KH_ID ( 0x000f ) +#define SigIeR0KH_ID ( 0x0010 ) tANI_U32 dot11fUnpackIeR1KH_ID(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIER1KH_ID *pDst) @@ -1887,7 +1959,7 @@ tANI_U32 dot11fUnpackIeR1KH_ID(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen return status; } /* End dot11fUnpackIeR1KH_ID. */ -#define SigIeR1KH_ID ( 0x0010 ) +#define SigIeR1KH_ID ( 0x0011 ) tANI_U32 dot11fUnpackIeTSFInfo(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIETSFInfo *pDst) @@ -1904,7 +1976,7 @@ tANI_U32 dot11fUnpackIeTSFInfo(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen return status; } /* End dot11fUnpackIeTSFInfo. */ -#define SigIeTSFInfo ( 0x0011 ) +#define SigIeTSFInfo ( 0x0012 ) tANI_U32 dot11fUnpackIeTaurus(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIETaurus *pDst) @@ -1927,7 +1999,7 @@ tANI_U32 dot11fUnpackIeTaurus(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, return status; } /* End dot11fUnpackIeTaurus. */ -#define SigIeTaurus ( 0x0012 ) +#define SigIeTaurus ( 0x0013 ) tANI_U32 dot11fUnpackIeTitan(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIETitan *pDst) @@ -1950,10 +2022,10 @@ tANI_U32 dot11fUnpackIeTitan(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, return status; } /* End dot11fUnpackIeTitan. */ -#define SigIeTitan ( 0x0013 ) +#define SigIeTitan ( 0x0014 ) -#define SigIeTriggerStaBgScan ( 0x0014 ) +#define SigIeTriggerStaBgScan ( 0x0015 ) tANI_U32 dot11fUnpackIeVersion(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEVersion *pDst) @@ -1979,7 +2051,7 @@ tANI_U32 dot11fUnpackIeVersion(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen return status; } /* End dot11fUnpackIeVersion. */ -#define SigIeVersion ( 0x0015 ) +#define SigIeVersion ( 0x0016 ) tANI_U32 dot11fUnpackIeWDS(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEWDS *pDst) @@ -1999,7 +2071,7 @@ tANI_U32 dot11fUnpackIeWDS(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tD return status; } /* End dot11fUnpackIeWDS. */ -#define SigIeWDS ( 0x0016 ) +#define SigIeWDS ( 0x0017 ) tANI_U32 dot11fUnpackIeAPChannelReport(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEAPChannelReport *pDst) @@ -2022,7 +2094,7 @@ tANI_U32 dot11fUnpackIeAPChannelReport(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_ return status; } /* End dot11fUnpackIeAPChannelReport. */ -#define SigIeAPChannelReport ( 0x0017 ) +#define SigIeAPChannelReport ( 0x0018 ) tANI_U32 dot11fUnpackIeBcnReportingDetail(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEBcnReportingDetail *pDst) @@ -2036,7 +2108,7 @@ tANI_U32 dot11fUnpackIeBcnReportingDetail(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tA return status; } /* End dot11fUnpackIeBcnReportingDetail. */ -#define SigIeBcnReportingDetail ( 0x0018 ) +#define SigIeBcnReportingDetail ( 0x0019 ) tANI_U32 dot11fUnpackIeBeaconReportFrmBody(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEBeaconReportFrmBody *pDst) @@ -2056,7 +2128,7 @@ tANI_U32 dot11fUnpackIeBeaconReportFrmBody(tpAniSirGlobal pCtx, tANI_U8 *pBuf, t return status; } /* End dot11fUnpackIeBeaconReportFrmBody. */ -#define SigIeBeaconReportFrmBody ( 0x0019 ) +#define SigIeBeaconReportFrmBody ( 0x001a ) tANI_U32 dot11fUnpackIeBeaconReporting(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEBeaconReporting *pDst) @@ -2073,7 +2145,7 @@ tANI_U32 dot11fUnpackIeBeaconReporting(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_ return status; } /* End dot11fUnpackIeBeaconReporting. */ -#define SigIeBeaconReporting ( 0x001a ) +#define SigIeBeaconReporting ( 0x001b ) tANI_U32 dot11fUnpackIeMeasurementPilot(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEMeasurementPilot *pDst) @@ -2091,7 +2163,7 @@ tANI_U32 dot11fUnpackIeMeasurementPilot(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI return status; } /* End dot11fUnpackIeMeasurementPilot. */ -#define SigIeMeasurementPilot ( 0x001b ) +#define SigIeMeasurementPilot ( 0x001c ) tANI_U32 dot11fUnpackIeMultiBssid(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEMultiBssid *pDst) @@ -2109,7 +2181,7 @@ tANI_U32 dot11fUnpackIeMultiBssid(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ie return status; } /* End dot11fUnpackIeMultiBssid. */ -#define SigIeMultiBssid ( 0x001c ) +#define SigIeMultiBssid ( 0x001d ) tANI_U32 dot11fUnpackIeRICData(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIERICData *pDst) @@ -2129,7 +2201,7 @@ tANI_U32 dot11fUnpackIeRICData(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen return status; } /* End dot11fUnpackIeRICData. */ -#define SigIeRICData ( 0x001d ) +#define SigIeRICData ( 0x001e ) tANI_U32 dot11fUnpackIeRICDescriptor(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIERICDescriptor *pDst) @@ -2147,7 +2219,7 @@ tANI_U32 dot11fUnpackIeRICDescriptor(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 return status; } /* End dot11fUnpackIeRICDescriptor. */ -#define SigIeRICDescriptor ( 0x001e ) +#define SigIeRICDescriptor ( 0x001f ) tANI_U32 dot11fUnpackIeRRMEnabledCap(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIERRMEnabledCap *pDst) @@ -2207,7 +2279,7 @@ tANI_U32 dot11fUnpackIeRRMEnabledCap(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 return status; } /* End dot11fUnpackIeRRMEnabledCap. */ -#define SigIeRRMEnabledCap ( 0x001f ) +#define SigIeRRMEnabledCap ( 0x0020 ) tANI_U32 dot11fUnpackIeRequestedInfo(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIERequestedInfo *pDst) @@ -2222,7 +2294,7 @@ tANI_U32 dot11fUnpackIeRequestedInfo(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 return status; } /* End dot11fUnpackIeRequestedInfo. */ -#define SigIeRequestedInfo ( 0x0020 ) +#define SigIeRequestedInfo ( 0x0021 ) tANI_U32 dot11fUnpackIeSSID(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIESSID *pDst) @@ -2246,7 +2318,7 @@ tANI_U32 dot11fUnpackIeSSID(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, t return status; } /* End dot11fUnpackIeSSID. */ -#define SigIeSSID ( 0x0021 ) +#define SigIeSSID ( 0x0022 ) tANI_U32 dot11fUnpackIeSchedule(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIESchedule *pDst) @@ -2277,7 +2349,7 @@ tANI_U32 dot11fUnpackIeSchedule(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 iele return status; } /* End dot11fUnpackIeSchedule. */ -#define SigIeSchedule ( 0x0022 ) +#define SigIeSchedule ( 0x0023 ) tANI_U32 dot11fUnpackIeTCLAS(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIETCLAS *pDst) @@ -2366,10 +2438,10 @@ tANI_U32 dot11fUnpackIeTCLAS(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, return status; } /* End dot11fUnpackIeTCLAS. */ -#define SigIeTCLAS ( 0x0023 ) +#define SigIeTCLAS ( 0x0024 ) -#define SigIeTCLASSPROC ( 0x0024 ) +#define SigIeTCLASSPROC ( 0x0025 ) tANI_U32 dot11fUnpackIeTSDelay(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIETSDelay *pDst) @@ -2383,7 +2455,7 @@ tANI_U32 dot11fUnpackIeTSDelay(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen return status; } /* End dot11fUnpackIeTSDelay. */ -#define SigIeTSDelay ( 0x0025 ) +#define SigIeTSDelay ( 0x0026 ) tANI_U32 dot11fUnpackIeTSPEC(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIETSPEC *pDst) @@ -2460,7 +2532,7 @@ tANI_U32 dot11fUnpackIeTSPEC(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, return status; } /* End dot11fUnpackIeTSPEC. */ -#define SigIeTSPEC ( 0x0026 ) +#define SigIeTSPEC ( 0x0027 ) tANI_U32 dot11fUnpackIeWMMSchedule(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEWMMSchedule *pDst) @@ -2499,7 +2571,7 @@ tANI_U32 dot11fUnpackIeWMMSchedule(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 i return status; } /* End dot11fUnpackIeWMMSchedule. */ -#define SigIeWMMSchedule ( 0x0027 ) +#define SigIeWMMSchedule ( 0x0028 ) tANI_U32 dot11fUnpackIeWMMTCLAS(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEWMMTCLAS *pDst) @@ -2596,7 +2668,7 @@ tANI_U32 dot11fUnpackIeWMMTCLAS(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 iele return status; } /* End dot11fUnpackIeWMMTCLAS. */ -#define SigIeWMMTCLAS ( 0x0028 ) +#define SigIeWMMTCLAS ( 0x0029 ) tANI_U32 dot11fUnpackIeWMMTCLASPROC(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEWMMTCLASPROC *pDst) @@ -2618,7 +2690,7 @@ tANI_U32 dot11fUnpackIeWMMTCLASPROC(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 return status; } /* End dot11fUnpackIeWMMTCLASPROC. */ -#define SigIeWMMTCLASPROC ( 0x0029 ) +#define SigIeWMMTCLASPROC ( 0x002a ) tANI_U32 dot11fUnpackIeWMMTSDelay(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEWMMTSDelay *pDst) @@ -2640,7 +2712,7 @@ tANI_U32 dot11fUnpackIeWMMTSDelay(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ie return status; } /* End dot11fUnpackIeWMMTSDelay. */ -#define SigIeWMMTSDelay ( 0x002a ) +#define SigIeWMMTSDelay ( 0x002b ) tANI_U32 dot11fUnpackIeWMMTSPEC(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEWMMTSPEC *pDst) @@ -2725,7 +2797,7 @@ tANI_U32 dot11fUnpackIeWMMTSPEC(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 iele return status; } /* End dot11fUnpackIeWMMTSPEC. */ -#define SigIeWMMTSPEC ( 0x002b ) +#define SigIeWMMTSPEC ( 0x002c ) tANI_U32 dot11fUnpackIeAID(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEAID *pDst) @@ -2739,7 +2811,7 @@ tANI_U32 dot11fUnpackIeAID(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tD return status; } /* End dot11fUnpackIeAID. */ -#define SigIeAID ( 0x002c ) +#define SigIeAID ( 0x002d ) static const tFFDefn FFS_Airgo[ ] = { @@ -2784,7 +2856,7 @@ tANI_U32 dot11fUnpackIeAirgo(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, return status; } /* End dot11fUnpackIeAirgo. */ -#define SigIeAirgo ( 0x002d ) +#define SigIeAirgo ( 0x002e ) tANI_U32 dot11fUnpackIeCCXCckmOpaque(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIECCXCckmOpaque *pDst) @@ -2804,7 +2876,7 @@ tANI_U32 dot11fUnpackIeCCXCckmOpaque(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 return status; } /* End dot11fUnpackIeCCXCckmOpaque. */ -#define SigIeCCXCckmOpaque ( 0x002e ) +#define SigIeCCXCckmOpaque ( 0x002f ) tANI_U32 dot11fUnpackIeCCXRadMgmtCap(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIECCXRadMgmtCap *pDst) @@ -2824,7 +2896,7 @@ tANI_U32 dot11fUnpackIeCCXRadMgmtCap(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 return status; } /* End dot11fUnpackIeCCXRadMgmtCap. */ -#define SigIeCCXRadMgmtCap ( 0x002f ) +#define SigIeCCXRadMgmtCap ( 0x0030 ) tANI_U32 dot11fUnpackIeCCXTrafStrmMet(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIECCXTrafStrmMet *pDst) @@ -2844,7 +2916,7 @@ tANI_U32 dot11fUnpackIeCCXTrafStrmMet(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U return status; } /* End dot11fUnpackIeCCXTrafStrmMet. */ -#define SigIeCCXTrafStrmMet ( 0x0030 ) +#define SigIeCCXTrafStrmMet ( 0x0031 ) tANI_U32 dot11fUnpackIeCCXTrafStrmRateSet(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIECCXTrafStrmRateSet *pDst) @@ -2867,7 +2939,7 @@ tANI_U32 dot11fUnpackIeCCXTrafStrmRateSet(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tA return status; } /* End dot11fUnpackIeCCXTrafStrmRateSet. */ -#define SigIeCCXTrafStrmRateSet ( 0x0031 ) +#define SigIeCCXTrafStrmRateSet ( 0x0032 ) tANI_U32 dot11fUnpackIeCCXTxmitPower(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIECCXTxmitPower *pDst) @@ -2884,7 +2956,7 @@ tANI_U32 dot11fUnpackIeCCXTxmitPower(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 return status; } /* End dot11fUnpackIeCCXTxmitPower. */ -#define SigIeCCXTxmitPower ( 0x0032 ) +#define SigIeCCXTxmitPower ( 0x0033 ) tANI_U32 dot11fUnpackIeCCXVersion(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIECCXVersion *pDst) @@ -2898,7 +2970,7 @@ tANI_U32 dot11fUnpackIeCCXVersion(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ie return status; } /* End dot11fUnpackIeCCXVersion. */ -#define SigIeCCXVersion ( 0x0033 ) +#define SigIeCCXVersion ( 0x0034 ) tANI_U32 dot11fUnpackIeCFParams(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIECFParams *pDst) @@ -2921,7 +2993,7 @@ tANI_U32 dot11fUnpackIeCFParams(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 iele return status; } /* End dot11fUnpackIeCFParams. */ -#define SigIeCFParams ( 0x0034 ) +#define SigIeCFParams ( 0x0035 ) tANI_U32 dot11fUnpackIeChallengeText(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEChallengeText *pDst) @@ -2941,7 +3013,7 @@ tANI_U32 dot11fUnpackIeChallengeText(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 return status; } /* End dot11fUnpackIeChallengeText. */ -#define SigIeChallengeText ( 0x0035 ) +#define SigIeChallengeText ( 0x0036 ) tANI_U32 dot11fUnpackIeChanSwitchAnn(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEChanSwitchAnn *pDst) @@ -2961,7 +3033,7 @@ tANI_U32 dot11fUnpackIeChanSwitchAnn(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 return status; } /* End dot11fUnpackIeChanSwitchAnn. */ -#define SigIeChanSwitchAnn ( 0x0036 ) +#define SigIeChanSwitchAnn ( 0x0037 ) tANI_U32 dot11fUnpackIeCountry(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIECountry *pDst) @@ -2981,7 +3053,7 @@ tANI_U32 dot11fUnpackIeCountry(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen else { pDst->num_triplets = (tANI_U8)( ielen / 3 ); - if (ielen / 3 > 84){ + if (ielen > 84 * 3){ pDst->present = 0; return DOT11F_SKIPPED_BAD_IE; } @@ -2992,10 +3064,10 @@ tANI_U32 dot11fUnpackIeCountry(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen return status; } /* End dot11fUnpackIeCountry. */ -#define SigIeCountry ( 0x0037 ) +#define SigIeCountry ( 0x0038 ) -#define SigIeDSParams ( 0x0038 ) +#define SigIeDSParams ( 0x0039 ) tANI_U32 dot11fUnpackIeEDCAParamSet(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEEDCAParamSet *pDst) @@ -3080,7 +3152,7 @@ tANI_U32 dot11fUnpackIeEDCAParamSet(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 return status; } /* End dot11fUnpackIeEDCAParamSet. */ -#define SigIeEDCAParamSet ( 0x0039 ) +#define SigIeEDCAParamSet ( 0x003a ) tANI_U32 dot11fUnpackIeERPInfo(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEERPInfo *pDst) @@ -3099,7 +3171,7 @@ tANI_U32 dot11fUnpackIeERPInfo(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen return status; } /* End dot11fUnpackIeERPInfo. */ -#define SigIeERPInfo ( 0x003a ) +#define SigIeERPInfo ( 0x003b ) tANI_U32 dot11fUnpackIeExtCap(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEExtCap *pDst) @@ -3173,10 +3245,10 @@ tANI_U32 dot11fUnpackIeExtCap(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, return status; } /* End dot11fUnpackIeExtCap. */ -#define SigIeExtCap ( 0x003b ) +#define SigIeExtCap ( 0x003c ) -#define SigIeExtChanSwitchAnn ( 0x003c ) +#define SigIeExtChanSwitchAnn ( 0x003d ) tANI_U32 dot11fUnpackIeExtSuppRates(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEExtSuppRates *pDst) @@ -3188,7 +3260,7 @@ tANI_U32 dot11fUnpackIeExtSuppRates(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 if (pDst->present) status = DOT11F_DUPLICATE_IE; pDst->present = 1; for (i = 0; i < ielen; i++) { - if ((DOT11F_IS_BG_RATE(pBuf[i] & 0x7F)) && + if ((DOT11F_IS_BG_RATE(pBuf[i] & 0x7F)) && (rate_indx < 12)) { pDst->rates[rate_indx++] = pBuf[i]; } @@ -3204,7 +3276,7 @@ tANI_U32 dot11fUnpackIeExtSuppRates(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 return status; } /* End dot11fUnpackIeExtSuppRates. */ -#define SigIeExtSuppRates ( 0x003d ) +#define SigIeExtSuppRates ( 0x003e ) tANI_U32 dot11fUnpackIeFHParamSet(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEFHParamSet *pDst) @@ -3227,7 +3299,7 @@ tANI_U32 dot11fUnpackIeFHParamSet(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ie return status; } /* End dot11fUnpackIeFHParamSet. */ -#define SigIeFHParamSet ( 0x003e ) +#define SigIeFHParamSet ( 0x003f ) tANI_U32 dot11fUnpackIeFHParams(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEFHParams *pDst) @@ -3244,7 +3316,7 @@ tANI_U32 dot11fUnpackIeFHParams(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 iele return status; } /* End dot11fUnpackIeFHParams. */ -#define SigIeFHParams ( 0x003f ) +#define SigIeFHParams ( 0x0040 ) tANI_U32 dot11fUnpackIeFHPattTable(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEFHPattTable *pDst) @@ -3276,7 +3348,7 @@ tANI_U32 dot11fUnpackIeFHPattTable(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 i return status; } /* End dot11fUnpackIeFHPattTable. */ -#define SigIeFHPattTable ( 0x0040 ) +#define SigIeFHPattTable ( 0x0041 ) static const tFFDefn FFS_FTInfo[ ] = { @@ -3287,6 +3359,7 @@ tANI_U32 dot11fUnpackIeFHPattTable(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 i {offsetof(tDot11fIEFTInfo, R1KH_ID), offsetof(tDot11fIER1KH_ID, present), 0, "R1KH_ID" , 0, 8, 8, SigIeR1KH_ID, {0, 0, 0, 0, 0}, 0, DOT11F_EID_R1KH_ID, 0, }, {offsetof(tDot11fIEFTInfo, GTK), offsetof(tDot11fIEGTK, present), 0, "GTK" , 0, 18, 45, SigIeGTK, {0, 0, 0, 0, 0}, 0, DOT11F_EID_GTK, 0, }, {offsetof(tDot11fIEFTInfo, R0KH_ID), offsetof(tDot11fIER0KH_ID, present), 0, "R0KH_ID" , 0, 3, 50, SigIeR0KH_ID, {0, 0, 0, 0, 0}, 0, DOT11F_EID_R0KH_ID, 0, }, + {offsetof(tDot11fIEFTInfo, IGTK), offsetof(tDot11fIEIGTK, present), 0, "IGTK" , 0, 35, 35, SigIeIGTK, {0, 0, 0, 0, 0}, 0, DOT11F_EID_IGTK, 0, }, {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, }, }; @@ -3322,7 +3395,7 @@ tANI_U32 dot11fUnpackIeFTInfo(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, return status; } /* End dot11fUnpackIeFTInfo. */ -#define SigIeFTInfo ( 0x0041 ) +#define SigIeFTInfo ( 0x0042 ) tANI_U32 dot11fUnpackIeFTTimeoutInterval(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEFTTimeoutInterval *pDst) @@ -3339,7 +3412,7 @@ tANI_U32 dot11fUnpackIeFTTimeoutInterval(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tAN return status; } /* End dot11fUnpackIeFTTimeoutInterval. */ -#define SigIeFTTimeoutInterval ( 0x0042 ) +#define SigIeFTTimeoutInterval ( 0x0043 ) tANI_U32 dot11fUnpackIeHTCaps(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEHTCaps *pDst) @@ -3428,7 +3501,7 @@ tANI_U32 dot11fUnpackIeHTCaps(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, return status; } /* End dot11fUnpackIeHTCaps. */ -#define SigIeHTCaps ( 0x0043 ) +#define SigIeHTCaps ( 0x0044 ) tANI_U32 dot11fUnpackIeHTInfo(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEHTInfo *pDst) @@ -3483,7 +3556,7 @@ tANI_U32 dot11fUnpackIeHTInfo(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, return status; } /* End dot11fUnpackIeHTInfo. */ -#define SigIeHTInfo ( 0x0044 ) +#define SigIeHTInfo ( 0x0045 ) tANI_U32 dot11fUnpackIeIBSSParams(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEIBSSParams *pDst) @@ -3497,7 +3570,7 @@ tANI_U32 dot11fUnpackIeIBSSParams(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ie return status; } /* End dot11fUnpackIeIBSSParams. */ -#define SigIeIBSSParams ( 0x0045 ) +#define SigIeIBSSParams ( 0x0046 ) tANI_U32 dot11fUnpackIeLinkIdentifier(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIELinkIdentifier *pDst) @@ -3517,7 +3590,7 @@ tANI_U32 dot11fUnpackIeLinkIdentifier(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U return status; } /* End dot11fUnpackIeLinkIdentifier. */ -#define SigIeLinkIdentifier ( 0x0046 ) +#define SigIeLinkIdentifier ( 0x0047 ) static const tFFDefn FFS_reportBeacon[ ] = { @@ -3675,7 +3748,7 @@ tANI_U32 dot11fUnpackIeMeasurementReport(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tAN return status; } /* End dot11fUnpackIeMeasurementReport. */ -#define SigIeMeasurementReport ( 0x0047 ) +#define SigIeMeasurementReport ( 0x0048 ) static const tFFDefn FFS_measurement_requestBeacon[ ] = { @@ -3780,7 +3853,7 @@ tANI_U32 dot11fUnpackIeMeasurementRequest(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tA return status; } /* End dot11fUnpackIeMeasurementRequest. */ -#define SigIeMeasurementRequest ( 0x0048 ) +#define SigIeMeasurementRequest ( 0x0049 ) tANI_U32 dot11fUnpackIeMobilityDomain(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEMobilityDomain *pDst) @@ -3801,7 +3874,7 @@ tANI_U32 dot11fUnpackIeMobilityDomain(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U return status; } /* End dot11fUnpackIeMobilityDomain. */ -#define SigIeMobilityDomain ( 0x0049 ) +#define SigIeMobilityDomain ( 0x004a ) static const tFFDefn FFS_NeighborReport[ ] = { @@ -3868,7 +3941,7 @@ tANI_U32 dot11fUnpackIeNeighborReport(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U return status; } /* End dot11fUnpackIeNeighborReport. */ -#define SigIeNeighborReport ( 0x004a ) +#define SigIeNeighborReport ( 0x004b ) tANI_U32 dot11fUnpackIeOperatingMode(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEOperatingMode *pDst) @@ -3887,7 +3960,21 @@ tANI_U32 dot11fUnpackIeOperatingMode(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 return status; } /* End dot11fUnpackIeOperatingMode. */ -#define SigIeOperatingMode ( 0x004b ) +#define SigIeOperatingMode ( 0x004c ) + + +tANI_U32 dot11fUnpackIeOxygenNetwork(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEOxygenNetwork *pDst) +{ + tANI_U32 status = DOT11F_PARSE_SUCCESS; + (void) pBuf; (void)ielen; /* Shutup the compiler */ + if (pDst->present) status = DOT11F_DUPLICATE_IE; + pDst->present = 1; + framesntohs(pCtx, &pDst->data, pBuf, 0); + (void)pCtx; + return status; +} /* End dot11fUnpackIeOxygenNetwork. */ + +#define SigIeOxygenNetwork ( 0x004d ) static const tTLVDefn TLVS_P2PAssocReq[ ] = { @@ -3906,7 +3993,7 @@ tANI_U32 dot11fUnpackIeP2PAssocReq(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 i return status; } /* End dot11fUnpackIeP2PAssocReq. */ -#define SigIeP2PAssocReq ( 0x004c ) +#define SigIeP2PAssocReq ( 0x004e ) static const tTLVDefn TLVS_P2PAssocRes[ ] = { @@ -3924,7 +4011,7 @@ tANI_U32 dot11fUnpackIeP2PAssocRes(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 i return status; } /* End dot11fUnpackIeP2PAssocRes. */ -#define SigIeP2PAssocRes ( 0x004d ) +#define SigIeP2PAssocRes ( 0x004f ) static const tTLVDefn TLVS_P2PBeacon[ ] = { @@ -3943,7 +4030,7 @@ tANI_U32 dot11fUnpackIeP2PBeacon(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 iel return status; } /* End dot11fUnpackIeP2PBeacon. */ -#define SigIeP2PBeacon ( 0x004e ) +#define SigIeP2PBeacon ( 0x0050 ) static const tTLVDefn TLVS_P2PBeaconProbeRes[ ] = { @@ -3965,7 +4052,7 @@ tANI_U32 dot11fUnpackIeP2PBeaconProbeRes(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tAN return status; } /* End dot11fUnpackIeP2PBeaconProbeRes. */ -#define SigIeP2PBeaconProbeRes ( 0x004f ) +#define SigIeP2PBeaconProbeRes ( 0x0051 ) static const tTLVDefn TLVS_P2PDeAuth[ ] = { @@ -3982,7 +4069,7 @@ tANI_U32 dot11fUnpackIeP2PDeAuth(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 iel return status; } /* End dot11fUnpackIeP2PDeAuth. */ -#define SigIeP2PDeAuth ( 0x0050 ) +#define SigIeP2PDeAuth ( 0x0052 ) static const tTLVDefn TLVS_P2PDeviceDiscoverabilityReq[ ] = { @@ -4000,7 +4087,7 @@ tANI_U32 dot11fUnpackIeP2PDeviceDiscoverabilityReq(tpAniSirGlobal pCtx, tANI_U8 return status; } /* End dot11fUnpackIeP2PDeviceDiscoverabilityReq. */ -#define SigIeP2PDeviceDiscoverabilityReq ( 0x0051 ) +#define SigIeP2PDeviceDiscoverabilityReq ( 0x0053 ) static const tTLVDefn TLVS_P2PDeviceDiscoverabilityRes[ ] = { @@ -4017,7 +4104,7 @@ tANI_U32 dot11fUnpackIeP2PDeviceDiscoverabilityRes(tpAniSirGlobal pCtx, tANI_U8 return status; } /* End dot11fUnpackIeP2PDeviceDiscoverabilityRes. */ -#define SigIeP2PDeviceDiscoverabilityRes ( 0x0052 ) +#define SigIeP2PDeviceDiscoverabilityRes ( 0x0054 ) static const tTLVDefn TLVS_P2PDisAssoc[ ] = { @@ -4034,7 +4121,7 @@ tANI_U32 dot11fUnpackIeP2PDisAssoc(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 i return status; } /* End dot11fUnpackIeP2PDisAssoc. */ -#define SigIeP2PDisAssoc ( 0x0053 ) +#define SigIeP2PDisAssoc ( 0x0055 ) static const tTLVDefn TLVS_P2PGONegCnf[ ] = { @@ -4055,7 +4142,7 @@ tANI_U32 dot11fUnpackIeP2PGONegCnf(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 i return status; } /* End dot11fUnpackIeP2PGONegCnf. */ -#define SigIeP2PGONegCnf ( 0x0054 ) +#define SigIeP2PGONegCnf ( 0x0056 ) static const tTLVDefn TLVS_P2PGONegReq[ ] = { @@ -4080,7 +4167,7 @@ tANI_U32 dot11fUnpackIeP2PGONegReq(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 i return status; } /* End dot11fUnpackIeP2PGONegReq. */ -#define SigIeP2PGONegReq ( 0x0055 ) +#define SigIeP2PGONegReq ( 0x0057 ) static const tTLVDefn TLVS_P2PGONegRes[ ] = { @@ -4105,7 +4192,7 @@ tANI_U32 dot11fUnpackIeP2PGONegRes(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 i return status; } /* End dot11fUnpackIeP2PGONegRes. */ -#define SigIeP2PGONegRes ( 0x0056 ) +#define SigIeP2PGONegRes ( 0x0058 ) static const tTLVDefn TLVS_P2PGONegWPS[ ] = { @@ -4123,7 +4210,7 @@ tANI_U32 dot11fUnpackIeP2PGONegWPS(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 i return status; } /* End dot11fUnpackIeP2PGONegWPS. */ -#define SigIeP2PGONegWPS ( 0x0057 ) +#define SigIeP2PGONegWPS ( 0x0059 ) tANI_U32 dot11fUnpackIeP2PIEOpaque(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEP2PIEOpaque *pDst) @@ -4143,7 +4230,7 @@ tANI_U32 dot11fUnpackIeP2PIEOpaque(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 i return status; } /* End dot11fUnpackIeP2PIEOpaque. */ -#define SigIeP2PIEOpaque ( 0x0058 ) +#define SigIeP2PIEOpaque ( 0x005a ) static const tTLVDefn TLVS_P2PInvitationReq[ ] = { @@ -4166,7 +4253,7 @@ tANI_U32 dot11fUnpackIeP2PInvitationReq(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI return status; } /* End dot11fUnpackIeP2PInvitationReq. */ -#define SigIeP2PInvitationReq ( 0x0059 ) +#define SigIeP2PInvitationReq ( 0x005b ) static const tTLVDefn TLVS_P2PInvitationRes[ ] = { @@ -4187,7 +4274,7 @@ tANI_U32 dot11fUnpackIeP2PInvitationRes(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI return status; } /* End dot11fUnpackIeP2PInvitationRes. */ -#define SigIeP2PInvitationRes ( 0x005a ) +#define SigIeP2PInvitationRes ( 0x005c ) static const tTLVDefn TLVS_P2PNoticeOfAbsence[ ] = { @@ -4204,7 +4291,7 @@ tANI_U32 dot11fUnpackIeP2PNoticeOfAbsence(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tA return status; } /* End dot11fUnpackIeP2PNoticeOfAbsence. */ -#define SigIeP2PNoticeOfAbsence ( 0x005b ) +#define SigIeP2PNoticeOfAbsence ( 0x005d ) static const tTLVDefn TLVS_P2PPresenceResponse[ ] = { @@ -4222,7 +4309,7 @@ tANI_U32 dot11fUnpackIeP2PPresenceResponse(tpAniSirGlobal pCtx, tANI_U8 *pBuf, t return status; } /* End dot11fUnpackIeP2PPresenceResponse. */ -#define SigIeP2PPresenceResponse ( 0x005c ) +#define SigIeP2PPresenceResponse ( 0x005e ) static const tTLVDefn TLVS_P2PProbeReq[ ] = { @@ -4243,7 +4330,7 @@ tANI_U32 dot11fUnpackIeP2PProbeReq(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 i return status; } /* End dot11fUnpackIeP2PProbeReq. */ -#define SigIeP2PProbeReq ( 0x005d ) +#define SigIeP2PProbeReq ( 0x005f ) static const tTLVDefn TLVS_P2PProbeRes[ ] = { @@ -4264,7 +4351,7 @@ tANI_U32 dot11fUnpackIeP2PProbeRes(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 i return status; } /* End dot11fUnpackIeP2PProbeRes. */ -#define SigIeP2PProbeRes ( 0x005e ) +#define SigIeP2PProbeRes ( 0x0060 ) static const tTLVDefn TLVS_P2PProvisionDiscoveryReq[ ] = { @@ -4283,7 +4370,7 @@ tANI_U32 dot11fUnpackIeP2PProvisionDiscoveryReq(tpAniSirGlobal pCtx, tANI_U8 *pB return status; } /* End dot11fUnpackIeP2PProvisionDiscoveryReq. */ -#define SigIeP2PProvisionDiscoveryReq ( 0x005f ) +#define SigIeP2PProvisionDiscoveryReq ( 0x0061 ) static const tTLVDefn TLVS_P2PWSCProvisionDiscoveryRes[ ] = { @@ -4300,7 +4387,7 @@ tANI_U32 dot11fUnpackIeP2PWSCProvisionDiscoveryRes(tpAniSirGlobal pCtx, tANI_U8 return status; } /* End dot11fUnpackIeP2PWSCProvisionDiscoveryRes. */ -#define SigIeP2PWSCProvisionDiscoveryRes ( 0x0060 ) +#define SigIeP2PWSCProvisionDiscoveryRes ( 0x0062 ) tANI_U32 dot11fUnpackIePTIControl(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEPTIControl *pDst) @@ -4317,7 +4404,7 @@ tANI_U32 dot11fUnpackIePTIControl(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ie return status; } /* End dot11fUnpackIePTIControl. */ -#define SigIePTIControl ( 0x0061 ) +#define SigIePTIControl ( 0x0063 ) tANI_U32 dot11fUnpackIePUBufferStatus(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEPUBufferStatus *pDst) @@ -4337,7 +4424,7 @@ tANI_U32 dot11fUnpackIePUBufferStatus(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U return status; } /* End dot11fUnpackIePUBufferStatus. */ -#define SigIePUBufferStatus ( 0x0062 ) +#define SigIePUBufferStatus ( 0x0064 ) tANI_U32 dot11fUnpackIePowerCaps(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEPowerCaps *pDst) @@ -4354,7 +4441,7 @@ tANI_U32 dot11fUnpackIePowerCaps(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 iel return status; } /* End dot11fUnpackIePowerCaps. */ -#define SigIePowerCaps ( 0x0063 ) +#define SigIePowerCaps ( 0x0065 ) tANI_U32 dot11fUnpackIePowerConstraints(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEPowerConstraints *pDst) @@ -4368,7 +4455,7 @@ tANI_U32 dot11fUnpackIePowerConstraints(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI return status; } /* End dot11fUnpackIePowerConstraints. */ -#define SigIePowerConstraints ( 0x0064 ) +#define SigIePowerConstraints ( 0x0066 ) tANI_U32 dot11fUnpackIeQBSSLoad(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEQBSSLoad *pDst) @@ -4388,7 +4475,7 @@ tANI_U32 dot11fUnpackIeQBSSLoad(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 iele return status; } /* End dot11fUnpackIeQBSSLoad. */ -#define SigIeQBSSLoad ( 0x0065 ) +#define SigIeQBSSLoad ( 0x0067 ) tANI_U32 dot11fUnpackIeQOSCapsAp(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEQOSCapsAp *pDst) @@ -4399,16 +4486,16 @@ tANI_U32 dot11fUnpackIeQOSCapsAp(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 iel if (pDst->present) status = DOT11F_DUPLICATE_IE; pDst->present = 1; tmp63__ = *pBuf; - pDst->reserved = tmp63__ >> 0 & 0x1; - pDst->txopreq = tmp63__ >> 1 & 0x1; - pDst->qreq = tmp63__ >> 2 & 0x1; - pDst->qack = tmp63__ >> 3 & 0x1; - pDst->count = tmp63__ >> 4 & 0xf; + pDst->count = tmp63__ >> 0 & 0xf; + pDst->qack = tmp63__ >> 4 & 0x1; + pDst->qreq = tmp63__ >> 5 & 0x1; + pDst->txopreq = tmp63__ >> 6 & 0x1; + pDst->reserved = tmp63__ >> 7 & 0x1; (void)pCtx; return status; } /* End dot11fUnpackIeQOSCapsAp. */ -#define SigIeQOSCapsAp ( 0x0066 ) +#define SigIeQOSCapsAp ( 0x0068 ) tANI_U32 dot11fUnpackIeQOSCapsStation(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEQOSCapsStation *pDst) @@ -4419,18 +4506,18 @@ tANI_U32 dot11fUnpackIeQOSCapsStation(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U if (pDst->present) status = DOT11F_DUPLICATE_IE; pDst->present = 1; tmp64__ = *pBuf; - pDst->more_data_ack = tmp64__ >> 0 & 0x1; - pDst->max_sp_length = tmp64__ >> 1 & 0x3; - pDst->qack = tmp64__ >> 3 & 0x1; - pDst->acbe_uapsd = tmp64__ >> 4 & 0x1; - pDst->acbk_uapsd = tmp64__ >> 5 & 0x1; - pDst->acvi_uapsd = tmp64__ >> 6 & 0x1; - pDst->acvo_uapsd = tmp64__ >> 7 & 0x1; + pDst->acvo_uapsd = tmp64__ >> 0 & 0x1; + pDst->acvi_uapsd = tmp64__ >> 1 & 0x1; + pDst->acbk_uapsd = tmp64__ >> 2 & 0x1; + pDst->acbe_uapsd = tmp64__ >> 3 & 0x1; + pDst->qack = tmp64__ >> 4 & 0x1; + pDst->max_sp_length = tmp64__ >> 5 & 0x3; + pDst->more_data_ack = tmp64__ >> 7 & 0x1; (void)pCtx; return status; } /* End dot11fUnpackIeQOSCapsStation. */ -#define SigIeQOSCapsStation ( 0x0067 ) +#define SigIeQOSCapsStation ( 0x0069 ) tANI_U32 dot11fUnpackIeQuiet(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEQuiet *pDst) @@ -4453,7 +4540,7 @@ tANI_U32 dot11fUnpackIeQuiet(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, return status; } /* End dot11fUnpackIeQuiet. */ -#define SigIeQuiet ( 0x0068 ) +#define SigIeQuiet ( 0x006a ) tANI_U32 dot11fUnpackIeRCPIIE(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIERCPIIE *pDst) @@ -4467,7 +4554,7 @@ tANI_U32 dot11fUnpackIeRCPIIE(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, return status; } /* End dot11fUnpackIeRCPIIE. */ -#define SigIeRCPIIE ( 0x0069 ) +#define SigIeRCPIIE ( 0x006b ) static const tFFDefn FFS_RICDataDesc[ ] = { @@ -4507,7 +4594,7 @@ tANI_U32 dot11fUnpackIeRICDataDesc(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 i return status; } /* End dot11fUnpackIeRICDataDesc. */ -#define SigIeRICDataDesc ( 0x006a ) +#define SigIeRICDataDesc ( 0x006c ) tANI_U32 dot11fUnpackIeRSN(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIERSN *pDst) @@ -4596,11 +4683,21 @@ tANI_U32 dot11fUnpackIeRSN(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tD } DOT11F_MEMCPY(pCtx, pDst->pmkid, pBuf, ( pDst->pmkid_count * 16 ) ); + pBuf += ( pDst->pmkid_count * 16 ); + ielen -= ( pDst->pmkid_count * 16 ); + if ( ! ielen ) + { + return 0U; + } + else + { + DOT11F_MEMCPY(pCtx, pDst->gp_mgmt_cipher_suite, pBuf, 4); + } (void)pCtx; return status; } /* End dot11fUnpackIeRSN. */ -#define SigIeRSN ( 0x006b ) +#define SigIeRSN ( 0x006d ) tANI_U32 dot11fUnpackIeRSNIIE(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIERSNIIE *pDst) @@ -4614,7 +4711,7 @@ tANI_U32 dot11fUnpackIeRSNIIE(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, return status; } /* End dot11fUnpackIeRSNIIE. */ -#define SigIeRSNIIE ( 0x006c ) +#define SigIeRSNIIE ( 0x006e ) tANI_U32 dot11fUnpackIeRSNOpaque(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIERSNOpaque *pDst) @@ -4634,7 +4731,7 @@ tANI_U32 dot11fUnpackIeRSNOpaque(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 iel return status; } /* End dot11fUnpackIeRSNOpaque. */ -#define SigIeRSNOpaque ( 0x006d ) +#define SigIeRSNOpaque ( 0x006f ) tANI_U32 dot11fUnpackIeSuppChannels(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIESuppChannels *pDst) @@ -4644,7 +4741,7 @@ tANI_U32 dot11fUnpackIeSuppChannels(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 if (pDst->present) status = DOT11F_DUPLICATE_IE; pDst->present = 1; pDst->num_bands = (tANI_U8)( ielen / 2 ); - if (ielen / 2 > 48){ + if (ielen > 48 * 2){ pDst->present = 0; return DOT11F_SKIPPED_BAD_IE; } @@ -4654,7 +4751,7 @@ tANI_U32 dot11fUnpackIeSuppChannels(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 return status; } /* End dot11fUnpackIeSuppChannels. */ -#define SigIeSuppChannels ( 0x006e ) +#define SigIeSuppChannels ( 0x0070 ) tANI_U32 dot11fUnpackIeSuppRates(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIESuppRates *pDst) @@ -4666,7 +4763,7 @@ tANI_U32 dot11fUnpackIeSuppRates(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 iel if (pDst->present) status = DOT11F_DUPLICATE_IE; pDst->present = 1; for (i = 0; i < ielen; i++) { - if ((DOT11F_IS_BG_RATE(pBuf[i] & 0x7F)) && + if ((DOT11F_IS_BG_RATE(pBuf[i] & 0x7F)) && (rate_indx < 12)) { pDst->rates[rate_indx++] = pBuf[i]; } @@ -4682,7 +4779,7 @@ tANI_U32 dot11fUnpackIeSuppRates(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 iel return status; } /* End dot11fUnpackIeSuppRates. */ -#define SigIeSuppRates ( 0x006f ) +#define SigIeSuppRates ( 0x0071 ) tANI_U32 dot11fUnpackIeTIM(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIETIM *pDst) @@ -4711,7 +4808,7 @@ tANI_U32 dot11fUnpackIeTIM(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tD return status; } /* End dot11fUnpackIeTIM. */ -#define SigIeTIM ( 0x0070 ) +#define SigIeTIM ( 0x0072 ) tANI_U32 dot11fUnpackIeTPCReport(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIETPCReport *pDst) @@ -4728,7 +4825,7 @@ tANI_U32 dot11fUnpackIeTPCReport(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 iel return status; } /* End dot11fUnpackIeTPCReport. */ -#define SigIeTPCReport ( 0x0071 ) +#define SigIeTPCReport ( 0x0073 ) tANI_U32 dot11fUnpackIeTPCRequest(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIETPCRequest *pDst) @@ -4741,7 +4838,7 @@ tANI_U32 dot11fUnpackIeTPCRequest(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ie return status; } /* End dot11fUnpackIeTPCRequest. */ -#define SigIeTPCRequest ( 0x0072 ) +#define SigIeTPCRequest ( 0x0074 ) tANI_U32 dot11fUnpackIeVHTCaps(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEVHTCaps *pDst) @@ -4794,7 +4891,7 @@ tANI_U32 dot11fUnpackIeVHTCaps(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen return status; } /* End dot11fUnpackIeVHTCaps. */ -#define SigIeVHTCaps ( 0x0073 ) +#define SigIeVHTCaps ( 0x0075 ) tANI_U32 dot11fUnpackIeVHTExtBssLoad(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEVHTExtBssLoad *pDst) @@ -4820,7 +4917,7 @@ tANI_U32 dot11fUnpackIeVHTExtBssLoad(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 return status; } /* End dot11fUnpackIeVHTExtBssLoad. */ -#define SigIeVHTExtBssLoad ( 0x0074 ) +#define SigIeVHTExtBssLoad ( 0x0076 ) tANI_U32 dot11fUnpackIeVHTOperation(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEVHTOperation *pDst) @@ -4843,7 +4940,7 @@ tANI_U32 dot11fUnpackIeVHTOperation(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 return status; } /* End dot11fUnpackIeVHTOperation. */ -#define SigIeVHTOperation ( 0x0075 ) +#define SigIeVHTOperation ( 0x0077 ) tANI_U32 dot11fUnpackIeWAPI(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEWAPI *pDst) @@ -4912,7 +5009,7 @@ tANI_U32 dot11fUnpackIeWAPI(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, t return status; } /* End dot11fUnpackIeWAPI. */ -#define SigIeWAPI ( 0x0076 ) +#define SigIeWAPI ( 0x0078 ) tANI_U32 dot11fUnpackIeWAPIOpaque(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEWAPIOpaque *pDst) @@ -4932,7 +5029,7 @@ tANI_U32 dot11fUnpackIeWAPIOpaque(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ie return status; } /* End dot11fUnpackIeWAPIOpaque. */ -#define SigIeWAPIOpaque ( 0x0077 ) +#define SigIeWAPIOpaque ( 0x0079 ) tANI_U32 dot11fUnpackIeWFATPC(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEWFATPC *pDst) @@ -4949,7 +5046,7 @@ tANI_U32 dot11fUnpackIeWFATPC(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, return status; } /* End dot11fUnpackIeWFATPC. */ -#define SigIeWFATPC ( 0x0078 ) +#define SigIeWFATPC ( 0x007a ) tANI_U32 dot11fUnpackIeWFDIEOpaque(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEWFDIEOpaque *pDst) @@ -4969,7 +5066,7 @@ tANI_U32 dot11fUnpackIeWFDIEOpaque(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 i return status; } /* End dot11fUnpackIeWFDIEOpaque. */ -#define SigIeWFDIEOpaque ( 0x0079 ) +#define SigIeWFDIEOpaque ( 0x007b ) tANI_U32 dot11fUnpackIeWMMCaps(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEWMMCaps *pDst) @@ -4997,7 +5094,7 @@ tANI_U32 dot11fUnpackIeWMMCaps(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen return status; } /* End dot11fUnpackIeWMMCaps. */ -#define SigIeWMMCaps ( 0x007a ) +#define SigIeWMMCaps ( 0x007c ) tANI_U32 dot11fUnpackIeWMMInfoAp(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEWMMInfoAp *pDst) @@ -5018,7 +5115,7 @@ tANI_U32 dot11fUnpackIeWMMInfoAp(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 iel return status; } /* End dot11fUnpackIeWMMInfoAp. */ -#define SigIeWMMInfoAp ( 0x007b ) +#define SigIeWMMInfoAp ( 0x007d ) tANI_U32 dot11fUnpackIeWMMInfoStation(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEWMMInfoStation *pDst) @@ -5043,7 +5140,7 @@ tANI_U32 dot11fUnpackIeWMMInfoStation(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U return status; } /* End dot11fUnpackIeWMMInfoStation. */ -#define SigIeWMMInfoStation ( 0x007c ) +#define SigIeWMMInfoStation ( 0x007e ) tANI_U32 dot11fUnpackIeWMMParams(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEWMMParams *pDst) @@ -5136,7 +5233,7 @@ tANI_U32 dot11fUnpackIeWMMParams(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 iel return status; } /* End dot11fUnpackIeWMMParams. */ -#define SigIeWMMParams ( 0x007d ) +#define SigIeWMMParams ( 0x007f ) tANI_U32 dot11fUnpackIeWPA(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEWPA *pDst) @@ -5218,7 +5315,7 @@ tANI_U32 dot11fUnpackIeWPA(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tD return status; } /* End dot11fUnpackIeWPA. */ -#define SigIeWPA ( 0x007e ) +#define SigIeWPA ( 0x0080 ) tANI_U32 dot11fUnpackIeWPAOpaque(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEWPAOpaque *pDst) @@ -5238,7 +5335,7 @@ tANI_U32 dot11fUnpackIeWPAOpaque(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 iel return status; } /* End dot11fUnpackIeWPAOpaque. */ -#define SigIeWPAOpaque ( 0x007f ) +#define SigIeWPAOpaque ( 0x0081 ) static const tTLVDefn TLVS_WSC[ ] = { @@ -5276,7 +5373,7 @@ tANI_U32 dot11fUnpackIeWSC(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tD return status; } /* End dot11fUnpackIeWSC. */ -#define SigIeWSC ( 0x0080 ) +#define SigIeWSC ( 0x0082 ) tANI_U32 dot11fUnpackIeWiderBWChanSwitchAnn(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEWiderBWChanSwitchAnn *pDst) @@ -5296,7 +5393,7 @@ tANI_U32 dot11fUnpackIeWiderBWChanSwitchAnn(tpAniSirGlobal pCtx, tANI_U8 *pBuf, return status; } /* End dot11fUnpackIeWiderBWChanSwitchAnn. */ -#define SigIeWiderBWChanSwitchAnn ( 0x0081 ) +#define SigIeWiderBWChanSwitchAnn ( 0x0083 ) static const tTLVDefn TLVS_WscAssocReq[ ] = { @@ -5315,7 +5412,7 @@ tANI_U32 dot11fUnpackIeWscAssocReq(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 i return status; } /* End dot11fUnpackIeWscAssocReq. */ -#define SigIeWscAssocReq ( 0x0082 ) +#define SigIeWscAssocReq ( 0x0084 ) static const tTLVDefn TLVS_WscAssocRes[ ] = { @@ -5334,7 +5431,7 @@ tANI_U32 dot11fUnpackIeWscAssocRes(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 i return status; } /* End dot11fUnpackIeWscAssocRes. */ -#define SigIeWscAssocRes ( 0x0083 ) +#define SigIeWscAssocRes ( 0x0085 ) static const tTLVDefn TLVS_WscBeacon[ ] = { @@ -5359,7 +5456,7 @@ tANI_U32 dot11fUnpackIeWscBeacon(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 iel return status; } /* End dot11fUnpackIeWscBeacon. */ -#define SigIeWscBeacon ( 0x0084 ) +#define SigIeWscBeacon ( 0x0086 ) static const tTLVDefn TLVS_WscBeaconProbeRes[ ] = { @@ -5392,7 +5489,7 @@ tANI_U32 dot11fUnpackIeWscBeaconProbeRes(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tAN return status; } /* End dot11fUnpackIeWscBeaconProbeRes. */ -#define SigIeWscBeaconProbeRes ( 0x0085 ) +#define SigIeWscBeaconProbeRes ( 0x0087 ) tANI_U32 dot11fUnpackIeWscIEOpaque(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEWscIEOpaque *pDst) @@ -5412,7 +5509,7 @@ tANI_U32 dot11fUnpackIeWscIEOpaque(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 i return status; } /* End dot11fUnpackIeWscIEOpaque. */ -#define SigIeWscIEOpaque ( 0x0086 ) +#define SigIeWscIEOpaque ( 0x0088 ) static const tTLVDefn TLVS_WscProbeReq[ ] = { @@ -5443,7 +5540,7 @@ tANI_U32 dot11fUnpackIeWscProbeReq(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 i return status; } /* End dot11fUnpackIeWscProbeReq. */ -#define SigIeWscProbeReq ( 0x0087 ) +#define SigIeWscProbeReq ( 0x0089 ) static const tTLVDefn TLVS_WscProbeRes[ ] = { @@ -5476,7 +5573,7 @@ tANI_U32 dot11fUnpackIeWscProbeRes(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 i return status; } /* End dot11fUnpackIeWscProbeRes. */ -#define SigIeWscProbeRes ( 0x0088 ) +#define SigIeWscProbeRes ( 0x008a ) static const tTLVDefn TLVS_WscReassocRes[ ] = { @@ -5495,7 +5592,7 @@ tANI_U32 dot11fUnpackIeWscReassocRes(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 return status; } /* End dot11fUnpackIeWscReassocRes. */ -#define SigIeWscReassocRes ( 0x0089 ) +#define SigIeWscReassocRes ( 0x008b ) static const tFFDefn FFS_AddBAReq[] = { @@ -6255,13 +6352,13 @@ tANI_U32 dot11fUnpackAssocRequest(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 n } else { - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_ASSOCREQUEST), FRFL("more_data_ack (1): %d\n"), pFrm->QOSCapsStation.more_data_ack); - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_ASSOCREQUEST), FRFL("max_sp_length (2): %d\n"), pFrm->QOSCapsStation.max_sp_length); - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_ASSOCREQUEST), FRFL("qack (1): %d\n"), pFrm->QOSCapsStation.qack); - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_ASSOCREQUEST), FRFL("acbe_uapsd (1): %d\n"), pFrm->QOSCapsStation.acbe_uapsd); - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_ASSOCREQUEST), FRFL("acbk_uapsd (1): %d\n"), pFrm->QOSCapsStation.acbk_uapsd); - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_ASSOCREQUEST), FRFL("acvi_uapsd (1): %d\n"), pFrm->QOSCapsStation.acvi_uapsd); FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_ASSOCREQUEST), FRFL("acvo_uapsd (1): %d\n"), pFrm->QOSCapsStation.acvo_uapsd); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_ASSOCREQUEST), FRFL("acvi_uapsd (1): %d\n"), pFrm->QOSCapsStation.acvi_uapsd); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_ASSOCREQUEST), FRFL("acbk_uapsd (1): %d\n"), pFrm->QOSCapsStation.acbk_uapsd); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_ASSOCREQUEST), FRFL("acbe_uapsd (1): %d\n"), pFrm->QOSCapsStation.acbe_uapsd); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_ASSOCREQUEST), FRFL("qack (1): %d\n"), pFrm->QOSCapsStation.qack); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_ASSOCREQUEST), FRFL("max_sp_length (2): %d\n"), pFrm->QOSCapsStation.max_sp_length); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_ASSOCREQUEST), FRFL("more_data_ack (1): %d\n"), pFrm->QOSCapsStation.more_data_ack); } FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_ASSOCREQUEST), FRFL("RRMEnabledCap:\n")); if (!pFrm->RRMEnabledCap.present) @@ -6806,7 +6903,7 @@ tANI_U32 dot11fUnpackAssocRequest(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 n {offsetof(tDot11fAssocResponse, RSNIIE), offsetof(tDot11fIERSNIIE, present), 0, "RSNIIE" , 0, 3, 3, SigIeRSNIIE, {0, 0, 0, 0, 0}, 0, DOT11F_EID_RSNIIE, 0, }, {offsetof(tDot11fAssocResponse, RRMEnabledCap), offsetof(tDot11fIERRMEnabledCap, present), 0, "RRMEnabledCap" , 0, 7, 7, SigIeRRMEnabledCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_RRMENABLEDCAP, 0, }, {offsetof(tDot11fAssocResponse, MobilityDomain), offsetof(tDot11fIEMobilityDomain, present), 0, "MobilityDomain" , 0, 5, 5, SigIeMobilityDomain, {0, 0, 0, 0, 0}, 0, DOT11F_EID_MOBILITYDOMAIN, 0, }, - {offsetof(tDot11fAssocResponse, FTInfo), offsetof(tDot11fIEFTInfo, present), 0, "FTInfo" , 0, 84, 187, SigIeFTInfo, {0, 0, 0, 0, 0}, 0, DOT11F_EID_FTINFO, 0, }, + {offsetof(tDot11fAssocResponse, FTInfo), offsetof(tDot11fIEFTInfo, present), 0, "FTInfo" , 0, 84, 222, SigIeFTInfo, {0, 0, 0, 0, 0}, 0, DOT11F_EID_FTINFO, 0, }, {offsetof(tDot11fAssocResponse, RICDataDesc), offsetof(tDot11fIERICDataDesc, present), offsetof(tDot11fAssocResponse, num_RICDataDesc), "RICDataDesc" , 2, 2, 550, SigIeRICDataDesc, {0, 0, 0, 0, 0}, 0, DOT11F_EID_RICDATADESC, 0, }, {offsetof(tDot11fAssocResponse, WPA), offsetof(tDot11fIEWPA, present), 0, "WPA" , 0, 8, 50, SigIeWPA, {0, 80, 242, 1, 0}, 4, DOT11F_EID_WPA, 0, }, {offsetof(tDot11fAssocResponse, HTCaps), offsetof(tDot11fIEHTCaps, present), 0, "HTCaps" , 0, 28, 60, SigIeHTCaps, {0, 0, 0, 0, 0}, 0, DOT11F_EID_HTCAPS, 0, }, @@ -7029,6 +7126,18 @@ tANI_U32 dot11fUnpackAssocResponse(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_ASSOCRESPONSE), FRFL("num_PMK_R0_ID: %d.\n"), pFrm->FTInfo.R0KH_ID.num_PMK_R0_ID); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_ASSOCRESPONSE), ( tANI_U8* ) pFrm->FTInfo.R0KH_ID.PMK_R0_ID, pFrm->FTInfo.R0KH_ID.num_PMK_R0_ID); } + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_ASSOCRESPONSE), FRFL("IGTK:\n")); + if (!pFrm->FTInfo.IGTK.present) + { + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_ASSOCRESPONSE), FRFL("Not present.\n")); + } + else + { + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_ASSOCRESPONSE), ( tANI_U8* )&pFrm->FTInfo.IGTK.keyID, 2); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_ASSOCRESPONSE), ( tANI_U8* )&pFrm->FTInfo.IGTK.IPN, 6); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_ASSOCRESPONSE), ( tANI_U8* )&pFrm->FTInfo.IGTK.keyLength, 1); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_ASSOCRESPONSE), ( tANI_U8* )&pFrm->FTInfo.IGTK.key, 24); + } } for (i = 0; i < pFrm->num_RICDataDesc; ++i) { @@ -7946,7 +8055,7 @@ tANI_U32 dot11fUnpackAssocResponse(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 {offsetof(tDot11fAuthentication, ChallengeText), offsetof(tDot11fIEChallengeText, present), 0, "ChallengeText" , 0, 3, 255, SigIeChallengeText, {0, 0, 0, 0, 0}, 0, DOT11F_EID_CHALLENGETEXT, 0, }, {offsetof(tDot11fAuthentication, RSNOpaque), offsetof(tDot11fIERSNOpaque, present), 0, "RSNOpaque" , 0, 8, 255, SigIeRSNOpaque, {0, 0, 0, 0, 0}, 0, DOT11F_EID_RSNOPAQUE, 0, }, {offsetof(tDot11fAuthentication, MobilityDomain), offsetof(tDot11fIEMobilityDomain, present), 0, "MobilityDomain" , 0, 5, 5, SigIeMobilityDomain, {0, 0, 0, 0, 0}, 0, DOT11F_EID_MOBILITYDOMAIN, 0, }, - {offsetof(tDot11fAuthentication, FTInfo), offsetof(tDot11fIEFTInfo, present), 0, "FTInfo" , 0, 84, 187, SigIeFTInfo, {0, 0, 0, 0, 0}, 0, DOT11F_EID_FTINFO, 0, }, + {offsetof(tDot11fAuthentication, FTInfo), offsetof(tDot11fIEFTInfo, present), 0, "FTInfo" , 0, 84, 222, SigIeFTInfo, {0, 0, 0, 0, 0}, 0, DOT11F_EID_FTINFO, 0, }, {offsetof(tDot11fAuthentication, FTTimeoutInterval), offsetof(tDot11fIEFTTimeoutInterval, present), 0, "FTTimeoutInterval" , 0, 7, 7, SigIeFTTimeoutInterval, {0, 0, 0, 0, 0}, 0, DOT11F_EID_FTTIMEOUTINTERVAL, 0, }, {offsetof(tDot11fAuthentication, RICDataDesc), offsetof(tDot11fIERICDataDesc, present), offsetof(tDot11fAuthentication, num_RICDataDesc), "RICDataDesc" , 2, 2, 550, SigIeRICDataDesc, {0, 0, 0, 0, 0}, 0, DOT11F_EID_RICDATADESC, 0, }, {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, }, }; @@ -8047,6 +8156,18 @@ tANI_U32 dot11fUnpackAuthentication(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_AUTHENTICATION), FRFL("num_PMK_R0_ID: %d.\n"), pFrm->FTInfo.R0KH_ID.num_PMK_R0_ID); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_AUTHENTICATION), ( tANI_U8* ) pFrm->FTInfo.R0KH_ID.PMK_R0_ID, pFrm->FTInfo.R0KH_ID.num_PMK_R0_ID); } + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_AUTHENTICATION), FRFL("IGTK:\n")); + if (!pFrm->FTInfo.IGTK.present) + { + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_AUTHENTICATION), FRFL("Not present.\n")); + } + else + { + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_AUTHENTICATION), ( tANI_U8* )&pFrm->FTInfo.IGTK.keyID, 2); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_AUTHENTICATION), ( tANI_U8* )&pFrm->FTInfo.IGTK.IPN, 6); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_AUTHENTICATION), ( tANI_U8* )&pFrm->FTInfo.IGTK.keyLength, 1); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_AUTHENTICATION), ( tANI_U8* )&pFrm->FTInfo.IGTK.key, 24); + } } FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_AUTHENTICATION), FRFL("FTTimeoutInterval:\n")); if (!pFrm->FTTimeoutInterval.present) @@ -8356,7 +8477,7 @@ tANI_U32 dot11fUnpackAuthentication(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 {offsetof(tDot11fBeacon, TPCReport), offsetof(tDot11fIETPCReport, present), 0, "TPCReport" , 0, 4, 4, SigIeTPCReport, {0, 0, 0, 0, 0}, 0, DOT11F_EID_TPCREPORT, 0, }, {offsetof(tDot11fBeacon, ERPInfo), offsetof(tDot11fIEERPInfo, present), 0, "ERPInfo" , 0, 3, 3, SigIeERPInfo, {0, 0, 0, 0, 0}, 0, DOT11F_EID_ERPINFO, 0, }, {offsetof(tDot11fBeacon, ExtSuppRates), offsetof(tDot11fIEExtSuppRates, present), 0, "ExtSuppRates" , 0, 3, 14, SigIeExtSuppRates, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTSUPPRATES, 0, }, - {offsetof(tDot11fBeacon, RSN), offsetof(tDot11fIERSN, present), 0, "RSN" , 0, 8, 112, SigIeRSN, {0, 0, 0, 0, 0}, 0, DOT11F_EID_RSN, 0, }, + {offsetof(tDot11fBeacon, RSN), offsetof(tDot11fIERSN, present), 0, "RSN" , 0, 8, 116, SigIeRSN, {0, 0, 0, 0, 0}, 0, DOT11F_EID_RSN, 0, }, {offsetof(tDot11fBeacon, QBSSLoad), offsetof(tDot11fIEQBSSLoad, present), 0, "QBSSLoad" , 0, 7, 7, SigIeQBSSLoad, {0, 0, 0, 0, 0}, 0, DOT11F_EID_QBSSLOAD, 0, }, {offsetof(tDot11fBeacon, EDCAParamSet), offsetof(tDot11fIEEDCAParamSet, present), 0, "EDCAParamSet" , 0, 20, 20, SigIeEDCAParamSet, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EDCAPARAMSET, 0, }, {offsetof(tDot11fBeacon, QOSCapsAp), offsetof(tDot11fIEQOSCapsAp, present), 0, "QOSCapsAp" , 0, 3, 3, SigIeQOSCapsAp, {0, 0, 0, 0, 0}, 0, DOT11F_EID_QOSCAPSAP, 0, }, @@ -8383,6 +8504,7 @@ tANI_U32 dot11fUnpackAuthentication(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 {offsetof(tDot11fBeacon, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 10, 10, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, }, {offsetof(tDot11fBeacon, OperatingMode), offsetof(tDot11fIEOperatingMode, present), 0, "OperatingMode" , 0, 3, 3, SigIeOperatingMode, {0, 0, 0, 0, 0}, 0, DOT11F_EID_OPERATINGMODE, 0, }, {offsetof(tDot11fBeacon, WiderBWChanSwitchAnn), offsetof(tDot11fIEWiderBWChanSwitchAnn, present), 0, "WiderBWChanSwitchAnn" , 0, 5, 5, SigIeWiderBWChanSwitchAnn, {0, 0, 0, 0, 0}, 0, DOT11F_EID_WIDERBWCHANSWITCHANN, 0, }, + {offsetof(tDot11fBeacon, OxygenNetwork), offsetof(tDot11fIEOxygenNetwork, present), 0, "OxygenNetwork" , 0, 7, 7, SigIeOxygenNetwork, {0, 22, 50, 0, 0}, 3, DOT11F_EID_OXYGENNETWORK, 0, }, {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, }, }; tANI_U32 dot11fUnpackBeacon(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 nBuf, tDot11fBeacon *pFrm) @@ -8609,6 +8731,7 @@ tANI_U32 dot11fUnpackBeacon(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 nBuf, t FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), ( tANI_U8* )&pFrm->RSN.RSN_Cap, 2); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), ( tANI_U8* )&pFrm->RSN.pmkid_count, 2); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), ( tANI_U8* ) pFrm->RSN.pmkid, 16 * pFrm->RSN.pmkid_count); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), ( tANI_U8* )&pFrm->RSN.gp_mgmt_cipher_suite, 4); } FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), FRFL("QBSSLoad:\n")); if (!pFrm->QBSSLoad.present) @@ -8666,11 +8789,11 @@ tANI_U32 dot11fUnpackBeacon(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 nBuf, t } else { - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), FRFL("reserved (1): %d\n"), pFrm->QOSCapsAp.reserved); - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), FRFL("txopreq (1): %d\n"), pFrm->QOSCapsAp.txopreq); - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), FRFL("qreq (1): %d\n"), pFrm->QOSCapsAp.qreq); - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), FRFL("qack (1): %d\n"), pFrm->QOSCapsAp.qack); FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), FRFL("count (4): %d\n"), pFrm->QOSCapsAp.count); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), FRFL("qack (1): %d\n"), pFrm->QOSCapsAp.qack); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), FRFL("qreq (1): %d\n"), pFrm->QOSCapsAp.qreq); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), FRFL("txopreq (1): %d\n"), pFrm->QOSCapsAp.txopreq); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), FRFL("reserved (1): %d\n"), pFrm->QOSCapsAp.reserved); } FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), FRFL("APChannelReport:\n")); if (!pFrm->APChannelReport.present) @@ -9466,6 +9589,15 @@ tANI_U32 dot11fUnpackBeacon(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 nBuf, t FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), ( tANI_U8* )&pFrm->WiderBWChanSwitchAnn.newCenterChanFreq0, 1); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), ( tANI_U8* )&pFrm->WiderBWChanSwitchAnn.newCenterChanFreq1, 1); } + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), FRFL("OxygenNetwork:\n")); + if (!pFrm->OxygenNetwork.present) + { + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), FRFL("Not present.\n")); + } + else + { + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), ( tANI_U8* )&pFrm->OxygenNetwork.data, 2); + } } # endif // DOT11F_DUMP_FRAMES return status; @@ -9576,7 +9708,7 @@ tANI_U32 dot11fUnpackBeacon1(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 nBuf, {offsetof(tDot11fBeacon2, TPCReport), offsetof(tDot11fIETPCReport, present), 0, "TPCReport" , 0, 4, 4, SigIeTPCReport, {0, 0, 0, 0, 0}, 0, DOT11F_EID_TPCREPORT, 0, }, {offsetof(tDot11fBeacon2, ERPInfo), offsetof(tDot11fIEERPInfo, present), 0, "ERPInfo" , 0, 3, 3, SigIeERPInfo, {0, 0, 0, 0, 0}, 0, DOT11F_EID_ERPINFO, 0, }, {offsetof(tDot11fBeacon2, ExtSuppRates), offsetof(tDot11fIEExtSuppRates, present), 0, "ExtSuppRates" , 0, 3, 14, SigIeExtSuppRates, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTSUPPRATES, 0, }, - {offsetof(tDot11fBeacon2, RSN), offsetof(tDot11fIERSN, present), 0, "RSN" , 0, 8, 112, SigIeRSN, {0, 0, 0, 0, 0}, 0, DOT11F_EID_RSN, 0, }, + {offsetof(tDot11fBeacon2, RSNOpaque), offsetof(tDot11fIERSNOpaque, present), 0, "RSNOpaque" , 0, 8, 255, SigIeRSNOpaque, {0, 0, 0, 0, 0}, 0, DOT11F_EID_RSNOPAQUE, 0, }, {offsetof(tDot11fBeacon2, EDCAParamSet), offsetof(tDot11fIEEDCAParamSet, present), 0, "EDCAParamSet" , 0, 20, 20, SigIeEDCAParamSet, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EDCAPARAMSET, 0, }, {offsetof(tDot11fBeacon2, APChannelReport), offsetof(tDot11fIEAPChannelReport, present), 0, "APChannelReport" , 0, 3, 53, SigIeAPChannelReport, {0, 0, 0, 0, 0}, 0, DOT11F_EID_APCHANNELREPORT, 0, }, {offsetof(tDot11fBeacon2, RRMEnabledCap), offsetof(tDot11fIERRMEnabledCap, present), 0, "RRMEnabledCap" , 0, 7, 7, SigIeRRMEnabledCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_RRMENABLEDCAP, 0, }, @@ -9601,6 +9733,7 @@ tANI_U32 dot11fUnpackBeacon1(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 nBuf, {offsetof(tDot11fBeacon2, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 10, 10, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, }, {offsetof(tDot11fBeacon2, OperatingMode), offsetof(tDot11fIEOperatingMode, present), 0, "OperatingMode" , 0, 3, 3, SigIeOperatingMode, {0, 0, 0, 0, 0}, 0, DOT11F_EID_OPERATINGMODE, 0, }, {offsetof(tDot11fBeacon2, WiderBWChanSwitchAnn), offsetof(tDot11fIEWiderBWChanSwitchAnn, present), 0, "WiderBWChanSwitchAnn" , 0, 5, 5, SigIeWiderBWChanSwitchAnn, {0, 0, 0, 0, 0}, 0, DOT11F_EID_WIDERBWCHANSWITCHANN, 0, }, + {offsetof(tDot11fBeacon2, OxygenNetwork), offsetof(tDot11fIEOxygenNetwork, present), 0, "OxygenNetwork" , 0, 7, 7, SigIeOxygenNetwork, {0, 22, 50, 0, 0}, 3, DOT11F_EID_OXYGENNETWORK, 0, }, {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, }, }; tANI_U32 dot11fUnpackBeacon2(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 nBuf, tDot11fBeacon2 *pFrm) @@ -9691,22 +9824,15 @@ tANI_U32 dot11fUnpackBeacon2(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 nBuf, FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), FRFL("num_rates: %d.\n"), pFrm->ExtSuppRates.num_rates); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), ( tANI_U8* ) pFrm->ExtSuppRates.rates, pFrm->ExtSuppRates.num_rates); } - FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), FRFL("RSN:\n")); - if (!pFrm->RSN.present) + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), FRFL("RSNOpaque:\n")); + if (!pFrm->RSNOpaque.present) { FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), FRFL("Not present.\n")); } else { - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), ( tANI_U8* )&pFrm->RSN.version, 2); - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), ( tANI_U8* )&pFrm->RSN.gp_cipher_suite, 4); - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), ( tANI_U8* )&pFrm->RSN.pwise_cipher_suite_count, 2); - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), ( tANI_U8* ) pFrm->RSN.pwise_cipher_suites, 4 * pFrm->RSN.pwise_cipher_suite_count); - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), ( tANI_U8* )&pFrm->RSN.akm_suite_count, 2); - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), ( tANI_U8* ) pFrm->RSN.akm_suites, 4 * pFrm->RSN.akm_suite_count); - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), ( tANI_U8* )&pFrm->RSN.RSN_Cap, 2); - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), ( tANI_U8* )&pFrm->RSN.pmkid_count, 2); - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), ( tANI_U8* ) pFrm->RSN.pmkid, 16 * pFrm->RSN.pmkid_count); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), FRFL("num_data: %d.\n"), pFrm->RSNOpaque.num_data); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), ( tANI_U8* ) pFrm->RSNOpaque.data, pFrm->RSNOpaque.num_data); } FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), FRFL("EDCAParamSet:\n")); if (!pFrm->EDCAParamSet.present) @@ -10540,6 +10666,15 @@ tANI_U32 dot11fUnpackBeacon2(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 nBuf, FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), ( tANI_U8* )&pFrm->WiderBWChanSwitchAnn.newCenterChanFreq0, 1); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), ( tANI_U8* )&pFrm->WiderBWChanSwitchAnn.newCenterChanFreq1, 1); } + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), FRFL("OxygenNetwork:\n")); + if (!pFrm->OxygenNetwork.present) + { + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), FRFL("Not present.\n")); + } + else + { + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), ( tANI_U8* )&pFrm->OxygenNetwork.data, 2); + } } # endif // DOT11F_DUMP_FRAMES return status; @@ -10567,7 +10702,7 @@ tANI_U32 dot11fUnpackBeacon2(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 nBuf, {offsetof(tDot11fBeaconIEs, TPCReport), offsetof(tDot11fIETPCReport, present), 0, "TPCReport" , 0, 4, 4, SigIeTPCReport, {0, 0, 0, 0, 0}, 0, DOT11F_EID_TPCREPORT, 0, }, {offsetof(tDot11fBeaconIEs, ERPInfo), offsetof(tDot11fIEERPInfo, present), 0, "ERPInfo" , 0, 3, 3, SigIeERPInfo, {0, 0, 0, 0, 0}, 0, DOT11F_EID_ERPINFO, 0, }, {offsetof(tDot11fBeaconIEs, ExtSuppRates), offsetof(tDot11fIEExtSuppRates, present), 0, "ExtSuppRates" , 0, 3, 14, SigIeExtSuppRates, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTSUPPRATES, 0, }, - {offsetof(tDot11fBeaconIEs, RSN), offsetof(tDot11fIERSN, present), 0, "RSN" , 0, 8, 112, SigIeRSN, {0, 0, 0, 0, 0}, 0, DOT11F_EID_RSN, 0, }, + {offsetof(tDot11fBeaconIEs, RSN), offsetof(tDot11fIERSN, present), 0, "RSN" , 0, 8, 116, SigIeRSN, {0, 0, 0, 0, 0}, 0, DOT11F_EID_RSN, 0, }, {offsetof(tDot11fBeaconIEs, QBSSLoad), offsetof(tDot11fIEQBSSLoad, present), 0, "QBSSLoad" , 0, 7, 7, SigIeQBSSLoad, {0, 0, 0, 0, 0}, 0, DOT11F_EID_QBSSLOAD, 0, }, {offsetof(tDot11fBeaconIEs, EDCAParamSet), offsetof(tDot11fIEEDCAParamSet, present), 0, "EDCAParamSet" , 0, 20, 20, SigIeEDCAParamSet, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EDCAPARAMSET, 0, }, {offsetof(tDot11fBeaconIEs, QOSCapsAp), offsetof(tDot11fIEQOSCapsAp, present), 0, "QOSCapsAp" , 0, 3, 3, SigIeQOSCapsAp, {0, 0, 0, 0, 0}, 0, DOT11F_EID_QOSCAPSAP, 0, }, @@ -10595,6 +10730,7 @@ tANI_U32 dot11fUnpackBeacon2(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 nBuf, {offsetof(tDot11fBeaconIEs, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 10, 10, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, }, {offsetof(tDot11fBeaconIEs, OperatingMode), offsetof(tDot11fIEOperatingMode, present), 0, "OperatingMode" , 0, 3, 3, SigIeOperatingMode, {0, 0, 0, 0, 0}, 0, DOT11F_EID_OPERATINGMODE, 0, }, {offsetof(tDot11fBeaconIEs, WiderBWChanSwitchAnn), offsetof(tDot11fIEWiderBWChanSwitchAnn, present), 0, "WiderBWChanSwitchAnn" , 0, 5, 5, SigIeWiderBWChanSwitchAnn, {0, 0, 0, 0, 0}, 0, DOT11F_EID_WIDERBWCHANSWITCHANN, 0, }, + {offsetof(tDot11fBeaconIEs, OxygenNetwork), offsetof(tDot11fIEOxygenNetwork, present), 0, "OxygenNetwork" , 0, 7, 7, SigIeOxygenNetwork, {0, 22, 50, 0, 0}, 3, DOT11F_EID_OXYGENNETWORK, 0, }, {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, }, }; tANI_U32 dot11fUnpackBeaconIEs(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 nBuf, tDot11fBeaconIEs *pFrm) @@ -10800,6 +10936,7 @@ tANI_U32 dot11fUnpackBeaconIEs(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 nBuf FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), ( tANI_U8* )&pFrm->RSN.RSN_Cap, 2); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), ( tANI_U8* )&pFrm->RSN.pmkid_count, 2); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), ( tANI_U8* ) pFrm->RSN.pmkid, 16 * pFrm->RSN.pmkid_count); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), ( tANI_U8* )&pFrm->RSN.gp_mgmt_cipher_suite, 4); } FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), FRFL("QBSSLoad:\n")); if (!pFrm->QBSSLoad.present) @@ -10857,11 +10994,11 @@ tANI_U32 dot11fUnpackBeaconIEs(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 nBuf } else { - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), FRFL("reserved (1): %d\n"), pFrm->QOSCapsAp.reserved); - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), FRFL("txopreq (1): %d\n"), pFrm->QOSCapsAp.txopreq); - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), FRFL("qreq (1): %d\n"), pFrm->QOSCapsAp.qreq); - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), FRFL("qack (1): %d\n"), pFrm->QOSCapsAp.qack); FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), FRFL("count (4): %d\n"), pFrm->QOSCapsAp.count); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), FRFL("qack (1): %d\n"), pFrm->QOSCapsAp.qack); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), FRFL("qreq (1): %d\n"), pFrm->QOSCapsAp.qreq); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), FRFL("txopreq (1): %d\n"), pFrm->QOSCapsAp.txopreq); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), FRFL("reserved (1): %d\n"), pFrm->QOSCapsAp.reserved); } FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), FRFL("APChannelReport:\n")); if (!pFrm->APChannelReport.present) @@ -11786,6 +11923,15 @@ tANI_U32 dot11fUnpackBeaconIEs(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 nBuf FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), ( tANI_U8* )&pFrm->WiderBWChanSwitchAnn.newCenterChanFreq0, 1); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), ( tANI_U8* )&pFrm->WiderBWChanSwitchAnn.newCenterChanFreq1, 1); } + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), FRFL("OxygenNetwork:\n")); + if (!pFrm->OxygenNetwork.present) + { + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), FRFL("Not present.\n")); + } + else + { + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), ( tANI_U8* )&pFrm->OxygenNetwork.data, 2); + } } # endif // DOT11F_DUMP_FRAMES return status; @@ -14035,7 +14181,7 @@ tANI_U32 dot11fUnpackProbeRequest(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 n {offsetof(tDot11fProbeResponse, TPCReport), offsetof(tDot11fIETPCReport, present), 0, "TPCReport" , 0, 4, 4, SigIeTPCReport, {0, 0, 0, 0, 0}, 0, DOT11F_EID_TPCREPORT, 0, }, {offsetof(tDot11fProbeResponse, ERPInfo), offsetof(tDot11fIEERPInfo, present), 0, "ERPInfo" , 0, 3, 3, SigIeERPInfo, {0, 0, 0, 0, 0}, 0, DOT11F_EID_ERPINFO, 0, }, {offsetof(tDot11fProbeResponse, ExtSuppRates), offsetof(tDot11fIEExtSuppRates, present), 0, "ExtSuppRates" , 0, 3, 14, SigIeExtSuppRates, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTSUPPRATES, 0, }, - {offsetof(tDot11fProbeResponse, RSN), offsetof(tDot11fIERSN, present), 0, "RSN" , 0, 8, 112, SigIeRSN, {0, 0, 0, 0, 0}, 0, DOT11F_EID_RSN, 0, }, + {offsetof(tDot11fProbeResponse, RSNOpaque), offsetof(tDot11fIERSNOpaque, present), 0, "RSNOpaque" , 0, 8, 255, SigIeRSNOpaque, {0, 0, 0, 0, 0}, 0, DOT11F_EID_RSNOPAQUE, 0, }, {offsetof(tDot11fProbeResponse, QBSSLoad), offsetof(tDot11fIEQBSSLoad, present), 0, "QBSSLoad" , 0, 7, 7, SigIeQBSSLoad, {0, 0, 0, 0, 0}, 0, DOT11F_EID_QBSSLOAD, 0, }, {offsetof(tDot11fProbeResponse, EDCAParamSet), offsetof(tDot11fIEEDCAParamSet, present), 0, "EDCAParamSet" , 0, 20, 20, SigIeEDCAParamSet, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EDCAPARAMSET, 0, }, {offsetof(tDot11fProbeResponse, RRMEnabledCap), offsetof(tDot11fIERRMEnabledCap, present), 0, "RRMEnabledCap" , 0, 7, 7, SigIeRRMEnabledCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_RRMENABLEDCAP, 0, }, @@ -14059,6 +14205,7 @@ tANI_U32 dot11fUnpackProbeRequest(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 n {offsetof(tDot11fProbeResponse, VHTOperation), offsetof(tDot11fIEVHTOperation, present), 0, "VHTOperation" , 0, 7, 7, SigIeVHTOperation, {0, 0, 0, 0, 0}, 0, DOT11F_EID_VHTOPERATION, 0, }, {offsetof(tDot11fProbeResponse, VHTExtBssLoad), offsetof(tDot11fIEVHTExtBssLoad, present), 0, "VHTExtBssLoad" , 0, 7, 7, SigIeVHTExtBssLoad, {0, 0, 0, 0, 0}, 0, DOT11F_EID_VHTEXTBSSLOAD, 0, }, {offsetof(tDot11fProbeResponse, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 10, 10, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, }, + {offsetof(tDot11fProbeResponse, OxygenNetwork), offsetof(tDot11fIEOxygenNetwork, present), 0, "OxygenNetwork" , 0, 7, 7, SigIeOxygenNetwork, {0, 22, 50, 0, 0}, 3, DOT11F_EID_OXYGENNETWORK, 0, }, {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, }, }; tANI_U32 dot11fUnpackProbeResponse(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 nBuf, tDot11fProbeResponse *pFrm) @@ -14256,22 +14403,15 @@ tANI_U32 dot11fUnpackProbeResponse(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), FRFL("num_rates: %d.\n"), pFrm->ExtSuppRates.num_rates); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), ( tANI_U8* ) pFrm->ExtSuppRates.rates, pFrm->ExtSuppRates.num_rates); } - FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), FRFL("RSN:\n")); - if (!pFrm->RSN.present) + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), FRFL("RSNOpaque:\n")); + if (!pFrm->RSNOpaque.present) { FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), FRFL("Not present.\n")); } else { - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), ( tANI_U8* )&pFrm->RSN.version, 2); - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), ( tANI_U8* )&pFrm->RSN.gp_cipher_suite, 4); - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), ( tANI_U8* )&pFrm->RSN.pwise_cipher_suite_count, 2); - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), ( tANI_U8* ) pFrm->RSN.pwise_cipher_suites, 4 * pFrm->RSN.pwise_cipher_suite_count); - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), ( tANI_U8* )&pFrm->RSN.akm_suite_count, 2); - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), ( tANI_U8* ) pFrm->RSN.akm_suites, 4 * pFrm->RSN.akm_suite_count); - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), ( tANI_U8* )&pFrm->RSN.RSN_Cap, 2); - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), ( tANI_U8* )&pFrm->RSN.pmkid_count, 2); - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), ( tANI_U8* ) pFrm->RSN.pmkid, 16 * pFrm->RSN.pmkid_count); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), FRFL("num_data: %d.\n"), pFrm->RSNOpaque.num_data); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), ( tANI_U8* ) pFrm->RSNOpaque.data, pFrm->RSNOpaque.num_data); } FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), FRFL("QBSSLoad:\n")); if (!pFrm->QBSSLoad.present) @@ -15204,6 +15344,15 @@ tANI_U32 dot11fUnpackProbeResponse(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), FRFL("operModeNotification (1): %d\n"), pFrm->ExtCap.operModeNotification); FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), FRFL("reserved7 (1): %d\n"), pFrm->ExtCap.reserved7); } + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), FRFL("OxygenNetwork:\n")); + if (!pFrm->OxygenNetwork.present) + { + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), FRFL("Not present.\n")); + } + else + { + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), ( tANI_U8* )&pFrm->OxygenNetwork.data, 2); + } } # endif // DOT11F_DUMP_FRAMES return status; @@ -15361,6 +15510,53 @@ tANI_U32 dot11fUnpackProvisionDiscoveryRes(tpAniSirGlobal pCtx, tANI_U8 *pBuf, t } /* End dot11fUnpackProvisionDiscoveryRes. */ + static const tFFDefn FFS_RMC[] = { + { "Category", offsetof(tDot11fRMC, Category), SigFfCategory , DOT11F_FF_CATEGORY_LEN, }, + { "RMCOUI", offsetof(tDot11fRMC, RMCOUI), SigFfRMCOUI , DOT11F_FF_RMCOUI_LEN, }, + { "MagicCode", offsetof(tDot11fRMC, MagicCode), SigFfMagicCode , DOT11F_FF_MAGICCODE_LEN, }, + { "RMCVersion", offsetof(tDot11fRMC, RMCVersion), SigFfRMCVersion , DOT11F_FF_RMCVERSION_LEN, }, + { "Action", offsetof(tDot11fRMC, Action), SigFfAction , DOT11F_FF_ACTION_LEN, }, + { "RMCDialogToken", offsetof(tDot11fRMC, RMCDialogToken), SigFfRMCDialogToken , DOT11F_FF_RMCDIALOGTOKEN_LEN, }, + { "Leader", offsetof(tDot11fRMC, Leader), SigFfLeader , DOT11F_FF_LEADER_LEN, }, + { NULL, 0, 0, 0,}, + }; + + static const tIEDefn IES_RMC[] = { + {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, }, }; + +tANI_U32 dot11fUnpackRMC(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 nBuf, tDot11fRMC *pFrm) +{ + tANI_U32 i = 0; + tANI_U32 status = 0; + status = UnpackCore(pCtx, pBuf, nBuf, FFS_RMC, IES_RMC, ( tANI_U8* )pFrm, sizeof(*pFrm)); + + (void)i; +# ifdef DOT11F_DUMP_FRAMES + if (!DOT11F_FAILED(status)) + { + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), FRFL("Unpacked the RMC:\n")); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), pBuf, nBuf); + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), FRFL("to:\n")); + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), FRFL("Category:\n")); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), ( tANI_U8* )&pFrm->Category.category, 1); + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), FRFL("RMCOUI:\n")); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), ( tANI_U8* )&pFrm->RMCOUI.oui, 3); + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), FRFL("MagicCode:\n")); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), ( tANI_U8* )&pFrm->MagicCode.magic, 6); + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), FRFL("RMCVersion:\n")); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), ( tANI_U8* )&pFrm->RMCVersion.version, 1); + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), FRFL("Action:\n")); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), ( tANI_U8* )&pFrm->Action.action, 1); + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), FRFL("RMCDialogToken:\n")); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), ( tANI_U8* )&pFrm->RMCDialogToken.token, 4); + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), FRFL("Leader:\n")); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), ( tANI_U8* )&pFrm->Leader.mac, 6); + } +# endif // DOT11F_DUMP_FRAMES + return status; + +} /* End dot11fUnpackRMC. */ + static const tFFDefn FFS_RadioMeasurementReport[] = { { "Category", offsetof(tDot11fRadioMeasurementReport, Category), SigFfCategory , DOT11F_FF_CATEGORY_LEN, }, { "Action", offsetof(tDot11fRadioMeasurementReport, Action), SigFfAction , DOT11F_FF_ACTION_LEN, }, @@ -15561,7 +15757,7 @@ tANI_U32 dot11fUnpackRadioMeasurementRequest(tpAniSirGlobal pCtx, tANI_U8 *pBuf, {offsetof(tDot11fReAssocRequest, QOSCapsStation), offsetof(tDot11fIEQOSCapsStation, present), 0, "QOSCapsStation" , 0, 3, 3, SigIeQOSCapsStation, {0, 0, 0, 0, 0}, 0, DOT11F_EID_QOSCAPSSTATION, 0, }, {offsetof(tDot11fReAssocRequest, RRMEnabledCap), offsetof(tDot11fIERRMEnabledCap, present), 0, "RRMEnabledCap" , 0, 7, 7, SigIeRRMEnabledCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_RRMENABLEDCAP, 0, }, {offsetof(tDot11fReAssocRequest, MobilityDomain), offsetof(tDot11fIEMobilityDomain, present), 0, "MobilityDomain" , 0, 5, 5, SigIeMobilityDomain, {0, 0, 0, 0, 0}, 0, DOT11F_EID_MOBILITYDOMAIN, 0, }, - {offsetof(tDot11fReAssocRequest, FTInfo), offsetof(tDot11fIEFTInfo, present), 0, "FTInfo" , 0, 84, 187, SigIeFTInfo, {0, 0, 0, 0, 0}, 0, DOT11F_EID_FTINFO, 0, }, + {offsetof(tDot11fReAssocRequest, FTInfo), offsetof(tDot11fIEFTInfo, present), 0, "FTInfo" , 0, 84, 222, SigIeFTInfo, {0, 0, 0, 0, 0}, 0, DOT11F_EID_FTINFO, 0, }, {offsetof(tDot11fReAssocRequest, RICDataDesc), offsetof(tDot11fIERICDataDesc, present), offsetof(tDot11fReAssocRequest, num_RICDataDesc), "RICDataDesc" , 2, 2, 550, SigIeRICDataDesc, {0, 0, 0, 0, 0}, 0, DOT11F_EID_RICDATADESC, 0, }, {offsetof(tDot11fReAssocRequest, WPAOpaque), offsetof(tDot11fIEWPAOpaque, present), 0, "WPAOpaque" , 0, 8, 255, SigIeWPAOpaque, {0, 80, 242, 1, 0}, 4, DOT11F_EID_WPAOPAQUE, 0, }, {offsetof(tDot11fReAssocRequest, HTCaps), offsetof(tDot11fIEHTCaps, present), 0, "HTCaps" , 0, 28, 60, SigIeHTCaps, {0, 0, 0, 0, 0}, 0, DOT11F_EID_HTCAPS, 0, }, @@ -15683,13 +15879,13 @@ tANI_U32 dot11fUnpackReAssocRequest(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 } else { - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_REASSOCREQUEST), FRFL("more_data_ack (1): %d\n"), pFrm->QOSCapsStation.more_data_ack); - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_REASSOCREQUEST), FRFL("max_sp_length (2): %d\n"), pFrm->QOSCapsStation.max_sp_length); - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_REASSOCREQUEST), FRFL("qack (1): %d\n"), pFrm->QOSCapsStation.qack); - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_REASSOCREQUEST), FRFL("acbe_uapsd (1): %d\n"), pFrm->QOSCapsStation.acbe_uapsd); - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_REASSOCREQUEST), FRFL("acbk_uapsd (1): %d\n"), pFrm->QOSCapsStation.acbk_uapsd); - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_REASSOCREQUEST), FRFL("acvi_uapsd (1): %d\n"), pFrm->QOSCapsStation.acvi_uapsd); FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_REASSOCREQUEST), FRFL("acvo_uapsd (1): %d\n"), pFrm->QOSCapsStation.acvo_uapsd); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_REASSOCREQUEST), FRFL("acvi_uapsd (1): %d\n"), pFrm->QOSCapsStation.acvi_uapsd); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_REASSOCREQUEST), FRFL("acbk_uapsd (1): %d\n"), pFrm->QOSCapsStation.acbk_uapsd); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_REASSOCREQUEST), FRFL("acbe_uapsd (1): %d\n"), pFrm->QOSCapsStation.acbe_uapsd); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_REASSOCREQUEST), FRFL("qack (1): %d\n"), pFrm->QOSCapsStation.qack); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_REASSOCREQUEST), FRFL("max_sp_length (2): %d\n"), pFrm->QOSCapsStation.max_sp_length); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_REASSOCREQUEST), FRFL("more_data_ack (1): %d\n"), pFrm->QOSCapsStation.more_data_ack); } FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_REASSOCREQUEST), FRFL("RRMEnabledCap:\n")); if (!pFrm->RRMEnabledCap.present) @@ -15785,6 +15981,18 @@ tANI_U32 dot11fUnpackReAssocRequest(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_REASSOCREQUEST), FRFL("num_PMK_R0_ID: %d.\n"), pFrm->FTInfo.R0KH_ID.num_PMK_R0_ID); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_REASSOCREQUEST), ( tANI_U8* ) pFrm->FTInfo.R0KH_ID.PMK_R0_ID, pFrm->FTInfo.R0KH_ID.num_PMK_R0_ID); } + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_REASSOCREQUEST), FRFL("IGTK:\n")); + if (!pFrm->FTInfo.IGTK.present) + { + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_REASSOCREQUEST), FRFL("Not present.\n")); + } + else + { + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_REASSOCREQUEST), ( tANI_U8* )&pFrm->FTInfo.IGTK.keyID, 2); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_REASSOCREQUEST), ( tANI_U8* )&pFrm->FTInfo.IGTK.IPN, 6); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_REASSOCREQUEST), ( tANI_U8* )&pFrm->FTInfo.IGTK.keyLength, 1); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_REASSOCREQUEST), ( tANI_U8* )&pFrm->FTInfo.IGTK.key, 24); + } } for (i = 0; i < pFrm->num_RICDataDesc; ++i) { @@ -16608,7 +16816,7 @@ tANI_U32 dot11fUnpackReAssocRequest(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 {offsetof(tDot11fReAssocResponse, RRMEnabledCap), offsetof(tDot11fIERRMEnabledCap, present), 0, "RRMEnabledCap" , 0, 7, 7, SigIeRRMEnabledCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_RRMENABLEDCAP, 0, }, {offsetof(tDot11fReAssocResponse, RSNOpaque), offsetof(tDot11fIERSNOpaque, present), 0, "RSNOpaque" , 0, 8, 255, SigIeRSNOpaque, {0, 0, 0, 0, 0}, 0, DOT11F_EID_RSNOPAQUE, 0, }, {offsetof(tDot11fReAssocResponse, MobilityDomain), offsetof(tDot11fIEMobilityDomain, present), 0, "MobilityDomain" , 0, 5, 5, SigIeMobilityDomain, {0, 0, 0, 0, 0}, 0, DOT11F_EID_MOBILITYDOMAIN, 0, }, - {offsetof(tDot11fReAssocResponse, FTInfo), offsetof(tDot11fIEFTInfo, present), 0, "FTInfo" , 0, 84, 187, SigIeFTInfo, {0, 0, 0, 0, 0}, 0, DOT11F_EID_FTINFO, 0, }, + {offsetof(tDot11fReAssocResponse, FTInfo), offsetof(tDot11fIEFTInfo, present), 0, "FTInfo" , 0, 84, 222, SigIeFTInfo, {0, 0, 0, 0, 0}, 0, DOT11F_EID_FTINFO, 0, }, {offsetof(tDot11fReAssocResponse, RICDataDesc), offsetof(tDot11fIERICDataDesc, present), offsetof(tDot11fReAssocResponse, num_RICDataDesc), "RICDataDesc" , 2, 2, 550, SigIeRICDataDesc, {0, 0, 0, 0, 0}, 0, DOT11F_EID_RICDATADESC, 0, }, {offsetof(tDot11fReAssocResponse, WPA), offsetof(tDot11fIEWPA, present), 0, "WPA" , 0, 8, 50, SigIeWPA, {0, 80, 242, 1, 0}, 4, DOT11F_EID_WPA, 0, }, {offsetof(tDot11fReAssocResponse, HTCaps), offsetof(tDot11fIEHTCaps, present), 0, "HTCaps" , 0, 28, 60, SigIeHTCaps, {0, 0, 0, 0, 0}, 0, DOT11F_EID_HTCAPS, 0, }, @@ -16841,6 +17049,18 @@ tANI_U32 dot11fUnpackReAssocResponse(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U3 FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_REASSOCRESPONSE), FRFL("num_PMK_R0_ID: %d.\n"), pFrm->FTInfo.R0KH_ID.num_PMK_R0_ID); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_REASSOCRESPONSE), ( tANI_U8* ) pFrm->FTInfo.R0KH_ID.PMK_R0_ID, pFrm->FTInfo.R0KH_ID.num_PMK_R0_ID); } + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_REASSOCRESPONSE), FRFL("IGTK:\n")); + if (!pFrm->FTInfo.IGTK.present) + { + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_REASSOCRESPONSE), FRFL("Not present.\n")); + } + else + { + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_REASSOCRESPONSE), ( tANI_U8* )&pFrm->FTInfo.IGTK.keyID, 2); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_REASSOCRESPONSE), ( tANI_U8* )&pFrm->FTInfo.IGTK.IPN, 6); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_REASSOCRESPONSE), ( tANI_U8* )&pFrm->FTInfo.IGTK.keyLength, 1); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_REASSOCRESPONSE), ( tANI_U8* )&pFrm->FTInfo.IGTK.key, 24); + } } for (i = 0; i < pFrm->num_RICDataDesc; ++i) { @@ -17875,9 +18095,9 @@ tANI_U32 dot11fUnpackTDLSDisReq(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 nBu {offsetof(tDot11fTDLSDisRsp, SuppRates), offsetof(tDot11fIESuppRates, present), 0, "SuppRates" , 0, 2, 14, SigIeSuppRates, {0, 0, 0, 0, 0}, 0, DOT11F_EID_SUPPRATES, 1, }, {offsetof(tDot11fTDLSDisRsp, ExtSuppRates), offsetof(tDot11fIEExtSuppRates, present), 0, "ExtSuppRates" , 0, 3, 14, SigIeExtSuppRates, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTSUPPRATES, 0, }, {offsetof(tDot11fTDLSDisRsp, SuppChannels), offsetof(tDot11fIESuppChannels, present), 0, "SuppChannels" , 0, 4, 98, SigIeSuppChannels, {0, 0, 0, 0, 0}, 0, DOT11F_EID_SUPPCHANNELS, 0, }, - {offsetof(tDot11fTDLSDisRsp, RSN), offsetof(tDot11fIERSN, present), 0, "RSN" , 0, 8, 112, SigIeRSN, {0, 0, 0, 0, 0}, 0, DOT11F_EID_RSN, 0, }, + {offsetof(tDot11fTDLSDisRsp, RSN), offsetof(tDot11fIERSN, present), 0, "RSN" , 0, 8, 116, SigIeRSN, {0, 0, 0, 0, 0}, 0, DOT11F_EID_RSN, 0, }, {offsetof(tDot11fTDLSDisRsp, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 10, 10, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, }, - {offsetof(tDot11fTDLSDisRsp, FTInfo), offsetof(tDot11fIEFTInfo, present), 0, "FTInfo" , 0, 84, 187, SigIeFTInfo, {0, 0, 0, 0, 0}, 0, DOT11F_EID_FTINFO, 0, }, + {offsetof(tDot11fTDLSDisRsp, FTInfo), offsetof(tDot11fIEFTInfo, present), 0, "FTInfo" , 0, 84, 222, SigIeFTInfo, {0, 0, 0, 0, 0}, 0, DOT11F_EID_FTINFO, 0, }, {offsetof(tDot11fTDLSDisRsp, FTTimeoutInterval), offsetof(tDot11fIEFTTimeoutInterval, present), 0, "FTTimeoutInterval" , 0, 7, 7, SigIeFTTimeoutInterval, {0, 0, 0, 0, 0}, 0, DOT11F_EID_FTTIMEOUTINTERVAL, 0, }, {offsetof(tDot11fTDLSDisRsp, RICData), offsetof(tDot11fIERICData, present), 0, "RICData" , 0, 6, 6, SigIeRICData, {0, 0, 0, 0, 0}, 0, DOT11F_EID_RICDATA, 0, }, {offsetof(tDot11fTDLSDisRsp, HTCaps), offsetof(tDot11fIEHTCaps, present), 0, "HTCaps" , 0, 28, 60, SigIeHTCaps, {0, 0, 0, 0, 0}, 0, DOT11F_EID_HTCAPS, 0, }, @@ -17967,6 +18187,7 @@ tANI_U32 dot11fUnpackTDLSDisRsp(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 nBu FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSDISRSP), ( tANI_U8* )&pFrm->RSN.RSN_Cap, 2); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSDISRSP), ( tANI_U8* )&pFrm->RSN.pmkid_count, 2); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSDISRSP), ( tANI_U8* ) pFrm->RSN.pmkid, 16 * pFrm->RSN.pmkid_count); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSDISRSP), ( tANI_U8* )&pFrm->RSN.gp_mgmt_cipher_suite, 4); } FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSDISRSP), FRFL("ExtCap:\n")); if (!pFrm->ExtCap.present) @@ -18072,6 +18293,18 @@ tANI_U32 dot11fUnpackTDLSDisRsp(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 nBu FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSDISRSP), FRFL("num_PMK_R0_ID: %d.\n"), pFrm->FTInfo.R0KH_ID.num_PMK_R0_ID); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSDISRSP), ( tANI_U8* ) pFrm->FTInfo.R0KH_ID.PMK_R0_ID, pFrm->FTInfo.R0KH_ID.num_PMK_R0_ID); } + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSDISRSP), FRFL("IGTK:\n")); + if (!pFrm->FTInfo.IGTK.present) + { + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSDISRSP), FRFL("Not present.\n")); + } + else + { + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSDISRSP), ( tANI_U8* )&pFrm->FTInfo.IGTK.keyID, 2); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSDISRSP), ( tANI_U8* )&pFrm->FTInfo.IGTK.IPN, 6); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSDISRSP), ( tANI_U8* )&pFrm->FTInfo.IGTK.keyLength, 1); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSDISRSP), ( tANI_U8* )&pFrm->FTInfo.IGTK.key, 24); + } } FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSDISRSP), FRFL("FTTimeoutInterval:\n")); if (!pFrm->FTTimeoutInterval.present) @@ -18330,14 +18563,15 @@ tANI_U32 dot11fUnpackTDLSPeerTrafficRsp(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI }; static const tIEDefn IES_TDLSSetupCnf[] = { - {offsetof(tDot11fTDLSSetupCnf, RSN), offsetof(tDot11fIERSN, present), 0, "RSN" , 0, 8, 112, SigIeRSN, {0, 0, 0, 0, 0}, 0, DOT11F_EID_RSN, 0, }, + {offsetof(tDot11fTDLSSetupCnf, RSN), offsetof(tDot11fIERSN, present), 0, "RSN" , 0, 8, 116, SigIeRSN, {0, 0, 0, 0, 0}, 0, DOT11F_EID_RSN, 0, }, {offsetof(tDot11fTDLSSetupCnf, EDCAParamSet), offsetof(tDot11fIEEDCAParamSet, present), 0, "EDCAParamSet" , 0, 20, 20, SigIeEDCAParamSet, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EDCAPARAMSET, 0, }, - {offsetof(tDot11fTDLSSetupCnf, FTInfo), offsetof(tDot11fIEFTInfo, present), 0, "FTInfo" , 0, 84, 187, SigIeFTInfo, {0, 0, 0, 0, 0}, 0, DOT11F_EID_FTINFO, 0, }, + {offsetof(tDot11fTDLSSetupCnf, FTInfo), offsetof(tDot11fIEFTInfo, present), 0, "FTInfo" , 0, 84, 222, SigIeFTInfo, {0, 0, 0, 0, 0}, 0, DOT11F_EID_FTINFO, 0, }, {offsetof(tDot11fTDLSSetupCnf, FTTimeoutInterval), offsetof(tDot11fIEFTTimeoutInterval, present), 0, "FTTimeoutInterval" , 0, 7, 7, SigIeFTTimeoutInterval, {0, 0, 0, 0, 0}, 0, DOT11F_EID_FTTIMEOUTINTERVAL, 0, }, {offsetof(tDot11fTDLSSetupCnf, HTInfo), offsetof(tDot11fIEHTInfo, present), 0, "HTInfo" , 0, 24, 56, SigIeHTInfo, {0, 0, 0, 0, 0}, 0, DOT11F_EID_HTINFO, 0, }, {offsetof(tDot11fTDLSSetupCnf, LinkIdentifier), offsetof(tDot11fIELinkIdentifier, present), 0, "LinkIdentifier" , 0, 20, 20, SigIeLinkIdentifier, {0, 0, 0, 0, 0}, 0, DOT11F_EID_LINKIDENTIFIER, 0, }, {offsetof(tDot11fTDLSSetupCnf, WMMInfoStation), offsetof(tDot11fIEWMMInfoStation, present), 0, "WMMInfoStation" , 0, 9, 9, SigIeWMMInfoStation, {0, 80, 242, 2, 0}, 5, DOT11F_EID_WMMINFOSTATION, 0, }, {offsetof(tDot11fTDLSSetupCnf, VHTOperation), offsetof(tDot11fIEVHTOperation, present), 0, "VHTOperation" , 0, 7, 7, SigIeVHTOperation, {0, 0, 0, 0, 0}, 0, DOT11F_EID_VHTOPERATION, 0, }, + {offsetof(tDot11fTDLSSetupCnf, OperatingMode), offsetof(tDot11fIEOperatingMode, present), 0, "OperatingMode" , 0, 3, 3, SigIeOperatingMode, {0, 0, 0, 0, 0}, 0, DOT11F_EID_OPERATINGMODE, 0, }, {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, }, }; tANI_U32 dot11fUnpackTDLSSetupCnf(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 nBuf, tDot11fTDLSSetupCnf *pFrm) @@ -18377,6 +18611,7 @@ tANI_U32 dot11fUnpackTDLSSetupCnf(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 n FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPCNF), ( tANI_U8* )&pFrm->RSN.RSN_Cap, 2); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPCNF), ( tANI_U8* )&pFrm->RSN.pmkid_count, 2); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPCNF), ( tANI_U8* ) pFrm->RSN.pmkid, 16 * pFrm->RSN.pmkid_count); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPCNF), ( tANI_U8* )&pFrm->RSN.gp_mgmt_cipher_suite, 4); } FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPCNF), FRFL("EDCAParamSet:\n")); if (!pFrm->EDCAParamSet.present) @@ -18461,6 +18696,18 @@ tANI_U32 dot11fUnpackTDLSSetupCnf(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 n FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPCNF), FRFL("num_PMK_R0_ID: %d.\n"), pFrm->FTInfo.R0KH_ID.num_PMK_R0_ID); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPCNF), ( tANI_U8* ) pFrm->FTInfo.R0KH_ID.PMK_R0_ID, pFrm->FTInfo.R0KH_ID.num_PMK_R0_ID); } + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPCNF), FRFL("IGTK:\n")); + if (!pFrm->FTInfo.IGTK.present) + { + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPCNF), FRFL("Not present.\n")); + } + else + { + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPCNF), ( tANI_U8* )&pFrm->FTInfo.IGTK.keyID, 2); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPCNF), ( tANI_U8* )&pFrm->FTInfo.IGTK.IPN, 6); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPCNF), ( tANI_U8* )&pFrm->FTInfo.IGTK.keyLength, 1); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPCNF), ( tANI_U8* )&pFrm->FTInfo.IGTK.key, 24); + } } FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPCNF), FRFL("FTTimeoutInterval:\n")); if (!pFrm->FTTimeoutInterval.present) @@ -18540,6 +18787,18 @@ tANI_U32 dot11fUnpackTDLSSetupCnf(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 n FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPCNF), ( tANI_U8* )&pFrm->VHTOperation.chanCenterFreqSeg2, 1); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPCNF), ( tANI_U8* )&pFrm->VHTOperation.basicMCSSet, 2); } + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPCNF), FRFL("OperatingMode:\n")); + if (!pFrm->OperatingMode.present) + { + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPCNF), FRFL("Not present.\n")); + } + else + { + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPCNF), FRFL("chanWidth (2): %d\n"), pFrm->OperatingMode.chanWidth); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPCNF), FRFL("reserved (2): %d\n"), pFrm->OperatingMode.reserved); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPCNF), FRFL("rxNSS (3): %d\n"), pFrm->OperatingMode.rxNSS); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPCNF), FRFL("rxNSSType (1): %d\n"), pFrm->OperatingMode.rxNSSType); + } } # endif // DOT11F_DUMP_FRAMES return status; @@ -18559,10 +18818,10 @@ tANI_U32 dot11fUnpackTDLSSetupCnf(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 n {offsetof(tDot11fTDLSSetupReq, Country), offsetof(tDot11fIECountry, present), 0, "Country" , 0, 5, 257, SigIeCountry, {0, 0, 0, 0, 0}, 0, DOT11F_EID_COUNTRY, 0, }, {offsetof(tDot11fTDLSSetupReq, ExtSuppRates), offsetof(tDot11fIEExtSuppRates, present), 0, "ExtSuppRates" , 0, 3, 14, SigIeExtSuppRates, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTSUPPRATES, 0, }, {offsetof(tDot11fTDLSSetupReq, SuppChannels), offsetof(tDot11fIESuppChannels, present), 0, "SuppChannels" , 0, 4, 98, SigIeSuppChannels, {0, 0, 0, 0, 0}, 0, DOT11F_EID_SUPPCHANNELS, 0, }, - {offsetof(tDot11fTDLSSetupReq, RSN), offsetof(tDot11fIERSN, present), 0, "RSN" , 0, 8, 112, SigIeRSN, {0, 0, 0, 0, 0}, 0, DOT11F_EID_RSN, 0, }, + {offsetof(tDot11fTDLSSetupReq, RSN), offsetof(tDot11fIERSN, present), 0, "RSN" , 0, 8, 116, SigIeRSN, {0, 0, 0, 0, 0}, 0, DOT11F_EID_RSN, 0, }, {offsetof(tDot11fTDLSSetupReq, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 10, 10, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, }, {offsetof(tDot11fTDLSSetupReq, QOSCapsStation), offsetof(tDot11fIEQOSCapsStation, present), 0, "QOSCapsStation" , 0, 3, 3, SigIeQOSCapsStation, {0, 0, 0, 0, 0}, 0, DOT11F_EID_QOSCAPSSTATION, 0, }, - {offsetof(tDot11fTDLSSetupReq, FTInfo), offsetof(tDot11fIEFTInfo, present), 0, "FTInfo" , 0, 84, 187, SigIeFTInfo, {0, 0, 0, 0, 0}, 0, DOT11F_EID_FTINFO, 0, }, + {offsetof(tDot11fTDLSSetupReq, FTInfo), offsetof(tDot11fIEFTInfo, present), 0, "FTInfo" , 0, 84, 222, SigIeFTInfo, {0, 0, 0, 0, 0}, 0, DOT11F_EID_FTINFO, 0, }, {offsetof(tDot11fTDLSSetupReq, FTTimeoutInterval), offsetof(tDot11fIEFTTimeoutInterval, present), 0, "FTTimeoutInterval" , 0, 7, 7, SigIeFTTimeoutInterval, {0, 0, 0, 0, 0}, 0, DOT11F_EID_FTTIMEOUTINTERVAL, 0, }, {offsetof(tDot11fTDLSSetupReq, RICData), offsetof(tDot11fIERICData, present), 0, "RICData" , 0, 6, 6, SigIeRICData, {0, 0, 0, 0, 0}, 0, DOT11F_EID_RICDATA, 0, }, {offsetof(tDot11fTDLSSetupReq, HTCaps), offsetof(tDot11fIEHTCaps, present), 0, "HTCaps" , 0, 28, 60, SigIeHTCaps, {0, 0, 0, 0, 0}, 0, DOT11F_EID_HTCAPS, 0, }, @@ -18665,6 +18924,7 @@ tANI_U32 dot11fUnpackTDLSSetupReq(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 n FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPREQ), ( tANI_U8* )&pFrm->RSN.RSN_Cap, 2); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPREQ), ( tANI_U8* )&pFrm->RSN.pmkid_count, 2); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPREQ), ( tANI_U8* ) pFrm->RSN.pmkid, 16 * pFrm->RSN.pmkid_count); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPREQ), ( tANI_U8* )&pFrm->RSN.gp_mgmt_cipher_suite, 4); } FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPREQ), FRFL("ExtCap:\n")); if (!pFrm->ExtCap.present) @@ -18732,13 +18992,13 @@ tANI_U32 dot11fUnpackTDLSSetupReq(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 n } else { - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPREQ), FRFL("more_data_ack (1): %d\n"), pFrm->QOSCapsStation.more_data_ack); - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPREQ), FRFL("max_sp_length (2): %d\n"), pFrm->QOSCapsStation.max_sp_length); - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPREQ), FRFL("qack (1): %d\n"), pFrm->QOSCapsStation.qack); - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPREQ), FRFL("acbe_uapsd (1): %d\n"), pFrm->QOSCapsStation.acbe_uapsd); - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPREQ), FRFL("acbk_uapsd (1): %d\n"), pFrm->QOSCapsStation.acbk_uapsd); - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPREQ), FRFL("acvi_uapsd (1): %d\n"), pFrm->QOSCapsStation.acvi_uapsd); FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPREQ), FRFL("acvo_uapsd (1): %d\n"), pFrm->QOSCapsStation.acvo_uapsd); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPREQ), FRFL("acvi_uapsd (1): %d\n"), pFrm->QOSCapsStation.acvi_uapsd); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPREQ), FRFL("acbk_uapsd (1): %d\n"), pFrm->QOSCapsStation.acbk_uapsd); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPREQ), FRFL("acbe_uapsd (1): %d\n"), pFrm->QOSCapsStation.acbe_uapsd); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPREQ), FRFL("qack (1): %d\n"), pFrm->QOSCapsStation.qack); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPREQ), FRFL("max_sp_length (2): %d\n"), pFrm->QOSCapsStation.max_sp_length); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPREQ), FRFL("more_data_ack (1): %d\n"), pFrm->QOSCapsStation.more_data_ack); } FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPREQ), FRFL("FTInfo:\n")); if (!pFrm->FTInfo.present) @@ -18785,6 +19045,18 @@ tANI_U32 dot11fUnpackTDLSSetupReq(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 n FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPREQ), FRFL("num_PMK_R0_ID: %d.\n"), pFrm->FTInfo.R0KH_ID.num_PMK_R0_ID); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPREQ), ( tANI_U8* ) pFrm->FTInfo.R0KH_ID.PMK_R0_ID, pFrm->FTInfo.R0KH_ID.num_PMK_R0_ID); } + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPREQ), FRFL("IGTK:\n")); + if (!pFrm->FTInfo.IGTK.present) + { + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPREQ), FRFL("Not present.\n")); + } + else + { + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPREQ), ( tANI_U8* )&pFrm->FTInfo.IGTK.keyID, 2); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPREQ), ( tANI_U8* )&pFrm->FTInfo.IGTK.IPN, 6); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPREQ), ( tANI_U8* )&pFrm->FTInfo.IGTK.keyLength, 1); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPREQ), ( tANI_U8* )&pFrm->FTInfo.IGTK.key, 24); + } } FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPREQ), FRFL("FTTimeoutInterval:\n")); if (!pFrm->FTTimeoutInterval.present) @@ -18954,10 +19226,10 @@ tANI_U32 dot11fUnpackTDLSSetupReq(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 n {offsetof(tDot11fTDLSSetupRsp, Country), offsetof(tDot11fIECountry, present), 0, "Country" , 0, 5, 257, SigIeCountry, {0, 0, 0, 0, 0}, 0, DOT11F_EID_COUNTRY, 0, }, {offsetof(tDot11fTDLSSetupRsp, ExtSuppRates), offsetof(tDot11fIEExtSuppRates, present), 0, "ExtSuppRates" , 0, 3, 14, SigIeExtSuppRates, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTSUPPRATES, 0, }, {offsetof(tDot11fTDLSSetupRsp, SuppChannels), offsetof(tDot11fIESuppChannels, present), 0, "SuppChannels" , 0, 4, 98, SigIeSuppChannels, {0, 0, 0, 0, 0}, 0, DOT11F_EID_SUPPCHANNELS, 0, }, - {offsetof(tDot11fTDLSSetupRsp, RSN), offsetof(tDot11fIERSN, present), 0, "RSN" , 0, 8, 112, SigIeRSN, {0, 0, 0, 0, 0}, 0, DOT11F_EID_RSN, 0, }, + {offsetof(tDot11fTDLSSetupRsp, RSN), offsetof(tDot11fIERSN, present), 0, "RSN" , 0, 8, 116, SigIeRSN, {0, 0, 0, 0, 0}, 0, DOT11F_EID_RSN, 0, }, {offsetof(tDot11fTDLSSetupRsp, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 10, 10, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, }, {offsetof(tDot11fTDLSSetupRsp, QOSCapsStation), offsetof(tDot11fIEQOSCapsStation, present), 0, "QOSCapsStation" , 0, 3, 3, SigIeQOSCapsStation, {0, 0, 0, 0, 0}, 0, DOT11F_EID_QOSCAPSSTATION, 0, }, - {offsetof(tDot11fTDLSSetupRsp, FTInfo), offsetof(tDot11fIEFTInfo, present), 0, "FTInfo" , 0, 84, 187, SigIeFTInfo, {0, 0, 0, 0, 0}, 0, DOT11F_EID_FTINFO, 0, }, + {offsetof(tDot11fTDLSSetupRsp, FTInfo), offsetof(tDot11fIEFTInfo, present), 0, "FTInfo" , 0, 84, 222, SigIeFTInfo, {0, 0, 0, 0, 0}, 0, DOT11F_EID_FTINFO, 0, }, {offsetof(tDot11fTDLSSetupRsp, FTTimeoutInterval), offsetof(tDot11fIEFTTimeoutInterval, present), 0, "FTTimeoutInterval" , 0, 7, 7, SigIeFTTimeoutInterval, {0, 0, 0, 0, 0}, 0, DOT11F_EID_FTTIMEOUTINTERVAL, 0, }, {offsetof(tDot11fTDLSSetupRsp, RICData), offsetof(tDot11fIERICData, present), 0, "RICData" , 0, 6, 6, SigIeRICData, {0, 0, 0, 0, 0}, 0, DOT11F_EID_RICDATA, 0, }, {offsetof(tDot11fTDLSSetupRsp, HTCaps), offsetof(tDot11fIEHTCaps, present), 0, "HTCaps" , 0, 28, 60, SigIeHTCaps, {0, 0, 0, 0, 0}, 0, DOT11F_EID_HTCAPS, 0, }, @@ -18965,6 +19237,7 @@ tANI_U32 dot11fUnpackTDLSSetupReq(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 n {offsetof(tDot11fTDLSSetupRsp, WMMInfoStation), offsetof(tDot11fIEWMMInfoStation, present), 0, "WMMInfoStation" , 0, 9, 9, SigIeWMMInfoStation, {0, 80, 242, 2, 0}, 5, DOT11F_EID_WMMINFOSTATION, 0, }, {offsetof(tDot11fTDLSSetupRsp, AID), offsetof(tDot11fIEAID, present), 0, "AID" , 0, 4, 4, SigIeAID, {0, 0, 0, 0, 0}, 0, DOT11F_EID_AID, 0, }, {offsetof(tDot11fTDLSSetupRsp, VHTCaps), offsetof(tDot11fIEVHTCaps, present), 0, "VHTCaps" , 0, 14, 14, SigIeVHTCaps, {0, 0, 0, 0, 0}, 0, DOT11F_EID_VHTCAPS, 0, }, + {offsetof(tDot11fTDLSSetupRsp, OperatingMode), offsetof(tDot11fIEOperatingMode, present), 0, "OperatingMode" , 0, 3, 3, SigIeOperatingMode, {0, 0, 0, 0, 0}, 0, DOT11F_EID_OPERATINGMODE, 0, }, {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, }, }; tANI_U32 dot11fUnpackTDLSSetupRsp(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 nBuf, tDot11fTDLSSetupRsp *pFrm) @@ -19062,6 +19335,7 @@ tANI_U32 dot11fUnpackTDLSSetupRsp(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 n FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), ( tANI_U8* )&pFrm->RSN.RSN_Cap, 2); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), ( tANI_U8* )&pFrm->RSN.pmkid_count, 2); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), ( tANI_U8* ) pFrm->RSN.pmkid, 16 * pFrm->RSN.pmkid_count); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), ( tANI_U8* )&pFrm->RSN.gp_mgmt_cipher_suite, 4); } FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), FRFL("ExtCap:\n")); if (!pFrm->ExtCap.present) @@ -19129,13 +19403,13 @@ tANI_U32 dot11fUnpackTDLSSetupRsp(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 n } else { - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), FRFL("more_data_ack (1): %d\n"), pFrm->QOSCapsStation.more_data_ack); - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), FRFL("max_sp_length (2): %d\n"), pFrm->QOSCapsStation.max_sp_length); - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), FRFL("qack (1): %d\n"), pFrm->QOSCapsStation.qack); - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), FRFL("acbe_uapsd (1): %d\n"), pFrm->QOSCapsStation.acbe_uapsd); - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), FRFL("acbk_uapsd (1): %d\n"), pFrm->QOSCapsStation.acbk_uapsd); - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), FRFL("acvi_uapsd (1): %d\n"), pFrm->QOSCapsStation.acvi_uapsd); FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), FRFL("acvo_uapsd (1): %d\n"), pFrm->QOSCapsStation.acvo_uapsd); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), FRFL("acvi_uapsd (1): %d\n"), pFrm->QOSCapsStation.acvi_uapsd); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), FRFL("acbk_uapsd (1): %d\n"), pFrm->QOSCapsStation.acbk_uapsd); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), FRFL("acbe_uapsd (1): %d\n"), pFrm->QOSCapsStation.acbe_uapsd); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), FRFL("qack (1): %d\n"), pFrm->QOSCapsStation.qack); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), FRFL("max_sp_length (2): %d\n"), pFrm->QOSCapsStation.max_sp_length); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), FRFL("more_data_ack (1): %d\n"), pFrm->QOSCapsStation.more_data_ack); } FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), FRFL("FTInfo:\n")); if (!pFrm->FTInfo.present) @@ -19182,6 +19456,18 @@ tANI_U32 dot11fUnpackTDLSSetupRsp(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 n FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), FRFL("num_PMK_R0_ID: %d.\n"), pFrm->FTInfo.R0KH_ID.num_PMK_R0_ID); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), ( tANI_U8* ) pFrm->FTInfo.R0KH_ID.PMK_R0_ID, pFrm->FTInfo.R0KH_ID.num_PMK_R0_ID); } + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), FRFL("IGTK:\n")); + if (!pFrm->FTInfo.IGTK.present) + { + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), FRFL("Not present.\n")); + } + else + { + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), ( tANI_U8* )&pFrm->FTInfo.IGTK.keyID, 2); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), ( tANI_U8* )&pFrm->FTInfo.IGTK.IPN, 6); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), ( tANI_U8* )&pFrm->FTInfo.IGTK.keyLength, 1); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), ( tANI_U8* )&pFrm->FTInfo.IGTK.key, 24); + } } FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), FRFL("FTTimeoutInterval:\n")); if (!pFrm->FTTimeoutInterval.present) @@ -19331,6 +19617,18 @@ tANI_U32 dot11fUnpackTDLSSetupRsp(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 n FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), FRFL("txSupDataRate (13): %d\n"), pFrm->VHTCaps.txSupDataRate); FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), FRFL("reserved3 (3): %d\n"), pFrm->VHTCaps.reserved3); } + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), FRFL("OperatingMode:\n")); + if (!pFrm->OperatingMode.present) + { + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), FRFL("Not present.\n")); + } + else + { + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), FRFL("chanWidth (2): %d\n"), pFrm->OperatingMode.chanWidth); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), FRFL("reserved (2): %d\n"), pFrm->OperatingMode.reserved); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), FRFL("rxNSS (3): %d\n"), pFrm->OperatingMode.rxNSS); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), FRFL("rxNSSType (1): %d\n"), pFrm->OperatingMode.rxNSSType); + } } # endif // DOT11F_DUMP_FRAMES return status; @@ -19345,7 +19643,7 @@ tANI_U32 dot11fUnpackTDLSSetupRsp(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 n }; static const tIEDefn IES_TDLSTeardown[] = { - {offsetof(tDot11fTDLSTeardown, FTInfo), offsetof(tDot11fIEFTInfo, present), 0, "FTInfo" , 0, 84, 187, SigIeFTInfo, {0, 0, 0, 0, 0}, 0, DOT11F_EID_FTINFO, 0, }, + {offsetof(tDot11fTDLSTeardown, FTInfo), offsetof(tDot11fIEFTInfo, present), 0, "FTInfo" , 0, 84, 222, SigIeFTInfo, {0, 0, 0, 0, 0}, 0, DOT11F_EID_FTINFO, 0, }, {offsetof(tDot11fTDLSTeardown, LinkIdentifier), offsetof(tDot11fIELinkIdentifier, present), 0, "LinkIdentifier" , 0, 20, 20, SigIeLinkIdentifier, {0, 0, 0, 0, 0}, 0, DOT11F_EID_LINKIDENTIFIER, 1, }, {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, }, }; @@ -19413,6 +19711,18 @@ tANI_U32 dot11fUnpackTDLSTeardown(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 n FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSTEARDOWN), FRFL("num_PMK_R0_ID: %d.\n"), pFrm->FTInfo.R0KH_ID.num_PMK_R0_ID); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSTEARDOWN), ( tANI_U8* ) pFrm->FTInfo.R0KH_ID.PMK_R0_ID, pFrm->FTInfo.R0KH_ID.num_PMK_R0_ID); } + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSTEARDOWN), FRFL("IGTK:\n")); + if (!pFrm->FTInfo.IGTK.present) + { + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSTEARDOWN), FRFL("Not present.\n")); + } + else + { + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSTEARDOWN), ( tANI_U8* )&pFrm->FTInfo.IGTK.keyID, 2); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSTEARDOWN), ( tANI_U8* )&pFrm->FTInfo.IGTK.IPN, 6); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSTEARDOWN), ( tANI_U8* )&pFrm->FTInfo.IGTK.keyLength, 1); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSTEARDOWN), ( tANI_U8* )&pFrm->FTInfo.IGTK.key, 24); + } } FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSTEARDOWN), FRFL("LinkIdentifier:\n")); if (!pFrm->LinkIdentifier.present) @@ -19832,7 +20142,7 @@ static tANI_U32 UnpackCore(tpAniSirGlobal pCtx, pIe = &IEs[0]; while (0xff != pIe->eid) { - pfFound = (tFRAMES_BOOL*)(pFrm + pIe->offset + + pfFound = (tFRAMES_BOOL*)(pFrm + pIe->offset + pIe->presenceOffset); *pfFound = 0U; if (pIe->countOffset) @@ -19897,12 +20207,18 @@ static tANI_U32 UnpackCore(tpAniSirGlobal pCtx, case SigFfDialogToken: dot11fUnpackFfDialogToken(pCtx, pBufRemaining, ( tDot11fFfDialogToken* )(pFrm + pFf->offset )); break; + case SigFfLeader: + dot11fUnpackFfLeader(pCtx, pBufRemaining, ( tDot11fFfLeader* )(pFrm + pFf->offset )); + break; case SigFfLinkMargin: dot11fUnpackFfLinkMargin(pCtx, pBufRemaining, ( tDot11fFfLinkMargin* )(pFrm + pFf->offset )); break; case SigFfListenInterval: dot11fUnpackFfCommonFunc(pCtx, pBufRemaining, (tANI_U16*)&((( tDot11fFfListenInterval* )(pFrm + pFf->offset ))->interval)); break; + case SigFfMagicCode: + dot11fUnpackFfMagicCode(pCtx, pBufRemaining, ( tDot11fFfMagicCode* )(pFrm + pFf->offset )); + break; case SigFfMaxTxPower: dot11fUnpackFfMaxTxPower(pCtx, pBufRemaining, ( tDot11fFfMaxTxPower* )(pFrm + pFf->offset )); break; @@ -19921,6 +20237,15 @@ static tANI_U32 UnpackCore(tpAniSirGlobal pCtx, case SigFfRCPI: dot11fUnpackFfRCPI(pCtx, pBufRemaining, ( tDot11fFfRCPI* )(pFrm + pFf->offset )); break; + case SigFfRMCDialogToken: + dot11fUnpackFfRMCDialogToken(pCtx, pBufRemaining, ( tDot11fFfRMCDialogToken* )(pFrm + pFf->offset )); + break; + case SigFfRMCOUI: + dot11fUnpackFfRMCOUI(pCtx, pBufRemaining, ( tDot11fFfRMCOUI* )(pFrm + pFf->offset )); + break; + case SigFfRMCVersion: + dot11fUnpackFfRMCVersion(pCtx, pBufRemaining, ( tDot11fFfRMCVersion* )(pFrm + pFf->offset )); + break; case SigFfRSNI: dot11fUnpackFfRSNI(pCtx, pBufRemaining, ( tDot11fFfRSNI* )(pFrm + pFf->offset )); break; @@ -20070,6 +20395,9 @@ static tANI_U32 UnpackCore(tpAniSirGlobal pCtx, (tANI_U8*) &((( tDot11fIEHCF* )(pFrm + pIe->offset + sizeof( tDot11fIEHCF)*countOffset ) )->present), (tANI_U8*) &((( tDot11fIEHCF* )(pFrm + pIe->offset + sizeof(tDot11fIEHCF)*countOffset ) )->enabled) ); break; + case SigIeIGTK: + status |= dot11fUnpackIeIGTK(pCtx, pBufRemaining, len, ( tDot11fIEIGTK* )(pFrm + pIe->offset + sizeof(tDot11fIEIGTK)*countOffset) ); + break; case SigIeLLAttr: status |= dot11fUnpackIeLLAttr(pCtx, pBufRemaining, len, ( tDot11fIELLAttr* )(pFrm + pIe->offset + sizeof(tDot11fIELLAttr)*countOffset) ); break; @@ -20290,6 +20618,9 @@ static tANI_U32 UnpackCore(tpAniSirGlobal pCtx, case SigIeOperatingMode: status |= dot11fUnpackIeOperatingMode(pCtx, pBufRemaining, len, ( tDot11fIEOperatingMode* )(pFrm + pIe->offset + sizeof(tDot11fIEOperatingMode)*countOffset) ); break; + case SigIeOxygenNetwork: + status |= dot11fUnpackIeOxygenNetwork(pCtx, pBufRemaining, len, ( tDot11fIEOxygenNetwork* )(pFrm + pIe->offset + sizeof(tDot11fIEOxygenNetwork)*countOffset) ); + break; case SigIeP2PAssocReq: status |= dot11fUnpackIeP2PAssocReq(pCtx, pBufRemaining, len, ( tDot11fIEP2PAssocReq* )(pFrm + pIe->offset + sizeof(tDot11fIEP2PAssocReq)*countOffset) ); break; @@ -20383,12 +20714,12 @@ static tANI_U32 UnpackCore(tpAniSirGlobal pCtx, case SigIeRICDataDesc: //reset the pointers back since this is a container IE and it doesnt have its own EID and Len. pBufRemaining -= 2; nBufRemaining += 2; - if ( pIe && pIe->noui ) - { + if ( pIe && pIe->noui ) + { pBufRemaining -= pIe->noui; nBufRemaining += pIe->noui; len += pIe->noui; - } + } status |= GetContainerIesLen(pCtx, pBufRemaining, nBufRemaining, &len, IES_RICDataDesc); if (status != DOT11F_PARSE_SUCCESS && status != DOT11F_UNKNOWN_IES ) break; status |= dot11fUnpackIeRICDataDesc(pCtx, pBufRemaining, len, ( tDot11fIERICDataDesc* )(pFrm + pIe->offset + sizeof(tDot11fIERICDataDesc)*countOffset) ); @@ -20530,7 +20861,7 @@ MandatoryCheck: { if (pIe->fMandatory) { - pfFound = (tFRAMES_BOOL*)(pFrm + pIe->offset + + pfFound = (tFRAMES_BOOL*)(pFrm + pIe->offset + pIe->presenceOffset); if (!*pfFound) { @@ -20583,8 +20914,8 @@ static tANI_U32 UnpackTlvCore( tpAniSirGlobal pCtx, // Look for a matching TLV definition, pTlv = FindTLVDefn( pCtx, pBufRemaining, nBufRemaining, TLVs ); // consume the type, - if ( pTlv ) - { + if ( pTlv ) + { if ( pTlv->sType == 2) { framesntohs(pCtx, &id, pBufRemaining, pTlv->fMsb); @@ -20600,12 +20931,12 @@ static tANI_U32 UnpackTlvCore( tpAniSirGlobal pCtx, if ( pTlv->sLen == 2) { framesntohs(pCtx, &len, pBufRemaining, pTlv->fMsb); - if ( 2 > nBufRemaining ) + if ( 2 > nBufRemaining ) { FRAMES_LOG0( pCtx, FRLOGE, FRFL("This frame reports " "fewer two byte(s) remaining.\n") ); - status |= DOT11F_INCOMPLETE_TLV; - FRAMES_DBG_BREAK(); + status |= DOT11F_INCOMPLETE_TLV; + FRAMES_DBG_BREAK(); goto MandatoryCheck; } pBufRemaining += 2; @@ -20617,8 +20948,8 @@ static tANI_U32 UnpackTlvCore( tpAniSirGlobal pCtx, nBufRemaining -= 1; } } - else - { + else + { pBufRemaining += TLVs[0].sType; nBufRemaining -= TLVs[0].sType; framesntohs(pCtx, &len, pBufRemaining, (TLVs[0].sType == 2)); @@ -20632,7 +20963,7 @@ static tANI_U32 UnpackTlvCore( tpAniSirGlobal pCtx, } pBufRemaining += 2; nBufRemaining -= 2; - } + } if ( pTlv && pTlv->pec ) { @@ -20674,6 +21005,17 @@ static tANI_U32 UnpackTlvCore( tpAniSirGlobal pCtx, // Now, *if* we found a hit... if ( pTlv ) { + if ( len < pTlv->minSize - npec ) + { + FRAMES_LOG3( pCtx, FRLOGW, FRFL("The IE %s must be " + "at least %d bytes in size, but the size is only " + "%d bytes.\n"), + pTlv->name, pTlv->minSize, len ); + FRAMES_DUMP( pCtx, FRLOG1, pBuf, nBuf ); + status |= DOT11F_INCOMPLETE_TLV; + FRAMES_DBG_BREAK( ); + goto MandatoryCheck; + } if ( nBufRemaining < pTlv->minSize - npec - (pTlv->sType + pTlv->sLen) ) { FRAMES_LOG3( pCtx, FRLOGW, FRFL("The IE %s must be " @@ -21436,6 +21778,11 @@ tANI_U32 dot11fGetPackedIERSN(tpAniSirGlobal pCtx, tDot11fIERSN *pIe, tANI_U32 * } else break; *pnNeeded += ( pIe->pmkid_count * 16 ); + if ( pIe->gp_mgmt_cipher_suite ) + { + *pnNeeded += 4; + } + else break; break; } return status; @@ -21899,6 +22246,14 @@ tANI_U32 dot11fGetPackedProvisionDiscoveryResSize(tpAniSirGlobal pCtx, tDot11fPr return status; } /* End dot11fGetPackedProvisionDiscoveryResSize. */ +tANI_U32 dot11fGetPackedRMCSize(tpAniSirGlobal pCtx, tDot11fRMC *pFrm, tANI_U32 *pnNeeded) +{ + tANI_U32 status = 0; + *pnNeeded = 22; + status = GetPackedSizeCore(pCtx, ( tANI_U8* )pFrm, pnNeeded, IES_RMC); + return status; +} /* End dot11fGetPackedRMCSize. */ + tANI_U32 dot11fGetPackedRadioMeasurementReportSize(tpAniSirGlobal pCtx, tDot11fRadioMeasurementReport *pFrm, tANI_U32 *pnNeeded) { tANI_U32 status = 0; @@ -22072,7 +22427,7 @@ static tANI_U32 GetPackedSizeCore(tpAniSirGlobal pCtx, tANI_U32 byteCount = 0; tANI_U8 pIePresent = 0; tANI_U32 offset = 0; - + status = DOT11F_PARSE_SUCCESS; (void)pCtx; /* Shutup the compiler if we have no FFs nor IEs... */ @@ -22116,6 +22471,11 @@ static tANI_U32 GetPackedSizeCore(tpAniSirGlobal pCtx, byteCount = 1; pIePresent = ( (tDot11fIEHCF* )(pFrm + pIe->offset + offset * i ))->present; break; + case SigIeIGTK: + offset = sizeof(tDot11fIEIGTK); + byteCount = 33; + pIePresent = ( (tDot11fIEIGTK* )(pFrm + pIe->offset + offset * i ))->present; + break; case SigIeLLAttr: offset = sizeof(tDot11fIELLAttr); byteCount = 4; @@ -22458,6 +22818,11 @@ static tANI_U32 GetPackedSizeCore(tpAniSirGlobal pCtx, byteCount = 1; pIePresent = ( (tDot11fIEOperatingMode* )(pFrm + pIe->offset + offset * i ))->present; break; + case SigIeOxygenNetwork: + offset = sizeof(tDot11fIEOxygenNetwork); + byteCount = 2; + pIePresent = ( (tDot11fIEOxygenNetwork* )(pFrm + pIe->offset + offset * i ))->present; + break; case SigIeP2PAssocReq: offset = sizeof(tDot11fIEP2PAssocReq); status |= dot11fGetPackedIEP2PAssocReq(pCtx, ( tDot11fIEP2PAssocReq* )(pFrm + pIe->offset + offset * i ), pnNeeded); @@ -23106,6 +23471,14 @@ void dot11fPackFfDialogToken(tpAniSirGlobal pCtx, (void)pCtx; } /* End dot11fPackFfDialogToken. */ +void dot11fPackFfLeader(tpAniSirGlobal pCtx, + tDot11fFfLeader *pSrc, + tANI_U8 *pBuf) +{ + DOT11F_MEMCPY(pCtx, pBuf, pSrc->mac, 6); + (void)pCtx; +} /* End dot11fPackFfLeader. */ + void dot11fPackFfLinkMargin(tpAniSirGlobal pCtx, tDot11fFfLinkMargin *pSrc, tANI_U8 *pBuf) @@ -23122,6 +23495,14 @@ void dot11fPackFfListenInterval(tpAniSirGlobal pCtx, (void)pCtx; } /* End dot11fPackFfListenInterval. */ +void dot11fPackFfMagicCode(tpAniSirGlobal pCtx, + tDot11fFfMagicCode *pSrc, + tANI_U8 *pBuf) +{ + DOT11F_MEMCPY(pCtx, pBuf, pSrc->magic, 6); + (void)pCtx; +} /* End dot11fPackFfMagicCode. */ + void dot11fPackFfMaxTxPower(tpAniSirGlobal pCtx, tDot11fFfMaxTxPower *pSrc, tANI_U8 *pBuf) @@ -23176,6 +23557,30 @@ void dot11fPackFfRCPI(tpAniSirGlobal pCtx, (void)pCtx; } /* End dot11fPackFfRCPI. */ +void dot11fPackFfRMCDialogToken(tpAniSirGlobal pCtx, + tDot11fFfRMCDialogToken *pSrc, + tANI_U8 *pBuf) +{ + frameshtonl(pCtx, pBuf, pSrc->token, 0); + (void)pCtx; +} /* End dot11fPackFfRMCDialogToken. */ + +void dot11fPackFfRMCOUI(tpAniSirGlobal pCtx, + tDot11fFfRMCOUI *pSrc, + tANI_U8 *pBuf) +{ + DOT11F_MEMCPY(pCtx, pBuf, pSrc->oui, 3); + (void)pCtx; +} /* End dot11fPackFfRMCOUI. */ + +void dot11fPackFfRMCVersion(tpAniSirGlobal pCtx, + tDot11fFfRMCVersion *pSrc, + tANI_U8 *pBuf) +{ + *pBuf = pSrc->version; + (void)pCtx; +} /* End dot11fPackFfRMCVersion. */ + void dot11fPackFfRSNI(tpAniSirGlobal pCtx, tDot11fFfRSNI *pSrc, tANI_U8 *pBuf) @@ -24738,7 +25143,7 @@ tANI_U32 dot11fPackIeAPName(tpAniSirGlobal pCtx, ++pBuf; ++(*pnConsumed); DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->name ), pSrc->num_name); *pnConsumed += pSrc->num_name; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -24771,7 +25176,7 @@ tANI_U32 dot11fPackIeBPIndicator(tpAniSirGlobal pCtx, pBuf += 1; *pBuf = pSrc->type; *pnConsumed += 1; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -24801,7 +25206,7 @@ tANI_U32 dot11fPackIeCondensedCountryStr(tpAniSirGlobal pCtx, ++pBuf; ++(*pnConsumed); DOT11F_MEMCPY(pCtx, pBuf, pSrc->countryStr, 2); *pnConsumed += 2; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -24845,7 +25250,7 @@ tANI_U32 dot11fPackIeGTK(tpAniSirGlobal pCtx, pBuf += 8; DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->key ), pSrc->num_key); *pnConsumed += pSrc->num_key; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -24875,7 +25280,7 @@ tANI_U32 dot11fPackIeHCF(tpAniSirGlobal pCtx, ++pBuf; ++(*pnConsumed); *pBuf = pSrc->enabled; *pnConsumed += 1; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -24886,6 +25291,45 @@ tANI_U32 dot11fPackIeHCF(tpAniSirGlobal pCtx, return DOT11F_PARSE_SUCCESS; } /* End dot11fPackIeHCF. */ +tANI_U32 dot11fPackIeIGTK(tpAniSirGlobal pCtx, + tDot11fIEIGTK *pSrc, + tANI_U8 *pBuf, + tANI_U32 nBuf, + tANI_U32 *pnConsumed) +{ + tANI_U8* pIeLen = 0; + tANI_U32 nConsumedOnEntry = *pnConsumed; + tANI_U32 nNeeded = 0U; + nNeeded += 33; + while ( pSrc->present ) + { + if ( nNeeded > nBuf ) return DOT11F_BUFFER_OVERFLOW; + *pBuf = 4; + ++pBuf; ++(*pnConsumed); + pIeLen = pBuf; + ++pBuf; ++(*pnConsumed); + DOT11F_MEMCPY(pCtx, pBuf, pSrc->keyID, 2); + *pnConsumed += 2; + pBuf += 2; + DOT11F_MEMCPY(pCtx, pBuf, pSrc->IPN, 6); + *pnConsumed += 6; + pBuf += 6; + *pBuf = pSrc->keyLength; + *pnConsumed += 1; + pBuf += 1; + DOT11F_MEMCPY(pCtx, pBuf, pSrc->key, 24); + *pnConsumed += 24; + // fieldsEndFlag = 1 + break; + } + (void)pCtx; + if (pIeLen) + { + *pIeLen = *pnConsumed - nConsumedOnEntry - 2; + } + return DOT11F_PARSE_SUCCESS; +} /* End dot11fPackIeIGTK. */ + tANI_U32 dot11fPackIeLLAttr(tpAniSirGlobal pCtx, tDot11fIELLAttr *pSrc, tANI_U8 *pBuf, @@ -24905,7 +25349,7 @@ tANI_U32 dot11fPackIeLLAttr(tpAniSirGlobal pCtx, ++pBuf; ++(*pnConsumed); frameshtonl(pCtx, pBuf, pSrc->defer_threshold, 1); *pnConsumed += 4; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -24938,7 +25382,7 @@ tANI_U32 dot11fPackIeLoadBalance(tpAniSirGlobal pCtx, pBuf += 6; *pBuf = pSrc->channel; *pnConsumed += 1; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -24971,7 +25415,7 @@ tANI_U32 dot11fPackIeLoadInfo(tpAniSirGlobal pCtx, pBuf += 2; frameshtons(pCtx, pBuf, pSrc->channel_util, 1); *pnConsumed += 2; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -25001,7 +25445,7 @@ tANI_U32 dot11fPackIePropAssocType(tpAniSirGlobal pCtx, ++pBuf; ++(*pnConsumed); *pBuf = pSrc->type; *pnConsumed += 1; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -25031,7 +25475,7 @@ tANI_U32 dot11fPackIePropCapability(tpAniSirGlobal pCtx, ++pBuf; ++(*pnConsumed); frameshtons(pCtx, pBuf, pSrc->capability, 0); *pnConsumed += 2; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -25070,7 +25514,7 @@ tANI_U32 dot11fPackIePropChannSwitchAnn(tpAniSirGlobal pCtx, pBuf += 1; *pBuf = pSrc->channel_switch_count; *pnConsumed += 1; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -25187,7 +25631,7 @@ tANI_U32 dot11fPackIePropEDCAParams(tpAniSirGlobal pCtx, nBuf -= 1 ; frameshtons(pCtx, pBuf, pSrc->acvo_txoplimit, 0); *pnConsumed += 2; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -25226,7 +25670,7 @@ tANI_U32 dot11fPackIePropQuietBSS(tpAniSirGlobal pCtx, pBuf += 2; frameshtons(pCtx, pBuf, pSrc->quiet_offset, 0); *pnConsumed += 2; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -25256,7 +25700,7 @@ tANI_U32 dot11fPackIePropSuppRates(tpAniSirGlobal pCtx, ++pBuf; ++(*pnConsumed); DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->rates ), pSrc->num_rates); *pnConsumed += pSrc->num_rates; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -25286,7 +25730,7 @@ tANI_U32 dot11fPackIeR0KH_ID(tpAniSirGlobal pCtx, ++pBuf; ++(*pnConsumed); DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->PMK_R0_ID ), pSrc->num_PMK_R0_ID); *pnConsumed += pSrc->num_PMK_R0_ID; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -25316,7 +25760,7 @@ tANI_U32 dot11fPackIeR1KH_ID(tpAniSirGlobal pCtx, ++pBuf; ++(*pnConsumed); DOT11F_MEMCPY(pCtx, pBuf, pSrc->PMK_R1_ID, 6); *pnConsumed += 6; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -25349,7 +25793,7 @@ tANI_U32 dot11fPackIeTSFInfo(tpAniSirGlobal pCtx, pBuf += 2; frameshtons(pCtx, pBuf, pSrc->BeaconIntvl, 0); *pnConsumed += 2; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -25389,7 +25833,7 @@ tANI_U32 dot11fPackIeTaurus(tpAniSirGlobal pCtx, tmp98__ |= ( pSrc->rsvd << 12 ); frameshtons(pCtx, pBuf, tmp98__, 0); *pnConsumed += 2; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 nBuf -= 2 ; break; } @@ -25429,7 +25873,7 @@ tANI_U32 dot11fPackIeTitan(tpAniSirGlobal pCtx, pBuf += 1; *pBuf = pSrc->rev_fcs_state; *pnConsumed += 1; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -25459,7 +25903,7 @@ tANI_U32 dot11fPackIeTriggerStaBgScan(tpAniSirGlobal pCtx, ++pBuf; ++(*pnConsumed); *pBuf = pSrc->enable; *pnConsumed += 1; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -25495,7 +25939,7 @@ tANI_U32 dot11fPackIeVersion(tpAniSirGlobal pCtx, pBuf += 1; DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->build_version ), pSrc->num_build_version); *pnConsumed += pSrc->num_build_version; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -25525,7 +25969,7 @@ tANI_U32 dot11fPackIeWDS(tpAniSirGlobal pCtx, ++pBuf; ++(*pnConsumed); DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->wdsData ), pSrc->num_wdsData); *pnConsumed += pSrc->num_wdsData; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -25558,7 +26002,7 @@ tANI_U32 dot11fPackIeAPChannelReport(tpAniSirGlobal pCtx, pBuf += 1; DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->channelList ), pSrc->num_channelList); *pnConsumed += pSrc->num_channelList; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -25588,7 +26032,7 @@ tANI_U32 dot11fPackIeBcnReportingDetail(tpAniSirGlobal pCtx, ++pBuf; ++(*pnConsumed); *pBuf = pSrc->reportingDetail; *pnConsumed += 1; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -25618,7 +26062,7 @@ tANI_U32 dot11fPackIeBeaconReportFrmBody(tpAniSirGlobal pCtx, ++pBuf; ++(*pnConsumed); DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->reportedFields ), pSrc->num_reportedFields); *pnConsumed += pSrc->num_reportedFields; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -25651,7 +26095,7 @@ tANI_U32 dot11fPackIeBeaconReporting(tpAniSirGlobal pCtx, pBuf += 1; *pBuf = pSrc->threshold; *pnConsumed += 1; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -25684,7 +26128,7 @@ tANI_U32 dot11fPackIeMeasurementPilot(tpAniSirGlobal pCtx, pBuf += 1; DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->vendorSpecific ), pSrc->num_vendorSpecific); *pnConsumed += pSrc->num_vendorSpecific; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -25717,7 +26161,7 @@ tANI_U32 dot11fPackIeMultiBssid(tpAniSirGlobal pCtx, pBuf += 1; DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->vendorSpecific ), pSrc->num_vendorSpecific); *pnConsumed += pSrc->num_vendorSpecific; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -25753,7 +26197,7 @@ tANI_U32 dot11fPackIeRICData(tpAniSirGlobal pCtx, pBuf += 1; frameshtons(pCtx, pBuf, pSrc->statusCode, 0); *pnConsumed += 2; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -25786,7 +26230,7 @@ tANI_U32 dot11fPackIeRICDescriptor(tpAniSirGlobal pCtx, pBuf += 1; DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->variableData ), pSrc->num_variableData); *pnConsumed += pSrc->num_variableData; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -25871,7 +26315,7 @@ tANI_U32 dot11fPackIeRRMEnabledCap(tpAniSirGlobal pCtx, tmp103__ |= ( pSrc->reserved << 2 ); *pBuf = tmp103__; *pnConsumed += 1; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 nBuf -= 1 ; break; } @@ -25902,7 +26346,7 @@ tANI_U32 dot11fPackIeRequestedInfo(tpAniSirGlobal pCtx, ++pBuf; ++(*pnConsumed); DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->requested_eids ), pSrc->num_requested_eids); *pnConsumed += pSrc->num_requested_eids; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -25932,7 +26376,7 @@ tANI_U32 dot11fPackIeSSID(tpAniSirGlobal pCtx, ++pBuf; ++(*pnConsumed); DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->ssid ), pSrc->num_ssid); *pnConsumed += pSrc->num_ssid; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -25981,7 +26425,7 @@ tANI_U32 dot11fPackIeSchedule(tpAniSirGlobal pCtx, pBuf += 2; frameshtons(pCtx, pBuf, pSrc->spec_interval, 0); *pnConsumed += 2; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -26031,7 +26475,7 @@ tANI_U32 dot11fPackIeTCLAS(tpAniSirGlobal pCtx, pBuf += 6; frameshtons(pCtx, pBuf, pSrc->info.EthParams.type, 0); *pnConsumed += 2; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; case 1: *pBuf = pSrc->info.IpParams.version; @@ -26060,7 +26504,7 @@ tANI_U32 dot11fPackIeTCLAS(tpAniSirGlobal pCtx, pBuf += 1; *pBuf = pSrc->info.IpParams.params.IpV4Params.reserved; *pnConsumed += 1; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; case 6: DOT11F_MEMCPY(pCtx, pBuf, pSrc->info.IpParams.params.IpV6Params.source, 16); @@ -26077,14 +26521,14 @@ tANI_U32 dot11fPackIeTCLAS(tpAniSirGlobal pCtx, pBuf += 2; DOT11F_MEMCPY(pCtx, pBuf, pSrc->info.IpParams.params.IpV6Params.flow_label, 3); *pnConsumed += 3; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } break; case 2: frameshtons(pCtx, pBuf, pSrc->info.Params8021dq.tag_type, 0); *pnConsumed += 2; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } break; @@ -26116,7 +26560,7 @@ tANI_U32 dot11fPackIeTCLASSPROC(tpAniSirGlobal pCtx, ++pBuf; ++(*pnConsumed); *pBuf = pSrc->processing; *pnConsumed += 1; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -26146,7 +26590,7 @@ tANI_U32 dot11fPackIeTSDelay(tpAniSirGlobal pCtx, ++pBuf; ++(*pnConsumed); frameshtonl(pCtx, pBuf, pSrc->delay, 0); *pnConsumed += 4; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -26245,7 +26689,7 @@ tANI_U32 dot11fPackIeTSPEC(tpAniSirGlobal pCtx, pBuf += 2; frameshtons(pCtx, pBuf, pSrc->medium_time, 0); *pnConsumed += 2; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -26307,7 +26751,7 @@ tANI_U32 dot11fPackIeWMMSchedule(tpAniSirGlobal pCtx, pBuf += 2; frameshtons(pCtx, pBuf, pSrc->spec_interval, 0); *pnConsumed += 2; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -26370,7 +26814,7 @@ tANI_U32 dot11fPackIeWMMTCLAS(tpAniSirGlobal pCtx, pBuf += 6; frameshtons(pCtx, pBuf, pSrc->info.EthParams.type, 0); *pnConsumed += 2; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; case 1: *pBuf = pSrc->info.IpParams.version; @@ -26399,7 +26843,7 @@ tANI_U32 dot11fPackIeWMMTCLAS(tpAniSirGlobal pCtx, pBuf += 1; *pBuf = pSrc->info.IpParams.params.IpV4Params.reserved; *pnConsumed += 1; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; case 6: DOT11F_MEMCPY(pCtx, pBuf, pSrc->info.IpParams.params.IpV6Params.source, 10); @@ -26416,14 +26860,14 @@ tANI_U32 dot11fPackIeWMMTCLAS(tpAniSirGlobal pCtx, pBuf += 2; DOT11F_MEMCPY(pCtx, pBuf, pSrc->info.IpParams.params.IpV6Params.flow_label, 3); *pnConsumed += 3; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } break; case 2: frameshtons(pCtx, pBuf, pSrc->info.Params8021dq.tag_type, 0); *pnConsumed += 2; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } break; @@ -26468,7 +26912,7 @@ tANI_U32 dot11fPackIeWMMTCLASPROC(tpAniSirGlobal pCtx, pBuf += 1; *pBuf = pSrc->processing; *pnConsumed += 1; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -26511,7 +26955,7 @@ tANI_U32 dot11fPackIeWMMTSDelay(tpAniSirGlobal pCtx, pBuf += 1; frameshtonl(pCtx, pBuf, pSrc->delay, 0); *pnConsumed += 4; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -26623,7 +27067,7 @@ tANI_U32 dot11fPackIeWMMTSPEC(tpAniSirGlobal pCtx, pBuf += 2; frameshtons(pCtx, pBuf, pSrc->medium_time, 0); *pnConsumed += 2; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -26733,7 +27177,7 @@ tANI_U32 dot11fPackIeCCXCckmOpaque(tpAniSirGlobal pCtx, ++pBuf; ++(*pnConsumed); DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->data ), pSrc->num_data); *pnConsumed += pSrc->num_data; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -26778,7 +27222,7 @@ tANI_U32 dot11fPackIeCCXRadMgmtCap(tpAniSirGlobal pCtx, tmp112__ |= ( pSrc->reserved << 3 ); *pBuf = tmp112__; *pnConsumed += 1; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 nBuf -= 1 ; break; } @@ -26823,7 +27267,7 @@ tANI_U32 dot11fPackIeCCXTrafStrmMet(tpAniSirGlobal pCtx, pBuf += 1; frameshtons(pCtx, pBuf, pSrc->msmt_interval, 0); *pnConsumed += 2; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -26864,7 +27308,7 @@ tANI_U32 dot11fPackIeCCXTrafStrmRateSet(tpAniSirGlobal pCtx, pBuf += 1; DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->tsrates ), pSrc->num_tsrates); *pnConsumed += pSrc->num_tsrates; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -26905,7 +27349,7 @@ tANI_U32 dot11fPackIeCCXTxmitPower(tpAniSirGlobal pCtx, pBuf += 1; *pBuf = pSrc->reserved; *pnConsumed += 1; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -26943,7 +27387,7 @@ tANI_U32 dot11fPackIeCCXVersion(tpAniSirGlobal pCtx, ++pBuf; ++(*pnConsumed); *pBuf = pSrc->version; *pnConsumed += 1; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -26982,7 +27426,7 @@ tANI_U32 dot11fPackIeCFParams(tpAniSirGlobal pCtx, pBuf += 2; frameshtons(pCtx, pBuf, pSrc->cfp_durremaining, 0); *pnConsumed += 2; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -27012,7 +27456,7 @@ tANI_U32 dot11fPackIeChallengeText(tpAniSirGlobal pCtx, ++pBuf; ++(*pnConsumed); DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->text ), pSrc->num_text); *pnConsumed += pSrc->num_text; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -27048,7 +27492,7 @@ tANI_U32 dot11fPackIeChanSwitchAnn(tpAniSirGlobal pCtx, pBuf += 1; *pBuf = pSrc->switchCount; *pnConsumed += 1; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -27084,7 +27528,7 @@ tANI_U32 dot11fPackIeCountry(tpAniSirGlobal pCtx, if ( pSrc->num_triplets ) { DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->triplets ), ( pSrc->num_triplets * 3 )); *pnConsumed += ( pSrc->num_triplets * 3 ); - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 } else break; break; @@ -27116,7 +27560,7 @@ tANI_U32 dot11fPackIeDSParams(tpAniSirGlobal pCtx, ++pBuf; ++(*pnConsumed); *pBuf = pSrc->curr_channel; *pnConsumed += 1; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -27233,7 +27677,7 @@ tANI_U32 dot11fPackIeEDCAParamSet(tpAniSirGlobal pCtx, nBuf -= 1 ; frameshtons(pCtx, pBuf, pSrc->acvo_txoplimit, 0); *pnConsumed += 2; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -27269,7 +27713,7 @@ tANI_U32 dot11fPackIeERPInfo(tpAniSirGlobal pCtx, tmp121__ |= ( pSrc->unused << 3 ); *pBuf = tmp121__; *pnConsumed += 1; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 nBuf -= 1 ; break; } @@ -27365,7 +27809,7 @@ tANI_U32 dot11fPackIeExtCap(tpAniSirGlobal pCtx, tmp124__ |= ( pSrc->reserved7 << 15 ); frameshtons(pCtx, pBuf, tmp124__, 0); *pnConsumed += 2; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 nBuf -= 2 ; break; } @@ -27396,7 +27840,7 @@ tANI_U32 dot11fPackIeExtChanSwitchAnn(tpAniSirGlobal pCtx, ++pBuf; ++(*pnConsumed); *pBuf = pSrc->secondaryChannelOffset; *pnConsumed += 1; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -27426,7 +27870,7 @@ tANI_U32 dot11fPackIeExtSuppRates(tpAniSirGlobal pCtx, ++pBuf; ++(*pnConsumed); DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->rates ), pSrc->num_rates); *pnConsumed += pSrc->num_rates; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -27465,7 +27909,7 @@ tANI_U32 dot11fPackIeFHParamSet(tpAniSirGlobal pCtx, pBuf += 1; *pBuf = pSrc->hop_index; *pnConsumed += 1; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -27498,7 +27942,7 @@ tANI_U32 dot11fPackIeFHParams(tpAniSirGlobal pCtx, pBuf += 1; *pBuf = pSrc->nchannels; *pnConsumed += 1; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -27540,7 +27984,7 @@ tANI_U32 dot11fPackIeFHPattTable(tpAniSirGlobal pCtx, pBuf += 1; DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->randtable ), pSrc->num_randtable); *pnConsumed += pSrc->num_randtable; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -27626,7 +28070,7 @@ tANI_U32 dot11fPackIeFTTimeoutInterval(tpAniSirGlobal pCtx, pBuf += 1; frameshtonl(pCtx, pBuf, pSrc->timeoutValue, 0); *pnConsumed += 4; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -27735,7 +28179,7 @@ tANI_U32 dot11fPackIeHTCaps(tpAniSirGlobal pCtx, nBuf -= 1 ; DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->rsvd ), pSrc->num_rsvd); *pnConsumed += pSrc->num_rsvd; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -27806,7 +28250,7 @@ tANI_U32 dot11fPackIeHTInfo(tpAniSirGlobal pCtx, pBuf += 16; DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->rsvd ), pSrc->num_rsvd); *pnConsumed += pSrc->num_rsvd; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -27836,7 +28280,7 @@ tANI_U32 dot11fPackIeIBSSParams(tpAniSirGlobal pCtx, ++pBuf; ++(*pnConsumed); frameshtons(pCtx, pBuf, pSrc->atim, 0); *pnConsumed += 2; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -27872,7 +28316,7 @@ tANI_U32 dot11fPackIeLinkIdentifier(tpAniSirGlobal pCtx, pBuf += 6; DOT11F_MEMCPY(pCtx, pBuf, pSrc->RespStaAddr, 6); *pnConsumed += 6; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -27942,7 +28386,7 @@ tANI_U32 dot11fPackIeMeasurementReport(tpAniSirGlobal pCtx, tmp135__ |= ( pSrc->report.Basic.unused << 5 ); *pBuf = tmp135__; *pnConsumed += 1; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 nBuf -= 1 ; break; case 1: @@ -27957,7 +28401,7 @@ tANI_U32 dot11fPackIeMeasurementReport(tpAniSirGlobal pCtx, pBuf += 2; *pBuf = pSrc->report.CCA.cca_busy_fraction; *pnConsumed += 1; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; case 2: *pBuf = pSrc->report.RPIHistogram.channel; @@ -27992,7 +28436,7 @@ tANI_U32 dot11fPackIeMeasurementReport(tpAniSirGlobal pCtx, pBuf += 1; *pBuf = pSrc->report.RPIHistogram.rpi7_density; *pnConsumed += 1; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; case 5: *pBuf = pSrc->report.Beacon.regClass; @@ -28098,7 +28542,7 @@ tANI_U32 dot11fPackIeMeasurementRequest(tpAniSirGlobal pCtx, pBuf += 8; frameshtons(pCtx, pBuf, pSrc->measurement_request.Basic.meas_duration, 0); *pnConsumed += 2; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; case 1: *pBuf = pSrc->measurement_request.CCA.channel_no; @@ -28109,7 +28553,7 @@ tANI_U32 dot11fPackIeMeasurementRequest(tpAniSirGlobal pCtx, pBuf += 8; frameshtons(pCtx, pBuf, pSrc->measurement_request.CCA.meas_duration, 0); *pnConsumed += 2; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; case 2: *pBuf = pSrc->measurement_request.RPIHistogram.channel_no; @@ -28120,7 +28564,7 @@ tANI_U32 dot11fPackIeMeasurementRequest(tpAniSirGlobal pCtx, pBuf += 8; frameshtons(pCtx, pBuf, pSrc->measurement_request.RPIHistogram.meas_duration, 0); *pnConsumed += 2; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; case 5: *pBuf = pSrc->measurement_request.Beacon.regClass; @@ -28187,7 +28631,7 @@ tANI_U32 dot11fPackIeMobilityDomain(tpAniSirGlobal pCtx, tmp138__ |= ( pSrc->reserved << 2 ); *pBuf = tmp138__; *pnConsumed += 1; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 nBuf -= 1 ; break; } @@ -28298,7 +28742,7 @@ tANI_U32 dot11fPackIeOperatingMode(tpAniSirGlobal pCtx, tmp141__ |= ( pSrc->rxNSSType << 7 ); *pBuf = tmp141__; *pnConsumed += 1; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 nBuf -= 1 ; break; } @@ -28310,6 +28754,42 @@ tANI_U32 dot11fPackIeOperatingMode(tpAniSirGlobal pCtx, return DOT11F_PARSE_SUCCESS; } /* End dot11fPackIeOperatingMode. */ +tANI_U32 dot11fPackIeOxygenNetwork(tpAniSirGlobal pCtx, + tDot11fIEOxygenNetwork *pSrc, + tANI_U8 *pBuf, + tANI_U32 nBuf, + tANI_U32 *pnConsumed) +{ + tANI_U8* pIeLen = 0; + tANI_U32 nConsumedOnEntry = *pnConsumed; + tANI_U32 nNeeded = 0U; + nNeeded += 2; + while ( pSrc->present ) + { + if ( nNeeded > nBuf ) return DOT11F_BUFFER_OVERFLOW; + *pBuf = 221; + ++pBuf; ++(*pnConsumed); + pIeLen = pBuf; + ++pBuf; ++(*pnConsumed); + *pBuf = 0x0; + ++pBuf; ++(*pnConsumed); + *pBuf = 0x16; + ++pBuf; ++(*pnConsumed); + *pBuf = 0x32; + ++pBuf; ++(*pnConsumed); + frameshtons(pCtx, pBuf, pSrc->data, 0); + *pnConsumed += 2; + // fieldsEndFlag = 1 + break; + } + (void)pCtx; + if (pIeLen) + { + *pIeLen = *pnConsumed - nConsumedOnEntry - 2; + } + return DOT11F_PARSE_SUCCESS; +} /* End dot11fPackIeOxygenNetwork. */ + tANI_U32 dot11fPackIeP2PAssocReq(tpAniSirGlobal pCtx, tDot11fIEP2PAssocReq *pSrc, tANI_U8 *pBuf, @@ -28853,7 +29333,7 @@ tANI_U32 dot11fPackIeP2PIEOpaque(tpAniSirGlobal pCtx, ++pBuf; ++(*pnConsumed); DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->data ), pSrc->num_data); *pnConsumed += pSrc->num_data; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -29230,7 +29710,7 @@ tANI_U32 dot11fPackIePTIControl(tpAniSirGlobal pCtx, pBuf += 1; frameshtons(pCtx, pBuf, pSrc->sequence_control, 0); *pnConsumed += 2; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -29267,7 +29747,7 @@ tANI_U32 dot11fPackIePUBufferStatus(tpAniSirGlobal pCtx, tmp142__ |= ( pSrc->reserved << 4 ); *pBuf = tmp142__; *pnConsumed += 1; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 nBuf -= 1 ; break; } @@ -29301,7 +29781,7 @@ tANI_U32 dot11fPackIePowerCaps(tpAniSirGlobal pCtx, pBuf += 1; *pBuf = pSrc->maxTxPower; *pnConsumed += 1; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -29331,7 +29811,7 @@ tANI_U32 dot11fPackIePowerConstraints(tpAniSirGlobal pCtx, ++pBuf; ++(*pnConsumed); *pBuf = pSrc->localPowerConstraints; *pnConsumed += 1; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -29367,7 +29847,7 @@ tANI_U32 dot11fPackIeQBSSLoad(tpAniSirGlobal pCtx, pBuf += 1; frameshtons(pCtx, pBuf, pSrc->avail, 0); *pnConsumed += 2; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -29397,14 +29877,14 @@ tANI_U32 dot11fPackIeQOSCapsAp(tpAniSirGlobal pCtx, pIeLen = pBuf; ++pBuf; ++(*pnConsumed); tmp143__ = 0U; - tmp143__ |= ( pSrc->reserved << 0 ); - tmp143__ |= ( pSrc->txopreq << 1 ); - tmp143__ |= ( pSrc->qreq << 2 ); - tmp143__ |= ( pSrc->qack << 3 ); - tmp143__ |= ( pSrc->count << 4 ); + tmp143__ |= ( pSrc->count << 0 ); + tmp143__ |= ( pSrc->qack << 4 ); + tmp143__ |= ( pSrc->qreq << 5 ); + tmp143__ |= ( pSrc->txopreq << 6 ); + tmp143__ |= ( pSrc->reserved << 7 ); *pBuf = tmp143__; *pnConsumed += 1; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 nBuf -= 1 ; break; } @@ -29435,16 +29915,16 @@ tANI_U32 dot11fPackIeQOSCapsStation(tpAniSirGlobal pCtx, pIeLen = pBuf; ++pBuf; ++(*pnConsumed); tmp144__ = 0U; - tmp144__ |= ( pSrc->more_data_ack << 0 ); - tmp144__ |= ( pSrc->max_sp_length << 1 ); - tmp144__ |= ( pSrc->qack << 3 ); - tmp144__ |= ( pSrc->acbe_uapsd << 4 ); - tmp144__ |= ( pSrc->acbk_uapsd << 5 ); - tmp144__ |= ( pSrc->acvi_uapsd << 6 ); - tmp144__ |= ( pSrc->acvo_uapsd << 7 ); + tmp144__ |= ( pSrc->acvo_uapsd << 0 ); + tmp144__ |= ( pSrc->acvi_uapsd << 1 ); + tmp144__ |= ( pSrc->acbk_uapsd << 2 ); + tmp144__ |= ( pSrc->acbe_uapsd << 3 ); + tmp144__ |= ( pSrc->qack << 4 ); + tmp144__ |= ( pSrc->max_sp_length << 5 ); + tmp144__ |= ( pSrc->more_data_ack << 7 ); *pBuf = tmp144__; *pnConsumed += 1; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 nBuf -= 1 ; break; } @@ -29484,7 +29964,7 @@ tANI_U32 dot11fPackIeQuiet(tpAniSirGlobal pCtx, pBuf += 2; frameshtons(pCtx, pBuf, pSrc->offset, 0); *pnConsumed += 2; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -29514,7 +29994,7 @@ tANI_U32 dot11fPackIeRCPIIE(tpAniSirGlobal pCtx, ++pBuf; ++(*pnConsumed); *pBuf = pSrc->rcpi; *pnConsumed += 1; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -29608,7 +30088,13 @@ tANI_U32 dot11fPackIeRSN(tpAniSirGlobal pCtx, else break; DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->pmkid ), ( pSrc->pmkid_count * 16 )); *pnConsumed += ( pSrc->pmkid_count * 16 ); - // fieldsEndFlag = 1 + pBuf += ( pSrc->pmkid_count * 16 ); + if ( pSrc->gp_mgmt_cipher_suite ) { + DOT11F_MEMCPY(pCtx, pBuf, pSrc->gp_mgmt_cipher_suite, 4); + *pnConsumed += 4; + // fieldsEndFlag = 1 + } + else break; break; } (void)pCtx; @@ -29638,7 +30124,7 @@ tANI_U32 dot11fPackIeRSNIIE(tpAniSirGlobal pCtx, ++pBuf; ++(*pnConsumed); *pBuf = pSrc->rsni; *pnConsumed += 1; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -29668,7 +30154,7 @@ tANI_U32 dot11fPackIeRSNOpaque(tpAniSirGlobal pCtx, ++pBuf; ++(*pnConsumed); DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->data ), pSrc->num_data); *pnConsumed += pSrc->num_data; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -29698,7 +30184,7 @@ tANI_U32 dot11fPackIeSuppChannels(tpAniSirGlobal pCtx, ++pBuf; ++(*pnConsumed); DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->bands ), ( pSrc->num_bands * 2 )); *pnConsumed += ( pSrc->num_bands * 2 ); - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -29728,7 +30214,7 @@ tANI_U32 dot11fPackIeSuppRates(tpAniSirGlobal pCtx, ++pBuf; ++(*pnConsumed); DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->rates ), pSrc->num_rates); *pnConsumed += pSrc->num_rates; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -29767,7 +30253,7 @@ tANI_U32 dot11fPackIeTIM(tpAniSirGlobal pCtx, pBuf += 1; DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->vbmp ), pSrc->num_vbmp); *pnConsumed += pSrc->num_vbmp; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -29800,7 +30286,7 @@ tANI_U32 dot11fPackIeTPCReport(tpAniSirGlobal pCtx, pBuf += 1; *pBuf = pSrc->link_margin; *pnConsumed += 1; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -29901,7 +30387,7 @@ tANI_U32 dot11fPackIeVHTCaps(tpAniSirGlobal pCtx, tmp147__ |= ( pSrc->reserved3 << 13 ); frameshtons(pCtx, pBuf, tmp147__, 0); *pnConsumed += 2; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 nBuf -= 2 ; break; } @@ -29944,7 +30430,7 @@ tANI_U32 dot11fPackIeVHTExtBssLoad(tpAniSirGlobal pCtx, pBuf += 1; *pBuf = pSrc->OneSixtyMHzUtil; *pnConsumed += 1; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -29983,7 +30469,7 @@ tANI_U32 dot11fPackIeVHTOperation(tpAniSirGlobal pCtx, pBuf += 1; frameshtons(pCtx, pBuf, pSrc->basicMCSSet, 0); *pnConsumed += 2; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -30047,7 +30533,7 @@ tANI_U32 dot11fPackIeWAPI(tpAniSirGlobal pCtx, else break; DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->bkid ), ( pSrc->bkid_count * 16 )); *pnConsumed += ( pSrc->bkid_count * 16 ); - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -30077,7 +30563,7 @@ tANI_U32 dot11fPackIeWAPIOpaque(tpAniSirGlobal pCtx, ++pBuf; ++(*pnConsumed); DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->data ), pSrc->num_data); *pnConsumed += pSrc->num_data; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -30120,7 +30606,7 @@ tANI_U32 dot11fPackIeWFATPC(tpAniSirGlobal pCtx, pBuf += 1; *pBuf = pSrc->linkMargin; *pnConsumed += 1; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -30158,7 +30644,7 @@ tANI_U32 dot11fPackIeWFDIEOpaque(tpAniSirGlobal pCtx, ++pBuf; ++(*pnConsumed); DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->data ), pSrc->num_data); *pnConsumed += pSrc->num_data; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -30208,7 +30694,7 @@ tANI_U32 dot11fPackIeWMMCaps(tpAniSirGlobal pCtx, tmp149__ |= ( pSrc->more_ack << 7 ); *pBuf = tmp149__; *pnConsumed += 1; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 nBuf -= 1 ; break; } @@ -30257,7 +30743,7 @@ tANI_U32 dot11fPackIeWMMInfoAp(tpAniSirGlobal pCtx, tmp150__ |= ( pSrc->uapsd << 7 ); *pBuf = tmp150__; *pnConsumed += 1; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 nBuf -= 1 ; break; } @@ -30310,7 +30796,7 @@ tANI_U32 dot11fPackIeWMMInfoStation(tpAniSirGlobal pCtx, tmp151__ |= ( pSrc->reserved2 << 7 ); *pBuf = tmp151__; *pnConsumed += 1; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 nBuf -= 1 ; break; } @@ -30441,7 +30927,7 @@ tANI_U32 dot11fPackIeWMMParams(tpAniSirGlobal pCtx, nBuf -= 1 ; frameshtons(pCtx, pBuf, pSrc->acvo_txoplimit, 0); *pnConsumed += 2; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -30509,7 +30995,7 @@ tANI_U32 dot11fPackIeWPA(tpAniSirGlobal pCtx, if ( pSrc->caps ) { frameshtons(pCtx, pBuf, pSrc->caps, 0); *pnConsumed += 2; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 } else break; break; @@ -30549,7 +31035,7 @@ tANI_U32 dot11fPackIeWPAOpaque(tpAniSirGlobal pCtx, ++pBuf; ++(*pnConsumed); DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->data ), pSrc->num_data); *pnConsumed += pSrc->num_data; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -30628,7 +31114,7 @@ tANI_U32 dot11fPackIeWiderBWChanSwitchAnn(tpAniSirGlobal pCtx, pBuf += 1; *pBuf = pSrc->newCenterChanFreq1; *pnConsumed += 1; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -30838,7 +31324,7 @@ tANI_U32 dot11fPackIeWscIEOpaque(tpAniSirGlobal pCtx, ++pBuf; ++(*pnConsumed); DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->data ), pSrc->num_data); *pnConsumed += pSrc->num_data; - // fieldsEndFlag = 1 + // fieldsEndFlag = 1 break; } (void)pCtx; @@ -31641,13 +32127,13 @@ tANI_U32 dot11fPackAssocRequest(tpAniSirGlobal pCtx, tDot11fAssocRequest *pFrm, } else { - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_ASSOCREQUEST), FRFL("more_data_ack (1): %d\n"), pFrm->QOSCapsStation.more_data_ack); - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_ASSOCREQUEST), FRFL("max_sp_length (2): %d\n"), pFrm->QOSCapsStation.max_sp_length); - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_ASSOCREQUEST), FRFL("qack (1): %d\n"), pFrm->QOSCapsStation.qack); - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_ASSOCREQUEST), FRFL("acbe_uapsd (1): %d\n"), pFrm->QOSCapsStation.acbe_uapsd); - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_ASSOCREQUEST), FRFL("acbk_uapsd (1): %d\n"), pFrm->QOSCapsStation.acbk_uapsd); - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_ASSOCREQUEST), FRFL("acvi_uapsd (1): %d\n"), pFrm->QOSCapsStation.acvi_uapsd); FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_ASSOCREQUEST), FRFL("acvo_uapsd (1): %d\n"), pFrm->QOSCapsStation.acvo_uapsd); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_ASSOCREQUEST), FRFL("acvi_uapsd (1): %d\n"), pFrm->QOSCapsStation.acvi_uapsd); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_ASSOCREQUEST), FRFL("acbk_uapsd (1): %d\n"), pFrm->QOSCapsStation.acbk_uapsd); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_ASSOCREQUEST), FRFL("acbe_uapsd (1): %d\n"), pFrm->QOSCapsStation.acbe_uapsd); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_ASSOCREQUEST), FRFL("qack (1): %d\n"), pFrm->QOSCapsStation.qack); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_ASSOCREQUEST), FRFL("max_sp_length (2): %d\n"), pFrm->QOSCapsStation.max_sp_length); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_ASSOCREQUEST), FRFL("more_data_ack (1): %d\n"), pFrm->QOSCapsStation.more_data_ack); } FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_ASSOCREQUEST), FRFL("RRMEnabledCap:\n")); if (!pFrm->RRMEnabledCap.present) @@ -32382,6 +32868,18 @@ tANI_U32 dot11fPackAssocResponse(tpAniSirGlobal pCtx, tDot11fAssocResponse *pFrm FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_ASSOCRESPONSE), FRFL("num_PMK_R0_ID: %d.\n"), pFrm->FTInfo.R0KH_ID.num_PMK_R0_ID); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_ASSOCRESPONSE), ( tANI_U8* ) pFrm->FTInfo.R0KH_ID.PMK_R0_ID, pFrm->FTInfo.R0KH_ID.num_PMK_R0_ID); } + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_ASSOCRESPONSE), FRFL("IGTK:\n")); + if (!pFrm->FTInfo.IGTK.present) + { + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_ASSOCRESPONSE), FRFL("Not present.\n")); + } + else + { + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_ASSOCRESPONSE), ( tANI_U8* )&pFrm->FTInfo.IGTK.keyID, 2); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_ASSOCRESPONSE), ( tANI_U8* )&pFrm->FTInfo.IGTK.IPN, 6); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_ASSOCRESPONSE), ( tANI_U8* )&pFrm->FTInfo.IGTK.keyLength, 1); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_ASSOCRESPONSE), ( tANI_U8* )&pFrm->FTInfo.IGTK.key, 24); + } } for (i = 0; i < pFrm->num_RICDataDesc; ++i) { @@ -33385,6 +33883,18 @@ tANI_U32 dot11fPackAuthentication(tpAniSirGlobal pCtx, tDot11fAuthentication *pF FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_AUTHENTICATION), FRFL("num_PMK_R0_ID: %d.\n"), pFrm->FTInfo.R0KH_ID.num_PMK_R0_ID); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_AUTHENTICATION), ( tANI_U8* ) pFrm->FTInfo.R0KH_ID.PMK_R0_ID, pFrm->FTInfo.R0KH_ID.num_PMK_R0_ID); } + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_AUTHENTICATION), FRFL("IGTK:\n")); + if (!pFrm->FTInfo.IGTK.present) + { + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_AUTHENTICATION), FRFL("Not present.\n")); + } + else + { + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_AUTHENTICATION), ( tANI_U8* )&pFrm->FTInfo.IGTK.keyID, 2); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_AUTHENTICATION), ( tANI_U8* )&pFrm->FTInfo.IGTK.IPN, 6); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_AUTHENTICATION), ( tANI_U8* )&pFrm->FTInfo.IGTK.keyLength, 1); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_AUTHENTICATION), ( tANI_U8* )&pFrm->FTInfo.IGTK.key, 24); + } } FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_AUTHENTICATION), FRFL("FTTimeoutInterval:\n")); if (!pFrm->FTTimeoutInterval.present) @@ -33895,6 +34405,7 @@ tANI_U32 dot11fPackBeacon(tpAniSirGlobal pCtx, tDot11fBeacon *pFrm, tANI_U8 *pBu FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), ( tANI_U8* )&pFrm->RSN.RSN_Cap, 2); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), ( tANI_U8* )&pFrm->RSN.pmkid_count, 2); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), ( tANI_U8* ) pFrm->RSN.pmkid, 16 * pFrm->RSN.pmkid_count); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), ( tANI_U8* )&pFrm->RSN.gp_mgmt_cipher_suite, 4); } FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), FRFL("QBSSLoad:\n")); if (!pFrm->QBSSLoad.present) @@ -33952,11 +34463,11 @@ tANI_U32 dot11fPackBeacon(tpAniSirGlobal pCtx, tDot11fBeacon *pFrm, tANI_U8 *pBu } else { - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), FRFL("reserved (1): %d\n"), pFrm->QOSCapsAp.reserved); - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), FRFL("txopreq (1): %d\n"), pFrm->QOSCapsAp.txopreq); - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), FRFL("qreq (1): %d\n"), pFrm->QOSCapsAp.qreq); - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), FRFL("qack (1): %d\n"), pFrm->QOSCapsAp.qack); FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), FRFL("count (4): %d\n"), pFrm->QOSCapsAp.count); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), FRFL("qack (1): %d\n"), pFrm->QOSCapsAp.qack); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), FRFL("qreq (1): %d\n"), pFrm->QOSCapsAp.qreq); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), FRFL("txopreq (1): %d\n"), pFrm->QOSCapsAp.txopreq); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), FRFL("reserved (1): %d\n"), pFrm->QOSCapsAp.reserved); } FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), FRFL("APChannelReport:\n")); if (!pFrm->APChannelReport.present) @@ -34752,6 +35263,15 @@ tANI_U32 dot11fPackBeacon(tpAniSirGlobal pCtx, tDot11fBeacon *pFrm, tANI_U8 *pBu FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), ( tANI_U8* )&pFrm->WiderBWChanSwitchAnn.newCenterChanFreq0, 1); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), ( tANI_U8* )&pFrm->WiderBWChanSwitchAnn.newCenterChanFreq1, 1); } + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), FRFL("OxygenNetwork:\n")); + if (!pFrm->OxygenNetwork.present) + { + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), FRFL("Not present.\n")); + } + else + { + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), ( tANI_U8* )&pFrm->OxygenNetwork.data, 2); + } FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), FRFL("to:\n")); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), pBuf, nBuf); } @@ -34926,22 +35446,15 @@ tANI_U32 dot11fPackBeacon2(tpAniSirGlobal pCtx, tDot11fBeacon2 *pFrm, tANI_U8 *p FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), FRFL("num_rates: %d.\n"), pFrm->ExtSuppRates.num_rates); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), ( tANI_U8* ) pFrm->ExtSuppRates.rates, pFrm->ExtSuppRates.num_rates); } - FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), FRFL("RSN:\n")); - if (!pFrm->RSN.present) + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), FRFL("RSNOpaque:\n")); + if (!pFrm->RSNOpaque.present) { FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), FRFL("Not present.\n")); } else { - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), ( tANI_U8* )&pFrm->RSN.version, 2); - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), ( tANI_U8* )&pFrm->RSN.gp_cipher_suite, 4); - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), ( tANI_U8* )&pFrm->RSN.pwise_cipher_suite_count, 2); - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), ( tANI_U8* ) pFrm->RSN.pwise_cipher_suites, 4 * pFrm->RSN.pwise_cipher_suite_count); - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), ( tANI_U8* )&pFrm->RSN.akm_suite_count, 2); - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), ( tANI_U8* ) pFrm->RSN.akm_suites, 4 * pFrm->RSN.akm_suite_count); - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), ( tANI_U8* )&pFrm->RSN.RSN_Cap, 2); - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), ( tANI_U8* )&pFrm->RSN.pmkid_count, 2); - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), ( tANI_U8* ) pFrm->RSN.pmkid, 16 * pFrm->RSN.pmkid_count); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), FRFL("num_data: %d.\n"), pFrm->RSNOpaque.num_data); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), ( tANI_U8* ) pFrm->RSNOpaque.data, pFrm->RSNOpaque.num_data); } FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), FRFL("EDCAParamSet:\n")); if (!pFrm->EDCAParamSet.present) @@ -35775,6 +36288,15 @@ tANI_U32 dot11fPackBeacon2(tpAniSirGlobal pCtx, tDot11fBeacon2 *pFrm, tANI_U8 *p FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), ( tANI_U8* )&pFrm->WiderBWChanSwitchAnn.newCenterChanFreq0, 1); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), ( tANI_U8* )&pFrm->WiderBWChanSwitchAnn.newCenterChanFreq1, 1); } + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), FRFL("OxygenNetwork:\n")); + if (!pFrm->OxygenNetwork.present) + { + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), FRFL("Not present.\n")); + } + else + { + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), ( tANI_U8* )&pFrm->OxygenNetwork.data, 2); + } FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), FRFL("to:\n")); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), pBuf, nBuf); } @@ -35985,6 +36507,7 @@ tANI_U32 dot11fPackBeaconIEs(tpAniSirGlobal pCtx, tDot11fBeaconIEs *pFrm, tANI_U FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), ( tANI_U8* )&pFrm->RSN.RSN_Cap, 2); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), ( tANI_U8* )&pFrm->RSN.pmkid_count, 2); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), ( tANI_U8* ) pFrm->RSN.pmkid, 16 * pFrm->RSN.pmkid_count); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), ( tANI_U8* )&pFrm->RSN.gp_mgmt_cipher_suite, 4); } FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), FRFL("QBSSLoad:\n")); if (!pFrm->QBSSLoad.present) @@ -36042,11 +36565,11 @@ tANI_U32 dot11fPackBeaconIEs(tpAniSirGlobal pCtx, tDot11fBeaconIEs *pFrm, tANI_U } else { - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), FRFL("reserved (1): %d\n"), pFrm->QOSCapsAp.reserved); - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), FRFL("txopreq (1): %d\n"), pFrm->QOSCapsAp.txopreq); - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), FRFL("qreq (1): %d\n"), pFrm->QOSCapsAp.qreq); - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), FRFL("qack (1): %d\n"), pFrm->QOSCapsAp.qack); FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), FRFL("count (4): %d\n"), pFrm->QOSCapsAp.count); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), FRFL("qack (1): %d\n"), pFrm->QOSCapsAp.qack); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), FRFL("qreq (1): %d\n"), pFrm->QOSCapsAp.qreq); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), FRFL("txopreq (1): %d\n"), pFrm->QOSCapsAp.txopreq); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), FRFL("reserved (1): %d\n"), pFrm->QOSCapsAp.reserved); } FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), FRFL("APChannelReport:\n")); if (!pFrm->APChannelReport.present) @@ -36971,6 +37494,15 @@ tANI_U32 dot11fPackBeaconIEs(tpAniSirGlobal pCtx, tDot11fBeaconIEs *pFrm, tANI_U FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), ( tANI_U8* )&pFrm->WiderBWChanSwitchAnn.newCenterChanFreq0, 1); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), ( tANI_U8* )&pFrm->WiderBWChanSwitchAnn.newCenterChanFreq1, 1); } + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), FRFL("OxygenNetwork:\n")); + if (!pFrm->OxygenNetwork.present) + { + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), FRFL("Not present.\n")); + } + else + { + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), ( tANI_U8* )&pFrm->OxygenNetwork.data, 2); + } FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), FRFL("to:\n")); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), pBuf, nBuf); } @@ -39124,22 +39656,15 @@ tANI_U32 dot11fPackProbeResponse(tpAniSirGlobal pCtx, tDot11fProbeResponse *pFrm FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), FRFL("num_rates: %d.\n"), pFrm->ExtSuppRates.num_rates); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), ( tANI_U8* ) pFrm->ExtSuppRates.rates, pFrm->ExtSuppRates.num_rates); } - FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), FRFL("RSN:\n")); - if (!pFrm->RSN.present) + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), FRFL("RSNOpaque:\n")); + if (!pFrm->RSNOpaque.present) { FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), FRFL("Not present.\n")); } else { - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), ( tANI_U8* )&pFrm->RSN.version, 2); - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), ( tANI_U8* )&pFrm->RSN.gp_cipher_suite, 4); - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), ( tANI_U8* )&pFrm->RSN.pwise_cipher_suite_count, 2); - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), ( tANI_U8* ) pFrm->RSN.pwise_cipher_suites, 4 * pFrm->RSN.pwise_cipher_suite_count); - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), ( tANI_U8* )&pFrm->RSN.akm_suite_count, 2); - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), ( tANI_U8* ) pFrm->RSN.akm_suites, 4 * pFrm->RSN.akm_suite_count); - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), ( tANI_U8* )&pFrm->RSN.RSN_Cap, 2); - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), ( tANI_U8* )&pFrm->RSN.pmkid_count, 2); - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), ( tANI_U8* ) pFrm->RSN.pmkid, 16 * pFrm->RSN.pmkid_count); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), FRFL("num_data: %d.\n"), pFrm->RSNOpaque.num_data); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), ( tANI_U8* ) pFrm->RSNOpaque.data, pFrm->RSNOpaque.num_data); } FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), FRFL("QBSSLoad:\n")); if (!pFrm->QBSSLoad.present) @@ -40072,6 +40597,15 @@ tANI_U32 dot11fPackProbeResponse(tpAniSirGlobal pCtx, tDot11fProbeResponse *pFrm FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), FRFL("operModeNotification (1): %d\n"), pFrm->ExtCap.operModeNotification); FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), FRFL("reserved7 (1): %d\n"), pFrm->ExtCap.reserved7); } + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), FRFL("OxygenNetwork:\n")); + if (!pFrm->OxygenNetwork.present) + { + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), FRFL("Not present.\n")); + } + else + { + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), ( tANI_U8* )&pFrm->OxygenNetwork.data, 2); + } FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), FRFL("to:\n")); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), pBuf, nBuf); } @@ -40207,6 +40741,40 @@ tANI_U32 dot11fPackProvisionDiscoveryRes(tpAniSirGlobal pCtx, tDot11fProvisionDi } /* End dot11fUnpackProvisionDiscoveryRes. */ +tANI_U32 dot11fPackRMC(tpAniSirGlobal pCtx, tDot11fRMC *pFrm, tANI_U8 *pBuf, tANI_U32 nBuf, tANI_U32 *pnConsumed) +{ + tANI_U32 i = 0; + tANI_U32 status = 0; + (void)i; + *pnConsumed = 0U; + status = PackCore(pCtx, (tANI_U8*)pFrm, pBuf, nBuf, pnConsumed, FFS_RMC, IES_RMC); + +# ifdef DOT11F_DUMP_FRAMES + if (!DOT11F_FAILED(status)) + { + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), FRFL("Packed the RMC:\n")); + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), FRFL("Category:\n")); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), ( tANI_U8* )&pFrm->Category.category, 1); + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), FRFL("RMCOUI:\n")); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), ( tANI_U8* )&pFrm->RMCOUI.oui, 3); + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), FRFL("MagicCode:\n")); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), ( tANI_U8* )&pFrm->MagicCode.magic, 6); + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), FRFL("RMCVersion:\n")); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), ( tANI_U8* )&pFrm->RMCVersion.version, 1); + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), FRFL("Action:\n")); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), ( tANI_U8* )&pFrm->Action.action, 1); + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), FRFL("RMCDialogToken:\n")); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), ( tANI_U8* )&pFrm->RMCDialogToken.token, 4); + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), FRFL("Leader:\n")); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), ( tANI_U8* )&pFrm->Leader.mac, 6); + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), FRFL("to:\n")); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), pBuf, nBuf); + } +# endif // DOT11F_DUMP_FRAMES + return status; + +} /* End dot11fUnpackRMC. */ + tANI_U32 dot11fPackRadioMeasurementReport(tpAniSirGlobal pCtx, tDot11fRadioMeasurementReport *pFrm, tANI_U8 *pBuf, tANI_U32 nBuf, tANI_U32 *pnConsumed) { tANI_U32 i = 0; @@ -40469,13 +41037,13 @@ tANI_U32 dot11fPackReAssocRequest(tpAniSirGlobal pCtx, tDot11fReAssocRequest *pF } else { - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_REASSOCREQUEST), FRFL("more_data_ack (1): %d\n"), pFrm->QOSCapsStation.more_data_ack); - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_REASSOCREQUEST), FRFL("max_sp_length (2): %d\n"), pFrm->QOSCapsStation.max_sp_length); - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_REASSOCREQUEST), FRFL("qack (1): %d\n"), pFrm->QOSCapsStation.qack); - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_REASSOCREQUEST), FRFL("acbe_uapsd (1): %d\n"), pFrm->QOSCapsStation.acbe_uapsd); - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_REASSOCREQUEST), FRFL("acbk_uapsd (1): %d\n"), pFrm->QOSCapsStation.acbk_uapsd); - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_REASSOCREQUEST), FRFL("acvi_uapsd (1): %d\n"), pFrm->QOSCapsStation.acvi_uapsd); FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_REASSOCREQUEST), FRFL("acvo_uapsd (1): %d\n"), pFrm->QOSCapsStation.acvo_uapsd); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_REASSOCREQUEST), FRFL("acvi_uapsd (1): %d\n"), pFrm->QOSCapsStation.acvi_uapsd); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_REASSOCREQUEST), FRFL("acbk_uapsd (1): %d\n"), pFrm->QOSCapsStation.acbk_uapsd); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_REASSOCREQUEST), FRFL("acbe_uapsd (1): %d\n"), pFrm->QOSCapsStation.acbe_uapsd); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_REASSOCREQUEST), FRFL("qack (1): %d\n"), pFrm->QOSCapsStation.qack); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_REASSOCREQUEST), FRFL("max_sp_length (2): %d\n"), pFrm->QOSCapsStation.max_sp_length); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_REASSOCREQUEST), FRFL("more_data_ack (1): %d\n"), pFrm->QOSCapsStation.more_data_ack); } FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_REASSOCREQUEST), FRFL("RRMEnabledCap:\n")); if (!pFrm->RRMEnabledCap.present) @@ -40571,6 +41139,18 @@ tANI_U32 dot11fPackReAssocRequest(tpAniSirGlobal pCtx, tDot11fReAssocRequest *pF FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_REASSOCREQUEST), FRFL("num_PMK_R0_ID: %d.\n"), pFrm->FTInfo.R0KH_ID.num_PMK_R0_ID); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_REASSOCREQUEST), ( tANI_U8* ) pFrm->FTInfo.R0KH_ID.PMK_R0_ID, pFrm->FTInfo.R0KH_ID.num_PMK_R0_ID); } + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_REASSOCREQUEST), FRFL("IGTK:\n")); + if (!pFrm->FTInfo.IGTK.present) + { + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_REASSOCREQUEST), FRFL("Not present.\n")); + } + else + { + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_REASSOCREQUEST), ( tANI_U8* )&pFrm->FTInfo.IGTK.keyID, 2); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_REASSOCREQUEST), ( tANI_U8* )&pFrm->FTInfo.IGTK.IPN, 6); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_REASSOCREQUEST), ( tANI_U8* )&pFrm->FTInfo.IGTK.keyLength, 1); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_REASSOCREQUEST), ( tANI_U8* )&pFrm->FTInfo.IGTK.key, 24); + } } for (i = 0; i < pFrm->num_RICDataDesc; ++i) { @@ -41593,6 +42173,18 @@ tANI_U32 dot11fPackReAssocResponse(tpAniSirGlobal pCtx, tDot11fReAssocResponse * FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_REASSOCRESPONSE), FRFL("num_PMK_R0_ID: %d.\n"), pFrm->FTInfo.R0KH_ID.num_PMK_R0_ID); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_REASSOCRESPONSE), ( tANI_U8* ) pFrm->FTInfo.R0KH_ID.PMK_R0_ID, pFrm->FTInfo.R0KH_ID.num_PMK_R0_ID); } + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_REASSOCRESPONSE), FRFL("IGTK:\n")); + if (!pFrm->FTInfo.IGTK.present) + { + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_REASSOCRESPONSE), FRFL("Not present.\n")); + } + else + { + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_REASSOCRESPONSE), ( tANI_U8* )&pFrm->FTInfo.IGTK.keyID, 2); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_REASSOCRESPONSE), ( tANI_U8* )&pFrm->FTInfo.IGTK.IPN, 6); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_REASSOCRESPONSE), ( tANI_U8* )&pFrm->FTInfo.IGTK.keyLength, 1); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_REASSOCRESPONSE), ( tANI_U8* )&pFrm->FTInfo.IGTK.key, 24); + } } for (i = 0; i < pFrm->num_RICDataDesc; ++i) { @@ -42670,6 +43262,7 @@ tANI_U32 dot11fPackTDLSDisRsp(tpAniSirGlobal pCtx, tDot11fTDLSDisRsp *pFrm, tANI FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSDISRSP), ( tANI_U8* )&pFrm->RSN.RSN_Cap, 2); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSDISRSP), ( tANI_U8* )&pFrm->RSN.pmkid_count, 2); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSDISRSP), ( tANI_U8* ) pFrm->RSN.pmkid, 16 * pFrm->RSN.pmkid_count); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSDISRSP), ( tANI_U8* )&pFrm->RSN.gp_mgmt_cipher_suite, 4); } FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSDISRSP), FRFL("ExtCap:\n")); if (!pFrm->ExtCap.present) @@ -42775,6 +43368,18 @@ tANI_U32 dot11fPackTDLSDisRsp(tpAniSirGlobal pCtx, tDot11fTDLSDisRsp *pFrm, tANI FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSDISRSP), FRFL("num_PMK_R0_ID: %d.\n"), pFrm->FTInfo.R0KH_ID.num_PMK_R0_ID); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSDISRSP), ( tANI_U8* ) pFrm->FTInfo.R0KH_ID.PMK_R0_ID, pFrm->FTInfo.R0KH_ID.num_PMK_R0_ID); } + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSDISRSP), FRFL("IGTK:\n")); + if (!pFrm->FTInfo.IGTK.present) + { + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSDISRSP), FRFL("Not present.\n")); + } + else + { + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSDISRSP), ( tANI_U8* )&pFrm->FTInfo.IGTK.keyID, 2); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSDISRSP), ( tANI_U8* )&pFrm->FTInfo.IGTK.IPN, 6); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSDISRSP), ( tANI_U8* )&pFrm->FTInfo.IGTK.keyLength, 1); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSDISRSP), ( tANI_U8* )&pFrm->FTInfo.IGTK.key, 24); + } } FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSDISRSP), FRFL("FTTimeoutInterval:\n")); if (!pFrm->FTTimeoutInterval.present) @@ -43040,6 +43645,7 @@ tANI_U32 dot11fPackTDLSSetupCnf(tpAniSirGlobal pCtx, tDot11fTDLSSetupCnf *pFrm, FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPCNF), ( tANI_U8* )&pFrm->RSN.RSN_Cap, 2); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPCNF), ( tANI_U8* )&pFrm->RSN.pmkid_count, 2); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPCNF), ( tANI_U8* ) pFrm->RSN.pmkid, 16 * pFrm->RSN.pmkid_count); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPCNF), ( tANI_U8* )&pFrm->RSN.gp_mgmt_cipher_suite, 4); } FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPCNF), FRFL("EDCAParamSet:\n")); if (!pFrm->EDCAParamSet.present) @@ -43124,6 +43730,18 @@ tANI_U32 dot11fPackTDLSSetupCnf(tpAniSirGlobal pCtx, tDot11fTDLSSetupCnf *pFrm, FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPCNF), FRFL("num_PMK_R0_ID: %d.\n"), pFrm->FTInfo.R0KH_ID.num_PMK_R0_ID); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPCNF), ( tANI_U8* ) pFrm->FTInfo.R0KH_ID.PMK_R0_ID, pFrm->FTInfo.R0KH_ID.num_PMK_R0_ID); } + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPCNF), FRFL("IGTK:\n")); + if (!pFrm->FTInfo.IGTK.present) + { + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPCNF), FRFL("Not present.\n")); + } + else + { + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPCNF), ( tANI_U8* )&pFrm->FTInfo.IGTK.keyID, 2); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPCNF), ( tANI_U8* )&pFrm->FTInfo.IGTK.IPN, 6); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPCNF), ( tANI_U8* )&pFrm->FTInfo.IGTK.keyLength, 1); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPCNF), ( tANI_U8* )&pFrm->FTInfo.IGTK.key, 24); + } } FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPCNF), FRFL("FTTimeoutInterval:\n")); if (!pFrm->FTTimeoutInterval.present) @@ -43203,6 +43821,18 @@ tANI_U32 dot11fPackTDLSSetupCnf(tpAniSirGlobal pCtx, tDot11fTDLSSetupCnf *pFrm, FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPCNF), ( tANI_U8* )&pFrm->VHTOperation.chanCenterFreqSeg2, 1); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPCNF), ( tANI_U8* )&pFrm->VHTOperation.basicMCSSet, 2); } + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPCNF), FRFL("OperatingMode:\n")); + if (!pFrm->OperatingMode.present) + { + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPCNF), FRFL("Not present.\n")); + } + else + { + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPCNF), FRFL("chanWidth (2): %d\n"), pFrm->OperatingMode.chanWidth); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPCNF), FRFL("reserved (2): %d\n"), pFrm->OperatingMode.reserved); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPCNF), FRFL("rxNSS (3): %d\n"), pFrm->OperatingMode.rxNSS); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPCNF), FRFL("rxNSSType (1): %d\n"), pFrm->OperatingMode.rxNSSType); + } FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPCNF), FRFL("to:\n")); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPCNF), pBuf, nBuf); } @@ -43303,6 +43933,7 @@ tANI_U32 dot11fPackTDLSSetupReq(tpAniSirGlobal pCtx, tDot11fTDLSSetupReq *pFrm, FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPREQ), ( tANI_U8* )&pFrm->RSN.RSN_Cap, 2); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPREQ), ( tANI_U8* )&pFrm->RSN.pmkid_count, 2); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPREQ), ( tANI_U8* ) pFrm->RSN.pmkid, 16 * pFrm->RSN.pmkid_count); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPREQ), ( tANI_U8* )&pFrm->RSN.gp_mgmt_cipher_suite, 4); } FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPREQ), FRFL("ExtCap:\n")); if (!pFrm->ExtCap.present) @@ -43370,13 +44001,13 @@ tANI_U32 dot11fPackTDLSSetupReq(tpAniSirGlobal pCtx, tDot11fTDLSSetupReq *pFrm, } else { - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPREQ), FRFL("more_data_ack (1): %d\n"), pFrm->QOSCapsStation.more_data_ack); - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPREQ), FRFL("max_sp_length (2): %d\n"), pFrm->QOSCapsStation.max_sp_length); - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPREQ), FRFL("qack (1): %d\n"), pFrm->QOSCapsStation.qack); - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPREQ), FRFL("acbe_uapsd (1): %d\n"), pFrm->QOSCapsStation.acbe_uapsd); - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPREQ), FRFL("acbk_uapsd (1): %d\n"), pFrm->QOSCapsStation.acbk_uapsd); - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPREQ), FRFL("acvi_uapsd (1): %d\n"), pFrm->QOSCapsStation.acvi_uapsd); FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPREQ), FRFL("acvo_uapsd (1): %d\n"), pFrm->QOSCapsStation.acvo_uapsd); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPREQ), FRFL("acvi_uapsd (1): %d\n"), pFrm->QOSCapsStation.acvi_uapsd); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPREQ), FRFL("acbk_uapsd (1): %d\n"), pFrm->QOSCapsStation.acbk_uapsd); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPREQ), FRFL("acbe_uapsd (1): %d\n"), pFrm->QOSCapsStation.acbe_uapsd); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPREQ), FRFL("qack (1): %d\n"), pFrm->QOSCapsStation.qack); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPREQ), FRFL("max_sp_length (2): %d\n"), pFrm->QOSCapsStation.max_sp_length); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPREQ), FRFL("more_data_ack (1): %d\n"), pFrm->QOSCapsStation.more_data_ack); } FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPREQ), FRFL("FTInfo:\n")); if (!pFrm->FTInfo.present) @@ -43423,6 +44054,18 @@ tANI_U32 dot11fPackTDLSSetupReq(tpAniSirGlobal pCtx, tDot11fTDLSSetupReq *pFrm, FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPREQ), FRFL("num_PMK_R0_ID: %d.\n"), pFrm->FTInfo.R0KH_ID.num_PMK_R0_ID); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPREQ), ( tANI_U8* ) pFrm->FTInfo.R0KH_ID.PMK_R0_ID, pFrm->FTInfo.R0KH_ID.num_PMK_R0_ID); } + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPREQ), FRFL("IGTK:\n")); + if (!pFrm->FTInfo.IGTK.present) + { + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPREQ), FRFL("Not present.\n")); + } + else + { + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPREQ), ( tANI_U8* )&pFrm->FTInfo.IGTK.keyID, 2); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPREQ), ( tANI_U8* )&pFrm->FTInfo.IGTK.IPN, 6); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPREQ), ( tANI_U8* )&pFrm->FTInfo.IGTK.keyLength, 1); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPREQ), ( tANI_U8* )&pFrm->FTInfo.IGTK.key, 24); + } } FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPREQ), FRFL("FTTimeoutInterval:\n")); if (!pFrm->FTTimeoutInterval.present) @@ -43674,6 +44317,7 @@ tANI_U32 dot11fPackTDLSSetupRsp(tpAniSirGlobal pCtx, tDot11fTDLSSetupRsp *pFrm, FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), ( tANI_U8* )&pFrm->RSN.RSN_Cap, 2); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), ( tANI_U8* )&pFrm->RSN.pmkid_count, 2); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), ( tANI_U8* ) pFrm->RSN.pmkid, 16 * pFrm->RSN.pmkid_count); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), ( tANI_U8* )&pFrm->RSN.gp_mgmt_cipher_suite, 4); } FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), FRFL("ExtCap:\n")); if (!pFrm->ExtCap.present) @@ -43741,13 +44385,13 @@ tANI_U32 dot11fPackTDLSSetupRsp(tpAniSirGlobal pCtx, tDot11fTDLSSetupRsp *pFrm, } else { - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), FRFL("more_data_ack (1): %d\n"), pFrm->QOSCapsStation.more_data_ack); - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), FRFL("max_sp_length (2): %d\n"), pFrm->QOSCapsStation.max_sp_length); - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), FRFL("qack (1): %d\n"), pFrm->QOSCapsStation.qack); - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), FRFL("acbe_uapsd (1): %d\n"), pFrm->QOSCapsStation.acbe_uapsd); - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), FRFL("acbk_uapsd (1): %d\n"), pFrm->QOSCapsStation.acbk_uapsd); - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), FRFL("acvi_uapsd (1): %d\n"), pFrm->QOSCapsStation.acvi_uapsd); FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), FRFL("acvo_uapsd (1): %d\n"), pFrm->QOSCapsStation.acvo_uapsd); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), FRFL("acvi_uapsd (1): %d\n"), pFrm->QOSCapsStation.acvi_uapsd); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), FRFL("acbk_uapsd (1): %d\n"), pFrm->QOSCapsStation.acbk_uapsd); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), FRFL("acbe_uapsd (1): %d\n"), pFrm->QOSCapsStation.acbe_uapsd); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), FRFL("qack (1): %d\n"), pFrm->QOSCapsStation.qack); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), FRFL("max_sp_length (2): %d\n"), pFrm->QOSCapsStation.max_sp_length); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), FRFL("more_data_ack (1): %d\n"), pFrm->QOSCapsStation.more_data_ack); } FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), FRFL("FTInfo:\n")); if (!pFrm->FTInfo.present) @@ -43794,6 +44438,18 @@ tANI_U32 dot11fPackTDLSSetupRsp(tpAniSirGlobal pCtx, tDot11fTDLSSetupRsp *pFrm, FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), FRFL("num_PMK_R0_ID: %d.\n"), pFrm->FTInfo.R0KH_ID.num_PMK_R0_ID); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), ( tANI_U8* ) pFrm->FTInfo.R0KH_ID.PMK_R0_ID, pFrm->FTInfo.R0KH_ID.num_PMK_R0_ID); } + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), FRFL("IGTK:\n")); + if (!pFrm->FTInfo.IGTK.present) + { + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), FRFL("Not present.\n")); + } + else + { + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), ( tANI_U8* )&pFrm->FTInfo.IGTK.keyID, 2); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), ( tANI_U8* )&pFrm->FTInfo.IGTK.IPN, 6); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), ( tANI_U8* )&pFrm->FTInfo.IGTK.keyLength, 1); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), ( tANI_U8* )&pFrm->FTInfo.IGTK.key, 24); + } } FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), FRFL("FTTimeoutInterval:\n")); if (!pFrm->FTTimeoutInterval.present) @@ -43943,6 +44599,18 @@ tANI_U32 dot11fPackTDLSSetupRsp(tpAniSirGlobal pCtx, tDot11fTDLSSetupRsp *pFrm, FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), FRFL("txSupDataRate (13): %d\n"), pFrm->VHTCaps.txSupDataRate); FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), FRFL("reserved3 (3): %d\n"), pFrm->VHTCaps.reserved3); } + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), FRFL("OperatingMode:\n")); + if (!pFrm->OperatingMode.present) + { + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), FRFL("Not present.\n")); + } + else + { + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), FRFL("chanWidth (2): %d\n"), pFrm->OperatingMode.chanWidth); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), FRFL("reserved (2): %d\n"), pFrm->OperatingMode.reserved); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), FRFL("rxNSS (3): %d\n"), pFrm->OperatingMode.rxNSS); + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), FRFL("rxNSSType (1): %d\n"), pFrm->OperatingMode.rxNSSType); + } FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), FRFL("to:\n")); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSSETUPRSP), pBuf, nBuf); } @@ -44014,6 +44682,18 @@ tANI_U32 dot11fPackTDLSTeardown(tpAniSirGlobal pCtx, tDot11fTDLSTeardown *pFrm, FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSTEARDOWN), FRFL("num_PMK_R0_ID: %d.\n"), pFrm->FTInfo.R0KH_ID.num_PMK_R0_ID); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSTEARDOWN), ( tANI_U8* ) pFrm->FTInfo.R0KH_ID.PMK_R0_ID, pFrm->FTInfo.R0KH_ID.num_PMK_R0_ID); } + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSTEARDOWN), FRFL("IGTK:\n")); + if (!pFrm->FTInfo.IGTK.present) + { + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSTEARDOWN), FRFL("Not present.\n")); + } + else + { + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSTEARDOWN), ( tANI_U8* )&pFrm->FTInfo.IGTK.keyID, 2); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSTEARDOWN), ( tANI_U8* )&pFrm->FTInfo.IGTK.IPN, 6); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSTEARDOWN), ( tANI_U8* )&pFrm->FTInfo.IGTK.keyLength, 1); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSTEARDOWN), ( tANI_U8* )&pFrm->FTInfo.IGTK.key, 24); + } } FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_TDLSTEARDOWN), FRFL("LinkIdentifier:\n")); if (!pFrm->LinkIdentifier.present) @@ -44420,12 +45100,18 @@ static tANI_U32 PackCore(tpAniSirGlobal pCtx, case SigFfDialogToken: dot11fPackFfDialogToken(pCtx, (tDot11fFfDialogToken* )(pSrc + pFf->offset), pBufRemaining); break; + case SigFfLeader: + dot11fPackFfLeader(pCtx, (tDot11fFfLeader* )(pSrc + pFf->offset), pBufRemaining); + break; case SigFfLinkMargin: dot11fPackFfLinkMargin(pCtx, (tDot11fFfLinkMargin* )(pSrc + pFf->offset), pBufRemaining); break; case SigFfListenInterval: dot11fPackFfListenInterval(pCtx, (tDot11fFfListenInterval* )(pSrc + pFf->offset), pBufRemaining); break; + case SigFfMagicCode: + dot11fPackFfMagicCode(pCtx, (tDot11fFfMagicCode* )(pSrc + pFf->offset), pBufRemaining); + break; case SigFfMaxTxPower: dot11fPackFfMaxTxPower(pCtx, (tDot11fFfMaxTxPower* )(pSrc + pFf->offset), pBufRemaining); break; @@ -44444,6 +45130,15 @@ static tANI_U32 PackCore(tpAniSirGlobal pCtx, case SigFfRCPI: dot11fPackFfRCPI(pCtx, (tDot11fFfRCPI* )(pSrc + pFf->offset), pBufRemaining); break; + case SigFfRMCDialogToken: + dot11fPackFfRMCDialogToken(pCtx, (tDot11fFfRMCDialogToken* )(pSrc + pFf->offset), pBufRemaining); + break; + case SigFfRMCOUI: + dot11fPackFfRMCOUI(pCtx, (tDot11fFfRMCOUI* )(pSrc + pFf->offset), pBufRemaining); + break; + case SigFfRMCVersion: + dot11fPackFfRMCVersion(pCtx, (tDot11fFfRMCVersion* )(pSrc + pFf->offset), pBufRemaining); + break; case SigFfRSNI: dot11fPackFfRSNI(pCtx, (tDot11fFfRSNI* )(pSrc + pFf->offset), pBufRemaining); break; @@ -44506,7 +45201,7 @@ static tANI_U32 PackCore(tpAniSirGlobal pCtx, pIe = &( IEs[0] ); while ( 0xff != pIe->eid ) { - pfFound = (tFRAMES_BOOL*)(pSrc + pIe->offset + + pfFound = (tFRAMES_BOOL*)(pSrc + pIe->offset + pIe->presenceOffset); if ( *pfFound && pIe->minSize > nBufRemaining ) { @@ -44538,6 +45233,9 @@ static tANI_U32 PackCore(tpAniSirGlobal pCtx, case SigIeHCF: status |= dot11fPackIeHCF(pCtx, ( tDot11fIEHCF* )(pSrc + pIe->offset + sizeof(tDot11fIEHCF) * i ), pBufRemaining, nBufRemaining, &len); break; + case SigIeIGTK: + status |= dot11fPackIeIGTK(pCtx, ( tDot11fIEIGTK* )(pSrc + pIe->offset + sizeof(tDot11fIEIGTK) * i ), pBufRemaining, nBufRemaining, &len); + break; case SigIeLLAttr: status |= dot11fPackIeLLAttr(pCtx, ( tDot11fIELLAttr* )(pSrc + pIe->offset + sizeof(tDot11fIELLAttr) * i ), pBufRemaining, nBufRemaining, &len); break; @@ -44748,6 +45446,9 @@ static tANI_U32 PackCore(tpAniSirGlobal pCtx, case SigIeOperatingMode: status |= dot11fPackIeOperatingMode(pCtx, ( tDot11fIEOperatingMode* )(pSrc + pIe->offset + sizeof(tDot11fIEOperatingMode) * i ), pBufRemaining, nBufRemaining, &len); break; + case SigIeOxygenNetwork: + status |= dot11fPackIeOxygenNetwork(pCtx, ( tDot11fIEOxygenNetwork* )(pSrc + pIe->offset + sizeof(tDot11fIEOxygenNetwork) * i ), pBufRemaining, nBufRemaining, &len); + break; case SigIeP2PAssocReq: status |= dot11fPackIeP2PAssocReq(pCtx, ( tDot11fIEP2PAssocReq* )(pSrc + pIe->offset + sizeof(tDot11fIEP2PAssocReq) * i ), pBufRemaining, nBufRemaining, &len); break; diff --git a/CORE/SYS/legacy/src/utils/src/logApi.c b/CORE/SYS/legacy/src/utils/src/logApi.c index 398c0201903d..0723626d0402 100644 --- a/CORE/SYS/legacy/src/utils/src/logApi.c +++ b/CORE/SYS/legacy/src/utils/src/logApi.c @@ -137,7 +137,7 @@ void logDbg(tpAniSirGlobal pMac, tANI_U8 modId, tANI_U32 debugLevel, const char #endif } -static inline VOS_TRACE_LEVEL getVosDebugLevel(tANI_U32 debugLevel) + VOS_TRACE_LEVEL getVosDebugLevel(tANI_U32 debugLevel) { switch(debugLevel) { @@ -167,10 +167,11 @@ static inline VOS_MODULE_ID getVosModuleId(tANI_U8 modId) case SIR_HAL_MODULE_ID: case SIR_PHY_MODULE_ID: return VOS_MODULE_ID_WDA; + case SIR_PMM_MODULE_ID: + return VOS_MODULE_ID_PMC; case SIR_LIM_MODULE_ID: case SIR_SCH_MODULE_ID: - case SIR_PMM_MODULE_ID: case SIR_CFG_MODULE_ID: case SIR_MNT_MODULE_ID: case SIR_DPH_MODULE_ID: diff --git a/CORE/SYS/legacy/src/utils/src/logDump.c b/CORE/SYS/legacy/src/utils/src/logDump.c index 5aa15fb1340a..a71ea22b6a0a 100644 --- a/CORE/SYS/legacy/src/utils/src/logDump.c +++ b/CORE/SYS/legacy/src/utils/src/logDump.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /*============================================================================ Copyright (c) 2007 Qualcomm Technologies, Inc. All Rights Reserved. @@ -89,6 +88,10 @@ logDump.c #include "wlan_qct_wda.h" #define HAL_LOG_DUMP_CMD_START 0 + +/* Dump command id for Host modules starts from 300 onwards, + * hence do not extend the HAL commands beyond 300. + */ #define HAL_LOG_DUMP_CMD_END 299 static int debug; diff --git a/CORE/SYS/legacy/src/utils/src/macTrace.c b/CORE/SYS/legacy/src/utils/src/macTrace.c index cb8e61094412..ba3e98a4e312 100644 --- a/CORE/SYS/legacy/src/utils/src/macTrace.c +++ b/CORE/SYS/legacy/src/utils/src/macTrace.c @@ -45,6 +45,14 @@ #include "macTrace.h" #include "wlan_qct_wda.h" + +#include "wlan_hdd_assoc.h" +#include "wlan_hdd_main.h" +#include "wlan_hdd_p2p.h" +#include "csrNeighborRoam.h" +#include "csrInternal.h" +#include "limGlobal.h" +#include "wlan_qct_tl.h" #include "vos_memory.h" #ifdef TRACE_RECORD @@ -52,9 +60,262 @@ static tTraceRecord gTraceTbl[MAX_TRACE_RECORDS]; static tTraceData gTraceData; static tpTraceCb traceCBTable[VOS_MODULE_ID_MAX]; +/* --------------------------------------------------------------------------- + \fn macTraceGetHDDWlanConnState + \function to get string equivalent of a value + from the enum eConnectionState. + + \param connState - the value from the enum + \return the string equivalent of connState + ---------------------------------------------------------------------------*/ +tANI_U8* macTraceGetHDDWlanConnState(tANI_U16 connState) +{ + switch(connState) + { + CASE_RETURN_STRING(eConnectionState_NotConnected); + CASE_RETURN_STRING(eConnectionState_Connecting); + CASE_RETURN_STRING(eConnectionState_Associated); + CASE_RETURN_STRING(eConnectionState_IbssDisconnected); + CASE_RETURN_STRING(eConnectionState_IbssConnected); + CASE_RETURN_STRING(eConnectionState_Disconnecting); + + default: + return( (tANI_U8*)"UNKNOWN" ); + break; + } +} + +/* --------------------------------------------------------------------------- + \fn macTraceGetP2PConnState + \function to get string equivalent of a value + from the enum tP2PConnectionStatus. + + \param connState - the value from the enum + \return the string equivalent of connState + ---------------------------------------------------------------------------*/ +#ifdef WLAN_FEATURE_P2P_DEBUG +tANI_U8* macTraceGetP2PConnState(tANI_U16 connState) +{ + switch(connState) + { + CASE_RETURN_STRING(P2P_NOT_ACTIVE); + CASE_RETURN_STRING(P2P_GO_NEG_PROCESS); + CASE_RETURN_STRING(P2P_GO_NEG_COMPLETED); + CASE_RETURN_STRING(P2P_CLIENT_CONNECTING_STATE_1); + CASE_RETURN_STRING(P2P_GO_COMPLETED_STATE); + CASE_RETURN_STRING(P2P_CLIENT_CONNECTED_STATE_1); + CASE_RETURN_STRING(P2P_CLIENT_DISCONNECTED_STATE); + CASE_RETURN_STRING(P2P_CLIENT_CONNECTING_STATE_2); + CASE_RETURN_STRING(P2P_CLIENT_COMPLETED_STATE); + + default: + return( (tANI_U8*)"UNKNOWN" ); + break; + } +} +#endif + +/* --------------------------------------------------------------------------- + \fn macTraceGetNeighbourRoamState + \function to get string equivalent of a value + from the enum eCsrNeighborRoamState. + + \param neighbourRoamState - the value from the enum + \return the string equivalent of neighbourRoamState + ---------------------------------------------------------------------------*/ +tANI_U8* macTraceGetNeighbourRoamState(tANI_U16 neighbourRoamState) +{ + switch(neighbourRoamState) + { + CASE_RETURN_STRING(eCSR_NEIGHBOR_ROAM_STATE_CLOSED); + CASE_RETURN_STRING(eCSR_NEIGHBOR_ROAM_STATE_INIT); + CASE_RETURN_STRING(eCSR_NEIGHBOR_ROAM_STATE_CONNECTED); + CASE_RETURN_STRING(eCSR_NEIGHBOR_ROAM_STATE_CFG_CHAN_LIST_SCAN); + CASE_RETURN_STRING(eCSR_NEIGHBOR_ROAM_STATE_REASSOCIATING); + #ifdef WLAN_FEATURE_VOWIFI_11R + CASE_RETURN_STRING(eCSR_NEIGHBOR_ROAM_STATE_REPORT_QUERY); + CASE_RETURN_STRING(eCSR_NEIGHBOR_ROAM_STATE_REPORT_SCAN); + CASE_RETURN_STRING(eCSR_NEIGHBOR_ROAM_STATE_PREAUTHENTICATING); + CASE_RETURN_STRING(eCSR_NEIGHBOR_ROAM_STATE_PREAUTH_DONE); + #endif /* WLAN_FEATURE_VOWIFI_11R */ + CASE_RETURN_STRING(eNEIGHBOR_STATE_MAX); + + default: + return( (tANI_U8*)"UNKNOWN" ); + break; + } +} + +/* --------------------------------------------------------------------------- + \fn macTraceGetcsrRoamState + \function to get string equivalent of a value + from the enum eCsrRoamState. + + \param csrRoamState - the value from the enum + \return the string equivalent of csrRoamState + ---------------------------------------------------------------------------*/ +tANI_U8* macTraceGetcsrRoamState(tANI_U16 csrRoamState) +{ + switch(csrRoamState) + { + CASE_RETURN_STRING(eCSR_ROAMING_STATE_STOP); + CASE_RETURN_STRING(eCSR_ROAMING_STATE_IDLE); + CASE_RETURN_STRING(eCSR_ROAMING_STATE_SCANNING); + CASE_RETURN_STRING(eCSR_ROAMING_STATE_JOINING); + CASE_RETURN_STRING(eCSR_ROAMING_STATE_JOINED); + + default: + return( (tANI_U8*)"UNKNOWN" ); + break; + } +} + +/* --------------------------------------------------------------------------- + \fn macTraceGetcsrRoamSubState + \function to get string equivalent of a value + from the enum eCsrRoamSubState. + + \param csrRoamSubState - the value from the enum + \return the string equivalent of csrRoamSubState + ---------------------------------------------------------------------------*/ +tANI_U8* macTraceGetcsrRoamSubState(tANI_U16 csrRoamSubState) +{ + switch(csrRoamSubState) + { + CASE_RETURN_STRING(eCSR_ROAM_SUBSTATE_NONE); + CASE_RETURN_STRING(eCSR_ROAM_SUBSTATE_START_BSS_REQ); + CASE_RETURN_STRING(eCSR_ROAM_SUBSTATE_JOIN_REQ); + CASE_RETURN_STRING(eCSR_ROAM_SUBSTATE_REASSOC_REQ); + CASE_RETURN_STRING(eCSR_ROAM_SUBSTATE_DISASSOC_REQ); + CASE_RETURN_STRING(eCSR_ROAM_SUBSTATE_STOP_BSS_REQ); + CASE_RETURN_STRING(eCSR_ROAM_SUBSTATE_DISCONNECT_CONTINUE_ROAMING); + CASE_RETURN_STRING(eCSR_ROAM_SUBSTATE_AUTH_REQ); + CASE_RETURN_STRING(eCSR_ROAM_SUBSTATE_CONFIG); + CASE_RETURN_STRING(eCSR_ROAM_SUBSTATE_DEAUTH_REQ); + CASE_RETURN_STRING(eCSR_ROAM_SUBSTATE_DISASSOC_NOTHING_TO_JOIN); + CASE_RETURN_STRING(eCSR_ROAM_SUBSTATE_DISASSOC_REASSOC_FAILURE); + CASE_RETURN_STRING(eCSR_ROAM_SUBSTATE_DISASSOC_FORCED); + CASE_RETURN_STRING(eCSR_ROAM_SUBSTATE_WAIT_FOR_KEY); + CASE_RETURN_STRING(eCSR_ROAM_SUBSTATE_DISASSOC_HANDOFF); + CASE_RETURN_STRING(eCSR_ROAM_SUBSTATE_JOINED_NO_TRAFFIC); + CASE_RETURN_STRING(eCSR_ROAM_SUBSTATE_JOINED_NON_REALTIME_TRAFFIC); + CASE_RETURN_STRING(eCSR_ROAM_SUBSTATE_JOINED_REALTIME_TRAFFIC); + + default: + return( (tANI_U8*)"UNKNOWN" ); + break; + } +} + +/* --------------------------------------------------------------------------- + \fn macTraceGetLimSmeState + \function to get string equivalent of a value + from the enum tLimSmeStates. + \param limState - the value from the enum + \return the string equivalent of limState + ---------------------------------------------------------------------------*/ +tANI_U8* macTraceGetLimSmeState(tANI_U16 limState) +{ + switch(limState) + { + CASE_RETURN_STRING(eLIM_SME_OFFLINE_STATE); + CASE_RETURN_STRING(eLIM_SME_IDLE_STATE); + CASE_RETURN_STRING(eLIM_SME_SUSPEND_STATE); + CASE_RETURN_STRING(eLIM_SME_WT_SCAN_STATE); + CASE_RETURN_STRING(eLIM_SME_WT_JOIN_STATE); + CASE_RETURN_STRING(eLIM_SME_WT_AUTH_STATE); + CASE_RETURN_STRING(eLIM_SME_WT_ASSOC_STATE); + CASE_RETURN_STRING(eLIM_SME_WT_REASSOC_STATE); + CASE_RETURN_STRING(eLIM_SME_WT_REASSOC_LINK_FAIL_STATE); + CASE_RETURN_STRING(eLIM_SME_JOIN_FAILURE_STATE); + CASE_RETURN_STRING(eLIM_SME_ASSOCIATED_STATE); + CASE_RETURN_STRING(eLIM_SME_REASSOCIATED_STATE); + CASE_RETURN_STRING(eLIM_SME_LINK_EST_STATE); + CASE_RETURN_STRING(eLIM_SME_LINK_EST_WT_SCAN_STATE); + CASE_RETURN_STRING(eLIM_SME_WT_PRE_AUTH_STATE); + CASE_RETURN_STRING(eLIM_SME_WT_DISASSOC_STATE); + CASE_RETURN_STRING(eLIM_SME_WT_DEAUTH_STATE); + CASE_RETURN_STRING(eLIM_SME_WT_START_BSS_STATE); + CASE_RETURN_STRING(eLIM_SME_WT_STOP_BSS_STATE); + CASE_RETURN_STRING(eLIM_SME_NORMAL_STATE); + CASE_RETURN_STRING(eLIM_SME_CHANNEL_SCAN_STATE); + CASE_RETURN_STRING(eLIM_SME_NORMAL_CHANNEL_SCAN_STATE); + default: + return( (tANI_U8*)"UNKNOWN" ); + break; + } +} +/* --------------------------------------------------------------------------- + \fn macTraceGetLimMlmState + \function to get string equivalent of a value + from the enum tLimMlmStates. + + \param mlmState - the value from the enum + \return the string equivalent of mlmState + ---------------------------------------------------------------------------*/ +tANI_U8* macTraceGetLimMlmState(tANI_U16 mlmState) +{ + switch(mlmState) + { + CASE_RETURN_STRING(eLIM_MLM_OFFLINE_STATE); + CASE_RETURN_STRING(eLIM_MLM_IDLE_STATE); + CASE_RETURN_STRING(eLIM_MLM_WT_PROBE_RESP_STATE); + CASE_RETURN_STRING(eLIM_MLM_PASSIVE_SCAN_STATE); + CASE_RETURN_STRING(eLIM_MLM_WT_JOIN_BEACON_STATE); + CASE_RETURN_STRING(eLIM_MLM_JOINED_STATE); + CASE_RETURN_STRING(eLIM_MLM_BSS_STARTED_STATE); + CASE_RETURN_STRING(eLIM_MLM_WT_AUTH_FRAME2_STATE); + CASE_RETURN_STRING(eLIM_MLM_WT_AUTH_FRAME3_STATE); + CASE_RETURN_STRING(eLIM_MLM_WT_AUTH_FRAME4_STATE); + CASE_RETURN_STRING(eLIM_MLM_AUTH_RSP_TIMEOUT_STATE); + CASE_RETURN_STRING(eLIM_MLM_AUTHENTICATED_STATE); + CASE_RETURN_STRING(eLIM_MLM_WT_ASSOC_RSP_STATE); + CASE_RETURN_STRING(eLIM_MLM_WT_REASSOC_RSP_STATE); + CASE_RETURN_STRING(eLIM_MLM_ASSOCIATED_STATE); + CASE_RETURN_STRING(eLIM_MLM_REASSOCIATED_STATE); + CASE_RETURN_STRING(eLIM_MLM_LINK_ESTABLISHED_STATE); + CASE_RETURN_STRING(eLIM_MLM_WT_ASSOC_CNF_STATE); + CASE_RETURN_STRING(eLIM_MLM_LEARN_STATE); + CASE_RETURN_STRING(eLIM_MLM_WT_ADD_BSS_RSP_STATE); + CASE_RETURN_STRING(eLIM_MLM_WT_DEL_BSS_RSP_STATE); + CASE_RETURN_STRING(eLIM_MLM_WT_ADD_BSS_RSP_ASSOC_STATE); + CASE_RETURN_STRING(eLIM_MLM_WT_ADD_BSS_RSP_REASSOC_STATE); + CASE_RETURN_STRING(eLIM_MLM_WT_ADD_BSS_RSP_PREASSOC_STATE); + CASE_RETURN_STRING(eLIM_MLM_WT_ADD_STA_RSP_STATE); + CASE_RETURN_STRING(eLIM_MLM_WT_DEL_STA_RSP_STATE); + + default: + return( (tANI_U8*)"UNKNOWN" ); + break; + } +} + +/* --------------------------------------------------------------------------- + \fn macTraceGetTLState + \function to get string equivalent of a value + from the enum WLANTL_STAStateType. + + \param tlState - the value from the enum + \return the string equivalent of tlState + ---------------------------------------------------------------------------*/ +tANI_U8* macTraceGetTLState(tANI_U16 tlState) +{ + switch(tlState) + { + CASE_RETURN_STRING(WLANTL_STA_INIT); + CASE_RETURN_STRING(WLANTL_STA_CONNECTED); + CASE_RETURN_STRING(WLANTL_STA_AUTHENTICATED); + CASE_RETURN_STRING(WLANTL_STA_DISCONNECTED); + CASE_RETURN_STRING(WLANTL_STA_MAX_STATE); + + default: + return( (tANI_U8*)"UNKNOWN" ); + break; + } +} tANI_U8* macTraceGetSmeMsgString( tANI_U16 smeMsg ) { @@ -181,7 +442,9 @@ tANI_U8* macTraceGetSmeMsgString( tANI_U16 smeMsg ) CASE_RETURN_STRING(eWNI_SME_ACTION_FRAME_SEND_CNF); CASE_RETURN_STRING(eWNI_SME_ABORT_REMAIN_ON_CHAN_IND); CASE_RETURN_STRING(eWNI_SME_UPDATE_NOA); + CASE_RETURN_STRING(eWNI_SME_CLEAR_DFS_CHANNEL_LIST); CASE_RETURN_STRING(eWNI_SME_PRE_CHANNEL_SWITCH_FULL_POWER); + CASE_RETURN_STRING(eWNI_SME_GET_SNR_REQ); CASE_RETURN_STRING(eWNI_PMC_MSG_TYPES_BEGIN); //General Power Save Messages @@ -245,6 +508,7 @@ tANI_U8* macTraceGetSmeMsgString( tANI_U16 smeMsg ) #endif // FEATURE_WLAN_SCAN_PNO CASE_RETURN_STRING(eWNI_SME_TX_PER_HIT_IND); CASE_RETURN_STRING(eWNI_SME_CHANGE_COUNTRY_CODE); + CASE_RETURN_STRING(eWNI_SME_GENERIC_CHANGE_COUNTRY_CODE); CASE_RETURN_STRING(eWNI_SME_PRE_SWITCH_CHL_IND); CASE_RETURN_STRING(eWNI_SME_POST_SWITCH_CHL_IND); CASE_RETURN_STRING(eWNI_SME_MAX_ASSOC_EXCEEDED); @@ -260,6 +524,8 @@ tANI_U8* macTraceGetSmeMsgString( tANI_U16 smeMsg ) CASE_RETURN_STRING(eWNI_SME_MSG_TYPES_END); CASE_RETURN_STRING(eWNI_SME_GET_ROAM_RSSI_REQ); CASE_RETURN_STRING(eWNI_SME_GET_ROAM_RSSI_RSP); + CASE_RETURN_STRING(eWNI_SME_GET_TSM_STATS_REQ); + CASE_RETURN_STRING(eWNI_SME_GET_TSM_STATS_RSP); default: return( (tANI_U8*)"UNKNOWN" ); break; @@ -486,7 +752,7 @@ tANI_U8* macTraceGetWdaMsgString( tANI_U16 wdaMsg ) CASE_RETURN_STRING(WDA_SET_PNO_CHANGED_IND); #endif // FEATURE_WLAN_SCAN_PNO #ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD - CASE_RETURN_STRING(WDA_START_ROAM_CANDIDATE_LOOKUP_REQ); + CASE_RETURN_STRING(WDA_ROAM_SCAN_OFFLOAD_REQ); #endif #ifdef WLAN_WAKEUP_EVENTS CASE_RETURN_STRING(WDA_WAKE_REASON_IND); @@ -509,6 +775,10 @@ tANI_U8* macTraceGetWdaMsgString( tANI_U16 wdaMsg ) CASE_RETURN_STRING(WDA_UPDATE_OP_MODE); CASE_RETURN_STRING(WDA_UPDATE_MEMBERSHIP); CASE_RETURN_STRING(WDA_UPDATE_USERPOS); +#endif +#ifdef FEATURE_WLAN_BATCH_SCAN + CASE_RETURN_STRING(WDA_SET_BATCH_SCAN_REQ); + CASE_RETURN_STRING(WDA_TRIGGER_BATCH_SCAN_RESULT_IND); #endif default: return((tANI_U8*) "UNKNOWN" ); @@ -561,6 +831,7 @@ tANI_U8* macTraceGetLimMsgString( tANI_U16 limMsg ) #endif CASE_RETURN_STRING(SIR_LIM_REMAIN_CHN_TIMEOUT); CASE_RETURN_STRING(SIR_LIM_INSERT_SINGLESHOT_NOA_TIMEOUT); + CASE_RETURN_STRING(SIR_LIM_CONVERT_ACTIVE_CHANNEL_TO_PASSIVE); #ifdef WMM_APSD CASE_RETURN_STRING(SIR_LIM_WMM_APSD_SP_START_MSG_TYPE ); CASE_RETURN_STRING(SIR_LIM_WMM_APSD_SP_END_MSG_TYPE ); diff --git a/CORE/SYS/legacy/src/utils/src/parserApi.c b/CORE/SYS/legacy/src/utils/src/parserApi.c index 9d9a478533c4..c195e940c6aa 100644 --- a/CORE/SYS/legacy/src/utils/src/parserApi.c +++ b/CORE/SYS/legacy/src/utils/src/parserApi.c @@ -346,7 +346,7 @@ PopulateDot11fCountry(tpAniSirGlobal pMac, CFG_GET_STR( nSirStatus, pMac, WNI_CFG_COUNTRY_CODE, code, codelen, 3 ); - palCopyMemory( pMac->hHdd, pDot11f->country, code, codelen ); + vos_mem_copy( pDot11f->country, code, codelen ); if(len > MAX_SIZE_OF_TRIPLETS_IN_COUNTRY_IE) { @@ -355,7 +355,7 @@ PopulateDot11fCountry(tpAniSirGlobal pMac, } pDot11f->num_triplets = ( tANI_U8 ) ( len / 3 ); - palCopyMemory( pMac->hHdd, ( tANI_U8* )pDot11f->triplets, temp, len ); + vos_mem_copy( ( tANI_U8* )pDot11f->triplets, temp, len ); pDot11f->present = 1; } @@ -368,13 +368,7 @@ PopulateDot11fDSParams(tpAniSirGlobal pMac, tDot11fIEDSParams *pDot11f, tANI_U8 channel, tpPESession psessionEntry) { -// tSirRetStatus nSirStatus; - tANI_U32 nPhyMode; - - // Get PHY mode and based on that add DS Parameter Set IE - limGetPhyMode(pMac, &nPhyMode, psessionEntry); - - if ( (WNI_CFG_PHY_MODE_11A != nPhyMode) || pMac->rrm.rrmPEContext.rrmEnable ) + if ((IS_24G_CH(channel)) || pMac->rrm.rrmPEContext.rrmEnable) { // .11b/g mode PHY => Include the DS Parameter Set IE: pDot11f->curr_channel = channel; @@ -502,7 +496,7 @@ PopulateDot11fExtSuppRates(tpAniSirGlobal pMac, tANI_U8 nChannelNum, if(psessionEntry != NULL) { nRates = psessionEntry->extRateSet.numRates; - palCopyMemory(pMac->hHdd, rates, psessionEntry->extRateSet.rate, + vos_mem_copy( rates, psessionEntry->extRateSet.rate, nRates); } else @@ -520,7 +514,7 @@ PopulateDot11fExtSuppRates(tpAniSirGlobal pMac, tANI_U8 nChannelNum, if ( 0 != nRates ) { pDot11f->num_rates = ( tANI_U8 )nRates; - palCopyMemory( pMac->hHdd, pDot11f->rates, rates, nRates ); + vos_mem_copy( pDot11f->rates, rates, nRates ); pDot11f->present = 1; } @@ -552,7 +546,7 @@ PopulateDot11fExtSuppRates1(tpAniSirGlobal pMac, if ( 0 != nRates ) { pDot11f->num_rates = ( tANI_U8 ) nRates; - palCopyMemory( pMac->hHdd, pDot11f->rates, rates, nRates ); + vos_mem_copy( pDot11f->rates, rates, nRates ); pDot11f->present = 1; } @@ -642,6 +636,20 @@ PopulateDot11fHTCaps(tpAniSirGlobal pMac, pDot11f->supportedMCSSet, nCfgLen, SIZE_OF_SUPPORTED_MCS_SET ); + if (psessionEntry) + { + if (pMac->lteCoexAntShare && (IS_24G_CH(psessionEntry->currentOperChannel))) + { + if(!(IS_2X2_CHAIN(psessionEntry->chainMask))) + { + pDot11f->supportedMCSSet[1] = 0; + if (psessionEntry->limSystemRole == eLIM_STA_ROLE) + { + pDot11f->mimoPowerSave = psessionEntry->smpsMode; + } + } + } + } CFG_GET_INT( nSirStatus, pMac, WNI_CFG_EXT_HT_CAP_INFO, nCfgValue ); @@ -780,35 +788,63 @@ PopulateDot11fVHTCaps(tpAniSirGlobal pMac, nCfgValue = 0; //With VHT it suffices if we just examine HT - if (psessionEntry->htConfig.ht_rx_ldpc) - CFG_GET_INT( nStatus, pMac, WNI_CFG_VHT_LDPC_CODING_CAP, nCfgValue ); + if (psessionEntry) + { + if (psessionEntry->htConfig.ht_rx_ldpc) + CFG_GET_INT( nStatus, pMac, WNI_CFG_VHT_LDPC_CODING_CAP, + nCfgValue ); - pDot11f->ldpcCodingCap = (nCfgValue & 0x0001); + pDot11f->ldpcCodingCap = (nCfgValue & 0x0001); - nCfgValue = 0; - if (psessionEntry->htConfig.ht_sgi) - CFG_GET_INT( nStatus, pMac, WNI_CFG_VHT_SHORT_GI_80MHZ, nCfgValue ); + nCfgValue = 0; + if (psessionEntry->htConfig.ht_sgi) + CFG_GET_INT( nStatus, pMac, WNI_CFG_VHT_SHORT_GI_80MHZ, + nCfgValue ); - pDot11f->shortGI80MHz= (nCfgValue & 0x0001); + pDot11f->shortGI80MHz= (nCfgValue & 0x0001); - nCfgValue = 0; - if (psessionEntry->htConfig.ht_sgi) - CFG_GET_INT( nStatus, pMac, WNI_CFG_VHT_SHORT_GI_160_AND_80_PLUS_80MHZ, - nCfgValue ); + nCfgValue = 0; + if (psessionEntry->htConfig.ht_sgi) + CFG_GET_INT( nStatus, pMac, + WNI_CFG_VHT_SHORT_GI_160_AND_80_PLUS_80MHZ, + nCfgValue ); - pDot11f->shortGI160and80plus80MHz = (nCfgValue & 0x0001); + pDot11f->shortGI160and80plus80MHz = (nCfgValue & 0x0001); - nCfgValue = 0; - if (psessionEntry->htConfig.ht_rx_stbc) - CFG_GET_INT( nStatus, pMac, WNI_CFG_VHT_TXSTBC, nCfgValue ); + nCfgValue = 0; + if (psessionEntry->htConfig.ht_rx_stbc) + CFG_GET_INT( nStatus, pMac, WNI_CFG_VHT_TXSTBC, nCfgValue ); - pDot11f->txSTBC = (nCfgValue & 0x0001); + pDot11f->txSTBC = (nCfgValue & 0x0001); - nCfgValue = 0; - if (psessionEntry->htConfig.ht_tx_stbc) - CFG_GET_INT( nStatus, pMac, WNI_CFG_VHT_RXSTBC, nCfgValue ); + nCfgValue = 0; + if (psessionEntry->htConfig.ht_tx_stbc) + CFG_GET_INT( nStatus, pMac, WNI_CFG_VHT_RXSTBC, nCfgValue ); + + pDot11f->rxSTBC = (nCfgValue & 0x0007); + } + else + { + CFG_GET_INT( nStatus, pMac, WNI_CFG_VHT_LDPC_CODING_CAP, nCfgValue ); + pDot11f->ldpcCodingCap = (nCfgValue & 0x0001); - pDot11f->rxSTBC = (nCfgValue & 0x0007); + nCfgValue = 0; + CFG_GET_INT( nStatus, pMac, WNI_CFG_VHT_SHORT_GI_80MHZ, nCfgValue ); + pDot11f->shortGI80MHz= (nCfgValue & 0x0001); + + nCfgValue = 0; + CFG_GET_INT( nStatus, pMac, WNI_CFG_VHT_SHORT_GI_160_AND_80_PLUS_80MHZ, + nCfgValue ); + pDot11f->shortGI160and80plus80MHz = (nCfgValue & 0x0001); + + nCfgValue = 0; + CFG_GET_INT( nStatus, pMac, WNI_CFG_VHT_TXSTBC, nCfgValue ); + pDot11f->txSTBC = (nCfgValue & 0x0001); + + nCfgValue = 0; + CFG_GET_INT( nStatus, pMac, WNI_CFG_VHT_RXSTBC, nCfgValue ); + pDot11f->rxSTBC = (nCfgValue & 0x0007); + } nCfgValue = 0; CFG_GET_INT( nStatus, pMac, WNI_CFG_VHT_SU_BEAMFORMER_CAP, nCfgValue ); @@ -876,6 +912,17 @@ PopulateDot11fVHTCaps(tpAniSirGlobal pMac, nCfgValue = 0; CFG_GET_INT( nStatus, pMac, WNI_CFG_VHT_TX_MCS_MAP, nCfgValue ); pDot11f->txMCSMap = (nCfgValue & 0x0000FFFF); + if (psessionEntry) + { + if (pMac->lteCoexAntShare && (IS_24G_CH(psessionEntry->currentOperChannel))) + { + if(!(IS_2X2_CHAIN(psessionEntry->chainMask))) + { + pDot11f->txMCSMap |= DISABLE_NSS2_MCS; + pDot11f->rxMCSMap |= DISABLE_NSS2_MCS; + } + } + } nCfgValue = 0; CFG_GET_INT( nStatus, pMac, WNI_CFG_VHT_TX_HIGHEST_SUPPORTED_DATA_RATE, @@ -1283,7 +1330,7 @@ tSirRetStatus PopulateDot11fRSNOpaque( tpAniSirGlobal pMac, { pDot11f->present = 1; pDot11f->num_data = pRsnIe->rsnIEdata[ idx + 1 ]; - palCopyMemory( pMac->hHdd, pDot11f->data, + vos_mem_copy( pDot11f->data, pRsnIe->rsnIEdata + idx + 2, // EID, len pRsnIe->rsnIEdata[ idx + 1 ] ); } @@ -1339,7 +1386,7 @@ tSirRetStatus PopulateDot11fWAPIOpaque( tpAniSirGlobal pMac, { pDot11f->present = 1; pDot11f->num_data = pRsnIe->rsnIEdata[ idx + 1 ]; - palCopyMemory( pMac->hHdd, pDot11f->data, + vos_mem_copy ( pDot11f->data, pRsnIe->rsnIEdata + idx + 2, // EID, len pRsnIe->rsnIEdata[ idx + 1 ] ); } @@ -1361,7 +1408,7 @@ PopulateDot11fSSID(tpAniSirGlobal pMac, pDot11f->num_ssid = pInternal->length; if ( pInternal->length ) { - palCopyMemory( pMac->hHdd, ( tANI_U8* )pDot11f->ssid, ( tANI_U8* )&pInternal->ssId, + vos_mem_copy( ( tANI_U8* )pDot11f->ssid, ( tANI_U8* )&pInternal->ssId, pInternal->length ); } } // End PopulateDot11fSSID. @@ -1445,7 +1492,7 @@ PopulateDot11fSuppRates(tpAniSirGlobal pMac, if(psessionEntry != NULL) { nRates = psessionEntry->rateSet.numRates; - palCopyMemory(pMac->hHdd, rates, psessionEntry->rateSet.rate, + vos_mem_copy( rates, psessionEntry->rateSet.rate, nRates); } else @@ -1468,7 +1515,7 @@ PopulateDot11fSuppRates(tpAniSirGlobal pMac, if ( 0 != nRates ) { pDot11f->num_rates = ( tANI_U8 )nRates; - palCopyMemory( pMac->hHdd, pDot11f->rates, rates, nRates ); + vos_mem_copy( pDot11f->rates, rates, nRates ); pDot11f->present = 1; } @@ -1752,7 +1799,7 @@ tSirRetStatus PopulateDot11fWPAOpaque( tpAniSirGlobal pMac, { pDot11f->present = 1; pDot11f->num_data = pRsnIe->rsnIEdata[ idx + 1 ] - 4; - palCopyMemory( pMac->hHdd, pDot11f->data, + vos_mem_copy( pDot11f->data, pRsnIe->rsnIEdata + idx + 2 + 4, // EID, len, OUI pRsnIe->rsnIEdata[ idx + 1 ] - 4 ); // OUI } @@ -1798,7 +1845,7 @@ sirConvertProbeReqFrame2Struct(tpAniSirGlobal pMac, tDot11fProbeRequest pr; // Ok, zero-init our [out] parameter, - palZeroMemory( pMac->hHdd, (tANI_U8*)pProbeReq, sizeof(tSirProbeReq)); + vos_mem_set( (tANI_U8*)pProbeReq, sizeof(tSirProbeReq), 0); // delegate to the framesc-generated code, status = dot11fUnpackProbeRequest(pMac, pFrame, nFrame, &pr); @@ -1846,7 +1893,7 @@ sirConvertProbeReqFrame2Struct(tpAniSirGlobal pMac, if ( pr.HTCaps.present ) { - palCopyMemory( pMac, &pProbeReq->HTCaps, &pr.HTCaps, sizeof( tDot11fIEHTCaps ) ); + vos_mem_copy( &pProbeReq->HTCaps, &pr.HTCaps, sizeof( tDot11fIEHTCaps ) ); } if ( pr.WscProbeReq.present ) @@ -1857,7 +1904,7 @@ sirConvertProbeReqFrame2Struct(tpAniSirGlobal pMac, #ifdef WLAN_FEATURE_11AC if ( pr.VHTCaps.present ) { - palCopyMemory( pMac, &pProbeReq->VHTCaps, &pr.VHTCaps, sizeof( tDot11fIEVHTCaps ) ); + vos_mem_copy( &pProbeReq->VHTCaps, &pr.VHTCaps, sizeof( tDot11fIEVHTCaps ) ); } #endif @@ -1880,16 +1927,20 @@ tSirRetStatus sirConvertProbeFrame2Struct(tpAniSirGlobal pMac, tDot11fProbeResponse *pr; // Ok, zero-init our [out] parameter, - palZeroMemory( pMac->hHdd, ( tANI_U8* )pProbeResp, sizeof(tSirProbeRespBeacon) ); + vos_mem_set( ( tANI_U8* )pProbeResp, sizeof(tSirProbeRespBeacon), 0 ); - status = palAllocateMemory(pMac->hHdd, (void **)&pr, sizeof(tDot11fProbeResponse)); - if(!HAL_STATUS_SUCCESS(status)) + pr = vos_mem_malloc(sizeof(tDot11fProbeResponse)); + if ( NULL == pr ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; + if (!HAL_STATUS_SUCCESS(status)) { limLog(pMac, LOGE, FL("Failed to allocate memory\n") ); return eSIR_FAILURE; } - palZeroMemory( pMac->hHdd, ( tANI_U8* )pr, sizeof(tDot11fProbeResponse) ); + vos_mem_set( ( tANI_U8* )pr, sizeof(tDot11fProbeResponse), 0 ); // delegate to the framesc-generated code, status = dot11fUnpackProbeResponse( pMac, pFrame, nFrame, pr ); @@ -1898,7 +1949,7 @@ tSirRetStatus sirConvertProbeFrame2Struct(tpAniSirGlobal pMac, limLog(pMac, LOGE, FL("Failed to parse a Probe Response (0x%08x, %d bytes):\n"), status, nFrame); PELOG2(sirDumpBuf(pMac, SIR_DBG_MODULE_ID, LOG2, pFrame, nFrame);) - palFreeMemory(pMac->hHdd, pr); + vos_mem_free(pr); return eSIR_FAILURE; } else if ( DOT11F_WARNED( status ) ) @@ -1911,7 +1962,8 @@ tSirRetStatus sirConvertProbeFrame2Struct(tpAniSirGlobal pMac, // & "transliterate" from a 'tDot11fProbeResponse' to a 'tSirProbeRespBeacon'... // Timestamp - palCopyMemory( pMac->hHdd, ( tANI_U8* )pProbeResp->timeStamp, ( tANI_U8* )&pr->TimeStamp, sizeof(tSirMacTimeStamp) ); + vos_mem_copy( ( tANI_U8* )pProbeResp->timeStamp, ( tANI_U8* )&pr->TimeStamp, + sizeof(tSirMacTimeStamp) ); // Beacon Interval pProbeResp->beaconInterval = pr->BeaconInterval.interval; @@ -1982,43 +2034,44 @@ tSirRetStatus sirConvertProbeFrame2Struct(tpAniSirGlobal pMac, if ( pr->ChanSwitchAnn.present ) { pProbeResp->channelSwitchPresent = 1; - palCopyMemory( pMac, &pProbeResp->channelSwitchIE, &pr->ChanSwitchAnn, + vos_mem_copy( &pProbeResp->channelSwitchIE, &pr->ChanSwitchAnn, sizeof(tDot11fIEExtChanSwitchAnn) ); } if ( pr->ExtChanSwitchAnn.present ) { pProbeResp->extChannelSwitchPresent = 1; - palCopyMemory( pMac, &pProbeResp->extChannelSwitchIE, &pr->ExtChanSwitchAnn, + vos_mem_copy ( &pProbeResp->extChannelSwitchIE, &pr->ExtChanSwitchAnn, sizeof(tDot11fIEExtChanSwitchAnn) ); } if( pr->TPCReport.present) { pProbeResp->tpcReportPresent = 1; - palCopyMemory(pMac->hHdd, &pProbeResp->tpcReport, &pr->TPCReport, sizeof(tDot11fIETPCReport)); + vos_mem_copy( &pProbeResp->tpcReport, &pr->TPCReport, sizeof(tDot11fIETPCReport)); } if( pr->PowerConstraints.present) { pProbeResp->powerConstraintPresent = 1; - palCopyMemory(pMac->hHdd, &pProbeResp->localPowerConstraint, &pr->PowerConstraints, sizeof(tDot11fIEPowerConstraints)); + vos_mem_copy( &pProbeResp->localPowerConstraint, &pr->PowerConstraints, + sizeof(tDot11fIEPowerConstraints)); } if ( pr->Quiet.present ) { pProbeResp->quietIEPresent = 1; - palCopyMemory( pMac, &pProbeResp->quietIE, &pr->Quiet, sizeof(tDot11fIEQuiet) ); + vos_mem_copy( &pProbeResp->quietIE, &pr->Quiet, sizeof(tDot11fIEQuiet) ); } if ( pr->HTCaps.present ) { - palCopyMemory( pMac, &pProbeResp->HTCaps, &pr->HTCaps, sizeof( tDot11fIEHTCaps ) ); + vos_mem_copy( &pProbeResp->HTCaps, &pr->HTCaps, sizeof( tDot11fIEHTCaps ) ); } if ( pr->HTInfo.present ) { - palCopyMemory( pMac, &pProbeResp->HTInfo, &pr->HTInfo, sizeof( tDot11fIEHTInfo ) ); + vos_mem_copy( &pProbeResp->HTInfo, &pr->HTInfo, sizeof( tDot11fIEHTInfo ) ); } if ( pr->DSParams.present ) @@ -2031,10 +2084,10 @@ tSirRetStatus sirConvertProbeFrame2Struct(tpAniSirGlobal pMac, pProbeResp->channelNumber = pr->HTInfo.primaryChannel; } - if ( pr->RSN.present ) + if ( pr->RSNOpaque.present ) { pProbeResp->rsnPresent = 1; - ConvertRSN( pMac, &pProbeResp->rsn, &pr->RSN ); + ConvertRSNOpaque( pMac, &pProbeResp->rsn, &pr->RSNOpaque ); } if ( pr->WPA.present ) @@ -2074,7 +2127,8 @@ tSirRetStatus sirConvertProbeFrame2Struct(tpAniSirGlobal pMac, { // MobilityDomain pProbeResp->mdiePresent = 1; - palCopyMemory( pMac->hHdd, (tANI_U8 *)&(pProbeResp->mdie[0]), (tANI_U8 *)&(pr->MobilityDomain.MDID), sizeof(tANI_U16) ); + vos_mem_copy( (tANI_U8 *)&(pProbeResp->mdie[0]), (tANI_U8 *)&(pr->MobilityDomain.MDID), + sizeof(tANI_U16) ); pProbeResp->mdie[2] = ((pr->MobilityDomain.overDSCap << 0) | (pr->MobilityDomain.resourceReqCap << 1)); #ifdef WLAN_FEATURE_VOWIFI_11R_DEBUG limLog(pMac, LOG2, FL("mdie=%02x%02x%02x\n"), (unsigned int)pProbeResp->mdie[0], @@ -2086,29 +2140,29 @@ tSirRetStatus sirConvertProbeFrame2Struct(tpAniSirGlobal pMac, #if defined FEATURE_WLAN_CCX if (pr->QBSSLoad.present) { - palCopyMemory(pMac->hHdd, &pProbeResp->QBSSLoad, &pr->QBSSLoad, sizeof(tDot11fIEQBSSLoad)); + vos_mem_copy(&pProbeResp->QBSSLoad, &pr->QBSSLoad, sizeof(tDot11fIEQBSSLoad)); } #endif if (pr->P2PProbeRes.present) { - palCopyMemory( pMac, &pProbeResp->P2PProbeRes, &pr->P2PProbeRes, + vos_mem_copy( &pProbeResp->P2PProbeRes, &pr->P2PProbeRes, sizeof(tDot11fIEP2PProbeRes) ); } #ifdef WLAN_FEATURE_11AC if ( pr->VHTCaps.present ) { - palCopyMemory( pMac, &pProbeResp->VHTCaps, &pr->VHTCaps, sizeof( tDot11fIEVHTCaps ) ); + vos_mem_copy( &pProbeResp->VHTCaps, &pr->VHTCaps, sizeof( tDot11fIEVHTCaps ) ); } if ( pr->VHTOperation.present ) { - palCopyMemory( pMac, &pProbeResp->VHTOperation, &pr->VHTOperation, sizeof( tDot11fIEVHTOperation) ); + vos_mem_copy( &pProbeResp->VHTOperation, &pr->VHTOperation, sizeof( tDot11fIEVHTOperation) ); } if ( pr->VHTExtBssLoad.present ) { - palCopyMemory( pMac, &pProbeResp->VHTExtBssLoad, &pr->VHTExtBssLoad, sizeof( tDot11fIEVHTExtBssLoad) ); + vos_mem_copy( &pProbeResp->VHTExtBssLoad, &pr->VHTExtBssLoad, sizeof( tDot11fIEVHTExtBssLoad) ); } #endif - palFreeMemory(pMac->hHdd, pr); + vos_mem_free(pr); return eSIR_SUCCESS; } // End sirConvertProbeFrame2Struct. @@ -2122,15 +2176,19 @@ sirConvertAssocReqFrame2Struct(tpAniSirGlobal pMac, tDot11fAssocRequest *ar; tANI_U32 status; - status = palAllocateMemory(pMac->hHdd, (void **)&ar, sizeof(tDot11fAssocRequest)); - if(!HAL_STATUS_SUCCESS(status)) + ar = vos_mem_malloc(sizeof(tDot11fAssocRequest)); + if ( NULL == ar ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; + if (!HAL_STATUS_SUCCESS(status)) { limLog(pMac, LOGE, FL("Failed to allocate memory\n") ); return eSIR_FAILURE; } // Zero-init our [out] parameter, - palZeroMemory( pMac->hHdd, ( tANI_U8* )pAssocReq, sizeof(tSirAssocReq) ); - palZeroMemory( pMac->hHdd, ( tANI_U8* )ar, sizeof( tDot11fAssocRequest ) ); + vos_mem_set( ( tANI_U8* )pAssocReq, sizeof(tSirAssocReq), 0 ); + vos_mem_set( ( tANI_U8* )ar, sizeof( tDot11fAssocRequest ), 0 ); // delegate to the framesc-generated code, status = dot11fUnpackAssocRequest( pMac, pFrame, nFrame, ar ); @@ -2139,7 +2197,7 @@ sirConvertAssocReqFrame2Struct(tpAniSirGlobal pMac, limLog(pMac, LOGE, FL("Failed to parse an Association Request (0x%08x, %d bytes):\n"), status, nFrame); PELOG2(sirDumpBuf(pMac, SIR_DBG_MODULE_ID, LOG2, pFrame, nFrame);) - palFreeMemory(pMac->hHdd, ar); + vos_mem_free(ar); return eSIR_FAILURE; } else if ( DOT11F_WARNED( status ) ) @@ -2254,13 +2312,14 @@ sirConvertAssocReqFrame2Struct(tpAniSirGlobal pMac, if ( ar->HTCaps.present ) { - palCopyMemory( pMac, &pAssocReq->HTCaps, &ar->HTCaps, sizeof( tDot11fIEHTCaps ) ); + vos_mem_copy( &pAssocReq->HTCaps, &ar->HTCaps, sizeof( tDot11fIEHTCaps ) ); } if ( ar->WMMInfoStation.present ) { pAssocReq->wmeInfoPresent = 1; - palCopyMemory( pMac, &pAssocReq->WMMInfoStation, &ar->WMMInfoStation, sizeof( tDot11fIEWMMInfoStation ) ); + vos_mem_copy( &pAssocReq->WMMInfoStation, &ar->WMMInfoStation, + sizeof( tDot11fIEWMMInfoStation ) ); } @@ -2270,32 +2329,32 @@ sirConvertAssocReqFrame2Struct(tpAniSirGlobal pMac, if ( ! pAssocReq->ssidPresent ) { PELOG2(limLog(pMac, LOG2, FL("Received Assoc without SSID IE.\n"));) - palFreeMemory(pMac->hHdd, ar); + vos_mem_free(ar); return eSIR_FAILURE; } if ( !pAssocReq->suppRatesPresent && !pAssocReq->extendedRatesPresent ) { PELOG2(limLog(pMac, LOG2, FL("Received Assoc without supp rate IE.\n"));) - palFreeMemory(pMac->hHdd, ar); + vos_mem_free(ar); return eSIR_FAILURE; } #ifdef WLAN_FEATURE_11AC if ( ar->VHTCaps.present ) { - palCopyMemory( pMac, &pAssocReq->VHTCaps, &ar->VHTCaps, sizeof( tDot11fIEVHTCaps ) ); + vos_mem_copy( &pAssocReq->VHTCaps, &ar->VHTCaps, sizeof( tDot11fIEVHTCaps ) ); limLog( pMac, LOGW, FL("Received Assoc Req with VHT Cap\n")); limLogVHTCap( pMac, &pAssocReq->VHTCaps); } if ( ar->OperatingMode.present ) { - palCopyMemory( pMac, &pAssocReq->operMode, &ar->OperatingMode, sizeof (tDot11fIEOperatingMode)); + vos_mem_copy( &pAssocReq->operMode, &ar->OperatingMode, sizeof (tDot11fIEOperatingMode)); limLog( pMac, LOGW, FL("Received Assoc Req with Operating Mode IE\n")); limLogOperatingMode( pMac, &pAssocReq->operMode); } #endif - palFreeMemory(pMac->hHdd, ar); + vos_mem_free(ar); return eSIR_SUCCESS; } // End sirConvertAssocReqFrame2Struct. @@ -2311,7 +2370,7 @@ sirConvertAssocRespFrame2Struct(tpAniSirGlobal pMac, tANI_U8 cnt =0; // Zero-init our [out] parameter, - palZeroMemory( pMac->hHdd, ( tANI_U8* )pAssocRsp, sizeof(tSirAssocRsp) ); + vos_mem_set( ( tANI_U8* )pAssocRsp, sizeof(tSirAssocRsp), 0 ); // delegate to the framesc-generated code, status = dot11fUnpackAssocResponse( pMac, pFrame, nFrame, &ar); @@ -2386,12 +2445,12 @@ sirConvertAssocRespFrame2Struct(tpAniSirGlobal pMac, if ( ar.HTCaps.present ) { - palCopyMemory( pMac, &pAssocRsp->HTCaps, &ar.HTCaps, sizeof( tDot11fIEHTCaps ) ); + vos_mem_copy( &pAssocRsp->HTCaps, &ar.HTCaps, sizeof( tDot11fIEHTCaps ) ); } if ( ar.HTInfo.present ) { - palCopyMemory( pMac, &pAssocRsp->HTInfo, &ar.HTInfo, sizeof( tDot11fIEHTInfo ) ); + vos_mem_copy( &pAssocRsp->HTInfo, &ar.HTInfo, sizeof( tDot11fIEHTInfo ) ); } #ifdef WLAN_FEATURE_VOWIFI_11R @@ -2399,7 +2458,8 @@ sirConvertAssocRespFrame2Struct(tpAniSirGlobal pMac, { // MobilityDomain pAssocRsp->mdiePresent = 1; - palCopyMemory( pMac->hHdd, (tANI_U8 *)&(pAssocRsp->mdie[0]), (tANI_U8 *)&(ar.MobilityDomain.MDID), sizeof(tANI_U16) ); + vos_mem_copy( (tANI_U8 *)&(pAssocRsp->mdie[0]), (tANI_U8 *)&(ar.MobilityDomain.MDID), + sizeof(tANI_U16) ); pAssocRsp->mdie[2] = ((ar.MobilityDomain.overDSCap << 0) | (ar.MobilityDomain.resourceReqCap << 1)); #ifdef WLAN_FEATURE_VOWIFI_11R_DEBUG limLog(pMac, LOG1, FL("new mdie=%02x%02x%02x"), (unsigned int)pAssocRsp->mdie[0], @@ -2415,7 +2475,7 @@ sirConvertAssocRespFrame2Struct(tpAniSirGlobal pMac, ar.FTInfo.R1KH_ID.present); #endif pAssocRsp->ftinfoPresent = 1; - palCopyMemory( pMac, &pAssocRsp->FTInfo, &ar.FTInfo, sizeof(tDot11fIEFTInfo) ); + vos_mem_copy( &pAssocRsp->FTInfo, &ar.FTInfo, sizeof(tDot11fIEFTInfo) ); } #endif @@ -2423,7 +2483,8 @@ sirConvertAssocRespFrame2Struct(tpAniSirGlobal pMac, if (ar.num_RICDataDesc) { for (cnt=0; cnt < ar.num_RICDataDesc; cnt++) { if (ar.RICDataDesc[cnt].present) { - palCopyMemory(pMac, &pAssocRsp->RICData[cnt], &ar.RICDataDesc[cnt], sizeof(tDot11fIERICDataDesc)); + vos_mem_copy( &pAssocRsp->RICData[cnt], &ar.RICDataDesc[cnt], + sizeof(tDot11fIERICDataDesc)); } } pAssocRsp->num_RICData = ar.num_RICDataDesc; @@ -2435,7 +2496,8 @@ sirConvertAssocRespFrame2Struct(tpAniSirGlobal pMac, if (ar.num_WMMTSPEC) { pAssocRsp->num_tspecs = ar.num_WMMTSPEC; for (cnt=0; cnt < ar.num_WMMTSPEC; cnt++) { - palCopyMemory(pMac, &pAssocRsp->TSPECInfo[cnt], &ar.WMMTSPEC[cnt], (sizeof(tDot11fIEWMMTSPEC)*ar.num_WMMTSPEC)); + vos_mem_copy( &pAssocRsp->TSPECInfo[cnt], &ar.WMMTSPEC[cnt], + (sizeof(tDot11fIEWMMTSPEC)*ar.num_WMMTSPEC)); } pAssocRsp->tspecPresent = TRUE; } @@ -2443,7 +2505,7 @@ sirConvertAssocRespFrame2Struct(tpAniSirGlobal pMac, if(ar.CCXTrafStrmMet.present) { pAssocRsp->tsmPresent = 1; - palCopyMemory(pMac->hHdd,&pAssocRsp->tsmIE.tsid, + vos_mem_copy(&pAssocRsp->tsmIE.tsid, &ar.CCXTrafStrmMet.tsid,sizeof(tSirMacCCXTSMIE)); } #endif @@ -2451,13 +2513,13 @@ sirConvertAssocRespFrame2Struct(tpAniSirGlobal pMac, #ifdef WLAN_FEATURE_11AC if ( ar.VHTCaps.present ) { - palCopyMemory( pMac, &pAssocRsp->VHTCaps, &ar.VHTCaps, sizeof( tDot11fIEVHTCaps ) ); + vos_mem_copy( &pAssocRsp->VHTCaps, &ar.VHTCaps, sizeof( tDot11fIEVHTCaps ) ); limLog( pMac, LOG1, FL("Received Assoc Response with VHT Cap")); limLogVHTCap(pMac, &pAssocRsp->VHTCaps); } if ( ar.VHTOperation.present ) { - palCopyMemory( pMac, &pAssocRsp->VHTOperation, &ar.VHTOperation, sizeof( tDot11fIEVHTOperation) ); + vos_mem_copy( &pAssocRsp->VHTOperation, &ar.VHTOperation, sizeof( tDot11fIEVHTOperation) ); limLog( pMac, LOG1, FL("Received Assoc Response with VHT Operation")); limLogVHTOperation(pMac, &pAssocRsp->VHTOperation); } @@ -2477,7 +2539,7 @@ sirConvertReassocReqFrame2Struct(tpAniSirGlobal pMac, tANI_U32 status; // Zero-init our [out] parameter, - palZeroMemory( pMac->hHdd, ( tANI_U8* )pAssocReq, sizeof(tSirAssocReq) ); + vos_mem_set( ( tANI_U8* )pAssocReq, sizeof(tSirAssocReq), 0 ); // delegate to the framesc-generated code, status = dot11fUnpackReAssocRequest( pMac, pFrame, nFrame, &ar ); @@ -2581,13 +2643,14 @@ sirConvertReassocReqFrame2Struct(tpAniSirGlobal pMac, if ( ar.HTCaps.present ) { - palCopyMemory( pMac, &pAssocReq->HTCaps, &ar.HTCaps, sizeof( tDot11fIEHTCaps ) ); + vos_mem_copy( &pAssocReq->HTCaps, &ar.HTCaps, sizeof( tDot11fIEHTCaps ) ); } if ( ar.WMMInfoStation.present ) { pAssocReq->wmeInfoPresent = 1; - palCopyMemory( pMac, &pAssocReq->WMMInfoStation, &ar.WMMInfoStation, sizeof( tDot11fIEWMMInfoStation ) ); + vos_mem_copy( &pAssocReq->WMMInfoStation, &ar.WMMInfoStation, + sizeof( tDot11fIEWMMInfoStation ) ); } @@ -2632,11 +2695,11 @@ sirConvertReassocReqFrame2Struct(tpAniSirGlobal pMac, #ifdef WLAN_FEATURE_11AC if ( ar.VHTCaps.present ) { - palCopyMemory( pMac, &pAssocReq->VHTCaps, &ar.VHTCaps, sizeof( tDot11fIEVHTCaps ) ); + vos_mem_copy( &pAssocReq->VHTCaps, &ar.VHTCaps, sizeof( tDot11fIEVHTCaps ) ); } if ( ar.OperatingMode.present ) { - palCopyMemory( pMac, &pAssocReq->operMode, &ar.OperatingMode, sizeof( tDot11fIEOperatingMode ) ); + vos_mem_copy( &pAssocReq->operMode, &ar.OperatingMode, sizeof( tDot11fIEOperatingMode ) ); limLog( pMac, LOGW, FL("Received Assoc Req with Operating Mode IE\n")); limLogOperatingMode( pMac, &pAssocReq->operMode); } @@ -2645,6 +2708,202 @@ sirConvertReassocReqFrame2Struct(tpAniSirGlobal pMac, } // End sirConvertReassocReqFrame2Struct. + +#if defined(FEATURE_WLAN_CCX_UPLOAD) +tSirRetStatus +sirFillBeaconMandatoryIEforCcxBcnReport(tpAniSirGlobal pMac, + tANI_U8 *pPayload, + const tANI_U32 nPayload, + tANI_U8 **outIeBuf, + tANI_U32 *pOutIeLen) +{ + tDot11fBeaconIEs *pBies = NULL; + tANI_U32 status = eHAL_STATUS_SUCCESS; + tSirCcxBcnReportMandatoryIe ccxBcnReportMandatoryIe; + + /* To store how many bytes are required to be allocated + for Bcn report mandatory Ies */ + tANI_U16 numBytes = 0; + tANI_U8 *pos = NULL; + + // Zero-init our [out] parameter, + vos_mem_set( (tANI_U8*)&ccxBcnReportMandatoryIe, sizeof(ccxBcnReportMandatoryIe), 0 ); + pBies = vos_mem_malloc(sizeof(tDot11fBeaconIEs)); + if ( NULL == pBies ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; + if (!HAL_STATUS_SUCCESS(status)) + { + limLog(pMac, LOGE, FL("Failed to allocate memory\n") ); + return eSIR_FAILURE; + } + // delegate to the framesc-generated code, + status = dot11fUnpackBeaconIEs( pMac, pPayload, nPayload, pBies ); + + if ( DOT11F_FAILED( status ) ) + { + limLog(pMac, LOGE, FL("Failed to parse Beacon IEs (0x%08x, %d bytes):\n"), + status, nPayload); + vos_mem_free(pBies); + return eSIR_FAILURE; + } + else if ( DOT11F_WARNED( status ) ) + { + limLog( pMac, LOGW, FL("There were warnings while unpacking Beacon IEs (0x%08x, %d bytes):\n"), + status, nPayload ); + PELOG2(sirDumpBuf(pMac, SIR_DBG_MODULE_ID, LOG2, pPayload, nPayload);) + } + + // & "transliterate" from a 'tDot11fBeaconIEs' to a 'ccxBcnReportMandatoryIe'... + if ( !pBies->SSID.present ) + { + PELOGW(limLog(pMac, LOGW, FL("Mandatory IE SSID not present!\n"));) + } + else + { + ccxBcnReportMandatoryIe.ssidPresent = 1; + ConvertSSID( pMac, &ccxBcnReportMandatoryIe.ssId, &pBies->SSID ); + /* 1 for EID, 1 for length and length bytes */ + numBytes += 1 + 1 + ccxBcnReportMandatoryIe.ssId.length; + } + + if ( !pBies->SuppRates.present ) + { + PELOGW(limLog(pMac, LOGW, FL("Mandatory IE Supported Rates not present!\n"));) + } + else + { + ccxBcnReportMandatoryIe.suppRatesPresent = 1; + ConvertSuppRates( pMac, &ccxBcnReportMandatoryIe.supportedRates, &pBies->SuppRates ); + numBytes += 1 + 1 + ccxBcnReportMandatoryIe.supportedRates.numRates; + } + + if ( pBies->FHParamSet.present) + { + ccxBcnReportMandatoryIe.fhParamPresent = 1; + ConvertFHParams( pMac, &ccxBcnReportMandatoryIe.fhParamSet, &pBies->FHParamSet ); + numBytes += 1 + 1 + SIR_MAC_FH_PARAM_SET_EID_MAX; + } + + if ( pBies->DSParams.present ) + { + ccxBcnReportMandatoryIe.dsParamsPresent = 1; + ccxBcnReportMandatoryIe.dsParamSet.channelNumber = pBies->DSParams.curr_channel; + numBytes += 1 + 1 + SIR_MAC_DS_PARAM_SET_EID_MAX; + } + + if ( pBies->CFParams.present ) + { + ccxBcnReportMandatoryIe.cfPresent = 1; + ConvertCFParams( pMac, &ccxBcnReportMandatoryIe.cfParamSet, &pBies->CFParams ); + numBytes += 1 + 1 + SIR_MAC_CF_PARAM_SET_EID_MAX; + } + + if ( pBies->IBSSParams.present ) + { + ccxBcnReportMandatoryIe.ibssParamPresent = 1; + ccxBcnReportMandatoryIe.ibssParamSet.atim = pBies->IBSSParams.atim; + numBytes += 1 + 1 + SIR_MAC_IBSS_PARAM_SET_EID_MAX; + } + + if ( pBies->TIM.present ) + { + ccxBcnReportMandatoryIe.timPresent = 1; + ccxBcnReportMandatoryIe.tim.dtimCount = pBies->TIM.dtim_count; + ccxBcnReportMandatoryIe.tim.dtimPeriod = pBies->TIM.dtim_period; + ccxBcnReportMandatoryIe.tim.bitmapControl = pBies->TIM.bmpctl; + /* As per the CCX spec, May truncate and report first 4 octets only */ + numBytes += 1 + 1 + SIR_MAC_TIM_EID_MIN; + } + + if ( pBies->RRMEnabledCap.present ) + { + vos_mem_copy( &ccxBcnReportMandatoryIe.rmEnabledCapabilities, &pBies->RRMEnabledCap, sizeof( tDot11fIERRMEnabledCap ) ); + numBytes += 1 + 1 + SIR_MAC_RM_ENABLED_CAPABILITY_EID_MAX; + } + + *outIeBuf = vos_mem_malloc(numBytes); + if (NULL == *outIeBuf) + { + limLog(pMac, LOGP, FL("Memory Allocation failure")); + vos_mem_free(pBies); + return eSIR_FAILURE; + } + pos = *outIeBuf; + *pOutIeLen = numBytes; + + /* Start filling the output Ie with Mandatory IE information */ + /* Fill SSID IE */ + *pos = SIR_MAC_SSID_EID; + pos++; + *pos = ccxBcnReportMandatoryIe.ssId.length; + pos++; + vos_mem_copy(pos, (tANI_U8*)ccxBcnReportMandatoryIe.ssId.ssId, ccxBcnReportMandatoryIe.ssId.length); + pos += ccxBcnReportMandatoryIe.ssId.length; + + /* Fill Supported Rates IE */ + *pos = SIR_MAC_RATESET_EID; + pos++; + *pos = ccxBcnReportMandatoryIe.supportedRates.numRates; + pos++; + vos_mem_copy(pos, (tANI_U8*)ccxBcnReportMandatoryIe.supportedRates.rate, + ccxBcnReportMandatoryIe.supportedRates.numRates); + pos += ccxBcnReportMandatoryIe.supportedRates.numRates; + + /* Fill FH Parameter set IE */ + *pos = SIR_MAC_FH_PARAM_SET_EID; + pos++; + *pos = SIR_MAC_FH_PARAM_SET_EID_MAX; + pos++; + vos_mem_copy(pos, (tANI_U8*)&ccxBcnReportMandatoryIe.fhParamSet, SIR_MAC_FH_PARAM_SET_EID_MAX); + pos += SIR_MAC_FH_PARAM_SET_EID_MAX; + + /* Fill DS Parameter set IE */ + *pos = SIR_MAC_DS_PARAM_SET_EID; + pos++; + *pos = SIR_MAC_DS_PARAM_SET_EID_MAX; + pos++; + *pos = ccxBcnReportMandatoryIe.dsParamSet.channelNumber; + pos += SIR_MAC_DS_PARAM_SET_EID_MAX; + + /* Fill CF Parameter set */ + *pos = SIR_MAC_CF_PARAM_SET_EID; + pos++; + *pos = SIR_MAC_CF_PARAM_SET_EID_MAX; + pos++; + vos_mem_copy(pos, (tANI_U8*)&ccxBcnReportMandatoryIe.cfParamSet, SIR_MAC_CF_PARAM_SET_EID_MAX); + pos += SIR_MAC_CF_PARAM_SET_EID_MAX; + + /* Fill IBSS Parameter set IE */ + *pos = SIR_MAC_IBSS_PARAM_SET_EID; + pos++; + *pos = SIR_MAC_IBSS_PARAM_SET_EID_MAX; + pos++; + vos_mem_copy(pos, (tANI_U8*)&ccxBcnReportMandatoryIe.ibssParamSet.atim, SIR_MAC_IBSS_PARAM_SET_EID_MAX); + pos += SIR_MAC_IBSS_PARAM_SET_EID_MAX; + + /* Fill TIM IE */ + *pos = SIR_MAC_TIM_EID; + pos++; + *pos = SIR_MAC_TIM_EID_MIN; + pos++; + vos_mem_copy(pos, (tANI_U8*)&ccxBcnReportMandatoryIe.tim, SIR_MAC_TIM_EID_MIN); + pos += SIR_MAC_TIM_EID_MIN; + + /* Fill RM Capability IE */ + *pos = SIR_MAC_RM_ENABLED_CAPABILITY_EID; + pos++; + *pos = SIR_MAC_RM_ENABLED_CAPABILITY_EID_MAX; + pos++; + vos_mem_copy(pos, (tANI_U8*)&ccxBcnReportMandatoryIe.rmEnabledCapabilities, SIR_MAC_RM_ENABLED_CAPABILITY_EID_MAX); + + vos_mem_free(pBies); + return eSIR_SUCCESS; +} + +#endif /* FEATURE_WLAN_CCX_UPLOAD */ + tSirRetStatus sirParseBeaconIE(tpAniSirGlobal pMac, tpSirProbeRespBeacon pBeaconStruct, @@ -2655,10 +2914,14 @@ sirParseBeaconIE(tpAniSirGlobal pMac, tANI_U32 status; // Zero-init our [out] parameter, - palZeroMemory( pMac->hHdd, ( tANI_U8* )pBeaconStruct, sizeof(tSirProbeRespBeacon) ); + vos_mem_set( ( tANI_U8* )pBeaconStruct, sizeof(tSirProbeRespBeacon), 0 ); - status = palAllocateMemory(pMac->hHdd, (void **)&pBies, sizeof(tDot11fBeaconIEs)); - if(!HAL_STATUS_SUCCESS(status)) + pBies = vos_mem_malloc(sizeof(tDot11fBeaconIEs)); + if ( NULL == pBies ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; + if (!HAL_STATUS_SUCCESS(status)) { limLog(pMac, LOGE, FL("Failed to allocate memory\n") ); return eSIR_FAILURE; @@ -2671,7 +2934,7 @@ sirParseBeaconIE(tpAniSirGlobal pMac, limLog(pMac, LOGE, FL("Failed to parse Beacon IEs (0x%08x, %d bytes):\n"), status, nPayload); PELOG2(sirDumpBuf(pMac, SIR_DBG_MODULE_ID, LOG2, pPayload, nPayload);) - palFreeMemory(pMac->hHdd, pBies); + vos_mem_free(pBies); return eSIR_FAILURE; } else if ( DOT11F_WARNED( status ) ) @@ -2730,8 +2993,7 @@ sirParseBeaconIE(tpAniSirGlobal pMac, if(pBies->TPCReport.present) { pBeaconStruct->tpcReportPresent = 1; - palCopyMemory(pMac, - &pBeaconStruct->tpcReport, + vos_mem_copy( &pBeaconStruct->tpcReport, &pBies->TPCReport, sizeof( tDot11fIETPCReport)); } @@ -2739,8 +3001,7 @@ sirParseBeaconIE(tpAniSirGlobal pMac, if(pBies->PowerConstraints.present) { pBeaconStruct->powerConstraintPresent = 1; - palCopyMemory(pMac, - &pBeaconStruct->localPowerConstraint, + vos_mem_copy( &pBeaconStruct->localPowerConstraint, &pBies->PowerConstraints, sizeof(tDot11fIEPowerConstraints)); } @@ -2752,7 +3013,7 @@ sirParseBeaconIE(tpAniSirGlobal pMac, } if (pBies->QBSSLoad.present) { - palCopyMemory(pMac->hHdd, &pBeaconStruct->QBSSLoad, &pBies->QBSSLoad, sizeof(tDot11fIEQBSSLoad)); + vos_mem_copy( &pBeaconStruct->QBSSLoad, &pBies->QBSSLoad, sizeof(tDot11fIEQBSSLoad)); } #endif @@ -2774,31 +3035,31 @@ sirParseBeaconIE(tpAniSirGlobal pMac, if ( pBies->ChanSwitchAnn.present ) { pBeaconStruct->channelSwitchPresent = 1; - palCopyMemory(pMac->hHdd, &pBeaconStruct->channelSwitchIE, &pBies->ChanSwitchAnn, + vos_mem_copy( &pBeaconStruct->channelSwitchIE, &pBies->ChanSwitchAnn, sizeof(tDot11fIEChanSwitchAnn)); } if ( pBies->ExtChanSwitchAnn.present) { pBeaconStruct->extChannelSwitchPresent= 1; - palCopyMemory(pMac->hHdd, &pBeaconStruct->extChannelSwitchIE, &pBies->ExtChanSwitchAnn, + vos_mem_copy( &pBeaconStruct->extChannelSwitchIE, &pBies->ExtChanSwitchAnn, sizeof(tDot11fIEExtChanSwitchAnn)); } if ( pBies->Quiet.present ) { pBeaconStruct->quietIEPresent = 1; - palCopyMemory( pMac, &pBeaconStruct->quietIE, &pBies->Quiet, sizeof(tDot11fIEQuiet) ); + vos_mem_copy( &pBeaconStruct->quietIE, &pBies->Quiet, sizeof(tDot11fIEQuiet) ); } if ( pBies->HTCaps.present ) { - palCopyMemory( pMac, &pBeaconStruct->HTCaps, &pBies->HTCaps, sizeof( tDot11fIEHTCaps ) ); + vos_mem_copy( &pBeaconStruct->HTCaps, &pBies->HTCaps, sizeof( tDot11fIEHTCaps ) ); } if ( pBies->HTInfo.present ) { - palCopyMemory( pMac, &pBeaconStruct->HTInfo, &pBies->HTInfo, sizeof( tDot11fIEHTInfo ) ); + vos_mem_copy( &pBeaconStruct->HTInfo, &pBies->HTInfo, sizeof( tDot11fIEHTInfo ) ); } if ( pBies->DSParams.present ) @@ -2849,27 +3110,30 @@ sirParseBeaconIE(tpAniSirGlobal pMac, #ifdef WLAN_FEATURE_11AC if ( pBies->VHTCaps.present ) { - pBeaconStruct->VHTCaps.present = 1; - palCopyMemory( pMac, &pBeaconStruct->VHTCaps, &pBies->VHTCaps, sizeof( tDot11fIEVHTCaps ) ); + pBeaconStruct->VHTCaps.present = 1; + vos_mem_copy( &pBeaconStruct->VHTCaps, &pBies->VHTCaps, sizeof( tDot11fIEVHTCaps ) ); } if ( pBies->VHTOperation.present ) { pBeaconStruct->VHTOperation.present = 1; - palCopyMemory( pMac, &pBeaconStruct->VHTOperation, &pBies->VHTOperation, sizeof( tDot11fIEVHTOperation) ); + vos_mem_copy( &pBeaconStruct->VHTOperation, &pBies->VHTOperation, + sizeof( tDot11fIEVHTOperation) ); } if ( pBies->VHTExtBssLoad.present ) { pBeaconStruct->VHTExtBssLoad.present = 1; - palCopyMemory( pMac, &pBeaconStruct->VHTExtBssLoad, &pBies->VHTExtBssLoad, sizeof( tDot11fIEVHTExtBssLoad) ); + vos_mem_copy( &pBeaconStruct->VHTExtBssLoad, &pBies->VHTExtBssLoad, + sizeof( tDot11fIEVHTExtBssLoad) ); } if( pBies->OperatingMode.present) { pBeaconStruct->OperatingMode.present = 1; - palCopyMemory( pMac, &pBeaconStruct->OperatingMode, &pBies->OperatingMode, sizeof( tDot11fIEOperatingMode) ); + vos_mem_copy( &pBeaconStruct->OperatingMode, &pBies->OperatingMode, + sizeof( tDot11fIEOperatingMode) ); } #endif - palFreeMemory(pMac->hHdd, pBies); + vos_mem_free(pBies); return eSIR_SUCCESS; @@ -2886,26 +3150,32 @@ sirConvertBeaconFrame2Struct(tpAniSirGlobal pMac, tANI_U8 *pPayload; tpSirMacMgmtHdr pHdr; tANI_U8 mappedRXCh; + tANI_U8 rfBand; pPayload = WDA_GET_RX_MPDU_DATA( pFrame ); nPayload = WDA_GET_RX_PAYLOAD_LEN( pFrame ); pHdr = WDA_GET_RX_MAC_HEADER( pFrame ); mappedRXCh = WDA_GET_RX_CH( pFrame ); + rfBand = WDA_GET_RX_RFBAND( pFrame ); // Zero-init our [out] parameter, - palZeroMemory( pMac->hHdd, ( tANI_U8* )pBeaconStruct, sizeof(tSirProbeRespBeacon) ); - - status = palAllocateMemory(pMac->hHdd, (void **)&pBeacon, sizeof(tDot11fBeacon)); - if(!HAL_STATUS_SUCCESS(status)) + vos_mem_set( ( tANI_U8* )pBeaconStruct, sizeof(tSirProbeRespBeacon), 0 ); + + pBeacon = vos_mem_malloc(sizeof(tDot11fBeacon)); + if ( NULL == pBeacon ) + status = eHAL_STATUS_FAILURE; + else + status = eHAL_STATUS_SUCCESS; + if (!HAL_STATUS_SUCCESS(status)) { limLog(pMac, LOGE, FL("Failed to allocate memory\n") ); return eSIR_FAILURE; } - palZeroMemory( pMac->hHdd, ( tANI_U8* )pBeacon, sizeof(tDot11fBeacon) ); + vos_mem_set( ( tANI_U8* )pBeacon, sizeof(tDot11fBeacon), 0 ); // get the MAC address out of the BD, - palCopyMemory( pMac->hHdd, pBeaconStruct->bssid, pHdr->sa, 6 ); + vos_mem_copy( pBeaconStruct->bssid, pHdr->sa, 6 ); // delegate to the framesc-generated code, status = dot11fUnpackBeacon( pMac, pPayload, nPayload, pBeacon ); @@ -2914,7 +3184,7 @@ sirConvertBeaconFrame2Struct(tpAniSirGlobal pMac, limLog(pMac, LOGE, FL("Failed to parse Beacon IEs (0x%08x, %d bytes):\n"), status, nPayload); PELOG2(sirDumpBuf(pMac, SIR_DBG_MODULE_ID, LOG2, pPayload, nPayload);) - palFreeMemory(pMac->hHdd, pBeacon); + vos_mem_free(pBeacon); return eSIR_FAILURE; } else if ( DOT11F_WARNED( status ) ) @@ -2926,7 +3196,8 @@ sirConvertBeaconFrame2Struct(tpAniSirGlobal pMac, // & "transliterate" from a 'tDot11fBeacon' to a 'tSirProbeRespBeacon'... // Timestamp - palCopyMemory( pMac->hHdd, ( tANI_U8* )pBeaconStruct->timeStamp, ( tANI_U8* )&pBeacon->TimeStamp, sizeof(tSirMacTimeStamp) ); + vos_mem_copy( ( tANI_U8* )pBeaconStruct->timeStamp, ( tANI_U8* )&pBeacon->TimeStamp, + sizeof(tSirMacTimeStamp) ); // Beacon Interval pBeaconStruct->beaconInterval = pBeacon->BeaconInterval.interval; @@ -3010,45 +3281,45 @@ sirConvertBeaconFrame2Struct(tpAniSirGlobal pMac, if ( pBeacon->ChanSwitchAnn.present ) { pBeaconStruct->channelSwitchPresent = 1; - palCopyMemory( pMac, &pBeaconStruct->channelSwitchIE, &pBeacon->ChanSwitchAnn, + vos_mem_copy( &pBeaconStruct->channelSwitchIE, &pBeacon->ChanSwitchAnn, sizeof(tDot11fIEChanSwitchAnn) ); } if ( pBeacon->ExtChanSwitchAnn.present ) { pBeaconStruct->extChannelSwitchPresent = 1; - palCopyMemory( pMac, &pBeaconStruct->extChannelSwitchIE, &pBeacon->ExtChanSwitchAnn, + vos_mem_copy( &pBeaconStruct->extChannelSwitchIE, &pBeacon->ExtChanSwitchAnn, sizeof(tDot11fIEExtChanSwitchAnn) ); } if( pBeacon->TPCReport.present) { pBeaconStruct->tpcReportPresent = 1; - palCopyMemory(pMac->hHdd, &pBeaconStruct->tpcReport, &pBeacon->TPCReport, + vos_mem_copy( &pBeaconStruct->tpcReport, &pBeacon->TPCReport, sizeof(tDot11fIETPCReport)); } if( pBeacon->PowerConstraints.present) { pBeaconStruct->powerConstraintPresent = 1; - palCopyMemory(pMac->hHdd, &pBeaconStruct->localPowerConstraint, &pBeacon->PowerConstraints, + vos_mem_copy( &pBeaconStruct->localPowerConstraint, &pBeacon->PowerConstraints, sizeof(tDot11fIEPowerConstraints)); } if ( pBeacon->Quiet.present ) { pBeaconStruct->quietIEPresent = 1; - palCopyMemory( pMac, &pBeaconStruct->quietIE, &pBeacon->Quiet, sizeof(tDot11fIEQuiet)); + vos_mem_copy( &pBeaconStruct->quietIE, &pBeacon->Quiet, sizeof(tDot11fIEQuiet)); } if ( pBeacon->HTCaps.present ) { - palCopyMemory( pMac, &pBeaconStruct->HTCaps, &pBeacon->HTCaps, sizeof( tDot11fIEHTCaps ) ); + vos_mem_copy( &pBeaconStruct->HTCaps, &pBeacon->HTCaps, sizeof( tDot11fIEHTCaps ) ); } if ( pBeacon->HTInfo.present ) { - palCopyMemory( pMac, &pBeaconStruct->HTInfo, &pBeacon->HTInfo, sizeof( tDot11fIEHTInfo) ); + vos_mem_copy( &pBeaconStruct->HTInfo, &pBeacon->HTInfo, sizeof( tDot11fIEHTInfo) ); } @@ -3063,7 +3334,21 @@ sirConvertBeaconFrame2Struct(tpAniSirGlobal pMac, } else { - pBeaconStruct->channelNumber = limUnmapChannel(mappedRXCh); + if ((!rfBand) || IS_5G_BAND(rfBand)) + pBeaconStruct->channelNumber = limUnmapChannel(mappedRXCh); + else if (IS_24G_BAND(rfBand)) + pBeaconStruct->channelNumber = mappedRXCh; + else + { + /*Only 0, 1, 2 are expected values for RF band from FW + * if FW fixes are not present then rf band value will + * be 0, else either 1 or 2 are expected from FW, 3 is + * not expected from FW */ + PELOGE(limLog(pMac, LOGE, + FL("Channel info is not present in Beacon and" + " mapping is not done correctly"));) + pBeaconStruct->channelNumber = mappedRXCh; + } } if ( pBeacon->RSN.present ) @@ -3108,50 +3393,59 @@ sirConvertBeaconFrame2Struct(tpAniSirGlobal pMac, { // MobilityDomain pBeaconStruct->mdiePresent = 1; - palCopyMemory( pMac->hHdd, (tANI_U8 *)&(pBeaconStruct->mdie[0]), (tANI_U8 *)&(pBeacon->MobilityDomain.MDID), sizeof(tANI_U16) ); + vos_mem_copy( (tANI_U8 *)&(pBeaconStruct->mdie[0]), + (tANI_U8 *)&(pBeacon->MobilityDomain.MDID), sizeof(tANI_U16) ); pBeaconStruct->mdie[2] = ((pBeacon->MobilityDomain.overDSCap << 0) | (pBeacon->MobilityDomain.resourceReqCap << 1)); } #endif +#ifdef FEATURE_WLAN_CCX + if (pBeacon->CCXTxmitPower.present) + { + /* copy CCX TPC info element */ + pBeaconStruct->ccxTxPwr.present = 1; + vos_mem_copy( &pBeaconStruct->ccxTxPwr, + &pBeacon->CCXTxmitPower, + sizeof(tDot11fIECCXTxmitPower)); + } + if (pBeacon->QBSSLoad.present) + { + vos_mem_copy(&pBeaconStruct->QBSSLoad, + &pBeacon->QBSSLoad, + sizeof(tDot11fIEQBSSLoad)); + } +#endif + #ifdef WLAN_FEATURE_11AC if ( pBeacon->VHTCaps.present ) { - palCopyMemory( pMac, &pBeaconStruct->VHTCaps, &pBeacon->VHTCaps, sizeof( tDot11fIEVHTCaps ) ); + vos_mem_copy( &pBeaconStruct->VHTCaps, &pBeacon->VHTCaps, sizeof( tDot11fIEVHTCaps ) ); } if ( pBeacon->VHTOperation.present ) { - palCopyMemory( pMac, &pBeaconStruct->VHTOperation, &pBeacon->VHTOperation, sizeof( tDot11fIEVHTOperation) ); + vos_mem_copy( &pBeaconStruct->VHTOperation, &pBeacon->VHTOperation, + sizeof( tDot11fIEVHTOperation) ); } if ( pBeacon->VHTExtBssLoad.present ) { - palCopyMemory( pMac, &pBeaconStruct->VHTExtBssLoad, &pBeacon->VHTExtBssLoad, sizeof( tDot11fIEVHTExtBssLoad) ); + vos_mem_copy( &pBeaconStruct->VHTExtBssLoad, &pBeacon->VHTExtBssLoad, + sizeof( tDot11fIEVHTExtBssLoad) ); } if(pBeacon->OperatingMode.present) { - palCopyMemory( pMac, &pBeaconStruct->OperatingMode, &pBeacon->OperatingMode, sizeof( tDot11fIEOperatingMode) ); + vos_mem_copy( &pBeaconStruct->OperatingMode, &pBeacon->OperatingMode, + sizeof( tDot11fIEOperatingMode) ); } if(pBeacon->WiderBWChanSwitchAnn.present) { pBeaconStruct->WiderBWChanSwitchAnnPresent = 1; - palCopyMemory( pMac, &pBeaconStruct->WiderBWChanSwitchAnn, &pBeacon->WiderBWChanSwitchAnn, sizeof( tDot11fIEWiderBWChanSwitchAnn)); + vos_mem_copy( &pBeaconStruct->WiderBWChanSwitchAnn, &pBeacon->WiderBWChanSwitchAnn, + sizeof( tDot11fIEWiderBWChanSwitchAnn)); } #endif -#ifdef FEATURE_WLAN_CCX - /* copy CCX TPC info element */ - if (pBeacon->CCXTxmitPower.present) { - pBeaconStruct->ccxTxPwr.present = 1; - pBeaconStruct->ccxTxPwr.power_limit = - pBeacon->CCXTxmitPower.power_limit; - } - if (pBeacon->QBSSLoad.present) { - palCopyMemory(pMac, &pBeaconStruct->QBSSLoad, &pBeacon->QBSSLoad, - sizeof(tDot11fIEQBSSLoad)); - } -#endif - - palFreeMemory(pMac->hHdd, pBeacon); + vos_mem_free(pBeacon); return eSIR_SUCCESS; } // End sirConvertBeaconFrame2Struct. @@ -3166,7 +3460,7 @@ sirConvertAuthFrame2Struct(tpAniSirGlobal pMac, tANI_U32 status; // Zero-init our [out] parameter, - palZeroMemory( pMac->hHdd, ( tANI_U8* )pAuth, sizeof(tSirMacAuthFrameBody) ); + vos_mem_set( ( tANI_U8* )pAuth, sizeof(tSirMacAuthFrameBody), 0 ); // delegate to the framesc-generated code, status = dot11fUnpackAuthentication( pMac, pFrame, nFrame, &auth ); @@ -3193,7 +3487,7 @@ sirConvertAuthFrame2Struct(tpAniSirGlobal pMac, { pAuth->type = SIR_MAC_CHALLENGE_TEXT_EID; pAuth->length = auth.ChallengeText.num_text; - palCopyMemory( pMac->hHdd, pAuth->challengeText, auth.ChallengeText.text, auth.ChallengeText.num_text ); + vos_mem_copy( pAuth->challengeText, auth.ChallengeText.text, auth.ChallengeText.num_text ); } return eSIR_SUCCESS; @@ -3222,7 +3516,7 @@ sirConvertAddtsReq2Struct(tpAniSirGlobal pMac, } // Zero-init our [out] parameter, - palZeroMemory( pMac->hHdd, ( tANI_U8* )pAddTs, sizeof(tSirAddtsReqInfo) ); + vos_mem_set( ( tANI_U8* )pAddTs, sizeof(tSirAddtsReqInfo), 0 ); // delegate to the framesc-generated code, switch ( *pFrame ) @@ -3370,9 +3664,9 @@ sirConvertAddtsRsp2Struct(tpAniSirGlobal pMac, } // Zero-init our [out] parameter, - palZeroMemory( pMac->hHdd, ( tANI_U8* )pAddTs, sizeof(tSirAddtsRspInfo) ); - palZeroMemory( pMac->hHdd, ( tANI_U8* )&addts, sizeof(tDot11fAddTSResponse) ); - palZeroMemory( pMac->hHdd, ( tANI_U8* )&wmmaddts, sizeof(tDot11fWMMAddTSResponse) ); + vos_mem_set( ( tANI_U8* )pAddTs, sizeof(tSirAddtsRspInfo), 0 ); + vos_mem_set( ( tANI_U8* )&addts, sizeof(tDot11fAddTSResponse), 0 ); + vos_mem_set( ( tANI_U8* )&wmmaddts, sizeof(tDot11fWMMAddTSResponse), 0 ); // delegate to the framesc-generated code, @@ -3460,7 +3754,7 @@ sirConvertAddtsRsp2Struct(tpAniSirGlobal pMac, if(addts.CCXTrafStrmMet.present) { pAddTs->tsmPresent = 1; - palCopyMemory(pMac->hHdd,&pAddTs->tsmIE.tsid, + vos_mem_copy(&pAddTs->tsmIE.tsid, &addts.CCXTrafStrmMet.tsid,sizeof(tSirMacCCXTSMIE)); } #endif @@ -3530,7 +3824,7 @@ sirConvertAddtsRsp2Struct(tpAniSirGlobal pMac, if(wmmaddts.CCXTrafStrmMet.present) { pAddTs->tsmPresent = 1; - palCopyMemory(pMac->hHdd,&pAddTs->tsmIE.tsid, + vos_mem_copy(&pAddTs->tsmIE.tsid, &wmmaddts.CCXTrafStrmMet.tsid,sizeof(tSirMacCCXTSMIE)); } #endif @@ -3561,7 +3855,7 @@ sirConvertDeltsReq2Struct(tpAniSirGlobal pMac, } // Zero-init our [out] parameter, - palZeroMemory( pMac->hHdd, ( tANI_U8* )pDelTs, sizeof(tSirDeltsReqInfo) ); + vos_mem_set( ( tANI_U8* )pDelTs, sizeof(tSirDeltsReqInfo), 0 ); // delegate to the framesc-generated code, switch ( *pFrame ) @@ -3642,7 +3936,7 @@ sirConvertTpcReqFrame2Struct(tpAniSirGlobal pMac, tANI_U32 status; // Zero-init our [out] parameter, - palZeroMemory( pMac->hHdd, ( tANI_U8* )pTpcReqFrame, sizeof(tSirMacTpcReqActionFrame) ); + vos_mem_set( ( tANI_U8* )pTpcReqFrame, sizeof(tSirMacTpcReqActionFrame), 0 ); // delegate to the framesc-generated code, status = dot11fUnpackTPCRequest( pMac, pFrame, nFrame, &req ); @@ -3691,7 +3985,7 @@ sirConvertMeasReqFrame2Struct(tpAniSirGlobal pMac, tANI_U32 status; // Zero-init our [out] parameter, - palZeroMemory( pMac->hHdd, ( tANI_U8* )pMeasReqFrame, sizeof(tpSirMacMeasReqActionFrame) ); + vos_mem_set( ( tANI_U8* )pMeasReqFrame, sizeof(tpSirMacMeasReqActionFrame), 0 ); // delegate to the framesc-generated code, status = dot11fUnpackMeasurementRequest( pMac, pFrame, nFrame, &mr ); @@ -3736,7 +4030,7 @@ sirConvertMeasReqFrame2Struct(tpAniSirGlobal pMac, pMeasReqFrame->measReqIE.measReqField.channelNumber = mr.MeasurementRequest[0].channel_no; - palCopyMemory( pMac->hHdd, pMeasReqFrame->measReqIE.measReqField.measStartTime, + vos_mem_copy( pMeasReqFrame->measReqIE.measReqField.measStartTime, mr.MeasurementRequest[0].meas_start_time, 8 ); pMeasReqFrame->measReqIE.measReqField.measDuration = mr.MeasurementRequest[0].meas_duration; @@ -3822,14 +4116,51 @@ PopulateDot11fWMMTSPEC(tSirMacTspecIE *pOld, } // End PopulateDot11fWMMTSPEC. -#ifdef FEATURE_WLAN_CCX +#if defined(FEATURE_WLAN_CCX) +// Fill the CCX version currently supported +void PopulateDot11fCCXVersion(tDot11fIECCXVersion *pCCXVersion) +{ + pCCXVersion->present = 1; + pCCXVersion->version = CCX_VERSION_SUPPORTED; +} +// Fill the CCX ie for the station. +// The State is Normal (1) +// The MBSSID for station is set to 0. +void PopulateDot11fCCXRadMgmtCap(tDot11fIECCXRadMgmtCap *pCCXRadMgmtCap) +{ + pCCXRadMgmtCap->present = 1; + pCCXRadMgmtCap->mgmt_state = RM_STATE_NORMAL; + pCCXRadMgmtCap->mbssid_mask = 0; + pCCXRadMgmtCap->reserved = 0; +} +tSirRetStatus PopulateDot11fCCXCckmOpaque( tpAniSirGlobal pMac, + tpSirCCKMie pCCKMie, + tDot11fIECCXCckmOpaque *pDot11f ) +{ + int idx; + if ( pCCKMie->length ) + { + if( 0 <= ( idx = FindIELocation( pMac, (tpSirRSNie)pCCKMie, + DOT11F_EID_CCXCCKMOPAQUE ) ) ) + { + pDot11f->present = 1; + // Dont include OUI + pDot11f->num_data = pCCKMie->cckmIEdata[ idx + 1 ] - 4; + palCopyMemory( pMac->hHdd, pDot11f->data, + pCCKMie->cckmIEdata + idx + 2 + 4, //EID,len,OUI + pCCKMie->cckmIEdata[ idx + 1 ] - 4 ); // Skip OUI + } + } + return eSIR_SUCCESS; +} // End PopulateDot11fCCXCckmOpaque. + void PopulateDot11TSRSIE(tpAniSirGlobal pMac, tSirMacCCXTSRSIE *pOld, tDot11fIECCXTrafStrmRateSet *pDot11f, tANI_U8 rate_length) { pDot11f->tsid = pOld->tsid; - palCopyMemory(pMac->hHdd,pDot11f->tsrates, pOld->rates,rate_length); + vos_mem_copy(pDot11f->tsrates, pOld->rates,rate_length); pDot11f->num_tsrates = rate_length; pDot11f->present = 1; } @@ -3848,22 +4179,22 @@ PopulateDot11fTCLAS(tpAniSirGlobal pMac, switch ( pDot11f->classifier_type ) { case SIR_MAC_TCLASTYPE_ETHERNET: - palCopyMemory( pMac->hHdd, ( tANI_U8* )&pDot11f->info.EthParams.source, - ( tANI_U8* )&pOld->tclasParams.eth.srcAddr, 6 ); - palCopyMemory( pMac->hHdd, ( tANI_U8* )&pDot11f->info.EthParams.dest, - ( tANI_U8* )&pOld->tclasParams.eth.dstAddr, 6 ); + vos_mem_copy( ( tANI_U8* )&pDot11f->info.EthParams.source, + ( tANI_U8* )&pOld->tclasParams.eth.srcAddr, 6 ); + vos_mem_copy( ( tANI_U8* )&pDot11f->info.EthParams.dest, + ( tANI_U8* )&pOld->tclasParams.eth.dstAddr, 6 ); pDot11f->info.EthParams.type = pOld->tclasParams.eth.type; break; case SIR_MAC_TCLASTYPE_TCPUDPIP: pDot11f->info.IpParams.version = pOld->version; if ( SIR_MAC_TCLAS_IPV4 == pDot11f->info.IpParams.version ) { - palCopyMemory( pMac->hHdd, ( tANI_U8* )&pDot11f->info.IpParams.params. - IpV4Params.source, - ( tANI_U8* )pOld->tclasParams.ipv4.srcIpAddr, 4 ); - palCopyMemory( pMac->hHdd, ( tANI_U8* )&pDot11f->info.IpParams.params. - IpV4Params.dest, - ( tANI_U8* )pOld->tclasParams.ipv4.dstIpAddr, 4 ); + vos_mem_copy( ( tANI_U8* )&pDot11f->info.IpParams.params. + IpV4Params.source, + ( tANI_U8* )pOld->tclasParams.ipv4.srcIpAddr, 4 ); + vos_mem_copy( ( tANI_U8* )&pDot11f->info.IpParams.params. + IpV4Params.dest, + ( tANI_U8* )pOld->tclasParams.ipv4.dstIpAddr, 4 ); pDot11f->info.IpParams.params.IpV4Params.src_port = pOld->tclasParams.ipv4.srcPort; pDot11f->info.IpParams.params.IpV4Params.dest_port = @@ -3877,17 +4208,17 @@ PopulateDot11fTCLAS(tpAniSirGlobal pMac, } else { - palCopyMemory( pMac->hHdd, ( tANI_U8* )&pDot11f->info.IpParams.params. + vos_mem_copy( ( tANI_U8* )&pDot11f->info.IpParams.params. IpV6Params.source, ( tANI_U8* )pOld->tclasParams.ipv6.srcIpAddr, 16 ); - palCopyMemory( pMac->hHdd, ( tANI_U8* )&pDot11f->info.IpParams.params. + vos_mem_copy( ( tANI_U8* )&pDot11f->info.IpParams.params. IpV6Params.dest, ( tANI_U8* )pOld->tclasParams.ipv6.dstIpAddr, 16 ); pDot11f->info.IpParams.params.IpV6Params.src_port = pOld->tclasParams.ipv6.srcPort; pDot11f->info.IpParams.params.IpV6Params.dest_port = pOld->tclasParams.ipv6.dstPort; - palCopyMemory( pMac->hHdd, ( tANI_U8* )&pDot11f->info.IpParams.params. + vos_mem_copy( ( tANI_U8* )&pDot11f->info.IpParams.params. IpV6Params.flow_label, ( tANI_U8* )pOld->tclasParams.ipv6.flowLabel, 3 ); } @@ -3920,9 +4251,9 @@ PopulateDot11fWMMTCLAS(tpAniSirGlobal pMac, switch ( pDot11f->classifier_type ) { case SIR_MAC_TCLASTYPE_ETHERNET: - palCopyMemory( pMac->hHdd, ( tANI_U8* )&pDot11f->info.EthParams.source, + vos_mem_copy( ( tANI_U8* )&pDot11f->info.EthParams.source, ( tANI_U8* )&pOld->tclasParams.eth.srcAddr, 6 ); - palCopyMemory( pMac->hHdd, ( tANI_U8* )&pDot11f->info.EthParams.dest, + vos_mem_copy( ( tANI_U8* )&pDot11f->info.EthParams.dest, ( tANI_U8* )&pOld->tclasParams.eth.dstAddr, 6 ); pDot11f->info.EthParams.type = pOld->tclasParams.eth.type; break; @@ -3930,10 +4261,10 @@ PopulateDot11fWMMTCLAS(tpAniSirGlobal pMac, pDot11f->info.IpParams.version = pOld->version; if ( SIR_MAC_TCLAS_IPV4 == pDot11f->info.IpParams.version ) { - palCopyMemory( pMac->hHdd, ( tANI_U8* )&pDot11f->info.IpParams.params. + vos_mem_copy( ( tANI_U8* )&pDot11f->info.IpParams.params. IpV4Params.source, ( tANI_U8* )pOld->tclasParams.ipv4.srcIpAddr, 4 ); - palCopyMemory( pMac->hHdd, ( tANI_U8* )&pDot11f->info.IpParams.params. + vos_mem_copy( ( tANI_U8* )&pDot11f->info.IpParams.params. IpV4Params.dest, ( tANI_U8* )pOld->tclasParams.ipv4.dstIpAddr, 4 ); pDot11f->info.IpParams.params.IpV4Params.src_port = @@ -3949,17 +4280,17 @@ PopulateDot11fWMMTCLAS(tpAniSirGlobal pMac, } else { - palCopyMemory( pMac->hHdd, ( tANI_U8* )&pDot11f->info.IpParams.params. + vos_mem_copy( ( tANI_U8* )&pDot11f->info.IpParams.params. IpV6Params.source, ( tANI_U8* )pOld->tclasParams.ipv6.srcIpAddr, 16 ); - palCopyMemory( pMac->hHdd, ( tANI_U8* )&pDot11f->info.IpParams.params. + vos_mem_copy( ( tANI_U8* )&pDot11f->info.IpParams.params. IpV6Params.dest, ( tANI_U8* )pOld->tclasParams.ipv6.dstIpAddr, 16 ); pDot11f->info.IpParams.params.IpV6Params.src_port = pOld->tclasParams.ipv6.srcPort; pDot11f->info.IpParams.params.IpV6Params.dest_port = pOld->tclasParams.ipv6.dstPort; - palCopyMemory( pMac->hHdd, ( tANI_U8* )&pDot11f->info.IpParams.params. + vos_mem_copy( ( tANI_U8* )&pDot11f->info.IpParams.params. IpV6Params.flow_label, ( tANI_U8* )pOld->tclasParams.ipv6.flowLabel, 3 ); } @@ -4122,7 +4453,7 @@ tSirRetStatus PopulateDot11fProbeResWPSIEs(tpAniSirGlobal pMac, tDot11fIEWscProb if(pSirWPSProbeRspIE->FieldPresent & SIR_WPS_PROBRSP_UUIDE_PRESENT) { pDot11f->UUID_E.present = 1; - palCopyMemory(pMac->hHdd, pDot11f->UUID_E.uuid, pSirWPSProbeRspIE->UUID_E, WNI_CFG_WPS_UUID_LEN); + vos_mem_copy(pDot11f->UUID_E.uuid, pSirWPSProbeRspIE->UUID_E, WNI_CFG_WPS_UUID_LEN); } else pDot11f->UUID_E.present = 0; @@ -4131,7 +4462,8 @@ tSirRetStatus PopulateDot11fProbeResWPSIEs(tpAniSirGlobal pMac, tDot11fIEWscProb { pDot11f->Manufacturer.present = 1; pDot11f->Manufacturer.num_name = pSirWPSProbeRspIE->Manufacture.num_name; - palCopyMemory(pMac->hHdd, pDot11f->Manufacturer.name, pSirWPSProbeRspIE->Manufacture.name, pSirWPSProbeRspIE->Manufacture.num_name); + vos_mem_copy(pDot11f->Manufacturer.name, pSirWPSProbeRspIE->Manufacture.name, + pSirWPSProbeRspIE->Manufacture.num_name); } else pDot11f->Manufacturer.present = 0; @@ -4140,7 +4472,8 @@ tSirRetStatus PopulateDot11fProbeResWPSIEs(tpAniSirGlobal pMac, tDot11fIEWscProb { pDot11f->ModelName.present = 1; pDot11f->ModelName.num_text = pSirWPSProbeRspIE->ModelName.num_text; - palCopyMemory(pMac->hHdd, pDot11f->ModelName.text, pSirWPSProbeRspIE->ModelName.text, pDot11f->ModelName.num_text); + vos_mem_copy(pDot11f->ModelName.text, pSirWPSProbeRspIE->ModelName.text, + pDot11f->ModelName.num_text); } else pDot11f->ModelName.present = 0; @@ -4149,7 +4482,8 @@ tSirRetStatus PopulateDot11fProbeResWPSIEs(tpAniSirGlobal pMac, tDot11fIEWscProb { pDot11f->ModelNumber.present = 1; pDot11f->ModelNumber.num_text = pSirWPSProbeRspIE->ModelNumber.num_text; - palCopyMemory(pMac->hHdd, pDot11f->ModelNumber.text, pSirWPSProbeRspIE->ModelNumber.text, pDot11f->ModelNumber.num_text); + vos_mem_copy(pDot11f->ModelNumber.text, pSirWPSProbeRspIE->ModelNumber.text, + pDot11f->ModelNumber.num_text); } else pDot11f->ModelNumber.present = 0; @@ -4158,7 +4492,8 @@ tSirRetStatus PopulateDot11fProbeResWPSIEs(tpAniSirGlobal pMac, tDot11fIEWscProb { pDot11f->SerialNumber.present = 1; pDot11f->SerialNumber.num_text = pSirWPSProbeRspIE->SerialNumber.num_text; - palCopyMemory(pMac->hHdd, pDot11f->SerialNumber.text, pSirWPSProbeRspIE->SerialNumber.text, pDot11f->SerialNumber.num_text); + vos_mem_copy(pDot11f->SerialNumber.text, pSirWPSProbeRspIE->SerialNumber.text, + pDot11f->SerialNumber.num_text); } else pDot11f->SerialNumber.present = 0; @@ -4166,7 +4501,8 @@ tSirRetStatus PopulateDot11fProbeResWPSIEs(tpAniSirGlobal pMac, tDot11fIEWscProb if(pSirWPSProbeRspIE->FieldPresent & SIR_WPS_PROBRSP_PRIMARYDEVICETYPE_PRESENT) { pDot11f->PrimaryDeviceType.present = 1; - palCopyMemory(pMac->hHdd, pDot11f->PrimaryDeviceType.oui, pSirWPSProbeRspIE->PrimaryDeviceOUI, sizeof(pSirWPSProbeRspIE->PrimaryDeviceOUI)); + vos_mem_copy(pDot11f->PrimaryDeviceType.oui, pSirWPSProbeRspIE->PrimaryDeviceOUI, + sizeof(pSirWPSProbeRspIE->PrimaryDeviceOUI)); pDot11f->PrimaryDeviceType.primary_category = (tANI_U16)pSirWPSProbeRspIE->PrimaryDeviceCategory; pDot11f->PrimaryDeviceType.sub_category = (tANI_U16)pSirWPSProbeRspIE->DeviceSubCategory; } @@ -4177,7 +4513,8 @@ tSirRetStatus PopulateDot11fProbeResWPSIEs(tpAniSirGlobal pMac, tDot11fIEWscProb { pDot11f->DeviceName.present = 1; pDot11f->DeviceName.num_text = pSirWPSProbeRspIE->DeviceName.num_text; - palCopyMemory(pMac->hHdd, pDot11f->DeviceName.text, pSirWPSProbeRspIE->DeviceName.text, pDot11f->DeviceName.num_text); + vos_mem_copy(pDot11f->DeviceName.text, pSirWPSProbeRspIE->DeviceName.text, + pDot11f->DeviceName.num_text); } else pDot11f->DeviceName.present = 0; @@ -4296,7 +4633,7 @@ tSirRetStatus PopulateDot11fBeaconWPSIEs(tpAniSirGlobal pMac, tDot11fIEWscBeacon if(pSirWPSBeaconIE->FieldPresent & SIR_WPS_BEACON_UUIDE_PRESENT) { pDot11f->UUID_E.present = 1; - palCopyMemory(pMac->hHdd, pDot11f->UUID_E.uuid, pSirWPSBeaconIE->UUID_E, WNI_CFG_WPS_UUID_LEN); + vos_mem_copy(pDot11f->UUID_E.uuid, pSirWPSBeaconIE->UUID_E, WNI_CFG_WPS_UUID_LEN); } else pDot11f->UUID_E.present = 0; @@ -4610,20 +4947,22 @@ tSirRetStatus PopulateDot11fBeaconReport( tpAniSirGlobal pMac, tDot11fIEMeasurem pDot11f->report.Beacon.regClass = pBeaconReport->regClass; pDot11f->report.Beacon.channel = pBeaconReport->channel; - palCopyMemory( pMac->hHdd, pDot11f->report.Beacon.meas_start_time, pBeaconReport->measStartTime, sizeof(pDot11f->report.Beacon.meas_start_time) ); + vos_mem_copy( pDot11f->report.Beacon.meas_start_time, pBeaconReport->measStartTime, + sizeof(pDot11f->report.Beacon.meas_start_time) ); pDot11f->report.Beacon.meas_duration = pBeaconReport->measDuration; pDot11f->report.Beacon.condensed_PHY = pBeaconReport->phyType; pDot11f->report.Beacon.reported_frame_type = !pBeaconReport->bcnProbeRsp; pDot11f->report.Beacon.RCPI = pBeaconReport->rcpi; pDot11f->report.Beacon.RSNI = pBeaconReport->rsni; - palCopyMemory( pMac->hHdd, pDot11f->report.Beacon.BSSID, pBeaconReport->bssid, sizeof(tSirMacAddr)); + vos_mem_copy( pDot11f->report.Beacon.BSSID, pBeaconReport->bssid, sizeof(tSirMacAddr)); pDot11f->report.Beacon.antenna_id = pBeaconReport->antennaId; pDot11f->report.Beacon.parent_TSF = pBeaconReport->parentTSF; if( pBeaconReport->numIes ) { pDot11f->report.Beacon.BeaconReportFrmBody.present = 1; - palCopyMemory( pMac->hHdd, pDot11f->report.Beacon.BeaconReportFrmBody.reportedFields, pBeaconReport->Ies, pBeaconReport->numIes ); + vos_mem_copy( pDot11f->report.Beacon.BeaconReportFrmBody.reportedFields, + pBeaconReport->Ies, pBeaconReport->numIes ); pDot11f->report.Beacon.BeaconReportFrmBody.num_reportedFields = pBeaconReport->numIes; } diff --git a/CORE/SYS/legacy/src/utils/src/utilsParser.c b/CORE/SYS/legacy/src/utils/src/utilsParser.c index 2451cef03bb8..ad50322325ab 100644 --- a/CORE/SYS/legacy/src/utils/src/utilsParser.c +++ b/CORE/SYS/legacy/src/utils/src/utilsParser.c @@ -26,7 +26,6 @@ */ /* - * * Airgo Networks, Inc proprietary. All rights reserved. * This file utilsParser.cc contains the code for parsing * 802.11 messages. @@ -47,7 +46,7 @@ void ConvertSSID(tpAniSirGlobal pMac, tDot11fIESSID *pNew) { pOld->length = pNew->num_ssid; - palCopyMemory( pMac->hHdd, pOld->ssId, pNew->ssid, pNew->num_ssid ); + vos_mem_copy( pOld->ssId, pNew->ssid, pNew->num_ssid ); } void ConvertSuppRates(tpAniSirGlobal pMac, @@ -55,7 +54,7 @@ void ConvertSuppRates(tpAniSirGlobal pMac, tDot11fIESuppRates *pNew) { pOld->numRates = pNew->num_rates; - palCopyMemory( pMac->hHdd, pOld->rate, pNew->rates, pNew->num_rates ); + vos_mem_copy( pOld->rate, pNew->rates, pNew->num_rates ); } void ConvertExtSuppRates(tpAniSirGlobal pMac, @@ -63,7 +62,7 @@ void ConvertExtSuppRates(tpAniSirGlobal pMac, tDot11fIEExtSuppRates *pNew) { pOld->numRates = pNew->num_rates; - palCopyMemory( pMac->hHdd, pOld->rate, pNew->rates, pNew->num_rates ); + vos_mem_copy( pOld->rate, pNew->rates, pNew->num_rates ); } @@ -111,7 +110,7 @@ tSirRetStatus ConvertWPA(tpAniSirGlobal pMac, } pOld->length = (tANI_U8)written - 2; - palCopyMemory( pMac->hHdd, pOld->info, buffer + 2, pOld->length ); + vos_mem_copy( pOld->info, buffer + 2, pOld->length ); return eSIR_SUCCESS; } @@ -127,7 +126,7 @@ tSirRetStatus ConvertWPAOpaque( tpAniSirGlobal pMac, pOld->info[ 1 ] = 0x50; pOld->info[ 2 ] = 0xf2; pOld->info[ 3 ] = 0x01; - palCopyMemory( pMac->hHdd, pOld->info + 4, pNew->data, pNew->num_data ); + vos_mem_copy( pOld->info + 4, pNew->data, pNew->num_data ); return eSIR_SUCCESS; } @@ -147,7 +146,7 @@ tSirRetStatus ConvertWscOpaque( tpAniSirGlobal pMac, pOld->addIEdata[ curAddIELen++ ] = 0x50; pOld->addIEdata[ curAddIELen++ ] = 0xf2; pOld->addIEdata[ curAddIELen++ ] = 0x04; - palCopyMemory( pMac->hHdd, pOld->addIEdata + curAddIELen, pNew->data, pNew->num_data ); + vos_mem_copy( pOld->addIEdata + curAddIELen, pNew->data, pNew->num_data ); return eSIR_SUCCESS; } @@ -167,7 +166,7 @@ tSirRetStatus ConvertP2POpaque( tpAniSirGlobal pMac, pOld->addIEdata[ curAddIELen++ ] = 0x6f; pOld->addIEdata[ curAddIELen++ ] = 0x9A; pOld->addIEdata[ curAddIELen++ ] = 0x09; - palCopyMemory( pMac->hHdd, pOld->addIEdata + curAddIELen, pNew->data, pNew->num_data ); + vos_mem_copy( pOld->addIEdata + curAddIELen, pNew->data, pNew->num_data ); return eSIR_SUCCESS; } @@ -188,7 +187,7 @@ tSirRetStatus ConvertWFDOpaque( tpAniSirGlobal pMac, pOld->addIEdata[ curAddIELen++ ] = 0x6f; pOld->addIEdata[ curAddIELen++ ] = 0x9A; pOld->addIEdata[ curAddIELen++ ] = 0x0a; - palCopyMemory( pMac->hHdd, pOld->addIEdata + curAddIELen, pNew->data, pNew->num_data ); + vos_mem_copy( pOld->addIEdata + curAddIELen, pNew->data, pNew->num_data ); return eSIR_SUCCESS; } @@ -209,7 +208,7 @@ tSirRetStatus ConvertRSN(tpAniSirGlobal pMac, } pOld->length = (tANI_U8)written - 2; - palCopyMemory( pMac->hHdd, pOld->info, buffer + 2, pOld->length ); + vos_mem_copy( pOld->info, buffer + 2, pOld->length ); return eSIR_SUCCESS; } @@ -221,7 +220,7 @@ tSirRetStatus ConvertRSNOpaque( tpAniSirGlobal pMac, // This is awful, I know, but the old code just rammed the IE into // an opaque array. pOld->length = pNew->num_data; - palCopyMemory( pMac->hHdd, pOld->info, pNew->data, pOld->length ); + vos_mem_copy( pOld->info, pNew->data, pOld->length ); return eSIR_SUCCESS; } @@ -242,7 +241,7 @@ void ConvertSuppChannels(tpAniSirGlobal pMac, { pOld->type = 36; pOld->length = ( pNew->num_bands * 2 ); - palCopyMemory( pMac->hHdd, ( tANI_U8* )pOld->supportedChannels, ( tANI_U8* )pNew->bands, pOld->length ); + vos_mem_copy( ( tANI_U8* )pOld->supportedChannels, ( tANI_U8* )pNew->bands, pOld->length ); } void ConvertCFParams(tpAniSirGlobal pMac, @@ -255,6 +254,16 @@ void ConvertCFParams(tpAniSirGlobal pMac, pOld->cfpDurRemaining = pNew->cfp_durremaining; } +void ConvertFHParams (tpAniSirGlobal pMac, + tSirMacFHParamSet *pOld, + tDot11fIEFHParamSet *pNew) +{ + pOld->dwellTime = pNew->dwell_time; + pOld->hopSet = pNew->hop_set; + pOld->hopPattern = pNew->hop_pattern; + pOld->hopIndex = pNew->hop_index; +} + void ConvertTIM(tpAniSirGlobal pMac, tSirMacTim *pOld, tDot11fIETIM *pNew) @@ -264,7 +273,7 @@ void ConvertTIM(tpAniSirGlobal pMac, pOld->bitmapControl = pNew->bmpctl; pOld->bitmapLength = pNew->num_vbmp; - palCopyMemory( pMac->hHdd, pOld->bitmap, pNew->vbmp, pNew->num_vbmp ); + vos_mem_copy( pOld->bitmap, pNew->vbmp, pNew->num_vbmp ); } void ConvertCountry(tpAniSirGlobal pMac, @@ -273,7 +282,7 @@ void ConvertCountry(tpAniSirGlobal pMac, { int i; - palCopyMemory( pMac->hHdd, pOld->countryString, pNew->country, COUNTRY_STRING_LENGTH ); + vos_mem_copy( pOld->countryString, pNew->country, COUNTRY_STRING_LENGTH ); pOld->numIntervals = pNew->num_triplets; @@ -292,7 +301,7 @@ void ConvertWMMParams(tpAniSirGlobal pMac, pOld->type = 221; pOld->length = 24; - palCopyMemory( pMac->hHdd, ( tANI_U8* )&pOld->qosInfo, ( tANI_U8* )&pNew->qosInfo, 1 ); + vos_mem_copy( ( tANI_U8* )&pOld->qosInfo, ( tANI_U8* )&pNew->qosInfo, 1 ); pOld->acbe.aci.aifsn = pNew->acbe_aifsn; pOld->acbe.aci.acm = pNew->acbe_acm; @@ -339,7 +348,7 @@ void ConvertEDCAParam(tpAniSirGlobal pMac, pOld->type = 12; pOld->length = 20; - palCopyMemory( pMac->hHdd, ( tANI_U8* )&pOld->qosInfo, ( tANI_U8* )&pNew->qos, 1 ); + vos_mem_copy( ( tANI_U8* )&pOld->qosInfo, ( tANI_U8* )&pNew->qos, 1 ); pOld->acbe.aci.aifsn = pNew->acbe_aifsn; pOld->acbe.aci.acm = pNew->acbe_acm; @@ -423,8 +432,8 @@ tSirRetStatus ConvertTCLAS(tpAniSirGlobal pMac, switch ( pNew->classifier_type ) { case 0: - palCopyMemory( pMac->hHdd, pOld->tclasParams.eth.srcAddr, pNew->info.EthParams.source, 6 ); - palCopyMemory( pMac->hHdd, pOld->tclasParams.eth.dstAddr, pNew->info.EthParams.dest, 6 ); + vos_mem_copy( pOld->tclasParams.eth.srcAddr, pNew->info.EthParams.source, 6 ); + vos_mem_copy( pOld->tclasParams.eth.dstAddr, pNew->info.EthParams.dest, 6 ); pOld->tclasParams.eth.type = pNew->info.EthParams.type; break; case 1: @@ -432,8 +441,10 @@ tSirRetStatus ConvertTCLAS(tpAniSirGlobal pMac, if ( 4 == pNew->info.IpParams.version ) { pOld->tclasParams.ipv4.version = 4; - palCopyMemory( pMac->hHdd, ( tANI_U8* )&pOld->tclasParams.ipv4.srcIpAddr, ( tANI_U8* )pNew->info.IpParams.params.IpV4Params.source, 4 ); - palCopyMemory( pMac->hHdd, ( tANI_U8* )&pOld->tclasParams.ipv4.dstIpAddr, ( tANI_U8* )pNew->info.IpParams.params.IpV4Params.dest, 4 ); + vos_mem_copy( ( tANI_U8* )&pOld->tclasParams.ipv4.srcIpAddr, + ( tANI_U8* )pNew->info.IpParams.params.IpV4Params.source, 4 ); + vos_mem_copy( ( tANI_U8* )&pOld->tclasParams.ipv4.dstIpAddr, + ( tANI_U8* )pNew->info.IpParams.params.IpV4Params.dest, 4 ); pOld->tclasParams.ipv4.srcPort = pNew->info.IpParams.params.IpV4Params.src_port; pOld->tclasParams.ipv4.dstPort = pNew->info.IpParams.params.IpV4Params.dest_port; pOld->tclasParams.ipv4.dscp = pNew->info.IpParams.params.IpV4Params.DSCP; @@ -443,11 +454,14 @@ tSirRetStatus ConvertTCLAS(tpAniSirGlobal pMac, else if ( 6 == pNew->info.IpParams.version ) { pOld->tclasParams.ipv6.version = 6; - palCopyMemory( pMac->hHdd, ( tANI_U8* )pOld->tclasParams.ipv6.srcIpAddr, ( tANI_U8* )pNew->info.IpParams.params.IpV6Params.source, 16 ); - palCopyMemory( pMac->hHdd, ( tANI_U8* )pOld->tclasParams.ipv6.dstIpAddr, ( tANI_U8* )pNew->info.IpParams.params.IpV6Params.dest, 16 ); + vos_mem_copy( ( tANI_U8* )pOld->tclasParams.ipv6.srcIpAddr, + ( tANI_U8* )pNew->info.IpParams.params.IpV6Params.source, 16 ); + vos_mem_copy( ( tANI_U8* )pOld->tclasParams.ipv6.dstIpAddr, + ( tANI_U8* )pNew->info.IpParams.params.IpV6Params.dest, 16 ); pOld->tclasParams.ipv6.srcPort = pNew->info.IpParams.params.IpV6Params.src_port; pOld->tclasParams.ipv6.dstPort = pNew->info.IpParams.params.IpV6Params.dest_port; - palCopyMemory( pMac->hHdd, ( tANI_U8* )pOld->tclasParams.ipv6.flowLabel, ( tANI_U8* )pNew->info.IpParams.params.IpV6Params.flow_label, 3 ); + vos_mem_copy( ( tANI_U8* )pOld->tclasParams.ipv6.flowLabel, + ( tANI_U8* )pNew->info.IpParams.params.IpV6Params.flow_label, 3 ); } else { @@ -476,7 +490,7 @@ void ConvertWMMTSPEC(tpAniSirGlobal pMac, pOld->tsinfo.traffic.psb = (tANI_U16)pNew->psb; pOld->tsinfo.traffic.userPrio = (tANI_U16)pNew->user_priority; pOld->tsinfo.traffic.ackPolicy = (tANI_U16)pNew->tsinfo_ack_pol; - pOld->nomMsduSz = pNew->size; + pOld->nomMsduSz = (pNew->fixed << 15) | pNew->size; pOld->maxMsduSz = pNew->max_msdu_size; pOld->minSvcInterval = pNew->min_service_int; pOld->maxSvcInterval = pNew->max_service_int; @@ -513,8 +527,8 @@ tSirRetStatus ConvertWMMTCLAS(tpAniSirGlobal pMac, switch ( pNew->classifier_type ) { case 0: - palCopyMemory( pMac->hHdd, pOld->tclasParams.eth.srcAddr, pNew->info.EthParams.source, 6 ); - palCopyMemory( pMac->hHdd, pOld->tclasParams.eth.dstAddr, pNew->info.EthParams.dest, 6 ); + vos_mem_copy( pOld->tclasParams.eth.srcAddr, pNew->info.EthParams.source, 6 ); + vos_mem_copy( pOld->tclasParams.eth.dstAddr, pNew->info.EthParams.dest, 6 ); pOld->tclasParams.eth.type = pNew->info.EthParams.type; break; case 1: @@ -522,8 +536,10 @@ tSirRetStatus ConvertWMMTCLAS(tpAniSirGlobal pMac, if ( 4 == pNew->info.IpParams.version ) { pOld->tclasParams.ipv4.version = 4; - palCopyMemory( pMac->hHdd, ( tANI_U8* )&pOld->tclasParams.ipv4.srcIpAddr, ( tANI_U8* )pNew->info.IpParams.params.IpV4Params.source, 4 ); - palCopyMemory( pMac->hHdd, ( tANI_U8* )&pOld->tclasParams.ipv4.dstIpAddr, ( tANI_U8* )pNew->info.IpParams.params.IpV4Params.dest, 4 ); + vos_mem_copy( ( tANI_U8* )&pOld->tclasParams.ipv4.srcIpAddr, + ( tANI_U8* )pNew->info.IpParams.params.IpV4Params.source, 4 ); + vos_mem_copy( ( tANI_U8* )&pOld->tclasParams.ipv4.dstIpAddr, + ( tANI_U8* )pNew->info.IpParams.params.IpV4Params.dest, 4 ); pOld->tclasParams.ipv4.srcPort = pNew->info.IpParams.params.IpV4Params.src_port; pOld->tclasParams.ipv4.dstPort = pNew->info.IpParams.params.IpV4Params.dest_port; pOld->tclasParams.ipv4.dscp = pNew->info.IpParams.params.IpV4Params.DSCP; @@ -533,11 +549,14 @@ tSirRetStatus ConvertWMMTCLAS(tpAniSirGlobal pMac, else if ( 6 == pNew->info.IpParams.version ) { pOld->tclasParams.ipv6.version = 6; - palCopyMemory( pMac->hHdd, ( tANI_U8* )pOld->tclasParams.ipv6.srcIpAddr, ( tANI_U8* )pNew->info.IpParams.params.IpV6Params.source, 16 ); - palCopyMemory( pMac->hHdd, ( tANI_U8* )pOld->tclasParams.ipv6.dstIpAddr, ( tANI_U8* )pNew->info.IpParams.params.IpV6Params.dest, 16 ); + vos_mem_copy( ( tANI_U8* )pOld->tclasParams.ipv6.srcIpAddr, + ( tANI_U8* )pNew->info.IpParams.params.IpV6Params.source, 16 ); + vos_mem_copy( ( tANI_U8* )pOld->tclasParams.ipv6.dstIpAddr, + ( tANI_U8* )pNew->info.IpParams.params.IpV6Params.dest, 16 ); pOld->tclasParams.ipv6.srcPort = pNew->info.IpParams.params.IpV6Params.src_port; pOld->tclasParams.ipv6.dstPort = pNew->info.IpParams.params.IpV6Params.dest_port; - palCopyMemory( pMac->hHdd, ( tANI_U8* )pOld->tclasParams.ipv6.flowLabel, ( tANI_U8* )pNew->info.IpParams.params.IpV6Params.flow_label, 3 ); + vos_mem_copy( ( tANI_U8* )pOld->tclasParams.ipv6.flowLabel, + ( tANI_U8* )pNew->info.IpParams.params.IpV6Params.flow_label, 3 ); } else { @@ -638,11 +657,11 @@ void CreateScanDataNullFrame(tpAniSirGlobal pMac, tSirMacMgmtHdr *macMgmtHdr, macMgmtHdr->seqControl.fragNum = 0; macMgmtHdr->seqControl.seqNumLo = 0; macMgmtHdr->seqControl.seqNumHi = 2; - palCopyMemory(pMac->hHdd, (void *)&macMgmtHdr->da, + vos_mem_copy( (void *)&macMgmtHdr->da, (void *)bssid, sizeof(tSirMacAddr)); - palCopyMemory(pMac->hHdd, (void *)&macMgmtHdr->sa, + vos_mem_copy( (void *)&macMgmtHdr->sa, (void *)selfMacAddr, sizeof(tSirMacAddr)); - palCopyMemory(pMac->hHdd, (void *)&macMgmtHdr->bssId, + vos_mem_copy( (void *)&macMgmtHdr->bssId, (void *)bssid, sizeof(tSirMacAddr)); return; @@ -663,7 +682,7 @@ void CreateScanCtsFrame(tpAniSirGlobal pMac, tSirMacMgmtHdr *macMgmtHdr, tSirMac macMgmtHdr->fc.toDS = 0; macMgmtHdr->durationLo = (tANI_U8) (SIR_MAC_MAX_DURATION_MICRO_SECONDS & 0xff); macMgmtHdr->durationHi = (tANI_U8) ((SIR_MAC_MAX_DURATION_MICRO_SECONDS & 0xff00) >> 8); - palCopyMemory(pMac->hHdd, (void *)macMgmtHdr->da, (void *)selfMac, sizeof(tSirMacAddr)); + vos_mem_copy( (void *)macMgmtHdr->da, (void *)selfMac, sizeof(tSirMacAddr)); return; } @@ -703,9 +722,9 @@ void CreateInitScanRawFrame(tpAniSirGlobal pMac, tSirMacMgmtHdr *macMgmtHdr, tBs macMgmtHdr->seqControl.fragNum = 0; macMgmtHdr->seqControl.seqNumLo = 0; macMgmtHdr->seqControl.seqNumHi = 2; - palCopyMemory(pMac->hHdd, (void *)&macMgmtHdr->da, (void *)pSta[0].bssId, 6); - palCopyMemory(pMac->hHdd, &macMgmtHdr->sa, pSta[0].staAddr, 6); - palCopyMemory(pMac->hHdd, (void *)&macMgmtHdr->bssId, (void *)pSta[0].bssId, 6); + vos_mem_copy( (void *)&macMgmtHdr->da, (void *)pSta[0].bssId, 6); + vos_mem_copy( &macMgmtHdr->sa, pSta[0].staAddr, 6); + vos_mem_copy( (void *)&macMgmtHdr->bssId, (void *)pSta[0].bssId, 6); } else if (role == eSYSTEM_AP_ROLE || role == eSYSTEM_STA_IN_IBSS_ROLE) { @@ -721,7 +740,7 @@ void CreateInitScanRawFrame(tpAniSirGlobal pMac, tSirMacMgmtHdr *macMgmtHdr, tBs macMgmtHdr->fc.toDS = 0; macMgmtHdr->durationLo = (tANI_U8) (SIR_MAC_MAX_DURATION_MICRO_SECONDS & 0xff); macMgmtHdr->durationHi = (tANI_U8) ((SIR_MAC_MAX_DURATION_MICRO_SECONDS & 0xff00) >> 8); - palCopyMemory(pMac->hHdd, (void *)macMgmtHdr->da, (void *)pSta[0].staAddr, 6); + vos_mem_copy( (void *)macMgmtHdr->da, (void *)pSta[0].staAddr, 6); } return; #endif @@ -757,9 +776,9 @@ void CreateFinishScanRawFrame(tpAniSirGlobal pMac, tSirMacMgmtHdr *macMgmtHdr, t macMgmtHdr->seqControl.fragNum = 0; macMgmtHdr->seqControl.seqNumLo = 0; macMgmtHdr->seqControl.seqNumHi = 2; - palCopyMemory(pMac->hHdd, (void *)macMgmtHdr->da, (void *)pSta[0].bssId, 6); - palCopyMemory(pMac->hHdd, macMgmtHdr->sa, pSta[0].staAddr, 6); - palCopyMemory(pMac->hHdd, (void *)macMgmtHdr->bssId, (void *)pSta[0].bssId, 6); + vos_mem_copy( (void *)macMgmtHdr->da, (void *)pSta[0].bssId, 6); + vos_mem_copy( macMgmtHdr->sa, pSta[0].staAddr, 6); + vos_mem_copy( (void *)macMgmtHdr->bssId, (void *)pSta[0].bssId, 6); } diff --git a/CORE/TL/inc/wlan_qct_tl.h b/CORE/TL/inc/wlan_qct_tl.h index cce365da1e07..a25daf8eef19 100644 --- a/CORE/TL/inc/wlan_qct_tl.h +++ b/CORE/TL/inc/wlan_qct_tl.h @@ -25,7 +25,6 @@ * to the Linux Foundation. */ - #ifndef WLAN_QCT_WLANTL_H #define WLAN_QCT_WLANTL_H @@ -90,7 +89,6 @@ when who what, where, why #ifdef QCA_WIFI_2_0 #include "adf_nbuf.h" #endif - /*---------------------------------------------------------------------------- * Preprocessor Definitions and Constants * -------------------------------------------------------------------------*/ @@ -140,6 +138,9 @@ when who what, where, why #define WLANTL_HO_DEFAULT_ALPHA 5 #define WLANTL_HO_TDLS_ALPHA 7 +// Choose the largest possible value that can be accomodates in 8 bit signed +// variable. +#define SNR_HACK_BMPS (127) /*-------------------------------------------------------------------------- Access category enum used by TL - order must be kept as these values are used to setup the AC mask @@ -424,6 +425,10 @@ typedef struct v_U16_t ucDesSTAId; /*Rssi based on the received packet */ v_S7_t rssiAvg; + #ifdef FEATURE_WLAN_TDLS + /* Packet received on direct link/AP link */ + v_U8_t isStaTdls; + #endif }WLANTL_RxMetaInfoType; @@ -1193,6 +1198,7 @@ WLANTL_STAPtkInstalled SIDE EFFECTS ============================================================================*/ +#ifndef QCA_WIFI_2_0 VOS_STATUS WLANTL_GetSTAState ( @@ -1200,6 +1206,18 @@ WLANTL_GetSTAState v_U8_t ucSTAId, WLANTL_STAStateType *ptlSTAState ); +#else +static inline VOS_STATUS +WLANTL_GetSTAState +( + v_PVOID_t pvosGCtx, + v_U8_t ucSTAId, + WLANTL_STAStateType *ptlSTAState +) +{ + return VOS_STATUS_SUCCESS; +} +#endif /* QCA_WIFI_2_0 */ /*=========================================================================== @@ -1466,12 +1484,58 @@ WLANTL_TxBAPFrm SIDE EFFECTS ============================================================================*/ + VOS_STATUS WLANTL_GetRssi ( v_PVOID_t pvosGCtx, v_U8_t ucSTAId, - v_S7_t* puRssi + v_S7_t* puRssi, + v_PVOID_t pGetRssiReq +); +/*========================================================================== + + FUNCTION WLANTL_GetSnr + + DESCRIPTION + TL will extract the SNR information from every data packet from the + ongoing traffic and will store it. It will provide the result to SME + upon request. + + DEPENDENCIES + + WARNING: the read and write of this value will not be protected + by locks, therefore the information obtained after a read + might not always be consistent. + + PARAMETERS + + IN + pvosGCtx: pointer to the global vos context; a handle to TL's + or SME's control block can be extracted from its context + ucSTAId: station identifier for the requested value + + OUT + puSnr: the average value of the SNR + + + RETURN VALUE + The result code associated with performing the operation + + VOS_STATUS_E_INVAL: Input parameters are invalid + VOS_STATUS_E_FAULT: Station ID is outside array boundaries or pointer + to TL cb is NULL ; access would cause a page fault + VOS_STATUS_E_EXISTS: STA was not yet registered + VOS_STATUS_SUCCESS: Everything is good :) + + SIDE EFFECTS + +============================================================================*/ +VOS_STATUS +WLANTL_GetSnr +( + tANI_U8 ucSTAId, + tANI_S8* pSnr ); /*========================================================================== @@ -2103,8 +2167,12 @@ WLANTL_EnableUAPSDForAC v_U8_t ucUP, v_U32_t uServiceInt, v_U32_t uSuspendInt, +#ifdef QCA_WIFI_2_0 WLANTL_TSDirType wTSDir, v_U32_t sessionId +#else + WLANTL_TSDirType wTSDir +#endif ); @@ -2140,8 +2208,12 @@ WLANTL_DisableUAPSDForAC ( v_PVOID_t pvosGCtx, v_U8_t ucSTAId, +#ifdef QCA_WIFI_2_0 WLANTL_ACEnumType ucACId, v_U32_t sessionId +#else + WLANTL_ACEnumType ucACId +#endif ); #if defined WLAN_FEATURE_NEIGHBOR_ROAMING @@ -2583,6 +2655,26 @@ VOS_STATUS WLANTL_Finish_ULA( void (*callbackRoutine) (void *callbackContext), void WLANTL_UpdateRssiBmps(v_PVOID_t pvosGCtx, v_U8_t staId, v_S7_t rssi); +/*=============================================================================== + FUNCTION WLANTL_UpdateSnrBmps + + DESCRIPTION This function updates the TL's SNR (in BMPS mode) + + DEPENDENCIES None + + PARAMETERS + + pvosGCtx VOS context VOS Global context + staId Station ID Station ID + snr SNR (BMPS mode) SNR in BMPS mode + + RETURN None + + SIDE EFFECTS none + ===============================================================================*/ + +void WLANTL_UpdateSnrBmps(v_PVOID_t pvosGCtx, v_U8_t staId, v_S7_t snr); + /*========================================================================== FUNCTION WLANTL_SetTxXmitPending @@ -2699,7 +2791,7 @@ WLANTL_ClearTxXmitPending VOS_STATUS_E_EXISTS: Station was not registered VOS_STATUS_SUCCESS: Everything is good :) - SIDE EFFECTS + SIDE EFFECTS ============================================================================*/ VOS_STATUS @@ -2712,4 +2804,298 @@ WLANTL_UpdateSTABssIdforIBSS +/*=============================================================================== + FUNCTION WLANTL_UpdateLinkCapacity + + DESCRIPTION This function updates the STA's Link Capacity in TL + + DEPENDENCIES None + + PARAMETERS + + pvosGCtx VOS context VOS Global context + staId Station ID Station ID + linkCapacity linkCapacity Link Capacity + + RETURN None + + SIDE EFFECTS none + ===============================================================================*/ + +void +WLANTL_UpdateLinkCapacity +( + v_PVOID_t pvosGCtx, + v_U8_t staId, + v_U32_t linkCapacity); + +/*=========================================================================== + + FUNCTION WLANTL_GetSTALinkCapacity + + DESCRIPTION + + Returns Link Capacity of a particular STA. + + DEPENDENCIES + + A station must have been registered before its state can be retrieved. + + PARAMETERS + + IN + pvosGCtx: pointer to the global vos context; a handle to TL's + control block can be extracted from its context + ucSTAId: identifier of the station + + OUT + plinkCapacity: the current link capacity the connection to + the given station + + + RETURN VALUE + + The result code associated with performing the operation + + VOS_STATUS_E_INVAL: Input parameters are invalid + VOS_STATUS_E_FAULT: Station ID is outside array boundaries or pointer to + TL cb is NULL ; access would cause a page fault + VOS_STATUS_E_EXISTS: Station was not registered + VOS_STATUS_SUCCESS: Everything is good :) + + SIDE EFFECTS + +============================================================================*/ + +#ifndef QCA_WIFI_2_0 +VOS_STATUS +WLANTL_GetSTALinkCapacity +( + v_PVOID_t pvosGCtx, + v_U8_t ucSTAId, + v_U32_t *plinkCapacity +); +#else +static inline VOS_STATUS +WLANTL_GetSTALinkCapacity +( + v_PVOID_t pvosGCtx, + v_U8_t ucSTAId, + v_U32_t *plinkCapacity +) +{ + return VOS_STATUS_SUCCESS; +} +#endif /* QCA_WIFI_2_0 */ +/*=========================================================================== + FUNCTION WLANTL_TxThreadDebugHandler + + DESCRIPTION + Printing TL Snapshot dump, processed under TxThread context, currently + information regarding the global TlCb struture. Dumps information related + to per active STA connection currently in use by TL. + + DEPENDENCIES + The TL must be initialized before this gets called. + + PARAMETERS + + IN + pvosGCtx: Pointer to the global vos context; a handle to TL's + or WDA's control block can be extracted from its context + + RETURN VALUE None + + SIDE EFFECTS +============================================================================*/ + +v_VOID_t +WLANTL_TxThreadDebugHandler +( + v_PVOID_t *pvosGCtx +); + +/*========================================================================== + FUNCTION WLANTL_TLDebugMessage + + DESCRIPTION + Post a TL Snapshot request, posts message in TxThread. + + DEPENDENCIES + The TL must be initialized before this gets called. + + PARAMETERS + + IN + displaySnapshot Boolean showing whether to dump the snapshot or not. + + RETURN VALUE None + + SIDE EFFECTS + +============================================================================*/ + +#ifndef QCA_WIFI_2_0 +v_VOID_t +WLANTL_TLDebugMessage +( + v_BOOL_t displaySnapshot +); +#else +static inline v_VOID_t +WLANTL_TLDebugMessage +( + v_BOOL_t displaySnapshot +) +{ + +} +#endif /* QCA_WIFI_2_0 */ + +#ifdef WLAN_FEATURE_RELIABLE_MCAST +/*============================================================================= + FUNCTION WLANTL_EnableReliableMcast + + DESCRIPTION + This function enables data path of reliable multicast transmitter in TL + + DEPENDENCIES + Reliable multicast receive leader must be selected by FW before + UMAC calling this API + + PARAMETERS + + IN + + pvosGCtx : Pointer to VOS global context + pMcastAddr : Pointer to MAC ADDR of reliable multicast transmitter + + RETURN VALUE + The result code associated with performing the operation + + VOS_STATUS_E_FAULT: Sanity check on input failed + + VOS_STATUS_SUCCESS: Everything is good :) + + Other return values are possible coming from the called functions. + Please check API for additional info. + + SIDE EFFECTS + +==============================================================================*/ +#ifndef QCA_WIFI_2_0 +VOS_STATUS +WLANTL_EnableReliableMcast +( + v_PVOID_t pvosGCtx, + v_MACADDR_t *pMcastAddr +); +#else +static inline VOS_STATUS +WLANTL_EnableReliableMcast +( + v_PVOID_t pvosGCtx, + v_MACADDR_t *pMcastAddr +) +{ + return VOS_STATUS_SUCCESS; +} +#endif /* QCA_WIFI_2_0 */ + +/*============================================================================= + FUNCTION WLANTL_DisableReliableMcast + + DESCRIPTION + This function disables data path of reliable multicast transmitter in TL + + DEPENDENCIES + HDD should have recived IOCTL to disable reliable RMC + + PARAMETERS + + IN + + pvosGCtx : Pointer to VOS global context + pMcastAddr : Pointer to MAC ADDR of reliable multicast transmitter + + RETURN VALUE + The result code associated with performing the operation + + VOS_STATUS_E_FAULT: Sanity check on input failed + + VOS_STATUS_SUCCESS: Everything is good :) + + Other return values are possible coming from the called functions. + Please check API for additional info. + + SIDE EFFECTS + +==============================================================================*/ +#ifndef QCA_WIFI_2_0 +VOS_STATUS +WLANTL_DisableReliableMcast +( + v_PVOID_t pvosGCtx, + v_MACADDR_t *pMcastAddr +); +#else +static inline VOS_STATUS +WLANTL_DisableReliableMcast +( + v_PVOID_t pvosGCtx, + v_MACADDR_t *pMcastAddr +) +{ + return VOS_STATUS_SUCCESS; +} +#endif /* QCA_WIFI_2_0 */ +/*============================================================================= + FUNCTION WLANTL_SetMcastDuplicateDetection + + DESCRIPTION + This function sets multicate duplicate detection operation. + If enable is 1, the detection is enabled, else it is disabled. + + DEPENDENCIES + + PARAMETERS + + IN + + pvosGCtx : Pointer to VOS global context + enable : Boolean to enable or disable + + RETURN VALUE + The result code associated with performing the operation + + VOS_STATUS_E_FAULT: Sanity check on input failed + + VOS_STATUS_SUCCESS: Everything is good :) + + Other return values are possible coming from the called functions. + Please check API for additional info. + + SIDE EFFECTS + +==============================================================================*/ +#ifndef QCA_WIFI_2_0 +VOS_STATUS +WLANTL_SetMcastDuplicateDetection +( + v_PVOID_t pvosGCtx, + v_U8_t enable +); +#else +static inline VOS_STATUS +WLANTL_SetMcastDuplicateDetection +( + v_PVOID_t pvosGCtx, + v_U8_t enable +) +{ + return VOS_STATUS_SUCCESS; +} +#endif /* QCA_WIFI_2_0 */ +#endif /*End of WLAN_FEATURE_RELIABLE_MCAST*/ + #endif /* #ifndef WLAN_QCT_WLANTL_H */ diff --git a/CORE/TL/src/wlan_qct_tl.c b/CORE/TL/src/wlan_qct_tl.c index 14dc7ef78577..97336355bf3d 100644 --- a/CORE/TL/src/wlan_qct_tl.c +++ b/CORE/TL/src/wlan_qct_tl.c @@ -61,6 +61,7 @@ when who what, where, why ---------- --- -------------------------------------------------------- +2013-08-19 rajekuma Added reliable multicast support 2010-07-13 c_shinde Fixed an issue where WAPI rekeying was failing because WAI frame sent out during rekeying had the protected bit set to 1. @@ -144,13 +145,13 @@ /*Enables debugging FC control frame in TL*/ //#define TL_DEBUG_FC //#define WLAN_SOFTAP_FLOWCTRL_EN - //#define BTAMP_TEST #ifdef TL_DEBUG_FC #include #include // wpalReadRegister #endif +extern tVOS_CON_MODE hdd_get_conparam ( void ); /*---------------------------------------------------------------------------- * Preprocessor Definitions and Constants * -------------------------------------------------------------------------*/ @@ -165,6 +166,7 @@ static v_U8_t WLANTL_AIRONET_SNAP_HEADER[] = {0xAA, 0xAA, 0x03, 0x00, 0x40, 0x9 /*BT-AMP packet LLC OUI value*/ const v_U8_t WLANTL_BT_AMP_OUI[] = {0x00, 0x19, 0x58 }; +#define WLANTL_MAX_SNR_DATA_SAMPLES 20 #ifdef VOLANS_PERF #define WLANTL_BD_PDU_INTERRUPT_ENABLE_THRESHOLD 120 @@ -218,7 +220,8 @@ int bdPduInterruptGetThreshold = WLANTL_BD_PDU_INTERRUPT_GET_THRESHOLD; #define SWAP_ENDIAN_UINT32(a) ((a) = ((a) >> 0x18 ) |(((a) & 0xFF0000) >> 0x08) | \ (((a) & 0xFF00) << 0x08) | (((a) & 0xFF) << 0x18)) - +/* Maximum value of SNR that can be calculated by the HW */ +#define WLANTL_MAX_HW_SNR 35 /*-------------------------------------------------------------------------- TID to AC mapping in TL @@ -328,7 +331,6 @@ typedef struct #define WLAN_TL_INVALID_B_SIG 255 #define ENTER() VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO, "Enter:%s", __func__) - #define WLAN_TL_AC_ARRAY_2_MASK( _pSTA, _ucACMask, i ) \ do\ {\ @@ -592,6 +594,17 @@ WLANTL_Open } #endif +#ifdef WLAN_FEATURE_RELIABLE_MCAST + /*Initialize RMC suppport in TL*/ + status = WLANTL_RmcInit(pvosGCtx); + if (!VOS_IS_STATUS_SUCCESS(status)) + { + TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "Reliable multicast module init fail")); + return status; + } +#endif + pTLCb->isBMPS = VOS_FALSE; pmcRegisterDeviceStateUpdateInd( smeContext, WLANTL_PowerStateChangedCB, pvosGCtx ); @@ -680,7 +693,6 @@ WLANTL_Start vos_atomic_set_U8( &pTLCb->ucTxSuspended, 0); pTLCb->uResCount = uResCount; - return VOS_STATUS_SUCCESS; }/* WLANTL_Start */ @@ -849,6 +861,14 @@ WLANTL_Close } #endif +#ifdef WLAN_FEATURE_RELIABLE_MCAST + if(VOS_STATUS_SUCCESS != WLANTL_RmcDeInit(pvosGCtx)) + { + TLLOGW(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_WARN, + "Reliable multicast module DeInit fail")); + } +#endif + /*------------------------------------------------------------------------ Cleanup TL control block. ------------------------------------------------------------------------*/ @@ -996,7 +1016,7 @@ WLANTL_StartForwarding vos_mem_zero( &sMessage, sizeof(vos_msg_t) ); uData = ucSTAId | (ucUcastSig << 8 ) | (ucBcastSig << 16); - sMessage.bodyptr = (v_PVOID_t)uData; + sMessage.bodyval = uData; sMessage.type = WLANTL_TX_FWD_CACHED; return vos_tx_mq_serialize(VOS_MQ_ID_TL, &sMessage); @@ -1401,6 +1421,10 @@ WLANTL_RegisterSTAClient pTLCb->ucTdlsPeerCount++; #endif } +#ifdef WLAN_FEATURE_RELIABLE_MCAST + vos_lock_init(&pClientSTA->mcLock); +#endif /* WLAN_FEATURE_RELIABLE_MCAST */ + return VOS_STATUS_SUCCESS; }/* WLANTL_RegisterSTAClient */ @@ -1502,6 +1526,15 @@ WLANTL_ClearSTAClient "WLAN TL:Clearing STA Client ID: %d", ucSTAId )); WLANTL_CleanSTA(pTLCb->atlSTAClients[ucSTAId], 1 /*empty packets*/); +#ifdef WLAN_FEATURE_RELIABLE_MCAST + /*-------------------------------------------------------------------- + Delete multicast entries for duplicate detection + --------------------------------------------------------------------*/ + WLANTL_McastDeleteAllEntries(pTLCb->atlSTAClients[ucSTAId]); + + vos_lock_destroy(&pTLCb->atlSTAClients[ucSTAId]->mcLock); +#endif /* WLAN_FEATURE_RELIABLE_MCAST */ + TLLOG2(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO_HIGH, "WLAN TL:Clearing STA Reset History RSSI and Region number")); pTLCb->hoSupport.currentHOState.historyRSSI = 0; @@ -2376,7 +2409,8 @@ WLANTL_TxBAPFrm { vosStatus = WLANTL_Translate8023To80211Header( vosDataBuff, &vosStatus, pTLCb, &ucStaId, - pMetaInfo->ucUP, &ucWDSEnabled, &extraHeadSpace); + pMetaInfo, &ucWDSEnabled, + &extraHeadSpace); if ( VOS_STATUS_SUCCESS != vosStatus ) { @@ -2498,11 +2532,13 @@ WLANTL_GetRssi ( v_PVOID_t pvosGCtx, v_U8_t ucSTAId, - v_S7_t* pRssi + v_S7_t* pRssi, + v_PVOID_t pGetRssiReq ) { WLANTL_CbType* pTLCb = NULL; WLANTL_STAClientType* pClientSTA = NULL; + tpAniSirGlobal pMac = vos_get_context(VOS_MODULE_ID_WDA, pvosGCtx); /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/ /*------------------------------------------------------------------------ @@ -2552,7 +2588,7 @@ WLANTL_GetRssi /*------------------------------------------------------------------------ Copy will not be locked; please read restriction ------------------------------------------------------------------------*/ - if(pTLCb->isBMPS) + if(pTLCb->isBMPS || IS_ACTIVEMODE_OFFLOAD_FEATURE_ENABLE) { *pRssi = pClientSTA->rssiAvgBmps; /* Check If RSSI is zero because we are reading rssAvgBmps updated by HAL in @@ -2569,6 +2605,14 @@ WLANTL_GetRssi *pRssi = pClientSTA->rssiAvg; } + if (VOS_STA_MODE == hdd_get_conparam() && pMac) { + if (ccmCfgSetInt(pMac, WNI_CFG_CURRENT_RSSI, ((*pRssi) * (-1)), NULL, + eANI_BOOLEAN_FALSE) == eHAL_STATUS_FAILURE) { + TLLOGW(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + FL("Could not pass WNI_CFG_CURRENT_RSSI"))); + } + } + TLLOG2(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO_HIGH, "WLAN TL:WLANTL_GetRssi for STA: %d RSSI: %d%s", ucSTAId, *pRssi, @@ -2577,6 +2621,142 @@ WLANTL_GetRssi return VOS_STATUS_SUCCESS; }/* WLANTL_GetRssi */ +/*========================================================================== + + FUNCTION WLANTL_GetSnr + + DESCRIPTION + TL will extract the SNR information from every data packet from the + ongoing traffic and will store it. It will provide the result to SME + upon request. + + DEPENDENCIES + + WARNING: the read and write of this value will not be protected + by locks, therefore the information obtained after a read + might not always be consistent. + + PARAMETERS + + IN + pvosGCtx: pointer to the global vos context; a handle to TL's + or SME's control block can be extracted from its context + ucSTAId: station identifier for the requested value + + OUT + pSnr: the average value of the SNR + + + RETURN VALUE + The result code associated with performing the operation + + VOS_STATUS_E_INVAL: Input parameters are invalid + VOS_STATUS_E_FAULT: Station ID is outside array boundaries or pointer + to TL cb is NULL ; access would cause a page fault + VOS_STATUS_E_EXISTS: STA was not yet registered + VOS_STATUS_SUCCESS: Everything is good :) + + SIDE EFFECTS + +============================================================================*/ +VOS_STATUS +WLANTL_GetSnr +( + tANI_U8 ucSTAId, + tANI_S8* pSnr +) +{ + WLANTL_CbType* pTLCb = NULL; + WLANTL_STAClientType* pClientSTA = NULL; + /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/ + + /*------------------------------------------------------------------------ + Sanity check + ------------------------------------------------------------------------*/ + if (NULL == pSnr) + { + TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "WLAN TL:Invalid parameter sent on %s", __func__)); + return VOS_STATUS_E_INVAL; + } + + if (WLANTL_STA_ID_INVALID(ucSTAId)) + { + TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "WLAN TL:Invalid station id requested on %s", __func__)); + return VOS_STATUS_E_FAULT; + } + + /*------------------------------------------------------------------------ + Extract TL control block and check existance + ------------------------------------------------------------------------*/ + pTLCb = VOS_GET_TL_CB(vos_get_global_context(VOS_MODULE_ID_TL, NULL)); + if (NULL == pTLCb) + { + TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "WLAN TL:Invalid TL pointer from pvosGCtx on %s", __func__)); + return VOS_STATUS_E_FAULT; + } + + pClientSTA = pTLCb->atlSTAClients[ucSTAId]; + + if (NULL == pClientSTA) + { + TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "WLAN TL:Client Memory was not allocated on %s", __func__)); + return VOS_STATUS_E_FAILURE; + } + + if (0 == pClientSTA->ucExists) + { + TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "WLAN TL:Station was not previously registered on %s", __func__)); + return VOS_STATUS_E_EXISTS; + } + + /*------------------------------------------------------------------------ + Copy will not be locked; please read restriction + ------------------------------------------------------------------------*/ + if (pTLCb->isBMPS) + { + *pSnr = pClientSTA->snrAvgBmps; + } + else + { + /* SNR is averaged over WLANTL_MAX_SNR_DATA_SAMPLES, if there are not enough + * data samples (snridx) to calculate the average then return the + * average for the window of prevoius 20 packets. And if there aren't + * enough samples and the average for previous window of 20 packets is + * not available then return a predefined value + * + * NOTE: the SNR_HACK_BMPS value is defined to 127, documents from HW + * team reveal that the SNR value has a ceiling well below 127 dBm, + * so if SNR has value of 127 the userspace applications can know that + * the SNR has not been computed yet because enough data was not + * available for SNR calculation + */ + if (pClientSTA->snrIdx > (WLANTL_MAX_SNR_DATA_SAMPLES/2) + || !(pClientSTA->prevSnrAvg)) + { + *pSnr = pClientSTA->snrSum / pClientSTA->snrIdx; + } + else if (pClientSTA->prevSnrAvg) + { + *pSnr = pClientSTA->prevSnrAvg; + } + else + { + *pSnr = SNR_HACK_BMPS; + } + } + + VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO_HIGH, + "WLAN TL:WLANTL_GetSnr for STA: %d SNR: %d%s", + ucSTAId, *pSnr, + pTLCb->isBMPS ? " in BMPS" : ""); + + return VOS_STATUS_SUCCESS; +}/* WLANTL_GetSnr */ /*========================================================================== FUNCTION WLANTL_GetLinkQuality @@ -3337,7 +3517,15 @@ WLANTL_SuspendDataTx return VOS_STATUS_E_FAULT; } - if ( pTLCb->atlSTAClients[*pucSTAId] && (0 == pTLCb->atlSTAClients[*pucSTAId]->ucExists )) + if ( NULL == pTLCb->atlSTAClients[*pucSTAId] ) + { + TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "WLAN TL:Invalid pTLCb->atlSTAClients pointer for STA Id :%d on " + "WLANTL_SuspendDataTx", *pucSTAId)); + return VOS_STATUS_E_FAULT; + } + + if ( 0 == pTLCb->atlSTAClients[*pucSTAId]->ucExists ) { TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, "WLAN TL:Station %d was not previously registered on WLANTL_SuspendDataTx", *pucSTAId)); @@ -3437,7 +3625,15 @@ WLANTL_ResumeDataTx return VOS_STATUS_E_FAULT; } - if ( pTLCb->atlSTAClients[*pucSTAId] && (0 == pTLCb->atlSTAClients[*pucSTAId]->ucExists )) + if ( NULL == pTLCb->atlSTAClients[*pucSTAId] ) + { + TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "WLAN TL:Invalid pTLCb->atlSTAClients pointer for STA Id :%d on " + "WLANTL_ResumeDataTx", *pucSTAId)); + return VOS_STATUS_E_FAULT; + } + + if ( 0 == pTLCb->atlSTAClients[*pucSTAId]->ucExists ) { TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, "WLAN TL:Station %d was not previously registered on WLANTL_ResumeDataTx", *pucSTAId)); @@ -4043,7 +4239,7 @@ WLANTL_GetFrames if ( NULL != pfnSTAFsm ) { pClientSTA->ucNoMoreData = 0; - vosStatus = pfnSTAFsm( pvosGCtx, ucSTAId, &vosTempBuf); + vosStatus = pfnSTAFsm( pvosGCtx, ucSTAId, &vosTempBuf, VOS_FALSE); if (( VOS_STATUS_SUCCESS != vosStatus ) && ( NULL != vosTempBuf )) @@ -4179,7 +4375,7 @@ WLANTL_GetFrames if ( NULL != pfnSTAFsm ) { pClientSTA->ucNoMoreData = 0; - vosStatus = pfnSTAFsm( pvosGCtx, ucSTAId, &vosTempBuf); + vosStatus = pfnSTAFsm( pvosGCtx, ucSTAId, &vosTempBuf, VOS_FALSE); if (( VOS_STATUS_SUCCESS != vosStatus ) && ( NULL != vosTempBuf )) @@ -4758,8 +4954,7 @@ done: }/*WLANTL_ForwardSTAFrames*/ - -#ifdef FEATURE_WLAN_CCX +#if defined(FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_CCX_UPLOAD) /*========================================================================== FUNCTION WLANTL_IsIAPPFrame @@ -5005,7 +5200,7 @@ WLANTL_ProcessBAPFrame /* software frame translation for BTAMP WDS.*/ WLANTL_Translate80211To8023Header( vosTempBuff, &vosStatus, usActualHLen, - ucMPDUHLen, pTLCb,ucSTAId ); + ucMPDUHLen, pTLCb,ucSTAId, VOS_FALSE); } if (pTLCb->tlBAPClient.pfnTlBAPRx) @@ -5304,6 +5499,7 @@ WLANTL_RxFrames v_U8_t ucMPDUHLen = 0 ; v_U16_t usEtherType = 0; #endif + v_BOOL_t bForwardIAPPwithLLC = VOS_FALSE; /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/ TLLOG2(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO_HIGH, @@ -5443,19 +5639,27 @@ WLANTL_RxFrames #else vosStatus = WLANTL_ReadRSSI(pvosGCtx, pvBDHeader, ucSTAId); #endif - } + if (!VOS_IS_STATUS_SUCCESS(vosStatus)) + { + TLLOGW(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_WARN, + "Handle RX Management Frame fail within Handoff " + "support module")); + /* Do Not Drop packet at here + * Revisit why HO module return fail + * vos_pkt_return_packet(vosTempBuff); + * vosTempBuff = vosDataBuff; + * continue; + */ + } + vosStatus = WLANTL_ReadSNR(pvosGCtx, pvBDHeader, ucSTAId); - if(!VOS_IS_STATUS_SUCCESS(vosStatus)) - { - TLLOGW(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_WARN, - "Handle RX Management Frame fail within Handoff support module")); - /* Do Not Drop packet at here - * Revisit why HO module return fail - vos_pkt_return_packet(vosTempBuff); - vosTempBuff = vosDataBuff; - continue; - */ + if (!VOS_IS_STATUS_SUCCESS(vosStatus)) + { + TLLOGW(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_WARN, + FL("Failed to Read SNR"))); + } } + pTLCb->tlMgmtFrmClient.pfnTlMgmtFrmRx( pvosGCtx, vosTempBuff); } else /* Data Frame */ @@ -5588,7 +5792,22 @@ WLANTL_RxFrames continue; } -#ifdef FEATURE_WLAN_CCX +#ifdef FEATURE_WLAN_CCX_UPLOAD + if ((pClientSTA->wSTADesc.ucIsCcxSta)|| broadcast) + { + /*-------------------------------------------------------------------- + Filter the IAPP frames for CCX connection; + if data it will return false and it + will be routed through the regular data path + --------------------------------------------------------------------*/ + if ( WLANTL_IsIAPPFrame(pvBDHeader, + vosTempBuff)) + { + bForwardIAPPwithLLC = VOS_TRUE; + } + } +#endif +#if defined(FEATURE_WLAN_CCX) && !defined(FEATURE_WLAN_CCX_UPLOAD) if ((pClientSTA->wSTADesc.ucIsCcxSta)|| broadcast) { /*-------------------------------------------------------------------- @@ -5616,7 +5835,7 @@ WLANTL_RxFrames continue; } } -#endif +#endif /* defined(FEATURE_WLAN_CCX) && !defined(FEATURE_WLAN_CCX_UPLOAD) */ if ( WLAN_STA_BT_AMP == pClientSTA->wSTADesc.wSTAType ) { @@ -5664,18 +5883,49 @@ WLANTL_RxFrames #else vosStatus = WLANTL_ReadRSSI(pvosGCtx, pvBDHeader, ucSTAId); #endif /*FEATURE_WLAN_GEN6_ROAMING*/ - if(!VOS_IS_STATUS_SUCCESS(vosStatus)) + if (!VOS_IS_STATUS_SUCCESS(vosStatus)) { TLLOGW(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_WARN, "Handle RX Data Frame fail within Handoff support module")); /* Do Not Drop packet at here * Revisit why HO module return fail - vos_pkt_return_packet(vosTempBuff); - vosTempBuff = vosDataBuff; - continue; + * vos_pkt_return_packet(vosTempBuff); + * vosTempBuff = vosDataBuff; + * continue; */ } - pfnSTAFsm( pvosGCtx, ucSTAId, &vosTempBuff); + else { + v_S7_t currentRSSI = 0, currentRSSI0, currentRSSI1; + tpAniSirGlobal pMac = vos_get_context(VOS_MODULE_ID_WDA, pvosGCtx); + + if (VOS_STA_MODE == hdd_get_conparam()) { + /* update the RSSI value in cfg when acting as STA + * and connected to AP. TODO: check if frames are + * from associated AP only + */ + if (NULL != pMac) { + currentRSSI0 = WLANTL_GETRSSI0(pvBDHeader); + currentRSSI1 = WLANTL_GETRSSI1(pvBDHeader); + currentRSSI = (currentRSSI0 > currentRSSI1) ? currentRSSI0 : + currentRSSI1; + currentRSSI = currentRSSI * (-1); + if (ccmCfgSetInt(pMac, WNI_CFG_CURRENT_RSSI, currentRSSI, NULL, + eANI_BOOLEAN_FALSE) == eHAL_STATUS_FAILURE) { + TLLOGW(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + FL("Could not pass WNI_CFG_CURRENT_RSSI"))); + } + } + } + } + vosStatus = WLANTL_ReadSNR(pvosGCtx, pvBDHeader, ucSTAId); + + if (!VOS_IS_STATUS_SUCCESS(vosStatus)) + { + TLLOGW(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_WARN, + FL("Failed to Read SNR"))); + } + + pfnSTAFsm( pvosGCtx, ucSTAId, &vosTempBuff, bForwardIAPPwithLLC); } else { @@ -5868,12 +6118,12 @@ WLANTL_RxCachedFrames -------------------------------------------------------------------------*/ if ( !bSigMatch ) { - TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO_MED, "WLAN TL: Cached packet does not match DPU Sig of the new STA - drop " " DPU Sig %d UC %d BC %d B %d", uDPUSig, pClientSTA->wSTADesc.ucUcastSig, - pClientSTA->wSTADesc.ucUcastSig, + pClientSTA->wSTADesc.ucBcastSig, broadcast)); /* Drop packet */ @@ -5947,7 +6197,7 @@ WLANTL_RxCachedFrames */ } pfnSTAFsm( vos_get_global_context(VOS_MODULE_ID_TL,pTLCb), ucSTAId, - &vosTempBuff); + &vosTempBuff, VOS_FALSE); } else { @@ -6179,6 +6429,218 @@ WLANTL_ClearTxXmitPending return; }/*WLANTL_ClearTxXmitPending */ +/*========================================================================== + FUNCTION WLANTL_TxThreadDebugHandler + + DESCRIPTION + Printing TL Snapshot dump, processed under TxThread context, currently + information regarding the global TlCb struture. Dumps information related + to per active STA connection currently in use by TL. + + DEPENDENCIES + The TL must be initialized before this gets called. + + PARAMETERS + + IN + pvosGCtx: pointer to the global vos context; a handle to TL's + or WDA's control block can be extracted from its context + + RETURN VALUE None + + SIDE EFFECTS + +============================================================================*/ + +v_VOID_t +WLANTL_TxThreadDebugHandler +( + v_PVOID_t *pVosContext +) +{ + WLANTL_CbType* pTLCb = NULL; + WLANTL_STAClientType* pClientSTA = NULL; + int i = 0; + tWDA_CbContext *pWDA = NULL; + + TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_FATAL, + "WLAN TL: %s Enter ", __func__)); + + pTLCb = VOS_GET_TL_CB(pVosContext); + pWDA = (tWDA_CbContext *)vos_get_global_context(VOS_MODULE_ID_WDA, pVosContext); + + if ( NULL == pVosContext || NULL == pTLCb ) + { + TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "Global VoS Context or TL Context are NULL")); + return; + } + + if (NULL != pWDA) + { + TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "WDA uTxFlowMask: %d", pWDA->uTxFlowMask)); + } + TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "************************TL DUMP INFORMATION**************")); + + TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "uDelayedTriggerFrmInt:%d\tuMinFramesProcThres:%d", + pTLCb->tlConfigInfo.uDelayedTriggerFrmInt, + pTLCb->tlConfigInfo.uMinFramesProcThres)); + + TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "Management Frame Client exists: %d", + pTLCb->tlMgmtFrmClient.ucExists)); + TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "usPendingTxCompleteCount: %d\tucTxSuspended: %d", + pTLCb->usPendingTxCompleteCount, + pTLCb->ucTxSuspended)); + + TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "uResCount: %d", pTLCb->uResCount)); + + TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "ucRegisteredStaId: %d\tucCurrentSTA: %d", + pTLCb->ucRegisteredStaId, pTLCb->ucCurrentSTA)); + + TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "UrgentFrameProcessing: %s\tuFramesProcThres: %d", + (pTLCb->bUrgent?"True":"False"), pTLCb->uFramesProcThres)); + + TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "isTxTranmitMsgPending: %d\t isBMPS: %s", + pTLCb->isTxTranmitMsgPending, pTLCb->isBMPS?"True":"False")); + +#ifdef FEATURE_WLAN_TDLS + TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "TDLS Peer Count: %d", pTLCb->ucTdlsPeerCount)); +#endif + + TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "++++++++++++++++++++Registerd Client Information++++++++++")); + + for ( i =0; iatlSTAClients[i]; + if( NULL == pClientSTA || 0 == pClientSTA->ucExists) + { + continue; + } + + TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "######################STA Index: %d ############################",i)); + TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, "WLAN_STADescType:")); + TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "STAId: %d\t STA MAC Address: %pM", pClientSTA->wSTADesc.ucSTAId, + pClientSTA->wSTADesc.vSTAMACAddress.bytes)); + TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "STA Type: %d\tProtectedFrame: %d", + pClientSTA->wSTADesc.wSTAType, pClientSTA->wSTADesc.ucProtectedFrame)); + TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "QoS: %d\tRxFrameTrans: %d\tTxFrameTrans: %d", + pClientSTA->wSTADesc.ucQosEnabled, pClientSTA->wSTADesc.ucSwFrameRXXlation, + pClientSTA->wSTADesc.ucSwFrameTXXlation)); + TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "ucUcastSig: %d\tucBcastSig: %d", pClientSTA->wSTADesc.ucUcastSig, + pClientSTA->wSTADesc.ucBcastSig)); + + TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "ClientIndex: %d\t Exists: %d", i, pClientSTA->ucExists)); + TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "TL State: %d\t TL Priority: %d", pClientSTA->tlState, + pClientSTA->tlPri)); + TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "ucTxSuspended: %d\tucPktPending: %d", pClientSTA->ucTxSuspended, + pClientSTA->ucPktPending)); + TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "ucEAPOLPktPending: %d\tucNoMoreData: %d", + pClientSTA->ucEapolPktPending, pClientSTA->ucNoMoreData)); + TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "ucRxBlocked: %d\t fcStaTxDisabled: %d", pClientSTA->ucRxBlocked, + pClientSTA->fcStaTxDisabled)); + TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "ucCurrentAC: %d\tucServicedAC: %d", pClientSTA->ucCurrentAC, + pClientSTA->ucServicedAC)); + TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "TID: %d\tautTxCount[0]: %d\tauRxCount[0]: %d",0, pClientSTA->auTxCount[0], + pClientSTA->auRxCount[0])); + TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "aucAcMask[0]: %d\taucAcMask[1]: %d\taucAcMask[2]: %d\taucAcMask[3]: %d\t", + pClientSTA->aucACMask[0], pClientSTA->aucACMask[1], + pClientSTA->aucACMask[2], pClientSTA->aucACMask[3])); + TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "ucCurrentWeight: %d", pClientSTA->ucCurrentWeight)); + + if( WLAN_STA_SOFTAP == pClientSTA->wSTADesc.wSTAType) + { + TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "TrafficStatistics for SOFTAP Station:")); + TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "RUF=%d\tRMF=%d\tRBF=%d", pClientSTA->trafficStatistics.rxUCFcnt, + pClientSTA->trafficStatistics.rxMCFcnt, + pClientSTA->trafficStatistics.rxBCFcnt)); + TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "RUB=%d\tRMB=%d\tRBB=%d", pClientSTA->trafficStatistics.rxUCBcnt, + pClientSTA->trafficStatistics.rxMCBcnt, + pClientSTA->trafficStatistics.rxBCBcnt)); + TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "TUF=%d\tTMF=%d\tTBF=%d", pClientSTA->trafficStatistics.txUCFcnt, + pClientSTA->trafficStatistics.txMCFcnt, + pClientSTA->trafficStatistics.txBCFcnt)); + TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "TUB=%d\tTMB=%d\tTBB=%d", pClientSTA->trafficStatistics.txUCBcnt, + pClientSTA->trafficStatistics.txMCBcnt, + pClientSTA->trafficStatistics.txBCBcnt)); + } + } + return; +} + +/*========================================================================== + FUNCTION WLANTL_TLDebugMessage + + DESCRIPTION + Post a TL Snapshot request, posts message in TxThread. + + DEPENDENCIES + The TL must be initialized before this gets called. + + PARAMETERS + + IN + displaySnapshot Boolean showing whether to dump the snapshot or not. + + RETURN VALUE None + + SIDE EFFECTS + +============================================================================*/ + +v_VOID_t +WLANTL_TLDebugMessage +( + v_BOOL_t displaySnapshot +) +{ + vos_msg_t vosMsg; + VOS_STATUS status; + + if(displaySnapshot) + { + vosMsg.reserved = 0; + vosMsg.bodyptr = NULL; + vosMsg.type = WLANTL_TX_SNAPSHOT; + + status = vos_tx_mq_serialize( VOS_MODULE_ID_TL, &vosMsg); + if(status != VOS_STATUS_SUCCESS) + { + TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, "TX Msg Posting Failed with status: %d",status)); + return; + } + } + return; +} /*============================================================================ TL STATE MACHINE @@ -6219,7 +6681,8 @@ WLANTL_STATxConn ( v_PVOID_t pvosGCtx, v_U8_t ucSTAId, - vos_pkt_t** pvosDataBuff + vos_pkt_t** pvosDataBuff, + v_BOOL_t bForwardIAPPwithLLC ) { v_U16_t usPktLen; @@ -6444,7 +6907,7 @@ WLANTL_STATxConn /*Make sure TID is valid*/ if ( WLANTL_TID_INVALID(ucTid)) { - TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO_HIGH, "WLAN TL:Invalid TID sent in meta info %d - defaulting to 0 (BE)", ucTid)); ucTid = 0; @@ -6470,7 +6933,8 @@ WLANTL_STATxConn { vosStatus = WLANTL_Translate8023To80211Header( vosDataBuff, &vosStatus, pTLCb, &ucSTAId, - tlMetaInfo.ucUP, &ucWDSEnabled, &extraHeadSpace); + &tlMetaInfo, &ucWDSEnabled, + &extraHeadSpace); if ( VOS_STATUS_SUCCESS != vosStatus ) { TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, @@ -6591,7 +7055,8 @@ WLANTL_STATxAuth ( v_PVOID_t pvosGCtx, v_U8_t ucSTAId, - vos_pkt_t** pvosDataBuff + vos_pkt_t** pvosDataBuff, + v_BOOL_t bForwardIAPPwithLLC ) { v_U16_t usPktLen; @@ -6752,7 +7217,7 @@ WLANTL_STATxAuth /*Make sure TID is valid*/ if ( WLANTL_TID_INVALID(ucTid)) { - TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO_HIGH, "WLAN TL:Invalid TID sent in meta info %d - defaulting to 0 (BE)", ucTid)); ucTid = 0; @@ -6872,7 +7337,8 @@ WLANTL_STATxAuth vosStatus = WLANTL_Translate8023To80211Header( vosDataBuff, &vosStatus, pTLCb, &ucSTAId, - tlMetaInfo.ucUP, &ucWDSEnabled, &extraHeadSpace); + &tlMetaInfo, &ucWDSEnabled, + &extraHeadSpace); if ( VOS_STATUS_SUCCESS != vosStatus ) { TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, @@ -6886,7 +7352,18 @@ WLANTL_STATxAuth tlMetaInfo.ucDisableFrmXtl = 1; } } +#ifdef FEATURE_WLAN_TDLS + /*In case of TDLS, if the packet is destined to TDLS STA ucSTAId may + change. so update the pStaClient accordingly */ + pStaClient = pTLCb->atlSTAClients[ucSTAId]; + if ( NULL == pStaClient ) + { + TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "pStaClient is NULL %s", __func__)); + return VOS_STATUS_E_FAILURE; + } +#endif /*------------------------------------------------------------------------- Call HAL to fill BD header -------------------------------------------------------------------------*/ @@ -7029,7 +7506,8 @@ WLANTL_STATxDisc ( v_PVOID_t pvosGCtx, v_U8_t ucSTAId, - vos_pkt_t** pvosDataBuff + vos_pkt_t** pvosDataBuff, + v_BOOL_t bForwardIAPPwithLLC ) { WLANTL_CbType* pTLCb = NULL; @@ -7107,7 +7585,8 @@ WLANTL_STARxConn ( v_PVOID_t pvosGCtx, v_U8_t ucSTAId, - vos_pkt_t** pvosDataBuff + vos_pkt_t** pvosDataBuff, + v_BOOL_t bForwardIAPPwithLLC ) { WLANTL_CbType* pTLCb = NULL; @@ -7230,7 +7709,7 @@ WLANTL_STARxConn } vosStatus = WLANTL_Translate80211To8023Header( vosDataBuff, &vosStatus, usActualHLen, - ucMPDUHLen, pTLCb, ucSTAId); + ucMPDUHLen, pTLCb, ucSTAId, bForwardIAPPwithLLC); if ( VOS_STATUS_SUCCESS != vosStatus ) { @@ -7423,15 +7902,16 @@ WLANTL_FwdPktToHDD wRxMetaInfo.ucUP = (v_U8_t)(STAMetaInfo & WLANTL_AC_MASK); wRxMetaInfo.ucDesSTAId = ucDesSTAId; - vosStatus = pClientSTA->pfnSTARx( pvosGCtx, vosDataBuff, ucDesSTAId, + vosStatus = pClientSTA->pfnSTARx( pvosGCtx, vosDataBuff, ucDesSTAId, &wRxMetaInfo ); - if ( VOS_STATUS_SUCCESS != vosStatus ) - { - TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + if ( VOS_STATUS_SUCCESS != vosStatus ) + { + TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, "WLAN TL: failed to send pkt to HDD \n")); - vos_pkt_return_packet(vosDataBuff); - return vosStatus; - } + vos_pkt_return_packet(vosDataBuff); + + return vosStatus; + } vosDataBuff = vosNextDataBuff; } return VOS_STATUS_SUCCESS; @@ -7470,7 +7950,8 @@ WLANTL_STARxAuth ( v_PVOID_t pvosGCtx, v_U8_t ucSTAId, - vos_pkt_t** pvosDataBuff + vos_pkt_t** pvosDataBuff, + v_BOOL_t bForwardIAPPwithLLC ) { WLANTL_CbType* pTLCb = NULL; @@ -7596,6 +8077,25 @@ WLANTL_STARxAuth } } +#ifdef WLAN_FEATURE_RELIABLE_MCAST + if (pTLCb->multicastDuplicateDetectionEnabled && + (WLAN_STA_IBSS == pClientSTA->wSTADesc.wSTAType) && + WLANTL_IS_DATA_FRAME(WDA_GET_RX_TYPE_SUBTYPE(aucBDHeader))) + { + /* + * Multicast duplicate detection is only for frames received in + * IBSS mode. + */ + if (VOS_TRUE == WLANTL_IsDuplicateMcastFrm(pClientSTA, vosDataBuff)) + { + pTLCb->mcastDupCnt++; + /* Duplicate multicast data packet, drop the packet */ + vos_pkt_return_packet(vosDataBuff); + return VOS_STATUS_SUCCESS; + } + } +#endif /* WLAN_FEATURE_RELIABLE_MCAST */ + #ifdef FEATURE_WLAN_WAPI if ( pClientSTA->wSTADesc.ucIsWapiSta ) { @@ -7689,7 +8189,7 @@ WLANTL_STARxAuth usActualHLen = usMPDUDOffset - ucMPDUHOffset; } vosStatus = WLANTL_Translate80211To8023Header( vosDataBuff, &vosStatus, usActualHLen, - ucMPDUHLen, pTLCb, ucSTAId); + ucMPDUHLen, pTLCb, ucSTAId, bForwardIAPPwithLLC); if ( VOS_STATUS_SUCCESS != vosStatus ) { @@ -7832,6 +8332,16 @@ if(0 == ucUnicastBroadcastType { wRxMetaInfo.ucUP = ucTid; wRxMetaInfo.rssiAvg = pClientSTA->rssiAvg; +#ifdef FEATURE_WLAN_TDLS + if (WLAN_STA_TDLS == pClientSTA->wSTADesc.wSTAType) + { + wRxMetaInfo.isStaTdls = TRUE; + } + else + { + wRxMetaInfo.isStaTdls = FALSE; + } +#endif pClientSTA->pfnSTARx( pvosGCtx, vosDataBuff, ucSTAId, &wRxMetaInfo ); } @@ -7871,7 +8381,8 @@ WLANTL_STARxDisc ( v_PVOID_t pvosGCtx, v_U8_t ucSTAId, - vos_pkt_t** pvosDataBuff + vos_pkt_t** pvosDataBuff, + v_BOOL_t bForwardIAPPwithLLC ) { /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/ @@ -8232,7 +8743,7 @@ WLANTL_TxProcessMsg | 00 | ucBcastSignature | ucUcastSignature | ucSTAID | each field above is one byte ---------------------------------------------------------------------*/ - uData = (v_U32_t)message->bodyptr; + uData = message->bodyval; ucSTAId = ( uData & 0x000000FF); ucUcastSig = ( uData & 0x0000FF00)>>8; ucBcastSig = (v_U8_t)(( uData & 0x00FF0000)>>16); @@ -8266,10 +8777,8 @@ WLANTL_TxProcessMsg break; case WDA_DS_TX_START_XMIT: - - WLANTL_ClearTxXmitPending(pvosGCtx); - vosStatus = WDA_DS_TxFrames( pvosGCtx ); - + WLANTL_ClearTxXmitPending(pvosGCtx); + vosStatus = WDA_DS_TxFrames( pvosGCtx ); break; case WDA_DS_FINISH_ULA: @@ -8278,6 +8787,13 @@ WLANTL_TxProcessMsg callbackRoutine(callbackContext); break; + case WLANTL_TX_SNAPSHOT: + /*Dumping TL State and then continuing to print + the DXE Dump*/ + WLANTL_TxThreadDebugHandler(pvosGCtx); + WDA_TransportChannelDebug(NULL, VOS_TRUE, VOS_FALSE); + break; + default: /*no processing for now*/ break; @@ -8643,7 +9159,7 @@ WLANTL_Translate8023To80211Header VOS_STATUS* pvosStatus, WLANTL_CbType* pTLCb, v_U8_t *pucStaId, - v_U8_t ucUP, + WLANTL_MetaInfoType *tlMetaInfo, v_U8_t *ucWDSEnabled, v_U8_t *extraHeadSpace ) @@ -8657,6 +9173,11 @@ WLANTL_Translate8023To80211Header WLANTL_STAClientType* pClientSTA = NULL; v_U8_t ucQoSOffset = WLAN80211_MANDATORY_HEADER_SIZE; v_U8_t ucStaId; +#ifdef FEATURE_WLAN_CCX_UPLOAD + v_BOOL_t bIAPPTxwithLLC = VOS_FALSE; + v_SIZE_t wIAPPSnapSize = WLANTL_LLC_HEADER_LEN; + v_U8_t wIAPPSnap[WLANTL_LLC_HEADER_LEN] = {0}; +#endif *ucWDSEnabled = 0; // default WDS off. vosStatus = vos_pkt_pop_head( vosDataBuff, &w8023Header, @@ -8694,7 +9215,8 @@ WLANTL_Translate8023To80211Header for ( ucIndex = 0; ucIndex < WLAN_MAX_STA_COUNT ; ucIndex++) { if ( ucIndex != ucStaId && pTLCb->atlSTAClients[ucIndex] && pTLCb->atlSTAClients[ucIndex]->ucExists && - !pTLCb->atlSTAClients[ucIndex]->ucTxSuspended && + (pTLCb->atlSTAClients[ucIndex]->tlState == WLANTL_STA_AUTHENTICATED) && + (!pTLCb->atlSTAClients[ucIndex]->ucTxSuspended) && vos_mem_compare( (void*)pTLCb->atlSTAClients[ucIndex]->wSTADesc.vSTAMACAddress.bytes, (void*)w8023Header.vDA, 6) ) { @@ -8715,8 +9237,33 @@ WLANTL_Translate8023To80211Header } #endif +#ifdef FEATURE_WLAN_CCX_UPLOAD + if ((0 == w8023Header.usLenType) && (pClientSTA->wSTADesc.ucIsCcxSta)) + { + vos_pkt_extract_data(vosDataBuff,0,&wIAPPSnap[0],&wIAPPSnapSize); + if (vos_mem_compare(wIAPPSnap, + WLANTL_AIRONET_SNAP_HEADER, + WLANTL_LLC_HEADER_LEN)) + { + /* + * The SNAP and the protocol type are already in the data buffer. + * They are filled by the application (wpa_supplicant). So, + * Skip Adding LLC below. + */ + bIAPPTxwithLLC = VOS_TRUE; + } + else + { + bIAPPTxwithLLC = VOS_FALSE; + } + } +#endif /* FEATURE_WLAN_CCX_UPLOAD */ - if ( 0 != pClientSTA->wSTADesc.ucAddRmvLLC ) + if ((0 != pClientSTA->wSTADesc.ucAddRmvLLC) +#ifdef FEATURE_WLAN_CCX_UPLOAD + && (!bIAPPTxwithLLC) +#endif /* FEATURE_WLAN_CCX_UPLOAD */ + ) { /* Push the length */ vosStatus = vos_pkt_push_head(vosDataBuff, @@ -8761,6 +9308,12 @@ WLANTL_Translate8023To80211Header }/*If add LLC is enabled*/ else { +#ifdef FEATURE_WLAN_CCX_UPLOAD + bIAPPTxwithLLC = VOS_FALSE; /* + * Reset the Flag here to start afresh + * with the next TX pkt + */ +#endif /* FEATURE_WLAN_CCX_UPLOAD */ TLLOG2(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO_HIGH, "WLAN TL: STA Client registered to not remove LLC" " WLANTL_Translate8023To80211Header")); @@ -8827,7 +9380,7 @@ WLANTL_Translate8023To80211Header { pw80211Header->wFrmCtrl.subType = WLANTL_80211_DATA_QOS_SUBTYPE; - *((v_U16_t *)((v_U8_t *)ppvBDHeader + ucQoSOffset)) = ucUP; + *((v_U16_t *)((v_U8_t *)ppvBDHeader + ucQoSOffset)) = tlMetaInfo->ucUP; } else @@ -8842,36 +9395,49 @@ WLANTL_Translate8023To80211Header switch( pClientSTA->wSTADesc.wSTAType ) { - case WLAN_STA_IBSS: + case WLAN_STA_IBSS: pw80211Header->wFrmCtrl.toDS = 0; pw80211Header->wFrmCtrl.fromDS = 0; - /*Fix me*/ - vos_copy_macaddr( (v_MACADDR_t*)&pw80211Header->vA1, - &pClientSTA->wSTADesc.vSTAMACAddress); + + /* + * If the frame is a multicast frame, then, the Address1 + * should be the destination address filled in the packet. Which is + * the multicast address. Otherwise, set it to BSSID + */ + if (0 == tlMetaInfo->ucBcast && 1 == tlMetaInfo->ucMcast) + { + vos_copy_macaddr( (v_MACADDR_t*)&pw80211Header->vA1, + (v_MACADDR_t*)&w8023Header.vDA); + } + else + { + vos_copy_macaddr( (v_MACADDR_t*)&pw80211Header->vA1, + &pClientSTA->wSTADesc.vSTAMACAddress); + } vos_mem_copy( pw80211Header->vA3, &pClientSTA->wSTADesc.vBSSIDforIBSS , VOS_MAC_ADDR_SIZE); break; - case WLAN_STA_BT_AMP: + case WLAN_STA_BT_AMP: *ucWDSEnabled = 1; // WDS on. pw80211Header->wFrmCtrl.toDS = 1; pw80211Header->wFrmCtrl.fromDS = 1; vos_copy_macaddr( (v_MACADDR_t*)&pw80211Header->vA1, &pClientSTA->wSTADesc.vSTAMACAddress); vos_mem_copy( pw80211Header->vA2, - w8023Header.vSA, VOS_MAC_ADDR_SIZE); + w8023Header.vSA, VOS_MAC_ADDR_SIZE); vos_copy_macaddr( (v_MACADDR_t*)&pw80211Header->vA3, &pClientSTA->wSTADesc.vSTAMACAddress); /* fill the optional A4 header */ vos_mem_copy( pw80211Header->optvA4, - w8023Header.vSA, VOS_MAC_ADDR_SIZE); + w8023Header.vSA, VOS_MAC_ADDR_SIZE); TLLOG2(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO_HIGH, - "BTAMP CASE NOW ---------staid=%d\n", - ucStaId)); + "BTAMP CASE NOW ---------staid=%d\n", + ucStaId)); break; - case WLAN_STA_SOFTAP: + case WLAN_STA_SOFTAP: *ucWDSEnabled = 0; // WDS off. pw80211Header->wFrmCtrl.toDS = 0; pw80211Header->wFrmCtrl.fromDS = 1; @@ -8880,13 +9446,13 @@ WLANTL_Translate8023To80211Header vos_copy_macaddr( (v_MACADDR_t*)&pw80211Header->vA2, &pClientSTA->wSTADesc.vSelfMACAddress); vos_mem_copy( pw80211Header->vA3, - w8023Header.vSA, VOS_MAC_ADDR_SIZE); + w8023Header.vSA, VOS_MAC_ADDR_SIZE); TLLOG2(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO_HIGH, - "sw 802 to 80211 softap case ---------staid=%d\n", - ucStaId)); + "sw 802 to 80211 softap case ---------staid=%d\n", + ucStaId)); break; #ifdef FEATURE_WLAN_TDLS - case WLAN_STA_TDLS: + case WLAN_STA_TDLS: pw80211Header->wFrmCtrl.toDS = 0; pw80211Header->wFrmCtrl.fromDS = 0; /*Fix me*/ @@ -8896,19 +9462,19 @@ WLANTL_Translate8023To80211Header &pClientSTA->wSTADesc.vBSSIDforIBSS , VOS_MAC_ADDR_SIZE); VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO_HIGH, - ("TL:TDLS CASE NOW ---------staid=%d\n"), ucStaId); + ("TL:TDLS CASE NOW ---------staid=%d\n"), ucStaId); break; #endif - case WLAN_STA_INFRA: - default: + case WLAN_STA_INFRA: + default: pw80211Header->wFrmCtrl.toDS = 1; pw80211Header->wFrmCtrl.fromDS = 0; vos_copy_macaddr( (v_MACADDR_t*)&pw80211Header->vA1, &pClientSTA->wSTADesc.vSTAMACAddress); vos_mem_copy( pw80211Header->vA3, w8023Header.vDA , VOS_MAC_ADDR_SIZE); TLLOG2(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO_HIGH, - "REGULAR INFRA LINK CASE---------staid=%d\n", - ucStaId)); + "REGULAR INFRA LINK CASE---------staid=%d\n", + ucStaId)); break; } // OK now we have the space. Fill the 80211 header @@ -9015,7 +9581,8 @@ WLANTL_Translate80211To8023Header v_U16_t usActualHLen, v_U8_t ucHeaderLen, WLANTL_CbType* pTLCb, - v_U8_t ucSTAId + v_U8_t ucSTAId, + v_BOOL_t bForwardIAPPwithLLC ) { WLANTL_8023HeaderType w8023Header; @@ -9105,7 +9672,11 @@ WLANTL_Translate80211To8023Header return VOS_STATUS_E_FAILURE; } - if ( 0 != pTLCb->atlSTAClients[ucSTAId]->wSTADesc.ucAddRmvLLC ) + if ( 0 != pTLCb->atlSTAClients[ucSTAId]->wSTADesc.ucAddRmvLLC +#ifdef FEATURE_WLAN_CCX_UPLOAD + && (!bForwardIAPPwithLLC) +#endif /* FEATURE_WLAN_CCX_UPLOAD */ + ) { // Extract the LLC header vosStatus = vos_pkt_pop_head( vosDataBuff, aucLLCHeader, @@ -10006,7 +10577,7 @@ WLANTL_MgmtFrmRxDefaultCb /*========================================================================== - FUNCTION WLANTL_STARxDefaultCb + FUNCTION WLANTL_BAPRxDefaultCb DESCRIPTION Default BAP rx callback: asserts all the time. If this function gets @@ -10070,7 +10641,7 @@ WLANTL_STARxDefaultCb "WLAN TL: No registered STA client rx cb for STAID: %d dropping pkt", ucSTAId)); vos_pkt_return_packet(vosDataBuff); - return VOS_STATUS_E_FAILURE; + return VOS_STATUS_SUCCESS; }/*WLANTL_MgmtFrmRxDefaultCb*/ @@ -10477,12 +11048,12 @@ WLANTL_EnableUAPSDForAC ------------------------------------------------------------------------*/ pTLCb = VOS_GET_TL_CB(pvosGCtx); if (( NULL == pTLCb ) || WLANTL_STA_ID_INVALID( ucSTAId ) - || WLANTL_AC_INVALID(ucAC) || ( 0 == uServiceInt ) ) + || WLANTL_AC_INVALID(ucAC)) { TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, "WLAN TL:Invalid input params on WLANTL_EnableUAPSDForAC" - " TL: %p STA: %d AC: %d SI: %d", - pTLCb, ucSTAId, ucAC, uServiceInt )); + " TL: %p STA: %d AC: %d", + pTLCb, ucSTAId, ucAC)); return VOS_STATUS_E_FAULT; } @@ -10495,24 +11066,35 @@ WLANTL_EnableUAPSDForAC /*Set this flag in order to remember that this is a trigger enabled AC*/ pTLCb->atlSTAClients[ucSTAId]->wUAPSDInfo[ucAC].ucSet = 1; - - TLLOG2(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO_HIGH, - "WLAN TL:Enabling U-APSD in FW for STA: %d AC: %d SI: %d SPI: %d " - "DI: %d", - ucSTAId, ucAC, uServiceInt, uSuspendInt, - pTLCb->tlConfigInfo.uDelayedTriggerFrmInt)); - - /*Save all info for HAL*/ - halUAPSDInfo.staidx = ucSTAId; - halUAPSDInfo.ac = ucAC; - halUAPSDInfo.up = ucUP; - halUAPSDInfo.srvInterval = uServiceInt; - halUAPSDInfo.susInterval = uSuspendInt; - halUAPSDInfo.delayInterval = pTLCb->tlConfigInfo.uDelayedTriggerFrmInt; - /*Notify HAL*/ - vosStatus = WDA_EnableUapsdAcParams(pvosGCtx, ucSTAId, &halUAPSDInfo); +#ifdef FEATURE_WLAN_TDLS + if(pTLCb->atlSTAClients[ucSTAId]->wSTADesc.wSTAType != WLAN_STA_TDLS) +#endif + { + if( 0 == uServiceInt ) + { + TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "WLAN TL:Input params on WLANTL_EnableUAPSDForAC" + " SI: %d", uServiceInt )); + } + TLLOG2(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO_HIGH, + "WLAN TL:Enabling U-APSD in FW for STA: %d AC: %d SI: %d SPI: %d " + "DI: %d", + ucSTAId, ucAC, uServiceInt, uSuspendInt, + pTLCb->tlConfigInfo.uDelayedTriggerFrmInt)); + + /*Save all info for HAL*/ + halUAPSDInfo.staidx = ucSTAId; + halUAPSDInfo.ac = ucAC; + halUAPSDInfo.up = ucUP; + halUAPSDInfo.srvInterval = uServiceInt; + halUAPSDInfo.susInterval = uSuspendInt; + halUAPSDInfo.delayInterval = pTLCb->tlConfigInfo.uDelayedTriggerFrmInt; + + /*Notify HAL*/ + vosStatus = WDA_EnableUapsdAcParams(pvosGCtx, ucSTAId, &halUAPSDInfo); + } return vosStatus; }/*WLANTL_EnableUAPSDForAC*/ @@ -11209,6 +11791,83 @@ VOS_STATUS WLANTL_ReadRSSI return VOS_STATUS_SUCCESS; } +/*========================================================================== + + FUNCTION + + DESCRIPTION Read SNR value out of a RX BD + + PARAMETERS: Caller must validate all parameters + + RETURN VALUE + +============================================================================*/ +VOS_STATUS WLANTL_ReadSNR +( + v_PVOID_t pAdapter, + v_PVOID_t pBDHeader, + v_U8_t STAid +) +{ + WLANTL_CbType *tlCtxt = VOS_GET_TL_CB(pAdapter); + v_S7_t currentSNR; + + + if (NULL == tlCtxt) + { + TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "%s Invalid TL handle", __func__)); + return VOS_STATUS_E_INVAL; + } + + if (NULL == tlCtxt->atlSTAClients[STAid]) + { + TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "WLAN TL:Client Memory was not allocated on %s", __func__)); + return VOS_STATUS_E_FAILURE; + } + + currentSNR = WLANTL_GETSNR(pBDHeader); + + /* SNR reported in the Buffer Descriptor is scaled up by 2(SNR*2), + * Get the correct SNR value + */ + currentSNR = currentSNR >> 1; + + /* SNR reported by HW cannot be more than 35dB due to HW limitations */ + currentSNR = (WLANTL_MAX_HW_SNR > currentSNR ? currentSNR : + WLANTL_MAX_HW_SNR); + + TLLOG2(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO_HIGH, + "%s: snrsum: %d snridx: %d prevsnravg: %d", + __func__, + tlCtxt->atlSTAClients[STAid]->snrSum, + tlCtxt->atlSTAClients[STAid]->snrIdx, + tlCtxt->atlSTAClients[STAid]->prevSnrAvg)); + + /* The SNR returned for all purposes is the average SNR over + * WLANTL_MAX_SNR_DATA_SMAPLES.When data samples + * > WLANTL_MAX_SNR_DATA_SAMPLES are obtained, + * store the average of the samples in prevSnrAvg + * and start a new averaging window. The prevSnrAvg is used when + * enough data samples are not available when applications + * actually query for SNR. + * + * SEE: WLANTL_GetSnr() + */ + if (tlCtxt->atlSTAClients[STAid]->snrIdx >= WLANTL_MAX_SNR_DATA_SAMPLES) + { + tlCtxt->atlSTAClients[STAid]->prevSnrAvg = + tlCtxt->atlSTAClients[STAid]->snrSum / + tlCtxt->atlSTAClients[STAid]->snrIdx; + tlCtxt->atlSTAClients[STAid]->snrSum = 0; + tlCtxt->atlSTAClients[STAid]->snrIdx = 0; + } + tlCtxt->atlSTAClients[STAid]->snrSum += currentSNR; + tlCtxt->atlSTAClients[STAid]->snrIdx += 1; + + return VOS_STATUS_SUCCESS; +} /* DESCRIPTION @@ -11752,3 +12411,953 @@ void WLANTL_UpdateRssiBmps(v_PVOID_t pvosGCtx, v_U8_t staId, v_S7_t rssi) pTLCb->atlSTAClients[staId]->rssiAvgBmps = rssi; } } + +/*=============================================================================== + FUNCTION WLANTL_UpdateSnrBmps + + DESCRIPTION This function updates the TL's SNR (in BMPS mode) + + DEPENDENCIES None + + PARAMETERS + + pvosGCtx VOS context VOS Global context + staId Station ID Station ID + snr SNR (BMPS mode) SNR in BMPS mode + + RETURN None + + SIDE EFFECTS none + ===============================================================================*/ + +void WLANTL_UpdateSnrBmps(v_PVOID_t pvosGCtx, v_U8_t staId, v_S7_t snr) +{ + WLANTL_CbType* pTLCb = VOS_GET_TL_CB(pvosGCtx); + + if (NULL != pTLCb && NULL != pTLCb->atlSTAClients[staId]) + { + pTLCb->atlSTAClients[staId]->snrAvgBmps = snr; + } +} + +/*=============================================================================== + FUNCTION WLANTL_UpdateLinkCapacity + + DESCRIPTION This function updates the STA's Link Capacity in TL + + DEPENDENCIES None + + PARAMETERS + + pvosGCtx VOS context VOS Global context + staId Station ID Station ID + linkCapacity linkCapacity Link Capacity + + RETURN None + + SIDE EFFECTS none + ===============================================================================*/ + +void WLANTL_UpdateLinkCapacity(v_PVOID_t pvosGCtx, v_U8_t staId, v_U32_t linkCapacity) +{ + WLANTL_CbType* pTLCb = VOS_GET_TL_CB(pvosGCtx); + + if (NULL != pTLCb && NULL != pTLCb->atlSTAClients[staId]) + { + pTLCb->atlSTAClients[staId]->linkCapacity = linkCapacity; + } +} + + +/*=========================================================================== + + FUNCTION WLANTL_GetSTALinkCapacity + + DESCRIPTION + + Returns Link Capacity of a particular STA. + + DEPENDENCIES + + A station must have been registered before its state can be retrieved. + + + PARAMETERS + + IN + pvosGCtx: pointer to the global vos context; a handle to TL's + control block can be extracted from its context + ucSTAId: identifier of the station + + OUT + plinkCapacity: the current link capacity the connection to + the given station + + + RETURN VALUE + + The result code associated with performing the operation + + VOS_STATUS_E_INVAL: Input parameters are invalid + VOS_STATUS_E_FAULT: Station ID is outside array boundaries or pointer to + TL cb is NULL ; access would cause a page fault + VOS_STATUS_E_EXISTS: Station was not registered + VOS_STATUS_SUCCESS: Everything is good :) + + SIDE EFFECTS + +============================================================================*/ +VOS_STATUS +WLANTL_GetSTALinkCapacity +( + v_PVOID_t pvosGCtx, + v_U8_t ucSTAId, + v_U32_t *plinkCapacity +) +{ + WLANTL_CbType* pTLCb = NULL; + /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/ + + /*------------------------------------------------------------------------ + Sanity check + ------------------------------------------------------------------------*/ + if ( NULL == plinkCapacity ) + { + TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + FL("WLAN TL:Invalid parameter"))); + return VOS_STATUS_E_INVAL; + } + + if ( WLANTL_STA_ID_INVALID( ucSTAId ) ) + { + TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + FL("WLAN TL:Invalid station id"))); + return VOS_STATUS_E_FAULT; + } + + /*------------------------------------------------------------------------ + Extract TL control block and check existance + ------------------------------------------------------------------------*/ + pTLCb = VOS_GET_TL_CB(pvosGCtx); + if ( NULL == pTLCb ) + { + TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + FL("WLAN TL:Invalid TL pointer from pvosGCtx"))); + return VOS_STATUS_E_FAULT; + } + + if ( NULL == pTLCb->atlSTAClients[ucSTAId] ) + { + TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + FL("WLAN TL:Client Memory was not allocated"))); + return VOS_STATUS_E_FAILURE; + } + + if ( 0 == pTLCb->atlSTAClients[ucSTAId]->ucExists ) + { + TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_WARN, + FL("WLAN TL:Station was not previously registered"))); + return VOS_STATUS_E_EXISTS; + } + + /*------------------------------------------------------------------------ + Get STA state + ------------------------------------------------------------------------*/ + *plinkCapacity = pTLCb->atlSTAClients[ucSTAId]->linkCapacity; + + return VOS_STATUS_SUCCESS; +}/* WLANTL_GetSTALinkCapacity */ + + +#ifdef WLAN_FEATURE_RELIABLE_MCAST + +/*========================================================================== + FUNCTION WLANTL_RmcInit + + DESCRIPTION This function initilizes RMC module in TL + + PARAMETERS + pADapter : pointer to VOS global context + + RETURN VALUE + VOS_STATUS_SUCCESS : for success + VOS_STATUS_FAILURE : for failure + VOS_STATUS_E_INVAL : for invalid input parameter + +============================================================================*/ +VOS_STATUS WLANTL_RmcInit +( + v_PVOID_t pAdapter +) +{ + WLANTL_CbType *pTLCb = VOS_GET_TL_CB(pAdapter); + VOS_STATUS status = VOS_STATUS_SUCCESS; + tANI_U8 count; + + /*sanity check*/ + if (NULL == pTLCb) + { + TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "Invalid TL handle")); + return VOS_STATUS_E_INVAL; + } + + /*init active rmcast sessions list*/ + for ( count = 0; count < WLANTL_RMCAST_HASH_TABLE_SIZE; count++ ) + { + pTLCb->reliableMcastSession[count] = NULL; + } + + vos_lock_init(&pTLCb->rmcLock); + + pTLCb->multicastDuplicateDetectionEnabled = 1; + pTLCb->rmcDataPathEnabled = 0; + + return status; +} + + +/*========================================================================== + FUNCTION WLANTL_RmcDeInit + + DESCRIPTION This function de-initilizes RMC module in TL + + PARAMETERS + pADapter : pointer to VOS global context + + RETURN VALUE + VOS_STATUS_SUCCESS : for success + VOS_STATUS_FAILURE : for failure + VOS_STATUS_E_INVAL : for invalid input parameter + +============================================================================*/ +VOS_STATUS WLANTL_RmcDeInit +( + v_PVOID_t pAdapter +) +{ + WLANTL_CbType *pTLCb = VOS_GET_TL_CB(pAdapter); + VOS_STATUS status = VOS_STATUS_SUCCESS; + tANI_U8 count; + WLANTL_RMCAST_SESSION *pNode; + WLANTL_RMCAST_SESSION *pPrev; + + /*sanity check*/ + if (NULL == pTLCb) + { + TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "Invalid TL handle")); + return VOS_STATUS_E_INVAL; + } + + /*free active rmcast sessions list*/ + for ( count = 0; count < WLANTL_RMCAST_HASH_TABLE_SIZE; count++ ) + { + pNode = pTLCb->reliableMcastSession[count]; + while (pNode) + { + pPrev = pNode; + pNode = pNode->next; + vos_mem_free((v_VOID_t * )pPrev); + } + } + + vos_lock_destroy(&pTLCb->rmcLock); + + return status; +} + + +/*========================================================================== + FUNCTION WLANTL_RmcHashRmcastSession + + DESCRIPTION This function creates hash on input RMCAST MAC address + + PARAMETERS + pMcastAddr : pointer to input RMCAST MAC address + + RETURN VALUE + tANI_U8 : A hash value between 0 to WLANTL_RMCAST_HASH_TABLE_SIZE - 1 +============================================================================*/ +tANI_U8 WLANTL_RmcHashRmcastSession ( v_MACADDR_t *pMcastAddr ) +{ + tANI_U32 sum; + tANI_U8 hash; + + sum = (pMcastAddr->bytes[0] + pMcastAddr->bytes[1] + pMcastAddr->bytes[2] + + pMcastAddr->bytes[3] + pMcastAddr->bytes[4] + pMcastAddr->bytes[5]); + + hash = (tANI_U8)(sum & ((WLANTL_RMCAST_HASH_TABLE_SIZE - 1))); + + return hash; +} + + +/*=========================================================================== + FUNCTION WLANTL_RmcLookUpRmcastSession + + DESCRIPTION This function tries to find out RMCAST address in TL's active + list of reliable multicast sessions + + PARAMETERS + pTLCb : pointer to TL Cb + pMcastAddr : pointer to input RMCAST MAC address + + RETURN VALUE + WLANTL_RMCAST_SESSION * : + NULL if input RMCAST MAC address does exist in active RMCAST sessions list + else pointer to RMCAST session found in active RMCAST sessions list +=============================================================================*/ +WLANTL_RMCAST_SESSION* WLANTL_RmcLookUpRmcastSession +( + WLANTL_RMCAST_SESSION *reliableMcastSession[], + v_MACADDR_t *pMcastAddr +) +{ + WLANTL_RMCAST_SESSION *pNode; + tANI_U8 index; + + /*sanity check*/ + if (NULL == pMcastAddr) + { + TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "Sanity check failed pMcastAddr %p", pMcastAddr)); + return NULL; + } + + index = WLANTL_RmcHashRmcastSession(pMcastAddr); + pNode = reliableMcastSession[index]; + while ( pNode ) + { + if (vos_is_macaddr_equal( &(pNode->reliableMcastAddr), pMcastAddr)) + { + return pNode; + } + pNode = pNode->next; + } + + return NULL; +} + +/*=========================================================================== + FUNCTION WLANTL_RmcAddRmcastSession + + DESCRIPTION This function adds requested RMCAST address in TL's active + list of reliable multicast sessions + + PARAMETERS + pTLCb : pointer to TL Cb + pMcastAddr : pointer to input RMCAST MAC address + + RETURN VALUE + WLANTL_RMCAST_SESSION * : + NULL if input RMCAST MAC address already exists in active RMCAST sessions + list else pointer to RMCAST session which is now added in active RMCAST + sessions list +=============================================================================*/ +WLANTL_RMCAST_SESSION *WLANTL_RmcAddRmcastSession +( + WLANTL_RMCAST_SESSION *reliableMcastSession[], + v_MACADDR_t *pMcastAddr +) +{ + WLANTL_RMCAST_SESSION *pNode; + tANI_U8 index; + + index = WLANTL_RmcHashRmcastSession(pMcastAddr); + pNode = WLANTL_RmcLookUpRmcastSession(reliableMcastSession, pMcastAddr); + if ( NULL != pNode ) + { + /*already exists*/ + return NULL; + } + else + { + pNode = (WLANTL_RMCAST_SESSION *)vos_mem_malloc(sizeof(*pNode)); + if (pNode) + { + vos_mem_copy( &(pNode->reliableMcastAddr), pMcastAddr, + sizeof(pNode->reliableMcastAddr) ); + pNode->next = reliableMcastSession[index]; + reliableMcastSession[index] = pNode; + return pNode; + } + else + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: vos_mem_malloc failed can't enable RMCAST session", + __func__); + return NULL; + } + } +} + +/*=========================================================================== + FUNCTION WLANTL_RmcDeleteRmcastSession + + DESCRIPTION This function deleted requested RMCAST address from TL's active + list of reliable multicast sessions + + PARAMETERS + pTLCb : pointer to TL Cb + pMcastAddr : pointer to input RMCAST MAC address + + RETURN VALUE + WLANTL_RMCAST_SESSION * : + 0 if input RMCAST session does not exist in active RMCAST + sessions list + 1 if input RMCAST session is successfully deleted from + TL's active list of reliable multicast sessions +=============================================================================*/ +tANI_U8 +WLANTL_RmcDeleteRmcastSession +( + WLANTL_RMCAST_SESSION *reliableMcastSession[], + v_MACADDR_t *pMcastAddr +) +{ + WLANTL_RMCAST_SESSION *pHead; + WLANTL_RMCAST_SESSION *pNode; + WLANTL_RMCAST_SESSION *pPrev; + tANI_U8 index; + + index = WLANTL_RmcHashRmcastSession(pMcastAddr); + pHead = pNode = reliableMcastSession[index]; + while (pNode) + { + if (vos_is_macaddr_equal( &(pNode->reliableMcastAddr), pMcastAddr)) + { + if (pHead == pNode) + { + reliableMcastSession[index] = pNode->next; + } + else + { + pPrev->next = pNode->next; + } + vos_mem_free((v_VOID_t * )pNode); + return 1; + } + pPrev = pNode; + pNode = pNode->next; + } + + return 0; +} + +/*============================================================================= + FUNCTION WLANTL_ProcessRmcCommand + + DESCRIPTION + This function adds/deletes input RMCAST session to/from TL's active hash + table of RMCAST sessions + + DEPENDENCIES + Reliable multicast receive leader must be selected by FW before + UMAC calling this API + + PARAMETERS + + IN + + pTLCb : Pointer to TL context + pMcastAddr : Pointer to MAC ADDR of RMCAST session which needs to to added + or deleted + command : If command is 1 then add requested RMCAST session in active + session hash table else delete it from active session hash + table + + RETURN VALUE + The result code associated with performing the operation + + VOS_STATUS_E_FAILURE: When add or delete command failed + + VOS_STATUS_SUCCESS: Everything is good :) + + SIDE EFFECTS +==============================================================================*/ +VOS_STATUS +WLANTL_ProcessRmcCommand +( + WLANTL_CbType* pTLCb, + v_MACADDR_t *pMcastAddr, + tANI_U32 command +) +{ + VOS_STATUS status; + tANI_U32 count; + tANI_U32 rmcActive; + + if (!VOS_IS_STATUS_SUCCESS(vos_lock_acquire( &(pTLCb->rmcLock)))) + { + TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "%s Get Lock Fail", __func__)); + return VOS_STATUS_E_FAILURE; + } + + /*add or delete node from active rmcast hash table*/ + if (command) + { + /*add requested rmcast session in active rmcast session list*/ + if (WLANTL_RmcAddRmcastSession(pTLCb->reliableMcastSession, pMcastAddr)) + { + TLLOGE( VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "RMCAST session " MAC_ADDRESS_STR " added in TL hash table", + MAC_ADDR_ARRAY(pMcastAddr->bytes) ) ); + pTLCb->rmcDataPathEnabled = TRUE; + status = VOS_STATUS_SUCCESS; + } + else + { + TLLOGE( VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "RMCAST session " MAC_ADDRESS_STR " already exists in TL hash" + " table", MAC_ADDR_ARRAY(pMcastAddr->bytes) ) ); + status = VOS_STATUS_E_FAILURE; + } + } + else + { + /*delete requested rmcast session from active rmcast session list*/ + if (WLANTL_RmcDeleteRmcastSession(pTLCb->reliableMcastSession, pMcastAddr)) + { + TLLOGE( VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO, + "RMCAST session " MAC_ADDRESS_STR " deleted from TL hash table", + MAC_ADDR_ARRAY(pMcastAddr->bytes)) ); + status = VOS_STATUS_SUCCESS; + rmcActive = FALSE; + for ( count = 0; count < WLANTL_RMCAST_HASH_TABLE_SIZE; count++ ) + { + if (pTLCb->reliableMcastSession[count]) + { + rmcActive = TRUE; + break; + } + } + if (TRUE == rmcActive) + { + pTLCb->rmcDataPathEnabled = TRUE; + } + else + { + pTLCb->rmcDataPathEnabled = FALSE; + } + } + else + { + TLLOGE( VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "RMCAST session " MAC_ADDRESS_STR " doesn't exist in TL hash" + " table", MAC_ADDR_ARRAY(pMcastAddr->bytes) ) ); + status = VOS_STATUS_E_FAILURE; + } + } + + if (!VOS_IS_STATUS_SUCCESS(vos_lock_release(&(pTLCb->rmcLock)))) + { + TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "%s Release Lock Fail", __func__)); + return VOS_STATUS_E_FAILURE; + } + + return status; +}/* End of WLANTL_ProcessRmcCommand */ + +/*============================================================================= + FUNCTION WLANTL_EnableReliableMcast + + DESCRIPTION + This function enables data path of reliable multicast in TL + + DEPENDENCIES + Reliable multicast receive leader must be selected by FW before + UMAC calling this API + + PARAMETERS + + IN + + pvosGCtx : Pointer to VOS global context + pMcastTransmitterAddr : Pointer to MAC ADDR of reliable multicast transmitter + + RETURN VALUE + The result code associated with performing the operation + + VOS_STATUS_E_FAULT: Sanity check on input failed + + VOS_STATUS_SUCCESS: Everything is good :) + + Other return values are possible coming from the called functions. + Please check API for additional info. + + SIDE EFFECTS + +==============================================================================*/ +VOS_STATUS +WLANTL_EnableReliableMcast +( + v_PVOID_t pvosGCtx, + v_MACADDR_t *pMcastTransmitterAddr +) +{ + WLANTL_CbType* pTLCb; + VOS_STATUS status; + + /*sanity check*/ + if ( (NULL == pvosGCtx) || (NULL == pMcastTransmitterAddr) ) + { + TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "WLAN TL %s: Sanity check failed pvosGCtx %p aMcastAddr %p", + __func__, pvosGCtx, pMcastTransmitterAddr)); + return VOS_STATUS_E_FAILURE; + } + + /*sanity check*/ + pTLCb = VOS_GET_TL_CB(pvosGCtx); + if ( NULL == pTLCb ) + { + TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "WLAN TL %s: pTLCb is NULL", __func__)); + return VOS_STATUS_E_FAILURE; + } + + status = WLANTL_ProcessRmcCommand(pTLCb, pMcastTransmitterAddr , 1); + + return status; +} /* End of WLANTL_EnableReliableMcast */ + + +/*============================================================================= + FUNCTION WLANTL_DisableReliableMcast + + DESCRIPTION + This function disables data path of reliable multicast in TL + + DEPENDENCIES + HDD should have recived IOCTL to disable reliable RMC + + PARAMETERS + + IN + + pvosGCtx : Pointer to VOS global context + pMcastAddr : Pointer to MAC ADDR of reliable multicast transmitter + + RETURN VALUE + The result code associated with performing the operation + + VOS_STATUS_E_FAULT: Sanity check on input failed + + VOS_STATUS_SUCCESS: Everything is good :) + + Other return values are possible coming from the called functions. + Please check API for additional info. + + SIDE EFFECTS + +==============================================================================*/ +VOS_STATUS +WLANTL_DisableReliableMcast +( + v_PVOID_t pvosGCtx, + v_MACADDR_t *pMcastTransmitterAddr +) +{ + WLANTL_CbType* pTLCb; + VOS_STATUS status; + + /*Sanity check*/ + if ((NULL == pvosGCtx) || (NULL == pMcastTransmitterAddr)) + { + TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "WLAN TL %s: Sanity check failed pvosGCtx %p aMcastAddr %p", + __func__, pvosGCtx, pMcastTransmitterAddr)); + return VOS_STATUS_E_FAILURE; + } + + /*Sanity check*/ + pTLCb = VOS_GET_TL_CB(pvosGCtx); + if (NULL == pTLCb) + { + TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "WLAN TL %s: pTLCb is NULL", __func__)); + return VOS_STATUS_E_FAILURE; + } + + status = WLANTL_ProcessRmcCommand(pTLCb, pMcastTransmitterAddr, 0); + + return status; +} /* End of WLANTL_DisableReliableMcast */ + +/*============================================================================= + Duplicate Multicast Detection Functions +==============================================================================*/ + +/*============================================================================= + FUNCTION WLANTL_IsDuplicateMcastFrm + + DESCRIPTION + This function checks for duplicast multicast frames and drops them. + + DEPENDENCIES + + PARAMETERS + + IN + + pClientSTA : Pointer to WLANTL_STAClientType + aucBDHeader : Pointer to BD header + + RETURN VALUE + + VOS_FALSE: This frame is not a duplicate + + VOS_TRUE: This frame is a duplicate + +==============================================================================*/ +v_U8_t +WLANTL_IsDuplicateMcastFrm +( + WLANTL_STAClientType *pClientSTA, + vos_pkt_t *vosDataBuff +) +{ + v_U8_t duplicate = VOS_FALSE; + WLANTL_RMCAST_SESSION *pNode; + v_U16_t usSeqCtrl; + v_MACADDR_t mcastAddr; + VOS_STATUS vosStatus; + v_PVOID_t pvPeekData; + + /* Get address 1 of Data Frame */ + vosStatus = vos_pkt_peek_data(vosDataBuff, WLANTL_MAC_ADDR_ALIGN(1), + (v_PVOID_t)&pvPeekData, VOS_MAC_ADDR_SIZE); + + if ( VOS_STATUS_SUCCESS != vosStatus ) + { + TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "WLAN TL: Failed to get Addr 1 of 80211 header from packet %d", + vosStatus)); + return VOS_FALSE; + } + + /* Copy address 1 of Data Frame */ + vos_mem_copy(&mcastAddr.bytes, pvPeekData, VOS_MAC_ADDR_SIZE); + + /* + * We perform duplicate detection for only multicast data frames + */ + if (vos_is_macaddr_group(&mcastAddr) && + !vos_is_macaddr_broadcast(&mcastAddr)) + { + /* Get sequence control of Data Frame */ + vosStatus = vos_pkt_peek_data(vosDataBuff, + (WLANTL_MAC_ADDR_ALIGN(1) + (3 * VOS_MAC_ADDR_SIZE)), + (v_PVOID_t)&pvPeekData, sizeof(v_U16_t)); + + if ( VOS_STATUS_SUCCESS != vosStatus ) + { + TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "WLAN TL: Failed to get Sequence Control from packet %d", + vosStatus)); + return VOS_FALSE; + } + + /* Copy sequence control from the Data Frame */ + usSeqCtrl = *(v_U16_t *)pvPeekData; + + if (!VOS_IS_STATUS_SUCCESS(vos_lock_acquire(&(pClientSTA->mcLock)))) + { + TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "%s Get Lock Fail", __func__)); + return VOS_FALSE; + } + + pNode = WLANTL_RmcLookUpRmcastSession(pClientSTA->mcastSession, + &mcastAddr); + if (NULL == pNode) + { + /* If the session does not exist, add it. */ + pNode = WLANTL_RmcAddRmcastSession(pClientSTA->mcastSession, + &mcastAddr); + /* If we could not add a entry, skip duplicate detection */ + if (NULL == pNode) + { + TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "%s Failed to add multicast session", __func__)); + if (!VOS_IS_STATUS_SUCCESS + (vos_lock_release(&(pClientSTA->mcLock)))) + { + TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "%s Release Lock Fail", __func__)); + } + return VOS_FALSE; + } + /* Initialize the sequence control value. */ + pNode->mcSeqCtl = usSeqCtrl; + } + else + { + /* + * Check if the sequence number of this frame matches the last + * we have seen. + */ + if (pNode->mcSeqCtl == usSeqCtrl) + { + pNode->rxMCDupcnt++; + TLLOG1(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO, + "%s Rx Multicast Duplicate %d " MAC_ADDRESS_STR + " (Seq %x)", __func__, + pNode->rxMCDupcnt, MAC_ADDR_ARRAY(mcastAddr.bytes), + usSeqCtrl)); + duplicate = VOS_TRUE; + } + else + { + /* Update the last seen sequence number */ + pNode->mcSeqCtl = usSeqCtrl; + } + } + + if (!VOS_IS_STATUS_SUCCESS (vos_lock_release(&(pClientSTA->mcLock)))) + { + TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "%s Release Lock Fail", __func__)); + } + } + + return duplicate; +} + +/*============================================================================= + FUNCTION WLANTL_McastDeleteAllEntries + + DESCRIPTION + This function removes all multicast entries used for duplicate detection + + DEPENDENCIES + + PARAMETERS + + IN + + pClientSTA : Pointer to WLANTL_STAClientType + + RETURN VALUE + + None + +==============================================================================*/ +void +WLANTL_McastDeleteAllEntries(WLANTL_STAClientType * pClientSTA) +{ + WLANTL_RMCAST_SESSION *pNode, **head; + int index; + + TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO, + "%s Deleting all multicast entries", __func__)); + + if (!VOS_IS_STATUS_SUCCESS(vos_lock_acquire(&(pClientSTA->mcLock)))) + { + TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "%s Get Lock Fail", __func__)); + return; + } + + for (index = 0; index < WLANTL_RMCAST_HASH_TABLE_SIZE; index++) + { + head = &pClientSTA->mcastSession[index]; + + pNode = *head; + + while (pNode) + { + *head = pNode->next; + /* free the group entry */ + vos_mem_free(pNode); + pNode = *head; + } + } + + if (!VOS_IS_STATUS_SUCCESS (vos_lock_release(&(pClientSTA->mcLock)))) + { + TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "%s Release Lock Fail", __func__)); + } +} + +/*============================================================================= + FUNCTION WLANTL_SetMcastDuplicateDetection + + DESCRIPTION + This function sets multicate duplicate detection operation. + If enable is 1, the detection is enabled, else it is disabled. + + DEPENDENCIES + + PARAMETERS + + IN + + pvosGCtx : Pointer to VOS global context + enable : Boolean to enable or disable + + RETURN VALUE + The result code associated with performing the operation + + VOS_STATUS_E_FAULT: Sanity check on input failed + + VOS_STATUS_SUCCESS: Everything is good :) + + Other return values are possible coming from the called functions. + Please check API for additional info. + + SIDE EFFECTS + +==============================================================================*/ +VOS_STATUS +WLANTL_SetMcastDuplicateDetection +( + v_PVOID_t pvosGCtx, + v_U8_t enable +) +{ + WLANTL_CbType* pTLCb; + + /*Sanity check*/ + if (NULL == pvosGCtx) + { + TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "WLAN TL %s: Sanity check failed pvosGCtx %p", + __func__, pvosGCtx)); + return VOS_STATUS_E_FAILURE; + } + + /*Sanity check*/ + pTLCb = VOS_GET_TL_CB(pvosGCtx); + if (NULL == pTLCb) + { + TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "WLAN TL %s: pTLCb is NULL", __func__)); + return VOS_STATUS_E_FAILURE; + } + + switch (enable) + { + default: + /* + * Any value other than 0 or 1 is used to dump the + * duplicate count. + */ + TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "WLAN TL %s: Multicast Duplicate Count %d", + __func__, pTLCb->mcastDupCnt)); + break; + case 0: + case 1: + pTLCb->multicastDuplicateDetectionEnabled = enable; + break; + } + + return VOS_STATUS_SUCCESS; +} + +#endif /* End of WLAN_FEATURE_RELIABLE_MCAST */ diff --git a/CORE/TL/src/wlan_qct_tl_ba.c b/CORE/TL/src/wlan_qct_tl_ba.c index 953eb37b6d2b..7590442d2ece 100644 --- a/CORE/TL/src/wlan_qct_tl_ba.c +++ b/CORE/TL/src/wlan_qct_tl_ba.c @@ -85,6 +85,8 @@ //#define WLANTL_REORDER_DEBUG_MSG_ENABLE #define WLANTL_BA_REORDERING_AGING_TIMER 30 /* 30 millisec */ #define WLANTL_BA_MIN_FREE_RX_VOS_BUFFER 0 /* RX VOS buffer low threshold */ +#define CSN_WRAP_AROUND_THRESHOLD 3000 /* CSN wrap around threshold */ + /*========================================================================== @@ -121,6 +123,10 @@ v_VOID_t WLANTL_ReorderingAgingTimerExpierCB v_U8_t opCode; WLANTL_RxMetaInfoType wRxMetaInfo; v_U32_t fwIdx = 0; + WDI_DS_RxMetaInfoType *pRxMetadata; + vos_pkt_t *pCurrent; + vos_pkt_t *pNext; + v_S15_t seq; /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ if(NULL == timerUdata) @@ -296,6 +302,24 @@ v_VOID_t WLANTL_ReorderingAgingTimerExpierCB return; } + pCurrent = vosDataBuff; + + while (pCurrent != NULL) + { + vos_pkt_walk_packet_chain(pCurrent, &pNext, VOS_FALSE); + + if (NULL == pNext) + { + /* This is the last packet, retrieve its sequence number */ + pRxMetadata = WDI_DS_ExtractRxMetaData(VOS_TO_WPAL_PKT(pCurrent)); + seq = WDA_GET_RX_REORDER_CUR_PKT_SEQ_NO(pRxMetadata); + } + pCurrent = pNext; + } + TLLOG1(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO, + "%s: Sending out Frame no: %d to HDD", __func__, seq)); + ReorderInfo->LastSN = seq; + if( WLAN_STA_SOFTAP == pClientSTA->wSTADesc.wSTAType) { WLANTL_FwdPktToHDD( expireHandle->pAdapter, vosDataBuff, ucSTAID); @@ -541,6 +565,7 @@ WLANTL_BaSessionAdd pClientSTA->atlBAReorderInfo[ucTid].SSN = SSN; pClientSTA->atlBAReorderInfo[ucTid].sessionID = sessionID; pClientSTA->atlBAReorderInfo[ucTid].pendingFramesCount = 0; + pClientSTA->atlBAReorderInfo[ucTid].LastSN = SSN; TLLOG2(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO_HIGH, "WLAN TL:New BA session added for STA: %d TID: %d", ucSTAId, ucTid)); @@ -763,6 +788,7 @@ WLANTL_BaSessionDel reOrderInfo->winSize = 0; reOrderInfo->SSN = 0; reOrderInfo->sessionID = 0; + reOrderInfo->LastSN = 0; while (vos_lock_destroy(&reOrderInfo->reorderLock) == VOS_STATUS_E_BUSY) { @@ -1113,13 +1139,39 @@ VOS_STATUS WLANTL_MSDUReorder // remember our current CI so that later we can tell if it advanced ucCIndexOrig = currentReorderInfo->ucCIndex; - switch(ucOpCode) + switch(ucOpCode) { case WLANTL_OPCODE_INVALID: /* Do nothing just pass through current frame */ break; case WLANTL_OPCODE_QCUR_FWDBUF: + if (currentReorderInfo->LastSN > CSN) + { + if ((currentReorderInfo->LastSN - CSN) < CSN_WRAP_AROUND_THRESHOLD) + { + //this frame is received after BA timer is expired, discard it + TLLOG1(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO, + "(QCUR_FWDBUF) dropping old frame, SN=%d LastSN=%d", + CSN, currentReorderInfo->LastSN)); + status = vos_pkt_return_packet(*vosDataBuff); + if (!VOS_IS_STATUS_SUCCESS(status)) + { + TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "(QCUR_FWDBUF) drop old frame fail %d", status)); + } + *vosDataBuff = NULL; + lockStatus = vos_lock_release(¤tReorderInfo->reorderLock); + if (!VOS_IS_STATUS_SUCCESS(lockStatus)) + { + TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "WLANTL_MSDUReorder, Release LOCK Fail")); + return lockStatus; + } + return status; + } + } + currentReorderInfo->LastSN = CSN; if(0 == currentReorderInfo->pendingFramesCount) { //This frame will be fwd'ed to the OS. The next slot is the one we expect next @@ -1233,6 +1285,32 @@ VOS_STATUS WLANTL_MSDUReorder break; case WLANTL_OPCODE_QCUR: + if (currentReorderInfo->LastSN > CSN) + { + if ((currentReorderInfo->LastSN - CSN) < CSN_WRAP_AROUND_THRESHOLD) + { + // this frame is received after BA timer is expired, so disard it + TLLOG1(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO, + "(QCUR) dropping old frame, SN=%d LastSN=%d", + CSN, currentReorderInfo->LastSN)); + status = vos_pkt_return_packet(*vosDataBuff); + if (!VOS_IS_STATUS_SUCCESS(status)) + { + TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "*** (QCUR) drop old frame fail %d", status)); + } + *vosDataBuff = NULL; + lockStatus = vos_lock_release(¤tReorderInfo->reorderLock); + if (!VOS_IS_STATUS_SUCCESS(lockStatus)) + { + TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "WLANTL_MSDUReorder, Release LOCK Fail")); + return lockStatus; + } + return status; + } + } + status = WLANTL_QueueCurrent(currentReorderInfo, vosDataBuff, ucSlotIdx); @@ -1473,8 +1551,8 @@ VOS_STATUS WLANTL_MSDUReorder vos_pkt_get_available_buffer_pool(VOS_PKT_TYPE_RX_RAW, &rxFree); if(WLANTL_BA_MIN_FREE_RX_VOS_BUFFER >= rxFree) { - TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR,"RX Free: %d", rxFree)); - TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR,"RX free buffer count is too low, Pending frame count is %d", + TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO, "RX Free: %d", rxFree)); + TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO, "RX free buffer count is too low, Pending frame count is %d", currentReorderInfo->pendingFramesCount)); vosPktIdx = NULL; status = WLANTL_ChainFrontPkts(ucFwdIdx, diff --git a/CORE/TL/src/wlan_qct_tl_hosupport.c b/CORE/TL/src/wlan_qct_tl_hosupport.c index 0815e2b130e5..23bdd760bb5a 100644 --- a/CORE/TL/src/wlan_qct_tl_hosupport.c +++ b/CORE/TL/src/wlan_qct_tl_hosupport.c @@ -927,6 +927,8 @@ VOS_STATUS WLANTL_HSBMPSRSSIRegionChangedNotification return VOS_STATUS_E_INVAL; } + THSGETLOCK("WLANTL_HSBMPSRSSIRegionChangedNotification", + &tlCtxt->hoSupport.hosLock); currentHO = &(tlCtxt->hoSupport.currentHOState); hoSupport = &(tlCtxt->hoSupport); preFWNotification = currentHO->fwNotification; @@ -954,6 +956,8 @@ VOS_STATUS WLANTL_HSBMPSRSSIRegionChangedNotification } else if(preFWNotification == curFWNotification) { + THSRELEASELOCK("WLANTL_HSBMPSRSSIRegionChangedNotification", + &tlCtxt->hoSupport.hosLock); return status; } @@ -989,12 +993,13 @@ VOS_STATUS WLANTL_HSBMPSRSSIRegionChangedNotification nRegionNumber = 1; } - newRegionNumber = (nRegionNumber > pRegionNumber) ? nRegionNumber : pRegionNumber; if((currentHO->regionNumber) && (newRegionNumber == currentHO->regionNumber)) { TLLOG1(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO,"No Region Change with BMPS mode")); preFWNotification = curFWNotification; + THSRELEASELOCK("WLANTL_HSBMPSRSSIRegionChangedNotification", + &tlCtxt->hoSupport.hosLock); return status; } else if(newRegionNumber > currentHO->regionNumber) @@ -1052,6 +1057,8 @@ VOS_STATUS WLANTL_HSBMPSRSSIRegionChangedNotification TLLOG1(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO,"BMPS State, MSG from FW, Trigger Event %d, region index %d", evtType, currentHO->regionNumber)); + THSRELEASELOCK("WLANTL_HSBMPSRSSIRegionChangedNotification", + &tlCtxt->hoSupport.hosLock); return VOS_STATUS_SUCCESS; } @@ -1215,6 +1222,7 @@ VOS_STATUS WLANTL_HSHandleRXFrame return VOS_STATUS_E_INVAL; } + THSGETLOCK("WLANTL_HSHandleRXFrame", &tlCtxt->hoSupport.hosLock); WLANTL_StatHandleRXFrame(pAdapter, pBDHeader, STAid, isBroadcast, dataBuffer); /* If this frame is not management frame increase frame count */ @@ -1244,12 +1252,14 @@ VOS_STATUS WLANTL_HSHandleRXFrame { WLANTL_HSGetRSSI(pAdapter, pBDHeader, STAid, ¤tAvgRSSI); currentHO->historyRSSI = currentAvgRSSI; + THSRELEASELOCK("WLANTL_HSHandleRXFrame", &tlCtxt->hoSupport.hosLock); return status; } currentTimestamp = WDA_GET_RX_TIMESTAMP(pBDHeader); if((currentTimestamp - currentHO->sampleTime) < WLANTL_HO_SAMPLING_PERIOD) { + THSRELEASELOCK("WLANTL_HSHandleRXFrame", &tlCtxt->hoSupport.hosLock); return status; } currentHO->sampleTime = currentTimestamp; @@ -1259,6 +1269,7 @@ VOS_STATUS WLANTL_HSHandleRXFrame if(!VOS_IS_STATUS_SUCCESS(status)) { TLLOG1(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO,"Get RSSI Fail")); + THSRELEASELOCK("WLANTL_HSHandleRXFrame", &tlCtxt->hoSupport.hosLock); return status; } #ifdef WLAN_ACTIVEMODE_OFFLOAD_FEATURE @@ -1277,11 +1288,14 @@ VOS_STATUS WLANTL_HSHandleRXFrame if(!VOS_IS_STATUS_SUCCESS(status)) { TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR,"Handle new RSSI fail")); + THSRELEASELOCK("WLANTL_HSHandleRXFrame", + &tlCtxt->hoSupport.hosLock); return status; } } } + THSRELEASELOCK("WLANTL_HSHandleRXFrame", &tlCtxt->hoSupport.hosLock); return status; } @@ -1679,23 +1693,26 @@ VOS_STATUS WLANTL_HSDeregRSSIIndicationCB tlCtxt->hoSupport.registeredInd[currentHO->numThreshold - 1].numClient = 0; } - if((VOS_FALSE == tlCtxt->isBMPS) && (rssiValue >= currentHO->historyRSSI)) + if( ((VOS_FALSE == tlCtxt->isBMPS) && (rssiValue >= currentHO->historyRSSI)) + || ((VOS_TRUE == tlCtxt->isBMPS) && (VOS_TRUE == bmpsAbove)) ) { - TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO,"Removed Threshold above current RSSI level, old RN %d", currentHO->regionNumber)); + TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO, + "Removed Threshold above current RSSI level, old RN %d", + currentHO->regionNumber)); if(0 < currentHO->regionNumber) { currentHO->regionNumber--; } else { - TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR,"Current Region number is 0, cannot decrease anymore")); + TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "Current Region number is 0, cannot decrease anymore")); } - TLLOG1(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO,"Decrease region number without notification %d", currentHO->regionNumber)); - } - else if((VOS_TRUE == tlCtxt->isBMPS) && (VOS_TRUE == bmpsAbove)) - { - currentHO->regionNumber--; + TLLOG1(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO, + "Decrease region number without notification %d", + currentHO->regionNumber)); } + /* Decrease number of thresholds */ tlCtxt->hoSupport.currentHOState.numThreshold--; /*Reset the FW notification*/ diff --git a/CORE/TL/src/wlan_qct_tli.h b/CORE/TL/src/wlan_qct_tli.h index 7c3c4431c68b..0e642f9cc2ab 100644 --- a/CORE/TL/src/wlan_qct_tli.h +++ b/CORE/TL/src/wlan_qct_tli.h @@ -57,6 +57,7 @@ DESCRIPTION when who what, where, why -------- --- ---------------------------------------------------------- +08/19/13 rajekuma Added reliable multicast support in TL 02/19/10 bad Fixed 802.11 to 802.3 ft issues with WAPI 01/14/10 rnair Fixed the byte order for the WAI packet type. 01/08/10 lti Added TL Data Caching @@ -97,7 +98,6 @@ when who what, where, why #define STATIC static - /*---------------------------------------------------------------------------- * Preprocessor Definitions and Constants * -------------------------------------------------------------------------*/ @@ -178,6 +178,11 @@ when who what, where, why #define WLANTL_FRAME_TYPE_MCAST 0x01 #define WLANTL_FRAME_TYPE_UCAST 0x00 +#ifdef WLAN_FEATURE_RELIABLE_MCAST +/*Size of TL's active list of reliable multicast hash table. + Always keep this value 2 ^ n for efficient hashing*/ +#define WLANTL_RMCAST_HASH_TABLE_SIZE (32) +#endif /*------------------------------------------------------------------------- BT-AMP related definition - !!! should probably be moved to BT-AMP header @@ -235,6 +240,8 @@ when who what, where, why /*get RSSI1 from a RX BD*/ #define WLANTL_GETRSSI1(pBD) (WDA_GETRSSI1(pBD) - WLAN_TL_RSSI_CORRECTION) +#define WLANTL_GETSNR(pBD) WDA_GET_RX_SNR(pBD) + /* Check whether Rx frame is LS or EAPOL packet (other than data) */ #define WLANTL_BAP_IS_NON_DATA_PKT_TYPE(usType) \ ((WLANTL_BT_AMP_TYPE_AR == usType) || (WLANTL_BT_AMP_TYPE_SEC == usType) || \ @@ -264,6 +271,9 @@ typedef enum /* Serialzie Finish UL Authentication request */ WLANTL_FINISH_ULA = 5, + /* Serialized Snapshot request indication */ + WLANTL_TX_SNAPSHOT = 6, + WLANTL_TX_MAX }WLANTL_TxSignalsType; @@ -301,7 +311,8 @@ typedef enum ---------------------------------------------------------------------------*/ typedef VOS_STATUS (*WLANTL_STAFuncType)( v_PVOID_t pAdapter, v_U8_t ucSTAId, - vos_pkt_t** pvosDataBuff); + vos_pkt_t** pvosDataBuff, + v_BOOL_t bForwardIAPPwithLLC); /*--------------------------------------------------------------------------- STA FSM Entry type @@ -314,32 +325,38 @@ typedef struct /* Receive in connected state - only EAPOL or WAI*/ VOS_STATUS WLANTL_STARxConn( v_PVOID_t pAdapter, v_U8_t ucSTAId, - vos_pkt_t** pvosDataBuff ); + vos_pkt_t** pvosDataBuff, + v_BOOL_t bForwardIAPPwithLLC); /* Transmit in connected state - only EAPOL or WAI*/ VOS_STATUS WLANTL_STATxConn( v_PVOID_t pAdapter, v_U8_t ucSTAId, - vos_pkt_t** pvosDataBuff ); + vos_pkt_t** pvosDataBuff, + v_BOOL_t bForwardIAPPwithLLC); /* Receive in authenticated state - all data allowed*/ VOS_STATUS WLANTL_STARxAuth( v_PVOID_t pAdapter, v_U8_t ucSTAId, - vos_pkt_t** pvosDataBuff ); + vos_pkt_t** pvosDataBuff, + v_BOOL_t bForwardIAPPwithLLC); /* Transmit in authenticated state - all data allowed*/ VOS_STATUS WLANTL_STATxAuth( v_PVOID_t pAdapter, v_U8_t ucSTAId, - vos_pkt_t** pvosDataBuff ); + vos_pkt_t** pvosDataBuff, + v_BOOL_t bForwardIAPPwithLLC); /* Receive in disconnected state - no data allowed*/ VOS_STATUS WLANTL_STARxDisc( v_PVOID_t pAdapter, v_U8_t ucSTAId, - vos_pkt_t** pvosDataBuff ); + vos_pkt_t** pvosDataBuff, + v_BOOL_t bForwardIAPPwithLLC); /* Transmit in disconnected state - no data allowed*/ VOS_STATUS WLANTL_STATxDisc( v_PVOID_t pAdapter, v_U8_t ucSTAId, - vos_pkt_t** pvosDataBuff ); + vos_pkt_t** pvosDataBuff, + v_BOOL_t bForwardIAPPwithLLC); /* TL State Machine */ STATIC const WLANTL_STAFsmEntryType tlSTAFsm[WLANTL_STA_MAX_STATE] = @@ -438,6 +455,8 @@ typedef struct WLANTL_TIMER_EXPIER_UDATA_T timerUdata; WLANTL_REORDER_BUFFER_T *reorderBuffer; + + v_U16_t LastSN; }WLANTL_BAReorderType; @@ -450,6 +469,23 @@ typedef struct v_U8_t ucSet; }WLANTL_UAPSDInfoType; +#ifdef WLAN_FEATURE_RELIABLE_MCAST +/*--------------------------------------------------------------------------- + Reliable Multicast Session information +---------------------------------------------------------------------------*/ +struct tTL_ReliableMcastList +{ + /* Reliable multicast session in TL */ + struct tTL_ReliableMcastList *next; + v_MACADDR_t reliableMcastAddr; + v_U16_t mcSeqCtl; + v_U32_t rxMCDupcnt; +}; + +typedef struct tTL_ReliableMcastList WLANTL_RMCAST_SESSION; + +#endif + /*--------------------------------------------------------------------------- STA Client type ---------------------------------------------------------------------------*/ @@ -500,6 +536,18 @@ typedef struct /* Value of the averaged RSSI for this station */ v_U32_t uLinkQualityAvg; + /* Sum of SNR for snrIdx number of consecutive frames */ + v_U32_t snrSum; + + /* Number of consecutive frames over which snrSum is calculated */ + v_S7_t snrIdx; + + /* Average SNR of previous 20 frames */ + v_S7_t prevSnrAvg; + + /* Average SNR returned by fw */ + v_S7_t snrAvgBmps; + /* Tx packet count per station per TID */ v_U32_t auTxCount[WLAN_MAX_TID]; @@ -622,6 +670,15 @@ typedef struct 1 then we have to encrypt the data irrespective of TL state (CONNECTED/AUTHENTICATED) */ v_U8_t ptkInstalled; + + v_U32_t linkCapacity; + +#ifdef WLAN_FEATURE_RELIABLE_MCAST + /*Active reliable multicast sessions list in TL*/ + WLANTL_RMCAST_SESSION *mcastSession[WLANTL_RMCAST_HASH_TABLE_SIZE]; + /*Reliable multicast lock*/ + vos_lock_t mcLock; +#endif }WLANTL_STAClientType; /*--------------------------------------------------------------------------- @@ -815,6 +872,17 @@ typedef struct v_BOOL_t isBMPS; /* Whether WDA_DS_TX_START_XMIT msg is pending or not */ v_BOOL_t isTxTranmitMsgPending; + +#ifdef WLAN_FEATURE_RELIABLE_MCAST + /*Active reliable multicast sessions list in TL*/ + WLANTL_RMCAST_SESSION *reliableMcastSession[WLANTL_RMCAST_HASH_TABLE_SIZE]; + /*Reliable multicast lock*/ + vos_lock_t rmcLock; + v_U8_t multicastDuplicateDetectionEnabled; + v_U8_t rmcDataPathEnabled; + v_U32_t mcastDupCnt; +#endif + }WLANTL_CbType; /*========================================================================== @@ -1269,7 +1337,7 @@ WLANTL_Translate8023To80211Header VOS_STATUS* pvosStatus, WLANTL_CbType* pTLCb, v_U8_t *pucStaId, - v_U8_t ucUP, + WLANTL_MetaInfoType* pTlMetaInfo, v_U8_t *ucWDSEnabled, v_U8_t *extraHeadSpace ); @@ -1310,7 +1378,8 @@ WLANTL_Translate80211To8023Header v_U16_t usActualHLen, v_U8_t ucHeaderLen, WLANTL_CbType* pTLCb, - v_U8_t ucSTAId + v_U8_t ucSTAId, + v_BOOL_t bForwardIAPPwithLLC ); /*========================================================================== @@ -1602,6 +1671,23 @@ VOS_STATUS WLANTL_ReadRSSI v_U8_t STAid ); +/*========================================================================== + + FUNCTION + + DESCRIPTION Read SNR value out of a RX BD + + PARAMETERS: Caller must validate all parameters + + RETURN VALUE + +============================================================================*/ +VOS_STATUS WLANTL_ReadSNR +( + v_PVOID_t pAdapter, + v_PVOID_t pBDHeader, + v_U8_t STAid +); void WLANTL_PowerStateChangedCB @@ -1646,4 +1732,218 @@ WLANTL_FwdPktToHDD v_U8_t ucSTAId ); +#ifdef WLAN_FEATURE_RELIABLE_MCAST + +/*========================================================================== + FUNCTION WLANTL_RmcInit + + DESCRIPTION This function initilizes RMC module in TL + + PARAMETERS + pADapter : pointer to VOS global context + + RETURN VALUE + VOS_STATUS_SUCCESS : for success + VOS_STATUS_FAILURE : for failure + VOS_STATUS_E_INVAL : for invalid input parameter + +============================================================================*/ +VOS_STATUS WLANTL_RmcInit +( + v_PVOID_t pAdapter +); + +/*========================================================================== + FUNCTION WLANTL_RmcDeInit + + DESCRIPTION This function de-initilizes RMC module in TL + + PARAMETERS + pADapter : pointer to VOS global context + + RETURN VALUE + VOS_STATUS_SUCCESS : for success + VOS_STATUS_FAILURE : for failure + VOS_STATUS_E_INVAL : for invalid input parameter + +============================================================================*/ +VOS_STATUS WLANTL_RmcDeInit +( + v_PVOID_t pAdapter +); + + +/*========================================================================== + FUNCTION WLANTL_RmcHashRmcastSession + + DESCRIPTION This function hashes input RMCAST MAC address + + PARAMETERS + pMcastAddr : pointer to input RMCAST MAC address + + RETURN VALUE + tANI_U8 : A hash value between 0 to WLANTL_MAX_RMCAST_SESSIONS - 1 +============================================================================*/ +tANI_U8 WLANTL_RmcHashRmcastSession ( v_MACADDR_t *pMcastAddr ); + + +/*=========================================================================== + FUNCTION WLANTL_RmcLookUpRmcastSession + + DESCRIPTION This function tries to find out RMCAST address in TL's active + list of reliable multicast sessions + + PARAMETERS + pTLCb : pointer to TL Cb + pMcastAddr : pointer to input RMCAST MAC address + + RETURN VALUE + WLANTL_RMCAST_SESSION * : + NULL if input RMCAST MAC address does exist in active RMCAST sessions list + Pointer to RMCAST session found in active RMCAST sessions list +=============================================================================*/ +WLANTL_RMCAST_SESSION *WLANTL_RmcLookUpRmcastSession +( + WLANTL_RMCAST_SESSION *reliableMcastSession[], + v_MACADDR_t *pMcastAddr +); + +/*=========================================================================== + FUNCTION WLANTL_RmcAddRmcastSession + + DESCRIPTION This function adds requested RMCAST address in TL's active + list of reliable multicast sessions + + PARAMETERS + pTLCb : pointer to TL Cb + pMcastAddr : pointer to input RMCAST MAC address + + RETURN VALUE + WLANTL_RMCAST_SESSION * : + NULL if input RMCAST MAC address already exists in active RMCAST sessions + list else pointer to RMCAST session which is added in active RMCAST + sessions list +=============================================================================*/ +WLANTL_RMCAST_SESSION *WLANTL_RmcAddRmcastSession +( + WLANTL_RMCAST_SESSION *reliableMcastSession[], + v_MACADDR_t *pMcastAddr +); + +/*=========================================================================== + FUNCTION WLANTL_RmcDeleteRmcastSession + + DESCRIPTION This function deleted requested RMCAST address from TL's active + list of reliable multicast sessions + + PARAMETERS + pTLCb : pointer to TL Cb + pMcastAddr : pointer to input RMCAST MAC address + + RETURN VALUE + WLANTL_RMCAST_SESSION * : + 0 if input RMCAST session does not exist in active RMCAST + sessions list + 1 if input RMCAST session is successfully deleted from TL's active list + of reliable multicast sessions +=============================================================================*/ +tANI_U8 +WLANTL_RmcDeleteRmcastSession +( + WLANTL_RMCAST_SESSION *reliableMcastSession[], + v_MACADDR_t *pMcastAddr +); + +/*============================================================================= + FUNCTION WLANTL_ProcessRmcCommand + + DESCRIPTION + This function adds/deletes input RMCAST session to/from TL's active hash + table of RMCAST sessions + + DEPENDENCIES + Reliable multicast receive leader must be selected by FW before + UMAC calling this API + + PARAMETERS + + IN + + pTLCb : Pointer to TL context + pMcastAddr : Pointer to MAC ADDR of RMCAST session which needs to to added + or deleted + command : If command is 1 then add requested RMCAST session in active + session hash table else delete it from active session hash + table + + RETURN VALUE + The result code associated with performing the operation + + VOS_STATUS_E_FAILURE: When add or delete command failed + + VOS_STATUS_SUCCESS: Everything is good :) + + SIDE EFFECTS +==============================================================================*/ +VOS_STATUS +WLANTL_ProcessRmcCommand +( + WLANTL_CbType* pTLCb, + v_MACADDR_t *pMcastAddr, + tANI_U32 command +); + +/*============================================================================= + FUNCTION WLANTL_IsDuplicateMcastFrm + + DESCRIPTION + This function checks for duplicast multicast frames and drops them. + + DEPENDENCIES + + PARAMETERS + + IN + + pClientSTA : Pointer to WLANTL_STAClientType + aucBDHeader : Pointer to BD header + + RETURN VALUE + + VOS_FALSE: This frame is not a duplicate + + VOS_TRUE: This frame is a duplicate + +==============================================================================*/ +v_U8_t +WLANTL_IsDuplicateMcastFrm +( + WLANTL_STAClientType *pClientSTA, + vos_pkt_t* vosDataBuff +); + +/*============================================================================= + FUNCTION WLANTL_McastDeleteAllEntries + + DESCRIPTION + This function removes all multicast entries used for duplicate detection + + DEPENDENCIES + + PARAMETERS + + IN + + pClientSTA : Pointer to WLANTL_STAClientType + + RETURN VALUE + + None + +==============================================================================*/ +void +WLANTL_McastDeleteAllEntries(WLANTL_STAClientType * pClientSTA); + +#endif /*End of WLAN_FEATURE_RELIABLE_MCAST*/ + #endif /* #ifndef WLAN_QCT_TLI_H */ diff --git a/CORE/VOSS/inc/i_vos_packet.h b/CORE/VOSS/inc/i_vos_packet.h index 6ec546fab4c1..ef7a8ec6d327 100644 --- a/CORE/VOSS/inc/i_vos_packet.h +++ b/CORE/VOSS/inc/i_vos_packet.h @@ -221,6 +221,10 @@ typedef struct vos_pkt_context_s //Add the field for a faster rx path v_SIZE_t rxRawFreeListCount; + // Number of RX Raw packets that will be reserved; this is a configurable + // value to the driver to save the memory usage. + v_SIZE_t numOfRxRawPackets; + // These are the structs to keep low-resource callback information. // There are separate low-resource callback information blocks for // RX_RAW, TX_DATA, and TX_MGMT. @@ -228,7 +232,11 @@ typedef struct vos_pkt_context_s vos_pkt_low_resource_info txDataLowResourceInfo; vos_pkt_low_resource_info txMgmtLowResourceInfo; - struct mutex mlock; + struct mutex rxReplenishListLock; + struct mutex rxRawFreeListLock; + struct mutex txDataFreeListLock; + struct mutex txMgmtFreeListLock; + /*Meta Information to be transported with the packet*/ WDI_DS_TxMetaInfoType txMgmtMetaInfo[VPKT_NUM_TX_MGMT_PACKETS]; WDI_DS_TxMetaInfoType txDataMetaInfo[VPKT_NUM_TX_DATA_PACKETS]; diff --git a/CORE/VOSS/inc/i_vos_trace.h b/CORE/VOSS/inc/i_vos_trace.h index 73cb1b2e4c26..edd92a64918e 100644 --- a/CORE/VOSS/inc/i_vos_trace.h +++ b/CORE/VOSS/inc/i_vos_trace.h @@ -25,7 +25,6 @@ * to the Linux Foundation. */ - #if !defined( __I_VOS_TRACE_H ) #define __I_VOS_TRACE_H @@ -72,6 +71,9 @@ --------------------------------------------------------------------------*/ void vos_trace_msg( VOS_MODULE_ID module, VOS_TRACE_LEVEL level, char *strFormat, ... ); +void vos_trace_hex_dump( VOS_MODULE_ID module, VOS_TRACE_LEVEL level, + void *data, int buf_len ); + void vos_trace_display(void); void vos_trace_setValue( VOS_MODULE_ID module, VOS_TRACE_LEVEL level, v_U8_t on ); @@ -88,8 +90,10 @@ void vos_trace_setValue( VOS_MODULE_ID module, VOS_TRACE_LEVEL level, v_U8_t on // without being bogged down by all the tracing in the code. #if defined( WLAN_DEBUG ) #define VOS_TRACE vos_trace_msg +#define VOS_TRACE_HEX_DUMP vos_trace_hex_dump #else -#define VOS_TRACE(arg...) +#define VOS_TRACE(arg...) +#define VOS_TRACE_HEX_DUMP(arg...) #endif diff --git a/CORE/VOSS/inc/i_vos_types.h b/CORE/VOSS/inc/i_vos_types.h index 5c93f46731e6..d6d80a5587ab 100644 --- a/CORE/VOSS/inc/i_vos_types.h +++ b/CORE/VOSS/inc/i_vos_types.h @@ -165,35 +165,35 @@ ------------------------------------------------------------------------*/ /// unsigned 8-bit types -typedef unsigned char v_U8_t; -typedef unsigned char v_UCHAR_t; -typedef unsigned char v_BYTE_t; +typedef u8 v_U8_t; +typedef u8 v_UCHAR_t; +typedef u8 v_BYTE_t; /// unsigned 16-bit types -typedef unsigned short v_U16_t; +typedef u16 v_U16_t; typedef unsigned short v_USHORT_t; /// unsigned 32-bit types -typedef unsigned long v_U32_t; +typedef u32 v_U32_t; // typedef atomic_t v_U32AT_t; typedef unsigned long v_ULONG_t; /// unsigned 64-bit types -typedef long long v_U64_t; +typedef u64 v_U64_t; /// unsigned integer types typedef unsigned int v_UINT_t; /// signed 8-bit types -typedef signed char v_S7_t; +typedef s8 v_S7_t; typedef signed char v_SCHAR_t; /// signed 16-bit types -typedef signed short v_S15_t; +typedef s16 v_S15_t; typedef signed short v_SSHORT_t; /// signed 32-bit types -typedef signed long v_S31_t; +typedef s32 v_S31_t; typedef signed long v_SLONG_t; /// signed integer types diff --git a/CORE/VOSS/inc/log_codes.h b/CORE/VOSS/inc/log_codes.h index d09c2433357d..40684294d3fd 100644 --- a/CORE/VOSS/inc/log_codes.h +++ b/CORE/VOSS/inc/log_codes.h @@ -2008,8 +2008,10 @@ when who what, where, why #define LOG_GNSS_PDSM_PPM_SESSION_END_C ((0x4E9) + LOG_1X_BASE_C) +#define LOG_TRSP_DATA_STALL_C ((0x801) + LOG_1X_BASE_C) + /* The last defined DMSS log code */ -#define LOG_1X_LAST_C ((0x4E9) + LOG_1X_BASE_C) +#define LOG_1X_LAST_C ((0x801) + LOG_1X_BASE_C) /* This is only here for old (pre equipment ID update) logging code */ diff --git a/CORE/VOSS/inc/vos_api.h b/CORE/VOSS/inc/vos_api.h index 5ff1cb0a8aab..25f391bc9443 100644 --- a/CORE/VOSS/inc/vos_api.h +++ b/CORE/VOSS/inc/vos_api.h @@ -71,8 +71,8 @@ #include #include #include -#include #include +#include #include #include #include @@ -172,9 +172,13 @@ v_CONTEXT_t vos_get_global_context( VOS_MODULE_ID moduleId, v_U8_t vos_is_logp_in_progress(VOS_MODULE_ID moduleId, v_VOID_t *moduleContext); void vos_set_logp_in_progress(VOS_MODULE_ID moduleId, v_U8_t value); + v_U8_t vos_is_load_unload_in_progress(VOS_MODULE_ID moduleId, v_VOID_t *moduleContext); void vos_set_load_unload_in_progress(VOS_MODULE_ID moduleId, v_U8_t value); +v_U8_t vos_is_reinit_in_progress(VOS_MODULE_ID moduleId, v_VOID_t *moduleContext); +void vos_set_reinit_in_progress(VOS_MODULE_ID moduleId, v_U8_t value); + /**--------------------------------------------------------------------------- \brief vos_alloc_context() - allocate a context within the VOSS global Context @@ -290,6 +294,9 @@ VOS_STATUS vos_wlanShutdown(void); */ VOS_STATUS vos_wlanReInit(void); +VOS_STATUS vos_get_vdev_types(tVOS_CON_MODE mode, tANI_U32 *type, + tANI_U32 *subType); + /** @brief vos_wlanRestart() - This API will reload WLAN driver. @@ -305,6 +312,21 @@ VOS_STATUS vos_wlanReInit(void); */ VOS_STATUS vos_wlanRestart(void); -VOS_STATUS vos_get_vdev_types(tVOS_CON_MODE mode, tANI_U32 *type, - tANI_U32 *subType); + +/** + @brief vos_fwDumpReq() + + This function is called to issue dump commands to Firmware + + @param + cmd - Command No. to execute + arg1 - argument 1 to cmd + arg2 - argument 2 to cmd + arg3 - argument 3 to cmd + arg4 - argument 4 to cmd + @return + NONE +*/ +v_VOID_t vos_fwDumpReq(tANI_U32 cmd, tANI_U32 arg1, tANI_U32 arg2, + tANI_U32 arg3, tANI_U32 arg4); #endif // if !defined __VOS_NVITEM_H diff --git a/CORE/VOSS/inc/vos_diag_core_log.h b/CORE/VOSS/inc/vos_diag_core_log.h index 7307f262cb2e..2d70df3838a8 100644 --- a/CORE/VOSS/inc/vos_diag_core_log.h +++ b/CORE/VOSS/inc/vos_diag_core_log.h @@ -333,6 +333,43 @@ typedef struct v_U16_t medium_time; } vos_log_qos_tspec_pkt_type; +/*--------------------------------------------------------------------------- + This packet contains data information when stall detected + LOG_TRSP_DATA_STALL_C 0x1801 +---------------------------------------------------------------------------*/ + +typedef struct +{ + char channelName[4]; + v_U32_t numDesc; + v_U32_t numFreeDesc; + v_U32_t numRsvdDesc; + v_U32_t headDescOrder; + v_U32_t tailDescOrder; + v_U32_t ctrlRegVal; + v_U32_t statRegVal; + v_U32_t numValDesc; + v_U32_t numInvalDesc; +} vos_log_data_stall_channel_type; + +typedef struct +{ + log_hdr_type hdr; + v_U32_t PowerState; + v_U32_t numFreeBd; + vos_log_data_stall_channel_type dxeChannelInfo[4]; +} vos_log_data_stall_type; + +/*--------------------------------------------------------------------------- + This packet contains the rssi value from BSS descriptor + LOG_WLAN_RSSI_UPDATE_C 0x1354 +---------------------------------------------------------------------------*/ +typedef struct +{ + log_hdr_type hdr; + v_S7_t rssi; +} vos_log_rssi_pkt_type; + /*------------------------------------------------------------------------- Function declarations and documenation ------------------------------------------------------------------------*/ diff --git a/CORE/VOSS/inc/vos_getBin.h b/CORE/VOSS/inc/vos_getBin.h index 9674a7a121d7..06a215dfd863 100644 --- a/CORE/VOSS/inc/vos_getBin.h +++ b/CORE/VOSS/inc/vos_getBin.h @@ -73,8 +73,10 @@ typedef enum VOS_BINARY_ID_COUNTRY_INFO, /// Binary ID for Handoff Configuration data - VOS_BINARY_ID_HO_CONFIG + VOS_BINARY_ID_HO_CONFIG, + /// Binary ID for Dictionary Configuration data + VOS_BINARY_ID_DICT_CONFIG } VOS_BINARY_ID; diff --git a/CORE/VOSS/inc/vos_nvitem.h b/CORE/VOSS/inc/vos_nvitem.h index e9b1f24dcd90..b8d2be79112b 100644 --- a/CORE/VOSS/inc/vos_nvitem.h +++ b/CORE/VOSS/inc/vos_nvitem.h @@ -170,6 +170,18 @@ typedef enum } v_REGDOMAIN_t; +typedef enum +{ + COUNTRY_NV, + COUNTRY_IE, + COUNTRY_USER, + COUNTRY_CELL_BASE, + //add new sources here + COUNTRY_QUERY, + COUNTRY_MAX = COUNTRY_QUERY +} +v_CountryInfoSource_t; + // enum of supported NV items in VOSS typedef enum { @@ -216,6 +228,8 @@ VOS_STATUS vos_nv_init(void); \param countryCode - country code + \param source - source of country code + \return VOS_STATUS_SUCCESS - regulatory domain is found for the given country VOS_STATUS_E_FAULT - invalid pointer error VOS_STATUS_E_EMPTY - country code table is empty @@ -225,7 +239,7 @@ VOS_STATUS vos_nv_init(void); -------------------------------------------------------------------------*/ VOS_STATUS vos_nv_getRegDomainFromCountryCode( v_REGDOMAIN_t *pRegDomain, - const v_COUNTRYCODE_t countryCode ); + const v_COUNTRYCODE_t countryCode, v_CountryInfoSource_t source); /**------------------------------------------------------------------------ @@ -620,16 +634,64 @@ VOS_STATUS vos_nv_close(void); \return status of the NV read operation \sa -------------------------------------------------------------------------*/ -VOS_STATUS vos_nv_getNVBuffer(v_VOID_t **pNvBuffer ,v_SIZE_t *pSize); +VOS_STATUS vos_nv_getNVBuffer(v_VOID_t **pNvBuffer, v_SIZE_t *pSize); + +/**------------------------------------------------------------------------ + \brief vos_nv_getNVEncodedBuffer - + \param pBuffer - to return the buffer address + pSize - buffer size. + \return status of the NV read operation + \sa + -------------------------------------------------------------------------*/ +VOS_STATUS vos_nv_getNVEncodedBuffer(v_VOID_t **pNvBuffer, v_SIZE_t *pSize); + + +/**------------------------------------------------------------------------ + \brief vos_nv_getNVDictionary - + \param pBuffer - to return the buffer address + pSize - buffer size. + \return status of the NV read operation + \sa + -------------------------------------------------------------------------*/ +VOS_STATUS vos_nv_getNVDictionary(v_VOID_t **pNvBuffer, v_SIZE_t *pSize); + +/**------------------------------------------------------------------------ + \brief vos_nv_isEmbeddedNV() - NV.bin is embedded or not + + \return VOS_STATUS_SUCCESS - if NV is embedded + otherwise - NOT embedded + \sa + -------------------------------------------------------------------------*/ +VOS_STATUS vos_nv_isEmbeddedNV(void); + +/**------------------------------------------------------------------------ + \brief vos_nv_setNVEncodedBuffer() - set Encode Buffer + + \return VOS_STATUS_SUCCESS - if able to set encoded buffer successfully + otherwise - NOT able to set encoded data + \sa + -------------------------------------------------------------------------*/ +VOS_STATUS vos_nv_setNVEncodedBuffer(v_U8_t *pNvBuffer, v_SIZE_t size); + +/**------------------------------------------------------------------------ + \brief vos_nv_get_dictionary_data() - read dictionary data + + \return VOS_STATUS_SUCCESS - if dictionary data is read successfully + otherwise - NOT able to read dictionary data + \sa + -------------------------------------------------------------------------*/ +VOS_STATUS vos_nv_get_dictionary_data(void); /**------------------------------------------------------------------------ \brief vos_nv_setRegDomain - \param clientCtxt - Client Context, Not used for PRIMA regId - Regulatory Domain ID + sendRegHint - send hint to cfg80211 \return status set REG domain operation \sa -------------------------------------------------------------------------*/ -VOS_STATUS vos_nv_setRegDomain(void * clientCtxt, v_REGDOMAIN_t regId); +VOS_STATUS vos_nv_setRegDomain(void * clientCtxt, v_REGDOMAIN_t regId, + v_BOOL_t sendRegHint); /**------------------------------------------------------------------------ \brief vos_nv_getChannelEnabledState - @@ -646,4 +708,5 @@ eNVChannelEnabledType vos_nv_getChannelEnabledState v_U32_t rfChannel ); +VOS_STATUS vos_init_wiphy_from_nv_bin(void); #endif // __VOS_NVITEM_H diff --git a/CORE/VOSS/inc/vos_packet.h b/CORE/VOSS/inc/vos_packet.h index e38f97fd2799..6029944b0afb 100644 --- a/CORE/VOSS/inc/vos_packet.h +++ b/CORE/VOSS/inc/vos_packet.h @@ -1212,5 +1212,22 @@ VOS_STATUS vos_pkt_get_available_buffer_pool VOS_PKT_TYPE pktType, v_SIZE_t *vosFreeBuffer ); + +/** + @brief vos_pkt_get_num_of_rx_raw_pkts() - Get the number of RX packets + that should be allocated. + + This function is called by VOS packet module to know how many RX raw + packets it should allocate/reserve. This value can be configured thru + Kernel device tree to save memory usage. + + @param + NONE + @return + v_SIZE_t the number of packets to allocate + +*/ +v_SIZE_t vos_pkt_get_num_of_rx_raw_pkts(void); + #endif #endif // !defined( __VOS_PKT_H ) diff --git a/CORE/VOSS/inc/vos_trace.h b/CORE/VOSS/inc/vos_trace.h index 5fa3c1f7ae42..0a388185bece 100644 --- a/CORE/VOSS/inc/vos_trace.h +++ b/CORE/VOSS/inc/vos_trace.h @@ -91,6 +91,7 @@ typedef enum // below definition is obsolete and is no longer being used in BMP and WM // TODO: remove this once this is not used on Android #define VOS_ENABLE_TRACING +#define WCONN_TRACE_KMSG_LOG_BUFF #include @@ -139,4 +140,22 @@ void vos_trace_setLevel( VOS_MODULE_ID module, VOS_TRACE_LEVEL level ); --------------------------------------------------------------------------*/ v_BOOL_t vos_trace_getLevel( VOS_MODULE_ID module, VOS_TRACE_LEVEL level ); +#ifdef WCONN_TRACE_KMSG_LOG_BUFF +/*-------------------------------------------------------------------------- + \brief vos_wconn_trace_init(); - Initializing the spinlock, + Initialization would be called at the time of hdd_driver_init() + + \return - returns None + --------------------------------------------------------------------------*/ +void vos_wconn_trace_init(void); + +/*-------------------------------------------------------------------------- + \brief vos_wconn_trace_exit(); - De-Initializing the spinlock, + De-Initialization would be called at the time of hdd_driver_exit() + + \return - returns None + --------------------------------------------------------------------------*/ +void vos_wconn_trace_exit(void); +#endif + #endif diff --git a/CORE/VOSS/inc/vos_types.h b/CORE/VOSS/inc/vos_types.h index 0d41079c6663..1872f7b28140 100644 --- a/CORE/VOSS/inc/vos_types.h +++ b/CORE/VOSS/inc/vos_types.h @@ -1,3 +1,5 @@ +#if !defined( __VOS_TYPES_H ) +#define __VOS_TYPES_H /* * Copyright (c) 2013, The Linux Foundation. All rights reserved. * @@ -25,8 +27,6 @@ * to the Linux Foundation. */ -#if !defined( __VOS_TYPES_H ) -#define __VOS_TYPES_H /**========================================================================= \file vos_Types.h @@ -118,13 +118,14 @@ typedef enum VOS_MODULE_ID_VOSS = 10, VOS_MODULE_ID_SAP = 11, VOS_MODULE_ID_HDD_SOFTAP = 12, + VOS_MODULE_ID_PMC = 13, #ifdef QCA_WIFI_2_0 - VOS_MODULE_ID_HIF = 13, - VOS_MODULE_ID_HTC = 14, - VOS_MODULE_ID_TXRX = 15, - VOS_MODULE_ID_ADF = 16, - VOS_MODULE_ID_CFG = 17, + VOS_MODULE_ID_HIF = 14, + VOS_MODULE_ID_HTC = 15, + VOS_MODULE_ID_TXRX = 16, + VOS_MODULE_ID_ADF = 17, + VOS_MODULE_ID_CFG = 18, #endif // not a real module ID. This is used to identify the maxiumum @@ -149,7 +150,6 @@ typedef enum VOS_IBSS_MODE, VOS_P2P_DEVICE_MODE, VOS_MAX_NO_OF_MODE - } tVOS_CON_MODE; //This is a bit pattern to be set for each mode @@ -217,7 +217,7 @@ typedef struct /// v_MACADDR_t macAddress = VOS_MAC_ADDR_ZERO_INITIALIZER; #define VOS_MAC_ADDR_ZERO_INITIALIZER { { 0, 0, 0, 0, 0, 0 } } - +#define VOS_IPV4_ADDR_SIZE ( 4 ) /*---------------------------------------------------------------------------- diff --git a/CORE/VOSS/inc/wcnss_api.h b/CORE/VOSS/inc/wcnss_api.h index d132b90c5dc6..0baa2a4dec80 100644 --- a/CORE/VOSS/inc/wcnss_api.h +++ b/CORE/VOSS/inc/wcnss_api.h @@ -34,7 +34,7 @@ #include #else #include -#endif /* #ifdef ANI_BUS_TYPE_PLATFORM */ +#endif /* #ifdef ANI_BUS_TYPE_PLATFORM */ #include #include @@ -44,14 +44,15 @@ extern struct crypto_ahash *wcnss_wlan_crypto_alloc_ahash(const char *alg_name, extern int wcnss_wlan_crypto_ahash_digest(struct ahash_request *req); extern void wcnss_wlan_crypto_free_ahash(struct crypto_ahash *tfm); -extern int wcnss_wlan_crypto_ahash_setkey(struct crypto_ahash *tfm, const u8 *key, - unsigned int keylen); -extern struct crypto_ablkcipher *wcnss_wlan_crypto_alloc_ablkcipher(const char *alg_name, - u32 type, u32 mask); +extern int wcnss_wlan_crypto_ahash_setkey(struct crypto_ahash *tfm, + const u8 *key, unsigned int keylen); +extern struct crypto_ablkcipher *wcnss_wlan_crypto_alloc_ablkcipher( + const char *alg_name, + u32 type, u32 mask); extern void wcnss_wlan_ablkcipher_request_free(struct ablkcipher_request *req); extern void wcnss_wlan_crypto_free_ablkcipher(struct crypto_ablkcipher *tfm); -#else /* #ifdef QCA_WIFI_ISOC */ +#else /* #ifdef QCA_WIFI_ISOC */ /* * Do nothing for non ISOC @@ -84,12 +85,12 @@ static inline void wcnss_allow_suspend(void) static inline unsigned int wcnss_get_serial_number(void) { - return 0; + return 0; } static inline void *wcnss_wlan_crypto_alloc_ahash(const char *alg_name, - unsigned int type, - unsigned int mask) + unsigned int type, + unsigned int mask) { return NULL; } @@ -104,14 +105,14 @@ static inline void wcnss_wlan_crypto_free_ahash(void *tfm) } static inline int wcnss_wlan_crypto_ahash_setkey(void *tfm, - const u8 *key, - unsigned int keylen) + const u8 *key, + unsigned int keylen) { return 0; } static inline void *wcnss_wlan_crypto_alloc_ablkcipher(const char *alg_name, - u32 type, u32 mask) + u32 type, u32 mask) { return NULL; } @@ -126,22 +127,22 @@ static inline void wcnss_wlan_crypto_free_ablkcipher(void *tfm) static inline int req_riva_power_on_lock(char *driver_name) { - return 0; + return 0; } static inline int free_riva_power_on_lock(char *driver_name) { - return 0; + return 0; } #ifdef CONFIG_WCNSS_MEM_PRE_ALLOC static inline void *wcnss_prealloc_get(size_t size) { - return NULL; + return NULL; } static inline int wcnss_prealloc_put(void *ptr) { - return 0; + return 0; } #endif diff --git a/CORE/VOSS/inc/wlan_hdd_misc.h b/CORE/VOSS/inc/wlan_hdd_misc.h index 55dee386489d..b418ff5b682b 100644 --- a/CORE/VOSS/inc/wlan_hdd_misc.h +++ b/CORE/VOSS/inc/wlan_hdd_misc.h @@ -25,22 +25,35 @@ * to the Linux Foundation. */ + #ifndef WLAN_HDD_MISC_H #define WLAN_HDD_MISC_H #ifdef MSM_PLATFORM #ifdef QC_WLAN_CHIPSET_QCA_CLD +#ifdef QCA_WIFI_2_0 #define WLAN_INI_FILE "wlan/qca_cld/WCNSS_qcom_cfg.ini" #define WLAN_CFG_FILE "wlan/qca_cld/WCNSS_cfg.dat" #define WLAN_FW_FILE "" #define WLAN_NV_FILE "wlan/qca_cld/WCNSS_qcom_wlan_nv.bin" +#define WLAN_DICT_FILE "wlan/qca_cld/WCNSS_qcom_wlan_dictionary.dat" #define WLAN_COUNTRY_INFO_FILE "wlan/qca_cld/WCNSS_wlan_country_info.dat" #define WLAN_HO_CFG_FILE "wlan/qca_cld/WCNSS_wlan_ho_config" #else +#define WLAN_INI_FILE "wlan/prima/WCNSS_qcom_cfg.ini" +#define WLAN_CFG_FILE "wlan/prima/WCNSS_cfg.dat" +#define WLAN_FW_FILE "" +#define WLAN_NV_FILE "wlan/prima/WCNSS_qcom_wlan_nv.bin" +#define WLAN_DICT_FILE "wlan/prima/WCNSS_qcom_wlan_dictionary.dat" +#define WLAN_COUNTRY_INFO_FILE "wlan/prima/WCNSS_wlan_country_info.dat" +#define WLAN_HO_CFG_FILE "wlan/prima/WCNSS_wlan_ho_config" +#endif // QCA_WIFI_2_0 +#else #define WLAN_INI_FILE "wlan/volans/WCN1314_qcom_cfg.ini" #define WLAN_CFG_FILE "wlan/volans/WCN1314_cfg.dat" #define WLAN_FW_FILE "wlan/volans/WCN1314_qcom_fw.bin" #define WLAN_NV_FILE "wlan/volans/WCN1314_qcom_wlan_nv.bin" +#define WLAN_DICT_FILE "" #define WLAN_COUNTRY_INFO_FILE "wlan/volans/WCN1314_wlan_country_info.dat" #define WLAN_HO_CFG_FILE "wlan/volans/WCN1314_wlan_ho_config" #endif // ANI_CHIPSET @@ -49,6 +62,7 @@ #define WLAN_CFG_FILE "wlan/cfg.dat" #define WLAN_FW_FILE "wlan/qcom_fw.bin" #define WLAN_NV_FILE "wlan/qcom_wlan_nv.bin" +#define WLAN_DICT_FILE "" #define WLAN_COUNTRY_INFO_FILE "wlan/wlan_country_info.dat" #define WLAN_HO_CFG_FILE "wlan/wlan_ho_config" #endif // MSM_PLATFORM diff --git a/CORE/VOSS/src/vos_api.c b/CORE/VOSS/src/vos_api.c index 032614e74580..1d14be1ea0b5 100644 --- a/CORE/VOSS/src/vos_api.c +++ b/CORE/VOSS/src/vos_api.c @@ -107,6 +107,9 @@ /* Approximate amount of time to wait for WDA to stop WDI */ #define VOS_WDA_STOP_TIMEOUT WDA_STOP_TIMEOUT +/* Approximate amount of time to wait for WDA to issue a DUMP req */ +#define VOS_WDA_RESP_TIMEOUT WDA_STOP_TIMEOUT + /*--------------------------------------------------------------------------- * Data definitions * ------------------------------------------------------------------------*/ @@ -344,9 +347,9 @@ VOS_STATUS vos_open( v_CONTEXT_t *pVosContext, v_SIZE_t hddContextSize ) /* Initialize BMI and Download firmware */ if (bmi_download_firmware(scn)) { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, - "%s: BMI failed to download target", __func__); - goto err_bmi_close; + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, + "%s: BMI failed to download target", __func__); + goto err_bmi_close; } htcInfo.pContext = gpVosContext->pHIFContext; htcInfo.TargetFailure = ol_target_failure; @@ -357,8 +360,8 @@ VOS_STATUS vos_open( v_CONTEXT_t *pVosContext, v_SIZE_t hddContextSize ) /* Create HTC */ gpVosContext->htc_ctx = HTCCreate(htcInfo.pContext, &htcInfo, adf_ctx); if (!gpVosContext->htc_ctx) { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, - "%s: Failed to Create HTC", __func__); + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, + "%s: Failed to Create HTC", __func__); #ifndef QCA_WIFI_ISOC goto err_bmi_close; #endif @@ -367,9 +370,9 @@ VOS_STATUS vos_open( v_CONTEXT_t *pVosContext, v_SIZE_t hddContextSize ) #ifndef QCA_WIFI_ISOC if (bmi_done(vos_get_context(VOS_MODULE_ID_HIF, gpVosContext))) { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, - "%s: Failed to complete BMI phase", __func__); - goto err_htc_close; + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, + "%s: Failed to complete BMI phase", __func__); + goto err_htc_close; } #endif #endif /* #ifdef QCA_WIFI_2_0 */ @@ -388,10 +391,11 @@ VOS_STATUS vos_open( v_CONTEXT_t *pVosContext, v_SIZE_t hddContextSize ) macOpenParms.driverType = eDRIVER_TYPE_PRODUCTION; macOpenParms.powersaveOffloadEnabled = pHddCtx->cfg_ini->enablePowersaveOffload; - macOpenParms.wowEnable = pHddCtx->cfg_ini->wowEnable; + macOpenParms.wowEnable = pHddCtx->cfg_ini->wowEnable; macOpenParms.maxWoWFilters = pHddCtx->cfg_ini->maxWoWFilters; vStatus = WDA_open( gpVosContext, gpVosContext->pHDDContext, -#ifndef QCA_WIFI_ISOC +#if defined (QCA_WIFI_2_0) && \ + !defined (QCA_WIFI_ISOC) hdd_update_tgt_cfg, #else NULL, @@ -447,7 +451,7 @@ VOS_STATUS vos_open( v_CONTEXT_t *pVosContext, v_SIZE_t hddContextSize ) goto err_packet_close; } - +#ifndef CONFIG_ENABLE_LINUX_REG /* initialize the NV module */ vStatus = vos_nv_open(); if (!VOS_IS_STATUS_SUCCESS(vStatus)) @@ -457,6 +461,7 @@ VOS_STATUS vos_open( v_CONTEXT_t *pVosContext, v_SIZE_t hddContextSize ) "%s: Failed to initialize the NV module", __func__); goto err_sys_close; } +#endif /* If we arrive here, both threads dispacthing messages correctly */ @@ -477,10 +482,6 @@ VOS_STATUS vos_open( v_CONTEXT_t *pVosContext, v_SIZE_t hddContextSize ) VOS_ASSERT(0); goto err_nv_close; } -/* call crda before sme_Open which will read NV and store the default country code */ - wlan_hdd_get_crda_regd_entry( - ((hdd_context_t*)(gpVosContext->pHDDContext))->wiphy, - ((hdd_context_t*)(gpVosContext->pHDDContext))->cfg_ini); /* Now proceed to open the SME */ vStatus = sme_Open(gpVosContext->pMACContext); @@ -522,9 +523,13 @@ err_mac_close: macClose(gpVosContext->pMACContext); err_nv_close: + +#ifndef CONFIG_ENABLE_LINUX_REG vos_nv_close(); - -err_sys_close: + +err_sys_close: +#endif + sysClose(gpVosContext); err_packet_close: @@ -551,7 +556,7 @@ err_bmi_close: #endif /* #ifndef QCA_WIFI_ISOC */ #endif /* #ifdef QCA_WIFI_2_0 */ -err_sched_close: +err_sched_close: vos_sched_close(gpVosContext); @@ -651,6 +656,10 @@ VOS_STATUS vos_preStart( v_CONTEXT_t vosContext ) VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: WDA_preStart reporting other error", __func__); } + VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + "%s: Test MC thread by posting a probe message to SYS", __func__); + wlan_sys_probe(); + macStop(gpVosContext->pMACContext, HAL_STOP_TYPE_SYS_DEEP_SLEEP); ccmStop(gpVosContext->pMACContext); VOS_ASSERT( 0 ); @@ -790,6 +799,10 @@ VOS_STATUS vos_start( v_CONTEXT_t vosContext ) } VOS_ASSERT(0); vos_event_reset( &(gpVosContext->wdaCompleteEvent) ); + if (vos_is_logp_in_progress(VOS_MODULE_ID_VOSS, NULL)) + { + VOS_BUG(0); + } WDA_setNeedShutdown(vosContext); return VOS_STATUS_E_FAILURE; } @@ -856,7 +869,7 @@ VOS_STATUS vos_start( v_CONTEXT_t vosContext ) err_sme_stop: - sme_Stop(pVosContext->pMACContext, TRUE); + sme_Stop(pVosContext->pMACContext, HAL_STOP_TYPE_SYS_RESET); err_mac_stop: macStop( pVosContext->pMACContext, HAL_STOP_TYPE_SYS_RESET ); @@ -934,6 +947,9 @@ VOS_STATUS vos_stop( v_CONTEXT_t vosContext ) VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: WDA_stop reporting other error", __func__ ); } + VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + "%s: Test MC thread by posting a probe message to SYS", __func__); + wlan_sys_probe(); WDA_setNeedShutdown(vosContext); } } @@ -1006,6 +1022,7 @@ VOS_STATUS vos_close( v_CONTEXT_t vosContext ) ((pVosContextType)vosContext)->pMACContext = NULL; +#ifndef CONFIG_ENABLE_LINUX_REG vosStatus = vos_nv_close(); if (!VOS_IS_STATUS_SUCCESS(vosStatus)) { @@ -1013,7 +1030,7 @@ VOS_STATUS vos_close( v_CONTEXT_t vosContext ) "%s: Failed to close NV", __func__); VOS_ASSERT( VOS_IS_STATUS_SUCCESS( vosStatus ) ); } - +#endif vosStatus = sysClose( vosContext ); if (!VOS_IS_STATUS_SUCCESS(vosStatus)) @@ -1164,6 +1181,7 @@ v_VOID_t* vos_get_context( VOS_MODULE_ID moduleId, case VOS_MODULE_ID_SME: case VOS_MODULE_ID_PE: + case VOS_MODULE_ID_PMC: { /* ** In all these cases, we just return the MAC Context @@ -1191,15 +1209,15 @@ v_VOID_t* vos_get_context( VOS_MODULE_ID moduleId, #ifndef QCA_WIFI_ISOC case VOS_MODULE_ID_HIF: { - pModContext = gpVosContext->pHIFContext; - break; + pModContext = gpVosContext->pHIFContext; + break; } #endif case VOS_MODULE_ID_HTC: { - pModContext = gpVosContext->htc_ctx; - break; + pModContext = gpVosContext->htc_ctx; + break; } case VOS_MODULE_ID_ADF: @@ -1210,16 +1228,16 @@ v_VOID_t* vos_get_context( VOS_MODULE_ID moduleId, case VOS_MODULE_ID_TXRX: { - pModContext = gpVosContext->pdev_txrx_ctx; - break; + pModContext = gpVosContext->pdev_txrx_ctx; + break; } case VOS_MODULE_ID_CFG: { - pModContext = gpVosContext->cfg_ctx; + pModContext = gpVosContext->cfg_ctx; break; } -#endif /* #ifdef QCA_WIFI_2_0 */ +#endif /* #ifdef QCA_WIFI_2_0 */ default: { @@ -1320,6 +1338,31 @@ void vos_set_load_unload_in_progress(VOS_MODULE_ID moduleId, v_U8_t value) gpVosContext->isLoadUnloadInProgress = value; } +v_U8_t vos_is_reinit_in_progress(VOS_MODULE_ID moduleId, v_VOID_t *moduleContext) +{ + if (gpVosContext == NULL) + { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + "%s: global voss context is NULL", __func__); + return 1; + } + + return gpVosContext->isReInitInProgress; +} + +void vos_set_reinit_in_progress(VOS_MODULE_ID moduleId, v_U8_t value) +{ + if (gpVosContext == NULL) + { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + "%s: global voss context is NULL", __func__); + return; + } + + gpVosContext->isReInitInProgress = value; +} + + /**--------------------------------------------------------------------------- \brief vos_alloc_context() - allocate a context within the VOSS global Context @@ -1404,6 +1447,7 @@ VOS_STATUS vos_alloc_context( v_VOID_t *pVosContext, VOS_MODULE_ID moduleID, } case VOS_MODULE_ID_SME: case VOS_MODULE_ID_PE: + case VOS_MODULE_ID_PMC: case VOS_MODULE_ID_HDD: case VOS_MODULE_ID_HDD_SOFTAP: default: @@ -1529,6 +1573,7 @@ VOS_STATUS vos_free_context( v_VOID_t *pVosContext, VOS_MODULE_ID moduleID, case VOS_MODULE_ID_HDD: case VOS_MODULE_ID_SME: case VOS_MODULE_ID_PE: + case VOS_MODULE_ID_PMC: case VOS_MODULE_ID_HDD_SOFTAP: default: { @@ -2342,6 +2387,53 @@ VOS_STATUS vos_wlanRestart(void) return vstatus; } + +/** + @brief vos_fwDumpReq() + + This function is called to issue dump commands to Firmware + + @param + cmd - Command No. to execute + arg1 - argument 1 to cmd + arg2 - argument 2 to cmd + arg3 - argument 3 to cmd + arg4 - argument 4 to cmd + @return + NONE +*/ +v_VOID_t vos_fwDumpReq(tANI_U32 cmd, tANI_U32 arg1, tANI_U32 arg2, + tANI_U32 arg3, tANI_U32 arg4) +{ + VOS_STATUS vStatus = VOS_STATUS_SUCCESS; + + /* Reset wda wait event */ + vos_event_reset(&gpVosContext->wdaCompleteEvent); + + WDA_HALDumpCmdReq(NULL, cmd, arg1, arg2, arg3, arg4, NULL); + + /* Need to update time out of complete */ + vStatus = vos_wait_single_event(&gpVosContext->wdaCompleteEvent, + VOS_WDA_RESP_TIMEOUT ); + + if (vStatus != VOS_STATUS_SUCCESS) + { + if (vStatus == VOS_STATUS_E_TIMEOUT) + { + VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + "%s: Timeout occurred before WDA HAL DUMP complete\n", __func__); + } + else + { + VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + "%s: reporting other error", __func__); + } + } + + return; + +} + VOS_STATUS vos_get_vdev_types(tVOS_CON_MODE mode, tANI_U32 *type, tANI_U32 *sub_type) { diff --git a/CORE/VOSS/src/vos_diag.c b/CORE/VOSS/src/vos_diag.c index 1108f5be6032..153974c1108d 100644 --- a/CORE/VOSS/src/vos_diag.c +++ b/CORE/VOSS/src/vos_diag.c @@ -127,7 +127,7 @@ void vos_log_submit(v_VOID_t *plog_hdr_ptr) tAniHdr *wmsg = NULL; v_U8_t *pBuf; - hdd_context_t *pHddCtx; + struct hdd_context_s *pHddCtx; v_CONTEXT_t pVosContext= NULL; v_U16_t data_len; v_U16_t total_len; @@ -139,6 +139,14 @@ void vos_log_submit(v_VOID_t *plog_hdr_ptr) /*Get the Hdd Context */ pHddCtx = ((VosContextType*)(pVosContext))->pHDDContext; +#ifdef WLAN_KD_READY_NOTIFIER + /* NL is not ready yet, WLAN KO started first */ + if ((pHddCtx->kd_nl_init) && (!pHddCtx->ptt_pid)) + { + nl_srv_nl_ready_indication(); + } +#endif /* WLAN_KD_READY_NOTIFIER */ + /* Send the log data to the ptt app only if it is registered with the wlan driver*/ if(pHddCtx->ptt_pid) { @@ -173,8 +181,9 @@ void vos_log_submit(v_VOID_t *plog_hdr_ptr) if(pHddCtx->ptt_pid) { if( ptt_sock_send_msg_to_app(wmsg, 0, ANI_NL_MSG_PUMAC, pHddCtx->ptt_pid) < 0) { - - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, ("Ptt Socket error sending message to the app!!\n")); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + ("Ptt Socket error sending message to the app!!\n")); + vos_mem_free((v_VOID_t *)wmsg); return; } @@ -202,7 +211,7 @@ void vos_event_report_payload(v_U16_t event_Id, v_U16_t length, v_VOID_t *pPaylo tAniHdr *wmsg = NULL; v_U8_t *pBuf; - hdd_context_t *pHddCtx; + struct hdd_context_s *pHddCtx; v_CONTEXT_t pVosContext= NULL; event_report_t *pEvent_report; v_U16_t total_len; @@ -213,6 +222,13 @@ void vos_event_report_payload(v_U16_t event_Id, v_U16_t length, v_VOID_t *pPaylo /*Get the Hdd Context */ pHddCtx = ((VosContextType*)(pVosContext))->pHDDContext; +#ifdef WLAN_KD_READY_NOTIFIER + /* NL is not ready yet, WLAN KO started first */ + if ((pHddCtx->kd_nl_init) && (!pHddCtx->ptt_pid)) + { + nl_srv_nl_ready_indication(); + } +#endif /* WLAN_KD_READY_NOTIFIER */ /* Send the log data to the ptt app only if it is registered with the wlan driver*/ if(pHddCtx->ptt_pid) @@ -242,8 +258,9 @@ void vos_event_report_payload(v_U16_t event_Id, v_U16_t length, v_VOID_t *pPaylo memcpy(pBuf, pPayload,length); if( ptt_sock_send_msg_to_app(wmsg, 0, ANI_NL_MSG_PUMAC, pHddCtx->ptt_pid) < 0) { - - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, ("Ptt Socket error sending message to the app!!\n")); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + ("Ptt Socket error sending message to the app!!\n")); + vos_mem_free((v_VOID_t*)wmsg); return; } diff --git a/CORE/VOSS/src/vos_getBin.c b/CORE/VOSS/src/vos_getBin.c index 174012120c64..7e73cea77091 100644 --- a/CORE/VOSS/src/vos_getBin.c +++ b/CORE/VOSS/src/vos_getBin.c @@ -92,6 +92,9 @@ VOS_STATUS vos_get_binary_blob( VOS_BINARY_ID binaryId, case VOS_BINARY_ID_HO_CONFIG: pFileName = WLAN_HO_CFG_FILE; break; + case VOS_BINARY_ID_DICT_CONFIG: + pFileName = WLAN_DICT_FILE; + break; default: VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "Invalid binaryID"); return VosSts; diff --git a/CORE/VOSS/src/vos_memory.c b/CORE/VOSS/src/vos_memory.c index 098e414675a5..48cf07f9b5b7 100644 --- a/CORE/VOSS/src/vos_memory.c +++ b/CORE/VOSS/src/vos_memory.c @@ -25,32 +25,32 @@ * to the Linux Foundation. */ + /*=========================================================================== @file vos_memory.c @brief Virtual Operating System Services Memory API - Copyright (c) 2008 Qualcomm Technologies, Inc. All Rights Reserved. Qualcomm Technologies Confidential and Proprietary ===========================================================================*/ -/*=========================================================================== - - EDIT HISTORY FOR FILE - - - This section contains comments describing changes made to the module. - Notice that changes are listed in reverse chronological order. - - - $Header:$ $DateTime: $ $Author: $ - - - when who what, where, why +/*=========================================================================== + + EDIT HISTORY FOR FILE + + + This section contains comments describing changes made to the module. + Notice that changes are listed in reverse chronological order. + + + $Header:$ $DateTime: $ $Author: $ + + + when who what, where, why -------- --- -------------------------------------------------------- - + ===========================================================================*/ /*--------------------------------------------------------------------------- @@ -116,6 +116,10 @@ void vos_mem_clean() VOS_STATUS vosStatus; struct s_vos_mem_struct* memStruct; + char* prev_mleak_file = ""; + unsigned int prev_mleak_lineNum = 0; + unsigned int prev_mleak_sz = 0; + unsigned int mleak_cnt = 0; VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: List is not Empty. listSize %d ", __func__, (int)listSize); @@ -128,13 +132,41 @@ void vos_mem_clean() if(VOS_STATUS_SUCCESS == vosStatus) { memStruct = (struct s_vos_mem_struct*)pNode; - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, - "Memory Leak@ File %s, @Line %d, size %d", - memStruct->fileName, (int)memStruct->lineNum, memStruct->size); + + /* Take care to log only once multiple memory leaks from + * the same place */ + if(strcmp(prev_mleak_file, memStruct->fileName) || + (prev_mleak_lineNum != memStruct->lineNum) || + (prev_mleak_sz != memStruct->size)) + { + if(mleak_cnt != 0) + { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, + "%d Time Memory Leak@ File %s, @Line %d, size %d", + mleak_cnt, prev_mleak_file, prev_mleak_lineNum, + prev_mleak_sz); + } + prev_mleak_file = memStruct->fileName; + prev_mleak_lineNum = memStruct->lineNum; + prev_mleak_sz = memStruct->size; + mleak_cnt = 0; + } + mleak_cnt++; + kfree((v_VOID_t*)memStruct); } }while(vosStatus == VOS_STATUS_SUCCESS); + /* Print last memory leak from the module */ + if(mleak_cnt) + { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, + "%d Time memory Leak@ File %s, @Line %d, size %d", + mleak_cnt, prev_mleak_file, prev_mleak_lineNum, + prev_mleak_sz); + } + + #ifdef CONFIG_HALT_KMEMLEAK BUG_ON(0); #endif @@ -159,10 +191,11 @@ v_VOID_t * vos_mem_malloc_debug( v_SIZE_t size, char* fileName, v_U32_t lineNum) "%s: called with arg > 1024K; passed in %d !!!", __func__,size); return NULL; } + if (in_interrupt()) { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, - "%s is being called in interrupt context, using GPF_ATOMIC.", __func__); + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s is being" + "called from interrupt context, using GPF_ATOMIC.", __func__); return kmalloc(size, GFP_ATOMIC); } diff --git a/CORE/VOSS/src/vos_nvitem.c b/CORE/VOSS/src/vos_nvitem.c index 2b80ab3022b7..84531890ebbd 100644 --- a/CORE/VOSS/src/vos_nvitem.c +++ b/CORE/VOSS/src/vos_nvitem.c @@ -49,13 +49,34 @@ #include "vos_api.h" #include "wlan_hdd_misc.h" #include "vos_sched.h" +#include "sme_Api.h" +#include "wlan_nv_parser.h" #include "wlan_hdd_main.h" #include + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,9,0)) +#define IEEE80211_CHAN_NO_80MHZ 1<<7 +#endif + +#ifdef CONFIG_ENABLE_LINUX_REG + +static v_REGDOMAIN_t cur_reg_domain = REGDOMAIN_COUNT; +static char linux_reg_cc[2] = {0, 0}; +static v_REGDOMAIN_t temp_reg_domain = REGDOMAIN_COUNT; + +#else + +/* Cant access pAdapter in this file so defining a new variable to wait when changing country*/ +static struct completion change_country_code; + +#endif + static char crda_alpha2[2] = {0, 0}; /* country code from initial crda req */ static char run_time_alpha2[2] = {0, 0}; /* country code from none-default country req */ static v_BOOL_t crda_regulatory_entry_valid = VOS_FALSE; static v_BOOL_t crda_regulatory_run_time_entry_valid = VOS_FALSE; + /*---------------------------------------------------------------------------- * Preprocessor Definitions and Constants * -------------------------------------------------------------------------*/ @@ -66,6 +87,7 @@ static v_BOOL_t crda_regulatory_run_time_entry_valid = VOS_FALSE; #define VOS_HARD_CODED_MAC {0, 0x0a, 0xf5, 4, 5, 6} #define DEFAULT_NV_VALIDITY_BITMAP 0xFFFFFFFF +#define MAGIC_NUMBER 0xCAFEBABE /*---------------------------------------------------------------------------- * Type Declarations @@ -95,17 +117,176 @@ typedef struct // cache of country info table; // this is re-initialized from data on binary file // loaded on driver initialization if available + +#ifdef CONFIG_ENABLE_LINUX_REG + +static CountryInfoTable_t countryInfoTable = +{ + /* the first entry in the table is always the world domain */ + 138, + { + {REGDOMAIN_WORLD, {'0', '0'}}, // WORLD DOMAIN + {REGDOMAIN_FCC, {'A', 'D'}}, // ANDORRA + {REGDOMAIN_ETSI, {'A', 'E'}}, //UAE + {REGDOMAIN_ETSI, {'A', 'L'}}, //ALBANIA + {REGDOMAIN_ETSI, {'A', 'M'}}, //ARMENIA + {REGDOMAIN_ETSI, {'A', 'N'}}, //NETHERLANDS ANTILLES + {REGDOMAIN_FCC, {'A', 'R'}}, //ARGENTINA + {REGDOMAIN_FCC, {'A', 'S'}}, //AMERICAN SOMOA + {REGDOMAIN_ETSI, {'A', 'T'}}, //AUSTRIA + {REGDOMAIN_FCC, {'A', 'U'}}, //AUSTRALIA + {REGDOMAIN_ETSI , {'A', 'W'}}, //ARUBA + {REGDOMAIN_ETSI, {'A', 'Z'}}, //AZERBAIJAN + {REGDOMAIN_ETSI, {'B', 'A'}}, //BOSNIA AND HERZEGOVINA + {REGDOMAIN_FCC, {'B', 'B'}}, //BARBADOS + {REGDOMAIN_ETSI, {'B', 'D'}}, //BANGLADESH + {REGDOMAIN_ETSI, { 'B', 'E'}}, //BELGIUM + {REGDOMAIN_ETSI, {'B', 'G'}}, //BULGARIA + {REGDOMAIN_ETSI, {'B', 'H'}}, //BAHRAIN + {REGDOMAIN_ETSI, {'B', 'L'}}, // + {REGDOMAIN_FCC, {'B', 'M'}}, //BERMUDA + {REGDOMAIN_ETSI, {'B', 'N'}}, //BRUNEI DARUSSALAM + {REGDOMAIN_ETSI, {'B', 'O'}}, //BOLIVIA + {REGDOMAIN_ETSI, {'B', 'R'}}, //BRAZIL + {REGDOMAIN_FCC, {'B', 'S'}}, //BAHAMAS + {REGDOMAIN_ETSI, {'B', 'Y'}}, //BELARUS + {REGDOMAIN_ETSI, {'B', 'Z'}}, //BELIZE + {REGDOMAIN_FCC, {'C', 'A'}}, //CANADA + {REGDOMAIN_ETSI, {'C', 'H'}}, //SWITZERLAND + {REGDOMAIN_ETSI, {'C', 'L'}}, //CHILE + {REGDOMAIN_FCC, {'C', 'N'}}, //CHINA + {REGDOMAIN_FCC, {'C', 'O'}}, //COLOMBIA + {REGDOMAIN_ETSI, {'C', 'R'}}, //COSTA RICA + {REGDOMAIN_ETSI, {'C', 'S'}}, + {REGDOMAIN_ETSI, {'C', 'Y'}}, //CYPRUS + {REGDOMAIN_ETSI, {'C', 'Z'}}, //CZECH REPUBLIC + {REGDOMAIN_ETSI, {'D', 'E'}}, //GERMANY + {REGDOMAIN_ETSI, {'D', 'K'}}, //DENMARK + {REGDOMAIN_FCC, {'D', 'O'}}, //DOMINICAN REPUBLIC + {REGDOMAIN_ETSI, {'D', 'Z'}}, //ALGERIA + {REGDOMAIN_ETSI, {'E', 'C'}}, //ECUADOR + {REGDOMAIN_ETSI, {'E', 'E'}}, //ESTONIA + {REGDOMAIN_ETSI, {'E', 'G'}}, //EGYPT + {REGDOMAIN_ETSI, {'E', 'S'}}, //SPAIN + {REGDOMAIN_ETSI, {'F', 'I'}}, //FINLAND + {REGDOMAIN_ETSI, {'F', 'R'}}, //FRANCE + {REGDOMAIN_ETSI, {'G', 'B'}}, //UNITED KINGDOM + {REGDOMAIN_FCC, {'G', 'D'}}, //GRENADA + {REGDOMAIN_ETSI, {'G', 'E'}}, //GEORGIA + {REGDOMAIN_ETSI, {'G', 'F'}}, //FRENCH GUIANA + {REGDOMAIN_ETSI, {'G', 'L'}}, //GREENLAND + {REGDOMAIN_ETSI, {'G', 'P'}}, //GUADELOUPE + {REGDOMAIN_ETSI, {'G', 'R'}}, //GREECE + {REGDOMAIN_FCC, {'G', 'T'}}, //GUATEMALA + {REGDOMAIN_FCC, {'G', 'U'}}, //GUAM + {REGDOMAIN_ETSI, {'H', 'U'}}, //HUNGARY + {REGDOMAIN_FCC, {'I', 'D'}}, //INDONESIA + {REGDOMAIN_ETSI, {'I', 'E'}}, //IRELAND + {REGDOMAIN_ETSI, {'I', 'L'}}, //ISRAEL + {REGDOMAIN_ETSI, {'I', 'N'}}, //INDIA + {REGDOMAIN_ETSI, {'I', 'R'}}, //IRAN, ISLAMIC REPUBLIC OF + {REGDOMAIN_ETSI, {'I', 'S'}}, //ICELNAD + {REGDOMAIN_ETSI, {'I', 'T'}}, //ITALY + {REGDOMAIN_FCC, {'J', 'M'}}, //JAMAICA + {REGDOMAIN_JAPAN, {'J', 'P'}}, //JAPAN + {REGDOMAIN_ETSI, {'J', 'O'}}, //JORDAN + {REGDOMAIN_ETSI, {'K', 'E'}}, //KENYA + {REGDOMAIN_ETSI, {'K', 'H'}}, //CAMBODIA + {REGDOMAIN_ETSI, {'K', 'P'}}, //KOREA, DEMOCRATIC PEOPLE's REPUBLIC OF + {REGDOMAIN_ETSI, {'K', 'R'}}, //KOREA, REPUBLIC OF + {REGDOMAIN_ETSI, {'K', 'W'}}, //KUWAIT + {REGDOMAIN_ETSI, {'K', 'Z'}}, //KAZAKHSTAN + {REGDOMAIN_ETSI, {'L', 'B'}}, //LEBANON + {REGDOMAIN_ETSI, {'L', 'I'}}, //LIECHTENSTEIN + {REGDOMAIN_ETSI, {'L', 'K'}}, //SRI-LANKA + {REGDOMAIN_ETSI, {'L', 'T'}}, //LITHUANIA + {REGDOMAIN_ETSI, {'L', 'U'}}, //LUXEMBOURG + {REGDOMAIN_ETSI, {'L','V'}}, //LATVIA + {REGDOMAIN_ETSI, {'M', 'A'}}, //MOROCCO + {REGDOMAIN_ETSI, {'M', 'C'}}, //MONACO + {REGDOMAIN_ETSI, {'M', 'K'}}, //MACEDONIA, THE FORMER YUGOSLAV REPUBLIC OF + {REGDOMAIN_FCC, {'M','N'}}, //MONGOLIA + {REGDOMAIN_FCC, {'M', 'O'}}, //MACAO + {REGDOMAIN_FCC, {'M', 'P'}}, //NORTHERN MARIANA ISLANDS + {REGDOMAIN_ETSI, {'M', 'Q'}}, //MARTINIQUE + {REGDOMAIN_FCC, {'M', 'T'}}, //MALTA + {REGDOMAIN_ETSI, {'M', 'U'}}, //MAURITIUS + {REGDOMAIN_ETSI, {'M', 'W'}}, //MALAWI + {REGDOMAIN_FCC, {'M', 'X'}}, //MEXICO + {REGDOMAIN_ETSI, {'M', 'Y'}}, //MALAYSIA + {REGDOMAIN_ETSI, {'N', 'G'}}, //NIGERIA + {REGDOMAIN_FCC, {'N', 'I'}}, //NICARAGUA + {REGDOMAIN_ETSI, {'N', 'L'}}, //NETHERLANDS + {REGDOMAIN_ETSI, {'N', 'O'}}, //NORWAY + {REGDOMAIN_ETSI, {'N', 'P'}}, //NEPAL + {REGDOMAIN_FCC, {'N', 'Z'}}, //NEW-ZEALAND + {REGDOMAIN_FCC, {'O', 'M'}}, //OMAN + {REGDOMAIN_FCC, {'P', 'A'}}, //PANAMA + {REGDOMAIN_ETSI, {'P', 'E'}}, //PERU + {REGDOMAIN_ETSI, {'P', 'F'}}, //FRENCH POLYNESIA + {REGDOMAIN_ETSI, {'P', 'G'}}, //PAPUA NEW GUINEA + {REGDOMAIN_FCC, {'P', 'H'}}, //PHILIPPINES + {REGDOMAIN_ETSI, {'P', 'K'}}, //PAKISTAN + {REGDOMAIN_ETSI, {'P', 'L'}}, //POLAND + {REGDOMAIN_FCC, {'P', 'R'}}, //PUERTO RICO + {REGDOMAIN_FCC, {'P', 'S'}}, //PALESTINIAN TERRITORY, OCCUPIED + {REGDOMAIN_ETSI, {'P', 'T'}}, //PORTUGAL + {REGDOMAIN_FCC, {'P', 'Y'}}, //PARAGUAY + {REGDOMAIN_ETSI, {'Q', 'A'}}, //QATAR + {REGDOMAIN_ETSI, {'R', 'E'}}, //REUNION + {REGDOMAIN_ETSI, {'R', 'O'}}, //ROMAINIA + {REGDOMAIN_ETSI, {'R', 'S'}}, //SERBIA + {REGDOMAIN_ETSI, {'R', 'U'}}, //RUSSIA + {REGDOMAIN_FCC, {'R', 'W'}}, //RWANDA + {REGDOMAIN_ETSI, {'S', 'A'}}, //SAUDI ARABIA + {REGDOMAIN_ETSI, {'S', 'E'}}, //SWEDEN + {REGDOMAIN_ETSI, {'S', 'G'}}, //SINGAPORE + {REGDOMAIN_ETSI, {'S', 'I'}}, //SLOVENNIA + {REGDOMAIN_ETSI, {'S', 'K'}}, //SLOVAKIA + {REGDOMAIN_ETSI, {'S', 'V'}}, //EL SALVADOR + {REGDOMAIN_ETSI, {'S', 'Y'}}, //SYRIAN ARAB REPUBLIC + {REGDOMAIN_ETSI, {'T', 'H'}}, //THAILAND + {REGDOMAIN_ETSI, {'T', 'N'}}, //TUNISIA + {REGDOMAIN_ETSI, {'T', 'R'}}, //TURKEY + {REGDOMAIN_ETSI, {'T', 'T'}}, //TRINIDAD AND TOBAGO + {REGDOMAIN_FCC, {'T', 'W'}}, //TAIWAN, PRIVINCE OF CHINA + {REGDOMAIN_FCC, {'T', 'Z'}}, //TANZANIA, UNITED REPUBLIC OF + {REGDOMAIN_ETSI, {'U', 'A'}}, //UKRAINE + {REGDOMAIN_ETSI, {'U', 'G'}}, //UGANDA + {REGDOMAIN_FCC, {'U', 'S'}}, //USA + {REGDOMAIN_ETSI, {'U', 'Y'}}, //URUGUAY + {REGDOMAIN_FCC, {'U', 'Z'}}, //UZBEKISTAN + {REGDOMAIN_ETSI, {'V', 'E'}}, //VENEZUELA + {REGDOMAIN_FCC, {'V', 'I'}}, //VIRGIN ISLANDS, US + {REGDOMAIN_ETSI, {'V', 'N'}}, //VIETNAM + {REGDOMAIN_ETSI, {'Y', 'E'}}, //YEMEN + {REGDOMAIN_ETSI, {'Y', 'T'}}, //MAYOTTE + {REGDOMAIN_ETSI, {'Z', 'A'}}, //SOUTH AFRICA + {REGDOMAIN_ETSI, {'Z', 'W'}}, //ZIMBABWE + } +}; + +#else + +// cache of country info table; +// this is re-initialized from data on binary file +// loaded on driver initialization if available static CountryInfoTable_t countryInfoTable = { 254, { { REGDOMAIN_FCC, {'U', 'S'}}, //USA - must be the first country code { REGDOMAIN_ETSI, {'A', 'D'}}, //ANDORRA +#ifdef FEATURE_CESIUM_PROPRIETARY + { REGDOMAIN_WORLD, {'A', 'E'}}, //UAE + { REGDOMAIN_APAC, {'A', 'F'}}, //AFGHANISTAN +#else { REGDOMAIN_ETSI, {'A', 'E'}}, //UAE { REGDOMAIN_N_AMER_EXC_FCC, {'A', 'F'}}, //AFGHANISTAN +#endif { REGDOMAIN_WORLD, {'A', 'G'}}, //ANTIGUA AND BARBUDA { REGDOMAIN_FCC, {'A', 'I'}}, //ANGUILLA - { REGDOMAIN_NO_5GHZ, {'A', 'L'}}, //ALBANIA + { REGDOMAIN_ETSI, {'A', 'L'}}, //ALBANIA { REGDOMAIN_N_AMER_EXC_FCC, {'A', 'M'}}, //ARMENIA { REGDOMAIN_ETSI, {'A', 'N'}}, //NETHERLANDS ANTILLES { REGDOMAIN_NO_5GHZ, {'A', 'O'}}, //ANGOLA @@ -113,13 +294,17 @@ static CountryInfoTable_t countryInfoTable = { REGDOMAIN_WORLD, {'A', 'R'}}, //ARGENTINA { REGDOMAIN_FCC, {'A', 'S'}}, //AMERICAN SOMOA { REGDOMAIN_ETSI, {'A', 'T'}}, //AUSTRIA - { REGDOMAIN_APAC, {'A', 'U'}}, //AUSTRALIA + { REGDOMAIN_WORLD, {'A', 'U'}}, //AUSTRALIA { REGDOMAIN_ETSI, {'A', 'W'}}, //ARUBA { REGDOMAIN_WORLD, {'A', 'X'}}, //ALAND ISLANDS +#ifdef FEATURE_CESIUM_PROPRIETARY + { REGDOMAIN_WORLD, {'A', 'Z'}}, //AZERBAIJAN +#else { REGDOMAIN_N_AMER_EXC_FCC, {'A', 'Z'}}, //AZERBAIJAN +#endif { REGDOMAIN_ETSI, {'B', 'A'}}, //BOSNIA AND HERZEGOVINA { REGDOMAIN_APAC, {'B', 'B'}}, //BARBADOS - { REGDOMAIN_NO_5GHZ, {'B', 'D'}}, //BANGLADESH + { REGDOMAIN_HI_5GHZ, {'B', 'D'}}, //BANGLADESH { REGDOMAIN_ETSI, {'B', 'E'}}, //BELGIUM { REGDOMAIN_HI_5GHZ, {'B', 'F'}}, //BURKINA FASO { REGDOMAIN_ETSI, {'B', 'G'}}, //BULGARIA @@ -159,10 +344,14 @@ static CountryInfoTable_t countryInfoTable = { REGDOMAIN_ETSI, {'D', 'K'}}, //DENMARK { REGDOMAIN_WORLD, {'D', 'M'}}, //DOMINICA { REGDOMAIN_APAC, {'D', 'O'}}, //DOMINICAN REPUBLIC - { REGDOMAIN_NO_5GHZ, {'D', 'Z'}}, //ALGERIA + { REGDOMAIN_ETSI, {'D', 'Z'}}, //ALGERIA { REGDOMAIN_APAC, {'E', 'C'}}, //ECUADOR { REGDOMAIN_ETSI, {'E', 'E'}}, //ESTONIA +#ifdef FEATURE_CESIUM_PROPRIETARY + { REGDOMAIN_APAC, {'E', 'G'}}, //EGYPT +#else { REGDOMAIN_N_AMER_EXC_FCC, {'E', 'G'}}, //EGYPT +#endif { REGDOMAIN_WORLD, {'E', 'H'}}, //WESTERN SAHARA { REGDOMAIN_NO_5GHZ, {'E', 'R'}}, //ERITREA { REGDOMAIN_ETSI, {'E', 'S'}}, //SPAIN @@ -190,7 +379,7 @@ static CountryInfoTable_t countryInfoTable = { REGDOMAIN_ETSI, {'G', 'R'}}, //GREECE { REGDOMAIN_WORLD, {'G', 'S'}}, //SOUTH GEORGIA AND THE SOUTH SANDWICH ISLANDS { REGDOMAIN_APAC, {'G', 'T'}}, //GUATEMALA - { REGDOMAIN_APAC, {'G', 'U'}}, //GUAM + { REGDOMAIN_FCC, {'G', 'U'}}, //GUAM { REGDOMAIN_NO_5GHZ, {'G', 'W'}}, //GUINEA-BISSAU { REGDOMAIN_HI_5GHZ, {'G', 'Y'}}, //GUYANA { REGDOMAIN_WORLD, {'H', 'K'}}, //HONGKONG @@ -201,11 +390,15 @@ static CountryInfoTable_t countryInfoTable = { REGDOMAIN_ETSI, {'H', 'U'}}, //HUNGARY { REGDOMAIN_HI_5GHZ, {'I', 'D'}}, //INDONESIA { REGDOMAIN_ETSI, {'I', 'E'}}, //IRELAND - { REGDOMAIN_NO_5GHZ, {'I', 'L'}}, //ISRAEL + { REGDOMAIN_N_AMER_EXC_FCC, {'I', 'L'}}, //ISRAEL { REGDOMAIN_WORLD, {'I', 'M'}}, //ISLE OF MAN { REGDOMAIN_APAC, {'I', 'N'}}, //INDIA { REGDOMAIN_WORLD, {'I', 'O'}}, //BRITISH INDIAN OCEAN TERRITORY +#ifdef FEATURE_CESIUM_PROPRIETARY + { REGDOMAIN_ETSI, {'I', 'Q'}}, //IRAQ +#else { REGDOMAIN_NO_5GHZ, {'I', 'Q'}}, //IRAQ +#endif { REGDOMAIN_HI_5GHZ, {'I', 'R'}}, //IRAN, ISLAMIC REPUBLIC OF { REGDOMAIN_ETSI, {'I', 'S'}}, //ICELAND { REGDOMAIN_ETSI, {'I', 'T'}}, //ITALY @@ -216,13 +409,13 @@ static CountryInfoTable_t countryInfoTable = { REGDOMAIN_JAPAN, {'J', '5'}}, //Japan alternate 5 { REGDOMAIN_WORLD, {'J', 'E'}}, //JERSEY { REGDOMAIN_WORLD, {'J', 'M'}}, //JAMAICA - { REGDOMAIN_WORLD, {'J', 'O'}}, //JORDAN + { REGDOMAIN_APAC, {'J', 'O'}}, //JORDAN { REGDOMAIN_JAPAN, {'J', 'P'}}, //JAPAN { REGDOMAIN_KOREA, {'K', '1'}}, //Korea alternate 1 { REGDOMAIN_KOREA, {'K', '2'}}, //Korea alternate 2 { REGDOMAIN_KOREA, {'K', '3'}}, //Korea alternate 3 { REGDOMAIN_KOREA, {'K', '4'}}, //Korea alternate 4 - { REGDOMAIN_HI_5GHZ, {'K', 'E'}}, //KENYA + { REGDOMAIN_APAC, {'K', 'E'}}, //KENYA { REGDOMAIN_NO_5GHZ, {'K', 'G'}}, //KYRGYZSTAN { REGDOMAIN_ETSI, {'K', 'H'}}, //CAMBODIA { REGDOMAIN_WORLD, {'K', 'I'}}, //KIRIBATI @@ -232,9 +425,9 @@ static CountryInfoTable_t countryInfoTable = { REGDOMAIN_KOREA, {'K', 'R'}}, //KOREA, REPUBLIC OF { REGDOMAIN_N_AMER_EXC_FCC, {'K', 'W'}}, //KUWAIT { REGDOMAIN_FCC, {'K', 'Y'}}, //CAYMAN ISLANDS - { REGDOMAIN_NO_5GHZ, {'K', 'Z'}}, //KAZAKHSTAN + { REGDOMAIN_WORLD, {'K', 'Z'}}, //KAZAKHSTAN { REGDOMAIN_WORLD, {'L', 'A'}}, //LAO PEOPLE'S DEMOCRATIC REPUBLIC - { REGDOMAIN_HI_5GHZ, {'L', 'B'}}, //LEBANON + { REGDOMAIN_WORLD, {'L', 'B'}}, //LEBANON { REGDOMAIN_WORLD, {'L', 'C'}}, //SAINT LUCIA { REGDOMAIN_ETSI, {'L', 'I'}}, //LIECHTENSTEIN { REGDOMAIN_WORLD, {'L', 'K'}}, //SRI LANKA @@ -244,8 +437,12 @@ static CountryInfoTable_t countryInfoTable = { REGDOMAIN_ETSI, {'L', 'U'}}, //LUXEMBOURG { REGDOMAIN_ETSI, {'L', 'V'}}, //LATVIA { REGDOMAIN_NO_5GHZ, {'L', 'Y'}}, //LIBYAN ARAB JAMAHIRIYA - { REGDOMAIN_NO_5GHZ, {'M', 'A'}}, //MOROCCO - { REGDOMAIN_N_AMER_EXC_FCC, {'M', 'C'}}, //MONACO +#ifdef FEATURE_CESIUM_PROPRIETARY + { REGDOMAIN_N_AMER_EXC_FCC, {'M', 'A'}}, //MOROCCO +#else + { REGDOMAIN_APAC, {'M', 'A'}}, //MOROCCO +#endif + { REGDOMAIN_ETSI, {'M', 'C'}}, //MONACO { REGDOMAIN_ETSI, {'M', 'D'}}, //MOLDOVA, REPUBLIC OF { REGDOMAIN_ETSI, {'M', 'E'}}, //MONTENEGRO { REGDOMAIN_NO_5GHZ, {'M', 'G'}}, //MADAGASCAR @@ -253,7 +450,7 @@ static CountryInfoTable_t countryInfoTable = { REGDOMAIN_ETSI, {'M', 'K'}}, //MACEDONIA, THE FORMER YUGOSLAV REPUBLIC OF { REGDOMAIN_NO_5GHZ, {'M', 'L'}}, //MALI { REGDOMAIN_WORLD, {'M', 'M'}}, //MYANMAR - { REGDOMAIN_NO_5GHZ, {'M', 'N'}}, //MONGOLIA + { REGDOMAIN_WORLD, {'M', 'N'}}, //MONGOLIA { REGDOMAIN_APAC, {'M', 'O'}}, //MACAO { REGDOMAIN_FCC, {'M', 'P'}}, //NORTHERN MARIANA ISLANDS { REGDOMAIN_ETSI, {'M', 'Q'}}, //MARTINIQUE @@ -274,16 +471,16 @@ static CountryInfoTable_t countryInfoTable = { REGDOMAIN_WORLD, {'N', 'I'}}, //NICARAGUA { REGDOMAIN_ETSI, {'N', 'L'}}, //NETHERLANDS { REGDOMAIN_ETSI, {'N', 'O'}}, //NORWAY - { REGDOMAIN_HI_5GHZ, {'N', 'P'}}, //NEPAL + { REGDOMAIN_APAC, {'N', 'P'}}, //NEPAL { REGDOMAIN_NO_5GHZ, {'N', 'R'}}, //NAURU { REGDOMAIN_WORLD, {'N', 'U'}}, //NIUE { REGDOMAIN_APAC, {'N', 'Z'}}, //NEW ZEALAND - { REGDOMAIN_WORLD, {'O', 'M'}}, //OMAN + { REGDOMAIN_ETSI, {'O', 'M'}}, //OMAN { REGDOMAIN_APAC, {'P', 'A'}}, //PANAMA - { REGDOMAIN_HI_5GHZ, {'P', 'E'}}, //PERU + { REGDOMAIN_WORLD, {'P', 'E'}}, //PERU { REGDOMAIN_ETSI, {'P', 'F'}}, //FRENCH POLYNESIA - { REGDOMAIN_APAC, {'P', 'G'}}, //PAPUA NEW GUINEA - { REGDOMAIN_HI_5GHZ, {'P', 'H'}}, //PHILIPPINES + { REGDOMAIN_WORLD, {'P', 'G'}}, //PAPUA NEW GUINEA + { REGDOMAIN_WORLD, {'P', 'H'}}, //PHILIPPINES { REGDOMAIN_HI_5GHZ, {'P', 'K'}}, //PAKISTAN { REGDOMAIN_ETSI, {'P', 'L'}}, //POLAND { REGDOMAIN_WORLD, {'P', 'M'}}, //SAINT PIERRE AND MIQUELON @@ -297,9 +494,9 @@ static CountryInfoTable_t countryInfoTable = { REGDOMAIN_ETSI, {'R', 'E'}}, //REUNION { REGDOMAIN_ETSI, {'R', 'O'}}, //ROMANIA { REGDOMAIN_ETSI, {'R', 'S'}}, //SERBIA - { REGDOMAIN_HI_5GHZ, {'R', 'U'}}, //RUSSIA - { REGDOMAIN_HI_5GHZ, {'R', 'W'}}, //RWANDA - { REGDOMAIN_APAC, {'S', 'A'}}, //SAUDI ARABIA + { REGDOMAIN_APAC, {'R', 'U'}}, //RUSSIA + { REGDOMAIN_WORLD, {'R', 'W'}}, //RWANDA + { REGDOMAIN_WORLD, {'S', 'A'}}, //SAUDI ARABIA { REGDOMAIN_NO_5GHZ, {'S', 'B'}}, //SOLOMON ISLANDS { REGDOMAIN_NO_5GHZ, {'S', 'C'}}, //SEYCHELLES { REGDOMAIN_WORLD, {'S', 'D'}}, //SUDAN @@ -329,40 +526,54 @@ static CountryInfoTable_t countryInfoTable = { REGDOMAIN_NO_5GHZ, {'T', 'M'}}, //TURKMENISTAN { REGDOMAIN_N_AMER_EXC_FCC, {'T', 'N'}}, //TUNISIA { REGDOMAIN_NO_5GHZ, {'T', 'O'}}, //TONGA - { REGDOMAIN_N_AMER_EXC_FCC, {'T', 'R'}}, //TURKEY + { REGDOMAIN_ETSI, {'T', 'R'}}, //TURKEY { REGDOMAIN_WORLD, {'T', 'T'}}, //TRINIDAD AND TOBAGO { REGDOMAIN_NO_5GHZ, {'T', 'V'}}, //TUVALU - { REGDOMAIN_WORLD, {'T', 'W'}}, //TAIWAN, PROVINCE OF CHINA + { REGDOMAIN_FCC, {'T', 'W'}}, //TAIWAN, PROVINCE OF CHINA { REGDOMAIN_HI_5GHZ, {'T', 'Z'}}, //TANZANIA, UNITED REPUBLIC OF - { REGDOMAIN_NO_5GHZ, {'U', 'A'}}, //UKRAINE - { REGDOMAIN_WORLD, {'U', 'G'}}, //UGANDA + { REGDOMAIN_WORLD, {'U', 'A'}}, //UKRAINE + { REGDOMAIN_KOREA, {'U', 'G'}}, //UGANDA { REGDOMAIN_FCC, {'U', 'M'}}, //UNITED STATES MINOR OUTLYING ISLANDS { REGDOMAIN_WORLD, {'U', 'Y'}}, //URUGUAY - { REGDOMAIN_WORLD, {'U', 'Z'}}, //UZBEKISTAN + { REGDOMAIN_FCC, {'U', 'Z'}}, //UZBEKISTAN { REGDOMAIN_ETSI, {'V', 'A'}}, //HOLY SEE (VATICAN CITY STATE) { REGDOMAIN_WORLD, {'V', 'C'}}, //SAINT VINCENT AND THE GRENADINES { REGDOMAIN_HI_5GHZ, {'V', 'E'}}, //VENEZUELA { REGDOMAIN_ETSI, {'V', 'G'}}, //VIRGIN ISLANDS, BRITISH { REGDOMAIN_FCC, {'V', 'I'}}, //VIRGIN ISLANDS, US - { REGDOMAIN_N_AMER_EXC_FCC, {'V', 'N'}}, //VIET NAM + { REGDOMAIN_FCC, {'V', 'N'}}, //VIET NAM { REGDOMAIN_NO_5GHZ, {'V', 'U'}}, //VANUATU { REGDOMAIN_WORLD, {'W', 'F'}}, //WALLIS AND FUTUNA { REGDOMAIN_N_AMER_EXC_FCC, {'W', 'S'}}, //SOMOA { REGDOMAIN_NO_5GHZ, {'Y', 'E'}}, //YEMEN { REGDOMAIN_ETSI, {'Y', 'T'}}, //MAYOTTE +#ifdef FEATURE_CESIUM_PROPRIETARY + { REGDOMAIN_ETSI, {'Z', 'A'}}, //SOUTH AFRICA +#else { REGDOMAIN_WORLD, {'Z', 'A'}}, //SOUTH AFRICA +#endif { REGDOMAIN_APAC, {'Z', 'M'}}, //ZAMBIA - { REGDOMAIN_NO_5GHZ, {'Z', 'W'}}, //ZIMBABWE + { REGDOMAIN_ETSI, {'Z', 'W'}}, //ZIMBABWE } }; + +#endif + + typedef struct nvEFSTable_s { v_U32_t nvValidityBitmap; sHalNv halnv; } nvEFSTable_t; nvEFSTable_t *gnvEFSTable; -/* EFS Table to send the NV structure to HAL*/ +/* EFS Table to send the NV structure to HAL*/ static nvEFSTable_t *pnvEFSTable; +static v_U8_t *pnvEncodedBuf; +static v_U8_t *pDictFile; +static v_U8_t *pEncodedBuf; +static v_SIZE_t nvReadEncodeBufSize; +static v_SIZE_t nDictionarySize; +static v_U32_t magicNumber; const tRfChannelProps rfChannels[NUM_RF_CHANNELS] = { @@ -471,6 +682,64 @@ VOS_STATUS vos_nv_init(void) return VOS_STATUS_SUCCESS; } +/**------------------------------------------------------------------------ + \brief vos_nv_get_dictionary_data() - get the dictionary data required for + \ tools + \return VOS_STATUS_SUCCESS - dictionary data is read successfully + otherwise - not successful + \sa +-------------------------------------------------------------------------*/ +VOS_STATUS vos_nv_get_dictionary_data(void) +{ + VOS_STATUS vosStatus = VOS_STATUS_E_FAILURE; + + if (MAGIC_NUMBER != magicNumber) + { + return VOS_STATUS_SUCCESS; + } + + nDictionarySize = 0; + + vosStatus = vos_get_binary_blob( VOS_BINARY_ID_DICT_CONFIG, NULL, + &nDictionarySize ); + if (VOS_STATUS_E_NOMEM != vosStatus) + { + VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + "Error obtaining binary size" ); +/// NOTE: +/// We can still work without a dictionary file.. + return VOS_STATUS_SUCCESS; + } + + // malloc a buffer to read in the Configuration binary file. + pDictFile = vos_mem_malloc( nDictionarySize ); + if (NULL == pDictFile) + { + VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + "Unable to allocate memory for the CFG binary [size= %d bytes]", + nDictionarySize ); + vosStatus = VOS_STATUS_E_NOMEM; + goto fail; + } + + /* Get the entire CFG file image... */ + vosStatus = vos_get_binary_blob( VOS_BINARY_ID_DICT_CONFIG, pDictFile, + &nDictionarySize ); + if (!VOS_IS_STATUS_SUCCESS( vosStatus )) + { + VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + "Error: Cannot retrieve CFG file image from vOSS. [size= %d bytes]", + nDictionarySize ); + return VOS_STATUS_SUCCESS; + } + + VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO_HIGH, + "Dict file image from vOSS. [size= %d bytes]", nDictionarySize ); + +fail: + return vosStatus; +} + VOS_STATUS vos_nv_open(void) { VOS_STATUS status = VOS_STATUS_SUCCESS; @@ -478,11 +747,13 @@ VOS_STATUS vos_nv_open(void) v_SIZE_t bufSize; v_SIZE_t nvReadBufSize; v_BOOL_t itemIsValid = VOS_FALSE; - + v_U32_t dataOffset; + sHalNv *pnvData = NULL; + /*Get the global context */ pVosContext = vos_get_global_context(VOS_MODULE_ID_SYS, NULL); - - if(pVosContext == NULL) + + if (NULL == pVosContext) { return (eHAL_STATUS_FAILURE); } @@ -490,17 +761,94 @@ VOS_STATUS vos_nv_open(void) bufSize = sizeof(nvEFSTable_t); status = hdd_request_firmware(WLAN_NV_FILE, ((VosContextType*)(pVosContext))->pHDDContext, - (v_VOID_t**)&gnvEFSTable, &nvReadBufSize); + (v_VOID_t**)&pnvEncodedBuf, &nvReadBufSize); - if ( (!VOS_IS_STATUS_SUCCESS( status )) || !gnvEFSTable) + if ((!VOS_IS_STATUS_SUCCESS( status )) || (!pnvEncodedBuf)) { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, "%s: unable to download NV file %s", __func__, WLAN_NV_FILE); - return VOS_STATUS_E_RESOURCES; + return VOS_STATUS_E_RESOURCES; + } + + memcpy(&magicNumber, &pnvEncodedBuf[sizeof(v_U32_t)], sizeof(v_U32_t)); + + /// Allocate buffer with maximum length.. + pEncodedBuf = (v_U8_t *)vos_mem_malloc(nvReadBufSize); + + if (NULL == pEncodedBuf) + { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + "%s : failed to allocate memory for NV", __func__); + return VOS_STATUS_E_NOMEM; + } + + gnvEFSTable = (nvEFSTable_t*)pnvEncodedBuf; + + if (MAGIC_NUMBER == magicNumber) + { + pnvData = (sHalNv *)vos_mem_malloc(sizeof(sHalNv)); + + if (NULL == pnvData) + { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + "%s : failed to allocate memory for NV", __func__); + return VOS_STATUS_E_NOMEM; + } + + memset(pnvData, 0, sizeof(sHalNv)); + + /// Data starts from offset of validity bit map + magic number.. + dataOffset = sizeof(v_U32_t) + sizeof(v_U32_t); + + status = nvParser(&pnvEncodedBuf[dataOffset], + (nvReadBufSize-dataOffset), pnvData); + + ///ignore validity bit map + nvReadEncodeBufSize = nvReadBufSize - sizeof(v_U32_t); + + vos_mem_copy(pEncodedBuf, &pnvEncodedBuf[sizeof(v_U32_t)], + nvReadEncodeBufSize); + + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + "readEncodeBufSize %d",nvReadEncodeBufSize); + + if (VOS_STATUS_SUCCESS == status) { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + "Embedded NV parsed success !!productId %d couple Type %d wlan RevId %d", + pnvData->fields.productId, + pnvData->fields.couplerType, + pnvData->fields.wlanNvRevId); + + vos_mem_copy(&gnvEFSTable->halnv, pnvData, sizeof(sHalNv)); + + nvReadBufSize = sizeof(sHalNv) + sizeof(v_U32_t); + } + else + { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + "nvParser failed %d",status); + + nvReadBufSize = 0; + + vos_mem_copy(pEncodedBuf, &nvDefaults, sizeof(sHalNv)); + + nvReadEncodeBufSize = sizeof(sHalNv); + } + } + else + { + dataOffset = sizeof(v_U32_t); + nvReadEncodeBufSize = sizeof(sHalNv); + memcpy(pEncodedBuf, &pnvEncodedBuf[dataOffset], nvReadEncodeBufSize); + } + + if (NULL != pnvData) + { + vos_mem_free(pnvData); } - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "INFO: NV binary file version=%d Driver default NV version=%d, continue...\n", gnvEFSTable->halnv.fields.nvVersion, WLAN_NV_VERSION); @@ -508,7 +856,7 @@ VOS_STATUS vos_nv_open(void) { /* Allocate memory to global NV table */ pnvEFSTable = (nvEFSTable_t *)vos_mem_malloc(sizeof(nvEFSTable_t)); - if (NULL == pnvEFSTable) + if ( NULL == pnvEFSTable ) { VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s : failed to allocate memory for NV", __func__); @@ -516,7 +864,7 @@ VOS_STATUS vos_nv_open(void) } /*Copying the NV defaults */ - vos_mem_copy(&(pnvEFSTable->halnv),&nvDefaults,sizeof(sHalNv)); + vos_mem_copy(&(pnvEFSTable->halnv), &nvDefaults, sizeof(sHalNv)); /* Size mismatch */ if ( nvReadBufSize != bufSize) @@ -549,8 +897,8 @@ VOS_STATUS vos_nv_open(void) } pnvEFSTable->nvValidityBitmap = gnvEFSTable->nvValidityBitmap; - /* Copy the valid fields to the NV Global structure */ - if (vos_nv_getValidity(VNV_FIELD_IMAGE, &itemIsValid) == + /* Copy the valid fields to the NV Global structure */ + if (vos_nv_getValidity(VNV_FIELD_IMAGE, &itemIsValid) == VOS_STATUS_SUCCESS) { if (itemIsValid == VOS_TRUE) { @@ -561,22 +909,22 @@ VOS_STATUS vos_nv_open(void) } } - if (vos_nv_getValidity(VNV_RATE_TO_POWER_TABLE, &itemIsValid) == + if (vos_nv_getValidity(VNV_RATE_TO_POWER_TABLE, &itemIsValid) == VOS_STATUS_SUCCESS) { if (itemIsValid == VOS_TRUE) { - if(vos_nv_read( VNV_RATE_TO_POWER_TABLE, + if(vos_nv_read( VNV_RATE_TO_POWER_TABLE, (v_VOID_t *)&pnvEFSTable->halnv.tables.pwrOptimum[0], NULL, sizeof(tRateGroupPwr) * NUM_RF_SUBBANDS ) != VOS_STATUS_SUCCESS) goto error; } } - if (vos_nv_getValidity(VNV_REGULARTORY_DOMAIN_TABLE, &itemIsValid) == + if (vos_nv_getValidity(VNV_REGULARTORY_DOMAIN_TABLE, &itemIsValid) == VOS_STATUS_SUCCESS) { - + if (itemIsValid == VOS_TRUE) { if(vos_nv_read( VNV_REGULARTORY_DOMAIN_TABLE, @@ -586,7 +934,7 @@ VOS_STATUS vos_nv_open(void) } } - if (vos_nv_getValidity(VNV_DEFAULT_LOCATION, &itemIsValid) == + if (vos_nv_getValidity(VNV_DEFAULT_LOCATION, &itemIsValid) == VOS_STATUS_SUCCESS) { if (itemIsValid == VOS_TRUE) @@ -597,20 +945,20 @@ VOS_STATUS vos_nv_open(void) goto error; } } - - if (vos_nv_getValidity(VNV_TPC_POWER_TABLE, &itemIsValid) == + + if (vos_nv_getValidity(VNV_TPC_POWER_TABLE, &itemIsValid) == VOS_STATUS_SUCCESS) { if (itemIsValid == VOS_TRUE) { - if(vos_nv_read( VNV_TPC_POWER_TABLE, + if(vos_nv_read( VNV_TPC_POWER_TABLE, (v_VOID_t *)&pnvEFSTable->halnv.tables.plutCharacterized[0], NULL, sizeof(tTpcPowerTable) * NUM_RF_CHANNELS ) != VOS_STATUS_SUCCESS) goto error; } } - - if (vos_nv_getValidity(VNV_TPC_PDADC_OFFSETS, &itemIsValid) == + + if (vos_nv_getValidity(VNV_TPC_PDADC_OFFSETS, &itemIsValid) == VOS_STATUS_SUCCESS) { if (itemIsValid == VOS_TRUE) @@ -621,7 +969,7 @@ VOS_STATUS vos_nv_open(void) goto error; } } - if (vos_nv_getValidity(VNV_RSSI_CHANNEL_OFFSETS, &itemIsValid) == + if (vos_nv_getValidity(VNV_RSSI_CHANNEL_OFFSETS, &itemIsValid) == VOS_STATUS_SUCCESS) { if (itemIsValid == VOS_TRUE) @@ -632,8 +980,8 @@ VOS_STATUS vos_nv_open(void) goto error; } } - - if (vos_nv_getValidity(VNV_HW_CAL_VALUES, &itemIsValid) == + + if (vos_nv_getValidity(VNV_HW_CAL_VALUES, &itemIsValid) == VOS_STATUS_SUCCESS) { if (itemIsValid == VOS_TRUE) @@ -644,7 +992,7 @@ VOS_STATUS vos_nv_open(void) } } - if (vos_nv_getValidity(VNV_FW_CONFIG, &itemIsValid) == + if (vos_nv_getValidity(VNV_FW_CONFIG, &itemIsValid) == VOS_STATUS_SUCCESS) { if (itemIsValid == VOS_TRUE) @@ -655,59 +1003,59 @@ VOS_STATUS vos_nv_open(void) } } - if (vos_nv_getValidity(VNV_ANTENNA_PATH_LOSS, &itemIsValid) == + if (vos_nv_getValidity(VNV_ANTENNA_PATH_LOSS, &itemIsValid) == VOS_STATUS_SUCCESS) { if (itemIsValid == VOS_TRUE) { if(vos_nv_read( VNV_ANTENNA_PATH_LOSS, - (v_VOID_t *)&pnvEFSTable->halnv.tables.antennaPathLoss[0], NULL, + (v_VOID_t *)&pnvEFSTable->halnv.tables.antennaPathLoss[0], NULL, sizeof(tANI_S16)*NUM_RF_CHANNELS ) != VOS_STATUS_SUCCESS) goto error; } } - if (vos_nv_getValidity(VNV_PACKET_TYPE_POWER_LIMITS, &itemIsValid) == + if (vos_nv_getValidity(VNV_PACKET_TYPE_POWER_LIMITS, &itemIsValid) == VOS_STATUS_SUCCESS) { if (itemIsValid == VOS_TRUE) { - if(vos_nv_read( VNV_PACKET_TYPE_POWER_LIMITS, - (v_VOID_t *)&pnvEFSTable->halnv.tables.pktTypePwrLimits[0], NULL, + if(vos_nv_read( VNV_PACKET_TYPE_POWER_LIMITS, + (v_VOID_t *)&pnvEFSTable->halnv.tables.pktTypePwrLimits[0], NULL, sizeof(tANI_S16)*NUM_802_11_MODES*NUM_RF_CHANNELS ) != VOS_STATUS_SUCCESS) goto error; } } - if (vos_nv_getValidity(VNV_OFDM_CMD_PWR_OFFSET, &itemIsValid) == + if (vos_nv_getValidity(VNV_OFDM_CMD_PWR_OFFSET, &itemIsValid) == VOS_STATUS_SUCCESS) { if (itemIsValid == VOS_TRUE) { - if(vos_nv_read( VNV_OFDM_CMD_PWR_OFFSET, - (v_VOID_t *)&pnvEFSTable->halnv.tables.ofdmCmdPwrOffset, NULL, + if(vos_nv_read( VNV_OFDM_CMD_PWR_OFFSET, + (v_VOID_t *)&pnvEFSTable->halnv.tables.ofdmCmdPwrOffset, NULL, sizeof(sOfdmCmdPwrOffset)) != VOS_STATUS_SUCCESS) goto error; } } - if (vos_nv_getValidity(VNV_TX_BB_FILTER_MODE, &itemIsValid) == + if (vos_nv_getValidity(VNV_TX_BB_FILTER_MODE, &itemIsValid) == VOS_STATUS_SUCCESS) { if (itemIsValid == VOS_TRUE) { - if(vos_nv_read(VNV_TX_BB_FILTER_MODE, - (v_VOID_t *)&pnvEFSTable->halnv.tables.txbbFilterMode, NULL, + if(vos_nv_read(VNV_TX_BB_FILTER_MODE, + (v_VOID_t *)&pnvEFSTable->halnv.tables.txbbFilterMode, NULL, sizeof(sTxBbFilterMode)) != VOS_STATUS_SUCCESS) goto error; } } - if (vos_nv_getValidity(VNV_TABLE_VIRTUAL_RATE, &itemIsValid) == + if (vos_nv_getValidity(VNV_TABLE_VIRTUAL_RATE, &itemIsValid) == VOS_STATUS_SUCCESS) { if (itemIsValid == VOS_TRUE) { - if(vos_nv_read(VNV_TABLE_VIRTUAL_RATE, - (v_VOID_t *)&pnvEFSTable->halnv.tables.pwrOptimum_virtualRate, NULL, + if(vos_nv_read(VNV_TABLE_VIRTUAL_RATE, + (v_VOID_t *)&pnvEFSTable->halnv.tables.pwrOptimum_virtualRate, NULL, sizeof(gnvEFSTable->halnv.tables.pwrOptimum_virtualRate)) != VOS_STATUS_SUCCESS) goto error; } @@ -717,6 +1065,7 @@ VOS_STATUS vos_nv_open(void) return VOS_STATUS_SUCCESS; error: vos_mem_free(pnvEFSTable); + vos_mem_free(pEncodedBuf); return eHAL_STATUS_FAILURE ; } @@ -734,141 +1083,13 @@ VOS_STATUS vos_nv_close(void) return VOS_STATUS_E_FAILURE; } vos_mem_free(pnvEFSTable); + vos_mem_free(pEncodedBuf); + vos_mem_free(pDictFile); + gnvEFSTable=NULL; return VOS_STATUS_SUCCESS; } -/**------------------------------------------------------------------------ - \brief vos_nv_getRegDomainFromCountryCode() - get the regulatory domain of - a country given its country code - The \a vos_nv_getRegDomainFromCountryCode() returns the regulatory domain of - a country given its country code. This is done from reading a cached - copy of the binary file. - \param pRegDomain - pointer to regulatory domain - \param countryCode - country code - \return VOS_STATUS_SUCCESS - regulatory domain is found for the given country - VOS_STATUS_E_FAULT - invalid pointer error - VOS_STATUS_E_EMPTY - country code table is empty - VOS_STATUS_E_EXISTS - given country code does not exist in table - \sa - -------------------------------------------------------------------------*/ -VOS_STATUS vos_nv_getRegDomainFromCountryCode( v_REGDOMAIN_t *pRegDomain, - const v_COUNTRYCODE_t countryCode ) -{ - int i; - v_CONTEXT_t pVosContext = NULL; - hdd_context_t *pHddCtx = NULL; - struct wiphy *wiphy = NULL; - int status; - // sanity checks - if (NULL == pRegDomain) - { - VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, - ("Invalid reg domain pointer\r\n") ); - return VOS_STATUS_E_FAULT; - } - *pRegDomain = REGDOMAIN_COUNT; - - if (NULL == countryCode) - { - VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, - ("Country code array is NULL\r\n") ); - return VOS_STATUS_E_FAULT; - } - if (0 == countryInfoTable.countryCount) - { - VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, - ("Reg domain table is empty\r\n") ); - return VOS_STATUS_E_EMPTY; - } - /* If CRDA regulatory settings is valid, i.e. crda is enabled - and reg_notifier is called back. - Intercept here and redirect to the Reg domain table's CRDA - entry if country code is crda's country. - last one NUM_REG_DOMAINS-1 is reserved for crda */ - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO_HIGH, - "vos_nv_getRegDomainFromCountryCode %c%c\n", - countryCode[0], countryCode[1]); - - if (crda_regulatory_entry_valid == VOS_TRUE) - { - if (crda_alpha2[0]==countryCode[0] && crda_alpha2[1]==countryCode[1]) - { - *pRegDomain = NUM_REG_DOMAINS-1; - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO_HIGH, - "vos_nv_getRegDomainFromCountryCode return crda init entry\n"); - return VOS_STATUS_SUCCESS; - } - if (run_time_alpha2[0]==countryCode[0] && - run_time_alpha2[1]==countryCode[1] && - crda_regulatory_run_time_entry_valid == VOS_TRUE) - { - *pRegDomain = NUM_REG_DOMAINS-2; - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO_HIGH, - "vos_nv_getRegDomainFromCountryCode return crda none-default country entry\n"); - return VOS_STATUS_SUCCESS; - } - else - { - crda_regulatory_run_time_entry_valid = VOS_FALSE; - pVosContext = vos_get_global_context(VOS_MODULE_ID_SYS, NULL); - if (NULL != pVosContext) - pHddCtx = vos_get_context(VOS_MODULE_ID_HDD, pVosContext); - else - return VOS_STATUS_E_EXISTS; - if (NULL == pHddCtx) - { - VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, - ("Invalid pHddCtx pointer\r\n") ); - return VOS_STATUS_E_FAULT; - } - wiphy = pHddCtx->wiphy; - INIT_COMPLETION(pHddCtx->driver_crda_req); - regulatory_hint(wiphy, countryCode); - status = wait_for_completion_interruptible_timeout( - &pHddCtx->driver_crda_req, - msecs_to_jiffies(CRDA_WAIT_TIME)); - if (!status) - { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, - "%s: Timeout waiting for CRDA REQ", __func__); - } - - if (crda_regulatory_run_time_entry_valid == VOS_TRUE) - { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO_HIGH, - "vos_nv_getRegDomainFromCountryCode return crda new none-default country entry\n"); - return VOS_STATUS_SUCCESS; - } - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, - "vos_nv_getRegDomainFromCountryCode failed to get crda new none-default country entry\n"); - return VOS_STATUS_E_EXISTS; - } - } - - // iterate the country info table until end of table or the country code - // is found - for (i = 0; i < countryInfoTable.countryCount && - REGDOMAIN_COUNT == *pRegDomain; i++) - { - if (memcmp(countryCode, countryInfoTable.countryInfo[i].countryCode, - VOS_COUNTRY_CODE_LEN) == 0) - { - // country code is found - *pRegDomain = countryInfoTable.countryInfo[i].regDomain; - } - } - if (REGDOMAIN_COUNT != *pRegDomain) - { - return VOS_STATUS_SUCCESS; - } - else - { - VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_WARN, - ("country code is not found\r\n")); - return VOS_STATUS_E_EXISTS; - } -} /**------------------------------------------------------------------------ \brief vos_nv_getSupportedCountryCode() - get the list of supported country codes @@ -896,7 +1117,7 @@ VOS_STATUS vos_nv_getSupportedCountryCode( v_BYTE_t *pBuffer, v_SIZE_t *pBufferS if ( NULL == pBuffer || providedBufferSize < *pBufferSize ) { VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO, - ("Insufficient memory for country code list\r\n")); + ("Insufficient memory for country code list\n")); return VOS_STATUS_E_NOMEM; } for (i = 0; i < countryInfoTable.countryCount; i++) @@ -1261,11 +1482,11 @@ VOS_STATUS vos_nv_read( VNV_TYPE type, v_VOID_t *outputVoidBuffer, } break; case VNV_FW_CONFIG: - + itemSize = sizeof(gnvEFSTable->halnv.tables.fwConfig); - + if(bufferSize != itemSize) { - + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, ("type = %d buffer size=%d is less than data size=%d\r\n"),type, bufferSize, itemSize); @@ -1488,11 +1709,11 @@ VOS_STATUS vos_nv_write( VNV_TYPE type, v_VOID_t *inputVoidBuffer, } break; case VNV_FW_CONFIG: - + itemSize = sizeof(gnvEFSTable->halnv.tables.fwConfig); - + if(bufferSize != itemSize) { - + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, ("type = %d buffer size=%d is less than data size=%d\r\n"),type, bufferSize, itemSize); @@ -1553,7 +1774,7 @@ VOS_STATUS vos_nv_write( VNV_TYPE type, v_VOID_t *inputVoidBuffer, memcpy(&gnvEFSTable->halnv.tables.txbbFilterMode,inputVoidBuffer,bufferSize); } break; - + case VNV_TABLE_VIRTUAL_RATE: itemSize = sizeof(gnvEFSTable->halnv.tables.pwrOptimum_virtualRate); @@ -1608,7 +1829,7 @@ VOS_STATUS vos_nv_getChannelListWithPower(tChannelListWithPower *channels20MHz / { VOS_STATUS status = VOS_STATUS_SUCCESS; int i, count; - + //TODO: Dont want to use pMac here...can we instead store the curRegDomain in NV // or pass it as a parameter to NV from SME? @@ -1640,7 +1861,7 @@ VOS_STATUS vos_nv_getChannelListWithPower(tChannelListWithPower *channels20MHz / //center channels for 2.4 Ghz 40 MHz channels for( i = RF_CHAN_BOND_3; i <= RF_CHAN_BOND_11; i++ ) { - + if( regChannels[i].enabled ) { channels40MHz[count].chanId = rfChannels[i].channelNum; @@ -1650,7 +1871,7 @@ VOS_STATUS vos_nv_getChannelListWithPower(tChannelListWithPower *channels20MHz / //center channels for 5 Ghz 40 MHz channels for( i = RF_CHAN_BOND_38; i <= RF_CHAN_BOND_163; i++ ) { - + if( regChannels[i].enabled ) { channels40MHz[count].chanId = rfChannels[i].channelNum; @@ -1718,7 +1939,7 @@ VOS_STATUS vos_nv_getSupportedChannels( v_U8_t *p20MhzChannels, int *pNum20MhzCh -------------------------------------------------------------------------*/ VOS_STATUS vos_nv_readDefaultCountryTable( uNvTables *tableData ) { - + VOS_STATUS status = VOS_STATUS_SUCCESS; memcpy(&tableData->defaultCountryTable, &pnvEFSTable->halnv.tables.defaultCountryTable, sizeof(sDefaultCountry)); pr_info("DefaultCountry is %c%c\n", @@ -1728,7 +1949,7 @@ VOS_STATUS vos_nv_readDefaultCountryTable( uNvTables *tableData ) } /**------------------------------------------------------------------------ - \brief vos_nv_getBuffer - + \brief vos_nv_getBuffer - \param pBuffer - to return the buffer address pSize - buffer size. \return status of the NV read operation @@ -1736,7 +1957,6 @@ VOS_STATUS vos_nv_readDefaultCountryTable( uNvTables *tableData ) -------------------------------------------------------------------------*/ VOS_STATUS vos_nv_getNVBuffer(v_VOID_t **pNvBuffer,v_SIZE_t *pSize) { - /* Send the NV structure and size */ *pNvBuffer = (v_VOID_t *)(&pnvEFSTable->halnv); *pSize = sizeof(sHalNv); @@ -1745,30 +1965,63 @@ VOS_STATUS vos_nv_getNVBuffer(v_VOID_t **pNvBuffer,v_SIZE_t *pSize) } /**------------------------------------------------------------------------ - \brief vos_nv_setRegDomain - - \param clientCtxt - Client Context, Not used for PRIMA - regId - Regulatory Domain ID - \return status set REG domain operation - \sa - -------------------------------------------------------------------------*/ -VOS_STATUS vos_nv_setRegDomain(void * clientCtxt, v_REGDOMAIN_t regId) + \brief vos_nv_getBuffer - + \param pBuffer - to return the buffer address + pSize - buffer size. + \return status of the NV read operation + \sa + -------------------------------------------------------------------------*/ +VOS_STATUS vos_nv_getNVEncodedBuffer(v_VOID_t **pNvBuffer,v_SIZE_t *pSize) { - /* Client Context Argumant not used for PRIMA */ - if(regId >= REGDOMAIN_COUNT) + /* Send the NV structure and size */ + VOS_STATUS status; + + status = vos_nv_isEmbeddedNV(); + + if (VOS_STATUS_SUCCESS == status) { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, - "VOS set reg domain, invalid REG domain ID %d", regId); - return VOS_STATUS_E_INVAL; + *pNvBuffer = (v_VOID_t *)(pEncodedBuf); + *pSize = nvReadEncodeBufSize; + } + else + { + *pNvBuffer = (v_VOID_t *)(&pnvEFSTable->halnv); + *pSize = sizeof(sHalNv); } - /* Set correct channel information based on REG Domain */ - regChannels = pnvEFSTable->halnv.tables.regDomains[regId].channels; + return VOS_STATUS_SUCCESS; +} + + +VOS_STATUS vos_nv_getNVDictionary(v_VOID_t **pNvBuffer,v_SIZE_t *pSize) +{ + /* Send the NV structure and size */ + *pNvBuffer = (v_VOID_t *)(pDictFile); + *pSize = nDictionarySize; return VOS_STATUS_SUCCESS; } +VOS_STATUS vos_nv_isEmbeddedNV(v_VOID_t) +{ + if (MAGIC_NUMBER == magicNumber) + { + return VOS_STATUS_SUCCESS; + } + + return VOS_STATUS_E_FAILURE; +} + +VOS_STATUS vos_nv_setNVEncodedBuffer(v_U8_t *pNvBuffer, v_SIZE_t size) +{ + vos_mem_copy(pEncodedBuf, &pNvBuffer[sizeof(v_U32_t)], + (size-sizeof(v_U32_t))); + + return VOS_STATUS_SUCCESS; +} + /**------------------------------------------------------------------------ - \brief vos_nv_getChannelEnabledState - + \brief vos_nv_getChannelEnabledState - \param rfChannel - input channel enum to know evabled state \return eNVChannelEnabledType enabled state for channel * enabled @@ -1840,7 +2093,7 @@ static int bw20_ch_index_to_bw40_ch_index(int k) if (m > RF_CHAN_BOND_163) m = RF_CHAN_BOND_163; } -return m; + return m; } void crda_regulatory_entry_default(v_U8_t *countryCode, int domain_id) @@ -1930,7 +2183,7 @@ static int create_crda_regulatory_entry(struct wiphy *wiphy, if (wiphy->bands[i] == NULL) { pr_info("error: wiphy->bands[i] is NULL, i = %d\n", i); - continue; + return -1; } // internal channels[] is one continous array for both 2G and 5G bands // m is internal starting channel index for each band @@ -1938,6 +2191,7 @@ static int create_crda_regulatory_entry(struct wiphy *wiphy, m = 0; else m = wiphy->bands[i-1]->n_channels + m; + for (j=0;jbands[i]->n_channels;j++) { // k = (m + j) is internal current channel index for 20MHz channel @@ -2002,11 +2256,12 @@ static int create_crda_regulatory_entry(struct wiphy *wiphy, run_time_alpha2[1] = request->alpha2[1]; crda_regulatory_run_time_entry_valid = VOS_TRUE; crda_regulatory_entry_post_processing(wiphy, request, nBandCapability, NUM_REG_DOMAINS-2); -return 0; + return 0; } + v_BOOL_t is_crda_regulatory_entry_valid(void) { -return crda_regulatory_entry_valid; + return crda_regulatory_entry_valid; } /* Handling routines for the conversion from regd rules (start/end freq) to channel index @@ -2017,114 +2272,114 @@ end freq - 20000 = center freq of the 40MHz end channel */ static int bw20_start_freq_to_channel_index(u32 freq_khz) { -int i; -u32 center_freq = freq_khz + 10000; - //Has to compare from low freq to high freq - //RF_SUBBAND_2_4_GHZ - for (i=RF_CHAN_1;i<=RF_CHAN_14;i++) - if (center_freq <= (u32) (rfChannels[i].targetFreq) * 1000) - return i; - //RF_SUBBAND_4_9_GHZ, Ch 240, 244, 248, 252, 208, 212, 216 - for (i=RF_CHAN_240;i<=RF_CHAN_216;i++) - if (center_freq <= (u32) (rfChannels[i].targetFreq) * 1000) - return i; - //RF_SUBBAND_5_LOW_GHZ - for (i=RF_CHAN_36;i<=RF_CHAN_64;i++) - if (center_freq <= (u32) (rfChannels[i].targetFreq) * 1000) - return i; - //RF_SUBBAND_5_MID_GHZ - for (i=RF_CHAN_100;i<=RF_CHAN_140;i++) - if (center_freq <= (u32) (rfChannels[i].targetFreq) * 1000) - return i; - //RF_SUBBAND_5_HIGH_GHZ - for (i=RF_CHAN_149;i<=RF_CHAN_165;i++) - if (center_freq <= (u32) (rfChannels[i].targetFreq) * 1000) - return i; -return -1; + int i; + u32 center_freq = freq_khz + 10000; + //Has to compare from low freq to high freq + //RF_SUBBAND_2_4_GHZ + for (i=RF_CHAN_1;i<=RF_CHAN_14;i++) + if (center_freq <= (u32) (rfChannels[i].targetFreq) * 1000) + return i; + //RF_SUBBAND_4_9_GHZ, Ch 240, 244, 248, 252, 208, 212, 216 + for (i=RF_CHAN_240;i<=RF_CHAN_216;i++) + if (center_freq <= (u32) (rfChannels[i].targetFreq) * 1000) + return i; + //RF_SUBBAND_5_LOW_GHZ + for (i=RF_CHAN_36;i<=RF_CHAN_64;i++) + if (center_freq <= (u32) (rfChannels[i].targetFreq) * 1000) + return i; + //RF_SUBBAND_5_MID_GHZ + for (i=RF_CHAN_100;i<=RF_CHAN_140;i++) + if (center_freq <= (u32) (rfChannels[i].targetFreq) * 1000) + return i; + //RF_SUBBAND_5_HIGH_GHZ + for (i=RF_CHAN_149;i<=RF_CHAN_165;i++) + if (center_freq <= (u32) (rfChannels[i].targetFreq) * 1000) + return i; + return -1; } static int bw20_end_freq_to_channel_index(u32 freq_khz) { -int i; -u32 center_freq = freq_khz - 10000; - //Has to compare from high freq to low freq - //RF_SUBBAND_5_HIGH_GHZ - for (i=RF_CHAN_165;i>=RF_CHAN_149;i--) - if (center_freq >= (u32) (rfChannels[i].targetFreq) * 1000) - return i; - //RF_SUBBAND_5_MID_GHZ - for (i=RF_CHAN_140;i>=RF_CHAN_100;i--) - if (center_freq >= (u32) (rfChannels[i].targetFreq) * 1000) - return i; - //RF_SUBBAND_5_LOW_GHZ - for (i=RF_CHAN_64;i>=RF_CHAN_36;i--) - if (center_freq >= (u32) (rfChannels[i].targetFreq) * 1000) - return i; - //RF_SUBBAND_4_9_GHZ, Ch 216, 212, 208, 252, 248, 244, 240 - for (i=RF_CHAN_216;i>=RF_CHAN_240;i--) - if (center_freq >= (u32) (rfChannels[i].targetFreq) * 1000) - return i; - //RF_SUBBAND_2_4_GHZ - for (i=RF_CHAN_14;i>=RF_CHAN_1;i--) - if (center_freq >= (u32) (rfChannels[i].targetFreq) * 1000) - return i; -return -1; + int i; + u32 center_freq = freq_khz - 10000; + //Has to compare from high freq to low freq + //RF_SUBBAND_5_HIGH_GHZ + for (i=RF_CHAN_165;i>=RF_CHAN_149;i--) + if (center_freq >= (u32) (rfChannels[i].targetFreq) * 1000) + return i; + //RF_SUBBAND_5_MID_GHZ + for (i=RF_CHAN_140;i>=RF_CHAN_100;i--) + if (center_freq >= (u32) (rfChannels[i].targetFreq) * 1000) + return i; + //RF_SUBBAND_5_LOW_GHZ + for (i=RF_CHAN_64;i>=RF_CHAN_36;i--) + if (center_freq >= (u32) (rfChannels[i].targetFreq) * 1000) + return i; + //RF_SUBBAND_4_9_GHZ, Ch 216, 212, 208, 252, 248, 244, 240 + for (i=RF_CHAN_216;i>=RF_CHAN_240;i--) + if (center_freq >= (u32) (rfChannels[i].targetFreq) * 1000) + return i; + //RF_SUBBAND_2_4_GHZ + for (i=RF_CHAN_14;i>=RF_CHAN_1;i--) + if (center_freq >= (u32) (rfChannels[i].targetFreq) * 1000) + return i; + return -1; } static int bw40_start_freq_to_channel_index(u32 freq_khz) { -int i; -u32 center_freq = freq_khz + 20000; - //Has to compare from low freq to high freq - //RF_SUBBAND_2_4_GHZ - for (i=RF_CHAN_BOND_3;i<=RF_CHAN_BOND_11;i++) - if (center_freq <= (u32) (rfChannels[i].targetFreq) * 1000) - return i; - //RF_SUBBAND_4_9_GHZ, Ch 242, 246, 250, 210, 214 - for (i=RF_CHAN_BOND_242;i<=RF_CHAN_BOND_214;i++) - if (center_freq <= (u32) (rfChannels[i].targetFreq) * 1000) - return i; - //RF_SUBBAND_5_LOW_GHZ - for (i=RF_CHAN_BOND_38;i<=RF_CHAN_BOND_62;i++) - if (center_freq <= (u32) (rfChannels[i].targetFreq) * 1000) - return i; - //RF_SUBBAND_5_MID_GHZ - for (i=RF_CHAN_BOND_102;i<=RF_CHAN_BOND_138;i++) - if (center_freq <= (u32) (rfChannels[i].targetFreq) * 1000) - return i; - //RF_SUBBAND_5_HIGH_GHZ - for (i=RF_CHAN_BOND_151;i<=RF_CHAN_BOND_163;i++) - if (center_freq <= (u32) (rfChannels[i].targetFreq) * 1000) - return i; -return -1; + int i; + u32 center_freq = freq_khz + 20000; + //Has to compare from low freq to high freq + //RF_SUBBAND_2_4_GHZ + for (i=RF_CHAN_BOND_3;i<=RF_CHAN_BOND_11;i++) + if (center_freq <= (u32) (rfChannels[i].targetFreq) * 1000) + return i; + //RF_SUBBAND_4_9_GHZ, Ch 242, 246, 250, 210, 214 + for (i=RF_CHAN_BOND_242;i<=RF_CHAN_BOND_214;i++) + if (center_freq <= (u32) (rfChannels[i].targetFreq) * 1000) + return i; + //RF_SUBBAND_5_LOW_GHZ + for (i=RF_CHAN_BOND_38;i<=RF_CHAN_BOND_62;i++) + if (center_freq <= (u32) (rfChannels[i].targetFreq) * 1000) + return i; + //RF_SUBBAND_5_MID_GHZ + for (i=RF_CHAN_BOND_102;i<=RF_CHAN_BOND_138;i++) + if (center_freq <= (u32) (rfChannels[i].targetFreq) * 1000) + return i; + //RF_SUBBAND_5_HIGH_GHZ + for (i=RF_CHAN_BOND_151;i<=RF_CHAN_BOND_163;i++) + if (center_freq <= (u32) (rfChannels[i].targetFreq) * 1000) + return i; + return -1; } static int bw40_end_freq_to_channel_index(u32 freq_khz) { -int i; -u32 center_freq = freq_khz - 20000; - //Has to compare from high freq to low freq - //RF_SUBBAND_5_HIGH_GHZ - for (i=RF_CHAN_BOND_163;i>=RF_CHAN_BOND_151;i--) - if (center_freq >= (u32) (rfChannels[i].targetFreq) * 1000) - return i; - //RF_SUBBAND_5_MID_GHZ - for (i=RF_CHAN_BOND_138;i>=RF_CHAN_BOND_102;i--) - if (center_freq >= (u32) (rfChannels[i].targetFreq) * 1000) - return i; - //RF_SUBBAND_5_LOW_GHZ - for (i=RF_CHAN_BOND_62;i>=RF_CHAN_BOND_38;i--) - if (center_freq >= (u32) (rfChannels[i].targetFreq) * 1000) - return i; - //RF_SUBBAND_4_9_GHZ, Ch 214, 210, 250, 246, 242 - for (i=RF_CHAN_BOND_214;i>=RF_CHAN_BOND_242;i--) - if (center_freq >= (u32) (rfChannels[i].targetFreq) * 1000) - return i; - //RF_SUBBAND_2_4_GHZ - for (i=RF_CHAN_BOND_11;i>=RF_CHAN_BOND_3;i--) - if (center_freq >= (u32) (rfChannels[i].targetFreq) * 1000) - return i; -return -1; + int i; + u32 center_freq = freq_khz - 20000; + //Has to compare from high freq to low freq + //RF_SUBBAND_5_HIGH_GHZ + for (i=RF_CHAN_BOND_163;i>=RF_CHAN_BOND_151;i--) + if (center_freq >= (u32) (rfChannels[i].targetFreq) * 1000) + return i; + //RF_SUBBAND_5_MID_GHZ + for (i=RF_CHAN_BOND_138;i>=RF_CHAN_BOND_102;i--) + if (center_freq >= (u32) (rfChannels[i].targetFreq) * 1000) + return i; + //RF_SUBBAND_5_LOW_GHZ + for (i=RF_CHAN_BOND_62;i>=RF_CHAN_BOND_38;i--) + if (center_freq >= (u32) (rfChannels[i].targetFreq) * 1000) + return i; + //RF_SUBBAND_4_9_GHZ, Ch 214, 210, 250, 246, 242 + for (i=RF_CHAN_BOND_214;i>=RF_CHAN_BOND_242;i--) + if (center_freq >= (u32) (rfChannels[i].targetFreq) * 1000) + return i; + //RF_SUBBAND_2_4_GHZ + for (i=RF_CHAN_BOND_11;i>=RF_CHAN_BOND_3;i--) + if (center_freq >= (u32) (rfChannels[i].targetFreq) * 1000) + return i; + return -1; } static v_BOOL_t channel_in_capable_band(int j, v_U8_t nBandCapability) @@ -2273,93 +2528,1172 @@ static int create_crda_regulatory_entry_from_regd(struct wiphy *wiphy, return 0; } -/* - * Function: wlan_hdd_crda_reg_notifier - * This function is called from cfg80211 core to provide regulatory settings - * after new country is requested or intersected (init, user input or 11d) - * This function is used to create a CRDA regulatory settings entry into internal - * regulatory setting table. - */ -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0)) -void wlan_hdd_crda_reg_notifier(struct wiphy *wiphy, - struct regulatory_request *request) -#else -int wlan_hdd_crda_reg_notifier(struct wiphy *wiphy, - struct regulatory_request *request) -#endif +#ifdef CONFIG_ENABLE_LINUX_REG + +/**------------------------------------------------------------------------ + \brief vos_nv_setRegDomain - + \param clientCtxt - Client Context, Not used for PRIMA + regId - Regulatory Domain ID + sendRegHint - send hint to nl80211 + \return status set REG domain operation + \sa + -------------------------------------------------------------------------*/ +VOS_STATUS vos_nv_setRegDomain(void * clientCtxt, v_REGDOMAIN_t regId, + v_BOOL_t sendRegHint) { - hdd_context_t *pHddCtx = wiphy_priv(wiphy); - wiphy_dbg(wiphy, "info: cfg80211 reg_notifier callback for country" - " %c%c\n", request->alpha2[0], request->alpha2[1]); - if (request->initiator == NL80211_REGDOM_SET_BY_USER) + + if (regId >= REGDOMAIN_COUNT) { - wiphy_dbg(wiphy, "info: set by user\n"); - if (create_crda_regulatory_entry(wiphy, request, pHddCtx->cfg_ini->nBandCapability) != 0) { -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0)) - return; -#else - return 0; -#endif - } - /* Shouldcall sme_ChangeCountryCode to send a message to trigger read - regd for new country settings */ - sme_ChangeCountryCode(pHddCtx->hHal, NULL, - &request->alpha2[0], NULL, pHddCtx->pvosContext); + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + "VOS set reg domain, invalid REG domain ID %d", regId); + return VOS_STATUS_E_INVAL; + } + + /* Set correct channel information based on REG Domain */ + regChannels = pnvEFSTable->halnv.tables.regDomains[regId].channels; + + return VOS_STATUS_SUCCESS; +} + +/**------------------------------------------------------------------------ + \brief vos_nv_getRegDomainFromCountryCode() - get the regulatory domain of + a country given its country code + The \a vos_nv_getRegDomainFromCountryCode() returns the regulatory domain of + a country given its country code. This is done from reading a cached + copy of the binary file. + \param pRegDomain - pointer to regulatory domain + \param countryCode - country code + \param source - source of the country code + \return VOS_STATUS_SUCCESS - regulatory domain is found for the given country + VOS_STATUS_E_FAULT - invalid pointer error + VOS_STATUS_E_EMPTY - country code table is empty + VOS_STATUS_E_EXISTS - given country code does not exist in table + \sa + -------------------------------------------------------------------------*/ +VOS_STATUS vos_nv_getRegDomainFromCountryCode( v_REGDOMAIN_t *pRegDomain, + const v_COUNTRYCODE_t country_code, v_CountryInfoSource_t source) +{ + + v_CONTEXT_t pVosContext = NULL; + hdd_context_t *pHddCtx = NULL; + struct wiphy *wiphy = NULL; + int i; + int wait_result; + + /* sanity checks */ + if (NULL == pRegDomain) + { + VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + ("Invalid reg domain pointer") ); + return VOS_STATUS_E_FAULT; } - else if (request->initiator == NL80211_REGDOM_SET_BY_COUNTRY_IE) + + *pRegDomain = REGDOMAIN_COUNT; + + if (NULL == country_code) { - wiphy_dbg(wiphy, "info: set by country IE\n"); - if (create_crda_regulatory_entry(wiphy, request, pHddCtx->cfg_ini->nBandCapability) != 0) { + VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + ("Country code array is NULL")); + return VOS_STATUS_E_FAULT; + } + + if (0 == countryInfoTable.countryCount) + { + VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + ("Reg domain table is empty") ); + return VOS_STATUS_E_EMPTY; + } + + + pVosContext = vos_get_global_context(VOS_MODULE_ID_SYS, NULL); + + if (NULL != pVosContext) + pHddCtx = vos_get_context(VOS_MODULE_ID_HDD, pVosContext); + else + return VOS_STATUS_E_EXISTS; + + if (NULL == pHddCtx) + { + VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + ("Invalid pHddCtx pointer") ); + return VOS_STATUS_E_FAULT; + } + + temp_reg_domain = REGDOMAIN_COUNT; + /* lookup the country in the local database */ + for (i = 0; i < countryInfoTable.countryCount && + REGDOMAIN_COUNT == temp_reg_domain; i++) + { + if (memcmp(country_code, countryInfoTable.countryInfo[i].countryCode, + VOS_COUNTRY_CODE_LEN) == 0) + { + /* country code is found */ + /* record the temporary regulatory_domain as well */ + temp_reg_domain = countryInfoTable.countryInfo[i].regDomain; + break; + } + } + + if (REGDOMAIN_COUNT == temp_reg_domain) { + + /* the country was not found in the driver database */ + /* so we will return the REGDOMAIN_WORLD to SME/CSR */ + + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + ("Country does not map to any Regulatory domain")); + + temp_reg_domain = REGDOMAIN_WORLD; + } + + if (COUNTRY_QUERY == source) + { + *pRegDomain = temp_reg_domain; + return VOS_STATUS_SUCCESS; + } + + wiphy = pHddCtx->wiphy; + + if (false == wiphy->registered) + { + VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + ("wiphy is not yet registered with the kernel") ); + return VOS_STATUS_E_FAULT; + } + + /* We need to query the kernel to get the regulatory information + for this country */ + + + /* First compare the country code with the existing current country code + . If both are same there is no need to query any database */ + + VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO, + ("regdomain request")); + + if ((country_code[0] == linux_reg_cc[0]) && + (country_code[1] == linux_reg_cc[1])) { + + /* country code already exists */ + + VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO, + (" country code already exists")); + + *pRegDomain = cur_reg_domain; + + return VOS_STATUS_SUCCESS; + } + else { + + /* get the regulatory information from the kernel + database */ + + VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_WARN, + (" get country information from kernel db")); + + + if (COUNTRY_NV == source) + { + INIT_COMPLETION(pHddCtx->linux_reg_req); + regulatory_hint(wiphy, country_code); + wait_result = wait_for_completion_interruptible_timeout( + &pHddCtx->linux_reg_req, + LINUX_REG_WAIT_TIME); + + /* if the country information does not exist with the kernel, + then the driver callback would not be called */ + + if (wait_result >= 0) { + + /* the driver callback was called. this means the country + regulatory information was found in the kernel database. + The callback would have updated the internal database. Here + update the country and the return value for the regulatory + domain */ + + VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO, + ("runtime country code is found in kernel db")); + + *pRegDomain = temp_reg_domain; + cur_reg_domain = temp_reg_domain; + linux_reg_cc[0] = country_code[0]; + linux_reg_cc[1] = country_code[1]; + + return VOS_STATUS_SUCCESS; + } + else { + + /* the country information has not been found in the kernel + database, return failure */ + + VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_WARN, + ("runtime country code is not found in kernel db")); + + return VOS_STATUS_E_EXISTS; + } + } + else if (COUNTRY_IE == source || COUNTRY_USER == source) + { #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0)) - return; + regulatory_hint_user(country_code,NL80211_USER_REG_HINT_USER); #else - return 0; + regulatory_hint_user(country_code); #endif - } + *pRegDomain = temp_reg_domain; + } - /* Intersect of 11d and crda settings */ - /* call sme_ChangeCountryCode to trigger read regd - for intersected new country settings */ - sme_ChangeCountryCode(pHddCtx->hHal, NULL, - &request->alpha2[0], NULL, pHddCtx->pvosContext); + } + + return VOS_STATUS_SUCCESS; +} + + +/* create_crda_regulatory_entry_from_regd should be called during init time */ +static int create_linux_regulatory_entry_from_regd(struct wiphy *wiphy, + struct regulatory_request *request, + v_U8_t nBandCapability) +{ + int i, j, n, domain_id; + int bw20_start_channel_index, bw20_end_channel_index; + int bw40_start_channel_index, bw40_end_channel_index; + v_CONTEXT_t pVosContext = NULL; + hdd_context_t *pHddCtx = NULL; + + if (wiphy->regd == NULL) + { + wiphy_dbg(wiphy, "error: wiphy->regd is NULL\n"); + return -1; + } + pVosContext = vos_get_global_context(VOS_MODULE_ID_SYS, NULL); + + if (NULL != pVosContext) + { + pHddCtx = vos_get_context(VOS_MODULE_ID_HDD, pVosContext); + if (NULL == pHddCtx) + { + VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + ("Invalid pHddCtx pointer") ); + } + else + { + pHddCtx->isVHT80Allowed = 0; + } + } + else + { + VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + ("Invalid pVosContext pointer") ); } - else if (request->initiator == NL80211_REGDOM_SET_BY_DRIVER) + + domain_id = temp_reg_domain; + + for (n = 0; n < NUM_RF_CHANNELS; n++) + pnvEFSTable->halnv.tables.regDomains[domain_id].channels[n].enabled = NV_CHANNEL_DISABLE; + + for (i = 0; i < wiphy->regd->n_reg_rules; i++) { - wiphy_dbg(wiphy, "info: set by driver\n"); - /* if set by driver itself, it means driver can accept the crda - regulatory settings and wiphy->regd should be populated with crda - settings. iwiphy->bands doesn't seem to set ht40 flags in kernel - correctly, this may be fixed by later kernel */ - if (create_crda_regulatory_entry_from_regd(wiphy, request, pHddCtx->cfg_ini->nBandCapability) == 0) + + wiphy_dbg(wiphy, "info: crda rule %d --------------------------------------------\n", i); + bw20_start_channel_index = + bw20_start_freq_to_channel_index(wiphy->regd->reg_rules[i].freq_range.start_freq_khz); + bw20_end_channel_index = + bw20_end_freq_to_channel_index(wiphy->regd->reg_rules[i].freq_range.end_freq_khz); + + if (bw20_start_channel_index == -1 || bw20_end_channel_index == -1) { - pr_info("crda entry created.\n"); - if (crda_alpha2[0] == request->alpha2[0] && crda_alpha2[1] == request->alpha2[1]) - { /* first CRDA request should be from init time */ - /* Change default country code to CRDA country code, assume indoor */ - pnvEFSTable->halnv.tables.defaultCountryTable.countryCode[0] = request->alpha2[0]; - pnvEFSTable->halnv.tables.defaultCountryTable.countryCode[1] = request->alpha2[1]; - pnvEFSTable->halnv.tables.defaultCountryTable.countryCode[2] = 'I'; - pnvEFSTable->halnv.tables.defaultCountryTable.regDomain = NUM_REG_DOMAINS-1; - wiphy_dbg(wiphy, "info: init time default country code is %c%c%c\n", - pnvEFSTable->halnv.tables.defaultCountryTable.countryCode[0], - pnvEFSTable->halnv.tables.defaultCountryTable.countryCode[1], - pnvEFSTable->halnv.tables.defaultCountryTable.countryCode[2]); - } - else /* second or later CRDA request after init time */ - { - wiphy_dbg(wiphy, "info: crda none-default country code is %c%c\n", - request->alpha2[0], request->alpha2[1]); - } - // hdd will read regd for this country after complete + wiphy_dbg(wiphy, "error: crda freq not supported, start freq (KHz) %d end freq %d\n", + wiphy->regd->reg_rules[i].freq_range.start_freq_khz, + wiphy->regd->reg_rules[i].freq_range.end_freq_khz); + continue; // skip this rull, but continue to next rule + } + + wiphy_dbg(wiphy, "20MHz start freq (KHz) %d end freq %d start ch index %d end ch index %d\n", + wiphy->regd->reg_rules[i].freq_range.start_freq_khz, + wiphy->regd->reg_rules[i].freq_range.end_freq_khz, + bw20_start_channel_index, bw20_end_channel_index); + + for (j=bw20_start_channel_index;j<=bw20_end_channel_index;j++) + { + if (channel_in_capable_band(j, nBandCapability) == VOS_FALSE) + { + wiphy_dbg(wiphy, "info: CH %d is not in capable band\n", + rfChannels[j].channelNum); + continue; // skip this channel, continue to next + } + + if (wiphy->regd->reg_rules[i].flags & NL80211_RRF_DFS) + { + pnvEFSTable->halnv.tables.regDomains[domain_id].channels[j].enabled = NV_CHANNEL_DFS; + wiphy_dbg(wiphy, "info: CH %d is DFS, max EIRP (mBm) is %d\n", rfChannels[j].channelNum, + wiphy->regd->reg_rules[i].power_rule.max_eirp); + } + else + { + pnvEFSTable->halnv.tables.regDomains[domain_id].channels[j].enabled = NV_CHANNEL_ENABLE; + wiphy_dbg(wiphy, "info: CH %d is enabled, no DFS, max EIRP (mBm) is %d\n", rfChannels[j].channelNum, + wiphy->regd->reg_rules[i].power_rule.max_eirp); + } + + /* max_eirp is in mBm (= 100 * dBm) unit */ + pnvEFSTable->halnv.tables.regDomains[domain_id].channels[j].pwrLimit = + (tANI_S8) ((wiphy->regd->reg_rules[i].power_rule.max_eirp)/100); } - complete(&pHddCtx->driver_crda_req); - /* Haven't seen any condition that will set by driver after init. - If we do, then we should also call sme_ChangeCountryCode */ + /* ignore CRDA max_antenna_gain typical is 3dBi, nv.bin antennaGain is + real gain which should be provided by the real design */ + if (wiphy->regd->reg_rules[i].freq_range.max_bandwidth_khz >= 40000) + { + if (wiphy->regd->reg_rules[i].freq_range.max_bandwidth_khz >= 80000) + { + wiphy_dbg(wiphy, "info: 80MHz (channel bonding) is allowed\n"); + if (NULL == pHddCtx) + { + VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + ("Invalid pHddCtx pointer") ); + } + else + { + pHddCtx->isVHT80Allowed = 1; + } + + + } + else + { + wiphy_dbg(wiphy, "info: ONLY 40MHz (channel bonding) is allowed\n"); + } + bw40_start_channel_index = + bw40_start_freq_to_channel_index(wiphy->regd->reg_rules[i].freq_range.start_freq_khz); + bw40_end_channel_index = + bw40_end_freq_to_channel_index(wiphy->regd->reg_rules[i].freq_range.end_freq_khz); + if (bw40_start_channel_index == -1 || bw40_end_channel_index == -1) + { + wiphy_dbg(wiphy, "error: crda freq not supported, start_freq_khz %d end_freq_khz %d\n", + wiphy->regd->reg_rules[i].freq_range.start_freq_khz, + wiphy->regd->reg_rules[i].freq_range.end_freq_khz); + continue; // skip this rull, but continue to next rule + } + + wiphy_dbg(wiphy, "40MHz start freq (KHz) %d end freq %d start ch index %d end ch index %d\n", + wiphy->regd->reg_rules[i].freq_range.start_freq_khz, + wiphy->regd->reg_rules[i].freq_range.end_freq_khz, + bw40_start_channel_index, bw40_end_channel_index); + for (j=bw40_start_channel_index;j<=bw40_end_channel_index;j++) + { + if (channel_in_capable_band(j, nBandCapability) == VOS_FALSE) + continue; // skip this channel, continue to next + if (wiphy->regd->reg_rules[i].flags & NL80211_RRF_DFS) + { + pnvEFSTable->halnv.tables.regDomains[domain_id].channels[j].enabled = NV_CHANNEL_DFS; + wiphy_dbg(wiphy, "info: 40MHz centered on CH %d is DFS\n", rfChannels[j].channelNum); + } + else + { + pnvEFSTable->halnv.tables.regDomains[domain_id].channels[j].enabled = NV_CHANNEL_ENABLE; + wiphy_dbg(wiphy, "info: 40MHz centered on CH %d is enabled, no DFS\n", rfChannels[j].channelNum); + } + /* set 40MHz channel power as half (- 3 dB) of 20MHz */ + pnvEFSTable->halnv.tables.regDomains[domain_id].channels[j].pwrLimit = + (tANI_S8) (((wiphy->regd->reg_rules[i].power_rule.max_eirp)/100)-3); + } + } } -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0)) - return; -#else + return 0; -#endif } + +/* create_linux_regulatory_entry to populate internal structures from wiphy */ +static int create_linux_regulatory_entry(struct wiphy *wiphy, + struct regulatory_request *request, + v_U8_t nBandCapability) +{ + int i, j, m; + int k = 0, n = 0; + v_CONTEXT_t pVosContext = NULL; + hdd_context_t *pHddCtx = NULL; + + pVosContext = vos_get_global_context(VOS_MODULE_ID_SYS, NULL); + + if (NULL != pVosContext) + { + pHddCtx = vos_get_context(VOS_MODULE_ID_HDD, pVosContext); + if (NULL == pHddCtx) + { + VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + ("Invalid pHddCtx pointer") ); + } + else + { + pHddCtx->isVHT80Allowed = 0; + } + } + else + { + VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + ("Invalid pVosContext pointer") ); + } + + /* 20MHz channels */ + if (nBandCapability == eCSR_BAND_24) + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO, + "BandCapability is set to 2G only\n"); + + for (i = 0, m = 0; ibands[i] == NULL) + { + + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + "error: wiphy->bands is NULL, i = %d\n", i); + return -1; + } + + /* internal channels[] is one continous array for both 2G and 5G bands + m is internal starting channel index for each band */ + + if (i == 0) + m = 0; + else + m = wiphy->bands[i-1]->n_channels + m; + + for (j = 0; j < wiphy->bands[i]->n_channels; j++) + { + /* k = (m + j) is internal current channel index for 20MHz channel + n is internal channel index for corresponding 40MHz channel */ + + k = m + j; + n = bw20_ch_index_to_bw40_ch_index(k); + + if (n == -1) + return -1; + + if (wiphy->bands[i]->channels[j].flags & IEEE80211_CHAN_DISABLED) + { + if (pnvEFSTable == NULL) + { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + "error: pnvEFSTable is NULL, probably not parsed nv.bin yet\n"); + return -1; + } + pnvEFSTable->halnv.tables.regDomains[temp_reg_domain].channels[k].enabled = + NV_CHANNEL_DISABLE; + pnvEFSTable->halnv.tables.regDomains[temp_reg_domain].channels[n].enabled = + NV_CHANNEL_DISABLE; + } + else if (wiphy->bands[i]->channels[j].flags & IEEE80211_CHAN_RADAR) + { + pnvEFSTable->halnv.tables.regDomains[temp_reg_domain].channels[k].enabled = + NV_CHANNEL_DFS; + + /* max_power is in mBm = 100 * dBm */ + pnvEFSTable->halnv.tables.regDomains[temp_reg_domain].channels[k].pwrLimit = + (tANI_S8) ((wiphy->bands[i]->channels[j].max_power)/100); + if ((wiphy->bands[i]->channels[j].flags & IEEE80211_CHAN_NO_HT40) == 0) + { + pnvEFSTable->halnv.tables.regDomains[temp_reg_domain].channels[n].enabled = + NV_CHANNEL_DFS; + + /* 40MHz channel power is half of 20MHz (-3dB) ?? */ + pnvEFSTable->halnv.tables.regDomains[temp_reg_domain].channels[n].pwrLimit = + (tANI_S8) (((wiphy->bands[i]->channels[j].max_power)/100)-3); + } + if ((wiphy->bands[i]->channels[j].flags & IEEE80211_CHAN_NO_80MHZ) == 0) + { + if (NULL == pHddCtx) + { + VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + ("Invalid pHddCtx pointer") ); + } + else + { + pHddCtx->isVHT80Allowed = 1; + } + } + } + else /* Enable is only last flag we support */ + { + pnvEFSTable->halnv.tables.regDomains[temp_reg_domain].channels[k].enabled = + NV_CHANNEL_ENABLE; + + /* max_power is in dBm */ + pnvEFSTable->halnv.tables.regDomains[temp_reg_domain].channels[k].pwrLimit = + (tANI_S8) ((wiphy->bands[i]->channels[j].max_power)/100); + if ((wiphy->bands[i]->channels[j].flags & IEEE80211_CHAN_NO_HT40) == 0) + { + pnvEFSTable->halnv.tables.regDomains[temp_reg_domain].channels[n].enabled = + NV_CHANNEL_ENABLE; + /* 40MHz channel power is half of 20MHz (-3dB) */ + pnvEFSTable->halnv.tables.regDomains[temp_reg_domain].channels[n].pwrLimit = + (tANI_S8) (((wiphy->bands[i]->channels[j].max_power)/100)-3); + } + if ((wiphy->bands[i]->channels[j].flags & IEEE80211_CHAN_NO_80MHZ) == 0) + { + if (NULL == pHddCtx) + { + VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + ("Invalid pHddCtx pointer") ); + } + else + { + pHddCtx->isVHT80Allowed = 1; + } + } + + } + + /* ignore CRDA max_antenna_gain typical is 3dBi, nv.bin antennaGain + is real gain which should be provided by the real design */ + } + } + + if (k == 0) + return -1; + + return 0; +} + + +/* + * Function: wlan_hdd_linux_reg_notifier + * This function is called from cfg80211 core to provide regulatory settings + * after new country is requested or intersected (init, user input or 11d) + * This function is used to create a CRDA regulatory settings entry into internal + * regulatory setting table. + */ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0)) +void wlan_hdd_linux_reg_notifier(struct wiphy *wiphy, + struct regulatory_request *request) +#else +int wlan_hdd_linux_reg_notifier(struct wiphy *wiphy, + struct regulatory_request *request) +#endif +{ + hdd_context_t *pHddCtx = wiphy_priv(wiphy); + tANI_U8 nBandCapability; + v_COUNTRYCODE_t country_code; + int i; + v_BOOL_t isVHT80Allowed; + + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO, + "cfg80211 reg notifier callback for country for initiator %d", request->initiator); + + if (NULL == pHddCtx) + { + VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + ("Invalid pHddCtx pointer") ); +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0)) + return; +#else + return 0; +#endif + } + + + /* first check if this callback is in response to the driver callback */ + + if (request->initiator == NL80211_REGDOM_SET_BY_DRIVER) + { + + nBandCapability = pHddCtx->cfg_ini->nBandCapability; + isVHT80Allowed = pHddCtx->isVHT80Allowed; + if (create_linux_regulatory_entry(wiphy, request, pHddCtx->cfg_ini->nBandCapability) == 0) + { + + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO, + (" regulatory entry created")); + } + if (pHddCtx->isVHT80Allowed != isVHT80Allowed) + { + hdd_checkandupdate_phymode( pHddCtx); + } + + complete(&pHddCtx->linux_reg_req); + } + + else if (request->initiator == NL80211_REGDOM_SET_BY_USER || + request->initiator == NL80211_REGDOM_SET_BY_CORE) + { + + /* first lookup the country in the local database */ + + country_code[0] = request->alpha2[0]; + country_code[1] = request->alpha2[1]; + + temp_reg_domain = REGDOMAIN_COUNT; + for (i = 0; i < countryInfoTable.countryCount && + REGDOMAIN_COUNT == temp_reg_domain; i++) + { + if (memcmp(country_code, countryInfoTable.countryInfo[i].countryCode, + VOS_COUNTRY_CODE_LEN) == 0) + { + /* country code is found */ + /* record the temporary regulatory_domain as well */ + temp_reg_domain = countryInfoTable.countryInfo[i].regDomain; + break; + } + } + + if (REGDOMAIN_COUNT == temp_reg_domain) + temp_reg_domain = REGDOMAIN_WORLD; + + nBandCapability = pHddCtx->cfg_ini->nBandCapability; + isVHT80Allowed = pHddCtx->isVHT80Allowed; + if (create_linux_regulatory_entry(wiphy, request, + pHddCtx->cfg_ini->nBandCapability) == 0) + { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO, + (" regulatory entry created")); + + } + if (pHddCtx->isVHT80Allowed != isVHT80Allowed) + { + hdd_checkandupdate_phymode( pHddCtx); + } + + cur_reg_domain = temp_reg_domain; + linux_reg_cc[0] = country_code[0]; + linux_reg_cc[1] = country_code[1]; + + /* now pass the new country information to sme */ + if (request->alpha2[0] == '0' && request->alpha2[1] == '0') + { + sme_GenericChangeCountryCode(pHddCtx->hHal, country_code, + REGDOMAIN_COUNT); + } + else + { + sme_GenericChangeCountryCode(pHddCtx->hHal, country_code, + temp_reg_domain); + } + + } +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0)) + return; +#else + return 0; +#endif +} + + +/* initialize wiphy from NV.bin */ +VOS_STATUS vos_init_wiphy_from_nv_bin(void) +{ + int i, j, m; + int k = 0; + v_REGDOMAIN_t reg_domain; + v_CONTEXT_t pVosContext = NULL; + hdd_context_t *pHddCtx = NULL; + struct wiphy *wiphy = NULL; + + pVosContext = vos_get_global_context(VOS_MODULE_ID_SYS, NULL); + + if (NULL != pVosContext) + pHddCtx = vos_get_context(VOS_MODULE_ID_HDD, pVosContext); + else + return VOS_STATUS_E_EXISTS; + + if (NULL == pHddCtx) + { + VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + ("Invalid pHddCtx pointer") ); + return VOS_STATUS_E_FAULT; + } + + wiphy = pHddCtx->wiphy; + + if (('0' == pnvEFSTable->halnv.tables.defaultCountryTable.countryCode[0]) + && + ('0' == pnvEFSTable->halnv.tables.defaultCountryTable.countryCode[1])) + { + /* default country is world roaming */ + + reg_domain = REGDOMAIN_WORLD; + wiphy->flags |= WIPHY_FLAG_CUSTOM_REGULATORY; + } + else if (REGDOMAIN_WORLD == + pnvEFSTable->halnv.tables.defaultCountryTable.regDomain) { + + reg_domain = pnvEFSTable->halnv.tables.defaultCountryTable.regDomain; + wiphy->flags |= WIPHY_FLAG_CUSTOM_REGULATORY; + } + else { + + reg_domain = pnvEFSTable->halnv.tables.defaultCountryTable.regDomain; + wiphy->flags |= WIPHY_FLAG_STRICT_REGULATORY; + } + m = 0; + for (i = 0; i < IEEE80211_NUM_BANDS; i++) + { + + if (wiphy->bands[i] == NULL) + { + pr_info("error: wiphy->bands[i] is NULL, i = %d\n", i); + continue; + } + + /* internal channels[] is one continous array for both 2G and 5G bands + m is internal starting channel index for each band */ + + for (j = 0; j < wiphy->bands[i]->n_channels; j++) + { + /* k = (m + j) is internal current channel index */ + k = m + j; + + if (pnvEFSTable->halnv.tables.regDomains[reg_domain].channels[k].enabled == + NV_CHANNEL_DISABLE) + wiphy->bands[i]->channels[j].flags |= IEEE80211_CHAN_DISABLED; + + else if (pnvEFSTable->halnv.tables.regDomains[reg_domain].channels[k].enabled == + NV_CHANNEL_DFS) { + + wiphy->bands[i]->channels[j].flags |= IEEE80211_CHAN_PASSIVE_SCAN; + + wiphy->bands[i]->channels[j].max_power = + (pnvEFSTable->halnv.tables.regDomains[reg_domain].channels[k].pwrLimit)*100; + } + + else if (pnvEFSTable->halnv.tables.regDomains[reg_domain].channels[k].enabled == + NV_CHANNEL_ENABLE) { + + wiphy->bands[i]->channels[j].max_power = + (pnvEFSTable->halnv.tables.regDomains[reg_domain].channels[k].pwrLimit)*100; + } + } + + m += wiphy->bands[i]->n_channels; + } + + return VOS_STATUS_SUCCESS; +} + + +#else + +/**------------------------------------------------------------------------ + \brief vos_nv_setRegDomain - + \param clientCtxt - Client Context, Not used for PRIMA + regId - Regulatory Domain ID + sendRegHint - send hint to nl80211 + \return status set REG domain operation + \sa + -------------------------------------------------------------------------*/ +VOS_STATUS vos_nv_setRegDomain(void * clientCtxt, v_REGDOMAIN_t regId, + v_BOOL_t sendRegHint) +{ + v_CONTEXT_t pVosContext = NULL; + hdd_context_t *pHddCtx = NULL; + struct wiphy *wiphy = NULL; + /* Client Context Argumant not used for PRIMA */ + if (regId >= REGDOMAIN_COUNT) + { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + "VOS set reg domain, invalid REG domain ID %d", regId); + return VOS_STATUS_E_INVAL; + } + + pVosContext = vos_get_global_context(VOS_MODULE_ID_SYS, NULL); + if (NULL != pVosContext) + pHddCtx = vos_get_context(VOS_MODULE_ID_HDD, pVosContext); + else + return VOS_STATUS_E_EXISTS; + /* Set correct channel information based on REG Domain */ + regChannels = pnvEFSTable->halnv.tables.regDomains[regId].channels; + + /* when CRDA is not running then we are world roaming. + In this case if 11d is enabled, then country code should + be update on basis of world roaming */ + if (NULL != pHddCtx && sendRegHint) + { + wiphy = pHddCtx->wiphy; + regulatory_hint(wiphy, "00"); + } + return VOS_STATUS_SUCCESS; +} + + +/**------------------------------------------------------------------------ + \brief vos_nv_getRegDomainFromCountryCode() - get the regulatory domain of + a country given its country code + The \a vos_nv_getRegDomainFromCountryCode() returns the regulatory domain of + a country given its country code. This is done from reading a cached + copy of the binary file. + \param pRegDomain - pointer to regulatory domain + \param countryCode - country code + \param source - source of the country code + \return VOS_STATUS_SUCCESS - regulatory domain is found for the given country + VOS_STATUS_E_FAULT - invalid pointer error + VOS_STATUS_E_EMPTY - country code table is empty + VOS_STATUS_E_EXISTS - given country code does not exist in table + \sa + -------------------------------------------------------------------------*/ +VOS_STATUS vos_nv_getRegDomainFromCountryCode( v_REGDOMAIN_t *pRegDomain, + const v_COUNTRYCODE_t countryCode, v_CountryInfoSource_t source) +{ + int i; + v_CONTEXT_t pVosContext = NULL; + hdd_context_t *pHddCtx = NULL; + struct wiphy *wiphy = NULL; + int status; + + // sanity checks + if (NULL == pRegDomain) + { + VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + ("Invalid reg domain pointer\n") ); + return VOS_STATUS_E_FAULT; + } + *pRegDomain = REGDOMAIN_COUNT; + + if (NULL == countryCode) + { + VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + ("Country code array is NULL\r\n") ); + return VOS_STATUS_E_FAULT; + } + if (0 == countryInfoTable.countryCount) + { + VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + ("Reg domain table is empty\r\n") ); + return VOS_STATUS_E_EMPTY; + } + /* If CRDA regulatory settings is valid, i.e. crda is enabled + and reg_notifier is called back. + Intercept here and redirect to the Reg domain table's CRDA + entry if country code is crda's country. + last one NUM_REG_DOMAINS-1 is reserved for crda */ + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO_HIGH, + "vos_nv_getRegDomainFromCountryCode %c%c\n", + countryCode[0], countryCode[1]); + + if (crda_regulatory_entry_valid == VOS_TRUE) + { + if (crda_alpha2[0]==countryCode[0] && crda_alpha2[1]==countryCode[1]) + { + *pRegDomain = NUM_REG_DOMAINS-1; + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO_HIGH, + "vos_nv_getRegDomainFromCountryCode return crda init entry\n"); + return VOS_STATUS_SUCCESS; + } + if (run_time_alpha2[0]==countryCode[0] && + run_time_alpha2[1]==countryCode[1] && + crda_regulatory_run_time_entry_valid == VOS_TRUE) + { + *pRegDomain = NUM_REG_DOMAINS-2; + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO_HIGH, + "vos_nv_getRegDomainFromCountryCode return crda none-default country entry\n"); + return VOS_STATUS_SUCCESS; + } + else + { + crda_regulatory_run_time_entry_valid = VOS_FALSE; + pVosContext = vos_get_global_context(VOS_MODULE_ID_SYS, NULL); + if (NULL != pVosContext) + pHddCtx = vos_get_context(VOS_MODULE_ID_HDD, pVosContext); + else + return VOS_STATUS_E_EXISTS; + if (NULL == pHddCtx) + { + VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + ("Invalid pHddCtx pointer\r\n") ); + return VOS_STATUS_E_FAULT; + } + + wiphy = pHddCtx->wiphy; + + INIT_COMPLETION(pHddCtx->driver_crda_req); + regulatory_hint(wiphy, countryCode); + status = wait_for_completion_interruptible_timeout( + &pHddCtx->driver_crda_req, + msecs_to_jiffies(CRDA_WAIT_TIME)); + if (!status) + { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + "%s: Timeout waiting for CRDA REQ", __func__); + } + + if (crda_regulatory_run_time_entry_valid == VOS_TRUE) + { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO_HIGH, + "vos_nv_getRegDomainFromCountryCode return crda new none-default country entry\n"); + return VOS_STATUS_SUCCESS; + } + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + "vos_nv_getRegDomainFromCountryCode failed to get crda new none-default country entry\n"); + return VOS_STATUS_E_EXISTS; + } + } + + // iterate the country info table until end of table or the country code + // is found + for (i = 0; i < countryInfoTable.countryCount && + REGDOMAIN_COUNT == *pRegDomain; i++) + { + if (memcmp(countryCode, countryInfoTable.countryInfo[i].countryCode, + VOS_COUNTRY_CODE_LEN) == 0) + { + // country code is found + *pRegDomain = countryInfoTable.countryInfo[i].regDomain; + } + } + if (REGDOMAIN_COUNT != *pRegDomain) + { + return VOS_STATUS_SUCCESS; + } + else + { + VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_WARN, + ("country code is not found\r\n")); + return VOS_STATUS_E_EXISTS; + } +} +/* FUNCTION: vos_nv_change_country_code_cb +* to wait for contry code completion +*/ +void* vos_nv_change_country_code_cb(void *pAdapter) +{ + struct completion *change_code_cng = pAdapter; + complete(change_code_cng); + return NULL; +} + +/* + * Function: wlan_hdd_crda_reg_notifier + * This function is called from cfg80211 core to provide regulatory settings + * after new country is requested or intersected (init, user input or 11d) + * This function is used to create a CRDA regulatory settings entry into internal + * regulatory setting table. + */ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0)) +void wlan_hdd_crda_reg_notifier(struct wiphy *wiphy, + struct regulatory_request *request) +#else +int wlan_hdd_crda_reg_notifier(struct wiphy *wiphy, + struct regulatory_request *request) +#endif +{ + hdd_context_t *pHddCtx = wiphy_priv(wiphy); + v_REGDOMAIN_t domainIdCurrent; + tANI_U8 ccode[WNI_CFG_COUNTRY_CODE_LEN]; + tANI_U8 uBufLen = WNI_CFG_COUNTRY_CODE_LEN; + tANI_U8 nBandCapability; + int i,j,k,m; + + wiphy_dbg(wiphy, "info: cfg80211 reg_notifier callback for country" + " %c%c\n", request->alpha2[0], request->alpha2[1]); + if (request->initiator == NL80211_REGDOM_SET_BY_USER) + { + int status; + wiphy_dbg(wiphy, "info: set by user\n"); + init_completion(&change_country_code); + /* We will process hints by user from nl80211 in driver. + * sme_ChangeCountryCode will set the country to driver + * and update the regdomain. + * when we return back to nl80211 from this callback, the nl80211 will + * send NL80211_CMD_REG_CHANGE event to the hostapd waking it up to + * query channel list from nl80211. Thus we need to update the channels + * according to reg domain set by user before returning to nl80211 so + * that hostapd will gets the updated channels. + * The argument sendRegHint in sme_ChangeCountryCode is + * set to eSIR_FALSE (hint is from nl80211 and thus + * no need to notify nl80211 back)*/ + status = sme_ChangeCountryCode(pHddCtx->hHal, + (void *)(tSmeChangeCountryCallback) + vos_nv_change_country_code_cb, + request->alpha2, + &change_country_code, + pHddCtx->pvosContext, + eSIR_FALSE, + eSIR_FALSE); + if (eHAL_STATUS_SUCCESS == status) + { + status = wait_for_completion_interruptible_timeout( + &change_country_code, + msecs_to_jiffies(WLAN_WAIT_TIME_COUNTRY)); + if(status <= 0) + { + wiphy_dbg(wiphy, "info: set country timed out\n"); + } + } + else + { + wiphy_dbg(wiphy, "info: unable to set country by user\n"); +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0)) + return; +#else + return 0; +#endif + } + // ToDo + /* Don't change default country code to CRDA country code by user req */ + /* Shouldcall sme_ChangeCountryCode to send a message to trigger read + regd for new country settings */ + //sme_ChangeCountryCode(pHddCtx->hHal, NULL, + // &country_code[0], pAdapter, pHddCtx->pvosContext); + } + + if (request->initiator == NL80211_REGDOM_SET_BY_COUNTRY_IE) + { + wiphy_dbg(wiphy, "info: set by country IE\n"); + if (create_crda_regulatory_entry(wiphy, request, pHddCtx->cfg_ini->nBandCapability) != 0) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0)) + return; +#else + return 0; +#endif + // ToDo + /* Intersect of 11d and crda settings */ + + /* Don't change default country code to CRDA country code by 11d req */ + /* for every adapter call sme_ChangeCountryCode to trigger read regd + for intersected new country settings */ + // sme_ChangeCountryCode(pHddCtx->hHal, NULL, + // &country_code[0], pAdapter, pHddCtx->pvosContext); + } + else if (request->initiator == NL80211_REGDOM_SET_BY_DRIVER || + (request->initiator == NL80211_REGDOM_SET_BY_CORE)|| + (request->initiator == NL80211_REGDOM_SET_BY_USER)) + { + if ( eHAL_STATUS_SUCCESS != sme_GetCountryCode(pHddCtx->hHal, ccode, &uBufLen)) + { + wiphy_dbg(wiphy, "info: set by driver CCODE ERROR\n"); +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0)) + return; +#else + return 0; +#endif + } + if (eHAL_STATUS_SUCCESS != sme_GetRegulatoryDomainForCountry (pHddCtx->hHal, + ccode, (v_REGDOMAIN_t *) &domainIdCurrent)) + { + wiphy_dbg(wiphy, "info: set by driver ERROR\n"); +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0)) + return; +#else + return 0; +#endif + } + + wiphy_dbg(wiphy, "country: %c%c set by driver\n",ccode[0],ccode[1]); + /* if set by driver itself, it means driver can accept the crda + regulatory settings and wiphy->regd should be populated with crda + settings. iwiphy->bands doesn't seem to set ht40 flags in kernel + correctly, this may be fixed by later kernel */ + + nBandCapability = pHddCtx->cfg_ini->nBandCapability; + for (i = 0, m = 0; i < IEEE80211_NUM_BANDS; i++) + { + if (NULL == wiphy->bands[i]) + { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + "error: wiphy->bands[i] is NULL, i = %d", i); + continue; + } + + // internal channels[] is one continous array for both 2G and 5G bands + // m is internal starting channel index for each band + if (0 == i) + { + m = 0; + } + else + { + m = wiphy->bands[i-1]?wiphy->bands[i-1]->n_channels + m:m; + } + + for (j=0; jbands[i]->n_channels; j++) + { + // k = (m + j) is internal current channel index for 20MHz channel + // n is internal channel index for corresponding 40MHz channel + k = m + j; + if (IEEE80211_BAND_2GHZ == i && eCSR_BAND_5G == nBandCapability) // 5G only + { + // Enable social channels for P2P + if ((2412 == wiphy->bands[i]->channels[j].center_freq || + 2437 == wiphy->bands[i]->channels[j].center_freq || + 2462 == wiphy->bands[i]->channels[j].center_freq ) && + NV_CHANNEL_ENABLE == regChannels[k].enabled) + { + wiphy->bands[i]->channels[j].flags &= ~IEEE80211_CHAN_DISABLED; + } + else + { + wiphy->bands[i]->channels[j].flags |= IEEE80211_CHAN_DISABLED; + } + continue; + } + else if (IEEE80211_BAND_5GHZ == i && eCSR_BAND_24 == nBandCapability) // 2G only + { + wiphy->bands[i]->channels[j].flags |= IEEE80211_CHAN_DISABLED; + continue; + } + + if (NV_CHANNEL_DISABLE == regChannels[k].enabled || + NV_CHANNEL_INVALID == regChannels[k].enabled) + { + wiphy->bands[i]->channels[j].flags |= IEEE80211_CHAN_DISABLED; + } + else if (NV_CHANNEL_DFS == regChannels[k].enabled) + { + wiphy->bands[i]->channels[j].flags &= ~(IEEE80211_CHAN_DISABLED + |IEEE80211_CHAN_RADAR); + wiphy->bands[i]->channels[j].flags |= IEEE80211_CHAN_PASSIVE_SCAN; + } + else + { + wiphy->bands[i]->channels[j].flags &= ~(IEEE80211_CHAN_DISABLED + |IEEE80211_CHAN_PASSIVE_SCAN + |IEEE80211_CHAN_NO_IBSS + |IEEE80211_CHAN_RADAR); + } + } + } + + /* Haven't seen any condition that will set by driver after init. + If we do, then we should also call sme_ChangeCountryCode */ + if (wiphy->bands[IEEE80211_BAND_5GHZ]) + { + for (j=0; jbands[IEEE80211_BAND_5GHZ]->n_channels; j++) + { + // UNII-1 band channels are passive when domain is FCC. + if ((wiphy->bands[IEEE80211_BAND_5GHZ ]->channels[j].center_freq == 5180 || + wiphy->bands[IEEE80211_BAND_5GHZ]->channels[j].center_freq == 5200 || + wiphy->bands[IEEE80211_BAND_5GHZ]->channels[j].center_freq == 5220 || + wiphy->bands[IEEE80211_BAND_5GHZ]->channels[j].center_freq == 5240) && + ((ccode[0]== 'U'&& ccode[1]=='S') && pHddCtx->nEnableStrictRegulatoryForFCC)) + { + wiphy->bands[IEEE80211_BAND_5GHZ]->channels[j].flags |= IEEE80211_CHAN_PASSIVE_SCAN; + } + else if ((wiphy->bands[IEEE80211_BAND_5GHZ]->channels[j].center_freq == 5180 || + wiphy->bands[IEEE80211_BAND_5GHZ]->channels[j].center_freq == 5200 || + wiphy->bands[IEEE80211_BAND_5GHZ]->channels[j].center_freq == 5220 || + wiphy->bands[IEEE80211_BAND_5GHZ]->channels[j].center_freq == 5240) && + ((ccode[0]!= 'U'&& ccode[1]!='S') || !pHddCtx->nEnableStrictRegulatoryForFCC)) + { + wiphy->bands[IEEE80211_BAND_5GHZ]->channels[j].flags &= ~IEEE80211_CHAN_PASSIVE_SCAN; + } + } + } + + if (request->initiator == NL80211_REGDOM_SET_BY_CORE) + { + request->processed = 1; + } + } + + complete(&pHddCtx->wiphy_channel_update_event); + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0)) + return; +#else + return 0; +#endif +} + +#endif diff --git a/CORE/VOSS/src/vos_packet.c b/CORE/VOSS/src/vos_packet.c index c010d505801d..2554959c2d09 100644 --- a/CORE/VOSS/src/vos_packet.c +++ b/CORE/VOSS/src/vos_packet.c @@ -48,7 +48,7 @@ #include #include #include -#include +#include #ifdef QCA_WIFI_2_0 #include "adf_nbuf.h" #include "vos_memory.h" @@ -214,6 +214,7 @@ VOS_STATUS vos_pkt_extract_data( vos_pkt_t *pPacket, } #else + /*-------------------------------------------------------------------------- Preprocessor definitions and constants ------------------------------------------------------------------------*/ @@ -334,21 +335,23 @@ static void vos_pkti_replenish_raw_pool(void) vos_pkt_get_packet_callback callback; // if there are no packets in the replenish pool then we can't do anything + mutex_lock(&gpVosPacketContext->rxReplenishListLock); if (likely(0 == gpVosPacketContext->rxReplenishListCount)) { + mutex_unlock(&gpVosPacketContext->rxReplenishListLock); return; } // we only replenish if the Rx Raw pool is empty or the Replenish pool // reaches a high water mark - mutex_lock(&gpVosPacketContext->mlock); - + mutex_lock(&gpVosPacketContext->rxRawFreeListLock); - if ((gpVosPacketContext->rxReplenishListCount < VPKT_RX_REPLENISH_THRESHOLD) - && - (!list_empty(&gpVosPacketContext->rxRawFreeList))) + if ((gpVosPacketContext->rxReplenishListCount < + gpVosPacketContext->numOfRxRawPackets/4) && + (!list_empty(&gpVosPacketContext->rxRawFreeList))) { - mutex_unlock(&gpVosPacketContext->mlock); + mutex_unlock(&gpVosPacketContext->rxRawFreeListLock); + mutex_unlock(&gpVosPacketContext->rxReplenishListLock); return; } @@ -415,12 +418,14 @@ static void vos_pkti_replenish_raw_pool(void) callback = gpVosPacketContext->rxRawLowResourceInfo.callback; gpVosPacketContext->rxRawLowResourceInfo.callback = NULL; - mutex_unlock(&gpVosPacketContext->mlock); + mutex_unlock(&gpVosPacketContext->rxRawFreeListLock); + mutex_unlock(&gpVosPacketContext->rxReplenishListLock); callback(pVosPacket, gpVosPacketContext->rxRawLowResourceInfo.userData); } else { - mutex_unlock(&gpVosPacketContext->mlock); + mutex_unlock(&gpVosPacketContext->rxRawFreeListLock); + mutex_unlock(&gpVosPacketContext->rxReplenishListLock); } } @@ -520,7 +525,7 @@ VOS_STATUS vos_packet_open( v_VOID_t *pVosContext, if (sizeof(vos_pkt_context_t) != vosPacketContextSize) { VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, - "VPKT [%d]: invalid vosPacketContextSize, %d vs %d", + "VPKT [%d]: invalid vosPacketContextSize, %zu vs %d", __LINE__, sizeof(vos_pkt_context_t), vosPacketContextSize); vosStatus = VOS_STATUS_E_INVAL; break; @@ -537,6 +542,7 @@ VOS_STATUS vos_packet_open( v_VOID_t *pVosContext, pVosPacketContext->vosContext = pVosContext; // initialize the rx Replenish pool (initially empty) + mutex_init(&gpVosPacketContext->rxReplenishListLock); INIT_LIST_HEAD(&pVosPacketContext->rxReplenishList); pVosPacketContext->rxReplenishListCount = 0; @@ -544,12 +550,15 @@ VOS_STATUS vos_packet_open( v_VOID_t *pVosContext, freePacketIndex = 0; // initialize the rxRaw free list pool + mutex_init(&gpVosPacketContext->rxRawFreeListLock); pFreeList = &pVosPacketContext->rxRawFreeList; pVosPacketContext->rxRawFreeListCount = 0; INIT_LIST_HEAD(pFreeList); + pVosPacketContext->numOfRxRawPackets = vos_pkt_get_num_of_rx_raw_pkts(); + // fill the rxRaw free list - for (idx = 0; idx < VPKT_NUM_RX_RAW_PACKETS; idx++) + for (idx = 0; idx < pVosPacketContext->numOfRxRawPackets; idx++) { pPkt = &pVosPacketContext->vosPktBuffers[freePacketIndex++]; vosStatus = vos_pkti_packet_init(pPkt, VOS_PKT_TYPE_RX_RAW); @@ -576,6 +585,7 @@ VOS_STATUS vos_packet_open( v_VOID_t *pVosContext, } // initialize the txData free list pool + mutex_init(&gpVosPacketContext->txDataFreeListLock); pFreeList = &pVosPacketContext->txDataFreeList; INIT_LIST_HEAD(pFreeList); @@ -605,10 +615,10 @@ VOS_STATUS vos_packet_open( v_VOID_t *pVosContext, } // initialize the txMgmt free list pool + mutex_init(&gpVosPacketContext->txMgmtFreeListLock); pFreeList = &pVosPacketContext->txMgmtFreeList; INIT_LIST_HEAD(pFreeList); - mutex_init(&gpVosPacketContext->mlock); // fill the txMgmt free list for (idx = 0; idx < VPKT_NUM_TX_MGMT_PACKETS; idx++) { @@ -682,19 +692,27 @@ VOS_STATUS vos_packet_close( v_PVOID_t pVosContext ) return VOS_STATUS_E_INVAL; } - mutex_lock(&gpVosPacketContext->mlock); + + mutex_lock(&gpVosPacketContext->txMgmtFreeListLock); (void) vos_pkti_list_destroy(&gpVosPacketContext->txMgmtFreeList); + mutex_unlock(&gpVosPacketContext->txMgmtFreeListLock); + + mutex_lock(&gpVosPacketContext->txDataFreeListLock); (void) vos_pkti_list_destroy(&gpVosPacketContext->txDataFreeList); - (void) vos_pkti_list_destroy(&gpVosPacketContext->rxRawFreeList); - (void) vos_pkti_list_destroy(&gpVosPacketContext->rxReplenishList); + gpVosPacketContext->uctxDataFreeListCount = 0; + mutex_unlock(&gpVosPacketContext->txDataFreeListLock); + mutex_lock(&gpVosPacketContext->rxRawFreeListLock); + (void) vos_pkti_list_destroy(&gpVosPacketContext->rxRawFreeList); gpVosPacketContext->rxRawFreeListCount = 0; + mutex_unlock(&gpVosPacketContext->rxRawFreeListLock); + + mutex_lock(&gpVosPacketContext->rxReplenishListLock); + (void) vos_pkti_list_destroy(&gpVosPacketContext->rxReplenishList); gpVosPacketContext->rxReplenishListCount = 0; - gpVosPacketContext->uctxDataFreeListCount = 0; + mutex_unlock(&gpVosPacketContext->rxReplenishListLock); - mutex_unlock(&gpVosPacketContext->mlock); - gpVosPacketContext->uctxDataFreeListCount = 0; return VOS_STATUS_SUCCESS; } @@ -789,6 +807,8 @@ VOS_STATUS vos_pkt_get_packet( vos_pkt_t **ppPacket, vos_pkt_low_resource_info *pLowResourceInfo; struct vos_pkt_t *pVosPacket; v_SIZE_t *pCount = NULL; + struct mutex *mlock; + // Validate the return parameter pointer if (unlikely(NULL == ppPacket)) { @@ -822,6 +842,7 @@ VOS_STATUS vos_pkt_get_packet( vos_pkt_t **ppPacket, case VOS_PKT_TYPE_RX_RAW: pPktFreeList = &gpVosPacketContext->rxRawFreeList; pLowResourceInfo = &gpVosPacketContext->rxRawLowResourceInfo; + mlock = &gpVosPacketContext->rxRawFreeListLock; // see if we need to replenish the Rx Raw pool vos_pkti_replenish_raw_pool(); @@ -832,6 +853,7 @@ VOS_STATUS vos_pkt_get_packet( vos_pkt_t **ppPacket, case VOS_PKT_TYPE_TX_802_11_MGMT: pPktFreeList = &gpVosPacketContext->txMgmtFreeList; pLowResourceInfo = &gpVosPacketContext->txMgmtLowResourceInfo; + mlock = &gpVosPacketContext->txMgmtFreeListLock; break; default: @@ -846,13 +868,13 @@ VOS_STATUS vos_pkt_get_packet( vos_pkt_t **ppPacket, // then we know we are already in a low-resource condition if (unlikely(pLowResourceInfo->callback)) { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_WARN, "VPKT [%d]: Low resource handler already registered", __LINE__); return VOS_STATUS_E_ALREADY; } - mutex_lock(&gpVosPacketContext->mlock); + mutex_lock(mlock); // are there vos packets on the associated free pool? if (unlikely(list_empty(pPktFreeList))) { @@ -863,7 +885,7 @@ VOS_STATUS vos_pkt_get_packet( vos_pkt_t **ppPacket, VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "VPKT [%d]: Low resource condition and no callback provided", __LINE__); - mutex_unlock(&gpVosPacketContext->mlock); + mutex_unlock(mlock); return VOS_STATUS_E_FAILURE; } @@ -875,7 +897,7 @@ VOS_STATUS vos_pkt_get_packet( vos_pkt_t **ppPacket, VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_WARN, "VPKT [%d]: Low resource condition for packet type %d[%s]", __LINE__, pktType, vos_pkti_packet_type_str(pktType)); - mutex_unlock(&gpVosPacketContext->mlock); + mutex_unlock(mlock); return VOS_STATUS_E_RESOURCES; } @@ -887,7 +909,7 @@ VOS_STATUS vos_pkt_get_packet( vos_pkt_t **ppPacket, { (*pCount)--; } - mutex_unlock(&gpVosPacketContext->mlock); + mutex_unlock(mlock); // clear out the User Data pointers in the voss packet.. memset(&pVosPacket->pvUserData, 0, sizeof(pVosPacket->pvUserData)); @@ -1008,6 +1030,7 @@ VOS_STATUS vos_pkt_wrap_data_packet( vos_pkt_t **ppPacket, struct list_head *pPktFreeList; vos_pkt_low_resource_info *pLowResourceInfo; struct vos_pkt_t *pVosPacket; + struct mutex *mlock; // Validate the return parameter pointer if (unlikely(NULL == ppPacket)) @@ -1030,15 +1053,19 @@ VOS_STATUS vos_pkt_wrap_data_packet( vos_pkt_t **ppPacket, // determine which packet pool and low resource block we should use. pPktFreeList = &gpVosPacketContext->txDataFreeList; pLowResourceInfo = &gpVosPacketContext->txDataLowResourceInfo; + mlock = &gpVosPacketContext->txDataFreeListLock; + + mutex_lock(mlock); // is there already a low resource callback registered for this pool? // we only support one callback per pool, so if one is already registered // then we know we are already in a low-resource condition if (unlikely(pLowResourceInfo->callback)) { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_WARN, "VPKT [%d]: Low resource handler already registered", __LINE__); + mutex_unlock(mlock); return VOS_STATUS_E_ALREADY; } @@ -1052,6 +1079,7 @@ VOS_STATUS vos_pkt_wrap_data_packet( vos_pkt_t **ppPacket, VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "VPKT [%d]: Low resource condition and no callback provided", __LINE__); + mutex_unlock(mlock); return VOS_STATUS_E_FAILURE; } @@ -1062,6 +1090,7 @@ VOS_STATUS vos_pkt_wrap_data_packet( vos_pkt_t **ppPacket, VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_WARN, "VPKT [%d]: Low resource condition for pool %s", __LINE__, vos_pkti_packet_type_str(pktType)); + mutex_unlock(mlock); return VOS_STATUS_E_RESOURCES; } @@ -1069,6 +1098,7 @@ VOS_STATUS vos_pkt_wrap_data_packet( vos_pkt_t **ppPacket, pVosPacket = list_first_entry(pPktFreeList, struct vos_pkt_t, node); list_del(&pVosPacket->node); gpVosPacketContext->uctxDataFreeListCount --; + mutex_unlock(mlock); // clear out the User Data pointers in the voss packet.. memset(&pVosPacket->pvUserData, 0, sizeof(pVosPacket->pvUserData)); @@ -1422,6 +1452,7 @@ VOS_STATUS vos_pkt_return_packet( vos_pkt_t *pPacket ) v_SIZE_t *pCount; VOS_PKT_TYPE packetType = VOS_PKT_TYPE_TX_802_3_DATA; v_BOOL_t lowResource = VOS_FALSE; + struct mutex * mlock; // Validate the input parameter pointer if (unlikely(NULL == pPacket)) @@ -1466,12 +1497,14 @@ VOS_STATUS vos_pkt_return_packet( vos_pkt_t *pPacket ) pPktFreeList = &gpVosPacketContext->rxRawFreeList; pLowResourceInfo = &gpVosPacketContext->rxRawLowResourceInfo; pCount = &gpVosPacketContext->rxRawFreeListCount; + mlock = &gpVosPacketContext->rxRawFreeListLock; } else { pPktFreeList = &gpVosPacketContext->rxReplenishList; pLowResourceInfo = NULL; pCount = &gpVosPacketContext->rxReplenishListCount; + mlock = &gpVosPacketContext->rxReplenishListLock; } packetType = VOS_PKT_TYPE_RX_RAW; break; @@ -1480,12 +1513,14 @@ VOS_STATUS vos_pkt_return_packet( vos_pkt_t *pPacket ) pPktFreeList = &gpVosPacketContext->txMgmtFreeList; pLowResourceInfo = &gpVosPacketContext->txMgmtLowResourceInfo; - + mlock = &gpVosPacketContext->txMgmtFreeListLock; + break; case VOS_PKT_TYPE_TX_802_3_DATA: pPktFreeList = &gpVosPacketContext->txDataFreeList; pLowResourceInfo = &gpVosPacketContext->txDataLowResourceInfo; + mlock = &gpVosPacketContext->txDataFreeListLock; gpVosPacketContext->uctxDataFreeListCount ++; break; @@ -1505,10 +1540,10 @@ VOS_STATUS vos_pkt_return_packet( vos_pkt_t *pPacket ) // pLowResourceInfo->callback is modified from threads (different CPU's). // So a mutex is enough to protect is against a race condition. // mutex is SMP safe - mutex_lock(&gpVosPacketContext->mlock); + mutex_lock(mlock); callback = pLowResourceInfo->callback; pLowResourceInfo->callback = NULL; - mutex_unlock(&gpVosPacketContext->mlock); + mutex_unlock(mlock); // only one context can get a valid callback if(callback) @@ -1548,14 +1583,14 @@ VOS_STATUS vos_pkt_return_packet( vos_pkt_t *pPacket ) "VPKT [%d]: [%p] Packet returned, type %d[%s]", __LINE__, pPacket, pPacket->packetType, vos_pkti_packet_type_str(pPacket->packetType)); - mutex_lock(&gpVosPacketContext->mlock); + mutex_lock(mlock); list_add_tail(&pPacket->node, pPktFreeList); - mutex_unlock(&gpVosPacketContext->mlock); - + if (pCount) { (*pCount)++; } + mutex_unlock(mlock); } // move to next packet in the chain @@ -3053,6 +3088,8 @@ VOS_STATUS vos_pkt_get_available_buffer_pool (VOS_PKT_TYPE pktType, struct list_head *pList; struct list_head *pNode; v_SIZE_t count; + struct mutex *mlock; + if (NULL == vosFreeBuffer) { return VOS_STATUS_E_INVAL; @@ -3062,6 +3099,7 @@ VOS_STATUS vos_pkt_get_available_buffer_pool (VOS_PKT_TYPE pktType, { case VOS_PKT_TYPE_TX_802_11_MGMT: pList = &gpVosPacketContext->txMgmtFreeList; + mlock = &gpVosPacketContext->txMgmtFreeListLock; break; case VOS_PKT_TYPE_TX_802_11_DATA: @@ -3072,7 +3110,10 @@ VOS_STATUS vos_pkt_get_available_buffer_pool (VOS_PKT_TYPE pktType, return VOS_STATUS_SUCCESS; } else - pList = &gpVosPacketContext->txDataFreeList; + { + pList = &gpVosPacketContext->txDataFreeList; + mlock = &gpVosPacketContext->txDataFreeListLock; + } break; case VOS_PKT_TYPE_RX_RAW: @@ -3090,16 +3131,42 @@ VOS_STATUS vos_pkt_get_available_buffer_pool (VOS_PKT_TYPE pktType, } count = 0; - mutex_lock(&gpVosPacketContext->mlock); + mutex_lock(mlock); list_for_each(pNode, pList) { count++; } - mutex_unlock(&gpVosPacketContext->mlock); + mutex_unlock(mlock); *vosFreeBuffer = count; return VOS_STATUS_SUCCESS; } +/** + @brief vos_pkt_get_num_of_rx_raw_pkts() - Get the number of RX packets + that should be allocated. + + This function is called by VOS packet module to know how many RX raw + packets it should allocate/reserve. This value can be configured thru + Kernel device tree to save memory usage. + + @param + NONE + @return + v_SIZE_t the number of packets to allocate + +*/ +v_SIZE_t vos_pkt_get_num_of_rx_raw_pkts(void) +{ +#ifdef HAVE_WCNSS_RX_BUFF_COUNT + v_SIZE_t buffCount; + + buffCount = wcnss_get_wlan_rx_buff_count(); + return (buffCount > VPKT_NUM_RX_RAW_PACKETS ? + VPKT_NUM_RX_RAW_PACKETS : buffCount); +#else + return VPKT_NUM_RX_RAW_PACKETS; +#endif +} #ifdef VOS_PACKET_UNIT_TEST #include "vos_packet_test.c" diff --git a/CORE/VOSS/src/vos_power.c b/CORE/VOSS/src/vos_power.c index 77646b3c1a1c..f1205b295e0c 100644 --- a/CORE/VOSS/src/vos_power.c +++ b/CORE/VOSS/src/vos_power.c @@ -84,22 +84,6 @@ when who what, where, why #include #include #include - -#ifdef MSM_PLATFORM_7x30 -#include -#include -#include -#include -#endif - -#ifdef MSM_PLATFORM_8660 -#include -#endif - -#ifdef MSM_PLATFORM_7x27A -#include -#endif - #endif //MSM_PLATFORM #include @@ -124,391 +108,6 @@ when who what, where, why // SDIO Config Cycle Clock Frequency #define WLAN_LOW_SD_CONFIG_CLOCK_FREQ 400000 -#ifdef MSM_PLATFORM_7x30 - -#define PM8058_GPIO_PM_TO_SYS(pm_gpio) (pm_gpio + NR_GPIO_IRQS) - -static const char* id = "WLAN"; - -struct wlan_pm8058_gpio { - int gpio_num; - struct pm_gpio gpio_cfg; -}; - - -//PMIC8058 GPIO COnfiguration for MSM7x30 //ON -static struct wlan_pm8058_gpio wlan_gpios_reset[] = { - {PM8058_GPIO_PM_TO_SYS(22),{PM_GPIO_DIR_OUT, PM_GPIO_OUT_BUF_CMOS, 0, PM_GPIO_PULL_NO, 2, PM_GPIO_STRENGTH_LOW, PM_GPIO_FUNC_NORMAL, 0}}, -}; - -//OFF -static struct wlan_pm8058_gpio wlan_gpios_reset_out[] = { - {PM8058_GPIO_PM_TO_SYS(22),{PM_GPIO_DIR_OUT, PM_GPIO_OUT_BUF_CMOS, 1, PM_GPIO_PULL_NO, 2, PM_GPIO_STRENGTH_HIGH, PM_GPIO_FUNC_NORMAL, 0}}, -}; - - -/* Routine to power on/off Volans chip */ -int vos_chip_power_qrf8600(int on) -{ - struct vreg *vreg_wlan = NULL; - struct vreg *vreg_gp16 = NULL; - struct vreg *vreg_gp15 = NULL; - struct vreg *vreg_s2 = NULL; - int rc = 0; - -VOS_PWR_SLEEP(100); - //2.9v PA from LDO13 - vreg_wlan = vreg_get(NULL, "wlan"); - if (IS_ERR(vreg_wlan)) { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: wlan vreg get failed (%ld)\n", - __func__, PTR_ERR(vreg_wlan)); - return PTR_ERR(vreg_wlan); - } - - //1.2V AON from LDO24 - vreg_gp16 = vreg_get(NULL, "gp16"); - if (IS_ERR(vreg_gp16)) { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: gp16 vreg get failed (%ld)\n", - __func__, PTR_ERR(vreg_gp16)); - return PTR_ERR(vreg_gp16); - } - - //1.2V sw from LDO22 - vreg_gp15 = vreg_get(NULL, "gp15"); - if (IS_ERR(vreg_gp15)) { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: gp15 vreg get failed (%ld)\n", - __func__, PTR_ERR(vreg_gp15)); - return PTR_ERR(vreg_gp15); - } - - //1.3V sw from S2 - vreg_s2 = vreg_get(NULL, "s2"); - if (IS_ERR(vreg_s2)) { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: s2 vreg get failed (%ld)\n", - __func__, PTR_ERR(vreg_s2)); - return PTR_ERR(vreg_s2); - } - - if (on) { - /* Program GPIO 23 to de-assert (drive 1) external_por_n (default 0x00865a05 */ - rc = pm8xxx_gpio_config(wlan_gpios_reset[0].gpio_num, &wlan_gpios_reset[0].gpio_cfg); - if (rc) { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: pmic gpio %d config failed (%d)\n", - __func__, wlan_gpios_reset[0].gpio_num, rc); - return -EIO; - } - VOS_PWR_SLEEP(300); - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO, "WLAN put in reset mode \n"); -#if 0 - rc = pmapp_clock_vote("wlan", PMAPP_CLOCK_ID_A0, PMAPP_CLOCK_VOTE_ON); - if (rc) { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: Voting TCXO to ON failed. (%d)\n",__func__, rc); - return -EIO; - } -#endif - /* Configure TCXO to be slave to WLAN_CLK_PWR_REQ */ - rc = pmapp_clock_vote(id, PMAPP_CLOCK_ID_A0, PMAPP_CLOCK_VOTE_PIN_CTRL); - if (rc) { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: Configuring TCXO to Pin controllable failed. (%d)\n",__func__, rc); - return -EIO; - } - - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO, "TCXO configured to be slave to WLAN_CLK_PWR-REQ \n"); - printk(KERN_ERR "TCXO is now slave to clk_pwr_req \n"); - - //Wait 10msec - msleep(10); - - /* Enable L13 to output 2.9V (default 2.9V) */ - rc = vreg_set_level(vreg_wlan, 3050); - if (rc) { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: wlan vreg set level failed (%d)\n", __func__, rc); - return -EIO; - } - - rc = vreg_enable(vreg_wlan); - if (rc) { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: wlan vreg enable failed. (%d)\n",__func__, rc); - return -EIO; - } - - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO, "2.9V Power Supply Enabled \n"); - printk(KERN_ERR "3.05V Supply Enabled \n"); - - /* Enable L24 to output 1.2V AON(default 1.3V) */ - rc = vreg_set_level(vreg_gp16, 1200); - if (rc) { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: gp16 vreg set level failed (%d)\n", __func__, rc); - return -EIO; - } - - rc = vreg_enable(vreg_gp16); - if (rc) { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: gp16 vreg enable failed. (%d)\n",__func__, rc); - return -EIO; - } - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO, "1.2V AON Power Supply Enabled \n"); - printk(KERN_ERR "1.2V AON Supply Enabled \n"); - - //Wait 300usec - msleep(1); - - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO, "1.2V AON Power Supply Enabled \n"); - - rc = pm8xxx_gpio_config(wlan_gpios_reset_out[0].gpio_num, &wlan_gpios_reset_out[0].gpio_cfg); - if (rc) { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: pmic gpio %d config failed (%d)\n", - __func__, wlan_gpios_reset_out[0].gpio_num, rc); - return -EIO; - } - - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO, "WLAN is out of reset now \n"); - printk(KERN_ERR "WLAN is out of reset \n"); - - /* Wait 500usec */ - msleep(1); - - /* TODO: Replace the code to enable 1.2V sw and 1.3V sw once we have the API to set these power supplies Pin controllable */ - - /* Enable 1.2 switcheable power supply */ - rc = vreg_set_level(vreg_gp15, 1200); - if (rc) { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: gp15 vreg set level failed (%d)\n", __func__, rc); - return -EIO; - } - -#ifdef WLAN_FEATURE_VOS_POWER_VOTED_SUPPLY - rc = vreg_enable(vreg_gp15); - if (rc) { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: gp15 vreg enable failed. (%d)\n",__func__, rc); - return -EIO; - } -#else - /* 1.2v switchable supply is following the clk_pwr_req signal */ - rc = pmapp_vreg_pincntrl_vote(id, PMAPP_VREG_LDO22, PMAPP_CLOCK_ID_A0, VOS_TRUE); - if (rc) { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: gp15 vreg enable failed. (%d)\n",__func__, rc); - return -EIO; - } - vos_sleep(5); -#endif - - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO, "1.2V sw Power Supply is enabled \n"); - printk(KERN_ERR "1.2V sw is enabled \n"); - - /* Enable 1.3 switcheable power supply */ - rc = pmapp_vreg_level_vote(id, PMAPP_VREG_S2, 1300); - if (rc) { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: s2 vreg set level failed (%d)\n", __func__, rc); - return -EIO; - } - VOS_PWR_SLEEP(300); - -#ifdef WLAN_FEATURE_VOS_POWER_VOTED_SUPPLY - rc = vreg_enable(vreg_s2); - if (rc) { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: s2 vreg enable failed. .(%d)\n",__func__, rc); - return -EIO; - } - msleep(1); -#else - /* 1.3v switchable supply is following the clk_pwr_req signal */ - rc = pmapp_vreg_pincntrl_vote(id, PMAPP_VREG_S2, PMAPP_CLOCK_ID_A0, VOS_TRUE); - if (rc) { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: s2 vreg enable failed. (%d)\n",__func__, rc); - return -EIO; - } - vos_sleep(5); -#endif - - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO, "1.3V sw Power Supply is enabled \n"); - printk(KERN_ERR "1.3V sw is enabled \n"); - - } else { - - /** - Assert the external POR to keep the chip in reset state. When the chip is turned - on the next time, it won't be detected by the bus driver until we deassert it. - This is to work-around the issue where it fails sometimes when turning WIFI off and on - though GUI. The theory is that, even though we vote off 1.2V AON, it may still on because - it is shared by other components. When the next time to turn on WIFI, polling is turned on - first and when librasdioif.ko is loaded, the card is detected right away before wlan driver loads. - The bus driver may have finished configuration of the device. When WLAN driver loads, - it resets the device that causes issues when the bus driver tries to assess the chip later. - This setting draws more power after the driver is unloaded. - - The load sequence is - 1. Enable polling - 2. insmod librasdioif.ko (if card detected, stop polling) - 3. insmod libra.ko (reset the chip) - 4. stop polling - **/ - /* Program GPIO 23 to de-assert (drive 1) external_por_n to prevent chip detection - until it is asserted. - */ - rc = pm8xxx_gpio_config(wlan_gpios_reset[0].gpio_num, &wlan_gpios_reset[0].gpio_cfg); - if (rc) { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: pmic gpio %d config failed (%d)\n", - __func__, wlan_gpios_reset[0].gpio_num, rc); - return -EIO; - } - -#ifdef WLAN_FEATURE_VOS_POWER_VOTED_SUPPLY - /* TODO: Remove the code to disable 1.2V sw and 1.3V sw once we have the API to set these power supplies Pin controllable */ - printk(KERN_ERR "power down switchable\n"); - rc = pmapp_vreg_level_vote(id, PMAPP_VREG_S2, 0); - if (rc) { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: s2 vreg set level failed (%d)\n", __func__, rc); - return -EIO; - } - - /* 1.3V sw */ - rc = vreg_disable(vreg_s2); - if (rc) { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: s2 vreg disable failed (%d)\n", __func__, rc); - return -EIO; - } - - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO, "1.3V sw is disabled \n"); - - /* 1.2V sw */ - rc = vreg_disable(vreg_gp15); - if (rc) { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: gp15 vreg disable failed (%d)\n", __func__, rc); - return -EIO; - } - - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO, "1.2V sw is disabled \n"); -#endif //#ifdef WLAN_FEATURE_VOS_POWER_VOTED_SUPPLY - - /* 1.2V AON */ - rc = vreg_disable(vreg_gp16); - if (rc) { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: gp16 vreg disable failed (%d)\n", __func__, rc); - return -EIO; - } - - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO, "1.2V AON is disabled \n"); - -#ifdef VOLANS_2_0 - /* Cannot turn off 2.9V due to the PAD issue on Volans */ - - /* 2.9V */ - rc = vreg_disable(vreg_wlan); - if (rc) { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: wlan vreg disable failed (%d)\n", __func__, rc); - return -EIO; - } - - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO, "2.9V is disabled \n"); -#endif - } - - return rc; -} -#endif - -#ifdef MSM_PLATFORM_7x27_FFA - -#define MPP_4_CHIP_PWD_L 3 //MPP4 is hooked to Deep Sleep Signal - -//Helper routine to power up Libra keypad on the 7x27 FFA -int vos_chip_power_7x27_keypad( int on ) -{ - struct vreg *vreg_wlan, *vreg_bt = NULL; - int rc = 0; - - vreg_wlan = vreg_get(NULL, "wlan"); - if (IS_ERR(vreg_wlan)) { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: wlan vreg get failed (%ld)", - __func__, PTR_ERR(vreg_wlan)); - return PTR_ERR(vreg_wlan); - } - - vreg_bt = vreg_get(NULL, "gp6"); - if (IS_ERR(vreg_bt)) { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: gp6 vreg get failed (%ld)", - __func__, PTR_ERR(vreg_bt)); - return PTR_ERR(vreg_bt); - } - - if(on) { - - /* units of mV, steps of 50 mV */ - rc = vreg_set_level(vreg_bt, 2600); - if (rc) { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: vreg set level failed (%d)",__func__, rc); - return -EIO; - } - rc = vreg_enable(vreg_bt); - if (rc) { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: vreg enable failed (%d)",__func__, rc); - return -EIO; - } - - //Set TCXO to 1.8v. - rc = vreg_set_level(vreg_wlan, 1800); - if (rc) { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: vreg set level failed (%d)", __func__, rc); - return -EIO; - } - - rc = vreg_enable(vreg_wlan); - if (rc) { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: wlan vreg enable failed (%d)",__func__, rc); - return -EIO; - } - - msleep(100); - - // Pull MPP4 high to turn on various supply voltages. - rc = mpp_config_digital_out(MPP_4_CHIP_PWD_L, - MPP_CFG(MPP_DLOGIC_LVL_MSMP, MPP_DLOGIC_OUT_CTRL_HIGH)); - if (rc) { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: MPP_4 pull high failed (%d)",__func__, rc); - return -EIO; - } - - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: Enabled power supply for WLAN", __func__); - - msleep(500); - } - else - { - - // Pull MPP4 low to place the chip in reset. - rc = mpp_config_digital_out(MPP_4_CHIP_PWD_L, - MPP_CFG(MPP_DLOGIC_LVL_MSMP, MPP_DLOGIC_OUT_CTRL_LOW)); - if (rc) { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: MPP_4 pull low failed (%d)",__func__, rc); - return -EIO; - } - - msleep(100); - - /* Turn off 2.6V */ - rc = vreg_disable(vreg_bt); - if (rc) { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: vreg disable failed (%d)",__func__, rc); - return -EIO; - } - - /* Turn off 1.8V */ - rc = vreg_disable(vreg_wlan); - if (rc) { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: wlan vreg disable failed (%d)",__func__, rc); - return -EIO; - } - - msleep(100); - - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: Disabled power supply for WLAN", __func__); - } - - return 0; -} -#endif - /*=========================================================================== FUNCTION PROTOTYPES @@ -549,27 +148,6 @@ VOS_STATUS vos_chipPowerUp v_PVOID_t user_data ) { - -#ifdef MSM_PLATFORM_8660 - if(vos_chip_power_qrf8615(CHIP_POWER_ON)) - return VOS_STATUS_E_FAILURE; -#endif - -#ifdef MSM_PLATFORM_7x30 - if(vos_chip_power_qrf8600(CHIP_POWER_ON)) - return VOS_STATUS_E_FAILURE; -#endif - -#ifdef MSM_PLATFORM_7x27_FFA - if(vos_chip_power_7x27_keypad(CHIP_POWER_ON)) - return VOS_STATUS_E_FAILURE; -#endif - -#ifdef MSM_PLATFORM_7x27A - if(chip_power_qrf6285(CHIP_POWER_ON)) - return VOS_STATUS_E_FAILURE; -#endif - return VOS_STATUS_SUCCESS; } @@ -604,29 +182,6 @@ VOS_STATUS vos_chipPowerDown v_PVOID_t user_data ) { - -#ifdef MSM_PLATFORM_8660 - if(vos_chip_power_qrf8615(CHIP_POWER_OFF)) - return VOS_STATUS_E_FAILURE; -#endif - -#ifdef MSM_PLATFORM_7x30 -///#ifndef VOS_PWR_WIFI_ON_OFF_HACK - if(vos_chip_power_qrf8600(CHIP_POWER_OFF)) - return VOS_STATUS_E_FAILURE; -///#endif -#endif - -#ifdef MSM_PLATFORM_7x27_FFA - if(vos_chip_power_7x27_keypad(CHIP_POWER_OFF)) - return VOS_STATUS_E_FAILURE; -#endif - -#ifdef MSM_PLATFORM_7x27A - if(chip_power_qrf6285(CHIP_POWER_OFF)) - return VOS_STATUS_E_FAILURE; -#endif - return VOS_STATUS_SUCCESS; } @@ -783,29 +338,6 @@ VOS_STATUS vos_chipAssertDeepSleep v_PVOID_t user_data ) { -#ifdef FIXME_VOLANS -#ifdef MSM_PLATFORM_7x27_FFA - int rc = mpp_config_digital_out(MPP_4_CHIP_PWD_L, - MPP_CFG(MPP_DLOGIC_LVL_MSMP, MPP_DLOGIC_OUT_CTRL_LOW)); - if (rc) { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: Failed to pull high MPP_4_CHIP_PWD_L (%d)", - __func__, rc); - return VOS_STATUS_E_FAILURE; - } - -#endif - -#ifdef MSM_PLATFORM_7x30 - // Configure GPIO 23 for Deep Sleep - int rc = pm8xxx_gpio_config(wlan_gpios_reset_out[0].gpio_num, &wlan_gpios_reset_out[0].gpio_cfg); - if (rc) { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: pmic GPIO %d config failed (%d)", - __func__, wlan_gpios_reset_out[0].gpio_num, rc); - return VOS_STATUS_E_FAILURE; - } -#endif -#endif //FIXME_VOLANS - return VOS_STATUS_SUCCESS; } @@ -842,29 +374,6 @@ VOS_STATUS vos_chipDeAssertDeepSleep v_PVOID_t user_data ) { -#ifdef FIXME_VOLANS -#ifdef MSM_PLATFORM_7x27_FFA - int rc = mpp_config_digital_out(MPP_4_CHIP_PWD_L, - MPP_CFG(MPP_DLOGIC_LVL_MSMP, MPP_DLOGIC_OUT_CTRL_HIGH)); - if (rc) { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: Failed to pull high MPP_4_CHIP_PWD_L (%d)", - __func__, rc); - return VOS_STATUS_E_FAILURE; - } - - -#endif - -#ifdef MSM_PLATFORM_7x30 - // Configure GPIO 23 for Deep Sleep - int rc = pm8xxx_gpio_config(wlan_gpios_reset[2].gpio_num, &wlan_gpios_reset[2].gpio_cfg); - if (rc) { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: pmic GPIO %d config failed (%d)", - __func__, wlan_gpios_reset[2].gpio_num, rc); - return VOS_STATUS_E_FAILURE; - } -#endif -#endif //FIXME_VOLANS return VOS_STATUS_SUCCESS; } @@ -900,57 +409,6 @@ VOS_STATUS vos_chipExitDeepSleepVREGHandler v_PVOID_t user_data ) { -#ifdef FIXME_VOLANS -#ifdef MSM_PLATFORM_7x27_FFA - struct vreg *vreg_wlan; - int rc; - - vreg_wlan = vreg_get(NULL, "wlan"); - if (IS_ERR(vreg_wlan)) { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: wlan vreg get failed (%ld)", - __func__, PTR_ERR(vreg_wlan)); - return VOS_STATUS_E_FAILURE; - } - - rc = vreg_set_level(vreg_wlan, 1800); - if (rc) { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: wlan vreg set level failed (%d)", - __func__, rc); - return VOS_STATUS_E_FAILURE; - } - - rc = vreg_enable(vreg_wlan); - if (rc) { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: wlan vreg enable failed (%d)", - __func__, rc); - return VOS_STATUS_E_FAILURE; - } - - msleep(500); - - rc = vreg_set_level(vreg_wlan, 2600); - if (rc) { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s: wlan vreg set level failed (%d)", - __func__, rc); - return VOS_STATUS_E_FAILURE; - } - - msleep(500); - - *status = VOS_CALL_SYNC; - -#endif - -#ifdef MSM_PLATFORM_7x30 - VOS_STATUS vosStatus; - vos_call_status_type callType; - - vosStatus = vos_chipVoteOnBBAnalogSupply(&callType, NULL, NULL); - VOS_ASSERT( VOS_IS_STATUS_SUCCESS( vosStatus ) ); - msleep(500); - -#endif -#endif //FIXME_VOLANS return VOS_STATUS_SUCCESS; } @@ -985,58 +443,6 @@ VOS_STATUS vos_chipVoteOnRFSupply v_PVOID_t user_data ) { -#ifdef FIXME_VOLANS -#ifdef MSM_PLATFORM_7x30 - int rc; - struct vreg *vreg_s2 = NULL; - struct vreg *vreg_s4 = NULL; - - //1.3v RF; - vreg_s2 = vreg_get(NULL, "s2"); - if (IS_ERR(vreg_s2)) { - printk(KERN_ERR "%s: s2 vreg get failed (%ld)\n", - __func__, PTR_ERR(vreg_s2)); - return VOS_STATUS_E_FAILURE; - } - - //2.2v RF - vreg_s4 = vreg_get(NULL, "s4"); - if (IS_ERR(vreg_s4)) { - printk(KERN_ERR "%s: s4 vreg get failed (%ld)\n", - __func__, PTR_ERR(vreg_s4)); - return VOS_STATUS_E_FAILURE; - } - - rc = pmapp_vreg_level_vote(id, PMAPP_VREG_S2, 1300); - if (rc) { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, "%s: s2 vreg vote " - "level failed (%d)",__func__, rc); - return VOS_STATUS_E_FAILURE; - } - - rc = vreg_enable(vreg_s2); - if (rc) { - printk(KERN_ERR "%s: s2 vreg enable failed (%d)\n", __func__, rc); - return VOS_STATUS_E_FAILURE; - } - - rc = pmapp_vreg_level_vote(id, PMAPP_VREG_S4, 2200); - if (rc) { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, "%s: s4 vreg vote " - "level failed (%d)",__func__, rc); - return VOS_STATUS_E_FAILURE; - } - - rc = vreg_enable(vreg_s4); - if (rc) { - printk(KERN_ERR "%s: s4 vreg enable failed (%d)\n", __func__, rc); - return VOS_STATUS_E_FAILURE; - } - - return VOS_STATUS_SUCCESS; - -#endif //MSM_PLATFORM_7x30 -#endif //FIXME_VOLANS return VOS_STATUS_SUCCESS; } @@ -1074,55 +480,6 @@ VOS_STATUS vos_chipVoteOffRFSupply v_PVOID_t user_data ) { -#ifdef FIXME_VOLANS -#ifdef MSM_PLATFORM_7x30 - - int rc; - struct vreg *vreg_s2; - struct vreg *vreg_s4; - - //1.3v RF - vreg_s2 = vreg_get(NULL, "s2"); - if (IS_ERR(vreg_s2)) { - printk(KERN_ERR "%s: s2 vreg get failed (%ld)\n", - __func__, PTR_ERR(vreg_s2)); - return VOS_STATUS_E_FAILURE; - } - - //2.2v RF - vreg_s4 = vreg_get(NULL, "s4"); - if (IS_ERR(vreg_s4)) { - printk(KERN_ERR "%s: s4 vreg get failed (%ld)\n", - __func__, PTR_ERR(vreg_s4)); - return VOS_STATUS_E_FAILURE; - } - - rc = pmapp_vreg_level_vote(id, PMAPP_VREG_S2, 0); - if (rc) { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_WARN, "%s: s2 vreg vote " - "level failed (%d)",__func__, rc); - } - - rc = vreg_disable(vreg_s2); - if (rc) { - printk(KERN_ERR "%s: s2 vreg disable failed (%d)\n", __func__, rc); - } - - rc = pmapp_vreg_level_vote(id, PMAPP_VREG_S4, 0); - if (rc) { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_WARN, "%s: s4 vreg vote " - "level failed (%d)",__func__, rc); - } - - rc = vreg_disable(vreg_s4); - if (rc) { - printk(KERN_ERR "%s: s4 vreg disable failed (%d)\n", __func__, rc); - } - - return VOS_STATUS_SUCCESS; - -#endif //MSM_PLATFORM_7x30 -#endif //FIXME_VOLANS return VOS_STATUS_SUCCESS; } @@ -1158,34 +515,6 @@ VOS_STATUS vos_chipVoteOnBBAnalogSupply v_PVOID_t user_data ) { -#ifdef FIXME_VOLANS -#ifdef MSM_PLATFORM_7x30 - struct vreg *vreg_wlan2 = NULL; - int rc; - - //2.5v Analog from LDO19 - vreg_wlan2 = vreg_get(NULL, "wlan2"); - if (IS_ERR(vreg_wlan2)) { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, "%s: wlan2 vreg get " - "failed (%ld)", __func__, PTR_ERR(vreg_wlan2)); - return VOS_STATUS_E_FAILURE; - } - - rc = vreg_set_level(vreg_wlan2, 2500); - if (rc) { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, "%s: wlan2 vreg set " - "level failed (%d)",__func__, rc); - return VOS_STATUS_E_FAILURE; - } - - rc = vreg_enable(vreg_wlan2); - if (rc) { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, "%s: wlan2 vreg enable " - "failed (%d)", __func__, rc); - return VOS_STATUS_E_FAILURE; - } -#endif -#endif //FIXME_VOLANS return VOS_STATUS_SUCCESS; } @@ -1221,27 +550,6 @@ VOS_STATUS vos_chipVoteOffBBAnalogSupply v_PVOID_t user_data ) { -#ifdef FIXME_VOLANS -#ifdef MSM_PLATFORM_7x30 - struct vreg *vreg_wlan2 = NULL; - int rc; - - //2.5v Analog from LDO19 - vreg_wlan2 = vreg_get(NULL, "wlan2"); - if (IS_ERR(vreg_wlan2)) { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, "%s: wlan2 vreg get " - "failed (%ld)", __func__, PTR_ERR(vreg_wlan2)); - return VOS_STATUS_E_FAILURE; - } - - rc = vreg_disable(vreg_wlan2); - if (rc) { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, "%s: wlan2 vreg disable " - "failed (%d)", __func__, rc); - return VOS_STATUS_E_FAILURE; - } -#endif -#endif //FIXME_VOLANS return VOS_STATUS_SUCCESS; } @@ -1392,20 +700,5 @@ VOS_STATUS vos_chipVoteFreqFor1p3VSupply v_U32_t freq ) { - - -#ifdef MSM_PLATFORM_8660 - if(freq == VOS_NV_FREQUENCY_FOR_1_3V_SUPPLY_3P2MH) - { - if(qcomwlan_freq_change_1p3v_supply(RPM_VREG_FREQ_3p20)) - return VOS_STATUS_E_FAILURE; - } - else - { - if(qcomwlan_freq_change_1p3v_supply(RPM_VREG_FREQ_1p60)) - return VOS_STATUS_E_FAILURE; - } -#endif - return VOS_STATUS_SUCCESS; } diff --git a/CORE/VOSS/src/vos_sched.c b/CORE/VOSS/src/vos_sched.c index 19fe723b3176..2cf9d7081dda 100644 --- a/CORE/VOSS/src/vos_sched.c +++ b/CORE/VOSS/src/vos_sched.c @@ -1160,7 +1160,7 @@ static int VosRXThread ( void * Arg ) /* Rx Thread Suspended */ complete(&pHddCtx->rx_sus_event_var); - init_completion(&pSchedContext->ResumeRxEvent); + INIT_COMPLETION(pSchedContext->ResumeRxEvent); spin_unlock(&pSchedContext->RxThreadLock); /* Wait for Resume Indication */ @@ -1825,6 +1825,7 @@ VOS_STATUS vos_watchdog_wlan_shutdown(void) /* Set the flags so that all future CMD53 and Wext commands get blocked right away */ vos_set_logp_in_progress(VOS_MODULE_ID_VOSS, TRUE); + vos_set_reinit_in_progress(VOS_MODULE_ID_VOSS, FALSE); pHddCtx->isLogpInProgress = TRUE; /* Release the lock here */ diff --git a/CORE/VOSS/src/vos_sched.h b/CORE/VOSS/src/vos_sched.h index 9a29eee642f9..e05f8593a085 100644 --- a/CORE/VOSS/src/vos_sched.h +++ b/CORE/VOSS/src/vos_sched.h @@ -25,6 +25,7 @@ * to the Linux Foundation. */ + #if !defined( __VOS_SCHED_H ) #define __VOS_SCHED_H @@ -321,7 +322,7 @@ typedef struct _VosContextType /* SAP Context */ v_VOID_t *pSAPContext; - + vos_event_t ProbeEvent; volatile v_U8_t isLogpInProgress; @@ -333,10 +334,10 @@ typedef struct _VosContextType #ifdef QCA_WIFI_2_0 #ifndef QCA_WIFI_ISOC - v_VOID_t *pHIFContext; + v_VOID_t *pHIFContext; #endif - v_VOID_t *htc_ctx; + v_VOID_t *htc_ctx; /* * adf_ctx will be used by adf @@ -345,17 +346,20 @@ typedef struct _VosContextType */ adf_os_device_t adf_ctx; - v_VOID_t *pdev_txrx_ctx; + v_VOID_t *pdev_txrx_ctx; /* Configuration handle used to get system configuration */ - v_VOID_t *cfg_ctx; + v_VOID_t *cfg_ctx; #else /* VOS Packet Context */ - vos_pkt_context_t vosPacket; + vos_pkt_context_t vosPacket; #endif /* QCA_WIFI_2_0 */ volatile v_U8_t isLoadUnloadInProgress; + /* SSR re-init in progress */ + volatile v_U8_t isReInitInProgress; + } VosContextType, *pVosContextType; diff --git a/CORE/VOSS/src/vos_timer.c b/CORE/VOSS/src/vos_timer.c index ec3814e86abe..d3712aeb038e 100644 --- a/CORE/VOSS/src/vos_timer.c +++ b/CORE/VOSS/src/vos_timer.c @@ -94,30 +94,27 @@ static void tryAllowingSleep( VOS_TIMER_TYPE type ) /*---------------------------------------------------------------------------- - - \brief vos_linux_timer_callback() - internal vos entry point which is - called when the timer interval expires - This function in turn calls the vOS client callback and changes the - state of the timer from running (ACTIVE) to expired (INIT). - - - \param uTimerID - return value of the timeSetEvent() from the - vos_timer_start() API which + \brief vos_linux_timer_callback() - internal vos entry point which is + called when the timer interval expires - \param dwUser - this is supplied by the fourth parameter of the timeSetEvent() - which is the timer structure being passed as the userData + This function in turn calls the vOS client callback and changes the + state of the timer from running (ACTIVE) to expired (INIT). - \param uMsg - Reserved / Not Used - \param dw1 - Reserved / Not Used + \param data - pointer to the timer control block which describes the + timer that expired - \param dw2 - Reserved / Not Used - \return nothing + + Note: function signature is defined by the Linux kernel. The fact + that the argument is "unsigned long" instead of "void *" is + unfortunately imposed upon us. But we can safely pass a pointer via + this parameter for LP32 and LP64 architectures. + --------------------------------------------------------------------------*/ -static void vos_linux_timer_callback ( v_U32_t data ) +static void vos_linux_timer_callback (unsigned long data) { vos_timer_t *timer = ( vos_timer_t *)data; vos_msg_t msg; @@ -701,9 +698,12 @@ VOS_STATUS vos_timer_start( vos_timer_t *timer, v_U32_t expirationTime ) // Check if timer refers to an uninitialized object if ( LINUX_TIMER_COOKIE != timer->platformInfo.cookie ) { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, - "%s: Cannot start uninitialized timer",__func__); - VOS_ASSERT(0); + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + "%s: Cannot start uninitialized timer",__func__); + if ( LINUX_INVALID_TIMER_COOKIE != timer->platformInfo.cookie ) + { + VOS_ASSERT(0); + } return VOS_STATUS_E_INVAL; } @@ -768,10 +768,6 @@ VOS_STATUS vos_timer_start( vos_timer_t *timer, v_U32_t expirationTime ) \return VOS_STATUS_SUCCESS - timer was successfully stopped. - VOS_STATUS_E_EMPTY - The implementation has detected an attempt - to stop a timer that has not been started or has already - expired. - VOS_STATUS_E_INVAL - The value specified by timer is invalid. VOS_STATUS_E_FAULT - timer is an invalid pointer. @@ -798,8 +794,11 @@ VOS_STATUS vos_timer_stop ( vos_timer_t *timer ) if ( LINUX_TIMER_COOKIE != timer->platformInfo.cookie ) { VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, - "%s: Cannot stop uninitialized timer",__func__); - VOS_ASSERT(0); + "%s: Cannot stop uninitialized timer",__func__); + if ( LINUX_INVALID_TIMER_COOKIE != timer->platformInfo.cookie ) + { + VOS_ASSERT(0); + } return VOS_STATUS_E_INVAL; } @@ -812,7 +811,7 @@ VOS_STATUS vos_timer_stop ( vos_timer_t *timer ) VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO_HIGH, "%s: Cannot stop timer in state = %d", __func__, timer->state); - return VOS_STATUS_E_FAULT; + return VOS_STATUS_SUCCESS; } timer->state = VOS_TIMER_STATE_STOPPED; diff --git a/CORE/VOSS/src/vos_trace.c b/CORE/VOSS/src/vos_trace.c index ea5e30b9ec9e..2f3481c15c11 100644 --- a/CORE/VOSS/src/vos_trace.c +++ b/CORE/VOSS/src/vos_trace.c @@ -108,9 +108,10 @@ moduleTraceInfo gVosTraceInfo[ VOS_MODULE_ID_MAX ] = [VOS_MODULE_ID_VOSS] = { VOS_DEFAULT_TRACE_LEVEL, "VOS" }, [VOS_MODULE_ID_SAP] = { VOS_DEFAULT_TRACE_LEVEL, "SAP" }, [VOS_MODULE_ID_HDD_SOFTAP] = { VOS_DEFAULT_TRACE_LEVEL, "HSP" }, + [VOS_MODULE_ID_PMC] = { VOS_DEFAULT_TRACE_LEVEL, "PMC" }, #if defined (QCA_WIFI_2_0) && \ defined (QCA_WIFI_ISOC) - /// Message Queue ID for messages bound for HTC + /* Message Queue ID for messages bound for HTC*/ [VOS_MODULE_ID_HTC] = { VOS_DEFAULT_TRACE_LEVEL, "HTC" }, #endif }; @@ -210,6 +211,72 @@ void vos_snprintf(char *strBuffer, unsigned int size, char *strFormat, ...) va_end( val ); } +#ifdef WCONN_TRACE_KMSG_LOG_BUFF + +/* 64k:: size should be power of 2 to + get serial 'wconnstrContBuffIdx' index */ +#define KMSG_WCONN_TRACE_LOG_MAX 65536 + +static char wconnStrLogBuff[KMSG_WCONN_TRACE_LOG_MAX]; +static unsigned int wconnstrContBuffIdx; +static void kmsgwconnstrlogchar(char c) +{ + wconnStrLogBuff[wconnstrContBuffIdx & (KMSG_WCONN_TRACE_LOG_MAX-1)] = c; + wconnstrContBuffIdx++; +} + +/****************************************************************************** + * function:: kmsgwconnBuffWrite() + * wconnlogstrRead -> Recieved the string(log msg) from vos_trace_msg() + * 1) Get the timetick, convert into HEX and store in wconnStrLogBuff[] + * 2) And 'pwconnlogstr' would be copied into wconnStrLogBuff[] character by + character + * 3) wconnStrLogBuff[] is been treated as circular buffer. + * + * Note:: In T32 simulator the content of wconnStrLogBuff[] will appear as + continuous string please use logparse.cmm file to extract into + readable format + *******************************************************************************/ + +void kmsgwconnBuffWrite(const char *wconnlogstrRead) +{ + const char *pwconnlogstr = wconnlogstrRead; + static const char num[16] = {'0','1','2','3','4','5','6','7','8','9','A', + 'B','C','D','E','F'}; + unsigned int timetick; + int bits; /*timetick for now returns 32 bit number*/ + + timetick = ( jiffies_to_msecs(jiffies) / 10 ); + bits = sizeof(timetick) * 8/*number of bits in a byte*/; + + kmsgwconnstrlogchar('['); + + for ( ; bits > 0; bits -= 4 ) + kmsgwconnstrlogchar( num[((timetick & (0xF << (bits-4)))>>(bits-4))] ); + + kmsgwconnstrlogchar(']'); + + for ( ; *pwconnlogstr; pwconnlogstr++) + { + kmsgwconnstrlogchar(*pwconnlogstr); + } + kmsgwconnstrlogchar('\n');/*log \n*/ +} + +spinlock_t gVosSpinLock; + +void vos_wconn_trace_init(void) +{ + spin_lock_init(&gVosSpinLock); +} + +void vos_wconn_trace_exit(void) +{ + /* does nothing */ +} + +#endif + #ifdef VOS_ENABLE_TRACING /*---------------------------------------------------------------------------- @@ -239,6 +306,7 @@ void vos_trace_msg( VOS_MODULE_ID module, VOS_TRACE_LEVEL level, char *strFormat { char strBuffer[VOS_TRACE_BUFFER_SIZE]; int n; + unsigned long irq_flag; // Print the trace message when the desired level bit is set in the module // tracel level mask. @@ -263,9 +331,15 @@ void vos_trace_msg( VOS_MODULE_ID module, VOS_TRACE_LEVEL level, char *strFormat if ((n >= 0) && (n < VOS_TRACE_BUFFER_SIZE)) { vsnprintf(strBuffer + n, VOS_TRACE_BUFFER_SIZE - n, strFormat, val ); + +#ifdef WCONN_TRACE_KMSG_LOG_BUFF + spin_lock_irqsave (&gVosSpinLock, irq_flag); + kmsgwconnBuffWrite(strBuffer); + spin_unlock_irqrestore (&gVosSpinLock, irq_flag); +#endif pr_err("%s\n", strBuffer); } - va_end( val); + va_end(val); } } @@ -291,4 +365,55 @@ void vos_trace_display(void) } } +/*---------------------------------------------------------------------------- + + \brief vos_trace_hex_dump() - Externally called hex dump function + + Checks the level of severity and accordingly prints the trace messages + + \param module - module identifier. A member of the VOS_MODULE_ID + enumeration that identifies the module issuing the trace message. + + \param level - trace level. A member of the VOS_TRACE_LEVEL + enumeration indicating the severity of the condition causing the + trace message to be issued. More severe conditions are more + likely to be logged. + + \param data - . The base address of the buffer to be logged. + + \param buf_len - . The size of the buffer to be logged. + + \return nothing + + \sa + --------------------------------------------------------------------------*/ +void vos_trace_hex_dump( VOS_MODULE_ID module, VOS_TRACE_LEVEL level, + void *data, int buf_len ) +{ + char *buf = (char *)data; + int i; + for (i=0; (i+7)HAL interface + tANI_U8 sessionId; //PE session id for PE<->HAL interface // HAL just sends back what it receives. /*if this is a P2P Capable Sta*/ @@ -337,7 +337,7 @@ typedef struct tANI_U16 assocId; eHalStatus status; // Status of SIR_HAL_DELETE_STA_REQ is reported here tANI_U8 respReqd; - tANI_U8 sessionId; // PE session id for PE<->HAL interface + tANI_U8 sessionId; // PE session id for PE<->HAL interface // PE session id now added to all HAL<->PE transacations // HAL sends it back unmodified. tANI_U8 smesessionId; @@ -364,7 +364,7 @@ typedef struct * via response message. HAL does not read them. */ eHalStatus status; // status of SIR_HAL_SET_STAKEY_REQ is reported here - tANI_U8 sessionId; // PE session id for PE<->HAL interface + tANI_U8 sessionId; // PE session id for PE<->HAL interface // PE session id now added to all HAL<->PE transacations // HAL sends back response with no modification @@ -484,7 +484,7 @@ typedef struct //HAL will send the response message to LIM only when this flag is set. //LIM will set this flag, whereas DVT will not set this flag. tANI_U8 respReqd; - tANI_U8 sessionId; // PE session id for PE<->HAL interface + tANI_U8 sessionId; // PE session id for PE<->HAL interface // PE session id now added to all HAL<->PE transacations // HAL Sends the sessionId unmodified. @@ -499,7 +499,7 @@ typedef struct #endif tANI_U8 ucMaxProbeRespRetryLimit; //probe Response Max retries - tANI_U8 bHiddenSSIDEn; //To Enable Hidden ssid. + tANI_U8 bHiddenSSIDEn; //To Enable Hidden ssid. tANI_U8 bProxyProbeRespEn; //To Enable Disable FW Proxy Probe Resp tANI_U8 halPersona; //Persona for the BSS can be STA,AP,GO,CLIENT value same as tVOS_CON_MODE @@ -509,7 +509,9 @@ typedef struct tANI_U8 vhtCapable; tANI_U8 vhtTxChannelWidthSet; #endif - tANI_U8 reassocReq; // Set only during roaming reassociation + tANI_U8 reassocReq; // Set only during roaming reassociation + tANI_U16 chainMask; + tANI_U16 smpsMode; } tAddBssParams, * tpAddBssParams; typedef struct @@ -520,7 +522,7 @@ typedef struct //HAL will send the response message to LIM only when this flag is set. //LIM will set this flag, whereas DVT will not set this flag. tANI_U8 respReqd; - tANI_U8 sessionId; // PE session id for PE<->HAL interface + tANI_U8 sessionId; // PE session id for PE<->HAL interface // HAL sends it back unmodified. tSirMacAddr bssid; // Will be removed for PE-HAL integration tANI_U8 smesessionId; @@ -528,7 +530,7 @@ typedef struct // // UAPSD AC mask: 1b per AC -// LSB 4 bits for delivery enabled setting. msb 4 bits for trigger enabled settings. +// LSB 4 bits for delivery enabled setting. msb 4 bits for trigger enabled settings. // Encoded as follows: // b7 b6 b5 b4 b3 b2 b1 b0 // BE BK VI VO BE BK VI VO @@ -536,8 +538,8 @@ typedef struct typedef struct { tANI_U8 staIdx; - tANI_U8 uapsdACMask; - tANI_U8 maxSpLen; + tANI_U8 uapsdACMask; + tANI_U8 maxSpLen; } tUpdateUapsdParams, * tpUpdateUapsdParams; typedef struct sSirScanEntry @@ -593,6 +595,13 @@ typedef enum eDelStaReasonCode{ HAL_DEL_STA_REASON_CODE_UNKNOWN_A2 = 0x4 }tDelStaReasonCode; +typedef enum eSmpsModeValue{ + STATIC_SMPS_MODE = 0x0, + DYNAMIC_SMPS_MODE = 0x1, + SMPS_MODE_RESERVED = 0x2, + SMPS_MODE_DISABLED = 0x3 +}tSmpsModeValue; + // // Msg header is used from tSirMsgQ // Msg Type = SIR_LIM_DELETE_STA_CONTEXT_IND @@ -600,10 +609,10 @@ typedef enum eDelStaReasonCode{ typedef struct { tANI_U16 assocId; tANI_U16 staId; - tSirMacAddr bssId; // TO SUPPORT BT-AMP + tSirMacAddr bssId; // TO SUPPORT BT-AMP // HAL copies bssid from the sta table. - tSirMacAddr addr2; // - tANI_U16 reasonCode; // To unify the keepalive / unknown A2 / tim-based disa + tSirMacAddr addr2; // + tANI_U16 reasonCode; // To unify the keepalive / unknown A2 / tim-based disa } tDeleteStaContext, * tpDeleteStaContext; @@ -696,7 +705,7 @@ typedef struct { } tFinishScanParams, * tpFinishScanParams; -#ifdef FEATURE_OEM_DATA_SUPPORT +#ifdef FEATURE_OEM_DATA_SUPPORT #ifndef OEM_DATA_REQ_SIZE #ifdef QCA_WIFI_2_0 @@ -720,7 +729,7 @@ typedef struct tANI_U8 oemDataReq[OEM_DATA_REQ_SIZE]; } tStartOemDataReq, *tpStartOemDataReq; -typedef struct +typedef struct { tANI_U8 oemDataRsp[OEM_DATA_RSP_SIZE]; } tStartOemDataRsp, *tpStartOemDataRsp; @@ -761,7 +770,7 @@ typedef struct { typedef struct sSendProbeRespParams { tSirMacAddr bssId; - tANI_U8 *pProbeRespTemplate; + tANI_U8 *pProbeRespTemplate; tANI_U32 probeRespTemplateLen; tANI_U32 ucProxyProbeReqValidIEBmap[8]; } tSendProbeRespParams, * tpSendProbeRespParams; @@ -782,7 +791,7 @@ typedef struct * via response message. HAL does not read them. */ eHalStatus status; // status of SIR_HAL_SET_BSSKEY_REQ is reported here - tANI_U8 sessionId; // PE session id for PE<->HAL interface + tANI_U8 sessionId; // PE session id for PE<->HAL interface // HAL sends this unmodified in the response } tSetBssKeyParams, *tpSetBssKeyParams; @@ -799,10 +808,10 @@ typedef struct * Following parameter is for returning status * via response message. HAL does not read them. */ - eHalStatus status; // return status of SIR_HAL_REMOVE_STAKEY_REQ - tANI_U8 sessionId; // PE session id for PE<->HAL interface - // HAL Sends back the PE session - // id unmodified + eHalStatus status; // return status of SIR_HAL_REMOVE_STAKEY_REQ + tANI_U8 sessionId; // PE session id for PE<->HAL interface + // HAL Sends back the PE session + // id unmodified } tRemoveStaKeyParams, *tpRemoveStaKeyParams; /* @@ -818,10 +827,10 @@ typedef struct * Following parameter is for returning status * via response message. HAL does not read them. */ - eHalStatus status; // return status of SIR_HAL_REMOVE_BSSKEY_REQ - tANI_U8 sessionId; // PE session id for PE<->HAL interface - // HAL Sends back the PE session - // id unmodified + eHalStatus status; // return status of SIR_HAL_REMOVE_BSSKEY_REQ + tANI_U8 sessionId; // PE session id for PE<->HAL interface + // HAL Sends back the PE session + // id unmodified } tRemoveBssKeyParams, *tpRemoveBssKeyParams; typedef struct @@ -890,7 +899,7 @@ typedef struct }tUpdateBeaconParams, *tpUpdateBeaconParams; #ifdef WLAN_FEATURE_11AC -typedef struct +typedef struct { tANI_U16 opMode; tANI_U16 staId; @@ -964,7 +973,7 @@ typedef struct typedef struct { tANI_U8 channelNumber; -#ifndef WLAN_FEATURE_VOWIFI +#ifndef WLAN_FEATURE_VOWIFI tANI_U8 localPowerConstraint; #endif /* WLAN_FEATURE_VOWIFI */ ePhyChanBondState secondaryChannelOffset; @@ -975,7 +984,7 @@ typedef struct #endif tSirMacAddr selfStaMacAddr; //the request has power constraints, this should be applied only to that session - /* VO Wifi comment: BSSID is needed to identify which session issued this request. As the + /* VO Wifi comment: BSSID is needed to identify which session issued this request. As the request has power constraints, this should be applied only to that session */ /* V IMP: Keep bssId field at the end of this msg. It is used to mantain backward compatbility * by way of ignoring if using new host/old FW or old host/new FW since it is at the end of this struct @@ -984,6 +993,11 @@ typedef struct eHalStatus status; + tANI_U16 chainMask; + + tANI_U16 smpsMode; + + }tSwitchChannelParams, *tpSwitchChannelParams; typedef struct CSAOffloadParams { @@ -1027,8 +1041,7 @@ typedef struct tANI_U16 tspecIdx; //TSPEC identifier uniquely identifying a TSPEC for a STA in a BSS tSirMacAddr bssId; //TO SUPPORT BT-AMP tANI_U8 sessionId; - tANI_U8 userPrio; //TSPEC identifier uniquely identifying a TSPEC for a STA in a BSS - + tANI_U8 userPrio; } tDelTsParams, *tpDelTsParams; #ifdef WLAN_FEATURE_VOWIFI_11R @@ -1042,7 +1055,7 @@ typedef struct tANI_U16 tspecIdx; //TSPEC handler uniquely identifying a TSPEC for a STA in a BSS tSirMacTspecIE tspec[HAL_QOS_NUM_AC_MAX]; eHalStatus status[HAL_QOS_NUM_AC_MAX]; - tANI_U8 sessionId; //PE session id for PE<->HAL interface + tANI_U8 sessionId; //PE session id for PE<->HAL interface }tAggrAddTsParams, *tpAggrAddTsParams; #endif /* WLAN_FEATURE_VOWIFI_11R */ @@ -1125,9 +1138,9 @@ typedef struct sAddBAParams // Indicating to HAL whether a response message is required. tANI_U8 respReqd; - tANI_U8 sessionId; // PE session id for PE<->HAL interface - // HAL Sends back the PE session - // id unmodified + tANI_U8 sessionId; // PE session id for PE<->HAL interface + // HAL Sends back the PE session + // id unmodified } tAddBAParams, * tpAddBAParams; @@ -1244,7 +1257,7 @@ typedef struct sBADeleteParams tANI_U32 reasonCode; - tSirMacAddr bssId; // TO SUPPORT BT-AMP + tSirMacAddr bssId; // TO SUPPORT BT-AMP // HAL copies the sta bssid to this. } tBADeleteParams, * tpBADeleteParams; @@ -1255,10 +1268,19 @@ typedef struct sBaActivityInd tANI_U16 baCandidateCnt; //baCandidateCnt is followed by BA Candidate List ( tAddBaCandidate) - tSirMacAddr bssId; // TO SUPPORT BT-AMP + tSirMacAddr bssId; // TO SUPPORT BT-AMP } tBaActivityInd, * tpBaActivityInd; +// Mesg Type = SIR_LIM_IBSS_PEER_INACTIVITY_IND +typedef struct sIbssPeerInactivityInd +{ + tANI_U8 bssIdx; + tANI_U8 staIdx; + tSirMacAddr staAddr; +}tIbssPeerInactivityInd, *tpIbssPeerInactivityInd; + + typedef struct tHalIndCB { @@ -1329,7 +1351,7 @@ typedef struct sEnterBmpsRspParams // typedef struct sMaxTxPowerParams { - tSirMacAddr bssId; // BSSID is needed to identify which session issued this request. As + tSirMacAddr bssId; // BSSID is needed to identify which session issued this request. As //the request has power constraints, this should be applied only to that session tSirMacAddr selfStaMacAddr; //In request, @@ -1339,9 +1361,16 @@ typedef struct sMaxTxPowerParams tPowerdBm power; }tMaxTxPowerParams, *tpMaxTxPowerParams; +typedef struct sMaxTxPowerPerBandParams +{ + eCsrBand bandInfo; + tPowerdBm power; +}tMaxTxPowerPerBandParams, *tpMaxTxPowerPerBandParams; + typedef struct sAddStaSelfParams { tSirMacAddr selfMacAddr; + tVOS_CON_MODE currDeviceMode; tANI_U32 type; tANI_U32 subType; tANI_U8 sessionId; @@ -1364,14 +1393,24 @@ typedef struct sP2pPsParams { tANI_U8 opp_ps; tANI_U32 ctWindow; - tANI_U8 count; + tANI_U8 count; tANI_U32 duration; tANI_U32 interval; tANI_U32 single_noa_duration; tANI_U8 psSelection; }tP2pPsParams, *tpP2pPsParams; -static inline void halGetTxTSFtimer(tpAniSirGlobal pMac, +typedef struct sTdlsLinkEstablishParams +{ + tANI_U16 staIdx; + tANI_U8 isResponder; + tANI_U8 uapsdQueues; + tANI_U8 maxSp; + tANI_U8 isBufsta; + tANI_U32 status; +}tTdlsLinkEstablishParams, *tpTdlsLinkEstablishParams; + +static inline void halGetTxTSFtimer(tpAniSirGlobal pMac, tSirMacTimeStamp *pTime) { } @@ -1398,7 +1437,7 @@ typedef __ani_attr_pre_packed struct sEidByteInfo } __ani_attr_packed tEidByteInfo, *tpEidByteInfo; -/* The above structure would be followed by multiple of below mentioned +/* The above structure would be followed by multiple of below mentioned structure */ typedef __ani_attr_pre_packed struct sBeaconFilterIe { @@ -1407,7 +1446,7 @@ typedef __ani_attr_pre_packed struct sBeaconFilterIe tEidByteInfo byte; } __ani_attr_packed tBeaconFilterIe, *tpBeaconFilterIe; -typedef __ani_attr_pre_packed struct sRemBeaconFilterMsg +typedef __ani_attr_pre_packed struct sRemBeaconFilterMsg { tANI_U8 ucIeCount; tANI_U8 ucRemIeId[1]; diff --git a/CORE/WDA/inc/legacy/halTypes.h b/CORE/WDA/inc/legacy/halTypes.h index a1da0dd75081..f35055ceba8d 100644 --- a/CORE/WDA/inc/legacy/halTypes.h +++ b/CORE/WDA/inc/legacy/halTypes.h @@ -225,6 +225,12 @@ typedef enum } eHalStatus; +typedef enum +{ + HAL_STOP_TYPE_SYS_RESET, + HAL_STOP_TYPE_SYS_DEEP_SLEEP, + HAL_STOP_TYPE_RF_KILL, +}tHalStopType; // macro to check for SUCCESS value of the halStatus #define HAL_STATUS_SUCCESS( variable ) ( eHAL_STATUS_SUCCESS == ( variable ) ) diff --git a/CORE/WDA/inc/legacy/palTypes.h b/CORE/WDA/inc/legacy/palTypes.h index c9e5c876fad4..d2e229734d46 100644 --- a/CORE/WDA/inc/legacy/palTypes.h +++ b/CORE/WDA/inc/legacy/palTypes.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined( PALTYPES_H__ ) #define PALTYPES_H__ @@ -76,7 +75,7 @@ #endif #elif !( defined( ANI_BUS_TYPE_PCIe ) || defined(ANI_BUS_TYPE_PCI) \ - || defined( ANI_BUS_TYPE_PLATFORM ) || defined(QCA_WIFI_2_0)) + || defined( ANI_BUS_TYPE_PLATFORM ) || defined(QCA_WIFI_2_0)) #error "NONE of the ANI_BUS_TYPE_xxx are defined for this build" diff --git a/CORE/WDA/inc/legacy/wlan_qct_hal.h b/CORE/WDA/inc/legacy/wlan_qct_hal.h index a438578a0022..71317ba0ac1e 100644 --- a/CORE/WDA/inc/legacy/wlan_qct_hal.h +++ b/CORE/WDA/inc/legacy/wlan_qct_hal.h @@ -341,6 +341,11 @@ tANI_U8 WLANHAL_RxBD_GetFrameTypeSubType(v_PVOID_t _pvBDHeader, tANI_U16 usFrmCt #ifdef FEATURE_WLAN_TDLS #define HAL_TDLS_PEER_STA_MASK 0x80 //bit 7 set for TDLS peer station #endif + +#ifdef WLAN_FEATURE_RELIABLE_MCAST +#define HAL_RELIABLE_MCAST_REQUESTED_MASK 0x100 +#define HAL_USE_BD_RATE_MASK 0x1000 +#endif /*========================================================================== FUNCTION WLANHAL_FillTxBd diff --git a/CORE/WDA/inc/wlan_qct_wda.h b/CORE/WDA/inc/wlan_qct_wda.h index 7dbceeac1cb4..c7d711762ffa 100644 --- a/CORE/WDA/inc/wlan_qct_wda.h +++ b/CORE/WDA/inc/wlan_qct_wda.h @@ -158,6 +158,12 @@ typedef enum #define IS_ROAM_SCAN_OFFLOAD_FEATURE_ENABLE 0 #endif +#define IS_IBSS_HEARTBEAT_OFFLOAD_FEATURE_ENABLE 0 + +#ifdef FEATURE_WLAN_TDLS +#define IS_ADVANCE_TDLS_ENABLE 0 +#endif + #else /* #ifdef QCA_WIFI_2_0 */ /* @@ -178,6 +184,15 @@ typedef enum #define IS_ROAM_SCAN_OFFLOAD_FEATURE_ENABLE 0 #endif +/* Check if heartbeat offload is enabled */ +#define IS_IBSS_HEARTBEAT_OFFLOAD_FEATURE_ENABLE ((WDI_getHostWlanFeatCaps(IBSS_HEARTBEAT_OFFLOAD)) & (WDA_getFwWlanFeatCaps(IBSS_HEARTBEAT_OFFLOAD))) + +#ifdef FEATURE_WLAN_TDLS +#define IS_ADVANCE_TDLS_ENABLE ((WDI_getHostWlanFeatCaps(ADVANCE_TDLS)) & (WDA_getFwWlanFeatCaps(ADVANCE_TDLS))) +#else +#define IS_ADVANCE_TDLS_ENABLE 0 +#endif + #endif /* #ifdef QCA_WIFI_2_0 */ /*-------------------------------------------------------------------------- @@ -200,9 +215,9 @@ typedef enum WDA_TLI_802_3_HEADER_LEN:WDA_TLI_802_11_HEADER_LEN ) /* TX channel enum type: - - We have five types of TX packets so far and want to block/unblock each - traffic individually according to, for example, low resouce condition. + + We have five types of TX packets so far and want to block/unblock each + traffic individually according to, for example, low resouce condition. Define five TX channels for UMAC here. WDA can map these logical channels to physical DXE channels if needed. */ @@ -223,8 +238,8 @@ typedef enum /* --------------------------------------------------------------------- Libra and Volans specifics - TODO Consider refactoring it and put it into two separate headers, - one for Prima and one for Volans + TODO Consider refactoring it and put it into two separate headers, + one for Prima and one for Volans ----------------------------------------------------------------------*/ /* For backward compatability with SDIO. It's BAL header size for SDIO @@ -247,7 +262,7 @@ typedef enum # define WDA_NUM_STA 8 /* For backward compatability with SDIO. - + For SDIO interface, calculate the TX frame length and number of PDU to transfter the frame. @@ -294,6 +309,7 @@ typedef enum #define WDA_DS_TX_START_XMIT WLANTL_TX_START_XMIT #define WDA_DS_FINISH_ULA WLANTL_FINISH_ULA +#define VOS_TO_WPAL_PKT(_vos_pkt) ((wpt_packet*)_vos_pkt) #define WDA_TX_PACKET_FREED 0X0 @@ -306,10 +322,10 @@ typedef enum /* For data client */ typedef VOS_STATUS (*WDA_DS_TxCompleteCallback) ( v_PVOID_t pContext, vos_pkt_t *pFrameDataBuff, VOS_STATUS txStatus ); typedef VOS_STATUS (*WDA_DS_RxPacketCallback) ( v_PVOID_t pContext, vos_pkt_t *pFrameDataBuff ); -typedef v_U32_t (*WDA_DS_TxPacketCallback) ( v_PVOID_t pContext, - vos_pkt_t **ppFrameDataBuff, - v_U32_t uSize, - v_U8_t uFlowMask, +typedef v_U32_t (*WDA_DS_TxPacketCallback) ( v_PVOID_t pContext, + vos_pkt_t **ppFrameDataBuff, + v_U32_t uSize, + v_U8_t uFlowMask, v_BOOL_t *pbUrgent ); typedef VOS_STATUS (*WDA_DS_ResourceCB) ( v_PVOID_t pContext, v_U32_t uCount ); @@ -326,14 +342,18 @@ typedef void (*pWDATxRxCompFunc)( v_PVOID_t pContext, void *pData, //parameter 2 - txComplete status : 1- success, 0 - failure. typedef eHalStatus (*pWDAAckFnTxComp)(tpAniSirGlobal, tANI_U32); +#ifdef FEATURE_CESIUM_PROPRIETARY +typedef void (*WDA_txFailIndCallback)(tANI_U8 *, tANI_U8); +#endif /* FEATURE_CESIUM_PROPRIETARY */ + /* generic callback for updating parameters from target to UMAC */ typedef void (*wda_tgt_cfg_cb) (void *context, void *param); typedef struct { tANI_U16 ucValidStaIndex ; - /* - * each bit in ucUseBaBitmap represent BA is enabled or not for this tid + /* + * each bit in ucUseBaBitmap represent BA is enabled or not for this tid * tid0 ..bit0, tid1..bit1 and so on.. */ tANI_U8 ucUseBaBitmap ; @@ -362,7 +382,7 @@ typedef struct { v_PVOID_t pVosContext; /* global VOSS context*/ v_PVOID_t pWdiContext; /* WDI context */ - WDA_state wdaState ; /* WDA state tracking */ + WDA_state wdaState ; /* WDA state tracking */ v_PVOID_t wdaWdiCfgApiMsgParam ; /* WDI API paramter tracking */ vos_event_t wdaWdiEvent; /* WDI API sync event */ @@ -372,7 +392,7 @@ typedef struct /* call back function for tx complete*/ pWDATxRxCompFunc pTxCbFunc; /* call back function for tx packet ack */ - pWDAAckFnTxComp pAckTxCbFunc; + pWDAAckFnTxComp pAckTxCbFunc; tANI_U32 frameTransRequired; tSirMacAddr macBSSID; /*BSSID of the network */ tSirMacAddr macSTASelf; /*Self STA MAC*/ @@ -383,16 +403,16 @@ typedef struct /* TL's TX resource callback */ WDA_DS_ResourceCB pfnTxResourceCB; /* TL's TX complete callback */ - WDA_DS_TxCompleteCallback pfnTxCompleteCallback; + WDA_DS_TxCompleteCallback pfnTxCompleteCallback; #endif - + tWdaStaInfo wdaStaInfo[WDA_MAX_STA]; tANI_U8 wdaMaxSta; tWdaTimers wdaTimers; /* STA, AP, IBSS, MULTI-BSS etc.*/ - tBssSystemRole wdaGlobalSystemRole; + tBssSystemRole wdaGlobalSystemRole; /* driver mode, PRODUCTION or FTM */ tDriverType driverMode; @@ -405,7 +425,7 @@ typedef struct /* Status frm TL after suspend/resume Tx */ tANI_U8 txStatus; /* Flag set to true when TL suspend timesout.*/ - tANI_U8 txSuspendTimedOut; + tANI_U8 txSuspendTimedOut; vos_event_t waitOnWdiIndicationCallBack; @@ -415,7 +435,7 @@ typedef struct tSirVersionString wcnssSoftwareVersionString; tSirVersionString wcnssHardwareVersionString; - + tSirLinkState linkState; /* set, when BT AMP session is going on */ v_BOOL_t wdaAmpSessionOn; @@ -423,14 +443,21 @@ typedef struct v_BOOL_t needShutdown; v_BOOL_t wdiFailed; v_BOOL_t wdaTimersCreated; -} tWDA_CbContext ; + + /* Event to wait for WDA stop on FTM mode */ + vos_event_t ftmStopDoneEvent; + +#ifdef FEATURE_CESIUM_PROPRIETARY + WDA_txFailIndCallback txFailIndCallback; +#endif /* FEATURE_CESIUM_PROPRIETARY */ +} tWDA_CbContext ; typedef struct { v_PVOID_t pWdaContext; /* pointer to WDA context*/ v_PVOID_t wdaMsgParam; /* PE parameter tracking */ v_PVOID_t wdaWdiApiMsgParam; /* WDI API paramter tracking */ -} tWDA_ReqParams; +} tWDA_ReqParams; #ifdef QCA_WIFI_2_0 typedef struct { @@ -473,7 +500,7 @@ VOS_STATUS WDA_open(v_PVOID_t pVosContext, v_PVOID_t pOSContext, #ifdef QCA_WIFI_ISOC #define WDA_NVDownload_Start wma_nv_download_start #else -#define WDA_NVDownload_Start(x) ({ VOS_STATUS_SUCCESS; }) +#define WDA_NVDownload_Start(x) ({ VOS_STATUS_SUCCESS; }) #endif #define WDA_preStart wma_pre_start @@ -487,16 +514,16 @@ VOS_STATUS WDA_open(v_PVOID_t pVosContext, v_PVOID_t pOSContext, /* * FUNCTION: WDA_preStart - * Trigger DAL-AL to start CFG download - */ + * Trigger DAL-AL to start CFG download + */ VOS_STATUS WDA_start(v_PVOID_t pVosContext) ; VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext); /* * FUNCTION: WDA_preStart - * Trigger WDA to start CFG download - */ + * Trigger WDA to start CFG download + */ VOS_STATUS WDA_preStart(v_PVOID_t pVosContext) ; /* * FUNCTION: WDA_stop @@ -528,8 +555,8 @@ v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext); /* * FUNCTION: WDA_McProcessMsg - * DAL-AL message processing entry function - */ + * DAL-AL message processing entry function + */ VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg ) ; @@ -539,12 +566,12 @@ VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg ) ; /* * FUNCTION: WDA_MgmtDSRegister * Send Message back to PE - */ + */ -VOS_STATUS WDA_MgmtDSRegister(tWDA_CbContext *pWDA, +VOS_STATUS WDA_MgmtDSRegister(tWDA_CbContext *pWDA, WDA_DS_TxCompleteCb WDA_TxCompleteCallback, - WDA_DS_RxCompleteCb WDA_RxCompleteCallback, - WDA_DS_TxFlowControlCb WDA_TxFlowCtrlCallback + WDA_DS_RxCompleteCb WDA_RxCompleteCallback, + WDA_DS_TxFlowControlCb WDA_TxFlowCtrlCallback ) ; /* @@ -556,14 +583,14 @@ VOS_STATUS WDA_PostMsgApi(tpAniSirGlobal pMac, tSirMsgQ *pMsg) ; /* --------------------------------------------------------- * FUNCTION: wdaGetGlobalSystemRole() * - * Get the global HAL system role. + * Get the global HAL system role. * --------------------------------------------------------- */ tBssSystemRole wdaGetGlobalSystemRole(tpAniSirGlobal pMac); tANI_U8 WDA_MapChannel(tANI_U8); -/* maximum wait time for WDA complete event (correct value has to be derived) +/* maximum wait time for WDA complete event (correct value has to be derived) * for now giving the value 1000 ms */ #define WDA_WDI_COMPLETION_TIME_OUT 30000 /* in ms */ @@ -571,7 +598,7 @@ tANI_U8 WDA_MapChannel(tANI_U8); #define WDA_TL_SUSPEND_TIMEOUT 2000 /* in ms unit */ /*Tag used by WDA to mark a timed out frame*/ -#define WDA_TL_TX_MGMT_TIMED_OUT 0xDEAD +#define WDA_TL_TX_MGMT_TIMED_OUT 0xDEAD #define WDA_TL_TX_SUSPEND_SUCCESS 0 #define WDA_TL_TX_SUSPEND_FAILURE 1 @@ -626,28 +653,30 @@ tANI_U8 WDA_MapChannel(tANI_U8); (((t_packetmeta *)pRxMeta)->timestamp) #define WDA_IS_RX_IN_SCAN(pRxMeta) \ - (((t_packetmeta *)pRxMeta)->scan) + (((t_packetmeta *)pRxMeta)->scan) #ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD #define WDA_GET_OFFLOADSCANLEARN(pRxMeta) \ - (((t_packetmeta *)pRxMeta)->offloadScanLearn) + (((t_packetmeta *)pRxMeta)->offloadScanLearn) #define WDA_GET_ROAMCANDIDATEIND(pRxMeta) \ - (((t_packetmeta *)pRxMeta)->roamCandidateInd) + (((t_packetmeta *)pRxMeta)->roamCandidateInd) #endif #define WDA_GET_RX_SNR(pRxMeta) \ (((t_packetmeta *)pRxMeta)->snr) -#define WDA_GetWcnssWlanCompiledVersion WMA_GetWcnssWlanCompiledVersion +#define WDA_GetWcnssWlanCompiledVersion WMA_GetWcnssWlanCompiledVersion #define WDA_GetWcnssWlanReportedVersion WMA_GetWcnssWlanReportedVersion #define WDA_GetWcnssSoftwareVersion WMA_GetWcnssSoftwareVersion #define WDA_GetWcnssHardwareVersion WMA_GetWcnssHardwareVersion +#define WDA_GET_RX_RFBAND(pRxMeta) 0 + #else /* #ifdef QCA_WIFI_2_0 */ /* --------------------------------------------------------------------------- - + RX Meta info access for Integrated SOC RX BD header access for NON Integrated SOC @@ -689,7 +718,7 @@ tANI_U8 WDA_MapChannel(tANI_U8); # define WDA_GET_RX_MPDU_DATA_OFFSET(pRxMeta) WDA_GET_RX_MPDU_HEADER_LEN(pRxMeta) /* WDA_GET_RX_MPDU_HEADER_OFFSET *********************************************/ -// For Integrated SOC: We UMAC receive the frame, +// For Integrated SOC: We UMAC receive the frame, // BD is gone and MAC header at offset 0 # define WDA_GET_RX_MPDU_HEADER_OFFSET(pRxMeta) 0 @@ -709,13 +738,16 @@ tANI_U8 WDA_MapChannel(tANI_U8); /* WDA_GET_RX_CH *************************************************************/ # define WDA_GET_RX_CH(pRxMeta) (((WDI_DS_RxMetaInfoType*)(pRxMeta))->rxChannel) +/* WDA_GET_RX_RFBAND *********************************************************/ +# define WDA_GET_RX_RFBAND(pRxMeta) (((WDI_DS_RxMetaInfoType*)(pRxMeta))->rfBand) + /* WDA_GET_RX_DPUSIG *********************************************************/ # define WDA_GET_RX_DPUSIG(pRxMeta) (((WDI_DS_RxMetaInfoType*)(pRxMeta))->dpuSig) /* WDA_IS_RX_BCAST ***********************************************************/ # define WDA_IS_RX_BCAST(pRxMeta) \ ( (1 == ((WDI_DS_RxMetaInfoType*)(pRxMeta))->bcast) ? VOS_TRUE : VOS_FALSE ) - + /* WDA_GET_RX_FT_DONE ********************************************************/ # define WDA_GET_RX_FT_DONE(pRxMeta) (((WDI_DS_RxMetaInfoType*)(pRxMeta))->ft) @@ -778,7 +810,7 @@ tANI_U8 WDA_MapChannel(tANI_U8); /* WDA_IS_RX_LAST_MPDU *******************************************************/ # define WDA_IS_RX_LAST_MPDU(pRxMeta) \ - ( ((WDI_DS_RxMetaInfoType*)(pRxMeta))->rxpFlags & WLANWDA_HO_LAST_MPDU_OF_AMPDU ) + ( ((WDI_DS_RxMetaInfoType*)(pRxMeta))->rxpFlags & WLANWDA_HO_LAST_MPDU_OF_AMPDU ) /* WDA_GET_RX_TIMESTAMP *****************************************************/ # define WDA_GET_RX_TIMESTAMP(pRxMeta) (((WDI_DS_RxMetaInfoType*)(pRxMeta))->mclkRxTimestamp) @@ -807,7 +839,7 @@ tANI_U8 WDA_MapChannel(tANI_U8); /* WDA_IS_RX_FC **************************************************************/ // Flow control frames -/* FIXME WDA should provide the meta info which indicates FC frame +/* FIXME WDA should provide the meta info which indicates FC frame In the meantime, use hardcoded FALSE, since we don't support FC yet */ # define WDA_IS_RX_FC(pRxMeta) (((WDI_DS_RxMetaInfoType*)(pRxMeta))->fc) @@ -901,7 +933,7 @@ tSirRetStatus uMacPostCtrlMsg(void* pSirGlobal, tSirMbMsg* pMb); //#define WDA_BTC_SET_CFG SIR_HAL_BTC_SET_CFG //Required by PE -#define WDA_HOST_MSG_START SIR_HAL_HOST_MSG_START +#define WDA_HOST_MSG_START SIR_HAL_HOST_MSG_START #define WDA_INITIAL_CAL_FAILED_NTF SIR_HAL_INITIAL_CAL_FAILED_NTF #define WDA_SHUTDOWN_REQ SIR_HAL_SHUTDOWN_REQ #define WDA_SHUTDOWN_CNF SIR_HAL_SHUTDOWN_CNF @@ -911,7 +943,7 @@ tSirRetStatus uMacPostCtrlMsg(void* pSirGlobal, tSirMbMsg* pMb); (eHalStatus halPhySetRegDomain(tHalHandle hHal, eRegDomainId regDomain)) #endif -#define WDA_APP_SETUP_NTF SIR_HAL_APP_SETUP_NTF +#define WDA_APP_SETUP_NTF SIR_HAL_APP_SETUP_NTF #define WDA_NIC_OPER_NTF SIR_HAL_NIC_OPER_NTF #define WDA_INIT_START_REQ SIR_HAL_INIT_START_REQ #define WDA_RESET_REQ SIR_HAL_RESET_REQ @@ -925,14 +957,14 @@ tSirRetStatus uMacPostCtrlMsg(void* pSirGlobal, tSirMbMsg* pMb); #define WDA_MSG_TYPES_BEGIN SIR_HAL_MSG_TYPES_BEGIN #define WDA_ITC_MSG_TYPES_BEGIN SIR_HAL_ITC_MSG_TYPES_BEGIN #define WDA_RADAR_DETECTED_IND SIR_HAL_RADAR_DETECTED_IND -#define WDA_WDT_KAM_RSP SIR_HAL_WDT_KAM_RSP +#define WDA_WDT_KAM_RSP SIR_HAL_WDT_KAM_RSP #define WDA_TIMER_TEMP_MEAS_REQ SIR_HAL_TIMER_TEMP_MEAS_REQ #define WDA_TIMER_PERIODIC_STATS_COLLECT_REQ SIR_HAL_TIMER_PERIODIC_STATS_COLLECT_REQ #define WDA_CAL_REQ_NTF SIR_HAL_CAL_REQ_NTF #define WDA_MNT_OPEN_TPC_TEMP_MEAS_REQ SIR_HAL_MNT_OPEN_TPC_TEMP_MEAS_REQ #define WDA_CCA_MONITOR_INTERVAL_TO SIR_HAL_CCA_MONITOR_INTERVAL_TO #define WDA_CCA_MONITOR_DURATION_TO SIR_HAL_CCA_MONITOR_DURATION_TO -#define WDA_CCA_MONITOR_START SIR_HAL_CCA_MONITOR_START +#define WDA_CCA_MONITOR_START SIR_HAL_CCA_MONITOR_START #define WDA_CCA_MONITOR_STOP SIR_HAL_CCA_MONITOR_STOP #define WDA_CCA_CHANGE_MODE SIR_HAL_CCA_CHANGE_MODE #define WDA_TIMER_WRAP_AROUND_STATS_COLLECT_REQ SIR_HAL_TIMER_WRAP_AROUND_STATS_COLLECT_REQ @@ -944,7 +976,7 @@ tSirRetStatus uMacPostCtrlMsg(void* pSirGlobal, tSirMbMsg* pMb); #define WDA_ADD_STA_RSP SIR_HAL_ADD_STA_RSP #define WDA_ADD_STA_SELF_RSP SIR_HAL_ADD_STA_SELF_RSP #define WDA_DEL_STA_SELF_RSP SIR_HAL_DEL_STA_SELF_RSP -#define WDA_DELETE_STA_REQ SIR_HAL_DELETE_STA_REQ +#define WDA_DELETE_STA_REQ SIR_HAL_DELETE_STA_REQ #define WDA_DELETE_STA_RSP SIR_HAL_DELETE_STA_RSP #define WDA_ADD_BSS_REQ SIR_HAL_ADD_BSS_REQ #define WDA_ADD_BSS_RSP SIR_HAL_ADD_BSS_RSP @@ -971,7 +1003,7 @@ tSirRetStatus uMacPostCtrlMsg(void* pSirGlobal, tSirMbMsg* pMb); #define WDA_SET_BSSKEY_RSP SIR_HAL_SET_BSSKEY_RSP #define WDA_SET_STAKEY_REQ SIR_HAL_SET_STAKEY_REQ #define WDA_SET_STAKEY_RSP SIR_HAL_SET_STAKEY_RSP -#define WDA_DPU_STATS_REQ SIR_HAL_DPU_STATS_REQ +#define WDA_DPU_STATS_REQ SIR_HAL_DPU_STATS_REQ #define WDA_DPU_STATS_RSP SIR_HAL_DPU_STATS_RSP #define WDA_GET_DPUINFO_REQ SIR_HAL_GET_DPUINFO_REQ #define WDA_GET_DPUINFO_RSP SIR_HAL_GET_DPUINFO_RSP @@ -991,7 +1023,7 @@ tSirRetStatus uMacPostCtrlMsg(void* pSirGlobal, tSirMbMsg* pMb); #define WDA_MBOX_SENDMSG_COMPLETE_IND SIR_HAL_MBOX_SENDMSG_COMPLETE_IND #define WDA_EXIT_BMPS_REQ SIR_HAL_EXIT_BMPS_REQ #define WDA_EXIT_BMPS_RSP SIR_HAL_EXIT_BMPS_RSP -#define WDA_EXIT_BMPS_IND SIR_HAL_EXIT_BMPS_IND +#define WDA_EXIT_BMPS_IND SIR_HAL_EXIT_BMPS_IND #define WDA_ENTER_BMPS_REQ SIR_HAL_ENTER_BMPS_REQ #define WDA_ENTER_BMPS_RSP SIR_HAL_ENTER_BMPS_RSP #define WDA_BMPS_STATUS_IND SIR_HAL_BMPS_STATUS_IND @@ -1014,7 +1046,7 @@ tSirRetStatus uMacPostCtrlMsg(void* pSirGlobal, tSirMbMsg* pMb); #define WDA_SOFTMAC_BULKREGREAD_RESPONSE SIR_HAL_SOFTMAC_BULKREGREAD_RESPONSE #define WDA_SOFTMAC_HOSTMESG_MSGPROCESSRESULT SIR_HAL_SOFTMAC_HOSTMESG_MSGPROCESSRESULT -#define WDA_ADDBA_REQ SIR_HAL_ADDBA_REQ +#define WDA_ADDBA_REQ SIR_HAL_ADDBA_REQ #define WDA_ADDBA_RSP SIR_HAL_ADDBA_RSP #define WDA_DELBA_IND SIR_HAL_DELBA_IND #define WDA_DEL_BA_IND SIR_HAL_DEL_BA_IND @@ -1030,11 +1062,11 @@ tSirRetStatus uMacPostCtrlMsg(void* pSirGlobal, tSirMbMsg* pMb); #define WDA_ENTER_IMPS_RSP SIR_HAL_ENTER_IMPS_RSP #define WDA_EXIT_IMPS_RSP SIR_HAL_EXIT_IMPS_RSP #define WDA_EXIT_IMPS_REQ SIR_HAL_EXIT_IMPS_REQ -#define WDA_SOFTMAC_HOSTMESG_PS_STATUS_IND SIR_HAL_SOFTMAC_HOSTMESG_PS_STATUS_IND +#define WDA_SOFTMAC_HOSTMESG_PS_STATUS_IND SIR_HAL_SOFTMAC_HOSTMESG_PS_STATUS_IND #define WDA_POSTPONE_ENTER_IMPS_RSP SIR_HAL_POSTPONE_ENTER_IMPS_RSP -#define WDA_STA_STAT_REQ SIR_HAL_STA_STAT_REQ +#define WDA_STA_STAT_REQ SIR_HAL_STA_STAT_REQ #define WDA_GLOBAL_STAT_REQ SIR_HAL_GLOBAL_STAT_REQ -#define WDA_AGGR_STAT_REQ SIR_HAL_AGGR_STAT_REQ +#define WDA_AGGR_STAT_REQ SIR_HAL_AGGR_STAT_REQ #define WDA_STA_STAT_RSP SIR_HAL_STA_STAT_RSP #define WDA_GLOBAL_STAT_RSP SIR_HAL_GLOBAL_STAT_RSP #define WDA_AGGR_STAT_RSP SIR_HAL_AGGR_STAT_RSP @@ -1044,7 +1076,7 @@ tSirRetStatus uMacPostCtrlMsg(void* pSirGlobal, tSirMbMsg* pMb); #define WDA_REMOVE_BSSKEY_RSP SIR_HAL_REMOVE_BSSKEY_RSP #define WDA_REMOVE_STAKEY_REQ SIR_HAL_REMOVE_STAKEY_REQ #define WDA_REMOVE_STAKEY_RSP SIR_HAL_REMOVE_STAKEY_RSP -#define WDA_SET_STA_BCASTKEY_REQ SIR_HAL_SET_STA_BCASTKEY_REQ +#define WDA_SET_STA_BCASTKEY_REQ SIR_HAL_SET_STA_BCASTKEY_REQ #define WDA_SET_STA_BCASTKEY_RSP SIR_HAL_SET_STA_BCASTKEY_RSP #define WDA_REMOVE_STA_BCASTKEY_REQ SIR_HAL_REMOVE_STA_BCASTKEY_REQ #define WDA_REMOVE_STA_BCASTKEY_RSP SIR_HAL_REMOVE_STA_BCASTKEY_RSP @@ -1067,14 +1099,14 @@ tSirRetStatus uMacPostCtrlMsg(void* pSirGlobal, tSirMbMsg* pMb); #define WDA_UPDATE_PROBE_RSP_IE_BITMAP_IND SIR_HAL_UPDATE_PROBE_RSP_IE_BITMAP_IND #define WDA_UPDATE_UAPSD_IND SIR_HAL_UPDATE_UAPSD_IND -#define WDA_SET_MIMOPS_REQ SIR_HAL_SET_MIMOPS_REQ +#define WDA_SET_MIMOPS_REQ SIR_HAL_SET_MIMOPS_REQ #define WDA_SET_MIMOPS_RSP SIR_HAL_SET_MIMOPS_RSP #define WDA_SYS_READY_IND SIR_HAL_SYS_READY_IND #define WDA_SET_TX_POWER_REQ SIR_HAL_SET_TX_POWER_REQ #define WDA_SET_TX_POWER_RSP SIR_HAL_SET_TX_POWER_RSP #define WDA_GET_TX_POWER_REQ SIR_HAL_GET_TX_POWER_REQ #define WDA_GET_TX_POWER_RSP SIR_HAL_GET_TX_POWER_RSP -#define WDA_GET_NOISE_REQ SIR_HAL_GET_NOISE_REQ +#define WDA_GET_NOISE_REQ SIR_HAL_GET_NOISE_REQ #define WDA_GET_NOISE_RSP SIR_HAL_GET_NOISE_RSP #define WDA_SET_TX_PER_TRACKING_REQ SIR_HAL_SET_TX_PER_TRACKING_REQ @@ -1088,9 +1120,9 @@ tSirRetStatus uMacPostCtrlMsg(void* pSirGlobal, tSirMbMsg* pMb); #define WDA_BEACON_PRE_IND SIR_HAL_BEACON_PRE_IND #define WDA_ENTER_UAPSD_REQ SIR_HAL_ENTER_UAPSD_REQ #define WDA_ENTER_UAPSD_RSP SIR_HAL_ENTER_UAPSD_RSP -#define WDA_EXIT_UAPSD_REQ SIR_HAL_EXIT_UAPSD_REQ +#define WDA_EXIT_UAPSD_REQ SIR_HAL_EXIT_UAPSD_REQ #define WDA_EXIT_UAPSD_RSP SIR_HAL_EXIT_UAPSD_RSP -#define WDA_LOW_RSSI_IND SIR_HAL_LOW_RSSI_IND +#define WDA_LOW_RSSI_IND SIR_HAL_LOW_RSSI_IND #define WDA_BEACON_FILTER_IND SIR_HAL_BEACON_FILTER_IND /// PE <-> HAL WOWL messages #define WDA_WOWL_ADD_BCAST_PTRN SIR_HAL_WOWL_ADD_BCAST_PTRN @@ -1115,7 +1147,7 @@ tSirRetStatus uMacPostCtrlMsg(void* pSirGlobal, tSirMbMsg* pMb); #ifdef FEATURE_OEM_DATA_SUPPORT /* PE <-> HAL OEM_DATA RELATED MESSAGES */ -#define WDA_START_OEM_DATA_REQ SIR_HAL_START_OEM_DATA_REQ +#define WDA_START_OEM_DATA_REQ SIR_HAL_START_OEM_DATA_REQ #define WDA_START_OEM_DATA_RSP SIR_HAL_START_OEM_DATA_RSP #define WDA_FINISH_OEM_DATA_REQ SIR_HAL_FINISH_OEM_DATA_REQ #endif @@ -1123,7 +1155,12 @@ tSirRetStatus uMacPostCtrlMsg(void* pSirGlobal, tSirMbMsg* pMb); #define WDA_SET_MAX_TX_POWER_REQ SIR_HAL_SET_MAX_TX_POWER_REQ #define WDA_SET_MAX_TX_POWER_RSP SIR_HAL_SET_MAX_TX_POWER_RSP -#define WDA_SEND_MSG_COMPLETE SIR_HAL_SEND_MSG_COMPLETE +#define WDA_SET_MAX_TX_POWER_PER_BAND_REQ \ + SIR_HAL_SET_MAX_TX_POWER_PER_BAND_REQ +#define WDA_SET_MAX_TX_POWER_PER_BAND_RSP \ + SIR_HAL_SET_MAX_TX_POWER_PER_BAND_RSP + +#define WDA_SEND_MSG_COMPLETE SIR_HAL_SEND_MSG_COMPLETE /// PE <-> HAL Host Offload message #define WDA_SET_HOST_OFFLOAD SIR_HAL_SET_HOST_OFFLOAD @@ -1138,14 +1175,16 @@ tSirRetStatus uMacPostCtrlMsg(void* pSirGlobal, tSirMbMsg* pMb); #define WDA_DEL_STA_SELF_REQ SIR_HAL_DEL_STA_SELF_REQ #define WDA_SET_P2P_GO_NOA_REQ SIR_HAL_SET_P2P_GO_NOA_REQ +#define WDA_SET_TDLS_LINK_ESTABLISH_REQ SIR_HAL_TDLS_LINK_ESTABLISH_REQ +#define WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP SIR_HAL_TDLS_LINK_ESTABLISH_REQ_RSP #define WDA_TX_COMPLETE_TIMEOUT_IND (WDA_MSG_TYPES_END - 1) #define WDA_WLAN_SUSPEND_IND SIR_HAL_WLAN_SUSPEND_IND #define WDA_WLAN_RESUME_REQ SIR_HAL_WLAN_RESUME_REQ #define WDA_MSG_TYPES_END SIR_HAL_MSG_TYPES_END -#define WDA_MMH_TXMB_READY_EVT SIR_HAL_MMH_TXMB_READY_EVT -#define WDA_MMH_RXMB_DONE_EVT SIR_HAL_MMH_RXMB_DONE_EVT +#define WDA_MMH_TXMB_READY_EVT SIR_HAL_MMH_TXMB_READY_EVT +#define WDA_MMH_RXMB_DONE_EVT SIR_HAL_MMH_RXMB_DONE_EVT #define WDA_MMH_MSGQ_NE_EVT SIR_HAL_MMH_MSGQ_NE_EVT #ifdef WLAN_FEATURE_VOWIFI_11R @@ -1169,11 +1208,13 @@ tSirRetStatus uMacPostCtrlMsg(void* pSirGlobal, tSirMbMsg* pMb); #endif // FEATURE_WLAN_SCAN_PNO #ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD +#define WDA_ROAM_SCAN_OFFLOAD_REQ SIR_HAL_ROAM_SCAN_OFFLOAD_REQ +#define WDA_ROAM_SCAN_OFFLOAD_RSP SIR_HAL_ROAM_SCAN_OFFLOAD_RSP #define WDA_START_ROAM_CANDIDATE_LOOKUP_REQ SIR_HAL_START_ROAM_CANDIDATE_LOOKUP_REQ #endif #ifdef WLAN_WAKEUP_EVENTS -#define WDA_WAKE_REASON_IND SIR_HAL_WAKE_REASON_IND +#define WDA_WAKE_REASON_IND SIR_HAL_WAKE_REASON_IND #endif // WLAN_WAKEUP_EVENTS #ifdef WLAN_FEATURE_PACKET_FILTERING @@ -1181,10 +1222,17 @@ tSirRetStatus uMacPostCtrlMsg(void* pSirGlobal, tSirMbMsg* pMb); #define WDA_RECEIVE_FILTER_SET_FILTER_REQ SIR_HAL_RECEIVE_FILTER_SET_FILTER_REQ #define WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ SIR_HAL_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ #define WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP SIR_HAL_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP -#define WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ SIR_HAL_RECEIVE_FILTER_CLEAR_FILTER_REQ +#define WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ SIR_HAL_RECEIVE_FILTER_CLEAR_FILTER_REQ #endif // WLAN_FEATURE_PACKET_FILTERING #define WDA_SET_POWER_PARAMS_REQ SIR_HAL_SET_POWER_PARAMS_REQ +#define WDA_DHCP_START_IND SIR_HAL_DHCP_START_IND +#define WDA_DHCP_STOP_IND SIR_HAL_DHCP_STOP_IND + +#ifdef FEATURE_CESIUM_PROPRIETARY +#define WDA_TX_FAIL_MONITOR_IND SIR_HAL_TX_FAIL_MONITOR_IND +#endif /* FEATURE_CESIUM_PROPRIETARY */ + #ifdef WLAN_FEATURE_GTK_OFFLOAD #define WDA_GTK_OFFLOAD_REQ SIR_HAL_GTK_OFFLOAD_REQ @@ -1210,20 +1258,53 @@ tSirRetStatus uMacPostCtrlMsg(void* pSirGlobal, tSirMbMsg* pMb); #define WDA_UPDATE_CHAN_LIST_REQ SIR_HAL_UPDATE_CHAN_LIST_REQ #define WDA_UPDATE_CHAN_LIST_RSP SIR_HAL_UPDATE_CHAN_LIST_RSP #define WDA_RX_SCAN_EVENT SIR_HAL_RX_SCAN_EVENT +#define WDA_IBSS_PEER_INACTIVITY_IND SIR_HAL_IBSS_PEER_INACTIVITY_IND + #ifdef QCA_WIFI_2_0 #define WDA_CLI_SET_CMD SIR_HAL_CLI_SET_CMD #define WDA_CLI_GET_CMD SIR_HAL_CLI_GET_CMD +#endif #ifdef FEATURE_WLAN_SCAN_PNO #define WDA_SME_SCAN_CACHE_UPDATED SIR_HAL_SME_SCAN_CACHE_UPDATED #endif -#endif #ifndef REMOVE_PKT_LOG #define WDA_PKTLOG_ENABLE_REQ SIR_HAL_PKTLOG_ENABLE_REQ #endif +#ifdef FEATURE_WLAN_LPHB +#define WDA_LPHB_CONF_REQ SIR_HAL_LPHB_CONF_IND +#define WDA_LPHB_WAIT_EXPIRE_IND SIR_HAL_LPHB_WAIT_EXPIRE_IND +#endif /* FEATURE_WLAN_LPHB */ + +#define WDA_ADD_PERIODIC_TX_PTRN_IND SIR_HAL_ADD_PERIODIC_TX_PTRN_IND +#define WDA_DEL_PERIODIC_TX_PTRN_IND SIR_HAL_DEL_PERIODIC_TX_PTRN_IND + #define WDA_RATE_UPDATE_IND SIR_HAL_RATE_UPDATE_IND +#if defined WLAN_FEATURE_RELIABLE_MCAST +#define WDA_RMC_BECOME_LEADER SIR_HAL_RMC_BECOME_LEADER +#define WDA_RMC_LEADER_SELECT_RESP SIR_HAL_RMC_LEADER_SELECT_RESP +#define WDA_RMC_LEADER_REQ SIR_HAL_RMC_LEADER_REQ +#define WDA_RMC_UPDATE_IND SIR_HAL_RMC_UPDATE_IND +#endif /* defined WLAN_FEATURE_RELIABLE_MCAST */ + +#ifdef FEATURE_CESIUM_PROPRIETARY +/* IBSS peer info related message */ +#define WDA_GET_IBSS_PEER_INFO_REQ SIR_HAL_IBSS_PEER_INFO_REQ +#define WDA_GET_IBSS_PEER_INFO_RSP SIR_HAL_IBSS_PEER_INFO_RSP + +/* IBSS Route table update indication */ +#define WDA_IBSS_ROUTE_TABLE_UPDATE_IND SIR_HAL_IBSS_ROUTE_TABLE_UPDATE_IND +#endif /* FEATURE_CESIUM_PROPRIETARY */ + +#ifdef FEATURE_WLAN_BATCH_SCAN +#define WDA_SET_BATCH_SCAN_REQ SIR_HAL_SET_BATCH_SCAN_REQ +#define WDA_SET_BATCH_SCAN_RSP SIR_HAL_SET_BATCH_SCAN_RSP +#define WDA_STOP_BATCH_SCAN_IND SIR_HAL_STOP_BATCH_SCAN_IND +#define WDA_TRIGGER_BATCH_SCAN_RESULT_IND SIR_HAL_TRIGGER_BATCH_SCAN_RESULT_IND +#endif + tSirRetStatus wdaPostCtrlMsg(tpAniSirGlobal pMac, tSirMsgQ *pMsg); #define HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME 0x40 // Bit 6 will be used to control BD rate for Management frames @@ -1267,24 +1348,49 @@ tSirRetStatus wdaPostCtrlMsg(tpAniSirGlobal pMac, tSirMsgQ *pMsg); #define WDA_SetHTConfig wma_set_htconfig #define WDA_UpdateRssiBmps WMA_UpdateRssiBmps -#else +VOS_STATUS WDA_SetIdlePsConfig(void *wda_handle, tANI_U32 idle_ps); +static inline void WDA_UpdateSnrBmps(v_PVOID_t pvosGCtx, v_U8_t staId, + v_S7_t snr) +{ -eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId); -static int WDA_SetHTConfig(tANI_U8 sessionId, tANI_U16 htCapab, int value) +} + +static inline int WDA_GetSnr(tANI_U8 ucSTAId, tANI_S8* pSnr) { - return 0; + return VOS_STATUS_SUCCESS; +} + +static inline void WDA_UpdateLinkCapacity(v_PVOID_t pvosGCtx, v_U8_t staId, + v_U32_t linkCapacity) +{ + } +#else + +eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId, + tAniBool sendRegHint); + static inline eHalStatus WDA_SetCountryCode(v_VOID_t *client_ctx, tANI_U8 *countrycode) { return eHAL_STATUS_SUCCESS; } +static inline int WDA_SetHTConfig(tANI_U8 sessionId, tANI_U16 htCapab, + int value) +{ + return 0; +} + +static inline VOS_STATUS WDA_SetIdlePsConfig(void *wda_handle, tANI_U32 idle_ps) +{ + return VOS_STATUS_SUCCESS; +} /* ----------------------------------------------------------------- WDA data path API's for TL -------------------------------------------------------------------*/ -v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx, +v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx, tANI_U8 staIdx); # define WDA_EnableUapsdAcParams(vosGCtx, staId, uapsdInfo) \ @@ -1299,8 +1405,16 @@ v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx, #define WDA_UpdateRssiBmps(pvosGCtx, staId, rssi) \ WLANTL_UpdateRssiBmps(pvosGCtx, staId, rssi) -#endif /* #ifdef QCA_WIFI_2_0 */ +#define WDA_UpdateSnrBmps(pvosGCtx, staId, rssi) \ + WLANTL_UpdateSnrBmps(pvosGCtx, staId, snr) + +#define WDA_GetSnr(staId, snr) \ + WLANTL_GetSnr(staId, snr) +#define WDA_UpdateLinkCapacity(pvosGCtx, staId, linkCapacity) \ + WLANTL_UpdateLinkCapacity(pvosGCtx, staId, linkCapacity) + +#endif /* #ifdef QCA_WIFI_2_0 */ /*========================================================================== FUNCTION WDA_DS_PeekRxPacketInfo @@ -1346,10 +1460,10 @@ WDA_DS_PeekRxPacketInfo #define WDA_getFwWlanFeatCaps wma_getFwWlanFeatCaps #define WDA_TransportChannelDebug(mac, disp_snapshot, \ - toggle_stall_detect) ({ \ - (void)mac; \ - (void)disp_snapshot; \ - (void)toggle_stall_detect; \ + toggle_stall_detect) ({ \ + (void)mac; \ + (void)disp_snapshot; \ + (void)toggle_stall_detect; \ }) #define WDA_TrafficStatsTimerActivate WMA_TrafficStatsTimerActivate @@ -1357,42 +1471,42 @@ WDA_DS_PeekRxPacketInfo #else /* #ifdef QCA_WIFI_2_0 */ -#ifdef WLAN_PERF +#ifdef WLAN_PERF /*========================================================================== FUNCTION WDA_TLI_FastHwFwdDataFrame - DESCRIPTION + DESCRIPTION For NON integrated SOC, this function is called by TL. - Fast path function to quickly forward a data frame if HAL determines BD - signature computed here matches the signature inside current VOSS packet. - If there is a match, HAL and TL fills in the swapped packet length into - BD header and DxE header, respectively. Otherwise, packet goes back to + Fast path function to quickly forward a data frame if HAL determines BD + signature computed here matches the signature inside current VOSS packet. + If there is a match, HAL and TL fills in the swapped packet length into + BD header and DxE header, respectively. Otherwise, packet goes back to normal (slow) path and a new BD signature would be tagged into BD in this VOSS packet later by the WLANHAL_FillTxBd() function. - TODO For integrated SOC, this function does nothing yet. Pima SLM/HAL + TODO For integrated SOC, this function does nothing yet. Pima SLM/HAL should provide the equivelant functionality. - DEPENDENCIES - - PARAMETERS + DEPENDENCIES + + PARAMETERS IN pvosGCtx VOS context vosDataBuff Ptr to VOSS packet pMetaInfo For getting frame's TID pStaInfo For checking STA type - + OUT pvosStatus returned status puFastFwdOK Flag to indicate whether frame could be fast forwarded - + RETURN VALUE - No return. - - SIDE EFFECTS + No return. + SIDE EFFECTS + ============================================================================*/ void WDA_TLI_FastHwFwdDataFrame ( @@ -1408,7 +1522,7 @@ void WDA_TLI_FastHwFwdDataFrame /*========================================================================== FUNCTION WDA_DS_Register - DESCRIPTION + DESCRIPTION Register TL client to WDA. This function registers TL RX/TX functions to WDI by calling WDI_DS_Register. @@ -1416,14 +1530,14 @@ void WDA_TLI_FastHwFwdDataFrame For NON integrated SOC, this function calls WLANBAL_RegTlCbFunctions to register TL's RX/TX functions to BAL - TODO + TODO For Prima, pfnResourceCB gets called in WDTS_OOResourceNotification. The uCount parameter is AC mask. It should be redefined to use the same resource callback function. - DEPENDENCIES - - PARAMETERS + DEPENDENCIES + + PARAMETERS IN pvosGCtx VOS context @@ -1434,22 +1548,22 @@ void WDA_TLI_FastHwFwdDataFrame pCallbackContext WDI calls callback function with it VOS global context pointer OUT - uAvailableTxBuf available TX PDU numbder. + uAvailableTxBuf available TX PDU numbder. BAL returns it for NON integrated SOC - + RETURN VALUE - VOS_STATUS_E_FAULT: pointer is NULL and other errors + VOS_STATUS_E_FAULT: pointer is NULL and other errors VOS_STATUS_SUCCESS: Everything is good :) - SIDE EFFECTS - + SIDE EFFECTS + ============================================================================*/ -VOS_STATUS -WDA_DS_Register -( - v_PVOID_t pvosGCtx, +VOS_STATUS +WDA_DS_Register +( + v_PVOID_t pvosGCtx, WDA_DS_TxCompleteCallback pfnTxCompleteCallback, - WDA_DS_RxPacketCallback pfnRxPacketCallback, + WDA_DS_RxPacketCallback pfnRxPacketCallback, WDA_DS_TxPacketCallback pfnTxPacketCallback, WDA_DS_ResourceCB pfnResourceCB, v_U32_t uResTheshold, @@ -1460,27 +1574,27 @@ WDA_DS_Register /*========================================================================== FUNCTION WDA_DS_StartXmit - DESCRIPTION - Serialize TX transmit reques to TX thread. + DESCRIPTION + Serialize TX transmit reques to TX thread. TODO This sends TX transmit request to TL. It should send to WDI for abstraction. For NON integrated SOC, this function calls WLANBAL_StartXmit - DEPENDENCIES - - PARAMETERS + DEPENDENCIES + + PARAMETERS IN pvosGCtx VOS context - + RETURN VALUE - VOS_STATUS_E_FAULT: pointer is NULL and other errors + VOS_STATUS_E_FAULT: pointer is NULL and other errors VOS_STATUS_SUCCESS: Everything is good :) - SIDE EFFECTS - + SIDE EFFECTS + ============================================================================*/ VOS_STATUS WDA_DS_StartXmit @@ -1491,22 +1605,22 @@ WDA_DS_StartXmit /*========================================================================== FUNCTION WDA_DS_FinishULA - DESCRIPTION - Serialize Finish Upper Level Authentication reques to TX thread. - - DEPENDENCIES + DESCRIPTION + Serialize Finish Upper Level Authentication reques to TX thread. - PARAMETERS + DEPENDENCIES + + PARAMETERS IN callbackRoutine routine to be called in TX thread - callbackContext user data for the above routine - + callbackContext user data for the above routine + RETURN VALUE please see vos_tx_mq_serialize - SIDE EFFECTS - + SIDE EFFECTS + ============================================================================*/ VOS_STATUS WDA_DS_FinishULA @@ -1520,10 +1634,10 @@ WDA_DS_FinishULA DESCRIPTION Build TX meta info for integrated SOC. - + Same function calls HAL for reserve BD header space into VOS packet and HAL function to fill it. - + DEPENDENCIES PARAMETERS @@ -1549,7 +1663,7 @@ WDA_DS_FinishULA *pusPktLen Packet length RETURN VALUE - VOS_STATUS_E_FAULT: pointer is NULL and other errors + VOS_STATUS_E_FAULT: pointer is NULL and other errors VOS_STATUS_SUCCESS: Everything is good :) SIDE EFFECTS @@ -1581,7 +1695,7 @@ WDA_DS_BuildTxPacketInfo DESCRIPTION Trim/Remove RX BD header for NON integrated SOC. It does nothing for integrated SOC. - + DEPENDENCIES PARAMETERS @@ -1590,7 +1704,7 @@ WDA_DS_BuildTxPacketInfo vosDataBuff vos data buffer RETURN VALUE - VOS_STATUS_E_FAULT: pointer is NULL and other errors + VOS_STATUS_E_FAULT: pointer is NULL and other errors VOS_STATUS_SUCCESS: Everything is good :) SIDE EFFECTS @@ -1598,7 +1712,7 @@ WDA_DS_BuildTxPacketInfo ============================================================================*/ VOS_STATUS WDA_DS_TrimRxPacketInfo -( +( vos_pkt_t *vosDataBuff ); @@ -1610,19 +1724,19 @@ WDA_DS_TrimRxPacketInfo Returning 0 will put TL in out-of-resource condition for TX. Return current PDU resources from BAL for NON integrated SOC. - + DEPENDENCIES PARAMETERS IN vosDataBuff vos data buffer - + OUT puResCount available PDU number for TX RETURN VALUE - VOS_STATUS_E_FAULT: pointer is NULL and other errors + VOS_STATUS_E_FAULT: pointer is NULL and other errors VOS_STATUS_SUCCESS: Everything is good :) SIDE EFFECTS @@ -1630,7 +1744,7 @@ WDA_DS_TrimRxPacketInfo ============================================================================*/ VOS_STATUS WDA_DS_GetTxResources -( +( v_PVOID_t pvosGCtx, v_U32_t* puResCount ); @@ -1639,7 +1753,7 @@ WDA_DS_GetTxResources FUNCTION WDA_DS_GetRssi DESCRIPTION - Get RSSI + Get RSSI TODO It returns hardcoded value in the meantime since WDA/WDI does nothing support it yet for Prima. @@ -1655,7 +1769,7 @@ WDA_DS_GetTxResources puRssi RSSI RETURN VALUE - VOS_STATUS_E_FAULT: pointer is NULL and other errors + VOS_STATUS_E_FAULT: pointer is NULL and other errors VOS_STATUS_SUCCESS: Everything is good :) SIDE EFFECTS @@ -1688,7 +1802,7 @@ WDA_DS_GetRssi OUT RETURN VALUE - VOS_STATUS_E_FAULT: pointer is NULL and other errors + VOS_STATUS_E_FAULT: pointer is NULL and other errors VOS_STATUS_SUCCESS: Everything is good :) SIDE EFFECTS @@ -1710,7 +1824,7 @@ WDA_DS_RxAmsduBdFix back to BD header. So for NON integrated SOC, this function does the same. - For integrated SOC, WDI does the same, not TL. + For integrated SOC, WDI does the same, not TL. It does return typeSubtype from RX meta info for integrated SOC. DEPENDENCIES @@ -1726,7 +1840,7 @@ WDA_DS_RxAmsduBdFix ucTypeSubtype typeSubtype RETURN VALUE - VOS_STATUS_E_FAULT: pointer is NULL and other errors + VOS_STATUS_E_FAULT: pointer is NULL and other errors VOS_STATUS_SUCCESS: Everything is good :) SIDE EFFECTS @@ -1788,7 +1902,7 @@ WDA_DS_GetReplayCounter OUT RETURN VALUE - VOS_STATUS_E_FAULT: pointer is NULL and other errors + VOS_STATUS_E_FAULT: pointer is NULL and other errors VOS_STATUS_SUCCESS: Everything is good :) SIDE EFFECTS @@ -1823,7 +1937,7 @@ WDA_DS_SetRSSIThresholds OUT RETURN VALUE - VOS_STATUS_E_FAULT: pointer is NULL and other errors + VOS_STATUS_E_FAULT: pointer is NULL and other errors VOS_STATUS_SUCCESS: Everything is good :) SIDE EFFECTS @@ -1831,8 +1945,8 @@ WDA_DS_SetRSSIThresholds ============================================================================*/ VOS_STATUS WDA_DS_TxFrames -( - v_PVOID_t pvosGCtx +( + v_PVOID_t pvosGCtx ); /*========================================================================== @@ -1882,7 +1996,7 @@ WDA_DS_TxFlowControlCallback Defined in WDA_TXFlowEnumType RETURN VALUE - VOS_STATUS_E_INVAL: pointer is NULL and other errors + VOS_STATUS_E_INVAL: pointer is NULL and other errors VOS_STATUS_SUCCESS: Everything is good :) SIDE EFFECTS @@ -1900,7 +2014,7 @@ WDA_DS_GetTxFlowMask DESCRIPTION Send Dump commandsto WDI - + DEPENDENCIES PARAMETERS @@ -1917,13 +2031,13 @@ WDA_DS_GetTxFlowMask pBuffer Dump command Response buffer RETURN VALUE - VOS_STATUS_E_FAULT: pointer is NULL and other errors + VOS_STATUS_E_FAULT: pointer is NULL and other errors VOS_STATUS_SUCCESS: Everything is good :) SIDE EFFECTS ============================================================================*/ -VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac,tANI_U32 cmd, +VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac,tANI_U32 cmd, tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3, tANI_U32 arg4, tANI_U8 *pBuffer); @@ -1945,7 +2059,7 @@ VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac,tANI_U32 cmd, RETURN VALUE NONE - + SIDE EFFECTS ============================================================================*/ void WDA_featureCapsExchange(v_PVOID_t pVosContext); @@ -1971,7 +2085,7 @@ void WDA_disableCapablityFeature(tANI_U8 feature_index); RETURN VALUE 0 - implies feature is NOT Supported any non zero value - implies feature is SUPPORTED - + SIDE EFFECTS ============================================================================*/ tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue); @@ -1996,7 +2110,7 @@ tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue); RETURN VALUE 0 - implies feature is NOT Supported any non zero value - implies feature is SUPPORTED - + SIDE EFFECTS ============================================================================*/ tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue); @@ -2126,5 +2240,4 @@ typedef struct sDisableUapsdParams tANI_U32 status; }tDisableUapsdParams, *tpDisableUapsdParams; -VOS_STATUS WDA_SetIdlePsConfig(void *wda_handle, tANI_U32 idle_ps); #endif diff --git a/CORE/WDA/src/wlan_qct_wda.c b/CORE/WDA/src/wlan_qct_wda.c index 7a014a5b26a5..baed057c3281 100644 --- a/CORE/WDA/src/wlan_qct_wda.c +++ b/CORE/WDA/src/wlan_qct_wda.c @@ -179,7 +179,7 @@ static VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA, tSirSetRSSIF static VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA, tSirUpdateScanParams *pUpdateScanParams); #endif // FEATURE_WLAN_SCAN_PNO #ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD -VOS_STATUS WDA_ProcessStartRoamCandidatelookupReq(tWDA_CbContext *pWDA,tSirRoamOffloadScanReq *pRoamOffloadScanReqParams); +VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,tSirRoamOffloadScanReq *pRoamOffloadScanReqParams); void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData); void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType); void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType); @@ -222,6 +222,19 @@ VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA, tUpdateVHTOpMode *pData); #endif +#ifdef FEATURE_WLAN_LPHB +VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA, + tSirLPHBReq *pData); +#endif /* FEATURE_WLAN_LPHB */ + +#ifdef FEATURE_CESIUM_PROPRIETARY +void WDA_IBSSPeerInfoRequestHandler(v_PVOID_t pVosContext, + v_PVOID_t pData); + +VOS_STATUS WDA_ProcessIBSSRouteTableUpdateInd(tWDA_CbContext *pWDA, + tAniIbssRouteTable *pData); +#endif /* FEATURE_CESIUM_PROPRIETARY */ + /* * FUNCTION: WDA_open * Allocate the WDA context @@ -494,6 +507,10 @@ VOS_STATUS WDA_start(v_PVOID_t pVosContext) wdaContext->wdaTimersCreated = VOS_TRUE; } } + else + { + vos_event_init(&wdaContext->ftmStopDoneEvent); + } return status; } @@ -514,6 +531,8 @@ VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext, tANI_U32 configParamSize; tANI_U32 *configDataValue; WDI_WlanVersionType wcnssCompiledApiVersion; + tANI_U8 i; + if ((NULL == pMac)||(NULL == wdaContext)) { VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, @@ -1359,6 +1378,68 @@ VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext, tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct + sizeof(tHalCfg) + tlvStruct->length) ; + for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_VICTIM; i++) + { + /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WAN_FREQ */ + tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WAN_FREQ + i*4; + tlvStruct->length = sizeof(tANI_U32); + configDataValue = (tANI_U32 *)(tlvStruct + 1); + *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWANFreq[i]; + tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct + + sizeof(tHalCfg) + tlvStruct->length) ; + + /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WLAN_FREQ */ + tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WLAN_FREQ + i*4; + tlvStruct->length = sizeof(tANI_U32); + configDataValue = (tANI_U32 *)(tlvStruct + 1); + *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWLANFreq[i]; + tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct + + sizeof(tHalCfg) + tlvStruct->length) ; + + /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG */ + tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG + i*4; + tlvStruct->length = sizeof(tANI_U32); + configDataValue = (tANI_U32 *)(tlvStruct + 1); + *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig[i]; + tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct + + sizeof(tHalCfg) + tlvStruct->length) ; + + /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG2 */ + tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG2 + i*4; + tlvStruct->length = sizeof(tANI_U32); + configDataValue = (tANI_U32 *)(tlvStruct + 1); + *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig2[i]; + tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct + + sizeof(tHalCfg) + tlvStruct->length) ; + } + + /* [COEX] QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF */ + tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF ; + tlvStruct->length = sizeof(tANI_U32); + configDataValue = (tANI_U32 *)(tlvStruct + 1); + *configDataValue = pMac->btc.btcConfig.mwsCoexModemBackoff; + tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct + + sizeof(tHalCfg) + tlvStruct->length) ; + + for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_CONFIG; i++) + { + /* [COEX] QWLAN_HAL_CFG_MWS_COEX_CONFIGX */ + tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_CONFIG1 + i; + tlvStruct->length = sizeof(tANI_U32); + configDataValue = (tANI_U32 *)(tlvStruct + 1); + *configDataValue = pMac->btc.btcConfig.mwsCoexConfig[i]; + tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct + + sizeof(tHalCfg) + tlvStruct->length) ; + } + + /* [COEX] QWLAN_HAL_CFG_SAR_POWER_BACKOFF */ + tlvStruct->type = QWLAN_HAL_CFG_SAR_POWER_BACKOFF ; + tlvStruct->length = sizeof(tANI_U32); + configDataValue = (tANI_U32 *)(tlvStruct + 1); + *configDataValue = pMac->btc.btcConfig.SARPowerBackoff; + tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct + + sizeof(tHalCfg) + tlvStruct->length) ; + /* QWLAN_HAL_CFG_WCNSS_API_VERSION */ tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ; tlvStruct->length = sizeof(tANI_U32); @@ -1475,6 +1556,119 @@ VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext, tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct + sizeof(tHalCfg) + tlvStruct->length) ; +#ifdef FEATURE_WLAN_TDLS + /* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */ + tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_MASK; + tlvStruct->length = sizeof(tANI_U32); + configDataValue = (tANI_U32 *)(tlvStruct + 1); + if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK, + configDataValue ) != eSIR_SUCCESS) + { + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "Failed to get value for WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK"); + goto handle_failure; + } + tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct + + sizeof(tHalCfg) + tlvStruct->length) ; + + /* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */ + tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE; + tlvStruct->length = sizeof(tANI_U32); + configDataValue = (tANI_U32 *)(tlvStruct + 1); + if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_BUF_STA_ENABLED, + configDataValue ) != eSIR_SUCCESS) + { + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED"); + goto handle_failure; + } + tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct + + sizeof(tHalCfg) + tlvStruct->length) ; + /* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */ + tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME; + tlvStruct->length = sizeof(tANI_U32); + configDataValue = (tANI_U32 *)(tlvStruct + 1); + if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_PUAPSD_INACT_TIME, + configDataValue ) != eSIR_SUCCESS) + { + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "Failed to get value for WNI_CFG_TDLS_PUAPSD_INACT_TIME"); + goto handle_failure; + } + tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct + + sizeof(tHalCfg) + tlvStruct->length) ; + /* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */ + tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP; + tlvStruct->length = sizeof(tANI_U32); + configDataValue = (tANI_U32 *)(tlvStruct + 1); + if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_RX_FRAME_THRESHOLD, + configDataValue ) != eSIR_SUCCESS) + { + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "Failed to get value for WNI_CFG_TDLS_RX_FRAME_THRESHOLD"); + goto handle_failure; + } + tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct + + sizeof(tHalCfg) + tlvStruct->length) ; +#endif + + /* QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN */ + tlvStruct->type = QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE ; + tlvStruct->length = sizeof(tANI_U32); + configDataValue = (tANI_U32 *)(tlvStruct + 1); + if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_ADAPT_RX_DRAIN, + configDataValue ) != eSIR_SUCCESS) + { + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "Failed to get value for WNI_CFG_ENABLE_ADAPT_RX_DRAIN"); + goto handle_failure; + } + + tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct + + sizeof(tHalCfg) + tlvStruct->length) ; + + /* QWLAN_HAL_CFG_FLEX_CONNECT_POWER_FACTOR */ + tlvStruct->type = QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR; + tlvStruct->length = sizeof(tANI_U32); + configDataValue = (tANI_U32 *)(tlvStruct + 1); + if(wlan_cfgGetInt(pMac, WNI_CFG_FLEX_CONNECT_POWER_FACTOR, configDataValue) + != eSIR_SUCCESS) + { + VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "Failed to get value for WNI_CFG_FLEX_CONNECT_POWER_FACTOR"); + goto handle_failure; + } + tlvStruct = (tHalCfg *)(((tANI_U8 *) tlvStruct + + sizeof(tHalCfg) + tlvStruct->length)); + + /* QWLAN_HAL_CFG_ANTENNA_DIVERSITY */ + tlvStruct->type = QWLAN_HAL_CFG_ANTENNA_DIVERSITY; + tlvStruct->length = sizeof(tANI_U32); + configDataValue = (tANI_U32 *)(tlvStruct + 1); + if (wlan_cfgGetInt(pMac, WNI_CFG_ANTENNA_DIVESITY, + configDataValue ) != eSIR_SUCCESS) + { + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "Failed to get value for WNI_CFG_ANTENNA_DIVESITY"); + goto handle_failure; + } + + tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct + + sizeof(tHalCfg) + tlvStruct->length) ; + + /* QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT */ + tlvStruct->type = QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT ; + tlvStruct->length = sizeof(tANI_U32); + configDataValue = (tANI_U32 *)(tlvStruct + 1); + if(wlan_cfgGetInt(pMac, WNI_CFG_GO_LINK_MONITOR_TIMEOUT, + configDataValue ) != eSIR_SUCCESS) + { + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "Failed to get value for WNI_CFG_GO_LINK_MONITOR_TIMEOUT"); + goto handle_failure; + } + tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct + + sizeof(tHalCfg) + tlvStruct->length) ; wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ; #ifdef WLAN_DEBUG @@ -1554,6 +1748,18 @@ void WDA_stopCallback(WDI_Status status, void* pUserData) wdaContext->wdaState = WDA_STOP_STATE; } + /* FTM Driver stop procedure should be synced. + * Stop and Close will happen on same context */ + if (eDRIVER_TYPE_MFG == wdaContext->driverMode) + { + if (VOS_STATUS_SUCCESS != vos_event_set(&wdaContext->ftmStopDoneEvent)) + { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + "%s: FTM Stop Event Set Fail", __func__); + VOS_ASSERT(0); + } + } + /* Indicate VOSS about the start complete */ vos_WDAComplete_cback(wdaContext->pVosContext); @@ -1638,6 +1844,21 @@ VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason) vos_mem_free(pWdaParams); status = VOS_STATUS_E_FAILURE; } + + /* FTM Driver stop procedure should be synced. + * Stop and Close will happen on same context */ + if (eDRIVER_TYPE_MFG == pWDA->driverMode) + { + status = vos_wait_single_event(&pWDA->ftmStopDoneEvent, + WDI_RESPONSE_TIMEOUT); + if (status != VOS_STATUS_SUCCESS) + { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + "%s: FTM Stop Timepoout", __func__); + VOS_ASSERT(0); + vos_event_reset(&pWDA->ftmStopDoneEvent); + } + } return status; } /* @@ -2896,12 +3117,20 @@ VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA, tAddBssParams* configBssReqParam) { WDI_Status status = WDI_STATUS_SUCCESS ; - WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam = - (WDI_ConfigBSSReqParamsType *)vos_mem_malloc( - sizeof(WDI_ConfigBSSReqParamsType)) ; + WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam; tWDA_ReqParams *pWdaParams ; VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "------> %s " ,__func__); + if (NULL == configBssReqParam) + { + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, + "%s: configBssReqParam is NULL", __func__); + return VOS_STATUS_E_INVAL; + } + + wdiConfigBssReqParam = (WDI_ConfigBSSReqParamsType *)vos_mem_malloc( + sizeof(WDI_ConfigBSSReqParamsType)) ; + if(NULL == wdiConfigBssReqParam) { VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, @@ -3428,6 +3657,7 @@ VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pA } wdiAddStaSelfReq->wdiReqStatusCB = NULL; vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6); + wdiAddStaSelfReq->wdiAddSTASelfInfo.currDeviceMode = pAddStaSelfReq->currDeviceMode; /* Store Init Req pointer, as this will be used for response */ /* store Params pass it to WDI */ pWdaParams->pWdaContext = pWDA; @@ -4867,7 +5097,6 @@ void WDA_GetStatsReqParamsCallback( pGetPEStatsRspParams->msgType = wdiGetStatsRsp->usMsgType; pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) + (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)); - pGetPEStatsRspParams->msgLen = wdiGetStatsRsp->usMsgLen + sizeof(tANI_U8); //Fill the Session Id Properly in PE pGetPEStatsRspParams->sessionId = 0; @@ -5042,10 +5271,10 @@ VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA, VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "%s: VOS MEM Alloc Failure", __func__); VOS_ASSERT(0); - vos_mem_free(pGetRoamRssiParams); - vos_mem_free(pWdaParams); return VOS_STATUS_E_NOMEM; } + vos_mem_free(pGetRoamRssiParams); + vos_mem_free(pWdaParams); pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId; pGetRoamRssiRspParams->rc = eSIR_FAILURE; pGetRoamRssiRspParams->rssi = 0; @@ -5115,7 +5344,16 @@ VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA, return VOS_STATUS_E_NOMEM; } wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx; - wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid = pEdcaParams->highPerformance; + /* + Since firmware is not using highperformance flag, we have removed + this flag from wdiEDCAInfo structure to match sizeof the structure + between host and firmware.In future if we are planning to use + highperformance flag then Please define this flag in wdiEDCAInfo + structure, update it here and send it to firmware. i.e. + Following is the original line which we removed as part of the fix + wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid = + pEdcaParams->highPerformance; + */ WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo, &pEdcaParams->acbe); WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo, @@ -5857,7 +6095,8 @@ void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, v { tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData; tWDA_CbContext *pWDA = NULL; - tTSMStats *pTsmRspParams = NULL; + tpAniGetTsmStatsRsp pTsmRspParams = NULL; + tpAniGetTsmStatsReq pGetTsmStatsReqParams = NULL; VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "<------ Entering: %s " ,__func__); @@ -5869,7 +6108,18 @@ void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, v return ; } pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext; - pTsmRspParams = (tTSMStats *)pWdaParams->wdaMsgParam ; + pGetTsmStatsReqParams = (tAniGetTsmStatsReq *)pWdaParams->wdaMsgParam; + if(NULL == pGetTsmStatsReqParams) + { + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "%s: pGetTsmStatsReqParams received NULL", __func__); + VOS_ASSERT(0); + vos_mem_free(pWdaParams->wdaWdiApiMsgParam); + vos_mem_free(pWdaParams); + return; + } + pTsmRspParams = + (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp)); if( NULL == pTsmRspParams ) { VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, @@ -5877,9 +6127,11 @@ void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, v VOS_ASSERT( 0 ); return ; } - vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ; - vos_mem_free(pWdaParams); + vos_mem_set(pTsmRspParams, sizeof(tAniGetTsmStatsRsp), 0); + pTsmRspParams->rc = pwdiTSMStatsRspParams->wdiStatus; + pTsmRspParams->staId = pGetTsmStatsReqParams->staId; + pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly; vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist, pwdiTSMStatsRspParams->UplinkPktQueueDlyHist, @@ -5890,6 +6142,13 @@ void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, v pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount; pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount; pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly; + + /* Assign get tsm stats req req (backup) in to the response */ + pTsmRspParams->tsmStatsReq = pGetTsmStatsReqParams; + /* free WDI command buffer */ + vos_mem_free(pWdaParams->wdaWdiApiMsgParam); + vos_mem_free(pWdaParams); + WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ; return ; } @@ -5900,11 +6159,13 @@ void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, v * Request to WDI to get the TSM Stats params. */ VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA, - tTSMStats *pTsmStats) + tpAniGetTsmStatsReq pTsmStats) { - WDI_Status status = WDI_STATUS_SUCCESS ; + WDI_Status status = WDI_STATUS_SUCCESS ; WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL; - tWDA_ReqParams *pWdaParams = NULL; + tWDA_ReqParams *pWdaParams = NULL; + tAniGetTsmStatsRsp *pGetTsmStatsRspParams = NULL; + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "------> Entering: %s " ,__func__); wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc( @@ -5934,17 +6195,28 @@ VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA, pWdaParams->pWdaContext = pWDA; /* Store TSM Stats pointer, as this will be used for response */ pWdaParams->wdaMsgParam = (void *)pTsmStats ; - /* store Params pass it to WDI */ - pWdaParams->wdaWdiApiMsgParam = (void *)wdiTSMReqParam ; + pWdaParams->wdaWdiApiMsgParam = NULL ; status = WDI_TSMStatsReq(wdiTSMReqParam, (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams); if(IS_WDI_STATUS_FAILURE(status)) { VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "Failure in TSM STATS REQ Params WDI API, free all the memory " ); - vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ; - vos_mem_free(pWdaParams) ; - WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmStats , 0) ; + vos_mem_free(pWdaParams); + pGetTsmStatsRspParams = + (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp)); + if(NULL == pGetTsmStatsRspParams) + { + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "%s: VOS MEM Alloc Failure", __func__); + VOS_ASSERT(0); + vos_mem_free(pTsmStats); + return VOS_STATUS_E_NOMEM; + } + pGetTsmStatsRspParams->staId = pTsmStats->staId; + pGetTsmStatsRspParams->rc = eSIR_FAILURE; + pGetTsmStatsRspParams->tsmStatsReq = pTsmStats; + WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void*)pGetTsmStatsRspParams, 0); } return CONVERT_WDI2VOS_STATUS(status) ; } @@ -6169,6 +6441,114 @@ void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp, } #endif +/* + * FUNCTION: WDA_SetMaxTxPowerPerBandCallBack + * send the response to PE with power value received from WDI + */ +void WDA_SetMaxTxPowerPerBandCallBack(WDI_SetMaxTxPowerPerBandRspMsg + *pwdiSetMaxTxPowerPerBandRsp, + void* pUserData) +{ + tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData; + tWDA_CbContext *pWDA = NULL; + tMaxTxPowerPerBandParams *pMxTxPwrPerBandParams = NULL; + + VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, + "<------ %s ", __func__); + if (NULL == pWdaParams) + { + VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "%s: pWdaParams received NULL", __func__); + VOS_ASSERT(0); + return ; + } + pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext; + pMxTxPwrPerBandParams = (tMaxTxPowerPerBandParams*)pWdaParams->wdaMsgParam; + if ( NULL == pMxTxPwrPerBandParams ) + { + VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "%s: pMxTxPwrPerBandParams received NULL ", __func__); + VOS_ASSERT(0); + vos_mem_free(pWdaParams->wdaWdiApiMsgParam); + vos_mem_free(pWdaParams); + return; + } + + /*need to free memory for the pointers used in the + WDA Process.Set Max Tx Power Req function*/ + vos_mem_free(pWdaParams->wdaWdiApiMsgParam); + vos_mem_free(pWdaParams); + pMxTxPwrPerBandParams->power = pwdiSetMaxTxPowerPerBandRsp->ucPower; + + /* send response to UMAC*/ + WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_PER_BAND_RSP, + pMxTxPwrPerBandParams, 0); + + return; +} + +/* + * FUNCTION: WDA_ProcessSetMaxTxPowerPerBandReq + * Request to WDI to send set Max Tx Power Per band Request + */ + VOS_STATUS WDA_ProcessSetMaxTxPowerPerBandReq(tWDA_CbContext *pWDA, + tMaxTxPowerPerBandParams + *MaxTxPowerPerBandParams) +{ + WDI_Status status = WDI_STATUS_SUCCESS; + WDI_SetMaxTxPowerPerBandParamsType *wdiSetMxTxPwrPerBandParams = NULL; + tWDA_ReqParams *pWdaParams = NULL; + + VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, + "------> %s ", __func__); + + wdiSetMxTxPwrPerBandParams = vos_mem_malloc( + sizeof(WDI_SetMaxTxPowerPerBandParamsType)); + + if (NULL == wdiSetMxTxPwrPerBandParams) + { + VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "%s: VOS MEM Alloc Failure", __func__); + VOS_ASSERT(0); + return VOS_STATUS_E_NOMEM; + } + pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)); + if (NULL == pWdaParams) + { + VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "%s: VOS MEM Alloc Failure", __func__); + vos_mem_free(wdiSetMxTxPwrPerBandParams); + VOS_ASSERT(0); + return VOS_STATUS_E_NOMEM; + } + /* Copy.Max.Tx.Power.Per.Band Params to WDI structure */ + wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.bandInfo = \ + MaxTxPowerPerBandParams->bandInfo; + wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.ucPower = \ + MaxTxPowerPerBandParams->power; + wdiSetMxTxPwrPerBandParams->wdiReqStatusCB = NULL; + pWdaParams->pWdaContext = pWDA; + pWdaParams->wdaMsgParam = (void *)MaxTxPowerPerBandParams; + /* store Params pass it to WDI */ + pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMxTxPwrPerBandParams; + status = WDI_SetMaxTxPowerPerBandReq(wdiSetMxTxPwrPerBandParams, + WDA_SetMaxTxPowerPerBandCallBack, + pWdaParams); + if (IS_WDI_STATUS_FAILURE(status)) + { + VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "Failure in SET MAX TX Power REQ Params WDI API," + " free all the memory"); + vos_mem_free(pWdaParams->wdaWdiApiMsgParam); + vos_mem_free(pWdaParams); + /* send response to UMAC*/ + WDA_SendMsg(pWDA, + WDA_SET_MAX_TX_POWER_PER_BAND_RSP, + MaxTxPowerPerBandParams, 0); + } + return CONVERT_WDI2VOS_STATUS(status); +} + /* * FUNCTION: WDA_SetTxPowerCallBack * send the response to PE with power value received from WDI @@ -6367,17 +6747,20 @@ VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA, return CONVERT_WDI2VOS_STATUS(status); } -#ifdef WLAN_FEATURE_VOWIFI_11R + +#ifdef FEATURE_WLAN_TDLS /* - * FUNCTION: WDA_AggrAddTSReqCallback - * send ADD AGGREGATED TS RSP back to PE - */ -void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData) + * FUNCTION: WDA_SetP2PGONOAReqParamsCallback + * Free the memory. No need to send any response to PE in this case + */ +void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_SetTdlsLinkEstablishReqResp *wdiSetTdlsLinkEstablishReqRsp, + void* pUserData) { - tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ; - tWDA_CbContext *pWDA; - tAggrAddTsParams *pAggrAddTsReqParams; - int i; + tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData; + tWDA_CbContext *pWDA = NULL; + tTdlsLinkEstablishParams *pTdlsLinkEstablishParams; + + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "<------ %s " ,__func__); if(NULL == pWdaParams) @@ -6387,23 +6770,135 @@ void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData) VOS_ASSERT(0) ; return ; } + pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext; - pWDA = pWdaParams->pWdaContext; - pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ; - - for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ ) + if(NULL == pWdaParams) { - pAggrAddTsReqParams->status[i] = (status) ; + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "%s: pWdaParams received NULL", __func__); + VOS_ASSERT(0) ; + return ; } - WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ; - + pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams *)pWdaParams->wdaMsgParam ; + if( NULL == pTdlsLinkEstablishParams ) + { + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "%s: pTdlsLinkEstablishParams " + "received NULL " ,__func__); + VOS_ASSERT(0); + vos_mem_free(pWdaParams->wdaWdiApiMsgParam); + vos_mem_free(pWdaParams); + return ; + } + pTdlsLinkEstablishParams->status = CONVERT_WDI2SIR_STATUS( + wdiSetTdlsLinkEstablishReqRsp->wdiStatus); vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ; vos_mem_free(pWdaParams); + /* send response to UMAC*/ + WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, pTdlsLinkEstablishParams, 0) ; + return ; -}/* WLAN_FEATURE_VOWIFI_11R */ -/* - * FUNCTION: WDA_ProcessAddTSReq - * Request to WDI to send an update with AGGREGATED ADD TS REQ params. +} + +VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA, + tTdlsLinkEstablishParams *pTdlsLinkEstablishParams) +{ + WDI_Status status = WDI_STATUS_SUCCESS ; + WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam = + (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc( + sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ; + tWDA_ReqParams *pWdaParams = NULL; + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, + "------> %s " ,__func__); + if(NULL == wdiSetTDLSLinkEstablishReqParam) + { + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "%s: VOS MEM Alloc Failure", __func__); + VOS_ASSERT(0); + return VOS_STATUS_E_NOMEM; + } + pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ; + if(NULL == pWdaParams) + { + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "%s: VOS MEM Alloc Failure", __func__); + vos_mem_free(pTdlsLinkEstablishParams); + vos_mem_free(wdiSetTDLSLinkEstablishReqParam); + VOS_ASSERT(0); + return VOS_STATUS_E_NOMEM; + } + wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx = + pTdlsLinkEstablishParams->staIdx; + wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder = + pTdlsLinkEstablishParams->isResponder; + wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues = + pTdlsLinkEstablishParams->uapsdQueues; + wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp = + pTdlsLinkEstablishParams->maxSp; + wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta = + pTdlsLinkEstablishParams->isBufsta; + + wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ; + /* Store msg pointer from PE, as this will be used for response */ + pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ; + /* store Params pass it to WDI */ + pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ; + pWdaParams->pWdaContext = pWDA; + + status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam, + (WDI_SetTDLSLinkEstablishReqParamsRspCb) + WDA_SetTDLSLinkEstablishReqParamsCallback, + pWdaParams); + if(IS_WDI_STATUS_FAILURE(status)) + { + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "Failure in Set P2P GO NOA Req WDI API, free all the memory " ); + vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ; + vos_mem_free(pWdaParams->wdaMsgParam); + vos_mem_free(pWdaParams); + } + return CONVERT_WDI2VOS_STATUS(status); +} +#endif + + +#ifdef WLAN_FEATURE_VOWIFI_11R +/* + * FUNCTION: WDA_AggrAddTSReqCallback + * send ADD AGGREGATED TS RSP back to PE + */ +void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData) +{ + tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ; + tWDA_CbContext *pWDA; + tAggrAddTsParams *pAggrAddTsReqParams; + int i; + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, + "<------ %s " ,__func__); + if(NULL == pWdaParams) + { + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "%s: pWdaParams received NULL", __func__); + VOS_ASSERT(0) ; + return ; + } + + pWDA = pWdaParams->pWdaContext; + pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ; + + for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ ) + { + pAggrAddTsReqParams->status[i] = (status) ; + } + WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ; + + vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ; + vos_mem_free(pWdaParams); + return ; +}/* WLAN_FEATURE_VOWIFI_11R */ +/* + * FUNCTION: WDA_ProcessAddTSReq + * Request to WDI to send an update with AGGREGATED ADD TS REQ params. */ VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA, tAggrAddTsParams *pAggrAddTsReqParams) @@ -8908,6 +9403,9 @@ VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA, vos_mem_free(wdiWowlEnterInfo); return VOS_STATUS_E_NOMEM; } + + vos_mem_zero(pWdaParams, sizeof(tWDA_ReqParams)); + vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn, pWowlEnterParams->magicPtrn, sizeof(tSirMacAddr)); @@ -9159,7 +9657,8 @@ VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext) } /* Get the NV structure base address and size from VOS */ - vos_nv_getNVBuffer(&pNvBuffer,&bufferSize); + vos_nv_getNVEncodedBuffer(&pNvBuffer,&bufferSize); + wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc( sizeof(WDI_NvDownloadReqParamsType)) ; if(NULL == wdiNvDownloadReqParam) @@ -9794,7 +10293,7 @@ void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkO tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData; tWDA_CbContext *pWDA; tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq; - tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tpSirGtkOffloadGetInfoRspParams)) ; + tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams)) ; vos_msg_t vosMsg; VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, @@ -9810,7 +10309,7 @@ void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkO /* Message Header */ pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP; - pGtkOffloadGetInfoRsp->mesgLen = sizeof(tpSirGtkOffloadGetInfoRspParams); + pGtkOffloadGetInfoRsp->mesgLen = sizeof(tSirGtkOffloadGetInfoRspParams); pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus; pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter; @@ -10100,289 +10599,1210 @@ VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA, #endif // WLAN_FEATURE_GTK_OFFLOAD /* - * ------------------------------------------------------------------------- - * DATA interface with WDI for Mgmt Frames - * ------------------------------------------------------------------------- + * FUNCTION: WDA_ProcessAddPeriodicTxPtrnInd + * */ -/* - * FUNCTION: WDA_TxComplete - * Callback function for the WDA_TxPacket - */ -VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData, - VOS_STATUS status ) +VOS_STATUS WDA_ProcessAddPeriodicTxPtrnInd(tWDA_CbContext *pWDA, + tSirAddPeriodicTxPtrn *pAddPeriodicTxPtrnParams) { - - tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext); - tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ; - tANI_U32 uUserData; + WDI_Status wdiStatus; + WDI_AddPeriodicTxPtrnParamsType *addPeriodicTxPtrnParams; - if(NULL == wdaContext) + addPeriodicTxPtrnParams = + vos_mem_malloc(sizeof(WDI_AddPeriodicTxPtrnParamsType)); + + if (NULL == addPeriodicTxPtrnParams) { - VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, - "%s:pWDA is NULL", - __func__); - VOS_ASSERT(0); - return VOS_STATUS_E_FAILURE; + VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "%s: Not able to allocate memory for addPeriodicTxPtrnParams!", + __func__); + + return VOS_STATUS_E_NOMEM; } - /*Check if frame was timed out or not*/ - vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA, - (v_PVOID_t)&uUserData); + vos_mem_copy(&(addPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams), + pAddPeriodicTxPtrnParams, sizeof(tSirAddPeriodicTxPtrn)); - if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData ) - { - /*Discard frame - no further processing is needed*/ - vos_pkt_return_packet(pData); - return VOS_STATUS_SUCCESS; - } + addPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback; + addPeriodicTxPtrnParams->pUserData = pWDA; - /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/ - if( NULL!=wdaContext->pTxCbFunc) + wdiStatus = WDI_AddPeriodicTxPtrnInd(addPeriodicTxPtrnParams); + + if (WDI_STATUS_PENDING == wdiStatus) { - /*check if packet is freed already*/ - if(vos_atomic_set_U32(&wdaContext->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED) == (v_U32_t)pData) - { - wdaContext->pTxCbFunc(pMac, pData); - } - else - { - VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, - "%s:packet (%p) is already freed", - __func__, pData); - //Return from here since we reaching here because the packet already timeout - return status; - } + VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, + "Pending received for %s:%d", __func__, __LINE__ ); } - - /* - * Trigger the event to bring the HAL TL Tx complete function to come - * out of wait - * Let the coe above to complete the packet first. When this event is set, - * the thread waiting for the event may run and set Vospacket_freed causing the original - * packet not being freed. - */ - status = vos_event_set(&wdaContext->txFrameEvent); - if(!VOS_IS_STATUS_SUCCESS(status)) + else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus) { - VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, - "NEW VOS Event Set failed - status = %d \n", status); + VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "Failure in %s:%d", __func__, __LINE__ ); } - return status; + + vos_mem_free(addPeriodicTxPtrnParams); + + return CONVERT_WDI2VOS_STATUS(wdiStatus); } + /* - * FUNCTION: WDA_TxPacket - * Forward TX management frame to WDI - */ -VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA, - void *pFrmBuf, - tANI_U16 frmLen, - eFrameType frmType, - eFrameTxDir txDir, - tANI_U8 tid, - pWDATxRxCompFunc pCompFunc, - void *pData, - pWDAAckFnTxComp pAckTxComp, - tANI_U8 txFlag) + * FUNCTION: WDA_ProcessDelPeriodicTxPtrnInd + * + */ +VOS_STATUS WDA_ProcessDelPeriodicTxPtrnInd(tWDA_CbContext *pWDA, + tSirDelPeriodicTxPtrn *pDelPeriodicTxPtrnParams) { - VOS_STATUS status = VOS_STATUS_SUCCESS ; - tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData; - tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType; - tANI_U8 eventIdx = 0; - tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE; - tpAniSirGlobal pMac; - if((NULL == pWDA)||(NULL == pFrmBuf)) + WDI_Status wdiStatus; + WDI_DelPeriodicTxPtrnParamsType *delPeriodicTxPtrnParams; + + delPeriodicTxPtrnParams = + vos_mem_malloc(sizeof(WDI_DelPeriodicTxPtrnParamsType)); + + if (NULL == delPeriodicTxPtrnParams) { - VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, - "%s:pWDA %p or pFrmBuf %p is NULL", - __func__,pWDA,pFrmBuf); - VOS_ASSERT(0); - return VOS_STATUS_E_FAILURE; + VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "%s: Not able to allocate memory for delPeriodicTxPtrnParams!", + __func__); + + return VOS_STATUS_E_NOMEM; } - - VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH, - "Tx Mgmt Frame Subtype: %d alloc(%p)\n", pFc->subType, pFrmBuf); - pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext); - if(NULL == pMac) + + vos_mem_copy(&(delPeriodicTxPtrnParams->wdiDelPeriodicTxPtrnParams), + pDelPeriodicTxPtrnParams, sizeof(tSirDelPeriodicTxPtrn)); + + delPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback; + delPeriodicTxPtrnParams->pUserData = pWDA; + + wdiStatus = WDI_DelPeriodicTxPtrnInd(delPeriodicTxPtrnParams); + + if (WDI_STATUS_PENDING == wdiStatus) { - VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, - "%s:pMac is NULL", __func__); - VOS_ASSERT(0); - return VOS_STATUS_E_FAILURE; + VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, + "Pending received for %s:%d", __func__, __LINE__ ); } - - - - /* store the call back function in WDA context */ - pWDA->pTxCbFunc = pCompFunc; - /* store the call back for the function of ackTxComplete */ - if( pAckTxComp ) + else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus) { - if( NULL != pWDA->pAckTxCbFunc ) - { - /* Already TxComp is active no need to active again */ - VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, - "There is already one request pending for tx complete\n"); - pWDA->pAckTxCbFunc( pMac, 0); - pWDA->pAckTxCbFunc = NULL; + VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "Failure in %s:%d", __func__, __LINE__ ); + } - if( VOS_STATUS_SUCCESS != - WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer)) - { - VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, - "Tx Complete timeout Timer Stop Failed "); - } - else - { - VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, - "Tx Complete timeout Timer Stop Success "); - } - } + vos_mem_free(delPeriodicTxPtrnParams); - txFlag |= HAL_TXCOMP_REQUESTED_MASK; - pWDA->pAckTxCbFunc = pAckTxComp; - if( VOS_STATUS_SUCCESS != - WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) ) - { - VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, - "Tx Complete Timer Start Failed "); - pWDA->pAckTxCbFunc = NULL; - return eHAL_STATUS_FAILURE; - } - } - /* Reset the event to be not signalled */ - status = vos_event_reset(&pWDA->txFrameEvent); - if(!VOS_IS_STATUS_SUCCESS(status)) - { - VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, - "VOS Event reset failed - status = %d\n",status); - pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf); - if( pAckTxComp ) - { - pWDA->pAckTxCbFunc = NULL; - if( VOS_STATUS_SUCCESS != - WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer)) - { - VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, - "Tx Complete timeout Timer Stop Failed "); - } - } - return VOS_STATUS_E_FAILURE; - } + return CONVERT_WDI2VOS_STATUS(wdiStatus); +} - /* If Peer Sta mask is set don't overwrite to self sta */ - if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK) +/* + * FUNCTION: WDA_ProcessRateUpdateInd + * + */ +VOS_STATUS WDA_ProcessRateUpdateInd(tWDA_CbContext *pWDA, + tSirRateUpdateInd *pRateUpdateParams) +{ + WDI_Status wdiStatus; + WDI_RateUpdateIndParams rateUpdateParams; + + vos_mem_copy(rateUpdateParams.bssid, + pRateUpdateParams->bssid, sizeof(tSirMacAddr)); + + rateUpdateParams.ucastDataRateTxFlag = + pRateUpdateParams->ucastDataRateTxFlag; + rateUpdateParams.reliableMcastDataRateTxFlag = + pRateUpdateParams->reliableMcastDataRateTxFlag; + rateUpdateParams.mcastDataRate24GHzTxFlag = + pRateUpdateParams->mcastDataRate24GHzTxFlag; + rateUpdateParams.mcastDataRate5GHzTxFlag = + pRateUpdateParams->mcastDataRate5GHzTxFlag; + + rateUpdateParams.ucastDataRate = pRateUpdateParams->ucastDataRate; + rateUpdateParams.reliableMcastDataRate = + pRateUpdateParams->reliableMcastDataRate; + rateUpdateParams.mcastDataRate24GHz = pRateUpdateParams->mcastDataRate24GHz; + rateUpdateParams.mcastDataRate5GHz = pRateUpdateParams->mcastDataRate5GHz; + + rateUpdateParams.wdiReqStatusCB = WDA_WdiIndicationCallback; + rateUpdateParams.pUserData = pWDA; + + wdiStatus = WDI_RateUpdateInd(&rateUpdateParams); + + if (WDI_STATUS_PENDING == wdiStatus) { - txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK; + VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, + "Pending received for %s:%d", __func__, __LINE__ ); } - else + else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus) { - /* Get system role, use the self station if in unknown role or STA role */ - systemRole = wdaGetGlobalSystemRole(pMac); - if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) || - (( eSYSTEM_STA_ROLE == systemRole ) -#if defined FEATURE_WLAN_CCX || defined FEATURE_WLAN_TDLS - && frmType == HAL_TXRX_FRM_802_11_MGMT -#endif - )) - { - txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK; - } + VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "Failure in %s:%d", __func__, __LINE__ ); } - /* Divert Disassoc/Deauth frames thru self station, as by the time unicast - disassoc frame reaches the HW, HAL has already deleted the peer station */ - if ((pFc->type == SIR_MAC_MGMT_FRAME)) + vos_mem_free(pRateUpdateParams); + + return CONVERT_WDI2VOS_STATUS(wdiStatus); +} + + +#ifdef FEATURE_WLAN_BATCH_SCAN +/* + * FUNCTION: WDA_ProcessStopBatchScanInd + * + * DESCRIPTION: This function sends stop batch scan inidcation message to WDI + * + * PARAM: + * pWDA: pointer to WDA context + * pReq: pointer to stop batch scan request + */ +VOS_STATUS WDA_ProcessStopBatchScanInd(tWDA_CbContext *pWDA, + tSirStopBatchScanInd *pReq) +{ + WDI_Status wdiStatus; + WDI_StopBatchScanIndType wdiReq; + + wdiReq.param = pReq->param; + + wdiStatus = WDI_StopBatchScanInd(&wdiReq); + + if (WDI_STATUS_SUCCESS_SYNC != wdiStatus) { - if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) || - (pFc->subType == SIR_MAC_MGMT_PROBE_REQ)) - { - /*Send Probe request frames on self sta idx*/ - txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK; - } - /* Since we donot want probe responses to be retried, send probe responses - through the NO_ACK queues */ - if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP) - { - //probe response is sent out using self station and no retries options. - txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK); - } - if(VOS_TRUE == pWDA->wdaAmpSessionOn) - { - txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME; - } + VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "Stop batch scan ind failed %s:%d", __func__, wdiStatus); } - vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/ - /*Set frame tag to 0 - We will use the WDA user data in order to tag a frame as expired*/ - vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA, - (v_PVOID_t)0); + vos_mem_free(pReq); + + return CONVERT_WDI2VOS_STATUS(wdiStatus); +} +/*========================================================================== + FUNCTION WDA_ProcessTriggerBatchScanResultInd + + DESCRIPTION + API to pull batch scan result from FW + + PARAMETERS + pWDA: Pointer to WDA context + pGetBatchScanReq: Pointer to get batch scan result indication + + RETURN VALUE + NONE + +===========================================================================*/ +VOS_STATUS WDA_ProcessTriggerBatchScanResultInd(tWDA_CbContext *pWDA, + tSirTriggerBatchScanResultInd *pReq) +{ + WDI_Status wdiStatus; + WDI_TriggerBatchScanResultIndType wdiReq; + + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH, + "------> %s " ,__func__); + + wdiReq.param = pReq->param; + + wdiStatus = WDI_TriggerBatchScanResultInd(&wdiReq); + + if (WDI_STATUS_SUCCESS_SYNC != wdiStatus) + { + VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "Trigger batch scan result ind failed %s:%d", + __func__, wdiStatus); + } + + vos_mem_free(pReq); + + return CONVERT_WDI2VOS_STATUS(wdiStatus); +} + +/*========================================================================== + FUNCTION WDA_SetBatchScanRespCallback + + DESCRIPTION + API to process set batch scan response from FW + + PARAMETERS + pRsp: Pointer to set batch scan response + pUserData: Pointer to user data + + RETURN VALUE + NONE + +===========================================================================*/ +void WDA_SetBatchScanRespCallback +( + WDI_SetBatchScanRspType *pRsp, + void* pUserData +) +{ + tSirSetBatchScanRsp *pHddSetBatchScanRsp; + tpAniSirGlobal pMac; + void *pCallbackContext; + tWDA_CbContext *pWDA = NULL ; + tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData; + + + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH, + "<------ %s " ,__func__); + if (NULL == pWdaParams) + { + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "%s: pWdaParams received NULL", __func__); + VOS_ASSERT(0) ; + return ; + } + + /*extract WDA context*/ + pWDA = pWdaParams->pWdaContext; + if (NULL == pWDA) + { + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "%s:pWDA is NULL can't invole HDD callback", + __func__); + vos_mem_free(pWdaParams->wdaWdiApiMsgParam); + vos_mem_free(pWdaParams->wdaMsgParam); + vos_mem_free(pWdaParams); + VOS_ASSERT(0); + return; + } + + vos_mem_free(pWdaParams->wdaWdiApiMsgParam); + vos_mem_free(pWdaParams->wdaMsgParam); + vos_mem_free(pWdaParams); + + pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext); + if (NULL == pMac) + { + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "%s:pMac is NULL", __func__); + VOS_ASSERT(0); + return; + } + + pHddSetBatchScanRsp = + (tSirSetBatchScanRsp *)vos_mem_malloc(sizeof(tSirSetBatchScanRsp)); + if (NULL == pHddSetBatchScanRsp) + { + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "%s: VOS MEM Alloc Failure can't invoke HDD callback", __func__); + VOS_ASSERT(0); + return; + } + + pHddSetBatchScanRsp->nScansToBatch = pRsp->nScansToBatch; + + pCallbackContext = pMac->pmc.setBatchScanReqCallbackContext; + /*call hdd callback with set batch scan response data*/ + if(pMac->pmc.setBatchScanReqCallback) + { + pMac->pmc.setBatchScanReqCallback(pCallbackContext, pHddSetBatchScanRsp); + } + else + { + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "%s:HDD callback is null", __func__); + VOS_ASSERT(0); + } + + vos_mem_free(pHddSetBatchScanRsp); + return ; +} + +/*========================================================================== + FUNCTION WDA_ProcessSetBatchScanReq + + DESCRIPTION + API to send set batch scan request to WDI + + PARAMETERS + pWDA: Pointer to WDA context + pSetBatchScanReq: Pointer to set batch scan req + + RETURN VALUE + NONE + +===========================================================================*/ +VOS_STATUS WDA_ProcessSetBatchScanReq(tWDA_CbContext *pWDA, + tSirSetBatchScanReq *pSetBatchScanReq) +{ + WDI_Status status; + tWDA_ReqParams *pWdaParams ; + WDI_SetBatchScanReqType *pWdiSetBatchScanReq; + + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH, + "------> %s " ,__func__); + + pWdiSetBatchScanReq = + (WDI_SetBatchScanReqType *)vos_mem_malloc(sizeof(WDI_SetBatchScanReqType)); + if (NULL == pWdiSetBatchScanReq) + { + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "%s: VOS MEM Alloc Failure", __func__); + vos_mem_free(pSetBatchScanReq); + VOS_ASSERT(0); + return VOS_STATUS_E_NOMEM; + } + + pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)); + if (NULL == pWdaParams) + { + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "%s: VOS MEM Alloc Failure", __func__); + VOS_ASSERT(0); + vos_mem_free(pSetBatchScanReq); + vos_mem_free(pWdiSetBatchScanReq); + return VOS_STATUS_E_NOMEM; + } + + pWdiSetBatchScanReq->scanFrequency = pSetBatchScanReq->scanFrequency; + pWdiSetBatchScanReq->numberOfScansToBatch = + pSetBatchScanReq->numberOfScansToBatch; + pWdiSetBatchScanReq->bestNetwork = pSetBatchScanReq->bestNetwork; + pWdiSetBatchScanReq->rfBand = pSetBatchScanReq->rfBand; + pWdiSetBatchScanReq->rtt = pSetBatchScanReq->rtt; + + pWdaParams->wdaWdiApiMsgParam = pWdiSetBatchScanReq; + pWdaParams->pWdaContext = pWDA; + pWdaParams->wdaMsgParam = pSetBatchScanReq; + + status = WDI_SetBatchScanReq(pWdiSetBatchScanReq, pWdaParams, + (WDI_SetBatchScanCb)WDA_SetBatchScanRespCallback); + if (IS_WDI_STATUS_FAILURE(status)) + { + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "Failure in Set Batch Scan REQ WDI API, free all the memory " ); + vos_mem_free(pWdaParams->wdaWdiApiMsgParam); + vos_mem_free(pWdaParams->wdaMsgParam); + vos_mem_free(pWdaParams); + } + return CONVERT_WDI2VOS_STATUS(status); +} + +#endif + +/* + * ------------------------------------------------------------------------- + * DATA interface with WDI for Mgmt Frames + * ------------------------------------------------------------------------- + */ +/* + * FUNCTION: WDA_TxComplete + * Callback function for the WDA_TxPacket + */ +VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData, + VOS_STATUS status ) +{ + tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext); + tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ; + tANI_U32 uUserData; - if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf, - frmLen, ucTypeSubType, tid, - WDA_TxComplete, NULL, txFlag)) != VOS_STATUS_SUCCESS) + if(NULL == wdaContext) { - VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, - "Sending Mgmt Frame failed - status = %d\n", status); - pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf); - vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);/*reset the VosPacket_freed*/ - if( pAckTxComp ) - { - pWDA->pAckTxCbFunc = NULL; - if( VOS_STATUS_SUCCESS != - WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer)) - { - VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, - "Tx Complete timeout Timer Stop Failed "); - } - } + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "%s:pWDA is NULL", + __func__); + VOS_ASSERT(0); return VOS_STATUS_E_FAILURE; } + + /*Check if frame was timed out or not*/ + vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA, + (v_PVOID_t)&uUserData); + + if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData ) + { + /*Discard frame - no further processing is needed*/ + vos_pkt_return_packet(pData); + return VOS_STATUS_SUCCESS; + } + + /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/ + if( NULL!=wdaContext->pTxCbFunc) + { + /*check if packet is freed already*/ + if(vos_atomic_set_U32(&wdaContext->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED) == (v_U32_t)pData) + { + wdaContext->pTxCbFunc(pMac, pData, 1); + } + else + { + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, + "%s:packet (%p) is already freed", + __func__, pData); + //Return from here since we reaching here because the packet already timeout + return status; + } + } + /* - * Wait for the event to be set by the TL, to get the response of TX - * complete, this event should be set by the Callback function called by TL - */ + * Trigger the event to bring the HAL TL Tx complete function to come + * out of wait + * Let the coe above to complete the packet first. When this event is set, + * the thread waiting for the event may run and set Vospacket_freed causing the original + * packet not being freed. + */ + status = vos_event_set(&wdaContext->txFrameEvent); + if(!VOS_IS_STATUS_SUCCESS(status)) + { + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "NEW VOS Event Set failed - status = %d \n", status); + } + return status; +} +/* + * FUNCTION: WDA_TxPacket + * Forward TX management frame to WDI + */ +VOS_STATUS WDA_TxPacket(void *pWDA_handle, + void *pFrmBuf, + tANI_U16 frmLen, + eFrameType frmType, + eFrameTxDir txDir, + tANI_U8 tid, + pWDATxRxCompFunc pCompFunc, + void *pData, + pWDAAckFnTxComp pAckTxComp, + tANI_U8 txFlag, + tANI_U8 sessionId ) +{ + tWDA_CbContext *pWDA = (tWDA_CbContext *)(pWDA_handle); + VOS_STATUS status = VOS_STATUS_SUCCESS ; + tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData; + tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType; + tANI_U8 eventIdx = 0; + tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE; + tpAniSirGlobal pMac; + if((NULL == pWDA)||(NULL == pFrmBuf)) + { + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "%s:pWDA %p or pFrmBuf %p is NULL", + __func__,pWDA,pFrmBuf); + VOS_ASSERT(0); + return VOS_STATUS_E_FAILURE; + } + + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH, + "Tx Mgmt Frame Subtype: %d alloc(%p)\n", pFc->subType, pFrmBuf); + pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext); + if(NULL == pMac) + { + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "%s:pMac is NULL", __func__); + VOS_ASSERT(0); + return VOS_STATUS_E_FAILURE; + } + + + + /* store the call back function in WDA context */ + pWDA->pTxCbFunc = pCompFunc; + /* store the call back for the function of ackTxComplete */ + if( pAckTxComp ) + { + if( NULL != pWDA->pAckTxCbFunc ) + { + /* Already TxComp is active no need to active again */ + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "There is already one request pending for tx complete\n"); + pWDA->pAckTxCbFunc( pMac, 0); + pWDA->pAckTxCbFunc = NULL; + + if( VOS_STATUS_SUCCESS != + WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer)) + { + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "Tx Complete timeout Timer Stop Failed "); + } + else + { + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "Tx Complete timeout Timer Stop Success "); + } + } + + txFlag |= HAL_TXCOMP_REQUESTED_MASK; + pWDA->pAckTxCbFunc = pAckTxComp; + if( VOS_STATUS_SUCCESS != + WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) ) + { + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, + "Tx Complete Timer Start Failed "); + pWDA->pAckTxCbFunc = NULL; + return eHAL_STATUS_FAILURE; + } + } + /* Reset the event to be not signalled */ + status = vos_event_reset(&pWDA->txFrameEvent); + if(!VOS_IS_STATUS_SUCCESS(status)) + { + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "VOS Event reset failed - status = %d\n",status); + pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf, 1); + if( pAckTxComp ) + { + pWDA->pAckTxCbFunc = NULL; + if( VOS_STATUS_SUCCESS != + WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer)) + { + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "Tx Complete timeout Timer Stop Failed "); + } + } + return VOS_STATUS_E_FAILURE; + } + + /* If Peer Sta mask is set don't overwrite to self sta */ + if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK) + { + txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK; + } + else + { + /* Get system role, use the self station if in unknown role or STA role */ + systemRole = wdaGetGlobalSystemRole(pMac); + if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) || + (( eSYSTEM_STA_ROLE == systemRole ) +#if defined FEATURE_WLAN_CCX || defined FEATURE_WLAN_TDLS + && frmType == HAL_TXRX_FRM_802_11_MGMT +#endif + )) + { + txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK; + } + } + + /* Divert Disassoc/Deauth frames thru self station, as by the time unicast + disassoc frame reaches the HW, HAL has already deleted the peer station */ + if ((pFc->type == SIR_MAC_MGMT_FRAME)) + { + if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) || + (pFc->subType == SIR_MAC_MGMT_PROBE_REQ)) + { + /*Send Probe request frames on self sta idx*/ + txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK; + } + /* Since we donot want probe responses to be retried, send probe responses + through the NO_ACK queues */ + if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP) + { + //probe response is sent out using self station and no retries options. + txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK); + } + if(VOS_TRUE == pWDA->wdaAmpSessionOn) + { + txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME; + } + } + vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/ + + /*Set frame tag to 0 + We will use the WDA user data in order to tag a frame as expired*/ + vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA, + (v_PVOID_t)0); + + + if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf, + frmLen, ucTypeSubType, tid, + WDA_TxComplete, NULL, txFlag)) != VOS_STATUS_SUCCESS) + { + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "Sending Mgmt Frame failed - status = %d\n", status); + pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf, 1); + vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);/*reset the VosPacket_freed*/ + if( pAckTxComp ) + { + pWDA->pAckTxCbFunc = NULL; + if( VOS_STATUS_SUCCESS != + WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer)) + { + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "Tx Complete timeout Timer Stop Failed "); + } + } + return VOS_STATUS_E_FAILURE; + } + /* + * Wait for the event to be set by the TL, to get the response of TX + * complete, this event should be set by the Callback function called by TL + */ status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT, &eventIdx); if(!VOS_IS_STATUS_SUCCESS(status)) { - VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, - "%s: Status %d when waiting for TX Frame Event", - __func__, status); - pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again , - after the packet gets completed(packet freed once)*/ + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "%s: Status %d when waiting for TX Frame Event", + __func__, status); + pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again , + after the packet gets completed(packet freed once)*/ + + /* TX MGMT fail with COMP timeout, try to detect DXE stall */ + WDA_TransportChannelDebug(pMac, 1, 0); + + /*Tag Frame as timed out for later deletion*/ + vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA, + (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT); + + /* check whether the packet was freed already,so need not free again when + * TL calls the WDA_Txcomplete routine + */ + vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED); + /*if(vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED) == (v_U32_t)pFrmBuf) + { + pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf); + } */ + + if( pAckTxComp ) + { + pWDA->pAckTxCbFunc = NULL; + if( VOS_STATUS_SUCCESS != + WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer)) + { + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "Tx Complete timeout Timer Stop Failed "); + } + } + status = VOS_STATUS_E_FAILURE; + } +#ifdef WLAN_DUMP_MGMTFRAMES + if (VOS_IS_STATUS_SUCCESS(status)) + { + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "%s() TX packet : SubType %d", __func__,pFc->subType); + VOS_TRACE_HEX_DUMP( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + pData, frmLen); + } +#endif + + return status; +} +/* + * FUNCTION: WDA_ProcessDHCPStartInd + * Forward DHCP Start to WDI + */ +static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA, + tAniDHCPInd *dhcpStartInd) +{ + WDI_Status status; + WDI_DHCPInd *wdiDHCPInd = (WDI_DHCPInd*)vos_mem_malloc(sizeof(WDI_DHCPInd)) ; + if (NULL == wdiDHCPInd) + { + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "%s: VOS MEM Alloc Failure", __func__); + VOS_ASSERT(0); + vos_mem_free(dhcpStartInd); + return VOS_STATUS_E_NOMEM; + } + + wdiDHCPInd->device_mode = dhcpStartInd->device_mode; + vos_mem_copy(wdiDHCPInd->macAddr, dhcpStartInd->macAddr, + sizeof(tSirMacAddr)); + + status = WDI_dhcpStartInd(wdiDHCPInd); + + if (IS_WDI_STATUS_FAILURE(status)) + { + vos_mem_free(wdiDHCPInd); + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "DHCP Start Indication failed"); + } + vos_mem_free(dhcpStartInd); + return CONVERT_WDI2VOS_STATUS(status) ; +} + + /* + * FUNCTION: WDA_ProcessDHCPStopInd + * Forward DHCP Stop to WDI + */ + static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA, + tAniDHCPInd *dhcpStopInd) + { + WDI_Status status; + WDI_DHCPInd *wdiDHCPInd = (WDI_DHCPInd*)vos_mem_malloc(sizeof(WDI_DHCPInd)) ; + if (NULL == wdiDHCPInd) + { + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "%s: VOS MEM Alloc Failure", __func__); + VOS_ASSERT(0); + vos_mem_free(dhcpStopInd); + return VOS_STATUS_E_NOMEM; + } + wdiDHCPInd->device_mode = dhcpStopInd->device_mode; + vos_mem_copy(wdiDHCPInd->macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr)); + status = WDI_dhcpStopInd(wdiDHCPInd); + if (IS_WDI_STATUS_FAILURE(status)) + { + vos_mem_free(wdiDHCPInd); + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "DHCP Start Indication failed"); + } + vos_mem_free(dhcpStopInd); + return CONVERT_WDI2VOS_STATUS(status) ; + } + +#if defined WLAN_FEATURE_RELIABLE_MCAST +/* + * FUNCTION: WDA_RMCLeaderRspCallback + * Send LBP Leader Response back to PE + */ +void +WDA_RMCLeaderRspCallback(WDI_LbpRspParamsType *wdiLbpResponse, void *pUserData) +{ + tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData; + tWDA_CbContext *pWDA = pWdaParams->pWdaContext; + + switch (wdiLbpResponse->cmd) + { + case eWDI_BECOME_LEADER_CMD : + { + tSirRmcBecomeLeaderInd *pRmcBecomeLeaderInd; + + pRmcBecomeLeaderInd = (tSirRmcBecomeLeaderInd *) + vos_mem_malloc(sizeof(*pRmcBecomeLeaderInd)); + + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, + "Received eWDI_BECOME_LEADER_CMD from WDI"); + + pRmcBecomeLeaderInd->status = wdiLbpResponse->status; + + /* Copy the mcast transmitter which should be us */ + vos_mem_copy(pRmcBecomeLeaderInd->mcastTransmitter, + wdiLbpResponse->mcastTransmitter, + sizeof(tSirMacAddr)); + /* Copy the mcast group address */ + vos_mem_copy(pRmcBecomeLeaderInd->mcastGroup, + wdiLbpResponse->mcastGroup, + sizeof(tSirMacAddr)); + + WDA_SendMsg(pWDA, WDA_RMC_BECOME_LEADER, + (void *)pRmcBecomeLeaderInd, 0) ; + break; + } + case eWDI_SUGGEST_LEADER_CMD : + { + tSirRmcLeaderSelectInd *pRmcLeaderSelectInd; + + pRmcLeaderSelectInd = (tSirRmcLeaderSelectInd *) + vos_mem_malloc(sizeof(tSirRmcLeaderSelectInd)); + + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, + "Received eWDI_SUGGEST_LEADER_CMD from WDI"); + + pRmcLeaderSelectInd->status = wdiLbpResponse->status; + + /* Copy the mcast transmitter which should be us */ + vos_mem_copy(pRmcLeaderSelectInd->mcastTransmitter, + wdiLbpResponse->mcastTransmitter, + sizeof(tSirMacAddr)); + /* Copy the mcast group address */ + vos_mem_copy(pRmcLeaderSelectInd->mcastGroup, + wdiLbpResponse->mcastGroup, + sizeof(tSirMacAddr)); + /* Copy the candidate leader list */ + vos_mem_copy(pRmcLeaderSelectInd->leader, + wdiLbpResponse->leader, + sizeof(pRmcLeaderSelectInd->leader)); + + WDA_SendMsg(pWDA, WDA_RMC_LEADER_SELECT_RESP, + (void *)pRmcLeaderSelectInd, 0) ; + break; + } + } + + /* free the config structure */ + if (pWdaParams->wdaWdiApiMsgParam != NULL) + { + vos_mem_free(pWdaParams->wdaWdiApiMsgParam); + } + vos_mem_free(pWdaParams->wdaMsgParam); + vos_mem_free(pWdaParams); + +} + +/* + * FUNCTION: WDA_RMCLeaderReqCallback + * Free memory. + * Invoked when RMCLeader REQ failed in WDI and no RSP callback is generated. + */ +void WDA_RMCLeaderReqCallback(WDI_Status wdiStatus, void* pUserData) +{ + tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData; + + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, + "<------ %s, wdiStatus: %d", __func__, wdiStatus); + + if (NULL == pWdaParams) + { + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "%s: pWdaParams received NULL", __func__); + VOS_ASSERT(0); + return; + } + + if (IS_WDI_STATUS_FAILURE(wdiStatus)) + { + vos_mem_free(pWdaParams->wdaWdiApiMsgParam); + vos_mem_free(pWdaParams->wdaMsgParam); + vos_mem_free(pWdaParams); + } + + return; +} + +/* + * FUNCTION: WDA_ProcessRMCLeaderReq + * Forward LBP Leader Request to WDI + */ +static VOS_STATUS +WDA_ProcessRMCLeaderReq(tWDA_CbContext *pWDA, + tSirRmcLeaderReq *lbpLeaderReq) +{ + WDI_Status status; + WDI_LbpLeaderReqParams *wdiLeaderReq; + tWDA_ReqParams *pWdaParams; + + wdiLeaderReq = (WDI_LbpLeaderReqParams *) + vos_mem_malloc(sizeof(*wdiLeaderReq)); + + if (NULL == wdiLeaderReq) + { + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "%s: VOS MEM Alloc Failure", __func__); + VOS_ASSERT(0); + vos_mem_free(lbpLeaderReq); + return VOS_STATUS_E_NOMEM; + } + + pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)); + if (NULL == pWdaParams) + { + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "%s: VOS MEM Alloc Failure", __func__); + VOS_ASSERT(0); + vos_mem_free(lbpLeaderReq); + vos_mem_free(wdiLeaderReq); + return VOS_STATUS_E_NOMEM; + } + + pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiLeaderReq; + /* Store param pointer as passed in by caller */ + pWdaParams->wdaMsgParam = lbpLeaderReq; + pWdaParams->pWdaContext = pWDA; + + wdiLeaderReq->cmd = lbpLeaderReq->cmd; + + vos_mem_copy(wdiLeaderReq->mcastTransmitter, + lbpLeaderReq->mcastTransmitter, sizeof(tSirMacAddr)); + vos_mem_copy(wdiLeaderReq->mcastGroup, + lbpLeaderReq->mcastGroup, sizeof(tSirMacAddr)); + vos_mem_copy(wdiLeaderReq->blacklist, + lbpLeaderReq->blacklist, sizeof(wdiLeaderReq->blacklist)); + + wdiLeaderReq->wdiReqStatusCB = WDA_RMCLeaderReqCallback; + + status = WDI_LbpLeaderReq(wdiLeaderReq, + (WDI_LbpLeaderRspCb)WDA_RMCLeaderRspCallback, + (void *)pWdaParams); + if (IS_WDI_STATUS_FAILURE(status)) + { + vos_mem_free(pWdaParams->wdaWdiApiMsgParam); + vos_mem_free(pWdaParams->wdaMsgParam); + vos_mem_free(pWdaParams) ; + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "LBP Leader Request failed"); + } + return CONVERT_WDI2VOS_STATUS(status) ; +} + +/* + * FUNCTION: WDA_ProcessRMCUpdateInd + * Forward LBP Update Indication to WDI +*/ +static VOS_STATUS +WDA_ProcessRMCUpdateInd(tWDA_CbContext *pWDA, + tSirRmcUpdateInd *lbpUpdateInd) +{ + WDI_Status status; + WDI_LbpUpdateIndParams wdiUpdateInd; + + /* Copy the paramters for Update_Ind */ + + wdiUpdateInd.indication = lbpUpdateInd->indication; + wdiUpdateInd.role = lbpUpdateInd->role; + + vos_mem_copy(wdiUpdateInd.mcastTransmitter, + lbpUpdateInd->mcastTransmitter, sizeof(tSirMacAddr)); + + vos_mem_copy(wdiUpdateInd.mcastGroup, + lbpUpdateInd->mcastGroup, sizeof(tSirMacAddr)); + + vos_mem_copy(wdiUpdateInd.mcastLeader, + lbpUpdateInd->mcastLeader, sizeof(tSirMacAddr)); + + wdiUpdateInd.wdiReqStatusCB = WDA_WdiIndicationCallback; + wdiUpdateInd.pUserData = pWDA; + status = WDI_LbpUpdateInd(&wdiUpdateInd); + + if (WDI_STATUS_PENDING == status) + { + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, + "Pending received for %s:%d ",__func__,__LINE__ ); + } + else if (WDI_STATUS_SUCCESS_SYNC != status) + { + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "Failure in %s:%d ",__func__,__LINE__ ); + } + + vos_mem_free(lbpUpdateInd); + + return CONVERT_WDI2VOS_STATUS(status) ; +} +#endif /* WLAN_FEATURE_RELIABLE_MCAST */ + +#ifdef FEATURE_CESIUM_PROPRIETARY +void WDA_GetIbssPeerInfoRspCallback(WDI_IbssPeerInfoRspParams *peerInfoRspParams + ,void* pUserData) +{ + + tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData; + WDI_IbssPeerInfoParams *pIbssPeerInfoParams = + (WDI_IbssPeerInfoParams *)peerInfoRspParams->wdiPeerInfoParams; + tWDA_CbContext *pWDA; + tpSirIbssGetPeerInfoRspParams pIbssGetPeerInfoRsp; + vos_msg_t vosMsg; + v_U32_t wdaCnt = 0; + + pIbssGetPeerInfoRsp = + vos_mem_malloc(sizeof(tSirIbssGetPeerInfoRspParams)); + + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, + "<------ %s " ,__func__); + VOS_ASSERT(NULL != pWdaParams); + + pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ; + + + if (peerInfoRspParams->wdiNumPeers > 32) + { + pr_info("%s] Number of peers is more than 32, returning\n", __func__); + /* free the mem and return */ + vos_mem_free((v_VOID_t *) pIbssGetPeerInfoRsp); + if(NULL != pWdaParams) + { + if(pWdaParams->wdaMsgParam) + vos_mem_free(pWdaParams->wdaMsgParam); + if(pWdaParams->wdaWdiApiMsgParam) + vos_mem_free(pWdaParams->wdaWdiApiMsgParam); + vos_mem_free(pWdaParams); + } + return; + } + + /* Message Header */ + pIbssGetPeerInfoRsp->mesgType = eWNI_SME_IBSS_PEER_INFO_RSP; + pIbssGetPeerInfoRsp->mesgLen = sizeof(tSirIbssGetPeerInfoRspParams); + pIbssGetPeerInfoRsp->ibssPeerInfoRspParams.status = peerInfoRspParams->wdiStatus; + pIbssGetPeerInfoRsp->ibssPeerInfoRspParams.numPeers = peerInfoRspParams->wdiNumPeers; + + for (wdaCnt = 0; wdaCnt < peerInfoRspParams->wdiNumPeers; wdaCnt++) + { + WDI_IbssPeerInfoParams *pWdiTmp = &pIbssPeerInfoParams[wdaCnt]; + tSirIbssPeerInfoParams *pSmeTmp = + &pIbssGetPeerInfoRsp->ibssPeerInfoRspParams.peerInfoParams[wdaCnt]; + + pSmeTmp->staIdx = pWdiTmp->wdiStaIdx; + pSmeTmp->mcsIndex = pWdiTmp->wdiMcsIndex; + pSmeTmp->rssi = pWdiTmp->wdiRssi; + pSmeTmp->txRate = pWdiTmp->wdiTxRate; + pSmeTmp->txRateFlags = pWdiTmp->wdiTxRateFlags; + } + + /* VOS message wrapper */ + vosMsg.type = eWNI_SME_IBSS_PEER_INFO_RSP; + vosMsg.bodyptr = (void *)pIbssGetPeerInfoRsp; + vosMsg.bodyval = 0; + + if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg)) + { + /* free the mem and return */ + vos_mem_free((v_VOID_t *) pIbssGetPeerInfoRsp); + } + + if(NULL != pWdaParams) + { + if(pWdaParams->wdaMsgParam) + vos_mem_free(pWdaParams->wdaMsgParam); + if(pWdaParams->wdaWdiApiMsgParam) + vos_mem_free(pWdaParams->wdaWdiApiMsgParam); + vos_mem_free(pWdaParams); + } + + return; +} + +static VOS_STATUS +WDA_ProcessIbssPeerInfoReq(tWDA_CbContext *pWDA, + tSirIbssGetPeerInfoReqParams *ibssPeerInfoReqParams) +{ + WDI_Status status; + WDI_IbssPeerInfoReqType *wdiPeerInfoReq; + tWDA_ReqParams *pWdaParams; + + wdiPeerInfoReq = (WDI_IbssPeerInfoReqType *) + vos_mem_malloc(sizeof(WDI_IbssPeerInfoReqType)); + if (NULL == wdiPeerInfoReq) + { + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "%s: VOS MEM Alloc Failure", __func__); + VOS_ASSERT(0); + vos_mem_free(ibssPeerInfoReqParams); + return VOS_STATUS_E_NOMEM; + } + + pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)); + if (NULL == pWdaParams) + { + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "%s: VOS MEM Alloc Failure", __func__); + VOS_ASSERT(0); + vos_mem_free(wdiPeerInfoReq); + vos_mem_free(ibssPeerInfoReqParams); + return VOS_STATUS_E_NOMEM; + } + + pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiPeerInfoReq; + /* Store param pointer as passed in by caller */ + pWdaParams->wdaMsgParam = ibssPeerInfoReqParams; + pWdaParams->pWdaContext = pWDA; + + wdiPeerInfoReq->wdiAllPeerInfoReqd = + ibssPeerInfoReqParams->allPeerInfoReqd; + wdiPeerInfoReq->wdiStaIdx = + ibssPeerInfoReqParams->staIdx; + + status = WDI_IbssPeerInfoReq(wdiPeerInfoReq, + (WDI_IbssPeerInfoReqCb)WDA_GetIbssPeerInfoRspCallback, + (void *)pWdaParams); + if (IS_WDI_STATUS_FAILURE(status)) + { + vos_mem_free(pWdaParams->wdaWdiApiMsgParam); + vos_mem_free(pWdaParams->wdaMsgParam); + vos_mem_free(pWdaParams) ; + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "IBSS Peer Info Request failed"); + } + return CONVERT_WDI2VOS_STATUS(status) ; + +} + +VOS_STATUS WDA_ProcessIBSSRouteTableUpdateInd(tWDA_CbContext *pWDA, + tAniIbssRouteTable *pData) +{ + WDI_Status status; + WDI_IBSSRouteTable *wdiIBSSRouteTable = NULL; + tANI_U32 usWDI_IBSSRouteTableSize; + tANI_U16 i; + + VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, + "<------ %s " ,__func__); + + usWDI_IBSSRouteTableSize = sizeof(WDI_IBSSRouteTable) + + ((pData->numEntries - 1) * + sizeof(WDI_DestIpNextHopMacPair)); + wdiIBSSRouteTable = + (WDI_IBSSRouteTable *)vos_mem_malloc(usWDI_IBSSRouteTableSize); + + if (NULL == wdiIBSSRouteTable) + { + VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "%s: VOS MEM Alloc Failure", __func__); + vos_mem_free(pData); + VOS_ASSERT(0); + return VOS_STATUS_E_NOMEM; + } + + wdiIBSSRouteTable->numEntries = pData->numEntries; + for (i = 0; i < pData->numEntries; i++) + { + vos_mem_copy(&wdiIBSSRouteTable->destIpMacPair[i].destIpv4Addr, + &pData->destIpNextHopPair[i].destIpv4Addr, + WDI_IPV4_ADDR_LEN); + vos_mem_copy(&wdiIBSSRouteTable->destIpMacPair[i].nextHopMacAddr, + &pData->destIpNextHopPair[i].nextHopMacAddr, + WDI_MAC_ADDR_LEN); + } + + wdiIBSSRouteTable->wdiReqStatusCB = WDA_WdiIndicationCallback; + wdiIBSSRouteTable->pUserData = pWDA; + + status = WDI_IBSSRouteTableUpdateInd(wdiIBSSRouteTable); + + if (WDI_STATUS_PENDING == status) + { + VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, + "%s: Pending received for IBSS Route table update indication", + __func__); + } + else if (WDI_STATUS_SUCCESS_SYNC != status) + { + vos_mem_free(wdiIBSSRouteTable); + VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "%s: IBSS Route table update indication failed", __func__); + } + vos_mem_free(pData); + return CONVERT_WDI2VOS_STATUS(status) ; +} + +/* + * FUNCTION: WDA_ProcessTXFailMonitorInd + * Forward TX Fail Monitor to WDI + */ +static VOS_STATUS WDA_ProcessTXFailMonitorInd( + tWDA_CbContext *pWDA, + tAniTXFailMonitorInd *txFailMonitorInd) +{ + WDI_Status status; + WDI_TXFailMonitorInd *wdiTXFailMonitorInd = + (WDI_TXFailMonitorInd *)vos_mem_malloc(sizeof(WDI_TXFailMonitorInd)); + + VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, + "<------ %s " ,__func__); + + if (NULL == wdiTXFailMonitorInd) + { + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "%s: VOS MEM Alloc Failure", __func__); + VOS_ASSERT(0); + vos_mem_free(txFailMonitorInd); + return VOS_STATUS_E_NOMEM; + } - /* TX MGMT fail with COMP timeout, try to detect DXE stall */ - WDA_TransportChannelDebug(pMac, 1, 0); + wdiTXFailMonitorInd->tx_fail_count = txFailMonitorInd->tx_fail_count; - /*Tag Frame as timed out for later deletion*/ - vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA, - (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT); + wdiTXFailMonitorInd->wdiReqStatusCB = WDA_WdiIndicationCallback; + wdiTXFailMonitorInd->pUserData = pWDA; - /* check whether the packet was freed already,so need not free again when - * TL calls the WDA_Txcomplete routine - */ - vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED); - /*if(vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED) == (v_U32_t)pFrmBuf) - { - pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf); - } */ + status = WDI_TXFailMonitorStartStopInd(wdiTXFailMonitorInd); - if( pAckTxComp ) - { - pWDA->pAckTxCbFunc = NULL; - if( VOS_STATUS_SUCCESS != - WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer)) - { - VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, - "Tx Complete timeout Timer Stop Failed "); - } - } - status = VOS_STATUS_E_FAILURE; + if (WDI_STATUS_PENDING == status) + { + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "TX Fail Monitor Indication Pending"); } - return status; + else if (WDI_STATUS_SUCCESS_SYNC == status) + { + if (0 == txFailMonitorInd->tx_fail_count) + pWDA->txFailIndCallback = NULL; + else + pWDA->txFailIndCallback = txFailMonitorInd->txFailIndCallback; + } + else + { + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "TX Fail Monitor Indication Failed"); + } + + vos_mem_free(txFailMonitorInd); + + return CONVERT_WDI2VOS_STATUS(status) ; } +#endif /* FEATURE_CESIUM_PROPRIETARY */ + /* * FUNCTION: WDA_McProcessMsg * Trigger DAL-AL to start CFG download @@ -10532,7 +11952,7 @@ VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg ) #ifdef FEATURE_WLAN_CCX case WDA_TSM_STATS_REQ: { - WDA_ProcessTsmStatsReq(pWDA, (tTSMStats *)pMsg->bodyptr); + WDA_ProcessTsmStatsReq(pWDA, (tpAniGetTsmStatsReq)pMsg->bodyptr); break; } #endif @@ -10833,6 +12253,12 @@ VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg ) break; } #endif + case WDA_SET_MAX_TX_POWER_PER_BAND_REQ: + { + WDA_ProcessSetMaxTxPowerPerBandReq(pWDA, (tMaxTxPowerPerBandParams *) + pMsg->bodyptr); + break; + } case WDA_SET_TX_POWER_REQ: { WDA_ProcessSetTxPowerReq(pWDA, @@ -10920,9 +12346,9 @@ VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg ) } #endif // FEATURE_WLAN_SCAN_PNO #ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD - case WDA_START_ROAM_CANDIDATE_LOOKUP_REQ: + case WDA_ROAM_SCAN_OFFLOAD_REQ: { - WDA_ProcessStartRoamCandidatelookupReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr); + WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr); break; } #endif @@ -11009,6 +12435,101 @@ VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg ) break; } #endif +#ifdef FEATURE_WLAN_TDLS + case WDA_SET_TDLS_LINK_ESTABLISH_REQ: + { + WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr); + break; + } +#endif + case WDA_DHCP_START_IND: + { + WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr); + break; + } + case WDA_DHCP_STOP_IND: + { + WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr); + break; + } +#ifdef FEATURE_WLAN_LPHB + case WDA_LPHB_CONF_REQ: + { + WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr); + break; + } +#endif + case WDA_ADD_PERIODIC_TX_PTRN_IND: + { + WDA_ProcessAddPeriodicTxPtrnInd(pWDA, + (tSirAddPeriodicTxPtrn *)pMsg->bodyptr); + break; + } + case WDA_DEL_PERIODIC_TX_PTRN_IND: + { + WDA_ProcessDelPeriodicTxPtrnInd(pWDA, + (tSirDelPeriodicTxPtrn *)pMsg->bodyptr); + break; + } + case WDA_RATE_UPDATE_IND: + { + WDA_ProcessRateUpdateInd(pWDA, (tSirRateUpdateInd *)pMsg->bodyptr); + break; + } +#if defined WLAN_FEATURE_RELIABLE_MCAST + case WDA_RMC_LEADER_REQ: + { + WDA_ProcessRMCLeaderReq(pWDA, (tSirRmcLeaderReq *)pMsg->bodyptr); + break; + } + case WDA_RMC_UPDATE_IND: + { + WDA_ProcessRMCUpdateInd(pWDA, (tSirRmcUpdateInd *)pMsg->bodyptr); + break; + } +#endif /* WLAN_FEATURE_RELIABLE_MCAST */ + +#ifdef FEATURE_CESIUM_PROPRIETARY + case WDA_GET_IBSS_PEER_INFO_REQ: + { + WDA_ProcessIbssPeerInfoReq(pWDA, + (tSirIbssGetPeerInfoReqParams *)pMsg->bodyptr); + break; + } + case WDA_IBSS_ROUTE_TABLE_UPDATE_IND: + { + WDA_ProcessIBSSRouteTableUpdateInd(pWDA, + (tAniIbssRouteTable *)pMsg->bodyptr); + break; + } + case WDA_TX_FAIL_MONITOR_IND: + { + WDA_ProcessTXFailMonitorInd(pWDA, (tAniTXFailMonitorInd *)pMsg->bodyptr); + break; + } +#endif /* FEATURE_CESIUM_PROPRIETARY */ + +#ifdef FEATURE_WLAN_BATCH_SCAN + case WDA_SET_BATCH_SCAN_REQ: + { + WDA_ProcessSetBatchScanReq(pWDA, + (tSirSetBatchScanReq *)pMsg->bodyptr); + break; + } + case WDA_TRIGGER_BATCH_SCAN_RESULT_IND: + { + WDA_ProcessTriggerBatchScanResultInd(pWDA, + (tSirTriggerBatchScanResultInd *)pMsg->bodyptr); + break; + } + case WDA_STOP_BATCH_SCAN_IND: + { + WDA_ProcessStopBatchScanInd(pWDA, + (tSirStopBatchScanInd *)pMsg->bodyptr); + break; + } +#endif + default: { VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, @@ -11270,6 +12791,32 @@ void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd, break; } +#ifdef FEATURE_WLAN_TDLS + case WDI_TDLS_IND : + { + tSirTdlsInd *pTdlsInd = + (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd)); + + if (NULL == pTdlsInd) + { + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "Memory allocation failure, " + "WDI_TDLS_IND not forwarded"); + break; + } + pTdlsInd->status = + wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status; + pTdlsInd->assocId = + wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId; + pTdlsInd->staIdx = + wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx; + pTdlsInd->reasonCode = + wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode; + WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND, + (void *)pTdlsInd , 0) ; + break; + } +#endif case WDI_P2P_NOA_ATTR_IND : { tSirP2PNoaAttr *pP2pNoaAttr = @@ -11326,6 +12873,14 @@ void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd, VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "Memory allocation failure, " "WDI_PREF_NETWORK_FOUND_IND not forwarded"); + if (NULL != + wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData) + { + wpalMemoryFree( + wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData + ); + wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL; + } break; } /* Message Header */ @@ -11440,7 +12995,190 @@ void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd, } break; } - +#ifdef FEATURE_CESIUM_PROPRIETARY + case WDI_TX_FAIL_IND: + { + if (pWDA->txFailIndCallback) + { + pWDA->txFailIndCallback( + wdiLowLevelInd->wdiIndicationData.wdiTXFailInd.macAddr, + wdiLowLevelInd->wdiIndicationData.wdiTXFailInd.seqNo); + } + break; + } +#endif /* FEATURE_CESIUM_PROPRIETARY */ + +#ifdef FEATURE_WLAN_LPHB + case WDI_LPHB_IND: + { + vos_msg_t vosMsg; + tSirLPHBInd *lphbInd; + + lphbInd = + (tSirLPHBInd *)vos_mem_malloc(sizeof(tSirLPHBInd)); + if (NULL == lphbInd) + { + VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "%s: LPHB IND buffer alloc Fail", __func__); + return ; + } + + lphbInd->sessionIdx = + wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx; + lphbInd->protocolType = + wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType; + lphbInd->eventReason = + wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason; + + VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "Get WDI_LPHB_IND bssIdx %d", + wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx); + + vosMsg.type = eWNI_SME_LPHB_IND; + vosMsg.bodyptr = lphbInd; + vosMsg.bodyval = 0; + /* Send message to SME */ + if (VOS_STATUS_SUCCESS != + vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg)) + { + VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, + "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed"); + vos_mem_free(lphbInd); + } + break; + } +#endif /* FEATURE_WLAN_LPHB */ + case WDI_PERIODIC_TX_PTRN_FW_IND: + { + VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, + "%s: WDI_PERIODIC_TX_PTRN_FW_IND received, bssIdx: %d, " + "selfStaIdx: %d, status: %d, patternIdBitmap: %d", __func__, + (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.bssIdx, + (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.selfStaIdx, + (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.status, + (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.patternIdBitmap); + + break; + } + + case WDI_IBSS_PEER_INACTIVITY_IND: + { + tSirIbssPeerInactivityInd *pIbssInd = + (tSirIbssPeerInactivityInd *) + vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd)); + + if (NULL == pIbssInd) + { + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "Memory allocation failure, " + "WDI_IBSS_PEER_INACTIVITY_IND not forwarded"); + break; + } + + pIbssInd->bssIdx = + wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx; + pIbssInd->staIdx = + wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staIdx; + vos_mem_copy(pIbssInd->peerAddr, + wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr, + sizeof(tSirMacAddr)); + WDA_SendMsg(pWDA, WDA_IBSS_PEER_INACTIVITY_IND, (void *)pIbssInd, 0) ; + break; + } + +#if defined WLAN_FEATURE_RELIABLE_MCAST + case WDI_LBP_LEADER_PICK_NEW : + { + tSirRmcUpdateInd *pRmcUpdateInd = + (tSirRmcUpdateInd *)vos_mem_malloc(sizeof(tSirRmcUpdateInd)); + + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, + "Received WDI_LBP_UPDATE_IND from WDI"); + + pRmcUpdateInd->indication = + wdiLowLevelInd->wdiIndicationData.wdiLbpPickNewLeaderInd.indication; + pRmcUpdateInd->role = + wdiLowLevelInd->wdiIndicationData.wdiLbpPickNewLeaderInd.role; + + /* Copy the mcast transmitter which should be us */ + vos_mem_copy(pRmcUpdateInd->mcastTransmitter, + wdiLowLevelInd->wdiIndicationData.wdiLbpPickNewLeaderInd. \ + mcastTransmitter, + sizeof(tSirMacAddr)); + /* Copy the mcast group address */ + vos_mem_copy(pRmcUpdateInd->mcastGroup, + wdiLowLevelInd->wdiIndicationData.wdiLbpPickNewLeaderInd.mcastGroup, + sizeof(tSirMacAddr)); + /* Copy the mcast leader address */ + vos_mem_copy(pRmcUpdateInd->mcastLeader, + wdiLowLevelInd->wdiIndicationData.wdiLbpPickNewLeaderInd.mcastLeader, + sizeof(tSirMacAddr)); + /* Copy the candidate leader list */ + vos_mem_copy(pRmcUpdateInd->leader, + wdiLowLevelInd->wdiIndicationData.wdiLbpPickNewLeaderInd.leader, + sizeof(pRmcUpdateInd->leader)); + + WDA_SendMsg(pWDA, WDA_RMC_UPDATE_IND, (void *)pRmcUpdateInd, 0) ; + break; + } +#endif /* WLAN_FEATURE_RELIABLE_MCAST */ + +#ifdef FEATURE_WLAN_BATCH_SCAN + case WDI_BATCH_SCAN_RESULT_IND: + { + void *pBatchScanResult; + void *pCallbackContext; + tpAniSirGlobal pMac; + + VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH, + "Received WDI_BATCHSCAN_RESULT_IND from FW"); + + /*sanity check*/ + if(NULL == pWDA) + { + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "%s:pWDA is NULL", __func__); + VOS_ASSERT(0); + return; + } + + pBatchScanResult = + (void *)wdiLowLevelInd->wdiIndicationData.pBatchScanResult; + if (NULL == pBatchScanResult) + { + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "%s:Batch scan result from FW is null can't invoke HDD callback", + __func__); + VOS_ASSERT(0); + return; + } + + pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext); + if (NULL == pMac) + { + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "%s:pMac is NULL", __func__); + VOS_ASSERT(0); + return; + } + + pCallbackContext = pMac->pmc.batchScanResultCallbackContext; + /*call hdd callback with set batch scan response data*/ + if(pMac->pmc.batchScanResultCallback) + { + pMac->pmc.batchScanResultCallback(pCallbackContext, + pBatchScanResult); + } + else + { + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "%s:HDD callback is null", __func__); + VOS_ASSERT(0); + } + break; + } +#endif + default: { /* TODO error */ @@ -11963,9 +13701,10 @@ void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA) /* * WDA Set REG Domain to VOS NV */ -eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId) +eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId, + tAniBool sendRegHint) { - if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId)) + if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId, sendRegHint)) { return eHAL_STATUS_INVALID_PARAMETER; } @@ -12269,22 +14008,22 @@ void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType) } /* - * FUNCTION: WDA_ProcessStartRoamCandidatelookupReq + * FUNCTION: WDA_ProcessRoamScanOffloadReq * Request to WDI to set Roam Offload Scan */ -VOS_STATUS WDA_ProcessStartRoamCandidatelookupReq(tWDA_CbContext *pWDA, +VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA, tSirRoamOffloadScanReq *pRoamOffloadScanReqParams) { WDI_Status status; - WDI_RoamCandidateLookupReqParamsType *pwdiRoamCandidateLookupReqParams = - (WDI_RoamCandidateLookupReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamCandidateLookupReqParamsType)); + WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams = + (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType)); tWDA_ReqParams *pWdaParams ; v_U8_t csrAuthType; WDI_RoamNetworkType *pwdiRoamNetworkType; WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo; VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "------> %s " ,__func__); - if (NULL == pwdiRoamCandidateLookupReqParams) + if (NULL == pwdiRoamScanOffloadReqParams) { VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: VOS MEM Alloc Failure", __func__); @@ -12297,15 +14036,15 @@ VOS_STATUS WDA_ProcessStartRoamCandidatelookupReq(tWDA_CbContext *pWDA, VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "%s: VOS MEM Alloc Failure", __func__); VOS_ASSERT(0); - vos_mem_free(pwdiRoamCandidateLookupReqParams); + vos_mem_free(pwdiRoamScanOffloadReqParams); return VOS_STATUS_E_NOMEM; } pwdiRoamNetworkType = - &pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork; + &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork; pwdiRoamOffloadScanInfo = - &pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo; - vos_mem_zero (pwdiRoamCandidateLookupReqParams,sizeof(WDI_RoamCandidateLookupReqParamsType)); + &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo; + vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType)); csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication; pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled = pRoamOffloadScanReqParams->RoamScanOffloadEnabled; @@ -12322,6 +14061,8 @@ VOS_STATUS WDA_ProcessStartRoamCandidatelookupReq(tWDA_CbContext *pWDA, pRoamOffloadScanReqParams->LookupThreshold ; pwdiRoamOffloadScanInfo->RoamRssiDiff = pRoamOffloadScanReqParams->RoamRssiDiff ; + pwdiRoamOffloadScanInfo->MAWCEnabled = + pRoamOffloadScanReqParams->MAWCEnabled ; pwdiRoamOffloadScanInfo->Command = pRoamOffloadScanReqParams->Command ; pwdiRoamOffloadScanInfo->StartScanReason = @@ -12371,13 +14112,17 @@ VOS_STATUS WDA_ProcessStartRoamCandidatelookupReq(tWDA_CbContext *pWDA, pRoamOffloadScanReqParams->MDID.mdiePresent; pwdiRoamOffloadScanInfo->MDID.mobilityDomain = pRoamOffloadScanReqParams->MDID.mobilityDomain; - pwdiRoamCandidateLookupReqParams->wdiReqStatusCB = NULL; + pwdiRoamOffloadScanInfo->nProbes = + pRoamOffloadScanReqParams->nProbes; + pwdiRoamOffloadScanInfo->HomeAwayTime = + pRoamOffloadScanReqParams->HomeAwayTime; + pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL; /* Store Params pass it to WDI */ - pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamCandidateLookupReqParams; + pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams; pWdaParams->pWdaContext = pWDA; /* Store param pointer as passed in by caller */ pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams; - status = WDI_StartRoamCandidateLookupReq(pwdiRoamCandidateLookupReqParams, + status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams, (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams); if(IS_WDI_STATUS_FAILURE(status)) { @@ -12537,7 +14282,7 @@ VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA, "Update Scan Parameters b11dEnabled %d b11dResolved %d " "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime" " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof " - "sir struct %d wdi struct %d", + "sir struct %zu wdi struct %zu", pUpdateScanParams->b11dEnabled, pUpdateScanParams->b11dResolved, pUpdateScanParams->ucChannelCount, @@ -12613,6 +14358,9 @@ VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA, void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData) { tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData; + vos_msg_t vosMsg; + wpt_uint8 reason = 0; + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "<------ %s " ,__func__); if (NULL == pWdaParams) @@ -12626,6 +14374,7 @@ void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData) { if ( pWdaParams->wdaWdiApiMsgParam != NULL ) { + reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason; vos_mem_free(pWdaParams->wdaWdiApiMsgParam); } if ( pWdaParams->wdaMsgParam != NULL) @@ -12635,6 +14384,20 @@ void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData) vos_mem_free(pWdaParams) ; } + vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP; + vosMsg.bodyptr = NULL; + if (WDI_STATUS_SUCCESS != status) + { + reason = 0; + } + vosMsg.bodyval = reason; + if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg)) + { + /* free the mem and return */ + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, + "Failed to post the rsp to UMAC" ,__func__); + } + return ; } #endif @@ -13496,6 +15259,7 @@ tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue) return WDI_getFwWlanFeatCaps(featEnumValue); } + /* * FUNCTION: WDA_shutdown * Shutdown WDA/WDI without handshaking with Riva. @@ -13528,6 +15292,10 @@ VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport) wdaDestroyTimers(pWDA); pWDA->wdaTimersCreated = VOS_FALSE; } + else + { + vos_event_destroy(&pWDA->ftmStopDoneEvent); + } /* call WDI shutdown */ wdiStatus = WDI_Shutdown(closeTransport); @@ -13731,14 +15499,94 @@ void WDA_SetEnableSSR(v_BOOL_t enableSSR) WDI_SetEnableSSR(enableSSR); } +#ifdef FEATURE_WLAN_LPHB +/* + * FUNCTION: WDA_LPHBconfRspCallback + * + */ +void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData) +{ + tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData; + + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, + "<------ %s " ,__func__); + if (NULL == pWdaParams) + { + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "%s: pWdaParams received NULL", __func__); + VOS_ASSERT(0) ; + return ; + } + + /* Do not need to send notification to upper layer + * Just free allocated resources */ + if (pWdaParams != NULL) + { + if (pWdaParams->wdaWdiApiMsgParam != NULL) + { + vos_mem_free(pWdaParams->wdaWdiApiMsgParam); + } + vos_mem_free(pWdaParams->wdaMsgParam) ; + vos_mem_free(pWdaParams) ; + } + + return; +} + +/* + * FUNCTION: WDA_ProcessLPHBConfReq + * + */ +VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA, + tSirLPHBReq *pData) +{ + WDI_Status wdiStatus; + tWDA_ReqParams *pWdaParams ; + + VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, + "------> %s " , __func__); + + pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ; + if (NULL == pWdaParams) + { + VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "%s: VOS MEM Alloc Failure", __func__); + VOS_ASSERT(0); + vos_mem_free(pData); + return VOS_STATUS_E_NOMEM; + } + + pWdaParams->pWdaContext = pWDA; + pWdaParams->wdaMsgParam = (void *)pData; + pWdaParams->wdaWdiApiMsgParam = NULL; + + wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback); + if (WDI_STATUS_PENDING == wdiStatus) + { + VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, + "Pending received for %s:%d ", __func__, __LINE__); + } + else if (WDI_STATUS_SUCCESS != wdiStatus) + { + VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus); + vos_mem_free(pWdaParams->wdaMsgParam); + vos_mem_free(pWdaParams); + } + + return CONVERT_WDI2VOS_STATUS(wdiStatus); +} +#endif /* FEATURE_WLAN_LPHB */ + tANI_U8 WDA_MapChannel(tANI_U8 mapChannel) { - if(mapChannel > 0 && mapChannel < 25) + if(mapChannel >0 && mapChannel <25){ #ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD - if(IS_ROAM_SCAN_OFFLOAD_FEATURE_ENABLE) - return aUnsortedChannelList[mapChannel - 1]; + if(IS_ROAM_SCAN_OFFLOAD_FEATURE_ENABLE) + return aUnsortedChannelList[mapChannel -1]; #endif - return abChannel[mapChannel - 1]; + return abChannel[mapChannel -1]; + } else - return 0; + return 0; } diff --git a/CORE/WDA/src/wlan_qct_wda_ds.c b/CORE/WDA/src/wlan_qct_wda_ds.c index 4112e7139763..b383875785ab 100644 --- a/CORE/WDA/src/wlan_qct_wda_ds.c +++ b/CORE/WDA/src/wlan_qct_wda_ds.c @@ -59,6 +59,7 @@ when who what, where, why -------- --- ---------------------------------------------- +08/19/2013 rajekuma Added reliable multicast support in WDA 12/08/2010 seokyoun Created. Move down HAL interfaces from TL to WDA for UMAC convergence btween Volans/Libra and Prima =========================================================================== */ @@ -70,8 +71,6 @@ when who what, where, why #define WDA_DS_DXE_RES_COUNT (WDA_TLI_MIN_RES_DATA + 20) -#define VOS_TO_WPAL_PKT(_vos_pkt) ((wpt_packet*)_vos_pkt) - /* macro's for acessing TL API/data structures */ #define WDA_TL_SET_TX_XMIT_PENDING(a) WLANTL_SetTxXmitPending(a) #define WDA_TL_IS_TX_XMIT_PENDING(a) WLANTL_IsTxXmitPending(a) @@ -429,6 +428,11 @@ WDA_DS_BuildTxPacketInfo VOS_STATUS vosStatus; WDI_DS_TxMetaInfoType* pTxMetaInfo = NULL; v_SIZE_t usMacAddrSize; + wpt_FrameCtrl *pFrameControl; +#ifdef WLAN_FEATURE_RELIABLE_MCAST + WLANTL_CbType* pTLCb; + WLANTL_RMCAST_SESSION* pRMcastSession; +#endif /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/ /*------------------------------------------------------------------------ @@ -442,6 +446,20 @@ WDA_DS_BuildTxPacketInfo return VOS_STATUS_E_FAULT; } +#ifdef WLAN_FEATURE_RELIABLE_MCAST +/*---------------------------------------------------------------- + Extract TL control block + --------------------------------------------------------------*/ + pTLCb = VOS_GET_TL_CB(pvosGCtx); + if ( NULL == pTLCb ) + { + TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "WLAN TL %s: pTLCb is NULL", __func__)); + + return VOS_STATUS_E_FAILURE; + } +#endif + /*------------------------------------------------------------------------ Extract TX Meta Info pointer from PAL packet ------------------------------------------------------------------------*/ @@ -472,6 +490,29 @@ WDA_DS_BuildTxPacketInfo vos_pkt_get_packet_length( vosDataBuff, pusPktLen); pTxMetaInfo->fPktlen = *pusPktLen; + /* For management frames, peek into Frame Control + field to get value of Protected Frame bit */ + pTxMetaInfo->fProtMgmtFrame = 0; + if ( WDA_TLI_MGMT_FRAME_TYPE == pTxMetaInfo->frmType ) + { + if ( 1 == ucDisableFrmXtl ) /* should be 802.11, but check */ + { + vosStatus = vos_pkt_peek_data( vosDataBuff, 0, (v_PVOID_t)&pFrameControl, + sizeof( wpt_FrameCtrl )); + if ( VOS_STATUS_SUCCESS != vosStatus ) + { + VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, + "WDA: Failed while attempting to extract Protect Bit in " + "Frame Control, status %d", vosStatus ); + VOS_ASSERT( 0 ); + return VOS_STATUS_E_FAULT; + } + pTxMetaInfo->fProtMgmtFrame = pFrameControl->wep; + VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO_LOW, + "WLAN TL: fProtMgmtFrame:%d", pTxMetaInfo->fProtMgmtFrame ); + } + } + // Dst address usMacAddrSize = VOS_MAC_ADDR_SIZE; vosStatus = vos_pkt_extract_data( vosDataBuff, @@ -494,13 +535,55 @@ WDA_DS_BuildTxPacketInfo // ADDR2 vos_copy_macaddr( (v_MACADDR_t*)pTxMetaInfo->addr2MACAddress, pAddr2 ); +#ifdef WLAN_FEATURE_RELIABLE_MCAST + /*Check if relibale multicast data path is enabled*/ + if (pTLCb->rmcDataPathEnabled) + { + /*look up for mcast transmitter MAC address in TL's active rmcast list*/ + if (((WDA_TLI_DATA_FRAME_TYPE >> 4) == pTxMetaInfo->frmType) && + (vos_is_macaddr_group(pvDestMacAddr))) + { + pRMcastSession = + WLANTL_RmcLookUpRmcastSession(pTLCb->reliableMcastSession, + (v_MACADDR_t*)pTxMetaInfo->addr2MACAddress); + + if (pRMcastSession) + { + if (0xFF == pvDestMacAddr->bytes[0]) + { + pTxMetaInfo->txFlags |= (HAL_USE_BD_RATE_MASK); + } + else + { + /*Route RMCAST data frames from QID which has ACK_POLICY=TRUE*/ + pTxMetaInfo->txFlags |= (HAL_RELIABLE_MCAST_REQUESTED_MASK); + + VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO, + "RMCAST active for " MAC_ADDRESS_STR " RMCAST session", + MAC_ADDR_ARRAY(pRMcastSession->reliableMcastAddr.bytes)); + } + } + else + { + /*Multicast transmitter address does not exist in TL's active + RMCAST sessions list. Route this mutlicast data frame from + QID which has ACK_POLICY = FALSE*/ + VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO, + "RMCAST disabled for " MAC_ADDRESS_STR " RMCAST session", + MAC_ADDR_ARRAY(pTxMetaInfo->addr2MACAddress)); + } + } + } +#endif /*End of WLAN_FEATURE_RELIABLE_MCAST*/ + /* Dump TX meta infro for debugging */ VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO_LOW, "WLAN TL: Dump TX meta info: " "txFlags:%d, qosEnabled:%d, ac:%d, " - "isEapol:%d, fdisableFrmXlt:%d" "frmType%d", + "isEapol:%d, fdisableFrmXlt:%d, frmType:%d", pTxMetaInfo->txFlags, ucQosEnabled, pTxMetaInfo->ac, - pTxMetaInfo->isEapol, pTxMetaInfo->fdisableFrmXlt, pTxMetaInfo->frmType ); + pTxMetaInfo->isEapol, pTxMetaInfo->fdisableFrmXlt, + pTxMetaInfo->frmType ); return VOS_STATUS_SUCCESS; } diff --git a/CORE/WDA/src/wlan_qct_wda_legacy.c b/CORE/WDA/src/wlan_qct_wda_legacy.c index fa2ce683a5a1..5a2f86c85dc7 100644 --- a/CORE/WDA/src/wlan_qct_wda_legacy.c +++ b/CORE/WDA/src/wlan_qct_wda_legacy.c @@ -165,13 +165,14 @@ tSirRetStatus uMacPostCtrlMsg(void* pSirGlobal, tSirMbMsg* pMb) // host buffer // second parameter, 'wait option', to palAllocateMemory is ignored on Windows - if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pMbLocal, pMb->msgLen)) + pMbLocal = vos_mem_malloc(pMb->msgLen); + if ( NULL == pMbLocal ) { WDALOGE( wdaLog(pMac, LOGE, FL("Buffer Allocation failed!\n"))); return eSIR_FAILURE; } - palCopyMemory(pMac, (void *)pMbLocal, (void *)pMb, pMb->msgLen); + vos_mem_copy((void *)pMbLocal, (void *)pMb, pMb->msgLen); msg.bodyptr = pMbLocal; switch (msg.type & HAL_MMH_MB_MSG_TYPE_MASK) @@ -202,12 +203,7 @@ tSirRetStatus uMacPostCtrlMsg(void* pSirGlobal, tSirMbMsg* pMb) msg.type)); // Release the memory. - if (palFreeMemory( pMac->hHdd, (void*)(msg.bodyptr)) - != eHAL_STATUS_SUCCESS) - { - WDALOGE( wdaLog(pMac, LOGE, FL("Buffer Allocation failed!\n"))); - return eSIR_FAILURE; - } + vos_mem_free(msg.bodyptr); break; } @@ -215,7 +211,7 @@ tSirRetStatus uMacPostCtrlMsg(void* pSirGlobal, tSirMbMsg* pMb) } // uMacPostCtrlMsg() -#ifndef QCA_WIFI_2_0 + /* --------------------------------------------------------- * FUNCTION: wdaGetGlobalSystemRole() * @@ -238,4 +234,4 @@ tBssSystemRole wdaGetGlobalSystemRole(tpAniSirGlobal pMac) wdaContext->wdaGlobalSystemRole)); return wdaContext->wdaGlobalSystemRole; } -#endif + diff --git a/CORE/WDI/CP/inc/wlan_qct_wdi.h b/CORE/WDI/CP/inc/wlan_qct_wdi.h index 15a7499ad8da..2e366e22c19d 100644 --- a/CORE/WDI/CP/inc/wlan_qct_wdi.h +++ b/CORE/WDI/CP/inc/wlan_qct_wdi.h @@ -90,6 +90,9 @@ when who what, where, why /* MAC ADDRESS LENGTH - per spec*/ #define WDI_MAC_ADDR_LEN 6 +/* IPv4 Address Length */ +#define WDI_IPV4_ADDR_LEN 4 + /* Max number of 11b rates -> 1,2,5.5,11 */ #define WDI_NUM_11B_RATES 4 @@ -148,6 +151,10 @@ of NV fragment is nt possbile.The next multiple of 1Kb is 3K */ #define WDI_SET_POWER_STATE_TIMEOUT 10000 /* in msec a very high upper limit */ +/* Periodic Tx pattern offload feature */ +#define PERIODIC_TX_PTRN_MAX_SIZE 1536 +#define MAXNUM_PERIODIC_TX_PTRNS 6 + /*============================================================================ * GENERIC STRUCTURES @@ -376,6 +383,28 @@ typedef enum /* P2P_NOA_Start_Indication */ WDI_P2P_NOA_START_IND, + /* TDLS_Indication */ + WDI_TDLS_IND, + + /* LPHB Indication from FW to umac */ + WDI_LPHB_IND, + + /* IBSS Peer Inactivity Indication */ + WDI_IBSS_PEER_INACTIVITY_IND, + + /* Periodic Tx Pattern FW Indication */ + WDI_PERIODIC_TX_PTRN_FW_IND, + + /* LBP_Leader_Pick_New Indication */ + WDI_LBP_LEADER_PICK_NEW, + +#ifdef FEATURE_WLAN_BATCH_SCAN + /*Batch scan result indication from FW*/ + WDI_BATCH_SCAN_RESULT_IND, +#endif + + WDI_TX_FAIL_IND, + WDI_MAX_IND }WDI_LowLevelIndEnumType; @@ -481,6 +510,33 @@ typedef struct } WDI_CoexIndType; /*--------------------------------------------------------------------------- + WDI_DHCPInd +---------------------------------------------------------------------------*/ + +typedef struct +{ + wpt_uint8 device_mode; + wpt_uint8 macAddr[WDI_MAC_ADDR_LEN]; +}WDI_DHCPInd; + +#ifdef FEATURE_CESIUM_PROPRIETARY +typedef struct +{ + /*Request status callback offered by UMAC - it is called if the current + req has returned PENDING as status; it delivers the status of sending + the message over the BUS */ + WDI_ReqStatusCb wdiReqStatusCB; + + /*The user data passed in by UMAC, it will be sent back when the above + function pointer will be called */ + void* pUserData; + + wpt_uint8 tx_fail_count; +}WDI_TXFailMonitorInd; +#endif /* FEATURE_CESIUM_PROPRIETARY */ + +/*--------------------------------------------------------------------------- + WDI_MacSSid ---------------------------------------------------------------------------*/ typedef struct @@ -537,6 +593,16 @@ typedef struct wpt_uint32 bssIdx; }WDI_P2pNoaStartIndType; +/*--------------------------------------------------------------------------- + *WDI_TdlsIndType + *-------------------------------------------------------------------------*/ +typedef struct +{ + wpt_uint16 status; + wpt_uint16 assocId; + wpt_uint16 staIdx; + wpt_uint16 reasonCode; +}WDI_TdlsIndType; #ifdef WLAN_WAKEUP_EVENTS /*--------------------------------------------------------------------------- @@ -563,6 +629,342 @@ typedef struct wpt_uint8 bssIdx; /*bssidx on which beacon is missed*/ } WDI_MissedBeaconIndType; +#ifdef FEATURE_WLAN_LPHB +/*--------------------------------------------------------------------------- + WDI_LPHBTimeoutIndData +-----------------------------------------------------------------------------*/ +typedef struct +{ + wpt_uint8 bssIdx; + wpt_uint8 sessionIdx; + wpt_uint8 protocolType; /*TCP or UDP*/ + wpt_uint8 eventReason; +} WDI_LPHBTimeoutIndData; +#endif /* FEATURE_WLAN_LPHB */ + +/*----------------------------------------------------------------------------- +WDI_PeriodicTxPtrnFwIndType +-----------------------------------------------------------------------------*/ +typedef struct +{ + wpt_uint8 bssIdx; + wpt_uint32 selfStaIdx; + wpt_uint32 status; + wpt_uint32 patternIdBitmap; +} WDI_PeriodicTxPtrnFwIndType; + +#ifdef FEATURE_WLAN_BATCH_SCAN +/*--------------------------------------------------------------------------- + WDI_SetBatchScanReqType +---------------------------------------------------------------------------*/ +typedef struct +{ + wpt_uint32 scanFrequency; /* how frequent to do scan default 30Sec*/ + wpt_uint32 numberOfScansToBatch; /* number of scans to batch */ + wpt_uint32 bestNetwork; /* best networks in terms of rssi */ + wpt_uint8 rfBand; /* band to scan : + 0 ->both Band, 1->2.4Ghz Only + and 2-> 5GHz Only */ + wpt_uint32 rtt; /* set if required to do RTT it is not + supported in current version */ +}WDI_SetBatchScanReqType; + +/*--------------------------------------------------------------------------- + WDI_SetBatchScanRspType +---------------------------------------------------------------------------*/ +typedef struct +{ + /*max number of scans which FW can cache*/ + wpt_uint32 nScansToBatch; +}WDI_SetBatchScanRspType; + +/*--------------------------------------------------------------------------- + WDI_TriggerBatchScanResultIndType +---------------------------------------------------------------------------*/ +typedef struct +{ + wpt_uint32 param; +}WDI_TriggerBatchScanResultIndType; + +/*--------------------------------------------------------------------------- + WDI_StopBatchScanIndType +---------------------------------------------------------------------------*/ +typedef struct +{ + /*max number of scans which FW can cache*/ + wpt_uint32 param; +}WDI_StopBatchScanIndType; + + +/*--------------------------------------------------------------------------- + * WDI_BatchScanResultIndType + *--------------------------------------------------------------------------*/ +typedef struct +{ + wpt_uint32 bssid[6]; /* BSSID */ + wpt_uint32 ssid[32]; /* SSID */ + wpt_uint32 ch; /* Channel */ + wpt_uint32 rssi; /* RSSI or Level */ + /* Timestamp when Network was found. Used to calculate age based on + timestamp in GET_RSP msg header */ + wpt_uint32 timestamp; +} tWDIBatchScanNetworkInfo, *tpWDIBatchScanNetworkInfo; + +typedef struct +{ + wpt_uint32 scanId; /*Scan List ID*/ + /*No of AP in a Scan Result. Should be same as bestNetwork in SET_REQ msg*/ + wpt_uint32 numNetworksInScanList; + /*Variable data ptr: Number of AP in Scan List*/ + wpt_uint32 scanList[1]; +} tWDIBatchScanList, *tpWDIBatchScanList; + +typedef struct +{ + wpt_uint32 timestamp; + wpt_uint32 numScanLists; + wpt_boolean isLastResult; + /* Variable Data ptr: Number of Scan Lists*/ + wpt_uint32 scanResults[1]; +} tWDIBatchScanResultParam, *tpWDIBatchScanResultParam; + +#endif + +#ifdef FEATURE_CESIUM_PROPRIETARY +typedef struct +{ + wpt_uint8 seqNo; + wpt_uint8 macAddr[WDI_MAC_ADDR_LEN]; +} WDI_TXFailIndType; +#endif /* FEATURE_CESIUM_PROPRIETARY */ + +/*--------------------------------------------------------------------------- + WDI_IbssPeerInactivityIndType +-----------------------------------------------------------------------------*/ +typedef struct +{ + wpt_uint8 bssIdx; + wpt_uint8 staIdx; + wpt_macAddr staMacAddr; +}WDI_IbssPeerInactivityIndType; + +#if defined WLAN_FEATURE_RELIABLE_MCAST +/*--------------------------------------------------------------------------- + WDI_LbpLeaderReqParams +-----------------------------------------------------------------------------*/ +typedef struct +{ + wpt_uint8 cmd; /* command- suggest or become leader */ + + /* MAC address of MCAST Transmitter (source) */ + wpt_macAddr mcastTransmitter; + + /* MAC Address of Multicast Group (01-00-5E-xx-xx-xx) */ + wpt_macAddr mcastGroup; + + /* List of candidates for cmd = WLAN_HAL_SUGGEST_LEADER*/ + wpt_macAddr blacklist[16]; /* HAL_NUM_MAX_LEADERS */ + + /* + * Request status callback offered by UMAC - it is called if the current + * req has returned PENDING as status; it delivers the status of sending + * the message over the BUS + */ + WDI_ReqStatusCb wdiReqStatusCB; + +} WDI_LbpLeaderReqParams; + +/*--------------------------------------------------------------------------- + WDI_LbpUpdateIndParams +-----------------------------------------------------------------------------*/ +typedef struct +{ + wpt_uint8 indication; /* tLbpUpdateIndType */ + + wpt_uint8 role; /* leader or transmitter */ + + /* MAC address of MCAST Transmitter (source) */ + wpt_macAddr mcastTransmitter; + + /* MAC Address of Multicast Group (01-00-5E-xx-xx-xx) */ + wpt_macAddr mcastGroup; + + /* MAC address of MCAST Leader (destination) */ + wpt_macAddr mcastLeader; + + /* List of candidates for cmd = WLAN_HAL_SUGGEST_LEADER*/ + wpt_macAddr leader[16]; /* HAL_NUM_MAX_LEADERS */ + + /* + * Request status callback offered by UMAC - it is called if the current + * req has returned PENDING as status; it delivers the status of sending + * the message over the BUS + */ + WDI_ReqStatusCb wdiReqStatusCB; + + /* + * The user data passed in by UMAC, it will be sent back when the above + * function pointer will be called + */ + void *pUserData; + +} WDI_LbpUpdateIndParams; + +typedef enum +{ + eWDI_SUGGEST_LEADER_CMD = 0, + eWDI_BECOME_LEADER_CMD = 1, +} eWDI_LeaderRspCmdType; + +/*--------------------------------------------------------------------------- + WDI_LbpRspParamsType +-----------------------------------------------------------------------------*/ +typedef struct +{ + wpt_uint8 status; /* success or failure */ + + /* Command Type */ + eWDI_LeaderRspCmdType cmd; /* suggest or become leader */ + + /* MAC address of MCAST Transmitter (source) */ + wpt_macAddr mcastTransmitter; + + /* MAC Address of Multicast Group (01-00-5E-xx-xx-xx) */ + wpt_macAddr mcastGroup; + + /* List of candidates for cmd = WLAN_HAL_SUGGEST_LEADER*/ + wpt_macAddr leader[16]; /* HAL_NUM_MAX_LEADERS */ +} WDI_LbpRspParamsType; + +/*--------------------------------------------------------------------------- + WDI_LbpPickNewLeader +-----------------------------------------------------------------------------*/ +typedef struct +{ + wpt_uint8 indication; /* pick_new */ + + wpt_uint8 role; /* leader or transmitter */ + + /* MAC address of MCAST Transmitter (source) */ + wpt_macAddr mcastTransmitter; + + /* MAC Address of Multicast Group (01-00-5E-xx-xx-xx) */ + wpt_macAddr mcastGroup; + + /* MAC Address of Multicast Leader */ + wpt_macAddr mcastLeader; + + /* List of candidates for cmd = WLAN_HAL_LEADER_PICK_NEW*/ + wpt_macAddr leader[16]; /* HAL_NUM_MAX_LEADERS */ +} WDI_LbpPickNewLeader; + +#endif /* WLAN_FEATURE_RELIABLE_MCAST */ + +#ifdef FEATURE_CESIUM_PROPRIETARY +/*--------------------------------------------------------------------------- + WDI_IBSSRouteTableInd +---------------------------------------------------------------------------*/ + +typedef struct +{ + wpt_uint8 destIpv4Addr[WDI_IPV4_ADDR_LEN]; + wpt_uint8 nextHopMacAddr[WDI_MAC_ADDR_LEN]; +} WDI_DestIpNextHopMacPair; + +typedef struct +{ + /* + * Request status callback offered by UMAC - it is called if the current + * req has returned PENDING as status; it delivers the status of sending + * the message over the BUS + */ + WDI_ReqStatusCb wdiReqStatusCB; + + /* + * The user data passed in by UMAC, it will be sent back when the above + * function pointer will be called + */ + void *pUserData; + + wpt_uint16 numEntries; + + WDI_DestIpNextHopMacPair destIpMacPair[1]; +} WDI_IBSSRouteTable; +#endif /* FEATURE_CESIUM_PROPRIETARY */ + +/*--------------------------------------------------------------------------- + WDI_TxRateFlags +-----------------------------------------------------------------------------*/ +typedef enum +{ + WDI_TX_RATE_LEGACY = 0x1, /* Legacy rates */ + WDI_TX_RATE_HT20 = 0x2, /* HT20 rates */ + WDI_TX_RATE_HT40 = 0x4, /* HT40 rates */ + WDI_TX_RATE_SGI = 0x8, /* Rate with Short guard interval */ + WDI_TX_RATE_LGI = 0x10, /* Rate with Long guard interval */ + WDI_TX_RATE_VHT20 = 0x20, /* VHT 20 rates */ + WDI_TX_RATE_VHT40 = 0x40, /* VHT 20 rates */ + WDI_TX_RATE_VHT80 = 0x80, /* VHT 20 rates */ + WDI_TX_RATE_VIRT = 0x100, /* Virtual Rate */ +} WDI_TxRateFlags; + +/*--------------------------------------------------------------------------- + WDI_RateUpdateIndParams +-----------------------------------------------------------------------------*/ +typedef struct +{ + /* 0 implies RA, positive value implies fixed rate, -1 implies ignore this + * param ucastDataRate can be used to control RA behavior of unicast data to + */ + wpt_int32 ucastDataRate; + + /* TX flag to differentiate between HT20, HT40 etc */ + WDI_TxRateFlags ucastDataRateTxFlag; + + /* BSSID - Optional. 00-00-00-00-00-00 implies apply to all BCAST STAs */ + wpt_macAddr bssid; + + /* + * 0 implies MCAST RA, positive value implies fixed rate, + * -1 implies ignore this param + */ + wpt_int32 reliableMcastDataRate; //unit Mbpsx10 + + /* TX flag to differentiate between HT20, HT40 etc */ + WDI_TxRateFlags reliableMcastDataRateTxFlag; + + /* + * MCAST(or BCAST) fixed data rate in 2.4 GHz, unit Mbpsx10, + * 0 implies ignore + */ + wpt_uint32 mcastDataRate24GHz; + + /* TX flag to differentiate between HT20, HT40 etc */ + WDI_TxRateFlags mcastDataRate24GHzTxFlag; + + /* + * MCAST(or BCAST) fixed data rate in 5 GHz, + * unit Mbpsx10, 0 implies ignore + */ + wpt_uint32 mcastDataRate5GHz; + + /* TX flag to differentiate between HT20, HT40 etc */ + WDI_TxRateFlags mcastDataRate5GHzTxFlag; + + /* + * Request status callback offered by UMAC - it is called if the current + * req has returned PENDING as status; it delivers the status of sending + * the message over the BUS + */ + WDI_ReqStatusCb wdiReqStatusCB; + + /* + * The user data passed in by UMAC, it will be sent back when the above + * function pointer will be called + */ + void *pUserData; + +} WDI_RateUpdateIndParams; /*--------------------------------------------------------------------------- WDI_LowLevelIndType @@ -601,6 +1003,8 @@ typedef struct /* P2P NOA ATTR Indication */ WDI_P2pNoaAttrIndType wdiP2pNoaAttrInfo; WDI_P2pNoaStartIndType wdiP2pNoaStartInfo; + /* TDLS Indications */ + WDI_TdlsIndType wdiTdlsIndInfo; #ifdef FEATURE_WLAN_SCAN_PNO @@ -611,6 +1015,30 @@ typedef struct WDI_WakeReasonIndType wdiWakeReasonInd; #endif // WLAN_WAKEUP_EVENTS WDI_MissedBeaconIndType wdiMissedBeaconInd; + +#ifdef FEATURE_WLAN_LPHB + WDI_LPHBTimeoutIndData wdiLPHBTimeoutInd; +#endif /* FEATURE_WLAN_LPHB */ + + /* IBSS Peer Inactivity Indication */ + WDI_IbssPeerInactivityIndType wdiIbssPeerInactivityInd; + + /* Periodic TX Pattern FW Indication */ + WDI_PeriodicTxPtrnFwIndType wdiPeriodicTxPtrnFwInd; + +#if defined WLAN_FEATURE_RELIABLE_MCAST + WDI_LbpPickNewLeader wdiLbpPickNewLeaderInd; +#endif /* WLAN_FEATURE_RELIABLE_MCAST */ + +#ifdef FEATURE_WLAN_BATCH_SCAN + /*batch scan result indication from FW*/ + void *pBatchScanResult; +#endif + +#ifdef FEATURE_CESIUM_PROPRIETARY + WDI_TXFailIndType wdiTXFailInd; +#endif /* FEATURE_CESIUM_PROPRIETARY */ + } wdiIndicationData; }WDI_LowLevelIndType; @@ -2125,13 +2553,8 @@ typedef struct ---------------------------------------------------------------------------*/ typedef struct { - /*BSS Index of the BSS*/ - wpt_uint8 ucBssIdx; - - /* Boolean to indicate if EDCA params are valid. UMAC might not have valid - EDCA params or might not desire to apply EDCA params during config BSS. - 0 implies Not Valid ; Non-Zero implies valid*/ - wpt_uint8 ucEDCAParamsValid; + /*BSS Index of the BSS*/ + wpt_uint16 ucBssIdx; /*EDCA params for BE*/ WDI_EdcaParamRecord wdiEdcaBEInfo; @@ -2583,6 +3006,7 @@ typedef enum WDI_LINK_INIT_CAL_STATE = 12, WDI_LINK_FINISH_CAL_STATE = 13, WDI_LINK_LISTEN_STATE = 14, + WDI_LINK_SEND_ACTION_STATE = 15, WDI_LINK_MAX = 0x7FFFFFFF } WDI_LinkStateType; @@ -2963,6 +3387,45 @@ typedef struct void* pUserData; }WDI_SetMaxTxPowerParamsType; +/*--------------------------------------------------------------------------- + WDI_Band +---------------------------------------------------------------------------*/ +typedef enum +{ + WDI_BAND_ALL, + WDI_BAND_24, + WDI_BAND_5G, + WDI_BAND_MAX, +}eWDIBand; + +/*--------------------------------------------------------------------------- + WDI_MaxTxPowerPerBandInfoType +---------------------------------------------------------------------------*/ +typedef struct +{ + eWDIBand bandInfo; + /* In request power == MaxTxpower to be used.*/ + wpt_uint8 ucPower; +}WDI_MaxTxPowerPerBandInfoType; + +/*--------------------------------------------------------------------------- + WDI_SetMaxTxPowerPerBandParamsType +---------------------------------------------------------------------------*/ +typedef struct +{ + /*Link Info*/ + WDI_MaxTxPowerPerBandInfoType wdiMaxTxPowerPerBandInfo; + + /*Request status callback offered by UMAC - it is called if the current + req has returned PENDING as status; it delivers the status of sending + the message over the BUS */ + WDI_ReqStatusCb wdiReqStatusCB; + + /*The user data passed in by UMAC, it will be sent back when the above + function pointer will be called */ + void* pUserData; +}WDI_SetMaxTxPowerPerBandParamsType; + /*--------------------------------------------------------------------------- WDI_SetTxPowerParamsType ---------------------------------------------------------------------------*/ @@ -2995,6 +3458,19 @@ typedef struct }WDI_SetMaxTxPowerRspMsg; +/*--------------------------------------------------------------------------- + WDI_SetMaxTxPowerPerBandRspMsg +---------------------------------------------------------------------------*/ +typedef struct +{ + /* In response, power==tx power used for management frames*/ + wpt_int8 ucPower; + + /*Result of the operation*/ + WDI_Status wdiStatus; + +}WDI_SetMaxTxPowerPerBandRspMsg; + /*--------------------------------------------------------------------------- WDI_SetTxPowerRspMsg ---------------------------------------------------------------------------*/ @@ -3038,6 +3514,41 @@ typedef struct void* pUserData; }WDI_SetP2PGONOAReqParamsType; +typedef struct +{ + wpt_uint16 uStaIdx; + wpt_uint8 uIsResponder; + wpt_uint8 uUapsdQueues; + wpt_uint8 uMaxSp; + wpt_uint8 uIsBufSta; +}WDI_SetTDLSLinkEstablishReqInfoType; +/*--------------------------------------------------------------------------- + WDI_SetTDLSLinkEstablishReqParamsType +---------------------------------------------------------------------------*/ +typedef struct +{ + /*TDLS Link Establish Req*/ + WDI_SetTDLSLinkEstablishReqInfoType wdiTDLSLinkEstablishInfo; + + /*Request status callback offered by UMAC - it is called if the current + req has returned PENDING as status; it delivers the status of sending + the message over the BUS */ + WDI_ReqStatusCb wdiReqStatusCB; + + /*The user data passed in by UMAC, it will be sent back when the above + function pointer will be called */ + void* pUserData; +}WDI_SetTDLSLinkEstablishReqParamsType; + + +typedef struct +{ + /*Result of the operation*/ + WDI_Status wdiStatus; + + /*STA Idx*/ + wpt_uint16 uStaIdx; +}WDI_SetTdlsLinkEstablishReqResp; /*--------------------------------------------------------------------------- WDI_SetAddSTASelfParamsType @@ -3047,6 +3558,9 @@ typedef struct /*Self Station MAC address*/ wpt_macAddr selfMacAddr; + /*Self STA device mode*/ + wpt_uint32 currDeviceMode; + /*Status of the operation*/ wpt_uint32 uStatus; }WDI_AddSTASelfInfoType; @@ -4240,28 +4754,85 @@ typedef struct WDI_Status wdiStatus; }WDI_SuspendResumeRspParamsType; +#ifdef FEATURE_WLAN_LPHB +/*--------------------------------------------------------------------------- + WDI Low Power Heart Beat Config request + Copy from sirApi.h to avoid compile error +---------------------------------------------------------------------------*/ +#define WDI_LPHB_FILTER_LEN 64 -#ifdef FEATURE_WLAN_SCAN_PNO +typedef enum +{ + WDI_LPHB_SET_EN_PARAMS_INDID = 0x0001, + WDI_LPHB_SET_TCP_PARAMS_INDID, + WDI_LPHB_SET_TCP_PKT_FILTER_INDID, + WDI_LPHB_SET_UDP_PARAMS_INDID, + WDI_LPHB_SET_UDP_PKT_FILTER_INDID, + WDI_LPHB_SET_NETWORK_INFO_INDID, +} WDI_LPHBIndType; -/*Max number of channels for a given network supported by PNO*/ -#define WDI_PNO_MAX_NETW_CHANNELS 26 +typedef struct +{ + wpt_uint8 enable; + wpt_uint8 item; + wpt_uint8 session; +} WDI_LPHBEnableStruct; -/*Max number of channels for a given network supported by PNO*/ -#define WDI_PNO_MAX_NETW_CHANNELS_EX 60 +typedef struct +{ + wpt_uint32 srv_ip; + wpt_uint32 dev_ip; + wpt_uint16 src_port; + wpt_uint16 dst_port; + wpt_uint16 timeout; + wpt_uint8 session; + wpt_uint8 gateway_mac[WDI_MAC_ADDR_LEN]; + wpt_uint16 timePeriodSec; // in seconds + wpt_uint32 tcpSn; +} WDI_LPHBTcpParamStruct; -/*The max number of programable networks for PNO*/ -#define WDI_PNO_MAX_SUPP_NETWORKS 16 +typedef struct +{ + wpt_uint16 length; + wpt_uint8 offset; + wpt_uint8 session; + wpt_uint8 filter[WDI_LPHB_FILTER_LEN]; +} WDI_LPHBTcpFilterStruct; -/*The max number of scan timers programable in Riva*/ -#define WDI_PNO_MAX_SCAN_TIMERS 10 +typedef struct +{ + wpt_uint32 srv_ip; + wpt_uint32 dev_ip; + wpt_uint16 src_port; + wpt_uint16 dst_port; + wpt_uint16 interval; + wpt_uint16 timeout; + wpt_uint8 session; + wpt_uint8 gateway_mac[WDI_MAC_ADDR_LEN]; +} WDI_LPHBUdpParamStruct; -#define WDI_PNO_MAX_PROBE_SIZE 450 +typedef struct +{ + wpt_uint16 length; + wpt_uint8 offset; + wpt_uint8 session; + wpt_uint8 filter[WDI_LPHB_FILTER_LEN]; +} WDI_LPHBUdpFilterStruct; -#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD -#define WDI_ROAM_SCAN_MAX_CHANNELS 80 /* NUM_RF_CHANNELS */ -#define WDI_ROAM_SCAN_MAX_PROBE_SIZE 450 -#define WDI_ROAM_SCAN_RESERVED_BYTES 64 -#endif +typedef struct +{ + wpt_uint16 cmd; + wpt_uint16 dummy; + union + { + WDI_LPHBEnableStruct lphbEnableReq; + WDI_LPHBTcpParamStruct lphbTcpParamReq; + WDI_LPHBTcpFilterStruct lphbTcpFilterReq; + WDI_LPHBUdpParamStruct lphbUdpParamReq; + WDI_LPHBUdpFilterStruct lphbUdpFilterReq; + } params; +} WDI_LPHBReq; +#endif /* FEATURE_WLAN_LPHB */ /*--------------------------------------------------------------------------- WDI_AuthType @@ -4304,6 +4875,21 @@ typedef enum WDI_ED_MAX = 0xFFFFFFFF /*expanding the type to UINT32*/ } WDI_EdType; +#ifdef FEATURE_WLAN_SCAN_PNO + +/*Max number of channels for a given network supported by PNO*/ +#define WDI_PNO_MAX_NETW_CHANNELS 26 + +/*Max number of channels for a given network supported by PNO*/ +#define WDI_PNO_MAX_NETW_CHANNELS_EX 60 + +/*The max number of programable networks for PNO*/ +#define WDI_PNO_MAX_SUPP_NETWORKS 16 + +/*The max number of scan timers programable in Riva*/ +#define WDI_PNO_MAX_SCAN_TIMERS 10 + +#define WDI_PNO_MAX_PROBE_SIZE 450 /*--------------------------------------------------------------------------- WDI_PNOMode @@ -4352,7 +4938,7 @@ typedef struct wpt_uint8 ucChannelCount; /*the actual channels*/ - wpt_uint8 aChannels[WDI_PNO_MAX_NETW_CHANNELS]; + wpt_uint8 aChannels[WDI_PNO_MAX_NETW_CHANNELS_EX]; /*rssi threshold that a network must meet to be considered, 0 - for any*/ wpt_uint8 rssiThreshold; @@ -4429,8 +5015,80 @@ typedef struct void* pUserData; } WDI_PNOScanReqParamsType; +/*--------------------------------------------------------------------------- + WDI_SetRssiFilterReqParamsType + PNO info passed to WDI form WDA +---------------------------------------------------------------------------*/ +typedef struct +{ + /* RSSI Threshold */ + wpt_uint8 rssiThreshold; + /* Request status callback offered by UMAC - it is called if the current req + has returned PENDING as status; it delivers the status of sending the message + over the BUS */ + WDI_ReqStatusCb wdiReqStatusCB; + /* The user data passed in by UMAC, it will be sent back when the above + function pointer will be called */ + void* pUserData; +} WDI_SetRssiFilterReqParamsType; + +/*--------------------------------------------------------------------------- + WDI_UpdateScanParamsInfo +---------------------------------------------------------------------------*/ +typedef struct +{ + /*Is 11d enabled*/ + wpt_uint8 b11dEnabled; + + /*Was UMAc able to find the regulatory domain*/ + wpt_uint8 b11dResolved; + + /*Number of channel allowed in the regulatory domain*/ + wpt_uint8 ucChannelCount; + + /*The actual channels allowed in the regulatory domain*/ + wpt_uint8 aChannels[WDI_PNO_MAX_NETW_CHANNELS_EX]; + + /*Passive min channel time*/ + wpt_uint16 usPassiveMinChTime; + + /*Passive max channel time*/ + wpt_uint16 usPassiveMaxChTime; + + /*Active min channel time*/ + wpt_uint16 usActiveMinChTime; + + /*Active max channel time*/ + wpt_uint16 usActiveMaxChTime; + + /*channel bonding info*/ + wpt_uint8 cbState; +} WDI_UpdateScanParamsInfo; + +/*--------------------------------------------------------------------------- + WDI_UpdateScanParamsInfoType + UpdateScanParams info passed to WDI form WDA +---------------------------------------------------------------------------*/ +typedef struct +{ + /* PNO Info Type, same as tUpdateScanParams */ + WDI_UpdateScanParamsInfo wdiUpdateScanParamsInfo; + /* Request status callback offered by UMAC - it is called if the current req + has returned PENDING as status; it delivers the status of sending the message + over the BUS */ + WDI_ReqStatusCb wdiReqStatusCB; + /* The user data passed in by UMAC, it will be sent back when the above + function pointer will be called */ + void* pUserData; +} WDI_UpdateScanParamsInfoType; +#endif //FEATURE_WLAN_SCAN_PNO + #ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD +#define WDI_ROAM_SCAN_MAX_CHANNELS 80 /* NUM_RF_CHANNELS */ +#define WDI_ROAM_SCAN_MAX_PROBE_SIZE 450 +#define WDI_ROAM_SCAN_RESERVED_BYTES 61 + typedef struct { /*The SSID of the preferred network*/ @@ -4467,6 +5125,7 @@ typedef struct WDIMobilityDomainInfo typedef struct { wpt_boolean RoamScanOffloadEnabled; + wpt_boolean MAWCEnabled; wpt_uint8 LookupThreshold; wpt_uint8 RoamRssiDiff; wpt_uint8 ChannelCacheType; @@ -4487,10 +5146,12 @@ typedef struct /*Probe template for 5GHz band*/ wpt_uint16 us5GProbeSize; wpt_uint8 a5GProbeTemplate[WDI_ROAM_SCAN_MAX_PROBE_SIZE]; - /*LFR BG Scan will currently look for only on network to which it is initially connected. + /*LFR BG Scan will currently look for only one network to which it is initially connected. * As per requirement, later, the following structure can be used as an array of networks.*/ WDI_RoamNetworkType ConnectedNetwork; WDI_MobilityDomainInfo MDID; + wpt_uint8 nProbes; + wpt_uint16 HomeAwayTime; wpt_uint8 ReservedBytes[WDI_ROAM_SCAN_RESERVED_BYTES]; } WDI_RoamOffloadScanInfo; @@ -4505,77 +5166,8 @@ typedef struct /* The user data passed in by UMAC, it will be sent back when the above function pointer will be called */ void* pUserData; -} WDI_RoamCandidateLookupReqParamsType; - -#endif - -/*--------------------------------------------------------------------------- - WDI_SetRssiFilterReqParamsType - PNO info passed to WDI form WDA ----------------------------------------------------------------------------*/ -typedef struct -{ - /* RSSI Threshold */ - wpt_uint8 rssiThreshold; - /* Request status callback offered by UMAC - it is called if the current req - has returned PENDING as status; it delivers the status of sending the message - over the BUS */ - WDI_ReqStatusCb wdiReqStatusCB; - /* The user data passed in by UMAC, it will be sent back when the above - function pointer will be called */ - void* pUserData; -} WDI_SetRssiFilterReqParamsType; - -/*--------------------------------------------------------------------------- - WDI_UpdateScanParamsInfo ----------------------------------------------------------------------------*/ -typedef struct -{ - /*Is 11d enabled*/ - wpt_uint8 b11dEnabled; - - /*Was UMAc able to find the regulatory domain*/ - wpt_uint8 b11dResolved; - - /*Number of channel allowed in the regulatory domain*/ - wpt_uint8 ucChannelCount; - - /*The actual channels allowed in the regulatory domain*/ - wpt_uint8 aChannels[WDI_PNO_MAX_NETW_CHANNELS_EX]; - - /*Passive min channel time*/ - wpt_uint16 usPassiveMinChTime; - - /*Passive max channel time*/ - wpt_uint16 usPassiveMaxChTime; - - /*Active min channel time*/ - wpt_uint16 usActiveMinChTime; - - /*Active max channel time*/ - wpt_uint16 usActiveMaxChTime; - - /*channel bonding info*/ - wpt_uint8 cbState; -} WDI_UpdateScanParamsInfo; - -/*--------------------------------------------------------------------------- - WDI_UpdateScanParamsInfoType - UpdateScanParams info passed to WDI form WDA ----------------------------------------------------------------------------*/ -typedef struct -{ - /* PNO Info Type, same as tUpdateScanParams */ - WDI_UpdateScanParamsInfo wdiUpdateScanParamsInfo; - /* Request status callback offered by UMAC - it is called if the current req - has returned PENDING as status; it delivers the status of sending the message - over the BUS */ - WDI_ReqStatusCb wdiReqStatusCB; - /* The user data passed in by UMAC, it will be sent back when the above - function pointer will be called */ - void* pUserData; -} WDI_UpdateScanParamsInfoType; -#endif // FEATURE_WLAN_SCAN_PNO +} WDI_RoamScanOffloadReqParamsType; +#endif //WLAN_FEATURE_ROAM_SCAN_OFFLOAD /*--------------------------------------------------------------------------- WDI_UpdateScanParamsInfo @@ -4922,6 +5514,129 @@ typedef struct void* pUserData; }WDI_SetTmLevelRspType; +#ifdef FEATURE_WLAN_LPHB +/*--------------------------------------------------------------------------- + WDI_LPHBConfigParamsType +---------------------------------------------------------------------------*/ +typedef struct +{ + void* pLphsConfIndData; +}WDI_LPHBConfigParamsType; +#endif /* FEATURE_WLAN_LPHB */ + +/*--------------------------------------------------------------------------- + WDI_AddPeriodicTxPtrnInfoType +---------------------------------------------------------------------------*/ +typedef struct +{ + /* MAC Address for the adapter */ + wpt_macAddr macAddr; + + wpt_uint8 ucPtrnId; // Pattern ID + wpt_uint16 ucPtrnSize; // Pattern size + wpt_uint32 usPtrnIntervalMs; // In msec + wpt_uint8 ucPattern[PERIODIC_TX_PTRN_MAX_SIZE]; // Pattern buffer +} WDI_AddPeriodicTxPtrnInfoType; + +/*--------------------------------------------------------------------------- + WDI_DelPeriodicTxPtrnInfoType +---------------------------------------------------------------------------*/ +typedef struct +{ + /* MAC Address for the adapter */ + wpt_macAddr macAddr; + + /* Bitmap of pattern IDs that needs to be deleted */ + wpt_uint32 ucPatternIdBitmap; +} WDI_DelPeriodicTxPtrnInfoType; + +/*--------------------------------------------------------------------------- + WDI_AddPeriodicTxPtrnParamsType +---------------------------------------------------------------------------*/ +typedef struct +{ + WDI_AddPeriodicTxPtrnInfoType wdiAddPeriodicTxPtrnParams; + + /*Request status callback offered by UMAC - it is called if the current + req has returned PENDING as status; it delivers the status of sending + the message over the BUS */ + WDI_ReqStatusCb wdiReqStatusCB; + + /*The user data passed in by UMAC, it will be sent back when the above + function pointer will be called */ + void* pUserData; +} WDI_AddPeriodicTxPtrnParamsType; + +/*--------------------------------------------------------------------------- + WDI_DelPeriodicTxPtrnParamsType +---------------------------------------------------------------------------*/ +typedef struct +{ + WDI_DelPeriodicTxPtrnInfoType wdiDelPeriodicTxPtrnParams; + + /*Request status callback offered by UMAC - it is called if the current + req has returned PENDING as status; it delivers the status of sending + the message over the BUS */ + WDI_ReqStatusCb wdiReqStatusCB; + + /*The user data passed in by UMAC, it will be sent back when the above + function pointer will be called */ + void* pUserData; +} WDI_DelPeriodicTxPtrnParamsType; + +#ifdef FEATURE_CESIUM_PROPRIETARY +/*--------------------------------------------------------------------------- + WDI_IbssPeerInfoParams +---------------------------------------------------------------------------*/ +typedef struct +{ + wpt_uint8 wdiStaIdx; //StaIdx + wpt_uint32 wdiTxRate; //Tx Rate + wpt_uint32 wdiMcsIndex; //MCS Index + wpt_uint32 wdiTxRateFlags; //TxRate Flags + wpt_int8 wdiRssi; //RSSI +}WDI_IbssPeerInfoParams; + +/*--------------------------------------------------------------------------- + WDI_IbssPeerInfoRspParams +---------------------------------------------------------------------------*/ +typedef struct +{ + wpt_uint32 wdiStatus; // Return status + wpt_uint8 wdiNumPeers; // Number of peers + WDI_IbssPeerInfoParams *wdiPeerInfoParams; // Peer Info parameters +}WDI_IbssPeerInfoRspParams; + +/*--------------------------------------------------------------------------- + WDI_GetIbssPeerInfoRspType +---------------------------------------------------------------------------*/ +typedef struct +{ + WDI_IbssPeerInfoRspParams wdiPeerInfoRspParams; + + /*Request status callback offered by UMAC - it is called if the current + req has returned PENDING as status; it delivers the status of sending + the message over the BUS */ + WDI_ReqStatusCb wdiReqStatusCB; + + /*The user data passed in by UMAC, it will be sent back when the above + function pointer will be called */ + void* pUserData; +}WDI_GetIbssPeerInfoRspType; + +/*--------------------------------------------------------------------------- + WDI_IbssPeerInfoReqType +---------------------------------------------------------------------------*/ +typedef struct +{ + wpt_boolean wdiAllPeerInfoReqd; // Request info for all peers + wpt_uint8 wdiStaIdx; // STA Index + wpt_uint8 wdiBssIdx; // BSS Index +}WDI_IbssPeerInfoReqType; + +#endif /* FEATURE_CESIUM_PROPRIETARY */ + + /*---------------------------------------------------------------------------- * WDI callback types *--------------------------------------------------------------------------*/ @@ -5632,16 +6347,37 @@ typedef void (*WDI_SendBeaconParamsRspCb)(WDI_Status wdiStatus, PARAMETERS IN - wdiStatus: response status received from HAL - pUserData: user data + wdiStatus: response status received from HAL + pUserData: user data + + + + RETURN VALUE + The result code associated with performing the operation +---------------------------------------------------------------------------*/ +typedef void (*WDA_SetMaxTxPowerRspCb)(WDI_SetMaxTxPowerRspMsg *wdiSetMaxTxPowerRsp, + void* pUserData); + +/*--------------------------------------------------------------------------- + WDA_SetMaxTxPowerPerBandRspCb + + DESCRIPTION + + This callback is invoked by DAL when it has received a + set max Tx Power Per Band response from the underlying device. + + PARAMETERS + + IN + wdiSetMaxTxPowerPerBandRsp: response status received from HAL + pUserData: user data - - - RETURN VALUE + RETURN VALUE The result code associated with performing the operation ---------------------------------------------------------------------------*/ -typedef void (*WDA_SetMaxTxPowerRspCb)(WDI_SetMaxTxPowerRspMsg *wdiSetMaxTxPowerRsp, - void* pUserData); +typedef void (*WDA_SetMaxTxPowerPerBandRspCb)(WDI_SetMaxTxPowerPerBandRspMsg + *wdiSetMaxTxPowerPerBandRsp, + void* pUserData); /*--------------------------------------------------------------------------- WDA_SetTxPowerRspCb @@ -5707,6 +6443,28 @@ typedef void (*WDI_UpdateProbeRspTemplateRspCb)(WDI_Status wdiStatus, typedef void (*WDI_SetP2PGONOAReqParamsRspCb)(WDI_Status wdiStatus, void* pUserData); +/*--------------------------------------------------------------------------- + WDI_SetTDLSLinkEstablishReqParamsRspCb + + DESCRIPTION + + This callback is invoked by DAL when it has received a TDLS Link Establish Req response from + the underlying device. + + PARAMETERS + + IN + wdiStatus: response status received from HAL + pUserData: user data + + + + RETURN VALUE + The result code associated with performing the operation +---------------------------------------------------------------------------*/ +typedef void (*WDI_SetTDLSLinkEstablishReqParamsRspCb)(WDI_SetTdlsLinkEstablishReqResp * + wdiSetTdlsLinkEstablishReqRsp, + void* pUserData); /*--------------------------------------------------------------------------- WDI_SetPwrSaveCfgCb @@ -6699,6 +7457,47 @@ typedef void (*WDI_UpdateVHTOpModeCb)(WDI_Status wdiStatus, void* pUserData); #endif +#ifdef FEATURE_WLAN_LPHB +typedef void (*WDI_LphbCfgCb)(WDI_Status wdiStatus, + void* pUserData); +#endif /* FEATURE_WLAN_LPHB */ + +#if defined WLAN_FEATURE_RELIABLE_MCAST +typedef void (*WDI_LbpLeaderRspCb)(WDI_LbpRspParamsType *wdiLbpResponse, + void* pUserData); +#endif /* WLAN_FEATURE_RELIABLE_MCAST */ + +#ifdef FEATURE_CESIUM_PROPRIETARY +typedef void (*WDI_IbssPeerInfoReqCb)(WDI_IbssPeerInfoRspParams *pInfoRspParams, + void* pUserData); + +#endif /* FEATURE_CESIUM_PROPRIETARY */ + +#ifdef FEATURE_WLAN_BATCH_SCAN +/*--------------------------------------------------------------------------- + WDI_SetBatchScanCb + + DESCRIPTION + + This callback is invoked by DAL when it has received a get batch scan + response from the underlying device. + + PARAMETERS + + IN + wdiStatus: response status received from HAL + pUserData: user data + + + + RETURN VALUE + The result code associated with performing the operation +---------------------------------------------------------------------------*/ +typedef void (*WDI_SetBatchScanCb)(void *pData, WDI_SetBatchScanRspType *pRsp); + +#endif + + /*======================================================================== * Function Declarations and Documentation @@ -7423,6 +8222,37 @@ WDI_SetMaxTxPowerReq void* pUserData ); +/** + @brief WDI_SetMaxTxPowerPerBandReq will be called when the upper + MAC wants to set Max Tx Power to HW for specific band. Upon the + call of this API the WLAN DAL will pack and send a HAL + Set Max Tx Power Per Band request message to the lower RIVA + sub-system if DAL is in state STARTED. + + In state BUSY this request will be queued. Request won't + be allowed in any other state. + + + @param WDI_SetMaxTxPowerPerBandParamsType: Max Tx Per Band Info + + WDA_SetMaxTxPowerPerBandRspCb: This callback is invoked by DAL + when it has received a set max Tx Power Per Band response from + the underlying device. + + pUserData: user data will be passed back with the + callback + + @see WDI_SetMaxTxPowerPerBandReq + @return Result of the function call +*/ +WDI_Status +WDI_SetMaxTxPowerPerBandReq +( + WDI_SetMaxTxPowerPerBandParamsType* pwdiSetMaxTxPowerPerBandParams, + WDA_SetMaxTxPowerPerBandRspCb wdiReqStatusCb, + void* pUserData +); + #ifdef FEATURE_WLAN_CCX /** @brief WDI_TSMStatsReq will be called by the upper MAC to fetch @@ -7765,6 +8595,37 @@ WDI_SetP2PGONOAReq void* pUserData ); +/** + @brief WDI_SetTDLSLinkEstablishReq will be called when the + upper MAC wants to send TDLS Link Establish Request Parameters + Upon the call of this API the WLAN DAL will + pack and send the TDLS Link Establish Request message to the + lower RIVA sub-system if DAL is in state STARTED. + + In state BUSY this request will be queued. Request won't + be allowed in any other state. + + + @param pwdiTDLSLinkEstablishReqParams: TDLS Peer Parameters + for Link Establishment (Used for PUAPSD , TDLS Off Channel ...) + + wdiTDLSLinkEstablishReqRspCb: callback for passing back the + response of the TDLS Link Establish request received + from the device + + pUserData: user data will be passed back with the + callback + + @see + @return Result of the function call +*/ +WDI_Status +WDI_SetTDLSLinkEstablishReq +( + WDI_SetTDLSLinkEstablishReqParamsType* pwdiTDLSLinkEstablishReqParams, + WDI_SetTDLSLinkEstablishReqParamsRspCb wdiTDLSLinkEstablishReqRspCb, + void* pUserData +); /*======================================================================== @@ -9040,6 +9901,36 @@ WDI_ExcludeUnencryptedInd ); #endif +/** + @brief WDI_AddPeriodicTxPtrnInd + + @param WDI_AddPeriodicTxPtrnParamsType + + @see + + @return Status of the request +*/ +WDI_Status +WDI_AddPeriodicTxPtrnInd +( + WDI_AddPeriodicTxPtrnParamsType *addPeriodicTxPtrnParams +); + +/** + @brief WDI_DelPeriodicTxPtrnInd + + @param WDI_DelPeriodicTxPtrnParamsType + + @see + + @return Status of the request +*/ +WDI_Status +WDI_DelPeriodicTxPtrnInd +( + WDI_DelPeriodicTxPtrnParamsType *delPeriodicTxPtrnParams +); + #ifdef FEATURE_WLAN_SCAN_PNO /** @brief WDI_SetPreferredNetworkList @@ -9116,9 +10007,9 @@ WDI_UpdateScanParamsReq #ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD /** - @brief WDI_StartRoamCandidateLookupReq + @brief WDI_RoamScanOffloadReq - @param pwdiRoamCandidateLookupReqParams: Start Roam Candidate Lookup Req as specified + @param pwdiRoamScanOffloadReqParams: Start Roam Candidate Lookup Req as specified by the Device Interface wdiRoamOffloadScanCb: callback for passing back the response @@ -9131,9 +10022,9 @@ WDI_UpdateScanParamsReq @return Result of the function call */ WDI_Status -WDI_StartRoamCandidateLookupReq +WDI_RoamScanOffloadReq ( - WDI_RoamCandidateLookupReqParamsType* pwdiRoamCandidateLookupReqParams, + WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams, WDI_RoamOffloadScanCb wdiRoamOffloadScancb, void* pUserData ); @@ -9330,6 +10221,123 @@ WDI_SetPowerParamsReq WDI_SetPowerParamsCb wdiPowerParamsCb, void* pUserData ); +/** + @brief WDI_dhcpStartInd + Forward the DHCP Start event + + @param + + wdiDHCPInd: device mode and MAC address is passed + + @see + @return Result of the function call +*/ + +WDI_Status +WDI_dhcpStartInd +( + WDI_DHCPInd *wdiDHCPInd +); +/** + @brief WDI_dhcpStopReq + Forward the DHCP Stop event + + @param + + wdiDHCPInd: device mode and MAC address is passed + + @see + @return Result of the function call +*/ + +WDI_Status +WDI_dhcpStopInd +( + WDI_DHCPInd *wdiDHCPInd +); + +#if defined WLAN_FEATURE_RELIABLE_MCAST +/** + @brief WDI_lbpLeaderReq will be called when the upper MAC + requests the device to enable LBP reliable multicast. + + In state BUSY this request will be queued. Request won't + be allowed in any other state. + + + @param wdiLbpLeaderReq: + + @see WDI_Start + @return Result of the function call +*/ +WDI_Status +WDI_LbpLeaderReq +( + WDI_LbpLeaderReqParams *wdiLbpLeaderReqParams, + WDI_LbpLeaderRspCb lbpLeaderRspCb, + void *usrData +); + +/** + @brief WDI_lbpUpdateInd will be called when the upper MAC + requests the device to enable LBP reliable multicast. + + In state BUSY this request will be queued. Request won't + be allowed in any other state. + + + @param wdiLbpUpdateInd: + + + @see WDI_Start + @return Result of the function call +*/ +WDI_Status +WDI_LbpUpdateInd +( + WDI_LbpUpdateIndParams *wdiLbpUpdateIndParams +); +#endif /* WLAN_FEATURE_RELIABLE_MCAST */ + +/** + @brief WDI_RateUpdateInd will be called when the upper MAC + requests the device to update rates. + + In state BUSY this request will be queued. Request won't + be allowed in any other state. + + + @param wdiRateUpdateIndParams + + + @see WDI_Start + @return Result of the function call +*/ +WDI_Status +WDI_RateUpdateInd +( + WDI_RateUpdateIndParams *wdiRateUpdateIndParams +); + +#ifdef FEATURE_CESIUM_PROPRIETARY +/** + @brief WDI_TXFailMonitorStartStopInd + Forward TX monitor start/stop event + + @param + + WDI_TXFailMonitorInd + + @see + @return Result of the function call +*/ + +WDI_Status +WDI_TXFailMonitorStartStopInd +( + WDI_TXFailMonitorInd *wdiTXFailMonitorInd +); +#endif /* FEATURE_CESIUM_PROPRIETARY */ #ifdef WLAN_FEATURE_GTK_OFFLOAD /** @@ -9475,7 +10483,7 @@ wpt_uint8 WDI_getHostWlanFeatCaps(wpt_uint8 feat_enum_value); #ifdef QCA_WIFI_2_0 static inline wpt_uint8 WDI_getFwWlanFeatCaps(wpt_uint8 feat_enum_value) { - return 0; + return 0; } #else wpt_uint8 WDI_getFwWlanFeatCaps(wpt_uint8 feat_enum_value); @@ -9552,9 +10560,113 @@ WDI_SsrTimerCB */ void WDI_SetEnableSSR(wpt_boolean enableSSR); +#ifdef FEATURE_WLAN_LPHB +/** + @brief WDI_LPHBConfReq + This API is called to config FW LPHB rule + + @param lphbconfParam : LPHB rule should config to FW + usrData : Client context + lphbCfgCb : Configuration status callback + @see + @return SUCCESS or FAIL +*/ +WDI_Status WDI_LPHBConfReq +( + void *lphbconfParam, + void *usrData, + WDI_LphbCfgCb lphbCfgCb +); +#endif /* FEATURE_WLAN_LPHB */ + +#ifdef FEATURE_WLAN_BATCH_SCAN +/** + @brief WDI_SetBatchScanReq + This API is called to set batch scan request in FW + + @param pBatchScanReqParam : pointer to set batch scan re param + usrData : Client context + setBatchScanRspCb : set batch scan resp callback + @see + @return SUCCESS or FAIL +*/ +WDI_Status WDI_SetBatchScanReq +( + void *pBatchScanReqParam, + void *usrData, + WDI_SetBatchScanCb setBatchScanRspCb +); + +/** + @brief WDI_StopBatchScanInd + + @param none + + @see + + @return Status of the request +*/ +WDI_Status +WDI_StopBatchScanInd(WDI_StopBatchScanIndType *pWdiReq); + +/** + @brief WDI_TriggerBatchScanResultInd + This API is called to pull batch scan result from FW + + @param pBatchScanReqParam : pointer to trigger batch scan ind param + usrData : Client context + setBatchScanRspCb : get batch scan resp callback + @see + @return SUCCESS or FAIL +*/ +WDI_Status +WDI_TriggerBatchScanResultInd(WDI_TriggerBatchScanResultIndType *pWdiReq); + + +#endif /*FEATURE_WLAN_BATCH_SCAN*/ + +#ifdef FEATURE_CESIUM_PROPRIETARY +/** + @brief Process LBP Update Indication and post it to HAL + + @param pWDICtx: pointer to the WLAN DAL context + pEventData: pointer to the event information structure + + @see + @return Result of the function call +*/ + +WDI_Status +WDI_IbssPeerInfoReq +( + WDI_IbssPeerInfoReqType* wdiPeerInfoReqParams, + WDI_IbssPeerInfoReqCb wdiIbssPeerInfoReqCb, + void* pUserData +); + + +/** + @brief WDI_IBSSRouteTableUpdateInd + Forward the IBSS Route Table Update Indication + + @param + + pwdiIBSSRouteTableInd: IBSS Route table + + @see + @return Success or Failure +*/ + +WDI_Status +WDI_IBSSRouteTableUpdateInd +( + WDI_IBSSRouteTable *pwdiIBSSRouteTable +); +#endif /* FEATURE_CESIUM_PROPRIETARY */ + #ifdef __cplusplus } -#endif +#endif #endif /* #ifndef WLAN_QCT_WDI_H */ diff --git a/CORE/WDI/CP/inc/wlan_qct_wdi_bd.h b/CORE/WDI/CP/inc/wlan_qct_wdi_bd.h index a63157fb749b..9db4b42651cb 100644 --- a/CORE/WDI/CP/inc/wlan_qct_wdi_bd.h +++ b/CORE/WDI/CP/inc/wlan_qct_wdi_bd.h @@ -463,7 +463,8 @@ typedef struct #ifdef WPT_BIG_BYTE_ENDIAN /** reserved8 from a hardware perspective. Used by SW to propogate frame type/subtype information */ - wpt_uint32 frameTypeSubtype:8; + wpt_uint32 frameTypeSubtype:6; + wpt_uint32 rfBand:2; /** Filled RPE gives the current sequence number in bitmap */ wpt_uint32 currentPktSeqNo:12; @@ -474,7 +475,8 @@ typedef struct #else wpt_uint32 expectedPktSeqNo:12; wpt_uint32 currentPktSeqNo:12; - wpt_uint32 frameTypeSubtype:8; + wpt_uint32 rfBand:2; + wpt_uint32 frameTypeSubtype:6; #endif /* 0x48 */ diff --git a/CORE/WDI/CP/inc/wlan_qct_wdi_dp.h b/CORE/WDI/CP/inc/wlan_qct_wdi_dp.h index 18dc1abb601b..d3aa8dfbac39 100644 --- a/CORE/WDI/CP/inc/wlan_qct_wdi_dp.h +++ b/CORE/WDI/CP/inc/wlan_qct_wdi_dp.h @@ -115,6 +115,14 @@ when who what, where, why #define WDI_USE_BD_RATE2_FOR_MANAGEMENT_FRAME 0x40 // Bit 6 will be used to control BD rate for Management frames +#ifdef FEATURE_WLAN_TDLS +#define HAL_TDLS_PEER_STA_MASK 0x80 //bit 7 set for TDLS peer station +#endif + +#ifdef WLAN_FEATURE_RELIABLE_MCAST +#define WDI_RELIABLE_MCAST_REQUESTED_MASK 0x100 +#define WDI_USE_BD_RATE_MASK 0x1000 +#endif /*Macro for getting the size of the TX BD*/ #define WDI_TX_BD_HEADER_SIZE sizeof(WDI_TxBdType) @@ -262,6 +270,8 @@ when who what, where, why #define WDI_RX_BD_GET_TID( _pvBDHeader ) (((WDI_RxBdType*)_pvBDHeader)->tid) +#define WDI_RX_BD_GET_RFBAND( _pvBDHeader ) (((WDI_RxBdType*)_pvBDHeader)->rfBand) + #define WDI_RX_BD_GET_ASF( _pvBDHeader ) (((WDI_RxBdType*)_pvBDHeader)->asf) #define WDI_RX_BD_GET_AEF( _pvBDHeader ) (((WDI_RxBdType*)_pvBDHeader)->aef) @@ -389,6 +399,8 @@ WDI_RxBD_GetFrameTypeSubType ucDisableFrmXtl: set to 1 if this frame is not to be translated by HW pTxBd: pointer to the TX BD ucTxFlag: can have appropriate bit setting as required + ucProtMgmtFrame: for management frames, whether the frame is + protected (protect bit is set in FC) uTimestamp: pkt timestamp @@ -405,7 +417,8 @@ WDI_FillTxBd wpt_uint8* pTid, wpt_uint8 ucDisableFrmXtl, void* pTxBd, - wpt_uint8 ucTxFlag, + wpt_uint32 ucTxFlag, + wpt_uint8 ucProtMgmtFrame, wpt_uint32 uTimeStamp, wpt_uint8* staIndex ); diff --git a/CORE/WDI/CP/inc/wlan_qct_wdi_i.h b/CORE/WDI/CP/inc/wlan_qct_wdi_i.h index 3d6de0c355a7..325a6d8d3db6 100644 --- a/CORE/WDI/CP/inc/wlan_qct_wdi_i.h +++ b/CORE/WDI/CP/inc/wlan_qct_wdi_i.h @@ -97,8 +97,10 @@ when who what, where, why #ifdef WLAN_SOFTAP_VSTA_FEATURE #define WDI_MAX_SUPPORTED_STAS 41 +#define WDI_MAX_IBSS_PEER_SUPPORED_STAS 32 #else #define WDI_MAX_SUPPORTED_STAS 12 +#define WDI_MAX_IBSS_PEER_SUPPORED_STAS 11 #endif #define WDI_MAX_SUPPORTED_BSS 5 @@ -430,7 +432,27 @@ typedef enum /*WLAN DAL Set Tx Power Request*/ WDI_SET_TX_POWER_REQ = 82, - WDI_START_ROAM_CANDIDATE_LOOKUP_REQ = 83, + WDI_ROAM_SCAN_OFFLOAD_REQ = 83, + + WDI_TDLS_LINK_ESTABLISH_REQ = 84, + + /* WLAN FW LPHB config request */ + WDI_LPHB_CFG_REQ = 85, + /* Send LBP Leader Request */ + WDI_LBP_LEADER_REQ = 86, + +#ifdef FEATURE_CESIUM_PROPRIETARY + WDI_HAL_IBSS_PEER_INFO_REQ = 87, +#endif /* FEATURE_CESIUM_PROPRIETARY */ + +#ifdef FEATURE_WLAN_BATCH_SCAN + /* WLAN FW set batch scan request */ + WDI_SET_BATCH_SCAN_REQ = 88, +#endif + + /*WLAN DAL Set Max Tx Power Per band Request*/ + WDI_SET_MAX_TX_POWER_PER_BAND_REQ = 89, + WDI_MAX_REQ, /*Send a suspend Indication down to HAL*/ @@ -439,14 +461,47 @@ typedef enum /* Send a traffic stats indication to HAL */ WDI_TRAFFIC_STATS_IND, + /* DHCP Start Indication */ + WDI_DHCP_START_IND, + + /* DHCP Stop Indication */ + WDI_DHCP_STOP_IND, + /* Drop/Receive unencrypted frames indication to HAL */ WDI_EXCLUDE_UNENCRYPTED_IND, + /* Send an add periodic Tx pattern indication to HAL */ + WDI_ADD_PERIODIC_TX_PATTERN_IND, + + /* Send a delete periodic Tx pattern indicationto HAL */ + WDI_DEL_PERIODIC_TX_PATTERN_IND, + + /* Send LBP Update Indication */ + WDI_LBP_UPDATE_IND, + + /* Send Rate Update Indication */ + WDI_RATE_UPDATE_IND, + +#ifdef FEATURE_WLAN_BATCH_SCAN + /*Send stop batch scan indication to FW*/ + WDI_STOP_BATCH_SCAN_IND, + /*Send stop batch scan indication to FW*/ + WDI_TRIGGER_BATCH_SCAN_RESULT_IND, +#endif + +#ifdef FEATURE_CESIUM_PROPRIETARY + /* IBSS Route Table Update Indication */ + WDI_IBSS_ROUTE_TABLE_UPDATE_IND, + + /* TX Monitor start/stop indication */ + WDI_TX_FAIL_MONITOR_IND, +#endif + /*Keep adding the indications to the max request such that we keep them sepparate */ WDI_MAX_UMAC_IND -}WDI_RequestEnumType; +}WDI_RequestEnumType; /*--------------------------------------------------------------------------- WLAN DAL Supported Response Types @@ -696,7 +751,26 @@ typedef enum WDI_GET_ROAM_RSSI_RESP = 80, WDI_SET_TX_POWER_RESP = 81, - WDI_START_ROAM_CANDIDATE_LOOKUP_RESP = 82, + WDI_ROAM_SCAN_OFFLOAD_RESP = 82, + + WDI_TDLS_LINK_ESTABLISH_REQ_RESP = 83, + + /* WLAN FW LPHB Config response */ + WDI_LPHB_CFG_RESP = 84, + + /* Reliable Multicast Leader Response from FW to Host */ + WDI_LBP_LEADER_RESP = 85, + +#ifdef FEATURE_CESIUM_PROPRIETARY + WDI_HAL_IBSS_PEER_INFO_RSP = 86, +#endif /* FEATURE_CESIUM_PROPRIETARY */ + +#ifdef FEATURE_WLAN_BATCH_SCAN + WDI_SET_BATCH_SCAN_RESP = 87, +#endif + + WDI_SET_MAX_TX_POWER_PER_BAND_RSP = 88, + /*------------------------------------------------------------------------- Indications !! Keep these last in the enum if possible @@ -744,13 +818,36 @@ typedef enum /* NOA Start Indication from FW to Host */ WDI_HAL_P2P_NOA_START_IND = WDI_HAL_IND_MIN + 12, + /* TDLS Indication from FW to Host */ + WDI_HAL_TDLS_IND = WDI_HAL_IND_MIN + 13, + + /* LPHB timeout indication */ + WDI_HAL_LPHB_IND = WDI_HAL_IND_MIN + 14, + + /* IBSS Peer Inactivity Indication from FW to Host */ + WDI_HAL_IBSS_PEER_INACTIVITY_IND = WDI_HAL_IND_MIN + 15, + + /* Periodic Tx Pattern Indication from FW to Host */ + WDI_HAL_PERIODIC_TX_PTRN_FW_IND = WDI_HAL_IND_MIN + 16, + + /* Reliable Multicast Update Indication from FW to Host */ + WDI_LBP_UPDATE_IND_TO_HOST = WDI_HAL_IND_MIN + 17, + +#ifdef FEATURE_WLAN_BATCH_SCAN + WDI_BATCHSCAN_RESULT_IND = WDI_HAL_IND_MIN + 18, +#endif + +#ifdef FEATURE_CESIUM_PROPRIETARY + WDI_HAL_TX_FAIL_IND = WDI_HAL_IND_MIN + 19, +#endif + WDI_MAX_RESP -}WDI_ResponseEnumType; +}WDI_ResponseEnumType; -typedef struct +typedef struct { /*Flag that marks a session as being in use*/ - wpt_boolean bInUse; + wpt_boolean bInUse; /*Flag that keeps track if a series of assoc requests for this BSS are currently pending in the queue or processed @@ -2172,6 +2269,22 @@ WDI_Status WDI_ProcessSetMaxTxPowerReq WDI_EventInfoType* pEventData ); +/** + @brief Process Set Max Tx Power Per Band Request function (called when Main + FSM allows it) + + @param pWDICtx: pointer to the WLAN DAL context + pEventData: pointer to the event information structure + + @see + @return Result of the function call +*/ +WDI_Status WDI_ProcessSetMaxTxPowerPerBandReq +( + WDI_ControlBlockType* pWDICtx, + WDI_EventInfoType* pEventData +); + /** @brief Process Set Tx Power Request function (called when Main FSM allows it) @@ -2205,6 +2318,23 @@ WDI_ProcessP2PGONOAReq WDI_EventInfoType* pEventData ); +/** + @brief Process TDLS Link Establish Request function (called when Main FSM + allows it) + + @param pWDICtx: pointer to the WLAN DAL context + pEventData: pointer to the event information structure + + @see + @return Result of the function call +*/ +WDI_Status +WDI_ProcessTdlsLinkEstablishReq +( + WDI_ControlBlockType* pWDICtx, + WDI_EventInfoType* pEventData +); + /** @brief Process Enter IMPS Request function (called when Main FSM allows it) @@ -2682,6 +2812,59 @@ WDI_ProcessSetTmLevelReq WDI_EventInfoType* pEventData ); +#ifdef FEATURE_WLAN_LPHB +/** + @brief WDI_ProcessLPHBConfReq - + LPHB configuration request to FW + + @param pWDICtx : wdi context + pEventData : indication data + + @see + @return esult of the function call +*/ +WDI_Status WDI_ProcessLPHBConfReq +( + WDI_ControlBlockType* pWDICtx, + WDI_EventInfoType* pEventData +); +#endif /* FEATURE_WLAN_LPHB */ + +#ifdef FEATURE_WLAN_BATCH_SCAN +/** + @brief WDI_ProcessSetBatchScanReq - + Send set batch scan configuration request to FW + + @param pWDICtx : wdi context + pEventData : indication data + + @see + @return success or failure +*/ +WDI_Status WDI_ProcessSetBatchScanReq +( + WDI_ControlBlockType* pWDICtx, + WDI_EventInfoType* pEventData +); + +/** + @brief WDI_ProcessGetBatchScanReq - + Send get batch scan request to FW + + @param pWDICtx : wdi context + pEventData : indication data + + @see + @return success or failure +*/ +WDI_Status WDI_ProcessGetBatchScanReq +( + WDI_ControlBlockType* pWDICtx, + WDI_EventInfoType* pEventData +); +#endif /* FEATURE_WLAN_BATCH_SCAN */ + + /*========================================================================= Indications =========================================================================*/ @@ -2702,6 +2885,38 @@ WDI_ProcessHostSuspendInd WDI_EventInfoType* pEventData ); +/** + @brief DHCP Start Event Indication + + @param pWDICtx: pointer to the WLAN DAL context + pEventData: pointer to the event information structure + + @see + @return Result of the function call +*/ +WDI_Status +WDI_ProcessDHCPStartInd +( + WDI_ControlBlockType* pWDICtx, + WDI_EventInfoType* pEventData +); + +/** + @brief DHCP Stop Event Indication + + @param pWDICtx: pointer to the WLAN DAL context + pEventData: pointer to the event information structure + + @see + @return Result of the function call +*/ +WDI_Status +WDI_ProcessDHCPStopInd +( + WDI_ControlBlockType* pWDICtx, + WDI_EventInfoType* pEventData +); + /** @brief Process Traffic Stats Indications function (called when Main FSM allows it) @@ -2738,6 +2953,95 @@ WDI_ProcessExcludeUnencryptInd ); #endif +/** + @brief Process Add Periodic Tx Pattern Indication function (called when + Main FSM allows it) + + @param pWDICtx: pointer to the WLAN DAL context + pEventData: pointer to the event information structure + + @see + @return Result of the function call +*/ +WDI_Status +WDI_ProcessAddPeriodicTxPtrnInd +( + WDI_ControlBlockType* pWDICtx, + WDI_EventInfoType* pEventData +); + +/** + @brief Process Delete Periodic Tx Pattern Indication function (called when + Main FSM allows it) + + @param pWDICtx: pointer to the WLAN DAL context + pEventData: pointer to the event information structure + + @see + @return Result of the function call +*/ +WDI_Status +WDI_ProcessDelPeriodicTxPtrnInd +( + WDI_ControlBlockType* pWDICtx, + WDI_EventInfoType* pEventData +); + +#ifdef FEATURE_WLAN_BATCH_SCAN +/** + @brief Process stop batch scan indications function + It is called when Main FSM allows it + + @param pWDICtx: pointer to the WLAN DAL context + pEventData: pointer to the event information structure + + @see + @return Result of the function call + */ + WDI_Status + WDI_ProcessStopBatchScanInd + ( + WDI_ControlBlockType* pWDICtx, + WDI_EventInfoType* pEventData + ); + +/** + @brief This API is called to trigger batch scan results from FW + It is called when Main FSM allows it + + @param pWDICtx: pointer to the WLAN DAL context + pEventData: pointer to the event information structure + + @see + @return Result of the function call + */ + WDI_Status + WDI_ProcessTriggerBatchScanResultInd + ( + WDI_ControlBlockType* pWDICtx, + WDI_EventInfoType* pEventData + ); + +#endif + +#ifdef FEATURE_CESIUM_PROPRIETARY +/** + @brief Process TX Fail monitor indication + + @param pWDICtx: pointer to the WLAN DAL context + pEventData: pointer to the event information structure + + @see + @return Result of the function call +*/ +WDI_Status +WDI_ProcessTXFailMonitor +( + WDI_ControlBlockType* pWDICtx, + WDI_EventInfoType* pEventData +); +#endif /* FEATURE_CESIUM_PROPRIETARY */ + /*======================================================================== Main DAL Control Path Response Processing API ========================================================================*/ @@ -3387,6 +3691,23 @@ WDI_ProcessSetMaxTxPowerRsp */ WDI_Status WDI_ProcessSetTxPowerRsp +( + WDI_ControlBlockType* pWDICtx, + WDI_EventInfoType* pEventData +); + + /** + @brief Process TDLS Link Establish Req Rsp function (called when a response + is being received over the bus from HAL) + + @param pWDICtx: pointer to the WLAN DAL context + pEventData: pointer to the event information structure + + @see + @return Result of the function call +*/ +WDI_Status +WDI_ProcessLinkEstablishReqRsp ( WDI_ControlBlockType* pWDICtx, WDI_EventInfoType* pEventData @@ -4054,6 +4375,42 @@ WDI_ProcessTxCompleteInd WDI_EventInfoType* pEventData ); +/** +*@brief Process Tdls Indication function (called when + an indication of this kind is being received over the + bus from HAL) + + @param pWDICtx: pointer to the WLAN DAL context + pEventData: pointer to the event information structure + + @see + @return Result of the function call +*/ +WDI_Status +WDI_ProcessTdlsInd +( + WDI_ControlBlockType* pWDICtx, + WDI_EventInfoType* pEventData +); + +#ifdef FEATURE_CESIUM_PROPRIETARY +/** +*@brief Process Tx Fail Indication + + @param pWDICtx: pointer to the WLAN DAL context + pEventData: pointer to the event information structure + + @see + @return Result of the function call +*/ +WDI_Status +WDI_ProcessTXFailInd +( + WDI_ControlBlockType* pWDICtx, + WDI_EventInfoType* pEventData +); +#endif /* FEATURE_CESIUM_PROPRIETARY */ + /** *@brief Process Noa Start Indication function (called when an indication of this kind is being received over the @@ -4108,6 +4465,42 @@ WDI_ProcessTxPerHitInd WDI_EventInfoType* pEventData ); +#ifdef FEATURE_WLAN_LPHB +/** + @brief WDI_ProcessLphbInd - + This function will be invoked when FW detects low power + heart beat failure + + @param pWDICtx : wdi context + pEventData : indication data + + @see + @return Result of the function call +*/ +WDI_Status +WDI_ProcessLphbInd +( + WDI_ControlBlockType* pWDICtx, + WDI_EventInfoType* pEventData +); +#endif /* FEATURE_WLAN_LPHB */ + +/** + @brief Process Periodic Tx Pattern Fw Indication function + + @param pWDICtx: pointer to the WLAN DAL context + pEventData: pointer to the event information structure + + @see + @return Result of the function call +*/ +WDI_Status +WDI_ProcessPeriodicTxPtrnFwInd +( + WDI_ControlBlockType* pWDICtx, + WDI_EventInfoType* pEventData +); + #ifdef WLAN_FEATURE_VOWIFI_11R /** @brief Process Aggrgated Add TSpec Request function (called when Main FSM @@ -4211,6 +4604,26 @@ WDI_ProcessHALDumpCmdRsp WDI_ControlBlockType* pWDICtx, WDI_EventInfoType* pEventData ); + +/** + @brief WDI_ProcessIbssPeerInactivityInd + Process peer inactivity indication coming from HAL. + + @param pWDICtx: pointer to the WLAN DAL context + pEventData: pointer to the event information structure + + @see + @return Result of the function call +*/ +WDI_Status +WDI_ProcessIbssPeerInactivityInd + +( + WDI_ControlBlockType* pWDICtx, + WDI_EventInfoType* pEventData +); + + /*======================================================================== Internal Helper Routines ========================================================================*/ @@ -4871,7 +5284,7 @@ WDI_ProcessUpdateScanParamsRsp @return Result of the function call */ WDI_Status -WDI_ProcessStartRoamCandidatelookupReq +WDI_ProcessRoamScanOffloadReq ( WDI_ControlBlockType* pWDICtx, WDI_EventInfoType* pEventData @@ -4887,7 +5300,7 @@ WDI_ProcessStartRoamCandidatelookupReq @return Result of the function call */ WDI_Status -WDI_ProcessStartRoamCandidatelookupRsp +WDI_ProcessRoamScanOffloadRsp ( WDI_ControlBlockType* pWDICtx, WDI_EventInfoType* pEventData @@ -5165,5 +5578,230 @@ WDI_wdiEdTypeEncToEdTypeEnc ); #endif +#ifdef FEATURE_WLAN_LPHB +/** + @brief WDI_ProcessLphbCfgRsp - + LPHB configuration response from FW + + @param pWDICtx : wdi context + pEventData : indication data + + @see + @return Result of the function call +*/ +WDI_Status WDI_ProcessLphbCfgRsp +( + WDI_ControlBlockType* pWDICtx, + WDI_EventInfoType* pEventData +); +#endif /* FEATURE_WLAN_LPHB */ + +/** + @brief Process Rate Update Indication and post it to HAL + + @param pWDICtx: pointer to the WLAN DAL context + pEventData: pointer to the event information structure + + @see + @return Result of the function call +*/ +WDI_Status +WDI_ProcessRateUpdateInd +( + WDI_ControlBlockType* pWDICtx, + WDI_EventInfoType* pEventData +); + +#if defined WLAN_FEATURE_RELIABLE_MCAST +/** + @brief Process LBP Leader Request and post it to HAL + + @param pWDICtx: pointer to the WLAN DAL context + pEventData: pointer to the event information structure +*/ +WDI_Status +WDI_ProcessLBPLeaderReq +( + WDI_ControlBlockType* pWDICtx, + WDI_EventInfoType* pEventData +); + +/** +*@brief Process Leader Selection response where the firmware + provides a list of candidates that can be used as leaders + a.k.a. a receiver that can ACK multicast frames + + @param pWDICtx: pointer to the WLAN DAL context + pEventData: pointer to the event information structure + + @see + @return Result of the function call +*/ +WDI_Status +WDI_ProcessLBPLeaderResp +( + WDI_ControlBlockType* pWDICtx, + WDI_EventInfoType* pEventData +); + +/** + @brief Process LBP Update Indication and post it to HAL + + @param pWDICtx: pointer to the WLAN DAL context + pEventData: pointer to the event information structure + + @see + @return Result of the function call +*/ +WDI_Status +WDI_ProcessLBPUpdateInd +( + WDI_ControlBlockType* pWDICtx, + WDI_EventInfoType* pEventData +); + +/** + @brief WDI_LbpUpdateInd will be called when the upper MAC + requests the device to enable LBP reliable multicast. + + In state BUSY this request will be queued. Request won't + be allowed in any other state. + + + @param wdiLbpUpdateIndParams: + + + @see WDI_Start + @return Result of the function call +*/ +WDI_Status +WDI_LbpUpdateInd +( + WDI_LbpUpdateIndParams *wdiLbpUpdateIndParams +); + +/** +*@brief Process Leader Selection response where the firmware + provides a list of candidates that can be used as leaders + a.k.a. a receiver that can ACK multicast frames + + @param pWDICtx: pointer to the WLAN DAL context + pEventData: pointer to the event information structure + + @see + @return Result of the function call +*/ +WDI_Status +WDI_ProcessLBPLeaderResp +( + WDI_ControlBlockType* pWDICtx, + WDI_EventInfoType* pEventData +); + +/** +*@brief Process Update Indication where the firmware + provides a list of candidates that can be used as leaders + a.k.a. a receiver that can ACK multicast frames + + @param pWDICtx: pointer to the WLAN DAL context + pEventData: pointer to the event information structure + + @see + @return Result of the function call +*/ +WDI_Status +WDI_ProcessLBPUpdateIndToHost +( + WDI_ControlBlockType* pWDICtx, + WDI_EventInfoType* pEventData +); +#endif /* WLAN_FEATURE_RELIABLE_MCAST */ + +#ifdef FEATURE_CESIUM_PROPRIETARY + +/** + @brief Process LBP Update Indication and post it to HAL + + @param pWDICtx: pointer to the WLAN DAL context + pEventData: pointer to the event information structure + + @see + @return Result of the function call +*/ +WDI_Status +WDI_ProcessIbssPeerInfoReq +( + WDI_ControlBlockType* pWDICtx, + WDI_EventInfoType* pEventData +); + +/** + @brief Process LBP Update Indication and post it to HAL + + @param pWDICtx: pointer to the WLAN DAL context + pEventData: pointer to the event information structure + + @see + @return Result of the function call +*/ +WDI_Status +WDI_ProcessIbssPeerInfoRsp +( + WDI_ControlBlockType* pWDICtx, + WDI_EventInfoType* pEventData +); + +/** + @brief Sends IBSS Route Table Update Indication to f/w + + @param pWDICtx: pointer to the WLAN DAL context + pEventData: pointer to the event information structure + + @see + @return Result of the function call +*/ +WDI_Status +WDI_ProcessIBSSRouteTableUpdateInd +( + WDI_ControlBlockType* pWDICtx, + WDI_EventInfoType* pEventData +); +#endif /* FEATURE_CESIUM_PROPRIETARY */ + +#ifdef FEATURE_WLAN_BATCH_SCAN +/** + @brief WDI_ProcessSetBatchScanRsp - + Process set batch scan response from FW + + @param pWDICtx : wdi context + pEventData : indication data + + @see + @return Result of the function call +*/ +WDI_Status WDI_ProcessSetBatchScanRsp +( + WDI_ControlBlockType* pWDICtx, + WDI_EventInfoType* pEventData +); + +/** + @brief Process batch scan response from FW + + @param pWDICtx: pointer to the WLAN DAL context + pEventData: pointer to the event information structure + + @see + @return Result of the function call +*/ +WDI_Status +WDI_ProcessBatchScanResultInd +( + WDI_ControlBlockType* pWDICtx, + WDI_EventInfoType* pEventData +); + +#endif /* FEATURE_WLAN_BATCH_SCAN */ + #endif /*WLAN_QCT_WDI_I_H*/ diff --git a/CORE/WDI/CP/src/wlan_qct_wdi.c b/CORE/WDI/CP/src/wlan_qct_wdi.c index dd65497f8538..146effa08dae 100644 --- a/CORE/WDI/CP/src/wlan_qct_wdi.c +++ b/CORE/WDI/CP/src/wlan_qct_wdi.c @@ -89,6 +89,7 @@ #include "wlan_hal_msg.h" #include "pttMsgApi.h" +#include "vos_trace.h" /*=========================================================================== WLAN DAL Control Path Internal Data Definitions and Declarations @@ -98,7 +99,6 @@ #define MAC_ADDR_ARRAY(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5] #define MAC_ADDRESS_STR "%02x:%02x:%02x:%02x:%02x:%02x" - #define FEATURE_NOT_SUPPORTED 127 #ifdef FEATURE_WLAN_SCAN_PNO @@ -115,25 +115,49 @@ static tWlanFeatCaps *gpFwWlanFeatCaps; static placeHolderInCapBitmap supportEnabledFeatures[] = {MCC, P2P, DOT11AC, SLM_SESSIONIZATION, DOT11AC_OPMODE #ifdef WLAN_SOFTAP_VSTA_FEATURE - ,SAP32STA + ,SAP32STA //5 #else ,FEATURE_NOT_SUPPORTED #endif #ifdef FEATURE_WLAN_TDLS - ,TDLS + ,TDLS //6 #else ,FEATURE_NOT_SUPPORTED #endif - ,P2P_GO_NOA_DECOUPLE_INIT_SCAN + ,P2P_GO_NOA_DECOUPLE_INIT_SCAN //7 #ifdef WLAN_ACTIVEMODE_OFFLOAD_FEATURE - ,WLANACTIVE_OFFLOAD + ,WLANACTIVE_OFFLOAD //8 #else ,FEATURE_NOT_SUPPORTED #endif + ,FEATURE_NOT_SUPPORTED //9 + ,FEATURE_NOT_SUPPORTED //10 + ,FEATURE_NOT_SUPPORTED //11 + ,FEATURE_NOT_SUPPORTED //12 + ,FEATURE_NOT_SUPPORTED //13 + ,FEATURE_NOT_SUPPORTED //14 + ,FEATURE_NOT_SUPPORTED //15 + ,FEATURE_NOT_SUPPORTED //16 + ,FEATURE_NOT_SUPPORTED //17 + ,FEATURE_NOT_SUPPORTED //18 + ,FEATURE_NOT_SUPPORTED //19 + ,FEATURE_NOT_SUPPORTED //20 + ,FEATURE_NOT_SUPPORTED //21 + ,WOW //22 #ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD - ,WLAN_ROAM_SCAN_OFFLOAD + ,WLAN_ROAM_SCAN_OFFLOAD //23 #else ,FEATURE_NOT_SUPPORTED +#endif + ,FEATURE_NOT_SUPPORTED //24 + ,FEATURE_NOT_SUPPORTED //25 + ,IBSS_HEARTBEAT_OFFLOAD //26 + ,FEATURE_NOT_SUPPORTED //27 + ,WLAN_PERIODIC_TX_PTRN //28 +#ifdef FEATURE_WLAN_TDLS + ,ADVANCE_TDLS //29 +#else + ,FEATURE_NOT_SUPPORTED //29 #endif }; @@ -342,19 +366,75 @@ WDI_ReqProcFuncType pfnReqProcTbl[WDI_MAX_UMAC_IND] = #endif WDI_ProcessSetTxPowerReq, /* WDI_SET_TX_POWER_REQ*/ #ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD - WDI_ProcessStartRoamCandidatelookupReq, /* WDI_START_ROAM_CANDIDATE_LOOKUP_REQ */ + WDI_ProcessRoamScanOffloadReq, /* WDI_ROAM_SCAN_OFFLOAD_REQ */ #else NULL, #endif /* WLAN_FEATURE_ROAM_SCAN_OFFLOAD */ +#ifdef FEATURE_WLAN_TDLS + WDI_ProcessTdlsLinkEstablishReq, /* WDI_TDLS_LINK_ESTABLISH_REQ */ +#else + NULL, +#endif +#ifdef FEATURE_WLAN_LPHB + WDI_ProcessLPHBConfReq, /* WDI_LPHB_CFG_REQ */ +#else + NULL, +#endif /* FEATURE_WLAN_LPHB */ +#if defined WLAN_FEATURE_RELIABLE_MCAST + WDI_ProcessLBPLeaderReq, /* WDI_LBP_LEADER_REQ */ +#else + NULL, +#endif /* WLAN_FEATURE_RELIABLE_MCAST */ + +#ifdef FEATURE_CESIUM_PROPRIETARY + WDI_ProcessIbssPeerInfoReq, /* WDI_HAL_IBSS_PEER_INFO_REQ */ +#else + NULL, +#endif /* FEATURE_CESIUM_PROPRIETARY */ + +#ifdef FEATURE_WLAN_BATCH_SCAN + WDI_ProcessSetBatchScanReq, /* WDI_SET_BATCH_SCAN_REQ */ +#else + NULL, +#endif /* FEATURE_WLAN_BATCH_SCAN */ + + WDI_ProcessSetMaxTxPowerPerBandReq, /* WDI_SET_MAX_TX_POWER_PER_BAND_REQ*/ /*------------------------------------------------------------------------- Indications -------------------------------------------------------------------------*/ WDI_ProcessHostSuspendInd, /* WDI_HOST_SUSPEND_IND*/ WDI_ProcessTrafficStatsInd, /* WDI_TRAFFIC_STATS_IND*/ + WDI_ProcessDHCPStartInd, /* WDI_DHCP_START_IND*/ + WDI_ProcessDHCPStopInd, /* WDI_DHCP_STOP_IND*/ #ifdef WLAN_FEATURE_11W WDI_ProcessExcludeUnencryptInd, /* WDI_EXCLUDE_UNENCRYPTED_IND */ #else NULL, +#endif + WDI_ProcessAddPeriodicTxPtrnInd, /* WDI_ADD_PERIODIC_TX_PATTERN_IND */ + WDI_ProcessDelPeriodicTxPtrnInd, /* WDI_DEL_PERIODIC_TX_PATTERN_IND */ +#if defined WLAN_FEATURE_RELIABLE_MCAST + WDI_ProcessLBPUpdateInd, /* WDI_LBP_UPDATE_IND */ +#else + NULL, +#endif /* WLAN_FEATURE_RELIABLE_MCAST */ + WDI_ProcessRateUpdateInd, /* WDI_RATE_UPDATE_IND */ +#ifdef FEATURE_WLAN_BATCH_SCAN + WDI_ProcessStopBatchScanInd, /* WDI_STOP_BATCH_SCAN_IND */ + WDI_ProcessTriggerBatchScanResultInd, /* WDI_TRIGGER_BATCH_SCAN_RESULT_IND */ +#else + NULL, + NULL, +#endif /* FEATURE_WLAN_BATCH_SCAN */ +#ifdef FEATURE_CESIUM_PROPRIETARY + WDI_ProcessIBSSRouteTableUpdateInd, /* WDI_IBSS_ROUTE_TABLE_UPDATE_IND */ +#else + NULL, +#endif /* FEATURE_CESIUM_PROPRIETARY */ +#ifdef FEATURE_CESIUM_PROPRIETARY + WDI_ProcessTXFailMonitor, +#else + NULL, #endif }; @@ -525,10 +605,36 @@ WDI_RspProcFuncType pfnRspProcTbl[WDI_MAX_RESP] = #endif WDI_ProcessSetTxPowerRsp, /* WDI_SET_TX_POWER_RESP */ #ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD - WDI_ProcessStartRoamCandidatelookupRsp, /* WDI_START_ROAM_CANDIDATE_LOOKUP_RESP */ + WDI_ProcessRoamScanOffloadRsp, /* WDI_ROAM_SCAN_OFFLOAD_RESP */ #else NULL, #endif +#ifdef FEATURE_WLAN_TDLS + WDI_ProcessLinkEstablishReqRsp, /*WDI_TDLS_LINK_ESTABLISH_REQ_RESP*/ +#else + NULL, +#endif +#ifdef FEATURE_WLAN_LPHB + WDI_ProcessLphbCfgRsp, /* WDI_LPHB_CFG_RESP */ +#else + NULL, +#endif /* FEATURE_WLAN_LPHB */ +#if defined WLAN_FEATURE_RELIABLE_MCAST + WDI_ProcessLBPLeaderResp, /* WDI_LBP_LEADER_RESP */ +#else + NULL, +#endif /* WLAN_FEATURE_RELIABLE_MCAST */ + +#ifdef FEATURE_CESIUM_PROPRIETARY + WDI_ProcessIbssPeerInfoRsp, /* WDI_HAL_GET_IBSS_PEER_INFO_RSP */ +#endif /* FEATURE_CESIUM_PROPRIETARY */ + +#ifdef FEATURE_WLAN_BATCH_SCAN + WDI_ProcessSetBatchScanRsp, /* WDI_SET_BATCH_SCAN_RESP */ +#else + NULL, +#endif /*FEATURE_WLAN_BATCH_SCAN*/ + /*--------------------------------------------------------------------- Indications ---------------------------------------------------------------------*/ @@ -560,6 +666,39 @@ WDI_RspProcFuncType pfnRspProcTbl[WDI_MAX_RESP] = WDI_ProcessTxPerHitInd, /* WDI_HAL_TX_PER_HIT_IND */ WDI_ProcessP2pNoaStartInd, /* WDI_NOA_START_IND */ +#ifdef FEATURE_WLAN_TDLS + WDI_ProcessTdlsInd, /* WDI_HAL_TDLS_IND */ +#else + NULL, +#endif + +#ifdef FEATURE_WLAN_LPHB + WDI_ProcessLphbInd, /* WDI_HAL_LPHB_IND */ +#else + NULL, +#endif /* FEATURE_WLAN_LPHB */ + + WDI_ProcessIbssPeerInactivityInd, /* WDI_HAL_IBSS_PEER_INACTIVITY_IND */ + + WDI_ProcessPeriodicTxPtrnFwInd, /* WDI_HAL_PERIODIC_TX_PTRN_FW_IND */ + +#if defined WLAN_FEATURE_RELIABLE_MCAST + WDI_ProcessLBPUpdateIndToHost, /* WDI_LBP_UPDATE_IND_TO_HOST */ +#else + NULL, +#endif /* WLAN_FEATURE_RELIABLE_MCAST */ + +#ifdef FEATURE_WLAN_BATCH_SCAN + WDI_ProcessBatchScanResultInd, /* WDI_BATCHSCAN_RESULT_IND */ +#else + NULL, +#endif + +#ifdef FEATURE_CESIUM_PROPRIETARY + WDI_ProcessTXFailInd, /*WDI_HAL_TX_FAIL_IND*/ +#else + NULL, +#endif /* FEATURE_CESIUM_PROPRIETARY */ }; @@ -815,7 +954,11 @@ static char *WDI_getReqMsgString(wpt_uint16 wdiReqMsgId) CASE_RETURN_STRING( WDI_SET_STA_BCAST_KEY_REQ ); CASE_RETURN_STRING( WDI_RMV_STA_BCAST_KEY_REQ ); CASE_RETURN_STRING( WDI_SET_MAX_TX_POWER_REQ ); + CASE_RETURN_STRING( WDI_SET_MAX_TX_POWER_PER_BAND_REQ ); CASE_RETURN_STRING( WDI_P2P_GO_NOTICE_OF_ABSENCE_REQ ); +#ifdef FEATURE_WLAN_TDLS + CASE_RETURN_STRING( WDI_TDLS_LINK_ESTABLISH_REQ ); +#endif CASE_RETURN_STRING( WDI_ENTER_IMPS_REQ ); CASE_RETURN_STRING( WDI_EXIT_IMPS_REQ ); CASE_RETURN_STRING( WDI_ENTER_BMPS_REQ ); @@ -850,7 +993,7 @@ static char *WDI_getReqMsgString(wpt_uint16 wdiReqMsgId) CASE_RETURN_STRING( WDI_UPDATE_SCAN_PARAMS_REQ ); #endif #ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD - CASE_RETURN_STRING( WDI_START_ROAM_CANDIDATE_LOOKUP_REQ ); + CASE_RETURN_STRING( WDI_ROAM_SCAN_OFFLOAD_REQ ); #endif CASE_RETURN_STRING( WDI_SET_TX_PER_TRACKING_REQ ); CASE_RETURN_STRING( WDI_8023_MULTICAST_LIST_REQ ); @@ -866,6 +1009,14 @@ static char *WDI_getReqMsgString(wpt_uint16 wdiReqMsgId) #ifdef WLAN_FEATURE_11W CASE_RETURN_STRING( WDI_EXCLUDE_UNENCRYPTED_IND ); #endif +#ifdef FEATURE_WLAN_BATCH_SCAN + CASE_RETURN_STRING( WDI_SET_BATCH_SCAN_REQ); + CASE_RETURN_STRING( WDI_STOP_BATCH_SCAN_IND ); + CASE_RETURN_STRING( WDI_TRIGGER_BATCH_SCAN_RESULT_IND); +#endif +#ifdef FEATURE_CESIUM_PROPRIETARY + CASE_RETURN_STRING( WDI_TX_FAIL_MONITOR_IND ); +#endif /* FEATURE_CESIUM_PROPRIETARY */ default: return "Unknown WDI MessageId"; } @@ -920,6 +1071,10 @@ static char *WDI_getRespMsgString(wpt_uint16 wdiRespMsgId) CASE_RETURN_STRING( WDI_RMV_STA_BCAST_KEY_RESP ); CASE_RETURN_STRING( WDI_SET_MAX_TX_POWER_RESP ); CASE_RETURN_STRING( WDI_P2P_GO_NOTICE_OF_ABSENCE_RESP ); +#ifdef FEATURE_WLAN_TDLS + CASE_RETURN_STRING( WDI_TDLS_LINK_ESTABLISH_REQ_RESP ); + CASE_RETURN_STRING( WDI_HAL_TDLS_IND ); +#endif CASE_RETURN_STRING( WDI_ENTER_IMPS_RESP ); CASE_RETURN_STRING( WDI_EXIT_IMPS_RESP ); CASE_RETURN_STRING( WDI_ENTER_BMPS_RESP ); @@ -954,7 +1109,7 @@ static char *WDI_getRespMsgString(wpt_uint16 wdiRespMsgId) CASE_RETURN_STRING( WDI_UPDATE_SCAN_PARAMS_RESP ); #endif #ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD - CASE_RETURN_STRING( WDI_START_ROAM_CANDIDATE_LOOKUP_RESP ); + CASE_RETURN_STRING( WDI_ROAM_SCAN_OFFLOAD_RESP ); #endif CASE_RETURN_STRING( WDI_SET_TX_PER_TRACKING_RESP ); CASE_RETURN_STRING( WDI_8023_MULTICAST_LIST_RESP ); @@ -965,11 +1120,117 @@ static char *WDI_getRespMsgString(wpt_uint16 wdiRespMsgId) CASE_RETURN_STRING( WDI_SHUTDOWN_RESP ); CASE_RETURN_STRING( WDI_SET_POWER_PARAMS_RESP ); CASE_RETURN_STRING( WDI_GET_ROAM_RSSI_RESP ); +#if defined WLAN_FEATURE_RELIABLE_MCAST + CASE_RETURN_STRING( WDI_LBP_LEADER_RESP ); + CASE_RETURN_STRING( WDI_LBP_UPDATE_IND_TO_HOST ); +#endif /* WLAN_FEATURE_RELIABLE_MCAST */ + +#ifdef FEATURE_CESIUM_PROPRIETARY + CASE_RETURN_STRING( WDI_HAL_IBSS_PEER_INFO_RSP ); +#endif /* FEATURE_CESIUM_PROPRIETARY */ +#ifdef FEATURE_WLAN_BATCH_SCAN + CASE_RETURN_STRING( WDI_SET_BATCH_SCAN_RESP); +#endif default: return "Unknown WDI MessageId"; } } +/** + @brief WDI_TraceHostFWCapabilities - Parses both host and Firmware + Capability bitmap array. + @param capabilityBitmap - Base address of Bitmap array + @see + @returns None + */ +void WDI_TraceHostFWCapabilities(tANI_U32 *capabilityBitmap) +{ + int i; + char capStr[512]; + char *pCapStr = capStr; + for (i = 0; i < 32; i++) { + if ((*(capabilityBitmap + 0) & (1 << i))) { + switch(i) { + case MCC: snprintf(pCapStr, sizeof("MCC"), "%s", "MCC"); + pCapStr += strlen("MCC"); + break; + case P2P: snprintf(pCapStr, sizeof("P2P"), "%s", "P2P"); + pCapStr += strlen("P2P"); + break; + case DOT11AC: snprintf(pCapStr, sizeof("DOT11AC") , "%s", "DOT11AC"); + pCapStr += strlen("DOT11AC"); + break; + case SLM_SESSIONIZATION: snprintf(pCapStr, sizeof("SLM_SESSIONIZATION"), "%s", "SLM_SESSIONIZATION"); + pCapStr += strlen("SLM_SESSIONIZATION"); + break; + case DOT11AC_OPMODE: snprintf(pCapStr, sizeof("DOT11AC_OPMODE"), "%s", "DOT11AC_OPMODE"); + pCapStr += strlen("DOT11AC_OPMODE"); + break; + case SAP32STA: snprintf(pCapStr, sizeof("SAP32STA"), "%s", "SAP32STA"); + pCapStr += strlen("SAP32STA"); + break; + case TDLS: snprintf(pCapStr, sizeof("TDLS"), "%s", "TDLS"); + pCapStr += strlen("TDLS"); + break; + case P2P_GO_NOA_DECOUPLE_INIT_SCAN: snprintf(pCapStr, sizeof("P2P_GO_NOA_DECOUPLE_INIT_SCAN"), "%s", "P2P_GO_NOA_DECOUPLE_INIT_SCAN"); + pCapStr += strlen("P2P_GO_NOA_DECOUPLE_INIT_SCAN"); + break; + case WLANACTIVE_OFFLOAD: snprintf(pCapStr, sizeof("WLANACTIVE_OFFLOAD"), "%s", "WLANACTIVE_OFFLOAD"); + pCapStr += strlen("WLANACTIVE_OFFLOAD"); + break; + case BEACON_OFFLOAD: snprintf(pCapStr, sizeof("BEACON_OFFLOAD"), "%s","BEACON_OFFLOAD"); + pCapStr += strlen("BEACON_OFFLOAD"); + break; + case SCAN_OFFLOAD: snprintf(pCapStr, sizeof("SCAN_OFFLOAD"), "%s", "SCAN_OFFLOAD"); + pCapStr += strlen("SCAN_OFFLOAD"); + break; + case ROAM_OFFLOAD: snprintf(pCapStr, sizeof("ROAM_OFFLOAD"), "%s", "ROAM_OFFLOAD"); + pCapStr += strlen("ROAM_OFFLOAD"); + break; + case BCN_MISS_OFFLOAD: snprintf(pCapStr, sizeof("BCN_MISS_OFFLOAD"), "%s", "BCN_MISS_OFFLOAD"); + pCapStr += strlen("BCN_MISS_OFFLOAD"); + break; + case STA_POWERSAVE: snprintf(pCapStr, sizeof("STA_POWERSAVE"), "%s", "STA_POWERSAVE"); + pCapStr += strlen("STA_POWERSAVE"); + break; + case AP_UAPSD: snprintf(pCapStr, sizeof("AP_UAPSD"), "%s", "AP_UAPSD"); + pCapStr += strlen("AP_UAPSD"); + break; + case AP_DFS: snprintf(pCapStr, sizeof("AP_DFS"), "%s", "AP_DFS"); + pCapStr += strlen("AP_DFS"); + break; + case BLOCKACK: snprintf(pCapStr, sizeof("BLOCKACK"), "%s", "BLOCKACK"); + pCapStr += strlen("BLOCKACK"); + break; + case PHY_ERR: snprintf(pCapStr, sizeof("PHY_ERR"), "%s", "PHY_ERR"); + pCapStr += strlen("PHY_ERR"); + break; + case BCN_FILTER: snprintf(pCapStr, sizeof("BCN_FILTER"), "%s", "BCN_FILTER"); + pCapStr += strlen("BCN_FILTER"); + break; + case RTT: snprintf(pCapStr, sizeof("RTT"), "%s", "RTT"); + pCapStr += strlen("RTT"); + break; + case RATECTRL: snprintf(pCapStr, sizeof("RATECTRL"), "%s", "RATECTRL"); + pCapStr += strlen("RATECTRL"); + break; + case WOW: snprintf(pCapStr, sizeof("WOW"), "%s", "WOW"); + pCapStr += strlen("WOW"); + break; + case WLAN_ROAM_SCAN_OFFLOAD: snprintf(pCapStr, sizeof("WLAN_ROAM_SCAN_OFFLOAD"), "%s", "WLAN_ROAM_SCAN_OFFLOAD"); + pCapStr += strlen("WLAN_ROAM_SCAN_OFFLOAD"); + break; + } + *pCapStr++ = ','; + *pCapStr++ = ' '; + } + } + pCapStr -= 2; + *pCapStr = '\0'; + pCapStr = capStr; + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, "\t\t%s", pCapStr); +} + /** @brief WDI_getHALStatusMsgString prints the HAL status in string. @@ -2715,6 +2976,55 @@ WDI_SetMaxTxPowerReq return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData); } +/** + @brief WDI_SetMaxTxPowerPerBandReq will be called when the upper + MAC wants to set Max Tx Power to HW for specific band. + + @param pwdiSetMaxTxPowerPerBandParams: Tx Power Information + + wdiReqStatusCb: callback for passing back the + response msg from the device + + pUserData: user data will be passed back with the + callback + + @see WDI_SetMaxTxPowerPerBandReq + @return Result of the function call +*/ +WDI_Status +WDI_SetMaxTxPowerPerBandReq +( + WDI_SetMaxTxPowerPerBandParamsType* pwdiSetMaxTxPowerPerBandParams, + WDA_SetMaxTxPowerPerBandRspCb wdiReqStatusCb, + void* pUserData +) +{ + WDI_EventInfoType wdiEventData; + /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + + /*------------------------------------------------------------------------ + Sanity Check + ------------------------------------------------------------------------*/ + if ( eWLAN_PAL_FALSE == gWDIInitialized ) + { + WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, + "WDI API call before module is initialized - Fail request"); + + return WDI_STATUS_E_NOT_ALLOWED; + } + + /*------------------------------------------------------------------------ + Fill in Event data and post to the Main FSM + ------------------------------------------------------------------------*/ + wdiEventData.wdiRequest = WDI_SET_MAX_TX_POWER_PER_BAND_REQ; + wdiEventData.pEventData = pwdiSetMaxTxPowerPerBandParams; + wdiEventData.uEventDataSize = sizeof(*pwdiSetMaxTxPowerPerBandParams); + wdiEventData.pCBfnc = wdiReqStatusCb; + wdiEventData.pUserData = pUserData; + + return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData); +} + /** @brief WDI_SetTxPowerReq will be called when the upper MAC wants to set Tx Power to HW. @@ -5258,6 +5568,67 @@ WDI_SetP2PGONOAReq }/*WDI_SetP2PGONOAReq*/ +#ifdef FEATURE_WLAN_TDLS +/** + @brief WDI_SetTDLSLinkEstablishReq will be called when the + upper MAC wants to send TDLS Link Establish Request Parameters + Upon the call of this API the WLAN DAL will + pack and send the TDLS Link Establish Request message to the + lower RIVA sub-system if DAL is in state STARTED. + + In state BUSY this request will be queued. Request won't + be allowed in any other state. + + + @param pwdiTDLSLinkEstablishReqParams: TDLS Peer Parameters + for Link Establishment (Used for PUAPSD , TDLS Off Channel ...) + + wdiTDLSLinkEstablishReqRspCb: callback for passing back the + response of the TDLS Link Establish request received + from the device + + pUserData: user data will be passed back with the + callback + + @see + @return Result of the function call +*/ +WDI_Status +WDI_SetTDLSLinkEstablishReq +( + WDI_SetTDLSLinkEstablishReqParamsType* pwdiTDLSLinkEstablishReqParams, + WDI_SetTDLSLinkEstablishReqParamsRspCb wdiTDLSLinkEstablishReqRspCb, + void* pUserData +) +{ + WDI_EventInfoType wdiEventData; + /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + + /*------------------------------------------------------------------------ + Sanity Check + ------------------------------------------------------------------------*/ + if ( eWLAN_PAL_FALSE == gWDIInitialized ) + { + WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, + "WDI API call before module is initialized - Fail request"); + + return WDI_STATUS_E_NOT_ALLOWED; + } + + /*------------------------------------------------------------------------ + Fill in Event data and post to the Main FSM + ------------------------------------------------------------------------*/ + wdiEventData.wdiRequest = WDI_TDLS_LINK_ESTABLISH_REQ; + wdiEventData.pEventData = pwdiTDLSLinkEstablishReqParams; + wdiEventData.uEventDataSize = sizeof(*pwdiTDLSLinkEstablishReqParams); + wdiEventData.pCBfnc = wdiTDLSLinkEstablishReqRspCb; + wdiEventData.pUserData = pUserData; + + return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData); + +}/*WDI_SetTDLSLinkEstablishReq*/ +#endif + /** @brief WDI_AddSTASelfReq will be called when the UMAC wanted to add STA self while opening any new session @@ -5768,6 +6139,86 @@ WDI_ExcludeUnencryptedInd }/*WDI_TrafficStatsInd*/ #endif +/** + @brief WDI_AddPeriodicTxPtrnInd: Add Periodic TX Pattern Indication to FW + + @param addPeriodicTxPtrnParams: Add Pattern parameters + + @see + + @return Status of the request +*/ +WDI_Status +WDI_AddPeriodicTxPtrnInd +( + WDI_AddPeriodicTxPtrnParamsType* addPeriodicTxPtrnParams +) +{ + WDI_EventInfoType wdiEventData; + + /*------------------------------------------------------------------------- + Sanity Check + ------------------------------------------------------------------------*/ + if (eWLAN_PAL_FALSE == gWDIInitialized) + { + WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, + "WDI API call before module is initialized - Fail request!"); + + return WDI_STATUS_E_NOT_ALLOWED; + } + + /*------------------------------------------------------------------------- + Fill in Event data and post to the Main FSM + ------------------------------------------------------------------------*/ + wdiEventData.wdiRequest = WDI_ADD_PERIODIC_TX_PATTERN_IND; + wdiEventData.pEventData = addPeriodicTxPtrnParams; + wdiEventData.uEventDataSize = sizeof(WDI_AddPeriodicTxPtrnParamsType); + wdiEventData.pCBfnc = NULL; + wdiEventData.pUserData = NULL; + + return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData); +} + +/** + @brief WDI_DelPeriodicTxPtrnInd: Delete Periodic TX Pattern Indication to FW + + @param delPeriodicTxPtrnParams: Delete Pattern parameters + + @see + + @return Status of the request +*/ +WDI_Status +WDI_DelPeriodicTxPtrnInd +( + WDI_DelPeriodicTxPtrnParamsType* delPeriodicTxPtrnParams +) +{ + WDI_EventInfoType wdiEventData; + + /*------------------------------------------------------------------------- + Sanity Check + ------------------------------------------------------------------------*/ + if (eWLAN_PAL_FALSE == gWDIInitialized) + { + WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, + "WDI API call before module is initialized - Fail request!"); + + return WDI_STATUS_E_NOT_ALLOWED; + } + + /*------------------------------------------------------------------------- + Fill in Event data and post to the Main FSM + ------------------------------------------------------------------------*/ + wdiEventData.wdiRequest = WDI_DEL_PERIODIC_TX_PATTERN_IND; + wdiEventData.pEventData = delPeriodicTxPtrnParams; + wdiEventData.uEventDataSize = sizeof(WDI_DelPeriodicTxPtrnParamsType); + wdiEventData.pCBfnc = NULL; + wdiEventData.pUserData = NULL; + + return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData); +} + /** @brief WDI_HALDumpCmdReq Post HAL DUMP Command Event @@ -5959,7 +6410,7 @@ WDI_MainStart if (( NULL == pWDICtx ) || ( NULL == pEventData )) { WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Invalid parameters on Main Start %x %x", + "Invalid parameters on Main Start Started %p %p", pWDICtx, pEventData); return WDI_STATUS_E_FAILURE; } @@ -6038,7 +6489,7 @@ WDI_MainClose if (( NULL == pWDICtx ) || ( NULL == pEventData )) { WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Invalid parameters on Main Close %x %x", + "Invalid parameters on Main Close %p %p", pWDICtx, pEventData); return WDI_STATUS_E_FAILURE; } @@ -6076,7 +6527,7 @@ WDI_MainStartStarted if (( NULL == pWDICtx ) || ( NULL == pEventData )) { WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Invalid parameters on Main Start %x %x", + "Invalid parameters on Main Start %p %p", pWDICtx, pEventData); return WDI_STATUS_E_FAILURE; } @@ -6132,7 +6583,7 @@ WDI_MainStopStarted if (( NULL == pWDICtx ) || ( NULL == pEventData )) { WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, - "Invalid parameters on Main Start %x %x", + "Invalid parameters on Main Stop Started %p %p", pWDICtx, pEventData); return WDI_STATUS_E_FAILURE; } @@ -6171,7 +6622,7 @@ WDI_MainReqStarted if (( NULL == pWDICtx ) || ( NULL == pEventData )) { WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Invalid parameters on Main Req Started %x %x", + "Invalid parameters on Main Req Started %p %p", pWDICtx, pEventData); return WDI_STATUS_E_FAILURE; } @@ -6210,7 +6661,7 @@ WDI_MainRsp if (( NULL == pWDICtx ) || ( NULL == pEventData )) { WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Invalid parameters on Main Response %x %x", + "Invalid parameters on Main Response %p %p", pWDICtx, pEventData); return WDI_STATUS_E_FAILURE; } @@ -6289,7 +6740,7 @@ WDI_MainStopStopped if (( NULL == pWDICtx ) || ( NULL == pEventData )) { WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, - "Invalid parameters on Main Stop Stopped %x %x", + "Invalid parameters on Main Stop Stopped %p %p", pWDICtx, pEventData); return WDI_STATUS_E_FAILURE; } @@ -6333,7 +6784,7 @@ WDI_MainStartBusy if (( NULL == pWDICtx ) || ( NULL == pEventData )) { WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Invalid parameters on Main Start in BUSY %x %x", + "Invalid parameters on Main Start in BUSY %p %p", pWDICtx, pEventData); return WDI_STATUS_E_FAILURE; } @@ -6374,7 +6825,7 @@ WDI_MainStopBusy if (( NULL == pWDICtx ) || ( NULL == pEventData )) { WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Invalid parameters on Main Stop in BUSY %x %x", + "Invalid parameters on Main Stop in BUSY %p %p", pWDICtx, pEventData); return WDI_STATUS_E_FAILURE; } @@ -6413,7 +6864,7 @@ WDI_MainReqBusy if (( NULL == pWDICtx ) || ( NULL == pEventData )) { WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Invalid parameters on Main Request in BUSY %x %x", + "Invalid parameters on Main Request in BUSY %p %p", pWDICtx, pEventData); return WDI_STATUS_E_FAILURE; } @@ -6452,7 +6903,7 @@ WDI_MainCloseBusy if (( NULL == pWDICtx ) || ( NULL == pEventData )) { WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Invalid parameters on Main Close in BUSY %x %x", + "Invalid parameters on Main Close in BUSY %p %p", pWDICtx, pEventData); return WDI_STATUS_E_FAILURE; } @@ -6491,7 +6942,7 @@ WDI_MainShutdown if (( NULL == pWDICtx ) || ( NULL == pEventData )) { WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, - "Invalid parameters on Main Start %x %x", + "Invalid parameters on Main Start %p %p", pWDICtx, pEventData); return WDI_STATUS_E_FAILURE; } @@ -6530,7 +6981,7 @@ WDI_MainShutdownBusy if (( NULL == pWDICtx ) || ( NULL == pEventData )) { WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, - "Invalid parameters on Main Start %x %x", + "Invalid parameters on Main Start %p %p", pWDICtx, pEventData); return WDI_STATUS_E_FAILURE; } @@ -6609,7 +7060,7 @@ WDI_ProcessStartReq ( usSendSize < (usDataOffset + usLen ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL, - "Unable to get send buffer in start req %x %x %x", + "Unable to get send buffer in start req %p %p %p", pEventData, pwdiStartParams, wdiStartRspCb); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -6698,7 +7149,7 @@ WDI_ProcessStopReq ( usSendSize < (usDataOffset + sizeof(halStopReq.stopReqParams) ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in stop req %x %x %x", + "Unable to get send buffer in stop req %p %p %p", pEventData, pwdiStopParams, wdiStopRspCb); WDI_ASSERT(0); goto failRequest; @@ -6739,7 +7190,7 @@ WDI_ProcessStopReq if( eWLAN_PAL_STATUS_SUCCESS != status ) { WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL, - "WDTS_SetPowerState returned with status %d when trying to notify DTS that host is entering Power Down state\n", status); + "WDTS_SetPowerState returned with status %d when trying to notify DTS that host is entering Power Down state", status); WDI_ASSERT(0); goto fail; } @@ -6918,7 +7369,7 @@ WDI_ProcessInitScanReq ( usSendSize < (usDataOffset + sizeof(halInitScanConReqMsg.initScanParams) ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in init scan req %x %x %x", + "Unable to get send buffer in init scan req %p %p %p", pEventData, pwdiInitScanParams, wdiInitScanRspCb); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -6971,7 +7422,7 @@ WDI_ProcessInitScanReq ( usSendSize < (usDataOffset + sizeof(halInitScanReqMsg.initScanParams) ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in init scan req %x %x %x", + "Unable to get send buffer in init scan req %p %p %p", pEventData, pwdiInitScanParams, wdiInitScanRspCb); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -7094,7 +7545,7 @@ WDI_ProcessStartScanReq ( usSendSize < (usDataOffset + sizeof(halStartScanReqMsg.startScanParams) ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in start scan req %x %x %x", + "Unable to get send buffer in start scan req %p %p %p", pEventData, pwdiStartScanParams, wdiStartScanRspCb); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -7191,7 +7642,7 @@ WDI_ProcessEndScanReq ( usSendSize < (usDataOffset + sizeof(halEndScanReqMsg.endScanParams) ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in start scan req %x %x %x", + "Unable to get send buffer in start scan req %p %p %p", pEventData, pwdiEndScanParams, wdiEndScanRspCb); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -7292,7 +7743,7 @@ WDI_ProcessFinishScanReq if( eWLAN_PAL_STATUS_SUCCESS != wptStatus ) { WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL, - "WDTS_SetPowerState returned with status %d when trying to notify DTS that host is entering BMPS\n", wptStatus); + "WDTS_SetPowerState returned with status %d when trying to notify DTS that host is entering BMPS", wptStatus); WDI_ASSERT(0); } } @@ -7306,7 +7757,7 @@ WDI_ProcessFinishScanReq ( usSendSize < (usDataOffset + sizeof(halFinishScanReqMsg.finishScanParams) ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in start scan req %x %x %x", + "Unable to get send buffer in start scan req %p %p %p", pEventData, pwdiFinishScanParams, wdiFinishScanRspCb); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -7448,7 +7899,7 @@ WDI_ProcessBSSSessionJoinReq ( usSendSize < (usDataOffset + sizeof(halJoinReqMsg.joinReqParams) ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in join req %x %x %x", + "Unable to get send buffer in join req %p %p %p", pUserData, pwdiJoinParams, wdiJoinRspCb); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -7728,7 +8179,7 @@ WDI_ProcessConfigBSSReq ( usSendSize < (usDataOffset + uMsgSize ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in config bss req %x %x %x", + "Unable to get send buffer in config bss req %p %p %p", pEventData, pwdiConfigBSSParams, wdiConfigBSSRspCb); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -7895,7 +8346,7 @@ WDI_ProcessDelBSSReq ( usSendSize < (usDataOffset + sizeof(halBssReqMsg.deleteBssParams) ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in start req %x %x %x", + "Unable to get send buffer in start req %p %p %p", pEventData, pwdiDelBSSParams, wdiDelBSSRspCb); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -8047,7 +8498,7 @@ WDI_ProcessPostAssocReq ( usSendSize < (usDataOffset + uMsgSize ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in start req %x %x %x", + "Unable to get send buffer in start req %p %p %p", pEventData, pwdiPostAssocParams, wdiPostAssocRspCb); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -8064,7 +8515,9 @@ WDI_ProcessPostAssocReq (wpt_uint8*)&halPostAssocReqMsg.postAssocReqParams.configStaParams.staIdx )) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "This station does not exist in the WDI Station Table %d"); + MAC_ADDRESS_STR + ": This station does not exist in the WDI Station Table", + MAC_ADDR_ARRAY(pwdiPostAssocParams->wdiSTAParams.macSTA)); wpalMutexRelease(&pWDICtx->wptMutex); wpalMemoryFree(pSendBuffer); return WDI_STATUS_E_FAILURE; @@ -8085,7 +8538,9 @@ WDI_ProcessPostAssocReq (wpt_uint8*)&halPostAssocReqMsg.postAssocReqParams.configBssParams.staContext.staIdx)) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "This station does not exist in the WDI Station Table %d"); + MAC_ADDRESS_STR + ": This station does not exist in the WDI Station Table", + MAC_ADDR_ARRAY(pwdiPostAssocParams->wdiBSSParams.wdiSTAContext.macSTA)); wpalMutexRelease(&pWDICtx->wptMutex); wpalMemoryFree(pSendBuffer); return WDI_STATUS_E_FAILURE; @@ -8182,7 +8637,8 @@ WDI_ProcessDelSTAReq &macBSSID)) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "This station does not exist in the WDI Station Table %d"); + "This station does not exist in the WDI Station Table %d", + pwdiDelSTAParams->ucSTAIdx); wpalMutexRelease(&pWDICtx->wptMutex); return WDI_STATUS_E_FAILURE; } @@ -8223,7 +8679,7 @@ WDI_ProcessDelSTAReq ( usSendSize < (usDataOffset + sizeof(halDelStaReqMsg.delStaParams) ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in start req %x %x %x", + "Unable to get send buffer in start req %p %p %p", pEventData, pwdiDelSTAParams, wdiDelSTARspCb); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -8342,7 +8798,7 @@ WDI_ProcessSetBssKeyReq ( usSendSize < (usDataOffset + sizeof(halSetBssKeyReqMsg.setBssKeyParams) ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in set bss key req %x %x %x", + "Unable to get send buffer in set bss key req %p %p %p", pEventData, pwdiSetBSSKeyParams, wdiSetBSSKeyRspCb); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -8489,7 +8945,7 @@ WDI_ProcessRemoveBssKeyReq ( usSendSize < (usDataOffset + sizeof(halRemoveBssKeyReqMsg.removeBssKeyParams) ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in set bss key req %x %x %x", + "Unable to get send buffer in set bss key req %p %p %p", pEventData, pwdiRemoveBSSKeyParams, wdiRemoveBSSKeyRspCb); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -8581,7 +9037,8 @@ WDI_ProcessSetStaKeyReq &macBSSID)) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "This station does not exist in the WDI Station Table %d"); + "This station does not exist in the WDI Station Table %d", + pwdiSetSTAKeyParams->wdiKeyInfo.ucSTAIdx); wpalMutexRelease(&pWDICtx->wptMutex); return WDI_STATUS_E_FAILURE; } @@ -8623,7 +9080,7 @@ WDI_ProcessSetStaKeyReq ( usSendSize < (usDataOffset + sizeof(halSetStaKeyReqMsg.setStaKeyParams) ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in set bss key req %x %x %x", + "Unable to get send buffer in set bss key req %p %p %p", pEventData, pwdiSetSTAKeyParams, wdiSetSTAKeyRspCb); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -8737,7 +9194,8 @@ WDI_ProcessRemoveStaKeyReq &macBSSID)) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "This station does not exist in the WDI Station Table %d"); + "This station does not exist in the WDI Station Table %d", + pwdiRemoveSTAKeyParams->wdiKeyInfo.ucSTAIdx); wpalMutexRelease(&pWDICtx->wptMutex); return WDI_STATUS_E_FAILURE; } @@ -8780,7 +9238,7 @@ WDI_ProcessRemoveStaKeyReq ( usSendSize < (usDataOffset + sizeof(halRemoveStaKeyReqMsg.removeStaKeyParams) ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in set bss key req %x %x %x", + "Unable to get send buffer in set bss key req %p %p %p", pEventData, pwdiRemoveSTAKeyParams, wdiRemoveSTAKeyRspCb); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -8877,7 +9335,8 @@ WDI_ProcessSetStaBcastKeyReq &macBSSID)) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "This station does not exist in the WDI Station Table %d"); + "This station does not exist in the WDI Station Table %d", + pwdiSetSTAKeyParams->wdiKeyInfo.ucSTAIdx); wpalMutexRelease(&pWDICtx->wptMutex); return WDI_STATUS_E_FAILURE; } @@ -8886,7 +9345,7 @@ WDI_ProcessSetStaBcastKeyReq if ( NULL == pBSSSes ) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, - "Association sequence for this BSS does not yet exist. macBSSID " MAC_ADDRESS_STR, + "%s: Association sequence for this BSS does not yet exist. macBSSID " MAC_ADDRESS_STR, __func__, MAC_ADDR_ARRAY(macBSSID)); wpalMutexRelease(&pWDICtx->wptMutex); @@ -8919,7 +9378,7 @@ WDI_ProcessSetStaBcastKeyReq ( usSendSize < (usDataOffset + sizeof(halSetStaKeyReqMsg.setStaKeyParams) ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in set bss key req %x %x %x", + "Unable to get send buffer in set bss key req %p %p %p", pEventData, pwdiSetSTAKeyParams, wdiSetSTAKeyRspCb); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -9033,7 +9492,8 @@ WDI_ProcessRemoveStaBcastKeyReq &macBSSID)) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "This station does not exist in the WDI Station Table %d"); + "This station does not exist in the WDI Station Table %d", + pwdiRemoveSTABcastKeyParams->wdiKeyInfo.ucSTAIdx); wpalMutexRelease(&pWDICtx->wptMutex); return WDI_STATUS_E_FAILURE; } @@ -9076,7 +9536,7 @@ WDI_ProcessRemoveStaBcastKeyReq ( usSendSize < (usDataOffset + sizeof(halRemoveStaBcastKeyReqMsg.removeStaKeyParams) ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in set bss key req %x %x %x", + "Unable to get send buffer in set bss key req %p %p %p", pEventData, pwdiRemoveSTABcastKeyParams, wdiRemoveSTAKeyRspCb); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -9175,7 +9635,8 @@ WDI_ProcessAddTSpecReq &macBSSID)) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "This station does not exist in the WDI Station Table %d"); + "This station does not exist in the WDI Station Table %d", + pwdiAddTSParams->wdiTsInfo.ucSTAIdx); wpalMutexRelease(&pWDICtx->wptMutex); return WDI_STATUS_E_FAILURE; } @@ -9218,7 +9679,7 @@ WDI_ProcessAddTSpecReq ( usSendSize < (usDataOffset + sizeof(halAddTsParams) ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in set bss key req %x %x %x", + "Unable to get send buffer in set bss key req %p %p %p", pEventData, pwdiAddTSParams, wdiAddTSRspCb); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -9391,7 +9852,7 @@ WDI_ProcessDelTSpecReq ( usSendSize < (usDataOffset + sizeof(pwdiDelTSParams->wdiDelTSInfo) ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in set bss key req %x %x %x", + "Unable to get send buffer in set bss key req %p %p %p", pEventData, pwdiDelTSParams, wdiDelTSRspCb); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -9502,7 +9963,7 @@ WDI_ProcessUpdateEDCAParamsReq ( usSendSize < (usDataOffset + sizeof(pwdiUpdateEDCAParams->wdiEDCAInfo) ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in set bss key req %x %x %x", + "Unable to get send buffer in set bss key req %p %p %p", pEventData, pwdiUpdateEDCAParams, wdiUpdateEDCARspCb); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -9583,7 +10044,8 @@ WDI_ProcessAddBASessionReq &macBSSID)) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "This station does not exist in the WDI Station Table %d"); + "This station does not exist in the WDI Station Table %d", + pwdiAddBASessionParams->wdiBASessionInfoType.ucSTAIdx); wpalMutexRelease(&pWDICtx->wptMutex); return WDI_STATUS_E_FAILURE; } @@ -9629,7 +10091,7 @@ WDI_ProcessAddBASessionReq (usDataOffset + sizeof(halAddBASessionReq.addBASessionParams) ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in Add BA session req %x %x %x", + "Unable to get send buffer in Add BA session req %p %p %p", pEventData, pwdiAddBASessionParams, wdiAddBASessionRspCb); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -9725,7 +10187,8 @@ WDI_ProcessDelBAReq &macBSSID)) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "This station does not exist in the WDI Station Table %d"); + "This station does not exist in the WDI Station Table %d", + pwdiDelBAParams->wdiBAInfo.ucSTAIdx); wpalMutexRelease(&pWDICtx->wptMutex); return WDI_STATUS_E_FAILURE; } @@ -9764,7 +10227,7 @@ WDI_ProcessDelBAReq ( usSendSize < (usDataOffset + sizeof(halDelBAparam) ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer for DEL BA req %x %x %x", + "Unable to get send buffer for DEL BA req %p %p %p", pEventData, pwdiDelBAParams, wdiDelBARspCb); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -9866,7 +10329,7 @@ WDI_ProcessTSMStatsReq ( usSendSize < (usDataOffset + sizeof(halTsmStatsReqParams) ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, - "Unable to get send buffer in set bss key req %x %x %x", + "Unable to get send buffer in set bss key req %p %p %p", pEventData, pwdiTSMParams, wdiTSMRspCb); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -9942,7 +10405,7 @@ WDI_ProcessFlushAcReq ( usSendSize < (usDataOffset + sizeof(pwdiFlushAcParams->wdiFlushAcInfo) ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in set bss key req %x %x %x", + "Unable to get send buffer in set bss key req %p %p %p", pEventData, pwdiFlushAcParams, wdiFlushAcRspCb); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -10012,7 +10475,7 @@ WDI_ProcessBtAmpEventReq ( usSendSize < (usDataOffset + sizeof(haltBtAmpEventMsg.btAmpEventParams) ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in BT AMP event req %x %x %x", + "Unable to get send buffer in BT AMP event req %p %p %p", pEventData, pwdiBtAmpEventParams, wdiBtAmpEventRspCb); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -10056,7 +10519,7 @@ WDI_ProcessAddSTASelfReq wpt_uint8* pSendBuffer = NULL; wpt_uint16 usDataOffset = 0; wpt_uint16 usSendSize = 0; - tAddStaSelfParams halAddSTASelfParams; + tAddStaSelfParams_V1 halAddSTASelfParams; /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ /*------------------------------------------------------------------------- @@ -10081,12 +10544,12 @@ WDI_ProcessAddSTASelfReq -----------------------------------------------------------------------*/ if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_ADD_STA_SELF_REQ, - sizeof(tAddStaSelfParams), + sizeof(tAddStaSelfParams_V1), &pSendBuffer, &usDataOffset, &usSendSize))|| - ( usSendSize < (usDataOffset + sizeof(tAddStaSelfParams) ))) + ( usSendSize < (usDataOffset + sizeof(tAddStaSelfParams_V1) ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in ADD STA SELF REQ %x %x %x", + "Unable to get send buffer in ADD STA SELF REQ %p %p %p", pEventData, pwdiAddSTASelfReqParams, wdiAddSTASelfReqRspCb); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -10097,10 +10560,21 @@ WDI_ProcessAddSTASelfReq sizeof(pWDICtx->wdiCacheAddSTASelfReq)); wpalMemoryCopy(halAddSTASelfParams.selfMacAddr, - pwdiAddSTASelfReqParams->wdiAddSTASelfInfo.selfMacAddr, 6) ; - + pwdiAddSTASelfReqParams->wdiAddSTASelfInfo.selfMacAddr, 6); + halAddSTASelfParams.iface_persona = HAL_IFACE_UNKNOWN; + if (pwdiAddSTASelfReqParams->wdiAddSTASelfInfo.currDeviceMode == VOS_STA_MODE) + { + halAddSTASelfParams.iface_persona = HAL_IFACE_STA_MODE; + } + else if ((pwdiAddSTASelfReqParams->wdiAddSTASelfInfo.currDeviceMode == + VOS_P2P_CLIENT_MODE) || + (pwdiAddSTASelfReqParams->wdiAddSTASelfInfo.currDeviceMode == + VOS_P2P_DEVICE_MODE)) + { + halAddSTASelfParams.iface_persona = HAL_IFACE_P2P_MODE; + } wpalMemoryCopy( pSendBuffer+usDataOffset, &halAddSTASelfParams, - sizeof(tAddStaSelfParams)); + sizeof(tAddStaSelfParams_V1)); pWDICtx->wdiReqStatusCB = pwdiAddSTASelfReqParams->wdiReqStatusCB; pWDICtx->pReqStatusUserData = pwdiAddSTASelfReqParams->pUserData; @@ -10167,7 +10641,7 @@ WDI_ProcessDelSTASelfReq (usDataOffset + sizeof(pwdiDelStaSelfReqParams->wdiDelStaSelfInfo) ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in Del Sta Self req %x %x %x", + "Unable to get send buffer in Del Sta Self req %p %p %p", pEventData, pwdiDelStaSelfReqParams, wdiDelStaSelfRspCb); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -10244,7 +10718,7 @@ WDI_ProcessStartOemDataReq (usSendSize < (usDataOffset + reqLen))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in Start Oem Data req %x %x %x", + "Unable to get send buffer in Start Oem Data req %p %p %p", pEventData, pwdiOemDataReqParams, wdiOemDataRspCb); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -10318,7 +10792,7 @@ WDI_ProcessHostResumeReq (usSendSize < (usDataOffset + sizeof(halResumeReqParams)))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in Start Oem Data req %x %x %x", + "Unable to get send buffer in Start Oem Data req %p %p %p", pEventData, pwdiHostResumeParams, wdiHostResumeRspCb); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -10392,7 +10866,7 @@ WDI_ProcessSetTxPerTrackingReq ( usSendSize < (usDataOffset + sizeof(halTxPerTrackingReqParam) ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in set tx per tracking req %x %x %x", + "Unable to get send buffer in set tx per tracking req %p %p %p", pEventData, pwdiSetTxPerTrackingReqParams, pwdiSetTxPerTrackingRspCb); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -10644,59 +11118,237 @@ WDI_ProcessExcludeUnencryptInd }/*WDI_ProcessExcludeUnencryptInd*/ #endif -/*========================================================================== - MISC CONTROL PROCESSING REQUEST API -==========================================================================*/ /** - @brief Process Channel Switch Request function (called when - Main FSM allows it) + @brief Process Add Periodic Tx Pattern Indication function (called when + Main FSM allows it) - @param pWDICtx: pointer to the WLAN DAL context - pEventData: pointer to the event information structure + @param pWDICtx: pointer to the WLAN DAL context + pEventData: pointer to the event information structure @see @return Result of the function call */ WDI_Status -WDI_ProcessChannelSwitchReq +WDI_ProcessAddPeriodicTxPtrnInd ( WDI_ControlBlockType* pWDICtx, WDI_EventInfoType* pEventData ) { - WDI_SwitchChReqParamsType* pwdiSwitchChParams; - WDI_SwitchChRspCb wdiSwitchChRspCb; - wpt_uint8* pSendBuffer = NULL; - wpt_uint16 usDataOffset = 0; - wpt_uint16 usSendSize = 0; - tSwitchChannelReqMsg halSwitchChannelReq = {{0}}; - /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + WDI_AddPeriodicTxPtrnParamsType *pAddPeriodicTxPtrnParams; + wpt_uint8* pSendBuffer = NULL; + wpt_uint16 usDataOffset = 0; + wpt_uint16 usSendSize = 0; + WDI_Status wdiStatus; + tHalAddPeriodicTxPtrn *halAddPeriodicTxPtrn; + wpt_uint8 selfStaIdx = 0; /*------------------------------------------------------------------------- - Sanity check + Sanity check -------------------------------------------------------------------------*/ - if (( NULL == pEventData ) || ( NULL == pEventData->pEventData ) || - ( NULL == pEventData->pCBfnc )) + if ((NULL == pEventData) || (NULL == pEventData->pEventData)) { - WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "%s: Invalid parameters", __func__); - WDI_ASSERT(0); - return WDI_STATUS_E_FAILURE; + WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, + "%s: Invalid parameters in AddPeriodicTxPtrnInd!", __func__); + WDI_ASSERT(0); + return WDI_STATUS_E_FAILURE; } - pwdiSwitchChParams = (WDI_SwitchChReqParamsType*)pEventData->pEventData; - wdiSwitchChRspCb = (WDI_SwitchChRspCb)pEventData->pCBfnc; - /*----------------------------------------------------------------------- - Get message buffer - ! TO DO : proper conversion into the HAL Message Request Format - -----------------------------------------------------------------------*/ + pAddPeriodicTxPtrnParams = + (WDI_AddPeriodicTxPtrnParamsType *)pEventData->pEventData; + + /*------------------------------------------------------------------------ + Get message buffer + ------------------------------------------------------------------------*/ + if ((WDI_STATUS_SUCCESS != WDI_GetMessageBuffer(pWDICtx, + WDI_ADD_PERIODIC_TX_PATTERN_IND, sizeof(tHalAddPeriodicTxPtrn), + &pSendBuffer, &usDataOffset, &usSendSize))|| + (usSendSize < (usDataOffset + sizeof(tHalAddPeriodicTxPtrn)))) + { + WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, + "%s: Unable to get send buffer in AddPeriodicTxPtrnInd!", + __func__); + WDI_ASSERT(0); + return WDI_STATUS_E_FAILURE; + } + + halAddPeriodicTxPtrn = (tHalAddPeriodicTxPtrn *)(pSendBuffer + usDataOffset); + + if (WDI_STATUS_SUCCESS != WDI_STATableFindStaidByAddr(pWDICtx, + pAddPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams.macAddr, + &selfStaIdx)) + { + WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, + "%s: Failed to get selfStaIdx!", __func__); + wpalMemoryFree(pSendBuffer); + + return WDI_STATUS_E_FAILURE; + } + + halAddPeriodicTxPtrn->selfStaIdx = selfStaIdx; + halAddPeriodicTxPtrn->ucPtrnId = + pAddPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams.ucPtrnId; + halAddPeriodicTxPtrn->usPtrnSize = + pAddPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams.ucPtrnSize; + halAddPeriodicTxPtrn->uPtrnIntervalMs = + pAddPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams.usPtrnIntervalMs; + + wpalMemoryCopy(halAddPeriodicTxPtrn->ucPattern, + pAddPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams.ucPattern, + pAddPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams.ucPtrnSize); + + /*------------------------------------------------------------------------- + Send Indication to HAL + -------------------------------------------------------------------------*/ + pWDICtx->wdiReqStatusCB = pAddPeriodicTxPtrnParams->wdiReqStatusCB; + pWDICtx->pReqStatusUserData = pAddPeriodicTxPtrnParams->pUserData; + + wdiStatus = WDI_SendIndication(pWDICtx, pSendBuffer, usSendSize); + + WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO, + "%s: Sent WLAN_HAL_ADD_PERIODIC_TX_PTRN_IND to HAL.", __func__); + + return (wdiStatus != WDI_STATUS_SUCCESS) ? wdiStatus : WDI_STATUS_SUCCESS_SYNC; +} /* WDI_ProcessAddPeriodicTxPtrnInd */ + +/** + @brief Process Delete Periodic Tx Pattern Indication function (called when + Main FSM allows it) + + @param pWDICtx: pointer to the WLAN DAL context + pEventData: pointer to the event information structure + + @see + @return Result of the function call +*/ +WDI_Status +WDI_ProcessDelPeriodicTxPtrnInd +( + WDI_ControlBlockType* pWDICtx, + WDI_EventInfoType* pEventData +) +{ + WDI_DelPeriodicTxPtrnParamsType *pDelPeriodicTxPtrnParams; + wpt_uint8* pSendBuffer = NULL; + wpt_uint16 usDataOffset = 0; + wpt_uint16 usSendSize = 0; + WDI_Status wdiStatus; + tHalDelPeriodicTxPtrn *halDelPeriodicTxPtrn; + wpt_uint8 selfStaIdx = 0; + + /*------------------------------------------------------------------------- + Sanity check + -------------------------------------------------------------------------*/ + if ((NULL == pEventData) || (NULL == pEventData->pEventData)) + { + WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, + "%s: Invalid parameters in DelPeriodicTxPtrnInd!", __func__); + WDI_ASSERT(0); + return WDI_STATUS_E_FAILURE; + } + + pDelPeriodicTxPtrnParams = + (WDI_DelPeriodicTxPtrnParamsType *)pEventData->pEventData; + + /*------------------------------------------------------------------------ + Get message buffer + ------------------------------------------------------------------------*/ + if ((WDI_STATUS_SUCCESS != WDI_GetMessageBuffer(pWDICtx, + WDI_DEL_PERIODIC_TX_PATTERN_IND, sizeof(tHalDelPeriodicTxPtrn), + &pSendBuffer, &usDataOffset, &usSendSize))|| + (usSendSize < (usDataOffset + sizeof(tHalDelPeriodicTxPtrn)))) + { + WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, + "%s: Unable to get send buffer in DelPeriodicTxPtrnInd!", + __func__); + WDI_ASSERT(0); + return WDI_STATUS_E_FAILURE; + } + + halDelPeriodicTxPtrn = (tHalDelPeriodicTxPtrn *)(pSendBuffer + usDataOffset); + + if (WDI_STATUS_SUCCESS != WDI_STATableFindStaidByAddr(pWDICtx, + pDelPeriodicTxPtrnParams->wdiDelPeriodicTxPtrnParams.macAddr, + &selfStaIdx)) + { + WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, + "%s: Failed to get selfStaIdx!", __func__); + wpalMemoryFree(pSendBuffer); + + return WDI_STATUS_E_FAILURE; + } + + halDelPeriodicTxPtrn->selfStaIdx = selfStaIdx; + halDelPeriodicTxPtrn->uPatternIdBitmap = + pDelPeriodicTxPtrnParams->wdiDelPeriodicTxPtrnParams.ucPatternIdBitmap; + + /*------------------------------------------------------------------------- + Send Indication to HAL + -------------------------------------------------------------------------*/ + pWDICtx->wdiReqStatusCB = pDelPeriodicTxPtrnParams->wdiReqStatusCB; + pWDICtx->pReqStatusUserData = pDelPeriodicTxPtrnParams->pUserData; + + wdiStatus = WDI_SendIndication(pWDICtx, pSendBuffer, usSendSize); + + WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO, + "%s: Sent WLAN_HAL_DEL_PERIODIC_TX_PTRN_IND to HAL.", __func__); + + return (wdiStatus != WDI_STATUS_SUCCESS) ? wdiStatus : WDI_STATUS_SUCCESS_SYNC; +} /* WDI_ProcessDelPeriodicTxPtrnInd */ + +/*========================================================================== + MISC CONTROL PROCESSING REQUEST API +==========================================================================*/ +/** + @brief Process Channel Switch Request function (called when + Main FSM allows it) + + @param pWDICtx: pointer to the WLAN DAL context + pEventData: pointer to the event information structure + + @see + @return Result of the function call +*/ +WDI_Status +WDI_ProcessChannelSwitchReq +( + WDI_ControlBlockType* pWDICtx, + WDI_EventInfoType* pEventData +) +{ + WDI_SwitchChReqParamsType* pwdiSwitchChParams; + WDI_SwitchChRspCb wdiSwitchChRspCb; + wpt_uint8* pSendBuffer = NULL; + wpt_uint16 usDataOffset = 0; + wpt_uint16 usSendSize = 0; + tSwitchChannelReqMsg halSwitchChannelReq = {{0}}; + /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + + /*------------------------------------------------------------------------- + Sanity check + -------------------------------------------------------------------------*/ + if (( NULL == pEventData ) || ( NULL == pEventData->pEventData ) || + ( NULL == pEventData->pCBfnc )) + { + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, + "%s: Invalid parameters", __func__); + WDI_ASSERT(0); + return WDI_STATUS_E_FAILURE; + } + + pwdiSwitchChParams = (WDI_SwitchChReqParamsType*)pEventData->pEventData; + wdiSwitchChRspCb = (WDI_SwitchChRspCb)pEventData->pCBfnc; + /*----------------------------------------------------------------------- + Get message buffer + ! TO DO : proper conversion into the HAL Message Request Format + -----------------------------------------------------------------------*/ if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_CH_SWITCH_REQ, sizeof(halSwitchChannelReq.switchChannelParams), &pSendBuffer, &usDataOffset, &usSendSize))|| ( usSendSize < (usDataOffset + sizeof(halSwitchChannelReq.switchChannelParams) ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in channel switch req %x %x %x", + "Unable to get send buffer in channel switch req %p %p %p", pEventData, pwdiSwitchChParams, wdiSwitchChRspCb); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -10836,7 +11488,7 @@ WDI_ProcessConfigStaReq ( usSendSize < (usDataOffset + uMsgSize ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in config sta req %x %x %x", + "Unable to get send buffer in config sta req %p %p %p", pEventData, pwdiConfigSTAParams, wdiConfigSTARspCb); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -10855,7 +11507,9 @@ WDI_ProcessConfigStaReq (wpt_uint8*)&halConfigStaReqMsg.uStaParams.configStaParams.staIdx )) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "This station does not exist in the WDI Station Table %d"); + MAC_ADDRESS_STR + ": This station does not exist in the WDI Station Table", + MAC_ADDR_ARRAY(pwdiConfigSTAParams->wdiReqInfo.macSTA)); wpalMutexRelease(&pWDICtx->wptMutex); wpalMemoryFree(pSendBuffer); return WDI_STATUS_E_FAILURE; @@ -10986,7 +11640,7 @@ WDI_ProcessSetLinkStateReq ( usSendSize < (usDataOffset + sizeof(halLinkStateReqMsg) ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in set bss key req %x %x %x", + "Unable to get send buffer in set bss key req %p %p %p", pEventData, pwdiSetLinkParams, wdiSetLinkRspCb); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -11057,6 +11711,7 @@ WDI_ProcessGetStatsReq return WDI_STATUS_E_FAILURE; } + pwdiGetStatsParams = (WDI_GetStatsReqParamsType*)pEventData->pEventData; wdiGetStatsRspCb = (WDI_GetStatsRspCb)pEventData->pCBfnc; @@ -11074,7 +11729,8 @@ WDI_ProcessGetStatsReq &macBSSID)) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "This station does not exist in the WDI Station Table %d"); + "This station does not exist in the WDI Station Table %d", + pwdiGetStatsParams->wdiGetStatsParamsInfo.ucSTAIdx); wpalMutexRelease(&pWDICtx->wptMutex); return WDI_STATUS_E_FAILURE; } @@ -11117,7 +11773,7 @@ WDI_ProcessGetStatsReq ( usSendSize < (usDataOffset + sizeof(halStatsReqMsg.statsReqParams) ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in set bss key req %x %x %x", + "Unable to get send buffer in set bss key req %p %p %p", pEventData, pwdiGetStatsParams, wdiGetStatsRspCb); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -11199,7 +11855,8 @@ WDI_ProcessGetRoamRssiReq &macBSSID)) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "This station does not exist in the WDI Station Table %d"); + "This station does not exist in the WDI Station Table %d", + pwdiGetRoamRssiParams->wdiGetRoamRssiParamsInfo.ucSTAIdx); wpalMutexRelease(&pWDICtx->wptMutex); return WDI_STATUS_E_FAILURE; } @@ -11241,7 +11898,7 @@ WDI_ProcessGetRoamRssiReq ( usSendSize < (usDataOffset + sizeof(halRssiRoamReqMsg.roamRssiReqParams) ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in set bss key req %x %x %x", + "Unable to get send buffer in set bss key req %p %p %p", pEventData, pwdiGetRoamRssiParams, wdiGetStatsRspCb); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -11315,7 +11972,7 @@ WDI_ProcessUpdateCfgReq ( usSendSize < (usDataOffset + pwdiUpdateCfgParams->uConfigBufferLen))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in set bss key req %x %x %x", + "Unable to get send buffer in set bss key req %p %p %p", pEventData, pwdiUpdateCfgParams, wdiUpdateCfgRspCb); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -11401,7 +12058,8 @@ WDI_ProcessAddBAReq &macBSSID)) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "This station does not exist in the WDI Station Table %d"); + "This station does not exist in the WDI Station Table %d", + pwdiAddBAParams->wdiBAInfoType.ucSTAIdx); wpalMutexRelease(&pWDICtx->wptMutex); return WDI_STATUS_E_FAILURE; } @@ -11444,7 +12102,7 @@ WDI_ProcessAddBAReq (usDataOffset + sizeof(halAddBAReq.addBAParams) ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in Add BA req %x %x %x", + "Unable to get send buffer in Add BA req %p %p %p", pEventData, pwdiAddBAParams, wdiAddBARspCb); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -11537,7 +12195,8 @@ WDI_ProcessTriggerBAReq &macBSSID)) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "This station does not exist in the WDI Station Table %d"); + "This station does not exist in the WDI Station Table %d", + pwdiTriggerBAParams->wdiTriggerBAInfoType.ucSTAIdx); wpalMutexRelease(&pWDICtx->wptMutex); return WDI_STATUS_E_FAILURE; } @@ -11585,7 +12244,7 @@ WDI_ProcessTriggerBAReq pwdiTriggerBAParams->wdiTriggerBAInfoType.usBACandidateCnt) ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in Trigger BA req %x %x %x", + "Unable to get send buffer in Trigger BA req %p %p %p", pEventData, pwdiTriggerBAParams, wdiTriggerBARspCb); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -11676,7 +12335,7 @@ WDI_ProcessUpdateBeaconParamsReq ( usSendSize < (usDataOffset + sizeof(halUpdateBeaconParams) ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in set bss key req %x %x %x", + "Unable to get send buffer in set bss key req %p %p %p", pEventData, pwdiUpdateBeaconParams, wdiUpdateBeaconParamsRspCb); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -11778,7 +12437,7 @@ WDI_ProcessSendBeaconParamsReq ( usSendSize < (usDataOffset + sizeof(halSendBeaconReq.sendBeaconParam) ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in send beacon req %x %x %x", + "Unable to get send buffer in send beacon req %p %p %p", pEventData, pwdiSendBeaconParams, wdiSendBeaconParamsRspCb); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -11874,7 +12533,7 @@ WDI_ProcessUpdateProbeRspTemplateReq ( usSendSize < (usDataOffset + sizeof(halUpdateProbeRspTmplParams) ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in set bss key req %x %x %x", + "Unable to get send buffer in set bss key req %p %p %p", pEventData, pwdiUpdateProbeRespTmplParams, wdiUpdateProbeRespTmplRspCb); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -12017,7 +12676,7 @@ if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_SET_MAX_TX_POWER_ ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, - "Unable to get Set Max Tx Power req %x %x %x", + "Unable to get Set Max Tx Power req %p %p %p", pEventData, pwdiSetMaxTxPowerParams, wdiSetMaxTxPowerRspCb); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -12049,6 +12708,88 @@ if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_SET_MAX_TX_POWER_ } +/* + @brief Process Set Max Tx Power Per Band Request function (called when Main + FSM allows it) + + @param pWDICtx: pointer to the WLAN DAL context + pEventData: pointer to the event information structure + + @see + @return Result of the function call +*/ +WDI_Status WDI_ProcessSetMaxTxPowerPerBandReq +( + WDI_ControlBlockType* pWDICtx, + WDI_EventInfoType* pEventData +) +{ + WDI_SetMaxTxPowerPerBandParamsType* pwdiSetMaxTxPowerPerBandParams = NULL; + WDA_SetMaxTxPowerPerBandRspCb wdiSetMaxTxPowerPerBandRspCb; + wpt_uint8* pSendBuffer = NULL; + wpt_uint16 usDataOffset = 0; + wpt_uint16 usSendSize = 0; + tpSetMaxTxPwrPerBandReq phalSetMxTxPwrPerBand = NULL; + WDI_Status rValue = WDI_STATUS_SUCCESS; + /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + + /*------------------------------------------------------------------------- + Sanity check + -------------------------------------------------------------------------*/ + if (( NULL == pEventData ) || + ( NULL == pEventData->pEventData ) || + ( NULL == pEventData->pCBfnc )) + { + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, + "%s: Invalid parameters", __func__); + WDI_ASSERT(0); + return WDI_STATUS_E_FAILURE; + } + pwdiSetMaxTxPowerPerBandParams = \ + (WDI_SetMaxTxPowerPerBandParamsType*)pEventData->pEventData; + + wdiSetMaxTxPowerPerBandRspCb = \ + (WDA_SetMaxTxPowerPerBandRspCb)pEventData->pCBfnc; + + /*----------------------------------------------------------------------- + Get message buffer + -----------------------------------------------------------------------*/ + + rValue = WDI_GetMessageBuffer(pWDICtx, + WDI_SET_MAX_TX_POWER_PER_BAND_REQ, + sizeof(tSetMaxTxPwrPerBandParams), + &pSendBuffer, &usDataOffset, &usSendSize); + + if ((WDI_STATUS_SUCCESS != rValue)|| (usSendSize < + (usDataOffset + sizeof(tSetMaxTxPwrPerBandParams)))) + { + WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, + "Unable to get Set Max Tx Power Per Band req %p %p %p", + pEventData, pwdiSetMaxTxPowerPerBandParams, + wdiSetMaxTxPowerPerBandRspCb); + WDI_ASSERT(0); + return WDI_STATUS_E_FAILURE; + } + + + phalSetMxTxPwrPerBand = (tpSetMaxTxPwrPerBandReq)(pSendBuffer + usDataOffset); + phalSetMxTxPwrPerBand->setMaxTxPwrPerBandParams.bandInfo = \ + pwdiSetMaxTxPowerPerBandParams->wdiMaxTxPowerPerBandInfo.bandInfo; + + phalSetMxTxPwrPerBand->setMaxTxPwrPerBandParams.power = \ + pwdiSetMaxTxPowerPerBandParams->wdiMaxTxPowerPerBandInfo.ucPower; + + pWDICtx->wdiReqStatusCB = pwdiSetMaxTxPowerPerBandParams->wdiReqStatusCB; + pWDICtx->pReqStatusUserData = pwdiSetMaxTxPowerPerBandParams->pUserData; + + /*------------------------------------------------------------------------- + Send Set Max Tx Power Per Band Request to HAL + -------------------------------------------------------------------------*/ + return WDI_SendMsg(pWDICtx, pSendBuffer, usSendSize, + wdiSetMaxTxPowerPerBandRspCb, pEventData->pUserData, + WDI_SET_MAX_TX_POWER_PER_BAND_RSP); +} + /** @brief Process Set Tx Power Request function (called when Main FSM allows it) @@ -12101,7 +12842,7 @@ WDI_Status WDI_ProcessSetTxPowerReq ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, - "Unable to get Set Max Tx Power req %x %x %x", + "Unable to get Set Max Tx Power req %p %p %p", pEventData, pwdiSetTxPowerParams, wdiSetTxPowerRspCb); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -12174,7 +12915,7 @@ WDI_ProcessP2PGONOAReq ( usSendSize < (usDataOffset + sizeof(halSetP2PGONOAParams) ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in set P2P GO NOA REQ %x %x %x", + "Unable to get send buffer in set P2P GO NOA REQ %p %p %p", pEventData, pwdiP2PGONOAReqParams, wdiP2PGONOAReqRspCb); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -12209,6 +12950,104 @@ WDI_ProcessP2PGONOAReq WDI_P2P_GO_NOTICE_OF_ABSENCE_RESP); }/*WDI_ProcessP2PGONOAReq*/ +#ifdef FEATURE_WLAN_TDLS + +/** + @brief Process P2P Notice Of Absence Request function (called when Main FSM + allows it) + + @param pWDICtx: pointer to the WLAN DAL context + pEventData: pointer to the event information structure + + @see + @return Result of the function call +*/ +WDI_Status +WDI_ProcessTdlsLinkEstablishReq +( + WDI_ControlBlockType* pWDICtx, + WDI_EventInfoType* pEventData +) +{ + WDI_SetTDLSLinkEstablishReqParamsType* pwdiTDLSLinkEstablishReqParams; + WDI_SetTDLSLinkEstablishReqParamsRspCb wdiTDLSLinkEstablishReqRspCb; + wpt_uint8* pSendBuffer = NULL; + wpt_uint16 usDataOffset = 0; + wpt_uint16 usSendSize = 0; + + tTDLSLinkEstablishedType halSetTDLSLinkEstablishParams; + /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + + /*------------------------------------------------------------------------- + Sanity check + -------------------------------------------------------------------------*/ + if (( NULL == pEventData ) || + ( NULL == pEventData->pEventData) || + ( NULL == pEventData->pCBfnc)) + { + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, + "%s: Invalid parameters", __func__); + WDI_ASSERT(0); + return WDI_STATUS_E_FAILURE; + } + pwdiTDLSLinkEstablishReqParams = + (WDI_SetTDLSLinkEstablishReqParamsType*)pEventData->pEventData; + wdiTDLSLinkEstablishReqRspCb = + (WDI_SetTDLSLinkEstablishReqParamsRspCb)pEventData->pCBfnc; + + + /*----------------------------------------------------------------------- + Get message buffer + -----------------------------------------------------------------------*/ + if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, + WDI_TDLS_LINK_ESTABLISH_REQ, + sizeof(halSetTDLSLinkEstablishParams), + &pSendBuffer, &usDataOffset, &usSendSize))|| + ( usSendSize < (usDataOffset + sizeof(halSetTDLSLinkEstablishParams) ))) + { + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, + "Unable to get send buffer in set P2P GO NOA REQ %p %p %p", + pEventData, pwdiTDLSLinkEstablishReqParams, wdiTDLSLinkEstablishReqRspCb); + WDI_ASSERT(0); + return WDI_STATUS_E_FAILURE; + } + + halSetTDLSLinkEstablishParams.staIdx = + pwdiTDLSLinkEstablishReqParams->wdiTDLSLinkEstablishInfo.uStaIdx; + halSetTDLSLinkEstablishParams.bIsResponder = + pwdiTDLSLinkEstablishReqParams->wdiTDLSLinkEstablishInfo.uIsResponder; + halSetTDLSLinkEstablishParams.acVOUAPSDFlag = + (pwdiTDLSLinkEstablishReqParams->wdiTDLSLinkEstablishInfo.uUapsdQueues & 0x08) >> 3; + halSetTDLSLinkEstablishParams.acVIUAPSDFlag = + (pwdiTDLSLinkEstablishReqParams->wdiTDLSLinkEstablishInfo.uUapsdQueues & 0x04) >> 2; + halSetTDLSLinkEstablishParams.acBKUAPSDFlag = + (pwdiTDLSLinkEstablishReqParams->wdiTDLSLinkEstablishInfo.uUapsdQueues & 0x02) >> 1; + halSetTDLSLinkEstablishParams.acBEUAPSDFlag = + pwdiTDLSLinkEstablishReqParams->wdiTDLSLinkEstablishInfo.uUapsdQueues & 0x01; + halSetTDLSLinkEstablishParams.aAck = 0; + halSetTDLSLinkEstablishParams.maxServicePeriodLength = (pwdiTDLSLinkEstablishReqParams->wdiTDLSLinkEstablishInfo.uMaxSp & 0x03); + halSetTDLSLinkEstablishParams.moreDataAck = 0; + halSetTDLSLinkEstablishParams.TPUBufferStaSupport = pwdiTDLSLinkEstablishReqParams->wdiTDLSLinkEstablishInfo.uIsBufSta; + + wpalMemoryCopy( pSendBuffer+usDataOffset, + &halSetTDLSLinkEstablishParams, + sizeof(halSetTDLSLinkEstablishParams)); + + pWDICtx->wdiReqStatusCB = pwdiTDLSLinkEstablishReqParams->wdiReqStatusCB; + pWDICtx->pReqStatusUserData = pwdiTDLSLinkEstablishReqParams->pUserData; + + /*------------------------------------------------------------------------- + Send Update Probe Resp Template Request to HAL + -------------------------------------------------------------------------*/ + return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize, + wdiTDLSLinkEstablishReqRspCb, pEventData->pUserData, + WDI_TDLS_LINK_ESTABLISH_REQ_RESP); + return 0; +}/*WDI_ProcessTdlsLinkEstablishReq*/ + + +#endif + /** @@ -12306,7 +13145,7 @@ WDI_ProcessEnterImpsReq ( usSendSize < (usDataOffset ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in Enter IMPS req %x %x", + "Unable to get send buffer in Enter IMPS req %p %p", pEventData, wdiEnterImpsRspCb); WDI_ASSERT(0); goto failRequest; @@ -12327,7 +13166,7 @@ WDI_ProcessEnterImpsReq wptStatus = WDTS_SetPowerState(pWDICtx, WDTS_POWER_STATE_IMPS, WDI_SetPowerStateCb); if( eWLAN_PAL_STATUS_SUCCESS != wptStatus ) { WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL, - "WDTS_SetPowerState returned with status %d when trying to notify DTS that host is entering IMPS\n", wptStatus); + "WDTS_SetPowerState returned with status %d when trying to notify DTS that host is entering IMPS", wptStatus); WDI_ASSERT(0); goto fail; } @@ -12406,7 +13245,7 @@ WDI_ProcessExitImpsReq ( usSendSize < (usDataOffset ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in Exit IMPS req %x %x", + "Unable to get send buffer in Exit IMPS req %p %p", pEventData, wdiExitImpsRspCb); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -12469,7 +13308,7 @@ WDI_ProcessEnterBmpsReq ( usSendSize < (usDataOffset + sizeof(enterBmpsReq) ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in Enter BMPS req %x %x %x", + "Unable to get send buffer in Enter BMPS req %p %p %p", pEventData, pwdiEnterBmpsReqParams, wdiEnterBmpsRspCb); WDI_ASSERT(0); goto failRequest; @@ -12491,7 +13330,7 @@ WDI_ProcessEnterBmpsReq if( eWLAN_PAL_STATUS_SUCCESS != wptStatus ) { WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL, - "WDTS_SetPowerState returned with status %d when trying to notify DTS that we are entering BMPS\n", wptStatus); + "WDTS_SetPowerState returned with status %d when trying to notify DTS that we are entering BMPS", wptStatus); WDI_ASSERT(0); goto fail; } @@ -12592,7 +13431,7 @@ WDI_ProcessExitBmpsReq ( usSendSize < (usDataOffset + sizeof(exitBmpsReq) ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in Exit BMPS req %x %x %x", + "Unable to get send buffer in Exit BMPS req %p %p %p", pEventData, pwdiExitBmpsReqParams, wdiExitBmpsRspCb); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -12663,7 +13502,7 @@ WDI_ProcessEnterUapsdReq ( usSendSize < (usDataOffset + sizeof(enterUapsdReq) ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in Enter UAPSD req %x %x %x", + "Unable to get send buffer in Enter UAPSD req %p %p %p", pEventData, pwdiEnterUapsdReqParams, wdiEnterUapsdRspCb); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -12742,7 +13581,7 @@ WDI_ProcessExitUapsdReq ( usSendSize < (usDataOffset + sizeof(wpt_uint8)))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in Exit UAPSD req %x %x", + "Unable to get send buffer in Exit UAPSD req %p %p", pEventData, wdiExitUapsdRspCb); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -12812,7 +13651,7 @@ WDI_ProcessSetUapsdAcParamsReq ( usSendSize < (usDataOffset + sizeof(uapsdAcParamsReq) ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in Set UAPSD params req %x %x %x", + "Unable to get send buffer in Set UAPSD params req %p %p %p", pEventData, pwdiSetUapsdAcParams, wdiSetUapsdAcParamsCb); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -12886,7 +13725,7 @@ WDI_ProcessUpdateUapsdParamsReq ( usSendSize < (usDataOffset + sizeof(pwdiUpdateUapsdReqParams->wdiUpdateUapsdInfo) ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in Update UAPSD params req %x %x %x", + "Unable to get send buffer in Update UAPSD params req %p %p %p", pEventData, pwdiUpdateUapsdReqParams, wdiUpdateUapsdParamsCb); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -12954,7 +13793,7 @@ WDI_ProcessConfigureRxpFilterReq ( usSendSize < (usDataOffset + sizeof(halRxpFilterParams) ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in Set UAPSD params req %x %x %x", + "Unable to get send buffer in Set UAPSD params req %p %p %p", pEventData, pwdiRxpFilterParams, wdiConfigureRxpFilterCb); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -13026,7 +13865,7 @@ WDI_ProcessSetBeaconFilterReq ( usSendSize < (usDataOffset + sizeof(pwdiBeaconFilterParams->wdiBeaconFilterInfo) ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in Set beacon filter req %x %x %x", + "Unable to get send buffer in Set beacon filter req %p %p %p", pEventData, pwdiBeaconFilterParams, wdiBeaconFilterCb); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -13096,7 +13935,7 @@ WDI_ProcessRemBeaconFilterReq ( usSendSize < (usDataOffset + sizeof(pwdiBeaconFilterParams->wdiBeaconFilterInfo) ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in remove beacon filter req %x %x %x", + "Unable to get send buffer in remove beacon filter req %p %p %p", pEventData, pwdiBeaconFilterParams, wdiBeaconFilterCb); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -13165,7 +14004,7 @@ WDI_ProcessSetRSSIThresholdsReq ( usSendSize < (usDataOffset + sizeof(rssiThresholdsReq) ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in remove beacon filter req %x %x %x", + "Unable to get send buffer in remove beacon filter req %p %p %p", pEventData, pwdiRSSIThresholdsParams, wdiRSSIThresholdsCb); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -13269,7 +14108,7 @@ WDI_ProcessHostOffloadReq ( usSendSize < (usDataOffset + sizeof(hostOffloadParams) + sizeof(nsOffloadParams) ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in host offload req %x %x %x", + "Unable to get send buffer in host offload req %p %p %p", pEventData, pwdiHostOffloadParams, wdiHostOffloadCb); WDI_ASSERT(0); goto failRequest; @@ -13281,7 +14120,8 @@ WDI_ProcessHostOffloadReq if ( NULL == pBSSSes ) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, - " %s : Association for this BSSID does not exist",__func__); + " %s : Association for this BSSID does not exist " MAC_ADDRESS_STR, + __func__, MAC_ADDR_ARRAY(pwdiHostOffloadParams->wdiHostOffloadInfo.bssId)); goto fail; } @@ -13430,7 +14270,7 @@ WDI_ProcessKeepAliveReq ( usSendSize < (usDataOffset + sizeof(keepAliveReq) ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, - "Unable to get send buffer in keep alive req %x %x %x", + "Unable to get send buffer in keep alive req %p %p %p", pEventData, pwdiKeepAliveParams, wdiKeepAliveCb); WDI_ASSERT(0); goto failRequest; @@ -13469,10 +14309,11 @@ WDI_ProcessKeepAliveReq sizeof(keepAliveReq)); WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO, - "Process keep alive req %d",sizeof(keepAliveReq)); + "Process keep alive req %zu", sizeof(keepAliveReq)); WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO, - "Process keep alive req time period %d",keepAliveReq.timePeriod); + "Process keep alive req time period %d", + keepAliveReq.timePeriod); pWDICtx->wdiReqStatusCB = pwdiKeepAliveParams->wdiReqStatusCB; pWDICtx->pReqStatusUserData = pwdiKeepAliveParams->pUserData; @@ -13547,7 +14388,7 @@ WDI_ProcessWowlAddBcPtrnReq ( usSendSize < (usDataOffset + sizeof(wowlAddBcPtrnReq) ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in Wowl add bc ptrn req %x %x %x", + "Unable to get send buffer in Wowl add bc ptrn req %p %p %p", pEventData, pwdiWowlAddBcPtrnParams, wdiWowlAddBcPtrnCb); WDI_ASSERT(0); goto failRequest; @@ -13671,7 +14512,7 @@ WDI_ProcessWowlDelBcPtrnReq ( usSendSize < (usDataOffset + sizeof(wowlDelBcPtrnReq) ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in Wowl del bc ptrn req %x %x %x", + "Unable to get send buffer in Wowl del bc ptrn req %p %p %p", pEventData, pwdiWowlDelBcPtrnParams, wdiWowlDelBcPtrnCb); WDI_ASSERT(0); goto failRequest; @@ -13762,12 +14603,14 @@ WDI_ProcessWowlEnterReq ( usSendSize < (usDataOffset + sizeof(wowlEnterReq) ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in Wowl enter req %x %x %x", + "Unable to get send buffer in Wowl enter req %p %p %p", pEventData, pwdiWowlEnterParams, wdiWowlEnterCb); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; } + wpalMemoryZero(&wowlEnterReq, sizeof(tHalWowlEnterParams)); + wowlEnterReq.ucMagicPktEnable = pwdiWowlEnterParams->wdiWowlEnterInfo.ucMagicPktEnable; wowlEnterReq.ucPatternFilteringEnable = @@ -13870,7 +14713,7 @@ WDI_ProcessWowlExitReq ( usSendSize < (usDataOffset + sizeof(wowlExitparams)))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in Wowl Exit req %x %x", + "Unable to get send buffer in Wowl Exit req %p %p", pEventData, wdiWowlExitCb); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -13935,7 +14778,7 @@ WDI_ProcessConfigureAppsCpuWakeupStateReq ( usSendSize < (usDataOffset + sizeof(pwdiAppsCpuWakeupStateParams->bIsAppsAwake) ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in Apps CPU Wakeup State req %x %x %x", + "Unable to get send buffer in Apps CPU Wakeup State req %p %p %p", pEventData, pwdiAppsCpuWakeupStateParams, wdiConfigureAppsCpuWakeupStateCb); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -14018,7 +14861,8 @@ WDI_ProcessAggrAddTSpecReq &macBSSID)) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "This station does not exist in the WDI Station Table %d"); + "This station does not exist in the WDI Station Table %d", + pwdiAggrAddTSParams->wdiAggrTsInfo.ucSTAIdx); wpalMutexRelease(&pWDICtx->wptMutex); return WDI_STATUS_E_FAILURE; } @@ -14060,7 +14904,7 @@ WDI_ProcessAggrAddTSpecReq ( usSendSize < (usDataOffset + sizeof(tAggrAddTsParams) ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in set bss key req %x %x %x", + "Unable to get send buffer in set bss key req %p %p %p", pEventData, pwdiAggrAddTSParams, wdiAggrAddTSRspCb); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -14286,7 +15130,7 @@ WDI_ProcessStartRsp { // not enough data was received WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL, - "Invalid response length in Start Resp Expect %x Rcvd %x", + "Invalid response length in Start Resp Expect %zx Rcvd %x", sizeof(tHalMacStartRspParams), pEventData->uEventDataSize); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -14456,7 +15300,7 @@ WDI_ProcessStopRsp if ( sizeof(halMacStopRspMsg) < pEventData->uEventDataSize ) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Invalid response length in Stop Resp %x %x", + "Invalid response length in Stop Resp %u", pEventData->uEventDataSize); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -14594,7 +15438,7 @@ WDI_ProcessInitScanRsp wptStatus = WDTS_SetPowerState(pWDICtx, WDTS_POWER_STATE_FULL, NULL); if( eWLAN_PAL_STATUS_SUCCESS != wptStatus ) { WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL, - "WDTS_SetPowerState returned with status %d when trying to notify DTS that host is entering Full Power state\n", wptStatus); + "WDTS_SetPowerState returned with status %d when trying to notify DTS that host is entering Full Power state", wptStatus); WDI_ASSERT(0); } } @@ -15091,7 +15935,7 @@ WDI_ProcessConfigBSSRsp Add Broadcast STA only in AP mode -------------------------------------------------------------------------*/ if( pWDICtx->wdiCachedConfigBssReq.wdiReqInfo.ucOperMode == - WDI_BSS_OPERATIONAL_MODE_AP ) + WDI_BSS_OPERATIONAL_MODE_AP || pBSSSes->wdiBssType == WDI_IBSS_MODE) { WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO, "Add BCAST STA to table for index: %d", @@ -15220,7 +16064,8 @@ WDI_ProcessDelBSSRsp /* Delete the BCAST STA entry from the STA table if SAP/GO session is deleted */ - if(WDI_INFRA_AP_MODE == pBSSSes->wdiBssType) + if(WDI_INFRA_AP_MODE == pBSSSes->wdiBssType || + pBSSSes->wdiBssType == WDI_IBSS_MODE) { (void)WDI_STATableDelSta( pWDICtx, pBSSSes->bcastStaIdx ); } @@ -16513,7 +17358,7 @@ WDI_ProcessStartOemDataRsp if(NULL == wdiOemDataRspParams) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Failed to allocate memory in OEM DATA Response %x %x %x ", + "Failed to allocate memory in OEM DATA Response %p %p %p ", pWDICtx, pEventData, pEventData->pEventData); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -16678,6 +17523,8 @@ WDI_ProcessConfigStaRsp pWDICtx->wdiCachedConfigStaReq.wdiReqInfo.ucHTCapable; wdiAddSTAParam.ucStaType = pWDICtx->wdiCachedConfigStaReq.wdiReqInfo.wdiSTAType; + wdiAddSTAParam.ucRmfEnabled = + pWDICtx->wdiCachedConfigStaReq.wdiReqInfo.ucRMFEnabled; /* MAC Address of STA */ wpalMemoryCopy(wdiAddSTAParam.staMacAddr, @@ -16710,7 +17557,6 @@ WDI_ProcessConfigStaRsp halConfigStaRsp.configStaRspParams.bcastDpuIndex; wdiAddSTAParam.bcastDpuSignature = halConfigStaRsp.configStaRspParams.ucBcastSig; - wdiAddSTAParam.ucRmfEnabled = pBSSSes->ucRmfEnabled; wdiAddSTAParam.ucBSSIdx = ucCurrentBSSSesIdx; WDI_STATableAddSta(pWDICtx,&wdiAddSTAParam); @@ -16907,7 +17753,7 @@ WDI_ProcessGetStatsRsp if(NULL == wdiGetStatsRsp) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, - "Failed to allocate memory in Get Stats Response %x %x %x ", + "Failed to allocate memory in Get Stats Response %p %p %p ", pWDICtx, pEventData, pEventData->pEventData); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -17164,7 +18010,7 @@ WDI_ProcessTriggerBARsp if(NULL == wdiTriggerBARsp) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Failed to allocate memory in Trigger BA Response %x %x %x ", + "Failed to allocate memory in Trigger BA Response %p %p %p ", pWDICtx, pEventData, pEventData->pEventData); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -17201,7 +18047,7 @@ WDI_ProcessTriggerBARsp if(NULL == wdiTriggerBARsp) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Failed to allocate memory in Trigger BA Response %x %x %x ", + "Failed to allocate memory in Trigger BA Response %p %p %p ", pWDICtx, pEventData, pEventData->pEventData); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -17421,7 +18267,6 @@ WDI_ProcessSetMaxTxPowerRsp { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, "Error status returned in Set Max Tx Power Response "); - WDI_DetectedDeviceError( pWDICtx, WDI_ERR_BASIC_OP_FAILURE); return WDI_STATUS_E_FAILURE; } @@ -17494,9 +18339,9 @@ WDI_ProcessSetTxPowerRsp return WDI_STATUS_SUCCESS; } - +#ifdef FEATURE_WLAN_TDLS /** - @brief Process P2P Group Owner Notice Of Absense Rsp function (called + @brief Process TDLS Link Establish Rsp function (called when a response is being received over the bus from HAL) @param pWDICtx: pointer to the WLAN DAL context @@ -17506,15 +18351,17 @@ WDI_ProcessSetTxPowerRsp @return Result of the function call */ WDI_Status -WDI_ProcessP2PGONOARsp +WDI_ProcessLinkEstablishReqRsp ( WDI_ControlBlockType* pWDICtx, WDI_EventInfoType* pEventData ) { - WDI_Status wdiStatus; eHalStatus halStatus; - WDI_SetP2PGONOAReqParamsRspCb wdiP2PGONOAReqParamsRspCb; + WDI_SetTDLSLinkEstablishReqParamsRspCb wdiTDLSLinkEstablishReqParamsRspCb; + tTDLSLinkEstablishedRespMsg halTdlsLinkEstablishedRespMsg; + WDI_SetTdlsLinkEstablishReqResp wdiSetTdlsLinkEstablishReqResp; + /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ /*------------------------------------------------------------------------- @@ -17529,7 +18376,14 @@ WDI_ProcessP2PGONOARsp return WDI_STATUS_E_FAILURE; } - wdiP2PGONOAReqParamsRspCb = (WDI_SetP2PGONOAReqParamsRspCb)pWDICtx->pfncRspCB; + /*------------------------------------------------------------------------- + Extract indication and send it to UMAC + -------------------------------------------------------------------------*/ + wpalMemoryCopy( &halTdlsLinkEstablishedRespMsg.TDLSLinkEstablishedRespParams, + pEventData->pEventData, + sizeof(halTdlsLinkEstablishedRespMsg.TDLSLinkEstablishedRespParams) ); + + wdiTDLSLinkEstablishReqParamsRspCb = (WDI_SetTDLSLinkEstablishReqParamsRspCb)pWDICtx->pfncRspCB; /*------------------------------------------------------------------------- Extract response and send it to UMAC @@ -17538,14 +18392,67 @@ WDI_ProcessP2PGONOARsp pEventData->pEventData, sizeof(halStatus)); - wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus); + wdiSetTdlsLinkEstablishReqResp.wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus); + wdiSetTdlsLinkEstablishReqResp.uStaIdx = halTdlsLinkEstablishedRespMsg.TDLSLinkEstablishedRespParams.staIdx; /*Notify UMAC*/ - wdiP2PGONOAReqParamsRspCb( wdiStatus, pWDICtx->pRspCBUserData); + wdiTDLSLinkEstablishReqParamsRspCb( &wdiSetTdlsLinkEstablishReqResp, pWDICtx->pRspCBUserData); return WDI_STATUS_SUCCESS; -}/*WDI_ProcessP2PGONOARsp*/ -/** +}/*WDI_ProcessLinkEstablishReqRsp*/ +#endif + +/** + @brief Process P2P Group Owner Notice Of Absense Rsp function (called + when a response is being received over the bus from HAL) + + @param pWDICtx: pointer to the WLAN DAL context + pEventData: pointer to the event information structure + + @see + @return Result of the function call +*/ +WDI_Status +WDI_ProcessP2PGONOARsp +( + WDI_ControlBlockType* pWDICtx, + WDI_EventInfoType* pEventData +) +{ + WDI_Status wdiStatus; + eHalStatus halStatus; + WDI_SetP2PGONOAReqParamsRspCb wdiP2PGONOAReqParamsRspCb; + /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + + /*------------------------------------------------------------------------- + Sanity check + -------------------------------------------------------------------------*/ + if (( NULL == pWDICtx ) || ( NULL == pEventData ) || + ( NULL == pEventData->pEventData)) + { + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, + "%s: Invalid parameters", __func__); + WDI_ASSERT(0); + return WDI_STATUS_E_FAILURE; + } + + wdiP2PGONOAReqParamsRspCb = (WDI_SetP2PGONOAReqParamsRspCb)pWDICtx->pfncRspCB; + + /*------------------------------------------------------------------------- + Extract response and send it to UMAC + -------------------------------------------------------------------------*/ + wpalMemoryCopy( &halStatus, + pEventData->pEventData, + sizeof(halStatus)); + + wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus); + + /*Notify UMAC*/ + wdiP2PGONOAReqParamsRspCb( wdiStatus, pWDICtx->pRspCBUserData); + + return WDI_STATUS_SUCCESS; +}/*WDI_ProcessP2PGONOARsp*/ +/** @brief Process Enter IMPS Rsp function (called when a response is being received over the bus from HAL) @@ -17604,7 +18511,7 @@ WDI_ProcessEnterImpsRsp if( eWLAN_PAL_STATUS_SUCCESS != wptStatus ) { WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL, - "WDTS_SetPowerState returned with status %d when trying to notify DTS that host is entering Full Power state\n", wptStatus); + "WDTS_SetPowerState returned with status %d when trying to notify DTS that host is entering Full Power state", wptStatus); WDI_ASSERT(0); } } @@ -17657,12 +18564,16 @@ WDI_ProcessExitImpsRsp halStatus = *((eHalStatus*)pEventData->pEventData); wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus); + if (halStatus != eHAL_STATUS_SUCCESS) + WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, + "%s: Exit IMPS response is a failure with halStatus %d", __func__, halStatus); + // notify DTS that we are entering Full power wptStatus = WDTS_SetPowerState(pWDICtx, WDTS_POWER_STATE_FULL, NULL); if( eWLAN_PAL_STATUS_SUCCESS != wptStatus ) { WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL, - "WDTS_SetPowerState returned with status %d when trying to notify DTS that host is entering Full Power state\n", wptStatus); + "WDTS_SetPowerState returned with status %d when trying to notify DTS that host is entering Full Power state", wptStatus); WDI_ASSERT(0); } /*Notify UMAC*/ @@ -17745,7 +18656,7 @@ WDI_ProcessEnterBmpsRsp if( eWLAN_PAL_STATUS_SUCCESS != wptStatus ) { WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL, - "WDTS_SetPowerState returned with status %d when trying to notify DTS that host is entering Full Power state\n", wptStatus); + "WDTS_SetPowerState returned with status %d when trying to notify DTS that host is entering Full Power state", wptStatus); WDI_ASSERT(0); } pWDICtx->bInBmps = eWLAN_PAL_FALSE; @@ -17819,7 +18730,7 @@ WDI_ProcessExitBmpsRsp if( eWLAN_PAL_STATUS_SUCCESS != wptStatus ) { WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL, - "WDTS_SetPowerState returned with status %d when trying to notify DTS that host is entering Full Power state\n", wptStatus); + "WDTS_SetPowerState returned with status %d when trying to notify DTS that host is entering Full Power state", wptStatus); WDI_ASSERT(0); } pWDICtx->bInBmps = eWLAN_PAL_FALSE; @@ -19380,6 +20291,123 @@ WDI_ProcessTxCompleteInd return WDI_STATUS_SUCCESS; }/*WDI_ProcessTxCompleteInd*/ +#ifdef FEATURE_WLAN_TDLS +/** +*@brief Process TDLS Indication function (called when + an indication of this kind is being received over the + bus from HAL) + + @param pWDICtx: pointer to the WLAN DAL context + pEventData: pointer to the event information structure + + @see + @return Result of the function call +*/ +WDI_Status +WDI_ProcessTdlsInd +( + WDI_ControlBlockType* pWDICtx, + WDI_EventInfoType* pEventData +) +{ + WDI_LowLevelIndType wdiInd; + tTdlsIndMsg halTdlsIndMsg; + /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + + /*------------------------------------------------------------------------- + Sanity check + -------------------------------------------------------------------------*/ + if (( NULL == pWDICtx ) || ( NULL == pEventData ) || + ( NULL == pEventData->pEventData )) + { + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, + "%s: Invalid parameters", __func__); + WDI_ASSERT( 0 ); + return WDI_STATUS_E_FAILURE; + } + + /*------------------------------------------------------------------------- + Extract indication and send it to UMAC + -------------------------------------------------------------------------*/ + wpalMemoryCopy( &halTdlsIndMsg.tdlsIndParams, + pEventData->pEventData, + sizeof(halTdlsIndMsg.tdlsIndParams) ); + + /*Fill in the indication parameters*/ + wdiInd.wdiIndicationType = WDI_TDLS_IND; + + wdiInd.wdiIndicationData.wdiTdlsIndInfo.status + = halTdlsIndMsg.tdlsIndParams.status; + + wdiInd.wdiIndicationData.wdiTdlsIndInfo.staIdx + = halTdlsIndMsg.tdlsIndParams.staIdx; + + wdiInd.wdiIndicationData.wdiTdlsIndInfo.reasonCode + = halTdlsIndMsg.tdlsIndParams.reasonCode; + + /*Notify UMAC*/ + pWDICtx->wdiLowLevelIndCB( &wdiInd, pWDICtx->pIndUserData ); + + return WDI_STATUS_SUCCESS; +}/*WDI_ProcessTdlsInd*/ +#endif + +#ifdef FEATURE_CESIUM_PROPRIETARY +/** +*@brief Process Tx Fail Indication + + @param pWDICtx: pointer to the WLAN DAL context + pEventData: pointer to the event information structure + + @see + @return Result of the function call +*/ +WDI_Status +WDI_ProcessTXFailInd +( + WDI_ControlBlockType* pWDICtx, + WDI_EventInfoType* pEventData +) +{ + WDI_LowLevelIndType wdiInd; + tHalTXFailIndMsg halTXFailIndMsg; + /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + + /*------------------------------------------------------------------------- + Sanity check + -------------------------------------------------------------------------*/ + if (( NULL == pWDICtx ) || ( NULL == pEventData ) || + ( NULL == pEventData->pEventData )) + { + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, + "%s: Invalid parameters", __func__); + WDI_ASSERT( 0 ); + return WDI_STATUS_E_FAILURE; + } + /*------------------------------------------------------------------------- + Extract indication and send it to UMAC + -------------------------------------------------------------------------*/ + wpalMemoryCopy( &halTXFailIndMsg.txFailIndParams, + pEventData->pEventData, + sizeof(halTXFailIndMsg.txFailIndParams) ); + + /*Fill in the indication parameters*/ + wdiInd.wdiIndicationType = WDI_TX_FAIL_IND; + + wdiInd.wdiIndicationData.wdiTXFailInd.seqNo + = halTXFailIndMsg.txFailIndParams.seqNo; + + wpalMemoryCopy(wdiInd.wdiIndicationData.wdiTXFailInd.macAddr, + halTXFailIndMsg.txFailIndParams.macAddr, + sizeof(wdiInd.wdiIndicationData.wdiTXFailInd.macAddr)); + + /*Notify UMAC*/ + if (pWDICtx->wdiLowLevelIndCB) + pWDICtx->wdiLowLevelIndCB( &wdiInd, pWDICtx->pIndUserData ); + + return WDI_STATUS_SUCCESS; +}/*WDI_ProcessTdlsInd*/ +#endif /* FEATURE_CESIUM_PROPRIETARY */ /** *@brief Process Noa Start Indication function (called when @@ -19554,6 +20582,52 @@ WDI_ProcessTxPerHitInd return WDI_STATUS_SUCCESS; }/*WDI_ProcessTxPerHitInd*/ +/** + @brief Process Periodic Tx Pattern Fw Indication function + + @param pWDICtx: pointer to the WLAN DAL context + pEventData: pointer to the event information structure + + @see + @return Result of the function call +*/ +WDI_Status +WDI_ProcessPeriodicTxPtrnFwInd +( + WDI_ControlBlockType* pWDICtx, + WDI_EventInfoType* pEventData +) +{ + WDI_LowLevelIndType wdiInd; + + /*------------------------------------------------------------------------- + Sanity check + -------------------------------------------------------------------------*/ + if ((NULL == pWDICtx) || (NULL == pEventData) || + (NULL == pEventData->pEventData)) + { + WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, + "%s: Invalid parameters", __func__); + WDI_ASSERT(0); + return WDI_STATUS_E_FAILURE; + } + + /*------------------------------------------------------------------------- + Extract indication and send it to UMAC + -------------------------------------------------------------------------*/ + wpalMemoryCopy(&(wdiInd.wdiIndicationData.wdiPeriodicTxPtrnFwInd), + (tHalPeriodicTxPtrnFwInd *)pEventData->pEventData, + sizeof(tHalPeriodicTxPtrnFwInd)); + + if (pWDICtx->wdiLowLevelIndCB) + { + /*Notify UMAC*/ + pWDICtx->wdiLowLevelIndCB(&wdiInd, pWDICtx->pIndUserData); + } + + return WDI_STATUS_SUCCESS; +} + /** @brief WDI_ProcessFTMCommandReq Process FTM Command, simply route to HAL @@ -19719,7 +20793,7 @@ WDI_ProcessHALDumpCmdReq (usDataOffset + sizeof(halDumpCmdReqMsg.dumpCmdReqParams) ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in HAL Dump Command req %x %x %x", + "Unable to get send buffer in HAL Dump Command req %p %p %p", pEventData, pwdiHALDumpCmdParams, wdiHALDumpCmdRspCb); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -19975,7 +21049,18 @@ WDI_RXMsgCTSCB wdiEventData.wdiResponse, WDI_getRespMsgString(pWDICtx->wdiExpectedResponse), pWDICtx->wdiExpectedResponse); - /* WDI_DetectedDeviceError( pWDICtx, WDI_ERR_INVALID_RSP_FMT); */ + + if (gWDICb.bEnableSSR == false) + { + WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL, + "SSR is not enabled on WDI timeout"); + WDI_DetectedDeviceError(pWDICtx, WDI_ERR_BASIC_OP_FAILURE); + return; + } + wpalWcnssResetIntr(); + /* if this timer fires, it means Riva did not receive the FIQ */ + wpalTimerStart(&pWDICtx->ssrTimer, WDI_SSR_TIMEOUT); + return; } @@ -20047,7 +21132,7 @@ WDI_ProcessRequest ( NULL != pfnReqProcTbl[pEventData->wdiRequest] )) { WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO, - "Calling request processing function for req %s (%d) %x", + "Calling request processing function for req %s (%d) %p", WDI_getReqMsgString(pEventData->wdiRequest), pEventData->wdiRequest, pfnReqProcTbl[pEventData->wdiRequest]); return pfnReqProcTbl[pEventData->wdiRequest](pWDICtx, pEventData); @@ -20398,7 +21483,7 @@ WDI_ResponseTimerCB { WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL, "WDI_ResponseTimerCB: timer in running state on timer event, " - "ignore tmr event, timeStampTmrStart: %ld, timeStampTmrExp: %ld", + "ignore tmr event, timeStampTmrStart: %u, timeStampTmrExp: %u", pWDICtx->uTimeStampRspTmrStart, pWDICtx->uTimeStampRspTmrExp); return; } @@ -20408,7 +21493,7 @@ WDI_ResponseTimerCB WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL, "Timeout occurred while waiting for %s (%d) message from device " - " - catastrophic failure, timeStampTmrStart: %ld, timeStampTmrExp: %ld", + " - catastrophic failure, timeStampTmrStart: %u, timeStampTmrExp: %u", WDI_getRespMsgString(pWDICtx->wdiExpectedResponse), pWDICtx->wdiExpectedResponse, pWDICtx->uTimeStampRspTmrStart, pWDICtx->uTimeStampRspTmrExp); @@ -20439,7 +21524,7 @@ WDI_ResponseTimerCB { WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, "Timeout occurred but not waiting for any response %d " - "timeStampTmrStart: %ld, timeStampTmrExp: %ld", + "timeStampTmrStart: %u, timeStampTmrExp: %u", pWDICtx->wdiExpectedResponse, pWDICtx->uTimeStampRspTmrStart, pWDICtx->uTimeStampRspTmrExp); } @@ -20475,7 +21560,7 @@ WDI_ProcessResponse ( NULL != pfnRspProcTbl[pEventData->wdiResponse] )) { WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO, - "Calling response processing function for resp %s (%d) %x", + "Calling response processing function for resp %s (%d) %p", WDI_getRespMsgString(pEventData->wdiResponse), pEventData->wdiResponse, pfnRspProcTbl[pEventData->wdiResponse]); return pfnRspProcTbl[pEventData->wdiResponse](pWDICtx, pEventData); @@ -21507,7 +22592,7 @@ WDI_Status WDI_SendNvBlobReq (usDataOffset + sizeof(halNvImgDownloadParam.nvImageReqParams) + usCurrentFragmentSize ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in NV Download req %x %x ", + "Unable to get send buffer in NV Download req %p %p ", pEventData, pwdiNvDownloadReqParams); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -21713,10 +22798,16 @@ WDI_2_HAL_REQ_TYPE return WLAN_HAL_UPDATE_PROBE_RSP_TEMPLATE_REQ; case WDI_SET_MAX_TX_POWER_REQ: return WLAN_HAL_SET_MAX_TX_POWER_REQ; + case WDI_SET_MAX_TX_POWER_PER_BAND_REQ: + return WLAN_HAL_SET_MAX_TX_POWER_PER_BAND_REQ; case WDI_SET_TX_POWER_REQ: return WLAN_HAL_SET_TX_POWER_REQ; case WDI_P2P_GO_NOTICE_OF_ABSENCE_REQ: return WLAN_HAL_SET_P2P_GONOA_REQ; +#ifdef FEATURE_WLAN_TDLS + case WDI_TDLS_LINK_ESTABLISH_REQ: + return WLAN_HAL_TDLS_LINK_ESTABLISHED_REQ; +#endif case WDI_ENTER_IMPS_REQ: return WLAN_HAL_ENTER_IMPS_REQ; case WDI_EXIT_IMPS_REQ: @@ -21786,8 +22877,8 @@ WDI_2_HAL_REQ_TYPE case WDI_KEEP_ALIVE_REQ: return WLAN_HAL_KEEP_ALIVE_REQ; #ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD - case WDI_START_ROAM_CANDIDATE_LOOKUP_REQ: - return WLAN_START_ROAM_CANDIDATE_LOOKUP_REQ; + case WDI_ROAM_SCAN_OFFLOAD_REQ: + return WLAN_ROAM_SCAN_OFFLOAD_REQ; #endif #ifdef FEATURE_WLAN_SCAN_PNO case WDI_SET_PREF_NETWORK_REQ: @@ -21832,6 +22923,47 @@ WDI_2_HAL_REQ_TYPE #endif case WDI_GET_ROAM_RSSI_REQ: return WLAN_HAL_GET_ROAM_RSSI_REQ; + case WDI_DHCP_START_IND: + return WLAN_HAL_DHCP_START_IND; + case WDI_DHCP_STOP_IND: + return WLAN_HAL_DHCP_STOP_IND; +#ifdef FEATURE_WLAN_LPHB + case WDI_LPHB_CFG_REQ: + return WLAN_HAL_LPHB_CFG_REQ; +#endif /* FEATURE_WLAN_LPHB */ + case WDI_ADD_PERIODIC_TX_PATTERN_IND: + return WLAN_HAL_ADD_PERIODIC_TX_PTRN_IND; + case WDI_DEL_PERIODIC_TX_PATTERN_IND: + return WLAN_HAL_DEL_PERIODIC_TX_PTRN_IND; +#if defined WLAN_FEATURE_RELIABLE_MCAST + case WDI_LBP_LEADER_REQ: + return WLAN_HAL_LBP_LEADER_REQ; + case WDI_LBP_UPDATE_IND: + return WLAN_HAL_LBP_UPDATE_IND; +#endif /* WLAN_FEATURE_RELIABLE_MCAST */ + +#ifdef FEATURE_CESIUM_PROPRIETARY + case WDI_HAL_IBSS_PEER_INFO_REQ: + return WLAN_HAL_GET_IBSS_PEER_INFO_REQ; + case WDI_IBSS_ROUTE_TABLE_UPDATE_IND: + return WLAN_HAL_IP_FORWARD_TABLE_UPDATE_IND; +#endif /* FEATURE_CESIUM_PROPRIETARY */ + case WDI_RATE_UPDATE_IND: + return WLAN_HAL_RATE_UPDATE_IND; + +#ifdef FEATURE_WLAN_BATCH_SCAN + case WDI_SET_BATCH_SCAN_REQ: + return WLAN_HAL_BATCHSCAN_SET_REQ; + case WDI_STOP_BATCH_SCAN_IND: + return WLAN_HAL_BATCHSCAN_STOP_IND; + case WDI_TRIGGER_BATCH_SCAN_RESULT_IND: + return WLAN_HAL_BATCHSCAN_TRIGGER_RESULT_IND; +#endif + +#ifdef FEATURE_CESIUM_PROPRIETARY + case WDI_TX_FAIL_MONITOR_IND: + return WLAN_HAL_TX_FAIL_MONITOR_IND; +#endif default: return WLAN_HAL_MSG_MAX; } @@ -21942,10 +23074,18 @@ HAL_2_WDI_RSP_TYPE return WDI_HAL_TX_PER_HIT_IND; case WLAN_HAL_SET_MAX_TX_POWER_RSP: return WDI_SET_MAX_TX_POWER_RESP; + case WLAN_HAL_SET_MAX_TX_POWER_PER_BAND_RSP: + return WDI_SET_MAX_TX_POWER_PER_BAND_RSP; case WLAN_HAL_SET_TX_POWER_RSP: return WDI_SET_TX_POWER_RESP; case WLAN_HAL_SET_P2P_GONOA_RSP: return WDI_P2P_GO_NOTICE_OF_ABSENCE_RESP; +#ifdef FEATURE_WLAN_TDLS + case WLAN_HAL_TDLS_LINK_ESTABLISHED_RSP: + return WDI_TDLS_LINK_ESTABLISH_REQ_RESP; + case WLAN_HAL_TDLS_IND: + return WDI_HAL_TDLS_IND; +#endif case WLAN_HAL_ENTER_IMPS_RSP: return WDI_ENTER_IMPS_RESP; case WLAN_HAL_EXIT_IMPS_RSP: @@ -22013,8 +23153,8 @@ case WLAN_HAL_DEL_STA_SELF_RSP: return WDI_HAL_PREF_NETWORK_FOUND_IND; #endif // FEATURE_WLAN_SCAN_PNO #ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD - case WLAN_START_ROAM_CANDIDATE_LOOKUP_RSP: - return WDI_START_ROAM_CANDIDATE_LOOKUP_RESP; + case WLAN_ROAM_SCAN_OFFLOAD_RSP: + return WDI_ROAM_SCAN_OFFLOAD_RESP; #endif case WLAN_HAL_SET_TX_PER_TRACKING_RSP: return WDI_SET_TX_PER_TRACKING_RESP; @@ -22061,6 +23201,43 @@ case WLAN_HAL_DEL_STA_SELF_RSP: case WLAN_HAL_GET_ROAM_RSSI_RSP: return WDI_GET_ROAM_RSSI_RESP; #endif + +#ifdef FEATURE_WLAN_LPHB + case WLAN_HAL_LPHB_IND: + return WDI_HAL_LPHB_IND; + case WLAN_HAL_LPHB_CFG_RSP: + return WDI_LPHB_CFG_RESP; +#endif /* FEATURE_WLAN_LPHB */ + + case WLAN_HAL_IBSS_PEER_INACTIVITY_IND: + return WDI_HAL_IBSS_PEER_INACTIVITY_IND; + case WLAN_HAL_PERIODIC_TX_PTRN_FW_IND: + return WDI_HAL_PERIODIC_TX_PTRN_FW_IND; + +#if defined WLAN_FEATURE_RELIABLE_MCAST + case WLAN_HAL_LBP_LEADER_RSP: + return WDI_LBP_LEADER_RESP; + case WLAN_HAL_LBP_UPDATE_IND: + return WDI_LBP_UPDATE_IND_TO_HOST; +#endif /* WLAN_FEATURE_RELIABLE_MCAST */ + +#ifdef FEATURE_CESIUM_PROPRIETARY + case WLAN_HAL_GET_IBSS_PEER_INFO_RSP: + return WDI_HAL_IBSS_PEER_INFO_RSP; +#endif /* FEATURE_CESIUM_PROPRIETARY */ + +#ifdef FEATURE_WLAN_BATCH_SCAN + case WLAN_HAL_BATCHSCAN_SET_RSP: + return WDI_SET_BATCH_SCAN_RESP; + case WLAN_HAL_BATCHSCAN_RESULT_IND: + return WDI_BATCHSCAN_RESULT_IND; +#endif // FEATURE_WLAN_BATCH_SCAN + +#ifdef FEATURE_CESIUM_PROPRIETARY + case WLAN_HAL_TX_FAIL_IND: + return WDI_HAL_TX_FAIL_IND; +#endif /* FEATURE_CESIUM_PROPRIETARY */ + default: return eDRIVER_TYPE_MAX; } @@ -22441,6 +23618,9 @@ WDI_2_HAL_LINK_STATE case WDI_LINK_LISTEN_STATE: return eSIR_LINK_LISTEN_STATE; + case WDI_LINK_SEND_ACTION_STATE: + return eSIR_LINK_SEND_ACTION_STATE; + default: return eSIR_LINK_MAX; } @@ -23300,7 +24480,7 @@ WDI_PackPreferredNetworkList ( usSendSize < (usDataOffset + sizeof(tPrefNetwListParams) ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in Set PNO req %x ", + "Unable to get send buffer in Set PNO req %p", pwdiPNOScanReqParams); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -23453,7 +24633,7 @@ WDI_PackPreferredNetworkListNew ( usSendSize < (usDataOffset + sizeof(tPrefNetwListParamsNew) ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in Set PNO req %x ", + "Unable to get send buffer in Set PNO req %p", pwdiPNOScanReqParams); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -23691,7 +24871,7 @@ WDI_ProcessSetRssiFilterReq ( usSendSize < (usDataOffset + sizeof(ucRssiThreshold) ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in Set PNO req %x %x %x", + "Unable to get send buffer in Set PNO req %p %p %p", pEventData, pwdiRssiFilterReqParams, wdiRssiFilterCb); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -23714,9 +24894,9 @@ WDI_ProcessSetRssiFilterReq } #ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD /** - @brief WDI_StartRoamCandidateLookupReq + @brief WDI_RoamScanOffloadReq - @param pwdiRoamCandidateLookupReqParams: the LookupReq as specified + @param pwdiRoamScanOffloadReqParams: the LookupReq as specified by the Device Interface wdiRoamOffloadScancb: callback for passing back the response @@ -23728,9 +24908,9 @@ WDI_ProcessSetRssiFilterReq @return Result of the function call */ WDI_Status -WDI_StartRoamCandidateLookupReq +WDI_RoamScanOffloadReq ( - WDI_RoamCandidateLookupReqParamsType* pwdiRoamCandidateLookupReqParams, + WDI_RoamScanOffloadReqParamsType* pwdiRoamScanOffloadReqParams, WDI_RoamOffloadScanCb wdiRoamOffloadScancb, void* pUserData ) @@ -23752,9 +24932,9 @@ WDI_StartRoamCandidateLookupReq /*------------------------------------------------------------------------ Fill in Event data and post to the Main FSM ------------------------------------------------------------------------*/ - wdiEventData.wdiRequest = WDI_START_ROAM_CANDIDATE_LOOKUP_REQ; - wdiEventData.pEventData = pwdiRoamCandidateLookupReqParams; - wdiEventData.uEventDataSize = sizeof(*pwdiRoamCandidateLookupReqParams); + wdiEventData.wdiRequest = WDI_ROAM_SCAN_OFFLOAD_REQ; + wdiEventData.pEventData = pwdiRoamScanOffloadReqParams; + wdiEventData.uEventDataSize = sizeof(*pwdiRoamScanOffloadReqParams); wdiEventData.pCBfnc = wdiRoamOffloadScancb; wdiEventData.pUserData = pUserData; @@ -23803,7 +24983,7 @@ WDI_wdiEdTypeEncToEdTypeEnc(tEdType *EdType, WDI_EdType wdiEdType) Request parameters @param pWDICtx: pointer to the WLAN DAL context - pwdiRoamCandidateLookupReqParams: pointer to the info received + pwdiRoamScanOffloadReqParams: pointer to the info received from upper layers ppSendBuffer, pSize - out pointers of the packed buffer and its size @@ -23812,10 +24992,10 @@ WDI_wdiEdTypeEncToEdTypeEnc(tEdType *EdType, WDI_EdType wdiEdType) */ WDI_Status -WDI_PackStartRoamCandidateLookup +WDI_PackRoamScanOffloadParams ( WDI_ControlBlockType* pWDICtx, - WDI_RoamCandidateLookupReqParamsType* pwdiRoamCandidateLookupReqParams, + WDI_RoamScanOffloadReqParamsType* pwdiRoamScanOffloadReqParams, wpt_uint8** ppSendBuffer, wpt_uint16* pSize ) @@ -23828,87 +25008,104 @@ WDI_PackStartRoamCandidateLookup /*----------------------------------------------------------------------- Get message buffer -----------------------------------------------------------------------*/ - if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_START_ROAM_CANDIDATE_LOOKUP_REQ, + if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_ROAM_SCAN_OFFLOAD_REQ, sizeof(tRoamCandidateListParams), &pSendBuffer, &usDataOffset, &usSendSize))|| - ( usSendSize < (usDataOffset + sizeof(tpRoamCandidateListParams) ))) + ( usSendSize < (usDataOffset + sizeof(tRoamCandidateListParams) ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in Start Roam Candidate Lookup Req %x ", - pwdiRoamCandidateLookupReqParams); + "Unable to get send buffer in Start Roam Candidate Lookup Req %p", + pwdiRoamScanOffloadReqParams); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; } pRoamCandidateListParams = (tpRoamCandidateListParams)(pSendBuffer + usDataOffset); - wpalMemoryZero(pRoamCandidateListParams, sizeof(tpRoamCandidateListParams)); - pRoamCandidateListParams->RoamScanOffloadEnabled = pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.RoamScanOffloadEnabled; + wpalMemoryZero(pRoamCandidateListParams, sizeof(tRoamCandidateListParams)); + pRoamCandidateListParams->RoamScanOffloadEnabled = pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.RoamScanOffloadEnabled; wpalMemoryCopy(pRoamCandidateListParams->ConnectedNetwork.currAPbssid, - pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork.currAPbssid, + pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork.currAPbssid, HAL_MAC_ADDR_LEN); - pRoamCandidateListParams->ConnectedNetwork.authentication = pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork.authentication; + pRoamCandidateListParams->ConnectedNetwork.authentication = pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork.authentication; WDI_wdiEdTypeEncToEdTypeEnc(&pRoamCandidateListParams->ConnectedNetwork.encryption, - pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork.encryption); + pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork.encryption); WDI_wdiEdTypeEncToEdTypeEnc(&pRoamCandidateListParams->ConnectedNetwork.mcencryption, - pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork.mcencryption); + pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork.mcencryption); pRoamCandidateListParams->ConnectedNetwork.ssId.length - = pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork.ssId.ucLength; + = pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork.ssId.ucLength; wpalMemoryCopy( pRoamCandidateListParams->ConnectedNetwork.ssId.ssId, - pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork.ssId.sSSID, + pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork.ssId.sSSID, pRoamCandidateListParams->ConnectedNetwork.ssId.length); wpalMemoryCopy(pRoamCandidateListParams->ConnectedNetwork.ChannelCache, - pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork.ChannelCache, - pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork.ChannelCount ); - pRoamCandidateListParams->ConnectedNetwork.ChannelCount = pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork.ChannelCount; - pRoamCandidateListParams->ChannelCacheType = pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.ChannelCacheType ; - pRoamCandidateListParams->LookupThreshold = pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.LookupThreshold; - pRoamCandidateListParams->RoamRssiDiff = pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.RoamRssiDiff ; - pRoamCandidateListParams->Command = pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.Command ; - pRoamCandidateListParams->StartScanReason = pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.StartScanReason ; - pRoamCandidateListParams->NeighborScanTimerPeriod = pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.NeighborScanTimerPeriod ; - pRoamCandidateListParams->NeighborRoamScanRefreshPeriod = pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.NeighborRoamScanRefreshPeriod ; - pRoamCandidateListParams->NeighborScanChannelMinTime = pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.NeighborScanChannelMinTime ; - pRoamCandidateListParams->NeighborScanChannelMaxTime = pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.NeighborScanChannelMaxTime ; - pRoamCandidateListParams->EmptyRefreshScanPeriod = pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.EmptyRefreshScanPeriod ; - pRoamCandidateListParams->IsCCXEnabled = pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.IsCCXEnabled ; + pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork.ChannelCache, + pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork.ChannelCount ); + pRoamCandidateListParams->ConnectedNetwork.ChannelCount = pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork.ChannelCount; + pRoamCandidateListParams->ChannelCacheType = pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ChannelCacheType ; + pRoamCandidateListParams->LookupThreshold = pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.LookupThreshold; + pRoamCandidateListParams->RoamRssiDiff = pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.RoamRssiDiff ; + pRoamCandidateListParams->MAWCEnabled = pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.MAWCEnabled ; + pRoamCandidateListParams->Command = pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.Command ; + pRoamCandidateListParams->StartScanReason = pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.StartScanReason ; + pRoamCandidateListParams->NeighborScanTimerPeriod = pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.NeighborScanTimerPeriod ; + pRoamCandidateListParams->NeighborRoamScanRefreshPeriod = pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.NeighborRoamScanRefreshPeriod ; + pRoamCandidateListParams->NeighborScanChannelMinTime = pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.NeighborScanChannelMinTime ; + pRoamCandidateListParams->NeighborScanChannelMaxTime = pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.NeighborScanChannelMaxTime ; + pRoamCandidateListParams->EmptyRefreshScanPeriod = pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.EmptyRefreshScanPeriod ; + pRoamCandidateListParams->IsCCXEnabled = pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.IsCCXEnabled ; wpalMemoryCopy(pRoamCandidateListParams->ValidChannelList, - pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.ValidChannelList, - pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.ValidChannelCount); - pRoamCandidateListParams->ValidChannelCount = pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.ValidChannelCount; - - WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO, - "Values are ssid = %s, RoamOffloadScan=%d,Command=%d,StartScanReason=%d, NeighborScanTimerPeriod=%d, NeighborRoamScanRefreshPeriod=%d,NeighborScanChannelMinTime=%d,NeighborScanChannelMaxTime = %d,EmptyRefreshScanPeriod=%d, mdiePresent=%d,MDID=%d, auth=%d, uce=%d, mce=%d\n", - pRoamCandidateListParams->ConnectedNetwork.ssId.ssId, pRoamCandidateListParams->RoamScanOffloadEnabled, - pRoamCandidateListParams->Command,pRoamCandidateListParams->StartScanReason, - pRoamCandidateListParams->NeighborScanTimerPeriod,pRoamCandidateListParams->NeighborRoamScanRefreshPeriod, - pRoamCandidateListParams->NeighborScanChannelMinTime,pRoamCandidateListParams->NeighborScanChannelMaxTime, - pRoamCandidateListParams->EmptyRefreshScanPeriod,pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.MDID.mdiePresent, - pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.MDID.mobilityDomain, - pRoamCandidateListParams->ConnectedNetwork.authentication, pRoamCandidateListParams->ConnectedNetwork.encryption, - pRoamCandidateListParams->ConnectedNetwork.mcencryption); + pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ValidChannelList, + pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ValidChannelCount); + pRoamCandidateListParams->ValidChannelCount = pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ValidChannelCount; + + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO_HIGH, + "Values are ssid = %s, RoamOffloadScan=%d,Command=%d," + "StartScanReason=%d,NeighborScanTimerPeriod=%d," + "NeighborRoamScanRefreshPeriod=%d,NeighborScanChannelMinTime=%d," + "NeighborScanChannelMaxTime = %d,EmptyRefreshScanPeriod=%d," + "mdiePresent=%d,MDID=%d, auth=%d, uce=%d, mce=%d, nProbes=%d," + "HomeAwayTime=%d", + pRoamCandidateListParams->ConnectedNetwork.ssId.ssId, + pRoamCandidateListParams->RoamScanOffloadEnabled, + pRoamCandidateListParams->Command, + pRoamCandidateListParams->StartScanReason, + pRoamCandidateListParams->NeighborScanTimerPeriod, + pRoamCandidateListParams->NeighborRoamScanRefreshPeriod, + pRoamCandidateListParams->NeighborScanChannelMinTime, + pRoamCandidateListParams->NeighborScanChannelMaxTime, + pRoamCandidateListParams->EmptyRefreshScanPeriod, + pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.MDID.mdiePresent, + pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.MDID.mobilityDomain, + pRoamCandidateListParams->ConnectedNetwork.authentication, + pRoamCandidateListParams->ConnectedNetwork.encryption, + pRoamCandidateListParams->ConnectedNetwork.mcencryption, + pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.nProbes, + pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.HomeAwayTime); pRoamCandidateListParams->us24GProbeSize = - (pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.us24GProbeSize< + (pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.us24GProbeSize< WLAN_HAL_ROAM_SCAN_MAX_PROBE_SIZE)? - pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.us24GProbeSize: + pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.us24GProbeSize: WLAN_HAL_ROAM_SCAN_MAX_PROBE_SIZE; wpalMemoryCopy(pRoamCandidateListParams->a24GProbeTemplate, - pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.a24GProbeTemplate, + pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.a24GProbeTemplate, pRoamCandidateListParams->us24GProbeSize); pRoamCandidateListParams->us5GProbeSize = - (pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.us5GProbeSize< + (pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.us5GProbeSize< WLAN_HAL_ROAM_SCAN_MAX_PROBE_SIZE)? - pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.us5GProbeSize: + pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.us5GProbeSize: WLAN_HAL_ROAM_SCAN_MAX_PROBE_SIZE; wpalMemoryCopy(pRoamCandidateListParams->a5GProbeTemplate, - pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.a5GProbeTemplate, + pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.a5GProbeTemplate, pRoamCandidateListParams->us5GProbeSize); - pRoamCandidateListParams->MDID.mdiePresent = pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.MDID.mdiePresent; - pRoamCandidateListParams->MDID.mobilityDomain = pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.MDID.mobilityDomain; - - WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,"Valid Channel List"); + pRoamCandidateListParams->MDID.mdiePresent = pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.MDID.mdiePresent; + pRoamCandidateListParams->MDID.mobilityDomain = pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.MDID.mobilityDomain; + pRoamCandidateListParams->nProbes = + pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.nProbes; + pRoamCandidateListParams->HomeAwayTime = + pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.HomeAwayTime; + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO_HIGH,"Valid Channel List"); for (i=0; iValidChannelCount ; i++) { - WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,"%d", pRoamCandidateListParams->ValidChannelList[i]); + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO_HIGH,"%d", pRoamCandidateListParams->ValidChannelList[i]); } @@ -23916,7 +25113,7 @@ WDI_PackStartRoamCandidateLookup *ppSendBuffer = pSendBuffer; *pSize = usSendSize; return WDI_STATUS_SUCCESS; -}/*WDI_PackStartRoamCandidateLookup*/ +}/*WDI_PackRoamScanOffloadParams*/ /** @brief Process Start Roam Candidate Lookup Request function @@ -23927,13 +25124,13 @@ WDI_PackStartRoamCandidateLookup @return Result of the function call */ WDI_Status -WDI_ProcessStartRoamCandidatelookupReq +WDI_ProcessRoamScanOffloadReq ( WDI_ControlBlockType* pWDICtx, WDI_EventInfoType* pEventData ) { - WDI_RoamCandidateLookupReqParamsType* pwdiRoamCandidateLookupReqParams = NULL; + WDI_RoamScanOffloadReqParamsType* pwdiRoamScanOffloadReqParams = NULL; WDI_RoamOffloadScanCb wdiRoamOffloadScancb = NULL; wpt_uint8* pSendBuffer = NULL; wpt_uint16 usSendSize = 0; @@ -23942,7 +25139,7 @@ WDI_ProcessStartRoamCandidatelookupReq Sanity check -------------------------------------------------------------------------*/ if (( NULL == pEventData ) || - ( NULL == (pwdiRoamCandidateLookupReqParams = (WDI_RoamCandidateLookupReqParamsType*)pEventData->pEventData)) || + ( NULL == (pwdiRoamScanOffloadReqParams = (WDI_RoamScanOffloadReqParamsType*)pEventData->pEventData)) || ( NULL == (wdiRoamOffloadScancb = (WDI_RoamOffloadScanCb)pEventData->pCBfnc))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, @@ -23957,7 +25154,7 @@ WDI_ProcessStartRoamCandidatelookupReq WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO, "%s: Packing Roam Candidate Lookup request ", __func__); - wdiStatus = WDI_PackStartRoamCandidateLookup( pWDICtx, pwdiRoamCandidateLookupReqParams, + wdiStatus = WDI_PackRoamScanOffloadParams( pWDICtx, pwdiRoamScanOffloadReqParams, &pSendBuffer, &usSendSize); if (( WDI_STATUS_SUCCESS != wdiStatus )|| @@ -23969,14 +25166,14 @@ WDI_ProcessStartRoamCandidatelookupReq return wdiStatus; } - pWDICtx->wdiReqStatusCB = pwdiRoamCandidateLookupReqParams->wdiReqStatusCB; - pWDICtx->pReqStatusUserData = pwdiRoamCandidateLookupReqParams->pUserData; + pWDICtx->wdiReqStatusCB = pwdiRoamScanOffloadReqParams->wdiReqStatusCB; + pWDICtx->pReqStatusUserData = pwdiRoamScanOffloadReqParams->pUserData; /*------------------------------------------------------------------------- - Send WDI_START_ROAM_CANDIDATE_LOOKUP_REQ to HAL + Send WDI_ROAM_SCAN_OFFLOAD_REQ to HAL -------------------------------------------------------------------------*/ return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize, - wdiRoamOffloadScancb, pEventData->pUserData, WDI_START_ROAM_CANDIDATE_LOOKUP_RESP); + wdiRoamOffloadScancb, pEventData->pUserData, WDI_ROAM_SCAN_OFFLOAD_RESP); } /** @@ -23990,7 +25187,7 @@ WDI_ProcessStartRoamCandidatelookupReq @return Result of the function call */ WDI_Status -WDI_ProcessStartRoamCandidatelookupRsp +WDI_ProcessRoamScanOffloadRsp ( WDI_ControlBlockType* pWDICtx, WDI_EventInfoType* pEventData @@ -24026,7 +25223,7 @@ WDI_ProcessStartRoamCandidatelookupRsp wdiRoamOffloadScancb(wdiStatus, pWDICtx->pRspCBUserData); return WDI_STATUS_SUCCESS; -}/*WDI_ProcessStartRoamCandidatelookupRsp*/ +}/* WDI_ProcessRoamScanOffloadRsp */ #endif /** @@ -24064,7 +25261,7 @@ WDI_PackUpdateScanParamsReq ( usSendSize < (usDataOffset + sizeof(updateScanParams) ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in Update Scan Params req %x", + "Unable to get send buffer in Update Scan Params req %p", pwdiUpdateScanParams); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -24144,7 +25341,7 @@ WDI_PackUpdateScanParamsReqEx ( usSendSize < (usDataOffset + sizeof(updateScanParams) ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in Update Scan Params Ex req %x", + "Unable to get send buffer in Update Scan Params Ex req %p", pwdiUpdateScanParams); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -24321,9 +25518,11 @@ WDI_ProcessPrefNetworkFoundInd // DEBUG WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL, - "[PNO WDI] PREF_NETWORK_FOUND_IND Type (%x) data (SSID=%s, RSSI=%d)", + "[PNO WDI] PREF_NETWORK_FOUND_IND Type (%x) data (SSID=%.*s, LENGTH=%u, RSSI=%u)", wdiInd.wdiIndicationType, + wdiInd.wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength, wdiInd.wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID, + wdiInd.wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength, wdiInd.wdiIndicationData.wdiPrefNetworkFoundInd.rssi ); if ( pWDICtx->wdiLowLevelIndCB ) @@ -24468,7 +25667,8 @@ WDI_ProcessUpdateScanParamsRsp } WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO, - "Process UPD scan params ptr : %x", __func__); + "%s: Process UPD scan params ptr : %p", + __func__, pEventData->pEventData); wdiUpdateScanParamsCb = (WDI_UpdateScanParamsCb)pWDICtx->pfncRspCB; @@ -24729,7 +25929,7 @@ WDI_Process8023MulticastListReq { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, "Unable to get send buffer in " - "WDI_Process8023MulticastListReq() %x %x %x", + "WDI_Process8023MulticastListReq() %p %p %p", pEventData, pwdiFltPktSetMcListReqParamsType, wdi8023MulticastListCb); wpalMemoryFree(pRcvFltMcAddrListType); @@ -24835,7 +26035,7 @@ WDI_ProcessReceiveFilterSetFilterReq { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, "%s: Failed to allocate memory for " - "tHalRcvPktFilterCfgType: %x %x %x ", + "tHalRcvPktFilterCfgType: %p %p %p ", __func__, pWDICtx, pEventData, pEventData->pEventData); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -24854,7 +26054,7 @@ WDI_ProcessReceiveFilterSetFilterReq { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, "Unable to get send buffer in " - "WDI_ProcessReceiveFilterSetFilterReq() %x %x %x", + "WDI_ProcessReceiveFilterSetFilterReq() %p %p %p", pEventData, pwdiSetRcvPktFilterReqInfo, wdiReceiveFilterSetFilterCb); WDI_ASSERT(0); @@ -24863,7 +26063,7 @@ WDI_ProcessReceiveFilterSetFilterReq } WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, - "UsData Off %d UsSend %d cfg %d",usDataOffset, + "UsData Off %d UsSend %d cfg %p",usDataOffset, usSendSize,pSessRcvPktFilterCfg); pSessRcvPktFilterCfg->filterId = pwdiSetRcvPktFilterReqInfo->wdiPktFilterCfg.filterId; @@ -24899,17 +26099,17 @@ WDI_ProcessReceiveFilterSetFilterReq 8); WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, - "Out:Proto %d Comp Flag %d \n", + "Out:Proto %d Comp Flag %d", pSessRcvPktFilterCfg->paramsData[i].protocolLayer, pSessRcvPktFilterCfg->paramsData[i].cmpFlag); WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, - "Data Offset %d Data Len %d\n", + "Data Offset %d Data Len %d", pSessRcvPktFilterCfg->paramsData[i].dataOffset, pSessRcvPktFilterCfg->paramsData[i].dataLength); WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, - "CData: %d:%d:%d:%d:%d:%d\n", + "CData: %d:%d:%d:%d:%d:%d", pSessRcvPktFilterCfg->paramsData[i].compareData[0], pSessRcvPktFilterCfg->paramsData[i].compareData[1], pSessRcvPktFilterCfg->paramsData[i].compareData[2], @@ -24918,7 +26118,7 @@ WDI_ProcessReceiveFilterSetFilterReq pSessRcvPktFilterCfg->paramsData[i].compareData[5]); WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, - "MData: %d:%d:%d:%d:%d:%d\n", + "MData: %d:%d:%d:%d:%d:%d", pSessRcvPktFilterCfg->paramsData[i].dataMask[0], pSessRcvPktFilterCfg->paramsData[i].dataMask[1], pSessRcvPktFilterCfg->paramsData[i].dataMask[2], @@ -24952,7 +26152,7 @@ WDI_ProcessReceiveFilterSetFilterReq { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, "%s: Failed to allocate memory for " - "tHalRcvPktFilterCfgType: %x %x %x ", + "tHalRcvPktFilterCfgType: %p %p %p ", __func__, pWDICtx, pEventData, pEventData->pEventData); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -24970,7 +26170,7 @@ WDI_ProcessReceiveFilterSetFilterReq { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, "Unable to get send buffer in " - "WDI_ProcessReceiveFilterSetFilterReq() %x %x %x", + "WDI_ProcessReceiveFilterSetFilterReq() %p %p %p", pEventData, pwdiSetRcvPktFilterReqInfo, wdiReceiveFilterSetFilterCb); WDI_ASSERT(0); @@ -25013,17 +26213,17 @@ WDI_ProcessReceiveFilterSetFilterReq 8); WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO, - "Out:Proto %d Comp Flag %d \n", + "Out:Proto %d Comp Flag %d", pRcvPktFilterCfg->paramsData[i].protocolLayer, pRcvPktFilterCfg->paramsData[i].cmpFlag); WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO, - "Data Offset %d Data Len %d\n", + "Data Offset %d Data Len %d", pRcvPktFilterCfg->paramsData[i].dataOffset, pRcvPktFilterCfg->paramsData[i].dataLength); WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO, - "CData: %d:%d:%d:%d:%d:%d\n", + "CData: %d:%d:%d:%d:%d:%d", pRcvPktFilterCfg->paramsData[i].compareData[0], pRcvPktFilterCfg->paramsData[i].compareData[1], pRcvPktFilterCfg->paramsData[i].compareData[2], @@ -25032,7 +26232,7 @@ WDI_ProcessReceiveFilterSetFilterReq pRcvPktFilterCfg->paramsData[i].compareData[5]); WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, - "MData: %d:%d:%d:%d:%d:%d\n", + "MData: %d:%d:%d:%d:%d:%d", pRcvPktFilterCfg->paramsData[i].dataMask[0], pRcvPktFilterCfg->paramsData[i].dataMask[1], pRcvPktFilterCfg->paramsData[i].dataMask[2], @@ -25127,7 +26327,7 @@ WDI_ProcessFilterMatchCountReq { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, "Unable to get send buffer in " - "WDI_ProcessFilterMatchCountReq() %x %x %x", + "WDI_ProcessFilterMatchCountReq() %p %p %p", pEventData, pwdiRcvFltPktMatchCntReqParamsType, wdiFilterMatchCountCb); WDI_ASSERT(0); @@ -25219,7 +26419,7 @@ WDI_ProcessReceiveFilterClearFilterReq { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, "Unable to get send buffer in " - "WDI_ProcessReceiveFilterClearFilterReq() %x %x %x", + "WDI_ProcessReceiveFilterClearFilterReq() %p %p %p", pEventData, pwdiRcvFltPktClearReqParamsType, wdiRcvFltPktClearFilterCb); WDI_ASSERT(0); @@ -25627,7 +26827,7 @@ WDI_ProcessSetPowerParamsReq ( usSendSize < (usDataOffset + sizeof(powerParams) ))) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in Set PNO req %x %x %x", + "Unable to get send buffer in Set PNO req %p %p %p", pEventData, pwdiPowerParamsReqParams, wdiPowerParamsCb); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; @@ -25723,1039 +26923,2940 @@ WDI_ProcessSetPowerParamsRsp return WDI_STATUS_SUCCESS; }/*WDI_ProcessSetPowerParamsRsp*/ -#ifdef WLAN_FEATURE_GTK_OFFLOAD /** - @brief WDI_GTKOffloadReq will be called when the upper MAC - wants to set GTK Rekey Counter while in power save. Upon - the call of this API the WLAN DAL will pack and send a - HAL GTK offload request message to the lower RIVA - sub-system if DAL is in state STARTED. - - In state BUSY this request will be queued. Request won't - be allowed in any other state. - - WDI_PostAssocReq must have been called. + @brief WDI_dhcpStartInd + Host will send an event to the FW when DHCP is initiated - @param pwdiGtkOffloadParams: the GTK offload as specified - by the Device Interface - - wdiGtkOffloadCb: callback for passing back the response - of the GTK offload operation received from the device - - pUserData: user data will be passed back with the - callback - - @see WDI_PostAssocReq + @param + WDI_DHCPInd: DHCP Indication + @see @return Result of the function call */ -WDI_Status -WDI_GTKOffloadReq +WDI_Status +WDI_dhcpStartInd ( - WDI_GtkOffloadReqMsg* pwdiGtkOffloadReqMsg, - WDI_GtkOffloadCb wdiGtkOffloadCb, - void* pUserData + WDI_DHCPInd *wdiDHCPInd ) { - WDI_EventInfoType wdiEventData; - /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + WDI_EventInfoType wdiEventData; /*------------------------------------------------------------------------ - Sanity Check + Sanity Check ------------------------------------------------------------------------*/ if ( eWLAN_PAL_FALSE == gWDIInitialized ) { - WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, + WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, "WDI API call before module is initialized - Fail request"); - return WDI_STATUS_E_NOT_ALLOWED; + return WDI_STATUS_E_NOT_ALLOWED; } - /*------------------------------------------------------------------------ - Fill in Event data and post to the Main FSM - ------------------------------------------------------------------------*/ - wdiEventData.wdiRequest = WDI_GTK_OFFLOAD_REQ; - wdiEventData.pEventData = pwdiGtkOffloadReqMsg; - wdiEventData.uEventDataSize = sizeof(*pwdiGtkOffloadReqMsg); - wdiEventData.pCBfnc = wdiGtkOffloadCb; - wdiEventData.pUserData = pUserData; + wdiEventData.wdiRequest = WDI_DHCP_START_IND; + wdiEventData.pEventData = wdiDHCPInd; + wdiEventData.uEventDataSize = sizeof(wdiDHCPInd); + wdiEventData.pCBfnc = NULL; + wdiEventData.pUserData = NULL; return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData); } /** - @brief WDI_GTKOffloadGetInfoReq will be called when the upper - MAC wants to get GTK Rekey Counter while in power save. - Upon the call of this API the WLAN DAL will pack and - send a HAL GTK offload request message to the lower RIVA - sub-system if DAL is in state STARTED. + @brief WDI_dhcpStopInd + Host will send an event to the FW when DHCP is completed - In state BUSY this request will be queued. Request won't - be allowed in any other state. - - WDI_PostAssocReq must have been called. - - @param pwdiGtkOffloadGetInfoReqMsg: the GTK Offload - Information Message as specified by the - Device Interface - - wdiGtkOffloadGetInfoCb: callback for passing back the - response of the GTK offload operation received from the - device - - pUserData: user data will be passed back with the - callback - - @see WDI_PostAssocReq + @param + WDI_DHCPInd: DHCP Indication + @see @return Result of the function call */ -WDI_Status -WDI_GTKOffloadGetInfoReq +WDI_Status +WDI_dhcpStopInd ( - WDI_GtkOffloadGetInfoReqMsg* pwdiGtkOffloadGetInfoReqMsg, - WDI_GtkOffloadGetInfoCb wdiGtkOffloadGetInfoCb, - void* pUserData + WDI_DHCPInd *wdiDHCPInd ) { - WDI_EventInfoType wdiEventData; - /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + WDI_EventInfoType wdiEventData; /*------------------------------------------------------------------------ - Sanity Check + Sanity Check ------------------------------------------------------------------------*/ if ( eWLAN_PAL_FALSE == gWDIInitialized ) { - WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, + WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, "WDI API call before module is initialized - Fail request"); - return WDI_STATUS_E_NOT_ALLOWED; + return WDI_STATUS_E_NOT_ALLOWED; } - /*------------------------------------------------------------------------ - Fill in Event data and post to the Main FSM - ------------------------------------------------------------------------*/ - wdiEventData.wdiRequest = WDI_GTK_OFFLOAD_GETINFO_REQ; - wdiEventData.pEventData = pwdiGtkOffloadGetInfoReqMsg; - wdiEventData.uEventDataSize = sizeof(*pwdiGtkOffloadGetInfoReqMsg); - wdiEventData.pCBfnc = wdiGtkOffloadGetInfoCb; - wdiEventData.pUserData = pUserData; + wdiEventData.wdiRequest = WDI_DHCP_STOP_IND; + wdiEventData.pEventData = wdiDHCPInd; + wdiEventData.uEventDataSize = sizeof(wdiDHCPInd); + wdiEventData.pCBfnc = NULL; + wdiEventData.pUserData = NULL; return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData); } - +#ifdef FEATURE_CESIUM_PROPRIETARY /** - @brief Process set GTK Offload Request function - - @param pWDICtx: pointer to the WLAN DAL context - pEventData: pointer to the event information structure - + @brief WDI_TXFailMonitorInd + Host will send an event to the FW to start TX Fail Monitor + + @param + WDI_TXFailMonitorInd @see @return Result of the function call */ WDI_Status -WDI_ProcessGTKOffloadReq -( - WDI_ControlBlockType* pWDICtx, - WDI_EventInfoType* pEventData +WDI_TXFailMonitorStartStopInd +( + WDI_TXFailMonitorInd *wdiTXFailMonitorInd ) { - WDI_GtkOffloadReqMsg* pwdiGtkOffloadReqMsg = NULL; - WDI_GtkOffloadCb wdiGtkOffloadCb = NULL; - wpt_uint8* pSendBuffer = NULL; - wpt_uint16 usDataOffset = 0; - wpt_uint16 usSendSize = 0; - tHalGtkOffloadReqParams gtkOffloadReqParams = {0}; - wpt_uint8 ucCurrentSessionId = 0; - WDI_BSSSessionType* pBSSSes = NULL; - - /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ - - /*------------------------------------------------------------------------- - Sanity check - -------------------------------------------------------------------------*/ - if (( NULL == pEventData ) || - ( NULL == (pwdiGtkOffloadReqMsg = (WDI_GtkOffloadReqMsg*)pEventData->pEventData)) || - ( NULL == (wdiGtkOffloadCb = (WDI_GtkOffloadCb)pEventData->pCBfnc))) - { - WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "%s: Invalid parameters", __func__); - WDI_ASSERT(0); - goto failRequest; - } + WDI_EventInfoType wdiEventData; - /*----------------------------------------------------------------------- - Get message buffer - -----------------------------------------------------------------------*/ - if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_GTK_OFFLOAD_REQ, - sizeof(gtkOffloadReqParams), - &pSendBuffer, &usDataOffset, &usSendSize))|| - ( usSendSize < (usDataOffset + sizeof(gtkOffloadReqParams) ))) + /*------------------------------------------------------------------------ + Sanity Check + ------------------------------------------------------------------------*/ + if ( eWLAN_PAL_FALSE == gWDIInitialized ) { - WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in GTK offload req %x %x %x", - pEventData, pwdiGtkOffloadReqMsg, wdiGtkOffloadCb); - WDI_ASSERT(0); - goto failRequest; - } + WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, + "WDI API call before module is initialized - Fail request"); - // - // Fill gtkOffloadReqParams from pwdiGtkOffloadReqMsg->gtkOffloadReqParams - // - ucCurrentSessionId = WDI_FindAssocSession( pWDICtx, - pwdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId, - &pBSSSes); - if ( NULL == pBSSSes ) - { - WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, - " %s : Association for this BSSID does not exist", __func__); - goto fail; + return WDI_STATUS_E_NOT_ALLOWED; } - gtkOffloadReqParams.bssIdx = pBSSSes->ucBSSIdx; - - gtkOffloadReqParams.ulFlags = pwdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags; - // Copy KCK - wpalMemoryCopy(&(gtkOffloadReqParams.aKCK[0]), &(pwdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), 16); - // Copy KEK - wpalMemoryCopy(&(gtkOffloadReqParams.aKEK[0]), &(pwdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), 16); - // Copy KeyReplayCounter - wpalMemoryCopy(&(gtkOffloadReqParams.ullKeyReplayCounter), &(pwdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter), sizeof(v_U64_t)); - - wpalMemoryCopy( pSendBuffer+usDataOffset, - >kOffloadReqParams, - sizeof(gtkOffloadReqParams)); - - pWDICtx->wdiReqStatusCB = pwdiGtkOffloadReqMsg->wdiReqStatusCB; - pWDICtx->pReqStatusUserData = pwdiGtkOffloadReqMsg->pUserData; - - /*------------------------------------------------------------------------- - Send Get STA Request to HAL - -------------------------------------------------------------------------*/ - return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize, - wdiGtkOffloadCb, pEventData->pUserData, WDI_GTK_OFFLOAD_RESP); - -fail: - // Release the message buffer so we don't leak - wpalMemoryFree(pSendBuffer); + wdiEventData.wdiRequest = WDI_TX_FAIL_MONITOR_IND; + wdiEventData.pEventData = wdiTXFailMonitorInd; + wdiEventData.uEventDataSize = sizeof(wdiTXFailMonitorInd); + wdiEventData.pCBfnc = NULL; + wdiEventData.pUserData = NULL; -failRequest: - //WDA should have failure check to avoid the memory leak - return WDI_STATUS_E_FAILURE; + return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData); } - +#endif /* FEATURE_CESIUM_PROPRIETARY */ /** - @brief Process GTK Offload Get Information Request function - - @param pWDICtx: pointer to the WLAN DAL context - pEventData: pointer to the event information structure - + @brief Process DHCP Start Indication message and post it to HAL + + @param pWDICtx: pointer to the WLAN DAL context + pEventData: pointer to the event information structure + @see @return Result of the function call */ WDI_Status -WDI_ProcessGTKOffloadGetInfoReq -( +WDI_ProcessDHCPStartInd +( WDI_ControlBlockType* pWDICtx, WDI_EventInfoType* pEventData ) { - WDI_GtkOffloadGetInfoReqMsg* pwdiGtkOffloadGetInfoReqMsg = NULL; - WDI_GtkOffloadGetInfoCb wdiGtkOffloadGetInfoCb = NULL; - wpt_uint8* pSendBuffer = NULL; - wpt_uint16 usDataOffset = 0; - wpt_uint16 usSendSize = 0; - tHalGtkOffloadGetInfoReqParams halGtkOffloadGetInfoReqParams; - wpt_uint8 ucCurrentSessionId = 0; - WDI_BSSSessionType* pBSSSes = NULL; + wpt_uint8* pSendBuffer = NULL; + wpt_uint16 usDataOffset = 0; + wpt_uint16 usSendSize = 0; + wpt_uint16 usLen = 0; + WDI_DHCPInd* pwdiDHCPInd = NULL; + tDHCPInfo* pDHCPInfo; - /*------------------------------------------------------------------------- - Sanity check - -------------------------------------------------------------------------*/ - if (( NULL == pEventData ) || - ( NULL == (pwdiGtkOffloadGetInfoReqMsg = (WDI_GtkOffloadGetInfoReqMsg*)pEventData->pEventData)) || - ( NULL == (wdiGtkOffloadGetInfoCb = (WDI_GtkOffloadGetInfoCb)pEventData->pCBfnc))) - { - WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "%s: Invalid parameters", __func__); - WDI_ASSERT(0); - goto failRequest; - } + /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ - /*----------------------------------------------------------------------- - Get message buffer - -----------------------------------------------------------------------*/ - if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_GTK_OFFLOAD_GETINFO_REQ, - sizeof(halGtkOffloadGetInfoReqParams), - &pSendBuffer, &usDataOffset, &usSendSize))|| - ( usSendSize < ( usDataOffset + sizeof(halGtkOffloadGetInfoReqParams)))) - { - WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in WDI_ProcessGTKOffloadGetInfoReq() %x %x %x", - pEventData, pwdiGtkOffloadGetInfoReqMsg, wdiGtkOffloadGetInfoCb); - WDI_ASSERT(0); - goto failRequest; - } - ucCurrentSessionId = WDI_FindAssocSession( pWDICtx, - pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId, - &pBSSSes); - if ( NULL == pBSSSes ) - { - WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, - " %s : Association for this BSSID does not exist",__func__); - goto fail; - } - halGtkOffloadGetInfoReqParams.bssIdx = pBSSSes->ucBSSIdx; + WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO, + "%s", __func__); - // - // Don't need to fill send buffer other than header - // - wpalMemoryCopy( pSendBuffer+usDataOffset, - &halGtkOffloadGetInfoReqParams, - sizeof(halGtkOffloadGetInfoReqParams)); + /*------------------------------------------------------------------------- + Sanity check + -------------------------------------------------------------------------*/ + if (( NULL == pEventData ) || ( NULL == pEventData->pEventData )) + { + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL, + "%s: Invalid parameters", __func__); + WDI_ASSERT(0); + return WDI_STATUS_E_FAILURE; + } + pwdiDHCPInd = (WDI_DHCPInd*)pEventData->pEventData; + /*----------------------------------------------------------------------- + Get message buffer + -----------------------------------------------------------------------*/ - pWDICtx->wdiReqStatusCB = pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB; - pWDICtx->pReqStatusUserData = pwdiGtkOffloadGetInfoReqMsg->pUserData; + if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, + WDI_DHCP_START_IND, + sizeof(tDHCPInfo), + &pSendBuffer, &usDataOffset, &usSendSize))|| + ( usSendSize < (usDataOffset + usLen ))) + { + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL, + "Unable to get send buffer in DHCP Start req %p ", + pEventData); + WDI_ASSERT(0); + return WDI_STATUS_E_FAILURE; + } - /*------------------------------------------------------------------------- - Send Get STA Request to HAL - -------------------------------------------------------------------------*/ - return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize, - wdiGtkOffloadGetInfoCb, pEventData->pUserData, WDI_GTK_OFFLOAD_GETINFO_RESP); -fail: - // Release the message buffer so we don't leak - wpalMemoryFree(pSendBuffer); + pDHCPInfo = (tDHCPInfo*)pSendBuffer+usDataOffset; + pDHCPInfo->device_mode = pwdiDHCPInd->device_mode; + wpalMemoryCopy(pDHCPInfo->macAddr, pwdiDHCPInd->macAddr, + WDI_MAC_ADDR_LEN); -failRequest: - //WDA should have failure check to avoid the memory leak - return WDI_STATUS_E_FAILURE; -} + pWDICtx->pReqStatusUserData = NULL; + pWDICtx->pfncRspCB = NULL; + + /*------------------------------------------------------------------------- + Send DHCP Start Indication to HAL + -------------------------------------------------------------------------*/ + return WDI_SendIndication( pWDICtx, pSendBuffer, usSendSize); + +}/*WDI_ProcessDHCPStartInd*/ /** - @brief Process host offload Rsp function (called when a - response is being received over the bus from HAL) - - @param pWDICtx: pointer to the WLAN DAL context - pEventData: pointer to the event information structure - + @brief Process DHCP Stop indication message and post it to HAL + + @param pWDICtx: pointer to the WLAN DAL context + pEventData: pointer to the event information structure + @see @return Result of the function call */ WDI_Status -WDI_ProcessGtkOffloadRsp +WDI_ProcessDHCPStopInd +( + WDI_ControlBlockType* pWDICtx, + WDI_EventInfoType* pEventData +) +{ + wpt_uint8* pSendBuffer = NULL; + wpt_uint16 usDataOffset = 0; + wpt_uint16 usSendSize = 0; + wpt_uint16 usLen = 0; + WDI_DHCPInd* pwdiDHCPInd = NULL; + tDHCPInfo* pDHCPInfo; + + /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + + WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO, + "%s", __func__); + + /*------------------------------------------------------------------------- + Sanity check + -------------------------------------------------------------------------*/ + + if (( NULL == pEventData ) || ( NULL == pEventData->pEventData )) + { + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL, + "%s: Invalid parameters", __func__); + WDI_ASSERT(0); + return WDI_STATUS_E_FAILURE; + } + pwdiDHCPInd = (WDI_DHCPInd*)pEventData->pEventData; + /*----------------------------------------------------------------------- + Get message buffer + -----------------------------------------------------------------------*/ + + if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, + WDI_DHCP_STOP_IND, + sizeof(tDHCPInfo), + &pSendBuffer, &usDataOffset, &usSendSize))|| + ( usSendSize < (usDataOffset + usLen ))) + { + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL, + "Unable to get send buffer in DHCP Start req %p ", + pEventData); + WDI_ASSERT(0); + return WDI_STATUS_E_FAILURE; + } + + pDHCPInfo = (tDHCPInfo*)pSendBuffer+usDataOffset; + pDHCPInfo->device_mode = pwdiDHCPInd->device_mode; + wpalMemoryCopy(pDHCPInfo->macAddr, pwdiDHCPInd->macAddr, + WDI_MAC_ADDR_LEN); + + pWDICtx->pReqStatusUserData = NULL; + pWDICtx->pfncRspCB = NULL; + /*------------------------------------------------------------------------- + Send DHCP Stop indication to HAL + -------------------------------------------------------------------------*/ + return WDI_SendIndication( pWDICtx, pSendBuffer, usSendSize); + +}/*WDI_ProcessDHCPStopInd*/ + +#ifdef FEATURE_CESIUM_PROPRIETARY +/** + @brief Process TX Fail monitor indication + + @param pWDICtx: pointer to the WLAN DAL context + pEventData: pointer to the event information structure + + @see + @return Result of the function call +*/ +WDI_Status +WDI_ProcessTXFailMonitor +( + WDI_ControlBlockType* pWDICtx, + WDI_EventInfoType* pEventData +) +{ + wpt_uint8* pSendBuffer = NULL; + wpt_uint16 usDataOffset = 0; + wpt_uint16 usSendSize = 0; + wpt_uint16 usLen = 0; + WDI_TXFailMonitorInd* pwdiTxFailMonitorInd = NULL; + tTXFailMonitorInfo* pTXFailMonitorInfo; + WDI_Status wdiStatus; + /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + + WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO, + "%s", __func__); + + /*------------------------------------------------------------------------- + Sanity check + -------------------------------------------------------------------------*/ + + if (( NULL == pEventData ) || ( NULL == pEventData->pEventData )) + { + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL, + "%s: Invalid parameters", __func__); + WDI_ASSERT(0); + return WDI_STATUS_E_FAILURE; + } + pwdiTxFailMonitorInd = (WDI_TXFailMonitorInd*)pEventData->pEventData; + /*----------------------------------------------------------------------- + Get message buffer + -----------------------------------------------------------------------*/ + + if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, + WDI_TX_FAIL_MONITOR_IND, + sizeof(tDHCPInfo), + &pSendBuffer, &usDataOffset, &usSendSize))|| + ( usSendSize < (usDataOffset + usLen ))) + { + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL, + "Unable to get send buffer in DHCP Start req %p ", + pEventData); + wpalMemoryFree(pwdiTxFailMonitorInd); + WDI_ASSERT(0); + return WDI_STATUS_E_FAILURE; + } + + pTXFailMonitorInfo = (tTXFailMonitorInfo*)pSendBuffer+usDataOffset; + pTXFailMonitorInfo->tx_fail_count = pwdiTxFailMonitorInd->tx_fail_count; + + pWDICtx->pReqStatusUserData = pwdiTxFailMonitorInd->pUserData; + pWDICtx->wdiReqStatusCB = pwdiTxFailMonitorInd->wdiReqStatusCB; + /*------------------------------------------------------------------------- + Send TX Fail Monitor start/stop indication to HAL + -------------------------------------------------------------------------*/ + wdiStatus = WDI_SendIndication( pWDICtx, pSendBuffer, usSendSize); + + wpalMemoryFree(pwdiTxFailMonitorInd); + + return (wdiStatus != WDI_STATUS_SUCCESS)?wdiStatus:WDI_STATUS_SUCCESS_SYNC; +}/*WDI_ProcessTXFailMonitor*/ +#endif /* FEATURE_CESIUM_PROPRIETARY */ + +#ifdef WLAN_FEATURE_GTK_OFFLOAD +/** + @brief WDI_GTKOffloadReq will be called when the upper MAC + wants to set GTK Rekey Counter while in power save. Upon + the call of this API the WLAN DAL will pack and send a + HAL GTK offload request message to the lower RIVA + sub-system if DAL is in state STARTED. + + In state BUSY this request will be queued. Request won't + be allowed in any other state. + + WDI_PostAssocReq must have been called. + + @param pwdiGtkOffloadParams: the GTK offload as specified + by the Device Interface + + wdiGtkOffloadCb: callback for passing back the response + of the GTK offload operation received from the device + + pUserData: user data will be passed back with the + callback + + @see WDI_PostAssocReq + @return Result of the function call +*/ +WDI_Status +WDI_GTKOffloadReq +( + WDI_GtkOffloadReqMsg* pwdiGtkOffloadReqMsg, + WDI_GtkOffloadCb wdiGtkOffloadCb, + void* pUserData +) +{ + WDI_EventInfoType wdiEventData; + /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + + /*------------------------------------------------------------------------ + Sanity Check + ------------------------------------------------------------------------*/ + if ( eWLAN_PAL_FALSE == gWDIInitialized ) + { + WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, + "WDI API call before module is initialized - Fail request"); + + return WDI_STATUS_E_NOT_ALLOWED; + } + + /*------------------------------------------------------------------------ + Fill in Event data and post to the Main FSM + ------------------------------------------------------------------------*/ + wdiEventData.wdiRequest = WDI_GTK_OFFLOAD_REQ; + wdiEventData.pEventData = pwdiGtkOffloadReqMsg; + wdiEventData.uEventDataSize = sizeof(*pwdiGtkOffloadReqMsg); + wdiEventData.pCBfnc = wdiGtkOffloadCb; + wdiEventData.pUserData = pUserData; + + return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData); +} + + +/** + @brief WDI_GTKOffloadGetInfoReq will be called when the upper + MAC wants to get GTK Rekey Counter while in power save. + Upon the call of this API the WLAN DAL will pack and + send a HAL GTK offload request message to the lower RIVA + sub-system if DAL is in state STARTED. + + In state BUSY this request will be queued. Request won't + be allowed in any other state. + + WDI_PostAssocReq must have been called. + + @param pwdiGtkOffloadGetInfoReqMsg: the GTK Offload + Information Message as specified by the + Device Interface + + wdiGtkOffloadGetInfoCb: callback for passing back the + response of the GTK offload operation received from the + device + + pUserData: user data will be passed back with the + callback + + @see WDI_PostAssocReq + @return Result of the function call +*/ +WDI_Status +WDI_GTKOffloadGetInfoReq +( + WDI_GtkOffloadGetInfoReqMsg* pwdiGtkOffloadGetInfoReqMsg, + WDI_GtkOffloadGetInfoCb wdiGtkOffloadGetInfoCb, + void* pUserData +) +{ + WDI_EventInfoType wdiEventData; + /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + + /*------------------------------------------------------------------------ + Sanity Check + ------------------------------------------------------------------------*/ + if ( eWLAN_PAL_FALSE == gWDIInitialized ) + { + WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, + "WDI API call before module is initialized - Fail request"); + + return WDI_STATUS_E_NOT_ALLOWED; + } + + /*------------------------------------------------------------------------ + Fill in Event data and post to the Main FSM + ------------------------------------------------------------------------*/ + wdiEventData.wdiRequest = WDI_GTK_OFFLOAD_GETINFO_REQ; + wdiEventData.pEventData = pwdiGtkOffloadGetInfoReqMsg; + wdiEventData.uEventDataSize = sizeof(*pwdiGtkOffloadGetInfoReqMsg); + wdiEventData.pCBfnc = wdiGtkOffloadGetInfoCb; + wdiEventData.pUserData = pUserData; + + return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData); +} + + +/** + @brief Process set GTK Offload Request function + + @param pWDICtx: pointer to the WLAN DAL context + pEventData: pointer to the event information structure + + @see + @return Result of the function call +*/ +WDI_Status +WDI_ProcessGTKOffloadReq ( WDI_ControlBlockType* pWDICtx, WDI_EventInfoType* pEventData ) { - eHalStatus halStatus; - WDI_GtkOffloadCb wdiGtkOffloadCb = NULL; - tHalGtkOffloadRspParams halGtkOffloadRspParams; - WDI_GtkOffloadRspParams wdiGtkOffloadRsparams; + WDI_GtkOffloadReqMsg* pwdiGtkOffloadReqMsg = NULL; + WDI_GtkOffloadCb wdiGtkOffloadCb = NULL; + wpt_uint8* pSendBuffer = NULL; + wpt_uint16 usDataOffset = 0; + wpt_uint16 usSendSize = 0; + tHalGtkOffloadReqParams gtkOffloadReqParams = {0}; + wpt_uint8 ucCurrentSessionId = 0; + WDI_BSSSessionType* pBSSSes = NULL; + + /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + + /*------------------------------------------------------------------------- + Sanity check + -------------------------------------------------------------------------*/ + if (( NULL == pEventData ) || + ( NULL == (pwdiGtkOffloadReqMsg = (WDI_GtkOffloadReqMsg*)pEventData->pEventData)) || + ( NULL == (wdiGtkOffloadCb = (WDI_GtkOffloadCb)pEventData->pCBfnc))) + { + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, + "%s: Invalid parameters", __func__); + WDI_ASSERT(0); + goto failRequest; + } + + /*----------------------------------------------------------------------- + Get message buffer + -----------------------------------------------------------------------*/ + if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_GTK_OFFLOAD_REQ, + sizeof(gtkOffloadReqParams), + &pSendBuffer, &usDataOffset, &usSendSize))|| + ( usSendSize < (usDataOffset + sizeof(gtkOffloadReqParams) ))) + { + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, + "Unable to get send buffer in GTK offload req %p %p %p", + pEventData, pwdiGtkOffloadReqMsg, wdiGtkOffloadCb); + WDI_ASSERT(0); + goto failRequest; + } + + // + // Fill gtkOffloadReqParams from pwdiGtkOffloadReqMsg->gtkOffloadReqParams + // + ucCurrentSessionId = WDI_FindAssocSession( pWDICtx, + pwdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId, + &pBSSSes); + if ( NULL == pBSSSes ) + { + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, + " %s : Association for this BSSID does not exist", __func__); + goto fail; + } + + gtkOffloadReqParams.bssIdx = pBSSSes->ucBSSIdx; + + gtkOffloadReqParams.ulFlags = pwdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags; + // Copy KCK + wpalMemoryCopy(&(gtkOffloadReqParams.aKCK[0]), &(pwdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), 16); + // Copy KEK + wpalMemoryCopy(&(gtkOffloadReqParams.aKEK[0]), &(pwdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), 16); + // Copy KeyReplayCounter + wpalMemoryCopy(&(gtkOffloadReqParams.ullKeyReplayCounter), &(pwdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter), sizeof(v_U64_t)); + + wpalMemoryCopy( pSendBuffer+usDataOffset, + >kOffloadReqParams, + sizeof(gtkOffloadReqParams)); + + pWDICtx->wdiReqStatusCB = pwdiGtkOffloadReqMsg->wdiReqStatusCB; + pWDICtx->pReqStatusUserData = pwdiGtkOffloadReqMsg->pUserData; + + /*------------------------------------------------------------------------- + Send Get STA Request to HAL + -------------------------------------------------------------------------*/ + return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize, + wdiGtkOffloadCb, pEventData->pUserData, WDI_GTK_OFFLOAD_RESP); + +fail: + // Release the message buffer so we don't leak + wpalMemoryFree(pSendBuffer); + +failRequest: + //WDA should have failure check to avoid the memory leak + return WDI_STATUS_E_FAILURE; +} + + +/** + @brief Process GTK Offload Get Information Request function + + @param pWDICtx: pointer to the WLAN DAL context + pEventData: pointer to the event information structure + + @see + @return Result of the function call +*/ +WDI_Status +WDI_ProcessGTKOffloadGetInfoReq +( + WDI_ControlBlockType* pWDICtx, + WDI_EventInfoType* pEventData +) +{ + WDI_GtkOffloadGetInfoReqMsg* pwdiGtkOffloadGetInfoReqMsg = NULL; + WDI_GtkOffloadGetInfoCb wdiGtkOffloadGetInfoCb = NULL; + wpt_uint8* pSendBuffer = NULL; + wpt_uint16 usDataOffset = 0; + wpt_uint16 usSendSize = 0; + tHalGtkOffloadGetInfoReqParams halGtkOffloadGetInfoReqParams; + wpt_uint8 ucCurrentSessionId = 0; + WDI_BSSSessionType* pBSSSes = NULL; + + /*------------------------------------------------------------------------- + Sanity check + -------------------------------------------------------------------------*/ + if (( NULL == pEventData ) || + ( NULL == (pwdiGtkOffloadGetInfoReqMsg = (WDI_GtkOffloadGetInfoReqMsg*)pEventData->pEventData)) || + ( NULL == (wdiGtkOffloadGetInfoCb = (WDI_GtkOffloadGetInfoCb)pEventData->pCBfnc))) + { + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, + "%s: Invalid parameters", __func__); + WDI_ASSERT(0); + goto failRequest; + } + + /*----------------------------------------------------------------------- + Get message buffer + -----------------------------------------------------------------------*/ + if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_GTK_OFFLOAD_GETINFO_REQ, + sizeof(halGtkOffloadGetInfoReqParams), + &pSendBuffer, &usDataOffset, &usSendSize))|| + ( usSendSize < ( usDataOffset + sizeof(halGtkOffloadGetInfoReqParams)))) + { + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, + "Unable to get send buffer in WDI_ProcessGTKOffloadGetInfoReq() %p %p %p", + pEventData, pwdiGtkOffloadGetInfoReqMsg, wdiGtkOffloadGetInfoCb); + WDI_ASSERT(0); + goto failRequest; + } + ucCurrentSessionId = WDI_FindAssocSession( pWDICtx, + pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId, + &pBSSSes); + if ( NULL == pBSSSes ) + { + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, + " %s : Association for this BSSID does not exist",__func__); + goto fail; + } + halGtkOffloadGetInfoReqParams.bssIdx = pBSSSes->ucBSSIdx; + + // + // Don't need to fill send buffer other than header + // + wpalMemoryCopy( pSendBuffer+usDataOffset, + &halGtkOffloadGetInfoReqParams, + sizeof(halGtkOffloadGetInfoReqParams)); + + pWDICtx->wdiReqStatusCB = pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB; + pWDICtx->pReqStatusUserData = pwdiGtkOffloadGetInfoReqMsg->pUserData; + + /*------------------------------------------------------------------------- + Send Get STA Request to HAL + -------------------------------------------------------------------------*/ + return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize, + wdiGtkOffloadGetInfoCb, pEventData->pUserData, WDI_GTK_OFFLOAD_GETINFO_RESP); +fail: + // Release the message buffer so we don't leak + wpalMemoryFree(pSendBuffer); + +failRequest: + //WDA should have failure check to avoid the memory leak + return WDI_STATUS_E_FAILURE; +} + +/** + @brief Process host offload Rsp function (called when a + response is being received over the bus from HAL) + + @param pWDICtx: pointer to the WLAN DAL context + pEventData: pointer to the event information structure + + @see + @return Result of the function call +*/ +WDI_Status +WDI_ProcessGtkOffloadRsp +( + WDI_ControlBlockType* pWDICtx, + WDI_EventInfoType* pEventData +) +{ + eHalStatus halStatus; + WDI_GtkOffloadCb wdiGtkOffloadCb = NULL; + tHalGtkOffloadRspParams halGtkOffloadRspParams; + WDI_GtkOffloadRspParams wdiGtkOffloadRsparams; + + /*------------------------------------------------------------------------- + Sanity check + -------------------------------------------------------------------------*/ + if (( NULL == pWDICtx ) || ( NULL == pEventData ) || + ( NULL == pEventData->pEventData)) + { + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, + "%s: Invalid parameters", __func__); + WDI_ASSERT(0); + return WDI_STATUS_E_FAILURE; + } + + wdiGtkOffloadCb = (WDI_GtkOffloadCb)pWDICtx->pfncRspCB; + + /*------------------------------------------------------------------------- + Extract response and send it to UMAC + -------------------------------------------------------------------------*/ + if(WDI_getFwWlanFeatCaps(SLM_SESSIONIZATION)) + { + wpalMemoryCopy( &halGtkOffloadRspParams, + pEventData->pEventData, + sizeof(halGtkOffloadRspParams)); + + wdiGtkOffloadRsparams.ulStatus = + WDI_HAL_2_WDI_STATUS(halGtkOffloadRspParams.ulStatus); + wdiGtkOffloadRsparams.bssIdx = + halGtkOffloadRspParams.bssIdx; + } + else + { + halStatus = *((eHalStatus*)pEventData->pEventData); + wdiGtkOffloadRsparams.ulStatus = WDI_HAL_2_WDI_STATUS(halStatus); + } + + /*Notify UMAC*/ + wdiGtkOffloadCb( &wdiGtkOffloadRsparams, pWDICtx->pRspCBUserData); + + return WDI_STATUS_SUCCESS; +} + +/** + @brief Process GTK Offload Get Information Response function + + @param pWDICtx: pointer to the WLAN DAL context + pEventData: pointer to the event information structure + + @see + @return Result of the function call +*/ +WDI_Status +WDI_ProcessGTKOffloadGetInfoRsp +( + WDI_ControlBlockType* pWDICtx, + WDI_EventInfoType* pEventData +) +{ + eHalStatus halStatus; + WDI_GtkOffloadGetInfoCb wdiGtkOffloadGetInfoCb = NULL; + tHalGtkOffloadGetInfoRspParams halGtkOffloadGetInfoRspParams; + WDI_GtkOffloadGetInfoRspParams wdiGtkOffloadGetInfoRsparams; + WDI_BSSSessionType* pBSSSes = NULL; + + + /*------------------------------------------------------------------------- + Sanity check + -------------------------------------------------------------------------*/ + if (( NULL == pWDICtx ) || ( NULL == pEventData ) || + ( NULL == pEventData->pEventData )) + { + WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, + "%s: Invalid parameters", __func__); + WDI_ASSERT(0); + return WDI_STATUS_E_FAILURE; + } + + wdiGtkOffloadGetInfoCb = (WDI_GtkOffloadGetInfoCb)pWDICtx->pfncRspCB; + + /*------------------------------------------------------------------------- + Extract response and send it to UMAC + -------------------------------------------------------------------------*/ + if(WDI_getFwWlanFeatCaps(SLM_SESSIONIZATION)) + { + wpalMemoryCopy( &halGtkOffloadGetInfoRspParams, + pEventData->pEventData, + sizeof(halGtkOffloadGetInfoRspParams)); + + wdiGtkOffloadGetInfoRsparams.ulStatus = + WDI_HAL_2_WDI_STATUS(halGtkOffloadGetInfoRspParams.ulStatus); + wdiGtkOffloadGetInfoRsparams.ullKeyReplayCounter = + halGtkOffloadGetInfoRspParams.ullKeyReplayCounter; + wdiGtkOffloadGetInfoRsparams.ulTotalRekeyCount = + halGtkOffloadGetInfoRspParams.ulTotalRekeyCount; + wdiGtkOffloadGetInfoRsparams.ulGTKRekeyCount = + halGtkOffloadGetInfoRspParams.ulGTKRekeyCount; + wdiGtkOffloadGetInfoRsparams.ulIGTKRekeyCount = + halGtkOffloadGetInfoRspParams.ulIGTKRekeyCount; + + wpalMutexAcquire(&pWDICtx->wptMutex); + WDI_FindAssocSessionByBSSIdx(pWDICtx, halGtkOffloadGetInfoRspParams.bssIdx, + &pBSSSes); + + if ( NULL == pBSSSes ) + { + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, + "Association sequence for this BSS does not exist or " + "association no longer in progress - mysterious HAL response"); + wpalMutexRelease(&pWDICtx->wptMutex); + return WDI_STATUS_E_NOT_ALLOWED; + } + + wpalMemoryCopy(wdiGtkOffloadGetInfoRsparams.bssId, pBSSSes->macBSSID, + sizeof (wpt_macAddr)); + wpalMutexRelease(&pWDICtx->wptMutex); + } + else + { + halStatus = *((eHalStatus*)pEventData->pEventData); + wdiGtkOffloadGetInfoRsparams.ulStatus = WDI_HAL_2_WDI_STATUS(halStatus); + } + /*Notify UMAC*/ + //wdiUpdateScanParamsCb(wdiStatus, pWDICtx->pRspCBUserData); + //wdiReceiveFilterClearFilterCb(wdiStatus, pWDICtx->pRspCBUserData); + wdiGtkOffloadGetInfoCb(&wdiGtkOffloadGetInfoRsparams, pWDICtx->pRspCBUserData); + + return WDI_STATUS_SUCCESS; +} +#endif // WLAN_FEATURE_GTK_OFFLOAD + +#ifdef WLAN_WAKEUP_EVENTS +WDI_Status +WDI_ProcessWakeReasonInd +( + WDI_ControlBlockType* pWDICtx, + WDI_EventInfoType* pEventData +) +{ + WDI_LowLevelIndType *pWdiInd; + tpWakeReasonParams pWakeReasonParams; + wpt_uint32 allocSize = 0; + + WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO, + "+%s", __func__); + + /*------------------------------------------------------------------------- + Sanity check + -------------------------------------------------------------------------*/ + if (( NULL == pWDICtx ) || ( NULL == pEventData ) || + ( NULL == pEventData->pEventData )) + { + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, + "%s: Invalid parameters", __func__); + WDI_ASSERT( 0 ); + return WDI_STATUS_E_FAILURE; + } + + /*------------------------------------------------------------------------- + Extract indication and send it to UMAC + -------------------------------------------------------------------------*/ + pWakeReasonParams = (tpWakeReasonParams)(pEventData->pEventData); + + allocSize = sizeof(WDI_LowLevelIndType) + (pWakeReasonParams->ulStoredDataLen - 1); + + //Allocate memory for WDI_WakeReasonIndType structure + pWdiInd = wpalMemoryAllocate(allocSize) ; + + if(NULL == pWdiInd) + { + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, + "%s: Failed to allocate memory for WDI_WakeReasonIndType: %p %p %p ", + __func__, pWDICtx, pEventData, pEventData->pEventData); + WDI_ASSERT(0); + return WDI_STATUS_E_FAILURE; + } + + wpalMemoryZero(pWdiInd, allocSize); + + /* Fill in the indication parameters*/ + // Fill wdiInd.wdiIndicationData.wakeReasonInd structure from wakeReasonInd.wakeReasonParams + pWdiInd->wdiIndicationType = WDI_WAKE_REASON_IND; + pWdiInd->wdiIndicationData.wdiWakeReasonInd.ulReason = pWakeReasonParams->ulReason; + pWdiInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg = pWakeReasonParams->ulReasonArg; + pWdiInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen = pWakeReasonParams->ulStoredDataLen; + pWdiInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen = pWakeReasonParams->ulActualDataLen; + wpalMemoryCopy( (void *)&(pWdiInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]), + &(pWakeReasonParams->aDataStart[0]), + pWakeReasonParams->ulStoredDataLen); + + + if ( pWDICtx->wdiLowLevelIndCB ) + { + /*Notify UMAC*/ + pWDICtx->wdiLowLevelIndCB( pWdiInd, pWDICtx->pIndUserData ); + } + + //Free memory allocated for WDI_WakeReasonIndType structure + wpalMemoryFree(pWdiInd); + + WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO, + "-%s", __func__); + + return WDI_STATUS_SUCCESS; +} +#endif // WLAN_WAKEUP_EVENTS + +void WDI_GetWcnssCompiledApiVersion +( + WDI_WlanVersionType *pWcnssApiVersion +) +{ + pWcnssApiVersion->major = WLAN_HAL_VER_MAJOR; + pWcnssApiVersion->minor = WLAN_HAL_VER_MINOR; + pWcnssApiVersion->version = WLAN_HAL_VER_VERSION; + pWcnssApiVersion->revision = WLAN_HAL_VER_REVISION; +} + +/** + @brief Process Set TM Level Rsp function (called when a + response is being received over the bus from HAL) + + @param pWDICtx: pointer to the WLAN DAL context + pEventData: pointer to the event information structure + + @see + @return Result of the function call +*/ +WDI_Status +WDI_ProcessSetTmLevelRsp +( + WDI_ControlBlockType* pWDICtx, + WDI_EventInfoType* pEventData +) +{ + WDI_Status wdiStatus; + eHalStatus halStatus; + WDI_SetTmLevelCb wdiSetTmLevelCb; + /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + + /*------------------------------------------------------------------------- + Sanity check + -------------------------------------------------------------------------*/ + if (( NULL == pWDICtx ) || ( NULL == pEventData ) || + ( NULL == pEventData->pEventData )) + { + WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, + "%s: Invalid parameters", __func__); + WDI_ASSERT(0); + return WDI_STATUS_E_FAILURE; + } + + wdiSetTmLevelCb = (WDI_SetPowerParamsCb)pWDICtx->pfncRspCB; + + /*------------------------------------------------------------------------- + Extract response and send it to UMAC + -------------------------------------------------------------------------*/ + halStatus = *((eHalStatus*)pEventData->pEventData); + wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus); + + /*Notify UMAC*/ + wdiSetTmLevelCb(wdiStatus, pWDICtx->pRspCBUserData); + + return WDI_STATUS_SUCCESS; +}/*WDI_ProcessSetTmLevelRsp*/ + +/** + @brief Process Set Thermal Mitigation level Changed request + + @param pWDICtx: pointer to the WLAN DAL context + pEventData: pointer to the event information structure + + @see + @return Result of the function call +*/ +WDI_Status +WDI_ProcessSetTmLevelReq +( + WDI_ControlBlockType* pWDICtx, + WDI_EventInfoType* pEventData +) +{ + WDI_SetTmLevelReqType *pwdiSetTmLevelReq = NULL; + WDI_SetTmLevelCb wdiSetTmLevelCb = NULL; + wpt_uint8* pSendBuffer = NULL; + wpt_uint16 usDataOffset = 0; + wpt_uint16 usSendSize = 0; + tSetThermalMitgationType halTmMsg; + + /*------------------------------------------------------------------------- + Sanity check + -------------------------------------------------------------------------*/ + if (( NULL == pEventData ) || + ( NULL == (pwdiSetTmLevelReq = (WDI_SetTmLevelReqType*)pEventData->pEventData)) || + ( NULL == (wdiSetTmLevelCb = (WDI_SetTmLevelCb)pEventData->pCBfnc))) + { + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, + "%s: Invalid parameters", __func__); + WDI_ASSERT(0); + return WDI_STATUS_E_FAILURE; + } + + /*----------------------------------------------------------------------- + Get message buffer + -----------------------------------------------------------------------*/ + if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_SET_TM_LEVEL_REQ, + sizeof(halTmMsg), + &pSendBuffer, &usDataOffset, &usSendSize))|| + ( usSendSize < (usDataOffset + sizeof(halTmMsg) ))) + { + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, + "Unable to get send buffer in Set PNO req %p %p %p", + pEventData, pwdiSetTmLevelReq, wdiSetTmLevelCb); + WDI_ASSERT(0); + return WDI_STATUS_E_FAILURE; + } + + halTmMsg.thermalMitMode = pwdiSetTmLevelReq->tmMode; + halTmMsg.thermalMitLevel = pwdiSetTmLevelReq->tmLevel; + + wpalMemoryCopy( pSendBuffer+usDataOffset, + &halTmMsg, + sizeof(halTmMsg)); + + pWDICtx->pReqStatusUserData = pwdiSetTmLevelReq->pUserData; + pWDICtx->pfncRspCB = NULL; + /*------------------------------------------------------------------------- + Send Get STA Request to HAL + -------------------------------------------------------------------------*/ + return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize, + wdiSetTmLevelCb, pEventData->pUserData, WDI_SET_TM_LEVEL_RESP); +} + +/* Fill the value from the global features enabled array to the global capabilities + * bitmap struct + */ +static void +FillAllFeatureCaps(tWlanFeatCaps *fCaps, placeHolderInCapBitmap *enabledFeat, wpt_int8 len) +{ + wpt_int8 i; + for (i=0; ifeatCaps[0], + gpHostWlanFeatCaps->featCaps[1], + gpHostWlanFeatCaps->featCaps[2], + gpHostWlanFeatCaps->featCaps[3] + ); + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, "Host Capability"); + WDI_TraceHostFWCapabilities(gpHostWlanFeatCaps->featCaps); + wdiEventData.wdiRequest = WDI_FEATURE_CAPS_EXCHANGE_REQ; + wdiEventData.pEventData = gpHostWlanFeatCaps; + wdiEventData.uEventDataSize = fCapsStructSize; + wdiEventData.pCBfnc = wdiFeatureCapsExchangeCb; + wdiEventData.pUserData = pUserData; + + return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData); +} + +/** + @brief Disable Active mode offload in Host + + @param void + @see + @return void +*/ +void +WDI_disableCapablityFeature(wpt_uint8 feature_index) +{ + supportEnabledFeatures[feature_index] = 0; + return; +} + +/** + @brief Process Host-FW Capability Exchange Request function + + @param pWDICtx: pointer to the WLAN DAL context + pEventData: pointer to the event information structure + + @see + @return Result of the function call +*/ +WDI_Status +WDI_ProcessFeatureCapsExchangeReq +( + WDI_ControlBlockType* pWDICtx, + WDI_EventInfoType* pEventData +) +{ + wpt_uint8* pSendBuffer = NULL; + wpt_uint16 usDataOffset = 0; + wpt_uint16 usSendSize = 0; + wpt_uint16 usLen = 0; + + /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + + WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO, + "%s", __func__); + + /*------------------------------------------------------------------------- + Sanity check + -------------------------------------------------------------------------*/ + /* Call back function is NULL since not required for cap exchange req */ + if (( NULL == pEventData ) || + ( NULL == (tWlanFeatCaps *)pEventData->pEventData)) + { + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL, + "%s: Invalid parameters", __func__); + WDI_ASSERT(0); + return WDI_STATUS_E_FAILURE; + } + + /*----------------------------------------------------------------------- + Get message buffer + -----------------------------------------------------------------------*/ + usLen = sizeof(tWlanFeatCaps); + + if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, + WDI_FEATURE_CAPS_EXCHANGE_REQ, + usLen, + &pSendBuffer, &usDataOffset, &usSendSize))|| + ( usSendSize < (usDataOffset + usLen ))) + { + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL, + "Unable to get send buffer in feat caps exchange req %p %p", + pEventData, (tWlanFeatCaps *)pEventData->pEventData); + WDI_ASSERT(0); + return WDI_STATUS_E_FAILURE; + } + + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO, + "Host Caps - %x %x %x %x", + ((tWlanFeatCaps *)pEventData->pEventData)->featCaps[0], + ((tWlanFeatCaps *)pEventData->pEventData)->featCaps[1], + ((tWlanFeatCaps *)pEventData->pEventData)->featCaps[2], + ((tWlanFeatCaps *)pEventData->pEventData)->featCaps[3] + ); + + /* Copy host caps after the offset in the send buffer */ + wpalMemoryCopy( pSendBuffer+usDataOffset, + (tWlanFeatCaps *)pEventData->pEventData, + usLen); + + /*------------------------------------------------------------------------- + Send Start Request to HAL + -------------------------------------------------------------------------*/ + return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize, + (WDI_StartRspCb)pEventData->pCBfnc, + pEventData->pUserData, WDI_FEATURE_CAPS_EXCHANGE_RESP); + +}/*WDI_ProcessFeatureCapsExchangeReq*/ + +/** + @brief Process Host-FW Capability Exchange Response function + + @param pWDICtx: pointer to the WLAN DAL context + pEventData: pointer to the event information structure + + @see + @return Result of the function call +*/ +WDI_Status +WDI_ProcessFeatureCapsExchangeRsp +( + WDI_ControlBlockType* pWDICtx, + WDI_EventInfoType* pEventData +) +{ + WDI_featureCapsExchangeCb wdiFeatureCapsExchangeCb; + wpt_int32 fCapsStructSize; + /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + + WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO, + "%s", __func__); + + /*------------------------------------------------------------------------- + Sanity check + -------------------------------------------------------------------------*/ + if (( NULL == pWDICtx ) || ( NULL == pEventData ) || + ( NULL == pEventData->pEventData )) + { + /* It will go here when riva is old (doesn't understand this msg) and host is new */ + WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, + "%s: Invalid parameters", __func__); + WDI_ASSERT(0); + return WDI_STATUS_E_FAILURE; + } + + /* Allocate memory separately for global variable carrying FW caps */ + fCapsStructSize = sizeof(tWlanFeatCaps); + gpFwWlanFeatCaps = wpalMemoryAllocate(fCapsStructSize); + if ( NULL == gpFwWlanFeatCaps ) + { + WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, + "Cannot allocate memory for host capability info"); + WDI_ASSERT(0); + return WDI_STATUS_MEM_FAILURE; + } + + /*------------------------------------------------------------------------- + Unpack HAL Response Message - the header was already extracted by the + main Response Handling procedure + -------------------------------------------------------------------------*/ + /*------------------------------------------------------------------------- + Extract response and send it to UMAC + -------------------------------------------------------------------------*/ + + wpalMemoryCopy(gpFwWlanFeatCaps,(tWlanFeatCaps *) pEventData -> pEventData, + fCapsStructSize); + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, + "FW caps %x %x %x %x", + gpFwWlanFeatCaps->featCaps[0], + gpFwWlanFeatCaps->featCaps[1], + gpFwWlanFeatCaps->featCaps[2], + gpFwWlanFeatCaps->featCaps[3] + ); + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, "Firmware Capability"); + WDI_TraceHostFWCapabilities(gpFwWlanFeatCaps->featCaps); + wdiFeatureCapsExchangeCb = (WDI_featureCapsExchangeCb) pWDICtx -> pfncRspCB; + + /*Notify UMAC - there is no callback right now but can be used in future if reqd */ + if (wdiFeatureCapsExchangeCb != NULL) + wdiFeatureCapsExchangeCb(NULL, NULL); + + return WDI_STATUS_SUCCESS; +} + +#ifdef WLAN_FEATURE_11AC +WDI_Status +WDI_ProcessUpdateVHTOpModeRsp +( + WDI_ControlBlockType* pWDICtx, + WDI_EventInfoType* pEventData +) +{ + WDI_UpdateVHTOpModeCb wdiVHTOpModeCb = NULL; + WDI_Status wdiStatus; + eHalStatus halStatus; + + /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + + /*------------------------------------------------------------------------- + Sanity check + -------------------------------------------------------------------------*/ + if (( NULL == pWDICtx ) || ( NULL == pEventData ) || + ( NULL == pEventData->pEventData)) + { + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, + "%s: Invalid parameters", __func__); + WDI_ASSERT(0); + return WDI_STATUS_E_FAILURE; + } + wdiVHTOpModeCb = (WDI_UpdateVHTOpModeCb)pEventData->pCBfnc; + + /*------------------------------------------------------------------------- + Extract response and send it to UMAC + -------------------------------------------------------------------------*/ + halStatus = *((eHalStatus*)pEventData->pEventData); + wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus); + + /*Notify UMAC*/ + wdiVHTOpModeCb( wdiStatus, pEventData->pUserData); + + return WDI_STATUS_SUCCESS; +} +#endif +/** + @brief WDI_getHostWlanFeatCaps + WDI API that returns whether the feature passed to it as enum value in + "placeHolderInCapBitmap" is supported by Host or not. It uses WDI global + variable storing host capability bitmap to find this. This can be used by + other moduels to decide certain things like call different APIs based on + whether a particular feature is supported. + + @param + + feat_enum_value: enum value for the feature as in placeHolderInCapBitmap in wlan_hal_msg.h. + + @see + @return + 0 - if the feature is NOT supported in host + any non-zero value - if the feature is SUPPORTED in host. +*/ +wpt_uint8 WDI_getHostWlanFeatCaps(wpt_uint8 feat_enum_value) +{ + wpt_uint8 featSupported = 0; + if (gpHostWlanFeatCaps != NULL) + { + getFeatCaps(gpHostWlanFeatCaps, feat_enum_value, featSupported); + } + else + { + WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO, + "Caps exchange feature NOT supported. Return NOT SUPPORTED for %u feature", feat_enum_value); + } + return featSupported; +} + +/** + @brief WDI_getFwWlanFeatCaps + WDI API that returns whether the feature passed to it as enum value in + "placeHolderInCapBitmap" is supported by FW or not. It uses WDI global + variable storing host capability bitmap to find this. This can be used by + other moduels to decide certain things like call different APIs based on + whether a particular feature is supported. + + @param + + feat_enum_value: enum value for the feature as in placeHolderInCapBitmap + in wlan_hal_msg.h. + + @see + @return + 0 - if the feature is NOT supported in FW + any non-zero value - if the feature is SUPPORTED in FW. +*/ +wpt_uint8 WDI_getFwWlanFeatCaps(wpt_uint8 feat_enum_value) +{ + wpt_uint8 featSupported = 0; + if (gpFwWlanFeatCaps != NULL) + { + getFeatCaps(gpFwWlanFeatCaps, feat_enum_value, featSupported); + } + else + { + WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO, + "Caps exchange feature NOT supported. Return NOT SUPPORTED for %u feature", feat_enum_value); + } + return featSupported; +} + +#ifdef WLAN_FEATURE_11AC +WDI_Status +WDI_ProcessUpdateVHTOpModeReq +( + WDI_ControlBlockType* pWDICtx, + WDI_EventInfoType* pEventData +) +{ + WDI_UpdateVHTOpMode* pwdiVHTOpModeParams = NULL; + WDI_UpdateVHTOpModeCb wdiVHTOpModeCb = NULL; + wpt_uint8* pSendBuffer = NULL; + wpt_uint16 usDataOffset = 0; + wpt_uint16 usSendSize = 0; + + /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + + WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO, + "%s", __func__); + + /*------------------------------------------------------------------------- + Sanity check + -------------------------------------------------------------------------*/ + if (( NULL == pEventData ) || + ( NULL == (pwdiVHTOpModeParams = (WDI_UpdateVHTOpMode*)pEventData->pEventData)) || + ( NULL == (wdiVHTOpModeCb = (WDI_UpdateVHTOpModeCb)pEventData->pCBfnc))) + { + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, + "%s: Invalid parameters", __func__); + WDI_ASSERT(0); + return WDI_STATUS_E_FAILURE; + } + + /*----------------------------------------------------------------------- + Get message buffer + -----------------------------------------------------------------------*/ + if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_UPDATE_VHT_OP_MODE_REQ, + sizeof(WDI_UpdateVHTOpMode), + &pSendBuffer, &usDataOffset, &usSendSize))|| + ( usSendSize < (usDataOffset + sizeof(WDI_UpdateVHTOpMode) ))) + { + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, + "Unable to get send buffer in update vht opMode req"); + WDI_ASSERT(0); + return WDI_STATUS_E_FAILURE; + } + + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, + "pwdiVHTOpModeParams->opMode=%d, pwdiVHTOpModeParams->staId=%d", pwdiVHTOpModeParams->opMode, pwdiVHTOpModeParams->staId); + + wpalMemoryCopy( pSendBuffer+usDataOffset, pwdiVHTOpModeParams, + sizeof(WDI_UpdateVHTOpMode)); + + /*------------------------------------------------------------------------- + Send Start Request to HAL + -------------------------------------------------------------------------*/ + return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize, + wdiVHTOpModeCb, + pEventData->pUserData, WDI_UPDATE_VHT_OP_MODE_RESP); + +} + +WDI_Status +WDI_UpdateVHTOpModeReq +( + WDI_UpdateVHTOpMode *pData, + WDI_UpdateVHTOpModeCb wdiUpdateVHTOpModeCb, + void* pUserData +) +{ + WDI_EventInfoType wdiEventData; + + /*------------------------------------------------------------------------ + Sanity Check + ------------------------------------------------------------------------*/ + if ( eWLAN_PAL_FALSE == gWDIInitialized ) + { + WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, + "WDI API call before module is initialized - Fail request"); + + return WDI_STATUS_E_NOT_ALLOWED; + } + + /*------------------------------------------------------------------------ + Fill in Event data and post to the Main FSM + ------------------------------------------------------------------------*/ + wdiEventData.wdiRequest = WDI_UPDATE_VHT_OP_MODE_REQ; + wdiEventData.pEventData = pData; + wdiEventData.uEventDataSize = sizeof(WDI_UpdateVHTOpMode); + wdiEventData.pCBfnc = wdiUpdateVHTOpModeCb; + wdiEventData.pUserData = pUserData; + + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, + "pData->opMode=%d, pData->staId=%d", pData->opMode, pData->staId); + + return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData); + +} +#endif + +/** + @brief WDI_TransportChannelDebug - + Display DXE Channel debugging information + User may request to display DXE channel snapshot + Or if host driver detects any abnormal stcuk may display + + @param displaySnapshot : Display DXE snapshot option + @param enableStallDetect : Enable stall detect feature + This feature will take effect to data performance + Not integrate till fully verification + @see + @return none +*/ +void WDI_TransportChannelDebug +( + wpt_boolean displaySnapshot, + wpt_boolean toggleStallDetect +) +{ + WDTS_ChannelDebug(displaySnapshot, toggleStallDetect); + return; +} +/** + @brief WDI_SsrTimerCB + Callback function for SSR timer, if this is called then the graceful + shutdown for Riva did not happen. + + @param pUserData : user data to timer + + @see + @return none +*/ +void +WDI_SsrTimerCB +( + void *pUserData +) +{ + WDI_ControlBlockType* pWDICtx = (WDI_ControlBlockType*)pUserData; + /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + + if (NULL == pWDICtx ) + { + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, + "%s: Invalid parameters", __func__); + WDI_ASSERT(0); + return; + } + wpalRivaSubystemRestart(); + + return; + +}/*WDI_SsrTimerCB*/ + +/** + @brief WDI_SetEnableSSR - + This API is called to enable/disable SSR on WDI timeout. + + @param enableSSR : enable/disable SSR + + @see + @return none +*/ +void WDI_SetEnableSSR(wpt_boolean enableSSR) +{ + gWDICb.bEnableSSR = enableSSR; +} + + +#ifdef FEATURE_WLAN_LPHB +/** + @brief WDI_ProcessLphbInd - + This function will be invoked when FW detects low power + heart beat failure + + @param pWDICtx : wdi context + pEventData : indication data + @see + @return Result of the function call +*/ +WDI_Status +WDI_ProcessLphbInd +( + WDI_ControlBlockType* pWDICtx, + WDI_EventInfoType* pEventData +) +{ + WDI_LowLevelIndType wdiInd; + tHalLowPowerHeartBeatIndParam lphbIndicationParam; + /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + + /*------------------------------------------------------------------------- + Sanity check + -------------------------------------------------------------------------*/ + if ((NULL == pWDICtx) || (NULL == pEventData) || + (NULL == pEventData->pEventData)) + { + WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, + "%s: Invalid parameters", __func__); + WDI_ASSERT(0); + return WDI_STATUS_E_FAILURE; + } + + /*------------------------------------------------------------------------- + Extract indication and send it to UMAC + -------------------------------------------------------------------------*/ + wpalMemoryCopy(&lphbIndicationParam, + pEventData->pEventData, + sizeof(tHalLowPowerHeartBeatIndParam)); + + wdiInd.wdiIndicationType = WDI_LPHB_IND; + wdiInd.wdiIndicationData.wdiLPHBTimeoutInd.bssIdx = + lphbIndicationParam.bssIdx; + wdiInd.wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx = + lphbIndicationParam.sessionIdx; + wdiInd.wdiIndicationData.wdiLPHBTimeoutInd.protocolType = + lphbIndicationParam.protocolType; + wdiInd.wdiIndicationData.wdiLPHBTimeoutInd.eventReason = + lphbIndicationParam.eventReason; + /*Notify UMAC*/ + if (pWDICtx->wdiLowLevelIndCB) + { + pWDICtx->wdiLowLevelIndCB(&wdiInd, pWDICtx->pIndUserData); + } + + return WDI_STATUS_SUCCESS; +} + +/** + @brief WDI_ProcessLphbCfgRsp - + LPHB configuration response from FW + + @param pWDICtx : wdi context + pEventData : indication data + + @see + @return Result of the function call +*/ +WDI_Status WDI_ProcessLphbCfgRsp +( + WDI_ControlBlockType* pWDICtx, + WDI_EventInfoType* pEventData +) +{ + WDI_Status wdiStatus; + eHalStatus halStatus; + WDI_LphbCfgCb wdiLphbCfgCb; + /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + + /*------------------------------------------------------------------------- + Sanity check + -------------------------------------------------------------------------*/ + if ((NULL == pWDICtx) || (NULL == pEventData) || + (NULL == pEventData->pEventData)) + { + WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, + "%s: Invalid parameters", __func__); + WDI_ASSERT(0); + return WDI_STATUS_E_FAILURE; + } + + wdiLphbCfgCb = (WDI_LphbCfgCb)pWDICtx->pfncRspCB; + + /*------------------------------------------------------------------------- + Extract response and send it to UMAC + -------------------------------------------------------------------------*/ + halStatus = *((eHalStatus*)pEventData->pEventData); + wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus); + + WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, + "LPHB Cfg Rsp Return status %d", wdiStatus); + /*Notify UMAC*/ + if (NULL != wdiLphbCfgCb) + { + wdiLphbCfgCb(wdiStatus, pWDICtx->pRspCBUserData); + } + + return WDI_STATUS_SUCCESS; +} + +/** + @brief WDI_ProcessLPHBConfReq - + LPHB configuration request to FW + + @param pWDICtx : wdi context + pEventData : indication data + + @see + @return none +*/ +WDI_Status WDI_ProcessLPHBConfReq +( + WDI_ControlBlockType* pWDICtx, + WDI_EventInfoType* pEventData +) +{ + WDI_LPHBReq *pLphbReqParams; + WDI_Status wdiStatus; + wpt_uint8* pSendBuffer = NULL; + wpt_uint16 usDataOffset = 0; + wpt_uint16 usSendSize = 0; + tHalLowPowerHeartBeatReq *halLphbReqRarams; + /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + + /*------------------------------------------------------------------------- + Sanity check + -------------------------------------------------------------------------*/ + if ((NULL == pEventData) || (NULL == pEventData->pEventData)) + { + WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, + "%s: Invalid parameters in Suspend ind",__func__); + WDI_ASSERT(0); + return WDI_STATUS_E_FAILURE; + } + + pLphbReqParams = (WDI_LPHBReq *)pEventData->pEventData; + + /*----------------------------------------------------------------------- + Get message buffer + -----------------------------------------------------------------------*/ + if ((WDI_STATUS_SUCCESS != WDI_GetMessageBuffer(pWDICtx, + WDI_LPHB_CFG_REQ, + sizeof(tHalLowPowerHeartBeatReqMsg), + &pSendBuffer, &usDataOffset, &usSendSize))|| + (usSendSize < (usDataOffset + sizeof(tHalLowPowerHeartBeatReqMsg)))) + { + WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, + "Unable to get send buffer in LPHB Ind "); + WDI_ASSERT(0); + return WDI_STATUS_E_FAILURE; + } + + halLphbReqRarams = (tHalLowPowerHeartBeatReq *)(pSendBuffer + usDataOffset); + wpalMemoryZero(halLphbReqRarams, sizeof(tHalLowPowerHeartBeatReq)); + + halLphbReqRarams->lowPowerHeartBeatCmdType = + (tANI_U16)(++pLphbReqParams->cmd); + switch ((tANI_U16)pLphbReqParams->cmd) + { + case WDI_LPHB_SET_EN_PARAMS_INDID: + halLphbReqRarams->sessionIdx = + pLphbReqParams->params.lphbEnableReq.session; + halLphbReqRarams->options.control.heartBeatEnable = + pLphbReqParams->params.lphbEnableReq.enable; + halLphbReqRarams->options.control.heartBeatType = + pLphbReqParams->params.lphbEnableReq.item; + break; + + case WDI_LPHB_SET_TCP_PARAMS_INDID: + halLphbReqRarams->sessionIdx = + pLphbReqParams->params.lphbTcpParamReq.session; + halLphbReqRarams->options.tcpParams.timeOutSec = + pLphbReqParams->params.lphbTcpParamReq.timeout; + wpalMemoryCopy(&halLphbReqRarams->options.tcpParams.hostIpv4Addr, + &pLphbReqParams->params.lphbTcpParamReq.dev_ip, + sizeof(v_U32_t)); + wpalMemoryCopy(&halLphbReqRarams->options.tcpParams.destIpv4Addr, + &pLphbReqParams->params.lphbTcpParamReq.srv_ip, + sizeof(v_U32_t)); + + wpalMemoryCopy(halLphbReqRarams->options.tcpParams.gatewayMacAddr, + pLphbReqParams->params.lphbTcpParamReq.gateway_mac, + WDI_MAC_ADDR_LEN); + + halLphbReqRarams->options.tcpParams.hostPort = + pLphbReqParams->params.lphbTcpParamReq.src_port; + halLphbReqRarams->options.tcpParams.destPort = + pLphbReqParams->params.lphbTcpParamReq.dst_port; + halLphbReqRarams->options.tcpParams.timePeriodSec = + pLphbReqParams->params.lphbTcpParamReq.timePeriodSec; + halLphbReqRarams->options.tcpParams.tcpSn = + pLphbReqParams->params.lphbTcpParamReq.tcpSn; + break; + + case WDI_LPHB_SET_TCP_PKT_FILTER_INDID: + halLphbReqRarams->sessionIdx = + pLphbReqParams->params.lphbTcpFilterReq.session; + halLphbReqRarams->options.tcpUdpFilter.offset = + pLphbReqParams->params.lphbTcpFilterReq.offset; + halLphbReqRarams->options.tcpUdpFilter.filterLength = + pLphbReqParams->params.lphbTcpFilterReq.length; + wpalMemoryCopy(halLphbReqRarams->options.tcpUdpFilter.filter, + pLphbReqParams->params.lphbTcpFilterReq.filter, + WDI_LPHB_FILTER_LEN); + break; + + case WDI_LPHB_SET_UDP_PARAMS_INDID: + halLphbReqRarams->sessionIdx = + pLphbReqParams->params.lphbUdpParamReq.session; + halLphbReqRarams->options.udpParams.timeOutSec = + pLphbReqParams->params.lphbUdpParamReq.timeout; + halLphbReqRarams->options.udpParams.timePeriodSec = + pLphbReqParams->params.lphbUdpParamReq.interval; + wpalMemoryCopy(&halLphbReqRarams->options.udpParams.hostIpv4Addr, + &pLphbReqParams->params.lphbUdpParamReq.dev_ip, + sizeof(v_U32_t)); + wpalMemoryCopy(&halLphbReqRarams->options.udpParams.destIpv4Addr, + &pLphbReqParams->params.lphbUdpParamReq.srv_ip, + sizeof(v_U32_t)); + + wpalMemoryCopy(halLphbReqRarams->options.udpParams.gatewayMacAddr, + pLphbReqParams->params.lphbUdpParamReq.gateway_mac, + WDI_MAC_ADDR_LEN); + + halLphbReqRarams->options.udpParams.hostPort = + pLphbReqParams->params.lphbUdpParamReq.src_port; + halLphbReqRarams->options.udpParams.destPort = + pLphbReqParams->params.lphbUdpParamReq.dst_port; + break; + + case WDI_LPHB_SET_UDP_PKT_FILTER_INDID: + halLphbReqRarams->sessionIdx = + pLphbReqParams->params.lphbUdpFilterReq.session; + halLphbReqRarams->options.tcpUdpFilter.offset = + pLphbReqParams->params.lphbUdpFilterReq.offset; + halLphbReqRarams->options.tcpUdpFilter.filterLength = + pLphbReqParams->params.lphbUdpFilterReq.length; + wpalMemoryCopy(halLphbReqRarams->options.tcpUdpFilter.filter, + pLphbReqParams->params.lphbUdpFilterReq.filter, + WDI_LPHB_FILTER_LEN); + break; + + case WDI_LPHB_SET_NETWORK_INFO_INDID: + /* NA */ + break; + + default: + break; + } + + /*------------------------------------------------------------------------- + Send Suspend Request to HAL + -------------------------------------------------------------------------*/ + pWDICtx->pfncRspCB = pEventData->pCBfnc; + pWDICtx->pReqStatusUserData = pEventData->pUserData; + + wdiStatus = WDI_SendMsg(pWDICtx, pSendBuffer, + usSendSize, pWDICtx->pfncRspCB, + pWDICtx->pReqStatusUserData, + WDI_LPHB_CFG_RESP); + + return wdiStatus; +} + +/** + @brief WDI_LPHBConfReq - + LPHB configuration request API + + @param lphbconfParam : configuration parameter + usrData : client context + lphbCfgCb : callback function pointer + + @see + @return Success or fail status code +*/ +WDI_Status WDI_LPHBConfReq(void *lphbconfParam, + void *usrData, WDI_LphbCfgCb lphbCfgCb) +{ + WDI_EventInfoType wdiEventData; + + /*------------------------------------------------------------------------ + Sanity Check + ------------------------------------------------------------------------*/ + if (eWLAN_PAL_FALSE == gWDIInitialized) + { + WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, + "WDI API call before module is initialized - Fail request"); + + return WDI_STATUS_E_NOT_ALLOWED; + } + + /*------------------------------------------------------------------------ + Fill in Event data and post to the Main FSM + ------------------------------------------------------------------------*/ + wdiEventData.wdiRequest = WDI_LPHB_CFG_REQ; + wdiEventData.pEventData = lphbconfParam; + wdiEventData.uEventDataSize = sizeof(WDI_LPHBReq); + wdiEventData.pCBfnc = lphbCfgCb; + wdiEventData.pUserData = usrData; + + return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData); +} +#endif /* FEATURE_WLAN_LPHB */ + +/** + @brief WDI_ProcessIbssPeerInactivityInd + Process peer inactivity indication coming from HAL + + @param pWDICtx: pointer to the WLAN DAL context + pEventData: pointer to the event information structure + @see + @return Result of the function call +*/ +WDI_Status +WDI_ProcessIbssPeerInactivityInd +( + WDI_ControlBlockType* pWDICtx, + WDI_EventInfoType* pEventData +) +{ + WDI_LowLevelIndType wdiInd; + tIbssPeerInactivityIndMsg halIbssIndMsg; + + /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + + /*------------------------------------------------------------------------- + Sanity check + -------------------------------------------------------------------------*/ + if (( NULL == pWDICtx ) || ( NULL == pEventData ) || + ( NULL == pEventData->pEventData )) + { + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, + "%s: Invalid parameters", __func__); + WDI_ASSERT( 0 ); + return WDI_STATUS_E_FAILURE; + } + + /*------------------------------------------------------------------------- + Extract indication and send it to UMAC + -------------------------------------------------------------------------*/ + wpalMemoryCopy( &halIbssIndMsg.ibssPeerInactivityIndParams, + pEventData->pEventData, + sizeof(halIbssIndMsg.ibssPeerInactivityIndParams) ); + + /*Fill in the indication parameters*/ + wdiInd.wdiIndicationType = WDI_IBSS_PEER_INACTIVITY_IND; + + wdiInd.wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx + = halIbssIndMsg.ibssPeerInactivityIndParams.bssIdx; + + wdiInd.wdiIndicationData.wdiIbssPeerInactivityInd.staIdx + = halIbssIndMsg.ibssPeerInactivityIndParams.staIdx; + + wpalMemoryCopy(wdiInd.wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr, + halIbssIndMsg.ibssPeerInactivityIndParams.staAddr, + sizeof(tSirMacAddr)); + + /*Notify UMAC*/ + pWDICtx->wdiLowLevelIndCB( &wdiInd, pWDICtx->pIndUserData ); + + return WDI_STATUS_SUCCESS; + +} /*WDI_ProcessIbssPeerInactivityInd*/ + + +/** +*@brief WDI_RateUpdateInd will be called when the upper MAC + requests the device to set rates. + + + @param wdiRateUpdateIndParams: + + + @see + @return Result of the function call +*/ +WDI_Status +WDI_RateUpdateInd +( + WDI_RateUpdateIndParams *wdiRateUpdateIndParams +) +{ + WDI_EventInfoType wdiEventData; + /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + + /*------------------------------------------------------------------------ + Sanity Check + ------------------------------------------------------------------------*/ + if ( eWLAN_PAL_FALSE == gWDIInitialized ) + { + WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, + "WDI API call before module is initialized - Fail request"); + + return WDI_STATUS_E_NOT_ALLOWED; + } + + /*------------------------------------------------------------------------ + Fill in Event data and post to the Main FSM + ------------------------------------------------------------------------*/ + wdiEventData.wdiRequest = WDI_RATE_UPDATE_IND; + wdiEventData.pEventData = wdiRateUpdateIndParams; + wdiEventData.uEventDataSize = sizeof(WDI_RateUpdateIndParams); + wdiEventData.pCBfnc = NULL; + wdiEventData.pUserData = NULL; + + return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData); + +}/* WDI_RateUpdateInd */ + +/** + @brief Process Rate Update Indication and post it to HAL + + @param pWDICtx: pointer to the WLAN DAL context + pEventData: pointer to the event information structure + + @see + @return Result of the function call +*/ +WDI_Status +WDI_ProcessRateUpdateInd +( + WDI_ControlBlockType* pWDICtx, + WDI_EventInfoType* pEventData +) +{ + wpt_uint8* pSendBuffer = NULL; + wpt_uint16 usDataOffset = 0; + wpt_uint16 usSendSize = 0; + WDI_RateUpdateIndParams *pwdiRateUpdateInd = NULL; + tHalRateUpdateInd *pRateUpdateInd; + WDI_Status wdiStatus; + + /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + + WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO, + "%s", __func__); + + /*------------------------------------------------------------------------- + Sanity check + -------------------------------------------------------------------------*/ + if (( NULL == pEventData ) || ( NULL == pEventData->pEventData )) + { + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL, + "%s: Invalid parameters", __func__); + WDI_ASSERT(0); + return WDI_STATUS_E_FAILURE; + } + pwdiRateUpdateInd = (WDI_RateUpdateIndParams *)pEventData->pEventData; + /*----------------------------------------------------------------------- + Get message buffer + -----------------------------------------------------------------------*/ + + if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, + WDI_RATE_UPDATE_IND, + sizeof(tHalRateUpdateParams), + &pSendBuffer, &usDataOffset, &usSendSize))|| + ( usSendSize < (usDataOffset + + sizeof(tHalRateUpdateParams) ))) + { + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL, + "Unable to get send buffer in Rate Update Indication %p ", + pEventData); + WDI_ASSERT(0); + return WDI_STATUS_E_FAILURE; + } + + pRateUpdateInd = (tHalRateUpdateInd *)pSendBuffer; + + /* Copy the bssid */ + wpalMemoryCopy(pRateUpdateInd->halRateUpdateParams.bssid, + pwdiRateUpdateInd->bssid, WDI_MAC_ADDR_LEN); + + /* Copy the tx flags */ + pRateUpdateInd->halRateUpdateParams.ucastDataRateTxFlag = + pwdiRateUpdateInd->ucastDataRateTxFlag; + pRateUpdateInd->halRateUpdateParams.reliableMcastDataRateTxFlag = + pwdiRateUpdateInd->reliableMcastDataRateTxFlag; + pRateUpdateInd->halRateUpdateParams.mcastDataRate24GHzTxFlag = + pwdiRateUpdateInd->mcastDataRate24GHzTxFlag; + pRateUpdateInd->halRateUpdateParams.mcastDataRate5GHzTxFlag = + pwdiRateUpdateInd->mcastDataRate5GHzTxFlag; + + /* Copy the tx rates */ + pRateUpdateInd->halRateUpdateParams.ucastDataRate = + pwdiRateUpdateInd->ucastDataRate; + pRateUpdateInd->halRateUpdateParams.reliableMcastDataRate = + pwdiRateUpdateInd->reliableMcastDataRate; + pRateUpdateInd->halRateUpdateParams.mcastDataRate24GHz = + pwdiRateUpdateInd->mcastDataRate24GHz; + pRateUpdateInd->halRateUpdateParams.mcastDataRate5GHz = + pwdiRateUpdateInd->mcastDataRate5GHz; + + /*------------------------------------------------------------------------- + Send Rate Update Indication to HAL + -------------------------------------------------------------------------*/ + pWDICtx->wdiReqStatusCB = pwdiRateUpdateInd->wdiReqStatusCB; + pWDICtx->pReqStatusUserData = pwdiRateUpdateInd->pUserData; + + wdiStatus = WDI_SendIndication(pWDICtx, pSendBuffer, usSendSize); + + return (wdiStatus != WDI_STATUS_SUCCESS) ? + wdiStatus : WDI_STATUS_SUCCESS_SYNC; + +} /* WDI_ProcessRateUpdateInd */ + +#if defined WLAN_FEATURE_RELIABLE_MCAST +/** +*@brief Process Leader Selection response where the firmware + provides a list of candidates that can be used as leaders + a.k.a. a receiver that can ACK multicast frames + + @param pWDICtx: pointer to the WLAN DAL context + pEventData: pointer to the event information structure + + @see + @return Result of the function call +*/ +WDI_Status +WDI_ProcessLBPLeaderResp +( + WDI_ControlBlockType* pWDICtx, + WDI_EventInfoType* pEventData +) +{ + tHalLbpLeaderRspMsg halLbpLeaderRspMsg; + WDI_LbpLeaderRspCb wdiLbpLeaderRspCb; + WDI_LbpRspParamsType wdiLbpRsp; + + /* Sanity check */ + if (( NULL == pWDICtx ) || ( NULL == pEventData ) || + ( NULL == pEventData->pEventData )) + { + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, + "%s: Invalid parameters", __func__); + WDI_ASSERT( 0 ); + return WDI_STATUS_E_FAILURE; + } + + wdiLbpLeaderRspCb = (WDI_LbpLeaderRspCb)pWDICtx->pfncRspCB; + + /* Extract indication and send it to UMAC */ + wpalMemoryCopy( &halLbpLeaderRspMsg.leaderRspParams, + pEventData->pEventData, + sizeof(halLbpLeaderRspMsg.leaderRspParams) ); + + wdiLbpRsp.status = halLbpLeaderRspMsg.leaderRspParams.status; + wpalMemoryCopy(wdiLbpRsp.mcastTransmitter, + &halLbpLeaderRspMsg.leaderRspParams.mcastTransmitter, + sizeof(wdiLbpRsp.mcastTransmitter)); + wpalMemoryCopy(wdiLbpRsp.mcastGroup, + &halLbpLeaderRspMsg.leaderRspParams.mcastGroup, + sizeof(wdiLbpRsp.mcastGroup)); + + switch (halLbpLeaderRspMsg.leaderRspParams.cmd) + { + default: + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, + "%s: Invalid command %d", __func__, + halLbpLeaderRspMsg.leaderRspParams.cmd); + return WDI_STATUS_E_FAILURE; + + case WLAN_HAL_SUGGEST_LEADER: + { + /* Fill in the indication parameters */ + wdiLbpRsp.cmd = eWDI_SUGGEST_LEADER_CMD; + wpalMemoryCopy(wdiLbpRsp.leader, + &halLbpLeaderRspMsg.leaderRspParams.leader, + sizeof(wdiLbpRsp.leader)); + WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO, + "%s Suggest_Leader", __func__); + break; + } + + case WLAN_HAL_BECOME_LEADER: + { + /* Fill in the indication parameters */ + wdiLbpRsp.cmd = eWDI_BECOME_LEADER_CMD; + WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO, + "%s Become_Leader", __func__); + break; + } + } + + /* Notify UMAC */ + wdiLbpLeaderRspCb(&wdiLbpRsp, pWDICtx->pRspCBUserData); + + return WDI_STATUS_SUCCESS; +} + +/** +*@brief Process Update Indication where the firmware + provides a list of candidates that can be used as leaders + a.k.a. a receiver that can ACK multicast frames + + @param pWDICtx: pointer to the WLAN DAL context + pEventData: pointer to the event information structure + + @see + @return Result of the function call +*/ +WDI_Status +WDI_ProcessLBPUpdateIndToHost +( + WDI_ControlBlockType* pWDICtx, + WDI_EventInfoType* pEventData +) +{ + WDI_LowLevelIndType wdiInd; + tHalLbpUpdateInd halLbpUpdateInd; + + /* Sanity check */ + if (( NULL == pWDICtx ) || ( NULL == pEventData ) || + ( NULL == pEventData->pEventData )) + { + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, + "%s: Invalid parameters", __func__); + WDI_ASSERT( 0 ); + return WDI_STATUS_E_FAILURE; + } + + /* Extract indication and send it to UMAC */ + wpalMemoryCopy( &halLbpUpdateInd.leaderIndParams, + pEventData->pEventData, + sizeof(halLbpUpdateInd.leaderIndParams) ); + + switch (halLbpUpdateInd.leaderIndParams.indication) + { + default: + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, + "%s: Invalid command %d", __func__, + halLbpUpdateInd.leaderIndParams.indication); + return WDI_STATUS_E_FAILURE; + + case WLAN_HAL_LEADER_PICK_NEW: + { + /* Fill in the indication parameters */ + wdiInd.wdiIndicationType = WDI_LBP_LEADER_PICK_NEW; + wdiInd.wdiIndicationData.wdiLbpPickNewLeaderInd.indication + = halLbpUpdateInd.leaderIndParams.indication; + wdiInd.wdiIndicationData.wdiLbpPickNewLeaderInd.role + = halLbpUpdateInd.leaderIndParams.role; + wpalMemoryCopy(wdiInd.wdiIndicationData.wdiLbpPickNewLeaderInd. \ + mcastTransmitter, + &halLbpUpdateInd.leaderIndParams.mcastTransmitter, + sizeof(tSirMacAddr) ); + wpalMemoryCopy(wdiInd.wdiIndicationData.wdiLbpPickNewLeaderInd.mcastGroup, + &halLbpUpdateInd.leaderIndParams.mcastGroup, + sizeof(tSirMacAddr) ); + wpalMemoryCopy(wdiInd.wdiIndicationData.wdiLbpPickNewLeaderInd.mcastLeader, + &halLbpUpdateInd.leaderIndParams.mcastLeader, + sizeof(tSirMacAddr) ); + wpalMemoryCopy(wdiInd.wdiIndicationData.wdiLbpPickNewLeaderInd.leader, + &halLbpUpdateInd.leaderIndParams.leader, + sizeof(tSirMacAddr) * HAL_NUM_MAX_LEADERS ); + break; + } + } + + + /* Notify UMAC */ + pWDICtx->wdiLowLevelIndCB( &wdiInd, pWDICtx->pIndUserData ); + + return WDI_STATUS_SUCCESS; +} + +/** + @brief WDI_LbpLeaderReq will be called when the upper MAC + requests the device to enable LBP reliable multicast. + + In state BUSY this request will be queued. Request won't + be allowed in any other state. + + + @param wdiLbpLeaderReqParams: + + @see WDI_Start + @return Result of the function call +*/ +WDI_Status +WDI_LbpLeaderReq +( + WDI_LbpLeaderReqParams *wdiLbpLeaderReqParams, + WDI_LbpLeaderRspCb wdiLbpLeaderRspCb, + void *usrData +) +{ + WDI_EventInfoType wdiEventData; + /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + + /*------------------------------------------------------------------------ + Sanity Check + ------------------------------------------------------------------------*/ + if ( eWLAN_PAL_FALSE == gWDIInitialized ) + { + WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, + "WDI API call before module is initialized - Fail request"); + + return WDI_STATUS_E_NOT_ALLOWED; + } + + /*------------------------------------------------------------------------ + Fill in Event data and post to the Main FSM + ------------------------------------------------------------------------*/ + wdiEventData.wdiRequest = WDI_LBP_LEADER_REQ; + wdiEventData.pEventData = wdiLbpLeaderReqParams; + wdiEventData.uEventDataSize = sizeof(WDI_LbpLeaderReqParams); + wdiEventData.pCBfnc = wdiLbpLeaderRspCb; + wdiEventData.pUserData = usrData; + + return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData); + +} /* WDI_LbpLeaderReq */ + +/** + @brief WDI_LbpUpdateInd will be called when the upper MAC + requests the device to enable LBP reliable multicast. + + In state BUSY this request will be queued. Request won't + be allowed in any other state. + + + @param wdiLbpUpdateIndParams: + + + @see WDI_Start + @return Result of the function call +*/ +WDI_Status +WDI_LbpUpdateInd +( + WDI_LbpUpdateIndParams *wdiLbpUpdateIndParams +) +{ + WDI_EventInfoType wdiEventData; /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ - wdiGtkOffloadCb = (WDI_GtkOffloadCb)pWDICtx->pfncRspCB; - - /*------------------------------------------------------------------------- - Sanity check - -------------------------------------------------------------------------*/ - if (( NULL == pWDICtx ) || ( NULL == pEventData ) || - ( NULL == pEventData->pEventData)) - { - WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "%s: Invalid parameters", __func__); - WDI_ASSERT(0); - return WDI_STATUS_E_FAILURE; - } - - /*------------------------------------------------------------------------- - Extract response and send it to UMAC - -------------------------------------------------------------------------*/ - if(WDI_getFwWlanFeatCaps(SLM_SESSIONIZATION)) + /*------------------------------------------------------------------------ + Sanity Check + ------------------------------------------------------------------------*/ + if ( eWLAN_PAL_FALSE == gWDIInitialized ) { - wpalMemoryCopy( &halGtkOffloadRspParams, - pEventData->pEventData, - sizeof(halGtkOffloadRspParams)); + WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, + "WDI API call before module is initialized - Fail request"); - wdiGtkOffloadRsparams.ulStatus = - WDI_HAL_2_WDI_STATUS(halGtkOffloadRspParams.ulStatus); - wdiGtkOffloadRsparams.bssIdx = - halGtkOffloadRspParams.bssIdx; - } - else - { - halStatus = *((eHalStatus*)pEventData->pEventData); - wdiGtkOffloadRsparams.ulStatus = WDI_HAL_2_WDI_STATUS(halStatus); + return WDI_STATUS_E_NOT_ALLOWED; } - /*Notify UMAC*/ - wdiGtkOffloadCb( &wdiGtkOffloadRsparams, pWDICtx->pRspCBUserData); + /*------------------------------------------------------------------------ + Fill in Event data and post to the Main FSM + ------------------------------------------------------------------------*/ + wdiEventData.wdiRequest = WDI_LBP_UPDATE_IND; + wdiEventData.pEventData = wdiLbpUpdateIndParams; + wdiEventData.uEventDataSize = sizeof(WDI_LbpUpdateIndParams); + wdiEventData.pCBfnc = NULL; + wdiEventData.pUserData = NULL; - return WDI_STATUS_SUCCESS; -} + return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData); + +}/* WDI_LbpUpdateInd */ /** - @brief Process GTK Offload Get Information Response function - - @param pWDICtx: pointer to the WLAN DAL context - pEventData: pointer to the event information structure - + @brief Process LBP Leader Request and post it to HAL + + @param pWDICtx: pointer to the WLAN DAL context + pEventData: pointer to the event information structure + @see @return Result of the function call */ WDI_Status -WDI_ProcessGTKOffloadGetInfoRsp -( - WDI_ControlBlockType* pWDICtx, - WDI_EventInfoType* pEventData +WDI_ProcessLBPLeaderReq +( + WDI_ControlBlockType* pWDICtx, + WDI_EventInfoType* pEventData ) { - eHalStatus halStatus; - WDI_GtkOffloadGetInfoCb wdiGtkOffloadGetInfoCb = NULL; - tHalGtkOffloadGetInfoRspParams halGtkOffloadGetInfoRspParams; - WDI_GtkOffloadGetInfoRspParams wdiGtkOffloadGetInfoRsparams; - WDI_BSSSessionType* pBSSSes = NULL; + WDI_Status wdiStatus; + wpt_uint8* pSendBuffer = NULL; + wpt_uint16 usDataOffset = 0; + wpt_uint16 usSendSize = 0; + WDI_LbpLeaderReqParams *pwdiLeaderReq = NULL; + tHalLbpLeaderReqMsg *pLeaderReq; - /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ - wdiGtkOffloadGetInfoCb = (WDI_GtkOffloadGetInfoCb)pWDICtx->pfncRspCB; + WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO, + "%s", __func__); - /*------------------------------------------------------------------------- - Sanity check - -------------------------------------------------------------------------*/ - if (( NULL == pWDICtx ) || ( NULL == pEventData ) || - ( NULL == pEventData->pEventData )) - { - WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "%s: Invalid parameters", __func__); - WDI_ASSERT(0); - return WDI_STATUS_E_FAILURE; - } + /*------------------------------------------------------------------------- + Sanity check + -------------------------------------------------------------------------*/ + if (( NULL == pEventData ) || ( NULL == pEventData->pEventData )) + { + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL, + "%s: Invalid parameters", __func__); + WDI_ASSERT(0); + return WDI_STATUS_E_FAILURE; + } + pwdiLeaderReq = (WDI_LbpLeaderReqParams *)pEventData->pEventData; + /*----------------------------------------------------------------------- + Get message buffer + -----------------------------------------------------------------------*/ - /*------------------------------------------------------------------------- - Extract response and send it to UMAC - -------------------------------------------------------------------------*/ - if(WDI_getFwWlanFeatCaps(SLM_SESSIONIZATION)) - { - wpalMemoryCopy( &halGtkOffloadGetInfoRspParams, - pEventData->pEventData, - sizeof(halGtkOffloadGetInfoRspParams)); + if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, + WDI_LBP_LEADER_REQ, + sizeof(tHalLbpLeaderReqParams), + &pSendBuffer, &usDataOffset, &usSendSize))|| + ( usSendSize < (usDataOffset + + sizeof(tHalLbpLeaderReqParams) ))) + { + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL, + "Unable to get send buffer in LBP Leader Req %p ", + pEventData); + WDI_ASSERT(0); + return WDI_STATUS_E_FAILURE; + } - wdiGtkOffloadGetInfoRsparams.ulStatus = - WDI_HAL_2_WDI_STATUS(halGtkOffloadGetInfoRspParams.ulStatus); - wdiGtkOffloadGetInfoRsparams.ullKeyReplayCounter = - halGtkOffloadGetInfoRspParams.ullKeyReplayCounter; - wdiGtkOffloadGetInfoRsparams.ulTotalRekeyCount = - halGtkOffloadGetInfoRspParams.ulTotalRekeyCount; - wdiGtkOffloadGetInfoRsparams.ulGTKRekeyCount = - halGtkOffloadGetInfoRspParams.ulGTKRekeyCount; - wdiGtkOffloadGetInfoRsparams.ulIGTKRekeyCount = - halGtkOffloadGetInfoRspParams.ulIGTKRekeyCount; + pLeaderReq = (tHalLbpLeaderReqMsg *)pSendBuffer; + pLeaderReq->leaderReqParams.cmd = pwdiLeaderReq->cmd; + wpalMemoryCopy(pLeaderReq->leaderReqParams.mcastTransmitter, + pwdiLeaderReq->mcastTransmitter, WDI_MAC_ADDR_LEN); + wpalMemoryCopy(pLeaderReq->leaderReqParams.mcastGroup, + pwdiLeaderReq->mcastGroup, WDI_MAC_ADDR_LEN); + wpalMemoryCopy(pLeaderReq->leaderReqParams.blacklist, + pwdiLeaderReq->blacklist, + WDI_MAC_ADDR_LEN * HAL_NUM_MAX_LEADERS); + + pWDICtx->pReqStatusUserData = pEventData->pUserData; + pWDICtx->pfncRspCB = pEventData->pCBfnc; - wpalMutexAcquire(&pWDICtx->wptMutex); - WDI_FindAssocSessionByBSSIdx(pWDICtx, halGtkOffloadGetInfoRspParams.bssIdx, - &pBSSSes); + /*------------------------------------------------------------------------- + Send LBP Leader Request to HAL + -------------------------------------------------------------------------*/ + wdiStatus = WDI_SendMsg(pWDICtx, pSendBuffer, + usSendSize, pWDICtx->pfncRspCB, + pWDICtx->pReqStatusUserData, + WDI_LBP_LEADER_RESP); + return wdiStatus; - if ( NULL == pBSSSes ) - { - WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, - "Association sequence for this BSS does not exist or " - "association no longer in progress - mysterious HAL response"); - wpalMutexRelease(&pWDICtx->wptMutex); - return WDI_STATUS_E_NOT_ALLOWED; - } +} /* WDI_ProcessLBPLeaderReq */ - wpalMemoryCopy(wdiGtkOffloadGetInfoRsparams.bssId, pBSSSes->macBSSID, - sizeof (wpt_macAddr)); - wpalMutexRelease(&pWDICtx->wptMutex); - } - else - { - halStatus = *((eHalStatus*)pEventData->pEventData); - wdiGtkOffloadGetInfoRsparams.ulStatus = WDI_HAL_2_WDI_STATUS(halStatus); - } - /*Notify UMAC*/ - //wdiUpdateScanParamsCb(wdiStatus, pWDICtx->pRspCBUserData); - //wdiReceiveFilterClearFilterCb(wdiStatus, pWDICtx->pRspCBUserData); - wdiGtkOffloadGetInfoCb(&wdiGtkOffloadGetInfoRsparams, pWDICtx->pRspCBUserData); +/** + @brief Process LBP Update Indication and post it to HAL - return WDI_STATUS_SUCCESS; -} -#endif // WLAN_FEATURE_GTK_OFFLOAD + @param pWDICtx: pointer to the WLAN DAL context + pEventData: pointer to the event information structure -#ifdef WLAN_WAKEUP_EVENTS + @see + @return Result of the function call +*/ WDI_Status -WDI_ProcessWakeReasonInd -( - WDI_ControlBlockType* pWDICtx, - WDI_EventInfoType* pEventData +WDI_ProcessLBPUpdateInd +( + WDI_ControlBlockType* pWDICtx, + WDI_EventInfoType* pEventData ) { - WDI_LowLevelIndType *pWdiInd; - tpWakeReasonParams pWakeReasonParams; - wpt_uint32 allocSize = 0; + wpt_uint8* pSendBuffer = NULL; + wpt_uint16 usDataOffset = 0; + wpt_uint16 usSendSize = 0; + WDI_LbpUpdateIndParams *pwdiUpdateInd = NULL; + tHalLbpUpdateInd *pUpdateInd; + WDI_Status wdiStatus; - WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO, - "+%s", __func__); + /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ - /*------------------------------------------------------------------------- - Sanity check - -------------------------------------------------------------------------*/ - if (( NULL == pWDICtx ) || ( NULL == pEventData ) || - ( NULL == pEventData->pEventData )) - { - WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "%s: Invalid parameters", __func__); - WDI_ASSERT( 0 ); - return WDI_STATUS_E_FAILURE; - } + WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO, + "%s", __func__); - /*------------------------------------------------------------------------- - Extract indication and send it to UMAC - -------------------------------------------------------------------------*/ - pWakeReasonParams = (tpWakeReasonParams)(pEventData->pEventData); - - allocSize = sizeof(WDI_LowLevelIndType) + (pWakeReasonParams->ulStoredDataLen - 1); + /*------------------------------------------------------------------------- + Sanity check + -------------------------------------------------------------------------*/ + if (( NULL == pEventData ) || ( NULL == pEventData->pEventData )) + { + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL, + "%s: Invalid parameters", __func__); + WDI_ASSERT(0); + return WDI_STATUS_E_FAILURE; + } + pwdiUpdateInd = (WDI_LbpUpdateIndParams *)pEventData->pEventData; + /*----------------------------------------------------------------------- + Get message buffer + -----------------------------------------------------------------------*/ - //Allocate memory for WDI_WakeReasonIndType structure - pWdiInd = wpalMemoryAllocate(allocSize) ; + if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, + WDI_LBP_UPDATE_IND, + sizeof(tHalLbpUpdateIndParams), + &pSendBuffer, &usDataOffset, &usSendSize))|| + ( usSendSize < (usDataOffset + + sizeof(tHalLbpUpdateIndParams) ))) + { + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL, + "Unable to get send buffer in LBP Update Indication %p ", + pEventData); + WDI_ASSERT(0); + return WDI_STATUS_E_FAILURE; + } - if(NULL == pWdiInd) - { - WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "%s: Failed to allocate memory for WDI_WakeReasonIndType: %x %x %x ", - __func__, pWDICtx, pEventData, pEventData->pEventData); - WDI_ASSERT(0); - return WDI_STATUS_E_FAILURE; - } + pUpdateInd = (tHalLbpUpdateInd *)pSendBuffer; - wpalMemoryZero(pWdiInd, allocSize); + pUpdateInd->leaderIndParams.indication = pwdiUpdateInd->indication; + pUpdateInd->leaderIndParams.role = pwdiUpdateInd->role; - /* Fill in the indication parameters*/ - // Fill wdiInd.wdiIndicationData.wakeReasonInd structure from wakeReasonInd.wakeReasonParams - pWdiInd->wdiIndicationType = WDI_WAKE_REASON_IND; - pWdiInd->wdiIndicationData.wdiWakeReasonInd.ulReason = pWakeReasonParams->ulReason; - pWdiInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg = pWakeReasonParams->ulReasonArg; - pWdiInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen = pWakeReasonParams->ulStoredDataLen; - pWdiInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen = pWakeReasonParams->ulActualDataLen; - wpalMemoryCopy( (void *)&(pWdiInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]), - &(pWakeReasonParams->aDataStart[0]), - pWakeReasonParams->ulStoredDataLen); + wpalMemoryCopy(pUpdateInd->leaderIndParams.mcastTransmitter, + pwdiUpdateInd->mcastTransmitter, WDI_MAC_ADDR_LEN); + wpalMemoryCopy(pUpdateInd->leaderIndParams.mcastGroup, + pwdiUpdateInd->mcastGroup, WDI_MAC_ADDR_LEN); + wpalMemoryCopy(pUpdateInd->leaderIndParams.mcastLeader, + pwdiUpdateInd->mcastLeader, WDI_MAC_ADDR_LEN); + /* Zero out parameters not needed for this command */ + wpalMemoryZero(pUpdateInd->leaderIndParams.leader, + WDI_MAC_ADDR_LEN * HAL_NUM_MAX_LEADERS); - if ( pWDICtx->wdiLowLevelIndCB ) - { - /*Notify UMAC*/ - pWDICtx->wdiLowLevelIndCB( pWdiInd, pWDICtx->pIndUserData ); - } - - //Free memory allocated for WDI_WakeReasonIndType structure - wpalMemoryFree(pWdiInd); + /*------------------------------------------------------------------------- + Send LBP Update Indication to HAL + -------------------------------------------------------------------------*/ + pWDICtx->wdiReqStatusCB = pwdiUpdateInd->wdiReqStatusCB; + pWDICtx->pReqStatusUserData = pwdiUpdateInd->pUserData; + + wdiStatus = WDI_SendIndication(pWDICtx, pSendBuffer, usSendSize); + + return (wdiStatus != WDI_STATUS_SUCCESS) ? + wdiStatus : WDI_STATUS_SUCCESS_SYNC; + +} /* WDI_ProcessLBPUpdateInd */ + +#endif /* WLAN_FEATURE_RELIABLE_MCAST */ + +#ifdef FEATURE_CESIUM_PROPRIETARY +/** + @brief Process LBP Update Indication and post it to HAL + + @param pWDICtx: pointer to the WLAN DAL context + pEventData: pointer to the event information structure + + @see + @return Result of the function call +*/ +WDI_Status +WDI_IbssPeerInfoReq +( + WDI_IbssPeerInfoReqType* wdiPeerInfoReqParams, + WDI_IbssPeerInfoReqCb wdiIbssPeerInfoReqCb, + void* pUserData +) +{ + + WDI_EventInfoType wdiEventData; + + /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + /*------------------------------------------------------------------------ + Sanity Check + ------------------------------------------------------------------------*/ + if ( eWLAN_PAL_FALSE == gWDIInitialized ) + { + WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, + "WDI API call before module is initialized - Fail request"); - WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO, - "-%s", __func__); + return WDI_STATUS_E_NOT_ALLOWED; + } - return WDI_STATUS_SUCCESS; -} -#endif // WLAN_WAKEUP_EVENTS + /*------------------------------------------------------------------------ + Fill in Event data and post to the Main FSM + ------------------------------------------------------------------------*/ + wdiEventData.wdiRequest = WDI_HAL_IBSS_PEER_INFO_REQ; + wdiEventData.pEventData = wdiPeerInfoReqParams; + wdiEventData.uEventDataSize = sizeof(WDI_IbssPeerInfoReqType); + wdiEventData.pCBfnc = wdiIbssPeerInfoReqCb; + wdiEventData.pUserData = pUserData; -void WDI_GetWcnssCompiledApiVersion -( - WDI_WlanVersionType *pWcnssApiVersion -) -{ - pWcnssApiVersion->major = WLAN_HAL_VER_MAJOR; - pWcnssApiVersion->minor = WLAN_HAL_VER_MINOR; - pWcnssApiVersion->version = WLAN_HAL_VER_VERSION; - pWcnssApiVersion->revision = WLAN_HAL_VER_REVISION; + return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData); } /** - @brief Process Set TM Level Rsp function (called when a - response is being received over the bus from HAL) - - @param pWDICtx: pointer to the WLAN DAL context - pEventData: pointer to the event information structure - + @brief Process LBP Update Indication and post it to HAL + + @param pWDICtx: pointer to the WLAN DAL context + pEventData: pointer to the event information structure + @see @return Result of the function call */ WDI_Status -WDI_ProcessSetTmLevelRsp -( - WDI_ControlBlockType* pWDICtx, - WDI_EventInfoType* pEventData +WDI_ProcessIbssPeerInfoReq +( + WDI_ControlBlockType* pWDICtx, + WDI_EventInfoType* pEventData ) { - WDI_Status wdiStatus; - eHalStatus halStatus; - WDI_SetTmLevelCb wdiSetTmLevelCb; - /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + WDI_Status wdiStatus; + wpt_uint8* pSendBuffer = NULL; + wpt_uint16 usDataOffset = 0; + wpt_uint16 usSendSize = 0; + WDI_IbssPeerInfoReqType *pwdiInfoReq = NULL; + tHalIbssPeerInfoReq *pPeerInfoReq; + WDI_StaStruct* pSTATable = (WDI_StaStruct*) pWDICtx->staTable; - /*------------------------------------------------------------------------- - Sanity check - -------------------------------------------------------------------------*/ - if (( NULL == pWDICtx ) || ( NULL == pEventData ) || - ( NULL == pEventData->pEventData )) - { - WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "%s: Invalid parameters", __func__); - WDI_ASSERT(0); - return WDI_STATUS_E_FAILURE; - } + /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ - wdiSetTmLevelCb = (WDI_SetPowerParamsCb)pWDICtx->pfncRspCB; + WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO, + "%s", __func__); - /*------------------------------------------------------------------------- - Extract response and send it to UMAC - -------------------------------------------------------------------------*/ - halStatus = *((eHalStatus*)pEventData->pEventData); - wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus); + /*------------------------------------------------------------------------- + Sanity check + -------------------------------------------------------------------------*/ + if (( NULL == pEventData ) || ( NULL == pEventData->pEventData )) + { + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL, + "%s: Invalid parameters", __func__); + WDI_ASSERT(0); + return WDI_STATUS_E_FAILURE; + } + pwdiInfoReq = (WDI_IbssPeerInfoReqType *)pEventData->pEventData; + /*----------------------------------------------------------------------- + Get message buffer + -----------------------------------------------------------------------*/ - /*Notify UMAC*/ - wdiSetTmLevelCb(wdiStatus, pWDICtx->pRspCBUserData); + if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, + WDI_HAL_IBSS_PEER_INFO_REQ, + sizeof(tHalIbssPeerInfoReqParams), + &pSendBuffer, &usDataOffset, &usSendSize))|| + ( usSendSize < (usDataOffset + + sizeof(tHalIbssPeerInfoReqParams) ))) + { + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL, + "Unable to get send buffer in IBSS Peer Info Req %p ", + pEventData); + WDI_ASSERT(0); + return WDI_STATUS_E_FAILURE; + } - return WDI_STATUS_SUCCESS; -}/*WDI_ProcessSetTmLevelRsp*/ + pPeerInfoReq = (tHalIbssPeerInfoReq *)pSendBuffer; + if (VOS_FALSE == pwdiInfoReq->wdiAllPeerInfoReqd) + { + if (pSTATable[pwdiInfoReq->wdiStaIdx].valid) + { + pPeerInfoReq->ibssPeerInfoReqParams.bssIdx = + pSTATable[pwdiInfoReq->wdiStaIdx].bssIdx; + } + else + { + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL, + "Unable to find BSSIDX for STAIDX %d ", + pwdiInfoReq->wdiStaIdx); + return WDI_STATUS_E_FAILURE; + } + } + else + pPeerInfoReq->ibssPeerInfoReqParams.bssIdx = 0; + + pPeerInfoReq->ibssPeerInfoReqParams.staIdx = pwdiInfoReq->wdiStaIdx; + pPeerInfoReq->ibssPeerInfoReqParams.allPeerInfoReqd = pwdiInfoReq->wdiAllPeerInfoReqd; + + pWDICtx->pReqStatusUserData = pEventData->pUserData; + pWDICtx->pfncRspCB = pEventData->pCBfnc; + + /*------------------------------------------------------------------------- + Send IBSS Peer Info request to HAL + -------------------------------------------------------------------------*/ + wdiStatus = WDI_SendMsg(pWDICtx, pSendBuffer, + usSendSize, pWDICtx->pfncRspCB, + pWDICtx->pReqStatusUserData, + WDI_HAL_IBSS_PEER_INFO_RSP); + return wdiStatus; +} /** - @brief Process Set Thermal Mitigation level Changed request - - @param pWDICtx: pointer to the WLAN DAL context - pEventData: pointer to the event information structure - + @brief Process LBP Update Indication and post it to HAL + + @param pWDICtx: pointer to the WLAN DAL context + pEventData: pointer to the event information structure + @see @return Result of the function call */ WDI_Status -WDI_ProcessSetTmLevelReq +WDI_ProcessIbssPeerInfoRsp ( WDI_ControlBlockType* pWDICtx, WDI_EventInfoType* pEventData ) { - WDI_SetTmLevelReqType *pwdiSetTmLevelReq = NULL; - WDI_SetTmLevelCb wdiSetTmLevelCb = NULL; - wpt_uint8* pSendBuffer = NULL; - wpt_uint16 usDataOffset = 0; - wpt_uint16 usSendSize = 0; - tSetThermalMitgationType halTmMsg; + WDI_IbssPeerInfoReqCb wdiPeerInfoCb = NULL; + tHalIbssPeerParams *pHalPeerInfoParams; + WDI_IbssPeerInfoRspParams wdiPeerInfoRspParams; + wpt_uint32 allocSize=0; + WDI_IbssPeerInfoParams *pPeerInfoParams; + wpt_uint8 wdiCount=0; + + /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + + wdiPeerInfoCb = (WDI_IbssPeerInfoReqCb)pWDICtx->pfncRspCB; /*------------------------------------------------------------------------- - Sanity check + Sanity check -------------------------------------------------------------------------*/ - if (( NULL == pEventData ) || - ( NULL == (pwdiSetTmLevelReq = (WDI_SetTmLevelReqType*)pEventData->pEventData)) || - ( NULL == (wdiSetTmLevelCb = (WDI_SetTmLevelCb)pEventData->pCBfnc))) + if (( NULL == pWDICtx ) || ( NULL == pEventData ) || + ( NULL == pEventData->pEventData)) { WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, "%s: Invalid parameters", __func__); WDI_ASSERT(0); - return WDI_STATUS_E_FAILURE; - } - - /*----------------------------------------------------------------------- - Get message buffer - -----------------------------------------------------------------------*/ - if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_SET_TM_LEVEL_REQ, - sizeof(halTmMsg), - &pSendBuffer, &usDataOffset, &usSendSize))|| - ( usSendSize < (usDataOffset + sizeof(halTmMsg) ))) - { - WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in Set PNO req %x %x %x", - pEventData, pwdiSetTmLevelReq, wdiSetTmLevelCb); - WDI_ASSERT(0); - return WDI_STATUS_E_FAILURE; + return WDI_STATUS_E_FAILURE; } - halTmMsg.thermalMitMode = pwdiSetTmLevelReq->tmMode; - halTmMsg.thermalMitLevel = pwdiSetTmLevelReq->tmLevel; - - wpalMemoryCopy( pSendBuffer+usDataOffset, - &halTmMsg, - sizeof(halTmMsg)); - - pWDICtx->pReqStatusUserData = pwdiSetTmLevelReq->pUserData; - pWDICtx->pfncRspCB = NULL; /*------------------------------------------------------------------------- - Send Get STA Request to HAL + Extract response and send it to UMAC -------------------------------------------------------------------------*/ - return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize, - wdiSetTmLevelCb, pEventData->pUserData, WDI_SET_TM_LEVEL_RESP); -} + pHalPeerInfoParams = + ((tHalIbssPeerInfoRspParams *)pEventData->pEventData)->ibssPeerParams; + wdiPeerInfoRspParams.wdiStatus = + WDI_HAL_2_WDI_STATUS(((tHalIbssPeerInfoRspParams *)pEventData->pEventData)->status); + wdiPeerInfoRspParams.wdiNumPeers = + ((tHalIbssPeerInfoRspParams *)pEventData->pEventData)->numOfPeers; -/* Fill the value from the global features enabled array to the global capabilities - * bitmap struct - */ -static void -FillAllFeatureCaps(tWlanFeatCaps *fCaps, placeHolderInCapBitmap *enabledFeat, wpt_int8 len) -{ - wpt_int8 i; - for (i=0; i WDI_MAX_IBSS_PEER_SUPPORED_STAS) { - setFeatCaps(fCaps, enabledFeat[i]); + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL, + "Number of stations %d exceed max supported stations %d ", + wdiPeerInfoRspParams.wdiNumPeers, + WDI_MAX_IBSS_PEER_SUPPORED_STAS); + return WDI_STATUS_MEM_FAILURE; } -} -/** - @brief WDI_featureCapsExchangeReq - Post feature capability bitmap exchange event. - Host will send its own capability to FW in this req and - expect FW to send its capability back as a bitmap in Response - - @param - - wdiFeatureCapsExchangeCb: callback called on getting the response. - It is kept to mantain similarity between WDI reqs and if needed, can - be used in future. Currently, It is set to NULL - - pUserData: user data will be passed back with the - callback - - @see - @return Result of the function call -*/ -WDI_Status -WDI_featureCapsExchangeReq -( - WDI_featureCapsExchangeCb wdiFeatureCapsExchangeCb, - void* pUserData -) -{ - WDI_EventInfoType wdiEventData; - wpt_int32 fCapsStructSize; - - /*------------------------------------------------------------------------ - Sanity Check - ------------------------------------------------------------------------*/ - if ( eWLAN_PAL_FALSE == gWDIInitialized ) + for (wdiCount = 0; wdiCount < wdiPeerInfoRspParams.wdiNumPeers; wdiCount++) { - WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, - "WDI API call before module is initialized - Fail request"); - - return WDI_STATUS_E_NOT_ALLOWED; + tHalIbssPeerParams *pHalTemp = &pHalPeerInfoParams[wdiCount]; + WDI_IbssPeerInfoParams *pWdiTemp = &pPeerInfoParams[wdiCount]; + pWdiTemp->wdiStaIdx = pHalTemp->staIdx; + pWdiTemp->wdiRssi = pHalTemp->rssi; + pWdiTemp->wdiMcsIndex = pHalTemp->mcsIndex; + pWdiTemp->wdiTxRate = pHalTemp->txRate; + pWdiTemp->wdiTxRateFlags = pHalTemp->txRateFlags; } - /* Allocate memory separately for global variable carrying FW caps */ - fCapsStructSize = sizeof(tWlanFeatCaps); - gpHostWlanFeatCaps = wpalMemoryAllocate(fCapsStructSize); - if ( NULL == gpHostWlanFeatCaps ) + wdiPeerInfoRspParams.wdiPeerInfoParams = pPeerInfoParams; + + /*Notify UMAC*/ + if (wdiPeerInfoCb) { - WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, - "Cannot allocate memory for host capability info\n"); - WDI_ASSERT(0); - return WDI_STATUS_MEM_FAILURE; + wdiPeerInfoCb(&wdiPeerInfoRspParams, pWDICtx->pRspCBUserData); } - wpalMemoryZero(gpHostWlanFeatCaps, fCapsStructSize); - - /*------------------------------------------------------------------------ - Fill in Event data and post to the Main FSM - ------------------------------------------------------------------------*/ - FillAllFeatureCaps(gpHostWlanFeatCaps, supportEnabledFeatures, - (sizeof(supportEnabledFeatures)/sizeof(supportEnabledFeatures[0]))); - WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO, - "Host caps %x %x %x %x\n", - gpHostWlanFeatCaps->featCaps[0], - gpHostWlanFeatCaps->featCaps[1], - gpHostWlanFeatCaps->featCaps[2], - gpHostWlanFeatCaps->featCaps[3] - ); - - wdiEventData.wdiRequest = WDI_FEATURE_CAPS_EXCHANGE_REQ; - wdiEventData.pEventData = gpHostWlanFeatCaps; - wdiEventData.uEventDataSize = fCapsStructSize; - wdiEventData.pCBfnc = wdiFeatureCapsExchangeCb; - wdiEventData.pUserData = pUserData; - - return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData); -} + /* Free the allocation */ + vos_mem_free (pPeerInfoParams); -/** - @brief Disable Active mode offload in Host - - @param void - @see - @return void -*/ -void -WDI_disableCapablityFeature(wpt_uint8 feature_index) -{ - supportEnabledFeatures[feature_index] = 0; - return; + return WDI_STATUS_SUCCESS; } /** - @brief Process Host-FW Capability Exchange Request function - - @param pWDICtx: pointer to the WLAN DAL context - pEventData: pointer to the event information structure - + @brief Process IBSS Route table update indication and post it to HAL + + @param pWDICtx: pointer to the WLAN DAL context + pEventData: pointer to the event information structure + @see @return Result of the function call */ WDI_Status -WDI_ProcessFeatureCapsExchangeReq -( - WDI_ControlBlockType* pWDICtx, - WDI_EventInfoType* pEventData +WDI_ProcessIBSSRouteTableUpdateInd +( + WDI_ControlBlockType *pWDICtx, + WDI_EventInfoType *pEventData ) { - wpt_uint8* pSendBuffer = NULL; - wpt_uint16 usDataOffset = 0; - wpt_uint16 usSendSize = 0; - wpt_uint16 usLen = 0; + WDI_IBSSRouteTable *pwdiIBSSRouteTable = NULL; + wpt_uint8 *pSendBuffer = NULL; + wpt_uint16 usDataOffset = 0; + wpt_uint16 usSendSize = 0; + WDI_Status wdiStatus; + tWlanIpForwardTableUpdateIndParam *pUpdateIndParam = NULL; + wpt_uint32 usUpdateIndParamSize; + wpt_uint16 i = 0; /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO, - "%s", __func__); + "%s", __func__); /*------------------------------------------------------------------------- - Sanity check + Sanity check -------------------------------------------------------------------------*/ - /* Call back function is NULL since not required for cap exchange req */ - if (( NULL == pEventData ) || - ( NULL == (tWlanFeatCaps *)pEventData->pEventData)) + if ((NULL == pEventData) || (NULL == pEventData->pEventData)) { - WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL, - "%s: Invalid parameters", __func__); + WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, + "%s: Invalid parameters", __func__); WDI_ASSERT(0); - return WDI_STATUS_E_FAILURE; + return WDI_STATUS_E_FAILURE; + } + + pwdiIBSSRouteTable = + (WDI_IBSSRouteTable*)pEventData->pEventData; + + usUpdateIndParamSize = sizeof(tWlanIpForwardTableUpdateIndParam) + + ((pwdiIBSSRouteTable->numEntries - 1) * + sizeof(tDestIpNextHopMacPair)); + + pUpdateIndParam = (tWlanIpForwardTableUpdateIndParam *)wpalMemoryAllocate( + usUpdateIndParamSize); + + if (NULL == pUpdateIndParam) + { + WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, + "%s: failed to allocate mem for tWlanIpForwardTableUpdateIndParam", + __func__); + wpalMemoryFree(pwdiIBSSRouteTable); + WDI_ASSERT(0); + return WDI_STATUS_E_FAILURE; } + wpalMemoryZero(pUpdateIndParam, usUpdateIndParamSize); + /*----------------------------------------------------------------------- Get message buffer -----------------------------------------------------------------------*/ - usLen = sizeof(tWlanFeatCaps); - if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, - WDI_FEATURE_CAPS_EXCHANGE_REQ, - usLen, + if ((WDI_STATUS_SUCCESS != WDI_GetMessageBuffer(pWDICtx, + WDI_IBSS_ROUTE_TABLE_UPDATE_IND, + usUpdateIndParamSize, &pSendBuffer, &usDataOffset, &usSendSize))|| - ( usSendSize < (usDataOffset + usLen ))) + (usSendSize < (usDataOffset + usUpdateIndParamSize))) { - WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL, - "Unable to get send buffer in feat caps exchange req %x %x", - pEventData, (tWlanFeatCaps *)pEventData->pEventData); + WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, + "Unable to get send buffer in IBSS Route Table Update Ind"); + wpalMemoryFree(pwdiIBSSRouteTable); WDI_ASSERT(0); - return WDI_STATUS_E_FAILURE; + return WDI_STATUS_E_FAILURE; } - WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO, - "Host Caps - %x %x %x %x\n", - ((tWlanFeatCaps *)pEventData->pEventData)->featCaps[0], - ((tWlanFeatCaps *)pEventData->pEventData)->featCaps[1], - ((tWlanFeatCaps *)pEventData->pEventData)->featCaps[2], - ((tWlanFeatCaps *)pEventData->pEventData)->featCaps[3] - ); + pUpdateIndParam->numEntries = pwdiIBSSRouteTable->numEntries; - /* Copy host caps after the offset in the send buffer */ - wpalMemoryCopy( pSendBuffer+usDataOffset, - (tWlanFeatCaps *)pEventData->pEventData, - usLen); + for (i = 0; i < pwdiIBSSRouteTable->numEntries; i++) + { + wpalMemoryCopy(&pUpdateIndParam->destIpMacPair[i].destIpv4Addr, + &pwdiIBSSRouteTable->destIpMacPair[i].destIpv4Addr, + HAL_IPV4_ADDR_LEN); + wpalMemoryCopy(&pUpdateIndParam->destIpMacPair[i].nextHopMacAddr, + &pwdiIBSSRouteTable->destIpMacPair[i].nextHopMacAddr, + HAL_MAC_ADDR_LEN); + } - /*------------------------------------------------------------------------- - Send Start Request to HAL + wpalMemoryCopy(pSendBuffer+usDataOffset, pUpdateIndParam, + usUpdateIndParamSize); + + pWDICtx->wdiReqStatusCB = pwdiIBSSRouteTable->wdiReqStatusCB; + pWDICtx->pReqStatusUserData = pwdiIBSSRouteTable->pUserData; + + wpalMemoryFree(pwdiIBSSRouteTable); + wpalMemoryFree(pUpdateIndParam); + + /*------------------------------------------------------------------------- + Send IBSS Route Table Update Indication to HAL -------------------------------------------------------------------------*/ - return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize, - (WDI_StartRspCb)pEventData->pCBfnc, - pEventData->pUserData, WDI_FEATURE_CAPS_EXCHANGE_RESP); - -}/*WDI_ProcessFeatureCapsExchangeReq*/ + wdiStatus = WDI_SendIndication(pWDICtx, pSendBuffer, usSendSize); + + return (wdiStatus != WDI_STATUS_SUCCESS) ? + wdiStatus : WDI_STATUS_SUCCESS_SYNC; +}/*WDI_ProcessIBSSRouteTableUpdateInd*/ /** - @brief Process Host-FW Capability Exchange Response function - - @param pWDICtx: pointer to the WLAN DAL context - pEventData: pointer to the event information structure - + @brief WDI_IBSSRouteTableUpdateInd + Forward the IBSS Route Table Update Indication + + @param + + wdiIBSSRouteTableInd: IBSS Route table + @see @return Result of the function call */ + WDI_Status -WDI_ProcessFeatureCapsExchangeRsp -( - WDI_ControlBlockType* pWDICtx, - WDI_EventInfoType* pEventData +WDI_IBSSRouteTableUpdateInd +( + WDI_IBSSRouteTable *pwdiIBSSRouteTable ) { - WDI_featureCapsExchangeCb wdiFeatureCapsExchangeCb; - wpt_int32 fCapsStructSize; - /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ - - WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO, - "%s", __func__); - - /*------------------------------------------------------------------------- - Sanity check - -------------------------------------------------------------------------*/ - if (( NULL == pWDICtx ) || ( NULL == pEventData ) || - ( NULL == pEventData->pEventData )) - { - /* It will go here when riva is old (doesn't understand this msg) and host is new */ - WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "%s: Invalid parameters", __func__); - WDI_ASSERT(0); - return WDI_STATUS_E_FAILURE; - } + WDI_EventInfoType wdiEventData; - /* Allocate memory separately for global variable carrying FW caps */ - fCapsStructSize = sizeof(tWlanFeatCaps); - gpFwWlanFeatCaps = wpalMemoryAllocate(fCapsStructSize); - if ( NULL == gpFwWlanFeatCaps ) + /*------------------------------------------------------------------------ + Sanity Check + ------------------------------------------------------------------------*/ + if (eWLAN_PAL_FALSE == gWDIInitialized) { WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, - "Cannot allocate memory for host capability info\n"); - WDI_ASSERT(0); - return WDI_STATUS_MEM_FAILURE; + "WDI API call before module is initialized - Fail request"); + + wpalMemoryFree(pwdiIBSSRouteTable); + return WDI_STATUS_E_NOT_ALLOWED; } - /*------------------------------------------------------------------------- - Unpack HAL Response Message - the header was already extracted by the - main Response Handling procedure - -------------------------------------------------------------------------*/ - /*------------------------------------------------------------------------- - Extract response and send it to UMAC - -------------------------------------------------------------------------*/ + wdiEventData.wdiRequest = WDI_IBSS_ROUTE_TABLE_UPDATE_IND; + wdiEventData.pEventData = pwdiIBSSRouteTable; + wdiEventData.uEventDataSize = sizeof(*pwdiIBSSRouteTable); + wdiEventData.pCBfnc = NULL; + wdiEventData.pUserData = NULL; - wpalMemoryCopy(gpFwWlanFeatCaps,(tWlanFeatCaps *) pEventData -> pEventData, - fCapsStructSize); - WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO, - "FW caps %x %x %x %x\n", - gpFwWlanFeatCaps->featCaps[0], - gpFwWlanFeatCaps->featCaps[1], - gpFwWlanFeatCaps->featCaps[2], - gpFwWlanFeatCaps->featCaps[3] - ); - wdiFeatureCapsExchangeCb = (WDI_featureCapsExchangeCb) pWDICtx -> pfncRspCB; + return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData); +} +#endif /* FEATURE_CESIUM_PROPRIETARY */ - /*Notify UMAC - there is no callback right now but can be used in future if reqd */ - if (wdiFeatureCapsExchangeCb != NULL) - wdiFeatureCapsExchangeCb(NULL, NULL); +#ifdef FEATURE_WLAN_BATCH_SCAN - return WDI_STATUS_SUCCESS; -} +/** + @brief Process stop batch indication from WDA -#ifdef WLAN_FEATURE_11AC + @param pWDICtx: pointer to the WLAN DAL context + pEventData: pointer to the event information structure + + @see + @return Result of the function call +*/ WDI_Status -WDI_ProcessUpdateVHTOpModeRsp -( +WDI_ProcessStopBatchScanInd +( WDI_ControlBlockType* pWDICtx, WDI_EventInfoType* pEventData ) { - WDI_UpdateVHTOpModeCb wdiVHTOpModeCb = NULL; - WDI_Status wdiStatus; - eHalStatus halStatus; - - /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + wpt_uint8* pSendBuffer = NULL; + wpt_uint16 usDataOffset = 0; + wpt_uint16 usSendSize = 0; + WDI_Status wdiStatus; + tHalBatchScanStopIndParam *pHalInd = NULL; + WDI_StopBatchScanIndType *pWdiInd = NULL; - /*------------------------------------------------------------------------- - Sanity check - -------------------------------------------------------------------------*/ - if (( NULL == pWDICtx ) || ( NULL == pEventData ) || - ( NULL == pEventData->pEventData)) - { - WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "%s: Invalid parameters", __func__); - WDI_ASSERT(0); - return WDI_STATUS_E_FAILURE; - } - wdiVHTOpModeCb = (WDI_UpdateVHTOpModeCb)pEventData->pCBfnc; - /*------------------------------------------------------------------------- - Extract response and send it to UMAC - -------------------------------------------------------------------------*/ - halStatus = *((eHalStatus*)pEventData->pEventData); - wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus); + /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ - /*Notify UMAC*/ - wdiVHTOpModeCb( wdiStatus, pEventData->pUserData); + WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO, + "%s", __func__); - return WDI_STATUS_SUCCESS; -} -#endif -/** - @brief WDI_getHostWlanFeatCaps - WDI API that returns whether the feature passed to it as enum value in - "placeHolderInCapBitmap" is supported by Host or not. It uses WDI global - variable storing host capability bitmap to find this. This can be used by - other moduels to decide certain things like call different APIs based on - whether a particular feature is supported. - - @param - - feat_enum_value: enum value for the feature as in placeHolderInCapBitmap in wlan_hal_msg.h. + /*------------------------------------------------------------------------- + Sanity check + -------------------------------------------------------------------------*/ - @see - @return - 0 - if the feature is NOT supported in host - any non-zero value - if the feature is SUPPORTED in host. -*/ -wpt_uint8 WDI_getHostWlanFeatCaps(wpt_uint8 feat_enum_value) -{ - wpt_uint8 featSupported = 0; - if (gpHostWlanFeatCaps != NULL) - { - getFeatCaps(gpHostWlanFeatCaps, feat_enum_value, featSupported); - } - else - { - WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO, - "Caps exchange feature NOT supported. Return NOT SUPPORTED for %u feature", feat_enum_value); - } - return featSupported; + if (( NULL == pEventData ) || ( NULL == pEventData->pEventData )) + { + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL, + "%s: Invalid parameters", __func__); + WDI_ASSERT(0); + return WDI_STATUS_E_FAILURE; + } + pWdiInd = (WDI_StopBatchScanIndType *)pEventData->pEventData; + /*----------------------------------------------------------------------- + Get message buffer + -----------------------------------------------------------------------*/ + + if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, + WDI_STOP_BATCH_SCAN_IND, + sizeof(tHalBatchScanStopIndParam), + &pSendBuffer, &usDataOffset, &usSendSize))|| + ( usSendSize < (usDataOffset + sizeof(tHalBatchScanStopIndParam)))) + { + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL, + "Unable to get send buffer in stop batch scan ind %p ", + pEventData); + WDI_ASSERT(0); + return WDI_STATUS_E_FAILURE; + } + + pHalInd = (tHalBatchScanStopIndParam *)(pSendBuffer + usDataOffset); + pHalInd->param = pWdiInd->param; + + pWDICtx->pReqStatusUserData = NULL; + pWDICtx->pfncRspCB = NULL; + /*------------------------------------------------------------------------- + Send Stop batch scan indication to HAL + -------------------------------------------------------------------------*/ + wdiStatus = WDI_SendIndication( pWDICtx, pSendBuffer, usSendSize); + return (wdiStatus != WDI_STATUS_SUCCESS) ? wdiStatus:WDI_STATUS_SUCCESS_SYNC; } /** - @brief WDI_getFwWlanFeatCaps - WDI API that returns whether the feature passed to it as enum value in - "placeHolderInCapBitmap" is supported by FW or not. It uses WDI global - variable storing host capability bitmap to find this. This can be used by - other moduels to decide certain things like call different APIs based on - whether a particular feature is supported. - - @param - - feat_enum_value: enum value for the feature as in placeHolderInCapBitmap - in wlan_hal_msg.h. + @brief This API is called to trigger batch scan results from FW + + @param pWDICtx: pointer to the WLAN DAL context + pEventData: pointer to the event information structure @see - @return - 0 - if the feature is NOT supported in FW - any non-zero value - if the feature is SUPPORTED in FW. + @return Result of the function call */ -wpt_uint8 WDI_getFwWlanFeatCaps(wpt_uint8 feat_enum_value) -{ - wpt_uint8 featSupported = 0; - if (gpFwWlanFeatCaps != NULL) - { - getFeatCaps(gpFwWlanFeatCaps, feat_enum_value, featSupported); - } - else - { - WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO, - "Caps exchange feature NOT supported. Return NOT SUPPORTED for %u feature", feat_enum_value); - } - return featSupported; -} - -#ifdef WLAN_FEATURE_11AC WDI_Status -WDI_ProcessUpdateVHTOpModeReq +WDI_ProcessTriggerBatchScanResultInd ( WDI_ControlBlockType* pWDICtx, - WDI_EventInfoType* pEventData -) -{ - WDI_UpdateVHTOpMode* pwdiVHTOpModeParams = NULL; - WDI_UpdateVHTOpModeCb wdiVHTOpModeCb = NULL; - wpt_uint8* pSendBuffer = NULL; - wpt_uint16 usDataOffset = 0; - wpt_uint16 usSendSize = 0; + WDI_EventInfoType* pEventData +) +{ + WDI_Status wdiStatus; + wpt_uint8* pSendBuffer = NULL; + wpt_uint16 usDataOffset = 0; + wpt_uint16 usSendSize = 0; + tHalBatchScanTriggerResultParam *pHalInd = NULL; + WDI_TriggerBatchScanResultIndType *pWdiInd = NULL; + /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ @@ -26763,149 +29864,346 @@ WDI_ProcessUpdateVHTOpModeReq "%s", __func__); /*------------------------------------------------------------------------- - Sanity check + Sanity check -------------------------------------------------------------------------*/ - if (( NULL == pEventData ) || - ( NULL == (pwdiVHTOpModeParams = (WDI_UpdateVHTOpMode*)pEventData->pEventData)) || - ( NULL == (wdiVHTOpModeCb = (WDI_UpdateVHTOpModeCb)pEventData->pCBfnc))) - { - WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "%s: Invalid parameters", __func__); - WDI_ASSERT(0); - return WDI_STATUS_E_FAILURE; - } - + + if (( NULL == pEventData ) || ( NULL == pEventData->pEventData )) + { + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL, + "%s: Invalid parameters", __func__); + WDI_ASSERT(0); + return WDI_STATUS_E_FAILURE; + } + pWdiInd = (WDI_TriggerBatchScanResultIndType *)pEventData->pEventData; /*----------------------------------------------------------------------- Get message buffer -----------------------------------------------------------------------*/ - if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_UPDATE_VHT_OP_MODE_REQ, - sizeof(WDI_UpdateVHTOpMode), + + if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, + WDI_TRIGGER_BATCH_SCAN_RESULT_IND, + sizeof(tHalBatchScanTriggerResultParam), &pSendBuffer, &usDataOffset, &usSendSize))|| - ( usSendSize < (usDataOffset + sizeof(WDI_UpdateVHTOpMode) ))) + ( usSendSize < (usDataOffset + sizeof(tHalBatchScanTriggerResultParam)))) { - WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in update vht opMode req"); + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL, + "Unable to get send buffer in stop batch scan ind %p ", + pEventData); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; } - WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "pwdiVHTOpModeParams->opMode=%d, pwdiVHTOpModeParams->staId=%d\n", pwdiVHTOpModeParams->opMode, pwdiVHTOpModeParams->staId); - - wpalMemoryCopy( pSendBuffer+usDataOffset, pwdiVHTOpModeParams, - sizeof(WDI_UpdateVHTOpMode)); + pHalInd = (tHalBatchScanTriggerResultParam *)(pSendBuffer + usDataOffset); + pHalInd->param = pWdiInd->param; + pWDICtx->pReqStatusUserData = NULL; + pWDICtx->pfncRspCB = NULL; /*------------------------------------------------------------------------- - Send Start Request to HAL + Send trigger batch scan result indication to HAL -------------------------------------------------------------------------*/ - return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize, - wdiVHTOpModeCb, - pEventData->pUserData, WDI_UPDATE_VHT_OP_MODE_RESP); - + wdiStatus = WDI_SendIndication( pWDICtx, pSendBuffer, usSendSize); + return (wdiStatus != WDI_STATUS_SUCCESS) ? wdiStatus:WDI_STATUS_SUCCESS_SYNC; } + +/** + @brief Process set batch scan response from FW + + @param pWDICtx: pointer to the WLAN DAL context + pEventData: pointer to the event information structure + + @see + @return Result of the function call +*/ WDI_Status -WDI_UpdateVHTOpModeReq +WDI_ProcessSetBatchScanRsp ( - WDI_UpdateVHTOpMode *pData, - WDI_UpdateVHTOpModeCb wdiUpdateVHTOpModeCb, - void* pUserData + WDI_ControlBlockType* pWDICtx, + WDI_EventInfoType* pEventData ) { - WDI_EventInfoType wdiEventData; + WDI_SetBatchScanCb wdiSetBatchScanCb; + WDI_SetBatchScanRspType *pSetBatchScanRsp; - /*------------------------------------------------------------------------ - Sanity Check - ------------------------------------------------------------------------*/ - if ( eWLAN_PAL_FALSE == gWDIInitialized ) - { - WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, - "WDI API call before module is initialized - Fail request"); + tHalBatchScanSetRspParam *pHalSetBatchScanRsp; + /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ - return WDI_STATUS_E_NOT_ALLOWED; - } + /*sanity check*/ + if (( NULL == pWDICtx ) || ( NULL == pEventData ) || + ( NULL == pEventData->pEventData)) + { + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, + "%s: Invalid parameters", __func__); + WDI_ASSERT(0); + return WDI_STATUS_E_FAILURE; + } - /*------------------------------------------------------------------------ - Fill in Event data and post to the Main FSM - ------------------------------------------------------------------------*/ - wdiEventData.wdiRequest = WDI_UPDATE_VHT_OP_MODE_REQ; - wdiEventData.pEventData = pData; - wdiEventData.uEventDataSize = sizeof(WDI_UpdateVHTOpMode); - wdiEventData.pCBfnc = wdiUpdateVHTOpModeCb; - wdiEventData.pUserData = pUserData; - - WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "pData->opMode=%d, pData->staId=%d\n", pData->opMode, pData->staId); + wdiSetBatchScanCb = (WDI_SetBatchScanCb)pWDICtx->pfncRspCB; + if ( NULL == wdiSetBatchScanCb) + { + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL, + "%s: call back function is NULL", __func__); + WDI_ASSERT(0); + return WDI_STATUS_E_FAILURE; + } - return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData); + pSetBatchScanRsp = wpalMemoryAllocate(sizeof(WDI_SetBatchScanRspType)); -} -#endif + if (NULL == pSetBatchScanRsp) + { + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, + "Failed to allocate memory in set batch scan response %p %p %p ", + pWDICtx, pEventData, pEventData->pEventData); + WDI_ASSERT(0); + return WDI_STATUS_E_FAILURE; + } + + /*extract response and send it to UMAC*/ + pHalSetBatchScanRsp = (tHalBatchScanSetRspParam *)pEventData->pEventData; + + pSetBatchScanRsp->nScansToBatch = pHalSetBatchScanRsp->supportedMscan; + + /*Notify UMAC*/ + wdiSetBatchScanCb(pSetBatchScanRsp, pWDICtx->pRspCBUserData); + + wpalMemoryFree(pSetBatchScanRsp); + + return WDI_STATUS_SUCCESS; +}/*WDI_ProcessSetBatchScanRsp*/ /** - @brief WDI_TransportChannelDebug - - Display DXE Channel debugging information - User may request to display DXE channel snapshot - Or if host driver detects any abnormal stcuk may display - - @param displaySnapshot : Display DXE snapshot option - @param enableStallDetect : Enable stall detect feature - This feature will take effect to data performance - Not integrate till fully verification + @brief Process batch scan result indication from FW + + @param pWDICtx: pointer to the WLAN DAL context + pEventData: pointer to the event information structure + @see - @return none + @return Result of the function call */ -void WDI_TransportChannelDebug +WDI_Status +WDI_ProcessBatchScanResultInd ( - wpt_boolean displaySnapshot, - wpt_boolean toggleStallDetect + WDI_ControlBlockType* pWDICtx, + WDI_EventInfoType* pEventData ) { - WDTS_ChannelDebug(displaySnapshot, toggleStallDetect); - return; -} + void *pBatchScanResultInd; + WDI_LowLevelIndType wdiInd; + /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + + /*sanity check*/ + if (( NULL == pWDICtx ) || ( NULL == pEventData ) || + ( NULL == pEventData->pEventData)) + { + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, + "%s: Invalid parameters", __func__); + WDI_ASSERT(0); + return WDI_STATUS_E_FAILURE; + } + + /*extract response and send it to UMAC*/ + pBatchScanResultInd = (void *)pEventData->pEventData; + + /*Fill in the indication parameters*/ + wdiInd.wdiIndicationType = WDI_BATCH_SCAN_RESULT_IND; + + wdiInd.wdiIndicationData.pBatchScanResult = pBatchScanResultInd; + + /*Notify UMAC*/ + if (pWDICtx->wdiLowLevelIndCB) + { + pWDICtx->wdiLowLevelIndCB( &wdiInd, pWDICtx->pIndUserData ); + } + else + { + WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, + "%s: WDILowLevelIndCb is null", __func__); + WDI_ASSERT(0); + return WDI_STATUS_E_FAILURE; + } + + return WDI_STATUS_SUCCESS; +} /*End of WDI_ProcessBatchScanResultInd*/ + /** - @brief WDI_SsrTimerCB - Callback function for SSR timer, if this is called then the graceful - shutdown for Riva did not happen. + @brief WDI_ProcessSetBatchScanReq - + Set batch scan request to FW - @param pUserData : user data to timer + @param pWDICtx : wdi context + pEventData : indication data @see @return none */ -void -WDI_SsrTimerCB +WDI_Status WDI_ProcessSetBatchScanReq ( - void *pUserData + WDI_ControlBlockType* pWDICtx, + WDI_EventInfoType* pEventData ) { - WDI_ControlBlockType* pWDICtx = (WDI_ControlBlockType*)pUserData; - /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + WDI_SetBatchScanReqType *pWdiReq; + WDI_Status wdiStatus; + wpt_uint8* pSendBuffer = NULL; + wpt_uint16 usDataOffset = 0; + wpt_uint16 usSendSize = 0; + tHalBatchScanSetParams *pHalReq; + /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ - if (NULL == pWDICtx ) + /*sanity check*/ + if ((NULL == pEventData) || (NULL == pEventData->pEventData)) + { + WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, + "%s: Invalid parameters in set batch scan request", __func__); + WDI_ASSERT(0); + return WDI_STATUS_E_FAILURE; + } + + + pWdiReq = (WDI_SetBatchScanReqType *)pEventData->pEventData; + + + /*get message buffer*/ + if ((WDI_STATUS_SUCCESS != WDI_GetMessageBuffer(pWDICtx, + WDI_SET_BATCH_SCAN_REQ, + sizeof(tHalBatchScanSetParams), + &pSendBuffer, &usDataOffset, &usSendSize))|| + (usSendSize < (usDataOffset + sizeof(tHalBatchScanSetParams)))) + { + WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, + "Unable to get send buffer for SET_BATCH_SCAN_REQ "); + WDI_ASSERT(0); + return WDI_STATUS_E_FAILURE; + } + + pHalReq = (tHalBatchScanSetParams *)(pSendBuffer + usDataOffset); + + pHalReq->rtt = pWdiReq->rtt; + pHalReq->rfBand = pWdiReq->rfBand; + pHalReq->bestNetworks = pWdiReq->bestNetwork; + pHalReq->scanInterval = pWdiReq->scanFrequency; + pHalReq->numScan2Batch = pWdiReq->numberOfScansToBatch; + + /*send set batch scan request to fw*/ + pWDICtx->pfncRspCB = pEventData->pCBfnc; + pWDICtx->pReqStatusUserData = pEventData->pUserData; + + wdiStatus = WDI_SendMsg(pWDICtx, pSendBuffer, + usSendSize, pWDICtx->pfncRspCB, + pWDICtx->pReqStatusUserData, + WDI_SET_BATCH_SCAN_RESP); + + return wdiStatus; +} + +/** + @brief WDI_SetBatchScanReq + This API is called to set batch scan request in FW + + @param pBatchScanReqParam : pointer to set batch scan re param + usrData : Client context + setBatchScanRspCb : set batch scan resp callback + @see + @return SUCCESS or FAIL +*/ +WDI_Status WDI_SetBatchScanReq +( + void *pBatchScanReqParam, + void *usrData, + WDI_SetBatchScanCb setBatchScanRspCb +) +{ + WDI_EventInfoType wdiEventData; + + /*sanity check*/ + if (eWLAN_PAL_FALSE == gWDIInitialized) + { + WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, + "WDI API call before module is initialized - Fail request"); + + return WDI_STATUS_E_NOT_ALLOWED; + } + + /* fill in event data and post to the main FSM */ + wdiEventData.wdiRequest = WDI_SET_BATCH_SCAN_REQ; + wdiEventData.pEventData = pBatchScanReqParam; + wdiEventData.uEventDataSize = sizeof(WDI_SetBatchScanReqType); + wdiEventData.pCBfnc = setBatchScanRspCb; + wdiEventData.pUserData = usrData; + + return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData); +} + +/** + @brief WDI_StopbatchScanInd: Send stop batch scan indication to FW + + @param None + + @see + + @return Status of the request +*/ +WDI_Status +WDI_StopBatchScanInd(WDI_StopBatchScanIndType *pWdiReq) +{ + WDI_EventInfoType wdiEventData; + + /*------------------------------------------------------------------------- + Sanity Check + ------------------------------------------------------------------------*/ + if (eWLAN_PAL_FALSE == gWDIInitialized) { - WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "%s: Invalid parameters", __func__); - WDI_ASSERT(0); - return; + WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, + "WDI API call before module is initialized - Fail request!"); + + return WDI_STATUS_E_NOT_ALLOWED; } - wpalRivaSubystemRestart(); - return; + /*------------------------------------------------------------------------- + Fill in Event data and post to the Main FSM + ------------------------------------------------------------------------*/ + wdiEventData.wdiRequest = WDI_STOP_BATCH_SCAN_IND; + wdiEventData.pEventData = pWdiReq; + wdiEventData.uEventDataSize = sizeof(WDI_StopBatchScanIndType); + wdiEventData.pCBfnc = NULL; + wdiEventData.pUserData = NULL; -}/*WDI_SsrTimerCB*/ + return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData); +} /** - @brief WDI_SetEnableSSR - - This API is called to enable/disable SSR on WDI timeout. - - @param enableSSR : enable/disable SSR + @brief WDI_TriggerBatchScanResultInd + This API is called to pull batch scan result from FW + @param pWdiReq : pointer to get batch scan ind param @see - @return none + @return SUCCESS or FAIL */ -void WDI_SetEnableSSR(wpt_boolean enableSSR) +WDI_Status WDI_TriggerBatchScanResultInd +( + WDI_TriggerBatchScanResultIndType *pWdiReq +) { - gWDICb.bEnableSSR = enableSSR; + WDI_EventInfoType wdiEventData; + /*------------------------------------------------------------------------- + Sanity Check + ------------------------------------------------------------------------*/ + if (eWLAN_PAL_FALSE == gWDIInitialized) + { + WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, + "WDI API call before module is initialized - Fail request!"); + + return WDI_STATUS_E_NOT_ALLOWED; + } + + /*------------------------------------------------------------------------- + Fill in Event data and post to the Main FSM + ------------------------------------------------------------------------*/ + wdiEventData.wdiRequest = WDI_TRIGGER_BATCH_SCAN_RESULT_IND; + wdiEventData.pEventData = pWdiReq; + wdiEventData.uEventDataSize = sizeof(WDI_TriggerBatchScanResultIndType); + wdiEventData.pCBfnc = NULL; + wdiEventData.pUserData = NULL; + + return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData); } + +#endif /*FEATURE_WLAN_BATCH_SCAN*/ diff --git a/CORE/WDI/CP/src/wlan_qct_wdi_dp.c b/CORE/WDI/CP/src/wlan_qct_wdi_dp.c index 156ba2e2c366..6adad68f3cdd 100644 --- a/CORE/WDI/CP/src/wlan_qct_wdi_dp.c +++ b/CORE/WDI/CP/src/wlan_qct_wdi_dp.c @@ -362,6 +362,9 @@ WDI_TxBdFastFwd ucTxFlag: different option setting for TX. + ucProtMgmtFrame: for management frames, whether the frame is + protected (protect bit is set in FC) + uTimeStamp: Timestamp when the frame was received from HDD. (usec) @return @@ -379,7 +382,8 @@ WDI_FillTxBd wpt_uint8* pTid, wpt_uint8 ucDisableFrmXtl, void* pTxBd, - wpt_uint8 ucTxFlag, + wpt_uint32 ucTxFlag, + wpt_uint8 ucProtMgmtFrame, wpt_uint32 uTimeStamp, wpt_uint8* staIndex ) @@ -406,7 +410,7 @@ WDI_FillTxBd ucSubType = (ucTypeSubtype & WDI_FRAME_SUBTYPE_MASK); WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Type: %d/%d, MAC S: %08x. MAC D: %08x., Tid=%d, frmXlat=%d, pTxBD=%08x ucTxFlag 0x%X\n", + "Type: %d/%d, MAC S: %08x. MAC D: %08x., Tid=%d, frmXlat=%d, pTxBD=%p ucTxFlag 0x%X", ucType, ucSubType, *((wpt_uint32 *) pAddr2), *((wpt_uint32 *) pDestMacAddr), @@ -533,6 +537,13 @@ WDI_FillTxBd pBd->bdRate = WDI_BDRATE_CTRL_FRAME; } #endif + +#ifdef FEATURE_WLAN_RELIABLE_MCAST + if(ucTxFlag & WDI_USE_BD_RATE_MASK) + { + pBd->bdRate = WDI_BDRATE_BCDATA_FRAME; + } +#endif pBd->rmf = WDI_RMF_DISABLED; /* sanity: Might already be set by caller, but enforce it here again */ @@ -593,16 +604,23 @@ WDI_FillTxBd * Sanity: Force HW frame translation OFF for mgmt frames. --------------------------------------------------------------------*/ /* apply to both ucast/mcast mgmt frames */ - if (useStaRateForBcastFrames) + /* Probe requests are sent using BD rate */ + if( ucSubType == WDI_MAC_MGMT_PROBE_REQ ) { - pBd->bdRate = (ucUnicastDst)? WDI_BDRATE_BCMGMT_FRAME : WDI_TXBD_BDRATE_DEFAULT; + pBd->bdRate = WDI_BDRATE_BCMGMT_FRAME; } else { - pBd->bdRate = WDI_BDRATE_BCMGMT_FRAME; + if (useStaRateForBcastFrames) + { + pBd->bdRate = (ucUnicastDst)? WDI_BDRATE_BCMGMT_FRAME : WDI_TXBD_BDRATE_DEFAULT; + } + else + { + pBd->bdRate = WDI_BDRATE_BCMGMT_FRAME; + } } - - if ( ucTxFlag & WDI_USE_BD_RATE2_FOR_MANAGEMENT_FRAME) + if ( ucTxFlag & WDI_USE_BD_RATE2_FOR_MANAGEMENT_FRAME) { pBd->bdRate = WDI_BDRATE_CTRL_FRAME; } @@ -654,7 +672,8 @@ WDI_FillTxBd /* Mark the BD could not be reused */ uTxBdSignature = WDI_TXBD_SIG_MGMT_MAGIC; #endif - if(ucTxFlag & WDI_USE_SELF_STA_REQUESTED_MASK) + if((ucTxFlag & WDI_USE_SELF_STA_REQUESTED_MASK) && + !(ucIsRMF && ucProtMgmtFrame)) { #ifdef HAL_SELF_STA_PER_BSS // Get the (self) station index from ADDR2, which should be the self MAC addr @@ -826,29 +845,12 @@ WDI_FillTxBd if(ucIsRMF && pSta->rmfEnabled) { + pBd->dpuNE = !ucProtMgmtFrame; pBd->rmf = 1; if(!ucUnicastDst) pBd->dpuDescIdx = pSta->bcastMgmtDpuIndex; /* IGTK */ else - { - wpt_uint8 peerStaId; - - //We need to find the peer's station's DPU index to send this - //frame using PTK - wdiStatus = WDI_STATableFindStaidByAddr( pWDICtx, - *(wpt_macAddr*)pDestMacAddr, &peerStaId ); - if (WDI_STATUS_SUCCESS != wdiStatus) - { - WPAL_TRACE(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR, - "%s failed to find peer sta %02X-%02X-%02X-%02X-%02X-%02X", - __FUNCTION__, ((wpt_uint8 *)pDestMacAddr)[0], - ((wpt_uint8 *)pDestMacAddr)[1], ((wpt_uint8 *)pDestMacAddr)[5], - ((wpt_uint8 *)pDestMacAddr)[3], ((wpt_uint8 *)pDestMacAddr)[4], - ((wpt_uint8 *)pDestMacAddr)[5]); - return WDI_STATUS_E_FAILURE; - } - pBd->dpuDescIdx = ((WDI_StaStruct*)pWDICtx->staTable)[peerStaId].dpuIndex; /* PTK */ - } + pBd->dpuDescIdx = pSta->dpuIndex; /* PTK */ } else { @@ -866,6 +868,13 @@ WDI_FillTxBd WDI_STATableGetStaType(pWDICtx, ucStaId, &ucSTAType); if(!ucUnicastDst) +#ifdef WLAN_FEATURE_RELIABLE_MCAST + /*Check for reliable MCAST enabled bit if set then + queue frames in QID 1 else 0*/ + if ( ucTxFlag & WDI_RELIABLE_MCAST_REQUESTED_MASK ) + pBd->queueId = BTQM_QID1; + else +#endif pBd->queueId = BTQM_QID0; #ifndef HAL_SELF_STA_PER_BSS else if( ucUnicastDst && (ucStaId == pWDICtx->ucSelfStaId)) @@ -905,16 +914,22 @@ WDI_FillTxBd return VOS_STATUS_E_FAILURE; } */ #ifdef WLAN_SOFTAP_VSTA_FEATURE - // if this is a Virtual Station then change the DPU Routing Flag so + // if this is a Virtual Station or statype is TDLS and trig enabled mask + // set then change the DPU Routing Flag so // that the frame will be routed to Firmware for queuing & transmit - if (IS_VSTA_IDX(ucStaId)) + if (IS_VSTA_IDX(ucStaId) || + ( +#ifdef FEATURE_WLAN_TDLS + (ucSTAType == WDI_STA_ENTRY_TDLS_PEER ) && +#endif + (ucTxFlag & WDI_TRIGGER_ENABLED_AC_MASK))) { pBd->dpuRF = BMUWQ_FW_DPU_TX; } #endif - } - + } + /*------------------------------------------------------------------------ Over SDIO bus, SIF won't swap data bytes to/from data FIFO. In order for MAC modules to recognize BD in Riva's default endian @@ -928,7 +943,7 @@ WDI_FillTxBd byte order */ pBd->txBdSignature = uTxBdSignature ; #endif - + return wdiStatus; }/*WDI_FillTxBd*/ @@ -1013,10 +1028,10 @@ WDI_SwapTxBd(wpt_uint8 *pBd) /** @brief WDI_RxAmsduBdFix - fix for HW issue for AMSDU - + @param pWDICtx: Context to the WDI pBDHeader - pointer to the BD header - + @return None */ void diff --git a/CORE/WDI/DP/inc/wlan_qct_wdi_ds.h b/CORE/WDI/DP/inc/wlan_qct_wdi_ds.h index 0319357eb2c4..ce2973760671 100644 --- a/CORE/WDI/DP/inc/wlan_qct_wdi_ds.h +++ b/CORE/WDI/DP/inc/wlan_qct_wdi_ds.h @@ -66,7 +66,7 @@ typedef struct wpt_uint8 addr2MACAddress[6]; wpt_uint8 frmType; wpt_uint8 fStaType; - wpt_uint8 fProtectedFrame; + wpt_uint8 fProtMgmtFrame; wpt_uint16 fPktlen; wpt_status txCompleteStatus; wpt_uint8 staIdx; @@ -95,7 +95,7 @@ typedef struct wpt_uint8 rxChannel; wpt_uint8 type:2; wpt_uint8 subtype:4; - wpt_uint8 reserved0:2; + wpt_uint8 rfBand:2; wpt_uint16 rtsf:1; //For beacon only. 1 ~V Riva TSF is bigger(later) than the one received wpt_uint16 bsf:1; //1 Riva sends the last beacon, 0 not. diff --git a/CORE/WDI/DP/inc/wlan_qct_wdi_ds_i.h b/CORE/WDI/DP/inc/wlan_qct_wdi_ds_i.h index c4d13d315541..5f80db28ee4f 100644 --- a/CORE/WDI/DP/inc/wlan_qct_wdi_ds_i.h +++ b/CORE/WDI/DP/inc/wlan_qct_wdi_ds_i.h @@ -46,6 +46,7 @@ #include "wlan_qct_pal_type.h" #include "wlan_qct_pal_status.h" #include "wlan_qct_pal_packet.h" +#include "wlan_qct_pal_trace.h" #include "wlan_qct_wdi_ds.h" #include "wlan_qct_dxe.h" diff --git a/CORE/WDI/DP/src/wlan_qct_wdi_ds.c b/CORE/WDI/DP/src/wlan_qct_wdi_ds.c index d2395c67a791..4d3652c3f3e0 100644 --- a/CORE/WDI/DP/src/wlan_qct_wdi_ds.c +++ b/CORE/WDI/DP/src/wlan_qct_wdi_ds.c @@ -129,7 +129,8 @@ WDI_Status WDI_DS_TxPacket(void *pContext, wpt_uint8 ucUP; wpt_uint8 ucTypeSubtype; wpt_uint8 alignment; - wpt_uint8 ucTxFlag; + wpt_uint32 ucTxFlag; + wpt_uint8 ucProtMgmtFrame; wpt_uint8* pSTAMACAddress; wpt_uint8* pAddr2MACAddress; WDI_DS_TxMetaInfoType *pTxMetadata; @@ -158,6 +159,7 @@ WDI_Status WDI_DS_TxPacket(void *pContext, ucTypeSubtype = pTxMetadata->typeSubtype; ucUP = pTxMetadata->fUP; ucTxFlag = pTxMetadata->txFlags; + ucProtMgmtFrame = pTxMetadata->fProtMgmtFrame; pSTAMACAddress = &(pTxMetadata->fSTAMACAddress[0]); pAddr2MACAddress = &(pTxMetadata->addr2MACAddress[0]); @@ -204,7 +206,7 @@ WDI_Status WDI_DS_TxPacket(void *pContext, WDI_DS_PrepareBDHeader(pFrame, ucSwFrameTXXlation, alignment); wdiStatus = WDI_FillTxBd(pContext, ucTypeSubtype, pSTAMACAddress, pAddr2MACAddress, - &ucUP, 1, pvBDHeader, ucTxFlag /* No ACK */, 0, &staId); + &ucUP, 1, pvBDHeader, ucTxFlag /* No ACK */, ucProtMgmtFrame, 0, &staId); if(WDI_STATUS_SUCCESS != wdiStatus) { diff --git a/CORE/WDI/TRP/CTS/src/wlan_qct_wdi_cts.c b/CORE/WDI/TRP/CTS/src/wlan_qct_wdi_cts.c index df1bf7427e86..a0affa6bcd10 100644 --- a/CORE/WDI/TRP/CTS/src/wlan_qct_wdi_cts.c +++ b/CORE/WDI/TRP/CTS/src/wlan_qct_wdi_cts.c @@ -569,7 +569,7 @@ WCTS_NotifyCallback return; case SMD_EVENT_REOPEN_READY: - WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO, + WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, "%s: received SMD_EVENT_REOPEN_READY from SMD", __func__); /* unlike other events which occur when our kernel threads are @@ -645,7 +645,7 @@ WCTS_OpenTransport * the SMD port was never closed during SSR*/ if (gwctsHandle) { WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO, - "WCTS_OpenTransport port is already open\n"); + "WCTS_OpenTransport port is already open"); pWCTSCb = gwctsHandle; if (WCTS_CB_MAGIC != pWCTSCb->wctsMagic) { diff --git a/CORE/WDI/TRP/DTS/inc/wlan_qct_wdi_dts.h b/CORE/WDI/TRP/DTS/inc/wlan_qct_wdi_dts.h index e86f1f813240..f37441588759 100644 --- a/CORE/WDI/TRP/DTS/inc/wlan_qct_wdi_dts.h +++ b/CORE/WDI/TRP/DTS/inc/wlan_qct_wdi_dts.h @@ -261,4 +261,11 @@ wpt_status WDTS_Close(void *pContext); */ wpt_uint32 WDTS_GetFreeTxDataResNumber(void *pContext); +/* API to fill Rate Info based on the mac efficiency passed to it + * macEff si used to caclulate mac throughput based on each rate index/PHY rate. + * This is eventually used by MAS to calculate RX stats periodically sent to FW + * The start and end Rate Index are the other arguments to this API - the new mac + * efficiency passed to this API (Arg1) is only applied between startRateIndex (arg2) and endRateIndex (arg3). + */ +void WDTS_FillRateInfo(wpt_uint8 macEff, wpt_int16 startRateIndex, wpt_int16 endRateIndex); #endif diff --git a/CORE/WDI/TRP/DTS/src/wlan_qct_wdi_dts.c b/CORE/WDI/TRP/DTS/src/wlan_qct_wdi_dts.c index 51a3907b1744..59f005bbaf11 100644 --- a/CORE/WDI/TRP/DTS/src/wlan_qct_wdi_dts.c +++ b/CORE/WDI/TRP/DTS/src/wlan_qct_wdi_dts.c @@ -72,8 +72,9 @@ typedef struct uint32 tputBpus; //unit in Bytes per usec: round off to integral value }WDTS_RateInfo; -#define WDTS_MAX_RATE_NUM 137 -#define WDTS_MAX_11B_RATE_NUM 8 +#define WDTS_MAX_RATE_NUM 137 +#define WDTS_MAX_11B_RATE_NUM 8 +#define MB_PER_SEC_TO_BYTES_PER_MSEC 13 WDTS_RateInfo g11bRateInfo[WDTS_MAX_11B_RATE_NUM] = { //11b rates @@ -173,79 +174,79 @@ WDTS_RateInfo gRateInfo[WDTS_MAX_RATE_NUM] = { { 1350, 1137, 14781, 15}, //index 63 //11AC - { 1350, 1137, 14781, 15}, //reserved 64 - { 1350, 1137, 14781, 15}, //reserved 65 - { 65, 65, 845, 1}, //index 66 - { 130, 130, 1690, 2}, //index 67 - { 195, 195, 2535, 3}, //index 68 - { 260, 260, 3380, 3}, //index 69 - { 390, 390, 5070, 5}, //index 70 - { 520, 520, 6760, 7}, //index 71 - { 585, 585, 7605, 8}, //index 72 - { 650, 650, 8450, 8}, //index 73 - { 780, 780, 2340, 2}, //index 74 - { 1350, 1137, 14781, 15}, //reserved 75 - { 1350, 1137, 14781, 15}, //reserved 76 - { 1350, 1137, 14781, 15}, //reserved 77 - { 1350, 1137, 14781, 15}, //index 78 - { 1350, 1137, 14781, 15}, //index 79 - { 1350, 1137, 14781, 15}, //index 80 - { 1350, 1137, 14781, 15}, //index 81 - { 1350, 1137, 14781, 15}, //index 82 - { 1350, 1137, 14781, 15}, //index 83 - { 655, 655, 8515, 9}, //index 84 - { 722, 722, 9386, 9}, //index 85 - { 866, 866, 11258, 11}, //index 86 - { 1350, 1137, 14781, 15}, //reserved 87 - { 1350, 1137, 14781, 15}, //reserved 88 - { 1350, 1137, 14781, 15}, //reserved 89 - { 135, 135, 1755, 2}, //index 90 - { 270, 270, 3510, 4}, //index 91 - { 405, 405, 5265, 5}, //index 92 - { 540, 540, 7020, 7}, //index 93 - { 810, 810, 10530, 11}, //index 94 - { 1080, 1080, 14040, 14}, //index 95 - { 1215, 1215, 15795, 16}, //index 96 - { 1350, 1350, 17550, 18}, //index 97 - { 1350, 1137, 14781, 15}, //index 98 - { 1620, 1620, 21060, 21}, //index 99 - { 1800, 1800, 23400, 23}, //index 100 - { 1350, 1137, 14781, 15}, //reserved 101 - { 1350, 1137, 14781, 15}, //index 102 - { 1350, 1137, 14781, 15}, //index 103 - { 1350, 1137, 14781, 15}, //index 104 - { 1350, 1137, 14781, 15}, //index 105 - { 1350, 1137, 14781, 15}, //index 106 - { 1200, 1200, 15600, 16}, //index 107 - { 1350, 1350, 17550, 18}, //index 108 - { 1500, 1500, 19500, 20}, //index 109 - { 1350, 1137, 14781, 15}, //index 110 - { 1800, 1800, 23400, 23}, //index 111 - { 2000, 2000, 26000, 26}, //index 112 - { 1350, 1137, 14781, 15}, //index 113 - { 292, 292, 3796, 4}, //index 114 - { 585, 585, 7605, 8}, //index 115 - { 877, 877, 11401, 11}, //index 116 - { 1170, 1170, 15210, 15}, //index 117 - { 1755, 1755, 22815, 23}, //index 118 - { 2340, 2340, 30420, 30}, //index 119 - { 2632, 2632, 34216, 34}, //index 120 - { 2925, 2925, 38025, 38}, //index 121 - { 1350, 1137, 14781, 15}, //index 122 - { 3510, 3510, 45630, 46}, //index 123 - { 3900, 3900, 50700, 51}, //index 124 - { 1350, 1137, 14781, 15}, //reserved 125 - { 1350, 1137, 14781, 15}, //index 126 - { 1350, 1137, 14781, 15}, //index 127 - { 1350, 1137, 14781, 15}, //index 128 - { 1350, 1137, 14781, 15}, //index 129 - { 1350, 1137, 14781, 15}, //index 130 - { 1350, 1137, 14781, 15}, //index 131 - { 2925, 2925, 38025, 38}, //index 132 - { 3250, 3250, 42250, 42}, //index 133 - { 1350, 1137, 14781, 15}, //index 134 - { 3900, 3900, 50700, 51}, //index 135 - { 4333, 4333, 56329, 56} //index 136 + { 1350, 675, 8775, 9}, //reserved 64 + { 1350, 675, 8775, 9}, //reserved 65 + { 65, 45, 585, 1}, //index 66 + { 130, 91, 1183, 1}, //index 67 + { 195, 136, 1768, 2}, //index 68 + { 260, 182, 2366, 2}, //index 69 + { 390, 273, 3549, 4}, //index 70 + { 520, 364, 4732, 5}, //index 71 + { 585, 409, 5317, 5}, //index 72 + { 650, 455, 5915, 6}, //index 73 + { 780, 546, 7098, 7}, //index 74 + { 1350, 675, 8775, 9}, //reserved 75 + { 1350, 675, 8775, 9}, //reserved 76 + { 1350, 675, 8775, 9}, //reserved 77 + { 1350, 675, 8775, 9}, //index 78 + { 1350, 675, 8775, 9}, //index 79 + { 1350, 675, 8775, 9}, //index 80 + { 1350, 675, 8775, 9}, //index 81 + { 1350, 675, 8775, 9}, //index 82 + { 1350, 675, 8775, 9}, //index 83 + { 655, 458, 5954, 6}, //index 84 + { 722, 505, 6565, 7}, //index 85 + { 866, 606, 7878, 8}, //index 86 + { 1350, 675, 8775, 9}, //reserved 87 + { 1350, 675, 8775, 9}, //reserved 88 + { 1350, 675, 8775, 9}, //reserved 89 + { 135, 94, 1222, 1}, //index 90 + { 270, 189, 2457, 2}, //index 91 + { 405, 283, 3679, 4}, //index 92 + { 540, 378, 4914, 5}, //index 93 + { 810, 567, 7371, 7}, //index 94 + { 1080, 756, 9828, 10}, //index 95 + { 1215, 850, 11050, 11}, //index 96 + { 1350, 675, 8775, 9}, //index 97 + { 1350, 675, 8775, 9}, //index 98 + { 1620, 810, 10530, 11}, //index 99 + { 1800, 900, 11700, 12}, //index 100 + { 1350, 675, 8775, 9}, //reserved 101 + { 1350, 675, 8775, 9}, //index 102 + { 1350, 675, 8775, 9}, //index 103 + { 1350, 675, 8775, 9}, //index 104 + { 1350, 675, 8775, 9}, //index 105 + { 1350, 675, 8775, 9}, //index 106 + { 1200, 840, 10920, 11}, //index 107 + { 1350, 675, 8775, 9}, //index 108 + { 1500, 750, 9750, 10}, //index 109 + { 1350, 675, 8775, 9}, //index 110 + { 1800, 900, 11700, 12}, //index 111 + { 2000, 1000, 13000, 13}, //index 112 + { 1350, 675, 8775, 9}, //index 113 + { 292, 204, 2652, 3}, //index 114 + { 585, 409, 5317, 5}, //index 115 + { 877, 613, 7969, 8}, //index 116 + { 1170, 819, 10647, 11}, //index 117 + { 1755, 877, 11401, 11}, //index 118 + { 2340, 1170, 15210, 15}, //index 119 + { 2632, 1316, 17108, 17}, //index 120 + { 2925, 1462, 19006, 19}, //index 121 + { 1350, 675, 8775, 9}, //index 122 + { 3510, 1755, 22815, 23}, //index 123 + { 3900, 1950, 25350, 25}, //index 124 + { 1350, 675, 8775, 9}, //reserved 125 + { 1350, 675, 8775, 9}, //index 126 + { 1350, 675, 8775, 9}, //index 127 + { 1350, 675, 8775, 9}, //index 128 + { 1350, 675, 8775, 9}, //index 129 + { 1350, 675, 8775, 9}, //index 130 + { 1350, 675, 8775, 9}, //index 131 + { 2925, 1462, 19006, 19}, //index 132 + { 3250, 1625, 21125, 21}, //index 133 + { 1350, 675, 8775, 9}, //index 134 + { 3900, 1950, 25350, 25}, //index 135 + { 4333, 2166, 28158, 28} //index 136 }; /* TX stats */ @@ -274,6 +275,40 @@ static WDI_DTS_TrafficStatsType gDsTrafficStats; #define DTS_RATE_TPUT(x) gRateInfo[x].tputBpus #define DTS_11BRATE_TPUT_MULTIPLIER(x) g11bRateInfo[x].tputBpus +/* RX thread frame size threshold to delay frame drain */ +#define DTS_RX_DELAY_FRAMESIZE_THRESHOLD 500 + +/* API to fill Rate Info based on the mac efficiency passed to it + * macEff si used to caclulate mac throughput based on each rate index/PHY rate. + * This is eventually used by MAS to calculate RX stats periodically sent to FW + * The start and end Rate Index are the other arguments to this API - the new mac + * efficiency passed to this API (Arg1) is only applied between startRateIndex (arg2) and endRateIndex (arg3). + */ +void WDTS_FillRateInfo(wpt_uint8 macEff, wpt_int16 startRateIndex, wpt_int16 endRateIndex) +{ + int i; + + DTI_TRACE( DTI_TRACE_LEVEL_ERROR, "Change only 11ac rates"); + + for (i=startRateIndex; i<=endRateIndex; i++) + { + // tputRate --> unit in Mega bits per sec X 10 + gRateInfo[i].tputRate = ((gRateInfo[i].phyRate * macEff)/100); + // tputBmps --> unit in Bytes per msec = (tputRateX1024x1024)/(8x10X1000) ~= (tputRate*13) + gRateInfo[i].tputBpms = gRateInfo[i].tputRate * MB_PER_SEC_TO_BYTES_PER_MSEC; + // tputBpus --> unit in Bytes per usec: (+ 500) to round off to integral value + gRateInfo[i].tputBpus = ((gRateInfo[i].tputBpms + 500) / 1000); + if (gRateInfo[i].tputBpus == 0) + gRateInfo[i].tputBpus = 1; + + DTI_TRACE( DTI_TRACE_LEVEL_ERROR, "%4u, %4u, %5u, %2u", + gRateInfo[i].phyRate, + gRateInfo[i].tputRate, + gRateInfo[i].tputBpms, + gRateInfo[i].tputBpus ); + } +} + /* Tx/Rx stats function * This function should be invoked to fetch the current stats * Parameters: @@ -519,6 +554,18 @@ wpt_status WDTS_RxPacket (void *pContext, wpt_packet *pFrame, WDTS_ChannelType c ucMPDUHLen = (wpt_uint8)WDI_RX_BD_GET_MPDU_H_LEN(pBDHeader); ucTid = (wpt_uint8)WDI_RX_BD_GET_TID(pBDHeader); + /* If RX thread drain small size of frame from HW too fast + * Sometimes HW cannot handle interrupt fast enough + * And system crash might happen + * To avoid system crash, input 1usec delay each frame draining + * within host side, if frame size is smaller that threshold. + * This is SW work around, to fix HW problem + * Throughput and SnS test done successfully */ + if (usMPDULen < DTS_RX_DELAY_FRAMESIZE_THRESHOLD) + { + wpalBusyWait(1); + } + /*------------------------------------------------------------------------ Gather AMSDU information ------------------------------------------------------------------------*/ @@ -561,6 +608,12 @@ wpt_status WDTS_RxPacket (void *pContext, wpt_packet *pFrame, WDTS_ChannelType c if(VPKT_SIZE_BUFFER < (usMPDULen+ucMPDUHOffset)){ DTI_TRACE( DTI_TRACE_LEVEL_FATAL, "Invalid Frame size, might memory corrupted"); + + /* Size of the packet tranferred by the DMA engine is + * greater than the the memory allocated for the skb + */ + WPAL_BUG(0); + wpalPacketFree(pFrame); return eWLAN_PAL_STATUS_SUCCESS; } @@ -584,6 +637,7 @@ wpt_status WDTS_RxPacket (void *pContext, wpt_packet *pFrame, WDTS_ChannelType c pRxMetadata->staId = WDI_RX_BD_GET_STA_ID(pBDHeader); pRxMetadata->addr3Idx = WDI_RX_BD_GET_ADDR3_IDX(pBDHeader); pRxMetadata->rxChannel = WDI_RX_BD_GET_RX_CHANNEL(pBDHeader); + pRxMetadata->rfBand = WDI_RX_BD_GET_RFBAND(pBDHeader); pRxMetadata->rtsf = WDI_RX_BD_GET_RTSF(pBDHeader); pRxMetadata->bsf = WDI_RX_BD_GET_BSF(pBDHeader); pRxMetadata->scan = WDI_RX_BD_GET_SCAN(pBDHeader); @@ -633,7 +687,7 @@ wpt_status WDTS_RxPacket (void *pContext, wpt_packet *pFrame, WDTS_ChannelType c pRxMetadata->ampdu_reorderOpcode = (wpt_uint8)WDI_RX_BD_GET_BA_OPCODE(pBDHeader); pRxMetadata->ampdu_reorderSlotIdx = (wpt_uint8)WDI_RX_BD_GET_BA_SI(pBDHeader); pRxMetadata->ampdu_reorderFwdIdx = (wpt_uint8)WDI_RX_BD_GET_BA_FI(pBDHeader); - pRxMetadata->currentPktSeqNo = (wpt_uint8)WDI_RX_BD_GET_BA_CSN(pBDHeader); + pRxMetadata->currentPktSeqNo = (wpt_uint16)WDI_RX_BD_GET_BA_CSN(pBDHeader); /*------------------------------------------------------------------------ diff --git a/CORE/WDI/WPAL/inc/wlan_qct_os_trace.h b/CORE/WDI/WPAL/inc/wlan_qct_os_trace.h index cf17b3e58a3b..3f4b52571887 100644 --- a/CORE/WDI/WPAL/inc/wlan_qct_os_trace.h +++ b/CORE/WDI/WPAL/inc/wlan_qct_os_trace.h @@ -28,6 +28,7 @@ #if !defined( __WLAN_QCT_OS_TRACE_H ) #define __WLAN_QCT_OS_TRACE_H +#include #ifdef WLAN_DEBUG @@ -82,9 +83,6 @@ void wpalTrace( wpt_moduleid module, wpt_tracelevel level, char *strFormat, ... void wpalDump( wpt_moduleid module, wpt_tracelevel level, wpt_uint8 *memory, wpt_uint32 length); -#define WPAL_TRACE wpalTrace -#define WPAL_DUMP wpalDump - #define WPAL_ASSERT( _condition ) do { \ if ( ! ( _condition ) ) \ { \ @@ -94,10 +92,18 @@ void wpalDump( wpt_moduleid module, wpt_tracelevel level, } while (0) #else //WLAN_DEBUG -#define WPAL_TRACE -#define WPAL_DUMP -#define WPAL_ASSERT +static inline void wpalTrace( wpt_moduleid module, wpt_tracelevel level, + char *strFormat, ... ){}; +static inline void wpalDump( wpt_moduleid module, wpt_tracelevel level, + wpt_uint8 *memory, wpt_uint32 length) {}; +static inline void wpalTraceSetLevel( wpt_moduleid module, + wpt_tracelevel level, wpt_boolean on ) {}; +static inline void wpalTraceDisplay(void) {}; +#define WPAL_ASSERT(x) do {} while (0); #endif //WLAN_DEBUG +#define WPAL_TRACE wpalTrace +#define WPAL_DUMP wpalDump + #endif // __WLAN_QCT_OS_TRACE_H diff --git a/CORE/WDI/WPAL/inc/wlan_qct_os_type.h b/CORE/WDI/WPAL/inc/wlan_qct_os_type.h index c6dfaab88c34..edaa15379b3b 100644 --- a/CORE/WDI/WPAL/inc/wlan_qct_os_type.h +++ b/CORE/WDI/WPAL/inc/wlan_qct_os_type.h @@ -42,26 +42,27 @@ ========================================================================*/ +#include -typedef unsigned long wpt_uint32; +typedef u32 wpt_uint32; -typedef signed long wpt_int32; +typedef s32 wpt_int32; -typedef unsigned short wpt_uint16; +typedef u16 wpt_uint16; -typedef signed short wpt_int16; +typedef s16 wpt_int16; -typedef unsigned char wpt_uint8; +typedef u8 wpt_uint8; typedef wpt_uint8 wpt_byte; -typedef signed char wpt_int8; +typedef s8 wpt_int8; -typedef wpt_uint8 wpt_boolean; +typedef wpt_uint8 wpt_boolean; -typedef unsigned long long wpt_uint64; +typedef u64 wpt_uint64; -typedef long long wpt_int64; +typedef s64 wpt_int64; #define WPT_INLINE __inline__ #define WPT_STATIC static diff --git a/CORE/WDI/WPAL/inc/wlan_qct_pal_api.h b/CORE/WDI/WPAL/inc/wlan_qct_pal_api.h index 82539fae0c1f..2fd3fc46aec5 100644 --- a/CORE/WDI/WPAL/inc/wlan_qct_pal_api.h +++ b/CORE/WDI/WPAL/inc/wlan_qct_pal_api.h @@ -232,7 +232,7 @@ void wpalDmaMemoryFree(void *pv); #ifdef QCA_WIFI_2_0 static inline wpt_status wpalDbgReadRegister(wpt_uint32 regAddr, wpt_uint32 *pregValue) { - return eWLAN_PAL_STATUS_SUCCESS; + return eWLAN_PAL_STATUS_SUCCESS; } #else wpt_status wpalDbgReadRegister(wpt_uint32 regAddr, wpt_uint32 *pregValue); @@ -248,9 +248,9 @@ wpt_status wpalDbgReadRegister(wpt_uint32 regAddr, wpt_uint32 *pregValue); ---------------------------------------------------------------------------*/ #ifdef QCA_WIFI_2_0 static inline wpt_status wpalDbgWriteRegister(wpt_uint32 regAddr, - wpt_uint32 regValue) + wpt_uint32 regValue) { - return eWLAN_PAL_STATUS_SUCCESS; + return eWLAN_PAL_STATUS_SUCCESS; } #else wpt_status wpalDbgWriteRegister(wpt_uint32 regAddr, wpt_uint32 regValue); @@ -267,9 +267,9 @@ wpt_status wpalDbgWriteRegister(wpt_uint32 regAddr, wpt_uint32 regValue); ---------------------------------------------------------------------------*/ #ifdef QCA_WIFI_2_0 static inline wpt_status wpalDbgReadMemory(wpt_uint32 memAddr, wpt_uint8 *buf, - wpt_uint32 len) + wpt_uint32 len) { - return eWLAN_PAL_STATUS_SUCCESS; + return eWLAN_PAL_STATUS_SUCCESS; } #else wpt_status wpalDbgReadMemory(wpt_uint32 memAddr, wpt_uint8 *buf, wpt_uint32 len); @@ -286,9 +286,9 @@ wpt_status wpalDbgReadMemory(wpt_uint32 memAddr, wpt_uint8 *buf, wpt_uint32 len) ---------------------------------------------------------------------------*/ #ifdef QCA_WIFI_2_0 static inline wpt_status wpalDbgWriteMemory(wpt_uint32 memAddr, wpt_uint8 *buf, - wpt_uint32 len) + wpt_uint32 len) { - return eWLAN_PAL_STATUS_SUCCESS; + return eWLAN_PAL_STATUS_SUCCESS; } #else wpt_status wpalDbgWriteMemory(wpt_uint32 memAddr, wpt_uint8 *buf, wpt_uint32 len); @@ -352,4 +352,19 @@ void wpalWlanReload(void); ---------------------------------------------------------------------------*/ void wpalWcnssResetIntr(void); +/*--------------------------------------------------------------------------- + wpalFwDumpReq - Trigger the dump commands to Firmware + + Param: + cmd - Command No. to execute + arg1 - argument 1 to cmd + arg2 - argument 2 to cmd + arg3 - argument 3 to cmd + arg4 - argument 4 to cmd + Return: + NONE +---------------------------------------------------------------------------*/ +void wpalFwDumpReq(wpt_uint32 cmd, wpt_uint32 arg1, wpt_uint32 arg2, + wpt_uint32 arg3, wpt_uint32 arg4); + #endif // __WLAN_QCT_PAL_API_H diff --git a/CORE/WDI/WPAL/inc/wlan_qct_pal_device.h b/CORE/WDI/WPAL/inc/wlan_qct_pal_device.h index 09a5bb8d3c4a..9a12bb0060c3 100644 --- a/CORE/WDI/WPAL/inc/wlan_qct_pal_device.h +++ b/CORE/WDI/WPAL/inc/wlan_qct_pal_device.h @@ -217,7 +217,7 @@ static inline wpt_status wpalReadRegister wpt_uint32 *data ) { - return eWLAN_PAL_STATUS_SUCCESS; + return eWLAN_PAL_STATUS_SUCCESS; } #else wpt_status wpalReadRegister @@ -243,7 +243,7 @@ static inline wpt_status wpalWriteRegister wpt_uint32 data ) { - return eWLAN_PAL_STATUS_SUCCESS; + return eWLAN_PAL_STATUS_SUCCESS; } #else wpt_status wpalWriteRegister @@ -272,7 +272,7 @@ static inline wpt_status wpalReadDeviceMemory wpt_uint32 len ) { - return eWLAN_PAL_STATUS_SUCCESS; + return eWLAN_PAL_STATUS_SUCCESS; } #else wpt_status wpalReadDeviceMemory @@ -302,7 +302,7 @@ static inline wpt_status wpalWriteDeviceMemory wpt_uint32 len ) { - return eWLAN_PAL_STATUS_SUCCESS; + return eWLAN_PAL_STATUS_SUCCESS; } #else wpt_status wpalWriteDeviceMemory diff --git a/CORE/WDI/WPAL/inc/wlan_qct_pal_packet.h b/CORE/WDI/WPAL/inc/wlan_qct_pal_packet.h index f6eb1491cf81..31445037c1b6 100644 --- a/CORE/WDI/WPAL/inc/wlan_qct_pal_packet.h +++ b/CORE/WDI/WPAL/inc/wlan_qct_pal_packet.h @@ -44,6 +44,10 @@ #include "wlan_qct_pal_type.h" #include "wlan_qct_pal_status.h" +#include "vos_types.h" +#ifdef FEATURE_WLAN_DIAG_SUPPORT +#include "vos_diag_core_log.h" +#endif /* FEATURE_WLAN_DIAG_SUPPORT */ // The size of the data buffer in vos/pal packets // Explanation: @@ -75,6 +79,11 @@ // we must add the size of the 802.11 header to that #define VPKT_SIZE_BUFFER ((30 * 128) + 32) +/* Transport channel count to report DIAG */ +#define WPT_NUM_TRPT_CHANNEL 4 +/* Transport channel name string size */ +#define WPT_TRPT_CHANNEL_NAME 4 + typedef enum { ///Packet is used to transmit 802.11 Management frames. @@ -117,6 +126,28 @@ typedef struct swpt_iterator void *pContext; } wpt_iterator; +/* Each specific channel dedicated information should be logged */ +typedef struct +{ + char channelName[WPT_TRPT_CHANNEL_NAME]; + v_U32_t numDesc; + v_U32_t numFreeDesc; + v_U32_t numRsvdDesc; + v_U32_t headDescOrder; + v_U32_t tailDescOrder; + v_U32_t ctrlRegVal; + v_U32_t statRegVal; + v_U32_t numValDesc; + v_U32_t numInvalDesc; +} wpt_log_data_stall_channel_type; + +/* Transport log context */ +typedef struct +{ + v_U32_t PowerState; + v_U32_t numFreeBd; + wpt_log_data_stall_channel_type dxeChannelInfo[WPT_NUM_TRPT_CHANNEL]; +} wpt_log_data_stall_type; //pPkt is a pointer to wpt_packet #define WPAL_PACKET_SET_BD_POINTER(pPkt, pBd) ( (pPkt)->pBD = (pBd) ) @@ -315,4 +346,54 @@ wpt_int32 wpalPacketGetFragCount(wpt_packet *pPkt); ---------------------------------------------------------------------------*/ wpt_status wpalIsPacketLocked( wpt_packet *pPacket); +/*--------------------------------------------------------------------------- + wpalGetNumRxRawPacket Query available RX RAW total buffer count + param: + numRxResource pointer of queried value + + return: + eWLAN_PAL_STATUS_SUCCESS +---------------------------------------------------------------------------*/ +wpt_status wpalGetNumRxRawPacket(wpt_uint32 *numRxResource); + +/*--------------------------------------------------------------------------- + wpalPacketStallUpdateInfo – Update each channel information when stall + detected, also power state and free resource count + + Param: + powerState ? WLAN system power state when stall detected + numFreeBd ? Number of free resource count in HW + channelInfo ? Each channel specific information when stall happen + channelNum ? Channel number update information + + Return: + NONE + +---------------------------------------------------------------------------*/ +void wpalPacketStallUpdateInfo +( + v_U32_t *powerState, + v_U32_t *numFreeBd, + wpt_log_data_stall_channel_type *channelInfo, + v_U8_t channelNum +); + +#ifdef FEATURE_WLAN_DIAG_SUPPORT +/*--------------------------------------------------------------------------- + wpalPacketStallDumpLog – Trigger to send log packet to DIAG + Updated transport system information will be sent to DIAG + + Param: + NONE + + Return: + NONE + +---------------------------------------------------------------------------*/ +void wpalPacketStallDumpLog +( + void +); +#endif /* FEATURE_WLAN_DIAG_SUPPORT */ + #endif // __WLAN_QCT_PAL_PACKET_H diff --git a/CORE/WDI/WPAL/inc/wlan_qct_pal_timer.h b/CORE/WDI/WPAL/inc/wlan_qct_pal_timer.h index 6eebf1a1de3d..495cf9f9c03c 100644 --- a/CORE/WDI/WPAL/inc/wlan_qct_pal_timer.h +++ b/CORE/WDI/WPAL/inc/wlan_qct_pal_timer.h @@ -125,6 +125,13 @@ wpt_uint32 wpalGetSystemTime(void); ---------------------------------------------------------------------------*/ wpt_status wpalSleep(wpt_uint32 timeout); - +/*--------------------------------------------------------------------------- + wpalBusyWait - Thread busy wait with specified usec + Param: + usecDelay - amount of time to wait. In unit of micro-seconds. + Return: + NONE +---------------------------------------------------------------------------*/ +void wpalBusyWait(wpt_uint32 usecDelay); #endif // __WLAN_QCT_PAL_TIMER_H diff --git a/CORE/WDI/WPAL/inc/wlan_qct_pal_trace.h b/CORE/WDI/WPAL/inc/wlan_qct_pal_trace.h index 24cf13776e9d..e3a6188d750a 100644 --- a/CORE/WDI/WPAL/inc/wlan_qct_pal_trace.h +++ b/CORE/WDI/WPAL/inc/wlan_qct_pal_trace.h @@ -134,5 +134,5 @@ wpt_boolean wpalTraceCheckLevel( wpt_moduleid module, wpt_tracelevel level ); --------------------------------------------------------------------------*/ void wpalTraceDisplay(void); - +#define WPAL_BUG VOS_BUG #endif // __WLAN_QCT_PAL_TRACE_H diff --git a/CORE/WDI/WPAL/src/wlan_qct_pal_api.c b/CORE/WDI/WPAL/src/wlan_qct_pal_api.c index efccd89c344a..93a270e01e06 100644 --- a/CORE/WDI/WPAL/src/wlan_qct_pal_api.c +++ b/CORE/WDI/WPAL/src/wlan_qct_pal_api.c @@ -220,7 +220,7 @@ void *wpalDmaMemoryAllocate(wpt_uint32 size, void **ppPhysicalAddr) if ( NULL == pv ) { WPAL_TRACE(eWLAN_MODULE_PAL, eWLAN_PAL_TRACE_LEVEL_ERROR, - "%s Unable to allocate DMA buffer\n", __func__); + "%s Unable to allocate DMA buffer", __func__); return NULL; } @@ -413,3 +413,23 @@ void wpalWcnssResetIntr(void) #endif return; } + + +/*--------------------------------------------------------------------------- + wpalFwDumpReq - Trigger the dump commands to Firmware + + Param: + cmd - Command No. to execute + arg1 - argument 1 to cmd + arg2 - argument 2 to cmd + arg3 - argument 3 to cmd + arg4 - argument 4 to cmd + Return: + NONE +---------------------------------------------------------------------------*/ +void wpalFwDumpReq(wpt_uint32 cmd, wpt_uint32 arg1, wpt_uint32 arg2, + wpt_uint32 arg3, wpt_uint32 arg4) +{ + vos_fwDumpReq(cmd, arg1, arg2, arg3, arg4); + return; +} diff --git a/CORE/WDI/WPAL/src/wlan_qct_pal_device.c b/CORE/WDI/WPAL/src/wlan_qct_pal_device.c index 4666dbf7397a..0aa9b7e44dae 100644 --- a/CORE/WDI/WPAL/src/wlan_qct_pal_device.c +++ b/CORE/WDI/WPAL/src/wlan_qct_pal_device.c @@ -448,7 +448,11 @@ wpt_status wpalWriteRegister wpt_uint32 data ) { - if (NULL == gpEnv) { + /* if SSR is in progress, and WCNSS is not out of reset (re-init + * not invoked), then do not access WCNSS registers */ + if (NULL == gpEnv || + (vos_is_logp_in_progress(VOS_MODULE_ID_WDI, NULL) && + !vos_is_reinit_in_progress(VOS_MODULE_ID_WDI, NULL))) { WPAL_TRACE(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR, "%s: invoked before subsystem initialized", __func__); @@ -460,7 +464,8 @@ wpt_status wpalWriteRegister WPAL_TRACE(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR, "%s: Register address 0x%0x out of range 0x%0x - 0x%0x", __func__, address, - gpEnv->wcnss_memory->start, gpEnv->wcnss_memory->end); + (u32) gpEnv->wcnss_memory->start, + (u32) gpEnv->wcnss_memory->end); return eWLAN_PAL_STATUS_E_INVAL; } @@ -492,7 +497,11 @@ wpt_status wpalReadRegister wpt_uint32 *data ) { - if (NULL == gpEnv) { + /* if SSR is in progress, and WCNSS is not out of reset (re-init + * not invoked), then do not access WCNSS registers */ + if (NULL == gpEnv || + (vos_is_logp_in_progress(VOS_MODULE_ID_WDI, NULL) && + !vos_is_reinit_in_progress(VOS_MODULE_ID_WDI, NULL))) { WPAL_TRACE(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR, "%s: invoked before subsystem initialized", __func__); @@ -504,7 +513,8 @@ wpt_status wpalReadRegister WPAL_TRACE(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR, "%s: Register address 0x%0x out of range 0x%0x - 0x%0x", __func__, address, - gpEnv->wcnss_memory->start, gpEnv->wcnss_memory->end); + (u32) gpEnv->wcnss_memory->start, + (u32) gpEnv->wcnss_memory->end); return eWLAN_PAL_STATUS_E_INVAL; } @@ -539,7 +549,11 @@ wpt_status wpalWriteDeviceMemory wpt_uint32 len ) { - if (NULL == gpEnv) { + /* if SSR is in progress, and WCNSS is not out of reset (re-init + * not invoked), then do not access WCNSS registers */ + if (NULL == gpEnv || + (vos_is_logp_in_progress(VOS_MODULE_ID_WDI, NULL) && + !vos_is_reinit_in_progress(VOS_MODULE_ID_WDI, NULL))) { WPAL_TRACE(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR, "%s: invoked before subsystem initialized", __func__); @@ -551,7 +565,8 @@ wpt_status wpalWriteDeviceMemory WPAL_TRACE(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR, "%s: Memory address 0x%0x len %d out of range 0x%0x - 0x%0x", __func__, address, len, - gpEnv->wcnss_memory->start, gpEnv->wcnss_memory->end); + (u32) gpEnv->wcnss_memory->start, + (u32) gpEnv->wcnss_memory->end); return eWLAN_PAL_STATUS_E_INVAL; } @@ -579,7 +594,11 @@ wpt_status wpalReadDeviceMemory wpt_uint32 len ) { - if (NULL == gpEnv) { + /* if SSR is in progress, and WCNSS is not out of reset (re-init + * not invoked), then do not access WCNSS registers */ + if (NULL == gpEnv || + (vos_is_logp_in_progress(VOS_MODULE_ID_WDI, NULL) && + !vos_is_reinit_in_progress(VOS_MODULE_ID_WDI, NULL))) { WPAL_TRACE(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR, "%s: invoked before subsystem initialized", __func__); @@ -591,7 +610,8 @@ wpt_status wpalReadDeviceMemory WPAL_TRACE(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR, "%s: Memory address 0x%0x len %d out of range 0x%0x - 0x%0x", __func__, address, len, - gpEnv->wcnss_memory->start, gpEnv->wcnss_memory->end); + (u32) gpEnv->wcnss_memory->start, + (u32) gpEnv->wcnss_memory->end); return eWLAN_PAL_STATUS_E_INVAL; } diff --git a/CORE/WDI/WPAL/src/wlan_qct_pal_msg.c b/CORE/WDI/WPAL/src/wlan_qct_pal_msg.c index 2eb5c6c658bb..f99913960896 100644 --- a/CORE/WDI/WPAL/src/wlan_qct_pal_msg.c +++ b/CORE/WDI/WPAL/src/wlan_qct_pal_msg.c @@ -75,7 +75,7 @@ wpt_status wpalPostCtrlMsg(void *pPalContext, wpt_msg *pMsg) } else { - WPAL_TRACE(eWLAN_MODULE_PAL, eWLAN_PAL_TRACE_LEVEL_ERROR, "%s fail to post msg %d\n", + WPAL_TRACE(eWLAN_MODULE_PAL, eWLAN_PAL_TRACE_LEVEL_ERROR, "%s fail to post msg %d", __func__, pMsg->type); } @@ -113,7 +113,7 @@ wpt_status wpalPostTxMsg(void *pPalContext, wpt_msg *pMsg) } else { - WPAL_TRACE(eWLAN_MODULE_PAL, eWLAN_PAL_TRACE_LEVEL_ERROR, "%s fail to post msg %d\n", + WPAL_TRACE(eWLAN_MODULE_PAL, eWLAN_PAL_TRACE_LEVEL_ERROR, "%s fail to post msg %d", __func__, pMsg->type); } @@ -150,7 +150,7 @@ wpt_status wpalPostRxMsg(void *pPalContext, wpt_msg *pMsg) } else { - WPAL_TRACE(eWLAN_MODULE_PAL, eWLAN_PAL_TRACE_LEVEL_ERROR, "%s fail to post msg %d\n", + WPAL_TRACE(eWLAN_MODULE_PAL, eWLAN_PAL_TRACE_LEVEL_ERROR, "%s fail to post msg %d", __func__, pMsg->type); } diff --git a/CORE/WDI/WPAL/src/wlan_qct_pal_packet.c b/CORE/WDI/WPAL/src/wlan_qct_pal_packet.c index ea9534f1370e..81817315a197 100644 --- a/CORE/WDI/WPAL/src/wlan_qct_pal_packet.c +++ b/CORE/WDI/WPAL/src/wlan_qct_pal_packet.c @@ -25,8 +25,6 @@ * to the Linux Foundation. */ - - /**========================================================================= \file wlan_qct_pal_packet.c @@ -70,6 +68,12 @@ typedef struct /* Storage for DXE CB function pointer */ static wpalPacketLowPacketCB wpalPacketAvailableCB; +/* Temp storage for transport channel DIAG/LOG information + * Each channel will update information with different context + * Before send stored date to DIAG, + * temporary it should be stored */ +static wpt_log_data_stall_type wpalTrasportStallInfo; + /* wpalPacketInit is no-op for VOSS-support wpt_packet */ @@ -123,6 +127,9 @@ VOS_STATUS wpalPacketRXLowResourceCB(vos_pkt_t *pPacket, v_VOID_t *userData) } wpalPacketAvailableCB( (wpt_packet *)pPacket, userData ); + + wpalPacketAvailableCB = NULL; + return VOS_STATUS_SUCCESS; } @@ -144,8 +151,6 @@ wpt_packet * wpalPacketAlloc(wpt_packet_type pktType, wpt_uint32 nPktSize, v_U16_t allocLen; /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ - /* Initialize DXE CB function pointer storage */ - wpalPacketAvailableCB = NULL; switch (pktType) { case eWLAN_PAL_PKT_TYPE_TX_802_11_MGMT: @@ -185,7 +190,7 @@ wpt_packet * wpalPacketAlloc(wpt_packet_type pktType, wpt_uint32 nPktSize, default: WPAL_TRACE(eWLAN_MODULE_PAL, eWLAN_PAL_TRACE_LEVEL_ERROR, - " try to allocate unsupported packet type (%d)\n", pktType); + " try to allocate unsupported packet type (%d)", pktType); break; } @@ -255,7 +260,7 @@ wpt_uint32 wpalPacketGetLength(wpt_packet *pPkt) } else { - WPAL_TRACE(eWLAN_MODULE_PAL, eWLAN_PAL_TRACE_LEVEL_ERROR, "%s failed\n", + WPAL_TRACE(eWLAN_MODULE_PAL, eWLAN_PAL_TRACE_LEVEL_ERROR, "%s failed", __func__); } @@ -291,7 +296,7 @@ wpt_status wpalPacketRawTrimHead(wpt_packet *pPkt, wpt_uint32 size) if( !VOS_IS_STATUS_SUCCESS(vos_pkt_trim_head(WPAL_TO_VOS_PKT(pPkt), (v_SIZE_t)size)) ) { - WPAL_TRACE(eWLAN_MODULE_PAL, eWLAN_PAL_TRACE_LEVEL_ERROR, "%s Invalid trim(%d)\n", + WPAL_TRACE(eWLAN_MODULE_PAL, eWLAN_PAL_TRACE_LEVEL_ERROR, "%s Invalid trim(%d)", __func__, size); status = eWLAN_PAL_STATUS_E_INVAL; } @@ -323,7 +328,7 @@ wpt_status wpalPacketRawTrimTail(wpt_packet *pPkt, wpt_uint32 size) (eWLAN_PAL_PKT_TYPE_RX_RAW == WPAL_PACKET_GET_TYPE(pPkt)) ); if( !VOS_IS_STATUS_SUCCESS(vos_pkt_trim_tail(WPAL_TO_VOS_PKT(pPkt), (v_SIZE_t)size)) ) { - WPAL_TRACE(eWLAN_MODULE_PAL, eWLAN_PAL_TRACE_LEVEL_ERROR, "%s Invalid trim(%d)\n", + WPAL_TRACE(eWLAN_MODULE_PAL, eWLAN_PAL_TRACE_LEVEL_ERROR, "%s Invalid trim(%d)", __func__, size); status = eWLAN_PAL_STATUS_E_INVAL; } @@ -390,7 +395,7 @@ wpt_status wpalPacketSetRxLength(wpt_packet *pPkt, wpt_uint32 len) if( (eWLAN_PAL_PKT_TYPE_RX_RAW != WPAL_PACKET_GET_TYPE(pPkt))) { WPAL_TRACE(eWLAN_MODULE_PAL, eWLAN_PAL_TRACE_LEVEL_ERROR, - "%s Invalid packet type(%d)\n", __func__, + "%s Invalid packet type(%d)", __func__, WPAL_PACKET_GET_TYPE(pPkt)); return eWLAN_PAL_STATUS_E_INVAL; } @@ -483,7 +488,7 @@ wpt_status wpalIteratorInit(wpt_iterator *pIter, wpt_packet *pPacket) if (unlikely((NULL == pPacket)||(NULL==pIter))) { WPAL_TRACE(eWLAN_MODULE_PAL, eWLAN_PAL_TRACE_LEVEL_ERROR, - "%s : NULL input pointers %x %x", __func__, pPacket, pIter); + "%s : NULL input pointers %p %p", __func__, pPacket, pIter); return eWLAN_PAL_STATUS_E_INVAL; } @@ -551,7 +556,7 @@ wpt_status wpalIteratorNext(wpt_iterator *pIter, wpt_packet *pPacket, void **ppA ( NULL == ppAddr ) || ( NULL == pLen ))) { WPAL_TRACE(eWLAN_MODULE_PAL, eWLAN_PAL_TRACE_LEVEL_ERROR, - "%s Invalid input parameters \n", __func__ ); + "%s Invalid input parameters", __func__ ); return eWLAN_PAL_STATUS_E_INVAL; } @@ -783,7 +788,7 @@ wpt_status wpalIsPacketLocked( wpt_packet *pPacket) /* Validate the parameter pointers */ if (NULL == pPacket) { - WPAL_TRACE(eWLAN_MODULE_PAL, eWLAN_PAL_TRACE_LEVEL_ERROR, + WPAL_TRACE(eWLAN_MODULE_PAL, eWLAN_PAL_TRACE_LEVEL_WARN, "%s : NULL input pointer", __func__); return eWLAN_PAL_STATUS_E_INVAL; } @@ -794,3 +799,97 @@ wpt_status wpalIsPacketLocked( wpt_packet *pPacket) eWLAN_PAL_STATUS_SUCCESS; }/*wpalIsPacketLocked*/ +/*--------------------------------------------------------------------------- + wpalGetNumRxRawPacket Query available RX RAW total buffer count + param: + numRxResource pointer of queried value + + return: + eWLAN_PAL_STATUS_SUCCESS +---------------------------------------------------------------------------*/ +wpt_status wpalGetNumRxRawPacket(wpt_uint32 *numRxResource) +{ + *numRxResource = (wpt_uint32)vos_pkt_get_num_of_rx_raw_pkts(); + + return eWLAN_PAL_STATUS_SUCCESS; +} + +/*--------------------------------------------------------------------------- + wpalPacketStallUpdateInfo – Update each channel information when stall + detected, also power state and free resource count + + Param: + powerState ? WLAN system power state when stall detected + numFreeBd ? Number of free resource count in HW + channelInfo ? Each channel specific information when stall happen + channelNum ? Channel number update information + + Return: + NONE + +---------------------------------------------------------------------------*/ +void wpalPacketStallUpdateInfo +( + v_U32_t *powerState, + v_U32_t *numFreeBd, + wpt_log_data_stall_channel_type *channelInfo, + v_U8_t channelNum +) +{ + /* Update power state when stall detected */ + if(NULL != powerState) + { + wpalTrasportStallInfo.PowerState = *powerState; + } + + /* Update HW free resource count */ + if(NULL != numFreeBd) + { + wpalTrasportStallInfo.numFreeBd = *numFreeBd; + } + + /* Update channel information */ + if(NULL != channelInfo) + { + wpalMemoryCopy(&wpalTrasportStallInfo.dxeChannelInfo[channelNum], + channelInfo, + sizeof(wpt_log_data_stall_channel_type)); + } + + return; +} + +#ifdef FEATURE_WLAN_DIAG_SUPPORT +/*--------------------------------------------------------------------------- + wpalPacketStallDumpLog – Trigger to send log packet to DIAG + Updated transport system information will be sent to DIAG + + Param: + NONE + + Return: + NONE + +---------------------------------------------------------------------------*/ +void wpalPacketStallDumpLog +( + void +) +{ + vos_log_data_stall_type *log_ptr = NULL; + + WLAN_VOS_DIAG_LOG_ALLOC(log_ptr, vos_log_data_stall_type, LOG_TRSP_DATA_STALL_C); + if(log_ptr) + { + log_ptr->PowerState = wpalTrasportStallInfo.PowerState; + log_ptr->numFreeBd = wpalTrasportStallInfo.numFreeBd; + wpalMemoryCopy(&log_ptr->dxeChannelInfo[0], + &wpalTrasportStallInfo.dxeChannelInfo[0], + WPT_NUM_TRPT_CHANNEL * sizeof(vos_log_data_stall_channel_type)); + pr_info("Stall log dump"); + WLAN_VOS_DIAG_LOG_REPORT(log_ptr); + } + + return; +} +#endif /* FEATURE_WLAN_DIAG_SUPPORT */ diff --git a/CORE/WDI/WPAL/src/wlan_qct_pal_sync.c b/CORE/WDI/WPAL/src/wlan_qct_pal_sync.c index c79697e322d8..d6f6a7c543ff 100644 --- a/CORE/WDI/WPAL/src/wlan_qct_pal_sync.c +++ b/CORE/WDI/WPAL/src/wlan_qct_pal_sync.c @@ -25,8 +25,6 @@ * to the Linux Foundation. */ - - /**========================================================================= \file wlan_qct_pal_sync.c @@ -64,7 +62,7 @@ wpt_status wpalMutexInit(wpt_mutex *pMutex) if( vos_lock_init( (vos_lock_t*)pMutex ) != VOS_STATUS_SUCCESS ) { WPAL_TRACE(eWLAN_MODULE_PAL, eWLAN_PAL_TRACE_LEVEL_ERROR, - " mutex init fail\n"); + " mutex init fail"); return eWLAN_PAL_STATUS_E_FAILURE; } @@ -85,7 +83,7 @@ wpt_status wpalMutexDelete(wpt_mutex *pMutex) if( vos_lock_destroy( (vos_lock_t*)pMutex ) != VOS_STATUS_SUCCESS ) { WPAL_TRACE(eWLAN_MODULE_PAL, eWLAN_PAL_TRACE_LEVEL_ERROR, - " mutex delete fail\n"); + " mutex delete fail"); return eWLAN_PAL_STATUS_E_FAILURE; } @@ -106,7 +104,7 @@ wpt_status wpalMutexAcquire(wpt_mutex *pMutex) if( vos_lock_acquire( (vos_lock_t*)pMutex ) != VOS_STATUS_SUCCESS ) { WPAL_TRACE(eWLAN_MODULE_PAL, eWLAN_PAL_TRACE_LEVEL_ERROR, - " mutex acquire fail\n"); + " mutex acquire fail"); return eWLAN_PAL_STATUS_E_FAILURE; } @@ -127,7 +125,7 @@ wpt_status wpalMutexRelease(wpt_mutex *pMutex) if( vos_lock_release( (vos_lock_t*)pMutex ) != VOS_STATUS_SUCCESS ) { WPAL_TRACE(eWLAN_MODULE_PAL, eWLAN_PAL_TRACE_LEVEL_ERROR, - " mutex release\n"); + " mutex release"); return eWLAN_PAL_STATUS_E_FAILURE; } @@ -148,7 +146,7 @@ wpt_status wpalEventInit(wpt_event *pEvent) if( vos_event_init( (vos_event_t*)pEvent ) != VOS_STATUS_SUCCESS ) { WPAL_TRACE(eWLAN_MODULE_PAL, eWLAN_PAL_TRACE_LEVEL_ERROR, - " create event fail\n"); + " create event fail"); return eWLAN_PAL_STATUS_E_FAILURE; } @@ -170,7 +168,7 @@ wpt_status wpalEventDelete(wpt_event *pEvent) if( vos_event_destroy( (vos_event_t*)pEvent ) != VOS_STATUS_SUCCESS ) { WPAL_TRACE(eWLAN_MODULE_PAL, eWLAN_PAL_TRACE_LEVEL_ERROR, - " delete event fail\n"); + " delete event fail"); return eWLAN_PAL_STATUS_E_FAILURE; } diff --git a/CORE/WDI/WPAL/src/wlan_qct_pal_timer.c b/CORE/WDI/WPAL/src/wlan_qct_pal_timer.c index a6fe4272f6a7..9b386ecb22c9 100644 --- a/CORE/WDI/WPAL/src/wlan_qct_pal_timer.c +++ b/CORE/WDI/WPAL/src/wlan_qct_pal_timer.c @@ -25,8 +25,6 @@ * to the Linux Foundation. */ - - /**========================================================================= \file wlan_qct_pal_timer.c @@ -46,6 +44,8 @@ #include "wlan_qct_os_status.h" #include "vos_threads.h" +#include + /*--------------------------------------------------------------------------- \brief wpalTimerCback - VOS timer callback function @@ -61,8 +61,9 @@ static void wpalTimerCback( void * userData ) } else { - WPAL_TRACE( eWLAN_MODULE_PAL, eWLAN_PAL_TRACE_LEVEL_WARN, " %s pTimer(%d) callback after deleted \n", - __func__, (wpt_uint32)pTimer ); + WPAL_TRACE( eWLAN_MODULE_PAL, eWLAN_PAL_TRACE_LEVEL_WARN, + " %s pTimer(%p) callback after deleted", + __func__, pTimer ); } }/*wpalTimerCback*/ @@ -80,8 +81,9 @@ wpt_status wpalTimerInit(wpt_timer * pTimer, wpal_timer_callback callback, void /* Sanity Checks */ if( pTimer == NULL || callback == NULL ) { - WPAL_TRACE( eWLAN_MODULE_PAL, eWLAN_PAL_TRACE_LEVEL_ERROR, " %s Wrong param pTimer(%d) callback(%d)\n", - __func__, (wpt_uint32)pTimer, (wpt_uint32)callback ); + WPAL_TRACE( eWLAN_MODULE_PAL, eWLAN_PAL_TRACE_LEVEL_ERROR, + " %s Wrong param pTimer(%p) callback(%p)", + __func__, pTimer, callback ); return eWLAN_PAL_STATUS_E_INVAL; } @@ -111,8 +113,9 @@ wpt_status wpalTimerDelete(wpt_timer *pTimer) /* Sanity Checks */ if( pTimer == NULL ) { - WPAL_TRACE( eWLAN_MODULE_PAL, eWLAN_PAL_TRACE_LEVEL_ERROR, " %s Wrong param pTimer(%d)\n", - __func__, (wpt_uint32)pTimer ); + WPAL_TRACE( eWLAN_MODULE_PAL, eWLAN_PAL_TRACE_LEVEL_ERROR, + " %s Wrong param pTimer(%p)", + __func__, pTimer ); return eWLAN_PAL_STATUS_E_INVAL; } @@ -142,8 +145,9 @@ wpt_status wpalTimerStart(wpt_timer * pTimer, wpt_uint32 timeout) /* Sanity Checks */ if( pTimer == NULL ) { - WPAL_TRACE( eWLAN_MODULE_PAL, eWLAN_PAL_TRACE_LEVEL_ERROR, " %s Wrong param pTimer(%d)\n", - __func__, (wpt_uint32)pTimer ); + WPAL_TRACE( eWLAN_MODULE_PAL, eWLAN_PAL_TRACE_LEVEL_ERROR, + " %s Wrong param pTimer(%p)", + __func__, pTimer ); return eWLAN_PAL_STATUS_E_INVAL; } return ( WPAL_VOS_TO_WPAL_STATUS( vos_timer_start( &pTimer->timer.timerObj, @@ -165,8 +169,9 @@ wpt_status wpalTimerStop(wpt_timer * pTimer) /* Sanity Checks */ if( pTimer == NULL ) { - WPAL_TRACE( eWLAN_MODULE_PAL, eWLAN_PAL_TRACE_LEVEL_ERROR, " %s Wrong param pTimer(%d)\n", - __func__, (wpt_uint32)pTimer ); + WPAL_TRACE( eWLAN_MODULE_PAL, eWLAN_PAL_TRACE_LEVEL_ERROR, + " %s Wrong param pTimer(%p)", + __func__, pTimer ); return eWLAN_PAL_STATUS_E_INVAL; } return (WPAL_VOS_TO_WPAL_STATUS( vos_timer_stop( &pTimer->timer.timerObj ))); @@ -185,8 +190,9 @@ WPAL_TIMER_STATE wpalTimerGetCurStatus(wpt_timer * pTimer) /* Sanity Checks */ if( pTimer == NULL ) { - WPAL_TRACE( eWLAN_MODULE_PAL, eWLAN_PAL_TRACE_LEVEL_ERROR, " %s Wrong param pTimer(%d)\n", - __func__, (wpt_uint32)pTimer ); + WPAL_TRACE( eWLAN_MODULE_PAL, eWLAN_PAL_TRACE_LEVEL_ERROR, + " %s Wrong param pTimer(%p)", + __func__, pTimer ); return eWLAN_PAL_STATUS_E_INVAL; } return vos_timer_getCurrentState( &pTimer->timer.timerObj ); @@ -215,3 +221,16 @@ wpt_status wpalSleep(wpt_uint32 timeout) vos_sleep( timeout ); return eWLAN_PAL_STATUS_SUCCESS; } + +/*--------------------------------------------------------------------------- + wpalBusyWait - Thread busy wait with specified usec + Param: + usecDelay - amount of time to wait. In unit of micro-seconds. + Return: + NONE +---------------------------------------------------------------------------*/ +void wpalBusyWait(wpt_uint32 usecDelay) +{ + vos_busy_wait(usecDelay); + return; +} diff --git a/firmware_bin/WCNSS_cfg.dat b/firmware_bin/WCNSS_cfg.dat old mode 100644 new mode 100755 index ae3567472f70..b815530806a2 Binary files a/firmware_bin/WCNSS_cfg.dat and b/firmware_bin/WCNSS_cfg.dat differ diff --git a/firmware_bin/WCNSS_qcom_cfg.ini b/firmware_bin/WCNSS_qcom_cfg.ini index b64cc86bcf6b..158584f9ba3a 100644 --- a/firmware_bin/WCNSS_qcom_cfg.ini +++ b/firmware_bin/WCNSS_qcom_cfg.ini @@ -34,11 +34,6 @@ gEnableSuspend=3 gDot11Mode=0 -# Handoff Enable(1) Disable(0) - -gEnableHandoff=0 - - # CSR Roaming Enable(1) Disable(0) gRoamingTime=0 @@ -65,6 +60,8 @@ InfraUapsdBeSrvIntv=0 InfraUapsdBkSrvIntv=0 +# Flag to allow STA send AddTspec even when ACM is Off +gAddTSWhenACMIsOff=1 # Make 1x1 the default antenna configuration @@ -87,7 +84,7 @@ gNthBeaconFilter=50 # 2: Filter all Broadcast. 3: Filter all Mcast abd Bcast -McastBcastFilter=0 +McastBcastFilter=3 #Flag to enable HostARPOffload feature or not @@ -169,7 +166,7 @@ g11hSupportEnabled=1 # CCX Support and fast transition CcxEnabled=0 FastTransitionEnabled=1 -ImplicitQosIsEnabled=1 +ImplicitQosIsEnabled=0 gNeighborScanTimerPeriod=200 gNeighborLookupThreshold=76 @@ -318,12 +315,31 @@ gChannelBondingMode5GHz=1 gStaKeepAlivePeriod = 30 -#AP LINK MONITOR TIMEOUT is used for both SAP and GO mode. -#It is used to change the frequency of keep alive packets in the AP Link Monitor period which is by -#default 20s. Currently the keep alive packets are sent as an interval of 3s but after this change -#the keep alive packet frequency can be changed. +#Say gGoKeepAlivePeriod(5 seconds) and gGoLinkMonitorPeriod(10 seconds). +#For every 10 seconds DUT send Qos Null frame(i.e., Keep Alive frame if link is idle for last 10 seconds.) +#For both active and power save clients. + +#Power save clients: DUT set TIM bit from 10th second onwards and till client honors TIM bit. +#If doesn't honor for 5 seconds then DUT remove client. + +#Active clients: DUT send Qos Null frame for 10th seconds onwards if it is not success still we try on +#11th second if not tries on 12th and so on till 15th second. Hence before disconnection DUT will send 5 NULL frames. +#Hence in any case DUT will detect client got removed in (10+5) seconds. i.e., (gGoKeepAlivePeriod + gGoLinkMonitorPeriod).. + +#gGoLinkMonitorPeriod/ gApLinkMonitorPeriod is period where link is idle and it is period +#where we send NULL frame. + +#gApLinkMonitorPeriod = 10 + +#gGoLinkMonitorPeriod = 10 -#gApLinkMonitorPeriod = 3 +#gGoKeepAlivePeriod/gApKeepAlivePeriod is time to spend to check whether frame are succeed to send or not. +#Hence total effective detection time is gGoLinkMonitorPeriod+ gGoKeepAlivePeriod/gApLinkMonitorPeriod+ gApKeepAlivePeriod. + + +gGoKeepAlivePeriod = 20 + +gApKeepAlivePeriod = 20 #If set will start with active scan after driver load, otherwise will start with @@ -373,17 +389,11 @@ gVhtTxMCS2x2=2 # gPassiveMinChannelTime=60 # gActiveMaxChannelTime=40 # gActiveMinChannelTime=20 -gPassiveMaxChannelTimeConc=110 -gPassiveMinChannelTimeConc=60 -gActiveMaxChannelTimeConc=27 -gActiveMinChannelTimeConc=20 -gRestTimeConc=100 -gNumChanCombinedConc=1 #If set to 0, MCC is not allowed. gEnableMCCMode=1 -# 1=enable STBC; 0=disable STBC +# 1=enable STBC; 0=disable STBC gEnableRXSTBC=1 # 1=enable tx STBC; 0=disable @@ -408,9 +418,35 @@ isAndroidPsEn=0 #disable LDPC in STA mode if the AP is TXBF capable gDisableLDPCWithTxbfAP=1 +#Enable thermal mitigation +gThermalMitigationEnable=1 + +gEnableFastRoamInConcurrency=1 + +#List of Country codes for which 11ac needs to be disabled +#Each country code must be delimited by comma(,) +gListOfNon11acCountryCode=RU,UA,ZA + +#Maxium Channel time in msec +gMaxMediumTime = 6000 + +# 802.11K support +gRrmEnable=1 +gRrmOperChanMax=8 +gRrmNonOperChanMax=8 +gRrmRandIntvl=100 + #Scan offload gEnableDirectedScanOffload=1 +#FlexConnect Power Factor +#Default is set to 0 (disable) +gFlexConnectPowerFactor=0 + +#SAP/P2P-GO mode traffic monitor +gEnableTrafficMonitor=0 +gTrafficIdleTimeout=3000 + #Disable split scan, the FW will take care of it gNumChanCombinedConc=60 @@ -432,11 +468,8 @@ gVhtAmpduLenExponent=4 # Maximum MPDU length (VHT only. Valid values: 0->3895 octets, 1->7991 octets, 2->11454 octets) gVhtMpduLen=2 -# 802.11K support -gRrmEnable=1 -gRrmOperChanMax=8 -gRrmNonOperChanMax=8 -gRrmRandIntvl=100 +# Maximum number of wow filters required +#gMaxWoWFilters=22 # WOW Enable/Disable. # 0 - Disable both magic pattern match and pattern byte match. @@ -446,8 +479,9 @@ gRrmRandIntvl=100 # Default value of gEnableWoW is 3. # gEnableWoW=0 -# Maximum number of wow filters required -#gMaxWoWFilters=22 +# Enable or Disable MCC Adaptive Scheduler at the FW +# 1=Enable (default), 0=Disable +gEnableMCCAdaptiveScheduler=0 END -- cgit v1.2.3 From 1397cc135f39b1f4874fd3318bbc5dd6c3d9f412 Mon Sep 17 00:00:00 2001 From: Prakash Dhavali Date: Mon, 30 Dec 2013 11:44:11 -0800 Subject: Release 4.0.0.62B. Add back MODULE_LICENSE to be Dual BSD/GPL Add back MODULE_LICENSE to be Dual BSD/GPL in qcacld-new switch over from qcacld-2.0 --- CORE/HDD/src/wlan_hdd_main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c index 87fe454bf264..b93f8837fbc4 100644 --- a/CORE/HDD/src/wlan_hdd_main.c +++ b/CORE/HDD/src/wlan_hdd_main.c @@ -11552,7 +11552,7 @@ VOS_STATUS hdd_issta_p2p_clientconnected(hdd_context_t *pHddCtx) module_init(hdd_module_init); module_exit(hdd_module_exit); -MODULE_LICENSE("Proprietary"); +MODULE_LICENSE("Dual BSD/GPL"); MODULE_AUTHOR("Qualcomm Atheros, Inc."); MODULE_DESCRIPTION("WLAN HOST DEVICE DRIVER"); -- cgit v1.2.3 From 25f7f8999e0dd4a6604215f01783810b6c87a5a6 Mon Sep 17 00:00:00 2001 From: Prakash Dhavali Date: Wed, 8 Jan 2014 21:53:20 -0800 Subject: Release 4.0.0.68 Release 4.0.0.68 to override previous 4.0.0.62B as this includes switch from internal dev branch of qcacld-2.0 to qcacld-new --- Android.mk | 23 +- CORE/BAP/inc/bapApi.h | 4 - CORE/BAP/inc/btampHCI.h | 1 - CORE/BAP/src/bapApiData.c | 5 - CORE/BAP/src/bapApiDebug.c | 5 - CORE/BAP/src/bapApiExt.c | 5 - CORE/BAP/src/bapApiExt.h | 4 - CORE/BAP/src/bapApiHCBB.c | 5 - CORE/BAP/src/bapApiInfo.c | 5 - CORE/BAP/src/bapApiLinkCntl.c | 5 - CORE/BAP/src/bapApiLinkSupervision.c | 5 - CORE/BAP/src/bapApiStatus.c | 5 - CORE/BAP/src/bapApiTimer.c | 5 - CORE/BAP/src/bapApiTimer.h | 4 - CORE/BAP/src/bapInternal.h | 7 +- CORE/BAP/src/bapModule.c | 5 - CORE/BAP/src/bapRsn8021xAuthFsm.c | 4 - CORE/BAP/src/bapRsn8021xAuthFsm.h | 3 - CORE/BAP/src/bapRsn8021xFsm.h | 3 - CORE/BAP/src/bapRsn8021xPrf.c | 4 - CORE/BAP/src/bapRsn8021xPrf.h | 4 - CORE/BAP/src/bapRsn8021xSuppRsnFsm.c | 4 - CORE/BAP/src/bapRsn8021xSuppRsnFsm.h | 4 - CORE/BAP/src/bapRsnAsfPacket.c | 3 - CORE/BAP/src/bapRsnAsfPacket.h | 3 - CORE/BAP/src/bapRsnErrors.h | 4 - CORE/BAP/src/bapRsnSsmAesKeyWrap.c | 4 - CORE/BAP/src/bapRsnSsmAesKeyWrap.h | 4 - CORE/BAP/src/bapRsnSsmEapol.c | 4 - CORE/BAP/src/bapRsnSsmEapol.h | 3 - CORE/BAP/src/bapRsnSsmReplayCtr.c | 4 - CORE/BAP/src/bapRsnSsmReplayCtr.h | 4 - CORE/BAP/src/bapRsnSsmServices.h | 4 - CORE/BAP/src/bapRsnTxRx.c | 6 - CORE/BAP/src/bapRsnTxRx.h | 6 - CORE/BAP/src/btampFsm.c | 5 - CORE/BAP/src/btampFsm.h | 5 - CORE/BAP/src/btampHCI.c | 1 - CORE/BAP/src/fsmDefs.h | 1 - CORE/CLD_TXRX/HTT/htt.c | 1 - CORE/CLD_TXRX/HTT/htt.h | 7 + CORE/CLD_TXRX/HTT/htt_common.h | 7 + CORE/CLD_TXRX/HTT/htt_fw_stats.c | 1 - CORE/CLD_TXRX/HTT/htt_h2t.c | 1 - CORE/CLD_TXRX/HTT/htt_internal.h | 1 - CORE/CLD_TXRX/HTT/htt_isoc.h | 1 - CORE/CLD_TXRX/HTT/htt_rx.c | 1 - CORE/CLD_TXRX/HTT/htt_t2h.c | 1 - CORE/CLD_TXRX/HTT/htt_tx.c | 1 - CORE/CLD_TXRX/HTT/htt_types.h | 1 - CORE/CLD_TXRX/TLSHIM/tl_shim.c | 1 - CORE/CLD_TXRX/TLSHIM/tl_shim.h | 1 - CORE/CLD_TXRX/TXRX/ol_cfg.c | 1 - CORE/CLD_TXRX/TXRX/ol_ctrl_txrx_api.h | 1 - CORE/CLD_TXRX/TXRX/ol_osif_txrx_api.h | 1 - CORE/CLD_TXRX/TXRX/ol_rx.c | 1 - CORE/CLD_TXRX/TXRX/ol_rx.h | 1 - CORE/CLD_TXRX/TXRX/ol_rx_defrag.c | 1 - CORE/CLD_TXRX/TXRX/ol_rx_defrag.h | 1 - CORE/CLD_TXRX/TXRX/ol_rx_fwd.c | 1 - CORE/CLD_TXRX/TXRX/ol_rx_fwd.h | 1 - CORE/CLD_TXRX/TXRX/ol_rx_pn.c | 1 - CORE/CLD_TXRX/TXRX/ol_rx_pn.h | 1 - CORE/CLD_TXRX/TXRX/ol_rx_reorder.c | 1 - CORE/CLD_TXRX/TXRX/ol_rx_reorder.h | 1 - CORE/CLD_TXRX/TXRX/ol_rx_reorder_timeout.c | 1 - CORE/CLD_TXRX/TXRX/ol_rx_reorder_timeout.h | 1 - CORE/CLD_TXRX/TXRX/ol_tx.c | 1 - CORE/CLD_TXRX/TXRX/ol_tx.h | 1 - CORE/CLD_TXRX/TXRX/ol_tx_classify.c | 1 - CORE/CLD_TXRX/TXRX/ol_tx_classify.h | 1 - CORE/CLD_TXRX/TXRX/ol_tx_desc.c | 1 - CORE/CLD_TXRX/TXRX/ol_tx_desc.h | 1 - CORE/CLD_TXRX/TXRX/ol_tx_queue.c | 1 - CORE/CLD_TXRX/TXRX/ol_tx_queue.h | 1 - CORE/CLD_TXRX/TXRX/ol_tx_sched.c | 1 - CORE/CLD_TXRX/TXRX/ol_tx_sched.h | 1 - CORE/CLD_TXRX/TXRX/ol_tx_send.c | 1 - CORE/CLD_TXRX/TXRX/ol_tx_send.h | 1 - CORE/CLD_TXRX/TXRX/ol_txrx.c | 1 - CORE/CLD_TXRX/TXRX/ol_txrx.h | 1 - CORE/CLD_TXRX/TXRX/ol_txrx_encap.c | 1 - CORE/CLD_TXRX/TXRX/ol_txrx_encap.h | 1 - CORE/CLD_TXRX/TXRX/ol_txrx_event.c | 1 - CORE/CLD_TXRX/TXRX/ol_txrx_internal.h | 1 - CORE/CLD_TXRX/TXRX/ol_txrx_peer_find.c | 1 - CORE/CLD_TXRX/TXRX/ol_txrx_peer_find.h | 1 - CORE/CLD_TXRX/TXRX/ol_txrx_types.h | 15 + CORE/CLD_TXRX/TXRX/txrx_api.c | 17 +- CORE/DXE/inc/wlan_qct_dxe.h | 3 - CORE/DXE/src/wlan_qct_dxe.c | 4 - CORE/DXE/src/wlan_qct_dxe_cfg_i.c | 4 - CORE/DXE/src/wlan_qct_dxe_i.h | 4 - CORE/HDD/inc/bap_hdd_main.h | 4 - CORE/HDD/inc/bap_hdd_misc.h | 4 - CORE/HDD/inc/qc_sap_ioctl.h | 1 - CORE/HDD/inc/wlan_hdd_assoc.h | 11 +- CORE/HDD/inc/wlan_hdd_cfg.h | 26 +- CORE/HDD/inc/wlan_hdd_cfg80211.h | 5 - CORE/HDD/inc/wlan_hdd_debugfs.h | 1 - CORE/HDD/inc/wlan_hdd_dev_pwr.h | 1 - CORE/HDD/inc/wlan_hdd_dp_utils.h | 5 - CORE/HDD/inc/wlan_hdd_ether.h | 4 - CORE/HDD/inc/wlan_hdd_ftm.h | 1 - CORE/HDD/inc/wlan_hdd_host_offload.h | 4 - CORE/HDD/inc/wlan_hdd_hostapd.h | 4 - CORE/HDD/inc/wlan_hdd_includes.h | 5 - CORE/HDD/inc/wlan_hdd_keep_alive.h | 4 - CORE/HDD/inc/wlan_hdd_main.h | 52 +- CORE/HDD/inc/wlan_hdd_mib.h | 1 - CORE/HDD/inc/wlan_hdd_oemdata.h | 9 +- CORE/HDD/inc/wlan_hdd_p2p.h | 4 - CORE/HDD/inc/wlan_hdd_packet_filtering.h | 3 - CORE/HDD/inc/wlan_hdd_power.h | 4 - CORE/HDD/inc/wlan_hdd_softap_tx_rx.h | 3 - CORE/HDD/inc/wlan_hdd_tdls.h | 27 +- CORE/HDD/inc/wlan_hdd_tgt_cfg.h | 14 +- CORE/HDD/inc/wlan_hdd_tx_rx.h | 4 - CORE/HDD/inc/wlan_hdd_version.h | 3 - CORE/HDD/inc/wlan_hdd_wext.h | 1 - CORE/HDD/inc/wlan_hdd_wmm.h | 7 +- CORE/HDD/inc/wlan_hdd_wowl.h | 5 - CORE/HDD/inc/wlan_qct_driver.h | 5 - CORE/HDD/src/bap_hdd_main.c | 5 - CORE/HDD/src/wlan_hdd_assoc.c | 133 +- CORE/HDD/src/wlan_hdd_cfg.c | 127 +- CORE/HDD/src/wlan_hdd_cfg80211.c | 201 +- CORE/HDD/src/wlan_hdd_debugfs.c | 1 - CORE/HDD/src/wlan_hdd_dev_pwr.c | 1 - CORE/HDD/src/wlan_hdd_dp_utils.c | 5 - CORE/HDD/src/wlan_hdd_early_suspend.c | 9 +- CORE/HDD/src/wlan_hdd_ftm.c | 5 - CORE/HDD/src/wlan_hdd_hostapd.c | 9 +- CORE/HDD/src/wlan_hdd_main.c | 5718 ++++++++------------ CORE/HDD/src/wlan_hdd_mib.c | 1 - CORE/HDD/src/wlan_hdd_oemdata.c | 20 +- CORE/HDD/src/wlan_hdd_p2p.c | 40 +- CORE/HDD/src/wlan_hdd_scan.c | 5 - CORE/HDD/src/wlan_hdd_softap_tx_rx.c | 36 +- CORE/HDD/src/wlan_hdd_tdls.c | 241 +- CORE/HDD/src/wlan_hdd_tx_rx.c | 7 +- CORE/HDD/src/wlan_hdd_wext.c | 282 +- CORE/HDD/src/wlan_hdd_wmm.c | 8 +- CORE/HDD/src/wlan_hdd_wowl.c | 17 +- CORE/MAC/inc/aniCompiler.h | 5 - CORE/MAC/inc/aniDbgTest.h | 1 - CORE/MAC/inc/aniGlobal.h | 23 +- CORE/MAC/inc/aniSystemDefs.h | 3 +- CORE/MAC/inc/logDump.h | 5 - CORE/MAC/inc/macInitApi.h | 2 - CORE/MAC/inc/macTrace.h | 5 - CORE/MAC/inc/qwlan_version.h | 9 +- CORE/MAC/inc/sirApi.h | 161 +- CORE/MAC/inc/sirMacPropExts.h | 2 - CORE/MAC/inc/sirMacProtDef.h | 56 +- CORE/MAC/inc/sirTypes.h | 2 - CORE/MAC/inc/wniApi.h | 23 +- CORE/MAC/inc/wniCfgAp.h | 5 - CORE/MAC/inc/wniCfgSta.h | 6 - CORE/MAC/inc/wniStat.h | 2 - CORE/MAC/src/cfg/cfgApi.c | 3 +- CORE/MAC/src/cfg/cfgDebug.c | 5 - CORE/MAC/src/cfg/cfgDebug.h | 4 - CORE/MAC/src/cfg/cfgDef.h | 3 - CORE/MAC/src/cfg/cfgParamName.c | 5 - CORE/MAC/src/cfg/cfgPriv.h | 2 - CORE/MAC/src/cfg/cfgProcMsg.c | 2 - CORE/MAC/src/cfg/cfgSendMsg.c | 2 - CORE/MAC/src/cfg/cfgUtil/cfg.txt | 2 - CORE/MAC/src/cfg/polFile.h | 3 - CORE/MAC/src/dph/dphHashTable.c | 3 +- CORE/MAC/src/dph/dphHashTable.h | 3 - CORE/MAC/src/include/cfgApi.h | 3 - CORE/MAC/src/include/cfgGlobal.h | 3 - CORE/MAC/src/include/dot11f.h | 147 +- CORE/MAC/src/include/dphGlobal.h | 2 - CORE/MAC/src/include/parserApi.h | 3 +- CORE/MAC/src/include/sirCommon.h | 2 - CORE/MAC/src/include/sirDebug.h | 3 - CORE/MAC/src/include/sirParams.h | 45 +- CORE/MAC/src/include/sysGlobal.h | 4 +- CORE/MAC/src/include/utilsApi.h | 3 - CORE/MAC/src/include/utilsGlobal.h | 3 - CORE/MAC/src/pe/include/limAdmitControl.h | 3 +- CORE/MAC/src/pe/include/limApi.h | 3 +- CORE/MAC/src/pe/include/limFT.h | 4 - CORE/MAC/src/pe/include/limFTDefs.h | 3 - CORE/MAC/src/pe/include/limGlobal.h | 7 +- CORE/MAC/src/pe/include/limSession.h | 4 - CORE/MAC/src/pe/include/limTrace.h | 5 - CORE/MAC/src/pe/include/pmmApi.h | 2 - CORE/MAC/src/pe/include/pmmGlobal.h | 3 - CORE/MAC/src/pe/include/rrmApi.h | 7 +- CORE/MAC/src/pe/include/rrmGlobal.h | 6 +- CORE/MAC/src/pe/include/schApi.h | 2 - CORE/MAC/src/pe/include/schGlobal.h | 3 - CORE/MAC/src/pe/include/wmmApsd.h | 1 - CORE/MAC/src/pe/lim/limAIDmgmt.c | 2 - CORE/MAC/src/pe/lim/limAdmitControl.c | 3 - CORE/MAC/src/pe/lim/limApi.c | 10 - CORE/MAC/src/pe/lim/limAssocUtils.c | 91 +- CORE/MAC/src/pe/lim/limAssocUtils.h | 1 - CORE/MAC/src/pe/lim/limDebug.c | 5 - CORE/MAC/src/pe/lim/limDebug.h | 1 - CORE/MAC/src/pe/lim/limFT.c | 7 +- CORE/MAC/src/pe/lim/limIbssPeerMgmt.c | 19 - CORE/MAC/src/pe/lim/limIbssPeerMgmt.h | 3 +- CORE/MAC/src/pe/lim/limLinkMonitoringAlgo.c | 2 - CORE/MAC/src/pe/lim/limLogDump.c | 116 +- CORE/MAC/src/pe/lim/limP2P.c | 4 - CORE/MAC/src/pe/lim/limProcessActionFrame.c | 59 +- CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c | 3 +- CORE/MAC/src/pe/lim/limProcessAssocRspFrame.c | 3 +- CORE/MAC/src/pe/lim/limProcessAuthFrame.c | 3 +- CORE/MAC/src/pe/lim/limProcessBeaconFrame.c | 3 +- CORE/MAC/src/pe/lim/limProcessCfgUpdates.c | 2 - CORE/MAC/src/pe/lim/limProcessDeauthFrame.c | 3 +- CORE/MAC/src/pe/lim/limProcessDisassocFrame.c | 3 +- CORE/MAC/src/pe/lim/limProcessLmmMessages.c | 2 - CORE/MAC/src/pe/lim/limProcessMessageQueue.c | 50 +- CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c | 2 - CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c | 2 - CORE/MAC/src/pe/lim/limProcessProbeReqFrame.c | 2 - CORE/MAC/src/pe/lim/limProcessProbeRspFrame.c | 6 +- CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c | 22 +- CORE/MAC/src/pe/lim/limProcessTdls.c | 21 +- CORE/MAC/src/pe/lim/limPropExtsUtils.c | 3 +- CORE/MAC/src/pe/lim/limPropExtsUtils.h | 2 - CORE/MAC/src/pe/lim/limRoamingAlgo.c | 3 +- CORE/MAC/src/pe/lim/limScanResultUtils.c | 2 - CORE/MAC/src/pe/lim/limScanResultUtils.h | 2 - CORE/MAC/src/pe/lim/limSecurityUtils.c | 3 +- CORE/MAC/src/pe/lim/limSecurityUtils.h | 2 - CORE/MAC/src/pe/lim/limSendManagementFrames.c | 138 - CORE/MAC/src/pe/lim/limSendMessages.c | 3 +- CORE/MAC/src/pe/lim/limSendMessages.h | 3 +- CORE/MAC/src/pe/lim/limSendSmeRspMessages.c | 30 +- CORE/MAC/src/pe/lim/limSendSmeRspMessages.h | 6 +- CORE/MAC/src/pe/lim/limSerDesUtils.c | 3 - CORE/MAC/src/pe/lim/limSerDesUtils.h | 2 - CORE/MAC/src/pe/lim/limSession.c | 7 +- CORE/MAC/src/pe/lim/limSessionUtils.c | 2 - CORE/MAC/src/pe/lim/limSessionUtils.h | 5 - CORE/MAC/src/pe/lim/limSmeReqUtils.c | 3 +- CORE/MAC/src/pe/lim/limSmeReqUtils.h | 2 - CORE/MAC/src/pe/lim/limStaHashApi.c | 2 - CORE/MAC/src/pe/lim/limStaHashApi.h | 2 - CORE/MAC/src/pe/lim/limTimerUtils.c | 2 - CORE/MAC/src/pe/lim/limTimerUtils.h | 3 +- CORE/MAC/src/pe/lim/limTrace.c | 7 +- CORE/MAC/src/pe/lim/limTypes.h | 10 - CORE/MAC/src/pe/lim/limUtils.c | 3 +- CORE/MAC/src/pe/lim/limUtils.h | 2 - CORE/MAC/src/pe/pmm/pmmAP.c | 2 - CORE/MAC/src/pe/pmm/pmmApi.c | 2 - CORE/MAC/src/pe/pmm/pmmDebug.c | 5 - CORE/MAC/src/pe/pmm/pmmDebug.h | 2 - CORE/MAC/src/pe/rrm/rrmApi.c | 6 - CORE/MAC/src/pe/sch/schApi.c | 14 +- CORE/MAC/src/pe/sch/schBeaconGen.c | 4 +- CORE/MAC/src/pe/sch/schBeaconProcess.c | 2 - CORE/MAC/src/pe/sch/schDebug.c | 3 +- CORE/MAC/src/pe/sch/schDebug.h | 2 - CORE/MAC/src/pe/sch/schMessage.c | 2 - CORE/MAC/src/pe/sch/schSysParams.h | 2 - CORE/SAP/inc/sapApi.h | 4 - CORE/SAP/src/sapApiLinkCntl.c | 5 - CORE/SAP/src/sapChSelect.c | 171 +- CORE/SAP/src/sapChSelect.h | 5 - CORE/SAP/src/sapFsm.c | 5 - CORE/SAP/src/sapFsm_ext.h | 1 - CORE/SAP/src/sapInternal.h | 25 +- CORE/SAP/src/sapModule.c | 4 - CORE/SERVICES/BMI/bin_sig.h | 1 - CORE/SERVICES/BMI/bmi.c | 25 +- CORE/SERVICES/BMI/bmi_internal.h | 1 - CORE/SERVICES/BMI/fw_one_bin.h | 1 - CORE/SERVICES/BMI/ol_fw.c | 96 +- CORE/SERVICES/BMI/ol_fw.h | 18 +- CORE/SERVICES/COMMON/_ieee80211_common.h | 1 + CORE/SERVICES/COMMON/a_debug.h | 1 + CORE/SERVICES/COMMON/a_osapi.h | 18 +- CORE/SERVICES/COMMON/a_types.h | 8 + CORE/SERVICES/COMMON/adf/a_base_types.h | 1 + CORE/SERVICES/COMMON/adf/adf_nbuf.c | 1 + CORE/SERVICES/COMMON/adf/adf_nbuf.h | 1 + CORE/SERVICES/COMMON/adf/adf_net_types.h | 1 + CORE/SERVICES/COMMON/adf/adf_os_atomic.h | 4 +- CORE/SERVICES/COMMON/adf/adf_os_bitops.h | 4 +- CORE/SERVICES/COMMON/adf/adf_os_defer.h | 4 +- CORE/SERVICES/COMMON/adf/adf_os_dma.h | 1 + CORE/SERVICES/COMMON/adf/adf_os_io.h | 4 +- CORE/SERVICES/COMMON/adf/adf_os_lock.c | 1 + CORE/SERVICES/COMMON/adf/adf_os_lock.h | 4 +- CORE/SERVICES/COMMON/adf/adf_os_mem.c | 1 + CORE/SERVICES/COMMON/adf/adf_os_mem.h | 1 + CORE/SERVICES/COMMON/adf/adf_os_module.h | 4 +- CORE/SERVICES/COMMON/adf/adf_os_stdtypes.h | 1 + CORE/SERVICES/COMMON/adf/adf_os_time.h | 4 +- CORE/SERVICES/COMMON/adf/adf_os_timer.h | 4 +- CORE/SERVICES/COMMON/adf/adf_os_types.h | 1 + CORE/SERVICES/COMMON/adf/adf_os_util.h | 1 + CORE/SERVICES/COMMON/adf/linux/adf_nbuf_pvt.h | 1 + CORE/SERVICES/COMMON/adf/linux/adf_os_atomic_pvt.h | 1 + CORE/SERVICES/COMMON/adf/linux/adf_os_defer_pvt.c | 1 + CORE/SERVICES/COMMON/adf/linux/adf_os_defer_pvt.h | 1 + CORE/SERVICES/COMMON/adf/linux/adf_os_dma_pvt.h | 1 + CORE/SERVICES/COMMON/adf/linux/adf_os_io_pvt.h | 1 + CORE/SERVICES/COMMON/adf/linux/adf_os_lock_pvt.c | 1 + CORE/SERVICES/COMMON/adf/linux/adf_os_lock_pvt.h | 1 + CORE/SERVICES/COMMON/adf/linux/adf_os_mem_pvt.c | 2 + CORE/SERVICES/COMMON/adf/linux/adf_os_mem_pvt.h | 1 + CORE/SERVICES/COMMON/adf/linux/adf_os_module_pvt.h | 1 + .../COMMON/adf/linux/adf_os_postpack_pvt.h | 1 + .../SERVICES/COMMON/adf/linux/adf_os_prepack_pvt.h | 1 + CORE/SERVICES/COMMON/adf/linux/adf_os_pseudo_pvt.h | 1 + CORE/SERVICES/COMMON/adf/linux/adf_os_time_pvt.h | 1 + CORE/SERVICES/COMMON/adf/linux/adf_os_timer_pvt.h | 1 + CORE/SERVICES/COMMON/adf/linux/adf_os_trace.h | 1 + CORE/SERVICES/COMMON/adf/linux/adf_os_types_pvt.h | 1 + CORE/SERVICES/COMMON/adf/linux/adf_os_util_pvt.h | 1 + CORE/SERVICES/COMMON/ah_osdep.h | 3 + CORE/SERVICES/COMMON/apb_athr_wlan_map.h | 1 - CORE/SERVICES/COMMON/athdefs.h | 9 +- CORE/SERVICES/COMMON/athendpack.h | 1 - CORE/SERVICES/COMMON/athstartpack.h | 11 +- CORE/SERVICES/COMMON/bmi.h | 1 - CORE/SERVICES/COMMON/bmi_msg.h | 8 +- CORE/SERVICES/COMMON/dbglog.h | 9 +- CORE/SERVICES/COMMON/dbglog_host.h | 4 +- CORE/SERVICES/COMMON/dbglog_id.h | 27 +- CORE/SERVICES/COMMON/debug_linux.h | 1 + CORE/SERVICES/COMMON/dl_list.h | 1 - CORE/SERVICES/COMMON/efuse_reg.h | 1 - CORE/SERVICES/COMMON/enet.h | 1 - CORE/SERVICES/COMMON/hif.h | 6 +- CORE/SERVICES/COMMON/hif_msg_based.h | 1 + CORE/SERVICES/COMMON/htc.h | 9 +- CORE/SERVICES/COMMON/htc_api.h | 1 - CORE/SERVICES/COMMON/htc_packet.h | 1 - CORE/SERVICES/COMMON/htc_services.h | 9 +- CORE/SERVICES/COMMON/hwdef.h | 1 + CORE/SERVICES/COMMON/ieee80211_common.h | 4 +- CORE/SERVICES/COMMON/ieee80211_defines.h | 4 +- CORE/SERVICES/COMMON/if_llc.h | 1 + CORE/SERVICES/COMMON/if_upperproto.h | 4 +- CORE/SERVICES/COMMON/ip_prot.h | 1 - CORE/SERVICES/COMMON/ipv4.h | 1 - CORE/SERVICES/COMMON/ipv6_defs.h | 1 - CORE/SERVICES/COMMON/isoc_hw_desc.h | 1 - CORE/SERVICES/COMMON/ol_cfg.h | 1 - CORE/SERVICES/COMMON/ol_ctrl_addba_api.h | 1 - CORE/SERVICES/COMMON/ol_ctrl_api.h | 1 - CORE/SERVICES/COMMON/ol_defines.h | 1 + CORE/SERVICES/COMMON/ol_fw_tx_dbg.h | 1 - CORE/SERVICES/COMMON/ol_htt_api.h | 1 - CORE/SERVICES/COMMON/ol_htt_rx_api.h | 1 - CORE/SERVICES/COMMON/ol_htt_tx_api.h | 1 - CORE/SERVICES/COMMON/ol_if_athvar.h | 16 + CORE/SERVICES/COMMON/ol_osif_api.h | 1 - CORE/SERVICES/COMMON/ol_params.h | 1 + CORE/SERVICES/COMMON/ol_txrx_api.h | 1 - CORE/SERVICES/COMMON/ol_txrx_ctrl_api.h | 1 - CORE/SERVICES/COMMON/ol_txrx_dbg.h | 1 - CORE/SERVICES/COMMON/ol_txrx_htt_api.h | 1 - CORE/SERVICES/COMMON/ol_txrx_osif_api.h | 1 - CORE/SERVICES/COMMON/ol_txrx_stats.h | 1 - CORE/SERVICES/COMMON/ol_vowext_dbg_defs.h | 1 - CORE/SERVICES/COMMON/osapi_linux.h | 1 + CORE/SERVICES/COMMON/osdep.h | 2 + CORE/SERVICES/COMMON/osdep_adf.h | 2 + CORE/SERVICES/COMMON/pktlog.h | 15 + CORE/SERVICES/COMMON/pktlog_ac_fmt.h | 1 - CORE/SERVICES/COMMON/queue.h | 1 - CORE/SERVICES/COMMON/rtc_soc_reg.h | 1 - CORE/SERVICES/COMMON/sys/queue.h | 1 - CORE/SERVICES/COMMON/targaddrs.h | 9 +- CORE/SERVICES/COMMON/targcfg.h | 9 +- CORE/SERVICES/COMMON/testmode.h | 1 - CORE/SERVICES/COMMON/wal_rx_desc.h | 4 +- CORE/SERVICES/COMMON/wdi_event.h | 15 + CORE/SERVICES/COMMON/wdi_event_api.h | 1 - CORE/SERVICES/COMMON/wdi_in.h | 1 - CORE/SERVICES/COMMON/wdi_out.h | 1 - CORE/SERVICES/COMMON/wdi_types.h | 1 - CORE/SERVICES/COMMON/wlan_defs.h | 9 +- CORE/SERVICES/COMMON/wlan_module_ids.h | 5 +- CORE/SERVICES/COMMON/wlan_opts.h | 1 - CORE/SERVICES/COMMON/wlan_tgt_def_config.h | 23 +- CORE/SERVICES/COMMON/wlan_tgt_def_config_hl.h | 1 - CORE/SERVICES/COMMON/wma_api.h | 6 +- CORE/SERVICES/COMMON/wmi.h | 8 +- CORE/SERVICES/COMMON/wmi_services.h | 4 +- CORE/SERVICES/COMMON/wmi_tlv_defs.h | 120 +- CORE/SERVICES/COMMON/wmi_tlv_helper.h | 1 - CORE/SERVICES/COMMON/wmi_unified.h | 313 +- CORE/SERVICES/COMMON/wmi_unified_api.h | 1 - CORE/SERVICES/COMMON/wmi_version.h | 3 +- CORE/SERVICES/COMMON/wmi_version_whitelist.c | 2 + CORE/SERVICES/COMMON/wmix.h | 9 +- CORE/SERVICES/HIF/DXE/dmux_dxe.c | 1 - CORE/SERVICES/HIF/DXE/dmux_dxe_api.h | 1 - CORE/SERVICES/HIF/DXE/dmux_dxe_internal.h | 1 - CORE/SERVICES/HIF/DXE/hif_dxe.c | 2 +- CORE/SERVICES/HIF/DXE/hif_dxe.h | 1 - CORE/SERVICES/HIF/DXE/hif_dxe_config.c | 1 - CORE/SERVICES/HIF/DXE/hif_dxe_hw_pvt.h | 1 - CORE/SERVICES/HIF/DXE/hif_dxe_os.h | 1 - CORE/SERVICES/HIF/DXE/hif_dxe_pvt.h | 1 - CORE/SERVICES/HIF/DXE/linux/hif_dxe_os.c | 1 - CORE/SERVICES/HIF/DXE/linux/hif_dxe_ospvt.h | 1 - CORE/SERVICES/HIF/PCIe/cepci.h | 9 +- CORE/SERVICES/HIF/PCIe/copy_engine.c | 4 + CORE/SERVICES/HIF/PCIe/copy_engine_api.h | 1 - CORE/SERVICES/HIF/PCIe/copy_engine_internal.h | 1 - CORE/SERVICES/HIF/PCIe/hif_pci.c | 8 +- CORE/SERVICES/HIF/PCIe/hif_pci.h | 3 +- CORE/SERVICES/HIF/PCIe/if_pci.c | 75 +- CORE/SERVICES/HIF/PCIe/if_pci.h | 17 + CORE/SERVICES/HIF/PCIe/mp_dev.c | 1 - CORE/SERVICES/HIF/PCIe/regtable.c | 24 +- CORE/SERVICES/HIF/ath_procfs.c | 1 - CORE/SERVICES/HTC/htc.c | 1 - CORE/SERVICES/HTC/htc_debug.h | 1 - CORE/SERVICES/HTC/htc_internal.h | 1 - CORE/SERVICES/HTC/htc_recv.c | 1 + CORE/SERVICES/HTC/htc_send.c | 1 - CORE/SERVICES/HTC/htc_services.c | 1 + CORE/SERVICES/HTC/linux/htc_smd.c | 1 - CORE/SERVICES/HTC/linux/htc_smd.h | 1 - CORE/SERVICES/WMA/inc/legacy/halMsgApi.h | 7 +- CORE/SERVICES/WMA/inc/legacy/halTypes.h | 1 - CORE/SERVICES/WMA/inc/legacy/palTypes.h | 1 - CORE/SERVICES/WMA/inc/legacy/wlan_qct_hal.h | 6 - CORE/SERVICES/WMA/inc/wlan_qct_wma.h | 3 - CORE/SERVICES/WMA/regdomain.c | 92 +- CORE/SERVICES/WMA/regdomain.h | 4 +- CORE/SERVICES/WMA/regdomain_common.h | 1 - CORE/SERVICES/WMA/wlan_nv.c | 1 - CORE/SERVICES/WMA/wlan_qct_wma_legacy.c | 5 - CORE/SERVICES/WMA/wma.c | 2149 +++++++- CORE/SERVICES/WMA/wma.h | 103 +- CORE/SERVICES/WMA/wma_isoc.c | 1 - CORE/SERVICES/WMA/wma_stub.h | 5 + CORE/SERVICES/WMI/wmi_tlv_helper.c | 1 - CORE/SERVICES/WMI/wmi_tlv_platform.c | 16 +- CORE/SERVICES/WMI/wmi_unified.c | 1 + CORE/SERVICES/WMI/wmi_unified_priv.h | 1 + CORE/SME/inc/btcApi.h | 4 - CORE/SME/inc/ccmApi.h | 4 - CORE/SME/inc/csrApi.h | 14 +- CORE/SME/inc/csrInternal.h | 6 - CORE/SME/inc/csrLinkList.h | 3 - CORE/SME/inc/csrNeighborRoam.h | 3 - CORE/SME/inc/csrSupport.h | 3 - CORE/SME/inc/oemDataApi.h | 8 +- CORE/SME/inc/oemDataInternal.h | 3 - CORE/SME/inc/p2p_Api.h | 4 - CORE/SME/inc/pmc.h | 6 +- CORE/SME/inc/pmcApi.h | 7 - CORE/SME/inc/smeInside.h | 6 - CORE/SME/inc/smeInternal.h | 25 +- CORE/SME/inc/smeQosInternal.h | 5 - CORE/SME/inc/smeRrmInternal.h | 7 +- CORE/SME/inc/sme_Api.h | 124 +- CORE/SME/inc/sme_FTApi.h | 6 - CORE/SME/inc/sme_QosApi.h | 5 - CORE/SME/inc/sme_RrmApi.h | 4 - CORE/SME/inc/sme_Trace.h | 26 + CORE/SME/inc/smsDebug.h | 3 - CORE/SME/inc/wlan_ps_wow_diag.h | 1 - CORE/SME/src/QoS/sme_Qos.c | 11 +- CORE/SME/src/btc/btcApi.c | 4 - CORE/SME/src/ccm/ccmApi.c | 1 - CORE/SME/src/ccm/ccmLogDump.c | 4 - CORE/SME/src/csr/csrApiRoam.c | 114 +- CORE/SME/src/csr/csrApiScan.c | 3 +- CORE/SME/src/csr/csrCmdProcess.c | 1 - CORE/SME/src/csr/csrInsideApi.h | 1 - CORE/SME/src/csr/csrLinkList.c | 2 - CORE/SME/src/csr/csrLogDump.c | 4 - CORE/SME/src/csr/csrNeighborRoam.c | 6 +- CORE/SME/src/csr/csrTdlsProcess.c | 57 +- CORE/SME/src/csr/csrUtil.c | 1 - CORE/SME/src/oemData/oemDataApi.c | 4 - CORE/SME/src/p2p/p2p_Api.c | 7 - CORE/SME/src/pmc/pmc.c | 8 +- CORE/SME/src/pmc/pmcApi.c | 14 +- CORE/SME/src/pmc/pmcLogDump.c | 5 - CORE/SME/src/rrm/sme_rrm.c | 19 +- CORE/SME/src/sme_common/sme_Api.c | 431 +- CORE/SME/src/sme_common/sme_FTApi.c | 6 - CORE/SME/src/sme_common/sme_Trace.c | 26 + CORE/SVC/external/wlan_nlink_common.h | 5 - CORE/SVC/inc/wlan_btc_svc.h | 1 - CORE/SVC/inc/wlan_nlink_srv.h | 1 - CORE/SVC/inc/wlan_ptt_sock_svc.h | 1 - CORE/SVC/src/btc/wlan_btc_svc.c | 4 +- CORE/SVC/src/nlink/wlan_nlink_srv.c | 1 - CORE/SVC/src/ptt/wlan_ptt_sock_svc.c | 1 - CORE/SYS/common/inc/wlan_qct_sys.h | 5 - CORE/SYS/common/src/wlan_qct_sys.c | 22 +- CORE/SYS/legacy/src/pal/inc/palApi.h | 2 - CORE/SYS/legacy/src/pal/inc/palTimer.h | 1 - CORE/SYS/legacy/src/pal/src/palApiComm.c | 1 - CORE/SYS/legacy/src/pal/src/palTimer.c | 3 - CORE/SYS/legacy/src/platform/inc/VossWrapper.h | 4 - CORE/SYS/legacy/src/platform/src/VossWrapper.c | 4 - CORE/SYS/legacy/src/system/inc/sysDebug.h | 2 - CORE/SYS/legacy/src/system/inc/sysDef.h | 2 - CORE/SYS/legacy/src/system/inc/sysEntryFunc.h | 2 - CORE/SYS/legacy/src/system/inc/sysStartup.h | 2 - CORE/SYS/legacy/src/system/src/macInitApi.c | 3 +- CORE/SYS/legacy/src/system/src/sysEntryFunc.c | 2 - CORE/SYS/legacy/src/utils/inc/dot11fdefs.h | 2 - CORE/SYS/legacy/src/utils/inc/utilsParser.h | 3 +- CORE/SYS/legacy/src/utils/src/dot11f.c | 522 +- CORE/SYS/legacy/src/utils/src/logApi.c | 2 - CORE/SYS/legacy/src/utils/src/logDump.c | 4 - CORE/SYS/legacy/src/utils/src/macTrace.c | 7 +- CORE/SYS/legacy/src/utils/src/parserApi.c | 219 +- CORE/SYS/legacy/src/utils/src/utilsApi.c | 1 - CORE/SYS/legacy/src/utils/src/utilsParser.c | 3 +- CORE/TL/inc/tlDebug.h | 1 - CORE/TL/inc/wlan_qct_tl.h | 151 +- CORE/TL/src/wlan_qct_tl.c | 856 +-- CORE/TL/src/wlan_qct_tl_ba.c | 9 +- CORE/TL/src/wlan_qct_tl_hosupport.c | 11 +- CORE/TL/src/wlan_qct_tl_hosupport.h | 3 - CORE/TL/src/wlan_qct_tli.h | 258 +- CORE/TL/src/wlan_qct_tli_ba.h | 3 - CORE/UTILS/FWLOG/dbglog_host.c | 25 +- CORE/UTILS/PKTLOG/include/pktlog_ac.h | 1 - CORE/UTILS/PKTLOG/include/pktlog_ac_api.h | 1 - CORE/UTILS/PKTLOG/include/pktlog_ac_i.h | 1 - CORE/UTILS/PKTLOG/linux_ac.c | 1 - CORE/UTILS/PKTLOG/pktlog_ac.c | 15 +- CORE/UTILS/PKTLOG/pktlog_internal.c | 15 +- CORE/VOSS/inc/event_defs.h | 1 - CORE/VOSS/inc/i_vos_diag_core_event.h | 5 - CORE/VOSS/inc/i_vos_diag_core_log.h | 5 - CORE/VOSS/inc/i_vos_event.h | 5 - CORE/VOSS/inc/i_vos_list.h | 5 - CORE/VOSS/inc/i_vos_lock.h | 14 +- CORE/VOSS/inc/i_vos_packet.h | 5 - CORE/VOSS/inc/i_vos_timer.h | 5 - CORE/VOSS/inc/i_vos_trace.h | 4 - CORE/VOSS/inc/i_vos_types.h | 5 - CORE/VOSS/inc/log_codes.h | 2 - CORE/VOSS/inc/vos_api.h | 5 - CORE/VOSS/inc/vos_diag_core_event.h | 5 - CORE/VOSS/inc/vos_diag_core_log.h | 5 - CORE/VOSS/inc/vos_event.h | 5 - CORE/VOSS/inc/vos_getBin.h | 5 - CORE/VOSS/inc/vos_list.h | 5 - CORE/VOSS/inc/vos_lock.h | 60 +- CORE/VOSS/inc/vos_memory.h | 5 - CORE/VOSS/inc/vos_mq.h | 5 - CORE/VOSS/inc/vos_nvitem.h | 8 +- CORE/VOSS/inc/vos_pack_align.h | 5 - CORE/VOSS/inc/vos_packet.h | 5 - CORE/VOSS/inc/vos_power.h | 21 - CORE/VOSS/inc/vos_status.h | 5 - CORE/VOSS/inc/vos_threads.h | 5 - CORE/VOSS/inc/vos_timer.h | 5 - CORE/VOSS/inc/vos_trace.h | 5 - CORE/VOSS/inc/vos_types.h | 9 +- CORE/VOSS/inc/vos_utils.h | 7 +- CORE/VOSS/inc/wcnss_api.h | 1 - CORE/VOSS/inc/wlan_hdd_misc.h | 2 - CORE/VOSS/inc/wlan_nv_parser.h | 1 - CORE/VOSS/inc/wlan_nv_parser_internal.h | 1 - CORE/VOSS/inc/wlan_nv_stream.h | 1 - CORE/VOSS/inc/wlan_nv_template_api.h | 1 - CORE/VOSS/inc/wlan_nv_template_builtin.h | 1 - CORE/VOSS/inc/wlan_nv_template_internal.h | 1 - CORE/VOSS/inc/wlan_nv_types.h | 1 - CORE/VOSS/src/vos_api.c | 18 +- CORE/VOSS/src/vos_diag.c | 5 - CORE/VOSS/src/vos_event.c | 4 - CORE/VOSS/src/vos_getBin.c | 4 +- CORE/VOSS/src/vos_list.c | 6 - CORE/VOSS/src/vos_lock.c | 90 +- CORE/VOSS/src/vos_memory.c | 5 - CORE/VOSS/src/vos_mq.c | 5 - CORE/VOSS/src/vos_nvitem.c | 614 ++- CORE/VOSS/src/vos_packet.c | 5 - CORE/VOSS/src/vos_power.c | 21 - CORE/VOSS/src/vos_sched.c | 4 - CORE/VOSS/src/vos_sched.h | 7 - CORE/VOSS/src/vos_threads.c | 5 - CORE/VOSS/src/vos_timer.c | 5 - CORE/VOSS/src/vos_trace.c | 5 - CORE/VOSS/src/vos_types.c | 5 - CORE/VOSS/src/vos_utils.c | 5 +- CORE/VOSS/src/wlan_nv_parser.c | 1 - CORE/VOSS/src/wlan_nv_template_builtin.c | 1 - CORE/WDA/inc/legacy/halMsgApi.h | 20 +- CORE/WDA/inc/legacy/halTypes.h | 1 - CORE/WDA/inc/legacy/wlan_qct_hal.h | 11 - CORE/WDA/inc/wlan_qct_wda.h | 59 +- CORE/WDA/inc/wlan_qct_wda_msg.h | 4 - CORE/WDA/src/wlan_nv.c | 1 - CORE/WDA/src/wlan_qct_wda.c | 563 -- CORE/WDA/src/wlan_qct_wda_debug.c | 5 - CORE/WDA/src/wlan_qct_wda_debug.h | 1 - CORE/WDA/src/wlan_qct_wda_ds.c | 64 - CORE/WDA/src/wlan_qct_wda_legacy.c | 5 - CORE/WDI/CP/inc/qwlanfw_defs.h | 4 - CORE/WDI/CP/inc/wlan_qct_wdi.h | 350 +- CORE/WDI/CP/inc/wlan_qct_wdi_bd.h | 4 - CORE/WDI/CP/inc/wlan_qct_wdi_cfg.h | 4 - CORE/WDI/CP/inc/wlan_qct_wdi_dp.h | 9 - CORE/WDI/CP/inc/wlan_qct_wdi_i.h | 237 +- CORE/WDI/CP/inc/wlan_qct_wdi_sta.h | 4 - CORE/WDI/CP/src/wlan_qct_wdi.c | 1072 +--- CORE/WDI/CP/src/wlan_qct_wdi_dp.c | 18 - CORE/WDI/CP/src/wlan_qct_wdi_sta.c | 5 - CORE/WDI/DP/inc/wlan_qct_wdi_ds.h | 3 - CORE/WDI/DP/inc/wlan_qct_wdi_ds_i.h | 3 - CORE/WDI/DP/src/wlan_qct_wdi_bd.c | 3 - CORE/WDI/DP/src/wlan_qct_wdi_ds.c | 3 - CORE/WDI/TRP/CTS/inc/wlan_qct_wdi_cts.h | 4 - CORE/WDI/TRP/CTS/src/wlan_qct_wdi_cts.c | 5 - CORE/WDI/TRP/DTS/inc/wlan_qct_wdi_dts.h | 4 - CORE/WDI/TRP/DTS/src/wlan_qct_wdi_dts.c | 3 - CORE/WDI/WPAL/inc/wlan_qct_os_list.h | 5 - CORE/WDI/WPAL/inc/wlan_qct_os_status.h | 5 - CORE/WDI/WPAL/inc/wlan_qct_os_sync.h | 5 - CORE/WDI/WPAL/inc/wlan_qct_os_timer.h | 5 - CORE/WDI/WPAL/inc/wlan_qct_os_trace.h | 1 - CORE/WDI/WPAL/inc/wlan_qct_os_type.h | 5 - CORE/WDI/WPAL/inc/wlan_qct_pack_align.h | 5 - CORE/WDI/WPAL/inc/wlan_qct_pal_api.h | 5 - CORE/WDI/WPAL/inc/wlan_qct_pal_device.h | 3 - CORE/WDI/WPAL/inc/wlan_qct_pal_list.h | 5 - CORE/WDI/WPAL/inc/wlan_qct_pal_msg.h | 5 - CORE/WDI/WPAL/inc/wlan_qct_pal_packet.h | 5 - CORE/WDI/WPAL/inc/wlan_qct_pal_status.h | 5 - CORE/WDI/WPAL/inc/wlan_qct_pal_sync.h | 5 - CORE/WDI/WPAL/inc/wlan_qct_pal_timer.h | 5 - CORE/WDI/WPAL/inc/wlan_qct_pal_trace.h | 5 - CORE/WDI/WPAL/inc/wlan_qct_pal_type.h | 5 - CORE/WDI/WPAL/src/wlan_qct_pal_api.c | 5 - CORE/WDI/WPAL/src/wlan_qct_pal_device.c | 4 - CORE/WDI/WPAL/src/wlan_qct_pal_msg.c | 5 - CORE/WDI/WPAL/src/wlan_qct_pal_packet.c | 5 +- CORE/WDI/WPAL/src/wlan_qct_pal_sync.c | 5 +- CORE/WDI/WPAL/src/wlan_qct_pal_timer.c | 5 - CORE/WDI/WPAL/src/wlan_qct_pal_trace.c | 5 - Kbuild | 24 +- Makefile | 9 +- firmware_bin/WCNSS_cfg.dat | Bin firmware_bin/WCNSS_qcom_cfg.ini | 4 +- tools/athdiag/athdiag.c | 5 +- tools/fwdebuglog/cld-fwlog-netlink.c | 29 +- tools/fwdebuglog/cld-fwlog-parser.c | 4 +- tools/fwdebuglog/cld-fwlog-record.c | 4 +- tools/fwdebuglog/parser.c | 29 +- tools/pktlog/pktlogconf.c | 1 + 660 files changed, 8061 insertions(+), 11364 deletions(-) mode change 100755 => 100644 firmware_bin/WCNSS_cfg.dat diff --git a/Android.mk b/Android.mk index 865d0f952261..c008e35dee6e 100644 --- a/Android.mk +++ b/Android.mk @@ -5,18 +5,18 @@ WLAN_CHIPSET := # Build/Package options for 8084 target ifeq ($(call is-board-platform,apq8084),true) - WLAN_CHIPSET := qca_cld - WLAN_SELECT := CONFIG_QCA_CLD_WLAN=m - WLAN_ISOC_SELECT := CONFIG_QCA_WIFI_ISOC=0 - WLAN_ISOC_SELECT += CONFIG_QCA_WIFI_2_0=1 +WLAN_CHIPSET := qca_cld +WLAN_SELECT := CONFIG_QCA_CLD_WLAN=m +WLAN_ISOC_SELECT := CONFIG_QCA_WIFI_ISOC=0 +WLAN_ISOC_SELECT += CONFIG_QCA_WIFI_2_0=1 endif # Build/Package options for 8974, 8226, 8610 targets ifeq ($(call is-board-platform-in-list,msm8974 msm8226 msm8610),true) - WLAN_CHIPSET := qca_cld - WLAN_SELECT := CONFIG_QCA_CLD_WLAN=m - WLAN_ISOC_SELECT := CONFIG_QCA_WIFI_ISOC=1 - WLAN_ISOC_SELECT += CONFIG_QCA_WIFI_2_0=0 +WLAN_CHIPSET := qca_cld +WLAN_SELECT := CONFIG_QCA_CLD_WLAN=m +WLAN_ISOC_SELECT := CONFIG_QCA_WIFI_ISOC=1 +WLAN_ISOC_SELECT += CONFIG_QCA_WIFI_2_0=0 endif # Build/Package only in case of supported target @@ -48,11 +48,10 @@ else endif -# Build wlan.ko as either prima_wlan.ko or pronto_wlan.ko or qca_cld_wlan.ko +# Build wlan.ko as proprietary_qca_cld_wlan.ko ########################################################### - # This is set once per LOCAL_PATH, not per (kernel) module -KBUILD_OPTIONS := WLAN_ROOT=../$(WLAN_BLD_DIR)/qcacld-2.0 +KBUILD_OPTIONS := WLAN_ROOT=../$(WLAN_BLD_DIR)/qcacld-new # We are actually building wlan.ko here, as per the # requirement we are specifying _wlan.ko as LOCAL_MODULE. # This means we need to rename the module to _wlan.ko @@ -63,7 +62,7 @@ KBUILD_OPTIONS += $(WLAN_SELECT) KBUILD_OPTIONS += $(WLAN_ISOC_SELECT) include $(CLEAR_VARS) -LOCAL_MODULE := $(WLAN_CHIPSET)_wlan.ko +LOCAL_MODULE := proprietary_$(WLAN_CHIPSET)_wlan.ko LOCAL_MODULE_KBUILD_NAME := wlan.ko LOCAL_MODULE_TAGS := debug LOCAL_MODULE_DEBUG_ENABLE := true diff --git a/CORE/BAP/inc/bapApi.h b/CORE/BAP/inc/bapApi.h index 1bf2ab9a9840..6c019fc5cdfb 100644 --- a/CORE/BAP/inc/bapApi.h +++ b/CORE/BAP/inc/bapApi.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef WLAN_QCT_WLANBAP_H #define WLAN_QCT_WLANBAP_H @@ -38,9 +37,6 @@ DESCRIPTION This file contains the external API exposed by the wlan BT-AMP PAL layer module. - - Copyright (c) 2008 Qualcomm Technologies, Inc. All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ===========================================================================*/ diff --git a/CORE/BAP/inc/btampHCI.h b/CORE/BAP/inc/btampHCI.h index 9ac794ee0cca..5d98708d4059 100644 --- a/CORE/BAP/inc/btampHCI.h +++ b/CORE/BAP/inc/btampHCI.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef BTAMPHCI_H #define BTAMPHCI_H diff --git a/CORE/BAP/src/bapApiData.c b/CORE/BAP/src/bapApiData.c index 465251f2f4d5..37c3d49b3686 100644 --- a/CORE/BAP/src/bapApiData.c +++ b/CORE/BAP/src/bapApiData.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /*=========================================================================== b a p A p i D a t a . C @@ -41,10 +40,6 @@ Are listed for each API below. - - Copyright (c) 2008 Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ===========================================================================*/ /*=========================================================================== diff --git a/CORE/BAP/src/bapApiDebug.c b/CORE/BAP/src/bapApiDebug.c index 960b2a567291..d27b9dda6e6b 100644 --- a/CORE/BAP/src/bapApiDebug.c +++ b/CORE/BAP/src/bapApiDebug.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /*=========================================================================== b a p A p i D e b u g . C @@ -41,10 +40,6 @@ Are listed for each API below. - - Copyright (c) 2008 Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ===========================================================================*/ /*=========================================================================== diff --git a/CORE/BAP/src/bapApiExt.c b/CORE/BAP/src/bapApiExt.c index 4d5b00f0ee19..6728edc193ba 100644 --- a/CORE/BAP/src/bapApiExt.c +++ b/CORE/BAP/src/bapApiExt.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /*=========================================================================== b a p A p i E x t . C @@ -43,10 +42,6 @@ Are listed for each API below. - - Copyright (c) 2008 Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ===========================================================================*/ /*=========================================================================== diff --git a/CORE/BAP/src/bapApiExt.h b/CORE/BAP/src/bapApiExt.h index 02de078862a1..2aac619201b6 100644 --- a/CORE/BAP/src/bapApiExt.h +++ b/CORE/BAP/src/bapApiExt.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef WLAN_QCT_WLANBAP_API_EXT_H #define WLAN_QCT_WLANBAP_API_EXT_H @@ -38,9 +37,6 @@ DESCRIPTION This file contains the external APIs used by the wlan BT-AMP PAL layer module. - - Copyright (c) 2008 Qualcomm Technologies, Inc. All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ===========================================================================*/ diff --git a/CORE/BAP/src/bapApiHCBB.c b/CORE/BAP/src/bapApiHCBB.c index 2e56d0e3bb85..78afd89f37ad 100644 --- a/CORE/BAP/src/bapApiHCBB.c +++ b/CORE/BAP/src/bapApiHCBB.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /*=========================================================================== b a p A p i H C B B . C @@ -41,10 +40,6 @@ Are listed for each API below. - - Copyright (c) 2008 Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ===========================================================================*/ /*=========================================================================== diff --git a/CORE/BAP/src/bapApiInfo.c b/CORE/BAP/src/bapApiInfo.c index eced536205b8..35e2e91a9da1 100644 --- a/CORE/BAP/src/bapApiInfo.c +++ b/CORE/BAP/src/bapApiInfo.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /*=========================================================================== b a p A p i I n f o . C @@ -41,10 +40,6 @@ Are listed for each API below. - - Copyright (c) 2008 Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ===========================================================================*/ /*=========================================================================== diff --git a/CORE/BAP/src/bapApiLinkCntl.c b/CORE/BAP/src/bapApiLinkCntl.c index c2bcd0cd8a16..1f753f89ea92 100644 --- a/CORE/BAP/src/bapApiLinkCntl.c +++ b/CORE/BAP/src/bapApiLinkCntl.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /*=========================================================================== b a p A p i L i n k C n t l . C @@ -41,10 +40,6 @@ Are listed for each API below. - - Copyright (c) 2008 Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ===========================================================================*/ /*=========================================================================== diff --git a/CORE/BAP/src/bapApiLinkSupervision.c b/CORE/BAP/src/bapApiLinkSupervision.c index c355e4e6a9ef..1973cd46a9e0 100644 --- a/CORE/BAP/src/bapApiLinkSupervision.c +++ b/CORE/BAP/src/bapApiLinkSupervision.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /*=========================================================================== b a p A p i LinkSupervision . C @@ -41,10 +40,6 @@ Are listed for each API below. - - Copyright (c) 2008 Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ===========================================================================*/ /*=========================================================================== diff --git a/CORE/BAP/src/bapApiStatus.c b/CORE/BAP/src/bapApiStatus.c index ff5b1184729b..29471df04d11 100644 --- a/CORE/BAP/src/bapApiStatus.c +++ b/CORE/BAP/src/bapApiStatus.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /*=========================================================================== b a p A p i S t a t u s . C @@ -41,10 +40,6 @@ Are listed for each API below. - - Copyright (c) 2008 Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ===========================================================================*/ /*=========================================================================== diff --git a/CORE/BAP/src/bapApiTimer.c b/CORE/BAP/src/bapApiTimer.c index 0a62061137a4..5d22673de0a4 100644 --- a/CORE/BAP/src/bapApiTimer.c +++ b/CORE/BAP/src/bapApiTimer.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /*=========================================================================== b a p A p i T i m e r . C @@ -41,10 +40,6 @@ Are listed for each API below. - - Copyright (c) 2008 Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ===========================================================================*/ /*=========================================================================== diff --git a/CORE/BAP/src/bapApiTimer.h b/CORE/BAP/src/bapApiTimer.h index 97a4a367fe0a..f15d0a9b509b 100644 --- a/CORE/BAP/src/bapApiTimer.h +++ b/CORE/BAP/src/bapApiTimer.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef WLAN_QCT_WLANBAP_API_TIMER_H #define WLAN_QCT_WLANBAP_API_TIMER_H @@ -38,9 +37,6 @@ DESCRIPTION This file contains the timer APIs used by the wlan BT-AMP PAL layer module. - - Copyright (c) 2008 Qualcomm Technologies, Inc. All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ===========================================================================*/ diff --git a/CORE/BAP/src/bapInternal.h b/CORE/BAP/src/bapInternal.h index 151c287b286f..c490597a72cc 100644 --- a/CORE/BAP/src/bapInternal.h +++ b/CORE/BAP/src/bapInternal.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef WLAN_QCT_WLANBAP_INTERNAL_H #define WLAN_QCT_WLANBAP_INTERNAL_H @@ -38,9 +37,6 @@ DESCRIPTION This file contains the internal API exposed by the wlan BT-AMP PAL layer module. - - Copyright (c) 2008 Qualcomm Technologies, Inc. All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ===========================================================================*/ @@ -206,7 +202,8 @@ typedef struct sBtampHCI_Supported_Cmds { typedef struct sBtampHCI_AMP_Info { // v_U8_t present; - v_U8_t HC_AMP_Status; v_U32_t HC_Total_BW; /* combined uplink and downlink */ + v_U8_t HC_AMP_Status; /* */ + v_U32_t HC_Total_BW; /* combined uplink and downlink */ v_U32_t HC_Max_Guaranteed_BW; /* upper bound */ v_U32_t HC_Min_Latency; /* AMP HCI latency + DIFS + CWMin */ v_U32_t HC_Max_PDU_Size; /* Equal to Max80211PALPDUSize */ diff --git a/CORE/BAP/src/bapModule.c b/CORE/BAP/src/bapModule.c index e5ad085979b0..2fd8c37725d7 100644 --- a/CORE/BAP/src/bapModule.c +++ b/CORE/BAP/src/bapModule.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /*=========================================================================== b a p M o d u l e . C @@ -43,10 +42,6 @@ Are listed for each API below. - - Copyright (c) 2008 Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ===========================================================================*/ /*=========================================================================== diff --git a/CORE/BAP/src/bapRsn8021xAuthFsm.c b/CORE/BAP/src/bapRsn8021xAuthFsm.c index c7183895f2af..2ce59a78c530 100644 --- a/CORE/BAP/src/bapRsn8021xAuthFsm.c +++ b/CORE/BAP/src/bapRsn8021xAuthFsm.c @@ -24,11 +24,7 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Woodside Networks, Inc proprietary. All rights reserved. - * $File: //depot/software/projects/feature_branches/gen5_phase1/os/linux/classic/ap/apps/ssm/auth8021x/ani8021xAuthRsnFsm.c $ - * * Contains definitions for the RSN EAPOL-Key FSM on the * authenticator side. This is based on 802.11i. * diff --git a/CORE/BAP/src/bapRsn8021xAuthFsm.h b/CORE/BAP/src/bapRsn8021xAuthFsm.h index ec928576aa09..ebdc1c8e3768 100644 --- a/CORE/BAP/src/bapRsn8021xAuthFsm.h +++ b/CORE/BAP/src/bapRsn8021xAuthFsm.h @@ -24,10 +24,7 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Woodside Networks, Inc proprietary. All rights reserved. - * $File: //depot/software/projects/feature_branches/gen5_phase1/os/linux/classic/ap/apps/ssm/auth8021x/ani8021xAuthRsnFsm.h $ * * Contains declarations for the RSN EAPOL-Key FSM on the * authenticator side. This is based on 802.11i. diff --git a/CORE/BAP/src/bapRsn8021xFsm.h b/CORE/BAP/src/bapRsn8021xFsm.h index c3d2158d3755..53b9c48ffd4a 100644 --- a/CORE/BAP/src/bapRsn8021xFsm.h +++ b/CORE/BAP/src/bapRsn8021xFsm.h @@ -24,10 +24,7 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Woodside Networks, Inc proprietary. All rights reserved. - * $File: //depot/software/projects/feature_branches/gen5_phase1/os/linux/classic/ap/apps/ssm/auth8021x/ani8021xFsm.h $ * Contains the declarations for the Auth Agent's FSM's to work. * * Author: Mayank D. Upadhyay diff --git a/CORE/BAP/src/bapRsn8021xPrf.c b/CORE/BAP/src/bapRsn8021xPrf.c index a921ebcadb13..ebd50fa7de4d 100644 --- a/CORE/BAP/src/bapRsn8021xPrf.c +++ b/CORE/BAP/src/bapRsn8021xPrf.c @@ -24,11 +24,7 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Woodside Networks, Inc proprietary. All rights reserved. - * $File: //depot/software/projects/feature_branches/gen5_phase1/os/linux/classic/ap/apps/ssm/auth8021x/ani8021xPrf.c $ - * * Contains definitions for routines to calculate the 802.11i PRF * functions. * diff --git a/CORE/BAP/src/bapRsn8021xPrf.h b/CORE/BAP/src/bapRsn8021xPrf.h index 05fcf7c928ce..546581d2433c 100644 --- a/CORE/BAP/src/bapRsn8021xPrf.h +++ b/CORE/BAP/src/bapRsn8021xPrf.h @@ -24,11 +24,7 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Woodside Networks, Inc proprietary. All rights reserved. - * $File: //depot/software/projects/feature_branches/gen5_phase1/os/linux/classic/ap/apps/ssm/auth8021x/ani8021xPrf.h $ - * * Contains declarations for routines to calculate the 802.11i PRF * functions. * diff --git a/CORE/BAP/src/bapRsn8021xSuppRsnFsm.c b/CORE/BAP/src/bapRsn8021xSuppRsnFsm.c index a714cf150bd7..f2568f88bca4 100644 --- a/CORE/BAP/src/bapRsn8021xSuppRsnFsm.c +++ b/CORE/BAP/src/bapRsn8021xSuppRsnFsm.c @@ -24,11 +24,7 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Woodside Networks, Inc proprietary. All rights reserved. - * $File: //depot/software/projects/feature_branches/gen5_phase1/os/linux/classic/ap/apps/ssm/auth8021x/ani8021xSuppRsnFsm.c $ - * * Contains definitions for the RSN EAPOL-Key FSM on the * supplicant side. This is based on 802.11i. * diff --git a/CORE/BAP/src/bapRsn8021xSuppRsnFsm.h b/CORE/BAP/src/bapRsn8021xSuppRsnFsm.h index 59bd6caf69c2..9a20e1cd3ecc 100644 --- a/CORE/BAP/src/bapRsn8021xSuppRsnFsm.h +++ b/CORE/BAP/src/bapRsn8021xSuppRsnFsm.h @@ -24,11 +24,7 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Woodside Networks, Inc proprietary. All rights reserved. - * $File: //depot/software/projects/feature_branches/gen5_phase1/os/linux/classic/ap/apps/ssm/auth8021x/ani8021xSuppRsnFsm.h $ - * * Contains declarations for the RSN EAPOL-Key FSM on the * supplicant side. This is based on 802.11i. * diff --git a/CORE/BAP/src/bapRsnAsfPacket.c b/CORE/BAP/src/bapRsnAsfPacket.c index 2102600ff94e..7bf55eb382e6 100644 --- a/CORE/BAP/src/bapRsnAsfPacket.c +++ b/CORE/BAP/src/bapRsnAsfPacket.c @@ -24,10 +24,7 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Woodside Networks, Inc proprietary. All rights reserved. - * File: $File: //depot/software/projects/feature_branches/nova_phase1/ap/apps/asf/aniAsfPacket.c $ * Contains definitions for packet manipulation routines that make it * easy to create and parse multi-layered network frames. This module * minimizes buffer copies while adding or removing headers, and diff --git a/CORE/BAP/src/bapRsnAsfPacket.h b/CORE/BAP/src/bapRsnAsfPacket.h index 53da881a4467..c462cb12cd81 100644 --- a/CORE/BAP/src/bapRsnAsfPacket.h +++ b/CORE/BAP/src/bapRsnAsfPacket.h @@ -24,10 +24,7 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Woodside Networks, Inc proprietary. All rights reserved. - * File: $File: //depot/software/projects/feature_branches/nova_phase1/ap/apps/include/aniAsfPacket.h $ * Contains declarations for packet manipulation routines that make it * easy to create and parse multi-layered network frames. This module * minimizes buffer copies while adding or removing headers, and diff --git a/CORE/BAP/src/bapRsnErrors.h b/CORE/BAP/src/bapRsnErrors.h index 4a4bfdbdeb28..550e70924a8e 100644 --- a/CORE/BAP/src/bapRsnErrors.h +++ b/CORE/BAP/src/bapRsnErrors.h @@ -24,11 +24,7 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Woodside Networks, Inc proprietary. All rights reserved. - * File: $File: //depot/software/projects/feature_branches/gen5_phase1/os/linux/classic/ap/apps/include/aniErrors.h $ - * * Contains definitions of error codes that are globally visible * across WNI applications. There are two kinds of error codes: * generic error codes and module specific error codes. Module specific diff --git a/CORE/BAP/src/bapRsnSsmAesKeyWrap.c b/CORE/BAP/src/bapRsnSsmAesKeyWrap.c index 79819019fdfa..0e8858cb4fc1 100644 --- a/CORE/BAP/src/bapRsnSsmAesKeyWrap.c +++ b/CORE/BAP/src/bapRsnSsmAesKeyWrap.c @@ -24,11 +24,7 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Airgo Networks, Inc proprietary. All rights reserved. - * $File: //depot/software/projects/feature_branches/gen5_phase1/os/linux/classic/ap/apps/ssm/lib/aniSsmAesKeyWrap.c $ - * * Contains definitions for the AES Key Wrap algorithm from RFC 3394. * * Author: Mayank D. Upadhyay diff --git a/CORE/BAP/src/bapRsnSsmAesKeyWrap.h b/CORE/BAP/src/bapRsnSsmAesKeyWrap.h index f2b5b4715544..7151ce63e392 100644 --- a/CORE/BAP/src/bapRsnSsmAesKeyWrap.h +++ b/CORE/BAP/src/bapRsnSsmAesKeyWrap.h @@ -24,11 +24,7 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Qualcomm Technologies, Inc., proprietary. All rights reserved. - * Ref File: //depot/software/projects/feature_branches/gen5_phase1/os/linux/classic/ap/apps/ssm/include/aniSsmAesKeyWrap.h $ - * * Contains SSM-private declarations related to the AES key WRAP * algorithm described in RFC 3394. * diff --git a/CORE/BAP/src/bapRsnSsmEapol.c b/CORE/BAP/src/bapRsnSsmEapol.c index 136573a5204f..ea39c7bd4cd3 100644 --- a/CORE/BAP/src/bapRsnSsmEapol.c +++ b/CORE/BAP/src/bapRsnSsmEapol.c @@ -24,11 +24,7 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Woodside Networks, Inc proprietary. All rights reserved. - * File: $Header: //depot/software/projects/feature_branches/gen5_phase1/os/linux/classic/ap/apps/ssm/lib/aniSsmEapol.c#2 $ - * * Contains definitions of various utilities for EAPoL frame * parsing and creation. * diff --git a/CORE/BAP/src/bapRsnSsmEapol.h b/CORE/BAP/src/bapRsnSsmEapol.h index 7043b7eeea2e..e576f43a961f 100644 --- a/CORE/BAP/src/bapRsnSsmEapol.h +++ b/CORE/BAP/src/bapRsnSsmEapol.h @@ -24,10 +24,7 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Woodside Networks, Inc proprietary. All rights reserved. - * File: $Header: //depot/software/projects/feature_branches/gen5_phase1/os/linux/classic/ap/apps/include/aniSsmEapol.h#1 $ * Contains declarations of various utilities for EAPoL frame * parsing and creation. * range. diff --git a/CORE/BAP/src/bapRsnSsmReplayCtr.c b/CORE/BAP/src/bapRsnSsmReplayCtr.c index 20ddf558b522..2cea86f57944 100644 --- a/CORE/BAP/src/bapRsnSsmReplayCtr.c +++ b/CORE/BAP/src/bapRsnSsmReplayCtr.c @@ -24,11 +24,7 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Woodside Networks, Inc proprietary. All rights reserved. - * File: $Header: //depot/software/projects/feature_branches/gen5_phase1/os/linux/classic/ap/apps/ssm/lib/aniSsmReplayCtr.c#2 $ - * * Contains definitions of various utilities for EAPoL frame * parsing and creation. * diff --git a/CORE/BAP/src/bapRsnSsmReplayCtr.h b/CORE/BAP/src/bapRsnSsmReplayCtr.h index d04ac3230e78..4635d2ed8b25 100644 --- a/CORE/BAP/src/bapRsnSsmReplayCtr.h +++ b/CORE/BAP/src/bapRsnSsmReplayCtr.h @@ -24,11 +24,7 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Woodside Networks, Inc proprietary. All rights reserved. - * $File: //depot/software/projects/feature_branches/gen5_phase1/os/linux/classic/ap/apps/include/aniSsmReplayCtr.h $ - * * Contains declarations of various utilities for SSM replay counter * module. * diff --git a/CORE/BAP/src/bapRsnSsmServices.h b/CORE/BAP/src/bapRsnSsmServices.h index a1bbd719afec..d14cadaaa53f 100644 --- a/CORE/BAP/src/bapRsnSsmServices.h +++ b/CORE/BAP/src/bapRsnSsmServices.h @@ -24,11 +24,7 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Airgo Networks, Inc proprietary. All rights reserved. - * $File: //depot/software/projects/feature_branches/gen5_phase1/os/linux/classic/ap/apps/include/aniSsmServices.h $ - * * Contains definitions of common types that the SSM exports to other * modules. * diff --git a/CORE/BAP/src/bapRsnTxRx.c b/CORE/BAP/src/bapRsnTxRx.c index 33f3eb4d9c2b..d56bae34f707 100644 --- a/CORE/BAP/src/bapRsnTxRx.c +++ b/CORE/BAP/src/bapRsnTxRx.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /**============================================================================= vos_list.c @@ -33,11 +32,6 @@ Description... - - Copyright 2008 (c) Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary. - ============================================================================== */ /* $HEADER$ */ #include "bapRsnTxRx.h" diff --git a/CORE/BAP/src/bapRsnTxRx.h b/CORE/BAP/src/bapRsnTxRx.h index 28c53af4145b..ea3d1061a227 100644 --- a/CORE/BAP/src/bapRsnTxRx.h +++ b/CORE/BAP/src/bapRsnTxRx.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined( __BAPRSN_TXRX_H ) #define __BAPRSN_TXRX_H @@ -36,11 +35,6 @@ Description... - - Copyright 2008 (c) Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary. - ==============================================================================*/ #include "vos_types.h" diff --git a/CORE/BAP/src/btampFsm.c b/CORE/BAP/src/btampFsm.c index 21b5e104d8dc..f6c29373dc70 100644 --- a/CORE/BAP/src/btampFsm.c +++ b/CORE/BAP/src/btampFsm.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /*=========================================================================== b t a m p F s m . C @@ -43,10 +42,6 @@ Are listed for each API below. - - Copyright (c) 2008 Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ===========================================================================*/ /*=========================================================================== diff --git a/CORE/BAP/src/btampFsm.h b/CORE/BAP/src/btampFsm.h index abd111fbe036..96fd5edb1c56 100644 --- a/CORE/BAP/src/btampFsm.h +++ b/CORE/BAP/src/btampFsm.h @@ -25,11 +25,6 @@ * to the Linux Foundation. */ -/* - * Copyright (c) 2008 Qualcomm Technologies, Inc. All Rights Reserved. - * Qualcomm Technologies Confidential and Proprietary - */ - /* This file is generated from btampFsm - do not edit manually*/ /* Generated on: Thu Oct 16 15:40:39 PDT 2008 / version 1.2 Beta 1 */ diff --git a/CORE/BAP/src/btampHCI.c b/CORE/BAP/src/btampHCI.c index 25817df282f2..be26ff8101b8 100644 --- a/CORE/BAP/src/btampHCI.c +++ b/CORE/BAP/src/btampHCI.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /** * \file btampHCI.c * diff --git a/CORE/BAP/src/fsmDefs.h b/CORE/BAP/src/fsmDefs.h index 20502e0680a4..4cf67f788462 100644 --- a/CORE/BAP/src/fsmDefs.h +++ b/CORE/BAP/src/fsmDefs.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - // Project/System dependant defines and typedefs #ifndef __FSMDEFS_H__ diff --git a/CORE/CLD_TXRX/HTT/htt.c b/CORE/CLD_TXRX/HTT/htt.c index aa5d6a861797..746adb38c395 100644 --- a/CORE/CLD_TXRX/HTT/htt.c +++ b/CORE/CLD_TXRX/HTT/htt.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /** * @file htt.c * @brief Provide functions to create+init and destroy a HTT instance. diff --git a/CORE/CLD_TXRX/HTT/htt.h b/CORE/CLD_TXRX/HTT/htt.h index 5383574263ce..68e9d172049b 100644 --- a/CORE/CLD_TXRX/HTT/htt.h +++ b/CORE/CLD_TXRX/HTT/htt.h @@ -24,6 +24,13 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ +//------------------------------------------------------------------------------ +// Copyright (c) 2011-2013 Atheros Corporation. All rights reserved. +// $ATH_LICENSE_HOSTSDK0_C$ +//------------------------------------------------------------------------------ +//============================================================================== +// Author(s): ="Atheros" +//============================================================================== /** * @file htt.h diff --git a/CORE/CLD_TXRX/HTT/htt_common.h b/CORE/CLD_TXRX/HTT/htt_common.h index 6a6c5ac94125..b93d0321f953 100644 --- a/CORE/CLD_TXRX/HTT/htt_common.h +++ b/CORE/CLD_TXRX/HTT/htt_common.h @@ -24,6 +24,13 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ +//------------------------------------------------------------------------------ +// Copyright (c) 2012-2013 Atheros Corporation. All rights reserved. +// $ATH_LICENSE_HOSTSDK0_C$ +//------------------------------------------------------------------------------ +//============================================================================== +// Author(s): ="Atheros" +//============================================================================== /** * @file htt_common.h diff --git a/CORE/CLD_TXRX/HTT/htt_fw_stats.c b/CORE/CLD_TXRX/HTT/htt_fw_stats.c index 447b2dcaf550..7dfbe3bd1b72 100644 --- a/CORE/CLD_TXRX/HTT/htt_fw_stats.c +++ b/CORE/CLD_TXRX/HTT/htt_fw_stats.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /** * @file htt_fw_stats.c * @brief Provide functions to process FW status retrieved from FW. diff --git a/CORE/CLD_TXRX/HTT/htt_h2t.c b/CORE/CLD_TXRX/HTT/htt_h2t.c index 88de52b3ba20..27701fbccd95 100644 --- a/CORE/CLD_TXRX/HTT/htt_h2t.c +++ b/CORE/CLD_TXRX/HTT/htt_h2t.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /** * @file htt_h2t.c * @brief Provide functions to send host->target HTT messages. diff --git a/CORE/CLD_TXRX/HTT/htt_internal.h b/CORE/CLD_TXRX/HTT/htt_internal.h index 992f74043d21..fe94d99153f3 100644 --- a/CORE/CLD_TXRX/HTT/htt_internal.h +++ b/CORE/CLD_TXRX/HTT/htt_internal.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef _HTT_INTERNAL__H_ #define _HTT_INTERNAL__H_ diff --git a/CORE/CLD_TXRX/HTT/htt_isoc.h b/CORE/CLD_TXRX/HTT/htt_isoc.h index 9f851e6781aa..5d4a0b7faa1d 100644 --- a/CORE/CLD_TXRX/HTT/htt_isoc.h +++ b/CORE/CLD_TXRX/HTT/htt_isoc.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /** * @file htt_isoc.h * diff --git a/CORE/CLD_TXRX/HTT/htt_rx.c b/CORE/CLD_TXRX/HTT/htt_rx.c index dd22e16d1f34..11783cfcfad0 100644 --- a/CORE/CLD_TXRX/HTT/htt_rx.c +++ b/CORE/CLD_TXRX/HTT/htt_rx.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /** * @file htt_rx.c * @brief Implement receive aspects of HTT. diff --git a/CORE/CLD_TXRX/HTT/htt_t2h.c b/CORE/CLD_TXRX/HTT/htt_t2h.c index 3976185de333..9d445bea6ae0 100644 --- a/CORE/CLD_TXRX/HTT/htt_t2h.c +++ b/CORE/CLD_TXRX/HTT/htt_t2h.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /** * @file htt_t2h.c * @brief Provide functions to process target->host HTT messages. diff --git a/CORE/CLD_TXRX/HTT/htt_tx.c b/CORE/CLD_TXRX/HTT/htt_tx.c index 0438ae1c4d6d..c3b350e27924 100644 --- a/CORE/CLD_TXRX/HTT/htt_tx.c +++ b/CORE/CLD_TXRX/HTT/htt_tx.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /** * @file htt_tx.c * @brief Implement transmit aspects of HTT. diff --git a/CORE/CLD_TXRX/HTT/htt_types.h b/CORE/CLD_TXRX/HTT/htt_types.h index cb9f13510d99..fab4ea9d65e6 100644 --- a/CORE/CLD_TXRX/HTT/htt_types.h +++ b/CORE/CLD_TXRX/HTT/htt_types.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef _HTT_TYPES__H_ #define _HTT_TYPES__H_ diff --git a/CORE/CLD_TXRX/TLSHIM/tl_shim.c b/CORE/CLD_TXRX/TLSHIM/tl_shim.c index 55ccd5f34dfa..74b592d86dba 100644 --- a/CORE/CLD_TXRX/TLSHIM/tl_shim.c +++ b/CORE/CLD_TXRX/TLSHIM/tl_shim.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #include "vos_sched.h" #include "wlan_qct_tl.h" #include "wdi_in.h" diff --git a/CORE/CLD_TXRX/TLSHIM/tl_shim.h b/CORE/CLD_TXRX/TLSHIM/tl_shim.h index e896e5340dc9..3db06e786fd8 100644 --- a/CORE/CLD_TXRX/TLSHIM/tl_shim.h +++ b/CORE/CLD_TXRX/TLSHIM/tl_shim.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef TXRX_TL_SHIM_H #define TXRX_TL_SHIM_H diff --git a/CORE/CLD_TXRX/TXRX/ol_cfg.c b/CORE/CLD_TXRX/TXRX/ol_cfg.c index ea76ed05c252..5599f37da7c7 100644 --- a/CORE/CLD_TXRX/TXRX/ol_cfg.c +++ b/CORE/CLD_TXRX/TXRX/ol_cfg.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #include #include diff --git a/CORE/CLD_TXRX/TXRX/ol_ctrl_txrx_api.h b/CORE/CLD_TXRX/TXRX/ol_ctrl_txrx_api.h index c530cfba8b42..5fa0ded29853 100644 --- a/CORE/CLD_TXRX/TXRX/ol_ctrl_txrx_api.h +++ b/CORE/CLD_TXRX/TXRX/ol_ctrl_txrx_api.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /** * @file ol_ctrl_txrx_api.h * @brief Define the host control API functions called by the host data SW. diff --git a/CORE/CLD_TXRX/TXRX/ol_osif_txrx_api.h b/CORE/CLD_TXRX/TXRX/ol_osif_txrx_api.h index 175b4cd435c0..ca8d6cb66f98 100644 --- a/CORE/CLD_TXRX/TXRX/ol_osif_txrx_api.h +++ b/CORE/CLD_TXRX/TXRX/ol_osif_txrx_api.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /** * @file ol_osif_txrx_api.h * @brief Define the OS specific API functions called by txrx SW. diff --git a/CORE/CLD_TXRX/TXRX/ol_rx.c b/CORE/CLD_TXRX/TXRX/ol_rx.c index 300e6d8a151e..b3b3f2add740 100644 --- a/CORE/CLD_TXRX/TXRX/ol_rx.c +++ b/CORE/CLD_TXRX/TXRX/ol_rx.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #include /* adf_nbuf_t, etc. */ #include /* adf_os_cpu_to_le64 */ #include /* a_bool_t */ diff --git a/CORE/CLD_TXRX/TXRX/ol_rx.h b/CORE/CLD_TXRX/TXRX/ol_rx.h index 4ab959bbad94..df1d73c6e3a2 100644 --- a/CORE/CLD_TXRX/TXRX/ol_rx.h +++ b/CORE/CLD_TXRX/TXRX/ol_rx.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef _OL_RX__H_ #define _OL_RX__H_ diff --git a/CORE/CLD_TXRX/TXRX/ol_rx_defrag.c b/CORE/CLD_TXRX/TXRX/ol_rx_defrag.c index 74621c03e025..2fc976e8d030 100644 --- a/CORE/CLD_TXRX/TXRX/ol_rx_defrag.c +++ b/CORE/CLD_TXRX/TXRX/ol_rx_defrag.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /*- * Copyright (c) 2002-2007 Sam Leffler, Errno Consulting * All rights reserved. diff --git a/CORE/CLD_TXRX/TXRX/ol_rx_defrag.h b/CORE/CLD_TXRX/TXRX/ol_rx_defrag.h index 3648d53f97ad..3c78f0234f62 100644 --- a/CORE/CLD_TXRX/TXRX/ol_rx_defrag.h +++ b/CORE/CLD_TXRX/TXRX/ol_rx_defrag.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef _OL_RX_DEFRAG_H_ #define _OL_RX_DEFRAG_H_ diff --git a/CORE/CLD_TXRX/TXRX/ol_rx_fwd.c b/CORE/CLD_TXRX/TXRX/ol_rx_fwd.c index abbe68ded0ce..2a4bf6b692e0 100644 --- a/CORE/CLD_TXRX/TXRX/ol_rx_fwd.c +++ b/CORE/CLD_TXRX/TXRX/ol_rx_fwd.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* standard header files */ #include /* adf_nbuf_map */ #include /* adf_os_mem_cmp */ diff --git a/CORE/CLD_TXRX/TXRX/ol_rx_fwd.h b/CORE/CLD_TXRX/TXRX/ol_rx_fwd.h index a3d9823b8262..537fee5337f9 100644 --- a/CORE/CLD_TXRX/TXRX/ol_rx_fwd.h +++ b/CORE/CLD_TXRX/TXRX/ol_rx_fwd.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef _OL_RX_FWD_H_ #define _OL_RX_FWD_H_ diff --git a/CORE/CLD_TXRX/TXRX/ol_rx_pn.c b/CORE/CLD_TXRX/TXRX/ol_rx_pn.c index 2b6e5f6d7afb..1e46ff6d4270 100644 --- a/CORE/CLD_TXRX/TXRX/ol_rx_pn.c +++ b/CORE/CLD_TXRX/TXRX/ol_rx_pn.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #include /* adf_nbuf_t */ #include /* htt_rx_pn_t, etc. */ diff --git a/CORE/CLD_TXRX/TXRX/ol_rx_pn.h b/CORE/CLD_TXRX/TXRX/ol_rx_pn.h index 81997acfce9a..61bce92691cf 100644 --- a/CORE/CLD_TXRX/TXRX/ol_rx_pn.h +++ b/CORE/CLD_TXRX/TXRX/ol_rx_pn.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef _OL_RX_PN_H_ #define _OL_RX_PN_H_ diff --git a/CORE/CLD_TXRX/TXRX/ol_rx_reorder.c b/CORE/CLD_TXRX/TXRX/ol_rx_reorder.c index be68d56a1843..7db868671f78 100644 --- a/CORE/CLD_TXRX/TXRX/ol_rx_reorder.c +++ b/CORE/CLD_TXRX/TXRX/ol_rx_reorder.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /*=== header file includes ===*/ /* generic utilities */ #include /* adf_nbuf_t, etc. */ diff --git a/CORE/CLD_TXRX/TXRX/ol_rx_reorder.h b/CORE/CLD_TXRX/TXRX/ol_rx_reorder.h index 3abcd3a96412..2063dec5eb73 100644 --- a/CORE/CLD_TXRX/TXRX/ol_rx_reorder.h +++ b/CORE/CLD_TXRX/TXRX/ol_rx_reorder.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef _OL_RX_REORDER__H_ #define _OL_RX_REORDER__H_ diff --git a/CORE/CLD_TXRX/TXRX/ol_rx_reorder_timeout.c b/CORE/CLD_TXRX/TXRX/ol_rx_reorder_timeout.c index e978db992528..4644132c9118 100644 --- a/CORE/CLD_TXRX/TXRX/ol_rx_reorder_timeout.c +++ b/CORE/CLD_TXRX/TXRX/ol_rx_reorder_timeout.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /*=== header file includes ===*/ /* generic utilities */ #include /* adf_nbuf_t, etc. */ diff --git a/CORE/CLD_TXRX/TXRX/ol_rx_reorder_timeout.h b/CORE/CLD_TXRX/TXRX/ol_rx_reorder_timeout.h index 237cdb58e673..19e1fcb28cdf 100644 --- a/CORE/CLD_TXRX/TXRX/ol_rx_reorder_timeout.h +++ b/CORE/CLD_TXRX/TXRX/ol_rx_reorder_timeout.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef _OL_RX_REORDER_TIMEOUT__H_ #define _OL_RX_REORDER_TIMEOUT__H_ diff --git a/CORE/CLD_TXRX/TXRX/ol_tx.c b/CORE/CLD_TXRX/TXRX/ol_tx.c index ab7551db20b7..4290b76fd15a 100644 --- a/CORE/CLD_TXRX/TXRX/ol_tx.c +++ b/CORE/CLD_TXRX/TXRX/ol_tx.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* OS abstraction libraries */ #include /* adf_nbuf_t, etc. */ #include /* adf_os_atomic_read, etc. */ diff --git a/CORE/CLD_TXRX/TXRX/ol_tx.h b/CORE/CLD_TXRX/TXRX/ol_tx.h index b9830335af0b..2d4d9e3d2fb4 100644 --- a/CORE/CLD_TXRX/TXRX/ol_tx.h +++ b/CORE/CLD_TXRX/TXRX/ol_tx.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /** * @file ol_tx.h * @brief Internal definitions for the high-level tx module. diff --git a/CORE/CLD_TXRX/TXRX/ol_tx_classify.c b/CORE/CLD_TXRX/TXRX/ol_tx_classify.c index 56b691c9fb8c..477f662b67ab 100644 --- a/CORE/CLD_TXRX/TXRX/ol_tx_classify.c +++ b/CORE/CLD_TXRX/TXRX/ol_tx_classify.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #include /* adf_nbuf_t, etc. */ #include /* HTT_TX_EXT_TID_MGMT */ #include /* htt_tx_desc_tid */ diff --git a/CORE/CLD_TXRX/TXRX/ol_tx_classify.h b/CORE/CLD_TXRX/TXRX/ol_tx_classify.h index 958c5c5f33d6..c9feb507683c 100644 --- a/CORE/CLD_TXRX/TXRX/ol_tx_classify.h +++ b/CORE/CLD_TXRX/TXRX/ol_tx_classify.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /** * @file ol_tx_classify.h * @brief API definitions for the tx classify module within the data SW. diff --git a/CORE/CLD_TXRX/TXRX/ol_tx_desc.c b/CORE/CLD_TXRX/TXRX/ol_tx_desc.c index cb817820f7b1..f2984506a781 100644 --- a/CORE/CLD_TXRX/TXRX/ol_tx_desc.c +++ b/CORE/CLD_TXRX/TXRX/ol_tx_desc.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #include /* ADF_NBUF_EXEMPT_NO_EXEMPTION, etc. */ #include /* adf_nbuf_t, etc. */ #include /* adf_os_assert */ diff --git a/CORE/CLD_TXRX/TXRX/ol_tx_desc.h b/CORE/CLD_TXRX/TXRX/ol_tx_desc.h index 3d97bae9d906..c7c511a65259 100644 --- a/CORE/CLD_TXRX/TXRX/ol_tx_desc.h +++ b/CORE/CLD_TXRX/TXRX/ol_tx_desc.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /** * @file ol_tx_desc.h * @brief API definitions for the tx descriptor module within the data SW. diff --git a/CORE/CLD_TXRX/TXRX/ol_tx_queue.c b/CORE/CLD_TXRX/TXRX/ol_tx_queue.c index 661645af6e1a..e4a5da97ec1e 100644 --- a/CORE/CLD_TXRX/TXRX/ol_tx_queue.c +++ b/CORE/CLD_TXRX/TXRX/ol_tx_queue.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #include /* adf_nbuf_t, etc. */ #include /* adf_os_atomic_add, etc. */ #include /* ol_cfg_addba_retry */ diff --git a/CORE/CLD_TXRX/TXRX/ol_tx_queue.h b/CORE/CLD_TXRX/TXRX/ol_tx_queue.h index 9b4de878839a..ca94bc03be56 100644 --- a/CORE/CLD_TXRX/TXRX/ol_tx_queue.h +++ b/CORE/CLD_TXRX/TXRX/ol_tx_queue.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /** * @file ol_tx_queue.h * @brief API definitions for the tx frame queue module within the data SW. diff --git a/CORE/CLD_TXRX/TXRX/ol_tx_sched.c b/CORE/CLD_TXRX/TXRX/ol_tx_sched.c index 97c57faa9bf2..94e56368fafc 100644 --- a/CORE/CLD_TXRX/TXRX/ol_tx_sched.c +++ b/CORE/CLD_TXRX/TXRX/ol_tx_sched.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #include /* adf_nbuf_t, etc. */ #include /* HTT_TX_EXT_TID_MGMT */ #include /* htt_tx_desc_tid */ diff --git a/CORE/CLD_TXRX/TXRX/ol_tx_sched.h b/CORE/CLD_TXRX/TXRX/ol_tx_sched.h index 3a762353488a..660a19afd9b5 100644 --- a/CORE/CLD_TXRX/TXRX/ol_tx_sched.h +++ b/CORE/CLD_TXRX/TXRX/ol_tx_sched.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /** * @file ol_tx_sched.h * @brief API definitions for the tx scheduler module within the data SW. diff --git a/CORE/CLD_TXRX/TXRX/ol_tx_send.c b/CORE/CLD_TXRX/TXRX/ol_tx_send.c index 29c4f1cec3c0..e2d427f2f288 100644 --- a/CORE/CLD_TXRX/TXRX/ol_tx_send.c +++ b/CORE/CLD_TXRX/TXRX/ol_tx_send.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #include /* adf_os_atomic_inc, etc. */ #include /* adf_os_spinlock */ #include /* adf_os_ticks, etc. */ diff --git a/CORE/CLD_TXRX/TXRX/ol_tx_send.h b/CORE/CLD_TXRX/TXRX/ol_tx_send.h index e3df47214ede..e556e28c0b36 100644 --- a/CORE/CLD_TXRX/TXRX/ol_tx_send.h +++ b/CORE/CLD_TXRX/TXRX/ol_tx_send.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /** * @file ol_tx_send.h * @brief API definitions for the tx sendriptor module within the data SW. diff --git a/CORE/CLD_TXRX/TXRX/ol_txrx.c b/CORE/CLD_TXRX/TXRX/ol_txrx.c index c38f6576e724..182312ff4662 100644 --- a/CORE/CLD_TXRX/TXRX/ol_txrx.c +++ b/CORE/CLD_TXRX/TXRX/ol_txrx.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /*=== includes ===*/ /* header files for OS primitives */ #include /* u_int32_t, etc. */ diff --git a/CORE/CLD_TXRX/TXRX/ol_txrx.h b/CORE/CLD_TXRX/TXRX/ol_txrx.h index 72e8c53b7ea1..9c82c0e2b2f0 100644 --- a/CORE/CLD_TXRX/TXRX/ol_txrx.h +++ b/CORE/CLD_TXRX/TXRX/ol_txrx.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef _OL_TXRX__H_ #define _OL_TXRX__H_ diff --git a/CORE/CLD_TXRX/TXRX/ol_txrx_encap.c b/CORE/CLD_TXRX/TXRX/ol_txrx_encap.c index 0708d59028e6..98c4bd9501a8 100644 --- a/CORE/CLD_TXRX/TXRX/ol_txrx_encap.c +++ b/CORE/CLD_TXRX/TXRX/ol_txrx_encap.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /** * @file ol_txrx_encap.c * @brief Provide functions to encap/decap on txrx frames. diff --git a/CORE/CLD_TXRX/TXRX/ol_txrx_encap.h b/CORE/CLD_TXRX/TXRX/ol_txrx_encap.h index 8ab0e99410d9..a16b2c26d004 100644 --- a/CORE/CLD_TXRX/TXRX/ol_txrx_encap.h +++ b/CORE/CLD_TXRX/TXRX/ol_txrx_encap.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /** * @file ol_txrx_encap.h * @brief definitions for txrx encap/decap function and struct diff --git a/CORE/CLD_TXRX/TXRX/ol_txrx_event.c b/CORE/CLD_TXRX/TXRX/ol_txrx_event.c index 0a728834fcf3..0e8acebe35f4 100644 --- a/CORE/CLD_TXRX/TXRX/ol_txrx_event.c +++ b/CORE/CLD_TXRX/TXRX/ol_txrx_event.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #include "ol_txrx_types.h" #ifdef WDI_EVENT_ENABLE diff --git a/CORE/CLD_TXRX/TXRX/ol_txrx_internal.h b/CORE/CLD_TXRX/TXRX/ol_txrx_internal.h index 2c63d49c6db8..c56ec2e8d3ef 100644 --- a/CORE/CLD_TXRX/TXRX/ol_txrx_internal.h +++ b/CORE/CLD_TXRX/TXRX/ol_txrx_internal.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef _OL_TXRX_INTERNAL__H_ #define _OL_TXRX_INTERNAL__H_ diff --git a/CORE/CLD_TXRX/TXRX/ol_txrx_peer_find.c b/CORE/CLD_TXRX/TXRX/ol_txrx_peer_find.c index fe9782cf46e9..129dabc0d531 100644 --- a/CORE/CLD_TXRX/TXRX/ol_txrx_peer_find.c +++ b/CORE/CLD_TXRX/TXRX/ol_txrx_peer_find.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /*=== includes ===*/ /* header files for OS primitives */ #include /* u_int32_t, etc. */ diff --git a/CORE/CLD_TXRX/TXRX/ol_txrx_peer_find.h b/CORE/CLD_TXRX/TXRX/ol_txrx_peer_find.h index 2c771d940495..b4eddfb6eabd 100644 --- a/CORE/CLD_TXRX/TXRX/ol_txrx_peer_find.h +++ b/CORE/CLD_TXRX/TXRX/ol_txrx_peer_find.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /** * @file ol_txrx_peer_find.h * @brief Define the API for the rx peer lookup datapath module. diff --git a/CORE/CLD_TXRX/TXRX/ol_txrx_types.h b/CORE/CLD_TXRX/TXRX/ol_txrx_types.h index 9da0bd1533b2..23f40c008aa9 100644 --- a/CORE/CLD_TXRX/TXRX/ol_txrx_types.h +++ b/CORE/CLD_TXRX/TXRX/ol_txrx_types.h @@ -24,6 +24,21 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ +/* + * Copyright (c) 2011-2013 Qualcomm Atheros, Inc. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ /** * @file ol_txrx_types.h diff --git a/CORE/CLD_TXRX/TXRX/txrx_api.c b/CORE/CLD_TXRX/TXRX/txrx_api.c index c75e8ddadfe5..dbb32fa79588 100644 --- a/CORE/CLD_TXRX/TXRX/txrx_api.c +++ b/CORE/CLD_TXRX/TXRX/txrx_api.c @@ -24,8 +24,23 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* + * Copyright (c) 2013 Qualcomm Atheros, Inc. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + + /* * This file has the implementation of TXRX api for HDD<->TXRX and * SME/PE<->TXRX. */ diff --git a/CORE/DXE/inc/wlan_qct_dxe.h b/CORE/DXE/inc/wlan_qct_dxe.h index a928b7182989..db1c55efd0be 100644 --- a/CORE/DXE/inc/wlan_qct_dxe.h +++ b/CORE/DXE/inc/wlan_qct_dxe.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef WLAN_QCT_DXE_H #define WLAN_QCT_DXE_H @@ -35,8 +34,6 @@ @brief This file contains the external API exposed by the wlan data transfer abstraction layer module. - Copyright (c) 2008 Qualcomm Technologies, Inc. All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ========================================================================*/ /*=========================================================================== diff --git a/CORE/DXE/src/wlan_qct_dxe.c b/CORE/DXE/src/wlan_qct_dxe.c index 78f05eb9473b..d0ead69c2d30 100644 --- a/CORE/DXE/src/wlan_qct_dxe.c +++ b/CORE/DXE/src/wlan_qct_dxe.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /**========================================================================= @file wlan_qct_dxe.c @@ -32,9 +31,6 @@ @brief This file contains the external API exposed by the wlan data transfer abstraction layer module. - Copyright (c) 2010-2011 Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ========================================================================*/ /*=========================================================================== diff --git a/CORE/DXE/src/wlan_qct_dxe_cfg_i.c b/CORE/DXE/src/wlan_qct_dxe_cfg_i.c index 7aeff9be3c4e..9cf4a149ac60 100644 --- a/CORE/DXE/src/wlan_qct_dxe_cfg_i.c +++ b/CORE/DXE/src/wlan_qct_dxe_cfg_i.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /**========================================================================= @file wlan_qct_dxe_cfg_i.c @@ -32,9 +31,6 @@ @brief This file contains the external API exposed by the wlan data transfer abstraction layer module. - Copyright (c) 2011 Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ========================================================================*/ /*=========================================================================== diff --git a/CORE/DXE/src/wlan_qct_dxe_i.h b/CORE/DXE/src/wlan_qct_dxe_i.h index 48ff3b1e818c..92a1f11a2093 100644 --- a/CORE/DXE/src/wlan_qct_dxe_i.h +++ b/CORE/DXE/src/wlan_qct_dxe_i.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef WLAN_QCT_DXE_I_H #define WLAN_QCT_DXE_I_H @@ -35,9 +34,6 @@ @brief This file contains the external API exposed by the wlan data transfer abstraction layer module. - Copyright (c) 2011 Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ========================================================================*/ /*=========================================================================== diff --git a/CORE/HDD/inc/bap_hdd_main.h b/CORE/HDD/inc/bap_hdd_main.h index 14d3e9bf8cec..cf251faab1df 100644 --- a/CORE/HDD/inc/bap_hdd_main.h +++ b/CORE/HDD/inc/bap_hdd_main.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined( BAP_HDD_MAIN_H ) #define BAP_HDD_MAIN_H @@ -33,9 +32,6 @@ \file BAP_HDD_MAIN_H.h \brief Linux HDD Adapter Type - Copyright 2008 (c) Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary. ==========================================================================*/ diff --git a/CORE/HDD/inc/bap_hdd_misc.h b/CORE/HDD/inc/bap_hdd_misc.h index 8b9a1ba1bb90..2a2c43a9662b 100644 --- a/CORE/HDD/inc/bap_hdd_misc.h +++ b/CORE/HDD/inc/bap_hdd_misc.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined( BAP_HDD_MISC_H ) #define BAP_HDD_MISC_H @@ -33,9 +32,6 @@ \file BAP_HDD_MISC.h \brief Linux HDD Adapter Type - Copyright 2008 (c) Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary. ==========================================================================*/ diff --git a/CORE/HDD/inc/qc_sap_ioctl.h b/CORE/HDD/inc/qc_sap_ioctl.h index f07a34b3423b..6869975f270f 100644 --- a/CORE/HDD/inc/qc_sap_ioctl.h +++ b/CORE/HDD/inc/qc_sap_ioctl.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef _QC_SAP_IOCTL_H_ #define _QC_SAP_IOCTL_H_ diff --git a/CORE/HDD/inc/wlan_hdd_assoc.h b/CORE/HDD/inc/wlan_hdd_assoc.h index 78ba41c8985d..0abaa40c3fcd 100644 --- a/CORE/HDD/inc/wlan_hdd_assoc.h +++ b/CORE/HDD/inc/wlan_hdd_assoc.h @@ -24,16 +24,20 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined( HDD_CONNECTION_H__ ) #define HDD_CONNECTION_H__ #include #define HDD_MAX_NUM_IBSS_STA ( 32 ) #ifdef FEATURE_WLAN_TDLS #define HDD_MAX_NUM_TDLS_STA ( 8 ) +#ifdef QCA_WIFI_2_0 +#define TDLS_STA_INDEX_VALID(staId) \ + (((staId) >= 1) && ((staId) < 0xFF)) +#else #define TDLS_STA_INDEX_VALID(staId) \ (((staId) >= 4) && ((staId) < 0xFF)) #endif +#endif #define TKIP_COUNTER_MEASURE_STARTED 1 #define TKIP_COUNTER_MEASURE_STOPED 0 /* Timeout (in ms) for Link to Up before Registering Station */ @@ -47,11 +51,6 @@ #define IBSS_BROADCAST_STAID 1 #endif -#ifdef FEATURE_CESIUM_PROPRIETARY -/* Timeout in ms for peer info request commpletion */ -#define IBSS_PEER_INFO_REQ_TIMOEUT 1000 -#endif - typedef enum { /** Not associated in Infra or participating in an IBSS / Ad-hoc network.*/ diff --git a/CORE/HDD/inc/wlan_hdd_cfg.h b/CORE/HDD/inc/wlan_hdd_cfg.h index b935056e4967..624149ddaa88 100644 --- a/CORE/HDD/inc/wlan_hdd_cfg.h +++ b/CORE/HDD/inc/wlan_hdd_cfg.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined( HDD_CONFIG_H__ ) #define HDD_CONFIG_H__ @@ -34,10 +33,6 @@ \brief Android WLAN Adapter Configuration functions - Copyright 2008 (c) Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary. - ==========================================================================*/ /* $HEADER$ */ @@ -1761,6 +1756,13 @@ typedef enum #define CFG_TDLS_RSSI_TEARDOWN_THRESHOLD_MAX ( 0 ) #define CFG_TDLS_RSSI_TEARDOWN_THRESHOLD_DEFAULT ( -75 ) +#ifdef QCA_WIFI_2_0 +#define CFG_TDLS_RSSI_DELTA "gTDLSRSSIDelta" +#define CFG_TDLS_RSSI_DELTA_MIN ( -30 ) +#define CFG_TDLS_RSSI_DELTA_MAX ( 0 ) +#define CFG_TDLS_RSSI_DELTA_DEFAULT ( -20 ) +#endif + #define CFG_TDLS_QOS_WMM_UAPSD_MASK_NAME "gTDLSUapsdMask" // ACs to setup U-APSD for TDLS Sta #define CFG_TDLS_QOS_WMM_UAPSD_MASK_MIN (0) #define CFG_TDLS_QOS_WMM_UAPSD_MASK_MAX (15) @@ -1769,7 +1771,12 @@ typedef enum #define CFG_TDLS_BUFFER_STA_SUPPORT_ENABLE "gEnableTDLSBufferSta" #define CFG_TDLS_BUFFER_STA_SUPPORT_ENABLE_MIN (0) #define CFG_TDLS_BUFFER_STA_SUPPORT_ENABLE_MAX (1) +/* Buffer STA is not enabled in CLD 2.0 yet */ +#ifdef QCA_WIFI_2_0 +#define CFG_TDLS_BUFFER_STA_SUPPORT_ENABLE_DEFAULT (0) +#else #define CFG_TDLS_BUFFER_STA_SUPPORT_ENABLE_DEFAULT (1) +#endif #define CFG_TDLS_PUAPSD_INACTIVITY_TIME "gTDLSPuapsdInactivityTime" #define CFG_TDLS_PUAPSD_INACTIVITY_TIME_MIN (0) @@ -2061,6 +2068,11 @@ This feature requires the dependent cfg.ini "gRoamPrefer5GHz" set to 1 */ #define CFG_COALESING_IN_IBSS_MAX (1) #define CFG_COALESING_IN_IBSS_DEFAULT (0) //disabled +#define CFG_SAP_MAX_NO_PEERS "gSoftApMaxPeers" +#define CFG_SAP_MAX_NO_PEERS_MIN (1) +#define CFG_SAP_MAX_NO_PEERS_MAX (32) +#define CFG_SAP_MAX_NO_PEERS_DEFAULT (14) + /*--------------------------------------------------------------------------- Type declarations -------------------------------------------------------------------------*/ @@ -2426,6 +2438,9 @@ typedef struct v_U32_t fTDLSRSSIHysteresis; v_S31_t fTDLSRSSITriggerThreshold; v_S31_t fTDLSRSSITeardownThreshold; +#ifdef QCA_WIFI_2_0 + v_S31_t fTDLSRSSIDelta; +#endif v_U32_t fTDLSUapsdMask; // what ACs to setup U-APSD for TDLS v_U32_t fEnableTDLSBufferSta; v_U32_t fTDLSPuapsdInactivityTimer; @@ -2491,6 +2506,7 @@ typedef struct #endif v_U8_t maxWoWFilters; v_U8_t wowEnable; + v_U8_t maxNumberOfPeers; } hdd_config_t; /*--------------------------------------------------------------------------- Function declarations and documenation diff --git a/CORE/HDD/inc/wlan_hdd_cfg80211.h b/CORE/HDD/inc/wlan_hdd_cfg80211.h index 09b5557099c5..2b62a8ee0475 100644 --- a/CORE/HDD/inc/wlan_hdd_cfg80211.h +++ b/CORE/HDD/inc/wlan_hdd_cfg80211.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined( HDD_CFG80211_H__ ) #define HDD_CFG80211_H__ @@ -35,10 +34,6 @@ \brief cfg80211 functions declarations - Copyright 2008 (c) Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary. - ==========================================================================*/ /* $HEADER$ */ diff --git a/CORE/HDD/inc/wlan_hdd_debugfs.h b/CORE/HDD/inc/wlan_hdd_debugfs.h index 557b76163270..a807d3272a4c 100644 --- a/CORE/HDD/inc/wlan_hdd_debugfs.h +++ b/CORE/HDD/inc/wlan_hdd_debugfs.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef _WLAN_HDD_DEBUGFS_H #define _WLAN_HDD_DEBUGFS_H diff --git a/CORE/HDD/inc/wlan_hdd_dev_pwr.h b/CORE/HDD/inc/wlan_hdd_dev_pwr.h index e963922fe0f2..07dbcddf2584 100644 --- a/CORE/HDD/inc/wlan_hdd_dev_pwr.h +++ b/CORE/HDD/inc/wlan_hdd_dev_pwr.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef __WLAN_HDD_DEV_PWR_H #define __WLAN_HDD_DEV_PWR_H diff --git a/CORE/HDD/inc/wlan_hdd_dp_utils.h b/CORE/HDD/inc/wlan_hdd_dp_utils.h index 73988da5931e..2897b4458fe1 100644 --- a/CORE/HDD/inc/wlan_hdd_dp_utils.h +++ b/CORE/HDD/inc/wlan_hdd_dp_utils.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined( __WLAN_HDD_DP_UTILS_H ) #define __WLAN_HDD_DP_UTILS_H @@ -34,10 +33,6 @@ \brief Utility functions for data path module Description... - Copyright 2008 (c) Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary. - ==============================================================================**/ /* $HEADER$ */ diff --git a/CORE/HDD/inc/wlan_hdd_ether.h b/CORE/HDD/inc/wlan_hdd_ether.h index 2bf4593990c8..3f9eeed12fd7 100644 --- a/CORE/HDD/inc/wlan_hdd_ether.h +++ b/CORE/HDD/inc/wlan_hdd_ether.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef _WLAN_HDD_ETHER_H #define _WLAN_HDD_ETHER_H /*============================================================================ @@ -32,9 +31,6 @@ This module describes Ethernet packet formats for processing by HDD. - Copyright (c) 2009 Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ============================================================================*/ /* $Header$ */ diff --git a/CORE/HDD/inc/wlan_hdd_ftm.h b/CORE/HDD/inc/wlan_hdd_ftm.h index 730b67c8ec81..79e65e9d2fa1 100644 --- a/CORE/HDD/inc/wlan_hdd_ftm.h +++ b/CORE/HDD/inc/wlan_hdd_ftm.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef WLAN_HDD_FTM_H #define WLAN_HDD_FTM_H #include "vos_status.h" diff --git a/CORE/HDD/inc/wlan_hdd_host_offload.h b/CORE/HDD/inc/wlan_hdd_host_offload.h index c44cb77df991..9f5b4c4f09a0 100644 --- a/CORE/HDD/inc/wlan_hdd_host_offload.h +++ b/CORE/HDD/inc/wlan_hdd_host_offload.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef __WLAN_HDD_HOST_OFFLOAD_H__ #define __WLAN_HDD_HOST_OFFLOAD_H__ @@ -34,9 +33,6 @@ \brief Android WLAN HDD Host Offload API - Copyright 2011 (c) Qualcomm Technologies, Inc. All Rights Reserved. - Qualcomm Technologies Proprietary and Confidential. - ==========================================================================*/ /* Offload types. */ diff --git a/CORE/HDD/inc/wlan_hdd_hostapd.h b/CORE/HDD/inc/wlan_hdd_hostapd.h index dccdfed1f51e..cae765a4ca35 100644 --- a/CORE/HDD/inc/wlan_hdd_hostapd.h +++ b/CORE/HDD/inc/wlan_hdd_hostapd.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined( WLAN_HDD_HOSTAPD_H ) #define WLAN_HDD_HOSTAPD_H @@ -33,9 +32,6 @@ \file WLAN_HDD_HOSTAPD_H.h \brief Linux HDD HOSTAPD include file - Copyright 2008-2013 (c) Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary. ==========================================================================*/ diff --git a/CORE/HDD/inc/wlan_hdd_includes.h b/CORE/HDD/inc/wlan_hdd_includes.h index 4c5874302d85..d46afb7fe9a2 100644 --- a/CORE/HDD/inc/wlan_hdd_includes.h +++ b/CORE/HDD/inc/wlan_hdd_includes.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined( HDD_INCLUDES_H__ ) #define HDD_INCLUDES_H__ @@ -34,10 +33,6 @@ \brief Internal includes for the Linux HDD - Copyright 2008 (c) Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary. - ==========================================================================*/ /* $HEADER$ */ diff --git a/CORE/HDD/inc/wlan_hdd_keep_alive.h b/CORE/HDD/inc/wlan_hdd_keep_alive.h index e7853e654181..72de83172b31 100644 --- a/CORE/HDD/inc/wlan_hdd_keep_alive.h +++ b/CORE/HDD/inc/wlan_hdd_keep_alive.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef __WLAN_HDD_KEEP_ALIVE_H__ #define __WLAN_HDD_KEEP_ALIVE_H__ @@ -34,9 +33,6 @@ \brief Android WLAN HDD Keep-Alive API - Copyright 2011 (c) Qualcomm Technologies, Inc. All Rights Reserved. - Qualcomm Technologies Proprietary and Confidential. - ==========================================================================*/ /* Packet Types. */ diff --git a/CORE/HDD/inc/wlan_hdd_main.h b/CORE/HDD/inc/wlan_hdd_main.h index 3f124b4d3d54..f946e56a8232 100644 --- a/CORE/HDD/inc/wlan_hdd_main.h +++ b/CORE/HDD/inc/wlan_hdd_main.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined( WLAN_HDD_MAIN_H ) #define WLAN_HDD_MAIN_H /**=========================================================================== @@ -32,9 +31,6 @@ \file WLAN_HDD_MAIN_H.h \brief Linux HDD Adapter Type - Copyright 2008 (c) Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary. ==========================================================================*/ @@ -568,32 +564,6 @@ typedef enum{ HDD_SSR_DISABLED, }e_hdd_ssr_required; -#ifdef FEATURE_CESIUM_PROPRIETARY -/*--------------------------------------------------------------------------- - hdd_ibss_peer_info_params_t ----------------------------------------------------------------------------*/ -typedef struct -{ - v_U8_t staIdx; //StaIdx - v_U32_t txRate; //Current Tx Rate - v_U32_t mcsIndex; //MCS Index - v_U32_t txRateFlags; //TxRate Flags - v_S7_t rssi; //RSSI -}hdd_ibss_peer_info_params_t; - -typedef struct -{ - /** Request status */ - v_U32_t status; - - /** Number of peers */ - v_U8_t numIBSSPeers; - - /** Peer Info parameters */ - hdd_ibss_peer_info_params_t ibssPeerList[HDD_MAX_NUM_IBSS_STA]; -}hdd_ibss_peer_info_t; -#endif - struct hdd_station_ctx { /** Handle to the Wireless Extension State */ @@ -621,10 +591,6 @@ struct hdd_station_ctx /*Save the wep/wpa-none keys*/ tCsrRoamSetKey ibss_enc_key; -#ifdef FEATURE_CESIUM_PROPRIETARY - hdd_ibss_peer_info_t ibss_peer_info; -#endif - v_BOOL_t hdd_ReassocScenario; }; @@ -755,6 +721,11 @@ typedef struct hdd_scaninfo_s hdd_scan_pending_option_e scan_pending_option; +#ifdef FEATURE_WLAN_SCAN_PNO + /* The PNO scan pending */ + v_BOOL_t mPnoScanPending; +#endif + }hdd_scaninfo_t; #define WLAN_HDD_MAX_MC_ADDR_LIST 10 @@ -891,10 +862,6 @@ struct hdd_adapter_s eHalStatus tdlsAddStaStatus; #endif -#ifdef FEATURE_CESIUM_PROPRIETARY - struct completion ibss_peer_info_comp; -#endif /* FEATURE_CESIUM_PROPRIETARY */ - /* Track whether the linkup handling is needed */ v_BOOL_t isLinkUpSvcNeeded; @@ -1251,6 +1218,11 @@ struct hdd_context_s v_U32_t target_type; v_U32_t target_fw_version; #endif + struct regulatory reg; +#ifdef FEATURE_WLAN_CH_AVOID + v_U16_t unsafe_channel_count; + v_U16_t unsafe_channel_list[NUM_20MHZ_RF_CHANNELS]; +#endif /* FEATURE_WLAN_CH_AVOID */ }; @@ -1337,10 +1309,6 @@ VOS_STATUS hdd_issta_p2p_clientconnected(hdd_context_t *pHddCtx); int wlan_hdd_setIPv6Filter(hdd_context_t *pHddCtx, tANI_U8 filterType, tANI_U8 sessionId); #endif -#ifdef FEATURE_CESIUM_PROPRIETARY -v_MACADDR_t* hdd_wlan_get_ibss_mac_addr_from_staid(hdd_adapter_t *pAdapter, v_U8_t staIdx); -#endif /* FEATURE_CESIUM_PROPRIETARY */ - #ifdef CONFIG_ENABLE_LINUX_REG void hdd_checkandupdate_phymode( hdd_context_t *pHddCtx); #endif diff --git a/CORE/HDD/inc/wlan_hdd_mib.h b/CORE/HDD/inc/wlan_hdd_mib.h index 140ca806327d..191418bdddd2 100644 --- a/CORE/HDD/inc/wlan_hdd_mib.h +++ b/CORE/HDD/inc/wlan_hdd_mib.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined( WLAN_HDD_MIB_h__ ) #define WLAN_HDD_MIB_h__ diff --git a/CORE/HDD/inc/wlan_hdd_oemdata.h b/CORE/HDD/inc/wlan_hdd_oemdata.h index b17d40eb59a9..4b7a46782dcd 100644 --- a/CORE/HDD/inc/wlan_hdd_oemdata.h +++ b/CORE/HDD/inc/wlan_hdd_oemdata.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifdef FEATURE_OEM_DATA_SUPPORT /**=========================================================================== @@ -33,10 +32,6 @@ \brief Internal includes for the oem data - Copyright 2008 (c) Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary. - ==========================================================================*/ @@ -45,7 +40,7 @@ #ifndef OEM_DATA_REQ_SIZE #ifdef QCA_WIFI_2_0 -#define OEM_DATA_REQ_SIZE 276 +#define OEM_DATA_REQ_SIZE 280 #else #define OEM_DATA_REQ_SIZE 134 #endif @@ -53,7 +48,7 @@ #ifndef OEM_DATA_RSP_SIZE #ifdef QCA_WIFI_2_0 -#define OEM_DATA_RSP_SIZE 1720 +#define OEM_DATA_RSP_SIZE 1724 #else #define OEM_DATA_RSP_SIZE 1968 #endif diff --git a/CORE/HDD/inc/wlan_hdd_p2p.h b/CORE/HDD/inc/wlan_hdd_p2p.h index 7af644ad9fb2..49fec6b78cbb 100644 --- a/CORE/HDD/inc/wlan_hdd_p2p.h +++ b/CORE/HDD/inc/wlan_hdd_p2p.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef __P2P_H #define __P2P_H /**=========================================================================== @@ -32,9 +31,6 @@ \file wlan_hdd_p2p.h \brief Linux HDD P2P include file - Copyright 2008 (c) Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary. ==========================================================================*/ #define ACTION_FRAME_TX_TIMEOUT 2000 diff --git a/CORE/HDD/inc/wlan_hdd_packet_filtering.h b/CORE/HDD/inc/wlan_hdd_packet_filtering.h index 98634e7e4359..b5aa116fca1a 100644 --- a/CORE/HDD/inc/wlan_hdd_packet_filtering.h +++ b/CORE/HDD/inc/wlan_hdd_packet_filtering.h @@ -24,15 +24,12 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /****************************************************************************** * * Name: wlan_hdd_packet_filtering.h * * Description: Packet Filter Definitions. * -* Copyright (c) 2011 Qualcomm Technologies, Inc. All Rights Reserved. -* Qualcomm Technologies Proprietary and Confidential. * ******************************************************************************/ diff --git a/CORE/HDD/inc/wlan_hdd_power.h b/CORE/HDD/inc/wlan_hdd_power.h index d0d81bed8ae1..ed74306de15a 100644 --- a/CORE/HDD/inc/wlan_hdd_power.h +++ b/CORE/HDD/inc/wlan_hdd_power.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef __WLAN_HDD_POWER_H #define __WLAN_HDD_POWER_H @@ -33,9 +32,6 @@ \file wlan_hdd_power.h \brief Linux HDD Power - Copyright 2008 (c) Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary. ==========================================================================*/ diff --git a/CORE/HDD/inc/wlan_hdd_softap_tx_rx.h b/CORE/HDD/inc/wlan_hdd_softap_tx_rx.h index ff436df4ca67..d3240b87e6ce 100644 --- a/CORE/HDD/inc/wlan_hdd_softap_tx_rx.h +++ b/CORE/HDD/inc/wlan_hdd_softap_tx_rx.h @@ -33,9 +33,6 @@ \file wlan_hdd_softap_tx_rx.h \brief Linux HDD SOFTAP Tx/RX APIs - Copyright 2008 (c) Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary. ==========================================================================*/ diff --git a/CORE/HDD/inc/wlan_hdd_tdls.h b/CORE/HDD/inc/wlan_hdd_tdls.h index ae46a619ee9d..2fa866eda447 100644 --- a/CORE/HDD/inc/wlan_hdd_tdls.h +++ b/CORE/HDD/inc/wlan_hdd_tdls.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef __HDD_TDSL_H #define __HDD_TDSL_H /**=========================================================================== @@ -79,6 +78,9 @@ typedef struct tANI_U32 rssi_hysteresis; tANI_S32 rssi_trigger_threshold; tANI_S32 rssi_teardown_threshold; +#ifdef QCA_WIFI_2_0 + tANI_S32 rssi_delta; +#endif } tdls_config_params_t; typedef struct @@ -141,7 +143,9 @@ typedef struct { #ifdef TDLS_USE_SEPARATE_DISCOVERY_TIMER vos_timer_t peerDiscoverTimer; #endif +#ifndef QCA_WIFI_2_0 vos_timer_t peerUpdateTimer; +#endif vos_timer_t peerDiscoveryTimeoutTimer; tdls_config_params_t threshold_config; tANI_S32 discovery_peer_cnt; @@ -169,7 +173,9 @@ typedef struct _hddTdlsPeer_t { tANI_U8 uapsdQueues; tANI_U8 maxSp; tANI_U8 isBufSta; +#ifndef QCA_WIFI_2_0 vos_timer_t peerIdleTimer; +#endif vos_timer_t initiatorWaitTimeoutTimer; } hddTdlsPeer_t; @@ -182,6 +188,19 @@ typedef struct { v_MACADDR_t peerMac; } tdlsConnInfo_t; +#ifdef QCA_WIFI_2_0 +typedef struct { + tANI_U32 vdev_id; + tANI_U32 tdls_state; + tANI_U32 notification_interval_ms; + tANI_U32 tx_discovery_threshold; + tANI_U32 tx_teardown_threshold; + tANI_S32 rssi_teardown_threshold; + tANI_S32 rssi_delta; + tANI_U32 tdls_options; +} tdlsInfo_t; +#endif + int wlan_hdd_tdls_init(hdd_adapter_t *pAdapter); void wlan_hdd_tdls_exit(hdd_adapter_t *pAdapter); @@ -281,5 +300,11 @@ void wlan_hdd_tdls_indicate_teardown(hdd_adapter_t *pAdapter, hddTdlsPeer_t *curr_peer, tANI_U16 reason); +#ifdef QCA_WIFI_2_0 +#ifdef CONFIG_TDLS_IMPLICIT +void wlan_hdd_tdls_pre_setup_init_work(tdlsCtx_t *pHddTdlsCtx, + hddTdlsPeer_t *curr_candidate); +#endif +#endif #endif // __HDD_TDSL_H diff --git a/CORE/HDD/inc/wlan_hdd_tgt_cfg.h b/CORE/HDD/inc/wlan_hdd_tgt_cfg.h index dbae06d7136e..cc15d790d93e 100644 --- a/CORE/HDD/inc/wlan_hdd_tgt_cfg.h +++ b/CORE/HDD/inc/wlan_hdd_tgt_cfg.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef HDD_TGT_CFG_H #define HDD_TGT_CFG_H @@ -40,7 +39,11 @@ struct hdd_tgt_services { #ifdef FEATURE_WLAN_SCAN_PNO v_BOOL_t pno_offload; #endif + v_BOOL_t beacon_offload; u_int32_t lte_coex_ant_share; +#ifdef FEATURE_WLAN_TDLS + v_BOOL_t en_tdls; +#endif }; struct hdd_tgt_ht_cap { @@ -71,10 +74,17 @@ struct hdd_tgt_vht_cap { }; #endif +struct regulatory { + u_int32_t reg_domain; + u_int16_t country_code; + u_int8_t alpha2[3]; + const void *regpair; +}; + struct hdd_tgt_cfg { u_int32_t target_fw_version; u_int8_t band_cap; - u_int8_t alpha2[3]; + u_int32_t reg_domain; v_MACADDR_t hw_macaddr; struct hdd_tgt_services services; struct hdd_tgt_ht_cap ht_cap; diff --git a/CORE/HDD/inc/wlan_hdd_tx_rx.h b/CORE/HDD/inc/wlan_hdd_tx_rx.h index 8747a5f27434..ce7a112860c3 100644 --- a/CORE/HDD/inc/wlan_hdd_tx_rx.h +++ b/CORE/HDD/inc/wlan_hdd_tx_rx.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined( WLAN_HDD_TX_RX_H ) #define WLAN_HDD_TX_RX_H @@ -33,9 +32,6 @@ \file wlan_hdd_tx_rx.h \brief Linux HDD Tx/RX APIs - Copyright 2008 (c) Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary. ==========================================================================*/ diff --git a/CORE/HDD/inc/wlan_hdd_version.h b/CORE/HDD/inc/wlan_hdd_version.h index 28cdc0838abd..a0b59481a4bf 100644 --- a/CORE/HDD/inc/wlan_hdd_version.h +++ b/CORE/HDD/inc/wlan_hdd_version.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - //================================================================== // // File: hdd_Version.h @@ -33,8 +32,6 @@ // // Author: Larry Cawley // -// Copyright 2007, Qualcomm Technologies, Inc. All rights reserved. -// //=================================================================== #if !defined( __hddVersion_h__ ) #define __hddVersion_h__ diff --git a/CORE/HDD/inc/wlan_hdd_wext.h b/CORE/HDD/inc/wlan_hdd_wext.h index da0963c63ca1..44c08fdc2d82 100644 --- a/CORE/HDD/inc/wlan_hdd_wext.h +++ b/CORE/HDD/inc/wlan_hdd_wext.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef __WEXT_IW_H__ #define __WEXT_IW_H__ diff --git a/CORE/HDD/inc/wlan_hdd_wmm.h b/CORE/HDD/inc/wlan_hdd_wmm.h index 615364220d49..c8b134ae7a35 100644 --- a/CORE/HDD/inc/wlan_hdd_wmm.h +++ b/CORE/HDD/inc/wlan_hdd_wmm.h @@ -24,7 +24,8 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - +/* + * */ #ifndef _WLAN_HDD_WMM_H #define _WLAN_HDD_WMM_H /*============================================================================ @@ -48,10 +49,6 @@ The remaining functions are utility functions for information hiding. - - Copyright (c) 2008-9 Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ============================================================================*/ /* $Header$ */ diff --git a/CORE/HDD/inc/wlan_hdd_wowl.h b/CORE/HDD/inc/wlan_hdd_wowl.h index 5b906bc41c45..96913b5b50ee 100644 --- a/CORE/HDD/inc/wlan_hdd_wowl.h +++ b/CORE/HDD/inc/wlan_hdd_wowl.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef _WLAN_HDD_WOWL_H #define _WLAN_HDD_WOWL_H @@ -96,10 +95,6 @@ the device in BMPS mode (if not already in BMPS). If attempt to BMPS fails, request for WoWL will be rejected. - Copyright (c) 2009 Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary - ============================================================================*/ /* $Header$ */ diff --git a/CORE/HDD/inc/wlan_qct_driver.h b/CORE/HDD/inc/wlan_qct_driver.h index b652faee7a15..c129ee222f4e 100644 --- a/CORE/HDD/inc/wlan_qct_driver.h +++ b/CORE/HDD/inc/wlan_qct_driver.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined( __WLAN_QCT_DRIVER_H ) #define __WLAN_QCT_DRIVER_H @@ -34,10 +33,6 @@ \brief Header file for Wireless LAN Host Device Driver Kernel Module - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ /**======================================================================== diff --git a/CORE/HDD/src/bap_hdd_main.c b/CORE/HDD/src/bap_hdd_main.c index 94857066ef8e..c2620a2c1f85 100644 --- a/CORE/HDD/src/bap_hdd_main.c +++ b/CORE/HDD/src/bap_hdd_main.c @@ -24,17 +24,12 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /**======================================================================== \file bap_hdd_main.c \brief 802.11 BT-AMP PAL Host Device Driver implementation - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ /**========================================================================= diff --git a/CORE/HDD/src/wlan_hdd_assoc.c b/CORE/HDD/src/wlan_hdd_assoc.c index e40699ecb8ff..d24fc863a61e 100644 --- a/CORE/HDD/src/wlan_hdd_assoc.c +++ b/CORE/HDD/src/wlan_hdd_assoc.c @@ -24,16 +24,11 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /**======================================================================== \file wlan_hdd_assoc.c \brief WLAN Host Device Driver implementation - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ /**========================================================================= EDIT HISTORY FOR FILE @@ -755,7 +750,7 @@ static VOS_STATUS hdd_roamDeregisterSTA( hdd_adapter_t *pAdapter, tANI_U8 staId { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, "%s: WLANTL_ClearSTAClient() failed to for staID %d. " - "Status= %d [0x%08lX]", + "Status= %d [0x%08X]", __func__, staId, vosStatus, vosStatus ); } return( vosStatus ); @@ -1048,7 +1043,7 @@ static VOS_STATUS hdd_roamRegisterSTA( hdd_adapter_t *pAdapter, if ( !VOS_IS_STATUS_SUCCESS( vosStatus ) ) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, - "WLANTL_RegisterSTAClient() failed to register. Status= %d [0x%08lX]", + "WLANTL_RegisterSTAClient() failed to register. Status= %d [0x%08X]", vosStatus, vosStatus ); return vosStatus; } @@ -1436,7 +1431,7 @@ static eHalStatus hdd_AssociationCompletionHandler( hdd_adapter_t *pAdapter, tCs else { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, - "Cannot register STA with TL. Failed with vosStatus = %d [%08lX]", + "Cannot register STA with TL. Failed with vosStatus = %d [%08X]", vosStatus, vosStatus ); } #ifdef WLAN_FEATURE_11W @@ -1976,7 +1971,7 @@ static eHalStatus roamRoamConnectStatusUpdateHandler( hdd_adapter_t *pAdapter, t if ( !VOS_IS_STATUS_SUCCESS( vosStatus ) ) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "Cannot register STA with TL for IBSS. Failed with vosStatus = %d [%08lX]", + "Cannot register STA with TL for IBSS. Failed with vosStatus = %d [%08X]", vosStatus, vosStatus ); } pHddStaCtx->ibss_sta_generation++; @@ -2157,8 +2152,8 @@ VOS_STATUS hdd_roamRegisterTDLSSTA( hdd_adapter_t *pAdapter, if ( !VOS_IS_STATUS_SUCCESS( vosStatus ) ) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: WLANTL_RegisterSTAClient() failed to register. \ - Status= %d [0x%08lX]", __func__, vosStatus, vosStatus ); + "%s: WLANTL_RegisterSTAClient() failed to register. " + "Status= %d [0x%08X]", __func__, vosStatus, vosStatus ); return vosStatus; } @@ -2180,7 +2175,7 @@ static VOS_STATUS hdd_roamDeregisterTDLSSTA( hdd_adapter_t *pAdapter, tANI_U8 st { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, "%s: WLANTL_ClearSTAClient() failed to for staID %d. " - "Status= %d [0x%08lX]", + "Status= %d [0x%08X]", __func__, staId, vosStatus, vosStatus ); } return( vosStatus ); @@ -2200,6 +2195,9 @@ eHalStatus hdd_RoamTdlsStatusUpdateHandler(hdd_adapter_t *pAdapter, eCsrRoamResult roamResult) { hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); +#ifdef QCA_WIFI_2_0 + tdlsCtx_t *pHddTdlsCtx = WLAN_HDD_GET_TDLS_CTX_PTR(pAdapter); +#endif eHalStatus status = eHAL_STATUS_FAILURE ; tANI_U8 staIdx; @@ -2212,6 +2210,11 @@ eHalStatus hdd_RoamTdlsStatusUpdateHandler(hdd_adapter_t *pAdapter, roamResult == eCSR_ROAM_RESULT_DELETE_ALL_TDLS_PEER_IND? "DEL_ALL_TDLS_PEER_IND" : roamResult == eCSR_ROAM_RESULT_UPDATE_TDLS_PEER? "UPDATE_TDLS_PEER" : roamResult == eCSR_ROAM_RESULT_LINK_ESTABLISH_REQ_RSP? "LINK_ESTABLISH_REQ_RSP" : +#ifdef QCA_WIFI_2_0 + roamResult == eCSR_ROAM_RESULT_TDLS_SHOULD_DISCOVER? "TDLS_SHOULD_DISCOVER" : + roamResult == eCSR_ROAM_RESULT_TDLS_SHOULD_TEARDOWN? "TDLS_SHOULD_TEARDOWN" : + roamResult == eCSR_ROAM_RESULT_TDLS_SHOULD_PEER_DISCONNECTED? "TDLS_SHOULD_PEER_DISCONNECTED" : +#endif "UNKNOWN", pRoamInfo->staId, pRoamInfo->peerMac[0], @@ -2270,11 +2273,13 @@ eHalStatus hdd_RoamTdlsStatusUpdateHandler(hdd_adapter_t *pAdapter, /* store the ucast signature , if required for further reference. */ wlan_hdd_tdls_set_signature( pAdapter, pRoamInfo->peerMac, pRoamInfo->ucastSig ); +#ifndef QCA_WIFI_2_0 /* start TDLS client registration with TL */ status = hdd_roamRegisterTDLSSTA( pAdapter, pRoamInfo->peerMac, pRoamInfo->staId, pRoamInfo->ucastSig); +#endif /* QCA_WIFI_2_0 */ } else { @@ -2390,6 +2395,104 @@ eHalStatus hdd_RoamTdlsStatusUpdateHandler(hdd_adapter_t *pAdapter, wlan_hdd_tdls_check_bmps(pAdapter); break ; } +#ifdef QCA_WIFI_2_0 + case eCSR_ROAM_RESULT_TDLS_SHOULD_DISCOVER: + { +#ifdef CONFIG_TDLS_IMPLICIT + hddTdlsPeer_t *curr_peer; + + curr_peer = wlan_hdd_tdls_get_peer(pAdapter, pRoamInfo->peerMac); + if (!curr_peer) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: curr_peer null", __func__); + status = eHAL_STATUS_FAILURE; + } + else + { + if (eTDLS_LINK_CONNECTED == curr_peer->link_status) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: TDLS link status is connected, ignore SHOULD_DISCOVER", __func__); + } + else + { + wlan_hdd_tdls_pre_setup_init_work(pHddTdlsCtx, curr_peer); + } + status = eHAL_STATUS_SUCCESS; + } +#else + status = eHAL_STATUS_SUCCESS; +#endif + break ; + } + + case eCSR_ROAM_RESULT_TDLS_SHOULD_TEARDOWN: + { +#ifdef CONFIG_TDLS_IMPLICIT + hddTdlsPeer_t *curr_peer; + + curr_peer = wlan_hdd_tdls_find_peer(pAdapter, pRoamInfo->peerMac, TRUE); + if (!curr_peer) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: curr_peer null", __func__); + status = eHAL_STATUS_FAILURE; + } + else + { + if (eTDLS_LINK_CONNECTED == curr_peer->link_status) + { + wlan_hdd_tdls_indicate_teardown(pHddTdlsCtx->pAdapter, + curr_peer, + eSIR_MAC_TDLS_TEARDOWN_UNSPEC_REASON); + } + else + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: TDLS link is not connected, ignore SHOULD_TEARDOWN", __func__); + } + status = eHAL_STATUS_SUCCESS; + } +#else + status = eHAL_STATUS_SUCCESS; +#endif + break ; + } + + case eCSR_ROAM_RESULT_TDLS_SHOULD_PEER_DISCONNECTED: + { +#ifdef CONFIG_TDLS_IMPLICIT + hddTdlsPeer_t *curr_peer; + + curr_peer = wlan_hdd_tdls_find_peer(pAdapter, pRoamInfo->peerMac, TRUE); + if (!curr_peer) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: curr_peer null", __func__); + status = eHAL_STATUS_FAILURE; + } + else + { + if (eTDLS_LINK_CONNECTED == curr_peer->link_status) + { + wlan_hdd_tdls_indicate_teardown(pHddTdlsCtx->pAdapter, + curr_peer, + eSIR_MAC_TDLS_TEARDOWN_UNSPEC_REASON); + } + else + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: TDLS link is not connected, ignore PEER_DISCONNECTED", __func__); + } + status = eHAL_STATUS_SUCCESS; + } +#else + status = eHAL_STATUS_SUCCESS; +#endif + break ; + } +#endif /* QCA_WIFI_2_0 */ default: { break ; @@ -2411,7 +2514,7 @@ eHalStatus hdd_smeRoamCallback( void *pContext, tCsrRoamInfo *pRoamInfo, tANI_U3 hdd_context_t *pHddCtx = NULL; VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, - "CSR Callback: status= %d result= %d roamID=%ld", + "CSR Callback: status= %d result= %d roamID=%d", roamStatus, roamResult, roamId ); /*Sanity check*/ @@ -3000,7 +3103,7 @@ static tANI_S32 hdd_ProcessGENIE(hdd_adapter_t *pAdapter, if (updatePMKCache) { // Calling csrRoamSetPMKIDCache to configure the PMKIDs into the cache - hddLog(LOG1, FL("%s: Calling csrRoamSetPMKIDCache with cache entry %ld."), + hddLog(LOG1, FL("%s: Calling csrRoamSetPMKIDCache with cache entry %d."), __func__, i ); // Finally set the PMKSA ID Cache in CSR result = sme_RoamSetPMKIDCache(halHandle,pAdapter->sessionId, @@ -3990,7 +4093,7 @@ void hdd_indicateCckmPreAuth(hdd_adapter_t *pAdapter, tCsrRoamInfo *pRoamInfo) pos += WNI_CFG_BSSID_LEN; freeBytes -= WNI_CFG_BSSID_LEN; - nBytes = snprintf(pos, freeBytes, " %lu:%lu", + nBytes = snprintf(pos, freeBytes, " %u:%u", pRoamInfo->timestamp[0], pRoamInfo->timestamp[1]); freeBytes -= nBytes; diff --git a/CORE/HDD/src/wlan_hdd_cfg.c b/CORE/HDD/src/wlan_hdd_cfg.c index a39caa310a3c..9957fa176d8f 100644 --- a/CORE/HDD/src/wlan_hdd_cfg.c +++ b/CORE/HDD/src/wlan_hdd_cfg.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /**========================================================================= EDIT HISTORY FOR FILE @@ -2583,6 +2582,15 @@ REG_VARIABLE( CFG_ENABLE_RX_LDPC, WLAN_PARAM_Integer, CFG_TDLS_RSSI_TEARDOWN_THRESHOLD_MIN, CFG_TDLS_RSSI_TEARDOWN_THRESHOLD_MAX ), +#ifdef QCA_WIFI_2_0 + REG_VARIABLE( CFG_TDLS_RSSI_DELTA, WLAN_PARAM_SignedInteger, + hdd_config_t, fTDLSRSSIDelta, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_TDLS_RSSI_DELTA_DEFAULT, + CFG_TDLS_RSSI_DELTA_MIN, + CFG_TDLS_RSSI_DELTA_MAX ), +#endif + REG_VARIABLE( CFG_TDLS_QOS_WMM_UAPSD_MASK_NAME , WLAN_PARAM_HexInteger, hdd_config_t, fTDLSUapsdMask, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, @@ -2947,6 +2955,13 @@ REG_VARIABLE( CFG_WOW_STATUS_NAME, WLAN_PARAM_Integer, CFG_COALESING_IN_IBSS_DEFAULT, CFG_COALESING_IN_IBSS_MIN, CFG_COALESING_IN_IBSS_MAX ), + +REG_VARIABLE( CFG_SAP_MAX_NO_PEERS, WLAN_PARAM_Integer, + hdd_config_t, maxNumberOfPeers, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_SAP_MAX_NO_PEERS_DEFAULT, + CFG_SAP_MAX_NO_PEERS_MIN, + CFG_SAP_MAX_NO_PEERS_MAX), }; /* @@ -3145,12 +3160,12 @@ config_exit: static void print_hdd_cfg(hdd_context_t *pHddCtx) { VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "*********Config values in HDD Adapter*******"); - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [RTSThreshold] Value = %lu",pHddCtx->cfg_ini->RTSThreshold) ; + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [RTSThreshold] Value = %u",pHddCtx->cfg_ini->RTSThreshold) ; VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [OperatingChannel] Value = [%u]",pHddCtx->cfg_ini->OperatingChannel); VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [PowerUsageControl] Value = [%s]",pHddCtx->cfg_ini->PowerUsageControl); VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [fIsImpsEnabled] Value = [%u]",pHddCtx->cfg_ini->fIsImpsEnabled); VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [AutoBmpsTimerEnabled] Value = [%u]",pHddCtx->cfg_ini->fIsAutoBmpsTimerEnabled); - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [nAutoBmpsTimerValue] Value = [%lu]",pHddCtx->cfg_ini->nAutoBmpsTimerValue); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [nAutoBmpsTimerValue] Value = [%u]",pHddCtx->cfg_ini->nAutoBmpsTimerValue); VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [nVccRssiTrigger] Value = [%u]",pHddCtx->cfg_ini->nVccRssiTrigger); VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gIbssBssid] Value =[0x%x 0x%x 0x%x 0x%x 0x%x 0x%x]", pHddCtx->cfg_ini->IbssBssid.bytes[0],pHddCtx->cfg_ini->IbssBssid.bytes[1], @@ -3208,87 +3223,87 @@ static void print_hdd_cfg(hdd_context_t *pHddCtx) VOS_TRACE (VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gEnableApOBSSProt] value = [%u]\n",pHddCtx->cfg_ini->apOBSSProtEnabled); VOS_TRACE (VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gApAutoChannelSelection] value = [%u]\n",pHddCtx->cfg_ini->apAutoChannelSelection); - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [ChannelBondingMode] Value = [%lu]",pHddCtx->cfg_ini->nChannelBondingMode24GHz); - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [ChannelBondingMode] Value = [%lu]",pHddCtx->cfg_ini->nChannelBondingMode5GHz); - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [dot11Mode] Value = [%lu]",pHddCtx->cfg_ini->dot11Mode); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [ChannelBondingMode] Value = [%u]",pHddCtx->cfg_ini->nChannelBondingMode24GHz); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [ChannelBondingMode] Value = [%u]",pHddCtx->cfg_ini->nChannelBondingMode5GHz); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [dot11Mode] Value = [%u]",pHddCtx->cfg_ini->dot11Mode); VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [WmmMode] Value = [%u] ",pHddCtx->cfg_ini->WmmMode); VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [UapsdMask] Value = [0x%x] ",pHddCtx->cfg_ini->UapsdMask); VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [PktClassificationBasis] Value = [%u] ",pHddCtx->cfg_ini->PktClassificationBasis); VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [ImplicitQosIsEnabled] Value = [%u]",(int)pHddCtx->cfg_ini->bImplicitQosEnabled); - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [InfraUapsdVoSrvIntv] Value = [%lu] ",pHddCtx->cfg_ini->InfraUapsdVoSrvIntv); - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [InfraUapsdVoSuspIntv] Value = [%lu] ",pHddCtx->cfg_ini->InfraUapsdVoSuspIntv); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [InfraUapsdVoSrvIntv] Value = [%u] ",pHddCtx->cfg_ini->InfraUapsdVoSrvIntv); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [InfraUapsdVoSuspIntv] Value = [%u] ",pHddCtx->cfg_ini->InfraUapsdVoSuspIntv); - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [InfraUapsdViSrvIntv] Value = [%lu] ",pHddCtx->cfg_ini->InfraUapsdViSrvIntv); - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [InfraUapsdViSuspIntv] Value = [%lu] ",pHddCtx->cfg_ini->InfraUapsdViSuspIntv); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [InfraUapsdViSrvIntv] Value = [%u] ",pHddCtx->cfg_ini->InfraUapsdViSrvIntv); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [InfraUapsdViSuspIntv] Value = [%u] ",pHddCtx->cfg_ini->InfraUapsdViSuspIntv); - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [InfraUapsdBeSrvIntv] Value = [%lu] ",pHddCtx->cfg_ini->InfraUapsdBeSrvIntv); - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [InfraUapsdBeSuspIntv] Value = [%lu] ",pHddCtx->cfg_ini->InfraUapsdBeSuspIntv); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [InfraUapsdBeSrvIntv] Value = [%u] ",pHddCtx->cfg_ini->InfraUapsdBeSrvIntv); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [InfraUapsdBeSuspIntv] Value = [%u] ",pHddCtx->cfg_ini->InfraUapsdBeSuspIntv); - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [InfraUapsdBkSrvIntv] Value = [%lu] ",pHddCtx->cfg_ini->InfraUapsdBkSrvIntv); - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [InfraUapsdBkSuspIntv] Value = [%lu] ",pHddCtx->cfg_ini->InfraUapsdBkSuspIntv); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [InfraUapsdBkSrvIntv] Value = [%u] ",pHddCtx->cfg_ini->InfraUapsdBkSrvIntv); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [InfraUapsdBkSuspIntv] Value = [%u] ",pHddCtx->cfg_ini->InfraUapsdBkSuspIntv); #ifdef FEATURE_WLAN_CCX - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [InfraInactivityInterval] Value = [%lu] ",pHddCtx->cfg_ini->InfraInactivityInterval); - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [CcxEnabled] Value = [%lu] ",pHddCtx->cfg_ini->isCcxIniFeatureEnabled); - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [FastTransitionEnabled] Value = [%lu] ",pHddCtx->cfg_ini->isFastTransitionEnabled); - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gTxPowerCap] Value = [%lu] dBm ",pHddCtx->cfg_ini->nTxPowerCap); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [InfraInactivityInterval] Value = [%u] ",pHddCtx->cfg_ini->InfraInactivityInterval); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [CcxEnabled] Value = [%u] ",pHddCtx->cfg_ini->isCcxIniFeatureEnabled); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [FastTransitionEnabled] Value = [%u] ",pHddCtx->cfg_ini->isFastTransitionEnabled); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gTxPowerCap] Value = [%u] dBm ",pHddCtx->cfg_ini->nTxPowerCap); #endif #ifdef FEATURE_WLAN_LFR - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [FastRoamEnabled] Value = [%lu] ",pHddCtx->cfg_ini->isFastRoamIniFeatureEnabled); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [FastRoamEnabled] Value = [%u] ",pHddCtx->cfg_ini->isFastRoamIniFeatureEnabled); VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [MAWCEnabled] Value = [%u] ",pHddCtx->cfg_ini->MAWCEnabled); #endif #if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR) - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [RoamRssiDiff] Value = [%lu] ",pHddCtx->cfg_ini->RoamRssiDiff); - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [ImmediateRoamRssiDiff] Value = [%lu] ",pHddCtx->cfg_ini->nImmediateRoamRssiDiff); - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [isWESModeEnabled] Value = [%lu] ",pHddCtx->cfg_ini->isWESModeEnabled); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [RoamRssiDiff] Value = [%u] ",pHddCtx->cfg_ini->RoamRssiDiff); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [ImmediateRoamRssiDiff] Value = [%u] ",pHddCtx->cfg_ini->nImmediateRoamRssiDiff); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [isWESModeEnabled] Value = [%u] ",pHddCtx->cfg_ini->isWESModeEnabled); #endif #ifdef FEATURE_WLAN_OKC - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [OkcEnabled] Value = [%lu] ",pHddCtx->cfg_ini->isOkcIniFeatureEnabled); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [OkcEnabled] Value = [%u] ",pHddCtx->cfg_ini->isOkcIniFeatureEnabled); #endif VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [InfraDirAcVo] Value = [%u] ",pHddCtx->cfg_ini->InfraDirAcVo); VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [InfraNomMsduSizeAcVo] Value = [0x%x] ",pHddCtx->cfg_ini->InfraNomMsduSizeAcVo); - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [InfraMeanDataRateAcVo] Value = [0x%lx] ",pHddCtx->cfg_ini->InfraMeanDataRateAcVo); - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [InfraMinPhyRateAcVo] Value = [0x%lx] ",pHddCtx->cfg_ini->InfraMinPhyRateAcVo); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [InfraMeanDataRateAcVo] Value = [0x%x] ",pHddCtx->cfg_ini->InfraMeanDataRateAcVo); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [InfraMinPhyRateAcVo] Value = [0x%x] ",pHddCtx->cfg_ini->InfraMinPhyRateAcVo); VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [InfraSbaAcVo] Value = [0x%x] ",pHddCtx->cfg_ini->InfraSbaAcVo); VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [InfraDirAcVi] Value = [%u] ",pHddCtx->cfg_ini->InfraDirAcVi); VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [InfraNomMsduSizeAcVi] Value = [0x%x] ",pHddCtx->cfg_ini->InfraNomMsduSizeAcVi); - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [InfraMeanDataRateAcVi] Value = [0x%lx] ",pHddCtx->cfg_ini->InfraMeanDataRateAcVi); - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [InfraMinPhyRateAcVi] Value = [0x%lx] ",pHddCtx->cfg_ini->InfraMinPhyRateAcVi); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [InfraMeanDataRateAcVi] Value = [0x%x] ",pHddCtx->cfg_ini->InfraMeanDataRateAcVi); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [InfraMinPhyRateAcVi] Value = [0x%x] ",pHddCtx->cfg_ini->InfraMinPhyRateAcVi); VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [InfraSbaAcVi] Value = [0x%x] ",pHddCtx->cfg_ini->InfraSbaAcVi); VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [InfraDirAcBe] Value = [%u] ",pHddCtx->cfg_ini->InfraDirAcBe); VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [InfraNomMsduSizeAcBe] Value = [0x%x] ",pHddCtx->cfg_ini->InfraNomMsduSizeAcBe); - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [InfraMeanDataRateAcBe] Value = [0x%lx] ",pHddCtx->cfg_ini->InfraMeanDataRateAcBe); - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [InfraMinPhyRateAcBe] Value = [0x%lx] ",pHddCtx->cfg_ini->InfraMinPhyRateAcBe); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [InfraMeanDataRateAcBe] Value = [0x%x] ",pHddCtx->cfg_ini->InfraMeanDataRateAcBe); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [InfraMinPhyRateAcBe] Value = [0x%x] ",pHddCtx->cfg_ini->InfraMinPhyRateAcBe); VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [InfraSbaAcBe] Value = [0x%x] ",pHddCtx->cfg_ini->InfraSbaAcBe); VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [InfraDirAcBk] Value = [%u] ",pHddCtx->cfg_ini->InfraDirAcBk); VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [InfraNomMsduSizeAcBk] Value = [0x%x] ",pHddCtx->cfg_ini->InfraNomMsduSizeAcBk); - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [InfraMeanDataRateAcBk] Value = [0x%lx] ",pHddCtx->cfg_ini->InfraMeanDataRateAcBk); - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [InfraMinPhyRateAcBk] Value = [0x%lx] ",pHddCtx->cfg_ini->InfraMinPhyRateAcBk); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [InfraMeanDataRateAcBk] Value = [0x%x] ",pHddCtx->cfg_ini->InfraMeanDataRateAcBk); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [InfraMinPhyRateAcBk] Value = [0x%x] ",pHddCtx->cfg_ini->InfraMinPhyRateAcBk); VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [InfraSbaAcBk] Value = [0x%x] ",pHddCtx->cfg_ini->InfraSbaAcBk); VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [WfqBkWeight] Value = [%u] ",pHddCtx->cfg_ini->WfqBkWeight); VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [WfqBeWeight] Value = [%u] ",pHddCtx->cfg_ini->WfqBeWeight); VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [WfqViWeight] Value = [%u] ",pHddCtx->cfg_ini->WfqViWeight); VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [WfqVoWeight] Value = [%u] ",pHddCtx->cfg_ini->WfqVoWeight); - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [DelayedTriggerFrmInt] Value = [%lu] ",pHddCtx->cfg_ini->DelayedTriggerFrmInt); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [DelayedTriggerFrmInt] Value = [%u] ",pHddCtx->cfg_ini->DelayedTriggerFrmInt); VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [mcastBcastFilterSetting] Value = [%u] ",pHddCtx->cfg_ini->mcastBcastFilterSetting); VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [fhostArpOffload] Value = [%u] ",pHddCtx->cfg_ini->fhostArpOffload); #ifdef WLAN_FEATURE_VOWIFI_11R - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [fFTResourceReqSupported] Value = [%lu] ",pHddCtx->cfg_ini->fFTResourceReqSupported); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [fFTResourceReqSupported] Value = [%u] ",pHddCtx->cfg_ini->fFTResourceReqSupported); #endif #ifdef WLAN_FEATURE_NEIGHBOR_ROAMING - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [nNeighborReassocRssiThreshold] Value = [%lu] ",pHddCtx->cfg_ini->nNeighborReassocRssiThreshold); - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [nNeighborLookupRssiThreshold] Value = [%lu] ",pHddCtx->cfg_ini->nNeighborLookupRssiThreshold); - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [nNeighborScanMinChanTime] Value = [%lu] ",pHddCtx->cfg_ini->nNeighborScanMinChanTime); - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [nNeighborScanMaxChanTime] Value = [%lu] ",pHddCtx->cfg_ini->nNeighborScanMaxChanTime); - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [nMaxNeighborRetries] Value = [%lu] ",pHddCtx->cfg_ini->nMaxNeighborReqTries); - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [nNeighborScanPeriod] Value = [%lu] ",pHddCtx->cfg_ini->nNeighborScanPeriod); - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [nNeighborScanResultsRefreshPeriod] Value = [%lu] ",pHddCtx->cfg_ini->nNeighborResultsRefreshPeriod); - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [nEmptyScanRefreshPeriod] Value = [%lu] ",pHddCtx->cfg_ini->nEmptyScanRefreshPeriod); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [nNeighborReassocRssiThreshold] Value = [%u] ",pHddCtx->cfg_ini->nNeighborReassocRssiThreshold); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [nNeighborLookupRssiThreshold] Value = [%u] ",pHddCtx->cfg_ini->nNeighborLookupRssiThreshold); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [nNeighborScanMinChanTime] Value = [%u] ",pHddCtx->cfg_ini->nNeighborScanMinChanTime); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [nNeighborScanMaxChanTime] Value = [%u] ",pHddCtx->cfg_ini->nNeighborScanMaxChanTime); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [nMaxNeighborRetries] Value = [%u] ",pHddCtx->cfg_ini->nMaxNeighborReqTries); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [nNeighborScanPeriod] Value = [%u] ",pHddCtx->cfg_ini->nNeighborScanPeriod); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [nNeighborScanResultsRefreshPeriod] Value = [%u] ",pHddCtx->cfg_ini->nNeighborResultsRefreshPeriod); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [nEmptyScanRefreshPeriod] Value = [%u] ",pHddCtx->cfg_ini->nEmptyScanRefreshPeriod); #endif VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [burstSizeDefinition] Value = [0x%x] ",pHddCtx->cfg_ini->burstSizeDefinition); VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [tsInfoAckPolicy] Value = [0x%x] ",pHddCtx->cfg_ini->tsInfoAckPolicy); @@ -3337,8 +3352,8 @@ static void print_hdd_cfg(hdd_context_t *pHddCtx) VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gApLinkMonitorPeriod] Value = [%u]",pHddCtx->cfg_ini->apLinkMonitorPeriod); VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gGoKeepAlivePeriod] Value = [%u]",pHddCtx->cfg_ini->goKeepAlivePeriod); VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gApKeepAlivePeriod]Value = [%u]",pHddCtx->cfg_ini->apKeepAlivePeriod); - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gAmsduSupportInAMPDU] Value = [%lu] ",pHddCtx->cfg_ini->isAmsduSupportInAMPDU); - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [nSelect5GHzMargin] Value = [%lu] ",pHddCtx->cfg_ini->nSelect5GHzMargin); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gAmsduSupportInAMPDU] Value = [%u] ",pHddCtx->cfg_ini->isAmsduSupportInAMPDU); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [nSelect5GHzMargin] Value = [%u] ",pHddCtx->cfg_ini->nSelect5GHzMargin); VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gCoalesingInIBSS] Value = [%u] ",pHddCtx->cfg_ini->isCoalesingInIBSSAllowed); } @@ -3498,7 +3513,7 @@ static VOS_STATUS hdd_apply_cfg_ini( hdd_context_t *pHddCtx, tCfgIniEntry* iniTa // sanity test if (MAX_CFG_INI_ITEMS < cRegTableEntries) { - hddLog(LOGE, "%s: MAX_CFG_INI_ITEMS too small, must be at least %d", + hddLog(LOGE, "%s: MAX_CFG_INI_ITEMS too small, must be at least %ld", __func__, cRegTableEntries); } @@ -3548,14 +3563,14 @@ static VOS_STATUS hdd_apply_cfg_ini( hdd_context_t *pHddCtx, tCfgIniEntry* iniTa { if ( value > pRegEntry->VarMax ) { - hddLog(LOGE, "%s: Reg Parameter %s > allowed Maximum [%lu > %lu]. Enforcing Maximum", + hddLog(LOGE, "%s: Reg Parameter %s > allowed Maximum [%u > %lu]. Enforcing Maximum", __func__, pRegEntry->RegName, value, pRegEntry->VarMax ); value = pRegEntry->VarMax; } if ( value < pRegEntry->VarMin ) { - hddLog(LOGE, "%s: Reg Parameter %s < allowed Minimum [%lu < %lu]. Enforcing Minimum", + hddLog(LOGE, "%s: Reg Parameter %s < allowed Minimum [%u < %lu]. Enforcing Minimum", __func__, pRegEntry->RegName, value, pRegEntry->VarMin); value = pRegEntry->VarMin; } @@ -3565,14 +3580,14 @@ static VOS_STATUS hdd_apply_cfg_ini( hdd_context_t *pHddCtx, tCfgIniEntry* iniTa { if ( value > pRegEntry->VarMax ) { - hddLog(LOGE, "%s: Reg Parameter %s > allowed Maximum [%lu > %lu]. Enforcing Default= %lu", + hddLog(LOGE, "%s: Reg Parameter %s > allowed Maximum [%u > %lu]. Enforcing Default= %lu", __func__, pRegEntry->RegName, value, pRegEntry->VarMax, pRegEntry->VarDefault ); value = pRegEntry->VarDefault; } if ( value < pRegEntry->VarMin ) { - hddLog(LOGE, "%s: Reg Parameter %s < allowed Minimum [%lu < %lu]. Enforcing Default= %lu", + hddLog(LOGE, "%s: Reg Parameter %s < allowed Minimum [%u < %lu]. Enforcing Default= %lu", __func__, pRegEntry->RegName, value, pRegEntry->VarMin, pRegEntry->VarDefault ); value = pRegEntry->VarDefault; } @@ -3605,7 +3620,7 @@ static VOS_STATUS hdd_apply_cfg_ini( hdd_context_t *pHddCtx, tCfgIniEntry* iniTa if ( svalue > (v_S31_t)pRegEntry->VarMax ) { hddLog(LOGE, "%s: Reg Parameter %s > allowed Maximum " - "[%ld > %ld]. Enforcing Maximum", __func__, + "[%d > %d]. Enforcing Maximum", __func__, pRegEntry->RegName, svalue, (int)pRegEntry->VarMax ); svalue = (v_S31_t)pRegEntry->VarMax; } @@ -3613,7 +3628,7 @@ static VOS_STATUS hdd_apply_cfg_ini( hdd_context_t *pHddCtx, tCfgIniEntry* iniTa if ( svalue < (v_S31_t)pRegEntry->VarMin ) { hddLog(LOGE, "%s: Reg Parameter %s < allowed Minimum " - "[%ld < %ld]. Enforcing Minimum", __func__, + "[%d < %d]. Enforcing Minimum", __func__, pRegEntry->RegName, svalue, (int)pRegEntry->VarMin); svalue = (v_S31_t)pRegEntry->VarMin; } @@ -3624,7 +3639,7 @@ static VOS_STATUS hdd_apply_cfg_ini( hdd_context_t *pHddCtx, tCfgIniEntry* iniTa if ( svalue > (v_S31_t)pRegEntry->VarMax ) { hddLog(LOGE, "%s: Reg Parameter %s > allowed Maximum " - "[%ld > %ld]. Enforcing Default= %ld", + "[%d > %d]. Enforcing Default= %d", __func__, pRegEntry->RegName, svalue, (int)pRegEntry->VarMax, (int)pRegEntry->VarDefault ); @@ -3634,7 +3649,7 @@ static VOS_STATUS hdd_apply_cfg_ini( hdd_context_t *pHddCtx, tCfgIniEntry* iniTa if ( svalue < (v_S31_t)pRegEntry->VarMin ) { hddLog(LOGE, "%s: Reg Parameter %s < allowed Minimum " - "[%ld < %ld]. Enforcing Default= %ld", + "[%d < %d]. Enforcing Default= %d", __func__, pRegEntry->RegName, svalue, (int)pRegEntry->VarMin, (int)pRegEntry->VarDefault); @@ -5049,14 +5064,14 @@ VOS_STATUS hdd_execute_config_command(hdd_context_t *pHddCtx, char *command) if (value < pRegEntry->VarMin) { // out of range - hddLog(LOGE, "%s: invalid command, value %u < min value %u", + hddLog(LOGE, "%s: invalid command, value %u < min value %lu", __func__, value, pRegEntry->VarMin); goto done; } if (value > pRegEntry->VarMax) { // out of range - hddLog(LOGE, "%s: invalid command, value %u > max value %u", + hddLog(LOGE, "%s: invalid command, value %u > max value %lu", __func__, value, pRegEntry->VarMax); goto done; } @@ -5070,14 +5085,14 @@ VOS_STATUS hdd_execute_config_command(hdd_context_t *pHddCtx, char *command) if (value < pRegEntry->VarMin) { // out of range - hddLog(LOGE, "%s: invalid command, value %x < min value %x", + hddLog(LOGE, "%s: invalid command, value %x < min value %lx", __func__, value, pRegEntry->VarMin); goto done; } if (value > pRegEntry->VarMax) { // out of range - hddLog(LOGE, "%s: invalid command, value %x > max value %x", + hddLog(LOGE, "%s: invalid command, value %x > max value %lx", __func__, value, pRegEntry->VarMax); goto done; } diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c index 59730c50bad8..c56ca3c84c27 100644 --- a/CORE/HDD/src/wlan_hdd_cfg80211.c +++ b/CORE/HDD/src/wlan_hdd_cfg80211.c @@ -24,17 +24,12 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /**======================================================================== \file wlan_hdd_cfg80211.c \brief WLAN Host Device Driver implementation - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ /**========================================================================= @@ -666,10 +661,10 @@ int wlan_hdd_cfg80211_init(struct device *dev, wiphy->mgmt_stypes = wlan_hdd_txrx_stypes; -#ifndef QCA_WIFI_2_0 +#ifndef CONFIG_ENABLE_LINUX_REG + /* the flag for the other case would be initialzed in + vos_init_wiphy_from_nv_bin */ wiphy->flags |= WIPHY_FLAG_STRICT_REGULATORY; -#else - wiphy->flags |= WIPHY_FLAG_CUSTOM_REGULATORY; #endif /* This will disable updating of NL channels from passive to @@ -682,6 +677,7 @@ int wlan_hdd_cfg80211_init(struct device *dev, | WIPHY_FLAG_AP_PROBE_RESP_OFFLOAD | WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL | WIPHY_FLAG_OFFCHAN_TX; + wiphy->country_ie_pref = NL80211_COUNTRY_IE_IGNORE_CORE; #endif wiphy->wowlan.flags = WIPHY_WOWLAN_MAGIC_PKT; @@ -880,7 +876,7 @@ void wlan_hdd_cfg80211_update_reg_info(struct wiphy *wiphy) if (eHAL_STATUS_SUCCESS != sme_GetDefaultCountryCodeFrmNv(pHddCtx->hHal, &defaultCountryCode[0])) { - hddLog(LOGE, FL("%s Failed to get default country code from NV")); + hddLog(LOGE, FL("Failed to get default country code from NV")); } if ((defaultCountryCode[0]== 'U') && (defaultCountryCode[1]=='S')) { @@ -2669,6 +2665,7 @@ static int wlan_hdd_change_iface_to_sta_mode(struct net_device *ndev, { hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(ndev); hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + hdd_wext_state_t *wext; struct wireless_dev *wdev; VOS_STATUS status; @@ -2694,6 +2691,9 @@ static int wlan_hdd_change_iface_to_sta_mode(struct net_device *ndev, memset(&pAdapter->sessionCtx, 0, sizeof(pAdapter->sessionCtx)); hdd_set_station_ops(pAdapter->dev); status = hdd_init_station_mode(pAdapter); + wext = WLAN_HDD_GET_WEXT_STATE_PTR(pAdapter); + wext->roamProfile.pAddIEScan = pAdapter->scan_info.scanAddIE.addIEdata; + wext->roamProfile.nAddIEScanLength = pAdapter->scan_info.scanAddIE.length; EXIT(); return status; } @@ -3035,7 +3035,7 @@ int wlan_hdd_cfg80211_change_iface( struct wiphy *wiphy, return status; // fw will take care if PS offload is enabled. - if (!pHddCtx->cfg_ini->enablePowersaveOffload) + if (pHddCtx->cfg_ini->enablePowersaveOffload) goto done; /* In case of JB, for P2P-GO, only change interface will be called, * This is the right place to enable back bmps_imps() @@ -3240,7 +3240,7 @@ static int wlan_hdd_tdls_add_station(struct wiphy *wiphy, VOS_TRACE(VOS_MODULE_ID_HDD, TDLS_LOG_LEVEL, "params->capability: %0x",StaParams->capability); VOS_TRACE(VOS_MODULE_ID_HDD, TDLS_LOG_LEVEL, - "params->ext_capab_len: %0x",StaParams->extn_capability); + "params->ext_capab_len: %0x",StaParams->extn_capability[0]); if(StaParams->vhtcap_present) { VOS_TRACE(VOS_MODULE_ID_HDD, TDLS_LOG_LEVEL, @@ -3580,7 +3580,7 @@ static int wlan_hdd_cfg80211_add_key( struct wiphy *wiphy, #endif default: - hddLog(VOS_TRACE_LEVEL_ERROR, "%s: unsupported cipher type %lu", + hddLog(VOS_TRACE_LEVEL_ERROR, "%s: unsupported cipher type %u", __func__, params->cipher); return -EOPNOTSUPP; } @@ -4962,6 +4962,17 @@ int wlan_hdd_cfg80211_scan( struct wiphy *wiphy, return -EBUSY; } +#ifdef FEATURE_WLAN_SCAN_PNO + /* This check will not allow any normal scan when we already issued + * an PNO scan. + */ + if (TRUE == pScanInfo->mPnoScanPending) + { + hddLog(VOS_TRACE_LEVEL_ERROR, "%s: mPnoScanPending is TRUE", __func__); + return -EBUSY; + } +#endif + //Don't Allow Scan and return busy if Remain On //Channel and action frame is pending //Otherwise Cancel Remain On Channel and allow Scan @@ -5982,7 +5993,7 @@ int wlan_hdd_cfg80211_set_ie( hdd_adapter_t *pAdapter, #ifdef FEATURE_WLAN_WAPI case WLAN_EID_WAPI: pAdapter->wapi_info.nWapiMode = 1; //Setting WAPI Mode to ON=1 - hddLog(VOS_TRACE_LEVEL_INFO,"WAPI MODE IS %lu \n", + hddLog(VOS_TRACE_LEVEL_INFO, "WAPI MODE IS %u", pAdapter->wapi_info.nWapiMode); tmp = (u16 *)ie; tmp = tmp + 2; // Skip element Id and Len, Version @@ -6721,7 +6732,6 @@ static int wlan_hdd_cfg80211_leave_ibss( struct wiphy *wiphy, tCsrRoamProfile *pRoamProfile; hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); int status; - tANI_U8 addIE[WNI_CFG_PROBE_RSP_BCN_ADDNIE_DATA_LEN] = {0}; ENTER(); @@ -6752,41 +6762,6 @@ static int wlan_hdd_cfg80211_leave_ibss( struct wiphy *wiphy, return -EINVAL; } -#ifdef FEATURE_CESIUM_PROPRIETARY - /* Clearing add IE of beacon */ - if (ccmCfgSetStr(pHddCtx->hHal, - WNI_CFG_PROBE_RSP_BCN_ADDNIE_DATA, &addIE[0], - WNI_CFG_PROBE_RSP_BCN_ADDNIE_DATA_LEN, - NULL, eANI_BOOLEAN_FALSE) != eHAL_STATUS_SUCCESS) - { - hddLog (VOS_TRACE_LEVEL_ERROR, - "%s: unable to clear PROBE_RSP_BCN_ADDNIE_DATA", __func__); - return -EINVAL; - } - if (ccmCfgSetInt(pHddCtx->hHal, - WNI_CFG_PROBE_RSP_BCN_ADDNIE_FLAG, 0, NULL, - eANI_BOOLEAN_FALSE) != eHAL_STATUS_SUCCESS) - { - hddLog (VOS_TRACE_LEVEL_ERROR, - "%s: unable to clear WNI_CFG_PROBE_RSP_BCN_ADDNIE_FLAG", - __func__); - return -EINVAL; - } - - // Reset WNI_CFG_PROBE_RSP Flags - wlan_hdd_reset_prob_rspies(pAdapter); - - if (ccmCfgSetInt(WLAN_HDD_GET_HAL_CTX(pAdapter), - WNI_CFG_PROBE_RSP_ADDNIE_FLAG, 0,NULL, - eANI_BOOLEAN_FALSE) == eHAL_STATUS_FAILURE) - { - hddLog (VOS_TRACE_LEVEL_ERROR, - "%s: unable to clear WNI_CFG_PROBE_RSP_ADDNIE_FLAG", - __func__); - return -EINVAL; - } -#endif - /* Issue Disconnect request */ INIT_COMPLETION(pAdapter->disconnect_comp_var); sme_RoamDisconnect( WLAN_HDD_GET_HAL_CTX(pAdapter), pAdapter->sessionId, @@ -7697,7 +7672,8 @@ static int wlan_hdd_cfg80211_set_pmksa(struct wiphy *wiphy, struct net_device *d tANI_U8 BSSIDMatched = 0; hdd_context_t *pHddCtx; - ENTER(); + hddLog(VOS_TRACE_LEVEL_DEBUG, "%s: set PMKSA for " MAC_ADDRESS_STR, + __func__, MAC_ADDR_ARRAY(pmksa->bssid)); // Validate pAdapter if ( NULL == pAdapter ) @@ -7785,8 +7761,8 @@ static int wlan_hdd_cfg80211_del_pmksa(struct wiphy *wiphy, struct net_device *d hdd_context_t *pHddCtx; int result = 0; - hddLog(VOS_TRACE_LEVEL_DEBUG, "%s: deleting PMKSA with PMKSA_ID %d .", - __func__,pmksa->pmkid); + hddLog(VOS_TRACE_LEVEL_DEBUG, "%s: deleting PMKSA for " MAC_ADDRESS_STR, + __func__, MAC_ADDR_ARRAY(pmksa->bssid)); /* Validate pAdapter */ if (NULL == pAdapter) @@ -7864,8 +7840,9 @@ static int wlan_hdd_cfg80211_del_pmksa(struct wiphy *wiphy, struct net_device *d /* we compare all entries,but cannot find matching entry */ if (j == MAX_PMKSAIDS_IN_CACHE && !BSSIDMatched) { - hddLog(VOS_TRACE_LEVEL_FATAL, "%s: No such PMKSA entry existed %d.", - __func__,pmksa->bssid); + hddLog(VOS_TRACE_LEVEL_FATAL, + "%s: No such PMKSA entry existed " MAC_ADDRESS_STR, + __func__, MAC_ADDR_ARRAY(pmksa->bssid)); dump_bssid(pmksa->bssid); dump_pmkid(halHandle, pmksa->pmkid); return -EINVAL; @@ -7976,13 +7953,39 @@ static int wlan_hdd_cfg80211_update_ft_ies(struct wiphy *wiphy, #endif #ifdef FEATURE_WLAN_SCAN_PNO +static int wlan_hdd_scan_abort(hdd_adapter_t *pAdapter) +{ + hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + hdd_scaninfo_t *pScanInfo = NULL; + int status = 0; + + pScanInfo = &pAdapter->scan_info; + + if (pScanInfo->mScanPending && pAdapter->request) + { + INIT_COMPLETION(pScanInfo->abortscan_event_var); + hdd_abort_mac_scan(pHddCtx, pAdapter->sessionId); + status = wait_for_completion_interruptible_timeout( + &pScanInfo->abortscan_event_var, + msecs_to_jiffies(5000)); + if ((!status) || (status == -ERESTARTSYS)) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: Timeout occurred while waiting for abort scan" , + __func__); + return -ETIME; + } + } + return 0; +} void hdd_cfg80211_sched_scan_done_callback(void *callbackContext, tSirPrefNetworkFoundInd *pPrefNetworkFoundInd) { int ret; hdd_adapter_t* pAdapter = (hdd_adapter_t*)callbackContext; hdd_context_t *pHddCtx; + hdd_scaninfo_t *pScanInfo = &pAdapter->scan_info; if (NULL == pAdapter) { @@ -8015,6 +8018,8 @@ void hdd_cfg80211_sched_scan_done_callback(void *callbackContext, if (0 > ret) hddLog(VOS_TRACE_LEVEL_INFO, "%s: NO SCAN result", __func__); + pScanInfo->mPnoScanPending = FALSE; + cfg80211_sched_scan_results(pHddCtx->wiphy); VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "%s: cfg80211 scan result database updated", __func__); @@ -8071,6 +8076,7 @@ static int wlan_hdd_cfg80211_sched_scan_start(struct wiphy *wiphy, v_U32_t num_channels_allowed = WNI_CFG_VALID_CHANNEL_LIST_LEN; eHalStatus status = eHAL_STATUS_FAILURE; int ret = 0; + hdd_scaninfo_t *pScanInfo = &pAdapter->scan_info; if (NULL == pAdapter) { @@ -8107,6 +8113,23 @@ static int wlan_hdd_cfg80211_sched_scan_start(struct wiphy *wiphy, return -EBUSY; } + /* + * The current umac is unable to handle the SCAN_PREEMPT and SCAN_DEQUEUED + * so its necessary to terminate the existing scan which is already issued + * otherwise the host won't enter into the suspend state due to the reason + * that the wlan wakelock which was held in the wlan_hdd_cfg80211_scan + * function. + */ + if (TRUE == pScanInfo->mScanPending) + { + ret = wlan_hdd_scan_abort(pAdapter); + if(ret < 0){ + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: aborting the existing scan is unsuccessfull", __func__); + return -EBUSY; + } + } + /* The current firmware design for PNO does not consider concurrent * active sessions.Hence , determine the concurrent active sessions * and return a failure to the framework on a request for schedule @@ -8260,6 +8283,8 @@ static int wlan_hdd_cfg80211_sched_scan_start(struct wiphy *wiphy, goto error; } + pScanInfo->mPnoScanPending = TRUE; + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "PNO scanRequest offloaded"); @@ -8281,6 +8306,7 @@ static int wlan_hdd_cfg80211_sched_scan_stop(struct wiphy *wiphy, tHalHandle hHal; tpSirPNOScanReq pPnoRequest = NULL; int ret = 0; + hdd_scaninfo_t *pScanInfo = &pAdapter->scan_info; ENTER(); @@ -8343,6 +8369,7 @@ static int wlan_hdd_cfg80211_sched_scan_stop(struct wiphy *wiphy, pPnoRequest->enable = 0; /* Disable PNO */ pPnoRequest->ucNetworksCount = 0; + status = sme_SetPreferredNetworkList(hHal, pPnoRequest, pAdapter->sessionId, NULL, pAdapter); @@ -8353,6 +8380,9 @@ static int wlan_hdd_cfg80211_sched_scan_stop(struct wiphy *wiphy, ret = -EINVAL; } + /* Allow normal scan to continue */ + pScanInfo->mPnoScanPending = FALSE; + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "%s: PNO scan disabled", __func__); @@ -8504,18 +8534,21 @@ static int wlan_hdd_cfg80211_tdls_mgmt(struct wiphy *wiphy, struct net_device *d } /* For explicit trigger of DIS_REQ come out of BMPS for - successfully receiving DIS_RSP from peer. - Fw will take care if PS offload is enabled. */ - if (((SIR_MAC_TDLS_SETUP_RSP == action_code) || + successfully receiving DIS_RSP from peer. */ + if ((SIR_MAC_TDLS_SETUP_RSP == action_code) || (SIR_MAC_TDLS_DIS_RSP == action_code) || - (SIR_MAC_TDLS_DIS_REQ == action_code)) && - !pHddCtx->cfg_ini->enablePowersaveOffload) + (SIR_MAC_TDLS_DIS_REQ == action_code)) { - if (TRUE == sme_IsPmcBmps(WLAN_HDD_GET_HAL_CTX(pAdapter))) + /* Fw will take care if PS offload is enabled. */ + if (!pHddCtx->cfg_ini->enablePowersaveOffload) { - VOS_TRACE( VOS_MODULE_ID_HDD, TDLS_LOG_LEVEL, - "%s: Sending frame action_code %u.Disable BMPS", __func__, action_code); - hdd_disable_bmps_imps(pHddCtx, WLAN_HDD_INFRA_STATION); + if (TRUE == sme_IsPmcBmps(WLAN_HDD_GET_HAL_CTX(pAdapter))) + { + VOS_TRACE(VOS_MODULE_ID_HDD, TDLS_LOG_LEVEL, + "%s: Sending frame action_code %u.Disable BMPS", + __func__, action_code); + hdd_disable_bmps_imps(pHddCtx, WLAN_HDD_INFRA_STATION); + } } if (SIR_MAC_TDLS_DIS_REQ != action_code) wlan_hdd_tdls_set_cap(pAdapter, peerMac, eTDLS_CAP_SUPPORTED); @@ -8551,7 +8584,7 @@ static int wlan_hdd_cfg80211_tdls_mgmt(struct wiphy *wiphy, struct net_device *d if ((rc <= 0) || (TRUE != pAdapter->mgmtTxCompletionStatus)) { VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: Mgmt Tx Completion failed status %ld TxCompletion %lu", + "%s: Mgmt Tx Completion failed status %ld TxCompletion %u", __func__, rc, pAdapter->mgmtTxCompletionStatus); pAdapter->mgmtTxCompletionStatus = FALSE; wlan_hdd_tdls_check_bmps(pAdapter); @@ -8592,6 +8625,10 @@ static int wlan_hdd_cfg80211_tdls_oper(struct wiphy *wiphy, struct net_device *d hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); hdd_context_t *pHddCtx = wiphy_priv(wiphy); int status; +#ifdef QCA_WIFI_2_0 + tSmeTdlsPeerStateParams smeTdlsPeerStateParams; + eHalStatus halStatus = eHAL_STATUS_FAILURE; +#endif #ifdef WLAN_FEATURE_TDLS_DEBUG const char *tdls_oper_str[]= { "NL80211_TDLS_DISCOVERY_REQ", @@ -8637,8 +8674,14 @@ static int wlan_hdd_cfg80211_tdls_oper(struct wiphy *wiphy, struct net_device *d tdls_oper_str[(int)oper]); #endif - if( FALSE == pHddCtx->cfg_ini->fEnableTDLSSupport || - FALSE == sme_IsFeatureSupportedByFW(TDLS)) + /* QCA 2.0 Discrete ANDs feature capability in cfg_ini with that + * received from target, so cfg_ini gives combined intersected result + */ + if ((FALSE == pHddCtx->cfg_ini->fEnableTDLSSupport) +#ifndef QCA_WIFI_2_0 + || (FALSE == sme_IsFeatureSupportedByFW(TDLS)) +#endif + ) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, "TDLS Disabled in INI OR not enabled in FW. " @@ -8689,10 +8732,15 @@ static int wlan_hdd_cfg80211_tdls_oper(struct wiphy *wiphy, struct net_device *d } } wlan_hdd_tdls_set_peer_link_status(pTdlsPeer, eTDLS_LINK_CONNECTED); +#ifdef QCA_WIFI_2_0 + /* start TDLS client registration with TL */ + status = hdd_roamRegisterTDLSSTA( pAdapter, peer, pTdlsPeer->staId, pTdlsPeer->signature); +#else /* Mark TDLS client Authenticated .*/ status = WLANTL_ChangeSTAState( pHddCtx->pvosContext, pTdlsPeer->staId, WLANTL_STA_AUTHENTICATED); +#endif /* QCA_WIFI_2_0 */ if (VOS_STATUS_SUCCESS == status) { if (pTdlsPeer->is_responder == 0) @@ -8707,6 +8755,27 @@ static int wlan_hdd_cfg80211_tdls_oper(struct wiphy *wiphy, struct net_device *d WLANTL_SuspendDataTx( (WLAN_HDD_GET_CTX(pAdapter))->pvosContext, &staId, NULL); } +#ifdef QCA_WIFI_2_0 + vos_mem_zero(&smeTdlsPeerStateParams, + sizeof(tSmeTdlsPeerStateParams)); + + smeTdlsPeerStateParams.vdevId = pAdapter->sessionId; + vos_mem_copy(&smeTdlsPeerStateParams.peerMacAddr, + &pTdlsPeer->peerMac, + sizeof(tSirMacAddr)); + smeTdlsPeerStateParams.peerState = + eSME_TDLS_PEER_STATE_CONNECTED; + halStatus = sme_UpdateTdlsPeerState(pHddCtx->hHal, + &smeTdlsPeerStateParams); + if (eHAL_STATUS_SUCCESS != halStatus) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: sme_UpdateTdlsPeerState failed for " + MAC_ADDRESS_STR, + __func__, MAC_ADDR_ARRAY(peer)); + return -EPERM; + } +#endif wlan_hdd_tdls_increment_peer_count(pAdapter); } wlan_hdd_tdls_check_bmps(pAdapter); diff --git a/CORE/HDD/src/wlan_hdd_debugfs.c b/CORE/HDD/src/wlan_hdd_debugfs.c index 51ebb0f1b3b1..d4ec4c1331bd 100644 --- a/CORE/HDD/src/wlan_hdd_debugfs.c +++ b/CORE/HDD/src/wlan_hdd_debugfs.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifdef WLAN_OPEN_SOURCE #include #include diff --git a/CORE/HDD/src/wlan_hdd_dev_pwr.c b/CORE/HDD/src/wlan_hdd_dev_pwr.c index 2aa5b450ad48..0c9e2127b86c 100644 --- a/CORE/HDD/src/wlan_hdd_dev_pwr.c +++ b/CORE/HDD/src/wlan_hdd_dev_pwr.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /**========================================================================= EDIT HISTORY FOR FILE diff --git a/CORE/HDD/src/wlan_hdd_dp_utils.c b/CORE/HDD/src/wlan_hdd_dp_utils.c index 081e78b73fe6..53c681d6c19c 100644 --- a/CORE/HDD/src/wlan_hdd_dp_utils.c +++ b/CORE/HDD/src/wlan_hdd_dp_utils.c @@ -24,17 +24,12 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /**============================================================================= wlan_hdd_dp_utils.c \brief Utility functions for data path module Description... - Copyright 2008 (c) Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary. - ==============================================================================**/ /* $HEADER$ */ diff --git a/CORE/HDD/src/wlan_hdd_early_suspend.c b/CORE/HDD/src/wlan_hdd_early_suspend.c index 38dc661a2046..a0f507b3ead0 100644 --- a/CORE/HDD/src/wlan_hdd_early_suspend.c +++ b/CORE/HDD/src/wlan_hdd_early_suspend.c @@ -24,17 +24,12 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /**============================================================================= * wlan_hdd_early_suspend.c * * \brief power management functions * * Description -* Copyright 2009 (c) Qualcomm Technologies, Inc. -* All Rights Reserved. -* Qualcomm Technologies Confidential and Proprietary. -* ==============================================================================**/ /* $HEADER$ */ @@ -426,7 +421,7 @@ VOS_STATUS hdd_exit_deep_sleep(hdd_context_t *pHddCtx, hdd_adapter_t *pAdapter) type, subType); if ( !HAL_STATUS_SUCCESS( halStatus ) ) { - hddLog(VOS_TRACE_LEVEL_FATAL,"sme_OpenSession() failed with status code %08d [x%08lx]", + hddLog(VOS_TRACE_LEVEL_FATAL,"sme_OpenSession() failed with status code %08d [x%08x]", halStatus, halStatus ); goto err_voss_stop; @@ -657,7 +652,7 @@ void hdd_conf_ns_offload(hdd_adapter_t *pAdapter, v_BOOL_t fenable) pHddCtx->sus_res_mcastbcast_filter))) { hddLog (VOS_TRACE_LEVEL_INFO, - "Set offLoadRequest with SIR_OFFLOAD_NS_AND_MCAST_FILTER_ENABLE \n", __func__); + "Set offLoadRequest with SIR_OFFLOAD_NS_AND_MCAST_FILTER_ENABLE \n"); offLoadRequest.enableOrDisable = SIR_OFFLOAD_NS_AND_MCAST_FILTER_ENABLE; } diff --git a/CORE/HDD/src/wlan_hdd_ftm.c b/CORE/HDD/src/wlan_hdd_ftm.c index 9911e32f4725..c5257e8cee61 100644 --- a/CORE/HDD/src/wlan_hdd_ftm.c +++ b/CORE/HDD/src/wlan_hdd_ftm.c @@ -24,17 +24,12 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /**======================================================================== \file wlan_hdd_ftm.c \brief This file contains the WLAN factory test mode implementation - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ /**========================================================================= diff --git a/CORE/HDD/src/wlan_hdd_hostapd.c b/CORE/HDD/src/wlan_hdd_hostapd.c index 9531927aaf3f..9ac914c705aa 100644 --- a/CORE/HDD/src/wlan_hdd_hostapd.c +++ b/CORE/HDD/src/wlan_hdd_hostapd.c @@ -24,16 +24,11 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /**======================================================================== \file wlan_hdd_hostapd.c \brief WLAN Host Device Driver implementation - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ /**========================================================================= EDIT HISTORY FOR FILE @@ -484,7 +479,7 @@ VOS_STATUS hdd_hostapd_SAPEventCB( tpSap_Event pSapEvent, v_PVOID_t usrDataForCa switch(sapEvent) { case eSAP_START_BSS_EVENT : - hddLog(LOG1, FL("BSS configured status = %s, channel = %lu, bc sta Id = %d\n"), + hddLog(LOG1, FL("BSS configured status = %s, channel = %u, bc sta Id = %d\n"), pSapEvent->sapevt.sapStartBssCompleteEvent.status ? "eSAP_STATUS_FAILURE" : "eSAP_STATUS_SUCCESS", pSapEvent->sapevt.sapStartBssCompleteEvent.operatingChannel, pSapEvent->sapevt.sapStartBssCompleteEvent.staId); @@ -3392,7 +3387,7 @@ VOS_STATUS hdd_init_ap_mode( hdd_adapter_t *pAdapter ) if (!VOS_IS_STATUS_SUCCESS(status)) { hddLog(VOS_TRACE_LEVEL_ERROR, - "hdd_wmm_adapter_init() failed with status code %08d [x%08lx]", + "hdd_wmm_adapter_init() failed with status code %08d [x%08x]", status, status ); goto error_wmm_init; } diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c index b93f8837fbc4..23e04374639b 100644 --- a/CORE/HDD/src/wlan_hdd_main.c +++ b/CORE/HDD/src/wlan_hdd_main.c @@ -24,17 +24,12 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /*======================================================================== \file wlan_hdd_main.c \brief WLAN Host Device Driver implementation - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ /**========================================================================= @@ -107,6 +102,13 @@ int wlan_hdd_ftm_start(hdd_context_t *pAdapter); #ifdef FEATURE_WLAN_TDLS #include "wlan_hdd_tdls.h" #endif +#ifdef FEATURE_WLAN_CH_AVOID +#include +/* Channle/Freqency table */ +extern const tRfChannelProps rfChannels[NUM_RF_CHANNELS]; +extern int hdd_hostapd_stop (struct net_device *dev); +void hdd_ch_avoid_cb(void *hdd_context,void *indi_param); +#endif /* FEATURE_WLAN_CH_AVOID */ #include "wlan_hdd_debugfs.h" #if defined(QCA_WIFI_2_0) && !defined(QCA_WIFI_ISOC) @@ -161,16 +163,6 @@ static int wlan_hdd_inited; #define SIZE_OF_SETROAMMODE 11 /* size of SETROAMMODE */ #define SIZE_OF_GETROAMMODE 11 /* size of GETROAMMODE */ -#ifdef FEATURE_CESIUM_PROPRIETARY -/* - * Ibss prop IE from command will be of size 5 + 1(Element ID) + 1(length) - */ -#define WLAN_HDD_IBSS_PROP_IE_SIZE 7 -#define WLAN_HDD_IBSS_PROP_VENDOR_ID 0xDD -#define WLAN_HDD_IBSS_PROP_OUI_DATA_LEN 0x05 -static tANI_U8 ibssPropIe[3] = {0x00,0x16,0x32}; -#endif - #if defined(FEATURE_WLAN_CCX) && defined(FEATURE_WLAN_CCX_UPLOAD) #define TID_MIN_VALUE 0 #define TID_MAX_VALUE 15 @@ -199,10 +191,6 @@ static VOS_STATUS hdd_parse_ccx_beacon_req(tANI_U8 *pValue, */ #define NUM_OF_STA_DATA_TO_PRINT 16 -#ifdef FEATURE_CESIUM_PROPRIETARY -#define WLAN_NLINK_CESIUM 30 -#endif - #ifdef WLAN_OPEN_SOURCE static struct wake_lock wlan_wake_lock; #endif @@ -214,31 +202,12 @@ static VOS_STATUS wlan_hdd_framework_restart(hdd_context_t *pHddCtx); static void wlan_hdd_restart_init(hdd_context_t *pHddCtx); static void wlan_hdd_restart_deinit(hdd_context_t *pHddCtx); -#ifdef FEATURE_CESIUM_PROPRIETARY -static void hdd_tx_fail_ind_callback(v_U8_t *MacAddr, v_U8_t seqNo); - -static int hdd_open_cesium_nl_sock(void); -static void hdd_close_cesium_nl_sock(void); -static struct sock *cesium_nl_srv_sock; -static v_U16_t cesium_pid; - -static int hdd_ParseIBSSTXFailEventParams(tANI_U8 *pValue, - tANI_U8 *tx_fail_count, - tANI_U16 *pid); - -static int hdd_ParseUserParams(tANI_U8 *pValue, tANI_U8 **ppArg); - -#endif /* FEATURE_CESIUM_PROPRIETARY */ void wlan_hdd_restart_timer_cb(v_PVOID_t usrDataForCallback); void hdd_set_wlan_suspend_mode(bool suspend); v_U16_t hdd_select_queue(struct net_device *dev, struct sk_buff *skb); -#ifdef FEATURE_CESIUM_PROPRIETARY -int hdd_updateIbssRouteTable(tHalHandle hHal, tANI_U8 *ptr); -#endif - #ifdef WLAN_FEATURE_PACKET_FILTERING static void hdd_set_multicast_list(struct net_device *dev); #endif @@ -698,174 +667,174 @@ void hdd_checkandupdate_dfssetting( hdd_adapter_t *pAdapter, char *country_code) } -#ifdef WLAN_FEATURE_RELIABLE_MCAST -/**--------------------------------------------------------------------------- +#ifdef FEATURE_WLAN_BATCH_SCAN - \brief hdd_parse_setrmc_command() - HDD Parse reliable multicast command +/**--------------------------------------------------------------------------- - This function parses the setrmcenable command passed in the format - SETRMCENABLE1(to enable RMC) OR 0(to disable RMC) if no value is - defined then default 0 is assumed - For example input commands: - 1) SETRMCENABLE 1 -> This is translated into enable reliable multicast - 2) SETRMCENABLE 0 -> This is translated into disable reliable multicast - 2) SETRMCENABLE -> This is translated into disable reliable multicast + \brief hdd_extract_assigned_int_from_str() - Extracts assigned integer from + input string - \param - pValue Pointer to setrmcenable command - \param - pRmcEnable Pointer to local RMC enable variable + This function extracts assigned integer from string in below format: + "STRING=10" : extracts integer 10 from this string - \return - 0 for success non-zero for failure + \param - pInPtr Pointer to input string + \param - base Base for string to int conversion(10 for decimal 16 for hex) + \param - pOutPtr Pointer to variable in which extracted integer needs to be + assigned + \param - pLastArg to tell whether it is last arguement in input string or + not + \return - NULL for failure cases + pointer to next arguement in input string for success cases --------------------------------------------------------------------------*/ -static int hdd_parse_setrmcenable_command(tANI_U8 *pValue, tANI_U8 *pRmcEnable) +static tANI_U8 * +hdd_extract_assigned_int_from_str +( + tANI_U8 *pInPtr, + tANI_U8 base, + tANI_U32 *pOutPtr, + tANI_U8 *pLastArg +) { - tANI_U8 *inPtr = pValue; int tempInt; int v = 0; char buf[32]; - *pRmcEnable = 0; + int val = 0; + *pLastArg = FALSE; - inPtr = strnchr(pValue, strlen(pValue), SPACE_ASCII_VALUE); - /*no argument after the command*/ - if (NULL == inPtr) + pInPtr = strnchr(pInPtr, strlen(pInPtr), EQUALS_TO_ASCII_VALUE); + if (NULL == pInPtr) { - return 0; + return NULL; } - /*no space after the command*/ - else if (SPACE_ASCII_VALUE != *inPtr) - { - return 0; - } + pInPtr++; - /*removing empty spaces*/ - while ((SPACE_ASCII_VALUE == *inPtr) && ('\0' != *inPtr)) inPtr++; + while ((SPACE_ASCII_VALUE == *pInPtr) && ('\0' != *pInPtr)) pInPtr++; - /*no argument followed by spaces*/ - if ('\0' == *inPtr) + val = sscanf(pInPtr, "%32s ", buf); + if (val < 0 && val > strlen(pInPtr)) { - return 0; + return NULL; } - - /*getting the first argument which enables or disables reliable - multicast for input IP v4 address*/ - sscanf(inPtr, "%32s ", buf); - v = kstrtos32(buf, 10, &tempInt); - if ( v < 0) + pInPtr += val; + v = kstrtos32(buf, base, &tempInt); + if (v < 0) { - return -EINVAL; + return NULL; } + *pOutPtr = tempInt; - *pRmcEnable = tempInt; - - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "ucRmcEnable: %d", *pRmcEnable); + pInPtr = strnchr(pInPtr, strlen(pInPtr), SPACE_ASCII_VALUE); + if (NULL == pInPtr) + { + *pLastArg = TRUE; + return NULL; + } + while ((SPACE_ASCII_VALUE == *pInPtr) && ('\0' != *pInPtr)) pInPtr++; - return 0; + return pInPtr; } -/**--------------------------------------------------------------------------- - \brief hdd_parse_setrmcactionperiod_command() - HDD Parse reliable multicast - action period command +/**--------------------------------------------------------------------------- - This function parses the setrmcactionperiod command passed in the format - SETRMCACTIONPERIODX(action period X) - For example input commands: - 1) SETRMCACTIONPERIOD 20 -> This is translated into set RMC action period - frequency to 20 - 1) SETRMCACTIONPERIOD 10 -> This is translated into set RMC action period - frequency to 10 + \brief hdd_extract_assigned_char_from_str() - Extracts assigned char from + input string - \param - pValue Pointer to setrmcactionperiod command - \param - pActionPeriod Pointer to local RMC action period variable + This function extracts assigned character from string in below format: + "STRING=A" : extracts char 'A' from this string - \return - 0 for success non-zero for failure + \param - pInPtr Pointer to input string + \param - pOutPtr Pointer to variable in which extracted char needs to be + assigned + \param - pLastArg to tell whether it is last arguement in input string or + not + \return - NULL for failure cases + pointer to next arguement in input string for success cases --------------------------------------------------------------------------*/ -static int hdd_parse_setrmcactionperiod_command(tANI_U8 *pValue, - tANI_U32 *pActionPeriod) +static tANI_U8 * +hdd_extract_assigned_char_from_str +( + tANI_U8 *pInPtr, + tANI_U8 *pOutPtr, + tANI_U8 *pLastArg +) { - tANI_U8 *inPtr = pValue; - int tempInt; - int v = 0; - char buf[32]; - *pActionPeriod = 0; - - inPtr = strnchr(pValue, strlen(pValue), SPACE_ASCII_VALUE); - /*no argument after the command*/ - if (NULL == inPtr) - { - return -EINVAL; - } + *pLastArg = FALSE; - /*no space after the command*/ - else if (SPACE_ASCII_VALUE != *inPtr) + pInPtr = strnchr(pInPtr, strlen(pInPtr), EQUALS_TO_ASCII_VALUE); + if (NULL == pInPtr) { - return -EINVAL; + return NULL; } - /*removing empty spaces*/ - while ((SPACE_ASCII_VALUE == *inPtr) && ('\0' != *inPtr)) inPtr++; + pInPtr++; - /*no argument followed by spaces*/ - if ('\0' == *inPtr) - { - return 0; - } + while ((SPACE_ASCII_VALUE == *pInPtr) && ('\0' != *pInPtr)) pInPtr++; - /*getting the first argument which enables or disables reliable - multicast for input IP v4 address*/ - sscanf(inPtr, "%32s ", buf); - v = kstrtos32(buf, 10, &tempInt); - if ( v < 0) - { - return -EINVAL; - } + *pOutPtr = *pInPtr; - /* Range checking for passed paramter */ - if (tempInt < WNI_CFG_RMC_ACTION_PERIOD_FREQUENCY_STAMIN) + pInPtr = strnchr(pInPtr, strlen(pInPtr), SPACE_ASCII_VALUE); + if (NULL == pInPtr) { - return -EINVAL; + *pLastArg = TRUE; + return NULL; } + while ((SPACE_ASCII_VALUE == *pInPtr) && ('\0' != *pInPtr)) pInPtr++; - *pActionPeriod = tempInt; - - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "uActionPeriod: %d", *pActionPeriod); - - return 0; + return pInPtr; } + /**--------------------------------------------------------------------------- - \brief hdd_parse_setrmcrate_command() - HDD Parse reliable multicast - set rate command + \brief hdd_parse_set_batchscan_command () - HDD parse set batch scan command + + This function parses set batch scan command in below format: + WLS_BATCHING_SET followed by below arguements + "SCANFREQ=XX" : Optional defaults to 30 sec + "MSCAN=XX" : Required number of scans to attempt to batch + "BESTN=XX" : Best Network (RSSI) defaults to 16 + "CHANNEL=" : optional defaults to all channels, can list 'A'or` B. + A. implies only 5 GHz , B. implies only 2.4GHz + "RTT=X" : optional defaults to 0 + returns the MIN of MSCAN or the max # of scans firmware can cache or -1 on + error - This function parses the SETRMCTXRATE command passed in the format - SETRMCTXRATEX(multicast rate in Mbps) For example input commands: - 1) SETRMCTXRATE 6 -> This is translated into set RMC multicast rate - to 6 Mbps - 1) SETRMCTXRATE 0 -> This is translated into disabling fixed multicast rate - and enabling multicast RA in firmware + 1) WLS_BATCHING_SET SCANFREQ=60 MSCAN=10 BESTN=20 CHANNEL=A RTT=0 -> This is + translated into set batch scan with following parameters: + a) Frequence 60 seconds + b) Batch 10 scans together + c) Best RSSI to be 20 + d) 5GHz band only + e) RTT is equal to 0 - \param - pValue Pointer to SETRMCTXRATE command - \param - pRate Pointer to local RMC multicast rate variable - \param - pTxFlags Pointer to local RMC multicast rate variable + \param - pValue Pointer to input channel list + \param - pHddSetBatchScanReq Pointer to HDD batch scan request structure \return - 0 for success non-zero for failure --------------------------------------------------------------------------*/ -static int hdd_parse_setrmcrate_command(tANI_U8 *pValue, - tANI_U32 *pRate, tTxrateinfoflags *pTxFlags) +static int +hdd_parse_set_batchscan_command +( + tANI_U8 *pValue, + tSirSetBatchScanReq *pHddSetBatchScanReq +) { tANI_U8 *inPtr = pValue; - int tempInt; - int v = 0; - char buf[32]; - *pRate = 0; - *pTxFlags = 0; + tANI_U8 val = 0; + tANI_U8 lastArg = 0; + tANI_U32 nScanFreq = HDD_SET_BATCH_SCAN_DEFAULT_FREQ; + tANI_U32 nMscan; + tANI_U32 nBestN = HDD_SET_BATCH_SCAN_BEST_NETWORK; + tANI_U8 ucRfBand = HDD_SET_BATCH_SCAN_DEFAULT_BAND; + tANI_U32 nRtt = 0; + tANI_U32 temp; + /*go to space after WLS_BATCHING_SET command*/ inPtr = strnchr(pValue, strlen(pValue), SPACE_ASCII_VALUE); /*no argument after the command*/ if (NULL == inPtr) @@ -885,2119 +854,1095 @@ static int hdd_parse_setrmcrate_command(tANI_U8 *pValue, /*no argument followed by spaces*/ if ('\0' == *inPtr) { - return 0; + return -EINVAL; } - /* - * getting the first argument which sets multicast rate. - */ - sscanf(inPtr, "%32s ", buf); - v = kstrtos32(buf, 10, &tempInt); - if ( v < 0) + /*check and parse SCANFREQ*/ + if ((strncmp(inPtr, "SCANFREQ", 8) == 0)) { - return -EINVAL; + inPtr = hdd_extract_assigned_int_from_str(inPtr, 10, + &temp, &lastArg); + + if (0 != temp) + { + nScanFreq = temp; + } + + if ( (NULL == inPtr) || (TRUE == lastArg)) + { + return -EINVAL; + } } - /* - * Validate the multicast rate. - */ - switch (tempInt) + /*check and parse MSCAN*/ + if ((strncmp(inPtr, "MSCAN", 5) == 0)) { - default: - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, - "Unsupported rate: %d", tempInt); + inPtr = hdd_extract_assigned_int_from_str(inPtr, 10, + &nMscan, &lastArg); + + if (0 == nMscan) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "invalid MSCAN=%d", nMscan); return -EINVAL; - case 0: - case 6: - case 9: - case 12: - case 18: - case 24: - case 36: - case 48: - case 54: - *pTxFlags = eHAL_TX_RATE_LEGACY; - *pRate = tempInt * 10; - break; - case 65: - *pTxFlags = eHAL_TX_RATE_HT20; - *pRate = tempInt * 10; - break; - case 72: - *pTxFlags = eHAL_TX_RATE_HT20 | eHAL_TX_RATE_SGI; - *pRate = 722; /* fractional rate 72.2 Mbps */ - break; + } + + if (TRUE == lastArg) + { + goto done; + } + else if (NULL == inPtr) + { + return -EINVAL; + } + } + else + { + return -EINVAL; } - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "Rate: %d", *pRate); + /*check and parse BESTN*/ + if ((strncmp(inPtr, "BESTN", 5) == 0)) + { + inPtr = hdd_extract_assigned_int_from_str(inPtr, 10, + &temp, &lastArg); - return 0; -} -#endif /*End WLAN_FEATURE_RELIABLE_MCAST*/ + if (0 != temp) + { + nBestN = temp; + } -#ifdef FEATURE_CESIUM_PROPRIETARY -/**--------------------------------------------------------------------------- + if (TRUE == lastArg) + { + goto done; + } + else if (NULL == inPtr) + { + return -EINVAL; + } + } - \brief hdd_cfg80211_get_ibss_peer_info_cb() - Callback function for IBSS - Peer Info request + /*check and parse CHANNEL*/ + if ((strncmp(inPtr, "CHANNEL", 7) == 0)) + { + inPtr = hdd_extract_assigned_char_from_str(inPtr, &val, &lastArg); + + if (('A' == val) || ('a' == val)) + { + ucRfBand = HDD_SET_BATCH_SCAN_24GHz_BAND_ONLY; + } + else if (('B' == val) || ('b' == val)) + { + ucRfBand = HDD_SET_BATCH_SCAN_5GHz_BAND_ONLY; + } + else + { + ucRfBand = HDD_SET_BATCH_SCAN_DEFAULT_BAND; + } - This is an asynchronous callback function from SME when the peer info - is received + if (TRUE == lastArg) + { + goto done; + } + else if (NULL == inPtr) + { + return -EINVAL; + } + } - \pUserData -> Adapter private data - \pPeerInfoRsp -> Peer info response + /*check and parse RTT*/ + if ((strncmp(inPtr, "RTT", 3) == 0)) + { + inPtr = hdd_extract_assigned_int_from_str(inPtr, 10, + &nRtt, &lastArg); + if (TRUE == lastArg) + { + goto done; + } + if (NULL == inPtr) + { + return -EINVAL; + } + } - \return - 0 for success non-zero for failure - --------------------------------------------------------------------------*/ -static void -hdd_cfg80211_get_ibss_peer_info_cb(v_VOID_t *pUserData, v_VOID_t *pPeerInfoRsp) -{ - hdd_adapter_t *pAdapter = (hdd_adapter_t *)pUserData; - hdd_ibss_peer_info_t *pPeerInfo = (hdd_ibss_peer_info_t *)pPeerInfoRsp; - hdd_station_ctx_t *pStaCtx; - v_U8_t i; - /*Sanity check*/ - if ((NULL == pAdapter) || (WLAN_HDD_ADAPTER_MAGIC != pAdapter->magic)) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "invalid adapter or adapter has invalid magic"); - return; - } +done: - pStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); - if (NULL != pStaCtx && NULL != pPeerInfo && - eHAL_STATUS_SUCCESS == pPeerInfo->status) - { - pStaCtx->ibss_peer_info.status = pPeerInfo->status; - pStaCtx->ibss_peer_info.numIBSSPeers = pPeerInfo->numIBSSPeers; + pHddSetBatchScanReq->scanFrequency = nScanFreq; + pHddSetBatchScanReq->numberOfScansToBatch = nMscan; + pHddSetBatchScanReq->bestNetwork = nBestN; + pHddSetBatchScanReq->rfBand = ucRfBand; + pHddSetBatchScanReq->rtt = nRtt; - /* Paranoia check */ - if (pPeerInfo->numIBSSPeers < HDD_MAX_NUM_IBSS_STA) - { - for (i = 0; i < pPeerInfo->numIBSSPeers; i++) - { - memcpy(&pStaCtx->ibss_peer_info.ibssPeerList[i], - &pPeerInfo->ibssPeerList[i], - sizeof(hdd_ibss_peer_info_params_t)); - } - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s] Peer Info copied in HDD"); - } - else - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s] Number of peers %d returned is more than limit %d", - __func__, pPeerInfo->numIBSSPeers, HDD_MAX_NUM_IBSS_STA); - } - } - else - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s] peerInfo returned is NULL", __func__); - } + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "Received WLS_BATCHING_SET with SCANFREQ=%d " + "MSCAN=%d BESTN=%d CHANNEL=%d RTT=%d", + pHddSetBatchScanReq->scanFrequency, + pHddSetBatchScanReq->numberOfScansToBatch, + pHddSetBatchScanReq->bestNetwork, + pHddSetBatchScanReq->rfBand, + pHddSetBatchScanReq->rtt); - complete(&pAdapter->ibss_peer_info_comp); -} + return 0; +}/*End of hdd_parse_set_batchscan_command*/ /**--------------------------------------------------------------------------- - \brief hdd_cfg80211_get_ibss_peer_info_all() - + \brief hdd_set_batch_scan_req_callback () - This function is called after + receiving set batch scan response from FW and it saves set batch scan + response data FW to HDD context and sets the completion event on + which hdd_ioctl is waiting - Request function to get IBSS peer info from lower layers + \param - callbackContext Pointer to HDD adapter + \param - pRsp Pointer to set batch scan response data received from FW - \pAdapter -> Adapter context + \return - nothing - \return - 0 for success non-zero for failure --------------------------------------------------------------------------*/ -static -VOS_STATUS hdd_cfg80211_get_ibss_peer_info_all(hdd_adapter_t *pAdapter) +static void hdd_set_batch_scan_req_callback +( + void *callbackContext, + tSirSetBatchScanRsp *pRsp +) { - tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(pAdapter); - int status; - VOS_STATUS retStatus = VOS_STATUS_E_FAILURE; + hdd_adapter_t* pAdapter = (hdd_adapter_t*)callbackContext; + tSirSetBatchScanRsp *pHddSetBatchScanRsp; - INIT_COMPLETION(pAdapter->ibss_peer_info_comp); + /*sanity check*/ + if (WLAN_HDD_ADAPTER_MAGIC != pAdapter->magic) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: Invalid pAdapter magic", __func__); + VOS_ASSERT(0); + return; + } + pHddSetBatchScanRsp = &pAdapter->hddSetBatchScanRsp; - retStatus = sme_RequestIBSSPeerInfo(hHal, pAdapter, - hdd_cfg80211_get_ibss_peer_info_cb, - VOS_TRUE, 0xFF); + /*save set batch scan response*/ + pHddSetBatchScanRsp->nScansToBatch = pRsp->nScansToBatch; - if (VOS_STATUS_SUCCESS == retStatus) - { - status = wait_for_completion_interruptible_timeout - (&pAdapter->ibss_peer_info_comp, - msecs_to_jiffies(IBSS_PEER_INFO_REQ_TIMOEUT)); + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, + "Received set batch scan rsp from FW with nScansToBatch=%d", + pHddSetBatchScanRsp->nScansToBatch); - /* status will be 0 if timed out */ - if (status <= 0) - { - hddLog(VOS_TRACE_LEVEL_WARN, "%s: Warning: IBSS_PEER_INFO_TIMEOUT", - __func__); - retStatus = VOS_STATUS_E_FAILURE; - return retStatus; - } - } - else - { - hddLog(VOS_TRACE_LEVEL_WARN, - "%s: Warning: sme_RequestIBSSPeerInfo Request failed", __func__); - } + pAdapter->hdd_wait_for_set_batch_scan_rsp = FALSE; + complete(&pAdapter->hdd_set_batch_scan_req_var); + + return; +}/*End of hdd_set_batch_scan_req_callback*/ - return retStatus; -} /**--------------------------------------------------------------------------- - \brief hdd_cfg80211_get_ibss_peer_info() - + \brief hdd_populate_batch_scan_rsp_queue () - This function stores AP meta + info in hdd batch scan response queue - Request function to get IBSS peer info from lower layers + \param - pAdapter Pointer to hdd adapter + \param - pAPMetaInfo Pointer to access point meta info + \param - scanId scan ID of batch scan response + \param - isLastAp tells whether AP is last AP in batch scan response or not - \pAdapter -> Adapter context - \staIdx -> Sta index for which the peer info is requested + \return - nothing - \return - 0 for success non-zero for failure --------------------------------------------------------------------------*/ -static VOS_STATUS -hdd_cfg80211_get_ibss_peer_info(hdd_adapter_t *pAdapter, v_U8_t staIdx) +static void hdd_populate_batch_scan_rsp_queue( hdd_adapter_t* pAdapter, + tpSirBatchScanNetworkInfo pApMetaInfo, tANI_U32 scanId, v_BOOL_t isLastAp) { - int status; - tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(pAdapter); - VOS_STATUS retStatus = VOS_STATUS_E_FAILURE; + tHddBatchScanRsp *pHead; + tHddBatchScanRsp *pNode; + tHddBatchScanRsp *pPrev; + tHddBatchScanRsp *pTemp; + tANI_U8 ssidLen; - INIT_COMPLETION(pAdapter->ibss_peer_info_comp); + /*head of hdd batch scan response queue*/ + pHead = pAdapter->pBatchScanRsp; - retStatus = sme_RequestIBSSPeerInfo(hHal, pAdapter, - hdd_cfg80211_get_ibss_peer_info_cb, - VOS_FALSE, staIdx); + pNode = (tHddBatchScanRsp *)vos_mem_malloc(sizeof(tHddBatchScanRsp)); + if (NULL == pNode) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: Could not allocate memory", __func__); + VOS_ASSERT(0); + return; + } - if (VOS_STATUS_SUCCESS == retStatus) + vos_mem_copy(pNode->ApInfo.bssid, pApMetaInfo->bssid, + sizeof(pNode->ApInfo.bssid)); + ssidLen = strlen(pApMetaInfo->ssid); + if (SIR_MAX_SSID_SIZE < ssidLen) { - status = wait_for_completion_interruptible_timeout - (&pAdapter->ibss_peer_info_comp, - msecs_to_jiffies(IBSS_PEER_INFO_REQ_TIMOEUT)); + /*invalid scan result*/ + vos_mem_free(pNode); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: Invalid AP meta info ssidlen %d", __func__, ssidLen); + return; + } + vos_mem_copy(pNode->ApInfo.ssid, pApMetaInfo->ssid, ssidLen); + /*null terminate ssid*/ + pNode->ApInfo.ssid[ssidLen] = '\0'; + pNode->ApInfo.ch = pApMetaInfo->ch; + pNode->ApInfo.rssi = pApMetaInfo->rssi; + pNode->ApInfo.age = pApMetaInfo->timestamp; + pNode->ApInfo.batchId = scanId; + pNode->ApInfo.isLastAp = isLastAp; - /* status = 0 on timeout */ - if (status <= 0) - { - hddLog(VOS_TRACE_LEVEL_WARN, "%s: Warning: IBSS_PEER_INFO_TIMEOUT", - __func__); - retStatus = VOS_STATUS_E_FAILURE; - return retStatus; - } + pNode->pNext = NULL; + if (NULL == pHead) + { + pAdapter->pBatchScanRsp = pNode; } else { - hddLog(VOS_TRACE_LEVEL_WARN, - "%s: Warning: sme_RequestIBSSPeerInfo Request failed", __func__); + pTemp = pHead; + while (NULL != pTemp) + { + pPrev = pTemp; + pTemp = pTemp->pNext; + } + pPrev->pNext = pNode; } - return retStatus; -} + return; +}/*End of hdd_populate_batch_scan_rsp_queue*/ /**--------------------------------------------------------------------------- - \brief hdd_parse_get_ibss_peer_info - HDD Parse get ibss peer info all + \brief hdd_batch_scan_result_ind_callback () - This function is called after + receiving batch scan response indication from FW. It saves get batch scan + response data in HDD batch scan response queue. This callback sets the + completion event on which hdd_ioctl is waiting only after getting complete + batch scan response data from FW - This function parses the send action frame data passed in the format - GETIBSSPEERINFOALL + \param - callbackContext Pointer to HDD adapter + \param - pRsp Pointer to get batch scan response data received from FW - \param - pValue Pointer to input data - \param - pPeerMacAddr pointer to peer mac address - \return - 0 for success non-zero for failure + \return - nothing --------------------------------------------------------------------------*/ -VOS_STATUS -hdd_parse_get_ibss_peer_info(tANI_U8 *pValue, v_MACADDR_t *pPeerMacAddr) +static void hdd_batch_scan_result_ind_callback +( + void *callbackContext, + void *pRsp +) { - tANI_U8 *inPtr = pValue; - inPtr = strnchr(pValue, strlen(pValue), SPACE_ASCII_VALUE); + v_BOOL_t isLastAp; + tANI_U32 numApMetaInfo; + tANI_U32 numberScanList; + tANI_U32 nextScanListOffset; + tANI_U32 nextApMetaInfoOffset; + hdd_adapter_t* pAdapter; + tpSirBatchScanList pScanList; + tpSirBatchScanNetworkInfo pApMetaInfo; + tpSirBatchScanResultIndParam pBatchScanRsp;/*batch scan rsp data from FW*/ + tSirSetBatchScanReq *pReq; - /*no argument after the command*/ - if (NULL == inPtr) - { - return VOS_STATUS_E_FAILURE;; - } - - /*no space after the command*/ - else if (SPACE_ASCII_VALUE != *inPtr) - { - return VOS_STATUS_E_FAILURE;; - } - - /*removing empty spaces*/ - while ((SPACE_ASCII_VALUE == *inPtr) && ('\0' != *inPtr) ) inPtr++; - - /*no argument followed by spaces*/ - if ('\0' == *inPtr) - { - return VOS_STATUS_E_FAILURE;; - } - - /*getting the first argument ie the peer mac address */ - if (inPtr[2] != ':' || inPtr[5] != ':' || inPtr[8] != ':' || - inPtr[11] != ':' || inPtr[14] != ':') - { - return VOS_STATUS_E_FAILURE;; - } - sscanf(inPtr, "%2x:%2x:%2x:%2x:%2x:%2x", - (unsigned int *)&pPeerMacAddr->bytes[0], - (unsigned int *)&pPeerMacAddr->bytes[1], - (unsigned int *)&pPeerMacAddr->bytes[2], - (unsigned int *)&pPeerMacAddr->bytes[3], - (unsigned int *)&pPeerMacAddr->bytes[4], - (unsigned int *)&pPeerMacAddr->bytes[5]); - - /* The command buffer seems to be fine */ - return VOS_STATUS_SUCCESS; -} - -/**--------------------------------------------------------------------------- - - \brief hdd_updateIbssRouteTable - update IBSS route table in f/w. - - This function parses the sends IBSS table command to f/w. - - \param - hHal: HAL handle - \ptr - pointer having the command followed by the arguments in - string format - \return - return 0 when success else returns error code. - - --------------------------------------------------------------------------*/ -int hdd_updateIbssRouteTable(tHalHandle hHal, tANI_U8 *ptr) -{ - tANI_U8 *param; - int numOfEntries; - tAniIbssRouteTable *pIbssRouteTable = NULL; - tAniDestIpNextHopMacPair *pairPtr = NULL; - tANI_U32 usAniIbssRouteTableSize; - int j; - int ret = 0; - eHalStatus status = eHAL_STATUS_FAILURE; - - if (!hHal) - return -EINVAL; - - param = strchr(ptr, ' '); - if (NULL == param) - { - /* no argument after the command */ - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: no arguments after command name", __func__); - return -EINVAL; - } - else if (SPACE_ASCII_VALUE != *param) - { - /* no space after the command */ - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: no space after command name", __func__); - return -EINVAL; - } - - param++; - - /* remove empty spaces */ - while ((SPACE_ASCII_VALUE == *param) && ('\0' != *param)) - { - param++; - } - - /* no argument followed by spaces */ - if ('\0' == *param) + pAdapter = (hdd_adapter_t *)callbackContext; + /*sanity check*/ + if ((NULL == pAdapter) || (WLAN_HDD_ADAPTER_MAGIC != pAdapter->magic)) { VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: no arguments followed by space after command name", - __func__); - return -EINVAL; + "%s: Invalid pAdapter magic", __func__); + VOS_ASSERT(0); + return; } - /* get the first argument, i.e. the number of entries */ - sscanf(param, "%d ", &numOfEntries); + /*initialize locals*/ + pReq = &pAdapter->hddSetBatchScanReq; + pBatchScanRsp = (tpSirBatchScanResultIndParam)pRsp; + isLastAp = FALSE; + numApMetaInfo = 0; + numberScanList = 0; + nextScanListOffset = 0; + nextApMetaInfoOffset = 0; + pScanList = NULL; + pApMetaInfo = NULL; - if (ANI_MAX_IBSS_ROUTE_TABLE_ENTRY < numOfEntries) + if ((NULL == pBatchScanRsp) || (NULL == pReq)) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: numOfEntries(%d) is greater than max allowed value (%d)", - numOfEntries, ANI_MAX_IBSS_ROUTE_TABLE_ENTRY); - return -EINVAL; + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: pBatchScanRsp is %p pReq %p", __func__, pBatchScanRsp, pReq); + isLastAp = TRUE; + goto done; } - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: Number of entries: %d", __func__, numOfEntries); - - usAniIbssRouteTableSize = sizeof(tAniIbssRouteTable) + ((numOfEntries - 1) - * sizeof(tAniDestIpNextHopMacPair)); - - pIbssRouteTable = vos_mem_malloc(usAniIbssRouteTableSize); + pAdapter->numScanList = numberScanList = pBatchScanRsp->numScanLists; + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "Batch scan rsp: numberScalList %d", numberScanList); - if (!pIbssRouteTable) + if ((!numberScanList) || (numberScanList > pReq->numberOfScansToBatch)) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: mem alloc failed", __func__); - return -EINVAL; + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: numberScanList %d", __func__, numberScanList); + isLastAp = TRUE; + goto done; } - pIbssRouteTable->numEntries = numOfEntries; - - for (j = 0; j < numOfEntries; j++) + while (numberScanList) { - pairPtr = &pIbssRouteTable->destIpNextHopPair[j]; - - /* param points to the beginning of first space after num of entries */ - param = strpbrk(param, " "); - - /* no argument after the number of entries argument */ - if (NULL == param) + pScanList = (tpSirBatchScanList)(pBatchScanRsp->scanResults + + nextScanListOffset); + if (NULL == pScanList) { VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: no argument after the number of entries argument", - __func__); - ret = -EINVAL; - break; - } - - param++; - - /* remove empty spaces */ - while ((SPACE_ASCII_VALUE == *param) && ('\0' != *param)) - { - param++; + "%s: pScanList is %p", __func__, pScanList); + isLastAp = TRUE; + goto done; } + numApMetaInfo = pScanList->numNetworksInScanList; + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "Batch scan rsp: numApMetaInfo %d", numApMetaInfo); - /* no ip address after the num of entries argument and spaces */ - if ('\0' == *param) + if ((!numApMetaInfo) || (numApMetaInfo > pReq->bestNetwork)) { VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: no IP address after the num of entries and space", - __func__); - ret = -EINVAL; - break; + "%s: numApMetaInfo %d", __func__, numApMetaInfo); + isLastAp = TRUE; + goto done; } - sscanf(param, "%d.%d.%d.%d", - (int*) &pairPtr->destIpv4Addr[0], - (int*) &pairPtr->destIpv4Addr[1], - (int*) &pairPtr->destIpv4Addr[2], - (int*) &pairPtr->destIpv4Addr[3]); - - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: IP Address: %d.%d.%d.%d", - __func__, pairPtr->destIpv4Addr[0], pairPtr->destIpv4Addr[1], - pairPtr->destIpv4Addr[2], pairPtr->destIpv4Addr[3]); - - /* param points to the beginning of first space after ip addr */ - param = strpbrk(param, " "); - - /* no argument after ip address */ - if (NULL == param) + while (numApMetaInfo) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: no argument after IP address", __func__); - ret = -EINVAL; - break; - } + pApMetaInfo = (tpSirBatchScanNetworkInfo)(pScanList->scanList + + nextApMetaInfoOffset); + if (NULL == pApMetaInfo) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: pApMetaInfo is %p", __func__, pApMetaInfo); + isLastAp = TRUE; + goto done; + } + /*calculate AP age*/ + pApMetaInfo->timestamp = + pBatchScanRsp->timestamp - pApMetaInfo->timestamp; + + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, + "%s: bssId 0x%x:0x%x:0x%x:0x%x:0x%x:0x%x " + "ch %d rssi %d timestamp %d", __func__, + pApMetaInfo->bssid[0],pApMetaInfo->bssid[1], + pApMetaInfo->bssid[2],pApMetaInfo->bssid[3], + pApMetaInfo->bssid[4],pApMetaInfo->bssid[5], + pApMetaInfo->ch, pApMetaInfo->rssi, + pApMetaInfo->timestamp); - param++; + /*mark last AP in batch scan response*/ + if ((TRUE == pBatchScanRsp->isLastResult) && + (1 == numberScanList) && (1 == numApMetaInfo)) + { + isLastAp = TRUE; + } - /* remove empty spaces */ - while ((SPACE_ASCII_VALUE == *param) && ('\0' != *param)) - { - param++; - } + mutex_lock(&pAdapter->hdd_batch_scan_lock); + /*store batch scan repsonse in hdd queue*/ + hdd_populate_batch_scan_rsp_queue(pAdapter, pApMetaInfo, + pScanList->scanId, isLastAp); + mutex_unlock(&pAdapter->hdd_batch_scan_lock); - /* no mac address after ip address and spaces */ - if ('\0' == *param) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: no MAC address after ip address and space", - __func__); - ret = -EINVAL; - break; + nextApMetaInfoOffset += sizeof(tSirBatchScanNetworkInfo); + numApMetaInfo--; } - sscanf(param, "%02x:%02x:%02x:%02x:%02x:%02x", - (int*) &pairPtr->nextHopMacAddr[0], - (int*) &pairPtr->nextHopMacAddr[1], - (int*) &pairPtr->nextHopMacAddr[2], - (int*) &pairPtr->nextHopMacAddr[3], - (int*) &pairPtr->nextHopMacAddr[4], - (int*) &pairPtr->nextHopMacAddr[5]); - - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: MAC Address: %02x:%02x:%02x:%02x:%02x:%02x", - __func__, MAC_ADDR_ARRAY(pairPtr->nextHopMacAddr)); + nextScanListOffset += (sizeof(tSirBatchScanList) - (sizeof(tANI_U8))); + numberScanList--; } - if (ret) - { - vos_mem_free(pIbssRouteTable); - } - else +done: + + /*notify hdd_ioctl only if complete batch scan rsp is received and it was + requested from hdd_ioctl*/ + if ((TRUE == pAdapter->hdd_wait_for_get_batch_scan_rsp) && + (TRUE == isLastAp)) { - status = sme_IBSSRouteTableUpdateInd(hHal, pIbssRouteTable); - if (eHAL_STATUS_SUCCESS != status) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: SME cmd to update IBSS Route table failed", - __func__); - ret = -EBUSY; - } + pAdapter->hdd_wait_for_get_batch_scan_rsp = FALSE; + complete(&pAdapter->hdd_get_batch_scan_req_var); } - return ret; -} - -#endif /* FEATURE_CESIUM_PROPRIETARY */ -#ifdef FEATURE_WLAN_BATCH_SCAN + return; +}/*End of hdd_batch_scan_result_ind_callback*/ /**--------------------------------------------------------------------------- - \brief hdd_extract_assigned_int_from_str() - Extracts assigned integer from - input string + \brief hdd_format_batch_scan_rsp () - This function formats batch scan + response as per batch scan FR request format by putting proper markers - This function extracts assigned integer from string in below format: - "STRING=10" : extracts integer 10 from this string + \param - pDest pointer to destination buffer + \param - cur_len current length + \param - tot_len total remaining size which can be written to user space + \param - pApMetaInfo Pointer to get batch scan response AP meta info + \param - pAdapter Pointer to HDD adapter - \param - pInPtr Pointer to input string - \param - base Base for string to int conversion(10 for decimal 16 for hex) - \param - pOutPtr Pointer to variable in which extracted integer needs to be - assigned - \param - pLastArg to tell whether it is last arguement in input string or - not + \return - ret no of characters written - \return - NULL for failure cases - pointer to next arguement in input string for success cases --------------------------------------------------------------------------*/ -static tANI_U8 * -hdd_extract_assigned_int_from_str +static tANI_U32 +hdd_format_batch_scan_rsp ( - tANI_U8 *pInPtr, - tANI_U8 base, - tANI_U32 *pOutPtr, - tANI_U8 *pLastArg + tANI_U8 *pDest, + tANI_U32 cur_len, + tANI_U32 tot_len, + tHddBatchScanRsp *pApMetaInfo, + hdd_adapter_t* pAdapter ) { - int tempInt; - int v = 0; - char buf[32]; - int val = 0; - *pLastArg = FALSE; - - pInPtr = strnchr(pInPtr, strlen(pInPtr), EQUALS_TO_ASCII_VALUE); - if (NULL == pInPtr) - { - return NULL; - } - - pInPtr++; + tANI_U32 ret = 0; + tANI_U32 rem_len = 0; + tANI_U8 temp_len = 0; + tANI_U8 temp_total_len = 0; + tANI_U8 temp[HDD_BATCH_SCAN_AP_META_INFO_SIZE]; + tANI_U8 *pTemp = temp; - while ((SPACE_ASCII_VALUE == *pInPtr) && ('\0' != *pInPtr)) pInPtr++; + /*Batch scan reponse needs to be returned to user space in + following format: + "scancount=X\n" where X is the number of scans in current batch + batch + "trunc\n" optional present if current scan truncated + "bssid=XX:XX:XX:XX:XX:XX\n" + "ssid=XXXX\n" + "freq=X\n" frequency in Mhz + "level=XX\n" + "age=X\n" ms + "dist=X\n" cm (-1 if not available) + "errror=X\n" (-1if not available) + "====\n" (end of ap marker) + "####\n" (end of scan marker) + "----\n" (end of results)*/ + /*send scan result in above format to user space based on + available length*/ + /*The GET response may have more data than the driver can return in its + buffer. In that case the buffer should be filled to the nearest complete + scan, ending with "%%%%".Subsequent callsshould return the remaining data + starting with the next scan (optional .trunc\n., .apcount=X\n., etc). + The final buffer should end with "----\n"*/ - val = sscanf(pInPtr, "%32s ", buf); - if (val < 0 && val > strlen(pInPtr)) - { - return NULL; - } - pInPtr += val; - v = kstrtos32(buf, base, &tempInt); - if (v < 0) - { - return NULL; - } - *pOutPtr = tempInt; - - pInPtr = strnchr(pInPtr, strlen(pInPtr), SPACE_ASCII_VALUE); - if (NULL == pInPtr) - { - *pLastArg = TRUE; - return NULL; - } - while ((SPACE_ASCII_VALUE == *pInPtr) && ('\0' != *pInPtr)) pInPtr++; + /*sanity*/ + if (cur_len > tot_len) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: invaid cur_len %d tot_len %d", __func__, cur_len, tot_len); + return 0; + } + else + { + rem_len = (tot_len - cur_len); + } - return pInPtr; -} + /*end scan marker*/ + if (pApMetaInfo->ApInfo.batchId != pAdapter->prev_batch_id) + { + temp_len = snprintf(pTemp, sizeof(temp), "####\n"); + pTemp += temp_len; + temp_total_len += temp_len; + } -/**--------------------------------------------------------------------------- + /*bssid*/ + temp_len = snprintf(pTemp, sizeof(temp), + "bssid=0x%x:0x%x:0x%x:0x%x:0x%x:0x%x\n", + pApMetaInfo->ApInfo.bssid[0], pApMetaInfo->ApInfo.bssid[1], + pApMetaInfo->ApInfo.bssid[2], pApMetaInfo->ApInfo.bssid[3], + pApMetaInfo->ApInfo.bssid[4], pApMetaInfo->ApInfo.bssid[5]); + pTemp += temp_len; + temp_total_len += temp_len; - \brief hdd_extract_assigned_char_from_str() - Extracts assigned char from - input string + /*ssid*/ + temp_len = snprintf(pTemp, (sizeof(temp) - temp_total_len), "ssid=%s\n", + pApMetaInfo->ApInfo.ssid); + pTemp += temp_len; + temp_total_len += temp_len; - This function extracts assigned character from string in below format: - "STRING=A" : extracts char 'A' from this string + /*freq*/ + temp_len = snprintf(pTemp, (sizeof(temp) - temp_total_len), "freq=%d\n", + sme_ChnToFreq(pApMetaInfo->ApInfo.ch)); + pTemp += temp_len; + temp_total_len += temp_len; - \param - pInPtr Pointer to input string - \param - pOutPtr Pointer to variable in which extracted char needs to be - assigned - \param - pLastArg to tell whether it is last arguement in input string or - not + /*level*/ + temp_len = snprintf(pTemp, (sizeof(temp) - temp_total_len), "level=%d\n", + pApMetaInfo->ApInfo.rssi); + pTemp += temp_len; + temp_total_len += temp_len; - \return - NULL for failure cases - pointer to next arguement in input string for success cases - --------------------------------------------------------------------------*/ -static tANI_U8 * -hdd_extract_assigned_char_from_str -( - tANI_U8 *pInPtr, - tANI_U8 *pOutPtr, - tANI_U8 *pLastArg -) -{ - *pLastArg = FALSE; + /*age*/ + temp_len = snprintf(pTemp, (sizeof(temp) - temp_total_len), "age=%d\n", + pApMetaInfo->ApInfo.age); + pTemp += temp_len; + temp_total_len += temp_len; - pInPtr = strnchr(pInPtr, strlen(pInPtr), EQUALS_TO_ASCII_VALUE); - if (NULL == pInPtr) - { - return NULL; - } + /*dist*/ + temp_len = snprintf(pTemp, (sizeof(temp) - temp_total_len), "dist=-1\n"); + pTemp += temp_len; + temp_total_len += temp_len; - pInPtr++; + /*error*/ + temp_len = snprintf(pTemp, (sizeof(temp) - temp_total_len), "error=-1\n"); + pTemp += temp_len; + temp_total_len += temp_len; - while ((SPACE_ASCII_VALUE == *pInPtr) && ('\0' != *pInPtr)) pInPtr++; + /*end AP marker*/ + temp_len = snprintf(pTemp, (sizeof(temp) - temp_total_len), "====\n"); + pTemp += temp_len; + temp_total_len += temp_len; - *pOutPtr = *pInPtr; + /*last AP in batch scan response*/ + if(TRUE == pApMetaInfo->ApInfo.isLastAp) + { + /*end scan marker*/ + temp_len = snprintf(pTemp, (sizeof(temp) - temp_total_len), "####\n"); + pTemp += temp_len; + temp_total_len += temp_len; - pInPtr = strnchr(pInPtr, strlen(pInPtr), SPACE_ASCII_VALUE); - if (NULL == pInPtr) - { - *pLastArg = TRUE; - return NULL; - } - while ((SPACE_ASCII_VALUE == *pInPtr) && ('\0' != *pInPtr)) pInPtr++; + /*end batch scan result marker*/ + temp_len = snprintf(pTemp, (sizeof(temp) - temp_total_len), "----\n"); + pTemp += temp_len; + temp_total_len += temp_len; - return pInPtr; -} + pAdapter->prev_batch_id = 0; + } + if (temp_total_len < rem_len) + { + ret = temp_total_len + 1; + strlcpy(pDest, temp, ret); + pAdapter->isTruncated = FALSE; + } + else + { + pAdapter->isTruncated = TRUE; + if (rem_len >= strlen("%%%%")) + { + ret = snprintf(pDest, sizeof(temp), "%%%%"); + } + else + { + ret = 0; + } + } -/**--------------------------------------------------------------------------- + return ret; - \brief hdd_parse_set_batchscan_command () - HDD parse set batch scan command +}/*End of hdd_format_batch_scan_rsp*/ - This function parses set batch scan command in below format: - WLS_BATCHING_SET followed by below arguements - "SCANFREQ=XX" : Optional defaults to 30 sec - "MSCAN=XX" : Required number of scans to attempt to batch - "BESTN=XX" : Best Network (RSSI) defaults to 16 - "CHANNEL=" : optional defaults to all channels, can list 'A'or` B. - A. implies only 5 GHz , B. implies only 2.4GHz - "RTT=X" : optional defaults to 0 - returns the MIN of MSCAN or the max # of scans firmware can cache or -1 on - error +/**--------------------------------------------------------------------------- - For example input commands: - 1) WLS_BATCHING_SET SCANFREQ=60 MSCAN=10 BESTN=20 CHANNEL=A RTT=0 -> This is - translated into set batch scan with following parameters: - a) Frequence 60 seconds - b) Batch 10 scans together - c) Best RSSI to be 20 - d) 5GHz band only - e) RTT is equal to 0 + \brief hdd_populate_user_batch_scan_rsp() - This function populates user data + buffer starting with head of hdd batch scan response queue - \param - pValue Pointer to input channel list - \param - pHddSetBatchScanReq Pointer to HDD batch scan request structure + \param - pAdapter Pointer to HDD adapter + \param - pDest Pointer to user data buffer + \param - cur_len current offset in user buffer + \param - rem_len remaining no of bytes in user buffer - \return - 0 for success non-zero for failure + \return - number of bytes written in user buffer --------------------------------------------------------------------------*/ -static int -hdd_parse_set_batchscan_command + +tANI_U32 hdd_populate_user_batch_scan_rsp ( - tANI_U8 *pValue, - tSirSetBatchScanReq *pHddSetBatchScanReq + hdd_adapter_t* pAdapter, + tANI_U8 *pDest, + tANI_U32 cur_len, + tANI_U32 rem_len ) { - tANI_U8 *inPtr = pValue; - tANI_U8 val = 0; - tANI_U8 lastArg = 0; - tANI_U32 nScanFreq = HDD_SET_BATCH_SCAN_DEFAULT_FREQ; - tANI_U32 nMscan; - tANI_U32 nBestN = HDD_SET_BATCH_SCAN_BEST_NETWORK; - tANI_U8 ucRfBand = HDD_SET_BATCH_SCAN_DEFAULT_BAND; - tANI_U32 nRtt = 0; - tANI_U32 temp; - - /*go to space after WLS_BATCHING_SET command*/ - inPtr = strnchr(pValue, strlen(pValue), SPACE_ASCII_VALUE); - /*no argument after the command*/ - if (NULL == inPtr) - { - return -EINVAL; - } - - /*no space after the command*/ - else if (SPACE_ASCII_VALUE != *inPtr) - { - return -EINVAL; - } + tHddBatchScanRsp *pHead; + tHddBatchScanRsp *pPrev; + tANI_U32 len; - /*removing empty spaces*/ - while ((SPACE_ASCII_VALUE == *inPtr) && ('\0' != *inPtr)) inPtr++; + pAdapter->isTruncated = FALSE; - /*no argument followed by spaces*/ - if ('\0' == *inPtr) + /*head of hdd batch scan response queue*/ + pHead = pAdapter->pBatchScanRsp; + while (pHead) { - return -EINVAL; - } + len = hdd_format_batch_scan_rsp(pDest, cur_len, rem_len, pHead, + pAdapter); + pDest += len; + pDest--; + cur_len += len; + if(TRUE == pAdapter->isTruncated) + { + /*result is truncated return rest of scan rsp in next req*/ + cur_len = rem_len; + break; + } + pPrev = pHead; + pHead = pHead->pNext; + pAdapter->pBatchScanRsp = pHead; + pAdapter->prev_batch_id = pPrev->ApInfo.batchId; + vos_mem_free(pPrev); + } - /*check and parse SCANFREQ*/ - if ((strncmp(inPtr, "SCANFREQ", 8) == 0)) - { - inPtr = hdd_extract_assigned_int_from_str(inPtr, 10, - &temp, &lastArg); + return cur_len; +}/*End of hdd_populate_user_batch_scan_rsp*/ - if (0 != temp) - { - nScanFreq = temp; - } +/**--------------------------------------------------------------------------- - if ( (NULL == inPtr) || (TRUE == lastArg)) - { - return -EINVAL; - } - } + \brief hdd_return_batch_scan_rsp_to_user () - This function returns batch + scan response data from HDD queue to user space + It does following in detail: + a) if HDD has enough data in its queue then it 1st copies data to user + space and then send get batch scan indication message to FW. In this + case it does not wait on any event and batch scan response data will + be populated in HDD response queue in MC thread context after receiving + indication from FW + b) else send get batch scan indication message to FW and wait on an event + which will be set once HDD receives complete batch scan response from + FW and then this function returns batch scan response to user space - /*check and parse MSCAN*/ - if ((strncmp(inPtr, "MSCAN", 5) == 0)) - { - inPtr = hdd_extract_assigned_int_from_str(inPtr, 10, - &nMscan, &lastArg); + \param - pAdapter Pointer to HDD adapter + \param - pPrivData Pointer to priv_data - if (0 == nMscan) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "invalid MSCAN=%d", nMscan); - return -EINVAL; - } + \return - 0 for success -EFAULT for failure - if (TRUE == lastArg) - { - goto done; - } - else if (NULL == inPtr) - { - return -EINVAL; - } + --------------------------------------------------------------------------*/ + +int hdd_return_batch_scan_rsp_to_user +( + hdd_adapter_t* pAdapter, + hdd_priv_data_t *pPrivData, + tANI_U8 *command +) +{ + tANI_U8 *pDest; + tANI_U32 count = 0; + tANI_U32 len = 0; + tANI_U32 cur_len = 0; + tANI_U32 rem_len = 0; + eHalStatus halStatus; + unsigned long rc; + tSirTriggerBatchScanResultInd *pReq; + + pReq = &pAdapter->hddTriggerBatchScanResultInd; + pReq->param = 0;/*batch scan client*/ + pDest = (tANI_U8 *)(command + pPrivData->used_len); + pAdapter->hdd_wait_for_get_batch_scan_rsp = FALSE; + + cur_len = pPrivData->used_len; + if (pPrivData->total_len > pPrivData->used_len) + { + rem_len = pPrivData->total_len - pPrivData->used_len; } else { - return -EINVAL; + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: Invalid user data buffer total_len %d used_len %d", + __func__, pPrivData->total_len, pPrivData->used_len); + return -EFAULT; } - /*check and parse BESTN*/ - if ((strncmp(inPtr, "BESTN", 5) == 0)) - { - inPtr = hdd_extract_assigned_int_from_str(inPtr, 10, - &temp, &lastArg); + mutex_lock(&pAdapter->hdd_batch_scan_lock); + len = hdd_populate_user_batch_scan_rsp(pAdapter, pDest, + cur_len, rem_len); + mutex_unlock(&pAdapter->hdd_batch_scan_lock); - if (0 != temp) + /*enough scan result available in cache to return to user space or + scan result needs to be fetched 1st from fw and then return*/ + if (len == cur_len) + { + pAdapter->hdd_wait_for_get_batch_scan_rsp = TRUE; + halStatus = sme_TriggerBatchScanResultInd( + WLAN_HDD_GET_HAL_CTX(pAdapter), pReq, + pAdapter->sessionId, hdd_batch_scan_result_ind_callback, + pAdapter); + if ( eHAL_STATUS_SUCCESS == halStatus ) { - nBestN = temp; - } + if (TRUE == pAdapter->hdd_wait_for_get_batch_scan_rsp) + { + INIT_COMPLETION(pAdapter->hdd_get_batch_scan_req_var); + rc = wait_for_completion_timeout( + &pAdapter->hdd_get_batch_scan_req_var, + msecs_to_jiffies(HDD_GET_BATCH_SCAN_RSP_TIME_OUT)); + if (0 == rc) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: Timeout waiting to fetch batch scan rsp from fw", + __func__); + return -EFAULT; + } + } - if (TRUE == lastArg) - { - goto done; - } - else if (NULL == inPtr) - { - return -EINVAL; - } - } + len = snprintf(pDest, HDD_BATCH_SCAN_AP_META_INFO_SIZE, + "scancount=%u\n", pAdapter->numScanList); + pDest += len; + cur_len += len; - /*check and parse CHANNEL*/ - if ((strncmp(inPtr, "CHANNEL", 7) == 0)) - { - inPtr = hdd_extract_assigned_char_from_str(inPtr, &val, &lastArg); + mutex_lock(&pAdapter->hdd_batch_scan_lock); + len = hdd_populate_user_batch_scan_rsp(pAdapter, pDest, + cur_len, rem_len); + mutex_unlock(&pAdapter->hdd_batch_scan_lock); - if (('A' == val) || ('a' == val)) - { - ucRfBand = HDD_SET_BATCH_SCAN_24GHz_BAND_ONLY; - } - else if (('B' == val) || ('b' == val)) - { - ucRfBand = HDD_SET_BATCH_SCAN_5GHz_BAND_ONLY; + count = 0; + len = (len - pPrivData->used_len); + pDest = (command + pPrivData->used_len); + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "NEW BATCH SCAN RESULT:"); + while(count < len) + { + printk("%c", *(pDest + count)); + count++; + } + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: copy %d data to user buffer", __func__, len); + if (copy_to_user(pPrivData->buf, pDest, len)) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: failed to copy data to user buffer", __func__); + return -EFAULT; + } } else { - ucRfBand = HDD_SET_BATCH_SCAN_DEFAULT_BAND; - } - - if (TRUE == lastArg) - { - goto done; - } - else if (NULL == inPtr) - { - return -EINVAL; + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "sme_GetBatchScanScan returned failure halStatus %d", + halStatus); + return -EINVAL; } } - - /*check and parse RTT*/ - if ((strncmp(inPtr, "RTT", 3) == 0)) + else { - inPtr = hdd_extract_assigned_int_from_str(inPtr, 10, - &nRtt, &lastArg); - if (TRUE == lastArg) + count = 0; + len = (len - pPrivData->used_len); + pDest = (command + pPrivData->used_len); + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "REMAINING TRUNCATED BATCH SCAN RESULT:"); + while(count < len) { - goto done; + printk("%c", *(pDest + count)); + count++; } - if (NULL == inPtr) + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: copy %d data to user buffer", __func__, len); + if (copy_to_user(pPrivData->buf, pDest, len)) { - return -EINVAL; + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: failed to copy data to user buffer", __func__); + return -EFAULT; } } + return 0; +} /*End of hdd_return_batch_scan_rsp_to_user*/ -done: - - pHddSetBatchScanReq->scanFrequency = nScanFreq; - pHddSetBatchScanReq->numberOfScansToBatch = nMscan; - pHddSetBatchScanReq->bestNetwork = nBestN; - pHddSetBatchScanReq->rfBand = ucRfBand; - pHddSetBatchScanReq->rtt = nRtt; - - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "Received WLS_BATCHING_SET with SCANFREQ=%d " - "MSCAN=%d BESTN=%d CHANNEL=%d RTT=%d", - pHddSetBatchScanReq->scanFrequency, - pHddSetBatchScanReq->numberOfScansToBatch, - pHddSetBatchScanReq->bestNetwork, - pHddSetBatchScanReq->rfBand, - pHddSetBatchScanReq->rtt); - - return 0; -}/*End of hdd_parse_set_batchscan_command*/ +#endif/*End of FEATURE_WLAN_BATCH_SCAN*/ /**--------------------------------------------------------------------------- - \brief hdd_set_batch_scan_req_callback () - This function is called after - receiving set batch scan response from FW and it saves set batch scan - response data FW to HDD context and sets the completion event on - which hdd_ioctl is waiting + \brief hdd_parse_setrmcrate_command() - HDD Parse reliable multicast + set rate command - \param - callbackContext Pointer to HDD adapter - \param - pRsp Pointer to set batch scan response data received from FW + This function parses the SETRMCTXRATE command passed in the format + SETRMCTXRATEX(multicast rate in Mbps) + For example input commands: + 1) SETRMCTXRATE 6 -> This is translated into set RMC multicast rate + to 6 Mbps + 1) SETRMCTXRATE 0 -> This is translated into disabling fixed multicast rate + and enabling multicast RA in firmware - \return - nothing + \param - pValue Pointer to SETRMCTXRATE command + \param - pRate Pointer to local RMC multicast rate variable + \param - pTxFlags Pointer to local RMC multicast rate variable + + \return - 0 for success non-zero for failure --------------------------------------------------------------------------*/ -static void hdd_set_batch_scan_req_callback -( - void *callbackContext, - tSirSetBatchScanRsp *pRsp -) +static int hdd_parse_setrmcrate_command(tANI_U8 *pValue, + tANI_U32 *pRate, tTxrateinfoflags *pTxFlags) { - hdd_adapter_t* pAdapter = (hdd_adapter_t*)callbackContext; - tSirSetBatchScanRsp *pHddSetBatchScanRsp; + tANI_U8 *inPtr = pValue; + int tempInt; + int v = 0; + char buf[32]; + *pRate = 0; + *pTxFlags = 0; - /*sanity check*/ - if (WLAN_HDD_ADAPTER_MAGIC != pAdapter->magic) + inPtr = strnchr(pValue, strlen(pValue), SPACE_ASCII_VALUE); + /*no argument after the command*/ + if (NULL == inPtr) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: Invalid pAdapter magic", __func__); - VOS_ASSERT(0); - return; + return -EINVAL; } - pHddSetBatchScanRsp = &pAdapter->hddSetBatchScanRsp; - /*save set batch scan response*/ - pHddSetBatchScanRsp->nScansToBatch = pRsp->nScansToBatch; - - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, - "Received set batch scan rsp from FW with nScansToBatch=%d", - pHddSetBatchScanRsp->nScansToBatch); - - pAdapter->hdd_wait_for_set_batch_scan_rsp = FALSE; - complete(&pAdapter->hdd_set_batch_scan_req_var); - - return; -}/*End of hdd_set_batch_scan_req_callback*/ - - -/**--------------------------------------------------------------------------- - - \brief hdd_populate_batch_scan_rsp_queue () - This function stores AP meta - info in hdd batch scan response queue - - \param - pAdapter Pointer to hdd adapter - \param - pAPMetaInfo Pointer to access point meta info - \param - scanId scan ID of batch scan response - \param - isLastAp tells whether AP is last AP in batch scan response or not - - \return - nothing - - --------------------------------------------------------------------------*/ -static void hdd_populate_batch_scan_rsp_queue( hdd_adapter_t* pAdapter, - tpSirBatchScanNetworkInfo pApMetaInfo, tANI_U32 scanId, v_BOOL_t isLastAp) -{ - tHddBatchScanRsp *pHead; - tHddBatchScanRsp *pNode; - tHddBatchScanRsp *pPrev; - tHddBatchScanRsp *pTemp; - tANI_U8 ssidLen; - - /*head of hdd batch scan response queue*/ - pHead = pAdapter->pBatchScanRsp; - - pNode = (tHddBatchScanRsp *)vos_mem_malloc(sizeof(tHddBatchScanRsp)); - if (NULL == pNode) + /*no space after the command*/ + else if (SPACE_ASCII_VALUE != *inPtr) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: Could not allocate memory", __func__); - VOS_ASSERT(0); - return; + return -EINVAL; } - vos_mem_copy(pNode->ApInfo.bssid, pApMetaInfo->bssid, - sizeof(pNode->ApInfo.bssid)); - ssidLen = strlen(pApMetaInfo->ssid); - if (SIR_MAX_SSID_SIZE < ssidLen) + /*removing empty spaces*/ + while ((SPACE_ASCII_VALUE == *inPtr) && ('\0' != *inPtr)) inPtr++; + + /*no argument followed by spaces*/ + if ('\0' == *inPtr) { - /*invalid scan result*/ - vos_mem_free(pNode); - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: Invalid AP meta info ssidlen %d", __func__, ssidLen); - return; + return 0; } - vos_mem_copy(pNode->ApInfo.ssid, pApMetaInfo->ssid, ssidLen); - /*null terminate ssid*/ - pNode->ApInfo.ssid[ssidLen] = '\0'; - pNode->ApInfo.ch = pApMetaInfo->ch; - pNode->ApInfo.rssi = pApMetaInfo->rssi; - pNode->ApInfo.age = pApMetaInfo->timestamp; - pNode->ApInfo.batchId = scanId; - pNode->ApInfo.isLastAp = isLastAp; - pNode->pNext = NULL; - if (NULL == pHead) + /* + * getting the first argument which sets multicast rate. + */ + sscanf(inPtr, "%32s ", buf); + v = kstrtos32(buf, 10, &tempInt); + if ( v < 0) { - pAdapter->pBatchScanRsp = pNode; + return -EINVAL; } - else + + /* + * Validate the multicast rate. + */ + switch (tempInt) { - pTemp = pHead; - while (NULL != pTemp) - { - pPrev = pTemp; - pTemp = pTemp->pNext; - } - pPrev->pNext = pNode; + default: + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, + "Unsupported rate: %d", tempInt); + return -EINVAL; + case 0: + case 6: + case 9: + case 12: + case 18: + case 24: + case 36: + case 48: + case 54: + *pTxFlags = eHAL_TX_RATE_LEGACY; + *pRate = tempInt * 10; + break; + case 65: + *pTxFlags = eHAL_TX_RATE_HT20; + *pRate = tempInt * 10; + break; + case 72: + *pTxFlags = eHAL_TX_RATE_HT20 | eHAL_TX_RATE_SGI; + *pRate = 722; /* fractional rate 72.2 Mbps */ + break; } - return; -}/*End of hdd_populate_batch_scan_rsp_queue*/ - -/**--------------------------------------------------------------------------- - - \brief hdd_batch_scan_result_ind_callback () - This function is called after - receiving batch scan response indication from FW. It saves get batch scan - response data in HDD batch scan response queue. This callback sets the - completion event on which hdd_ioctl is waiting only after getting complete - batch scan response data from FW - - \param - callbackContext Pointer to HDD adapter - \param - pRsp Pointer to get batch scan response data received from FW + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "Rate: %d", *pRate); - \return - nothing + return 0; +} - --------------------------------------------------------------------------*/ -static void hdd_batch_scan_result_ind_callback -( - void *callbackContext, - void *pRsp -) +int hdd_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) { - v_BOOL_t isLastAp; - tANI_U32 numApMetaInfo; - tANI_U32 numberScanList; - tANI_U32 nextScanListOffset; - tANI_U32 nextApMetaInfoOffset; - hdd_adapter_t* pAdapter; - tpSirBatchScanList pScanList; - tpSirBatchScanNetworkInfo pApMetaInfo; - tpSirBatchScanResultIndParam pBatchScanRsp;/*batch scan rsp data from FW*/ - tSirSetBatchScanReq *pReq; - - pAdapter = (hdd_adapter_t *)callbackContext; - /*sanity check*/ - if ((NULL != pAdapter) && (WLAN_HDD_ADAPTER_MAGIC != pAdapter->magic)) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: Invalid pAdapter magic", __func__); - VOS_ASSERT(0); - return; - } + hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + hdd_priv_data_t priv_data; + tANI_U8 *command = NULL; + int ret = 0; - /*initialize locals*/ - pReq = &pAdapter->hddSetBatchScanReq; - pBatchScanRsp = (tpSirBatchScanResultIndParam)pRsp; - isLastAp = FALSE; - numApMetaInfo = 0; - numberScanList = 0; - nextScanListOffset = 0; - nextApMetaInfoOffset = 0; - pScanList = NULL; - pApMetaInfo = NULL; + if (NULL == pAdapter) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s: HDD adapter context is Null", __func__); + ret = -ENODEV; + goto exit; + } - if ((NULL == pBatchScanRsp) || (NULL == pReq)) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: pBatchScanRsp is %p pReq %p", __func__, pBatchScanRsp, pReq); - isLastAp = TRUE; - goto done; - } + if ((!ifr) || (!ifr->ifr_data)) + { + ret = -EINVAL; + goto exit; + } - pAdapter->numScanList = numberScanList = pBatchScanRsp->numScanLists; - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "Batch scan rsp: numberScalList %d", numberScanList); + if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s:LOGP in Progress. Ignore!!!", __func__); + ret = -EBUSY; + goto exit; + } - if ((!numberScanList) || (numberScanList > pReq->numberOfScansToBatch)) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: numberScanList %d", __func__, numberScanList); - isLastAp = TRUE; - goto done; - } + if (copy_from_user(&priv_data, ifr->ifr_data, sizeof(hdd_priv_data_t))) + { + ret = -EFAULT; + goto exit; + } - while (numberScanList) - { - pScanList = (tpSirBatchScanList)(pBatchScanRsp->scanResults + - nextScanListOffset); - if (NULL == pScanList) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: pScanList is %p", __func__, pScanList); - isLastAp = TRUE; - goto done; - } - numApMetaInfo = pScanList->numNetworksInScanList; - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "Batch scan rsp: numApMetaInfo %d", numApMetaInfo); + if (priv_data.total_len <= 0) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, + "%s:invalid priv_data.total_len(%d)!!!", __func__, + priv_data.total_len); + ret = -EINVAL; + goto exit; + } - if ((!numApMetaInfo) || (numApMetaInfo > pReq->bestNetwork)) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: numApMetaInfo %d", __func__, numApMetaInfo); - isLastAp = TRUE; - goto done; - } + /* Allocate +1 for '\0' */ + command = kmalloc(priv_data.total_len + 1, GFP_KERNEL); + if (!command) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s: failed to allocate memory\n", __func__); + ret = -ENOMEM; + goto exit; + } - while (numApMetaInfo) - { - pApMetaInfo = (tpSirBatchScanNetworkInfo)(pScanList->scanList + - nextApMetaInfoOffset); - if (NULL == pApMetaInfo) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: pApMetaInfo is %p", __func__, pApMetaInfo); - isLastAp = TRUE; - goto done; - } - /*calculate AP age*/ - pApMetaInfo->timestamp = - pBatchScanRsp->timestamp - pApMetaInfo->timestamp; - - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, - "%s: bssId 0x%x:0x%x:0x%x:0x%x:0x%x:0x%x " - "ch %d rssi %d timestamp %d", __func__, - pApMetaInfo->bssid[0],pApMetaInfo->bssid[1], - pApMetaInfo->bssid[2],pApMetaInfo->bssid[3], - pApMetaInfo->bssid[4],pApMetaInfo->bssid[5], - pApMetaInfo->ch, pApMetaInfo->rssi, - pApMetaInfo->timestamp); - - /*mark last AP in batch scan response*/ - if ((TRUE == pBatchScanRsp->isLastResult) && - (1 == numberScanList) && (1 == numApMetaInfo)) - { - isLastAp = TRUE; - } - - mutex_lock(&pAdapter->hdd_batch_scan_lock); - /*store batch scan repsonse in hdd queue*/ - hdd_populate_batch_scan_rsp_queue(pAdapter, pApMetaInfo, - pScanList->scanId, isLastAp); - mutex_unlock(&pAdapter->hdd_batch_scan_lock); - - nextApMetaInfoOffset += sizeof(tSirBatchScanNetworkInfo); - numApMetaInfo--; - } - - nextScanListOffset += (sizeof(tSirBatchScanList) - (sizeof(tANI_U8))); - numberScanList--; - } - -done: - - /*notify hdd_ioctl only if complete batch scan rsp is received and it was - requested from hdd_ioctl*/ - if ((TRUE == pAdapter->hdd_wait_for_get_batch_scan_rsp) && - (TRUE == isLastAp)) - { - pAdapter->hdd_wait_for_get_batch_scan_rsp = FALSE; - complete(&pAdapter->hdd_get_batch_scan_req_var); - } - - return; -}/*End of hdd_batch_scan_result_ind_callback*/ - -/**--------------------------------------------------------------------------- - - \brief hdd_format_batch_scan_rsp () - This function formats batch scan - response as per batch scan FR request format by putting proper markers - - \param - pDest pointer to destination buffer - \param - cur_len current length - \param - tot_len total remaining size which can be written to user space - \param - pApMetaInfo Pointer to get batch scan response AP meta info - \param - pAdapter Pointer to HDD adapter - - \return - ret no of characters written - - --------------------------------------------------------------------------*/ -static tANI_U32 -hdd_format_batch_scan_rsp -( - tANI_U8 *pDest, - tANI_U32 cur_len, - tANI_U32 tot_len, - tHddBatchScanRsp *pApMetaInfo, - hdd_adapter_t* pAdapter -) -{ - tANI_U32 ret = 0; - tANI_U32 rem_len = 0; - tANI_U8 temp_len = 0; - tANI_U8 temp_total_len = 0; - tANI_U8 temp[HDD_BATCH_SCAN_AP_META_INFO_SIZE]; - tANI_U8 *pTemp = temp; - - /*Batch scan reponse needs to be returned to user space in - following format: - "scancount=X\n" where X is the number of scans in current batch - batch - "trunc\n" optional present if current scan truncated - "bssid=XX:XX:XX:XX:XX:XX\n" - "ssid=XXXX\n" - "freq=X\n" frequency in Mhz - "level=XX\n" - "age=X\n" ms - "dist=X\n" cm (-1 if not available) - "errror=X\n" (-1if not available) - "====\n" (end of ap marker) - "####\n" (end of scan marker) - "----\n" (end of results)*/ - /*send scan result in above format to user space based on - available length*/ - /*The GET response may have more data than the driver can return in its - buffer. In that case the buffer should be filled to the nearest complete - scan, ending with "%%%%".Subsequent callsshould return the remaining data - starting with the next scan (optional .trunc\n., .apcount=X\n., etc). - The final buffer should end with "----\n"*/ - - /*sanity*/ - if (cur_len > tot_len) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: invaid cur_len %d tot_len %d", __func__, cur_len, tot_len); - return 0; - } - else - { - rem_len = (tot_len - cur_len); - } - - /*end scan marker*/ - if (pApMetaInfo->ApInfo.batchId != pAdapter->prev_batch_id) - { - temp_len = snprintf(pTemp, sizeof(temp), "####\n"); - pTemp += temp_len; - temp_total_len += temp_len; - } - - /*bssid*/ - temp_len = snprintf(pTemp, sizeof(temp), - "bssid=0x%x:0x%x:0x%x:0x%x:0x%x:0x%x\n", - pApMetaInfo->ApInfo.bssid[0], pApMetaInfo->ApInfo.bssid[1], - pApMetaInfo->ApInfo.bssid[2], pApMetaInfo->ApInfo.bssid[3], - pApMetaInfo->ApInfo.bssid[4], pApMetaInfo->ApInfo.bssid[5]); - pTemp += temp_len; - temp_total_len += temp_len; - - /*ssid*/ - temp_len = snprintf(pTemp, (sizeof(temp) - temp_total_len), "ssid=%s\n", - pApMetaInfo->ApInfo.ssid); - pTemp += temp_len; - temp_total_len += temp_len; - - /*freq*/ - temp_len = snprintf(pTemp, (sizeof(temp) - temp_total_len), "freq=%d\n", - sme_ChnToFreq(pApMetaInfo->ApInfo.ch)); - pTemp += temp_len; - temp_total_len += temp_len; - - /*level*/ - temp_len = snprintf(pTemp, (sizeof(temp) - temp_total_len), "level=%d\n", - pApMetaInfo->ApInfo.rssi); - pTemp += temp_len; - temp_total_len += temp_len; - - /*age*/ - temp_len = snprintf(pTemp, (sizeof(temp) - temp_total_len), "age=%d\n", - pApMetaInfo->ApInfo.age); - pTemp += temp_len; - temp_total_len += temp_len; - - /*dist*/ - temp_len = snprintf(pTemp, (sizeof(temp) - temp_total_len), "dist=-1\n"); - pTemp += temp_len; - temp_total_len += temp_len; - - /*error*/ - temp_len = snprintf(pTemp, (sizeof(temp) - temp_total_len), "error=-1\n"); - pTemp += temp_len; - temp_total_len += temp_len; - - /*end AP marker*/ - temp_len = snprintf(pTemp, (sizeof(temp) - temp_total_len), "====\n"); - pTemp += temp_len; - temp_total_len += temp_len; - - /*last AP in batch scan response*/ - if(TRUE == pApMetaInfo->ApInfo.isLastAp) - { - /*end scan marker*/ - temp_len = snprintf(pTemp, (sizeof(temp) - temp_total_len), "####\n"); - pTemp += temp_len; - temp_total_len += temp_len; - - /*end batch scan result marker*/ - temp_len = snprintf(pTemp, (sizeof(temp) - temp_total_len), "----\n"); - pTemp += temp_len; - temp_total_len += temp_len; - - pAdapter->prev_batch_id = 0; - } - - if (temp_total_len < rem_len) - { - ret = temp_total_len + 1; - strlcpy(pDest, temp, ret); - pAdapter->isTruncated = FALSE; - } - else + if (copy_from_user(command, priv_data.buf, priv_data.total_len)) { - pAdapter->isTruncated = TRUE; - if (rem_len >= strlen("%%%%")) - { - ret = snprintf(pDest, sizeof(temp), "%%%%"); - } - else - { - ret = 0; - } + ret = -EFAULT; + goto exit; } - return ret; - -}/*End of hdd_format_batch_scan_rsp*/ - -/**--------------------------------------------------------------------------- - - \brief hdd_populate_user_batch_scan_rsp() - This function populates user data - buffer starting with head of hdd batch scan response queue - - \param - pAdapter Pointer to HDD adapter - \param - pDest Pointer to user data buffer - \param - cur_len current offset in user buffer - \param - rem_len remaining no of bytes in user buffer - - \return - number of bytes written in user buffer - - --------------------------------------------------------------------------*/ - -tANI_U32 hdd_populate_user_batch_scan_rsp -( - hdd_adapter_t* pAdapter, - tANI_U8 *pDest, - tANI_U32 cur_len, - tANI_U32 rem_len -) -{ - tHddBatchScanRsp *pHead; - tHddBatchScanRsp *pPrev; - tANI_U32 len; - - pAdapter->isTruncated = FALSE; - - /*head of hdd batch scan response queue*/ - pHead = pAdapter->pBatchScanRsp; - while (pHead) - { - len = hdd_format_batch_scan_rsp(pDest, cur_len, rem_len, pHead, - pAdapter); - pDest += len; - pDest--; - cur_len += len; - if(TRUE == pAdapter->isTruncated) - { - /*result is truncated return rest of scan rsp in next req*/ - cur_len = rem_len; - break; - } - pPrev = pHead; - pHead = pHead->pNext; - pAdapter->pBatchScanRsp = pHead; - pAdapter->prev_batch_id = pPrev->ApInfo.batchId; - vos_mem_free(pPrev); - } - - return cur_len; -}/*End of hdd_populate_user_batch_scan_rsp*/ - -/**--------------------------------------------------------------------------- - - \brief hdd_return_batch_scan_rsp_to_user () - This function returns batch - scan response data from HDD queue to user space - It does following in detail: - a) if HDD has enough data in its queue then it 1st copies data to user - space and then send get batch scan indication message to FW. In this - case it does not wait on any event and batch scan response data will - be populated in HDD response queue in MC thread context after receiving - indication from FW - b) else send get batch scan indication message to FW and wait on an event - which will be set once HDD receives complete batch scan response from - FW and then this function returns batch scan response to user space - - \param - pAdapter Pointer to HDD adapter - \param - pPrivData Pointer to priv_data - - \return - 0 for success -EFAULT for failure - - --------------------------------------------------------------------------*/ - -int hdd_return_batch_scan_rsp_to_user -( - hdd_adapter_t* pAdapter, - hdd_priv_data_t *pPrivData, - tANI_U8 *command -) -{ - tANI_U8 *pDest; - tANI_U32 count = 0; - tANI_U32 len = 0; - tANI_U32 cur_len = 0; - tANI_U32 rem_len = 0; - eHalStatus halStatus; - unsigned long rc; - tSirTriggerBatchScanResultInd *pReq; - - pReq = &pAdapter->hddTriggerBatchScanResultInd; - pReq->param = 0;/*batch scan client*/ - pDest = (tANI_U8 *)(command + pPrivData->used_len); - pAdapter->hdd_wait_for_get_batch_scan_rsp = FALSE; - - cur_len = pPrivData->used_len; - if (pPrivData->total_len > pPrivData->used_len) - { - rem_len = pPrivData->total_len - pPrivData->used_len; - } - else - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: Invalid user data buffer total_len %d used_len %d", - __func__, pPrivData->total_len, pPrivData->used_len); - return -EFAULT; - } - - mutex_lock(&pAdapter->hdd_batch_scan_lock); - len = hdd_populate_user_batch_scan_rsp(pAdapter, pDest, - cur_len, rem_len); - mutex_unlock(&pAdapter->hdd_batch_scan_lock); - - /*enough scan result available in cache to return to user space or - scan result needs to be fetched 1st from fw and then return*/ - if (len == cur_len) - { - pAdapter->hdd_wait_for_get_batch_scan_rsp = TRUE; - halStatus = sme_TriggerBatchScanResultInd( - WLAN_HDD_GET_HAL_CTX(pAdapter), pReq, - pAdapter->sessionId, hdd_batch_scan_result_ind_callback, - pAdapter); - if ( eHAL_STATUS_SUCCESS == halStatus ) - { - if (TRUE == pAdapter->hdd_wait_for_get_batch_scan_rsp) - { - INIT_COMPLETION(pAdapter->hdd_get_batch_scan_req_var); - rc = wait_for_completion_timeout( - &pAdapter->hdd_get_batch_scan_req_var, - msecs_to_jiffies(HDD_GET_BATCH_SCAN_RSP_TIME_OUT)); - if (0 == rc) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: Timeout waiting to fetch batch scan rsp from fw", - __func__); - return -EFAULT; - } - } - - len = snprintf(pDest, HDD_BATCH_SCAN_AP_META_INFO_SIZE, - "scancount=%u\n", pAdapter->numScanList); - pDest += len; - cur_len += len; - - mutex_lock(&pAdapter->hdd_batch_scan_lock); - len = hdd_populate_user_batch_scan_rsp(pAdapter, pDest, - cur_len, rem_len); - mutex_unlock(&pAdapter->hdd_batch_scan_lock); - - count = 0; - len = (len - pPrivData->used_len); - pDest = (command + pPrivData->used_len); - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "NEW BATCH SCAN RESULT:"); - while(count < len) - { - printk("%c", *(pDest + count)); - count++; - } - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: copy %d data to user buffer", __func__, len); - if (copy_to_user(pPrivData->buf, pDest, len)) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: failed to copy data to user buffer", __func__); - return -EFAULT; - } - } - else - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "sme_GetBatchScanScan returned failure halStatus %d", - halStatus); - return -EINVAL; - } - } - else - { - count = 0; - len = (len - pPrivData->used_len); - pDest = (command + pPrivData->used_len); - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "REMAINING TRUNCATED BATCH SCAN RESULT:"); - while(count < len) - { - printk("%c", *(pDest + count)); - count++; - } - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: copy %d data to user buffer", __func__, len); - if (copy_to_user(pPrivData->buf, pDest, len)) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: failed to copy data to user buffer", __func__); - return -EFAULT; - } - } - - return 0; -} /*End of hdd_return_batch_scan_rsp_to_user*/ - -#endif/*End of FEATURE_WLAN_BATCH_SCAN*/ - -#ifdef FEATURE_CESIUM_PROPRIETARY -static tANI_BOOLEAN hdd_find_ibss_prop_ie(tANI_U8 *addIePtr, tANI_U32 addIeLen) -{ - v_U8_t *iePtr = addIePtr; - tANI_U32 ieLen = addIeLen; - - while (ieLen > 2) { - /* Clear the IBSS prop IE if present in beacon and probe rsp ADD IE */ - if ((iePtr = (v_U8_t *)wlan_hdd_cfg80211_get_ie_ptr(iePtr, - ieLen, WLAN_HDD_IBSS_PROP_VENDOR_ID)) != NULL) { - - if (WLAN_HDD_IBSS_PROP_OUI_DATA_LEN == *(iePtr + 1)) { - if ((ibssPropIe[0] == *(iePtr + 2)) && - (ibssPropIe[1] == *(iePtr + 3)) && - (ibssPropIe[2] == *(iePtr + 4))) { - - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s:clearing IBSS_PROP_IE", __func__); - - vos_mem_zero((iePtr + 2), *(iePtr + 1)); - return 1; - } - } // End of if (0x5 == *(iePtr + 1)) - } // End of if ((iePtr = (v_U8_t *) - else { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: IBSS_PROP_IE is not present in IE", __func__); - return 0; - } - ieLen -= (*(iePtr + 1) + 2); - iePtr += (*(iePtr + 1) + 2); - } // while - return 0; -} -#endif - -int hdd_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) -{ - hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); - hdd_priv_data_t priv_data; - tANI_U8 *command = NULL; - int ret = 0; - - if (NULL == pAdapter) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s: HDD adapter context is Null", __func__); - ret = -ENODEV; - goto exit; - } - - if ((!ifr) || (!ifr->ifr_data)) - { - ret = -EINVAL; - goto exit; - } - - if ((WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s:LOGP in Progress. Ignore!!!", __func__); - ret = -EBUSY; - goto exit; - } - - if (copy_from_user(&priv_data, ifr->ifr_data, sizeof(hdd_priv_data_t))) - { - ret = -EFAULT; - goto exit; - } - - if (priv_data.total_len <= 0) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, - "%s:invalid priv_data.total_len(%d)!!!", __func__, - priv_data.total_len); - ret = -EINVAL; - goto exit; - } - - /* Allocate +1 for '\0' */ - command = kmalloc(priv_data.total_len + 1, GFP_KERNEL); - if (!command) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s: failed to allocate memory\n", __func__); - ret = -ENOMEM; - goto exit; - } - - if (copy_from_user(command, priv_data.buf, priv_data.total_len)) - { - ret = -EFAULT; - goto exit; - } - - /* Making sure the command is NUL-terminated */ - command[priv_data.total_len] = '\0'; - - if ((SIOCDEVPRIVATE + 1) == cmd) - { - hdd_context_t *pHddCtx = (hdd_context_t*)pAdapter->pHddCtx; - - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: Received %s cmd from Wi-Fi GUI***", __func__, command); - - if (strncmp(command, "P2P_DEV_ADDR", 12) == 0 ) - { - if (copy_to_user(priv_data.buf, pHddCtx->p2pDeviceAddress.bytes, - sizeof(tSirMacAddr))) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s: failed to copy data to user buffer\n", __func__); - ret = -EFAULT; - } - } - else if(strncmp(command, "SETBAND", 7) == 0) - { - tANI_U8 *ptr = command ; - int ret = 0 ; - - /* Change band request received */ - - /* First 8 bytes will have "SETBAND " and - * 9 byte will have band setting value */ - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: SetBandCommand Info comm %s UL %d, TL %d", __func__, command, priv_data.used_len, priv_data.total_len); - /* Change band request received */ - ret = hdd_setBand_helper(dev, ptr); - } - else if(strncmp(command, "SETWMMPS", 8) == 0) - { - tANI_U8 *ptr = command; - ret = hdd_wmmps_helper(pAdapter, ptr); - } - else if ( strncasecmp(command, "COUNTRY", 7) == 0 ) - { - char *country_code; - - country_code = command + 8; - - INIT_COMPLETION(pAdapter->change_country_code); - hdd_checkandupdate_dfssetting(pAdapter, country_code); -#ifndef CONFIG_ENABLE_LINUX_REG - hdd_checkandupdate_phymode(pAdapter, country_code); -#endif - ret = (int)sme_ChangeCountryCode(pHddCtx->hHal, - (void *)(tSmeChangeCountryCallback) - wlan_hdd_change_country_code_callback, - country_code, pAdapter, pHddCtx->pvosContext, eSIR_TRUE, eSIR_TRUE); - if (eHAL_STATUS_SUCCESS == ret) - { - ret = wait_for_completion_interruptible_timeout( - &pAdapter->change_country_code, - msecs_to_jiffies(WLAN_WAIT_TIME_COUNTRY)); - if (0 >= ret) - { - hddLog(VOS_TRACE_LEVEL_ERROR, "%s: SME while setting country code timed out", - __func__); - } - } - else - { - VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, - "%s: SME Change Country code fail ret=%d", __func__, ret); - ret = -EINVAL; - } - - } - /* - command should be a string having format - SET_SAP_CHANNEL_LIST - */ - else if(strncmp(command, "SET_SAP_CHANNEL_LIST", 20) == 0) - { - tANI_U8 *ptr = command; - - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - " Received Command to Set Preferred Channels for SAP in %s", __func__); - - ret = sapSetPreferredChannel(ptr); - } - else if(strncmp(command, "SETSUSPENDMODE", 14) == 0) - { -#ifndef QCA_WIFI_2_0 - int suspend = 0; - tANI_U8 *ptr = (tANI_U8*)command + 15; - - suspend = *ptr - '0'; - hdd_set_wlan_suspend_mode(suspend); -#endif - } -#ifdef WLAN_FEATURE_NEIGHBOR_ROAMING - else if (strncmp(command, "SETROAMTRIGGER", 14) == 0) - { - tANI_U8 *value = command; - tANI_S8 rssi = 0; - tANI_U8 lookUpThreshold = CFG_NEIGHBOR_LOOKUP_RSSI_THRESHOLD_DEFAULT; - eHalStatus status = eHAL_STATUS_SUCCESS; - - /* Move pointer to ahead of SETROAMTRIGGER */ - value = value + 15; - - /* Convert the value from ascii to integer */ - ret = kstrtos8(value, 10, &rssi); - if (ret < 0) - { - /* If the input value is greater than max value of datatype, then also - kstrtou8 fails */ - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: kstrtou8 failed Input value may be out of range[%d - %d]", - __func__, - CFG_NEIGHBOR_LOOKUP_RSSI_THRESHOLD_MIN, - CFG_NEIGHBOR_LOOKUP_RSSI_THRESHOLD_MAX); - ret = -EINVAL; - goto exit; - } - - lookUpThreshold = abs(rssi); - - if ((lookUpThreshold < CFG_NEIGHBOR_LOOKUP_RSSI_THRESHOLD_MIN) || - (lookUpThreshold > CFG_NEIGHBOR_LOOKUP_RSSI_THRESHOLD_MAX)) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "Neighbor lookup threshold value %d is out of range" - " (Min: %d Max: %d)", lookUpThreshold, - CFG_NEIGHBOR_LOOKUP_RSSI_THRESHOLD_MIN, - CFG_NEIGHBOR_LOOKUP_RSSI_THRESHOLD_MAX); - ret = -EINVAL; - goto exit; - } - - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: Received Command to Set Roam trigger" - " (Neighbor lookup threshold) = %d", __func__, lookUpThreshold); - - pHddCtx->cfg_ini->nNeighborLookupRssiThreshold = lookUpThreshold; - status = sme_setNeighborLookupRssiThreshold((tHalHandle)(pHddCtx->hHal), lookUpThreshold); - if (eHAL_STATUS_SUCCESS != status) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: Failed to set roam trigger, try again", __func__); - ret = -EPERM; - goto exit; - } - - /* Set Reassoc threshold to (lookup rssi threshold + 5 dBm) */ - sme_setNeighborReassocRssiThreshold((tHalHandle)(pHddCtx->hHal), lookUpThreshold + 5); - } - else if (strncmp(command, "GETROAMTRIGGER", 14) == 0) - { - tANI_U8 lookUpThreshold = sme_getNeighborLookupRssiThreshold((tHalHandle)(pHddCtx->hHal)); - int rssi = (-1) * lookUpThreshold; - char extra[32]; - tANI_U8 len = 0; - - len = scnprintf(extra, sizeof(extra), "%s %d", command, rssi); - if (copy_to_user(priv_data.buf, &extra, len + 1)) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: failed to copy data to user buffer", __func__); - ret = -EFAULT; - goto exit; - } - } - else if (strncmp(command, "SETROAMSCANPERIOD", 17) == 0) - { - tANI_U8 *value = command; - tANI_U8 roamScanPeriod = 0; - tANI_U16 neighborEmptyScanRefreshPeriod = CFG_EMPTY_SCAN_REFRESH_PERIOD_DEFAULT; - - /* input refresh period is in terms of seconds */ - /* Move pointer to ahead of SETROAMSCANPERIOD */ - value = value + 18; - /* Convert the value from ascii to integer */ - ret = kstrtou8(value, 10, &roamScanPeriod); - if (ret < 0) - { - /* If the input value is greater than max value of datatype, then also - kstrtou8 fails */ - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: kstrtou8 failed Input value may be out of range[%d - %d]", - __func__, - (CFG_EMPTY_SCAN_REFRESH_PERIOD_MIN/1000), - (CFG_EMPTY_SCAN_REFRESH_PERIOD_MAX/1000)); - ret = -EINVAL; - goto exit; - } - - if ((roamScanPeriod < (CFG_EMPTY_SCAN_REFRESH_PERIOD_MIN/1000)) || - (roamScanPeriod > (CFG_EMPTY_SCAN_REFRESH_PERIOD_MAX/1000))) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "Roam scan period value %d is out of range" - " (Min: %d Max: %d)", roamScanPeriod, - (CFG_EMPTY_SCAN_REFRESH_PERIOD_MIN/1000), - (CFG_EMPTY_SCAN_REFRESH_PERIOD_MAX/1000)); - ret = -EINVAL; - goto exit; - } - neighborEmptyScanRefreshPeriod = roamScanPeriod * 1000; - - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: Received Command to Set roam scan period" - " (Empty Scan refresh period) = %d", __func__, roamScanPeriod); - - pHddCtx->cfg_ini->nEmptyScanRefreshPeriod = neighborEmptyScanRefreshPeriod; - sme_UpdateEmptyScanRefreshPeriod((tHalHandle)(pHddCtx->hHal), neighborEmptyScanRefreshPeriod); - } - else if (strncmp(command, "GETROAMSCANPERIOD", 17) == 0) - { - tANI_U16 nEmptyScanRefreshPeriod = sme_getEmptyScanRefreshPeriod((tHalHandle)(pHddCtx->hHal)); - char extra[32]; - tANI_U8 len = 0; - - len = scnprintf(extra, sizeof(extra), "%s %d", - "GETROAMSCANPERIOD", (nEmptyScanRefreshPeriod/1000)); - /* Returned value is in units of seconds */ - if (copy_to_user(priv_data.buf, &extra, len + 1)) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: failed to copy data to user buffer", __func__); - ret = -EFAULT; - goto exit; - } - } - else if (strncmp(command, "SETROAMSCANREFRESHPERIOD", 24) == 0) - { - tANI_U8 *value = command; - tANI_U8 roamScanRefreshPeriod = 0; - tANI_U16 neighborScanRefreshPeriod = CFG_NEIGHBOR_SCAN_RESULTS_REFRESH_PERIOD_DEFAULT; - - /* input refresh period is in terms of seconds */ - /* Move pointer to ahead of SETROAMSCANREFRESHPERIOD */ - value = value + 25; - - /* Convert the value from ascii to integer */ - ret = kstrtou8(value, 10, &roamScanRefreshPeriod); - if (ret < 0) - { - /* If the input value is greater than max value of datatype, then also - kstrtou8 fails */ - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: kstrtou8 failed Input value may be out of range[%d - %d]", - __func__, - (CFG_NEIGHBOR_SCAN_RESULTS_REFRESH_PERIOD_MIN/1000), - (CFG_NEIGHBOR_SCAN_RESULTS_REFRESH_PERIOD_MAX/1000)); - ret = -EINVAL; - goto exit; - } - - if ((roamScanRefreshPeriod < (CFG_NEIGHBOR_SCAN_RESULTS_REFRESH_PERIOD_MIN/1000)) || - (roamScanRefreshPeriod > (CFG_NEIGHBOR_SCAN_RESULTS_REFRESH_PERIOD_MAX/1000))) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "Neighbor scan results refresh period value %d is out of range" - " (Min: %d Max: %d)", roamScanRefreshPeriod, - (CFG_NEIGHBOR_SCAN_RESULTS_REFRESH_PERIOD_MIN/1000), - (CFG_NEIGHBOR_SCAN_RESULTS_REFRESH_PERIOD_MAX/1000)); - ret = -EINVAL; - goto exit; - } - neighborScanRefreshPeriod = roamScanRefreshPeriod * 1000; - - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: Received Command to Set roam scan refresh period" - " (Scan refresh period) = %d", __func__, roamScanRefreshPeriod); - - pHddCtx->cfg_ini->nNeighborResultsRefreshPeriod = neighborScanRefreshPeriod; - sme_setNeighborScanRefreshPeriod((tHalHandle)(pHddCtx->hHal), neighborScanRefreshPeriod); - } - else if (strncmp(command, "GETROAMSCANREFRESHPERIOD", 24) == 0) - { - tANI_U16 value = sme_getNeighborScanRefreshPeriod((tHalHandle)(pHddCtx->hHal)); - char extra[32]; - tANI_U8 len = 0; - - len = scnprintf(extra, sizeof(extra), "%s %d", - "GETROAMSCANREFRESHPERIOD", (value/1000)); - /* Returned value is in units of seconds */ - if (copy_to_user(priv_data.buf, &extra, len + 1)) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: failed to copy data to user buffer", __func__); - ret = -EFAULT; - goto exit; - } - } -#ifdef FEATURE_WLAN_LFR - /* SETROAMMODE */ - else if (strncmp(command, "SETROAMMODE", SIZE_OF_SETROAMMODE) == 0) - { - tANI_U8 *value = command; - tANI_BOOLEAN roamMode = CFG_LFR_FEATURE_ENABLED_DEFAULT; - - /* Move pointer to ahead of SETROAMMODE */ - value = value + SIZE_OF_SETROAMMODE + 1; - - /* Convert the value from ascii to integer */ - ret = kstrtou8(value, SIZE_OF_SETROAMMODE, &roamMode); - if (ret < 0) - { - /* If the input value is greater than max value of datatype, then also - kstrtou8 fails */ - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: kstrtou8 failed range [%d - %d]", __func__, - CFG_LFR_FEATURE_ENABLED_MIN, - CFG_LFR_FEATURE_ENABLED_MAX); - ret = -EINVAL; - goto exit; - } - if ((roamMode < CFG_LFR_FEATURE_ENABLED_MIN) || - (roamMode > CFG_LFR_FEATURE_ENABLED_MAX)) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "Roam Mode value %d is out of range" - " (Min: %d Max: %d)", roamMode, - CFG_LFR_FEATURE_ENABLED_MIN, - CFG_LFR_FEATURE_ENABLED_MAX); - ret = -EINVAL; - goto exit; - } - - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: Received Command to Set Roam Mode = %d", __func__, roamMode); - /* - * Note that - * SETROAMMODE 0 is to enable LFR while - * SETROAMMODE 1 is to disable LFR, but - * NotifyIsFastRoamIniFeatureEnabled 0/1 is to enable/disable. - * So, we have to invert the value to call sme_UpdateIsFastRoamIniFeatureEnabled. - */ - if (CFG_LFR_FEATURE_ENABLED_MIN == roamMode) - roamMode = CFG_LFR_FEATURE_ENABLED_MAX; /* Roam enable */ - else - roamMode = CFG_LFR_FEATURE_ENABLED_MIN; /* Roam disable */ - - pHddCtx->cfg_ini->isFastRoamIniFeatureEnabled = roamMode; - sme_UpdateIsFastRoamIniFeatureEnabled((tHalHandle)(pHddCtx->hHal), roamMode); - } - /* GETROAMMODE */ - else if (strncmp(priv_data.buf, "GETROAMMODE", SIZE_OF_GETROAMMODE) == 0) - { - tANI_BOOLEAN roamMode = sme_getIsLfrFeatureEnabled((tHalHandle)(pHddCtx->hHal)); - char extra[32]; - tANI_U8 len = 0; - - /* - * roamMode value shall be inverted because the sementics is different. - */ - if (CFG_LFR_FEATURE_ENABLED_MIN == roamMode) - roamMode = CFG_LFR_FEATURE_ENABLED_MAX; - else - roamMode = CFG_LFR_FEATURE_ENABLED_MIN; - - len = scnprintf(extra, sizeof(extra), "%s %d", command, roamMode); - if (copy_to_user(priv_data.buf, &extra, len + 1)) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: failed to copy data to user buffer", __func__); - ret = -EFAULT; - goto exit; - } - } -#endif -#endif -#if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR) - else if (strncmp(command, "SETROAMDELTA", 12) == 0) - { - tANI_U8 *value = command; - tANI_U8 roamRssiDiff = CFG_ROAM_RSSI_DIFF_DEFAULT; - - /* Move pointer to ahead of SETROAMDELTA */ - value = value + 13; - /* Convert the value from ascii to integer */ - ret = kstrtou8(value, 10, &roamRssiDiff); - if (ret < 0) - { - /* If the input value is greater than max value of datatype, then also - kstrtou8 fails */ - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: kstrtou8 failed range [%d - %d]", __func__, - CFG_ROAM_RSSI_DIFF_MIN, - CFG_ROAM_RSSI_DIFF_MAX); - ret = -EINVAL; - goto exit; - } - - if ((roamRssiDiff < CFG_ROAM_RSSI_DIFF_MIN) || - (roamRssiDiff > CFG_ROAM_RSSI_DIFF_MAX)) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "Roam rssi diff value %d is out of range" - " (Min: %d Max: %d)", roamRssiDiff, - CFG_ROAM_RSSI_DIFF_MIN, - CFG_ROAM_RSSI_DIFF_MAX); - ret = -EINVAL; - goto exit; - } + /* Making sure the command is NUL-terminated */ + command[priv_data.total_len] = '\0'; - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: Received Command to Set roam rssi diff = %d", __func__, roamRssiDiff); + if ((SIOCDEVPRIVATE + 1) == cmd) + { + hdd_context_t *pHddCtx = (hdd_context_t*)pAdapter->pHddCtx; - pHddCtx->cfg_ini->RoamRssiDiff = roamRssiDiff; - sme_UpdateRoamRssiDiff((tHalHandle)(pHddCtx->hHal), roamRssiDiff); - } - else if (strncmp(priv_data.buf, "GETROAMDELTA", 12) == 0) - { - tANI_U8 roamRssiDiff = sme_getRoamRssiDiff((tHalHandle)(pHddCtx->hHal)); - char extra[32]; - tANI_U8 len = 0; + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s: Received %s cmd from Wi-Fi GUI***", __func__, command); - len = scnprintf(extra, sizeof(extra), "%s %d", - command, roamRssiDiff); - if (copy_to_user(priv_data.buf, &extra, len + 1)) + if (strncmp(command, "P2P_DEV_ADDR", 12) == 0 ) + { + if (copy_to_user(priv_data.buf, pHddCtx->p2pDeviceAddress.bytes, + sizeof(tSirMacAddr))) { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: failed to copy data to user buffer", __func__); + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s: failed to copy data to user buffer\n", __func__); ret = -EFAULT; - goto exit; } } -#endif -#if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR) - else if (strncmp(command, "GETBAND", 7) == 0) + else if(strncmp(command, "SETBAND", 7) == 0) { - int band = -1; - char extra[32]; - tANI_U8 len = 0; - hdd_getBand_helper(pHddCtx, &band); + tANI_U8 *ptr = command ; + int ret = 0 ; - len = scnprintf(extra, sizeof(extra), "%s %d", command, band); - if (copy_to_user(priv_data.buf, &extra, len + 1)) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: failed to copy data to user buffer", __func__); - ret = -EFAULT; - goto exit; - } + /* Change band request received */ + + /* First 8 bytes will have "SETBAND " and + * 9 byte will have band setting value */ + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s: SetBandCommand Info comm %s UL %d, TL %d", __func__, command, priv_data.used_len, priv_data.total_len); + /* Change band request received */ + ret = hdd_setBand_helper(dev, ptr); } - else if (strncmp(command, "SETROAMSCANCHANNELS", 19) == 0) + else if(strncmp(command, "SETWMMPS", 8) == 0) { - tANI_U8 *value = command; - tANI_U8 ChannelList[WNI_CFG_VALID_CHANNEL_LIST_LEN] = {0}; - tANI_U8 numChannels = 0; - eHalStatus status = eHAL_STATUS_SUCCESS; + tANI_U8 *ptr = command; + ret = hdd_wmmps_helper(pAdapter, ptr); + } + else if ( strncasecmp(command, "COUNTRY", 7) == 0 ) + { + char *country_code; - status = hdd_parse_channellist(value, ChannelList, &numChannels); - if (eHAL_STATUS_SUCCESS != status) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: Failed to parse channel list information", __func__); - ret = -EINVAL; - goto exit; - } + country_code = command + 8; - if (numChannels > WNI_CFG_VALID_CHANNEL_LIST_LEN) + INIT_COMPLETION(pAdapter->change_country_code); + hdd_checkandupdate_dfssetting(pAdapter, country_code); +#ifndef CONFIG_ENABLE_LINUX_REG + hdd_checkandupdate_phymode(pAdapter, country_code); +#endif + ret = (int)sme_ChangeCountryCode(pHddCtx->hHal, + (void *)(tSmeChangeCountryCallback) + wlan_hdd_change_country_code_callback, + country_code, pAdapter, pHddCtx->pvosContext, eSIR_TRUE, eSIR_TRUE); + if (eHAL_STATUS_SUCCESS == ret) { - VOS_TRACE( VOS_MODULE_ID_HDD, - VOS_TRACE_LEVEL_ERROR, - "%s: number of channels (%d) supported exceeded max (%d)", - __func__, - numChannels, - WNI_CFG_VALID_CHANNEL_LIST_LEN); - ret = -EINVAL; - goto exit; + ret = wait_for_completion_interruptible_timeout( + &pAdapter->change_country_code, + msecs_to_jiffies(WLAN_WAIT_TIME_COUNTRY)); + if (0 >= ret) + { + hddLog(VOS_TRACE_LEVEL_ERROR, "%s: SME while setting country code timed out", + __func__); + } } - status = sme_ChangeRoamScanChannelList((tHalHandle)(pHddCtx->hHal), ChannelList, - numChannels); - if (eHAL_STATUS_SUCCESS != status) + else { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: Failed to update channel list information", __func__); + VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, + "%s: SME Change Country code fail ret=%d", __func__, ret); ret = -EINVAL; - goto exit; } + } - else if (strncmp(command, "GETROAMSCANCHANNELS", 19) == 0) + /* + command should be a string having format + SET_SAP_CHANNEL_LIST + */ + else if(strncmp(command, "SET_SAP_CHANNEL_LIST", 20) == 0) { - tANI_U8 ChannelList[WNI_CFG_VALID_CHANNEL_LIST_LEN] = {0}; - tANI_U8 numChannels = 0; - tANI_U8 j = 0; - char extra[128] = {0}; - int len; + tANI_U8 *ptr = command; - if (eHAL_STATUS_SUCCESS != sme_getRoamScanChannelList( (tHalHandle)(pHddCtx->hHal), - ChannelList, &numChannels )) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s: failed to get roam scan channel list", __func__); - ret = -EFAULT; - goto exit; - } - /* output channel list is of the format - [Number of roam scan channels][Channel1][Channel2]... */ - /* copy the number of channels in the 0th index */ - len = scnprintf(extra, sizeof(extra), "%s %d", command, numChannels); - for (j = 0; (j < numChannels); j++) - { - len += scnprintf(extra + len, sizeof(extra) - len, " %d", - ChannelList[j]); - } + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + " Received Command to Set Preferred Channels for SAP in %s", __func__); - if (copy_to_user(priv_data.buf, &extra, len + 1)) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: failed to copy data to user buffer", __func__); - ret = -EFAULT; - goto exit; - } + ret = sapSetPreferredChannel(ptr); } - else if (strncmp(command, "GETCCXMODE", 10) == 0) + else if(strncmp(command, "SETSUSPENDMODE", 14) == 0) { - tANI_BOOLEAN ccxMode = sme_getIsCcxFeatureEnabled((tHalHandle)(pHddCtx->hHal)); - char extra[32]; - tANI_U8 len = 0; - - /* Check if the features OKC/CCX/11R are supported simultaneously, - then this operation is not permitted (return FAILURE) */ - if (ccxMode && - hdd_is_okc_mode_enabled(pHddCtx) && - sme_getIsFtFeatureEnabled((tHalHandle)(pHddCtx->hHal))) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, - "%s: OKC/CCX/11R are supported simultaneously" - " hence this operation is not permitted!", __func__); - ret = -EPERM; - goto exit; - } +#ifndef QCA_WIFI_2_0 + int suspend = 0; + tANI_U8 *ptr = (tANI_U8*)command + 15; - len = scnprintf(extra, sizeof(extra), "%s %d", - "GETCCXMODE", ccxMode); - if (copy_to_user(priv_data.buf, &extra, len + 1)) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: failed to copy data to user buffer", __func__); - ret = -EFAULT; - goto exit; - } + suspend = *ptr - '0'; + hdd_set_wlan_suspend_mode(suspend); +#endif } - else if (strncmp(command, "GETOKCMODE", 10) == 0) +#ifdef WLAN_FEATURE_NEIGHBOR_ROAMING + else if (strncmp(command, "SETROAMTRIGGER", 14) == 0) { - tANI_BOOLEAN okcMode = hdd_is_okc_mode_enabled(pHddCtx); - char extra[32]; - tANI_U8 len = 0; + tANI_U8 *value = command; + tANI_S8 rssi = 0; + tANI_U8 lookUpThreshold = CFG_NEIGHBOR_LOOKUP_RSSI_THRESHOLD_DEFAULT; + eHalStatus status = eHAL_STATUS_SUCCESS; - /* Check if the features OKC/CCX/11R are supported simultaneously, - then this operation is not permitted (return FAILURE) */ - if (okcMode && - sme_getIsCcxFeatureEnabled((tHalHandle)(pHddCtx->hHal)) && - sme_getIsFtFeatureEnabled((tHalHandle)(pHddCtx->hHal))) + /* Move pointer to ahead of SETROAMTRIGGER */ + value = value + 15; + + /* Convert the value from ascii to integer */ + ret = kstrtos8(value, 10, &rssi); + if (ret < 0) { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, - "%s: OKC/CCX/11R are supported simultaneously" - " hence this operation is not permitted!", __func__); - ret = -EPERM; + /* If the input value is greater than max value of datatype, then also + kstrtou8 fails */ + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: kstrtou8 failed Input value may be out of range[%d - %d]", + __func__, + CFG_NEIGHBOR_LOOKUP_RSSI_THRESHOLD_MIN, + CFG_NEIGHBOR_LOOKUP_RSSI_THRESHOLD_MAX); + ret = -EINVAL; goto exit; } - len = scnprintf(extra, sizeof(extra), "%s %d", - "GETOKCMODE", okcMode); - if (copy_to_user(priv_data.buf, &extra, len + 1)) + lookUpThreshold = abs(rssi); + + if ((lookUpThreshold < CFG_NEIGHBOR_LOOKUP_RSSI_THRESHOLD_MIN) || + (lookUpThreshold > CFG_NEIGHBOR_LOOKUP_RSSI_THRESHOLD_MAX)) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: failed to copy data to user buffer", __func__); - ret = -EFAULT; + "Neighbor lookup threshold value %d is out of range" + " (Min: %d Max: %d)", lookUpThreshold, + CFG_NEIGHBOR_LOOKUP_RSSI_THRESHOLD_MIN, + CFG_NEIGHBOR_LOOKUP_RSSI_THRESHOLD_MAX); + ret = -EINVAL; goto exit; } - } - else if (strncmp(command, "GETFASTROAM", 11) == 0) - { - tANI_BOOLEAN lfrMode = sme_getIsLfrFeatureEnabled((tHalHandle)(pHddCtx->hHal)); - char extra[32]; - tANI_U8 len = 0; - len = scnprintf(extra, sizeof(extra), "%s %d", - "GETFASTROAM", lfrMode); - if (copy_to_user(priv_data.buf, &extra, len + 1)) + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s: Received Command to Set Roam trigger" + " (Neighbor lookup threshold) = %d", __func__, lookUpThreshold); + + pHddCtx->cfg_ini->nNeighborLookupRssiThreshold = lookUpThreshold; + status = sme_setNeighborLookupRssiThreshold((tHalHandle)(pHddCtx->hHal), lookUpThreshold); + if (eHAL_STATUS_SUCCESS != status) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: failed to copy data to user buffer", __func__); - ret = -EFAULT; + "%s: Failed to set roam trigger, try again", __func__); + ret = -EPERM; goto exit; } + + /* Set Reassoc threshold to (lookup rssi threshold + 5 dBm) */ + sme_setNeighborReassocRssiThreshold((tHalHandle)(pHddCtx->hHal), lookUpThreshold + 5); } - else if (strncmp(command, "GETFASTTRANSITION", 17) == 0) + else if (strncmp(command, "GETROAMTRIGGER", 14) == 0) { - tANI_BOOLEAN ft = sme_getIsFtFeatureEnabled((tHalHandle)(pHddCtx->hHal)); + tANI_U8 lookUpThreshold = sme_getNeighborLookupRssiThreshold((tHalHandle)(pHddCtx->hHal)); + int rssi = (-1) * lookUpThreshold; char extra[32]; tANI_U8 len = 0; - len = scnprintf(extra, sizeof(extra), "%s %d", - "GETFASTTRANSITION", ft); + len = scnprintf(extra, sizeof(extra), "%s %d", command, rssi); if (copy_to_user(priv_data.buf, &extra, len + 1)) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, @@ -3006,232 +1951,273 @@ int hdd_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) goto exit; } } - else if (strncmp(command, "SETROAMSCANCHANNELMINTIME", 25) == 0) + else if (strncmp(command, "SETROAMSCANPERIOD", 17) == 0) { tANI_U8 *value = command; - tANI_U8 minTime = CFG_NEIGHBOR_SCAN_MIN_CHAN_TIME_DEFAULT; + tANI_U8 roamScanPeriod = 0; + tANI_U16 neighborEmptyScanRefreshPeriod = CFG_EMPTY_SCAN_REFRESH_PERIOD_DEFAULT; - /* Move pointer to ahead of SETROAMSCANCHANNELMINTIME */ - value = value + 26; + /* input refresh period is in terms of seconds */ + /* Move pointer to ahead of SETROAMSCANPERIOD */ + value = value + 18; /* Convert the value from ascii to integer */ - ret = kstrtou8(value, 10, &minTime); + ret = kstrtou8(value, 10, &roamScanPeriod); if (ret < 0) { /* If the input value is greater than max value of datatype, then also kstrtou8 fails */ VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: kstrtou8 failed range [%d - %d]", __func__, - CFG_NEIGHBOR_SCAN_MIN_CHAN_TIME_MIN, - CFG_NEIGHBOR_SCAN_MIN_CHAN_TIME_MAX); + "%s: kstrtou8 failed Input value may be out of range[%d - %d]", + __func__, + (CFG_EMPTY_SCAN_REFRESH_PERIOD_MIN/1000), + (CFG_EMPTY_SCAN_REFRESH_PERIOD_MAX/1000)); ret = -EINVAL; goto exit; } - if ((minTime < CFG_NEIGHBOR_SCAN_MIN_CHAN_TIME_MIN) || - (minTime > CFG_NEIGHBOR_SCAN_MIN_CHAN_TIME_MAX)) + + if ((roamScanPeriod < (CFG_EMPTY_SCAN_REFRESH_PERIOD_MIN/1000)) || + (roamScanPeriod > (CFG_EMPTY_SCAN_REFRESH_PERIOD_MAX/1000))) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "scan min channel time value %d is out of range" - " (Min: %d Max: %d)", minTime, - CFG_NEIGHBOR_SCAN_MIN_CHAN_TIME_MIN, - CFG_NEIGHBOR_SCAN_MIN_CHAN_TIME_MAX); + "Roam scan period value %d is out of range" + " (Min: %d Max: %d)", roamScanPeriod, + (CFG_EMPTY_SCAN_REFRESH_PERIOD_MIN/1000), + (CFG_EMPTY_SCAN_REFRESH_PERIOD_MAX/1000)); ret = -EINVAL; goto exit; } + neighborEmptyScanRefreshPeriod = roamScanPeriod * 1000; VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: Received Command to change channel min time = %d", __func__, minTime); + "%s: Received Command to Set roam scan period" + " (Empty Scan refresh period) = %d", __func__, roamScanPeriod); - pHddCtx->cfg_ini->nNeighborScanMinChanTime = minTime; - sme_setNeighborScanMinChanTime((tHalHandle)(pHddCtx->hHal), minTime); + pHddCtx->cfg_ini->nEmptyScanRefreshPeriod = neighborEmptyScanRefreshPeriod; + sme_UpdateEmptyScanRefreshPeriod((tHalHandle)(pHddCtx->hHal), neighborEmptyScanRefreshPeriod); } - else if (strncmp(command, "SENDACTIONFRAME", 15) == 0) + else if (strncmp(command, "GETROAMSCANPERIOD", 17) == 0) { - tANI_U8 *value = command; - tANI_U8 channel = 0; - tANI_U8 dwellTime = 0; - tANI_U8 bufLen = 0; - tANI_U8 *buf = NULL; - tSirMacAddr targetApBssid; - eHalStatus status = eHAL_STATUS_SUCCESS; - struct ieee80211_channel chan; - tANI_U8 finalLen = 0; - tANI_U8 *finalBuf = NULL; - tANI_U8 temp = 0; - u64 cookie; - hdd_station_ctx_t *pHddStaCtx = NULL; - pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); + tANI_U16 nEmptyScanRefreshPeriod = sme_getEmptyScanRefreshPeriod((tHalHandle)(pHddCtx->hHal)); + char extra[32]; + tANI_U8 len = 0; - /* if not associated, no need to send action frame */ - if (eConnectionState_Associated != pHddStaCtx->conn_info.connState) + len = scnprintf(extra, sizeof(extra), "%s %d", + "GETROAMSCANPERIOD", (nEmptyScanRefreshPeriod/1000)); + /* Returned value is in units of seconds */ + if (copy_to_user(priv_data.buf, &extra, len + 1)) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "%s:Not associated!",__func__); - ret = -EINVAL; + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: failed to copy data to user buffer", __func__); + ret = -EFAULT; goto exit; } + } + else if (strncmp(command, "SETROAMSCANREFRESHPERIOD", 24) == 0) + { + tANI_U8 *value = command; + tANI_U8 roamScanRefreshPeriod = 0; + tANI_U16 neighborScanRefreshPeriod = CFG_NEIGHBOR_SCAN_RESULTS_REFRESH_PERIOD_DEFAULT; - status = hdd_parse_send_action_frame_data(value, targetApBssid, &channel, - &dwellTime, &buf, &bufLen); - if (eHAL_STATUS_SUCCESS != status) + /* input refresh period is in terms of seconds */ + /* Move pointer to ahead of SETROAMSCANREFRESHPERIOD */ + value = value + 25; + + /* Convert the value from ascii to integer */ + ret = kstrtou8(value, 10, &roamScanRefreshPeriod); + if (ret < 0) { + /* If the input value is greater than max value of datatype, then also + kstrtou8 fails */ VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: Failed to parse send action frame data", __func__); + "%s: kstrtou8 failed Input value may be out of range[%d - %d]", + __func__, + (CFG_NEIGHBOR_SCAN_RESULTS_REFRESH_PERIOD_MIN/1000), + (CFG_NEIGHBOR_SCAN_RESULTS_REFRESH_PERIOD_MAX/1000)); ret = -EINVAL; goto exit; } - /* if the target bssid is different from currently associated AP, - then no need to send action frame */ - if (VOS_TRUE != vos_mem_compare(targetApBssid, - pHddStaCtx->conn_info.bssId, sizeof(tSirMacAddr))) + if ((roamScanRefreshPeriod < (CFG_NEIGHBOR_SCAN_RESULTS_REFRESH_PERIOD_MIN/1000)) || + (roamScanRefreshPeriod > (CFG_NEIGHBOR_SCAN_RESULTS_REFRESH_PERIOD_MAX/1000))) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "%s:STA is not associated to this AP!",__func__); + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "Neighbor scan results refresh period value %d is out of range" + " (Min: %d Max: %d)", roamScanRefreshPeriod, + (CFG_NEIGHBOR_SCAN_RESULTS_REFRESH_PERIOD_MIN/1000), + (CFG_NEIGHBOR_SCAN_RESULTS_REFRESH_PERIOD_MAX/1000)); ret = -EINVAL; - vos_mem_free(buf); goto exit; } + neighborScanRefreshPeriod = roamScanRefreshPeriod * 1000; - /* if the channel number is different from operating channel then - no need to send action frame */ - if (channel != pHddStaCtx->conn_info.operationChannel) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: channel(%d) is different from operating channel(%d)", - __func__, channel, pHddStaCtx->conn_info.operationChannel); - ret = -EINVAL; - vos_mem_free(buf); - goto exit; - } - chan.center_freq = sme_ChnToFreq(channel); + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s: Received Command to Set roam scan refresh period" + " (Scan refresh period) = %d", __func__, roamScanRefreshPeriod); - finalLen = bufLen + 24; - finalBuf = vos_mem_malloc(finalLen); - if (NULL == finalBuf) + pHddCtx->cfg_ini->nNeighborResultsRefreshPeriod = neighborScanRefreshPeriod; + sme_setNeighborScanRefreshPeriod((tHalHandle)(pHddCtx->hHal), neighborScanRefreshPeriod); + } + else if (strncmp(command, "GETROAMSCANREFRESHPERIOD", 24) == 0) + { + tANI_U16 value = sme_getNeighborScanRefreshPeriod((tHalHandle)(pHddCtx->hHal)); + char extra[32]; + tANI_U8 len = 0; + + len = scnprintf(extra, sizeof(extra), "%s %d", + "GETROAMSCANREFRESHPERIOD", (value/1000)); + /* Returned value is in units of seconds */ + if (copy_to_user(priv_data.buf, &extra, len + 1)) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, "%s:memory allocation failed",__func__); - ret = -ENOMEM; - vos_mem_free(buf); + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: failed to copy data to user buffer", __func__); + ret = -EFAULT; goto exit; } - vos_mem_zero(finalBuf, finalLen); - - /* Fill subtype */ - temp = SIR_MAC_MGMT_ACTION << 4; - vos_mem_copy(finalBuf + 0, &temp, sizeof(temp)); - - /* Fill type */ - temp = SIR_MAC_MGMT_FRAME; - vos_mem_copy(finalBuf + 2, &temp, sizeof(temp)); - - /* Fill destination address (bssid of the AP) */ - vos_mem_copy(finalBuf + 4, targetApBssid, sizeof(targetApBssid)); - - /* Fill source address (STA mac address) */ - vos_mem_copy(finalBuf + 10, pAdapter->macAddressCurrent.bytes, sizeof(pAdapter->macAddressCurrent.bytes)); + } +#ifdef FEATURE_WLAN_LFR + /* SETROAMMODE */ + else if (strncmp(command, "SETROAMMODE", SIZE_OF_SETROAMMODE) == 0) + { + tANI_U8 *value = command; + tANI_BOOLEAN roamMode = CFG_LFR_FEATURE_ENABLED_DEFAULT; - /* Fill BSSID (AP mac address) */ - vos_mem_copy(finalBuf + 16, targetApBssid, sizeof(targetApBssid)); + /* Move pointer to ahead of SETROAMMODE */ + value = value + SIZE_OF_SETROAMMODE + 1; - /* Fill received buffer from 24th address */ - vos_mem_copy(finalBuf + 24, buf, bufLen); + /* Convert the value from ascii to integer */ + ret = kstrtou8(value, SIZE_OF_SETROAMMODE, &roamMode); + if (ret < 0) + { + /* If the input value is greater than max value of datatype, then also + kstrtou8 fails */ + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: kstrtou8 failed range [%d - %d]", __func__, + CFG_LFR_FEATURE_ENABLED_MIN, + CFG_LFR_FEATURE_ENABLED_MAX); + ret = -EINVAL; + goto exit; + } + if ((roamMode < CFG_LFR_FEATURE_ENABLED_MIN) || + (roamMode > CFG_LFR_FEATURE_ENABLED_MAX)) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "Roam Mode value %d is out of range" + " (Min: %d Max: %d)", roamMode, + CFG_LFR_FEATURE_ENABLED_MIN, + CFG_LFR_FEATURE_ENABLED_MAX); + ret = -EINVAL; + goto exit; + } - /* done with the parsed buffer */ - vos_mem_free(buf); + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s: Received Command to Set Roam Mode = %d", __func__, roamMode); + /* + * Note that + * SETROAMMODE 0 is to enable LFR while + * SETROAMMODE 1 is to disable LFR, but + * NotifyIsFastRoamIniFeatureEnabled 0/1 is to enable/disable. + * So, we have to invert the value to call sme_UpdateIsFastRoamIniFeatureEnabled. + */ + if (CFG_LFR_FEATURE_ENABLED_MIN == roamMode) + roamMode = CFG_LFR_FEATURE_ENABLED_MAX; /* Roam enable */ + else + roamMode = CFG_LFR_FEATURE_ENABLED_MIN; /* Roam disable */ - wlan_hdd_action( NULL, -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0)) - &(pAdapter->wdev), -#else - dev, -#endif - &chan, 0, -#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,8,0)) - NL80211_CHAN_HT20, 1, -#endif - dwellTime, finalBuf, finalLen, 1, - 1, &cookie ); - vos_mem_free(finalBuf); + pHddCtx->cfg_ini->isFastRoamIniFeatureEnabled = roamMode; + sme_UpdateIsFastRoamIniFeatureEnabled((tHalHandle)(pHddCtx->hHal), roamMode); } - else if (strncmp(command, "GETROAMSCANCHANNELMINTIME", 25) == 0) + /* GETROAMMODE */ + else if (strncmp(priv_data.buf, "GETROAMMODE", SIZE_OF_GETROAMMODE) == 0) { - tANI_U16 val = sme_getNeighborScanMinChanTime((tHalHandle)(pHddCtx->hHal)); - char extra[32]; - tANI_U8 len = 0; + tANI_BOOLEAN roamMode = sme_getIsLfrFeatureEnabled((tHalHandle)(pHddCtx->hHal)); + char extra[32]; + tANI_U8 len = 0; - /* value is interms of msec */ - len = scnprintf(extra, sizeof(extra), "%s %d", - "GETROAMSCANCHANNELMINTIME", val); - if (copy_to_user(priv_data.buf, &extra, len + 1)) - { + /* + * roamMode value shall be inverted because the sementics is different. + */ + if (CFG_LFR_FEATURE_ENABLED_MIN == roamMode) + roamMode = CFG_LFR_FEATURE_ENABLED_MAX; + else + roamMode = CFG_LFR_FEATURE_ENABLED_MIN; + + len = scnprintf(extra, sizeof(extra), "%s %d", command, roamMode); + if (copy_to_user(priv_data.buf, &extra, len + 1)) + { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, "%s: failed to copy data to user buffer", __func__); ret = -EFAULT; goto exit; - } + } } - else if (strncmp(command, "SETSCANCHANNELTIME", 18) == 0) +#endif +#endif +#if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR) + else if (strncmp(command, "SETROAMDELTA", 12) == 0) { tANI_U8 *value = command; - tANI_U16 maxTime = CFG_NEIGHBOR_SCAN_MAX_CHAN_TIME_DEFAULT; - tANI_U16 homeAwayTime = 0; + tANI_U8 roamRssiDiff = CFG_ROAM_RSSI_DIFF_DEFAULT; - /* Move pointer to ahead of SETSCANCHANNELTIME */ - value = value + 19; + /* Move pointer to ahead of SETROAMDELTA */ + value = value + 13; /* Convert the value from ascii to integer */ - ret = kstrtou16(value, 10, &maxTime); + ret = kstrtou8(value, 10, &roamRssiDiff); if (ret < 0) { /* If the input value is greater than max value of datatype, then also - kstrtou16 fails */ + kstrtou8 fails */ VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: kstrtou16 failed range [%d - %d]", __func__, - CFG_NEIGHBOR_SCAN_MAX_CHAN_TIME_MIN, - CFG_NEIGHBOR_SCAN_MAX_CHAN_TIME_MAX); + "%s: kstrtou8 failed range [%d - %d]", __func__, + CFG_ROAM_RSSI_DIFF_MIN, + CFG_ROAM_RSSI_DIFF_MAX); ret = -EINVAL; goto exit; } - if ((maxTime < CFG_NEIGHBOR_SCAN_MAX_CHAN_TIME_MIN) || - (maxTime > CFG_NEIGHBOR_SCAN_MAX_CHAN_TIME_MAX)) + if ((roamRssiDiff < CFG_ROAM_RSSI_DIFF_MIN) || + (roamRssiDiff > CFG_ROAM_RSSI_DIFF_MAX)) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "lfr mode value %d is out of range" - " (Min: %d Max: %d)", maxTime, - CFG_NEIGHBOR_SCAN_MAX_CHAN_TIME_MIN, - CFG_NEIGHBOR_SCAN_MAX_CHAN_TIME_MAX); + "Roam rssi diff value %d is out of range" + " (Min: %d Max: %d)", roamRssiDiff, + CFG_ROAM_RSSI_DIFF_MIN, + CFG_ROAM_RSSI_DIFF_MAX); ret = -EINVAL; goto exit; } VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: Received Command to change channel max time = %d", __func__, maxTime); + "%s: Received Command to Set roam rssi diff = %d", __func__, roamRssiDiff); - pHddCtx->cfg_ini->nNeighborScanMaxChanTime = maxTime; + pHddCtx->cfg_ini->RoamRssiDiff = roamRssiDiff; + sme_UpdateRoamRssiDiff((tHalHandle)(pHddCtx->hHal), roamRssiDiff); + } + else if (strncmp(priv_data.buf, "GETROAMDELTA", 12) == 0) + { + tANI_U8 roamRssiDiff = sme_getRoamRssiDiff((tHalHandle)(pHddCtx->hHal)); + char extra[32]; + tANI_U8 len = 0; - /* Home Away Time should be atleast equal to (MaxDwell time + (2*RFS)), - * where RFS is the RF Switching time. It is twice RFS to consider the - * time to go off channel and return to the home channel. */ - homeAwayTime = sme_getRoamScanHomeAwayTime((tHalHandle)(pHddCtx->hHal)); - if (homeAwayTime < (maxTime + (2 * HDD_ROAM_SCAN_CHANNEL_SWITCH_TIME))) + len = scnprintf(extra, sizeof(extra), "%s %d", + command, roamRssiDiff); + if (copy_to_user(priv_data.buf, &extra, len + 1)) { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, - "%s: Invalid config, Home away time(%d) is less than (twice RF switching time + channel max time)(%d)" - " Hence enforcing home away time to disable (0)", - __func__, homeAwayTime, (maxTime + (2 * HDD_ROAM_SCAN_CHANNEL_SWITCH_TIME))); - homeAwayTime = 0; - pHddCtx->cfg_ini->nRoamScanHomeAwayTime = homeAwayTime; - sme_UpdateRoamScanHomeAwayTime((tHalHandle)(pHddCtx->hHal), homeAwayTime, eANI_BOOLEAN_FALSE); + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: failed to copy data to user buffer", __func__); + ret = -EFAULT; + goto exit; } - sme_setNeighborScanMaxChanTime((tHalHandle)(pHddCtx->hHal), maxTime); } - else if (strncmp(command, "GETSCANCHANNELTIME", 18) == 0) +#endif +#if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR) + else if (strncmp(command, "GETBAND", 7) == 0) { - tANI_U16 val = sme_getNeighborScanMaxChanTime((tHalHandle)(pHddCtx->hHal)); + int band = -1; char extra[32]; tANI_U8 len = 0; + hdd_getBand_helper(pHddCtx, &band); - /* value is interms of msec */ - len = scnprintf(extra, sizeof(extra), "%s %d", - "GETSCANCHANNELTIME", val); + len = scnprintf(extra, sizeof(extra), "%s %d", command, band); if (copy_to_user(priv_data.buf, &extra, len + 1)) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, @@ -3240,54 +2226,69 @@ int hdd_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) goto exit; } } - else if (strncmp(command, "SETSCANHOMETIME", 15) == 0) + else if (strncmp(command, "SETROAMSCANCHANNELS", 19) == 0) { tANI_U8 *value = command; - tANI_U16 val = CFG_NEIGHBOR_SCAN_TIMER_PERIOD_DEFAULT; + tANI_U8 ChannelList[WNI_CFG_VALID_CHANNEL_LIST_LEN] = {0}; + tANI_U8 numChannels = 0; + eHalStatus status = eHAL_STATUS_SUCCESS; - /* Move pointer to ahead of SETSCANHOMETIME */ - value = value + 16; - /* Convert the value from ascii to integer */ - ret = kstrtou16(value, 10, &val); - if (ret < 0) + status = hdd_parse_channellist(value, ChannelList, &numChannels); + if (eHAL_STATUS_SUCCESS != status) { - /* If the input value is greater than max value of datatype, then also - kstrtou16 fails */ VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: kstrtou16 failed range [%d - %d]", __func__, - CFG_NEIGHBOR_SCAN_TIMER_PERIOD_MIN, - CFG_NEIGHBOR_SCAN_TIMER_PERIOD_MAX); + "%s: Failed to parse channel list information", __func__); ret = -EINVAL; goto exit; } - if ((val < CFG_NEIGHBOR_SCAN_TIMER_PERIOD_MIN) || - (val > CFG_NEIGHBOR_SCAN_TIMER_PERIOD_MAX)) + if (numChannels > WNI_CFG_VALID_CHANNEL_LIST_LEN) + { + VOS_TRACE( VOS_MODULE_ID_HDD, + VOS_TRACE_LEVEL_ERROR, + "%s: number of channels (%d) supported exceeded max (%d)", + __func__, + numChannels, + WNI_CFG_VALID_CHANNEL_LIST_LEN); + ret = -EINVAL; + goto exit; + } + status = sme_ChangeRoamScanChannelList((tHalHandle)(pHddCtx->hHal), ChannelList, + numChannels); + if (eHAL_STATUS_SUCCESS != status) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "scan home time value %d is out of range" - " (Min: %d Max: %d)", val, - CFG_NEIGHBOR_SCAN_TIMER_PERIOD_MIN, - CFG_NEIGHBOR_SCAN_TIMER_PERIOD_MAX); + "%s: Failed to update channel list information", __func__); ret = -EINVAL; goto exit; } - - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: Received Command to change scan home time = %d", __func__, val); - - pHddCtx->cfg_ini->nNeighborScanPeriod = val; - sme_setNeighborScanPeriod((tHalHandle)(pHddCtx->hHal), val); } - else if (strncmp(command, "GETSCANHOMETIME", 15) == 0) + else if (strncmp(command, "GETROAMSCANCHANNELS", 19) == 0) { - tANI_U16 val = sme_getNeighborScanPeriod((tHalHandle)(pHddCtx->hHal)); - char extra[32]; - tANI_U8 len = 0; + tANI_U8 ChannelList[WNI_CFG_VALID_CHANNEL_LIST_LEN] = {0}; + tANI_U8 numChannels = 0; + tANI_U8 j = 0; + char extra[128] = {0}; + int len; + + if (eHAL_STATUS_SUCCESS != sme_getRoamScanChannelList( (tHalHandle)(pHddCtx->hHal), + ChannelList, &numChannels )) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s: failed to get roam scan channel list", __func__); + ret = -EFAULT; + goto exit; + } + /* output channel list is of the format + [Number of roam scan channels][Channel1][Channel2]... */ + /* copy the number of channels in the 0th index */ + len = scnprintf(extra, sizeof(extra), "%s %d", command, numChannels); + for (j = 0; (j < numChannels); j++) + { + len += scnprintf(extra + len, sizeof(extra) - len, " %d", + ChannelList[j]); + } - /* value is interms of msec */ - len = scnprintf(extra, sizeof(extra), "%s %d", - "GETSCANHOMETIME", val); if (copy_to_user(priv_data.buf, &extra, len + 1)) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, @@ -3296,53 +2297,56 @@ int hdd_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) goto exit; } } - else if (strncmp(command, "SETROAMINTRABAND", 16) == 0) + else if (strncmp(command, "GETCCXMODE", 10) == 0) { - tANI_U8 *value = command; - tANI_U8 val = CFG_ROAM_INTRA_BAND_DEFAULT; + tANI_BOOLEAN ccxMode = sme_getIsCcxFeatureEnabled((tHalHandle)(pHddCtx->hHal)); + char extra[32]; + tANI_U8 len = 0; - /* Move pointer to ahead of SETROAMINTRABAND */ - value = value + 17; - /* Convert the value from ascii to integer */ - ret = kstrtou8(value, 10, &val); - if (ret < 0) + /* Check if the features OKC/CCX/11R are supported simultaneously, + then this operation is not permitted (return FAILURE) */ + if (ccxMode && + hdd_is_okc_mode_enabled(pHddCtx) && + sme_getIsFtFeatureEnabled((tHalHandle)(pHddCtx->hHal))) { - /* If the input value is greater than max value of datatype, then also - kstrtou8 fails */ - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: kstrtou8 failed range [%d - %d]", __func__, - CFG_ROAM_INTRA_BAND_MIN, - CFG_ROAM_INTRA_BAND_MAX); - ret = -EINVAL; + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, + "%s: OKC/CCX/11R are supported simultaneously" + " hence this operation is not permitted!", __func__); + ret = -EPERM; goto exit; } - if ((val < CFG_ROAM_INTRA_BAND_MIN) || - (val > CFG_ROAM_INTRA_BAND_MAX)) + len = scnprintf(extra, sizeof(extra), "%s %d", + "GETCCXMODE", ccxMode); + if (copy_to_user(priv_data.buf, &extra, len + 1)) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "intra band mode value %d is out of range" - " (Min: %d Max: %d)", val, - CFG_ROAM_INTRA_BAND_MIN, - CFG_ROAM_INTRA_BAND_MAX); - ret = -EINVAL; + "%s: failed to copy data to user buffer", __func__); + ret = -EFAULT; goto exit; } - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: Received Command to change intra band = %d", __func__, val); - - pHddCtx->cfg_ini->nRoamIntraBand = val; - sme_setRoamIntraBand((tHalHandle)(pHddCtx->hHal), val); } - else if (strncmp(command, "GETROAMINTRABAND", 16) == 0) + else if (strncmp(command, "GETOKCMODE", 10) == 0) { - tANI_U16 val = sme_getRoamIntraBand((tHalHandle)(pHddCtx->hHal)); + tANI_BOOLEAN okcMode = hdd_is_okc_mode_enabled(pHddCtx); char extra[32]; tANI_U8 len = 0; - /* value is interms of msec */ + /* Check if the features OKC/CCX/11R are supported simultaneously, + then this operation is not permitted (return FAILURE) */ + if (okcMode && + sme_getIsCcxFeatureEnabled((tHalHandle)(pHddCtx->hHal)) && + sme_getIsFtFeatureEnabled((tHalHandle)(pHddCtx->hHal))) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, + "%s: OKC/CCX/11R are supported simultaneously" + " hence this operation is not permitted!", __func__); + ret = -EPERM; + goto exit; + } + len = scnprintf(extra, sizeof(extra), "%s %d", - "GETROAMINTRABAND", val); + "GETOKCMODE", okcMode); if (copy_to_user(priv_data.buf, &extra, len + 1)) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, @@ -3351,52 +2355,30 @@ int hdd_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) goto exit; } } - else if (strncmp(command, "SETSCANNPROBES", 14) == 0) + else if (strncmp(command, "GETFASTROAM", 11) == 0) { - tANI_U8 *value = command; - tANI_U8 nProbes = CFG_ROAM_SCAN_N_PROBES_DEFAULT; - - /* Move pointer to ahead of SETSCANNPROBES */ - value = value + 15; - /* Convert the value from ascii to integer */ - ret = kstrtou8(value, 10, &nProbes); - if (ret < 0) - { - /* If the input value is greater than max value of datatype, then also - kstrtou8 fails */ - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: kstrtou8 failed range [%d - %d]", __func__, - CFG_ROAM_SCAN_N_PROBES_MIN, - CFG_ROAM_SCAN_N_PROBES_MAX); - ret = -EINVAL; - goto exit; - } + tANI_BOOLEAN lfrMode = sme_getIsLfrFeatureEnabled((tHalHandle)(pHddCtx->hHal)); + char extra[32]; + tANI_U8 len = 0; - if ((nProbes < CFG_ROAM_SCAN_N_PROBES_MIN) || - (nProbes > CFG_ROAM_SCAN_N_PROBES_MAX)) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "NProbes value %d is out of range" - " (Min: %d Max: %d)", nProbes, - CFG_ROAM_SCAN_N_PROBES_MIN, - CFG_ROAM_SCAN_N_PROBES_MAX); - ret = -EINVAL; + len = scnprintf(extra, sizeof(extra), "%s %d", + "GETFASTROAM", lfrMode); + if (copy_to_user(priv_data.buf, &extra, len + 1)) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: failed to copy data to user buffer", __func__); + ret = -EFAULT; goto exit; } - - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: Received Command to Set nProbes = %d", __func__, nProbes); - - pHddCtx->cfg_ini->nProbes = nProbes; - sme_UpdateRoamScanNProbes((tHalHandle)(pHddCtx->hHal), nProbes); } - else if (strncmp(priv_data.buf, "GETSCANNPROBES", 14) == 0) + else if (strncmp(command, "GETFASTTRANSITION", 17) == 0) { - tANI_U8 val = sme_getRoamScanNProbes((tHalHandle)(pHddCtx->hHal)); + tANI_BOOLEAN ft = sme_getIsFtFeatureEnabled((tHalHandle)(pHddCtx->hHal)); char extra[32]; tANI_U8 len = 0; - len = scnprintf(extra, sizeof(extra), "%s %d", command, val); + len = scnprintf(extra, sizeof(extra), "%s %d", + "GETFASTTRANSITION", ft); if (copy_to_user(priv_data.buf, &extra, len + 1)) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, @@ -3405,91 +2387,62 @@ int hdd_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) goto exit; } } - else if (strncmp(command, "SETSCANHOMEAWAYTIME", 19) == 0) + else if (strncmp(command, "SETROAMSCANCHANNELMINTIME", 25) == 0) { tANI_U8 *value = command; - tANI_U16 homeAwayTime = CFG_ROAM_SCAN_HOME_AWAY_TIME_DEFAULT; - tANI_U16 scanChannelMaxTime = 0; + tANI_U8 minTime = CFG_NEIGHBOR_SCAN_MIN_CHAN_TIME_DEFAULT; - /* Move pointer to ahead of SETSCANHOMEAWAYTIME */ - /* input value is in units of msec */ - value = value + 20; + /* Move pointer to ahead of SETROAMSCANCHANNELMINTIME */ + value = value + 26; /* Convert the value from ascii to integer */ - ret = kstrtou16(value, 10, &homeAwayTime); + ret = kstrtou8(value, 10, &minTime); if (ret < 0) { /* If the input value is greater than max value of datatype, then also kstrtou8 fails */ VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, "%s: kstrtou8 failed range [%d - %d]", __func__, - CFG_ROAM_SCAN_HOME_AWAY_TIME_MIN, - CFG_ROAM_SCAN_HOME_AWAY_TIME_MAX); + CFG_NEIGHBOR_SCAN_MIN_CHAN_TIME_MIN, + CFG_NEIGHBOR_SCAN_MIN_CHAN_TIME_MAX); ret = -EINVAL; goto exit; } - - if ((homeAwayTime < CFG_ROAM_SCAN_HOME_AWAY_TIME_MIN) || - (homeAwayTime > CFG_ROAM_SCAN_HOME_AWAY_TIME_MAX)) + if ((minTime < CFG_NEIGHBOR_SCAN_MIN_CHAN_TIME_MIN) || + (minTime > CFG_NEIGHBOR_SCAN_MIN_CHAN_TIME_MAX)) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "homeAwayTime value %d is out of range" - " (Min: %d Max: %d)", homeAwayTime, - CFG_ROAM_SCAN_HOME_AWAY_TIME_MIN, - CFG_ROAM_SCAN_HOME_AWAY_TIME_MAX); + "scan min channel time value %d is out of range" + " (Min: %d Max: %d)", minTime, + CFG_NEIGHBOR_SCAN_MIN_CHAN_TIME_MIN, + CFG_NEIGHBOR_SCAN_MIN_CHAN_TIME_MAX); ret = -EINVAL; goto exit; } VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: Received Command to Set scan away time = %d", __func__, homeAwayTime); - - /* Home Away Time should be atleast equal to (MaxDwell time + (2*RFS)), - * where RFS is the RF Switching time. It is twice RFS to consider the - * time to go off channel and return to the home channel. */ - scanChannelMaxTime = sme_getNeighborScanMaxChanTime((tHalHandle)(pHddCtx->hHal)); - if (homeAwayTime < (scanChannelMaxTime + (2 * HDD_ROAM_SCAN_CHANNEL_SWITCH_TIME))) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, - "%s: Invalid config, Home away time(%d) is less than (twice RF switching time + channel max time)(%d)" - " Hence enforcing home away time to disable (0)", - __func__, homeAwayTime, (scanChannelMaxTime + (2 * HDD_ROAM_SCAN_CHANNEL_SWITCH_TIME))); - homeAwayTime = 0; - } - - if (pHddCtx->cfg_ini->nRoamScanHomeAwayTime != homeAwayTime) - { - pHddCtx->cfg_ini->nRoamScanHomeAwayTime = homeAwayTime; - sme_UpdateRoamScanHomeAwayTime((tHalHandle)(pHddCtx->hHal), homeAwayTime, eANI_BOOLEAN_TRUE); - } - } - else if (strncmp(priv_data.buf, "GETSCANHOMEAWAYTIME", 19) == 0) - { - tANI_U16 val = sme_getRoamScanHomeAwayTime((tHalHandle)(pHddCtx->hHal)); - char extra[32]; - tANI_U8 len = 0; + "%s: Received Command to change channel min time = %d", __func__, minTime); - len = scnprintf(extra, sizeof(extra), "%s %d", command, val); - if (copy_to_user(priv_data.buf, &extra, len + 1)) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: failed to copy data to user buffer", __func__); - ret = -EFAULT; - goto exit; - } + pHddCtx->cfg_ini->nNeighborScanMinChanTime = minTime; + sme_setNeighborScanMinChanTime((tHalHandle)(pHddCtx->hHal), minTime); } - else if (strncmp(command, "REASSOC", 7) == 0) + else if (strncmp(command, "SENDACTIONFRAME", 15) == 0) { tANI_U8 *value = command; tANI_U8 channel = 0; + tANI_U8 dwellTime = 0; + tANI_U8 bufLen = 0; + tANI_U8 *buf = NULL; tSirMacAddr targetApBssid; eHalStatus status = eHAL_STATUS_SUCCESS; -#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD - tCsrHandoffRequest handoffInfo; -#endif + struct ieee80211_channel chan; + tANI_U8 finalLen = 0; + tANI_U8 *finalBuf = NULL; + tANI_U8 temp = 0; + u64 cookie; hdd_station_ctx_t *pHddStaCtx = NULL; pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); - /* if not associated, no need to proceed with reassoc */ + /* if not associated, no need to send action frame */ if (eConnectionState_Associated != pHddStaCtx->conn_info.connState) { VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "%s:Not associated!",__func__); @@ -3497,366 +2450,406 @@ int hdd_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) goto exit; } - status = hdd_parse_reassoc_command_data(value, targetApBssid, &channel); + status = hdd_parse_send_action_frame_data(value, targetApBssid, &channel, + &dwellTime, &buf, &bufLen); if (eHAL_STATUS_SUCCESS != status) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: Failed to parse reassoc command data", __func__); + "%s: Failed to parse send action frame data", __func__); ret = -EINVAL; goto exit; } - /* if the target bssid is same as currently associated AP, - then no need to proceed with reassoc */ - if (VOS_TRUE == vos_mem_compare(targetApBssid, + /* if the target bssid is different from currently associated AP, + then no need to send action frame */ + if (VOS_TRUE != vos_mem_compare(targetApBssid, pHddStaCtx->conn_info.bssId, sizeof(tSirMacAddr))) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "%s:Reassoc BSSID is same as currently associated AP bssid",__func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "%s:STA is not associated to this AP!",__func__); ret = -EINVAL; + vos_mem_free(buf); goto exit; } - /* Check channel number is a valid channel number */ - if(VOS_STATUS_SUCCESS != - wlan_hdd_validate_operation_channel(pAdapter, channel)) - { - hddLog(VOS_TRACE_LEVEL_ERROR, - "%s: Invalid Channel [%d] \n", __func__, channel); - return -EINVAL; - } - - /* Proceed with reassoc */ -#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD - handoffInfo.channel = channel; - vos_mem_copy(handoffInfo.bssid, targetApBssid, sizeof(tSirMacAddr)); - sme_HandoffRequest(pHddCtx->hHal, &handoffInfo); -#endif - } - else if (strncmp(command, "SETWESMODE", 10) == 0) - { - tANI_U8 *value = command; - tANI_BOOLEAN wesMode = CFG_ENABLE_WES_MODE_NAME_DEFAULT; - - /* Move pointer to ahead of SETWESMODE */ - value = value + 11; - /* Convert the value from ascii to integer */ - ret = kstrtou8(value, 10, &wesMode); - if (ret < 0) + /* if the channel number is different from operating channel then + no need to send action frame */ + if (channel != pHddStaCtx->conn_info.operationChannel) { - /* If the input value is greater than max value of datatype, then also - kstrtou8 fails */ - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: kstrtou8 failed range [%d - %d]", __func__, - CFG_ENABLE_WES_MODE_NAME_MIN, - CFG_ENABLE_WES_MODE_NAME_MAX); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s: channel(%d) is different from operating channel(%d)", + __func__, channel, pHddStaCtx->conn_info.operationChannel); ret = -EINVAL; + vos_mem_free(buf); goto exit; } + chan.center_freq = sme_ChnToFreq(channel); - if ((wesMode < CFG_ENABLE_WES_MODE_NAME_MIN) || - (wesMode > CFG_ENABLE_WES_MODE_NAME_MAX)) + finalLen = bufLen + 24; + finalBuf = vos_mem_malloc(finalLen); + if (NULL == finalBuf) { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "WES Mode value %d is out of range" - " (Min: %d Max: %d)", wesMode, - CFG_ENABLE_WES_MODE_NAME_MIN, - CFG_ENABLE_WES_MODE_NAME_MAX); - ret = -EINVAL; + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, "%s:memory allocation failed",__func__); + ret = -ENOMEM; + vos_mem_free(buf); goto exit; } - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: Received Command to Set WES Mode rssi diff = %d", __func__, wesMode); + vos_mem_zero(finalBuf, finalLen); - pHddCtx->cfg_ini->isWESModeEnabled = wesMode; - sme_UpdateWESMode((tHalHandle)(pHddCtx->hHal), wesMode); + /* Fill subtype */ + temp = SIR_MAC_MGMT_ACTION << 4; + vos_mem_copy(finalBuf + 0, &temp, sizeof(temp)); + + /* Fill type */ + temp = SIR_MAC_MGMT_FRAME; + vos_mem_copy(finalBuf + 2, &temp, sizeof(temp)); + + /* Fill destination address (bssid of the AP) */ + vos_mem_copy(finalBuf + 4, targetApBssid, sizeof(targetApBssid)); + + /* Fill source address (STA mac address) */ + vos_mem_copy(finalBuf + 10, pAdapter->macAddressCurrent.bytes, sizeof(pAdapter->macAddressCurrent.bytes)); + + /* Fill BSSID (AP mac address) */ + vos_mem_copy(finalBuf + 16, targetApBssid, sizeof(targetApBssid)); + + /* Fill received buffer from 24th address */ + vos_mem_copy(finalBuf + 24, buf, bufLen); + + /* done with the parsed buffer */ + vos_mem_free(buf); + + wlan_hdd_action( NULL, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0)) + &(pAdapter->wdev), +#else + dev, +#endif + &chan, 0, +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,8,0)) + NL80211_CHAN_HT20, 1, +#endif + dwellTime, finalBuf, finalLen, 1, + 1, &cookie ); + vos_mem_free(finalBuf); } - else if (strncmp(priv_data.buf, "GETWESMODE", 10) == 0) + else if (strncmp(command, "GETROAMSCANCHANNELMINTIME", 25) == 0) { - tANI_BOOLEAN wesMode = sme_GetWESMode((tHalHandle)(pHddCtx->hHal)); + tANI_U16 val = sme_getNeighborScanMinChanTime((tHalHandle)(pHddCtx->hHal)); char extra[32]; tANI_U8 len = 0; - len = scnprintf(extra, sizeof(extra), "%s %d", command, wesMode); - if (copy_to_user(priv_data.buf, &extra, len + 1)) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: failed to copy data to user buffer", __func__); - ret = -EFAULT; - goto exit; - } - } -#endif /* WLAN_FEATURE_VOWIFI_11R || FEATURE_WLAN_CCX || FEATURE_WLAN_LFR */ -#ifdef FEATURE_WLAN_LFR - else if (strncmp(command, "SETFASTROAM", 11) == 0) - { - tANI_U8 *value = command; - tANI_U8 lfrMode = CFG_LFR_FEATURE_ENABLED_DEFAULT; - - /* Move pointer to ahead of SETFASTROAM */ - value = value + 12; - /* Convert the value from ascii to integer */ - ret = kstrtou8(value, 10, &lfrMode); - if (ret < 0) - { - /* If the input value is greater than max value of datatype, then also - kstrtou8 fails */ - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: kstrtou8 failed range [%d - %d]", __func__, - CFG_LFR_FEATURE_ENABLED_MIN, - CFG_LFR_FEATURE_ENABLED_MAX); - ret = -EINVAL; - goto exit; - } - - if ((lfrMode < CFG_LFR_FEATURE_ENABLED_MIN) || - (lfrMode > CFG_LFR_FEATURE_ENABLED_MAX)) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "lfr mode value %d is out of range" - " (Min: %d Max: %d)", lfrMode, - CFG_LFR_FEATURE_ENABLED_MIN, - CFG_LFR_FEATURE_ENABLED_MAX); - ret = -EINVAL; + /* value is interms of msec */ + len = scnprintf(extra, sizeof(extra), "%s %d", + "GETROAMSCANCHANNELMINTIME", val); + if (copy_to_user(priv_data.buf, &extra, len + 1)) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: failed to copy data to user buffer", __func__); + ret = -EFAULT; goto exit; } - - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: Received Command to change lfr mode = %d", __func__, lfrMode); - - pHddCtx->cfg_ini->isFastRoamIniFeatureEnabled = lfrMode; - sme_UpdateIsFastRoamIniFeatureEnabled((tHalHandle)(pHddCtx->hHal), lfrMode); } -#endif -#ifdef WLAN_FEATURE_VOWIFI_11R - else if (strncmp(command, "SETFASTTRANSITION", 17) == 0) + else if (strncmp(command, "SETSCANCHANNELTIME", 18) == 0) { tANI_U8 *value = command; - tANI_U8 ft = CFG_FAST_TRANSITION_ENABLED_NAME_DEFAULT; + tANI_U16 maxTime = CFG_NEIGHBOR_SCAN_MAX_CHAN_TIME_DEFAULT; + tANI_U16 homeAwayTime = 0; - /* Move pointer to ahead of SETFASTROAM */ - value = value + 18; + /* Move pointer to ahead of SETSCANCHANNELTIME */ + value = value + 19; /* Convert the value from ascii to integer */ - ret = kstrtou8(value, 10, &ft); + ret = kstrtou16(value, 10, &maxTime); if (ret < 0) { /* If the input value is greater than max value of datatype, then also - kstrtou8 fails */ + kstrtou16 fails */ VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: kstrtou8 failed range [%d - %d]", __func__, - CFG_FAST_TRANSITION_ENABLED_NAME_MIN, - CFG_FAST_TRANSITION_ENABLED_NAME_MAX); + "%s: kstrtou16 failed range [%d - %d]", __func__, + CFG_NEIGHBOR_SCAN_MAX_CHAN_TIME_MIN, + CFG_NEIGHBOR_SCAN_MAX_CHAN_TIME_MAX); ret = -EINVAL; goto exit; } - if ((ft < CFG_FAST_TRANSITION_ENABLED_NAME_MIN) || - (ft > CFG_FAST_TRANSITION_ENABLED_NAME_MAX)) + if ((maxTime < CFG_NEIGHBOR_SCAN_MAX_CHAN_TIME_MIN) || + (maxTime > CFG_NEIGHBOR_SCAN_MAX_CHAN_TIME_MAX)) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "ft mode value %d is out of range" - " (Min: %d Max: %d)", ft, - CFG_FAST_TRANSITION_ENABLED_NAME_MIN, - CFG_FAST_TRANSITION_ENABLED_NAME_MAX); + "lfr mode value %d is out of range" + " (Min: %d Max: %d)", maxTime, + CFG_NEIGHBOR_SCAN_MAX_CHAN_TIME_MIN, + CFG_NEIGHBOR_SCAN_MAX_CHAN_TIME_MAX); ret = -EINVAL; goto exit; } VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: Received Command to change ft mode = %d", __func__, ft); + "%s: Received Command to change channel max time = %d", __func__, maxTime); - pHddCtx->cfg_ini->isFastTransitionEnabled = ft; - sme_UpdateFastTransitionEnabled((tHalHandle)(pHddCtx->hHal), ft); - } + pHddCtx->cfg_ini->nNeighborScanMaxChanTime = maxTime; - else if (strncmp(command, "FASTREASSOC", 11) == 0) + /* Home Away Time should be atleast equal to (MaxDwell time + (2*RFS)), + * where RFS is the RF Switching time. It is twice RFS to consider the + * time to go off channel and return to the home channel. */ + homeAwayTime = sme_getRoamScanHomeAwayTime((tHalHandle)(pHddCtx->hHal)); + if (homeAwayTime < (maxTime + (2 * HDD_ROAM_SCAN_CHANNEL_SWITCH_TIME))) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, + "%s: Invalid config, Home away time(%d) is less than (twice RF switching time + channel max time)(%d)" + " Hence enforcing home away time to disable (0)", + __func__, homeAwayTime, (maxTime + (2 * HDD_ROAM_SCAN_CHANNEL_SWITCH_TIME))); + homeAwayTime = 0; + pHddCtx->cfg_ini->nRoamScanHomeAwayTime = homeAwayTime; + sme_UpdateRoamScanHomeAwayTime((tHalHandle)(pHddCtx->hHal), homeAwayTime, eANI_BOOLEAN_FALSE); + } + sme_setNeighborScanMaxChanTime((tHalHandle)(pHddCtx->hHal), maxTime); + } + else if (strncmp(command, "GETSCANCHANNELTIME", 18) == 0) { - tANI_U8 *value = command; - tSirMacAddr targetApBssid; - tANI_U8 trigger = 0; - eHalStatus status = eHAL_STATUS_SUCCESS; - hdd_station_ctx_t *pHddStaCtx = NULL; - pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); + tANI_U16 val = sme_getNeighborScanMaxChanTime((tHalHandle)(pHddCtx->hHal)); + char extra[32]; + tANI_U8 len = 0; - /* if not associated, no need to proceed with reassoc */ - if (eConnectionState_Associated != pHddStaCtx->conn_info.connState) + /* value is interms of msec */ + len = scnprintf(extra, sizeof(extra), "%s %d", + "GETSCANCHANNELTIME", val); + if (copy_to_user(priv_data.buf, &extra, len + 1)) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "%s:Not associated!",__func__); - ret = -EINVAL; + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: failed to copy data to user buffer", __func__); + ret = -EFAULT; goto exit; } + } + else if (strncmp(command, "SETSCANHOMETIME", 15) == 0) + { + tANI_U8 *value = command; + tANI_U16 val = CFG_NEIGHBOR_SCAN_TIMER_PERIOD_DEFAULT; - status = hdd_parse_reassoc_command_data(value, targetApBssid, &trigger); - if (eHAL_STATUS_SUCCESS != status) + /* Move pointer to ahead of SETSCANHOMETIME */ + value = value + 16; + /* Convert the value from ascii to integer */ + ret = kstrtou16(value, 10, &val); + if (ret < 0) { + /* If the input value is greater than max value of datatype, then also + kstrtou16 fails */ VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: Failed to parse reassoc command data", __func__); + "%s: kstrtou16 failed range [%d - %d]", __func__, + CFG_NEIGHBOR_SCAN_TIMER_PERIOD_MIN, + CFG_NEIGHBOR_SCAN_TIMER_PERIOD_MAX); ret = -EINVAL; goto exit; } - /* if the target bssid is same as currently associated AP, - then no need to proceed with reassoc */ - if (VOS_TRUE == vos_mem_compare(targetApBssid, - pHddStaCtx->conn_info.bssId, sizeof(tSirMacAddr))) + if ((val < CFG_NEIGHBOR_SCAN_TIMER_PERIOD_MIN) || + (val > CFG_NEIGHBOR_SCAN_TIMER_PERIOD_MAX)) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s:11r Reassoc BSSID is same as currently associated AP bssid", - __func__); + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "scan home time value %d is out of range" + " (Min: %d Max: %d)", val, + CFG_NEIGHBOR_SCAN_TIMER_PERIOD_MIN, + CFG_NEIGHBOR_SCAN_TIMER_PERIOD_MAX); ret = -EINVAL; goto exit; } - /* Proceed with scan/roam */ - smeIssueFastRoamNeighborAPEvent(WLAN_HDD_GET_HAL_CTX(pAdapter), - &targetApBssid[0], - (tSmeFastRoamTrigger)(trigger)); + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s: Received Command to change scan home time = %d", __func__, val); + + pHddCtx->cfg_ini->nNeighborScanPeriod = val; + sme_setNeighborScanPeriod((tHalHandle)(pHddCtx->hHal), val); } -#endif -#ifdef FEATURE_WLAN_CCX - else if (strncmp(command, "SETCCXMODE", 10) == 0) + else if (strncmp(command, "GETSCANHOMETIME", 15) == 0) { - tANI_U8 *value = command; - tANI_U8 ccxMode = CFG_CCX_FEATURE_ENABLED_DEFAULT; + tANI_U16 val = sme_getNeighborScanPeriod((tHalHandle)(pHddCtx->hHal)); + char extra[32]; + tANI_U8 len = 0; - /* Check if the features OKC/CCX/11R are supported simultaneously, - then this operation is not permitted (return FAILURE) */ - if (sme_getIsCcxFeatureEnabled((tHalHandle)(pHddCtx->hHal)) && - hdd_is_okc_mode_enabled(pHddCtx) && - sme_getIsFtFeatureEnabled((tHalHandle)(pHddCtx->hHal))) + /* value is interms of msec */ + len = scnprintf(extra, sizeof(extra), "%s %d", + "GETSCANHOMETIME", val); + if (copy_to_user(priv_data.buf, &extra, len + 1)) { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, - "%s: OKC/CCX/11R are supported simultaneously" - " hence this operation is not permitted!", __func__); - ret = -EPERM; + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: failed to copy data to user buffer", __func__); + ret = -EFAULT; goto exit; } + } + else if (strncmp(command, "SETROAMINTRABAND", 16) == 0) + { + tANI_U8 *value = command; + tANI_U8 val = CFG_ROAM_INTRA_BAND_DEFAULT; - /* Move pointer to ahead of SETCCXMODE */ - value = value + 11; + /* Move pointer to ahead of SETROAMINTRABAND */ + value = value + 17; /* Convert the value from ascii to integer */ - ret = kstrtou8(value, 10, &ccxMode); + ret = kstrtou8(value, 10, &val); if (ret < 0) { /* If the input value is greater than max value of datatype, then also kstrtou8 fails */ VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, "%s: kstrtou8 failed range [%d - %d]", __func__, - CFG_CCX_FEATURE_ENABLED_MIN, - CFG_CCX_FEATURE_ENABLED_MAX); + CFG_ROAM_INTRA_BAND_MIN, + CFG_ROAM_INTRA_BAND_MAX); ret = -EINVAL; goto exit; } - if ((ccxMode < CFG_CCX_FEATURE_ENABLED_MIN) || - (ccxMode > CFG_CCX_FEATURE_ENABLED_MAX)) + + if ((val < CFG_ROAM_INTRA_BAND_MIN) || + (val > CFG_ROAM_INTRA_BAND_MAX)) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "Ccx mode value %d is out of range" - " (Min: %d Max: %d)", ccxMode, - CFG_CCX_FEATURE_ENABLED_MIN, - CFG_CCX_FEATURE_ENABLED_MAX); + "intra band mode value %d is out of range" + " (Min: %d Max: %d)", val, + CFG_ROAM_INTRA_BAND_MIN, + CFG_ROAM_INTRA_BAND_MAX); ret = -EINVAL; goto exit; } VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: Received Command to change ccx mode = %d", __func__, ccxMode); + "%s: Received Command to change intra band = %d", __func__, val); - pHddCtx->cfg_ini->isCcxIniFeatureEnabled = ccxMode; - sme_UpdateIsCcxFeatureEnabled((tHalHandle)(pHddCtx->hHal), ccxMode); + pHddCtx->cfg_ini->nRoamIntraBand = val; + sme_setRoamIntraBand((tHalHandle)(pHddCtx->hHal), val); } -#endif - else if (strncmp(command, "SETROAMSCANCONTROL", 18) == 0) + else if (strncmp(command, "GETROAMINTRABAND", 16) == 0) + { + tANI_U16 val = sme_getRoamIntraBand((tHalHandle)(pHddCtx->hHal)); + char extra[32]; + tANI_U8 len = 0; + + /* value is interms of msec */ + len = scnprintf(extra, sizeof(extra), "%s %d", + "GETROAMINTRABAND", val); + if (copy_to_user(priv_data.buf, &extra, len + 1)) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: failed to copy data to user buffer", __func__); + ret = -EFAULT; + goto exit; + } + } + else if (strncmp(command, "SETSCANNPROBES", 14) == 0) { tANI_U8 *value = command; - tANI_BOOLEAN roamScanControl = 0; + tANI_U8 nProbes = CFG_ROAM_SCAN_N_PROBES_DEFAULT; - /* Move pointer to ahead of SETROAMSCANCONTROL */ - value = value + 19; + /* Move pointer to ahead of SETSCANNPROBES */ + value = value + 15; /* Convert the value from ascii to integer */ - ret = kstrtou8(value, 10, &roamScanControl); + ret = kstrtou8(value, 10, &nProbes); if (ret < 0) { /* If the input value is greater than max value of datatype, then also kstrtou8 fails */ VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: kstrtou8 failed ", __func__); + "%s: kstrtou8 failed range [%d - %d]", __func__, + CFG_ROAM_SCAN_N_PROBES_MIN, + CFG_ROAM_SCAN_N_PROBES_MAX); ret = -EINVAL; goto exit; } - if (0 != roamScanControl) + if ((nProbes < CFG_ROAM_SCAN_N_PROBES_MIN) || + (nProbes > CFG_ROAM_SCAN_N_PROBES_MAX)) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "roam scan control invalid value = %d", - roamScanControl); + "NProbes value %d is out of range" + " (Min: %d Max: %d)", nProbes, + CFG_ROAM_SCAN_N_PROBES_MIN, + CFG_ROAM_SCAN_N_PROBES_MAX); ret = -EINVAL; goto exit; } + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: Received Command to Set roam scan control = %d", __func__, roamScanControl); + "%s: Received Command to Set nProbes = %d", __func__, nProbes); - sme_SetRoamScanControl((tHalHandle)(pHddCtx->hHal), roamScanControl); + pHddCtx->cfg_ini->nProbes = nProbes; + sme_UpdateRoamScanNProbes((tHalHandle)(pHddCtx->hHal), nProbes); } -#ifdef FEATURE_WLAN_OKC - else if (strncmp(command, "SETOKCMODE", 10) == 0) + else if (strncmp(priv_data.buf, "GETSCANNPROBES", 14) == 0) { - tANI_U8 *value = command; - tANI_U8 okcMode = CFG_OKC_FEATURE_ENABLED_DEFAULT; + tANI_U8 val = sme_getRoamScanNProbes((tHalHandle)(pHddCtx->hHal)); + char extra[32]; + tANI_U8 len = 0; - /* Check if the features OKC/CCX/11R are supported simultaneously, - then this operation is not permitted (return FAILURE) */ - if (sme_getIsCcxFeatureEnabled((tHalHandle)(pHddCtx->hHal)) && - hdd_is_okc_mode_enabled(pHddCtx) && - sme_getIsFtFeatureEnabled((tHalHandle)(pHddCtx->hHal))) + len = scnprintf(extra, sizeof(extra), "%s %d", command, val); + if (copy_to_user(priv_data.buf, &extra, len + 1)) { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, - "%s: OKC/CCX/11R are supported simultaneously" - " hence this operation is not permitted!", __func__); - ret = -EPERM; + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: failed to copy data to user buffer", __func__); + ret = -EFAULT; goto exit; } + } + else if (strncmp(command, "SETSCANHOMEAWAYTIME", 19) == 0) + { + tANI_U8 *value = command; + tANI_U16 homeAwayTime = CFG_ROAM_SCAN_HOME_AWAY_TIME_DEFAULT; + tANI_U16 scanChannelMaxTime = 0; - /* Move pointer to ahead of SETOKCMODE */ - value = value + 11; + /* Move pointer to ahead of SETSCANHOMEAWAYTIME */ + /* input value is in units of msec */ + value = value + 20; /* Convert the value from ascii to integer */ - ret = kstrtou8(value, 10, &okcMode); + ret = kstrtou16(value, 10, &homeAwayTime); if (ret < 0) { /* If the input value is greater than max value of datatype, then also kstrtou8 fails */ VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, "%s: kstrtou8 failed range [%d - %d]", __func__, - CFG_OKC_FEATURE_ENABLED_MIN, - CFG_OKC_FEATURE_ENABLED_MAX); + CFG_ROAM_SCAN_HOME_AWAY_TIME_MIN, + CFG_ROAM_SCAN_HOME_AWAY_TIME_MAX); ret = -EINVAL; goto exit; } - if ((okcMode < CFG_OKC_FEATURE_ENABLED_MIN) || - (okcMode > CFG_OKC_FEATURE_ENABLED_MAX)) + if ((homeAwayTime < CFG_ROAM_SCAN_HOME_AWAY_TIME_MIN) || + (homeAwayTime > CFG_ROAM_SCAN_HOME_AWAY_TIME_MAX)) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "Okc mode value %d is out of range" - " (Min: %d Max: %d)", okcMode, - CFG_OKC_FEATURE_ENABLED_MIN, - CFG_OKC_FEATURE_ENABLED_MAX); + "homeAwayTime value %d is out of range" + " (Min: %d Max: %d)", homeAwayTime, + CFG_ROAM_SCAN_HOME_AWAY_TIME_MIN, + CFG_ROAM_SCAN_HOME_AWAY_TIME_MAX); ret = -EINVAL; goto exit; } VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: Received Command to change okc mode = %d", __func__, okcMode); + "%s: Received Command to Set scan away time = %d", __func__, homeAwayTime); - pHddCtx->cfg_ini->isOkcIniFeatureEnabled = okcMode; + /* Home Away Time should be atleast equal to (MaxDwell time + (2*RFS)), + * where RFS is the RF Switching time. It is twice RFS to consider the + * time to go off channel and return to the home channel. */ + scanChannelMaxTime = sme_getNeighborScanMaxChanTime((tHalHandle)(pHddCtx->hHal)); + if (homeAwayTime < (scanChannelMaxTime + (2 * HDD_ROAM_SCAN_CHANNEL_SWITCH_TIME))) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, + "%s: Invalid config, Home away time(%d) is less than (twice RF switching time + channel max time)(%d)" + " Hence enforcing home away time to disable (0)", + __func__, homeAwayTime, (scanChannelMaxTime + (2 * HDD_ROAM_SCAN_CHANNEL_SWITCH_TIME))); + homeAwayTime = 0; + } + + if (pHddCtx->cfg_ini->nRoamScanHomeAwayTime != homeAwayTime) + { + pHddCtx->cfg_ini->nRoamScanHomeAwayTime = homeAwayTime; + sme_UpdateRoamScanHomeAwayTime((tHalHandle)(pHddCtx->hHal), homeAwayTime, eANI_BOOLEAN_TRUE); + } } -#endif /* FEATURE_WLAN_OKC */ - else if (strncmp(priv_data.buf, "GETROAMSCANCONTROL", 18) == 0) + else if (strncmp(priv_data.buf, "GETSCANHOMEAWAYTIME", 19) == 0) { - tANI_BOOLEAN roamScanControl = sme_GetRoamScanControl((tHalHandle)(pHddCtx->hHal)); + tANI_U16 val = sme_getRoamScanHomeAwayTime((tHalHandle)(pHddCtx->hHal)); char extra[32]; tANI_U8 len = 0; - len = scnprintf(extra, sizeof(extra), "%s %d", - command, roamScanControl); + len = scnprintf(extra, sizeof(extra), "%s %d", command, val); if (copy_to_user(priv_data.buf, &extra, len + 1)) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, @@ -3865,70 +2858,106 @@ int hdd_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) goto exit; } } -#ifdef WLAN_FEATURE_PACKET_FILTERING - else if (strncmp(command, "ENABLE_PKTFILTER_IPV6", 21) == 0) + else if (strncmp(command, "REASSOC", 7) == 0) { - tANI_U8 filterType = 0; tANI_U8 *value = command; + tANI_U8 channel = 0; + tSirMacAddr targetApBssid; + eHalStatus status = eHAL_STATUS_SUCCESS; +#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD + tCsrHandoffRequest handoffInfo; +#endif + hdd_station_ctx_t *pHddStaCtx = NULL; + pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); - /* Move pointer to ahead of ENABLE_PKTFILTER_IPV6 */ - value = value + 22; + /* if not associated, no need to proceed with reassoc */ + if (eConnectionState_Associated != pHddStaCtx->conn_info.connState) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "%s:Not associated!",__func__); + ret = -EINVAL; + goto exit; + } - /* Convert the value from ascii to integer */ - ret = kstrtou8(value, 10, &filterType); - if (ret < 0) + status = hdd_parse_reassoc_command_data(value, targetApBssid, &channel); + if (eHAL_STATUS_SUCCESS != status) { - /* If the input value is greater than max value of datatype, - * then also kstrtou8 fails - */ VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: kstrtou8 failed range ", __func__); + "%s: Failed to parse reassoc command data", __func__); ret = -EINVAL; goto exit; } - if (filterType != 0 && filterType != 1) + /* if the target bssid is same as currently associated AP, + then no need to proceed with reassoc */ + if (VOS_TRUE == vos_mem_compare(targetApBssid, + pHddStaCtx->conn_info.bssId, sizeof(tSirMacAddr))) { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: Accepted Values are 0 and 1 ", __func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "%s:Reassoc BSSID is same as currently associated AP bssid",__func__); ret = -EINVAL; goto exit; } - wlan_hdd_setIPv6Filter(WLAN_HDD_GET_CTX(pAdapter), filterType, - pAdapter->sessionId); - } + + /* Check channel number is a valid channel number */ + if(VOS_STATUS_SUCCESS != + wlan_hdd_validate_operation_channel(pAdapter, channel)) + { + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s: Invalid Channel [%d] \n", __func__, channel); + return -EINVAL; + } + + /* Proceed with reassoc */ +#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD + handoffInfo.channel = channel; + vos_mem_copy(handoffInfo.bssid, targetApBssid, sizeof(tSirMacAddr)); + sme_HandoffRequest(pHddCtx->hHal, &handoffInfo); #endif - else if (strncmp(command, "BTCOEXMODE", 10) == 0 ) + } + else if (strncmp(command, "SETWESMODE", 10) == 0) { - char *dhcpPhase; - dhcpPhase = command + 12; - if ('1' == *dhcpPhase) + tANI_U8 *value = command; + tANI_BOOLEAN wesMode = CFG_ENABLE_WES_MODE_NAME_DEFAULT; + + /* Move pointer to ahead of SETWESMODE */ + value = value + 11; + /* Convert the value from ascii to integer */ + ret = kstrtou8(value, 10, &wesMode); + if (ret < 0) { - sme_DHCPStartInd(pHddCtx->hHal, pAdapter->device_mode, - pAdapter->macAddressCurrent.bytes); + /* If the input value is greater than max value of datatype, then also + kstrtou8 fails */ + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: kstrtou8 failed range [%d - %d]", __func__, + CFG_ENABLE_WES_MODE_NAME_MIN, + CFG_ENABLE_WES_MODE_NAME_MAX); + ret = -EINVAL; + goto exit; } - else if ('2' == *dhcpPhase) + + if ((wesMode < CFG_ENABLE_WES_MODE_NAME_MIN) || + (wesMode > CFG_ENABLE_WES_MODE_NAME_MAX)) { - sme_DHCPStopInd(pHddCtx->hHal, pAdapter->device_mode, - pAdapter->macAddressCurrent.bytes); + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "WES Mode value %d is out of range" + " (Min: %d Max: %d)", wesMode, + CFG_ENABLE_WES_MODE_NAME_MIN, + CFG_ENABLE_WES_MODE_NAME_MAX); + ret = -EINVAL; + goto exit; } + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s: Received Command to Set WES Mode rssi diff = %d", __func__, wesMode); + + pHddCtx->cfg_ini->isWESModeEnabled = wesMode; + sme_UpdateWESMode((tHalHandle)(pHddCtx->hHal), wesMode); } - else if (strncmp(command, "SCAN-ACTIVE", 11) == 0) - { - pAdapter->scan_info.scan_mode = eSIR_ACTIVE_SCAN; - } - else if (strncmp(command, "SCAN-PASSIVE", 12) == 0) - { - pAdapter->scan_info.scan_mode = eSIR_PASSIVE_SCAN; - } - else if (strncmp(command, "GETDWELLTIME", 12) == 0) + else if (strncmp(priv_data.buf, "GETWESMODE", 10) == 0) { - hdd_config_t *pCfg = (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini; + tANI_BOOLEAN wesMode = sme_GetWESMode((tHalHandle)(pHddCtx->hHal)); char extra[32]; tANI_U8 len = 0; - len = scnprintf(extra, sizeof(extra), "GETDWELLTIME %u\n", - (int)pCfg->nActiveMaxChnTime); + len = scnprintf(extra, sizeof(extra), "%s %d", command, wesMode); if (copy_to_user(priv_data.buf, &extra, len + 1)) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, @@ -3936,659 +2965,409 @@ int hdd_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) ret = -EFAULT; goto exit; } - ret = len; } - else if (strncmp(command, "SETDWELLTIME", 12) == 0) +#endif /* WLAN_FEATURE_VOWIFI_11R || FEATURE_WLAN_CCX || FEATURE_WLAN_LFR */ +#ifdef FEATURE_WLAN_LFR + else if (strncmp(command, "SETFASTROAM", 11) == 0) { tANI_U8 *value = command; - hdd_config_t *pCfg = (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini; - int val = 0, temp; + tANI_U8 lfrMode = CFG_LFR_FEATURE_ENABLED_DEFAULT; - value = value + 13; - temp = kstrtou32(value, 10, &val); - if ( temp != 0 || val < CFG_ACTIVE_MAX_CHANNEL_TIME_MIN || - val > CFG_ACTIVE_MAX_CHANNEL_TIME_MAX ) + /* Move pointer to ahead of SETFASTROAM */ + value = value + 12; + /* Convert the value from ascii to integer */ + ret = kstrtou8(value, 10, &lfrMode); + if (ret < 0) + { + /* If the input value is greater than max value of datatype, then also + kstrtou8 fails */ + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: kstrtou8 failed range [%d - %d]", __func__, + CFG_LFR_FEATURE_ENABLED_MIN, + CFG_LFR_FEATURE_ENABLED_MAX); + ret = -EINVAL; + goto exit; + } + + if ((lfrMode < CFG_LFR_FEATURE_ENABLED_MIN) || + (lfrMode > CFG_LFR_FEATURE_ENABLED_MAX)) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: argument passed for SETDWELLTIME is incorrect", __func__); - ret = -EFAULT; + "lfr mode value %d is out of range" + " (Min: %d Max: %d)", lfrMode, + CFG_LFR_FEATURE_ENABLED_MIN, + CFG_LFR_FEATURE_ENABLED_MAX); + ret = -EINVAL; goto exit; } - pCfg->nActiveMaxChnTime = val; + + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s: Received Command to change lfr mode = %d", __func__, lfrMode); + + pHddCtx->cfg_ini->isFastRoamIniFeatureEnabled = lfrMode; + sme_UpdateIsFastRoamIniFeatureEnabled((tHalHandle)(pHddCtx->hHal), lfrMode); } - else if ( strncasecmp(command, "MIRACAST", 8) == 0 ) +#endif +#ifdef WLAN_FEATURE_VOWIFI_11R + else if (strncmp(command, "SETFASTTRANSITION", 17) == 0) { - tANI_U8 filterType = 0; - tANI_U8 *value; - value = command + 9; + tANI_U8 *value = command; + tANI_U8 ft = CFG_FAST_TRANSITION_ENABLED_NAME_DEFAULT; + /* Move pointer to ahead of SETFASTROAM */ + value = value + 18; /* Convert the value from ascii to integer */ - ret = kstrtou8(value, 10, &filterType); + ret = kstrtou8(value, 10, &ft); if (ret < 0) { - /* If the input value is greater than max value of datatype, - * then also kstrtou8 fails - */ - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: kstrtou8 failed range ", __func__); - ret = -EINVAL; - goto exit; + /* If the input value is greater than max value of datatype, then also + kstrtou8 fails */ + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: kstrtou8 failed range [%d - %d]", __func__, + CFG_FAST_TRANSITION_ENABLED_NAME_MIN, + CFG_FAST_TRANSITION_ENABLED_NAME_MAX); + ret = -EINVAL; + goto exit; } - if ((filterType < WLAN_HDD_DRIVER_MIRACAST_CFG_MIN_VAL ) || - (filterType > WLAN_HDD_DRIVER_MIRACAST_CFG_MAX_VAL)) + + if ((ft < CFG_FAST_TRANSITION_ENABLED_NAME_MIN) || + (ft > CFG_FAST_TRANSITION_ENABLED_NAME_MAX)) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: Accepted Values are 0 to 2. 0-Disabled, 1-Source," - " 2-Sink ", __func__); + "ft mode value %d is out of range" + " (Min: %d Max: %d)", ft, + CFG_FAST_TRANSITION_ENABLED_NAME_MIN, + CFG_FAST_TRANSITION_ENABLED_NAME_MAX); ret = -EINVAL; goto exit; } - //Filtertype value should be either 0-Disabled, 1-Source, 2-sink - pHddCtx->drvr_miracast = filterType; - hdd_tx_rx_pkt_cnt_stat_timer_handler(pHddCtx); - } -#ifdef FEATURE_CESIUM_PROPRIETARY - else if ((strncmp(command, "SETIBSSBEACONOUIDATA", 20) == 0) && - (WLAN_HDD_IBSS == pAdapter->device_mode)) - { - tANI_U8 *value = command; - unsigned int oui_data; - unsigned int data; - tANI_BOOLEAN found; - tHalHandle hHal = WLAN_HDD_GET_CTX(pAdapter)->hHal; - tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - tANI_U32 present, len, len1, len2, len3; - tANI_U32 cfgId; - tANI_U8 addIE[WNI_CFG_PROBE_RSP_BCN_ADDNIE_DATA_LEN] = {0}; - tANI_U8 addIEData[WNI_CFG_PROBE_RSP_ADDNIE_DATA1_LEN] = {0}; - tANI_U8 ibssPropIe[WLAN_HDD_IBSS_PROP_IE_SIZE] = {0xDD,0x05,0x00,0x00,0x00,0x00,0x00}; - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: received command %s", __func__, ((char *) value)); + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s: Received Command to change ft mode = %d", __func__, ft); - /* moving to arguments of commands */ - value = value + 21; + pHddCtx->cfg_ini->isFastTransitionEnabled = ft; + sme_UpdateFastTransitionEnabled((tHalHandle)(pHddCtx->hHal), ft); + } - sscanf(value, "%06x %04x", (unsigned int *)&oui_data, - (unsigned int *)&data); + else if (strncmp(command, "FASTREASSOC", 11) == 0) + { + tANI_U8 *value = command; + tSirMacAddr targetApBssid; + tANI_U8 trigger = 0; + eHalStatus status = eHAL_STATUS_SUCCESS; + hdd_station_ctx_t *pHddStaCtx = NULL; + pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); - if (!oui_data) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: cmd args are not provided populating existing IE", __func__); - ret = -EFAULT; - goto exit; + /* if not associated, no need to proceed with reassoc */ + if (eConnectionState_Associated != pHddStaCtx->conn_info.connState) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "%s:Not associated!",__func__); + ret = -EINVAL; + goto exit; } - ibssPropIe[2] = (oui_data & 0x00ff0000) >> 16; - ibssPropIe[3] = (oui_data & 0x0000ff00) >> 8; - ibssPropIe[4] = (oui_data & 0x000000ff); - - ibssPropIe[5] = (data & 0x0000ff00) >> 8; - ibssPropIe[6] = (data & 0x000000ff); - - if ((ccmCfgGetInt((WLAN_HDD_GET_CTX(pAdapter))->hHal, - WNI_CFG_PROBE_RSP_BCN_ADDNIE_FLAG, - &present)) != eHAL_STATUS_SUCCESS) + status = hdd_parse_reassoc_command_data(value, targetApBssid, &trigger); + if (eHAL_STATUS_SUCCESS != status) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: unable to ftch WNI_CFG_PROBE_RSP_BCN_ADDNIE_FLAG", - __func__); - ret = -EFAULT; - goto exit; + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: Failed to parse reassoc command data", __func__); + ret = -EINVAL; + goto exit; } - if (present) + /* if the target bssid is same as currently associated AP, + then no need to proceed with reassoc */ + if (VOS_TRUE == vos_mem_compare(targetApBssid, + pHddStaCtx->conn_info.bssId, sizeof(tSirMacAddr))) { - if((wlan_cfgGetStrLen(PMAC_STRUCT((WLAN_HDD_GET_CTX(pAdapter))->hHal), - WNI_CFG_PROBE_RSP_BCN_ADDNIE_DATA, &len)) != eSIR_SUCCESS) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s:unable to fetch WNI_CFG_PROBE_RSP_BCN_ADDNIE_LEN", - __func__); - ret = -EFAULT; - goto exit; - } - - if(len <= WNI_CFG_PROBE_RSP_BCN_ADDNIE_DATA_LEN && len && - ((len + WLAN_HDD_IBSS_PROP_IE_SIZE) <= SCH_MAX_BEACON_SIZE)) - { - - if ((ccmCfgGetStr((WLAN_HDD_GET_CTX(pAdapter))->hHal, - WNI_CFG_PROBE_RSP_BCN_ADDNIE_DATA, &addIE[0], &len)) - != eHAL_STATUS_SUCCESS) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s:unable to fetch WNI_PROBE_RSP_BCN_ADDNIE_DATA", - __func__); - ret = -EFAULT; - goto exit; - } - else { - found = hdd_find_ibss_prop_ie(addIE, len); - if (found) { - // pointing to IBSS prop IE - len -= WLAN_HDD_IBSS_PROP_IE_SIZE; - } - } - } - } - else { - len = 0; + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s:11r Reassoc BSSID is same as currently associated AP bssid", + __func__); + ret = -EINVAL; + goto exit; } - if (len <= WNI_CFG_PROBE_RSP_BCN_ADDNIE_DATA_LEN && - ((len + WLAN_HDD_IBSS_PROP_IE_SIZE) <= SCH_MAX_BEACON_SIZE)) + /* Proceed with scan/roam */ + smeIssueFastRoamNeighborAPEvent(WLAN_HDD_GET_HAL_CTX(pAdapter), + &targetApBssid[0], + (tSmeFastRoamTrigger)(trigger)); + } +#endif +#ifdef FEATURE_WLAN_CCX + else if (strncmp(command, "SETCCXMODE", 10) == 0) + { + tANI_U8 *value = command; + tANI_U8 ccxMode = CFG_CCX_FEATURE_ENABLED_DEFAULT; + + /* Check if the features OKC/CCX/11R are supported simultaneously, + then this operation is not permitted (return FAILURE) */ + if (sme_getIsCcxFeatureEnabled((tHalHandle)(pHddCtx->hHal)) && + hdd_is_okc_mode_enabled(pHddCtx) && + sme_getIsFtFeatureEnabled((tHalHandle)(pHddCtx->hHal))) { - vos_mem_copy (&addIE[len], ibssPropIe, WLAN_HDD_IBSS_PROP_IE_SIZE); - len += WLAN_HDD_IBSS_PROP_IE_SIZE; + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, + "%s: OKC/CCX/11R are supported simultaneously" + " hence this operation is not permitted!", __func__); + ret = -EPERM; + goto exit; } - if (ccmCfgSetStr((WLAN_HDD_GET_CTX(pAdapter))->hHal, - WNI_CFG_PROBE_RSP_BCN_ADDNIE_DATA, &addIE[0], len, NULL, - eANI_BOOLEAN_FALSE) != eHAL_STATUS_SUCCESS) + /* Move pointer to ahead of SETCCXMODE */ + value = value + 11; + /* Convert the value from ascii to integer */ + ret = kstrtou8(value, 10, &ccxMode); + if (ret < 0) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s:unable to set WNI_CFG_PRBE_RSP_BCN_ADDNIE_DATA", __func__); - ret = -EFAULT; - goto exit; + /* If the input value is greater than max value of datatype, then also + kstrtou8 fails */ + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: kstrtou8 failed range [%d - %d]", __func__, + CFG_CCX_FEATURE_ENABLED_MIN, + CFG_CCX_FEATURE_ENABLED_MAX); + ret = -EINVAL; + goto exit; } - if (ccmCfgSetInt((WLAN_HDD_GET_CTX(pAdapter))->hHal, - WNI_CFG_PROBE_RSP_BCN_ADDNIE_FLAG, 1,NULL, - eANI_BOOLEAN_FALSE) != eHAL_STATUS_SUCCESS) + if ((ccxMode < CFG_CCX_FEATURE_ENABLED_MIN) || + (ccxMode > CFG_CCX_FEATURE_ENABLED_MAX)) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s:unble to set WNI_CFG_PROBE_RSP_BCN_ADDNIE_FLAG", __func__); - ret = -EFAULT; - goto exit; + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "Ccx mode value %d is out of range" + " (Min: %d Max: %d)", ccxMode, + CFG_CCX_FEATURE_ENABLED_MIN, + CFG_CCX_FEATURE_ENABLED_MAX); + ret = -EINVAL; + goto exit; } + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s: Received Command to change ccx mode = %d", __func__, ccxMode); + + pHddCtx->cfg_ini->isCcxIniFeatureEnabled = ccxMode; + sme_UpdateIsCcxFeatureEnabled((tHalHandle)(pHddCtx->hHal), ccxMode); + } +#endif + else if (strncmp(command, "SETROAMSCANCONTROL", 18) == 0) + { + tANI_U8 *value = command; + tANI_BOOLEAN roamScanControl = 0; - /* Populating probe resp frame */ - if ((ccmCfgGetInt((WLAN_HDD_GET_CTX(pAdapter))->hHal, - WNI_CFG_PROBE_RSP_ADDNIE_FLAG, - &present)) != eHAL_STATUS_SUCCESS) + /* Move pointer to ahead of SETROAMSCANCONTROL */ + value = value + 19; + /* Convert the value from ascii to integer */ + ret = kstrtou8(value, 10, &roamScanControl); + if (ret < 0) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s:unable to fetch WNI_CFG_PROBE_RSP_ADDNIE_FLAG", __func__); - ret = -EFAULT; + /* If the input value is greater than max value of datatype, then also + kstrtou8 fails */ + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: kstrtou8 failed ", __func__); + ret = -EINVAL; goto exit; } - if (present) { - - len1 = 0; - if (eSIR_SUCCESS != wlan_cfgGetStrLen(pMac, - WNI_CFG_PROBE_RSP_ADDNIE_DATA1, &len1)) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: unable to fetch WNI_CFG_PROBE_RSP_ADDNIE_DATA1", - __func__); - ret = -EFAULT; - goto exit; - } - if (len1 < WNI_CFG_PROBE_RSP_ADDNIE_DATA1_LEN && len1 && - (WLAN_HDD_IBSS_PROP_IE_SIZE + len1) <= SIR_MAX_PACKET_SIZE) { - - if ((ccmCfgGetStr((WLAN_HDD_GET_CTX(pAdapter))->hHal, - WNI_CFG_PROBE_RSP_ADDNIE_DATA1, &addIEData[0], &len1)) - != eHAL_STATUS_SUCCESS) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s:unable fetch WNI_CFG_PROBE_RSP_ADDNIE_DATA1", - __func__); - ret = -EFAULT; - goto exit; - } - else { - found = hdd_find_ibss_prop_ie(addIEData, len1); - if (found) { - // moving back to IBSS PROP IE - len1 -= WLAN_HDD_IBSS_PROP_IE_SIZE; - } - } - len = len1; - cfgId = WNI_CFG_PROBE_RSP_ADDNIE_DATA1; - goto setcfg; - } /* data 1 */ - /* reading data 2 and 3 */ - else if (WNI_CFG_PROBE_RSP_ADDNIE_DATA1_LEN == len1) { - - len2 = 0; - if (eSIR_SUCCESS != wlan_cfgGetStrLen(pMac, - WNI_CFG_PROBE_RSP_ADDNIE_DATA2, &len2) ) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: unable to fetch PROBE_RSP_ADDNIE_DATA2", __func__); - ret = -EFAULT; - goto exit; - } - if (len2 < WNI_CFG_PROBE_RSP_ADDNIE_DATA2_LEN && len2 && - (WLAN_HDD_IBSS_PROP_IE_SIZE + len1 + len2) - <= SIR_MAX_PACKET_SIZE) { - - if ((ccmCfgGetStr((WLAN_HDD_GET_CTX(pAdapter))->hHal, - WNI_CFG_PROBE_RSP_ADDNIE_DATA2, &addIEData[0], &len2)) - != eHAL_STATUS_SUCCESS) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s:unable to fetch PROBE_RSP_ADDNIE_DATA2", __func__); - ret = -EFAULT; - goto exit; - } - else { - found = hdd_find_ibss_prop_ie(addIEData, len2); - if (found) { - // moving back to IBSS PROP IE - len2 -= WLAN_HDD_IBSS_PROP_IE_SIZE; - } - } - len = len2; - cfgId = WNI_CFG_PROBE_RSP_ADDNIE_DATA2; - goto setcfg; - } /* data 2 */ - /* reading data 3 */ - else if (WNI_CFG_PROBE_RSP_ADDNIE_DATA2_LEN == len2) { - len3 = 0; - if (eSIR_SUCCESS != wlan_cfgGetStrLen(pMac, - WNI_CFG_PROBE_RSP_ADDNIE_DATA3, &len3)) { - - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: unable to fetch PROBE_RSP_ADDNIE_DATA3", __func__); - ret = -EFAULT; - goto exit; - } - if (len3 < WNI_CFG_PROBE_RSP_ADDNIE_DATA3_LEN && len3 && - (WLAN_HDD_IBSS_PROP_IE_SIZE + len1 + len2 + len3) - <= SIR_MAX_PACKET_SIZE) { - - if ((ccmCfgGetStr((WLAN_HDD_GET_CTX(pAdapter))->hHal, - WNI_CFG_PROBE_RSP_ADDNIE_DATA3, &addIEData[0], &len3)) - != eHAL_STATUS_SUCCESS) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s:unable to ftch PROBE_RSP_ADDNIE_DATA3", __func__); - ret = -EFAULT; - goto exit; - } - else { - found = hdd_find_ibss_prop_ie(addIEData, len3); - if (found) { - // moving back to IBSS PROP IE - len3 -= WLAN_HDD_IBSS_PROP_IE_SIZE; - } - } - len = len3; - cfgId = WNI_CFG_PROBE_RSP_ADDNIE_DATA3; - goto setcfg; - } - else if (WNI_CFG_PROBE_RSP_ADDNIE_DATA3_LEN == len3) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: cannot accomoodate in data3", __func__); - ret = -EFAULT; - goto exit; - } - } /* data 3 */ - } /* data 2 and 3 */ - } /* probe rsp ADD IE present */ - else { - /* probe rsp add IE is not present */ - len = 0; - cfgId = WNI_CFG_PROBE_RSP_ADDNIE_DATA1; - } /* else */ -setcfg: - vos_mem_copy(&addIEData[len], ibssPropIe, WLAN_HDD_IBSS_PROP_IE_SIZE); - len += WLAN_HDD_IBSS_PROP_IE_SIZE; - - if (ccmCfgSetStr(WLAN_HDD_GET_HAL_CTX(pAdapter), - cfgId, - (tANI_U8*)(&addIEData[0]), - len, NULL, - eANI_BOOLEAN_FALSE) - == eHAL_STATUS_FAILURE) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: unable to copy to cfgID %ld", __func__, cfgId); - ret = -EFAULT; - goto exit; - } - if (ccmCfgSetInt(WLAN_HDD_GET_HAL_CTX(pAdapter), - WNI_CFG_PROBE_RSP_ADDNIE_FLAG, 1,NULL, - eANI_BOOLEAN_FALSE) == eHAL_STATUS_FAILURE) + if (0 != roamScanControl) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: unable to copy WNI_CFG_PROBE_RSP_ADDNIE_FLAG", __func__); - ret = -EFAULT; - goto exit; + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "roam scan control invalid value = %d", + roamScanControl); + ret = -EINVAL; + goto exit; } - } -#endif -#ifdef WLAN_FEATURE_RELIABLE_MCAST - else if (strncmp(command, "SETRMCENABLE", 12) == 0) - { - tANI_U8 *value = command; - tANI_U8 ucRmcEnable = 0; - int status; - - if ((WLAN_HDD_IBSS != pAdapter->device_mode) && - (WLAN_HDD_SOFTAP != pAdapter->device_mode)) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "Received SETRMCENABLE command in invalid mode %d \n" - "SETRMCENABLE command is only allowed in IBSS or SOFTAP mode", - pAdapter->device_mode); - ret = -EINVAL; - goto exit; - } - - status = hdd_parse_setrmcenable_command(value, &ucRmcEnable); - if (status) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "Invalid SETRMCENABLE command "); - ret = -EINVAL; - goto exit; - } - - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: ucRmcEnable %d ", __func__, ucRmcEnable); - - if (TRUE == ucRmcEnable) - { - status = sme_EnableReliableMcast( (tHalHandle)(pHddCtx->hHal), - pAdapter->sessionId ); - } - else if(FALSE == ucRmcEnable) - { - status = sme_DisableReliableMcast( (tHalHandle)(pHddCtx->hHal), - pAdapter->sessionId ); - } - else - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "Invalid SETRMCENABLE command %d", ucRmcEnable); - ret = -EINVAL; - goto exit; - } + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s: Received Command to Set roam scan control = %d", __func__, roamScanControl); - if (VOS_STATUS_SUCCESS != status) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: SETRMC %d failed status %d", __func__, ucRmcEnable, - status); - ret = -EINVAL; - goto exit; - } + sme_SetRoamScanControl((tHalHandle)(pHddCtx->hHal), roamScanControl); } - else if (strncmp(command, "SETRMCACTIONPERIOD", 18) == 0) +#ifdef FEATURE_WLAN_OKC + else if (strncmp(command, "SETOKCMODE", 10) == 0) { - tANI_U8 *value = command; - tANI_U32 uActionPeriod = 0; - int status; - - if ((WLAN_HDD_IBSS != pAdapter->device_mode) && - (WLAN_HDD_SOFTAP != pAdapter->device_mode)) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "Received SETRMC command in invalid mode %d \n" - "SETRMC command is only allowed in IBSS or SOFTAP mode", - pAdapter->device_mode); - ret = -EINVAL; - goto exit; - } - - status = hdd_parse_setrmcactionperiod_command(value, &uActionPeriod); - if (status) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "Invalid SETRMCACTIONPERIOD command "); - ret = -EINVAL; - goto exit; - } - - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: uActionPeriod %d ", __func__, uActionPeriod); - - if (ccmCfgSetInt(pHddCtx->hHal, WNI_CFG_RMC_ACTION_PERIOD_FREQUENCY, - uActionPeriod, NULL, eANI_BOOLEAN_FALSE)) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: Could not set SETRMCACTIONPERIOD %d", __func__, uActionPeriod); - ret = -EINVAL; - goto exit; - } - - } -#ifdef FEATURE_CESIUM_PROPRIETARY - else if (strncmp(command, "GETIBSSPEERINFOALL", 18) == 0) - { - /* Peer Info All Command */ - int status = eHAL_STATUS_SUCCESS; - hdd_station_ctx_t *pHddStaCtx = NULL; - char *extra = NULL; - int idx = 0, length = 0; - v_MACADDR_t *macAddr; - v_U32_t txRateMbps = 0, numOfBytestoPrint = 0; - - if (WLAN_HDD_IBSS == pAdapter->device_mode) - { - pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); - } - else - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: pAdapter is not valid for this device mode", - __func__); - ret = -EINVAL; - goto exit; - } - - /* if there are no peers, no need to continue with the command */ - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: Received GETIBSSPEERINFOALL Command", __func__); + tANI_U8 *value = command; + tANI_U8 okcMode = CFG_OKC_FEATURE_ENABLED_DEFAULT; - if (eConnectionState_IbssConnected != pHddStaCtx->conn_info.connState) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s:No IBSS Peers coalesced", __func__); - ret = -EINVAL; - goto exit; - } + /* Check if the features OKC/CCX/11R are supported simultaneously, + then this operation is not permitted (return FAILURE) */ + if (sme_getIsCcxFeatureEnabled((tHalHandle)(pHddCtx->hHal)) && + hdd_is_okc_mode_enabled(pHddCtx) && + sme_getIsFtFeatureEnabled((tHalHandle)(pHddCtx->hHal))) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, + "%s: OKC/CCX/11R are supported simultaneously" + " hence this operation is not permitted!", __func__); + ret = -EPERM; + goto exit; + } - /* Handle the command */ - status = hdd_cfg80211_get_ibss_peer_info_all(pAdapter); - if (VOS_STATUS_SUCCESS == status) - { - /* The variable extra needed to be allocated on the heap since - * amount of memory required to copy the data for 32 devices - * exceeds the size of 1024 bytes of default stack size. On - * 64 bit devices, the default max stack size of 2048 bytes - */ - extra = kmalloc(WLAN_MAX_BUF_SIZE, GFP_KERNEL); - - if (NULL == extra) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s:kmalloc failed", __func__); + /* Move pointer to ahead of SETOKCMODE */ + value = value + 11; + /* Convert the value from ascii to integer */ + ret = kstrtou8(value, 10, &okcMode); + if (ret < 0) + { + /* If the input value is greater than max value of datatype, then also + kstrtou8 fails */ + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: kstrtou8 failed range [%d - %d]", __func__, + CFG_OKC_FEATURE_ENABLED_MIN, + CFG_OKC_FEATURE_ENABLED_MAX); ret = -EINVAL; goto exit; - } + } - /* Copy number of stations */ - length = scnprintf( extra, WLAN_MAX_BUF_SIZE, "%d ", - pHddStaCtx->ibss_peer_info.numIBSSPeers); + if ((okcMode < CFG_OKC_FEATURE_ENABLED_MIN) || + (okcMode > CFG_OKC_FEATURE_ENABLED_MAX)) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "Okc mode value %d is out of range" + " (Min: %d Max: %d)", okcMode, + CFG_OKC_FEATURE_ENABLED_MIN, + CFG_OKC_FEATURE_ENABLED_MAX); + ret = -EINVAL; + goto exit; + } - for (idx = 0; idx < pHddStaCtx->ibss_peer_info.numIBSSPeers; idx++) - { - macAddr = - hdd_wlan_get_ibss_mac_addr_from_staid(pAdapter, - pHddStaCtx->ibss_peer_info.ibssPeerList[idx].staIdx); - if (NULL != macAddr) - { - txRateMbps = - ((pHddStaCtx->ibss_peer_info.ibssPeerList[idx].txRate)*500*1000)/1000000; - - length += scnprintf( (extra + length), WLAN_MAX_BUF_SIZE - length, - "%02x:%02x:%02x:%02x:%02x:%02x %d %d ", - macAddr->bytes[0], macAddr->bytes[1], macAddr->bytes[2], - macAddr->bytes[3], macAddr->bytes[4], macAddr->bytes[5], - (int)txRateMbps, - (int)pHddStaCtx->ibss_peer_info.ibssPeerList[idx].rssi); - } - else - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: MAC ADDR is NULL for staIdx: %d", __func__, - pHddStaCtx->ibss_peer_info.ibssPeerList[idx].staIdx); - } + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s: Received Command to change okc mode = %d", __func__, okcMode); - /* - * VOS_TRACE() macro has limitation of 512 bytes for the print - * buffer. Hence printing the data in two chunks. The first chunk - * will have the data for 16 devices and the second chunk will - * have the rest. - */ - if (idx < NUM_OF_STA_DATA_TO_PRINT) - { - numOfBytestoPrint = length; - } - } + pHddCtx->cfg_ini->isOkcIniFeatureEnabled = okcMode; + } +#endif /* FEATURE_WLAN_OKC */ + else if (strncmp(priv_data.buf, "GETROAMSCANCONTROL", 18) == 0) + { + tANI_BOOLEAN roamScanControl = sme_GetRoamScanControl((tHalHandle)(pHddCtx->hHal)); + char extra[32]; + tANI_U8 len = 0; - /* - * Copy the data back into buffer, if the data to copy is - * morethan 512 bytes than we will split the data and do - * it in two shots - */ - if (copy_to_user(priv_data.buf, extra, numOfBytestoPrint)) - { + len = scnprintf(extra, sizeof(extra), "%s %d", + command, roamScanControl); + if (copy_to_user(priv_data.buf, &extra, len + 1)) + { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: Copy into user data buffer failed ", __func__); + "%s: failed to copy data to user buffer", __func__); ret = -EFAULT; goto exit; - } - priv_data.buf[numOfBytestoPrint] = '\0'; - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_MED, - "%s", priv_data.buf); - - if (length > numOfBytestoPrint) - { - if (copy_to_user(priv_data.buf + numOfBytestoPrint, - extra + numOfBytestoPrint, - length - numOfBytestoPrint + 1)) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: Copy into user data buffer failed ", __func__); - ret = -EFAULT; - goto exit; - } - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_MED, - "%s", &priv_data.buf[numOfBytestoPrint]); - } - - /* Free temporary buffer */ - kfree(extra); - } - - else - { - /* Command failed, log error */ - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "GETIBSSPEERINFOALL command failed with status code %d", - __func__, status); - ret = -EINVAL; - goto exit; - } - ret = 0; - } - else if(strncmp(command, "GETIBSSPEERINFO", 15) == 0) - { - /* Peer Info command */ - tANI_U8 *value = command; - VOS_STATUS status; - hdd_station_ctx_t *pHddStaCtx = NULL; - char extra[128] = { 0 }; - v_U32_t length = 0; - v_U8_t staIdx = 0; - v_U32_t txRateMbps = 0; - v_MACADDR_t peerMacAddr; - - if (WLAN_HDD_IBSS == pAdapter->device_mode) - { - pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); - } - else - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: pAdapter is not valid for this device mode", - __func__); - ret = -EINVAL; - goto exit; - } - - /* if there are no peers, no need to continue with the command */ - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: Received GETIBSSPEERINFO Command", __func__); - - if (eConnectionState_IbssConnected != pHddStaCtx->conn_info.connState) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s:No IBSS Peers coalesced", __func__); - ret = -EINVAL; - goto exit; - } - - /* Parse the incoming command buffer */ - status = hdd_parse_get_ibss_peer_info(value, &peerMacAddr); - if (VOS_STATUS_SUCCESS != status) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "Invalid GETIBSSPEERINFO command", __func__); - ret = -EINVAL; - goto exit; - } - - /* Get station index for the peer mac address */ - hdd_Ibss_GetStaId(pHddStaCtx, &peerMacAddr, &staIdx); + } + } +#ifdef WLAN_FEATURE_PACKET_FILTERING + else if (strncmp(command, "ENABLE_PKTFILTER_IPV6", 21) == 0) + { + tANI_U8 filterType = 0; + tANI_U8 *value = command; - if (staIdx < 0 || staIdx > HDD_MAX_NUM_IBSS_STA) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "Invalid StaIdx %d returned", __func__, staIdx); - ret = -EINVAL; - goto exit; - } + /* Move pointer to ahead of ENABLE_PKTFILTER_IPV6 */ + value = value + 22; - /* Handle the command */ - status = hdd_cfg80211_get_ibss_peer_info(pAdapter, staIdx); - if (VOS_STATUS_SUCCESS == status) - { - v_U32_t txRate = pHddStaCtx->ibss_peer_info.ibssPeerList[0].txRate; - txRateMbps = (txRate * 500 * 1000)/1000000; + /* Convert the value from ascii to integer */ + ret = kstrtou8(value, 10, &filterType); + if (ret < 0) + { + /* If the input value is greater than max value of datatype, + * then also kstrtou8 fails + */ + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: kstrtou8 failed range ", __func__); + ret = -EINVAL; + goto exit; + } - length = scnprintf( extra, sizeof(extra), "%d %d", (int)txRateMbps, - (int)pHddStaCtx->ibss_peer_info.ibssPeerList[0].rssi); + if (filterType != 0 && filterType != 1) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: Accepted Values are 0 and 1 ", __func__); + ret = -EINVAL; + goto exit; + } + wlan_hdd_setIPv6Filter(WLAN_HDD_GET_CTX(pAdapter), filterType, + pAdapter->sessionId); + } +#endif + else if (strncmp(command, "BTCOEXMODE", 10) == 0 ) + { + char *dhcpPhase; + dhcpPhase = command + 12; + if ('1' == *dhcpPhase) + { + sme_DHCPStartInd(pHddCtx->hHal, pAdapter->device_mode, + pAdapter->macAddressCurrent.bytes); + } + else if ('2' == *dhcpPhase) + { + sme_DHCPStopInd(pHddCtx->hHal, pAdapter->device_mode, + pAdapter->macAddressCurrent.bytes); + } + } + else if (strncmp(command, "SCAN-ACTIVE", 11) == 0) + { + pAdapter->scan_info.scan_mode = eSIR_ACTIVE_SCAN; + } + else if (strncmp(command, "SCAN-PASSIVE", 12) == 0) + { + pAdapter->scan_info.scan_mode = eSIR_PASSIVE_SCAN; + } + else if (strncmp(command, "GETDWELLTIME", 12) == 0) + { + hdd_config_t *pCfg = (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini; + char extra[32]; + tANI_U8 len = 0; - /* Copy the data back into buffer */ - if (copy_to_user(priv_data.buf, &extra, length+ 1)) - { + len = scnprintf(extra, sizeof(extra), "GETDWELLTIME %u\n", + (int)pCfg->nActiveMaxChnTime); + if (copy_to_user(priv_data.buf, &extra, len + 1)) + { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: copy data to user buffer failed GETIBSSPEERINFO command", - __func__); + "%s: failed to copy data to user buffer", __func__); ret = -EFAULT; goto exit; - } - } - else - { - /* Command failed, log error */ - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "GETIBSSPEERINFO command failed with status code %d", - __func__, status); - ret = -EINVAL; - goto exit; - } + } + ret = len; + } + else if (strncmp(command, "SETDWELLTIME", 12) == 0) + { + tANI_U8 *value = command; + hdd_config_t *pCfg = (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini; + int val = 0, temp; - /* Success ! */ - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_MED, - "%s", priv_data.buf); - ret = 0; - } -#endif /* FEATURE_CESIUM_PROPRIETARY */ + value = value + 13; + temp = kstrtou32(value, 10, &val); + if ( temp != 0 || val < CFG_ACTIVE_MAX_CHANNEL_TIME_MIN || + val > CFG_ACTIVE_MAX_CHANNEL_TIME_MAX ) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: argument passed for SETDWELLTIME is incorrect", __func__); + ret = -EFAULT; + goto exit; + } + pCfg->nActiveMaxChnTime = val; + } + else if ( strncasecmp(command, "MIRACAST", 8) == 0 ) + { + tANI_U8 filterType = 0; + tANI_U8 *value; + value = command + 9; + /* Convert the value from ascii to integer */ + ret = kstrtou8(value, 10, &filterType); + if (ret < 0) + { + /* If the input value is greater than max value of datatype, + * then also kstrtou8 fails + */ + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: kstrtou8 failed range ", __func__); + ret = -EINVAL; + goto exit; + } + if ((filterType < WLAN_HDD_DRIVER_MIRACAST_CFG_MIN_VAL ) || + (filterType > WLAN_HDD_DRIVER_MIRACAST_CFG_MAX_VAL)) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: Accepted Values are 0 to 2. 0-Disabled, 1-Source," + " 2-Sink ", __func__); + ret = -EINVAL; + goto exit; + } + //Filtertype value should be either 0-Disabled, 1-Source, 2-sink + pHddCtx->drvr_miracast = filterType; + hdd_tx_rx_pkt_cnt_stat_timer_handler(pHddCtx); + } else if (strncmp(command, "SETRMCTXRATE", 12) == 0) { tANI_U8 *value = command; @@ -4645,7 +3424,7 @@ setcfg: status = sme_SendRateUpdateInd((tHalHandle)(pHddCtx->hHal), rateUpdateParams); } -#endif + #ifdef FEATURE_WLAN_BATCH_SCAN else if (strncmp(command, "WLS_BATCHING VERSION", 20) == 0) { @@ -4702,7 +3481,8 @@ setcfg: } if ((WLAN_HDD_INFRA_STATION != pAdapter->device_mode) && - (WLAN_HDD_P2P_CLIENT != pAdapter->device_mode)) + (WLAN_HDD_P2P_CLIENT != pAdapter->device_mode) && + (WLAN_HDD_P2P_DEVICE != pAdapter->device_mode)) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, "Received WLS_BATCHING SET command in invalid mode %d " @@ -4749,7 +3529,7 @@ setcfg: { VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, "%s: Received set batch scan failure response from FW", - __func__, pRsp->nScansToBatch); + __func__); ret = -EINVAL; goto exit; } @@ -4844,93 +3624,18 @@ setcfg: /*Clear previous batch scan response data if any*/ vos_mem_zero((tANI_U8 *)(command + priv_data.used_len), remain_len); } - else - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "Invalid total length from user space can't fetch batch" - " scan response total_len %ld used_len %ld remain len %ld", - priv_data.total_len, priv_data.used_len, remain_len); - ret = -EINVAL; - goto exit; - } - ret = hdd_return_batch_scan_rsp_to_user(pAdapter, &priv_data, command); - } -#endif -#ifdef FEATURE_CESIUM_PROPRIETARY - /* command should be a string having format - * SETIBSSROUTETABLE - * Where, pair " " shall be repeated - * numOfEntries time - */ - else if (strncmp(command, "SETIBSSROUTETABLE", 17) == 0) - { - tANI_U8 *ptr = command; - - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: Received command to set IBSS Route Table", __func__); - - ret = hdd_updateIbssRouteTable(pHddCtx->hHal, ptr); - } - else if (strncmp(command, "SETIBSSTXFAILEVENT", 18) == 0 ) - { - char *value; - tANI_U8 tx_fail_count = 0; - tANI_U16 pid = 0; - - value = command; - - ret = hdd_ParseIBSSTXFailEventParams(value, &tx_fail_count, &pid); - - if (0 != ret) - { - hddLog(VOS_TRACE_LEVEL_INFO, - "%s: Failed to parse SETIBSSTXFAILEVENT arguments", - __func__); - goto exit; - } - - hddLog(VOS_TRACE_LEVEL_INFO, "%s: tx_fail_cnt=%hhu, pid=%hu", - __func__, tx_fail_count, pid); - - if (0 == tx_fail_count) - { - // Disable TX Fail Indication - if (eHAL_STATUS_SUCCESS == - sme_TXFailMonitorStartStopInd(pHddCtx->hHal, - tx_fail_count, - NULL)) - { - cesium_pid = 0; - } - else - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: failed to disable TX Fail Event ", __func__); - ret = -EINVAL; - } - } - else - { - if (eHAL_STATUS_SUCCESS == - sme_TXFailMonitorStartStopInd(pHddCtx->hHal, - tx_fail_count, - (void*)hdd_tx_fail_ind_callback)) - { - cesium_pid = pid; - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: Registered Cesium pid %u", __func__, - cesium_pid); - } - else - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: Failed to enable TX Fail Monitoring", __func__); - ret = -EINVAL; - } - } + else + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "Invalid total length from user space can't fetch batch" + " scan response total_len %d used_len %d remain len %d", + priv_data.total_len, priv_data.used_len, remain_len); + ret = -EINVAL; + goto exit; + } + ret = hdd_return_batch_scan_rsp_to_user(pAdapter, &priv_data, command); } - -#endif /* FEATURE_CESIUM_PROPRIETARY */ +#endif #if defined(FEATURE_WLAN_CCX) && defined(FEATURE_WLAN_CCX_UPLOAD) else if (strncmp(command, "SETCCXROAMSCANCHANNELS", 22) == 0) { @@ -5054,7 +3759,7 @@ setcfg: * eg., GETTSMSTATS 10 1:0:0:161 20 1 17 8 39800 */ len = scnprintf(extra, sizeof(extra), - "%s %d %d:%d:%d:%d %lu %d %d %d %d", + "%s %d %d:%d:%d:%d %u %d %d %d %d", command, tsmMetrics.UplinkPktQueueDly, tsmMetrics.UplinkPktQueueDlyHist[0], @@ -5534,6 +4239,10 @@ static void hdd_update_tgt_services(hdd_context_t *hdd_ctx, cfg_ini->PnoOffload = TRUE; #endif pMac->lteCoexAntShare = cfg->lte_coex_ant_share; +#ifdef FEATURE_WLAN_TDLS + cfg_ini->fEnableTDLSSupport &= cfg->en_tdls; +#endif + pMac->beacon_offload = cfg->beacon_offload; } static void hdd_update_tgt_ht_cap(hdd_context_t *hdd_ctx, @@ -5982,8 +4691,8 @@ void hdd_update_tgt_cfg(void *context, void *param) hdd_context_t *hdd_ctx = (hdd_context_t *)context; struct hdd_tgt_cfg *cfg = (struct hdd_tgt_cfg *)param; hdd_ctx->cfg_ini->nBandCapability = cfg->band_cap; - /* To Do */ - // Update the country code from target to ini + + hdd_ctx->reg.reg_domain = cfg->reg_domain; /* This can be extended to other configurations like ht, vht cap... */ @@ -6885,193 +5594,6 @@ void hdd_full_pwr_cbk(void *callbackContext, eHalStatus status) } } -#ifdef FEATURE_CESIUM_PROPRIETARY -static void hdd_tx_fail_ind_callback(v_U8_t *MacAddr, v_U8_t seqNo) -{ - int payload_len; - struct sk_buff *skb; - struct nlmsghdr *nlh; - v_U8_t *data; - - payload_len = ETH_ALEN; - - if (0 == cesium_pid) - { - hddLog(VOS_TRACE_LEVEL_ERROR, "%s: cesium process not registered", - __func__); - return; - } - - if ((skb = nlmsg_new(payload_len,GFP_ATOMIC)) == NULL) - { - hddLog(VOS_TRACE_LEVEL_ERROR, - "%s: nlmsg_new() failed for msg size[%d]", - __func__, NLMSG_SPACE(payload_len)); - return; - } - - nlh = nlmsg_put(skb, cesium_pid, seqNo, 0, payload_len, NLM_F_REQUEST); - - if (NULL == nlh) - { - hddLog(VOS_TRACE_LEVEL_ERROR, - "%s: nlmsg_put() failed for msg size[%d]", - __func__, NLMSG_SPACE(payload_len)); - - kfree_skb(skb); - return; - } - - data = nlmsg_data(nlh); - memcpy(data, MacAddr, ETH_ALEN); - - if (nlmsg_unicast(cesium_nl_srv_sock, skb, cesium_pid) < 0) - { - hddLog(VOS_TRACE_LEVEL_ERROR, "%s: nlmsg_unicast() failed for msg size[%d]", - __func__, NLMSG_SPACE(payload_len)); - } - - return; -} - -/**--------------------------------------------------------------------------- - \brief hdd_ParseuserParams - return a pointer to the next argument - - \return - status - ---------------------------------------------------------------------------*/ -static int hdd_ParseUserParams(tANI_U8 *pValue, tANI_U8 **ppArg) -{ - tANI_U8 *pVal; - - pVal = strchr(pValue, ' '); - - if (NULL == pVal) - { - /* no argument remains */ - return -EINVAL; - } - else if (SPACE_ASCII_VALUE != *pVal) - { - /* no space after the current argument */ - return -EINVAL; - } - - pVal++; - - /* remove empty spaces */ - while ((SPACE_ASCII_VALUE == *pVal) && ('\0' != *pVal)) - { - pVal++; - } - - /* no argument followed by spaces */ - if ('\0' == *pVal) - { - return -EINVAL; - } - - *ppArg = pVal; - - return 0; -} - -/**---------------------------------------------------------------------------- - \brief hdd_ParseIBSSTXFailEventParams - Parse params for SETIBSSTXFAILEVENT - - \return - status - -------------------------------------------------------------------------------*/ -static int hdd_ParseIBSSTXFailEventParams(tANI_U8 *pValue, - tANI_U8 *tx_fail_count, - tANI_U16 *pid) -{ - tANI_U8 *param = NULL; - int ret; - - ret = hdd_ParseUserParams(pValue, ¶m); - - if (0 == ret && NULL != param) - { - if (1 != sscanf(param, "%hhu", tx_fail_count)) - { - ret = -EINVAL; - goto done; - } - } - else - { - goto done; - } - - if (0 == *tx_fail_count) - { - *pid = 0; - goto done; - } - - pValue = param; - pValue++; - - ret = hdd_ParseUserParams(pValue, ¶m); - - if (0 == ret) - { - if (1 != sscanf(param, "%hu", pid)) - { - ret = -EINVAL; - goto done; - } - } - else - { - goto done; - } - -done: - return ret; -} - -static int hdd_open_cesium_nl_sock() -{ -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0)) - struct netlink_kernel_cfg cfg = { - .groups = WLAN_NLINK_MCAST_GRP_ID, - .input = NULL - }; -#endif - int ret = 0; - -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0)) - cesium_nl_srv_sock = netlink_kernel_create(&init_net, WLAN_NLINK_CESIUM, -#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,7,0)) - THIS_MODULE, -#endif - &cfg); -#else - cesium_nl_srv_sock = netlink_kernel_create(&init_net, WLAN_NLINK_CESIUM, - WLAN_NLINK_MCAST_GRP_ID, NULL, NULL, THIS_MODULE); -#endif - - if (cesium_nl_srv_sock == NULL) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "NLINK: cesium netlink_kernel_create failed"); - ret = -ECONNREFUSED; - } - - return ret; -} - -static void hdd_close_cesium_nl_sock() -{ - if (NULL != cesium_nl_srv_sock) - { - netlink_kernel_release(cesium_nl_srv_sock); - cesium_nl_srv_sock = NULL; - } -} -#endif /* FEATURE_CESIUM_PROPRIETARY */ /**--------------------------------------------------------------------------- \brief hdd_req_bmps_cbk() - HDD Request BMPS callback function @@ -7345,9 +5867,6 @@ static hdd_adapter_t* hdd_alloc_station_adapter( hdd_context_t *pHddCtx, tSirMac init_completion(&pAdapter->tdls_link_establish_req_comp); #endif -#ifdef FEATURE_CESIUM_PROPRIETARY - init_completion(&pAdapter->ibss_peer_info_comp); -#endif /* FEATURE_CESIUM_PROPRIETARY */ init_completion(&pHddCtx->mc_sus_event_var); init_completion(&pHddCtx->tx_sus_event_var); init_completion(&pHddCtx->rx_sus_event_var); @@ -7368,7 +5887,6 @@ static hdd_adapter_t* hdd_alloc_station_adapter( hdd_context_t *pHddCtx, tSirMac #endif init_completion(&pAdapter->scan_info.scan_req_completion_event); init_completion(&pAdapter->scan_info.abortscan_event_var); - init_completion(&pHddCtx->wiphy_channel_update_event); vos_event_init(&pAdapter->scan_info.scan_finished_event); pAdapter->scan_info.scan_pending_option = WEXT_SCAN_PENDING_GIVEUP; @@ -7511,7 +6029,7 @@ VOS_STATUS hdd_init_station_mode( hdd_adapter_t *pAdapter ) if ( !HAL_STATUS_SUCCESS( halStatus ) ) { hddLog(VOS_TRACE_LEVEL_FATAL, - "sme_OpenSession() failed with status code %08d [x%08lx]", + "sme_OpenSession() failed with status code %08d [x%08x]", halStatus, halStatus ); status = VOS_STATUS_E_FAILURE; goto error_sme_open; @@ -7533,7 +6051,7 @@ VOS_STATUS hdd_init_station_mode( hdd_adapter_t *pAdapter ) if( eHAL_STATUS_SUCCESS != (halStatus = hdd_register_wext(pWlanDev))) { hddLog(VOS_TRACE_LEVEL_FATAL, - "hdd_register_wext() failed with status code %08d [x%08lx]", + "hdd_register_wext() failed with status code %08d [x%08x]", halStatus, halStatus ); status = VOS_STATUS_E_FAILURE; goto error_register_wext; @@ -7557,7 +6075,7 @@ VOS_STATUS hdd_init_station_mode( hdd_adapter_t *pAdapter ) if( VOS_STATUS_SUCCESS != ( status = hdd_init_tx_rx( pAdapter ) ) ) { hddLog(VOS_TRACE_LEVEL_FATAL, - "hdd_init_tx_rx() failed with status code %08d [x%08lx]", + "hdd_init_tx_rx() failed with status code %08d [x%08x]", status, status ); goto error_init_txrx; } @@ -7567,7 +6085,7 @@ VOS_STATUS hdd_init_station_mode( hdd_adapter_t *pAdapter ) if( VOS_STATUS_SUCCESS != ( status = hdd_wmm_adapter_init( pAdapter ) ) ) { hddLog(VOS_TRACE_LEVEL_FATAL, - "hdd_wmm_adapter_init() failed with status code %08d [x%08lx]", + "hdd_wmm_adapter_init() failed with status code %08d [x%08x]", status, status ); goto error_wmm_init; } @@ -7719,16 +6237,14 @@ void hdd_cleanup_adapter( hdd_context_t *pHddCtx, hdd_adapter_t *pAdapter, tANI_ tHddBatchScanRsp *pPrev; if (pAdapter) { - mutex_lock(&pAdapter->hdd_batch_scan_lock); - pNode = pAdapter->pBatchScanRsp; - while (pNode) - { - pPrev = pNode; - pNode = pNode->pNext; - vos_mem_free((v_VOID_t * )pPrev); - } - pAdapter->pBatchScanRsp = NULL; - mutex_unlock(&pAdapter->hdd_batch_scan_lock); + pNode = pAdapter->pBatchScanRsp; + while (pNode) + { + pPrev = pNode; + pNode = pNode->pNext; + vos_mem_free((v_VOID_t * )pPrev); + } + pAdapter->pBatchScanRsp = NULL; } #endif @@ -8246,6 +6762,13 @@ VOS_STATUS hdd_close_adapter( hdd_context_t *pHddCtx, hdd_adapter_t *pAdapter, #endif + /* + * If Powersave Offload is enabled, + * Fw will take care incase of concurrency + */ + if(pHddCtx->cfg_ini->enablePowersaveOffload) + return VOS_STATUS_SUCCESS; + /* If there is a single session of STA/P2P client, re-enable BMPS */ if ((!vos_concurrent_sessions_running()) && ((pHddCtx->no_of_sessions[VOS_STA_MODE] >= 1) || @@ -9442,10 +7965,6 @@ void hdd_wlan_exit(hdd_context_t *pHddCtx) nl_srv_exit(); #endif /* WLAN_KD_READY_NOTIFIER */ -#ifdef FEATURE_CESIUM_PROPRIETARY - hdd_close_cesium_nl_sock(); -#endif /* FEATURE_CESIUM_PROPRIETARY */ - /* Cancel the vote for XO Core ON. * This is done here to ensure there is no race condition since MC, TX and WD threads have * exited at this point @@ -9852,6 +8371,41 @@ static boolean hdd_is_5g_supported(hdd_context_t * pHddCtx) #endif } +#ifdef CONFIG_ENABLE_LINUX_REG +static VOS_STATUS wlan_hdd_reg_init(hdd_context_t *hdd_ctx) +{ + struct wiphy *wiphy; + VOS_STATUS status = VOS_STATUS_SUCCESS; + + wiphy = hdd_ctx->wiphy; + + /* initialize the NV module. This is required so that + we can initialize the channel information in wiphy + from the NV.bin data. The channel information in + wiphy needs to be initialized before wiphy registration */ + +#ifndef QCA_WIFI_ISOC + status = vos_init_wiphy_from_eeprom(); + if (!VOS_IS_STATUS_SUCCESS(status)) + { + /* NV module cannot be initialized */ + hddLog( VOS_TRACE_LEVEL_FATAL, + "%s: vos_init_wiphy failed", __func__); + return status; + } +#endif + + /* registration of wiphy dev with cfg80211 */ + if (0 > wlan_hdd_cfg80211_register(wiphy)) + { + hddLog(VOS_TRACE_LEVEL_ERROR,"%s: wiphy register failed", __func__); + status = VOS_STATUS_E_FAILURE; + } + + return status; +} +#endif + /**--------------------------------------------------------------------------- @@ -9926,6 +8480,7 @@ int hdd_wlan_startup(struct device *dev, v_VOID_t *hif_sc) init_completion(&pHddCtx->full_pwr_comp_var); init_completion(&pHddCtx->standby_comp_var); init_completion(&pHddCtx->req_bmps_comp_var); + init_completion(&pHddCtx->wiphy_channel_update_event); #ifdef CONFIG_ENABLE_LINUX_REG init_completion(&pHddCtx->linux_reg_req); @@ -10067,8 +8622,9 @@ int hdd_wlan_startup(struct device *dev, v_VOID_t *hif_sc) hdd_wdi_trace_enable(eWLAN_MODULE_PAL, pHddCtx->cfg_ini->wdiTraceEnablePAL); + if (VOS_FTM_MODE == hdd_get_conparam()) - goto register_wiphy; + goto ftm_processing; //Open watchdog module if(pHddCtx->cfg_ini->fIsLogpEnabled) @@ -10094,42 +8650,32 @@ int hdd_wlan_startup(struct device *dev, v_VOID_t *hif_sc) } #ifdef CONFIG_ENABLE_LINUX_REG - /* initialize the NV module. This is required so that - we can initialize the channel information in wiphy - from the NV.bin data. The channel information in - wiphy needs to be initialized before wiphy registration */ - status = vos_nv_open(); if (!VOS_IS_STATUS_SUCCESS(status)) { - /* NV module cannot be initialized */ - hddLog( VOS_TRACE_LEVEL_FATAL, - "%s: vos_nv_open failed", __func__); - goto err_clkvote; + /* NV module cannot be initialized */ + hddLog( VOS_TRACE_LEVEL_FATAL, + "%s: vos_nv_open failed", __func__); + goto err_clkvote; } +#ifdef QCA_WIFI_ISOC status = vos_init_wiphy_from_nv_bin(); if (!VOS_IS_STATUS_SUCCESS(status)) { - /* NV module cannot be initialized */ - hddLog( VOS_TRACE_LEVEL_FATAL, - "%s: vos_init_wiphy failed", __func__); - goto err_vos_nv_close; - } - - /* registration of wiphy dev with cfg80211 */ - if (0 > wlan_hdd_cfg80211_register(wiphy)) - { - hddLog(VOS_TRACE_LEVEL_ERROR,"%s: wiphy register failed", __func__); - goto err_vos_nv_close; + /* NV module cannot be initialized */ + hddLog( VOS_TRACE_LEVEL_FATAL, + "%s: vos_init_wiphy failed", __func__); + goto err_vos_nv_close; } +#endif #endif status = vos_open( &pVosContext, 0); if ( !VOS_IS_STATUS_SUCCESS( status )) { hddLog(VOS_TRACE_LEVEL_FATAL, "%s: vos_open failed", __func__); - goto err_wiphy_unregister; + goto err_vos_nv_close; } #if defined(QCA_WIFI_2_0) && !defined(QCA_WIFI_ISOC) && \ @@ -10153,6 +8699,14 @@ int hdd_wlan_startup(struct device *dev, v_VOID_t *hif_sc) goto err_vosclose; } +#ifdef CONFIG_ENABLE_LINUX_REG + status = wlan_hdd_reg_init(pHddCtx); + if (status != VOS_STATUS_SUCCESS) { + hddLog(VOS_TRACE_LEVEL_FATAL, + "%s: Failed to init channel list", __func__); + goto err_vosclose; + } +#endif status = hdd_set_sme_chan_list(pHddCtx); if (status != VOS_STATUS_SUCCESS) { hddLog(VOS_TRACE_LEVEL_FATAL, @@ -10286,6 +8840,15 @@ int hdd_wlan_startup(struct device *dev, v_VOID_t *hif_sc) goto err_vosclose; } +#ifdef FEATURE_WLAN_CH_AVOID + cnss_get_wlan_unsafe_channel(pHddCtx->unsafe_channel_list, + &(pHddCtx->unsafe_channel_count), + sizeof(v_U16_t) * NUM_20MHZ_RF_CHANNELS); + /* Plug in avoid channel notification callback */ + sme_AddChAvoidCallback(pHddCtx->hHal, + hdd_ch_avoid_cb); +#endif /* FEATURE_WLAN_CH_AVOID */ + /* Exchange capability info between Host and FW and also get versioning info from FW */ hdd_exchange_version_and_caps(pHddCtx); @@ -10304,7 +8867,6 @@ int hdd_wlan_startup(struct device *dev, v_VOID_t *hif_sc) wlan_hdd_cfg80211_update_wiphy_caps( wiphy ); #endif -register_wiphy: /* registration of wiphy dev with cfg80211 */ if (0 > wlan_hdd_cfg80211_register(wiphy)) { @@ -10313,8 +8875,17 @@ register_wiphy: } #endif + ftm_processing: if (VOS_FTM_MODE == hdd_get_conparam()) { + + /* registration of wiphy dev with cfg80211 */ + if (0 > wlan_hdd_cfg80211_register(wiphy)) + { + hddLog(VOS_TRACE_LEVEL_ERROR,"%s: wiphy register failed", __func__); + goto err_vosstop; + } + if ( VOS_STATUS_SUCCESS != wlan_hdd_ftm_open(pHddCtx) ) { wiphy_unregister(wiphy); @@ -10544,14 +9115,6 @@ register_wiphy: } #endif -#ifdef FEATURE_CESIUM_PROPRIETARY - if (hdd_open_cesium_nl_sock() < 0) - { - hddLog(VOS_TRACE_LEVEL_FATAL,"%s: hdd_open_cesium_nl_sock failed", __func__); - goto err_nl_srv; - } -#endif - hdd_register_mcast_bcast_filter(pHddCtx); if (VOS_STA_SAP_MODE != hdd_get_conparam()) { @@ -10656,13 +9219,10 @@ err_vosclose: } vos_close(pVosContext ); -err_wiphy_unregister: - #ifdef CONFIG_ENABLE_LINUX_REG wiphy_unregister(wiphy); err_vos_nv_close: - vos_nv_close(); err_clkvote: @@ -11548,6 +10108,172 @@ VOS_STATUS hdd_issta_p2p_clientconnected(hdd_context_t *pHddCtx) return sme_isSta_p2p_clientConnected(pHddCtx->hHal); } +#ifdef FEATURE_WLAN_CH_AVOID +/**--------------------------------------------------------------------------- + + \brief hdd_freq_to_chn() - + + Input frequency translated into channel number + + \param - freq input frequency with order of MHz + + \return - corresponding channel number. + incannot find correct channel number, return 0 + + --------------------------------------------------------------------------*/ +v_U16_t hdd_freq_to_chn +( + v_U16_t freq +) +{ + int loop; + + for (loop = 0; loop < NUM_20MHZ_RF_CHANNELS; loop++) + { + if (rfChannels[loop].targetFreq == freq) + { + return rfChannels[loop].channelNum; + } + } + + return (0); +} + +/**--------------------------------------------------------------------------- + + \brief hdd_ch_avoid_cb() - + + Avoid channel notification from FW handler. + FW will send un-safe channle list to avoid overwrapping. + hostapd should not use notified channel + + \param - pAdapter HDD adapter pointer + indParam channel avoid notification parameter + + \return - None + + --------------------------------------------------------------------------*/ +void hdd_ch_avoid_cb +( + void *hdd_context, + void *indi_param +) +{ + hdd_adapter_t *hostapd_adapter = NULL; + hdd_context_t *hdd_ctxt; + tSirChAvoidIndType *ch_avoid_indi; + v_U8_t range_loop; + v_U16_t channel_loop; + v_U16_t dup_check; + v_U16_t start_channel; + v_U16_t end_channel; + v_CONTEXT_t vos_context; + static int restart_sap_in_progress = 0; + + /* Basic sanity */ + if (!hdd_context || !indi_param) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s : Invalid arguments", __func__); + return; + } + + hdd_ctxt = (hdd_context_t *)hdd_context; + ch_avoid_indi = (tSirChAvoidIndType *)indi_param; + vos_context = hdd_ctxt->pvosContext; + + /* Make unsafe channel list */ + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s : band count %d", + __func__, ch_avoid_indi->avoid_range_count); + + if (0 == ch_avoid_indi->avoid_range_count) { + hdd_ctxt->unsafe_channel_count = 0; + } else { + for (range_loop = 0; range_loop < ch_avoid_indi->avoid_range_count; range_loop++) + { + if (hdd_ctxt->unsafe_channel_count >= NUM_20MHZ_RF_CHANNELS) + break; + + start_channel = hdd_freq_to_chn( + ch_avoid_indi->avoid_freq_range[range_loop].start_freq + 10); + end_channel = hdd_freq_to_chn( + ch_avoid_indi->avoid_freq_range[range_loop].end_freq - 10); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s : start %d : %d, end %d : %d", + __func__, + ch_avoid_indi->avoid_freq_range[range_loop].start_freq, + start_channel, + ch_avoid_indi->avoid_freq_range[range_loop].end_freq, + end_channel); + + /* do not process frequency bands that are not mapped to predefined channels */ + if (start_channel == 0 || end_channel == 0) + continue; + + for (channel_loop = start_channel; + channel_loop < (end_channel + 1); + channel_loop++) + { + /* Channel duplicate check routine */ + for (dup_check = 0; dup_check < hdd_ctxt->unsafe_channel_count; dup_check++) + { + if (hdd_ctxt->unsafe_channel_list[dup_check] == channel_loop) + { + /* This channel is duplicated */ + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s : found duplicated channel %d", + __func__, channel_loop); + break; + } + } + if (dup_check == hdd_ctxt->unsafe_channel_count) + { + hdd_ctxt->unsafe_channel_list[hdd_ctxt->unsafe_channel_count++] = channel_loop; + } + else + { + /* DUP, do nothing */ + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s : duplicated channel %d", + __func__, channel_loop); + } + } + } + } + + cnss_set_wlan_unsafe_channel(hdd_ctxt->unsafe_channel_list, hdd_ctxt->unsafe_channel_count); + + if (hdd_ctxt->unsafe_channel_count) { + hostapd_adapter = hdd_get_adapter(hdd_ctxt, WLAN_HDD_SOFTAP); + if (hostapd_adapter) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s : Current operation channel %d, sessionCtx.ap.sapConfig.channel %d", + __func__, + hostapd_adapter->sessionCtx.ap.operatingChannel, + hostapd_adapter->sessionCtx.ap.sapConfig.channel); + for (channel_loop = 0; channel_loop < hdd_ctxt->unsafe_channel_count; channel_loop++) + { + if (((hdd_ctxt->unsafe_channel_list[channel_loop] == + hostapd_adapter->sessionCtx.ap.operatingChannel)) && + (AUTO_CHANNEL_SELECT == hostapd_adapter->sessionCtx.ap.sapConfig.channel) && + !restart_sap_in_progress) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s: Restarting SAP", __func__); + restart_sap_in_progress = 1; + /* current operating channel is un-safe channel, restart driver */ + hdd_hostapd_stop(hostapd_adapter->dev); + break; + } + } + } + } + return; +} +#endif /* FEATURE_WLAN_CH_AVOID */ + //Register the module init/exit functions module_init(hdd_module_init); module_exit(hdd_module_exit); diff --git a/CORE/HDD/src/wlan_hdd_mib.c b/CORE/HDD/src/wlan_hdd_mib.c index 16850000a5ec..0ba779319172 100644 --- a/CORE/HDD/src/wlan_hdd_mib.c +++ b/CORE/HDD/src/wlan_hdd_mib.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #include "wlan_hdd_includes.h" diff --git a/CORE/HDD/src/wlan_hdd_oemdata.c b/CORE/HDD/src/wlan_hdd_oemdata.c index 2279a87c9e39..ea587a5e42ae 100644 --- a/CORE/HDD/src/wlan_hdd_oemdata.c +++ b/CORE/HDD/src/wlan_hdd_oemdata.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifdef FEATURE_OEM_DATA_SUPPORT /*================================================================================ @@ -34,8 +33,6 @@ $Id: wlan_hdd_oemdata.c,v 1.34 2010/04/15 01:49:23 -- VINAY - Copyright (C) Qualcomm Technologies, Inc. - ================================================================================*/ #include @@ -274,6 +271,8 @@ int iw_get_oem_data_cap( hdd_context_t *pHddContext; hdd_config_t *pConfig; + ENTER(); + if (!pAdapter) { VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, @@ -337,6 +336,7 @@ int iw_get_oem_data_cap( sizeof(struct iw_oem_data_cap)); } while(0); + EXIT(); return status; } @@ -521,7 +521,7 @@ void send_oem_data_rsp_msg(int length, tANI_U8 *oemDataRsp) return; } - skb = alloc_skb(NLMSG_SPACE(sizeof(struct nlmsghdr) + OEM_DATA_RSP_SIZE), + skb = alloc_skb(NLMSG_SPACE(sizeof(tAniMsgHdr) + OEM_DATA_RSP_SIZE), GFP_KERNEL); if (skb == NULL) { @@ -585,7 +585,8 @@ int oem_process_data_req_msg(int oemDataLen, char *oemData) if (!oemData) { - hddLog(LOGE, "in %s oemData is NULL\n", __func__); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: oemData is null", __func__); return eHAL_STATUS_FAILURE; } @@ -593,6 +594,9 @@ int oem_process_data_req_msg(int oemDataLen, char *oemData) vos_mem_copy((&oemDataReqConfig)->oemDataReq, oemData, oemDataLen); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s: calling sme_OemDataReq", __func__); + status = sme_OemDataReq(pHddCtx->hHal, pAdapter->sessionId, &oemDataReqConfig, @@ -635,7 +639,7 @@ int oem_process_channel_info_req_msg(int numOfChannels, char *chanList) return -1; } - skb = alloc_skb(NLMSG_SPACE(sizeof(struct nlmsghdr) + sizeof(tANI_U8) + + skb = alloc_skb(NLMSG_SPACE(sizeof(tAniMsgHdr) + sizeof(tANI_U8) + numOfChannels * sizeof(tSmeChannelInfo)), GFP_KERNEL); if (skb == NULL) { @@ -800,8 +804,8 @@ int oem_msg_callback(struct sk_buff *skb) (0 == strncmp(sign_str, OEM_APP_SIGNATURE_STR, OEM_APP_SIGNATURE_LEN))) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: Received App Req Req from App process pid(%d)", + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + "%s: Valid App Req Req from oem app process pid(%d)", __func__, nlh->nlmsg_pid); pHddCtx->oem_app_registered = TRUE; diff --git a/CORE/HDD/src/wlan_hdd_p2p.c b/CORE/HDD/src/wlan_hdd_p2p.c index ac3c46d8721a..1e4a7deded7a 100644 --- a/CORE/HDD/src/wlan_hdd_p2p.c +++ b/CORE/HDD/src/wlan_hdd_p2p.c @@ -24,18 +24,12 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - - /**======================================================================== \file wlan_hdd_p2p.c \brief WLAN Host Device Driver implementation for P2P commands interface - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ #include @@ -108,8 +102,7 @@ static void hdd_sendMgmtFrameOverMonitorIface( hdd_adapter_t *pMonAdapter, #ifdef QCA_WIFI_2_0 static bool hdd_p2p_is_action_type_rsp( tActionFrmType actionFrmType ) { - if ( actionFrmType <= MAX_P2P_ACTION_FRAME_TYPE && - actionFrmType != WLAN_HDD_GO_NEG_REQ && + if ( actionFrmType != WLAN_HDD_GO_NEG_REQ && actionFrmType != WLAN_HDD_INVITATION_REQ && actionFrmType != WLAN_HDD_DEV_DIS_REQ && actionFrmType != WLAN_HDD_PROV_DIS_REQ ) @@ -737,12 +730,19 @@ int wlan_hdd_action( struct wiphy *wiphy, struct net_device *dev, //and requesting for new one. //The below logic will be extended for request type action frames if //needed in future. - if ( hdd_p2p_is_action_type_rsp(actionFrmType) && - cfgState->remain_on_chan_ctx && - cfgState->current_freq == chan->center_freq ) { - status = wlan_hdd_check_remain_on_channel(pAdapter); - if ( !status ) - pAdapter->internalCancelRemainOnChReq = VOS_TRUE; + if ( (type == SIR_MAC_MGMT_FRAME) && + (subType == SIR_MAC_MGMT_ACTION) && + (buf[WLAN_HDD_PUBLIC_ACTION_FRAME_OFFSET] == + WLAN_HDD_PUBLIC_ACTION_FRAME) ) { + actionFrmType = buf[WLAN_HDD_PUBLIC_ACTION_FRAME_TYPE_OFFSET]; + if ( actionFrmType < MAX_P2P_ACTION_FRAME_TYPE && + hdd_p2p_is_action_type_rsp(actionFrmType) && + cfgState->remain_on_chan_ctx && + cfgState->current_freq == chan->center_freq ) { + status = wlan_hdd_check_remain_on_channel(pAdapter); + if ( !status ) + pAdapter->internalCancelRemainOnChReq = VOS_TRUE; + } } #endif if((cfgState->remain_on_chan_ctx != NULL) && @@ -753,7 +753,7 @@ int wlan_hdd_action( struct wiphy *wiphy, struct net_device *dev, extendedWait = (tANI_U16)wait; goto send_frame; } - remain_on_channel: + INIT_COMPLETION(pAdapter->offchannel_tx_event); status = wlan_hdd_request_remain_on_channel(wiphy, dev, @@ -822,15 +822,7 @@ int wlan_hdd_action( struct wiphy *wiphy, struct net_device *dev, #endif *cookie = (uintptr_t) cfgState->buf; cfgState->action_cookie = *cookie; - /*There is race between expiration of remain on channel - in driver and also sending an action frame in wlan_hdd_action. - As the remain on chan context is NULL here , which means - LIM remain on channel timer expired and - wlan_hdd_remain_on_channel_callback has cleared - cfgState->remain_on_chan_ctx to NULL so let's - do a fresh remain on channel. - */ - goto remain_on_channel; + #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) } #endif diff --git a/CORE/HDD/src/wlan_hdd_scan.c b/CORE/HDD/src/wlan_hdd_scan.c index 20c9f10d992d..6cf756e813b5 100644 --- a/CORE/HDD/src/wlan_hdd_scan.c +++ b/CORE/HDD/src/wlan_hdd_scan.c @@ -24,17 +24,12 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /**======================================================================== \file wlan_hdd_scan.c \brief WLAN Host Device Driver implementation - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ /**========================================================================= diff --git a/CORE/HDD/src/wlan_hdd_softap_tx_rx.c b/CORE/HDD/src/wlan_hdd_softap_tx_rx.c index 14b8e9826d96..a04d129165f7 100644 --- a/CORE/HDD/src/wlan_hdd_softap_tx_rx.c +++ b/CORE/HDD/src/wlan_hdd_softap_tx_rx.c @@ -24,17 +24,11 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - - /**=========================================================================== \file wlan_hdd_softap_tx_rx.c \brief Linux HDD Tx/RX APIs - Copyright 2008 (c) Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary. - ==========================================================================*/ /*--------------------------------------------------------------------------- @@ -1501,13 +1495,12 @@ VOS_STATUS hdd_softap_rx_packet_cbk( v_VOID_t *vosContext, hdd_softap_sta_2_sta_xmit(pSkbCopy, pSkbCopy->dev, pHddApCtx->uBCStaId, (pRxMetaInfo->ucUP)); } + else + { + VOS_TRACE(VOS_MODULE_ID_HDD_SOFTAP, VOS_TRACE_LEVEL_ERROR, + "%s: skb allocation fails", __func__); + } } - else - { - VOS_TRACE(VOS_MODULE_ID_HDD_SOFTAP, VOS_TRACE_LEVEL_ERROR, - "%s: skb allocation fails", __func__); - } - } //(WLAN_RX_BCMC_STA_ID == staId) @@ -1653,6 +1646,10 @@ VOS_STATUS hdd_softap_DeregisterSTA( hdd_adapter_t *pAdapter, tANI_U8 staId ) { VOS_STATUS vosStatus = VOS_STATUS_SUCCESS; hdd_context_t *pHddCtx; +#ifdef QCA_WIFI_2_0 + v_U8_t i; +#endif + if (NULL == pAdapter) { VOS_TRACE(VOS_MODULE_ID_HDD_SOFTAP, VOS_TRACE_LEVEL_ERROR, @@ -1675,7 +1672,7 @@ VOS_STATUS hdd_softap_DeregisterSTA( hdd_adapter_t *pAdapter, tANI_U8 staId ) { VOS_TRACE( VOS_MODULE_ID_HDD_SOFTAP, VOS_TRACE_LEVEL_ERROR, "WLANTL_ClearSTAClient() failed to for staID %d. " - "Status= %d [0x%08lX]", + "Status= %d [0x%08X]", staId, vosStatus, vosStatus ); } @@ -1683,6 +1680,15 @@ VOS_STATUS hdd_softap_DeregisterSTA( hdd_adapter_t *pAdapter, tANI_U8 staId ) if (pAdapter->aStaInfo[staId].isUsed) { spin_lock_bh( &pAdapter->staInfo_lock ); vos_mem_zero(&pAdapter->aStaInfo[staId], sizeof(hdd_station_info_t)); + + /* re-init spin lock, since netdev can still open adapter until + * driver gets unloaded + */ + for (i = 0; i < NUM_TX_QUEUES; i ++) + { + hdd_list_init(&pAdapter->aStaInfo[staId].wmm_tx_queue[i], + HDD_TX_QUEUE_MAX_LEN); + } spin_unlock_bh( &pAdapter->staInfo_lock ); } #else @@ -1691,7 +1697,7 @@ VOS_STATUS hdd_softap_DeregisterSTA( hdd_adapter_t *pAdapter, tANI_U8 staId ) { VOS_TRACE ( VOS_MODULE_ID_HDD_SOFTAP, VOS_TRACE_LEVEL_ERROR, "hdd_softap_deinit_tx_rx_sta() failed for staID %d. " - "Status = %d [0x%08lX]", + "Status = %d [0x%08X]", staId, vosStatus, vosStatus ); return( vosStatus ); } @@ -1801,7 +1807,7 @@ VOS_STATUS hdd_softap_RegisterSTA( hdd_adapter_t *pAdapter, if ( !VOS_IS_STATUS_SUCCESS( vosStatus ) ) { VOS_TRACE( VOS_MODULE_ID_HDD_SOFTAP, VOS_TRACE_LEVEL_ERROR, - "SOFTAP WLANTL_RegisterSTAClient() failed to register. Status= %d [0x%08lX]", + "SOFTAP WLANTL_RegisterSTAClient() failed to register. Status= %d [0x%08X]", vosStatus, vosStatus ); return vosStatus; } diff --git a/CORE/HDD/src/wlan_hdd_tdls.c b/CORE/HDD/src/wlan_hdd_tdls.c index d70444d74c4e..7e9c5e6d2a20 100644 --- a/CORE/HDD/src/wlan_hdd_tdls.c +++ b/CORE/HDD/src/wlan_hdd_tdls.c @@ -24,13 +24,16 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /**======================================================================== \file wlan_hdd_tdls.c \brief WLAN Host Device Driver implementation for TDLS + Copyright (c) 2012-2013 Qualcomm Atheros, Inc. + All Rights Reserved. + Qualcomm Atheros Confidential and Proprietary. + ========================================================================*/ #include @@ -71,8 +74,8 @@ static u8 wlan_hdd_tdls_hash_key (u8 *mac) } #ifdef CONFIG_TDLS_IMPLICIT -static void wlan_hdd_tdls_pre_setup_init_work(tdlsCtx_t * pHddTdlsCtx, - hddTdlsPeer_t *curr_candidate) +void wlan_hdd_tdls_pre_setup_init_work(tdlsCtx_t * pHddTdlsCtx, + hddTdlsPeer_t *curr_candidate) { if (TDLS_CTX_MAGIC != pHddTdlsCtx->magic) { @@ -253,6 +256,7 @@ done: } #endif +#ifndef QCA_WIFI_2_0 static v_VOID_t wlan_hdd_tdls_update_peer_cb( v_PVOID_t userData ) { int i; @@ -407,6 +411,7 @@ next_peer: pHddTdlsCtx->threshold_config.tx_period_t); mutex_unlock(&pHddCtx->tdls_lock); } +#endif static v_VOID_t wlan_hdd_tdls_idle_cb( v_PVOID_t userData ) { @@ -585,15 +590,32 @@ int wlan_hdd_tdls_init(hdd_adapter_t *pAdapter) tdlsCtx_t *pHddTdlsCtx; int i; v_U8_t staIdx; +#ifdef QCA_WIFI_2_0 + tdlsInfo_t *tInfo; + eHalStatus halStatus = eHAL_STATUS_FAILURE; +#endif - if ((FALSE == pHddCtx->cfg_ini->fEnableTDLSSupport) || - (FALSE == sme_IsFeatureSupportedByFW(TDLS))) + /* QCA 2.0 Discrete ANDs feature capability in cfg_ini with that + * received from target, so cfg_ini gives combined intersected result + */ + if ((FALSE == pHddCtx->cfg_ini->fEnableTDLSSupport) +#ifndef QCA_WIFI_2_0 + || (FALSE == sme_IsFeatureSupportedByFW(TDLS)) +#endif + ) { pHddCtx->tdls_mode = eTDLS_SUPPORT_NOT_ENABLED; pAdapter->sessionCtx.station.pHddTdlsCtx = NULL; - hddLog(VOS_TRACE_LEVEL_ERROR, "%s TDLS not enabled (%d) or FW doesn't support (%d)!", - __func__, pHddCtx->cfg_ini->fEnableTDLSSupport, - sme_IsFeatureSupportedByFW(TDLS)); +#ifndef QCA_WIFI_2_0 + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s TDLS not enabled (%d) or FW doesn't support (%d)", + __func__, pHddCtx->cfg_ini->fEnableTDLSSupport, + sme_IsFeatureSupportedByFW(TDLS)); +#else + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s TDLS not enabled (%d) or FW doesn't support", + __func__, pHddCtx->cfg_ini->fEnableTDLSSupport); +#endif return 0; } /* TDLS is supported only in STA / P2P Client modes, @@ -634,10 +656,12 @@ int wlan_hdd_tdls_init(hdd_adapter_t *pAdapter) pHddTdlsCtx); #endif +#ifndef QCA_WIFI_2_0 vos_timer_init(&pHddTdlsCtx->peerUpdateTimer, VOS_TIMER_TYPE_SW, wlan_hdd_tdls_update_peer_cb, pHddTdlsCtx); +#endif vos_timer_init(&pHddTdlsCtx->peerDiscoveryTimeoutTimer, VOS_TIMER_TYPE_SW, wlan_hdd_tdls_discovery_timeout_peer_cb, @@ -686,6 +710,9 @@ int wlan_hdd_tdls_init(hdd_adapter_t *pAdapter) pHddTdlsCtx->threshold_config.rssi_hysteresis = pHddCtx->cfg_ini->fTDLSRSSIHysteresis; pHddTdlsCtx->threshold_config.rssi_trigger_threshold = pHddCtx->cfg_ini->fTDLSRSSITriggerThreshold; pHddTdlsCtx->threshold_config.rssi_teardown_threshold = pHddCtx->cfg_ini->fTDLSRSSITeardownThreshold; +#ifdef QCA_WIFI_2_0 + pHddTdlsCtx->threshold_config.rssi_delta = pHddCtx->cfg_ini->fTDLSRSSIDelta; +#endif if (FALSE == pHddCtx->cfg_ini->fEnableTDLSImplicitTrigger) { @@ -696,9 +723,58 @@ int wlan_hdd_tdls_init(hdd_adapter_t *pAdapter) { pHddCtx->tdls_mode = eTDLS_SUPPORT_ENABLED; } +#ifdef CONFIG_TDLS_IMPLICIT INIT_WORK(&pHddTdlsCtx->implicit_setup, wlan_hdd_tdls_pre_setup); +#endif INIT_DELAYED_WORK(&pHddCtx->tdls_scan_ctxt.tdls_scan_work, wlan_hdd_tdls_schedule_scan); +#ifdef QCA_WIFI_2_0 + tInfo = vos_mem_malloc(sizeof(tdlsInfo_t)); + if (NULL == tInfo) + { + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s: vos_mem_alloc failed for tInfo", __func__); + return -1; + } + + tInfo->vdev_id = pAdapter->sessionId; + tInfo->tdls_state = pHddCtx->tdls_mode; + tInfo->notification_interval_ms = pHddTdlsCtx->threshold_config.tx_period_t; + tInfo->tx_discovery_threshold = pHddTdlsCtx->threshold_config.tx_packet_n; + tInfo->tx_teardown_threshold = pHddTdlsCtx->threshold_config.idle_packet_n; + tInfo->rssi_teardown_threshold = + pHddTdlsCtx->threshold_config.rssi_teardown_threshold; + tInfo->rssi_delta = pHddTdlsCtx->threshold_config.rssi_delta; + tInfo->tdls_options = 0; /* TBD */ + + VOS_TRACE(VOS_MODULE_ID_HDD, TDLS_LOG_LEVEL, + "%s: Setting tdls state and param in fw: " + "vdev_id: %d, " + "tdls_state: %d, " + "notification_interval_ms: %d, " + "tx_discovery_threshold: %d, " + "tx_teardown_threshold: %d, " + "rssi_teardown_threshold: %d, " + "rssi_delta: %d, " + "tdls_options: 0x%x ", + __func__, + tInfo->vdev_id, + tInfo->tdls_state, + tInfo->notification_interval_ms, + tInfo->tx_discovery_threshold, + tInfo->tx_teardown_threshold, + tInfo->rssi_teardown_threshold, + tInfo->rssi_delta, + tInfo->tdls_options); + + halStatus = sme_UpdateFwTdlsState(pHddCtx->hHal, tInfo); + if (eHAL_STATUS_SUCCESS != halStatus) + { + vos_mem_free(tInfo); + return -1; + } +#endif + return 0; } @@ -706,6 +782,10 @@ void wlan_hdd_tdls_exit(hdd_adapter_t *pAdapter) { tdlsCtx_t *pHddTdlsCtx; hdd_context_t *pHddCtx; +#ifdef QCA_WIFI_2_0 + tdlsInfo_t *tInfo; + eHalStatus halStatus = eHAL_STATUS_FAILURE; +#endif /* * NOTE: The Callers of this function should ensure to acquire the @@ -736,6 +816,55 @@ void wlan_hdd_tdls_exit(hdd_adapter_t *pAdapter) wlan_hdd_tdls_free_scan_request(&pHddCtx->tdls_scan_ctxt); +#ifdef QCA_WIFI_2_0 + tInfo = vos_mem_malloc(sizeof(tdlsInfo_t)); + if (NULL != tInfo) + { + tInfo->vdev_id = pAdapter->sessionId; + tInfo->tdls_state = eTDLS_SUPPORT_DISABLED; + tInfo->notification_interval_ms = + pHddTdlsCtx->threshold_config.tx_period_t; + tInfo->tx_discovery_threshold = + pHddTdlsCtx->threshold_config.tx_packet_n; + tInfo->tx_teardown_threshold = pHddTdlsCtx->threshold_config.idle_packet_n; + tInfo->rssi_teardown_threshold = + pHddTdlsCtx->threshold_config.rssi_teardown_threshold; + tInfo->rssi_delta = pHddTdlsCtx->threshold_config.rssi_delta; + tInfo->tdls_options = 0; /* TBD */ + + VOS_TRACE(VOS_MODULE_ID_HDD, TDLS_LOG_LEVEL, + "%s: Setting tdls state and param in fw: " + "vdev_id: %d, " + "tdls_state: %d, " + "notification_interval_ms: %d, " + "tx_discovery_threshold: %d, " + "tx_teardown_threshold: %d, " + "rssi_teardown_threshold: %d, " + "rssi_delta: %d, " + "tdls_options: 0x%x ", + __func__, + tInfo->vdev_id, + tInfo->tdls_state, + tInfo->notification_interval_ms, + tInfo->tx_discovery_threshold, + tInfo->tx_teardown_threshold, + tInfo->rssi_teardown_threshold, + tInfo->rssi_delta, + tInfo->tdls_options); + + halStatus = sme_UpdateFwTdlsState(pHddCtx->hHal, tInfo); + if (eHAL_STATUS_SUCCESS != halStatus) + { + vos_mem_free(tInfo); + } + } + else + { + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s: vos_mem_alloc failed for tInfo", __func__); + } +#endif + vos_mem_free(pHddTdlsCtx); pHddTdlsCtx = NULL; } @@ -746,7 +875,9 @@ static void wlan_hdd_tdls_monitor_timers_stop(tdlsCtx_t *pHddTdlsCtx) #ifdef TDLS_USE_SEPARATE_DISCOVERY_TIMER vos_timer_stop(&pHddTdlsCtx->peerDiscoverTimer); #endif +#ifndef QCA_WIFI_2_0 vos_timer_stop(&pHddTdlsCtx->peerUpdateTimer); +#endif vos_timer_stop(&pHddTdlsCtx->peerDiscoveryTimeoutTimer); } @@ -762,11 +893,13 @@ static void wlan_hdd_tdls_peer_timers_stop(tdlsCtx_t *pHddTdlsCtx) head = &pHddTdlsCtx->peer_list[i]; list_for_each (pos, head) { curr_peer = list_entry (pos, hddTdlsPeer_t, node); +#ifndef QCA_WIFI_2_0 VOS_TRACE( VOS_MODULE_ID_HDD, TDLS_LOG_LEVEL, "%s: " MAC_ADDRESS_STR " -> stop idle timer", __func__, MAC_ADDR_ARRAY(curr_peer->peerMac)); vos_timer_stop ( &curr_peer->peerIdleTimer ); +#endif vos_timer_stop( &curr_peer->initiatorWaitTimeoutTimer ); } } @@ -785,8 +918,10 @@ static void wlan_hdd_tdls_monitor_timers_destroy(tdlsCtx_t *pHddTdlsCtx) vos_timer_stop(&pHddTdlsCtx->peerDiscoverTimer); vos_timer_destroy(&pHddTdlsCtx->peerDiscoverTimer); #endif +#ifndef QCA_WIFI_2_0 vos_timer_stop(&pHddTdlsCtx->peerUpdateTimer); vos_timer_destroy(&pHddTdlsCtx->peerUpdateTimer); +#endif vos_timer_stop(&pHddTdlsCtx->peerDiscoveryTimeoutTimer); vos_timer_destroy(&pHddTdlsCtx->peerDiscoveryTimeoutTimer); } @@ -804,12 +939,14 @@ static void wlan_hdd_tdls_peer_timers_destroy(tdlsCtx_t *pHddTdlsCtx) list_for_each (pos, head) { curr_peer = list_entry (pos, hddTdlsPeer_t, node); +#ifndef QCA_WIFI_2_0 VOS_TRACE( VOS_MODULE_ID_HDD, TDLS_LOG_LEVEL, "%s: " MAC_ADDRESS_STR " -> destroy idle timer", __func__, MAC_ADDR_ARRAY(curr_peer->peerMac)); vos_timer_stop ( &curr_peer->peerIdleTimer ); vos_timer_destroy ( &curr_peer->peerIdleTimer ); +#endif vos_timer_stop(&curr_peer->initiatorWaitTimeoutTimer); vos_timer_destroy(&curr_peer->initiatorWaitTimeoutTimer); } @@ -875,10 +1012,12 @@ hddTdlsPeer_t *wlan_hdd_tdls_get_peer(hdd_adapter_t *pAdapter, u8 *mac) vos_mem_copy(peer->peerMac, mac, sizeof(peer->peerMac)); peer->pHddTdlsCtx = pHddTdlsCtx; +#ifndef QCA_WIFI_2_0 vos_timer_init(&peer->peerIdleTimer, VOS_TIMER_TYPE_SW, wlan_hdd_tdls_idle_cb, peer); +#endif vos_timer_init(&peer->initiatorWaitTimeoutTimer, VOS_TIMER_TYPE_SW, @@ -971,7 +1110,7 @@ int wlan_hdd_tdls_recv_discovery_resp(hdd_adapter_t *pAdapter, u8 *mac) } VOS_TRACE( VOS_MODULE_ID_HDD, TDLS_LOG_LEVEL, - "Discovery(%lu) Response from " MAC_ADDRESS_STR " link_status %d", + "Discovery(%u) Response from " MAC_ADDRESS_STR " link_status %d", pHddTdlsCtx->discovery_sent_cnt, MAC_ADDR_ARRAY(curr_peer->peerMac), curr_peer->link_status); @@ -1131,21 +1270,21 @@ static int wlan_hdd_tdls_check_config(tdls_config_params_t *config) if (config->tx_period_t < CFG_TDLS_TX_STATS_PERIOD_MIN || config->tx_period_t > CFG_TDLS_TX_STATS_PERIOD_MAX) { - hddLog(VOS_TRACE_LEVEL_ERROR, "%s invalid 2nd argument %d. <%d...%d>", __func__, config->tx_period_t, + hddLog(VOS_TRACE_LEVEL_ERROR, "%s invalid 2nd argument %d. <%d...%ld>", __func__, config->tx_period_t, CFG_TDLS_TX_STATS_PERIOD_MIN, CFG_TDLS_TX_STATS_PERIOD_MAX); return -1; } if (config->tx_packet_n < CFG_TDLS_TX_PACKET_THRESHOLD_MIN || config->tx_packet_n > CFG_TDLS_TX_PACKET_THRESHOLD_MAX) { - hddLog(VOS_TRACE_LEVEL_ERROR, "%s invalid 3rd argument %d. <%d...%d>", __func__, config->tx_packet_n, + hddLog(VOS_TRACE_LEVEL_ERROR, "%s invalid 3rd argument %d. <%d...%ld>", __func__, config->tx_packet_n, CFG_TDLS_TX_PACKET_THRESHOLD_MIN, CFG_TDLS_TX_PACKET_THRESHOLD_MAX); return -1; } if (config->discovery_period_t < CFG_TDLS_DISCOVERY_PERIOD_MIN || config->discovery_period_t > CFG_TDLS_DISCOVERY_PERIOD_MAX) { - hddLog(VOS_TRACE_LEVEL_ERROR, "%s invalid 4th argument %d. <%d...%d>", __func__, config->discovery_period_t, + hddLog(VOS_TRACE_LEVEL_ERROR, "%s invalid 4th argument %d. <%d...%ld>", __func__, config->discovery_period_t, CFG_TDLS_DISCOVERY_PERIOD_MIN, CFG_TDLS_DISCOVERY_PERIOD_MAX); return -1; } @@ -1200,6 +1339,10 @@ int wlan_hdd_tdls_set_params(struct net_device *dev, tdls_config_params_t *confi hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX( pAdapter ); tdlsCtx_t *pHddTdlsCtx = WLAN_HDD_GET_TDLS_CTX_PTR(pAdapter); eTDLSSupportMode req_tdls_mode; +#ifdef QCA_WIFI_2_0 + tdlsInfo_t *tdlsParams; + eHalStatus halStatus = eHAL_STATUS_FAILURE; +#endif if (NULL == pHddTdlsCtx) { @@ -1241,6 +1384,52 @@ int wlan_hdd_tdls_set_params(struct net_device *dev, tdls_config_params_t *confi wlan_hdd_tdls_set_mode(pHddCtx, req_tdls_mode, TRUE); +#ifdef QCA_WIFI_2_0 + tdlsParams = vos_mem_malloc(sizeof(tdlsInfo_t)); + if (NULL == tdlsParams) + { + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s: vos_mem_alloc failed for tdlsParams", __func__); + return -1; + } + + tdlsParams->vdev_id = pAdapter->sessionId; + tdlsParams->tdls_state = config->tdls; + tdlsParams->notification_interval_ms = config->tx_period_t; + tdlsParams->tx_discovery_threshold = config->tx_packet_n; + tdlsParams->tx_teardown_threshold = config->idle_packet_n; + tdlsParams->rssi_teardown_threshold = config->rssi_teardown_threshold; + tdlsParams->rssi_delta = config->rssi_delta; + tdlsParams->tdls_options = 0; /* TBD */ + + VOS_TRACE(VOS_MODULE_ID_HDD, TDLS_LOG_LEVEL, + "%s: Setting tdls state and param in fw: " + "vdev_id: %d, " + "tdls_state: %d, " + "notification_interval_ms: %d, " + "tx_discovery_threshold: %d, " + "tx_teardown_threshold: %d, " + "rssi_teardown_threshold: %d, " + "rssi_delta: %d, " + "tdls_options: 0x%x ", + __func__, + tdlsParams->vdev_id, + tdlsParams->tdls_state, + tdlsParams->notification_interval_ms, + tdlsParams->tx_discovery_threshold, + tdlsParams->tx_teardown_threshold, + tdlsParams->rssi_teardown_threshold, + tdlsParams->rssi_delta, + tdlsParams->tdls_options); + + halStatus = sme_UpdateFwTdlsState(pHddCtx->hHal, tdlsParams); + if (eHAL_STATUS_SUCCESS != halStatus) + { + vos_mem_free(tdlsParams); + return -1; + } +#endif + return 0; } @@ -1359,9 +1548,11 @@ int wlan_hdd_tdls_reset_peer(hdd_adapter_t *pAdapter, u8 *mac) curr_peer->link_status = eTDLS_LINK_IDLE; curr_peer->staId = 0; +#ifndef QCA_WIFI_2_0 if(eTDLS_SUPPORT_ENABLED == pHddCtx->tdls_mode) { vos_timer_stop( &curr_peer->peerIdleTimer ); } +#endif return 0; } @@ -1532,9 +1723,11 @@ void wlan_hdd_tdls_connection_callback(hdd_adapter_t *pAdapter) &pHddTdlsCtx->peerDiscoverTimer, pHddTdlsCtx->threshold_config.discovery_period_t); #endif +#ifndef QCA_WIFI_2_0 wlan_hdd_tdls_timer_restart(pHddTdlsCtx->pAdapter, &pHddTdlsCtx->peerUpdateTimer, pHddTdlsCtx->threshold_config.tx_period_t); +#endif } mutex_unlock(&pHddCtx->tdls_lock); @@ -1800,9 +1993,11 @@ static void wlan_hdd_tdls_implicit_enable(tdlsCtx_t *pHddTdlsCtx) &pHddTdlsCtx->peerDiscoverTimer, pHddTdlsCtx->threshold_config.discovery_period_t); #endif +#ifndef QCA_WIFI_2_0 wlan_hdd_tdls_timer_restart(pHddTdlsCtx->pAdapter, &pHddTdlsCtx->peerUpdateTimer, pHddTdlsCtx->threshold_config.tx_period_t); +#endif } void wlan_hdd_tdls_set_mode(hdd_context_t *pHddCtx, @@ -1873,20 +2068,36 @@ static void wlan_hdd_tdls_pre_setup(struct work_struct *work) int status; if (NULL == pHddTdlsCtx) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: pHddTdlsCtx is null", __func__); return; + } if (unlikely(TDLS_CTX_MAGIC != pHddTdlsCtx->magic)) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: pHddTdlsCtx->magic (%x) is not TDLS_CTX_MAGIC", __func__, pHddTdlsCtx->magic); return; + } pHddCtx = WLAN_HDD_GET_CTX(pHddTdlsCtx->pAdapter); if (NULL == pHddCtx) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: pHddCtx is null", __func__); return; + } curr_peer = pHddTdlsCtx->curr_candidate; if (NULL == curr_peer) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: curr_peer is null", __func__); return; + } /* * If Powersave Offload is enabled * Fw will take care incase of concurrency @@ -1912,6 +2123,10 @@ static void wlan_hdd_tdls_pre_setup(struct work_struct *work) if (eTDLS_CAP_UNKNOWN != curr_peer->tdls_support) curr_peer->link_status = eTDLS_LINK_DISCOVERING; +#ifdef QCA_WIFI_2_0 + curr_peer->link_status = eTDLS_LINK_DISCOVERING; +#endif + status = wlan_hdd_cfg80211_send_tdls_discover_req(pHddTdlsCtx->pAdapter->wdev.wiphy, pHddTdlsCtx->pAdapter->dev, curr_peer->peerMac); @@ -1937,7 +2152,7 @@ static void wlan_hdd_tdls_pre_setup(struct work_struct *work) wlan_hdd_tdls_check_power_save_prohibited(pHddTdlsCtx->pAdapter); mutex_unlock(&pHddCtx->tdls_lock); - VOS_TRACE( VOS_MODULE_ID_HDD, TDLS_LOG_LEVEL, "%s: discovery count %lu timeout %lu msec", + VOS_TRACE( VOS_MODULE_ID_HDD, TDLS_LOG_LEVEL, "%s: discovery count %u timeout %u msec", __func__, pHddTdlsCtx->discovery_sent_cnt, pHddTdlsCtx->threshold_config.tx_period_t - TDLS_DISCOVERY_TIMEOUT_BEFORE_UPDATE); diff --git a/CORE/HDD/src/wlan_hdd_tx_rx.c b/CORE/HDD/src/wlan_hdd_tx_rx.c index 92c578c29685..057d619dc211 100644 --- a/CORE/HDD/src/wlan_hdd_tx_rx.c +++ b/CORE/HDD/src/wlan_hdd_tx_rx.c @@ -24,16 +24,11 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /**=========================================================================== \file wlan_hdd_tx_rx.c \brief Linux HDD Tx/RX APIs - Copyright 2008 (c) Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary. - ==========================================================================*/ /*--------------------------------------------------------------------------- @@ -1983,6 +1978,7 @@ VOS_STATUS hdd_rx_packet_cbk(v_VOID_t *vosContext, } #ifdef FEATURE_WLAN_TDLS +#ifndef QCA_WIFI_2_0 if ((eTDLS_SUPPORT_ENABLED == pHddCtx->tdls_mode) && 0 != pHddCtx->connected_peer_count) { @@ -2011,6 +2007,7 @@ VOS_STATUS hdd_rx_packet_cbk(v_VOID_t *vosContext, "rx packet sa is bssid, not adding to peer list"); } } +#endif /* QCA_WIFI_2_0 */ #endif skb->dev = pAdapter->dev; diff --git a/CORE/HDD/src/wlan_hdd_wext.c b/CORE/HDD/src/wlan_hdd_wext.c index 9f895d2a6c61..ffbdc551fedb 100644 --- a/CORE/HDD/src/wlan_hdd_wext.c +++ b/CORE/HDD/src/wlan_hdd_wext.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /** ------------------------------------------------------------------------ * ------------------------------------------------------------------------ * @@ -288,9 +287,6 @@ static const hdd_freq_chan_map_t freq_chan_map[] = { {2412, 1}, {2417, 2}, #define WE_GET_11W_INFO 9 #endif #define WE_GET_STATES 10 -#ifdef FEATURE_CESIUM_PROPRIETARY -#define WE_GET_IBSS_STA_INFO 11 -#endif #ifdef QCA_WIFI_2_0 #define WE_GET_PHYMODE 12 #endif @@ -306,9 +302,6 @@ static const hdd_freq_chan_map_t freq_chan_map[] = { {2412, 1}, {2417, 2}, #define WE_DISPLAY_DXE_SNAP_SHOT 7 #define WE_SET_REASSOC_TRIGGER 8 #define WE_DISPLAY_DATAPATH_SNAP_SHOT 9 -#ifdef FEATURE_CESIUM_PROPRIETARY -#define WE_IBSS_GET_PEER_INFO_ALL 10 -#endif #ifdef QCA_WIFI_2_0 #define WE_DUMP_AGC_START 11 #define WE_DUMP_AGC 12 @@ -332,12 +325,13 @@ static const hdd_freq_chan_map_t freq_chan_map[] = { {2412, 1}, {2417, 2}, #ifdef FEATURE_WLAN_TDLS #define WE_TDLS_CONFIG_PARAMS 5 #endif -#ifdef FEATURE_CESIUM_PROPRIETARY -#define WE_IBSS_GET_PEER_INFO 6 -#endif #ifdef FEATURE_WLAN_TDLS #undef MAX_VAR_ARGS +#ifdef QCA_WIFI_2_0 +#define MAX_VAR_ARGS 11 +#else #define MAX_VAR_ARGS 10 +#endif #else #define MAX_VAR_ARGS 7 #endif @@ -528,161 +522,6 @@ void hdd_wlan_get_version(hdd_adapter_t *pAdapter, union iwreq_data *wrqu, return; } -#ifdef FEATURE_CESIUM_PROPRIETARY -void hdd_get_ibss_peer_info_cb(v_VOID_t *pUserData, v_VOID_t *pPeerInfoRsp) -{ - hdd_adapter_t *pAdapter = (hdd_adapter_t *)pUserData; - hdd_ibss_peer_info_t *pPeerInfo = (hdd_ibss_peer_info_t *)pPeerInfoRsp; - hdd_station_ctx_t *pStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); - v_U8_t i; - - if (NULL != pPeerInfo && eHAL_STATUS_SUCCESS == pPeerInfo->status) - { - pStaCtx->ibss_peer_info.status = pPeerInfo->status; - pStaCtx->ibss_peer_info.numIBSSPeers = pPeerInfo->numIBSSPeers; - for (i = 0; i < pPeerInfo->numIBSSPeers; i++) - { - memcpy(&pStaCtx->ibss_peer_info.ibssPeerList[i], - &pPeerInfo->ibssPeerList[i], sizeof(hdd_ibss_peer_info_params_t)); - } - } - else - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s] PEER_INFO_CMD_STATUS is not SUCCESS\n", __func__); - } - - complete(&pAdapter->ibss_peer_info_comp); -} - -v_MACADDR_t* hdd_wlan_get_ibss_mac_addr_from_staid(hdd_adapter_t *pAdapter, v_U8_t staIdx) -{ - v_U8_t idx; - hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); - - for ( idx = 0; idx < HDD_MAX_NUM_IBSS_STA; idx++ ) - { - if ( 0 != pHddStaCtx->conn_info.staId[ idx ] && - staIdx == pHddStaCtx->conn_info.staId[ idx ]) - { - return (&pHddStaCtx->conn_info.peerMacAddress[ idx ]); - } - } - return NULL; -} - -eHalStatus hdd_wlan_get_ibss_peer_info(hdd_adapter_t *pAdapter, v_U8_t staIdx) -{ - eHalStatus status = eHAL_STATUS_FAILURE; - tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(pAdapter); - hdd_station_ctx_t *pStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); - hdd_ibss_peer_info_t *pPeerInfo = &pStaCtx->ibss_peer_info; - - status = sme_RequestIBSSPeerInfo(hHal, pAdapter, hdd_get_ibss_peer_info_cb, - VOS_FALSE, staIdx); - - INIT_COMPLETION(pAdapter->ibss_peer_info_comp); - - if (eHAL_STATUS_SUCCESS == status) - { - status = wait_for_completion_interruptible_timeout - (&pAdapter->ibss_peer_info_comp, - msecs_to_jiffies(IBSS_PEER_INFO_REQ_TIMOEUT)); - if(!status) - { - hddLog(VOS_TRACE_LEVEL_WARN, "%s: Warning: IBSS_PEER_INFO_TIMEOUT", - __func__); - return status; - } - - /** Print the peer info */ - pr_info("pPeerInfo->numIBSSPeers = %d ", pPeerInfo->numIBSSPeers); - pr_info("============================================================"); - { - v_MACADDR_t *macAddr = hdd_wlan_get_ibss_mac_addr_from_staid(pAdapter, - staIdx); - v_U32_t txRateMbps = ((pPeerInfo->ibssPeerList[0].txRate)*500*1000)/1000000; - - if (NULL != macAddr) - { - pr_info("PEER ADDR :" MAC_ADDRESS_STR " TxRate: %d Mbps RSSI: %d", - MAC_ADDR_ARRAY(macAddr->bytes), - (int)txRateMbps, (int)pPeerInfo->ibssPeerList[0].rssi); - } - else - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - " ERROR: PEER MAC ADDRESS NOT FOUND "); - } - } - } - else - { - hddLog(VOS_TRACE_LEVEL_WARN, - "%s: Warning: sme_RequestIBSSPeerInfo Request failed", __func__); - } - - return status; -} - -eHalStatus hdd_wlan_get_ibss_peer_info_all(hdd_adapter_t *pAdapter) -{ - eHalStatus status = eHAL_STATUS_FAILURE; - tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(pAdapter); - hdd_station_ctx_t *pStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); - hdd_ibss_peer_info_t *pPeerInfo = &pStaCtx->ibss_peer_info; - int i; - - status = sme_RequestIBSSPeerInfo(hHal, pAdapter, hdd_get_ibss_peer_info_cb, - VOS_TRUE, 0xFF); - INIT_COMPLETION(pAdapter->ibss_peer_info_comp); - - if (eHAL_STATUS_SUCCESS == status) - { - status = wait_for_completion_interruptible_timeout - (&pAdapter->ibss_peer_info_comp, - msecs_to_jiffies(IBSS_PEER_INFO_REQ_TIMOEUT)); - if(!status) - { - hddLog(VOS_TRACE_LEVEL_WARN, "%s: Warning: IBSS_PEER_INFO_TIMEOUT", - __func__); - return status; - } - - /** Print the peer info */ - pr_info("pPeerInfo->numIBSSPeers = %d ", (int)pPeerInfo->numIBSSPeers); - pr_info("============================================================"); - for (i = 0; i < pPeerInfo->numIBSSPeers; i++) - { - v_U8_t staIdx = pPeerInfo->ibssPeerList[i].staIdx; - v_MACADDR_t *macAddr = hdd_wlan_get_ibss_mac_addr_from_staid(pAdapter, - staIdx); - v_U32_t txRateMbps = ((pPeerInfo->ibssPeerList[0].txRate)*500*1000)/1000000; - - pr_info("STAIDX:%d ", (int)pPeerInfo->ibssPeerList[i].staIdx); - if (NULL != macAddr) - { - pr_info(" PEER ADDR :" MAC_ADDRESS_STR " TxRate: %d Mbps RSSI: %d", - MAC_ADDR_ARRAY(macAddr->bytes), - (int)txRateMbps, (int)pPeerInfo->ibssPeerList[i].rssi); - } - else - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - " ERROR: PEER MAC ADDRESS NOT FOUND "); - } - } - } - else - { - hddLog(VOS_TRACE_LEVEL_WARN, - "%s: Warning: sme_RequestIBSSPeerInfo Request failed", __func__); - } - - return status; -} -#endif /* FEATURE_CESIUM_PROPRIETARY */ - int hdd_wlan_get_rts_threshold(hdd_adapter_t *pAdapter, union iwreq_data *wrqu) { tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(pAdapter); @@ -704,7 +543,7 @@ int hdd_wlan_get_rts_threshold(hdd_adapter_t *pAdapter, union iwreq_data *wrqu) wrqu->rts.value = threshold; VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - ("Rts-Threshold=%ld!!\n"), wrqu->rts.value); + ("Rts-Threshold=%d!!\n"), wrqu->rts.value); EXIT(); @@ -732,7 +571,7 @@ int hdd_wlan_get_frag_threshold(hdd_adapter_t *pAdapter, union iwreq_data *wrqu) wrqu->frag.value = threshold; VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - ("Frag-Threshold=%ld!!\n"), wrqu->frag.value); + ("Frag-Threshold=%d!!\n"), wrqu->frag.value); EXIT(); @@ -2308,7 +2147,7 @@ static int iw_get_range(struct net_device *dev, struct iw_request_info *info, WNI_CFG_DOT11_MODE, &active_phy_mode) == eHAL_STATUS_SUCCESS) { VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "active_phy_mode = %ld", active_phy_mode); + "active_phy_mode = %d", active_phy_mode); if (active_phy_mode == WNI_CFG_DOT11_MODE_11A || active_phy_mode == WNI_CFG_DOT11_MODE_11G) { @@ -3894,7 +3733,7 @@ static int iw_set_retry(struct net_device *dev, struct iw_request_info *info, if(wrqu->retry.value < WNI_CFG_LONG_RETRY_LIMIT_STAMIN || wrqu->retry.value > WNI_CFG_LONG_RETRY_LIMIT_STAMAX) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, ("Invalid Retry-Limit=%ld!!\n"),wrqu->retry.value); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, ("Invalid Retry-Limit=%d!!\n"),wrqu->retry.value); return -EINVAL; } @@ -3921,7 +3760,7 @@ static int iw_set_retry(struct net_device *dev, struct iw_request_info *info, return -EOPNOTSUPP; } - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, ("Set Retry-Limit=%ld!!\n"),wrqu->retry.value); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, ("Set Retry-Limit=%d!!\n"),wrqu->retry.value); EXIT(); @@ -3971,7 +3810,7 @@ static int iw_get_retry(struct net_device *dev, struct iw_request_info *info, return -EOPNOTSUPP; } - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, ("Retry-Limit=%ld!!\n"),retry); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, ("Retry-Limit=%d!!\n"),retry); EXIT(); @@ -4300,7 +4139,7 @@ static int iw_setint_getnone(struct net_device *dev, struct iw_request_info *inf smeConfig.csrConfig.Is11dSupportEnabled = (v_BOOL_t)set_value; VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - ("11D state=%ld!!\n"), + ("11D state=%d!!\n"), smeConfig.csrConfig.Is11dSupportEnabled); sme_UpdateConfig(hHal, &smeConfig); @@ -4928,7 +4767,8 @@ static int iw_setint_getnone(struct net_device *dev, struct iw_request_info *inf rix = RC_2_RATE_IDX(set_value); if (set_value & 0x10) { preamble = WMI_RATE_PREAMBLE_CCK; - rix |= 0x4; /* Enable Short preamble always for CCK */ + if(rix != 0x3) + rix |= 0x4; /* Enable Short preamble always for CCK except 1mbps*/ } else preamble = WMI_RATE_PREAMBLE_OFDM; } @@ -5340,7 +5180,7 @@ static int iw_setnone_getint(struct net_device *dev, struct iw_request_info *inf *value = smeConfig.csrConfig.Is11dSupportEnabled; - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, ("11D state=%ld!!\n"),*value); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, ("11D state=%d!!\n"),*value); break; } @@ -5352,7 +5192,7 @@ static int iw_setnone_getint(struct net_device *dev, struct iw_request_info *inf case WE_PMC_STATE: { *value = pmcGetPmcState(hHal); - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, ("PMC state=%ld!!\n"),*value); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, ("PMC state=%d!!\n"),*value); break; } case WE_GET_WLAN_DBG: @@ -6055,37 +5895,6 @@ static int iw_get_char_setnone(struct net_device *dev, struct iw_request_info *i break; } #endif -#ifdef FEATURE_CESIUM_PROPRIETARY - case WE_GET_IBSS_STA_INFO: - { - hdd_station_ctx_t *pHddStaCtx = - WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); - int idx = 0; - int length = 0, buf = 0; - - for (idx = 0; idx < HDD_MAX_NUM_IBSS_STA; idx++) - { - if (0 != pHddStaCtx->conn_info.staId[ idx ]) - { - buf = snprintf - ( - (extra + length), WE_MAX_STR_LEN - length, - "\n%d .%02x:%02x:%02x:%02x:%02x:%02x\n", - pHddStaCtx->conn_info.staId[ idx ], - pHddStaCtx->conn_info.peerMacAddress[idx].bytes[0], - pHddStaCtx->conn_info.peerMacAddress[idx].bytes[1], - pHddStaCtx->conn_info.peerMacAddress[idx].bytes[2], - pHddStaCtx->conn_info.peerMacAddress[idx].bytes[3], - pHddStaCtx->conn_info.peerMacAddress[idx].bytes[4], - pHddStaCtx->conn_info.peerMacAddress[idx].bytes[5] - ); - length += buf; - } - } - wrqu->data.length = strlen(extra)+1; - break; - } -#endif #ifdef QCA_WIFI_2_0 case WE_GET_PHYMODE: { @@ -6218,13 +6027,6 @@ static int iw_setnone_getnone(struct net_device *dev, struct iw_request_info *in wlan_hdd_get_intf_addr( WLAN_HDD_GET_CTX(pAdapter) ),TRUE); break; } -#ifdef FEATURE_CESIUM_PROPRIETARY - case WE_IBSS_GET_PEER_INFO_ALL: - { - hdd_wlan_get_ibss_peer_info_all(pAdapter); - break; - } -#endif case WE_STOP_AP: { /*FIX ME: Need to be revisited if multiple SAPs to be supported */ @@ -6488,7 +6290,7 @@ void hdd_wmm_tx_snapshot(hdd_adapter_t *pAdapter) for ( i=0; i< NUM_TX_QUEUES; i++) { spin_lock_bh(&pAdapter->wmm_tx_queue[i].lock); - hddLog(LOGE, "HDD WMM TxQueue Info For AC: %d Count: %d PrevAdress:0x%x, NextAddress:0x%x", + hddLog(LOGE, "HDD WMM TxQueue Info For AC: %d Count: %d PrevAdress:%p, NextAddress:%p", i, pAdapter->wmm_tx_queue[i].count, pAdapter->wmm_tx_queue[i].anchor.prev, pAdapter->wmm_tx_queue[i].anchor.next); spin_unlock_bh(&pAdapter->wmm_tx_queue[i].lock); @@ -6502,7 +6304,7 @@ void hdd_wmm_tx_snapshot(hdd_adapter_t *pAdapter) for ( j=0; j< NUM_TX_QUEUES; j++) { spin_lock_bh(&pAdapter->aStaInfo[i].wmm_tx_queue[j].lock); - hddLog(LOGE, "HDD TxQueue Info For AC: %d Count: %d PrevAdress:0x%x, NextAddress:0x%x", + hddLog(LOGE, "HDD TxQueue Info For AC: %d Count: %d PrevAdress:%p, NextAddress:%p", j, pAdapter->aStaInfo[i].wmm_tx_queue[j].count, pAdapter->aStaInfo[i].wmm_tx_queue[j].anchor.prev, pAdapter->aStaInfo[i].wmm_tx_queue[j].anchor.next); @@ -6576,14 +6378,6 @@ int iw_set_var_ints_getnone(struct net_device *dev, struct iw_request_info *info } break; -#ifdef FEATURE_CESIUM_PROPRIETARY - case WE_IBSS_GET_PEER_INFO: - { - pr_info ( "Station ID = %d\n",apps_args[0]); - hdd_wlan_get_ibss_peer_info(pAdapter, apps_args[0]); - } - break; -#endif case WE_P2P_NOA_CMD: { @@ -6646,6 +6440,9 @@ int iw_set_var_ints_getnone(struct net_device *dev, struct iw_request_info *info tdlsParams.rssi_hysteresis = apps_args[7]; tdlsParams.rssi_trigger_threshold = apps_args[8]; tdlsParams.rssi_teardown_threshold = apps_args[9]; +#ifdef QCA_WIFI_2_0 + tdlsParams.rssi_delta = apps_args[10]; +#endif wlan_hdd_tdls_set_params(dev, &tdlsParams); } @@ -6967,13 +6764,13 @@ static int iw_qcom_set_wapi_assoc_info(struct net_device *dev, struct iw_request hddLog(LOG1, "%s: INPUT DATA:\nElement ID:0x%02x Length:0x%02x Version:0x%04x\n",__func__,pWapiAssocInfo->elementID,pWapiAssocInfo->length,pWapiAssocInfo->version); hddLog(LOG1,"%s: akm Suite Cnt:0x%04x",__func__,pWapiAssocInfo->akmSuiteCount); for(i =0 ; i < 16 ; i++) - hddLog(LOG1,"akm suite[%02d]:0x%08lx",i,pWapiAssocInfo->akmSuite[i]); + hddLog(LOG1,"akm suite[%02d]:0x%08x",i,pWapiAssocInfo->akmSuite[i]); hddLog(LOG1,"%s: Unicast Suite Cnt:0x%04x",__func__,pWapiAssocInfo->unicastSuiteCount); for(i =0 ; i < 16 ; i++) - hddLog(LOG1, "Unicast suite[%02d]:0x%08lx",i,pWapiAssocInfo->unicastSuite[i]); + hddLog(LOG1, "Unicast suite[%02d]:0x%08x",i,pWapiAssocInfo->unicastSuite[i]); - hddLog(LOG1,"%s: Multicast suite:0x%08lx Wapi capa:0x%04x",__func__,pWapiAssocInfo->multicastSuite,pWapiAssocInfo->wapiCability); + hddLog(LOG1,"%s: Multicast suite:0x%08x Wapi capa:0x%04x",__func__,pWapiAssocInfo->multicastSuite,pWapiAssocInfo->wapiCability); hddLog(LOG1, "%s: BKID Cnt:0x%04x\n",__func__,pWapiAssocInfo->bkidCount); for(i = 0 ; i < 16 ; i++) { hddLog(LOG1, "BKID List[%02d].bkid:0x",i); @@ -7126,8 +6923,8 @@ static int iw_qcom_set_wapi_bkid(struct net_device *dev, struct iw_request_info hddLog(LOG1, "%s: Received length %d", __func__, wrqu->data.length); hddLog(LOG1, "%s: Received data %s", __func__, (char*)extra); - hddLog(LOG1,"%s: INPUT DATA:\n BKID Length:0x%08lx\n", __func__,pBkid->length); - hddLog(LOG1,"%s: BKID Cnt:0x%04lx",pBkid->BKIDCount); + hddLog(LOG1,"%s: INPUT DATA:\n BKID Length:0x%08x", __func__,pBkid->length); + hddLog(LOG1,"%s: BKID Cnt:0x%04x", __func__, pBkid->BKIDCount); hddLog(LOG1,"BKID KEY LIST[0]:0x"); @@ -7381,6 +7178,13 @@ static int iw_set_host_offload(struct net_device *dev, struct iw_request_info *i return -EBUSY; } + if (!hdd_connIsConnected(WLAN_HDD_GET_STATION_CTX_PTR(pAdapter))) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, + "%s:LOGP dev is not in CONNECTED state, ignore!!!", __func__); + return -EINVAL; + } + /* Debug display of request components. */ switch (pRequest->offloadType) { @@ -8236,7 +8040,7 @@ VOS_STATUS iw_set_pno(struct net_device *dev, struct iw_request_info *info, } VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "PNO len %d ssid 0x%08lx%08lx%08lx%08lx%08lx%08lx%08lx%08lx" + "PNO len %d ssid 0x%08x%08x%08x%08x%08x%08x%08x%08x" "auth %d encry %d channel count %d offset %d", pnoRequest.aNetworks[i].ssId.length, *((v_U32_t *) &pnoRequest.aNetworks[i].ssId.ssId[0]), @@ -9458,13 +9262,6 @@ static const struct iw_priv_args we_private_args[] = { IW_PRIV_TYPE_CHAR| WE_MAX_STR_LEN, "getPMFInfo" }, #endif -#ifdef FEATURE_CESIUM_PROPRIETARY - { - WE_GET_IBSS_STA_INFO, - 0, - IW_PRIV_TYPE_CHAR| WE_MAX_STR_LEN, - "getIbssSTAs" }, -#endif #ifdef QCA_WIFI_2_0 { WE_GET_PHYMODE, 0, @@ -9487,13 +9284,6 @@ static const struct iw_priv_args we_private_args[] = { 0, 0, "initAP" }, -#ifdef FEATURE_CESIUM_PROPRIETARY - { - WE_IBSS_GET_PEER_INFO_ALL, - 0, - 0, - "ibssPeerInfoAll" }, -#endif { WE_STOP_AP, 0, 0, @@ -9566,12 +9356,6 @@ static const struct iw_priv_args we_private_args[] = { IW_PRIV_TYPE_INT | MAX_VAR_ARGS, 0, "dump" }, -#ifdef FEATURE_CESIUM_PROPRIETARY - { WE_IBSS_GET_PEER_INFO, - IW_PRIV_TYPE_INT | MAX_VAR_ARGS, - 0, - "ibssPeerInfo" }, -#endif /* handlers for sub ioctl */ { WE_MCC_CONFIG_CREDENTIAL, diff --git a/CORE/HDD/src/wlan_hdd_wmm.c b/CORE/HDD/src/wlan_hdd_wmm.c index b0138f08178c..c809e8686ec4 100644 --- a/CORE/HDD/src/wlan_hdd_wmm.c +++ b/CORE/HDD/src/wlan_hdd_wmm.c @@ -45,10 +45,6 @@ The remaining functions are utility functions for information hiding. - - Copyright (c) 2008-9 Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ============================================================================*/ /*--------------------------------------------------------------------------- @@ -232,8 +228,8 @@ static void hdd_wmm_enable_tl_uapsd (hdd_wmm_qos_context_t* pQosContext) pAc->wmmAcIsUapsdEnabled = psb; VOS_TRACE(VOS_MODULE_ID_HDD, WMM_TRACE_LEVEL_INFO, - "%s: Enabled UAPSD in TL srv_int=%ld " - "susp_int=%ld dir=%d AC=%d", + "%s: Enabled UAPSD in TL srv_int=%d " + "susp_int=%d dir=%d AC=%d", __func__, service_interval, suspension_interval, diff --git a/CORE/HDD/src/wlan_hdd_wowl.c b/CORE/HDD/src/wlan_hdd_wowl.c index d5ea3fb00dd5..3ea7f4060bf6 100644 --- a/CORE/HDD/src/wlan_hdd_wowl.c +++ b/CORE/HDD/src/wlan_hdd_wowl.c @@ -24,14 +24,9 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /*============================================================================ * @file wlan_hdd_wowl.c * - * Copyright (c) 2009 Qualcomm Technologies, Inc. - * All Rights Reserved. - * Qualcomm Technologies Confidential and Proprietary - * * ==========================================================================*/ /*---------------------------------------------------------------------------- @@ -80,7 +75,7 @@ static inline int find_ptrn_len(const char* ptrn) static void hdd_wowl_callback( void *pContext, eHalStatus halStatus ) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: Return code = (%ld)\n", __func__, halStatus ); + "%s: Return code = (%d)\n", __func__, halStatus ); } #ifdef WLAN_WAKEUP_EVENTS @@ -264,7 +259,7 @@ v_BOOL_t hdd_add_wowl_ptrn (hdd_adapter_t *pAdapter, const char * ptrn) { // Add failed, so invalidate the local storage VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "sme_WowlAddBcastPattern failed with error code (%ld)", halStatus ); + "sme_WowlAddBcastPattern failed with error code (%d)", halStatus ); kfree(g_hdd_wowl_ptrns[first_empty_slot]); g_hdd_wowl_ptrns[first_empty_slot] = NULL; } @@ -430,7 +425,7 @@ v_BOOL_t hdd_add_wowl_ptrn_debugfs(hdd_adapter_t *pAdapter, v_U8_t pattern_idx, if (!HAL_STATUS_SUCCESS(halStatus)) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: sme_WowlAddBcastPattern failed with error code (%ld).", + "%s: sme_WowlAddBcastPattern failed with error code (%d).", __func__, halStatus); return VOS_FALSE; @@ -489,7 +484,7 @@ v_BOOL_t hdd_del_wowl_ptrn_debugfs(hdd_adapter_t *pAdapter, v_U8_t pattern_idx) if (!HAL_STATUS_SUCCESS(halStatus)) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: sme_WowlDelBcastPattern failed with error code (%ld).", + "%s: sme_WowlDelBcastPattern failed with error code (%d).", __func__, halStatus); return VOS_FALSE; @@ -541,7 +536,7 @@ v_BOOL_t hdd_enter_wowl (hdd_adapter_t *pAdapter, v_BOOL_t enable_mp, v_BOOL_t e { // We failed to enter WoWL VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "sme_EnterWowl failed with error code (%ld)", halStatus ); + "sme_EnterWowl failed with error code (%d)", halStatus ); return VOS_FALSE; } } @@ -566,7 +561,7 @@ v_BOOL_t hdd_exit_wowl (hdd_adapter_t*pAdapter) if ( !HAL_STATUS_SUCCESS( halStatus ) ) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "sme_ExitWowl failed with error code (%ld)", halStatus ); + "sme_ExitWowl failed with error code (%d)", halStatus ); return VOS_FALSE; } diff --git a/CORE/MAC/inc/aniCompiler.h b/CORE/MAC/inc/aniCompiler.h index 699d2086b67a..859942b691c3 100644 --- a/CORE/MAC/inc/aniCompiler.h +++ b/CORE/MAC/inc/aniCompiler.h @@ -24,13 +24,8 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* * Compiler abstraction layer - * - * - * - * Copyright (C) 2005-2006 Airgo Networks, Inc * This file tries to abstract the differences among compilers. * Supported compilers are : * diff --git a/CORE/MAC/inc/aniDbgTest.h b/CORE/MAC/inc/aniDbgTest.h index 9fde8a6255ba..4e08902e1ce2 100644 --- a/CORE/MAC/inc/aniDbgTest.h +++ b/CORE/MAC/inc/aniDbgTest.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef _ANIDBGTEST_H_ #define _ANIDBGTEST_H_ diff --git a/CORE/MAC/inc/aniGlobal.h b/CORE/MAC/inc/aniGlobal.h index 1ce66c551f28..152ca3253eab 100644 --- a/CORE/MAC/inc/aniGlobal.h +++ b/CORE/MAC/inc/aniGlobal.h @@ -24,9 +24,7 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Airgo Networks, Inc proprietary. All rights reserved * aniGlobal.h: MAC Modules Adapter Definitions. * Author: V. K. Kandarpa * Date: 10/25/2002 @@ -90,8 +88,6 @@ typedef struct sAniSirGlobal *tpAniSirGlobal; #endif #include "p2p_Api.h" -#include "limRMC.h" - #if defined WLAN_FEATURE_VOWIFI_11R #include #endif @@ -139,14 +135,6 @@ typedef struct sAniSirGlobal *tpAniSirGlobal; #define SPACE_ASCII_VALUE 32 -#ifdef WLAN_FEATURE_RELIABLE_MCAST -#define WLAN_IP_V4_ADDR_SIZE 4 -/* Multicast IP address in IPv4 ranges from 224.0.0.0 through 239.255.255.255 - (Previous class D) are reserved as multicast IP addresses */ -#define WLAN_IP_V4_MCAST_ADDR_START 224 -#define WLAN_IP_V4_MCAST_ADDR_END 239 -#endif - #ifdef FEATURE_WLAN_BATCH_SCAN #define EQUALS_TO_ASCII_VALUE (61) #endif @@ -986,6 +974,13 @@ typedef struct sMacOpenParameters tDriverType driverType; tANI_U8 maxWoWFilters; tANI_U8 wowEnable; +/* Here olIniInfo is used to store ini + * status of arp offload, ns offload + * and others. Currently 1st bit is used + * for arp off load and 2nd bit for ns + * offload currently, rest bits are unused + */ + tANI_U8 olIniInfo; } tMacOpenParameters; typedef struct sHalMacStartParameters @@ -1065,9 +1060,6 @@ typedef struct sAniSirGlobal v_BOOL_t isTdlsPowerSaveProhibited; #endif tANI_U8 fScanOffload; -#if defined WLAN_FEATURE_RELIABLE_MCAST - tLimRmcContext rmcContext; -#endif /* WLAN_FEATURE_RELIABLE_MCAST */ tANI_U8 isCoalesingInIBSSAllowed; tANI_U8 psOffloadEnabled; @@ -1083,6 +1075,7 @@ typedef struct sAniSirGlobal csrReadyToSuspendCallback readyToSuspendCallback; void *readyToSuspendContext; tANI_U8 lteCoexAntShare; + tANI_U8 beacon_offload; } tAniSirGlobal; diff --git a/CORE/MAC/inc/aniSystemDefs.h b/CORE/MAC/inc/aniSystemDefs.h index adec7414ef10..5c10dcf2e8ba 100644 --- a/CORE/MAC/inc/aniSystemDefs.h +++ b/CORE/MAC/inc/aniSystemDefs.h @@ -24,9 +24,8 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Airgo Networks, Inc proprietary. All rights reserved. + * * This file aniSystemDefs.h contains definitions used by * various ANI entities * Author: Chandra Modumudi diff --git a/CORE/MAC/inc/logDump.h b/CORE/MAC/inc/logDump.h index 24dd26b10955..3e2f503ff227 100644 --- a/CORE/MAC/inc/logDump.h +++ b/CORE/MAC/inc/logDump.h @@ -24,15 +24,10 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* * */ /*============================================================================ -Copyright (c) 2007 Qualcomm Technologies, Inc. -All Rights Reserved. -Qualcomm Technologies Confidential and Proprietary - logDump.h Provides api's for dump commands. diff --git a/CORE/MAC/inc/macInitApi.h b/CORE/MAC/inc/macInitApi.h index e6c1674594cc..8e6a4f4f085b 100644 --- a/CORE/MAC/inc/macInitApi.h +++ b/CORE/MAC/inc/macInitApi.h @@ -24,10 +24,8 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* * - * Airgo Networks, Inc proprietary. All rights reserved. * macInitApi.c - Header file for mac level init functions * Author: Dinesh Upadhyay * Date: 04/23/2007 diff --git a/CORE/MAC/inc/macTrace.h b/CORE/MAC/inc/macTrace.h index 54171a44c730..5ce30a8a026b 100644 --- a/CORE/MAC/inc/macTrace.h +++ b/CORE/MAC/inc/macTrace.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /**========================================================================= * \file macTrace.h @@ -33,10 +32,6 @@ \author Sunit Bhatia - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ diff --git a/CORE/MAC/inc/qwlan_version.h b/CORE/MAC/inc/qwlan_version.h index 447b1d230677..5fc91472d5b6 100644 --- a/CORE/MAC/inc/qwlan_version.h +++ b/CORE/MAC/inc/qwlan_version.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef QWLAN_VERSION_H #define QWLAN_VERSION_H /*=========================================================================== @@ -36,18 +35,14 @@ BRIEF DESCRIPTION: WLAN Host Version file. Build number automaticly updated by build scripts. - - Copyright (c) 2008-2011 Qualcomm Technologies, Inc. - All Right Reserved. - Qualcomm Technologies Confidential and Proprietary ===========================================================================*/ #define QWLAN_VERSION_MAJOR 4 #define QWLAN_VERSION_MINOR 0 #define QWLAN_VERSION_PATCH 0 #define QWLAN_VERSION_EXTRA "" -#define QWLAN_VERSION_BUILD 62 +#define QWLAN_VERSION_BUILD 68 -#define QWLAN_VERSIONSTR "4.0.0.62B" +#define QWLAN_VERSIONSTR "4.0.0.68" #endif /* QWLAN_VERSION_H */ diff --git a/CORE/MAC/inc/sirApi.h b/CORE/MAC/inc/sirApi.h index af1943dc3396..1e612e8f808d 100644 --- a/CORE/MAC/inc/sirApi.h +++ b/CORE/MAC/inc/sirApi.h @@ -24,9 +24,7 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Airgo Networks, Inc proprietary. All rights reserved. * This file sirApi.h contains definitions exported by * Sirius software. * Author: Chandra Modumudi @@ -162,7 +160,7 @@ enum eSirHostMsgTypes enum { SIR_BOOT_MODULE_ID = 1, SIR_HAL_MODULE_ID = 0x10, - SIR_CFG_MODULE_ID, + SIR_CFG_MODULE_ID = 0x12, SIR_LIM_MODULE_ID, SIR_ARQ_MODULE_ID, SIR_SCH_MODULE_ID, @@ -913,14 +911,14 @@ typedef struct sSirSmeScanChanReq #ifndef OEM_DATA_REQ_SIZE #ifdef QCA_WIFI_2_0 -#define OEM_DATA_REQ_SIZE 276 +#define OEM_DATA_REQ_SIZE 280 #else #define OEM_DATA_REQ_SIZE 134 #endif #endif #ifndef OEM_DATA_RSP_SIZE #ifdef QCA_WIFI_2_0 -#define OEM_DATA_RSP_SIZE 1720 +#define OEM_DATA_RSP_SIZE 1724 #else #define OEM_DATA_RSP_SIZE 1968 #endif @@ -2274,16 +2272,6 @@ typedef struct sAniDHCPStopInd } tAniDHCPInd, *tpAniDHCPInd; -#ifdef FEATURE_CESIUM_PROPRIETARY -typedef struct sAniTXFailMonitorInd -{ - tANI_U16 msgType; // message type is same as the request type - tANI_U16 msgLen; // length of the entire request - tANI_U8 tx_fail_count; - void *txFailIndCallback; -} tAniTXFailMonitorInd, *tpAniTXFailMonitorInd; -#endif /* FEATURE_CESIUM_PROPRIETARY */ - typedef struct sAniSummaryStatsInfo { tANI_U32 retry_cnt[4]; //Total number of packets(per AC) that were successfully transmitted with retries @@ -3664,23 +3652,6 @@ typedef struct sSirWlanSetRxpFilters tANI_U8 setMcstBcstFilter; }tSirWlanSetRxpFilters,*tpSirWlanSetRxpFilters; -#ifdef FEATURE_CESIUM_PROPRIETARY - -#define ANI_MAX_IBSS_ROUTE_TABLE_ENTRY 100 - -typedef struct sAniDestIpNextHopMacPair -{ - tANI_U8 destIpv4Addr[VOS_IPV4_ADDR_SIZE]; - tANI_U8 nextHopMacAddr[VOS_MAC_ADDR_SIZE]; -}tAniDestIpNextHopMacPair; - -typedef struct sAniIbssRouteTable -{ - tANI_U16 numEntries; - tAniDestIpNextHopMacPair destIpNextHopPair[1]; -}tAniIbssRouteTable; -#endif /* FEATURE_CESIUM_PROPRIETARY */ - #ifdef FEATURE_WLAN_SCAN_PNO // // PNO Messages @@ -4222,6 +4193,16 @@ typedef struct sSirMgmtTxCompletionInd tANI_U8 sessionId; // Session ID tANI_U32 txCompleteStatus; } tSirMgmtTxCompletionInd, *tpSirMgmtTxCompletionInd; + +#ifdef QCA_WIFI_2_0 +typedef struct sSirTdlsEventNotify +{ + tANI_U8 sessionId; + tSirMacAddr peerMac; + tANI_U16 messageType; + tANI_U32 peer_reason; +} tSirTdlsEventNotify; +#endif #endif /* FEATURE_WLAN_TDLS */ #ifdef FEATURE_WLAN_TDLS_INTERNAL @@ -4620,105 +4601,6 @@ typedef struct sSirDelPeriodicTxPtrn tANI_U32 ucPatternIdBitmap; } tSirDelPeriodicTxPtrn, *tpSirDelPeriodicTxPtrn; -#if defined WLAN_FEATURE_RELIABLE_MCAST - -#define SIR_RMC_NUM_MAX_LEADERS 8 /* HAL_NUM_MAX_LEADERS */ -typedef struct sSirSetRMCReq -{ - tANI_U16 msgType; - tANI_U16 msgLen; - tSirMacAddr mcastTransmitter; -} tSirSetRMCReq, *tpSirSetRMCReq; - -typedef struct sSirRMCInfo -{ - tANI_U32 dialogToken; - tANI_U8 action; - tSirMacAddr mcastLeader; -} tSirRMCInfo, *tpSirRMCInfo; - -typedef struct sSirRmcLeaderSelectInd -{ - tANI_U16 status; - tSirMacAddr mcastTransmitter; - tSirMacAddr mcastGroup; - tSirMacAddr leader[SIR_RMC_NUM_MAX_LEADERS]; -} tSirRmcLeaderSelectInd, *tpSirRmcLeaderSelectInd; - -typedef struct sSirRmcBecomeLeaderInd -{ - tANI_U16 status; - tSirMacAddr mcastTransmitter; - tSirMacAddr mcastGroup; -} tSirRmcBecomeLeaderInd, *tpSirRmcBecomeLeaderInd; - -typedef struct sSirRmcLeaderReq -{ - // Common for all types are requests - tANI_U16 msgType; // message type is same as the request type - tANI_U16 msgLen; // length of the entire request - tANI_U8 cmd; // tLeaderReqCmdType - tSirMacAddr mcastTransmitter; - tSirMacAddr mcastGroup; - tSirMacAddr blacklist[SIR_RMC_NUM_MAX_LEADERS]; -} tSirRmcLeaderReq, *tpSirRmcLeaderReq; - -typedef struct sSirRmcUpdateInd -{ - // Common for all types are requests - tANI_U16 msgType; // message type is same as the request type - tANI_U16 msgLen; // length of the entire request - tANI_U8 indication; // tLbpUpdateIndType - tANI_U8 role; // tLbpRoleType - tSirMacAddr mcastTransmitter; - tSirMacAddr mcastGroup; - tSirMacAddr mcastLeader; - tSirMacAddr leader[SIR_RMC_NUM_MAX_LEADERS]; -} tSirRmcUpdateInd, *tpSirRmcUpdateInd; - -#endif /* WLAN_FEATURE_RELIABLE_MCAST */ - -#ifdef FEATURE_CESIUM_PROPRIETARY -/*--------------------------------------------------------------------------- -* tSirIbssGetPeerInfoReqParams -*--------------------------------------------------------------------------*/ -typedef struct -{ - tANI_BOOLEAN allPeerInfoReqd; // If set, all IBSS peers stats are reported - tANI_U8 staIdx; // If allPeerInfoReqd is not set, only stats - // of peer with staIdx is reported -}tSirIbssGetPeerInfoReqParams, *tpSirIbssGetPeerInfoReqParams; - -/*--------------------------------------------------------------------------- -* tSirIbssGetPeerInfoParams -*--------------------------------------------------------------------------*/ -typedef struct -{ - tANI_U8 staIdx; //StaIdx - tANI_U32 txRate; //Tx Rate - tANI_U32 mcsIndex; //MCS Index - tANI_U32 txRateFlags; //TxRate Flags - tANI_S8 rssi; //RSSI -}tSirIbssPeerInfoParams; - -typedef struct -{ - tANI_U32 status; - tANI_U8 numPeers; - tSirIbssPeerInfoParams peerInfoParams[32]; -}tSirPeerInfoRspParams, *tpSirIbssPeerInfoRspParams; - -/*--------------------------------------------------------------------------- -* tSirIbssGetPeerInfoRspParams -*--------------------------------------------------------------------------*/ -typedef struct -{ - tANI_U16 mesgType; - tANI_U16 mesgLen; - tSirPeerInfoRspParams ibssPeerInfoRspParams; -} tSirIbssGetPeerInfoRspParams, *tpSirIbssGetPeerInfoRspParams; -#endif /* FEATURE_CESIUM_PROPRIETARY */ - #ifdef FEATURE_WLAN_BATCH_SCAN // Set batch scan resposne from FW typedef struct @@ -4730,6 +4612,7 @@ typedef struct // Set batch scan request to FW typedef struct { + tANI_U32 sessionId; tANI_U32 scanFrequency; /* how frequent to do scan - default 30Sec*/ tANI_U32 numberOfScansToBatch; /* number of scans to batch */ tANI_U32 bestNetwork; /* best networks in terms of rssi */ @@ -4837,4 +4720,20 @@ typedef struct sSirRateUpdateInd } tSirRateUpdateInd, *tpSirRateUpdateInd; +#ifdef FEATURE_WLAN_CH_AVOID +#define SIR_CH_AVOID_MAX_RANGE 4 + +typedef struct sSirChAvoidFreqType +{ + tANI_U32 start_freq; + tANI_U32 end_freq; +} tSirChAvoidFreqType; + +typedef struct sSirChAvoidIndType +{ + tANI_U32 avoid_range_count; + tSirChAvoidFreqType avoid_freq_range[SIR_CH_AVOID_MAX_RANGE]; +} tSirChAvoidIndType; +#endif /* FEATURE_WLAN_CH_AVOID */ + #endif /* __SIR_API_H */ diff --git a/CORE/MAC/inc/sirMacPropExts.h b/CORE/MAC/inc/sirMacPropExts.h index 28cdb6f5bf40..c43b49d60a91 100644 --- a/CORE/MAC/inc/sirMacPropExts.h +++ b/CORE/MAC/inc/sirMacPropExts.h @@ -24,10 +24,8 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* * - * Airgo Networks, Inc proprietary. All rights reserved. * This file sirMacPropExts.h contains the MAC protocol * extensions to support ANI feature set. * Author: Chandra Modumudi diff --git a/CORE/MAC/inc/sirMacProtDef.h b/CORE/MAC/inc/sirMacProtDef.h index 76714369dd53..cdbd77fc1aef 100644 --- a/CORE/MAC/inc/sirMacProtDef.h +++ b/CORE/MAC/inc/sirMacProtDef.h @@ -24,9 +24,7 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Airgo Networks, Inc proprietary. All rights reserved. * This file sirMacProtDef.h contains the MAC/PHY protocol * definitions used across various projects. * Author: Chandra Modumudi @@ -2425,18 +2423,6 @@ typedef __ani_attr_pre_packed struct sSirMacVendorSpecificFrameHdr } __ani_attr_packed tSirMacVendorSpecificFrameHdr, *tpSirMacVendorSpecificFrameHdr; #endif -#if defined (WLAN_FEATURE_RELIABLE_MCAST) -typedef __ani_attr_pre_packed struct sSirMacOxygenNetworkFrameHdr -{ - tANI_U8 category; - tANI_U8 Oui[3]; - tANI_U8 MagicCode[6]; - tANI_U8 version; - tANI_U8 actionID; - tANI_U32 dialogToken; -} __ani_attr_packed tSirMacOxygenNetworkFrameHdr, *tpSirMacOxygenNetworkFrameHdr; -#endif /* WLAN_FEATURE_RELIABLE_MCAST */ - typedef __ani_attr_pre_packed struct sSirMacVendorSpecificPublicActionFrameHdr { tANI_U8 category; @@ -2856,27 +2842,25 @@ typedef __ani_attr_pre_packed struct sSirPhy11aHdr #define SIR_MAC_MIN_IE_LEN 2 // Minimum IE length for IE validation -#if defined WLAN_FEATURE_RELIABLE_MCAST - -// Reliable Multicast action codes -#define SIR_MAC_RMC_ENABLE_REQ 0 -#define SIR_MAC_RMC_DISABLE_REQ 1 -#define SIR_MAC_RMC_LEADER_INFORM_SELECTED 2 -#define SIR_MAC_RMC_LEADER_INFORM_CANCELLED 3 - -// Reliable multicast protocol version -#define SIR_MAC_RMC_VER 0x01 - -// Organization Identifier -#define SIR_MAC_RMC_OUI "\x00\x16\x32" -#define SIR_MAC_RMC_OUI_SIZE 3 - -// Magic code for Oxygen network -#define SIR_MAC_OXYGEN_MAGIC_CODE "OXYGEN" -#define SIR_MAC_OXYGEN_MAGIC_CODE_SIZE 6 - -#define SIR_MAC_RMC_MCAST_ADDRESS "\x01\x00\x5E\x00\x02\x0A" - -#endif /* WLAN_FEATURE_RELIABLE_MCAST */ +#define SIR_MAC_VHT_CAP_MAX_MPDU_LEN 0 +#define SIR_MAC_VHT_CAP_SUPP_CH_WIDTH_SET 2 +#define SIR_MAC_VHT_CAP_LDPC_CODING_CAP 4 +#define SIR_MAC_VHT_CAP_SHORTGI_80MHZ 5 +#define SIR_MAC_VHT_CAP_SHORTGI_160_80_80MHZ 6 +#define SIR_MAC_VHT_CAP_TXSTBC 7 +#define SIR_MAC_VHT_CAP_RXSTBC 8 +#define SIR_MAC_VHT_CAP_SU_BEAMFORMER_CAP 11 +#define SIR_MAC_VHT_CAP_SU_BEAMFORMEE_CAP 12 +#define SIR_MAC_VHT_CAP_CSN_BEAMORMER_ANT_SUP 13 +#define SIR_MAC_VHT_CAP_NUM_SOUNDING_DIM 16 +#define SIR_MAC_VHT_CAP_NUM_BEAM_FORMER_CAP 19 +#define SIR_MAC_VHT_CAP_NUM_BEAM_FORMEE_CAP 20 +#define SIR_MAC_VHT_CAP_TXOPPS 21 +#define SIR_MAC_VHT_CAP_HTC_CAP 22 +#define SIR_MAC_VHT_CAP_MAX_AMDU_LEN_EXPO 23 +#define SIR_MAC_VHT_CAP_LINK_ADAPT_CAP 26 +#define SIR_MAC_VHT_CAP_RX_ANTENNA_PATTERN 28 +#define SIR_MAC_VHT_CAP_TX_ANTENNA_PATTERN 29 +#define SIR_MAC_VHT_CAP_RESERVED2 30 #endif /* __MAC_PROT_DEFS_H */ diff --git a/CORE/MAC/inc/sirTypes.h b/CORE/MAC/inc/sirTypes.h index c3b9330e38e1..05c6522f7ac6 100644 --- a/CORE/MAC/inc/sirTypes.h +++ b/CORE/MAC/inc/sirTypes.h @@ -24,10 +24,8 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* * - * Airgo Networks, Inc proprietary. All rights reserved. * This file sirTypes.h contains the common types * * Author: V. K. Kandarpa diff --git a/CORE/MAC/inc/wniApi.h b/CORE/MAC/inc/wniApi.h index d80aba337045..68fa22a30b46 100644 --- a/CORE/MAC/inc/wniApi.h +++ b/CORE/MAC/inc/wniApi.h @@ -24,9 +24,7 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Airgo Networks, Inc proprietary. All rights reserved. * This file wniApi.h contains message definitions exported by * Sirius software modules. * NOTE: See projects/sirius/include/sirApi.h for structure @@ -96,7 +94,7 @@ /// Start of Sirius/Host message types -#define WNI_HOST_MSG_START 0x1400 +#define WNI_HOST_MSG_START 0x1500 enum eWniMsgTypes { @@ -334,6 +332,11 @@ enum eWniMsgTypes eWNI_SME_MGMT_FRM_TX_COMPLETION_IND, eWNI_SME_TDLS_LINK_ESTABLISH_REQ, eWNI_SME_TDLS_LINK_ESTABLISH_RSP, +#ifdef QCA_WIFI_2_0 + eWNI_SME_TDLS_SHOULD_DISCOVER, + eWNI_SME_TDLS_SHOULD_TEARDOWN, + eWNI_SME_TDLS_PEER_DISCONNECTED, +#endif #endif //NOTE: If you are planning to add more mesages, please make sure that //SIR_LIM_ITC_MSG_TYPES_BEGIN is moved appropriately. It is set as @@ -368,23 +371,19 @@ enum eWniMsgTypes #ifdef FEATURE_WLAN_LPHB eWNI_SME_LPHB_IND, #endif /* FEATURE_WLAN_LPHB */ -#if defined WLAN_FEATURE_RELIABLE_MCAST - eWNI_SME_ENABLE_RMC_REQ, - eWNI_SME_DISABLE_RMC_REQ, -#endif /* WLAN_FEATURE_RELIABLE_MCAST */ - -#ifdef FEATURE_CESIUM_PROPRIETARY - eWNI_SME_IBSS_PEER_INFO_RSP, -#endif /* FEATURE_CESIUM_PROPRIETARY */ + eWNI_SME_GET_TSM_STATS_REQ, eWNI_SME_GET_TSM_STATS_RSP, eWNI_SME_TSM_IE_IND, eWNI_SME_READY_TO_SUSPEND_IND, +#ifdef FEATURE_WLAN_CH_AVOID + eWNI_SME_CH_AVOID_IND, +#endif /* FEATURE_WLAN_CH_AVOID */ eWNI_SME_MSG_TYPES_END }; -#define WNI_CFG_MSG_TYPES_BEGIN 0x1100 +#define WNI_CFG_MSG_TYPES_BEGIN 0x1200 /*---------------------------------------------------------------------*/ /* CFG Module Definitions */ diff --git a/CORE/MAC/inc/wniCfgAp.h b/CORE/MAC/inc/wniCfgAp.h index 06cef8a7799d..2ee3f2cc3ad7 100644 --- a/CORE/MAC/inc/wniCfgAp.h +++ b/CORE/MAC/inc/wniCfgAp.h @@ -25,11 +25,6 @@ * to the Linux Foundation. */ -/* - * Copyright (C) 2007-2009 Qualcomm Technologies, Inc. - * All rights reserved. Proprietary and Confidential. - */ - /* * DO NOT EDIT - This file is generated automatically */ diff --git a/CORE/MAC/inc/wniCfgSta.h b/CORE/MAC/inc/wniCfgSta.h index 2489e2e46ee6..4e88bac4d6f6 100644 --- a/CORE/MAC/inc/wniCfgSta.h +++ b/CORE/MAC/inc/wniCfgSta.h @@ -24,12 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - -/* - * Copyright (C) 2007-2009 Qualcomm Technologies, Inc. - * All rights reserved. Proprietary and Confidential. - */ - /* * DO NOT EDIT - This file is generated automatically */ diff --git a/CORE/MAC/inc/wniStat.h b/CORE/MAC/inc/wniStat.h index 8d8076fb6d91..de54885b307a 100644 --- a/CORE/MAC/inc/wniStat.h +++ b/CORE/MAC/inc/wniStat.h @@ -24,10 +24,8 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* * - * Airgo Networks, Inc proprietary. All rights reserved. * This file wniStat.h contains statistics related definitions * exported by Sirius software modules. * diff --git a/CORE/MAC/src/cfg/cfgApi.c b/CORE/MAC/src/cfg/cfgApi.c index d0664da82201..fd75120d0a62 100644 --- a/CORE/MAC/src/cfg/cfgApi.c +++ b/CORE/MAC/src/cfg/cfgApi.c @@ -24,9 +24,8 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Airgo Networks, Inc proprietary. All rights reserved. + * * This file contains the source code for CFG API functions. * * Author: Kevin Nguyen diff --git a/CORE/MAC/src/cfg/cfgDebug.c b/CORE/MAC/src/cfg/cfgDebug.c index e1109ec17ec6..e6514d488da5 100644 --- a/CORE/MAC/src/cfg/cfgDebug.c +++ b/CORE/MAC/src/cfg/cfgDebug.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /**========================================================================= \file cfgDebug.c @@ -33,10 +32,6 @@ \author Sunit Bhatia - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ #include "cfgDebug.h" diff --git a/CORE/MAC/src/cfg/cfgDebug.h b/CORE/MAC/src/cfg/cfgDebug.h index 1c0e9781ba65..e7662b0ba4c0 100644 --- a/CORE/MAC/src/cfg/cfgDebug.h +++ b/CORE/MAC/src/cfg/cfgDebug.h @@ -24,11 +24,7 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * - * - * Airgo Networks, Inc proprietary. All rights reserved. * Author: Kevin Nguyen * Date: 04/09/02 * History:- diff --git a/CORE/MAC/src/cfg/cfgDef.h b/CORE/MAC/src/cfg/cfgDef.h index cd8872633bc0..6f6e1bcd427e 100644 --- a/CORE/MAC/src/cfg/cfgDef.h +++ b/CORE/MAC/src/cfg/cfgDef.h @@ -24,10 +24,7 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * - * Airgo Networks, Inc proprietary. All rights reserved. * This is the private header file for CFG module. * * Author: Kevin Nguyen diff --git a/CORE/MAC/src/cfg/cfgParamName.c b/CORE/MAC/src/cfg/cfgParamName.c index 0e75b0a4389e..c56e007d00d4 100644 --- a/CORE/MAC/src/cfg/cfgParamName.c +++ b/CORE/MAC/src/cfg/cfgParamName.c @@ -25,11 +25,6 @@ * to the Linux Foundation. */ -/* - * Copyright (C) 2007-2009 Qualcomm Technologies, Inc. - * All rights reserved. Proprietary and Confidential. - */ - /* * DO NOT EDIT - This file is generated automatically */ diff --git a/CORE/MAC/src/cfg/cfgPriv.h b/CORE/MAC/src/cfg/cfgPriv.h index 184785b5798d..6ea8cb9883e3 100644 --- a/CORE/MAC/src/cfg/cfgPriv.h +++ b/CORE/MAC/src/cfg/cfgPriv.h @@ -24,10 +24,8 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* * - * Airgo Networks, Inc proprietary. All rights reserved. * This is the private header file for CFG module. * * Author: Kevin Nguyen diff --git a/CORE/MAC/src/cfg/cfgProcMsg.c b/CORE/MAC/src/cfg/cfgProcMsg.c index a8a40d309597..79ca449f3971 100644 --- a/CORE/MAC/src/cfg/cfgProcMsg.c +++ b/CORE/MAC/src/cfg/cfgProcMsg.c @@ -24,9 +24,7 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Airgo Networks, Inc proprietary. All rights reserved. * This file contains CFG functions for processing host messages. * * Author: Kevin Nguyen diff --git a/CORE/MAC/src/cfg/cfgSendMsg.c b/CORE/MAC/src/cfg/cfgSendMsg.c index a6d7308b0b75..0b5207674902 100644 --- a/CORE/MAC/src/cfg/cfgSendMsg.c +++ b/CORE/MAC/src/cfg/cfgSendMsg.c @@ -24,9 +24,7 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Airgo Networks, Inc proprietary. All rights reserved. * This file contains the source code for composing and sending messages * to host. * diff --git a/CORE/MAC/src/cfg/cfgUtil/cfg.txt b/CORE/MAC/src/cfg/cfgUtil/cfg.txt index 238eac257dc7..bc8297f42275 100644 --- a/CORE/MAC/src/cfg/cfgUtil/cfg.txt +++ b/CORE/MAC/src/cfg/cfgUtil/cfg.txt @@ -20,9 +20,7 @@ * This file was originally distributed by Qualcomm Atheros, Inc. * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. - * -* Woodside Networks, Inc proprietary. All rights reserved. * This is the data definition file for the CFG module. * Author: Kevin Nguyen * Date: 03/18/02 diff --git a/CORE/MAC/src/cfg/polFile.h b/CORE/MAC/src/cfg/polFile.h index 04df7862e16c..dd4ff670b94a 100644 --- a/CORE/MAC/src/cfg/polFile.h +++ b/CORE/MAC/src/cfg/polFile.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - //================================================================== // // File: polFile.h @@ -33,8 +32,6 @@ // // Author: Larry Cawley // -// Copyright 2002, Woodside Networks, Inc. All rights reserved. -// // Change History: // 04/09/2002 - LAC - Initial version. // diff --git a/CORE/MAC/src/dph/dphHashTable.c b/CORE/MAC/src/dph/dphHashTable.c index 410b7f21682b..27452fb87686 100644 --- a/CORE/MAC/src/dph/dphHashTable.c +++ b/CORE/MAC/src/dph/dphHashTable.c @@ -24,9 +24,8 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Airgo Networks, Inc proprietary. All rights reserved. + * * This file dphHashTable.cc implements the member functions of * DPH hash table class. * diff --git a/CORE/MAC/src/dph/dphHashTable.h b/CORE/MAC/src/dph/dphHashTable.h index 4c95d35cf5d1..ea995616427e 100644 --- a/CORE/MAC/src/dph/dphHashTable.h +++ b/CORE/MAC/src/dph/dphHashTable.h @@ -24,10 +24,7 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * - * Airgo Networks, Inc proprietary. All rights reserved. * This file dphHashTable.h contains the definition of the scheduler class. * * Author: Sandesh Goel diff --git a/CORE/MAC/src/include/cfgApi.h b/CORE/MAC/src/include/cfgApi.h index bf3a722fda22..46ab4606b4bf 100644 --- a/CORE/MAC/src/include/cfgApi.h +++ b/CORE/MAC/src/include/cfgApi.h @@ -24,10 +24,7 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * - * Airgo Networks, Inc proprietary. All rights reserved. * Author: Kevin Nguyen * Date: 04/09/02 * History:- diff --git a/CORE/MAC/src/include/cfgGlobal.h b/CORE/MAC/src/include/cfgGlobal.h index a9f6826c44ca..e19d35f2efe1 100644 --- a/CORE/MAC/src/include/cfgGlobal.h +++ b/CORE/MAC/src/include/cfgGlobal.h @@ -24,10 +24,7 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * - * Airgo Networks, Inc proprietary. All rights reserved. * Author: Sandesh Goel * Date: 02/09/03 * History:- diff --git a/CORE/MAC/src/include/dot11f.h b/CORE/MAC/src/include/dot11f.h index 4cb003cb3d52..da954f516762 100644 --- a/CORE/MAC/src/include/dot11f.h +++ b/CORE/MAC/src/include/dot11f.h @@ -24,6 +24,8 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ +/** + */ #ifndef DOT11F_H #define DOT11F_H @@ -38,7 +40,7 @@ * * * This file was automatically generated by 'framesc' - * Tue Dec 3 15:04:59 2013 from the following file(s): + * Tue Jan 7 20:37:51 2014 from the following file(s): * * dot11f.frms * @@ -304,16 +306,6 @@ void dot11fUnpackFfDialogToken(tpAniSirGlobal, tANI_U8*, tDot11fFfDialogToken*); void dot11fPackFfDialogToken(tpAniSirGlobal, tDot11fFfDialogToken*, tANI_U8*); -typedef struct sDot11fFfLeader { - tANI_U8 mac[6]; -} tDot11fFfLeader; - -#define DOT11F_FF_LEADER_LEN ( 6 ) - -void dot11fUnpackFfLeader(tpAniSirGlobal, tANI_U8*, tDot11fFfLeader*); - -void dot11fPackFfLeader(tpAniSirGlobal, tDot11fFfLeader*, tANI_U8*); - typedef struct sDot11fFfLinkMargin { tANI_U8 linkMargin; } tDot11fFfLinkMargin; @@ -334,16 +326,6 @@ void dot11fUnpackFfListenInterval(tpAniSirGlobal, tANI_U8*, tDot11fFfListenInter void dot11fPackFfListenInterval(tpAniSirGlobal, tDot11fFfListenInterval*, tANI_U8*); -typedef struct sDot11fFfMagicCode { - tANI_U8 magic[6]; -} tDot11fFfMagicCode; - -#define DOT11F_FF_MAGICCODE_LEN ( 6 ) - -void dot11fUnpackFfMagicCode(tpAniSirGlobal, tANI_U8*, tDot11fFfMagicCode*); - -void dot11fPackFfMagicCode(tpAniSirGlobal, tDot11fFfMagicCode*, tANI_U8*); - typedef struct sDot11fFfMaxTxPower { tANI_U8 maxTxPower; } tDot11fFfMaxTxPower; @@ -416,36 +398,6 @@ void dot11fUnpackFfRCPI(tpAniSirGlobal, tANI_U8*, tDot11fFfRCPI*); void dot11fPackFfRCPI(tpAniSirGlobal, tDot11fFfRCPI*, tANI_U8*); -typedef struct sDot11fFfRMCDialogToken { - tANI_U32 token; -} tDot11fFfRMCDialogToken; - -#define DOT11F_FF_RMCDIALOGTOKEN_LEN ( 4 ) - -void dot11fUnpackFfRMCDialogToken(tpAniSirGlobal, tANI_U8*, tDot11fFfRMCDialogToken*); - -void dot11fPackFfRMCDialogToken(tpAniSirGlobal, tDot11fFfRMCDialogToken*, tANI_U8*); - -typedef struct sDot11fFfRMCOUI { - tANI_U8 oui[3]; -} tDot11fFfRMCOUI; - -#define DOT11F_FF_RMCOUI_LEN ( 3 ) - -void dot11fUnpackFfRMCOUI(tpAniSirGlobal, tANI_U8*, tDot11fFfRMCOUI*); - -void dot11fPackFfRMCOUI(tpAniSirGlobal, tDot11fFfRMCOUI*, tANI_U8*); - -typedef struct sDot11fFfRMCVersion { - tANI_U8 version; -} tDot11fFfRMCVersion; - -#define DOT11F_FF_RMCVERSION_LEN ( 1 ) - -void dot11fUnpackFfRMCVersion(tpAniSirGlobal, tANI_U8*, tDot11fFfRMCVersion*); - -void dot11fPackFfRMCVersion(tpAniSirGlobal, tDot11fFfRMCVersion*, tANI_U8*); - typedef struct sDot11fFfRSNI { tANI_U8 rsni; } tDot11fFfRSNI; @@ -4251,31 +4203,6 @@ tANI_U32 dot11fPackIeOperatingMode(tpAniSirGlobal, tDot11fIEOperatingMode*, tANI tANI_U32 dot11fGetPackedIEOperatingMode(tpAniSirGlobal, tDot11fIEOperatingMode*, tANI_U32*); -#ifdef __cplusplus -}; /* End extern "C". */ -#endif /* C++ */ -// EID 221 (0xdd) {OUI 0x00, 0x16, 0x32} -typedef struct sDot11fIEOxygenNetwork { - tANI_U8 present; - tANI_U16 data; -} tDot11fIEOxygenNetwork; - -#define DOT11F_EID_OXYGENNETWORK ( 221 ) - -// N.B. These #defines do *not* include the EID & length -#define DOT11F_IE_OXYGENNETWORK_MIN_LEN ( 5 ) - -#define DOT11F_IE_OXYGENNETWORK_MAX_LEN ( 5 ) - -#ifdef __cplusplus -extern "C" { -#endif /* C++ */ -tANI_U32 dot11fUnpackIeOxygenNetwork(tpAniSirGlobal, tANI_U8*,tANI_U8, tDot11fIEOxygenNetwork*); - -tANI_U32 dot11fPackIeOxygenNetwork(tpAniSirGlobal, tDot11fIEOxygenNetwork*, tANI_U8*, tANI_U32, tANI_U32*); - -tANI_U32 dot11fGetPackedIEOxygenNetwork(tpAniSirGlobal, tDot11fIEOxygenNetwork*, tANI_U32*); - #ifdef __cplusplus }; /* End extern "C". */ #endif /* C++ */ @@ -6402,7 +6329,6 @@ typedef struct sDot11fBeacon{ tDot11fIEExtCap ExtCap; tDot11fIEOperatingMode OperatingMode; tDot11fIEWiderBWChanSwitchAnn WiderBWChanSwitchAnn; - tDot11fIEOxygenNetwork OxygenNetwork; } tDot11fBeacon; #define DOT11F_BEACON ( 8 ) @@ -6476,7 +6402,6 @@ typedef struct sDot11fBeacon2{ tDot11fIEExtCap ExtCap; tDot11fIEOperatingMode OperatingMode; tDot11fIEWiderBWChanSwitchAnn WiderBWChanSwitchAnn; - tDot11fIEOxygenNetwork OxygenNetwork; } tDot11fBeacon2; #define DOT11F_BEACON2 ( 10 ) @@ -6538,7 +6463,6 @@ typedef struct sDot11fBeaconIEs{ tDot11fIEExtCap ExtCap; tDot11fIEOperatingMode OperatingMode; tDot11fIEWiderBWChanSwitchAnn WiderBWChanSwitchAnn; - tDot11fIEOxygenNetwork OxygenNetwork; } tDot11fBeaconIEs; #define DOT11F_BEACONIES ( 11 ) @@ -7133,7 +7057,6 @@ typedef struct sDot11fProbeResponse{ tDot11fIEVHTOperation VHTOperation; tDot11fIEVHTExtBssLoad VHTExtBssLoad; tDot11fIEExtCap ExtCap; - tDot11fIEOxygenNetwork OxygenNetwork; } tDot11fProbeResponse; #define DOT11F_PROBERESPONSE ( 36 ) @@ -7196,30 +7119,6 @@ tANI_U32 dot11fGetPackedProvisionDiscoveryResSize(tpAniSirGlobal pCtx, tDot11fPr } /* End extern "C". */ #endif /* C++ */ -typedef struct sDot11fRMC{ - tDot11fFfCategory Category; - tDot11fFfRMCOUI RMCOUI; - tDot11fFfMagicCode MagicCode; - tDot11fFfRMCVersion RMCVersion; - tDot11fFfAction Action; - tDot11fFfRMCDialogToken RMCDialogToken; - tDot11fFfLeader Leader; -} tDot11fRMC; - -#define DOT11F_RMC ( 39 ) - -#ifdef __cplusplus -extern "C" { -#endif /* C++ */ - -tANI_U32 dot11fUnpackRMC(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 nBuf, tDot11fRMC *pFrm); -tANI_U32 dot11fPackRMC(tpAniSirGlobal pCtx, tDot11fRMC *pFrm, tANI_U8 *pBuf, tANI_U32 nBuf, tANI_U32 *pnConsumed); -tANI_U32 dot11fGetPackedRMCSize(tpAniSirGlobal pCtx, tDot11fRMC *pFrm, tANI_U32 *pnNeeded); - -#ifdef __cplusplus -} /* End extern "C". */ -#endif /* C++ */ - typedef struct sDot11fRadioMeasurementReport{ tDot11fFfCategory Category; tDot11fFfAction Action; @@ -7228,7 +7127,7 @@ typedef struct sDot11fRadioMeasurementReport{ tDot11fIEMeasurementReport MeasurementReport[4]; } tDot11fRadioMeasurementReport; -#define DOT11F_RADIOMEASUREMENTREPORT ( 40 ) +#define DOT11F_RADIOMEASUREMENTREPORT ( 39 ) #ifdef __cplusplus extern "C" { @@ -7251,7 +7150,7 @@ typedef struct sDot11fRadioMeasurementRequest{ tDot11fIEMeasurementRequest MeasurementRequest[2]; } tDot11fRadioMeasurementRequest; -#define DOT11F_RADIOMEASUREMENTREQUEST ( 41 ) +#define DOT11F_RADIOMEASUREMENTREQUEST ( 40 ) #ifdef __cplusplus extern "C" { @@ -7301,7 +7200,7 @@ typedef struct sDot11fReAssocRequest{ tDot11fIEOperatingMode OperatingMode; } tDot11fReAssocRequest; -#define DOT11F_REASSOCREQUEST ( 42 ) +#define DOT11F_REASSOCREQUEST ( 41 ) #ifdef __cplusplus extern "C" { @@ -7348,7 +7247,7 @@ typedef struct sDot11fReAssocResponse{ tDot11fIEExtCap ExtCap; } tDot11fReAssocResponse; -#define DOT11F_REASSOCRESPONSE ( 43 ) +#define DOT11F_REASSOCRESPONSE ( 42 ) #ifdef __cplusplus extern "C" { @@ -7368,7 +7267,7 @@ typedef struct sDot11fSMPowerSave{ tDot11fFfSMPowerModeSet SMPowerModeSet; } tDot11fSMPowerSave; -#define DOT11F_SMPOWERSAVE ( 44 ) +#define DOT11F_SMPOWERSAVE ( 43 ) #ifdef __cplusplus extern "C" { @@ -7388,7 +7287,7 @@ typedef struct sDot11fSaQueryRsp{ tDot11fFfTransactionId TransactionId; } tDot11fSaQueryRsp; -#define DOT11F_SAQUERYRSP ( 45 ) +#define DOT11F_SAQUERYRSP ( 44 ) #ifdef __cplusplus extern "C" { @@ -7409,7 +7308,7 @@ typedef struct sDot11fTDLSDisReq{ tDot11fIELinkIdentifier LinkIdentifier; } tDot11fTDLSDisReq; -#define DOT11F_TDLSDISREQ ( 46 ) +#define DOT11F_TDLSDISREQ ( 45 ) #ifdef __cplusplus extern "C" { @@ -7441,7 +7340,7 @@ typedef struct sDot11fTDLSDisRsp{ tDot11fIEVHTCaps VHTCaps; } tDot11fTDLSDisRsp; -#define DOT11F_TDLSDISRSP ( 47 ) +#define DOT11F_TDLSDISRSP ( 46 ) #ifdef __cplusplus extern "C" { @@ -7464,7 +7363,7 @@ typedef struct sDot11fTDLSPeerTrafficInd{ tDot11fIEPUBufferStatus PUBufferStatus; } tDot11fTDLSPeerTrafficInd; -#define DOT11F_TDLSPEERTRAFFICIND ( 48 ) +#define DOT11F_TDLSPEERTRAFFICIND ( 47 ) #ifdef __cplusplus extern "C" { @@ -7485,7 +7384,7 @@ typedef struct sDot11fTDLSPeerTrafficRsp{ tDot11fIELinkIdentifier LinkIdentifier; } tDot11fTDLSPeerTrafficRsp; -#define DOT11F_TDLSPEERTRAFFICRSP ( 49 ) +#define DOT11F_TDLSPEERTRAFFICRSP ( 48 ) #ifdef __cplusplus extern "C" { @@ -7515,7 +7414,7 @@ typedef struct sDot11fTDLSSetupCnf{ tDot11fIEOperatingMode OperatingMode; } tDot11fTDLSSetupCnf; -#define DOT11F_TDLSSETUPCNF ( 50 ) +#define DOT11F_TDLSSETUPCNF ( 49 ) #ifdef __cplusplus extern "C" { @@ -7551,7 +7450,7 @@ typedef struct sDot11fTDLSSetupReq{ tDot11fIEVHTCaps VHTCaps; } tDot11fTDLSSetupReq; -#define DOT11F_TDLSSETUPREQ ( 51 ) +#define DOT11F_TDLSSETUPREQ ( 50 ) #ifdef __cplusplus extern "C" { @@ -7589,7 +7488,7 @@ typedef struct sDot11fTDLSSetupRsp{ tDot11fIEOperatingMode OperatingMode; } tDot11fTDLSSetupRsp; -#define DOT11F_TDLSSETUPRSP ( 52 ) +#define DOT11F_TDLSSETUPRSP ( 51 ) #ifdef __cplusplus extern "C" { @@ -7611,7 +7510,7 @@ typedef struct sDot11fTDLSTeardown{ tDot11fIELinkIdentifier LinkIdentifier; } tDot11fTDLSTeardown; -#define DOT11F_TDLSTEARDOWN ( 53 ) +#define DOT11F_TDLSTEARDOWN ( 52 ) #ifdef __cplusplus extern "C" { @@ -7632,7 +7531,7 @@ typedef struct sDot11fTPCReport{ tDot11fIETPCReport TPCReport; } tDot11fTPCReport; -#define DOT11F_TPCREPORT ( 54 ) +#define DOT11F_TPCREPORT ( 53 ) #ifdef __cplusplus extern "C" { @@ -7653,7 +7552,7 @@ typedef struct sDot11fTPCRequest{ tDot11fIETPCRequest TPCRequest; } tDot11fTPCRequest; -#define DOT11F_TPCREQUEST ( 55 ) +#define DOT11F_TPCREQUEST ( 54 ) #ifdef __cplusplus extern "C" { @@ -7674,7 +7573,7 @@ typedef struct sDot11fVHTGidManagementActionFrame{ tDot11fFfVhtUserPositionArray VhtUserPositionArray; } tDot11fVHTGidManagementActionFrame; -#define DOT11F_VHTGIDMANAGEMENTACTIONFRAME ( 56 ) +#define DOT11F_VHTGIDMANAGEMENTACTIONFRAME ( 55 ) #ifdef __cplusplus extern "C" { @@ -7697,7 +7596,7 @@ typedef struct sDot11fWMMAddTSRequest{ tDot11fIECCXTrafStrmRateSet CCXTrafStrmRateSet; } tDot11fWMMAddTSRequest; -#define DOT11F_WMMADDTSREQUEST ( 57 ) +#define DOT11F_WMMADDTSREQUEST ( 56 ) #ifdef __cplusplus extern "C" { @@ -7720,7 +7619,7 @@ typedef struct sDot11fWMMAddTSResponse{ tDot11fIECCXTrafStrmMet CCXTrafStrmMet; } tDot11fWMMAddTSResponse; -#define DOT11F_WMMADDTSRESPONSE ( 58 ) +#define DOT11F_WMMADDTSRESPONSE ( 57 ) #ifdef __cplusplus extern "C" { @@ -7742,7 +7641,7 @@ typedef struct sDot11fWMMDelTS{ tDot11fIEWMMTSPEC WMMTSPEC; } tDot11fWMMDelTS; -#define DOT11F_WMMDELTS ( 59 ) +#define DOT11F_WMMDELTS ( 58 ) #ifdef __cplusplus extern "C" { diff --git a/CORE/MAC/src/include/dphGlobal.h b/CORE/MAC/src/include/dphGlobal.h index 1d5fb46b0398..3a6ccaf6d78d 100644 --- a/CORE/MAC/src/include/dphGlobal.h +++ b/CORE/MAC/src/include/dphGlobal.h @@ -24,11 +24,9 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* * - * Airgo Networks, Inc proprietary. All rights reserved. * Author: Sandesh Goel * Date: 02/25/02 diff --git a/CORE/MAC/src/include/parserApi.h b/CORE/MAC/src/include/parserApi.h index 62f02ef34ac9..604bcf21596b 100644 --- a/CORE/MAC/src/include/parserApi.h +++ b/CORE/MAC/src/include/parserApi.h @@ -24,9 +24,7 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Airgo Networks, Inc proprietary. All rights reserved. * This file parserApi.h contains the definitions used * for parsing received 802.11 frames * Author: Chandra Modumudi @@ -286,6 +284,7 @@ typedef struct sSirCcxBcnReportMandatoryIe tANI_U8 cfPresent; tANI_U8 ibssParamPresent; tANI_U8 timPresent; + tANI_U8 rrmPresent; } tSirCcxBcnReportMandatoryIe, *tpSirCcxBcnReportMandatoryIe; #endif /* FEATURE_WLAN_CCX_UPLOAD */ diff --git a/CORE/MAC/src/include/sirCommon.h b/CORE/MAC/src/include/sirCommon.h index 382b6d53acf7..b17fca8a9cec 100644 --- a/CORE/MAC/src/include/sirCommon.h +++ b/CORE/MAC/src/include/sirCommon.h @@ -24,10 +24,8 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* * - * Airgo Networks, Inc proprietary. All rights reserved. * This file sirCommon.h contains the common definitions used by all * Firmware modules. * diff --git a/CORE/MAC/src/include/sirDebug.h b/CORE/MAC/src/include/sirDebug.h index b255ea6aaf8b..dcd12c58d3a0 100644 --- a/CORE/MAC/src/include/sirDebug.h +++ b/CORE/MAC/src/include/sirDebug.h @@ -24,11 +24,8 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* * - * - * Airgo Networks, Inc proprietary. All rights reserved. * Author: Sandesh Goel * Date: 02/25/02 * History:- diff --git a/CORE/MAC/src/include/sirParams.h b/CORE/MAC/src/include/sirParams.h index 9788fa654a66..33ed8bed778a 100644 --- a/CORE/MAC/src/include/sirParams.h +++ b/CORE/MAC/src/include/sirParams.h @@ -24,9 +24,7 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Airgo Networks, Inc proprietary. All rights reserved. * This file sirParams.h contains the common parameter definitions, which * are not dependent on threadX API. These can be used by all Firmware * modules. @@ -589,19 +587,6 @@ typedef struct sSirMbMsgP2p #define SIR_HAL_ADD_PERIODIC_TX_PTRN_IND (SIR_HAL_ITC_MSG_TYPES_BEGIN + 209) #define SIR_HAL_DEL_PERIODIC_TX_PTRN_IND (SIR_HAL_ITC_MSG_TYPES_BEGIN + 210) -#if defined WLAN_FEATURE_RELIABLE_MCAST -#define SIR_HAL_RMC_BECOME_LEADER (SIR_HAL_ITC_MSG_TYPES_BEGIN + 211) -#define SIR_HAL_RMC_LEADER_SELECT_RESP (SIR_HAL_ITC_MSG_TYPES_BEGIN + 212) -#define SIR_HAL_RMC_LEADER_REQ (SIR_HAL_ITC_MSG_TYPES_BEGIN + 213) -#define SIR_HAL_RMC_UPDATE_IND (SIR_HAL_ITC_MSG_TYPES_BEGIN + 214) -#endif /* defined WLAN_FEATURE_RELIABLE_MCAST */ - -#ifdef FEATURE_CESIUM_PROPRIETARY -/* For IBSS peer info related messages */ -#define SIR_HAL_IBSS_PEER_INFO_REQ (SIR_HAL_ITC_MSG_TYPES_BEGIN + 215) -#define SIR_HAL_IBSS_PEER_INFO_RSP (SIR_HAL_ITC_MSG_TYPES_BEGIN + 216) -#endif /* FEATURE_CESIUM_PROPRIETARY */ - #define SIR_HAL_RATE_UPDATE_IND (SIR_HAL_ITC_MSG_TYPES_BEGIN + 217) #ifdef FEATURE_WLAN_BATCH_SCAN @@ -627,26 +612,30 @@ typedef struct sSirMbMsgP2p #define SIR_HAL_START_SCAN_OFFLOAD_REQ (SIR_HAL_ITC_MSG_TYPES_BEGIN + 227) #define SIR_HAL_START_SCAN_OFFLOAD_RSP (SIR_HAL_ITC_MSG_TYPES_BEGIN + 228) #define SIR_HAL_UPDATE_CHAN_LIST_REQ (SIR_HAL_ITC_MSG_TYPES_BEGIN + 229) -#ifdef FEATURE_CESIUM_PROPRIETARY -#define SIR_HAL_IBSS_ROUTE_TABLE_UPDATE_IND (SIR_HAL_ITC_MSG_TYPES_BEGIN + 230) -#endif /* FEATURE_CESIUM_PROPRIETARY */ -#define SIR_CSA_OFFLOAD_EVENT (SIR_HAL_ITC_MSG_TYPES_BEGIN + 231) +#define SIR_CSA_OFFLOAD_EVENT (SIR_HAL_ITC_MSG_TYPES_BEGIN + 231) #define SIR_HAL_SET_MAX_TX_POWER_PER_BAND_REQ \ - (SIR_HAL_ITC_MSG_TYPES_BEGIN + 231) -#define SIR_HAL_SET_MAX_TX_POWER_PER_BAND_RSP \ (SIR_HAL_ITC_MSG_TYPES_BEGIN + 232) - -#ifdef FEATURE_CESIUM_PROPRIETARY -#define SIR_HAL_TX_FAIL_MONITOR_IND (SIR_HAL_ITC_MSG_TYPES_BEGIN + 233) -#endif /* FEATURE_CESIUM_PROPRIETARY */ +#define SIR_HAL_SET_MAX_TX_POWER_PER_BAND_RSP \ + (SIR_HAL_ITC_MSG_TYPES_BEGIN + 233) #ifdef WLAN_FEATURE_11AC -#define SIR_HAL_UPDATE_MEMBERSHIP (SIR_HAL_ITC_MSG_TYPES_BEGIN + 210) -#define SIR_HAL_UPDATE_USERPOS (SIR_HAL_ITC_MSG_TYPES_BEGIN + 211) +#define SIR_HAL_UPDATE_MEMBERSHIP (SIR_HAL_ITC_MSG_TYPES_BEGIN + 235) +#define SIR_HAL_UPDATE_USERPOS (SIR_HAL_ITC_MSG_TYPES_BEGIN + 236) #endif -#define SIR_HAL_MSG_TYPES_END (SIR_HAL_ITC_MSG_TYPES_BEGIN + 0xFF) +#ifdef QCA_WIFI_2_0 +#ifdef FEATURE_WLAN_TDLS +#define SIR_HAL_UPDATE_FW_TDLS_STATE (SIR_HAL_ITC_MSG_TYPES_BEGIN + 237) +#define SIR_HAL_UPDATE_TDLS_PEER_STATE (SIR_HAL_ITC_MSG_TYPES_BEGIN + 238) +#define SIR_HAL_TDLS_SHOULD_DISCOVER (SIR_HAL_ITC_MSG_TYPES_BEGIN + 239) +#define SIR_HAL_TDLS_SHOULD_TEARDOWN (SIR_HAL_ITC_MSG_TYPES_BEGIN + 240) +#define SIR_HAL_TDLS_PEER_DISCONNECTED (SIR_HAL_ITC_MSG_TYPES_BEGIN + 241) +#endif +#endif + +#define SIR_HAL_MSG_TYPES_END (SIR_HAL_MSG_TYPES_BEGIN + 0x1FF) + // CFG message types #define SIR_CFG_MSG_TYPES_BEGIN (SIR_CFG_MODULE_ID << 8) #define SIR_CFG_ITC_MSG_TYPES_BEGIN (SIR_CFG_MSG_TYPES_BEGIN+0xB0) diff --git a/CORE/MAC/src/include/sysGlobal.h b/CORE/MAC/src/include/sysGlobal.h index 8b35a10ea581..01f43e250442 100644 --- a/CORE/MAC/src/include/sysGlobal.h +++ b/CORE/MAC/src/include/sysGlobal.h @@ -24,7 +24,9 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - +/* + * + */ #ifndef __SYS_GLOBAL_H__ #define __SYS_GLOBAL_H__ diff --git a/CORE/MAC/src/include/utilsApi.h b/CORE/MAC/src/include/utilsApi.h index 4be2d86c91c9..f3325dbeda1f 100644 --- a/CORE/MAC/src/include/utilsApi.h +++ b/CORE/MAC/src/include/utilsApi.h @@ -24,10 +24,7 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * - * Airgo Networks, Inc proprietary. All rights reserved. * Author: Kevin Nguyen * Date: 02/27/02 * History:- diff --git a/CORE/MAC/src/include/utilsGlobal.h b/CORE/MAC/src/include/utilsGlobal.h index 7a46b5564fe0..1859155f5638 100644 --- a/CORE/MAC/src/include/utilsGlobal.h +++ b/CORE/MAC/src/include/utilsGlobal.h @@ -24,10 +24,7 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * - * Airgo Networks, Inc proprietary. All rights reserved. * Author: Sandesh Goel * Date: 02/25/02 * History:- diff --git a/CORE/MAC/src/pe/include/limAdmitControl.h b/CORE/MAC/src/pe/include/limAdmitControl.h index f0a199f6d689..0bc83912dc71 100644 --- a/CORE/MAC/src/pe/include/limAdmitControl.h +++ b/CORE/MAC/src/pe/include/limAdmitControl.h @@ -24,9 +24,8 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Airgo Networks, Inc proprietary. All rights reserved. + * * Author: Dinesh Upadhyay * Date: 10/24/06 * History:- diff --git a/CORE/MAC/src/pe/include/limApi.h b/CORE/MAC/src/pe/include/limApi.h index 8be67edc72c3..2934b25075dd 100644 --- a/CORE/MAC/src/pe/include/limApi.h +++ b/CORE/MAC/src/pe/include/limApi.h @@ -24,9 +24,8 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Airgo Networks, Inc proprietary. All rights reserved. + * * This file limApi.h contains the definitions exported by * LIM module. * Author: Chandra Modumudi diff --git a/CORE/MAC/src/pe/include/limFT.h b/CORE/MAC/src/pe/include/limFT.h index 388a4094eaa6..585e65a21544 100644 --- a/CORE/MAC/src/pe/include/limFT.h +++ b/CORE/MAC/src/pe/include/limFT.h @@ -24,15 +24,11 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if defined WLAN_FEATURE_VOWIFI_11R /**========================================================================= Macros and Function prototypes FT and 802.11R purposes - Copyright 2010 (c) Qualcomm Technologies, Inc. All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ #ifndef __LIMFT_H__ diff --git a/CORE/MAC/src/pe/include/limFTDefs.h b/CORE/MAC/src/pe/include/limFTDefs.h index acdb1afe2ec8..e71ae94176f3 100644 --- a/CORE/MAC/src/pe/include/limFTDefs.h +++ b/CORE/MAC/src/pe/include/limFTDefs.h @@ -24,13 +24,10 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if defined WLAN_FEATURE_VOWIFI_11R /**========================================================================= Macros and Function prototypes FT and 802.11R purposes - Copyright 2010 (c) Qualcomm Technologies, Inc. All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary. ========================================================================*/ diff --git a/CORE/MAC/src/pe/include/limGlobal.h b/CORE/MAC/src/pe/include/limGlobal.h index 237e226bd06c..5613a15cc73b 100644 --- a/CORE/MAC/src/pe/include/limGlobal.h +++ b/CORE/MAC/src/pe/include/limGlobal.h @@ -24,9 +24,8 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Airgo Networks, Inc proprietary. All rights reserved. + * * This file limGlobal.h contains the definitions exported by * LIM module. * Author: Chandra Modumudi @@ -330,14 +329,14 @@ struct tLimScanResultNode #ifndef OEM_DATA_REQ_SIZE #ifdef QCA_WIFI_2_0 -#define OEM_DATA_REQ_SIZE 276 +#define OEM_DATA_REQ_SIZE 280 #else #define OEM_DATA_REQ_SIZE 134 #endif #endif #ifndef OEM_DATA_RSP_SIZE #ifdef QCA_WIFI_2_0 -#define OEM_DATA_RSP_SIZE 1720 +#define OEM_DATA_RSP_SIZE 1724 #else #define OEM_DATA_RSP_SIZE 1968 #endif diff --git a/CORE/MAC/src/pe/include/limSession.h b/CORE/MAC/src/pe/include/limSession.h index 6720fbbc1b0f..bc7109ca03c5 100644 --- a/CORE/MAC/src/pe/include/limSession.h +++ b/CORE/MAC/src/pe/include/limSession.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined( __LIM_SESSION_H ) #define __LIM_SESSION_H @@ -37,9 +36,6 @@ \author Sunit Bhatia - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ /* Powersave Offload Implementation */ diff --git a/CORE/MAC/src/pe/include/limTrace.h b/CORE/MAC/src/pe/include/limTrace.h index 9ed8f8e371ee..a7b1ca042c73 100644 --- a/CORE/MAC/src/pe/include/limTrace.h +++ b/CORE/MAC/src/pe/include/limTrace.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /**========================================================================= * \file limTrace.h @@ -32,10 +31,6 @@ * \author Sunit Bhatia - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ diff --git a/CORE/MAC/src/pe/include/pmmApi.h b/CORE/MAC/src/pe/include/pmmApi.h index 9a37c91d9d0b..85c864659b6a 100644 --- a/CORE/MAC/src/pe/include/pmmApi.h +++ b/CORE/MAC/src/pe/include/pmmApi.h @@ -24,10 +24,8 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* * - * Airgo Networks, Inc proprietary. All rights reserved. * Author: Sandesh Goel * Date: 02/25/02 * History:- diff --git a/CORE/MAC/src/pe/include/pmmGlobal.h b/CORE/MAC/src/pe/include/pmmGlobal.h index e6bfedf123a5..5c5390b3a37e 100644 --- a/CORE/MAC/src/pe/include/pmmGlobal.h +++ b/CORE/MAC/src/pe/include/pmmGlobal.h @@ -24,10 +24,7 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Airgo Networks, Inc proprietary. All rights reserved. - * * Author: Sandesh Goel * Date: 02/25/02 * History:- diff --git a/CORE/MAC/src/pe/include/rrmApi.h b/CORE/MAC/src/pe/include/rrmApi.h index 044acf842215..58a3118d0c27 100644 --- a/CORE/MAC/src/pe/include/rrmApi.h +++ b/CORE/MAC/src/pe/include/rrmApi.h @@ -24,17 +24,14 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - +/* + * */ /**========================================================================= \file rrmApi.h \brief RRM APIs - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ /* $Header$ */ diff --git a/CORE/MAC/src/pe/include/rrmGlobal.h b/CORE/MAC/src/pe/include/rrmGlobal.h index 6d6fb10286b2..c06e70811e28 100644 --- a/CORE/MAC/src/pe/include/rrmGlobal.h +++ b/CORE/MAC/src/pe/include/rrmGlobal.h @@ -24,6 +24,8 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ +/* + * */ #if !defined( __RRMGLOBAL_H ) #define __RRMGLOBAL_H @@ -34,10 +36,6 @@ \brief Definitions for SME APIs - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ typedef enum eRrmRetStatus diff --git a/CORE/MAC/src/pe/include/schApi.h b/CORE/MAC/src/pe/include/schApi.h index 6cddae59b80d..ffe06031dcb5 100644 --- a/CORE/MAC/src/pe/include/schApi.h +++ b/CORE/MAC/src/pe/include/schApi.h @@ -24,10 +24,8 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* * - * Airgo Networks, Inc proprietary. All rights reserved. * Author: Sandesh Goel * Date: 02/25/02 * History:- diff --git a/CORE/MAC/src/pe/include/schGlobal.h b/CORE/MAC/src/pe/include/schGlobal.h index b3d1ed7d5888..2f0135cfd90b 100644 --- a/CORE/MAC/src/pe/include/schGlobal.h +++ b/CORE/MAC/src/pe/include/schGlobal.h @@ -24,10 +24,7 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * - * Airgo Networks, Inc proprietary. All rights reserved. * * Author: Sandesh Goel * Date: 02/25/02 diff --git a/CORE/MAC/src/pe/include/wmmApsd.h b/CORE/MAC/src/pe/include/wmmApsd.h index 2fb6bb5f8560..5c89d018ce89 100644 --- a/CORE/MAC/src/pe/include/wmmApsd.h +++ b/CORE/MAC/src/pe/include/wmmApsd.h @@ -25,7 +25,6 @@ * to the Linux Foundation. */ - #ifndef __WMMAPSD_H__ #define __WMMAPSD_H__ diff --git a/CORE/MAC/src/pe/lim/limAIDmgmt.c b/CORE/MAC/src/pe/lim/limAIDmgmt.c index 23fc1b85fa68..aa1e55e05e83 100644 --- a/CORE/MAC/src/pe/lim/limAIDmgmt.c +++ b/CORE/MAC/src/pe/lim/limAIDmgmt.c @@ -24,10 +24,8 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* * - * Airgo Networks, Inc proprietary. All rights reserved. * This file limAIDmgmt.cc contains the functions related to * AID pool management like initialization, assignment etc. * Author: Chandra Modumudi diff --git a/CORE/MAC/src/pe/lim/limAdmitControl.c b/CORE/MAC/src/pe/lim/limAdmitControl.c index d15a5a13d2eb..47de129b2759 100644 --- a/CORE/MAC/src/pe/lim/limAdmitControl.c +++ b/CORE/MAC/src/pe/lim/limAdmitControl.c @@ -24,10 +24,7 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * - * Airgo Networks, Inc proprietary. All rights reserved. * This file contains TSPEC and STA admit control related functions * NOTE: applies only to AP builds * diff --git a/CORE/MAC/src/pe/lim/limApi.c b/CORE/MAC/src/pe/lim/limApi.c index 6404dd566e9b..9e339bd6c335 100644 --- a/CORE/MAC/src/pe/lim/limApi.c +++ b/CORE/MAC/src/pe/lim/limApi.c @@ -24,9 +24,7 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Airgo Networks, Inc proprietary. All rights reserved. * This file limApi.cc contains the functions that are * exported by LIM to other modules. * @@ -738,10 +736,6 @@ limInitialize(tpAniSirGlobal pMac) limFTOpen(pMac); #endif -#if defined WLAN_FEATURE_RELIABLE_MCAST - limRmcInit(pMac); -#endif /* WLAN_FEATURE_RELIABLE_MCAST */ - vos_list_init(&pMac->lim.gLimMgmtFrameRegistratinQueue); #if 0 @@ -838,10 +832,6 @@ limCleanup(tpAniSirGlobal pMac) limCleanupMlm(pMac); limCleanupLmm(pMac); -#if defined WLAN_FEATURE_RELIABLE_MCAST - limRmcCleanup(pMac); -#endif /* WLAN_FEATURE_RELIABLE_MCAST */ - // free up preAuth table if (pMac->lim.gLimPreAuthTimerTable.pTable != NULL) { diff --git a/CORE/MAC/src/pe/lim/limAssocUtils.c b/CORE/MAC/src/pe/lim/limAssocUtils.c index 8d6df6f5d687..4f64bd1fe5a0 100644 --- a/CORE/MAC/src/pe/lim/limAssocUtils.c +++ b/CORE/MAC/src/pe/lim/limAssocUtils.c @@ -24,9 +24,7 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Airgo Networks, Inc proprietary. All rights reserved. * This file limAssocUtils.cc contains the utility functions * LIM uses while processing (Re) Association messages. * Author: Chandra Modumudi @@ -2322,6 +2320,9 @@ limAddSta( (tANI_U8 *) *pStaAddr, sizeof(tSirMacAddr)); vos_mem_copy((tANI_U8 *) pAddStaParams->bssId, psessionEntry->bssId, sizeof(tSirMacAddr)); + vos_mem_copy(&pAddStaParams->capab_info, + &pStaDs->mlmStaContext.capabilityInfo, + sizeof(pAddStaParams->capab_info)); limFillSupportedRatesInfo(pMac, pStaDs, &pStaDs->supportedRates,psessionEntry); @@ -2460,6 +2461,47 @@ limAddSta( p2pIe = limGetP2pIEPtr(pMac, pAssocReq->addIE.addIEdata, pAssocReq->addIE.length); } pAddStaParams->p2pCapableSta = (p2pIe != NULL); + if (pAddStaParams->htCapable) { + vos_mem_copy(&pAddStaParams->ht_caps, ((tANI_U8 *) &pAssocReq->HTCaps) + 1, + sizeof(pAddStaParams->ht_caps)); + } + if (pAddStaParams->vhtCapable) { + pAddStaParams->vht_caps = + ((pAssocReq->VHTCaps.maxMPDULen << SIR_MAC_VHT_CAP_MAX_MPDU_LEN) | + (pAssocReq->VHTCaps.supportedChannelWidthSet << + SIR_MAC_VHT_CAP_SUPP_CH_WIDTH_SET) | + (pAssocReq->VHTCaps.ldpcCodingCap << + SIR_MAC_VHT_CAP_LDPC_CODING_CAP) | + (pAssocReq->VHTCaps.shortGI80MHz << + SIR_MAC_VHT_CAP_SHORTGI_80MHZ) | + (pAssocReq->VHTCaps.shortGI160and80plus80MHz << + SIR_MAC_VHT_CAP_SHORTGI_160_80_80MHZ) | + (pAssocReq->VHTCaps.txSTBC << SIR_MAC_VHT_CAP_TXSTBC) | + (pAssocReq->VHTCaps.rxSTBC << SIR_MAC_VHT_CAP_RXSTBC) | + (pAssocReq->VHTCaps.suBeamFormerCap << + SIR_MAC_VHT_CAP_SU_BEAMFORMER_CAP) | + (pAssocReq->VHTCaps.suBeamformeeCap << + SIR_MAC_VHT_CAP_SU_BEAMFORMEE_CAP) | + (pAssocReq->VHTCaps.csnofBeamformerAntSup << + SIR_MAC_VHT_CAP_CSN_BEAMORMER_ANT_SUP) | + (pAssocReq->VHTCaps.numSoundingDim << + SIR_MAC_VHT_CAP_NUM_SOUNDING_DIM) | + (pAssocReq->VHTCaps.muBeamformerCap << + SIR_MAC_VHT_CAP_NUM_BEAM_FORMER_CAP)| + (pAssocReq->VHTCaps.muBeamformeeCap << + SIR_MAC_VHT_CAP_NUM_BEAM_FORMEE_CAP) | + (pAssocReq->VHTCaps.vhtTXOPPS << SIR_MAC_VHT_CAP_TXOPPS) | + (pAssocReq->VHTCaps.htcVHTCap << SIR_MAC_VHT_CAP_HTC_CAP) | + (pAssocReq->VHTCaps.maxAMPDULenExp << + SIR_MAC_VHT_CAP_MAX_AMDU_LEN_EXPO) | + (pAssocReq->VHTCaps.vhtLinkAdaptCap << + SIR_MAC_VHT_CAP_LINK_ADAPT_CAP) | + (pAssocReq->VHTCaps.rxAntPattern << + SIR_MAC_VHT_CAP_RX_ANTENNA_PATTERN) | + (pAssocReq->VHTCaps.txAntPattern << + SIR_MAC_VHT_CAP_TX_ANTENNA_PATTERN) | + (pAssocReq->VHTCaps.reserved1 << SIR_MAC_VHT_CAP_RESERVED2)); + } } //Disable BA. It will be set as part of ADDBA negotiation. @@ -2632,6 +2674,11 @@ limDelSta( /* Update PE session ID*/ pDelStaParams->sessionId = psessionEntry->peSessionId; pDelStaParams->smesessionId = psessionEntry->smeSessionId; + + pDelStaParams->staType = pStaDs->staType; + vos_mem_copy((tANI_U8 *)pDelStaParams->staMac, + (tANI_U8 *)pStaDs->staAddr, sizeof(tSirMacAddr)); + pDelStaParams->status = eHAL_STATUS_SUCCESS; msgQ.type = WDA_DELETE_STA_REQ; msgQ.reserved = 0; @@ -3528,9 +3575,43 @@ tSirRetStatus limStaSendAddBss( tpAniSirGlobal pMac, tpSirAssocRsp pAssocRsp, pAddBssParams->currentExtChannel, psessionEntry->apCenterChan, psessionEntry); - vos_mem_copy(&pAddBssParams->staContext.vht_caps, - (tANI_U8 *)&pAssocRsp->VHTCaps + sizeof(tANI_U8), - sizeof(pAddBssParams->staContext.vht_caps)); + + pAddBssParams->staContext.vht_caps = + ((pAssocRsp->VHTCaps.maxMPDULen << SIR_MAC_VHT_CAP_MAX_MPDU_LEN) | + (pAssocRsp->VHTCaps.supportedChannelWidthSet << + SIR_MAC_VHT_CAP_SUPP_CH_WIDTH_SET) | + (pAssocRsp->VHTCaps.ldpcCodingCap << + SIR_MAC_VHT_CAP_LDPC_CODING_CAP) | + (pAssocRsp->VHTCaps.shortGI80MHz << + SIR_MAC_VHT_CAP_SHORTGI_80MHZ) | + (pAssocRsp->VHTCaps.shortGI160and80plus80MHz << + SIR_MAC_VHT_CAP_SHORTGI_160_80_80MHZ) | + (pAssocRsp->VHTCaps.txSTBC << SIR_MAC_VHT_CAP_TXSTBC) | + (pAssocRsp->VHTCaps.rxSTBC << SIR_MAC_VHT_CAP_RXSTBC) | + (pAssocRsp->VHTCaps.suBeamFormerCap << + SIR_MAC_VHT_CAP_SU_BEAMFORMER_CAP) | + (pAssocRsp->VHTCaps.suBeamformeeCap << + SIR_MAC_VHT_CAP_SU_BEAMFORMEE_CAP) | + (pAssocRsp->VHTCaps.csnofBeamformerAntSup << + SIR_MAC_VHT_CAP_CSN_BEAMORMER_ANT_SUP) | + (pAssocRsp->VHTCaps.numSoundingDim << + SIR_MAC_VHT_CAP_NUM_SOUNDING_DIM) | + (pAssocRsp->VHTCaps.muBeamformerCap << + SIR_MAC_VHT_CAP_NUM_BEAM_FORMER_CAP)| + (pAssocRsp->VHTCaps.muBeamformeeCap << + SIR_MAC_VHT_CAP_NUM_BEAM_FORMEE_CAP) | + (pAssocRsp->VHTCaps.vhtTXOPPS << SIR_MAC_VHT_CAP_TXOPPS) | + (pAssocRsp->VHTCaps.htcVHTCap << SIR_MAC_VHT_CAP_HTC_CAP) | + (pAssocRsp->VHTCaps.maxAMPDULenExp << + SIR_MAC_VHT_CAP_MAX_AMDU_LEN_EXPO) | + (pAssocRsp->VHTCaps.vhtLinkAdaptCap << + SIR_MAC_VHT_CAP_LINK_ADAPT_CAP) | + (pAssocRsp->VHTCaps.rxAntPattern << + SIR_MAC_VHT_CAP_RX_ANTENNA_PATTERN) | + (pAssocRsp->VHTCaps.txAntPattern << + SIR_MAC_VHT_CAP_TX_ANTENNA_PATTERN) | + (pAssocRsp->VHTCaps.reserved1 << SIR_MAC_VHT_CAP_RESERVED2)); + pAddBssParams->staContext.maxAmpduSize = SIR_MAC_GET_VHT_MAX_AMPDU_EXPO( pAddBssParams->staContext.vht_caps); diff --git a/CORE/MAC/src/pe/lim/limAssocUtils.h b/CORE/MAC/src/pe/lim/limAssocUtils.h index c3e769e69cd4..8a3ddb0fb799 100644 --- a/CORE/MAC/src/pe/lim/limAssocUtils.h +++ b/CORE/MAC/src/pe/lim/limAssocUtils.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* * This file limAssocUtils.h contains the utility definitions * LIM uses while processing Re/Association messages. diff --git a/CORE/MAC/src/pe/lim/limDebug.c b/CORE/MAC/src/pe/lim/limDebug.c index 72cafe572233..749addfe5b4a 100644 --- a/CORE/MAC/src/pe/lim/limDebug.c +++ b/CORE/MAC/src/pe/lim/limDebug.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /**========================================================================= \file limDebug.c @@ -33,10 +32,6 @@ \author Sunit Bhatia - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ #include "limDebug.h" diff --git a/CORE/MAC/src/pe/lim/limDebug.h b/CORE/MAC/src/pe/lim/limDebug.h index f1ba71c56038..4ef9198870d3 100644 --- a/CORE/MAC/src/pe/lim/limDebug.h +++ b/CORE/MAC/src/pe/lim/limDebug.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* * This file limDebug.h contains log function called by LIM module. * diff --git a/CORE/MAC/src/pe/lim/limFT.c b/CORE/MAC/src/pe/lim/limFT.c index 68f4cb638d50..e9bd75c7ba83 100644 --- a/CORE/MAC/src/pe/lim/limFT.c +++ b/CORE/MAC/src/pe/lim/limFT.c @@ -24,16 +24,11 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifdef WLAN_FEATURE_VOWIFI_11R /**========================================================================= \brief implementation for PE 11r VoWiFi FT Protocol - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ /* $Header$ */ @@ -557,6 +552,8 @@ tSirRetStatus limFTPrepareAddBssReq( tpAniSirGlobal pMac, else pAddBssParams->staContext.wmmEnabled = 0; + pAddBssParams->staContext.wpa_rsn = pBeaconStruct->rsnPresent; + pAddBssParams->staContext.wpa_rsn |= (pBeaconStruct->wpaPresent << 1); //Update the rates #ifdef WLAN_FEATURE_11AC limPopulatePeerRateSet(pMac, &pAddBssParams->staContext.supportedRates, diff --git a/CORE/MAC/src/pe/lim/limIbssPeerMgmt.c b/CORE/MAC/src/pe/lim/limIbssPeerMgmt.c index 096c586e6927..d17c9c288e32 100644 --- a/CORE/MAC/src/pe/lim/limIbssPeerMgmt.c +++ b/CORE/MAC/src/pe/lim/limIbssPeerMgmt.c @@ -24,9 +24,7 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Airgo Networks, Inc proprietary. All rights reserved. * This file limIbssPeerMgmt.cc contains the utility functions * LIM uses to maintain peers in IBSS. * Author: Chandra Modumudi @@ -47,7 +45,6 @@ #include "limSendMessages.h" #include "limSession.h" #include "limIbssPeerMgmt.h" -#include "limRMC.h" /** @@ -822,10 +819,6 @@ void limIbssDelete( tpAniSirGlobal pMac,tpPESession psessionEntry) { -#if defined WLAN_FEATURE_RELIABLE_MCAST - limRmcIbssDelete(pMac); -#endif /* WLAN_FEATURE_RELIABLE_MCAST */ - limIbssDeleteAllPeers(pMac,psessionEntry); ibss_coalesce_free(pMac); @@ -1195,10 +1188,6 @@ limIbssAddStaRsp( eWNI_SME_IBSS_NEW_PEER_IND, psessionEntry->smeSessionId); -#ifdef WLAN_FEATURE_RELIABLE_MCAST - limRmcTriggerLeaderSelection(pMac, psessionEntry->selfMacAddr); -#endif - vos_mem_free(pAddStaParams); return eSIR_SUCCESS; @@ -1399,10 +1388,6 @@ __limIbssSearchAndDeletePeer(tpAniSirGlobal pMac, ucUcastSig = pStaDs->ucUcastSig; ucBcastSig = pStaDs->ucBcastSig; -#if defined WLAN_FEATURE_RELIABLE_MCAST - limRmcTransmitterDelete(pMac, pStaDs->staAddr); -#endif /* WLAN_FEATURE_RELIABLE_MCAST */ - (void) limDelSta(pMac, pStaDs, false /*asynchronous*/, psessionEntry); limDeleteDphHashEntry(pMac, pStaDs->staAddr, peerIdx, psessionEntry); limReleasePeerIdx(pMac, peerIdx, psessionEntry); @@ -1690,10 +1675,6 @@ void limIbssHeartBeatHandle(tpAniSirGlobal pMac,tpPESession psessionEntry) ucUcastSig = pStaDs->ucUcastSig; ucBcastSig = pStaDs->ucBcastSig; -#if defined WLAN_FEATURE_RELIABLE_MCAST - limRmcTransmitterDelete(pMac, pStaDs->staAddr); -#endif /* WLAN_FEATURE_RELIABLE_MCAST */ - (void) limDelSta(pMac, pStaDs, false /*asynchronous*/,psessionEntry); limDeleteDphHashEntry(pMac, pStaDs->staAddr, peerIdx,psessionEntry); limReleasePeerIdx(pMac, peerIdx, psessionEntry); diff --git a/CORE/MAC/src/pe/lim/limIbssPeerMgmt.h b/CORE/MAC/src/pe/lim/limIbssPeerMgmt.h index 81049a73ac16..a88f3dbfc825 100644 --- a/CORE/MAC/src/pe/lim/limIbssPeerMgmt.h +++ b/CORE/MAC/src/pe/lim/limIbssPeerMgmt.h @@ -24,9 +24,8 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Airgo Networks, Inc proprietary. All rights reserved. + * * This file limIbssPeerMgmt.h contains prototypes for * the utility functions LIM uses to maintain peers in IBSS. * Author: Chandra Modumudi diff --git a/CORE/MAC/src/pe/lim/limLinkMonitoringAlgo.c b/CORE/MAC/src/pe/lim/limLinkMonitoringAlgo.c index 547dcdd79a8e..d685e9909797 100644 --- a/CORE/MAC/src/pe/lim/limLinkMonitoringAlgo.c +++ b/CORE/MAC/src/pe/lim/limLinkMonitoringAlgo.c @@ -24,9 +24,7 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Airgo Networks, Inc proprietary. All rights reserved. * This file limLinkMonitoringAlgo.cc contains the code for * Link monitoring algorithm on AP and heart beat failure * handling on STA. diff --git a/CORE/MAC/src/pe/lim/limLogDump.c b/CORE/MAC/src/pe/lim/limLogDump.c index 17329182d0c0..7468c2f27f46 100644 --- a/CORE/MAC/src/pe/lim/limLogDump.c +++ b/CORE/MAC/src/pe/lim/limLogDump.c @@ -24,15 +24,11 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /*============================================================================ limLogDump.c Implements the dump commands specific to the lim module. -Copyright (c) 2007 Qualcomm Technologies, Inc. -All Rights Reserved. -Qualcomm Technologies Confidential and Proprietary ============================================================================*/ #include "vos_types.h" @@ -57,10 +53,6 @@ Qualcomm Technologies Confidential and Proprietary #endif #include "smeInside.h" #include "wlan_qct_wda.h" -#ifdef WLAN_FEATURE_RELIABLE_MCAST -#include "wlan_qct_tl.h" -#include "limRMC.h" -#endif #include "wlan_qct_wdi_dts.h" void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA); @@ -2391,102 +2383,6 @@ dump_lim_get_pkts_rcvd_per_rssi_values( tpAniSirGlobal pMac, tANI_U32 arg1, tANI } #endif -#ifdef WLAN_FEATURE_RELIABLE_MCAST - -static char * -dump_lim_enable_reliable_mcast_data_path -( - tpAniSirGlobal pMac, - tANI_U32 arg1, - tANI_U32 arg2, - tANI_U32 arg3, - tANI_U32 arg4, - char *p -) -{ - v_MACADDR_t reliableMcastTransmitterAddr; - v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL); - - reliableMcastTransmitterAddr.bytes[0] = (tANI_U8)((arg1 & 0xFF000000) >> 24); - reliableMcastTransmitterAddr.bytes[1] = (tANI_U8)((arg1 & 0x00FF0000) >> 16); - reliableMcastTransmitterAddr.bytes[2] = (tANI_U8)((arg1 & 0x0000FF00) >> 8); - reliableMcastTransmitterAddr.bytes[3] = (tANI_U8)((arg1 & 0x000000FF)); - reliableMcastTransmitterAddr.bytes[4] = (tANI_U8)((arg2 & 0xFF000000) >> 24); - reliableMcastTransmitterAddr.bytes[5] = (tANI_U8)((arg2 & 0x00FF0000) >> 16); - - limLog(pMac, LOGE, - FL("Enable RMCAST data path for MCAST transmitter:" MAC_ADDRESS_STR), - MAC_ADDR_ARRAY( reliableMcastTransmitterAddr.bytes)); - - /*Input format is in MAC address fromat for example - iwpriv wlan0 dump 0xaabbccdd 0xeeff0000 translates into enable RMCAST for - MAC address 0xaa:0xbb:0xcc:0xdd:0xee:0xff*/ - - /*Enable TL data path*/ - WLANTL_EnableReliableMcast( pVosContext, &reliableMcastTransmitterAddr ); - - return p; -} - -static char * -dump_lim_disable_reliable_mcast_data_path -( - tpAniSirGlobal pMac, - tANI_U32 arg1, - tANI_U32 arg2, - tANI_U32 arg3, - tANI_U32 arg4, - char *p -) -{ - v_MACADDR_t reliableMcastTransmitterAddr; - v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL); - - reliableMcastTransmitterAddr.bytes[0] = (tANI_U8)((arg1 & 0xFF000000) >> 24); - reliableMcastTransmitterAddr.bytes[1] = (tANI_U8)((arg1 & 0x00FF0000) >> 16); - reliableMcastTransmitterAddr.bytes[2] = (tANI_U8)((arg1 & 0x0000FF00) >> 8); - reliableMcastTransmitterAddr.bytes[3] = (tANI_U8)((arg1 & 0x000000FF)); - reliableMcastTransmitterAddr.bytes[4] = (tANI_U8)((arg2 & 0xFF000000) >> 24); - reliableMcastTransmitterAddr.bytes[5] = (tANI_U8)((arg2 & 0x00FF0000) >> 16); - - - limLog(pMac, LOGE, - FL("Disable RMCAST data path for MCAST transmitter:" MAC_ADDRESS_STR), - MAC_ADDR_ARRAY( reliableMcastTransmitterAddr.bytes)); - - /*Input format is in MAC address fromat for example - iwpriv wlan0 dump 0xaabbccdd 0xeeff0000 translates into enable RMCAST for - MAC address 0xaa:0xbb:0xcc:0xdd:0xee:0xff*/ - - /*Disable TL data path*/ - WLANTL_DisableReliableMcast( pVosContext, &reliableMcastTransmitterAddr ); - - return p; -} - -static char * -dump_lim_rmc_status(tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2, - tANI_U32 arg3, tANI_U32 arg4, char *p) -{ - limRmcDumpStatus(pMac); - return p; -} - -static char * -dump_set_mcast_dup_detect(tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2, - tANI_U32 arg3, tANI_U32 arg4, char *p) -{ - v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL); - v_U8_t enable; - - enable = (tANI_U8)arg1; - - /* Enable or Disable Multicast Duplicate Detection */ - WLANTL_SetMcastDuplicateDetection( pVosContext, enable); - - return p; -} -#endif /* WLAN_FEATURE_RELIABLE_MCAST */ /* API to fill Rate Info based on mac efficiency * arg 1: mac efficiency to be used to calculate mac thorughput for a given rate index @@ -2576,19 +2472,9 @@ static tDumpFuncEntry limMenuDumpTable[] = { {369, "PE.LIM: pkts/rateIdx: iwpriv wlan0 dump 369 ", dump_lim_get_pkts_rcvd_per_rate_idx}, {370, "PE.LIM: pkts/rssi: : iwpriv wlan0 dump 370 ", dump_lim_get_pkts_rcvd_per_rssi_values}, #endif -#ifdef WLAN_FEATURE_RELIABLE_MCAST - {371, "PE.LIM: Enable RMCAST data path in TL for input MCAST addr", - dump_lim_enable_reliable_mcast_data_path }, - {372, "PE.LIM: Disable RMCAST data path in TL for input MCAST addr", - dump_lim_disable_reliable_mcast_data_path }, - {373, "PE.LIM: Dump RMCAST transmitter and leader status", dump_lim_rmc_status }, -#endif /* WLAN_FEATURE_RELIABLE_MCAST */ #ifndef QCA_WIFI_2_0 - {374, "PE.LIM: MAS RX stats MAC eff ", dump_limRateInfoBasedOnMacEff}, + {371, "PE.LIM: MAS RX stats MAC eff ", dump_limRateInfoBasedOnMacEff}, #endif /* QCA_WIFI_2_0 */ -#ifdef WLAN_FEATURE_RELIABLE_MCAST - {375, "PE.LIM: Enable(1)/Disable(0) RMCAST duplicate detection", dump_set_mcast_dup_detect }, -#endif /* WLAN_FEATURE_RELIABLE_MCAST */ }; diff --git a/CORE/MAC/src/pe/lim/limP2P.c b/CORE/MAC/src/pe/lim/limP2P.c index 10ac3fe93187..4491a25ed382 100644 --- a/CORE/MAC/src/pe/lim/limP2P.c +++ b/CORE/MAC/src/pe/lim/limP2P.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /*=========================================================================== L I M _ P 2 P . C @@ -33,9 +32,6 @@ This software unit holds the implementation of the WLAN Protocol Engine for P2P. - Copyright (c) 2011 Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ===========================================================================*/ /*=========================================================================== diff --git a/CORE/MAC/src/pe/lim/limProcessActionFrame.c b/CORE/MAC/src/pe/lim/limProcessActionFrame.c index 7fb9f729f6a3..25225c5a055c 100644 --- a/CORE/MAC/src/pe/lim/limProcessActionFrame.c +++ b/CORE/MAC/src/pe/lim/limProcessActionFrame.c @@ -24,9 +24,7 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Airgo Networks, Inc proprietary. All rights reserved. * This file limProcessActionFrame.cc contains the code * for processing Action Frame. * Author: Michael Lui @@ -57,7 +55,6 @@ #include "rrmApi.h" #endif #include "limSessionUtils.h" -#include "limRMC.h" #if defined(FEATURE_WLAN_CCX) && !defined(FEATURE_WLAN_CCX_UPLOAD) #include "ccxApi.h" @@ -2309,8 +2306,7 @@ limProcessActionFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo,tpPESession ps } break; #endif -#if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR) \ - || defined (WLAN_FEATURE_RELIABLE_MCAST) +#if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR) case SIR_MAC_ACTION_VENDOR_SPECIFIC_CATEGORY: { tpSirMacVendorSpecificFrameHdr pVendorSpecific = (tpSirMacVendorSpecificFrameHdr) pActionHdr; @@ -2336,57 +2332,6 @@ limProcessActionFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo,tpPESession ps (tANI_U8*)pHdr, frameLen + sizeof(tSirMacMgmtHdr), 0, WDA_GET_RX_CH( pRxPacketInfo ), psessionEntry, 0); } -#if defined (WLAN_FEATURE_RELIABLE_MCAST) - else if ((eLIM_STA_IN_IBSS_ROLE == psessionEntry->limSystemRole) && - ((VOS_TRUE == vos_mem_compare(SIR_MAC_RMC_MCAST_ADDRESS, - &pHdr->da[0], sizeof(tSirMacAddr))) || - (VOS_TRUE == vos_mem_compare(psessionEntry->selfMacAddr, - &pHdr->da[0], sizeof(tSirMacAddr)))) && - vos_mem_compare(pVendorSpecific->Oui, SIR_MAC_RMC_OUI, 3)) - { - tANI_U8 MagicCode[] = - { 0x4f, 0x58, 0x59, 0x47, 0x45, 0x4e }; /* "OXYGEN" */ - tpSirMacOxygenNetworkFrameHdr pOxygenHdr = - (tpSirMacOxygenNetworkFrameHdr) pActionHdr; - - if (vos_mem_compare(pOxygenHdr->MagicCode, - MagicCode, sizeof(MagicCode)) && - pOxygenHdr->version == SIR_MAC_RMC_VER ) - { - switch (pOxygenHdr->actionID) - { - default: - PELOGE(limLog(pMac, LOGE, - FL("Action RMC actionID %d not handled"), - pOxygenHdr->actionID);) - break; - case SIR_MAC_RMC_LEADER_INFORM_SELECTED: - PELOG1(limLog(pMac, LOG1, - FL("Action RMC LEADER_INFORM_SELECTED."));) - limProcessRMCMessages(pMac, - eLIM_RMC_OTA_LEADER_INFORM_SELECTED, - (tANI_U32 *)pRxPacketInfo); - break; - case SIR_MAC_RMC_LEADER_INFORM_CANCELLED: - PELOG1(limLog(pMac, LOG1, - FL("Action RMC LEADER_INFORM_CANCELLED."));) - limProcessRMCMessages(pMac, - eLIM_RMC_OTA_LEADER_INFORM_CANCELLED, - (tANI_U32 *)pRxPacketInfo); - break; - } - } - else - { - limLog( pMac, LOGE, - FL("Dropping the vendor specific action frame in IBSS " - "mode because of Oxygen Magic mismatch " - MAC_ADDRESS_STR " or Version mismatch = %d"), - MAC_ADDR_ARRAY(pOxygenHdr->MagicCode), - pOxygenHdr->version ); - } - } -#endif /* WLAN_FEATURE_RELIABLE_MCAST */ else { limLog( pMac, LOGE, FL("Dropping the vendor specific action frame because of( " @@ -2400,7 +2345,7 @@ limProcessActionFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo,tpPESession ps } break; #endif /* WLAN_FEATURE_VOWIFI_11R || FEATURE_WLAN_CCX || - FEATURE_WLAN_LFR || WLAN_FEATURE_RELIABLE_MCAST */ + FEATURE_WLAN_LFR */ case SIR_MAC_ACTION_PUBLIC_USAGE: switch(pActionHdr->actionID) { case SIR_MAC_ACTION_VENDOR_SPECIFIC: diff --git a/CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c b/CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c index 711e3c8b64ae..6ca8ca045bf8 100644 --- a/CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c +++ b/CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c @@ -24,9 +24,7 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Airgo Networks, Inc proprietary. All rights reserved. * This file limProcessAssocReqFrame.cc contains the code * for processing Re/Association Request Frame. * Author: Chandra Modumudi @@ -1077,6 +1075,7 @@ sendIndToSme: pStaDs->vhtSupportedChannelWidthSet = (tANI_U8)((pStaDs->htSupportedChannelWidthSet == eHT_CHANNEL_WIDTH_20MHZ) ? WNI_CFG_VHT_CHANNEL_WIDTH_20_40MHZ : psessionEntry->vhtTxChannelWidthSet ); + pStaDs->htMaxRxAMpduFactor = pAssocReq->VHTCaps.maxAMPDULenExp; } // Lesser among the AP and STA bandwidth of operation. diff --git a/CORE/MAC/src/pe/lim/limProcessAssocRspFrame.c b/CORE/MAC/src/pe/lim/limProcessAssocRspFrame.c index 253693ad8475..34a012cba33a 100644 --- a/CORE/MAC/src/pe/lim/limProcessAssocRspFrame.c +++ b/CORE/MAC/src/pe/lim/limProcessAssocRspFrame.c @@ -24,9 +24,8 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Airgo Networks, Inc proprietary. All rights reserved. + * * This file limProcessAssocRspFrame.cc contains the code * for processing Re/Association Response Frame. * Author: Chandra Modumudi diff --git a/CORE/MAC/src/pe/lim/limProcessAuthFrame.c b/CORE/MAC/src/pe/lim/limProcessAuthFrame.c index c51940061c5a..5bb7a4efbbc6 100644 --- a/CORE/MAC/src/pe/lim/limProcessAuthFrame.c +++ b/CORE/MAC/src/pe/lim/limProcessAuthFrame.c @@ -24,9 +24,8 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Airgo Networks, Inc proprietary. All rights reserved. + * * This file limProcessAuthFrame.cc contains the code * for processing received Authentication Frame. * Author: Chandra Modumudi diff --git a/CORE/MAC/src/pe/lim/limProcessBeaconFrame.c b/CORE/MAC/src/pe/lim/limProcessBeaconFrame.c index 251d54cf039a..3f32cd77d22f 100644 --- a/CORE/MAC/src/pe/lim/limProcessBeaconFrame.c +++ b/CORE/MAC/src/pe/lim/limProcessBeaconFrame.c @@ -24,9 +24,8 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Airgo Networks, Inc proprietary. All rights reserved. + * * This file limProcessBeaconFrame.cc contains the code * for processing Received Beacon Frame. * Author: Chandra Modumudi diff --git a/CORE/MAC/src/pe/lim/limProcessCfgUpdates.c b/CORE/MAC/src/pe/lim/limProcessCfgUpdates.c index e1e3b5ceb748..f87d74690d5b 100644 --- a/CORE/MAC/src/pe/lim/limProcessCfgUpdates.c +++ b/CORE/MAC/src/pe/lim/limProcessCfgUpdates.c @@ -24,9 +24,7 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Airgo Networks, Inc proprietary. All rights reserved. * This file limProcessCfgUpdates.cc contains the utility functions * to handle various CFG parameter update events * Author: Chandra Modumudi diff --git a/CORE/MAC/src/pe/lim/limProcessDeauthFrame.c b/CORE/MAC/src/pe/lim/limProcessDeauthFrame.c index 2cbdfb0f10c7..585df34ef623 100644 --- a/CORE/MAC/src/pe/lim/limProcessDeauthFrame.c +++ b/CORE/MAC/src/pe/lim/limProcessDeauthFrame.c @@ -24,9 +24,8 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Airgo Networks, Inc proprietary. All rights reserved. + * * This file limProcessDeauthFrame.cc contains the code * for processing Deauthentication Frame. * Author: Chandra Modumudi diff --git a/CORE/MAC/src/pe/lim/limProcessDisassocFrame.c b/CORE/MAC/src/pe/lim/limProcessDisassocFrame.c index 1bb77460fec6..48b047a9a738 100644 --- a/CORE/MAC/src/pe/lim/limProcessDisassocFrame.c +++ b/CORE/MAC/src/pe/lim/limProcessDisassocFrame.c @@ -24,9 +24,8 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Airgo Networks, Inc proprietary. All rights reserved. + * * This file limProcessDisassocFrame.cc contains the code * for processing Disassocation Frame. * Author: Chandra Modumudi diff --git a/CORE/MAC/src/pe/lim/limProcessLmmMessages.c b/CORE/MAC/src/pe/lim/limProcessLmmMessages.c index f98259616b6a..921ae8de863d 100644 --- a/CORE/MAC/src/pe/lim/limProcessLmmMessages.c +++ b/CORE/MAC/src/pe/lim/limProcessLmmMessages.c @@ -24,10 +24,8 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* * - * Airgo Networks, Inc proprietary. All rights reserved. * This file limProcessLmmMessages.cc contains the code * for processing SME/LMM messages related to ANI feature set. * Author: Chandra Modumudi diff --git a/CORE/MAC/src/pe/lim/limProcessMessageQueue.c b/CORE/MAC/src/pe/lim/limProcessMessageQueue.c index 7df9defb5c73..42ef0936b4db 100644 --- a/CORE/MAC/src/pe/lim/limProcessMessageQueue.c +++ b/CORE/MAC/src/pe/lim/limProcessMessageQueue.c @@ -24,9 +24,7 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Airgo Networks, Inc proprietary. All rights reserved. * This file lim ProcessMessageQueue.cc contains the code * for processing LIM message Queue. * Author: Chandra Modumudi @@ -73,8 +71,6 @@ #include "wmmApsd.h" #endif -#include "limRMC.h" - #include "vos_types.h" #include "vos_packet.h" #include "vos_memory.h" @@ -1380,17 +1376,6 @@ limProcessMessages(tpAniSirGlobal pMac, tpSirMsgQ limMsg) break; } -#if defined WLAN_FEATURE_RELIABLE_MCAST - case eWNI_SME_ENABLE_RMC_REQ: - case eWNI_SME_DISABLE_RMC_REQ: - /* - * These messages are from HDD - * No need to response to hdd - */ - limProcessSmeReqMessages(pMac,limMsg); - break; -#endif /* WLAN_FEATURE_RELIABLE_MCAST */ - case SIR_HAL_P2P_NOA_START_IND: { tpPESession psessionEntry = &pMac->lim.gpSession[0]; @@ -1783,6 +1768,19 @@ limProcessMessages(tpAniSirGlobal pMac, tpSirMsgQ limMsg) break; #endif +#ifdef FEATURE_WLAN_TDLS +#ifdef QCA_WIFI_2_0 + case SIR_HAL_TDLS_SHOULD_DISCOVER: + case SIR_HAL_TDLS_SHOULD_TEARDOWN: + case SIR_HAL_TDLS_PEER_DISCONNECTED: + VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO, + ("%s received tdls event: 0x%x"), + __func__, limMsg->type); + limSendSmeTdlsEventNotify(pMac, limMsg->type, + (void *)limMsg->bodyptr); + break; +#endif +#endif #ifdef FEATURE_WLAN_TDLS_INTERNAL /* @@ -2067,28 +2065,6 @@ limProcessMessages(tpAniSirGlobal pMac, tpSirMsgQ limMsg) limMsg->bodyptr = NULL; break; } -#if defined WLAN_FEATURE_RELIABLE_MCAST - case WDA_RMC_BECOME_LEADER: - limProcessRMCMessages(pMac, eLIM_RMC_BECOME_LEADER_RESP, - (void *)limMsg->bodyptr); - vos_mem_free((v_VOID_t*)limMsg->bodyptr); - limMsg->bodyptr = NULL; - break ; - - case WDA_RMC_LEADER_SELECT_RESP: - limProcessRMCMessages(pMac, eLIM_RMC_LEADER_SELECT_RESP, - (void *)limMsg->bodyptr); - vos_mem_free((v_VOID_t*)limMsg->bodyptr); - limMsg->bodyptr = NULL; - break ; - - case WDA_RMC_UPDATE_IND: - limProcessRMCMessages(pMac, eLIM_RMC_LEADER_PICK_NEW, - (void *)limMsg->bodyptr); - vos_mem_free((v_VOID_t*)limMsg->bodyptr); - limMsg->bodyptr = NULL; - break ; -#endif /* defined WLAN_FEATURE_RELIABLE_MCAST */ default: vos_mem_free((v_VOID_t*)limMsg->bodyptr); diff --git a/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c b/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c index 66de9c2cce61..fd9b6267e6e2 100644 --- a/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c +++ b/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c @@ -24,9 +24,7 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Airgo Networks, Inc proprietary. All rights reserved. * This file limProcessMlmMessages.cc contains the code * for processing MLM request messages. * Author: Chandra Modumudi diff --git a/CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c b/CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c index 7e3a12ec9308..2fafc8383623 100644 --- a/CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c +++ b/CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c @@ -24,9 +24,7 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Airgo Networks, Inc proprietary. All rights reserved. * This file limProcessMlmRspMessages.cc contains the code * for processing response messages from MLM state machine. * Author: Chandra Modumudi diff --git a/CORE/MAC/src/pe/lim/limProcessProbeReqFrame.c b/CORE/MAC/src/pe/lim/limProcessProbeReqFrame.c index aef1e5a2f5b3..53bf784d2493 100644 --- a/CORE/MAC/src/pe/lim/limProcessProbeReqFrame.c +++ b/CORE/MAC/src/pe/lim/limProcessProbeReqFrame.c @@ -24,9 +24,7 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Airgo Networks, Inc proprietary. All rights reserved. * This file limProcessProbeReqFrame.cc contains the code * for processing Probe Request Frame. * Author: Chandra Modumudi diff --git a/CORE/MAC/src/pe/lim/limProcessProbeRspFrame.c b/CORE/MAC/src/pe/lim/limProcessProbeRspFrame.c index 61f631afae8b..389a55b5f6ab 100644 --- a/CORE/MAC/src/pe/lim/limProcessProbeRspFrame.c +++ b/CORE/MAC/src/pe/lim/limProcessProbeRspFrame.c @@ -24,9 +24,8 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Airgo Networks, Inc proprietary. All rights reserved. + * * This file limProcessProbeRspFrame.cc contains the code * for processing Probe Response Frame. * Author: Chandra Modumudi @@ -154,8 +153,7 @@ limProcessProbeRspFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo,tpPESession * * Ignore Probe Response frame in all other states */ - /* */ - // TO SUPPORT BT-AMP + // TO SUPPORT BT-AMP if (((pMac->lim.gLimMlmState == eLIM_MLM_WT_PROBE_RESP_STATE) || //mlm state check should be global - 18th oct (pMac->lim.gLimMlmState == eLIM_MLM_PASSIVE_SCAN_STATE) || //mlm state check should be global - 18th oct (pMac->lim.gLimMlmState == eLIM_MLM_LEARN_STATE) || //mlm state check should be global - 18th oct diff --git a/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c b/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c index 68b77351ceeb..2280d94cb328 100644 --- a/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c +++ b/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c @@ -24,9 +24,7 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Airgo Networks, Inc proprietary. All rights reserved. * This file limProcessSmeReqMessages.cc contains the code * for processing SME request messages. * Author: Chandra Modumudi @@ -56,7 +54,6 @@ #include "limSendMessages.h" #include "limApi.h" #include "wmmApsd.h" -#include "limRMC.h" #include "sapApi.h" @@ -680,6 +677,9 @@ __limHandleSmeStartBssRequest(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) break; case eSIR_IBSS_MODE: psessionEntry->limSystemRole = eLIM_STA_IN_IBSS_ROLE; + psessionEntry->shortSlotTimeSupported = + limGetShortSlotFromPhyMode(pMac, psessionEntry, + psessionEntry->gLimPhyMode); break; case eSIR_BTAMP_AP_MODE: @@ -5014,9 +5014,11 @@ tANI_U32 limCalculateNOADuration(tpAniSirGlobal pMac, tANI_U16 msgType, tANI_U32 break; } +#ifdef FEATURE_OEM_DATA_SUPPORT case eWNI_SME_OEM_DATA_REQ: noaDuration = OEM_DATA_NOA_DURATION*CONV_MS_TO_US; // use 60 msec as default break; +#endif case eWNI_SME_REMAIN_ON_CHANNEL_REQ: { @@ -5051,9 +5053,11 @@ void limProcessRegdDefdSmeReqAfterNOAStart(tpAniSirGlobal pMac) case eWNI_SME_SCAN_REQ: __limProcessSmeScanReq(pMac, pMac->lim.gpDefdSmeMsgForNOA); break; +#ifdef FEATURE_OEM_DATA_SUPPORT case eWNI_SME_OEM_DATA_REQ: __limProcessSmeOemDataReq(pMac, pMac->lim.gpDefdSmeMsgForNOA); break; +#endif case eWNI_SME_REMAIN_ON_CHANNEL_REQ: bufConsumed = limProcessRemainOnChnlReq(pMac, pMac->lim.gpDefdSmeMsgForNOA); /* limProcessRemainOnChnlReq doesnt want us to free the buffer since @@ -5484,7 +5488,9 @@ limProcessSmeReqMessages(tpAniSirGlobal pMac, tpSirMsgQ pMsg) /* * Do not add BREAK here */ +#ifdef FEATURE_OEM_DATA_SUPPORT case eWNI_SME_OEM_DATA_REQ: +#endif case eWNI_SME_JOIN_REQ: /* If we have an existing P2P GO session we need to insert NOA before actually process this SME Req */ if ((limIsNOAInsertReqd(pMac) == TRUE) && IS_FEATURE_SUPPORTED_BY_FW(P2P_GO_NOA_DECOUPLE_INIT_SCAN)) @@ -5732,16 +5738,6 @@ limProcessSmeReqMessages(tpAniSirGlobal pMac, tpSirMsgQ pMsg) limSendSetTxPowerReq(pMac, pMsgBuf); break ; -#if defined WLAN_FEATURE_RELIABLE_MCAST - case eWNI_SME_ENABLE_RMC_REQ: - limProcessRMCMessages(pMac, eLIM_RMC_ENABLE_REQ, pMsgBuf); - break ; - - case eWNI_SME_DISABLE_RMC_REQ: - limProcessRMCMessages(pMac, eLIM_RMC_DISABLE_REQ, pMsgBuf); - break ; -#endif /* defined WLAN_FEATURE_RELIABLE_MCAST */ - default: vos_mem_free((v_VOID_t*)pMsg->bodyptr); pMsg->bodyptr = NULL; diff --git a/CORE/MAC/src/pe/lim/limProcessTdls.c b/CORE/MAC/src/pe/lim/limProcessTdls.c index 69c3f153c20f..60a4d6a376b6 100644 --- a/CORE/MAC/src/pe/lim/limProcessTdls.c +++ b/CORE/MAC/src/pe/lim/limProcessTdls.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /*=========================================================================== limProcessTdls.c @@ -35,9 +34,6 @@ Are listed for each API below. - Copyright (c) 2010 Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ===========================================================================*/ /*=========================================================================== @@ -1175,13 +1171,27 @@ static tSirRetStatus limSendTdlsDisRspFrame(tpAniSirGlobal pMac, * Transmit Discovery response and watch if this is delivered to * peer STA. */ +#ifdef QCA_WIFI_2_0 + /* In CLD 2.0, pass Discovery Response as mgmt frame so that + * wma does not do header conversion to 802.3 before calling tx/rx + * routine and subsequenly target also sends frame as is OTA + */ + halstatus = halTxFrameWithTxComplete( pMac, pPacket, ( tANI_U16 ) nBytes, + HAL_TXRX_FRM_802_11_MGMT, + ANI_TXDIR_IBSS, + 0, + limTxComplete, pFrame, + limMgmtTXComplete, + HAL_USE_SELF_STA_REQUESTED_MASK, smeSessionId ); +#else halstatus = halTxFrameWithTxComplete( pMac, pPacket, ( tANI_U16 ) nBytes, HAL_TXRX_FRM_802_11_DATA, ANI_TXDIR_IBSS, 0, - limTxComplete, pFrame, + limTxComplete, pFrame, limMgmtTXComplete, HAL_USE_SELF_STA_REQUESTED_MASK, smeSessionId ); +#endif if ( ! HAL_STATUS_SUCCESS ( halstatus ) ) { pMac->lim.mgmtFrameSessionId = 0xff; @@ -4389,7 +4399,6 @@ static tSirRetStatus limTdlsLinkEstablish(tpAniSirGlobal pMac, tSirMacAddr peerM return eHAL_STATUS_FAILURE; } - /* */ pStaDs = dphLookupHashEntry(pMac, peerMac, &aid, &psessionEntry->dph.dphHashTable) ; if(pStaDs == NULL) { VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, diff --git a/CORE/MAC/src/pe/lim/limPropExtsUtils.c b/CORE/MAC/src/pe/lim/limPropExtsUtils.c index a66364b315a2..87a1b704ce60 100644 --- a/CORE/MAC/src/pe/lim/limPropExtsUtils.c +++ b/CORE/MAC/src/pe/lim/limPropExtsUtils.c @@ -24,9 +24,8 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Airgo Networks, Inc proprietary. All rights reserved. + * * This file limPropExtsUtils.cc contains the utility functions * to populate, parse proprietary extensions required to * support ANI feature set. diff --git a/CORE/MAC/src/pe/lim/limPropExtsUtils.h b/CORE/MAC/src/pe/lim/limPropExtsUtils.h index eb2a01f27f85..b375e7d67e01 100644 --- a/CORE/MAC/src/pe/lim/limPropExtsUtils.h +++ b/CORE/MAC/src/pe/lim/limPropExtsUtils.h @@ -24,10 +24,8 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* * - * Airgo Networks, Inc proprietary. All rights reserved. * This file limPropExtsUtils.h contains the definitions * used by all LIM modules to support proprietary features. * Author: Chandra Modumudi diff --git a/CORE/MAC/src/pe/lim/limRoamingAlgo.c b/CORE/MAC/src/pe/lim/limRoamingAlgo.c index d41b529a37d7..e0bbbdd289e3 100644 --- a/CORE/MAC/src/pe/lim/limRoamingAlgo.c +++ b/CORE/MAC/src/pe/lim/limRoamingAlgo.c @@ -24,9 +24,8 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Airgo Networks, Inc proprietary. All rights reserved. + * * This file limRoamingAlgo.cc contains the code for LIM * algorithms. * Author: Chandra Modumudi diff --git a/CORE/MAC/src/pe/lim/limScanResultUtils.c b/CORE/MAC/src/pe/lim/limScanResultUtils.c index 747a3bd7c65d..4755a6074981 100644 --- a/CORE/MAC/src/pe/lim/limScanResultUtils.c +++ b/CORE/MAC/src/pe/lim/limScanResultUtils.c @@ -24,9 +24,7 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Airgo Networks, Inc proprietary. All rights reserved. * This file limScanResultUtils.cc contains the utility functions * LIM uses for maintaining and accessing scan results on STA. * Author: Chandra Modumudi diff --git a/CORE/MAC/src/pe/lim/limScanResultUtils.h b/CORE/MAC/src/pe/lim/limScanResultUtils.h index 8e43996e2c11..f83415a7ec89 100644 --- a/CORE/MAC/src/pe/lim/limScanResultUtils.h +++ b/CORE/MAC/src/pe/lim/limScanResultUtils.h @@ -24,9 +24,7 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Airgo Networks, Inc proprietary. All rights reserved. * This file limScanResultUtils.h contains the utility definitions * LIM uses for maintaining and accessing scan results on STA. * Author: Chandra Modumudi diff --git a/CORE/MAC/src/pe/lim/limSecurityUtils.c b/CORE/MAC/src/pe/lim/limSecurityUtils.c index c0e572aca048..696eb19e1423 100644 --- a/CORE/MAC/src/pe/lim/limSecurityUtils.c +++ b/CORE/MAC/src/pe/lim/limSecurityUtils.c @@ -24,9 +24,8 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Airgo Networks, Inc proprietary. All rights reserved. + * * This file limUtils.cc contains the utility functions * LIM uses. * Author: Chandra Modumudi diff --git a/CORE/MAC/src/pe/lim/limSecurityUtils.h b/CORE/MAC/src/pe/lim/limSecurityUtils.h index 471042614974..cf1b8d966ab7 100644 --- a/CORE/MAC/src/pe/lim/limSecurityUtils.h +++ b/CORE/MAC/src/pe/lim/limSecurityUtils.h @@ -24,10 +24,8 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* * - * Airgo Networks, Inc proprietary. All rights reserved. * This file limSecurityUtils.h contains the utility definitions * related to WEP encryption/decryption etc. * Author: Chandra Modumudi diff --git a/CORE/MAC/src/pe/lim/limSendManagementFrames.c b/CORE/MAC/src/pe/lim/limSendManagementFrames.c index f764e32b6bf4..74ecb3eb0da2 100644 --- a/CORE/MAC/src/pe/lim/limSendManagementFrames.c +++ b/CORE/MAC/src/pe/lim/limSendManagementFrames.c @@ -24,14 +24,11 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /** * \file limSendManagementFrames.c * * \brief Code for preparing and sending 802.11 Management frames * - * Copyright (C) 2005-2007 Airgo Networks, Incorporated - * */ #include "sirApi.h" @@ -6174,138 +6171,3 @@ returnAfterError: } // End limSendSaQueryResponseFrame #endif -#if defined WLAN_FEATURE_RELIABLE_MCAST -tSirRetStatus -limSendRMCActionFrame(tpAniSirGlobal pMac, - tSirMacAddr peerMacAddr, - tSirRMCInfo *pRMC, - tpPESession psessionEntry) -{ - tSirRetStatus nSirStatus; - tANI_U8 *pFrame; - tDot11fRMC RMC; - tANI_U32 nPayload, nBytes, nStatus; - tpSirMacMgmtHdr pMacHdr; - void *pPacket; - eHalStatus halstatus; - tANI_U8 txFlag = 0; - tANI_U8 smeSessionId = 0; - - - if (NULL == psessionEntry) - { - return eSIR_FAILURE; - } - - smeSessionId = psessionEntry->smeSessionId; - - vos_mem_set(( tANI_U8* )&RMC, sizeof( RMC ), 0); - - RMC.Action.action = pRMC->action; - RMC.RMCDialogToken.token = pRMC->dialogToken; - RMC.Category.category = SIR_MAC_ACTION_VENDOR_SPECIFIC_CATEGORY; - RMC.RMCVersion.version = SIR_MAC_RMC_VER; - - vos_mem_copy(&RMC.RMCOUI.oui, SIR_MAC_RMC_OUI, SIR_MAC_RMC_OUI_SIZE); - - vos_mem_copy(&RMC.MagicCode.magic, SIR_MAC_OXYGEN_MAGIC_CODE, - SIR_MAC_OXYGEN_MAGIC_CODE_SIZE); - - vos_mem_copy(&RMC.Leader.mac, pRMC->mcastLeader, sizeof(tSirMacAddr)); - - nStatus = dot11fGetPackedRMCSize( pMac, &RMC, &nPayload ); - if ( DOT11F_FAILED( nStatus ) ) - { - limLog( pMac, LOGE, FL("Failed to calculate the packed size for " - "an RMC (0x%08x)."), - nStatus ); - // We'll fall back on the worst case scenario: - nPayload = sizeof( tDot11fRMC ); - } - else if ( DOT11F_WARNED( nStatus ) ) - { - limLog( pMac, LOGW, FL("There were warnings while calculating " - "the packed size for an RMC Action Frame" - " (0x%08x)."), nStatus ); - } - - nBytes = nPayload + sizeof( tSirMacMgmtHdr ); - - halstatus = palPktAlloc( pMac->hHdd, HAL_TXRX_FRM_802_11_MGMT, - ( tANI_U16 )nBytes, ( void** ) &pFrame, - ( void** ) &pPacket ); - if ( ! HAL_STATUS_SUCCESS ( halstatus ) ) - { - limLog( pMac, LOGP, FL("Failed to allocate %d bytes for an RMC " - "Action Frame."), nBytes ); - return eSIR_FAILURE; - } - - // Paranoia: - vos_mem_set( pFrame, nBytes, 0 ); - - // Next, we fill out the buffer descriptor: - nSirStatus = limPopulateMacHeader( pMac, pFrame, SIR_MAC_MGMT_FRAME, - SIR_MAC_MGMT_ACTION, peerMacAddr, - psessionEntry->selfMacAddr); - if ( eSIR_SUCCESS != nSirStatus ) - { - limLog( pMac, LOGE, FL("Failed to populate the buffer descriptor " - "for an RMC Action Frame (%d)."), - nSirStatus ); - palPktFree( pMac->hHdd, HAL_TXRX_FRM_802_11_MGMT, - ( void* ) pFrame, ( void* ) pPacket ); - return nSirStatus; - } - - // Update A3 with the BSSID - pMacHdr = ( tpSirMacMgmtHdr ) pFrame; - sirCopyMacAddr(pMacHdr->bssId,psessionEntry->bssId); - - // That done, pack the struct: - nStatus = dot11fPackRMC( pMac, &RMC, - pFrame + sizeof(tSirMacMgmtHdr), - nPayload, &nPayload ); - if ( DOT11F_FAILED( nStatus ) ) - { - limLog( pMac, LOGE, FL("Failed to pack an RMC " - "(0x%08x)."), - nStatus ); - palPktFree( pMac->hHdd, HAL_TXRX_FRM_802_11_MGMT, ( void* ) pFrame, - ( void* ) pPacket ); - return eSIR_FAILURE; - } - else if ( DOT11F_WARNED( nStatus ) ) - { - limLog( pMac, LOGW, FL("There were warnings while packing " - "an RMC (0x%08x)."), nStatus ); - } - - PELOG3(limLog( pMac, LOG3, FL("Sending an RMC Action frame to " - MAC_ADDRESS_STR), MAC_ADDR_ARRAY(peerMacAddr) );) - - /* - * With this masking, RMC action frames will be sent - * at self-sta rates for both 2G and 5G bands. - */ - txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK; - - // Queue RMC Action frame in high priority WQ - halstatus = halTxFrame( pMac, pPacket, ( tANI_U16 ) nBytes, - HAL_TXRX_FRM_802_11_MGMT, - ANI_TXDIR_TODS, - 7,//SMAC_SWBD_TX_TID_MGMT_HIGH, - limTxComplete, pFrame, txFlag, smeSessionId ); - if ( ! HAL_STATUS_SUCCESS ( halstatus ) ) - { - limLog( pMac, LOGE, FL( "*** Could not send an RMC Action frame" - " (%X) ***" ), halstatus ); - //Pkt will be freed up by the callback - return eSIR_FAILURE; - } - - return eSIR_SUCCESS; - -} // End limSendRMCActionFrame. - -#endif /* WLAN_FEATURE_RELIABLE_MCAST */ diff --git a/CORE/MAC/src/pe/lim/limSendMessages.c b/CORE/MAC/src/pe/lim/limSendMessages.c index e22905b08ef1..9b54b09b4e3a 100644 --- a/CORE/MAC/src/pe/lim/limSendMessages.c +++ b/CORE/MAC/src/pe/lim/limSendMessages.c @@ -24,9 +24,8 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Airgo Networks, Inc proprietary. All rights reserved. + * * limSendMessages.c: Provides functions to send messages or Indications to HAL. * Author: Sunit Bhatia * Date: 09/21/2006 diff --git a/CORE/MAC/src/pe/lim/limSendMessages.h b/CORE/MAC/src/pe/lim/limSendMessages.h index 1fcc961269e2..f72ad01f385b 100644 --- a/CORE/MAC/src/pe/lim/limSendMessages.h +++ b/CORE/MAC/src/pe/lim/limSendMessages.h @@ -24,9 +24,8 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Airgo Networks, Inc proprietary. All rights reserved. + * * limSendMessages.h: Provides functions to send messages or Indications to HAL. * Author: Sunit Bhatia * Date: 09/21/2006 diff --git a/CORE/MAC/src/pe/lim/limSendSmeRspMessages.c b/CORE/MAC/src/pe/lim/limSendSmeRspMessages.c index f5b6667f87f9..d849d8a1ed41 100644 --- a/CORE/MAC/src/pe/lim/limSendSmeRspMessages.c +++ b/CORE/MAC/src/pe/lim/limSendSmeRspMessages.c @@ -24,9 +24,7 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Airgo Networks, Inc proprietary. All rights reserved. * This file limSendSmeRspMessages.cc contains the functions * for sending SME response/notification messages to applications * above MAC software. @@ -1664,7 +1662,33 @@ limSendSmeMgmtTXCompletion(tpAniSirGlobal pMac, limSysProcessMmhMsgApi(pMac, &mmhMsg, ePROT); return; }/*** end limSendSmeTDLSDeleteAllPeerInd() ***/ -#endif + +#ifdef QCA_WIFI_2_0 +void limSendSmeTdlsEventNotify(tpAniSirGlobal pMac, tANI_U16 msgType, + void *events) +{ + tSirMsgQ mmhMsg; + + switch (msgType) + { + case SIR_HAL_TDLS_SHOULD_DISCOVER: + mmhMsg.type = eWNI_SME_TDLS_SHOULD_DISCOVER; + break; + case SIR_HAL_TDLS_SHOULD_TEARDOWN: + mmhMsg.type = eWNI_SME_TDLS_SHOULD_TEARDOWN; + break; + case SIR_HAL_TDLS_PEER_DISCONNECTED: + mmhMsg.type = eWNI_SME_TDLS_PEER_DISCONNECTED; + break; + } + + mmhMsg.bodyptr = events; + mmhMsg.bodyval = 0; + limSysProcessMmhMsgApi(pMac, &mmhMsg, ePROT); + return; +} +#endif /* QCA_WIFI_2_0 */ +#endif /* FEATURE_WLAN_TDLS */ /** diff --git a/CORE/MAC/src/pe/lim/limSendSmeRspMessages.h b/CORE/MAC/src/pe/lim/limSendSmeRspMessages.h index a0fd08f29df4..6e2602aa4598 100644 --- a/CORE/MAC/src/pe/lim/limSendSmeRspMessages.h +++ b/CORE/MAC/src/pe/lim/limSendSmeRspMessages.h @@ -24,9 +24,7 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Airgo Networks, Inc proprietary. All rights reserved. * This file limSendSmeRspMessages.h contains the definitions for * sending SME response/notification messages to applications above * MAC software. @@ -119,6 +117,10 @@ void limSendSmeTdlsTeardownRsp(tpAniSirGlobal pMac, tSirResultCodes statusCode, void limSendSmeTdlsLinkEstablishReqRsp(tpAniSirGlobal pMac, tANI_U8 sessionId, tSirMacAddr peerMac, tDphHashNode *pStaDs, tANI_U8 status); +#ifdef QCA_WIFI_2_0 +void limSendSmeTdlsEventNotify(tpAniSirGlobal pMac, tANI_U16 msgType, + void *events); +#endif #endif #endif /* __LIM_SEND_SME_RSP_H */ diff --git a/CORE/MAC/src/pe/lim/limSerDesUtils.c b/CORE/MAC/src/pe/lim/limSerDesUtils.c index 074ccde2dbeb..35e829079420 100644 --- a/CORE/MAC/src/pe/lim/limSerDesUtils.c +++ b/CORE/MAC/src/pe/lim/limSerDesUtils.c @@ -24,10 +24,7 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - - /* - * Airgo Networks, Inc proprietary. All rights reserved. * * This file limSerDesUtils.cc contains the serializer/deserializer * utility functions LIM uses while communicating with upper layer diff --git a/CORE/MAC/src/pe/lim/limSerDesUtils.h b/CORE/MAC/src/pe/lim/limSerDesUtils.h index d4ac1f261b26..b41e6b2454cc 100644 --- a/CORE/MAC/src/pe/lim/limSerDesUtils.h +++ b/CORE/MAC/src/pe/lim/limSerDesUtils.h @@ -24,10 +24,8 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* * - * Airgo Networks, Inc proprietary. All rights reserved. * This file limSerDesUtils.h contains the utility definitions * LIM uses while processing messages from upper layer software * modules diff --git a/CORE/MAC/src/pe/lim/limSession.c b/CORE/MAC/src/pe/lim/limSession.c index 098d66a7bdd3..73097af80832 100644 --- a/CORE/MAC/src/pe/lim/limSession.c +++ b/CORE/MAC/src/pe/lim/limSession.c @@ -24,7 +24,8 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - +/* + * */ /**========================================================================= \file limSession.c @@ -33,10 +34,6 @@ \author Sunit Bhatia - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ diff --git a/CORE/MAC/src/pe/lim/limSessionUtils.c b/CORE/MAC/src/pe/lim/limSessionUtils.c index cfe2a1e1ccb0..876883fc550d 100644 --- a/CORE/MAC/src/pe/lim/limSessionUtils.c +++ b/CORE/MAC/src/pe/lim/limSessionUtils.c @@ -24,14 +24,12 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /**========================================================================= \file limSessionUtils.c \brief implementation for lim Session Utility APIs \author Sunit Bhatia - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. ========================================================================*/ diff --git a/CORE/MAC/src/pe/lim/limSessionUtils.h b/CORE/MAC/src/pe/lim/limSessionUtils.h index 278a733bec7a..9ca907f5d046 100644 --- a/CORE/MAC/src/pe/lim/limSessionUtils.h +++ b/CORE/MAC/src/pe/lim/limSessionUtils.h @@ -25,7 +25,6 @@ * to the Linux Foundation. */ - #if!defined( __LIM_SESSION_UTILS_H ) #define __LIM_SESSION_UTILS_H @@ -37,10 +36,6 @@ \author Sunit Bhatia - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ diff --git a/CORE/MAC/src/pe/lim/limSmeReqUtils.c b/CORE/MAC/src/pe/lim/limSmeReqUtils.c index bc87e572cb3c..8cb83102ae67 100644 --- a/CORE/MAC/src/pe/lim/limSmeReqUtils.c +++ b/CORE/MAC/src/pe/lim/limSmeReqUtils.c @@ -24,9 +24,8 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Airgo Networks, Inc proprietary. All rights reserved. + * * This file limSmeReqUtils.cc contains the utility functions * for processing SME request messages. * Author: Chandra Modumudi diff --git a/CORE/MAC/src/pe/lim/limSmeReqUtils.h b/CORE/MAC/src/pe/lim/limSmeReqUtils.h index 59bdd2249b8d..d10a6376710b 100644 --- a/CORE/MAC/src/pe/lim/limSmeReqUtils.h +++ b/CORE/MAC/src/pe/lim/limSmeReqUtils.h @@ -24,10 +24,8 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* * - * Airgo Networks, Inc proprietary. All rights reserved. * This file limSmeReqUtils.h contains the utility definitions * LIM uses while processing SME request messsages. * Author: Chandra Modumudi diff --git a/CORE/MAC/src/pe/lim/limStaHashApi.c b/CORE/MAC/src/pe/lim/limStaHashApi.c index e8a438c52a18..5a54e636e48d 100644 --- a/CORE/MAC/src/pe/lim/limStaHashApi.c +++ b/CORE/MAC/src/pe/lim/limStaHashApi.c @@ -24,10 +24,8 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* * - * Airgo Networks, Inc proprietary. All rights reserved. * limStaHashApi.c: Provides access functions to get/set values of station hash entry fields. * Author: Sunit Bhatia * Date: 09/19/2006 diff --git a/CORE/MAC/src/pe/lim/limStaHashApi.h b/CORE/MAC/src/pe/lim/limStaHashApi.h index 6d8c2d1f625f..3b0750fe4e6e 100644 --- a/CORE/MAC/src/pe/lim/limStaHashApi.h +++ b/CORE/MAC/src/pe/lim/limStaHashApi.h @@ -24,10 +24,8 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* * - * Airgo Networks, Inc proprietary. All rights reserved. * This file limStaHashApi.h contains the * function prototypes for accessing station hash entry fields. * diff --git a/CORE/MAC/src/pe/lim/limTimerUtils.c b/CORE/MAC/src/pe/lim/limTimerUtils.c index f68690163926..c41fd47d6a7b 100644 --- a/CORE/MAC/src/pe/lim/limTimerUtils.c +++ b/CORE/MAC/src/pe/lim/limTimerUtils.c @@ -24,9 +24,7 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Airgo Networks, Inc proprietary. All rights reserved. * This file limTimerUtils.cc contains the utility functions * LIM uses for handling various timers. * Author: Chandra Modumudi diff --git a/CORE/MAC/src/pe/lim/limTimerUtils.h b/CORE/MAC/src/pe/lim/limTimerUtils.h index d37a77118a7b..a201fb812bcc 100644 --- a/CORE/MAC/src/pe/lim/limTimerUtils.h +++ b/CORE/MAC/src/pe/lim/limTimerUtils.h @@ -24,9 +24,8 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Airgo Networks, Inc proprietary. All rights reserved. + * * This file limTimerUtils.h contains the utility definitions * LIM uses for timer handling. * Author: Chandra Modumudi diff --git a/CORE/MAC/src/pe/lim/limTrace.c b/CORE/MAC/src/pe/lim/limTrace.c index 522b3c8cad43..2781b4040fe9 100644 --- a/CORE/MAC/src/pe/lim/limTrace.c +++ b/CORE/MAC/src/pe/lim/limTrace.c @@ -24,18 +24,13 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /**========================================================================= - \file limTrace.c +\file limTrace.c \brief implementation for trace related APIs \author Sunit Bhatia - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ diff --git a/CORE/MAC/src/pe/lim/limTypes.h b/CORE/MAC/src/pe/lim/limTypes.h index c86a5364da97..bbe0c71e0d1f 100644 --- a/CORE/MAC/src/pe/lim/limTypes.h +++ b/CORE/MAC/src/pe/lim/limTypes.h @@ -24,9 +24,7 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Airgo Networks, Inc proprietary. All rights reserved. * This file limTypes.h contains the definitions used by all * all LIM modules. * Author: Chandra Modumudi @@ -864,14 +862,6 @@ tSirRetStatus limSendSaQueryResponseFrame( tpAniSirGlobal pMac, tANI_U8 *transId, tSirMacAddr peer,tpPESession psessionEntry); #endif -#if defined WLAN_FEATURE_RELIABLE_MCAST -void limProcessRMCMessages(tpAniSirGlobal pMac, eRmcMessageType msgType, - tANI_U32 *pMsgBuf); -tSirRetStatus limSendRMCActionFrame(tpAniSirGlobal pMac, - tSirMacAddr peerMacAddr, tSirRMCInfo *pRMC, - tpPESession psessionEntry); -#endif /* WLAN_FEATURE_RELIABLE_MCAST */ - // Inline functions /** diff --git a/CORE/MAC/src/pe/lim/limUtils.c b/CORE/MAC/src/pe/lim/limUtils.c index 7cfac443b4b2..9ebb26086b26 100644 --- a/CORE/MAC/src/pe/lim/limUtils.c +++ b/CORE/MAC/src/pe/lim/limUtils.c @@ -24,9 +24,7 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Airgo Networks, Inc proprietary. All rights reserved. * This file limUtils.cc contains the utility functions * LIM uses. * Author: Chandra Modumudi @@ -7777,6 +7775,7 @@ tANI_U8 limGetShortSlotFromPhyMode(tpAniSirGlobal pMac, tpPESession psessionEntr else if (phyMode == WNI_CFG_PHY_MODE_11G) { if ((psessionEntry->pePersona == VOS_STA_SAP_MODE) || + (psessionEntry->pePersona == VOS_IBSS_MODE) || (psessionEntry->pePersona == VOS_P2P_GO_MODE)) { val = true; diff --git a/CORE/MAC/src/pe/lim/limUtils.h b/CORE/MAC/src/pe/lim/limUtils.h index ff179dee1d63..3b7f9a849081 100644 --- a/CORE/MAC/src/pe/lim/limUtils.h +++ b/CORE/MAC/src/pe/lim/limUtils.h @@ -24,9 +24,7 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Airgo Networks, Inc proprietary. All rights reserved. * This file limUtils.h contains the utility definitions * LIM uses. * Author: Chandra Modumudi diff --git a/CORE/MAC/src/pe/pmm/pmmAP.c b/CORE/MAC/src/pe/pmm/pmmAP.c index be26c26db012..0a79ddd93387 100644 --- a/CORE/MAC/src/pe/pmm/pmmAP.c +++ b/CORE/MAC/src/pe/pmm/pmmAP.c @@ -24,10 +24,8 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* * - * Airgo Networks, Inc proprietary. All rights reserved. * This file pmmAP.cc contains AP PM functions * * Author: Sandesh Goel diff --git a/CORE/MAC/src/pe/pmm/pmmApi.c b/CORE/MAC/src/pe/pmm/pmmApi.c index 77e53c6efb0e..764d19faf140 100644 --- a/CORE/MAC/src/pe/pmm/pmmApi.c +++ b/CORE/MAC/src/pe/pmm/pmmApi.c @@ -24,9 +24,7 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Airgo Networks, Inc proprietary. All rights reserved. * This file pmmApi.cc contains functions related to the API exposed * by power management module * diff --git a/CORE/MAC/src/pe/pmm/pmmDebug.c b/CORE/MAC/src/pe/pmm/pmmDebug.c index 60030379fd48..db7bab22bb7d 100644 --- a/CORE/MAC/src/pe/pmm/pmmDebug.c +++ b/CORE/MAC/src/pe/pmm/pmmDebug.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /**========================================================================= \file pmmDebug.c @@ -33,10 +32,6 @@ \author Sunit Bhatia - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ #include "vos_trace.h" diff --git a/CORE/MAC/src/pe/pmm/pmmDebug.h b/CORE/MAC/src/pe/pmm/pmmDebug.h index 57614c997b98..f086cc03cca0 100644 --- a/CORE/MAC/src/pe/pmm/pmmDebug.h +++ b/CORE/MAC/src/pe/pmm/pmmDebug.h @@ -24,10 +24,8 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* * - * Airgo Networks, Inc proprietary. All rights reserved. * Author: Sandesh Goel * Date: 02/25/02 * History:- diff --git a/CORE/MAC/src/pe/rrm/rrmApi.c b/CORE/MAC/src/pe/rrm/rrmApi.c index ce13dc1e7779..1420f699db6a 100644 --- a/CORE/MAC/src/pe/rrm/rrmApi.c +++ b/CORE/MAC/src/pe/rrm/rrmApi.c @@ -24,18 +24,12 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - - /**========================================================================= \file rrmApi.c \brief implementation for PE RRM APIs - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ /* $Header$ */ diff --git a/CORE/MAC/src/pe/sch/schApi.c b/CORE/MAC/src/pe/sch/schApi.c index 3917054e89ed..ffc3ca9107a1 100644 --- a/CORE/MAC/src/pe/sch/schApi.c +++ b/CORE/MAC/src/pe/sch/schApi.c @@ -24,9 +24,8 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Airgo Networks, Inc proprietary. All rights reserved. + * * This file schApi.cc contains functions related to the API exposed * by scheduler module * @@ -299,7 +298,14 @@ tSirRetStatus schSendBeaconReq( tpAniSirGlobal pMac, tANI_U8 *beaconPayload, tAN // limGetBssid( pMac, beaconParams->bssId); vos_mem_copy(beaconParams->bssId, psessionEntry->bssId, sizeof(psessionEntry->bssId)); - beaconParams->timIeOffset = pMac->sch.schObject.gSchBeaconOffsetBegin; + if (eLIM_STA_IN_IBSS_ROLE == psessionEntry->limSystemRole) + { + beaconParams->timIeOffset = 0; + } + else + { + beaconParams->timIeOffset = pMac->sch.schObject.gSchBeaconOffsetBegin; + } /* p2pIeOffset should be atleast greater than timIeOffset */ if ((pMac->sch.schObject.p2pIeOffset != 0) && (pMac->sch.schObject.p2pIeOffset < @@ -485,7 +491,7 @@ tANI_U32 limSendProbeRspTemplateToHal(tpAniSirGlobal pMac,tpPESession psessionEn else if ( DOT11F_WARNED( nStatus ) ) { schLog( pMac, LOGE, FL("There were warnings while packing a P" - "robe Response (0x%08x).") ); + "robe Response (0x%08x)."), nStatus ); } if (addnIEPresent) diff --git a/CORE/MAC/src/pe/sch/schBeaconGen.c b/CORE/MAC/src/pe/sch/schBeaconGen.c index fa1197425887..50fa74e776c4 100644 --- a/CORE/MAC/src/pe/sch/schBeaconGen.c +++ b/CORE/MAC/src/pe/sch/schBeaconGen.c @@ -24,9 +24,7 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Airgo Networks, Inc proprietary. All rights reserved. * This file schBeaconGen.cc contains beacon generation related * functions * @@ -127,7 +125,7 @@ tSirRetStatus schAppendAddnIE(tpAniSirGlobal pMac, tpPESession psessionEntry, == eSIR_SUCCESS) { tANI_U8* pP2pIe = limGetP2pIEPtr(pMac, &addIE[0], len); - if(pP2pIe != NULL) + if ((pP2pIe != NULL) && !pMac->beacon_offload) { tANI_U8 noaLen = 0; tANI_U8 noaStream[SIR_MAX_NOA_ATTR_LEN + SIR_P2P_IE_HEADER_LEN]; diff --git a/CORE/MAC/src/pe/sch/schBeaconProcess.c b/CORE/MAC/src/pe/sch/schBeaconProcess.c index 9fb0d83d9bbe..ef5abfb5345e 100644 --- a/CORE/MAC/src/pe/sch/schBeaconProcess.c +++ b/CORE/MAC/src/pe/sch/schBeaconProcess.c @@ -24,9 +24,7 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Airgo Networks, Inc proprietary. All rights reserved. * This file schBeaconProcess.cc contains beacon processing related * functions * diff --git a/CORE/MAC/src/pe/sch/schDebug.c b/CORE/MAC/src/pe/sch/schDebug.c index 3f800bd6ef4a..1c45cdcde2a7 100644 --- a/CORE/MAC/src/pe/sch/schDebug.c +++ b/CORE/MAC/src/pe/sch/schDebug.c @@ -24,9 +24,8 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Airgo Networks, Inc proprietary. All rights reserved. + * * This file schDebug.cc contains some debug functions. * * Author: Sandesh Goel diff --git a/CORE/MAC/src/pe/sch/schDebug.h b/CORE/MAC/src/pe/sch/schDebug.h index 05673bfe2cb8..c30782fec5b6 100644 --- a/CORE/MAC/src/pe/sch/schDebug.h +++ b/CORE/MAC/src/pe/sch/schDebug.h @@ -24,10 +24,8 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* * - * Airgo Networks, Inc proprietary. All rights reserved. * This file schDebug.h contains some debug macros. * * Author: Sandesh Goel diff --git a/CORE/MAC/src/pe/sch/schMessage.c b/CORE/MAC/src/pe/sch/schMessage.c index 89d1d659747e..70e0d19f1205 100644 --- a/CORE/MAC/src/pe/sch/schMessage.c +++ b/CORE/MAC/src/pe/sch/schMessage.c @@ -24,9 +24,7 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Airgo Networks, Inc proprietary. All rights reserved. * This file schMessage.cc contains the message handler * * Author: Sandesh Goel diff --git a/CORE/MAC/src/pe/sch/schSysParams.h b/CORE/MAC/src/pe/sch/schSysParams.h index 138f0c395d2e..7f89de200184 100644 --- a/CORE/MAC/src/pe/sch/schSysParams.h +++ b/CORE/MAC/src/pe/sch/schSysParams.h @@ -24,10 +24,8 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* * - * Airgo Networks, Inc proprietary. All rights reserved. * This file schSysParams.h contains scheduler parameter definitions * * Author: Sandesh Goel diff --git a/CORE/SAP/inc/sapApi.h b/CORE/SAP/inc/sapApi.h index 165297bab53f..13db475cebdd 100644 --- a/CORE/SAP/inc/sapApi.h +++ b/CORE/SAP/inc/sapApi.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef WLAN_QCT_WLANSAP_H #define WLAN_QCT_WLANSAP_H @@ -38,9 +37,6 @@ DESCRIPTION This file contains the external API exposed by the wlan SAP PAL layer module. - - Copyright (c) 2010 Qualcomm Technologies, Inc. All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ===========================================================================*/ diff --git a/CORE/SAP/src/sapApiLinkCntl.c b/CORE/SAP/src/sapApiLinkCntl.c index 5ee32f9f5738..2a87dbd22d69 100644 --- a/CORE/SAP/src/sapApiLinkCntl.c +++ b/CORE/SAP/src/sapApiLinkCntl.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /*=========================================================================== s a p A p i L i n k C n t l . C @@ -41,10 +40,6 @@ Are listed for each API below. - - Copyright (c) 2010 Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ===========================================================================*/ /*=========================================================================== diff --git a/CORE/SAP/src/sapChSelect.c b/CORE/SAP/src/sapChSelect.c index 9aed4e3fed6f..37c60864c2fc 100644 --- a/CORE/SAP/src/sapChSelect.c +++ b/CORE/SAP/src/sapChSelect.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /*=========================================================================== s a p C h S e l e c t . C @@ -37,10 +36,6 @@ Are listed for each API below. - - Copyright (c) 2010 Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ===========================================================================*/ /*=========================================================================== @@ -71,6 +66,9 @@ #ifdef ANI_OS_TYPE_QNX #include "stdio.h" #endif +#ifdef FEATURE_WLAN_CH_AVOID +#include "wlan_hdd_main.h" +#endif /* FEATURE_WLAN_CH_AVOID */ /*-------------------------------------------------------------------------- Function definitions @@ -86,6 +84,130 @@ ((extRssi < rssi)?eANI_BOOLEAN_TRUE:eANI_BOOLEAN_FALSE) \ ) +#ifdef FEATURE_WLAN_CH_AVOID +/* Store channel safty information */ +typedef struct +{ + v_U16_t channelNumber; + v_BOOL_t isSafe; +} sapSafeChannelType; + +sapSafeChannelType safeChannels[NUM_20MHZ_RF_CHANNELS] = +{ + /*CH , SAFE, default safe */ + {1 , VOS_TRUE}, //RF_CHAN_1, + {2 , VOS_TRUE}, //RF_CHAN_2, + {3 , VOS_TRUE}, //RF_CHAN_3, + {4 , VOS_TRUE}, //RF_CHAN_4, + {5 , VOS_TRUE}, //RF_CHAN_5, + {6 , VOS_TRUE}, //RF_CHAN_6, + {7 , VOS_TRUE}, //RF_CHAN_7, + {8 , VOS_TRUE}, //RF_CHAN_8, + {9 , VOS_TRUE}, //RF_CHAN_9, + {10 , VOS_TRUE}, //RF_CHAN_10, + {11 , VOS_TRUE}, //RF_CHAN_11, + {12 , VOS_TRUE}, //RF_CHAN_12, + {13 , VOS_TRUE}, //RF_CHAN_13, + {14 , VOS_TRUE}, //RF_CHAN_14, + {240, VOS_TRUE}, //RF_CHAN_240, + {244, VOS_TRUE}, //RF_CHAN_244, + {248, VOS_TRUE}, //RF_CHAN_248, + {252, VOS_TRUE}, //RF_CHAN_252, + {208, VOS_TRUE}, //RF_CHAN_208, + {212, VOS_TRUE}, //RF_CHAN_212, + {216, VOS_TRUE}, //RF_CHAN_216, + {36 , VOS_TRUE}, //RF_CHAN_36, + {40 , VOS_TRUE}, //RF_CHAN_40, + {44 , VOS_TRUE}, //RF_CHAN_44, + {48 , VOS_TRUE}, //RF_CHAN_48, + {52 , VOS_TRUE}, //RF_CHAN_52, + {56 , VOS_TRUE}, //RF_CHAN_56, + {60 , VOS_TRUE}, //RF_CHAN_60, + {64 , VOS_TRUE}, //RF_CHAN_64, + {100, VOS_TRUE}, //RF_CHAN_100, + {104, VOS_TRUE}, //RF_CHAN_104, + {108, VOS_TRUE}, //RF_CHAN_108, + {112, VOS_TRUE}, //RF_CHAN_112, + {116, VOS_TRUE}, //RF_CHAN_116, + {120, VOS_TRUE}, //RF_CHAN_120, + {124, VOS_TRUE}, //RF_CHAN_124, + {128, VOS_TRUE}, //RF_CHAN_128, + {132, VOS_TRUE}, //RF_CHAN_132, + {136, VOS_TRUE}, //RF_CHAN_136, + {140, VOS_TRUE}, //RF_CHAN_140, + {149, VOS_TRUE}, //RF_CHAN_149, + {153, VOS_TRUE}, //RF_CHAN_153, + {157, VOS_TRUE}, //RF_CHAN_157, + {161, VOS_TRUE}, //RF_CHAN_161, + {165, VOS_TRUE}, //RF_CHAN_165, +}; + +/*========================================================================== + FUNCTION sapUpdateUnsafeChannelList + + DESCRIPTION + Function Undate unsafe channel list table + + DEPENDENCIES + NA. + + IN + NULL + + RETURN VALUE + NULL +============================================================================*/ +void sapUpdateUnsafeChannelList() +{ + v_U16_t i, j; + + v_PVOID_t pvosGCtx = vos_get_global_context(VOS_MODULE_ID_SAP, NULL); + struct hdd_context_s *hdd_ctxt; + + if (NULL == pvosGCtx) + { + VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_FATAL, + "VOSS Global Context is NULL"); + return ; + } + + hdd_ctxt = (struct hdd_context_s *) vos_get_context(VOS_MODULE_ID_HDD, pvosGCtx); + + if (NULL == hdd_ctxt) + { + VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_FATAL, + "HDD Context is NULL"); + return ; + } + + /* Flush, default set all channel safe */ + for (i = 0; i < NUM_20MHZ_RF_CHANNELS; i++) + { + safeChannels[i].isSafe = VOS_TRUE; + } + + /* Try to find unsafe channel */ + for (i = 0; i < hdd_ctxt->unsafe_channel_count; i++) + { + for (j = 0; j < NUM_20MHZ_RF_CHANNELS; j++) + { + if(safeChannels[j].channelNumber == hdd_ctxt->unsafe_channel_list[i]) + { + /* Found unsafe channel, update it */ + safeChannels[j].isSafe = VOS_FALSE; + VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR, + "%s : CH %d is not safe", + __func__, hdd_ctxt->unsafe_channel_list[i]); + break; + } + } + } + + return; +} + +#endif /* FEATURE_WLAN_CH_AVOID */ + /*========================================================================== FUNCTION sapCleanupChannelList @@ -390,9 +512,17 @@ v_BOOL_t sapChanSelInit(tHalHandle halHandle, tSapChSelSpectInfo *pSpectInfoPara v_U8_t *pChans = NULL; v_U16_t channelnum = 0; tpAniSirGlobal pMac = PMAC_STRUCT(halHandle); +#ifdef FEATURE_WLAN_CH_AVOID + v_U16_t i; + v_BOOL_t chSafe = VOS_TRUE; +#endif /* FEATURE_WLAN_CH_AVOID */ VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s", __func__); +#ifdef FEATURE_WLAN_CH_AVOID + sapUpdateUnsafeChannelList(); +#endif /* FEATURE_WLAN_CH_AVOID */ + // Channels for that 2.4GHz band //Considered only for 2.4GHz need to change in future to support 5GHz support pSpectInfoParams->numSpectChans = pMac->scan.base20MHzChannels.numChannels; @@ -414,14 +544,35 @@ v_BOOL_t sapChanSelInit(tHalHandle halHandle, tSapChSelSpectInfo *pSpectInfoPara // Fill the channel number in the spectrum in the operating freq band for (channelnum = 0; channelnum < pSpectInfoParams->numSpectChans; channelnum++, pChans++) { +#ifdef FEATURE_WLAN_CH_AVOID + chSafe = VOS_TRUE; + for(i = 0; i < NUM_20MHZ_RF_CHANNELS; i++) { + if((safeChannels[i].channelNumber == *pChans) && + (VOS_FALSE == safeChannels[i].isSafe)) + { + VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, Ch %d is not safe", + __func__, *pChans); + chSafe = VOS_FALSE; + break; + } + } +#endif /* FEATURE_WLAN_CH_AVOID */ if(*pChans == 14 ) //OFDM rates are not supported on channel 14 continue; - pSpectCh->chNum = *pChans; - pSpectCh->valid = eSAP_TRUE; - pSpectCh->rssiAgr = SOFTAP_MIN_RSSI;// Initialise for all channels - pSpectCh->channelWidth = SOFTAP_HT20_CHANNELWIDTH; // Initialise 20MHz for all the Channels - pSpectCh++; + +#ifdef FEATURE_WLAN_CH_AVOID + if (VOS_TRUE == chSafe) + { +#endif /* FEATURE_WLAN_CH_AVOID */ + pSpectCh->chNum = *pChans; + pSpectCh->valid = eSAP_TRUE; + pSpectCh->rssiAgr = SOFTAP_MIN_RSSI;// Initialise for all channels + pSpectCh->channelWidth = SOFTAP_HT20_CHANNELWIDTH; // Initialise 20MHz for all the Channels + pSpectCh++; +#ifdef FEATURE_WLAN_CH_AVOID + } +#endif /* FEATURE_WLAN_CH_AVOID */ } return eSAP_TRUE; } diff --git a/CORE/SAP/src/sapChSelect.h b/CORE/SAP/src/sapChSelect.h index 9e9bd592807e..ed8cdfabb268 100644 --- a/CORE/SAP/src/sapChSelect.h +++ b/CORE/SAP/src/sapChSelect.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined( __SAP_CH_SELECT_H ) #define __SAP_CH_SELECT_H @@ -42,10 +41,6 @@ Are listed for each API below. - - Copyright (c) 2010 Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ===========================================================================*/ /*=========================================================================== diff --git a/CORE/SAP/src/sapFsm.c b/CORE/SAP/src/sapFsm.c index c2e0c0c95a8d..ddba2f0b2e69 100644 --- a/CORE/SAP/src/sapFsm.c +++ b/CORE/SAP/src/sapFsm.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /*=========================================================================== s a p F s m . C @@ -38,10 +37,6 @@ Are listed for each API below. - - Copyright (c) 2010 Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ===========================================================================*/ /*=========================================================================== diff --git a/CORE/SAP/src/sapFsm_ext.h b/CORE/SAP/src/sapFsm_ext.h index 46b53ac41aa3..5535732b235c 100644 --- a/CORE/SAP/src/sapFsm_ext.h +++ b/CORE/SAP/src/sapFsm_ext.h @@ -25,7 +25,6 @@ * to the Linux Foundation. */ - /* This file is generated from btampFsm.cdd - do not edit manually*/ /* Generated on: Thu Oct 16 15:40:39 PDT 2008 */ diff --git a/CORE/SAP/src/sapInternal.h b/CORE/SAP/src/sapInternal.h index 653e7b764ba1..aa23a9ba40aa 100644 --- a/CORE/SAP/src/sapInternal.h +++ b/CORE/SAP/src/sapInternal.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef WLAN_QCT_WLANSAP_INTERNAL_H #define WLAN_QCT_WLANSAP_INTERNAL_H @@ -38,9 +37,6 @@ DESCRIPTION This file contains the internal API exposed by the wlan SAP PAL layer module. - - Copyright (c) 2008 Qualcomm Technologies, Inc. All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ===========================================================================*/ @@ -755,6 +751,27 @@ SIDE EFFECTS ============================================================================*/ eCsrPhyMode sapConvertSapPhyModeToCsrPhyMode( eSapPhyMode sapPhyMode ); +#ifdef FEATURE_WLAN_CH_AVOID +/*========================================================================== + FUNCTION sapUpdateUnsafeChannelList + + DESCRIPTION + Function sapUpdateUnsafeChannelList updates the SAP context of unsafe channels. + + DEPENDENCIES + NA. + + PARAMETERS + + IN + NULL + + RETURN VALUE + NULL +============================================================================*/ +void sapUpdateUnsafeChannelList(void); +#endif /* FEATURE_WLAN_CH_AVOID */ + #ifdef __cplusplus } #endif diff --git a/CORE/SAP/src/sapModule.c b/CORE/SAP/src/sapModule.c index 4db9f9e57bca..b644747209af 100644 --- a/CORE/SAP/src/sapModule.c +++ b/CORE/SAP/src/sapModule.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /*=========================================================================== s a p M o d u l e . C @@ -39,9 +38,6 @@ Are listed for each API below. - Copyright (c) 2010 Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ===========================================================================*/ /*=========================================================================== diff --git a/CORE/SERVICES/BMI/bin_sig.h b/CORE/SERVICES/BMI/bin_sig.h index 2042f328f061..c4bccf08a1d2 100644 --- a/CORE/SERVICES/BMI/bin_sig.h +++ b/CORE/SERVICES/BMI/bin_sig.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef BIN_SIGN_H_ #define BIN_SIGN_H_ diff --git a/CORE/SERVICES/BMI/bmi.c b/CORE/SERVICES/BMI/bmi.c index 18881c18120f..3835ff498b14 100644 --- a/CORE/SERVICES/BMI/bmi.c +++ b/CORE/SERVICES/BMI/bmi.c @@ -24,7 +24,30 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - +/* + * Copyright (c) 2013 Qualcomm Atheros, Inc. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ +//------------------------------------------------------------------------------ +// +// Copyright (c) 2004-2010 Atheros Corporation. All rights reserved. +// $ATH_LICENSE_HOSTSDK0_C$ +//------------------------------------------------------------------------------ +//============================================================================== +// +// Author(s): ="Atheros" +//============================================================================== #include "hif.h" #include "bmi.h" diff --git a/CORE/SERVICES/BMI/bmi_internal.h b/CORE/SERVICES/BMI/bmi_internal.h index 56ab4e8fb019..6dec8a3ec5c4 100644 --- a/CORE/SERVICES/BMI/bmi_internal.h +++ b/CORE/SERVICES/BMI/bmi_internal.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - //------------------------------------------------------------------------------ //============================================================================== // diff --git a/CORE/SERVICES/BMI/fw_one_bin.h b/CORE/SERVICES/BMI/fw_one_bin.h index b995fd103c2b..56f63ce753f5 100644 --- a/CORE/SERVICES/BMI/fw_one_bin.h +++ b/CORE/SERVICES/BMI/fw_one_bin.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* * fw_one_bin.h */ diff --git a/CORE/SERVICES/BMI/ol_fw.c b/CORE/SERVICES/BMI/ol_fw.c index 1d34ffda1a1b..a22f2836d1b6 100644 --- a/CORE/SERVICES/BMI/ol_fw.c +++ b/CORE/SERVICES/BMI/ol_fw.c @@ -24,7 +24,21 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - +/* + * Copyright (c) 2013 Qualcomm Atheros, Inc. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ #include #include "ol_if_athvar.h" #include "ol_fw.h" @@ -300,6 +314,9 @@ static int ol_transfer_bin_file(struct ol_softc *scn, ATH_BIN_FILE file, u_int32_t fw_entry_size; u_int8_t *tempEeprom; u_int32_t board_data_size; +#ifdef CONFIG_CNSS + struct cnss_fw_files fw_files; +#endif int ret; if (scn->enablesinglebinary && file != ATH_BOARD_DATA_FILE) { @@ -316,30 +333,52 @@ static int ol_transfer_bin_file(struct ol_softc *scn, ATH_BIN_FILE file, if (ret != -ENOENT) return -1; } +#ifdef CONFIG_CNSS + if (0 != cnss_get_fw_files(&fw_files)) { + printk("%s: No FW files from CNSS driver\n", __func__); + return -1; + } +#endif switch (file) { default: printk("%s: Unknown file type\n", __func__); return -1; case ATH_OTP_FILE: +#ifdef CONFIG_CNSS + filename = fw_files.otp_data; +#else filename = QCA_OTP_FILE; +#endif break; case ATH_FIRMWARE_FILE: #ifdef QCA_WIFI_FTM if (vos_get_conparam() == VOS_FTM_MODE) { +#ifdef CONFIG_CNSS + filename = fw_files.utf_file; +#else filename = QCA_UTF_FIRMWARE_FILE; +#endif printk(KERN_INFO "%s: Loading firmware file %s\n", __func__, filename); break; } #endif +#ifdef CONFIG_CNSS + filename = fw_files.image_file; +#else filename = QCA_FIRMWARE_FILE; +#endif break; case ATH_PATCH_FILE: printk("%s: no Patch file defined\n", __func__); return EOK; case ATH_BOARD_DATA_FILE: +#ifdef CONFIG_CNSS + filename = fw_files.board_data; +#else filename = QCA_BOARD_DATA_FILE; +#endif break; } @@ -508,10 +547,12 @@ static DECLARE_WORK(ramdump_work, ramdump_work_handler); void ol_target_failure(void *instance, A_STATUS status) { struct ol_softc *scn = (struct ol_softc *)instance; +#ifndef CONFIG_CNSS A_UINT32 reg_dump_area = 0; A_UINT32 reg_dump_values[REGISTER_DUMP_LEN_MAX]; A_UINT32 reg_dump_cnt = 0; A_UINT32 i; +#endif A_UINT32 dbglog_hdr_address; struct dbglog_hdr_s dbglog_hdr; struct dbglog_buf_s dbglog_buf; @@ -521,8 +562,15 @@ void ol_target_failure(void *instance, A_STATUS status) void *vos_context = vos_get_global_context(VOS_MODULE_ID_WDA, NULL); tp_wma_handle wma = vos_get_context(VOS_MODULE_ID_WDA, vos_context); + if (OL_TRGET_STATUS_RESET == scn->target_status) { + printk("Target is already asserted, ignore!\n"); + return; + } + printk("XXX TARGET ASSERTED XXX\n"); scn->target_status = OL_TRGET_STATUS_RESET; + +#ifndef CONFIG_CNSS if (HIFDiagReadMem(scn->hif_hdl, host_interest_item_address(scn->target_type, offsetof(struct host_interest_s, hi_failure_state)), (A_UCHAR *)®_dump_area, @@ -549,6 +597,7 @@ void ol_target_failure(void *instance, A_STATUS status) for (i = 0; i < reg_dump_cnt; i++) { printk("[%02d] : 0x%08X\n", i, reg_dump_values[i]); } +#endif if (HIFDiagReadMem(scn->hif_hdl, host_interest_item_address(scn->target_type, offsetof(struct host_interest_s, hi_dbglog_hdr)), @@ -568,12 +617,6 @@ void ol_target_failure(void *instance, A_STATUS status) return; } -#if defined(QCA_WIFI_2_0) && !defined(QCA_WIFI_ISOC) && defined(CONFIG_CNSS) - /* Collect the RAM dump through a workqueue */ - ramdump_scn = scn; - schedule_work(&ramdump_work); -#endif - dbglog_hdr.dbuf = (struct dbglog_buf_s *)dbglog_hdr_temp.dbuf; dbglog_hdr.dropped = dbglog_hdr_temp.dropped; @@ -614,6 +657,12 @@ void ol_target_failure(void *instance, A_STATUS status) adf_os_mem_free(dbglog_data); } +#if defined(QCA_WIFI_2_0) && !defined(QCA_WIFI_ISOC) && defined(CONFIG_CNSS) + /* Collect the RAM dump through a workqueue */ + ramdump_scn = scn; + schedule_work(&ramdump_work); +#endif + return; } @@ -869,12 +918,12 @@ int ol_download_firmware(struct ol_softc *scn) } #if defined(QCA_WIFI_2_0) && !defined(QCA_WIFI_ISOC) -int ol_diag_read(struct ol_softc *scn, u_int8_t* buffer, +int ol_diag_read(struct ol_softc *scn, u_int8_t *buffer, u_int32_t pos, size_t count) { int result = 0; - if ((count == 4) && ((pos & 3) == 0)) { + if ((4 == count) && ((pos & 3) == 0)) { result = HIFDiagReadAccess(scn->hif_hdl, pos, (u_int32_t*)buffer); } else { @@ -918,10 +967,10 @@ int ol_diag_read(struct ol_softc *scn, u_int8_t* buffer, * * \return: None * --------------------------------------------------------------------------*/ -void ol_target_coredump(void *inst, void* memoryBlock, u_int32_t blockLength) +void ol_target_coredump(void *inst, void *memoryBlock, u_int32_t blockLength) { struct ol_softc *scn = (struct ol_softc *)inst; - char* bufferLoc = memoryBlock; + char *bufferLoc = memoryBlock; int result = 0; u_int32_t reg_dump_area = 0; u_int32_t amountRead = 0; @@ -948,8 +997,10 @@ void ol_target_coredump(void *inst, void* memoryBlock, u_int32_t blockLength) host_interest_item_address(scn->target_type, offsetof(struct host_interest_s, hi_failure_state)), (A_UCHAR*) ®_dump_area, sizeof(u_int32_t)) != A_OK) { + printk("HifDiagReadiMem FW Dump Area Pointer failed!\n"); return; } + printk("Host interest item address: 0x%08X\n", reg_dump_area); while ((sectionCount < 3) && (amountRead < blockLength)) { switch (sectionCount) { @@ -986,3 +1037,26 @@ void ol_target_coredump(void *inst, void* memoryBlock, u_int32_t blockLength) } #endif +#define MAX_SUPPORTED_PEERS_REV1_1 14 +#define MAX_SUPPORTED_PEERS_REV1_3 32 +u_int8_t ol_get_number_of_peers_supported(struct ol_softc *scn) +{ + u_int8_t max_no_of_peers = 0; + + switch (scn->target_version) { + case AR6320_REV1_3_VERSION: + if(scn->max_no_of_peers > MAX_SUPPORTED_PEERS_REV1_3) + max_no_of_peers = MAX_SUPPORTED_PEERS_REV1_3; + else + max_no_of_peers = scn->max_no_of_peers; + break; + default: + if(scn->max_no_of_peers > MAX_SUPPORTED_PEERS_REV1_1) + max_no_of_peers = MAX_SUPPORTED_PEERS_REV1_1; + else + max_no_of_peers = scn->max_no_of_peers; + break; + } + return max_no_of_peers; +} + diff --git a/CORE/SERVICES/BMI/ol_fw.h b/CORE/SERVICES/BMI/ol_fw.h index 09b6335b1176..6a61db8634ac 100644 --- a/CORE/SERVICES/BMI/ol_fw.h +++ b/CORE/SERVICES/BMI/ol_fw.h @@ -24,7 +24,21 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - +/* + * Copyright (c) 2013 Qualcomm Atheros, Inc. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ #ifndef _OL_FW_H_ #define _OL_FW_H_ @@ -37,6 +51,7 @@ #define QCA_VERSION 0x4100270f #define AR6320_REV1_VERSION 0x5000000 #define AR6320_REV1_1_VERSION 0x5000001 +#define AR6320_REV1_3_VERSION 0x5000003 #define QCA_FIRMWARE_FILE "athwlan.bin" #define QCA_UTF_FIRMWARE_FILE "utf.bin" #define QCA_BOARD_DATA_FILE "fakeboar.bin" @@ -69,4 +84,5 @@ int ol_diag_read(struct ol_softc *scn, u_int8_t* buffer, int ol_download_firmware(struct ol_softc *scn); int ol_configure_target(struct ol_softc *scn); void ol_target_failure(void *instance, A_STATUS status); +u_int8_t ol_get_number_of_peers_supported(struct ol_softc *scn); #endif /* _OL_FW_H_ */ diff --git a/CORE/SERVICES/COMMON/_ieee80211_common.h b/CORE/SERVICES/COMMON/_ieee80211_common.h index 805fc5670587..3476ff53959a 100644 --- a/CORE/SERVICES/COMMON/_ieee80211_common.h +++ b/CORE/SERVICES/COMMON/_ieee80211_common.h @@ -25,6 +25,7 @@ * to the Linux Foundation. */ + #ifndef _COMMON__IEEE80211_H_ #define _COMMON__IEEE80211_H_ diff --git a/CORE/SERVICES/COMMON/a_debug.h b/CORE/SERVICES/COMMON/a_debug.h index ea989a2c20da..5a92c17c749f 100644 --- a/CORE/SERVICES/COMMON/a_debug.h +++ b/CORE/SERVICES/COMMON/a_debug.h @@ -25,6 +25,7 @@ * to the Linux Foundation. */ + #ifndef _A_DEBUG_H_ #define _A_DEBUG_H_ diff --git a/CORE/SERVICES/COMMON/a_osapi.h b/CORE/SERVICES/COMMON/a_osapi.h index da072f743ea7..a345780b6bdc 100644 --- a/CORE/SERVICES/COMMON/a_osapi.h +++ b/CORE/SERVICES/COMMON/a_osapi.h @@ -24,7 +24,23 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - +/* + * Copyright (c) 2013 Qualcomm Atheros, Inc.. + * All Rights Reserved. + * Qualcomm Atheros Confidential and Proprietary. + */ + //------------------------------------------------------------------------------ +// +// Copyright (c) 2004-2010 Atheros Corporation. All rights reserved. +// $ATH_LICENSE_HOSTSDK0_C$ +//------------------------------------------------------------------------------ +//============================================================================== +// This file contains the definitions of the basic atheros data types. +// It is used to map the data types in atheros files to a platform specific +// type. +// +// Author(s): ="Atheros" +//============================================================================== #ifndef _A_OSAPI_H_ #define _A_OSAPI_H_ diff --git a/CORE/SERVICES/COMMON/a_types.h b/CORE/SERVICES/COMMON/a_types.h index 682dd62119f1..589ddb9ec38b 100644 --- a/CORE/SERVICES/COMMON/a_types.h +++ b/CORE/SERVICES/COMMON/a_types.h @@ -24,6 +24,14 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ +//depot/sw/qca_main/perf_pwr_offload/drivers/host/include/a_types.h#7 - integrate change 1327637 (ktext) +//============================================================================== +// This file contains the definitions of the basic atheros data types. +// It is used to map the data types in atheros files to a platform specific +// type. +// +// Author(s): ="Atheros" +//============================================================================== #ifndef _A_TYPES_H_ #define _A_TYPES_H_ diff --git a/CORE/SERVICES/COMMON/adf/a_base_types.h b/CORE/SERVICES/COMMON/adf/a_base_types.h index 40a53bf473b9..0ebb241c3b3b 100644 --- a/CORE/SERVICES/COMMON/adf/a_base_types.h +++ b/CORE/SERVICES/COMMON/adf/a_base_types.h @@ -25,6 +25,7 @@ * to the Linux Foundation. */ + #ifndef __A_BASE_TYPES_H #define __A_BASE_TYPES_H diff --git a/CORE/SERVICES/COMMON/adf/adf_nbuf.c b/CORE/SERVICES/COMMON/adf/adf_nbuf.c index 139725c0a2ec..257de52c6c10 100644 --- a/CORE/SERVICES/COMMON/adf/adf_nbuf.c +++ b/CORE/SERVICES/COMMON/adf/adf_nbuf.c @@ -25,6 +25,7 @@ * to the Linux Foundation. */ + #include #include #include diff --git a/CORE/SERVICES/COMMON/adf/adf_nbuf.h b/CORE/SERVICES/COMMON/adf/adf_nbuf.h index c7eea37cd98c..2bfac4ef84ef 100644 --- a/CORE/SERVICES/COMMON/adf/adf_nbuf.h +++ b/CORE/SERVICES/COMMON/adf/adf_nbuf.h @@ -25,6 +25,7 @@ * to the Linux Foundation. */ + /** * @defgroup adf_nbuf_public network buffer API */ diff --git a/CORE/SERVICES/COMMON/adf/adf_net_types.h b/CORE/SERVICES/COMMON/adf/adf_net_types.h index 2bece564d9d2..80a3b8cc7542 100644 --- a/CORE/SERVICES/COMMON/adf/adf_net_types.h +++ b/CORE/SERVICES/COMMON/adf/adf_net_types.h @@ -25,6 +25,7 @@ * to the Linux Foundation. */ + /** * @ingroup adf_net_public * @file adf_net_types.h diff --git a/CORE/SERVICES/COMMON/adf/adf_os_atomic.h b/CORE/SERVICES/COMMON/adf/adf_os_atomic.h index e0de3a30149f..89edf3264f51 100644 --- a/CORE/SERVICES/COMMON/adf/adf_os_atomic.h +++ b/CORE/SERVICES/COMMON/adf/adf_os_atomic.h @@ -24,7 +24,9 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - +/* + * + */ /** * @ingroup adf_os_public diff --git a/CORE/SERVICES/COMMON/adf/adf_os_bitops.h b/CORE/SERVICES/COMMON/adf/adf_os_bitops.h index 473be1ec2cf5..e9184ee1af59 100644 --- a/CORE/SERVICES/COMMON/adf/adf_os_bitops.h +++ b/CORE/SERVICES/COMMON/adf/adf_os_bitops.h @@ -24,7 +24,9 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - +/* + * + */ /** * @ingroup adf_os_public diff --git a/CORE/SERVICES/COMMON/adf/adf_os_defer.h b/CORE/SERVICES/COMMON/adf/adf_os_defer.h index 0652a9ac4ed0..1d8a0ead8819 100644 --- a/CORE/SERVICES/COMMON/adf/adf_os_defer.h +++ b/CORE/SERVICES/COMMON/adf/adf_os_defer.h @@ -24,7 +24,9 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - +/* + * + */ /** * @ingroup adf_os_public diff --git a/CORE/SERVICES/COMMON/adf/adf_os_dma.h b/CORE/SERVICES/COMMON/adf/adf_os_dma.h index 27f5a0701868..fe1e48f70ece 100644 --- a/CORE/SERVICES/COMMON/adf/adf_os_dma.h +++ b/CORE/SERVICES/COMMON/adf/adf_os_dma.h @@ -25,6 +25,7 @@ * to the Linux Foundation. */ + /** * @ingroup adf_os_public * @file adf_os_dma.h diff --git a/CORE/SERVICES/COMMON/adf/adf_os_io.h b/CORE/SERVICES/COMMON/adf/adf_os_io.h index 4942d664edfb..a44e5efeff19 100644 --- a/CORE/SERVICES/COMMON/adf/adf_os_io.h +++ b/CORE/SERVICES/COMMON/adf/adf_os_io.h @@ -24,7 +24,9 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - +/* + * + */ /** * @ingroup adf_os_public diff --git a/CORE/SERVICES/COMMON/adf/adf_os_lock.c b/CORE/SERVICES/COMMON/adf/adf_os_lock.c index 1e55be41e97a..49d14dbc834f 100644 --- a/CORE/SERVICES/COMMON/adf/adf_os_lock.c +++ b/CORE/SERVICES/COMMON/adf/adf_os_lock.c @@ -25,6 +25,7 @@ * to the Linux Foundation. */ + #include void adf_os_spin_lock_bh_outline(adf_os_spinlock_t *lock) diff --git a/CORE/SERVICES/COMMON/adf/adf_os_lock.h b/CORE/SERVICES/COMMON/adf/adf_os_lock.h index 9b9dece47f81..16f58dc5d539 100644 --- a/CORE/SERVICES/COMMON/adf/adf_os_lock.h +++ b/CORE/SERVICES/COMMON/adf/adf_os_lock.h @@ -24,7 +24,9 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - +/* + * + */ /** * @ingroup adf_os_public diff --git a/CORE/SERVICES/COMMON/adf/adf_os_mem.c b/CORE/SERVICES/COMMON/adf/adf_os_mem.c index d006c43bf5a3..52bf0dc36b94 100644 --- a/CORE/SERVICES/COMMON/adf/adf_os_mem.c +++ b/CORE/SERVICES/COMMON/adf/adf_os_mem.c @@ -25,6 +25,7 @@ * to the Linux Foundation. */ + #include void * diff --git a/CORE/SERVICES/COMMON/adf/adf_os_mem.h b/CORE/SERVICES/COMMON/adf/adf_os_mem.h index 1b884696e8c4..112002d45a62 100644 --- a/CORE/SERVICES/COMMON/adf/adf_os_mem.h +++ b/CORE/SERVICES/COMMON/adf/adf_os_mem.h @@ -25,6 +25,7 @@ * to the Linux Foundation. */ + /** * @ingroup adf_os_public * @file adf_os_mem.h diff --git a/CORE/SERVICES/COMMON/adf/adf_os_module.h b/CORE/SERVICES/COMMON/adf/adf_os_module.h index b4f9cd149532..5374a04f72e0 100644 --- a/CORE/SERVICES/COMMON/adf/adf_os_module.h +++ b/CORE/SERVICES/COMMON/adf/adf_os_module.h @@ -24,7 +24,9 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - +/* + * + */ /** * @ingroup adf_os_public diff --git a/CORE/SERVICES/COMMON/adf/adf_os_stdtypes.h b/CORE/SERVICES/COMMON/adf/adf_os_stdtypes.h index 096410202939..14817c44e393 100644 --- a/CORE/SERVICES/COMMON/adf/adf_os_stdtypes.h +++ b/CORE/SERVICES/COMMON/adf/adf_os_stdtypes.h @@ -25,6 +25,7 @@ * to the Linux Foundation. */ + /** * @defgroup adf_os_public OS abstraction API */ diff --git a/CORE/SERVICES/COMMON/adf/adf_os_time.h b/CORE/SERVICES/COMMON/adf/adf_os_time.h index 4ea2906dc3de..d08a739bdee2 100644 --- a/CORE/SERVICES/COMMON/adf/adf_os_time.h +++ b/CORE/SERVICES/COMMON/adf/adf_os_time.h @@ -24,7 +24,9 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - +/* + * + */ /** * @ingroup adf_os_public diff --git a/CORE/SERVICES/COMMON/adf/adf_os_timer.h b/CORE/SERVICES/COMMON/adf/adf_os_timer.h index ecc0daf32935..6b723140db56 100644 --- a/CORE/SERVICES/COMMON/adf/adf_os_timer.h +++ b/CORE/SERVICES/COMMON/adf/adf_os_timer.h @@ -24,7 +24,9 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - +/* + * + */ /** * @ingroup adf_os_public diff --git a/CORE/SERVICES/COMMON/adf/adf_os_types.h b/CORE/SERVICES/COMMON/adf/adf_os_types.h index b6b7a6b0b0a1..76a15d0f79db 100644 --- a/CORE/SERVICES/COMMON/adf/adf_os_types.h +++ b/CORE/SERVICES/COMMON/adf/adf_os_types.h @@ -25,6 +25,7 @@ * to the Linux Foundation. */ + /** * @ingroup adf_os_public * @file adf_os_types.h diff --git a/CORE/SERVICES/COMMON/adf/adf_os_util.h b/CORE/SERVICES/COMMON/adf/adf_os_util.h index 17c6c7e01574..e54e9d2e319b 100644 --- a/CORE/SERVICES/COMMON/adf/adf_os_util.h +++ b/CORE/SERVICES/COMMON/adf/adf_os_util.h @@ -25,6 +25,7 @@ * to the Linux Foundation. */ + /** * @ingroup adf_os_public * @file adf_os_util.h diff --git a/CORE/SERVICES/COMMON/adf/linux/adf_nbuf_pvt.h b/CORE/SERVICES/COMMON/adf/linux/adf_nbuf_pvt.h index 88f25715b9f9..e553c86b95ac 100644 --- a/CORE/SERVICES/COMMON/adf/linux/adf_nbuf_pvt.h +++ b/CORE/SERVICES/COMMON/adf/linux/adf_nbuf_pvt.h @@ -25,6 +25,7 @@ * to the Linux Foundation. */ + /* * Linux implemenation of skbuf */ diff --git a/CORE/SERVICES/COMMON/adf/linux/adf_os_atomic_pvt.h b/CORE/SERVICES/COMMON/adf/linux/adf_os_atomic_pvt.h index 39160328a214..03acdfb8c701 100644 --- a/CORE/SERVICES/COMMON/adf/linux/adf_os_atomic_pvt.h +++ b/CORE/SERVICES/COMMON/adf/linux/adf_os_atomic_pvt.h @@ -25,6 +25,7 @@ * to the Linux Foundation. */ + #ifndef ADF_OS_ATOMIC_PVT_H #define ADF_OS_ATOMIC_PVT_H diff --git a/CORE/SERVICES/COMMON/adf/linux/adf_os_defer_pvt.c b/CORE/SERVICES/COMMON/adf/linux/adf_os_defer_pvt.c index f7359317caca..c86a5d960a70 100644 --- a/CORE/SERVICES/COMMON/adf/linux/adf_os_defer_pvt.c +++ b/CORE/SERVICES/COMMON/adf/linux/adf_os_defer_pvt.c @@ -25,6 +25,7 @@ * to the Linux Foundation. */ + #include #include #include diff --git a/CORE/SERVICES/COMMON/adf/linux/adf_os_defer_pvt.h b/CORE/SERVICES/COMMON/adf/linux/adf_os_defer_pvt.h index 007565b215d9..ababb0ddd5b9 100644 --- a/CORE/SERVICES/COMMON/adf/linux/adf_os_defer_pvt.h +++ b/CORE/SERVICES/COMMON/adf/linux/adf_os_defer_pvt.h @@ -25,6 +25,7 @@ * to the Linux Foundation. */ + #ifndef _ADF_CMN_OS_DEFER_PVT_H #define _ADF_CMN_OS_DEFER_PVT_H diff --git a/CORE/SERVICES/COMMON/adf/linux/adf_os_dma_pvt.h b/CORE/SERVICES/COMMON/adf/linux/adf_os_dma_pvt.h index 9609d81e6a39..b5e098ed2f7e 100644 --- a/CORE/SERVICES/COMMON/adf/linux/adf_os_dma_pvt.h +++ b/CORE/SERVICES/COMMON/adf/linux/adf_os_dma_pvt.h @@ -25,6 +25,7 @@ * to the Linux Foundation. */ + #ifndef _ADF_CMN_OS_DMA_PVT_H #define _ADF_CMN_OS_DMA_PVT_H diff --git a/CORE/SERVICES/COMMON/adf/linux/adf_os_io_pvt.h b/CORE/SERVICES/COMMON/adf/linux/adf_os_io_pvt.h index a3cbedbafee1..ca1d7188e708 100644 --- a/CORE/SERVICES/COMMON/adf/linux/adf_os_io_pvt.h +++ b/CORE/SERVICES/COMMON/adf/linux/adf_os_io_pvt.h @@ -25,6 +25,7 @@ * to the Linux Foundation. */ + #ifndef _ADF_CMN_OS_IO_PVT_H #define _ADF_CMN_OS_IO_PVT_H diff --git a/CORE/SERVICES/COMMON/adf/linux/adf_os_lock_pvt.c b/CORE/SERVICES/COMMON/adf/linux/adf_os_lock_pvt.c index 49d1095e3ed5..c5887f52ec70 100644 --- a/CORE/SERVICES/COMMON/adf/linux/adf_os_lock_pvt.c +++ b/CORE/SERVICES/COMMON/adf/linux/adf_os_lock_pvt.c @@ -25,6 +25,7 @@ * to the Linux Foundation. */ + #include #include "adf_os_lock.h" diff --git a/CORE/SERVICES/COMMON/adf/linux/adf_os_lock_pvt.h b/CORE/SERVICES/COMMON/adf/linux/adf_os_lock_pvt.h index 5dc7ba91582f..5bf81af170d1 100644 --- a/CORE/SERVICES/COMMON/adf/linux/adf_os_lock_pvt.h +++ b/CORE/SERVICES/COMMON/adf/linux/adf_os_lock_pvt.h @@ -25,6 +25,7 @@ * to the Linux Foundation. */ + #ifndef _ADF_CMN_OS_LOCK_PVT_H #define _ADF_CMN_OS_LOCK_PVT_H diff --git a/CORE/SERVICES/COMMON/adf/linux/adf_os_mem_pvt.c b/CORE/SERVICES/COMMON/adf/linux/adf_os_mem_pvt.c index 91e5a4d0af0e..64b3d07bb51f 100644 --- a/CORE/SERVICES/COMMON/adf/linux/adf_os_mem_pvt.c +++ b/CORE/SERVICES/COMMON/adf/linux/adf_os_mem_pvt.c @@ -25,6 +25,8 @@ * to the Linux Foundation. */ + + #include "adf_os_mem.h" #include "adf_os_module.h" diff --git a/CORE/SERVICES/COMMON/adf/linux/adf_os_mem_pvt.h b/CORE/SERVICES/COMMON/adf/linux/adf_os_mem_pvt.h index 5ace34c038b7..04f1515f5cfe 100644 --- a/CORE/SERVICES/COMMON/adf/linux/adf_os_mem_pvt.h +++ b/CORE/SERVICES/COMMON/adf/linux/adf_os_mem_pvt.h @@ -25,6 +25,7 @@ * to the Linux Foundation. */ + #ifndef ADF_CMN_OS_MEM_PVT_H #define ADF_CMN_OS_MEM_PVT_H diff --git a/CORE/SERVICES/COMMON/adf/linux/adf_os_module_pvt.h b/CORE/SERVICES/COMMON/adf/linux/adf_os_module_pvt.h index 4fbe22fafbdc..d65b9e9d4d85 100644 --- a/CORE/SERVICES/COMMON/adf/linux/adf_os_module_pvt.h +++ b/CORE/SERVICES/COMMON/adf/linux/adf_os_module_pvt.h @@ -25,6 +25,7 @@ * to the Linux Foundation. */ + #ifndef _ADF_CMN_OS_MODULE_PVT_H #define _ADF_CMN_OS_MODULE_PVT_H diff --git a/CORE/SERVICES/COMMON/adf/linux/adf_os_postpack_pvt.h b/CORE/SERVICES/COMMON/adf/linux/adf_os_postpack_pvt.h index 0cb20b37e2a7..bf7169656ec7 100644 --- a/CORE/SERVICES/COMMON/adf/linux/adf_os_postpack_pvt.h +++ b/CORE/SERVICES/COMMON/adf/linux/adf_os_postpack_pvt.h @@ -25,6 +25,7 @@ * to the Linux Foundation. */ + /** * @brief Linux does not require a postpack # directive. */ diff --git a/CORE/SERVICES/COMMON/adf/linux/adf_os_prepack_pvt.h b/CORE/SERVICES/COMMON/adf/linux/adf_os_prepack_pvt.h index aeeb06b9184a..ba1143624bbc 100644 --- a/CORE/SERVICES/COMMON/adf/linux/adf_os_prepack_pvt.h +++ b/CORE/SERVICES/COMMON/adf/linux/adf_os_prepack_pvt.h @@ -25,6 +25,7 @@ * to the Linux Foundation. */ + /** * @brief Linux does not require a prepack # directive. */ diff --git a/CORE/SERVICES/COMMON/adf/linux/adf_os_pseudo_pvt.h b/CORE/SERVICES/COMMON/adf/linux/adf_os_pseudo_pvt.h index 55d0f19878ec..e0d5c10f3e6f 100644 --- a/CORE/SERVICES/COMMON/adf/linux/adf_os_pseudo_pvt.h +++ b/CORE/SERVICES/COMMON/adf/linux/adf_os_pseudo_pvt.h @@ -25,6 +25,7 @@ * to the Linux Foundation. */ + #ifndef __ADF_HST_OS_PSEUDO_PVT_H #define __ADF_HST_OS_PSEUDO_PVT_H diff --git a/CORE/SERVICES/COMMON/adf/linux/adf_os_time_pvt.h b/CORE/SERVICES/COMMON/adf/linux/adf_os_time_pvt.h index f646c2fbb205..0276dae9997b 100644 --- a/CORE/SERVICES/COMMON/adf/linux/adf_os_time_pvt.h +++ b/CORE/SERVICES/COMMON/adf/linux/adf_os_time_pvt.h @@ -25,6 +25,7 @@ * to the Linux Foundation. */ + #ifndef _ADF_CMN_OS_TIME_PVT_H #define _ADF_CMN_OS_TIME_PVT_H diff --git a/CORE/SERVICES/COMMON/adf/linux/adf_os_timer_pvt.h b/CORE/SERVICES/COMMON/adf/linux/adf_os_timer_pvt.h index 9fbc20c0d9e8..269b79bd327d 100644 --- a/CORE/SERVICES/COMMON/adf/linux/adf_os_timer_pvt.h +++ b/CORE/SERVICES/COMMON/adf/linux/adf_os_timer_pvt.h @@ -25,6 +25,7 @@ * to the Linux Foundation. */ + #ifndef _ADF_CMN_OS_TIMER_PVT_H #define _ADF_CMN_OS_TIMER_PVT_H diff --git a/CORE/SERVICES/COMMON/adf/linux/adf_os_trace.h b/CORE/SERVICES/COMMON/adf/linux/adf_os_trace.h index 67565c0f1f6c..7dc541fc9fc0 100644 --- a/CORE/SERVICES/COMMON/adf/linux/adf_os_trace.h +++ b/CORE/SERVICES/COMMON/adf/linux/adf_os_trace.h @@ -25,6 +25,7 @@ * to the Linux Foundation. */ + #ifndef _ADF_TRACE_H #define _ADF_TRACE_H diff --git a/CORE/SERVICES/COMMON/adf/linux/adf_os_types_pvt.h b/CORE/SERVICES/COMMON/adf/linux/adf_os_types_pvt.h index 6b2d66440856..4c7a8e7a1b38 100644 --- a/CORE/SERVICES/COMMON/adf/linux/adf_os_types_pvt.h +++ b/CORE/SERVICES/COMMON/adf/linux/adf_os_types_pvt.h @@ -25,6 +25,7 @@ * to the Linux Foundation. */ + #ifndef _ADF_CMN_OS_TYPES_PVT_H #define _ADF_CMN_OS_TYPES_PVT_H diff --git a/CORE/SERVICES/COMMON/adf/linux/adf_os_util_pvt.h b/CORE/SERVICES/COMMON/adf/linux/adf_os_util_pvt.h index 6b557d55eae1..766b078a4fb1 100644 --- a/CORE/SERVICES/COMMON/adf/linux/adf_os_util_pvt.h +++ b/CORE/SERVICES/COMMON/adf/linux/adf_os_util_pvt.h @@ -25,6 +25,7 @@ * to the Linux Foundation. */ + #ifndef _ADF_CMN_OS_UTIL_PVT_H #define _ADF_CMN_OS_UTIL_PVT_H diff --git a/CORE/SERVICES/COMMON/ah_osdep.h b/CORE/SERVICES/COMMON/ah_osdep.h index 7fb193191b60..07875e98d924 100644 --- a/CORE/SERVICES/COMMON/ah_osdep.h +++ b/CORE/SERVICES/COMMON/ah_osdep.h @@ -25,6 +25,9 @@ * to the Linux Foundation. */ + + + #ifndef _ATH_AH_OSDEP_H_ #define _ATH_AH_OSDEP_H_ diff --git a/CORE/SERVICES/COMMON/apb_athr_wlan_map.h b/CORE/SERVICES/COMMON/apb_athr_wlan_map.h index 440fdc0fc880..c2207436707e 100644 --- a/CORE/SERVICES/COMMON/apb_athr_wlan_map.h +++ b/CORE/SERVICES/COMMON/apb_athr_wlan_map.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef _APB_ATHR_WLAN_MAP_H_ #define _APB_ATHR_WLAN_MAP_H_ diff --git a/CORE/SERVICES/COMMON/athdefs.h b/CORE/SERVICES/COMMON/athdefs.h index bca39ecc9eee..424456a58052 100644 --- a/CORE/SERVICES/COMMON/athdefs.h +++ b/CORE/SERVICES/COMMON/athdefs.h @@ -24,7 +24,14 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - +//------------------------------------------------------------------------------ +// +// Copyright (c) 2004-2010 Atheros Corporation. All rights reserved. +// $ATH_LICENSE_HOSTSDK0_C$ +//------------------------------------------------------------------------------ +//============================================================================== +// Author(s): ="Atheros" +//============================================================================== #ifndef __ATHDEFS_H__ #define __ATHDEFS_H__ diff --git a/CORE/SERVICES/COMMON/athendpack.h b/CORE/SERVICES/COMMON/athendpack.h index 613183bcc19e..9509c61e48bd 100644 --- a/CORE/SERVICES/COMMON/athendpack.h +++ b/CORE/SERVICES/COMMON/athendpack.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifdef VXWORKS #endif /* VXWORKS */ diff --git a/CORE/SERVICES/COMMON/athstartpack.h b/CORE/SERVICES/COMMON/athstartpack.h index d718862c1aca..72f2e8f2d397 100644 --- a/CORE/SERVICES/COMMON/athstartpack.h +++ b/CORE/SERVICES/COMMON/athstartpack.h @@ -24,7 +24,16 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - +//------------------------------------------------------------------------------ +// +// Copyright (c) 2004-2010 Atheros Corporation. All rights reserved. +// $ATH_LICENSE_HOSTSDK0_C$ +//------------------------------------------------------------------------------ +//============================================================================== +// start compiler-specific structure packing +// +// Author(s): ="Atheros" +//============================================================================== #ifndef _ATHSTARTPACK_H #define _ATHSTARTPACK_H diff --git a/CORE/SERVICES/COMMON/bmi.h b/CORE/SERVICES/COMMON/bmi.h index 3994a1f46d58..ea7f7ade0527 100644 --- a/CORE/SERVICES/COMMON/bmi.h +++ b/CORE/SERVICES/COMMON/bmi.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - //============================================================================== // BMI declarations and prototypes // diff --git a/CORE/SERVICES/COMMON/bmi_msg.h b/CORE/SERVICES/COMMON/bmi_msg.h index 4e978ca739ef..169d21c43c46 100644 --- a/CORE/SERVICES/COMMON/bmi_msg.h +++ b/CORE/SERVICES/COMMON/bmi_msg.h @@ -24,7 +24,13 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - +//------------------------------------------------------------------------------ +// Copyright (c) 2004-2012 Atheros Corporation. All rights reserved. +// $ATH_LICENSE_HOSTSDK0_C$ +//------------------------------------------------------------------------------ +//============================================================================== +// Author(s): ="Atheros" +//============================================================================== #ifndef __BMI_MSG_H__ #define __BMI_MSG_H__ diff --git a/CORE/SERVICES/COMMON/dbglog.h b/CORE/SERVICES/COMMON/dbglog.h index f647e596e4d0..a0f3850a8eee 100644 --- a/CORE/SERVICES/COMMON/dbglog.h +++ b/CORE/SERVICES/COMMON/dbglog.h @@ -24,7 +24,14 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - +//------------------------------------------------------------------------------ +// +// Copyright (c) 2004-2010 Atheros Corporation. All rights reserved. +// $ATH_LICENSE_HOSTSDK0_C$ +//------------------------------------------------------------------------------ +//============================================================================== +// Author(s): ="Atheros" +//============================================================================== #ifndef _DBGLOG_H_ #define _DBGLOG_H_ diff --git a/CORE/SERVICES/COMMON/dbglog_host.h b/CORE/SERVICES/COMMON/dbglog_host.h index 72fa54191d81..683d990ad3d4 100644 --- a/CORE/SERVICES/COMMON/dbglog_host.h +++ b/CORE/SERVICES/COMMON/dbglog_host.h @@ -25,6 +25,7 @@ * to the Linux Foundation. */ + #ifndef _DBGLOG_HOST_H_ #define _DBGLOG_HOST_H_ @@ -50,7 +51,7 @@ typedef enum { #define ATH6KL_FWLOG_PAYLOAD_SIZE 1500 -#define HDRLEN 8 +#define HDRLEN 12 #define RECLEN (HDRLEN + ATH6KL_FWLOG_PAYLOAD_SIZE) #define DBGLOG_PRINT_PREFIX "FWLOG: " @@ -58,6 +59,7 @@ typedef enum { struct dbglog_slot { unsigned int timestamp; unsigned int length; + unsigned int dropped; /* max ATH6KL_FWLOG_PAYLOAD_SIZE bytes */ u_int8_t payload[0]; diff --git a/CORE/SERVICES/COMMON/dbglog_id.h b/CORE/SERVICES/COMMON/dbglog_id.h index f82f5e4e081e..e3280e0baeb1 100644 --- a/CORE/SERVICES/COMMON/dbglog_id.h +++ b/CORE/SERVICES/COMMON/dbglog_id.h @@ -24,7 +24,19 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - +/* + * Copyright (c) 2004-2010, 2013 Qualcomm Atheros, Inc.. + * All Rights Reserved. + * Qualcomm Atheros Confidential and Proprietary. + */ +//------------------------------------------------------------------------------ +// +// Copyright (c) 2004-2010 Atheros Corporation. All rights reserved. +// $ATH_LICENSE_HOSTSDK0_C$ +//------------------------------------------------------------------------------ +//============================================================================== +// Author(s): ="Atheros" +//============================================================================== #ifndef _DBGLOG_ID_H_ #define _DBGLOG_ID_H_ @@ -137,6 +149,8 @@ extern "C" { #define PS_STA_SET_PARAM 6 #define PS_STA_SPECPOLL_TIMER_STARTED 7 #define PS_STA_SPECPOLL_TIMER_STOPPED 8 +#define PS_STA_AVG_CHANNEL_CONGESTION 9 +#define PS_STA_DEFINITION_END 10 /** RESMGR dbg ids */ /* TODO: 1. Segregate IDs as per sub-module. (Give 100 per sub-module?) @@ -277,7 +291,12 @@ extern "C" { #define WHAL_ERROR_INTERRUPT_BB_PANIC 35 #define WHAL_ERROR_PAPRD_MAXGAIN_ABOVE_WINDOW 36 #define WHAL_ERROR_QCU_HW_PAUSE_MISMATCH 37 -#define WHAL_DBGID_DEFINITION_END 38 +#define WHAL_ERROR_POWER_RFLP_CONFIG 38 +#define WHAL_ERROR_POWER_RFLP_SYNTHBYPASS_CONFIG 39 +#define WHAL_ERROR_POWER_RFLP_BIAS2X_CONFIG 40 +#define WHAL_ERROR_POWER_RFLP_PLLBYPASS_CONFIG 41 +#define WHAL_ERROR_POWER_RFLP_OFF1CHAN_CONFIG 42 +#define WHAL_DBGID_DEFINITION_END 43 #define COEX_DEBUGID_START 0 #define BTCOEX_DBG_MCI_1 1 @@ -906,6 +925,10 @@ extern "C" { #define WLAN_HB_DBGID_TCP_TX 14 #define WLAN_HB_DBGID_DEFINITION_END 15 +/* Thermal Manager DBGIDs */ +#define THERMAL_MGR_NEW_THRESH 0 +#define THERMAL_MGR_THRESH_CROSSED 1 + #ifdef __cplusplus } #endif diff --git a/CORE/SERVICES/COMMON/debug_linux.h b/CORE/SERVICES/COMMON/debug_linux.h index fd92d42b595b..8aa0a355f6d0 100644 --- a/CORE/SERVICES/COMMON/debug_linux.h +++ b/CORE/SERVICES/COMMON/debug_linux.h @@ -25,6 +25,7 @@ * to the Linux Foundation. */ + #ifndef _DEBUG_LINUX_H_ #define _DEBUG_LINUX_H_ diff --git a/CORE/SERVICES/COMMON/dl_list.h b/CORE/SERVICES/COMMON/dl_list.h index a5cf14254574..8b374eee3661 100644 --- a/CORE/SERVICES/COMMON/dl_list.h +++ b/CORE/SERVICES/COMMON/dl_list.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - //============================================================================== // Double-link list definitions (adapted from Atheros SDIO stack) // diff --git a/CORE/SERVICES/COMMON/efuse_reg.h b/CORE/SERVICES/COMMON/efuse_reg.h index 095c0898fbe0..25da696c52e1 100644 --- a/CORE/SERVICES/COMMON/efuse_reg.h +++ b/CORE/SERVICES/COMMON/efuse_reg.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef _EFUSE_REG_REG_H_ #define _EFUSE_REG_REG_H_ diff --git a/CORE/SERVICES/COMMON/enet.h b/CORE/SERVICES/COMMON/enet.h index 9bd2e000296d..3feb40b1a02a 100644 --- a/CORE/SERVICES/COMMON/enet.h +++ b/CORE/SERVICES/COMMON/enet.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef _ENET__H_ #define _ENET__H_ diff --git a/CORE/SERVICES/COMMON/hif.h b/CORE/SERVICES/COMMON/hif.h index 0154f1a3a525..4de405463595 100644 --- a/CORE/SERVICES/COMMON/hif.h +++ b/CORE/SERVICES/COMMON/hif.h @@ -24,7 +24,11 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - +//------------------------------------------------------------------------------ +// +// Copyright (c) 2004-2010 Atheros Corporation. All rights reserved. +// $ATH_LICENSE_HOSTSDK0_C$ +//------------------------------------------------------------------------------ //============================================================================== // HIF specific declarations and prototypes // diff --git a/CORE/SERVICES/COMMON/hif_msg_based.h b/CORE/SERVICES/COMMON/hif_msg_based.h index cdf702f288a3..8fdf92f3364f 100644 --- a/CORE/SERVICES/COMMON/hif_msg_based.h +++ b/CORE/SERVICES/COMMON/hif_msg_based.h @@ -25,6 +25,7 @@ * to the Linux Foundation. */ + //============================================================================== // HIF definitions for message based HIFs //============================================================================== diff --git a/CORE/SERVICES/COMMON/htc.h b/CORE/SERVICES/COMMON/htc.h index 10eb38c5fb6d..f49ac166a870 100644 --- a/CORE/SERVICES/COMMON/htc.h +++ b/CORE/SERVICES/COMMON/htc.h @@ -24,7 +24,14 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - +//------------------------------------------------------------------------------ +// +// Copyright (c) 2004-2010 Atheros Corporation. All rights reserved. +// $ATH_LICENSE_HOSTSDK0_C$ +//------------------------------------------------------------------------------ +//============================================================================== +// Author(s): ="Atheros" +//============================================================================== #ifndef __HTC_H__ #define __HTC_H__ diff --git a/CORE/SERVICES/COMMON/htc_api.h b/CORE/SERVICES/COMMON/htc_api.h index 8199b8e971b5..1770f6c06b0d 100644 --- a/CORE/SERVICES/COMMON/htc_api.h +++ b/CORE/SERVICES/COMMON/htc_api.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef _HTC_API_H_ #define _HTC_API_H_ diff --git a/CORE/SERVICES/COMMON/htc_packet.h b/CORE/SERVICES/COMMON/htc_packet.h index 2ea365955d20..a03a0613374c 100644 --- a/CORE/SERVICES/COMMON/htc_packet.h +++ b/CORE/SERVICES/COMMON/htc_packet.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef HTC_PACKET_H_ #define HTC_PACKET_H_ diff --git a/CORE/SERVICES/COMMON/htc_services.h b/CORE/SERVICES/COMMON/htc_services.h index fa85e6106c82..d08e39cbe66b 100644 --- a/CORE/SERVICES/COMMON/htc_services.h +++ b/CORE/SERVICES/COMMON/htc_services.h @@ -24,7 +24,14 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - +//------------------------------------------------------------------------------ +// +// Copyright (c) 2007 Atheros Corporation. All rights reserved. +// $ATH_LICENSE_HOSTSDK0_C$ +//------------------------------------------------------------------------------ +//============================================================================== +// Author(s): ="Atheros" +//============================================================================== #ifndef __HTC_SERVICES_H__ #define __HTC_SERVICES_H__ diff --git a/CORE/SERVICES/COMMON/hwdef.h b/CORE/SERVICES/COMMON/hwdef.h index e02b66b18fbf..cef151bcd1cf 100644 --- a/CORE/SERVICES/COMMON/hwdef.h +++ b/CORE/SERVICES/COMMON/hwdef.h @@ -25,6 +25,7 @@ * to the Linux Foundation. */ + #ifndef _HW_DEF_H #define _HW_DEF_H diff --git a/CORE/SERVICES/COMMON/ieee80211_common.h b/CORE/SERVICES/COMMON/ieee80211_common.h index 86c4333dff5e..c8c6c244461e 100644 --- a/CORE/SERVICES/COMMON/ieee80211_common.h +++ b/CORE/SERVICES/COMMON/ieee80211_common.h @@ -24,7 +24,9 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - +/* + * + */ #ifndef EXTERNAL_USE_ONLY #include "osdep.h" diff --git a/CORE/SERVICES/COMMON/ieee80211_defines.h b/CORE/SERVICES/COMMON/ieee80211_defines.h index 6533e7ea0e90..0c7d6604453c 100644 --- a/CORE/SERVICES/COMMON/ieee80211_defines.h +++ b/CORE/SERVICES/COMMON/ieee80211_defines.h @@ -24,7 +24,9 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - +/* + * + */ #ifndef _IEEE80211_DEFINES_H_ #define _IEEE80211_DEFINES_H_ diff --git a/CORE/SERVICES/COMMON/if_llc.h b/CORE/SERVICES/COMMON/if_llc.h index 1a55cab230aa..be56f9ca69ad 100644 --- a/CORE/SERVICES/COMMON/if_llc.h +++ b/CORE/SERVICES/COMMON/if_llc.h @@ -25,6 +25,7 @@ * to the Linux Foundation. */ + /* * Copyright (c) 1988, 1993 * The Regents of the University of California. All rights reserved. diff --git a/CORE/SERVICES/COMMON/if_upperproto.h b/CORE/SERVICES/COMMON/if_upperproto.h index c74a39e02e79..a753a24664ec 100644 --- a/CORE/SERVICES/COMMON/if_upperproto.h +++ b/CORE/SERVICES/COMMON/if_upperproto.h @@ -24,7 +24,9 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - +/* + * + */ //#ifndef _NET_IF_ETHERSUBR_H_ //#define _NET_IF_ETHERSUBR_H_ diff --git a/CORE/SERVICES/COMMON/ip_prot.h b/CORE/SERVICES/COMMON/ip_prot.h index 821abd2a0d4f..d41bdb9ebc17 100644 --- a/CORE/SERVICES/COMMON/ip_prot.h +++ b/CORE/SERVICES/COMMON/ip_prot.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef _IP_PROT__H_ #define _IP_PROT__H_ diff --git a/CORE/SERVICES/COMMON/ipv4.h b/CORE/SERVICES/COMMON/ipv4.h index 641c259846b6..c5c4650a2480 100644 --- a/CORE/SERVICES/COMMON/ipv4.h +++ b/CORE/SERVICES/COMMON/ipv4.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef _IPV4__H_ #define _IPV4__H_ diff --git a/CORE/SERVICES/COMMON/ipv6_defs.h b/CORE/SERVICES/COMMON/ipv6_defs.h index 679b71e2bba8..0b38533ea56b 100644 --- a/CORE/SERVICES/COMMON/ipv6_defs.h +++ b/CORE/SERVICES/COMMON/ipv6_defs.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef _IPV6__H_ #define _IPV6__H_ diff --git a/CORE/SERVICES/COMMON/isoc_hw_desc.h b/CORE/SERVICES/COMMON/isoc_hw_desc.h index fbf28f99612d..e79fec192d1c 100644 --- a/CORE/SERVICES/COMMON/isoc_hw_desc.h +++ b/CORE/SERVICES/COMMON/isoc_hw_desc.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /** * @file isoc_hw_desc.h * @brief Define the Tx BD and Rx BD structs diff --git a/CORE/SERVICES/COMMON/ol_cfg.h b/CORE/SERVICES/COMMON/ol_cfg.h index 40594bad3b7d..de5df41ff28a 100644 --- a/CORE/SERVICES/COMMON/ol_cfg.h +++ b/CORE/SERVICES/COMMON/ol_cfg.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef _OL_CFG__H_ #define _OL_CFG__H_ diff --git a/CORE/SERVICES/COMMON/ol_ctrl_addba_api.h b/CORE/SERVICES/COMMON/ol_ctrl_addba_api.h index 279eed09405e..646d70620bee 100644 --- a/CORE/SERVICES/COMMON/ol_ctrl_addba_api.h +++ b/CORE/SERVICES/COMMON/ol_ctrl_addba_api.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef _OL_CTRL_ADDBA_API_H_ #define _OL_CTRL_ADDBA_API_H_ #ifdef QCA_WIFI_ISOC diff --git a/CORE/SERVICES/COMMON/ol_ctrl_api.h b/CORE/SERVICES/COMMON/ol_ctrl_api.h index efa543dfdaa9..1ad264dc16dd 100644 --- a/CORE/SERVICES/COMMON/ol_ctrl_api.h +++ b/CORE/SERVICES/COMMON/ol_ctrl_api.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /** * @file ol_ctrl_api.h * @brief Definitions used in multiple external interfaces to the control SW. diff --git a/CORE/SERVICES/COMMON/ol_defines.h b/CORE/SERVICES/COMMON/ol_defines.h index c570a072d49e..076e91726648 100644 --- a/CORE/SERVICES/COMMON/ol_defines.h +++ b/CORE/SERVICES/COMMON/ol_defines.h @@ -25,6 +25,7 @@ * to the Linux Foundation. */ + /* * Offload specific Opaque Data types. */ diff --git a/CORE/SERVICES/COMMON/ol_fw_tx_dbg.h b/CORE/SERVICES/COMMON/ol_fw_tx_dbg.h index 794108625d58..9eb743f6048f 100644 --- a/CORE/SERVICES/COMMON/ol_fw_tx_dbg.h +++ b/CORE/SERVICES/COMMON/ol_fw_tx_dbg.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /** * @file ol_fw_tx_dbg.h * diff --git a/CORE/SERVICES/COMMON/ol_htt_api.h b/CORE/SERVICES/COMMON/ol_htt_api.h index 6ec71939696b..830e4c946dfd 100644 --- a/CORE/SERVICES/COMMON/ol_htt_api.h +++ b/CORE/SERVICES/COMMON/ol_htt_api.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /** * @file ol_htt_api.h * @brief Specify the general HTT API functions called by the host data SW. diff --git a/CORE/SERVICES/COMMON/ol_htt_rx_api.h b/CORE/SERVICES/COMMON/ol_htt_rx_api.h index bf04d26999c5..8d046c08d4b8 100644 --- a/CORE/SERVICES/COMMON/ol_htt_rx_api.h +++ b/CORE/SERVICES/COMMON/ol_htt_rx_api.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /** * @file ol_htt_rx_api.h * @brief Specify the rx HTT API functions called by the host data SW. diff --git a/CORE/SERVICES/COMMON/ol_htt_tx_api.h b/CORE/SERVICES/COMMON/ol_htt_tx_api.h index 5555015258ea..98e5dcd1274c 100644 --- a/CORE/SERVICES/COMMON/ol_htt_tx_api.h +++ b/CORE/SERVICES/COMMON/ol_htt_tx_api.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /** * @file ol_htt_tx_api.h * @brief Specify the tx HTT API functions called by the host data SW. diff --git a/CORE/SERVICES/COMMON/ol_if_athvar.h b/CORE/SERVICES/COMMON/ol_if_athvar.h index 06eb5665ae45..ab76392231c8 100644 --- a/CORE/SERVICES/COMMON/ol_if_athvar.h +++ b/CORE/SERVICES/COMMON/ol_if_athvar.h @@ -24,6 +24,21 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ +/* + * Copyright (c) 2010-2013 Qualcomm Atheros, Inc. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ /* * Defintions for the Atheros Wireless LAN controller driver. @@ -205,6 +220,7 @@ struct ol_softc { u_int8_t dtcs; /* Dynamic Tx Chainmask Selection enabled/disabled */ u_int32_t set_ht_vht_ies:1; /* true if vht ies are set on target */ bool scn_cwmenable; /*CWM enable/disable state*/ + u_int8_t max_no_of_peers; }; #ifdef PERE_IP_HDR_ALIGNMENT_WAR diff --git a/CORE/SERVICES/COMMON/ol_osif_api.h b/CORE/SERVICES/COMMON/ol_osif_api.h index df0e2391b92d..ae5261c99b83 100644 --- a/CORE/SERVICES/COMMON/ol_osif_api.h +++ b/CORE/SERVICES/COMMON/ol_osif_api.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /** * @file ol_osif_api.h * @brief Definitions used in multiple external interfaces to the txrx SW. diff --git a/CORE/SERVICES/COMMON/ol_params.h b/CORE/SERVICES/COMMON/ol_params.h index 4628e291300a..8d45fb125367 100644 --- a/CORE/SERVICES/COMMON/ol_params.h +++ b/CORE/SERVICES/COMMON/ol_params.h @@ -25,6 +25,7 @@ * to the Linux Foundation. */ + /* * Defintions for the Atheros Wireless LAN controller driver. */ diff --git a/CORE/SERVICES/COMMON/ol_txrx_api.h b/CORE/SERVICES/COMMON/ol_txrx_api.h index abe014d3cf6f..f79f5143d19b 100644 --- a/CORE/SERVICES/COMMON/ol_txrx_api.h +++ b/CORE/SERVICES/COMMON/ol_txrx_api.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /** * @file ol_txrx_api.h * @brief Definitions used in multiple external interfaces to the txrx SW. diff --git a/CORE/SERVICES/COMMON/ol_txrx_ctrl_api.h b/CORE/SERVICES/COMMON/ol_txrx_ctrl_api.h index 46c076739f80..d40bca237e68 100644 --- a/CORE/SERVICES/COMMON/ol_txrx_ctrl_api.h +++ b/CORE/SERVICES/COMMON/ol_txrx_ctrl_api.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /** * @file ol_txrx_ctrl_api.h * @brief Define the host data API functions called by the host control SW. diff --git a/CORE/SERVICES/COMMON/ol_txrx_dbg.h b/CORE/SERVICES/COMMON/ol_txrx_dbg.h index 7c61c35a68ff..9f9fe136a413 100644 --- a/CORE/SERVICES/COMMON/ol_txrx_dbg.h +++ b/CORE/SERVICES/COMMON/ol_txrx_dbg.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /** * @file ol_txrx_dbg.h * @brief Functions provided for visibility and debugging. diff --git a/CORE/SERVICES/COMMON/ol_txrx_htt_api.h b/CORE/SERVICES/COMMON/ol_txrx_htt_api.h index a3428ca0126a..0277228f6c47 100644 --- a/CORE/SERVICES/COMMON/ol_txrx_htt_api.h +++ b/CORE/SERVICES/COMMON/ol_txrx_htt_api.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /** * @file ol_txrx_htt_api.h * @brief Define the host data API functions called by the host HTT SW. diff --git a/CORE/SERVICES/COMMON/ol_txrx_osif_api.h b/CORE/SERVICES/COMMON/ol_txrx_osif_api.h index d0c357aeb33c..495ce4749e47 100644 --- a/CORE/SERVICES/COMMON/ol_txrx_osif_api.h +++ b/CORE/SERVICES/COMMON/ol_txrx_osif_api.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /** * @file ol_txrx_osif_api.h * @brief Define the host data API functions called by the host OS shim SW. diff --git a/CORE/SERVICES/COMMON/ol_txrx_stats.h b/CORE/SERVICES/COMMON/ol_txrx_stats.h index f0c2c836e121..f8bb681a20a9 100644 --- a/CORE/SERVICES/COMMON/ol_txrx_stats.h +++ b/CORE/SERVICES/COMMON/ol_txrx_stats.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /** * @file ol_txrx_status.h * @brief Functions provided for visibility and debugging. diff --git a/CORE/SERVICES/COMMON/ol_vowext_dbg_defs.h b/CORE/SERVICES/COMMON/ol_vowext_dbg_defs.h index ebdb4f594b2c..40917eb0d69f 100644 --- a/CORE/SERVICES/COMMON/ol_vowext_dbg_defs.h +++ b/CORE/SERVICES/COMMON/ol_vowext_dbg_defs.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef _VOW_DEFINES__H_ #define _VOW_DEFINES__H_ diff --git a/CORE/SERVICES/COMMON/osapi_linux.h b/CORE/SERVICES/COMMON/osapi_linux.h index cb8cf7d44e89..2d3e3aa3ca93 100644 --- a/CORE/SERVICES/COMMON/osapi_linux.h +++ b/CORE/SERVICES/COMMON/osapi_linux.h @@ -25,6 +25,7 @@ * to the Linux Foundation. */ + //------------------------------------------------------------------------------ // This file contains the definitions of the basic atheros data types. // It is used to map the data types in atheros files to a platform specific diff --git a/CORE/SERVICES/COMMON/osdep.h b/CORE/SERVICES/COMMON/osdep.h index 2d64b8ba905d..db227d8f31c4 100644 --- a/CORE/SERVICES/COMMON/osdep.h +++ b/CORE/SERVICES/COMMON/osdep.h @@ -25,6 +25,8 @@ * to the Linux Foundation. */ + + #ifndef _ATH_LINUX_OSDEP_H #define _ATH_LINUX_OSDEP_H #include "wlan_opts.h" diff --git a/CORE/SERVICES/COMMON/osdep_adf.h b/CORE/SERVICES/COMMON/osdep_adf.h index bf5bb1d7ae3a..2522b4601eec 100644 --- a/CORE/SERVICES/COMMON/osdep_adf.h +++ b/CORE/SERVICES/COMMON/osdep_adf.h @@ -25,6 +25,8 @@ * to the Linux Foundation. */ + + #ifndef _ATH_LINUX_OSDEP_ADF_H #define _ATH_LINUX_OSDEP_ADF_H diff --git a/CORE/SERVICES/COMMON/pktlog.h b/CORE/SERVICES/COMMON/pktlog.h index f4dd030bca56..fdd1fe68416c 100644 --- a/CORE/SERVICES/COMMON/pktlog.h +++ b/CORE/SERVICES/COMMON/pktlog.h @@ -24,6 +24,21 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ +/* + * Copyright (c) 2012-2013 Qualcomm Atheros, Inc. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ #ifndef _PKTLOG_ #define _PKTLOG_ diff --git a/CORE/SERVICES/COMMON/pktlog_ac_fmt.h b/CORE/SERVICES/COMMON/pktlog_ac_fmt.h index 870d66f30714..15c0593d9366 100644 --- a/CORE/SERVICES/COMMON/pktlog_ac_fmt.h +++ b/CORE/SERVICES/COMMON/pktlog_ac_fmt.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef REMOVE_PKT_LOG #ifndef _PKTLOG_FMT_H_ #define _PKTLOG_FMT_H_ diff --git a/CORE/SERVICES/COMMON/queue.h b/CORE/SERVICES/COMMON/queue.h index 080cbcb07f13..ba275d38eac2 100644 --- a/CORE/SERVICES/COMMON/queue.h +++ b/CORE/SERVICES/COMMON/queue.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - // // Copyright (c) 1991, 1993 // The Regents of the University of California. All rights reserved. diff --git a/CORE/SERVICES/COMMON/rtc_soc_reg.h b/CORE/SERVICES/COMMON/rtc_soc_reg.h index 2cd1ce25dda2..cbfa016c3b74 100644 --- a/CORE/SERVICES/COMMON/rtc_soc_reg.h +++ b/CORE/SERVICES/COMMON/rtc_soc_reg.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef _RTC_SOC_REG_REG_H_ #define _RTC_SOC_REG_REG_H_ diff --git a/CORE/SERVICES/COMMON/sys/queue.h b/CORE/SERVICES/COMMON/sys/queue.h index ea6e665fc590..332aa85f65aa 100644 --- a/CORE/SERVICES/COMMON/sys/queue.h +++ b/CORE/SERVICES/COMMON/sys/queue.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* * Notifications and licenses are retained for attribution purposes only. */ diff --git a/CORE/SERVICES/COMMON/targaddrs.h b/CORE/SERVICES/COMMON/targaddrs.h index 66492e75f807..a91787530b6a 100644 --- a/CORE/SERVICES/COMMON/targaddrs.h +++ b/CORE/SERVICES/COMMON/targaddrs.h @@ -24,7 +24,14 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - +//------------------------------------------------------------------------------ +// +// Copyright (c) 2010 Atheros Corporation. All rights reserved. +// $ATH_LICENSE_HOSTSDK0_C$ +//------------------------------------------------------------------------------ +//============================================================================== +// Author(s): ="Atheros" +//============================================================================== #ifndef __TARGADDRS_H__ #define __TARGADDRS_H__ diff --git a/CORE/SERVICES/COMMON/targcfg.h b/CORE/SERVICES/COMMON/targcfg.h index 5d57afab1e03..7b51511d4774 100644 --- a/CORE/SERVICES/COMMON/targcfg.h +++ b/CORE/SERVICES/COMMON/targcfg.h @@ -24,7 +24,14 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - +//------------------------------------------------------------------------------ +// +// Copyright (c) 2004-2010 Qualcomm Atheros Inc. All rights reserved. +// $ATH_LICENSE_HOSTSDK0_C$ +//------------------------------------------------------------------------------ +//============================================================================== +// Author(s): ="Atheros" +//============================================================================== #ifndef __TARGCFG_H__ #define __TARGCFG_H__ diff --git a/CORE/SERVICES/COMMON/testmode.h b/CORE/SERVICES/COMMON/testmode.h index 534e74f48f71..29c66a5beadd 100644 --- a/CORE/SERVICES/COMMON/testmode.h +++ b/CORE/SERVICES/COMMON/testmode.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef _TESTMODE_H_ #define _TESTMODE_H_ diff --git a/CORE/SERVICES/COMMON/wal_rx_desc.h b/CORE/SERVICES/COMMON/wal_rx_desc.h index cd3a598619e7..2c9e23bac86f 100644 --- a/CORE/SERVICES/COMMON/wal_rx_desc.h +++ b/CORE/SERVICES/COMMON/wal_rx_desc.h @@ -24,7 +24,9 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - +/* + * $ATH_LICENSE_TARGET_C$ + */ #ifndef _WAL_RX_DESC__H_ #define _WAL_RX_DESC__H_ diff --git a/CORE/SERVICES/COMMON/wdi_event.h b/CORE/SERVICES/COMMON/wdi_event.h index b1d0d600e3f0..690bbe4417c6 100644 --- a/CORE/SERVICES/COMMON/wdi_event.h +++ b/CORE/SERVICES/COMMON/wdi_event.h @@ -24,6 +24,21 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ +/* + * Copyright (c) 2012-2013 Qualcomm Atheros, Inc. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ #ifndef _WDI_EVENT_H_ #define _WDI_EVENT_H_ diff --git a/CORE/SERVICES/COMMON/wdi_event_api.h b/CORE/SERVICES/COMMON/wdi_event_api.h index 3225d19b9e19..c6970b36adc0 100644 --- a/CORE/SERVICES/COMMON/wdi_event_api.h +++ b/CORE/SERVICES/COMMON/wdi_event_api.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef _WDI_EVENT_API_H_ #define _WDI_EVENT_API_H_ diff --git a/CORE/SERVICES/COMMON/wdi_in.h b/CORE/SERVICES/COMMON/wdi_in.h index 275f01293d08..db87a78a4587 100644 --- a/CORE/SERVICES/COMMON/wdi_in.h +++ b/CORE/SERVICES/COMMON/wdi_in.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* AUTO-GENERATED FILE - DO NOT EDIT DIRECTLY */ /** * @addtogroup WDIAPI diff --git a/CORE/SERVICES/COMMON/wdi_out.h b/CORE/SERVICES/COMMON/wdi_out.h index 3bde67310356..726ad369329a 100644 --- a/CORE/SERVICES/COMMON/wdi_out.h +++ b/CORE/SERVICES/COMMON/wdi_out.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* AUTO-GENERATED FILE - DO NOT EDIT DIRECTLY */ /** * @addtogroup WDIAPI diff --git a/CORE/SERVICES/COMMON/wdi_types.h b/CORE/SERVICES/COMMON/wdi_types.h index 0064c8194bbb..e8f186fa2cf5 100644 --- a/CORE/SERVICES/COMMON/wdi_types.h +++ b/CORE/SERVICES/COMMON/wdi_types.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* AUTO-GENERATED FILE - DO NOT EDIT DIRECTLY */ /** * @addtogroup WDIAPI diff --git a/CORE/SERVICES/COMMON/wlan_defs.h b/CORE/SERVICES/COMMON/wlan_defs.h index 851d0095c7fb..efd5aa1b50c5 100644 --- a/CORE/SERVICES/COMMON/wlan_defs.h +++ b/CORE/SERVICES/COMMON/wlan_defs.h @@ -24,7 +24,14 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - +//------------------------------------------------------------------------------ +// +// Copyright (c) 2004-2010, 2013 Atheros Corporation. All rights reserved. +// $ATH_LICENSE_HOSTSDK0_C$ +//------------------------------------------------------------------------------ +//============================================================================== +// Author(s): ="Atheros" +//============================================================================== #ifndef __WLANDEFS_H__ #define __WLANDEFS_H__ diff --git a/CORE/SERVICES/COMMON/wlan_module_ids.h b/CORE/SERVICES/COMMON/wlan_module_ids.h index acb0baa705a3..f4973fb0aa15 100644 --- a/CORE/SERVICES/COMMON/wlan_module_ids.h +++ b/CORE/SERVICES/COMMON/wlan_module_ids.h @@ -25,7 +25,9 @@ * to the Linux Foundation. */ - +/* + * $ATH_LICENSE_TARGET_C$ + */ #ifndef _WLAN_MODULE_IDS_H_ #define _WLAN_MODULE_IDS_H_ @@ -75,6 +77,7 @@ typedef enum { WLAN_MODULE_HB, WLAN_MODULE_TXBF, WLAN_MODULE_BATCH_SCAN, + WLAN_MODULE_THERMAL_MGR, WLAN_MODULE_ID_MAX, WLAN_MODULE_ID_INVALID = WLAN_MODULE_ID_MAX, } WLAN_MODULE_ID; diff --git a/CORE/SERVICES/COMMON/wlan_opts.h b/CORE/SERVICES/COMMON/wlan_opts.h index f8c564488929..736d42706f42 100644 --- a/CORE/SERVICES/COMMON/wlan_opts.h +++ b/CORE/SERVICES/COMMON/wlan_opts.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef _WLAN_OPTS_H_ #define _WLAN_OPTS_H_ diff --git a/CORE/SERVICES/COMMON/wlan_tgt_def_config.h b/CORE/SERVICES/COMMON/wlan_tgt_def_config.h index 8ebfde5d55c5..dee90620fab7 100644 --- a/CORE/SERVICES/COMMON/wlan_tgt_def_config.h +++ b/CORE/SERVICES/COMMON/wlan_tgt_def_config.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef __WLAN_TGT_DEF_CONFIG_H__ #define __WLAN_TGT_DEF_CONFIG_H__ @@ -66,7 +65,7 @@ /* * total number of peers per device. */ -#define CFG_TGT_NUM_PEERS 8 +#define CFG_TGT_NUM_PEERS 14 /* * In offload mode target supports features like WOW, chatter and other @@ -105,7 +104,7 @@ /* * total number of data TX and RX TIDs */ -#define CFG_TGT_NUM_TIDS (2 * CFG_TGT_NUM_PEERS) +#define CFG_TGT_NUM_TIDS (2 * (CFG_TGT_NUM_PEERS + CFG_TGT_NUM_VDEV + 2)) /* * set this to 0x7 (Peregrine = 3 chains). * need to be set dynamically based on the HW capability. @@ -130,16 +129,16 @@ #define CFG_TGT_DEFAULT_SCAN_MAX_REQS 0x4 /* maximum number of VDEV that could use BMISS offload */ -#define CFG_TGT_DEFAULT_BMISS_OFFLOAD_MAX_VDEV 0x3 +#define CFG_TGT_DEFAULT_BMISS_OFFLOAD_MAX_VDEV 0x2 /* maximum number of VDEV offload Roaming to support */ -#define CFG_TGT_DEFAULT_ROAM_OFFLOAD_MAX_VDEV 0x3 +#define CFG_TGT_DEFAULT_ROAM_OFFLOAD_MAX_VDEV 0x2 /* maximum number of AP profiles pushed to offload Roaming */ #define CFG_TGT_DEFAULT_ROAM_OFFLOAD_MAX_PROFILES 0x8 /* maximum number of VDEV offload GTK to support */ -#define CFG_TGT_DEFAULT_GTK_OFFLOAD_MAX_VDEV 0x3 +#define CFG_TGT_DEFAULT_GTK_OFFLOAD_MAX_VDEV 0x2 /* default: mcast->ucast disabled if ATH_SUPPORT_MCAST2UCAST not defined */ #ifndef ATH_SUPPORT_MCAST2UCAST @@ -167,7 +166,7 @@ #define CFG_TGT_DEFAULT_TX_DBG_LOG_SIZE 1024 /* bytes */ /* target based fragment timeout and MPDU duplicate detection */ -#define CFG_TGT_DEFAULT_RX_SKIP_DEFRAG_TIMEOUT_DUP_DETECTION_CHECK 0 +#define CFG_TGT_DEFAULT_RX_SKIP_DEFRAG_TIMEOUT_DUP_DETECTION_CHECK 1 /* Default VoW configuration */ @@ -188,4 +187,14 @@ */ #define CFG_TGT_DEFAULT_BEACON_TX_OFFLOAD_MAX_VDEV 2 +/* + * number of vdevs that can support tdls + */ +#define CFG_TGT_NUM_TDLS_VDEVS 1 + +/* + * number of peers that each Tdls vdev can track + */ +#define CFG_TGT_NUM_TDLS_CONN_TABLE_ENTRIES 32 + #endif /*__WLAN_TGT_DEF_CONFIG_H__ */ diff --git a/CORE/SERVICES/COMMON/wlan_tgt_def_config_hl.h b/CORE/SERVICES/COMMON/wlan_tgt_def_config_hl.h index c4f3d8fd0c32..0f2ef36e66f4 100644 --- a/CORE/SERVICES/COMMON/wlan_tgt_def_config_hl.h +++ b/CORE/SERVICES/COMMON/wlan_tgt_def_config_hl.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef __WLAN_TGT_DEF_CONFIG_H__ #define __WLAN_TGT_DEF_CONFIG_H__ diff --git a/CORE/SERVICES/COMMON/wma_api.h b/CORE/SERVICES/COMMON/wma_api.h index 1fa59dca288e..9675af9adfe6 100644 --- a/CORE/SERVICES/COMMON/wma_api.h +++ b/CORE/SERVICES/COMMON/wma_api.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /**======================================================================== \file wma.c @@ -81,6 +80,7 @@ typedef enum { #define PDEV_CMD 2 #define GEN_CMD 3 #define DBG_CMD 4 +#define PPS_CMD 5 #ifdef QCA_WIFI_ISOC VOS_STATUS wma_nv_download_start(v_VOID_t *vos_context); @@ -112,7 +112,6 @@ tANI_U8 wma_map_channel(tANI_U8 mapChannel); int wma_cli_get_command(void *wmapvosContext, int vdev_id, int param_id, int vpdev); eHalStatus wma_set_htconfig(tANI_U8 vdev_id, tANI_U16 ht_capab, int value); -eHalStatus WMA_SetCountryCode(v_VOID_t *client_ctx, tANI_U8 *countrycode); eHalStatus WMA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId, tAniBool sendRegHint); @@ -120,7 +119,8 @@ eHalStatus WMA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId, int wma_suspend_target(WMA_HANDLE handle, int disable_target_intr); void wma_target_suspend_complete(void *context); int wma_resume_target(WMA_HANDLE handle); -int wma_is_wow_enabled(WMA_HANDLE handle); +int wma_is_wow_mode_selected(WMA_HANDLE handle); +int wma_enable_wow_in_fw(WMA_HANDLE handle); #endif int wma_set_peer_param(void *wma_ctx, u_int8_t *peer_addr, u_int32_t param_id, u_int32_t param_value, u_int32_t vdev_id); diff --git a/CORE/SERVICES/COMMON/wmi.h b/CORE/SERVICES/COMMON/wmi.h index ae972937b33a..6b2d9a1d34de 100644 --- a/CORE/SERVICES/COMMON/wmi.h +++ b/CORE/SERVICES/COMMON/wmi.h @@ -24,7 +24,13 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - +//------------------------------------------------------------------------------ +// Copyright (c) 2004-2010, 2013 Atheros Corporation. All rights reserved. +// $ATH_LICENSE_HOSTSDK0_C$ +//------------------------------------------------------------------------------ +//============================================================================== +// Author(s): ="Atheros" +//============================================================================== /* * This file contains the definitions of the WMI protocol specified in the diff --git a/CORE/SERVICES/COMMON/wmi_services.h b/CORE/SERVICES/COMMON/wmi_services.h index e01f1419bc8b..4158e1c73ce7 100644 --- a/CORE/SERVICES/COMMON/wmi_services.h +++ b/CORE/SERVICES/COMMON/wmi_services.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /** * This file defines WMI services bitmap and the set of WMI services . * defines macrso to set/clear/get different service bits from the bitmap. @@ -92,6 +91,9 @@ typedef enum { WMI_SERVICE_BATCH_SCAN, /*Service to support batch scan*/ WMI_SERVICE_QPOWER, /* QPower service */ WMI_SERVICE_PLMREQ, + WMI_SERVICE_THERMAL_MGMT, + WMI_SERVICE_RMC, /* reliable multicast support */ + WMI_SERVICE_MHF_OFFLOAD, /* multi-hop forwarding offload */ WMI_MAX_SERVICE=64 /* max service */ } WMI_SERVICE; diff --git a/CORE/SERVICES/COMMON/wmi_tlv_defs.h b/CORE/SERVICES/COMMON/wmi_tlv_defs.h index 385069bb253f..8c0843ea5806 100644 --- a/CORE/SERVICES/COMMON/wmi_tlv_defs.h +++ b/CORE/SERVICES/COMMON/wmi_tlv_defs.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef _WMI_TLV_DEFS_H_ #define _WMI_TLV_DEFS_H_ @@ -405,6 +404,19 @@ typedef enum { WMITLV_TAG_STRUC_wmi_batch_scan_result_event_fixed_param, WMITLV_TAG_STRUC_wmi_vdev_plmreq_start_cmd_fixed_param, WMITLV_TAG_STRUC_wmi_vdev_plmreq_stop_cmd_fixed_param, + WMITLV_TAG_STRUC_wmi_thermal_mgmt_cmd_fixed_param, + WMITLV_TAG_STRUC_wmi_thermal_mgmt_event_fixed_param, + WMITLV_TAG_STRUC_wmi_peer_info_req_cmd_fixed_param, + WMITLV_TAG_STRUC_wmi_peer_info_event_fixed_param, + WMITLV_TAG_STRUC_wmi_peer_info, + WMITLV_TAG_STRUC_wmi_peer_tx_fail_cnt_thr_event_fixed_param, + WMITLV_TAG_STRUC_wmi_rmc_set_mode_cmd_fixed_param, + WMITLV_TAG_STRUC_wmi_rmc_set_action_period_cmd_fixed_param, + WMITLV_TAG_STRUC_wmi_rmc_config_cmd_fixed_param, + WMITLV_TAG_STRUC_wmi_mhf_offload_set_mode_cmd_fixed_param, + WMITLV_TAG_STRUC_wmi_mhf_offload_plumb_routing_table_cmd_fixed_param, + WMITLV_TAG_STRUC_WMI_ADD_PROACTIVE_ARP_RSP_PATTERN_CMD_fixed_param, + WMITLV_TAG_STRUC_WMI_DEL_PROACTIVE_ARP_RSP_PATTERN_CMD_fixed_param, } WMITLV_TAG_ID; /* @@ -459,6 +471,7 @@ typedef enum { OP(WMI_WOW_ENABLE_DISABLE_WAKE_EVENT_CMDID) \ OP(WMI_RTT_MEASREQ_CMDID) \ OP(WMI_RTT_TSF_CMDID) \ + OP(WMI_OEM_REQ_CMDID) \ OP(WMI_VDEV_SPECTRAL_SCAN_CONFIGURE_CMDID) \ OP(WMI_VDEV_SPECTRAL_SCAN_ENABLE_CMDID) \ OP(WMI_REQUEST_STATS_CMDID) \ @@ -540,11 +553,20 @@ typedef enum { OP(WMI_HB_SET_TCP_PKT_FILTER_CMDID) \ OP(WMI_HB_SET_UDP_PARAMS_CMDID) \ OP(WMI_HB_SET_UDP_PKT_FILTER_CMDID) \ + OP(WMI_PEER_INFO_REQ_CMDID) \ + OP(WMI_RMC_SET_MODE_CMDID) \ + OP(WMI_RMC_SET_ACTION_PERIOD_CMDID) \ + OP(WMI_RMC_CONFIG_CMDID) \ + OP(WMI_MHF_OFFLOAD_SET_MODE_CMDID) \ + OP(WMI_MHF_OFFLOAD_PLUMB_ROUTING_TBL_CMDID) \ OP(WMI_DFS_PHYERR_FILTER_ENA_CMDID) \ OP(WMI_DFS_PHYERR_FILTER_DIS_CMDID) \ OP(WMI_BATCH_SCAN_ENABLE_CMDID) \ OP(WMI_BATCH_SCAN_DISABLE_CMDID) \ - OP(WMI_BATCH_SCAN_TRIGGER_RESULT_CMDID) + OP(WMI_BATCH_SCAN_TRIGGER_RESULT_CMDID) \ + OP(WMI_THERMAL_MGMT_CMDID) \ + OP(WMI_ADD_PROACTIVE_ARP_RSP_PATTERN_CMDID) \ + OP(WMI_DEL_PROACTIVE_ARP_RSP_PATTERN_CMDID) /* * IMPORTANT: Please add _ALL_ WMI Events Here. @@ -568,6 +590,9 @@ typedef enum { OP(WMI_ROAM_EVENTID) \ OP(WMI_WOW_WAKEUP_HOST_EVENTID) \ OP(WMI_RTT_ERROR_REPORT_EVENTID) \ + OP(WMI_OEM_MEASUREMENT_REPORT_EVENTID) \ + OP(WMI_OEM_ERROR_REPORT_EVENTID) \ + OP(WMI_OEM_CAPABILITY_EVENTID) \ OP(WMI_ECHO_EVENTID) \ OP(WMI_PDEV_FTM_INTG_EVENTID) \ OP(WMI_VDEV_GET_KEEPALIVE_EVENTID) \ @@ -597,9 +622,12 @@ typedef enum { OP(WMI_P2P_NOA_EVENTID) \ OP(WMI_TX_PAUSE_EVENTID) \ OP(WMI_RFKILL_STATE_CHANGE_EVENTID) \ + OP(WMI_PEER_INFO_EVENTID) \ + OP(WMI_PEER_TX_FAIL_CNT_THR_EVENTID) \ OP(WMI_DFS_RADAR_EVENTID) \ OP(WMI_BATCH_SCAN_ENABLED_EVENTID) \ - OP(WMI_BATCH_SCAN_RESULT_EVENTID) + OP(WMI_BATCH_SCAN_RESULT_EVENTID) \ + OP(WMI_THERMAL_MGMT_EVENTID) /* TLV definitions of WMI commands */ @@ -938,6 +966,12 @@ WMITLV_CREATE_PARAM_STRUC(WMI_RTT_MEASREQ_CMDID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, data, WMITLV_SIZE_VAR) WMITLV_CREATE_PARAM_STRUC(WMI_RTT_TSF_CMDID); +/*RTT OEM req Cmd */ +#define WMITLV_TABLE_WMI_OEM_REQ_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, data, WMITLV_SIZE_VAR) + +WMITLV_CREATE_PARAM_STRUC(WMI_OEM_REQ_CMDID); + /* Spectral scan configure Cmd */ #define WMITLV_TABLE_WMI_VDEV_SPECTRAL_SCAN_CONFIGURE_CMDID(id,op,buf,len) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_vdev_spectral_configure_cmd_fixed_param, wmi_vdev_spectral_configure_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) @@ -1413,6 +1447,42 @@ WMITLV_CREATE_PARAM_STRUC(WMI_MCC_SCHED_TRAFFIC_STATS_CMDID); WMITLV_CREATE_PARAM_STRUC(WMI_BATCH_SCAN_ENABLE_CMDID); +#define WMITLV_TABLE_WMI_PEER_INFO_REQ_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_peer_info_req_cmd_fixed_param, \ + wmi_peer_info_req_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) + +WMITLV_CREATE_PARAM_STRUC(WMI_PEER_INFO_REQ_CMDID); + +#define WMITLV_TABLE_WMI_RMC_SET_MODE_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_rmc_set_mode_cmd_fixed_param, \ + wmi_rmc_set_mode_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) + +WMITLV_CREATE_PARAM_STRUC(WMI_RMC_SET_MODE_CMDID); + +#define WMITLV_TABLE_WMI_RMC_SET_ACTION_PERIOD_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_rmc_set_action_period_cmd_fixed_param, \ + wmi_rmc_set_action_period_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) + +WMITLV_CREATE_PARAM_STRUC(WMI_RMC_SET_ACTION_PERIOD_CMDID); + +#define WMITLV_TABLE_WMI_RMC_CONFIG_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_rmc_config_cmd_fixed_param, \ + wmi_rmc_config_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) + +WMITLV_CREATE_PARAM_STRUC(WMI_RMC_CONFIG_CMDID); + +#define WMITLV_TABLE_WMI_MHF_OFFLOAD_SET_MODE_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_mhf_offload_set_mode_cmd_fixed_param, \ + wmi_mhf_offload_set_mode_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) + +WMITLV_CREATE_PARAM_STRUC(WMI_MHF_OFFLOAD_SET_MODE_CMDID); + +#define WMITLV_TABLE_WMI_MHF_OFFLOAD_PLUMB_ROUTING_TBL_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_mhf_offload_plumb_routing_table_cmd_fixed_param, \ + wmi_mhf_offload_plumb_routing_table_cmd, fixed_param, WMITLV_SIZE_FIX) + +WMITLV_CREATE_PARAM_STRUC(WMI_MHF_OFFLOAD_PLUMB_ROUTING_TBL_CMDID) + #define WMITLV_TABLE_WMI_BATCH_SCAN_DISABLE_CMDID(id,op,buf,len) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_batch_scan_disable_cmd_fixed_param, wmi_batch_scan_disable_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) @@ -1423,6 +1493,21 @@ WMITLV_CREATE_PARAM_STRUC(WMI_BATCH_SCAN_DISABLE_CMDID); WMITLV_CREATE_PARAM_STRUC(WMI_BATCH_SCAN_TRIGGER_RESULT_CMDID); +/* Thermal Manager Params*/ +#define WMITLV_TABLE_WMI_THERMAL_MGMT_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_thermal_mgmt_cmd_fixed_param, wmi_thermal_mgmt_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) + +WMITLV_CREATE_PARAM_STRUC(WMI_THERMAL_MGMT_CMDID); + +#define WMITLV_TABLE_WMI_ADD_PROACTIVE_ARP_RSP_PATTERN_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_WMI_ADD_PROACTIVE_ARP_RSP_PATTERN_CMD_fixed_param, WMI_ADD_PROACTIVE_ARP_RSP_PATTERN_CMD_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, pattern, WMITLV_SIZE_VAR) +WMITLV_CREATE_PARAM_STRUC(WMI_ADD_PROACTIVE_ARP_RSP_PATTERN_CMDID); + +#define WMITLV_TABLE_WMI_DEL_PROACTIVE_ARP_RSP_PATTERN_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_WMI_DEL_PROACTIVE_ARP_RSP_PATTERN_CMD_fixed_param, WMI_DEL_PROACTIVE_ARP_RSP_PATTERN_CMD_fixed_param, fixed_param, WMITLV_SIZE_FIX) +WMITLV_CREATE_PARAM_STRUC(WMI_DEL_PROACTIVE_ARP_RSP_PATTERN_CMDID); + /************************** TLV definitions of WMI events *******************************/ @@ -1604,6 +1689,21 @@ WMITLV_CREATE_PARAM_STRUC(WMI_DEBUG_PRINT_EVENTID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, data, WMITLV_SIZE_VAR) WMITLV_CREATE_PARAM_STRUC(WMI_RTT_MEASUREMENT_REPORT_EVENTID); +/*oem measurement report Event*/ +#define WMITLV_TABLE_WMI_OEM_MEASUREMENT_REPORT_EVENTID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, data, WMITLV_SIZE_VAR) +WMITLV_CREATE_PARAM_STRUC(WMI_OEM_MEASUREMENT_REPORT_EVENTID); + +/*oem error report event*/ +#define WMITLV_TABLE_WMI_OEM_ERROR_REPORT_EVENTID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, data, WMITLV_SIZE_VAR) +WMITLV_CREATE_PARAM_STRUC(WMI_OEM_ERROR_REPORT_EVENTID); + +/*oem capability report event*/ +#define WMITLV_TABLE_WMI_OEM_CAPABILITY_EVENTID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, data, WMITLV_SIZE_VAR) +WMITLV_CREATE_PARAM_STRUC(WMI_OEM_CAPABILITY_EVENTID); + /* HOST SWBA Event */ #define WMITLV_TABLE_WMI_HOST_SWBA_EVENTID(id,op,buf,len) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_host_swba_event_fixed_param, wmi_host_swba_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ @@ -1690,11 +1790,25 @@ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_p2p_noa_event_fixed_param, wmi_p WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_p2p_noa_info, wmi_p2p_noa_info, p2p_noa_info, WMITLV_SIZE_FIX) WMITLV_CREATE_PARAM_STRUC(WMI_P2P_NOA_EVENTID); +#define WMITLV_TABLE_WMI_PEER_INFO_EVENTID(id,op,buf,len) \ +WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_peer_info_event_fixed_param, wmi_peer_info_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ +WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_peer_info, peer_info, WMITLV_SIZE_VAR) + WMITLV_CREATE_PARAM_STRUC(WMI_PEER_INFO_EVENTID); + +#define WMITLV_TABLE_WMI_PEER_TX_FAIL_CNT_THR_EVENTID(id,op,buf,len) \ +WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_peer_tx_fail_cnt_thr_event_fixed_param, wmi_peer_tx_fail_cnt_thr_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) + WMITLV_CREATE_PARAM_STRUC(WMI_PEER_TX_FAIL_CNT_THR_EVENTID); + /* DFS radar Event */ #define WMITLV_TABLE_WMI_DFS_RADAR_EVENTID(id,op,buf,len) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_dfs_radar_event_fixed_param, wmi_dfs_radar_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) WMITLV_CREATE_PARAM_STRUC(WMI_DFS_RADAR_EVENTID); +/* Thermal Event */ +#define WMITLV_TABLE_WMI_THERMAL_MGMT_EVENTID(id,op,buf,len) \ +WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_thermal_mgmt_event_fixed_param, wmi_thermal_mgmt_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) + WMITLV_CREATE_PARAM_STRUC(WMI_THERMAL_MGMT_EVENTID); + #ifdef __cplusplus } #endif diff --git a/CORE/SERVICES/COMMON/wmi_tlv_helper.h b/CORE/SERVICES/COMMON/wmi_tlv_helper.h index f54e57a1cf36..acc39251c2e9 100644 --- a/CORE/SERVICES/COMMON/wmi_tlv_helper.h +++ b/CORE/SERVICES/COMMON/wmi_tlv_helper.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef _WMI_TLV_HELPER_H_ #define _WMI_TLV_HELPER_H_ diff --git a/CORE/SERVICES/COMMON/wmi_unified.h b/CORE/SERVICES/COMMON/wmi_unified.h index 7d20bab72d2d..27f578c36dfc 100644 --- a/CORE/SERVICES/COMMON/wmi_unified.h +++ b/CORE/SERVICES/COMMON/wmi_unified.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /** * @addtogroup WMIAPI *@{ @@ -166,8 +165,10 @@ typedef enum { WMI_GRP_RESMGR, WMI_GRP_STA_SMPS, WMI_GRP_WLAN_HB, + WMI_GRP_RMC, + WMI_GRP_MHF_OFL, WMI_GRP_LOCATION_SCAN, - WMI_GRP_OEM + WMI_GRP_OEM, } WMI_GRP_ID; #define WMI_CMD_GRP_START_ID(grp_id) (((grp_id) << 12) | 0x1) @@ -279,6 +280,8 @@ typedef enum { WMI_PEER_REMOVE_WDS_ENTRY_CMDID, /** set up mcast group infor for multicast to unicast conversion */ WMI_PEER_MCAST_GROUP_CMDID, + /** request peer info from FW. FW shall respond with PEER_INFO_EVENTID */ + WMI_PEER_INFO_REQ_CMDID, /* beacon/management specific commands */ @@ -435,6 +438,12 @@ typedef enum { /** ARP OFFLOAD REQUEST*/ WMI_SET_ARP_NS_OFFLOAD_CMDID=WMI_CMD_GRP_START_ID(WMI_GRP_ARP_NS_OFL), + /** Proactive ARP Response Add Pattern Command*/ + WMI_ADD_PROACTIVE_ARP_RSP_PATTERN_CMDID, + + /** Proactive ARP Response Del Pattern Command*/ + WMI_DEL_PROACTIVE_ARP_RSP_PATTERN_CMDID, + /** NS offload confid*/ WMI_NETWORK_LIST_OFFLOAD_CONFIG_CMDID=WMI_CMD_GRP_START_ID(WMI_GRP_NLO_OFL), @@ -499,6 +508,8 @@ typedef enum { WMI_FORCE_FW_HANG_CMDID, /* Set Mcast/Bdcast filter */ WMI_SET_MCASTBCAST_FILTER_CMDID, + /** set thermal management params **/ + WMI_THERMAL_MGMT_CMDID, /* GPIO Configuration */ WMI_GPIO_CONFIG_CMDID=WMI_CMD_GRP_START_ID(WMI_GRP_GPIO), @@ -545,6 +556,22 @@ typedef enum { WMI_HB_SET_UDP_PARAMS_CMDID, /* set udp pkt filter for wlan HB */ WMI_HB_SET_UDP_PKT_FILTER_CMDID, + + /** Wlan RMC commands*/ + /** enable/disable RMC */ + WMI_RMC_SET_MODE_CMDID = WMI_CMD_GRP_START_ID(WMI_GRP_RMC), + /** configure action frame period */ + WMI_RMC_SET_ACTION_PERIOD_CMDID, + /** For debug/future enhancement purposes only, + * configures/finetunes RMC algorithms */ + WMI_RMC_CONFIG_CMDID, + + /** WLAN multihop forwarding (MHF) offload commands */ + /** enable/disable multihop forwarding offload */ + WMI_MHF_OFFLOAD_SET_MODE_CMDID = WMI_CMD_GRP_START_ID(WMI_GRP_MHF_OFL), + /** Plumb routing table for multihop forwarding offload */ + WMI_MHF_OFFLOAD_PLUMB_ROUTING_TBL_CMDID, + /** enable DFS phyerr/parse filter offload */ WMI_DFS_PHYERR_FILTER_ENA_CMDID, /** enable DFS phyerr/parse filter offload */ @@ -603,6 +630,12 @@ typedef enum { /** FW reauet to kick out the station for reasons like inactivity,lack of response ..etc */ WMI_PEER_STA_KICKOUT_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_PEER), + /** Peer Info Event with data_rate, rssi, tx_fail_cnt etc */ + WMI_PEER_INFO_EVENTID, + + /** Event indicating that TX fail count reaching threshold */ + WMI_PEER_TX_FAIL_CNT_THR_EVENTID, + /* beacon/mgmt specific events */ /** RX management frame. the entire frame is carried along with the event. */ WMI_MGMT_RX_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_MGMT), @@ -704,6 +737,8 @@ typedef enum { WMI_WLAN_FREQ_AVOID_EVENTID, /* Indicate the keepalive parameters */ WMI_VDEV_GET_KEEPALIVE_EVENTID, + /* Thermal Management event */ + WMI_THERMAL_MGMT_EVENTID, /* GPIO Event */ WMI_GPIO_INPUT_EVENTID=WMI_EVT_GRP_START_ID(WMI_GRP_GPIO), @@ -743,14 +778,6 @@ typedef enum { #define WMI_OEM_MEASUREMENT_RSP 0x04 #define WMI_OEM_ERROR_REPORT_RSP 0x05 -#define WMI_OEM_DATA_REQ_CMDID WMI_RTT_MEASREQ_CMDID -#define WMI_OEM_DATA_RSP_EVENTID WMI_RTT_MEASUREMENT_REPORT_EVENTID -#define WMI_OEM_DATA_ERROR_REPORT_EVENTID WMI_RTT_ERROR_REPORT_EVENTID -#define WMI_OEM_DATA_RSP_EVENTID_param_tlvs \ - WMI_RTT_MEASUREMENT_REPORT_EVENTID_param_tlvs -#define WMI_OEM_DATA_ERROR_REPORT_EVENTID_param_tlvs \ - WMI_RTT_ERROR_REPORT_EVENTID_param_tlvs - #define WMI_CHAN_LIST_TAG 0x1 #define WMI_SSID_LIST_TAG 0x2 #define WMI_BSSID_LIST_TAG 0x3 @@ -1228,6 +1255,16 @@ typedef struct { A_UINT32 beacon_tx_offload_max_vdev; A_UINT32 num_multicast_filter_entries; A_UINT32 num_wow_filters; /*host can configure the number of wow filters*/ + + /** + * @brief num_keep_alive_pattern - Num of keep alive patterns configured + * from host. + */ + A_UINT32 num_keep_alive_pattern; + /** + * @brief keep_alive_pattern_size - keep alive pattern size. + */ + A_UINT32 keep_alive_pattern_size; } wmi_resource_config; @@ -2031,6 +2068,8 @@ typedef enum { WMI_PDEV_PARAM_BURST_ENABLE, /** HW rfkill config */ WMI_PDEV_PARAM_HW_RFKILL_CONFIG, + /** Enable radio low power features */ + WMI_PDEV_PARAM_LOW_POWER_RF_ENABLE, } WMI_PDEV_PARAM; typedef enum { @@ -2834,17 +2873,14 @@ typedef enum { /** Roaming offload */ WMI_VDEV_PARAM_ROAM_FW_OFFLOAD, - /* set packet power save */ - WMI_VDEV_PPS_PAID_MATCH, - WMI_VDEV_PPS_GID_MATCH, - WMI_VDEV_PPS_EARLY_TIM_CLEAR, - WMI_VDEV_PPS_EARLY_DTIM_CLEAR, - WMI_VDEV_PPS_EOF_PAD_DELIM, - WMI_VDEV_PPS_MACADDR_MISMATCH, - WMI_VDEV_PPS_DELIM_CRC_FAIL, - WMI_VDEV_PPS_GID_NSTS_ZERO, - WMI_VDEV_PPS_RSSI_CHECK, - WMI_VDEV_VHT_SET_GID_MGMT, + /** Enable Leader request RX functionality for RMC */ + WMI_VDEV_PARAM_ENABLE_RMC, + + /* IBSS does not have deauth/disassoc, vdev has to detect peer gone event + * by himself. If the beacon lost time exceed this threshold, the peer is + * thought to be gone. */ + WMI_VDEV_PARAM_IBSS_MAX_BCN_LOST_MS, + } WMI_VDEV_PARAM; enum wmi_pkt_type { @@ -3679,7 +3715,9 @@ typedef struct { * For STA VDEV this peer corresponds to the AP's BSS peer. * For AP VDEV this peer corresponds to the remote peer STA. */ -#define WMI_PEER_CRIT_PROTO_HINT_ENABLED 0x9 +#define WMI_PEER_CRIT_PROTO_HINT_ENABLED 0x9 +/* set Tx failure count threshold for the peer*/ +#define WMI_PEER_TX_FAIL_CNT_THR 0xA /** mimo ps values for the parameter WMI_PEER_MIMO_PS_STATE */ #define WMI_PEER_MIMO_PS_NONE 0x0 @@ -4080,7 +4118,9 @@ enum { WMI_AUTH_AUTO_PSK, WMI_AUTH_WPA_PSK, WMI_AUTH_RSNA_PSK, - WMI_AUTH_WAPI_PSK + WMI_AUTH_WAPI_PSK, + WMI_AUTH_FT_RSNA, /* 11r FT */ + WMI_AUTH_FT_RSNA_PSK, }; typedef struct { @@ -4409,10 +4449,19 @@ typedef struct { A_UINT32 time0; //lower 32 bits of time stamp } A_TIME64; +typedef enum wmi_peer_sta_kickout_reason { + WMI_PEER_STA_KICKOUT_REASON_UNSPECIFIED = 0, /* default value to preserve legacy behavior */ + WMI_PEER_STA_KICKOUT_REASON_XRETRY = 1, + WMI_PEER_STA_KICKOUT_REASON_INACTIVITY = 2, + WMI_PEER_STA_KICKOUT_REASON_IBSS_DISCONNECT = 3, +} PEER_KICKOUT_REASON; + typedef struct { A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_peer_sta_kickout_event_fixed_param */ /** peer mac address */ wmi_mac_addr peer_macaddr; + /** Reason code, defined as above */ + A_UINT32 reason; } wmi_peer_sta_kickout_event_fixed_param; #define WMI_WLAN_PROFILE_MAX_HIST 3 @@ -4498,6 +4547,9 @@ typedef enum event_type_e { WOW_DISASSOC_RECVD_EVENT, WOW_PATTERN_MATCH_EVENT, WOW_CSA_IE_EVENT, + WOW_PROBE_REQ_WPS_IE_EVENT, + WOW_AUTH_REQ_EVENT, + WOW_ASSOC_REQ_EVENT, }WOW_WAKE_EVENT_TYPE; typedef enum wake_reason_e { @@ -4516,6 +4568,9 @@ typedef enum wake_reason_e { WOW_REASON_P2P_DISC, WOW_REASON_WLAN_HB, WOW_REASON_CSA_EVENT, + WOW_REASON_PROBE_REQ_WPS_IE_RECV, + WOW_REASON_AUTH_REQ_RECV, + WOW_REASON_ASSOC_REQ_RECV, WOW_REASON_DEBUG_TEST = 0xFF, }WOW_WAKE_REASON_TYPE; @@ -4707,6 +4762,23 @@ typedef struct { */ } WMI_SET_ARP_NS_OFFLOAD_CMD_fixed_param; +typedef struct { + A_UINT32 tlv_header; + A_UINT32 vdev_id; + A_UINT32 pattern_id; + A_UINT32 timeout; + A_UINT32 length; + /* Following this would be the pattern + A_UINT8 pattern[] of length specifed by length + field in the structure. */ +} WMI_ADD_PROACTIVE_ARP_RSP_PATTERN_CMD_fixed_param; + +typedef struct { + A_UINT32 tlv_header; + A_UINT32 vdev_id; + A_UINT32 pattern_id; +} WMI_DEL_PROACTIVE_ARP_RSP_PATTERN_CMD_fixed_param; + typedef struct { A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_peer_tid_addba_cmd_fixed_param */ /** unique id identifying the VDEV, generated by the caller */ @@ -5447,18 +5519,18 @@ typedef struct { A_UINT32 state; /** Duration (in ms) over which to calculate tx threshold and rate values */ A_UINT32 notification_interval_ms; - /** bytes per second value OVER which notify/suggest TDLS Discovery: - * if current tx bps counter / notification interval >= threshold + /** number of packets OVER which notify/suggest TDLS Discovery: + * if current tx pps counter / notification interval >= threshold * then a notification will be sent to host to advise TDLS Discovery */ A_UINT32 tx_discovery_threshold; - /** bytes per second value UNDER which notify/suggest TDLS Teardown: - * if current tx bps counter / notification interval < threshold + /** number of packets UNDER which notify/suggest TDLS Teardown: + * if current tx pps counter / notification interval < threshold * then a notification will be sent to host to advise TDLS Tear down */ A_UINT32 tx_teardown_threshold; - /** Absolute RSSI value over which notify/suggest TDLS Teardown */ - A_UINT32 rssi_teardown_threshold; - /** RSSI delta vs AP RSSI value over which to trigger a teardown */ - A_UINT32 rssi_delta; + /** Absolute RSSI value under which notify/suggest TDLS Teardown */ + A_INT32 rssi_teardown_threshold; + /** Peer RSSI < (AP RSSI + delta) will trigger a teardown */ + A_INT32 rssi_delta; /** TDLS Option Control * Off-Channel, Buffer STA, (later)Sleep STA support */ A_UINT32 tdls_options; @@ -5913,6 +5985,168 @@ typedef struct { A_UINT32 radio_state; } wmi_rfkill_mode_param; +/** WMI_PEER_INFO_REQ_CMDID + * Request FW to provide peer info */ +typedef struct { + /** TLV tag and len; tag equals + * WMITLV_TAG_STRUC_wmi_peer_info_req_cmd_fixed_param */ + A_UINT32 tlv_header; + /** In order to get the peer info for a single peer, host shall + * issue the peer_mac_address of that peer. For getting the + * info all peers, the host shall issue 0xFFFFFFFF as the mac + * address. The firmware will return the peer info for all the + * peers on the specified vdev_id */ + wmi_mac_addr peer_mac_address; + /** vdev id */ + A_UINT32 vdev_id; +} wmi_peer_info_req_cmd_fixed_param; + +typedef struct { + /** TLV tag and len; tag equals + * WMITLV_TAG_STRUC_wmi_peer_info */ + A_UINT32 tlv_header; + /** mac addr of the peer */ + wmi_mac_addr peer_mac_address; + /** data_rate of the peer */ + A_UINT32 data_rate; + /** rssi of the peer */ + A_UINT32 rssi; + /** tx fail count */ + A_UINT32 tx_fail_cnt; +} wmi_peer_info; + +/** FW response with the peer info */ +typedef struct { + /** TLV tag and len; tag equals + * WMITLV_TAG_STRUC_wmi_peer_info_event_fixed_param */ + A_UINT32 tlv_header; + /** number of peers in peer_info */ + A_UINT32 num_peers; + /* This TLV is followed by another TLV of array of structs + * wmi_peer_info peer_info[]; + */ +} wmi_peer_info_event_fixed_param; + +/** FW response when tx failure count has reached threshold + * for a peer */ +typedef struct { + /** TLV tag and len; tag equals + * WMITLV_TAG_STRUC_wmi_peer_tx_fail_cnt_thr_event_fixed_param */ + A_UINT32 tlv_header; + /** vdev id*/ + A_UINT32 vdev_id; + /** mac address */ + wmi_mac_addr peer_mac_address; + /** tx failure count */ + A_UINT32 tx_fail_cnt; +} wmi_peer_tx_fail_cnt_thr_event_fixed_param; + +enum wmi_rmc_mode { + /** Disable RMC */ + WMI_RMC_MODE_DISABLED = 0, + /** Enable RMC */ + WMI_RMC_MODE_ENABLED = 1, +}; + +/** Enable reliable multicast transmitter functionality. Upon + * receiving this, the FW shall mutlicast frames with + * reliablity. This is a vendor + * proprietary feature. */ +typedef struct { + /** TLV tag and len; tag equals + * WMITLV_TAG_STRUC_wmi_rmc_set_mode_cmd_fixed_param */ + A_UINT32 tlv_header; + /** vdev id*/ + A_UINT32 vdev_id; + /** enable_rmc contains values from enum wmi_rmc_mode; + * Default value: 0 (disabled) */ + A_UINT32 enable_rmc; +} wmi_rmc_set_mode_cmd_fixed_param; + +/** Configure transmission periodicity of action frames in a + * reliable multicast network for the multicast transmitter */ +typedef struct { + /** TLV tag and len; tag equals + * WMITLV_TAG_STRUC_wmi_rmc_set_action_period_cmd_fixed_param */ + A_UINT32 tlv_header; + /** vdev id */ + A_UINT32 vdev_id; + /** time period in milliseconds. Default: 300 ms. + An action frame indicating the current leader is transmitted by the + RMC transmitter once every 'periodity_msec' */ + A_UINT32 periodicity_msec; +} wmi_rmc_set_action_period_cmd_fixed_param; + +/** Optimise Leader selection process in RMC functionality. For + * Enhancement/Debug purposes only */ +typedef struct { + /** TLV tag and len; tag equals + * WMITLV_TAG_STRUC_wmi_rmc_config_cmd_fixed_param */ + A_UINT32 tlv_header; + /** vdev id */ + A_UINT32 vdev_id; + /** flags :: + * 0x0001 - Enable beacon averaging + * 0x0002 - Force leader selection + * 0x0004 - Enable Timer based leader switch + * 0x0008 - Use qos/NULL based for multicast reliability */ + A_UINT32 flags; + /** control leader change timeperiod (in seconds) */ + A_UINT32 peridocity_leader_switch; + /** control activity timeout value for data rx (in seconds) */ + A_UINT32 data_activity_timeout; + /** mac address of leader */ + wmi_mac_addr forced_leader_mac_addr; +} wmi_rmc_config_cmd_fixed_param; + +/** Multi-hop forwarding is generally implemented in + * the kernel. To decrease system power consumption, the + * driver can enable offloading this to the chipset. In + * order for the offload, the firmware needs the routing table. + * The host shall plumb the routing table into FW. The firmware + * shall perform an IP address lookup and forward the packet to + * the next hop using next hop's mac address. This is a vendor + * proprietary feature. */ +enum wmi_mhf_ofl_mode { + /** Disable multihop forwarding offload */ + WMI_MHF_OFL_MODE_DISABLED = 0, + /** Enable multihop forwarding offload */ + WMI_MHF_OFL_MODE_ENABLED = 1, +}; + +typedef struct { + /** TLV tag and len; tag equals + * WMITLV_TAG_STRUC_wmi_mhf_offload_set_mode_cmd_fixed_param */ + A_UINT32 tlv_header; + /** vdev id*/ + A_UINT32 vdev_id; + /** enable_mhf_ofl contains values from enum + * wmi_mhf_ofl_mode; Default value: 0 (disabled) */ + A_UINT32 enable_mhf_ofl; +} wmi_mhf_offload_set_mode_cmd_fixed_param; + +enum wmi_mhf_ofl_table_action { + /** Add entry to multihop forwarding offload table */ + WMI_MHF_OFL_TBL_ADD_ENTRY = 0, + /** Delete entry from multihop forwarding offload table */ + WMI_MHF_OFL_TBL_DEL_ENTRY = 1, +}; + +typedef struct { + /** TLV tag and len; tag equals + * WMITLV_TAG_STRUC_wmi_mhf_offload_plumb_routing_table_cmd_fixed_param */ + A_UINT32 tlv_header; + /** action corresponds to values from enum + * wmi_mhf_ofl_table_action */ + A_UINT32 action; + /** Destination node's IP address */ + WMI_IPV4_ADDR dest_ipv4_addr; + /** Next hop node's IP address */ + WMI_IPV4_ADDR next_hop_ipv4_addr; + /** Next hop node's MAC address */ + wmi_mac_addr next_hop_mac_addr; +} wmi_mhf_offload_plumb_routing_table_cmd; + typedef struct { /** tlv tag and len, tag equals * WMITLV_TAG_STRUC_wmi_dfs_radar_event */ @@ -5962,6 +6196,23 @@ typedef struct { } wmi_dfs_radar_event_fixed_param; +typedef struct { + A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_thermal_mgmt_cmd_fixed_param */ + + /*Thermal thresholds*/ + A_UINT32 lower_thresh_degreeC; /* in degree C*/ + A_UINT32 upper_thresh_degreeC; /* in degree C*/ + + /*Enable/Disable Thermal Monitoring for Mitigation*/ + A_UINT32 enable; +} wmi_thermal_mgmt_cmd_fixed_param; + +typedef struct { + A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_thermal_mgmt_event_fixed_param */ + + A_UINT32 temperature_degreeC;/* temperature in degree C*/ +} wmi_thermal_mgmt_event_fixed_param; + #ifdef __cplusplus } #endif diff --git a/CORE/SERVICES/COMMON/wmi_unified_api.h b/CORE/SERVICES/COMMON/wmi_unified_api.h index 23f7722fe652..21e6944dbe77 100644 --- a/CORE/SERVICES/COMMON/wmi_unified_api.h +++ b/CORE/SERVICES/COMMON/wmi_unified_api.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* * This file contains the API definitions for the Unified Wireless Module Interface (WMI). */ diff --git a/CORE/SERVICES/COMMON/wmi_version.h b/CORE/SERVICES/COMMON/wmi_version.h index e59195f7f993..628dee99277a 100644 --- a/CORE/SERVICES/COMMON/wmi_version.h +++ b/CORE/SERVICES/COMMON/wmi_version.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* * IMPORTANT NOTE: For all change to WMI Interface, the ABI version number _must_ be updated. */ @@ -36,7 +35,7 @@ #define __WMI_VER_MINOR_ 0 /** WMI revision number has to be incremented when there is a * change that may or may not break compatibility. */ -#define __WMI_REVISION_ 24 +#define __WMI_REVISION_ 30 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work diff --git a/CORE/SERVICES/COMMON/wmi_version_whitelist.c b/CORE/SERVICES/COMMON/wmi_version_whitelist.c index 97d32c149ea7..3245b031b165 100644 --- a/CORE/SERVICES/COMMON/wmi_version_whitelist.c +++ b/CORE/SERVICES/COMMON/wmi_version_whitelist.c @@ -25,6 +25,8 @@ * to the Linux Foundation. */ + + /* * Every Product Line or chipset or team can have its own Whitelist table. * The following is a list of versions that the present software can support diff --git a/CORE/SERVICES/COMMON/wmix.h b/CORE/SERVICES/COMMON/wmix.h index 275036d65242..5e2eb1d5b0f5 100644 --- a/CORE/SERVICES/COMMON/wmix.h +++ b/CORE/SERVICES/COMMON/wmix.h @@ -24,7 +24,14 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - +//------------------------------------------------------------------------------ +// +// Copyright (c) 2004-2010 Atheros Corporation. All rights reserved. +// $ATH_LICENSE_HOSTSDK0_C$ +//------------------------------------------------------------------------------ +//============================================================================== +// Author(s): ="Atheros" +//============================================================================== /* * This file contains extensions of the WMI protocol specified in the diff --git a/CORE/SERVICES/HIF/DXE/dmux_dxe.c b/CORE/SERVICES/HIF/DXE/dmux_dxe.c index 68e897c5f78e..591993aa36c9 100644 --- a/CORE/SERVICES/HIF/DXE/dmux_dxe.c +++ b/CORE/SERVICES/HIF/DXE/dmux_dxe.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /** * @file dmux_dxe.c * @brief Provide functions to demux receive frames. diff --git a/CORE/SERVICES/HIF/DXE/dmux_dxe_api.h b/CORE/SERVICES/HIF/DXE/dmux_dxe_api.h index 25a12fd9c2cc..a55f0794731b 100644 --- a/CORE/SERVICES/HIF/DXE/dmux_dxe_api.h +++ b/CORE/SERVICES/HIF/DXE/dmux_dxe_api.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /** * @file dmux_dxe_api.h * @brief Define the API to the dmux_dxe module diff --git a/CORE/SERVICES/HIF/DXE/dmux_dxe_internal.h b/CORE/SERVICES/HIF/DXE/dmux_dxe_internal.h index 030b15186bf4..a0b52e32d707 100644 --- a/CORE/SERVICES/HIF/DXE/dmux_dxe_internal.h +++ b/CORE/SERVICES/HIF/DXE/dmux_dxe_internal.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef _DMUX_DXE_INTERNAL__H_ #define _DMUX_DXE_INTERNAL__H_ diff --git a/CORE/SERVICES/HIF/DXE/hif_dxe.c b/CORE/SERVICES/HIF/DXE/hif_dxe.c index 7cca8d408837..f2247ae53751 100644 --- a/CORE/SERVICES/HIF/DXE/hif_dxe.c +++ b/CORE/SERVICES/HIF/DXE/hif_dxe.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /** * @file hif_dxe.c * @brief Provide functions for DXE HIF module for RIVA FW. @@ -209,6 +208,7 @@ A_STATUS dxe_tx_pull_frames(S_HIFDXE_CONTEXT *dxe_ctx, WLANDXE_ChannelCBType *ch return A_OK; } + /* */ while (1) { // HDXE_ASSERT(WLAN_PAL_IS_STATUS_SUCCESS(WLAN_RivaValidateDesc(currentDesc))); diff --git a/CORE/SERVICES/HIF/DXE/hif_dxe.h b/CORE/SERVICES/HIF/DXE/hif_dxe.h index c2da108272c1..41a851737f94 100644 --- a/CORE/SERVICES/HIF/DXE/hif_dxe.h +++ b/CORE/SERVICES/HIF/DXE/hif_dxe.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /** * @file hif_dxe.h * @brief Provide functions for DXE HIF module for RIVA FW. diff --git a/CORE/SERVICES/HIF/DXE/hif_dxe_config.c b/CORE/SERVICES/HIF/DXE/hif_dxe_config.c index d02b49c7a62b..7c2981dba47c 100644 --- a/CORE/SERVICES/HIF/DXE/hif_dxe_config.c +++ b/CORE/SERVICES/HIF/DXE/hif_dxe_config.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /** * @file hif_dxe_config.c * @brief Provide functions for DXE HIF module DMA Channel configuration diff --git a/CORE/SERVICES/HIF/DXE/hif_dxe_hw_pvt.h b/CORE/SERVICES/HIF/DXE/hif_dxe_hw_pvt.h index 917b3fce10ee..f41768d3546f 100644 --- a/CORE/SERVICES/HIF/DXE/hif_dxe_hw_pvt.h +++ b/CORE/SERVICES/HIF/DXE/hif_dxe_hw_pvt.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /** * @file hif_dxe_desc_pvt.h * @brief Defines DXE HW Descriptor Structure Format diff --git a/CORE/SERVICES/HIF/DXE/hif_dxe_os.h b/CORE/SERVICES/HIF/DXE/hif_dxe_os.h index 5b0642a66ac3..45f113562fa2 100644 --- a/CORE/SERVICES/HIF/DXE/hif_dxe_os.h +++ b/CORE/SERVICES/HIF/DXE/hif_dxe_os.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /** * @file hif_dxe_os.h * @brief Provide OS Specific Shim Layer API for DXE HIF module. diff --git a/CORE/SERVICES/HIF/DXE/hif_dxe_pvt.h b/CORE/SERVICES/HIF/DXE/hif_dxe_pvt.h index 7c2782abf52d..05043cce3ee9 100644 --- a/CORE/SERVICES/HIF/DXE/hif_dxe_pvt.h +++ b/CORE/SERVICES/HIF/DXE/hif_dxe_pvt.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /** * @file hif_dxe_pvt.h * @brief Defines Software Structures used by DXE diff --git a/CORE/SERVICES/HIF/DXE/linux/hif_dxe_os.c b/CORE/SERVICES/HIF/DXE/linux/hif_dxe_os.c index 59e3e5430df4..a001cdf8c9c0 100644 --- a/CORE/SERVICES/HIF/DXE/linux/hif_dxe_os.c +++ b/CORE/SERVICES/HIF/DXE/linux/hif_dxe_os.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /**======================================================================== \file hif_dxe_os.c diff --git a/CORE/SERVICES/HIF/DXE/linux/hif_dxe_ospvt.h b/CORE/SERVICES/HIF/DXE/linux/hif_dxe_ospvt.h index 15d73008e3fb..de118f13dfa5 100644 --- a/CORE/SERVICES/HIF/DXE/linux/hif_dxe_ospvt.h +++ b/CORE/SERVICES/HIF/DXE/linux/hif_dxe_ospvt.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /**======================================================================== \file hif_dxe_ospvt.h diff --git a/CORE/SERVICES/HIF/PCIe/cepci.h b/CORE/SERVICES/HIF/PCIe/cepci.h index 7ebf64bf2e7e..4a04b7020a4d 100644 --- a/CORE/SERVICES/HIF/PCIe/cepci.h +++ b/CORE/SERVICES/HIF/PCIe/cepci.h @@ -24,7 +24,14 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - +//------------------------------------------------------------------------------ +// +// Copyright (c) 2012 Qualcomm Atheros Inc. All rights reserved. +// $ATH_LICENSE_HOSTSDK0_C$ +//------------------------------------------------------------------------------ +//============================================================================== +// Author(s): ="Qualcomm Atheros Inc." +//============================================================================== #ifndef __CEPCI_H__ #define __CEPCI_H__ diff --git a/CORE/SERVICES/HIF/PCIe/copy_engine.c b/CORE/SERVICES/HIF/PCIe/copy_engine.c index 6499d8c9e16f..c9c9038fb26d 100644 --- a/CORE/SERVICES/HIF/PCIe/copy_engine.c +++ b/CORE/SERVICES/HIF/PCIe/copy_engine.c @@ -24,6 +24,10 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ +/* + * $ATH_LICENSE_TARGET_C$ + */ + #include #include "a_types.h" diff --git a/CORE/SERVICES/HIF/PCIe/copy_engine_api.h b/CORE/SERVICES/HIF/PCIe/copy_engine_api.h index deb683ea6fce..83aa63a01a43 100644 --- a/CORE/SERVICES/HIF/PCIe/copy_engine_api.h +++ b/CORE/SERVICES/HIF/PCIe/copy_engine_api.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef __COPY_ENGINE_API_H__ #define __COPY_ENGINE_API_H__ diff --git a/CORE/SERVICES/HIF/PCIe/copy_engine_internal.h b/CORE/SERVICES/HIF/PCIe/copy_engine_internal.h index ad54f2bdfc86..ec726c9ecb1b 100644 --- a/CORE/SERVICES/HIF/PCIe/copy_engine_internal.h +++ b/CORE/SERVICES/HIF/PCIe/copy_engine_internal.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #include /* A_TARGET_WRITE */ /* Copy Engine operational state */ diff --git a/CORE/SERVICES/HIF/PCIe/hif_pci.c b/CORE/SERVICES/HIF/PCIe/hif_pci.c index 54b578094a72..72c24a8fab9f 100644 --- a/CORE/SERVICES/HIF/PCIe/hif_pci.c +++ b/CORE/SERVICES/HIF/PCIe/hif_pci.c @@ -24,8 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - - /* * Implementation of the Host-side Host InterFace (HIF) API * for a Host/Target interconnect using Copy Engines over PCIe. @@ -54,6 +52,8 @@ #define ATH_MODULE_NAME hif #include #include "hif_pci.h" +#include "vos_lock.h" + /* use credit flow control over HTC */ unsigned int htc_credit_flow = 1; int hif_pci_war1 = 0; @@ -1523,6 +1523,7 @@ HIFStop(HIF_DEVICE *hif_device) adf_os_timer_cancel(&hif_state->sleep_timer); adf_os_timer_free(&hif_state->sleep_timer); + vos_wake_lock_destroy(&hif_state->hif_wake_lock); hif_state->started = FALSE; AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("-%s\n",__FUNCTION__)); @@ -1959,6 +1960,7 @@ HIF_sleep_entry(void *arg) A_PCI_WRITE32(pci_addr + PCIE_LOCAL_BASE_ADDRESS + PCIE_SOC_WAKE_ADDRESS, PCIE_SOC_WAKE_RESET); hif_state->fake_sleep = FALSE; + vos_wake_lock_release(&hif_state->hif_wake_lock); } else { adf_os_timer_start(&hif_state->sleep_timer, HIF_SLEEP_INACTIVITY_TIMER_PERIOD_MS); @@ -2008,6 +2010,7 @@ HIF_PCIDeviceProbed(hif_handle_t hif_hdl) hif_state->sleep_ticks = 0; adf_os_timer_init(NULL, &hif_state->sleep_timer, HIF_sleep_entry, (void *)hif_state); + vos_wake_lock_init(&hif_state->hif_wake_lock, "hif_wake_lock"); hif_state->fw_indicator_address = FW_INDICATOR_ADDRESS; hif_state->targid = A_TARGET_ID(sc->hif_device); @@ -2292,6 +2295,7 @@ HIFTargetSleepStateAdjust(A_target_id_t targid, adf_os_timer_cancel(&hif_state->sleep_timer); adf_os_timer_start(&hif_state->sleep_timer, HIF_SLEEP_INACTIVITY_TIMER_PERIOD_MS); + vos_wake_lock_acquire(&hif_state->hif_wake_lock); } adf_os_spin_unlock(&hif_state->keep_awake_lock); } else { diff --git a/CORE/SERVICES/HIF/PCIe/hif_pci.h b/CORE/SERVICES/HIF/PCIe/hif_pci.h index adb35a5f47f6..e17bc33b24c4 100644 --- a/CORE/SERVICES/HIF/PCIe/hif_pci.h +++ b/CORE/SERVICES/HIF/PCIe/hif_pci.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* * NB: Inappropriate references to "HTC" are used in this (and other) * HIF implementations. HTC is typically the calling layer, but it @@ -40,6 +39,7 @@ */ #include /* adf_os_atomic_read */ +#include "vos_lock.h" struct HIF_CE_completion_state { struct HIF_CE_completion_state *next; int send_or_recv; @@ -95,6 +95,7 @@ struct HIF_CE_state { A_BOOL verified_awake; A_BOOL fake_sleep; adf_os_timer_t sleep_timer; + vos_wake_lock_t hif_wake_lock; unsigned long sleep_ticks; //struct task_struct *pci_dev_inserted_thread; diff --git a/CORE/SERVICES/HIF/PCIe/if_pci.c b/CORE/SERVICES/HIF/PCIe/if_pci.c index 4195aadb900d..14a000b68de2 100644 --- a/CORE/SERVICES/HIF/PCIe/if_pci.c +++ b/CORE/SERVICES/HIF/PCIe/if_pci.c @@ -25,6 +25,7 @@ * to the Linux Foundation. */ + #include #include #include @@ -563,6 +564,7 @@ again: ol_sc->enableuartprint = 0; ol_sc->enablefwlog = 0; ol_sc->enablesinglebinary = FALSE; + ol_sc->max_no_of_peers = 1; adf_os_atomic_init(&sc->tasklet_from_intr); init_waitqueue_head(&ol_sc->sc_osdev->event_queue); @@ -842,6 +844,7 @@ again: ol_sc->enableuartprint = 0; ol_sc->enablefwlog = 0; ol_sc->enablesinglebinary = FALSE; + ol_sc->max_no_of_peers = 1; init_waitqueue_head(&ol_sc->sc_osdev->event_queue); @@ -1000,6 +1003,7 @@ hif_pci_configure(struct hif_pci_softc *sc, hif_handle_t *hif_hdl) num_msi_desired = 0; } else { /* Can't get enough MSI interrupts -- try for just 1 */ + printk("\n %s : Can't allocate requested number of MSI, just use 1\n", __func__); num_msi_desired = 1; } } @@ -1061,28 +1065,6 @@ hif_pci_configure(struct hif_pci_softc *sc, hif_handle_t *hif_hdl) } #endif - - if(num_msi_desired == 0) { - printk("\n Using PCI Legacy Interrupt\n"); - - /* Make sure to wake the Target before enabling Legacy Interrupt */ - A_PCI_WRITE32(sc->mem + PCIE_LOCAL_BASE_ADDRESS + PCIE_SOC_WAKE_ADDRESS, PCIE_SOC_WAKE_V_MASK); - while (!hif_pci_targ_is_awake(sc, sc->mem)) { - ; - } - /* Use Legacy PCI Interrupts */ - /* - * A potential race occurs here: The CORE_BASE write depends on - * target correctly decoding AXI address but host won't know - * when target writes BAR to CORE_CTRL. This write might get lost - * if target has NOT written BAR. For now, fix the race by repeating - * the write in below synchronization checking. - */ - A_PCI_WRITE32(sc->mem+(SOC_CORE_BASE_ADDRESS | PCIE_INTR_ENABLE_ADDRESS), - PCIE_INTR_FIRMWARE_MASK | PCIE_INTR_CE_MASK_ALL); - A_PCI_WRITE32(sc->mem + PCIE_LOCAL_BASE_ADDRESS + PCIE_SOC_WAKE_ADDRESS, PCIE_SOC_WAKE_RESET); - } - sc->num_msi_intrs = num_msi_desired; sc->ce_count = CE_COUNT; @@ -1119,7 +1101,32 @@ hif_pci_configure(struct hif_pci_softc *sc, hif_handle_t *hif_hdl) } *hif_hdl = sc->hif_device; - return 0; + + if(num_msi_desired == 0) { + printk("\n Using PCI Legacy Interrupt\n"); + + /* Make sure to wake the Target before enabling Legacy Interrupt */ + A_PCI_WRITE32(sc->mem + PCIE_LOCAL_BASE_ADDRESS + PCIE_SOC_WAKE_ADDRESS, + PCIE_SOC_WAKE_V_MASK); + while (!hif_pci_targ_is_awake(sc, sc->mem)) { + ; + } + /* Use Legacy PCI Interrupts */ + /* + * A potential race occurs here: The CORE_BASE write depends on + * target correctly decoding AXI address but host won't know + * when target writes BAR to CORE_CTRL. This write might get lost + * if target has NOT written BAR. For now, fix the race by repeating + * the write in below synchronization checking. + */ + A_PCI_WRITE32(sc->mem+(SOC_CORE_BASE_ADDRESS | + PCIE_INTR_ENABLE_ADDRESS), + PCIE_INTR_FIRMWARE_MASK | PCIE_INTR_CE_MASK_ALL); + A_PCI_WRITE32(sc->mem + PCIE_LOCAL_BASE_ADDRESS + PCIE_SOC_WAKE_ADDRESS, + PCIE_SOC_WAKE_RESET); + } + + return 0; err_stalled: /* Read Target CPU Intr Cause for debug */ @@ -1254,7 +1261,8 @@ hif_pci_suspend(struct pci_dev *pdev, pm_message_t state) { struct hif_pci_softc *sc = pci_get_drvdata(pdev); void *vos = vos_get_global_context(VOS_MODULE_ID_HIF, NULL); - + ol_txrx_pdev_handle txrx_pdev = vos_get_context(VOS_MODULE_ID_TXRX, vos); + u32 tx_drain_wait_cnt = 0; u32 val; #ifdef WLAN_LINK_UMAC_SUSPEND_WITH_BUS_SUSPEND @@ -1276,10 +1284,21 @@ hif_pci_suspend(struct pci_dev *pdev, pm_message_t state) A_PCI_WRITE32(sc->mem + PCIE_LOCAL_BASE_ADDRESS + PCIE_SOC_WAKE_ADDRESS, PCIE_SOC_WAKE_RESET); #endif + /* Wait for pending tx completion */ + while (ol_txrx_get_tx_pending(txrx_pdev)) { + msleep(OL_ATH_TX_DRAIN_WAIT_DELAY); + if (++tx_drain_wait_cnt > OL_ATH_TX_DRAIN_WAIT_CNT) { + printk("%s: tx frames are pending\n", __func__); + return (-1); + } + } + /* No need to send WMI_PDEV_SUSPEND_CMDID to FW if WOW is enabled */ - if (!wma_is_wow_enabled(vos_get_context(VOS_MODULE_ID_WDA, vos)) && - (state.event == PM_EVENT_FREEZE || state.event == PM_EVENT_SUSPEND)) { - if (wma_suspend_target(vos_get_context(VOS_MODULE_ID_WDA, vos), 0)) + if (wma_is_wow_mode_selected(vos_get_context(VOS_MODULE_ID_WDA, vos))) { + if(wma_enable_wow_in_fw(vos_get_context(VOS_MODULE_ID_WDA, vos))) + return (-1); + } else if (state.event == PM_EVENT_FREEZE || state.event == PM_EVENT_SUSPEND) { + if (wma_suspend_target(vos_get_context(VOS_MODULE_ID_WDA, vos), 0)) return (-1); } @@ -1339,7 +1358,7 @@ hif_pci_resume(struct pci_dev *pdev) #endif /* No need to send WMI_PDEV_RESUME_CMDID to FW if WOW is enabled */ - if (!wma_is_wow_enabled(vos_get_context(VOS_MODULE_ID_WDA, vos_context)) && + if (!wma_is_wow_mode_selected(vos_get_context(VOS_MODULE_ID_WDA, vos_context)) && (val == PM_EVENT_HIBERNATE || val == PM_EVENT_SUSPEND)) { return wma_resume_target(vos_get_context(VOS_MODULE_ID_WDA, vos_context)); } diff --git a/CORE/SERVICES/HIF/PCIe/if_pci.h b/CORE/SERVICES/HIF/PCIe/if_pci.h index f3a658dd1090..6219544cbc44 100644 --- a/CORE/SERVICES/HIF/PCIe/if_pci.h +++ b/CORE/SERVICES/HIF/PCIe/if_pci.h @@ -25,6 +25,7 @@ * to the Linux Foundation. */ + #ifndef __ATH_PCI_H__ #define __ATH_PCI_H__ @@ -131,4 +132,20 @@ extern void pktlogmod_exit(void *context); * MSI allocation fails */ #define LEGACY_INTERRUPTS(sc) ((sc)->num_msi_intrs == 0) + +/* + * There may be some pending tx frames during platform suspend. + * Suspend operation should be delayed until those tx frames are + * transfered from the host to target. This macro specifies how + * long suspend thread has to sleep before checking pending tx + * frame count. + */ +#define OL_ATH_TX_DRAIN_WAIT_DELAY 50 /* ms */ + +/* + * Wait time (in unit of OL_ATH_TX_DRAIN_WAIT_DELAY) for pending + * tx frame completion before suspend. Refer: hif_pci_suspend() + */ +#define OL_ATH_TX_DRAIN_WAIT_CNT 10 + #endif /* __ATH_PCI_H__ */ diff --git a/CORE/SERVICES/HIF/PCIe/mp_dev.c b/CORE/SERVICES/HIF/PCIe/mp_dev.c index eb24041fe6ad..b6d41f7086b5 100644 --- a/CORE/SERVICES/HIF/PCIe/mp_dev.c +++ b/CORE/SERVICES/HIF/PCIe/mp_dev.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #include "if_pci.h" /*chaninfo*/ diff --git a/CORE/SERVICES/HIF/PCIe/regtable.c b/CORE/SERVICES/HIF/PCIe/regtable.c index 8989bfb7c559..ad080d3d9f81 100644 --- a/CORE/SERVICES/HIF/PCIe/regtable.c +++ b/CORE/SERVICES/HIF/PCIe/regtable.c @@ -24,7 +24,29 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - +/* + * Copyright (c) 2013 Qualcomm Atheros, Inc. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ +/* + * Copyright (c) 2010 Atheros Communications, Inc. + * All rights reserved. + * + * + * $ATH_LICENSE_HOSTSDK0_C$ + * + */ #include "bmi_msg.h" #include "targaddrs.h" #include "cepci.h" diff --git a/CORE/SERVICES/HIF/ath_procfs.c b/CORE/SERVICES/HIF/ath_procfs.c index e827c7a5c65c..907ae48ff4fe 100644 --- a/CORE/SERVICES/HIF/ath_procfs.c +++ b/CORE/SERVICES/HIF/ath_procfs.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if defined(CONFIG_ATH_PROCFS_DIAG_SUPPORT) #include /* Specifically, a module */ #include /* We're doing kernel work */ diff --git a/CORE/SERVICES/HTC/htc.c b/CORE/SERVICES/HTC/htc.c index 0d917df950d2..9880891b1ee8 100644 --- a/CORE/SERVICES/HTC/htc.c +++ b/CORE/SERVICES/HTC/htc.c @@ -25,7 +25,6 @@ * to the Linux Foundation. */ - #include "ol_if_athvar.h" #include "htc_internal.h" #include /* adf_nbuf_t */ diff --git a/CORE/SERVICES/HTC/htc_debug.h b/CORE/SERVICES/HTC/htc_debug.h index e66e298d3486..84f9919d7c36 100644 --- a/CORE/SERVICES/HTC/htc_debug.h +++ b/CORE/SERVICES/HTC/htc_debug.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef HTC_DEBUG_H_ #define HTC_DEBUG_H_ diff --git a/CORE/SERVICES/HTC/htc_internal.h b/CORE/SERVICES/HTC/htc_internal.h index b6f8c313be03..6f1eb79012bf 100644 --- a/CORE/SERVICES/HTC/htc_internal.h +++ b/CORE/SERVICES/HTC/htc_internal.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef _HTC_INTERNAL_H_ #define _HTC_INTERNAL_H_ diff --git a/CORE/SERVICES/HTC/htc_recv.c b/CORE/SERVICES/HTC/htc_recv.c index c61edc0a3f8c..f20d503b5c1c 100644 --- a/CORE/SERVICES/HTC/htc_recv.c +++ b/CORE/SERVICES/HTC/htc_recv.c @@ -25,6 +25,7 @@ * to the Linux Foundation. */ + #include "htc_internal.h" #include /* adf_nbuf_t */ diff --git a/CORE/SERVICES/HTC/htc_send.c b/CORE/SERVICES/HTC/htc_send.c index 2eec9a9181cd..b03043d7e768 100644 --- a/CORE/SERVICES/HTC/htc_send.c +++ b/CORE/SERVICES/HTC/htc_send.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* * */ diff --git a/CORE/SERVICES/HTC/htc_services.c b/CORE/SERVICES/HTC/htc_services.c index aa84d1872cff..28f67fa2e481 100644 --- a/CORE/SERVICES/HTC/htc_services.c +++ b/CORE/SERVICES/HTC/htc_services.c @@ -25,6 +25,7 @@ * to the Linux Foundation. */ + #include "htc_internal.h" #include /* adf_nbuf_t */ diff --git a/CORE/SERVICES/HTC/linux/htc_smd.c b/CORE/SERVICES/HTC/linux/htc_smd.c index 9b204628cec2..a72100eb0a30 100644 --- a/CORE/SERVICES/HTC/linux/htc_smd.c +++ b/CORE/SERVICES/HTC/linux/htc_smd.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /**======================================================================== \file htc_smd.c diff --git a/CORE/SERVICES/HTC/linux/htc_smd.h b/CORE/SERVICES/HTC/linux/htc_smd.h index e64f9d3e7595..cee87457bd75 100644 --- a/CORE/SERVICES/HTC/linux/htc_smd.h +++ b/CORE/SERVICES/HTC/linux/htc_smd.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /**======================================================================== \file htc_smd.h diff --git a/CORE/SERVICES/WMA/inc/legacy/halMsgApi.h b/CORE/SERVICES/WMA/inc/legacy/halMsgApi.h index d7f68f052c7d..82a6ac3342fd 100644 --- a/CORE/SERVICES/WMA/inc/legacy/halMsgApi.h +++ b/CORE/SERVICES/WMA/inc/legacy/halMsgApi.h @@ -24,7 +24,8 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - +/* + * */ #ifndef _HALMSGAPI_H_ #define _HALMSGAPI_H_ @@ -684,14 +685,14 @@ typedef struct { #ifndef OEM_DATA_REQ_SIZE #ifdef QCA_WIFI_2_0 -#define OEM_DATA_REQ_SIZE 276 +#define OEM_DATA_REQ_SIZE 280 #else #define OEM_DATA_REQ_SIZE 134 #endif #endif #ifndef OEM_DATA_RSP_SIZE #ifdef QCA_WIFI_2_0 -#define OEM_DATA_RSP_SIZE 1720 +#define OEM_DATA_RSP_SIZE 1724 #else #define OEM_DATA_RSP_SIZE 1968 #endif diff --git a/CORE/SERVICES/WMA/inc/legacy/halTypes.h b/CORE/SERVICES/WMA/inc/legacy/halTypes.h index 0b4c227018cb..4901caa8abfa 100644 --- a/CORE/SERVICES/WMA/inc/legacy/halTypes.h +++ b/CORE/SERVICES/WMA/inc/legacy/halTypes.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /** ------------------------------------------------------------------------- * ------------------------------------------------------------------------- * diff --git a/CORE/SERVICES/WMA/inc/legacy/palTypes.h b/CORE/SERVICES/WMA/inc/legacy/palTypes.h index 556c4f48d46c..26bd317b1a18 100644 --- a/CORE/SERVICES/WMA/inc/legacy/palTypes.h +++ b/CORE/SERVICES/WMA/inc/legacy/palTypes.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined( PALTYPES_H__ ) #define PALTYPES_H__ diff --git a/CORE/SERVICES/WMA/inc/legacy/wlan_qct_hal.h b/CORE/SERVICES/WMA/inc/legacy/wlan_qct_hal.h index 14c68e812a31..65ca3fd885fd 100644 --- a/CORE/SERVICES/WMA/inc/legacy/wlan_qct_hal.h +++ b/CORE/SERVICES/WMA/inc/legacy/wlan_qct_hal.h @@ -25,12 +25,6 @@ * to the Linux Foundation. */ -/* - * Qualcomm Technologies, Inc. proprietary. All rights reserved. - * - * Date Modified by Modification Information - * -------------------------------------------------------------------- - */ #ifndef WLAN_QCT_HAL_H #define WLAN_QCT_HAL_H #include "vos_status.h" diff --git a/CORE/SERVICES/WMA/inc/wlan_qct_wma.h b/CORE/SERVICES/WMA/inc/wlan_qct_wma.h index a38160a3118d..8f1cb207e0c3 100644 --- a/CORE/SERVICES/WMA/inc/wlan_qct_wma.h +++ b/CORE/SERVICES/WMA/inc/wlan_qct_wma.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef WLAN_QCT_WMA_H #define WLAN_QCT_WMA_H @@ -43,8 +42,6 @@ DESCRIPTION was to keep the UMAC identical across Prima and Volans. This layer provides the glue between SME, PE , TL and HAL. - Copyright (c) 2008 Qualcomm Technologies, Inc. All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ===========================================================================*/ /*=========================================================================== diff --git a/CORE/SERVICES/WMA/regdomain.c b/CORE/SERVICES/WMA/regdomain.c index 452392eba2a0..1daa4aa9ec81 100644 --- a/CORE/SERVICES/WMA/regdomain.c +++ b/CORE/SERVICES/WMA/regdomain.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* * Notifications and licenses are retained for attribution purposes only. */ @@ -66,9 +65,9 @@ */ #include +#include "wma.h" #include "regdomain.h" #include "regdomain_common.h" -#include "wma.h" #define N(a) (sizeof(a)/sizeof(a[0])) @@ -95,7 +94,7 @@ static u_int16_t get_eeprom_rd(u_int16_t rd) * Return whether or not the regulatory domain/country in EEPROM * is acceptable. */ -static bool regmn_is_eeprom_valid(u_int16_t rd) +static bool regdmn_is_eeprom_valid(u_int16_t rd) { int32_t i; @@ -130,6 +129,18 @@ static const COUNTRY_CODE_TO_ENUM_RD *find_country(u_int16_t country_code) return NULL; /* Not found */ } +int32_t regdmn_find_ctry_by_name(u_int8_t *alpha2) +{ + int32_t i; + + for (i = 0; i < ol_regdmn_Rdt.allCountriesCt; i++) { + if (ol_regdmn_Rdt.allCountries[i].isoName[0] == alpha2[0] && + ol_regdmn_Rdt.allCountries[i].isoName[1] == alpha2[1]) + return ol_regdmn_Rdt.allCountries[i].countryCode; + } + return CTRY_DEFAULT; /* Not found */ +} + static u_int16_t regdmn_get_default_country(u_int16_t rd) { int32_t i; @@ -190,21 +201,36 @@ static const COUNTRY_CODE_TO_ENUM_RD *get_country_from_rd(u_int16_t regdmn) return NULL; /* Not found */ } +/* + * Some users have reported their EEPROM programmed with + * 0x8000 set, this is not a supported regulatory domain + * but since we have more than one user with it we need + * a solution for them. We default to 0x64 + */ +static void regd_sanitize(struct regulatory *reg) +{ + if (reg->reg_domain != COUNTRY_ERD_FLAG) + return; + reg->reg_domain = 0x64; +} + /* * Returns country string for the given regulatory domain. */ -int32_t regdmn_get_country_alpha2(u_int16_t rd, u_int8_t *alpha2) +int32_t regdmn_get_country_alpha2(struct regulatory *reg) { u_int16_t country_code; - u_int16_t regdmn; + u_int16_t regdmn, rd; const COUNTRY_CODE_TO_ENUM_RD *country = NULL; - const REG_DMN_PAIR_MAPPING *regpair = NULL; - regdmn = get_eeprom_rd(rd); + regd_sanitize(reg); + rd = reg->reg_domain; - if (!regmn_is_eeprom_valid(rd)) + if (!regdmn_is_eeprom_valid(rd)) return -EINVAL; + regdmn = get_eeprom_rd(rd); + country_code = regdmn_get_default_country(regdmn); if (country_code == CTRY_DEFAULT && regdmn == CTRY_DEFAULT) { /* Set to CTRY_UNITED_STATES for testing */ @@ -221,22 +247,23 @@ int32_t regdmn_get_country_alpha2(u_int16_t rd, u_int8_t *alpha2) regdmn = country->regDmnEnum; } - regpair = get_regdmn_pair(regdmn); - if (!regpair) { + reg->regpair = get_regdmn_pair(regdmn); + if (!reg->regpair) { /* TODO: Bring it under debug level */ adf_os_print(KERN_ERR "No regpair is found, can not proceeed\n"); return -EINVAL; } + reg->country_code = country_code; if (!country) country = get_country_from_rd(regdmn); if (country) { - alpha2[0] = country->isoName[0]; - alpha2[1] = country->isoName[1]; + reg->alpha2[0] = country->isoName[0]; + reg->alpha2[1] = country->isoName[1]; } else { - alpha2[0] = '0'; - alpha2[1] = '0'; + reg->alpha2[0] = '0'; + reg->alpha2[1] = '0'; } return 0; @@ -345,32 +372,18 @@ u_int32_t regdmn_getwmodesnreg(u_int32_t modesAvail, return modesAvail; } -void regdmn_get_ctl_info(u_int32_t regdmn, u_int32_t modesAvail, u_int32_t modeSelect) +static void regdmn_get_ctl_info(struct regulatory *reg, u_int32_t modesAvail, + u_int32_t modeSelect) { - const REG_DMN_PAIR_MAPPING *regpair = NULL; const REG_DOMAIN *regdomain2G = NULL; const REG_DOMAIN *regdomain5G = NULL; int8_t ctl_2g, ctl_5g, ctl; const REG_DOMAIN *rd = NULL; const struct cmode *cm; - u_int16_t country_code; const COUNTRY_CODE_TO_ENUM_RD *country; + const REG_DMN_PAIR_MAPPING *regpair; - country_code = regdmn_get_default_country(regdmn); - if (country_code == CTRY_DEFAULT && regdmn == CTRY_DEFAULT) - country_code = CTRY_UNITED_STATES; - - country = find_country(country_code); - if (country != NULL) - regdmn = country->regDmnEnum; - - /* get regulatory domain pair */ - regpair = get_regdmn_pair(regdmn); - if (!regpair) { - adf_os_print(KERN_ERR "Failed to get regdmn pair"); - return; - } - + regpair = reg->regpair; regdomain2G = get_regdmn(regpair->regDmn2GHz); if (!regdomain2G) { adf_os_print(KERN_ERR "Failed to get regdmn 2G"); @@ -388,6 +401,7 @@ void regdmn_get_ctl_info(u_int32_t regdmn, u_int32_t modesAvail, u_int32_t modeS ctl_5g = regdomain5G->conformance_test_limit; /* find second nible of CTL */ + country = find_country(reg->country_code); if (country != NULL) modesAvail = regdmn_getwmodesnreg(modesAvail, country, regdomain5G); @@ -449,6 +463,18 @@ void regdmn_get_ctl_info(u_int32_t regdmn, u_int32_t modesAvail, u_int32_t modeS if (rd == regdomain5G) ctl_5g = ctl; } - wma_send_regdomain_info(regdmn, regpair->regDmn2GHz, + wma_send_regdomain_info(reg->reg_domain, regpair->regDmn2GHz, regpair->regDmn5GHz, ctl_2g, ctl_5g); } + +void regdmn_set_regval(struct regulatory *reg) +{ + void *vos_context = vos_get_global_context(VOS_MODULE_ID_WDA, NULL); + tp_wma_handle wma = vos_get_context(VOS_MODULE_ID_WDA, vos_context); + u_int32_t modeSelect = 0xFFFFFFFF; + + wma_get_modeselect(wma, &modeSelect); + + regdmn_get_ctl_info(reg, wma->reg_cap.wireless_modes, modeSelect); + return; +} diff --git a/CORE/SERVICES/WMA/regdomain.h b/CORE/SERVICES/WMA/regdomain.h index e7e9354f17f8..9d7a75425b63 100644 --- a/CORE/SERVICES/WMA/regdomain.h +++ b/CORE/SERVICES/WMA/regdomain.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* * Notifications and licenses are retained for attribution purposes only. */ @@ -1077,4 +1076,7 @@ enum CountryCode { CTRY_CANADA2 = 5001, /* Canada for AP only */ CTRY_BELGIUM2 = 5002 /* Belgium/Cisco implementation */ }; +int32_t regdmn_get_country_alpha2(struct regulatory *reg); +void regdmn_set_regval(struct regulatory *reg); +int32_t regdmn_find_ctry_by_name(u_int8_t *alpha2); #endif /* REGULATORY_H */ diff --git a/CORE/SERVICES/WMA/regdomain_common.h b/CORE/SERVICES/WMA/regdomain_common.h index 1d07759dc7f7..4c8352412b7f 100644 --- a/CORE/SERVICES/WMA/regdomain_common.h +++ b/CORE/SERVICES/WMA/regdomain_common.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* * Copyright (c) 2002-2009 Sam Leffler, Errno Consulting * Copyright (c) 2005-2011 Atheros Communications, Inc. diff --git a/CORE/SERVICES/WMA/wlan_nv.c b/CORE/SERVICES/WMA/wlan_nv.c index 8aac10d3daa0..3c20954cc503 100644 --- a/CORE/SERVICES/WMA/wlan_nv.c +++ b/CORE/SERVICES/WMA/wlan_nv.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /** ------------------------------------------------------------------------- * ------------------------------------------------------------------------- * diff --git a/CORE/SERVICES/WMA/wlan_qct_wma_legacy.c b/CORE/SERVICES/WMA/wlan_qct_wma_legacy.c index 26fec4e61682..857033ca0cf3 100644 --- a/CORE/SERVICES/WMA/wlan_qct_wma_legacy.c +++ b/CORE/SERVICES/WMA/wlan_qct_wma_legacy.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /*=========================================================================== wlan_qct_WMA_legacy.c @@ -41,10 +40,6 @@ Are listed for each API below. - - Copyright (c) 2008 Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ===========================================================================*/ /* Standard include files */ diff --git a/CORE/SERVICES/WMA/wma.c b/CORE/SERVICES/WMA/wma.c index 8b1fc76340a0..e674a23f2523 100644 --- a/CORE/SERVICES/WMA/wma.c +++ b/CORE/SERVICES/WMA/wma.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /**======================================================================== \file wma.c @@ -97,6 +96,7 @@ /* FIXME: Inclusion of .c looks odd but this is how it is in internal codebase */ #include "wmi_version_whitelist.c" #include "csrApi.h" +#include "ol_fw.h" /* ################### defines ################### */ #define WMA_2_4_GHZ_MAX_FREQ 3000 @@ -149,6 +149,11 @@ static eHalStatus wma_set_ppsconfig(tANI_U8 vdev_id, tANI_U16 pps_param, int value); static eHalStatus wma_set_mimops(tp_wma_handle wma_handle, tANI_U8 vdev_id, int value); +#ifdef FEATURE_WLAN_TDLS +static int wma_update_fw_tdls_state(WMA_HANDLE handle, void *pwmaTdlsparams); +static int wma_update_tdls_peer_state(WMA_HANDLE handle, + tTdlsPeerStateParams *peerStateParams); +#endif #if defined(QCA_WIFI_FTM) && !defined(QCA_WIFI_ISOC) void wma_utf_attach(tp_wma_handle wma_handle); @@ -556,10 +561,12 @@ wmi_unified_vdev_set_param_send(wmi_unified_t wmi_handle, u_int32_t if_id, static v_VOID_t wma_set_default_tgt_config(tp_wma_handle wma_handle) { + struct ol_softc *scn; + u_int8_t no_of_peers_supported; wmi_resource_config tgt_cfg = { 0, /* Filling zero for TLV Tag and Length fields */ CFG_TGT_NUM_VDEV, - CFG_TGT_NUM_PEERS + CFG_TGT_NUM_VDEV, /* reserve an additional peer for each VDEV */ + CFG_TGT_NUM_PEERS + CFG_TGT_NUM_VDEV + 2, CFG_TGT_NUM_OFFLOAD_PEERS, CFG_TGT_NUM_OFFLOAD_REORDER_BUFFS, CFG_TGT_NUM_PEER_KEYS, @@ -585,13 +592,19 @@ static v_VOID_t wma_set_default_tgt_config(tp_wma_handle wma_handle) CFG_TGT_DEFAULT_GTK_OFFLOAD_MAX_VDEV, CFG_TGT_NUM_MSDU_DESC, CFG_TGT_MAX_FRAG_TABLE_ENTRIES, - 0, - 0, + CFG_TGT_NUM_TDLS_VDEVS, + CFG_TGT_NUM_TDLS_CONN_TABLE_ENTRIES, CFG_TGT_DEFAULT_BEACON_TX_OFFLOAD_MAX_VDEV, CFG_TGT_MAX_MULTICAST_FILTER_ENTRIES, 0, }; + /* Update the max number of peers */ + scn = vos_get_context(VOS_MODULE_ID_HIF, wma_handle->vos_context); + no_of_peers_supported = ol_get_number_of_peers_supported(scn); + tgt_cfg.num_peers = no_of_peers_supported + CFG_TGT_NUM_VDEV + 2; + tgt_cfg.num_tids = (2 * (no_of_peers_supported + CFG_TGT_NUM_VDEV + 2)); + WMITLV_SET_HDR(&tgt_cfg.tlv_header,WMITLV_TAG_STRUC_wmi_resource_config, WMITLV_GET_STRUCT_TLVLEN(wmi_resource_config)); /* reduce the peer/vdev if CFG_TGT_NUM_MSDU_DESC exceeds 1000 */ @@ -700,6 +713,7 @@ static int wma_peer_sta_kickout_event_handler(void *handle, u8 *event, u32 len) ol_txrx_peer_handle peer; ol_txrx_pdev_handle pdev; tpDeleteStaContext del_sta_ctx; + tpSirIbssPeerInactivityInd p_inactivity; WMA_LOGD("%s: Enter", __func__); param_buf = (WMI_PEER_STA_KICKOUT_EVENTID_param_tlvs *) event; @@ -717,23 +731,38 @@ static int wma_peer_sta_kickout_event_handler(void *handle, u8 *event, u32 len) return -EINVAL; } - del_sta_ctx = - (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext)); - if (!del_sta_ctx) { - WMA_LOGE("VOS MEM Alloc Failed for tDeleteStaContext"); - return -EINVAL; + WMA_LOGD("%s:\nPEER:[%pM]\n BSSID:[%pM]\nINTERFACE:%d\npeer_ID:%d\n", + __func__, macaddr, wma->interfaces[vdev_id].addr, vdev_id, + peer_id); + + if (kickout_event->reason == WMI_PEER_STA_KICKOUT_REASON_IBSS_DISCONNECT) { + p_inactivity = (tpSirIbssPeerInactivityInd) + vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd)); + if (!p_inactivity) { + WMA_LOGE("VOS MEM Alloc Failed for tSirIbssPeerInactivity"); + return -EINVAL; + } + + p_inactivity->staIdx = peer_id; + vos_mem_copy(p_inactivity->peerAddr, macaddr, IEEE80211_ADDR_LEN); + wma_send_msg(wma, WDA_IBSS_PEER_INACTIVITY_IND, (void *)p_inactivity, 0); } + else { + del_sta_ctx = + (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext)); + if (!del_sta_ctx) { + WMA_LOGE("VOS MEM Alloc Failed for tDeleteStaContext"); + return -EINVAL; + } - WMA_LOGD("%s:\nPEER:[%pM]\n BSSID:[%pM]\nINTERFACE:%d\npeer_ID:%d\n", - __func__, macaddr, wma->interfaces[vdev_id].addr, vdev_id, - peer_id); - del_sta_ctx->staId = peer_id; - vos_mem_copy(del_sta_ctx->addr2, macaddr, IEEE80211_ADDR_LEN); - vos_mem_copy(del_sta_ctx->bssId, wma->interfaces[vdev_id].addr, - IEEE80211_ADDR_LEN); - del_sta_ctx->reasonCode = HAL_DEL_STA_REASON_CODE_KEEP_ALIVE; - wma_send_msg(wma, SIR_LIM_DELETE_STA_CONTEXT_IND, (void *)del_sta_ctx, - 0); + del_sta_ctx->staId = peer_id; + vos_mem_copy(del_sta_ctx->addr2, macaddr, IEEE80211_ADDR_LEN); + vos_mem_copy(del_sta_ctx->bssId, wma->interfaces[vdev_id].addr, + IEEE80211_ADDR_LEN); + del_sta_ctx->reasonCode = HAL_DEL_STA_REASON_CODE_KEEP_ALIVE; + wma_send_msg(wma, SIR_LIM_DELETE_STA_CONTEXT_IND, (void *)del_sta_ctx, + 0); + } WMA_LOGD("%s: Exit", __func__); return 0; } @@ -1303,16 +1332,17 @@ static int wma_gtk_offload_status_event(void *handle, u_int8_t *event, #endif #ifdef FEATURE_OEM_DATA_SUPPORT -static int wma_oem_data_rsp_event_callback(void *handle, u_int8_t *datap, - u_int32_t len) +static int wma_oem_capability_event_callback(void *handle, + u_int8_t *datap, u_int32_t len) { tp_wma_handle wma = (tp_wma_handle) handle; - WMI_OEM_DATA_RSP_EVENTID_param_tlvs *param_buf; + WMI_OEM_CAPABILITY_EVENTID_param_tlvs *param_buf; u_int8_t *data; u_int32_t datalen; + u_int32_t *msg_subtype; tStartOemDataRsp *pStartOemDataRsp; - param_buf = (WMI_OEM_DATA_RSP_EVENTID_param_tlvs *)datap; + param_buf = (WMI_OEM_CAPABILITY_EVENTID_param_tlvs *)datap; if (!param_buf) { WMA_LOGE("%s: Received NULL buf ptr from FW", __func__); return -ENOMEM; @@ -1326,31 +1356,89 @@ static int wma_oem_data_rsp_event_callback(void *handle, u_int8_t *datap, return -EINVAL; } - if (datalen > OEM_DATA_RSP_SIZE) { + /* wma puts 4 bytes prefix for msg subtype, so length + * of data received from target should be 4 bytes less + * then max allowed + */ + if (datalen > (OEM_DATA_RSP_SIZE - 4)) { WMA_LOGE("%s: Received data len (%d) exceeds max value (%d)", - __func__, datalen, OEM_DATA_RSP_SIZE); + __func__, datalen, (OEM_DATA_RSP_SIZE - 4)); return -EINVAL; } pStartOemDataRsp = vos_mem_malloc(sizeof(tStartOemDataRsp)); vos_mem_zero(pStartOemDataRsp, sizeof(tStartOemDataRsp)); - vos_mem_copy(&pStartOemDataRsp->oemDataRsp[0], data, datalen); + msg_subtype = (u_int32_t *)(&pStartOemDataRsp->oemDataRsp[0]); + *msg_subtype = WMI_OEM_CAPABILITY_RSP; + vos_mem_copy(&pStartOemDataRsp->oemDataRsp[4], data, datalen); + + WMA_LOGI("%s: Sending WDA_START_OEM_DATA_RSP, data len (%d)", + __func__, datalen); wma_send_msg(wma, WDA_START_OEM_DATA_RSP, (void *)pStartOemDataRsp, 0); return 0; } -static int wma_oem_data_error_report_event_callback(void *handle, +static int wma_oem_measurement_report_event_callback(void *handle, + u_int8_t *datap, u_int32_t len) +{ + tp_wma_handle wma = (tp_wma_handle) handle; + WMI_OEM_MEASUREMENT_REPORT_EVENTID_param_tlvs *param_buf; + u_int8_t *data; + u_int32_t datalen; + u_int32_t *msg_subtype; + tStartOemDataRsp *pStartOemDataRsp; + + param_buf = (WMI_OEM_MEASUREMENT_REPORT_EVENTID_param_tlvs *)datap; + if (!param_buf) { + WMA_LOGE("%s: Received NULL buf ptr from FW", __func__); + return -ENOMEM; + } + + data = param_buf->data; + datalen = param_buf->num_data; + + if (!data) { + WMA_LOGE("%s: Received NULL data from FW", __func__); + return -EINVAL; + } + + /* wma puts 4 bytes prefix for msg subtype, so length + * of data received from target should be 4 bytes less + * then max allowed + */ + if (datalen > (OEM_DATA_RSP_SIZE - 4)) { + WMA_LOGE("%s: Received data len (%d) exceeds max value (%d)", + __func__, datalen, (OEM_DATA_RSP_SIZE - 4)); + return -EINVAL; + } + + pStartOemDataRsp = vos_mem_malloc(sizeof(tStartOemDataRsp)); + + vos_mem_zero(pStartOemDataRsp, sizeof(tStartOemDataRsp)); + msg_subtype = (u_int32_t *)(&pStartOemDataRsp->oemDataRsp[0]); + *msg_subtype = WMI_OEM_MEASUREMENT_RSP; + vos_mem_copy(&pStartOemDataRsp->oemDataRsp[4], data, datalen); + + WMA_LOGI("%s: Sending WDA_START_OEM_DATA_RSP, data len (%d)", + __func__, datalen); + + wma_send_msg(wma, WDA_START_OEM_DATA_RSP, (void *)data, 0); + return 0; +} + +static int wma_oem_error_report_event_callback(void *handle, u_int8_t *datap, u_int32_t len) { tp_wma_handle wma = (tp_wma_handle) handle; - WMI_OEM_DATA_ERROR_REPORT_EVENTID_param_tlvs *param_buf; + WMI_OEM_ERROR_REPORT_EVENTID_param_tlvs *param_buf; u_int8_t *data; u_int32_t datalen; + u_int32_t *msg_subtype; tStartOemDataRsp *pStartOemDataRsp; - param_buf = (WMI_OEM_DATA_ERROR_REPORT_EVENTID_param_tlvs *)datap; + param_buf = (WMI_OEM_ERROR_REPORT_EVENTID_param_tlvs *)datap; if (!param_buf) { WMA_LOGE("%s: Received NULL buf ptr from FW", __func__); return -ENOMEM; @@ -1364,16 +1452,25 @@ static int wma_oem_data_error_report_event_callback(void *handle, return -EINVAL; } - if (datalen > OEM_DATA_RSP_SIZE) { + /* wma puts 4 bytes prefix for msg subtype, so length + * of data received from target should be 4 bytes less + * then max allowed + */ + if (datalen > (OEM_DATA_RSP_SIZE - 4)) { WMA_LOGE("%s: Received data len (%d) exceeds max value (%d)", - __func__, datalen, OEM_DATA_RSP_SIZE); + __func__, datalen, (OEM_DATA_RSP_SIZE - 4)); return -EINVAL; } pStartOemDataRsp = vos_mem_malloc(sizeof(tStartOemDataRsp)); vos_mem_zero(pStartOemDataRsp, sizeof(tStartOemDataRsp)); - vos_mem_copy(&pStartOemDataRsp->oemDataRsp[0], data, datalen); + msg_subtype = (u_int32_t *)(&pStartOemDataRsp->oemDataRsp[0]); + *msg_subtype = WMI_OEM_ERROR_REPORT_RSP; + vos_mem_copy(&pStartOemDataRsp->oemDataRsp[4], data, datalen); + + WMA_LOGI("%s: Sending WDA_START_OEM_DATA_RSP, data len (%d)", + __func__, datalen); wma_send_msg(wma, WDA_START_OEM_DATA_RSP, (void *)data, 0); return 0; @@ -1441,6 +1538,68 @@ static int wma_p2p_noa_event_handler(void *handle, u_int8_t *event, u_int32_t le return 0; } +#ifdef FEATURE_WLAN_TDLS +static int wma_tdls_event_handler(void *handle, u_int8_t *event, u_int32_t len) +{ + tp_wma_handle wma = (tp_wma_handle) handle; + WMI_TDLS_PEER_EVENTID_param_tlvs *param_buf = NULL; + wmi_tdls_peer_event_fixed_param *peer_event = NULL; + tSirTdlsEventNotify *tdls_event; + + if (!event) { + WMA_LOGE("%s: event param null", __func__); + return -1; + } + + param_buf = (WMI_TDLS_PEER_EVENTID_param_tlvs *) event; + if (!param_buf) { + WMA_LOGE("%s: received null buf from target", __func__); + return -1; + } + + peer_event = param_buf->fixed_param; + if (!peer_event) { + WMA_LOGE("%s: received null event data from target", __func__); + return -1; + } + + tdls_event = (tSirTdlsEventNotify *) + vos_mem_malloc(sizeof(tSirTdlsEventNotify)); + if (!tdls_event) { + WMA_LOGE("%s: failed to allocate memory for tdls_event", __func__); + return -1; + } + + tdls_event->sessionId = peer_event->vdev_id; + WMI_MAC_ADDR_TO_CHAR_ARRAY(&peer_event->peer_macaddr, tdls_event->peerMac); + tdls_event->peer_reason = peer_event->peer_reason; + + switch(peer_event->peer_status) { + case WMI_TDLS_SHOULD_DISCOVER: + tdls_event->messageType = WDA_TDLS_SHOULD_DISCOVER; + break; + case WMI_TDLS_SHOULD_TEARDOWN: + tdls_event->messageType = WDA_TDLS_SHOULD_TEARDOWN; + break; + case WMI_TDLS_PEER_DISCONNECTED: + tdls_event->messageType = WDA_TDLS_PEER_DISCONNECTED; + break; + default: + WMA_LOGE("%s: Discarding unknown tdls event(%d) from target", + __func__, peer_event->peer_status); + return -1; + } + + WMA_LOGD("%s: sending msg to umac, messageType: 0x%x, " + "for peer: %pM, reason: %d, smesessionId: %d", + __func__, tdls_event->messageType, tdls_event->peerMac, + tdls_event->peer_reason, tdls_event->sessionId); + + wma_send_msg(wma, tdls_event->messageType, (void *)tdls_event, 0); + return 0; +} +#endif /* FEATURE_WLAN_TDLS */ + /* * Allocate and init wmi adaptation layer. */ @@ -1486,6 +1645,12 @@ VOS_STATUS WDA_open(v_VOID_t *vos_context, v_VOID_t *os_ctx, WMA_LOGA("WMA --> wmi_unified_attach - success"); + /* Save the WMI & HTC handle */ + wma_handle->wmi_handle = wmi_handle; + wma_handle->htc_handle = htc_handle; + wma_handle->vos_context = vos_context; + wma_handle->adf_dev = adf_dev; + /* initialize default target config */ wma_set_default_tgt_config(wma_handle); @@ -1497,12 +1662,6 @@ VOS_STATUS WDA_open(v_VOID_t *vos_context, v_VOID_t *os_ctx, goto err_wmi_attach; } - /* Save the WMI & HTC handle */ - wma_handle->wmi_handle = wmi_handle; - wma_handle->htc_handle = htc_handle; - wma_handle->vos_context = vos_context; - wma_handle->adf_dev = adf_dev; - #if defined(QCA_WIFI_FTM) && !defined(QCA_WIFI_ISOC) if (vos_get_conparam() == VOS_FTM_MODE) wma_utf_attach(wma_handle); @@ -1514,6 +1673,7 @@ VOS_STATUS WDA_open(v_VOID_t *vos_context, v_VOID_t *os_ctx, mac_params->frameTransRequired = 0; wma_handle->wlan_resource_config.num_wow_filters = mac_params->maxWoWFilters; + wma_handle->ol_ini_info = mac_params->olIniInfo; wma_handle->max_station = mac_params->maxStation; wma_handle->max_bssid = mac_params->maxBssId; wma_handle->frame_xln_reqd = mac_params->frameTransRequired; @@ -1582,13 +1742,17 @@ VOS_STATUS WDA_open(v_VOID_t *vos_context, v_VOID_t *os_ctx, wma_peer_sta_kickout_event_handler); #ifdef FEATURE_OEM_DATA_SUPPORT - wmi_unified_register_event_handler(wma_handle->wmi_handle, - WMI_OEM_DATA_RSP_EVENTID, - wma_oem_data_rsp_event_callback); + wmi_unified_register_event_handler(wma_handle->wmi_handle, + WMI_OEM_CAPABILITY_EVENTID, + wma_oem_capability_event_callback); + + wmi_unified_register_event_handler(wma_handle->wmi_handle, + WMI_OEM_MEASUREMENT_REPORT_EVENTID, + wma_oem_measurement_report_event_callback); - wmi_unified_register_event_handler(wma_handle->wmi_handle, - WMI_OEM_DATA_ERROR_REPORT_EVENTID, - wma_oem_data_error_report_event_callback); + wmi_unified_register_event_handler(wma_handle->wmi_handle, + WMI_OEM_ERROR_REPORT_EVENTID, + wma_oem_error_report_event_callback); #endif /* Firmware debug log */ @@ -1620,6 +1784,12 @@ VOS_STATUS WDA_open(v_VOID_t *vos_context, v_VOID_t *os_ctx, wma_handle->ptrn_match_enable_all_vdev = (mac_params->wowEnable & 0x02) ? TRUE : FALSE; +#ifdef FEATURE_WLAN_TDLS + wmi_unified_register_event_handler(wma_handle->wmi_handle, + WMI_TDLS_PEER_EVENTID, + wma_tdls_event_handler); +#endif /* FEATURE_WLAN_TDLS */ + WMA_LOGD("%s: Exit", __func__); return VOS_STATUS_SUCCESS; @@ -1872,6 +2042,9 @@ static VOS_STATUS wma_vdev_detach(tp_wma_handle wma_handle, status = VOS_STATUS_E_FAILURE; else ol_txrx_vdev_detach(txrx_hdl, NULL, NULL); + if(wma_handle->interfaces[pdel_sta_self_req_param->sessionId].addBssStaContext) { + adf_os_mem_free(wma_handle->interfaces[pdel_sta_self_req_param->sessionId].addBssStaContext); + } vos_mem_zero(&wma_handle->interfaces[pdel_sta_self_req_param->sessionId], sizeof(wma_handle->interfaces[pdel_sta_self_req_param->sessionId])); @@ -1887,8 +2060,8 @@ static VOS_STATUS wma_vdev_detach(tp_wma_handle wma_handle, } static int wmi_unified_peer_create_send(wmi_unified_t wmi, - const u_int8_t *peer_addr, - u_int32_t vdev_id) + const u_int8_t *peer_addr, u_int32_t peer_type, + u_int32_t vdev_id) { wmi_peer_create_cmd_fixed_param *cmd; wmi_buf_t buf; @@ -1905,6 +2078,7 @@ static int wmi_unified_peer_create_send(wmi_unified_t wmi, WMITLV_GET_STRUCT_TLVLEN( wmi_peer_create_cmd_fixed_param)); WMI_CHAR_ARRAY_TO_MAC_ADDR(peer_addr, &cmd->peer_macaddr); + cmd->peer_type = peer_type; cmd->vdev_id = vdev_id; if (wmi_unified_cmd_send(wmi, buf, len, WMI_PEER_CREATE_CMDID)) { @@ -1917,8 +2091,8 @@ static int wmi_unified_peer_create_send(wmi_unified_t wmi, } static VOS_STATUS wma_create_peer(tp_wma_handle wma, ol_txrx_pdev_handle pdev, - ol_txrx_vdev_handle vdev, u8 *peer_addr, - u_int8_t vdev_id) + ol_txrx_vdev_handle vdev, u8 *peer_addr, + u_int32_t peer_type, u_int8_t vdev_id) { ol_txrx_peer_handle peer; @@ -1933,7 +2107,7 @@ static VOS_STATUS wma_create_peer(tp_wma_handle wma, ol_txrx_pdev_handle pdev, goto err; if (wmi_unified_peer_create_send(wma->wmi_handle, peer_addr, - vdev_id) < 0) { + peer_type, vdev_id) < 0) { WMA_LOGP("%s : Unable to create peer in Target\n", __func__); ol_txrx_peer_detach(peer); goto err; @@ -2214,8 +2388,9 @@ static ol_txrx_vdev_handle wma_vdev_attach(tp_wma_handle wma_handle, self_sta_req->selfMacAddr, self_sta_req->sessionId); status = wma_create_peer(wma_handle, txrx_pdev, - txrx_vdev_handle, self_sta_req->selfMacAddr, - self_sta_req->sessionId); + txrx_vdev_handle, self_sta_req->selfMacAddr, + WMI_PEER_TYPE_DEFAULT, + self_sta_req->sessionId); if (status != VOS_STATUS_SUCCESS) { WMA_LOGE("%s: Failed to create peer\n", __func__); status = VOS_STATUS_E_FAILURE; @@ -2253,9 +2428,15 @@ static ol_txrx_vdev_handle wma_vdev_attach(tp_wma_handle wma_handle, * return value is not significant because some firmware versions may have * roam offload always enabled. It will stay enabled even if this command fails. */ - ret = wmi_unified_vdev_set_param_send(wma_handle->wmi_handle, self_sta_req->sessionId, + ret = wmi_unified_vdev_set_param_send(wma_handle->wmi_handle, self_sta_req->sessionId, WMI_VDEV_PARAM_ROAM_FW_OFFLOAD, 1); - } + if (ret) { + /* could not enable roam offload in firmware. Disable it for host. */ + WMA_LOGE("Failed to set WMI_VDEV_PARAM_ROAM_FW_OFFLOAD"); + } else { + wma_handle->roam_offload_vdev_id = (A_UINT32) self_sta_req->sessionId; + } + } if (wlan_cfgGetInt(mac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &cfg_val) == eSIR_SUCCESS) { @@ -2933,7 +3114,7 @@ end: * : mode controls rssi based and periodic scans by roam engine. * Returns : */ -VOS_STATUS wma_roam_scan_offload_mode(tp_wma_handle wma_handle, u_int8_t sessionId, +VOS_STATUS wma_roam_scan_offload_mode(tp_wma_handle wma_handle, wmi_start_scan_cmd_fixed_param *scan_cmd_fp, u_int32_t mode) { VOS_STATUS vos_status = VOS_STATUS_SUCCESS; @@ -2958,7 +3139,7 @@ VOS_STATUS wma_roam_scan_offload_mode(tp_wma_handle wma_handle, u_int8_t session WMITLV_GET_STRUCT_TLVLEN(wmi_roam_scan_mode_fixed_param)); roam_scan_mode_fp->roam_scan_mode = mode; - roam_scan_mode_fp->vdev_id = sessionId; + roam_scan_mode_fp->vdev_id = wma_handle->roam_offload_vdev_id; /* Fill in scan parameters suitable for roaming scan */ buf_ptr += sizeof(wmi_roam_scan_mode_fixed_param); vos_mem_copy(buf_ptr, scan_cmd_fp, sizeof(wmi_start_scan_cmd_fixed_param)); @@ -2989,7 +3170,7 @@ error: * Args : * Returns : */ -VOS_STATUS wma_roam_scan_offload_rssi_thresh(tp_wma_handle wma_handle, u_int8_t sessionId, +VOS_STATUS wma_roam_scan_offload_rssi_thresh(tp_wma_handle wma_handle, A_INT32 rssi_thresh, A_INT32 rssi_thresh_diff) { VOS_STATUS vos_status = VOS_STATUS_SUCCESS; @@ -3014,7 +3195,7 @@ VOS_STATUS wma_roam_scan_offload_rssi_thresh(tp_wma_handle wma_handle, u_int8_t WMITLV_GET_STRUCT_TLVLEN( wmi_roam_scan_rssi_threshold_fixed_param)); /* fill in threshold values */ - rssi_threshold_fp->vdev_id = sessionId; + rssi_threshold_fp->vdev_id = wma_handle->roam_offload_vdev_id; rssi_threshold_fp->roam_scan_rssi_thresh = rssi_thresh; rssi_threshold_fp->roam_rssi_thresh_diff = rssi_thresh_diff; @@ -3041,7 +3222,7 @@ error: * Args : * Returns : */ -VOS_STATUS wma_roam_scan_offload_scan_period(tp_wma_handle wma_handle, u_int8_t sessionId, +VOS_STATUS wma_roam_scan_offload_scan_period(tp_wma_handle wma_handle, A_UINT32 scan_period, A_UINT32 scan_age) { VOS_STATUS vos_status = VOS_STATUS_SUCCESS; @@ -3066,7 +3247,7 @@ VOS_STATUS wma_roam_scan_offload_scan_period(tp_wma_handle wma_handle, u_int8_t WMITLV_GET_STRUCT_TLVLEN( wmi_roam_scan_period_fixed_param)); /* fill in scan period values */ - scan_period_fp->vdev_id = sessionId; + scan_period_fp->vdev_id = wma_handle->roam_offload_vdev_id; scan_period_fp->roam_scan_period = scan_period; /* 20 seconds */ scan_period_fp->roam_scan_age = scan_age; @@ -3092,7 +3273,7 @@ error: * Args : * Returns : */ -VOS_STATUS wma_roam_scan_offload_rssi_change(tp_wma_handle wma_handle, u_int8_t sessionId, +VOS_STATUS wma_roam_scan_offload_rssi_change(tp_wma_handle wma_handle, A_INT32 rssi_change_thresh, A_UINT32 bcn_rssi_weight) { VOS_STATUS vos_status = VOS_STATUS_SUCCESS; @@ -3117,7 +3298,7 @@ VOS_STATUS wma_roam_scan_offload_rssi_change(tp_wma_handle wma_handle, u_int8_t WMITLV_GET_STRUCT_TLVLEN( wmi_roam_scan_rssi_change_threshold_fixed_param)); /* fill in rssi change threshold (hysteresis) values */ - rssi_change_fp->vdev_id = sessionId; + rssi_change_fp->vdev_id = wma_handle->roam_offload_vdev_id; rssi_change_fp->roam_scan_rssi_change_thresh = rssi_change_thresh; rssi_change_fp->bcn_rssi_weight = bcn_rssi_weight; @@ -3144,7 +3325,7 @@ error: * Args : * Returns : */ -VOS_STATUS wma_roam_scan_offload_chan_list(tp_wma_handle wma_handle, u_int8_t sessionId, +VOS_STATUS wma_roam_scan_offload_chan_list(tp_wma_handle wma_handle, u_int8_t chan_count, u_int8_t *chan_list) { VOS_STATUS vos_status = VOS_STATUS_SUCCESS; @@ -3175,7 +3356,7 @@ VOS_STATUS wma_roam_scan_offload_chan_list(tp_wma_handle wma_handle, u_int8_t se WMITLV_SET_HDR(&chan_list_fp->tlv_header, WMITLV_TAG_STRUC_wmi_roam_chan_list_fixed_param, WMITLV_GET_STRUCT_TLVLEN(wmi_roam_chan_list_fixed_param)); - chan_list_fp->vdev_id = sessionId; + chan_list_fp->vdev_id = wma_handle->roam_offload_vdev_id; chan_list_fp->num_chan = chan_count; chan_list_fp->chan_list_type = WMI_ROAM_SCAN_CHAN_LIST_TYPE_STATIC; @@ -3214,7 +3395,7 @@ error: */ -A_UINT32 eCsrAuthType_to_rsn_authmode (eCsrAuthType authtype) { +A_UINT32 eCsrAuthType_to_rsn_authmode (eCsrAuthType authtype, eCsrEncryptionType encr) { switch(authtype) { case eCSR_AUTH_TYPE_OPEN_SYSTEM: return (WMI_AUTH_OPEN); @@ -3228,9 +3409,9 @@ A_UINT32 eCsrAuthType_to_rsn_authmode (eCsrAuthType authtype) { return (WMI_AUTH_RSNA_PSK); #if defined WLAN_FEATURE_VOWIFI_11R case eCSR_AUTH_TYPE_FT_RSN: - return (WMI_AUTH_RSNA); + return (WMI_AUTH_FT_RSNA); case eCSR_AUTH_TYPE_FT_RSN_PSK: - return (WMI_AUTH_RSNA_PSK); + return (WMI_AUTH_FT_RSNA_PSK); #endif #ifdef FEATURE_WLAN_WAPI case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE: @@ -3243,6 +3424,18 @@ A_UINT32 eCsrAuthType_to_rsn_authmode (eCsrAuthType authtype) { case eCSR_AUTH_TYPE_CCKM_RSN: return(WMI_AUTH_CCKM); #endif + case eCSR_AUTH_TYPE_NONE: + case eCSR_AUTH_TYPE_AUTOSWITCH: + /* In case of WEP and other keys, NONE means OPEN auth */ + if (encr == eCSR_ENCRYPT_TYPE_WEP40_STATICKEY || + encr == eCSR_ENCRYPT_TYPE_WEP104_STATICKEY || + encr == eCSR_ENCRYPT_TYPE_WEP40 || + encr == eCSR_ENCRYPT_TYPE_WEP104 || + encr == eCSR_ENCRYPT_TYPE_TKIP || + encr == eCSR_ENCRYPT_TYPE_AES) { + return (WMI_AUTH_OPEN); + } + return(WMI_AUTH_NONE); default: return(WMI_AUTH_NONE); } @@ -3284,21 +3477,31 @@ A_UINT32 eCsrEncryptionType_to_rsn_cipherset (eCsrEncryptionType encr) { * Returns : */ v_VOID_t wma_roam_scan_fill_ap_profile(tp_wma_handle wma_handle, tpAniSirGlobal pMac, -tANI_U8 sessionId, wmi_ap_profile *ap_profile_p) -{ - vos_mem_zero(ap_profile_p, sizeof(wmi_ap_profile)); - ap_profile_p->ssid.ssid_len = pMac->roam.roamSession[sessionId].connectedProfile.SSID.length; - vos_mem_copy(ap_profile_p->ssid.ssid, - pMac->roam.roamSession[sessionId].connectedProfile.SSID.ssId, + tSirRoamOffloadScanReq *roam_req, wmi_ap_profile *ap_profile_p) +{ + vos_mem_zero(ap_profile_p, sizeof(wmi_ap_profile)); + if (roam_req == NULL) { + ap_profile_p->ssid.ssid_len = 0; + ap_profile_p->ssid.ssid[0] = 0; + ap_profile_p->rsn_authmode = WMI_AUTH_NONE; + ap_profile_p->rsn_ucastcipherset = WMI_CIPHER_NONE; + ap_profile_p->rsn_mcastcipherset = WMI_CIPHER_NONE; + ap_profile_p->rsn_mcastmgmtcipherset = WMI_CIPHER_NONE; + ap_profile_p->rssi_threshold = 5; + } else { + ap_profile_p->ssid.ssid_len = roam_req->ConnectedNetwork.ssId.length; + vos_mem_copy(ap_profile_p->ssid.ssid, roam_req->ConnectedNetwork.ssId.ssId, ap_profile_p->ssid.ssid_len); - ap_profile_p->rsn_authmode = - eCsrAuthType_to_rsn_authmode(pMac->roam.roamSession[sessionId].connectedProfile.AuthType); - ap_profile_p->rsn_ucastcipherset = - eCsrEncryptionType_to_rsn_cipherset(pMac->roam.roamSession[sessionId].connectedProfile.EncryptionType); - ap_profile_p->rsn_mcastcipherset = - eCsrEncryptionType_to_rsn_cipherset(pMac->roam.roamSession[sessionId].connectedProfile.mcEncryptionType); - ap_profile_p->rsn_mcastmgmtcipherset = ap_profile_p->rsn_mcastcipherset; - ap_profile_p->rssi_threshold = 5; + ap_profile_p->rsn_authmode = + eCsrAuthType_to_rsn_authmode(roam_req->ConnectedNetwork.authentication, + roam_req->ConnectedNetwork.encryption); + ap_profile_p->rsn_ucastcipherset = + eCsrEncryptionType_to_rsn_cipherset(roam_req->ConnectedNetwork.encryption); + ap_profile_p->rsn_mcastcipherset = + eCsrEncryptionType_to_rsn_cipherset(roam_req->ConnectedNetwork.mcencryption); + ap_profile_p->rsn_mcastmgmtcipherset = ap_profile_p->rsn_mcastcipherset; + ap_profile_p->rssi_threshold = 5; + } } /* function : wma_roam_scan_scan_params @@ -3342,7 +3545,7 @@ v_VOID_t wma_roam_scan_fill_scan_params(tp_wma_handle wma_handle, tpAniSirGlobal * Args : AP profile parameters are passed in as the structure used in TLV * Returns : */ -VOS_STATUS wma_roam_scan_offload_ap_profile(tp_wma_handle wma_handle, u_int8_t sessionId, +VOS_STATUS wma_roam_scan_offload_ap_profile(tp_wma_handle wma_handle, wmi_ap_profile *ap_profile_p) { VOS_STATUS vos_status = VOS_STATUS_SUCCESS; @@ -3368,7 +3571,7 @@ VOS_STATUS wma_roam_scan_offload_ap_profile(tp_wma_handle wma_handle, u_int8_t s WMITLV_GET_STRUCT_TLVLEN( wmi_roam_ap_profile_fixed_param)); /* fill in threshold values */ - roam_ap_profile_fp->vdev_id = sessionId; + roam_ap_profile_fp->vdev_id = wma_handle->roam_offload_vdev_id; roam_ap_profile_fp->id = 0; buf_ptr += sizeof(wmi_roam_ap_profile_fixed_param); @@ -3403,7 +3606,7 @@ error: * Args : * Returns : */ -VOS_STATUS wma_roam_scan_offload_init_connect(tp_wma_handle wma_handle, u_int8_t sessionId) +VOS_STATUS wma_roam_scan_offload_init_connect(tp_wma_handle wma_handle) { VOS_STATUS vos_status; tpAniSirGlobal pMac = (tpAniSirGlobal)vos_get_context(VOS_MODULE_ID_PE, @@ -3418,25 +3621,21 @@ VOS_STATUS wma_roam_scan_offload_init_connect(tp_wma_handle wma_handle, u_int8_t /* Fast roaming is disabled */ return VOS_STATUS_SUCCESS; } - if (pMac->roam.roamSession[sessionId].connectedProfile.SSID.length == 0) { - /* No need to configure roam scan for null SSID. */ - return VOS_STATUS_SUCCESS; - } /* first program the parameters to conservative values so that roaming scan won't be * triggered before association completes */ /* rssi_thresh = 10 is low enough */ - vos_status = wma_roam_scan_offload_rssi_thresh(wma_handle, sessionId, 10, 30); - vos_status = wma_roam_scan_offload_scan_period(wma_handle, sessionId, + vos_status = wma_roam_scan_offload_rssi_thresh(wma_handle, 10, 30); + vos_status = wma_roam_scan_offload_scan_period(wma_handle, 100000, 500000); - vos_status = wma_roam_scan_offload_rssi_change(wma_handle, sessionId, + vos_status = wma_roam_scan_offload_rssi_change(wma_handle, 15, 14); - wma_roam_scan_fill_ap_profile(wma_handle, pMac, sessionId, &ap_profile); + wma_roam_scan_fill_ap_profile(wma_handle, pMac, NULL, &ap_profile); - vos_status = wma_roam_scan_offload_ap_profile(wma_handle, sessionId, &ap_profile); + vos_status = wma_roam_scan_offload_ap_profile(wma_handle, &ap_profile); wma_roam_scan_fill_scan_params(wma_handle, pMac, NULL, &scan_params); - vos_status = wma_roam_scan_offload_mode(wma_handle, sessionId, &scan_params, + vos_status = wma_roam_scan_offload_mode(wma_handle, &scan_params, WMI_ROAM_SCAN_MODE_PERIODIC); return vos_status; } @@ -3446,7 +3645,7 @@ VOS_STATUS wma_roam_scan_offload_init_connect(tp_wma_handle wma_handle, u_int8_t * Args : * Returns : */ -VOS_STATUS wma_roam_scan_offload_end_connect(tp_wma_handle wma_handle, u_int8_t sessionId) +VOS_STATUS wma_roam_scan_offload_end_connect(tp_wma_handle wma_handle) { VOS_STATUS vos_status; tpAniSirGlobal pMac = (tpAniSirGlobal)vos_get_context(VOS_MODULE_ID_PE, @@ -3459,7 +3658,7 @@ VOS_STATUS wma_roam_scan_offload_end_connect(tp_wma_handle wma_handle, u_int8_t } wma_roam_scan_fill_scan_params(wma_handle, pMac, NULL, &scan_params); - vos_status = wma_roam_scan_offload_mode(wma_handle, sessionId, &scan_params, + vos_status = wma_roam_scan_offload_mode(wma_handle, &scan_params, WMI_ROAM_SCAN_MODE_NONE); return vos_status; } @@ -3495,7 +3694,7 @@ VOS_STATUS wma_process_roam_scan_req(tp_wma_handle wma_handle, /* First parameter is positive rssi value to trigger rssi based scan. * Opportunistic scan is started at 30 dB higher that trigger rssi. */ - vos_status = wma_roam_scan_offload_rssi_thresh(wma_handle, roam_req->sessionId, + vos_status = wma_roam_scan_offload_rssi_thresh(wma_handle, (roam_req->LookupThreshold - noise_floor), 30); if (vos_status != VOS_STATUS_SUCCESS) { @@ -3504,7 +3703,7 @@ VOS_STATUS wma_process_roam_scan_req(tp_wma_handle wma_handle, /* Opportunistic scan runs on a timer, value set by NeighborRoamScanRefreshPeriod. * Age out the entries after 3 such cycles. */ - vos_status = wma_roam_scan_offload_scan_period(wma_handle, roam_req->sessionId, + vos_status = wma_roam_scan_offload_scan_period(wma_handle, roam_req->NeighborRoamScanRefreshPeriod, roam_req->NeighborRoamScanRefreshPeriod * 3); if (vos_status != VOS_STATUS_SUCCESS) { @@ -3514,19 +3713,19 @@ VOS_STATUS wma_process_roam_scan_req(tp_wma_handle wma_handle, * Beacon weight of 14 means average rssi is taken over 14 previous samples + * 2 times the current beacon's rssi. */ - vos_status = wma_roam_scan_offload_rssi_change(wma_handle, roam_req->sessionId, + vos_status = wma_roam_scan_offload_rssi_change(wma_handle, roam_req->RoamRssiDiff, 14); if (vos_status != VOS_STATUS_SUCCESS) { break; } - wma_roam_scan_fill_ap_profile(wma_handle, pMac, roam_req->sessionId, &ap_profile); + wma_roam_scan_fill_ap_profile(wma_handle, pMac, roam_req, &ap_profile); - vos_status = wma_roam_scan_offload_ap_profile(wma_handle, roam_req->sessionId, + vos_status = wma_roam_scan_offload_ap_profile(wma_handle, &ap_profile); if (vos_status != VOS_STATUS_SUCCESS) { break; } - vos_status = wma_roam_scan_offload_chan_list(wma_handle, roam_req->sessionId, + vos_status = wma_roam_scan_offload_chan_list(wma_handle, roam_req->ConnectedNetwork.ChannelCount, &roam_req->ConnectedNetwork.ChannelCache[0]); if (vos_status != VOS_STATUS_SUCCESS) { @@ -3535,12 +3734,12 @@ VOS_STATUS wma_process_roam_scan_req(tp_wma_handle wma_handle, wma_roam_scan_fill_scan_params(wma_handle, pMac, roam_req, &scan_params); - vos_status = wma_roam_scan_offload_mode(wma_handle, roam_req->sessionId, &scan_params, + vos_status = wma_roam_scan_offload_mode(wma_handle, &scan_params, (WMI_ROAM_SCAN_MODE_PERIODIC | WMI_ROAM_SCAN_MODE_RSSI_CHANGE)); break; case ROAM_SCAN_OFFLOAD_STOP: - wma_roam_scan_offload_end_connect(wma_handle, roam_req->sessionId); + wma_roam_scan_offload_end_connect(wma_handle); break; case ROAM_SCAN_OFFLOAD_RESTART: @@ -3551,25 +3750,25 @@ VOS_STATUS wma_process_roam_scan_req(tp_wma_handle wma_handle, /* * Runtime (after association) changes to rssi thresholds and other parameters. */ - vos_status = wma_roam_scan_offload_chan_list(wma_handle, roam_req->sessionId, + vos_status = wma_roam_scan_offload_chan_list(wma_handle, roam_req->ConnectedNetwork.ChannelCount, &roam_req->ConnectedNetwork.ChannelCache[0]); if (vos_status != VOS_STATUS_SUCCESS) { break; } - vos_status = wma_roam_scan_offload_rssi_thresh(wma_handle, roam_req->sessionId, + vos_status = wma_roam_scan_offload_rssi_thresh(wma_handle, (roam_req->LookupThreshold - noise_floor), 30); if (vos_status != VOS_STATUS_SUCCESS) { break; } - vos_status = wma_roam_scan_offload_scan_period(wma_handle, roam_req->sessionId, + vos_status = wma_roam_scan_offload_scan_period(wma_handle, roam_req->NeighborRoamScanRefreshPeriod, roam_req->NeighborRoamScanRefreshPeriod * 3); if (vos_status != VOS_STATUS_SUCCESS) { break; } - vos_status = wma_roam_scan_offload_rssi_change(wma_handle, roam_req->sessionId, + vos_status = wma_roam_scan_offload_rssi_change(wma_handle, roam_req->RoamRssiDiff, 14); break; @@ -3580,6 +3779,416 @@ VOS_STATUS wma_process_roam_scan_req(tp_wma_handle wma_handle, return vos_status; } +#ifdef FEATURE_WLAN_LPHB +/* function : wma_lphb_conf_hbenable + * Descriptin : handles the enable command of LPHB configuration requests + * Args : + * Returns : + */ +VOS_STATUS wma_lphb_conf_hbenable(tp_wma_handle wma_handle, + tSirLPHBReq *lphb_conf_req) +{ + VOS_STATUS vos_status = VOS_STATUS_SUCCESS; + int status = 0; + tSirLPHBEnableStruct *ts_lphb_enable; + wmi_buf_t buf = NULL; + u_int8_t *buf_ptr; + wmi_hb_set_enable_cmd_fixed_param *hb_enable_fp; + int len = sizeof(wmi_hb_set_enable_cmd_fixed_param); + + if (lphb_conf_req == NULL) + { + WMA_LOGE("%s : LPHB configuration is NULL\n", __func__); + return VOS_STATUS_E_FAILURE; + } + + ts_lphb_enable = &(lphb_conf_req->params.lphbEnableReq); + WMA_LOGI("%s: WMA --> WMI_HB_SET_ENABLE enable=%d, item=%d, session=%d", + __func__, + ts_lphb_enable->enable, + ts_lphb_enable->item, + ts_lphb_enable->session); + + buf = wmi_buf_alloc(wma_handle->wmi_handle, len); + if (!buf) { + WMA_LOGE("%s : wmi_buf_alloc failed\n", __func__); + return VOS_STATUS_E_NOMEM; + } + + buf_ptr = (u_int8_t *) wmi_buf_data(buf); + hb_enable_fp = (wmi_hb_set_enable_cmd_fixed_param *) buf_ptr; + WMITLV_SET_HDR(&hb_enable_fp->tlv_header, + WMITLV_TAG_STRUC_wmi_hb_set_enable_cmd_fixed_param, + WMITLV_GET_STRUCT_TLVLEN( + wmi_hb_set_enable_cmd_fixed_param)); + + /* fill in values */ + hb_enable_fp->vdev_id = ts_lphb_enable->session; + hb_enable_fp->enable= ts_lphb_enable->enable; + hb_enable_fp->item = ts_lphb_enable->item; + hb_enable_fp->session = ts_lphb_enable->session; + + status = wmi_unified_cmd_send(wma_handle->wmi_handle, buf, + len, WMI_HB_SET_ENABLE_CMDID); + if (status != EOK) { + WMA_LOGE("wmi_unified_cmd_send WMI_HB_SET_ENABLE returned Error %d", + status); + vos_status = VOS_STATUS_E_FAILURE; + goto error; + } + + return VOS_STATUS_SUCCESS; +error: + return vos_status; +} + +/* function : wma_lphb_conf_tcp_params + * Descriptin : handles the tcp params command of LPHB configuration requests + * Args : + * Returns : + */ +VOS_STATUS wma_lphb_conf_tcp_params(tp_wma_handle wma_handle, + tSirLPHBReq *lphb_conf_req) +{ + VOS_STATUS vos_status = VOS_STATUS_SUCCESS; + int status = 0; + tSirLPHBTcpParamStruct *ts_lphb_tcp_param; + wmi_buf_t buf = NULL; + u_int8_t *buf_ptr; + wmi_hb_set_tcp_params_cmd_fixed_param *hb_tcp_params_fp; + int len = sizeof(wmi_hb_set_tcp_params_cmd_fixed_param); + + if (lphb_conf_req == NULL) + { + WMA_LOGE("%s : LPHB configuration is NULL\n", __func__); + return VOS_STATUS_E_FAILURE; + } + + ts_lphb_tcp_param = &(lphb_conf_req->params.lphbTcpParamReq); + WMA_LOGI("%s: WMA --> WMI_HB_SET_TCP_PARAMS srv_ip=%08x, dev_ip=%08x, src_port=%d, " + "dst_port=%d, timeout=%d, session=%d, gateway_mac=%02x:%02x:%02x:%02x:%02x:%02x, " + "timePeriodSec=%d, tcpSn=%d", + __func__, + ts_lphb_tcp_param->srv_ip, ts_lphb_tcp_param->dev_ip, + ts_lphb_tcp_param->src_port, ts_lphb_tcp_param->dst_port, + ts_lphb_tcp_param->timeout, ts_lphb_tcp_param->session, + ts_lphb_tcp_param->gateway_mac[0], + ts_lphb_tcp_param->gateway_mac[1], + ts_lphb_tcp_param->gateway_mac[2], + ts_lphb_tcp_param->gateway_mac[3], + ts_lphb_tcp_param->gateway_mac[4], + ts_lphb_tcp_param->gateway_mac[5], + ts_lphb_tcp_param->timePeriodSec, ts_lphb_tcp_param->tcpSn); + + buf = wmi_buf_alloc(wma_handle->wmi_handle, len); + if (!buf) { + WMA_LOGE("%s : wmi_buf_alloc failed\n", __func__); + return VOS_STATUS_E_NOMEM; + } + + buf_ptr = (u_int8_t *) wmi_buf_data(buf); + hb_tcp_params_fp = (wmi_hb_set_tcp_params_cmd_fixed_param *) buf_ptr; + WMITLV_SET_HDR(&hb_tcp_params_fp->tlv_header, + WMITLV_TAG_STRUC_wmi_hb_set_tcp_params_cmd_fixed_param, + WMITLV_GET_STRUCT_TLVLEN( + wmi_hb_set_tcp_params_cmd_fixed_param)); + + /* fill in values */ + hb_tcp_params_fp->vdev_id = ts_lphb_tcp_param->session; + hb_tcp_params_fp->srv_ip = ts_lphb_tcp_param->srv_ip; + hb_tcp_params_fp->dev_ip = ts_lphb_tcp_param->dev_ip; + hb_tcp_params_fp->seq = ts_lphb_tcp_param->tcpSn; + hb_tcp_params_fp->src_port = ts_lphb_tcp_param->src_port; + hb_tcp_params_fp->dst_port = ts_lphb_tcp_param->dst_port; + hb_tcp_params_fp->interval = ts_lphb_tcp_param->timePeriodSec; + hb_tcp_params_fp->timeout = ts_lphb_tcp_param->timeout; + hb_tcp_params_fp->session = ts_lphb_tcp_param->session; + WMI_CHAR_ARRAY_TO_MAC_ADDR(ts_lphb_tcp_param->gateway_mac, &hb_tcp_params_fp->gateway_mac); + + status = wmi_unified_cmd_send(wma_handle->wmi_handle, buf, + len, WMI_HB_SET_TCP_PARAMS_CMDID); + if (status != EOK) { + WMA_LOGE("wmi_unified_cmd_send WMI_HB_SET_TCP_PARAMS returned Error %d", + status); + vos_status = VOS_STATUS_E_FAILURE; + goto error; + } + + return VOS_STATUS_SUCCESS; +error: + return vos_status; +} + +/* function : wma_lphb_conf_tcp_pkt_filter + * Descriptin : handles the tcp packet filter command of LPHB configuration requests + * Args : + * Returns : + */ +VOS_STATUS wma_lphb_conf_tcp_pkt_filter(tp_wma_handle wma_handle, + tSirLPHBReq *lphb_conf_req) +{ + VOS_STATUS vos_status = VOS_STATUS_SUCCESS; + int status = 0; + tSirLPHBTcpFilterStruct *ts_lphb_tcp_filter; + wmi_buf_t buf = NULL; + u_int8_t *buf_ptr; + wmi_hb_set_tcp_pkt_filter_cmd_fixed_param *hb_tcp_filter_fp; + int len = sizeof(wmi_hb_set_tcp_pkt_filter_cmd_fixed_param); + + if (lphb_conf_req == NULL) + { + WMA_LOGE("%s : LPHB configuration is NULL\n", __func__); + return VOS_STATUS_E_FAILURE; + } + + ts_lphb_tcp_filter = &(lphb_conf_req->params.lphbTcpFilterReq); + WMA_LOGI("%s: WMA --> WMI_HB_SET_TCP_PKT_FILTER length=%d, offset=%d, session=%d, " + "filter=%2x:%2x:%2x:%2x:%2x:%2x ...", + __func__, + ts_lphb_tcp_filter->length, + ts_lphb_tcp_filter->offset, + ts_lphb_tcp_filter->session, + ts_lphb_tcp_filter->filter[0], + ts_lphb_tcp_filter->filter[1], + ts_lphb_tcp_filter->filter[2], + ts_lphb_tcp_filter->filter[3], + ts_lphb_tcp_filter->filter[4], + ts_lphb_tcp_filter->filter[5]); + + buf = wmi_buf_alloc(wma_handle->wmi_handle, len); + if (!buf) { + WMA_LOGE("%s : wmi_buf_alloc failed\n", __func__); + return VOS_STATUS_E_NOMEM; + } + + buf_ptr = (u_int8_t *) wmi_buf_data(buf); + hb_tcp_filter_fp = (wmi_hb_set_tcp_pkt_filter_cmd_fixed_param *) buf_ptr; + WMITLV_SET_HDR(&hb_tcp_filter_fp->tlv_header, + WMITLV_TAG_STRUC_wmi_hb_set_tcp_pkt_filter_cmd_fixed_param, + WMITLV_GET_STRUCT_TLVLEN( + wmi_hb_set_tcp_pkt_filter_cmd_fixed_param)); + + /* fill in values */ + hb_tcp_filter_fp->vdev_id = ts_lphb_tcp_filter->session; + hb_tcp_filter_fp->length = ts_lphb_tcp_filter->length; + hb_tcp_filter_fp->offset = ts_lphb_tcp_filter->offset; + hb_tcp_filter_fp->session = ts_lphb_tcp_filter->session; + memcpy((void *) &hb_tcp_filter_fp->filter, (void *) &ts_lphb_tcp_filter->filter, + WMI_WLAN_HB_MAX_FILTER_SIZE); + + status = wmi_unified_cmd_send(wma_handle->wmi_handle, buf, + len, WMI_HB_SET_TCP_PKT_FILTER_CMDID); + if (status != EOK) { + WMA_LOGE("wmi_unified_cmd_send WMI_HB_SET_TCP_PKT_FILTER returned Error %d", + status); + vos_status = VOS_STATUS_E_FAILURE; + goto error; + } + + return VOS_STATUS_SUCCESS; +error: + return vos_status; +} + +/* function : wma_lphb_conf_udp_params + * Descriptin : handles the udp params command of LPHB configuration requests + * Args : + * Returns : + */ +VOS_STATUS wma_lphb_conf_udp_params(tp_wma_handle wma_handle, + tSirLPHBReq *lphb_conf_req) +{ + VOS_STATUS vos_status = VOS_STATUS_SUCCESS; + int status = 0; + tSirLPHBUdpParamStruct *ts_lphb_udp_param; + wmi_buf_t buf = NULL; + u_int8_t *buf_ptr; + wmi_hb_set_udp_params_cmd_fixed_param *hb_udp_params_fp; + int len = sizeof(wmi_hb_set_udp_params_cmd_fixed_param); + + if (lphb_conf_req == NULL) + { + WMA_LOGE("%s : LPHB configuration is NULL\n", __func__); + return VOS_STATUS_E_FAILURE; + } + + ts_lphb_udp_param = &(lphb_conf_req->params.lphbUdpParamReq); + WMA_LOGI("%s: WMA --> WMI_HB_SET_UDP_PARAMS srv_ip=%d, dev_ip=%d, src_port=%d, " + "dst_port=%d, interval=%d, timeout=%d, session=%d, " + "gateway_mac=%2x:%2x:%2x:%2x:%2x:%2x", + __func__, + ts_lphb_udp_param->srv_ip, ts_lphb_udp_param->dev_ip, + ts_lphb_udp_param->src_port, ts_lphb_udp_param->dst_port, + ts_lphb_udp_param->interval, ts_lphb_udp_param->timeout, ts_lphb_udp_param->session, + ts_lphb_udp_param->gateway_mac[0], + ts_lphb_udp_param->gateway_mac[1], + ts_lphb_udp_param->gateway_mac[2], + ts_lphb_udp_param->gateway_mac[3], + ts_lphb_udp_param->gateway_mac[4], + ts_lphb_udp_param->gateway_mac[5]); + + buf = wmi_buf_alloc(wma_handle->wmi_handle, len); + if (!buf) { + WMA_LOGE("%s : wmi_buf_alloc failed\n", __func__); + return VOS_STATUS_E_NOMEM; + } + + buf_ptr = (u_int8_t *) wmi_buf_data(buf); + hb_udp_params_fp = (wmi_hb_set_udp_params_cmd_fixed_param *) buf_ptr; + WMITLV_SET_HDR(&hb_udp_params_fp->tlv_header, + WMITLV_TAG_STRUC_wmi_hb_set_udp_params_cmd_fixed_param, + WMITLV_GET_STRUCT_TLVLEN( + wmi_hb_set_udp_params_cmd_fixed_param)); + + /* fill in values */ + hb_udp_params_fp->vdev_id = ts_lphb_udp_param->session; + hb_udp_params_fp->srv_ip = ts_lphb_udp_param->srv_ip; + hb_udp_params_fp->dev_ip = ts_lphb_udp_param->dev_ip; + hb_udp_params_fp->src_port = ts_lphb_udp_param->src_port; + hb_udp_params_fp->dst_port = ts_lphb_udp_param->dst_port; + hb_udp_params_fp->interval = ts_lphb_udp_param->interval; + hb_udp_params_fp->timeout = ts_lphb_udp_param->timeout; + hb_udp_params_fp->session = ts_lphb_udp_param->session; + WMI_CHAR_ARRAY_TO_MAC_ADDR(ts_lphb_udp_param->gateway_mac, &hb_udp_params_fp->gateway_mac); + + status = wmi_unified_cmd_send(wma_handle->wmi_handle, buf, + len, WMI_HB_SET_UDP_PARAMS_CMDID); + if (status != EOK) { + WMA_LOGE("wmi_unified_cmd_send WMI_HB_SET_UDP_PARAMS returned Error %d", + status); + vos_status = VOS_STATUS_E_FAILURE; + goto error; + } + + return VOS_STATUS_SUCCESS; +error: + return vos_status; +} + +/* function : wma_lphb_conf_udp_pkt_filter + * Descriptin : handles the udp packet filter command of LPHB configuration requests + * Args : + * Returns : + */ +VOS_STATUS wma_lphb_conf_udp_pkt_filter(tp_wma_handle wma_handle, + tSirLPHBReq *lphb_conf_req) +{ + VOS_STATUS vos_status = VOS_STATUS_SUCCESS; + int status = 0; + tSirLPHBUdpFilterStruct *ts_lphb_udp_filter; + wmi_buf_t buf = NULL; + u_int8_t *buf_ptr; + wmi_hb_set_udp_pkt_filter_cmd_fixed_param *hb_udp_filter_fp; + int len = sizeof(wmi_hb_set_udp_pkt_filter_cmd_fixed_param); + + if (lphb_conf_req == NULL) + { + WMA_LOGE("%s : LPHB configuration is NULL\n", __func__); + return VOS_STATUS_E_FAILURE; + } + + ts_lphb_udp_filter = &(lphb_conf_req->params.lphbUdpFilterReq); + WMA_LOGI("%s: WMA --> WMI_HB_SET_UDP_PKT_FILTER length=%d, offset=%d, session=%d, " + "filter=%2x:%2x:%2x:%2x:%2x:%2x ...", + __func__, + ts_lphb_udp_filter->length, + ts_lphb_udp_filter->offset, + ts_lphb_udp_filter->session, + ts_lphb_udp_filter->filter[0], + ts_lphb_udp_filter->filter[1], + ts_lphb_udp_filter->filter[2], + ts_lphb_udp_filter->filter[3], + ts_lphb_udp_filter->filter[4], + ts_lphb_udp_filter->filter[5]); + + buf = wmi_buf_alloc(wma_handle->wmi_handle, len); + if (!buf) { + WMA_LOGE("%s : wmi_buf_alloc failed\n", __func__); + return VOS_STATUS_E_NOMEM; + } + + buf_ptr = (u_int8_t *) wmi_buf_data(buf); + hb_udp_filter_fp = (wmi_hb_set_udp_pkt_filter_cmd_fixed_param *) buf_ptr; + WMITLV_SET_HDR(&hb_udp_filter_fp->tlv_header, + WMITLV_TAG_STRUC_wmi_hb_set_udp_pkt_filter_cmd_fixed_param, + WMITLV_GET_STRUCT_TLVLEN( + wmi_hb_set_udp_pkt_filter_cmd_fixed_param)); + + /* fill in values */ + hb_udp_filter_fp->vdev_id = ts_lphb_udp_filter->session; + hb_udp_filter_fp->length = ts_lphb_udp_filter->length; + hb_udp_filter_fp->offset = ts_lphb_udp_filter->offset; + hb_udp_filter_fp->session = ts_lphb_udp_filter->session; + memcpy((void *) &hb_udp_filter_fp->filter, (void *) &ts_lphb_udp_filter->filter, + WMI_WLAN_HB_MAX_FILTER_SIZE); + + status = wmi_unified_cmd_send(wma_handle->wmi_handle, buf, + len, WMI_HB_SET_UDP_PKT_FILTER_CMDID); + if (status != EOK) { + WMA_LOGE("wmi_unified_cmd_send WMI_HB_SET_UDP_PKT_FILTER returned Error %d", + status); + vos_status = VOS_STATUS_E_FAILURE; + goto error; + } + + return VOS_STATUS_SUCCESS; +error: + return vos_status; +} + +/* function : wma_process_lphb_conf_req + * Descriptin : handles LPHB configuration requests + * Args : + * Returns : + */ +VOS_STATUS wma_process_lphb_conf_req(tp_wma_handle wma_handle, + tSirLPHBReq *lphb_conf_req) +{ + VOS_STATUS vos_status = VOS_STATUS_SUCCESS; + + if (lphb_conf_req == NULL) + { + WMA_LOGE("%s : LPHB configuration is NULL\n", __func__); + return VOS_STATUS_E_FAILURE; + } + + WMA_LOGI("%s : LPHB configuration cmd id is %d\n", __func__); + switch (lphb_conf_req->cmd) { + case LPHB_SET_EN_PARAMS_INDID: + vos_status = wma_lphb_conf_hbenable(wma_handle, + lphb_conf_req); + break; + + case LPHB_SET_TCP_PARAMS_INDID: + vos_status = wma_lphb_conf_tcp_params(wma_handle, + lphb_conf_req); + break; + + case LPHB_SET_TCP_PKT_FILTER_INDID: + vos_status = wma_lphb_conf_tcp_pkt_filter(wma_handle, + lphb_conf_req); + break; + + case LPHB_SET_UDP_PARAMS_INDID: + vos_status = wma_lphb_conf_udp_params(wma_handle, + lphb_conf_req); + break; + + case LPHB_SET_UDP_PKT_FILTER_INDID: + vos_status = wma_lphb_conf_udp_pkt_filter(wma_handle, + lphb_conf_req); + break; + + case LPHB_SET_NETWORK_INFO_INDID: + default: + break; + } + + vos_mem_free(lphb_conf_req); + return vos_status; +} +#endif + static WLAN_PHY_MODE wma_chan_to_mode(u8 chan, ePhyChanBondState chan_offset, u8 vht_capable) { @@ -4073,12 +4682,16 @@ static int32_t wmi_unified_send_peer_assoc(tp_wma_handle wma, WMITLV_GET_STRUCT_TLVLEN( wmi_peer_assoc_complete_cmd_fixed_param)); - /* in ap/ibss mode, use mac address of the peer in the other end as the - new peer address; in sta mode, use bss id to be the new peer address - */ + /* in ap/ibss mode and for tdls peer, use mac address of the peer in + * the other end as the new peer address; in sta mode, use bss id to + * be the new peer address + */ if ((wma_is_vdev_in_ap_mode(wma, params->smesessionId)) #ifdef QCA_IBSS_SUPPORT || (wma_is_vdev_in_ibss_mode(wma, params->smesessionId)) +#endif +#ifdef FEATURE_WLAN_TDLS + || (STA_ENTRY_TDLS_PEER == params->staType) #endif ) WMI_CHAR_ARRAY_TO_MAC_ADDR(params->staMac, &cmd->peer_macaddr); @@ -4991,7 +5604,8 @@ static void wma_add_bss_ap_mode(tp_wma_handle wma, tpAddBssParams add_bss) goto send_fail_resp; } - status = wma_create_peer(wma, pdev, vdev, add_bss->bssId, vdev_id); + status = wma_create_peer(wma, pdev, vdev, add_bss->bssId, + WMI_PEER_TYPE_DEFAULT, vdev_id); if (status != VOS_STATUS_SUCCESS) { WMA_LOGE("%s: Failed to create peer\n", __func__); goto send_fail_resp; @@ -5117,7 +5731,8 @@ static void wma_add_bss_ibss_mode(tp_wma_handle wma, tpAddBssParams add_bss) WMA_LOGE("%s: new vdev created for IBSS\n", __func__); /* create self peer */ - status = wma_create_peer(wma, pdev, vdev, add_bss->bssId, vdev_id); + status = wma_create_peer(wma, pdev, vdev, add_bss->bssId, + WMI_PEER_TYPE_DEFAULT, vdev_id); if (status != VOS_STATUS_SUCCESS) { WMA_LOGE("%s: Failed to create peer\n", __func__); goto send_fail_resp; @@ -5207,7 +5822,17 @@ static void wma_add_bss_sta_mode(tp_wma_handle wma, tpAddBssParams add_bss) vdev_id = add_bss->staContext.smesessionId; iface = &wma->interfaces[vdev_id]; if (add_bss->operMode) { - // Save parameters later needed by WDA_ADD_STA_REQ + // Save parameters later needed by WDA_ADD_STA_REQ + if (iface->addBssStaContext) { + adf_os_mem_free(iface->addBssStaContext); + } + iface->addBssStaContext = adf_os_mem_alloc(NULL, sizeof(tAddStaParams)); + if (!iface->addBssStaContext) { + WMA_LOGE("%s Failed to allocat memory", __func__); + goto send_fail_resp; + } + adf_os_mem_copy(iface->addBssStaContext, &add_bss->staContext, + sizeof(tAddStaParams)); iface->beaconInterval = add_bss->beaconInterval; iface->dtimPeriod = add_bss->dtimPeriod; iface->llbCoexist = add_bss->llbCoexist; @@ -5512,7 +6137,7 @@ static void wma_add_sta_req_ap_mode(tp_wma_handle wma, tpAddStaParams add_sta) } status = wma_create_peer(wma, pdev, vdev, add_sta->staMac, - add_sta->smesessionId); + WMI_PEER_TYPE_DEFAULT, add_sta->smesessionId); if (status != VOS_STATUS_SUCCESS) { WMA_LOGE("%s: Failed to create peer for %pM\n", __func__, add_sta->staMac); @@ -5634,21 +6259,127 @@ static int wmi_unified_csa_offload_enable(tp_wma_handle wma, return 0; } -static void wma_add_sta_req_sta_mode(tp_wma_handle wma, tpAddStaParams params) +#ifdef FEATURE_WLAN_TDLS +static void wma_add_tdls_sta(tp_wma_handle wma, tpAddStaParams add_sta) { ol_txrx_pdev_handle pdev; - VOS_STATUS status = VOS_STATUS_SUCCESS; + ol_txrx_vdev_handle vdev; ol_txrx_peer_handle peer; - struct wma_txrx_node *iface; - tPowerdBm maxTxPower; + u_int8_t peer_id; + VOS_STATUS status; + int32_t ret; + tTdlsPeerStateParams *peerStateParams; + + WMA_LOGD("%s: staType: %d, staIdx: %d, updateSta: %d, " + "bssId: %pM, staMac: %pM", + __func__, add_sta->staType, add_sta->staIdx, + add_sta->updateSta, add_sta->bssId, add_sta->staMac); pdev = vos_get_context(VOS_MODULE_ID_TXRX, wma->vos_context); - iface = &wma->interfaces[params->smesessionId]; - if (params->staType != STA_ENTRY_SELF) { - WMA_LOGP("%s: unsupported station type %d\n", - __func__, params->staType); - goto out; - } + + vdev = wma_find_vdev_by_id(wma, add_sta->smesessionId); + if (!vdev) { + WMA_LOGE("%s: Failed to find vdev\n", __func__); + add_sta->status = VOS_STATUS_E_FAILURE; + goto send_rsp; + } + + if (0 == add_sta->updateSta) { + /* its a add sta request **/ + WMA_LOGD("%s: addSta, calling wma_create_peer for %pM, vdev_id %hu", + __func__, add_sta->staMac, add_sta->smesessionId); + + status = wma_create_peer(wma, pdev, vdev, add_sta->staMac, + WMI_PEER_TYPE_TDLS, add_sta->smesessionId); + if (status != VOS_STATUS_SUCCESS) { + WMA_LOGE("%s: Failed to create peer for %pM\n", + __func__, add_sta->staMac); + add_sta->status = status; + goto send_rsp; + } + + peer = ol_txrx_find_peer_by_addr(pdev, add_sta->staMac, &peer_id); + if (!peer) { + WMA_LOGE("%s: addSta, failed to find peer handle for mac %pM", + __func__, add_sta->staMac); + add_sta->status = VOS_STATUS_E_FAILURE; + wma_remove_peer(wma, add_sta->staMac, add_sta->smesessionId, peer); + goto send_rsp; + } + + add_sta->staIdx = ol_txrx_local_peer_id(peer); + WMA_LOGD("%s: addSta, after calling ol_txrx_local_peer_id, " + "staIdx: %d, staMac: %pM", + __func__, add_sta->staIdx, add_sta->staMac); + + peerStateParams = vos_mem_malloc(sizeof(tTdlsPeerStateParams)); + if (!peerStateParams) { + WMA_LOGE("%s: Failed to allocate memory for peerStateParams for %pM", + __func__, add_sta->staMac); + add_sta->status = VOS_STATUS_E_FAILURE; + goto send_rsp; + } + + peerStateParams->peerState = WMI_TDLS_PEER_STATE_PEERING; + peerStateParams->vdevId = vdev->vdev_id; + vos_mem_copy(&peerStateParams->peerMacAddr, + &add_sta->staMac, + sizeof(tSirMacAddr)); + wma_update_tdls_peer_state(wma, peerStateParams); + } else { + /* its a change sta request **/ + peer = ol_txrx_find_peer_by_addr(pdev, add_sta->staMac, &peer_id); + if (!peer) { + WMA_LOGE("%s: changeSta,failed to find peer handle for mac %pM", + __func__, add_sta->staMac); + add_sta->status = VOS_STATUS_E_FAILURE; + wma_remove_peer(wma, add_sta->staMac, add_sta->smesessionId, peer); + goto send_rsp; + } + + WMA_LOGD("%s: changeSta, calling wmi_unified_send_peer_assoc", + __func__); + + ret = wmi_unified_send_peer_assoc(wma, add_sta->nwType, add_sta); + if (ret) { + add_sta->status = VOS_STATUS_E_FAILURE; + wma_remove_peer(wma, add_sta->staMac, add_sta->smesessionId, peer); + goto send_rsp; + } + } + +send_rsp: + WMA_LOGD("%s: Sending add sta rsp to umac (mac:%pM, status:%d), " + "staType: %d, staIdx: %d, updateSta: %d", + __func__, add_sta->staMac, add_sta->status, + add_sta->staType, add_sta->staIdx, add_sta->updateSta); + wma_send_msg(wma, WDA_ADD_STA_RSP, (void *)add_sta, 0); +} +#endif + +static void wma_add_sta_req_sta_mode(tp_wma_handle wma, tpAddStaParams params) +{ + ol_txrx_pdev_handle pdev; + VOS_STATUS status = VOS_STATUS_SUCCESS; + ol_txrx_peer_handle peer; + struct wma_txrx_node *iface; + tPowerdBm maxTxPower; + +#ifdef FEATURE_WLAN_TDLS + if (STA_ENTRY_TDLS_PEER == params->staType) + { + wma_add_tdls_sta(wma, params); + return; + } +#endif + + pdev = vos_get_context(VOS_MODULE_ID_TXRX, wma->vos_context); + iface = &wma->interfaces[params->smesessionId]; + if (params->staType != STA_ENTRY_SELF) { + WMA_LOGP("%s: unsupported station type %d\n", + __func__, params->staType); + goto out; + } peer = ol_txrx_find_peer_by_addr(pdev, params->bssId, ¶ms->staIdx); if (peer != NULL && peer->state == ol_txrx_peer_state_disc) { /* @@ -5678,8 +6409,8 @@ static void wma_add_sta_req_sta_mode(tp_wma_handle wma, tpAddStaParams params) params->smesessionId); } wmi_unified_send_txbf(wma, params); - wmi_unified_send_peer_assoc(wma, params->nwType, - params); + wmi_unified_send_peer_assoc(wma, params->nwType, + (tAddStaParams *)iface->addBssStaContext); } #if defined WLAN_FEATURE_VOWIFI maxTxPower = params->maxTxPower; @@ -5689,7 +6420,7 @@ static void wma_add_sta_req_sta_mode(tp_wma_handle wma, tpAddStaParams params) wma_vdev_set_bss_params(wma, params->smesessionId, iface->beaconInterval, iface->dtimPeriod, iface->shortSlotTimeSupported, iface->llbCoexist, maxTxPower); - wma_roam_scan_offload_init_connect(wma, params->smesessionId); + wma_roam_scan_offload_init_connect(wma); params->csaOffloadEnable = 0; if (WMI_SERVICE_IS_ENABLED(wma->wmi_service_bitmap, @@ -5959,6 +6690,18 @@ static void wma_set_bsskey(tp_wma_handle wma_handle, tpSetBssKeyParams key_info) goto out; } + /* + ** For IBSS, WMI expects the BSS key to be set per peer key + ** So cache the BSS key in the wma_handle and re-use it when the STA key is been setup for a peer + */ + if (wlan_op_mode_ibss == txrx_vdev->opmode) { + WMA_LOGD("Caching IBSS Key"); + vos_mem_copy(&wma_handle->ibsskey_info, key_info, sizeof(tSetBssKeyParams)); + key_info->status = eHAL_STATUS_SUCCESS; + if (wma_handle->ibss_started > 0) + goto out; + } + adf_os_mem_set(&key_params, 0, sizeof(key_params)); key_params.vdev_id = key_info->smesessionId; key_params.key_type = key_info->encType; @@ -6016,6 +6759,7 @@ static void wma_set_bsskey(tp_wma_handle wma_handle, tpSetBssKeyParams key_info) } } + wma_handle->ibss_started++; /* TODO: Should we wait till we get HTT_T2H_MSG_TYPE_SEC_IND? */ key_info->status = eHAL_STATUS_SUCCESS; @@ -6023,6 +6767,73 @@ out: wma_send_msg(wma_handle, WDA_SET_BSSKEY_RSP, (void *)key_info, 0); } +static void wma_set_ibsskey_helper(tp_wma_handle wma_handle, tpSetBssKeyParams key_info, u_int8_t* peerMacAddr) +{ + struct wma_set_key_params key_params; + wmi_buf_t buf; + int32_t status; + u_int32_t len = 0, i; + v_U32_t def_key_idx = 0; + ol_txrx_vdev_handle txrx_vdev; + + WMA_LOGD("BSS key setup for peer"); + ASSERT( NULL != peerMacAddr); + txrx_vdev = wma_find_vdev_by_id(wma_handle, key_info->smesessionId); + if (!txrx_vdev) { + WMA_LOGE("%s:Invalid vdev handle", __func__); + key_info->status = eHAL_STATUS_FAILURE; + return; + } + + adf_os_mem_set(&key_params, 0, sizeof(key_params)); + key_params.vdev_id = key_info->smesessionId; + key_params.key_type = key_info->encType; + key_params.singl_tid_rc = key_info->singleTidRc; + key_params.unicast = FALSE; + ASSERT(wlan_op_mode_ibss == txrx_vdev->opmode); + + vos_mem_copy(key_params.peer_mac, peerMacAddr, ETH_ALEN); + + if (key_info->numKeys == 0 && + (key_info->encType == eSIR_ED_WEP40 || + key_info->encType == eSIR_ED_WEP104)) { + wma_read_cfg_wepkey(wma_handle, key_info->key, + &def_key_idx, &key_info->numKeys); + } + + for (i = 0; i < key_info->numKeys; i++) { + if (key_params.key_type != eSIR_ED_NONE && + !key_info->key[i].keyLength) + continue; + key_params.key_idx = key_info->key[i].keyId; + key_params.key_len = key_info->key[i].keyLength; + if (key_info->encType == eSIR_ED_TKIP) { + vos_mem_copy(key_params.key_data, + key_info->key[i].key, 16); + vos_mem_copy(&key_params.key_data[16], + &key_info->key[i].key[24], 8); + vos_mem_copy(&key_params.key_data[24], + &key_info->key[i].key[16], 8); + } else + vos_mem_copy((v_VOID_t *) key_params.key_data, + (const v_VOID_t *) key_info->key[i].key, + key_info->key[i].keyLength); + + buf = wma_setup_install_key_cmd(wma_handle, &key_params, &len); + if (!buf) { + WMA_LOGE("%s:Failed to setup install key buf", __func__); + return; + } + + status = wmi_unified_cmd_send(wma_handle->wmi_handle, buf, len, + WMI_VDEV_INSTALL_KEY_CMDID); + if (status) { + adf_nbuf_free(buf); + WMA_LOGE("%s:Failed to send install key command", __func__); + } + } +} + static void wma_set_stakey(tp_wma_handle wma_handle, tpSetStaKeyParams key_info) { wmi_buf_t buf; @@ -6121,6 +6932,13 @@ static void wma_set_stakey(tp_wma_handle wma_handle, tpSetStaKeyParams key_info) } } + /* In IBSS mode, set the BSS KEY for this peer + ** BSS key is supposed to be cache into wma_handle + */ + if (wlan_op_mode_ibss == txrx_vdev->opmode){ + wma_set_ibsskey_helper(wma_handle, &wma_handle->ibsskey_info, key_info->peerMacAddr); + } + /* TODO: Should we wait till we get HTT_T2H_MSG_TYPE_SEC_IND? */ key_info->status = eHAL_STATUS_SUCCESS; out: @@ -6177,12 +6995,79 @@ send_del_rsp: wma_send_msg(wma, WDA_DELETE_STA_RSP, (void *)del_sta, 0); } +#ifdef FEATURE_WLAN_TDLS +static void wma_del_tdls_sta(tp_wma_handle wma, + tpDeleteStaParams del_sta) +{ + ol_txrx_pdev_handle pdev; + ol_txrx_vdev_handle vdev; + struct ol_txrx_peer_t *peer; + tTdlsPeerStateParams *peerStateParams; + + pdev = vos_get_context(VOS_MODULE_ID_TXRX, wma->vos_context); + + vdev = wma_find_vdev_by_id(wma, del_sta->smesessionId); + if (!vdev) { + WMA_LOGE("%s: Failed to find vdev", __func__); + del_sta->status = VOS_STATUS_E_FAILURE; + goto send_del_rsp; + } + + peer = ol_txrx_peer_find_by_local_id(pdev, del_sta->staIdx); + if (!peer) { + WMA_LOGE("%s: Failed to get peer handle using peer id %d", + __func__, del_sta->staIdx); + del_sta->status = VOS_STATUS_E_FAILURE; + goto send_del_rsp; + } + + peerStateParams = vos_mem_malloc(sizeof(tTdlsPeerStateParams)); + if (!peerStateParams) { + WMA_LOGE("%s: Failed to allocate memory for peerStateParams for: %pM", + __func__, del_sta->staMac); + del_sta->status = VOS_STATUS_E_FAILURE; + goto send_del_rsp; + } + + peerStateParams->peerState = WDA_TDLS_PEER_STATE_TEARDOWN; + peerStateParams->vdevId = vdev->vdev_id; + vos_mem_copy(&peerStateParams->peerMacAddr, + &del_sta->staMac, + sizeof(tSirMacAddr)); + + WMA_LOGD("%s: sending tdls_peer_state for peer mac: %pM, " + " peerState: %d", + __func__, peerStateParams->peerMacAddr, + peerStateParams->peerState); + + wma_update_tdls_peer_state(wma, peerStateParams); + + WMA_LOGD("%s: wma_remove_peer for peer: %pM, vdevId: %d", + __func__, peer->mac_addr.raw, del_sta->smesessionId); + + wma_remove_peer(wma, peer->mac_addr.raw, del_sta->smesessionId, peer); + del_sta->status = VOS_STATUS_SUCCESS; + +send_del_rsp: + WMA_LOGD("%s: Sending del rsp to umac (status: %d)", + __func__, del_sta->status); + wma_send_msg(wma, WDA_DELETE_STA_RSP, (void *)del_sta, 0); +} +#endif + static void wma_delete_sta_req_sta_mode(tp_wma_handle wma, tpDeleteStaParams params) { VOS_STATUS status = VOS_STATUS_SUCCESS; - wma_roam_scan_offload_end_connect(wma, params->smesessionId); +#ifdef FEATURE_WLAN_TDLS + if (STA_ENTRY_TDLS_PEER == params->staType) + { + wma_del_tdls_sta(wma, params); + return; + } +#endif + wma_roam_scan_offload_end_connect(wma); if (wmi_unified_vdev_down_send(wma->wmi_handle, params->smesessionId) < 0) { WMA_LOGP("%s: failed to bring down vdev %d\n", __func__, params->smesessionId); @@ -6251,6 +7136,7 @@ static void wma_delete_bss(tp_wma_handle wma, tpDeleteBssParams params) struct wma_target_req *msg; VOS_STATUS status = VOS_STATUS_SUCCESS; u_int8_t peer_id; + ol_txrx_vdev_handle txrx_vdev; pdev = vos_get_context(VOS_MODULE_ID_TXRX, wma->vos_context); @@ -6264,6 +7150,18 @@ static void wma_delete_bss(tp_wma_handle wma, tpDeleteBssParams params) } vos_mem_zero(wma->interfaces[params->smesessionId].bssid, ETH_ALEN); + + txrx_vdev = wma_find_vdev_by_id(wma, params->smesessionId); + if (!txrx_vdev) { + WMA_LOGE("%s:Invalid vdev handle", __func__); + status = VOS_STATUS_E_FAILURE; + goto out; + } + + if (wlan_op_mode_ibss == txrx_vdev->opmode) { + wma->ibss_started = 0; + } + msg = wma_fill_vdev_req(wma, params->smesessionId, WDA_DELETE_BSS_REQ, WMA_TARGET_REQ_TYPE_VDEV_STOP, params); if (!msg) { @@ -6320,7 +7218,8 @@ static void wma_set_linkstate(tp_wma_handle wma, tpLinkStateParams params) } if (params->state == eSIR_LINK_PREASSOC_STATE) { - wma_create_peer(wma, pdev, vdev, params->bssid, vdev_id); + wma_create_peer(wma, pdev, vdev, params->bssid, + WMI_PEER_TYPE_DEFAULT, vdev_id); } else { if (wmi_unified_vdev_stop_send(wma->wmi_handle, vdev_id)) { @@ -6577,18 +7476,35 @@ VOS_STATUS wma_store_bcn_tmpl(tp_wma_handle wma, u_int8_t vdev_id, memcpy(adf_nbuf_data(bcn->buf), bcn_info->beacon + 4 /* Exclude beacon length field */, len); - bcn->tim_ie_offset = bcn_info->timIeOffset - 4; - bcn->p2p_ie_offset = bcn_info->p2pIeOffset - 4; + if (bcn_info->timIeOffset > 3) + { + bcn->tim_ie_offset = bcn_info->timIeOffset - 4; + } + else + { + bcn->tim_ie_offset = bcn_info->timIeOffset; + } + if (bcn_info->p2pIeOffset > 3) + { + bcn->p2p_ie_offset = bcn_info->p2pIeOffset - 4; + } + else + { + bcn->p2p_ie_offset = bcn_info->p2pIeOffset; + } bcn_payload = adf_nbuf_data(bcn->buf); - tim_ie = (struct beacon_tim_ie *)(&bcn_payload[bcn->tim_ie_offset]); - /* - * Intial Value of bcn->dtim_count will be 0. - * But if the beacon gets updated then current dtim - * count will be restored - */ - tim_ie->dtim_count = bcn->dtim_count; - tim_ie->tim_bitctl = 0; + if (bcn->tim_ie_offset) + { + tim_ie = (struct beacon_tim_ie *)(&bcn_payload[bcn->tim_ie_offset]); + /* + * Intial Value of bcn->dtim_count will be 0. + * But if the beacon gets updated then current dtim + * count will be restored + */ + tim_ie->dtim_count = bcn->dtim_count; + tim_ie->tim_bitctl = 0; + } adf_nbuf_put_tail(bcn->buf, len); bcn->len = len; @@ -6922,6 +7838,15 @@ static int32_t wma_set_force_sleep(tp_wma_handle wma, u_int32_t vdev_id, u_int8_ WMA_LOGE("Set Force Sleep vdevId %d val %d", vdev_id, enable); + /* Set Tx/Rx Data InActivity Timeout */ + if (wlan_cfgGetInt(mac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT, + &cfg_data_val ) != eSIR_SUCCESS) { + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "Failed to get WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT"); + cfg_data_val = POWERSAVE_DEFAULT_INACTIVITY_TIME; + } + inactivity_time = (u_int32_t)cfg_data_val; + if (enable) { /* override normal configuration and force station asleep */ rx_wake_policy = WMI_STA_PS_RX_WAKE_POLICY_POLL_UAPSD; @@ -6937,7 +7862,6 @@ static int32_t wma_set_force_sleep(tp_wma_handle wma, u_int32_t vdev_id, u_int8_ else pspoll_count = WMA_DEFAULT_MAX_PSPOLL_BEFORE_WAKE; - inactivity_time = 0; psmode = WMI_STA_PS_MODE_ENABLED; } else { /* Ps Poll Wake Policy */ @@ -6957,15 +7881,6 @@ static int32_t wma_set_force_sleep(tp_wma_handle wma, u_int32_t vdev_id, u_int8_ tx_wake_threshold = WMI_STA_PS_TX_WAKE_THRESHOLD_ALWAYS; } psmode = WMI_STA_PS_MODE_ENABLED; - - /* Set Tx/Rx Data InActivity Timeout */ - if (wlan_cfgGetInt(mac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT, - &cfg_data_val ) != eSIR_SUCCESS) { - VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, - "Failed to get WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT"); - cfg_data_val = POWERSAVE_DEFAULT_INACTIVITY_TIME; - } - inactivity_time = (u_int32_t)cfg_data_val; } /* @@ -7370,7 +8285,8 @@ wmi_unified_set_sta_uapsd_auto_trig_cmd( { wmi_sta_uapsd_auto_trig_cmd_fixed_param *cmd; int32_t ret; - u_int32_t param_len = num_ac * sizeof(wmi_sta_uapsd_auto_trig_param); + u_int32_t param_len = (num_ac - 1) * + sizeof(wmi_sta_uapsd_auto_trig_param); u_int32_t cmd_len = sizeof(*cmd) + param_len + WMI_TLV_HDR_SIZE; u_int32_t i; wmi_buf_t buf; @@ -7793,8 +8709,11 @@ static const u8 *wma_wow_wake_reason_str(A_INT32 wake_reason) return "RECV_MAGIC_PATTERN"; case WOW_REASON_P2P_DISC: return "P2P_DISC"; +#ifdef FEATURE_WLAN_LPHB + case WOW_REASON_WLAN_HB: + return "WLAN_HB"; +#endif /* FEATURE_WLAN_LPHB */ } - return "unknown"; } @@ -7812,6 +8731,50 @@ static void wma_beacon_miss_handler(tp_wma_handle wma, u_int32_t vdev_id) (void *)beacon_miss_ind, 0); } +#ifdef FEATURE_WLAN_LPHB +static int wma_lphb_handler(tp_wma_handle wma, u_int8_t *event) +{ + wmi_hb_ind_event_fixed_param *hb_fp; + tSirLPHBInd *slphb_indication; + VOS_STATUS vos_status; + vos_msg_t sme_msg = {0} ; + + hb_fp = (wmi_hb_ind_event_fixed_param *)event; + if (!hb_fp) { + WMA_LOGE("Invalid wmi_hb_ind_event_fixed_param buffer"); + return -EINVAL; + } + + WMA_LOGD("lphb indication received with vdev_id=%d, session=%d, reason=%d", + hb_fp->vdev_id, hb_fp->session, hb_fp->reason); + + slphb_indication = (tSirLPHBInd *) vos_mem_malloc(sizeof(tSirLPHBInd)); + + if (!slphb_indication) { + WMA_LOGE("Invalid LPHB indication buffer"); + return -EINVAL; + } + + slphb_indication->sessionIdx = hb_fp->session; + slphb_indication->protocolType = hb_fp->reason; + slphb_indication->eventReason= hb_fp->reason; + + sme_msg.type = eWNI_SME_LPHB_IND; + sme_msg.bodyptr = slphb_indication; + sme_msg.bodyval = 0; + + vos_status = vos_mq_post_message(VOS_MODULE_ID_SME, &sme_msg); + if ( !VOS_IS_STATUS_SUCCESS(vos_status) ) + { + WMA_LOGE("Fail to post eWNI_SME_LPHB_IND msg to SME"); + vos_mem_free(slphb_indication); + return -EINVAL; + } + + return 0; +} +#endif /* FEATURE_WLAN_LPHB */ + /* * Handler to catch wow wakeup host event. This event will have * reason why the firmware has woken the host. @@ -7855,6 +8818,10 @@ static int wma_wow_wakeup_host_event(void *handle, u_int8_t *event, sizeof(WOW_EVENT_INFO_fixed_param) + WOW_CSA_EVENT_OFFSET); wma_csa_offload_handler(handle, (u_int8_t *)¶m, sizeof(param)); } +#ifdef FEATURE_WLAN_LPHB + if(wake_info->wake_reason == WOW_REASON_WLAN_HB) + wma_lphb_handler(wma, (u_int8_t *)param_buf->hb_indevt); +#endif /* FEATURE_WLAN_LPHB */ return 0; } @@ -8057,8 +9024,9 @@ static VOS_STATUS wma_del_wow_pattern_in_fw(tp_wma_handle wma, } /* Enables WOW in firmware. */ -static VOS_STATUS wma_enable_wow_in_fw(tp_wma_handle wma) +int wma_enable_wow_in_fw(WMA_HANDLE handle) { + tp_wma_handle wma = handle; wmi_wow_enable_cmd_fixed_param *cmd; wmi_buf_t buf; int32_t len; @@ -8097,11 +9065,13 @@ static VOS_STATUS wma_enable_wow_in_fw(tp_wma_handle wma) WMA_LOGD("WOW enabled successfully in fw"); + wma->wow.wow_enable_cmd_sent = TRUE; return VOS_STATUS_SUCCESS; } /* Sends user configured WOW patterns to the firmware. */ -static VOS_STATUS wma_wow_usr(tp_wma_handle wma, u_int8_t vdev_id) +static VOS_STATUS wma_wow_usr(tp_wma_handle wma, u_int8_t vdev_id, + u_int8_t *enable_ptrn_match) { struct wma_wow_ptrn_cache *cache; VOS_STATUS ret = VOS_STATUS_SUCCESS; @@ -8152,11 +9122,14 @@ static VOS_STATUS wma_wow_usr(tp_wma_handle wma, u_int8_t vdev_id) break; } } + + *enable_ptrn_match = 1 << vdev_id; return ret; } /* Configures default WOW pattern for the given vdev_id which is in AP mode. */ -static VOS_STATUS wma_wow_ap(tp_wma_handle wma, u_int8_t vdev_id) +static VOS_STATUS wma_wow_ap(tp_wma_handle wma, u_int8_t vdev_id, + u_int8_t *enable_ptrn_match) { u_int8_t unicast_ptrn[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -8185,7 +9158,7 @@ static VOS_STATUS wma_wow_ap(tp_wma_handle wma, u_int8_t vdev_id) 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff /* port 67 */ }; - u_int8_t dhcp_offset = 0; + u_int8_t dhcp_offset = 0, free_slot; VOS_STATUS ret = VOS_STATUS_SUCCESS; if (!wma->interfaces[vdev_id].vdev_up || @@ -8194,16 +9167,20 @@ static VOS_STATUS wma_wow_ap(tp_wma_handle wma, u_int8_t vdev_id) return ret; } - WMA_LOGD("Configuring default AP mode wow pattern for vdev %d", - vdev_id); + free_slot = wma->wow.total_free_ptrn_id - + wma->wow.used_free_ptrn_id + 1; - if ((wma->wow.total_free_ptrn_id - wma->wow.used_free_ptrn_id) - < WMA_AP_WOW_DEFAULT_PTRN_MAX) { - WMA_LOGE("Empty slots are not enough, avaiable only %d", - wma->wow.total_free_ptrn_id - wma->wow.used_free_ptrn_id); - return VOS_STATUS_E_FAILURE; + if (free_slot < WMA_AP_WOW_DEFAULT_PTRN_MAX) { + WMA_LOGD("Free slots are not enough, avail:%d, need: %d", + free_slot, WMA_AP_WOW_DEFAULT_PTRN_MAX); + WMA_LOGD("Ignoring default AP mode wow pattern for vdev : %d", + vdev_id); + return ret; } + WMA_LOGD("Configuring default AP mode wow pattern for vdev %d", + vdev_id); + /* Setup unicast IP, EAPOL-like and ARP pkt pattern */ ret = wma_send_wow_patterns_to_fw(wma, vdev_id, wma->wow.free_ptrn_id[wma->wow.used_free_ptrn_id++], @@ -8247,28 +9224,38 @@ static VOS_STATUS wma_wow_ap(tp_wma_handle wma, u_int8_t vdev_id) return ret; } + *enable_ptrn_match = 1 << vdev_id; return ret; } /* Configures default WOW pattern for the given vdev_id which is in STA mode. */ -static VOS_STATUS wma_wow_sta(tp_wma_handle wma, u_int8_t vdev_id) +static VOS_STATUS wma_wow_sta(tp_wma_handle wma, u_int8_t vdev_id, + u_int8_t *enable_ptrn_match) { u_int8_t discvr_ptrn[] = { 0xe0, 0x00, 0x00, 0xf8 }; u_int8_t discvr_mask[] = { 0xf0, 0x00, 0x00, 0xf8 }; u_int8_t discvr_offset = 38; - u_int8_t mac_mask[ETH_ALEN]; - VOS_STATUS ret; + u_int8_t mac_mask[ETH_ALEN], free_slot; + VOS_STATUS ret = VOS_STATUS_SUCCESS; + u_int8_t arp_ptrn[] = { 0x08, 0x06 }; + u_int8_t arp_mask[] = { 0xff, 0xff }; + u_int8_t arp_offset = 12; + u_int8_t ns_ptrn[] = {0x86, 0xDD}; - WMA_LOGD("Configuring default STA mode wow pattern for vdev %d", - vdev_id); + free_slot = wma->wow.total_free_ptrn_id - + wma->wow.used_free_ptrn_id + 1; - if ((wma->wow.total_free_ptrn_id - wma->wow.used_free_ptrn_id) - < WMA_STA_WOW_DEFAULT_PTRN_MAX) { - WMA_LOGE("Empty slots are not enough, avaiable only %d", - wma->wow.total_free_ptrn_id - wma->wow.used_free_ptrn_id); - return VOS_STATUS_E_FAILURE; + if (free_slot < WMA_STA_WOW_DEFAULT_PTRN_MAX) { + WMA_LOGD("Free slots are not enough, avail:%d, need: %d", + free_slot, WMA_STA_WOW_DEFAULT_PTRN_MAX); + WMA_LOGD("Ignoring default STA mode wow pattern for vdev : %d", + vdev_id); + return ret; } + WMA_LOGD("Configuring default STA mode wow pattern for vdev %d", + vdev_id); + /* Setup unicast pkt pattern */ vos_mem_set(&mac_mask, ETH_ALEN, 0xFF); ret = wma_send_wow_patterns_to_fw(wma, vdev_id, @@ -8293,6 +9280,36 @@ static VOS_STATUS wma_wow_sta(tp_wma_handle wma, u_int8_t vdev_id) return ret; } + /* when arp offload or ns offloaded is disabled + * from ini file, configure broad cast arp pattern + * to fw, so that host can wake up + */ + if (!(wma->ol_ini_info & 0x1)) { + /* Setup all ARP pkt pattern */ + ret = wma_send_wow_patterns_to_fw(wma, vdev_id, + wma->wow.free_ptrn_id[wma->wow.used_free_ptrn_id++], + arp_ptrn, sizeof(arp_ptrn), arp_offset, + arp_mask, sizeof(arp_mask)); + if (ret != VOS_STATUS_SUCCESS) { + WMA_LOGE("Failed to add WOW ARP pattern"); + return ret; + } + } + /* for NS or NDP offload packets */ + if (!(wma->ol_ini_info & 0x2)) { + /* Setup all NS pkt pattern */ + ret = wma_send_wow_patterns_to_fw(wma, vdev_id, + wma->wow.free_ptrn_id[wma->wow.used_free_ptrn_id++], + ns_ptrn, sizeof(arp_ptrn), arp_offset, + arp_mask, sizeof(arp_mask)); + if (ret != VOS_STATUS_SUCCESS) { + WMA_LOGE("Failed to add WOW NS pattern"); + return ret; + } + + } + + *enable_ptrn_match = 1 << vdev_id; return ret; } @@ -8307,7 +9324,8 @@ static void wma_update_free_wow_ptrn_id(tp_wma_handle wma) wma->wow.total_free_ptrn_id = -1; wma->wow.used_free_ptrn_id = 0; - for (ptrn_id = 0; ptrn_id < WOW_MAX_BITMAP_FILTERS; ptrn_id++) { + for (ptrn_id = 0; ptrn_id < wma->wlan_resource_config.num_wow_filters; + ptrn_id++) { cache = wma->wow.cache[ptrn_id]; if (!cache) { wma->wow.free_ptrn_id[++wma->wow.total_free_ptrn_id] = @@ -8317,7 +9335,7 @@ static void wma_update_free_wow_ptrn_id(tp_wma_handle wma) } WMA_LOGD("Total free wow pattern id for default patterns: %d", - wma->wow.total_free_ptrn_id); + wma->wow.total_free_ptrn_id + 1); } /* Returns true if the user configured any wow pattern for given vdev id */ @@ -8347,6 +9365,7 @@ static VOS_STATUS wma_feed_wow_config_to_fw(tp_wma_handle wma) struct wma_txrx_node *iface; VOS_STATUS ret = VOS_STATUS_SUCCESS; u_int8_t ptrn_id, vdev_id; + u_int8_t enable_ptrn_match = 0; WMA_LOGD("Clearing already configured wow patterns in fw"); @@ -8358,8 +9377,6 @@ static VOS_STATUS wma_feed_wow_config_to_fw(tp_wma_handle wma) return ret; } - WMA_LOGD("Configuring wow patterns to fw"); - /* Gather list of free ptrn id. This is needed while configuring * default wow patterns. */ wma_update_free_wow_ptrn_id(wma); @@ -8375,13 +9392,13 @@ static VOS_STATUS wma_feed_wow_config_to_fw(tp_wma_handle wma) if (wma_is_wow_prtn_cached(wma, vdev_id)) { /* Configure wow patterns provided by the user */ - ret = wma_wow_usr(wma, vdev_id); + ret = wma_wow_usr(wma, vdev_id, &enable_ptrn_match); } else if (wma_is_vdev_in_ap_mode(wma, vdev_id)) { /* Configure AP mode default wow patterns */ - ret = wma_wow_ap(wma, vdev_id); + ret = wma_wow_ap(wma, vdev_id, &enable_ptrn_match); } else { /* Configure STA mode default wow patterns */ - ret = wma_wow_sta(wma, vdev_id); + ret = wma_wow_sta(wma, vdev_id, &enable_ptrn_match); } if (ret != VOS_STATUS_SUCCESS) @@ -8393,11 +9410,12 @@ static VOS_STATUS wma_feed_wow_config_to_fw(tp_wma_handle wma) * only if pattern match event is enabled. */ ret = wma_add_wow_wakeup_event(wma, WOW_PATTERN_MATCH_EVENT, - TRUE); + enable_ptrn_match ? TRUE : FALSE); if (ret != VOS_STATUS_SUCCESS) return ret; - WMA_LOGD("Pattern byte match is enabled in fw"); + WMA_LOGD("Pattern byte match is %s in fw", + enable_ptrn_match ? "enabled" : "disabled"); /* Configure magic pattern wakeup event */ ret = wma_add_wow_wakeup_event(wma, WOW_MAGIC_PKT_RECVD_EVENT, @@ -8449,10 +9467,9 @@ static VOS_STATUS wma_feed_wow_config_to_fw(tp_wma_handle wma) wma->wow.gtk_err_enable ? "enabled" : "disabled"); } #endif - /* Enable WOW in FW. */ - ret = wma_enable_wow_in_fw(wma); - if (ret == VOS_STATUS_SUCCESS) - wma->wow.wow_enable = TRUE; + /* WOW is enabled in pcie suspend callback */ + wma->wow.wow_enable = TRUE; + wma->wow.wow_enable_cmd_sent = FALSE; return ret; } @@ -8734,7 +9751,7 @@ static VOS_STATUS wma_resume_req(tp_wma_handle wma, tpSirWlanResumeParam info) int8_t vdev_id; VOS_STATUS ret; - if (!wma->wow.wow_enable) { + if (!wma->wow.wow_enable || !wma->wow.wow_enable_cmd_sent) { vos_mem_free(info); return VOS_STATUS_SUCCESS; } @@ -8742,6 +9759,7 @@ static VOS_STATUS wma_resume_req(tp_wma_handle wma, tpSirWlanResumeParam info) WMA_LOGD("WOW Resume"); wma->wow.wow_enable = FALSE; + wma->wow.wow_enable_cmd_sent = FALSE; for (vdev_id = 0; vdev_id < wma->max_bssid; vdev_id++) { if (!wma->interfaces[vdev_id].handle) @@ -8758,12 +9776,14 @@ static VOS_STATUS wma_resume_req(tp_wma_handle wma, tpSirWlanResumeParam info) } /* - * Returns true if wow patterns are configured in fw and - * wow is also enabled. Other cases, returns false. + * Returns true if wow parameters (patterns, wakeup events, etc) + * are configured in fw and waiting for wow to be enabled in fw. + * Other cases, returns false. */ -int wma_is_wow_enabled(WMA_HANDLE handle) +int wma_is_wow_mode_selected(WMA_HANDLE handle) { tp_wma_handle wma = (tp_wma_handle) handle; + return wma->wow.wow_enable; } @@ -8847,8 +9867,10 @@ static void wma_start_oem_data_req(tp_wma_handle wma_handle, WMA_LOGD("%s: Send OEM Data Request to target", __func__); - if (!startOemDataReq) + if (!startOemDataReq) { + WMA_LOGE("%s: startOemDataReq is null", __func__); return; + } if (!wma_handle || !wma_handle->wmi_handle) { WMA_LOGE("%s: WMA is closed, can not send Oem data request cmd", __func__); @@ -8869,10 +9891,13 @@ static void wma_start_oem_data_req(tp_wma_handle wma_handle, cmd += WMI_TLV_HDR_SIZE; vos_mem_copy(cmd, &startOemDataReq->oemDataReq[0], OEM_DATA_REQ_SIZE); + WMA_LOGI("%s: Sending OEM Data Request to target, data len (%d)", + __func__, OEM_DATA_REQ_SIZE); + ret = wmi_unified_cmd_send(wma_handle->wmi_handle, buf, (OEM_DATA_REQ_SIZE + WMI_TLV_HDR_SIZE), - WMI_OEM_DATA_REQ_CMDID); + WMI_OEM_REQ_CMDID); if (ret != EOK) { WMA_LOGE("%s:wmi cmd send failed", __func__); @@ -10196,6 +11221,155 @@ static void wma_process_update_userpos(tp_wma_handle wma_handle, } #endif +#ifdef FEATURE_WLAN_BATCH_SCAN + +/* function : wma_batch_scan_enable + * Descriptin : This function handles WDA_SET_BATCH_SCAN_REQ from UMAC + and sends WMI_BATCH_SCAN_ENABLE_CMDID to target + * Args : + handle : Pointer to WMA handle + * rep : Pointer to batch scan enable request from UMAC + * Returns : + * VOS_STATUS_SUCCESS for success otherwise failure + */ +VOS_STATUS wma_batch_scan_enable +( + tp_wma_handle wma, + tSirSetBatchScanReq *pReq +) +{ + int ret; + u_int8_t *p; + u_int16_t len; + wmi_buf_t buf; + wmi_batch_scan_enable_cmd_fixed_param *p_bs_enable_cmd; + + len = sizeof(wmi_batch_scan_enable_cmd_fixed_param); + buf = wmi_buf_alloc(wma->wmi_handle, len); + if (!buf) + { + WMA_LOGE("%s %d: No WMI resource!", __func__, __LINE__); + return VOS_STATUS_E_FAILURE; + } + + p = (u_int8_t *) wmi_buf_data(buf); + vos_mem_zero(p, len); + p_bs_enable_cmd = (wmi_batch_scan_enable_cmd_fixed_param *)p; + + WMITLV_SET_HDR(&p_bs_enable_cmd->tlv_header, + WMITLV_TAG_STRUC_wmi_batch_scan_enable_cmd_fixed_param, + WMITLV_GET_STRUCT_TLVLEN(wmi_batch_scan_enable_cmd_fixed_param)); + + p_bs_enable_cmd->vdev_id = pReq->sessionId; + p_bs_enable_cmd->numScan2Batch = pReq->numberOfScansToBatch; + p_bs_enable_cmd->bestNetworks = pReq->bestNetwork; + p_bs_enable_cmd->scanInterval = pReq->scanFrequency; + p_bs_enable_cmd->rfBand = pReq->rfBand; + p_bs_enable_cmd->rtt = pReq->rtt; + + ret = wmi_unified_cmd_send(wma->wmi_handle, buf, len, + WMI_BATCH_SCAN_ENABLE_CMDID); + + WMA_LOGE("batch scan cmd sent len: %d, vdev %d command id: %d, status: %d", + len, p_bs_enable_cmd->vdev_id, WMI_BATCH_SCAN_ENABLE_CMDID, ret); + + return VOS_STATUS_SUCCESS; +} + +/* function : wma_batch_scan_disable + * Descriptin : This function handles WDA_STOP_BATCH_SCAN_REQ from UMAC + and sends WMI_BATCH_SCAN_DISABLE_CMDID to target + * Args : + handle : Pointer to WMA handle + * rep : Pointer to batch scan disable request from UMAC + * Returns : + * VOS_STATUS_SUCCESS for success otherwise failure + */ +VOS_STATUS wma_batch_scan_disable +( + tp_wma_handle wma, + tSirStopBatchScanInd *pReq +) +{ + int ret; + u_int8_t *p; + wmi_buf_t buf; + u_int16_t len; + wmi_batch_scan_disable_cmd_fixed_param *p_bs_disable_cmd; + + len = sizeof(wmi_batch_scan_disable_cmd_fixed_param); + buf = wmi_buf_alloc(wma->wmi_handle, len); + if (!buf) + { + WMA_LOGE("%s %d: No WMI resource!", __func__, __LINE__); + return VOS_STATUS_E_FAILURE; + } + + p = (u_int8_t *) wmi_buf_data(buf); + p_bs_disable_cmd = (wmi_batch_scan_disable_cmd_fixed_param *)p; + vos_mem_zero(p, len); + + WMITLV_SET_HDR(&p_bs_disable_cmd->tlv_header, + WMITLV_TAG_STRUC_wmi_batch_scan_disable_cmd_fixed_param, + WMITLV_GET_STRUCT_TLVLEN(wmi_batch_scan_disable_cmd_fixed_param)); + + ret = wmi_unified_cmd_send(wma->wmi_handle, buf, len, + WMI_BATCH_SCAN_DISABLE_CMDID); + + WMA_LOGE("batch scan command sent len: %d, command id: %d, status: %d", + len, WMI_BATCH_SCAN_DISABLE_CMDID, ret); + + return VOS_STATUS_SUCCESS; +} + +/* function : wma_batch_scan_trigger_result + * Descriptin : This function handles WDA_TRIGGER_BATCH_SCAN_RESULT_IND from + UMAC and sends WMI_BATCH_SCAN_TRIGGER_RESULT_CMDID to target + * Args : + handle : Pointer to WMA handle + * rep : Pointer to batch scan trigger request from UMAC + * Returns : + * VOS_STATUS_SUCCESS for success otherwise failure + */ +VOS_STATUS wma_batch_scan_trigger_result +( + tp_wma_handle wma, + tSirTriggerBatchScanResultInd *pReq +) +{ + int ret; + u_int8_t *p; + wmi_buf_t buf; + u_int16_t len; + wmi_batch_scan_trigger_result_cmd_fixed_param *p_bs_trigger_result_cmd; + + len = sizeof(wmi_batch_scan_trigger_result_cmd_fixed_param); + buf = wmi_buf_alloc(wma->wmi_handle, len); + if (!buf) + { + WMA_LOGE("%s %d : No WMI resource!", __func__, __LINE__); + return VOS_STATUS_E_FAILURE; + } + + p = (u_int8_t *) wmi_buf_data(buf); + p_bs_trigger_result_cmd =(wmi_batch_scan_trigger_result_cmd_fixed_param *)p; + vos_mem_zero(p, len); + + WMITLV_SET_HDR(&p_bs_trigger_result_cmd->tlv_header, + WMITLV_TAG_STRUC_wmi_batch_scan_trigger_result_cmd_fixed_param, + WMITLV_GET_STRUCT_TLVLEN(wmi_batch_scan_trigger_result_cmd_fixed_param)); + + ret = wmi_unified_cmd_send(wma->wmi_handle, buf, len, + WMI_BATCH_SCAN_TRIGGER_RESULT_CMDID); + + WMA_LOGE("batch scan command sent len: %d, command id: %d, status: %d", + len, WMI_BATCH_SCAN_TRIGGER_RESULT_CMDID, ret); + + return VOS_STATUS_SUCCESS; +} +#endif + + /* function : wma_mc_process_msg * Descriptin : * Args : @@ -10490,6 +11664,43 @@ VOS_STATUS wma_mc_process_msg(v_VOID_t *vos_context, vos_msg_t *msg) case WDA_RATE_UPDATE_IND: wma_process_rate_update_indicate(wma_handle, (tSirRateUpdateInd *)msg->bodyptr); break; + +#ifdef FEATURE_WLAN_TDLS + case WDA_UPDATE_FW_TDLS_STATE: + wma_update_fw_tdls_state(wma_handle, + (t_wma_tdls_params *)msg->bodyptr); + break; + case WDA_UPDATE_TDLS_PEER_STATE: + wma_update_tdls_peer_state(wma_handle, + (tTdlsPeerStateParams *)msg->bodyptr); + break; +#endif /* FEATURE_WLAN_TDLS */ + +#ifdef FEATURE_WLAN_BATCH_SCAN + case WDA_SET_BATCH_SCAN_REQ: + wma_batch_scan_enable(wma_handle, + (tSirSetBatchScanReq *)msg->bodyptr); + vos_mem_free(msg->bodyptr); + break; + + case WDA_STOP_BATCH_SCAN_IND: + wma_batch_scan_disable(wma_handle, + (tSirStopBatchScanInd *)msg->bodyptr); + vos_mem_free(msg->bodyptr); + break; + + case WDA_TRIGGER_BATCH_SCAN_RESULT_IND: + wma_batch_scan_trigger_result(wma_handle, + (tSirTriggerBatchScanResultInd *)msg->bodyptr); + vos_mem_free(msg->bodyptr); + break; +#endif + +#ifdef FEATURE_WLAN_LPHB + case WDA_LPHB_CONF_REQ: + wma_process_lphb_conf_req(wma_handle, (tSirLPHBReq *)msg->bodyptr); + break; +#endif default: WMA_LOGD("unknow msg type %x", msg->type); /* Do Nothing? MSG Body should be freed at here */ @@ -10905,6 +12116,290 @@ static int wma_mcc_vdev_tx_pause_evt_handler(void *handle, u_int8_t *event, return 0; } #endif /* QCA_SUPPORT_TXRX_VDEV_PAUSE_LL */ + +#ifdef FEATURE_WLAN_BATCH_SCAN + +/* function : wma_batch_scan_result_event_handler + * Descriptin : Batch scan result event handler from target. This function + * converts target batch scan response into HDD readable format + * and calls HDD supplied callback + * Args : + handle : Pointer to WMA handle + * data : Pointer to batch scan response data from target + datalen : Length of response data from target + * Returns : + */ +static int +wma_batch_scan_result_event_handler +( + void *handle, + u_int8_t *data, + u_int32_t datalen +) +{ + void *pCallbackContext; + tSirBatchScanList *pHddScanList; + tSirBatchScanResultIndParam *pHddResult; + tSirBatchScanNetworkInfo *pHddApMetaInfo; + tp_wma_handle wma = (tp_wma_handle) handle; + u_int8_t bssid[IEEE80211_ADDR_LEN], ssid[32], *ssid_temp; + u_int32_t temp, count1, count2, scan_num, netinfo_num, total_size; + WMI_BATCH_SCAN_RESULT_EVENTID_param_tlvs *param_tlvs; + wmi_batch_scan_result_event_fixed_param *fix_param; + wmi_batch_scan_result_scan_list *scan_list; + wmi_batch_scan_result_network_info *network_info; + tpAniSirGlobal pMac = (tpAniSirGlobal )vos_get_context(VOS_MODULE_ID_PE, + wma->vos_context); + + total_size = 0; + param_tlvs = (WMI_BATCH_SCAN_RESULT_EVENTID_param_tlvs *)data; + fix_param = param_tlvs->fixed_param; + scan_list = param_tlvs->scan_list; + network_info = param_tlvs->network_list; + scan_num = fix_param->numScanLists; + + WMA_LOGE("%s: scan_num %d isLast %d\n", __func__, scan_num, + fix_param->isLastResult); + + if ((0 == scan_num) || (NULL == pMac)) + { + WMA_LOGE("%s: Could not parse target response scan_num %d pMac %p\n", + __func__, scan_num, pMac); + pHddResult = NULL; + goto done; + } + + for(count1 = 0; count1 < scan_num; count1++) + { + total_size += (sizeof(tSirBatchScanNetworkInfo) * + scan_list->numNetworksInScanList); + netinfo_num = scan_list->numNetworksInScanList; + WMA_LOGD("scanId %d numNetworksInScanList %d " + "netWorkStartIndex %d\n", scan_list->scanId, + scan_list->numNetworksInScanList, scan_list->netWorkStartIndex); + scan_list++; + } + total_size += (sizeof(tSirBatchScanResultIndParam) + + sizeof(tSirBatchScanList) * scan_num); + WMA_LOGE("%s: Batch scan response length %d\n", __func__, total_size); + pHddResult = (tSirBatchScanResultIndParam *)vos_mem_malloc(total_size); + if (NULL == pHddResult) + { + WMA_LOGE("%s:Could not allocate memory for len %d\n", __func__, + total_size); + goto done; + } + + /* + Parse target response and fill it in HDD format as shown below + Target Response: + =============== + | scan result | scan list 0 | scan list 1 | scan list 2 | ---- + | scan list N | network info 1to n1 | network info 1 to n2 |---- + | network info 1 to Nn | + + HDD requested format: + ==================== + | scan result | scan list 0 | network info 1 to n1 | scan list 2 | + | network info 1 to n2 | scan list 3 | network info 1 to n3 | ---- + | scan list N | network info 1 to Nn | + */ + vos_mem_zero((u_int8_t*)pHddResult, total_size); + pHddResult->timestamp = fix_param->timestamp; + pHddResult->numScanLists = fix_param->numScanLists; + pHddResult->isLastResult = fix_param->isLastResult; + pHddScanList = (tSirBatchScanList *)pHddResult->scanResults; + scan_list = param_tlvs->scan_list; + network_info = param_tlvs->network_list; + for(count1 = 0; count1 < scan_num; count1++) + { + pHddScanList->scanId = scan_list->scanId; + pHddScanList->numNetworksInScanList = scan_list->numNetworksInScanList; + pHddApMetaInfo = + (tSirBatchScanNetworkInfo *)(pHddScanList->scanList); + + for (count2 = 0; count2 < scan_list->numNetworksInScanList; count2++) + { + WMI_MAC_ADDR_TO_CHAR_ARRAY(&network_info->bssid, &bssid[0]); + vos_mem_copy(pHddApMetaInfo->bssid, bssid, IEEE80211_ADDR_LEN); + if (network_info->ssid.ssid_len <= 32) + { + ssid_temp = (u_int8_t *)network_info->ssid.ssid; + for(temp = 0; temp < network_info->ssid.ssid_len; temp++) + { + ssid[temp] = *ssid_temp; + ssid_temp++; + } + ssid[temp] = '\0'; + vos_mem_copy(pHddApMetaInfo->ssid, ssid, 32); + WMA_LOGD("ssid %s",pHddApMetaInfo->ssid); + } + else + { + WMA_LOGE("invalid ssid_len %d received from target\n", + network_info->ssid.ssid_len); + pHddApMetaInfo->ssid[0] = '\0'; + } + pHddApMetaInfo->ch = network_info->ch; + pHddApMetaInfo->rssi = network_info->rssi; + pHddApMetaInfo->timestamp = network_info->timestamp; + + WMA_LOGD("ch %d rssi %d timestamp %d",pHddApMetaInfo->ch, + pHddApMetaInfo->rssi, pHddApMetaInfo->timestamp); + + pHddApMetaInfo++; + network_info++; + } + + pHddScanList = (tSirBatchScanList*)pHddApMetaInfo; + scan_list++; + } + +done: + + pCallbackContext = pMac->pmc.batchScanResultCallbackContext; + /*call hdd callback with set batch scan response data*/ + if (pMac->pmc.batchScanResultCallback) + { + pMac->pmc.batchScanResultCallback(pCallbackContext, (void *)pHddResult); + } + else + { + WMA_LOGE("%s:HDD callback is null", __func__); + } + + /*free if memory was allocated*/ + if (pHddResult) + { + vos_mem_free(pHddResult); + } + + return 0; +} + +/* function : wma_batch_scan_enable_event_handler + * Descriptin : Batch scan enable event handler from target. This function + * gets minimum no of supported batch scan info from target + * and calls HDD supplied callback + * Args : + handle : Pointer to WMA handle + * data : Pointer to batch scan enable data from target + datalen : Length of response data from target + * Returns : + */ +static int +wma_batch_scan_enable_event_handler +( + void *handle, + u_int8_t *data, + u_int32_t datalen +) +{ + void *pCallbackContext; + tSirSetBatchScanRsp hddSetBatchScanRsp; + tp_wma_handle wma = (tp_wma_handle) handle; + WMI_BATCH_SCAN_ENABLED_EVENTID_param_tlvs *param_tlvs; + wmi_batch_scan_enabled_event_fixed_param *fix_param; + tpAniSirGlobal pMac = (tpAniSirGlobal )vos_get_context(VOS_MODULE_ID_PE, + wma->vos_context); + + param_tlvs = (WMI_BATCH_SCAN_ENABLED_EVENTID_param_tlvs *)data; + fix_param = param_tlvs->fixed_param; + + WMA_LOGD("%s: support number of scan %d\n",__func__, + fix_param->supportedMscan); + + /*Call HDD callback*/ + if (NULL == pMac) + { + WMA_LOGE("%s: pMac is NULL", __func__); + return -1; + } + hddSetBatchScanRsp.nScansToBatch = fix_param->supportedMscan; + pCallbackContext = pMac->pmc.setBatchScanReqCallbackContext; + /*Call hdd callback with set batch scan response data*/ + if (pMac->pmc.setBatchScanReqCallback) + { + pMac->pmc.setBatchScanReqCallback(pCallbackContext, &hddSetBatchScanRsp); + } + else + { + WMA_LOGE("%s:HDD callback is null", __func__); + } + + return 0; +} +#endif + +#ifdef FEATURE_WLAN_CH_AVOID +/* Process channel to avoid event comes from FW. + */ +static int wma_channel_avoid_evt_handler(void *handle, u_int8_t *event, + u_int32_t len) +{ + wmi_avoid_freq_ranges_event_fixed_param *afr_fixed_param; + wmi_avoid_freq_range_desc *afr_desc; + u_int32_t num_freq_ranges, freq_range_idx; + tSirChAvoidIndType *sca_indication; + VOS_STATUS vos_status; + vos_msg_t sme_msg = {0} ; + WMI_WLAN_FREQ_AVOID_EVENTID_param_tlvs *param_buf = + (WMI_WLAN_FREQ_AVOID_EVENTID_param_tlvs *) event; + + if (!param_buf) { + WMA_LOGE("Invalid channel avoid event buffer"); + return -EINVAL; + } + + afr_fixed_param = param_buf->fixed_param; + if (!afr_fixed_param) { + WMA_LOGE("Invalid channel avoid event fixed param buffer"); + return -EINVAL; + } + + num_freq_ranges = (afr_fixed_param->num_freq_ranges > SIR_CH_AVOID_MAX_RANGE)? + SIR_CH_AVOID_MAX_RANGE:afr_fixed_param->num_freq_ranges; + + WMA_LOGD("Channel avoid event received with %d ranges", num_freq_ranges); + for (freq_range_idx = 0; freq_range_idx < num_freq_ranges; freq_range_idx++) { + afr_desc = (wmi_avoid_freq_range_desc *) (param_buf->avd_freq_range + freq_range_idx * sizeof(wmi_avoid_freq_range_desc)); + WMA_LOGD("range %d: tlv id = %lu, start freq = %lu, end freq = %lu", + freq_range_idx, + afr_desc->tlv_header, + afr_desc->start_freq, + afr_desc->end_freq); + } + + sca_indication = (tSirChAvoidIndType *) + vos_mem_malloc(sizeof(tSirChAvoidIndType)); + if (!sca_indication) { + WMA_LOGE("Invalid channel avoid indication buffer"); + return -EINVAL; + } + + sca_indication->avoid_range_count = num_freq_ranges; + for (freq_range_idx = 0; freq_range_idx < num_freq_ranges; freq_range_idx++) { + afr_desc = (wmi_avoid_freq_range_desc *) (param_buf->avd_freq_range + freq_range_idx * sizeof(wmi_avoid_freq_range_desc)); + sca_indication->avoid_freq_range[freq_range_idx].start_freq = afr_desc->start_freq; + sca_indication->avoid_freq_range[freq_range_idx].end_freq = afr_desc->end_freq; + } + + sme_msg.type = eWNI_SME_CH_AVOID_IND; + sme_msg.bodyptr = sca_indication; + sme_msg.bodyval = 0; + + vos_status = vos_mq_post_message(VOS_MODULE_ID_SME, &sme_msg); + if ( !VOS_IS_STATUS_SUCCESS(vos_status) ) + { + WMA_LOGE("Fail to post eWNI_SME_CH_AVOID_IND msg to SME"); + vos_mem_free(sca_indication); + return -EINVAL; + } + + return 0; +} +#endif /* FEATURE_WLAN_CH_AVOID */ + /* function : wma_start * Descriptin : * Args : @@ -11013,6 +12508,52 @@ VOS_STATUS wma_start(v_VOID_t *vos_ctx) WMI_TX_PAUSE_EVENTID, wma_mcc_vdev_tx_pause_evt_handler); #endif /* QCA_SUPPORT_TXRX_VDEV_PAUSE_LL */ +#ifdef FEATURE_WLAN_BATCH_SCAN + if (WMI_SERVICE_IS_ENABLED(wma_handle->wmi_service_bitmap, + WMI_SERVICE_BATCH_SCAN)) + { + + WMA_LOGD("FW supports batch scan, registering batch scan handler"); + + status = wmi_unified_register_event_handler(wma_handle->wmi_handle, + WMI_BATCH_SCAN_RESULT_EVENTID, + wma_batch_scan_result_event_handler); + if (status) + { + WMA_LOGE("Failed to register batch scan result event cb"); + vos_status = VOS_STATUS_E_FAILURE; + goto end; + } + + status = wmi_unified_register_event_handler(wma_handle->wmi_handle, + WMI_BATCH_SCAN_ENABLED_EVENTID, + wma_batch_scan_enable_event_handler); + if (status) + { + WMA_LOGE("Failed to register batch scan enable event cb"); + vos_status = VOS_STATUS_E_FAILURE; + goto end; + } + } + else + { + WMA_LOGE("Target does not support batch scan feature"); + } +#endif + +#ifdef FEATURE_WLAN_CH_AVOID + WMA_LOGD("Registering channel to avoid handler"); + + status = wmi_unified_register_event_handler( + wma_handle->wmi_handle, + WMI_WLAN_FREQ_AVOID_EVENTID, + wma_channel_avoid_evt_handler); + if (status) { + WMA_LOGE("Failed to register channel to avoid event cb"); + vos_status = VOS_STATUS_E_FAILURE; + goto end; + } +#endif /* FEATURE_WLAN_CH_AVOID */ vos_status = VOS_STATUS_SUCCESS; @@ -11307,6 +12848,13 @@ static inline void wma_update_target_services(tp_wma_handle wh, #endif cfg->lte_coex_ant_share = WMI_SERVICE_IS_ENABLED(wh->wmi_service_bitmap, WMI_SERVICE_LTE_ANT_SHARE_SUPPORT); +#ifdef FEATURE_WLAN_TDLS + /* Enable TDLS */ + cfg->en_tdls = WMI_SERVICE_IS_ENABLED(wh->wmi_service_bitmap, + WMI_SERVICE_TDLS); +#endif + if (WMI_SERVICE_IS_ENABLED(wh->wmi_service_bitmap, WMI_SERVICE_BEACON_OFFLOAD)) + cfg->beacon_offload = TRUE; } static inline void wma_update_target_ht_cap(tp_wma_handle wh, @@ -11419,16 +12967,10 @@ static inline void wma_update_target_vht_cap(tp_wma_handle wh, static void wma_update_hdd_cfg(tp_wma_handle wma_handle) { struct hdd_tgt_cfg hdd_tgt_cfg; - int err; void *hdd_ctx = vos_get_context(VOS_MODULE_ID_HDD, wma_handle->vos_context); - err = regdmn_get_country_alpha2(wma_handle->reg_cap.eeprom_rd, - hdd_tgt_cfg.alpha2); - if (err) { - WMA_LOGE("Invalid regulatory settings"); - return; - } + hdd_tgt_cfg.reg_domain = wma_handle->reg_cap.eeprom_rd; switch (wma_handle->phy_capability) { case WMI_11G_CAPABILITY: @@ -11709,37 +13251,6 @@ v_VOID_t wma_rx_service_ready_event(WMA_HANDLE handle, void *cmd_param_info) } } -static void wma_set_regdomain(u_int32_t regdmn) -{ - void *vos_context = vos_get_global_context(VOS_MODULE_ID_WDA, NULL); - tp_wma_handle wma = vos_get_context(VOS_MODULE_ID_WDA, vos_context); - u_int32_t modeSelect = 0xFFFFFFFF; - - switch (wma->phy_capability) { - case WMI_11G_CAPABILITY: - case WMI_11NG_CAPABILITY: - modeSelect &= ~(REGDMN_MODE_11A | REGDMN_MODE_TURBO | - REGDMN_MODE_108A | REGDMN_MODE_11A_HALF_RATE | - REGDMN_MODE_11A_QUARTER_RATE | REGDMN_MODE_11NA_HT20 | - REGDMN_MODE_11NA_HT40PLUS | REGDMN_MODE_11NA_HT40MINUS | - REGDMN_MODE_11AC_VHT20 | REGDMN_MODE_11AC_VHT40PLUS | - REGDMN_MODE_11AC_VHT40MINUS | REGDMN_MODE_11AC_VHT80); - break; - case WMI_11A_CAPABILITY: - case WMI_11NA_CAPABILITY: - case WMI_11AC_CAPABILITY: - modeSelect &= ~(REGDMN_MODE_11B | REGDMN_MODE_11G | - REGDMN_MODE_108G | REGDMN_MODE_11NG_HT20 | - REGDMN_MODE_11NG_HT40PLUS | REGDMN_MODE_11NG_HT40MINUS | - REGDMN_MODE_11AC_VHT20_2G | REGDMN_MODE_11AC_VHT40_2G | - REGDMN_MODE_11AC_VHT80_2G); - break; - } - - regdmn_get_ctl_info(regdmn, wma->reg_cap.wireless_modes, modeSelect); - return; -} - /* function : wma_rx_ready_event * Descriptin : * Args : @@ -11818,7 +13329,6 @@ v_VOID_t wma_rx_ready_event(WMA_HANDLE handle, void *cmd_param_info) #endif vos_event_set(&wma_handle->wma_ready_event); - wma_set_regdomain(wma_handle->reg_cap.eeprom_rd); WMA_LOGD("Exit"); } @@ -12749,17 +14259,6 @@ eHalStatus WMA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId, return eHAL_STATUS_SUCCESS; } -eHalStatus WMA_SetCountryCode(v_VOID_t *client_ctx, tANI_U8 *countrycode) -{ - int32_t regdmn; - regdmn = regdmn_get_regdmn_for_country(countrycode); - if (regdmn < 0) - return eHAL_STATUS_FAILURE; - - wma_set_regdomain(regdmn); - return eHAL_STATUS_SUCCESS; -} - tANI_U8 wma_getFwWlanFeatCaps(tANI_U8 featEnumValue) { return gFwWlanFeatCaps & featEnumValue; @@ -12798,6 +14297,31 @@ void wma_send_regdomain_info(u_int32_t reg_dmn, u_int16_t regdmn2G, return; } +void wma_get_modeselect(tp_wma_handle wma, u_int32_t *modeSelect) +{ + + switch (wma->phy_capability) { + case WMI_11G_CAPABILITY: + case WMI_11NG_CAPABILITY: + *modeSelect &= ~(REGDMN_MODE_11A | REGDMN_MODE_TURBO | + REGDMN_MODE_108A | REGDMN_MODE_11A_HALF_RATE | + REGDMN_MODE_11A_QUARTER_RATE | REGDMN_MODE_11NA_HT20 | + REGDMN_MODE_11NA_HT40PLUS | REGDMN_MODE_11NA_HT40MINUS | + REGDMN_MODE_11AC_VHT20 | REGDMN_MODE_11AC_VHT40PLUS | + REGDMN_MODE_11AC_VHT40MINUS | REGDMN_MODE_11AC_VHT80); + break; + case WMI_11A_CAPABILITY: + case WMI_11NA_CAPABILITY: + case WMI_11AC_CAPABILITY: + *modeSelect &= ~(REGDMN_MODE_11B | REGDMN_MODE_11G | + REGDMN_MODE_108G | REGDMN_MODE_11NG_HT20 | + REGDMN_MODE_11NG_HT40PLUS | REGDMN_MODE_11NG_HT40MINUS | + REGDMN_MODE_11AC_VHT20_2G | REGDMN_MODE_11AC_VHT40_2G | + REGDMN_MODE_11AC_VHT80_2G); + break; + } +} + tANI_U8 wma_map_channel(tANI_U8 mapChannel) { return mapChannel; @@ -12913,3 +14437,146 @@ pkt_pwr_save_config: return (ret)? eHAL_STATUS_FAILURE : eHAL_STATUS_SUCCESS; } + +#ifdef FEATURE_WLAN_TDLS +/* wmi tdls command sent to firmware to enable/disable tdls for a vdev */ +static int wma_update_fw_tdls_state(WMA_HANDLE handle, void *pwmaTdlsparams) +{ + tp_wma_handle wma_handle = (tp_wma_handle) handle; + wmi_tdls_set_state_cmd_fixed_param* cmd; + wmi_buf_t wmi_buf; + t_wma_tdls_mode tdls_mode; + t_wma_tdls_params *wma_tdls = (t_wma_tdls_params *)pwmaTdlsparams; + u_int16_t len = sizeof(wmi_tdls_set_state_cmd_fixed_param); + + if (!wma_handle || !wma_handle->wmi_handle) { + WMA_LOGE("%s: WMA is closed, can not issue fw tdls state cmd", + __func__); + return -EINVAL; + } + + wmi_buf = wmi_buf_alloc(wma_handle->wmi_handle, len); + if (!wmi_buf) { + WMA_LOGE("%s: wmai_buf_alloc failed", __func__); + return ENOMEM; + } + tdls_mode = wma_tdls->tdls_state; + cmd = (wmi_tdls_set_state_cmd_fixed_param *)wmi_buf_data(wmi_buf); + WMITLV_SET_HDR(&cmd->tlv_header, + WMITLV_TAG_STRUC_wmi_tdls_set_state_cmd_fixed_param, + WMITLV_GET_STRUCT_TLVLEN(wmi_tdls_set_state_cmd_fixed_param)); + cmd->vdev_id = wma_tdls->vdev_id; + + if (WMA_TDLS_SUPPORT_EXPLICIT_TRIGGER_ONLY == tdls_mode) { + cmd->state = WMI_TDLS_ENABLE_PASSIVE; + } else if (WMA_TDLS_SUPPORT_ENABLED == tdls_mode) { + cmd->state = WMI_TDLS_ENABLE_ACTIVE; + } else { + cmd->state = WMI_TDLS_DISABLE; + } + + WMA_LOGD("%s: tdls_mode: %d, cmd->state: %d", + __func__, tdls_mode, cmd->state); + + cmd->notification_interval_ms = wma_tdls->notification_interval_ms; + cmd->tx_discovery_threshold = wma_tdls->tx_discovery_threshold; + cmd->tx_teardown_threshold = wma_tdls->tx_teardown_threshold; + cmd->rssi_teardown_threshold = wma_tdls->rssi_teardown_threshold; + cmd->rssi_delta = wma_tdls->rssi_delta; + cmd->tdls_options = wma_tdls->tdls_options; + + if (wmi_unified_cmd_send(wma_handle->wmi_handle, wmi_buf, len, + WMI_TDLS_SET_STATE_CMDID)) { + WMA_LOGP("%s: failed to send tdls set state command", __func__); + adf_nbuf_free(wmi_buf); + return -EIO; + } + WMA_LOGD("%s: vdev_id %d", __func__, wma_tdls->vdev_id); + if (pwmaTdlsparams) + vos_mem_free(pwmaTdlsparams); + return 0; +} + +static int wma_update_tdls_peer_state(WMA_HANDLE handle, + tTdlsPeerStateParams *peerStateParams) +{ + tp_wma_handle wma_handle = (tp_wma_handle) handle; + wmi_tdls_peer_update_cmd_fixed_param* cmd; + wmi_tdls_peer_capabilities *peer_cap; + wmi_buf_t wmi_buf; + u_int8_t *buf_ptr; + u_int32_t i; + int32_t len = sizeof(wmi_tdls_peer_update_cmd_fixed_param) + + sizeof(wmi_tdls_peer_capabilities); + + if (!wma_handle || !wma_handle->wmi_handle) { + WMA_LOGE("%s: WMA is closed, can not issue cmd", __func__); + return -EINVAL; + } + + wmi_buf = wmi_buf_alloc(wma_handle->wmi_handle, len); + if (!wmi_buf) { + WMA_LOGE("%s: wmi_buf_alloc failed", __func__); + return ENOMEM; + } + + buf_ptr = (u_int8_t *) wmi_buf_data(wmi_buf); + cmd = (wmi_tdls_peer_update_cmd_fixed_param *) buf_ptr; + WMITLV_SET_HDR(&cmd->tlv_header, + WMITLV_TAG_STRUC_wmi_tdls_peer_update_cmd_fixed_param, + WMITLV_GET_STRUCT_TLVLEN(wmi_tdls_peer_update_cmd_fixed_param)); + + cmd->vdev_id = peerStateParams->vdevId; + WMI_CHAR_ARRAY_TO_MAC_ADDR(peerStateParams->peerMacAddr, &cmd->peer_macaddr); + + switch (peerStateParams->peerState) { + case WDA_TDLS_PEER_STATE_PEERING: + cmd->peer_state = WMI_TDLS_PEER_STATE_PEERING; + break; + case WDA_TDLS_PEER_STATE_CONNECTED: + cmd->peer_state = WMI_TDLS_PEER_STATE_CONNECTED; + break; + case WDA_TDLS_PEER_STATE_TEARDOWN: + cmd->peer_state = WMI_TDLS_PEER_STATE_TEARDOWN; + break; + } + + WMA_LOGD("%s: vdev_id: %d, peerStateParams->peerMacAddr: %pM, " + "peer_macaddr.mac_addr31to0: 0x%x, " + "peer_macaddr.mac_addr47to32: 0x%x, peer_state: %d", + __func__, cmd->vdev_id, peerStateParams->peerMacAddr, + cmd->peer_macaddr.mac_addr31to0, + cmd->peer_macaddr.mac_addr47to32, cmd->peer_state); + + buf_ptr += sizeof(wmi_tdls_peer_update_cmd_fixed_param); + peer_cap = (wmi_tdls_peer_capabilities *) buf_ptr; + WMITLV_SET_HDR(&peer_cap->tlv_header, + WMITLV_TAG_STRUC_wmi_tdls_peer_capabilities, + WMITLV_GET_STRUCT_TLVLEN(wmi_tdls_peer_capabilities)); + + /* peer capabilities - TODO */ + peer_cap->peer_qos = 0; + peer_cap->buff_sta_support = 0; + peer_cap->off_chan_support = 0; + peer_cap->peer_curr_operclass = 0; + peer_cap->self_curr_operclass = 0; + peer_cap->peer_chan_len = 0; + for (i = 0; i < WMI_TDLS_MAX_SUPP_CHANNELS; i++) { + peer_cap->peer_chan[i] = 0; + } + peer_cap->peer_operclass_len = 0; + for (i = 0; i < WMI_TDLS_MAX_SUPP_OPER_CLASSES; i++) { + peer_cap->peer_operclass[i] = 0; + } + + if (wmi_unified_cmd_send(wma_handle->wmi_handle, wmi_buf, len, + WMI_TDLS_PEER_UPDATE_CMDID)) { + WMA_LOGE("%s: failed to send tdls peer update state command", + __func__); + adf_nbuf_free(wmi_buf); + return -EIO; + } + return 0; +} +#endif /* FEATURE_WLAN_TDLS */ + diff --git a/CORE/SERVICES/WMA/wma.h b/CORE/SERVICES/WMA/wma.h index e234aae98fac..3644b87fbbe8 100644 --- a/CORE/SERVICES/WMA/wma.h +++ b/CORE/SERVICES/WMA/wma.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /**======================================================================== \file wma.h @@ -160,6 +159,43 @@ typedef enum { WMA_STATE_CLOSE }t_wma_state; +#ifdef FEATURE_WLAN_TDLS +typedef enum { + WMA_TDLS_SUPPORT_NOT_ENABLED = 0, + WMA_TDLS_SUPPORT_DISABLED, /* suppress implicit trigger and not respond to the peer */ + WMA_TDLS_SUPPORT_EXPLICIT_TRIGGER_ONLY, /* suppress implicit trigger, but respond to the peer */ + WMA_TDLS_SUPPORT_ENABLED, /* implicit trigger */ +}t_wma_tdls_mode; + +/** TDLS EVENTS */ +enum wma_tdls_peer_notification { + /** tdls discovery recommended for peer (always based + * on tx bytes per second > tx_discover threshold + * NB: notification will be re-sent after + * discovery_request_interval_ms */ + WMA_TDLS_SHOULD_DISCOVER, + /** tdls link tear down recommended for peer + * due to tx bytes per second below tx_teardown_threshold + * NB: this notification sent once */ + WMA_TDLS_SHOULD_TEARDOWN, + /** tx peer TDLS link tear down complete */ + WMA_TDLS_PEER_DISCONNECTED, +}; + +enum wma_tdls_peer_reason { + /** tdls teardown recommended due to low transmits */ + WMA_TDLS_TEARDOWN_REASON_TX, + /** tdls tear down recommended due to packet rates < AP rates */ + WMA_TDLS_TEARDOWN_REASON_RATE, + /** tdls link tear down recommended due to poor RSSI */ + WMA_TDLS_TEARDOWN_REASON_RSSI, + /** tdls link tear down recommended due to offchannel scan */ + WMA_TDLS_TEARDOWN_REASON_SCAN, + /** tdls peer disconnected due to peer deletion */ + WMA_TDLS_DISCONNECTED_REASON_PEER_DELETE, +}; +#endif /* FEATURE_WLAN_TDLS */ + /* * memory chunck allocated by Host to be managed by FW * used only for low latency interfaces like pcie @@ -262,7 +298,7 @@ typedef struct { #define WMA_NUM_BITS_IN_BYTE 8 #define WMA_AP_WOW_DEFAULT_PTRN_MAX 4 -#define WMA_STA_WOW_DEFAULT_PTRN_MAX 2 +#define WMA_STA_WOW_DEFAULT_PTRN_MAX 4 struct wma_wow_ptrn_cache { u_int8_t vdev_id; @@ -283,6 +319,7 @@ struct wma_wow { v_BOOL_t magic_ptrn_enable; v_BOOL_t wow_enable; + v_BOOL_t wow_enable_cmd_sent; v_BOOL_t deauth_enable; v_BOOL_t disassoc_enable; v_BOOL_t bmiss_enable; @@ -316,6 +353,7 @@ struct wma_txrx_node { tANI_U8 ht_capable; v_BOOL_t vdev_up; u_int64_t tsfadjust; + void *addBssStaContext; }; #if defined(QCA_WIFI_FTM) && !defined(QCA_WIFI_ISOC) @@ -422,6 +460,17 @@ typedef struct { u_int8_t powersave_mode; v_BOOL_t ptrn_match_enable_all_vdev; void* pGetRssiReq; + u_int32_t roam_offload_vdev_id; + + /* Here ol_ini_info is used to store ini + * status of arp offload, ns offload + * and others. Currently 1st bit is used + * for arp off load and 2nd bit for ns + * offload currently, rest bits are unused + */ + u_int8_t ol_ini_info; + u_int8_t ibss_started; + tSetBssKeyParams ibsskey_info; }t_wma_handle, *tp_wma_handle; struct wma_target_cap { @@ -906,6 +955,7 @@ extern v_BOOL_t sys_validateStaConfig(void *pImage, unsigned long cbFile, extern void vos_WDAComplete_cback(v_PVOID_t pVosContext); extern void wma_send_regdomain_info(u_int32_t reg_dmn, u_int16_t regdmn2G, u_int16_t regdmn5G, int8_t ctl2G, int8_t ctl5G); +void wma_get_modeselect(tp_wma_handle wma, u_int32_t *modeSelect); #ifdef QCA_WIFI_ISOC VOS_STATUS wma_cfg_download_isoc(v_VOID_t *vos_context, @@ -939,12 +989,6 @@ enum frame_index { VOS_STATUS wma_update_vdev_tbl(tp_wma_handle wma_handle, u_int8_t vdev_id, ol_txrx_vdev_handle tx_rx_vdev_handle, u_int8_t *mac, u_int32_t vdev_type, bool add_del); -#ifndef QCA_WIFI_ISOC -int regdmn_get_country_alpha2(u_int16_t rd, u_int8_t *alpha2); -void regdmn_get_ctl_info(u_int32_t reg_dmn, u_int32_t modesAvail, - u_int32_t modeSelect); -int32_t regdmn_get_regdmn_for_country(u_int8_t *alpha2); -#endif #define WMA_FW_PHY_STATS 0x1 #define WMA_FW_RX_REORDER_STATS 0x2 @@ -1166,11 +1210,54 @@ enum powersave_mode { PS_LEGACY_DEEPSLEEP = 3, PS_QPOWER_DEEPSLEEP = 4 }; + #define WMA_DEFAULT_MAX_PSPOLL_BEFORE_WAKE 1 + +typedef enum { + /* set packet power save */ + WMI_VDEV_PPS_PAID_MATCH = 0, + WMI_VDEV_PPS_GID_MATCH = 1, + WMI_VDEV_PPS_EARLY_TIM_CLEAR = 2, + WMI_VDEV_PPS_EARLY_DTIM_CLEAR = 3, + WMI_VDEV_PPS_EOF_PAD_DELIM = 4, + WMI_VDEV_PPS_MACADDR_MISMATCH = 5, + WMI_VDEV_PPS_DELIM_CRC_FAIL = 6, + WMI_VDEV_PPS_GID_NSTS_ZERO = 7, + WMI_VDEV_PPS_RSSI_CHECK = 8, + WMI_VDEV_VHT_SET_GID_MGMT = 9 +} packet_power_save; + +#define WMA_DEFAULT_QPOWER_MAX_PSPOLL_BEFORE_WAKE 1 #define WMA_DEFAULT_QPOWER_TX_WAKE_THRESHOLD 2 #define WMA_VHT_PPS_PAID_MATCH 1 #define WMA_VHT_PPS_GID_MATCH 2 #define WMA_VHT_PPS_DELIM_CRC_FAIL 3 +#ifdef FEATURE_WLAN_TDLS +typedef struct wma_tdls_params +{ + tANI_U32 vdev_id; + tANI_U32 tdls_state; + tANI_U32 notification_interval_ms; + tANI_U32 tx_discovery_threshold; + tANI_U32 tx_teardown_threshold; + tANI_S32 rssi_teardown_threshold; + tANI_S32 rssi_delta; + tANI_U32 tdls_options; +} t_wma_tdls_params; + +typedef struct { + /** unique id identifying the VDEV */ + A_UINT32 vdev_id; + /** peer MAC address */ + wmi_mac_addr peer_macaddr; + /** TDLS peer status (wma_tdls_peer_notification)*/ + A_UINT32 peer_status; + /** TDLS peer reason (wma_tdls_peer_reason) */ + A_UINT32 peer_reason; +} wma_tdls_peer_event; + +#endif /* FEATURE_WLAN_TDLS */ + #endif diff --git a/CORE/SERVICES/WMA/wma_isoc.c b/CORE/SERVICES/WMA/wma_isoc.c index 7458f1fdf50e..3f0afe62dc53 100644 --- a/CORE/SERVICES/WMA/wma_isoc.c +++ b/CORE/SERVICES/WMA/wma_isoc.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /**======================================================================== \file wma_isoc.c diff --git a/CORE/SERVICES/WMA/wma_stub.h b/CORE/SERVICES/WMA/wma_stub.h index d92d674a0500..bf911303e6f1 100644 --- a/CORE/SERVICES/WMA/wma_stub.h +++ b/CORE/SERVICES/WMA/wma_stub.h @@ -19,6 +19,11 @@ * PERFORMANCE OF THIS SOFTWARE. */ +/* + * This file was originally distributed by Qualcomm Atheros, Inc. + * under proprietary terms before Copyright ownership was assigned + * to the Linux Foundation. + */ #ifndef WMA_STUB #define WMA_STUB diff --git a/CORE/SERVICES/WMI/wmi_tlv_helper.c b/CORE/SERVICES/WMI/wmi_tlv_helper.c index eaa8d6d431c5..38ba8bc7c2ba 100644 --- a/CORE/SERVICES/WMI/wmi_tlv_helper.c +++ b/CORE/SERVICES/WMI/wmi_tlv_helper.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* wmi_tlv_platform.c file will be different for different components like Pronto firmware, Pronto windows host driver, Pronto LA host driver because their memory management functions are different */ #include "wmi_tlv_platform.c" diff --git a/CORE/SERVICES/WMI/wmi_tlv_platform.c b/CORE/SERVICES/WMI/wmi_tlv_platform.c index e757b873e21f..0f105096a10c 100644 --- a/CORE/SERVICES/WMI/wmi_tlv_platform.c +++ b/CORE/SERVICES/WMI/wmi_tlv_platform.c @@ -24,7 +24,21 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - +/* + * Copyright (c) 2013 Qualcomm Atheros,Inc. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ /* * LMAC offload interface functions for WMI TLV Interface diff --git a/CORE/SERVICES/WMI/wmi_unified.c b/CORE/SERVICES/WMI/wmi_unified.c index 35d8645cf534..ea96411f46e0 100644 --- a/CORE/SERVICES/WMI/wmi_unified.c +++ b/CORE/SERVICES/WMI/wmi_unified.c @@ -25,6 +25,7 @@ * to the Linux Foundation. */ + /* * Host WMI unified implementation */ diff --git a/CORE/SERVICES/WMI/wmi_unified_priv.h b/CORE/SERVICES/WMI/wmi_unified_priv.h index 88ca0d634dad..7586d3c7ff82 100644 --- a/CORE/SERVICES/WMI/wmi_unified_priv.h +++ b/CORE/SERVICES/WMI/wmi_unified_priv.h @@ -25,6 +25,7 @@ * to the Linux Foundation. */ + /* * This file contains the API definitions for the Unified Wireless Module Interface (WMI). */ diff --git a/CORE/SME/inc/btcApi.h b/CORE/SME/inc/btcApi.h index c2cfb22c76d5..2bb9a39737ba 100644 --- a/CORE/SME/inc/btcApi.h +++ b/CORE/SME/inc/btcApi.h @@ -24,16 +24,12 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /****************************************************************************** * * Name: btcApi.h * * Description: BTC Events Layer API definitions. * -* Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. -* Qualcomm Technologies Confidential and Proprietary. -* ******************************************************************************/ #ifndef __BTC_API_H__ diff --git a/CORE/SME/inc/ccmApi.h b/CORE/SME/inc/ccmApi.h index 523e0e1569e3..317d4559733e 100644 --- a/CORE/SME/inc/ccmApi.h +++ b/CORE/SME/inc/ccmApi.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /** ------------------------------------------------------------------------- * ------------------------------------------------------------------------- * \file ccmApi.h @@ -33,9 +32,6 @@ $Id$ - - Copyright (C) 2006 Airgo Networks, Incorporated - This file contains all the interfaces for thge Platform Abstration Layer functions. It is intended to be included in all modules that are using the PAL interfaces. diff --git a/CORE/SME/inc/csrApi.h b/CORE/SME/inc/csrApi.h index b60564230772..e6e8ec3cc333 100644 --- a/CORE/SME/inc/csrApi.h +++ b/CORE/SME/inc/csrApi.h @@ -24,8 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - - /** ------------------------------------------------------------------------- * ------------------------------------------------------------------------- * \file csrApi.h @@ -463,10 +461,6 @@ typedef enum eCSR_ROAM_UNPROT_MGMT_FRAME_IND, #endif -#ifdef FEATURE_CESIUM_PROPRIETARY - eCSR_ROAM_IBSS_PEER_INFO_COMPLETE, -#endif - #if defined(FEATURE_WLAN_CCX) && defined(FEATURE_WLAN_CCX_UPLOAD) eCSR_ROAM_TSM_IE_IND, eCSR_ROAM_CCKM_PREAUTH_NOTIFY, @@ -560,11 +554,11 @@ typedef enum eCSR_ROAM_RESULT_TEARDOWN_TDLS_PEER_IND, eCSR_ROAM_RESULT_DELETE_ALL_TDLS_PEER_IND, eCSR_ROAM_RESULT_LINK_ESTABLISH_REQ_RSP, +#ifdef QCA_WIFI_2_0 + eCSR_ROAM_RESULT_TDLS_SHOULD_DISCOVER, + eCSR_ROAM_RESULT_TDLS_SHOULD_TEARDOWN, + eCSR_ROAM_RESULT_TDLS_SHOULD_PEER_DISCONNECTED, #endif - -#ifdef FEATURE_CESIUM_PROPRIETARY - eCSR_ROAM_RESULT_IBSS_PEER_INFO_SUCCESS, - eCSR_ROAM_RESULT_IBSS_PEER_INFO_FAILED, #endif }eCsrRoamResult; diff --git a/CORE/SME/inc/csrInternal.h b/CORE/SME/inc/csrInternal.h index 53dfe1a3272d..a86bde4b070a 100644 --- a/CORE/SME/inc/csrInternal.h +++ b/CORE/SME/inc/csrInternal.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /** ------------------------------------------------------------------------- * ------------------------------------------------------------------------- * @@ -1424,9 +1423,4 @@ eHalStatus csrHandoffRequest(tpAniSirGlobal pMac, tCsrHandoffRequest *pHandoffIn tANI_BOOLEAN csrRoamIsStaMode(tpAniSirGlobal pMac, tANI_U32 sessionId); #endif -#if defined WLAN_FEATURE_RELIABLE_MCAST -eHalStatus csrEnableRMC(tpAniSirGlobal pMac, tANI_U32 sessionId); -eHalStatus csrDisableRMC(tpAniSirGlobal pMac, tANI_U32 sessionId); -#endif /* WLAN_FEATURE_RELIABLE_MCAST */ - #endif diff --git a/CORE/SME/inc/csrLinkList.h b/CORE/SME/inc/csrLinkList.h index 1531ed4dda79..e932fbfcfe91 100644 --- a/CORE/SME/inc/csrLinkList.h +++ b/CORE/SME/inc/csrLinkList.h @@ -24,15 +24,12 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /** ------------------------------------------------------------------------- * ------------------------------------------------------------------------- * \file csrLinkList.h Exports and types for the Common link list interfaces. - Copyright (C) 2006 Airgo Networks, Incorporated - ========================================================================== */ #ifndef CSR_LINK_LIST_H__ #define CSR_LINK_LIST_H__ diff --git a/CORE/SME/inc/csrNeighborRoam.h b/CORE/SME/inc/csrNeighborRoam.h index 4805f1367330..1c78207c0667 100644 --- a/CORE/SME/inc/csrNeighborRoam.h +++ b/CORE/SME/inc/csrNeighborRoam.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /** ------------------------------------------------------------------------- * ------------------------------------------------------------------------- * @@ -34,8 +33,6 @@ Exports and types for the neighbor roaming algorithm which is sepcifically designed for Android. - Copyright (C) 2006 Airgo Networks, Incorporated - ========================================================================== */ #ifndef CSR_NEIGHBOR_ROAM_H #define CSR_NEIGHBOR_ROAM_H diff --git a/CORE/SME/inc/csrSupport.h b/CORE/SME/inc/csrSupport.h index f770fc1948c8..e4e2901c01ec 100644 --- a/CORE/SME/inc/csrSupport.h +++ b/CORE/SME/inc/csrSupport.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /** ------------------------------------------------------------------------- * ------------------------------------------------------------------------- * @@ -33,8 +32,6 @@ Exports and types for the Common Scan and Roaming supporting interfaces. - Copyright (C) 2006 Airgo Networks, Incorporated - ========================================================================== */ #ifndef CSR_SUPPORT_H__ #define CSR_SUPPORT_H__ diff --git a/CORE/SME/inc/oemDataApi.h b/CORE/SME/inc/oemDataApi.h index 7da6c9bcc047..a2446dcdb439 100644 --- a/CORE/SME/inc/oemDataApi.h +++ b/CORE/SME/inc/oemDataApi.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifdef FEATURE_OEM_DATA_SUPPORT /** ------------------------------------------------------------------------- * @@ -35,9 +34,6 @@ Exports and types for the Common OEM DATA REQ/RSP Module interfaces. - Copyright (C) 2010 Qualcomm Technologies, Inc. - - ========================================================================== */ #ifndef __OEM_DATA_API_H__ @@ -48,7 +44,7 @@ #ifndef OEM_DATA_REQ_SIZE #ifdef QCA_WIFI_2_0 -#define OEM_DATA_REQ_SIZE 276 +#define OEM_DATA_REQ_SIZE 280 #else #define OEM_DATA_REQ_SIZE 134 #endif @@ -56,7 +52,7 @@ #ifndef OEM_DATA_RSP_SIZE #ifdef QCA_WIFI_2_0 -#define OEM_DATA_RSP_SIZE 1720 +#define OEM_DATA_RSP_SIZE 1724 #else #define OEM_DATA_RSP_SIZE 1968 #endif diff --git a/CORE/SME/inc/oemDataInternal.h b/CORE/SME/inc/oemDataInternal.h index cedfc11f32c7..5c1f3da43533 100644 --- a/CORE/SME/inc/oemDataInternal.h +++ b/CORE/SME/inc/oemDataInternal.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifdef FEATURE_OEM_DATA_SUPPORT /** ------------------------------------------------------------------------- * @@ -35,8 +34,6 @@ Exports and types for the Common OEM DATA REQ/RSP Module interfaces. - Copyright (C) 2010 Qualcomm Technologies, Inc. - ========================================================================== */ diff --git a/CORE/SME/inc/p2p_Api.h b/CORE/SME/inc/p2p_Api.h index da9368b4e4a0..5d56951ed54e 100644 --- a/CORE/SME/inc/p2p_Api.h +++ b/CORE/SME/inc/p2p_Api.h @@ -24,16 +24,12 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /****************************************************************************** * * Name: p2p_Api.h * * Description: P2P FSM defines. * -* Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. -* Qualcomm Technologies Confidential and Proprietary. -* ******************************************************************************/ #ifndef __P2P_API_H__ diff --git a/CORE/SME/inc/pmc.h b/CORE/SME/inc/pmc.h index 3c82a54354af..3d3e97b23aa5 100644 --- a/CORE/SME/inc/pmc.h +++ b/CORE/SME/inc/pmc.h @@ -24,17 +24,12 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /****************************************************************************** * * Name: pmc.h * * Description: Power Management Control (PMC) internal definitions. * -* Copyright 2008 (c) Qualcomm Technologies, Inc. - All Rights Reserved. -* Qualcomm Technologies Confidential and Proprietary. -* ******************************************************************************/ #ifndef __PMC_H__ @@ -348,6 +343,7 @@ typedef struct sPsOffloadPerSessionInfo #ifdef FEATURE_WLAN_TDLS v_BOOL_t isTdlsPowerSaveProhibited; #endif + tANI_BOOLEAN UapsdEnabled; }tPsOffloadPerSessionInfo,*tpPsOffloadPerSessionInfo; typedef struct sPmcOffloadInfo diff --git a/CORE/SME/inc/pmcApi.h b/CORE/SME/inc/pmcApi.h index 17b782b448cb..79db57192625 100644 --- a/CORE/SME/inc/pmcApi.h +++ b/CORE/SME/inc/pmcApi.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /****************************************************************************** * @@ -35,12 +34,6 @@ * Description: Power Management Control (PMC) API definitions. -* Copyright 2008 (c) Qualcomm Technologies, Inc. - -* All Rights Reserved. - -* Qualcomm Technologies Confidential and Proprietary. - * ******************************************************************************/ diff --git a/CORE/SME/inc/smeInside.h b/CORE/SME/inc/smeInside.h index f95e0ad4c003..33690b15978e 100644 --- a/CORE/SME/inc/smeInside.h +++ b/CORE/SME/inc/smeInside.h @@ -24,8 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - - #if !defined( __SMEINSIDE_H ) #define __SMEINSIDE_H @@ -36,10 +34,6 @@ \brief prototype for SME structures and APIs used insside SME - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ /* $Header$ */ diff --git a/CORE/SME/inc/smeInternal.h b/CORE/SME/inc/smeInternal.h index 15633486c66d..23a172d3965f 100644 --- a/CORE/SME/inc/smeInternal.h +++ b/CORE/SME/inc/smeInternal.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined( __SMEINTERNAL_H ) #define __SMEINTERNAL_H @@ -35,10 +34,6 @@ \brief prototype for SME internal structures and APIs used for SME and MAC - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ /* $Header$ */ @@ -120,20 +115,6 @@ typedef enum eSmeState #define SME_IS_START(pMac) (SME_STATE_STOP != (pMac)->sme.state) #define SME_IS_READY(pMac) (SME_STATE_READY == (pMac)->sme.state) -#ifdef FEATURE_CESIUM_PROPRIETARY - -/* HDD Callback function */ -typedef void(*pIbssPeerInfoCb)(void *pUserData, void *infoParam); - -/* Peer info */ -typedef struct tagSmePeerInfoHddCbkInfo -{ - void *pUserData; - pIbssPeerInfoCb peerInfoCbk; -}tSmePeerInfoHddCbkInfo; -#endif /* FEATURE_CESIUM_PROPRIETARY */ - - typedef struct tagSmeStruct { eSmeState state; @@ -153,12 +134,12 @@ typedef struct tagSmeStruct tDblLinkList smeScanCmdPendingList; //active scan command list tDblLinkList smeScanCmdActiveList; -#ifdef FEATURE_CESIUM_PROPRIETARY - tSmePeerInfoHddCbkInfo peerInfoParams; -#endif /* FEATURE_CESIUM_PROPRIETARY */ #ifdef FEATURE_WLAN_DIAG_SUPPORT_CSR vos_event_wlan_status_payload_type eventPayload; #endif +#ifdef FEATURE_WLAN_CH_AVOID + void (*pChAvoidNotificationCb) (void *hdd_context, void *indi_param); +#endif /* FEATURE_WLAN_CH_AVOID */ } tSmeStruct, *tpSmeStruct; diff --git a/CORE/SME/inc/smeQosInternal.h b/CORE/SME/inc/smeQosInternal.h index 4defd26e88a9..0e30f7e52461 100644 --- a/CORE/SME/inc/smeQosInternal.h +++ b/CORE/SME/inc/smeQosInternal.h @@ -25,7 +25,6 @@ * to the Linux Foundation. */ - #if !defined( __SMEQOSINTERNAL_H ) #define __SMEQOSINTERNAL_H @@ -36,10 +35,6 @@ \brief prototype for SME QoS APIs - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ /* $Header$ */ diff --git a/CORE/SME/inc/smeRrmInternal.h b/CORE/SME/inc/smeRrmInternal.h index 7ea22918f3b0..f312cfa114b7 100644 --- a/CORE/SME/inc/smeRrmInternal.h +++ b/CORE/SME/inc/smeRrmInternal.h @@ -24,7 +24,8 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - +/* + * */ #if !defined( __SMERRMINTERNAL_H ) #define __SMERRMINTERNAL_H @@ -35,10 +36,6 @@ \brief prototype for SME RRM APIs - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ /* $Header$ */ diff --git a/CORE/SME/inc/sme_Api.h b/CORE/SME/inc/sme_Api.h index 50f62c2e5a10..548834fa4287 100644 --- a/CORE/SME/inc/sme_Api.h +++ b/CORE/SME/inc/sme_Api.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined( __SME_API_H ) #define __SME_API_H @@ -35,10 +34,6 @@ \brief prototype for SME APIs - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ /* $Header$ */ @@ -56,9 +51,6 @@ #include "btcApi.h" #include "vos_nvitem.h" #include "p2p_Api.h" -#ifdef FEATURE_CESIUM_PROPRIETARY -#include "smeInternal.h" -#endif #ifdef FEATURE_OEM_DATA_SUPPORT #include "oemDataApi.h" @@ -145,7 +137,7 @@ typedef enum } tSmeFastRoamTrigger; #ifdef QCA_WIFI_2_0 -typedef struct _smeChannelInfo +typedef PACKED_PRE struct PACKED_POST { /* channel id */ tANI_U8 chan_id; @@ -168,7 +160,22 @@ typedef struct _smeChannelInfo /* contains antennamax */ tANI_U32 reg_info_2; } tSmeChannelInfo; -#endif +#ifdef FEATURE_WLAN_TDLS +typedef enum +{ + eSME_TDLS_PEER_STATE_PEERING, + eSME_TDLS_PEER_STATE_CONNECTED, + eSME_TDLS_PEER_STATE_TEARDOWN +} eSmeTdlsPeerState; + +typedef struct _smeTdlsPeerStateParams +{ + tANI_U32 vdevId; + tSirMacAddr peerMacAddr; + tANI_U32 peerState; +} tSmeTdlsPeerStateParams; +#endif /* FEATURE_WLAN_TDLS */ +#endif /* QCA_WIFI_2_0 */ /*------------------------------------------------------------------------- Function declarations and documenation @@ -1605,30 +1612,6 @@ eHalStatus sme_DHCPStartInd( tHalHandle hHal, tANI_U8 device_mode, tANI_U8 *macAddr ); -#ifdef FEATURE_CESIUM_PROPRIETARY -/* --------------------------------------------------------------------------- - - \fn sme_TXFailMonitorStartStopInd - - \brief Indicate FW about TX Fail Monitor Indication` - - \param hHal - The handle returned by macOpen. - - \param tx_fail_count number of failures after which the firmware sends - an indication to host - - \param txFailIndCallback function to be called after receiving TX Fail - indication - \return eHalStatus SUCCESS. - - FAILURE or RESOURCES The API finished and failed. - - -------------------------------------------------------------------------------*/ -eHalStatus sme_TXFailMonitorStartStopInd(tHalHandle hHal, - tANI_U8 tx_fail_count, - void * txFailIndCallback); -#endif /* FEATURE_CESIUM_PROPRIETARY */ - /* --------------------------------------------------------------------------- \fn sme_DHCPStopInd @@ -3067,7 +3050,7 @@ v_U8_t sme_GetTdlsDiscoveryResult(tHalHandle hHal, tSmeTdlsDisResult *disResult, v_U8_t listType); VOS_STATUS sme_StartTdlsLinkSetupReq(tHalHandle hHal, tANI_U8 sessionId, tSirMacAddr peerMac); VOS_STATUS sme_StartTdlsLinkTeardownReq(tHalHandle hHal, tANI_U8 sessionId, tSirMacAddr peerMac); -#endif /* FEATURE_WLAN_TDLS */ +#endif /* FEATURE_WLAN_TDLS_INTERNAL */ eHalStatus sme_UpdateDfsSetting(tHalHandle hHal, tANI_U8 fUpdateEnableDFSChnlScan); /* @@ -3179,28 +3162,6 @@ eHalStatus sme_DelPeriodicTxPtrn(tHalHandle hHal, tSirDelPeriodicTxPtrn void sme_enable_disable_split_scan (tHalHandle hHal, tANI_U8 nNumStaChan, tANI_U8 nNumP2PChan); -#if defined WLAN_FEATURE_RELIABLE_MCAST -/* --------------------------------------------------------------------------- - \fn sme_EnableReliableMcast - \brief Used to enable Reliable Multicast using Leader Based Protocol - setting will not persist over reboots - \param hHal - \param sessionId - \- return eHalStatus - -------------------------------------------------------------------------*/ -eHalStatus sme_EnableReliableMcast(tHalHandle hHal, tANI_U32 sessionId); - -/* --------------------------------------------------------------------------- - \fn sme_DisableReliableMcast - \brief Used to disable Reliable Multicast using Leader Based Protocol - setting will not persist over reboots - \param hHal - \param sessionId - \- return eHalStatus - -------------------------------------------------------------------------*/ -eHalStatus sme_DisableReliableMcast(tHalHandle hHal, tANI_U32 sessionId); -#endif //#if defined WLAN_FEATURE_RELIABLE_MCAST - /* --------------------------------------------------------------------------- \fn sme_SendRateUpdateInd \brief API to Update rate @@ -3210,31 +3171,6 @@ eHalStatus sme_DisableReliableMcast(tHalHandle hHal, tANI_U32 sessionId); ---------------------------------------------------------------------------*/ eHalStatus sme_SendRateUpdateInd(tHalHandle hHal, tSirRateUpdateInd *rateUpdateParams); -#ifdef FEATURE_CESIUM_PROPRIETARY -/* --------------------------------------------------------------------------- - \fn sme_GetIBSSPeerInfo - \brief Used to disable Reliable Multicast using Leader Based Protocol - setting will not persist over reboots - \param hHal - \param ibssPeerInfoReq multicast Group IP address - \- return eHalStatus - -------------------------------------------------------------------------*/ -eHalStatus sme_RequestIBSSPeerInfo(tHalHandle hHal, void *pUserData, - pIbssPeerInfoCb peerInfoCbk, - tANI_BOOLEAN allPeerInfoReqd, - tANI_U8 staIdx); - -/* --------------------------------------------------------------------------- - \fn sme_IBSSRouteTableUpdate - \API to update IBSS Route table in FW. - \param hHal - The handle returned by macOpen - \param pIbssTable - ptr to IBSS table struct - \- return Success or Failiure - -------------------------------------------------------------------------*/ -eHalStatus sme_IBSSRouteTableUpdateInd(tHalHandle hHal, - tAniIbssRouteTable *pIbssTable); -#endif /* FEATURE_CESIUM_PROPRIETARY */ - /* * sme API to trigger fast BSS roam to a given BSSID independent of RSSI * triggers @@ -3329,5 +3265,27 @@ eHalStatus sme_MoveCsrToScanStateForPno (tHalHandle hHal, tANI_U8 sessionId); #ifdef QCA_WIFI_2_0 eHalStatus sme_getChannelInfo(tHalHandle hHal, tANI_U8 chanId, tSmeChannelInfo *chanInfo); -#endif +#ifdef FEATURE_WLAN_TDLS +eHalStatus sme_UpdateFwTdlsState(tHalHandle hHal, void *psmeTdlsParams); +eHalStatus sme_UpdateTdlsPeerState(tHalHandle hHal, + tSmeTdlsPeerStateParams *pPeerStateParams); +#endif /* FEATURE_WLAN_TDLS */ +#endif /* QCA_WIFI_2_0 */ + +#ifdef FEATURE_WLAN_CH_AVOID +/* --------------------------------------------------------------------------- + \fn sme_AddChAvoidCallback + \brief Used to plug in callback function + Which notify channel may not be used with SAP or P2PGO mode. + Notification come from FW. + \param hHal + \param pCallbackfn : callback function pointer should be plugged in + \- return eHalStatus +-------------------------------------------------------------------------*/ +eHalStatus sme_AddChAvoidCallback +( + tHalHandle hHal, + void (*pCallbackfn)(void *hdd_context, void *indi_param) +); +#endif /* FEATURE_WLAN_CH_AVOID */ #endif //#if !defined( __SME_API_H ) diff --git a/CORE/SME/inc/sme_FTApi.h b/CORE/SME/inc/sme_FTApi.h index 1f0bf2c5952e..bcb8df95d32b 100644 --- a/CORE/SME/inc/sme_FTApi.h +++ b/CORE/SME/inc/sme_FTApi.h @@ -24,8 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - - #if !defined( __SME_FTAPI_H ) #define __SME_FTAPI_H @@ -36,10 +34,6 @@ \brief macros and prototype for SME APIs - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ typedef enum eFTIEState { diff --git a/CORE/SME/inc/sme_QosApi.h b/CORE/SME/inc/sme_QosApi.h index 6f4ea849457d..53a92d79f88f 100644 --- a/CORE/SME/inc/sme_QosApi.h +++ b/CORE/SME/inc/sme_QosApi.h @@ -25,7 +25,6 @@ * to the Linux Foundation. */ - #if !defined( __SME_QOSAPI_H ) #define __SME_QOSAPI_H @@ -36,10 +35,6 @@ \brief prototype for SME QoS APIs - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ /* $Header$ */ diff --git a/CORE/SME/inc/sme_RrmApi.h b/CORE/SME/inc/sme_RrmApi.h index 81dee62d10d3..8eb3aa9f060e 100644 --- a/CORE/SME/inc/sme_RrmApi.h +++ b/CORE/SME/inc/sme_RrmApi.h @@ -35,10 +35,6 @@ \brief prototype for SME RRM APIs - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ /* $Header$ */ diff --git a/CORE/SME/inc/sme_Trace.h b/CORE/SME/inc/sme_Trace.h index a89932d29192..35cdf8ccef8b 100644 --- a/CORE/SME/inc/sme_Trace.h +++ b/CORE/SME/inc/sme_Trace.h @@ -1,3 +1,29 @@ +/* + * Copyright (c) 2013, The Linux Foundation. All rights reserved. + * + * Previously licensed under the ISC license by Qualcomm Atheros, Inc. + * + * + * Permission to use, copy, modify, and/or distribute this software for + * any purpose with or without fee is hereby granted, provided that the + * above copyright notice and this permission notice appear in all + * copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL + * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE + * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +/* + * This file was originally distributed by Qualcomm Atheros, Inc. + * under proprietary terms before Copyright ownership was assigned + * to the Linux Foundation. + */ /*********************************************************************** sme_Trace.h diff --git a/CORE/SME/inc/smsDebug.h b/CORE/SME/inc/smsDebug.h index a9a6226ff390..3cc67c727610 100644 --- a/CORE/SME/inc/smsDebug.h +++ b/CORE/SME/inc/smsDebug.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /** ------------------------------------------------------------------------- * ------------------------------------------------------------------------- * @@ -33,8 +32,6 @@ Define debug log interface for SMS. - Copyright (C) 2006 Airgo Networks, Incorporated - ========================================================================== */ #ifndef SMS_DEBUG_H__ diff --git a/CORE/SME/inc/wlan_ps_wow_diag.h b/CORE/SME/inc/wlan_ps_wow_diag.h index 620f69a59dc2..5c3bc8544866 100644 --- a/CORE/SME/inc/wlan_ps_wow_diag.h +++ b/CORE/SME/inc/wlan_ps_wow_diag.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef _WLAN_PS_WOW_DIAG_H_ #define _WLAN_PS_WOW_DIAG_H_ diff --git a/CORE/SME/src/QoS/sme_Qos.c b/CORE/SME/src/QoS/sme_Qos.c index 7a010fd898d2..daf9db6626c2 100644 --- a/CORE/SME/src/QoS/sme_Qos.c +++ b/CORE/SME/src/QoS/sme_Qos.c @@ -24,17 +24,12 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /**========================================================================= \file sme_Qos.c \brief implementation for SME QoS APIs - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ /* $Header$ */ /*-------------------------------------------------------------------------- @@ -2945,7 +2940,8 @@ sme_QosStatusType sme_QosSetup(tpAniSirGlobal pMac, { // ACM is enabled for this AC so we must send an AddTS if(pTspec_Info->ts_info.psb && - (!pMac->pmc.uapsdEnabled )) + !(pMac->psOffloadEnabled && pMac->pmcOffloadInfo.pmc[sessionId].UapsdEnabled) + && (!pMac->pmc.uapsdEnabled )) { VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO_HIGH, "%s: %d: Request is looking for APSD but PMC doesn't " @@ -3070,7 +3066,8 @@ sme_QosStatusType sme_QosSetup(tpAniSirGlobal pMac, // application is looking for APSD // but it is not enabled on this AC // so we need to reassociate - if(pMac->pmc.uapsdEnabled) + if(pMac->pmc.uapsdEnabled || (pMac->psOffloadEnabled + && pMac->pmcOffloadInfo.pmc[sessionId].UapsdEnabled)) { VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO_HIGH, "%s: %d: On session %d reassoc needed " diff --git a/CORE/SME/src/btc/btcApi.c b/CORE/SME/src/btc/btcApi.c index fbdea584afd7..0da0cc789bec 100644 --- a/CORE/SME/src/btc/btcApi.c +++ b/CORE/SME/src/btc/btcApi.c @@ -24,16 +24,12 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /****************************************************************************** * * Name: btcApi.c * * Description: Routines that make up the BTC API. * -* Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. -* Qualcomm Technologies Confidential and Proprietary. -* ******************************************************************************/ #include "wlan_qct_wda.h" #ifndef WLAN_MDM_CODE_REDUCTION_OPT diff --git a/CORE/SME/src/ccm/ccmApi.c b/CORE/SME/src/ccm/ccmApi.c index a2772559c060..c63fc4bf8071 100644 --- a/CORE/SME/src/ccm/ccmApi.c +++ b/CORE/SME/src/ccm/ccmApi.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #include "palTypes.h" #include "wniApi.h" /* WNI_CFG_SET_REQ */ #include "sirParams.h" /* tSirMbMsg */ diff --git a/CORE/SME/src/ccm/ccmLogDump.c b/CORE/SME/src/ccm/ccmLogDump.c index 0145fd50699b..07d0c68c26d9 100644 --- a/CORE/SME/src/ccm/ccmLogDump.c +++ b/CORE/SME/src/ccm/ccmLogDump.c @@ -24,15 +24,11 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /*============================================================================ ccmLogDump.c Implements the dump commands specific to the ccm module. -Copyright (c) 2007 Qualcomm Technologies, Inc. -All Rights Reserved. -Qualcomm Technologies Confidential and Proprietary ============================================================================*/ diff --git a/CORE/SME/src/csr/csrApiRoam.c b/CORE/SME/src/csr/csrApiRoam.c index 8d8f9cb859b1..776b9bff9ac2 100644 --- a/CORE/SME/src/csr/csrApiRoam.c +++ b/CORE/SME/src/csr/csrApiRoam.c @@ -32,9 +32,6 @@ Implementation for the Common Roaming interfaces. - Copyright (C) 2008 Qualcomm Technologies, Inc. - - ========================================================================== */ /*=========================================================================== EDIT HISTORY FOR FILE @@ -281,9 +278,6 @@ static void csrRoamDeInitGlobals(tpAniSirGlobal pMac) eHalStatus csrOpen(tpAniSirGlobal pMac) { eHalStatus status = eHAL_STATUS_SUCCESS; - static uNvTables nvTables; - VOS_STATUS vosStatus = VOS_STATUS_SUCCESS; - v_REGDOMAIN_t regId; tANI_U32 i; do @@ -305,40 +299,6 @@ eHalStatus csrOpen(tpAniSirGlobal pMac) break; if(!HAL_STATUS_SUCCESS(csrLLOpen(pMac->hHdd, &pMac->roam.roamCmdPendingList))) break; - vosStatus = vos_nv_readDefaultCountryTable( &nvTables ); - if ( VOS_IS_STATUS_SUCCESS(vosStatus) ) - { - vos_mem_copy(pMac->scan.countryCodeDefault, nvTables.defaultCountryTable.countryCode, - WNI_CFG_COUNTRY_CODE_LEN); - status = eHAL_STATUS_SUCCESS; - } - else - { - smsLog( pMac, LOGE, FL(" fail to get NV_FIELD_IMAGE") ); - //hardcoded for now - pMac->scan.countryCodeDefault[0] = 'U'; - pMac->scan.countryCodeDefault[1] = 'S'; - pMac->scan.countryCodeDefault[2] = 'I'; - //status = eHAL_STATUS_SUCCESS; - } - smsLog( pMac, LOG1, FL(" country Code from nvRam %.2s"), pMac->scan.countryCodeDefault ); - - if (!('0' == pMac->scan.countryCodeDefault[0] && - '0' == pMac->scan.countryCodeDefault[1])) - { - csrGetRegulatoryDomainForCountry(pMac, pMac->scan.countryCodeDefault, - ®Id, COUNTRY_NV); - } - else - { - regId = REGDOMAIN_WORLD; - } - WDA_SetRegDomain(pMac, regId, eSIR_TRUE); - pMac->scan.domainIdDefault = regId; - pMac->scan.domainIdCurrent = pMac->scan.domainIdDefault; - vos_mem_copy(pMac->scan.countryCodeCurrent, pMac->scan.countryCodeDefault, - WNI_CFG_COUNTRY_CODE_LEN); - status = csrInitGetChannels( pMac ); }while(0); return (status); @@ -349,6 +309,7 @@ eHalStatus csr_init_chan_list(tpAniSirGlobal mac) eHalStatus status; static uNvTables nv_tbl; v_REGDOMAIN_t reg_id; + v_CountryInfoSource_t source = COUNTRY_INIT; if (vos_nv_readDefaultCountryTable(&nv_tbl) == VOS_STATUS_SUCCESS) { vos_mem_copy(mac->scan.countryCodeDefault, @@ -363,9 +324,15 @@ eHalStatus csr_init_chan_list(tpAniSirGlobal mac) } smsLog(mac, LOG1, FL("country Code from nvRam %.2s"), mac->scan.countryCodeDefault); + + if ('0' == mac->scan.countryCodeDefault[0] && + '0' == mac->scan.countryCodeDefault[1]) { + source = COUNTRY_QUERY; + } + status = csrGetRegulatoryDomainForCountry(mac, mac->scan.countryCodeDefault, - ®_id, COUNTRY_IE); + ®_id, source); if (status != eHAL_STATUS_SUCCESS) return status; @@ -17171,71 +17138,6 @@ eHalStatus csrHandoffRequest(tpAniSirGlobal pMac, } #endif /* WLAN_FEATURE_ROAM_SCAN_OFFLOAD */ -#if defined WLAN_FEATURE_RELIABLE_MCAST -eHalStatus csrEnableRMC(tpAniSirGlobal pMac, tANI_U32 sessionId) -{ - tSirSetRMCReq *pMsg = NULL; - eHalStatus status = eHAL_STATUS_SUCCESS; - tCsrRoamSession *pSession = CSR_GET_SESSION(pMac, sessionId); - - if (!pSession) - { - smsLog(pMac, LOGE, FL(" session %d not found "), sessionId); - return eHAL_STATUS_FAILURE; - } - - pMsg = vos_mem_malloc(sizeof(tSirSetRMCReq)); - if (NULL == pMsg) - { - vos_mem_set((void *)pMsg, sizeof(tSirSetRMCReq), 0); - pMsg->msgType = eWNI_SME_ENABLE_RMC_REQ; - pMsg->msgLen = sizeof(tSirSetRMCReq); - vos_mem_copy((v_U8_t *)pMsg->mcastTransmitter, - &pSession->selfMacAddr, sizeof(tSirMacAddr)); - - status = palSendMBMessage(pMac->hHdd, pMsg); - if (!HAL_STATUS_SUCCESS(status)) - { - smsLog(pMac, LOGE, FL(" csr enable RMC Post MSG Fail %d "), status); - //pMsg is freed by palSendMBMessage - } - } - return status; -} - -eHalStatus csrDisableRMC(tpAniSirGlobal pMac, tANI_U32 sessionId) -{ - tSirSetRMCReq *pMsg = NULL; - eHalStatus status = eHAL_STATUS_SUCCESS; - tCsrRoamSession *pSession = CSR_GET_SESSION(pMac, sessionId); - - if (!pSession) - { - smsLog(pMac, LOGE, FL(" session %d not found "), sessionId); - return eHAL_STATUS_FAILURE; - } - - pMsg = vos_mem_malloc(sizeof(tSirSetRMCReq)); - if (NULL == pMsg) - { - vos_mem_set((void *)pMsg, sizeof(tSirSetRMCReq), 0); - pMsg->msgType = eWNI_SME_DISABLE_RMC_REQ; - pMsg->msgLen = sizeof(tSirSetRMCReq); - vos_mem_copy((v_U8_t *)pMsg->mcastTransmitter, - &pSession->selfMacAddr, sizeof(tSirMacAddr)); - - status = palSendMBMessage(pMac->hHdd, pMsg); - if (!HAL_STATUS_SUCCESS(status)) - { - smsLog(pMac, LOGE, FL(" csr disable RMC Post MSG Fail %d "), status); - //pMsg is freed by palSendMBMessage - } - } - return status; -} - -#endif /* defined WLAN_FEATURE_RELIABLE_MCAST */ - #if defined(FEATURE_WLAN_CCX) && defined(FEATURE_WLAN_CCX_UPLOAD) /* --------------------------------------------------------------------------- \fn csrSetCCKMIe diff --git a/CORE/SME/src/csr/csrApiScan.c b/CORE/SME/src/csr/csrApiScan.c index 6c6303accc6e..61f9b464332b 100644 --- a/CORE/SME/src/csr/csrApiScan.c +++ b/CORE/SME/src/csr/csrApiScan.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /** ------------------------------------------------------------------------- * ------------------------------------------------------------------------- * @@ -5626,7 +5625,7 @@ eHalStatus csrSendMBScanReq( tpAniSirGlobal pMac, tANI_U16 sessionId, for(i = 0; i < pMsg->channelList.numChannels; i++) { - smsLog(pMac, LOG3, FL("channelNumber[%d]= %d"), i, pMsg->channelList.channelNumber[i]); + smsLog(pMac, LOG1, FL("channelNumber[%d]= %d"), i, pMsg->channelList.channelNumber[i]); } if(HAL_STATUS_SUCCESS(status)) diff --git a/CORE/SME/src/csr/csrCmdProcess.c b/CORE/SME/src/csr/csrCmdProcess.c index 41d5f26fc06e..b90b092535f8 100644 --- a/CORE/SME/src/csr/csrCmdProcess.c +++ b/CORE/SME/src/csr/csrCmdProcess.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /** ------------------------------------------------------------------------- * ------------------------------------------------------------------------- * \file csrCmdProcess.c diff --git a/CORE/SME/src/csr/csrInsideApi.h b/CORE/SME/src/csr/csrInsideApi.h index b1d545ec5bc4..728ead15536f 100644 --- a/CORE/SME/src/csr/csrInsideApi.h +++ b/CORE/SME/src/csr/csrInsideApi.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /** ------------------------------------------------------------------------- * ------------------------------------------------------------------------- * diff --git a/CORE/SME/src/csr/csrLinkList.c b/CORE/SME/src/csr/csrLinkList.c index a2f1422de400..6de732f53e52 100644 --- a/CORE/SME/src/csr/csrLinkList.c +++ b/CORE/SME/src/csr/csrLinkList.c @@ -24,14 +24,12 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /** ------------------------------------------------------------------------- * ------------------------------------------------------------------------- * \file csrLinkList.c Implementation for the Common link list interfaces. - Copyright (C) 2006 Airgo Networks, Incorporated ========================================================================== */ #include "palApi.h" diff --git a/CORE/SME/src/csr/csrLogDump.c b/CORE/SME/src/csr/csrLogDump.c index 9885ade7acb9..8f20c8493226 100644 --- a/CORE/SME/src/csr/csrLogDump.c +++ b/CORE/SME/src/csr/csrLogDump.c @@ -24,11 +24,7 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /*============================================================================ -Copyright (c) 2007 Qualcomm Technologies, Inc. -All Rights Reserved. -Qualcomm Technologies Confidential and Proprietary csrLogDump.c Implements the dump commands specific to the csr module. ============================================================================*/ diff --git a/CORE/SME/src/csr/csrNeighborRoam.c b/CORE/SME/src/csr/csrNeighborRoam.c index d61113cdf90f..6de4bc73dbd8 100644 --- a/CORE/SME/src/csr/csrNeighborRoam.c +++ b/CORE/SME/src/csr/csrNeighborRoam.c @@ -24,7 +24,8 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - +/* + * */ /** ------------------------------------------------------------------------- * ------------------------------------------------------------------------- * @@ -33,9 +34,6 @@ Implementation for the simple roaming algorithm for 802.11r Fast transitions and Legacy roaming for Android platform. - Copyright (C) 2010 Qualcomm Technologies, Inc. - - ========================================================================== */ /*=========================================================================== diff --git a/CORE/SME/src/csr/csrTdlsProcess.c b/CORE/SME/src/csr/csrTdlsProcess.c index cca0add5a3fe..c41e836538c9 100644 --- a/CORE/SME/src/csr/csrTdlsProcess.c +++ b/CORE/SME/src/csr/csrTdlsProcess.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /** ------------------------------------------------------------------------- * ------------------------------------------------------------------------- * @@ -33,12 +32,6 @@ Implementation for the TDLS interface to PE. - Copyright (c) 2010 Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Proprietary and Confidential. - - - ========================================================================== */ #ifdef FEATURE_WLAN_TDLS @@ -1274,6 +1267,56 @@ eHalStatus tdlsMsgProcessor(tpAniSirGlobal pMac, v_U16_t msgType, break ; } +#endif +#ifdef QCA_WIFI_2_0 + case eWNI_SME_TDLS_SHOULD_DISCOVER: + { + tSirTdlsEventNotify *tevent = (tSirTdlsEventNotify *) pMsgBuf; + tCsrRoamInfo roamInfo = {0}; + vos_mem_copy(&roamInfo.peerMac, tevent->peerMac, + sizeof(tSirMacAddr)); + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, + "%s: eWNI_SME_TDLS_SHOULD_DISCOVER for peer mac: " + MAC_ADDRESS_STR " peer_reason: %d", + __func__, MAC_ADDR_ARRAY(tevent->peerMac), + tevent->peer_reason); + csrRoamCallCallback(pMac, tevent->sessionId, &roamInfo, 0, + eCSR_ROAM_TDLS_STATUS_UPDATE, + eCSR_ROAM_RESULT_TDLS_SHOULD_DISCOVER); + break; + } + case eWNI_SME_TDLS_SHOULD_TEARDOWN: + { + tSirTdlsEventNotify *tevent = (tSirTdlsEventNotify *) pMsgBuf; + tCsrRoamInfo roamInfo = {0}; + vos_mem_copy(&roamInfo.peerMac, tevent->peerMac, + sizeof(tSirMacAddr)); + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, + "%s: eWNI_SME_TDLS_SHOULD_TEARDOWN for peer mac: " + MAC_ADDRESS_STR " peer_reason: %d", + __func__, MAC_ADDR_ARRAY(tevent->peerMac), + tevent->peer_reason); + csrRoamCallCallback(pMac, tevent->sessionId, &roamInfo, 0, + eCSR_ROAM_TDLS_STATUS_UPDATE, + eCSR_ROAM_RESULT_TDLS_SHOULD_TEARDOWN); + break; + } + case eWNI_SME_TDLS_PEER_DISCONNECTED: + { + tSirTdlsEventNotify *tevent = (tSirTdlsEventNotify *) pMsgBuf; + tCsrRoamInfo roamInfo = {0}; + vos_mem_copy(&roamInfo.peerMac, tevent->peerMac, + sizeof(tSirMacAddr)); + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, + "%s: eWNI_SME_TDLS_PEER_DISCONNECTED for peer mac: " + MAC_ADDRESS_STR " peer_reason: %d", + __func__, MAC_ADDR_ARRAY(tevent->peerMac), + tevent->peer_reason); + csrRoamCallCallback(pMac, tevent->sessionId, &roamInfo, 0, + eCSR_ROAM_TDLS_STATUS_UPDATE, + eCSR_ROAM_RESULT_TDLS_SHOULD_PEER_DISCONNECTED); + break; + } #endif default: { diff --git a/CORE/SME/src/csr/csrUtil.c b/CORE/SME/src/csr/csrUtil.c index 6e4859aeaad3..b776431bbf0f 100644 --- a/CORE/SME/src/csr/csrUtil.c +++ b/CORE/SME/src/csr/csrUtil.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /** ------------------------------------------------------------------------- * ------------------------------------------------------------------------- * diff --git a/CORE/SME/src/oemData/oemDataApi.c b/CORE/SME/src/oemData/oemDataApi.c index 3b422a294f40..8d332af60470 100644 --- a/CORE/SME/src/oemData/oemDataApi.c +++ b/CORE/SME/src/oemData/oemDataApi.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifdef FEATURE_OEM_DATA_SUPPORT /** ------------------------------------------------------------------------- * ------------------------------------------------------------------------- * @@ -34,9 +33,6 @@ Implementation for the OEM DATA REQ/RSP interfaces. - Copyright (C) 2010 Qualcomm Technologies, Inc. - - ========================================================================== */ #include "aniGlobal.h" #include "oemDataApi.h" diff --git a/CORE/SME/src/p2p/p2p_Api.c b/CORE/SME/src/p2p/p2p_Api.c index 52113b220619..5a65dd1cc361 100644 --- a/CORE/SME/src/p2p/p2p_Api.c +++ b/CORE/SME/src/p2p/p2p_Api.c @@ -25,13 +25,6 @@ * to the Linux Foundation. */ - -/* - * Copyright (c) 2008 Qualcomm Technologies, Inc. All Rights Reserved. - * Qualcomm Technologies Confidential and Proprietary - */ - - #include "sme_Api.h" #include "smsDebug.h" #include "csrInsideApi.h" diff --git a/CORE/SME/src/pmc/pmc.c b/CORE/SME/src/pmc/pmc.c index e9020b639ddc..de1524dbecea 100644 --- a/CORE/SME/src/pmc/pmc.c +++ b/CORE/SME/src/pmc/pmc.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /****************************************************************************** * * Name: pmc.c @@ -32,10 +31,6 @@ * Description: Power Management Control (PMC) processing routines. * -* Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. -* Qualcomm Technologies Confidential and Proprietary. -* -* ******************************************************************************/ #include "palTypes.h" @@ -2792,6 +2787,9 @@ eHalStatus pmcOffloadOpenPerSession(tHalHandle hHal, tANI_U32 sessionId) FL("Cannot initialize device state update ind callback list")); return eHAL_STATUS_FAILURE; } + + pmc->UapsdEnabled = TRUE; + return eHAL_STATUS_SUCCESS; } diff --git a/CORE/SME/src/pmc/pmcApi.c b/CORE/SME/src/pmc/pmcApi.c index ec2ae65baf65..5d9691e849e8 100644 --- a/CORE/SME/src/pmc/pmcApi.c +++ b/CORE/SME/src/pmc/pmcApi.c @@ -24,17 +24,12 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /****************************************************************************** * * Name: pmcApi.c * * Description: Routines that make up the Power Management Control (PMC) API. * -* Copyright 2008 (c) Qualcomm Technologies, Inc. -* All Rights Reserved. -* Qualcomm Technologies Confidential and Proprietary. -* ******************************************************************************/ #include "palTypes.h" @@ -2172,14 +2167,14 @@ eHalStatus pmcWowlAddBcastPattern ( log_ptr->pattern_mask_size = pattern->ucPatternMaskSize; vos_mem_copy(log_ptr->pattern, pattern->ucPattern, - SIR_WOWL_BCAST_PATTERN_MAX_SIZE); - /* 1 bit in the pattern mask denotes 1 byte of pattern hence pattern mask size is 1/8 */ + pattern->ucPatternSize); + /* 1 bit in the pattern mask denotes 1 byte of pattern. */ vos_mem_copy(log_ptr->pattern_mask, pattern->ucPatternMask, - SIR_WOWL_BCAST_PATTERN_MAX_SIZE >> 3); + pattern->ucPatternMaskSize); } + //The same macro frees the memory. WLAN_VOS_DIAG_LOG_REPORT(log_ptr); - WLAN_VOS_DIAG_LOG_FREE(log_ptr); #endif @@ -3389,6 +3384,7 @@ eHalStatus pmcSetBatchScanReq(tHalHandle hHal, tSirSetBatchScanReq *pRequest, pMac->pmc.setBatchScanReqCallback = callbackRoutine; pMac->pmc.setBatchScanReqCallbackContext = callbackContext; + pRequestBuf->sessionId = sessionId; pRequestBuf->scanFrequency = pRequest->scanFrequency; pRequestBuf->numberOfScansToBatch = pRequest->numberOfScansToBatch; pRequestBuf->bestNetwork = pRequest->bestNetwork; diff --git a/CORE/SME/src/pmc/pmcLogDump.c b/CORE/SME/src/pmc/pmcLogDump.c index f0bf73f39b40..98529a659002 100644 --- a/CORE/SME/src/pmc/pmcLogDump.c +++ b/CORE/SME/src/pmc/pmcLogDump.c @@ -24,17 +24,12 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /****************************************************************************** * * Name: pmcLogDump.c * * Description: Implements the dump commands specific to PMC module * -* Copyright 2008 (c) Qualcomm Technologies, Inc. -* All Rights Reserved. -* Qualcomm Technologies Confidential and Proprietary. -* ******************************************************************************/ #include "palTypes.h" diff --git a/CORE/SME/src/rrm/sme_rrm.c b/CORE/SME/src/rrm/sme_rrm.c index afb2797e9dec..8019c00e459a 100644 --- a/CORE/SME/src/rrm/sme_rrm.c +++ b/CORE/SME/src/rrm/sme_rrm.c @@ -24,17 +24,14 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - +/* + * */ /**========================================================================= \file sme_Rrm.c \brief implementation for SME RRM APIs - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ /* $Header$ */ @@ -314,6 +311,7 @@ static eHalStatus sme_CcxSendBeaconReqScanResults(tpAniSirGlobal pMac, tANI_U8 bss_count) { eHalStatus status = eHAL_STATUS_FAILURE; + tSirRetStatus fillIeStatus; tpSirBssDescription pBssDesc = NULL; tANI_U32 ie_len = 0; tANI_U32 outIeLen = 0; @@ -377,8 +375,15 @@ static eHalStatus sme_CcxSendBeaconReqScanResults(tpAniSirGlobal pMac, vos_mem_copy(pBcnReport->bcnRepBssInfo[msgCounter].bcnReportFields.Bssid, pBssDesc->bssId, sizeof(tSirMacAddr)); - sirFillBeaconMandatoryIEforCcxBcnReport(pMac, (tANI_U8 *)pBssDesc->ieFields, ie_len, - &(pBcnReport->bcnRepBssInfo[msgCounter].pBuf), &outIeLen); + fillIeStatus = sirFillBeaconMandatoryIEforCcxBcnReport(pMac, + (tANI_U8 *)pBssDesc->ieFields, + ie_len, + &(pBcnReport->bcnRepBssInfo[msgCounter].pBuf), + &outIeLen); + if (eSIR_FAILURE == fillIeStatus) + { + continue; + } pBcnReport->bcnRepBssInfo[msgCounter].ieLen = outIeLen; smsLog( pMac, LOG1,"Bssid(%02X:%02X:%02X:%02X:%02X:%02X) Channel=%d Rssi=%d", diff --git a/CORE/SME/src/sme_common/sme_Api.c b/CORE/SME/src/sme_common/sme_Api.c index dd11e9879e98..f701be8cde88 100644 --- a/CORE/SME/src/sme_common/sme_Api.c +++ b/CORE/SME/src/sme_common/sme_Api.c @@ -24,17 +24,12 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /**========================================================================= \file smeApi.c \brief Definitions for SME APIs - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ /*=========================================================================== @@ -2003,30 +1998,6 @@ eHalStatus sme_SetCcxBeaconRequest(tHalHandle hHal, const tANI_U8 sessionId, #endif /* FEATURE_WLAN_CCX && FEATURE_WLAN_CCX_UPLOAD */ -#ifdef FEATURE_CESIUM_PROPRIETARY -eHalStatus sme_IbssPeerInfoResponseHandleer( tHalHandle hHal, - tpSirIbssGetPeerInfoRspParams pIbssPeerInfoParams) -{ - tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - - if (NULL == pMac) - { - VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_FATAL, - "%s: pMac is null", __func__); - return eHAL_STATUS_FAILURE; - } - if (pMac->sme.peerInfoParams.peerInfoCbk == NULL) - { - VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, - "%s: HDD callback is null", __func__); - return eHAL_STATUS_FAILURE; - } - pMac->sme.peerInfoParams.peerInfoCbk(pMac->sme.peerInfoParams.pUserData, - &pIbssPeerInfoParams->ibssPeerInfoRspParams); - return eHAL_STATUS_SUCCESS; -} -#endif /* FEATURE_CESIUM_PROPRIETARY */ - /*-------------------------------------------------------------------------- \brief sme_ProcessMsg() - The main message processor for SME. @@ -2330,6 +2301,11 @@ eHalStatus sme_ProcessMsg(tHalHandle hHal, vos_msg_t* pMsg) case eWNI_SME_TDLS_DEL_ALL_PEER_IND: case eWNI_SME_MGMT_FRM_TX_COMPLETION_IND: case eWNI_SME_TDLS_LINK_ESTABLISH_RSP: +#ifdef QCA_WIFI_2_0 + case eWNI_SME_TDLS_SHOULD_DISCOVER: + case eWNI_SME_TDLS_SHOULD_TEARDOWN: + case eWNI_SME_TDLS_PEER_DISCONNECTED: +#endif #ifdef FEATURE_WLAN_TDLS_INTERNAL case eWNI_SME_TDLS_DISCOVERY_START_RSP: case eWNI_SME_TDLS_DISCOVERY_START_IND: @@ -2416,23 +2392,6 @@ eHalStatus sme_ProcessMsg(tHalHandle hHal, vos_msg_t* pMsg) break; #endif /* FEATURE_WLAN_LPHB */ -#ifdef FEATURE_CESIUM_PROPRIETARY - case eWNI_SME_IBSS_PEER_INFO_RSP: - if (pMsg->bodyptr) - { - sme_IbssPeerInfoResponseHandleer(pMac, pMsg->bodyptr); - vos_mem_free(pMsg->bodyptr); - } - else - { - smsLog(pMac, LOGE, - "Empty rsp message for (eWNI_SME_IBSS_PEER_INFO_RSP)," - " nothing to process"); - } - break ; - -#endif /* FEATURE_CESIUM_PROPRIETARY */ - case eWNI_SME_READY_TO_SUSPEND_IND: if (pMsg->bodyptr) { @@ -2445,6 +2404,19 @@ eHalStatus sme_ProcessMsg(tHalHandle hHal, vos_msg_t* pMsg) } break ; +#ifdef FEATURE_WLAN_CH_AVOID + /* channel avoid message arrived, send IND to client */ + case eWNI_SME_CH_AVOID_IND: + if (pMac->sme.pChAvoidNotificationCb) + { + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, + "%s: CH avoid notification", __func__); + pMac->sme.pChAvoidNotificationCb(pMac->pAdapter, pMsg->bodyptr); + } + vos_mem_free(pMsg->bodyptr); + break; +#endif /* FEATURE_WLAN_CH_AVOID */ + default: if ( ( pMsg->type >= eWNI_SME_MSG_TYPES_BEGIN ) @@ -5388,64 +5360,6 @@ eHalStatus sme_DHCPStopInd( tHalHandle hHal, return (status); } -#ifdef FEATURE_CESIUM_PROPRIETARY -/*--------------------------------------------------------------------------- - - \fn sme_TXFailMonitorStopInd - - \brief API to signal the FW to start monitoring TX failures - - \return eHalStatus SUCCESS. - - FAILURE or RESOURCES The API finished and failed. - --------------------------------------------------------------------------*/ -eHalStatus sme_TXFailMonitorStartStopInd(tHalHandle hHal, tANI_U8 tx_fail_count, - void * txFailIndCallback) -{ - eHalStatus status; - VOS_STATUS vosStatus; - tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - vos_msg_t vosMessage; - tAniTXFailMonitorInd *pMsg; - - status = sme_AcquireGlobalLock(&pMac->sme); - if ( eHAL_STATUS_SUCCESS == status) - { - pMsg = (tAniTXFailMonitorInd*) - vos_mem_malloc(sizeof(tAniTXFailMonitorInd)); - if (NULL == pMsg) - { - VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, - "%s: Failed to allocate memory", __func__); - sme_ReleaseGlobalLock( &pMac->sme ); - return eHAL_STATUS_FAILURE; - } - - pMsg->msgType = WDA_TX_FAIL_MONITOR_IND; - pMsg->msgLen = (tANI_U16)sizeof(tAniTXFailMonitorInd); - - //tx_fail_count = 0 should disable the Monitoring in FW - pMsg->tx_fail_count = tx_fail_count; - pMsg->txFailIndCallback = txFailIndCallback; - - vosMessage.type = WDA_TX_FAIL_MONITOR_IND; - vosMessage.bodyptr = pMsg; - vosMessage.reserved = 0; - - vosStatus = vos_mq_post_message(VOS_MQ_ID_WDA, &vosMessage ); - if ( !VOS_IS_STATUS_SUCCESS(vosStatus) ) - { - VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, - "%s: Post TX Fail monitor Start MSG fail", __func__); - vos_mem_free(pMsg); - status = eHAL_STATUS_FAILURE; - } - sme_ReleaseGlobalLock( &pMac->sme ); - } - return (status); -} -#endif /* FEATURE_CESIUM_PROPRIETARY */ - /* --------------------------------------------------------------------------- \fn sme_BtcSignalBtEvent \brief API to signal Bluetooth (BT) event to the WLAN driver. Based on the @@ -7523,14 +7437,6 @@ eHalStatus sme_HandleChangeCountryCode(tpAniSirGlobal pMac, void *pMsgBuf) return status; } - status = WDA_SetCountryCode(pMac, pMsg->countryCode); - if ( status != eHAL_STATUS_SUCCESS ) - { - smsLog(pMac, LOGE, FL("Fail to set countryCode: %c%c"), pMsg->countryCode[0], - pMsg->countryCode[1]); - return status; - } - /* overwrite the defualt country code */ vos_mem_copy(pMac->scan.countryCodeDefault, pMac->scan.countryCodeCurrent, @@ -9906,7 +9812,124 @@ void sme_SetTdlsPowerSaveProhibited(tHalHandle hHal, tANI_U32 sessionId, v_BOOL_ } return; } -#endif + +#ifdef QCA_WIFI_2_0 +/* --------------------------------------------------------------------------- + \fn sme_UpdateFwTdlsState + + \brief + SME will send message to WMA to set TDLS state in f/w + + \param + + hHal - The handle returned by macOpen + + psmeTdlsParams - TDLS state info to update in f/w + + \return eHalStatus +--------------------------------------------------------------------------- */ +eHalStatus sme_UpdateFwTdlsState(tHalHandle hHal, void *psmeTdlsParams) +{ + eHalStatus status = eHAL_STATUS_SUCCESS; + VOS_STATUS vosStatus = VOS_STATUS_SUCCESS; + tpAniSirGlobal pMac = PMAC_STRUCT(hHal); + vos_msg_t vosMessage; + + if (eHAL_STATUS_SUCCESS == (status = sme_AcquireGlobalLock(&pMac->sme))) + { + /* serialize the req through MC thread */ + vosMessage.bodyptr = psmeTdlsParams; + vosMessage.type = WDA_UPDATE_FW_TDLS_STATE; + vosStatus = vos_mq_post_message(VOS_MQ_ID_WDA, &vosMessage); + if (!VOS_IS_STATUS_SUCCESS(vosStatus)) + { + status = eHAL_STATUS_FAILURE; + } + sme_ReleaseGlobalLock(&pMac->sme); + } + return(status); +} + +/* --------------------------------------------------------------------------- + \fn sme_UpdateTdlsPeerState + + \brief + SME will send message to WMA to set TDLS Peer state in f/w + + \param + + hHal - The handle returned by macOpen + + peerStateParams - TDLS Peer state info to update in f/w + + \return eHalStatus +--------------------------------------------------------------------------- */ +eHalStatus sme_UpdateTdlsPeerState(tHalHandle hHal, + tSmeTdlsPeerStateParams *peerStateParams) +{ + eHalStatus status = eHAL_STATUS_SUCCESS; + VOS_STATUS vosStatus = VOS_STATUS_SUCCESS; + tpAniSirGlobal pMac = PMAC_STRUCT(hHal); + tTdlsPeerStateParams *pTdlsPeerStateParams = NULL; + vos_msg_t vosMessage; + + if (eHAL_STATUS_SUCCESS == (status = sme_AcquireGlobalLock(&pMac->sme))) + { + pTdlsPeerStateParams = vos_mem_malloc(sizeof(tTdlsPeerStateParams)); + if (NULL == pTdlsPeerStateParams) + { + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, + "%s: failed to allocate mem for tdls peer state param", + __func__); + sme_ReleaseGlobalLock(&pMac->sme); + return eHAL_STATUS_FAILURE; + } + + vos_mem_copy(&pTdlsPeerStateParams->peerMacAddr, + &peerStateParams->peerMacAddr, + sizeof(tSirMacAddr)); + pTdlsPeerStateParams->vdevId = peerStateParams->vdevId; + pTdlsPeerStateParams->peerState = peerStateParams->peerState; + + switch (peerStateParams->peerState) + { + case eSME_TDLS_PEER_STATE_PEERING: + pTdlsPeerStateParams->peerState = WDA_TDLS_PEER_STATE_PEERING; + break; + + case eSME_TDLS_PEER_STATE_CONNECTED: + pTdlsPeerStateParams->peerState = WDA_TDLS_PEER_STATE_CONNECTED; + break; + + case eSME_TDLS_PEER_STATE_TEARDOWN: + pTdlsPeerStateParams->peerState = WDA_TDLS_PEER_STATE_TEARDOWN; + break; + + default: + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, + "%s: invalid peer state param (%d)", + __func__, peerStateParams->peerState); + vos_mem_free(pTdlsPeerStateParams); + sme_ReleaseGlobalLock(&pMac->sme); + return eHAL_STATUS_FAILURE; + } + + vosMessage.type = WDA_UPDATE_TDLS_PEER_STATE; + vosMessage.reserved = 0; + vosMessage.bodyptr = pTdlsPeerStateParams; + + vosStatus = vos_mq_post_message(VOS_MQ_ID_WDA, &vosMessage); + if (!VOS_IS_STATUS_SUCCESS(vosStatus)) + { + vos_mem_free(pTdlsPeerStateParams); + status = eHAL_STATUS_FAILURE; + } + sme_ReleaseGlobalLock(&pMac->sme); + } + return(status); +} +#endif /* QCA_WIFI_2_0 */ +#endif /* FEATURE_WLAN_TDLS */ /* --------------------------------------------------------------------------- \fn sme_IsPmcBmps \API to Check if PMC state is BMPS. @@ -10368,151 +10391,6 @@ eHalStatus sme_DelPeriodicTxPtrn(tHalHandle hHal, tSirDelPeriodicTxPtrn return status; } -#if defined WLAN_FEATURE_RELIABLE_MCAST -/* --------------------------------------------------------------------------- - \fn sme_EnableReliableMcast - \brief Used to enable Reliable Multicast using Leader Based Protocol - setting will not persist over reboots - \param hHal - \param sessionId - \- return eHalStatus - -------------------------------------------------------------------------*/ -eHalStatus sme_EnableReliableMcast(tHalHandle hHal, tANI_U32 sessionId) -{ - eHalStatus status = eHAL_STATUS_FAILURE; - tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - - smsLog(pMac, LOG1, FL("enable RMC")); - status = sme_AcquireGlobalLock(&pMac->sme); - if (HAL_STATUS_SUCCESS(status)) - { - status = csrEnableRMC(pMac, sessionId); - sme_ReleaseGlobalLock(&pMac->sme); - } - return status; -} - -/* --------------------------------------------------------------------------- - \fn sme_DisableReliableMcast - \brief Used to disable Reliable Multicast using Leader Based Protocol - setting will not persist over reboots - \param hHal - \param sessionId - \- return eHalStatus - -------------------------------------------------------------------------*/ -eHalStatus sme_DisableReliableMcast(tHalHandle hHal, tANI_U32 sessionId) -{ - eHalStatus status = eHAL_STATUS_FAILURE; - tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - - smsLog(pMac, LOG1, FL("disable RMC")); - status = sme_AcquireGlobalLock(&pMac->sme); - if (HAL_STATUS_SUCCESS(status)) - { - status = csrDisableRMC(pMac, sessionId); - sme_ReleaseGlobalLock(&pMac->sme); - } - return status; -} -#endif /* defined WLAN_FEATURE_RELIABLE_MCAST */ - -#ifdef FEATURE_CESIUM_PROPRIETARY -/* --------------------------------------------------------------------------- - \fn sme_GetIBSSPeerInfo - \brief Used to disable Reliable Multicast using Leader Based Protocol - setting will not persist over reboots - \param hHal - \param ibssPeerInfoReq multicast Group IP address - \- return eHalStatus - -------------------------------------------------------------------------*/ -eHalStatus sme_RequestIBSSPeerInfo(tHalHandle hHal, void *pUserData, - pIbssPeerInfoCb peerInfoCbk, - tANI_BOOLEAN allPeerInfoReqd, - tANI_U8 staIdx) -{ - eHalStatus status = eHAL_STATUS_FAILURE; - VOS_STATUS vosStatus = VOS_STATUS_E_FAILURE; - tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - vos_msg_t vosMessage; - tSirIbssGetPeerInfoReqParams *pIbssInfoReqParams; - - status = sme_AcquireGlobalLock(&pMac->sme); - if ( eHAL_STATUS_SUCCESS == status) - { - pMac->sme.peerInfoParams.peerInfoCbk = peerInfoCbk; - pMac->sme.peerInfoParams.pUserData = pUserData; - - pIbssInfoReqParams = (tSirIbssGetPeerInfoReqParams *) - vos_mem_malloc(sizeof(tSirIbssGetPeerInfoReqParams)); - if (NULL == pIbssInfoReqParams) - { - VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, - "%s: Not able to allocate memory for dhcp start", __func__); - sme_ReleaseGlobalLock( &pMac->sme ); - return eHAL_STATUS_FAILURE; - } - pIbssInfoReqParams->allPeerInfoReqd = allPeerInfoReqd; - pIbssInfoReqParams->staIdx = staIdx; - - vosMessage.type = WDA_GET_IBSS_PEER_INFO_REQ; - vosMessage.bodyptr = pIbssInfoReqParams; - vosMessage.reserved = 0; - - vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &vosMessage ); - if ( VOS_STATUS_SUCCESS != vosStatus ) - { - VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, - "%s: Post WDA_GET_IBSS_PEER_INFO_REQ MSG failed", __func__); - vos_mem_free(pIbssInfoReqParams); - vosStatus = eHAL_STATUS_FAILURE; - } - sme_ReleaseGlobalLock( &pMac->sme ); - } - - return (vosStatus); -} - -/* --------------------------------------------------------------------------- - \fn sme_IBSSRouteTableUpdateInd - \API to update IBSS Route table in FW. - \param hHal - The handle returned by macOpen - \param pIbssTable - ptr to IBSS table struct - \- returns Success or Failiure - -------------------------------------------------------------------------*/ -eHalStatus sme_IBSSRouteTableUpdateInd(tHalHandle hHal, - tAniIbssRouteTable *pIbssTable) -{ - eHalStatus status = eHAL_STATUS_SUCCESS; - VOS_STATUS vosStatus = VOS_STATUS_SUCCESS; - tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - vos_msg_t vosMessage; - - if (!pIbssTable) - { - VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, - "%s: IBSS route table ptr null", __func__); - return eHAL_STATUS_FAILURE; - } - - status = sme_AcquireGlobalLock(&pMac->sme); - if (eHAL_STATUS_SUCCESS == status) - { - vosMessage.bodyptr = pIbssTable; - vosMessage.type = WDA_IBSS_ROUTE_TABLE_UPDATE_IND; - vosStatus = vos_mq_post_message(VOS_MQ_ID_WDA, &vosMessage); - if (!VOS_IS_STATUS_SUCCESS(vosStatus)) - { - VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, - "%s: failed to post message to WDA", __func__); - status = eHAL_STATUS_FAILURE; - } - sme_ReleaseGlobalLock(&pMac->sme); - } - - return(status); -} -#endif /* FEATURE_CESIUM_PROPRIETARY */ - void smeGetCommandQStatus( tHalHandle hHal ) { tSmeCmd *pTempCmd = NULL; @@ -10915,3 +10793,40 @@ eHalStatus sme_getChannelInfo(tHalHandle hHal, tANI_U8 chanId, return status; } #endif /* QCA_WIFI_2_0 */ + +#ifdef FEATURE_WLAN_CH_AVOID +/* --------------------------------------------------------------------------- + \fn sme_AddChAvoidCallback + \brief Used to plug in callback function + Which notify channel may not be used with SAP or P2PGO mode. + Notification come from FW. + \param hHal + \param pCallbackfn : callback function pointer should be plugged in + \- return eHalStatus + -------------------------------------------------------------------------*/ +eHalStatus sme_AddChAvoidCallback +( + tHalHandle hHal, + void (*pCallbackfn)(void *pAdapter, void *indParam) +) +{ + eHalStatus status = eHAL_STATUS_SUCCESS; + tpAniSirGlobal pMac = PMAC_STRUCT(hHal); + + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, + "%s: Plug in CH AVOID CB", __func__); + + status = sme_AcquireGlobalLock(&pMac->sme); + if (eHAL_STATUS_SUCCESS == status) + { + if (NULL != pCallbackfn) + { + pMac->sme.pChAvoidNotificationCb = pCallbackfn; + } + sme_ReleaseGlobalLock(&pMac->sme); + } + + return(status); +} +#endif /* FEATURE_WLAN_CH_AVOID */ + diff --git a/CORE/SME/src/sme_common/sme_FTApi.c b/CORE/SME/src/sme_common/sme_FTApi.c index de4ceb57bf41..0be65a77eb58 100644 --- a/CORE/SME/src/sme_common/sme_FTApi.c +++ b/CORE/SME/src/sme_common/sme_FTApi.c @@ -24,17 +24,11 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - - #ifdef WLAN_FEATURE_VOWIFI_11R /**========================================================================= \brief Definitions for SME FT APIs - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ /*-------------------------------------------------------------------------- diff --git a/CORE/SME/src/sme_common/sme_Trace.c b/CORE/SME/src/sme_common/sme_Trace.c index 5b40ab87aa61..72196d934aba 100644 --- a/CORE/SME/src/sme_common/sme_Trace.c +++ b/CORE/SME/src/sme_common/sme_Trace.c @@ -1,3 +1,29 @@ +/* + * Copyright (c) 2013, The Linux Foundation. All rights reserved. + * + * Previously licensed under the ISC license by Qualcomm Atheros, Inc. + * + * + * Permission to use, copy, modify, and/or distribute this software for + * any purpose with or without fee is hereby granted, provided that the + * above copyright notice and this permission notice appear in all + * copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL + * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE + * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +/* + * This file was originally distributed by Qualcomm Atheros, Inc. + * under proprietary terms before Copyright ownership was assigned + * to the Linux Foundation. + */ /************************************************************************ smeTrace.c diff --git a/CORE/SVC/external/wlan_nlink_common.h b/CORE/SVC/external/wlan_nlink_common.h index 0fd897fa1c17..9c780343ddbe 100644 --- a/CORE/SVC/external/wlan_nlink_common.h +++ b/CORE/SVC/external/wlan_nlink_common.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /*=========================================================================== \file wlan_nlink_common.h @@ -32,10 +31,6 @@ message types and definitions that is shared between the user space service (e.g. BTC service) and WLAN kernel module. - Copyright (c) 2009 Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary - ===========================================================================*/ #ifndef WLAN_NLINK_COMMON_H__ diff --git a/CORE/SVC/inc/wlan_btc_svc.h b/CORE/SVC/inc/wlan_btc_svc.h index b1152ba53a74..375799612cd5 100644 --- a/CORE/SVC/inc/wlan_btc_svc.h +++ b/CORE/SVC/inc/wlan_btc_svc.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /****************************************************************************** * wlan_btc_svc.h * diff --git a/CORE/SVC/inc/wlan_nlink_srv.h b/CORE/SVC/inc/wlan_nlink_srv.h index 05ed4e83c5cc..381de80ad0fc 100644 --- a/CORE/SVC/inc/wlan_nlink_srv.h +++ b/CORE/SVC/inc/wlan_nlink_srv.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /****************************************************************************** * wlan_nlink_srv.h * diff --git a/CORE/SVC/inc/wlan_ptt_sock_svc.h b/CORE/SVC/inc/wlan_ptt_sock_svc.h index 2157d4980902..d77645f8c8b3 100644 --- a/CORE/SVC/inc/wlan_ptt_sock_svc.h +++ b/CORE/SVC/inc/wlan_ptt_sock_svc.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /****************************************************************************** * wlan_ptt_sock_svc.c * diff --git a/CORE/SVC/src/btc/wlan_btc_svc.c b/CORE/SVC/src/btc/wlan_btc_svc.c index 39f9721ac25d..fe4311456c6b 100644 --- a/CORE/SVC/src/btc/wlan_btc_svc.c +++ b/CORE/SVC/src/btc/wlan_btc_svc.c @@ -24,7 +24,9 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - +/* + * + */ /****************************************************************************** * wlan_btc_svc.c * diff --git a/CORE/SVC/src/nlink/wlan_nlink_srv.c b/CORE/SVC/src/nlink/wlan_nlink_srv.c index 70ed98468fdf..86ae03ff8a2d 100644 --- a/CORE/SVC/src/nlink/wlan_nlink_srv.c +++ b/CORE/SVC/src/nlink/wlan_nlink_srv.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /****************************************************************************** * wlan_nlink_srv.c * diff --git a/CORE/SVC/src/ptt/wlan_ptt_sock_svc.c b/CORE/SVC/src/ptt/wlan_ptt_sock_svc.c index f2035bb7e29f..c6fb96df19f5 100644 --- a/CORE/SVC/src/ptt/wlan_ptt_sock_svc.c +++ b/CORE/SVC/src/ptt/wlan_ptt_sock_svc.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /****************************************************************************** * wlan_ptt_sock_svc.c * diff --git a/CORE/SYS/common/inc/wlan_qct_sys.h b/CORE/SYS/common/inc/wlan_qct_sys.h index 9a8c3d4264e8..fddefd47336c 100644 --- a/CORE/SYS/common/inc/wlan_qct_sys.h +++ b/CORE/SYS/common/inc/wlan_qct_sys.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined( WLAN_QCT_SYS_H__ ) #define WLAN_QCT_SYS_H__ @@ -34,10 +33,6 @@ \brief System module API - Copyright 2008 (c) Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary. - ==========================================================================*/ /* $HEADER$ */ diff --git a/CORE/SYS/common/src/wlan_qct_sys.c b/CORE/SYS/common/src/wlan_qct_sys.c index 8134a6f5e56d..328ec951319e 100644 --- a/CORE/SYS/common/src/wlan_qct_sys.c +++ b/CORE/SYS/common/src/wlan_qct_sys.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /*=========================================================================== W L A N S Y S T E M M O D U L E @@ -34,9 +33,6 @@ DESCRIPTION This file contains the system module that implements the 'exectution model' in the Gen6 host software. - - Copyright (c) 2008 Qualcomm Technologies, Inc. All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ===========================================================================*/ /*=========================================================================== @@ -339,7 +335,7 @@ VOS_STATUS sysMcProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg ) /* Handling for this message is not needed now so adding *debug print and VOS_ASSERT*/ VOS_TRACE( VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR, - " Received SYS_MSG_ID_MC_START message msgType= %d [0x%08lx]", + " Received SYS_MSG_ID_MC_START message msgType= %d [0x%08x]", pMsg->type, pMsg->type ); VOS_ASSERT(0); break; @@ -377,7 +373,7 @@ VOS_STATUS sysMcProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg ) case SYS_MSG_ID_MC_THR_PROBE: { VOS_TRACE(VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR, - " Received SYS_MSG_ID_MC_THR_PROBE message msgType = %d [0x%08lx]", + " Received SYS_MSG_ID_MC_THR_PROBE message msgType = %d [0x%08x]", pMsg->type, pMsg->type); break; } @@ -405,7 +401,7 @@ VOS_STATUS sysMcProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg ) default: { VOS_TRACE( VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR, - "Unknown message type in sysMcProcessMsg() msgType= %d [0x%08lx]", + "Unknown message type in sysMcProcessMsg() msgType= %d [0x%08x]", pMsg->type, pMsg->type ); break; } @@ -425,7 +421,7 @@ VOS_STATUS sysMcProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg ) VOS_TRACE( VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR, "Received SYS message cookie with unidentified " - "MC message type= %d [0x%08lX]", pMsg->type, pMsg->type ); + "MC message type= %d [0x%08X]", pMsg->type, pMsg->type ); vosStatus = VOS_STATUS_E_BADMSG; if (pMsg->bodyptr) @@ -464,7 +460,7 @@ VOS_STATUS sysTxProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg ) /* Handling for this message is not needed now so adding * debug print and VOS_ASSERT*/ VOS_TRACE( VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR, - " Received SYS_MSG_ID_TX_THR_PROBE message msgType= %d [0x%08lx]", + " Received SYS_MSG_ID_TX_THR_PROBE message msgType= %d [0x%08x]", pMsg->type, pMsg->type ); VOS_ASSERT(0); @@ -490,7 +486,7 @@ VOS_STATUS sysTxProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg ) default: { VOS_TRACE( VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR, - "Unknown message type in sysTxProcessMsg() msgType= %d [0x%08lx]", + "Unknown message type in sysTxProcessMsg() msgType= %d [0x%08x]", pMsg->type, pMsg->type ); break; } @@ -503,7 +499,7 @@ VOS_STATUS sysTxProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg ) VOS_TRACE( VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR, "Received SYS message cookie with unidentified TX message " - " type= %d [0x%08lX]", pMsg->type, pMsg->type ); + " type= %d [0x%08X]", pMsg->type, pMsg->type ); vosStatus = VOS_STATUS_E_BADMSG; } // end else @@ -547,7 +543,7 @@ VOS_STATUS sysRxProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg ) default: { VOS_TRACE( VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR, - "Unknown message type in sysRxProcessMsg() msgType= %d [0x%08lx]", + "Unknown message type in sysRxProcessMsg() msgType= %d [0x%08x]", pMsg->type, pMsg->type ); break; } @@ -560,7 +556,7 @@ VOS_STATUS sysRxProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg ) VOS_TRACE( VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR, "Received SYS message cookie with unidentified RX message " - " type= %d [0x%08lX]", pMsg->type, pMsg->type ); + " type= %d [0x%08X]", pMsg->type, pMsg->type ); vosStatus = VOS_STATUS_E_BADMSG; } // end else diff --git a/CORE/SYS/legacy/src/pal/inc/palApi.h b/CORE/SYS/legacy/src/pal/inc/palApi.h index 654cfbc58dc1..75a88af336ba 100644 --- a/CORE/SYS/legacy/src/pal/inc/palApi.h +++ b/CORE/SYS/legacy/src/pal/inc/palApi.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /** ------------------------------------------------------------------------- * ------------------------------------------------------------------------- * @@ -35,7 +34,6 @@ $Id$ - Copyright (C) 2006 Airgo Networks, Incorporated This file contains all the interfaces for thge Platform Abstration Layer functions. It is intended to be included in all modules that are using the PAL interfaces. diff --git a/CORE/SYS/legacy/src/pal/inc/palTimer.h b/CORE/SYS/legacy/src/pal/inc/palTimer.h index 1f56bc5790f4..8fffee37829b 100644 --- a/CORE/SYS/legacy/src/pal/inc/palTimer.h +++ b/CORE/SYS/legacy/src/pal/inc/palTimer.h @@ -35,7 +35,6 @@ $Id$ - Copyright (C) 2006 Airgo Networks, Incorporated ... description... ========================================================================== */ diff --git a/CORE/SYS/legacy/src/pal/src/palApiComm.c b/CORE/SYS/legacy/src/pal/src/palApiComm.c index dc99f46e1fd4..bc363bb4055f 100644 --- a/CORE/SYS/legacy/src/pal/src/palApiComm.c +++ b/CORE/SYS/legacy/src/pal/src/palApiComm.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #include #include // needed for tSirRetStatus #include diff --git a/CORE/SYS/legacy/src/pal/src/palTimer.c b/CORE/SYS/legacy/src/pal/src/palTimer.c index 458ad6372cef..36a5d3886df4 100644 --- a/CORE/SYS/legacy/src/pal/src/palTimer.c +++ b/CORE/SYS/legacy/src/pal/src/palTimer.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /** \file palTimer.c @@ -33,8 +32,6 @@ $Id$ - Copyright (C) 2006 Airgo Networks, Incorporated - This file contains function implementations for the Platform Abstration Layer. diff --git a/CORE/SYS/legacy/src/platform/inc/VossWrapper.h b/CORE/SYS/legacy/src/platform/inc/VossWrapper.h index 1382517ade14..c522ec1a3ace 100644 --- a/CORE/SYS/legacy/src/platform/inc/VossWrapper.h +++ b/CORE/SYS/legacy/src/platform/inc/VossWrapper.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef __VOSS_WRAPPER_H #define __VOSS_WRAPPER_H @@ -38,9 +37,6 @@ extern "C" { @brief This header file contains the various structure definitions and function prototypes for the RTOS abstraction layer, implemented for VOSS - Copyright (c) 2008 Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ===========================================================================*/ /*=========================================================================== diff --git a/CORE/SYS/legacy/src/platform/src/VossWrapper.c b/CORE/SYS/legacy/src/platform/src/VossWrapper.c index ff27cd0f9a32..95560f7b2dcb 100644 --- a/CORE/SYS/legacy/src/platform/src/VossWrapper.c +++ b/CORE/SYS/legacy/src/platform/src/VossWrapper.c @@ -24,16 +24,12 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /*=========================================================================== @file VossWrapper.c @brief This source file contains the various function definitions for the RTOS abstraction layer, implemented for VOSS - Copyright (c) 2008 Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ===========================================================================*/ /*=========================================================================== diff --git a/CORE/SYS/legacy/src/system/inc/sysDebug.h b/CORE/SYS/legacy/src/system/inc/sysDebug.h index 0fdd2e054be6..fc2251de5a3f 100644 --- a/CORE/SYS/legacy/src/system/inc/sysDebug.h +++ b/CORE/SYS/legacy/src/system/inc/sysDebug.h @@ -24,10 +24,8 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* * - * Airgo Networks, Inc proprietary. All rights reserved. * This file sysGlobal.h contains the logDump utility for system module. * Author: V. K. Kandarpa * Date: 01/24/2002 diff --git a/CORE/SYS/legacy/src/system/inc/sysDef.h b/CORE/SYS/legacy/src/system/inc/sysDef.h index 6901bbffdb54..dfab80ccfc5a 100644 --- a/CORE/SYS/legacy/src/system/inc/sysDef.h +++ b/CORE/SYS/legacy/src/system/inc/sysDef.h @@ -24,10 +24,8 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* * - * Airgo Networks, Inc proprietary. All rights reserved. * This file sysDef.h contains the common definitions used to bring up * Sirius system. * Author: V. K. Kandarpa diff --git a/CORE/SYS/legacy/src/system/inc/sysEntryFunc.h b/CORE/SYS/legacy/src/system/inc/sysEntryFunc.h index 70260be3abf2..a37ac2937b47 100644 --- a/CORE/SYS/legacy/src/system/inc/sysEntryFunc.h +++ b/CORE/SYS/legacy/src/system/inc/sysEntryFunc.h @@ -24,10 +24,8 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* * - * Airgo Networks, Inc proprietary. All rights reserved. * This file sysEntryFunc.h contains module entry functions definitions * Author: V. K. Kandarpa * Date: 04/13/2002 diff --git a/CORE/SYS/legacy/src/system/inc/sysStartup.h b/CORE/SYS/legacy/src/system/inc/sysStartup.h index 0fe3b014aee5..5a2ee4a055bd 100644 --- a/CORE/SYS/legacy/src/system/inc/sysStartup.h +++ b/CORE/SYS/legacy/src/system/inc/sysStartup.h @@ -25,10 +25,8 @@ * to the Linux Foundation. */ - /* * - * Woodside Networks, Inc proprietary. All rights reserved * sysStartup.h: System startup header file. * Author: V. K. Kandarpa * Date: 01/29/2002 diff --git a/CORE/SYS/legacy/src/system/src/macInitApi.c b/CORE/SYS/legacy/src/system/src/macInitApi.c index 570a0ff3aaed..dd4b8bcfbd52 100644 --- a/CORE/SYS/legacy/src/system/src/macInitApi.c +++ b/CORE/SYS/legacy/src/system/src/macInitApi.c @@ -24,9 +24,8 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Airgo Networks, Inc proprietary. All rights reserved. + * * macInitApi.c - This file has all the mac level init functions * for all the defined threads at system level. * Author: Dinesh Upadhyay diff --git a/CORE/SYS/legacy/src/system/src/sysEntryFunc.c b/CORE/SYS/legacy/src/system/src/sysEntryFunc.c index f95d1f29ca45..f756ebdee1cc 100644 --- a/CORE/SYS/legacy/src/system/src/sysEntryFunc.c +++ b/CORE/SYS/legacy/src/system/src/sysEntryFunc.c @@ -24,9 +24,7 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Airgo Networks, Inc proprietary. All rights reserved * sysEntryFunc.cc - This file has all the system level entry functions * for all the defined threads at system level. * Author: V. K. Kandarpa diff --git a/CORE/SYS/legacy/src/utils/inc/dot11fdefs.h b/CORE/SYS/legacy/src/utils/inc/dot11fdefs.h index 15fdf8962c97..b6da74c0208f 100644 --- a/CORE/SYS/legacy/src/utils/inc/dot11fdefs.h +++ b/CORE/SYS/legacy/src/utils/inc/dot11fdefs.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef DOT11FDEFS_H_82A7B72E_C36C_465D_82A7_139EA5322582 #define DOT11FDEFS_H_82A7B72E_C36C_465D_82A7_139EA5322582 /** @@ -33,7 +32,6 @@ * \brief C defines customizing our framesc-generated code * * - * Copyright (C) 2006 Airgo Networks, Incorporated * * 'framesc' generates code written in terms of a number of macros * intended for customization. diff --git a/CORE/SYS/legacy/src/utils/inc/utilsParser.h b/CORE/SYS/legacy/src/utils/inc/utilsParser.h index d0bd2879e5f6..28ee1c32513b 100644 --- a/CORE/SYS/legacy/src/utils/inc/utilsParser.h +++ b/CORE/SYS/legacy/src/utils/inc/utilsParser.h @@ -24,9 +24,8 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Airgo Networks, Inc proprietary. All rights reserved. + * * This file utilsParser.h contains the utility function protos * used internally by the parser * Author: Chandra Modumudi diff --git a/CORE/SYS/legacy/src/utils/src/dot11f.c b/CORE/SYS/legacy/src/utils/src/dot11f.c index 9fee77b1382a..1197e3d78167 100644 --- a/CORE/SYS/legacy/src/utils/src/dot11f.c +++ b/CORE/SYS/legacy/src/utils/src/dot11f.c @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) 2013, The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. @@ -24,6 +24,8 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ +/** + */ /** * \file dot11f.c @@ -36,7 +38,7 @@ * * * This file was automatically generated by 'framesc' - * Tue Dec 3 15:04:59 2013 from the following file(s): + * Tue Jan 7 20:37:51 2014 from the following file(s): * * dot11f.frms * @@ -759,16 +761,6 @@ void dot11fUnpackFfDialogToken(tpAniSirGlobal pCtx, #define SigFfDialogToken ( 0x000d ) -void dot11fUnpackFfLeader(tpAniSirGlobal pCtx, - tANI_U8 *pBuf, - tDot11fFfLeader *pDst) -{ - DOT11F_MEMCPY(pCtx, pDst->mac, pBuf, 6); - (void)pCtx; -} /* End dot11fUnpackFfLeader. */ - -#define SigFfLeader ( 0x000e ) - void dot11fUnpackFfLinkMargin(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tDot11fFfLinkMargin *pDst) @@ -777,19 +769,9 @@ void dot11fUnpackFfLinkMargin(tpAniSirGlobal pCtx, (void)pCtx; } /* End dot11fUnpackFfLinkMargin. */ -#define SigFfLinkMargin ( 0x000f ) - -#define SigFfListenInterval ( 0x0010 ) - -void dot11fUnpackFfMagicCode(tpAniSirGlobal pCtx, - tANI_U8 *pBuf, - tDot11fFfMagicCode *pDst) -{ - DOT11F_MEMCPY(pCtx, pDst->magic, pBuf, 6); - (void)pCtx; -} /* End dot11fUnpackFfMagicCode. */ +#define SigFfLinkMargin ( 0x000e ) -#define SigFfMagicCode ( 0x0011 ) +#define SigFfListenInterval ( 0x000f ) void dot11fUnpackFfMaxTxPower(tpAniSirGlobal pCtx, tANI_U8 *pBuf, @@ -799,7 +781,7 @@ void dot11fUnpackFfMaxTxPower(tpAniSirGlobal pCtx, (void)pCtx; } /* End dot11fUnpackFfMaxTxPower. */ -#define SigFfMaxTxPower ( 0x0012 ) +#define SigFfMaxTxPower ( 0x0010 ) void dot11fUnpackFfNumOfRepetitions(tpAniSirGlobal pCtx, tANI_U8 *pBuf, @@ -809,7 +791,7 @@ void dot11fUnpackFfNumOfRepetitions(tpAniSirGlobal pCtx, (void)pCtx; } /* End dot11fUnpackFfNumOfRepetitions. */ -#define SigFfNumOfRepetitions ( 0x0013 ) +#define SigFfNumOfRepetitions ( 0x0011 ) void dot11fUnpackFfOperatingMode(tpAniSirGlobal pCtx, tANI_U8 *pBuf, @@ -824,7 +806,7 @@ void dot11fUnpackFfOperatingMode(tpAniSirGlobal pCtx, (void)pCtx; } /* End dot11fUnpackFfOperatingMode. */ -#define SigFfOperatingMode ( 0x0014 ) +#define SigFfOperatingMode ( 0x0012 ) void dot11fUnpackFfP2POUI(tpAniSirGlobal pCtx, tANI_U8 *pBuf, @@ -834,7 +816,7 @@ void dot11fUnpackFfP2POUI(tpAniSirGlobal pCtx, (void)pCtx; } /* End dot11fUnpackFfP2POUI. */ -#define SigFfP2POUI ( 0x0015 ) +#define SigFfP2POUI ( 0x0013 ) void dot11fUnpackFfP2POUISubType(tpAniSirGlobal pCtx, tANI_U8 *pBuf, @@ -844,7 +826,7 @@ void dot11fUnpackFfP2POUISubType(tpAniSirGlobal pCtx, (void)pCtx; } /* End dot11fUnpackFfP2POUISubType. */ -#define SigFfP2POUISubType ( 0x0016 ) +#define SigFfP2POUISubType ( 0x0014 ) void dot11fUnpackFfRCPI(tpAniSirGlobal pCtx, tANI_U8 *pBuf, @@ -854,37 +836,7 @@ void dot11fUnpackFfRCPI(tpAniSirGlobal pCtx, (void)pCtx; } /* End dot11fUnpackFfRCPI. */ -#define SigFfRCPI ( 0x0017 ) - -void dot11fUnpackFfRMCDialogToken(tpAniSirGlobal pCtx, - tANI_U8 *pBuf, - tDot11fFfRMCDialogToken *pDst) -{ - framesntohl(pCtx, &pDst->token, pBuf, 0); - (void)pCtx; -} /* End dot11fUnpackFfRMCDialogToken. */ - -#define SigFfRMCDialogToken ( 0x0018 ) - -void dot11fUnpackFfRMCOUI(tpAniSirGlobal pCtx, - tANI_U8 *pBuf, - tDot11fFfRMCOUI *pDst) -{ - DOT11F_MEMCPY(pCtx, pDst->oui, pBuf, 3); - (void)pCtx; -} /* End dot11fUnpackFfRMCOUI. */ - -#define SigFfRMCOUI ( 0x0019 ) - -void dot11fUnpackFfRMCVersion(tpAniSirGlobal pCtx, - tANI_U8 *pBuf, - tDot11fFfRMCVersion *pDst) -{ - pDst->version = *pBuf; - (void)pCtx; -} /* End dot11fUnpackFfRMCVersion. */ - -#define SigFfRMCVersion ( 0x001a ) +#define SigFfRCPI ( 0x0015 ) void dot11fUnpackFfRSNI(tpAniSirGlobal pCtx, tANI_U8 *pBuf, @@ -894,9 +846,9 @@ void dot11fUnpackFfRSNI(tpAniSirGlobal pCtx, (void)pCtx; } /* End dot11fUnpackFfRSNI. */ -#define SigFfRSNI ( 0x001b ) +#define SigFfRSNI ( 0x0016 ) -#define SigFfReason ( 0x001c ) +#define SigFfReason ( 0x0017 ) void dot11fUnpackFfRxAntennaId(tpAniSirGlobal pCtx, tANI_U8 *pBuf, @@ -906,7 +858,7 @@ void dot11fUnpackFfRxAntennaId(tpAniSirGlobal pCtx, (void)pCtx; } /* End dot11fUnpackFfRxAntennaId. */ -#define SigFfRxAntennaId ( 0x001d ) +#define SigFfRxAntennaId ( 0x0018 ) void dot11fUnpackFfSMPowerModeSet(tpAniSirGlobal pCtx, tANI_U8 *pBuf, @@ -920,9 +872,9 @@ void dot11fUnpackFfSMPowerModeSet(tpAniSirGlobal pCtx, (void)pCtx; } /* End dot11fUnpackFfSMPowerModeSet. */ -#define SigFfSMPowerModeSet ( 0x001e ) +#define SigFfSMPowerModeSet ( 0x0019 ) -#define SigFfStatus ( 0x001f ) +#define SigFfStatus ( 0x001a ) void dot11fUnpackFfStatusCode(tpAniSirGlobal pCtx, tANI_U8 *pBuf, @@ -932,7 +884,7 @@ void dot11fUnpackFfStatusCode(tpAniSirGlobal pCtx, (void)pCtx; } /* End dot11fUnpackFfStatusCode. */ -#define SigFfStatusCode ( 0x0020 ) +#define SigFfStatusCode ( 0x001b ) void dot11fUnpackFfTPCEleID(tpAniSirGlobal pCtx, tANI_U8 *pBuf, @@ -942,7 +894,7 @@ void dot11fUnpackFfTPCEleID(tpAniSirGlobal pCtx, (void)pCtx; } /* End dot11fUnpackFfTPCEleID. */ -#define SigFfTPCEleID ( 0x0021 ) +#define SigFfTPCEleID ( 0x001c ) void dot11fUnpackFfTPCEleLen(tpAniSirGlobal pCtx, tANI_U8 *pBuf, @@ -952,7 +904,7 @@ void dot11fUnpackFfTPCEleLen(tpAniSirGlobal pCtx, (void)pCtx; } /* End dot11fUnpackFfTPCEleLen. */ -#define SigFfTPCEleLen ( 0x0022 ) +#define SigFfTPCEleLen ( 0x001d ) void dot11fUnpackFfTSInfo(tpAniSirGlobal pCtx, tANI_U8 *pBuf, @@ -973,7 +925,7 @@ void dot11fUnpackFfTSInfo(tpAniSirGlobal pCtx, (void)pCtx; } /* End dot11fUnpackFfTSInfo. */ -#define SigFfTSInfo ( 0x0023 ) +#define SigFfTSInfo ( 0x001e ) void dot11fUnpackFfTimeStamp(tpAniSirGlobal pCtx, tANI_U8 *pBuf, @@ -983,7 +935,7 @@ void dot11fUnpackFfTimeStamp(tpAniSirGlobal pCtx, (void)pCtx; } /* End dot11fUnpackFfTimeStamp. */ -#define SigFfTimeStamp ( 0x0024 ) +#define SigFfTimeStamp ( 0x001f ) void dot11fUnpackFfTransactionId(tpAniSirGlobal pCtx, tANI_U8 *pBuf, @@ -993,7 +945,7 @@ void dot11fUnpackFfTransactionId(tpAniSirGlobal pCtx, (void)pCtx; } /* End dot11fUnpackFfTransactionId. */ -#define SigFfTransactionId ( 0x0025 ) +#define SigFfTransactionId ( 0x0020 ) void dot11fUnpackFfTxAntennaId(tpAniSirGlobal pCtx, tANI_U8 *pBuf, @@ -1003,7 +955,7 @@ void dot11fUnpackFfTxAntennaId(tpAniSirGlobal pCtx, (void)pCtx; } /* End dot11fUnpackFfTxAntennaId. */ -#define SigFfTxAntennaId ( 0x0026 ) +#define SigFfTxAntennaId ( 0x0021 ) void dot11fUnpackFfTxPower(tpAniSirGlobal pCtx, tANI_U8 *pBuf, @@ -1013,7 +965,7 @@ void dot11fUnpackFfTxPower(tpAniSirGlobal pCtx, (void)pCtx; } /* End dot11fUnpackFfTxPower. */ -#define SigFfTxPower ( 0x0027 ) +#define SigFfTxPower ( 0x0022 ) void dot11fUnpackFfVhtMembershipStatusArray(tpAniSirGlobal pCtx, tANI_U8 *pBuf, @@ -1023,7 +975,7 @@ void dot11fUnpackFfVhtMembershipStatusArray(tpAniSirGlobal pCtx, (void)pCtx; } /* End dot11fUnpackFfVhtMembershipStatusArray. */ -#define SigFfVhtMembershipStatusArray ( 0x0028 ) +#define SigFfVhtMembershipStatusArray ( 0x0023 ) void dot11fUnpackFfVhtUserPositionArray(tpAniSirGlobal pCtx, tANI_U8 *pBuf, @@ -1033,7 +985,7 @@ void dot11fUnpackFfVhtUserPositionArray(tpAniSirGlobal pCtx, (void)pCtx; } /* End dot11fUnpackFfVhtUserPositionArray. */ -#define SigFfVhtUserPositionArray ( 0x0029 ) +#define SigFfVhtUserPositionArray ( 0x0024 ) tANI_U32 dot11fUnpackTlvAuthorizedMACs(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U16 tlvlen, tDot11fTLVAuthorizedMACs *pDst) { @@ -3963,20 +3915,6 @@ tANI_U32 dot11fUnpackIeOperatingMode(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 #define SigIeOperatingMode ( 0x004c ) -tANI_U32 dot11fUnpackIeOxygenNetwork(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEOxygenNetwork *pDst) -{ - tANI_U32 status = DOT11F_PARSE_SUCCESS; - (void) pBuf; (void)ielen; /* Shutup the compiler */ - if (pDst->present) status = DOT11F_DUPLICATE_IE; - pDst->present = 1; - framesntohs(pCtx, &pDst->data, pBuf, 0); - (void)pCtx; - return status; -} /* End dot11fUnpackIeOxygenNetwork. */ - -#define SigIeOxygenNetwork ( 0x004d ) - - static const tTLVDefn TLVS_P2PAssocReq[ ] = { {offsetof(tDot11fIEP2PAssocReq, P2PCapability), offsetof(tDot11fTLVP2PCapability, present), "P2PCapability", SigTlvP2PCapability, DOT11F_TLV_P2PCAPABILITY, 0, 5, 5, 1, 1, 2, 0, }, {offsetof(tDot11fIEP2PAssocReq, ExtendedListenTiming), offsetof(tDot11fTLVExtendedListenTiming, present), "ExtendedListenTiming", SigTlvExtendedListenTiming, DOT11F_TLV_EXTENDEDLISTENTIMING, 0, 7, 7, 0, 1, 2, 0, }, @@ -3993,7 +3931,7 @@ tANI_U32 dot11fUnpackIeP2PAssocReq(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 i return status; } /* End dot11fUnpackIeP2PAssocReq. */ -#define SigIeP2PAssocReq ( 0x004e ) +#define SigIeP2PAssocReq ( 0x004d ) static const tTLVDefn TLVS_P2PAssocRes[ ] = { @@ -4011,7 +3949,7 @@ tANI_U32 dot11fUnpackIeP2PAssocRes(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 i return status; } /* End dot11fUnpackIeP2PAssocRes. */ -#define SigIeP2PAssocRes ( 0x004f ) +#define SigIeP2PAssocRes ( 0x004e ) static const tTLVDefn TLVS_P2PBeacon[ ] = { @@ -4030,7 +3968,7 @@ tANI_U32 dot11fUnpackIeP2PBeacon(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 iel return status; } /* End dot11fUnpackIeP2PBeacon. */ -#define SigIeP2PBeacon ( 0x0050 ) +#define SigIeP2PBeacon ( 0x004f ) static const tTLVDefn TLVS_P2PBeaconProbeRes[ ] = { @@ -4052,7 +3990,7 @@ tANI_U32 dot11fUnpackIeP2PBeaconProbeRes(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tAN return status; } /* End dot11fUnpackIeP2PBeaconProbeRes. */ -#define SigIeP2PBeaconProbeRes ( 0x0051 ) +#define SigIeP2PBeaconProbeRes ( 0x0050 ) static const tTLVDefn TLVS_P2PDeAuth[ ] = { @@ -4069,7 +4007,7 @@ tANI_U32 dot11fUnpackIeP2PDeAuth(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 iel return status; } /* End dot11fUnpackIeP2PDeAuth. */ -#define SigIeP2PDeAuth ( 0x0052 ) +#define SigIeP2PDeAuth ( 0x0051 ) static const tTLVDefn TLVS_P2PDeviceDiscoverabilityReq[ ] = { @@ -4087,7 +4025,7 @@ tANI_U32 dot11fUnpackIeP2PDeviceDiscoverabilityReq(tpAniSirGlobal pCtx, tANI_U8 return status; } /* End dot11fUnpackIeP2PDeviceDiscoverabilityReq. */ -#define SigIeP2PDeviceDiscoverabilityReq ( 0x0053 ) +#define SigIeP2PDeviceDiscoverabilityReq ( 0x0052 ) static const tTLVDefn TLVS_P2PDeviceDiscoverabilityRes[ ] = { @@ -4104,7 +4042,7 @@ tANI_U32 dot11fUnpackIeP2PDeviceDiscoverabilityRes(tpAniSirGlobal pCtx, tANI_U8 return status; } /* End dot11fUnpackIeP2PDeviceDiscoverabilityRes. */ -#define SigIeP2PDeviceDiscoverabilityRes ( 0x0054 ) +#define SigIeP2PDeviceDiscoverabilityRes ( 0x0053 ) static const tTLVDefn TLVS_P2PDisAssoc[ ] = { @@ -4121,7 +4059,7 @@ tANI_U32 dot11fUnpackIeP2PDisAssoc(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 i return status; } /* End dot11fUnpackIeP2PDisAssoc. */ -#define SigIeP2PDisAssoc ( 0x0055 ) +#define SigIeP2PDisAssoc ( 0x0054 ) static const tTLVDefn TLVS_P2PGONegCnf[ ] = { @@ -4142,7 +4080,7 @@ tANI_U32 dot11fUnpackIeP2PGONegCnf(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 i return status; } /* End dot11fUnpackIeP2PGONegCnf. */ -#define SigIeP2PGONegCnf ( 0x0056 ) +#define SigIeP2PGONegCnf ( 0x0055 ) static const tTLVDefn TLVS_P2PGONegReq[ ] = { @@ -4167,7 +4105,7 @@ tANI_U32 dot11fUnpackIeP2PGONegReq(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 i return status; } /* End dot11fUnpackIeP2PGONegReq. */ -#define SigIeP2PGONegReq ( 0x0057 ) +#define SigIeP2PGONegReq ( 0x0056 ) static const tTLVDefn TLVS_P2PGONegRes[ ] = { @@ -4192,7 +4130,7 @@ tANI_U32 dot11fUnpackIeP2PGONegRes(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 i return status; } /* End dot11fUnpackIeP2PGONegRes. */ -#define SigIeP2PGONegRes ( 0x0058 ) +#define SigIeP2PGONegRes ( 0x0057 ) static const tTLVDefn TLVS_P2PGONegWPS[ ] = { @@ -4210,7 +4148,7 @@ tANI_U32 dot11fUnpackIeP2PGONegWPS(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 i return status; } /* End dot11fUnpackIeP2PGONegWPS. */ -#define SigIeP2PGONegWPS ( 0x0059 ) +#define SigIeP2PGONegWPS ( 0x0058 ) tANI_U32 dot11fUnpackIeP2PIEOpaque(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEP2PIEOpaque *pDst) @@ -4230,7 +4168,7 @@ tANI_U32 dot11fUnpackIeP2PIEOpaque(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 i return status; } /* End dot11fUnpackIeP2PIEOpaque. */ -#define SigIeP2PIEOpaque ( 0x005a ) +#define SigIeP2PIEOpaque ( 0x0059 ) static const tTLVDefn TLVS_P2PInvitationReq[ ] = { @@ -4253,7 +4191,7 @@ tANI_U32 dot11fUnpackIeP2PInvitationReq(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI return status; } /* End dot11fUnpackIeP2PInvitationReq. */ -#define SigIeP2PInvitationReq ( 0x005b ) +#define SigIeP2PInvitationReq ( 0x005a ) static const tTLVDefn TLVS_P2PInvitationRes[ ] = { @@ -4274,7 +4212,7 @@ tANI_U32 dot11fUnpackIeP2PInvitationRes(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI return status; } /* End dot11fUnpackIeP2PInvitationRes. */ -#define SigIeP2PInvitationRes ( 0x005c ) +#define SigIeP2PInvitationRes ( 0x005b ) static const tTLVDefn TLVS_P2PNoticeOfAbsence[ ] = { @@ -4291,7 +4229,7 @@ tANI_U32 dot11fUnpackIeP2PNoticeOfAbsence(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tA return status; } /* End dot11fUnpackIeP2PNoticeOfAbsence. */ -#define SigIeP2PNoticeOfAbsence ( 0x005d ) +#define SigIeP2PNoticeOfAbsence ( 0x005c ) static const tTLVDefn TLVS_P2PPresenceResponse[ ] = { @@ -4309,7 +4247,7 @@ tANI_U32 dot11fUnpackIeP2PPresenceResponse(tpAniSirGlobal pCtx, tANI_U8 *pBuf, t return status; } /* End dot11fUnpackIeP2PPresenceResponse. */ -#define SigIeP2PPresenceResponse ( 0x005e ) +#define SigIeP2PPresenceResponse ( 0x005d ) static const tTLVDefn TLVS_P2PProbeReq[ ] = { @@ -4330,7 +4268,7 @@ tANI_U32 dot11fUnpackIeP2PProbeReq(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 i return status; } /* End dot11fUnpackIeP2PProbeReq. */ -#define SigIeP2PProbeReq ( 0x005f ) +#define SigIeP2PProbeReq ( 0x005e ) static const tTLVDefn TLVS_P2PProbeRes[ ] = { @@ -4351,7 +4289,7 @@ tANI_U32 dot11fUnpackIeP2PProbeRes(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 i return status; } /* End dot11fUnpackIeP2PProbeRes. */ -#define SigIeP2PProbeRes ( 0x0060 ) +#define SigIeP2PProbeRes ( 0x005f ) static const tTLVDefn TLVS_P2PProvisionDiscoveryReq[ ] = { @@ -4370,7 +4308,7 @@ tANI_U32 dot11fUnpackIeP2PProvisionDiscoveryReq(tpAniSirGlobal pCtx, tANI_U8 *pB return status; } /* End dot11fUnpackIeP2PProvisionDiscoveryReq. */ -#define SigIeP2PProvisionDiscoveryReq ( 0x0061 ) +#define SigIeP2PProvisionDiscoveryReq ( 0x0060 ) static const tTLVDefn TLVS_P2PWSCProvisionDiscoveryRes[ ] = { @@ -4387,7 +4325,7 @@ tANI_U32 dot11fUnpackIeP2PWSCProvisionDiscoveryRes(tpAniSirGlobal pCtx, tANI_U8 return status; } /* End dot11fUnpackIeP2PWSCProvisionDiscoveryRes. */ -#define SigIeP2PWSCProvisionDiscoveryRes ( 0x0062 ) +#define SigIeP2PWSCProvisionDiscoveryRes ( 0x0061 ) tANI_U32 dot11fUnpackIePTIControl(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEPTIControl *pDst) @@ -4404,7 +4342,7 @@ tANI_U32 dot11fUnpackIePTIControl(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ie return status; } /* End dot11fUnpackIePTIControl. */ -#define SigIePTIControl ( 0x0063 ) +#define SigIePTIControl ( 0x0062 ) tANI_U32 dot11fUnpackIePUBufferStatus(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEPUBufferStatus *pDst) @@ -4424,7 +4362,7 @@ tANI_U32 dot11fUnpackIePUBufferStatus(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U return status; } /* End dot11fUnpackIePUBufferStatus. */ -#define SigIePUBufferStatus ( 0x0064 ) +#define SigIePUBufferStatus ( 0x0063 ) tANI_U32 dot11fUnpackIePowerCaps(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEPowerCaps *pDst) @@ -4441,7 +4379,7 @@ tANI_U32 dot11fUnpackIePowerCaps(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 iel return status; } /* End dot11fUnpackIePowerCaps. */ -#define SigIePowerCaps ( 0x0065 ) +#define SigIePowerCaps ( 0x0064 ) tANI_U32 dot11fUnpackIePowerConstraints(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEPowerConstraints *pDst) @@ -4455,7 +4393,7 @@ tANI_U32 dot11fUnpackIePowerConstraints(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI return status; } /* End dot11fUnpackIePowerConstraints. */ -#define SigIePowerConstraints ( 0x0066 ) +#define SigIePowerConstraints ( 0x0065 ) tANI_U32 dot11fUnpackIeQBSSLoad(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEQBSSLoad *pDst) @@ -4475,7 +4413,7 @@ tANI_U32 dot11fUnpackIeQBSSLoad(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 iele return status; } /* End dot11fUnpackIeQBSSLoad. */ -#define SigIeQBSSLoad ( 0x0067 ) +#define SigIeQBSSLoad ( 0x0066 ) tANI_U32 dot11fUnpackIeQOSCapsAp(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEQOSCapsAp *pDst) @@ -4495,7 +4433,7 @@ tANI_U32 dot11fUnpackIeQOSCapsAp(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 iel return status; } /* End dot11fUnpackIeQOSCapsAp. */ -#define SigIeQOSCapsAp ( 0x0068 ) +#define SigIeQOSCapsAp ( 0x0067 ) tANI_U32 dot11fUnpackIeQOSCapsStation(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEQOSCapsStation *pDst) @@ -4517,7 +4455,7 @@ tANI_U32 dot11fUnpackIeQOSCapsStation(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U return status; } /* End dot11fUnpackIeQOSCapsStation. */ -#define SigIeQOSCapsStation ( 0x0069 ) +#define SigIeQOSCapsStation ( 0x0068 ) tANI_U32 dot11fUnpackIeQuiet(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEQuiet *pDst) @@ -4540,7 +4478,7 @@ tANI_U32 dot11fUnpackIeQuiet(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, return status; } /* End dot11fUnpackIeQuiet. */ -#define SigIeQuiet ( 0x006a ) +#define SigIeQuiet ( 0x0069 ) tANI_U32 dot11fUnpackIeRCPIIE(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIERCPIIE *pDst) @@ -4554,7 +4492,7 @@ tANI_U32 dot11fUnpackIeRCPIIE(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, return status; } /* End dot11fUnpackIeRCPIIE. */ -#define SigIeRCPIIE ( 0x006b ) +#define SigIeRCPIIE ( 0x006a ) static const tFFDefn FFS_RICDataDesc[ ] = { @@ -4594,7 +4532,7 @@ tANI_U32 dot11fUnpackIeRICDataDesc(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 i return status; } /* End dot11fUnpackIeRICDataDesc. */ -#define SigIeRICDataDesc ( 0x006c ) +#define SigIeRICDataDesc ( 0x006b ) tANI_U32 dot11fUnpackIeRSN(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIERSN *pDst) @@ -4697,7 +4635,7 @@ tANI_U32 dot11fUnpackIeRSN(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tD return status; } /* End dot11fUnpackIeRSN. */ -#define SigIeRSN ( 0x006d ) +#define SigIeRSN ( 0x006c ) tANI_U32 dot11fUnpackIeRSNIIE(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIERSNIIE *pDst) @@ -4711,7 +4649,7 @@ tANI_U32 dot11fUnpackIeRSNIIE(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, return status; } /* End dot11fUnpackIeRSNIIE. */ -#define SigIeRSNIIE ( 0x006e ) +#define SigIeRSNIIE ( 0x006d ) tANI_U32 dot11fUnpackIeRSNOpaque(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIERSNOpaque *pDst) @@ -4731,7 +4669,7 @@ tANI_U32 dot11fUnpackIeRSNOpaque(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 iel return status; } /* End dot11fUnpackIeRSNOpaque. */ -#define SigIeRSNOpaque ( 0x006f ) +#define SigIeRSNOpaque ( 0x006e ) tANI_U32 dot11fUnpackIeSuppChannels(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIESuppChannels *pDst) @@ -4751,7 +4689,7 @@ tANI_U32 dot11fUnpackIeSuppChannels(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 return status; } /* End dot11fUnpackIeSuppChannels. */ -#define SigIeSuppChannels ( 0x0070 ) +#define SigIeSuppChannels ( 0x006f ) tANI_U32 dot11fUnpackIeSuppRates(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIESuppRates *pDst) @@ -4779,7 +4717,7 @@ tANI_U32 dot11fUnpackIeSuppRates(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 iel return status; } /* End dot11fUnpackIeSuppRates. */ -#define SigIeSuppRates ( 0x0071 ) +#define SigIeSuppRates ( 0x0070 ) tANI_U32 dot11fUnpackIeTIM(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIETIM *pDst) @@ -4808,7 +4746,7 @@ tANI_U32 dot11fUnpackIeTIM(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tD return status; } /* End dot11fUnpackIeTIM. */ -#define SigIeTIM ( 0x0072 ) +#define SigIeTIM ( 0x0071 ) tANI_U32 dot11fUnpackIeTPCReport(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIETPCReport *pDst) @@ -4825,7 +4763,7 @@ tANI_U32 dot11fUnpackIeTPCReport(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 iel return status; } /* End dot11fUnpackIeTPCReport. */ -#define SigIeTPCReport ( 0x0073 ) +#define SigIeTPCReport ( 0x0072 ) tANI_U32 dot11fUnpackIeTPCRequest(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIETPCRequest *pDst) @@ -4838,7 +4776,7 @@ tANI_U32 dot11fUnpackIeTPCRequest(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ie return status; } /* End dot11fUnpackIeTPCRequest. */ -#define SigIeTPCRequest ( 0x0074 ) +#define SigIeTPCRequest ( 0x0073 ) tANI_U32 dot11fUnpackIeVHTCaps(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEVHTCaps *pDst) @@ -4891,7 +4829,7 @@ tANI_U32 dot11fUnpackIeVHTCaps(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen return status; } /* End dot11fUnpackIeVHTCaps. */ -#define SigIeVHTCaps ( 0x0075 ) +#define SigIeVHTCaps ( 0x0074 ) tANI_U32 dot11fUnpackIeVHTExtBssLoad(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEVHTExtBssLoad *pDst) @@ -4917,7 +4855,7 @@ tANI_U32 dot11fUnpackIeVHTExtBssLoad(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 return status; } /* End dot11fUnpackIeVHTExtBssLoad. */ -#define SigIeVHTExtBssLoad ( 0x0076 ) +#define SigIeVHTExtBssLoad ( 0x0075 ) tANI_U32 dot11fUnpackIeVHTOperation(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEVHTOperation *pDst) @@ -4940,7 +4878,7 @@ tANI_U32 dot11fUnpackIeVHTOperation(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 return status; } /* End dot11fUnpackIeVHTOperation. */ -#define SigIeVHTOperation ( 0x0077 ) +#define SigIeVHTOperation ( 0x0076 ) tANI_U32 dot11fUnpackIeWAPI(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEWAPI *pDst) @@ -5009,7 +4947,7 @@ tANI_U32 dot11fUnpackIeWAPI(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, t return status; } /* End dot11fUnpackIeWAPI. */ -#define SigIeWAPI ( 0x0078 ) +#define SigIeWAPI ( 0x0077 ) tANI_U32 dot11fUnpackIeWAPIOpaque(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEWAPIOpaque *pDst) @@ -5029,7 +4967,7 @@ tANI_U32 dot11fUnpackIeWAPIOpaque(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ie return status; } /* End dot11fUnpackIeWAPIOpaque. */ -#define SigIeWAPIOpaque ( 0x0079 ) +#define SigIeWAPIOpaque ( 0x0078 ) tANI_U32 dot11fUnpackIeWFATPC(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEWFATPC *pDst) @@ -5046,7 +4984,7 @@ tANI_U32 dot11fUnpackIeWFATPC(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, return status; } /* End dot11fUnpackIeWFATPC. */ -#define SigIeWFATPC ( 0x007a ) +#define SigIeWFATPC ( 0x0079 ) tANI_U32 dot11fUnpackIeWFDIEOpaque(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEWFDIEOpaque *pDst) @@ -5066,7 +5004,7 @@ tANI_U32 dot11fUnpackIeWFDIEOpaque(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 i return status; } /* End dot11fUnpackIeWFDIEOpaque. */ -#define SigIeWFDIEOpaque ( 0x007b ) +#define SigIeWFDIEOpaque ( 0x007a ) tANI_U32 dot11fUnpackIeWMMCaps(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEWMMCaps *pDst) @@ -5094,7 +5032,7 @@ tANI_U32 dot11fUnpackIeWMMCaps(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen return status; } /* End dot11fUnpackIeWMMCaps. */ -#define SigIeWMMCaps ( 0x007c ) +#define SigIeWMMCaps ( 0x007b ) tANI_U32 dot11fUnpackIeWMMInfoAp(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEWMMInfoAp *pDst) @@ -5115,7 +5053,7 @@ tANI_U32 dot11fUnpackIeWMMInfoAp(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 iel return status; } /* End dot11fUnpackIeWMMInfoAp. */ -#define SigIeWMMInfoAp ( 0x007d ) +#define SigIeWMMInfoAp ( 0x007c ) tANI_U32 dot11fUnpackIeWMMInfoStation(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEWMMInfoStation *pDst) @@ -5140,7 +5078,7 @@ tANI_U32 dot11fUnpackIeWMMInfoStation(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U return status; } /* End dot11fUnpackIeWMMInfoStation. */ -#define SigIeWMMInfoStation ( 0x007e ) +#define SigIeWMMInfoStation ( 0x007d ) tANI_U32 dot11fUnpackIeWMMParams(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEWMMParams *pDst) @@ -5233,7 +5171,7 @@ tANI_U32 dot11fUnpackIeWMMParams(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 iel return status; } /* End dot11fUnpackIeWMMParams. */ -#define SigIeWMMParams ( 0x007f ) +#define SigIeWMMParams ( 0x007e ) tANI_U32 dot11fUnpackIeWPA(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEWPA *pDst) @@ -5315,7 +5253,7 @@ tANI_U32 dot11fUnpackIeWPA(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tD return status; } /* End dot11fUnpackIeWPA. */ -#define SigIeWPA ( 0x0080 ) +#define SigIeWPA ( 0x007f ) tANI_U32 dot11fUnpackIeWPAOpaque(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEWPAOpaque *pDst) @@ -5335,7 +5273,7 @@ tANI_U32 dot11fUnpackIeWPAOpaque(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 iel return status; } /* End dot11fUnpackIeWPAOpaque. */ -#define SigIeWPAOpaque ( 0x0081 ) +#define SigIeWPAOpaque ( 0x0080 ) static const tTLVDefn TLVS_WSC[ ] = { @@ -5373,7 +5311,7 @@ tANI_U32 dot11fUnpackIeWSC(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tD return status; } /* End dot11fUnpackIeWSC. */ -#define SigIeWSC ( 0x0082 ) +#define SigIeWSC ( 0x0081 ) tANI_U32 dot11fUnpackIeWiderBWChanSwitchAnn(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEWiderBWChanSwitchAnn *pDst) @@ -5393,7 +5331,7 @@ tANI_U32 dot11fUnpackIeWiderBWChanSwitchAnn(tpAniSirGlobal pCtx, tANI_U8 *pBuf, return status; } /* End dot11fUnpackIeWiderBWChanSwitchAnn. */ -#define SigIeWiderBWChanSwitchAnn ( 0x0083 ) +#define SigIeWiderBWChanSwitchAnn ( 0x0082 ) static const tTLVDefn TLVS_WscAssocReq[ ] = { @@ -5412,7 +5350,7 @@ tANI_U32 dot11fUnpackIeWscAssocReq(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 i return status; } /* End dot11fUnpackIeWscAssocReq. */ -#define SigIeWscAssocReq ( 0x0084 ) +#define SigIeWscAssocReq ( 0x0083 ) static const tTLVDefn TLVS_WscAssocRes[ ] = { @@ -5431,7 +5369,7 @@ tANI_U32 dot11fUnpackIeWscAssocRes(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 i return status; } /* End dot11fUnpackIeWscAssocRes. */ -#define SigIeWscAssocRes ( 0x0085 ) +#define SigIeWscAssocRes ( 0x0084 ) static const tTLVDefn TLVS_WscBeacon[ ] = { @@ -5456,7 +5394,7 @@ tANI_U32 dot11fUnpackIeWscBeacon(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 iel return status; } /* End dot11fUnpackIeWscBeacon. */ -#define SigIeWscBeacon ( 0x0086 ) +#define SigIeWscBeacon ( 0x0085 ) static const tTLVDefn TLVS_WscBeaconProbeRes[ ] = { @@ -5489,7 +5427,7 @@ tANI_U32 dot11fUnpackIeWscBeaconProbeRes(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tAN return status; } /* End dot11fUnpackIeWscBeaconProbeRes. */ -#define SigIeWscBeaconProbeRes ( 0x0087 ) +#define SigIeWscBeaconProbeRes ( 0x0086 ) tANI_U32 dot11fUnpackIeWscIEOpaque(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEWscIEOpaque *pDst) @@ -5509,7 +5447,7 @@ tANI_U32 dot11fUnpackIeWscIEOpaque(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 i return status; } /* End dot11fUnpackIeWscIEOpaque. */ -#define SigIeWscIEOpaque ( 0x0088 ) +#define SigIeWscIEOpaque ( 0x0087 ) static const tTLVDefn TLVS_WscProbeReq[ ] = { @@ -5540,7 +5478,7 @@ tANI_U32 dot11fUnpackIeWscProbeReq(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 i return status; } /* End dot11fUnpackIeWscProbeReq. */ -#define SigIeWscProbeReq ( 0x0089 ) +#define SigIeWscProbeReq ( 0x0088 ) static const tTLVDefn TLVS_WscProbeRes[ ] = { @@ -5573,7 +5511,7 @@ tANI_U32 dot11fUnpackIeWscProbeRes(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 i return status; } /* End dot11fUnpackIeWscProbeRes. */ -#define SigIeWscProbeRes ( 0x008a ) +#define SigIeWscProbeRes ( 0x0089 ) static const tTLVDefn TLVS_WscReassocRes[ ] = { @@ -5592,7 +5530,7 @@ tANI_U32 dot11fUnpackIeWscReassocRes(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 return status; } /* End dot11fUnpackIeWscReassocRes. */ -#define SigIeWscReassocRes ( 0x008b ) +#define SigIeWscReassocRes ( 0x008a ) static const tFFDefn FFS_AddBAReq[] = { @@ -8504,7 +8442,6 @@ tANI_U32 dot11fUnpackAuthentication(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 {offsetof(tDot11fBeacon, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 10, 10, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, }, {offsetof(tDot11fBeacon, OperatingMode), offsetof(tDot11fIEOperatingMode, present), 0, "OperatingMode" , 0, 3, 3, SigIeOperatingMode, {0, 0, 0, 0, 0}, 0, DOT11F_EID_OPERATINGMODE, 0, }, {offsetof(tDot11fBeacon, WiderBWChanSwitchAnn), offsetof(tDot11fIEWiderBWChanSwitchAnn, present), 0, "WiderBWChanSwitchAnn" , 0, 5, 5, SigIeWiderBWChanSwitchAnn, {0, 0, 0, 0, 0}, 0, DOT11F_EID_WIDERBWCHANSWITCHANN, 0, }, - {offsetof(tDot11fBeacon, OxygenNetwork), offsetof(tDot11fIEOxygenNetwork, present), 0, "OxygenNetwork" , 0, 7, 7, SigIeOxygenNetwork, {0, 22, 50, 0, 0}, 3, DOT11F_EID_OXYGENNETWORK, 0, }, {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, }, }; tANI_U32 dot11fUnpackBeacon(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 nBuf, tDot11fBeacon *pFrm) @@ -9589,15 +9526,6 @@ tANI_U32 dot11fUnpackBeacon(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 nBuf, t FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), ( tANI_U8* )&pFrm->WiderBWChanSwitchAnn.newCenterChanFreq0, 1); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), ( tANI_U8* )&pFrm->WiderBWChanSwitchAnn.newCenterChanFreq1, 1); } - FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), FRFL("OxygenNetwork:\n")); - if (!pFrm->OxygenNetwork.present) - { - FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), FRFL("Not present.\n")); - } - else - { - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), ( tANI_U8* )&pFrm->OxygenNetwork.data, 2); - } } # endif // DOT11F_DUMP_FRAMES return status; @@ -9733,7 +9661,6 @@ tANI_U32 dot11fUnpackBeacon1(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 nBuf, {offsetof(tDot11fBeacon2, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 10, 10, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, }, {offsetof(tDot11fBeacon2, OperatingMode), offsetof(tDot11fIEOperatingMode, present), 0, "OperatingMode" , 0, 3, 3, SigIeOperatingMode, {0, 0, 0, 0, 0}, 0, DOT11F_EID_OPERATINGMODE, 0, }, {offsetof(tDot11fBeacon2, WiderBWChanSwitchAnn), offsetof(tDot11fIEWiderBWChanSwitchAnn, present), 0, "WiderBWChanSwitchAnn" , 0, 5, 5, SigIeWiderBWChanSwitchAnn, {0, 0, 0, 0, 0}, 0, DOT11F_EID_WIDERBWCHANSWITCHANN, 0, }, - {offsetof(tDot11fBeacon2, OxygenNetwork), offsetof(tDot11fIEOxygenNetwork, present), 0, "OxygenNetwork" , 0, 7, 7, SigIeOxygenNetwork, {0, 22, 50, 0, 0}, 3, DOT11F_EID_OXYGENNETWORK, 0, }, {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, }, }; tANI_U32 dot11fUnpackBeacon2(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 nBuf, tDot11fBeacon2 *pFrm) @@ -10666,15 +10593,6 @@ tANI_U32 dot11fUnpackBeacon2(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 nBuf, FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), ( tANI_U8* )&pFrm->WiderBWChanSwitchAnn.newCenterChanFreq0, 1); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), ( tANI_U8* )&pFrm->WiderBWChanSwitchAnn.newCenterChanFreq1, 1); } - FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), FRFL("OxygenNetwork:\n")); - if (!pFrm->OxygenNetwork.present) - { - FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), FRFL("Not present.\n")); - } - else - { - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), ( tANI_U8* )&pFrm->OxygenNetwork.data, 2); - } } # endif // DOT11F_DUMP_FRAMES return status; @@ -10730,7 +10648,6 @@ tANI_U32 dot11fUnpackBeacon2(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 nBuf, {offsetof(tDot11fBeaconIEs, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 10, 10, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, }, {offsetof(tDot11fBeaconIEs, OperatingMode), offsetof(tDot11fIEOperatingMode, present), 0, "OperatingMode" , 0, 3, 3, SigIeOperatingMode, {0, 0, 0, 0, 0}, 0, DOT11F_EID_OPERATINGMODE, 0, }, {offsetof(tDot11fBeaconIEs, WiderBWChanSwitchAnn), offsetof(tDot11fIEWiderBWChanSwitchAnn, present), 0, "WiderBWChanSwitchAnn" , 0, 5, 5, SigIeWiderBWChanSwitchAnn, {0, 0, 0, 0, 0}, 0, DOT11F_EID_WIDERBWCHANSWITCHANN, 0, }, - {offsetof(tDot11fBeaconIEs, OxygenNetwork), offsetof(tDot11fIEOxygenNetwork, present), 0, "OxygenNetwork" , 0, 7, 7, SigIeOxygenNetwork, {0, 22, 50, 0, 0}, 3, DOT11F_EID_OXYGENNETWORK, 0, }, {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, }, }; tANI_U32 dot11fUnpackBeaconIEs(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 nBuf, tDot11fBeaconIEs *pFrm) @@ -11923,15 +11840,6 @@ tANI_U32 dot11fUnpackBeaconIEs(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 nBuf FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), ( tANI_U8* )&pFrm->WiderBWChanSwitchAnn.newCenterChanFreq0, 1); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), ( tANI_U8* )&pFrm->WiderBWChanSwitchAnn.newCenterChanFreq1, 1); } - FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), FRFL("OxygenNetwork:\n")); - if (!pFrm->OxygenNetwork.present) - { - FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), FRFL("Not present.\n")); - } - else - { - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), ( tANI_U8* )&pFrm->OxygenNetwork.data, 2); - } } # endif // DOT11F_DUMP_FRAMES return status; @@ -14205,7 +14113,6 @@ tANI_U32 dot11fUnpackProbeRequest(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 n {offsetof(tDot11fProbeResponse, VHTOperation), offsetof(tDot11fIEVHTOperation, present), 0, "VHTOperation" , 0, 7, 7, SigIeVHTOperation, {0, 0, 0, 0, 0}, 0, DOT11F_EID_VHTOPERATION, 0, }, {offsetof(tDot11fProbeResponse, VHTExtBssLoad), offsetof(tDot11fIEVHTExtBssLoad, present), 0, "VHTExtBssLoad" , 0, 7, 7, SigIeVHTExtBssLoad, {0, 0, 0, 0, 0}, 0, DOT11F_EID_VHTEXTBSSLOAD, 0, }, {offsetof(tDot11fProbeResponse, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 10, 10, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, }, - {offsetof(tDot11fProbeResponse, OxygenNetwork), offsetof(tDot11fIEOxygenNetwork, present), 0, "OxygenNetwork" , 0, 7, 7, SigIeOxygenNetwork, {0, 22, 50, 0, 0}, 3, DOT11F_EID_OXYGENNETWORK, 0, }, {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, }, }; tANI_U32 dot11fUnpackProbeResponse(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 nBuf, tDot11fProbeResponse *pFrm) @@ -15344,15 +15251,6 @@ tANI_U32 dot11fUnpackProbeResponse(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), FRFL("operModeNotification (1): %d\n"), pFrm->ExtCap.operModeNotification); FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), FRFL("reserved7 (1): %d\n"), pFrm->ExtCap.reserved7); } - FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), FRFL("OxygenNetwork:\n")); - if (!pFrm->OxygenNetwork.present) - { - FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), FRFL("Not present.\n")); - } - else - { - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), ( tANI_U8* )&pFrm->OxygenNetwork.data, 2); - } } # endif // DOT11F_DUMP_FRAMES return status; @@ -15510,53 +15408,6 @@ tANI_U32 dot11fUnpackProvisionDiscoveryRes(tpAniSirGlobal pCtx, tANI_U8 *pBuf, t } /* End dot11fUnpackProvisionDiscoveryRes. */ - static const tFFDefn FFS_RMC[] = { - { "Category", offsetof(tDot11fRMC, Category), SigFfCategory , DOT11F_FF_CATEGORY_LEN, }, - { "RMCOUI", offsetof(tDot11fRMC, RMCOUI), SigFfRMCOUI , DOT11F_FF_RMCOUI_LEN, }, - { "MagicCode", offsetof(tDot11fRMC, MagicCode), SigFfMagicCode , DOT11F_FF_MAGICCODE_LEN, }, - { "RMCVersion", offsetof(tDot11fRMC, RMCVersion), SigFfRMCVersion , DOT11F_FF_RMCVERSION_LEN, }, - { "Action", offsetof(tDot11fRMC, Action), SigFfAction , DOT11F_FF_ACTION_LEN, }, - { "RMCDialogToken", offsetof(tDot11fRMC, RMCDialogToken), SigFfRMCDialogToken , DOT11F_FF_RMCDIALOGTOKEN_LEN, }, - { "Leader", offsetof(tDot11fRMC, Leader), SigFfLeader , DOT11F_FF_LEADER_LEN, }, - { NULL, 0, 0, 0,}, - }; - - static const tIEDefn IES_RMC[] = { - {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, }, }; - -tANI_U32 dot11fUnpackRMC(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 nBuf, tDot11fRMC *pFrm) -{ - tANI_U32 i = 0; - tANI_U32 status = 0; - status = UnpackCore(pCtx, pBuf, nBuf, FFS_RMC, IES_RMC, ( tANI_U8* )pFrm, sizeof(*pFrm)); - - (void)i; -# ifdef DOT11F_DUMP_FRAMES - if (!DOT11F_FAILED(status)) - { - FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), FRFL("Unpacked the RMC:\n")); - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), pBuf, nBuf); - FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), FRFL("to:\n")); - FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), FRFL("Category:\n")); - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), ( tANI_U8* )&pFrm->Category.category, 1); - FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), FRFL("RMCOUI:\n")); - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), ( tANI_U8* )&pFrm->RMCOUI.oui, 3); - FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), FRFL("MagicCode:\n")); - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), ( tANI_U8* )&pFrm->MagicCode.magic, 6); - FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), FRFL("RMCVersion:\n")); - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), ( tANI_U8* )&pFrm->RMCVersion.version, 1); - FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), FRFL("Action:\n")); - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), ( tANI_U8* )&pFrm->Action.action, 1); - FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), FRFL("RMCDialogToken:\n")); - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), ( tANI_U8* )&pFrm->RMCDialogToken.token, 4); - FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), FRFL("Leader:\n")); - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), ( tANI_U8* )&pFrm->Leader.mac, 6); - } -# endif // DOT11F_DUMP_FRAMES - return status; - -} /* End dot11fUnpackRMC. */ - static const tFFDefn FFS_RadioMeasurementReport[] = { { "Category", offsetof(tDot11fRadioMeasurementReport, Category), SigFfCategory , DOT11F_FF_CATEGORY_LEN, }, { "Action", offsetof(tDot11fRadioMeasurementReport, Action), SigFfAction , DOT11F_FF_ACTION_LEN, }, @@ -20207,18 +20058,12 @@ static tANI_U32 UnpackCore(tpAniSirGlobal pCtx, case SigFfDialogToken: dot11fUnpackFfDialogToken(pCtx, pBufRemaining, ( tDot11fFfDialogToken* )(pFrm + pFf->offset )); break; - case SigFfLeader: - dot11fUnpackFfLeader(pCtx, pBufRemaining, ( tDot11fFfLeader* )(pFrm + pFf->offset )); - break; case SigFfLinkMargin: dot11fUnpackFfLinkMargin(pCtx, pBufRemaining, ( tDot11fFfLinkMargin* )(pFrm + pFf->offset )); break; case SigFfListenInterval: dot11fUnpackFfCommonFunc(pCtx, pBufRemaining, (tANI_U16*)&((( tDot11fFfListenInterval* )(pFrm + pFf->offset ))->interval)); break; - case SigFfMagicCode: - dot11fUnpackFfMagicCode(pCtx, pBufRemaining, ( tDot11fFfMagicCode* )(pFrm + pFf->offset )); - break; case SigFfMaxTxPower: dot11fUnpackFfMaxTxPower(pCtx, pBufRemaining, ( tDot11fFfMaxTxPower* )(pFrm + pFf->offset )); break; @@ -20237,15 +20082,6 @@ static tANI_U32 UnpackCore(tpAniSirGlobal pCtx, case SigFfRCPI: dot11fUnpackFfRCPI(pCtx, pBufRemaining, ( tDot11fFfRCPI* )(pFrm + pFf->offset )); break; - case SigFfRMCDialogToken: - dot11fUnpackFfRMCDialogToken(pCtx, pBufRemaining, ( tDot11fFfRMCDialogToken* )(pFrm + pFf->offset )); - break; - case SigFfRMCOUI: - dot11fUnpackFfRMCOUI(pCtx, pBufRemaining, ( tDot11fFfRMCOUI* )(pFrm + pFf->offset )); - break; - case SigFfRMCVersion: - dot11fUnpackFfRMCVersion(pCtx, pBufRemaining, ( tDot11fFfRMCVersion* )(pFrm + pFf->offset )); - break; case SigFfRSNI: dot11fUnpackFfRSNI(pCtx, pBufRemaining, ( tDot11fFfRSNI* )(pFrm + pFf->offset )); break; @@ -20618,9 +20454,6 @@ static tANI_U32 UnpackCore(tpAniSirGlobal pCtx, case SigIeOperatingMode: status |= dot11fUnpackIeOperatingMode(pCtx, pBufRemaining, len, ( tDot11fIEOperatingMode* )(pFrm + pIe->offset + sizeof(tDot11fIEOperatingMode)*countOffset) ); break; - case SigIeOxygenNetwork: - status |= dot11fUnpackIeOxygenNetwork(pCtx, pBufRemaining, len, ( tDot11fIEOxygenNetwork* )(pFrm + pIe->offset + sizeof(tDot11fIEOxygenNetwork)*countOffset) ); - break; case SigIeP2PAssocReq: status |= dot11fUnpackIeP2PAssocReq(pCtx, pBufRemaining, len, ( tDot11fIEP2PAssocReq* )(pFrm + pIe->offset + sizeof(tDot11fIEP2PAssocReq)*countOffset) ); break; @@ -22246,14 +22079,6 @@ tANI_U32 dot11fGetPackedProvisionDiscoveryResSize(tpAniSirGlobal pCtx, tDot11fPr return status; } /* End dot11fGetPackedProvisionDiscoveryResSize. */ -tANI_U32 dot11fGetPackedRMCSize(tpAniSirGlobal pCtx, tDot11fRMC *pFrm, tANI_U32 *pnNeeded) -{ - tANI_U32 status = 0; - *pnNeeded = 22; - status = GetPackedSizeCore(pCtx, ( tANI_U8* )pFrm, pnNeeded, IES_RMC); - return status; -} /* End dot11fGetPackedRMCSize. */ - tANI_U32 dot11fGetPackedRadioMeasurementReportSize(tpAniSirGlobal pCtx, tDot11fRadioMeasurementReport *pFrm, tANI_U32 *pnNeeded) { tANI_U32 status = 0; @@ -22818,11 +22643,6 @@ static tANI_U32 GetPackedSizeCore(tpAniSirGlobal pCtx, byteCount = 1; pIePresent = ( (tDot11fIEOperatingMode* )(pFrm + pIe->offset + offset * i ))->present; break; - case SigIeOxygenNetwork: - offset = sizeof(tDot11fIEOxygenNetwork); - byteCount = 2; - pIePresent = ( (tDot11fIEOxygenNetwork* )(pFrm + pIe->offset + offset * i ))->present; - break; case SigIeP2PAssocReq: offset = sizeof(tDot11fIEP2PAssocReq); status |= dot11fGetPackedIEP2PAssocReq(pCtx, ( tDot11fIEP2PAssocReq* )(pFrm + pIe->offset + offset * i ), pnNeeded); @@ -23471,14 +23291,6 @@ void dot11fPackFfDialogToken(tpAniSirGlobal pCtx, (void)pCtx; } /* End dot11fPackFfDialogToken. */ -void dot11fPackFfLeader(tpAniSirGlobal pCtx, - tDot11fFfLeader *pSrc, - tANI_U8 *pBuf) -{ - DOT11F_MEMCPY(pCtx, pBuf, pSrc->mac, 6); - (void)pCtx; -} /* End dot11fPackFfLeader. */ - void dot11fPackFfLinkMargin(tpAniSirGlobal pCtx, tDot11fFfLinkMargin *pSrc, tANI_U8 *pBuf) @@ -23495,14 +23307,6 @@ void dot11fPackFfListenInterval(tpAniSirGlobal pCtx, (void)pCtx; } /* End dot11fPackFfListenInterval. */ -void dot11fPackFfMagicCode(tpAniSirGlobal pCtx, - tDot11fFfMagicCode *pSrc, - tANI_U8 *pBuf) -{ - DOT11F_MEMCPY(pCtx, pBuf, pSrc->magic, 6); - (void)pCtx; -} /* End dot11fPackFfMagicCode. */ - void dot11fPackFfMaxTxPower(tpAniSirGlobal pCtx, tDot11fFfMaxTxPower *pSrc, tANI_U8 *pBuf) @@ -23557,30 +23361,6 @@ void dot11fPackFfRCPI(tpAniSirGlobal pCtx, (void)pCtx; } /* End dot11fPackFfRCPI. */ -void dot11fPackFfRMCDialogToken(tpAniSirGlobal pCtx, - tDot11fFfRMCDialogToken *pSrc, - tANI_U8 *pBuf) -{ - frameshtonl(pCtx, pBuf, pSrc->token, 0); - (void)pCtx; -} /* End dot11fPackFfRMCDialogToken. */ - -void dot11fPackFfRMCOUI(tpAniSirGlobal pCtx, - tDot11fFfRMCOUI *pSrc, - tANI_U8 *pBuf) -{ - DOT11F_MEMCPY(pCtx, pBuf, pSrc->oui, 3); - (void)pCtx; -} /* End dot11fPackFfRMCOUI. */ - -void dot11fPackFfRMCVersion(tpAniSirGlobal pCtx, - tDot11fFfRMCVersion *pSrc, - tANI_U8 *pBuf) -{ - *pBuf = pSrc->version; - (void)pCtx; -} /* End dot11fPackFfRMCVersion. */ - void dot11fPackFfRSNI(tpAniSirGlobal pCtx, tDot11fFfRSNI *pSrc, tANI_U8 *pBuf) @@ -28754,42 +28534,6 @@ tANI_U32 dot11fPackIeOperatingMode(tpAniSirGlobal pCtx, return DOT11F_PARSE_SUCCESS; } /* End dot11fPackIeOperatingMode. */ -tANI_U32 dot11fPackIeOxygenNetwork(tpAniSirGlobal pCtx, - tDot11fIEOxygenNetwork *pSrc, - tANI_U8 *pBuf, - tANI_U32 nBuf, - tANI_U32 *pnConsumed) -{ - tANI_U8* pIeLen = 0; - tANI_U32 nConsumedOnEntry = *pnConsumed; - tANI_U32 nNeeded = 0U; - nNeeded += 2; - while ( pSrc->present ) - { - if ( nNeeded > nBuf ) return DOT11F_BUFFER_OVERFLOW; - *pBuf = 221; - ++pBuf; ++(*pnConsumed); - pIeLen = pBuf; - ++pBuf; ++(*pnConsumed); - *pBuf = 0x0; - ++pBuf; ++(*pnConsumed); - *pBuf = 0x16; - ++pBuf; ++(*pnConsumed); - *pBuf = 0x32; - ++pBuf; ++(*pnConsumed); - frameshtons(pCtx, pBuf, pSrc->data, 0); - *pnConsumed += 2; - // fieldsEndFlag = 1 - break; - } - (void)pCtx; - if (pIeLen) - { - *pIeLen = *pnConsumed - nConsumedOnEntry - 2; - } - return DOT11F_PARSE_SUCCESS; -} /* End dot11fPackIeOxygenNetwork. */ - tANI_U32 dot11fPackIeP2PAssocReq(tpAniSirGlobal pCtx, tDot11fIEP2PAssocReq *pSrc, tANI_U8 *pBuf, @@ -35263,15 +35007,6 @@ tANI_U32 dot11fPackBeacon(tpAniSirGlobal pCtx, tDot11fBeacon *pFrm, tANI_U8 *pBu FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), ( tANI_U8* )&pFrm->WiderBWChanSwitchAnn.newCenterChanFreq0, 1); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), ( tANI_U8* )&pFrm->WiderBWChanSwitchAnn.newCenterChanFreq1, 1); } - FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), FRFL("OxygenNetwork:\n")); - if (!pFrm->OxygenNetwork.present) - { - FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), FRFL("Not present.\n")); - } - else - { - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), ( tANI_U8* )&pFrm->OxygenNetwork.data, 2); - } FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), FRFL("to:\n")); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), pBuf, nBuf); } @@ -36288,15 +36023,6 @@ tANI_U32 dot11fPackBeacon2(tpAniSirGlobal pCtx, tDot11fBeacon2 *pFrm, tANI_U8 *p FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), ( tANI_U8* )&pFrm->WiderBWChanSwitchAnn.newCenterChanFreq0, 1); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), ( tANI_U8* )&pFrm->WiderBWChanSwitchAnn.newCenterChanFreq1, 1); } - FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), FRFL("OxygenNetwork:\n")); - if (!pFrm->OxygenNetwork.present) - { - FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), FRFL("Not present.\n")); - } - else - { - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), ( tANI_U8* )&pFrm->OxygenNetwork.data, 2); - } FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), FRFL("to:\n")); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), pBuf, nBuf); } @@ -37494,15 +37220,6 @@ tANI_U32 dot11fPackBeaconIEs(tpAniSirGlobal pCtx, tDot11fBeaconIEs *pFrm, tANI_U FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), ( tANI_U8* )&pFrm->WiderBWChanSwitchAnn.newCenterChanFreq0, 1); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), ( tANI_U8* )&pFrm->WiderBWChanSwitchAnn.newCenterChanFreq1, 1); } - FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), FRFL("OxygenNetwork:\n")); - if (!pFrm->OxygenNetwork.present) - { - FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), FRFL("Not present.\n")); - } - else - { - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), ( tANI_U8* )&pFrm->OxygenNetwork.data, 2); - } FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), FRFL("to:\n")); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), pBuf, nBuf); } @@ -40597,15 +40314,6 @@ tANI_U32 dot11fPackProbeResponse(tpAniSirGlobal pCtx, tDot11fProbeResponse *pFrm FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), FRFL("operModeNotification (1): %d\n"), pFrm->ExtCap.operModeNotification); FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), FRFL("reserved7 (1): %d\n"), pFrm->ExtCap.reserved7); } - FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), FRFL("OxygenNetwork:\n")); - if (!pFrm->OxygenNetwork.present) - { - FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), FRFL("Not present.\n")); - } - else - { - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), ( tANI_U8* )&pFrm->OxygenNetwork.data, 2); - } FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), FRFL("to:\n")); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), pBuf, nBuf); } @@ -40741,40 +40449,6 @@ tANI_U32 dot11fPackProvisionDiscoveryRes(tpAniSirGlobal pCtx, tDot11fProvisionDi } /* End dot11fUnpackProvisionDiscoveryRes. */ -tANI_U32 dot11fPackRMC(tpAniSirGlobal pCtx, tDot11fRMC *pFrm, tANI_U8 *pBuf, tANI_U32 nBuf, tANI_U32 *pnConsumed) -{ - tANI_U32 i = 0; - tANI_U32 status = 0; - (void)i; - *pnConsumed = 0U; - status = PackCore(pCtx, (tANI_U8*)pFrm, pBuf, nBuf, pnConsumed, FFS_RMC, IES_RMC); - -# ifdef DOT11F_DUMP_FRAMES - if (!DOT11F_FAILED(status)) - { - FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), FRFL("Packed the RMC:\n")); - FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), FRFL("Category:\n")); - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), ( tANI_U8* )&pFrm->Category.category, 1); - FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), FRFL("RMCOUI:\n")); - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), ( tANI_U8* )&pFrm->RMCOUI.oui, 3); - FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), FRFL("MagicCode:\n")); - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), ( tANI_U8* )&pFrm->MagicCode.magic, 6); - FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), FRFL("RMCVersion:\n")); - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), ( tANI_U8* )&pFrm->RMCVersion.version, 1); - FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), FRFL("Action:\n")); - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), ( tANI_U8* )&pFrm->Action.action, 1); - FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), FRFL("RMCDialogToken:\n")); - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), ( tANI_U8* )&pFrm->RMCDialogToken.token, 4); - FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), FRFL("Leader:\n")); - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), ( tANI_U8* )&pFrm->Leader.mac, 6); - FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), FRFL("to:\n")); - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_RMC), pBuf, nBuf); - } -# endif // DOT11F_DUMP_FRAMES - return status; - -} /* End dot11fUnpackRMC. */ - tANI_U32 dot11fPackRadioMeasurementReport(tpAniSirGlobal pCtx, tDot11fRadioMeasurementReport *pFrm, tANI_U8 *pBuf, tANI_U32 nBuf, tANI_U32 *pnConsumed) { tANI_U32 i = 0; @@ -45100,18 +44774,12 @@ static tANI_U32 PackCore(tpAniSirGlobal pCtx, case SigFfDialogToken: dot11fPackFfDialogToken(pCtx, (tDot11fFfDialogToken* )(pSrc + pFf->offset), pBufRemaining); break; - case SigFfLeader: - dot11fPackFfLeader(pCtx, (tDot11fFfLeader* )(pSrc + pFf->offset), pBufRemaining); - break; case SigFfLinkMargin: dot11fPackFfLinkMargin(pCtx, (tDot11fFfLinkMargin* )(pSrc + pFf->offset), pBufRemaining); break; case SigFfListenInterval: dot11fPackFfListenInterval(pCtx, (tDot11fFfListenInterval* )(pSrc + pFf->offset), pBufRemaining); break; - case SigFfMagicCode: - dot11fPackFfMagicCode(pCtx, (tDot11fFfMagicCode* )(pSrc + pFf->offset), pBufRemaining); - break; case SigFfMaxTxPower: dot11fPackFfMaxTxPower(pCtx, (tDot11fFfMaxTxPower* )(pSrc + pFf->offset), pBufRemaining); break; @@ -45130,15 +44798,6 @@ static tANI_U32 PackCore(tpAniSirGlobal pCtx, case SigFfRCPI: dot11fPackFfRCPI(pCtx, (tDot11fFfRCPI* )(pSrc + pFf->offset), pBufRemaining); break; - case SigFfRMCDialogToken: - dot11fPackFfRMCDialogToken(pCtx, (tDot11fFfRMCDialogToken* )(pSrc + pFf->offset), pBufRemaining); - break; - case SigFfRMCOUI: - dot11fPackFfRMCOUI(pCtx, (tDot11fFfRMCOUI* )(pSrc + pFf->offset), pBufRemaining); - break; - case SigFfRMCVersion: - dot11fPackFfRMCVersion(pCtx, (tDot11fFfRMCVersion* )(pSrc + pFf->offset), pBufRemaining); - break; case SigFfRSNI: dot11fPackFfRSNI(pCtx, (tDot11fFfRSNI* )(pSrc + pFf->offset), pBufRemaining); break; @@ -45446,9 +45105,6 @@ static tANI_U32 PackCore(tpAniSirGlobal pCtx, case SigIeOperatingMode: status |= dot11fPackIeOperatingMode(pCtx, ( tDot11fIEOperatingMode* )(pSrc + pIe->offset + sizeof(tDot11fIEOperatingMode) * i ), pBufRemaining, nBufRemaining, &len); break; - case SigIeOxygenNetwork: - status |= dot11fPackIeOxygenNetwork(pCtx, ( tDot11fIEOxygenNetwork* )(pSrc + pIe->offset + sizeof(tDot11fIEOxygenNetwork) * i ), pBufRemaining, nBufRemaining, &len); - break; case SigIeP2PAssocReq: status |= dot11fPackIeP2PAssocReq(pCtx, ( tDot11fIEP2PAssocReq* )(pSrc + pIe->offset + sizeof(tDot11fIEP2PAssocReq) * i ), pBufRemaining, nBufRemaining, &len); break; diff --git a/CORE/SYS/legacy/src/utils/src/logApi.c b/CORE/SYS/legacy/src/utils/src/logApi.c index 0723626d0402..feaf2bfac607 100644 --- a/CORE/SYS/legacy/src/utils/src/logApi.c +++ b/CORE/SYS/legacy/src/utils/src/logApi.c @@ -24,9 +24,7 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Airgo Networks, Inc proprietary. All rights reserved. * logApi.cc - Handles log messages for all the modules. * Author: Kevin Nguyen * Date: 02/27/02 diff --git a/CORE/SYS/legacy/src/utils/src/logDump.c b/CORE/SYS/legacy/src/utils/src/logDump.c index a71ea22b6a0a..b5dea9e348c4 100644 --- a/CORE/SYS/legacy/src/utils/src/logDump.c +++ b/CORE/SYS/legacy/src/utils/src/logDump.c @@ -25,10 +25,6 @@ * to the Linux Foundation. */ /*============================================================================ -Copyright (c) 2007 Qualcomm Technologies, Inc. -All Rights Reserved. -Qualcomm Technologies Confidential and Proprietary - logDump.c */ diff --git a/CORE/SYS/legacy/src/utils/src/macTrace.c b/CORE/SYS/legacy/src/utils/src/macTrace.c index ba3e98a4e312..c93056f6db87 100644 --- a/CORE/SYS/legacy/src/utils/src/macTrace.c +++ b/CORE/SYS/legacy/src/utils/src/macTrace.c @@ -24,18 +24,13 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /**========================================================================= - \file macTrace.c +\file macTrace.c \brief implementation for trace related APIs \author Sunit Bhatia - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ diff --git a/CORE/SYS/legacy/src/utils/src/parserApi.c b/CORE/SYS/legacy/src/utils/src/parserApi.c index c195e940c6aa..b765d552524e 100644 --- a/CORE/SYS/legacy/src/utils/src/parserApi.c +++ b/CORE/SYS/legacy/src/utils/src/parserApi.c @@ -24,9 +24,7 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Airgo Networks, Inc proprietary. All rights reserved. * This file parserApi.cc contains the code for parsing * 802.11 messages. * Author: Pierre Vandwalle @@ -2719,11 +2717,12 @@ sirFillBeaconMandatoryIEforCcxBcnReport(tpAniSirGlobal pMac, { tDot11fBeaconIEs *pBies = NULL; tANI_U32 status = eHAL_STATUS_SUCCESS; + tSirRetStatus retStatus = eSIR_SUCCESS; tSirCcxBcnReportMandatoryIe ccxBcnReportMandatoryIe; /* To store how many bytes are required to be allocated for Bcn report mandatory Ies */ - tANI_U16 numBytes = 0; + tANI_U16 numBytes = 0, freeBytes = 0; tANI_U8 *pos = NULL; // Zero-init our [out] parameter, @@ -2819,6 +2818,7 @@ sirFillBeaconMandatoryIEforCcxBcnReport(tpAniSirGlobal pMac, if ( pBies->RRMEnabledCap.present ) { + ccxBcnReportMandatoryIe.rrmPresent = 1; vos_mem_copy( &ccxBcnReportMandatoryIe.rmEnabledCapabilities, &pBies->RRMEnabledCap, sizeof( tDot11fIERRMEnabledCap ) ); numBytes += 1 + 1 + SIR_MAC_RM_ENABLED_CAPABILITY_EID_MAX; } @@ -2832,74 +2832,187 @@ sirFillBeaconMandatoryIEforCcxBcnReport(tpAniSirGlobal pMac, } pos = *outIeBuf; *pOutIeLen = numBytes; + freeBytes = numBytes; /* Start filling the output Ie with Mandatory IE information */ /* Fill SSID IE */ - *pos = SIR_MAC_SSID_EID; - pos++; - *pos = ccxBcnReportMandatoryIe.ssId.length; - pos++; - vos_mem_copy(pos, (tANI_U8*)ccxBcnReportMandatoryIe.ssId.ssId, ccxBcnReportMandatoryIe.ssId.length); - pos += ccxBcnReportMandatoryIe.ssId.length; + if (ccxBcnReportMandatoryIe.ssidPresent) + { + if (freeBytes < (1 + 1 + ccxBcnReportMandatoryIe.ssId.length)) + { + limLog(pMac, LOGP, FL("Insufficient memory to copy SSID")); + retStatus = eSIR_FAILURE; + goto err_bcnrep; + } + *pos = SIR_MAC_SSID_EID; + pos++; + *pos = ccxBcnReportMandatoryIe.ssId.length; + pos++; + vos_mem_copy(pos, + (tANI_U8*)ccxBcnReportMandatoryIe.ssId.ssId, + ccxBcnReportMandatoryIe.ssId.length); + pos += ccxBcnReportMandatoryIe.ssId.length; + freeBytes -= (1 + 1 + ccxBcnReportMandatoryIe.ssId.length); + } /* Fill Supported Rates IE */ - *pos = SIR_MAC_RATESET_EID; - pos++; - *pos = ccxBcnReportMandatoryIe.supportedRates.numRates; - pos++; - vos_mem_copy(pos, (tANI_U8*)ccxBcnReportMandatoryIe.supportedRates.rate, - ccxBcnReportMandatoryIe.supportedRates.numRates); - pos += ccxBcnReportMandatoryIe.supportedRates.numRates; + if (ccxBcnReportMandatoryIe.suppRatesPresent) + { + if (freeBytes < (1 + 1 + ccxBcnReportMandatoryIe.supportedRates.numRates)) + { + limLog(pMac, LOGP, FL("Insufficient memory to copy Rates IE")); + retStatus = eSIR_FAILURE; + goto err_bcnrep; + } + *pos = SIR_MAC_RATESET_EID; + pos++; + *pos = ccxBcnReportMandatoryIe.supportedRates.numRates; + pos++; + vos_mem_copy(pos, + (tANI_U8*)ccxBcnReportMandatoryIe.supportedRates.rate, + ccxBcnReportMandatoryIe.supportedRates.numRates); + pos += ccxBcnReportMandatoryIe.supportedRates.numRates; + freeBytes -= (1 + 1 + ccxBcnReportMandatoryIe.supportedRates.numRates); + } /* Fill FH Parameter set IE */ - *pos = SIR_MAC_FH_PARAM_SET_EID; - pos++; - *pos = SIR_MAC_FH_PARAM_SET_EID_MAX; - pos++; - vos_mem_copy(pos, (tANI_U8*)&ccxBcnReportMandatoryIe.fhParamSet, SIR_MAC_FH_PARAM_SET_EID_MAX); - pos += SIR_MAC_FH_PARAM_SET_EID_MAX; + if (ccxBcnReportMandatoryIe.fhParamPresent) + { + if (freeBytes < (1 + 1 + SIR_MAC_FH_PARAM_SET_EID_MAX)) + { + limLog(pMac, LOGP, FL("Insufficient memory to copy FHIE")); + retStatus = eSIR_FAILURE; + goto err_bcnrep; + } + *pos = SIR_MAC_FH_PARAM_SET_EID; + pos++; + *pos = SIR_MAC_FH_PARAM_SET_EID_MAX; + pos++; + vos_mem_copy(pos, + (tANI_U8*)&ccxBcnReportMandatoryIe.fhParamSet, + SIR_MAC_FH_PARAM_SET_EID_MAX); + pos += SIR_MAC_FH_PARAM_SET_EID_MAX; + freeBytes -= (1 + 1 + SIR_MAC_FH_PARAM_SET_EID_MAX); + } /* Fill DS Parameter set IE */ - *pos = SIR_MAC_DS_PARAM_SET_EID; - pos++; - *pos = SIR_MAC_DS_PARAM_SET_EID_MAX; - pos++; - *pos = ccxBcnReportMandatoryIe.dsParamSet.channelNumber; - pos += SIR_MAC_DS_PARAM_SET_EID_MAX; + if (ccxBcnReportMandatoryIe.dsParamsPresent) + { + if (freeBytes < (1 + 1 + SIR_MAC_DS_PARAM_SET_EID_MAX)) + { + limLog(pMac, LOGP, FL("Insufficient memory to copy DS IE")); + retStatus = eSIR_FAILURE; + goto err_bcnrep; + } + *pos = SIR_MAC_DS_PARAM_SET_EID; + pos++; + *pos = SIR_MAC_DS_PARAM_SET_EID_MAX; + pos++; + *pos = ccxBcnReportMandatoryIe.dsParamSet.channelNumber; + pos += SIR_MAC_DS_PARAM_SET_EID_MAX; + freeBytes -= (1 + 1 + SIR_MAC_DS_PARAM_SET_EID_MAX); + } /* Fill CF Parameter set */ - *pos = SIR_MAC_CF_PARAM_SET_EID; - pos++; - *pos = SIR_MAC_CF_PARAM_SET_EID_MAX; - pos++; - vos_mem_copy(pos, (tANI_U8*)&ccxBcnReportMandatoryIe.cfParamSet, SIR_MAC_CF_PARAM_SET_EID_MAX); - pos += SIR_MAC_CF_PARAM_SET_EID_MAX; + if (ccxBcnReportMandatoryIe.cfPresent) + { + if (freeBytes < (1 + 1 + SIR_MAC_CF_PARAM_SET_EID_MAX)) + { + limLog(pMac, LOGP, FL("Insufficient memory to copy CF IE")); + retStatus = eSIR_FAILURE; + goto err_bcnrep; + } + *pos = SIR_MAC_CF_PARAM_SET_EID; + pos++; + *pos = SIR_MAC_CF_PARAM_SET_EID_MAX; + pos++; + vos_mem_copy(pos, + (tANI_U8*)&ccxBcnReportMandatoryIe.cfParamSet, + SIR_MAC_CF_PARAM_SET_EID_MAX); + pos += SIR_MAC_CF_PARAM_SET_EID_MAX; + freeBytes -= (1 + 1 + SIR_MAC_CF_PARAM_SET_EID_MAX); + } /* Fill IBSS Parameter set IE */ - *pos = SIR_MAC_IBSS_PARAM_SET_EID; - pos++; - *pos = SIR_MAC_IBSS_PARAM_SET_EID_MAX; - pos++; - vos_mem_copy(pos, (tANI_U8*)&ccxBcnReportMandatoryIe.ibssParamSet.atim, SIR_MAC_IBSS_PARAM_SET_EID_MAX); - pos += SIR_MAC_IBSS_PARAM_SET_EID_MAX; + if (ccxBcnReportMandatoryIe.ibssParamPresent) + { + if (freeBytes < (1 + 1 + SIR_MAC_IBSS_PARAM_SET_EID_MAX)) + { + limLog(pMac, LOGP, FL("Insufficient memory to copy IBSS IE")); + retStatus = eSIR_FAILURE; + goto err_bcnrep; + } + *pos = SIR_MAC_IBSS_PARAM_SET_EID; + pos++; + *pos = SIR_MAC_IBSS_PARAM_SET_EID_MAX; + pos++; + vos_mem_copy(pos, + (tANI_U8*)&ccxBcnReportMandatoryIe.ibssParamSet.atim, + SIR_MAC_IBSS_PARAM_SET_EID_MAX); + pos += SIR_MAC_IBSS_PARAM_SET_EID_MAX; + freeBytes -= (1 + 1 + SIR_MAC_IBSS_PARAM_SET_EID_MAX); + } /* Fill TIM IE */ - *pos = SIR_MAC_TIM_EID; - pos++; - *pos = SIR_MAC_TIM_EID_MIN; - pos++; - vos_mem_copy(pos, (tANI_U8*)&ccxBcnReportMandatoryIe.tim, SIR_MAC_TIM_EID_MIN); - pos += SIR_MAC_TIM_EID_MIN; + if (ccxBcnReportMandatoryIe.timPresent) + { + if (freeBytes < (1 + 1 + SIR_MAC_TIM_EID_MIN)) + { + limLog(pMac, LOGP, FL("Insufficient memory to copy TIM IE")); + retStatus = eSIR_FAILURE; + goto err_bcnrep; + } + *pos = SIR_MAC_TIM_EID; + pos++; + *pos = SIR_MAC_TIM_EID_MIN; + pos++; + vos_mem_copy(pos, + (tANI_U8*)&ccxBcnReportMandatoryIe.tim, + SIR_MAC_TIM_EID_MIN); + pos += SIR_MAC_TIM_EID_MIN; + freeBytes -= (1 + 1 + SIR_MAC_TIM_EID_MIN); + } /* Fill RM Capability IE */ - *pos = SIR_MAC_RM_ENABLED_CAPABILITY_EID; - pos++; - *pos = SIR_MAC_RM_ENABLED_CAPABILITY_EID_MAX; - pos++; - vos_mem_copy(pos, (tANI_U8*)&ccxBcnReportMandatoryIe.rmEnabledCapabilities, SIR_MAC_RM_ENABLED_CAPABILITY_EID_MAX); + if (ccxBcnReportMandatoryIe.rrmPresent) + { + if (freeBytes < (1 + 1 + SIR_MAC_RM_ENABLED_CAPABILITY_EID_MAX)) + { + limLog(pMac, LOGP, FL("Insufficient memory to copy RRM IE")); + retStatus = eSIR_FAILURE; + goto err_bcnrep; + } + *pos = SIR_MAC_RM_ENABLED_CAPABILITY_EID; + pos++; + *pos = SIR_MAC_RM_ENABLED_CAPABILITY_EID_MAX; + pos++; + vos_mem_copy(pos, + (tANI_U8*)&ccxBcnReportMandatoryIe.rmEnabledCapabilities, + SIR_MAC_RM_ENABLED_CAPABILITY_EID_MAX); + freeBytes -= (1 + 1 + SIR_MAC_RM_ENABLED_CAPABILITY_EID_MAX); + } + + if (freeBytes != 0) + { + limLog(pMac, LOGP, FL("Mismatch in allocation and copying of IE in Bcn Rep")); + retStatus = eSIR_FAILURE; + } + +err_bcnrep: + /* The message counter would not be incremented in case of + * returning failure and hence next time, this function gets + * called, it would be using the same msg ctr for a different + * BSS.So, it is good to clear the memory allocated for a BSS + * that is returning failure.On success, the caller would take + * care of freeing up the memory*/ + if (retStatus == eSIR_FAILURE) + { + vos_mem_free(*outIeBuf); + *outIeBuf = NULL; + } vos_mem_free(pBies); - return eSIR_SUCCESS; + return retStatus; } #endif /* FEATURE_WLAN_CCX_UPLOAD */ @@ -4146,7 +4259,7 @@ tSirRetStatus PopulateDot11fCCXCckmOpaque( tpAniSirGlobal pMac, pDot11f->present = 1; // Dont include OUI pDot11f->num_data = pCCKMie->cckmIEdata[ idx + 1 ] - 4; - palCopyMemory( pMac->hHdd, pDot11f->data, + vos_mem_copy ( pDot11f->data, pCCKMie->cckmIEdata + idx + 2 + 4, //EID,len,OUI pCCKMie->cckmIEdata[ idx + 1 ] - 4 ); // Skip OUI } diff --git a/CORE/SYS/legacy/src/utils/src/utilsApi.c b/CORE/SYS/legacy/src/utils/src/utilsApi.c index bdce9068b2c0..676ff0271990 100644 --- a/CORE/SYS/legacy/src/utils/src/utilsApi.c +++ b/CORE/SYS/legacy/src/utils/src/utilsApi.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - //================================================================== // // File: utilsApi.cc diff --git a/CORE/SYS/legacy/src/utils/src/utilsParser.c b/CORE/SYS/legacy/src/utils/src/utilsParser.c index ad50322325ab..38802453672c 100644 --- a/CORE/SYS/legacy/src/utils/src/utilsParser.c +++ b/CORE/SYS/legacy/src/utils/src/utilsParser.c @@ -24,9 +24,8 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* - * Airgo Networks, Inc proprietary. All rights reserved. + * * This file utilsParser.cc contains the code for parsing * 802.11 messages. * Author: Pierre Vandwalle diff --git a/CORE/TL/inc/tlDebug.h b/CORE/TL/inc/tlDebug.h index 5e96a3cc07be..2f447cb685d1 100644 --- a/CORE/TL/inc/tlDebug.h +++ b/CORE/TL/inc/tlDebug.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef __TL_DEBUG_H__ #define __TL_DEBUG_H__ #if !defined (ANI_OS_TYPE_ANDROID) diff --git a/CORE/TL/inc/wlan_qct_tl.h b/CORE/TL/inc/wlan_qct_tl.h index a25daf8eef19..898c6ce1df20 100644 --- a/CORE/TL/inc/wlan_qct_tl.h +++ b/CORE/TL/inc/wlan_qct_tl.h @@ -24,6 +24,8 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ +/* + * */ #ifndef WLAN_QCT_WLANTL_H #define WLAN_QCT_WLANTL_H @@ -38,9 +40,6 @@ DESCRIPTION This file contains the external API exposed by the wlan transport layer module. - - Copyright (c) 2008 Qualcomm Technologies, Inc. All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ===========================================================================*/ @@ -2952,150 +2951,4 @@ WLANTL_TLDebugMessage } #endif /* QCA_WIFI_2_0 */ -#ifdef WLAN_FEATURE_RELIABLE_MCAST -/*============================================================================= - FUNCTION WLANTL_EnableReliableMcast - - DESCRIPTION - This function enables data path of reliable multicast transmitter in TL - - DEPENDENCIES - Reliable multicast receive leader must be selected by FW before - UMAC calling this API - - PARAMETERS - - IN - - pvosGCtx : Pointer to VOS global context - pMcastAddr : Pointer to MAC ADDR of reliable multicast transmitter - - RETURN VALUE - The result code associated with performing the operation - - VOS_STATUS_E_FAULT: Sanity check on input failed - - VOS_STATUS_SUCCESS: Everything is good :) - - Other return values are possible coming from the called functions. - Please check API for additional info. - - SIDE EFFECTS - -==============================================================================*/ -#ifndef QCA_WIFI_2_0 -VOS_STATUS -WLANTL_EnableReliableMcast -( - v_PVOID_t pvosGCtx, - v_MACADDR_t *pMcastAddr -); -#else -static inline VOS_STATUS -WLANTL_EnableReliableMcast -( - v_PVOID_t pvosGCtx, - v_MACADDR_t *pMcastAddr -) -{ - return VOS_STATUS_SUCCESS; -} -#endif /* QCA_WIFI_2_0 */ - -/*============================================================================= - FUNCTION WLANTL_DisableReliableMcast - - DESCRIPTION - This function disables data path of reliable multicast transmitter in TL - - DEPENDENCIES - HDD should have recived IOCTL to disable reliable RMC - - PARAMETERS - - IN - - pvosGCtx : Pointer to VOS global context - pMcastAddr : Pointer to MAC ADDR of reliable multicast transmitter - - RETURN VALUE - The result code associated with performing the operation - - VOS_STATUS_E_FAULT: Sanity check on input failed - - VOS_STATUS_SUCCESS: Everything is good :) - - Other return values are possible coming from the called functions. - Please check API for additional info. - - SIDE EFFECTS - -==============================================================================*/ -#ifndef QCA_WIFI_2_0 -VOS_STATUS -WLANTL_DisableReliableMcast -( - v_PVOID_t pvosGCtx, - v_MACADDR_t *pMcastAddr -); -#else -static inline VOS_STATUS -WLANTL_DisableReliableMcast -( - v_PVOID_t pvosGCtx, - v_MACADDR_t *pMcastAddr -) -{ - return VOS_STATUS_SUCCESS; -} -#endif /* QCA_WIFI_2_0 */ -/*============================================================================= - FUNCTION WLANTL_SetMcastDuplicateDetection - - DESCRIPTION - This function sets multicate duplicate detection operation. - If enable is 1, the detection is enabled, else it is disabled. - - DEPENDENCIES - - PARAMETERS - - IN - - pvosGCtx : Pointer to VOS global context - enable : Boolean to enable or disable - - RETURN VALUE - The result code associated with performing the operation - - VOS_STATUS_E_FAULT: Sanity check on input failed - - VOS_STATUS_SUCCESS: Everything is good :) - - Other return values are possible coming from the called functions. - Please check API for additional info. - - SIDE EFFECTS - -==============================================================================*/ -#ifndef QCA_WIFI_2_0 -VOS_STATUS -WLANTL_SetMcastDuplicateDetection -( - v_PVOID_t pvosGCtx, - v_U8_t enable -); -#else -static inline VOS_STATUS -WLANTL_SetMcastDuplicateDetection -( - v_PVOID_t pvosGCtx, - v_U8_t enable -) -{ - return VOS_STATUS_SUCCESS; -} -#endif /* QCA_WIFI_2_0 */ -#endif /*End of WLAN_FEATURE_RELIABLE_MCAST*/ - #endif /* #ifndef WLAN_QCT_WLANTL_H */ diff --git a/CORE/TL/src/wlan_qct_tl.c b/CORE/TL/src/wlan_qct_tl.c index 97336355bf3d..e68f1926e0c4 100644 --- a/CORE/TL/src/wlan_qct_tl.c +++ b/CORE/TL/src/wlan_qct_tl.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /*=========================================================================== @@ -41,10 +40,6 @@ Are listed for each API below. - - Copyright (c) 2008 Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ===========================================================================*/ /*=========================================================================== @@ -594,17 +589,6 @@ WLANTL_Open } #endif -#ifdef WLAN_FEATURE_RELIABLE_MCAST - /*Initialize RMC suppport in TL*/ - status = WLANTL_RmcInit(pvosGCtx); - if (!VOS_IS_STATUS_SUCCESS(status)) - { - TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, - "Reliable multicast module init fail")); - return status; - } -#endif - pTLCb->isBMPS = VOS_FALSE; pmcRegisterDeviceStateUpdateInd( smeContext, WLANTL_PowerStateChangedCB, pvosGCtx ); @@ -861,14 +845,6 @@ WLANTL_Close } #endif -#ifdef WLAN_FEATURE_RELIABLE_MCAST - if(VOS_STATUS_SUCCESS != WLANTL_RmcDeInit(pvosGCtx)) - { - TLLOGW(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_WARN, - "Reliable multicast module DeInit fail")); - } -#endif - /*------------------------------------------------------------------------ Cleanup TL control block. ------------------------------------------------------------------------*/ @@ -1421,9 +1397,6 @@ WLANTL_RegisterSTAClient pTLCb->ucTdlsPeerCount++; #endif } -#ifdef WLAN_FEATURE_RELIABLE_MCAST - vos_lock_init(&pClientSTA->mcLock); -#endif /* WLAN_FEATURE_RELIABLE_MCAST */ return VOS_STATUS_SUCCESS; }/* WLANTL_RegisterSTAClient */ @@ -1526,15 +1499,6 @@ WLANTL_ClearSTAClient "WLAN TL:Clearing STA Client ID: %d", ucSTAId )); WLANTL_CleanSTA(pTLCb->atlSTAClients[ucSTAId], 1 /*empty packets*/); -#ifdef WLAN_FEATURE_RELIABLE_MCAST - /*-------------------------------------------------------------------- - Delete multicast entries for duplicate detection - --------------------------------------------------------------------*/ - WLANTL_McastDeleteAllEntries(pTLCb->atlSTAClients[ucSTAId]); - - vos_lock_destroy(&pTLCb->atlSTAClients[ucSTAId]->mcLock); -#endif /* WLAN_FEATURE_RELIABLE_MCAST */ - TLLOG2(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO_HIGH, "WLAN TL:Clearing STA Reset History RSSI and Region number")); pTLCb->hoSupport.currentHOState.historyRSSI = 0; @@ -7085,7 +7049,7 @@ WLANTL_STATxAuth if (( NULL == pTLCb ) || ( NULL == pvosDataBuff )) { TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, - "WLAN TL:Invalid input params on WLANTL_STATxAuth TL %x DB %p", + "WLAN TL:Invalid input params on WLANTL_STATxAuth TL %p DB %p", pTLCb, pvosDataBuff)); if (NULL != pvosDataBuff) { @@ -8077,25 +8041,6 @@ WLANTL_STARxAuth } } -#ifdef WLAN_FEATURE_RELIABLE_MCAST - if (pTLCb->multicastDuplicateDetectionEnabled && - (WLAN_STA_IBSS == pClientSTA->wSTADesc.wSTAType) && - WLANTL_IS_DATA_FRAME(WDA_GET_RX_TYPE_SUBTYPE(aucBDHeader))) - { - /* - * Multicast duplicate detection is only for frames received in - * IBSS mode. - */ - if (VOS_TRUE == WLANTL_IsDuplicateMcastFrm(pClientSTA, vosDataBuff)) - { - pTLCb->mcastDupCnt++; - /* Duplicate multicast data packet, drop the packet */ - vos_pkt_return_packet(vosDataBuff); - return VOS_STATUS_SUCCESS; - } - } -#endif /* WLAN_FEATURE_RELIABLE_MCAST */ - #ifdef FEATURE_WLAN_WAPI if ( pClientSTA->wSTADesc.ucIsWapiSta ) { @@ -8268,7 +8213,7 @@ if(0 == ucUnicastBroadcastType pClientSTA->ulTotalReplayPacketsDetected++; VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, - "WLAN TL: AMSDU total dropped replay packets on STA ID %X is [0x%lX]\n", + "WLAN TL: AMSDU total dropped replay packets on STA ID %X is [0x%X]\n", ucSTAId, pClientSTA->ulTotalReplayPacketsDetected); /* Drop the packet */ @@ -8309,7 +8254,7 @@ if(0 == ucUnicastBroadcastType pClientSTA->ulTotalReplayPacketsDetected++; VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, - "WLAN TL: Non-AMSDU total dropped replay packets on STA ID %X is [0x%lX]\n", + "WLAN TL: Non-AMSDU total dropped replay packets on STA ID %X is [0x%X]\n", ucSTAId, pClientSTA->ulTotalReplayPacketsDetected); /* Repaly packet, drop the packet */ @@ -10915,7 +10860,7 @@ WLANTL_CleanSTA ( NULL != ptlSTAClient->vosAMSDUChainRoot )) { TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_FATAL, - "WLAN TL:Non NULL vosAMSDUChainRoot (=%p) on WLANTL_CleanSTA," + "WLAN TL:Non NULL vosAMSDUChainRoot on WLANTL_CleanSTA, " "suspecting a memory corruption")); } @@ -12568,796 +12513,3 @@ WLANTL_GetSTALinkCapacity return VOS_STATUS_SUCCESS; }/* WLANTL_GetSTALinkCapacity */ - -#ifdef WLAN_FEATURE_RELIABLE_MCAST - -/*========================================================================== - FUNCTION WLANTL_RmcInit - - DESCRIPTION This function initilizes RMC module in TL - - PARAMETERS - pADapter : pointer to VOS global context - - RETURN VALUE - VOS_STATUS_SUCCESS : for success - VOS_STATUS_FAILURE : for failure - VOS_STATUS_E_INVAL : for invalid input parameter - -============================================================================*/ -VOS_STATUS WLANTL_RmcInit -( - v_PVOID_t pAdapter -) -{ - WLANTL_CbType *pTLCb = VOS_GET_TL_CB(pAdapter); - VOS_STATUS status = VOS_STATUS_SUCCESS; - tANI_U8 count; - - /*sanity check*/ - if (NULL == pTLCb) - { - TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, - "Invalid TL handle")); - return VOS_STATUS_E_INVAL; - } - - /*init active rmcast sessions list*/ - for ( count = 0; count < WLANTL_RMCAST_HASH_TABLE_SIZE; count++ ) - { - pTLCb->reliableMcastSession[count] = NULL; - } - - vos_lock_init(&pTLCb->rmcLock); - - pTLCb->multicastDuplicateDetectionEnabled = 1; - pTLCb->rmcDataPathEnabled = 0; - - return status; -} - - -/*========================================================================== - FUNCTION WLANTL_RmcDeInit - - DESCRIPTION This function de-initilizes RMC module in TL - - PARAMETERS - pADapter : pointer to VOS global context - - RETURN VALUE - VOS_STATUS_SUCCESS : for success - VOS_STATUS_FAILURE : for failure - VOS_STATUS_E_INVAL : for invalid input parameter - -============================================================================*/ -VOS_STATUS WLANTL_RmcDeInit -( - v_PVOID_t pAdapter -) -{ - WLANTL_CbType *pTLCb = VOS_GET_TL_CB(pAdapter); - VOS_STATUS status = VOS_STATUS_SUCCESS; - tANI_U8 count; - WLANTL_RMCAST_SESSION *pNode; - WLANTL_RMCAST_SESSION *pPrev; - - /*sanity check*/ - if (NULL == pTLCb) - { - TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, - "Invalid TL handle")); - return VOS_STATUS_E_INVAL; - } - - /*free active rmcast sessions list*/ - for ( count = 0; count < WLANTL_RMCAST_HASH_TABLE_SIZE; count++ ) - { - pNode = pTLCb->reliableMcastSession[count]; - while (pNode) - { - pPrev = pNode; - pNode = pNode->next; - vos_mem_free((v_VOID_t * )pPrev); - } - } - - vos_lock_destroy(&pTLCb->rmcLock); - - return status; -} - - -/*========================================================================== - FUNCTION WLANTL_RmcHashRmcastSession - - DESCRIPTION This function creates hash on input RMCAST MAC address - - PARAMETERS - pMcastAddr : pointer to input RMCAST MAC address - - RETURN VALUE - tANI_U8 : A hash value between 0 to WLANTL_RMCAST_HASH_TABLE_SIZE - 1 -============================================================================*/ -tANI_U8 WLANTL_RmcHashRmcastSession ( v_MACADDR_t *pMcastAddr ) -{ - tANI_U32 sum; - tANI_U8 hash; - - sum = (pMcastAddr->bytes[0] + pMcastAddr->bytes[1] + pMcastAddr->bytes[2] + - pMcastAddr->bytes[3] + pMcastAddr->bytes[4] + pMcastAddr->bytes[5]); - - hash = (tANI_U8)(sum & ((WLANTL_RMCAST_HASH_TABLE_SIZE - 1))); - - return hash; -} - - -/*=========================================================================== - FUNCTION WLANTL_RmcLookUpRmcastSession - - DESCRIPTION This function tries to find out RMCAST address in TL's active - list of reliable multicast sessions - - PARAMETERS - pTLCb : pointer to TL Cb - pMcastAddr : pointer to input RMCAST MAC address - - RETURN VALUE - WLANTL_RMCAST_SESSION * : - NULL if input RMCAST MAC address does exist in active RMCAST sessions list - else pointer to RMCAST session found in active RMCAST sessions list -=============================================================================*/ -WLANTL_RMCAST_SESSION* WLANTL_RmcLookUpRmcastSession -( - WLANTL_RMCAST_SESSION *reliableMcastSession[], - v_MACADDR_t *pMcastAddr -) -{ - WLANTL_RMCAST_SESSION *pNode; - tANI_U8 index; - - /*sanity check*/ - if (NULL == pMcastAddr) - { - TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, - "Sanity check failed pMcastAddr %p", pMcastAddr)); - return NULL; - } - - index = WLANTL_RmcHashRmcastSession(pMcastAddr); - pNode = reliableMcastSession[index]; - while ( pNode ) - { - if (vos_is_macaddr_equal( &(pNode->reliableMcastAddr), pMcastAddr)) - { - return pNode; - } - pNode = pNode->next; - } - - return NULL; -} - -/*=========================================================================== - FUNCTION WLANTL_RmcAddRmcastSession - - DESCRIPTION This function adds requested RMCAST address in TL's active - list of reliable multicast sessions - - PARAMETERS - pTLCb : pointer to TL Cb - pMcastAddr : pointer to input RMCAST MAC address - - RETURN VALUE - WLANTL_RMCAST_SESSION * : - NULL if input RMCAST MAC address already exists in active RMCAST sessions - list else pointer to RMCAST session which is now added in active RMCAST - sessions list -=============================================================================*/ -WLANTL_RMCAST_SESSION *WLANTL_RmcAddRmcastSession -( - WLANTL_RMCAST_SESSION *reliableMcastSession[], - v_MACADDR_t *pMcastAddr -) -{ - WLANTL_RMCAST_SESSION *pNode; - tANI_U8 index; - - index = WLANTL_RmcHashRmcastSession(pMcastAddr); - pNode = WLANTL_RmcLookUpRmcastSession(reliableMcastSession, pMcastAddr); - if ( NULL != pNode ) - { - /*already exists*/ - return NULL; - } - else - { - pNode = (WLANTL_RMCAST_SESSION *)vos_mem_malloc(sizeof(*pNode)); - if (pNode) - { - vos_mem_copy( &(pNode->reliableMcastAddr), pMcastAddr, - sizeof(pNode->reliableMcastAddr) ); - pNode->next = reliableMcastSession[index]; - reliableMcastSession[index] = pNode; - return pNode; - } - else - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: vos_mem_malloc failed can't enable RMCAST session", - __func__); - return NULL; - } - } -} - -/*=========================================================================== - FUNCTION WLANTL_RmcDeleteRmcastSession - - DESCRIPTION This function deleted requested RMCAST address from TL's active - list of reliable multicast sessions - - PARAMETERS - pTLCb : pointer to TL Cb - pMcastAddr : pointer to input RMCAST MAC address - - RETURN VALUE - WLANTL_RMCAST_SESSION * : - 0 if input RMCAST session does not exist in active RMCAST - sessions list - 1 if input RMCAST session is successfully deleted from - TL's active list of reliable multicast sessions -=============================================================================*/ -tANI_U8 -WLANTL_RmcDeleteRmcastSession -( - WLANTL_RMCAST_SESSION *reliableMcastSession[], - v_MACADDR_t *pMcastAddr -) -{ - WLANTL_RMCAST_SESSION *pHead; - WLANTL_RMCAST_SESSION *pNode; - WLANTL_RMCAST_SESSION *pPrev; - tANI_U8 index; - - index = WLANTL_RmcHashRmcastSession(pMcastAddr); - pHead = pNode = reliableMcastSession[index]; - while (pNode) - { - if (vos_is_macaddr_equal( &(pNode->reliableMcastAddr), pMcastAddr)) - { - if (pHead == pNode) - { - reliableMcastSession[index] = pNode->next; - } - else - { - pPrev->next = pNode->next; - } - vos_mem_free((v_VOID_t * )pNode); - return 1; - } - pPrev = pNode; - pNode = pNode->next; - } - - return 0; -} - -/*============================================================================= - FUNCTION WLANTL_ProcessRmcCommand - - DESCRIPTION - This function adds/deletes input RMCAST session to/from TL's active hash - table of RMCAST sessions - - DEPENDENCIES - Reliable multicast receive leader must be selected by FW before - UMAC calling this API - - PARAMETERS - - IN - - pTLCb : Pointer to TL context - pMcastAddr : Pointer to MAC ADDR of RMCAST session which needs to to added - or deleted - command : If command is 1 then add requested RMCAST session in active - session hash table else delete it from active session hash - table - - RETURN VALUE - The result code associated with performing the operation - - VOS_STATUS_E_FAILURE: When add or delete command failed - - VOS_STATUS_SUCCESS: Everything is good :) - - SIDE EFFECTS -==============================================================================*/ -VOS_STATUS -WLANTL_ProcessRmcCommand -( - WLANTL_CbType* pTLCb, - v_MACADDR_t *pMcastAddr, - tANI_U32 command -) -{ - VOS_STATUS status; - tANI_U32 count; - tANI_U32 rmcActive; - - if (!VOS_IS_STATUS_SUCCESS(vos_lock_acquire( &(pTLCb->rmcLock)))) - { - TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, - "%s Get Lock Fail", __func__)); - return VOS_STATUS_E_FAILURE; - } - - /*add or delete node from active rmcast hash table*/ - if (command) - { - /*add requested rmcast session in active rmcast session list*/ - if (WLANTL_RmcAddRmcastSession(pTLCb->reliableMcastSession, pMcastAddr)) - { - TLLOGE( VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, - "RMCAST session " MAC_ADDRESS_STR " added in TL hash table", - MAC_ADDR_ARRAY(pMcastAddr->bytes) ) ); - pTLCb->rmcDataPathEnabled = TRUE; - status = VOS_STATUS_SUCCESS; - } - else - { - TLLOGE( VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, - "RMCAST session " MAC_ADDRESS_STR " already exists in TL hash" - " table", MAC_ADDR_ARRAY(pMcastAddr->bytes) ) ); - status = VOS_STATUS_E_FAILURE; - } - } - else - { - /*delete requested rmcast session from active rmcast session list*/ - if (WLANTL_RmcDeleteRmcastSession(pTLCb->reliableMcastSession, pMcastAddr)) - { - TLLOGE( VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO, - "RMCAST session " MAC_ADDRESS_STR " deleted from TL hash table", - MAC_ADDR_ARRAY(pMcastAddr->bytes)) ); - status = VOS_STATUS_SUCCESS; - rmcActive = FALSE; - for ( count = 0; count < WLANTL_RMCAST_HASH_TABLE_SIZE; count++ ) - { - if (pTLCb->reliableMcastSession[count]) - { - rmcActive = TRUE; - break; - } - } - if (TRUE == rmcActive) - { - pTLCb->rmcDataPathEnabled = TRUE; - } - else - { - pTLCb->rmcDataPathEnabled = FALSE; - } - } - else - { - TLLOGE( VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, - "RMCAST session " MAC_ADDRESS_STR " doesn't exist in TL hash" - " table", MAC_ADDR_ARRAY(pMcastAddr->bytes) ) ); - status = VOS_STATUS_E_FAILURE; - } - } - - if (!VOS_IS_STATUS_SUCCESS(vos_lock_release(&(pTLCb->rmcLock)))) - { - TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, - "%s Release Lock Fail", __func__)); - return VOS_STATUS_E_FAILURE; - } - - return status; -}/* End of WLANTL_ProcessRmcCommand */ - -/*============================================================================= - FUNCTION WLANTL_EnableReliableMcast - - DESCRIPTION - This function enables data path of reliable multicast in TL - - DEPENDENCIES - Reliable multicast receive leader must be selected by FW before - UMAC calling this API - - PARAMETERS - - IN - - pvosGCtx : Pointer to VOS global context - pMcastTransmitterAddr : Pointer to MAC ADDR of reliable multicast transmitter - - RETURN VALUE - The result code associated with performing the operation - - VOS_STATUS_E_FAULT: Sanity check on input failed - - VOS_STATUS_SUCCESS: Everything is good :) - - Other return values are possible coming from the called functions. - Please check API for additional info. - - SIDE EFFECTS - -==============================================================================*/ -VOS_STATUS -WLANTL_EnableReliableMcast -( - v_PVOID_t pvosGCtx, - v_MACADDR_t *pMcastTransmitterAddr -) -{ - WLANTL_CbType* pTLCb; - VOS_STATUS status; - - /*sanity check*/ - if ( (NULL == pvosGCtx) || (NULL == pMcastTransmitterAddr) ) - { - TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, - "WLAN TL %s: Sanity check failed pvosGCtx %p aMcastAddr %p", - __func__, pvosGCtx, pMcastTransmitterAddr)); - return VOS_STATUS_E_FAILURE; - } - - /*sanity check*/ - pTLCb = VOS_GET_TL_CB(pvosGCtx); - if ( NULL == pTLCb ) - { - TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, - "WLAN TL %s: pTLCb is NULL", __func__)); - return VOS_STATUS_E_FAILURE; - } - - status = WLANTL_ProcessRmcCommand(pTLCb, pMcastTransmitterAddr , 1); - - return status; -} /* End of WLANTL_EnableReliableMcast */ - - -/*============================================================================= - FUNCTION WLANTL_DisableReliableMcast - - DESCRIPTION - This function disables data path of reliable multicast in TL - - DEPENDENCIES - HDD should have recived IOCTL to disable reliable RMC - - PARAMETERS - - IN - - pvosGCtx : Pointer to VOS global context - pMcastAddr : Pointer to MAC ADDR of reliable multicast transmitter - - RETURN VALUE - The result code associated with performing the operation - - VOS_STATUS_E_FAULT: Sanity check on input failed - - VOS_STATUS_SUCCESS: Everything is good :) - - Other return values are possible coming from the called functions. - Please check API for additional info. - - SIDE EFFECTS - -==============================================================================*/ -VOS_STATUS -WLANTL_DisableReliableMcast -( - v_PVOID_t pvosGCtx, - v_MACADDR_t *pMcastTransmitterAddr -) -{ - WLANTL_CbType* pTLCb; - VOS_STATUS status; - - /*Sanity check*/ - if ((NULL == pvosGCtx) || (NULL == pMcastTransmitterAddr)) - { - TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, - "WLAN TL %s: Sanity check failed pvosGCtx %p aMcastAddr %p", - __func__, pvosGCtx, pMcastTransmitterAddr)); - return VOS_STATUS_E_FAILURE; - } - - /*Sanity check*/ - pTLCb = VOS_GET_TL_CB(pvosGCtx); - if (NULL == pTLCb) - { - TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, - "WLAN TL %s: pTLCb is NULL", __func__)); - return VOS_STATUS_E_FAILURE; - } - - status = WLANTL_ProcessRmcCommand(pTLCb, pMcastTransmitterAddr, 0); - - return status; -} /* End of WLANTL_DisableReliableMcast */ - -/*============================================================================= - Duplicate Multicast Detection Functions -==============================================================================*/ - -/*============================================================================= - FUNCTION WLANTL_IsDuplicateMcastFrm - - DESCRIPTION - This function checks for duplicast multicast frames and drops them. - - DEPENDENCIES - - PARAMETERS - - IN - - pClientSTA : Pointer to WLANTL_STAClientType - aucBDHeader : Pointer to BD header - - RETURN VALUE - - VOS_FALSE: This frame is not a duplicate - - VOS_TRUE: This frame is a duplicate - -==============================================================================*/ -v_U8_t -WLANTL_IsDuplicateMcastFrm -( - WLANTL_STAClientType *pClientSTA, - vos_pkt_t *vosDataBuff -) -{ - v_U8_t duplicate = VOS_FALSE; - WLANTL_RMCAST_SESSION *pNode; - v_U16_t usSeqCtrl; - v_MACADDR_t mcastAddr; - VOS_STATUS vosStatus; - v_PVOID_t pvPeekData; - - /* Get address 1 of Data Frame */ - vosStatus = vos_pkt_peek_data(vosDataBuff, WLANTL_MAC_ADDR_ALIGN(1), - (v_PVOID_t)&pvPeekData, VOS_MAC_ADDR_SIZE); - - if ( VOS_STATUS_SUCCESS != vosStatus ) - { - TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, - "WLAN TL: Failed to get Addr 1 of 80211 header from packet %d", - vosStatus)); - return VOS_FALSE; - } - - /* Copy address 1 of Data Frame */ - vos_mem_copy(&mcastAddr.bytes, pvPeekData, VOS_MAC_ADDR_SIZE); - - /* - * We perform duplicate detection for only multicast data frames - */ - if (vos_is_macaddr_group(&mcastAddr) && - !vos_is_macaddr_broadcast(&mcastAddr)) - { - /* Get sequence control of Data Frame */ - vosStatus = vos_pkt_peek_data(vosDataBuff, - (WLANTL_MAC_ADDR_ALIGN(1) + (3 * VOS_MAC_ADDR_SIZE)), - (v_PVOID_t)&pvPeekData, sizeof(v_U16_t)); - - if ( VOS_STATUS_SUCCESS != vosStatus ) - { - TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, - "WLAN TL: Failed to get Sequence Control from packet %d", - vosStatus)); - return VOS_FALSE; - } - - /* Copy sequence control from the Data Frame */ - usSeqCtrl = *(v_U16_t *)pvPeekData; - - if (!VOS_IS_STATUS_SUCCESS(vos_lock_acquire(&(pClientSTA->mcLock)))) - { - TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, - "%s Get Lock Fail", __func__)); - return VOS_FALSE; - } - - pNode = WLANTL_RmcLookUpRmcastSession(pClientSTA->mcastSession, - &mcastAddr); - if (NULL == pNode) - { - /* If the session does not exist, add it. */ - pNode = WLANTL_RmcAddRmcastSession(pClientSTA->mcastSession, - &mcastAddr); - /* If we could not add a entry, skip duplicate detection */ - if (NULL == pNode) - { - TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, - "%s Failed to add multicast session", __func__)); - if (!VOS_IS_STATUS_SUCCESS - (vos_lock_release(&(pClientSTA->mcLock)))) - { - TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, - "%s Release Lock Fail", __func__)); - } - return VOS_FALSE; - } - /* Initialize the sequence control value. */ - pNode->mcSeqCtl = usSeqCtrl; - } - else - { - /* - * Check if the sequence number of this frame matches the last - * we have seen. - */ - if (pNode->mcSeqCtl == usSeqCtrl) - { - pNode->rxMCDupcnt++; - TLLOG1(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO, - "%s Rx Multicast Duplicate %d " MAC_ADDRESS_STR - " (Seq %x)", __func__, - pNode->rxMCDupcnt, MAC_ADDR_ARRAY(mcastAddr.bytes), - usSeqCtrl)); - duplicate = VOS_TRUE; - } - else - { - /* Update the last seen sequence number */ - pNode->mcSeqCtl = usSeqCtrl; - } - } - - if (!VOS_IS_STATUS_SUCCESS (vos_lock_release(&(pClientSTA->mcLock)))) - { - TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, - "%s Release Lock Fail", __func__)); - } - } - - return duplicate; -} - -/*============================================================================= - FUNCTION WLANTL_McastDeleteAllEntries - - DESCRIPTION - This function removes all multicast entries used for duplicate detection - - DEPENDENCIES - - PARAMETERS - - IN - - pClientSTA : Pointer to WLANTL_STAClientType - - RETURN VALUE - - None - -==============================================================================*/ -void -WLANTL_McastDeleteAllEntries(WLANTL_STAClientType * pClientSTA) -{ - WLANTL_RMCAST_SESSION *pNode, **head; - int index; - - TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO, - "%s Deleting all multicast entries", __func__)); - - if (!VOS_IS_STATUS_SUCCESS(vos_lock_acquire(&(pClientSTA->mcLock)))) - { - TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, - "%s Get Lock Fail", __func__)); - return; - } - - for (index = 0; index < WLANTL_RMCAST_HASH_TABLE_SIZE; index++) - { - head = &pClientSTA->mcastSession[index]; - - pNode = *head; - - while (pNode) - { - *head = pNode->next; - /* free the group entry */ - vos_mem_free(pNode); - pNode = *head; - } - } - - if (!VOS_IS_STATUS_SUCCESS (vos_lock_release(&(pClientSTA->mcLock)))) - { - TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, - "%s Release Lock Fail", __func__)); - } -} - -/*============================================================================= - FUNCTION WLANTL_SetMcastDuplicateDetection - - DESCRIPTION - This function sets multicate duplicate detection operation. - If enable is 1, the detection is enabled, else it is disabled. - - DEPENDENCIES - - PARAMETERS - - IN - - pvosGCtx : Pointer to VOS global context - enable : Boolean to enable or disable - - RETURN VALUE - The result code associated with performing the operation - - VOS_STATUS_E_FAULT: Sanity check on input failed - - VOS_STATUS_SUCCESS: Everything is good :) - - Other return values are possible coming from the called functions. - Please check API for additional info. - - SIDE EFFECTS - -==============================================================================*/ -VOS_STATUS -WLANTL_SetMcastDuplicateDetection -( - v_PVOID_t pvosGCtx, - v_U8_t enable -) -{ - WLANTL_CbType* pTLCb; - - /*Sanity check*/ - if (NULL == pvosGCtx) - { - TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, - "WLAN TL %s: Sanity check failed pvosGCtx %p", - __func__, pvosGCtx)); - return VOS_STATUS_E_FAILURE; - } - - /*Sanity check*/ - pTLCb = VOS_GET_TL_CB(pvosGCtx); - if (NULL == pTLCb) - { - TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, - "WLAN TL %s: pTLCb is NULL", __func__)); - return VOS_STATUS_E_FAILURE; - } - - switch (enable) - { - default: - /* - * Any value other than 0 or 1 is used to dump the - * duplicate count. - */ - TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, - "WLAN TL %s: Multicast Duplicate Count %d", - __func__, pTLCb->mcastDupCnt)); - break; - case 0: - case 1: - pTLCb->multicastDuplicateDetectionEnabled = enable; - break; - } - - return VOS_STATUS_SUCCESS; -} - -#endif /* End of WLAN_FEATURE_RELIABLE_MCAST */ diff --git a/CORE/TL/src/wlan_qct_tl_ba.c b/CORE/TL/src/wlan_qct_tl_ba.c index 7590442d2ece..78cf5206365e 100644 --- a/CORE/TL/src/wlan_qct_tl_ba.c +++ b/CORE/TL/src/wlan_qct_tl_ba.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /*=========================================================================== W L A N _ Q C T _ T L _ B A. C @@ -42,10 +41,6 @@ Are listed for each API below. - - Copyright (c) 2008 Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ===========================================================================*/ /*=========================================================================== @@ -241,7 +236,7 @@ v_VOID_t WLANTL_ReorderingAgingTimerExpierCB /*A replay packet found*/ VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, - "WLANTL_ReorderingAgingTimerExpierCB: total dropped replay packets on STA ID %X is [0x%lX]\n", + "WLANTL_ReorderingAgingTimerExpierCB: total dropped replay packets on STA ID %X is [0x%X]\n", ucSTAID, pClientSTA->ulTotalReplayPacketsDetected); VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, @@ -1028,7 +1023,7 @@ WLANTL_AMSDUProcess numAMSDUFrames++; if(0 == (numAMSDUFrames % 5000)) { - TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR,"%lu AMSDU frames arrived", numAMSDUFrames)); + TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR,"%u AMSDU frames arrived", numAMSDUFrames)); } return VOS_STATUS_SUCCESS; }/* WLANTL_AMSDUProcess */ diff --git a/CORE/TL/src/wlan_qct_tl_hosupport.c b/CORE/TL/src/wlan_qct_tl_hosupport.c index 23bdd760bb5a..911acde7f863 100644 --- a/CORE/TL/src/wlan_qct_tl_hosupport.c +++ b/CORE/TL/src/wlan_qct_tl_hosupport.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /*=========================================================================== W L A N _ Q C T _ T L _ HOSUPPORT. C @@ -35,10 +34,6 @@ Are listed for each API below. - - Copyright (c) 2008 Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ===========================================================================*/ /*=========================================================================== @@ -240,7 +235,7 @@ void WLANTLPrintPktsRcvdPerRateIdx(v_PVOID_t pAdapter, v_U8_t staId, v_BOOL_t fl /* printing int the below format * " rateIndex = pktCount "*/ TLLOG1(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, - "%d = %ld", ii+1, + "%d = %d", ii+1, tlCtxt->atlSTAClients[staId]->trafficStatistics.pktCounterRateIdx[ii])); } @@ -295,7 +290,7 @@ void WLANTLPrintPktsRcvdPerRssi(v_PVOID_t pAdapter, v_U8_t staId, v_BOOL_t flush /* prints are in the below format * " fromRSSI - toRSSI = pktCount " */ TLLOG1(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, - " %d - %d = %ld", + " %d - %d = %d", ii, ii+(MAX_RSSI_INTERVAL - 1), count)); } return; @@ -612,7 +607,7 @@ VOS_STATUS WLANTL_StatHandleRXFrame tlCtxt->atlSTAClients[STAid]->trafficStatistics.pktCounterRssi[(v_U16_t)((WDA_GET_RX_RSSI_DB(pBDHeader)) * (-1))]++; #endif TLLOG1(VOS_TRACE (VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO_MED, - "****Received rate Index = %ld type=%d subtype=%d****\n", + "****Received rate Index = %d type=%d subtype=%d****\n", statistics->rxRate,WDA_GET_RX_TYPE(pBDHeader),WDA_GET_RX_SUBTYPE(pBDHeader))); statistics->rxBcnt += (packetSize - WLANHAL_RX_BD_HEADER_SIZE); diff --git a/CORE/TL/src/wlan_qct_tl_hosupport.h b/CORE/TL/src/wlan_qct_tl_hosupport.h index d27293e5f3e6..e75aefd697ed 100644 --- a/CORE/TL/src/wlan_qct_tl_hosupport.h +++ b/CORE/TL/src/wlan_qct_tl_hosupport.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef WLAN_QCT_TL_HOSUPPORT_H #define WLAN_QCT_TL_HOSUPPORT_H @@ -36,8 +35,6 @@ DESCRIPTION - Copyright (c) 2008 Qualcomm Technologies, Inc. All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ===========================================================================*/ diff --git a/CORE/TL/src/wlan_qct_tli.h b/CORE/TL/src/wlan_qct_tli.h index 0e642f9cc2ab..6a5a217113a5 100644 --- a/CORE/TL/src/wlan_qct_tli.h +++ b/CORE/TL/src/wlan_qct_tli.h @@ -24,7 +24,8 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - +/* + * */ #ifndef WLAN_QCT_TLI_H #define WLAN_QCT_TLI_H @@ -38,8 +39,6 @@ DESCRIPTION This file contains the internal declarations used within wlan transport layer module. - Copyright (c) 2008 Qualcomm Technologies, Inc. All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ===========================================================================*/ @@ -178,12 +177,6 @@ when who what, where, why #define WLANTL_FRAME_TYPE_MCAST 0x01 #define WLANTL_FRAME_TYPE_UCAST 0x00 -#ifdef WLAN_FEATURE_RELIABLE_MCAST -/*Size of TL's active list of reliable multicast hash table. - Always keep this value 2 ^ n for efficient hashing*/ -#define WLANTL_RMCAST_HASH_TABLE_SIZE (32) -#endif - /*------------------------------------------------------------------------- BT-AMP related definition - !!! should probably be moved to BT-AMP header ---------------------------------------------------------------------------*/ @@ -469,23 +462,6 @@ typedef struct v_U8_t ucSet; }WLANTL_UAPSDInfoType; -#ifdef WLAN_FEATURE_RELIABLE_MCAST -/*--------------------------------------------------------------------------- - Reliable Multicast Session information ----------------------------------------------------------------------------*/ -struct tTL_ReliableMcastList -{ - /* Reliable multicast session in TL */ - struct tTL_ReliableMcastList *next; - v_MACADDR_t reliableMcastAddr; - v_U16_t mcSeqCtl; - v_U32_t rxMCDupcnt; -}; - -typedef struct tTL_ReliableMcastList WLANTL_RMCAST_SESSION; - -#endif - /*--------------------------------------------------------------------------- STA Client type ---------------------------------------------------------------------------*/ @@ -673,12 +649,6 @@ typedef struct v_U32_t linkCapacity; -#ifdef WLAN_FEATURE_RELIABLE_MCAST - /*Active reliable multicast sessions list in TL*/ - WLANTL_RMCAST_SESSION *mcastSession[WLANTL_RMCAST_HASH_TABLE_SIZE]; - /*Reliable multicast lock*/ - vos_lock_t mcLock; -#endif }WLANTL_STAClientType; /*--------------------------------------------------------------------------- @@ -873,16 +843,6 @@ typedef struct /* Whether WDA_DS_TX_START_XMIT msg is pending or not */ v_BOOL_t isTxTranmitMsgPending; -#ifdef WLAN_FEATURE_RELIABLE_MCAST - /*Active reliable multicast sessions list in TL*/ - WLANTL_RMCAST_SESSION *reliableMcastSession[WLANTL_RMCAST_HASH_TABLE_SIZE]; - /*Reliable multicast lock*/ - vos_lock_t rmcLock; - v_U8_t multicastDuplicateDetectionEnabled; - v_U8_t rmcDataPathEnabled; - v_U32_t mcastDupCnt; -#endif - }WLANTL_CbType; /*========================================================================== @@ -1732,218 +1692,4 @@ WLANTL_FwdPktToHDD v_U8_t ucSTAId ); -#ifdef WLAN_FEATURE_RELIABLE_MCAST - -/*========================================================================== - FUNCTION WLANTL_RmcInit - - DESCRIPTION This function initilizes RMC module in TL - - PARAMETERS - pADapter : pointer to VOS global context - - RETURN VALUE - VOS_STATUS_SUCCESS : for success - VOS_STATUS_FAILURE : for failure - VOS_STATUS_E_INVAL : for invalid input parameter - -============================================================================*/ -VOS_STATUS WLANTL_RmcInit -( - v_PVOID_t pAdapter -); - -/*========================================================================== - FUNCTION WLANTL_RmcDeInit - - DESCRIPTION This function de-initilizes RMC module in TL - - PARAMETERS - pADapter : pointer to VOS global context - - RETURN VALUE - VOS_STATUS_SUCCESS : for success - VOS_STATUS_FAILURE : for failure - VOS_STATUS_E_INVAL : for invalid input parameter - -============================================================================*/ -VOS_STATUS WLANTL_RmcDeInit -( - v_PVOID_t pAdapter -); - - -/*========================================================================== - FUNCTION WLANTL_RmcHashRmcastSession - - DESCRIPTION This function hashes input RMCAST MAC address - - PARAMETERS - pMcastAddr : pointer to input RMCAST MAC address - - RETURN VALUE - tANI_U8 : A hash value between 0 to WLANTL_MAX_RMCAST_SESSIONS - 1 -============================================================================*/ -tANI_U8 WLANTL_RmcHashRmcastSession ( v_MACADDR_t *pMcastAddr ); - - -/*=========================================================================== - FUNCTION WLANTL_RmcLookUpRmcastSession - - DESCRIPTION This function tries to find out RMCAST address in TL's active - list of reliable multicast sessions - - PARAMETERS - pTLCb : pointer to TL Cb - pMcastAddr : pointer to input RMCAST MAC address - - RETURN VALUE - WLANTL_RMCAST_SESSION * : - NULL if input RMCAST MAC address does exist in active RMCAST sessions list - Pointer to RMCAST session found in active RMCAST sessions list -=============================================================================*/ -WLANTL_RMCAST_SESSION *WLANTL_RmcLookUpRmcastSession -( - WLANTL_RMCAST_SESSION *reliableMcastSession[], - v_MACADDR_t *pMcastAddr -); - -/*=========================================================================== - FUNCTION WLANTL_RmcAddRmcastSession - - DESCRIPTION This function adds requested RMCAST address in TL's active - list of reliable multicast sessions - - PARAMETERS - pTLCb : pointer to TL Cb - pMcastAddr : pointer to input RMCAST MAC address - - RETURN VALUE - WLANTL_RMCAST_SESSION * : - NULL if input RMCAST MAC address already exists in active RMCAST sessions - list else pointer to RMCAST session which is added in active RMCAST - sessions list -=============================================================================*/ -WLANTL_RMCAST_SESSION *WLANTL_RmcAddRmcastSession -( - WLANTL_RMCAST_SESSION *reliableMcastSession[], - v_MACADDR_t *pMcastAddr -); - -/*=========================================================================== - FUNCTION WLANTL_RmcDeleteRmcastSession - - DESCRIPTION This function deleted requested RMCAST address from TL's active - list of reliable multicast sessions - - PARAMETERS - pTLCb : pointer to TL Cb - pMcastAddr : pointer to input RMCAST MAC address - - RETURN VALUE - WLANTL_RMCAST_SESSION * : - 0 if input RMCAST session does not exist in active RMCAST - sessions list - 1 if input RMCAST session is successfully deleted from TL's active list - of reliable multicast sessions -=============================================================================*/ -tANI_U8 -WLANTL_RmcDeleteRmcastSession -( - WLANTL_RMCAST_SESSION *reliableMcastSession[], - v_MACADDR_t *pMcastAddr -); - -/*============================================================================= - FUNCTION WLANTL_ProcessRmcCommand - - DESCRIPTION - This function adds/deletes input RMCAST session to/from TL's active hash - table of RMCAST sessions - - DEPENDENCIES - Reliable multicast receive leader must be selected by FW before - UMAC calling this API - - PARAMETERS - - IN - - pTLCb : Pointer to TL context - pMcastAddr : Pointer to MAC ADDR of RMCAST session which needs to to added - or deleted - command : If command is 1 then add requested RMCAST session in active - session hash table else delete it from active session hash - table - - RETURN VALUE - The result code associated with performing the operation - - VOS_STATUS_E_FAILURE: When add or delete command failed - - VOS_STATUS_SUCCESS: Everything is good :) - - SIDE EFFECTS -==============================================================================*/ -VOS_STATUS -WLANTL_ProcessRmcCommand -( - WLANTL_CbType* pTLCb, - v_MACADDR_t *pMcastAddr, - tANI_U32 command -); - -/*============================================================================= - FUNCTION WLANTL_IsDuplicateMcastFrm - - DESCRIPTION - This function checks for duplicast multicast frames and drops them. - - DEPENDENCIES - - PARAMETERS - - IN - - pClientSTA : Pointer to WLANTL_STAClientType - aucBDHeader : Pointer to BD header - - RETURN VALUE - - VOS_FALSE: This frame is not a duplicate - - VOS_TRUE: This frame is a duplicate - -==============================================================================*/ -v_U8_t -WLANTL_IsDuplicateMcastFrm -( - WLANTL_STAClientType *pClientSTA, - vos_pkt_t* vosDataBuff -); - -/*============================================================================= - FUNCTION WLANTL_McastDeleteAllEntries - - DESCRIPTION - This function removes all multicast entries used for duplicate detection - - DEPENDENCIES - - PARAMETERS - - IN - - pClientSTA : Pointer to WLANTL_STAClientType - - RETURN VALUE - - None - -==============================================================================*/ -void -WLANTL_McastDeleteAllEntries(WLANTL_STAClientType * pClientSTA); - -#endif /*End of WLAN_FEATURE_RELIABLE_MCAST*/ - #endif /* #ifndef WLAN_QCT_TLI_H */ diff --git a/CORE/TL/src/wlan_qct_tli_ba.h b/CORE/TL/src/wlan_qct_tli_ba.h index e2397c6e2fb2..ea5f4adb299b 100644 --- a/CORE/TL/src/wlan_qct_tli_ba.h +++ b/CORE/TL/src/wlan_qct_tli_ba.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef WLAN_QCT_TLI_BA_H #define WLAN_QCT_TLI_BA_H @@ -39,8 +38,6 @@ DESCRIPTION layer module for BA session support, AMSDU de-aggregation and MSDU reordering. - Copyright (c) 2008 Qualcomm Technologies, Inc. All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ===========================================================================*/ diff --git a/CORE/UTILS/FWLOG/dbglog_host.c b/CORE/UTILS/FWLOG/dbglog_host.c index d75dceed6313..d04931d536fb 100644 --- a/CORE/UTILS/FWLOG/dbglog_host.c +++ b/CORE/UTILS/FWLOG/dbglog_host.c @@ -24,6 +24,21 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ +/* + * Copyright (c) 2013, Qualcomm Atheros, Inc. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ /* Host Debug log implementation */ @@ -1342,7 +1357,7 @@ dbglog_print_raw_data(A_UINT32 *buffer, A_UINT32 length) #ifdef WLAN_OPEN_SOURCE static int -dbglog_debugfs_raw_data(wmi_unified_t wmi_handle, const u_int8_t *buf, A_UINT32 length) +dbglog_debugfs_raw_data(wmi_unified_t wmi_handle, const u_int8_t *buf, A_UINT32 length, A_UINT32 dropped) { struct fwdebug *fwlog = (struct fwdebug *)&wmi_handle->dbglog; struct dbglog_slot *slot; @@ -1361,6 +1376,7 @@ dbglog_debugfs_raw_data(wmi_unified_t wmi_handle, const u_int8_t *buf, A_UINT32 slot = (struct dbglog_slot *) skb_put(skb, slot_len); slot->timestamp = cpu_to_le32(jiffies); slot->length = cpu_to_le32(length); + slot->dropped = cpu_to_le32(dropped); memcpy(slot->payload, buf, length); /* Need to pad each record to fixed length ATH6KL_FWLOG_PAYLOAD_SIZE */ @@ -1386,7 +1402,7 @@ dbglog_debugfs_raw_data(wmi_unified_t wmi_handle, const u_int8_t *buf, A_UINT32 #endif /* WLAN_OPEN_SOURCE */ int -dbglog_process_netlink_data(wmi_unified_t wmi_handle, const u_int8_t *buffer, A_UINT32 len) +dbglog_process_netlink_data(wmi_unified_t wmi_handle, const u_int8_t *buffer, A_UINT32 len, A_UINT32 dropped) { struct sk_buff *skb_out; struct nlmsghdr *nlh; @@ -1410,6 +1426,7 @@ dbglog_process_netlink_data(wmi_unified_t wmi_handle, const u_int8_t *buffer, A_ slot = (struct dbglog_slot *) nlmsg_data(nlh); slot->timestamp = cpu_to_le32(jiffies); slot->length = cpu_to_le32(len); + slot->dropped = cpu_to_le32(dropped); memcpy(slot->payload, buffer, len); NETLINK_CB(skb_out).dst_group = 0; /* not in mcast group */ @@ -1471,7 +1488,7 @@ dbglog_parse_debug_logs(ol_scn_t scn, u_int8_t *data, u_int32_t datalen) if(appstarted){ return dbglog_process_netlink_data((wmi_unified_t)wma->wmi_handle, (A_UINT8 *)buffer, - len); + len, dropped); } else { return 0; } @@ -1481,7 +1498,7 @@ dbglog_parse_debug_logs(ol_scn_t scn, u_int8_t *data, u_int32_t datalen) #ifdef WLAN_OPEN_SOURCE if (dbglog_process_type == DBGLOG_PROCESS_POOL_RAW) { return dbglog_debugfs_raw_data((wmi_unified_t)wma->wmi_handle, - (A_UINT8 *)buffer, len); + (A_UINT8 *)buffer, len, dropped); } #endif /* WLAN_OPEN_SOURCE */ diff --git a/CORE/UTILS/PKTLOG/include/pktlog_ac.h b/CORE/UTILS/PKTLOG/include/pktlog_ac.h index 5e8cebeddf93..d0f0e6868e1c 100644 --- a/CORE/UTILS/PKTLOG/include/pktlog_ac.h +++ b/CORE/UTILS/PKTLOG/include/pktlog_ac.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef _PKTLOG_AC_H_ #define _PKTLOG_AC_H_ #ifndef REMOVE_PKT_LOG diff --git a/CORE/UTILS/PKTLOG/include/pktlog_ac_api.h b/CORE/UTILS/PKTLOG/include/pktlog_ac_api.h index 0d769a12c0da..9487c60452bb 100644 --- a/CORE/UTILS/PKTLOG/include/pktlog_ac_api.h +++ b/CORE/UTILS/PKTLOG/include/pktlog_ac_api.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /* * The file is used to define structures that are shared between * kernel space and user space pktlog application. diff --git a/CORE/UTILS/PKTLOG/include/pktlog_ac_i.h b/CORE/UTILS/PKTLOG/include/pktlog_ac_i.h index 0d8047d3b9e3..2ad85e64c3cc 100644 --- a/CORE/UTILS/PKTLOG/include/pktlog_ac_i.h +++ b/CORE/UTILS/PKTLOG/include/pktlog_ac_i.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef _PKTLOG_AC_I_ #define _PKTLOG_AC_I_ #ifndef REMOVE_PKT_LOG diff --git a/CORE/UTILS/PKTLOG/linux_ac.c b/CORE/UTILS/PKTLOG/linux_ac.c index 0a8700a22102..7bd746d4f2f4 100644 --- a/CORE/UTILS/PKTLOG/linux_ac.c +++ b/CORE/UTILS/PKTLOG/linux_ac.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef REMOVE_PKT_LOG #ifndef EXPORT_SYMTAB #define EXPORT_SYMTAB diff --git a/CORE/UTILS/PKTLOG/pktlog_ac.c b/CORE/UTILS/PKTLOG/pktlog_ac.c index db80626bdac5..b4c43714ccfb 100644 --- a/CORE/UTILS/PKTLOG/pktlog_ac.c +++ b/CORE/UTILS/PKTLOG/pktlog_ac.c @@ -24,7 +24,20 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - +/* + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ #ifndef REMOVE_PKT_LOG #include "adf_os_mem.h" diff --git a/CORE/UTILS/PKTLOG/pktlog_internal.c b/CORE/UTILS/PKTLOG/pktlog_internal.c index 0743207829b4..10a99adea677 100644 --- a/CORE/UTILS/PKTLOG/pktlog_internal.c +++ b/CORE/UTILS/PKTLOG/pktlog_internal.c @@ -24,7 +24,20 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - +/* + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ #ifndef REMOVE_PKT_LOG #include "ol_txrx_types.h" diff --git a/CORE/VOSS/inc/event_defs.h b/CORE/VOSS/inc/event_defs.h index ec8b860f5d0f..fb7accaae338 100644 --- a/CORE/VOSS/inc/event_defs.h +++ b/CORE/VOSS/inc/event_defs.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef EVENT_DEFS_H #define EVENT_DEFS_H diff --git a/CORE/VOSS/inc/i_vos_diag_core_event.h b/CORE/VOSS/inc/i_vos_diag_core_event.h index 587f62e7d54e..9be482799bd7 100644 --- a/CORE/VOSS/inc/i_vos_diag_core_event.h +++ b/CORE/VOSS/inc/i_vos_diag_core_event.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined( __I_VOS_DIAG_CORE_EVENT_H ) #define __I_VOS_DIAG_CORE_EVENT_H @@ -34,10 +33,6 @@ \brief Android specific definitions for vOSS DIAG events - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ /* $Header$ */ diff --git a/CORE/VOSS/inc/i_vos_diag_core_log.h b/CORE/VOSS/inc/i_vos_diag_core_log.h index 69c5ca97e7b7..0dd0d2d3ed0b 100644 --- a/CORE/VOSS/inc/i_vos_diag_core_log.h +++ b/CORE/VOSS/inc/i_vos_diag_core_log.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined( __I_VOS_DIAG_CORE_LOG_H ) #define __I_VOS_DIAG_CORE_LOG_H @@ -34,10 +33,6 @@ \brief android-specific definitions for vOSS DIAG logs - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ /* $Header$ */ diff --git a/CORE/VOSS/inc/i_vos_event.h b/CORE/VOSS/inc/i_vos_event.h index f31ae9dc8dc0..8763207c62bf 100644 --- a/CORE/VOSS/inc/i_vos_event.h +++ b/CORE/VOSS/inc/i_vos_event.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined( __I_VOS_EVENT_H ) #define __I_VOS_EVENT_H @@ -34,10 +33,6 @@ \brief Linux-specific definitions for vOSS Events - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ /* $Header$ */ diff --git a/CORE/VOSS/inc/i_vos_list.h b/CORE/VOSS/inc/i_vos_list.h index 11580857d39a..b556bb2d0fec 100644 --- a/CORE/VOSS/inc/i_vos_list.h +++ b/CORE/VOSS/inc/i_vos_list.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined( __I_VOS_LIST_H ) #define __I_VOS_LIST_H @@ -34,10 +33,6 @@ \brief Linux-specific definitions for vOSS lists - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ /* $Header$ */ diff --git a/CORE/VOSS/inc/i_vos_lock.h b/CORE/VOSS/inc/i_vos_lock.h index f72334e03b99..dd670661fc29 100644 --- a/CORE/VOSS/inc/i_vos_lock.h +++ b/CORE/VOSS/inc/i_vos_lock.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined( __I_VOS_LOCK_H ) #define __I_VOS_LOCK_H @@ -34,10 +33,6 @@ \brief Linux-specific definitions for vOSS Locks - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ /* $Header$ */ @@ -49,6 +44,9 @@ #include #include #include +#ifdef WLAN_OPEN_SOURCE +#include +#endif /*-------------------------------------------------------------------------- Preprocessor definitions and constants @@ -71,6 +69,12 @@ typedef struct vos_lock_s typedef spinlock_t vos_spin_lock_t; +#ifdef WLAN_OPEN_SOURCE +typedef struct wake_lock vos_wake_lock_t; +#else +typedef int vos_wake_lock_t; +#endif + /*------------------------------------------------------------------------- Function declarations and documenation ------------------------------------------------------------------------*/ diff --git a/CORE/VOSS/inc/i_vos_packet.h b/CORE/VOSS/inc/i_vos_packet.h index ef7a8ec6d327..9e390736c0c8 100644 --- a/CORE/VOSS/inc/i_vos_packet.h +++ b/CORE/VOSS/inc/i_vos_packet.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined( __I_VOS_PACKET_H ) #define __I_VOS_PACKET_H @@ -36,10 +35,6 @@ Network Protocol packet/buffer internal include file - Copyright 2009 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ /* $Header$ */ diff --git a/CORE/VOSS/inc/i_vos_timer.h b/CORE/VOSS/inc/i_vos_timer.h index 27c1ae17d73c..fea0ba88c2b5 100644 --- a/CORE/VOSS/inc/i_vos_timer.h +++ b/CORE/VOSS/inc/i_vos_timer.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined( __I_VOS_TIMER_H ) #define __I_VOS_TIMER_H @@ -34,10 +33,6 @@ \brief Linux-specific definitions for vOSS packets - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ /* $Header$ */ diff --git a/CORE/VOSS/inc/i_vos_trace.h b/CORE/VOSS/inc/i_vos_trace.h index edd92a64918e..b61893f3cdd5 100644 --- a/CORE/VOSS/inc/i_vos_trace.h +++ b/CORE/VOSS/inc/i_vos_trace.h @@ -34,10 +34,6 @@ \brief Linux-specific definitions for VOSS trace - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ /* $Header$ */ diff --git a/CORE/VOSS/inc/i_vos_types.h b/CORE/VOSS/inc/i_vos_types.h index d6d80a5587ab..740172f5680c 100644 --- a/CORE/VOSS/inc/i_vos_types.h +++ b/CORE/VOSS/inc/i_vos_types.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined( __I_VOS_TYPES_H ) #define __I_VOS_TYPES_H #include @@ -45,10 +44,6 @@ Linux specific basic type definitions - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ /* $Header$ */ diff --git a/CORE/VOSS/inc/log_codes.h b/CORE/VOSS/inc/log_codes.h index 40684294d3fd..ea02932d6d53 100644 --- a/CORE/VOSS/inc/log_codes.h +++ b/CORE/VOSS/inc/log_codes.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef LOG_CODES_H #define LOG_CODES_H @@ -35,7 +34,6 @@ General Description This file contains log code definitions and is shared with the tools. -Copyright (c) 1991-2010 by Qualcomm Technologies, Inc. All Rights Reserved. ===========================================================================*/ /* DO NOT MODIFY THIS FILE WITHOUT PRIOR APPROVAL diff --git a/CORE/VOSS/inc/vos_api.h b/CORE/VOSS/inc/vos_api.h index 25f391bc9443..a68d2d1527d1 100644 --- a/CORE/VOSS/inc/vos_api.h +++ b/CORE/VOSS/inc/vos_api.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined( __VOS_API_H ) #define __VOS_API_H @@ -36,10 +35,6 @@ Header file that inludes all the vOSS API definitions. - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ /*=========================================================================== diff --git a/CORE/VOSS/inc/vos_diag_core_event.h b/CORE/VOSS/inc/vos_diag_core_event.h index 28e8a8147e7d..1d25edd66058 100644 --- a/CORE/VOSS/inc/vos_diag_core_event.h +++ b/CORE/VOSS/inc/vos_diag_core_event.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined( __VOS_DIAG_CORE_EVENT_H ) #define __VOS_DIAG_CORE_EVENT_H @@ -36,10 +35,6 @@ Definitions for vOSS Events - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ /* $Header$ */ diff --git a/CORE/VOSS/inc/vos_diag_core_log.h b/CORE/VOSS/inc/vos_diag_core_log.h index 2d70df3838a8..5176d074272a 100644 --- a/CORE/VOSS/inc/vos_diag_core_log.h +++ b/CORE/VOSS/inc/vos_diag_core_log.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined( __VOS_DIAG_CORE_LOG_H ) #define __VOS_DIAG_CORE_LOG_H @@ -36,10 +35,6 @@ Definitions for vOSS Events - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ /* $Header$ */ diff --git a/CORE/VOSS/inc/vos_event.h b/CORE/VOSS/inc/vos_event.h index a9ca288f9eb9..2d03749b0337 100644 --- a/CORE/VOSS/inc/vos_event.h +++ b/CORE/VOSS/inc/vos_event.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined( __VOS_EVENT_H ) #define __VOS_EVENT_H @@ -36,10 +35,6 @@ Definitions for vOSS Events - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ /* $Header$ */ diff --git a/CORE/VOSS/inc/vos_getBin.h b/CORE/VOSS/inc/vos_getBin.h index 06a215dfd863..e4fdc06935de 100644 --- a/CORE/VOSS/inc/vos_getBin.h +++ b/CORE/VOSS/inc/vos_getBin.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined( __VOS_GETBIN_H ) #define __VOS_GETBIN_H @@ -39,10 +38,6 @@ These APIs allow components to retrieve binary contents (firmware, configuration data, etc.) from a storage medium on the platform. - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ /* $Header$ */ diff --git a/CORE/VOSS/inc/vos_list.h b/CORE/VOSS/inc/vos_list.h index b8ab5a0c75df..1f3a1dbe4356 100644 --- a/CORE/VOSS/inc/vos_list.h +++ b/CORE/VOSS/inc/vos_list.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined( __VOS_LIST_H ) #define __VOS_LIST_H @@ -61,10 +60,6 @@ This linked list API is implemented with appropriate locking mechanisms to assure operations on the list are thread safe. - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ /* $Header$ */ diff --git a/CORE/VOSS/inc/vos_lock.h b/CORE/VOSS/inc/vos_lock.h index 50eab8a66de8..5ed87af9daf0 100644 --- a/CORE/VOSS/inc/vos_lock.h +++ b/CORE/VOSS/inc/vos_lock.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined( __VOS_LOCK_H ) #define __VOS_LOCK_H @@ -36,10 +35,6 @@ Definitions for vOSS Locks - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ /* $Header$ */ @@ -251,5 +246,60 @@ VOS_STATUS vos_spin_lock_release(vos_spin_lock_t *pLock); ------------------------------------------------------------------------*/ VOS_STATUS vos_spin_lock_destroy(vos_spin_lock_t *pLock); +/*-------------------------------------------------------------------------- + + \brief vos_wake_lock_init() - initializes a vOSS wake lock + + \param pLock - the wake lock to initialize + name - wakelock name + + \return VOS_STATUS_SUCCESS - wake lock was successfully initialized and + is ready to be used. + --------------------------------------------------------------------------*/ +VOS_STATUS vos_wake_lock_init(vos_wake_lock_t *pLock, const char *name); + +/*-------------------------------------------------------------------------- + + \brief vos_wake_lock_acquire() - acquires a wake lock + + \param pLock - the wake lock to acquire + + \return VOS_STATUS_SUCCESS - the wake lock was successfully acquired + + ------------------------------------------------------------------------*/ +VOS_STATUS vos_wake_lock_acquire(vos_wake_lock_t *pLock); + +/*-------------------------------------------------------------------------- + + \brief vos_wake_lock_timeout_acquire() - acquires a wake lock with a timeout + + \param pLock - the wake lock to acquire + + \return VOS_STATUS_SUCCESS - the wake lock was successfully acquired + + ------------------------------------------------------------------------*/ +VOS_STATUS vos_wake_lock_timeout_acquire(vos_wake_lock_t *pLock, v_U32_t msec); + +/*-------------------------------------------------------------------------- + + \brief vos_wake_lock_release() - releases a wake lock + + \param pLock - the wake lock to release + + \return VOS_STATUS_SUCCESS - the lock was successfully released + + ------------------------------------------------------------------------*/ +VOS_STATUS vos_wake_lock_release(vos_wake_lock_t *pLock); + +/*-------------------------------------------------------------------------- + + \brief vos_wake_lock_destroy() - destroys a wake lock + + \param pLock - the wake lock to destroy + + \return VOS_STATUS_SUCCESS - the lock was successfully destroyed + + ------------------------------------------------------------------------*/ +VOS_STATUS vos_wake_lock_destroy(vos_wake_lock_t *pLock); #endif // __VOSS_LOCK_H diff --git a/CORE/VOSS/inc/vos_memory.h b/CORE/VOSS/inc/vos_memory.h index b259bc59b1df..05fa6604380b 100644 --- a/CORE/VOSS/inc/vos_memory.h +++ b/CORE/VOSS/inc/vos_memory.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined( __VOS_MEMORY_H ) #define __VOS_MEMORY_H @@ -36,10 +35,6 @@ Memory management functions - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ /* $Header$ */ diff --git a/CORE/VOSS/inc/vos_mq.h b/CORE/VOSS/inc/vos_mq.h index 7683e0cda09e..ac7b150e7212 100644 --- a/CORE/VOSS/inc/vos_mq.h +++ b/CORE/VOSS/inc/vos_mq.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined( __VOS_MQ_H ) #define __VOS_MQ_H @@ -36,10 +35,6 @@ Message Queue Definitions and API - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ /* $Header$ */ diff --git a/CORE/VOSS/inc/vos_nvitem.h b/CORE/VOSS/inc/vos_nvitem.h index b8d2be79112b..68cc3283f086 100644 --- a/CORE/VOSS/inc/vos_nvitem.h +++ b/CORE/VOSS/inc/vos_nvitem.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined( __VOS_NVITEM_H ) #define __VOS_NVITEM_H @@ -34,10 +33,6 @@ \brief virtual Operating System Services (vOSS): Non-Volatile storage API - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ /* $Header$ */ @@ -172,7 +167,7 @@ v_REGDOMAIN_t; typedef enum { - COUNTRY_NV, + COUNTRY_INIT, COUNTRY_IE, COUNTRY_USER, COUNTRY_CELL_BASE, @@ -709,4 +704,5 @@ eNVChannelEnabledType vos_nv_getChannelEnabledState ); VOS_STATUS vos_init_wiphy_from_nv_bin(void); +VOS_STATUS vos_init_wiphy_from_eeprom(void); #endif // __VOS_NVITEM_H diff --git a/CORE/VOSS/inc/vos_pack_align.h b/CORE/VOSS/inc/vos_pack_align.h index f6023aa2e91e..2375e4115a21 100644 --- a/CORE/VOSS/inc/vos_pack_align.h +++ b/CORE/VOSS/inc/vos_pack_align.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined( __VOS_PACK_ALIGN_H ) #define __VOS_PACK_ALIGN_H @@ -37,10 +36,6 @@ Definitions for platform independent means of packing and aligning data structures - Copyright 2009 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ /* diff --git a/CORE/VOSS/inc/vos_packet.h b/CORE/VOSS/inc/vos_packet.h index 6029944b0afb..3139a9b887c3 100644 --- a/CORE/VOSS/inc/vos_packet.h +++ b/CORE/VOSS/inc/vos_packet.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined( __VOS_PKT_H ) #define __VOS_PKT_H @@ -36,10 +35,6 @@ Network Protocol packet/buffer support interfaces - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ /* $Header$ */ diff --git a/CORE/VOSS/inc/vos_power.h b/CORE/VOSS/inc/vos_power.h index 8f2905254f6a..0334fe214482 100644 --- a/CORE/VOSS/inc/vos_power.h +++ b/CORE/VOSS/inc/vos_power.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef _VOS_POWER_H_ #define _VOS_POWER_H_ @@ -41,26 +40,6 @@ */ -/*=========================================================================== - - Copyright (c) 2008 Qualcomm Technologies, Inc. All Rights Reserved - - Qualcomm Technologies Proprietary - - Export of this technology or software is regulated by the U.S. Government. - Diversion contrary to U.S. law prohibited. - - All ideas, data and information contained in or disclosed by - this document are confidential and proprietary information of - Qualcomm Technologies, Inc. and all rights therein are expressly reserved. - By accepting this material the recipient agrees that this material - and the information contained therein are held in confidence and in - trust and will not be used, copied, reproduced in whole or in part, - nor its contents revealed in any manner to others without the express - written permission of Qualcomm Technologies, Inc. - -===========================================================================*/ - /*=========================================================================== EDIT HISTORY FOR MODULE diff --git a/CORE/VOSS/inc/vos_status.h b/CORE/VOSS/inc/vos_status.h index 4cbaffbdb990..0ce2d6d2fbc0 100644 --- a/CORE/VOSS/inc/vos_status.h +++ b/CORE/VOSS/inc/vos_status.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined( __VOS_STATUS_H ) #define __VOS_STATUS_H @@ -36,10 +35,6 @@ Basic status codes/definitions used by vOSS - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ /* $Header$ */ diff --git a/CORE/VOSS/inc/vos_threads.h b/CORE/VOSS/inc/vos_threads.h index 1dfea54d6e68..dc73b42b3938 100644 --- a/CORE/VOSS/inc/vos_threads.h +++ b/CORE/VOSS/inc/vos_threads.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined( __VOS_THREADS_H ) #define __VOS_THREADS_H @@ -34,10 +33,6 @@ \brief virtual Operating System Services (vOSS) Threading APIs - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ /* $Header$ */ diff --git a/CORE/VOSS/inc/vos_timer.h b/CORE/VOSS/inc/vos_timer.h index 1a2ab6d988c7..dc3775611132 100644 --- a/CORE/VOSS/inc/vos_timer.h +++ b/CORE/VOSS/inc/vos_timer.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined( __VOS_TIMER_H ) #define __VOS_TIMER_H @@ -36,10 +35,6 @@ Definitions for vOSS Timer services - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ /* $Header$ */ diff --git a/CORE/VOSS/inc/vos_trace.h b/CORE/VOSS/inc/vos_trace.h index 0a388185bece..8c6ba4b87cbb 100644 --- a/CORE/VOSS/inc/vos_trace.h +++ b/CORE/VOSS/inc/vos_trace.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined( __VOS_TRACE_H ) #define __VOS_TRACE_H @@ -36,10 +35,6 @@ Trace, logging, and debugging definitions and APIs - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ /* $Header$ */ diff --git a/CORE/VOSS/inc/vos_types.h b/CORE/VOSS/inc/vos_types.h index 1872f7b28140..feb4b300d08c 100644 --- a/CORE/VOSS/inc/vos_types.h +++ b/CORE/VOSS/inc/vos_types.h @@ -1,5 +1,3 @@ -#if !defined( __VOS_TYPES_H ) -#define __VOS_TYPES_H /* * Copyright (c) 2013, The Linux Foundation. All rights reserved. * @@ -26,8 +24,8 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - - +#if !defined( __VOS_TYPES_H ) +#define __VOS_TYPES_H /**========================================================================= \file vos_Types.h @@ -35,9 +33,6 @@ Basic type definitions - Copyright 2008 (c) Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary. ========================================================================*/ /* $Header$ */ diff --git a/CORE/VOSS/inc/vos_utils.h b/CORE/VOSS/inc/vos_utils.h index 123f5d7fe742..c3f0aba1cc33 100644 --- a/CORE/VOSS/inc/vos_utils.h +++ b/CORE/VOSS/inc/vos_utils.h @@ -24,7 +24,8 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - +/* + * */ #if !defined( __VOS_UTILS_H ) #define __VOS_UTILS_H @@ -36,10 +37,6 @@ Various utility functions - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ /* $Header$ */ diff --git a/CORE/VOSS/inc/wcnss_api.h b/CORE/VOSS/inc/wcnss_api.h index 0baa2a4dec80..b5bc45e02506 100644 --- a/CORE/VOSS/inc/wcnss_api.h +++ b/CORE/VOSS/inc/wcnss_api.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef _WCNSS_API_H_ #define _WCNSS_API_H_ diff --git a/CORE/VOSS/inc/wlan_hdd_misc.h b/CORE/VOSS/inc/wlan_hdd_misc.h index b418ff5b682b..99a4cf61b5da 100644 --- a/CORE/VOSS/inc/wlan_hdd_misc.h +++ b/CORE/VOSS/inc/wlan_hdd_misc.h @@ -24,8 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - - #ifndef WLAN_HDD_MISC_H #define WLAN_HDD_MISC_H diff --git a/CORE/VOSS/inc/wlan_nv_parser.h b/CORE/VOSS/inc/wlan_nv_parser.h index cf6c5eb13194..1b0c6016482f 100644 --- a/CORE/VOSS/inc/wlan_nv_parser.h +++ b/CORE/VOSS/inc/wlan_nv_parser.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined __WLAN_NV_PARSER_H #define __WLAN_NV_PARSER_H diff --git a/CORE/VOSS/inc/wlan_nv_parser_internal.h b/CORE/VOSS/inc/wlan_nv_parser_internal.h index b84d54b1fc90..d1f2234ba10e 100644 --- a/CORE/VOSS/inc/wlan_nv_parser_internal.h +++ b/CORE/VOSS/inc/wlan_nv_parser_internal.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined _WLAN_NV_PARSER_INTERNAL_H #define _WLAN_NV_PARSER_INTERNAL_H diff --git a/CORE/VOSS/inc/wlan_nv_stream.h b/CORE/VOSS/inc/wlan_nv_stream.h index 4535c7aeec96..92473eba7f97 100644 --- a/CORE/VOSS/inc/wlan_nv_stream.h +++ b/CORE/VOSS/inc/wlan_nv_stream.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined _WLAN_NV_STREAM_H #define _WLAN_NV_STREAM_H diff --git a/CORE/VOSS/inc/wlan_nv_template_api.h b/CORE/VOSS/inc/wlan_nv_template_api.h index 1752eab5f193..a1ddb61f42a9 100644 --- a/CORE/VOSS/inc/wlan_nv_template_api.h +++ b/CORE/VOSS/inc/wlan_nv_template_api.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined _WLAN_NV_TEMPLATE_API_H #define _WLAN_NV_TEMPLATE_API_H diff --git a/CORE/VOSS/inc/wlan_nv_template_builtin.h b/CORE/VOSS/inc/wlan_nv_template_builtin.h index 696468a36084..7abf0e9623eb 100644 --- a/CORE/VOSS/inc/wlan_nv_template_builtin.h +++ b/CORE/VOSS/inc/wlan_nv_template_builtin.h @@ -1,4 +1,3 @@ - /* * Copyright (c) 2013, The Linux Foundation. All rights reserved. * diff --git a/CORE/VOSS/inc/wlan_nv_template_internal.h b/CORE/VOSS/inc/wlan_nv_template_internal.h index b66fc24229f3..3e41907a93df 100644 --- a/CORE/VOSS/inc/wlan_nv_template_internal.h +++ b/CORE/VOSS/inc/wlan_nv_template_internal.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined _WLAN_NV_TEMPLATE_INTERNAL_H #define _WLAN_NV_TEMPLATE_INTERNAL_H diff --git a/CORE/VOSS/inc/wlan_nv_types.h b/CORE/VOSS/inc/wlan_nv_types.h index d5c6451142fe..78ba61fdb8ba 100644 --- a/CORE/VOSS/inc/wlan_nv_types.h +++ b/CORE/VOSS/inc/wlan_nv_types.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined __WLAN_NV_TYPES_H #define __WLAN_NV_TYPES_H diff --git a/CORE/VOSS/src/vos_api.c b/CORE/VOSS/src/vos_api.c index 1d14be1ea0b5..ca735ecaa54f 100644 --- a/CORE/VOSS/src/vos_api.c +++ b/CORE/VOSS/src/vos_api.c @@ -24,17 +24,12 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /**========================================================================= \file vos_api.c \brief Stub file for all virtual Operating System Services (vOSS) APIs - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ /*=========================================================================== @@ -344,6 +339,7 @@ VOS_STATUS vos_open( v_CONTEXT_t *pVosContext, v_SIZE_t hddContextSize ) scn = vos_get_context(VOS_MODULE_ID_HIF, gpVosContext); scn->enableuartprint = pHddCtx->cfg_ini->enablefwprint; scn->enablefwlog = pHddCtx->cfg_ini->enablefwlog; + scn->max_no_of_peers = pHddCtx->cfg_ini->maxNumberOfPeers; /* Initialize BMI and Download firmware */ if (bmi_download_firmware(scn)) { @@ -393,6 +389,18 @@ VOS_STATUS vos_open( v_CONTEXT_t *pVosContext, v_SIZE_t hddContextSize ) pHddCtx->cfg_ini->enablePowersaveOffload; macOpenParms.wowEnable = pHddCtx->cfg_ini->wowEnable; macOpenParms.maxWoWFilters = pHddCtx->cfg_ini->maxWoWFilters; + /* Here olIniInfo is used to store ini status of arp offload + * ns offload and others. Currently 1st bit is used for arp + * off load and 2nd bit for ns offload currently, rest bits are unused + */ +#if defined (QCA_WIFI_2_0) && \ + !defined (QCA_WIFI_ISOC) + if ( pHddCtx->cfg_ini->fhostArpOffload) + macOpenParms.olIniInfo = macOpenParms.olIniInfo | 0x1; + if ( pHddCtx->cfg_ini->fhostNSOffload) + macOpenParms.olIniInfo = macOpenParms.olIniInfo | 0x2; +#endif + vStatus = WDA_open( gpVosContext, gpVosContext->pHDDContext, #if defined (QCA_WIFI_2_0) && \ !defined (QCA_WIFI_ISOC) diff --git a/CORE/VOSS/src/vos_diag.c b/CORE/VOSS/src/vos_diag.c index 153974c1108d..e4aec09d2c5e 100644 --- a/CORE/VOSS/src/vos_diag.c +++ b/CORE/VOSS/src/vos_diag.c @@ -25,17 +25,12 @@ * to the Linux Foundation. */ - /*============================================================================ FILE: vos_diag.c OVERVIEW: This source file contains definitions for vOS diag APIs DEPENDENCIES: - - Copyright (c) 2007 Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ============================================================================*/ #include "vos_types.h" diff --git a/CORE/VOSS/src/vos_event.c b/CORE/VOSS/src/vos_event.c index d01b4e7042b1..4e5832bec0e9 100644 --- a/CORE/VOSS/src/vos_event.c +++ b/CORE/VOSS/src/vos_event.c @@ -25,7 +25,6 @@ * to the Linux Foundation. */ - /*============================================================================ FILE: vos_event.c @@ -36,9 +35,6 @@ DEPENDENCIES: - Copyright (c) 2007 Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ============================================================================*/ /*============================================================================ diff --git a/CORE/VOSS/src/vos_getBin.c b/CORE/VOSS/src/vos_getBin.c index 7e73cea77091..036ea5699f8c 100644 --- a/CORE/VOSS/src/vos_getBin.c +++ b/CORE/VOSS/src/vos_getBin.c @@ -24,11 +24,13 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /**============================================================================= vos_getBin.c \brief Description... + Copyright (c) 2012-2013 Qualcomm Atheros, Inc. + All Rights Reserved. + Qualcomm Atheros Confidential and Proprietary. ==============================================================================*/ /* $HEADER$ */ /**----------------------------------------------------------------------------- diff --git a/CORE/VOSS/src/vos_list.c b/CORE/VOSS/src/vos_list.c index 66dd6e22671c..6de0cd2f5fc8 100644 --- a/CORE/VOSS/src/vos_list.c +++ b/CORE/VOSS/src/vos_list.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /**============================================================================= vos_list.c @@ -33,11 +32,6 @@ Description... - - Copyright 2008 (c) Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary. - ==============================================================================**/ /* $HEADER$ */ diff --git a/CORE/VOSS/src/vos_lock.c b/CORE/VOSS/src/vos_lock.c index 56817fd3fe58..b7f6f4f31e83 100644 --- a/CORE/VOSS/src/vos_lock.c +++ b/CORE/VOSS/src/vos_lock.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /*============================================================================ FILE: vos_lock.c @@ -35,9 +34,6 @@ DEPENDENCIES: - Copyright (c) 2007 Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ============================================================================*/ /*============================================================================ @@ -477,3 +473,89 @@ VOS_STATUS vos_spin_lock_destroy(vos_spin_lock_t *pLock) return VOS_STATUS_SUCCESS; } + +/*-------------------------------------------------------------------------- + + \brief vos_wake_lock_init() - initializes a vOSS wake lock + + \param pLock - the wake lock to initialize + name - wakelock name + + \return VOS_STATUS_SUCCESS - wake lock was successfully initialized and + is ready to be used. + --------------------------------------------------------------------------*/ +VOS_STATUS vos_wake_lock_init(vos_wake_lock_t *pLock, const char *name) +{ +#ifdef WLAN_OPEN_SOURCE + wake_lock_init(pLock, WAKE_LOCK_SUSPEND, name); +#endif + return VOS_STATUS_SUCCESS; +} + +/*-------------------------------------------------------------------------- + + \brief vos_wake_lock_acquire() - acquires a wake lock + + \param pLock - the wake lock to acquire + + \return VOS_STATUS_SUCCESS - the wake lock was successfully acquired + + ------------------------------------------------------------------------*/ +VOS_STATUS vos_wake_lock_acquire(vos_wake_lock_t *pLock) +{ +#ifdef WLAN_OPEN_SOURCE + wake_lock(pLock); +#endif + return VOS_STATUS_SUCCESS; +} + +/*-------------------------------------------------------------------------- + + \brief vos_wake_lock_timeout_acquire() - acquires a wake lock with a timeout + + \param pLock - the wake lock to acquire + + \return VOS_STATUS_SUCCESS - the wake lock was successfully acquired + + ------------------------------------------------------------------------*/ +VOS_STATUS vos_wake_lock_timeout_acquire(vos_wake_lock_t *pLock, v_U32_t msec) +{ +#ifdef WLAN_OPEN_SOURCE + wake_lock_timeout(pLock, msecs_to_jiffies(msec)); +#endif + return VOS_STATUS_SUCCESS; +} + +/*-------------------------------------------------------------------------- + + \brief vos_wake_lock_release() - releases a wake lock + + \param pLock - the wake lock to release + + \return VOS_STATUS_SUCCESS - the lock was successfully released + + ------------------------------------------------------------------------*/ +VOS_STATUS vos_wake_lock_release(vos_wake_lock_t *pLock) +{ +#ifdef WLAN_OPEN_SOURCE + wake_unlock(pLock); +#endif + return VOS_STATUS_SUCCESS; +} + +/*-------------------------------------------------------------------------- + + \brief vos_wake_lock_destroy() - destroys a wake lock + + \param pLock - the wake lock to destroy + + \return VOS_STATUS_SUCCESS - the lock was successfully destroyed + + ------------------------------------------------------------------------*/ +VOS_STATUS vos_wake_lock_destroy(vos_wake_lock_t *pLock) +{ +#ifdef WLAN_OPEN_SOURCE + wake_lock_destroy(pLock); +#endif + return VOS_STATUS_SUCCESS; +} diff --git a/CORE/VOSS/src/vos_memory.c b/CORE/VOSS/src/vos_memory.c index 48cf07f9b5b7..f1e09739262d 100644 --- a/CORE/VOSS/src/vos_memory.c +++ b/CORE/VOSS/src/vos_memory.c @@ -24,16 +24,11 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - - /*=========================================================================== @file vos_memory.c @brief Virtual Operating System Services Memory API - Copyright (c) 2008 Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ===========================================================================*/ /*=========================================================================== diff --git a/CORE/VOSS/src/vos_mq.c b/CORE/VOSS/src/vos_mq.c index a93a57167abd..9859ff10e1e0 100644 --- a/CORE/VOSS/src/vos_mq.c +++ b/CORE/VOSS/src/vos_mq.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /**========================================================================= \file vos_mq.c @@ -33,10 +32,6 @@ Message Queue Definitions and API - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ /* $Header$ */ diff --git a/CORE/VOSS/src/vos_nvitem.c b/CORE/VOSS/src/vos_nvitem.c index 84531890ebbd..184e8f7240a1 100644 --- a/CORE/VOSS/src/vos_nvitem.c +++ b/CORE/VOSS/src/vos_nvitem.c @@ -24,14 +24,10 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /*============================================================================ FILE: vos_nvitem.c OVERVIEW: This source file contains definitions for vOS NV Item APIs DEPENDENCIES: NV, remote API client, WinCE REX - Copyright (c) 2008 Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ============================================================================*/ /*============================================================================ EDIT HISTORY FOR MODULE @@ -53,6 +49,8 @@ #include "wlan_nv_parser.h" #include "wlan_hdd_main.h" #include +#include "regdomain.h" +#include "regdomain_common.h" #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,9,0)) #define IEEE80211_CHAN_NO_80MHZ 1<<7 @@ -89,6 +87,96 @@ static v_BOOL_t crda_regulatory_run_time_entry_valid = VOS_FALSE; #define DEFAULT_NV_VALIDITY_BITMAP 0xFFFFFFFF #define MAGIC_NUMBER 0xCAFEBABE +/* + * This is a set of common rules used by our world regulatory domains. + * We have 12 world regulatory domains. To save space we consolidate + * the regulatory domains in 5 structures by frequency and change + * the flags on our reg_notifier() on a case by case basis. + */ + +/* Only these channels all allow active scan on all world regulatory domains */ +#define REG_RULE_2GHZ_CH01_11 REG_RULE(2412-10, 2462+10, 40, 0, 20, 0) + +/* We enable active scan on these a case by case basis by regulatory domain */ +#define REG_RULE_2GHZ_CH12_13 REG_RULE(2467-10, 2472+10, 40, 0, 20,\ + NL80211_RRF_PASSIVE_SCAN) +#define REG_RULE_2GHZ_CH14 REG_RULE(2484-10, 2484+10, 40, 0, 20,\ + NL80211_RRF_PASSIVE_SCAN | NL80211_RRF_NO_OFDM) + +/* We allow IBSS on these on a case by case basis by regulatory domain */ +#define REG_RULE_5GHZ_5150_5350 REG_RULE(5150-10, 5350+10, 40, 0, 30,\ + NL80211_RRF_PASSIVE_SCAN | NL80211_RRF_NO_IBSS) +#define REG_RULE_5GHZ_5470_5850 REG_RULE(5470-10, 5850+10, 40, 0, 30,\ + NL80211_RRF_PASSIVE_SCAN | NL80211_RRF_NO_IBSS) +#define REG_RULE_5GHZ_5725_5850 REG_RULE(5725-10, 5850+10, 40, 0, 30,\ + NL80211_RRF_PASSIVE_SCAN | NL80211_RRF_NO_IBSS) + +#define REG_RULE_2GHZ_ALL REG_RULE_2GHZ_CH01_11, \ + REG_RULE_2GHZ_CH12_13, \ +REG_RULE_2GHZ_CH14 + +#define REG_RULE_5GHZ_ALL REG_RULE_5GHZ_5150_5350, \ + REG_RULE_5GHZ_5470_5850 + +/* This one skips what we call "mid band" */ +#define REG_RULE_5GHZ_NO_MIDBAND REG_RULE_5GHZ_5150_5350, \ + REG_RULE_5GHZ_5725_5850 +#define WORLD_SKU_MASK 0x00F0 +#define WORLD_SKU_PREFIX 0x0060 + +/* Can be used for: + * 0x60, 0x61, 0x62 */ +static const struct ieee80211_regdomain vos_world_regdom_60_61_62 = { + .n_reg_rules = 5, + .alpha2 = "99", + .reg_rules = { + REG_RULE_2GHZ_ALL, + REG_RULE_5GHZ_ALL, + } +}; + +/* Can be used by 0x63 and 0x65 */ +static const struct ieee80211_regdomain vos_world_regdom_63_65 = { + .n_reg_rules = 4, + .alpha2 = "99", + .reg_rules = { + REG_RULE_2GHZ_CH01_11, + REG_RULE_2GHZ_CH12_13, + REG_RULE_5GHZ_NO_MIDBAND, + } +}; + +/* Can be used by 0x64 only */ +static const struct ieee80211_regdomain vos_world_regdom_64 = { + .n_reg_rules = 3, + .alpha2 = "99", + .reg_rules = { + REG_RULE_2GHZ_CH01_11, + REG_RULE_5GHZ_NO_MIDBAND, + } +}; + +/* Can be used by 0x66 and 0x69 */ +static const struct ieee80211_regdomain vos_world_regdom_66_69 = { + .n_reg_rules = 3, + .alpha2 = "99", + .reg_rules = { + REG_RULE_2GHZ_CH01_11, + REG_RULE_5GHZ_ALL, + } +}; + +/* Can be used by 0x67, 0x68, 0x6A and 0x6C */ +static const struct ieee80211_regdomain vos_world_regdom_67_68_6A_6C = { + .n_reg_rules = 4, + .alpha2 = "99", + .reg_rules = { + REG_RULE_2GHZ_CH01_11, + REG_RULE_2GHZ_CH12_13, + REG_RULE_5GHZ_ALL, + } +}; + /*---------------------------------------------------------------------------- * Type Declarations * -------------------------------------------------------------------------*/ @@ -277,13 +365,8 @@ static CountryInfoTable_t countryInfoTable = { { REGDOMAIN_FCC, {'U', 'S'}}, //USA - must be the first country code { REGDOMAIN_ETSI, {'A', 'D'}}, //ANDORRA -#ifdef FEATURE_CESIUM_PROPRIETARY - { REGDOMAIN_WORLD, {'A', 'E'}}, //UAE - { REGDOMAIN_APAC, {'A', 'F'}}, //AFGHANISTAN -#else { REGDOMAIN_ETSI, {'A', 'E'}}, //UAE { REGDOMAIN_N_AMER_EXC_FCC, {'A', 'F'}}, //AFGHANISTAN -#endif { REGDOMAIN_WORLD, {'A', 'G'}}, //ANTIGUA AND BARBUDA { REGDOMAIN_FCC, {'A', 'I'}}, //ANGUILLA { REGDOMAIN_ETSI, {'A', 'L'}}, //ALBANIA @@ -297,11 +380,7 @@ static CountryInfoTable_t countryInfoTable = { REGDOMAIN_WORLD, {'A', 'U'}}, //AUSTRALIA { REGDOMAIN_ETSI, {'A', 'W'}}, //ARUBA { REGDOMAIN_WORLD, {'A', 'X'}}, //ALAND ISLANDS -#ifdef FEATURE_CESIUM_PROPRIETARY - { REGDOMAIN_WORLD, {'A', 'Z'}}, //AZERBAIJAN -#else { REGDOMAIN_N_AMER_EXC_FCC, {'A', 'Z'}}, //AZERBAIJAN -#endif { REGDOMAIN_ETSI, {'B', 'A'}}, //BOSNIA AND HERZEGOVINA { REGDOMAIN_APAC, {'B', 'B'}}, //BARBADOS { REGDOMAIN_HI_5GHZ, {'B', 'D'}}, //BANGLADESH @@ -347,11 +426,7 @@ static CountryInfoTable_t countryInfoTable = { REGDOMAIN_ETSI, {'D', 'Z'}}, //ALGERIA { REGDOMAIN_APAC, {'E', 'C'}}, //ECUADOR { REGDOMAIN_ETSI, {'E', 'E'}}, //ESTONIA -#ifdef FEATURE_CESIUM_PROPRIETARY - { REGDOMAIN_APAC, {'E', 'G'}}, //EGYPT -#else { REGDOMAIN_N_AMER_EXC_FCC, {'E', 'G'}}, //EGYPT -#endif { REGDOMAIN_WORLD, {'E', 'H'}}, //WESTERN SAHARA { REGDOMAIN_NO_5GHZ, {'E', 'R'}}, //ERITREA { REGDOMAIN_ETSI, {'E', 'S'}}, //SPAIN @@ -394,11 +469,7 @@ static CountryInfoTable_t countryInfoTable = { REGDOMAIN_WORLD, {'I', 'M'}}, //ISLE OF MAN { REGDOMAIN_APAC, {'I', 'N'}}, //INDIA { REGDOMAIN_WORLD, {'I', 'O'}}, //BRITISH INDIAN OCEAN TERRITORY -#ifdef FEATURE_CESIUM_PROPRIETARY - { REGDOMAIN_ETSI, {'I', 'Q'}}, //IRAQ -#else { REGDOMAIN_NO_5GHZ, {'I', 'Q'}}, //IRAQ -#endif { REGDOMAIN_HI_5GHZ, {'I', 'R'}}, //IRAN, ISLAMIC REPUBLIC OF { REGDOMAIN_ETSI, {'I', 'S'}}, //ICELAND { REGDOMAIN_ETSI, {'I', 'T'}}, //ITALY @@ -437,11 +508,7 @@ static CountryInfoTable_t countryInfoTable = { REGDOMAIN_ETSI, {'L', 'U'}}, //LUXEMBOURG { REGDOMAIN_ETSI, {'L', 'V'}}, //LATVIA { REGDOMAIN_NO_5GHZ, {'L', 'Y'}}, //LIBYAN ARAB JAMAHIRIYA -#ifdef FEATURE_CESIUM_PROPRIETARY - { REGDOMAIN_N_AMER_EXC_FCC, {'M', 'A'}}, //MOROCCO -#else { REGDOMAIN_APAC, {'M', 'A'}}, //MOROCCO -#endif { REGDOMAIN_ETSI, {'M', 'C'}}, //MONACO { REGDOMAIN_ETSI, {'M', 'D'}}, //MOLDOVA, REPUBLIC OF { REGDOMAIN_ETSI, {'M', 'E'}}, //MONTENEGRO @@ -547,11 +614,7 @@ static CountryInfoTable_t countryInfoTable = { REGDOMAIN_N_AMER_EXC_FCC, {'W', 'S'}}, //SOMOA { REGDOMAIN_NO_5GHZ, {'Y', 'E'}}, //YEMEN { REGDOMAIN_ETSI, {'Y', 'T'}}, //MAYOTTE -#ifdef FEATURE_CESIUM_PROPRIETARY - { REGDOMAIN_ETSI, {'Z', 'A'}}, //SOUTH AFRICA -#else { REGDOMAIN_WORLD, {'Z', 'A'}}, //SOUTH AFRICA -#endif { REGDOMAIN_APAC, {'Z', 'M'}}, //ZAMBIA { REGDOMAIN_ETSI, {'Z', 'W'}}, //ZIMBABWE } @@ -740,6 +803,277 @@ fail: return vosStatus; } +static inline bool is_wwr_sku(u16 regd) +{ + return ((regd & COUNTRY_ERD_FLAG) != COUNTRY_ERD_FLAG) && + (((regd & WORLD_SKU_MASK) == WORLD_SKU_PREFIX) || + (regd == WORLD)); +} + +bool is_world_regd(u_int32_t regd) +{ + return is_wwr_sku(regd & ~WORLDWIDE_ROAMING_FLAG); +} + +static const struct ieee80211_regdomain *vos_default_world_regdomain(void) +{ + /* this is the most restrictive */ + return &vos_world_regdom_64; +} + +static const +struct ieee80211_regdomain *vos_world_regdomain(struct regulatory *reg) +{ + REG_DMN_PAIR_MAPPING *regpair; + regpair = (REG_DMN_PAIR_MAPPING *)reg->regpair; + switch (regpair->regDmnEnum) { + case 0x60: + case 0x61: + case 0x62: + return &vos_world_regdom_60_61_62; + case 0x63: + case 0x65: + return &vos_world_regdom_63_65; + case 0x64: + return &vos_world_regdom_64; + case 0x66: + case 0x69: + return &vos_world_regdom_66_69; + case 0x67: + case 0x68: + case 0x6A: + case 0x6C: + return &vos_world_regdom_67_68_6A_6C; + default: + WARN_ON(1); + return vos_default_world_regdomain(); + } +} + + +/* Frequency is one where radar detection is required */ +static bool vos_is_radar_freq(u16 center_freq) +{ + return (center_freq >= 5260 && center_freq <= 5700); +} + +/* + * N.B: These exception rules do not apply radar freqs. + * + * - We enable adhoc (or beaconing) if allowed by 11d + * - We enable active scan if the channel is allowed by 11d + * - If no country IE has been processed and a we determine we have + * received a beacon on a channel we can enable active scan and + * adhoc (or beaconing). + */ +static void +vos_reg_apply_beaconing_flags(struct wiphy *wiphy, + enum nl80211_reg_initiator initiator) +{ + enum ieee80211_band band; + struct ieee80211_supported_band *sband; + const struct ieee80211_reg_rule *reg_rule; + struct ieee80211_channel *ch; + unsigned int i; + + for (band = 0; band < IEEE80211_NUM_BANDS; band++) { + + if (!wiphy->bands[band]) + continue; + + sband = wiphy->bands[band]; + + for (i = 0; i < sband->n_channels; i++) { + + ch = &sband->channels[i]; + + if (vos_is_radar_freq(ch->center_freq) || + (ch->flags & IEEE80211_CHAN_RADAR)) + continue; + + if (initiator == NL80211_REGDOM_SET_BY_COUNTRY_IE) { + reg_rule = freq_reg_info(wiphy, MHZ_TO_KHZ(ch->center_freq)); + if (IS_ERR(reg_rule)) + continue; + /* + * If 11d had a rule for this channel ensure + * we enable adhoc/beaconing if it allows us to + * use it. Note that we would have disabled it + * by applying our static world regdomain by + * default during init, prior to calling our + * regulatory_hint(). + */ + if (!(reg_rule->flags & + NL80211_RRF_NO_IBSS)) + ch->flags &= + ~IEEE80211_CHAN_NO_IBSS; + if (!(reg_rule->flags & + NL80211_RRF_PASSIVE_SCAN)) + ch->flags &= + ~IEEE80211_CHAN_PASSIVE_SCAN; + } else { + if (ch->beacon_found) + ch->flags &= ~(IEEE80211_CHAN_NO_IBSS | + IEEE80211_CHAN_PASSIVE_SCAN); + } + } + } +} + +/* Allows active scan scan on Ch 12 and 13 */ +static void +vos_reg_apply_active_scan_flags(struct wiphy *wiphy, + enum nl80211_reg_initiator initiator) +{ + struct ieee80211_supported_band *sband; + struct ieee80211_channel *ch; + const struct ieee80211_reg_rule *reg_rule; + + sband = wiphy->bands[IEEE80211_BAND_2GHZ]; + if (!sband) + return; + + /* + * If no country IE has been received always enable active scan + * on these channels. This is only done for specific regulatory SKUs + */ + if (initiator != NL80211_REGDOM_SET_BY_COUNTRY_IE) { + ch = &sband->channels[11]; /* CH 12 */ + if (ch->flags & IEEE80211_CHAN_PASSIVE_SCAN) + ch->flags &= ~IEEE80211_CHAN_PASSIVE_SCAN; + ch = &sband->channels[12]; /* CH 13 */ + if (ch->flags & IEEE80211_CHAN_PASSIVE_SCAN) + ch->flags &= ~IEEE80211_CHAN_PASSIVE_SCAN; + return; + } + + /* + * If a country IE has been received check its rule for this + * channel first before enabling active scan. The passive scan + * would have been enforced by the initial processing of our + * custom regulatory domain. + */ + + ch = &sband->channels[11]; /* CH 12 */ + reg_rule = freq_reg_info(wiphy, MHZ_TO_KHZ(ch->center_freq)); + if (!IS_ERR(reg_rule)) { + if (!(reg_rule->flags & NL80211_RRF_PASSIVE_SCAN)) + if (ch->flags & IEEE80211_CHAN_PASSIVE_SCAN) + ch->flags &= ~IEEE80211_CHAN_PASSIVE_SCAN; + } + + ch = &sband->channels[12]; /* CH 13 */ + reg_rule = freq_reg_info(wiphy, MHZ_TO_KHZ(ch->center_freq)); + if (!IS_ERR(reg_rule)) { + if (!(reg_rule->flags & NL80211_RRF_PASSIVE_SCAN)) + if (ch->flags & IEEE80211_CHAN_PASSIVE_SCAN) + ch->flags &= ~IEEE80211_CHAN_PASSIVE_SCAN; + } +} + +/* Always apply Radar/DFS rules on freq range 5260 MHz - 5700 MHz */ +static void vos_reg_apply_radar_flags(struct wiphy *wiphy) +{ + struct ieee80211_supported_band *sband; + struct ieee80211_channel *ch; + unsigned int i; + + if (!wiphy->bands[IEEE80211_BAND_5GHZ]) + return; + + sband = wiphy->bands[IEEE80211_BAND_5GHZ]; + + for (i = 0; i < sband->n_channels; i++) { + ch = &sband->channels[i]; + if (!vos_is_radar_freq(ch->center_freq)) + continue; + /* We always enable radar detection/DFS on this + * frequency range. Additionally we also apply on + * this frequency range: + * - If STA mode does not yet have DFS supports disable + * active scanning + * - If adhoc mode does not support DFS yet then + * disable adhoc in the frequency. + * - If AP mode does not yet support radar detection/DFS + * do not allow AP mode + */ + if (!(ch->flags & IEEE80211_CHAN_DISABLED)) + ch->flags |= IEEE80211_CHAN_RADAR | + IEEE80211_CHAN_NO_IBSS | + IEEE80211_CHAN_PASSIVE_SCAN; + } +} + +static void vos_reg_apply_world_flags(struct wiphy *wiphy, + enum nl80211_reg_initiator initiator, + struct regulatory *reg) +{ + REG_DMN_PAIR_MAPPING *regpair; + regpair = (REG_DMN_PAIR_MAPPING *)reg->regpair; + switch (regpair->regDmnEnum) { + case 0x60: + case 0x63: + case 0x66: + case 0x67: + case 0x6C: + vos_reg_apply_beaconing_flags(wiphy, initiator); + break; + case 0x68: + vos_reg_apply_beaconing_flags(wiphy, initiator); + vos_reg_apply_active_scan_flags(wiphy, initiator); + break; + } +} + +static int regd_init_wiphy(struct regulatory *reg, + struct wiphy *wiphy) +{ + const struct ieee80211_regdomain *regd; + + if (is_world_regd(reg->reg_domain)) { + regd = vos_world_regdomain(reg); + wiphy->flags |= WIPHY_FLAG_CUSTOM_REGULATORY; + } else { + regd = vos_default_world_regdomain(); + wiphy->flags |= WIPHY_FLAG_STRICT_REGULATORY; + } + wiphy_apply_custom_regulatory(wiphy, regd); + vos_reg_apply_radar_flags(wiphy); + vos_reg_apply_world_flags(wiphy, NL80211_REGDOM_SET_BY_DRIVER, reg); + return 0; +} + +static int reg_init_from_eeprom(struct regulatory *reg, + struct wiphy *wiphy) +{ + int ret_val = 0; + ret_val = regdmn_get_country_alpha2(reg); + if (ret_val) { + adf_os_print(KERN_ERR "Error in getting country code\n"); + return ret_val; + } + + /* update default country code */ + pnvEFSTable->halnv.tables.defaultCountryTable.countryCode[0] = + reg->alpha2[0]; + pnvEFSTable->halnv.tables.defaultCountryTable.countryCode[1] = + reg->alpha2[1]; + + regd_init_wiphy(reg, wiphy); + + return ret_val; +} + +static void vos_update_reg_info(hdd_context_t *pHddCtx) +{ + u_int32_t country_code; + country_code = regdmn_find_ctry_by_name(pHddCtx->reg.alpha2); + pHddCtx->reg.reg_domain = COUNTRY_ERD_FLAG; + pHddCtx->reg.reg_domain |= country_code; + regdmn_get_country_alpha2(&pHddCtx->reg); + return; +} + VOS_STATUS vos_nv_open(void) { VOS_STATUS status = VOS_STATUS_SUCCESS; @@ -2691,7 +3025,7 @@ VOS_STATUS vos_nv_getRegDomainFromCountryCode( v_REGDOMAIN_t *pRegDomain, (" get country information from kernel db")); - if (COUNTRY_NV == source) + if (COUNTRY_INIT == source) { INIT_COMPLETION(pHddCtx->linux_reg_req); regulatory_hint(wiphy, country_code); @@ -2903,14 +3237,16 @@ static int create_linux_regulatory_entry_from_regd(struct wiphy *wiphy, /* create_linux_regulatory_entry to populate internal structures from wiphy */ static int create_linux_regulatory_entry(struct wiphy *wiphy, - struct regulatory_request *request, v_U8_t nBandCapability) { int i, j, m; int k = 0, n = 0; v_CONTEXT_t pVosContext = NULL; hdd_context_t *pHddCtx = NULL; - +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,9,0)) + int err; +#endif + const struct ieee80211_reg_rule *reg_rule; pVosContext = vos_get_global_context(VOS_MODULE_ID_SYS, NULL); if (NULL != pVosContext) @@ -2952,7 +3288,7 @@ static int create_linux_regulatory_entry(struct wiphy *wiphy, VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "error: wiphy->bands is NULL, i = %d\n", i); - return -1; + continue; } /* internal channels[] is one continous array for both 2G and 5G bands @@ -2974,6 +3310,34 @@ static int create_linux_regulatory_entry(struct wiphy *wiphy, if (n == -1) return -1; + /* If the regulatory rules for a country do not explicilty + * require a passive scan on a frequency, lift the passive + * scan restriction + */ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0)) + reg_rule = freq_reg_info(wiphy, + MHZ_TO_KHZ(wiphy->bands[i]->channels[j].center_freq)); +#else + err = freq_reg_info(wiphy, + MHZ_TO_KHZ(wiphy->bands[i]->channels[j].center_freq), + 0, ®_rule); +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0)) + if (!IS_ERR(reg_rule)) +#else + if (0 == err) +#endif + { + if (!(reg_rule->flags & NL80211_RRF_PASSIVE_SCAN)) + { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO, + "%s: Remove passive scan restriction for %u", + __func__, wiphy->bands[i]->channels[j].center_freq); + wiphy->bands[i]->channels[j].flags &= ~IEEE80211_CHAN_PASSIVE_SCAN; + } + } + if (wiphy->bands[i]->channels[j].flags & IEEE80211_CHAN_DISABLED) { if (pnvEFSTable == NULL) @@ -2987,7 +3351,9 @@ static int create_linux_regulatory_entry(struct wiphy *wiphy, pnvEFSTable->halnv.tables.regDomains[temp_reg_domain].channels[n].enabled = NV_CHANNEL_DISABLE; } - else if (wiphy->bands[i]->channels[j].flags & IEEE80211_CHAN_RADAR) + /* nv cannot distinguish between DFS and passive channels */ + else if (wiphy->bands[i]->channels[j].flags & + (IEEE80211_CHAN_RADAR | IEEE80211_CHAN_PASSIVE_SCAN)) { pnvEFSTable->halnv.tables.regDomains[temp_reg_domain].channels[k].enabled = NV_CHANNEL_DFS; @@ -3059,7 +3425,6 @@ static int create_linux_regulatory_entry(struct wiphy *wiphy, return 0; } - /* * Function: wlan_hdd_linux_reg_notifier * This function is called from cfg80211 core to provide regulatory settings @@ -3098,81 +3463,90 @@ int wlan_hdd_linux_reg_notifier(struct wiphy *wiphy, /* first check if this callback is in response to the driver callback */ - if (request->initiator == NL80211_REGDOM_SET_BY_DRIVER) + switch (request->initiator) { + case NL80211_REGDOM_SET_BY_DRIVER: - nBandCapability = pHddCtx->cfg_ini->nBandCapability; - isVHT80Allowed = pHddCtx->isVHT80Allowed; - if (create_linux_regulatory_entry(wiphy, request, pHddCtx->cfg_ini->nBandCapability) == 0) - { + nBandCapability = pHddCtx->cfg_ini->nBandCapability; + isVHT80Allowed = pHddCtx->isVHT80Allowed; + if (create_linux_regulatory_entry(wiphy, pHddCtx->cfg_ini->nBandCapability) == 0) + { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO, - (" regulatory entry created")); - } - if (pHddCtx->isVHT80Allowed != isVHT80Allowed) - { - hdd_checkandupdate_phymode( pHddCtx); - } + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO, + (" regulatory entry created")); + } + if (pHddCtx->isVHT80Allowed != isVHT80Allowed) + { + hdd_checkandupdate_phymode( pHddCtx); + } - complete(&pHddCtx->linux_reg_req); - } + complete(&pHddCtx->linux_reg_req); + break; - else if (request->initiator == NL80211_REGDOM_SET_BY_USER || - request->initiator == NL80211_REGDOM_SET_BY_CORE) - { + case NL80211_REGDOM_SET_BY_USER: + case NL80211_REGDOM_SET_BY_CORE: - /* first lookup the country in the local database */ + /* first lookup the country in the local database */ + country_code[0] = request->alpha2[0]; + country_code[1] = request->alpha2[1]; - country_code[0] = request->alpha2[0]; - country_code[1] = request->alpha2[1]; + pHddCtx->reg.alpha2[0] = request->alpha2[0]; + pHddCtx->reg.alpha2[1] = request->alpha2[1]; + vos_update_reg_info(pHddCtx); + vos_reg_apply_world_flags(wiphy, request->initiator, &pHddCtx->reg); - temp_reg_domain = REGDOMAIN_COUNT; - for (i = 0; i < countryInfoTable.countryCount && - REGDOMAIN_COUNT == temp_reg_domain; i++) - { - if (memcmp(country_code, countryInfoTable.countryInfo[i].countryCode, - VOS_COUNTRY_CODE_LEN) == 0) - { + temp_reg_domain = REGDOMAIN_COUNT; + for (i = 0; i < countryInfoTable.countryCount && + REGDOMAIN_COUNT == temp_reg_domain; i++) + { + if (memcmp(country_code, countryInfoTable.countryInfo[i].countryCode, + VOS_COUNTRY_CODE_LEN) == 0) + { /* country code is found */ /* record the temporary regulatory_domain as well */ temp_reg_domain = countryInfoTable.countryInfo[i].regDomain; break; - } - } - - if (REGDOMAIN_COUNT == temp_reg_domain) - temp_reg_domain = REGDOMAIN_WORLD; + } + } - nBandCapability = pHddCtx->cfg_ini->nBandCapability; - isVHT80Allowed = pHddCtx->isVHT80Allowed; - if (create_linux_regulatory_entry(wiphy, request, - pHddCtx->cfg_ini->nBandCapability) == 0) - { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO, - (" regulatory entry created")); + if (REGDOMAIN_COUNT == temp_reg_domain) + temp_reg_domain = REGDOMAIN_WORLD; - } - if (pHddCtx->isVHT80Allowed != isVHT80Allowed) - { - hdd_checkandupdate_phymode( pHddCtx); - } + nBandCapability = pHddCtx->cfg_ini->nBandCapability; + isVHT80Allowed = pHddCtx->isVHT80Allowed; + if (create_linux_regulatory_entry(wiphy, + pHddCtx->cfg_ini->nBandCapability) == 0) + { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO, + (" regulatory entry created")); - cur_reg_domain = temp_reg_domain; - linux_reg_cc[0] = country_code[0]; - linux_reg_cc[1] = country_code[1]; + } + if (pHddCtx->isVHT80Allowed != isVHT80Allowed) + { + hdd_checkandupdate_phymode( pHddCtx); + } - /* now pass the new country information to sme */ - if (request->alpha2[0] == '0' && request->alpha2[1] == '0') - { - sme_GenericChangeCountryCode(pHddCtx->hHal, country_code, - REGDOMAIN_COUNT); - } - else - { - sme_GenericChangeCountryCode(pHddCtx->hHal, country_code, - temp_reg_domain); - } + cur_reg_domain = temp_reg_domain; + linux_reg_cc[0] = country_code[0]; + linux_reg_cc[1] = country_code[1]; + /* now pass the new country information to sme */ + if (request->alpha2[0] == '0' && request->alpha2[1] == '0') + { + sme_GenericChangeCountryCode(pHddCtx->hHal, country_code, + REGDOMAIN_COUNT); + } + else + { + sme_GenericChangeCountryCode(pHddCtx->hHal, country_code, + temp_reg_domain); + } +#ifndef QCA_WIFI_ISOC + /* send CTL info to firmware */ + regdmn_set_regval(&pHddCtx->reg); +#endif + default: + break; } #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0)) return; @@ -3181,6 +3555,52 @@ int wlan_hdd_linux_reg_notifier(struct wiphy *wiphy, #endif } +#ifndef QCA_WIFI_ISOC +/* initialize wiphy from EEPROM */ +VOS_STATUS vos_init_wiphy_from_eeprom(void) +{ + v_CONTEXT_t pVosContext = NULL; + hdd_context_t *pHddCtx = NULL; + struct wiphy *wiphy = NULL; + + pVosContext = vos_get_global_context(VOS_MODULE_ID_SYS, NULL); + + if (!pVosContext) + return VOS_STATUS_E_EXISTS; + + pHddCtx = vos_get_context(VOS_MODULE_ID_HDD, pVosContext); + if (!pHddCtx) + { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + ("Invalid pHddCtx pointer")); + return VOS_STATUS_E_FAULT; + } + + wiphy = pHddCtx->wiphy; + + if (reg_init_from_eeprom(&pHddCtx->reg, wiphy)) + { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + ("Error during regulatory init from EEPROM")); + return VOS_STATUS_E_FAULT; + } + + if (is_world_regd(pHddCtx->reg.reg_domain)) { + temp_reg_domain = REGDOMAIN_WORLD; + if (create_linux_regulatory_entry(wiphy, + pHddCtx->cfg_ini->nBandCapability) != 0) { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + ("Error while creating regulatory entry")); + return VOS_STATUS_E_FAULT; + } + } + + /* send CTL info to firmware */ + regdmn_set_regval(&pHddCtx->reg); + + return VOS_STATUS_SUCCESS; +} +#endif /* initialize wiphy from NV.bin */ VOS_STATUS vos_init_wiphy_from_nv_bin(void) @@ -3208,6 +3628,14 @@ VOS_STATUS vos_init_wiphy_from_nv_bin(void) wiphy = pHddCtx->wiphy; + /* Update regulatory structure in HDD */ + pHddCtx->reg.alpha2[0] = + pnvEFSTable->halnv.tables.defaultCountryTable.countryCode[0]; + pHddCtx->reg.alpha2[1] = + pnvEFSTable->halnv.tables.defaultCountryTable.countryCode[1]; + + vos_update_reg_info(pHddCtx); + if (('0' == pnvEFSTable->halnv.tables.defaultCountryTable.countryCode[0]) && ('0' == pnvEFSTable->halnv.tables.defaultCountryTable.countryCode[1])) diff --git a/CORE/VOSS/src/vos_packet.c b/CORE/VOSS/src/vos_packet.c index 2554959c2d09..15fe4824e6b4 100644 --- a/CORE/VOSS/src/vos_packet.c +++ b/CORE/VOSS/src/vos_packet.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /**========================================================================= \file vos_packet.c @@ -33,10 +32,6 @@ Network Protocol packet/buffer support interfaces - Copyright 2009 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ /* $Header$ */ diff --git a/CORE/VOSS/src/vos_power.c b/CORE/VOSS/src/vos_power.c index f1205b295e0c..26ad19808e87 100644 --- a/CORE/VOSS/src/vos_power.c +++ b/CORE/VOSS/src/vos_power.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /*! @file vos_power.c @@ -38,26 +37,6 @@ */ -/*=========================================================================== - - Copyright (c) 2008 Qualcomm Technologies, Inc. All Rights Reserved - - Qualcomm Technologies Proprietary - - Export of this technology or software is regulated by the U.S. Government. - Diversion contrary to U.S. law prohibited. - - All ideas, data and information contained in or disclosed by - this document are confidential and proprietary information of - Qualcomm Technologies, Inc. and all rights therein are expressly reserved. - By accepting this material the recipient agrees that this material - and the information contained therein are held in confidence and in - trust and will not be used, copied, reproduced in whole or in part, - nor its contents revealed in any manner to others without the express - written permission of Qualcomm Technologies, Inc. - -===========================================================================*/ - /*=========================================================================== EDIT HISTORY FOR MODULE diff --git a/CORE/VOSS/src/vos_sched.c b/CORE/VOSS/src/vos_sched.c index 2cf9d7081dda..337bc4f0ba59 100644 --- a/CORE/VOSS/src/vos_sched.c +++ b/CORE/VOSS/src/vos_sched.c @@ -24,14 +24,10 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /*=========================================================================== @file vos_sched.c @brief VOS Scheduler Implementation - Copyright (c) 2011 Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ===========================================================================*/ /*=========================================================================== EDIT HISTORY FOR FILE diff --git a/CORE/VOSS/src/vos_sched.h b/CORE/VOSS/src/vos_sched.h index e05f8593a085..ca271c8489aa 100644 --- a/CORE/VOSS/src/vos_sched.h +++ b/CORE/VOSS/src/vos_sched.h @@ -24,8 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - - #if !defined( __VOS_SCHED_H ) #define __VOS_SCHED_H @@ -42,11 +40,6 @@ insights about how the scheduler implements the execution model supported by vOSS. - - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ /*=========================================================================== diff --git a/CORE/VOSS/src/vos_threads.c b/CORE/VOSS/src/vos_threads.c index 55cb04d43eaf..7e5bdb780099 100644 --- a/CORE/VOSS/src/vos_threads.c +++ b/CORE/VOSS/src/vos_threads.c @@ -24,17 +24,12 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /**========================================================================= \file vos_threads.c \brief virtual Operating System Services (vOSS) Threading APIs - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ /* $Header$ */ diff --git a/CORE/VOSS/src/vos_timer.c b/CORE/VOSS/src/vos_timer.c index d3712aeb038e..8f6c1bdcc602 100644 --- a/CORE/VOSS/src/vos_timer.c +++ b/CORE/VOSS/src/vos_timer.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /**========================================================================= \file vos_timer.c @@ -33,10 +32,6 @@ Definitions for vOSS Timer services - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ /* $Header$ */ diff --git a/CORE/VOSS/src/vos_trace.c b/CORE/VOSS/src/vos_trace.c index 2f3481c15c11..bdc9bd3e3b54 100644 --- a/CORE/VOSS/src/vos_trace.c +++ b/CORE/VOSS/src/vos_trace.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /**========================================================================= \file vos_trace.c @@ -33,10 +32,6 @@ Trace, logging, and debugging definitions and APIs - Copyright 2008,2011 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ /*=========================================================================== diff --git a/CORE/VOSS/src/vos_types.c b/CORE/VOSS/src/vos_types.c index 85b05eaae798..d27c52e74a2e 100644 --- a/CORE/VOSS/src/vos_types.c +++ b/CORE/VOSS/src/vos_types.c @@ -25,7 +25,6 @@ * to the Linux Foundation. */ - /**========================================================================= \file vos_Types.c @@ -34,10 +33,6 @@ Basic type definitions - Copyright 2008 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ /* $Header$ */ diff --git a/CORE/VOSS/src/vos_utils.c b/CORE/VOSS/src/vos_utils.c index 8a43a429935b..20b04d26cda0 100644 --- a/CORE/VOSS/src/vos_utils.c +++ b/CORE/VOSS/src/vos_utils.c @@ -24,6 +24,8 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ +/* + * */ /*============================================================================ FILE: vos_utils.c @@ -44,9 +46,6 @@ DEPENDENCIES: - Copyright (c) 2007 Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ============================================================================*/ /*============================================================================ diff --git a/CORE/VOSS/src/wlan_nv_parser.c b/CORE/VOSS/src/wlan_nv_parser.c index 2f8fd1ef80fe..18d1fd0585c6 100644 --- a/CORE/VOSS/src/wlan_nv_parser.c +++ b/CORE/VOSS/src/wlan_nv_parser.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /*=========================================================================== EDIT HISTORY FOR FILE diff --git a/CORE/VOSS/src/wlan_nv_template_builtin.c b/CORE/VOSS/src/wlan_nv_template_builtin.c index 7c284d83360c..daba563750ac 100644 --- a/CORE/VOSS/src/wlan_nv_template_builtin.c +++ b/CORE/VOSS/src/wlan_nv_template_builtin.c @@ -1,4 +1,3 @@ - /* * Copyright (c) 2013, The Linux Foundation. All rights reserved. * diff --git a/CORE/WDA/inc/legacy/halMsgApi.h b/CORE/WDA/inc/legacy/halMsgApi.h index 385a7f4b82cc..35b5675fdd33 100644 --- a/CORE/WDA/inc/legacy/halMsgApi.h +++ b/CORE/WDA/inc/legacy/halMsgApi.h @@ -24,7 +24,8 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - +/* + * */ #ifndef _HALMSGAPI_H_ #define _HALMSGAPI_H_ @@ -341,6 +342,8 @@ typedef struct // PE session id now added to all HAL<->PE transacations // HAL sends it back unmodified. tANI_U8 smesessionId; + tANI_U8 staType; + tSirMacAddr staMac; } tDeleteStaParams, * tpDeleteStaParams; /* @@ -709,14 +712,14 @@ typedef struct { #ifndef OEM_DATA_REQ_SIZE #ifdef QCA_WIFI_2_0 -#define OEM_DATA_REQ_SIZE 276 +#define OEM_DATA_REQ_SIZE 280 #else #define OEM_DATA_REQ_SIZE 134 #endif #endif #ifndef OEM_DATA_RSP_SIZE #ifdef QCA_WIFI_2_0 -#define OEM_DATA_RSP_SIZE 1720 +#define OEM_DATA_RSP_SIZE 1724 #else #define OEM_DATA_RSP_SIZE 1968 #endif @@ -1377,6 +1380,17 @@ typedef struct sAddStaSelfParams tANI_U32 status; }tAddStaSelfParams, *tpAddStaSelfParams; +#ifdef FEATURE_WLAN_TDLS +#ifdef QCA_WIFI_2_0 +typedef struct sTdlsPeerStateParams +{ + tANI_U32 vdevId; + tSirMacAddr peerMacAddr; + tANI_U32 peerState; +}tTdlsPeerStateParams; +#endif /* QCA_WIFI_2_0 */ +#endif /* FEATURE_WLAN_TDLS */ + typedef struct sAbortScanParams { tANI_U8 SessionId; diff --git a/CORE/WDA/inc/legacy/halTypes.h b/CORE/WDA/inc/legacy/halTypes.h index f35055ceba8d..9c5a95673073 100644 --- a/CORE/WDA/inc/legacy/halTypes.h +++ b/CORE/WDA/inc/legacy/halTypes.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /** ------------------------------------------------------------------------- * ------------------------------------------------------------------------- * diff --git a/CORE/WDA/inc/legacy/wlan_qct_hal.h b/CORE/WDA/inc/legacy/wlan_qct_hal.h index 71317ba0ac1e..c67d24685f55 100644 --- a/CORE/WDA/inc/legacy/wlan_qct_hal.h +++ b/CORE/WDA/inc/legacy/wlan_qct_hal.h @@ -24,13 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - -/* - * Qualcomm Technologies, Inc. proprietary. All rights reserved. - * - * Date Modified by Modification Information - * -------------------------------------------------------------------- - */ #ifndef WLAN_QCT_HAL_H #define WLAN_QCT_HAL_H #include "vos_status.h" @@ -342,10 +335,6 @@ tANI_U8 WLANHAL_RxBD_GetFrameTypeSubType(v_PVOID_t _pvBDHeader, tANI_U16 usFrmCt #define HAL_TDLS_PEER_STA_MASK 0x80 //bit 7 set for TDLS peer station #endif -#ifdef WLAN_FEATURE_RELIABLE_MCAST -#define HAL_RELIABLE_MCAST_REQUESTED_MASK 0x100 -#define HAL_USE_BD_RATE_MASK 0x1000 -#endif /*========================================================================== FUNCTION WLANHAL_FillTxBd diff --git a/CORE/WDA/inc/wlan_qct_wda.h b/CORE/WDA/inc/wlan_qct_wda.h index c7d711762ffa..7eaac1377c3f 100644 --- a/CORE/WDA/inc/wlan_qct_wda.h +++ b/CORE/WDA/inc/wlan_qct_wda.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef WLAN_QCT_WDA_H #define WLAN_QCT_WDA_H @@ -43,8 +42,6 @@ DESCRIPTION was to keep the UMAC identical across Prima and Volans. This layer provides the glue between SME, PE , TL and HAL. - Copyright (c) 2008 Qualcomm Technologies, Inc. All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ===========================================================================*/ @@ -135,6 +132,17 @@ typedef enum eWDA_AUTH_TYPE_UNKNOWN = eCSR_AUTH_TYPE_FAILED, }WDA_AuthType; +#ifdef QCA_WIFI_2_0 +#ifdef FEATURE_WLAN_TDLS +typedef enum +{ + WDA_TDLS_PEER_STATE_PEERING, + WDA_TDLS_PEER_STATE_CONNECTED, + WDA_TDLS_PEER_STATE_TEARDOWN, +} WDA_TdlsPeerState; +#endif /* FEATURE_WLAN_TDLS */ +#endif /* QCA_WIFI_2_0 */ + /*-------------------------------------------------------------------------- Utilities --------------------------------------------------------------------------*/ @@ -158,7 +166,7 @@ typedef enum #define IS_ROAM_SCAN_OFFLOAD_FEATURE_ENABLE 0 #endif -#define IS_IBSS_HEARTBEAT_OFFLOAD_FEATURE_ENABLE 0 +#define IS_IBSS_HEARTBEAT_OFFLOAD_FEATURE_ENABLE 1 #ifdef FEATURE_WLAN_TDLS #define IS_ADVANCE_TDLS_ENABLE 0 @@ -342,10 +350,6 @@ typedef void (*pWDATxRxCompFunc)( v_PVOID_t pContext, void *pData, //parameter 2 - txComplete status : 1- success, 0 - failure. typedef eHalStatus (*pWDAAckFnTxComp)(tpAniSirGlobal, tANI_U32); -#ifdef FEATURE_CESIUM_PROPRIETARY -typedef void (*WDA_txFailIndCallback)(tANI_U8 *, tANI_U8); -#endif /* FEATURE_CESIUM_PROPRIETARY */ - /* generic callback for updating parameters from target to UMAC */ typedef void (*wda_tgt_cfg_cb) (void *context, void *param); @@ -447,9 +451,6 @@ typedef struct /* Event to wait for WDA stop on FTM mode */ vos_event_t ftmStopDoneEvent; -#ifdef FEATURE_CESIUM_PROPRIETARY - WDA_txFailIndCallback txFailIndCallback; -#endif /* FEATURE_CESIUM_PROPRIETARY */ } tWDA_CbContext ; typedef struct @@ -1229,10 +1230,6 @@ tSirRetStatus uMacPostCtrlMsg(void* pSirGlobal, tSirMbMsg* pMb); #define WDA_DHCP_START_IND SIR_HAL_DHCP_START_IND #define WDA_DHCP_STOP_IND SIR_HAL_DHCP_STOP_IND -#ifdef FEATURE_CESIUM_PROPRIETARY -#define WDA_TX_FAIL_MONITOR_IND SIR_HAL_TX_FAIL_MONITOR_IND -#endif /* FEATURE_CESIUM_PROPRIETARY */ - #ifdef WLAN_FEATURE_GTK_OFFLOAD #define WDA_GTK_OFFLOAD_REQ SIR_HAL_GTK_OFFLOAD_REQ @@ -1282,22 +1279,6 @@ tSirRetStatus uMacPostCtrlMsg(void* pSirGlobal, tSirMbMsg* pMb); #define WDA_RATE_UPDATE_IND SIR_HAL_RATE_UPDATE_IND -#if defined WLAN_FEATURE_RELIABLE_MCAST -#define WDA_RMC_BECOME_LEADER SIR_HAL_RMC_BECOME_LEADER -#define WDA_RMC_LEADER_SELECT_RESP SIR_HAL_RMC_LEADER_SELECT_RESP -#define WDA_RMC_LEADER_REQ SIR_HAL_RMC_LEADER_REQ -#define WDA_RMC_UPDATE_IND SIR_HAL_RMC_UPDATE_IND -#endif /* defined WLAN_FEATURE_RELIABLE_MCAST */ - -#ifdef FEATURE_CESIUM_PROPRIETARY -/* IBSS peer info related message */ -#define WDA_GET_IBSS_PEER_INFO_REQ SIR_HAL_IBSS_PEER_INFO_REQ -#define WDA_GET_IBSS_PEER_INFO_RSP SIR_HAL_IBSS_PEER_INFO_RSP - -/* IBSS Route table update indication */ -#define WDA_IBSS_ROUTE_TABLE_UPDATE_IND SIR_HAL_IBSS_ROUTE_TABLE_UPDATE_IND -#endif /* FEATURE_CESIUM_PROPRIETARY */ - #ifdef FEATURE_WLAN_BATCH_SCAN #define WDA_SET_BATCH_SCAN_REQ SIR_HAL_SET_BATCH_SCAN_REQ #define WDA_SET_BATCH_SCAN_RSP SIR_HAL_SET_BATCH_SCAN_RSP @@ -1305,6 +1286,16 @@ tSirRetStatus uMacPostCtrlMsg(void* pSirGlobal, tSirMbMsg* pMb); #define WDA_TRIGGER_BATCH_SCAN_RESULT_IND SIR_HAL_TRIGGER_BATCH_SCAN_RESULT_IND #endif +#ifdef QCA_WIFI_2_0 +#ifdef FEATURE_WLAN_TDLS +#define WDA_UPDATE_FW_TDLS_STATE SIR_HAL_UPDATE_FW_TDLS_STATE +#define WDA_UPDATE_TDLS_PEER_STATE SIR_HAL_UPDATE_TDLS_PEER_STATE +#define WDA_TDLS_SHOULD_DISCOVER SIR_HAL_TDLS_SHOULD_DISCOVER +#define WDA_TDLS_SHOULD_TEARDOWN SIR_HAL_TDLS_SHOULD_TEARDOWN +#define WDA_TDLS_PEER_DISCONNECTED SIR_HAL_TDLS_PEER_DISCONNECTED +#endif +#endif + tSirRetStatus wdaPostCtrlMsg(tpAniSirGlobal pMac, tSirMsgQ *pMsg); #define HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME 0x40 // Bit 6 will be used to control BD rate for Management frames @@ -1344,7 +1335,6 @@ tSirRetStatus wdaPostCtrlMsg(tpAniSirGlobal pMac, tSirMsgQ *pMsg); #ifdef QCA_WIFI_2_0 #define WDA_SetRegDomain WMA_SetRegDomain -#define WDA_SetCountryCode WMA_SetCountryCode #define WDA_SetHTConfig wma_set_htconfig #define WDA_UpdateRssiBmps WMA_UpdateRssiBmps @@ -1371,11 +1361,6 @@ static inline void WDA_UpdateLinkCapacity(v_PVOID_t pvosGCtx, v_U8_t staId, eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId, tAniBool sendRegHint); -static inline eHalStatus WDA_SetCountryCode(v_VOID_t *client_ctx, tANI_U8 *countrycode) -{ - return eHAL_STATUS_SUCCESS; -} - static inline int WDA_SetHTConfig(tANI_U8 sessionId, tANI_U16 htCapab, int value) { diff --git a/CORE/WDA/inc/wlan_qct_wda_msg.h b/CORE/WDA/inc/wlan_qct_wda_msg.h index bcf269d31dc6..919855ba86a7 100644 --- a/CORE/WDA/inc/wlan_qct_wda_msg.h +++ b/CORE/WDA/inc/wlan_qct_wda_msg.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef WLAN_QCT_MSG_MAP_H #define WLAN_QCT_MSG_MAP_H @@ -37,9 +36,6 @@ DESCRIPTION This file contains the external API exposed by the wlan adaptation layer - - Copyright (c) 2008 Qualcomm Technologies, Inc. All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ===========================================================================*/ diff --git a/CORE/WDA/src/wlan_nv.c b/CORE/WDA/src/wlan_nv.c index eefd46e0aaa1..afd26c535088 100644 --- a/CORE/WDA/src/wlan_nv.c +++ b/CORE/WDA/src/wlan_nv.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /** ------------------------------------------------------------------------- * ------------------------------------------------------------------------- * diff --git a/CORE/WDA/src/wlan_qct_wda.c b/CORE/WDA/src/wlan_qct_wda.c index baed057c3281..7e91b0382708 100644 --- a/CORE/WDA/src/wlan_qct_wda.c +++ b/CORE/WDA/src/wlan_qct_wda.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /*=========================================================================== W L A N _ Q C T _ WDA . C OVERVIEW: @@ -34,9 +33,6 @@ DEPENDENCIES: Are listed for each API below. - Copyright (c) 2010-2011 Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ===========================================================================*/ /*=========================================================================== EDIT HISTORY FOR FILE @@ -227,14 +223,6 @@ VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA, tSirLPHBReq *pData); #endif /* FEATURE_WLAN_LPHB */ -#ifdef FEATURE_CESIUM_PROPRIETARY -void WDA_IBSSPeerInfoRequestHandler(v_PVOID_t pVosContext, - v_PVOID_t pData); - -VOS_STATUS WDA_ProcessIBSSRouteTableUpdateInd(tWDA_CbContext *pWDA, - tAniIbssRouteTable *pData); -#endif /* FEATURE_CESIUM_PROPRIETARY */ - /* * FUNCTION: WDA_open * Allocate the WDA context @@ -11334,475 +11322,6 @@ static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA, return CONVERT_WDI2VOS_STATUS(status) ; } -#if defined WLAN_FEATURE_RELIABLE_MCAST -/* - * FUNCTION: WDA_RMCLeaderRspCallback - * Send LBP Leader Response back to PE - */ -void -WDA_RMCLeaderRspCallback(WDI_LbpRspParamsType *wdiLbpResponse, void *pUserData) -{ - tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData; - tWDA_CbContext *pWDA = pWdaParams->pWdaContext; - - switch (wdiLbpResponse->cmd) - { - case eWDI_BECOME_LEADER_CMD : - { - tSirRmcBecomeLeaderInd *pRmcBecomeLeaderInd; - - pRmcBecomeLeaderInd = (tSirRmcBecomeLeaderInd *) - vos_mem_malloc(sizeof(*pRmcBecomeLeaderInd)); - - VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, - "Received eWDI_BECOME_LEADER_CMD from WDI"); - - pRmcBecomeLeaderInd->status = wdiLbpResponse->status; - - /* Copy the mcast transmitter which should be us */ - vos_mem_copy(pRmcBecomeLeaderInd->mcastTransmitter, - wdiLbpResponse->mcastTransmitter, - sizeof(tSirMacAddr)); - /* Copy the mcast group address */ - vos_mem_copy(pRmcBecomeLeaderInd->mcastGroup, - wdiLbpResponse->mcastGroup, - sizeof(tSirMacAddr)); - - WDA_SendMsg(pWDA, WDA_RMC_BECOME_LEADER, - (void *)pRmcBecomeLeaderInd, 0) ; - break; - } - case eWDI_SUGGEST_LEADER_CMD : - { - tSirRmcLeaderSelectInd *pRmcLeaderSelectInd; - - pRmcLeaderSelectInd = (tSirRmcLeaderSelectInd *) - vos_mem_malloc(sizeof(tSirRmcLeaderSelectInd)); - - VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, - "Received eWDI_SUGGEST_LEADER_CMD from WDI"); - - pRmcLeaderSelectInd->status = wdiLbpResponse->status; - - /* Copy the mcast transmitter which should be us */ - vos_mem_copy(pRmcLeaderSelectInd->mcastTransmitter, - wdiLbpResponse->mcastTransmitter, - sizeof(tSirMacAddr)); - /* Copy the mcast group address */ - vos_mem_copy(pRmcLeaderSelectInd->mcastGroup, - wdiLbpResponse->mcastGroup, - sizeof(tSirMacAddr)); - /* Copy the candidate leader list */ - vos_mem_copy(pRmcLeaderSelectInd->leader, - wdiLbpResponse->leader, - sizeof(pRmcLeaderSelectInd->leader)); - - WDA_SendMsg(pWDA, WDA_RMC_LEADER_SELECT_RESP, - (void *)pRmcLeaderSelectInd, 0) ; - break; - } - } - - /* free the config structure */ - if (pWdaParams->wdaWdiApiMsgParam != NULL) - { - vos_mem_free(pWdaParams->wdaWdiApiMsgParam); - } - vos_mem_free(pWdaParams->wdaMsgParam); - vos_mem_free(pWdaParams); - -} - -/* - * FUNCTION: WDA_RMCLeaderReqCallback - * Free memory. - * Invoked when RMCLeader REQ failed in WDI and no RSP callback is generated. - */ -void WDA_RMCLeaderReqCallback(WDI_Status wdiStatus, void* pUserData) -{ - tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData; - - VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, - "<------ %s, wdiStatus: %d", __func__, wdiStatus); - - if (NULL == pWdaParams) - { - VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, - "%s: pWdaParams received NULL", __func__); - VOS_ASSERT(0); - return; - } - - if (IS_WDI_STATUS_FAILURE(wdiStatus)) - { - vos_mem_free(pWdaParams->wdaWdiApiMsgParam); - vos_mem_free(pWdaParams->wdaMsgParam); - vos_mem_free(pWdaParams); - } - - return; -} - -/* - * FUNCTION: WDA_ProcessRMCLeaderReq - * Forward LBP Leader Request to WDI - */ -static VOS_STATUS -WDA_ProcessRMCLeaderReq(tWDA_CbContext *pWDA, - tSirRmcLeaderReq *lbpLeaderReq) -{ - WDI_Status status; - WDI_LbpLeaderReqParams *wdiLeaderReq; - tWDA_ReqParams *pWdaParams; - - wdiLeaderReq = (WDI_LbpLeaderReqParams *) - vos_mem_malloc(sizeof(*wdiLeaderReq)); - - if (NULL == wdiLeaderReq) - { - VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, - "%s: VOS MEM Alloc Failure", __func__); - VOS_ASSERT(0); - vos_mem_free(lbpLeaderReq); - return VOS_STATUS_E_NOMEM; - } - - pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)); - if (NULL == pWdaParams) - { - VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, - "%s: VOS MEM Alloc Failure", __func__); - VOS_ASSERT(0); - vos_mem_free(lbpLeaderReq); - vos_mem_free(wdiLeaderReq); - return VOS_STATUS_E_NOMEM; - } - - pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiLeaderReq; - /* Store param pointer as passed in by caller */ - pWdaParams->wdaMsgParam = lbpLeaderReq; - pWdaParams->pWdaContext = pWDA; - - wdiLeaderReq->cmd = lbpLeaderReq->cmd; - - vos_mem_copy(wdiLeaderReq->mcastTransmitter, - lbpLeaderReq->mcastTransmitter, sizeof(tSirMacAddr)); - vos_mem_copy(wdiLeaderReq->mcastGroup, - lbpLeaderReq->mcastGroup, sizeof(tSirMacAddr)); - vos_mem_copy(wdiLeaderReq->blacklist, - lbpLeaderReq->blacklist, sizeof(wdiLeaderReq->blacklist)); - - wdiLeaderReq->wdiReqStatusCB = WDA_RMCLeaderReqCallback; - - status = WDI_LbpLeaderReq(wdiLeaderReq, - (WDI_LbpLeaderRspCb)WDA_RMCLeaderRspCallback, - (void *)pWdaParams); - if (IS_WDI_STATUS_FAILURE(status)) - { - vos_mem_free(pWdaParams->wdaWdiApiMsgParam); - vos_mem_free(pWdaParams->wdaMsgParam); - vos_mem_free(pWdaParams) ; - VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, - "LBP Leader Request failed"); - } - return CONVERT_WDI2VOS_STATUS(status) ; -} - -/* - * FUNCTION: WDA_ProcessRMCUpdateInd - * Forward LBP Update Indication to WDI -*/ -static VOS_STATUS -WDA_ProcessRMCUpdateInd(tWDA_CbContext *pWDA, - tSirRmcUpdateInd *lbpUpdateInd) -{ - WDI_Status status; - WDI_LbpUpdateIndParams wdiUpdateInd; - - /* Copy the paramters for Update_Ind */ - - wdiUpdateInd.indication = lbpUpdateInd->indication; - wdiUpdateInd.role = lbpUpdateInd->role; - - vos_mem_copy(wdiUpdateInd.mcastTransmitter, - lbpUpdateInd->mcastTransmitter, sizeof(tSirMacAddr)); - - vos_mem_copy(wdiUpdateInd.mcastGroup, - lbpUpdateInd->mcastGroup, sizeof(tSirMacAddr)); - - vos_mem_copy(wdiUpdateInd.mcastLeader, - lbpUpdateInd->mcastLeader, sizeof(tSirMacAddr)); - - wdiUpdateInd.wdiReqStatusCB = WDA_WdiIndicationCallback; - wdiUpdateInd.pUserData = pWDA; - status = WDI_LbpUpdateInd(&wdiUpdateInd); - - if (WDI_STATUS_PENDING == status) - { - VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, - "Pending received for %s:%d ",__func__,__LINE__ ); - } - else if (WDI_STATUS_SUCCESS_SYNC != status) - { - VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, - "Failure in %s:%d ",__func__,__LINE__ ); - } - - vos_mem_free(lbpUpdateInd); - - return CONVERT_WDI2VOS_STATUS(status) ; -} -#endif /* WLAN_FEATURE_RELIABLE_MCAST */ - -#ifdef FEATURE_CESIUM_PROPRIETARY -void WDA_GetIbssPeerInfoRspCallback(WDI_IbssPeerInfoRspParams *peerInfoRspParams - ,void* pUserData) -{ - - tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData; - WDI_IbssPeerInfoParams *pIbssPeerInfoParams = - (WDI_IbssPeerInfoParams *)peerInfoRspParams->wdiPeerInfoParams; - tWDA_CbContext *pWDA; - tpSirIbssGetPeerInfoRspParams pIbssGetPeerInfoRsp; - vos_msg_t vosMsg; - v_U32_t wdaCnt = 0; - - pIbssGetPeerInfoRsp = - vos_mem_malloc(sizeof(tSirIbssGetPeerInfoRspParams)); - - VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, - "<------ %s " ,__func__); - VOS_ASSERT(NULL != pWdaParams); - - pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ; - - - if (peerInfoRspParams->wdiNumPeers > 32) - { - pr_info("%s] Number of peers is more than 32, returning\n", __func__); - /* free the mem and return */ - vos_mem_free((v_VOID_t *) pIbssGetPeerInfoRsp); - if(NULL != pWdaParams) - { - if(pWdaParams->wdaMsgParam) - vos_mem_free(pWdaParams->wdaMsgParam); - if(pWdaParams->wdaWdiApiMsgParam) - vos_mem_free(pWdaParams->wdaWdiApiMsgParam); - vos_mem_free(pWdaParams); - } - return; - } - - /* Message Header */ - pIbssGetPeerInfoRsp->mesgType = eWNI_SME_IBSS_PEER_INFO_RSP; - pIbssGetPeerInfoRsp->mesgLen = sizeof(tSirIbssGetPeerInfoRspParams); - pIbssGetPeerInfoRsp->ibssPeerInfoRspParams.status = peerInfoRspParams->wdiStatus; - pIbssGetPeerInfoRsp->ibssPeerInfoRspParams.numPeers = peerInfoRspParams->wdiNumPeers; - - for (wdaCnt = 0; wdaCnt < peerInfoRspParams->wdiNumPeers; wdaCnt++) - { - WDI_IbssPeerInfoParams *pWdiTmp = &pIbssPeerInfoParams[wdaCnt]; - tSirIbssPeerInfoParams *pSmeTmp = - &pIbssGetPeerInfoRsp->ibssPeerInfoRspParams.peerInfoParams[wdaCnt]; - - pSmeTmp->staIdx = pWdiTmp->wdiStaIdx; - pSmeTmp->mcsIndex = pWdiTmp->wdiMcsIndex; - pSmeTmp->rssi = pWdiTmp->wdiRssi; - pSmeTmp->txRate = pWdiTmp->wdiTxRate; - pSmeTmp->txRateFlags = pWdiTmp->wdiTxRateFlags; - } - - /* VOS message wrapper */ - vosMsg.type = eWNI_SME_IBSS_PEER_INFO_RSP; - vosMsg.bodyptr = (void *)pIbssGetPeerInfoRsp; - vosMsg.bodyval = 0; - - if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg)) - { - /* free the mem and return */ - vos_mem_free((v_VOID_t *) pIbssGetPeerInfoRsp); - } - - if(NULL != pWdaParams) - { - if(pWdaParams->wdaMsgParam) - vos_mem_free(pWdaParams->wdaMsgParam); - if(pWdaParams->wdaWdiApiMsgParam) - vos_mem_free(pWdaParams->wdaWdiApiMsgParam); - vos_mem_free(pWdaParams); - } - - return; -} - -static VOS_STATUS -WDA_ProcessIbssPeerInfoReq(tWDA_CbContext *pWDA, - tSirIbssGetPeerInfoReqParams *ibssPeerInfoReqParams) -{ - WDI_Status status; - WDI_IbssPeerInfoReqType *wdiPeerInfoReq; - tWDA_ReqParams *pWdaParams; - - wdiPeerInfoReq = (WDI_IbssPeerInfoReqType *) - vos_mem_malloc(sizeof(WDI_IbssPeerInfoReqType)); - if (NULL == wdiPeerInfoReq) - { - VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, - "%s: VOS MEM Alloc Failure", __func__); - VOS_ASSERT(0); - vos_mem_free(ibssPeerInfoReqParams); - return VOS_STATUS_E_NOMEM; - } - - pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)); - if (NULL == pWdaParams) - { - VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, - "%s: VOS MEM Alloc Failure", __func__); - VOS_ASSERT(0); - vos_mem_free(wdiPeerInfoReq); - vos_mem_free(ibssPeerInfoReqParams); - return VOS_STATUS_E_NOMEM; - } - - pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiPeerInfoReq; - /* Store param pointer as passed in by caller */ - pWdaParams->wdaMsgParam = ibssPeerInfoReqParams; - pWdaParams->pWdaContext = pWDA; - - wdiPeerInfoReq->wdiAllPeerInfoReqd = - ibssPeerInfoReqParams->allPeerInfoReqd; - wdiPeerInfoReq->wdiStaIdx = - ibssPeerInfoReqParams->staIdx; - - status = WDI_IbssPeerInfoReq(wdiPeerInfoReq, - (WDI_IbssPeerInfoReqCb)WDA_GetIbssPeerInfoRspCallback, - (void *)pWdaParams); - if (IS_WDI_STATUS_FAILURE(status)) - { - vos_mem_free(pWdaParams->wdaWdiApiMsgParam); - vos_mem_free(pWdaParams->wdaMsgParam); - vos_mem_free(pWdaParams) ; - VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, - "IBSS Peer Info Request failed"); - } - return CONVERT_WDI2VOS_STATUS(status) ; - -} - -VOS_STATUS WDA_ProcessIBSSRouteTableUpdateInd(tWDA_CbContext *pWDA, - tAniIbssRouteTable *pData) -{ - WDI_Status status; - WDI_IBSSRouteTable *wdiIBSSRouteTable = NULL; - tANI_U32 usWDI_IBSSRouteTableSize; - tANI_U16 i; - - VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, - "<------ %s " ,__func__); - - usWDI_IBSSRouteTableSize = sizeof(WDI_IBSSRouteTable) + - ((pData->numEntries - 1) * - sizeof(WDI_DestIpNextHopMacPair)); - wdiIBSSRouteTable = - (WDI_IBSSRouteTable *)vos_mem_malloc(usWDI_IBSSRouteTableSize); - - if (NULL == wdiIBSSRouteTable) - { - VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, - "%s: VOS MEM Alloc Failure", __func__); - vos_mem_free(pData); - VOS_ASSERT(0); - return VOS_STATUS_E_NOMEM; - } - - wdiIBSSRouteTable->numEntries = pData->numEntries; - for (i = 0; i < pData->numEntries; i++) - { - vos_mem_copy(&wdiIBSSRouteTable->destIpMacPair[i].destIpv4Addr, - &pData->destIpNextHopPair[i].destIpv4Addr, - WDI_IPV4_ADDR_LEN); - vos_mem_copy(&wdiIBSSRouteTable->destIpMacPair[i].nextHopMacAddr, - &pData->destIpNextHopPair[i].nextHopMacAddr, - WDI_MAC_ADDR_LEN); - } - - wdiIBSSRouteTable->wdiReqStatusCB = WDA_WdiIndicationCallback; - wdiIBSSRouteTable->pUserData = pWDA; - - status = WDI_IBSSRouteTableUpdateInd(wdiIBSSRouteTable); - - if (WDI_STATUS_PENDING == status) - { - VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, - "%s: Pending received for IBSS Route table update indication", - __func__); - } - else if (WDI_STATUS_SUCCESS_SYNC != status) - { - vos_mem_free(wdiIBSSRouteTable); - VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, - "%s: IBSS Route table update indication failed", __func__); - } - vos_mem_free(pData); - return CONVERT_WDI2VOS_STATUS(status) ; -} - -/* - * FUNCTION: WDA_ProcessTXFailMonitorInd - * Forward TX Fail Monitor to WDI - */ -static VOS_STATUS WDA_ProcessTXFailMonitorInd( - tWDA_CbContext *pWDA, - tAniTXFailMonitorInd *txFailMonitorInd) -{ - WDI_Status status; - WDI_TXFailMonitorInd *wdiTXFailMonitorInd = - (WDI_TXFailMonitorInd *)vos_mem_malloc(sizeof(WDI_TXFailMonitorInd)); - - VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, - "<------ %s " ,__func__); - - if (NULL == wdiTXFailMonitorInd) - { - VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, - "%s: VOS MEM Alloc Failure", __func__); - VOS_ASSERT(0); - vos_mem_free(txFailMonitorInd); - return VOS_STATUS_E_NOMEM; - } - - wdiTXFailMonitorInd->tx_fail_count = txFailMonitorInd->tx_fail_count; - - wdiTXFailMonitorInd->wdiReqStatusCB = WDA_WdiIndicationCallback; - wdiTXFailMonitorInd->pUserData = pWDA; - - status = WDI_TXFailMonitorStartStopInd(wdiTXFailMonitorInd); - - if (WDI_STATUS_PENDING == status) - { - VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, - "TX Fail Monitor Indication Pending"); - } - else if (WDI_STATUS_SUCCESS_SYNC == status) - { - if (0 == txFailMonitorInd->tx_fail_count) - pWDA->txFailIndCallback = NULL; - else - pWDA->txFailIndCallback = txFailMonitorInd->txFailIndCallback; - } - else - { - VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, - "TX Fail Monitor Indication Failed"); - } - - vos_mem_free(txFailMonitorInd); - - return CONVERT_WDI2VOS_STATUS(status) ; -} -#endif /* FEATURE_CESIUM_PROPRIETARY */ - /* * FUNCTION: WDA_McProcessMsg * Trigger DAL-AL to start CFG download @@ -12476,38 +11995,6 @@ VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg ) WDA_ProcessRateUpdateInd(pWDA, (tSirRateUpdateInd *)pMsg->bodyptr); break; } -#if defined WLAN_FEATURE_RELIABLE_MCAST - case WDA_RMC_LEADER_REQ: - { - WDA_ProcessRMCLeaderReq(pWDA, (tSirRmcLeaderReq *)pMsg->bodyptr); - break; - } - case WDA_RMC_UPDATE_IND: - { - WDA_ProcessRMCUpdateInd(pWDA, (tSirRmcUpdateInd *)pMsg->bodyptr); - break; - } -#endif /* WLAN_FEATURE_RELIABLE_MCAST */ - -#ifdef FEATURE_CESIUM_PROPRIETARY - case WDA_GET_IBSS_PEER_INFO_REQ: - { - WDA_ProcessIbssPeerInfoReq(pWDA, - (tSirIbssGetPeerInfoReqParams *)pMsg->bodyptr); - break; - } - case WDA_IBSS_ROUTE_TABLE_UPDATE_IND: - { - WDA_ProcessIBSSRouteTableUpdateInd(pWDA, - (tAniIbssRouteTable *)pMsg->bodyptr); - break; - } - case WDA_TX_FAIL_MONITOR_IND: - { - WDA_ProcessTXFailMonitorInd(pWDA, (tAniTXFailMonitorInd *)pMsg->bodyptr); - break; - } -#endif /* FEATURE_CESIUM_PROPRIETARY */ #ifdef FEATURE_WLAN_BATCH_SCAN case WDA_SET_BATCH_SCAN_REQ: @@ -12995,19 +12482,6 @@ void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd, } break; } -#ifdef FEATURE_CESIUM_PROPRIETARY - case WDI_TX_FAIL_IND: - { - if (pWDA->txFailIndCallback) - { - pWDA->txFailIndCallback( - wdiLowLevelInd->wdiIndicationData.wdiTXFailInd.macAddr, - wdiLowLevelInd->wdiIndicationData.wdiTXFailInd.seqNo); - } - break; - } -#endif /* FEATURE_CESIUM_PROPRIETARY */ - #ifdef FEATURE_WLAN_LPHB case WDI_LPHB_IND: { @@ -13086,43 +12560,6 @@ void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd, break; } -#if defined WLAN_FEATURE_RELIABLE_MCAST - case WDI_LBP_LEADER_PICK_NEW : - { - tSirRmcUpdateInd *pRmcUpdateInd = - (tSirRmcUpdateInd *)vos_mem_malloc(sizeof(tSirRmcUpdateInd)); - - VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, - "Received WDI_LBP_UPDATE_IND from WDI"); - - pRmcUpdateInd->indication = - wdiLowLevelInd->wdiIndicationData.wdiLbpPickNewLeaderInd.indication; - pRmcUpdateInd->role = - wdiLowLevelInd->wdiIndicationData.wdiLbpPickNewLeaderInd.role; - - /* Copy the mcast transmitter which should be us */ - vos_mem_copy(pRmcUpdateInd->mcastTransmitter, - wdiLowLevelInd->wdiIndicationData.wdiLbpPickNewLeaderInd. \ - mcastTransmitter, - sizeof(tSirMacAddr)); - /* Copy the mcast group address */ - vos_mem_copy(pRmcUpdateInd->mcastGroup, - wdiLowLevelInd->wdiIndicationData.wdiLbpPickNewLeaderInd.mcastGroup, - sizeof(tSirMacAddr)); - /* Copy the mcast leader address */ - vos_mem_copy(pRmcUpdateInd->mcastLeader, - wdiLowLevelInd->wdiIndicationData.wdiLbpPickNewLeaderInd.mcastLeader, - sizeof(tSirMacAddr)); - /* Copy the candidate leader list */ - vos_mem_copy(pRmcUpdateInd->leader, - wdiLowLevelInd->wdiIndicationData.wdiLbpPickNewLeaderInd.leader, - sizeof(pRmcUpdateInd->leader)); - - WDA_SendMsg(pWDA, WDA_RMC_UPDATE_IND, (void *)pRmcUpdateInd, 0) ; - break; - } -#endif /* WLAN_FEATURE_RELIABLE_MCAST */ - #ifdef FEATURE_WLAN_BATCH_SCAN case WDI_BATCH_SCAN_RESULT_IND: { diff --git a/CORE/WDA/src/wlan_qct_wda_debug.c b/CORE/WDA/src/wlan_qct_wda_debug.c index 0d10b1c9bc74..4d41fc7b57fd 100644 --- a/CORE/WDA/src/wlan_qct_wda_debug.c +++ b/CORE/WDA/src/wlan_qct_wda_debug.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /*=========================================================================== wlan_qct_wda_debug.c @@ -41,10 +40,6 @@ Are listed for each API below. - - Copyright (c) 2008 Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ===========================================================================*/ diff --git a/CORE/WDA/src/wlan_qct_wda_debug.h b/CORE/WDA/src/wlan_qct_wda_debug.h index 070944f698cd..71b97d70d5a1 100644 --- a/CORE/WDA/src/wlan_qct_wda_debug.h +++ b/CORE/WDA/src/wlan_qct_wda_debug.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef __WDA_DEBUG_H__ #define __WDA_DEBUG_H__ #if !defined (ANI_OS_TYPE_ANDROID) diff --git a/CORE/WDA/src/wlan_qct_wda_ds.c b/CORE/WDA/src/wlan_qct_wda_ds.c index b383875785ab..6b736277ddf3 100644 --- a/CORE/WDA/src/wlan_qct_wda_ds.c +++ b/CORE/WDA/src/wlan_qct_wda_ds.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /*=========================================================================== @@ -39,10 +38,6 @@ Are listed for each API below. - - Copyright (c) 2010-2011 Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ===========================================================================*/ /*=========================================================================== @@ -429,10 +424,6 @@ WDA_DS_BuildTxPacketInfo WDI_DS_TxMetaInfoType* pTxMetaInfo = NULL; v_SIZE_t usMacAddrSize; wpt_FrameCtrl *pFrameControl; -#ifdef WLAN_FEATURE_RELIABLE_MCAST - WLANTL_CbType* pTLCb; - WLANTL_RMCAST_SESSION* pRMcastSession; -#endif /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/ /*------------------------------------------------------------------------ @@ -446,20 +437,6 @@ WDA_DS_BuildTxPacketInfo return VOS_STATUS_E_FAULT; } -#ifdef WLAN_FEATURE_RELIABLE_MCAST -/*---------------------------------------------------------------- - Extract TL control block - --------------------------------------------------------------*/ - pTLCb = VOS_GET_TL_CB(pvosGCtx); - if ( NULL == pTLCb ) - { - TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, - "WLAN TL %s: pTLCb is NULL", __func__)); - - return VOS_STATUS_E_FAILURE; - } -#endif - /*------------------------------------------------------------------------ Extract TX Meta Info pointer from PAL packet ------------------------------------------------------------------------*/ @@ -535,47 +512,6 @@ WDA_DS_BuildTxPacketInfo // ADDR2 vos_copy_macaddr( (v_MACADDR_t*)pTxMetaInfo->addr2MACAddress, pAddr2 ); -#ifdef WLAN_FEATURE_RELIABLE_MCAST - /*Check if relibale multicast data path is enabled*/ - if (pTLCb->rmcDataPathEnabled) - { - /*look up for mcast transmitter MAC address in TL's active rmcast list*/ - if (((WDA_TLI_DATA_FRAME_TYPE >> 4) == pTxMetaInfo->frmType) && - (vos_is_macaddr_group(pvDestMacAddr))) - { - pRMcastSession = - WLANTL_RmcLookUpRmcastSession(pTLCb->reliableMcastSession, - (v_MACADDR_t*)pTxMetaInfo->addr2MACAddress); - - if (pRMcastSession) - { - if (0xFF == pvDestMacAddr->bytes[0]) - { - pTxMetaInfo->txFlags |= (HAL_USE_BD_RATE_MASK); - } - else - { - /*Route RMCAST data frames from QID which has ACK_POLICY=TRUE*/ - pTxMetaInfo->txFlags |= (HAL_RELIABLE_MCAST_REQUESTED_MASK); - - VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO, - "RMCAST active for " MAC_ADDRESS_STR " RMCAST session", - MAC_ADDR_ARRAY(pRMcastSession->reliableMcastAddr.bytes)); - } - } - else - { - /*Multicast transmitter address does not exist in TL's active - RMCAST sessions list. Route this mutlicast data frame from - QID which has ACK_POLICY = FALSE*/ - VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO, - "RMCAST disabled for " MAC_ADDRESS_STR " RMCAST session", - MAC_ADDR_ARRAY(pTxMetaInfo->addr2MACAddress)); - } - } - } -#endif /*End of WLAN_FEATURE_RELIABLE_MCAST*/ - /* Dump TX meta infro for debugging */ VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO_LOW, "WLAN TL: Dump TX meta info: " diff --git a/CORE/WDA/src/wlan_qct_wda_legacy.c b/CORE/WDA/src/wlan_qct_wda_legacy.c index 5a2f86c85dc7..15b144aabc0a 100644 --- a/CORE/WDA/src/wlan_qct_wda_legacy.c +++ b/CORE/WDA/src/wlan_qct_wda_legacy.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /*=========================================================================== wlan_qct_wda_legacy.c @@ -41,10 +40,6 @@ Are listed for each API below. - - Copyright (c) 2008 Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ===========================================================================*/ /* Standard include files */ diff --git a/CORE/WDI/CP/inc/qwlanfw_defs.h b/CORE/WDI/CP/inc/qwlanfw_defs.h index 54f4100bd8cd..ce24fb2dac27 100644 --- a/CORE/WDI/CP/inc/qwlanfw_defs.h +++ b/CORE/WDI/CP/inc/qwlanfw_defs.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /*=========================================================================== * * @file: wlan_defs.h @@ -33,9 +32,6 @@ * * @author: Gagan Jain * - * Copyright (C) 2010, Qualcomm Technologies, Inc. - * All rights reserved. - * *=========================================================================*/ #ifndef __WLAN_DEFS_H__ diff --git a/CORE/WDI/CP/inc/wlan_qct_wdi.h b/CORE/WDI/CP/inc/wlan_qct_wdi.h index 2e366e22c19d..6cbeea8f10ba 100644 --- a/CORE/WDI/CP/inc/wlan_qct_wdi.h +++ b/CORE/WDI/CP/inc/wlan_qct_wdi.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef WLAN_QCT_WDI_H #define WLAN_QCT_WDI_H @@ -38,10 +37,6 @@ DESCRIPTION This file contains the external API exposed by the wlan transport layer module. - - Copyright (c) 2010-2011 Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ===========================================================================*/ @@ -519,22 +514,6 @@ typedef struct wpt_uint8 macAddr[WDI_MAC_ADDR_LEN]; }WDI_DHCPInd; -#ifdef FEATURE_CESIUM_PROPRIETARY -typedef struct -{ - /*Request status callback offered by UMAC - it is called if the current - req has returned PENDING as status; it delivers the status of sending - the message over the BUS */ - WDI_ReqStatusCb wdiReqStatusCB; - - /*The user data passed in by UMAC, it will be sent back when the above - function pointer will be called */ - void* pUserData; - - wpt_uint8 tx_fail_count; -}WDI_TXFailMonitorInd; -#endif /* FEATURE_CESIUM_PROPRIETARY */ - /*--------------------------------------------------------------------------- WDI_MacSSid @@ -730,14 +709,6 @@ typedef struct #endif -#ifdef FEATURE_CESIUM_PROPRIETARY -typedef struct -{ - wpt_uint8 seqNo; - wpt_uint8 macAddr[WDI_MAC_ADDR_LEN]; -} WDI_TXFailIndType; -#endif /* FEATURE_CESIUM_PROPRIETARY */ - /*--------------------------------------------------------------------------- WDI_IbssPeerInactivityIndType -----------------------------------------------------------------------------*/ @@ -748,150 +719,6 @@ typedef struct wpt_macAddr staMacAddr; }WDI_IbssPeerInactivityIndType; -#if defined WLAN_FEATURE_RELIABLE_MCAST -/*--------------------------------------------------------------------------- - WDI_LbpLeaderReqParams ------------------------------------------------------------------------------*/ -typedef struct -{ - wpt_uint8 cmd; /* command- suggest or become leader */ - - /* MAC address of MCAST Transmitter (source) */ - wpt_macAddr mcastTransmitter; - - /* MAC Address of Multicast Group (01-00-5E-xx-xx-xx) */ - wpt_macAddr mcastGroup; - - /* List of candidates for cmd = WLAN_HAL_SUGGEST_LEADER*/ - wpt_macAddr blacklist[16]; /* HAL_NUM_MAX_LEADERS */ - - /* - * Request status callback offered by UMAC - it is called if the current - * req has returned PENDING as status; it delivers the status of sending - * the message over the BUS - */ - WDI_ReqStatusCb wdiReqStatusCB; - -} WDI_LbpLeaderReqParams; - -/*--------------------------------------------------------------------------- - WDI_LbpUpdateIndParams ------------------------------------------------------------------------------*/ -typedef struct -{ - wpt_uint8 indication; /* tLbpUpdateIndType */ - - wpt_uint8 role; /* leader or transmitter */ - - /* MAC address of MCAST Transmitter (source) */ - wpt_macAddr mcastTransmitter; - - /* MAC Address of Multicast Group (01-00-5E-xx-xx-xx) */ - wpt_macAddr mcastGroup; - - /* MAC address of MCAST Leader (destination) */ - wpt_macAddr mcastLeader; - - /* List of candidates for cmd = WLAN_HAL_SUGGEST_LEADER*/ - wpt_macAddr leader[16]; /* HAL_NUM_MAX_LEADERS */ - - /* - * Request status callback offered by UMAC - it is called if the current - * req has returned PENDING as status; it delivers the status of sending - * the message over the BUS - */ - WDI_ReqStatusCb wdiReqStatusCB; - - /* - * The user data passed in by UMAC, it will be sent back when the above - * function pointer will be called - */ - void *pUserData; - -} WDI_LbpUpdateIndParams; - -typedef enum -{ - eWDI_SUGGEST_LEADER_CMD = 0, - eWDI_BECOME_LEADER_CMD = 1, -} eWDI_LeaderRspCmdType; - -/*--------------------------------------------------------------------------- - WDI_LbpRspParamsType ------------------------------------------------------------------------------*/ -typedef struct -{ - wpt_uint8 status; /* success or failure */ - - /* Command Type */ - eWDI_LeaderRspCmdType cmd; /* suggest or become leader */ - - /* MAC address of MCAST Transmitter (source) */ - wpt_macAddr mcastTransmitter; - - /* MAC Address of Multicast Group (01-00-5E-xx-xx-xx) */ - wpt_macAddr mcastGroup; - - /* List of candidates for cmd = WLAN_HAL_SUGGEST_LEADER*/ - wpt_macAddr leader[16]; /* HAL_NUM_MAX_LEADERS */ -} WDI_LbpRspParamsType; - -/*--------------------------------------------------------------------------- - WDI_LbpPickNewLeader ------------------------------------------------------------------------------*/ -typedef struct -{ - wpt_uint8 indication; /* pick_new */ - - wpt_uint8 role; /* leader or transmitter */ - - /* MAC address of MCAST Transmitter (source) */ - wpt_macAddr mcastTransmitter; - - /* MAC Address of Multicast Group (01-00-5E-xx-xx-xx) */ - wpt_macAddr mcastGroup; - - /* MAC Address of Multicast Leader */ - wpt_macAddr mcastLeader; - - /* List of candidates for cmd = WLAN_HAL_LEADER_PICK_NEW*/ - wpt_macAddr leader[16]; /* HAL_NUM_MAX_LEADERS */ -} WDI_LbpPickNewLeader; - -#endif /* WLAN_FEATURE_RELIABLE_MCAST */ - -#ifdef FEATURE_CESIUM_PROPRIETARY -/*--------------------------------------------------------------------------- - WDI_IBSSRouteTableInd ----------------------------------------------------------------------------*/ - -typedef struct -{ - wpt_uint8 destIpv4Addr[WDI_IPV4_ADDR_LEN]; - wpt_uint8 nextHopMacAddr[WDI_MAC_ADDR_LEN]; -} WDI_DestIpNextHopMacPair; - -typedef struct -{ - /* - * Request status callback offered by UMAC - it is called if the current - * req has returned PENDING as status; it delivers the status of sending - * the message over the BUS - */ - WDI_ReqStatusCb wdiReqStatusCB; - - /* - * The user data passed in by UMAC, it will be sent back when the above - * function pointer will be called - */ - void *pUserData; - - wpt_uint16 numEntries; - - WDI_DestIpNextHopMacPair destIpMacPair[1]; -} WDI_IBSSRouteTable; -#endif /* FEATURE_CESIUM_PROPRIETARY */ - /*--------------------------------------------------------------------------- WDI_TxRateFlags -----------------------------------------------------------------------------*/ @@ -1026,19 +853,11 @@ typedef struct /* Periodic TX Pattern FW Indication */ WDI_PeriodicTxPtrnFwIndType wdiPeriodicTxPtrnFwInd; -#if defined WLAN_FEATURE_RELIABLE_MCAST - WDI_LbpPickNewLeader wdiLbpPickNewLeaderInd; -#endif /* WLAN_FEATURE_RELIABLE_MCAST */ - #ifdef FEATURE_WLAN_BATCH_SCAN /*batch scan result indication from FW*/ void *pBatchScanResult; #endif -#ifdef FEATURE_CESIUM_PROPRIETARY - WDI_TXFailIndType wdiTXFailInd; -#endif /* FEATURE_CESIUM_PROPRIETARY */ - } wdiIndicationData; }WDI_LowLevelIndType; @@ -4424,7 +4243,7 @@ typedef struct #ifndef OEM_DATA_REQ_SIZE #ifdef QCA_WIFI_2_0 -#define OEM_DATA_REQ_SIZE 276 +#define OEM_DATA_REQ_SIZE 280 #else #define OEM_DATA_REQ_SIZE 134 #endif @@ -4432,7 +4251,7 @@ typedef struct #ifndef OEM_DATA_RSP_SIZE #ifdef QCA_WIFI_2_0 -#define OEM_DATA_RSP_SIZE 1720 +#define OEM_DATA_RSP_SIZE 1724 #else #define OEM_DATA_RSP_SIZE 1968 #endif @@ -5584,58 +5403,6 @@ typedef struct void* pUserData; } WDI_DelPeriodicTxPtrnParamsType; -#ifdef FEATURE_CESIUM_PROPRIETARY -/*--------------------------------------------------------------------------- - WDI_IbssPeerInfoParams ----------------------------------------------------------------------------*/ -typedef struct -{ - wpt_uint8 wdiStaIdx; //StaIdx - wpt_uint32 wdiTxRate; //Tx Rate - wpt_uint32 wdiMcsIndex; //MCS Index - wpt_uint32 wdiTxRateFlags; //TxRate Flags - wpt_int8 wdiRssi; //RSSI -}WDI_IbssPeerInfoParams; - -/*--------------------------------------------------------------------------- - WDI_IbssPeerInfoRspParams ----------------------------------------------------------------------------*/ -typedef struct -{ - wpt_uint32 wdiStatus; // Return status - wpt_uint8 wdiNumPeers; // Number of peers - WDI_IbssPeerInfoParams *wdiPeerInfoParams; // Peer Info parameters -}WDI_IbssPeerInfoRspParams; - -/*--------------------------------------------------------------------------- - WDI_GetIbssPeerInfoRspType ----------------------------------------------------------------------------*/ -typedef struct -{ - WDI_IbssPeerInfoRspParams wdiPeerInfoRspParams; - - /*Request status callback offered by UMAC - it is called if the current - req has returned PENDING as status; it delivers the status of sending - the message over the BUS */ - WDI_ReqStatusCb wdiReqStatusCB; - - /*The user data passed in by UMAC, it will be sent back when the above - function pointer will be called */ - void* pUserData; -}WDI_GetIbssPeerInfoRspType; - -/*--------------------------------------------------------------------------- - WDI_IbssPeerInfoReqType ----------------------------------------------------------------------------*/ -typedef struct -{ - wpt_boolean wdiAllPeerInfoReqd; // Request info for all peers - wpt_uint8 wdiStaIdx; // STA Index - wpt_uint8 wdiBssIdx; // BSS Index -}WDI_IbssPeerInfoReqType; - -#endif /* FEATURE_CESIUM_PROPRIETARY */ - /*---------------------------------------------------------------------------- * WDI callback types @@ -7462,17 +7229,6 @@ typedef void (*WDI_LphbCfgCb)(WDI_Status wdiStatus, void* pUserData); #endif /* FEATURE_WLAN_LPHB */ -#if defined WLAN_FEATURE_RELIABLE_MCAST -typedef void (*WDI_LbpLeaderRspCb)(WDI_LbpRspParamsType *wdiLbpResponse, - void* pUserData); -#endif /* WLAN_FEATURE_RELIABLE_MCAST */ - -#ifdef FEATURE_CESIUM_PROPRIETARY -typedef void (*WDI_IbssPeerInfoReqCb)(WDI_IbssPeerInfoRspParams *pInfoRspParams, - void* pUserData); - -#endif /* FEATURE_CESIUM_PROPRIETARY */ - #ifdef FEATURE_WLAN_BATCH_SCAN /*--------------------------------------------------------------------------- WDI_SetBatchScanCb @@ -10256,49 +10012,6 @@ WDI_dhcpStopInd WDI_DHCPInd *wdiDHCPInd ); -#if defined WLAN_FEATURE_RELIABLE_MCAST -/** - @brief WDI_lbpLeaderReq will be called when the upper MAC - requests the device to enable LBP reliable multicast. - - In state BUSY this request will be queued. Request won't - be allowed in any other state. - - - @param wdiLbpLeaderReq: - - @see WDI_Start - @return Result of the function call -*/ -WDI_Status -WDI_LbpLeaderReq -( - WDI_LbpLeaderReqParams *wdiLbpLeaderReqParams, - WDI_LbpLeaderRspCb lbpLeaderRspCb, - void *usrData -); - -/** - @brief WDI_lbpUpdateInd will be called when the upper MAC - requests the device to enable LBP reliable multicast. - - In state BUSY this request will be queued. Request won't - be allowed in any other state. - - - @param wdiLbpUpdateInd: - - - @see WDI_Start - @return Result of the function call -*/ -WDI_Status -WDI_LbpUpdateInd -( - WDI_LbpUpdateIndParams *wdiLbpUpdateIndParams -); -#endif /* WLAN_FEATURE_RELIABLE_MCAST */ - /** @brief WDI_RateUpdateInd will be called when the upper MAC requests the device to update rates. @@ -10319,26 +10032,6 @@ WDI_RateUpdateInd WDI_RateUpdateIndParams *wdiRateUpdateIndParams ); -#ifdef FEATURE_CESIUM_PROPRIETARY -/** - @brief WDI_TXFailMonitorStartStopInd - Forward TX monitor start/stop event - - @param - - WDI_TXFailMonitorInd - - @see - @return Result of the function call -*/ - -WDI_Status -WDI_TXFailMonitorStartStopInd -( - WDI_TXFailMonitorInd *wdiTXFailMonitorInd -); -#endif /* FEATURE_CESIUM_PROPRIETARY */ - #ifdef WLAN_FEATURE_GTK_OFFLOAD /** @brief WDI_GTKOffloadReq will be called when the upper MAC @@ -10625,45 +10318,6 @@ WDI_TriggerBatchScanResultInd(WDI_TriggerBatchScanResultIndType *pWdiReq); #endif /*FEATURE_WLAN_BATCH_SCAN*/ -#ifdef FEATURE_CESIUM_PROPRIETARY -/** - @brief Process LBP Update Indication and post it to HAL - - @param pWDICtx: pointer to the WLAN DAL context - pEventData: pointer to the event information structure - - @see - @return Result of the function call -*/ - -WDI_Status -WDI_IbssPeerInfoReq -( - WDI_IbssPeerInfoReqType* wdiPeerInfoReqParams, - WDI_IbssPeerInfoReqCb wdiIbssPeerInfoReqCb, - void* pUserData -); - - -/** - @brief WDI_IBSSRouteTableUpdateInd - Forward the IBSS Route Table Update Indication - - @param - - pwdiIBSSRouteTableInd: IBSS Route table - - @see - @return Success or Failure -*/ - -WDI_Status -WDI_IBSSRouteTableUpdateInd -( - WDI_IBSSRouteTable *pwdiIBSSRouteTable -); -#endif /* FEATURE_CESIUM_PROPRIETARY */ - #ifdef __cplusplus } #endif diff --git a/CORE/WDI/CP/inc/wlan_qct_wdi_bd.h b/CORE/WDI/CP/inc/wlan_qct_wdi_bd.h index 9db4b42651cb..f10e7e99258d 100644 --- a/CORE/WDI/CP/inc/wlan_qct_wdi_bd.h +++ b/CORE/WDI/CP/inc/wlan_qct_wdi_bd.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef WLAN_QCT_WDI_BD_H #define WLAN_QCT_WDI_BD_H @@ -39,9 +38,6 @@ DESCRIPTION This file contains the internal BD definition exposed by the DAL Control Path Core module to be used by the DAL Data Path Core. - - Copyright (c) 2010 Qualcomm Technologies, Inc. All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ===========================================================================*/ diff --git a/CORE/WDI/CP/inc/wlan_qct_wdi_cfg.h b/CORE/WDI/CP/inc/wlan_qct_wdi_cfg.h index 5fc463b9d72e..e35b3ea8ba33 100644 --- a/CORE/WDI/CP/inc/wlan_qct_wdi_cfg.h +++ b/CORE/WDI/CP/inc/wlan_qct_wdi_cfg.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef WLAN_QCT_WDI_CFG_H #define WLAN_QCT_WDI_CFG_H @@ -41,9 +40,6 @@ DESCRIPTION !! The values in here should be an identical match of the HAL defines by the same name !! - - Copyright (c) 2010 Qualcomm Technologies, Inc. All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ===========================================================================*/ diff --git a/CORE/WDI/CP/inc/wlan_qct_wdi_dp.h b/CORE/WDI/CP/inc/wlan_qct_wdi_dp.h index d3aa8dfbac39..d85ca382e6cf 100644 --- a/CORE/WDI/CP/inc/wlan_qct_wdi_dp.h +++ b/CORE/WDI/CP/inc/wlan_qct_wdi_dp.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef WLAN_QCT_WDI_DP_H #define WLAN_QCT_WDI_DP_H @@ -39,9 +38,6 @@ DESCRIPTION This file contains the internal API exposed by the DAL Control Path Core module to be used by the DAL Data Path Core. - - Copyright (c) 2010 Qualcomm Technologies, Inc. All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ===========================================================================*/ @@ -119,11 +115,6 @@ when who what, where, why #define HAL_TDLS_PEER_STA_MASK 0x80 //bit 7 set for TDLS peer station #endif -#ifdef WLAN_FEATURE_RELIABLE_MCAST -#define WDI_RELIABLE_MCAST_REQUESTED_MASK 0x100 -#define WDI_USE_BD_RATE_MASK 0x1000 -#endif - /*Macro for getting the size of the TX BD*/ #define WDI_TX_BD_HEADER_SIZE sizeof(WDI_TxBdType) diff --git a/CORE/WDI/CP/inc/wlan_qct_wdi_i.h b/CORE/WDI/CP/inc/wlan_qct_wdi_i.h index 325a6d8d3db6..7358e9a2115d 100644 --- a/CORE/WDI/CP/inc/wlan_qct_wdi_i.h +++ b/CORE/WDI/CP/inc/wlan_qct_wdi_i.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef WLAN_QCT_WDI_I_H #define WLAN_QCT_WDI_I_H @@ -39,9 +38,6 @@ DESCRIPTION This file contains the internal API exposed by the DAL Control Path Core module to be used by the DAL Data Path Core. - - Copyright (c) 2010 Qualcomm Technologies, Inc. All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ===========================================================================*/ @@ -438,20 +434,14 @@ typedef enum /* WLAN FW LPHB config request */ WDI_LPHB_CFG_REQ = 85, - /* Send LBP Leader Request */ - WDI_LBP_LEADER_REQ = 86, - -#ifdef FEATURE_CESIUM_PROPRIETARY - WDI_HAL_IBSS_PEER_INFO_REQ = 87, -#endif /* FEATURE_CESIUM_PROPRIETARY */ #ifdef FEATURE_WLAN_BATCH_SCAN /* WLAN FW set batch scan request */ - WDI_SET_BATCH_SCAN_REQ = 88, + WDI_SET_BATCH_SCAN_REQ = 86, #endif /*WLAN DAL Set Max Tx Power Per band Request*/ - WDI_SET_MAX_TX_POWER_PER_BAND_REQ = 89, + WDI_SET_MAX_TX_POWER_PER_BAND_REQ = 87, WDI_MAX_REQ, @@ -476,9 +466,6 @@ typedef enum /* Send a delete periodic Tx pattern indicationto HAL */ WDI_DEL_PERIODIC_TX_PATTERN_IND, - /* Send LBP Update Indication */ - WDI_LBP_UPDATE_IND, - /* Send Rate Update Indication */ WDI_RATE_UPDATE_IND, @@ -489,14 +476,6 @@ typedef enum WDI_TRIGGER_BATCH_SCAN_RESULT_IND, #endif -#ifdef FEATURE_CESIUM_PROPRIETARY - /* IBSS Route Table Update Indication */ - WDI_IBSS_ROUTE_TABLE_UPDATE_IND, - - /* TX Monitor start/stop indication */ - WDI_TX_FAIL_MONITOR_IND, -#endif - /*Keep adding the indications to the max request such that we keep them sepparate */ @@ -758,18 +737,11 @@ typedef enum /* WLAN FW LPHB Config response */ WDI_LPHB_CFG_RESP = 84, - /* Reliable Multicast Leader Response from FW to Host */ - WDI_LBP_LEADER_RESP = 85, - -#ifdef FEATURE_CESIUM_PROPRIETARY - WDI_HAL_IBSS_PEER_INFO_RSP = 86, -#endif /* FEATURE_CESIUM_PROPRIETARY */ - #ifdef FEATURE_WLAN_BATCH_SCAN - WDI_SET_BATCH_SCAN_RESP = 87, + WDI_SET_BATCH_SCAN_RESP = 85, #endif - WDI_SET_MAX_TX_POWER_PER_BAND_RSP = 88, + WDI_SET_MAX_TX_POWER_PER_BAND_RSP = 86, /*------------------------------------------------------------------------- Indications @@ -830,15 +802,8 @@ typedef enum /* Periodic Tx Pattern Indication from FW to Host */ WDI_HAL_PERIODIC_TX_PTRN_FW_IND = WDI_HAL_IND_MIN + 16, - /* Reliable Multicast Update Indication from FW to Host */ - WDI_LBP_UPDATE_IND_TO_HOST = WDI_HAL_IND_MIN + 17, - #ifdef FEATURE_WLAN_BATCH_SCAN - WDI_BATCHSCAN_RESULT_IND = WDI_HAL_IND_MIN + 18, -#endif - -#ifdef FEATURE_CESIUM_PROPRIETARY - WDI_HAL_TX_FAIL_IND = WDI_HAL_IND_MIN + 19, + WDI_BATCHSCAN_RESULT_IND = WDI_HAL_IND_MIN + 17, #endif WDI_MAX_RESP @@ -3024,24 +2989,6 @@ WDI_ProcessDelPeriodicTxPtrnInd #endif -#ifdef FEATURE_CESIUM_PROPRIETARY -/** - @brief Process TX Fail monitor indication - - @param pWDICtx: pointer to the WLAN DAL context - pEventData: pointer to the event information structure - - @see - @return Result of the function call -*/ -WDI_Status -WDI_ProcessTXFailMonitor -( - WDI_ControlBlockType* pWDICtx, - WDI_EventInfoType* pEventData -); -#endif /* FEATURE_CESIUM_PROPRIETARY */ - /*======================================================================== Main DAL Control Path Response Processing API ========================================================================*/ @@ -4393,24 +4340,6 @@ WDI_ProcessTdlsInd WDI_EventInfoType* pEventData ); -#ifdef FEATURE_CESIUM_PROPRIETARY -/** -*@brief Process Tx Fail Indication - - @param pWDICtx: pointer to the WLAN DAL context - pEventData: pointer to the event information structure - - @see - @return Result of the function call -*/ -WDI_Status -WDI_ProcessTXFailInd -( - WDI_ControlBlockType* pWDICtx, - WDI_EventInfoType* pEventData -); -#endif /* FEATURE_CESIUM_PROPRIETARY */ - /** *@brief Process Noa Start Indication function (called when an indication of this kind is being received over the @@ -5612,162 +5541,6 @@ WDI_ProcessRateUpdateInd WDI_EventInfoType* pEventData ); -#if defined WLAN_FEATURE_RELIABLE_MCAST -/** - @brief Process LBP Leader Request and post it to HAL - - @param pWDICtx: pointer to the WLAN DAL context - pEventData: pointer to the event information structure -*/ -WDI_Status -WDI_ProcessLBPLeaderReq -( - WDI_ControlBlockType* pWDICtx, - WDI_EventInfoType* pEventData -); - -/** -*@brief Process Leader Selection response where the firmware - provides a list of candidates that can be used as leaders - a.k.a. a receiver that can ACK multicast frames - - @param pWDICtx: pointer to the WLAN DAL context - pEventData: pointer to the event information structure - - @see - @return Result of the function call -*/ -WDI_Status -WDI_ProcessLBPLeaderResp -( - WDI_ControlBlockType* pWDICtx, - WDI_EventInfoType* pEventData -); - -/** - @brief Process LBP Update Indication and post it to HAL - - @param pWDICtx: pointer to the WLAN DAL context - pEventData: pointer to the event information structure - - @see - @return Result of the function call -*/ -WDI_Status -WDI_ProcessLBPUpdateInd -( - WDI_ControlBlockType* pWDICtx, - WDI_EventInfoType* pEventData -); - -/** - @brief WDI_LbpUpdateInd will be called when the upper MAC - requests the device to enable LBP reliable multicast. - - In state BUSY this request will be queued. Request won't - be allowed in any other state. - - - @param wdiLbpUpdateIndParams: - - - @see WDI_Start - @return Result of the function call -*/ -WDI_Status -WDI_LbpUpdateInd -( - WDI_LbpUpdateIndParams *wdiLbpUpdateIndParams -); - -/** -*@brief Process Leader Selection response where the firmware - provides a list of candidates that can be used as leaders - a.k.a. a receiver that can ACK multicast frames - - @param pWDICtx: pointer to the WLAN DAL context - pEventData: pointer to the event information structure - - @see - @return Result of the function call -*/ -WDI_Status -WDI_ProcessLBPLeaderResp -( - WDI_ControlBlockType* pWDICtx, - WDI_EventInfoType* pEventData -); - -/** -*@brief Process Update Indication where the firmware - provides a list of candidates that can be used as leaders - a.k.a. a receiver that can ACK multicast frames - - @param pWDICtx: pointer to the WLAN DAL context - pEventData: pointer to the event information structure - - @see - @return Result of the function call -*/ -WDI_Status -WDI_ProcessLBPUpdateIndToHost -( - WDI_ControlBlockType* pWDICtx, - WDI_EventInfoType* pEventData -); -#endif /* WLAN_FEATURE_RELIABLE_MCAST */ - -#ifdef FEATURE_CESIUM_PROPRIETARY - -/** - @brief Process LBP Update Indication and post it to HAL - - @param pWDICtx: pointer to the WLAN DAL context - pEventData: pointer to the event information structure - - @see - @return Result of the function call -*/ -WDI_Status -WDI_ProcessIbssPeerInfoReq -( - WDI_ControlBlockType* pWDICtx, - WDI_EventInfoType* pEventData -); - -/** - @brief Process LBP Update Indication and post it to HAL - - @param pWDICtx: pointer to the WLAN DAL context - pEventData: pointer to the event information structure - - @see - @return Result of the function call -*/ -WDI_Status -WDI_ProcessIbssPeerInfoRsp -( - WDI_ControlBlockType* pWDICtx, - WDI_EventInfoType* pEventData -); - -/** - @brief Sends IBSS Route Table Update Indication to f/w - - @param pWDICtx: pointer to the WLAN DAL context - pEventData: pointer to the event information structure - - @see - @return Result of the function call -*/ -WDI_Status -WDI_ProcessIBSSRouteTableUpdateInd -( - WDI_ControlBlockType* pWDICtx, - WDI_EventInfoType* pEventData -); -#endif /* FEATURE_CESIUM_PROPRIETARY */ - #ifdef FEATURE_WLAN_BATCH_SCAN /** @brief WDI_ProcessSetBatchScanRsp - diff --git a/CORE/WDI/CP/inc/wlan_qct_wdi_sta.h b/CORE/WDI/CP/inc/wlan_qct_wdi_sta.h index c8ae6f1f0b98..bdb06c51d40f 100644 --- a/CORE/WDI/CP/inc/wlan_qct_wdi_sta.h +++ b/CORE/WDI/CP/inc/wlan_qct_wdi_sta.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef WLAN_QCT_DAL_STA_H #define WLAN_QCT_DAL_STA_H @@ -39,9 +38,6 @@ DESCRIPTION This file contains the internal API exposed by the STA Management entity to be used by the DAL Control Path Core . - - Copyright (c) 2010 Qualcomm Technologies, Inc. All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ===========================================================================*/ diff --git a/CORE/WDI/CP/src/wlan_qct_wdi.c b/CORE/WDI/CP/src/wlan_qct_wdi.c index 146effa08dae..e4c2a54afeb9 100644 --- a/CORE/WDI/CP/src/wlan_qct_wdi.c +++ b/CORE/WDI/CP/src/wlan_qct_wdi.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /*=========================================================================== W L A N _ Q C T _ W D I. C @@ -41,10 +40,6 @@ Are listed for each API below. - - Copyright (c) 2008 Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ===========================================================================*/ /*=========================================================================== @@ -380,17 +375,6 @@ WDI_ReqProcFuncType pfnReqProcTbl[WDI_MAX_UMAC_IND] = #else NULL, #endif /* FEATURE_WLAN_LPHB */ -#if defined WLAN_FEATURE_RELIABLE_MCAST - WDI_ProcessLBPLeaderReq, /* WDI_LBP_LEADER_REQ */ -#else - NULL, -#endif /* WLAN_FEATURE_RELIABLE_MCAST */ - -#ifdef FEATURE_CESIUM_PROPRIETARY - WDI_ProcessIbssPeerInfoReq, /* WDI_HAL_IBSS_PEER_INFO_REQ */ -#else - NULL, -#endif /* FEATURE_CESIUM_PROPRIETARY */ #ifdef FEATURE_WLAN_BATCH_SCAN WDI_ProcessSetBatchScanReq, /* WDI_SET_BATCH_SCAN_REQ */ @@ -413,11 +397,6 @@ WDI_ReqProcFuncType pfnReqProcTbl[WDI_MAX_UMAC_IND] = #endif WDI_ProcessAddPeriodicTxPtrnInd, /* WDI_ADD_PERIODIC_TX_PATTERN_IND */ WDI_ProcessDelPeriodicTxPtrnInd, /* WDI_DEL_PERIODIC_TX_PATTERN_IND */ -#if defined WLAN_FEATURE_RELIABLE_MCAST - WDI_ProcessLBPUpdateInd, /* WDI_LBP_UPDATE_IND */ -#else - NULL, -#endif /* WLAN_FEATURE_RELIABLE_MCAST */ WDI_ProcessRateUpdateInd, /* WDI_RATE_UPDATE_IND */ #ifdef FEATURE_WLAN_BATCH_SCAN WDI_ProcessStopBatchScanInd, /* WDI_STOP_BATCH_SCAN_IND */ @@ -426,16 +405,6 @@ WDI_ReqProcFuncType pfnReqProcTbl[WDI_MAX_UMAC_IND] = NULL, NULL, #endif /* FEATURE_WLAN_BATCH_SCAN */ -#ifdef FEATURE_CESIUM_PROPRIETARY - WDI_ProcessIBSSRouteTableUpdateInd, /* WDI_IBSS_ROUTE_TABLE_UPDATE_IND */ -#else - NULL, -#endif /* FEATURE_CESIUM_PROPRIETARY */ -#ifdef FEATURE_CESIUM_PROPRIETARY - WDI_ProcessTXFailMonitor, -#else - NULL, -#endif }; @@ -619,15 +588,6 @@ WDI_RspProcFuncType pfnRspProcTbl[WDI_MAX_RESP] = #else NULL, #endif /* FEATURE_WLAN_LPHB */ -#if defined WLAN_FEATURE_RELIABLE_MCAST - WDI_ProcessLBPLeaderResp, /* WDI_LBP_LEADER_RESP */ -#else - NULL, -#endif /* WLAN_FEATURE_RELIABLE_MCAST */ - -#ifdef FEATURE_CESIUM_PROPRIETARY - WDI_ProcessIbssPeerInfoRsp, /* WDI_HAL_GET_IBSS_PEER_INFO_RSP */ -#endif /* FEATURE_CESIUM_PROPRIETARY */ #ifdef FEATURE_WLAN_BATCH_SCAN WDI_ProcessSetBatchScanRsp, /* WDI_SET_BATCH_SCAN_RESP */ @@ -682,23 +642,12 @@ WDI_RspProcFuncType pfnRspProcTbl[WDI_MAX_RESP] = WDI_ProcessPeriodicTxPtrnFwInd, /* WDI_HAL_PERIODIC_TX_PTRN_FW_IND */ -#if defined WLAN_FEATURE_RELIABLE_MCAST - WDI_ProcessLBPUpdateIndToHost, /* WDI_LBP_UPDATE_IND_TO_HOST */ -#else - NULL, -#endif /* WLAN_FEATURE_RELIABLE_MCAST */ - #ifdef FEATURE_WLAN_BATCH_SCAN WDI_ProcessBatchScanResultInd, /* WDI_BATCHSCAN_RESULT_IND */ #else NULL, #endif -#ifdef FEATURE_CESIUM_PROPRIETARY - WDI_ProcessTXFailInd, /*WDI_HAL_TX_FAIL_IND*/ -#else - NULL, -#endif /* FEATURE_CESIUM_PROPRIETARY */ }; @@ -1014,9 +963,6 @@ static char *WDI_getReqMsgString(wpt_uint16 wdiReqMsgId) CASE_RETURN_STRING( WDI_STOP_BATCH_SCAN_IND ); CASE_RETURN_STRING( WDI_TRIGGER_BATCH_SCAN_RESULT_IND); #endif -#ifdef FEATURE_CESIUM_PROPRIETARY - CASE_RETURN_STRING( WDI_TX_FAIL_MONITOR_IND ); -#endif /* FEATURE_CESIUM_PROPRIETARY */ default: return "Unknown WDI MessageId"; } @@ -1120,14 +1066,7 @@ static char *WDI_getRespMsgString(wpt_uint16 wdiRespMsgId) CASE_RETURN_STRING( WDI_SHUTDOWN_RESP ); CASE_RETURN_STRING( WDI_SET_POWER_PARAMS_RESP ); CASE_RETURN_STRING( WDI_GET_ROAM_RSSI_RESP ); -#if defined WLAN_FEATURE_RELIABLE_MCAST - CASE_RETURN_STRING( WDI_LBP_LEADER_RESP ); - CASE_RETURN_STRING( WDI_LBP_UPDATE_IND_TO_HOST ); -#endif /* WLAN_FEATURE_RELIABLE_MCAST */ - -#ifdef FEATURE_CESIUM_PROPRIETARY - CASE_RETURN_STRING( WDI_HAL_IBSS_PEER_INFO_RSP ); -#endif /* FEATURE_CESIUM_PROPRIETARY */ + #ifdef FEATURE_WLAN_BATCH_SCAN CASE_RETURN_STRING( WDI_SET_BATCH_SCAN_RESP); #endif @@ -20352,63 +20291,6 @@ WDI_ProcessTdlsInd }/*WDI_ProcessTdlsInd*/ #endif -#ifdef FEATURE_CESIUM_PROPRIETARY -/** -*@brief Process Tx Fail Indication - - @param pWDICtx: pointer to the WLAN DAL context - pEventData: pointer to the event information structure - - @see - @return Result of the function call -*/ -WDI_Status -WDI_ProcessTXFailInd -( - WDI_ControlBlockType* pWDICtx, - WDI_EventInfoType* pEventData -) -{ - WDI_LowLevelIndType wdiInd; - tHalTXFailIndMsg halTXFailIndMsg; - /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ - - /*------------------------------------------------------------------------- - Sanity check - -------------------------------------------------------------------------*/ - if (( NULL == pWDICtx ) || ( NULL == pEventData ) || - ( NULL == pEventData->pEventData )) - { - WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "%s: Invalid parameters", __func__); - WDI_ASSERT( 0 ); - return WDI_STATUS_E_FAILURE; - } - /*------------------------------------------------------------------------- - Extract indication and send it to UMAC - -------------------------------------------------------------------------*/ - wpalMemoryCopy( &halTXFailIndMsg.txFailIndParams, - pEventData->pEventData, - sizeof(halTXFailIndMsg.txFailIndParams) ); - - /*Fill in the indication parameters*/ - wdiInd.wdiIndicationType = WDI_TX_FAIL_IND; - - wdiInd.wdiIndicationData.wdiTXFailInd.seqNo - = halTXFailIndMsg.txFailIndParams.seqNo; - - wpalMemoryCopy(wdiInd.wdiIndicationData.wdiTXFailInd.macAddr, - halTXFailIndMsg.txFailIndParams.macAddr, - sizeof(wdiInd.wdiIndicationData.wdiTXFailInd.macAddr)); - - /*Notify UMAC*/ - if (pWDICtx->wdiLowLevelIndCB) - pWDICtx->wdiLowLevelIndCB( &wdiInd, pWDICtx->pIndUserData ); - - return WDI_STATUS_SUCCESS; -}/*WDI_ProcessTdlsInd*/ -#endif /* FEATURE_CESIUM_PROPRIETARY */ - /** *@brief Process Noa Start Indication function (called when an indication of this kind is being received over the @@ -22935,19 +22817,7 @@ WDI_2_HAL_REQ_TYPE return WLAN_HAL_ADD_PERIODIC_TX_PTRN_IND; case WDI_DEL_PERIODIC_TX_PATTERN_IND: return WLAN_HAL_DEL_PERIODIC_TX_PTRN_IND; -#if defined WLAN_FEATURE_RELIABLE_MCAST - case WDI_LBP_LEADER_REQ: - return WLAN_HAL_LBP_LEADER_REQ; - case WDI_LBP_UPDATE_IND: - return WLAN_HAL_LBP_UPDATE_IND; -#endif /* WLAN_FEATURE_RELIABLE_MCAST */ - -#ifdef FEATURE_CESIUM_PROPRIETARY - case WDI_HAL_IBSS_PEER_INFO_REQ: - return WLAN_HAL_GET_IBSS_PEER_INFO_REQ; - case WDI_IBSS_ROUTE_TABLE_UPDATE_IND: - return WLAN_HAL_IP_FORWARD_TABLE_UPDATE_IND; -#endif /* FEATURE_CESIUM_PROPRIETARY */ + case WDI_RATE_UPDATE_IND: return WLAN_HAL_RATE_UPDATE_IND; @@ -22960,10 +22830,6 @@ WDI_2_HAL_REQ_TYPE return WLAN_HAL_BATCHSCAN_TRIGGER_RESULT_IND; #endif -#ifdef FEATURE_CESIUM_PROPRIETARY - case WDI_TX_FAIL_MONITOR_IND: - return WLAN_HAL_TX_FAIL_MONITOR_IND; -#endif default: return WLAN_HAL_MSG_MAX; } @@ -23214,18 +23080,6 @@ case WLAN_HAL_DEL_STA_SELF_RSP: case WLAN_HAL_PERIODIC_TX_PTRN_FW_IND: return WDI_HAL_PERIODIC_TX_PTRN_FW_IND; -#if defined WLAN_FEATURE_RELIABLE_MCAST - case WLAN_HAL_LBP_LEADER_RSP: - return WDI_LBP_LEADER_RESP; - case WLAN_HAL_LBP_UPDATE_IND: - return WDI_LBP_UPDATE_IND_TO_HOST; -#endif /* WLAN_FEATURE_RELIABLE_MCAST */ - -#ifdef FEATURE_CESIUM_PROPRIETARY - case WLAN_HAL_GET_IBSS_PEER_INFO_RSP: - return WDI_HAL_IBSS_PEER_INFO_RSP; -#endif /* FEATURE_CESIUM_PROPRIETARY */ - #ifdef FEATURE_WLAN_BATCH_SCAN case WLAN_HAL_BATCHSCAN_SET_RSP: return WDI_SET_BATCH_SCAN_RESP; @@ -23233,11 +23087,6 @@ case WLAN_HAL_DEL_STA_SELF_RSP: return WDI_BATCHSCAN_RESULT_IND; #endif // FEATURE_WLAN_BATCH_SCAN -#ifdef FEATURE_CESIUM_PROPRIETARY - case WLAN_HAL_TX_FAIL_IND: - return WDI_HAL_TX_FAIL_IND; -#endif /* FEATURE_CESIUM_PROPRIETARY */ - default: return eDRIVER_TYPE_MAX; } @@ -26998,45 +26847,6 @@ WDI_dhcpStopInd return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData); } -#ifdef FEATURE_CESIUM_PROPRIETARY -/** - @brief WDI_TXFailMonitorInd - Host will send an event to the FW to start TX Fail Monitor - - @param - WDI_TXFailMonitorInd - @see - @return Result of the function call -*/ -WDI_Status -WDI_TXFailMonitorStartStopInd -( - WDI_TXFailMonitorInd *wdiTXFailMonitorInd -) -{ - WDI_EventInfoType wdiEventData; - - /*------------------------------------------------------------------------ - Sanity Check - ------------------------------------------------------------------------*/ - if ( eWLAN_PAL_FALSE == gWDIInitialized ) - { - WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, - "WDI API call before module is initialized - Fail request"); - - return WDI_STATUS_E_NOT_ALLOWED; - } - - wdiEventData.wdiRequest = WDI_TX_FAIL_MONITOR_IND; - wdiEventData.pEventData = wdiTXFailMonitorInd; - wdiEventData.uEventDataSize = sizeof(wdiTXFailMonitorInd); - wdiEventData.pCBfnc = NULL; - wdiEventData.pUserData = NULL; - - return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData); -} -#endif /* FEATURE_CESIUM_PROPRIETARY */ - /** @brief Process DHCP Start Indication message and post it to HAL @@ -27179,81 +26989,6 @@ WDI_ProcessDHCPStopInd }/*WDI_ProcessDHCPStopInd*/ -#ifdef FEATURE_CESIUM_PROPRIETARY -/** - @brief Process TX Fail monitor indication - - @param pWDICtx: pointer to the WLAN DAL context - pEventData: pointer to the event information structure - - @see - @return Result of the function call -*/ -WDI_Status -WDI_ProcessTXFailMonitor -( - WDI_ControlBlockType* pWDICtx, - WDI_EventInfoType* pEventData -) -{ - wpt_uint8* pSendBuffer = NULL; - wpt_uint16 usDataOffset = 0; - wpt_uint16 usSendSize = 0; - wpt_uint16 usLen = 0; - WDI_TXFailMonitorInd* pwdiTxFailMonitorInd = NULL; - tTXFailMonitorInfo* pTXFailMonitorInfo; - WDI_Status wdiStatus; - /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ - - WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO, - "%s", __func__); - - /*------------------------------------------------------------------------- - Sanity check - -------------------------------------------------------------------------*/ - - if (( NULL == pEventData ) || ( NULL == pEventData->pEventData )) - { - WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL, - "%s: Invalid parameters", __func__); - WDI_ASSERT(0); - return WDI_STATUS_E_FAILURE; - } - pwdiTxFailMonitorInd = (WDI_TXFailMonitorInd*)pEventData->pEventData; - /*----------------------------------------------------------------------- - Get message buffer - -----------------------------------------------------------------------*/ - - if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, - WDI_TX_FAIL_MONITOR_IND, - sizeof(tDHCPInfo), - &pSendBuffer, &usDataOffset, &usSendSize))|| - ( usSendSize < (usDataOffset + usLen ))) - { - WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL, - "Unable to get send buffer in DHCP Start req %p ", - pEventData); - wpalMemoryFree(pwdiTxFailMonitorInd); - WDI_ASSERT(0); - return WDI_STATUS_E_FAILURE; - } - - pTXFailMonitorInfo = (tTXFailMonitorInfo*)pSendBuffer+usDataOffset; - pTXFailMonitorInfo->tx_fail_count = pwdiTxFailMonitorInd->tx_fail_count; - - pWDICtx->pReqStatusUserData = pwdiTxFailMonitorInd->pUserData; - pWDICtx->wdiReqStatusCB = pwdiTxFailMonitorInd->wdiReqStatusCB; - /*------------------------------------------------------------------------- - Send TX Fail Monitor start/stop indication to HAL - -------------------------------------------------------------------------*/ - wdiStatus = WDI_SendIndication( pWDICtx, pSendBuffer, usSendSize); - - wpalMemoryFree(pwdiTxFailMonitorInd); - - return (wdiStatus != WDI_STATUS_SUCCESS)?wdiStatus:WDI_STATUS_SUCCESS_SYNC; -}/*WDI_ProcessTXFailMonitor*/ -#endif /* FEATURE_CESIUM_PROPRIETARY */ - #ifdef WLAN_FEATURE_GTK_OFFLOAD /** @brief WDI_GTKOffloadReq will be called when the upper MAC @@ -28959,809 +28694,6 @@ WDI_ProcessRateUpdateInd } /* WDI_ProcessRateUpdateInd */ -#if defined WLAN_FEATURE_RELIABLE_MCAST -/** -*@brief Process Leader Selection response where the firmware - provides a list of candidates that can be used as leaders - a.k.a. a receiver that can ACK multicast frames - - @param pWDICtx: pointer to the WLAN DAL context - pEventData: pointer to the event information structure - - @see - @return Result of the function call -*/ -WDI_Status -WDI_ProcessLBPLeaderResp -( - WDI_ControlBlockType* pWDICtx, - WDI_EventInfoType* pEventData -) -{ - tHalLbpLeaderRspMsg halLbpLeaderRspMsg; - WDI_LbpLeaderRspCb wdiLbpLeaderRspCb; - WDI_LbpRspParamsType wdiLbpRsp; - - /* Sanity check */ - if (( NULL == pWDICtx ) || ( NULL == pEventData ) || - ( NULL == pEventData->pEventData )) - { - WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "%s: Invalid parameters", __func__); - WDI_ASSERT( 0 ); - return WDI_STATUS_E_FAILURE; - } - - wdiLbpLeaderRspCb = (WDI_LbpLeaderRspCb)pWDICtx->pfncRspCB; - - /* Extract indication and send it to UMAC */ - wpalMemoryCopy( &halLbpLeaderRspMsg.leaderRspParams, - pEventData->pEventData, - sizeof(halLbpLeaderRspMsg.leaderRspParams) ); - - wdiLbpRsp.status = halLbpLeaderRspMsg.leaderRspParams.status; - wpalMemoryCopy(wdiLbpRsp.mcastTransmitter, - &halLbpLeaderRspMsg.leaderRspParams.mcastTransmitter, - sizeof(wdiLbpRsp.mcastTransmitter)); - wpalMemoryCopy(wdiLbpRsp.mcastGroup, - &halLbpLeaderRspMsg.leaderRspParams.mcastGroup, - sizeof(wdiLbpRsp.mcastGroup)); - - switch (halLbpLeaderRspMsg.leaderRspParams.cmd) - { - default: - WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "%s: Invalid command %d", __func__, - halLbpLeaderRspMsg.leaderRspParams.cmd); - return WDI_STATUS_E_FAILURE; - - case WLAN_HAL_SUGGEST_LEADER: - { - /* Fill in the indication parameters */ - wdiLbpRsp.cmd = eWDI_SUGGEST_LEADER_CMD; - wpalMemoryCopy(wdiLbpRsp.leader, - &halLbpLeaderRspMsg.leaderRspParams.leader, - sizeof(wdiLbpRsp.leader)); - WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO, - "%s Suggest_Leader", __func__); - break; - } - - case WLAN_HAL_BECOME_LEADER: - { - /* Fill in the indication parameters */ - wdiLbpRsp.cmd = eWDI_BECOME_LEADER_CMD; - WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO, - "%s Become_Leader", __func__); - break; - } - } - - /* Notify UMAC */ - wdiLbpLeaderRspCb(&wdiLbpRsp, pWDICtx->pRspCBUserData); - - return WDI_STATUS_SUCCESS; -} - -/** -*@brief Process Update Indication where the firmware - provides a list of candidates that can be used as leaders - a.k.a. a receiver that can ACK multicast frames - - @param pWDICtx: pointer to the WLAN DAL context - pEventData: pointer to the event information structure - - @see - @return Result of the function call -*/ -WDI_Status -WDI_ProcessLBPUpdateIndToHost -( - WDI_ControlBlockType* pWDICtx, - WDI_EventInfoType* pEventData -) -{ - WDI_LowLevelIndType wdiInd; - tHalLbpUpdateInd halLbpUpdateInd; - - /* Sanity check */ - if (( NULL == pWDICtx ) || ( NULL == pEventData ) || - ( NULL == pEventData->pEventData )) - { - WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "%s: Invalid parameters", __func__); - WDI_ASSERT( 0 ); - return WDI_STATUS_E_FAILURE; - } - - /* Extract indication and send it to UMAC */ - wpalMemoryCopy( &halLbpUpdateInd.leaderIndParams, - pEventData->pEventData, - sizeof(halLbpUpdateInd.leaderIndParams) ); - - switch (halLbpUpdateInd.leaderIndParams.indication) - { - default: - WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "%s: Invalid command %d", __func__, - halLbpUpdateInd.leaderIndParams.indication); - return WDI_STATUS_E_FAILURE; - - case WLAN_HAL_LEADER_PICK_NEW: - { - /* Fill in the indication parameters */ - wdiInd.wdiIndicationType = WDI_LBP_LEADER_PICK_NEW; - wdiInd.wdiIndicationData.wdiLbpPickNewLeaderInd.indication - = halLbpUpdateInd.leaderIndParams.indication; - wdiInd.wdiIndicationData.wdiLbpPickNewLeaderInd.role - = halLbpUpdateInd.leaderIndParams.role; - wpalMemoryCopy(wdiInd.wdiIndicationData.wdiLbpPickNewLeaderInd. \ - mcastTransmitter, - &halLbpUpdateInd.leaderIndParams.mcastTransmitter, - sizeof(tSirMacAddr) ); - wpalMemoryCopy(wdiInd.wdiIndicationData.wdiLbpPickNewLeaderInd.mcastGroup, - &halLbpUpdateInd.leaderIndParams.mcastGroup, - sizeof(tSirMacAddr) ); - wpalMemoryCopy(wdiInd.wdiIndicationData.wdiLbpPickNewLeaderInd.mcastLeader, - &halLbpUpdateInd.leaderIndParams.mcastLeader, - sizeof(tSirMacAddr) ); - wpalMemoryCopy(wdiInd.wdiIndicationData.wdiLbpPickNewLeaderInd.leader, - &halLbpUpdateInd.leaderIndParams.leader, - sizeof(tSirMacAddr) * HAL_NUM_MAX_LEADERS ); - break; - } - } - - - /* Notify UMAC */ - pWDICtx->wdiLowLevelIndCB( &wdiInd, pWDICtx->pIndUserData ); - - return WDI_STATUS_SUCCESS; -} - -/** - @brief WDI_LbpLeaderReq will be called when the upper MAC - requests the device to enable LBP reliable multicast. - - In state BUSY this request will be queued. Request won't - be allowed in any other state. - - - @param wdiLbpLeaderReqParams: - - @see WDI_Start - @return Result of the function call -*/ -WDI_Status -WDI_LbpLeaderReq -( - WDI_LbpLeaderReqParams *wdiLbpLeaderReqParams, - WDI_LbpLeaderRspCb wdiLbpLeaderRspCb, - void *usrData -) -{ - WDI_EventInfoType wdiEventData; - /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ - - /*------------------------------------------------------------------------ - Sanity Check - ------------------------------------------------------------------------*/ - if ( eWLAN_PAL_FALSE == gWDIInitialized ) - { - WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, - "WDI API call before module is initialized - Fail request"); - - return WDI_STATUS_E_NOT_ALLOWED; - } - - /*------------------------------------------------------------------------ - Fill in Event data and post to the Main FSM - ------------------------------------------------------------------------*/ - wdiEventData.wdiRequest = WDI_LBP_LEADER_REQ; - wdiEventData.pEventData = wdiLbpLeaderReqParams; - wdiEventData.uEventDataSize = sizeof(WDI_LbpLeaderReqParams); - wdiEventData.pCBfnc = wdiLbpLeaderRspCb; - wdiEventData.pUserData = usrData; - - return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData); - -} /* WDI_LbpLeaderReq */ - -/** - @brief WDI_LbpUpdateInd will be called when the upper MAC - requests the device to enable LBP reliable multicast. - - In state BUSY this request will be queued. Request won't - be allowed in any other state. - - - @param wdiLbpUpdateIndParams: - - - @see WDI_Start - @return Result of the function call -*/ -WDI_Status -WDI_LbpUpdateInd -( - WDI_LbpUpdateIndParams *wdiLbpUpdateIndParams -) -{ - WDI_EventInfoType wdiEventData; - /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ - - /*------------------------------------------------------------------------ - Sanity Check - ------------------------------------------------------------------------*/ - if ( eWLAN_PAL_FALSE == gWDIInitialized ) - { - WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, - "WDI API call before module is initialized - Fail request"); - - return WDI_STATUS_E_NOT_ALLOWED; - } - - /*------------------------------------------------------------------------ - Fill in Event data and post to the Main FSM - ------------------------------------------------------------------------*/ - wdiEventData.wdiRequest = WDI_LBP_UPDATE_IND; - wdiEventData.pEventData = wdiLbpUpdateIndParams; - wdiEventData.uEventDataSize = sizeof(WDI_LbpUpdateIndParams); - wdiEventData.pCBfnc = NULL; - wdiEventData.pUserData = NULL; - - return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData); - -}/* WDI_LbpUpdateInd */ - -/** - @brief Process LBP Leader Request and post it to HAL - - @param pWDICtx: pointer to the WLAN DAL context - pEventData: pointer to the event information structure - - @see - @return Result of the function call -*/ -WDI_Status -WDI_ProcessLBPLeaderReq -( - WDI_ControlBlockType* pWDICtx, - WDI_EventInfoType* pEventData -) -{ - WDI_Status wdiStatus; - wpt_uint8* pSendBuffer = NULL; - wpt_uint16 usDataOffset = 0; - wpt_uint16 usSendSize = 0; - WDI_LbpLeaderReqParams *pwdiLeaderReq = NULL; - tHalLbpLeaderReqMsg *pLeaderReq; - - /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ - - WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO, - "%s", __func__); - - /*------------------------------------------------------------------------- - Sanity check - -------------------------------------------------------------------------*/ - if (( NULL == pEventData ) || ( NULL == pEventData->pEventData )) - { - WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL, - "%s: Invalid parameters", __func__); - WDI_ASSERT(0); - return WDI_STATUS_E_FAILURE; - } - pwdiLeaderReq = (WDI_LbpLeaderReqParams *)pEventData->pEventData; - /*----------------------------------------------------------------------- - Get message buffer - -----------------------------------------------------------------------*/ - - if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, - WDI_LBP_LEADER_REQ, - sizeof(tHalLbpLeaderReqParams), - &pSendBuffer, &usDataOffset, &usSendSize))|| - ( usSendSize < (usDataOffset + - sizeof(tHalLbpLeaderReqParams) ))) - { - WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL, - "Unable to get send buffer in LBP Leader Req %p ", - pEventData); - WDI_ASSERT(0); - return WDI_STATUS_E_FAILURE; - } - - pLeaderReq = (tHalLbpLeaderReqMsg *)pSendBuffer; - pLeaderReq->leaderReqParams.cmd = pwdiLeaderReq->cmd; - wpalMemoryCopy(pLeaderReq->leaderReqParams.mcastTransmitter, - pwdiLeaderReq->mcastTransmitter, WDI_MAC_ADDR_LEN); - wpalMemoryCopy(pLeaderReq->leaderReqParams.mcastGroup, - pwdiLeaderReq->mcastGroup, WDI_MAC_ADDR_LEN); - wpalMemoryCopy(pLeaderReq->leaderReqParams.blacklist, - pwdiLeaderReq->blacklist, - WDI_MAC_ADDR_LEN * HAL_NUM_MAX_LEADERS); - - pWDICtx->pReqStatusUserData = pEventData->pUserData; - pWDICtx->pfncRspCB = pEventData->pCBfnc; - - /*------------------------------------------------------------------------- - Send LBP Leader Request to HAL - -------------------------------------------------------------------------*/ - wdiStatus = WDI_SendMsg(pWDICtx, pSendBuffer, - usSendSize, pWDICtx->pfncRspCB, - pWDICtx->pReqStatusUserData, - WDI_LBP_LEADER_RESP); - return wdiStatus; - -} /* WDI_ProcessLBPLeaderReq */ - -/** - @brief Process LBP Update Indication and post it to HAL - - @param pWDICtx: pointer to the WLAN DAL context - pEventData: pointer to the event information structure - - @see - @return Result of the function call -*/ -WDI_Status -WDI_ProcessLBPUpdateInd -( - WDI_ControlBlockType* pWDICtx, - WDI_EventInfoType* pEventData -) -{ - wpt_uint8* pSendBuffer = NULL; - wpt_uint16 usDataOffset = 0; - wpt_uint16 usSendSize = 0; - WDI_LbpUpdateIndParams *pwdiUpdateInd = NULL; - tHalLbpUpdateInd *pUpdateInd; - WDI_Status wdiStatus; - - /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ - - WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO, - "%s", __func__); - - /*------------------------------------------------------------------------- - Sanity check - -------------------------------------------------------------------------*/ - if (( NULL == pEventData ) || ( NULL == pEventData->pEventData )) - { - WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL, - "%s: Invalid parameters", __func__); - WDI_ASSERT(0); - return WDI_STATUS_E_FAILURE; - } - pwdiUpdateInd = (WDI_LbpUpdateIndParams *)pEventData->pEventData; - /*----------------------------------------------------------------------- - Get message buffer - -----------------------------------------------------------------------*/ - - if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, - WDI_LBP_UPDATE_IND, - sizeof(tHalLbpUpdateIndParams), - &pSendBuffer, &usDataOffset, &usSendSize))|| - ( usSendSize < (usDataOffset + - sizeof(tHalLbpUpdateIndParams) ))) - { - WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL, - "Unable to get send buffer in LBP Update Indication %p ", - pEventData); - WDI_ASSERT(0); - return WDI_STATUS_E_FAILURE; - } - - pUpdateInd = (tHalLbpUpdateInd *)pSendBuffer; - - pUpdateInd->leaderIndParams.indication = pwdiUpdateInd->indication; - pUpdateInd->leaderIndParams.role = pwdiUpdateInd->role; - - wpalMemoryCopy(pUpdateInd->leaderIndParams.mcastTransmitter, - pwdiUpdateInd->mcastTransmitter, WDI_MAC_ADDR_LEN); - wpalMemoryCopy(pUpdateInd->leaderIndParams.mcastGroup, - pwdiUpdateInd->mcastGroup, WDI_MAC_ADDR_LEN); - wpalMemoryCopy(pUpdateInd->leaderIndParams.mcastLeader, - pwdiUpdateInd->mcastLeader, WDI_MAC_ADDR_LEN); - /* Zero out parameters not needed for this command */ - wpalMemoryZero(pUpdateInd->leaderIndParams.leader, - WDI_MAC_ADDR_LEN * HAL_NUM_MAX_LEADERS); - - - /*------------------------------------------------------------------------- - Send LBP Update Indication to HAL - -------------------------------------------------------------------------*/ - pWDICtx->wdiReqStatusCB = pwdiUpdateInd->wdiReqStatusCB; - pWDICtx->pReqStatusUserData = pwdiUpdateInd->pUserData; - - wdiStatus = WDI_SendIndication(pWDICtx, pSendBuffer, usSendSize); - - return (wdiStatus != WDI_STATUS_SUCCESS) ? - wdiStatus : WDI_STATUS_SUCCESS_SYNC; - -} /* WDI_ProcessLBPUpdateInd */ - -#endif /* WLAN_FEATURE_RELIABLE_MCAST */ - -#ifdef FEATURE_CESIUM_PROPRIETARY -/** - @brief Process LBP Update Indication and post it to HAL - - @param pWDICtx: pointer to the WLAN DAL context - pEventData: pointer to the event information structure - - @see - @return Result of the function call -*/ -WDI_Status -WDI_IbssPeerInfoReq -( - WDI_IbssPeerInfoReqType* wdiPeerInfoReqParams, - WDI_IbssPeerInfoReqCb wdiIbssPeerInfoReqCb, - void* pUserData -) -{ - - WDI_EventInfoType wdiEventData; - - /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ - /*------------------------------------------------------------------------ - Sanity Check - ------------------------------------------------------------------------*/ - if ( eWLAN_PAL_FALSE == gWDIInitialized ) - { - WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, - "WDI API call before module is initialized - Fail request"); - - return WDI_STATUS_E_NOT_ALLOWED; - } - - /*------------------------------------------------------------------------ - Fill in Event data and post to the Main FSM - ------------------------------------------------------------------------*/ - wdiEventData.wdiRequest = WDI_HAL_IBSS_PEER_INFO_REQ; - wdiEventData.pEventData = wdiPeerInfoReqParams; - wdiEventData.uEventDataSize = sizeof(WDI_IbssPeerInfoReqType); - wdiEventData.pCBfnc = wdiIbssPeerInfoReqCb; - wdiEventData.pUserData = pUserData; - - return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData); -} - -/** - @brief Process LBP Update Indication and post it to HAL - - @param pWDICtx: pointer to the WLAN DAL context - pEventData: pointer to the event information structure - - @see - @return Result of the function call -*/ -WDI_Status -WDI_ProcessIbssPeerInfoReq -( - WDI_ControlBlockType* pWDICtx, - WDI_EventInfoType* pEventData -) -{ - WDI_Status wdiStatus; - wpt_uint8* pSendBuffer = NULL; - wpt_uint16 usDataOffset = 0; - wpt_uint16 usSendSize = 0; - WDI_IbssPeerInfoReqType *pwdiInfoReq = NULL; - tHalIbssPeerInfoReq *pPeerInfoReq; - WDI_StaStruct* pSTATable = (WDI_StaStruct*) pWDICtx->staTable; - - /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ - - WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO, - "%s", __func__); - - /*------------------------------------------------------------------------- - Sanity check - -------------------------------------------------------------------------*/ - if (( NULL == pEventData ) || ( NULL == pEventData->pEventData )) - { - WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL, - "%s: Invalid parameters", __func__); - WDI_ASSERT(0); - return WDI_STATUS_E_FAILURE; - } - pwdiInfoReq = (WDI_IbssPeerInfoReqType *)pEventData->pEventData; - /*----------------------------------------------------------------------- - Get message buffer - -----------------------------------------------------------------------*/ - - if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, - WDI_HAL_IBSS_PEER_INFO_REQ, - sizeof(tHalIbssPeerInfoReqParams), - &pSendBuffer, &usDataOffset, &usSendSize))|| - ( usSendSize < (usDataOffset + - sizeof(tHalIbssPeerInfoReqParams) ))) - { - WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL, - "Unable to get send buffer in IBSS Peer Info Req %p ", - pEventData); - WDI_ASSERT(0); - return WDI_STATUS_E_FAILURE; - } - - pPeerInfoReq = (tHalIbssPeerInfoReq *)pSendBuffer; - if (VOS_FALSE == pwdiInfoReq->wdiAllPeerInfoReqd) - { - if (pSTATable[pwdiInfoReq->wdiStaIdx].valid) - { - pPeerInfoReq->ibssPeerInfoReqParams.bssIdx = - pSTATable[pwdiInfoReq->wdiStaIdx].bssIdx; - } - else - { - WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL, - "Unable to find BSSIDX for STAIDX %d ", - pwdiInfoReq->wdiStaIdx); - return WDI_STATUS_E_FAILURE; - } - } - else - pPeerInfoReq->ibssPeerInfoReqParams.bssIdx = 0; - - pPeerInfoReq->ibssPeerInfoReqParams.staIdx = pwdiInfoReq->wdiStaIdx; - pPeerInfoReq->ibssPeerInfoReqParams.allPeerInfoReqd = pwdiInfoReq->wdiAllPeerInfoReqd; - - pWDICtx->pReqStatusUserData = pEventData->pUserData; - pWDICtx->pfncRspCB = pEventData->pCBfnc; - - /*------------------------------------------------------------------------- - Send IBSS Peer Info request to HAL - -------------------------------------------------------------------------*/ - wdiStatus = WDI_SendMsg(pWDICtx, pSendBuffer, - usSendSize, pWDICtx->pfncRspCB, - pWDICtx->pReqStatusUserData, - WDI_HAL_IBSS_PEER_INFO_RSP); - return wdiStatus; -} - -/** - @brief Process LBP Update Indication and post it to HAL - - @param pWDICtx: pointer to the WLAN DAL context - pEventData: pointer to the event information structure - - @see - @return Result of the function call -*/ -WDI_Status -WDI_ProcessIbssPeerInfoRsp -( - WDI_ControlBlockType* pWDICtx, - WDI_EventInfoType* pEventData -) -{ - WDI_IbssPeerInfoReqCb wdiPeerInfoCb = NULL; - tHalIbssPeerParams *pHalPeerInfoParams; - WDI_IbssPeerInfoRspParams wdiPeerInfoRspParams; - wpt_uint32 allocSize=0; - WDI_IbssPeerInfoParams *pPeerInfoParams; - wpt_uint8 wdiCount=0; - - /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ - - wdiPeerInfoCb = (WDI_IbssPeerInfoReqCb)pWDICtx->pfncRspCB; - - /*------------------------------------------------------------------------- - Sanity check - -------------------------------------------------------------------------*/ - if (( NULL == pWDICtx ) || ( NULL == pEventData ) || - ( NULL == pEventData->pEventData)) - { - WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "%s: Invalid parameters", __func__); - WDI_ASSERT(0); - return WDI_STATUS_E_FAILURE; - } - - /*------------------------------------------------------------------------- - Extract response and send it to UMAC - -------------------------------------------------------------------------*/ - pHalPeerInfoParams = - ((tHalIbssPeerInfoRspParams *)pEventData->pEventData)->ibssPeerParams; - wdiPeerInfoRspParams.wdiStatus = - WDI_HAL_2_WDI_STATUS(((tHalIbssPeerInfoRspParams *)pEventData->pEventData)->status); - wdiPeerInfoRspParams.wdiNumPeers = - ((tHalIbssPeerInfoRspParams *)pEventData->pEventData)->numOfPeers; - - /* Size of peer info data received from DAL */ - allocSize = (sizeof(WDI_IbssPeerInfoParams) * (wdiPeerInfoRspParams.wdiNumPeers)); - - pPeerInfoParams = (WDI_IbssPeerInfoParams*)wpalMemoryAllocate(allocSize); - - if (NULL == pPeerInfoParams || - wdiPeerInfoRspParams.wdiNumPeers > WDI_MAX_IBSS_PEER_SUPPORED_STAS) - { - WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL, - "Number of stations %d exceed max supported stations %d ", - wdiPeerInfoRspParams.wdiNumPeers, - WDI_MAX_IBSS_PEER_SUPPORED_STAS); - return WDI_STATUS_MEM_FAILURE; - } - - for (wdiCount = 0; wdiCount < wdiPeerInfoRspParams.wdiNumPeers; wdiCount++) - { - tHalIbssPeerParams *pHalTemp = &pHalPeerInfoParams[wdiCount]; - WDI_IbssPeerInfoParams *pWdiTemp = &pPeerInfoParams[wdiCount]; - pWdiTemp->wdiStaIdx = pHalTemp->staIdx; - pWdiTemp->wdiRssi = pHalTemp->rssi; - pWdiTemp->wdiMcsIndex = pHalTemp->mcsIndex; - pWdiTemp->wdiTxRate = pHalTemp->txRate; - pWdiTemp->wdiTxRateFlags = pHalTemp->txRateFlags; - } - - wdiPeerInfoRspParams.wdiPeerInfoParams = pPeerInfoParams; - - /*Notify UMAC*/ - if (wdiPeerInfoCb) - { - wdiPeerInfoCb(&wdiPeerInfoRspParams, pWDICtx->pRspCBUserData); - } - - /* Free the allocation */ - vos_mem_free (pPeerInfoParams); - - return WDI_STATUS_SUCCESS; -} - -/** - @brief Process IBSS Route table update indication and post it to HAL - - @param pWDICtx: pointer to the WLAN DAL context - pEventData: pointer to the event information structure - - @see - @return Result of the function call -*/ -WDI_Status -WDI_ProcessIBSSRouteTableUpdateInd -( - WDI_ControlBlockType *pWDICtx, - WDI_EventInfoType *pEventData -) -{ - WDI_IBSSRouteTable *pwdiIBSSRouteTable = NULL; - wpt_uint8 *pSendBuffer = NULL; - wpt_uint16 usDataOffset = 0; - wpt_uint16 usSendSize = 0; - WDI_Status wdiStatus; - tWlanIpForwardTableUpdateIndParam *pUpdateIndParam = NULL; - wpt_uint32 usUpdateIndParamSize; - wpt_uint16 i = 0; - - /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ - - WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO, - "%s", __func__); - - /*------------------------------------------------------------------------- - Sanity check - -------------------------------------------------------------------------*/ - if ((NULL == pEventData) || (NULL == pEventData->pEventData)) - { - WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, - "%s: Invalid parameters", __func__); - WDI_ASSERT(0); - return WDI_STATUS_E_FAILURE; - } - - pwdiIBSSRouteTable = - (WDI_IBSSRouteTable*)pEventData->pEventData; - - usUpdateIndParamSize = sizeof(tWlanIpForwardTableUpdateIndParam) + - ((pwdiIBSSRouteTable->numEntries - 1) * - sizeof(tDestIpNextHopMacPair)); - - pUpdateIndParam = (tWlanIpForwardTableUpdateIndParam *)wpalMemoryAllocate( - usUpdateIndParamSize); - - if (NULL == pUpdateIndParam) - { - WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "%s: failed to allocate mem for tWlanIpForwardTableUpdateIndParam", - __func__); - wpalMemoryFree(pwdiIBSSRouteTable); - WDI_ASSERT(0); - return WDI_STATUS_E_FAILURE; - } - - wpalMemoryZero(pUpdateIndParam, usUpdateIndParamSize); - - /*----------------------------------------------------------------------- - Get message buffer - -----------------------------------------------------------------------*/ - - if ((WDI_STATUS_SUCCESS != WDI_GetMessageBuffer(pWDICtx, - WDI_IBSS_ROUTE_TABLE_UPDATE_IND, - usUpdateIndParamSize, - &pSendBuffer, &usDataOffset, &usSendSize))|| - (usSendSize < (usDataOffset + usUpdateIndParamSize))) - { - WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, - "Unable to get send buffer in IBSS Route Table Update Ind"); - wpalMemoryFree(pwdiIBSSRouteTable); - WDI_ASSERT(0); - return WDI_STATUS_E_FAILURE; - } - - pUpdateIndParam->numEntries = pwdiIBSSRouteTable->numEntries; - - for (i = 0; i < pwdiIBSSRouteTable->numEntries; i++) - { - wpalMemoryCopy(&pUpdateIndParam->destIpMacPair[i].destIpv4Addr, - &pwdiIBSSRouteTable->destIpMacPair[i].destIpv4Addr, - HAL_IPV4_ADDR_LEN); - wpalMemoryCopy(&pUpdateIndParam->destIpMacPair[i].nextHopMacAddr, - &pwdiIBSSRouteTable->destIpMacPair[i].nextHopMacAddr, - HAL_MAC_ADDR_LEN); - } - - wpalMemoryCopy(pSendBuffer+usDataOffset, pUpdateIndParam, - usUpdateIndParamSize); - - pWDICtx->wdiReqStatusCB = pwdiIBSSRouteTable->wdiReqStatusCB; - pWDICtx->pReqStatusUserData = pwdiIBSSRouteTable->pUserData; - - wpalMemoryFree(pwdiIBSSRouteTable); - wpalMemoryFree(pUpdateIndParam); - - /*------------------------------------------------------------------------- - Send IBSS Route Table Update Indication to HAL - -------------------------------------------------------------------------*/ - wdiStatus = WDI_SendIndication(pWDICtx, pSendBuffer, usSendSize); - - return (wdiStatus != WDI_STATUS_SUCCESS) ? - wdiStatus : WDI_STATUS_SUCCESS_SYNC; -}/*WDI_ProcessIBSSRouteTableUpdateInd*/ - -/** - @brief WDI_IBSSRouteTableUpdateInd - Forward the IBSS Route Table Update Indication - - @param - - wdiIBSSRouteTableInd: IBSS Route table - - @see - @return Result of the function call -*/ - -WDI_Status -WDI_IBSSRouteTableUpdateInd -( - WDI_IBSSRouteTable *pwdiIBSSRouteTable -) -{ - WDI_EventInfoType wdiEventData; - - /*------------------------------------------------------------------------ - Sanity Check - ------------------------------------------------------------------------*/ - if (eWLAN_PAL_FALSE == gWDIInitialized) - { - WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, - "WDI API call before module is initialized - Fail request"); - - wpalMemoryFree(pwdiIBSSRouteTable); - return WDI_STATUS_E_NOT_ALLOWED; - } - - wdiEventData.wdiRequest = WDI_IBSS_ROUTE_TABLE_UPDATE_IND; - wdiEventData.pEventData = pwdiIBSSRouteTable; - wdiEventData.uEventDataSize = sizeof(*pwdiIBSSRouteTable); - wdiEventData.pCBfnc = NULL; - wdiEventData.pUserData = NULL; - - return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData); -} -#endif /* FEATURE_CESIUM_PROPRIETARY */ - #ifdef FEATURE_WLAN_BATCH_SCAN /** diff --git a/CORE/WDI/CP/src/wlan_qct_wdi_dp.c b/CORE/WDI/CP/src/wlan_qct_wdi_dp.c index 6adad68f3cdd..5c90826d2d16 100644 --- a/CORE/WDI/CP/src/wlan_qct_wdi_dp.c +++ b/CORE/WDI/CP/src/wlan_qct_wdi_dp.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /*=========================================================================== W L A N _ Q C T _ W D I _ D P. C @@ -44,10 +43,6 @@ Are listed for each API below. - - Copyright (c) 2010 Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ===========================================================================*/ /*=========================================================================== @@ -538,12 +533,6 @@ WDI_FillTxBd } #endif -#ifdef FEATURE_WLAN_RELIABLE_MCAST - if(ucTxFlag & WDI_USE_BD_RATE_MASK) - { - pBd->bdRate = WDI_BDRATE_BCDATA_FRAME; - } -#endif pBd->rmf = WDI_RMF_DISABLED; /* sanity: Might already be set by caller, but enforce it here again */ @@ -868,13 +857,6 @@ WDI_FillTxBd WDI_STATableGetStaType(pWDICtx, ucStaId, &ucSTAType); if(!ucUnicastDst) -#ifdef WLAN_FEATURE_RELIABLE_MCAST - /*Check for reliable MCAST enabled bit if set then - queue frames in QID 1 else 0*/ - if ( ucTxFlag & WDI_RELIABLE_MCAST_REQUESTED_MASK ) - pBd->queueId = BTQM_QID1; - else -#endif pBd->queueId = BTQM_QID0; #ifndef HAL_SELF_STA_PER_BSS else if( ucUnicastDst && (ucStaId == pWDICtx->ucSelfStaId)) diff --git a/CORE/WDI/CP/src/wlan_qct_wdi_sta.c b/CORE/WDI/CP/src/wlan_qct_wdi_sta.c index 5f271de62350..427a41118ce8 100644 --- a/CORE/WDI/CP/src/wlan_qct_wdi_sta.c +++ b/CORE/WDI/CP/src/wlan_qct_wdi_sta.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /*=========================================================================== W L A N _ Q C T _ W D I _ S T A . C @@ -41,10 +40,6 @@ Are listed for each API below. - - Copyright (c) 2008 Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ===========================================================================*/ /*=========================================================================== diff --git a/CORE/WDI/DP/inc/wlan_qct_wdi_ds.h b/CORE/WDI/DP/inc/wlan_qct_wdi_ds.h index ce2973760671..26ba8a4db800 100644 --- a/CORE/WDI/DP/inc/wlan_qct_wdi_ds.h +++ b/CORE/WDI/DP/inc/wlan_qct_wdi_ds.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined( __WLAN_QCT_WTI_DS_H ) #define __WLAN_QCT_WTI_DS_H @@ -39,8 +38,6 @@ * This file contains the external API exposed by the * wlan device abstarction layer module. * - * Copyright (c) 2008 Qualcomm Technologies, Inc. All Rights Reserved. - * Qualcomm Technologies Confidential and Proprietary */ diff --git a/CORE/WDI/DP/inc/wlan_qct_wdi_ds_i.h b/CORE/WDI/DP/inc/wlan_qct_wdi_ds_i.h index 5f80db28ee4f..35918ebb83bf 100644 --- a/CORE/WDI/DP/inc/wlan_qct_wdi_ds_i.h +++ b/CORE/WDI/DP/inc/wlan_qct_wdi_ds_i.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined( __WLAN_QCT_WDI_DS_I_H ) #define __WLAN_QCT_WDI_DS_I_H @@ -39,8 +38,6 @@ * This file contains the external API exposed by the * wlan device abstarction layer module. * - * Copyright (c) 2008 Qualcomm Technologies, Inc. All Rights Reserved. - * Qualcomm Technologies Confidential and Proprietary */ #include "wlan_qct_pal_type.h" diff --git a/CORE/WDI/DP/src/wlan_qct_wdi_bd.c b/CORE/WDI/DP/src/wlan_qct_wdi_bd.c index 3e707e667082..d0e297e0ac3c 100644 --- a/CORE/WDI/DP/src/wlan_qct_wdi_bd.c +++ b/CORE/WDI/DP/src/wlan_qct_wdi_bd.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /**========================================================================= * * \file wlan_qct_dti_bd.c @@ -36,8 +35,6 @@ * This file contains the external API implemntation exposed by the * wlan device abstarction layer module. * - * Copyright (c) 2008 Qualcomm Technologies, Inc. All Rights Reserved. - * Qualcomm Technologies Confidential and Proprietary */ #include "wlan_qct_wdi.h" diff --git a/CORE/WDI/DP/src/wlan_qct_wdi_ds.c b/CORE/WDI/DP/src/wlan_qct_wdi_ds.c index 4d3652c3f3e0..f1603127f73b 100644 --- a/CORE/WDI/DP/src/wlan_qct_wdi_ds.c +++ b/CORE/WDI/DP/src/wlan_qct_wdi_ds.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /**========================================================================= * * \file wlan_qct_wdi_ds.c @@ -36,8 +35,6 @@ * This file contains the external API implemntation exposed by the * wlan device abstarction layer module. * - * Copyright (c) 2008 Qualcomm Technologies, Inc. All Rights Reserved. - * Qualcomm Technologies Confidential and Proprietary */ diff --git a/CORE/WDI/TRP/CTS/inc/wlan_qct_wdi_cts.h b/CORE/WDI/TRP/CTS/inc/wlan_qct_wdi_cts.h index 9f27e874999a..bb14bab8fee8 100644 --- a/CORE/WDI/TRP/CTS/inc/wlan_qct_wdi_cts.h +++ b/CORE/WDI/TRP/CTS/inc/wlan_qct_wdi_cts.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef WLAN_QCT_WDI_CTS_H #define WLAN_QCT_WDI_CTS_H @@ -38,9 +37,6 @@ DESCRIPTION This file contains the external API exposed by the wlan control transport service module. - - Copyright (c) 2008 Qualcomm Technologies, Inc. All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ===========================================================================*/ diff --git a/CORE/WDI/TRP/CTS/src/wlan_qct_wdi_cts.c b/CORE/WDI/TRP/CTS/src/wlan_qct_wdi_cts.c index a0affa6bcd10..163d6e79d687 100644 --- a/CORE/WDI/TRP/CTS/src/wlan_qct_wdi_cts.c +++ b/CORE/WDI/TRP/CTS/src/wlan_qct_wdi_cts.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /*=========================================================================== W L A N _ Q C T _ C T S . C @@ -41,10 +40,6 @@ Are listed for each API below. - - Copyright (c) 2010-2011 Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ===========================================================================*/ /*=========================================================================== diff --git a/CORE/WDI/TRP/DTS/inc/wlan_qct_wdi_dts.h b/CORE/WDI/TRP/DTS/inc/wlan_qct_wdi_dts.h index f37441588759..587e33772831 100644 --- a/CORE/WDI/TRP/DTS/inc/wlan_qct_wdi_dts.h +++ b/CORE/WDI/TRP/DTS/inc/wlan_qct_wdi_dts.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef __WLAN_QCT_DTS_H #define __WLAN_QCT_DTS_H @@ -41,9 +40,6 @@ * This file contains the API exposed by the * wlan device abstarction layer module for abstracting DXE/SDIO. * - * Copyright (c) 2008 Qualcomm Technologies, Inc. All Rights Reserved. - * Qualcomm Technologies Confidential and Proprietary - * * Example usage for DXE. * ---------------------- * On Platform init diff --git a/CORE/WDI/TRP/DTS/src/wlan_qct_wdi_dts.c b/CORE/WDI/TRP/DTS/src/wlan_qct_wdi_dts.c index 59f005bbaf11..db77949e806b 100644 --- a/CORE/WDI/TRP/DTS/src/wlan_qct_wdi_dts.c +++ b/CORE/WDI/TRP/DTS/src/wlan_qct_wdi_dts.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /**========================================================================= * * \file wlan_qct_wdi_dts.c @@ -36,8 +35,6 @@ * This file contains the external API implemntation exposed by the * wlan device abstarction layer module. * - * Copyright (c) 2008 Qualcomm Technologies, Inc. All Rights Reserved. - * Qualcomm Technologies Confidential and Proprietary */ diff --git a/CORE/WDI/WPAL/inc/wlan_qct_os_list.h b/CORE/WDI/WPAL/inc/wlan_qct_os_list.h index 0e708147a778..6d1a64c44c87 100644 --- a/CORE/WDI/WPAL/inc/wlan_qct_os_list.h +++ b/CORE/WDI/WPAL/inc/wlan_qct_os_list.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined( __WLAN_QCT_OS_LIST_H ) #define __WLAN_QCT_OS_LIST_H @@ -36,10 +35,6 @@ Definitions for platform dependent. It is with VOSS support. - Copyright 2010 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ #include "wlan_qct_pal_type.h" diff --git a/CORE/WDI/WPAL/inc/wlan_qct_os_status.h b/CORE/WDI/WPAL/inc/wlan_qct_os_status.h index 9a1eb7e9f5e9..f72b1dec1e1b 100644 --- a/CORE/WDI/WPAL/inc/wlan_qct_os_status.h +++ b/CORE/WDI/WPAL/inc/wlan_qct_os_status.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined( __WLAN_QCT_OS_STATUS_H ) #define __WLAN_QCT_OS_STATUS_H @@ -36,10 +35,6 @@ Definitions for platform dependent(Windows XP). - Copyright 2010 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ #include "vos_status.h" diff --git a/CORE/WDI/WPAL/inc/wlan_qct_os_sync.h b/CORE/WDI/WPAL/inc/wlan_qct_os_sync.h index 36a717ea1d0d..6ca17dc0b0b8 100644 --- a/CORE/WDI/WPAL/inc/wlan_qct_os_sync.h +++ b/CORE/WDI/WPAL/inc/wlan_qct_os_sync.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined( __WLAN_QCT_OS_SYNC_H ) #define __WLAN_QCT_OS_SYNC_H @@ -36,10 +35,6 @@ Definitions for platform dependent(LA). - Copyright 2010 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ #include "vos_event.h" diff --git a/CORE/WDI/WPAL/inc/wlan_qct_os_timer.h b/CORE/WDI/WPAL/inc/wlan_qct_os_timer.h index 3206122100fb..af9ad9e0ae8f 100644 --- a/CORE/WDI/WPAL/inc/wlan_qct_os_timer.h +++ b/CORE/WDI/WPAL/inc/wlan_qct_os_timer.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined( __WLAN_QCT_OS_TIMER_H ) #define __WLAN_QCT_OS_TIMER_H @@ -36,10 +35,6 @@ Definitions for platform dependent (Linux Android). - Copyright 2010 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ #include "vos_timer.h" diff --git a/CORE/WDI/WPAL/inc/wlan_qct_os_trace.h b/CORE/WDI/WPAL/inc/wlan_qct_os_trace.h index 3f4b52571887..cecd75898dab 100644 --- a/CORE/WDI/WPAL/inc/wlan_qct_os_trace.h +++ b/CORE/WDI/WPAL/inc/wlan_qct_os_trace.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined( __WLAN_QCT_OS_TRACE_H ) #define __WLAN_QCT_OS_TRACE_H diff --git a/CORE/WDI/WPAL/inc/wlan_qct_os_type.h b/CORE/WDI/WPAL/inc/wlan_qct_os_type.h index edaa15379b3b..b1df6e766d88 100644 --- a/CORE/WDI/WPAL/inc/wlan_qct_os_type.h +++ b/CORE/WDI/WPAL/inc/wlan_qct_os_type.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined( __WLAN_QCT_OS_TYPE_H ) #define __WLAN_QCT_OS_TYPE_H @@ -36,10 +35,6 @@ Definitions for platform dependent. This is for Linux/Android - Copyright 2010 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ #include diff --git a/CORE/WDI/WPAL/inc/wlan_qct_pack_align.h b/CORE/WDI/WPAL/inc/wlan_qct_pack_align.h index 85e427b13a47..ce2e149b21ee 100644 --- a/CORE/WDI/WPAL/inc/wlan_qct_pack_align.h +++ b/CORE/WDI/WPAL/inc/wlan_qct_pack_align.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined( __WLAN_QCT_PACK_ALIGN_H ) #define __WLAN_QCT_PACK_ALIGN_H @@ -37,10 +36,6 @@ Definitions for platform independent means of packing and aligning data structures - Copyright 2009 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ /* diff --git a/CORE/WDI/WPAL/inc/wlan_qct_pal_api.h b/CORE/WDI/WPAL/inc/wlan_qct_pal_api.h index 2fd3fc46aec5..ae1d6f49d1ff 100644 --- a/CORE/WDI/WPAL/inc/wlan_qct_pal_api.h +++ b/CORE/WDI/WPAL/inc/wlan_qct_pal_api.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined( __WLAN_QCT_PAL_API_H ) #define __WLAN_QCT_PAL_API_H @@ -36,10 +35,6 @@ Definitions for platform independent - Copyright 2010 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ #include "wlan_qct_pal_type.h" diff --git a/CORE/WDI/WPAL/inc/wlan_qct_pal_device.h b/CORE/WDI/WPAL/inc/wlan_qct_pal_device.h index 9a12bb0060c3..7d9467b82fb9 100644 --- a/CORE/WDI/WPAL/inc/wlan_qct_pal_device.h +++ b/CORE/WDI/WPAL/inc/wlan_qct_pal_device.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #ifndef WLAN_QCT_PAL_DEVICE_H #define WLAN_QCT_PAL_DEVICE_H /* ==================================================================================================================== @@ -33,8 +32,6 @@ @brief This file contains the external API exposed by WLAN PAL Device specific functionalities - Copyright (c) 2011 Qualcomm Technologies, Inc. All Rights Reserved - Qualcomm Technologies Confidential and Properietary * ==================================================================================================================*/ diff --git a/CORE/WDI/WPAL/inc/wlan_qct_pal_list.h b/CORE/WDI/WPAL/inc/wlan_qct_pal_list.h index ce249e39d405..a7dd3cae20a5 100644 --- a/CORE/WDI/WPAL/inc/wlan_qct_pal_list.h +++ b/CORE/WDI/WPAL/inc/wlan_qct_pal_list.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined( __WLAN_QCT_PAL_LIST_H ) #define __WLAN_QCT_PAL_LIST_H @@ -36,10 +35,6 @@ Definitions for platform independent. - Copyright 2010 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ #include "wlan_qct_os_list.h" diff --git a/CORE/WDI/WPAL/inc/wlan_qct_pal_msg.h b/CORE/WDI/WPAL/inc/wlan_qct_pal_msg.h index deffed4c1aa0..3454654058c2 100644 --- a/CORE/WDI/WPAL/inc/wlan_qct_pal_msg.h +++ b/CORE/WDI/WPAL/inc/wlan_qct_pal_msg.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined( __WLAN_QCT_PAL_MSG_H ) #define __WLAN_QCT_PAL_MSG_H @@ -37,10 +36,6 @@ Definitions for platform dependent. Only work with legacy UMAC. - Copyright 2010 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ #include "wlan_qct_pal_type.h" diff --git a/CORE/WDI/WPAL/inc/wlan_qct_pal_packet.h b/CORE/WDI/WPAL/inc/wlan_qct_pal_packet.h index 31445037c1b6..1907f4e7e25b 100644 --- a/CORE/WDI/WPAL/inc/wlan_qct_pal_packet.h +++ b/CORE/WDI/WPAL/inc/wlan_qct_pal_packet.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined( __WLAN_QCT_PAL_PACKET_H ) #define __WLAN_QCT_PAL_PACKET_H @@ -36,10 +35,6 @@ Definitions for platform independent. - Copyright 2010 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ #include "wlan_qct_pal_type.h" diff --git a/CORE/WDI/WPAL/inc/wlan_qct_pal_status.h b/CORE/WDI/WPAL/inc/wlan_qct_pal_status.h index 13c8b1fca9f1..e1dac21a8274 100644 --- a/CORE/WDI/WPAL/inc/wlan_qct_pal_status.h +++ b/CORE/WDI/WPAL/inc/wlan_qct_pal_status.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined( __WLAN_QCT_PAL_STATUS_H ) #define __WLAN_QCT_PAL_STATUS_H @@ -36,10 +35,6 @@ Definitions for platform independent. - Copyright 2010 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ typedef enum diff --git a/CORE/WDI/WPAL/inc/wlan_qct_pal_sync.h b/CORE/WDI/WPAL/inc/wlan_qct_pal_sync.h index ba427bece346..6d8099700a79 100644 --- a/CORE/WDI/WPAL/inc/wlan_qct_pal_sync.h +++ b/CORE/WDI/WPAL/inc/wlan_qct_pal_sync.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined( __WLAN_QCT_PAL_SYNC_H ) #define __WLAN_QCT_PAL_SYNC_H @@ -36,10 +35,6 @@ Definitions for platform independent. - Copyright 2010 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ #include "wlan_qct_pal_type.h" diff --git a/CORE/WDI/WPAL/inc/wlan_qct_pal_timer.h b/CORE/WDI/WPAL/inc/wlan_qct_pal_timer.h index 495cf9f9c03c..212c8120c00a 100644 --- a/CORE/WDI/WPAL/inc/wlan_qct_pal_timer.h +++ b/CORE/WDI/WPAL/inc/wlan_qct_pal_timer.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined( __WLAN_QCT_PAL_TIMER_H ) #define __WLAN_QCT_PAL_TIMER_H @@ -36,10 +35,6 @@ Definitions for platform independent. - Copyright 2010-2011 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ #include "wlan_qct_pal_type.h" diff --git a/CORE/WDI/WPAL/inc/wlan_qct_pal_trace.h b/CORE/WDI/WPAL/inc/wlan_qct_pal_trace.h index e3a6188d750a..f8f678986ffe 100644 --- a/CORE/WDI/WPAL/inc/wlan_qct_pal_trace.h +++ b/CORE/WDI/WPAL/inc/wlan_qct_pal_trace.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined( __WLAN_QCT_PAL_TRACE_H ) #define __WLAN_QCT_PAL_TRACE_H @@ -36,10 +35,6 @@ Definitions for platform independent - Copyright 2010 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ #include "wlan_qct_pal_type.h" diff --git a/CORE/WDI/WPAL/inc/wlan_qct_pal_type.h b/CORE/WDI/WPAL/inc/wlan_qct_pal_type.h index af5817790950..33877b0508b2 100644 --- a/CORE/WDI/WPAL/inc/wlan_qct_pal_type.h +++ b/CORE/WDI/WPAL/inc/wlan_qct_pal_type.h @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - #if !defined( __WLAN_QCT_PAL_TYPE_H ) #define __WLAN_QCT_PAL_TYPE_H @@ -36,10 +35,6 @@ Definitions for platform independent. - Copyright 2010 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ #include "wlan_qct_os_type.h" diff --git a/CORE/WDI/WPAL/src/wlan_qct_pal_api.c b/CORE/WDI/WPAL/src/wlan_qct_pal_api.c index 93a270e01e06..516cb57c451d 100644 --- a/CORE/WDI/WPAL/src/wlan_qct_pal_api.c +++ b/CORE/WDI/WPAL/src/wlan_qct_pal_api.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /**========================================================================= \file wlan_qct_pal_api.c @@ -34,10 +33,6 @@ Definitions for platform Windows. - Copyright 2010 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ #include "wlan_qct_pal_api.h" diff --git a/CORE/WDI/WPAL/src/wlan_qct_pal_device.c b/CORE/WDI/WPAL/src/wlan_qct_pal_device.c index 0aa9b7e44dae..372648dec96a 100644 --- a/CORE/WDI/WPAL/src/wlan_qct_pal_device.c +++ b/CORE/WDI/WPAL/src/wlan_qct_pal_device.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /**========================================================================= @file wlan_qct_pal_device.c @@ -34,9 +33,6 @@ This file implements the device specific HW access interface required by the WLAN Platform Abstraction Layer (WPAL) - Copyright (c) 2011 Qualcomm Technologies, Inc. - All Rights Reserved. - Qualcomm Technologies Confidential and Proprietary ========================================================================*/ /*=========================================================================== diff --git a/CORE/WDI/WPAL/src/wlan_qct_pal_msg.c b/CORE/WDI/WPAL/src/wlan_qct_pal_msg.c index f99913960896..f09faef7f9b3 100644 --- a/CORE/WDI/WPAL/src/wlan_qct_pal_msg.c +++ b/CORE/WDI/WPAL/src/wlan_qct_pal_msg.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /**========================================================================= \file wlan_qct_pal_msg.c @@ -33,10 +32,6 @@ Definitions for platform with legacy UMAC support. - Copyright 2010 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ #include "wlan_qct_pal_msg.h" diff --git a/CORE/WDI/WPAL/src/wlan_qct_pal_packet.c b/CORE/WDI/WPAL/src/wlan_qct_pal_packet.c index 81817315a197..6f0fea7ebc32 100644 --- a/CORE/WDI/WPAL/src/wlan_qct_pal_packet.c +++ b/CORE/WDI/WPAL/src/wlan_qct_pal_packet.c @@ -25,6 +25,7 @@ * to the Linux Foundation. */ + /**========================================================================= \file wlan_qct_pal_packet.c @@ -33,10 +34,6 @@ Definitions for platform with VOSS packet support and LA. - Copyright 2010 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ #include "wlan_qct_pal_packet.h" diff --git a/CORE/WDI/WPAL/src/wlan_qct_pal_sync.c b/CORE/WDI/WPAL/src/wlan_qct_pal_sync.c index d6f6a7c543ff..64a910fb9bd6 100644 --- a/CORE/WDI/WPAL/src/wlan_qct_pal_sync.c +++ b/CORE/WDI/WPAL/src/wlan_qct_pal_sync.c @@ -25,6 +25,7 @@ * to the Linux Foundation. */ + /**========================================================================= \file wlan_qct_pal_sync.c @@ -33,10 +34,6 @@ Definitions for platform Windows and with legacy UMAC. - Copyright 2010 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ #include "wlan_qct_pal_sync.h" diff --git a/CORE/WDI/WPAL/src/wlan_qct_pal_timer.c b/CORE/WDI/WPAL/src/wlan_qct_pal_timer.c index 9b386ecb22c9..22a1a3658b53 100644 --- a/CORE/WDI/WPAL/src/wlan_qct_pal_timer.c +++ b/CORE/WDI/WPAL/src/wlan_qct_pal_timer.c @@ -24,7 +24,6 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - /**========================================================================= \file wlan_qct_pal_timer.c @@ -33,10 +32,6 @@ Definitions for platform Windows. - Copyright 2010-2011 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ #include "wlan_qct_pal_timer.h" diff --git a/CORE/WDI/WPAL/src/wlan_qct_pal_trace.c b/CORE/WDI/WPAL/src/wlan_qct_pal_trace.c index c9649a448aa3..5e00b380e628 100644 --- a/CORE/WDI/WPAL/src/wlan_qct_pal_trace.c +++ b/CORE/WDI/WPAL/src/wlan_qct_pal_trace.c @@ -26,7 +26,6 @@ */ - /**========================================================================= \file wlan_qct_pal_trace.c @@ -35,10 +34,6 @@ Definitions for Linux/Android platform - Copyright 2010-2011 (c) Qualcomm Technologies, Inc. All Rights Reserved. - - Qualcomm Technologies Confidential and Proprietary. - ========================================================================*/ #include "wlan_qct_pal_trace.h" diff --git a/Kbuild b/Kbuild index 3f4a82c384ce..2ca0918d5ad6 100644 --- a/Kbuild +++ b/Kbuild @@ -40,8 +40,11 @@ ifeq ($(KERNEL_BUILD), 0) CONFIG_WLAN_FEATURE_11W := y endif + #Flag to enable LTE CoEx feature + CONFIG_QCOM_LTE_COEX := y + #Flag to enable new Linux Regulatory implementation - CONFIG_ENABLE_LINUX_REG := n + CONFIG_ENABLE_LINUX_REG := y endif @@ -71,7 +74,7 @@ CONFIG_ADF_SUPPORT := 1 CONFIG_ATH_PERF_PWR_OFFLOAD := 1 #Disable packet log -CONFIG_REMOVE_PKT_LOG := 1 +CONFIG_REMOVE_PKT_LOG := 0 #Enable 11AC TX CONFIG_ATH_11AC_TXCOMPACT := 1 @@ -116,13 +119,13 @@ CONFIG_LITTLE_ENDIAN := 1 CONFIG_TX_CREDIT_RECLAIM_SUPPORT := 0 #Enable FTM support -CONFIG_QCA_WIFI_FTM := 0 +CONFIG_QCA_WIFI_FTM := 1 #Enable Checksum Offload CONFIG_CHECKSUM_OFFLOAD := 1 #Enable GTK offload -CONFIG_GTK_OFFLOAD := 0 +CONFIG_GTK_OFFLOAD := 1 endif ifeq ($(CONFIG_CFG80211),y) @@ -297,7 +300,6 @@ MAC_LIM_OBJS := $(MAC_SRC_DIR)/pe/lim/limAIDmgmt.o \ $(MAC_SRC_DIR)/pe/lim/limProcessProbeRspFrame.o \ $(MAC_SRC_DIR)/pe/lim/limProcessSmeReqMessages.o \ $(MAC_SRC_DIR)/pe/lim/limPropExtsUtils.o \ - $(MAC_SRC_DIR)/pe/lim/limRMC.o \ $(MAC_SRC_DIR)/pe/lim/limRoamingAlgo.o \ $(MAC_SRC_DIR)/pe/lim/limScanResultUtils.o \ $(MAC_SRC_DIR)/pe/lim/limSecurityUtils.o \ @@ -695,7 +697,7 @@ WDI_OBJS += $(WDI_CP_OBJS) \ endif -WCNSS_INC := -I$(WLAN_ROOT)/wcnss/inc +RIVA_INC := -I$(WLAN_ROOT)/riva/inc LINUX_INC := -Iinclude/linux @@ -704,7 +706,7 @@ INCS := $(BAP_INC) \ $(HDD_INC) \ $(LINUX_INC) \ $(MAC_INC) \ - $(WCNSS_INC) \ + $(RIVA_INC) \ $(SAP_INC) \ $(SME_INC) \ $(SVC_INC) \ @@ -818,10 +820,8 @@ CDEFINES := -DANI_LITTLE_BYTE_ENDIAN \ -DWLAN_SOFTAP_VSTA_FEATURE \ -DWLAN_FEATURE_ROAM_SCAN_OFFLOAD \ -DWLAN_FEATURE_GTK_OFFLOAD \ - -DFEATURE_CESIUM_PROPRIETARY \ -DWLAN_WAKEUP_EVENTS \ -DWLAN_KD_READY_NOTIFIER \ - -DWLAN_FEATURE_RELIABLE_MCAST \ -DWLAN_NL80211_TESTMODE \ -DFEATURE_WLAN_BATCH_SCAN \ -DFEATURE_WLAN_LPHB \ @@ -920,6 +920,10 @@ ifeq ($(CONFIG_WLAN_FEATURE_11W),y) CDEFINES += -DWLAN_FEATURE_11W endif +ifeq ($(CONFIG_QCOM_LTE_COEX),y) +CDEFINES += -DFEATURE_WLAN_CH_AVOID +endif + ifeq ($(PANIC_ON_BUG),1) CDEFINES += -DPANIC_ON_BUG endif @@ -937,7 +941,7 @@ CDEFINES += -DWLAN_OPEN_SOURCE endif ifeq ($(CONFIG_ENABLE_LINUX_REG), y) -ifeq ($(CONFIG_QCA_WIFI_2_0), 0) +ifeq ($(CONFIG_QCA_WIFI_2_0), 1) CDEFINES += -DCONFIG_ENABLE_LINUX_REG endif endif diff --git a/Makefile b/Makefile index 468a5bf0dbbd..f890894db142 100644 --- a/Makefile +++ b/Makefile @@ -41,7 +41,7 @@ endif #Flag to enable new Linux Regulatory implementation - CONFIG_ENABLE_LINUX_REG := n + CONFIG_ENABLE_LINUX_REG := y #endif @@ -75,7 +75,7 @@ CONFIG_ADF_SUPPORT := 1 CONFIG_ATH_PERF_PWR_OFFLOAD := 1 #Disable packet log -CONFIG_REMOVE_PKT_LOG := 1 +CONFIG_REMOVE_PKT_LOG := 0 #Enable 11AC TX CONFIG_ATH_11AC_TXCOMPACT := 1 @@ -696,7 +696,7 @@ WDI_OBJS += $(WDI_CP_OBJS) \ endif -WCNSS_INC := -I$(WLAN_ROOT)/wcnss/inc +RIVA_INC := -I$(WLAN_ROOT)/riva/inc LINUX_INC := -Iinclude/linux @@ -705,7 +705,7 @@ INCS := $(BAP_INC) \ $(HDD_INC) \ $(LINUX_INC) \ $(MAC_INC) \ - $(WCNSS_INC) \ + $(RIVA_INC) \ $(SAP_INC) \ $(SME_INC) \ $(SVC_INC) \ @@ -819,7 +819,6 @@ CDEFINES := -DANI_LITTLE_BYTE_ENDIAN \ -DWLAN_FEATURE_ROAM_SCAN_OFFLOAD \ -DWLAN_FEATURE_SCAN_OFFLOAD \ -DWLAN_FEATURE_GTK_OFFLOAD \ - -DFEATURE_CESIUM_PROPRIETARY \ -DWLAN_WAKEUP_EVENTS \ -DWLAN_KD_READY_NOTIFIER \ -DWLAN_FEATURE_RELIABLE_MCAST \ diff --git a/firmware_bin/WCNSS_cfg.dat b/firmware_bin/WCNSS_cfg.dat old mode 100755 new mode 100644 diff --git a/firmware_bin/WCNSS_qcom_cfg.ini b/firmware_bin/WCNSS_qcom_cfg.ini index 158584f9ba3a..9dbde54e867a 100644 --- a/firmware_bin/WCNSS_qcom_cfg.ini +++ b/firmware_bin/WCNSS_qcom_cfg.ini @@ -463,7 +463,7 @@ gEnablefwlog=1 gEnableP2pListenOffload=1 # Maximum Receive AMPDU size (VHT only. Valid values: 0->8k 1->16k 2->32k 3->64k 4->128k) -gVhtAmpduLenExponent=4 +gVhtAmpduLenExponent=7 # Maximum MPDU length (VHT only. Valid values: 0->3895 octets, 1->7991 octets, 2->11454 octets) gVhtMpduLen=2 @@ -483,6 +483,8 @@ gVhtMpduLen=2 # 1=Enable (default), 0=Disable gEnableMCCAdaptiveScheduler=0 +#Enable or Disable p2p device address administered +isP2pDeviceAddrAdministrated=0 END # Note: Configuration parser would not read anything past the END marker diff --git a/tools/athdiag/athdiag.c b/tools/athdiag/athdiag.c index 9f91dac9f304..7e0904cabdf2 100644 --- a/tools/athdiag/athdiag.c +++ b/tools/athdiag/athdiag.c @@ -24,7 +24,10 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - +/* + * + * $ATH_LICENSE_HOSTSDK0_C$ + */ #include #include diff --git a/tools/fwdebuglog/cld-fwlog-netlink.c b/tools/fwdebuglog/cld-fwlog-netlink.c index d4df5c9c0c97..6fea2298ab5a 100644 --- a/tools/fwdebuglog/cld-fwlog-netlink.c +++ b/tools/fwdebuglog/cld-fwlog-netlink.c @@ -1,7 +1,30 @@ /* - * Copyright (c) 2013 Qualcomm Atheros, Inc. - * All Rights Reserved. - * Qualcomm Atheros Confidential and Proprietary. + * Copyright (c) 2013, The Linux Foundation. All rights reserved. + * + * Previously licensed under the ISC license by Qualcomm Atheros, Inc. + * + * + * Permission to use, copy, modify, and/or distribute this software for + * any purpose with or without fee is hereby granted, provided that the + * above copyright notice and this permission notice appear in all + * copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL + * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE + * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +/* + * This file was originally distributed by Qualcomm Atheros, Inc. + * under proprietary terms before Copyright ownership was assigned + * to the Linux Foundation. + */ +/* * */ diff --git a/tools/fwdebuglog/cld-fwlog-parser.c b/tools/fwdebuglog/cld-fwlog-parser.c index 6d3c2b2c5308..4a916d769634 100644 --- a/tools/fwdebuglog/cld-fwlog-parser.c +++ b/tools/fwdebuglog/cld-fwlog-parser.c @@ -24,7 +24,9 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - +/* + * + */ #include #include diff --git a/tools/fwdebuglog/cld-fwlog-record.c b/tools/fwdebuglog/cld-fwlog-record.c index 0a23792001af..28477a680d4c 100644 --- a/tools/fwdebuglog/cld-fwlog-record.c +++ b/tools/fwdebuglog/cld-fwlog-record.c @@ -24,7 +24,9 @@ * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ - +/* + * + */ #include #include diff --git a/tools/fwdebuglog/parser.c b/tools/fwdebuglog/parser.c index e3bf5a709919..6a68980af48f 100644 --- a/tools/fwdebuglog/parser.c +++ b/tools/fwdebuglog/parser.c @@ -1,7 +1,30 @@ /* - * Copyright (c) 2013 Qualcomm Atheros, Inc. - * All Rights Reserved. - * Qualcomm Atheros Confidential and Proprietary. + * Copyright (c) 2013, The Linux Foundation. All rights reserved. + * + * Previously licensed under the ISC license by Qualcomm Atheros, Inc. + * + * + * Permission to use, copy, modify, and/or distribute this software for + * any purpose with or without fee is hereby granted, provided that the + * above copyright notice and this permission notice appear in all + * copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL + * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE + * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +/* + * This file was originally distributed by Qualcomm Atheros, Inc. + * under proprietary terms before Copyright ownership was assigned + * to the Linux Foundation. + */ +/* * */ diff --git a/tools/pktlog/pktlogconf.c b/tools/pktlog/pktlogconf.c index 0a2f1b244745..ddcdcf80698b 100644 --- a/tools/pktlog/pktlogconf.c +++ b/tools/pktlog/pktlogconf.c @@ -25,6 +25,7 @@ * to the Linux Foundation. */ + #include #include #include -- cgit v1.2.3 From 8d25508d73666c4920f599a5474b2fea5f3d7901 Mon Sep 17 00:00:00 2001 From: Prakash Dhavali Date: Wed, 8 Jan 2014 22:47:30 -0800 Subject: Additional changes to correct only copyright text Additional changes to correct only copyright text --- CORE/BAP/inc/btampHCI.h | 4 ---- CORE/BAP/src/btampHCI.c | 4 ---- CORE/HDD/src/wlan_hdd_wext.c | 2 -- CORE/MAC/src/include/dot11f.h | 4 ---- CORE/SERVICES/WMA/inc/legacy/halTypes.h | 3 --- CORE/SERVICES/WMA/inc/legacy/palTypes.h | 2 -- CORE/SME/inc/csrApi.h | 1 - CORE/SME/inc/csrInternal.h | 1 - CORE/SME/src/csr/csrApiScan.c | 1 - CORE/SME/src/csr/csrCmdProcess.c | 2 -- CORE/SME/src/csr/csrInsideApi.h | 2 -- CORE/SME/src/csr/csrUtil.c | 2 -- CORE/SYS/legacy/src/utils/src/dot11f.c | 4 ---- CORE/SYS/legacy/src/utils/src/logDump.c | 1 - CORE/SYS/legacy/src/utils/src/utilsApi.c | 2 -- CORE/WDA/inc/legacy/halTypes.h | 3 --- CORE/WDA/inc/legacy/palTypes.h | 2 -- 17 files changed, 40 deletions(-) diff --git a/CORE/BAP/inc/btampHCI.h b/CORE/BAP/inc/btampHCI.h index 5d98708d4059..ce228ca887cd 100644 --- a/CORE/BAP/inc/btampHCI.h +++ b/CORE/BAP/inc/btampHCI.h @@ -33,10 +33,6 @@ * \brief Structures, function prototypes & definitions * for working with 802.11 Frames * - * - * Copyright (C) 2009 Airgo Networks, Incorporated. - * - * * This file was automatically generated by 'framesc' * Mon Mar 02 14:06:14 2009 from the following file(s): * diff --git a/CORE/BAP/src/btampHCI.c b/CORE/BAP/src/btampHCI.c index be26ff8101b8..02f6050c0307 100644 --- a/CORE/BAP/src/btampHCI.c +++ b/CORE/BAP/src/btampHCI.c @@ -30,10 +30,6 @@ * \brief Structures, functions & definitions for * working with 802.11 Frames * - * - * Copyright (C) 2009 Airgo Networks, Incorporated. - * - * * This file was automatically generated by 'framesc' * Fri Feb 27 17:29:19 2009 from the following file(s): * diff --git a/CORE/HDD/src/wlan_hdd_wext.c b/CORE/HDD/src/wlan_hdd_wext.c index ffbdc551fedb..ad9bb2a81bd8 100644 --- a/CORE/HDD/src/wlan_hdd_wext.c +++ b/CORE/HDD/src/wlan_hdd_wext.c @@ -35,8 +35,6 @@ $Id: wlan_hdd_wext.c,v 1.34 2007/04/14 01:49:23 jimz Exp jimz $ - Copyright (C) 2007 Airgo Networks, Incorporated - This file defines all of the types that are utilized by the CCP module of the "Portable" HDD. This file also includes the underlying Linux Wireless Extensions Data types referred to by CCP. diff --git a/CORE/MAC/src/include/dot11f.h b/CORE/MAC/src/include/dot11f.h index da954f516762..80e271384965 100644 --- a/CORE/MAC/src/include/dot11f.h +++ b/CORE/MAC/src/include/dot11f.h @@ -35,10 +35,6 @@ * \brief Structures, function prototypes & definitions * for working with 802.11 Frames * - * - * Copyright (C) 2008 Airgo Networks, Incorporated. - * - * * This file was automatically generated by 'framesc' * Tue Jan 7 20:37:51 2014 from the following file(s): * diff --git a/CORE/SERVICES/WMA/inc/legacy/halTypes.h b/CORE/SERVICES/WMA/inc/legacy/halTypes.h index 4901caa8abfa..a79f50267be7 100644 --- a/CORE/SERVICES/WMA/inc/legacy/halTypes.h +++ b/CORE/SERVICES/WMA/inc/legacy/halTypes.h @@ -35,9 +35,6 @@ $Id$ - Copyright (C) 2006 Airgo Networks, Incorporated - - ========================================================================== */ #ifndef HALTYPES_H diff --git a/CORE/SERVICES/WMA/inc/legacy/palTypes.h b/CORE/SERVICES/WMA/inc/legacy/palTypes.h index 26bd317b1a18..01a3b477d4aa 100644 --- a/CORE/SERVICES/WMA/inc/legacy/palTypes.h +++ b/CORE/SERVICES/WMA/inc/legacy/palTypes.h @@ -39,8 +39,6 @@ $Id$ - Copyright (C) 2006 Airgo Networks, Incorporated - ... description... ========================================================================== */ diff --git a/CORE/SME/inc/csrApi.h b/CORE/SME/inc/csrApi.h index e6e8ec3cc333..3a4c852d004d 100644 --- a/CORE/SME/inc/csrApi.h +++ b/CORE/SME/inc/csrApi.h @@ -30,7 +30,6 @@ Exports and types for the Common Scan and Roaming Module interfaces. - Copyright (C) 2006 Airgo Networks, Incorporated ========================================================================== */ #ifndef CSRAPI_H__ #define CSRAPI_H__ diff --git a/CORE/SME/inc/csrInternal.h b/CORE/SME/inc/csrInternal.h index a86bde4b070a..53d3d50cf91d 100644 --- a/CORE/SME/inc/csrInternal.h +++ b/CORE/SME/inc/csrInternal.h @@ -32,7 +32,6 @@ Define internal data structure for MAC. - Copyright (C) 2006 Airgo Networks, Incorporated ========================================================================== */ #ifndef CSRINTERNAL_H__ #define CSRINTERNAL_H__ diff --git a/CORE/SME/src/csr/csrApiScan.c b/CORE/SME/src/csr/csrApiScan.c index 61f9b464332b..bff7305a1322 100644 --- a/CORE/SME/src/csr/csrApiScan.c +++ b/CORE/SME/src/csr/csrApiScan.c @@ -32,7 +32,6 @@ Implementation for the Common Scan interfaces. - Copyright (C) 2006 Airgo Networks, Incorporated ========================================================================== */ #include "aniGlobal.h" diff --git a/CORE/SME/src/csr/csrCmdProcess.c b/CORE/SME/src/csr/csrCmdProcess.c index b90b092535f8..8d88e75e18ce 100644 --- a/CORE/SME/src/csr/csrCmdProcess.c +++ b/CORE/SME/src/csr/csrCmdProcess.c @@ -30,8 +30,6 @@ Implementation for processing various commands. - Copyright (C) 2006 Airgo Networks, Incorporated - ========================================================================== */ diff --git a/CORE/SME/src/csr/csrInsideApi.h b/CORE/SME/src/csr/csrInsideApi.h index 728ead15536f..065e370247c9 100644 --- a/CORE/SME/src/csr/csrInsideApi.h +++ b/CORE/SME/src/csr/csrInsideApi.h @@ -32,8 +32,6 @@ Define interface only used by CSR. - - Copyright (C) 2006 Airgo Networks, Incorporated ========================================================================== */ #ifndef CSR_INSIDE_API_H__ #define CSR_INSIDE_API_H__ diff --git a/CORE/SME/src/csr/csrUtil.c b/CORE/SME/src/csr/csrUtil.c index b776431bbf0f..2e498d870d5c 100644 --- a/CORE/SME/src/csr/csrUtil.c +++ b/CORE/SME/src/csr/csrUtil.c @@ -32,8 +32,6 @@ Implementation supporting routines for CSR. - - Copyright (C) 2006 Airgo Networks, Incorporated ========================================================================== */ diff --git a/CORE/SYS/legacy/src/utils/src/dot11f.c b/CORE/SYS/legacy/src/utils/src/dot11f.c index 1197e3d78167..d224f8d5243f 100644 --- a/CORE/SYS/legacy/src/utils/src/dot11f.c +++ b/CORE/SYS/legacy/src/utils/src/dot11f.c @@ -33,10 +33,6 @@ * \brief Structures, functions & definitions for * working with 802.11 Frames * - * - * Copyright (C) 2008 Airgo Networks, Incorporated. - * - * * This file was automatically generated by 'framesc' * Tue Jan 7 20:37:51 2014 from the following file(s): * diff --git a/CORE/SYS/legacy/src/utils/src/logDump.c b/CORE/SYS/legacy/src/utils/src/logDump.c index b5dea9e348c4..11a54d1fb306 100644 --- a/CORE/SYS/legacy/src/utils/src/logDump.c +++ b/CORE/SYS/legacy/src/utils/src/logDump.c @@ -29,7 +29,6 @@ logDump.c */ /* - * Woodside Networks, Inc proprietary. All rights reserved. * This file contains the utility functions to dump various * MAC states and to enable/disable certain features during * debugging. diff --git a/CORE/SYS/legacy/src/utils/src/utilsApi.c b/CORE/SYS/legacy/src/utils/src/utilsApi.c index 676ff0271990..646d576ac3d9 100644 --- a/CORE/SYS/legacy/src/utils/src/utilsApi.c +++ b/CORE/SYS/legacy/src/utils/src/utilsApi.c @@ -32,8 +32,6 @@ // // Author: Neelay Das // -// Copyright 2003, Woodside Networks, Inc. All rights reserved. -// // Change gHistory: // 12/15/2003 - NDA - Initial version. // diff --git a/CORE/WDA/inc/legacy/halTypes.h b/CORE/WDA/inc/legacy/halTypes.h index 9c5a95673073..d5e8c67018c6 100644 --- a/CORE/WDA/inc/legacy/halTypes.h +++ b/CORE/WDA/inc/legacy/halTypes.h @@ -35,9 +35,6 @@ $Id$ - Copyright (C) 2006 Airgo Networks, Incorporated - - ========================================================================== */ #ifndef HALTYPES_H diff --git a/CORE/WDA/inc/legacy/palTypes.h b/CORE/WDA/inc/legacy/palTypes.h index d2e229734d46..4ecedeed03d4 100644 --- a/CORE/WDA/inc/legacy/palTypes.h +++ b/CORE/WDA/inc/legacy/palTypes.h @@ -39,8 +39,6 @@ $Id$ - Copyright (C) 2006 Airgo Networks, Incorporated - ... description... ========================================================================== */ -- cgit v1.2.3 From 38e926085c16a8aa99c007304eab96f6dd51c51d Mon Sep 17 00:00:00 2001 From: Prakash Dhavali Date: Fri, 10 Jan 2014 10:39:59 -0800 Subject: Rename riva to wcnss folder Rename riva to wcnss folder --- Kbuild | 4 ++-- Makefile | 4 ++-- wcnss/inc/halCompiler.h | 3 --- wcnss/inc/halLegacyPalTypes.h | 3 --- wcnss/inc/pttFrameGen.h | 3 --- wcnss/inc/pttModule.h | 6 ------ wcnss/inc/pttMsgApi.h | 6 ------ wcnss/inc/wlan_hal_cfg.h | 3 --- wcnss/inc/wlan_hal_msg.h | 7 ++----- wcnss/inc/wlan_nv.h | 3 --- wcnss/inc/wlan_phy.h | 2 -- wcnss/inc/wlan_qct_dev_defs.h | 1 - wcnss/inc/wlan_status_code.h | 2 -- 13 files changed, 6 insertions(+), 41 deletions(-) diff --git a/Kbuild b/Kbuild index 2ca0918d5ad6..c6b51e9ecc14 100644 --- a/Kbuild +++ b/Kbuild @@ -697,7 +697,7 @@ WDI_OBJS += $(WDI_CP_OBJS) \ endif -RIVA_INC := -I$(WLAN_ROOT)/riva/inc +WCNSS_INC := -I$(WLAN_ROOT)/wcnss/inc LINUX_INC := -Iinclude/linux @@ -706,7 +706,7 @@ INCS := $(BAP_INC) \ $(HDD_INC) \ $(LINUX_INC) \ $(MAC_INC) \ - $(RIVA_INC) \ + $(WCNSS_INC) \ $(SAP_INC) \ $(SME_INC) \ $(SVC_INC) \ diff --git a/Makefile b/Makefile index f890894db142..9cf9d19bde60 100644 --- a/Makefile +++ b/Makefile @@ -696,7 +696,7 @@ WDI_OBJS += $(WDI_CP_OBJS) \ endif -RIVA_INC := -I$(WLAN_ROOT)/riva/inc +WCNSS_INC := -I$(WLAN_ROOT)/wcnss/inc LINUX_INC := -Iinclude/linux @@ -705,7 +705,7 @@ INCS := $(BAP_INC) \ $(HDD_INC) \ $(LINUX_INC) \ $(MAC_INC) \ - $(RIVA_INC) \ + $(WCNSS_INC) \ $(SAP_INC) \ $(SME_INC) \ $(SVC_INC) \ diff --git a/wcnss/inc/halCompiler.h b/wcnss/inc/halCompiler.h index 0705972ea78f..53745e7e2622 100644 --- a/wcnss/inc/halCompiler.h +++ b/wcnss/inc/halCompiler.h @@ -35,9 +35,6 @@ * * @author: Kumar Anand * - * Copyright (C) 2010, Qualcomm Technologies, Inc. - * All rights reserved. - * *=========================================================================*/ #ifndef __ANI_COMPILER_ABSTRACT_H #define __ANI_COMPILER_ABSTRACT_H diff --git a/wcnss/inc/halLegacyPalTypes.h b/wcnss/inc/halLegacyPalTypes.h index f889b683b90a..a82a69419d41 100644 --- a/wcnss/inc/halLegacyPalTypes.h +++ b/wcnss/inc/halLegacyPalTypes.h @@ -36,9 +36,6 @@ * * @author: Kumar Anand * - * Copyright (C) 2010, Qualcomm Technologies, Inc. - * All rights reserved. - * *=========================================================================*/ #include "qwlanfw_defs.h" diff --git a/wcnss/inc/pttFrameGen.h b/wcnss/inc/pttFrameGen.h index df4c7cbd3608..ceffa2be4354 100644 --- a/wcnss/inc/pttFrameGen.h +++ b/wcnss/inc/pttFrameGen.h @@ -35,9 +35,6 @@ $Id$ - Copyright (C) 2006 Airgo Networks, Incorporated - - ========================================================================== */ #ifndef PTTFRAMEGEN_H diff --git a/wcnss/inc/pttModule.h b/wcnss/inc/pttModule.h index d8e6bcf7ecf0..6b3758858f4f 100644 --- a/wcnss/inc/pttModule.h +++ b/wcnss/inc/pttModule.h @@ -27,12 +27,6 @@ /** * - Airgo Networks, Inc proprietary. - All Rights Reserved, Copyright 2005 - This program is the confidential and proprietary product of Airgo Networks Inc. - Any Unauthorized use, reproduction or transfer of this program is strictly prohibited. - - pttModule.h: global variable structure for pttModule Author: Mark Nelson Date: 6/27/05 diff --git a/wcnss/inc/pttMsgApi.h b/wcnss/inc/pttMsgApi.h index e8a65cc0c962..c7295d7fa3ee 100644 --- a/wcnss/inc/pttMsgApi.h +++ b/wcnss/inc/pttMsgApi.h @@ -27,12 +27,6 @@ /** * - Airgo Networks, Inc proprietary. - All Rights Reserved, Copyright 2005 - This program is the confidential and proprietary product of Airgo Networks Inc. - Any Unauthorized use, reproduction or transfer of this program is strictly prohibited. - - pttMsgApi.h: Contains messages to PTT Module for physical layer testing Author: Mark Nelson Date: 6/21/05 diff --git a/wcnss/inc/wlan_hal_cfg.h b/wcnss/inc/wlan_hal_cfg.h index 9e64c03043e5..43772494c08a 100644 --- a/wcnss/inc/wlan_hal_cfg.h +++ b/wcnss/inc/wlan_hal_cfg.h @@ -33,9 +33,6 @@ * * @author: Kumar Anand * - * Copyright (C) 2010, Qualcomm Technologies, Inc. - * All rights reserved. - * *=========================================================================*/ #ifndef __WLAN_HAL_CFG_H__ diff --git a/wcnss/inc/wlan_hal_msg.h b/wcnss/inc/wlan_hal_msg.h index cf1165aa8806..8e1b451b81fe 100644 --- a/wcnss/inc/wlan_hal_msg.h +++ b/wcnss/inc/wlan_hal_msg.h @@ -33,9 +33,6 @@ * * @author: Kumar Anand * - * Copyright (C) 2010, Qualcomm Technologies, Inc. - * All rights reserved. - * *=========================================================================*/ #ifndef _WLAN_HAL_MSG_H_ @@ -2343,7 +2340,7 @@ typedef PACKED_PRE struct PACKED_POST #ifndef OEM_DATA_REQ_SIZE #ifdef QCA_WIFI_2_0 -#define OEM_DATA_REQ_SIZE 276 +#define OEM_DATA_REQ_SIZE 280 #else #define OEM_DATA_REQ_SIZE 134 #endif @@ -2351,7 +2348,7 @@ typedef PACKED_PRE struct PACKED_POST #ifndef OEM_DATA_RSP_SIZE #ifdef QCA_WIFI_2_0 -#define OEM_DATA_RSP_SIZE 1720 +#define OEM_DATA_RSP_SIZE 1724 #else #define OEM_DATA_RSP_SIZE 1968 #endif diff --git a/wcnss/inc/wlan_nv.h b/wcnss/inc/wlan_nv.h index 4ef15cdcd749..10e53924fb8b 100644 --- a/wcnss/inc/wlan_nv.h +++ b/wcnss/inc/wlan_nv.h @@ -37,9 +37,6 @@ $Id$ - Copyright (C) 2006 Airgo Networks, Incorporated - - ========================================================================== */ #if !defined( __WLAN_NV_H ) diff --git a/wcnss/inc/wlan_phy.h b/wcnss/inc/wlan_phy.h index acfdafe0962a..93d9576a8619 100644 --- a/wcnss/inc/wlan_phy.h +++ b/wcnss/inc/wlan_phy.h @@ -32,8 +32,6 @@ Contains definitions of all PHY related structures that aree needed by FTM/PTT -Copyright (c) 2007 Qualcomm Technologies, Inc. All Rights Reserved. -Qualcomm Technologies Proprietary and Confidential ============================================================================*/ #include diff --git a/wcnss/inc/wlan_qct_dev_defs.h b/wcnss/inc/wlan_qct_dev_defs.h index c4bb755550b0..691ad532e361 100644 --- a/wcnss/inc/wlan_qct_dev_defs.h +++ b/wcnss/inc/wlan_qct_dev_defs.h @@ -31,7 +31,6 @@ * * @brief: This file contains the hardware related definitions. * - * Copyright (C) 2008, Qualcomm Technologies, Inc. All rights reserved. */ #ifndef __WLAN_QCT_DEV_DEFS_H diff --git a/wcnss/inc/wlan_status_code.h b/wcnss/inc/wlan_status_code.h index e1057281a265..1804a05b5c20 100644 --- a/wcnss/inc/wlan_status_code.h +++ b/wcnss/inc/wlan_status_code.h @@ -33,8 +33,6 @@ * All status codes have been consolidated into one enum * * @author: Kumar Anand - * Copyright (C) 2010, Qualcomm Technologies, Inc. - * All rights reserved. * *=========================================================================*/ -- cgit v1.2.3 From fd7d50da0aea63c507359e3e1e46d324c27b93ca Mon Sep 17 00:00:00 2001 From: Prashanth Bhatta Date: Mon, 6 Jan 2014 11:13:33 -0800 Subject: qcacld: Enable FTM in Makefile Enabling FTM support in Makefile as well similar to Kbuild. Change-Id: Icf9981668015cb22cbc345ba582669d9dc5cde66 --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 9cf9d19bde60..f6192c6b11c3 100644 --- a/Makefile +++ b/Makefile @@ -117,7 +117,7 @@ CONFIG_LITTLE_ENDIAN := 1 CONFIG_TX_CREDIT_RECLAIM_SUPPORT := 0 #Enable FTM support -CONFIG_QCA_WIFI_FTM := 0 +CONFIG_QCA_WIFI_FTM := 1 #Enable Checksum Offload CONFIG_CHECKSUM_OFFLOAD := 1 -- cgit v1.2.3 From 11240c4ee35598f0c8665f48dbe44eae79dd7939 Mon Sep 17 00:00:00 2001 From: Ming-yi Lin Date: Sat, 28 Dec 2013 15:49:19 -0800 Subject: qcacld: HDD: RTSCTS protection host API Implmentation RTSCTS protection STA mode API was not working. Fix it. Also implement private ioctl api for SAP mode. Change-Id: I5631d220f20a470fa4e1772ab3dceb7972d5b546 CRs-fixed: 594385 --- CORE/HDD/inc/qc_sap_ioctl.h | 2 ++ CORE/HDD/inc/wlan_hdd_wext.h | 4 +++- CORE/HDD/src/wlan_hdd_hostapd.c | 36 +++++++++++++++++++++++++++++++++++- CORE/HDD/src/wlan_hdd_wext.c | 8 +++++--- 4 files changed, 45 insertions(+), 5 deletions(-) diff --git a/CORE/HDD/inc/qc_sap_ioctl.h b/CORE/HDD/inc/qc_sap_ioctl.h index 6869975f270f..fa4b9aa99658 100644 --- a/CORE/HDD/inc/qc_sap_ioctl.h +++ b/CORE/HDD/inc/qc_sap_ioctl.h @@ -260,6 +260,8 @@ typedef struct #ifdef DEBUG #define QCSAP_FW_CRASH_INJECT 39 #endif +#define QCSAP_PARAM_SETRTSCTS 42 +#define QCSAP_PARAM_GETRTSCTS 43 #endif /* QCA_WIFI_2_0 */ enum { diff --git a/CORE/HDD/inc/wlan_hdd_wext.h b/CORE/HDD/inc/wlan_hdd_wext.h index 44c08fdc2d82..28a6ab9e52e6 100644 --- a/CORE/HDD/inc/wlan_hdd_wext.h +++ b/CORE/HDD/inc/wlan_hdd_wext.h @@ -205,7 +205,9 @@ typedef enum #define HDD_WPS_ELEM_DEVICE_NAME 0x1011 #define HDD_WPS_ELEM_REGISTRA_CONF_METHODS 0x1053 - +#define HDD_RTSCTS_EN_MASK 0xF +#define HDD_RTSCTS_ENABLE 1 +#define HDD_CTS_ENABLE 2 #define WPS_OUI_TYPE "\x00\x50\xf2\x04" #define WPS_OUI_TYPE_SIZE 4 diff --git a/CORE/HDD/src/wlan_hdd_hostapd.c b/CORE/HDD/src/wlan_hdd_hostapd.c index 9ac914c705aa..e873a9787739 100644 --- a/CORE/HDD/src/wlan_hdd_hostapd.c +++ b/CORE/HDD/src/wlan_hdd_hostapd.c @@ -1196,6 +1196,23 @@ static iw_softap_setparam(struct net_device *dev, break; } #endif + case QCSAP_PARAM_SETRTSCTS: + { + ret = process_wma_set_command((int)pHostapdAdapter->sessionId, + (int)WMI_VDEV_PARAM_ENABLE_RTSCTS, + set_value, VDEV_CMD); + if (!ret) { + if (ccmCfgSetInt(hHal, WNI_CFG_RTS_THRESHOLD, (tANI_U32)value, + ccmCfgSetCallback, eANI_BOOLEAN_TRUE) != + eHAL_STATUS_SUCCESS) { + + hddLog(LOGE, "FAILED TO SET RTSCTS at SAP"); + ret = -EIO; + break; + } + } + break; + } #endif /* QCA_WIFI_2_0 */ default: hddLog(LOGE, FL("Invalid setparam command %d value %d"), @@ -1265,7 +1282,16 @@ static iw_softap_getparam(struct net_device *dev, *value = (WLAN_HDD_GET_CTX(pHostapdAdapter))->cfg_ini->apAutoChannelSelection; break; } - + case QCSAP_PARAM_GETRTSCTS: + { + hdd_context_t *wmahddCtxt = WLAN_HDD_GET_CTX(pHostapdAdapter); + void *wmapvosContext = wmahddCtxt->pvosContext; + *value = wma_cli_get_command(wmapvosContext, + (int)pHostapdAdapter->sessionId, + (int)WMI_VDEV_PARAM_ENABLE_RTSCTS, + VDEV_CMD); + break; + } default: hddLog(LOGE, FL("Invalid getparam command %d"), sub_cmd); ret = -EINVAL; @@ -3147,6 +3173,14 @@ static const struct iw_priv_args hostapd_private_args[] = { 0, "crash_inject" }, #endif + { QCSAP_PARAM_SETRTSCTS, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, + "enablertscts" }, + { QCSAP_PARAM_GETRTSCTS, 0, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + "get_rtscts" }, + #endif /* QCA_WIFI_2_0 */ { QCSAP_IOCTL_GETPARAM, diff --git a/CORE/HDD/src/wlan_hdd_wext.c b/CORE/HDD/src/wlan_hdd_wext.c index ad9bb2a81bd8..c092193455f6 100644 --- a/CORE/HDD/src/wlan_hdd_wext.c +++ b/CORE/HDD/src/wlan_hdd_wext.c @@ -4619,10 +4619,12 @@ static int iw_setint_getnone(struct net_device *dev, struct iw_request_info *inf { u_int32_t value; - hddLog(LOG1, "WMI_VDEV_PARAM_ENABLE_RTSCTS val %d", set_value); - if (set_value == 1) + hddLog(LOG1, "WMI_VDEV_PARAM_ENABLE_RTSCTS val 0x%x", set_value); + + if ((set_value & HDD_RTSCTS_EN_MASK) == HDD_RTSCTS_ENABLE) value = (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini->RTSThreshold; - else if (set_value == 0) + else if (((set_value & HDD_RTSCTS_EN_MASK) == 0) || + ((set_value & HDD_RTSCTS_EN_MASK) == HDD_CTS_ENABLE)) value = WNI_CFG_RTS_THRESHOLD_STAMAX; else return -EIO; -- cgit v1.2.3 From 33123903e62e65e590ac140c89258a422b03fa40 Mon Sep 17 00:00:00 2001 From: Ryan Hsu Date: Sat, 21 Dec 2013 11:08:40 +0800 Subject: qcacld: sap: add the txrx_fwstats dump to sap interface Add the txrx fw statistics dump for SAP mode. ref: copy from STA mode. Change-Id: I5ea91c9b55714d205d919b846b51454f48639fc8 CRs-fixed: 592898 --- CORE/HDD/inc/qc_sap_ioctl.h | 2 ++ CORE/HDD/src/wlan_hdd_hostapd.c | 25 ++++++++++++++++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/CORE/HDD/inc/qc_sap_ioctl.h b/CORE/HDD/inc/qc_sap_ioctl.h index fa4b9aa99658..5157ae0aeecc 100644 --- a/CORE/HDD/inc/qc_sap_ioctl.h +++ b/CORE/HDD/inc/qc_sap_ioctl.h @@ -260,6 +260,8 @@ typedef struct #ifdef DEBUG #define QCSAP_FW_CRASH_INJECT 39 #endif +#define QCASAP_SET_TXRX_FWSTATS 40 +#define QCASAP_TXRX_FWSTATS_RESET 41 #define QCSAP_PARAM_SETRTSCTS 42 #define QCSAP_PARAM_GETRTSCTS 43 #endif /* QCA_WIFI_2_0 */ diff --git a/CORE/HDD/src/wlan_hdd_hostapd.c b/CORE/HDD/src/wlan_hdd_hostapd.c index e873a9787739..05bc629cadee 100644 --- a/CORE/HDD/src/wlan_hdd_hostapd.c +++ b/CORE/HDD/src/wlan_hdd_hostapd.c @@ -1196,6 +1196,22 @@ static iw_softap_setparam(struct net_device *dev, break; } #endif + case QCASAP_SET_TXRX_FWSTATS: + { + hddLog(LOG1, "WE_SET_TXRX_FWSTATS val %d", set_value); + ret = process_wma_set_command((int)pHostapdAdapter->sessionId, + (int)WMA_VDEV_TXRX_FWSTATS_ENABLE_CMDID, + set_value, VDEV_CMD); + break; + } + case QCASAP_TXRX_FWSTATS_RESET: + { + hddLog(LOG1, "WE_TXRX_FWSTATS_RESET val %d", set_value); + ret = process_wma_set_command((int)pHostapdAdapter->sessionId, + (int)WMA_VDEV_TXRX_FWSTATS_RESET_CMDID, + set_value, VDEV_CMD); + break; + } case QCSAP_PARAM_SETRTSCTS: { ret = process_wma_set_command((int)pHostapdAdapter->sessionId, @@ -3173,6 +3189,14 @@ static const struct iw_priv_args hostapd_private_args[] = { 0, "crash_inject" }, #endif + { QCASAP_SET_TXRX_FWSTATS, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, + "txrx_fw_stats" }, + { QCASAP_TXRX_FWSTATS_RESET, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, + "txrx_fw_st_rst" }, { QCSAP_PARAM_SETRTSCTS, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, @@ -3180,7 +3204,6 @@ static const struct iw_priv_args hostapd_private_args[] = { { QCSAP_PARAM_GETRTSCTS, 0, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "get_rtscts" }, - #endif /* QCA_WIFI_2_0 */ { QCSAP_IOCTL_GETPARAM, -- cgit v1.2.3 From ff7f88aece560c63112abf73914cf9144b0eb489 Mon Sep 17 00:00:00 2001 From: Ryan Hsu Date: Sat, 4 Jan 2014 15:56:16 +0800 Subject: qcacld: sap: to support of 11n/11ac fixed rate configuration SAP mode didn't support fixed-rate, add the ioctl handler to configure the fixed rate as STA mode. Change-Id: Idb33b2413b12db1c40c32b4e0f2eb975a901b56e CRs-fixed: 595335 --- CORE/HDD/inc/qc_sap_ioctl.h | 9 +++++++ CORE/HDD/src/wlan_hdd_hostapd.c | 56 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+) diff --git a/CORE/HDD/inc/qc_sap_ioctl.h b/CORE/HDD/inc/qc_sap_ioctl.h index 5157ae0aeecc..c01b727167ed 100644 --- a/CORE/HDD/inc/qc_sap_ioctl.h +++ b/CORE/HDD/inc/qc_sap_ioctl.h @@ -248,6 +248,13 @@ typedef struct #define QCSAP_IOCTL_PRIV_GET_SOFTAP_LINK_SPEED (SIOCIWFIRSTPRIV + 31) #ifdef QCA_WIFI_2_0 + +#define RC_2_RATE_IDX(_rc) ((_rc) & 0x7) +#define HT_RC_2_STREAMS(_rc) ((((_rc) & 0x78) >> 3) + 1) + +#define RC_2_RATE_IDX_11AC(_rc) ((_rc) & 0xf) +#define HT_RC_2_STREAMS_11AC(_rc) ((((_rc) & 0x30) >> 4) + 1) + /* Private ioctl for firmware debug log */ #define QCSAP_DBGLOG_LOG_LEVEL 31 #define QCSAP_DBGLOG_VAP_ENABLE 32 @@ -264,6 +271,8 @@ typedef struct #define QCASAP_TXRX_FWSTATS_RESET 41 #define QCSAP_PARAM_SETRTSCTS 42 #define QCSAP_PARAM_GETRTSCTS 43 +#define QCASAP_SET_11N_RATE 45 +#define QCASAP_SET_VHT_RATE 46 #endif /* QCA_WIFI_2_0 */ enum { diff --git a/CORE/HDD/src/wlan_hdd_hostapd.c b/CORE/HDD/src/wlan_hdd_hostapd.c index 05bc629cadee..2d619df6b8ee 100644 --- a/CORE/HDD/src/wlan_hdd_hostapd.c +++ b/CORE/HDD/src/wlan_hdd_hostapd.c @@ -1229,6 +1229,52 @@ static iw_softap_setparam(struct net_device *dev, } break; } + case QCASAP_SET_11N_RATE: + { + u_int8_t preamble, nss, rix; + hddLog(LOG1, "WMI_VDEV_PARAM_FIXED_RATE val %d", set_value); + + rix = RC_2_RATE_IDX(set_value); + if (set_value & 0x80) { + preamble = WMI_RATE_PREAMBLE_HT; + nss = HT_RC_2_STREAMS(set_value) -1; + } else { + nss = 0; + rix = RC_2_RATE_IDX(set_value); + if (set_value & 0x10) { + preamble = WMI_RATE_PREAMBLE_CCK; + rix |= 0x4; /* Enable Short preamble always for CCK */ + } else + preamble = WMI_RATE_PREAMBLE_OFDM; + } + + hddLog(LOG1, "WMI_VDEV_PARAM_FIXED_RATE val %d rix %d preamble %x\ + nss %d", set_value, rix, preamble, nss); + + set_value = (preamble << 6) | (nss << 4) | rix; + ret = process_wma_set_command((int)pHostapdAdapter->sessionId, + (int)WMI_VDEV_PARAM_FIXED_RATE, + set_value, VDEV_CMD); + break; + } + + case QCASAP_SET_VHT_RATE: + { + u_int8_t preamble, nss, rix; + + rix = RC_2_RATE_IDX_11AC(set_value); + preamble = WMI_RATE_PREAMBLE_VHT; + nss = HT_RC_2_STREAMS_11AC(set_value) -1; + + hddLog(LOG1, "WMI_VDEV_PARAM_FIXED_RATE val %d rix %d preamble %x\ + nss %d", set_value, rix, preamble, nss); + + set_value = (preamble << 6) | (nss << 4) | rix; + ret = process_wma_set_command((int)pHostapdAdapter->sessionId, + (int)WMI_VDEV_PARAM_FIXED_RATE, + set_value, VDEV_CMD); + break; + } #endif /* QCA_WIFI_2_0 */ default: hddLog(LOGE, FL("Invalid setparam command %d value %d"), @@ -3204,6 +3250,16 @@ static const struct iw_priv_args hostapd_private_args[] = { { QCSAP_PARAM_GETRTSCTS, 0, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "get_rtscts" }, + { QCASAP_SET_11N_RATE, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, + "set11NRates" }, + + { QCASAP_SET_VHT_RATE, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, + "set11ACRates" }, + #endif /* QCA_WIFI_2_0 */ { QCSAP_IOCTL_GETPARAM, -- cgit v1.2.3 From f5cb66c579ed5c64689816f236a882e2dadff9b5 Mon Sep 17 00:00:00 2001 From: Peng Xu Date: Mon, 6 Jan 2014 10:28:31 -0800 Subject: qcacld: hdd: Fix unsupported auth algorithm Currently the SAP allows OPEN_SYSTEM authentication even its authentication type is SHARED KEY. This is fixed by setting the authType of the SAP to the value passed by hostapd before starting the SAP. SAP will reject the authentication request if it is unsupported auth algorithm. Change-Id: I4ff262e4de964eb1545bcc960fac844cffb93d00 CRs-fixed: 594780 --- CORE/HDD/src/wlan_hdd_cfg80211.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c index c56ca3c84c27..6bfa05319375 100644 --- a/CORE/HDD/src/wlan_hdd_cfg80211.c +++ b/CORE/HDD/src/wlan_hdd_cfg80211.c @@ -1897,7 +1897,6 @@ static int wlan_hdd_cfg80211_start_bss(hdd_adapter_t *pHostapdAdapter, { pConfig->ieee80211d = 0; } - pConfig->authType = eSAP_AUTO_SWITCH; capab_info = pMgmt_frame->u.beacon.capab_info; @@ -2570,6 +2569,19 @@ static int wlan_hdd_cfg80211_start_ap(struct wiphy *wiphy, params->chandef.chan, cfg80211_get_chandef_type(&(params->chandef))); #endif #endif + /* set authentication type */ + switch ( params->auth_type ) + { + case NL80211_AUTHTYPE_OPEN_SYSTEM: + pAdapter->sessionCtx.ap.sapConfig.authType = eSAP_OPEN_SYSTEM; + break; + case NL80211_AUTHTYPE_SHARED_KEY: + pAdapter->sessionCtx.ap.sapConfig.authType = eSAP_SHARED_KEY; + break; + default: + pAdapter->sessionCtx.ap.sapConfig.authType = eSAP_AUTO_SWITCH; + } + status = wlan_hdd_cfg80211_start_bss(pAdapter, ¶ms->beacon, params->ssid, params->ssid_len, params->hidden_ssid); } -- cgit v1.2.3 From b63d991fd861386900a2461583c029a4a35a206c Mon Sep 17 00:00:00 2001 From: Manikandan Mohan Date: Thu, 12 Dec 2013 02:41:48 -0800 Subject: qcacld: ipa: IPA interface module for CLD Driver Current design uses passing all the data packets to Linux network stack for routing the packets across interfaces. By doing this host CPU is always busy in handling packet routing. With the concept of IP Accelerator (IPA) interface, the IP packets are sent to IPA for routing instead of sending to Linux Network stack. Change-Id: Ia464467eb75978dcc2a637428014a42c7af57e51 CRs-fixed: 595907 --- CORE/CLD_TXRX/TLSHIM/tl_shim.c | 21 +- CORE/HDD/inc/wlan_hdd_cfg.h | 259 ++-- CORE/HDD/inc/wlan_hdd_ipa.h | 56 + CORE/HDD/inc/wlan_hdd_main.h | 123 +- CORE/HDD/src/wlan_hdd_assoc.c | 38 + CORE/HDD/src/wlan_hdd_cfg.c | 43 + CORE/HDD/src/wlan_hdd_hostapd.c | 757 ++++++------ CORE/HDD/src/wlan_hdd_ipa.c | 1559 +++++++++++++++++++++++++ CORE/HDD/src/wlan_hdd_main.c | 10 + CORE/HDD/src/wlan_hdd_softap_tx_rx.c | 22 +- CORE/HDD/src/wlan_hdd_tx_rx.c | 12 +- CORE/SERVICES/COMMON/adf/adf_nbuf.c | 5 + CORE/SERVICES/COMMON/adf/adf_nbuf.h | 3 + CORE/SERVICES/COMMON/adf/linux/adf_nbuf_pvt.h | 9 + Makefile | 19 +- firmware_bin/WCNSS_qcom_cfg.ini | 6 + 16 files changed, 2405 insertions(+), 537 deletions(-) create mode 100644 CORE/HDD/inc/wlan_hdd_ipa.h create mode 100644 CORE/HDD/src/wlan_hdd_ipa.c diff --git a/CORE/CLD_TXRX/TLSHIM/tl_shim.c b/CORE/CLD_TXRX/TLSHIM/tl_shim.c index 74b592d86dba..8c38ccb15850 100644 --- a/CORE/CLD_TXRX/TLSHIM/tl_shim.c +++ b/CORE/CLD_TXRX/TLSHIM/tl_shim.c @@ -629,7 +629,10 @@ static void tlshim_data_rx_handler(void *context, u_int16_t staid, /* Flush the cached frames to HDD before passing new rx frame */ tl_shim_flush_rx_frames(vos_ctx, tl_shim, staid, 0); - +#ifdef IPA_OFFLOAD + ret = sta_info->data_rx(vos_ctx, rx_buf_list, staid); + if (ret == VOS_STATUS_E_INVAL) { +#endif buf = rx_buf_list; while (buf) { next_buf = adf_nbuf_queue_next(buf); @@ -656,6 +659,9 @@ static void tlshim_data_rx_handler(void *context, u_int16_t staid, adf_nbuf_free(buf); buf = next_buf; } +#ifdef IPA_OFFLOAD + } +#endif } else /* This should not happen if sta_info->registered is true */ goto drop_rx_buf; @@ -757,8 +763,19 @@ adf_nbuf_t WLANTL_SendSTA_DataFrame(void *vos_ctx, u_int8_t sta_id, } /* Zero out skb's context buffer for the driver to use */ +#ifdef IPA_OFFLOAD + if ((NBUF_OWNER_ID(skb) == IPA_NBUF_OWNER_ID) + && NBUF_CALLBACK_FN(skb)) { + uint32_t skb_owner_id = NBUF_OWNER_ID(skb); + __adf_nbuf_callback_fn skb_cb_fn = NBUF_CALLBACK_FN(skb); + adf_os_mem_set(skb->cb, 0, sizeof(skb->cb)); + NBUF_OWNER_ID(skb) = skb_owner_id; + NBUF_CALLBACK_FN(skb) = skb_cb_fn; + } else + adf_os_mem_set(skb->cb, 0, sizeof(skb->cb)); +#else adf_os_mem_set(skb->cb, 0, sizeof(skb->cb)); - +#endif adf_nbuf_map_single(adf_ctx, skb, ADF_OS_DMA_TO_DEVICE); if ((tl_shim->ip_checksum_offload) && (skb->protocol == htons(ETH_P_IP)) diff --git a/CORE/HDD/inc/wlan_hdd_cfg.h b/CORE/HDD/inc/wlan_hdd_cfg.h index 624149ddaa88..c2bdb8a8f3a9 100644 --- a/CORE/HDD/inc/wlan_hdd_cfg.h +++ b/CORE/HDD/inc/wlan_hdd_cfg.h @@ -37,9 +37,9 @@ /* $HEADER$ */ -/*--------------------------------------------------------------------------- +/*--------------------------------------------------------------------------- Include files - -------------------------------------------------------------------------*/ + -------------------------------------------------------------------------*/ #include #include #include @@ -60,21 +60,21 @@ #define CFG_RTS_THRESHOLD_DEFAULT WNI_CFG_RTS_THRESHOLD_STADEF #define CFG_FRAG_THRESHOLD_NAME "gFragmentationThreshold" -#define CFG_FRAG_THRESHOLD_MIN WNI_CFG_FRAGMENTATION_THRESHOLD_STAMIN +#define CFG_FRAG_THRESHOLD_MIN WNI_CFG_FRAGMENTATION_THRESHOLD_STAMIN #define CFG_FRAG_THRESHOLD_MAX WNI_CFG_FRAGMENTATION_THRESHOLD_STAMAX #define CFG_FRAG_THRESHOLD_DEFAULT WNI_CFG_FRAGMENTATION_THRESHOLD_STADEF #define CFG_CALIBRATION_NAME "gCalibration" -#define CFG_CALIBRATION_MIN ( 0 ) +#define CFG_CALIBRATION_MIN ( 0 ) #define CFG_CALIBRATION_MAX ( 1 ) #define CFG_CALIBRATION_MAC_DEFAULT ( 1 ) #define CFG_CALIBRATION_DEFAULT CFG_CALIBRATION_MAC_DEFAULT #define CFG_CALIBRATION_PERIOD_NAME "gCalibrationPeriod" -#define CFG_CALIBRATION_PERIOD_MIN ( 2 ) +#define CFG_CALIBRATION_PERIOD_MIN ( 2 ) #define CFG_CALIBRATION_PERIOD_MAX ( 10 ) #define CFG_CALIBRATION_PERIOD_MAC_DEFAULT ( 5 ) -#define CFG_CALIBRATION_PERIOD_DEFAULT CFG_CALIBRATION_PERIOD_MAC_DEFAULT +#define CFG_CALIBRATION_PERIOD_DEFAULT CFG_CALIBRATION_PERIOD_MAC_DEFAULT #define CFG_OPERATING_CHANNEL_NAME "gOperatingChannel" #define CFG_OPERATING_CHANNEL_MIN ( 0 ) @@ -87,21 +87,21 @@ #define CFG_SHORT_SLOT_TIME_ENABLED_DEFAULT WNI_CFG_SHORT_SLOT_TIME_STADEF #define CFG_11D_SUPPORT_ENABLED_NAME "g11dSupportEnabled" -#define CFG_11D_SUPPORT_ENABLED_MIN WNI_CFG_11D_ENABLED_STAMIN -#define CFG_11D_SUPPORT_ENABLED_MAX WNI_CFG_11D_ENABLED_STAMAX -#define CFG_11D_SUPPORT_ENABLED_DEFAULT WNI_CFG_11D_ENABLED_STADEF // Default is ON +#define CFG_11D_SUPPORT_ENABLED_MIN WNI_CFG_11D_ENABLED_STAMIN +#define CFG_11D_SUPPORT_ENABLED_MAX WNI_CFG_11D_ENABLED_STAMAX +#define CFG_11D_SUPPORT_ENABLED_DEFAULT WNI_CFG_11D_ENABLED_STADEF // Default is ON #define CFG_11H_SUPPORT_ENABLED_NAME "g11hSupportEnabled" #define CFG_11H_SUPPORT_ENABLED_MIN ( 0 ) #define CFG_11H_SUPPORT_ENABLED_MAX ( 1 ) -#define CFG_11H_SUPPORT_ENABLED_DEFAULT ( 1 ) // Default is ON +#define CFG_11H_SUPPORT_ENABLED_DEFAULT ( 1 ) // Default is ON #define CFG_ENFORCE_11D_CHANNELS_NAME "gEnforce11dChannel" #define CFG_ENFORCE_11D_CHANNELS_MIN ( 0 ) #define CFG_ENFORCE_11D_CHANNELS_MAX ( 1 ) #define CFG_ENFORCE_11D_CHANNELS_DEFAULT ( 0 ) -//COUNTRY Code Priority +//COUNTRY Code Priority #define CFG_COUNTRY_CODE_PRIORITY_NAME "gCountryCodePriority" #define CFG_COUNTRY_CODE_PRIORITY_MIN ( 0 ) #define CFG_COUNTRY_CODE_PRIORITY_MAX ( 1 ) @@ -114,7 +114,7 @@ #define CFG_ENFORCE_DEFAULT_DOMAIN_NAME "gEnforceDefaultDomain" #define CFG_ENFORCE_DEFAULT_DOMAIN_MIN ( 0 ) -#define CFG_ENFORCE_DEFAULT_DOMAIN_MAX ( 1 ) +#define CFG_ENFORCE_DEFAULT_DOMAIN_MAX ( 1 ) #define CFG_ENFORCE_DEFAULT_DOMAIN_DEFAULT ( 0 ) #define CFG_GENERIC_ID1_NAME "gCfg1Id" @@ -198,11 +198,11 @@ #define CFG_ENABLE_IMPS_MAX ( 1 ) #define CFG_ENABLE_IMPS_DEFAULT ( 1 ) -#define CFG_IMPS_MINIMUM_SLEEP_TIME_NAME "gImpsMinSleepTime" +#define CFG_IMPS_MINIMUM_SLEEP_TIME_NAME "gImpsMinSleepTime" #define CFG_IMPS_MINIMUM_SLEEP_TIME_MIN ( 0 ) #define CFG_IMPS_MINIMUM_SLEEP_TIME_MAX ( 65535 ) #define CFG_IMPS_MINIMUM_SLEEP_TIME_DEFAULT ( 5 ) - + #define CFG_IMPS_MODERATE_SLEEP_TIME_NAME "gImpsModSleepTime" #define CFG_IMPS_MODERATE_SLEEP_TIME_MIN ( 0 ) #define CFG_IMPS_MODERATE_SLEEP_TIME_MAX ( 65535 ) @@ -223,7 +223,7 @@ #define CFG_BMPS_MINIMUM_LI_MIN ( 1 ) #define CFG_BMPS_MINIMUM_LI_MAX ( 65535 ) #define CFG_BMPS_MINIMUM_LI_DEFAULT ( 1 ) - + #define CFG_BMPS_MODERATE_LI_NAME "gBmpsModListenInterval" #define CFG_BMPS_MODERATE_LI_MIN ( 1 ) #define CFG_BMPS_MODERATE_LI_MAX ( 65535 ) @@ -237,9 +237,9 @@ // gEnableAutoBmpsTimer has been previously published as an externally // configurable parameter. See analysis of CR 178211 for detailed info // on why we want to *always* set this to 1 i.e. we no longer want -// this parameter to be configurable. the clean solution would be for -// users to not define this item in winreg so that the default value -// (which needs to be changed to 1) gets picked up but we cannot rely on that +// this parameter to be configurable. the clean solution would be for +// users to not define this item in winreg so that the default value +// (which needs to be changed to 1) gets picked up but we cannot rely on that // since this item has been published already hence the proposed // solution to change the name of the item along with the change in the // default value. also we could decide to not read this item from registry @@ -250,15 +250,15 @@ #define CFG_ENABLE_AUTO_BMPS_TIMER_MAX ( 1 ) #define CFG_ENABLE_AUTO_BMPS_TIMER_DEFAULT ( 1 ) -#define CFG_AUTO_BMPS_TIMER_VALUE_NAME "gAutoBmpsTimerValue" +#define CFG_AUTO_BMPS_TIMER_VALUE_NAME "gAutoBmpsTimerValue" #define CFG_AUTO_BMPS_TIMER_VALUE_MIN ( 1000 ) #define CFG_AUTO_BMPS_TIMER_VALUE_MAX ( 4294967295UL ) -#define CFG_AUTO_BMPS_TIMER_VALUE_DEFAULT ( 1000 ) - -#define CFG_MAX_RX_AMPDU_FACTOR_NAME "gMaxRxAmpduFactor" -#define CFG_MAX_RX_AMPDU_FACTOR_MIN WNI_CFG_MAX_RX_AMPDU_FACTOR_STAMIN -#define CFG_MAX_RX_AMPDU_FACTOR_MAX WNI_CFG_MAX_RX_AMPDU_FACTOR_STAMAX -#define CFG_MAX_RX_AMPDU_FACTOR_DEFAULT WNI_CFG_MAX_RX_AMPDU_FACTOR_STADEF +#define CFG_AUTO_BMPS_TIMER_VALUE_DEFAULT ( 1000 ) + +#define CFG_MAX_RX_AMPDU_FACTOR_NAME "gMaxRxAmpduFactor" +#define CFG_MAX_RX_AMPDU_FACTOR_MIN WNI_CFG_MAX_RX_AMPDU_FACTOR_STAMIN +#define CFG_MAX_RX_AMPDU_FACTOR_MAX WNI_CFG_MAX_RX_AMPDU_FACTOR_STAMAX +#define CFG_MAX_RX_AMPDU_FACTOR_DEFAULT WNI_CFG_MAX_RX_AMPDU_FACTOR_STADEF //Configuration added to enable/disable CTS2SELF in //Adaptive RX drain feature @@ -295,24 +295,24 @@ typedef enum #endif #define CFG_CHANNEL_BONDING_MODE_24GHZ_NAME "gChannelBondingMode24GHz" -#define CFG_CHANNEL_BONDING_MODE_MIN WNI_CFG_CHANNEL_BONDING_MODE_STAMIN -#define CFG_CHANNEL_BONDING_MODE_MAX WNI_CFG_CHANNEL_BONDING_MODE_STAMAX -#define CFG_CHANNEL_BONDING_MODE_DEFAULT WNI_CFG_CHANNEL_BONDING_MODE_STADEF +#define CFG_CHANNEL_BONDING_MODE_MIN WNI_CFG_CHANNEL_BONDING_MODE_STAMIN +#define CFG_CHANNEL_BONDING_MODE_MAX WNI_CFG_CHANNEL_BONDING_MODE_STAMAX +#define CFG_CHANNEL_BONDING_MODE_DEFAULT WNI_CFG_CHANNEL_BONDING_MODE_STADEF #define CFG_CHANNEL_BONDING_MODE_5GHZ_NAME "gChannelBondingMode5GHz" -#define CFG_CHANNEL_BONDING_MODE_MIN WNI_CFG_CHANNEL_BONDING_MODE_STAMIN -#define CFG_CHANNEL_BONDING_MODE_MAX WNI_CFG_CHANNEL_BONDING_MODE_STAMAX -#define CFG_CHANNEL_BONDING_MODE_DEFAULT WNI_CFG_CHANNEL_BONDING_MODE_STADEF +#define CFG_CHANNEL_BONDING_MODE_MIN WNI_CFG_CHANNEL_BONDING_MODE_STAMIN +#define CFG_CHANNEL_BONDING_MODE_MAX WNI_CFG_CHANNEL_BONDING_MODE_STAMAX +#define CFG_CHANNEL_BONDING_MODE_DEFAULT WNI_CFG_CHANNEL_BONDING_MODE_STADEF #define CFG_FIXED_RATE_NAME "gFixedRate" #define CFG_FIXED_RATE_MIN WNI_CFG_FIXED_RATE_STAMIN #define CFG_FIXED_RATE_MAX WNI_CFG_FIXED_RATE_STAMAX -#define CFG_FIXED_RATE_DEFAULT WNI_CFG_FIXED_RATE_STADEF - +#define CFG_FIXED_RATE_DEFAULT WNI_CFG_FIXED_RATE_STADEF + #define CFG_SHORT_GI_20MHZ_NAME "gShortGI20Mhz" #define CFG_SHORT_GI_20MHZ_MIN WNI_CFG_SHORT_GI_20MHZ_STAMIN -#define CFG_SHORT_GI_20MHZ_MAX WNI_CFG_SHORT_GI_20MHZ_STAMAX -#define CFG_SHORT_GI_20MHZ_DEFAULT WNI_CFG_SHORT_GI_20MHZ_STADEF +#define CFG_SHORT_GI_20MHZ_MAX WNI_CFG_SHORT_GI_20MHZ_STAMAX +#define CFG_SHORT_GI_20MHZ_DEFAULT WNI_CFG_SHORT_GI_20MHZ_STADEF #define CFG_BLOCK_ACK_AUTO_SETUP_NAME "gBlockAckAutoSetup" #define CFG_BLOCK_ACK_AUTO_SETUP_MIN ( 0 ) @@ -347,14 +347,14 @@ typedef enum #define CFG_SCAN_RESULT_AGE_TIME_CPS_DEFAULT ( 600 ) #define CFG_RSSI_CATEGORY_GAP_NAME "gRssiCatGap" -#define CFG_RSSI_CATEGORY_GAP_MIN ( 5 ) -#define CFG_RSSI_CATEGORY_GAP_MAX ( 100 ) +#define CFG_RSSI_CATEGORY_GAP_MIN ( 5 ) +#define CFG_RSSI_CATEGORY_GAP_MAX ( 100 ) #define CFG_RSSI_CATEGORY_GAP_DEFAULT ( 5 ) #if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR) #define CFG_ROAM_PREFER_5GHZ "gRoamPrefer5GHz" -#define CFG_ROAM_PREFER_5GHZ_MIN ( 0 ) -#define CFG_ROAM_PREFER_5GHZ_MAX ( 1 ) +#define CFG_ROAM_PREFER_5GHZ_MIN ( 0 ) +#define CFG_ROAM_PREFER_5GHZ_MAX ( 1 ) #define CFG_ROAM_PREFER_5GHZ_DEFAULT ( 1 ) /* @@ -404,8 +404,8 @@ typedef enum #define CFG_AP_QOS_UAPSD_MODE_NAME "gEnableApUapsd" // ACs to setup U-APSD for at assoc #define CFG_AP_QOS_UAPSD_MODE_MIN ( 0 ) -#define CFG_AP_QOS_UAPSD_MODE_MAX ( 1 ) -#define CFG_AP_QOS_UAPSD_MODE_DEFAULT ( 1 ) +#define CFG_AP_QOS_UAPSD_MODE_MAX ( 1 ) +#define CFG_AP_QOS_UAPSD_MODE_DEFAULT ( 1 ) #define CFG_AP_COUNTRY_CODE "gAPCntryCode" #define CFG_AP_COUNTRY_CODE_MIN "USI" @@ -435,20 +435,20 @@ typedef enum #define CFG_AP_PROTECTION_MODE_MAX ( 0xFFFF ) #define CFG_AP_PROTECTION_MODE_DEFAULT ( 0xBFFF ) -#define CFG_AP_OBSS_PROTECTION_MODE_NAME "gEnableApOBSSProt" +#define CFG_AP_OBSS_PROTECTION_MODE_NAME "gEnableApOBSSProt" #define CFG_AP_OBSS_PROTECTION_MODE_MIN ( 0 ) -#define CFG_AP_OBSS_PROTECTION_MODE_MAX ( 1 ) -#define CFG_AP_OBSS_PROTECTION_MODE_DEFAULT ( 0 ) +#define CFG_AP_OBSS_PROTECTION_MODE_MAX ( 1 ) +#define CFG_AP_OBSS_PROTECTION_MODE_DEFAULT ( 0 ) #define CFG_AP_STA_SECURITY_SEPERATION_NAME "gDisableIntraBssFwd" #define CFG_AP_STA_SECURITY_SEPERATION_MIN ( 0 ) -#define CFG_AP_STA_SECURITY_SEPERATION_MAX ( 1 ) -#define CFG_AP_STA_SECURITY_SEPERATION_DEFAULT ( 0 ) +#define CFG_AP_STA_SECURITY_SEPERATION_MAX ( 1 ) +#define CFG_AP_STA_SECURITY_SEPERATION_DEFAULT ( 0 ) -#define CFG_AP_LISTEN_MODE_NAME "gEnablePhyAgcListenMode" +#define CFG_AP_LISTEN_MODE_NAME "gEnablePhyAgcListenMode" #define CFG_AP_LISTEN_MODE_MIN (0) -#define CFG_AP_LISTEN_MODE_MAX (128) -#define CFG_AP_LISTEN_MODE_DEFAULT (128) +#define CFG_AP_LISTEN_MODE_MAX (128) +#define CFG_AP_LISTEN_MODE_DEFAULT (128) #define CFG_AP_AUTO_SHUT_OFF "gAPAutoShutOff" #define CFG_AP_AUTO_SHUT_OFF_MIN ( 0 ) @@ -514,11 +514,11 @@ typedef enum #define CFG_BEACON_INTERVAL_MAX WNI_CFG_BEACON_INTERVAL_STAMAX #define CFG_BEACON_INTERVAL_DEFAULT WNI_CFG_BEACON_INTERVAL_STADEF -//Additional Handoff related Parameters -#define CFG_ENABLE_IDLE_SCAN_NAME "gEnableIdleScan" +//Additional Handoff related Parameters +#define CFG_ENABLE_IDLE_SCAN_NAME "gEnableIdleScan" #define CFG_ENABLE_IDLE_SCAN_MIN ( 0 ) #define CFG_ENABLE_IDLE_SCAN_MAX ( 1 ) -#define CFG_ENABLE_IDLE_SCAN_DEFAULT ( 1 ) +#define CFG_ENABLE_IDLE_SCAN_DEFAULT ( 1 ) #define CFG_ROAMING_TIME_NAME "gRoamingTime" #define CFG_ROAMING_TIME_MIN ( 0 ) @@ -527,14 +527,14 @@ typedef enum #define CFG_VCC_RSSI_TRIGGER_NAME "gVccRssiTrigger" #define CFG_VCC_RSSI_TRIGGER_MIN ( 0 ) -#define CFG_VCC_RSSI_TRIGGER_MAX ( 80 ) +#define CFG_VCC_RSSI_TRIGGER_MAX ( 80 ) #define CFG_VCC_RSSI_TRIGGER_DEFAULT ( 80 ) #define CFG_VCC_UL_MAC_LOSS_THRESH_NAME "gVccUlMacLossThresh" -#define CFG_VCC_UL_MAC_LOSS_THRESH_MIN ( 0 ) +#define CFG_VCC_UL_MAC_LOSS_THRESH_MIN ( 0 ) #define CFG_VCC_UL_MAC_LOSS_THRESH_MAX ( 9 ) #define CFG_VCC_UL_MAC_LOSS_THRESH_DEFAULT ( 9 ) - + #define CFG_PASSIVE_MAX_CHANNEL_TIME_NAME "gPassiveMaxChannelTime" #define CFG_PASSIVE_MAX_CHANNEL_TIME_MIN ( 0 ) #define CFG_PASSIVE_MAX_CHANNEL_TIME_MAX ( 10000 ) @@ -707,13 +707,13 @@ typedef enum #define CFG_QOS_WMM_80211E_ENABLED_NAME "80211eIsEnabled" #define CFG_QOS_WMM_80211E_ENABLED_MIN (0) -#define CFG_QOS_WMM_80211E_ENABLED_MAX (1) -#define CFG_QOS_WMM_80211E_ENABLED_DEFAULT (0) +#define CFG_QOS_WMM_80211E_ENABLED_MAX (1) +#define CFG_QOS_WMM_80211E_ENABLED_DEFAULT (0) #define CFG_QOS_WMM_UAPSD_MASK_NAME "UapsdMask" // ACs to setup U-APSD for at assoc #define CFG_QOS_WMM_UAPSD_MASK_MIN (0x00) -#define CFG_QOS_WMM_UAPSD_MASK_MAX (0xFF) -#define CFG_QOS_WMM_UAPSD_MASK_DEFAULT (0x00) +#define CFG_QOS_WMM_UAPSD_MASK_MAX (0xFF) +#define CFG_QOS_WMM_UAPSD_MASK_DEFAULT (0x00) #define CFG_QOS_WMM_INFRA_UAPSD_VO_SRV_INTV_NAME "InfraUapsdVoSrvIntv" #define CFG_QOS_WMM_INFRA_UAPSD_VO_SRV_INTV_MIN (0) @@ -727,7 +727,7 @@ typedef enum #define CFG_QOS_WMM_INFRA_UAPSD_VI_SRV_INTV_NAME "InfraUapsdViSrvIntv" #define CFG_QOS_WMM_INFRA_UAPSD_VI_SRV_INTV_MIN (0) -#define CFG_QOS_WMM_INFRA_UAPSD_VI_SRV_INTV_MAX (4294967295UL) +#define CFG_QOS_WMM_INFRA_UAPSD_VI_SRV_INTV_MAX (4294967295UL) #define CFG_QOS_WMM_INFRA_UAPSD_VI_SRV_INTV_DEFAULT (300) #define CFG_QOS_WMM_INFRA_UAPSD_VI_SUS_INTV_NAME "InfraUapsdViSuspIntv" @@ -752,7 +752,7 @@ typedef enum #define CFG_QOS_WMM_INFRA_UAPSD_BK_SUS_INTV_NAME "InfraUapsdBkSuspIntv" #define CFG_QOS_WMM_INFRA_UAPSD_BK_SUS_INTV_MIN (0) -#define CFG_QOS_WMM_INFRA_UAPSD_BK_SUS_INTV_MAX (4294967295UL) +#define CFG_QOS_WMM_INFRA_UAPSD_BK_SUS_INTV_MAX (4294967295UL) #define CFG_QOS_WMM_INFRA_UAPSD_BK_SUS_INTV_DEFAULT (2000) #ifdef FEATURE_WLAN_CCX @@ -782,7 +782,7 @@ typedef enum #if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR) // This flag will control fasttransition in case of 11r and ccx. // Basically with this the whole neighbor roam, pre-auth, reassoc -// can be turned ON/OFF. +// can be turned ON/OFF. // With this turned OFF 11r will completely not work. // For 11r this flag has to be ON. // For CCX fastroam will not work. @@ -795,7 +795,7 @@ typedef enum * AP1 is the currently associated AP and AP2 is chosen for roaming. * The Roaming will happen only if AP2 has better Signal Quality and it has a RSSI better than AP1 * in terms of RoamRssiDiff,and RoamRssiDiff is the number of units (typically measured in dB) AP2 - * is better than AP1. + * is better than AP1. * This check is not done if the value is Zero */ #define CFG_ROAM_RSSI_DIFF_NAME "RoamRssiDiff" #define CFG_ROAM_RSSI_DIFF_MIN (0) @@ -804,11 +804,11 @@ typedef enum /* * Following a scan and if potential roam candidate(s) are found, - * then determine whether to register for reassoc threshold or roam - * immediately based on this configuration parameter. If the RSSI - * of any available candidate is better than the currently associated - * AP by at least gImmediateRoamRssiDiff, then being to roam - * immediately. + * then determine whether to register for reassoc threshold or roam + * immediately based on this configuration parameter. If the RSSI + * of any available candidate is better than the currently associated + * AP by at least gImmediateRoamRssiDiff, then being to roam + * immediately. * NOTE: Value of 0 means that immediate roaming is enabled by default */ #define CFG_IMMEDIATE_ROAM_RSSI_DIFF_NAME "gImmediateRoamRssiDiff" @@ -985,28 +985,28 @@ typedef enum #if defined WLAN_FEATURE_VOWIFI #define CFG_RRM_ENABLE_NAME "gRrmEnable" #define CFG_RRM_ENABLE_MIN (0) -#define CFG_RRM_ENABLE_MAX (1) +#define CFG_RRM_ENABLE_MAX (1) #define CFG_RRM_ENABLE_DEFAULT (0) #define CFG_RRM_OPERATING_CHAN_MAX_DURATION_NAME "gRrmOperChanMax" //section 11.10.3 IEEE std. 802.11k-2008 #define CFG_RRM_OPERATING_CHAN_MAX_DURATION_MIN (0) //Maxduration = 2^(maxDuration - 4) * bcnIntvl. -#define CFG_RRM_OPERATING_CHAN_MAX_DURATION_MAX (8) +#define CFG_RRM_OPERATING_CHAN_MAX_DURATION_MAX (8) #define CFG_RRM_OPERATING_CHAN_MAX_DURATION_DEFAULT (3) //max duration = 2^-1 * bcnIntvl (50% of bcn intvl) #define CFG_RRM_NON_OPERATING_CHAN_MAX_DURATION_NAME "gRrmNonOperChanMax" //Same as above. #define CFG_RRM_NON_OPERATING_CHAN_MAX_DURATION_MIN (0) -#define CFG_RRM_NON_OPERATING_CHAN_MAX_DURATION_MAX (8) +#define CFG_RRM_NON_OPERATING_CHAN_MAX_DURATION_MAX (8) #define CFG_RRM_NON_OPERATING_CHAN_MAX_DURATION_DEFAULT (3) #define CFG_RRM_MEAS_RANDOMIZATION_INTVL_NAME "gRrmRandnIntvl" #define CFG_RRM_MEAS_RANDOMIZATION_INTVL_MIN (10) -#define CFG_RRM_MEAS_RANDOMIZATION_INTVL_MAX (100) +#define CFG_RRM_MEAS_RANDOMIZATION_INTVL_MAX (100) #define CFG_RRM_MEAS_RANDOMIZATION_INTVL_DEFAULT (100) #endif #define CFG_QOS_IMPLICIT_SETUP_ENABLED_NAME "ImplicitQosIsEnabled" #define CFG_QOS_IMPLICIT_SETUP_ENABLED_MIN (0) -#define CFG_QOS_IMPLICIT_SETUP_ENABLED_MAX (1) +#define CFG_QOS_IMPLICIT_SETUP_ENABLED_MAX (1) #define CFG_QOS_IMPLICIT_SETUP_ENABLED_DEFAULT (1) #define CFG_ENABLE_LOGP_NAME "gEnableLogp" @@ -1048,7 +1048,7 @@ typedef enum #define CFG_BTC_STATIC_LEN_LE_BT_MIN ( 5000 ) #define CFG_BTC_STATIC_LEN_LE_BT_MAX ( 500000 ) #define CFG_BTC_STATIC_LEN_LE_BT_DEFAULT ( 120000 ) - + #define CFG_BTC_STATIC_LEN_INQ_WLAN_NAME "btcStaticLenInqWlan" #define CFG_BTC_STATIC_LEN_INQ_WLAN_MIN ( 0 ) #define CFG_BTC_STATIC_LEN_INQ_WLAN_MAX ( 500000 ) @@ -1219,14 +1219,14 @@ typedef enum #define CFG_NEIGHBOR_SCAN_CHAN_LIST_DEFAULT "" #define CFG_NEIGHBOR_SCAN_MIN_CHAN_TIME_NAME "gNeighborScanChannelMinTime" -#define CFG_NEIGHBOR_SCAN_MIN_CHAN_TIME_MIN (10) -#define CFG_NEIGHBOR_SCAN_MIN_CHAN_TIME_MAX (40) -#define CFG_NEIGHBOR_SCAN_MIN_CHAN_TIME_DEFAULT (20) +#define CFG_NEIGHBOR_SCAN_MIN_CHAN_TIME_MIN (10) +#define CFG_NEIGHBOR_SCAN_MIN_CHAN_TIME_MAX (40) +#define CFG_NEIGHBOR_SCAN_MIN_CHAN_TIME_DEFAULT (20) #define CFG_NEIGHBOR_SCAN_MAX_CHAN_TIME_NAME "gNeighborScanChannelMaxTime" #define CFG_NEIGHBOR_SCAN_MAX_CHAN_TIME_MIN (3) #define CFG_NEIGHBOR_SCAN_MAX_CHAN_TIME_MAX (300) -#define CFG_NEIGHBOR_SCAN_MAX_CHAN_TIME_DEFAULT (30) +#define CFG_NEIGHBOR_SCAN_MAX_CHAN_TIME_DEFAULT (30) #define CFG_11R_NEIGHBOR_REQ_MAX_TRIES_NAME "gMaxNeighborReqTries" #define CFG_11R_NEIGHBOR_REQ_MAX_TRIES_MIN (1) @@ -1245,20 +1245,20 @@ typedef enum #define CFG_EMPTY_SCAN_REFRESH_PERIOD_DEFAULT (0) #endif /* WLAN_FEATURE_NEIGHBOR_ROAMING */ -#define CFG_QOS_WMM_BURST_SIZE_DEFN_NAME "burstSizeDefinition" +#define CFG_QOS_WMM_BURST_SIZE_DEFN_NAME "burstSizeDefinition" #define CFG_QOS_WMM_BURST_SIZE_DEFN_MIN (0) #define CFG_QOS_WMM_BURST_SIZE_DEFN_MAX (1) #define CFG_QOS_WMM_BURST_SIZE_DEFN_DEFAULT (0) -#define CFG_QOS_WMM_TS_INFO_ACK_POLICY_NAME "tsInfoAckPolicy" +#define CFG_QOS_WMM_TS_INFO_ACK_POLICY_NAME "tsInfoAckPolicy" #define CFG_QOS_WMM_TS_INFO_ACK_POLICY_MIN (0x00) #define CFG_QOS_WMM_TS_INFO_ACK_POLICY_MAX (0x01) #define CFG_QOS_WMM_TS_INFO_ACK_POLICY_DEFAULT (0x00) #define CFG_SINGLE_TID_RC_NAME "SingleTIDRC" #define CFG_SINGLE_TID_RC_MIN (0) // Seperate replay counter for all TID -#define CFG_SINGLE_TID_RC_MAX (1) // Single replay counter for all TID -#define CFG_SINGLE_TID_RC_DEFAULT (1) +#define CFG_SINGLE_TID_RC_MAX (1) // Single replay counter for all TID +#define CFG_SINGLE_TID_RC_DEFAULT (1) #define CFG_MCAST_BCAST_FILTER_SETTING_NAME "McastBcastFilter" #define CFG_MCAST_BCAST_FILTER_SETTING_MIN (0) #define CFG_MCAST_BCAST_FILTER_SETTING_MAX (3) @@ -1282,7 +1282,7 @@ typedef enum #define CFG_VALIDATE_SCAN_LIST_NAME "gValidateScanList" #define CFG_VALIDATE_SCAN_LIST_MIN (0) -#define CFG_VALIDATE_SCAN_LIST_MAX (1) +#define CFG_VALIDATE_SCAN_LIST_MAX (1) #define CFG_VALIDATE_SCAN_LIST_DEFAULT (0) #define CFG_NULLDATA_AP_RESP_TIMEOUT_NAME "gNullDataApRespTimeout" @@ -1551,7 +1551,7 @@ typedef enum * Enable Dynamic DTIM * Options * 0 -Disable DynamicDTIM - * 1 to 5 - SLM will switch to DTIM specified here when host suspends and + * 1 to 5 - SLM will switch to DTIM specified here when host suspends and * switch DTIM1 when host resumes */ #define CFG_ENABLE_DYNAMIC_DTIM_NAME "gEnableDynamicDTIM" #define CFG_ENABLE_DYNAMIC_DTIM_MIN ( 0 ) @@ -1622,7 +1622,7 @@ typedef enum * disconnection. * gAllowMCCGODiffBI = 2 //If set to 2 workaround 1 disassoc all the clients * and update beacon Interval - * gAllowMCCGODiffBI = 3 //If set to 3 tear down the P2P link in auto/ + * gAllowMCCGODiffBI = 3 //If set to 3 tear down the P2P link in auto/ * Non-autonomous -GO case * gAllowMCCGODiffBI = 4 //If set to 4 don't disconnect the P2P client * in autonomous/Non-autonomous -GO case update @@ -1637,10 +1637,10 @@ typedef enum * Enable/Disable Thermal Mitigation feature * Default: Disable */ -#define CFG_THERMAL_MIGRATION_ENABLE_NAME "gThermalMitigationEnable" -#define CFG_THERMAL_MIGRATION_ENABLE_MIN ( 0 ) -#define CFG_THERMAL_MIGRATION_ENABLE_MAX ( 1 ) -#define CFG_THERMAL_MIGRATION_ENABLE_DEFAULT ( 0 ) +#define CFG_THERMAL_MIGRATION_ENABLE_NAME "gThermalMitigationEnable" +#define CFG_THERMAL_MIGRATION_ENABLE_MIN ( 0 ) +#define CFG_THERMAL_MIGRATION_ENABLE_MAX ( 1 ) +#define CFG_THERMAL_MIGRATION_ENABLE_DEFAULT ( 0 ) /* * Enable/Disable Modulated DTIM feature @@ -1689,8 +1689,8 @@ typedef enum #define CFG_ENABLE_RX_LDPC_MAX ( 1 ) #define CFG_ENABLE_RX_LDPC_DEFAULT ( 0 ) -/* - * Enable/Disable vsta based on MAX Assoc limit +/* + * Enable/Disable vsta based on MAX Assoc limit * defined in WCNSS_qcom_cfg.ini. */ #ifdef WLAN_SOFTAP_VSTA_FEATURE @@ -1811,8 +1811,8 @@ typedef enum #define CFG_SCAN_AGING_PARAM_MAX ( 200 ) #define CFG_SCAN_AGING_PARAM_DEFAULT ( 60 ) -/* Config Param to enable the txLdpc capability - * 0 - disable +/* Config Param to enable the txLdpc capability + * 0 - disable * 1 - HT LDPC enable * 2 - VHT LDPC enable * 3 - HT & VHT LDPC enable */ @@ -1825,7 +1825,7 @@ typedef enum * Enable / Disable MCC Adaptive Scheduler feature * Default: Enable */ -#define CFG_ENABLE_MCC_ADATIVE_SCHEDULER_ENABLED_NAME "gEnableMCCAdaptiveScheduler" +#define CFG_ENABLE_MCC_ADATIVE_SCHEDULER_ENABLED_NAME "gEnableMCCAdaptiveScheduler" #define CFG_ENABLE_MCC_ADATIVE_SCHEDULER_ENABLED_MIN ( 0 ) #define CFG_ENABLE_MCC_ADATIVE_SCHEDULER_ENABLED_MAX ( 1 ) #define CFG_ENABLE_MCC_ADATIVE_SCHEDULER_ENABLED_DEFAULT ( 1 ) @@ -2009,6 +2009,48 @@ This feature requires the dependent cfg.ini "gRoamPrefer5GHz" set to 1 */ #define CFG_POWERSAVE_OFFLOAD_MAX ( 4 ) #define CFG_POWERSAVE_OFFLOAD_DEFAULT ( CFG_POWERSAVE_OFFLOAD_MIN ) +#ifdef IPA_OFFLOAD +/* + * IPA Offload + */ +#define CFG_IPA_OFFLOAD_NAME "gIPAEnable" +#define CFG_IPA_OFFLOAD_DISABLE ( 0 ) +#define CFG_IPA_OFFLOAD_ENABLE ( 1 ) +#define CFG_IPA_OFFLOAD_DEFAULT ( CFG_IPA_OFFLOAD_ENABLE ) + +/* + * IPA IPv6 Offload + */ +#define CFG_IPA_IPV6_OFFLOAD_NAME "gIPAIPv6Enable" +#define CFG_IPA_IPV6_OFFLOAD_DISABLE ( 0 ) +#define CFG_IPA_IPV6_OFFLOAD_ENABLE ( 1 ) +#define CFG_IPA_IPV6_OFFLOAD_DEFAULT ( CFG_IPA_IPV6_OFFLOAD_DISABLE ) + +/* + * IPA DESC SIZE + */ +#define CFG_IPA_DESC_SIZE_NAME "gIPADescSize" +#define CFG_IPA_DESC_SIZE_MIN ( 800 ) +#define CFG_IPA_DESC_SIZE_MAX ( 8000 ) +#define CFG_IPA_DESC_SIZE_DEFAULT ( 800 ) + +/* + * IPA PRE FILTER + */ +#define CFG_IPA_PRE_FILTER_NAME "gIPAPreFilterEnable" +#define CFG_IPA_PRE_FILTER_DISABLE ( 0 ) +#define CFG_IPA_PRE_FILTER_ENABLE ( 1 ) +#define CFG_IPA_PRE_FILTER_DEFAULT ( CFG_IPA_PRE_FILTER_ENABLE ) + +/* + * IPA IPA RESOURCE MANAGER + */ +#define CFG_IPA_RM_NAME "gIPARMEnable" +#define CFG_IPA_RM_DISABLE ( 0 ) +#define CFG_IPA_RM_ENABLE ( 1 ) +#define CFG_IPA_RM_DEFAULT ( CFG_IPA_RM_DISABLE ) +#endif + /* * P2P Listen Offload */ @@ -2073,9 +2115,9 @@ This feature requires the dependent cfg.ini "gRoamPrefer5GHz" set to 1 */ #define CFG_SAP_MAX_NO_PEERS_MAX (32) #define CFG_SAP_MAX_NO_PEERS_DEFAULT (14) -/*--------------------------------------------------------------------------- +/*--------------------------------------------------------------------------- Type declarations - -------------------------------------------------------------------------*/ + -------------------------------------------------------------------------*/ typedef struct { @@ -2207,8 +2249,8 @@ typedef struct v_U8_t nNeighborReassocRssiThreshold; v_U8_t nNeighborLookupRssiThreshold; v_U8_t neighborScanChanList[WNI_CFG_VALID_CHANNEL_LIST_LEN]; - v_U16_t nNeighborScanMinChanTime; - v_U16_t nNeighborScanMaxChanTime; + v_U16_t nNeighborScanMinChanTime; + v_U16_t nNeighborScanMaxChanTime; v_U16_t nMaxNeighborReqTries; v_U16_t nNeighborResultsRefreshPeriod; v_U16_t nEmptyScanRefreshPeriod; @@ -2323,9 +2365,9 @@ typedef struct v_U32_t DelayedTriggerFrmInt; /* Wowl pattern */ - char wowlPattern[1024]; + char wowlPattern[1024]; - /* Control for Replay counetr. value 1 means + /* Control for Replay counetr. value 1 means single replay counter for all TID*/ v_BOOL_t bSingleTidRc; v_U8_t mcastBcastFilterSetting; @@ -2336,7 +2378,7 @@ typedef struct v_BOOL_t fhostNSOffload; v_BOOL_t burstSizeDefinition; v_U8_t tsInfoAckPolicy; - + /* RF Settling Time Clock */ v_U32_t rfSettlingTimeUs; v_U8_t enableBtAmp; @@ -2426,7 +2468,7 @@ typedef struct v_BOOL_t enableRxSTBC; v_BOOL_t enableTxSTBC; v_BOOL_t enableRxLDPC; -#ifdef FEATURE_WLAN_TDLS +#ifdef FEATURE_WLAN_TDLS v_BOOL_t fEnableTDLSSupport; v_BOOL_t fEnableTDLSImplicitTrigger; v_U32_t fTDLSTxStatsPeriod; @@ -2503,14 +2545,21 @@ typedef struct #ifdef WLAN_FEATURE_11AC v_U8_t fVhtAmpduLenExponent; v_U32_t vhtMpduLen; +#endif +#ifdef IPA_OFFLOAD + v_BOOL_t IpaEnable; + v_BOOL_t IpaIPv6Enable; + v_BOOL_t IpaPreFilterEnable; + v_BOOL_t IpaRMEnable; + v_U32_t IpaDescSize; #endif v_U8_t maxWoWFilters; v_U8_t wowEnable; v_U8_t maxNumberOfPeers; } hdd_config_t; -/*--------------------------------------------------------------------------- +/*--------------------------------------------------------------------------- Function declarations and documenation - -------------------------------------------------------------------------*/ + -------------------------------------------------------------------------*/ VOS_STATUS hdd_parse_config_ini(hdd_context_t *pHddCtx); VOS_STATUS hdd_set_sme_config( hdd_context_t *pHddCtx ); VOS_STATUS hdd_set_sme_chan_list(hdd_context_t *hdd_ctx); @@ -2543,7 +2592,7 @@ VOS_STATUS hdd_set_idle_ps_config(hdd_context_t *pHddCtx, v_U32_t val); // modified dynamicially // on a running system -typedef enum +typedef enum { WLAN_PARAM_Integer, WLAN_PARAM_SignedInteger, diff --git a/CORE/HDD/inc/wlan_hdd_ipa.h b/CORE/HDD/inc/wlan_hdd_ipa.h new file mode 100644 index 000000000000..652bf1b178ed --- /dev/null +++ b/CORE/HDD/inc/wlan_hdd_ipa.h @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2013, The Linux Foundation. All rights reserved. + * + * Previously licensed under the ISC license by Qualcomm Atheros, Inc. + * + * + * Permission to use, copy, modify, and/or distribute this software for + * any purpose with or without fee is hereby granted, provided that the + * above copyright notice and this permission notice appear in all + * copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL + * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE + * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +/* + * This file was originally distributed by Qualcomm Atheros, Inc. + * under proprietary terms before Copyright ownership was assigned + * to the Linux Foundation. + */ + +#ifndef HDD_IPA_H__ +#define HDD_IPA_H__ + +/**=========================================================================== + + \file wlan_hdd_ipa.h + + \brief WLAN IPA interface module headers + + ==========================================================================*/ + +/* $HEADER$ */ + +/*--------------------------------------------------------------------------- + Include files + -------------------------------------------------------------------------*/ +#ifdef IPA_OFFLOAD +#include + +VOS_STATUS hdd_ipa_init(hdd_context_t *pHddCtx); +VOS_STATUS hdd_ipa_cleanup(hdd_context_t *pHddCtx); +int hdd_ipa_wlan_evt(void *pAdapter, uint8_t sta_id, + enum ipa_wlan_event type, uint8_t *mac_addr); +VOS_STATUS hdd_ipa_process_rxt(v_VOID_t *vosContext, adf_nbuf_t rxBuf, + v_U8_t staId); +bool hdd_ipa_is_enabled(hdd_context_t *pHddCtx); +#endif + +#endif diff --git a/CORE/HDD/inc/wlan_hdd_main.h b/CORE/HDD/inc/wlan_hdd_main.h index f946e56a8232..245c104caf49 100644 --- a/CORE/HDD/inc/wlan_hdd_main.h +++ b/CORE/HDD/inc/wlan_hdd_main.h @@ -27,17 +27,17 @@ #if !defined( WLAN_HDD_MAIN_H ) #define WLAN_HDD_MAIN_H /**=========================================================================== - + \file WLAN_HDD_MAIN_H.h - + \brief Linux HDD Adapter Type ==========================================================================*/ - -/*--------------------------------------------------------------------------- + +/*--------------------------------------------------------------------------- Include files - -------------------------------------------------------------------------*/ - + -------------------------------------------------------------------------*/ + #include #include #include @@ -57,13 +57,13 @@ #ifdef FEATURE_WLAN_TDLS #include "wlan_hdd_tdls.h" #endif -/*--------------------------------------------------------------------------- +/*--------------------------------------------------------------------------- Preprocessor definitions and constants -------------------------------------------------------------------------*/ /** Number of attempts to detect/remove card */ #define LIBRA_CARD_INSERT_DETECT_MAX_COUNT 5 #define LIBRA_CARD_REMOVE_DETECT_MAX_COUNT 5 -/** Number of Tx Queues */ +/** Number of Tx Queues */ #define NUM_TX_QUEUES 4 /** HDD's internal Tx Queue Length. Needs to be a power of 2 */ #define HDD_TX_QUEUE_MAX_LEN 128 @@ -75,9 +75,9 @@ #define LIBRA_HW_NEEDED_HEADROOM 128 /** Hdd Tx Time out value */ #ifdef LIBRA_LINUX_PC -#define HDD_TX_TIMEOUT (8000) +#define HDD_TX_TIMEOUT (8000) #else -#define HDD_TX_TIMEOUT msecs_to_jiffies(5000) +#define HDD_TX_TIMEOUT msecs_to_jiffies(5000) #endif /** Hdd Default MTU */ #define HDD_DEFAULT_MTU (1500) @@ -309,10 +309,10 @@ typedef struct hdd_stats_s typedef enum { HDD_ROAM_STATE_NONE, - - // Issuing a disconnect due to transition into low power states. + + // Issuing a disconnect due to transition into low power states. HDD_ROAM_STATE_DISCONNECTING_POWER, - + // move to this state when HDD sets a key with SME/CSR. Note this is // an important state to get right because we will get calls into our SME // callback routine for SetKey activity that we did not initiate! @@ -336,7 +336,7 @@ typedef struct roaming_info_s tANI_U32 roamId; eRoamCmdStatus roamStatus; v_BOOL_t deferKeyComplete; - + } roaming_info_t; #ifdef FEATURE_WLAN_WAPI @@ -546,7 +546,7 @@ typedef enum { WLAN_HDD_PROV_DIS_RESP, }tActionFrmType; -typedef struct hdd_cfg80211_state_s +typedef struct hdd_cfg80211_state_s { tANI_U16 current_freq; u64 action_cookie; @@ -594,14 +594,14 @@ struct hdd_station_ctx v_BOOL_t hdd_ReassocScenario; }; -#define BSS_STOP 0 +#define BSS_STOP 0 #define BSS_START 1 typedef struct hdd_hostapd_state_s { int bssState; vos_event_t vosEvent; VOS_STATUS vosStatus; - v_BOOL_t bCommit; + v_BOOL_t bCommit; } hdd_hostapd_state_t; @@ -629,7 +629,7 @@ typedef struct { /** Might need to differentiate queue depth in contention case */ v_U16_t aTxQueueDepth[NUM_TX_QUEUES]; - + /**Track whether OS TX queue has been disabled.*/ v_BOOL_t txSuspended[NUM_TX_QUEUES]; @@ -666,19 +666,19 @@ struct hdd_ap_ctx_s tsap_Config_t sapConfig; struct semaphore semWpsPBCOverlapInd; - + v_BOOL_t apDisableIntraBssFwd; - + vos_timer_t hdd_ap_inactivity_timer; v_U8_t operatingChannel; - + v_BOOL_t uIsAuthenticated; eCsrEncryptionType ucEncryptType; - - //This will point to group key data, if it is received before start bss. - tCsrRoamSetKey groupKey; + + //This will point to group key data, if it is received before start bss. + tCsrRoamSetKey groupKey; // This will have WEP key data, if it is received before start bss tCsrRoamSetKey wepKey[CSR_MAX_NUM_KEY]; @@ -693,7 +693,7 @@ struct hdd_mon_ctx_s typedef struct hdd_scaninfo_s { /* The scan id */ - v_U32_t scanId; + v_U32_t scanId; /* The scan pending */ v_U32_t mScanPending; @@ -706,7 +706,7 @@ typedef struct hdd_scaninfo_s v_U32_t waitScanResult; /* Additional IE for scan */ - tSirAddie scanAddIE; + tSirAddie scanAddIE; /* Scan mode*/ tSirScanType scan_mode; @@ -791,26 +791,26 @@ struct hdd_adapter_s { void *pHddCtx; - device_mode_t device_mode; + device_mode_t device_mode; /** Handle to the network device */ struct net_device *dev; - + //TODO Move this to sta Ctx struct wireless_dev wdev ; - struct cfg80211_scan_request *request ; + struct cfg80211_scan_request *request ; /** ops checks if Opportunistic Power Save is Enable or Not - * ctw stores ctWindow value once we receive Opps command from - * wpa_supplicant then using ctWindow value we need to Enable + * ctw stores ctWindow value once we receive Opps command from + * wpa_supplicant then using ctWindow value we need to Enable * Opportunistic Power Save */ tANI_U8 ops; tANI_U32 ctw; - /** Current MAC Address for the adapter */ - v_MACADDR_t macAddressCurrent; - + /** Current MAC Address for the adapter */ + v_MACADDR_t macAddressCurrent; + /**Event Flags*/ unsigned long event_flags; @@ -820,7 +820,7 @@ struct hdd_adapter_s hdd_stats_t hdd_stats; /**Mib information*/ sHddMib_t hdd_mib; - + tANI_U8 sessionId; /* Completion variable for session close */ @@ -829,7 +829,7 @@ struct hdd_adapter_s /* Completion variable for session open */ struct completion session_open_comp_var; - //TODO: move these to sta ctx. These may not be used in AP + //TODO: move these to sta ctx. These may not be used in AP /** completion variable for disconnect callback */ struct completion disconnect_comp_var; @@ -878,7 +878,7 @@ struct hdd_adapter_s /**Track whether 3/4th of resources are used */ v_BOOL_t isVosLowResource; - + /**Track whether OS TX queue has been disabled.*/ v_BOOL_t isTxSuspended[NUM_TX_QUEUES]; @@ -891,7 +891,7 @@ struct hdd_adapter_s */ /** Multiple station supports */ /** Per-station structure */ - spinlock_t staInfo_lock; //To protect access to station Info + spinlock_t staInfo_lock; //To protect access to station Info hdd_station_info_t aStaInfo[WLAN_MAX_STA_COUNT]; //v_U8_t uNumActiveStation; @@ -902,7 +902,7 @@ struct hdd_adapter_s #ifdef FEATURE_WLAN_WAPI hdd_wapi_info_t wapi_info; #endif - + v_S7_t rssi; tANI_U8 snr; @@ -1030,30 +1030,30 @@ struct hdd_context_s /** Pointer for firmware image data */ const struct firmware *fw; - + /** Pointer for configuration data */ const struct firmware *cfg; - + /** Pointer for nv data */ const struct firmware *nv; - + /** Pointer to the parent device */ struct device *parent_dev; pid_t pid_sdio_claimed; atomic_t sdio_claim_count; - /** Config values read from qcom_cfg.ini file */ + /** Config values read from qcom_cfg.ini file */ hdd_config_t *cfg_ini; - wlan_hdd_ftm_status_t ftm; + wlan_hdd_ftm_status_t ftm; /** completion variable for full power callback */ struct completion full_pwr_comp_var; /** completion variable for Request BMPS callback */ struct completion req_bmps_comp_var; - + /** completion variable for standby callback */ struct completion standby_comp_var; - + /* Completion variable to indicate Rx Thread Suspended */ struct completion rx_sus_event_var; @@ -1086,26 +1086,26 @@ struct hdd_context_s volatile v_BOOL_t isLogpInProgress; v_BOOL_t isLoadUnloadInProgress; - + /**Track whether driver has been suspended.*/ hdd_ps_state_t hdd_ps_state; - + /* Track whether Mcast/Bcast Filter is enabled.*/ v_BOOL_t hdd_mcastbcast_filter_set; /* Track whether ignore DTIM is enabled*/ v_BOOL_t hdd_ignore_dtim_enabled; v_U32_t hdd_actual_ignore_DTIM_value; - v_U32_t hdd_actual_LI_value; + v_U32_t hdd_actual_LI_value; + - v_BOOL_t hdd_wlan_suspended; - + spinlock_t filter_lock; - + /* Lock to avoid race condtion during start/stop bss*/ struct mutex sap_lock; - + /** ptt Process ID*/ v_SINT_t ptt_pid; #ifdef WLAN_KD_READY_NOTIFIER @@ -1132,10 +1132,10 @@ struct hdd_context_s hdd_chip_reset_stats_t hddChipResetStats; /* Number of times riva restarted */ v_U32_t hddRivaResetStats; - + /* Can we allow AMP connection right now*/ v_BOOL_t isAmpAllowed; - + /** P2P Device MAC Address for the adapter */ v_MACADDR_t p2pDeviceAddress; @@ -1148,8 +1148,8 @@ struct hdd_context_s #endif #endif - /* - * Framework initiated driver restarting + /* + * Framework initiated driver restarting * hdd_reload_timer : Restart retry timer * isRestartInProgress: Restart in progress * hdd_restart_retries: Restart retries @@ -1158,7 +1158,7 @@ struct hdd_context_s vos_timer_t hdd_restart_timer; atomic_t isRestartInProgress; u_int8_t hdd_restart_retries; - + /*is_dyanmic_channel_range_set is set to 1 when Softap_set_channel_range is invoked*/ v_BOOL_t is_dynamic_channel_range_set; @@ -1180,6 +1180,9 @@ struct hdd_context_s hdd_traffic_monitor_t traffic_monitor; +#ifdef IPA_OFFLOAD + void *hdd_ipa; +#endif /* MC/BC Filter state variable * This always contains the value that is currently * configured @@ -1227,9 +1230,9 @@ struct hdd_context_s -/*--------------------------------------------------------------------------- +/*--------------------------------------------------------------------------- Function declarations and documenation - -------------------------------------------------------------------------*/ + -------------------------------------------------------------------------*/ VOS_STATUS hdd_get_front_adapter( hdd_context_t *pHddCtx, hdd_adapter_list_node_t** ppAdapterNode); diff --git a/CORE/HDD/src/wlan_hdd_assoc.c b/CORE/HDD/src/wlan_hdd_assoc.c index d24fc863a61e..73c13b18092c 100644 --- a/CORE/HDD/src/wlan_hdd_assoc.c +++ b/CORE/HDD/src/wlan_hdd_assoc.c @@ -63,6 +63,9 @@ #endif #include "sme_Api.h" +#ifdef IPA_OFFLOAD +#include +#endif v_BOOL_t mibIsDot11DesiredBssTypeInfrastructure( hdd_adapter_t *pAdapter ); struct ether_addr @@ -780,6 +783,12 @@ static eHalStatus hdd_DisConnectHandler( hdd_adapter_t *pAdapter, tCsrRoamInfo * netif_tx_disable(dev); netif_carrier_off(dev); +#ifdef IPA_OFFLOAD + if (hdd_ipa_is_enabled(pHddCtx)) + hdd_ipa_wlan_evt(pAdapter, pHddStaCtx->conn_info.staId[0], + WLAN_STA_DISCONNECT, pAdapter->dev->dev_addr); +#endif + if(pHddStaCtx->conn_info.connState != eConnectionState_Disconnecting) { INIT_COMPLETION(pAdapter->disconnect_comp_var); @@ -1034,11 +1043,23 @@ static VOS_STATUS hdd_roamRegisterSTA( hdd_adapter_t *pAdapter, WLANTL_STA_CONNECTED : WLANTL_STA_AUTHENTICATED; // Register the Station with TL... VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "%s: HDD register TL ucInitState=%d", __func__, staDesc.ucInitState ); +#ifdef IPA_OFFLOAD + if (hdd_ipa_is_enabled(pHddCtx)) { + vosStatus = WLANTL_RegisterSTAClient( pHddCtx->pvosContext, + hdd_ipa_process_rxt, + hdd_tx_complete_cbk, + hdd_tx_fetch_packet_cbk, &staDesc, + pBssDesc->rssi ); + } else { +#endif vosStatus = WLANTL_RegisterSTAClient( pHddCtx->pvosContext, hdd_rx_packet_cbk, hdd_tx_complete_cbk, hdd_tx_fetch_packet_cbk, &staDesc, pBssDesc->rssi ); +#ifdef IPA_OFFLOAD + } +#endif if ( !VOS_IS_STATUS_SUCCESS( vosStatus ) ) { @@ -1240,6 +1261,12 @@ static eHalStatus hdd_AssociationCompletionHandler( hdd_adapter_t *pAdapter, tCs #endif pHddCtx->sta_to_adapter[pRoamInfo->staId] = pAdapter; +#ifdef IPA_OFFLOAD + if (hdd_ipa_is_enabled(pHddCtx)) + hdd_ipa_wlan_evt(pAdapter, pRoamInfo->staId, WLAN_STA_CONNECT, + pAdapter->dev->dev_addr); +#endif + #ifdef FEATURE_WLAN_TDLS wlan_hdd_tdls_connection_callback(pAdapter); #endif @@ -2144,10 +2171,21 @@ VOS_STATUS hdd_roamRegisterTDLSSTA( hdd_adapter_t *pAdapter, staDesc.ucInitState = WLANTL_STA_CONNECTED ; /* Register the Station with TL... */ +#ifdef IPA_OFFLOAD + if (hdd_ipa_is_enabled(pHddCtx)) { + vosStatus = WLANTL_RegisterSTAClient( pVosContext, + hdd_ipa_process_rxt, + hdd_tx_complete_cbk, + hdd_tx_fetch_packet_cbk, &staDesc, 0 ); + } else { +#endif vosStatus = WLANTL_RegisterSTAClient( pVosContext, hdd_rx_packet_cbk, hdd_tx_complete_cbk, hdd_tx_fetch_packet_cbk, &staDesc, 0 ); +#ifdef IPA_OFFLOAD + } +#endif if ( !VOS_IS_STATUS_SUCCESS( vosStatus ) ) { diff --git a/CORE/HDD/src/wlan_hdd_cfg.c b/CORE/HDD/src/wlan_hdd_cfg.c index 9957fa176d8f..9892d527c5dd 100644 --- a/CORE/HDD/src/wlan_hdd_cfg.c +++ b/CORE/HDD/src/wlan_hdd_cfg.c @@ -2912,6 +2912,42 @@ REG_VARIABLE( CFG_ENABLE_FW_LOG_NAME, WLAN_PARAM_Integer, CFG_ENABLE_FW_LOG_DISABLE, CFG_ENABLE_FW_LOG_ENABLE), +#ifdef IPA_OFFLOAD +REG_VARIABLE( CFG_IPA_OFFLOAD_NAME, WLAN_PARAM_Integer, + hdd_config_t, IpaEnable, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_IPA_OFFLOAD_DEFAULT, + CFG_IPA_OFFLOAD_DISABLE, + CFG_IPA_OFFLOAD_ENABLE ), + +REG_VARIABLE( CFG_IPA_IPV6_OFFLOAD_NAME, WLAN_PARAM_Integer, + hdd_config_t, IpaIPv6Enable, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_IPA_IPV6_OFFLOAD_DEFAULT, + CFG_IPA_IPV6_OFFLOAD_DISABLE, + CFG_IPA_IPV6_OFFLOAD_ENABLE ), + +REG_VARIABLE( CFG_IPA_DESC_SIZE_NAME, WLAN_PARAM_Integer, + hdd_config_t, IpaDescSize, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_IPA_DESC_SIZE_DEFAULT, + CFG_IPA_DESC_SIZE_MIN, + CFG_IPA_DESC_SIZE_MAX ), + +REG_VARIABLE( CFG_IPA_PRE_FILTER_NAME, WLAN_PARAM_Integer, + hdd_config_t, IpaPreFilterEnable, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_IPA_PRE_FILTER_DEFAULT, + CFG_IPA_PRE_FILTER_DISABLE, + CFG_IPA_PRE_FILTER_ENABLE ), + +REG_VARIABLE( CFG_IPA_RM_NAME, WLAN_PARAM_Integer, + hdd_config_t, IpaRMEnable, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_IPA_RM_DEFAULT, + CFG_IPA_RM_DISABLE, + CFG_IPA_RM_ENABLE ), +#endif REG_VARIABLE( CFG_P2P_LISTEN_OFFLOAD_NAME, WLAN_PARAM_Integer, hdd_config_t, fP2pListenOffload, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, @@ -3356,6 +3392,13 @@ static void print_hdd_cfg(hdd_context_t *pHddCtx) VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [nSelect5GHzMargin] Value = [%u] ",pHddCtx->cfg_ini->nSelect5GHzMargin); VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gCoalesingInIBSS] Value = [%u] ",pHddCtx->cfg_ini->isCoalesingInIBSSAllowed); +#ifdef IPA_OFFLOAD + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gIPAEnable] Value = [%u] ",pHddCtx->cfg_ini->IpaEnable); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gIPAIPv6Enable] Value = [%u] ",pHddCtx->cfg_ini->IpaIPv6Enable); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gIPARMEnable] Value = [%u] ",pHddCtx->cfg_ini->IpaRMEnable); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gIPAPreFilterEnable] Value = [%u] ",pHddCtx->cfg_ini->IpaPreFilterEnable); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gIPADescSize] Value = [%u] ",pHddCtx->cfg_ini->IpaDescSize); +#endif } diff --git a/CORE/HDD/src/wlan_hdd_hostapd.c b/CORE/HDD/src/wlan_hdd_hostapd.c index 2d619df6b8ee..93e4edab15db 100644 --- a/CORE/HDD/src/wlan_hdd_hostapd.c +++ b/CORE/HDD/src/wlan_hdd_hostapd.c @@ -25,30 +25,30 @@ * to the Linux Foundation. */ /**======================================================================== - + \file wlan_hdd_hostapd.c \brief WLAN Host Device Driver implementation ========================================================================*/ -/**========================================================================= - EDIT HISTORY FOR FILE - - - This section contains comments describing changes made to the module. - Notice that changes are listed in reverse chronological order. - - $Header:$ $DateTime: $ $Author: $ - - - when who what, where, why +/**========================================================================= + EDIT HISTORY FOR FILE + + + This section contains comments describing changes made to the module. + Notice that changes are listed in reverse chronological order. + + $Header:$ $DateTime: $ $Author: $ + + + when who what, where, why -------- --- -------------------------------------------------------- - 04/5/09 Shailender Created module. + 04/5/09 Shailender Created module. 06/03/10 js - Added support to hostapd driven deauth/disassoc/mic failure ==========================================================================*/ /*-------------------------------------------------------------------------- Include Files ------------------------------------------------------------------------*/ - + #include #include #include @@ -72,6 +72,9 @@ #include "wlan_btc_svc.h" #include #include "wlan_hdd_p2p.h" +#ifdef IPA_OFFLOAD +#include +#endif #include "cfgApi.h" #include "wniCfgAp.h" @@ -96,21 +99,21 @@ extern int process_wma_set_command(int sessid, int paramid, */ #define WE_SAP_MAX_STA_INFO 0x7FF -#define SAP_24GHZ_CH_COUNT (14) +#define SAP_24GHZ_CH_COUNT (14) -/*--------------------------------------------------------------------------- +/*--------------------------------------------------------------------------- * Function definitions *-------------------------------------------------------------------------*/ /**--------------------------------------------------------------------------- - + \brief hdd_hostapd_open() - HDD Open function for hostapd interface - + This is called in response to ifconfig up - + \param - dev Pointer to net_device structure - + \return - 0 for success non-zero for failure - + --------------------------------------------------------------------------*/ int hdd_hostapd_open (struct net_device *dev) { @@ -118,22 +121,22 @@ int hdd_hostapd_open (struct net_device *dev) //Turn ON carrier state netif_carrier_on(dev); - //Enable all Tx queues + //Enable all Tx queues netif_tx_start_all_queues(dev); - + EXIT(); return 0; } /**--------------------------------------------------------------------------- - + \brief hdd_hostapd_stop() - HDD stop function for hostapd interface - + This is called in response to ifconfig down - + \param - dev Pointer to net_device structure - + \return - 0 for success non-zero for failure - + --------------------------------------------------------------------------*/ int hdd_hostapd_stop (struct net_device *dev) { @@ -141,7 +144,7 @@ int hdd_hostapd_stop (struct net_device *dev) //Stop all tx queues netif_tx_disable(dev); - + //Turn OFF carrier state netif_carrier_off(dev); @@ -179,19 +182,19 @@ static void hdd_hostapd_uninit (struct net_device *dev) /**============================================================================ - @brief hdd_hostapd_hard_start_xmit() - Function registered with the Linux OS for + @brief hdd_hostapd_hard_start_xmit() - Function registered with the Linux OS for transmitting packets. There are 2 versions of this function. One that uses locked queue and other that uses lockless queues. Both have been retained to do some performance testing @param skb : [in] pointer to OS packet (sk_buff) @param dev : [in] pointer to Libra network device - + @return : NET_XMIT_DROP if packets are dropped : NET_XMIT_SUCCESS if packet is enqueued succesfully ===========================================================================*/ int hdd_hostapd_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) { - return 0; + return 0; } int hdd_hostapd_change_mtu(struct net_device *dev, int new_mtu) { @@ -259,7 +262,7 @@ int hdd_hostapd_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "***HOSTAPD*** : Received %s cmd from Wi-Fi GUI***", command); - if(strncmp(command, "P2P_SET_NOA", 11) == 0 ) + if(strncmp(command, "P2P_SET_NOA", 11) == 0 ) { hdd_setP2pNoa(dev, command); } @@ -289,15 +292,15 @@ exit: } /**--------------------------------------------------------------------------- - - \brief hdd_hostapd_set_mac_address() - - This function sets the user specified mac address using + + \brief hdd_hostapd_set_mac_address() - + This function sets the user specified mac address using the command ifconfig wlanX hw ether . - + \param - dev - Pointer to the net device. - addr - Pointer to the sockaddr. \return - 0 for success, non zero for failure - + --------------------------------------------------------------------------*/ static int hdd_hostapd_set_mac_address(struct net_device *dev, void *addr) @@ -313,7 +316,7 @@ void hdd_hostapd_inactivity_timer_cb(v_PVOID_t usrDataForCallback) struct net_device *dev = (struct net_device *)usrDataForCallback; v_BYTE_t we_custom_event[64]; union iwreq_data wrqu; -#ifdef DISABLE_CONCURRENCY_AUTOSAVE +#ifdef DISABLE_CONCURRENCY_AUTOSAVE VOS_STATUS vos_status; hdd_adapter_t *pHostapdAdapter; hdd_ap_ctx_t *pHddApCtx; @@ -326,21 +329,21 @@ void hdd_hostapd_inactivity_timer_cb(v_PVOID_t usrDataForCallback) ENTER(); -#ifdef DISABLE_CONCURRENCY_AUTOSAVE +#ifdef DISABLE_CONCURRENCY_AUTOSAVE if (vos_concurrent_sessions_running()) - { + { /* This timer routine is going to be called only when AP persona is up. If there are concurrent sessions running we do not want to shut down the Bss.Instead we run the timer again so that if Autosave is enabled next time and other session - was down only then we bring down AP + was down only then we bring down AP */ pHostapdAdapter = netdev_priv(dev); pHddApCtx = WLAN_HDD_GET_AP_CTX_PTR(pHostapdAdapter); vos_status = vos_timer_start( - &pHddApCtx->hdd_ap_inactivity_timer, + &pHddApCtx->hdd_ap_inactivity_timer, (WLAN_HDD_GET_CTX(pHostapdAdapter))->cfg_ini->nAPAutoShutOff * 1000); if (!VOS_IS_STATUS_SUCCESS(vos_status)) @@ -358,7 +361,7 @@ void hdd_hostapd_inactivity_timer_cb(v_PVOID_t usrDataForCallback) wrqu.data.length = event_len; hddLog(LOG1, FL("Shutting down AP interface due to inactivity")); - wireless_send_event(dev, IWEVCUSTOM, &wrqu, (char *)we_custom_event); + wireless_send_event(dev, IWEVCUSTOM, &wrqu, (char *)we_custom_event); EXIT(); } @@ -407,7 +410,7 @@ void hdd_clear_all_sta(hdd_adapter_t *pHostapdAdapter, v_PVOID_t usrDataForCallb hddLog(LOGE, FL("Clearing all the STA entry....\n")); for (staId = 0; staId < WLAN_MAX_STA_COUNT; staId++) { - if ( pHostapdAdapter->aStaInfo[staId].isUsed && + if ( pHostapdAdapter->aStaInfo[staId].isUsed && ( staId != (WLAN_HDD_GET_AP_CTX_PTR(pHostapdAdapter))->uBCStaId)) { //Disconnect all the stations @@ -422,7 +425,7 @@ static int hdd_stop_p2p_link(hdd_adapter_t *pHostapdAdapter,v_PVOID_t usrDataFor VOS_STATUS status = VOS_STATUS_SUCCESS; dev = (struct net_device *)usrDataForCallback; ENTER(); - if(test_bit(SOFTAP_BSS_STARTED, &pHostapdAdapter->event_flags)) + if(test_bit(SOFTAP_BSS_STARTED, &pHostapdAdapter->event_flags)) { if ( VOS_STATUS_SUCCESS == (status = WLANSAP_StopBss((WLAN_HDD_GET_CTX(pHostapdAdapter))->pvosContext) ) ) { @@ -446,7 +449,7 @@ VOS_STATUS hdd_hostapd_SAPEventCB( tpSap_Event pSapEvent, v_PVOID_t usrDataForCa int we_event = 0; int i = 0; v_U8_t staId; - VOS_STATUS vos_status; + VOS_STATUS vos_status; v_BOOL_t bWPSState; v_BOOL_t bApActive = FALSE; v_BOOL_t bAuthRequired = TRUE; @@ -454,7 +457,7 @@ VOS_STATUS hdd_hostapd_SAPEventCB( tpSap_Event pSapEvent, v_PVOID_t usrDataForCa char unknownSTAEvent[IW_CUSTOM_MAX+1]; char maxAssocExceededEvent[IW_CUSTOM_MAX+1]; v_BYTE_t we_custom_start_event[64]; - char *startBssEvent; + char *startBssEvent; hdd_context_t *pHddCtx; hdd_scaninfo_t *pScanInfo = NULL; struct iw_michaelmicfailure msg; @@ -470,7 +473,7 @@ VOS_STATUS hdd_hostapd_SAPEventCB( tpSap_Event pSapEvent, v_PVOID_t usrDataForCa return eHAL_STATUS_FAILURE; } - pHostapdState = WLAN_HDD_GET_HOSTAP_STATE_PTR(pHostapdAdapter); + pHostapdState = WLAN_HDD_GET_HOSTAP_STATE_PTR(pHostapdAdapter); pHddApCtx = WLAN_HDD_GET_AP_CTX_PTR(pHostapdAdapter); sapEvent = pSapEvent->sapHddEventCode; memset(&wrqu, '\0', sizeof(wrqu)); @@ -486,23 +489,28 @@ VOS_STATUS hdd_hostapd_SAPEventCB( tpSap_Event pSapEvent, v_PVOID_t usrDataForCa pHostapdState->vosStatus = pSapEvent->sapevt.sapStartBssCompleteEvent.status; vos_status = vos_event_set(&pHostapdState->vosEvent); - + if (!VOS_IS_STATUS_SUCCESS(vos_status) || pHostapdState->vosStatus) - { + { VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, ("ERROR: startbss event failed!!\n")); goto stopbss; } else - { + { pHddApCtx->uBCStaId = pSapEvent->sapevt.sapStartBssCompleteEvent.staId; //@@@ need wep logic here to set privacy bit hdd_softap_Register_BC_STA(pHostapdAdapter, pHddApCtx->uPrivacy); } - +#ifdef IPA_OFFLOAD + if (hdd_ipa_is_enabled(pHddCtx)) + hdd_ipa_wlan_evt(pHostapdAdapter, WLAN_RX_SAP_SELF_STA_ID, + WLAN_AP_CONNECT, pHostapdAdapter->dev->dev_addr); +#endif + if (0 != (WLAN_HDD_GET_CTX(pHostapdAdapter))->cfg_ini->nAPAutoShutOff) { // AP Inactivity timer init and start - vos_status = vos_timer_init( &pHddApCtx->hdd_ap_inactivity_timer, VOS_TIMER_TYPE_SW, + vos_status = vos_timer_init( &pHddApCtx->hdd_ap_inactivity_timer, VOS_TIMER_TYPE_SW, hdd_hostapd_inactivity_timer_cb, (v_PVOID_t)dev ); if (!VOS_IS_STATUS_SUCCESS(vos_status)) hddLog(LOGE, FL("Failed to init AP inactivity timer\n")); @@ -521,18 +529,18 @@ VOS_STATUS hdd_hostapd_SAPEventCB( tpSap_Event pSapEvent, v_PVOID_t usrDataForCa //Check if there is any group key pending to set. if( pHddApCtx->groupKey.keyLength ) { - if( VOS_STATUS_SUCCESS != WLANSAP_SetKeySta( + if( VOS_STATUS_SUCCESS != WLANSAP_SetKeySta( (WLAN_HDD_GET_CTX(pHostapdAdapter))->pvosContext, &pHddApCtx->groupKey ) ) { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, "%s: WLANSAP_SetKeySta failed", __func__); } pHddApCtx->groupKey.keyLength = 0; } else { - for ( i = 0; i < CSR_MAX_NUM_KEY; i++ ) + for ( i = 0; i < CSR_MAX_NUM_KEY; i++ ) { if ( !pHddApCtx->wepKey[i].keyLength ) continue; @@ -540,7 +548,7 @@ VOS_STATUS hdd_hostapd_SAPEventCB( tpSap_Event pSapEvent, v_PVOID_t usrDataForCa if( VOS_STATUS_SUCCESS != WLANSAP_SetKeySta( (WLAN_HDD_GET_CTX(pHostapdAdapter))->pvosContext, &pHddApCtx->wepKey[i] ) ) - { + { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, "%s: WLANSAP_SetKeySta failed idx %d", __func__, i); } @@ -556,20 +564,25 @@ VOS_STATUS hdd_hostapd_SAPEventCB( tpSap_Event pSapEvent, v_PVOID_t usrDataForCa we_event = IWEVCUSTOM; we_custom_event_generic = we_custom_start_event; hdd_dump_concurrency_info(pHddCtx); - break; //Event will be sent after Switch-Case stmt + break; //Event will be sent after Switch-Case stmt case eSAP_STOP_BSS_EVENT: - hddLog(LOG1, FL("BSS stop status = %s\n"),pSapEvent->sapevt.sapStopBssCompleteEvent.status ? + hddLog(LOG1, FL("BSS stop status = %s\n"),pSapEvent->sapevt.sapStopBssCompleteEvent.status ? "eSAP_STATUS_FAILURE" : "eSAP_STATUS_SUCCESS"); //Free up Channel List incase if it is set sapCleanupChannelList(); pHddApCtx->operatingChannel = 0; //Invalidate the channel info. +#ifdef IPA_OFFLOAD + if (hdd_ipa_is_enabled(pHddCtx)) + hdd_ipa_wlan_evt(pHostapdAdapter, WLAN_RX_SAP_SELF_STA_ID, + WLAN_AP_DISCONNECT, pHostapdAdapter->dev->dev_addr); +#endif goto stopbss; case eSAP_STA_SET_KEY_EVENT: //TODO: forward the message to hostapd once implementtation is done for now just print - hddLog(LOG1, FL("SET Key: configured status = %s\n"),pSapEvent->sapevt.sapStationSetKeyCompleteEvent.status ? + hddLog(LOG1, FL("SET Key: configured status = %s\n"),pSapEvent->sapevt.sapStationSetKeyCompleteEvent.status ? "eSAP_STATUS_FAILURE" : "eSAP_STATUS_SUCCESS"); return VOS_STATUS_SUCCESS; case eSAP_STA_DEL_KEY_EVENT: @@ -584,7 +597,7 @@ VOS_STATUS hdd_hostapd_SAPEventCB( tpSap_Event pSapEvent, v_PVOID_t usrDataForCa hddLog(LOG1, "MIC MAC "MAC_ADDRESS_STR"\n", MAC_ADDR_ARRAY(msg.src_addr.sa_data)); if(pSapEvent->sapevt.sapStationMICFailureEvent.multicast == eSAP_TRUE) msg.flags = IW_MICFAILURE_GROUP; - else + else msg.flags = IW_MICFAILURE_PAIRWISE; memset(&wrqu, 0, sizeof(wrqu)); wrqu.data.length = sizeof(msg); @@ -592,29 +605,29 @@ VOS_STATUS hdd_hostapd_SAPEventCB( tpSap_Event pSapEvent, v_PVOID_t usrDataForCa we_custom_event_generic = (v_BYTE_t *)&msg; } /* inform mic failure to nl80211 */ - cfg80211_michael_mic_failure(dev, + cfg80211_michael_mic_failure(dev, pSapEvent->sapevt. sapStationMICFailureEvent.staMac.bytes, - ((pSapEvent->sapevt.sapStationMICFailureEvent.multicast == eSAP_TRUE) ? + ((pSapEvent->sapevt.sapStationMICFailureEvent.multicast == eSAP_TRUE) ? NL80211_KEYTYPE_GROUP : NL80211_KEYTYPE_PAIRWISE), - pSapEvent->sapevt.sapStationMICFailureEvent.keyId, - pSapEvent->sapevt.sapStationMICFailureEvent.TSC, + pSapEvent->sapevt.sapStationMICFailureEvent.keyId, + pSapEvent->sapevt.sapStationMICFailureEvent.TSC, GFP_KERNEL); break; - + case eSAP_STA_ASSOC_EVENT: case eSAP_STA_REASSOC_EVENT: wrqu.addr.sa_family = ARPHRD_ETHER; - memcpy(wrqu.addr.sa_data, &pSapEvent->sapevt.sapStationAssocReassocCompleteEvent.staMac, + memcpy(wrqu.addr.sa_data, &pSapEvent->sapevt.sapStationAssocReassocCompleteEvent.staMac, sizeof(v_MACADDR_t)); hddLog(LOG1, " associated "MAC_ADDRESS_STR"\n", MAC_ADDR_ARRAY(wrqu.addr.sa_data)); we_event = IWEVREGISTERED; - + WLANSAP_Get_WPS_State((WLAN_HDD_GET_CTX(pHostapdAdapter))->pvosContext, &bWPSState); - + if ( (eCSR_ENCRYPT_TYPE_NONE == pHddApCtx->ucEncryptType) || - ( eCSR_ENCRYPT_TYPE_WEP40_STATICKEY == pHddApCtx->ucEncryptType ) || + ( eCSR_ENCRYPT_TYPE_WEP40_STATICKEY == pHddApCtx->ucEncryptType ) || ( eCSR_ENCRYPT_TYPE_WEP104_STATICKEY == pHddApCtx->ucEncryptType ) ) { bAuthRequired = FALSE; @@ -642,6 +655,13 @@ VOS_STATUS hdd_hostapd_SAPEventCB( tpSap_Event pSapEvent, v_PVOID_t usrDataForCa (v_MACADDR_t *)wrqu.addr.sa_data, pSapEvent->sapevt.sapStationAssocReassocCompleteEvent.wmmEnabled); } +#ifdef IPA_OFFLOAD + if (hdd_ipa_is_enabled(pHddCtx)) + hdd_ipa_wlan_evt(pHostapdAdapter, + pSapEvent->sapevt.sapStationAssocReassocCompleteEvent.staId, + WLAN_CLIENT_CONNECT_EX, + pSapEvent->sapevt.sapStationAssocReassocCompleteEvent.staMac.bytes); +#endif // Stop AP inactivity timer if (pHddApCtx->hdd_ap_inactivity_timer.state == VOS_TIMER_STATE_RUNNING) @@ -704,6 +724,11 @@ VOS_STATUS hdd_hostapd_SAPEventCB( tpSap_Event pSapEvent, v_PVOID_t usrDataForCa VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, FL("ERROR: HDD Failed to find sta id!!")); return VOS_STATUS_E_FAILURE; } +#ifdef IPA_OFFLOAD + if (hdd_ipa_is_enabled(pHddCtx)) + hdd_ipa_wlan_evt(pHostapdAdapter, staId, WLAN_CLIENT_DISCONNECT, + pSapEvent->sapevt.sapStationDisassocCompleteEvent.staMac.bytes); +#endif hdd_softap_DeregisterSTA(pHostapdAdapter, staId); if (0 != (WLAN_HDD_GET_CTX(pHostapdAdapter))->cfg_ini->nAPAutoShutOff) @@ -744,19 +769,19 @@ VOS_STATUS hdd_hostapd_SAPEventCB( tpSap_Event pSapEvent, v_PVOID_t usrDataForCa { static const char * message ="MLMEWPSPBCPROBEREQ.indication"; union iwreq_data wreq; - + down(&pHddApCtx->semWpsPBCOverlapInd); pHddApCtx->WPSPBCProbeReq.probeReqIELen = pSapEvent->sapevt.sapPBCProbeReqEvent.WPSPBCProbeReq.probeReqIELen; - - vos_mem_copy(pHddApCtx->WPSPBCProbeReq.probeReqIE, pSapEvent->sapevt.sapPBCProbeReqEvent.WPSPBCProbeReq.probeReqIE, + + vos_mem_copy(pHddApCtx->WPSPBCProbeReq.probeReqIE, pSapEvent->sapevt.sapPBCProbeReqEvent.WPSPBCProbeReq.probeReqIE, pHddApCtx->WPSPBCProbeReq.probeReqIELen); - + vos_mem_copy(pHddApCtx->WPSPBCProbeReq.peerMacAddr, pSapEvent->sapevt.sapPBCProbeReqEvent.WPSPBCProbeReq.peerMacAddr, sizeof(v_MACADDR_t)); hddLog(LOG1, "WPS PBC probe req "MAC_ADDRESS_STR"\n", MAC_ADDR_ARRAY(pHddApCtx->WPSPBCProbeReq.peerMacAddr)); memset(&wreq, 0, sizeof(wreq)); wreq.data.length = strlen(message); // This is length of message - wireless_send_event(dev, IWEVCUSTOM, &wreq, (char *)message); - + wireless_send_event(dev, IWEVCUSTOM, &wreq, (char *)message); + return VOS_STATUS_SUCCESS; } case eSAP_ASSOC_STA_CALLBACK_EVENT: @@ -770,25 +795,25 @@ VOS_STATUS hdd_hostapd_SAPEventCB( tpSap_Event pSapEvent, v_PVOID_t usrDataForCa pAssocStasArray->assocId, pAssocStasArray->staId, MAC_ADDR_ARRAY(pAssocStasArray->staMac.bytes)); - pAssocStasArray++; + pAssocStasArray++; } } vos_mem_free(pSapEvent->sapevt.sapAssocStaListEvent.pAssocStas);// Release caller allocated memory here return VOS_STATUS_SUCCESS; case eSAP_INDICATE_MGMT_FRAME: - hdd_indicateMgmtFrame( pHostapdAdapter, + hdd_indicateMgmtFrame( pHostapdAdapter, pSapEvent->sapevt.sapManagementFrameInfo.nFrameLength, pSapEvent->sapevt.sapManagementFrameInfo.pbFrames, - pSapEvent->sapevt.sapManagementFrameInfo.frameType, + pSapEvent->sapevt.sapManagementFrameInfo.frameType, pSapEvent->sapevt.sapManagementFrameInfo.rxChan, 0); return VOS_STATUS_SUCCESS; case eSAP_REMAIN_CHAN_READY: hdd_remainChanReadyHandler( pHostapdAdapter ); return VOS_STATUS_SUCCESS; case eSAP_SEND_ACTION_CNF: - hdd_sendActionCnf( pHostapdAdapter, - ( eSAP_STATUS_SUCCESS == - pSapEvent->sapevt.sapActionCnf.actionSendSuccess ) ? + hdd_sendActionCnf( pHostapdAdapter, + ( eSAP_STATUS_SUCCESS == + pSapEvent->sapevt.sapActionCnf.actionSendSuccess ) ? TRUE : FALSE ); return VOS_STATUS_SUCCESS; case eSAP_UNKNOWN_STA_JOIN: @@ -895,106 +920,106 @@ stopbss : } return VOS_STATUS_SUCCESS; } -int hdd_softap_unpackIE( +int hdd_softap_unpackIE( tHalHandle halHandle, - eCsrEncryptionType *pEncryptType, - eCsrEncryptionType *mcEncryptType, - eCsrAuthType *pAuthType, - u_int16_t gen_ie_len, + eCsrEncryptionType *pEncryptType, + eCsrEncryptionType *mcEncryptType, + eCsrAuthType *pAuthType, + u_int16_t gen_ie_len, u_int8_t *gen_ie ) { - tDot11fIERSN dot11RSNIE; - tDot11fIEWPA dot11WPAIE; - - tANI_U8 *pRsnIe; + tDot11fIERSN dot11RSNIE; + tDot11fIEWPA dot11WPAIE; + + tANI_U8 *pRsnIe; tANI_U16 RSNIeLen; - + if (NULL == halHandle) { hddLog(LOGE, FL("Error haHandle returned NULL\n")); return -EINVAL; } - + // Validity checks - if ((gen_ie_len < VOS_MIN(DOT11F_IE_RSN_MIN_LEN, DOT11F_IE_WPA_MIN_LEN)) || - (gen_ie_len > VOS_MAX(DOT11F_IE_RSN_MAX_LEN, DOT11F_IE_WPA_MAX_LEN)) ) + if ((gen_ie_len < VOS_MIN(DOT11F_IE_RSN_MIN_LEN, DOT11F_IE_WPA_MIN_LEN)) || + (gen_ie_len > VOS_MAX(DOT11F_IE_RSN_MAX_LEN, DOT11F_IE_WPA_MAX_LEN)) ) return -EINVAL; // Type check - if ( gen_ie[0] == DOT11F_EID_RSN) - { + if ( gen_ie[0] == DOT11F_EID_RSN) + { // Validity checks - if ((gen_ie_len < DOT11F_IE_RSN_MIN_LEN ) || + if ((gen_ie_len < DOT11F_IE_RSN_MIN_LEN ) || (gen_ie_len > DOT11F_IE_RSN_MAX_LEN) ) { return VOS_STATUS_E_FAILURE; } - // Skip past the EID byte and length byte - pRsnIe = gen_ie + 2; - RSNIeLen = gen_ie_len - 2; + // Skip past the EID byte and length byte + pRsnIe = gen_ie + 2; + RSNIeLen = gen_ie_len - 2; // Unpack the RSN IE memset(&dot11RSNIE, 0, sizeof(tDot11fIERSN)); - dot11fUnpackIeRSN((tpAniSirGlobal) halHandle, - pRsnIe, - RSNIeLen, + dot11fUnpackIeRSN((tpAniSirGlobal) halHandle, + pRsnIe, + RSNIeLen, &dot11RSNIE); - // Copy out the encryption and authentication types - hddLog(LOG1, FL("%s: pairwise cipher suite count: %d\n"), + // Copy out the encryption and authentication types + hddLog(LOG1, FL("%s: pairwise cipher suite count: %d\n"), __func__, dot11RSNIE.pwise_cipher_suite_count ); - hddLog(LOG1, FL("%s: authentication suite count: %d\n"), + hddLog(LOG1, FL("%s: authentication suite count: %d\n"), __func__, dot11RSNIE.akm_suite_count); - /*Here we have followed the apple base code, + /*Here we have followed the apple base code, but probably I suspect we can do something different*/ //dot11RSNIE.akm_suite_count - // Just translate the FIRST one - *pAuthType = hdd_TranslateRSNToCsrAuthType(dot11RSNIE.akm_suites[0]); - //dot11RSNIE.pwise_cipher_suite_count - *pEncryptType = hdd_TranslateRSNToCsrEncryptionType(dot11RSNIE.pwise_cipher_suites[0]); - //dot11RSNIE.gp_cipher_suite_count - *mcEncryptType = hdd_TranslateRSNToCsrEncryptionType(dot11RSNIE.gp_cipher_suite); + // Just translate the FIRST one + *pAuthType = hdd_TranslateRSNToCsrAuthType(dot11RSNIE.akm_suites[0]); + //dot11RSNIE.pwise_cipher_suite_count + *pEncryptType = hdd_TranslateRSNToCsrEncryptionType(dot11RSNIE.pwise_cipher_suites[0]); + //dot11RSNIE.gp_cipher_suite_count + *mcEncryptType = hdd_TranslateRSNToCsrEncryptionType(dot11RSNIE.gp_cipher_suite); // Set the PMKSA ID Cache for this interface - + // Calling csrRoamSetPMKIDCache to configure the PMKIDs into the cache - } else - if (gen_ie[0] == DOT11F_EID_WPA) - { + } else + if (gen_ie[0] == DOT11F_EID_WPA) + { // Validity checks - if ((gen_ie_len < DOT11F_IE_WPA_MIN_LEN ) || + if ((gen_ie_len < DOT11F_IE_WPA_MIN_LEN ) || (gen_ie_len > DOT11F_IE_WPA_MAX_LEN)) { return VOS_STATUS_E_FAILURE; } - // Skip past the EID byte and length byte - and four byte WiFi OUI - pRsnIe = gen_ie + 2 + 4; - RSNIeLen = gen_ie_len - (2 + 4); + // Skip past the EID byte and length byte - and four byte WiFi OUI + pRsnIe = gen_ie + 2 + 4; + RSNIeLen = gen_ie_len - (2 + 4); // Unpack the WPA IE memset(&dot11WPAIE, 0, sizeof(tDot11fIEWPA)); - dot11fUnpackIeWPA((tpAniSirGlobal) halHandle, - pRsnIe, - RSNIeLen, + dot11fUnpackIeWPA((tpAniSirGlobal) halHandle, + pRsnIe, + RSNIeLen, &dot11WPAIE); - // Copy out the encryption and authentication types - hddLog(LOG1, FL("%s: WPA unicast cipher suite count: %d\n"), + // Copy out the encryption and authentication types + hddLog(LOG1, FL("%s: WPA unicast cipher suite count: %d\n"), __func__, dot11WPAIE.unicast_cipher_count ); - hddLog(LOG1, FL("%s: WPA authentication suite count: %d\n"), + hddLog(LOG1, FL("%s: WPA authentication suite count: %d\n"), __func__, dot11WPAIE.auth_suite_count); //dot11WPAIE.auth_suite_count - // Just translate the FIRST one - *pAuthType = hdd_TranslateWPAToCsrAuthType(dot11WPAIE.auth_suites[0]); - //dot11WPAIE.unicast_cipher_count - *pEncryptType = hdd_TranslateWPAToCsrEncryptionType(dot11WPAIE.unicast_ciphers[0]); - //dot11WPAIE.unicast_cipher_count - *mcEncryptType = hdd_TranslateWPAToCsrEncryptionType(dot11WPAIE.multicast_cipher); - } - else - { + // Just translate the FIRST one + *pAuthType = hdd_TranslateWPAToCsrAuthType(dot11WPAIE.auth_suites[0]); + //dot11WPAIE.unicast_cipher_count + *pEncryptType = hdd_TranslateWPAToCsrEncryptionType(dot11WPAIE.unicast_ciphers[0]); + //dot11WPAIE.unicast_cipher_count + *mcEncryptType = hdd_TranslateWPAToCsrEncryptionType(dot11WPAIE.multicast_cipher); + } + else + { hddLog(LOGW, FL("%s: gen_ie[0]: %d\n"), __func__, gen_ie[0]); - return VOS_STATUS_E_FAILURE; + return VOS_STATUS_E_FAILURE; } return VOS_STATUS_SUCCESS; } int -static iw_softap_setparam(struct net_device *dev, +static iw_softap_setparam(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra) { @@ -1005,7 +1030,7 @@ static iw_softap_setparam(struct net_device *dev, int set_value = value[1]; eHalStatus status; int ret = 0; /* success */ - v_CONTEXT_t pVosContext = (WLAN_HDD_GET_CTX(pHostapdAdapter))->pvosContext; + v_CONTEXT_t pVosContext = (WLAN_HDD_GET_CTX(pHostapdAdapter))->pvosContext; switch(sub_cmd) { @@ -1013,12 +1038,12 @@ static iw_softap_setparam(struct net_device *dev, case QCSAP_PARAM_CLR_ACL: if ( VOS_STATUS_SUCCESS != WLANSAP_ClearACL( pVosContext )) { - ret = -EIO; + ret = -EIO; } break; case QCSAP_PARAM_ACL_MODE: - if ((eSAP_ALLOW_ALL < (eSapMacAddrACL)set_value) || + if ((eSAP_ALLOW_ALL < (eSapMacAddrACL)set_value) || (eSAP_ACCEPT_UNLESS_DENIED > (eSapMacAddrACL)set_value)) { hddLog(LOGE, FL("Invalid ACL Mode value %d"), set_value); @@ -1046,7 +1071,7 @@ static iw_softap_setparam(struct net_device *dev, } status = ccmCfgSetInt(hHal, WNI_CFG_ASSOC_STA_LIMIT, set_value, NULL, eANI_BOOLEAN_FALSE); - if ( status != eHAL_STATUS_SUCCESS ) + if ( status != eHAL_STATUS_SUCCESS ) { hddLog(LOGE, FL("setMaxAssoc failure, status %d"), status); @@ -1288,7 +1313,7 @@ static iw_softap_setparam(struct net_device *dev, int -static iw_softap_getparam(struct net_device *dev, +static iw_softap_getparam(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra) { @@ -1298,7 +1323,7 @@ static iw_softap_getparam(struct net_device *dev, int sub_cmd = value[0]; eHalStatus status; int ret = 0; /* success */ - v_CONTEXT_t pVosContext = (WLAN_HDD_GET_CTX(pHostapdAdapter))->pvosContext; + v_CONTEXT_t pVosContext = (WLAN_HDD_GET_CTX(pHostapdAdapter))->pvosContext; switch (sub_cmd) { @@ -1309,25 +1334,25 @@ static iw_softap_getparam(struct net_device *dev, ret = -EIO; } break; - + case QCSAP_PARAM_CLR_ACL: if ( VOS_STATUS_SUCCESS != WLANSAP_ClearACL( pVosContext )) { - ret = -EIO; - } + ret = -EIO; + } *value = 0; break; - + case QCSAP_PARAM_MODULE_DOWN_IND: { VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "%s: sending WLAN_MODULE_DOWN_IND", __func__); send_btc_nlink_msg(WLAN_MODULE_DOWN_IND, 0); -#ifdef WLAN_BTAMP_FEATURE +#ifdef WLAN_BTAMP_FEATURE VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "%s: Take down AMP PAL", __func__); BSL_Deinit(vos_get_global_context(VOS_MODULE_ID_HDD, NULL)); -#endif +#endif *value = 0; break; } @@ -1366,7 +1391,7 @@ static iw_softap_getparam(struct net_device *dev, /* Usage: BLACK_LIST = 0 - WHITE_LIST = 1 + WHITE_LIST = 1 ADD MAC = 0 REMOVE MAC = 1 @@ -1375,7 +1400,7 @@ static iw_softap_getparam(struct net_device *dev, while using this ioctl Syntax: - iwpriv softap.0 modify_acl + iwpriv softap.0 modify_acl <6 octet mac addr> Examples: @@ -1388,7 +1413,7 @@ int iw_softap_modify_acl(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra) { hdd_adapter_t *pHostapdAdapter = (netdev_priv(dev)); - v_CONTEXT_t pVosContext = (WLAN_HDD_GET_CTX(pHostapdAdapter))->pvosContext; + v_CONTEXT_t pVosContext = (WLAN_HDD_GET_CTX(pHostapdAdapter))->pvosContext; v_BYTE_t *value = (v_BYTE_t*)extra; v_U8_t pPeerStaMac[VOS_MAC_ADDR_SIZE]; int listType, cmd, i; @@ -1404,7 +1429,7 @@ int iw_softap_modify_acl(struct net_device *dev, struct iw_request_info *info, cmd = (int)(*(value+i)); hddLog(LOG1, "%s: SAP Modify ACL arg0 %02x:%02x:%02x:%02x:%02x:%02x arg1 %d arg2 %d\n", - __func__, pPeerStaMac[0], pPeerStaMac[1], pPeerStaMac[2], + __func__, pPeerStaMac[0], pPeerStaMac[1], pPeerStaMac[2], pPeerStaMac[3], pPeerStaMac[4], pPeerStaMac[5], listType, cmd); if (WLANSAP_ModifyACL(pVosContext, pPeerStaMac,(eSapACLType)listType,(eSapACLCmdType)cmd) @@ -1606,7 +1631,7 @@ static iw_softap_getassoc_stamacaddr(struct net_device *dev, spin_lock_bh( &pHostapdAdapter->staInfo_lock ); while((cnt < WLAN_MAX_STA_COUNT) && (len > (sizeof(v_MACADDR_t)+1))) { if (TRUE == pStaInfo[cnt].isUsed) { - + if(!IS_BROADCAST_MAC(pStaInfo[cnt].macAddrSTA.bytes)) { if (copy_to_user((void *)wrqu->data.pointer + maclist_index, (void *)&(pStaInfo[cnt].macAddrSTA), sizeof(v_MACADDR_t))) @@ -1619,7 +1644,7 @@ static iw_softap_getassoc_stamacaddr(struct net_device *dev, } } cnt++; - } + } spin_unlock_bh( &pHostapdAdapter->staInfo_lock ); if (copy_to_user((void *)wrqu->data.pointer + maclist_index, @@ -1656,8 +1681,8 @@ static iw_softap_disassoc_sta(struct net_device *dev, union iwreq_data *wrqu, char *extra) { hdd_adapter_t *pHostapdAdapter = (netdev_priv(dev)); - v_U8_t *peerMacAddr; - + v_U8_t *peerMacAddr; + ENTER(); /* iwpriv tool or framework calls this ioctl with * data passed in extra (less than 16 octets); @@ -1723,7 +1748,7 @@ static iw_softap_commit(struct net_device *dev, VOS_STATUS vos_status = VOS_STATUS_SUCCESS; hdd_adapter_t *pHostapdAdapter = (netdev_priv(dev)); hdd_hostapd_state_t *pHostapdState; - v_CONTEXT_t pVosContext = (WLAN_HDD_GET_CTX(pHostapdAdapter))->pvosContext; + v_CONTEXT_t pVosContext = (WLAN_HDD_GET_CTX(pHostapdAdapter))->pvosContext; tpWLAN_SAPEventCB pSapEventCallback; tsap_Config_t *pConfig; s_CommitConfig_t *pCommitConfig; @@ -1736,7 +1761,7 @@ static iw_softap_commit(struct net_device *dev, pHostapdState = WLAN_HDD_GET_HOSTAP_STATE_PTR(pHostapdAdapter); pCommitConfig = (s_CommitConfig_t *)extra; - + pConfig = kmalloc(sizeof(tsap_Config_t), GFP_KERNEL); if(NULL == pConfig) { hddLog(LOG1, "VOS unable to allocate memory\n"); @@ -1751,15 +1776,15 @@ static iw_softap_commit(struct net_device *dev, switch(pCommitConfig->hw_mode ) { case eQC_DOT11_MODE_11A: - pConfig->SapHw_mode = eSAP_DOT11_MODE_11a; + pConfig->SapHw_mode = eSAP_DOT11_MODE_11a; break; case eQC_DOT11_MODE_11B: - pConfig->SapHw_mode = eSAP_DOT11_MODE_11b; + pConfig->SapHw_mode = eSAP_DOT11_MODE_11b; break; case eQC_DOT11_MODE_11G: pConfig->SapHw_mode = eSAP_DOT11_MODE_11g; break; - + case eQC_DOT11_MODE_11N: pConfig->SapHw_mode = eSAP_DOT11_MODE_11n; break; @@ -1772,45 +1797,45 @@ static iw_softap_commit(struct net_device *dev, default: pConfig->SapHw_mode = eSAP_DOT11_MODE_11n; break; - + } - + pConfig->ieee80211d = pCommitConfig->qcsap80211d; vos_mem_copy(pConfig->countryCode, pCommitConfig->countryCode, 3); if(pCommitConfig->authType == eQC_AUTH_TYPE_SHARED_KEY) pConfig->authType = eSAP_SHARED_KEY; - else if(pCommitConfig->authType == eQC_AUTH_TYPE_OPEN_SYSTEM) + else if(pCommitConfig->authType == eQC_AUTH_TYPE_OPEN_SYSTEM) pConfig->authType = eSAP_OPEN_SYSTEM; else pConfig->authType = eSAP_AUTO_SWITCH; - + pConfig->privacy = pCommitConfig->privacy; (WLAN_HDD_GET_AP_CTX_PTR(pHostapdAdapter))->uPrivacy = pCommitConfig->privacy; pConfig->wps_state = pCommitConfig->wps_state; - pConfig->fwdWPSPBCProbeReq = 1; // Forward WPS PBC probe request frame up + pConfig->fwdWPSPBCProbeReq = 1; // Forward WPS PBC probe request frame up pConfig->RSNWPAReqIELength = pCommitConfig->RSNWPAReqIELength; if(pConfig->RSNWPAReqIELength){ pConfig->pRSNWPAReqIE = &pCommitConfig->RSNWPAReqIE[0]; if ((pConfig->pRSNWPAReqIE[0] == DOT11F_EID_RSN) || (pConfig->pRSNWPAReqIE[0] == DOT11F_EID_WPA)){ // The actual processing may eventually be more extensive than this. // Right now, just consume any PMKIDs that are sent in by the app. - status = hdd_softap_unpackIE( + status = hdd_softap_unpackIE( vos_get_context( VOS_MODULE_ID_PE, pVosContext), &RSNEncryptType, &mcRSNEncryptType, &RSNAuthType, pConfig->pRSNWPAReqIE[1]+2, pConfig->pRSNWPAReqIE ); - + if( VOS_STATUS_SUCCESS == status ) { // Now copy over all the security attributes you have parsed out - //TODO: Need to handle mixed mode + //TODO: Need to handle mixed mode pConfig->RSNEncryptType = RSNEncryptType; // Use the cipher type in the RSN IE pConfig->mcRSNEncryptType = mcRSNEncryptType; hddLog( LOG1, FL("CSR AuthType = %d, EncryptionType = %d mcEncryptionType = %d\n"), RSNAuthType, RSNEncryptType, mcRSNEncryptType); - } + } } } else @@ -1818,7 +1843,7 @@ static iw_softap_commit(struct net_device *dev, /* If no RSNIE, set encrypt type to NONE*/ pConfig->RSNEncryptType = eCSR_ENCRYPT_TYPE_NONE; pConfig->mcRSNEncryptType = eCSR_ENCRYPT_TYPE_NONE; - hddLog( LOG1, FL("EncryptionType = %d mcEncryptionType = %d\n"), + hddLog( LOG1, FL("EncryptionType = %d mcEncryptionType = %d\n"), pConfig->RSNEncryptType, pConfig->mcRSNEncryptType); } @@ -1828,11 +1853,11 @@ static iw_softap_commit(struct net_device *dev, return -EIO; } - pConfig->SSIDinfo.ssidHidden = pCommitConfig->SSIDinfo.ssidHidden; + pConfig->SSIDinfo.ssidHidden = pCommitConfig->SSIDinfo.ssidHidden; pConfig->SSIDinfo.ssid.length = pCommitConfig->SSIDinfo.ssid.length; vos_mem_copy(pConfig->SSIDinfo.ssid.ssId, pCommitConfig->SSIDinfo.ssid.ssId, pConfig->SSIDinfo.ssid.length); vos_mem_copy(pConfig->self_macaddr.bytes, pHostapdAdapter->macAddressCurrent.bytes, sizeof(v_MACADDR_t)); - + pConfig->SapMacaddr_acl = pCommitConfig->qc_macaddr_acl; // ht_capab is not what the name conveys,this is used for protection bitmap @@ -1861,37 +1886,37 @@ static iw_softap_commit(struct net_device *dev, //Uapsd Enabled Bit pConfig->UapsdEnable = (WLAN_HDD_GET_CTX(pHostapdAdapter))->cfg_ini->apUapsdEnabled; //Enable OBSS protection - pConfig->obssProtEnabled = (WLAN_HDD_GET_CTX(pHostapdAdapter))->cfg_ini->apOBSSProtEnabled; + pConfig->obssProtEnabled = (WLAN_HDD_GET_CTX(pHostapdAdapter))->cfg_ini->apOBSSProtEnabled; (WLAN_HDD_GET_AP_CTX_PTR(pHostapdAdapter))->apDisableIntraBssFwd = (WLAN_HDD_GET_CTX(pHostapdAdapter))->cfg_ini->apDisableIntraBssFwd; - + hddLog(LOGW, FL("SOftAP macaddress : "MAC_ADDRESS_STR"\n"), MAC_ADDR_ARRAY(pHostapdAdapter->macAddressCurrent.bytes)); - hddLog(LOGW,FL("ssid =%s\n"), pConfig->SSIDinfo.ssid.ssId); + hddLog(LOGW,FL("ssid =%s\n"), pConfig->SSIDinfo.ssid.ssId); hddLog(LOGW,FL("beaconint=%d, channel=%d\n"), (int)pConfig->beacon_int, (int)pConfig->channel); hddLog(LOGW,FL("hw_mode=%x\n"), pConfig->SapHw_mode); - hddLog(LOGW,FL("privacy=%d, authType=%d\n"), pConfig->privacy, pConfig->authType); + hddLog(LOGW,FL("privacy=%d, authType=%d\n"), pConfig->privacy, pConfig->authType); hddLog(LOGW,FL("RSN/WPALen=%d, \n"),(int)pConfig->RSNWPAReqIELength); - hddLog(LOGW,FL("Uapsd = %d\n"),pConfig->UapsdEnable); - hddLog(LOGW,FL("ProtEnabled = %d, OBSSProtEnabled = %d\n"),pConfig->protEnabled, pConfig->obssProtEnabled); - hddLog(LOGW,FL("DisableIntraBssFwd = %d\n"),(WLAN_HDD_GET_AP_CTX_PTR(pHostapdAdapter))->apDisableIntraBssFwd); - + hddLog(LOGW,FL("Uapsd = %d\n"),pConfig->UapsdEnable); + hddLog(LOGW,FL("ProtEnabled = %d, OBSSProtEnabled = %d\n"),pConfig->protEnabled, pConfig->obssProtEnabled); + hddLog(LOGW,FL("DisableIntraBssFwd = %d\n"),(WLAN_HDD_GET_AP_CTX_PTR(pHostapdAdapter))->apDisableIntraBssFwd); + pSapEventCallback = hdd_hostapd_SAPEventCB; pConfig->persona = pHostapdAdapter->device_mode; if(WLANSAP_StartBss(pVosContext, pSapEventCallback, pConfig,(v_PVOID_t)dev) != VOS_STATUS_SUCCESS) { hddLog(LOGE,FL("SAP Start Bss fail\n")); } - + kfree(pConfig); - + hddLog(LOG1, FL("Waiting for Scan to complete(auto mode) and BSS to start")); vos_status = vos_wait_single_event(&pHostapdState->vosEvent, 10000); - + if (!VOS_IS_STATUS_SUCCESS(vos_status)) - { + { VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, ("ERROR: HDD vos wait for single_event failed!!\n")); VOS_ASSERT(0); } - + pHostapdState->bCommit = TRUE; if(pHostapdState->vosStatus) { @@ -1900,11 +1925,11 @@ static iw_softap_commit(struct net_device *dev, else { set_bit(SOFTAP_BSS_STARTED, &pHostapdAdapter->event_flags); - WLANSAP_Update_WpsIe ( pVosContext ); + WLANSAP_Update_WpsIe ( pVosContext ); return 0; } } -static +static int iw_softap_setmlme(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra) @@ -1942,7 +1967,7 @@ int iw_softap_setmlme(struct net_device *dev, return 0; } -static int iw_softap_set_channel_range(struct net_device *dev, +static int iw_softap_set_channel_range(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra) { @@ -1960,7 +1985,7 @@ static int iw_softap_set_channel_range(struct net_device *dev, status = WLANSAP_SetChannelRange(hHal,startChannel,endChannel,band); if(status != VOS_STATUS_SUCCESS) { - hddLog( LOGE, FL("iw_softap_set_channel_range: startChannel = %d, endChannel = %d band = %d\n"), + hddLog( LOGE, FL("iw_softap_set_channel_range: startChannel = %d, endChannel = %d band = %d\n"), startChannel,endChannel, band); ret = -EINVAL; } @@ -1970,7 +1995,7 @@ static int iw_softap_set_channel_range(struct net_device *dev, return ret; } -int iw_softap_get_channel_list(struct net_device *dev, +int iw_softap_get_channel_list(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra) { @@ -2012,7 +2037,7 @@ int iw_softap_get_channel_list(struct net_device *dev, { if( NV_CHANNEL_ENABLE == regChannels[i].enabled ) { - channel_list->channels[num_channels] = rfChannels[i].channelNum; + channel_list->channels[num_channels] = rfChannels[i].channelNum; num_channels++; } } @@ -2031,21 +2056,21 @@ int iw_softap_get_channel_list(struct net_device *dev, { for(i = 0; i < temp_num_channels; i++) { - - if((channel_list->channels[i] > 35) && + + if((channel_list->channels[i] > 35) && (channel_list->channels[i] < 49)) { - vos_mem_move(&channel_list->channels[i], - &channel_list->channels[i+1], + vos_mem_move(&channel_list->channels[i], + &channel_list->channels[i+1], temp_num_channels - (i-1)); num_channels--; temp_num_channels--; i--; - } + } } } - hddLog(LOG1,FL(" number of channels %d\n"), num_channels); + hddLog(LOG1,FL(" number of channels %d\n"), num_channels); if (num_channels > IW_MAX_FREQUENCIES) { @@ -2058,20 +2083,20 @@ int iw_softap_get_channel_list(struct net_device *dev, return 0; } -static +static int iw_get_genie(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra) { hdd_adapter_t *pHostapdAdapter = (netdev_priv(dev)); - v_CONTEXT_t pVosContext = (WLAN_HDD_GET_CTX(pHostapdAdapter))->pvosContext; + v_CONTEXT_t pVosContext = (WLAN_HDD_GET_CTX(pHostapdAdapter))->pvosContext; eHalStatus status; v_U32_t length = DOT11F_IE_RSN_MAX_LEN; v_U8_t genIeBytes[DOT11F_IE_RSN_MAX_LEN]; ENTER(); hddLog(LOG1,FL("getGEN_IE ioctl\n")); // Actually retrieve the RSN IE from CSR. (We previously sent it down in the CSR Roam Profile.) - status = WLANSap_getstationIE_information(pVosContext, + status = WLANSap_getstationIE_information(pVosContext, &length, genIeBytes); length = VOS_MIN((u_int16_t) length, DOT11F_IE_RSN_MAX_LEN); @@ -2084,22 +2109,22 @@ int iw_get_genie(struct net_device *dev, } wrqu->data.length = length; - hddLog(LOG1,FL(" RSN IE of %d bytes returned\n"), wrqu->data.length ); - - + hddLog(LOG1,FL(" RSN IE of %d bytes returned\n"), wrqu->data.length ); + + EXIT(); return 0; } -static +static int iw_get_WPSPBCProbeReqIEs(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra) { - hdd_adapter_t *pHostapdAdapter = (netdev_priv(dev)); + hdd_adapter_t *pHostapdAdapter = (netdev_priv(dev)); sQcSapreq_WPSPBCProbeReqIES_t WPSPBCProbeReqIEs; hdd_ap_ctx_t *pHddApCtx = WLAN_HDD_GET_AP_CTX_PTR(pHostapdAdapter); ENTER(); - + hddLog(LOG1,FL("get_WPSPBCProbeReqIEs ioctl\n")); memset((void*)&WPSPBCProbeReqIEs, 0, sizeof(WPSPBCProbeReqIEs)); @@ -2126,22 +2151,22 @@ int iw_get_WPSPBCProbeReqIEs(struct net_device *dev, } /**--------------------------------------------------------------------------- - - \brief iw_set_auth_hostap() - + + \brief iw_set_auth_hostap() - This function sets the auth type received from the wpa_supplicant. - + \param - dev - Pointer to the net device. - info - Pointer to the iw_request_info. - wrqu - Pointer to the iwreq_data. - - extra - Pointer to the data. + - extra - Pointer to the data. \return - 0 for success, non zero for failure - + --------------------------------------------------------------------------*/ int iw_set_auth_hostap(struct net_device *dev,struct iw_request_info *info, union iwreq_data *wrqu,char *extra) { hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); - hdd_wext_state_t *pWextState = WLAN_HDD_GET_WEXT_STATE_PTR(pAdapter); + hdd_wext_state_t *pWextState = WLAN_HDD_GET_WEXT_STATE_PTR(pAdapter); ENTER(); switch(wrqu->param.flags & IW_AUTH_INDEX) @@ -2152,8 +2177,8 @@ int iw_set_auth_hostap(struct net_device *dev,struct iw_request_info *info, hddLog(VOS_TRACE_LEVEL_INFO_HIGH, "Counter Measure started %d", wrqu->param.value); pWextState->mTKIPCounterMeasures = TKIP_COUNTER_MEASURE_STARTED; - } - else { + } + else { hddLog(VOS_TRACE_LEVEL_INFO_HIGH, "Counter Measure stopped=%d", wrqu->param.value); pWextState->mTKIPCounterMeasures = TKIP_COUNTER_MEASURE_STOPED; @@ -2161,26 +2186,26 @@ int iw_set_auth_hostap(struct net_device *dev,struct iw_request_info *info, hdd_softap_tkip_mic_fail_counter_measure(pAdapter, wrqu->param.value); - } + } break; - + default: - - hddLog(LOGW, "%s called with unsupported auth type %d", __func__, + + hddLog(LOGW, "%s called with unsupported auth type %d", __func__, wrqu->param.flags & IW_AUTH_INDEX); break; } - + EXIT(); return 0; } -static int iw_set_ap_encodeext(struct net_device *dev, +static int iw_set_ap_encodeext(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra) { hdd_adapter_t *pHostapdAdapter = (netdev_priv(dev)); - v_CONTEXT_t pVosContext = (WLAN_HDD_GET_CTX(pHostapdAdapter))->pvosContext; + v_CONTEXT_t pVosContext = (WLAN_HDD_GET_CTX(pHostapdAdapter))->pvosContext; hdd_ap_ctx_t *pHddApCtx = WLAN_HDD_GET_AP_CTX_PTR(pHostapdAdapter); int retval = 0; VOS_STATUS vstatus; @@ -2188,26 +2213,26 @@ static int iw_set_ap_encodeext(struct net_device *dev, v_U8_t groupmacaddr[WNI_CFG_BSSID_LEN] = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}; int key_index; struct iw_point *encoding = &wrqu->encoding; - tCsrRoamSetKey setKey; + tCsrRoamSetKey setKey; // tCsrRoamRemoveKey RemoveKey; int i; - ENTER(); - + ENTER(); + key_index = encoding->flags & IW_ENCODE_INDEX; - + if(key_index > 0) { - + /*Convert from 1-based to 0-based keying*/ key_index--; } if(!ext->key_len) { -#if 0 +#if 0 /*Set the encrytion type to NONE*/ #if 0 pRoamProfile->EncryptionType.encryptionType[0] = eCSR_ENCRYPT_TYPE_NONE; #endif - + RemoveKey.keyId = key_index; if(ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY) { /*Key direction for group is RX only*/ @@ -2250,23 +2275,23 @@ static int iw_set_ap_encodeext(struct net_device *dev, return retval; } - + vos_mem_zero(&setKey,sizeof(tCsrRoamSetKey)); - + setKey.keyId = key_index; setKey.keyLength = ext->key_len; - + if(ext->key_len <= CSR_MAX_KEY_LEN) { vos_mem_copy(&setKey.Key[0],ext->key,ext->key_len); - } - + } + if(ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY) { /*Key direction for group is RX only*/ setKey.keyDirection = eSIR_RX_ONLY; vos_mem_copy(setKey.peerMac,groupmacaddr,WNI_CFG_BSSID_LEN); } - else { - + else { + setKey.keyDirection = eSIR_TX_RX; vos_mem_copy(setKey.peerMac,ext->addr.sa_data,WNI_CFG_BSSID_LEN); } @@ -2275,72 +2300,72 @@ static int iw_set_ap_encodeext(struct net_device *dev, setKey.keyDirection = eSIR_TX_DEFAULT; vos_mem_copy(setKey.peerMac,ext->addr.sa_data,WNI_CFG_BSSID_LEN); } - + /*For supplicant pae role is zero*/ setKey.paeRole = 0; - + switch(ext->alg) - { - case IW_ENCODE_ALG_NONE: + { + case IW_ENCODE_ALG_NONE: setKey.encType = eCSR_ENCRYPT_TYPE_NONE; break; - + case IW_ENCODE_ALG_WEP: setKey.encType = (ext->key_len== 5) ? eCSR_ENCRYPT_TYPE_WEP40:eCSR_ENCRYPT_TYPE_WEP104; pHddApCtx->uPrivacy = 1; hddLog(LOG1, "(%s) uPrivacy=%d", __func__, pHddApCtx->uPrivacy); break; - + case IW_ENCODE_ALG_TKIP: { v_U8_t *pKey = &setKey.Key[0]; - + setKey.encType = eCSR_ENCRYPT_TYPE_TKIP; - + vos_mem_zero(pKey, CSR_MAX_KEY_LEN); - - /*Supplicant sends the 32bytes key in this order - + + /*Supplicant sends the 32bytes key in this order + |--------------|----------|----------| - | Tk1 |TX-MIC | RX Mic | + | Tk1 |TX-MIC | RX Mic | |--------------|----------|----------| <---16bytes---><--8bytes--><--8bytes--> - + */ /*Sme expects the 32 bytes key to be in the below order - + |--------------|----------|----------| - | Tk1 |RX-MIC | TX Mic | + | Tk1 |RX-MIC | TX Mic | |--------------|----------|----------| <---16bytes---><--8bytes--><--8bytes--> */ /* Copy the Temporal Key 1 (TK1) */ vos_mem_copy(pKey,ext->key,16); - + /*Copy the rx mic first*/ - vos_mem_copy(&pKey[16],&ext->key[24],8); - + vos_mem_copy(&pKey[16],&ext->key[24],8); + /*Copy the tx mic */ - vos_mem_copy(&pKey[24],&ext->key[16],8); - - } + vos_mem_copy(&pKey[24],&ext->key[16],8); + + } break; - + case IW_ENCODE_ALG_CCMP: setKey.encType = eCSR_ENCRYPT_TYPE_AES; break; - + default: setKey.encType = eCSR_ENCRYPT_TYPE_NONE; break; } - + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, ("%s:EncryptionType:%d key_len:%d, KeyId:%d"), __func__, setKey.encType, setKey.keyLength, setKey.keyId); for(i=0; i< ext->key_len; i++) VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - ("%02x"), setKey.Key[i]); + ("%02x"), setKey.Key[i]); VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, ("\n")); @@ -2351,7 +2376,7 @@ static int iw_set_ap_encodeext(struct net_device *dev, "[%4d] WLANSAP_SetKeySta returned ERROR status= %d", __LINE__, vstatus ); retval = -EINVAL; } - + return retval; } @@ -2364,29 +2389,29 @@ static int iw_set_ap_mlme(struct net_device *dev, #if 0 hdd_adapter_t *pAdapter = (netdev_priv(dev)); struct iw_mlme *mlme = (struct iw_mlme *)extra; - - ENTER(); - + + ENTER(); + //reason_code is unused. By default it is set to eCSR_DISCONNECT_REASON_UNSPECIFIED switch (mlme->cmd) { case IW_MLME_DISASSOC: case IW_MLME_DEAUTH: - hddLog(LOG1, "Station disassociate"); - if( pAdapter->conn_info.connState == eConnectionState_Associated ) + hddLog(LOG1, "Station disassociate"); + if( pAdapter->conn_info.connState == eConnectionState_Associated ) { eCsrRoamDisconnectReason reason = eCSR_DISCONNECT_REASON_UNSPECIFIED; - + if( mlme->reason_code == HDD_REASON_MICHAEL_MIC_FAILURE ) reason = eCSR_DISCONNECT_REASON_MIC_ERROR; - + status = sme_RoamDisconnect( pAdapter->hHal,pAdapter->sessionId, reason); - + //clear all the reason codes if (status != 0) { hddLog(LOGE,"%s %d Command Disassociate/Deauthenticate : csrRoamDisconnect failure returned %d \n", __func__, (int)mlme->cmd, (int)status ); } - + netif_stop_queue(dev); netif_carrier_off(dev); } @@ -2399,7 +2424,7 @@ static int iw_set_ap_mlme(struct net_device *dev, return -EINVAL; }//end of switch EXIT(); -#endif +#endif return 0; // return status; } @@ -2498,7 +2523,7 @@ static int iw_get_mode(struct net_device *dev, static int iw_softap_setwpsie(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, + union iwreq_data *wrqu, char *extra) { hdd_adapter_t *pHostapdAdapter = (netdev_priv(dev)); @@ -2510,7 +2535,7 @@ static int iw_softap_setwpsie(struct net_device *dev, u_int8_t *pos; tpSap_WPSIE pSap_WPSIe; u_int8_t WPSIeType; - u_int16_t length; + u_int16_t length; ENTER(); if(!wrqu->data.length || wrqu->data.length <= QCSAP_MAX_WSC_IE) @@ -2532,30 +2557,30 @@ static int iw_softap_setwpsie(struct net_device *dev, } pSap_WPSIe = vos_mem_malloc(sizeof(tSap_WPSIE)); - if (NULL == pSap_WPSIe) + if (NULL == pSap_WPSIe) { hddLog(LOGE, "VOS unable to allocate memory\n"); kfree(fwps_genie); return -ENOMEM; } vos_mem_zero(pSap_WPSIe, sizeof(tSap_WPSIE)); - + hddLog(LOG1,"%s WPS IE type[0x%X] IE[0x%X], LEN[%d]\n", __func__, wps_genie[0], wps_genie[1], wps_genie[2]); WPSIeType = wps_genie[0]; if ( wps_genie[0] == eQC_WPS_BEACON_IE) { - pSap_WPSIe->sapWPSIECode = eSAP_WPS_BEACON_IE; + pSap_WPSIe->sapWPSIECode = eSAP_WPS_BEACON_IE; wps_genie = wps_genie + 1; - switch ( wps_genie[0] ) + switch ( wps_genie[0] ) { - case DOT11F_EID_WPA: + case DOT11F_EID_WPA: if (wps_genie[1] < 2 + 4) { - vos_mem_free(pSap_WPSIe); + vos_mem_free(pSap_WPSIe); kfree(fwps_genie); return -EINVAL; } - else if (memcmp(&wps_genie[2], "\x00\x50\xf2\x04", 4) == 0) + else if (memcmp(&wps_genie[2], "\x00\x50\xf2\x04", 4) == 0) { hddLog (LOG1, "%s Set WPS BEACON IE(len %d)",__func__, wps_genie[1]+2); pos = &wps_genie[6]; @@ -2565,12 +2590,12 @@ static int iw_softap_setwpsie(struct net_device *dev, { case HDD_WPS_ELEM_VERSION: pos += 4; - pSap_WPSIe->sapwpsie.sapWPSBeaconIE.Version = *pos; + pSap_WPSIe->sapwpsie.sapWPSBeaconIE.Version = *pos; hddLog(LOG1, "WPS version %d\n", pSap_WPSIe->sapwpsie.sapWPSBeaconIE.Version); - pSap_WPSIe->sapwpsie.sapWPSBeaconIE.FieldPresent |= WPS_BEACON_VER_PRESENT; + pSap_WPSIe->sapwpsie.sapWPSBeaconIE.FieldPresent |= WPS_BEACON_VER_PRESENT; pos += 1; break; - + case HDD_WPS_ELEM_WPS_STATE: pos +=4; pSap_WPSIe->sapwpsie.sapWPSBeaconIE.wpsState = *pos; @@ -2597,22 +2622,22 @@ static int iw_softap_setwpsie(struct net_device *dev, pSap_WPSIe->sapwpsie.sapWPSBeaconIE.DevicePasswordID = (*pos<<8) | *(pos+1); hddLog(LOG1, "Password ID: %x\n", pSap_WPSIe->sapwpsie.sapWPSBeaconIE.DevicePasswordID); pSap_WPSIe->sapwpsie.sapWPSBeaconIE.FieldPresent |= WPS_BEACON_DEVICEPASSWORDID_PRESENT; - pos += 2; + pos += 2; break; case HDD_WPS_ELEM_REGISTRA_CONF_METHODS: pos += 4; pSap_WPSIe->sapwpsie.sapWPSBeaconIE.SelectedRegistraCfgMethod = (*pos<<8) | *(pos+1); hddLog(LOG1, "Select Registra Config Methods: %x\n", pSap_WPSIe->sapwpsie.sapWPSBeaconIE.SelectedRegistraCfgMethod); pSap_WPSIe->sapwpsie.sapWPSBeaconIE.FieldPresent |= WPS_BEACON_SELECTEDREGISTRACFGMETHOD_PRESENT; - pos += 2; + pos += 2; break; - + case HDD_WPS_ELEM_UUID_E: - pos += 2; + pos += 2; length = *pos<<8 | *(pos+1); pos += 2; vos_mem_copy(pSap_WPSIe->sapwpsie.sapWPSBeaconIE.UUID_E, pos, length); - pSap_WPSIe->sapwpsie.sapWPSBeaconIE.FieldPresent |= WPS_BEACON_UUIDE_PRESENT; + pSap_WPSIe->sapwpsie.sapWPSBeaconIE.FieldPresent |= WPS_BEACON_UUIDE_PRESENT; pos += length; break; case HDD_WPS_ELEM_RF_BANDS: @@ -2622,42 +2647,42 @@ static int iw_softap_setwpsie(struct net_device *dev, pSap_WPSIe->sapwpsie.sapWPSBeaconIE.FieldPresent |= WPS_BEACON_RF_BANDS_PRESENT; pos += 1; break; - + default: hddLog (LOGW, "UNKNOWN TLV in WPS IE(%x)\n", (*pos<<8 | *(pos+1))); vos_mem_free(pSap_WPSIe); kfree(fwps_genie); - return -EINVAL; + return -EINVAL; } - } + } } - else { + else { hddLog (LOGE, "%s WPS IE Mismatch %X", __func__, wps_genie[0]); - } + } break; - + default: hddLog (LOGE, "%s Set UNKNOWN IE %X",__func__, wps_genie[0]); vos_mem_free(pSap_WPSIe); kfree(fwps_genie); return 0; } - } + } else if( wps_genie[0] == eQC_WPS_PROBE_RSP_IE) { - pSap_WPSIe->sapWPSIECode = eSAP_WPS_PROBE_RSP_IE; + pSap_WPSIe->sapWPSIECode = eSAP_WPS_PROBE_RSP_IE; wps_genie = wps_genie + 1; - switch ( wps_genie[0] ) + switch ( wps_genie[0] ) { - case DOT11F_EID_WPA: + case DOT11F_EID_WPA: if (wps_genie[1] < 2 + 4) { - vos_mem_free(pSap_WPSIe); + vos_mem_free(pSap_WPSIe); kfree(fwps_genie); return -EINVAL; } - else if (memcmp(&wps_genie[2], "\x00\x50\xf2\x04", 4) == 0) + else if (memcmp(&wps_genie[2], "\x00\x50\xf2\x04", 4) == 0) { hddLog (LOG1, "%s Set WPS PROBE RSP IE(len %d)",__func__, wps_genie[1]+2); pos = &wps_genie[6]; @@ -2667,12 +2692,12 @@ static int iw_softap_setwpsie(struct net_device *dev, { case HDD_WPS_ELEM_VERSION: pos += 4; - pSap_WPSIe->sapwpsie.sapWPSProbeRspIE.Version = *pos; - hddLog(LOG1, "WPS version %d\n", pSap_WPSIe->sapwpsie.sapWPSProbeRspIE.Version); - pSap_WPSIe->sapwpsie.sapWPSProbeRspIE.FieldPresent |= WPS_PROBRSP_VER_PRESENT; + pSap_WPSIe->sapwpsie.sapWPSProbeRspIE.Version = *pos; + hddLog(LOG1, "WPS version %d\n", pSap_WPSIe->sapwpsie.sapWPSProbeRspIE.Version); + pSap_WPSIe->sapwpsie.sapWPSProbeRspIE.FieldPresent |= WPS_PROBRSP_VER_PRESENT; pos += 1; break; - + case HDD_WPS_ELEM_WPS_STATE: pos +=4; pSap_WPSIe->sapwpsie.sapWPSProbeRspIE.wpsState = *pos; @@ -2691,7 +2716,7 @@ static int iw_softap_setwpsie(struct net_device *dev, pos += 4; pSap_WPSIe->sapwpsie.sapWPSProbeRspIE.SelectedRegistra = *pos; hddLog(LOG1, "Selected Registra %d\n", pSap_WPSIe->sapwpsie.sapWPSProbeRspIE.SelectedRegistra); - pSap_WPSIe->sapwpsie.sapWPSProbeRspIE.FieldPresent |= WPS_PROBRSP_SELECTEDREGISTRA_PRESENT; + pSap_WPSIe->sapwpsie.sapWPSProbeRspIE.FieldPresent |= WPS_PROBRSP_SELECTEDREGISTRA_PRESENT; pos += 1; break; case HDD_WPS_ELEM_DEVICE_PASSWORD_ID: @@ -2699,14 +2724,14 @@ static int iw_softap_setwpsie(struct net_device *dev, pSap_WPSIe->sapwpsie.sapWPSProbeRspIE.DevicePasswordID = (*pos<<8) | *(pos+1); hddLog(LOG1, "Password ID: %d\n", pSap_WPSIe->sapwpsie.sapWPSProbeRspIE.DevicePasswordID); pSap_WPSIe->sapwpsie.sapWPSProbeRspIE.FieldPresent |= WPS_PROBRSP_DEVICEPASSWORDID_PRESENT; - pos += 2; + pos += 2; break; case HDD_WPS_ELEM_REGISTRA_CONF_METHODS: pos += 4; pSap_WPSIe->sapwpsie.sapWPSProbeRspIE.SelectedRegistraCfgMethod = (*pos<<8) | *(pos+1); hddLog(LOG1, "Select Registra Config Methods: %x\n", pSap_WPSIe->sapwpsie.sapWPSProbeRspIE.SelectedRegistraCfgMethod); pSap_WPSIe->sapwpsie.sapWPSProbeRspIE.FieldPresent |= WPS_PROBRSP_SELECTEDREGISTRACFGMETHOD_PRESENT; - pos += 2; + pos += 2; break; case HDD_WPS_ELEM_RSP_TYPE: pos += 4; @@ -2716,14 +2741,14 @@ static int iw_softap_setwpsie(struct net_device *dev, pos += 1; break; case HDD_WPS_ELEM_UUID_E: - pos += 2; + pos += 2; length = *pos<<8 | *(pos+1); pos += 2; vos_mem_copy(pSap_WPSIe->sapwpsie.sapWPSProbeRspIE.UUID_E, pos, length); pSap_WPSIe->sapwpsie.sapWPSProbeRspIE.FieldPresent |= WPS_PROBRSP_UUIDE_PRESENT; pos += length; break; - + case HDD_WPS_ELEM_MANUFACTURER: pos += 2; length = *pos<<8 | *(pos+1); @@ -2733,7 +2758,7 @@ static int iw_softap_setwpsie(struct net_device *dev, pSap_WPSIe->sapwpsie.sapWPSProbeRspIE.FieldPresent |= WPS_PROBRSP_MANUFACTURE_PRESENT; pos += length; break; - + case HDD_WPS_ELEM_MODEL_NAME: pos += 2; length = *pos<<8 | *(pos+1); @@ -2764,16 +2789,16 @@ static int iw_softap_setwpsie(struct net_device *dev, case HDD_WPS_ELEM_PRIMARY_DEVICE_TYPE: pos += 4; pSap_WPSIe->sapwpsie.sapWPSProbeRspIE.PrimaryDeviceCategory = (*pos<<8 | *(pos+1)); - hddLog(LOG1, "primary dev category: %d\n", pSap_WPSIe->sapwpsie.sapWPSProbeRspIE.PrimaryDeviceCategory); + hddLog(LOG1, "primary dev category: %d\n", pSap_WPSIe->sapwpsie.sapWPSProbeRspIE.PrimaryDeviceCategory); pos += 2; - + vos_mem_copy(pSap_WPSIe->sapwpsie.sapWPSProbeRspIE.PrimaryDeviceOUI, pos, HDD_WPS_DEVICE_OUI_LEN); hddLog(LOG1, "primary dev oui: %02x, %02x, %02x, %02x\n", pos[0], pos[1], pos[2], pos[3]); pos += 4; pSap_WPSIe->sapwpsie.sapWPSProbeRspIE.DeviceSubCategory = (*pos<<8 | *(pos+1)); - hddLog(LOG1, "primary dev sub category: %d\n", pSap_WPSIe->sapwpsie.sapWPSProbeRspIE.DeviceSubCategory); + hddLog(LOG1, "primary dev sub category: %d\n", pSap_WPSIe->sapwpsie.sapWPSProbeRspIE.DeviceSubCategory); pos += 2; - pSap_WPSIe->sapwpsie.sapWPSProbeRspIE.FieldPresent |= WPS_PROBRSP_PRIMARYDEVICETYPE_PRESENT; + pSap_WPSIe->sapwpsie.sapWPSProbeRspIE.FieldPresent |= WPS_PROBRSP_PRIMARYDEVICETYPE_PRESENT; break; case HDD_WPS_ELEM_DEVICE_NAME: pos += 2; @@ -2788,10 +2813,10 @@ static int iw_softap_setwpsie(struct net_device *dev, pos += 4; pSap_WPSIe->sapwpsie.sapWPSProbeRspIE.ConfigMethod = (*pos<<8) | *(pos+1); hddLog(LOG1, "Config Methods: %d\n", pSap_WPSIe->sapwpsie.sapWPSProbeRspIE.SelectedRegistraCfgMethod); - pos += 2; + pos += 2; pSap_WPSIe->sapwpsie.sapWPSProbeRspIE.FieldPresent |= WPS_PROBRSP_CONFIGMETHODS_PRESENT; break; - + case HDD_WPS_ELEM_RF_BANDS: pos += 4; pSap_WPSIe->sapwpsie.sapWPSProbeRspIE.RFBand = *pos; @@ -2801,12 +2826,12 @@ static int iw_softap_setwpsie(struct net_device *dev, break; } // switch } - } + } else { hddLog (LOGE, "%s WPS IE Mismatch %X",__func__, wps_genie[0]); } - + } // switch } halStatus = WLANSAP_Set_WpsIe(pVosContext, pSap_WPSIe); @@ -2817,8 +2842,8 @@ static int iw_softap_setwpsie(struct net_device *dev, //v_CONTEXT_t pVosContext = pHostapdAdapter->pvosContext; WLANSAP_Update_WpsIe ( pVosContext ); } - - vos_mem_free(pSap_WPSIe); + + vos_mem_free(pSap_WPSIe); kfree(fwps_genie); EXIT(); return halStatus; @@ -2826,23 +2851,23 @@ static int iw_softap_setwpsie(struct net_device *dev, static int iw_softap_stopbss(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, + union iwreq_data *wrqu, char *extra) { hdd_adapter_t *pHostapdAdapter = (netdev_priv(dev)); VOS_STATUS status = VOS_STATUS_SUCCESS; ENTER(); - if(test_bit(SOFTAP_BSS_STARTED, &pHostapdAdapter->event_flags)) + if(test_bit(SOFTAP_BSS_STARTED, &pHostapdAdapter->event_flags)) { if ( VOS_STATUS_SUCCESS == (status = WLANSAP_StopBss((WLAN_HDD_GET_CTX(pHostapdAdapter))->pvosContext) ) ) { hdd_hostapd_state_t *pHostapdState = WLAN_HDD_GET_HOSTAP_STATE_PTR(pHostapdAdapter); status = vos_wait_single_event(&pHostapdState->vosEvent, 10000); - + if (!VOS_IS_STATUS_SUCCESS(status)) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, ("ERROR: HDD vos wait for single_event failed!!\n")); VOS_ASSERT(0); } @@ -2901,7 +2926,7 @@ VOS_STATUS hdd_softap_get_sta_info(hdd_adapter_t *pAdapter, v_U8_t *pBuf, int bu static int iw_softap_get_sta_info(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, + union iwreq_data *wrqu, char *extra) { hdd_adapter_t *pHostapdAdapter = (netdev_priv(dev)); @@ -2919,43 +2944,43 @@ static int iw_softap_get_sta_info(struct net_device *dev, static int iw_set_ap_genie(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, + union iwreq_data *wrqu, char *extra) { - + hdd_adapter_t *pHostapdAdapter = (netdev_priv(dev)); v_CONTEXT_t pVosContext = (WLAN_HDD_GET_CTX(pHostapdAdapter))->pvosContext; eHalStatus halStatus= eHAL_STATUS_SUCCESS; u_int8_t *genie = (u_int8_t *)extra; ENTER(); - + if(!wrqu->data.length) { EXIT(); return 0; } - switch (genie[0]) + switch (genie[0]) { - case DOT11F_EID_WPA: + case DOT11F_EID_WPA: case DOT11F_EID_RSN: if((WLAN_HDD_GET_AP_CTX_PTR(pHostapdAdapter))->uPrivacy == 0) { hdd_softap_Deregister_BC_STA(pHostapdAdapter); hdd_softap_Register_BC_STA(pHostapdAdapter, 1); - } + } (WLAN_HDD_GET_AP_CTX_PTR(pHostapdAdapter))->uPrivacy = 1; halStatus = WLANSAP_Set_WPARSNIes(pVosContext, genie, wrqu->data.length); break; - + default: hddLog (LOGE, "%s Set UNKNOWN IE %X",__func__, genie[0]); halStatus = 0; } - + EXIT(); - return halStatus; + return halStatus; } static VOS_STATUS wlan_hdd_get_classAstats_for_station(hdd_adapter_t *pAdapter, u8 staid) @@ -3312,23 +3337,23 @@ static const struct iw_priv_args hostapd_private_args[] = { /* handlers for sub-ioctl */ { WE_SET_WLAN_DBG, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 3, - 0, + 0, "setwlandbg" }, /* handlers for main ioctl */ { QCSAP_IOCTL_PRIV_SET_VAR_INT_GET_NONE, IW_PRIV_TYPE_INT | MAX_VAR_ARGS, - 0, + 0, "" }, /* handlers for sub-ioctl */ { WE_LOG_DUMP_CMD, IW_PRIV_TYPE_INT | MAX_VAR_ARGS, - 0, + 0, "dump" }, { WE_P2P_NOA_CMD, IW_PRIV_TYPE_INT | MAX_VAR_ARGS, - 0, + 0, "SetP2pPs" }, /* handlers for sub ioctl */ { @@ -3347,12 +3372,12 @@ static const struct iw_priv_args hostapd_private_args[] = { /* handlers for main ioctl */ { QCSAP_IOCTL_MODIFY_ACL, IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | 8, - 0, + 0, "modify_acl" }, /* handlers for main ioctl */ { QCSAP_IOCTL_GET_CHANNEL_LIST, - 0, + 0, IW_PRIV_TYPE_BYTE | sizeof(tChannelListInfo), "getChannelList" }, @@ -3382,8 +3407,8 @@ static const struct iw_priv_args hostapd_private_args[] = { static const iw_handler hostapd_private[] = { [QCSAP_IOCTL_SETPARAM - SIOCIWFIRSTPRIV] = iw_softap_setparam, //set priv ioctl - [QCSAP_IOCTL_GETPARAM - SIOCIWFIRSTPRIV] = iw_softap_getparam, //get priv ioctl - [QCSAP_IOCTL_COMMIT - SIOCIWFIRSTPRIV] = iw_softap_commit, //get priv ioctl + [QCSAP_IOCTL_GETPARAM - SIOCIWFIRSTPRIV] = iw_softap_getparam, //get priv ioctl + [QCSAP_IOCTL_COMMIT - SIOCIWFIRSTPRIV] = iw_softap_commit, //get priv ioctl [QCSAP_IOCTL_SETMLME - SIOCIWFIRSTPRIV] = iw_softap_setmlme, [QCSAP_IOCTL_GET_STAWPAIE - SIOCIWFIRSTPRIV] = iw_get_genie, //get station genIE [QCSAP_IOCTL_SETWPAIE - SIOCIWFIRSTPRIV] = iw_softap_setwpsie, @@ -3394,7 +3419,7 @@ static const iw_handler hostapd_private[] = { [QCSAP_IOCTL_ASSOC_STA_MACADDR - SIOCIWFIRSTPRIV] = iw_softap_getassoc_stamacaddr, [QCSAP_IOCTL_DISASSOC_STA - SIOCIWFIRSTPRIV] = iw_softap_disassoc_sta, [QCSAP_IOCTL_AP_STATS - SIOCIWFIRSTPRIV] = iw_softap_ap_stats, - [QCSAP_IOCTL_PRIV_SET_THREE_INT_GET_NONE - SIOCIWFIRSTPRIV] = iw_set_three_ints_getnone, + [QCSAP_IOCTL_PRIV_SET_THREE_INT_GET_NONE - SIOCIWFIRSTPRIV] = iw_set_three_ints_getnone, [QCSAP_IOCTL_PRIV_SET_VAR_INT_GET_NONE - SIOCIWFIRSTPRIV] = iw_set_var_ints_getnone, [QCSAP_IOCTL_SET_CHANNEL_RANGE - SIOCIWFIRSTPRIV] = iw_softap_set_channel_range, [QCSAP_IOCTL_MODIFY_ACL - SIOCIWFIRSTPRIV] = iw_softap_modify_acl, @@ -3433,7 +3458,7 @@ struct net_device_ops net_ops_struct = { int hdd_set_hostapd(hdd_adapter_t *pAdapter) { return VOS_STATUS_SUCCESS; -} +} void hdd_set_ap_ops( struct net_device *pWlanHostapdDev ) { @@ -3452,20 +3477,20 @@ void hdd_set_ap_ops( struct net_device *pWlanHostapdDev ) } VOS_STATUS hdd_init_ap_mode( hdd_adapter_t *pAdapter ) -{ +{ hdd_hostapd_state_t * phostapdBuf; struct net_device *dev = pAdapter->dev; hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); VOS_STATUS status; ENTER(); - // Allocate the Wireless Extensions state structure + // Allocate the Wireless Extensions state structure phostapdBuf = WLAN_HDD_GET_HOSTAP_STATE_PTR( pAdapter ); - + sme_SetCurrDeviceMode(pHddCtx->hHal, pAdapter->device_mode); // Zero the memory. This zeros the profile structure. memset(phostapdBuf, 0,sizeof(hdd_hostapd_state_t)); - + // Set up the pointer to the Wireless Extensions state structure // NOP status = hdd_set_hostapd(pAdapter); @@ -3473,19 +3498,19 @@ VOS_STATUS hdd_init_ap_mode( hdd_adapter_t *pAdapter ) VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, ("ERROR: hdd_set_hostapd failed!!\n")); return status; } - + status = vos_event_init(&phostapdBuf->vosEvent); if (!VOS_IS_STATUS_SUCCESS(status)) { VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, ("ERROR: Hostapd HDD vos event init failed!!\n")); return status; } - + init_completion(&pAdapter->session_close_comp_var); init_completion(&pAdapter->session_open_comp_var); sema_init(&(WLAN_HDD_GET_AP_CTX_PTR(pAdapter))->semWpsPBCOverlapInd, 1); - + // Register as a wireless device dev->wireless_handlers = (struct iw_handler_def *)& hostapd_handler_def; @@ -3535,7 +3560,7 @@ hdd_adapter_t* hdd_wlan_create_ap_dev( hdd_context_t *pHddCtx, tSirMacAddr macAd //Initialize the adapter context to zeros. vos_mem_zero(pHostapdAdapter, sizeof( hdd_adapter_t )); pHostapdAdapter->dev = pWlanHostapdDev; - pHostapdAdapter->pHddCtx = pHddCtx; + pHostapdAdapter->pHddCtx = pHddCtx; pHostapdAdapter->magic = WLAN_HDD_ADAPTER_MAGIC; //Get the Global VOSS context. @@ -3550,13 +3575,13 @@ hdd_adapter_t* hdd_wlan_create_ap_dev( hdd_context_t *pHddCtx, tSirMacAddr macAd pWlanHostapdDev->watchdog_timeo = HDD_TX_TIMEOUT; pWlanHostapdDev->mtu = HDD_DEFAULT_MTU; - + vos_mem_copy(pWlanHostapdDev->dev_addr, (void *)macAddr,sizeof(tSirMacAddr)); vos_mem_copy(pHostapdAdapter->macAddressCurrent.bytes, (void *)macAddr, sizeof(tSirMacAddr)); pWlanHostapdDev->destructor = free_netdev; pWlanHostapdDev->ieee80211_ptr = &pHostapdAdapter->wdev ; - pHostapdAdapter->wdev.wiphy = pHddCtx->wiphy; + pHostapdAdapter->wdev.wiphy = pHddCtx->wiphy; pHostapdAdapter->wdev.netdev = pWlanHostapdDev; init_completion(&pHostapdAdapter->tx_action_cnf_event); init_completion(&pHostapdAdapter->cancel_rem_on_chan_var); @@ -3580,21 +3605,21 @@ VOS_STATUS hdd_register_hostapd( hdd_adapter_t *pAdapter, tANI_U8 rtnl_lock_held VOS_STATUS status = VOS_STATUS_SUCCESS; ENTER(); - + if( rtnl_lock_held ) { if (strnchr(dev->name, strlen(dev->name), '%')) { if( dev_alloc_name(dev, dev->name) < 0 ) { hddLog(VOS_TRACE_LEVEL_FATAL, "%s:Failed:dev_alloc_name", __func__); - return VOS_STATUS_E_FAILURE; + return VOS_STATUS_E_FAILURE; } } if (register_netdevice(dev)) { hddLog(VOS_TRACE_LEVEL_FATAL, "%s:Failed:register_netdevice", __func__); - return VOS_STATUS_E_FAILURE; + return VOS_STATUS_E_FAILURE; } } else @@ -3606,15 +3631,15 @@ VOS_STATUS hdd_register_hostapd( hdd_adapter_t *pAdapter, tANI_U8 rtnl_lock_held } } set_bit(NET_DEVICE_REGISTERED, &pAdapter->event_flags); - + EXIT(); return status; } - + VOS_STATUS hdd_unregister_hostapd(hdd_adapter_t *pAdapter) { ENTER(); - + hdd_softap_deinit_tx_rx(pAdapter); /* if we are being called during driver unload, then the dev has already diff --git a/CORE/HDD/src/wlan_hdd_ipa.c b/CORE/HDD/src/wlan_hdd_ipa.c new file mode 100644 index 000000000000..3a5aa5dce3d8 --- /dev/null +++ b/CORE/HDD/src/wlan_hdd_ipa.c @@ -0,0 +1,1559 @@ +/* + * Copyright (c) 2013, The Linux Foundation. All rights reserved. + * + * Previously licensed under the ISC license by Qualcomm Atheros, Inc. + * + * + * Permission to use, copy, modify, and/or distribute this software for + * any purpose with or without fee is hereby granted, provided that the + * above copyright notice and this permission notice appear in all + * copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL + * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE + * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +/* + * This file was originally distributed by Qualcomm Atheros, Inc. + * under proprietary terms before Copyright ownership was assigned + * to the Linux Foundation. + */ + +/*======================================================================== + +\file wlan_hdd_ipa.c + +\brief WLAN HDD and ipa interface implementation + +========================================================================*/ + +/*-------------------------------------------------------------------------- +Include Files +------------------------------------------------------------------------*/ +#ifdef IPA_OFFLOAD + +#include +#include + +#include +#include +#include +#include +#include +#include + +#define HDD_IPA_DESC_BUFFER_RATIO 4 +#define HDD_IPA_IPV4_NAME_EXT "_ipv4" +#define HDD_IPA_IPV6_NAME_EXT "_ipv6" + +#define HDD_IPA_RX_INACTIVITY_MSEC_DELAY 2000 + +const uint8_t ipa_set_hdr[] = { +/*IPA-WLAN HDR */ + 0x00, 0x00, /* Reserved */ +#define HDD_IPA_WLAN_HDR_DEV_INFO_OFFSET 2 +#define HDD_IPA_WLAN_HDR_DEV_TYPE_MASK 0x80 +#define HDD_IPA_WLAN_HDR_DEV_TYPE_AP 0x80 +#define HDD_IPA_WLAN_HDR_DEV_TYPE_STA 0x00 +#define HDD_IPA_WLAN_HDR_DEV_ID_MASK 0x7F +#define HDD_IPA_WLAN_HDR_STA_ID_OFFSET 3 + 0x00, 0x00, + /* dev_id and sta_id filled by wlan*/ + + /* 802.3 header - 14 bytes*/ +#define HDD_IPA_WLAN_HDR_DES_MAC_OFFSET 4 + 0x00, 0x03, 0x7f, 0xaa, 0xbb, 0xcc, + /* Des_MAC filled by IPA */ +#define HDD_IPA_WLAN_HDR_SRC_MAC_OFFSET 10 + 0x00, 0x03, 0x7f, 0xdd, 0xee, 0xff, + /* Src. MAC filled by IPA */ + 0x00, 0x00, + /* length can be zero */ + + 0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00, + /* LLC SNAP header 8 bytes */ +#define HDD_IPA_WLAN_HDR_IP_VER_OFFSET 24 + 0x08, 0x00 + /* type value(2 bytes) ,filled by wlan */ + /* 0x0800 - IPV4, 0x86dd - IPV6 */ +}; + + +#define HDD_IPA_WLAN_HDR_LEN sizeof(ipa_set_hdr) +#define HDD_IPA_WLAN_HDR_ONLY_LEN 4 +#define HDD_IPA_MAX_TX_PIPE_MAP 8 +#define HDD_IPA_WLAN_HDR_PARTIAL 1 + +#define HDD_IPA_LOG(LVL, fmt, args...) VOS_TRACE(VOS_MODULE_ID_HDD, LVL, \ + "%s:%d "fmt"\n", __func__, __LINE__, ## args) + +enum hdd_ipa_rm_state { + HDD_IPA_RM_RELEASED, + HDD_IPA_RM_GRANT_PENDING, + HDD_IPA_RM_GRANTED, + HDD_IPA_RM_RELEASE_PENDING, +}; + +enum hdd_ipa_pipe_index { + HDD_IPA_TX_VI_PIPE, + HDD_IPA_TX_VO_PIPE, + HDD_IPA_TX_BE_PIPE, + HDD_IPA_TX_BK_PIPE, + HDD_IPA_RX_PIPE, + HDD_IPA_MAX_PIPE +}; + +enum hdd_ipa_ip_ver { + HDD_IPA_IPV4 = 1, + HDD_IPA_IPV6 = 2 +}; + +uint8_t hdd_ipa_pipe_client[HDD_IPA_MAX_PIPE] = { + IPA_CLIENT_WLAN1_CONS, + IPA_CLIENT_WLAN2_CONS, + IPA_CLIENT_WLAN3_CONS, + IPA_CLIENT_WLAN4_CONS, + IPA_CLIENT_WLAN1_PROD +}; + +uint8_t hdd_ipa_pipe_client_AC[] = { + HDD_LINUX_AC_VI, + HDD_LINUX_AC_VO, + HDD_LINUX_AC_BE, + HDD_LINUX_AC_BK +}; + +static struct hdd_ipa_tx_pipe_map{ + uint8_t tos_value; + enum ipa_client_type client; + uint8_t ac; +} hdd_ipa_tx_pipe_map_info[HDD_IPA_MAX_TX_PIPE_MAP] = { + /* BK */ + {1, IPA_CLIENT_WLAN1_CONS, HDD_LINUX_AC_BK}, + {2, IPA_CLIENT_WLAN1_CONS, HDD_LINUX_AC_BK}, + /* BE */ + {0, IPA_CLIENT_WLAN2_CONS, HDD_LINUX_AC_BE}, + {3, IPA_CLIENT_WLAN2_CONS, HDD_LINUX_AC_BE}, + /* VI */ + {4, IPA_CLIENT_WLAN3_CONS, HDD_LINUX_AC_VI}, + {5, IPA_CLIENT_WLAN3_CONS, HDD_LINUX_AC_VI}, + /* VO */ + {6, IPA_CLIENT_WLAN4_CONS, HDD_LINUX_AC_VO}, + {7, IPA_CLIENT_WLAN4_CONS, HDD_LINUX_AC_VO}, +}; + +struct hdd_ipa_sys_pipe { + uint32_t conn_hdl; + uint8_t conn_hdl_valid; + struct ipa_sys_connect_params ipa_sys_params; +}; + +struct hdd_ipa_priv { + struct hdd_ipa_sys_pipe sys_pipe[HDD_IPA_MAX_PIPE]; + atomic_t rm_state; +#ifndef HDD_IPA_USE_IPA_RM_TIMER + struct timer_list rm_timer; + uint8_t rm_timer_on; +#endif + uint32_t pending_desc_cnt; + uint32_t hw_desc_cnt; + spinlock_t q_lock; + struct list_head free_desc_head; + struct list_head pend_desc_head; + + hdd_context_t *hdd_ctx; + + struct dentry *debugfs_dir; + struct { + uint64_t prefilter; + uint64_t rm_grant; + uint64_t rm_release; +#ifdef HDD_IPA_EXTRA_DP_COUNTERS + uint64_t rx_ipa_rm_qued; +#endif + uint64_t rx_ipa_sent_desc_cnt; + uint64_t rx_ipa_write_done; + uint64_t rx_ipa_excep; + + uint64_t rx_ipa_hw_maxed_out; + + uint64_t tx_ipa_recv; + uint64_t freeq_empty; + uint64_t freeq_cnt; + +#ifdef HDD_IPA_EXTRA_DP_COUNTERS + uint64_t rxt_drop; + uint64_t rxt_recv; + uint64_t rx_ipa_hw_max_qued; + uint64_t rxt_d_drop; + uint64_t rxt_dh_drop; + uint64_t rxt_0; + uint64_t rxt_1; + uint64_t rxt_2; + uint64_t rxt_3; + uint64_t rxt_4; + uint64_t rxt_5; + uint64_t rxt_6; + uint64_t freeq_use; + uint64_t freeq_reclaim; + uint64_t rx_ipa_dh_sent; + uint64_t rx_ipa_dh_reclaim; + uint64_t rx_ipa_dh_not_used; +#endif + }stats; +}; + +enum hdd_ipa_evt { + HDD_IPA_RXT_EVT, + HDD_IPA_WRITE_DONE_EVT, + HDD_IPA_RM_GRANT_EVT +}; + +struct hdd_ipa_rxt { + uint8_t sta_id; + adf_nbuf_t rx_buf_list; +}; + + + +static struct hdd_ipa_priv *ghdd_ipa; +static void hdd_ipa_process_evt(int evt, void *priv); + +bool hdd_ipa_is_enabled(hdd_context_t *hdd_ctx) +{ + return hdd_ctx->cfg_ini->IpaEnable; +} + +static inline void *hdd_ipa_kzalloc(uint32_t size) +{ + void *data = NULL; + + data = adf_os_mem_alloc(NULL, size); + return data; +} + +static inline struct ipa_tx_data_desc * hdd_ipa_get_desc_from_freeq(void) +{ + struct hdd_ipa_priv *hdd_ipa = ghdd_ipa; + struct ipa_tx_data_desc *desc = NULL; + + spin_lock_bh(&ghdd_ipa->q_lock); + if(!list_empty(&ghdd_ipa->free_desc_head)) { + desc = list_first_entry(&ghdd_ipa->free_desc_head, struct ipa_tx_data_desc, link); + list_del(&desc->link); + hdd_ipa->stats.freeq_cnt--; +#ifdef HDD_IPA_EXTRA_DP_COUNTERS + hdd_ipa->stats.freeq_use++; +#endif + } else { + hdd_ipa->stats.freeq_empty++; + } + spin_unlock_bh(&ghdd_ipa->q_lock); + return desc; +} + +static inline bool hdd_ipa_can_pre_filter(struct hdd_ipa_priv *hdd_ipa) +{ + hdd_context_t *hdd_ctx = hdd_ipa->hdd_ctx; + return hdd_ctx->cfg_ini->IpaPreFilterEnable; +} + +static inline bool hdd_ipa_is_ipv6_enabled(struct hdd_ipa_priv *hdd_ipa) +{ + hdd_context_t *hdd_ctx = hdd_ipa->hdd_ctx; + return hdd_ctx->cfg_ini->IpaIPv6Enable; +} + +static inline bool hdd_ipa_is_rm_enabled(struct hdd_ipa_priv *hdd_ipa) +{ + hdd_context_t *hdd_ctx = hdd_ipa->hdd_ctx; + return hdd_ctx->cfg_ini->IpaRMEnable; +} + +static int hdd_ipa_rm_request(struct hdd_ipa_priv *hdd_ipa) +{ + int ret = 0; + + if (!hdd_ipa_is_rm_enabled(hdd_ipa)) { + atomic_set(&hdd_ipa->rm_state, HDD_IPA_RM_GRANTED); + return 0; + } +#ifdef HDD_IPA_USE_IPA_RM_TIMER + ret = ipa_rm_inactivity_timer_request_resource( + IPA_RM_RESOURCE_WLAN_PROD); +#else + ret = ipa_rm_request_resource(IPA_RM_RESOURCE_WLAN_PROD); +#endif + if (ret == 0) { + atomic_set(&hdd_ipa->rm_state, HDD_IPA_RM_GRANTED); + hdd_ipa->stats.rm_grant++; + } + return ret; +} + +static int hdd_ipa_rm_release(struct hdd_ipa_priv *hdd_ipa) +{ + int ret = 0; + + if (!hdd_ipa_is_rm_enabled(hdd_ipa)) + return 0; + +#ifdef HDD_IPA_USE_IPA_RM_TIMER + ret = ipa_rm_inactivity_timer_release_resource( + IPA_RM_RESOURCE_WLAN_PROD); +#else + ret = ipa_rm_release_resource(IPA_RM_RESOURCE_WLAN_PROD); +#endif + if (ret == 0) { + atomic_set(&hdd_ipa->rm_state, HDD_IPA_RM_RELEASED); + hdd_ipa->stats.rm_release++; + } + return ret; +} + +static void hdd_ipa_rm_notify(void *user_data, enum ipa_rm_event event, + unsigned long data) +{ + struct hdd_ipa_priv *hdd_ipa = ghdd_ipa; + if (!hdd_ipa_is_rm_enabled(hdd_ipa)) + return; + + HDD_IPA_LOG(VOS_TRACE_LEVEL_INFO, "Evt: %d", event); + + if (event == IPA_RM_RESOURCE_GRANTED) { + atomic_set(&hdd_ipa->rm_state, HDD_IPA_RM_GRANTED); + hdd_ipa->stats.rm_grant++; + hdd_ipa_process_evt(HDD_IPA_RM_GRANT_EVT, NULL); + } else { + if (event == IPA_RM_RESOURCE_RELEASED) { + atomic_set(&hdd_ipa->rm_state, HDD_IPA_RM_RELEASED); + hdd_ipa->stats.rm_release++; + } + } +} + +static int hdd_ipa_setup_rm(struct hdd_ipa_priv *hdd_ipa) +{ + struct ipa_rm_create_params create_params = {0}; + int ret; + + if (!hdd_ipa_is_rm_enabled(hdd_ipa)) + return 0; + create_params.name = IPA_RM_RESOURCE_WLAN_PROD; + create_params.reg_params.user_data = hdd_ipa; + create_params.reg_params.notify_cb = hdd_ipa_rm_notify; + create_params.request_resource = NULL; + create_params.release_resource = NULL; + + ret = ipa_rm_create_resource(&create_params); + if (ret) { + HDD_IPA_LOG(VOS_TRACE_LEVEL_ERROR, "create resource fail"); + goto setup_rm_fail; + } + +#ifdef HDD_IPA_USE_IPA_RM_TIMER + ret = ipa_rm_inactivity_timer_init(IPA_RM_RESOURCE_WLAN_PROD, + HDD_IPA_RX_INACTIVITY_MSEC_DELAY); + if (ret) { + HDD_IPA_LOG(VOS_TRACE_LEVEL_ERROR, "timer fail"); + goto setup_rm_fail; + } +#endif + +setup_rm_fail: + return ret; +} + +static void hdd_ipa_destory_rm_resource(struct hdd_ipa_priv *hdd_ipa) +{ + int ret; + + if (!hdd_ipa_is_rm_enabled(hdd_ipa)) + return; + + ipa_rm_delete_dependency(IPA_RM_RESOURCE_WLAN_PROD, + IPA_RM_RESOURCE_A2_CONS); +#ifdef HDD_IPA_USE_IPA_RM_TIMER + ipa_rm_inactivity_timer_destroy(IPA_RM_RESOURCE_WLAN_PROD); +#endif + ret = ipa_rm_delete_resource(IPA_RM_RESOURCE_WLAN_PROD); + if (ret) + HDD_IPA_LOG(VOS_TRACE_LEVEL_INFO, "fail"); +} + +void hdd_ipa_rm_timer_handler(unsigned long ptr) +{ + struct hdd_ipa_priv *hdd_ipa = ghdd_ipa; + atomic_set(&hdd_ipa->rm_state, + HDD_IPA_RM_RELEASE_PENDING); + hdd_ipa_rm_release(hdd_ipa); +} + +void hdd_ipa_send_skb_to_network(adf_nbuf_t skb, hdd_adapter_t *adap_dev) +{ + if (!adap_dev || (adap_dev && + adap_dev->magic != WLAN_HDD_ADAPTER_MAGIC)) { + HDD_IPA_LOG(VOS_TRACE_LEVEL_ERROR, "Invalid sta_id"); + adf_nbuf_free(skb); + return; + } + skb->dev = adap_dev->dev; + skb->protocol = eth_type_trans(skb, skb->dev); + skb->ip_summed = CHECKSUM_NONE; + ++adap_dev->hdd_stats.hddTxRxStats.rxPackets; + ++adap_dev->stats.rx_packets; + adap_dev->stats.rx_bytes += skb->len; + if (netif_rx_ni(skb) == NET_RX_SUCCESS) + ++adap_dev->hdd_stats.hddTxRxStats.rxDelivered; + else + ++adap_dev->hdd_stats.hddTxRxStats.rxRefused; + adap_dev->dev->last_rx = jiffies; +} + +static void hdd_ipa_send_pkt_to_ipa(struct ipa_tx_data_desc *send_desc_head, + int send_desc_cnt) +{ + struct hdd_ipa_priv *hdd_ipa = ghdd_ipa; + struct ipa_tx_data_desc *send_desc; + uint32_t cur_send_cnt = 0; +#ifndef HDD_IPA_USE_IPA_RM_TIMER + if (hdd_ipa->rm_timer_on) { + del_timer(&hdd_ipa->rm_timer); + hdd_ipa->rm_timer_on = 0; + } +#endif + /* In RM GRANT CTX send_desc_head is null */ + if (!send_desc_head) { + send_desc_head = hdd_ipa_get_desc_from_freeq(); + if (!send_desc_head) + return; + + INIT_LIST_HEAD(&send_desc_head->link); + } + + spin_lock_bh(&hdd_ipa->q_lock); + if ((hdd_ipa->pending_desc_cnt + send_desc_cnt) + < hdd_ipa->hw_desc_cnt) { + + if (!list_empty(&hdd_ipa->pend_desc_head)) { + list_splice_tail_init(&send_desc_head->link, + &hdd_ipa->pend_desc_head); + while ((hdd_ipa->pending_desc_cnt < + hdd_ipa->hw_desc_cnt) && + !(list_empty( + &hdd_ipa->pend_desc_head))) { + send_desc = list_first_entry( + &ghdd_ipa->pend_desc_head, + struct ipa_tx_data_desc, link); + list_del(&send_desc->link); + list_add_tail(&send_desc->link, + &send_desc_head->link); + hdd_ipa->pending_desc_cnt++; + cur_send_cnt++; + } + } else { + hdd_ipa->pending_desc_cnt += send_desc_cnt; + cur_send_cnt = send_desc_cnt; + } + hdd_ipa->stats.rx_ipa_sent_desc_cnt += cur_send_cnt; + spin_unlock_bh(&hdd_ipa->q_lock); +#ifdef HDD_IPA_EXTRA_DP_COUNTERS + hdd_ipa->stats.rx_ipa_dh_sent++; //for desc head +#endif + ipa_tx_dp_mul(hdd_ipa_pipe_client[HDD_IPA_RX_PIPE], + send_desc_head); + } else { +#ifdef HDD_IPA_EXTRA_DP_COUNTERS + hdd_ipa->stats.rx_ipa_hw_max_qued += send_desc_cnt; +#endif + + hdd_ipa->stats.rx_ipa_hw_maxed_out++; + list_splice_tail_init(&send_desc_head->link, + &hdd_ipa->pend_desc_head); + list_add_tail(&send_desc_head->link, &hdd_ipa->free_desc_head); + hdd_ipa->stats.freeq_cnt++; +#ifdef HDD_IPA_EXTRA_DP_COUNTERS + hdd_ipa->stats.rx_ipa_dh_not_used++; + hdd_ipa->stats.freeq_reclaim++; +#endif + spin_unlock_bh(&hdd_ipa->q_lock); + } + +} + +static int hdd_ipa_is_ip_pkt(void *data, uint8_t ip_ver) +{ + struct ethhdr *eth = data; + struct llc_snap_hdr { + uint8_t dsap; + uint8_t ssap; + uint8_t resv[4]; + __be16 eth_type; + } __packed; + struct llc_snap_hdr *ls_hdr; + uint16_t eth_type; + int ret = 0; + + eth_type = be16_to_cpu(eth->h_proto); + if (eth_type < 0x600) { + /* Non Ethernet II framing format */ + ls_hdr = (struct llc_snap_hdr *)((uint8_t *)data + + sizeof(struct ethhdr)); + /* TODO Is this needed + if ((ls_hdr->dsap == 0xAA && ls_hdr->ssap == 0xAA) || + (ls_hdr->dsap == 0xAB && ls_hdr->ssap == 0xAB)) + */ + eth_type = be16_to_cpu(ls_hdr->eth_type); + } + + if (eth_type == 0x0800 && ip_ver == HDD_IPA_IPV4) + ret = 1; + else if (eth_type == 0x86dd && ip_ver == HDD_IPA_IPV6) + ret = 1; + + return ret; +} + + +static void hdd_ipa_process_evt(int evt, void *priv) +{ + struct hdd_ipa_priv *hdd_ipa = ghdd_ipa; + struct hdd_ipa_rxt *rxt; + struct ipa_tx_data_desc *send_desc_head = NULL, *send_desc, + *done_desc_head, *done_desc, *tmp; + hdd_adapter_t *adap_dev = NULL; + adf_nbuf_t buf, next_buf; + uint8_t dev_id, cur_cnt = 0, iftype; + + switch (evt) { + case HDD_IPA_RXT_EVT: + rxt = priv; + + adap_dev = hdd_ipa->hdd_ctx->sta_to_adapter[rxt->sta_id]; + if (!adap_dev || + (adap_dev && adap_dev->magic != WLAN_HDD_ADAPTER_MAGIC)) { + HDD_IPA_LOG(VOS_TRACE_LEVEL_ERROR, "Invalid sta_id"); + buf = rxt->rx_buf_list; + while (buf) { + next_buf = adf_nbuf_queue_next(buf); + adf_nbuf_free(buf); + /* here if ipa is stuck we can send + to network if required as fail safe + */ + buf = next_buf; + } + return; + } + dev_id = adap_dev->dev->ifindex; + iftype = adap_dev->wdev.iftype; + /* send_desc_head is a anchor node */ + send_desc_head = hdd_ipa_get_desc_from_freeq(); + if (!send_desc_head) { + HDD_IPA_LOG(VOS_TRACE_LEVEL_ERROR, "send_desc_head=Null. FreeQ Empty"); + buf = rxt->rx_buf_list; + while (buf) { + next_buf = adf_nbuf_queue_next(buf); + adf_nbuf_free(buf); + /* here if ipa is stuck we can send + to network if required as fail safe + */ + buf = next_buf; +#ifdef HDD_IPA_EXTRA_DP_COUNTERS + hdd_ipa->stats.rxt_recv++; + hdd_ipa->stats.rxt_drop++; +#endif + } +#ifdef HDD_IPA_EXTRA_DP_COUNTERS + hdd_ipa->stats.rxt_dh_drop++; +#endif + return; + } + + INIT_LIST_HEAD(&send_desc_head->link); + buf = rxt->rx_buf_list; + while (buf) { + next_buf = adf_nbuf_queue_next(buf); + if (hdd_ipa_can_pre_filter(hdd_ipa) && + (!hdd_ipa_is_ip_pkt(buf->data, HDD_IPA_IPV4) || + (!hdd_ipa_is_ipv6_enabled(hdd_ipa) && + hdd_ipa_is_ip_pkt(buf->data, HDD_IPA_IPV6)))) { + hdd_ipa->stats.prefilter++; + hdd_ipa_send_skb_to_network(buf, adap_dev); + buf = next_buf; + continue; + } + + skb_push(buf, HDD_IPA_WLAN_HDR_ONLY_LEN); + memset(buf->data, 0, HDD_IPA_WLAN_HDR_ONLY_LEN); + buf->data[HDD_IPA_WLAN_HDR_STA_ID_OFFSET] = rxt->sta_id; + buf->data[HDD_IPA_WLAN_HDR_DEV_INFO_OFFSET] |= + dev_id & HDD_IPA_WLAN_HDR_DEV_ID_MASK; + if (iftype == NL80211_IFTYPE_AP || + iftype == NL80211_IFTYPE_P2P_GO) { + buf->data[HDD_IPA_WLAN_HDR_DEV_INFO_OFFSET] |= + HDD_IPA_WLAN_HDR_DEV_TYPE_AP; + } else { + buf->data[HDD_IPA_WLAN_HDR_DEV_INFO_OFFSET] |= + HDD_IPA_WLAN_HDR_DEV_TYPE_STA; + } + + /* TODO Chk if needed + if (hdd_ipa_is_ip_pkt(buf->data, HDD_IPA_IPV6) { + buf->data[HDD_IPA_WLAN_HDR_IP_VER_OFFSET] + = 0x86; + buf->data[HDD_IPA_WLAN_HDR_IP_VER_OFFSET + 1] + = 0xdd; + } + skb_pull(buf, HDD_IPA_WLAN_HDR_LEN); + skb_push(buf, HDD_IPA_WLAN_HDR_ONLY_LEN);*/ + send_desc = hdd_ipa_get_desc_from_freeq(); + if (send_desc) { + send_desc->priv = buf; + send_desc->pyld_buffer = buf->data; + send_desc->pyld_len = buf->len; + list_add_tail(&send_desc->link, + &send_desc_head->link); + cur_cnt++; + } else { + adf_nbuf_free(buf); /*No desc available; drop*/ +#ifdef HDD_IPA_EXTRA_DP_COUNTERS + hdd_ipa->stats.rxt_drop++; + hdd_ipa->stats.rxt_d_drop++; +#endif + } +#ifdef HDD_IPA_EXTRA_DP_COUNTERS + hdd_ipa->stats.rxt_recv++; +#endif + buf = next_buf; + } + +#ifdef HDD_IPA_EXTRA_DP_COUNTERS + if (cur_cnt == 0) + hdd_ipa->stats.rxt_0++; + else if (cur_cnt == 1) + hdd_ipa->stats.rxt_1++; + else if (cur_cnt == 2) + hdd_ipa->stats.rxt_2++; + else if (cur_cnt == 3) + hdd_ipa->stats.rxt_3++; + else if (cur_cnt == 4) + hdd_ipa->stats.rxt_4++; + else if (cur_cnt == 5) + hdd_ipa->stats.rxt_5++; + else if (cur_cnt > 5) + hdd_ipa->stats.rxt_6++; +#endif + + if(cur_cnt == 0){ + spin_lock_bh(&hdd_ipa->q_lock); + list_add_tail(&send_desc_head->link, &hdd_ipa->free_desc_head); + hdd_ipa->stats.freeq_cnt++; +#ifdef HDD_IPA_EXTRA_DP_COUNTERS + hdd_ipa->stats.rx_ipa_dh_not_used++; + hdd_ipa->stats.freeq_reclaim++; +#endif + spin_unlock_bh(&hdd_ipa->q_lock); + goto rxt_end; + } + + if (atomic_read(&hdd_ipa->rm_state) == HDD_IPA_RM_GRANTED) { + hdd_ipa_send_pkt_to_ipa(send_desc_head, cur_cnt); + } else { + if (atomic_read(&hdd_ipa->rm_state) + != HDD_IPA_RM_GRANT_PENDING) { + atomic_set(&hdd_ipa->rm_state, + HDD_IPA_RM_GRANT_PENDING); + hdd_ipa_rm_request(hdd_ipa); + } + //hdd_ipa_rm_request can immediately grant so check again. + if (atomic_read(&hdd_ipa->rm_state) + == HDD_IPA_RM_GRANT_PENDING) { + spin_lock_bh(&hdd_ipa->q_lock); + list_splice_tail_init(&send_desc_head->link, + &hdd_ipa->pend_desc_head); + /* return anchor node */ + list_add_tail(&send_desc_head->link, + &hdd_ipa->free_desc_head); + spin_unlock_bh(&hdd_ipa->q_lock); +#ifdef HDD_IPA_EXTRA_DP_COUNTERS + hdd_ipa->stats.rx_ipa_rm_qued += cur_cnt; +#endif + } else { + hdd_ipa_send_pkt_to_ipa(send_desc_head, + cur_cnt); + } + } +rxt_end: + break; + + case HDD_IPA_RM_GRANT_EVT: + hdd_ipa_send_pkt_to_ipa(NULL, 0); + break; + + case HDD_IPA_WRITE_DONE_EVT: + done_desc_head = priv; + spin_lock_bh(&hdd_ipa->q_lock); + list_for_each_entry_safe(done_desc, tmp, + &done_desc_head->link, link) { + list_del(&done_desc->link); + buf = done_desc->priv; + adf_nbuf_free(buf); + done_desc->priv = NULL; + done_desc->pyld_buffer = NULL; + done_desc->pyld_len = 0; + list_add_tail(&done_desc->link, &hdd_ipa->free_desc_head); + hdd_ipa->stats.freeq_cnt++; +#ifdef HDD_IPA_EXTRA_DP_COUNTERS + hdd_ipa->stats.freeq_reclaim++; +#endif + hdd_ipa->pending_desc_cnt--; + hdd_ipa->stats.rx_ipa_write_done++; + } + /* add anchor node also back to free list */ + list_add_tail(&done_desc_head->link, &hdd_ipa->free_desc_head); + hdd_ipa->stats.freeq_cnt++; +#ifdef HDD_IPA_EXTRA_DP_COUNTERS + hdd_ipa->stats.rx_ipa_dh_reclaim++; + hdd_ipa->stats.freeq_reclaim++; +#endif + spin_unlock_bh(&hdd_ipa->q_lock); + + if (list_empty(&hdd_ipa->pend_desc_head)) { + if (atomic_read(&hdd_ipa->rm_state) + != HDD_IPA_RM_RELEASE_PENDING) { +#ifndef HDD_IPA_USE_IPA_RM_TIMER + del_timer(&hdd_ipa->rm_timer); + mod_timer(&hdd_ipa->rm_timer, + jiffies + + msecs_to_jiffies( + HDD_IPA_RX_INACTIVITY_MSEC_DELAY)); + hdd_ipa->rm_timer_on = 1; +#else + atomic_set(&hdd_ipa->rm_state, + HDD_IPA_RM_RELEASE_PENDING); + hdd_ipa_rm_release(hdd_ipa); +#endif + } + } else { + /* no rx pkt come in so flash the last few */ + hdd_ipa_send_pkt_to_ipa(NULL, 0); + } + break; + } +} + +static void hdd_ipa_w2i_write_done_handler( + struct ipa_tx_data_desc *done_desc_head) +{ + hdd_ipa_process_evt(HDD_IPA_WRITE_DONE_EVT, done_desc_head); +} + +VOS_STATUS hdd_ipa_process_rxt(v_VOID_t *vosContext, adf_nbuf_t rx_buf_list, + v_U8_t sta_id) +{ + struct hdd_ipa_priv *hdd_ipa = ghdd_ipa; + struct hdd_ipa_rxt rxt; + + if (!hdd_ipa_is_enabled(hdd_ipa->hdd_ctx)) + return VOS_STATUS_E_INVAL; + + rxt.sta_id = sta_id; + rxt.rx_buf_list = rx_buf_list; + hdd_ipa_process_evt(HDD_IPA_RXT_EVT, &rxt); + + return VOS_STATUS_SUCCESS; +} + + + +void hdd_ipa_w2i_cb(void *priv, enum ipa_dp_evt_type evt, unsigned long data) +{ + struct hdd_ipa_priv *hdd_ipa = ghdd_ipa; + uint8_t client; + struct ipa_tx_data_desc *done_desc_head; + adf_nbuf_t skb; + uint8_t sta_id, dev_id; + hdd_adapter_t *adap_dev; + + client = *((uint8_t *)priv); + if (client != hdd_ipa_pipe_client[HDD_IPA_RX_PIPE]) { + HDD_IPA_LOG(VOS_TRACE_LEVEL_ERROR, + "w2i cb wrong pipe: %d %x %x", + client, priv, + &hdd_ipa_pipe_client[HDD_IPA_RX_PIPE]); + return; + } + + switch (evt) { + case IPA_RECEIVE: + skb = (adf_nbuf_t) data; + sta_id = skb->data[HDD_IPA_WLAN_HDR_STA_ID_OFFSET]; + dev_id = skb->data[HDD_IPA_WLAN_HDR_DEV_INFO_OFFSET]; + adap_dev = hdd_ipa->hdd_ctx->sta_to_adapter[sta_id]; + skb_pull(skb, HDD_IPA_WLAN_HDR_ONLY_LEN); + hdd_ipa->stats.rx_ipa_excep++; + hdd_ipa_send_skb_to_network(skb, adap_dev); + break; + case IPA_WRITE_DONE: + done_desc_head = (struct ipa_tx_data_desc *)data; + hdd_ipa_w2i_write_done_handler(done_desc_head); + break; + } +} + +void hdd_ipa_nbuf_cb(adf_nbuf_t skb) +{ + ipa_free_skb(skb); +} + +void hdd_ipa_tx_process(adf_nbuf_t skb, uint8_t ac) +{ + struct hdd_ipa_priv *hdd_ipa = ghdd_ipa; + uint8_t sta_id; + hdd_adapter_t *adap_dev; + + skb->queue_mapping = ac; + sta_id = skb->data[HDD_IPA_WLAN_HDR_STA_ID_OFFSET]; + adap_dev = hdd_ipa->hdd_ctx->sta_to_adapter[sta_id]; + if (!adap_dev + || (adap_dev && adap_dev->magic != WLAN_HDD_ADAPTER_MAGIC)) { + HDD_IPA_LOG(VOS_TRACE_LEVEL_ERROR, "Invalid sta_id %d", sta_id); + ipa_free_skb(skb); + return; + } + skb->dev = adap_dev->dev; + NBUF_OWNER_ID(skb) = IPA_NBUF_OWNER_ID; + NBUF_CALLBACK_FN(skb) = hdd_ipa_nbuf_cb; + skb_pull(skb, HDD_IPA_WLAN_HDR_ONLY_LEN); + (adap_dev->dev->netdev_ops->ndo_start_xmit)(skb, adap_dev->dev); +} + +void hdd_ipa_i2w_cb(void *priv, enum ipa_dp_evt_type evt, unsigned long data) +{ + struct hdd_ipa_priv *hdd_ipa = ghdd_ipa; + adf_nbuf_t skb; + uint8_t client; + uint8_t i, ac = HDD_LINUX_AC_BE; + + if (evt == IPA_RECEIVE) { + client = *((uint8_t *)priv); + skb = (adf_nbuf_t) data; + for (i = 0; i < HDD_IPA_MAX_TX_PIPE_MAP; i++) { + if (client == hdd_ipa_tx_pipe_map_info[i].client) { + ac = hdd_ipa_tx_pipe_map_info[i].ac; + break; + } + } + hdd_ipa->stats.tx_ipa_recv++; + hdd_ipa_tx_process(skb, ac); + } else + HDD_IPA_LOG(VOS_TRACE_LEVEL_ERROR, "i2w cb wrong evt: %d", evt); +} + +static int hdd_ipa_setup_sys_pipe(struct hdd_ipa_priv *hdd_ipa) +{ + int i, ret = 0; + struct ipa_sys_connect_params *ipa; + + /*setup TX pipes */ + for (i = 0; i < HDD_IPA_RX_PIPE; i++) { + ipa = &hdd_ipa->sys_pipe[i].ipa_sys_params; + + ipa->client = hdd_ipa_pipe_client[i]; + ipa->desc_fifo_sz = hdd_ipa->hdd_ctx->cfg_ini->IpaDescSize; + ipa->priv = &hdd_ipa_pipe_client[i]; + ipa->notify = hdd_ipa_i2w_cb; + + ipa->ipa_ep_cfg.hdr.hdr_len = HDD_IPA_WLAN_HDR_LEN; + ipa->ipa_ep_cfg.mode.mode = IPA_BASIC; + + ret = ipa_setup_sys_pipe(ipa, &(hdd_ipa->sys_pipe[i].conn_hdl)); + if (ret) { + HDD_IPA_LOG(VOS_TRACE_LEVEL_ERROR, "Fail: %d", ret); + goto setup_sys_pipe_fail; + } + hdd_ipa->sys_pipe[i].conn_hdl_valid = 1; + } + + ipa = &hdd_ipa->sys_pipe[HDD_IPA_RX_PIPE].ipa_sys_params; + + ipa->client = hdd_ipa_pipe_client[HDD_IPA_RX_PIPE]; + ipa->desc_fifo_sz = hdd_ipa->hdd_ctx->cfg_ini->IpaDescSize; + ipa->priv = &hdd_ipa_pipe_client[HDD_IPA_RX_PIPE]; + ipa->notify = hdd_ipa_w2i_cb; + + ipa->ipa_ep_cfg.nat.nat_en = IPA_BYPASS_NAT; + ipa->ipa_ep_cfg.hdr.hdr_len = HDD_IPA_WLAN_HDR_LEN; + ipa->ipa_ep_cfg.hdr.hdr_ofst_metadata_valid = 1; + ipa->ipa_ep_cfg.mode.mode = IPA_BASIC; + + ret = ipa_setup_sys_pipe(ipa, &(hdd_ipa->sys_pipe[i].conn_hdl)); + if (ret) { + HDD_IPA_LOG(VOS_TRACE_LEVEL_ERROR, "Fail: %d", ret); + goto setup_sys_pipe_fail; + } + hdd_ipa->sys_pipe[HDD_IPA_RX_PIPE].conn_hdl_valid = 1; + +setup_sys_pipe_fail: + return ret; +} + +/* Disconnect all the Sys pipes */ +void hdd_ipa_teardown_sys_pipe(struct hdd_ipa_priv *hdd_ipa) +{ + int ret = 0, i; + for (i = 0; i < HDD_IPA_MAX_PIPE; i++) { + if (hdd_ipa->sys_pipe[i].conn_hdl_valid) { + ret = ipa_teardown_sys_pipe( + hdd_ipa->sys_pipe[i].conn_hdl); + if (ret) + HDD_IPA_LOG(VOS_TRACE_LEVEL_ERROR, "fail: %d", + ret); + + hdd_ipa->sys_pipe[i].conn_hdl_valid = 0; + } + } +} + +int hdd_ipa_register_interface(struct hdd_ipa_priv *hdd_ipa, uint8_t iftype, + uint8_t sta_id, const char *ifname) +{ +#define HDD_IPA_TOS_MASK 0xE0 + struct ipa_tx_intf tx_intf; + struct ipa_rx_intf rx_intf; + struct ipa_ioc_tx_intf_prop *tx_prop = NULL; + struct ipa_ioc_rx_intf_prop *rx_prop = NULL; + + char ipv4_hdr_name[IPA_RESOURCE_NAME_MAX]; + char ipv6_hdr_name[IPA_RESOURCE_NAME_MAX]; + + int i, j, ip_max = HDD_IPA_IPV4; + int ret = 0; + + if (hdd_ipa_is_ipv6_enabled(hdd_ipa)) + ip_max = HDD_IPA_IPV6; + + /* Allocate TX properties for TOS categories, 1 each for IPv4 & IPv6 */ + tx_prop = hdd_ipa_kzalloc(sizeof(struct ipa_ioc_tx_intf_prop) * + HDD_IPA_MAX_TX_PIPE_MAP * ip_max); + if (!tx_prop) { + HDD_IPA_LOG(VOS_TRACE_LEVEL_ERROR, "ENOMEM"); + goto register_interface_fail; + } + + /* Allocate RX properties, 1 each for IPv4 & IPv6 */ + rx_prop = hdd_ipa_kzalloc(sizeof(struct ipa_ioc_rx_intf_prop) + * ip_max); + if (!rx_prop) { + HDD_IPA_LOG(VOS_TRACE_LEVEL_ERROR, "ENOMEM"); + goto register_interface_fail; + } + vos_mem_zero(&tx_intf, sizeof(tx_intf)); + vos_mem_zero(&rx_intf, sizeof(rx_intf)); + + snprintf(ipv4_hdr_name, IPA_RESOURCE_NAME_MAX, "%s%s", + ifname, HDD_IPA_IPV4_NAME_EXT); + rx_prop[IPA_IP_v4].ip = IPA_IP_v4; + if (hdd_ipa_is_ipv6_enabled(hdd_ipa)) { + snprintf(ipv6_hdr_name, IPA_RESOURCE_NAME_MAX, "%s%s", + ifname, HDD_IPA_IPV6_NAME_EXT); + rx_prop[IPA_IP_v6].ip = IPA_IP_v6; + } + /* + TOS value: 1, 2 - > Maps to BK pipe [WLAN1_CONS] + TOS value: 0, 3 - > Maps to BE pipe [WLAN2_CONS] + TOS value: 4, 5 - > Maps to VI pipe [WLAN3_CONS] + TOS Value: 6, 7 - > Maps to VO pipe [WLAN4_CONS] + */ + + /* + IP-TOS - 8bits + : DSCP(6-bits) ECN(2-bits) + : DSCP - P2 P1 P0 X X X + where (P2 P1 P0) form 802.1D + So shifting tos_value by 5 bits before passing to IPA. Also IPA + required mask to be set for 3 MSB bits. + */ + + for (i = 0; i < HDD_IPA_MAX_TX_PIPE_MAP; i++) { + tx_prop[i].ip = IPA_IP_v4; + tx_prop[i].attrib.attrib_mask = IPA_FLT_TOS_MASKED; + tx_prop[i].attrib.tos_value = + hdd_ipa_tx_pipe_map_info[i].tos_value << 5; + tx_prop[i].attrib.tos_mask = HDD_IPA_TOS_MASK; + tx_prop[i].dst_pipe = hdd_ipa_tx_pipe_map_info[i].client; + strlcpy(tx_prop[i].hdr_name, ipv4_hdr_name, + IPA_RESOURCE_NAME_MAX); + tx_intf.num_props++; + if (hdd_ipa_is_ipv6_enabled(hdd_ipa)) { + j = i + HDD_IPA_MAX_TX_PIPE_MAP; + + tx_prop[j].ip = IPA_IP_v6; + tx_prop[j].attrib.attrib_mask = IPA_FLT_TOS_MASKED; + tx_prop[j].attrib.tos_value = + hdd_ipa_tx_pipe_map_info[i].tos_value << 5; + tx_prop[j].attrib.tos_mask = HDD_IPA_TOS_MASK; + tx_prop[j].dst_pipe = + hdd_ipa_tx_pipe_map_info[i].client; + strlcpy(tx_prop[j].hdr_name, ipv6_hdr_name, + IPA_RESOURCE_NAME_MAX); + tx_intf.num_props++; + } + } + + for (i = 0; i < ip_max; i++) { + rx_prop[i].attrib.attrib_mask = IPA_FLT_META_DATA; + if (iftype == NL80211_IFTYPE_AP || + iftype == NL80211_IFTYPE_P2P_GO) { + rx_prop[i].attrib.meta_data = + HDD_IPA_WLAN_HDR_DEV_TYPE_AP + << ((HDD_IPA_WLAN_HDR_DEV_INFO_OFFSET-1) * 8); + } else { + rx_prop[i].attrib.meta_data = + HDD_IPA_WLAN_HDR_DEV_TYPE_STA + << ((HDD_IPA_WLAN_HDR_DEV_INFO_OFFSET-1) * 8); + } + rx_prop[i].attrib.meta_data_mask = + HDD_IPA_WLAN_HDR_DEV_TYPE_MASK + << ((HDD_IPA_WLAN_HDR_DEV_INFO_OFFSET-1) * 8); + rx_prop[i].src_pipe = IPA_CLIENT_WLAN1_PROD; + + rx_intf.num_props++; + } + + tx_intf.prop = tx_prop; + rx_intf.prop = rx_prop; + + /* Call the ipa api to register interface */ + ret = ipa_register_intf(ifname, &tx_intf, &rx_intf); + +register_interface_fail: + adf_os_mem_free(tx_prop); + adf_os_mem_free(rx_prop); + return ret; +} + +static int hdd_ipa_add_header_info(uint8_t sta_id, uint8_t *mac_addr) +{ + struct hdd_ipa_priv *hdd_ipa = ghdd_ipa; + uint8_t dev_id, wlan_iftype; + char *ifname; + struct ipa_ioc_add_hdr *ipahdr = NULL; + int ret = -EINVAL; + hdd_adapter_t *adap_dev; + + adap_dev = hdd_ipa->hdd_ctx->sta_to_adapter[sta_id]; + if (!adap_dev) { + HDD_IPA_LOG(VOS_TRACE_LEVEL_ERROR, "adap_dev NULL"); + goto add_header_info_ctx_fail; + } + + dev_id = adap_dev->dev->ifindex; + wlan_iftype = adap_dev->wdev.iftype; + ifname = adap_dev->dev->name; + + HDD_IPA_LOG(VOS_TRACE_LEVEL_INFO, "Mode: %d Add Partial hdr: %s, %p\n", + wlan_iftype, ifname, mac_addr); + if (ifname == NULL) { + HDD_IPA_LOG(VOS_TRACE_LEVEL_INFO, "ifname NULL"); + goto add_header_info_ctx_fail; + } + + /* dynamically allocate the memory to add the hdrs */ + ipahdr = hdd_ipa_kzalloc(sizeof(struct ipa_ioc_add_hdr) + + sizeof(struct ipa_hdr_add)); + if (!ipahdr) { + HDD_IPA_LOG(VOS_TRACE_LEVEL_ERROR, "%s: ENOMEM", ifname); + return -ENOMEM; + } + + ipahdr->commit = 0; + ipahdr->num_hdrs = 1; + /* Set the Source MAC */ + memcpy(ipahdr->hdr[0].hdr, ipa_set_hdr, HDD_IPA_WLAN_HDR_LEN); + memcpy(&ipahdr->hdr[0].hdr[HDD_IPA_WLAN_HDR_SRC_MAC_OFFSET], mac_addr, + ETH_ALEN); + + /* Check the interface is AP OR STA mode, and set the station ID */ + ipahdr->hdr[0].hdr[HDD_IPA_WLAN_HDR_DEV_INFO_OFFSET] |= + dev_id & HDD_IPA_WLAN_HDR_DEV_ID_MASK; + ipahdr->hdr[0].hdr[HDD_IPA_WLAN_HDR_STA_ID_OFFSET] = sta_id; + if (wlan_iftype == NL80211_IFTYPE_AP || + wlan_iftype == NL80211_IFTYPE_P2P_GO) { + ipahdr->hdr[0].hdr[HDD_IPA_WLAN_HDR_DEV_INFO_OFFSET] |= + HDD_IPA_WLAN_HDR_DEV_TYPE_AP; + } else { + ipahdr->hdr[0].hdr[HDD_IPA_WLAN_HDR_DEV_INFO_OFFSET] |= + HDD_IPA_WLAN_HDR_DEV_TYPE_STA; + } + + snprintf(ipahdr->hdr[0].name, IPA_RESOURCE_NAME_MAX, "%s%s", + ifname, HDD_IPA_IPV4_NAME_EXT); + ipahdr->hdr[0].hdr_len = HDD_IPA_WLAN_HDR_LEN; + ipahdr->hdr[0].is_partial = HDD_IPA_WLAN_HDR_PARTIAL; + ipahdr->hdr[0].hdr_hdl = 0; + + ret = ipa_add_hdr(ipahdr); + + if (ret) { + HDD_IPA_LOG(VOS_TRACE_LEVEL_ERROR, "%s IPv4 fail: %d", ifname + , ret); + goto add_header_info_fail; + } + + HDD_IPA_LOG(VOS_TRACE_LEVEL_INFO, "%s: IPv4 hdr_hdl: %x", + ipahdr->hdr[0].name, ipahdr->hdr[0].hdr_hdl); + if (hdd_ipa_is_ipv6_enabled(hdd_ipa)) { + snprintf(ipahdr->hdr[0].name, IPA_RESOURCE_NAME_MAX, "%s%s", + ifname, HDD_IPA_IPV6_NAME_EXT); + /* Set the type to IPV6 in the header*/ + ipahdr->hdr[0].hdr[HDD_IPA_WLAN_HDR_IP_VER_OFFSET] = 0x86; + ipahdr->hdr[0].hdr[HDD_IPA_WLAN_HDR_IP_VER_OFFSET + 1] = 0xdd; + + ret = ipa_add_hdr(ipahdr); + if (ret) { + HDD_IPA_LOG(VOS_TRACE_LEVEL_INFO, + "%s: IPv6 hdr fail: %d", ifname, ret); + goto add_header_info_fail; + } + + HDD_IPA_LOG(VOS_TRACE_LEVEL_INFO, "%s: IPv6 hdr_hdl: %x", + ipahdr->hdr[0].name, ipahdr->hdr[0].hdr_hdl); + } + /* Configure the TX and RX pipes filter rules */ + ret = hdd_ipa_register_interface(hdd_ipa, wlan_iftype, sta_id, ifname); + +add_header_info_fail: + adf_os_mem_free(ipahdr); +add_header_info_ctx_fail: + return ret; +} + +void hdd_remove_ipa_header(char *name) +{ + struct ipa_ioc_get_hdr hdrlookup; + int ret = 0, len; + struct ipa_ioc_del_hdr *ipahdr; + + vos_mem_zero(&hdrlookup, sizeof(hdrlookup)); + strlcpy(hdrlookup.name, name, sizeof(hdrlookup.name)); + ret = ipa_get_hdr(&hdrlookup); + if (ret) { + HDD_IPA_LOG(VOS_TRACE_LEVEL_INFO, "Hdr deleted already %s, %d", + name, ret); + return; + } + + + HDD_IPA_LOG(VOS_TRACE_LEVEL_INFO, "hdl: %x", hdrlookup.hdl); + len = sizeof(struct ipa_ioc_del_hdr) + sizeof(struct ipa_hdr_del)*1; + ipahdr = (struct ipa_ioc_del_hdr *) hdd_ipa_kzalloc(len); + if (ipahdr == NULL) { + HDD_IPA_LOG(VOS_TRACE_LEVEL_INFO, "ENOMEM"); + return; + } + ipahdr->num_hdls = 1; + ipahdr->commit = 0; + ipahdr->hdl[0].hdl = hdrlookup.hdl; + ipahdr->hdl[0].status = -1; + ret = ipa_del_hdr(ipahdr); + if (ret != 0) + HDD_IPA_LOG(VOS_TRACE_LEVEL_INFO, "Fail: %d", ret); + + adf_os_mem_free(ipahdr); +} + +void hdd_ipa_clean_hdr(hdd_adapter_t *adap_dev, uint8_t sta_id) +{ + struct hdd_ipa_priv *hdd_ipa = ghdd_ipa; + int ret; + char name_ipa[IPA_RESOURCE_NAME_MAX]; + + /* Remove the headers */ + snprintf(name_ipa, IPA_RESOURCE_NAME_MAX, "%s%s", + adap_dev->dev->name, HDD_IPA_IPV4_NAME_EXT); + hdd_remove_ipa_header(name_ipa); + + if (hdd_ipa_is_ipv6_enabled(hdd_ipa)) { + snprintf(name_ipa, IPA_RESOURCE_NAME_MAX, "%s%s", + adap_dev->dev->name, HDD_IPA_IPV6_NAME_EXT); + hdd_remove_ipa_header(name_ipa); + } + /* unregister the interface with IPA */ + ret = ipa_deregister_intf(adap_dev->dev->name); + if (ret) + HDD_IPA_LOG(VOS_TRACE_LEVEL_INFO, + "%s: ipa_deregister_intf fail: %d", adap_dev->dev->name, ret); +} + + +static void hdd_ipa_msg_free_fn(void *buff, uint32_t len, uint32_t type) +{ + HDD_IPA_LOG(VOS_TRACE_LEVEL_INFO, "msg type:%d, len:%d\n", type, len); + adf_os_mem_free(buff); +} + +int hdd_ipa_wlan_evt(void *Adapter, uint8_t sta_id, + enum ipa_wlan_event type, uint8_t *mac_addr) +{ + hdd_adapter_t *adap_dev = Adapter; + struct ipa_msg_meta meta; + struct ipa_wlan_msg *msg; + struct ipa_wlan_msg_ex *msg_ex = NULL; + int ret; + const char *hdd_ipa_event_name[IPA_EVENT_MAX] = { + __stringify(WLAN_CLIENT_CONNECT), + __stringify(WLAN_CLIENT_DISCONNECT), + __stringify(WLAN_CLIENT_POWER_SAVE_MODE), + __stringify(WLAN_CLIENT_NORMAL_MODE), + __stringify(SW_ROUTING_ENABLE), + __stringify(SW_ROUTING_DISABLE), + __stringify(WLAN_AP_CONNECT), + __stringify(WLAN_AP_DISCONNECT), + __stringify(WLAN_STA_CONNECT), + __stringify(WLAN_STA_DISCONNECT), + __stringify(WLAN_CLIENT_CONNECT_EX), + }; + + + HDD_IPA_LOG(VOS_TRACE_LEVEL_INFO, "%s: %s evt, MAC: %pM sta_id: %d", + adap_dev->dev->name, hdd_ipa_event_name[type], + mac_addr, sta_id); + if (type >= IPA_EVENT_MAX) + return -EINVAL; + + if (WARN_ON(is_zero_ether_addr(mac_addr))) + return -EINVAL; + + switch (type) { + case WLAN_STA_CONNECT: + case WLAN_AP_CONNECT: + hdd_ipa_add_header_info(sta_id, mac_addr); + break; + + case WLAN_STA_DISCONNECT: + case WLAN_AP_DISCONNECT: + hdd_ipa_clean_hdr(adap_dev, sta_id); + break; + + case WLAN_CLIENT_CONNECT_EX: + meta.msg_type = type; + meta.msg_len = (sizeof(struct ipa_wlan_msg_ex) + + sizeof(struct ipa_wlan_hdr_attrib_val) * 2); + msg_ex = hdd_ipa_kzalloc (meta.msg_len); + if (msg_ex == NULL) { + HDD_IPA_LOG(VOS_TRACE_LEVEL_INFO, "ENOMEM"); + return -ENOMEM; + } + strlcpy(msg_ex->name, adap_dev->dev->name, IPA_RESOURCE_NAME_MAX); + msg_ex->num_of_attribs = 2; + msg_ex->attribs[0].attrib_type = WLAN_HDR_ATTRIB_MAC_ADDR; + msg_ex->attribs[0].offset = HDD_IPA_WLAN_HDR_DES_MAC_OFFSET; + memcpy(msg_ex->attribs[0].u.mac_addr, mac_addr, + IPA_MAC_ADDR_SIZE); + + msg_ex->attribs[1].attrib_type = WLAN_HDR_ATTRIB_STA_ID; + msg_ex->attribs[1].offset = HDD_IPA_WLAN_HDR_STA_ID_OFFSET; + msg_ex->attribs[1].u.sta_id = sta_id; + ret = ipa_send_msg(&meta, msg_ex, hdd_ipa_msg_free_fn); + + if (ret) { + HDD_IPA_LOG(VOS_TRACE_LEVEL_INFO, "%s: Evt: %d : %d", + msg_ex->name, meta.msg_type, ret); + adf_os_mem_free(msg_ex); + return ret; + } + return 0; + case WLAN_CLIENT_DISCONNECT: + break; + + default: + return 0; + } + + meta.msg_len = sizeof(struct ipa_wlan_msg); + msg = hdd_ipa_kzalloc(meta.msg_len); + if (msg == NULL) { + HDD_IPA_LOG(VOS_TRACE_LEVEL_INFO, "ENOMEM"); + return -ENOMEM; + } + + meta.msg_type = type; + strlcpy(msg->name, adap_dev->dev->name, IPA_RESOURCE_NAME_MAX); + memcpy(msg->mac_addr, mac_addr, ETH_ALEN); + HDD_IPA_LOG(VOS_TRACE_LEVEL_INFO, "%s: Evt: %d", + msg->name, meta.msg_type); + ret = ipa_send_msg(&meta, msg, hdd_ipa_msg_free_fn); + + if (ret) { + HDD_IPA_LOG(VOS_TRACE_LEVEL_INFO, "%s: Evt: %d fail:%d", + msg->name, meta.msg_type, ret); + adf_os_mem_free(msg); + return ret; + } + + return ret; +} + + +static int hdd_ipa_rx_pipe_desc_alloc(void) +{ + struct hdd_ipa_priv *hdd_ipa = ghdd_ipa; + uint32_t i, max_desc_cnt; + int ret =0; + struct ipa_tx_data_desc *tmp_desc; + + hdd_ipa->hw_desc_cnt = IPA_NUM_OF_FIFO_DESC( + hdd_ipa->hdd_ctx->cfg_ini->IpaDescSize); + max_desc_cnt = hdd_ipa->hw_desc_cnt * HDD_IPA_DESC_BUFFER_RATIO; + + spin_lock_init(&hdd_ipa->q_lock); + spin_lock_bh(&hdd_ipa->q_lock); + INIT_LIST_HEAD(&hdd_ipa->free_desc_head); + INIT_LIST_HEAD(&hdd_ipa->pend_desc_head); + hdd_ipa->stats.freeq_cnt = max_desc_cnt; + for (i = 0; i < max_desc_cnt; i++) { + tmp_desc = hdd_ipa_kzalloc(sizeof(struct + ipa_tx_data_desc)); + if (!tmp_desc) { + ret = -1; + break; + } + list_add_tail(&tmp_desc->link, &hdd_ipa->free_desc_head); + } + spin_unlock_bh(&hdd_ipa->q_lock); + HDD_IPA_LOG(VOS_TRACE_LEVEL_INFO, + "Desc sz:%d h_desc_cnt:%d freeq_cnt:%llu", + hdd_ipa->hdd_ctx->cfg_ini->IpaDescSize, hdd_ipa->hw_desc_cnt, + hdd_ipa->stats.freeq_cnt); + return ret; +} + +static void hdd_ipa_rx_pipe_desc_free(void) +{ + struct hdd_ipa_priv *hdd_ipa = ghdd_ipa; + uint32_t i = 0, max_desc_cnt; + struct ipa_tx_data_desc *desc, *tmp; + + max_desc_cnt = hdd_ipa->hw_desc_cnt * HDD_IPA_DESC_BUFFER_RATIO; + + spin_lock_bh(&hdd_ipa->q_lock); + list_for_each_entry_safe(desc, tmp, &hdd_ipa->free_desc_head, link) { + list_del(&desc->link); + adf_os_mem_free(desc); + i++; + } + spin_unlock_bh(&hdd_ipa->q_lock); + + if (i != max_desc_cnt) + HDD_IPA_LOG(VOS_TRACE_LEVEL_FATAL, "free mem leak"); + +} + +static ssize_t hdd_ipa_debugfs_read_ipa_stats(struct file *file, + char __user *user_buf, size_t count, loff_t *ppos) +{ + struct hdd_ipa_priv *hdd_ipa = file->private_data; + char *buf; + unsigned int len = 0, buf_len = 1500; + ssize_t ret_cnt; + + buf = kzalloc(buf_len, GFP_KERNEL); + if (!buf) + return -ENOMEM; + + len += scnprintf(buf + len, buf_len - len, "\n"); + len += scnprintf(buf + len, buf_len - len, "%25s\n", + "IPA stats"); + len += scnprintf(buf + len, buf_len - len, "%25s\n\n", + "==========="); + + len += scnprintf(buf + len, buf_len - len, "%20s %10llu\n", + "RM Grants: ", hdd_ipa->stats.rm_grant); + len += scnprintf(buf + len, buf_len - len, "%20s %10llu\n", + "RM Releases: ", hdd_ipa->stats.rm_release); +#ifdef HDD_IPA_EXTRA_DP_COUNTERS + len += scnprintf(buf + len, buf_len - len, "%20s %10llu\n", + "IPA RM Qued:", hdd_ipa->stats.rx_ipa_rm_qued); +#endif + len += scnprintf(buf + len, buf_len - len, "%20s %10u\n\n", + "Pending cnt:", hdd_ipa->pending_desc_cnt); + +#ifdef HDD_IPA_EXTRA_DP_COUNTERS + len += scnprintf(buf + len, buf_len - len, "%20s %10llu\n", + "IPA HW Max Qued:", hdd_ipa->stats.rx_ipa_hw_max_qued); +#endif + len += scnprintf(buf + len, buf_len - len, "%20s %10llu\n\n", + "IPA HW Maxed out", hdd_ipa->stats.rx_ipa_hw_maxed_out); + + len += scnprintf(buf + len, buf_len - len, "%20s %10llu\n", + "IPA RX Prefilter: ", hdd_ipa->stats.prefilter); + len += scnprintf(buf + len, buf_len - len, "%20s %10llu\n", + "IPA RX send cnt:", hdd_ipa->stats.rx_ipa_sent_desc_cnt); + len += scnprintf(buf + len, buf_len - len, "%20s %10llu\n", + "IPA RX Write done:", hdd_ipa->stats.rx_ipa_write_done); + len += scnprintf(buf + len, buf_len - len, "%20s %10llu\n", + "IPA RX Exception: ", hdd_ipa->stats.rx_ipa_excep); +#ifdef HDD_IPA_EXTRA_DP_COUNTERS + len += scnprintf(buf + len, buf_len - len, "%20s %10llu\n", + "RXT recv:", hdd_ipa->stats.rxt_recv); + len += scnprintf(buf + len, buf_len - len, "%20s %10llu\n", + "RXT drop:", hdd_ipa->stats.rxt_drop); + len += scnprintf(buf + len, buf_len - len, "%20s %10llu\n", + "RXT desc drop:", hdd_ipa->stats.rxt_d_drop); + len += scnprintf(buf + len, buf_len - len, "%20s %10llu\n", + "RXT desc head drop:", hdd_ipa->stats.rxt_dh_drop); + len += scnprintf(buf + len, buf_len - len, "%20s %10llu\n", + "DH sent:", hdd_ipa->stats.rx_ipa_dh_sent); + len += scnprintf(buf + len, buf_len - len, "%20s %10llu\n", + "DH reclaim:", hdd_ipa->stats.rx_ipa_dh_reclaim); + len += scnprintf(buf + len, buf_len - len, "%20s %10llu\n", + "DH not used:", hdd_ipa->stats.rx_ipa_dh_not_used); + len += scnprintf(buf + len, buf_len - len, "%20s %10llu\n", + "RXT 0 skb:", hdd_ipa->stats.rxt_0); + len += scnprintf(buf + len, buf_len - len, "%20s %10llu\n", + "RXT 1 skb:", hdd_ipa->stats.rxt_1); + len += scnprintf(buf + len, buf_len - len, "%20s %10llu\n", + "RXT 2 skb:", hdd_ipa->stats.rxt_2); + len += scnprintf(buf + len, buf_len - len, "%20s %10llu\n", + "RXT 3 skb:", hdd_ipa->stats.rxt_3); + len += scnprintf(buf + len, buf_len - len, "%20s %10llu\n", + "RXT 4 skb:", hdd_ipa->stats.rxt_4); + len += scnprintf(buf + len, buf_len - len, "%20s %10llu\n", + "RXT 5 skb:", hdd_ipa->stats.rxt_5); + len += scnprintf(buf + len, buf_len - len, "%20s %10llu\n\n", + "RXT > 5 skb:", hdd_ipa->stats.rxt_6); +#endif + len += scnprintf(buf + len, buf_len - len, "%20s %10llu\n\n", + "IPA TX Recieve:", hdd_ipa->stats.tx_ipa_recv); + +#ifdef HDD_IPA_EXTRA_DP_COUNTERS + len += scnprintf(buf + len, buf_len - len, "%20s %10llu\n", + "Free Queue use:", hdd_ipa->stats.freeq_use); + len += scnprintf(buf + len, buf_len - len, "%20s %10llu\n", + "Free Queue reclaim:", hdd_ipa->stats.freeq_reclaim); +#endif + len += scnprintf(buf + len, buf_len - len, "%20s %10llu\n", + "Free Queue Empty:", hdd_ipa->stats.freeq_empty); + len += scnprintf(buf + len, buf_len - len, "%20s %10llu\n\n", + "Free Queue cnt:", hdd_ipa->stats.freeq_cnt); + + + if (len > buf_len) + len = buf_len; + + ret_cnt = simple_read_from_buffer(user_buf, count, ppos, buf, len); + kfree(buf); + return ret_cnt; +} + +static const struct file_operations fops_ipa_stats = { + .read = hdd_ipa_debugfs_read_ipa_stats, + .open = simple_open, + .owner = THIS_MODULE, + .llseek = default_llseek, +}; + + +int hdd_ipa_debugfs_init(struct hdd_ipa_priv *hdd_ipa) +{ +#ifdef WLAN_OPEN_SOURCE + hdd_ipa->debugfs_dir = debugfs_create_dir("cld", + hdd_ipa->hdd_ctx->wiphy->debugfsdir); + if(!hdd_ipa->debugfs_dir) + return -ENOMEM; + + debugfs_create_file("ipa-stats", S_IRUSR, hdd_ipa->debugfs_dir, + hdd_ipa, &fops_ipa_stats); +#endif + return 0; +} + +/** +* hdd_ipa_init() - Allocate hdd_ipa resources, ipa pipe resource and register +* wlan interface with IPA module. +* @param +* hdd_ctx : [in] pointer to HDD context +* @return : VOS_STATUS_E_FAILURE - Errors +* : VOS_STATUS_SUCCESS - Ok +*/ +VOS_STATUS hdd_ipa_init(hdd_context_t *hdd_ctx) +{ + struct hdd_ipa_priv *hdd_ipa = NULL; + int ret; + if (!hdd_ipa_is_enabled(hdd_ctx)) + return 0; + + hdd_ipa = hdd_ipa_kzalloc(sizeof(struct hdd_ipa_priv)); + if (!hdd_ipa) { + HDD_IPA_LOG(VOS_TRACE_LEVEL_FATAL, "ENOMEM"); + goto fail_setup_rm; + } + hdd_ctx->hdd_ipa = hdd_ipa; + ghdd_ipa = hdd_ipa; + hdd_ipa->hdd_ctx = hdd_ctx; + + ret = hdd_ipa_setup_rm(hdd_ipa); + if (ret) + goto fail_setup_rm; + + ret = hdd_ipa_setup_sys_pipe(hdd_ipa); + if (ret) + goto fail_create_sys_pipe; + + atomic_set(&hdd_ipa->rm_state, HDD_IPA_RM_RELEASED); + + ret = hdd_ipa_rx_pipe_desc_alloc(); + if (ret) + goto fail_alloc_rx_pipe_desc; + + ret = hdd_ipa_debugfs_init(hdd_ipa); + if (ret) + goto fail_alloc_rx_pipe_desc; + + HDD_IPA_LOG(VOS_TRACE_LEVEL_FATAL, "IPA Init Done"); +#ifndef HDD_IPA_USE_IPA_RM_TIMER + setup_timer(&hdd_ipa->rm_timer, hdd_ipa_rm_timer_handler, + (unsigned long) &hdd_ipa); +#endif + return VOS_STATUS_SUCCESS; +fail_alloc_rx_pipe_desc: + hdd_ipa_rx_pipe_desc_free(); +fail_create_sys_pipe: + hdd_ipa_destory_rm_resource(hdd_ipa); +fail_setup_rm: + return VOS_STATUS_E_FAILURE; +} + +VOS_STATUS hdd_ipa_cleanup(hdd_context_t *hdd_ctx) +{ + struct hdd_ipa_priv *hdd_ipa = hdd_ctx->hdd_ipa; + + if (!hdd_ipa_is_enabled(hdd_ctx)) + return VOS_STATUS_SUCCESS; + +#ifndef HDD_IPA_USE_IPA_RM_TIMER + del_timer(&hdd_ipa->rm_timer); +#endif + if (hdd_ipa->pending_desc_cnt != 0) { + msleep(5); + HDD_IPA_LOG(VOS_TRACE_LEVEL_FATAL, "IPA Pending"); + } + hdd_ipa_rx_pipe_desc_free(); + hdd_ipa_teardown_sys_pipe(hdd_ipa); + hdd_ipa_destory_rm_resource(hdd_ipa); + + adf_os_mem_free(hdd_ctx->hdd_ipa); + + return VOS_STATUS_SUCCESS; +} + +#endif + + diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c index 23e04374639b..0a4fcff7999a 100644 --- a/CORE/HDD/src/wlan_hdd_main.c +++ b/CORE/HDD/src/wlan_hdd_main.c @@ -111,6 +111,9 @@ void hdd_ch_avoid_cb(void *hdd_context,void *indi_param); #endif /* FEATURE_WLAN_CH_AVOID */ #include "wlan_hdd_debugfs.h" +#ifdef IPA_OFFLOAD +#include +#endif #if defined(QCA_WIFI_2_0) && !defined(QCA_WIFI_ISOC) #include "if_pci.h" #endif @@ -7980,6 +7983,9 @@ void hdd_wlan_exit(hdd_context_t *pHddCtx) hdd_close_all_adapters( pHddCtx ); +#ifdef IPA_OFFLOAD + hdd_ipa_cleanup(pHddCtx); +#endif //Free up dynamically allocated members inside HDD Adapter kfree(pHddCtx->cfg_ini); @@ -9166,6 +9172,10 @@ int hdd_wlan_startup(struct device *dev, v_VOID_t *hif_sc) { hdd_set_idle_ps_config(pHddCtx, TRUE); } +#ifdef IPA_OFFLOAD + if (hdd_ipa_init(pHddCtx) == VOS_STATUS_E_FAILURE) + goto err_nl_srv; +#endif #if defined(QCA_WIFI_2_0) && !defined(QCA_WIFI_ISOC) complete(&wlan_start_comp); diff --git a/CORE/HDD/src/wlan_hdd_softap_tx_rx.c b/CORE/HDD/src/wlan_hdd_softap_tx_rx.c index a04d129165f7..e909b2d69f33 100644 --- a/CORE/HDD/src/wlan_hdd_softap_tx_rx.c +++ b/CORE/HDD/src/wlan_hdd_softap_tx_rx.c @@ -48,7 +48,9 @@ #include #include - +#ifdef IPA_OFFLOAD +#include +#endif /*--------------------------------------------------------------------------- Preprocessor definitions and constants -------------------------------------------------------------------------*/ @@ -522,6 +524,9 @@ int hdd_softap_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) //Get TL AC corresponding to Qdisc queue index/AC. ac = hdd_QdiscAcToTlAC[skb->queue_mapping]; +#if defined (IPA_OFFLOAD) + if(!(NBUF_OWNER_ID(skb) == IPA_NBUF_OWNER_ID)) { +#endif // Check if the buffer has enough header room skb = skb_unshare(skb, GFP_ATOMIC); if (!skb) @@ -535,6 +540,9 @@ int hdd_softap_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) if (!skb) goto drop_pkt; } +#if defined (IPA_OFFLOAD) + } +#endif if (WLANTL_SendSTA_DataFrame((WLAN_HDD_GET_CTX(pAdapter))->pvosContext, STAId, skb) != NULL) { @@ -1799,11 +1807,21 @@ VOS_STATUS hdd_softap_RegisterSTA( hdd_adapter_t *pAdapter, staDesc.ucIsReplayCheckValid = VOS_FALSE; // Register the Station with TL... +#ifdef IPA_OFFLOAD + if (hdd_ipa_is_enabled(pHddCtx)) { + vosStatus = WLANTL_RegisterSTAClient( (WLAN_HDD_GET_CTX(pAdapter))->pvosContext, + hdd_ipa_process_rxt, + hdd_softap_tx_complete_cbk, + hdd_softap_tx_fetch_packet_cbk, &staDesc, 0 ); + } else { +#endif vosStatus = WLANTL_RegisterSTAClient( (WLAN_HDD_GET_CTX(pAdapter))->pvosContext, hdd_softap_rx_packet_cbk, hdd_softap_tx_complete_cbk, hdd_softap_tx_fetch_packet_cbk, &staDesc, 0 ); - +#ifdef IPA_OFFLOAD + } +#endif if ( !VOS_IS_STATUS_SUCCESS( vosStatus ) ) { VOS_TRACE( VOS_MODULE_ID_HDD_SOFTAP, VOS_TRACE_LEVEL_ERROR, diff --git a/CORE/HDD/src/wlan_hdd_tx_rx.c b/CORE/HDD/src/wlan_hdd_tx_rx.c index 057d619dc211..f57be8db267c 100644 --- a/CORE/HDD/src/wlan_hdd_tx_rx.c +++ b/CORE/HDD/src/wlan_hdd_tx_rx.c @@ -52,6 +52,10 @@ #include "wlan_hdd_tdls.h" #endif +#ifdef IPA_OFFLOAD +#include +#endif + /*--------------------------------------------------------------------------- Preprocessor definitions and constants -------------------------------------------------------------------------*/ @@ -864,6 +868,10 @@ int hdd_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) //Get TL AC corresponding to Qdisc queue index/AC. ac = hdd_QdiscAcToTlAC[skb->queue_mapping]; +#ifdef IPA_OFFLOAD + if(!(NBUF_OWNER_ID(skb) == IPA_NBUF_OWNER_ID)) { +#endif + /* Check if the buffer has enough header room */ skb = skb_unshare(skb, GFP_ATOMIC); if (!skb) @@ -877,7 +885,9 @@ int hdd_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) if (!skb) goto drop_pkt; } - +#ifdef IPA_OFFLOAD + } +#endif //user priority from IP header, which is already extracted and set from //select_queue call back function up = skb->priority; diff --git a/CORE/SERVICES/COMMON/adf/adf_nbuf.c b/CORE/SERVICES/COMMON/adf/adf_nbuf.c index 257de52c6c10..7a72cb10aa10 100644 --- a/CORE/SERVICES/COMMON/adf/adf_nbuf.c +++ b/CORE/SERVICES/COMMON/adf/adf_nbuf.c @@ -102,6 +102,11 @@ __adf_nbuf_alloc(adf_os_device_t osdev, size_t size, int reserve, int align, int void __adf_nbuf_free(struct sk_buff *skb) { +#ifdef IPA_OFFLOAD + if( (NBUF_OWNER_ID(skb) == IPA_NBUF_OWNER_ID) && NBUF_CALLBACK_FN(skb) ) + NBUF_CALLBACK_FN_EXEC(skb); + else +#endif dev_kfree_skb_any(skb); } diff --git a/CORE/SERVICES/COMMON/adf/adf_nbuf.h b/CORE/SERVICES/COMMON/adf/adf_nbuf.h index 2bfac4ef84ef..3b86ebf594c8 100644 --- a/CORE/SERVICES/COMMON/adf/adf_nbuf.h +++ b/CORE/SERVICES/COMMON/adf/adf_nbuf.h @@ -44,6 +44,9 @@ #include #include +#ifdef IPA_OFFLOAD +#define IPA_NBUF_OWNER_ID 0xaa55aa55 +#endif /** * @brief Platform indepedent packet abstraction */ diff --git a/CORE/SERVICES/COMMON/adf/linux/adf_nbuf_pvt.h b/CORE/SERVICES/COMMON/adf/linux/adf_nbuf_pvt.h index e553c86b95ac..d209ded62380 100644 --- a/CORE/SERVICES/COMMON/adf/linux/adf_nbuf_pvt.h +++ b/CORE/SERVICES/COMMON/adf/linux/adf_nbuf_pvt.h @@ -48,6 +48,7 @@ */ typedef struct sk_buff * __adf_nbuf_t; +typedef void (*__adf_nbuf_callback_fn) (struct sk_buff *skb); #define OSDEP_EAPOL_TID 6 /* send it on VO queue */ /* CVG_NBUF_MAX_OS_FRAGS - @@ -101,7 +102,15 @@ struct cvg_nbuf_cb { */ wordstream_flags : CVG_NBUF_MAX_EXTRA_FRAGS+1; } extra_frags; + uint32_t owner_id; + __adf_nbuf_callback_fn adf_nbuf_callback_fn; }; +#define NBUF_OWNER_ID(skb) \ + (((struct cvg_nbuf_cb *)((skb)->cb))->owner_id) +#define NBUF_CALLBACK_FN(skb) \ + (((struct cvg_nbuf_cb *)((skb)->cb))->adf_nbuf_callback_fn) +#define NBUF_CALLBACK_FN_EXEC(skb) \ + (((struct cvg_nbuf_cb *)((skb)->cb))->adf_nbuf_callback_fn)(skb) #define NBUF_MAPPED_PADDR_LO(skb) \ (((struct cvg_nbuf_cb *)((skb)->cb))->mapped_paddr_lo[0]) #define NBUF_NUM_EXTRA_FRAGS(skb) \ diff --git a/Makefile b/Makefile index f6192c6b11c3..9583d67159f7 100644 --- a/Makefile +++ b/Makefile @@ -1,3 +1,7 @@ + +KERN_DIR ?= /lib/modules/$(shell uname -r)/build +-include $(KERN_DIR)/.config + # We can build either as part of a standalone Kernel build or part # of an Android build. Determine which mechanism is being used #ifeq ($(MODNAME),) @@ -126,6 +130,11 @@ CONFIG_CHECKSUM_OFFLOAD := 1 CONFIG_GTK_OFFLOAD := 1 endif +#Enable IPA offload +ifeq ($(CONFIG_IPA), y) +CONFIG_IPA_OFFLOAD := 1 +endif + ifeq ($(CONFIG_CFG80211),y) HAVE_CFG80211 := 1 else @@ -244,6 +253,10 @@ HDD_OBJS := $(HDD_SRC_DIR)/bap_hdd_main.o \ $(HDD_SRC_DIR)/wlan_hdd_wmm.o \ $(HDD_SRC_DIR)/wlan_hdd_wowl.o +ifeq ($(CONFIG_IPA_OFFLOAD), 1) +HDD_OBJS += $(HDD_SRC_DIR)/wlan_hdd_ipa.o +endif + ifeq ($(HAVE_CFG80211),1) HDD_OBJS += $(HDD_SRC_DIR)/wlan_hdd_cfg80211.o \ $(HDD_SRC_DIR)/wlan_hdd_p2p.o @@ -1053,6 +1066,11 @@ ifeq ($(CONFIG_CHECKSUM_OFFLOAD), 1) CDEFINES += -DCHECKSUM_OFFLOAD endif +#Enable Checksum Offload support +ifeq ($(CONFIG_IPA_OFFLOAD), 1) +CDEFINES += -DIPA_OFFLOAD -DHDD_IPA_USE_IPA_RM_TIMER +endif + #Enable GTK Offload ifeq ($(CONFIG_GTK_OFFLOAD), 1) CDEFINES += -DWLAN_FEATURE_GTK_OFFLOAD @@ -1074,7 +1092,6 @@ EXTRA_CFLAGS += $(CDEFINES) obj-m := $(MODNAME).o wlan-objs := $(OBJS) -KERN_DIR ?= /lib/modules/$(shell uname -r)/build PWD = $(shell pwd) all: diff --git a/firmware_bin/WCNSS_qcom_cfg.ini b/firmware_bin/WCNSS_qcom_cfg.ini index 9dbde54e867a..21c3c00794d3 100644 --- a/firmware_bin/WCNSS_qcom_cfg.ini +++ b/firmware_bin/WCNSS_qcom_cfg.ini @@ -459,6 +459,12 @@ gEnablefwprint=0 #Enable firmware log gEnablefwlog=1 +#IPA config +gIPAEnable=1 +gIPADescSize=800 +gIPAPreFilterEnable=1 +gIPARMEnable=1 + #P2P Listen offload gEnableP2pListenOffload=1 -- cgit v1.2.3 From a4db24da98ba4aaeb974708b05ab92e973a07457 Mon Sep 17 00:00:00 2001 From: Yun Park Date: Sat, 11 Jan 2014 00:11:12 -0800 Subject: qcacld:ipa: Fix IPA RX header format from 802.3 to Ethernet-II This change is to fix the IPA RX failure caused by WLAN driver sending wrong packet header length. Also fixed crash due to the Rx packet header removed from IPA for the exception packets. Change-Id: Ib41cea65318e857805461dcbc52ea747752453fc CRs-fixed: 595907 --- CORE/HDD/src/wlan_hdd_ipa.c | 83 +++++++++++++++++++++++++++++++-------------- 1 file changed, 57 insertions(+), 26 deletions(-) diff --git a/CORE/HDD/src/wlan_hdd_ipa.c b/CORE/HDD/src/wlan_hdd_ipa.c index 3a5aa5dce3d8..4c065c248275 100644 --- a/CORE/HDD/src/wlan_hdd_ipa.c +++ b/CORE/HDD/src/wlan_hdd_ipa.c @@ -54,7 +54,7 @@ Include Files #define HDD_IPA_RX_INACTIVITY_MSEC_DELAY 2000 -const uint8_t ipa_set_hdr[] = { +const uint8_t ipa_set_tx_hdr[] = { /*IPA-WLAN HDR */ 0x00, 0x00, /* Reserved */ #define HDD_IPA_WLAN_HDR_DEV_INFO_OFFSET 2 @@ -78,14 +78,32 @@ const uint8_t ipa_set_hdr[] = { 0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00, /* LLC SNAP header 8 bytes */ -#define HDD_IPA_WLAN_HDR_IP_VER_OFFSET 24 +#define HDD_IPA_WLAN_TX_HDR_IP_VER_OFFSET 24 0x08, 0x00 /* type value(2 bytes) ,filled by wlan */ /* 0x0800 - IPV4, 0x86dd - IPV6 */ }; +// For Rx pipe, use Ethernet-II Header format +const uint8_t ipa_set_rx_hdr[] = { + 0x00, 0x00, /* Reserved */ + 0x00, 0x00, + /* dev_id and sta_id filled by wlan*/ -#define HDD_IPA_WLAN_HDR_LEN sizeof(ipa_set_hdr) + /* 802.3 header - 14 bytes*/ + 0x00, 0x03, 0x7f, 0xaa, 0xbb, 0xcc, + /* Des_MAC filled by IPA */ + 0x00, 0x03, 0x7f, 0xdd, 0xee, 0xff, + /* Src. MAC filled by IPA */ +#define HDD_IPA_WLAN_RX_HDR_IP_VER_OFFSET 16 + 0x08, 0x00 + /* type value(2 bytes) ,filled by wlan */ + /* 0x0800 - IPV4, 0x86dd - IPV6 */ +}; + + +#define HDD_IPA_WLAN_TX_HDR_LEN sizeof(ipa_set_tx_hdr) +#define HDD_IPA_WLAN_RX_HDR_LEN sizeof(ipa_set_rx_hdr) #define HDD_IPA_WLAN_HDR_ONLY_LEN 4 #define HDD_IPA_MAX_TX_PIPE_MAP 8 #define HDD_IPA_WLAN_HDR_PARTIAL 1 @@ -489,7 +507,7 @@ static void hdd_ipa_send_pkt_to_ipa(struct ipa_tx_data_desc *send_desc_head, static int hdd_ipa_is_ip_pkt(void *data, uint8_t ip_ver) { - struct ethhdr *eth = data; + struct ethhdr *eth = (struct ethhdr *)data; struct llc_snap_hdr { uint8_t dsap; uint8_t ssap; @@ -512,11 +530,14 @@ static int hdd_ipa_is_ip_pkt(void *data, uint8_t ip_ver) eth_type = be16_to_cpu(ls_hdr->eth_type); } - if (eth_type == 0x0800 && ip_ver == HDD_IPA_IPV4) + if ((eth_type == ETH_P_IP) && (ip_ver == HDD_IPA_IPV4)) ret = 1; - else if (eth_type == 0x86dd && ip_ver == HDD_IPA_IPV6) + else if ((eth_type == ETH_P_IPV6) && (ip_ver == HDD_IPA_IPV6)) ret = 1; + if (ret != 1) + HDD_IPA_LOG(VOS_TRACE_LEVEL_DEBUG, "NOT IP Packet!!! (eth_type=0x%x, ip_ver=%d)", eth_type, ip_ver); + return ret; } @@ -578,11 +599,25 @@ static void hdd_ipa_process_evt(int evt, void *priv) INIT_LIST_HEAD(&send_desc_head->link); buf = rxt->rx_buf_list; while (buf) { + HDD_IPA_LOG(VOS_TRACE_LEVEL_DEBUG, "RX data:\n \ + %02x %02x %02x %02x %02x %02x %02x %02x\n \ + %02x %02x %02x %02x %02x %02x %02x %02x\n \ + %02x %02x %02x %02x %02x %02x %02x %02x\n", + buf->data[0], buf->data[1], buf->data[2], buf->data[3], + buf->data[4], buf->data[5], buf->data[6], buf->data[7], + buf->data[8], buf->data[9], buf->data[10], buf->data[11], + buf->data[12], buf->data[13], buf->data[14], buf->data[15], + buf->data[16], buf->data[17], buf->data[18], buf->data[19], + buf->data[20], buf->data[21], buf->data[22], buf->data[23]); + next_buf = adf_nbuf_queue_next(buf); + + /* we want to send Rx packets to IPA only when it is IPV4 or IPV6i(if IPV6 + is enabled). All other packets will be sent to network stack directly. */ if (hdd_ipa_can_pre_filter(hdd_ipa) && - (!hdd_ipa_is_ip_pkt(buf->data, HDD_IPA_IPV4) || - (!hdd_ipa_is_ipv6_enabled(hdd_ipa) && - hdd_ipa_is_ip_pkt(buf->data, HDD_IPA_IPV6)))) { + (!hdd_ipa_is_ip_pkt(buf->data, HDD_IPA_IPV4) && + (!hdd_ipa_is_ipv6_enabled(hdd_ipa) || + !hdd_ipa_is_ip_pkt(buf->data, HDD_IPA_IPV6)))) { hdd_ipa->stats.prefilter++; hdd_ipa_send_skb_to_network(buf, adap_dev); buf = next_buf; @@ -603,15 +638,6 @@ static void hdd_ipa_process_evt(int evt, void *priv) HDD_IPA_WLAN_HDR_DEV_TYPE_STA; } - /* TODO Chk if needed - if (hdd_ipa_is_ip_pkt(buf->data, HDD_IPA_IPV6) { - buf->data[HDD_IPA_WLAN_HDR_IP_VER_OFFSET] - = 0x86; - buf->data[HDD_IPA_WLAN_HDR_IP_VER_OFFSET + 1] - = 0xdd; - } - skb_pull(buf, HDD_IPA_WLAN_HDR_LEN); - skb_push(buf, HDD_IPA_WLAN_HDR_ONLY_LEN);*/ send_desc = hdd_ipa_get_desc_from_freeq(); if (send_desc) { send_desc->priv = buf; @@ -779,7 +805,7 @@ void hdd_ipa_w2i_cb(void *priv, enum ipa_dp_evt_type evt, unsigned long data) struct ipa_tx_data_desc *done_desc_head; adf_nbuf_t skb; uint8_t sta_id, dev_id; - hdd_adapter_t *adap_dev; + hdd_adapter_t *adap_dev=NULL; client = *((uint8_t *)priv); if (client != hdd_ipa_pipe_client[HDD_IPA_RX_PIPE]) { @@ -795,7 +821,12 @@ void hdd_ipa_w2i_cb(void *priv, enum ipa_dp_evt_type evt, unsigned long data) skb = (adf_nbuf_t) data; sta_id = skb->data[HDD_IPA_WLAN_HDR_STA_ID_OFFSET]; dev_id = skb->data[HDD_IPA_WLAN_HDR_DEV_INFO_OFFSET]; - adap_dev = hdd_ipa->hdd_ctx->sta_to_adapter[sta_id]; + if (sta_id < ARRAY_SIZE(hdd_ipa->hdd_ctx->sta_to_adapter)) { + adap_dev = hdd_ipa->hdd_ctx->sta_to_adapter[sta_id]; + } else { + HDD_IPA_LOG(VOS_TRACE_LEVEL_ERROR, + "w2i cb: wrong sta_id: %d", sta_id); + } skb_pull(skb, HDD_IPA_WLAN_HDR_ONLY_LEN); hdd_ipa->stats.rx_ipa_excep++; hdd_ipa_send_skb_to_network(skb, adap_dev); @@ -870,7 +901,7 @@ static int hdd_ipa_setup_sys_pipe(struct hdd_ipa_priv *hdd_ipa) ipa->priv = &hdd_ipa_pipe_client[i]; ipa->notify = hdd_ipa_i2w_cb; - ipa->ipa_ep_cfg.hdr.hdr_len = HDD_IPA_WLAN_HDR_LEN; + ipa->ipa_ep_cfg.hdr.hdr_len = HDD_IPA_WLAN_TX_HDR_LEN; ipa->ipa_ep_cfg.mode.mode = IPA_BASIC; ret = ipa_setup_sys_pipe(ipa, &(hdd_ipa->sys_pipe[i].conn_hdl)); @@ -889,7 +920,7 @@ static int hdd_ipa_setup_sys_pipe(struct hdd_ipa_priv *hdd_ipa) ipa->notify = hdd_ipa_w2i_cb; ipa->ipa_ep_cfg.nat.nat_en = IPA_BYPASS_NAT; - ipa->ipa_ep_cfg.hdr.hdr_len = HDD_IPA_WLAN_HDR_LEN; + ipa->ipa_ep_cfg.hdr.hdr_len = HDD_IPA_WLAN_RX_HDR_LEN; ipa->ipa_ep_cfg.hdr.hdr_ofst_metadata_valid = 1; ipa->ipa_ep_cfg.mode.mode = IPA_BASIC; @@ -1076,7 +1107,7 @@ static int hdd_ipa_add_header_info(uint8_t sta_id, uint8_t *mac_addr) ipahdr->commit = 0; ipahdr->num_hdrs = 1; /* Set the Source MAC */ - memcpy(ipahdr->hdr[0].hdr, ipa_set_hdr, HDD_IPA_WLAN_HDR_LEN); + memcpy(ipahdr->hdr[0].hdr, ipa_set_tx_hdr, HDD_IPA_WLAN_TX_HDR_LEN); memcpy(&ipahdr->hdr[0].hdr[HDD_IPA_WLAN_HDR_SRC_MAC_OFFSET], mac_addr, ETH_ALEN); @@ -1095,7 +1126,7 @@ static int hdd_ipa_add_header_info(uint8_t sta_id, uint8_t *mac_addr) snprintf(ipahdr->hdr[0].name, IPA_RESOURCE_NAME_MAX, "%s%s", ifname, HDD_IPA_IPV4_NAME_EXT); - ipahdr->hdr[0].hdr_len = HDD_IPA_WLAN_HDR_LEN; + ipahdr->hdr[0].hdr_len = HDD_IPA_WLAN_TX_HDR_LEN; ipahdr->hdr[0].is_partial = HDD_IPA_WLAN_HDR_PARTIAL; ipahdr->hdr[0].hdr_hdl = 0; @@ -1113,8 +1144,8 @@ static int hdd_ipa_add_header_info(uint8_t sta_id, uint8_t *mac_addr) snprintf(ipahdr->hdr[0].name, IPA_RESOURCE_NAME_MAX, "%s%s", ifname, HDD_IPA_IPV6_NAME_EXT); /* Set the type to IPV6 in the header*/ - ipahdr->hdr[0].hdr[HDD_IPA_WLAN_HDR_IP_VER_OFFSET] = 0x86; - ipahdr->hdr[0].hdr[HDD_IPA_WLAN_HDR_IP_VER_OFFSET + 1] = 0xdd; + ipahdr->hdr[0].hdr[HDD_IPA_WLAN_TX_HDR_IP_VER_OFFSET] = 0x86; + ipahdr->hdr[0].hdr[HDD_IPA_WLAN_TX_HDR_IP_VER_OFFSET + 1] = 0xdd; ret = ipa_add_hdr(ipahdr); if (ret) { -- cgit v1.2.3 From a6b6c4fbc8409373fd8275aae558498287476262 Mon Sep 17 00:00:00 2001 From: Yun Park Date: Sat, 11 Jan 2014 00:13:50 -0800 Subject: qcacld:ipa: WLAN-IPA TX Optimization - Removing dev-id and sta_id from the Tx partial header - WLAN-IPA TX-optimization (Removing DMA address map/unmap) - Fix IPA RX header format from 802.3 to Ethernet-II - Fix ipa_tx_dp_mul() failure by making total # of desc 1 less than the IPA descriptor FIFO size - Fix the crash due to invaid sta_id due to IPA Rx header is not retained when using IPA default routing table Change-Id: Iaa6ece4689aa4883b3741e84b31b164e9a379613 CRs-fixed: 595907 --- CORE/CLD_TXRX/TLSHIM/tl_shim.c | 38 +- CORE/HDD/src/wlan_hdd_ipa.c | 692 ++++++++++++++++---------- CORE/SERVICES/COMMON/adf/linux/adf_nbuf_pvt.h | 7 + CORE/TL/inc/wlan_qct_tl.h | 33 ++ 4 files changed, 486 insertions(+), 284 deletions(-) diff --git a/CORE/CLD_TXRX/TLSHIM/tl_shim.c b/CORE/CLD_TXRX/TLSHIM/tl_shim.c index 8c38ccb15850..f8f40ea86974 100644 --- a/CORE/CLD_TXRX/TLSHIM/tl_shim.c +++ b/CORE/CLD_TXRX/TLSHIM/tl_shim.c @@ -763,19 +763,7 @@ adf_nbuf_t WLANTL_SendSTA_DataFrame(void *vos_ctx, u_int8_t sta_id, } /* Zero out skb's context buffer for the driver to use */ -#ifdef IPA_OFFLOAD - if ((NBUF_OWNER_ID(skb) == IPA_NBUF_OWNER_ID) - && NBUF_CALLBACK_FN(skb)) { - uint32_t skb_owner_id = NBUF_OWNER_ID(skb); - __adf_nbuf_callback_fn skb_cb_fn = NBUF_CALLBACK_FN(skb); - adf_os_mem_set(skb->cb, 0, sizeof(skb->cb)); - NBUF_OWNER_ID(skb) = skb_owner_id; - NBUF_CALLBACK_FN(skb) = skb_cb_fn; - } else - adf_os_mem_set(skb->cb, 0, sizeof(skb->cb)); -#else adf_os_mem_set(skb->cb, 0, sizeof(skb->cb)); -#endif adf_nbuf_map_single(adf_ctx, skb, ADF_OS_DMA_TO_DEVICE); if ((tl_shim->ip_checksum_offload) && (skb->protocol == htons(ETH_P_IP)) @@ -794,6 +782,32 @@ adf_nbuf_t WLANTL_SendSTA_DataFrame(void *vos_ctx, u_int8_t sta_id, return NULL; } +#ifdef IPA_OFFLOAD +adf_nbuf_t WLANTL_SendIPA_DataFrame(void *vos_ctx, void *vdev, + adf_nbuf_t skb) +{ + struct txrx_tl_shim_ctx *tl_shim = vos_get_context(VOS_MODULE_ID_TL, + vos_ctx); + adf_nbuf_t ret; + + ENTER(); + + if ((tl_shim->ip_checksum_offload) && (skb->protocol == htons(ETH_P_IP)) + && (skb->ip_summed == CHECKSUM_PARTIAL)) + skb->ip_summed = CHECKSUM_COMPLETE; + + /* Terminate the (single-element) list of tx frames */ + skb->next = NULL; + ret = tl_shim->tx((struct ol_txrx_vdev_t *)vdev, skb); + if (ret) { + TLSHIM_LOGW("Failed to tx"); + return ret; + } + + return NULL; +} +#endif + VOS_STATUS WLANTL_ResumeDataTx(void *vos_ctx, u_int8_t *sta_id) { return VOS_STATUS_SUCCESS; diff --git a/CORE/HDD/src/wlan_hdd_ipa.c b/CORE/HDD/src/wlan_hdd_ipa.c index 4c065c248275..2b4e5b301738 100644 --- a/CORE/HDD/src/wlan_hdd_ipa.c +++ b/CORE/HDD/src/wlan_hdd_ipa.c @@ -47,65 +47,68 @@ Include Files #include #include #include +#include + +#include "vos_sched.h" +#include "wlan_qct_tl.h" +#include "ol_txrx_peer_find.h" +#include "tl_shim.h" #define HDD_IPA_DESC_BUFFER_RATIO 4 #define HDD_IPA_IPV4_NAME_EXT "_ipv4" #define HDD_IPA_IPV6_NAME_EXT "_ipv6" #define HDD_IPA_RX_INACTIVITY_MSEC_DELAY 2000 - -const uint8_t ipa_set_tx_hdr[] = { -/*IPA-WLAN HDR */ - 0x00, 0x00, /* Reserved */ -#define HDD_IPA_WLAN_HDR_DEV_INFO_OFFSET 2 -#define HDD_IPA_WLAN_HDR_DEV_TYPE_MASK 0x80 -#define HDD_IPA_WLAN_HDR_DEV_TYPE_AP 0x80 -#define HDD_IPA_WLAN_HDR_DEV_TYPE_STA 0x00 -#define HDD_IPA_WLAN_HDR_DEV_ID_MASK 0x7F +#define HDD_IPA_WLAN_HDR_ONLY_LEN 4 #define HDD_IPA_WLAN_HDR_STA_ID_OFFSET 3 - 0x00, 0x00, - /* dev_id and sta_id filled by wlan*/ - - /* 802.3 header - 14 bytes*/ -#define HDD_IPA_WLAN_HDR_DES_MAC_OFFSET 4 - 0x00, 0x03, 0x7f, 0xaa, 0xbb, 0xcc, - /* Des_MAC filled by IPA */ -#define HDD_IPA_WLAN_HDR_SRC_MAC_OFFSET 10 - 0x00, 0x03, 0x7f, 0xdd, 0xee, 0xff, - /* Src. MAC filled by IPA */ - 0x00, 0x00, - /* length can be zero */ - - 0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00, +#define HDD_IPA_WLAN_HDR_DES_MAC_OFFSET 0 + +struct llc_snap_hdr { + uint8_t dsap; + uint8_t ssap; + uint8_t resv[4]; + __be16 eth_type; +} __packed; + +struct ipa_tx_hdr { + struct ethhdr eth; + struct llc_snap_hdr llc_snap; +} __packed; + +/* For Tx pipes, use 802.3 Header format */ +struct ipa_tx_hdr ipa_set_tx_hdr = { + { + {0x00, 0x03, 0x7f, 0xaa, 0xbb, 0xcc}, /* Des_MAC filled by IPA */ + {0x00, 0x03, 0x7f, 0xdd, 0xee, 0xff}, /* Src. MAC filled by IPA */ + 0x00 /* length can be zero */ + }, + { /* LLC SNAP header 8 bytes */ -#define HDD_IPA_WLAN_TX_HDR_IP_VER_OFFSET 24 - 0x08, 0x00 - /* type value(2 bytes) ,filled by wlan */ - /* 0x0800 - IPV4, 0x86dd - IPV6 */ + 0xaa, 0xaa, + {0x03, 0x00, 0x00, 0x00}, + 0x0008 /* type value(2 bytes) ,filled by wlan */ + /* 0x0800 - IPV4, 0x86dd - IPV6 */ + } }; -// For Rx pipe, use Ethernet-II Header format -const uint8_t ipa_set_rx_hdr[] = { - 0x00, 0x00, /* Reserved */ - 0x00, 0x00, - /* dev_id and sta_id filled by wlan*/ - - /* 802.3 header - 14 bytes*/ - 0x00, 0x03, 0x7f, 0xaa, 0xbb, 0xcc, - /* Des_MAC filled by IPA */ - 0x00, 0x03, 0x7f, 0xdd, 0xee, 0xff, - /* Src. MAC filled by IPA */ -#define HDD_IPA_WLAN_RX_HDR_IP_VER_OFFSET 16 - 0x08, 0x00 - /* type value(2 bytes) ,filled by wlan */ - /* 0x0800 - IPV4, 0x86dd - IPV6 */ +struct ipa_rx_hdr { + uint8_t hdr[HDD_IPA_WLAN_HDR_ONLY_LEN]; + struct ethhdr eth; +} __packed; + +/* For Rx pipe, use Ethernet-II Header format */ +struct ipa_rx_hdr ipa_set_rx_hdr = { + {0x00, 0x00, 0x00, 0x00}, /* 4 bytes header */ + { + {0x00, 0x03, 0x7f, 0xaa, 0xbb, 0xcc}, /* Des_MAC filled by IPA */ + {0x00, 0x03, 0x7f, 0xdd, 0xee, 0xff}, /* Src. MAC filled by IPA */ + 0x0008 /* type value(2 bytes) ,filled by wlan */ + /* 0x0800 - IPV4, 0x86dd - IPV6 */ + } }; - #define HDD_IPA_WLAN_TX_HDR_LEN sizeof(ipa_set_tx_hdr) #define HDD_IPA_WLAN_RX_HDR_LEN sizeof(ipa_set_rx_hdr) -#define HDD_IPA_WLAN_HDR_ONLY_LEN 4 -#define HDD_IPA_MAX_TX_PIPE_MAP 8 #define HDD_IPA_WLAN_HDR_PARTIAL 1 #define HDD_IPA_LOG(LVL, fmt, args...) VOS_TRACE(VOS_MODULE_ID_HDD, LVL, \ @@ -119,10 +122,9 @@ enum hdd_ipa_rm_state { }; enum hdd_ipa_pipe_index { - HDD_IPA_TX_VI_PIPE, - HDD_IPA_TX_VO_PIPE, - HDD_IPA_TX_BE_PIPE, - HDD_IPA_TX_BK_PIPE, + HDD_IPA_TX_WLAN0_PIPE, + HDD_IPA_TX_WLAN1_PIPE, + HDD_IPA_TX_WLAN2_PIPE, HDD_IPA_RX_PIPE, HDD_IPA_MAX_PIPE }; @@ -132,38 +134,22 @@ enum hdd_ipa_ip_ver { HDD_IPA_IPV6 = 2 }; -uint8_t hdd_ipa_pipe_client[HDD_IPA_MAX_PIPE] = { +#define HDD_IPA_WLAN_MAX_STA_ID 255 + +uint8_t wlan_sta_id_2_hdd_pipe_id[HDD_IPA_WLAN_MAX_STA_ID] = {0xFF}; + +uint8_t hdd_pipe_id_2_ipa_client_id[HDD_IPA_MAX_PIPE] = { IPA_CLIENT_WLAN1_CONS, IPA_CLIENT_WLAN2_CONS, IPA_CLIENT_WLAN3_CONS, - IPA_CLIENT_WLAN4_CONS, IPA_CLIENT_WLAN1_PROD }; -uint8_t hdd_ipa_pipe_client_AC[] = { - HDD_LINUX_AC_VI, - HDD_LINUX_AC_VO, - HDD_LINUX_AC_BE, - HDD_LINUX_AC_BK -}; - -static struct hdd_ipa_tx_pipe_map{ - uint8_t tos_value; - enum ipa_client_type client; - uint8_t ac; -} hdd_ipa_tx_pipe_map_info[HDD_IPA_MAX_TX_PIPE_MAP] = { - /* BK */ - {1, IPA_CLIENT_WLAN1_CONS, HDD_LINUX_AC_BK}, - {2, IPA_CLIENT_WLAN1_CONS, HDD_LINUX_AC_BK}, - /* BE */ - {0, IPA_CLIENT_WLAN2_CONS, HDD_LINUX_AC_BE}, - {3, IPA_CLIENT_WLAN2_CONS, HDD_LINUX_AC_BE}, - /* VI */ - {4, IPA_CLIENT_WLAN3_CONS, HDD_LINUX_AC_VI}, - {5, IPA_CLIENT_WLAN3_CONS, HDD_LINUX_AC_VI}, - /* VO */ - {6, IPA_CLIENT_WLAN4_CONS, HDD_LINUX_AC_VO}, - {7, IPA_CLIENT_WLAN4_CONS, HDD_LINUX_AC_VO}, +uint8_t ipa_client_id_2_hdd_pipe_id[IPA_CLIENT_MAX] = { + [IPA_CLIENT_WLAN1_CONS] = HDD_IPA_TX_WLAN0_PIPE, + [IPA_CLIENT_WLAN2_CONS] = HDD_IPA_TX_WLAN1_PIPE, + [IPA_CLIENT_WLAN3_CONS] = HDD_IPA_TX_WLAN2_PIPE, + [IPA_CLIENT_WLAN1_PROD] = HDD_IPA_RX_PIPE }; struct hdd_ipa_sys_pipe { @@ -185,6 +171,8 @@ struct hdd_ipa_priv { struct list_head free_desc_head; struct list_head pend_desc_head; + struct ol_txrx_vdev_t *pipe_to_vdev[HDD_IPA_MAX_PIPE]; + hdd_context_t *hdd_ctx; struct dentry *debugfs_dir; @@ -201,7 +189,6 @@ struct hdd_ipa_priv { uint64_t rx_ipa_hw_maxed_out; - uint64_t tx_ipa_recv; uint64_t freeq_empty; uint64_t freeq_cnt; @@ -224,7 +211,11 @@ struct hdd_ipa_priv { uint64_t rx_ipa_dh_reclaim; uint64_t rx_ipa_dh_not_used; #endif - }stats; + uint64_t ipa_lb_cnt; + uint64_t tx_ipa_recv; + uint64_t tx_comp_cnt; + uint64_t tx_dp_err_cnt; + } stats; }; enum hdd_ipa_evt { @@ -256,13 +247,13 @@ static inline void *hdd_ipa_kzalloc(uint32_t size) return data; } -static inline struct ipa_tx_data_desc * hdd_ipa_get_desc_from_freeq(void) +static inline struct ipa_tx_data_desc *hdd_ipa_get_desc_from_freeq(void) { struct hdd_ipa_priv *hdd_ipa = ghdd_ipa; struct ipa_tx_data_desc *desc = NULL; spin_lock_bh(&ghdd_ipa->q_lock); - if(!list_empty(&ghdd_ipa->free_desc_head)) { + if (!list_empty(&ghdd_ipa->free_desc_head)) { desc = list_first_entry(&ghdd_ipa->free_desc_head, struct ipa_tx_data_desc, link); list_del(&desc->link); hdd_ipa->stats.freeq_cnt--; @@ -417,7 +408,9 @@ void hdd_ipa_send_skb_to_network(adf_nbuf_t skb, hdd_adapter_t *adap_dev) { if (!adap_dev || (adap_dev && adap_dev->magic != WLAN_HDD_ADAPTER_MAGIC)) { - HDD_IPA_LOG(VOS_TRACE_LEVEL_ERROR, "Invalid sta_id"); + HDD_IPA_LOG(VOS_TRACE_LEVEL_ERROR, "Invalid adapter: adap=0x%x", + adap_dev); + adf_nbuf_free(skb); return; } @@ -438,8 +431,10 @@ static void hdd_ipa_send_pkt_to_ipa(struct ipa_tx_data_desc *send_desc_head, int send_desc_cnt) { struct hdd_ipa_priv *hdd_ipa = ghdd_ipa; - struct ipa_tx_data_desc *send_desc; + struct ipa_tx_data_desc *send_desc, *desc, *tmp; uint32_t cur_send_cnt = 0; + adf_nbuf_t buf; + #ifndef HDD_IPA_USE_IPA_RM_TIMER if (hdd_ipa->rm_timer_on) { del_timer(&hdd_ipa->rm_timer); @@ -480,12 +475,42 @@ static void hdd_ipa_send_pkt_to_ipa(struct ipa_tx_data_desc *send_desc_head, cur_send_cnt = send_desc_cnt; } hdd_ipa->stats.rx_ipa_sent_desc_cnt += cur_send_cnt; + +#ifdef HDD_IPA_EXTRA_DP_COUNTERS + hdd_ipa->stats.rx_ipa_dh_sent++; /* for desc head */ +#endif spin_unlock_bh(&hdd_ipa->q_lock); + if (ipa_tx_dp_mul(hdd_pipe_id_2_ipa_client_id[HDD_IPA_RX_PIPE], + send_desc_head) != 0) { + HDD_IPA_LOG(VOS_TRACE_LEVEL_ERROR, "ipa_tx_dp_mul failed!!! (cur_send_cnt=%d)", cur_send_cnt); + hdd_ipa->stats.tx_dp_err_cnt++; + spin_lock_bh(&hdd_ipa->q_lock); + + list_for_each_entry_safe(desc, tmp, + &send_desc_head->link, link) { + list_del(&desc->link); + buf = desc->priv; + adf_nbuf_free(buf); + desc->priv = NULL; + desc->pyld_buffer = NULL; + desc->pyld_len = 0; + list_add_tail(&desc->link, &hdd_ipa->free_desc_head); + hdd_ipa->stats.freeq_cnt++; +#ifdef HDD_IPA_EXTRA_DP_COUNTERS + hdd_ipa->stats.freeq_reclaim++; +#endif + hdd_ipa->pending_desc_cnt--; + } + + /* return anchor node */ + list_add_tail(&send_desc_head->link, &hdd_ipa->free_desc_head); + hdd_ipa->stats.freeq_cnt++; #ifdef HDD_IPA_EXTRA_DP_COUNTERS - hdd_ipa->stats.rx_ipa_dh_sent++; //for desc head + hdd_ipa->stats.rx_ipa_dh_reclaim++; + hdd_ipa->stats.freeq_reclaim++; #endif - ipa_tx_dp_mul(hdd_ipa_pipe_client[HDD_IPA_RX_PIPE], - send_desc_head); + spin_unlock_bh(&hdd_ipa->q_lock); + } } else { #ifdef HDD_IPA_EXTRA_DP_COUNTERS hdd_ipa->stats.rx_ipa_hw_max_qued += send_desc_cnt; @@ -508,12 +533,6 @@ static void hdd_ipa_send_pkt_to_ipa(struct ipa_tx_data_desc *send_desc_head, static int hdd_ipa_is_ip_pkt(void *data, uint8_t ip_ver) { struct ethhdr *eth = (struct ethhdr *)data; - struct llc_snap_hdr { - uint8_t dsap; - uint8_t ssap; - uint8_t resv[4]; - __be16 eth_type; - } __packed; struct llc_snap_hdr *ls_hdr; uint16_t eth_type; int ret = 0; @@ -523,16 +542,14 @@ static int hdd_ipa_is_ip_pkt(void *data, uint8_t ip_ver) /* Non Ethernet II framing format */ ls_hdr = (struct llc_snap_hdr *)((uint8_t *)data + sizeof(struct ethhdr)); - /* TODO Is this needed - if ((ls_hdr->dsap == 0xAA && ls_hdr->ssap == 0xAA) || - (ls_hdr->dsap == 0xAB && ls_hdr->ssap == 0xAB)) - */ - eth_type = be16_to_cpu(ls_hdr->eth_type); + + if (((ls_hdr->dsap == 0xAA) && (ls_hdr->ssap == 0xAA)) || + ((ls_hdr->dsap == 0xAB) && (ls_hdr->ssap == 0xAB))) + eth_type = be16_to_cpu(ls_hdr->eth_type); } - if ((eth_type == ETH_P_IP) && (ip_ver == HDD_IPA_IPV4)) - ret = 1; - else if ((eth_type == ETH_P_IPV6) && (ip_ver == HDD_IPA_IPV6)) + if (((eth_type == ETH_P_IP) && (ip_ver == HDD_IPA_IPV4)) || + ((eth_type == ETH_P_IPV6) && (ip_ver == HDD_IPA_IPV6))) ret = 1; if (ret != 1) @@ -550,7 +567,7 @@ static void hdd_ipa_process_evt(int evt, void *priv) *done_desc_head, *done_desc, *tmp; hdd_adapter_t *adap_dev = NULL; adf_nbuf_t buf, next_buf; - uint8_t dev_id, cur_cnt = 0, iftype; + uint8_t cur_cnt = 0; switch (evt) { case HDD_IPA_RXT_EVT: @@ -571,8 +588,6 @@ static void hdd_ipa_process_evt(int evt, void *priv) } return; } - dev_id = adap_dev->dev->ifindex; - iftype = adap_dev->wdev.iftype; /* send_desc_head is a anchor node */ send_desc_head = hdd_ipa_get_desc_from_freeq(); if (!send_desc_head) { @@ -625,19 +640,8 @@ static void hdd_ipa_process_evt(int evt, void *priv) } skb_push(buf, HDD_IPA_WLAN_HDR_ONLY_LEN); - memset(buf->data, 0, HDD_IPA_WLAN_HDR_ONLY_LEN); - buf->data[HDD_IPA_WLAN_HDR_STA_ID_OFFSET] = rxt->sta_id; - buf->data[HDD_IPA_WLAN_HDR_DEV_INFO_OFFSET] |= - dev_id & HDD_IPA_WLAN_HDR_DEV_ID_MASK; - if (iftype == NL80211_IFTYPE_AP || - iftype == NL80211_IFTYPE_P2P_GO) { - buf->data[HDD_IPA_WLAN_HDR_DEV_INFO_OFFSET] |= - HDD_IPA_WLAN_HDR_DEV_TYPE_AP; - } else { - buf->data[HDD_IPA_WLAN_HDR_DEV_INFO_OFFSET] |= - HDD_IPA_WLAN_HDR_DEV_TYPE_STA; - } - + /* vos_mem_zero(((struct ipa_rx_hdr *)(buf->data))->hdr, HDD_IPA_WLAN_HDR_ONLY_LEN); */ + ((struct ipa_rx_hdr *)(buf->data))->hdr[HDD_IPA_WLAN_HDR_STA_ID_OFFSET] = rxt->sta_id; send_desc = hdd_ipa_get_desc_from_freeq(); if (send_desc) { send_desc->priv = buf; @@ -697,7 +701,7 @@ static void hdd_ipa_process_evt(int evt, void *priv) HDD_IPA_RM_GRANT_PENDING); hdd_ipa_rm_request(hdd_ipa); } - //hdd_ipa_rm_request can immediately grant so check again. + /* hdd_ipa_rm_request can immediately grant so check again. */ if (atomic_read(&hdd_ipa->rm_state) == HDD_IPA_RM_GRANT_PENDING) { spin_lock_bh(&hdd_ipa->q_lock); @@ -706,6 +710,11 @@ static void hdd_ipa_process_evt(int evt, void *priv) /* return anchor node */ list_add_tail(&send_desc_head->link, &hdd_ipa->free_desc_head); + hdd_ipa->stats.freeq_cnt++; +#ifdef HDD_IPA_EXTRA_DP_COUNTERS + hdd_ipa->stats.rx_ipa_dh_reclaim++; + hdd_ipa->stats.freeq_reclaim++; +#endif spin_unlock_bh(&hdd_ipa->q_lock); #ifdef HDD_IPA_EXTRA_DP_COUNTERS hdd_ipa->stats.rx_ipa_rm_qued += cur_cnt; @@ -791,6 +800,7 @@ VOS_STATUS hdd_ipa_process_rxt(v_VOID_t *vosContext, adf_nbuf_t rx_buf_list, rxt.sta_id = sta_id; rxt.rx_buf_list = rx_buf_list; + hdd_ipa_process_evt(HDD_IPA_RXT_EVT, &rxt); return VOS_STATUS_SUCCESS; @@ -804,88 +814,174 @@ void hdd_ipa_w2i_cb(void *priv, enum ipa_dp_evt_type evt, unsigned long data) uint8_t client; struct ipa_tx_data_desc *done_desc_head; adf_nbuf_t skb; - uint8_t sta_id, dev_id; + uint8_t sta_id; hdd_adapter_t *adap_dev=NULL; client = *((uint8_t *)priv); - if (client != hdd_ipa_pipe_client[HDD_IPA_RX_PIPE]) { + if (client != hdd_pipe_id_2_ipa_client_id[HDD_IPA_RX_PIPE]) { HDD_IPA_LOG(VOS_TRACE_LEVEL_ERROR, "w2i cb wrong pipe: %d %x %x", client, priv, - &hdd_ipa_pipe_client[HDD_IPA_RX_PIPE]); + &hdd_pipe_id_2_ipa_client_id[HDD_IPA_RX_PIPE]); return; } switch (evt) { case IPA_RECEIVE: skb = (adf_nbuf_t) data; - sta_id = skb->data[HDD_IPA_WLAN_HDR_STA_ID_OFFSET]; - dev_id = skb->data[HDD_IPA_WLAN_HDR_DEV_INFO_OFFSET]; + sta_id = ((struct ipa_rx_hdr *)(skb->data))->hdr[HDD_IPA_WLAN_HDR_STA_ID_OFFSET]; + + HDD_IPA_LOG(VOS_TRACE_LEVEL_DEBUG, "w2i -- skb:0x%p: %02x %02x %02x %02x %02x %02x %02x %02x", skb, + skb->data[0], skb->data[1], skb->data[2], skb->data[3], + skb->data[4], skb->data[5], skb->data[6], skb->data[7]); + + skb_pull(skb, HDD_IPA_WLAN_HDR_ONLY_LEN); + if (sta_id < ARRAY_SIZE(hdd_ipa->hdd_ctx->sta_to_adapter)) { adap_dev = hdd_ipa->hdd_ctx->sta_to_adapter[sta_id]; } else { HDD_IPA_LOG(VOS_TRACE_LEVEL_ERROR, - "w2i cb: wrong sta_id: %d", sta_id); + "w2i cb: wrong sta_id: %d", sta_id); } - skb_pull(skb, HDD_IPA_WLAN_HDR_ONLY_LEN); + hdd_ipa->stats.rx_ipa_excep++; hdd_ipa_send_skb_to_network(skb, adap_dev); break; case IPA_WRITE_DONE: done_desc_head = (struct ipa_tx_data_desc *)data; hdd_ipa_w2i_write_done_handler(done_desc_head); - break; + break; + default: + HDD_IPA_LOG(VOS_TRACE_LEVEL_ERROR, + "w2i cb wrong event: 0x%x", evt); + return; } } void hdd_ipa_nbuf_cb(adf_nbuf_t skb) { - ipa_free_skb(skb); + struct hdd_ipa_priv *hdd_ipa = ghdd_ipa; + + /* TX COMP counter at frame free location. */ + hdd_ipa->stats.tx_comp_cnt++; + + HDD_IPA_LOG(VOS_TRACE_LEVEL_DEBUG, "0x%p", NBUF_OWNER_PRIV_DATA(skb)); + ipa_free_skb((struct ipa_rx_data *) NBUF_OWNER_PRIV_DATA(skb)); } -void hdd_ipa_tx_process(adf_nbuf_t skb, uint8_t ac) +#ifdef WLAN_TX_MUL +void hdd_ipa_i2w_cb(void *priv, enum ipa_dp_evt_type evt, unsigned long data) { struct hdd_ipa_priv *hdd_ipa = ghdd_ipa; - uint8_t sta_id; - hdd_adapter_t *adap_dev; + struct ipa_rx_data_mul *ipa_tx_desc; + adf_nbuf_t skb; + uint8_t client, pipe_id; - skb->queue_mapping = ac; - sta_id = skb->data[HDD_IPA_WLAN_HDR_STA_ID_OFFSET]; - adap_dev = hdd_ipa->hdd_ctx->sta_to_adapter[sta_id]; - if (!adap_dev - || (adap_dev && adap_dev->magic != WLAN_HDD_ADAPTER_MAGIC)) { - HDD_IPA_LOG(VOS_TRACE_LEVEL_ERROR, "Invalid sta_id %d", sta_id); - ipa_free_skb(skb); - return; + if (evt == IPA_RECEIVE) { + client = *((uint8_t *)priv); + struct list_head *head = (struct list_head *)data; + + pipe_id = ipa_client_id_2_hdd_pipe_id[client]; + + if (hdd_ipa->pipe_to_vdev[pipe_id] == NULL) { + HDD_IPA_LOG(VOS_TRACE_LEVEL_FATAL, "TLSHIM tx fail (vdev=NULL)"); + /* TODO: need to free ipa_desc and skb here */ + return; + } + + list_for_each_entry(ipa_tx_desc, head, link) { + if (ipa_tx_desc->dd == NULL) + break; + + /* TX frame Counter at HDD CB function called by IPA loopback, to push lower layer.*/ + hdd_ipa->stats.tx_ipa_recv++; + + skb = ipa_tx_desc->dd->skb; + + /* skb->dev = ipa_client_id_2_hdd_pipe_id[client]; */ + adf_os_mem_set(skb->cb, 0, sizeof(skb->cb)); + NBUF_OWNER_ID(skb) = IPA_NBUF_OWNER_ID; + NBUF_CALLBACK_FN(skb) = hdd_ipa_nbuf_cb; + NBUF_MAPPED_PADDR_LO(skb) = ipa_tx_desc->dd->dma_addr; + + NBUF_OWNER_PRIV_DATA(skb) = (unsigned long)ipa_tx_desc->dd; + + HDD_IPA_LOG(VOS_TRACE_LEVEL_DEBUG, "skb:0x%p: %02x %02x %02x %02x %02x %02x %02x %02x", skb, + skb->data[0], skb->data[1], skb->data[2], skb->data[3], + skb->data[4], skb->data[5], skb->data[6], skb->data[7]); + + skb = WLANTL_SendIPA_DataFrame(hdd_ipa->hdd_ctx->pvosContext, hdd_ipa->pipe_to_vdev[pipe_id], + ipa_tx_desc->dd->skb); + if (skb) { + HDD_IPA_LOG(VOS_TRACE_LEVEL_FATAL, "TLSHIM tx fail"); + ipa_free_skb(ipa_tx_desc->dd); + continue; + } + } + ipa_free_desc(data); + + } else { + /* HDD_IPA_LOG(VOS_TRACE_LEVEL_ERROR, "i2w cb wrong evt: %d", evt); + HDD_IPA_LOG(VOS_TRACE_LEVEL_ERROR, "Testing hack code data path"); */ + skb = (adf_nbuf_t) data; + dev_kfree_skb_any(skb); } - skb->dev = adap_dev->dev; - NBUF_OWNER_ID(skb) = IPA_NBUF_OWNER_ID; - NBUF_CALLBACK_FN(skb) = hdd_ipa_nbuf_cb; - skb_pull(skb, HDD_IPA_WLAN_HDR_ONLY_LEN); - (adap_dev->dev->netdev_ops->ndo_start_xmit)(skb, adap_dev->dev); } +#else + void hdd_ipa_i2w_cb(void *priv, enum ipa_dp_evt_type evt, unsigned long data) { struct hdd_ipa_priv *hdd_ipa = ghdd_ipa; + struct ipa_rx_data *ipa_tx_desc; adf_nbuf_t skb; - uint8_t client; - uint8_t i, ac = HDD_LINUX_AC_BE; + uint8_t client, pipe_id; if (evt == IPA_RECEIVE) { + /* TX frame Counter at HDD CB function called by IPA loopback, to push lower layer */ + hdd_ipa->stats.tx_ipa_recv++; + client = *((uint8_t *)priv); - skb = (adf_nbuf_t) data; - for (i = 0; i < HDD_IPA_MAX_TX_PIPE_MAP; i++) { - if (client == hdd_ipa_tx_pipe_map_info[i].client) { - ac = hdd_ipa_tx_pipe_map_info[i].ac; - break; - } + ipa_tx_desc = (struct ipa_rx_data *)data; + skb = ipa_tx_desc->skb; + + adf_os_mem_set(skb->cb, 0, sizeof(skb->cb)); + NBUF_OWNER_ID(skb) = IPA_NBUF_OWNER_ID; + NBUF_CALLBACK_FN(skb) = hdd_ipa_nbuf_cb; + NBUF_MAPPED_PADDR_LO(skb) = ipa_tx_desc->dma_addr; + + NBUF_OWNER_PRIV_DATA(skb) = data; + + HDD_IPA_LOG(VOS_TRACE_LEVEL_DEBUG, "0x%p", NBUF_OWNER_PRIV_DATA(skb)); + HDD_IPA_LOG(VOS_TRACE_LEVEL_DEBUG, "skb:0x%p: %02x %02x %02x %02x %02x %02x %02x %02x", skb, + skb->data[0], skb->data[1], skb->data[2], skb->data[3], + skb->data[4], skb->data[5], skb->data[6], skb->data[7]); + + pipe_id = ipa_client_id_2_hdd_pipe_id[client]; + + HDD_IPA_LOG(VOS_TRACE_LEVEL_DEBUG, "client=%d, pipe_to_vdev[%d]=0x%x", client, pipe_id, hdd_ipa->pipe_to_vdev[pipe_id]); + + if (hdd_ipa->pipe_to_vdev[pipe_id] == NULL) { + HDD_IPA_LOG(VOS_TRACE_LEVEL_FATAL, "TLSHIM tx fail (pipe_to_vdev[%d]=NULL)", pipe_id); + ipa_free_skb(ipa_tx_desc); + return; } - hdd_ipa->stats.tx_ipa_recv++; - hdd_ipa_tx_process(skb, ac); - } else - HDD_IPA_LOG(VOS_TRACE_LEVEL_ERROR, "i2w cb wrong evt: %d", evt); + + skb = WLANTL_SendIPA_DataFrame(hdd_ipa->hdd_ctx->pvosContext, hdd_ipa->pipe_to_vdev[pipe_id], + ipa_tx_desc->skb); + if (skb) { + HDD_IPA_LOG(VOS_TRACE_LEVEL_FATAL, "TLSHIM tx fail"); + ipa_free_skb(ipa_tx_desc); + return; + } + } else { + /* HDD_IPA_LOG(VOS_TRACE_LEVEL_ERROR, "i2w cb wrong evt: %d", evt); + HDD_IPA_LOG(VOS_TRACE_LEVEL_ERROR, "Testing hack code data path"); */ + skb = (adf_nbuf_t) data; + dev_kfree_skb_any(skb); + } } +#endif static int hdd_ipa_setup_sys_pipe(struct hdd_ipa_priv *hdd_ipa) { @@ -896,9 +992,9 @@ static int hdd_ipa_setup_sys_pipe(struct hdd_ipa_priv *hdd_ipa) for (i = 0; i < HDD_IPA_RX_PIPE; i++) { ipa = &hdd_ipa->sys_pipe[i].ipa_sys_params; - ipa->client = hdd_ipa_pipe_client[i]; + ipa->client = hdd_pipe_id_2_ipa_client_id[i]; ipa->desc_fifo_sz = hdd_ipa->hdd_ctx->cfg_ini->IpaDescSize; - ipa->priv = &hdd_ipa_pipe_client[i]; + ipa->priv = &hdd_pipe_id_2_ipa_client_id[i]; ipa->notify = hdd_ipa_i2w_cb; ipa->ipa_ep_cfg.hdr.hdr_len = HDD_IPA_WLAN_TX_HDR_LEN; @@ -914,9 +1010,9 @@ static int hdd_ipa_setup_sys_pipe(struct hdd_ipa_priv *hdd_ipa) ipa = &hdd_ipa->sys_pipe[HDD_IPA_RX_PIPE].ipa_sys_params; - ipa->client = hdd_ipa_pipe_client[HDD_IPA_RX_PIPE]; - ipa->desc_fifo_sz = hdd_ipa->hdd_ctx->cfg_ini->IpaDescSize; - ipa->priv = &hdd_ipa_pipe_client[HDD_IPA_RX_PIPE]; + ipa->client = hdd_pipe_id_2_ipa_client_id[HDD_IPA_RX_PIPE]; + ipa->desc_fifo_sz = hdd_ipa->hdd_ctx->cfg_ini->IpaDescSize + sizeof(struct sps_iovec); /* To make sure total # of desc is 1 less than the desc FIFO size */ + ipa->priv = &hdd_pipe_id_2_ipa_client_id[HDD_IPA_RX_PIPE]; ipa->notify = hdd_ipa_w2i_cb; ipa->ipa_ep_cfg.nat.nat_en = IPA_BYPASS_NAT; @@ -952,10 +1048,8 @@ void hdd_ipa_teardown_sys_pipe(struct hdd_ipa_priv *hdd_ipa) } } -int hdd_ipa_register_interface(struct hdd_ipa_priv *hdd_ipa, uint8_t iftype, - uint8_t sta_id, const char *ifname) +int hdd_ipa_register_interface(struct hdd_ipa_priv *hdd_ipa, uint8_t sta_id, const char *ifname) { -#define HDD_IPA_TOS_MASK 0xE0 struct ipa_tx_intf tx_intf; struct ipa_rx_intf rx_intf; struct ipa_ioc_tx_intf_prop *tx_prop = NULL; @@ -964,23 +1058,21 @@ int hdd_ipa_register_interface(struct hdd_ipa_priv *hdd_ipa, uint8_t iftype, char ipv4_hdr_name[IPA_RESOURCE_NAME_MAX]; char ipv6_hdr_name[IPA_RESOURCE_NAME_MAX]; - int i, j, ip_max = HDD_IPA_IPV4; + int ip_max = HDD_IPA_IPV4; int ret = 0; if (hdd_ipa_is_ipv6_enabled(hdd_ipa)) ip_max = HDD_IPA_IPV6; /* Allocate TX properties for TOS categories, 1 each for IPv4 & IPv6 */ - tx_prop = hdd_ipa_kzalloc(sizeof(struct ipa_ioc_tx_intf_prop) * - HDD_IPA_MAX_TX_PIPE_MAP * ip_max); + tx_prop = hdd_ipa_kzalloc(sizeof(struct ipa_ioc_tx_intf_prop) * ip_max); if (!tx_prop) { HDD_IPA_LOG(VOS_TRACE_LEVEL_ERROR, "ENOMEM"); goto register_interface_fail; } /* Allocate RX properties, 1 each for IPv4 & IPv6 */ - rx_prop = hdd_ipa_kzalloc(sizeof(struct ipa_ioc_rx_intf_prop) - * ip_max); + rx_prop = hdd_ipa_kzalloc(sizeof(struct ipa_ioc_rx_intf_prop) * ip_max); if (!rx_prop) { HDD_IPA_LOG(VOS_TRACE_LEVEL_ERROR, "ENOMEM"); goto register_interface_fail; @@ -990,72 +1082,28 @@ int hdd_ipa_register_interface(struct hdd_ipa_priv *hdd_ipa, uint8_t iftype, snprintf(ipv4_hdr_name, IPA_RESOURCE_NAME_MAX, "%s%s", ifname, HDD_IPA_IPV4_NAME_EXT); + snprintf(ipv6_hdr_name, IPA_RESOURCE_NAME_MAX, "%s%s", + ifname, HDD_IPA_IPV6_NAME_EXT); + rx_prop[IPA_IP_v4].ip = IPA_IP_v4; + rx_prop[IPA_IP_v4].src_pipe = IPA_CLIENT_WLAN1_PROD; + rx_intf.num_props++; if (hdd_ipa_is_ipv6_enabled(hdd_ipa)) { - snprintf(ipv6_hdr_name, IPA_RESOURCE_NAME_MAX, "%s%s", - ifname, HDD_IPA_IPV6_NAME_EXT); rx_prop[IPA_IP_v6].ip = IPA_IP_v6; + rx_prop[IPA_IP_v6].src_pipe = IPA_CLIENT_WLAN1_PROD; + rx_intf.num_props++; } - /* - TOS value: 1, 2 - > Maps to BK pipe [WLAN1_CONS] - TOS value: 0, 3 - > Maps to BE pipe [WLAN2_CONS] - TOS value: 4, 5 - > Maps to VI pipe [WLAN3_CONS] - TOS Value: 6, 7 - > Maps to VO pipe [WLAN4_CONS] - */ - - /* - IP-TOS - 8bits - : DSCP(6-bits) ECN(2-bits) - : DSCP - P2 P1 P0 X X X - where (P2 P1 P0) form 802.1D - So shifting tos_value by 5 bits before passing to IPA. Also IPA - required mask to be set for 3 MSB bits. - */ - - for (i = 0; i < HDD_IPA_MAX_TX_PIPE_MAP; i++) { - tx_prop[i].ip = IPA_IP_v4; - tx_prop[i].attrib.attrib_mask = IPA_FLT_TOS_MASKED; - tx_prop[i].attrib.tos_value = - hdd_ipa_tx_pipe_map_info[i].tos_value << 5; - tx_prop[i].attrib.tos_mask = HDD_IPA_TOS_MASK; - tx_prop[i].dst_pipe = hdd_ipa_tx_pipe_map_info[i].client; - strlcpy(tx_prop[i].hdr_name, ipv4_hdr_name, - IPA_RESOURCE_NAME_MAX); - tx_intf.num_props++; - if (hdd_ipa_is_ipv6_enabled(hdd_ipa)) { - j = i + HDD_IPA_MAX_TX_PIPE_MAP; - - tx_prop[j].ip = IPA_IP_v6; - tx_prop[j].attrib.attrib_mask = IPA_FLT_TOS_MASKED; - tx_prop[j].attrib.tos_value = - hdd_ipa_tx_pipe_map_info[i].tos_value << 5; - tx_prop[j].attrib.tos_mask = HDD_IPA_TOS_MASK; - tx_prop[j].dst_pipe = - hdd_ipa_tx_pipe_map_info[i].client; - strlcpy(tx_prop[j].hdr_name, ipv6_hdr_name, - IPA_RESOURCE_NAME_MAX); - tx_intf.num_props++; - } - } - - for (i = 0; i < ip_max; i++) { - rx_prop[i].attrib.attrib_mask = IPA_FLT_META_DATA; - if (iftype == NL80211_IFTYPE_AP || - iftype == NL80211_IFTYPE_P2P_GO) { - rx_prop[i].attrib.meta_data = - HDD_IPA_WLAN_HDR_DEV_TYPE_AP - << ((HDD_IPA_WLAN_HDR_DEV_INFO_OFFSET-1) * 8); - } else { - rx_prop[i].attrib.meta_data = - HDD_IPA_WLAN_HDR_DEV_TYPE_STA - << ((HDD_IPA_WLAN_HDR_DEV_INFO_OFFSET-1) * 8); - } - rx_prop[i].attrib.meta_data_mask = - HDD_IPA_WLAN_HDR_DEV_TYPE_MASK - << ((HDD_IPA_WLAN_HDR_DEV_INFO_OFFSET-1) * 8); - rx_prop[i].src_pipe = IPA_CLIENT_WLAN1_PROD; - rx_intf.num_props++; + tx_prop[IPA_IP_v4].ip = IPA_IP_v4; + tx_prop[IPA_IP_v4].dst_pipe = hdd_pipe_id_2_ipa_client_id[wlan_sta_id_2_hdd_pipe_id[sta_id]]; + strlcpy(tx_prop[IPA_IP_v4].hdr_name, ipv4_hdr_name, IPA_RESOURCE_NAME_MAX); + tx_intf.num_props++; + if (hdd_ipa_is_ipv6_enabled(hdd_ipa)) { + tx_prop[IPA_IP_v6].ip = IPA_IP_v6; + tx_prop[IPA_IP_v6].dst_pipe = hdd_pipe_id_2_ipa_client_id[wlan_sta_id_2_hdd_pipe_id[sta_id]]; + strlcpy(tx_prop[IPA_IP_v6].hdr_name, ipv6_hdr_name, + IPA_RESOURCE_NAME_MAX); + tx_intf.num_props++; } tx_intf.prop = tx_prop; @@ -1070,14 +1118,15 @@ register_interface_fail: return ret; } -static int hdd_ipa_add_header_info(uint8_t sta_id, uint8_t *mac_addr) +static int hdd_ipa_add_header_info(enum ipa_wlan_event type, uint8_t sta_id, uint8_t *mac_addr) { struct hdd_ipa_priv *hdd_ipa = ghdd_ipa; - uint8_t dev_id, wlan_iftype; char *ifname; struct ipa_ioc_add_hdr *ipahdr = NULL; - int ret = -EINVAL; + int i, ret = -EINVAL; hdd_adapter_t *adap_dev; + struct ol_txrx_pdev_t *pdev; + struct ol_txrx_vdev_t *vdev; adap_dev = hdd_ipa->hdd_ctx->sta_to_adapter[sta_id]; if (!adap_dev) { @@ -1085,12 +1134,40 @@ static int hdd_ipa_add_header_info(uint8_t sta_id, uint8_t *mac_addr) goto add_header_info_ctx_fail; } - dev_id = adap_dev->dev->ifindex; - wlan_iftype = adap_dev->wdev.iftype; ifname = adap_dev->dev->name; - HDD_IPA_LOG(VOS_TRACE_LEVEL_INFO, "Mode: %d Add Partial hdr: %s, %p\n", - wlan_iftype, ifname, mac_addr); + for (i = 0; i < HDD_IPA_MAX_PIPE; i++) + hdd_ipa->pipe_to_vdev[i] = NULL; + + if (wlan_sta_id_2_hdd_pipe_id[sta_id] == 0xFF) { + switch (type) { + case WLAN_AP_CONNECT: + wlan_sta_id_2_hdd_pipe_id[sta_id] = HDD_IPA_TX_WLAN0_PIPE; /* TODO: need to expand to AP+AP */ + break; + case WLAN_STA_CONNECT: + /* Register pipe_to_vdev for STA mode */ + pdev = ((pVosContextType)(WLAN_HDD_GET_CTX(adap_dev)->pvosContext))->pdev_txrx_ctx; + /* find the "vdev" this STA interface belongs to */ + TAILQ_FOREACH(vdev, &pdev->vdev_list, vdev_list_elem) { + if (adf_os_mem_cmp(mac_addr, vdev->mac_addr.raw, IEEE80211_ADDR_LEN) == 0) { + hdd_ipa->pipe_to_vdev[HDD_IPA_TX_WLAN2_PIPE] = vdev; + break; + } + } + + wlan_sta_id_2_hdd_pipe_id[sta_id] = HDD_IPA_TX_WLAN2_PIPE; /* STA Mode */ + break; + default: + break; + } + } + + HDD_IPA_LOG(VOS_TRACE_LEVEL_DEBUG, " wlan_sta_id_2_hdd_pipe_id[%d]: %d", + sta_id, wlan_sta_id_2_hdd_pipe_id[sta_id]); + + + HDD_IPA_LOG(VOS_TRACE_LEVEL_INFO, "ifindex: %d Add Partial hdr: %s, %p\n", + sta_id, ifname, mac_addr); if (ifname == NULL) { HDD_IPA_LOG(VOS_TRACE_LEVEL_INFO, "ifname NULL"); goto add_header_info_ctx_fail; @@ -1107,29 +1184,19 @@ static int hdd_ipa_add_header_info(uint8_t sta_id, uint8_t *mac_addr) ipahdr->commit = 0; ipahdr->num_hdrs = 1; /* Set the Source MAC */ - memcpy(ipahdr->hdr[0].hdr, ipa_set_tx_hdr, HDD_IPA_WLAN_TX_HDR_LEN); - memcpy(&ipahdr->hdr[0].hdr[HDD_IPA_WLAN_HDR_SRC_MAC_OFFSET], mac_addr, + memcpy(ipahdr->hdr[0].hdr, (uint8_t *)&ipa_set_tx_hdr, HDD_IPA_WLAN_TX_HDR_LEN); + memcpy((uint8_t *)(((struct ipa_tx_hdr *)(ipahdr->hdr[0].hdr))->eth.h_source), mac_addr, ETH_ALEN); - /* Check the interface is AP OR STA mode, and set the station ID */ - ipahdr->hdr[0].hdr[HDD_IPA_WLAN_HDR_DEV_INFO_OFFSET] |= - dev_id & HDD_IPA_WLAN_HDR_DEV_ID_MASK; - ipahdr->hdr[0].hdr[HDD_IPA_WLAN_HDR_STA_ID_OFFSET] = sta_id; - if (wlan_iftype == NL80211_IFTYPE_AP || - wlan_iftype == NL80211_IFTYPE_P2P_GO) { - ipahdr->hdr[0].hdr[HDD_IPA_WLAN_HDR_DEV_INFO_OFFSET] |= - HDD_IPA_WLAN_HDR_DEV_TYPE_AP; - } else { - ipahdr->hdr[0].hdr[HDD_IPA_WLAN_HDR_DEV_INFO_OFFSET] |= - HDD_IPA_WLAN_HDR_DEV_TYPE_STA; - } - snprintf(ipahdr->hdr[0].name, IPA_RESOURCE_NAME_MAX, "%s%s", ifname, HDD_IPA_IPV4_NAME_EXT); ipahdr->hdr[0].hdr_len = HDD_IPA_WLAN_TX_HDR_LEN; ipahdr->hdr[0].is_partial = HDD_IPA_WLAN_HDR_PARTIAL; ipahdr->hdr[0].hdr_hdl = 0; + /* Set the type to IPV4 in the header*/ + ((struct ipa_tx_hdr *)(ipahdr->hdr[0].hdr))->llc_snap.eth_type = cpu_to_be16(ETH_P_IP); + ret = ipa_add_hdr(ipahdr); if (ret) { @@ -1144,8 +1211,7 @@ static int hdd_ipa_add_header_info(uint8_t sta_id, uint8_t *mac_addr) snprintf(ipahdr->hdr[0].name, IPA_RESOURCE_NAME_MAX, "%s%s", ifname, HDD_IPA_IPV6_NAME_EXT); /* Set the type to IPV6 in the header*/ - ipahdr->hdr[0].hdr[HDD_IPA_WLAN_TX_HDR_IP_VER_OFFSET] = 0x86; - ipahdr->hdr[0].hdr[HDD_IPA_WLAN_TX_HDR_IP_VER_OFFSET + 1] = 0xdd; + ((struct ipa_tx_hdr *)(ipahdr->hdr[0].hdr))->llc_snap.eth_type = cpu_to_be16(ETH_P_IPV6); ret = ipa_add_hdr(ipahdr); if (ret) { @@ -1158,7 +1224,7 @@ static int hdd_ipa_add_header_info(uint8_t sta_id, uint8_t *mac_addr) ipahdr->hdr[0].name, ipahdr->hdr[0].hdr_hdl); } /* Configure the TX and RX pipes filter rules */ - ret = hdd_ipa_register_interface(hdd_ipa, wlan_iftype, sta_id, ifname); + ret = hdd_ipa_register_interface(hdd_ipa, sta_id, ifname); add_header_info_fail: adf_os_mem_free(ipahdr); @@ -1206,6 +1272,8 @@ void hdd_ipa_clean_hdr(hdd_adapter_t *adap_dev, uint8_t sta_id) int ret; char name_ipa[IPA_RESOURCE_NAME_MAX]; + wlan_sta_id_2_hdd_pipe_id[sta_id] = 0xFF; + /* Remove the headers */ snprintf(name_ipa, IPA_RESOURCE_NAME_MAX, "%s%s", adap_dev->dev->name, HDD_IPA_IPV4_NAME_EXT); @@ -1233,6 +1301,7 @@ static void hdd_ipa_msg_free_fn(void *buff, uint32_t len, uint32_t type) int hdd_ipa_wlan_evt(void *Adapter, uint8_t sta_id, enum ipa_wlan_event type, uint8_t *mac_addr) { + struct hdd_ipa_priv *hdd_ipa = ghdd_ipa; hdd_adapter_t *adap_dev = Adapter; struct ipa_msg_meta meta; struct ipa_wlan_msg *msg; @@ -1251,7 +1320,7 @@ int hdd_ipa_wlan_evt(void *Adapter, uint8_t sta_id, __stringify(WLAN_STA_DISCONNECT), __stringify(WLAN_CLIENT_CONNECT_EX), }; - + struct ol_txrx_peer_t *peer; HDD_IPA_LOG(VOS_TRACE_LEVEL_INFO, "%s: %s evt, MAC: %pM sta_id: %d", adap_dev->dev->name, hdd_ipa_event_name[type], @@ -1265,33 +1334,42 @@ int hdd_ipa_wlan_evt(void *Adapter, uint8_t sta_id, switch (type) { case WLAN_STA_CONNECT: case WLAN_AP_CONNECT: - hdd_ipa_add_header_info(sta_id, mac_addr); + hdd_ipa_add_header_info(type, sta_id, mac_addr); break; case WLAN_STA_DISCONNECT: + hdd_ipa->pipe_to_vdev[HDD_IPA_TX_WLAN2_PIPE] = NULL; case WLAN_AP_DISCONNECT: hdd_ipa_clean_hdr(adap_dev, sta_id); break; case WLAN_CLIENT_CONNECT_EX: + /* Register pipe map to txrx_vdev into hdd_ipa */ + peer = ol_txrx_peer_find_by_local_id(((pVosContextType)(WLAN_HDD_GET_CTX(adap_dev))->pvosContext)->pdev_txrx_ctx, sta_id); + if (!peer) { + HDD_IPA_LOG(VOS_TRACE_LEVEL_ERROR, "Invalid peer"); + return -EINVAL; + } + HDD_IPA_LOG(VOS_TRACE_LEVEL_INFO, "%d %d", adap_dev->dev->ifindex, sta_id); + if (hdd_ipa->pipe_to_vdev[HDD_IPA_TX_WLAN0_PIPE] == NULL) { + hdd_ipa->pipe_to_vdev[HDD_IPA_TX_WLAN0_PIPE] = peer->vdev; /* TODO: need to expand to AP+AP */ + } + meta.msg_type = type; meta.msg_len = (sizeof(struct ipa_wlan_msg_ex) + - sizeof(struct ipa_wlan_hdr_attrib_val) * 2); + sizeof(struct ipa_wlan_hdr_attrib_val)); msg_ex = hdd_ipa_kzalloc (meta.msg_len); if (msg_ex == NULL) { HDD_IPA_LOG(VOS_TRACE_LEVEL_INFO, "ENOMEM"); return -ENOMEM; } strlcpy(msg_ex->name, adap_dev->dev->name, IPA_RESOURCE_NAME_MAX); - msg_ex->num_of_attribs = 2; + msg_ex->num_of_attribs = 1; msg_ex->attribs[0].attrib_type = WLAN_HDR_ATTRIB_MAC_ADDR; msg_ex->attribs[0].offset = HDD_IPA_WLAN_HDR_DES_MAC_OFFSET; memcpy(msg_ex->attribs[0].u.mac_addr, mac_addr, IPA_MAC_ADDR_SIZE); - msg_ex->attribs[1].attrib_type = WLAN_HDR_ATTRIB_STA_ID; - msg_ex->attribs[1].offset = HDD_IPA_WLAN_HDR_STA_ID_OFFSET; - msg_ex->attribs[1].u.sta_id = sta_id; ret = ipa_send_msg(&meta, msg_ex, hdd_ipa_msg_free_fn); if (ret) { @@ -1302,6 +1380,9 @@ int hdd_ipa_wlan_evt(void *Adapter, uint8_t sta_id, } return 0; case WLAN_CLIENT_DISCONNECT: + /* TODO: need to expand to AP+AP */ + /* This will remove the vdev for rest of the connected clients */ + //hdd_ipa->pipe_to_vdev[HDD_IPA_TX_WLAN0_PIPE] = NULL; break; default: @@ -1337,7 +1418,7 @@ static int hdd_ipa_rx_pipe_desc_alloc(void) { struct hdd_ipa_priv *hdd_ipa = ghdd_ipa; uint32_t i, max_desc_cnt; - int ret =0; + int ret = 0; struct ipa_tx_data_desc *tmp_desc; hdd_ipa->hw_desc_cnt = IPA_NUM_OF_FIFO_DESC( @@ -1460,11 +1541,6 @@ static ssize_t hdd_ipa_debugfs_read_ipa_stats(struct file *file, "RXT 5 skb:", hdd_ipa->stats.rxt_5); len += scnprintf(buf + len, buf_len - len, "%20s %10llu\n\n", "RXT > 5 skb:", hdd_ipa->stats.rxt_6); -#endif - len += scnprintf(buf + len, buf_len - len, "%20s %10llu\n\n", - "IPA TX Recieve:", hdd_ipa->stats.tx_ipa_recv); - -#ifdef HDD_IPA_EXTRA_DP_COUNTERS len += scnprintf(buf + len, buf_len - len, "%20s %10llu\n", "Free Queue use:", hdd_ipa->stats.freeq_use); len += scnprintf(buf + len, buf_len - len, "%20s %10llu\n", @@ -1474,7 +1550,14 @@ static ssize_t hdd_ipa_debugfs_read_ipa_stats(struct file *file, "Free Queue Empty:", hdd_ipa->stats.freeq_empty); len += scnprintf(buf + len, buf_len - len, "%20s %10llu\n\n", "Free Queue cnt:", hdd_ipa->stats.freeq_cnt); - + len += scnprintf(buf + len, buf_len - len, "%20s %10llu\n\n", + "IPA LB Count:", hdd_ipa->stats.ipa_lb_cnt); + len += scnprintf(buf + len, buf_len - len, "%20s %10llu\n\n", + "IPA TX Recieve:", hdd_ipa->stats.tx_ipa_recv); + len += scnprintf(buf + len, buf_len - len, "%20s %10llu\n\n", + "TX COMP Count:", hdd_ipa->stats.tx_comp_cnt); + len += scnprintf(buf + len, buf_len - len, "%20s %10llu\n\n", + "TX DP Err Count:", hdd_ipa->stats.tx_dp_err_cnt); if (len > buf_len) len = buf_len; @@ -1485,10 +1568,10 @@ static ssize_t hdd_ipa_debugfs_read_ipa_stats(struct file *file, } static const struct file_operations fops_ipa_stats = { - .read = hdd_ipa_debugfs_read_ipa_stats, - .open = simple_open, - .owner = THIS_MODULE, - .llseek = default_llseek, + .read = hdd_ipa_debugfs_read_ipa_stats, + .open = simple_open, + .owner = THIS_MODULE, + .llseek = default_llseek, }; @@ -1497,7 +1580,7 @@ int hdd_ipa_debugfs_init(struct hdd_ipa_priv *hdd_ipa) #ifdef WLAN_OPEN_SOURCE hdd_ipa->debugfs_dir = debugfs_create_dir("cld", hdd_ipa->hdd_ctx->wiphy->debugfsdir); - if(!hdd_ipa->debugfs_dir) + if (!hdd_ipa->debugfs_dir) return -ENOMEM; debugfs_create_file("ipa-stats", S_IRUSR, hdd_ipa->debugfs_dir, @@ -1517,10 +1600,13 @@ int hdd_ipa_debugfs_init(struct hdd_ipa_priv *hdd_ipa) VOS_STATUS hdd_ipa_init(hdd_context_t *hdd_ctx) { struct hdd_ipa_priv *hdd_ipa = NULL; - int ret; + int ret, i; if (!hdd_ipa_is_enabled(hdd_ctx)) return 0; + for (i = 0; i < HDD_IPA_WLAN_MAX_STA_ID; i++) + wlan_sta_id_2_hdd_pipe_id[i] = 0xFF; + hdd_ipa = hdd_ipa_kzalloc(sizeof(struct hdd_ipa_priv)); if (!hdd_ipa) { HDD_IPA_LOG(VOS_TRACE_LEVEL_FATAL, "ENOMEM"); @@ -1585,6 +1671,68 @@ VOS_STATUS hdd_ipa_cleanup(hdd_context_t *hdd_ctx) return VOS_STATUS_SUCCESS; } -#endif +#if 0 +/** +* hdd_ipa_start_xmit() - This is a hack code for IPA loopback test +*/ +int hdd_ipa_start_xmit(struct sk_buff *skb, struct net_device *dev) +{ + hdd_adapter_t *pAdapter = (hdd_adapter_t *)netdev_priv(dev); + hdd_ap_ctx_t *pHddApCtx = WLAN_HDD_GET_AP_CTX_PTR(pAdapter); + uint8_t sta_id; + struct hdd_ipa_priv *hdd_ipa = ghdd_ipa; + + v_MACADDR_t *pDestMacAddress = (v_MACADDR_t *)skb->data; + + if (vos_is_macaddr_broadcast(pDestMacAddress) || + vos_is_macaddr_group(pDestMacAddress)) { + /* The BC/MC station ID is assigned during BSS starting phase. + SAP will return the station ID used for BC/MC traffic. */ + sta_id = pHddApCtx->uBCStaId; + hdd_softap_hard_start_xmit(skb, dev); + return NETDEV_TX_OK; + } else { + sta_id = *(uint8_t *)(((uint8_t *)(skb->data)) - 1); + if (sta_id == HDD_WLAN_INVALID_STA_ID) { + HDD_IPA_LOG(VOS_TRACE_LEVEL_WARN, + "Failed to find right station"); + goto drop_pkt; + } else if (FALSE == pAdapter->aStaInfo[sta_id].isUsed) { + HDD_IPA_LOG(VOS_TRACE_LEVEL_WARN, + "STA %d is unregistered", sta_id); + goto drop_pkt; + } + + if ((WLANTL_STA_CONNECTED != + pAdapter->aStaInfo[sta_id].tlSTAState) && + (WLANTL_STA_AUTHENTICATED != + pAdapter->aStaInfo[sta_id].tlSTAState)) { + HDD_IPA_LOG(VOS_TRACE_LEVEL_WARN, + "Station not connected yet"); + goto drop_pkt; + } else if (WLANTL_STA_CONNECTED == + pAdapter->aStaInfo[sta_id].tlSTAState) { + if (ntohs(skb->protocol) != + HDD_ETHERTYPE_802_1_X) { + HDD_IPA_LOG(VOS_TRACE_LEVEL_WARN, + "NON-EAPOL packet in no-Auth state"); + goto drop_pkt; + } + } + } + if (hdd_ipa_is_ip_pkt(skb->data, HDD_IPA_IPV4)) { + /* TX frame Counter at HDD entry from kernel network stack, before give frame to IPA Loopback */ + hdd_ipa->stats.ipa_lb_cnt++; + ipa_tx_dp(IPA_CLIENT_WLAN1_CONS, skb, NULL); + } else { + hdd_softap_hard_start_xmit(skb, dev); + } + return NETDEV_TX_OK; +drop_pkt: + kfree_skb(skb); + return NETDEV_TX_OK; +} +#endif +#endif diff --git a/CORE/SERVICES/COMMON/adf/linux/adf_nbuf_pvt.h b/CORE/SERVICES/COMMON/adf/linux/adf_nbuf_pvt.h index d209ded62380..3998c534d839 100644 --- a/CORE/SERVICES/COMMON/adf/linux/adf_nbuf_pvt.h +++ b/CORE/SERVICES/COMMON/adf/linux/adf_nbuf_pvt.h @@ -104,9 +104,16 @@ struct cvg_nbuf_cb { } extra_frags; uint32_t owner_id; __adf_nbuf_callback_fn adf_nbuf_callback_fn; +#ifdef IPA_OFFLOAD + unsigned long priv_data; +#endif }; #define NBUF_OWNER_ID(skb) \ (((struct cvg_nbuf_cb *)((skb)->cb))->owner_id) +#ifdef IPA_OFFLOAD +#define NBUF_OWNER_PRIV_DATA(skb) \ + (((struct cvg_nbuf_cb *)((skb)->cb))->priv_data) +#endif #define NBUF_CALLBACK_FN(skb) \ (((struct cvg_nbuf_cb *)((skb)->cb))->adf_nbuf_callback_fn) #define NBUF_CALLBACK_FN_EXEC(skb) \ diff --git a/CORE/TL/inc/wlan_qct_tl.h b/CORE/TL/inc/wlan_qct_tl.h index 898c6ce1df20..dc54fd115627 100644 --- a/CORE/TL/inc/wlan_qct_tl.h +++ b/CORE/TL/inc/wlan_qct_tl.h @@ -1298,6 +1298,39 @@ adf_nbuf_t WLANTL_SendSTA_DataFrame(v_PVOID_t pvosGCtx, v_U8_t ucSTAId, adf_nbuf_t buf); #endif +#ifdef IPA_OFFLOAD +/*=========================================================================== + + FUNCTION WLANTL_SendIPA_DataFrame + + DESCRIPTION + + HDD will call this API when there is a packet to be transmitted from IPA + + DEPENDENCIES + + A station must have been registered before sending packet to txrx layer + + + PARAMETERS + + vos_ctx: pointer to the global vos context; a handle to TL's + control block can be extracted from its context + vdev: virtual device + buf: packet given by uppler layer for tx + + RETURN VALUE + + On success it will return NULL. On failure it will be the + passed buf pointer so that the caller will be able to free + up the buffer. + +============================================================================*/ +adf_nbuf_t WLANTL_SendIPA_DataFrame(void *vos_ctx, void *vdev, + adf_nbuf_t buf); +#endif + + /*========================================================================== FUNCTION WLANTL_SetSTAPriority -- cgit v1.2.3 From 9ed90c8ee270fcd0fae657f5cdc1a8bde127c321 Mon Sep 17 00:00:00 2001 From: Yun Park Date: Sat, 11 Jan 2014 00:42:58 -0800 Subject: qcacld: Add QCA_SUPPORT_TXRX_VDEV_PAUSE_LL in Makefile To register event handler for WMI_TX_PAUSE_EVENT from FW Change-Id: I151ab333b885e8f28ede42c32422541e794e3a7e --- Makefile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 9583d67159f7..2ad4e68531d8 100644 --- a/Makefile +++ b/Makefile @@ -838,7 +838,8 @@ CDEFINES := -DANI_LITTLE_BYTE_ENDIAN \ -DWLAN_NL80211_TESTMODE \ -DFEATURE_WLAN_BATCH_SCAN \ -DFEATURE_WLAN_LPHB \ - -DWLAN_LINK_UMAC_SUSPEND_WITH_BUS_SUSPEND + -DWLAN_LINK_UMAC_SUSPEND_WITH_BUS_SUSPEND \ + -DQCA_SUPPORT_TXRX_VDEV_PAUSE_LL ifeq ($(CONFIG_QCA_WIFI_2_0), 0) CDEFINES += -DWLANTL_DEBUG -- cgit v1.2.3 From b2670ef1664f732a0166f391688d720ea794d9c1 Mon Sep 17 00:00:00 2001 From: Prakash Dhavali Date: Sat, 11 Jan 2014 15:21:36 -0800 Subject: Release 4.0.0.68C Release 4.0.0.68C for MDM9x35 --- CORE/MAC/inc/qwlan_version.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CORE/MAC/inc/qwlan_version.h b/CORE/MAC/inc/qwlan_version.h index 5fc91472d5b6..6edff7101a27 100644 --- a/CORE/MAC/inc/qwlan_version.h +++ b/CORE/MAC/inc/qwlan_version.h @@ -40,9 +40,9 @@ BRIEF DESCRIPTION: #define QWLAN_VERSION_MAJOR 4 #define QWLAN_VERSION_MINOR 0 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "" +#define QWLAN_VERSION_EXTRA "C" #define QWLAN_VERSION_BUILD 68 -#define QWLAN_VERSIONSTR "4.0.0.68" +#define QWLAN_VERSIONSTR "4.0.0.68C" #endif /* QWLAN_VERSION_H */ -- cgit v1.2.3 From 1afe4643b7ec978dd617f293089c3af841759e69 Mon Sep 17 00:00:00 2001 From: Prakash Dhavali Date: Sat, 11 Jan 2014 18:22:40 -0800 Subject: Disable non apq8084 platform builds on this project Disable non apq8084 platform builds on this project as they are not compatible. --- Android.mk | 8 -------- 1 file changed, 8 deletions(-) diff --git a/Android.mk b/Android.mk index c008e35dee6e..733a964fbad0 100644 --- a/Android.mk +++ b/Android.mk @@ -11,14 +11,6 @@ WLAN_ISOC_SELECT := CONFIG_QCA_WIFI_ISOC=0 WLAN_ISOC_SELECT += CONFIG_QCA_WIFI_2_0=1 endif -# Build/Package options for 8974, 8226, 8610 targets -ifeq ($(call is-board-platform-in-list,msm8974 msm8226 msm8610),true) -WLAN_CHIPSET := qca_cld -WLAN_SELECT := CONFIG_QCA_CLD_WLAN=m -WLAN_ISOC_SELECT := CONFIG_QCA_WIFI_ISOC=1 -WLAN_ISOC_SELECT += CONFIG_QCA_WIFI_2_0=0 -endif - # Build/Package only in case of supported target ifneq ($(WLAN_CHIPSET),) -- cgit v1.2.3 From 9b6b8bee4fd0fc5d16a3665a7b82d298f31694f3 Mon Sep 17 00:00:00 2001 From: Prakash Dhavali Date: Sun, 12 Jan 2014 00:45:49 -0800 Subject: Release 4.0.0.68C. Corrected driver name to opensource name Release 4.0.0.68C. Corrected driver name to opensource name --- Android.mk | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Android.mk b/Android.mk index 733a964fbad0..99070ec2547a 100644 --- a/Android.mk +++ b/Android.mk @@ -5,10 +5,10 @@ WLAN_CHIPSET := # Build/Package options for 8084 target ifeq ($(call is-board-platform,apq8084),true) -WLAN_CHIPSET := qca_cld -WLAN_SELECT := CONFIG_QCA_CLD_WLAN=m -WLAN_ISOC_SELECT := CONFIG_QCA_WIFI_ISOC=0 -WLAN_ISOC_SELECT += CONFIG_QCA_WIFI_2_0=1 + WLAN_CHIPSET := qca_cld + WLAN_SELECT := CONFIG_QCA_CLD_WLAN=m + WLAN_ISOC_SELECT := CONFIG_QCA_WIFI_ISOC=0 + WLAN_ISOC_SELECT += CONFIG_QCA_WIFI_2_0=1 endif # Build/Package only in case of supported target @@ -40,10 +40,10 @@ else endif -# Build wlan.ko as proprietary_qca_cld_wlan.ko +# Build wlan.ko as either prima_wlan.ko or pronto_wlan.ko or qca_cld_wlan.ko ########################################################### # This is set once per LOCAL_PATH, not per (kernel) module -KBUILD_OPTIONS := WLAN_ROOT=../$(WLAN_BLD_DIR)/qcacld-new +KBUILD_OPTIONS := WLAN_ROOT=../$(WLAN_BLD_DIR)/qcacld-2.0 # We are actually building wlan.ko here, as per the # requirement we are specifying _wlan.ko as LOCAL_MODULE. # This means we need to rename the module to _wlan.ko @@ -54,7 +54,7 @@ KBUILD_OPTIONS += $(WLAN_SELECT) KBUILD_OPTIONS += $(WLAN_ISOC_SELECT) include $(CLEAR_VARS) -LOCAL_MODULE := proprietary_$(WLAN_CHIPSET)_wlan.ko +LOCAL_MODULE := $(WLAN_CHIPSET)_wlan.ko LOCAL_MODULE_KBUILD_NAME := wlan.ko LOCAL_MODULE_TAGS := debug LOCAL_MODULE_DEBUG_ENABLE := true -- cgit v1.2.3