wlan: Sessionization of PMC/PMM module messages
Sessionization of PMC/PMM module messages for:
UAPSD, WOWL, HostOffload, Set packet filter, Clear packet filter
Host changes to support SLM SESSIONIZATION
Change-Id: Ie4f5554a9fd78df7641e8c9496444d40f6eddd31
CR-Fixed: 382845, 400362, 402982, 402585
diff --git a/CORE/HDD/inc/wlan_hdd_host_offload.h b/CORE/HDD/inc/wlan_hdd_host_offload.h
index 9bc4477..934feba 100644
--- a/CORE/HDD/inc/wlan_hdd_host_offload.h
+++ b/CORE/HDD/inc/wlan_hdd_host_offload.h
@@ -53,6 +53,7 @@
v_U8_t hostIpv4Addr [4];
v_U8_t hostIpv6Addr [16];
} params;
+ v_MACADDR_t bssId;
} tHostOffloadRequest, *tpHostOffloadRequest;
#endif // __WLAN_HDD_HOST_OFFLOAD_H__
diff --git a/CORE/HDD/inc/wlan_hdd_packet_filtering.h b/CORE/HDD/inc/wlan_hdd_packet_filtering.h
index d052ac6..d0edba8 100644
--- a/CORE/HDD/inc/wlan_hdd_packet_filtering.h
+++ b/CORE/HDD/inc/wlan_hdd_packet_filtering.h
@@ -87,7 +87,6 @@
v_U8_t filterId;
v_U8_t numParams;
struct PacketFilterParamsCfg paramsData [HDD_MAX_CMP_PER_PACKET_FILTER];
- v_U8_t bssIdx;
}tPacketFilterCfg, *tpPacketFilterCfg;
#endif
diff --git a/CORE/HDD/inc/wlan_hdd_wowl.h b/CORE/HDD/inc/wlan_hdd_wowl.h
index 2376e10..60acf35 100644
--- a/CORE/HDD/inc/wlan_hdd_wowl.h
+++ b/CORE/HDD/inc/wlan_hdd_wowl.h
@@ -119,7 +119,7 @@
@return : FALSE if any errors encountered
: TRUE otherwise
===========================================================================*/
-v_BOOL_t hdd_add_wowl_ptrn (const char * ptrn);
+v_BOOL_t hdd_add_wowl_ptrn (hdd_adapter_t *pAdapter, const char * ptrn);
/**============================================================================
@brief hdd_del_wowl_ptrn() - Function which will remove a WoWL pattern
@@ -129,7 +129,7 @@
@return : FALSE if any errors encountered
: TRUE otherwise
===========================================================================*/
-v_BOOL_t hdd_del_wowl_ptrn (const char * ptrn);
+v_BOOL_t hdd_del_wowl_ptrn (hdd_adapter_t *pAdapter, const char * ptrn);
/**============================================================================
@brief hdd_enter_wowl() - Function which will enable WoWL. Atleast one
@@ -149,7 +149,7 @@
@return : FALSE if any errors encountered
: TRUE otherwise
===========================================================================*/
-v_BOOL_t hdd_exit_wowl (void);
+v_BOOL_t hdd_exit_wowl (hdd_adapter_t*pAdapter);
/**============================================================================
@brief hdd_init_wowl() - Init function which will initialize the WoWL module
@@ -158,6 +158,6 @@
@return : FALSE if any errors encountered
: TRUE otherwise
===========================================================================*/
-v_BOOL_t hdd_init_wowl (void* pAdapter);
+v_BOOL_t hdd_init_wowl (hdd_adapter_t* pAdapter);
#endif /* #ifndef _WLAN_HDD_WOWL_H */
diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c
index 7b30b60..1ab6a95 100644
--- a/CORE/HDD/src/wlan_hdd_main.c
+++ b/CORE/HDD/src/wlan_hdd_main.c
@@ -1757,8 +1757,13 @@
WLANTL_ConfigureSwFrameTXXlationForAll(pHddCtx->pvosContext, TRUE);
}
#endif
+ //Initialize the WoWL service
+ if(!hdd_init_wowl(pAdapter))
+ {
+ hddLog(VOS_TRACE_LEVEL_FATAL,"%s: hdd_init_wowl failed",__func__);
+ goto err_free_netdev;
+ }
}
-
return pAdapter;
err_free_netdev:
@@ -3847,13 +3852,6 @@
}
#endif
- //Initialize the WoWL service
- if(!hdd_init_wowl(pHddCtx))
- {
- hddLog(VOS_TRACE_LEVEL_FATAL,"%s: hdd_init_wowl failed",__func__);
- goto err_nl_srv;
- }
-
#ifdef CONFIG_HAS_EARLYSUSPEND
hdd_register_mcast_bcast_filter(pHddCtx);
#endif
diff --git a/CORE/HDD/src/wlan_hdd_wext.c b/CORE/HDD/src/wlan_hdd_wext.c
index 7cd2a3c..4dd3530 100644
--- a/CORE/HDD/src/wlan_hdd_wext.c
+++ b/CORE/HDD/src/wlan_hdd_wext.c
@@ -3305,7 +3305,7 @@
switch (set_value)
{
case 0x00:
- hdd_exit_wowl();
+ hdd_exit_wowl(pAdapter);
break;
case 0x01:
case 0x02:
@@ -3603,11 +3603,11 @@
{
case WE_WOWL_ADD_PTRN:
VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "ADD_PTRN\n");
- hdd_add_wowl_ptrn((char*)wrqu->data.pointer);
+ hdd_add_wowl_ptrn(pAdapter, (char*)wrqu->data.pointer);
break;
case WE_WOWL_DEL_PTRN:
VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "DEL_PTRN\n");
- hdd_del_wowl_ptrn((char*)wrqu->data.pointer);
+ hdd_del_wowl_ptrn(pAdapter, (char*)wrqu->data.pointer);
break;
#if defined WLAN_FEATURE_VOWIFI
case WE_NEIGHBOR_REPORT_REQUEST:
@@ -4891,8 +4891,8 @@
int wlan_hdd_set_filter(hdd_context_t *pHddCtx, tpPacketFilterCfg pRequest,
tANI_U8 sessionId)
{
- tSirRcvPktFilterCfgType packetFilterSetReq;
- tSirRcvFltPktClearParam packetFilterClrReq;
+ tSirRcvPktFilterCfgType packetFilterSetReq = {0};
+ tSirRcvFltPktClearParam packetFilterClrReq = {0};
int i=0;
if (pHddCtx->cfg_ini->disablePacketFilter)
diff --git a/CORE/HDD/src/wlan_hdd_wowl.c b/CORE/HDD/src/wlan_hdd_wowl.c
index f581d99..f0b8f91 100644
--- a/CORE/HDD/src/wlan_hdd_wowl.c
+++ b/CORE/HDD/src/wlan_hdd_wowl.c
@@ -49,8 +49,6 @@
* Type Declarations
* -------------------------------------------------------------------------*/
-static struct hdd_context_s *pAdapterHandle = NULL;
-
char *g_hdd_wowl_ptrns[WOWL_MAX_PTRNS_ALLOWED]; //Patterns 0-7
static int parse_hex(unsigned char c)
@@ -111,12 +109,14 @@
@return : FALSE if any errors encountered
: TRUE otherwise
===========================================================================*/
-v_BOOL_t hdd_add_wowl_ptrn (const char * ptrn)
+v_BOOL_t hdd_add_wowl_ptrn (hdd_adapter_t *pAdapter, const char * ptrn)
{
tSirWowlAddBcastPtrn localPattern;
int i, first_empty_slot, len, offset;
eHalStatus halStatus;
const char *temp;
+ tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(pAdapter);
+ v_U8_t sessionId = pAdapter->sessionId;
len = find_ptrn_len(ptrn);
@@ -243,7 +243,7 @@
localPattern.ucPatternByteOffset = 0;
// Register the pattern downstream
- halStatus = sme_WowlAddBcastPattern( pAdapterHandle->hHal, &localPattern );
+ halStatus = sme_WowlAddBcastPattern( hHal, &localPattern, sessionId );
if ( !HAL_STATUS_SUCCESS( halStatus ) )
{
// Add failed, so invalidate the local storage
@@ -277,12 +277,14 @@
@return : FALSE if any errors encountered
: TRUE otherwise
===========================================================================*/
-v_BOOL_t hdd_del_wowl_ptrn (const char * ptrn)
+v_BOOL_t hdd_del_wowl_ptrn (hdd_adapter_t *pAdapter, const char * ptrn)
{
tSirWowlDelBcastPtrn delPattern;
unsigned char id;
+ tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(pAdapter);
v_BOOL_t patternFound = VOS_FALSE;
eHalStatus halStatus;
+ v_U8_t sessionId = pAdapter->sessionId;
// Detect pattern
for (id=0; id<WOWL_MAX_PTRNS_ALLOWED && g_hdd_wowl_ptrns[id] != NULL; id++)
@@ -298,7 +300,7 @@
if(patternFound)
{
delPattern.ucPatternId = id;
- halStatus = sme_WowlDelBcastPattern( pAdapterHandle->hHal, &delPattern );
+ halStatus = sme_WowlDelBcastPattern( hHal, &delPattern, sessionId );
if ( HAL_STATUS_SUCCESS( halStatus ) )
{
// Remove from local storage as well
@@ -327,6 +329,7 @@
{
tSirSmeWowlEnterParams wowParams;
eHalStatus halStatus;
+ tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(pAdapter);
wowParams.ucPatternFilteringEnable = enable_pbm;
wowParams.ucMagicPktEnable = enable_mp;
@@ -337,8 +340,8 @@
}
// Request to put Libra into WoWL
- halStatus = sme_EnterWowl( pAdapterHandle->hHal, hdd_wowl_callback,
- pAdapterHandle, &wowParams );
+ halStatus = sme_EnterWowl( hHal, hdd_wowl_callback,
+ pAdapter, &wowParams, pAdapter->sessionId);
if ( !HAL_STATUS_SUCCESS( halStatus ) )
{
@@ -359,11 +362,12 @@
@return : FALSE if any errors encountered
: TRUE otherwise
===========================================================================*/
-v_BOOL_t hdd_exit_wowl (void)
+v_BOOL_t hdd_exit_wowl (hdd_adapter_t*pAdapter)
{
+ tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(pAdapter);
eHalStatus halStatus;
- halStatus = sme_ExitWowl( pAdapterHandle->hHal );
+ halStatus = sme_ExitWowl( hHal );
if ( !HAL_STATUS_SUCCESS( halStatus ) )
{
VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
@@ -381,14 +385,15 @@
@return : FALSE if any errors encountered
: TRUE otherwise
===========================================================================*/
-v_BOOL_t hdd_init_wowl (void *pAdapter)
+v_BOOL_t hdd_init_wowl (hdd_adapter_t*pAdapter)
{
- pAdapterHandle = (struct hdd_context_s*)pAdapter;
+ hdd_context_t *pHddCtx = NULL;
+ pHddCtx = pAdapter->pHddCtx;
memset(g_hdd_wowl_ptrns, 0, sizeof(g_hdd_wowl_ptrns));
//Add any statically configured patterns
- hdd_add_wowl_ptrn(pAdapterHandle->cfg_ini->wowlPattern);
+ hdd_add_wowl_ptrn(pAdapter, pHddCtx->cfg_ini->wowlPattern);
return VOS_TRUE;
}
diff --git a/CORE/MAC/inc/sirApi.h b/CORE/MAC/inc/sirApi.h
index 78eaa9e..7b665dd 100644
--- a/CORE/MAC/inc/sirApi.h
+++ b/CORE/MAC/inc/sirApi.h
@@ -3411,6 +3411,7 @@
// Extra pattern data beyond 128 bytes
tANI_U8 ucPatternExt[SIR_WOWL_BCAST_PATTERN_MAX_SIZE]; // Extra Pattern
tANI_U8 ucPatternMaskExt[SIR_WOWL_BCAST_PATTERN_MAX_SIZE]; // Extra Pattern mask
+ tSirMacAddr bssId; // BSSID
} tSirWowlAddBcastPtrn, *tpSirWowlAddBcastPtrn;
@@ -3421,6 +3422,7 @@
{
/* Pattern ID of the wakeup pattern to be deleted */
tANI_U8 ucPatternId;
+ tSirMacAddr bssId; // BSSID
}tSirWowlDelBcastPtrn, *tpSirWowlDelBcastPtrn;
@@ -3460,6 +3462,7 @@
tANI_U8 ucWoWBSSConnLoss;
#endif // WLAN_WAKEUP_EVENTS
+ tSirMacAddr bssId;
} tSirSmeWowlEnterParams, *tpSirSmeWowlEnterParams;
@@ -3548,8 +3551,25 @@
* SIR_HAL_WOWL_ENTER_RSP to PE.
*/
eHalStatus status;
+
+ /*BSSID to find the current session
+ */
+ tANI_U8 bssIdx;
} tSirHalWowlEnterParams, *tpSirHalWowlEnterParams;
+// PE<->HAL: Exit WOWLAN parameters
+typedef struct sSirHalWowlExitParams
+{
+ /* Status code to be filled by HAL when it sends
+ * SIR_HAL_WOWL_EXIT_RSP to PE.
+ */
+ eHalStatus status;
+
+ /*BSSIDX to find the current session
+ */
+ tANI_U8 bssIdx;
+} tSirHalWowlExitParams, *tpSirHalWowlExitParams;
+
#ifdef WLAN_SOFTAP_FEATURE
#define SIR_MAX_NAME_SIZE 64
@@ -3743,7 +3763,7 @@
#ifdef WLAN_NS_OFFLOAD
tSirNsOffloadReq nsOffloadInfo;
#endif //WLAN_NS_OFFLOAD
- tANI_U8 bssIdx;
+ tSirMacAddr bssId;
} tSirHostOffloadReq, *tpSirHostOffloadReq;
/* Packet Types. */
@@ -3762,7 +3782,7 @@
tSirIpv4Addr hostIpv4Addr;
tSirIpv4Addr destIpv4Addr;
tSirMacAddr destMacAddr;
- v_U8_t bssIdx;
+ tSirMacAddr bssId;
} tSirKeepAliveReq, *tpSirKeepAliveReq;
typedef struct sSirSmeAddStaSelfReq
@@ -4064,9 +4084,9 @@
eSirReceivePacketFilterType filterType;
tANI_U32 numFieldParams;
tANI_U32 coalesceTime;
- tSirRcvPktFilterFieldParams paramsData[SIR_MAX_NUM_TESTS_PER_FILTER];
tSirMacAddr selfMacAddr;
tSirMacAddr bssId; //Bssid of the connected AP
+ tSirRcvPktFilterFieldParams paramsData[SIR_MAX_NUM_TESTS_PER_FILTER];
}tSirRcvPktFilterCfgType, *tpSirRcvPktFilterCfgType;
//
@@ -4086,6 +4106,7 @@
/* Success or Failure */
tANI_U32 status;
tSirRcvFltPktMatchCnt filterMatchCnt[SIR_MAX_NUM_FILTERS];
+ tSirMacAddr bssId;
} tSirRcvFltPktMatchRsp, *tpSirRcvFltPktMatchRsp;
//
@@ -4142,6 +4163,7 @@
tANI_U8 aKCK[16]; /* Key confirmation key */
tANI_U8 aKEK[16]; /* key encryption key */
tANI_U64 ullKeyReplayCounter; /* replay counter */
+ tSirMacAddr bssId;
} tSirGtkOffloadParams, *tpSirGtkOffloadParams;
/*---------------------------------------------------------------------------
@@ -4157,6 +4179,7 @@
tANI_U32 ulTotalRekeyCount; /* total rekey attempts */
tANI_U32 ulGTKRekeyCount; /* successful GTK rekeys */
tANI_U32 ulIGTKRekeyCount; /* successful iGTK rekeys */
+ tSirMacAddr bssId;
} tSirGtkOffloadGetInfoRspParams, *tpSirGtkOffloadGetInfoRspParams;
#endif // WLAN_FEATURE_GTK_OFFLOAD
diff --git a/CORE/MAC/src/pe/include/pmmApi.h b/CORE/MAC/src/pe/include/pmmApi.h
index c495f39..da08afc 100644
--- a/CORE/MAC/src/pe/include/pmmApi.h
+++ b/CORE/MAC/src/pe/include/pmmApi.h
@@ -79,7 +79,7 @@
//go into sleep state
void pmmInitBmpsPwrSave(tpAniSirGlobal pMac);
tSirRetStatus pmmSendInitPowerSaveMsg(tpAniSirGlobal pMac,tpPESession);
-void pmmInitBmpsResponseHandler(tpAniSirGlobal pMac, eHalStatus rspStatus);
+void pmmInitBmpsResponseHandler(tpAniSirGlobal pMac, tpSirMsgQ limMsg);
tSirRetStatus pmmSendChangePowerSaveMsg(tpAniSirGlobal pMac);
tSirRetStatus pmmSendSleepIndicationToHal(tpAniSirGlobal pMac);
@@ -92,7 +92,7 @@
void pmmEnterUapsdRequestHandler (tpAniSirGlobal pMac);
void pmmEnterUapsdResponseHandler(tpAniSirGlobal pMac, tpSirMsgQ limMsg);
void pmmExitUapsdRequestHandler (tpAniSirGlobal pMac);
-void pmmExitUapsdResponseHandler(tpAniSirGlobal pMac, eHalStatus rspStatus);
+void pmmExitUapsdResponseHandler(tpAniSirGlobal pMac, tpSirMsgQ limMsg);
tSirRetStatus pmmUapsdSendChangePwrSaveMsg (tpAniSirGlobal pMac, tANI_U8 mode);
// handling of all idle mode power save messages
@@ -107,9 +107,9 @@
void pmmEnterWowlRequestHandler(tpAniSirGlobal pMac, tpSirMsgQ pMsg);
tSirRetStatus pmmSendWowlEnterRequest(tpAniSirGlobal pMac, tpSirHalWowlEnterParams pHalWowlParams);
void pmmEnterWowlanResponseHandler(tpAniSirGlobal pMac, tpSirMsgQ limMsg);
-tSirRetStatus pmmSendExitWowlReq(tpAniSirGlobal pMac);
+tSirRetStatus pmmSendExitWowlReq(tpAniSirGlobal pMac, tpSirHalWowlExitParams pHalWowlParams);
void pmmExitWowlanRequestHandler(tpAniSirGlobal pMac);
-void pmmExitWowlanResponseHandler(tpAniSirGlobal pMac, eHalStatus rspStatus);
+void pmmExitWowlanResponseHandler(tpAniSirGlobal pMac, tpSirMsgQ limMsg);
// update idle mode statistics
void pmmImpsUpdatePwrSaveStats(tpAniSirGlobal pMac);
diff --git a/CORE/MAC/src/pe/pmm/pmmApi.c b/CORE/MAC/src/pe/pmm/pmmApi.c
index f5471fa..966a6ed 100644
--- a/CORE/MAC/src/pe/pmm/pmmApi.c
+++ b/CORE/MAC/src/pe/pmm/pmmApi.c
@@ -202,13 +202,14 @@
* @return None
*/
-void pmmInitBmpsResponseHandler(tpAniSirGlobal pMac, eHalStatus rspStatus)
+void pmmInitBmpsResponseHandler(tpAniSirGlobal pMac, tpSirMsgQ limMsg )
{
tPmmState nextState = pMac->pmm.gPmmState;
tSirResultCodes retStatus = eSIR_SME_SUCCESS;
tpPESession psessionEntry;
+ tpEnterBmpsParams pEnterBmpsParams;
/* we need to process all the deferred messages enqueued since
* the initiating the SIR_HAL_ENTER_BMPS_REQ.
@@ -226,9 +227,16 @@
goto failure;
}
+ if (NULL == limMsg->bodyptr)
+ {
+ PELOGE(pmmLog(pMac, LOGE, FL("pmmBmps: Received SIR_HAL_ENTER_BMPS_RSP with NULL "));)
+ goto failure;
+ }
+ pEnterBmpsParams = (tpEnterBmpsParams)(limMsg->bodyptr);
+
//if response is success, then set PMM to BMPS_SLEEP state and send response back to PMC.
//If response is failure, then send the response back to PMC and reset its state.
- if(rspStatus == eHAL_STATUS_SUCCESS)
+ if(pEnterBmpsParams->status == eHAL_STATUS_SUCCESS)
{
PELOG2(pmmLog(pMac, LOG2,
FL("pmmBmps: Received successful response from HAL to enter BMPS_POWER_SAVE \n"));)
@@ -912,7 +920,7 @@
pMac->sys.gSysEnableScanMode = true;
// send response to PMC
- if(IS_SLM_SESSIONIZATION_SUPPORTED_BY_FW )
+ if(IS_FEATURE_SUPPORTED_BY_FW(SLM_SESSIONIZATION) )
{
limSendSmeRsp(pMac, eWNI_PMC_EXIT_BMPS_RSP, retStatus,
psessionEntry->smeSessionId, psessionEntry->transactionId);
@@ -1228,7 +1236,7 @@
break;
case WDA_ENTER_BMPS_RSP:
- pmmInitBmpsResponseHandler(pMac, (eHalStatus)pMsg->bodyval);
+ pmmInitBmpsResponseHandler(pMac, pMsg);
break;
case eWNI_PMC_EXIT_BMPS_REQ:
@@ -1282,7 +1290,7 @@
break;
case WDA_EXIT_UAPSD_RSP:
- pmmExitUapsdResponseHandler(pMac, (eHalStatus)pMsg->bodyval);
+ pmmExitUapsdResponseHandler(pMac, pMsg);
break;
case eWNI_PMC_WOWL_ADD_BCAST_PTRN:
@@ -1306,7 +1314,7 @@
break;
case WDA_WOWL_EXIT_RSP:
- pmmExitWowlanResponseHandler(pMac, (eHalStatus)pMsg->bodyval);
+ pmmExitWowlanResponseHandler(pMac, pMsg);
break;
#ifdef WLAN_FEATURE_PACKET_FILTERING
case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP:
@@ -1895,7 +1903,7 @@
retStatus = eSIR_SME_UAPSD_REQ_FAILED;
}
- if(IS_SLM_SESSIONIZATION_SUPPORTED_BY_FW)
+ if(IS_FEATURE_SUPPORTED_BY_FW(SLM_SESSIONIZATION))
{
limSendSmeRsp(pMac, eWNI_PMC_ENTER_UAPSD_RSP, retStatus,
psessionEntry->smeSessionId, psessionEntry->transactionId);
@@ -1983,11 +1991,12 @@
* @param Global handle to MAC
* @return None
*/
-void pmmExitUapsdResponseHandler(tpAniSirGlobal pMac, eHalStatus rspStatus)
+void pmmExitUapsdResponseHandler(tpAniSirGlobal pMac, tpSirMsgQ limMsg)
{
tSirResultCodes resultCode = eSIR_SME_SUCCESS;
tANI_U8 PowersavesessionId;
tpPESession psessionEntry;
+ tUapsdParams *pUapsdExitRspParams;
/* we need to process all the deferred messages enqueued since
* the initiating the SIR_HAL_EXIT_UAPSD_REQ.
@@ -2002,6 +2011,7 @@
limSendSmeRsp(pMac, eWNI_PMC_EXIT_UAPSD_RSP, eSIR_SME_INVALID_PMM_STATE, 0, 0);
return;
}
+ pUapsdExitRspParams = (tUapsdParams *)(limMsg->bodyptr);
PowersavesessionId = pMac->pmm.sessionId;
if((psessionEntry = peFindSessionBySessionId(pMac,PowersavesessionId))==NULL)
@@ -2010,7 +2020,14 @@
return;
}
- switch(rspStatus)
+ if(NULL == pUapsdExitRspParams )
+ {
+ PELOGE(pmmLog(pMac, LOGE,
+ FL("Received HAL_EXIT_UAPSD_RSP message with zero parameters:\n"));)
+ limSendSmeRsp(pMac, eWNI_PMC_EXIT_UAPSD_RSP, eSIR_SME_UAPSD_REQ_FAILED, 0, 0);
+ return;
+ }
+ switch(pUapsdExitRspParams->status)
{
case eHAL_STATUS_SUCCESS:
resultCode = eSIR_SME_SUCCESS;
@@ -2026,7 +2043,7 @@
pMac->pmm.gPmmState = ePMM_STATE_BMPS_SLEEP;
- if(IS_SLM_SESSIONIZATION_SUPPORTED_BY_FW)
+ if(IS_FEATURE_SUPPORTED_BY_FW(SLM_SESSIONIZATION))
{
limSendSmeRsp(pMac, eWNI_PMC_EXIT_UAPSD_RSP, resultCode, psessionEntry->smeSessionId,
psessionEntry->transactionId);
@@ -2148,6 +2165,8 @@
tSirRetStatus retCode = eSIR_SUCCESS;
tANI_U32 cfgValue = 0;
tSirMbMsg *pMbMsg = (tSirMbMsg *)pMsg->bodyptr;
+ tpPESession pSessionEntry = NULL;
+ tANI_U8 peSessionId = 0;
#ifdef FEATURE_WLAN_DIAG_SUPPORT
limDiagEventReport(pMac, WLAN_PE_DIAG_ENTER_WOWL_REQ_EVENT, NULL, 0, 0);
@@ -2155,6 +2174,14 @@
pSmeWowlParams = (tpSirSmeWowlEnterParams)(pMbMsg->data);
+ if((pSessionEntry = peFindSessionByBssid(pMac,pSmeWowlParams->bssId,&peSessionId))== NULL)
+ {
+ limLog(pMac, LOGE,
+ FL("session does not exist for given BSSId\n"));
+ goto end;
+ }
+ pMac->pmm.sessionId = peSessionId;
+
if (NULL == pSmeWowlParams)
return;
// Need to fix it ASAP - TBH
@@ -2195,6 +2222,8 @@
pHalWowlParams->ucWoWBSSConnLoss = pSmeWowlParams->ucWoWBSSConnLoss;
#endif // WLAN_WAKEUP_EVENTS
+ pHalWowlParams->bssIdx = pSessionEntry->bssIdx;
+
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"));
@@ -2300,8 +2329,8 @@
------------------------------------------------------------*/
void pmmEnterWowlanResponseHandler(tpAniSirGlobal pMac, tpSirMsgQ limMsg)
{
- tpSirHalWowlEnterParams pHalWowlMsg;
- eHalStatus rspStatus;
+ tpSirHalWowlEnterParams pWowlEnterParams;
+ eHalStatus rspStatus;
tSirResultCodes smeRspCode = eSIR_SME_SUCCESS;
/* we need to process all the deferred messages enqueued
@@ -2309,15 +2338,16 @@
*/
SET_LIM_PROCESS_DEFD_MESGS(pMac, true);
- pHalWowlMsg = (tpSirHalWowlEnterParams)(limMsg->bodyptr);
- if (NULL == pHalWowlMsg)
+ pWowlEnterParams = (tpSirHalWowlEnterParams)(limMsg->bodyptr);
+ if (NULL == pWowlEnterParams)
{
pmmLog(pMac, LOGE, FL("Recvd WDA_WOWL_ENTER_RSP with NULL msg "));
smeRspCode = eSIR_SME_WOWL_ENTER_REQ_FAILED;
}
else
{
- rspStatus = pHalWowlMsg->status;
+ rspStatus = pWowlEnterParams->status;
+
if(rspStatus == eHAL_STATUS_SUCCESS)
{
pmmLog(pMac, LOGW, FL("Rcv successful response from HAL to enter WOWLAN \n"));
@@ -2345,6 +2375,25 @@
{
tSirRetStatus retStatus = eSIR_SUCCESS;
tSirResultCodes smeRspCode = eSIR_SME_SUCCESS;
+ tpPESession pSessionEntry;
+ tpSirHalWowlExitParams pHalWowlMsg;
+ tANI_U8 PowersavesessionId = 0;
+
+ PowersavesessionId = pMac->pmm.sessionId;
+
+ if((pSessionEntry = peFindSessionBySessionId(pMac,PowersavesessionId)) == NULL )
+ {
+ PELOGW(pmmLog(pMac, LOGE, FL("pmmWowl :palAllocateMemory() failed\n"));)
+ smeRspCode = eSIR_SME_WOWL_EXIT_REQ_FAILED;
+ goto failure;
+ }
+
+ if (palAllocateMemory(pMac->hHdd, (void **)&pHalWowlMsg, sizeof(*pHalWowlMsg)) != eHAL_STATUS_SUCCESS)
+ {
+ pmmLog(pMac, LOGP, FL("Fail to allocate memory for WoWLAN Add Bcast Pattern \n"));
+ smeRspCode = eSIR_SME_WOWL_EXIT_REQ_FAILED;
+ goto failure;
+ }
#ifdef FEATURE_WLAN_DIAG_SUPPORT
limDiagEventReport(pMac, WLAN_PE_DIAG_EXIT_WOWL_REQ_EVENT, NULL, 0, 0);
@@ -2359,7 +2408,10 @@
goto failure;
}
- if((retStatus = pmmSendExitWowlReq(pMac)) != eSIR_SUCCESS)
+ (void) palZeroMemory(pMac->hHdd, (tANI_U8 *)pHalWowlMsg, sizeof(*pHalWowlMsg) );
+ pHalWowlMsg->bssIdx = pSessionEntry->bssIdx;
+
+ if((retStatus = pmmSendExitWowlReq(pMac, pHalWowlMsg)) != eSIR_SUCCESS)
{
pmmLog(pMac, LOGE,
FL("Fail to send WDA_WOWL_EXIT_REQ, reason code %d\n"),
@@ -2370,6 +2422,8 @@
return;
failure:
+ if (pHalWowlMsg != NULL)
+ palFreeMemory( pMac->hHdd, (tANI_U8 *) pHalWowlMsg);
limSendSmeRsp(pMac, eWNI_PMC_EXIT_WOWL_RSP, smeRspCode, 0, 0);
return;
}
@@ -2381,14 +2435,17 @@
\param tpAniSirGlobal pMac
\return None
------------------------------------------------------------*/
-tSirRetStatus pmmSendExitWowlReq(tpAniSirGlobal pMac)
+tSirRetStatus pmmSendExitWowlReq(tpAniSirGlobal pMac, tpSirHalWowlExitParams pHalWowlParams)
{
tSirRetStatus retCode = eSIR_SUCCESS;
tSirMsgQ msgQ;
+ if (NULL == pHalWowlParams)
+ return eSIR_FAILURE;
+
msgQ.type = WDA_WOWL_EXIT_REQ;
msgQ.reserved = 0;
- msgQ.bodyptr = 0;
+ msgQ.bodyptr = pHalWowlParams;
msgQ.bodyval = 0;
pmmLog(pMac, LOGW, FL("Sending WDA_WOWL_EXIT_REQ"));
@@ -2413,17 +2470,30 @@
\param tpAniSirGlobal pMac
\return None
------------------------------------------------------------*/
-void pmmExitWowlanResponseHandler(tpAniSirGlobal pMac, eHalStatus rspStatus)
+void pmmExitWowlanResponseHandler(tpAniSirGlobal pMac, tpSirMsgQ limMsg)
{
+
+ tpSirHalWowlExitParams pHalWowlRspMsg;
+ eHalStatus rspStatus = eHAL_STATUS_FAILURE;
+
/* we need to process all the deferred messages enqueued
* since the initiating the WDA_WOWL_EXIT_REQ.
*/
SET_LIM_PROCESS_DEFD_MESGS(pMac, true);
- // restore PMM state to BMPS mode
- pMac->pmm.gPmmState = ePMM_STATE_BMPS_SLEEP;
+ pHalWowlRspMsg = (tpSirHalWowlExitParams)(limMsg->bodyptr);
+ if (NULL == pHalWowlRspMsg)
+ {
+ pmmLog(pMac, LOGE, FL("Recvd WDA_WOWL_ENTER_RSP with NULL msg "));
+ }
+ else
+ {
+ // restore PMM state to BMPS mode
+ pMac->pmm.gPmmState = ePMM_STATE_BMPS_SLEEP;
+ rspStatus = pHalWowlRspMsg->status;
+ }
- if(rspStatus == eHAL_STATUS_SUCCESS)
+ if( rspStatus == eHAL_STATUS_SUCCESS)
{
pmmLog(pMac, LOGW, FL("Rcvd successful rsp from HAL to exit WOWLAN \n"));
limSendSmeRsp(pMac, eWNI_PMC_EXIT_WOWL_RSP, eSIR_SME_SUCCESS, 0, 0);
@@ -2513,6 +2583,14 @@
tANI_U8 uapsdTriggerMask = 0;
tSirMsgQ msgQ;
tpPESession pSessionEntry;
+ tpExitUapsdParams pExitUapsdParams = NULL;
+
+ if((pSessionEntry = peGetValidPowerSaveSession(pMac)) == NULL )
+ {
+ PELOGW(pmmLog(pMac, LOGW, FL("pmmUapsd :palAllocateMemory() failed\n"));)
+ retStatus = eSIR_FAILURE;
+ return retStatus;
+ }
if (SIR_PM_SLEEP_MODE == mode)
{
@@ -2523,12 +2601,6 @@
return retStatus;
}
- if((pSessionEntry = peGetValidPowerSaveSession(pMac)) == NULL )
- {
- PELOGW(pmmLog(pMac, LOGW, FL("pmmUapsd :palAllocateMemory() failed\n"));)
- retStatus = eSIR_FAILURE;
- return retStatus;
- }
palZeroMemory( pMac->hHdd, (tANI_U8 *)pUapsdParams, sizeof(tUapsdParams));
msgQ.type = WDA_ENTER_UAPSD_REQ;
msgQ.bodyptr = pUapsdParams;
@@ -2568,8 +2640,17 @@
}
else
{
+ if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pExitUapsdParams, sizeof(tExitUapsdParams)) )
+ {
+ PELOGW(pmmLog(pMac, LOGW, FL("pmmUapsd :palAllocateMemory() failed\n"));)
+ retStatus = eSIR_MEM_ALLOC_FAILED;
+ return retStatus;
+ }
+
+ palZeroMemory( pMac->hHdd, (tANI_U8 *)pExitUapsdParams, sizeof(tExitUapsdParams));
msgQ.type = WDA_EXIT_UAPSD_REQ;
- msgQ.bodyptr = NULL;
+ msgQ.bodyptr = pExitUapsdParams;
+ pExitUapsdParams->bssIdx = pSessionEntry->bssIdx;
PELOGW(pmmLog (pMac, LOGW, FL("pmmUapsd: Sending WDA_EXIT_UAPSD_REQ to HAL\n"));)
}
@@ -2589,6 +2670,8 @@
retStatus);)
if (SIR_PM_SLEEP_MODE == mode)
palFreeMemory(pMac->hHdd, (tANI_U8*)pUapsdParams);
+ else
+ palFreeMemory(pMac->hHdd, (tANI_U8*)pExitUapsdParams);
}
return retStatus;
diff --git a/CORE/SME/inc/csrInternal.h b/CORE/SME/inc/csrInternal.h
index 45f50a6..5817543 100644
--- a/CORE/SME/inc/csrInternal.h
+++ b/CORE/SME/inc/csrInternal.h
@@ -574,6 +574,8 @@
tANI_BOOLEAN addTSWhenACMIsOff;
tANI_BOOLEAN fValidateList;
+ //Remove this code once SLM_Sessionization is supported
+ //BMPS_WORKAROUND_NOT_NEEDED
tANI_BOOLEAN doBMPSWorkaround;
//To enable/disable scanning 2.4Ghz channels twice on a single scan request from HDD
@@ -1220,6 +1222,8 @@
tANI_BOOLEAN csrRoamIsCCXAssoc(tpAniSirGlobal pMac);
#endif
+//Remove this code once SLM_Sessionization is supported
+//BMPS_WORKAROUND_NOT_NEEDED
void csrDisconnectAllActiveSessions(tpAniSirGlobal pMac);
#ifdef FEATURE_WLAN_LFR
diff --git a/CORE/SME/inc/pmcApi.h b/CORE/SME/inc/pmcApi.h
index 185cc3c..50df344 100644
--- a/CORE/SME/inc/pmcApi.h
+++ b/CORE/SME/inc/pmcApi.h
@@ -390,17 +390,15 @@
extern eHalStatus pmcWowlAddBcastPattern (
-
tHalHandle hHal,
-
- tpSirWowlAddBcastPtrn pattern);
+ tpSirWowlAddBcastPtrn pattern,
+ tANI_U8 sessionId);
extern eHalStatus pmcWowlDelBcastPattern (
-
tHalHandle hHal,
-
- tpSirWowlDelBcastPtrn pattern);
+ tpSirWowlDelBcastPtrn pattern,
+ tANI_U8 sessionId);
extern eHalStatus pmcEnterWowl (
@@ -415,13 +413,13 @@
void *wakeReasonIndCBContext,
#endif // WLAN_WAKEUP_EVENTS
- tpSirSmeWowlEnterParams wowlEnterParams);
+ tpSirSmeWowlEnterParams wowlEnterParams, tANI_U8 sessionId);
extern eHalStatus pmcExitWowl (tHalHandle hHal);
extern eHalStatus pmcSetHostOffload (tHalHandle hHal, tpSirHostOffloadReq pRequest,
- tANI_U8 *bssId);
+ tANI_U8 sessionId);
/* ---------------------------------------------------------------------------
\fn pmcSetKeepAlive
@@ -432,7 +430,7 @@
eHAL_STATUS_FAILURE Cannot set the keepalive.
eHAL_STATUS_SUCCESS Request accepted.
---------------------------------------------------------------------------*/
-extern eHalStatus pmcSetKeepAlive (tHalHandle hHal, tpSirKeepAliveReq pRequest, tANI_U8 *bssId);
+extern eHalStatus pmcSetKeepAlive (tHalHandle hHal, tpSirKeepAliveReq pRequest, tANI_U8 sessionId);
extern tANI_BOOLEAN pmcValidateConnectState( tHalHandle hHal );
@@ -451,7 +449,8 @@
// Packet Coalescing Filter Match Count Callback declaration
typedef void(*FilterMatchCountCallback)(void *callbackContext,
tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp);
-extern eHalStatus pmcGetFilterMatchCount(tHalHandle hHal, FilterMatchCountCallback callbackRoutine, void *callbackContext);
+extern eHalStatus pmcGetFilterMatchCount(tHalHandle hHal, FilterMatchCountCallback callbackRoutine,
+ void *callbackContext, tANI_U8 sessionId);
#endif // WLAN_FEATURE_PACKET_FILTERING
#ifdef WLAN_FEATURE_GTK_OFFLOAD
@@ -467,7 +466,7 @@
eHAL_STATUS_FAILURE Cannot set the offload.
eHAL_STATUS_SUCCESS Request accepted.
---------------------------------------------------------------------------*/
-extern eHalStatus pmcSetGTKOffload (tHalHandle hHal, tpSirGtkOffloadParams pGtkOffload);
+extern eHalStatus pmcSetGTKOffload (tHalHandle hHal, tpSirGtkOffloadParams pGtkOffload, tANI_U8 sessionId);
/* ---------------------------------------------------------------------------
\fn pmcGetGTKOffload
diff --git a/CORE/SME/inc/smeInside.h b/CORE/SME/inc/smeInside.h
index 1c2b361..dbf55cb 100644
--- a/CORE/SME/inc/smeInside.h
+++ b/CORE/SME/inc/smeInside.h
@@ -186,11 +186,12 @@
\brief Set the host offload feature.
\param hHal - The handle returned by macOpen.
\param pRequest - Pointer to the offload request.
+ \param sessionId . Session index of the session
\return eHalStatus
eHAL_STATUS_FAILURE Cannot set the offload.
eHAL_STATUS_SUCCESS Request accepted.
---------------------------------------------------------------------------*/
-eHalStatus pmcSetNSOffload (tHalHandle hHal, tpSirHostOffloadReq pRequest, tANI_U8 *bssId);
+eHalStatus pmcSetNSOffload (tHalHandle hHal, tpSirHostOffloadReq pRequest, tANI_U8 sessionId);
#endif //WLAN_NS_OFFLOAD
#ifdef FEATURE_WLAN_SCAN_PNO
diff --git a/CORE/SME/inc/sme_Api.h b/CORE/SME/inc/sme_Api.h
index 9fdd4d9..de34a14 100644
--- a/CORE/SME/inc/sme_Api.h
+++ b/CORE/SME/inc/sme_Api.h
@@ -1106,7 +1106,8 @@
---------------------------------------------------------------------------*/
extern eHalStatus sme_WowlAddBcastPattern (
tHalHandle hHal,
- tpSirWowlAddBcastPtrn pattern);
+ tpSirWowlAddBcastPtrn pattern,
+ tANI_U8 sessionId);
/* ---------------------------------------------------------------------------
\fn sme_WowlDelBcastPattern
@@ -1119,7 +1120,8 @@
---------------------------------------------------------------------------*/
extern eHalStatus sme_WowlDelBcastPattern (
tHalHandle hHal,
- tpSirWowlDelBcastPtrn pattern);
+ tpSirWowlDelBcastPtrn pattern,
+ tANI_U8 sessionId);
/* ---------------------------------------------------------------------------
\fn sme_EnterWowl
@@ -1163,7 +1165,7 @@
void (*wakeReasonIndCB) (void *callbackContext, tpSirWakeReasonInd pWakeReasonInd),
void *wakeReasonIndCBContext,
#endif // WLAN_WAKEUP_EVENTS
- tpSirSmeWowlEnterParams wowlEnterParams);
+ tpSirSmeWowlEnterParams wowlEnterParams, tANI_U8 sessionId);
/* ---------------------------------------------------------------------------
\fn sme_ExitWowl
@@ -1953,7 +1955,8 @@
---------------------------------------------------------------------------*/
eHalStatus sme_GetFilterMatchCount(tHalHandle hHal,
FilterMatchCountCallback callbackRoutine,
- void *callbackContext );
+ void *callbackContext,
+ tANI_U8 sessionId);
/* ---------------------------------------------------------------------------
\fn sme_ReceiveFilterClearFilter
@@ -2020,7 +2023,7 @@
\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);
/* ---------------------------------------------------------------------------
\fn sme_GetGTKOffload
@@ -2029,7 +2032,8 @@
\param pRequest - Pointer to the GTK offload response.
\return eHalStatus
---------------------------------------------------------------------------*/
-eHalStatus sme_GetGTKOffload (tHalHandle hHal, GTKOffloadGetInfoCallback callbackRoutine, void *callbackContext );
+eHalStatus sme_GetGTKOffload (tHalHandle hHal, GTKOffloadGetInfoCallback callbackRoutine,
+ void *callbackContext, tANI_U8 sessionId);
#endif // WLAN_FEATURE_GTK_OFFLOAD
#ifdef WLAN_WAKEUP_EVENTS
diff --git a/CORE/SME/src/csr/csrApiRoam.c b/CORE/SME/src/csr/csrApiRoam.c
index 56e0e4b..d7e3907 100644
--- a/CORE/SME/src/csr/csrApiRoam.c
+++ b/CORE/SME/src/csr/csrApiRoam.c
@@ -934,6 +934,8 @@
pMac->roam.configParam.addTSWhenACMIsOff = 0;
pMac->roam.configParam.fScanTwice = eANI_BOOLEAN_FALSE;
+ //Remove this code once SLM_Sessionization is supported
+ //BMPS_WORKAROUND_NOT_NEEDED
pMac->roam.configParam.doBMPSWorkaround = 0;
}
@@ -1275,6 +1277,8 @@
* 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
+ //BMPS_WORKAROUND_NOT_NEEDED
pMac->roam.configParam.doBMPSWorkaround = 0;
#ifdef WLAN_FEATURE_11AC
@@ -4609,7 +4613,9 @@
if( pSession->bRefAssocStartCnt > 0 )
{
pSession->bRefAssocStartCnt--;
- if(!IS_SLM_SESSIONIZATION_SUPPORTED_BY_FW && ( csrIsConcurrentSessionRunning( pMac )))
+ //Remove this code once SLM_Sessionization is supported
+ //BMPS_WORKAROUND_NOT_NEEDED
+ if(!IS_FEATURE_SUPPORTED_BY_FW(SLM_SESSIONIZATION) && ( csrIsConcurrentSessionRunning( pMac )))
{
pMac->roam.configParam.doBMPSWorkaround = 1;
}
@@ -4819,7 +4825,9 @@
#ifdef WLAN_SOFTAP_FEATURE
roamInfo.staId = (tANI_U8)pSmeStartBssRsp->staId;
#endif
- if(!IS_SLM_SESSIONIZATION_SUPPORTED_BY_FW &&
+ //Remove this code once SLM_Sessionization is supported
+ //BMPS_WORKAROUND_NOT_NEEDED
+ if(!IS_FEATURE_SUPPORTED_BY_FW(SLM_SESSIONIZATION) &&
( csrIsConcurrentSessionRunning( pMac )))
{
pMac->roam.configParam.doBMPSWorkaround = 1;
@@ -12926,8 +12934,10 @@
/* Indicate the neighbor roal algorithm about the disconnect indication */
csrNeighborRoamIndicateDisconnect(pMac, sessionId);
#endif
-
- if(!IS_SLM_SESSIONIZATION_SUPPORTED_BY_FW &&
+
+ //Remove this code once SLM_Sessionization is supported
+ //BMPS_WORKAROUND_NOT_NEEDED
+ if(!IS_FEATURE_SUPPORTED_BY_FW(SLM_SESSIONIZATION) &&
csrIsInfraApStarted( pMac ) &&
pMac->roam.configParam.doBMPSWorkaround)
{
diff --git a/CORE/SME/src/csr/csrUtil.c b/CORE/SME/src/csr/csrUtil.c
index 78e0472..971c24d 100644
--- a/CORE/SME/src/csr/csrUtil.c
+++ b/CORE/SME/src/csr/csrUtil.c
@@ -6269,6 +6269,9 @@
* are some issues seen with BMPS resume during this transition and this is a workaround which will allow the Infra STA session to
* disconnect and auto connect back and enter BMPS this giving the same effect as resuming BMPS
*/
+
+//Remove this code once SLM_Sessionization is supported
+//BMPS_WORKAROUND_NOT_NEEDED
void csrDisconnectAllActiveSessions(tpAniSirGlobal pMac)
{
tANI_U8 i;
diff --git a/CORE/SME/src/pmc/pmc.c b/CORE/SME/src/pmc/pmc.c
index bcc0749..ee0ae09 100644
--- a/CORE/SME/src/pmc/pmc.c
+++ b/CORE/SME/src/pmc/pmc.c
@@ -2505,7 +2505,9 @@
return eHAL_STATUS_PMC_NOT_NOW;
}
- if(!IS_SLM_SESSIONIZATION_SUPPORTED_BY_FW)
+ //Remove this code once SLM_Sessionization is supported
+ //BMPS_WORKAROUND_NOT_NEEDED
+ if(!IS_FEATURE_SUPPORTED_BY_FW(SLM_SESSIONIZATION))
{
smsLog(pMac, LOG1, FL("doBMPSWorkaround %u\n"), pMac->roam.configParam.doBMPSWorkaround);
if (pMac->roam.configParam.doBMPSWorkaround)
diff --git a/CORE/SME/src/pmc/pmcApi.c b/CORE/SME/src/pmc/pmcApi.c
index ec5c705..40d44df 100644
--- a/CORE/SME/src/pmc/pmcApi.c
+++ b/CORE/SME/src/pmc/pmcApi.c
@@ -2093,9 +2093,11 @@
---------------------------------------------------------------------------*/
eHalStatus pmcWowlAddBcastPattern (
tHalHandle hHal,
- tpSirWowlAddBcastPtrn pattern)
+ tpSirWowlAddBcastPtrn pattern,
+ tANI_U8 sessionId)
{
tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
+ tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, sessionId );
#ifdef FEATURE_WLAN_DIAG_SUPPORT
vos_log_powersave_wow_add_ptrn_pkt_type *log_ptr = NULL;
@@ -2110,6 +2112,12 @@
return eHAL_STATUS_FAILURE;
}
+ if( pSession == NULL)
+ {
+ smsLog(pMac, LOGE, FL("Session not found \n"));
+ return eHAL_STATUS_FAILURE;
+ }
+
#ifdef FEATURE_WLAN_DIAG_SUPPORT
if( log_ptr )
{
@@ -2141,8 +2149,15 @@
}
if( pMac->pmc.pmcState == IMPS || pMac->pmc.pmcState == REQUEST_IMPS )
{
+ eHalStatus status;
+ if( !csrIsConnStateConnectedInfra (pMac, sessionId ))
+ {
+ smsLog(pMac, LOGE, FL("Ignoring the indication as we are not connected\n"));
+ return eHAL_STATUS_FAILURE;
+ }
+ vos_mem_copy(pattern->bssId, pSession->connectedProfile.bssid, sizeof(tSirMacAddr));
//Wake up the chip first
- eHalStatus status = pmcDeferMsg( pMac, eWNI_PMC_WOWL_ADD_BCAST_PTRN,
+ status = pmcDeferMsg( pMac, eWNI_PMC_WOWL_ADD_BCAST_PTRN,
pattern, sizeof(tSirWowlAddBcastPtrn) );
if( eHAL_STATUS_PMC_PENDING == status )
@@ -2181,9 +2196,11 @@
---------------------------------------------------------------------------*/
eHalStatus pmcWowlDelBcastPattern (
tHalHandle hHal,
- tpSirWowlDelBcastPtrn pattern)
+ tpSirWowlDelBcastPtrn pattern,
+ tANI_U8 sessionId)
{
tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
+ tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, sessionId );
#ifdef FEATURE_WLAN_DIAG_SUPPORT
WLAN_VOS_DIAG_EVENT_DEF(wowRequest, vos_event_wlan_powersave_wow_payload_type);
@@ -2197,6 +2214,12 @@
smsLog(pMac, LOG2, "PMC: entering pmcWowlDelBcastPattern");
+ if( NULL == pSession )
+ {
+ smsLog(pMac, LOGE, FL("Session not found \n"));
+ 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\n"),
@@ -2213,8 +2236,16 @@
if( pMac->pmc.pmcState == IMPS || pMac->pmc.pmcState == REQUEST_IMPS )
{
+ eHalStatus status;
+ if( !csrIsConnStateConnectedInfra (pMac, sessionId ))
+ {
+ smsLog(pMac, LOGE, FL("Ignoring the indication as we are not connected\n"));
+ return eHAL_STATUS_FAILURE;
+ }
+
+ vos_mem_copy(pattern->bssId, pSession->connectedProfile.bssid, sizeof(tSirMacAddr));
//Wake up the chip first
- eHalStatus status = pmcDeferMsg( pMac, eWNI_PMC_WOWL_DEL_BCAST_PTRN,
+ status = pmcDeferMsg( pMac, eWNI_PMC_WOWL_DEL_BCAST_PTRN,
pattern, sizeof(tSirWowlDelBcastPtrn) );
if( eHAL_STATUS_PMC_PENDING == status )
@@ -2285,9 +2316,10 @@
void (*wakeReasonIndCB) (void *callbackContext, tpSirWakeReasonInd pWakeReasonInd),
void *wakeReasonIndCBContext,
#endif // WLAN_WAKEUP_EVENTS
- tpSirSmeWowlEnterParams wowlEnterParams)
+ tpSirSmeWowlEnterParams wowlEnterParams, tANI_U8 sessionId)
{
tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
+ tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, sessionId );
#ifdef FEATURE_WLAN_DIAG_SUPPORT
WLAN_VOS_DIAG_EVENT_DEF(wowRequest, vos_event_wlan_powersave_wow_payload_type);
@@ -2306,11 +2338,25 @@
{
wowRequest.wow_type |= 2;
}
-
WLAN_VOS_DIAG_EVENT_REPORT(&wowRequest, EVENT_WLAN_POWERSAVE_WOW);
#endif
- smsLog(pMac, LOG2, "PMC: entering pmcEnterWowl\n");
+ smsLog(pMac, LOG2, FL("PMC: entering pmcEnterWowl\n"));
+
+ if( NULL == pSession )
+ {
+ smsLog(pMac, LOGE, FL("Session not found \n"));
+ return eHAL_STATUS_FAILURE;
+ }
+
+ if( !csrIsConnStateConnectedInfra (pMac, sessionId ))
+ {
+ smsLog(pMac, LOGE, FL("Ignoring the indication as we are not connected\n"));
+ return eHAL_STATUS_FAILURE;
+ }
+
+ vos_mem_copy(wowlEnterParams->bssId, pSession->connectedProfile.bssid,
+ sizeof(tSirMacAddr));
if( !PMC_IS_READY(pMac) )
{
@@ -2428,21 +2474,13 @@
eHAL_STATUS_FAILURE Cannot set the offload.
eHAL_STATUS_SUCCESS Request accepted.
---------------------------------------------------------------------------*/
-eHalStatus pmcSetHostOffload (tHalHandle hHal, tpSirHostOffloadReq pRequest, tANI_U8 *bssId)
+eHalStatus pmcSetHostOffload (tHalHandle hHal, tpSirHostOffloadReq pRequest,
+ tANI_U8 sessionId)
{
tpSirHostOffloadReq pRequestBuf;
vos_msg_t msg;
- tpPESession psessionEntry;
- tANI_U8 sessionId;
tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
-
- if((psessionEntry = peFindSessionByBssid( pMac, bssId,&sessionId)) == NULL )
- {
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, "%s: Unable to find"
- "the psessionEntry for bssid : 0x%x:0x%x:0x%x:0x%x:0x%x:0x%x",
- __FUNCTION__,bssId[5],bssId[4],bssId[3],bssId[2],bssId[1],bssId[0]);
- return eHAL_STATUS_FAILURE;
- }
+ tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, sessionId );
VOS_TRACE( VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, "%s: IP address = %d.%d.%d.%d", __FUNCTION__,
pRequest->params.hostIpv4Addr[0], pRequest->params.hostIpv4Addr[1],
@@ -2454,9 +2492,22 @@
VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, "%s: Not able to allocate memory for host offload request", __FUNCTION__);
return eHAL_STATUS_FAILED_ALLOC;
}
- vos_mem_copy(pRequestBuf, pRequest, sizeof(tSirHostOffloadReq));
- pRequestBuf->bssIdx = psessionEntry->bssIdx;
+ if(NULL == pSession )
+ {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, "%s: SESSION not Found\n", __FUNCTION__);
+ return eHAL_STATUS_FAILURE;
+ }
+
+ if( !csrIsConnStateConnectedInfra (pMac, sessionId ))
+ {
+ smsLog(pMac, LOGE, FL("Ignoring the indication as we are not connected\n"));
+ return eHAL_STATUS_FAILURE;
+ }
+
+ vos_mem_copy(pRequest->bssId, pSession->connectedProfile.bssid, sizeof(tSirMacAddr));
+
+ vos_mem_copy(pRequestBuf, pRequest, sizeof(tSirHostOffloadReq));
msg.type = WDA_SET_HOST_OFFLOAD;
msg.reserved = 0;
@@ -2480,20 +2531,12 @@
eHAL_STATUS_FAILURE Cannot set the keepalive.
eHAL_STATUS_SUCCESS Request accepted.
---------------------------------------------------------------------------*/
-eHalStatus pmcSetKeepAlive (tHalHandle hHal, tpSirKeepAliveReq pRequest, tANI_U8 *bssId)
+eHalStatus pmcSetKeepAlive (tHalHandle hHal, tpSirKeepAliveReq pRequest, tANI_U8 sessionId)
{
tpSirKeepAliveReq pRequestBuf;
vos_msg_t msg;
- tpPESession psessionEntry;
- tANI_U8 sessionId;
tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
- if((psessionEntry = peFindSessionByBssid( pMac, bssId,&sessionId)) == NULL )
- {
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, "%s: Unable to find"
- "the psessionEntry for bssid : 0x%x:0x%x:0x%x:0x%x:0x%x:0x%x",
- __FUNCTION__,bssId[5],bssId[4],bssId[3],bssId[2],bssId[1],bssId[0]);
- return eHAL_STATUS_FAILURE;
- }
+ tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, sessionId );
VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO_LOW, "%s: "
"WDA_SET_KEEP_ALIVE message", __FUNCTION__);
@@ -2506,9 +2549,23 @@
__FUNCTION__);
return eHAL_STATUS_FAILED_ALLOC;
}
- vos_mem_copy(pRequestBuf, pRequest, sizeof(tSirKeepAliveReq));
+ if(pSession == NULL )
+ {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, "%s: "
+ " Session not Found", __FUNCTION__);
+ vos_mem_free(pRequestBuf);
+ return eHAL_STATUS_FAILURE;
+ }
- pRequestBuf->bssIdx = psessionEntry->bssIdx;
+ if( !csrIsConnStateConnectedInfra (pMac, sessionId ))
+ {
+ smsLog(pMac, LOGE, FL("Ignoring the indication as we are not connected\n"));
+ vos_mem_free(pRequestBuf);
+ return eHAL_STATUS_FAILURE;
+ }
+
+ vos_mem_copy(pRequest->bssId, pSession->connectedProfile.bssid, sizeof(tSirMacAddr));
+ vos_mem_copy(pRequestBuf, pRequest, sizeof(tSirKeepAliveReq));
VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO_LOW, "buff TP %d "
"input TP %d ", pRequestBuf->timePeriod, pRequest->timePeriod);
@@ -2540,22 +2597,29 @@
eHAL_STATUS_FAILURE Cannot set the offload.
eHAL_STATUS_SUCCESS Request accepted.
---------------------------------------------------------------------------*/
-eHalStatus pmcSetNSOffload (tHalHandle hHal, tpSirHostOffloadReq pRequest, tANI_U8 *bssId)
+eHalStatus pmcSetNSOffload (tHalHandle hHal, tpSirHostOffloadReq pRequest,
+ tANI_U8 sessionId)
{
+ tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
tpSirHostOffloadReq pRequestBuf;
vos_msg_t msg;
int i;
- tpPESession psessionEntry;
- tANI_U8 sessionId;
- tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
- if((psessionEntry = peFindSessionByBssid( pMac, bssId,&sessionId)) == NULL )
+ tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, sessionId );
+
+ if( NULL == pSession )
{
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, "%s: Unable to find"
- "the psessionEntry for bssid : 0x%x:0x%x:0x%x:0x%x:0x%x:0x%x",
- __FUNCTION__,bssId[5],bssId[4],bssId[3],bssId[2],bssId[1],bssId[0]);
+ smsLog(pMac, LOGE, FL("Session not found \n"));
return eHAL_STATUS_FAILURE;
}
+ if( !csrIsConnStateConnectedInfra (pMac, sessionId ))
+ {
+ smsLog(pMac, LOGE, FL("Ignoring the indication as we are not connected\n"));
+ return eHAL_STATUS_FAILURE;
+ }
+ vos_mem_copy(pRequest->bssId, pSession->connectedProfile.bssid,
+ sizeof(tSirMacAddr));
+
pRequestBuf = vos_mem_malloc(sizeof(tSirHostOffloadReq));
if (NULL == pRequestBuf)
{
@@ -2564,8 +2628,6 @@
}
vos_mem_copy(pRequestBuf, pRequest, sizeof(tSirHostOffloadReq));
- pRequestBuf->bssIdx = psessionEntry->bssIdx;
-
msg.type = WDA_SET_NS_OFFLOAD;
msg.reserved = 0;
msg.bodyptr = pRequestBuf;
@@ -3015,12 +3077,14 @@
(
tHalHandle hHal,
FilterMatchCountCallback callbackRoutine,
- void *callbackContext
+ void *callbackContext,
+ tANI_U8 sessionId
)
{
tpSirRcvFltPktMatchRsp pRequestBuf;
vos_msg_t msg;
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", __FUNCTION__);
@@ -3033,6 +3097,20 @@
"memory for Get PC Filter Match Count request", __FUNCTION__);
return eHAL_STATUS_FAILED_ALLOC;
}
+ if(NULL == pSession )
+ {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
+ "%s: Session not found ", __FUNCTION__);
+ return eHAL_STATUS_FAILURE;
+ }
+
+ if( !csrIsConnStateConnectedInfra (pMac, sessionId ))
+ {
+ smsLog(pMac, LOGE, FL("Ignoring the indication as we are not connected\n"));
+ return eHAL_STATUS_FAILURE;
+ }
+
+ vos_mem_copy(pRequestBuf->bssId, pSession->connectedProfile.bssid, sizeof(tSirMacAddr));
msg.type = WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ;
msg.reserved = 0;
@@ -3073,11 +3151,14 @@
eHAL_STATUS_FAILURE Cannot set the offload.
eHAL_STATUS_SUCCESS Request accepted.
---------------------------------------------------------------------------*/
-eHalStatus pmcSetGTKOffload (tHalHandle hHal, tpSirGtkOffloadParams pGtkOffload)
+eHalStatus pmcSetGTKOffload (tHalHandle hHal, tpSirGtkOffloadParams pGtkOffload,
+ tANI_U8 sessionId)
{
tpSirGtkOffloadParams pRequestBuf;
vos_msg_t msg;
int i;
+ 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",
__FUNCTION__, pGtkOffload->ullKeyReplayCounter);
@@ -3089,9 +3170,23 @@
"memory for GTK offload request", __FUNCTION__);
return eHAL_STATUS_FAILED_ALLOC;
}
+ if(NULL == pSession )
+ {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
+ "%s: Session not found ", __FUNCTION__);
+ return eHAL_STATUS_FAILURE;
+ }
+
+ if( !csrIsConnStateConnectedInfra (pMac, sessionId ))
+ {
+ smsLog(pMac, LOGE, FL("Ignoring the indication as we are not connected\n"));
+ return eHAL_STATUS_FAILURE;
+ }
+
+ vos_mem_copy(pGtkOffload->bssId, pSession->connectedProfile.bssid, sizeof(tSirMacAddr));
vos_mem_copy(pRequestBuf, pGtkOffload, sizeof(tSirGtkOffloadParams));
-
+
msg.type = WDA_GTK_OFFLOAD_REQ;
msg.reserved = 0;
msg.bodyptr = pRequestBuf;
@@ -3115,11 +3210,13 @@
eHAL_STATUS_FAILURE Cannot set the offload.
eHAL_STATUS_SUCCESS Request accepted.
---------------------------------------------------------------------------*/
-eHalStatus pmcGetGTKOffload(tHalHandle hHal, GTKOffloadGetInfoCallback callbackRoutine, void *callbackContext)
+eHalStatus pmcGetGTKOffload(tHalHandle hHal, GTKOffloadGetInfoCallback callbackRoutine,
+ void *callbackContext, tANI_U8 sessionId)
{
tpSirGtkOffloadGetInfoRspParams pRequestBuf;
vos_msg_t msg;
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",
__FUNCTION__);
@@ -3132,6 +3229,20 @@
return eHAL_STATUS_FAILED_ALLOC;
}
+ if(NULL == pSession )
+ {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
+ "%s: Session not found ", __FUNCTION__);
+ return eHAL_STATUS_FAILURE;
+ }
+
+ if( !csrIsConnStateConnectedInfra (pMac, sessionId ))
+ {
+ smsLog(pMac, LOGE, FL("Ignoring the indication as we are not connected\n"));
+ return eHAL_STATUS_FAILURE;
+ }
+ vos_mem_copy(pRequestBuf->bssId, pSession->connectedProfile.bssid, sizeof(tSirMacAddr));
+
msg.type = WDA_GTK_OFFLOAD_GETINFO_REQ;
msg.reserved = 0;
msg.bodyptr = pRequestBuf;
diff --git a/CORE/SME/src/pmc/pmcLogDump.c b/CORE/SME/src/pmc/pmcLogDump.c
index bb8a077..1aacbb6 100644
--- a/CORE/SME/src/pmc/pmcLogDump.c
+++ b/CORE/SME/src/pmc/pmcLogDump.c
@@ -212,8 +212,10 @@
tSirSmeWowlEnterParams wowlEnterParams;
tSirRetStatus status;
tANI_U32 length;
- (void) arg3; (void) arg4;
-
+ tANI_U8 sessionId = 0;
+
+ (void) arg4;
+
palZeroMemory(pMac->hHdd, &wowlEnterParams, sizeof(tSirSmeWowlEnterParams));
if (arg1 == 0 && arg2 == 0)
@@ -243,12 +245,20 @@
wowlEnterParams.ucPatternFilteringEnable = 1;
}
+ if(arg3 == CSR_ROAM_SESSION_MAX )
+ {
+ smsLog(pMac, LOGE, "Enter valid sessionId\n");
+ return p;
+ }
pMac->pmc.bmpsEnabled = TRUE;
pMac->pmc.wowlEnabled = TRUE;
+
+ sessionId = (tANI_U8 ) arg3;
#ifdef WLAN_WAKEUP_EVENTS
- (void)sme_EnterWowl(pMac, dump_pmc_callbackRoutine, pMac, dump_pmc_callbackRoutine2, pMac, &wowlEnterParams);
+ (void)sme_EnterWowl(pMac, dump_pmc_callbackRoutine, pMac, dump_pmc_callbackRoutine2, pMac,
+ &wowlEnterParams, sessionId);
#else // WLAN_WAKEUP_EVENTS
- (void)sme_EnterWowl(pMac, dump_pmc_callbackRoutine, pMac, &wowlEnterParams);
+ (void)sme_EnterWowl(pMac, dump_pmc_callbackRoutine, pMac, &wowlEnterParams, sessionId);
#endif // WLAN_WAKEUP_EVENTS
return p;
}
@@ -265,11 +275,12 @@
dump_pmc_remove_ptrn( tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3, tANI_U32 arg4, char *p)
{
tSirWowlDelBcastPtrn delPattern;
- (void) arg2; (void) arg3; (void) arg4;
-
+ tANI_U8 sessionId = 0;
+ (void) arg3; (void) arg4;
+
palZeroMemory(pMac->hHdd, &delPattern, sizeof(tSirWowlDelBcastPtrn));
- if(arg1 <= 7)
+ if((arg1 <= 7) || (arg2 == CSR_ROAM_SESSION_MAX))
{
delPattern.ucPatternId = (tANI_U8)arg1;
}
@@ -279,7 +290,8 @@
return p;
}
- (void)pmcWowlDelBcastPattern(pMac, &delPattern);
+ sessionId = (tANI_U8 ) arg2;
+ (void)pmcWowlDelBcastPattern(pMac, &delPattern, sessionId);
return p;
}
@@ -313,28 +325,37 @@
tSirWowlAddBcastPtrn addPattern;
tSirWowlDelBcastPtrn delPattern;
tSirSmeWowlEnterParams wowlEnterParams;
+ 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));
- (void) arg1; (void) arg2; (void) arg3; (void) arg4;
+ (void) arg2; (void) arg3; (void) arg4;
+ if(arg1 == CSR_ROAM_SESSION_MAX)
+ {
+ smsLog(pMac, LOGE, "dump_pmc_test_Wowl: Invalid sessionId\n");
+ return p;
+ }
+
+ sessionId = (tANI_U8 ) arg1;
//Add pattern
- sme_WowlAddBcastPattern(pMac, &addPattern);
+ sme_WowlAddBcastPattern(pMac, &addPattern, sessionId);
//Delete pattern
- sme_WowlDelBcastPattern(pMac, &delPattern);
+ sme_WowlDelBcastPattern(pMac, &delPattern, sessionId);
//Force the device into BMPS
pMac->pmc.pmcState = BMPS;
//Enter Wowl
#ifdef WLAN_WAKEUP_EVENTS
- sme_EnterWowl(pMac, dump_pmc_callbackRoutine, pMac, dump_pmc_callbackRoutine2, pMac, &wowlEnterParams);
+ sme_EnterWowl(pMac, dump_pmc_callbackRoutine, pMac, dump_pmc_callbackRoutine2, pMac,
+ &wowlEnterParams, sessionId);
#else // WLAN_WAKEUP_EVENTS
- sme_EnterWowl(pMac, dump_pmc_callbackRoutine, pMac, &wowlEnterParams);
+ sme_EnterWowl(pMac, dump_pmc_callbackRoutine, pMac, &wowlEnterParams, sessionId);
#endif // WLAN_WAKEUP_EVENTS
smeRsp.messageType = eWNI_PMC_ENTER_WOWL_RSP;
pmcMessageProcessor(pMac, &smeRsp);
@@ -369,11 +390,11 @@
{912, "PMC: Request Full Power", dump_pmc_request_full_power},
//Unit Test Related
{913, "PMC: Test UAPSD", dump_pmc_test_uapsd},
- {914, "PMC: Test WOWL", dump_pmc_test_Wowl},
+ {914, "PMC: Test WOWL : Syntax :dump 914 <sessionId>", dump_pmc_test_Wowl},
// WoWL Related
- {915, "PMC: Enter WoWL: Syntax: dump 915 <enable_magic_pkt> <enable_ptrn_match>", dump_pmc_enter_wowl},
+ {915, "PMC: Enter WoWL: Syntax: dump 915 <enable_magic_pkt> <enable_ptrn_match> <sessionId>", dump_pmc_enter_wowl},
{916, "PMC: Exit WoWL", dump_pmc_exit_wowl},
- {917, "PMC: Remove a pattern: Syntax: dump 917 <pattern_id(0-7)>", dump_pmc_remove_ptrn},
+ {917, "PMC: Remove a pattern: Syntax: dump 917 <pattern_id(0-7) <sessionId>>", dump_pmc_remove_ptrn},
{918, "PMC: Enable BMPS", dump_pmc_enable_bmps},
{919, "PMC: Disable BMPS", dump_pmc_disable_bmps}
};
diff --git a/CORE/SME/src/sme_common/sme_Api.c b/CORE/SME/src/sme_common/sme_Api.c
index 4db224c..9d67f9e 100644
--- a/CORE/SME/src/sme_common/sme_Api.c
+++ b/CORE/SME/src/sme_common/sme_Api.c
@@ -3409,14 +3409,15 @@
---------------------------------------------------------------------------*/
eHalStatus sme_WowlAddBcastPattern (
tHalHandle hHal,
- tpSirWowlAddBcastPtrn pattern)
+ tpSirWowlAddBcastPtrn pattern,
+ tANI_U8 sessionId)
{
eHalStatus status = eHAL_STATUS_FAILURE;
tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
status = sme_AcquireGlobalLock( &pMac->sme );
if ( HAL_STATUS_SUCCESS( status ) )
{
- status = pmcWowlAddBcastPattern (hHal, pattern);
+ status = pmcWowlAddBcastPattern (hHal, pattern, sessionId);
sme_ReleaseGlobalLock( &pMac->sme );
}
@@ -3434,14 +3435,15 @@
---------------------------------------------------------------------------*/
eHalStatus sme_WowlDelBcastPattern (
tHalHandle hHal,
- tpSirWowlDelBcastPtrn pattern)
+ tpSirWowlDelBcastPtrn pattern,
+ tANI_U8 sessionId)
{
eHalStatus status = eHAL_STATUS_FAILURE;
tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
status = sme_AcquireGlobalLock( &pMac->sme );
if ( HAL_STATUS_SUCCESS( status ) )
{
- status = pmcWowlDelBcastPattern (hHal, pattern);
+ status = pmcWowlDelBcastPattern (hHal, pattern, sessionId);
sme_ReleaseGlobalLock( &pMac->sme );
}
@@ -3486,7 +3488,7 @@
void (*wakeIndicationCB) (void *callbackContext, tpSirWakeReasonInd pWakeReasonInd),
void *wakeIndicationCBContext,
#endif // WLAN_WAKEUP_EVENTS
- tpSirSmeWowlEnterParams wowlEnterParams)
+ tpSirSmeWowlEnterParams wowlEnterParams, tANI_U8 sessionId)
{
eHalStatus status = eHAL_STATUS_FAILURE;
tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
@@ -3497,10 +3499,9 @@
#ifdef WLAN_WAKEUP_EVENTS
wakeIndicationCB, wakeIndicationCBContext,
#endif // WLAN_WAKEUP_EVENTS
- wowlEnterParams);
+ wowlEnterParams, sessionId);
sme_ReleaseGlobalLock( &pMac->sme );
}
-
return (status);
}
/* ---------------------------------------------------------------------------
@@ -5046,26 +5047,18 @@
{
tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
eHalStatus status = eHAL_STATUS_FAILURE;
- tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, sessionId );
-
- if(pSession == NULL )
- {
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, "%s: "
- "Unable to find the csrSession", __FUNCTION__);
- return status;
- }
if ( eHAL_STATUS_SUCCESS == ( status = sme_AcquireGlobalLock( &pMac->sme ) ) )
{
#ifdef WLAN_NS_OFFLOAD
if(SIR_IPV6_NS_OFFLOAD == pRequest->offloadType)
{
- status = pmcSetNSOffload( hHal, pRequest ,pSession->connectedProfile.bssid);
+ status = pmcSetNSOffload( hHal, pRequest, sessionId);
}
else
#endif //WLAN_NS_OFFLOAD
{
- status = pmcSetHostOffload (hHal, pRequest, pSession->connectedProfile.bssid);
+ status = pmcSetHostOffload (hHal, pRequest, sessionId);
}
sme_ReleaseGlobalLock( &pMac->sme );
}
@@ -5081,14 +5074,15 @@
\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;
if ( eHAL_STATUS_SUCCESS == ( status = sme_AcquireGlobalLock( &pMac->sme ) ) )
{
- status = pmcSetGTKOffload( hHal, pRequest );
+ status = pmcSetGTKOffload( hHal, pRequest, sessionId );
sme_ReleaseGlobalLock( &pMac->sme );
}
@@ -5102,14 +5096,15 @@
\param pRequest - Pointer to the GTK offload response.
\return eHalStatus
---------------------------------------------------------------------------*/
-eHalStatus sme_GetGTKOffload (tHalHandle hHal, GTKOffloadGetInfoCallback callbackRoutine, void *callbackContext )
+eHalStatus sme_GetGTKOffload (tHalHandle hHal, GTKOffloadGetInfoCallback callbackRoutine,
+ void *callbackContext, tANI_U8 sessionId )
{
tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
eHalStatus status;
if ( eHAL_STATUS_SUCCESS == ( status = sme_AcquireGlobalLock( &pMac->sme ) ) )
{
- pmcGetGTKOffload(hHal, callbackRoutine, callbackContext);
+ pmcGetGTKOffload(hHal, callbackRoutine, callbackContext, sessionId);
sme_ReleaseGlobalLock( &pMac->sme );
}
@@ -5129,21 +5124,9 @@
{
tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
eHalStatus status;
- tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, sessionId );
-
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, "%s: "
- "setting Keep alive in SME TP %d", __FUNCTION__,pRequest->timePeriod);
-
- if(pSession == NULL )
- {
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, "%s: "
- " Session not Found", __FUNCTION__);
- return eHAL_STATUS_FAILURE;
- }
-
if ( eHAL_STATUS_SUCCESS == ( status = sme_AcquireGlobalLock( &pMac->sme ) ) )
{
- status = pmcSetKeepAlive (hHal, pRequest, pSession->connectedProfile.bssid);
+ status = pmcSetKeepAlive (hHal, pRequest, sessionId);
sme_ReleaseGlobalLock( &pMac->sme );
}
@@ -6059,6 +6042,14 @@
"allocate memory for 8023 Multicast List request", __FUNCTION__);
return eHAL_STATUS_FAILED_ALLOC;
}
+
+ if( !csrIsConnStateConnectedInfra (pMac, sessionId ))
+ {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, "%s: Ignoring the "
+ "indication as we are not connected", __FUNCTION__);
+ vos_mem_free(pRequestBuf);
+ return eHAL_STATUS_FAILURE;
+ }
vos_mem_copy(pRequestBuf, pMulticastAddrs, sizeof(tSirRcvFltMcAddrList));
vos_mem_copy(pRequestBuf->selfMacAddr, pSession->selfMacAddr, sizeof(tSirMacAddr));
@@ -6097,18 +6088,35 @@
((pRcvPktFilterCfg->numFieldParams - 1) *
sizeof(tSirRcvPktFilterFieldParams));
pRequestBuf = vos_mem_malloc(allocSize);
- if ((NULL == pRequestBuf) || (NULL == pSession))
+
+ if (NULL == pRequestBuf)
{
VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, "%s: Not able to "
"allocate memory for Receive Filter Set Filter request", __FUNCTION__);
return eHAL_STATUS_FAILED_ALLOC;
}
- vos_mem_copy(pRequestBuf, pRcvPktFilterCfg, allocSize);
- vos_mem_copy( pRequestBuf->selfMacAddr, pSession->selfMacAddr, sizeof(tSirMacAddr));
- vos_mem_copy( pRequestBuf->bssId, pSession->connectedProfile.bssid,
+ if( NULL == pSession )
+ {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, "%s: Session Not found ", __FUNCTION__);
+ vos_mem_free(pRequestBuf);
+ return eHAL_STATUS_FAILURE;
+ }
+
+ if( !csrIsConnStateConnectedInfra (pMac, sessionId ))
+ {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, "%s: Ignoring the "
+ "indication as we are not connected", __FUNCTION__);
+ 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(pRequestBuf, pRcvPktFilterCfg, allocSize);
+
msg.type = WDA_RECEIVE_FILTER_SET_FILTER_REQ;
msg.reserved = 0;
msg.bodyptr = pRequestBuf;
@@ -6167,7 +6175,8 @@
eHalStatus sme_GetFilterMatchCount(tHalHandle hHal,
FilterMatchCountCallback callbackRoutine,
- void *callbackContext )
+ void *callbackContext,
+ tANI_U8 sessionId)
{
tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
eHalStatus status;
@@ -6176,7 +6185,7 @@
if ( eHAL_STATUS_SUCCESS == ( status = sme_AcquireGlobalLock( &pMac->sme)))
{
- pmcGetFilterMatchCount(hHal, callbackRoutine, callbackContext);
+ pmcGetFilterMatchCount(hHal, callbackRoutine, callbackContext, sessionId);
sme_ReleaseGlobalLock( &pMac->sme );
}
@@ -6197,19 +6206,35 @@
pRcvFltPktClearParam->filterId);
pRequestBuf = vos_mem_malloc(sizeof(tSirRcvFltPktClearParam));
- if ((NULL == pRequestBuf) || (NULL == pSession))
+ if (NULL == pRequestBuf)
{
VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
"%s: Not able to allocate memory for Receive Filter "
"Clear Filter request", __FUNCTION__);
return eHAL_STATUS_FAILED_ALLOC;
}
- vos_mem_copy(pRequestBuf, pRcvFltPktClearParam, sizeof(tSirRcvFltPktClearParam));
+ if( NULL == pSession )
+ {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
+ "%s: Session Not find ", __FUNCTION__);
+ vos_mem_free(pRequestBuf);
+ return eHAL_STATUS_FAILURE;
+ }
- vos_mem_copy( pRequestBuf->selfMacAddr, pSession->selfMacAddr, sizeof(tSirMacAddr));
- vos_mem_copy( pRequestBuf->bssId, pSession->connectedProfile.bssid,
+ if( !csrIsConnStateConnectedInfra (pMac, sessionId ))
+ {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, "%s: Ignoring the "
+ "indication as we are not connected", __FUNCTION__);
+ vos_mem_free(pRequestBuf);
+ 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(pRequestBuf, pRcvFltPktClearParam, sizeof(tSirRcvFltPktClearParam));
+
msg.type = WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ;
msg.reserved = 0;
msg.bodyptr = pRequestBuf;
diff --git a/CORE/WDA/inc/legacy/halMsgApi.h b/CORE/WDA/inc/legacy/halMsgApi.h
index 81b60d1..03bc619 100644
--- a/CORE/WDA/inc/legacy/halMsgApi.h
+++ b/CORE/WDA/inc/legacy/halMsgApi.h
@@ -1190,6 +1190,16 @@
//
// Mesg header is used from tSirMsgQ
+// Mesg Type = SIR_HAL_EXIT_UAPSD_REQ
+//
+typedef struct sExitUapsdParams
+{
+ eHalStatus status;
+ tANI_U8 bssIdx;
+}tExitUapsdParams, *tpExitUapsdParams;
+
+//
+// Mesg header is used from tSirMsgQ
// Mesg Type = SIR_LIM_DEL_BA_IND
//
typedef struct sBADeleteParams
@@ -1283,7 +1293,13 @@
tANI_U8 respReqd;
}tEnterBmpsParams, *tpEnterBmpsParams;
-
+//BMPS response
+typedef struct sEnterBmpsRspParams
+{
+ /* success or failure */
+ tANI_U32 status;
+ tANI_U8 bssIdx;
+}tEnterBmpsRspParams, *tpEnterBmpsRspParams;
//
// Mesg header is used from tSirMsgQ
// Mesg Type = SIR_HAL_SET_MAX_TX_POWER_REQ
diff --git a/CORE/WDA/inc/wlan_qct_wda.h b/CORE/WDA/inc/wlan_qct_wda.h
index ea37a7a..08994d1 100644
--- a/CORE/WDA/inc/wlan_qct_wda.h
+++ b/CORE/WDA/inc/wlan_qct_wda.h
@@ -128,7 +128,8 @@
* Check the version number and find if MCC feature is supported or not
*/
#define IS_MCC_SUPPORTED (WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual( 0, 1, 1, 0))
-#define IS_SLM_SESSIONIZATION_SUPPORTED_BY_FW (WDA_getFwWlanFeatCaps(SLM_SESSIONIZATION))
+#define IS_FEATURE_SUPPORTED_BY_FW(featEnumValue) (WDA_getFwWlanFeatCaps(featEnumValue))
+
/*--------------------------------------------------------------------------
diff --git a/CORE/WDA/src/wlan_qct_wda.c b/CORE/WDA/src/wlan_qct_wda.c
index 6607102..57048cb 100644
--- a/CORE/WDA/src/wlan_qct_wda.c
+++ b/CORE/WDA/src/wlan_qct_wda.c
@@ -6160,10 +6160,12 @@
* FUNCTION: WDA_EnterBmpsReqCallback
* send Enter BMPS RSP back to PE
*/
-void WDA_EnterBmpsReqCallback(WDI_Status status, void* pUserData)
+void WDA_EnterBmpsReqCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
{
tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
tWDA_CbContext *pWDA;
+ tEnterBmpsParams *pEnterBmpsRspParams;
+
VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
"<------ %s " ,__FUNCTION__);
if(NULL == pWdaParams)
@@ -6173,10 +6175,17 @@
VOS_ASSERT(0) ;
return ;
}
- pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
- vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
+
+ pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
+ pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
+
+ pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
+ pEnterBmpsRspParams->status = CONVERT_WDI2SIR_STATUS(pwdiEnterBmpsRsp->wdiStatus);
+
+ vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
vos_mem_free(pWdaParams) ;
- WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
+ WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
+
return ;
}
/*
@@ -6228,13 +6237,12 @@
wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
wdiEnterBmpsReqParams->wdiReqStatusCB = NULL;
- // we are done with the input
- vos_mem_free(pEnterBmpsReqParams);
+
/* Store param pointer as passed in by caller */
/* store Params pass it to WDI */
pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
+ pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
pWdaParams->pWdaContext = pWDA;
- pWdaParams->wdaMsgParam = NULL;
status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
(WDI_EnterBmpsRspCb)WDA_EnterBmpsReqCallback, pWdaParams);
if (IS_WDI_STATUS_FAILURE(status))
@@ -6263,11 +6271,12 @@
* FUNCTION: WDA_ExitBmpsReqCallback
* send Exit BMPS RSP back to PE
*/
-void WDA_ExitBmpsReqCallback(WDI_Status status, void* pUserData)
+void WDA_ExitBmpsReqCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
{
tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
tWDA_CbContext *pWDA;
- tExitBmpsParams *pExitBmpsReqParams;
+ tExitBmpsParams *pExitBmpsRspParams;
+
VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
"<------ %s " ,__FUNCTION__);
if(NULL == pWdaParams)
@@ -6277,14 +6286,17 @@
VOS_ASSERT(0) ;
return ;
}
- pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
- pExitBmpsReqParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam ;
+
+ pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
+ pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
+
+ pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
+ pExitBmpsRspParams->status = CONVERT_WDI2SIR_STATUS(pwdiExitBmpsRsp->wdiStatus);
vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
vos_mem_free(pWdaParams) ;
- pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(status) ;
- WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
+ WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
return ;
}
/*
@@ -6346,11 +6358,11 @@
* FUNCTION: WDA_EnterUapsdReqCallback
* send Enter UAPSD RSP back to PE
*/
-void WDA_EnterUapsdReqCallback(WDI_Status status, void* pUserData)
+void WDA_EnterUapsdReqCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
{
tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
tWDA_CbContext *pWDA;
- tUapsdParams *pEnterUapsdReqParams;
+ tUapsdParams *pEnterUapsdRsqParams;
VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
"<------ %s " ,__FUNCTION__);
if(NULL == pWdaParams)
@@ -6360,12 +6372,16 @@
VOS_ASSERT(0) ;
return ;
}
- pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
- pEnterUapsdReqParams = (tUapsdParams *)pWdaParams->wdaMsgParam ;
+
+ pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
+ pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
+
+ pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
+ pEnterUapsdRsqParams->status = CONVERT_WDI2SIR_STATUS(pwdiEnterUapsdRspParams->wdiStatus);
+
vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
vos_mem_free(pWdaParams) ;
- pEnterUapsdReqParams->status = CONVERT_WDI2SIR_STATUS(status) ;
- WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdReqParams , 0) ;
+ WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
return ;
}
/*
@@ -6439,30 +6455,86 @@
* FUNCTION: WDA_ExitUapsdReqCallback
* send Exit UAPSD RSP back to PE
*/
-void WDA_ExitUapsdReqCallback(WDI_Status status, void* pUserData)
+void WDA_ExitUapsdReqCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
{
- tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
+
+ tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
+ tWDA_CbContext *pWDA;
+ tExitUapsdParams *pExitUapsdRspParams;
+
VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
"<------ %s " ,__FUNCTION__);
- WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
+ if(NULL == pWdaParams)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s: pWdaParams received NULL", __FUNCTION__);
+ VOS_ASSERT(0);
+ return;
+ }
+
+ pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
+ pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
+
+ pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
+ pExitUapsdRspParams->status = CONVERT_WDI2SIR_STATUS(pwdiExitRspParam->wdiStatus);
+
+ vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
+ vos_mem_free(pWdaParams) ;
+
+ WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
return ;
}
/*
* FUNCTION: WDA_ProcessExitUapsdReq
* Request to WDI to Exit UAPSD power state.
*/
-VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA)
+VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
+ tExitUapsdParams *pExitUapsdParams)
{
WDI_Status status = WDI_STATUS_SUCCESS ;
+ tWDA_ReqParams *pWdaParams ;
+ WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
+ (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
+ sizeof(WDI_ExitUapsdReqParamsType)) ;
+
VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
"------> %s " ,__FUNCTION__);
- status = WDI_ExitUapsdReq((WDI_ExitUapsdRspCb)WDA_ExitUapsdReqCallback, pWDA);
+
+ if(NULL == wdiExitUapsdReqParams)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s: VOS MEM Alloc Failure", __FUNCTION__);
+ 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", __FUNCTION__);
+ VOS_ASSERT(0);
+ vos_mem_free(wdiExitUapsdReqParams);
+ return VOS_STATUS_E_NOMEM;
+ }
+
+ wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
+ wdiExitUapsdReqParams->wdiReqStatusCB = NULL;
+
+ /* Store param pointer as passed in by caller */
+ /* store Params pass it to WDI */
+ pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
+ pWdaParams->pWdaContext = pWDA;
+ pWdaParams->wdaMsgParam = pExitUapsdParams;
+
+ status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdReqCallback, pWdaParams);
if(IS_WDI_STATUS_FAILURE(status))
{
VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
"Failure in Exit UAPSD REQ WDI API, free all the memory " );
- pWDA->wdaWdiApiMsgParam = NULL;
- pWDA->wdaMsgParam = NULL;
+ vos_mem_free(pWdaParams->wdaMsgParam) ;
+ vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
+ vos_mem_free(pWdaParams) ;
+
}
return CONVERT_WDI2VOS_STATUS(status) ;
}
@@ -7338,8 +7410,9 @@
wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
pHostOffloadParams->enableOrDisable;
- wdiHostOffloadInfo->wdiHostOffloadInfo.bssIdx =
- pHostOffloadParams->bssIdx;
+ vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
+ pHostOffloadParams->bssId, sizeof(wpt_macAddr));
+
switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
{
case SIR_IPV4_ARP_REPLY_OFFLOAD:
@@ -7487,8 +7560,10 @@
pKeepAliveParams->packetType;
wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
pKeepAliveParams->timePeriod;
- wdiKeepAliveInfo->wdiKeepAliveInfo.bssIdx =
- pKeepAliveParams->bssIdx;
+
+ vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
+ pKeepAliveParams->bssId,
+ sizeof(wpt_macAddr));
if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
{
@@ -7569,7 +7644,9 @@
* FUNCTION: WDA_WowlAddBcPtrnReqCallback
*
*/
-void WDA_WowlAddBcPtrnReqCallback(WDI_Status status, void* pUserData)
+void WDA_WowlAddBcPtrnReqCallback(
+ WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
+ void* pUserData)
{
tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
@@ -7651,6 +7728,9 @@
wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
}
+ vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
+ pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
+
wdiWowlAddBcPtrnInfo->wdiReqStatusCB = NULL;
/* Store param pointer as passed in by caller */
/* store Params pass it to WDI */
@@ -7675,7 +7755,9 @@
* FUNCTION: WDA_WowlDelBcPtrnReqCallback
*
*/
-void WDA_WowlDelBcPtrnReqCallback(WDI_Status status, void* pUserData)
+void WDA_WowlDelBcPtrnReqCallback(
+ WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
+ void* pUserData)
{
tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
@@ -7725,6 +7807,10 @@
}
wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
pWowlDelBcPtrnParams->ucPatternId;
+
+ vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
+ pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
+
wdiWowlDelBcPtrnInfo->wdiReqStatusCB = NULL;
/* Store param pointer as passed in by caller */
/* store Params pass it to WDI */
@@ -7749,7 +7835,7 @@
* FUNCTION: WDA_WowlEnterReqCallback
*
*/
-void WDA_WowlEnterReqCallback(WDI_Status status, void* pUserData)
+void WDA_WowlEnterReqCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
{
tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
tWDA_CbContext *pWDA;
@@ -7766,10 +7852,13 @@
pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
+ pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
+
vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
vos_mem_free(pWdaParams) ;
- pWowlEnterParams->status = CONVERT_WDI2SIR_STATUS(status) ;
+ pWowlEnterParams->status =
+ CONVERT_WDI2SIR_STATUS(pwdiWowlEnterRspParam->status);
WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
return ;
}
@@ -7840,6 +7929,9 @@
pWowlEnterParams->ucWoWBSSConnLoss;
#endif // WLAN_WAKEUP_EVENTS
+ wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
+ pWowlEnterParams->bssIdx;
+
wdiWowlEnterInfo->wdiReqStatusCB = NULL;
/* Store param pointer as passed in by caller */
/* store Params pass it to WDI */
@@ -7864,36 +7956,88 @@
* FUNCTION: WDA_WowlExitReqCallback
*
*/
-void WDA_WowlExitReqCallback(WDI_Status status, void* pUserData)
+void WDA_WowlExitReqCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
{
- tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
+ tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
+ tWDA_CbContext *pWDA;
+ tSirHalWowlExitParams *pWowlExitParams;
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "<------ %s " ,__FUNCTION__);
+ if(NULL == pWdaParams)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s: pWdaParams received NULL", __FUNCTION__);
+ VOS_ASSERT(0) ;
+ return ;
+ }
+ pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
+ pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
+
+ pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
+ pWowlExitParams->status = CONVERT_WDI2SIR_STATUS(pwdiWowlExitRsp->status);
+
+ vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
+ vos_mem_free(pWdaParams) ;
+
VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
"<------ %s " ,__FUNCTION__);
- WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
+ WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
return ;
}
/*
* FUNCTION: WDA_ProcessWowlExitReq
* Request to WDI to add WOWL Bcast pattern
*/
-VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA)
+VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
+ tSirHalWowlExitParams *pWowlExitParams)
{
VOS_STATUS status = VOS_STATUS_SUCCESS;
WDI_Status wstatus;
-
+ WDI_WowlExitReqParamsType *wdiWowlExitInfo =
+ (WDI_WowlExitReqParamsType *)vos_mem_malloc(
+ sizeof(WDI_WowlExitReqParamsType)) ;
+ tWDA_ReqParams *pWdaParams ;
VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
"------> %s " ,__FUNCTION__);
- wstatus = WDI_WowlExitReq((WDI_WowlExitReqCb)WDA_WowlExitReqCallback, pWDA);
+ if(NULL == wdiWowlExitInfo)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s: VOS MEM Alloc Failure", __FUNCTION__);
+ 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", __FUNCTION__);
+ VOS_ASSERT(0);
+ vos_mem_free(wdiWowlExitInfo);
+ return VOS_STATUS_E_NOMEM;
+ }
+
+ wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
+ pWowlExitParams->bssIdx;
+
+ wdiWowlExitInfo->wdiReqStatusCB = NULL;
+
+ /* Store param pointer as passed in by caller */
+ /* store Params pass it to WDI */
+ pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
+ pWdaParams->pWdaContext = pWDA;
+ pWdaParams->wdaMsgParam = pWowlExitParams;
+
+ wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
+ (WDI_WowlExitReqCb)WDA_WowlExitReqCallback, pWdaParams);
if(IS_WDI_STATUS_FAILURE(wstatus))
{
VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
"Failure in Wowl exit REQ WDI API, free all the memory " );
status = CONVERT_WDI2VOS_STATUS(wstatus);
- vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
- vos_mem_free(pWDA->wdaMsgParam);
- pWDA->wdaWdiApiMsgParam = NULL;
- pWDA->wdaMsgParam = NULL;
+ vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
+ vos_mem_free(pWdaParams->wdaMsgParam);
+ vos_mem_free(pWdaParams) ;
}
return status;
}/*WDA_ProcessWowlExitReq*/
@@ -8359,7 +8503,8 @@
* FUNCTION: WDA_HostOffloadReqCallback
*
*/
-void WDA_GTKOffloadReqCallback(WDI_Status status, void* pUserData)
+void WDA_GTKOffloadReqCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
+ void* pUserData)
{
tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
@@ -8417,6 +8562,10 @@
//
// Fill wdiGtkOffloadInfo from pGtkOffloadParams
//
+
+ vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
+ pGtkOffloadParams->bssId, sizeof(wpt_macAddr))
+
wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
// Copy KCK
vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
@@ -8455,7 +8604,8 @@
* FUNCTION: WDA_GtkOffloadGetInfoCallback
*
*/
-void WDA_GtkOffloadGetInfoCallback(WDI_Status status, void * pUserData)
+void WDA_GtkOffloadGetInfoCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
+ void * pUserData)
{
tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
tWDA_CbContext *pWDA;
@@ -8479,11 +8629,12 @@
pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
pGtkOffloadGetInfoRsp->mesgLen = sizeof(tpSirGtkOffloadGetInfoRspParams);
- pGtkOffloadGetInfoRsp->ulStatus = pGtkOffloadGetInfoReq->ulStatus;
- pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pGtkOffloadGetInfoReq->ullKeyReplayCounter;
- pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pGtkOffloadGetInfoReq->ulTotalRekeyCount;
- pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pGtkOffloadGetInfoReq->ulGTKRekeyCount;
- pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pGtkOffloadGetInfoReq->ulIGTKRekeyCount;
+ pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
+ pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
+ pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
+ pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
+ pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
+ pGtkOffloadGetInfoRsp->bssIdx = pwdiGtkOffloadGetInfoRsparams->bssIdx;
/* VOS message wrapper */
vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
@@ -8706,6 +8857,9 @@
/* Store param pointer as passed in by caller */
pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
+ vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
+ pGtkOffloadGetInfoRsp->bssId, sizeof(wpt_macAddr))
+
status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoCallback, pWdaParams);
if(IS_WDI_STATUS_FAILURE(status))
@@ -9252,7 +9406,7 @@
{
if(pWDA->wdaState == WDA_READY_STATE)
{
- WDA_ProcessExitUapsdReq(pWDA);
+ WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
}
else
{
@@ -9376,7 +9530,7 @@
}
case WDA_WOWL_EXIT_REQ:
{
- WDA_ProcessWowlExitReq(pWDA);
+ WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
break;
}
case WDA_TL_FLUSH_AC_REQ:
@@ -10680,7 +10834,9 @@
* FUNCTION: WDA_8023MulticastListReqCallback
*
*/
-void WDA_8023MulticastListReqCallback(WDI_Status status, void * pUserData)
+void WDA_8023MulticastListReqCallback(
+ WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
+ void * pUserData)
{
tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
@@ -10784,7 +10940,9 @@
* FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
*
*/
-void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status status, void * pUserData)
+void WDA_ReceiveFilterSetFilterReqCallback(
+ WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
+ void * pUserData)
{
tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
@@ -10923,7 +11081,9 @@
* FUNCTION: WDA_FilterMatchCountReqCallback
*
*/
-void WDA_FilterMatchCountReqCallback(WDI_Status status, void * pUserData)
+void WDA_FilterMatchCountReqCallback(
+ WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
+ void * pUserData)
{
tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
tWDA_CbContext *pWDA;
@@ -10942,7 +11102,7 @@
VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
"%s: pRcvFltPktMatchCntRsp is NULL", __FUNCTION__);
VOS_ASSERT(0) ;
- vos_mem_free(pWdaParams);
+ vos_mem_free(pWdaParams);
return ;
}
@@ -10951,7 +11111,7 @@
VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
"%s: pWdaParams received NULL", __FUNCTION__);
VOS_ASSERT(0) ;
- vos_mem_free(pRcvFltPktMatchCntRsp);
+ vos_mem_free(pRcvFltPktMatchCntRsp);
return ;
}
pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
@@ -10963,7 +11123,7 @@
pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
- pRcvFltPktMatchCntRsp->status = pRcvFltPktMatchCntReq->status;
+ pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
{
@@ -11023,6 +11183,10 @@
}
pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = NULL;
+ vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
+ pRcvFltPktMatchRsp->bssId,
+ sizeof(wpt_macAddr));
+
/* Store Params pass it to WDI */
pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
pWdaParams->pWdaContext = pWDA;
@@ -11047,7 +11211,9 @@
* FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
*
*/
-void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status status, void * pUserData)
+void WDA_ReceiveFilterClearFilterReqCallback(
+ WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
+ void * pUserData)
{
tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
diff --git a/CORE/WDI/CP/inc/wlan_qct_wdi.h b/CORE/WDI/CP/inc/wlan_qct_wdi.h
index 918407a..76bd1c2 100644
--- a/CORE/WDI/CP/inc/wlan_qct_wdi.h
+++ b/CORE/WDI/CP/inc/wlan_qct_wdi.h
@@ -3075,6 +3075,19 @@
}WDI_EnterBmpsReqParamsType;
/*---------------------------------------------------------------------------
+ WDI_EnterBmpsReqParamsType
+ Enter BMPS parameters passed from WDI to WDA
+---------------------------------------------------------------------------*/
+typedef struct
+{
+ /*Status of the response*/
+ WDI_Status wdiStatus;
+
+ /*BssIDX of the session*/
+ wpt_uint8 bssIdx;
+}WDI_EnterBmpsRspParamsType;
+
+/*---------------------------------------------------------------------------
WDI_ExitBmpsReqinfoType
Exit BMPS parameters passed to WDA from UMAC
---------------------------------------------------------------------------*/
@@ -3102,6 +3115,19 @@
}WDI_ExitBmpsReqParamsType;
/*---------------------------------------------------------------------------
+ WDI_ExitBmpsReqParamsType
+ Exit BMPS parameters passed from WDI to WDA
+---------------------------------------------------------------------------*/
+typedef struct
+{
+ /*Status of the response*/
+ WDI_Status wdiStatus;
+
+ /*BssIDX of the session*/
+ wpt_uint8 bssIdx;
+}WDI_ExitBmpsRspParamsType;
+
+/*---------------------------------------------------------------------------
WDI_EnterUapsdReqinfoType
Enter UAPSD parameters passed to WDA from UMAC
---------------------------------------------------------------------------*/
@@ -3119,6 +3145,19 @@
}WDI_EnterUapsdReqinfoType;
/*---------------------------------------------------------------------------
+ WDI_EnterUapsdRspParamsType
+ Enter UAPSD parameters passed from WDI to WDA
+---------------------------------------------------------------------------*/
+typedef struct
+{
+ /*Status of the response*/
+ WDI_Status wdiStatus;
+
+ /*BssIDX of the session*/
+ wpt_uint8 bssIdx;
+}WDI_EnterUapsdRspParamsType;
+
+/*---------------------------------------------------------------------------
WDI_EnterUapsdReqinfoType
Enter UAPSD parameters passed to WDI from WDA
---------------------------------------------------------------------------*/
@@ -3147,6 +3186,45 @@
}WDI_UpdateUapsdReqinfoType;
/*---------------------------------------------------------------------------
+ WDI_ExitUapsdReqinfoType
+ Exit UAPSD parameters passed to WDA from UMAC
+---------------------------------------------------------------------------*/
+typedef struct
+{
+ wpt_uint8 bssIdx;
+}WDI_ExitUapsdReqinfoType;
+
+/*---------------------------------------------------------------------------
+ WDI_ExitUapsdReqParamsType
+ Exit UAPSD parameters passed to WDI from WDA
+---------------------------------------------------------------------------*/
+typedef struct
+{
+ /*Exit UAPSD Info Type, same as tUapsdParams */
+ WDI_ExitUapsdReqinfoType wdiExitUapsdInfo;
+ /*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_ExitUapsdReqParamsType;
+
+/*---------------------------------------------------------------------------
+ WDI_ExitUapsdRspParamsType
+ Exit UAPSD parameters passed from WDI to WDA
+---------------------------------------------------------------------------*/
+typedef struct
+{
+ /*Status of the response*/
+ WDI_Status wdiStatus;
+
+ /*BssIDX of the session*/
+ wpt_uint8 bssIdx;
+}WDI_ExitUapsdRspParamsType;
+
+/*---------------------------------------------------------------------------
WDI_UpdateUapsdReqParamsType
Update UAPSD parameters passed to WDI form WDA
---------------------------------------------------------------------------*/
@@ -3300,7 +3378,6 @@
wpt_uint8 srcIPv6AddrValid : 1;
wpt_uint8 targetIPv6Addr1Valid : 1;
wpt_uint8 targetIPv6Addr2Valid : 1;
- wpt_uint8 bssIdx;
} WDI_NSOffloadParams;
#endif //WLAN_NS_OFFLOAD
@@ -3308,7 +3385,7 @@
{
wpt_uint8 ucOffloadType;
wpt_uint8 ucEnableOrDisable;
- wpt_uint8 bssIdx;
+ wpt_macAddr bssId;
union
{
wpt_uint8 aHostIpv4Addr [4];
@@ -3347,7 +3424,7 @@
wpt_uint8 aHostIpv4Addr[4];
wpt_uint8 aDestIpv4Addr[4];
wpt_uint8 aDestMacAddr[6];
- wpt_uint8 bssIdx;
+ wpt_macAddr bssId;
} WDI_KeepAliveReqType;
/*---------------------------------------------------------------------------
@@ -3383,7 +3460,7 @@
wpt_uint8 ucPatternMask[WDI_WOWL_BCAST_PATTERN_MAX_SIZE]; // Pattern mask
wpt_uint8 ucPatternExt[WDI_WOWL_BCAST_PATTERN_MAX_SIZE]; // Extra pattern
wpt_uint8 ucPatternMaskExt[WDI_WOWL_BCAST_PATTERN_MAX_SIZE]; // Extra pattern mask
- wpt_uint8 bssIdx;
+ wpt_macAddr bssId;
} WDI_WowlAddBcPtrnInfoType;
/*---------------------------------------------------------------------------
@@ -3404,13 +3481,26 @@
}WDI_WowlAddBcPtrnReqParamsType;
/*---------------------------------------------------------------------------
+ WDI_WowlAddBcPtrnRspParamsType
+ Wowl add ptrn info passed from WDI to WDA
+---------------------------------------------------------------------------*/
+typedef struct
+{
+ /*Status of the response*/
+ WDI_Status wdiStatus;
+ /*BssIDX of the session*/
+ wpt_uint8 bssIdx;
+}WDI_WowlAddBcPtrnRspParamsType;
+
+/*---------------------------------------------------------------------------
WDI_WowlDelBcPtrnInfoType
Wowl add ptrn info passed to WDA form UMAC
---------------------------------------------------------------------------*/
typedef struct
{
/* Pattern ID of the wakeup pattern to be deleted */
- wpt_uint8 ucPatternId;
+ wpt_uint8 ucPatternId;
+ wpt_macAddr bssId;
} WDI_WowlDelBcPtrnInfoType;
/*---------------------------------------------------------------------------
@@ -3431,6 +3521,18 @@
}WDI_WowlDelBcPtrnReqParamsType;
/*---------------------------------------------------------------------------
+ WDI_WowlDelBcPtrnRspParamsType
+ Wowl Del ptrn info passed from WDI to WDA
+---------------------------------------------------------------------------*/
+typedef struct
+{
+ /*Status of the response*/
+ WDI_Status wdiStatus;
+ /*BssIDX of the session*/
+ wpt_uint8 bssIdx;
+}WDI_WowlDelBcPtrnRspParamsType;
+
+/*---------------------------------------------------------------------------
WDI_WowlEnterInfoType
Wowl enter info passed to WDA form UMAC
---------------------------------------------------------------------------*/
@@ -3513,6 +3615,10 @@
*/
wpt_uint8 ucWoWBSSConnLoss;
#endif // WLAN_WAKEUP_EVENTS
+
+ /* BSSIDX used to find the current session
+ */
+ wpt_uint8 bssIdx;
} WDI_WowlEnterInfoType;
/*---------------------------------------------------------------------------
@@ -3533,6 +3639,62 @@
}WDI_WowlEnterReqParamsType;
/*---------------------------------------------------------------------------
+ WDI_WowlEnterRsqParamsType
+ Wowl enter info passed from WDI to WDA
+---------------------------------------------------------------------------*/
+typedef struct
+{
+ /*Status of the response message*/
+ WDI_Status status;
+
+ /* BSSIDX used to find the current session
+ */
+ wpt_uint8 bssIdx;
+}WDI_WowlEnterRspParamsType;
+
+/*---------------------------------------------------------------------------
+ WDI_WowlExitInfoType
+ Wowl exit info passed to WDA form UMAC
+ ---------------------------------------------------------------------------*/
+typedef struct
+{
+ /* BSSIDX used to find the current session
+ */
+ wpt_uint8 bssIdx;
+} WDI_WowlExitInfoType;
+
+/*---------------------------------------------------------------------------
+ WDI_WowlExitReqParamsType
+ Wowl exit info passed to WDI form WDA
+---------------------------------------------------------------------------*/
+typedef struct
+{
+ /*Wowl delete ptrn Info Type, same as WDI_SmeWowlEnterParams */
+ WDI_WowlExitInfoType wdiWowlExitInfo;
+ /*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_WowlExitReqParamsType;
+
+/*---------------------------------------------------------------------------
+ WDI_WowlExitRspParamsType
+ Wowl exit info passed from WDI to WDA
+---------------------------------------------------------------------------*/
+typedef struct
+{
+ /*Status of the response message*/
+ WDI_Status status;
+
+ /* BSSIDX used to find the current session
+ */
+ wpt_uint8 bssIdx;
+}WDI_WowlExitRspParamsType;
+
+/*---------------------------------------------------------------------------
WDI_ConfigureAppsCpuWakeupStateReqParamsType
Apps Cpu Wakeup State parameters passed to WDI form WDA
---------------------------------------------------------------------------*/
@@ -3788,6 +3950,7 @@
wpt_uint8 aKCK[16]; /* Key confirmation key */
wpt_uint8 aKEK[16]; /* key encryption key */
wpt_uint64 ullKeyReplayCounter; /* replay counter */
+ wpt_macAddr bssId;
} WDI_GtkOffloadReqParams;
typedef struct
@@ -3811,6 +3974,8 @@
{
/* success or failure */
wpt_uint32 ulStatus;
+ /*BssIdx of the response */
+ wpt_uint8 bssIdx;
} WDI_GtkOffloadRspParams;
typedef struct
@@ -3831,9 +3996,16 @@
/*---------------------------------------------------------------------------
* WDI_GTK_OFFLOAD_GETINFO_REQ
*--------------------------------------------------------------------------*/
+typedef struct
+{
+ /*BssIdx of the response */
+ wpt_macAddr bssId;
+} WDI_GtkOffloadGetInfoReqParams;
typedef struct
{
+
+ WDI_GtkOffloadGetInfoReqParams WDI_GtkOffloadGetInfoReqParams;
/*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 */
@@ -3854,6 +4026,7 @@
wpt_uint32 ulTotalRekeyCount; /* total rekey attempts */
wpt_uint32 ulGTKRekeyCount; /* successful GTK rekeys */
wpt_uint32 ulIGTKRekeyCount; /* successful iGTK rekeys */
+ wpt_uint8 bssIdx;
} WDI_GtkOffloadGetInfoRspParams;
typedef struct
@@ -4265,9 +4438,10 @@
wpt_uint8 filterType;
wpt_uint32 numFieldParams;
wpt_uint32 coalesceTime;
- WDI_RcvPktFilterFieldParams paramsData[1];
wpt_macAddr selfMacAddr;
wpt_macAddr bssId;
+ WDI_RcvPktFilterFieldParams paramsData[1];
+
}WDI_RcvPktFilterCfgType;
typedef struct
@@ -4285,6 +4459,15 @@
WDI_RcvPktFilterCfgType wdiPktFilterCfg;
} WDI_SetRcvPktFilterReqParamsType;
+typedef struct
+{
+ /*Result of the operation*/
+ WDI_Status wdiStatus;
+ /* BSSIDX of the Set Receive Filter
+ */
+ wpt_uint8 bssIdx;
+} WDI_SetRcvPktFilterRspParamsType;
+
//
// Filter Packet Match Count Parameters
//
@@ -4298,6 +4481,10 @@
/*The user data passed in by UMAC, it will be sent back when the above
function pointer will be called */
void* pUserData;
+
+ /* BSSID of the Match count
+ */
+ wpt_macAddr bssId;
} WDI_RcvFltPktMatchCntReqParamsType;
typedef struct
@@ -4308,34 +4495,15 @@
typedef struct
{
- /* Success or Failure */
- wpt_uint32 status;
- WDI_RcvFltPktMatchCnt filterMatchCnt[WDI_MAX_NUM_FILTERS];
-
- /*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_RcvFltPktMatchRspParams;
+ /*Result of the operation*/
+ WDI_Status wdiStatus;
-typedef struct
-{
- WDI_RcvFltPktMatchRspParams fltPktMatchRspParams;
- /*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;
+ /* BSSIDX of the Match count response
+ */
+ wpt_uint8 bssIdx;
+
} WDI_RcvFltPktMatchCntRspParamsType;
-
//
// Receive Filter Clear Parameters
//
@@ -4360,6 +4528,16 @@
void* pUserData;
} WDI_RcvFltPktClearReqParamsType;
+typedef struct
+{
+ /*Result of the operation*/
+ WDI_Status wdiStatus;
+ /* BSSIDX of the Match count response
+ */
+ wpt_uint8 bssIdx;
+
+} WDI_RcvFltPktClearRspParamsType;
+
//
// Multicast Address List Parameters
//
@@ -4383,6 +4561,16 @@
function pointer will be called */
void* pUserData;
} WDI_RcvFltPktSetMcListReqParamsType;
+
+typedef struct
+{
+ /*Result of the operation*/
+ WDI_Status wdiStatus;
+ /* BSSIDX of the Match count response
+ */
+ wpt_uint8 bssIdx;
+} WDI_RcvFltPktSetMcListRspParamsType;
+
#endif // WLAN_FEATURE_PACKET_FILTERING
/*---------------------------------------------------------------------------
@@ -5308,7 +5496,7 @@
RETURN VALUE
The result code associated with performing the operation
---------------------------------------------------------------------------*/
-typedef void (*WDI_EnterBmpsRspCb)(WDI_Status wdiStatus,
+typedef void (*WDI_EnterBmpsRspCb)(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp,
void* pUserData);
/*---------------------------------------------------------------------------
@@ -5330,7 +5518,7 @@
RETURN VALUE
The result code associated with performing the operation
---------------------------------------------------------------------------*/
-typedef void (*WDI_ExitBmpsRspCb)(WDI_Status wdiStatus,
+typedef void (*WDI_ExitBmpsRspCb)( WDI_ExitBmpsRspParamsType *pwdiExitBmpsRspParams,
void* pUserData);
/*---------------------------------------------------------------------------
@@ -5352,7 +5540,7 @@
RETURN VALUE
The result code associated with performing the operation
---------------------------------------------------------------------------*/
-typedef void (*WDI_EnterUapsdRspCb)(WDI_Status wdiStatus,
+typedef void (*WDI_EnterUapsdRspCb)( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParam,
void* pUserData);
/*---------------------------------------------------------------------------
@@ -5374,7 +5562,7 @@
RETURN VALUE
The result code associated with performing the operation
---------------------------------------------------------------------------*/
-typedef void (*WDI_ExitUapsdRspCb)(WDI_Status wdiStatus,
+typedef void (*WDI_ExitUapsdRspCb)(WDI_ExitUapsdRspParamsType *pwidExitUapsdRsp,
void* pUserData);
/*---------------------------------------------------------------------------
@@ -5550,7 +5738,7 @@
RETURN VALUE
The result code associated with performing the operation
---------------------------------------------------------------------------*/
-typedef void (*WDI_WowlAddBcPtrnCb)(WDI_Status wdiStatus,
+typedef void (*WDI_WowlAddBcPtrnCb)( WDI_WowlAddBcPtrnRspParamsType *pwdiWowlAddBcPtrnParams,
void* pUserData);
/*---------------------------------------------------------------------------
@@ -5572,7 +5760,7 @@
RETURN VALUE
The result code associated with performing the operation
---------------------------------------------------------------------------*/
-typedef void (*WDI_WowlDelBcPtrnCb)(WDI_Status wdiStatus,
+typedef void (*WDI_WowlDelBcPtrnCb)( WDI_WowlDelBcPtrnRspParamsType *pwdiWowlDelBcstPtrRsp,
void* pUserData);
/*---------------------------------------------------------------------------
@@ -5594,8 +5782,8 @@
RETURN VALUE
The result code associated with performing the operation
---------------------------------------------------------------------------*/
-typedef void (*WDI_WowlEnterReqCb)(WDI_Status wdiStatus,
- void* pUserData);
+typedef void (*WDI_WowlEnterReqCb)( WDI_WowlEnterRspParamsType *pwdiwowlEnterRsp,
+ void* pUserData);
/*---------------------------------------------------------------------------
WDI_WowlExitReqCb
@@ -5616,7 +5804,7 @@
RETURN VALUE
The result code associated with performing the operation
---------------------------------------------------------------------------*/
-typedef void (*WDI_WowlExitReqCb)(WDI_Status wdiStatus,
+typedef void (*WDI_WowlExitReqCb)( WDI_WowlExitRspParamsType *pwdiWowlExitRsp,
void* pUserData);
/*---------------------------------------------------------------------------
@@ -5957,8 +6145,9 @@
RETURN VALUE
The result code associated with performing the operation
---------------------------------------------------------------------------*/
-typedef void (*WDI_8023MulticastListCb)(WDI_Status wdiStatus,
- void* pUserData);
+typedef void (*WDI_8023MulticastListCb)(
+ WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
+ void* pUserData);
/*---------------------------------------------------------------------------
WDI_ReceiveFilterSetFilterCb
@@ -5979,8 +6168,9 @@
RETURN VALUE
The result code associated with performing the operation
---------------------------------------------------------------------------*/
-typedef void (*WDI_ReceiveFilterSetFilterCb)(WDI_Status wdiStatus,
- void* pUserData);
+typedef void (*WDI_ReceiveFilterSetFilterCb)(
+ WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
+ void* pUserData);
/*---------------------------------------------------------------------------
WDI_FilterMatchCountCb
@@ -6001,8 +6191,9 @@
RETURN VALUE
The result code associated with performing the operation
---------------------------------------------------------------------------*/
-typedef void (*WDI_FilterMatchCountCb)(WDI_Status wdiStatus,
- void* pUserData);
+typedef void (*WDI_FilterMatchCountCb)(
+ WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
+ void* pUserData);
/*---------------------------------------------------------------------------
WDI_ReceiveFilterClearFilterCb
@@ -6023,8 +6214,9 @@
RETURN VALUE
The result code associated with performing the operation
---------------------------------------------------------------------------*/
-typedef void (*WDI_ReceiveFilterClearFilterCb)(WDI_Status wdiStatus,
- void* pUserData);
+typedef void (*WDI_ReceiveFilterClearFilterCb)(
+ WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
+ void* pUserData);
#endif // WLAN_FEATURE_PACKET_FILTERING
/*---------------------------------------------------------------------------
@@ -6092,7 +6284,7 @@
RETURN VALUE
The result code associated with performing the operation
---------------------------------------------------------------------------*/
-typedef void (*WDI_GtkOffloadCb)(WDI_Status wdiStatus,
+typedef void (*WDI_GtkOffloadCb)( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
void* pUserData);
/*---------------------------------------------------------------------------
@@ -6114,7 +6306,7 @@
RETURN VALUE
The result code associated with performing the operation
---------------------------------------------------------------------------*/
-typedef void (*WDI_GtkOffloadGetInfoCb)(WDI_Status wdiStatus,
+typedef void (*WDI_GtkOffloadGetInfoCb)( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
void* pUserData);
#endif // WLAN_FEATURE_GTK_OFFLOAD
@@ -7428,6 +7620,7 @@
WDI_Status
WDI_ExitUapsdReq
(
+ WDI_ExitUapsdReqParamsType *pwdiExitUapsdReqParams,
WDI_ExitUapsdRspCb wdiExitUapsdRspCb,
void* pUserData
);
@@ -7826,6 +8019,7 @@
WDI_Status
WDI_WowlExitReq
(
+ WDI_WowlExitReqParamsType* pwdiWowlExitParams,
WDI_WowlExitReqCb wdiWowlExitCb,
void* pUserData
);
diff --git a/CORE/WDI/CP/src/wlan_qct_wdi.c b/CORE/WDI/CP/src/wlan_qct_wdi.c
index bbfd376..5500691 100644
--- a/CORE/WDI/CP/src/wlan_qct_wdi.c
+++ b/CORE/WDI/CP/src/wlan_qct_wdi.c
@@ -3373,6 +3373,7 @@
WDI_Status
WDI_ExitUapsdReq
(
+ WDI_ExitUapsdReqParamsType *pwdiExitUapsdReqParams,
WDI_ExitUapsdRspCb wdiExitUapsdRspCb,
void* pUserData
)
@@ -3395,8 +3396,8 @@
Fill in Event data and post to the Main FSM
------------------------------------------------------------------------*/
wdiEventData.wdiRequest = WDI_EXIT_UAPSD_REQ;
- wdiEventData.pEventData = NULL;
- wdiEventData.uEventDataSize = 0;
+ wdiEventData.pEventData = pwdiExitUapsdReqParams;
+ wdiEventData.uEventDataSize = sizeof(*pwdiExitUapsdReqParams);
wdiEventData.pCBfnc = wdiExitUapsdRspCb;
wdiEventData.pUserData = pUserData;
@@ -4087,6 +4088,7 @@
WDI_Status
WDI_WowlExitReq
(
+ WDI_WowlExitReqParamsType* pwdiWowlExitParams,
WDI_WowlExitReqCb wdiWowlExitCb,
void* pUserData
)
@@ -4109,8 +4111,8 @@
Fill in Event data and post to the Main FSM
------------------------------------------------------------------------*/
wdiEventData.wdiRequest = WDI_WOWL_EXIT_REQ;
- wdiEventData.pEventData = NULL;
- wdiEventData.uEventDataSize = 0;
+ wdiEventData.pEventData = pwdiWowlExitParams;
+ wdiEventData.uEventDataSize = sizeof(*pwdiWowlExitParams);
wdiEventData.pCBfnc = wdiWowlExitCb;
wdiEventData.pUserData = pUserData;
@@ -12045,12 +12047,16 @@
wpt_uint8* pSendBuffer = NULL;
wpt_uint16 usDataOffset = 0;
wpt_uint16 usSendSize = 0;
+ WDI_ExitUapsdReqParamsType *pExitUapsdparams;
+ wpt_uint8 bssIdx = 0;
+
/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/*-------------------------------------------------------------------------
Sanity check
-------------------------------------------------------------------------*/
if (( NULL == pEventData ) ||
+ ( NULL == (pExitUapsdparams = (WDI_ExitUapsdReqParamsType *)pEventData->pEventData)) ||
( NULL == (wdiExitUapsdRspCb = (WDI_ExitUapsdRspCb)pEventData->pCBfnc)))
{
WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
@@ -12064,9 +12070,9 @@
! TO DO : proper conversion into the HAL Message Request Format
-----------------------------------------------------------------------*/
if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_EXIT_UAPSD_REQ,
- 0,
+ sizeof(wpt_uint8),
&pSendBuffer, &usDataOffset, &usSendSize))||
- ( usSendSize < (usDataOffset )))
+ ( 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",
@@ -12075,6 +12081,15 @@
return WDI_STATUS_E_FAILURE;
}
+ bssIdx = pExitUapsdparams->wdiExitUapsdInfo.bssIdx;
+
+ wpalMemoryCopy( pSendBuffer+usDataOffset,
+ &bssIdx,
+ sizeof(wpt_uint8));
+
+ pWDICtx->wdiReqStatusCB = pExitUapsdparams->wdiReqStatusCB;
+ pWDICtx->pReqStatusUserData = pExitUapsdparams->pUserData;
+
/*-------------------------------------------------------------------------
Send Get STA Request to HAL
-------------------------------------------------------------------------*/
@@ -12559,6 +12574,8 @@
wpt_uint16 usSendSize = 0;
tHalHostOffloadReq hostOffloadParams;
tHalNSOffloadParams nsOffloadParams;
+ wpt_uint8 ucCurrentBSSSesIdx = 0;
+ WDI_BSSSessionType* pBSSSes = NULL;
/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
@@ -12591,6 +12608,16 @@
return WDI_STATUS_E_FAILURE;
}
+ ucCurrentBSSSesIdx = WDI_FindAssocSession( pWDICtx,
+ pwdiHostOffloadParams->wdiHostOffloadInfo.bssId,
+ &pBSSSes);
+ if ( NULL == pBSSSes )
+ {
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
+ " %s : Association for this BSSID does not exist",__FUNCTION__);
+ return WDI_STATUS_E_FAILURE;
+ }
+
hostOffloadParams.offloadType = pwdiHostOffloadParams->wdiHostOffloadInfo.ucOffloadType;
hostOffloadParams.enableOrDisable = pwdiHostOffloadParams->wdiHostOffloadInfo.ucEnableOrDisable;
@@ -12629,25 +12656,35 @@
nsOffloadParams.targetIPv6Addr1Valid = pwdiHostOffloadParams->wdiNsOffloadParams.targetIPv6Addr1Valid;
nsOffloadParams.targetIPv6Addr2Valid = pwdiHostOffloadParams->wdiNsOffloadParams.targetIPv6Addr2Valid;
- nsOffloadParams.bssIdx = pwdiHostOffloadParams->wdiNsOffloadParams.bssIdx;
-
#endif // WLAN_NS_OFFLOAD
}
+ nsOffloadParams.bssIdx = pBSSSes->ucBSSIdx;
+
// copy hostOffloadParams into pSendBuffer
wpalMemoryCopy( pSendBuffer+usDataOffset,
&hostOffloadParams,
sizeof(hostOffloadParams));
-#ifdef WLAN_NS_OFFLOAD
- if( HAL_IPV6_NS_OFFLOAD == hostOffloadParams.offloadType )
+ if(WDI_getFwWlanFeatCaps(SLM_SESSIONIZATION) )
{
- // copy nsOffloadParams into pSendBuffer
- wpalMemoryCopy( pSendBuffer+usDataOffset+sizeof(hostOffloadParams),
+ // copy nsOffloadParams into pSendBuffer
+ wpalMemoryCopy( pSendBuffer+usDataOffset+sizeof(hostOffloadParams),
&nsOffloadParams,
sizeof(nsOffloadParams));
- }
-#endif // WLAN_NS_OFFLOAD
+ }
+ else
+ {
+#ifdef WLAN_NS_OFFLOAD
+ if( HAL_IPV6_NS_OFFLOAD == hostOffloadParams.offloadType )
+ {
+ // copy nsOffloadParams into pSendBuffer
+ wpalMemoryCopy( pSendBuffer+usDataOffset+sizeof(hostOffloadParams),
+ &nsOffloadParams,
+ sizeof(nsOffloadParams));
+ }
+#endif
+ }
pWDICtx->wdiReqStatusCB = pwdiHostOffloadParams->wdiReqStatusCB;
pWDICtx->pReqStatusUserData = pwdiHostOffloadParams->pUserData;
@@ -12682,6 +12719,9 @@
wpt_uint16 usDataOffset = 0;
wpt_uint16 usSendSize = 0;
tHalKeepAliveReq keepAliveReq;
+ wpt_uint8 ucCurrentBSSSesIdx = 0;
+ WDI_BSSSessionType* pBSSSes = NULL;
+
/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/*-------------------------------------------------------------------------
@@ -12713,10 +12753,20 @@
return WDI_STATUS_E_FAILURE;
}
+ ucCurrentBSSSesIdx = WDI_FindAssocSession( pWDICtx,
+ pwdiKeepAliveParams->wdiKeepAliveInfo.bssId,
+ &pBSSSes);
+ if ( NULL == pBSSSes )
+ {
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
+ " %s : Association for this BSSID does not exist",__FUNCTION__);
+ return WDI_STATUS_E_FAILURE;
+ }
+
keepAliveReq.packetType = pwdiKeepAliveParams->wdiKeepAliveInfo.ucPacketType;
keepAliveReq.timePeriod = pwdiKeepAliveParams->wdiKeepAliveInfo.ucTimePeriod;
- keepAliveReq.bssIdx = pwdiKeepAliveParams->wdiKeepAliveInfo.bssIdx;
+ keepAliveReq.bssIdx = pBSSSes->ucBSSIdx;
if(pwdiKeepAliveParams->wdiKeepAliveInfo.ucPacketType == 2)
{
@@ -12778,6 +12828,9 @@
wpt_uint16 usDataOffset = 0;
wpt_uint16 usSendSize = 0;
tHalWowlAddBcastPtrn wowlAddBcPtrnReq;
+ wpt_uint8 ucCurrentBSSSesIdx = 0;
+ WDI_BSSSessionType* pBSSSes = NULL;
+
/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/*-------------------------------------------------------------------------
@@ -12809,6 +12862,16 @@
return WDI_STATUS_E_FAILURE;
}
+ ucCurrentBSSSesIdx = WDI_FindAssocSession( pWDICtx,
+ pwdiWowlAddBcPtrnParams->wdiWowlAddBcPtrnInfo.bssId,
+ &pBSSSes);
+ if ( NULL == pBSSSes )
+ {
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
+ " %s : Association for this BSSID does not exist",__FUNCTION__);
+ return WDI_STATUS_E_FAILURE;
+ }
+
wowlAddBcPtrnReq.ucPatternId =
pwdiWowlAddBcPtrnParams->wdiWowlAddBcPtrnInfo.ucPatternId;
wowlAddBcPtrnReq.ucPatternByteOffset =
@@ -12844,6 +12907,8 @@
pwdiWowlAddBcPtrnParams->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - HAL_WOWL_BCAST_PATTERN_MAX_SIZE);
}
+ wowlAddBcPtrnReq.bssIdx = pBSSSes->ucBSSIdx;
+
wpalMemoryCopy( pSendBuffer+usDataOffset,
&wowlAddBcPtrnReq,
sizeof(wowlAddBcPtrnReq));
@@ -12881,6 +12946,8 @@
wpt_uint16 usDataOffset = 0;
wpt_uint16 usSendSize = 0;
tHalWowlDelBcastPtrn wowlDelBcPtrnReq;
+ wpt_uint8 ucCurrentBSSSesIdx = 0;
+ WDI_BSSSessionType* pBSSSes = NULL;
/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/*-------------------------------------------------------------------------
@@ -12912,8 +12979,21 @@
return WDI_STATUS_E_FAILURE;
}
+ ucCurrentBSSSesIdx = WDI_FindAssocSession( pWDICtx,
+ pwdiWowlDelBcPtrnParams->wdiWowlDelBcPtrnInfo.bssId,
+ &pBSSSes);
+ if ( NULL == pBSSSes )
+ {
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
+ " %s : Association for this BSSID does not exist",__FUNCTION__);
+ return WDI_STATUS_E_FAILURE;
+ }
+
wowlDelBcPtrnReq.ucPatternId =
pwdiWowlDelBcPtrnParams->wdiWowlDelBcPtrnInfo.ucPatternId;
+
+ wowlDelBcPtrnReq.bssIdx = pBSSSes->ucBSSIdx;
+
wpalMemoryCopy( pSendBuffer+usDataOffset,
&wowlDelBcPtrnReq,
sizeof(wowlDelBcPtrnReq));
@@ -13016,6 +13096,8 @@
pwdiWowlEnterParams->wdiWowlEnterInfo.ucWoWBSSConnLoss;
#endif // WLAN_WAKEUP_EVENTS
+ wowlEnterReq.bssIdx = pwdiWowlEnterParams->wdiWowlEnterInfo.bssIdx;
+
wpalMemoryCopy(wowlEnterReq.magicPtrn,
pwdiWowlEnterParams->wdiWowlEnterInfo.magicPtrn,
sizeof(tSirMacAddr));
@@ -13052,15 +13134,18 @@
)
{
WDI_WowlExitReqCb wdiWowlExitCb = NULL;
+ WDI_WowlExitReqParamsType* pwdiWowlExitParams = NULL;
wpt_uint8* pSendBuffer = NULL;
wpt_uint16 usDataOffset = 0;
wpt_uint16 usSendSize = 0;
+ tHalWowlExitParams wowlExitparams;
/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/*-------------------------------------------------------------------------
Sanity check
-------------------------------------------------------------------------*/
if (( NULL == pEventData ) ||
+ ( NULL == (pwdiWowlExitParams = (WDI_WowlExitReqParamsType *)pEventData->pEventData)) ||
( NULL == (wdiWowlExitCb = (WDI_WowlExitReqCb)pEventData->pCBfnc)))
{
WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
@@ -13074,9 +13159,9 @@
! TO DO : proper conversion into the HAL Message Request Format
-----------------------------------------------------------------------*/
if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_WOWL_EXIT_REQ,
- 0,
+ sizeof(wowlExitparams),
&pSendBuffer, &usDataOffset, &usSendSize))||
- ( usSendSize < (usDataOffset )))
+ ( 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",
@@ -13085,6 +13170,11 @@
return WDI_STATUS_E_FAILURE;
}
+ wowlExitparams.bssIdx = pwdiWowlExitParams->wdiWowlExitInfo.bssIdx;
+
+ wpalMemoryCopy( pSendBuffer+usDataOffset,
+ &wowlExitparams,
+ sizeof(wowlExitparams));
/*-------------------------------------------------------------------------
Send Get STA Request to HAL
-------------------------------------------------------------------------*/
@@ -16731,9 +16821,11 @@
WDI_EventInfoType* pEventData
)
{
- WDI_Status wdiStatus;
- eHalStatus halStatus;
- WDI_EnterBmpsRspCb wdiEnterBmpsRspCb;
+ eHalStatus halStatus = eHAL_STATUS_FAILURE;
+ tHalEnterBmpsRspParams halEnterBmpsRsp;
+ WDI_EnterBmpsRspCb wdiEnterBmpsRspCb;
+ WDI_EnterBmpsRspParamsType wdiEnterBmpsRspparams;
+
/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/*-------------------------------------------------------------------------
@@ -16748,30 +16840,45 @@
return WDI_STATUS_E_FAILURE;
}
- wdiEnterBmpsRspCb = (WDI_EnterBmpsRspCb)pWDICtx->pfncRspCB;
-
/*-------------------------------------------------------------------------
- Extract response and send it to UMAC
- -------------------------------------------------------------------------*/
- halStatus = *((eHalStatus*)pEventData->pEventData);
- wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
+ Extract response and send it to UMAC
+ -------------------------------------------------------------------------*/
+ if(WDI_getFwWlanFeatCaps(SLM_SESSIONIZATION))
+ {
+ wpalMemoryCopy( &halEnterBmpsRsp,
+ pEventData->pEventData,
+ sizeof(halEnterBmpsRsp));
+
+ //Used to print debug message
+ halStatus = halEnterBmpsRsp.status;
+ wdiEnterBmpsRspparams.wdiStatus = WDI_HAL_2_WDI_STATUS(halEnterBmpsRsp.status);
+ wdiEnterBmpsRspparams.bssIdx = halEnterBmpsRsp.bssIdx;
+ }
+ else
+ {
+ halStatus = *((eHalStatus*)pEventData->pEventData);
+ wdiEnterBmpsRspparams.wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
+ }
+
+ wdiEnterBmpsRspCb = (WDI_EnterBmpsRspCb)pWDICtx->pfncRspCB;
/* If BMPS req failed, riva is not power collapsed put the DXE in FULL state.
* Other module states are taken care by PMC.
* TODO: How do we take care of the case where BMPS is success, but riva power collapse fails??
*/
- if (wdiStatus != WDI_STATUS_SUCCESS) {
+ if (wdiEnterBmpsRspparams.wdiStatus != WDI_STATUS_SUCCESS)
+ {
- WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL,
- "WDI PRocess Enter BMPS RSP failed With HAL Status Code: %d",halStatus);
- /* Call Back is not required as we are putting the DXE in FULL
- * and riva is already in FULL (BMPS RSP Failed)*/
- WDTS_SetPowerState(pWDICtx, WDTS_POWER_STATE_FULL, NULL);
- pWDICtx->bInBmps = eWLAN_PAL_FALSE;
+ WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL,
+ "WDI PRocess Enter BMPS RSP failed With HAL Status Code: %d",halStatus);
+ /* Call Back is not required as we are putting the DXE in FULL
+ * and riva is already in FULL (BMPS RSP Failed)*/
+ WDTS_SetPowerState(pWDICtx, WDTS_POWER_STATE_FULL, NULL);
+ pWDICtx->bInBmps = eWLAN_PAL_FALSE;
}
/*Notify UMAC*/
- wdiEnterBmpsRspCb( wdiStatus, pWDICtx->pRspCBUserData);
+ wdiEnterBmpsRspCb( &wdiEnterBmpsRspparams, pWDICtx->pRspCBUserData);
return WDI_STATUS_SUCCESS;
}/*WDI_ProcessEnterBmpsRsp*/
@@ -16793,9 +16900,10 @@
WDI_EventInfoType* pEventData
)
{
- WDI_Status wdiStatus;
eHalStatus halStatus;
WDI_ExitBmpsRspCb wdiExitBmpsRspCb;
+ tHalExitBmpsRspParams halExitBmpsRsp;
+ WDI_ExitBmpsRspParamsType wdiExitBmpsRspParams;
/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/*-------------------------------------------------------------------------
@@ -16815,8 +16923,21 @@
/*-------------------------------------------------------------------------
Extract response and send it to UMAC
-------------------------------------------------------------------------*/
- halStatus = *((eHalStatus*)pEventData->pEventData);
- wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
+
+ if(WDI_getFwWlanFeatCaps(SLM_SESSIONIZATION))
+ {
+ wpalMemoryCopy( &halExitBmpsRsp,
+ pEventData->pEventData,
+ sizeof(halExitBmpsRsp));
+
+ wdiExitBmpsRspParams.wdiStatus = WDI_HAL_2_WDI_STATUS(halExitBmpsRsp.status);
+ wdiExitBmpsRspParams.bssIdx = halExitBmpsRsp.bssIdx;
+ }
+ else
+ {
+ halStatus = *((eHalStatus*)pEventData->pEventData);
+ wdiExitBmpsRspParams.wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
+ }
// notify DTS that we are entering Full power
WDTS_SetPowerState(pWDICtx, WDTS_POWER_STATE_FULL, NULL);
@@ -16824,7 +16945,7 @@
pWDICtx->bInBmps = eWLAN_PAL_FALSE;
/*Notify UMAC*/
- wdiExitBmpsRspCb( wdiStatus, pWDICtx->pRspCBUserData);
+ wdiExitBmpsRspCb( &wdiExitBmpsRspParams, pWDICtx->pRspCBUserData);
return WDI_STATUS_SUCCESS;
}/*WDI_ProcessExitBmpsRsp*/
@@ -16846,9 +16967,11 @@
WDI_EventInfoType* pEventData
)
{
- WDI_Status wdiStatus;
eHalStatus halStatus;
+ tUapsdRspParams halEnterUapsdRsp;
WDI_EnterUapsdRspCb wdiEnterUapsdRspCb;
+ WDI_EnterUapsdRspParamsType wdiEnterUapsdRspParams;
+
/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/*-------------------------------------------------------------------------
@@ -16868,10 +16991,22 @@
/*-------------------------------------------------------------------------
Extract response and send it to UMAC
-------------------------------------------------------------------------*/
- halStatus = *((eHalStatus*)pEventData->pEventData);
- wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
+ if(WDI_getFwWlanFeatCaps(SLM_SESSIONIZATION))
+ {
+ wpalMemoryCopy( &halEnterUapsdRsp,
+ pEventData->pEventData,
+ sizeof(halEnterUapsdRsp));
- if(WDI_STATUS_SUCCESS == wdiStatus)
+ wdiEnterUapsdRspParams.wdiStatus = WDI_HAL_2_WDI_STATUS(halEnterUapsdRsp.status);
+ wdiEnterUapsdRspParams.bssIdx = halEnterUapsdRsp.bssIdx;
+ }
+ else
+ {
+ halStatus = *((eHalStatus*)pEventData->pEventData);
+ wdiEnterUapsdRspParams.wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
+ }
+
+ if(WDI_STATUS_SUCCESS == wdiEnterUapsdRspParams.wdiStatus)
{
// Set the DPU routing flag to the FW WQ, all the TX frames would be now pushed
// from DPU to the FW-WQ (5) in UAPSD. FW would be in data path, monitoring
@@ -16886,7 +17021,7 @@
}
/*Notify UMAC*/
- wdiEnterUapsdRspCb( wdiStatus, pWDICtx->pRspCBUserData);
+ wdiEnterUapsdRspCb( &wdiEnterUapsdRspParams, pWDICtx->pRspCBUserData);
return WDI_STATUS_SUCCESS;
}/*WDI_ProcessEnterUapsdRsp*/
@@ -16908,9 +17043,10 @@
WDI_EventInfoType* pEventData
)
{
- WDI_Status wdiStatus;
eHalStatus halStatus;
WDI_ExitUapsdRspCb wdiExitUapsdRspCb;
+ tHalExitUapsdRspParams halExitUapsdRsp;
+ WDI_ExitUapsdRspParamsType wdiExitUapsdRspParams;
/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/*-------------------------------------------------------------------------
@@ -16930,9 +17066,20 @@
/*-------------------------------------------------------------------------
Extract response and send it to UMAC
-------------------------------------------------------------------------*/
- halStatus = *((eHalStatus*)pEventData->pEventData);
- wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
-
+ if(WDI_getFwWlanFeatCaps(SLM_SESSIONIZATION))
+ {
+ wpalMemoryCopy( &halExitUapsdRsp,
+ pEventData->pEventData,
+ sizeof(halExitUapsdRsp));
+
+ wdiExitUapsdRspParams.wdiStatus = WDI_HAL_2_WDI_STATUS(halExitUapsdRsp.status);
+ wdiExitUapsdRspParams.bssIdx = halExitUapsdRsp.bssIdx;
+ }
+ else
+ {
+ halStatus = *((eHalStatus*)pEventData->pEventData);
+ wdiExitUapsdRspParams.wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
+ }
// Restore back the DPU routing flag in the TxBD, for DPU to push the TxBDs to BTQM
// directly instead of the FW WQ.
pWDICtx->ucDpuRF = BMUWQ_BTQM_TX_MGMT;
@@ -16943,7 +17090,7 @@
#endif
/*Notify UMAC*/
- wdiExitUapsdRspCb( wdiStatus, pWDICtx->pRspCBUserData);
+ wdiExitUapsdRspCb( &wdiExitUapsdRspParams, pWDICtx->pRspCBUserData);
return WDI_STATUS_SUCCESS;
}/*WDI_ProcessExitUapsdRsp*/
@@ -17352,9 +17499,11 @@
WDI_EventInfoType* pEventData
)
{
- WDI_Status wdiStatus;
eHalStatus halStatus;
WDI_WowlAddBcPtrnCb wdiWowlAddBcPtrnCb;
+ tHalAddWowlBcastPtrnRspParams halAddWowlBcastPtrRsp;
+ WDI_WowlAddBcPtrnRspParamsType wdiWowlAddBcPtrRsp;
+
/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/*-------------------------------------------------------------------------
@@ -17374,11 +17523,24 @@
/*-------------------------------------------------------------------------
Extract response and send it to UMAC
-------------------------------------------------------------------------*/
- halStatus = *((eHalStatus*)pEventData->pEventData);
- wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
+ if(WDI_getFwWlanFeatCaps(SLM_SESSIONIZATION))
+ {
+ wpalMemoryCopy( &halAddWowlBcastPtrRsp,
+ pEventData->pEventData,
+ sizeof(halAddWowlBcastPtrRsp));
+
+ wdiWowlAddBcPtrRsp.wdiStatus =
+ WDI_HAL_2_WDI_STATUS(halAddWowlBcastPtrRsp.status);
+ }
+ else
+ {
+ halStatus = *((eHalStatus*)pEventData->pEventData);
+ wdiWowlAddBcPtrRsp.wdiStatus =
+ WDI_HAL_2_WDI_STATUS(halStatus);
+ }
/*Notify UMAC*/
- wdiWowlAddBcPtrnCb( wdiStatus, pWDICtx->pRspCBUserData);
+ wdiWowlAddBcPtrnCb( &wdiWowlAddBcPtrRsp, pWDICtx->pRspCBUserData);
return WDI_STATUS_SUCCESS;
}/*WDI_ProcessWowlAddBcPtrnRsp*/
@@ -17400,9 +17562,10 @@
WDI_EventInfoType* pEventData
)
{
- WDI_Status wdiStatus;
eHalStatus halStatus;
WDI_WowlDelBcPtrnCb wdiWowlDelBcPtrnCb;
+ tHalDelWowlBcastPtrnRspParams halDelWowlBcastPtrRsp;
+ WDI_WowlDelBcPtrnRspParamsType wdiWowlDelBcstPtrRsp;
/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/*-------------------------------------------------------------------------
@@ -17422,11 +17585,22 @@
/*-------------------------------------------------------------------------
Extract response and send it to UMAC
-------------------------------------------------------------------------*/
- halStatus = *((eHalStatus*)pEventData->pEventData);
- wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
+ if(WDI_getFwWlanFeatCaps(SLM_SESSIONIZATION))
+ {
+ wpalMemoryCopy( &halDelWowlBcastPtrRsp,
+ pEventData->pEventData,
+ sizeof(halDelWowlBcastPtrRsp));
+ wdiWowlDelBcstPtrRsp.wdiStatus =
+ WDI_HAL_2_WDI_STATUS(halDelWowlBcastPtrRsp.status);
+ }
+ else
+ {
+ halStatus = *((eHalStatus*)pEventData->pEventData);
+ wdiWowlDelBcstPtrRsp.wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
+ }
/*Notify UMAC*/
- wdiWowlDelBcPtrnCb( wdiStatus, pWDICtx->pRspCBUserData);
+ wdiWowlDelBcPtrnCb( &wdiWowlDelBcstPtrRsp, pWDICtx->pRspCBUserData);
return WDI_STATUS_SUCCESS;
}/*WDI_ProcessWowlDelBcPtrnRsp*/
@@ -17448,9 +17622,10 @@
WDI_EventInfoType* pEventData
)
{
- WDI_Status wdiStatus;
eHalStatus halStatus;
WDI_WowlEnterReqCb wdiWowlEnterCb;
+ WDI_WowlEnterRspParamsType wdiwowlEnterRsp;
+ tHalEnterWowlRspParams halEnterWowlRspParams;
/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/*-------------------------------------------------------------------------
@@ -17470,11 +17645,23 @@
/*-------------------------------------------------------------------------
Extract response and send it to UMAC
-------------------------------------------------------------------------*/
- halStatus = *((eHalStatus*)pEventData->pEventData);
- wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
+ if(WDI_getFwWlanFeatCaps(SLM_SESSIONIZATION))
+ {
+ wpalMemoryCopy( &halEnterWowlRspParams,
+ (wpt_uint8*)pEventData->pEventData,
+ sizeof(halEnterWowlRspParams));
+ wdiwowlEnterRsp.bssIdx = halEnterWowlRspParams.bssIdx;
+ wdiwowlEnterRsp.status =
+ WDI_HAL_2_WDI_STATUS(halEnterWowlRspParams.status);
+ }
+ else
+ {
+ halStatus = *((eHalStatus*)pEventData->pEventData);
+ wdiwowlEnterRsp.status = WDI_HAL_2_WDI_STATUS(halStatus);
+ }
/*Notify UMAC*/
- wdiWowlEnterCb( wdiStatus, pWDICtx->pRspCBUserData);
+ wdiWowlEnterCb( &wdiwowlEnterRsp, pWDICtx->pRspCBUserData);
return WDI_STATUS_SUCCESS;
}/*WDI_ProcessWowlEnterRsp*/
@@ -17496,9 +17683,11 @@
WDI_EventInfoType* pEventData
)
{
- WDI_Status wdiStatus;
eHalStatus halStatus;
WDI_WowlExitReqCb wdiWowlExitCb;
+ tHalExitWowlRspParams halExitWowlRspParams;
+ WDI_WowlExitRspParamsType wdiWowlExitRsp;
+
/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/*-------------------------------------------------------------------------
@@ -17518,11 +17707,23 @@
/*-------------------------------------------------------------------------
Extract response and send it to UMAC
-------------------------------------------------------------------------*/
- halStatus = *((eHalStatus*)pEventData->pEventData);
- wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
+ if(WDI_getFwWlanFeatCaps(SLM_SESSIONIZATION))
+ {
+ wpalMemoryCopy( &halExitWowlRspParams,
+ pEventData->pEventData,
+ sizeof(halExitWowlRspParams));
+ wdiWowlExitRsp.status = WDI_HAL_2_WDI_STATUS(halExitWowlRspParams.status);
+ wdiWowlExitRsp.bssIdx = halExitWowlRspParams.bssIdx;
+
+ }
+ else
+ {
+ halStatus = *((eHalStatus*)pEventData->pEventData);
+ wdiWowlExitRsp.status = WDI_HAL_2_WDI_STATUS(halStatus);
+ }
/*Notify UMAC*/
- wdiWowlExitCb( wdiStatus, pWDICtx->pRspCBUserData);
+ wdiWowlExitCb( &wdiWowlExitRsp, pWDICtx->pRspCBUserData);
return WDI_STATUS_SUCCESS;
}/*WDI_ProcessWowlExitRsp*/
@@ -22993,10 +23194,12 @@
wpt_uint16 usDataOffset = 0;
wpt_uint16 usSendSize = 0;
wpt_uint32 usRcvPktFilterCfgSize;
- tHalRcvPktFilterCfgType *pRcvPktFilterCfg;
+ tHalRcvPktFilterCfgType *pRcvPktFilterCfg = NULL;
wpt_uint8 i;
wpt_uint8 ucCurrentBSSSesIdx = 0;
WDI_BSSSessionType* pBSSSes = NULL;
+ tHalSessionizedRcvPktFilterCfgType *pSessRcvPktFilterCfg = NULL;
+ wpt_uint32 usSessRcvPktFilterCfgSize;
WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
"%s",__FUNCTION__);
@@ -23026,121 +23229,238 @@
return WDI_STATUS_E_FAILURE;
}
- usRcvPktFilterCfgSize = sizeof(tHalRcvPktFilterCfgType) +
- ((pwdiSetRcvPktFilterReqInfo->wdiPktFilterCfg.numFieldParams - 1)
- * sizeof(tHalRcvPktFilterParams));
+ if( WDI_getFwWlanFeatCaps(SLM_SESSIONIZATION) )
+ {
- pRcvPktFilterCfg = (tHalRcvPktFilterCfgType *)wpalMemoryAllocate(
+ usSessRcvPktFilterCfgSize = sizeof(tHalSessionizedRcvPktFilterCfgType) +
+ ((pwdiSetRcvPktFilterReqInfo->wdiPktFilterCfg.numFieldParams - 1)
+ * sizeof(tHalSessionizedRcvPktFilterCfgType));
+
+ pSessRcvPktFilterCfg = (tHalSessionizedRcvPktFilterCfgType *)wpalMemoryAllocate(
+ usSessRcvPktFilterCfgSize);
+
+ if(NULL == pSessRcvPktFilterCfg)
+ {
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
+ "%s: Failed to allocate memory for "
+ "tHalRcvPktFilterCfgType: %x %x %x ",
+ __FUNCTION__, pWDICtx, pEventData, pEventData->pEventData);
+ WDI_ASSERT(0);
+ return WDI_STATUS_E_FAILURE;
+ }
+
+ wpalMemoryZero(pSessRcvPktFilterCfg, usSessRcvPktFilterCfgSize);
+
+ /*-----------------------------------------------------------------------
+ Get message buffer
+ -----------------------------------------------------------------------*/
+
+ if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_RECEIVE_FILTER_SET_FILTER_REQ,
+ usSessRcvPktFilterCfgSize,
+ &pSendBuffer, &usDataOffset, &usSendSize))||
+ ( usSendSize < (usDataOffset + usSessRcvPktFilterCfgSize)))
+ {
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
+ "Unable to get send buffer in "
+ "WDI_ProcessReceiveFilterSetFilterReq() %x %x %x",
+ pEventData, pwdiSetRcvPktFilterReqInfo,
+ wdiReceiveFilterSetFilterCb);
+ WDI_ASSERT(0);
+ wpalMemoryFree(pSessRcvPktFilterCfg);
+ return WDI_STATUS_E_FAILURE;
+ }
+
+ WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
+ "UsData Off %d UsSend %d cfg %d",usDataOffset,
+ usSendSize,pSessRcvPktFilterCfg);
+
+ pSessRcvPktFilterCfg->filterId = pwdiSetRcvPktFilterReqInfo->wdiPktFilterCfg.filterId;
+ pSessRcvPktFilterCfg->filterType = pwdiSetRcvPktFilterReqInfo->wdiPktFilterCfg.filterType;
+ pSessRcvPktFilterCfg->numParams = pwdiSetRcvPktFilterReqInfo->wdiPktFilterCfg.numFieldParams;
+ pSessRcvPktFilterCfg->coleasceTime = pwdiSetRcvPktFilterReqInfo->wdiPktFilterCfg.coalesceTime;
+
+ pSessRcvPktFilterCfg->bssIdx = pBSSSes->ucBSSIdx;
+
+ WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
+ "Out: FID %d FT %d",pSessRcvPktFilterCfg->filterId,
+ pSessRcvPktFilterCfg->filterType);
+ WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
+ "NParams %d CT %d",pSessRcvPktFilterCfg->numParams,
+ pSessRcvPktFilterCfg->coleasceTime);
+
+ for ( i = 0; i < pSessRcvPktFilterCfg->numParams; i++ )
+ {
+ pSessRcvPktFilterCfg->paramsData[i].protocolLayer =
+ pwdiSetRcvPktFilterReqInfo->wdiPktFilterCfg.paramsData[i].protocolLayer;
+ pSessRcvPktFilterCfg->paramsData[i].cmpFlag =
+ pwdiSetRcvPktFilterReqInfo->wdiPktFilterCfg.paramsData[i].cmpFlag;
+ pSessRcvPktFilterCfg->paramsData[i].dataOffset =
+ pwdiSetRcvPktFilterReqInfo->wdiPktFilterCfg.paramsData[i].dataOffset;
+ pSessRcvPktFilterCfg->paramsData[i].dataLength =
+ pwdiSetRcvPktFilterReqInfo->wdiPktFilterCfg.paramsData[i].dataLength;
+
+ wpalMemoryCopy(&pSessRcvPktFilterCfg->paramsData[i].compareData,
+ &pwdiSetRcvPktFilterReqInfo->wdiPktFilterCfg.paramsData[i].compareData,
+ 8);
+ wpalMemoryCopy(&pSessRcvPktFilterCfg->paramsData[i].dataMask,
+ &pwdiSetRcvPktFilterReqInfo->wdiPktFilterCfg.paramsData[i].dataMask,
+ 8);
+
+ WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
+ "Out:Proto %d Comp Flag %d \n",
+ 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",
+ 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",
+ pSessRcvPktFilterCfg->paramsData[i].compareData[0],
+ pSessRcvPktFilterCfg->paramsData[i].compareData[1],
+ pSessRcvPktFilterCfg->paramsData[i].compareData[2],
+ pSessRcvPktFilterCfg->paramsData[i].compareData[3],
+ pSessRcvPktFilterCfg->paramsData[i].compareData[4],
+ pSessRcvPktFilterCfg->paramsData[i].compareData[5]);
+
+ WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
+ "MData: %d:%d:%d:%d:%d:%d\n",
+ pSessRcvPktFilterCfg->paramsData[i].dataMask[0],
+ pSessRcvPktFilterCfg->paramsData[i].dataMask[1],
+ pSessRcvPktFilterCfg->paramsData[i].dataMask[2],
+ pSessRcvPktFilterCfg->paramsData[i].dataMask[3],
+ pSessRcvPktFilterCfg->paramsData[i].dataMask[4],
+ pSessRcvPktFilterCfg->paramsData[i].dataMask[5]);
+ }
+
+ wpalMemoryCopy( pSendBuffer+usDataOffset,
+ pSessRcvPktFilterCfg,
+ usSessRcvPktFilterCfgSize);
+
+
+ pWDICtx->wdiReqStatusCB = pwdiSetRcvPktFilterReqInfo->wdiReqStatusCB;
+ pWDICtx->pReqStatusUserData = pwdiSetRcvPktFilterReqInfo->pUserData;
+
+ wpalMemoryFree(pSessRcvPktFilterCfg);
+
+ }
+ /*If SLM_SESSIONIZATION is not supported then do this */
+ else
+ {
+ usRcvPktFilterCfgSize = sizeof(tHalRcvPktFilterCfgType) +
+ ((pwdiSetRcvPktFilterReqInfo->wdiPktFilterCfg.numFieldParams - 1)
+ * sizeof(tHalRcvPktFilterParams));
+
+ pRcvPktFilterCfg = (tHalRcvPktFilterCfgType *)wpalMemoryAllocate(
usRcvPktFilterCfgSize);
- if(NULL == pRcvPktFilterCfg)
- {
- WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
- "%s: Failed to allocate memory for "
- "tHalRcvPktFilterCfgType: %x %x %x ",
- __FUNCTION__, pWDICtx, pEventData, pEventData->pEventData);
- WDI_ASSERT(0);
- return WDI_STATUS_E_FAILURE;
- }
+ if(NULL == pRcvPktFilterCfg)
+ {
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
+ "%s: Failed to allocate memory for "
+ "tHalRcvPktFilterCfgType: %x %x %x ",
+ __FUNCTION__, pWDICtx, pEventData, pEventData->pEventData);
+ WDI_ASSERT(0);
+ return WDI_STATUS_E_FAILURE;
+ }
- wpalMemoryZero(pRcvPktFilterCfg, usRcvPktFilterCfgSize);
+ wpalMemoryZero(pRcvPktFilterCfg, usRcvPktFilterCfgSize);
- /*-----------------------------------------------------------------------
- Get message buffer
-
- -----------------------------------------------------------------------*/
- if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_RECEIVE_FILTER_SET_FILTER_REQ,
+ /*-----------------------------------------------------------------------
+ Get message buffer
+ -----------------------------------------------------------------------*/
+ if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_RECEIVE_FILTER_SET_FILTER_REQ,
usRcvPktFilterCfgSize,
&pSendBuffer, &usDataOffset, &usSendSize))||
- ( usSendSize < (usDataOffset + usRcvPktFilterCfgSize)))
- {
- WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
+ ( usSendSize < (usDataOffset + usRcvPktFilterCfgSize)))
+ {
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
"Unable to get send buffer in "
"WDI_ProcessReceiveFilterSetFilterReq() %x %x %x",
pEventData, pwdiSetRcvPktFilterReqInfo,
wdiReceiveFilterSetFilterCb);
- WDI_ASSERT(0);
- wpalMemoryFree(pRcvPktFilterCfg);
- return WDI_STATUS_E_FAILURE;
- }
+ WDI_ASSERT(0);
+ wpalMemoryFree(pRcvPktFilterCfg);
+ return WDI_STATUS_E_FAILURE;
+ }
- WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
+ WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
"UsData Off %d UsSend %d cfg %d",usDataOffset,
usSendSize,usRcvPktFilterCfgSize);
- pRcvPktFilterCfg->filterId = pwdiSetRcvPktFilterReqInfo->wdiPktFilterCfg.filterId;
- pRcvPktFilterCfg->filterType = pwdiSetRcvPktFilterReqInfo->wdiPktFilterCfg.filterType;
- pRcvPktFilterCfg->numParams = pwdiSetRcvPktFilterReqInfo->wdiPktFilterCfg.numFieldParams;
- pRcvPktFilterCfg->coalesceTime = pwdiSetRcvPktFilterReqInfo->wdiPktFilterCfg.coalesceTime;
+ pRcvPktFilterCfg->filterId = pwdiSetRcvPktFilterReqInfo->wdiPktFilterCfg.filterId;
+ pRcvPktFilterCfg->filterType = pwdiSetRcvPktFilterReqInfo->wdiPktFilterCfg.filterType;
+ pRcvPktFilterCfg->numParams = pwdiSetRcvPktFilterReqInfo->wdiPktFilterCfg.numFieldParams;
+ pRcvPktFilterCfg->coalesceTime = pwdiSetRcvPktFilterReqInfo->wdiPktFilterCfg.coalesceTime;
- //pRcvPktFilterCfg->bssIdx = pBSSSes->ucBSSIdx;
-
- WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
+ WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
"Out: FID %d FT %d",pRcvPktFilterCfg->filterId,
pRcvPktFilterCfg->filterType);
- WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
+ WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
"NParams %d CT %d",pRcvPktFilterCfg->numParams,
pRcvPktFilterCfg->coalesceTime);
- for ( i = 0; i < pRcvPktFilterCfg->numParams; i++ )
- {
- pRcvPktFilterCfg->paramsData[i].protocolLayer =
- pwdiSetRcvPktFilterReqInfo->wdiPktFilterCfg.paramsData[i].protocolLayer;
- pRcvPktFilterCfg->paramsData[i].cmpFlag =
- pwdiSetRcvPktFilterReqInfo->wdiPktFilterCfg.paramsData[i].cmpFlag;
- pRcvPktFilterCfg->paramsData[i].dataOffset =
- pwdiSetRcvPktFilterReqInfo->wdiPktFilterCfg.paramsData[i].dataOffset;
- pRcvPktFilterCfg->paramsData[i].dataLength =
- pwdiSetRcvPktFilterReqInfo->wdiPktFilterCfg.paramsData[i].dataLength;
+ for ( i = 0; i < pRcvPktFilterCfg->numParams; i++ )
+ {
+ pRcvPktFilterCfg->paramsData[i].protocolLayer =
+ pwdiSetRcvPktFilterReqInfo->wdiPktFilterCfg.paramsData[i].protocolLayer;
+ pRcvPktFilterCfg->paramsData[i].cmpFlag =
+ pwdiSetRcvPktFilterReqInfo->wdiPktFilterCfg.paramsData[i].cmpFlag;
+ pRcvPktFilterCfg->paramsData[i].dataOffset =
+ pwdiSetRcvPktFilterReqInfo->wdiPktFilterCfg.paramsData[i].dataOffset;
+ pRcvPktFilterCfg->paramsData[i].dataLength =
+ pwdiSetRcvPktFilterReqInfo->wdiPktFilterCfg.paramsData[i].dataLength;
- wpalMemoryCopy(&pRcvPktFilterCfg->paramsData[i].compareData,
+ wpalMemoryCopy(&pRcvPktFilterCfg->paramsData[i].compareData,
&pwdiSetRcvPktFilterReqInfo->wdiPktFilterCfg.paramsData[i].compareData,
8);
- wpalMemoryCopy(&pRcvPktFilterCfg->paramsData[i].dataMask,
+ wpalMemoryCopy(&pRcvPktFilterCfg->paramsData[i].dataMask,
&pwdiSetRcvPktFilterReqInfo->wdiPktFilterCfg.paramsData[i].dataMask,
8);
- WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
+ WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
"Out:Proto %d Comp Flag %d \n",
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",
- pRcvPktFilterCfg->paramsData[i].dataOffset,
- pRcvPktFilterCfg->paramsData[i].dataLength);
+ WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
+ "Data Offset %d Data Len %d\n",
+ 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",
- pRcvPktFilterCfg->paramsData[i].compareData[0],
- pRcvPktFilterCfg->paramsData[i].compareData[1],
- pRcvPktFilterCfg->paramsData[i].compareData[2],
- pRcvPktFilterCfg->paramsData[i].compareData[3],
- pRcvPktFilterCfg->paramsData[i].compareData[4],
- pRcvPktFilterCfg->paramsData[i].compareData[5]);
+ WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
+ "CData: %d:%d:%d:%d:%d:%d\n",
+ pRcvPktFilterCfg->paramsData[i].compareData[0],
+ pRcvPktFilterCfg->paramsData[i].compareData[1],
+ pRcvPktFilterCfg->paramsData[i].compareData[2],
+ pRcvPktFilterCfg->paramsData[i].compareData[3],
+ pRcvPktFilterCfg->paramsData[i].compareData[4],
+ pRcvPktFilterCfg->paramsData[i].compareData[5]);
- WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
- "MData: %d:%d:%d:%d:%d:%d\n",
- pRcvPktFilterCfg->paramsData[i].dataMask[0],
- pRcvPktFilterCfg->paramsData[i].dataMask[1],
- pRcvPktFilterCfg->paramsData[i].dataMask[2],
- pRcvPktFilterCfg->paramsData[i].dataMask[3],
- pRcvPktFilterCfg->paramsData[i].dataMask[4],
- pRcvPktFilterCfg->paramsData[i].dataMask[5]);
- }
+ WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
+ "MData: %d:%d:%d:%d:%d:%d\n",
+ pRcvPktFilterCfg->paramsData[i].dataMask[0],
+ pRcvPktFilterCfg->paramsData[i].dataMask[1],
+ pRcvPktFilterCfg->paramsData[i].dataMask[2],
+ pRcvPktFilterCfg->paramsData[i].dataMask[3],
+ pRcvPktFilterCfg->paramsData[i].dataMask[4],
+ pRcvPktFilterCfg->paramsData[i].dataMask[5]);
+ }
- wpalMemoryCopy( pSendBuffer+usDataOffset,
+ wpalMemoryCopy( pSendBuffer+usDataOffset,
pRcvPktFilterCfg,
usRcvPktFilterCfgSize);
- pWDICtx->wdiReqStatusCB = pwdiSetRcvPktFilterReqInfo->wdiReqStatusCB;
- pWDICtx->pReqStatusUserData = pwdiSetRcvPktFilterReqInfo->pUserData;
+ pWDICtx->wdiReqStatusCB = pwdiSetRcvPktFilterReqInfo->wdiReqStatusCB;
+ pWDICtx->pReqStatusUserData = pwdiSetRcvPktFilterReqInfo->pUserData;
- WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
- "%s",__FUNCTION__);
- wpalMemoryFree(pRcvPktFilterCfg);
-
+ WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
+ "%s",__FUNCTION__);
+ wpalMemoryFree(pRcvPktFilterCfg);
+ }
/*-------------------------------------------------------------------------
Send Get STA Request to HAL
-------------------------------------------------------------------------*/
@@ -23172,6 +23492,9 @@
wpt_uint8* pSendBuffer = NULL;
wpt_uint16 usDataOffset = 0;
wpt_uint16 usSendSize = 0;
+ tHalRcvFltPktMatchCntReqParams rcvFltPktMatchCntReqParam = {0};
+ wpt_uint8 ucCurrentBSSSesIdx = 0;
+ WDI_BSSSessionType* pBSSSes = NULL;
WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
"%s",__FUNCTION__);
@@ -23191,14 +23514,24 @@
return WDI_STATUS_E_FAILURE;
}
+ ucCurrentBSSSesIdx = WDI_FindAssocSession( pWDICtx,
+ pwdiRcvFltPktMatchCntReqParamsType->bssId,
+ &pBSSSes);
+ if ( NULL == pBSSSes )
+ {
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
+ " %s : Association for this BSSID does not exist",__FUNCTION__);
+ return WDI_STATUS_E_FAILURE;
+ }
+
/*-----------------------------------------------------------------------
Get message buffer
-----------------------------------------------------------------------*/
if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx,
WDI_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ,
- 0,
+ sizeof(tHalRcvFltPktMatchCntReqParams),
&pSendBuffer, &usDataOffset, &usSendSize))||
- ( usSendSize < usDataOffset))
+ ( usSendSize < (usDataOffset + sizeof(tHalRcvFltPktMatchCntReqParams))))
{
WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
"Unable to get send buffer in "
@@ -23209,6 +23542,11 @@
return WDI_STATUS_E_FAILURE;
}
+ rcvFltPktMatchCntReqParam.bssIdx = pBSSSes->ucBSSIdx;
+ wpalMemoryCopy( pSendBuffer+usDataOffset,
+ &rcvFltPktMatchCntReqParam,
+ sizeof(rcvFltPktMatchCntReqParam));
+
//
// Don't need to fill send buffer other than header
//
@@ -23247,7 +23585,7 @@
wpt_uint16 usDataOffset = 0;
wpt_uint16 usSendSize = 0;
tHalRcvFltPktClearParam rcvFltPktClearParam;
- wpt_uint8 ucCurrentBSSSesIdx = 0;
+ wpt_uint8 ucCurrentSessionId = 0;
WDI_BSSSessionType* pBSSSes = NULL;
WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
@@ -23268,7 +23606,7 @@
return WDI_STATUS_E_FAILURE;
}
- ucCurrentBSSSesIdx = WDI_FindAssocSession( pWDICtx,
+ ucCurrentSessionId = WDI_FindAssocSession( pWDICtx,
pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
&pBSSSes);
if ( NULL == pBSSSes )
@@ -23335,9 +23673,10 @@
WDI_EventInfoType* pEventData
)
{
- WDI_Status wdiStatus;
eHalStatus halStatus;
WDI_8023MulticastListCb wdi8023MulticastListCb;
+ tHalRcvFltPktSetMcListRspType halRcvFltPktSetMcListRsp;
+ WDI_RcvFltPktSetMcListRspParamsType wdiRcvFltPktSetMcListRspInfo;
/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
@@ -23360,11 +23699,25 @@
/*-------------------------------------------------------------------------
Extract response and send it to UMAC
-------------------------------------------------------------------------*/
- halStatus = *((eHalStatus*)pEventData->pEventData);
- wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
+ if(WDI_getFwWlanFeatCaps(SLM_SESSIONIZATION))
+ {
+ wpalMemoryCopy( &halRcvFltPktSetMcListRsp,
+ pEventData->pEventData,
+ sizeof(halRcvFltPktSetMcListRsp));
+
+ wdiRcvFltPktSetMcListRspInfo.wdiStatus =
+ WDI_HAL_2_WDI_STATUS(halRcvFltPktSetMcListRsp.status);
+ wdiRcvFltPktSetMcListRspInfo.bssIdx =
+ halRcvFltPktSetMcListRsp.bssIdx;
+ }
+ else
+ {
+ halStatus = *((eHalStatus*)pEventData->pEventData);
+ wdiRcvFltPktSetMcListRspInfo.wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
+ }
/*Notify UMAC*/
- wdi8023MulticastListCb(wdiStatus, pWDICtx->pRspCBUserData);
+ wdi8023MulticastListCb(&wdiRcvFltPktSetMcListRspInfo, pWDICtx->pRspCBUserData);
return WDI_STATUS_SUCCESS;
}
@@ -23386,9 +23739,10 @@
WDI_EventInfoType* pEventData
)
{
- WDI_Status wdiStatus;
eHalStatus halStatus;
WDI_ReceiveFilterSetFilterCb wdiReceiveFilterSetFilterCb;
+ tHalSetPktFilterRspParams halSetPktFilterRspParams;
+ WDI_SetRcvPktFilterRspParamsType wdiSetRcvPktFilterRspInfo;
/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
@@ -23412,11 +23766,22 @@
/*-------------------------------------------------------------------------
Extract response and send it to UMAC
-------------------------------------------------------------------------*/
- halStatus = *((eHalStatus*)pEventData->pEventData);
- wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
+ if(WDI_getFwWlanFeatCaps(SLM_SESSIONIZATION))
+ {
+ wpalMemoryCopy( &halSetPktFilterRspParams,
+ pEventData->pEventData,
+ sizeof(halSetPktFilterRspParams));
+ wdiSetRcvPktFilterRspInfo.bssIdx = halSetPktFilterRspParams.bssIdx;
+ wdiSetRcvPktFilterRspInfo.wdiStatus = WDI_HAL_2_WDI_STATUS(halSetPktFilterRspParams.status);
+ }
+ else
+ {
+ halStatus = *((eHalStatus*)pEventData->pEventData);
+ wdiSetRcvPktFilterRspInfo.wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
+ }
/*Notify UMAC*/
- wdiReceiveFilterSetFilterCb(wdiStatus, pWDICtx->pRspCBUserData);
+ wdiReceiveFilterSetFilterCb(&wdiSetRcvPktFilterRspInfo, pWDICtx->pRspCBUserData);
return WDI_STATUS_SUCCESS;
}
@@ -23437,10 +23802,10 @@
WDI_EventInfoType* pEventData
)
{
- WDI_Status wdiStatus;
eHalStatus halStatus;
-
WDI_FilterMatchCountCb wdiFilterMatchCountCb;
+ tHalRcvFltPktMatchRspParams halRcvFltrPktMatachRsp;
+ WDI_RcvFltPktMatchCntRspParamsType wdiRcvFltPktMatchRspParams;
/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
@@ -23464,11 +23829,23 @@
/*-------------------------------------------------------------------------
Extract response and send it to UMAC
-------------------------------------------------------------------------*/
- halStatus = *((eHalStatus*)pEventData->pEventData);
- wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
+ if(WDI_getFwWlanFeatCaps(SLM_SESSIONIZATION))
+ {
+ wpalMemoryCopy( &halRcvFltrPktMatachRsp,
+ pEventData->pEventData,
+ sizeof(halRcvFltrPktMatachRsp));
+
+ wdiRcvFltPktMatchRspParams.wdiStatus = WDI_HAL_2_WDI_STATUS(halRcvFltrPktMatachRsp.status);
+ wdiRcvFltPktMatchRspParams.bssIdx = halRcvFltrPktMatachRsp.bssIdx;
+ }
+ else
+ {
+ halStatus = *((eHalStatus*)pEventData->pEventData);
+ wdiRcvFltPktMatchRspParams.wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
+ }
/*Notify UMAC*/
- wdiFilterMatchCountCb(wdiStatus, pWDICtx->pRspCBUserData);
+ wdiFilterMatchCountCb(&wdiRcvFltPktMatchRspParams, pWDICtx->pRspCBUserData);
return WDI_STATUS_SUCCESS;
}
@@ -23489,9 +23866,10 @@
WDI_EventInfoType* pEventData
)
{
- WDI_Status wdiStatus;
eHalStatus halStatus;
WDI_ReceiveFilterClearFilterCb wdiReceiveFilterClearFilterCb;
+ tHalRcvFltPktClearParam halRcvFltPktClearRspMsg;
+ WDI_RcvFltPktClearRspParamsType wdiRcvFltPktClearRspParamsType;
/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
@@ -23515,11 +23893,25 @@
/*-------------------------------------------------------------------------
Extract response and send it to UMAC
-------------------------------------------------------------------------*/
- halStatus = *((eHalStatus*)pEventData->pEventData);
- wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
+ if(WDI_getFwWlanFeatCaps(SLM_SESSIONIZATION))
+ {
+ wpalMemoryCopy( &halRcvFltPktClearRspMsg,
+ pEventData->pEventData,
+ sizeof(halRcvFltPktClearRspMsg));
+
+ wdiRcvFltPktClearRspParamsType.wdiStatus =
+ WDI_HAL_2_WDI_STATUS(halRcvFltPktClearRspMsg.status);
+ wdiRcvFltPktClearRspParamsType.bssIdx =
+ halRcvFltPktClearRspMsg.bssIdx;
+ }
+ else
+ {
+ halStatus = *((eHalStatus*)pEventData->pEventData);
+ wdiRcvFltPktClearRspParamsType.wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
+ }
/*Notify UMAC*/
- wdiReceiveFilterClearFilterCb(wdiStatus, pWDICtx->pRspCBUserData);
+ wdiReceiveFilterClearFilterCb(&wdiRcvFltPktClearRspParamsType, pWDICtx->pRspCBUserData);
return WDI_STATUS_SUCCESS;
}
@@ -23879,6 +24271,9 @@
wpt_uint16 usDataOffset = 0;
wpt_uint16 usSendSize = 0;
tHalGtkOffloadReqParams gtkOffloadReqParams = {0};
+ wpt_uint8 ucCurrentSessionId = 0;
+ WDI_BSSSessionType* pBSSSes = NULL;
+
/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/*-------------------------------------------------------------------------
@@ -23912,6 +24307,18 @@
//
// 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", __FUNCTION__);
+ return WDI_STATUS_E_FAILURE;
+ }
+
+ gtkOffloadReqParams.bssIdx = pBSSSes->ucBSSIdx;
+
gtkOffloadReqParams.ulFlags = pwdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags;
// Copy KCK
wpalMemoryCopy(&(gtkOffloadReqParams.aKCK[0]), &(pwdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), 16);
@@ -23956,6 +24363,9 @@
wpt_uint8* pSendBuffer = NULL;
wpt_uint16 usDataOffset = 0;
wpt_uint16 usSendSize = 0;
+ tHalGtkOffloadGetInfoReqParams halGtkOffloadGetInfoReqParams;
+ wpt_uint8 ucCurrentSessionId = 0;
+ WDI_BSSSessionType* pBSSSes = NULL;
/*-------------------------------------------------------------------------
Sanity check
@@ -23974,9 +24384,9 @@
Get message buffer
-----------------------------------------------------------------------*/
if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_GTK_OFFLOAD_GETINFO_REQ,
- 0,
+ sizeof(halGtkOffloadGetInfoReqParams),
&pSendBuffer, &usDataOffset, &usSendSize))||
- ( usSendSize < usDataOffset))
+ ( 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",
@@ -23984,10 +24394,23 @@
WDI_ASSERT(0);
return WDI_STATUS_E_FAILURE;
}
+ 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",__FUNCTION__);
+ return WDI_STATUS_E_FAILURE;
+ }
+ 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;
@@ -24016,9 +24439,10 @@
WDI_EventInfoType* pEventData
)
{
- WDI_Status wdiStatus;
eHalStatus halStatus;
WDI_GtkOffloadCb wdiGtkOffloadCb = NULL;
+ tHalGtkOffloadRspParams halGtkOffloadRspParams;
+ WDI_GtkOffloadRspParams wdiGtkOffloadRsparams;
/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
wdiGtkOffloadCb = (WDI_GtkOffloadCb)pWDICtx->pfncRspCB;
@@ -24038,11 +24462,25 @@
/*-------------------------------------------------------------------------
Extract response and send it to UMAC
-------------------------------------------------------------------------*/
- halStatus = *((eHalStatus*)pEventData->pEventData);
- wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
+ if(WDI_getFwWlanFeatCaps(SLM_SESSIONIZATION))
+ {
+ wpalMemoryCopy( &halGtkOffloadRspParams,
+ pEventData->pEventData,
+ sizeof(halGtkOffloadRspParams));
+
+ wdiGtkOffloadRsparams.ulStatus =
+ WDI_HAL_2_WDI_STATUS(halGtkOffloadRspParams.status);
+ wdiGtkOffloadRsparams.bssIdx =
+ halGtkOffloadRspParams.bssIdx;
+ }
+ else
+ {
+ halStatus = *((eHalStatus*)pEventData->pEventData);
+ wdiGtkOffloadRsparams.ulStatus = WDI_HAL_2_WDI_STATUS(halStatus);
+ }
/*Notify UMAC*/
- wdiGtkOffloadCb( wdiStatus, pWDICtx->pRspCBUserData);
+ wdiGtkOffloadCb( &wdiGtkOffloadRsparams, pWDICtx->pRspCBUserData);
return WDI_STATUS_SUCCESS;
}
@@ -24063,10 +24501,10 @@
WDI_EventInfoType* pEventData
)
{
- WDI_Status wdiStatus;
eHalStatus halStatus;
-
WDI_GtkOffloadGetInfoCb wdiGtkOffloadGetInfoCb = NULL;
+ tHalGtkOffloadGetInfoRspParams halGtkOffloadGetInfoRspParams;
+ WDI_GtkOffloadGetInfoRspParams wdiGtkOffloadGetInfoRsparams;
/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
@@ -24087,13 +24525,34 @@
/*-------------------------------------------------------------------------
Extract response and send it to UMAC
-------------------------------------------------------------------------*/
- halStatus = *((eHalStatus*)pEventData->pEventData);
- wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
+ if(WDI_getFwWlanFeatCaps(SLM_SESSIONIZATION))
+ {
+ wpalMemoryCopy( &halGtkOffloadGetInfoRspParams,
+ pEventData->pEventData,
+ sizeof(halGtkOffloadGetInfoRspParams));
+ wdiGtkOffloadGetInfoRsparams.ulStatus =
+ WDI_HAL_2_WDI_STATUS(halGtkOffloadGetInfoRspParams.status);
+ wdiGtkOffloadGetInfoRsparams.ullKeyReplayCounter =
+ halGtkOffloadGetInfoRspParams.ullKeyReplayCounter;
+ wdiGtkOffloadGetInfoRsparams.ulTotalRekeyCount =
+ halGtkOffloadGetInfoRspParams.ulTotalRekeyCount;
+ wdiGtkOffloadGetInfoRsparams.ulGTKRekeyCount =
+ halGtkOffloadGetInfoRspParams.ulGTKRekeyCount;
+ wdiGtkOffloadGetInfoRsparams.ulIGTKRekeyCount =
+ halGtkOffloadGetInfoRspParams.ulIGTKRekeyCount;
+ wdiGtkOffloadGetInfoRsparams.bssIdx =
+ halGtkOffloadGetInfoRspParams.bssIdx;
+ }
+ else
+ {
+ halStatus = *((eHalStatus*)pEventData->pEventData);
+ wdiGtkOffloadGetInfoRsparams.ulStatus = WDI_HAL_2_WDI_STATUS(halStatus);
+ }
/*Notify UMAC*/
//wdiUpdateScanParamsCb(wdiStatus, pWDICtx->pRspCBUserData);
//wdiReceiveFilterClearFilterCb(wdiStatus, pWDICtx->pRspCBUserData);
- wdiGtkOffloadGetInfoCb(wdiStatus, pWDICtx->pRspCBUserData);
+ wdiGtkOffloadGetInfoCb(&wdiGtkOffloadGetInfoRsparams, pWDICtx->pRspCBUserData);
return WDI_STATUS_SUCCESS;
}