From e2dd5440bf5e37e671e768d04c71cfbdde0ff6d2 Mon Sep 17 00:00:00 2001 From: Deepak Dhamdhere Date: Fri, 27 May 2016 15:05:51 -0700 Subject: qcacld-3.0: Implement NAN datapath interface create qcacld-2.0 to qcacld-3.0 propagation Add changes to support session and BSS creation in NDI mode. CRs-Fixed: 962367 Change-Id: I585cd89702a2c412783ae93fb1558ed5bfe31fd9 --- core/cds/src/cds_api.c | 3 + core/mac/src/cfg/cfg_api.c | 3 +- core/mac/src/pe/lim/lim_process_mlm_req_messages.c | 7 +- core/mac/src/pe/lim/lim_process_mlm_rsp_messages.c | 11 +- core/mac/src/pe/lim/lim_process_sme_req_messages.c | 63 +++++---- core/mac/src/pe/lim/lim_send_sme_rsp_messages.c | 2 + core/mac/src/pe/lim/lim_sme_req_utils.c | 2 + core/mac/src/pe/lim/lim_utils.c | 1 + core/mac/src/pe/nan/nan_datapath.c | 48 +++++++ core/mac/src/pe/nan/nan_datapath.h | 11 ++ core/sme/inc/csr_api.h | 16 ++- core/sme/inc/sme_nan_datapath.h | 58 ++++++++ core/sme/src/csr/csr_api_roam.c | 80 ++++++++--- core/sme/src/csr/csr_inside_api.h | 13 ++ core/sme/src/csr/csr_util.c | 11 ++ core/sme/src/nan/nan_datapath_api.c | 153 +++++++++++++++++++++ core/wma/inc/wma.h | 1 + core/wma/inc/wma_internal.h | 4 + core/wma/src/wma_dev_if.c | 11 +- core/wma/src/wma_nan_datapath.c | 93 ++++++++++++- core/wma/src/wma_nan_datapath.h | 7 + 21 files changed, 544 insertions(+), 54 deletions(-) diff --git a/core/cds/src/cds_api.c b/core/cds/src/cds_api.c index 116936fe83cd..d50f781aa8a3 100644 --- a/core/cds/src/cds_api.c +++ b/core/cds/src/cds_api.c @@ -1591,6 +1591,9 @@ QDF_STATUS cds_get_vdev_types(enum tQDF_ADAPTER_MODE mode, uint32_t *type, case QDF_MONITOR_MODE: *type = WMI_VDEV_TYPE_MONITOR; break; + case QDF_NDI_MODE: + *type = WMI_VDEV_TYPE_NDI; + break; default: QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_ERROR, "Invalid device mode %d", mode); diff --git a/core/mac/src/cfg/cfg_api.c b/core/mac/src/cfg/cfg_api.c index 18c7afe7b8eb..c351063cff4c 100644 --- a/core/mac/src/cfg/cfg_api.c +++ b/core/mac/src/cfg/cfg_api.c @@ -727,7 +727,8 @@ tSirRetStatus cfg_get_capability_info(tpAniSirGlobal pMac, uint16_t *pCap, else if (LIM_IS_AP_ROLE(sessionEntry) || LIM_IS_STA_ROLE(sessionEntry)) pCapInfo->ess = 1; /* ESS bit */ - else if (LIM_IS_P2P_DEVICE_ROLE(sessionEntry)) { + else if (LIM_IS_P2P_DEVICE_ROLE(sessionEntry) || + LIM_IS_NDI_ROLE(sessionEntry)) { pCapInfo->ess = 0; pCapInfo->ibss = 0; } else diff --git a/core/mac/src/pe/lim/lim_process_mlm_req_messages.c b/core/mac/src/pe/lim/lim_process_mlm_req_messages.c index e3a1c2688039..c7519c6fe245 100644 --- a/core/mac/src/pe/lim/lim_process_mlm_req_messages.c +++ b/core/mac/src/pe/lim/lim_process_mlm_req_messages.c @@ -603,11 +603,12 @@ lim_mlm_add_bss(tpAniSirGlobal mac_ctx, session->selfMacAddr, sizeof(tSirMacAddr)); addbss_param->bssType = mlm_start_req->bssType; - if ((mlm_start_req->bssType == eSIR_IBSS_MODE)) { + if (mlm_start_req->bssType == eSIR_IBSS_MODE) addbss_param->operMode = BSS_OPERATIONAL_MODE_STA; - } else if (mlm_start_req->bssType == eSIR_INFRA_AP_MODE) { + else if (mlm_start_req->bssType == eSIR_INFRA_AP_MODE) addbss_param->operMode = BSS_OPERATIONAL_MODE_AP; - } + else if (mlm_start_req->bssType == eSIR_NDI_MODE) + addbss_param->operMode = BSS_OPERATIONAL_MODE_NDI; addbss_param->shortSlotTimeSupported = session->shortSlotTimeSupported; addbss_param->beaconInterval = mlm_start_req->beaconPeriod; diff --git a/core/mac/src/pe/lim/lim_process_mlm_rsp_messages.c b/core/mac/src/pe/lim/lim_process_mlm_rsp_messages.c index 99fc67e544d1..58391607579d 100644 --- a/core/mac/src/pe/lim/lim_process_mlm_rsp_messages.c +++ b/core/mac/src/pe/lim/lim_process_mlm_rsp_messages.c @@ -49,6 +49,7 @@ #include "cds_utils.h" #include "lim_types.h" #include "cds_concurrency.h" +#include "nan_datapath.h" #define MAX_SUPPORTED_PEERS_WEP 16 @@ -254,12 +255,14 @@ void lim_process_mlm_start_cnf(tpAniSirGlobal pMac, uint32_t *pMsgBuf) MTRACE(mac_trace (pMac, TRACE_CODE_SME_STATE, psessionEntry->peSessionId, psessionEntry->limSmeState)); - if (psessionEntry->bssType == eSIR_INFRA_AP_MODE) { + if (psessionEntry->bssType == eSIR_INFRA_AP_MODE) lim_log(pMac, LOG1, FL("*** Started BSS in INFRA AP SIDE***")); - } else { + else if (psessionEntry->bssType == eSIR_NDI_MODE) + lim_log(pMac, LOG1, + FL("*** Started BSS in NDI mode ***")); + else lim_log(pMac, LOG1, FL("*** Started BSS ***")); - } } else { /* Start BSS is a failure */ pe_delete_session(pMac, psessionEntry); @@ -2672,6 +2675,8 @@ void lim_process_mlm_add_bss_rsp(tpAniSirGlobal mac_ctx, mlm_start_cnf.sessionId = session_entry->peSessionId; if (eSIR_IBSS_MODE == bss_type) { lim_process_ibss_mlm_add_bss_rsp(mac_ctx, msg, session_entry); + } else if (eSIR_NDI_MODE == session_entry->bssType) { + lim_process_ndi_mlm_add_bss_rsp(mac_ctx, msg, session_entry); } else { if (eLIM_SME_WT_START_BSS_STATE == session_entry->limSmeState) { if (eLIM_MLM_WT_ADD_BSS_RSP_STATE != diff --git a/core/mac/src/pe/lim/lim_process_sme_req_messages.c b/core/mac/src/pe/lim/lim_process_sme_req_messages.c index ff4fd61f8263..0d480b6c17ab 100644 --- a/core/mac/src/pe/lim/lim_process_sme_req_messages.c +++ b/core/mac/src/pe/lim/lim_process_sme_req_messages.c @@ -698,27 +698,34 @@ __lim_handle_sme_start_bss_request(tpAniSirGlobal mac_ctx, uint32_t *msg_buf) } } - /* Probe resp add ie */ - lim_start_bss_update_add_ie_buffer(mac_ctx, - &session->addIeParams.probeRespData_buff, - &session->addIeParams.probeRespDataLen, - sme_start_bss_req->addIeParams.probeRespData_buff, - sme_start_bss_req->addIeParams.probeRespDataLen); - - /* Probe Beacon add ie */ - lim_start_bss_update_add_ie_buffer(mac_ctx, - &session->addIeParams.probeRespBCNData_buff, - &session->addIeParams.probeRespBCNDataLen, - sme_start_bss_req->addIeParams.probeRespBCNData_buff, - sme_start_bss_req->addIeParams.probeRespBCNDataLen); - - /* Assoc resp IE */ - lim_start_bss_update_add_ie_buffer(mac_ctx, - &session->addIeParams.assocRespData_buff, - &session->addIeParams.assocRespDataLen, - sme_start_bss_req->addIeParams.assocRespData_buff, - sme_start_bss_req->addIeParams.assocRespDataLen); - + if (QDF_NDI_MODE != sme_start_bss_req->bssPersona) { + /* Probe resp add ie */ + lim_start_bss_update_add_ie_buffer(mac_ctx, + &session->addIeParams.probeRespData_buff, + &session->addIeParams.probeRespDataLen, + sme_start_bss_req->addIeParams. + probeRespData_buff, + sme_start_bss_req->addIeParams. + probeRespDataLen); + + /* Probe Beacon add ie */ + lim_start_bss_update_add_ie_buffer(mac_ctx, + &session->addIeParams.probeRespBCNData_buff, + &session->addIeParams.probeRespBCNDataLen, + sme_start_bss_req->addIeParams. + probeRespBCNData_buff, + sme_start_bss_req->addIeParams. + probeRespBCNDataLen); + + /* Assoc resp IE */ + lim_start_bss_update_add_ie_buffer(mac_ctx, + &session->addIeParams.assocRespData_buff, + &session->addIeParams.assocRespDataLen, + sme_start_bss_req->addIeParams. + assocRespData_buff, + sme_start_bss_req->addIeParams. + assocRespDataLen); + } /* Store the session related params in newly created session */ session->pLimStartBssReq = sme_start_bss_req; @@ -826,6 +833,10 @@ __lim_handle_sme_start_bss_request(tpAniSirGlobal mac_ctx, uint32_t *msg_buf) session->vdev_nss = vdev_type_nss->ibss; break; + case eSIR_NDI_MODE: + session->limSystemRole = eLIM_NDI_ROLE; + break; + /* * There is one more mode called auto mode. @@ -861,7 +872,8 @@ __lim_handle_sme_start_bss_request(tpAniSirGlobal mac_ctx, uint32_t *msg_buf) sizeof(tpSirAssocReq)), 0); } - if (!sme_start_bss_req->channelId) { + if (!sme_start_bss_req->channelId && + sme_start_bss_req->bssType != eSIR_NDI_MODE) { lim_log(mac_ctx, LOGE, FL("Received invalid eWNI_SME_START_BSS_REQ")); ret_code = eSIR_SME_INVALID_PARAMETERS; @@ -924,7 +936,9 @@ __lim_handle_sme_start_bss_request(tpAniSirGlobal mac_ctx, uint32_t *msg_buf) lim_set_rs_nie_wp_aiefrom_sme_start_bss_req_message(mac_ctx, &sme_start_bss_req->rsnIE, session); - if (LIM_IS_AP_ROLE(session) || LIM_IS_IBSS_ROLE(session)) { + if (LIM_IS_AP_ROLE(session) || + LIM_IS_IBSS_ROLE(session) || + LIM_IS_NDI_ROLE(session)) { session->gLimProtectionControl = sme_start_bss_req->protEnabled; /* @@ -962,7 +976,8 @@ __lim_handle_sme_start_bss_request(tpAniSirGlobal mac_ctx, uint32_t *msg_buf) /* Fill PE session Id from the session Table */ mlm_start_req->sessionId = session->peSessionId; - if (mlm_start_req->bssType == eSIR_INFRA_AP_MODE) { + if (mlm_start_req->bssType == eSIR_INFRA_AP_MODE || + mlm_start_req->bssType == eSIR_NDI_MODE) { /* * Copy the BSSId from sessionTable to * mlmStartReq struct diff --git a/core/mac/src/pe/lim/lim_send_sme_rsp_messages.c b/core/mac/src/pe/lim/lim_send_sme_rsp_messages.c index f5f7f5f4c183..1f6947cdd705 100644 --- a/core/mac/src/pe/lim/lim_send_sme_rsp_messages.c +++ b/core/mac/src/pe/lim/lim_send_sme_rsp_messages.c @@ -612,6 +612,7 @@ lim_send_sme_start_bss_rsp(tpAniSirGlobal pMac, pSirSmeRsp->bssDescription.channelId = psessionEntry->currentOperChannel; + if (!LIM_IS_NDI_ROLE(psessionEntry)) { curLen = psessionEntry->schBeaconOffsetBegin - ieOffset; qdf_mem_copy((uint8_t *) &pSirSmeRsp->bssDescription. ieFields, @@ -630,6 +631,7 @@ lim_send_sme_start_bss_rsp(tpAniSirGlobal pMac, sizeof(uint32_t) + ieLen; /* This is the size of the message, subtracting the size of the pointer to ieFields */ size += ieLen - sizeof(uint32_t); + } #ifdef FEATURE_WLAN_MCC_TO_SCC_SWITCH if (psessionEntry->cc_switch_mode != QDF_MCC_TO_SCC_SWITCH_DISABLE) { diff --git a/core/mac/src/pe/lim/lim_sme_req_utils.c b/core/mac/src/pe/lim/lim_sme_req_utils.c index a4ae8933167f..327009f7f073 100644 --- a/core/mac/src/pe/lim/lim_sme_req_utils.c +++ b/core/mac/src/pe/lim/lim_sme_req_utils.c @@ -409,6 +409,8 @@ lim_is_sme_start_bss_req_valid(tpAniSirGlobal mac_ctx, break; case eSIR_INFRA_AP_MODE: break; + case eSIR_NDI_MODE: + break; default: /** * Should not have received start BSS req with bssType diff --git a/core/mac/src/pe/lim/lim_utils.c b/core/mac/src/pe/lim/lim_utils.c index 29404bf5ebcb..2efea04ce500 100644 --- a/core/mac/src/pe/lim/lim_utils.c +++ b/core/mac/src/pe/lim/lim_utils.c @@ -6749,6 +6749,7 @@ const char *lim_bss_type_to_string(const uint16_t bss_type) CASE_RETURN_STRING(eSIR_INFRA_AP_MODE); CASE_RETURN_STRING(eSIR_IBSS_MODE); CASE_RETURN_STRING(eSIR_AUTO_MODE); + CASE_RETURN_STRING(eSIR_NDI_MODE); default: return "Unknown bss_type"; } diff --git a/core/mac/src/pe/nan/nan_datapath.c b/core/mac/src/pe/nan/nan_datapath.c index 9333e777130e..4d365f16dbbe 100644 --- a/core/mac/src/pe/nan/nan_datapath.c +++ b/core/mac/src/pe/nan/nan_datapath.c @@ -24,6 +24,8 @@ * MAC NAN Data path API implementation */ +#include "lim_utils.h" +#include "lim_api.h" #include "nan_datapath.h" /** @@ -49,3 +51,49 @@ QDF_STATUS handle_ndp_event_message(tpAniSirGlobal mac_ctx, tpSirMsgQ msg) { return QDF_STATUS_SUCCESS; } + +/** + * lim_process_ndi_mlm_add_bss_rsp() - Process ADD_BSS response for NDI + * @mac_ctx: Pointer to Global MAC structure + * @lim_msgq: The MsgQ header, which contains the response buffer + * @session_entry: PE session + * + * Return: None + */ +void lim_process_ndi_mlm_add_bss_rsp(tpAniSirGlobal mac_ctx, tpSirMsgQ lim_msgq, + tpPESession session_entry) +{ + tLimMlmStartCnf mlm_start_cnf; + tpAddBssParams add_bss_params = (tpAddBssParams) lim_msgq->bodyptr; + + lim_log(mac_ctx, LOG1, FL("Status %d"), add_bss_params->status); + if (NULL == add_bss_params) { + lim_log(mac_ctx, LOGE, FL("Invalid body pointer in message")); + goto end; + } + if (QDF_STATUS_SUCCESS == add_bss_params->status) { + lim_log(mac_ctx, LOG1, + FL("WDA_ADD_BSS_RSP returned QDF_STATUS_SUCCESS")); + session_entry->limMlmState = eLIM_MLM_BSS_STARTED_STATE; + MTRACE(mac_trace(mac_ctx, TRACE_CODE_MLM_STATE, + session_entry->peSessionId, + session_entry->limMlmState)); + session_entry->bssIdx = (uint8_t) add_bss_params->bssIdx; + session_entry->limSystemRole = eLIM_NDI_ROLE; + session_entry->statypeForBss = STA_ENTRY_SELF; + /* Apply previously set configuration at HW */ + lim_apply_configuration(mac_ctx, session_entry); + mlm_start_cnf.resultCode = eSIR_SME_SUCCESS; + } else { + lim_log(mac_ctx, LOGE, + FL("WDA_ADD_BSS_REQ failed with status %d"), + add_bss_params->status); + mlm_start_cnf.resultCode = eSIR_SME_HAL_SEND_MESSAGE_FAIL; + } + mlm_start_cnf.sessionId = session_entry->peSessionId; + lim_post_sme_message(mac_ctx, LIM_MLM_START_CNF, + (uint32_t *) &mlm_start_cnf); +end: + qdf_mem_free(lim_msgq->bodyptr); + lim_msgq->bodyptr = NULL; +} diff --git a/core/mac/src/pe/nan/nan_datapath.h b/core/mac/src/pe/nan/nan_datapath.h index 2d1afa6dc162..1def0d2b3163 100644 --- a/core/mac/src/pe/nan/nan_datapath.h +++ b/core/mac/src/pe/nan/nan_datapath.h @@ -106,6 +106,9 @@ QDF_STATUS lim_handle_ndp_request_message(tpAniSirGlobal mac_ctx, /* Function to process NDP events */ QDF_STATUS lim_handle_ndp_event_message(tpAniSirGlobal mac_ctx, tpSirMsgQ msg); +void lim_process_ndi_mlm_add_bss_rsp(tpAniSirGlobal mac_ctx, + tpSirMsgQ lim_msg_q, + tpPESession session_entry); #else /* Function to process NDP requests */ static inline QDF_STATUS lim_handle_ndp_request_message(tpAniSirGlobal mac_ctx, @@ -119,6 +122,14 @@ static inline QDF_STATUS lim_handle_ndp_event_message(tpAniSirGlobal mac_ctx, { return QDF_STATUS_SUCCESS; } + +/* Function to process NDP events */ +static inline void lim_process_ndi_mlm_add_bss_rsp(tpAniSirGlobal mac_ctx, + tpSirMsgQ lim_msg_q, + tpPESession session_entry) +{ +} + #endif /* WLAN_FEATURE_NAN_DATAPATH */ #endif /* __MAC_NAN_DATAPATH_H */ diff --git a/core/sme/inc/csr_api.h b/core/sme/inc/csr_api.h index 09a4b46a01aa..91b465ec282c 100644 --- a/core/sme/inc/csr_api.h +++ b/core/sme/inc/csr_api.h @@ -667,6 +667,10 @@ typedef enum { eCSR_ASSOC_STATE_TYPE_INFRA_CONNECTED, /* Disconnecting with AP or stop connecting process */ eCSR_ASSOC_STATE_TYPE_INFRA_DISCONNECTING, + /* NAN Data interface not started */ + eCSR_CONNECT_STATE_TYPE_NDI_NOT_STARTED, + /* NAN Data inteface started */ + eCSR_CONNECT_STATE_TYPE_NDI_STARTED, } eCsrConnectState; @@ -1616,9 +1620,19 @@ typedef QDF_STATUS (*csr_roamSessionCloseCallback)(void *pContext); (pProfile)->BSSType) #define CSR_IS_INFRA_AP(pProfile) (eCSR_BSS_TYPE_INFRA_AP == \ (pProfile)->BSSType) -#define CSR_IS_NDI(pProfile) (eCSR_BSS_TYPE_NDI == (pProfile)->BSSType) +#ifdef WLAN_FEATURE_NAN_DATAPATH +#define CSR_IS_NDI(profile) (eCSR_BSS_TYPE_NDI == (profile)->BSSType) +#else +#define CSR_IS_NDI(profile) (false) +#endif #define CSR_IS_CONN_INFRA_AP(pProfile) (eCSR_BSS_TYPE_INFRA_AP == \ (pProfile)->BSSType) +#ifdef WLAN_FEATURE_NAN_DATAPATH +#define CSR_IS_CONN_NDI(profile) (eCSR_BSS_TYPE_NDI == (profile)->BSSType) +#else +#define CSR_IS_CONN_NDI(profile) (false) +#endif + #define CSR_IS_CLOSE_SESSION_COMMAND(pCommand) \ ((pCommand)->command == eSmeCommandDelStaSession) diff --git a/core/sme/inc/sme_nan_datapath.h b/core/sme/inc/sme_nan_datapath.h index b65d5a472001..162dff2f6bb8 100644 --- a/core/sme/inc/sme_nan_datapath.h +++ b/core/sme/inc/sme_nan_datapath.h @@ -27,6 +27,9 @@ #ifndef __SME_NAN_DATAPATH_H #define __SME_NAN_DATAPATH_H +#ifdef WLAN_FEATURE_NAN_DATAPATH +#include "qdf_types.h" +#include "sir_api.h" #include "ani_global.h" /* NAN initiator request handler */ @@ -48,4 +51,59 @@ QDF_STATUS sme_ndp_sched_req_handler(uint32_t session_id, /* Function to handle NDP messages from lower layers */ void sme_ndp_message_processor(tpAniSirGlobal mac_ctx, uint16_t msg_type, void *msg); + +/* Start NDI BSS */ +QDF_STATUS csr_roam_start_ndi(tpAniSirGlobal mac_ctx, uint32_t session_id, + tCsrRoamProfile *profile); + +void csr_roam_fill_roaminfo_ndp(tpAniSirGlobal mac_ctx, + tCsrRoamInfo *roam_info, + eCsrRoamResult roam_result, + tSirResultCodes status_code, + uint32_t reason_code, + uint32_t transaction_id); + +void csr_roam_save_ndi_connected_info(tpAniSirGlobal mac_ctx, + uint32_t session_id, + tCsrRoamProfile *roam_profile, + tSirBssDescription *bss_desc); + +void csr_roam_update_ndp_return_params(tpAniSirGlobal mac_ctx, + uint32_t result, + uint32_t *roam_status, + uint32_t *roam_result); +#else + +/* Start NDI BSS */ +static inline QDF_STATUS csr_roam_start_ndi(tpAniSirGlobal mac_ctx, + uint32_t session_id, + tCsrRoamProfile *profile) +{ + return QDF_STATUS_SUCCESS; +} + +/* Fill in ndp information in roam_info */ +static inline void csr_roam_fill_roaminfo_ndp(tpAniSirGlobal mac_ctx, + tCsrRoamInfo *roam_info, + eCsrRoamResult roam_result, + tSirResultCodes status_code, + uint32_t reason_code, + uint32_t transaction_id) +{ +} + +static inline void csr_roam_save_ndi_connected_info(tpAniSirGlobal mac_ctx, + uint32_t session_id, + tCsrRoamProfile *roam_profile, + tSirBssDescription *bss_desc) +{ +} + +static inline void csr_roam_update_ndp_return_params(tpAniSirGlobal mac_ctx, + uint32_t result, + uint32_t *roam_status, + uint32_t *roam_result) +{ +} +#endif /* WLAN_FEATURE_NAN_DATAPATH */ #endif /* __SME_NAN_DATAPATH_H */ diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c index fb036bc545a6..942a92dc3f0d 100644 --- a/core/sme/src/csr/csr_api_roam.c +++ b/core/sme/src/csr/csr_api_roam.c @@ -54,6 +54,7 @@ #include "sme_power_save_api.h" #include "wma.h" #include "cds_concurrency.h" +#include "sme_nan_datapath.h" #define MAX_PWR_FCC_CHAN_12 8 #define MAX_PWR_FCC_CHAN_13 2 @@ -177,11 +178,6 @@ static void csr_roam_update_connected_profile_from_new_bss(tpAniSirGlobal pMac, uint32_t sessionId, tSirSmeNewBssInfo * pNewBss); -static void csr_roam_prepare_bss_params(tpAniSirGlobal pMac, uint32_t sessionId, - tCsrRoamProfile *pProfile, - tSirBssDescription *pBssDesc, - tBssConfigParam *pBssConfig, - tDot11fBeaconIEs *pIes); static ePhyChanBondState csr_get_cb_mode_from_ies(tpAniSirGlobal pMac, uint8_t primaryChn, tDot11fBeaconIEs *pIes); @@ -3862,7 +3858,7 @@ QDF_STATUS csr_roam_prepare_bss_config(tpAniSirGlobal pMac, return QDF_STATUS_SUCCESS; } -static QDF_STATUS csr_roam_prepare_bss_config_from_profile(tpAniSirGlobal pMac, +QDF_STATUS csr_roam_prepare_bss_config_from_profile(tpAniSirGlobal pMac, tCsrRoamProfile *pProfile, tBssConfigParam * pBssConfig, @@ -5162,6 +5158,13 @@ static void csr_roam_join_handle_profile(tpAniSirGlobal mac_ctx, *roam_state = eCsrContinueRoaming; else *roam_state = eCsrStopRoaming; + } else if (CSR_IS_NDI(profile)) { + csr_roam_assign_default_param(mac_ctx, cmd); + status = csr_roam_start_ndi(mac_ctx, session_id, profile); + if (QDF_IS_STATUS_SUCCESS(status)) + *roam_state = eCsrContinueRoaming; + else + *roam_state = eCsrStopRoaming; } else { /* Nothing we can do */ sms_log(mac_ctx, LOGW, FL("cannot continue without BSS list")); @@ -6284,11 +6287,23 @@ static void csr_roam_process_start_bss_success(tpAniSirGlobal mac_ctx, else if (CSR_IS_INFRA_AP(profile)) session->connectState = eCSR_ASSOC_STATE_TYPE_INFRA_DISCONNECTED; + else if (CSR_IS_NDI(profile)) + session->connectState = eCSR_CONNECT_STATE_TYPE_NDI_STARTED; else session->connectState = eCSR_ASSOC_STATE_TYPE_WDS_DISCONNECTED; + + bss_desc = &start_bss_rsp->bssDescription; + if (CSR_IS_NDI(profile)) { + csr_roam_state_change(mac_ctx, eCSR_ROAMING_STATE_JOINED, + session_id); + csr_roam_save_ndi_connected_info(mac_ctx, session_id, profile, + bss_desc); + roam_info.u.pConnectedProfile = &session->connectedProfile; + qdf_mem_copy(&roam_info.bssid, &bss_desc->bssId, + sizeof(struct qdf_mac_addr)); + } csr_roam_state_change(mac_ctx, eCSR_ROAMING_STATE_JOINED, session_id); - bss_desc = &start_bss_rsp->bssDescription; if (!QDF_IS_STATUS_SUCCESS (csr_get_parsed_bss_description_ies(mac_ctx, bss_desc, &ies_ptr))) { @@ -6308,12 +6323,10 @@ static void csr_roam_process_start_bss_success(tpAniSirGlobal mac_ctx, csr_roam_save_connected_bss_desc(mac_ctx, session_id, bss_desc); csr_roam_free_connect_profile(&session->connectedProfile); csr_roam_free_connected_info(mac_ctx, &session->connectedInfo); - if (bss_desc) { - csr_roam_save_connected_infomation(mac_ctx, session_id, - profile, bss_desc, ies_ptr); - qdf_mem_copy(&roam_info.bssid, &bss_desc->bssId, + csr_roam_save_connected_infomation(mac_ctx, session_id, + profile, bss_desc, ies_ptr); + qdf_mem_copy(&roam_info.bssid, &bss_desc->bssId, sizeof(struct qdf_mac_addr)); - } /* We are done with the IEs so free it */ qdf_mem_free(ies_ptr); #ifdef FEATURE_WLAN_DIAG_SUPPORT_CSR @@ -6383,19 +6396,28 @@ static void csr_roam_process_start_bss_success(tpAniSirGlobal mac_ctx, roam_status = eCSR_ROAM_INFRA_IND; roam_result = eCSR_ROAM_RESULT_INFRA_STARTED; } + if (CSR_IS_NDI(profile)) { + csr_roam_update_ndp_return_params(mac_ctx, + eCsrStartBssSuccess, + &roam_status, &roam_result); + csr_roam_fill_roaminfo_ndp(mac_ctx, &roam_info, + roam_result, + start_bss_rsp->statusCode, + 0, 0); + } /* * Only tell upper layer is we start the BSS because Vista * doesn't like multiple connection indications. If we don't * start the BSS ourself, handler of eSIR_SME_JOINED_NEW_BSS * will trigger the connection start indication in Vista */ - qdf_mem_set(&roam_info, sizeof(tCsrRoamInfo), 0); roam_info.statusCode = session->joinFailStatusCode.statusCode; roam_info.reasonCode = session->joinFailStatusCode.reasonCode; /* We start the IBSS (didn't find any matched IBSS out there) */ roam_info.pBssDesc = bss_desc; roam_info.staId = (uint8_t) start_bss_rsp->staId; - qdf_mem_copy(roam_info.bssid.bytes, bss_desc->bssId, + if (bss_desc) + qdf_mem_copy(roam_info.bssid.bytes, bss_desc->bssId, sizeof(struct qdf_mac_addr)); if (!IS_FEATURE_SUPPORTED_BY_FW(SLM_SESSIONIZATION) && (csr_is_concurrent_session_running(mac_ctx))) { @@ -6823,6 +6845,7 @@ static bool csr_roam_process_results(tpAniSirGlobal mac_ctx, tSmeCmd *cmd, eRoamCmdStatus roam_status; eCsrRoamResult roam_result; host_log_ibss_pkt_type *ibss_log; + tSirSmeStartBssRsp *start_bss_rsp = NULL; if (!session) { sms_log(mac_ctx, LOGE, FL("session %d not found "), session_id); @@ -6846,18 +6869,29 @@ static bool csr_roam_process_results(tpAniSirGlobal mac_ctx, tSmeCmd *cmd, WLAN_HOST_DIAG_LOG_REPORT(ibss_log); } #endif + start_bss_rsp = (tSirSmeStartBssRsp *)context; + qdf_mem_set(&roam_info, sizeof(roam_info), 0); roam_status = eCSR_ROAM_IBSS_IND; roam_result = eCSR_ROAM_RESULT_IBSS_STARTED; if (CSR_IS_INFRA_AP(profile)) { roam_status = eCSR_ROAM_INFRA_IND; roam_result = eCSR_ROAM_RESULT_INFRA_START_FAILED; } + if (CSR_IS_NDI(profile)) { + csr_roam_update_ndp_return_params(mac_ctx, + eCsrStartBssFailure, + &roam_status, &roam_result); + csr_roam_fill_roaminfo_ndp(mac_ctx, &roam_info, + roam_result, + (start_bss_rsp) ? start_bss_rsp->statusCode : + QDF_STATUS_E_FAILURE, 0, 0); + } + if (context) { bss_desc = (tSirBssDescription *) context; } else { bss_desc = NULL; } - qdf_mem_set(&roam_info, sizeof(tCsrRoamInfo), 0); roam_info.pBssDesc = bss_desc; csr_roam_call_callback(mac_ctx, session_id, &roam_info, cmd->u.roamCmd.roamId, roam_status, @@ -7537,13 +7571,14 @@ QDF_STATUS csr_roam_connect(tpAniSirGlobal pMac, uint32_t sessionId, } } else if (NULL != pProfile) { /* Check whether it is for start ibss */ - if (CSR_IS_START_IBSS(pProfile)) { + if (CSR_IS_START_IBSS(pProfile) || + CSR_IS_NDI(pProfile)) { status = csr_roam_issue_connect(pMac, sessionId, pProfile, NULL, eCsrHddIssued, roamId, false, false); if (!QDF_IS_STATUS_SUCCESS(status)) { sms_log(pMac, LOGE, - FL("CSR failed to issue startIBSS cmd with status = 0x%08X"), + FL("Failed with status = 0x%08X"), status); fCallCallback = true; } @@ -8604,7 +8639,8 @@ csr_roaming_state_config_cnf_processor(tpAniSirGlobal mac_ctx, bss_desc = &scan_result->Result.BssDescriptor; } if (csr_is_bss_type_ibss(cmd->u.roamCmd.roamProfile.BSSType) - || CSR_IS_INFRA_AP(&cmd->u.roamCmd.roamProfile)) { + || CSR_IS_INFRA_AP(&cmd->u.roamCmd.roamProfile) + || CSR_IS_NDI(&cmd->u.roamCmd.roamProfile)) { if (!QDF_IS_STATUS_SUCCESS(csr_roam_issue_start_bss(mac_ctx, session_id, &session->bssParams, &cmd->u.roamCmd.roamProfile, @@ -12743,7 +12779,7 @@ QDF_STATUS csr_roam_issue_start_bss(tpAniSirGlobal pMac, uint32_t sessionId, return status; } -static void csr_roam_prepare_bss_params(tpAniSirGlobal pMac, uint32_t sessionId, +void csr_roam_prepare_bss_params(tpAniSirGlobal pMac, uint32_t sessionId, tCsrRoamProfile *pProfile, tSirBssDescription *pBssDesc, tBssConfigParam *pBssConfig, @@ -12760,7 +12796,11 @@ static void csr_roam_prepare_bss_params(tpAniSirGlobal pMac, uint32_t sessionId, if (pBssDesc) { csr_roam_get_bss_start_parms_from_bss_desc(pMac, pBssDesc, pIes, - &pSession->bssParams); + &pSession->bssParams); + if (CSR_IS_NDI(pProfile)) { + qdf_copy_macaddr(&pSession->bssParams.bssid, + &pSession->selfMacAddr); + } } else { csr_roam_get_bss_start_parms(pMac, pProfile, &pSession->bssParams); /* Use the first SSID */ diff --git a/core/sme/src/csr/csr_inside_api.h b/core/sme/src/csr/csr_inside_api.h index d2bb54b191eb..0fd0b6e66399 100644 --- a/core/sme/src/csr/csr_inside_api.h +++ b/core/sme/src/csr/csr_inside_api.h @@ -1070,3 +1070,16 @@ bool is_disconnect_pending(tpAniSirGlobal mac_ctx, void csr_scan_active_list_timeout_handle(void *userData); QDF_STATUS csr_prepare_disconnect_command(tpAniSirGlobal mac, uint32_t session_id, tSmeCmd **sme_cmd); +QDF_STATUS csr_roam_prepare_bss_config_from_profile(tpAniSirGlobal mac_ctx, + tCsrRoamProfile *profile, tBssConfigParam *bss_cfg, + tSirBssDescription *bss_desc); +void csr_roam_prepare_bss_params(tpAniSirGlobal mac_ctx, uint32_t session_id, + tCsrRoamProfile *profile, tSirBssDescription *bss_desc, + tBssConfigParam *bss_cfg, tDot11fBeaconIEs *ies); + +QDF_STATUS csr_roam_set_bss_config_cfg(tpAniSirGlobal mac_ctx, + uint32_t session_id, + tCsrRoamProfile *profile, tSirBssDescription *bss_desc, + tBssConfigParam *bss_cfg, tDot11fBeaconIEs *ies, + bool reset_country); + diff --git a/core/sme/src/csr/csr_util.c b/core/sme/src/csr/csr_util.c index a3aad92af9d7..38234c82dc2a 100644 --- a/core/sme/src/csr/csr_util.c +++ b/core/sme/src/csr/csr_util.c @@ -1961,6 +1961,14 @@ csr_isconcurrentsession_valid(tpAniSirGlobal mac_ctx, uint32_t cur_sessionid, QDF_TRACE_LEVEL_INFO, FL("**P2P-Client session**")); return QDF_STATUS_SUCCESS; + case QDF_NDI_MODE: + if (bss_persona != QDF_STA_MODE) { + QDF_TRACE(QDF_MODULE_ID_SME, + QDF_TRACE_LEVEL_ERROR, + FL("***NDI mode can co-exist only with STA ***")); + return QDF_STATUS_E_FAILURE; + } + break; default: QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_ERROR, @@ -5339,6 +5347,9 @@ tSirBssType csr_translate_bsstype_to_mac_type(eCsrRoamBssType csrtype) case eCSR_BSS_TYPE_INFRA_AP: ret = eSIR_INFRA_AP_MODE; break; + case eCSR_BSS_TYPE_NDI: + ret = eSIR_NDI_MODE; + break; case eCSR_BSS_TYPE_ANY: default: ret = eSIR_AUTO_MODE; diff --git a/core/sme/src/nan/nan_datapath_api.c b/core/sme/src/nan/nan_datapath_api.c index 88b428f505d1..deb69d7b3c6c 100644 --- a/core/sme/src/nan/nan_datapath_api.c +++ b/core/sme/src/nan/nan_datapath_api.c @@ -23,6 +23,11 @@ * * SME NAN Data path API implementation */ +#include "sms_debug.h" +#include "sme_api.h" +#include "csr_inside_api.h" +#include "sme_inside.h" +#include "csr_internal.h" #include "sme_nan_datapath.h" /** @@ -78,4 +83,152 @@ QDF_STATUS sme_ndp_sched_req_handler(uint32_t session_id, return QDF_STATUS_SUCCESS; } +/** + * csr_roam_start_ndi() - Start connection for NAN datapath + * @mac_ctx: Global MAC context + * @session: SME session ID + * @profile: Configuration profile + * + * Return: Success or failure code + */ +QDF_STATUS csr_roam_start_ndi(tpAniSirGlobal mac_ctx, uint32_t session, + tCsrRoamProfile *profile) +{ + QDF_STATUS status; + tBssConfigParam bss_cfg = {0}; + + /* Build BSS configuration from profile */ + status = csr_roam_prepare_bss_config_from_profile(mac_ctx, profile, + &bss_cfg, NULL); + if (QDF_IS_STATUS_SUCCESS(status)) { + mac_ctx->roam.roamSession[session].bssParams.uCfgDot11Mode + = bss_cfg.uCfgDot11Mode; + /* Copy profile parameters to PE session */ + csr_roam_prepare_bss_params(mac_ctx, session, profile, NULL, + &bss_cfg, NULL); + /* + * Following routine will eventually call + * csrRoamIssueStartBss through csrRoamCcmCfgSetCallback + */ + status = csr_roam_set_bss_config_cfg(mac_ctx, session, profile, + NULL, &bss_cfg, NULL, false); + } + + if (QDF_IS_STATUS_SUCCESS(status)) + sms_log(mac_ctx, LOG1, FL("Profile config is valid")); + else + sms_log(mac_ctx, LOGE, + FL("Profile config is invalid. status = 0x%x"), status); + + return status; +} + +/** + * csr_roam_fill_roaminfo_ndp() - fill the ndi create struct inside roam info + * @mac_ctx: Global MAC context + * @roam_info: roam info to be updated with ndi create params + * @roam_result: roam result to update + * @status_code: status code to update + * @reason_code: reason code to update + * @transaction_id: transcation id to update + * + * Return: None + */ +void csr_roam_fill_roaminfo_ndp(tpAniSirGlobal mac_ctx, + tCsrRoamInfo *roam_info, + eCsrRoamResult roam_result, + tSirResultCodes status_code, + uint32_t reason_code, + uint32_t transaction_id) +{ + struct ndi_create_rsp *rsp_params; + + sms_log(mac_ctx, LOG1, + FL("reason 0x%x, status 0x%x, transaction_id %d"), + reason_code, status_code, transaction_id); + rsp_params = (struct ndi_create_rsp *) + &roam_info->ndp.ndi_create_params; + rsp_params->reason = reason_code; + rsp_params->status = status_code; + rsp_params->transaction_id = transaction_id; +} +/** + * csr_roam_save_ndi_connected_info() - Save connected profile parameters + * @mac_ctx: Global MAC context + * @session_id: Session ID + * @roam_profile: Profile given for starting BSS + * @bssdesc: BSS description from tSirSmeStartBssRsp response + * + * Saves NDI profile parameters into session's connected profile. + * + * Return: None + */ +void csr_roam_save_ndi_connected_info(tpAniSirGlobal mac_ctx, + uint32_t session_id, + tCsrRoamProfile *roam_profile, + tSirBssDescription *bssdesc) +{ + tCsrRoamSession *roam_session = NULL; + tCsrRoamConnectedProfile *connect_profile = NULL; + + roam_session = CSR_GET_SESSION(mac_ctx, session_id); + if (NULL == roam_session) { + QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_ERROR, + FL("session %d not found"), session_id); + return; + } + + connect_profile = &roam_session->connectedProfile; + qdf_mem_set(&roam_session->connectedProfile, + sizeof(connect_profile), 0); + connect_profile->AuthType = roam_profile->negotiatedAuthType; + connect_profile->AuthInfo = roam_profile->AuthType; + connect_profile->CBMode = roam_profile->CBMode; + connect_profile->EncryptionType = + roam_profile->negotiatedUCEncryptionType; + connect_profile->EncryptionInfo = roam_profile->EncryptionType; + connect_profile->mcEncryptionType = + roam_profile->negotiatedMCEncryptionType; + connect_profile->mcEncryptionInfo = + roam_profile->mcEncryptionType; + connect_profile->BSSType = roam_profile->BSSType; + connect_profile->modifyProfileFields.uapsd_mask = + roam_profile->uapsd_mask; + connect_profile->operationChannel = bssdesc->channelId; + connect_profile->beaconInterval = 0; + qdf_mem_copy(&connect_profile->Keys, &roam_profile->Keys, + sizeof(roam_profile->Keys)); + csr_get_bss_id_bss_desc(mac_ctx, bssdesc, &connect_profile->bssid); + connect_profile->SSID.length = 0; + csr_free_connect_bss_desc(mac_ctx, session_id); + connect_profile->qap = false; + connect_profile->qosConnection = false; +} + +/** + * csr_roam_update_ndp_return_params() - updates ndp return parameters + * @mac_ctx: MAC context handle + * @result: result of the roaming command + * @roam_status: roam status returned to the roam command initiator + * @roam_result: roam result returned to the roam command initiator + * + * Results: None + */ +void csr_roam_update_ndp_return_params(tpAniSirGlobal mac_ctx, + uint32_t result, + uint32_t *roam_status, + uint32_t *roam_result) +{ + switch (result) { + case eCsrStartBssSuccess: + case eCsrStartBssFailure: + *roam_status = eCSR_ROAM_NDP_STATUS_UPDATE; + *roam_result = eCSR_ROAM_RESULT_NDP_CREATE_RSP; + break; + default: + sms_log(mac_ctx, LOGE, + FL("Invalid CSR Roam result code: %d"), result); + break; + } +} diff --git a/core/wma/inc/wma.h b/core/wma/inc/wma.h index 4ca072065126..8bfd9dc5257d 100644 --- a/core/wma/inc/wma.h +++ b/core/wma/inc/wma.h @@ -48,6 +48,7 @@ #include "lim_types.h" #include "wmi_unified_api.h" #include "cdp_txrx_cmn.h" +#include "ol_defines.h" /* Platform specific configuration for max. no. of fragments */ #define QCA_OL_11AC_TX_MAX_FRAGS 2 diff --git a/core/wma/inc/wma_internal.h b/core/wma/inc/wma_internal.h index a62a99cf6127..6845bfda8242 100644 --- a/core/wma/inc/wma_internal.h +++ b/core/wma/inc/wma_internal.h @@ -28,6 +28,10 @@ #ifndef WMA_INTERNAL_H #define WMA_INTERNAL_H +#if !defined(REMOVE_PKT_LOG) +#include "pktlog_ac.h" +#endif + /* ################### defines ################### */ /* * TODO: Following constant should be shared by firwmare in diff --git a/core/wma/src/wma_dev_if.c b/core/wma/src/wma_dev_if.c index a588abab4837..5bef474df70d 100644 --- a/core/wma/src/wma_dev_if.c +++ b/core/wma/src/wma_dev_if.c @@ -76,6 +76,7 @@ #include "cds_concurrency.h" +#include "wma_nan_datapath.h" /** * wma_find_vdev_by_addr() - find vdev_id from mac address @@ -210,6 +211,9 @@ enum wlan_op_mode wma_get_txrx_vdev_type(uint32_t type) case WMI_VDEV_TYPE_MONITOR: vdev_type = wlan_op_mode_monitor; break; + case WMI_VDEV_TYPE_NDI: + vdev_type = wlan_op_mode_ndi; + break; default: WMA_LOGE("Invalid vdev type %u", type); vdev_type = wlan_op_mode_unknown; @@ -1584,7 +1588,8 @@ ol_txrx_vdev_handle wma_vdev_attach(tp_wma_handle wma_handle, if (((self_sta_req->type == WMI_VDEV_TYPE_AP) && (self_sta_req->sub_type == WMI_UNIFIED_VDEV_SUBTYPE_P2P_DEVICE)) || (self_sta_req->type == WMI_VDEV_TYPE_OCB) || - (self_sta_req->type == WMI_VDEV_TYPE_MONITOR)) { + (self_sta_req->type == WMI_VDEV_TYPE_MONITOR) || + (self_sta_req->type == WMI_VDEV_TYPE_NDI)) { WMA_LOGA("Creating self peer %pM, vdev_id %hu", self_sta_req->self_mac_addr, self_sta_req->session_id); status = wma_create_peer(wma_handle, txrx_pdev, @@ -3286,6 +3291,10 @@ void wma_add_bss(tp_wma_handle wma, tpAddBssParams params) break; #endif + case QDF_NDI_MODE: + wma_add_bss_ndi_mode(wma, params); + break; + default: wma_add_bss_sta_mode(wma, params); break; diff --git a/core/wma/src/wma_nan_datapath.c b/core/wma/src/wma_nan_datapath.c index 4a2d98425d75..e3105dbe56ea 100644 --- a/core/wma/src/wma_nan_datapath.c +++ b/core/wma/src/wma_nan_datapath.c @@ -24,8 +24,12 @@ * WMA NAN Data path API implementation */ +#include "wma.h" +#include "wma_api.h" +#include "wmi_unified_api.h" +#include "wmi_unified.h" #include "wma_nan_datapath.h" - +#include "wma_internal.h" /** * wma_handle_ndp_initiator_req() - NDP initiator request handler @@ -162,3 +166,90 @@ QDF_STATUS wma_ndp_sched_update_rsp_event_handler(void *handle, { return QDF_STATUS_SUCCESS; } + +/** + * wma_add_bss_ndi_mode() - Process BSS creation request while adding NaN + * Data interface + * @wma: wma handle + * @add_bss: Parameters for ADD_BSS command + * + * Sends VDEV_START command to firmware + * Return: None + */ +void wma_add_bss_ndi_mode(tp_wma_handle wma, tpAddBssParams add_bss) +{ + ol_txrx_pdev_handle pdev; + struct wma_vdev_start_req req; + ol_txrx_peer_handle peer = NULL; + struct wma_target_req *msg; + u_int8_t vdev_id, peer_id; + QDF_STATUS status; + struct vdev_set_params param = {0}; + + WMA_LOGI("%s: enter", __func__); + if (NULL == wma_find_vdev_by_addr(wma, add_bss->bssId, &vdev_id)) { + WMA_LOGE("%s: Failed to find vdev", __func__); + goto send_fail_resp; + } + pdev = cds_get_context(QDF_MODULE_ID_TXRX); + + if (pdev) { + WMA_LOGE("%s: Failed to get pdev", __func__); + goto send_fail_resp; + } + + wma_set_bss_rate_flags(&wma->interfaces[vdev_id], add_bss); + + peer = ol_txrx_find_peer_by_addr(pdev, add_bss->selfMacAddr, &peer_id); + if (!peer) { + WMA_LOGE("%s Failed to find peer %pM", __func__, + add_bss->selfMacAddr); + goto send_fail_resp; + } + + msg = wma_fill_vdev_req(wma, vdev_id, WMA_ADD_BSS_REQ, + WMA_TARGET_REQ_TYPE_VDEV_START, add_bss, + WMA_VDEV_START_REQUEST_TIMEOUT); + if (!msg) { + WMA_LOGE("%s Failed to allocate vdev request vdev_id %d", + __func__, vdev_id); + goto send_fail_resp; + } + + add_bss->staContext.staIdx = ol_txrx_local_peer_id(peer); + + /* + * beacon_intval, dtim_period, hidden_ssid, is_dfs, ssid + * will be ignored for NDI device. + */ + qdf_mem_zero(&req, sizeof(req)); + req.vdev_id = vdev_id; + req.chan = add_bss->currentOperChannel; + req.ch_center_freq_seg0 = add_bss->ch_center_freq_seg0; + req.ch_center_freq_seg1 = add_bss->ch_center_freq_seg1; + req.vht_capable = add_bss->vhtCapable; + req.max_txpow = add_bss->maxTxPower; + req.oper_mode = add_bss->operMode; + + status = wma_vdev_start(wma, &req, false); + if (status != QDF_STATUS_SUCCESS) { + wma_remove_vdev_req(wma, vdev_id, + WMA_TARGET_REQ_TYPE_VDEV_START); + goto send_fail_resp; + } + WMA_LOGI("%s: vdev start request for NDI sent to target", __func__); + + /* Initialize protection mode to no protection */ + param.if_id = vdev_id; + param.param_id = WMI_VDEV_PARAM_PROTECTION_MODE; + param.param_value = WMI_VDEV_PARAM_PROTECTION_MODE; + if (wmi_unified_vdev_set_param_send(wma->wmi_handle, ¶m)) + WMA_LOGE("Failed to initialize protection mode"); + + + return; +send_fail_resp: + add_bss->status = QDF_STATUS_E_FAILURE; + wma_send_msg(wma, WMA_ADD_BSS_RSP, (void *)add_bss, 0); +} + diff --git a/core/wma/src/wma_nan_datapath.h b/core/wma/src/wma_nan_datapath.h index 7623e43c2538..8e86117d4269 100644 --- a/core/wma/src/wma_nan_datapath.h +++ b/core/wma/src/wma_nan_datapath.h @@ -32,6 +32,8 @@ #ifdef WLAN_FEATURE_NAN_DATAPATH +void wma_add_bss_ndi_mode(tp_wma_handle wma, tpAddBssParams add_bss); + /** * wma_update_hdd_cfg_ndp() - Update target device NAN datapath capability * @wma_handle: pointer to WMA context @@ -51,6 +53,11 @@ static inline void wma_update_hdd_cfg_ndp(tp_wma_handle wma_handle, { return; } +static inline void wma_add_bss_ndi_mode(tp_wma_handle wma, + tpAddBssParams add_bss) +{ + return; +} #endif /* WLAN_FEATURE_NAN_DATAPATH */ -- cgit v1.2.3