diff options
| author | Abhishek Singh <absingh@qti.qualcomm.com> | 2015-12-11 16:38:25 +0530 |
|---|---|---|
| committer | Anjaneedevi Kapparapu <akappa@codeaurora.org> | 2016-01-08 13:20:28 +0530 |
| commit | 057657e05ab2f93e348d184703b8fe130c199883 (patch) | |
| tree | 4d687755c645fdefe1e18534337f09106f97ed4c | |
| parent | 1752675394144f17c8e81001710fa98cf151f6ad (diff) | |
qcacld-2.0: Send management frame indication directly to HDD from PE
prima to qcacld-2.0 propagation.
If MC thread stall while waiting on any event, In case of WPS,
probe requests may get accumulated in PE message queue.
Now every time MC thread process a probe request,
eWNI_SME_MGMT_FRM_IND msg is posted in SME message queue. But
unless PE queue is fully processed SME queue won't be processed.
This will gradually use all vos message wrapper.
To avoid this register a callback to send management frame
indication directly to HDD from PE which avoids posting message to
SME queue.
Change-Id: Ib83700825112cc52dade594909bfa8993909ac29
CRs-Fixed: 944961
| -rw-r--r-- | CORE/HDD/inc/wlan_hdd_main.h | 7 | ||||
| -rw-r--r-- | CORE/HDD/inc/wlan_hdd_p2p.h | 4 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_assoc.c | 11 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_cfg80211.c | 2 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_hostapd.c | 9 | ||||
| -rwxr-xr-x | CORE/HDD/src/wlan_hdd_main.c | 90 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_p2p.c | 4 | ||||
| -rw-r--r-- | CORE/MAC/inc/aniGlobal.h | 3 | ||||
| -rw-r--r-- | CORE/MAC/inc/sirApi.h | 18 | ||||
| -rw-r--r-- | CORE/MAC/inc/wniApi.h | 2 | ||||
| -rw-r--r-- | CORE/MAC/src/pe/lim/limP2P.c | 16 | ||||
| -rw-r--r-- | CORE/MAC/src/pe/lim/limProcessMessageQueue.c | 1 | ||||
| -rw-r--r-- | CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c | 31 | ||||
| -rw-r--r-- | CORE/SAP/inc/sapApi.h | 4 | ||||
| -rw-r--r-- | CORE/SAP/src/sapApiLinkCntl.c | 11 | ||||
| -rw-r--r-- | CORE/SAP/src/sapFsm.c | 18 | ||||
| -rw-r--r-- | CORE/SME/inc/csrApi.h | 3 | ||||
| -rw-r--r-- | CORE/SME/inc/sme_Api.h | 2 | ||||
| -rw-r--r-- | CORE/SME/src/csr/csrUtil.c | 3 | ||||
| -rw-r--r-- | CORE/SME/src/p2p/p2p_Api.c | 45 | ||||
| -rw-r--r-- | CORE/SME/src/sme_common/sme_Api.c | 54 | ||||
| -rw-r--r-- | CORE/SYS/legacy/src/utils/src/macTrace.c | 2 |
22 files changed, 214 insertions, 126 deletions
diff --git a/CORE/HDD/inc/wlan_hdd_main.h b/CORE/HDD/inc/wlan_hdd_main.h index 6ec17f67fac3..1ad7c9edd115 100644 --- a/CORE/HDD/inc/wlan_hdd_main.h +++ b/CORE/HDD/inc/wlan_hdd_main.h @@ -231,6 +231,9 @@ #define HDD_MAC_ADDR_LEN 6 #define HDD_SESSION_ID_ANY 50 //This should be same as CSR_SESSION_ID_ANY +/* This should be same as CSR_ROAM_SESSION_MAX */ +#define HDD_SESSION_MAX 5 + #define HDD_MIN_TX_POWER (-100) // minimum tx power #define HDD_MAX_TX_POWER (+100) // maximum tx power @@ -1985,7 +1988,9 @@ void wlan_hdd_clear_tx_rx_histogram(hdd_context_t *pHddCtx); void hdd_runtime_suspend_init(hdd_context_t *); void hdd_runtime_suspend_deinit(hdd_context_t *); - +void hdd_indicate_mgmt_frame(tSirSmeMgmtFrameInd *frame_ind); +hdd_adapter_t *hdd_get_adapter_by_sme_session_id(hdd_context_t *hdd_ctx, + uint32_t sme_session_id); #ifdef FEATURE_GREEN_AP void wlan_hdd_set_egap_support(hdd_context_t *hdd_ctx, struct hdd_tgt_cfg *cfg); #else diff --git a/CORE/HDD/inc/wlan_hdd_p2p.h b/CORE/HDD/inc/wlan_hdd_p2p.h index 7d9f01b7b716..25d9b20835c6 100644 --- a/CORE/HDD/inc/wlan_hdd_p2p.h +++ b/CORE/HDD/inc/wlan_hdd_p2p.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2015 The Linux Foundation. All rights reserved. + * Copyright (c) 2012-2016 The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -127,7 +127,7 @@ int hdd_setP2pPs( struct net_device *dev, void *msgData ); int hdd_setP2pOpps( struct net_device *dev, tANI_U8 *command ); int hdd_setP2pNoa( struct net_device *dev, tANI_U8 *command ); -void hdd_indicateMgmtFrame( hdd_adapter_t *pAdapter, +void __hdd_indicate_mgmt_frame(hdd_adapter_t *pAdapter, tANI_U32 nFrameLength, tANI_U8* pbFrames, tANI_U8 frameType, tANI_U32 rxChan, tANI_S8 rxRssi); diff --git a/CORE/HDD/src/wlan_hdd_assoc.c b/CORE/HDD/src/wlan_hdd_assoc.c index 5cd2a2faa9fd..8f1a56875c8f 100644 --- a/CORE/HDD/src/wlan_hdd_assoc.c +++ b/CORE/HDD/src/wlan_hdd_assoc.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2015 The Linux Foundation. All rights reserved. + * Copyright (c) 2012-2016 The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -3950,15 +3950,6 @@ hdd_smeRoamCallback(void *pContext, tCsrRoamInfo *pRoamInfo, tANI_U32 roamId, } break; #endif - - case eCSR_ROAM_INDICATE_MGMT_FRAME: - hdd_indicateMgmtFrame( pAdapter, - pRoamInfo->nFrameLength, - pRoamInfo->pbFrames, - pRoamInfo->frameType, - pRoamInfo->rxChan, - pRoamInfo->rxRssi ); - break; case eCSR_ROAM_REMAIN_CHAN_READY: hdd_remainChanReadyHandler( pAdapter ); break; diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c index 05b137ebba56..1bd988dd35b3 100644 --- a/CORE/HDD/src/wlan_hdd_cfg80211.c +++ b/CORE/HDD/src/wlan_hdd_cfg80211.c @@ -10352,6 +10352,8 @@ void wlan_hdd_cfg80211_register_frames(hdd_adapter_t* pAdapter) v_U16_t type = (SIR_MAC_MGMT_FRAME << 2) | ( SIR_MAC_MGMT_ACTION << 4); ENTER(); + /* Register frame indication call back */ + sme_register_mgmt_frame_ind_callback(hHal, hdd_indicate_mgmt_frame); /* Right now we are registering these frame when driver is getting initialized. Once we will move to 2.6.37 kernel, in which we have diff --git a/CORE/HDD/src/wlan_hdd_hostapd.c b/CORE/HDD/src/wlan_hdd_hostapd.c index c9dd6da190fe..266cbbea9432 100644 --- a/CORE/HDD/src/wlan_hdd_hostapd.c +++ b/CORE/HDD/src/wlan_hdd_hostapd.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2015 The Linux Foundation. All rights reserved. + * Copyright (c) 2012-2016 The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -2063,13 +2063,6 @@ VOS_STATUS hdd_hostapd_SAPEventCB( tpSap_Event pSapEvent, v_PVOID_t usrDataForCa vos_mem_free(pSapEvent->sapevt.sapAssocStaListEvent.pAssocStas);// Release caller allocated memory here pSapEvent->sapevt.sapAssocStaListEvent.pAssocStas = NULL; return VOS_STATUS_SUCCESS; - case eSAP_INDICATE_MGMT_FRAME: - hdd_indicateMgmtFrame( pHostapdAdapter, - pSapEvent->sapevt.sapManagementFrameInfo.nFrameLength, - pSapEvent->sapevt.sapManagementFrameInfo.pbFrames, - pSapEvent->sapevt.sapManagementFrameInfo.frameType, - pSapEvent->sapevt.sapManagementFrameInfo.rxChan, 0); - return VOS_STATUS_SUCCESS; case eSAP_REMAIN_CHAN_READY: hdd_remainChanReadyHandler( pHostapdAdapter ); return VOS_STATUS_SUCCESS; diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c index 04693e94ca43..0080d1cb8e29 100755 --- a/CORE/HDD/src/wlan_hdd_main.c +++ b/CORE/HDD/src/wlan_hdd_main.c @@ -3354,6 +3354,59 @@ static int hdd_set_dwell_time(hdd_adapter_t *pAdapter, tANI_U8 *command) return ret; } +/** + * hdd_indicate_mgmt_frame() - Wrapper to indicate management frame to + * user space + * @frame_ind: Management frame data to be informed. + * + * This function is used to indicate management frame to + * user space + * + * Return: None + * + */ +void hdd_indicate_mgmt_frame(tSirSmeMgmtFrameInd *frame_ind) +{ + hdd_context_t *hdd_ctx; + hdd_adapter_t *adapter; + v_CONTEXT_t vos_context; + int i; + + /* Get the global VOSS context.*/ + vos_context = vos_get_global_context(VOS_MODULE_ID_SYS, NULL); + if (!vos_context) { + hddLog(LOGE, FL("Global VOS context is Null")); + return; + } + /* Get the HDD context.*/ + hdd_ctx = + (hdd_context_t *)vos_get_context(VOS_MODULE_ID_HDD, vos_context); + + if (0 != wlan_hdd_validate_context(hdd_ctx)) + return; + + if (HDD_SESSION_ID_ANY == frame_ind->sessionId) { + for (i = 0; i < HDD_SESSION_MAX; i++) { + adapter = + hdd_get_adapter_by_sme_session_id(hdd_ctx, i); + if (adapter) + break; + } + } else { + adapter = hdd_get_adapter_by_sme_session_id(hdd_ctx, + frame_ind->sessionId); + } + + if ((NULL != adapter) && + (WLAN_HDD_ADAPTER_MAGIC == adapter->magic)) + __hdd_indicate_mgmt_frame(adapter, + frame_ind->frame_len, + frame_ind->frameBuf, + frame_ind->frameType, + frame_ind->rxChan, + frame_ind->rxRssi); + return; +} static void hdd_GetLink_statusCB(v_U8_t status, void *pContext) { @@ -11102,6 +11155,43 @@ hdd_adapter_t *hdd_get_adapter_by_vdev( hdd_context_t *pHddCtx, return NULL; } +/** + * hdd_get_adapter_by_sme_session_id() - Return adapter with + * the sessionid + * @hdd_ctx: hdd cntx. + * @sme_session_id: sme session is for the adapter to get. + * + * This function is used to get the adapter with provided session id + * + * Return: adapter pointer if found + * + */ +hdd_adapter_t *hdd_get_adapter_by_sme_session_id(hdd_context_t *hdd_ctx, + uint32_t sme_session_id) +{ + hdd_adapter_list_node_t *adapter_node = NULL, *next = NULL; + hdd_adapter_t *adapter; + VOS_STATUS vos_status; + + + vos_status = hdd_get_front_adapter(hdd_ctx, &adapter_node); + + while ((NULL != adapter_node) && + (VOS_STATUS_SUCCESS == vos_status)) { + adapter = adapter_node->pAdapter; + + if (adapter && + adapter->sessionId == sme_session_id) + return adapter; + + vos_status = + hdd_get_next_adapter(hdd_ctx, + adapter_node, &next); + adapter_node = next; + } + return NULL; +} + hdd_adapter_t * hdd_get_adapter( hdd_context_t *pHddCtx, device_mode_t mode ) { hdd_adapter_list_node_t *pAdapterNode = NULL, *pNext = NULL; diff --git a/CORE/HDD/src/wlan_hdd_p2p.c b/CORE/HDD/src/wlan_hdd_p2p.c index 3187523a1f5e..8a7796d0e837 100644 --- a/CORE/HDD/src/wlan_hdd_p2p.c +++ b/CORE/HDD/src/wlan_hdd_p2p.c @@ -2547,12 +2547,12 @@ void hdd_sendMgmtFrameOverMonitorIface( hdd_adapter_t *pMonAdapter, return ; } -void hdd_indicateMgmtFrame( hdd_adapter_t *pAdapter, +void __hdd_indicate_mgmt_frame(hdd_adapter_t *pAdapter, tANI_U32 nFrameLength, tANI_U8* pbFrames, tANI_U8 frameType, tANI_U32 rxChan, - tANI_S8 rxRssi ) + tANI_S8 rxRssi) { tANI_U16 freq; tANI_U16 extend_time; diff --git a/CORE/MAC/inc/aniGlobal.h b/CORE/MAC/inc/aniGlobal.h index a7822863f023..b99cbf59eec3 100644 --- a/CORE/MAC/inc/aniGlobal.h +++ b/CORE/MAC/inc/aniGlobal.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2015 The Linux Foundation. All rights reserved. + * Copyright (c) 2012-2016 The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -1254,6 +1254,7 @@ typedef struct sAniSirGlobal t_auth_ack_status auth_ack_status; bool first_scan_done; int8_t first_scan_bucket_threshold; + sir_mgmt_frame_ind_callback mgmt_frame_ind_cb; } tAniSirGlobal; typedef enum diff --git a/CORE/MAC/inc/sirApi.h b/CORE/MAC/inc/sirApi.h index 0449cf107d63..d1228a3324d4 100644 --- a/CORE/MAC/inc/sirApi.h +++ b/CORE/MAC/inc/sirApi.h @@ -3486,8 +3486,7 @@ typedef struct sSirSmeCoexInd typedef struct sSirSmeMgmtFrameInd { - tANI_U16 mesgType; - tANI_U16 mesgLen; + uint16_t frame_len; tANI_U32 rxChan; tANI_U8 sessionId; tANI_U8 frameType; @@ -3495,6 +3494,21 @@ typedef struct sSirSmeMgmtFrameInd tANI_U8 frameBuf[1]; //variable }tSirSmeMgmtFrameInd, *tpSirSmeMgmtFrameInd; + +typedef void (*sir_mgmt_frame_ind_callback)(tSirSmeMgmtFrameInd *frame_ind); +/** + * struct sir_sme_mgmt_frame_cb_req - Register a + * management frame callback req + * @message_type: message id + * @length: msg length + * @callback: callback for management frame indication + */ +struct sir_sme_mgmt_frame_cb_req { + uint16_t message_type; + uint16_t length; + sir_mgmt_frame_ind_callback callback; +}; + #ifdef WLAN_FEATURE_11W typedef struct sSirSmeUnprotMgmtFrameInd { diff --git a/CORE/MAC/inc/wniApi.h b/CORE/MAC/inc/wniApi.h index e027c116705a..b375a330a31d 100644 --- a/CORE/MAC/inc/wniApi.h +++ b/CORE/MAC/inc/wniApi.h @@ -202,7 +202,6 @@ enum eWniMsgTypes eWNI_SME_REMAIN_ON_CHANNEL_REQ, eWNI_SME_REMAIN_ON_CHN_IND, eWNI_SME_REMAIN_ON_CHN_RSP, - eWNI_SME_MGMT_FRM_IND, eWNI_SME_REMAIN_ON_CHN_RDY_IND, eWNI_SME_SEND_ACTION_FRAME_IND, eWNI_SME_ACTION_FRAME_SEND_CNF, @@ -401,6 +400,7 @@ enum eWniMsgTypes eWNI_SME_GET_RSSI_IND, eWNI_SME_ROAM_RESTART_REQ, eWNI_SME_SMPS_FORCE_MODE_IND, + eWNI_SME_REGISTER_MGMT_FRAME_CB, eWNI_SME_MSG_TYPES_END }; diff --git a/CORE/MAC/src/pe/lim/limP2P.c b/CORE/MAC/src/pe/lim/limP2P.c index bce183e03bda..e73bb1b7c2ca 100644 --- a/CORE/MAC/src/pe/lim/limP2P.c +++ b/CORE/MAC/src/pe/lim/limP2P.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2015 The Linux Foundation. All rights reserved. + * Copyright (c) 2012-2016 The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -621,7 +621,6 @@ void limSendSmeMgmtFrameInd( tANI_U32 rxChannel, tpPESession psessionEntry, tANI_S8 rxRssi) { - tSirMsgQ mmhMsg; tpSirSmeMgmtFrameInd pSirSmeMgmtFrame = NULL; tANI_U16 length; @@ -636,8 +635,7 @@ void limSendSmeMgmtFrameInd( } vos_mem_set((void*)pSirSmeMgmtFrame, length, 0); - pSirSmeMgmtFrame->mesgType = eWNI_SME_MGMT_FRM_IND; - pSirSmeMgmtFrame->mesgLen = length; + pSirSmeMgmtFrame->frame_len = frameLen; pSirSmeMgmtFrame->sessionId = sessionId; pSirSmeMgmtFrame->frameType = frameType; pSirSmeMgmtFrame->rxRssi = rxRssi; @@ -710,11 +708,13 @@ send_frame: vos_mem_zero(pSirSmeMgmtFrame->frameBuf,frameLen); vos_mem_copy(pSirSmeMgmtFrame->frameBuf,frame,frameLen); - mmhMsg.type = eWNI_SME_MGMT_FRM_IND; - mmhMsg.bodyptr = pSirSmeMgmtFrame; - mmhMsg.bodyval = 0; + if (pMac->mgmt_frame_ind_cb) + pMac->mgmt_frame_ind_cb(pSirSmeMgmtFrame); + else + limLog(pMac, LOGW, + FL("Management indication callback not registered!!")); + vos_mem_free(pSirSmeMgmtFrame); - limSysProcessMmhMsgApi(pMac, &mmhMsg, ePROT); return; } /*** end limSendSmeListenRsp() ***/ diff --git a/CORE/MAC/src/pe/lim/limProcessMessageQueue.c b/CORE/MAC/src/pe/lim/limProcessMessageQueue.c index b37b8d56ca11..3161df8ad758 100644 --- a/CORE/MAC/src/pe/lim/limProcessMessageQueue.c +++ b/CORE/MAC/src/pe/lim/limProcessMessageQueue.c @@ -1434,6 +1434,7 @@ limProcessMessages(tpAniSirGlobal pMac, tpSirMsgQ limMsg) #endif /* FEATURE_WLAN_ESE && FEATURE_WLAN_ESE_UPLOAD */ case eWNI_SME_EXT_CHANGE_CHANNEL: case eWNI_SME_ROAM_RESTART_REQ: + case eWNI_SME_REGISTER_MGMT_FRAME_CB: // These messages are from HDD limProcessNormalHddMsg(pMac, limMsg, false); //no need to response to hdd break; diff --git a/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c b/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c index fb42103a3108..9e004259cf3a 100644 --- a/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c +++ b/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c @@ -5717,6 +5717,34 @@ __limProcessSmeResetApCapsChange(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) } /** + * lim_register_mgmt_frame_ind_cb() - Save the Management frame + * indication callback in PE. + * @mac_ctx: Mac pointer + * @msg_buf: Msg pointer containing the callback + * + * This function is used save the Management frame + * indication callback in PE. + * + * Return: None + */ +static void lim_register_mgmt_frame_ind_cb(tpAniSirGlobal mac_ctx, + uint32_t *msg_buf) +{ + struct sir_sme_mgmt_frame_cb_req *sme_req = + (struct sir_sme_mgmt_frame_cb_req *)msg_buf; + + if (NULL == msg_buf) { + limLog(mac_ctx, LOGE, FL("msg_buf is null")); + return; + } + if (sme_req->callback) + mac_ctx->mgmt_frame_ind_cb = + sme_req->callback; + else + limLog(mac_ctx, LOGE, FL("sme_req->callback is null")); +} + +/** * limProcessSmeReqMessages() * *FUNCTION: @@ -6055,6 +6083,9 @@ limProcessSmeReqMessages(tpAniSirGlobal pMac, tpSirMsgQ pMsg) case eWNI_SME_PDEV_SET_HT_VHT_IE: lim_process_set_pdev_IEs(pMac, pMsgBuf); break; + case eWNI_SME_REGISTER_MGMT_FRAME_CB: + lim_register_mgmt_frame_ind_cb(pMac, pMsgBuf); + break; default: vos_mem_free((v_VOID_t*)pMsg->bodyptr); pMsg->bodyptr = NULL; diff --git a/CORE/SAP/inc/sapApi.h b/CORE/SAP/inc/sapApi.h index 91865c9ed79a..9e7ca4661c17 100644 --- a/CORE/SAP/inc/sapApi.h +++ b/CORE/SAP/inc/sapApi.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2015 The Linux Foundation. All rights reserved. + * Copyright (c) 2012-2016 The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -173,7 +173,6 @@ typedef enum { eSAP_ASSOC_STA_CALLBACK_EVENT, /*Event sent when user called WLANSAP_GetAssocStations */ eSAP_GET_WPSPBC_SESSION_EVENT, /* Event send when user call WLANSAP_getWpsSessionOverlap */ eSAP_WPS_PBC_PROBE_REQ_EVENT, /* Event send on WPS PBC probe request is received */ - eSAP_INDICATE_MGMT_FRAME, eSAP_REMAIN_CHAN_READY, eSAP_SEND_ACTION_CNF, eSAP_DISCONNECT_ALL_P2P_CLIENT, @@ -413,7 +412,6 @@ typedef struct sap_Event_s { tSap_AssocStaListEvent sapAssocStaListEvent; /*SAP_ASSOC_STA_CALLBACK_EVENT */ tSap_GetWPSPBCSessionEvent sapGetWPSPBCSessionEvent; /*SAP_GET_WPSPBC_SESSION_EVENT */ tSap_WPSPBCProbeReqEvent sapPBCProbeReqEvent; /*eSAP_WPS_PBC_PROBE_REQ_EVENT */ - tSap_ManagementFrameInfo sapManagementFrameInfo; /*eSAP_INDICATE_MGMT_FRAME*/ tSap_SendActionCnf sapActionCnf; /* eSAP_SEND_ACTION_CNF */ tSap_UnknownSTAJoinEvent sapUnknownSTAJoin; /* eSAP_UNKNOWN_STA_JOIN */ tSap_MaxAssocExceededEvent sapMaxAssocExceeded; /* eSAP_MAX_ASSOC_EXCEEDED */ diff --git a/CORE/SAP/src/sapApiLinkCntl.c b/CORE/SAP/src/sapApiLinkCntl.c index 199a422303ec..3b0f3e8ad44f 100644 --- a/CORE/SAP/src/sapApiLinkCntl.c +++ b/CORE/SAP/src/sapApiLinkCntl.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2015 The Linux Foundation. All rights reserved. + * Copyright (c) 2012-2016 The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -685,15 +685,6 @@ WLANSAP_RoamCallback FL("CSR roamStatus = %s (%d)"), "eCSR_ROAM_WPS_PBC_PROBE_REQ_IND", roamStatus); break; - - case eCSR_ROAM_INDICATE_MGMT_FRAME: - VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, - FL("CSR roamStatus = %s (%d)"), - "eCSR_ROAM_INDICATE_MGMT_FRAME", roamStatus); - sapSignalHDDevent(sapContext, pCsrRoamInfo, - eSAP_INDICATE_MGMT_FRAME, - (v_PVOID_t) eSAP_STATUS_SUCCESS); - break; case eCSR_ROAM_REMAIN_CHAN_READY: VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, FL("CSR roamStatus = %s (%d)"), diff --git a/CORE/SAP/src/sapFsm.c b/CORE/SAP/src/sapFsm.c index da1518b02a0b..c94843df0a99 100644 --- a/CORE/SAP/src/sapFsm.c +++ b/CORE/SAP/src/sapFsm.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2015 The Linux Foundation. All rights reserved. + * Copyright (c) 2012-2016 The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -2957,22 +2957,6 @@ sapSignalHDDevent pCsrRoamInfo->u.pWPSPBCProbeReq, sizeof(tSirWPSPBCProbeReq)); break; - - case eSAP_INDICATE_MGMT_FRAME: - VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, - FL("SAP event callback event = %s"), - "eSAP_INDICATE_MGMT_FRAME"); - sapApAppEvent.sapHddEventCode = eSAP_INDICATE_MGMT_FRAME; - sapApAppEvent.sapevt.sapManagementFrameInfo.nFrameLength - = pCsrRoamInfo->nFrameLength; - sapApAppEvent.sapevt.sapManagementFrameInfo.pbFrames - = pCsrRoamInfo->pbFrames; - sapApAppEvent.sapevt.sapManagementFrameInfo.frameType - = pCsrRoamInfo->frameType; - sapApAppEvent.sapevt.sapManagementFrameInfo.rxChan - = pCsrRoamInfo->rxChan; - - break; case eSAP_REMAIN_CHAN_READY: VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, FL("SAP event callback event = %s"), diff --git a/CORE/SME/inc/csrApi.h b/CORE/SME/inc/csrApi.h index 86635069c0f6..79d69cf4eb17 100644 --- a/CORE/SME/inc/csrApi.h +++ b/CORE/SME/inc/csrApi.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011-2015 The Linux Foundation. All rights reserved. + * Copyright (c) 2011-2016 The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -499,7 +499,6 @@ typedef enum eCSR_ROAM_FT_RESPONSE, #endif eCSR_ROAM_FT_START, - eCSR_ROAM_INDICATE_MGMT_FRAME, eCSR_ROAM_REMAIN_CHAN_READY, eCSR_ROAM_SEND_ACTION_CNF, //this mean error happens before association_start or roaming_start is called. diff --git a/CORE/SME/inc/sme_Api.h b/CORE/SME/inc/sme_Api.h index b3028a42c244..1c7f1eeb8e69 100644 --- a/CORE/SME/inc/sme_Api.h +++ b/CORE/SME/inc/sme_Api.h @@ -4340,6 +4340,8 @@ sme_set_tsf_gpio(tHalHandle hHal, uint32_t pinvalue) #endif bool smeNeighborMiddleOfRoaming(tHalHandle hHal, tANI_U8 sessionId); +eHalStatus sme_register_mgmt_frame_ind_callback(tHalHandle hal, + sir_mgmt_frame_ind_callback callback); eHalStatus sme_update_nss(tHalHandle h_hal, uint8_t nss); void sme_enable_phy_error_logs(tHalHandle hal, bool enable_log); diff --git a/CORE/SME/src/csr/csrUtil.c b/CORE/SME/src/csr/csrUtil.c index b0668b3357c6..1fa19dcef069 100644 --- a/CORE/SME/src/csr/csrUtil.c +++ b/CORE/SME/src/csr/csrUtil.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011-2015 The Linux Foundation. All rights reserved. + * Copyright (c) 2011-2016 The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -455,7 +455,6 @@ get_eRoamCmdStatus_str(eRoamCmdStatus val) CASE_RETURN_STR(eCSR_ROAM_FT_RESPONSE); #endif CASE_RETURN_STR(eCSR_ROAM_FT_START); - CASE_RETURN_STR(eCSR_ROAM_INDICATE_MGMT_FRAME); CASE_RETURN_STR(eCSR_ROAM_REMAIN_CHAN_READY); CASE_RETURN_STR(eCSR_ROAM_SEND_ACTION_CNF); CASE_RETURN_STR(eCSR_ROAM_SESSION_OPENED); diff --git a/CORE/SME/src/p2p/p2p_Api.c b/CORE/SME/src/p2p/p2p_Api.c index cd26f5002603..ba91521bf4d5 100644 --- a/CORE/SME/src/p2p/p2p_Api.c +++ b/CORE/SME/src/p2p/p2p_Api.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2014 The Linux Foundation. All rights reserved. + * Copyright (c) 2012-2014,2016 The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -186,49 +186,6 @@ eHalStatus sme_remainOnChnRsp( tpAniSirGlobal pMac, tANI_U8 *pMsg) return status; } - -/*------------------------------------------------------------------ - * - * Handle the Mgmt frm ind from LIM and forward to HDD. - * - *------------------------------------------------------------------*/ - -eHalStatus sme_mgmtFrmInd( tHalHandle hHal, tpSirSmeMgmtFrameInd pSmeMgmtFrm) -{ - tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - eHalStatus status = eHAL_STATUS_SUCCESS; - tCsrRoamInfo pRoamInfo = {0}; - tANI_U8 i = 0; - tANI_U32 SessionId = pSmeMgmtFrm->sessionId; - - pRoamInfo.nFrameLength = pSmeMgmtFrm->mesgLen - sizeof(tSirSmeMgmtFrameInd); - pRoamInfo.pbFrames = pSmeMgmtFrm->frameBuf; - pRoamInfo.frameType = pSmeMgmtFrm->frameType; - pRoamInfo.rxChan = pSmeMgmtFrm->rxChan; - pRoamInfo.rxRssi = pSmeMgmtFrm->rxRssi; - if(CSR_IS_SESSION_ANY(SessionId)) - { - for(i = 0; i < CSR_ROAM_SESSION_MAX; i++) - { - if(CSR_IS_SESSION_VALID(pMac, i)) - { - SessionId = i; - break; - } - } - } - - if (i == CSR_ROAM_SESSION_MAX) { - smsLog(pMac, LOGE, FL("No valid sessions found.")); - return eHAL_STATUS_FAILURE; - } - /* forward the mgmt frame to HDD */ - csrRoamCallCallback(pMac, SessionId, &pRoamInfo, 0, eCSR_ROAM_INDICATE_MGMT_FRAME, 0); - - return status; -} - - /*------------------------------------------------------------------ * * Handle the remain on channel ready indication from PE diff --git a/CORE/SME/src/sme_common/sme_Api.c b/CORE/SME/src/sme_common/sme_Api.c index c022baad7320..a98af5fceaf5 100644 --- a/CORE/SME/src/sme_common/sme_Api.c +++ b/CORE/SME/src/sme_common/sme_Api.c @@ -93,7 +93,6 @@ extern void qosReleaseCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand ); extern void csr_release_roc_req_cmd(tpAniSirGlobal mac_ctx); extern eHalStatus p2pProcessRemainOnChannelCmd(tpAniSirGlobal pMac, tSmeCmd *p2pRemainonChn); extern eHalStatus sme_remainOnChnRsp( tpAniSirGlobal pMac, tANI_U8 *pMsg); -extern eHalStatus sme_mgmtFrmInd( tHalHandle hHal, tpSirSmeMgmtFrameInd pSmeMgmtFrm); extern eHalStatus sme_remainOnChnReady( tHalHandle hHal, tANI_U8* pMsg); extern eHalStatus sme_sendActionCnf( tHalHandle hHal, tANI_U8* pMsg); extern eHalStatus p2pProcessNoAReq(tpAniSirGlobal pMac, tSmeCmd *pNoACmd); @@ -2694,17 +2693,6 @@ eHalStatus sme_ProcessMsg(tHalHandle hHal, vos_msg_t* pMsg) smsLog( pMac, LOGE, "Empty rsp message for meas (eWNI_SME_REMAIN_ON_CHN_RDY_IND), nothing to process"); } break; - case eWNI_SME_MGMT_FRM_IND: - if(pMsg->bodyptr) - { - sme_mgmtFrmInd(pMac, pMsg->bodyptr); - vos_mem_free(pMsg->bodyptr); - } - else - { - smsLog( pMac, LOGE, "Empty rsp message for meas (eWNI_SME_MGMT_FRM_IND), nothing to process"); - } - break; case eWNI_SME_ACTION_FRAME_SEND_CNF: if(pMsg->bodyptr) { @@ -7495,6 +7483,48 @@ eHalStatus sme_GetOperationChannel(tHalHandle hHal, tANI_U32 *pChannel, tANI_U8 return eHAL_STATUS_FAILURE; }// sme_GetOperationChannel ends here +/** + * sme_register_mgmt_frame_ind_callback() - Register a callback for + * management frame indication to PE. + * + * @hal: hal pointer + * @callback: callback pointer to be registered + * + * This function is used to register a callback for management + * frame indication to PE. + * + * Return: Success if msg is posted to PE else Failure. + */ +eHalStatus sme_register_mgmt_frame_ind_callback(tHalHandle hal, + sir_mgmt_frame_ind_callback callback) +{ + tpAniSirGlobal mac_ctx = PMAC_STRUCT(hal); + struct sir_sme_mgmt_frame_cb_req *msg; + eHalStatus status = eHAL_STATUS_SUCCESS; + + smsLog(mac_ctx, LOG1, FL(": ENTER")); + + if (eHAL_STATUS_SUCCESS == + sme_AcquireGlobalLock(&mac_ctx->sme)) { + msg = vos_mem_malloc(sizeof(*msg)); + if (NULL == msg) { + smsLog(mac_ctx, LOGE, + FL("Not able to allocate memory for eWNI_SME_REGISTER_MGMT_FRAME_CB")); + sme_ReleaseGlobalLock(&mac_ctx->sme); + return eHAL_STATUS_FAILURE; + } + vos_mem_set(msg, sizeof(*msg), 0); + msg->message_type = eWNI_SME_REGISTER_MGMT_FRAME_CB; + msg->length = sizeof(*msg); + + msg->callback = callback; + status = palSendMBMessage(mac_ctx->hHdd, msg); + sme_ReleaseGlobalLock(&mac_ctx->sme); + return status; + } + return eHAL_STATUS_FAILURE; +} + /* --------------------------------------------------------------------------- \fn sme_RegisterMgtFrame diff --git a/CORE/SYS/legacy/src/utils/src/macTrace.c b/CORE/SYS/legacy/src/utils/src/macTrace.c index 3b0086976b5b..f1dada687077 100644 --- a/CORE/SYS/legacy/src/utils/src/macTrace.c +++ b/CORE/SYS/legacy/src/utils/src/macTrace.c @@ -427,7 +427,6 @@ tANI_U8* macTraceGetSmeMsgString( tANI_U16 smeMsg ) CASE_RETURN_STRING(eWNI_SME_REMAIN_ON_CHANNEL_REQ); CASE_RETURN_STRING(eWNI_SME_REMAIN_ON_CHN_IND); CASE_RETURN_STRING(eWNI_SME_REMAIN_ON_CHN_RSP); - CASE_RETURN_STRING(eWNI_SME_MGMT_FRM_IND); CASE_RETURN_STRING(eWNI_SME_REMAIN_ON_CHN_RDY_IND); CASE_RETURN_STRING(eWNI_SME_SEND_ACTION_FRAME_IND); CASE_RETURN_STRING(eWNI_SME_ACTION_FRAME_SEND_CNF); @@ -524,6 +523,7 @@ tANI_U8* macTraceGetSmeMsgString( tANI_U16 smeMsg ) #endif CASE_RETURN_STRING(eWNI_SME_LOST_LINK_INFO_IND); CASE_RETURN_STRING(eWNI_SME_SMPS_FORCE_MODE_IND); + CASE_RETURN_STRING(eWNI_SME_REGISTER_MGMT_FRAME_CB); default: return( (tANI_U8*)"UNKNOWN" ); break; |
