diff options
| -rw-r--r-- | core/hdd/src/wlan_hdd_hostapd.c | 42 | ||||
| -rw-r--r-- | core/sap/inc/sap_api.h | 7 | ||||
| -rw-r--r-- | core/sap/src/sap_api_link_cntl.c | 5 | ||||
| -rw-r--r-- | core/sap/src/sap_fsm.c | 9 | ||||
| -rw-r--r-- | core/sap/src/sap_module.c | 10 |
5 files changed, 66 insertions, 7 deletions
diff --git a/core/hdd/src/wlan_hdd_hostapd.c b/core/hdd/src/wlan_hdd_hostapd.c index 3c24ba78c1f1..ecc03837ee14 100644 --- a/core/hdd/src/wlan_hdd_hostapd.c +++ b/core/hdd/src/wlan_hdd_hostapd.c @@ -1063,6 +1063,40 @@ static QDF_STATUS hdd_handle_acs_scan_event(tpSap_Event sap_event, } #endif +/** + * hdd_update_scan_result() - Update the scan result to CFG80211 + * @sap_event: SAP event + * @adapter: adapter for SAP + * + * The function is to update the scan result to CFG80211 + * + * Return: QDF_STATUS_SUCCESS on success, + * other value on failure + */ +static QDF_STATUS hdd_update_scan_result(tpSap_Event sap_event, + hdd_adapter_t *adapter) +{ + struct cfg80211_bss *bss_status; + + if (NULL != sap_event->sapevt.bss_desc) { + bss_status = wlan_hdd_cfg80211_inform_bss_frame( + adapter, + sap_event->sapevt.bss_desc); + if (NULL == bss_status) { + hdd_info("UPDATE_SCAN_RESULT returned NULL"); + return QDF_STATUS_E_FAILURE; + } else { + cfg80211_put_bss( +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 9, 0)) || defined(WITH_BACKPORTS) + (WLAN_HDD_GET_CTX(adapter))->wiphy, +#endif + bss_status); + } + } + + return QDF_STATUS_SUCCESS; +} + QDF_STATUS hdd_hostapd_sap_event_cb(tpSap_Event pSapEvent, void *usrDataForCallback) { @@ -2060,7 +2094,9 @@ QDF_STATUS hdd_hostapd_sap_event_cb(tpSap_Event pSapEvent, return QDF_STATUS_E_FAILURE; else return QDF_STATUS_SUCCESS; - + case eSAP_UPDATE_SCAN_RESULT: + return hdd_update_scan_result(pSapEvent, + pHostapdAdapter); default: hdd_debug("SAP message is not handled"); goto stopbss; @@ -5827,9 +5863,9 @@ QDF_STATUS hdd_init_ap_mode(hdd_adapter_t *pAdapter, bool reinit) return QDF_STATUS_E_FAULT; } - status = wlansap_start(sapContext, mode, + status = wlansap_start(sapContext, hdd_hostapd_sap_event_cb, mode, pAdapter->macAddressCurrent.bytes, - &session_id); + &session_id, pAdapter->dev); if (!QDF_IS_STATUS_SUCCESS(status)) { hdd_err("wlansap_start failed!!"); wlansap_close(sapContext); diff --git a/core/sap/inc/sap_api.h b/core/sap/inc/sap_api.h index c6b0ae4b0404..43ab6ff32bc4 100644 --- a/core/sap/inc/sap_api.h +++ b/core/sap/inc/sap_api.h @@ -182,6 +182,7 @@ typedef enum { eSAP_ACS_SCAN_SUCCESS_EVENT, eSAP_ACS_CHANNEL_SELECTED, eSAP_ECSA_CHANGE_CHAN_IND, + eSAP_UPDATE_SCAN_RESULT, } eSapHddEvent; typedef enum { @@ -465,6 +466,7 @@ typedef struct sap_Event_s { struct sap_roc_ready_ind_s sap_roc_ind; struct sap_ch_change_ind sap_chan_cng_ind; struct sap_acs_scan_complete_event sap_acs_scan_comp; + tSirBssDescription *bss_desc; } sapevt; } tSap_Event, *tpSap_Event; @@ -867,12 +869,13 @@ QDF_STATUS wlansap_get_wps_state(void *p_cds_gctx, bool *pbWPSState); void *wlansap_open(void *p_cds_gctx); QDF_STATUS wlansap_global_init(void); QDF_STATUS wlansap_global_deinit(void); -QDF_STATUS wlansap_start(void *p_cds_gctx, enum tQDF_ADAPTER_MODE mode, - uint8_t *addr, uint32_t *session_id); QDF_STATUS wlansap_stop(void *p_cds_gctx); QDF_STATUS wlansap_close(void *p_cds_gctx); typedef QDF_STATUS (*tpWLAN_SAPEventCB)(tpSap_Event pSapEvent, void *pUsrContext); +QDF_STATUS wlansap_start(void *p_cds_gctx, tpWLAN_SAPEventCB pSapEventCallback, + enum tQDF_ADAPTER_MODE mode, uint8_t *addr, + uint32_t *session_id, void *pUsrContext); uint8_t wlansap_get_state(void *p_cds_gctx); QDF_STATUS wlansap_start_bss(void *p_cds_gctx, diff --git a/core/sap/src/sap_api_link_cntl.c b/core/sap/src/sap_api_link_cntl.c index a4306bb50c32..16a134d5bcd2 100644 --- a/core/sap/src/sap_api_link_cntl.c +++ b/core/sap/src/sap_api_link_cntl.c @@ -1025,6 +1025,11 @@ wlansap_roam_callback(void *ctx, tCsrRoamInfo *csr_roam_info, uint32_t roamId, QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO_HIGH, FL("Received set channel Indication")); break; + case eCSR_ROAM_UPDATE_SCAN_RESULT: + sap_signal_hdd_event(sap_ctx, csr_roam_info, + eSAP_UPDATE_SCAN_RESULT, + (void *) eSAP_STATUS_SUCCESS); + break; default: break; } diff --git a/core/sap/src/sap_fsm.c b/core/sap/src/sap_fsm.c index 85a370dff8f6..74d2b30900af 100644 --- a/core/sap/src/sap_fsm.c +++ b/core/sap/src/sap_fsm.c @@ -3136,6 +3136,15 @@ QDF_STATUS sap_signal_hdd_event(ptSapContext sap_ctx, sap_ap_event.sapevt.sap_chan_cng_ind.new_chan = csr_roaminfo->target_channel; break; + case eSAP_UPDATE_SCAN_RESULT: + if (!csr_roaminfo) { + QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, + FL("Invalid CSR Roam Info")); + return QDF_STATUS_E_INVAL; + } + sap_ap_event.sapHddEventCode = eSAP_UPDATE_SCAN_RESULT; + sap_ap_event.sapevt.bss_desc = csr_roaminfo->pBssDesc; + break; default: QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, FL("SAP Unknown callback event = %d"), diff --git a/core/sap/src/sap_module.c b/core/sap/src/sap_module.c index e640e747f2f9..44349c12e905 100644 --- a/core/sap/src/sap_module.c +++ b/core/sap/src/sap_module.c @@ -297,9 +297,11 @@ void *wlansap_open(void *p_cds_gctx) * control block can be extracted from its context * When MBSSID feature is enabled, SAP context is directly * passed to SAP APIs + * @pSapEventCallback: Callback function to register * @mode: Device mode * @addr: MAC address of the SAP * @session_id: Pointer to the session id + * @pUsrContext: user context to be used in callback @pSapEventCallback * * Called as part of the overall start procedure (cds_enable). SAP will * use this call to register with TL as the SAP entity for SAP RSN frames. @@ -309,8 +311,9 @@ void *wlansap_open(void *p_cds_gctx) * access would cause a page fault. * QDF_STATUS_SUCCESS: Success */ -QDF_STATUS wlansap_start(void *pCtx, enum tQDF_ADAPTER_MODE mode, - uint8_t *addr, uint32_t *session_id) +QDF_STATUS wlansap_start(void *pCtx, tpWLAN_SAPEventCB pSapEventCallback, + enum tQDF_ADAPTER_MODE mode, uint8_t *addr, + uint32_t *session_id, void *pUsrContext) { ptSapContext pSapCtx = NULL; QDF_STATUS qdf_ret_status; @@ -357,6 +360,9 @@ QDF_STATUS wlansap_start(void *pCtx, enum tQDF_ADAPTER_MODE mode, /* Now configure the auth type in the roaming profile. To open. */ pSapCtx->csr_roamProfile.negotiatedAuthType = eCSR_AUTH_TYPE_OPEN_SYSTEM; /* open is the default */ + pSapCtx->pfnSapEventCallback = pSapEventCallback; + pSapCtx->pUsrContext = pUsrContext; + if (!QDF_IS_STATUS_SUCCESS(qdf_mutex_create(&pSapCtx->SapGlobalLock))) { QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, "wlansap_start failed init lock"); |
