summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CORE/HDD/inc/wlan_hdd_main.h7
-rw-r--r--CORE/HDD/inc/wlan_hdd_p2p.h4
-rw-r--r--CORE/HDD/src/wlan_hdd_assoc.c11
-rw-r--r--CORE/HDD/src/wlan_hdd_cfg80211.c2
-rw-r--r--CORE/HDD/src/wlan_hdd_hostapd.c9
-rwxr-xr-xCORE/HDD/src/wlan_hdd_main.c90
-rw-r--r--CORE/HDD/src/wlan_hdd_p2p.c4
-rw-r--r--CORE/MAC/inc/aniGlobal.h3
-rw-r--r--CORE/MAC/inc/sirApi.h18
-rw-r--r--CORE/MAC/inc/wniApi.h2
-rw-r--r--CORE/MAC/src/pe/lim/limP2P.c16
-rw-r--r--CORE/MAC/src/pe/lim/limProcessMessageQueue.c1
-rw-r--r--CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c31
-rw-r--r--CORE/SAP/inc/sapApi.h4
-rw-r--r--CORE/SAP/src/sapApiLinkCntl.c11
-rw-r--r--CORE/SAP/src/sapFsm.c18
-rw-r--r--CORE/SME/inc/csrApi.h3
-rw-r--r--CORE/SME/inc/sme_Api.h2
-rw-r--r--CORE/SME/src/csr/csrUtil.c3
-rw-r--r--CORE/SME/src/p2p/p2p_Api.c45
-rw-r--r--CORE/SME/src/sme_common/sme_Api.c54
-rw-r--r--CORE/SYS/legacy/src/utils/src/macTrace.c2
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;