diff --git a/core/hdd/inc/wlan_hdd_tdls.h b/core/hdd/inc/wlan_hdd_tdls.h index a8f13d7d8ecf..2acb1e3de826 100644 --- a/core/hdd/inc/wlan_hdd_tdls.h +++ b/core/hdd/inc/wlan_hdd_tdls.h @@ -494,66 +494,27 @@ void wlan_hdd_tdls_exit(struct hdd_adapter *pAdapter); void wlan_hdd_tdls_extract_sa(struct sk_buff *skb, uint8_t *mac); -int wlan_hdd_tdls_set_sta_id(struct hdd_adapter *pAdapter, const uint8_t *mac, - uint8_t staId); - hddTdlsPeer_t *wlan_hdd_tdls_find_peer(struct hdd_adapter *pAdapter, const uint8_t *mac); hddTdlsPeer_t *wlan_hdd_tdls_find_all_peer(struct hdd_context *hdd_ctx, const uint8_t *mac); -int wlan_hdd_tdls_get_link_establish_params(struct hdd_adapter *pAdapter, - const uint8_t *mac, - tCsrTdlsLinkEstablishParams * - tdlsLinkEstablishParams); hddTdlsPeer_t *wlan_hdd_tdls_get_peer(struct hdd_adapter *pAdapter, const uint8_t *mac); -int wlan_hdd_tdls_set_cap(struct hdd_adapter *pAdapter, const uint8_t *mac, - enum tdls_cap_type cap); - void wlan_hdd_tdls_set_peer_link_status(hddTdlsPeer_t *curr_peer, enum tdls_link_status status, enum tdls_link_reason reason); -void wlan_hdd_tdls_set_link_status(struct hdd_adapter *pAdapter, - const uint8_t *mac, - enum tdls_link_status linkStatus, - enum tdls_link_reason reason); - -int wlan_hdd_tdls_recv_discovery_resp(struct hdd_adapter *pAdapter, - const uint8_t *mac); - -int wlan_hdd_tdls_set_peer_caps(struct hdd_adapter *pAdapter, - const uint8_t *mac, - tCsrStaParams *StaParams, - bool isBufSta, bool isOffChannelSupported, - bool is_qos_wmm_sta); - -int wlan_hdd_tdls_set_rssi(struct hdd_adapter *pAdapter, const uint8_t *mac, - int8_t rxRssi); - -int wlan_hdd_tdls_set_responder(struct hdd_adapter *pAdapter, - const uint8_t *mac, - uint8_t responder); - -int wlan_hdd_tdls_set_signature(struct hdd_adapter *pAdapter, - const uint8_t *mac, - uint8_t uSignature); int wlan_hdd_tdls_set_params(struct net_device *dev, tdls_config_params_t *config); -int wlan_hdd_tdls_reset_peer(struct hdd_adapter *pAdapter, const uint8_t *mac); - uint16_t wlan_hdd_tdls_connected_peers(struct hdd_adapter *pAdapter); int wlan_hdd_tdls_get_all_peers(struct hdd_adapter *pAdapter, char *buf, int buflen); -void wlan_hdd_tdls_mgmt_completion_callback(struct hdd_adapter *pAdapter, - uint32_t statusCode); - void wlan_hdd_tdls_increment_peer_count(struct hdd_adapter *pAdapter); void wlan_hdd_tdls_decrement_peer_count(struct hdd_adapter *pAdapter); @@ -601,10 +562,6 @@ void wlan_hdd_tdls_get_wifi_hal_state(hddTdlsPeer_t *curr_peer, int wlan_hdd_set_callback(hddTdlsPeer_t *curr_peer, cfg80211_exttdls_callback callback); -int wlan_hdd_tdls_add_station(struct wiphy *wiphy, - struct net_device *dev, const uint8_t *mac, - bool update, tCsrStaParams *StaParams); - int wlan_hdd_cfg80211_exttdls_enable(struct wiphy *wiphy, struct wireless_dev *wdev, const void *data, diff --git a/core/hdd/src/wlan_hdd_assoc.c b/core/hdd/src/wlan_hdd_assoc.c index f520dfa90196..9b4e291f5abe 100644 --- a/core/hdd/src/wlan_hdd_assoc.c +++ b/core/hdd/src/wlan_hdd_assoc.c @@ -3818,9 +3818,7 @@ hdd_roam_tdls_status_update_handler(struct hdd_adapter *pAdapter, { struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(pAdapter); tdlsCtx_t *pHddTdlsCtx; - tSmeTdlsPeerStateParams smeTdlsPeerStateParams; QDF_STATUS status = QDF_STATUS_E_FAILURE; - uint8_t staIdx; hddTdlsPeer_t *curr_peer; uint32_t reason; @@ -3847,267 +3845,6 @@ hdd_roam_tdls_status_update_handler(struct hdd_adapter *pAdapter, MAC_ADDR_ARRAY(pRoamInfo->peerMac.bytes)); switch (roamResult) { - case eCSR_ROAM_RESULT_ADD_TDLS_PEER: - { - if (eSIR_SME_SUCCESS != pRoamInfo->statusCode) { - hdd_err("Add Sta failed. status code: %d", - pRoamInfo->statusCode); - pAdapter->tdlsAddStaStatus = QDF_STATUS_E_FAILURE; - } else { - /* - * Check if there is available index for this new TDLS - * STA. - */ - for (staIdx = 0; - staIdx < hdd_ctx->max_num_tdls_sta; - staIdx++) { - if (0 == - hdd_ctx->tdlsConnInfo[staIdx]. - staId) { - hdd_ctx->tdlsConnInfo[staIdx]. - sessionId = - pRoamInfo->sessionId; - hdd_ctx->tdlsConnInfo[staIdx]. - staId = pRoamInfo->staId; - - hdd_debug("TDLS: STA IDX at %d is %d " - "of mac " - MAC_ADDRESS_STR, - staIdx, - hdd_ctx-> - tdlsConnInfo[staIdx]. - staId, - MAC_ADDR_ARRAY - (pRoamInfo->peerMac.bytes)); - - qdf_copy_macaddr(&hdd_ctx-> - tdlsConnInfo - [staIdx]. - peerMac, - &pRoamInfo-> - peerMac); - status = QDF_STATUS_SUCCESS; - break; - } - } - if (staIdx < hdd_ctx->max_num_tdls_sta) { - if (-1 == - wlan_hdd_tdls_set_sta_id(pAdapter, - pRoamInfo-> - peerMac.bytes, - pRoamInfo-> - staId)) { - hdd_err("wlan_hdd_tdls_set_sta_id() failed"); - return QDF_STATUS_E_FAILURE; - } - - (WLAN_HDD_GET_CTX(pAdapter))-> - sta_to_adapter[pRoamInfo->staId] = - pAdapter; - /* - * store the ucast signature, - * if required for further reference. - */ - - wlan_hdd_tdls_set_signature(pAdapter, - pRoamInfo-> - peerMac.bytes, - pRoamInfo-> - ucastSig); - } else { - status = QDF_STATUS_E_FAILURE; - hdd_debug("no available slot in conn_info. staId: %d cannot be stored", - pRoamInfo->staId); - } - pAdapter->tdlsAddStaStatus = status; - } - complete(&pAdapter->tdls_add_station_comp); - break; - } - case eCSR_ROAM_RESULT_UPDATE_TDLS_PEER: - { - if (eSIR_SME_SUCCESS != pRoamInfo->statusCode) { - hdd_err("Add Sta failed. status code: %d", - pRoamInfo->statusCode); - pAdapter->tdlsAddStaStatus = QDF_STATUS_E_FAILURE; - } else { - pAdapter->tdlsAddStaStatus = QDF_STATUS_SUCCESS; - } - complete(&pAdapter->tdls_add_station_comp); - break; - } - case eCSR_ROAM_RESULT_LINK_ESTABLISH_REQ_RSP: - { - if (eSIR_SME_SUCCESS != pRoamInfo->statusCode) { - hdd_err("Link Establish Request failed. status: %d", - pRoamInfo->statusCode); - } - complete(&pAdapter->tdls_link_establish_req_comp); - break; - } - case eCSR_ROAM_RESULT_DELETE_TDLS_PEER: - { - for (staIdx = 0; staIdx < hdd_ctx->max_num_tdls_sta; - staIdx++) { - if ((hdd_ctx->tdlsConnInfo[staIdx].sessionId == - pRoamInfo->sessionId) - && pRoamInfo->staId == - hdd_ctx->tdlsConnInfo[staIdx].staId) { - hdd_debug("HDD: del STA IDX = %x", - pRoamInfo->staId); - mutex_lock(&hdd_ctx->tdls_lock); - curr_peer = - wlan_hdd_tdls_find_peer(pAdapter, - pRoamInfo-> - peerMac.bytes); - if (NULL != curr_peer) { - hdd_debug("Current status for peer " MAC_ADDRESS_STR " is %d", - MAC_ADDR_ARRAY(pRoamInfo->peerMac.bytes), - curr_peer->link_status); - if (TDLS_IS_CONNECTED(curr_peer)) { - mutex_unlock(&hdd_ctx->tdls_lock); - hdd_roam_deregister_tdlssta - (pAdapter, - pRoamInfo->staId); - wlan_hdd_tdls_decrement_peer_count - (pAdapter); - } else if (eTDLS_LINK_CONNECTING == - curr_peer->link_status) { - mutex_unlock(&hdd_ctx->tdls_lock); - hdd_roam_deregister_tdlssta - (pAdapter, - pRoamInfo->staId); - } else - mutex_unlock(&hdd_ctx->tdls_lock); - } else - mutex_unlock(&hdd_ctx->tdls_lock); - - mutex_lock(&hdd_ctx->tdls_lock); - wlan_hdd_tdls_reset_peer(pAdapter, - pRoamInfo-> - peerMac.bytes); - mutex_unlock(&hdd_ctx->tdls_lock); - - hdd_ctx->tdlsConnInfo[staIdx].staId = 0; - hdd_ctx->tdlsConnInfo[staIdx]. - sessionId = 255; - qdf_mem_zero(&hdd_ctx-> - tdlsConnInfo[staIdx]. - peerMac, - QDF_MAC_ADDR_SIZE); - status = QDF_STATUS_SUCCESS; - break; - } - } - complete(&pAdapter->tdls_del_station_comp); - } - break; - case eCSR_ROAM_RESULT_TEARDOWN_TDLS_PEER_IND: - { - hdd_debug("Sending teardown to supplicant with reason code %u", - pRoamInfo->reasonCode); - - mutex_lock(&hdd_ctx->tdls_lock); - curr_peer = - wlan_hdd_tdls_find_peer(pAdapter, - pRoamInfo->peerMac.bytes); - - if (!curr_peer) { - mutex_unlock(&hdd_ctx->tdls_lock); - hdd_debug("peer doesn't exists"); - status = QDF_STATUS_SUCCESS; - break; - } - - wlan_hdd_tdls_indicate_teardown(pAdapter, curr_peer, - pRoamInfo->reasonCode); - hdd_send_wlan_tdls_teardown_event(eTDLS_TEARDOWN_BSS_DISCONNECT, - curr_peer->peerMac); - mutex_unlock(&hdd_ctx->tdls_lock); - status = QDF_STATUS_SUCCESS; - break; - } - case eCSR_ROAM_RESULT_DELETE_ALL_TDLS_PEER_IND: - { - /* 0 staIdx is assigned to AP we dont want to touch that */ - for (staIdx = 0; staIdx < hdd_ctx->max_num_tdls_sta; - staIdx++) { - if ((hdd_ctx->tdlsConnInfo[staIdx].sessionId == - pRoamInfo->sessionId) - && hdd_ctx->tdlsConnInfo[staIdx].staId) { - hdd_debug("hdd_tdlsStatusUpdate: staIdx %d " - MAC_ADDRESS_STR, - hdd_ctx->tdlsConnInfo[staIdx]. - staId, - MAC_ADDR_ARRAY(hdd_ctx-> - tdlsConnInfo - [staIdx]. - peerMac. - bytes)); - mutex_lock(&hdd_ctx->tdls_lock); - wlan_hdd_tdls_reset_peer(pAdapter, - hdd_ctx-> - tdlsConnInfo - [staIdx]. - peerMac.bytes); - mutex_unlock(&hdd_ctx->tdls_lock); - hdd_roam_deregister_tdlssta(pAdapter, - hdd_ctx-> - tdlsConnInfo - [staIdx]. - staId); - qdf_mem_zero(&smeTdlsPeerStateParams, - sizeof - (smeTdlsPeerStateParams)); - smeTdlsPeerStateParams.vdevId = - hdd_ctx->tdlsConnInfo[staIdx]. - sessionId; - qdf_mem_copy(&smeTdlsPeerStateParams. - peerMacAddr, - &hdd_ctx-> - tdlsConnInfo[staIdx]. - peerMac.bytes, - QDF_MAC_ADDR_SIZE); - smeTdlsPeerStateParams.peerState = - eSME_TDLS_PEER_STATE_TEARDOWN; - - hdd_debug("calling sme_update_tdls_peer_state for staIdx %d " - MAC_ADDRESS_STR, - hdd_ctx->tdlsConnInfo[staIdx]. - staId, - MAC_ADDR_ARRAY(hdd_ctx-> - tdlsConnInfo - [staIdx]. - peerMac. - bytes)); - status = - sme_update_tdls_peer_state( - hdd_ctx->hHal, - &smeTdlsPeerStateParams); - if (QDF_STATUS_SUCCESS != status) { - hdd_err("sme_update_tdls_peer_state failed for " - MAC_ADDRESS_STR, - MAC_ADDR_ARRAY - (hdd_ctx-> - tdlsConnInfo[staIdx]. - peerMac.bytes)); - } - wlan_hdd_tdls_decrement_peer_count - (pAdapter); - - qdf_mem_zero(&hdd_ctx-> - tdlsConnInfo[staIdx]. - peerMac, - QDF_MAC_ADDR_SIZE); - hdd_ctx->tdlsConnInfo[staIdx].staId = 0; - hdd_ctx->tdlsConnInfo[staIdx]. - sessionId = 255; - - status = QDF_STATUS_SUCCESS; - } - } - break; - } case eCSR_ROAM_RESULT_TDLS_SHOULD_DISCOVER: { /* ignore TDLS_SHOULD_DISCOVER if any concurrency detected */ @@ -5127,10 +4864,6 @@ hdd_sme_roam_callback(void *pContext, tCsrRoamInfo *pRoamInfo, uint32_t roamId, roamStatus, roamResult); break; - case eCSR_ROAM_RESULT_MGMT_TX_COMPLETE_IND: - wlan_hdd_tdls_mgmt_completion_callback(pAdapter, - pRoamInfo->reasonCode); - break; #endif #ifdef WLAN_FEATURE_11W case eCSR_ROAM_UNPROT_MGMT_FRAME_IND: diff --git a/core/hdd/src/wlan_hdd_cfg80211.c b/core/hdd/src/wlan_hdd_cfg80211.c index c3503010d567..113f46602d15 100644 --- a/core/hdd/src/wlan_hdd_cfg80211.c +++ b/core/hdd/src/wlan_hdd_cfg80211.c @@ -12915,8 +12915,6 @@ void wlan_hdd_cfg80211_update_wiphy_caps(struct wiphy *wiphy) } /* This function registers for all frame which supplicant is interested in */ -#if defined(CONVERGED_P2P_ENABLE) || defined(CONVERGED_TDLS_ENABLE) - int wlan_hdd_cfg80211_register_frames(struct hdd_adapter *pAdapter) { tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(pAdapter); @@ -13024,67 +13022,6 @@ dereg_gas_initial_req: ret_status: return qdf_status_to_os_return(status); } -#else -int wlan_hdd_cfg80211_register_frames(struct hdd_adapter *pAdapter) -{ - tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(pAdapter); - /* Register for all P2P action, public action etc frames */ - uint16_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); - - /* Register for p2p ack indication */ - sme_register_p2p_ack_ind_callback(hHal, hdd_send_action_cnf_cb); - - /* 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 - * frame register ops, we will move this code as a part of that - */ - - /* GAS Initial Request */ - sme_register_mgmt_frame(hHal, SME_SESSION_ID_ANY, type, - (uint8_t *) GAS_INITIAL_REQ, - GAS_INITIAL_REQ_SIZE); - - /* GAS Initial Response */ - sme_register_mgmt_frame(hHal, SME_SESSION_ID_ANY, type, - (uint8_t *) GAS_INITIAL_RSP, - GAS_INITIAL_RSP_SIZE); - - /* GAS Comeback Request */ - sme_register_mgmt_frame(hHal, SME_SESSION_ID_ANY, type, - (uint8_t *) GAS_COMEBACK_REQ, - GAS_COMEBACK_REQ_SIZE); - - /* GAS Comeback Response */ - sme_register_mgmt_frame(hHal, SME_SESSION_ID_ANY, type, - (uint8_t *) GAS_COMEBACK_RSP, - GAS_COMEBACK_RSP_SIZE); - - /* P2P Public Action */ - sme_register_mgmt_frame(hHal, SME_SESSION_ID_ANY, type, - (uint8_t *) P2P_PUBLIC_ACTION_FRAME, - P2P_PUBLIC_ACTION_FRAME_SIZE); - - /* P2P Action */ - sme_register_mgmt_frame(hHal, SME_SESSION_ID_ANY, type, - (uint8_t *) P2P_ACTION_FRAME, - P2P_ACTION_FRAME_SIZE); - - /* WNM BSS Transition Request frame */ - sme_register_mgmt_frame(hHal, SME_SESSION_ID_ANY, type, - (uint8_t *) WNM_BSS_ACTION_FRAME, - WNM_BSS_ACTION_FRAME_SIZE); - - /* WNM-Notification */ - sme_register_mgmt_frame(hHal, pAdapter->sessionId, type, - (uint8_t *) WNM_NOTIFICATION_FRAME, - WNM_NOTIFICATION_FRAME_SIZE); -} -#endif void wlan_hdd_cfg80211_deregister_frames(struct hdd_adapter *pAdapter) { @@ -13692,20 +13629,6 @@ static int wlan_hdd_cfg80211_change_iface(struct wiphy *wiphy, } #endif /* KERNEL_VERSION(4, 12, 0) */ -#if defined(FEATURE_WLAN_TDLS) && !defined(CONVERGED_TDLS_ENABLE) -static bool wlan_hdd_is_duplicate_channel(uint8_t *arr, - int index, uint8_t match) -{ - int i; - - for (i = 0; i < index; i++) { - if (arr[i] == match) - return true; - } - return false; -} -#endif - /** * __wlan_hdd_change_station() - change station * @wiphy: Pointer to the wiphy structure @@ -13732,12 +13655,6 @@ static int __wlan_hdd_change_station(struct wiphy *wiphy, struct hdd_context *hdd_ctx; struct hdd_station_ctx *pHddStaCtx; struct qdf_mac_addr STAMacAddress; -#if defined(FEATURE_WLAN_TDLS) && !defined(CONVERGED_TDLS_ENABLE) - tCsrStaParams StaParams = { 0 }; - uint8_t isBufSta = 0; - uint8_t isOffChannelSupported = 0; - bool is_qos_wmm_sta = false; -#endif int ret; ENTER(); @@ -13781,202 +13698,9 @@ static int __wlan_hdd_change_station(struct wiphy *wiphy, } else if ((pAdapter->device_mode == QDF_STA_MODE) || (pAdapter->device_mode == QDF_P2P_CLIENT_MODE)) { if (params->sta_flags_set & BIT(NL80211_STA_FLAG_TDLS_PEER)) { -#if defined(FEATURE_WLAN_TDLS) && defined(CONVERGED_TDLS_ENABLE) +#if defined(FEATURE_WLAN_TDLS) ret = wlan_cfg80211_tdls_update_peer(hdd_ctx->hdd_pdev, dev, mac, params); -#else - - if (cds_is_sub_20_mhz_enabled()) { - hdd_err("TDLS not allowed with sub 20 MHz"); - return -EINVAL; - } - - StaParams.capability = params->capability; - StaParams.uapsd_queues = params->uapsd_queues; - StaParams.max_sp = params->max_sp; - - /* Convert (first channel , number of channels) tuple to - * the total list of channels. This goes with the assumption - * that if the first channel is < 14, then the next channels - * are an incremental of 1 else an incremental of 4 till the number - * of channels. - */ - hdd_debug("params->supported_channels_len: %d", params->supported_channels_len); - if (0 != params->supported_channels_len) { - int i = 0, j = 0, k = 0, no_of_channels = 0; - int num_unique_channels; - int next; - - for (i = 0; - i < params->supported_channels_len - && j < SIR_MAC_MAX_SUPP_CHANNELS; i += 2) { - int wifi_chan_index; - - if (!wlan_hdd_is_duplicate_channel - (StaParams.supported_channels, j, - params->supported_channels[i])) { - StaParams. - supported_channels[j] = - params-> - supported_channels[i]; - } else { - continue; - } - wifi_chan_index = - ((StaParams.supported_channels[j] <= - HDD_CHANNEL_14) ? 1 : 4); - no_of_channels = - params->supported_channels[i + 1]; - - hdd_debug("i: %d, j: %d, k: %d, StaParams.supported_channels[%d]: %d, wifi_chan_index: %d, no_of_channels: %d", i, j, k, j, - StaParams. - supported_channels[j], - wifi_chan_index, - no_of_channels); - for (k = 1; k <= no_of_channels && - j < SIR_MAC_MAX_SUPP_CHANNELS - 1; - k++) { - next = - StaParams. - supported_channels[j] + - wifi_chan_index; - if (!wlan_hdd_is_duplicate_channel(StaParams.supported_channels, j + 1, next)) { - StaParams. - supported_channels[j - + - 1] - = next; - } else { - continue; - } - hdd_debug("i: %d, j: %d, k: %d, StaParams.supported_channels[%d]: %d", i, j, k, - j + 1, - StaParams. - supported_channels[j + - 1]); - j += 1; - } - } - num_unique_channels = j + 1; - hdd_debug("Unique Channel List"); - for (i = 0; i < num_unique_channels; i++) { - hdd_debug("StaParams.supported_channels[%d]: %d,", i, - StaParams. - supported_channels[i]); - } - if (MAX_CHANNEL < num_unique_channels) - num_unique_channels = MAX_CHANNEL; - StaParams.supported_channels_len = - num_unique_channels; - hdd_debug("After removing duplcates StaParams.supported_channels_len: %d", - StaParams.supported_channels_len); - } - if (params->supported_oper_classes_len > - CDS_MAX_SUPP_OPER_CLASSES) { - hdd_debug("rcvd oper classes:%d, rst to max %d", - params->supported_oper_classes_len, - CDS_MAX_SUPP_OPER_CLASSES); - params->supported_oper_classes_len = - CDS_MAX_SUPP_OPER_CLASSES; - } - qdf_mem_copy(StaParams.supported_oper_classes, - params->supported_oper_classes, - params->supported_oper_classes_len); - StaParams.supported_oper_classes_len = - params->supported_oper_classes_len; - - if (params->ext_capab_len > - sizeof(StaParams.extn_capability)) { - hdd_debug("received extn capabilities:%d, resetting it to max supported", - params->ext_capab_len); - params->ext_capab_len = - sizeof(StaParams.extn_capability); - } - if (0 != params->ext_capab_len) - qdf_mem_copy(StaParams.extn_capability, - params->ext_capab, - params->ext_capab_len); - - if (NULL != params->ht_capa) { - StaParams.htcap_present = 1; - qdf_mem_copy(&StaParams.HTCap, params->ht_capa, - sizeof(tSirHTCap)); - } - - StaParams.supported_rates_len = - params->supported_rates_len; - - /* Note : The Maximum sizeof supported_rates sent by the Supplicant is 32. - * The supported_rates array , for all the structures propogating till Add Sta - * to the firmware has to be modified , if the supplicant (ieee80211) is - * modified to send more rates. - */ - - /* To avoid Data Currption , set to max length to SIR_MAC_MAX_SUPP_RATES - */ - if (StaParams.supported_rates_len > - SIR_MAC_MAX_SUPP_RATES) - StaParams.supported_rates_len = - SIR_MAC_MAX_SUPP_RATES; - - if (0 != StaParams.supported_rates_len) { - int i = 0; - - qdf_mem_copy(StaParams.supported_rates, - params->supported_rates, - StaParams.supported_rates_len); - hdd_debug("Supported Rates with Length %d", - StaParams.supported_rates_len); - for (i = 0; i < StaParams.supported_rates_len; - i++) - hdd_debug("[%d]: %0x", i, - StaParams.supported_rates[i]); - } - - if (NULL != params->vht_capa) { - StaParams.vhtcap_present = 1; - qdf_mem_copy(&StaParams.VHTCap, - params->vht_capa, - sizeof(tSirVHTCap)); - } - - if (0 != params->ext_capab_len) { - /*Define A Macro : TODO Sunil */ - if ((1 << 4) & StaParams.extn_capability[3]) - isBufSta = 1; - - /* TDLS Channel Switching Support */ - if ((1 << 6) & StaParams.extn_capability[3]) - isOffChannelSupported = 1; - } - - if (hdd_ctx->config->fEnableTDLSWmmMode && - (params->ht_capa || params->vht_capa || - (params->sta_flags_set & BIT(NL80211_STA_FLAG_WME)))) - is_qos_wmm_sta = true; - - hdd_debug("%s: TDLS Peer is QOS capable" - " is_qos_wmm_sta= %d HTcapPresent = %d", - __func__, is_qos_wmm_sta, - StaParams.htcap_present); - - status = wlan_hdd_tdls_set_peer_caps(pAdapter, mac, - &StaParams, - isBufSta, - isOffChannelSupported, - is_qos_wmm_sta); - if (QDF_STATUS_SUCCESS != status) { - hdd_err("wlan_hdd_tdls_set_peer_caps failed!"); - return -EINVAL; - } - - status = - wlan_hdd_tdls_add_station(wiphy, dev, mac, 1, - &StaParams); - if (QDF_STATUS_SUCCESS != status) { - hdd_err("wlan_hdd_tdls_add_station failed!"); - return -EINVAL; - } #endif } } @@ -17261,11 +16985,9 @@ static int __wlan_hdd_cfg80211_disconnect(struct wiphy *wiphy, { struct hdd_adapter *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); int status; - struct hdd_station_ctx *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); + struct hdd_station_ctx *pHddStaCtx = + WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(pAdapter); -#ifdef FEATURE_WLAN_TDLS - uint8_t staIdx; -#endif ENTER(); @@ -17340,23 +17062,7 @@ static int __wlan_hdd_cfg80211_disconnect(struct wiphy *wiphy, wlan_hdd_cleanup_remain_on_channel_ctx(pAdapter); #ifdef FEATURE_WLAN_TDLS /* First clean up the tdls peers if any */ - for (staIdx = 0; staIdx < hdd_ctx->max_num_tdls_sta; staIdx++) { - if ((hdd_ctx->tdlsConnInfo[staIdx].sessionId == - pAdapter->sessionId) - && (hdd_ctx->tdlsConnInfo[staIdx].staId)) { - uint8_t *mac; - mac = - hdd_ctx->tdlsConnInfo[staIdx].peerMac.bytes; - hdd_debug("call sme_delete_tdls_peer_sta staId %d sessionId %d " - MAC_ADDRESS_STR, - hdd_ctx->tdlsConnInfo[staIdx].staId, - pAdapter->sessionId, - MAC_ADDR_ARRAY(mac)); - sme_delete_tdls_peer_sta(WLAN_HDD_GET_HAL_CTX - (pAdapter), - pAdapter->sessionId, mac); - } - } + /* TDLS-TODO */ hdd_notify_sta_disconnect(pAdapter->sessionId, true, pAdapter->hdd_vdev); #endif @@ -18312,15 +18018,9 @@ static int __wlan_hdd_cfg80211_add_station(struct wiphy *wiphy, MAC_ADDR_ARRAY(mac)); if (mask & BIT(NL80211_STA_FLAG_TDLS_PEER)) { - if (set & BIT(NL80211_STA_FLAG_TDLS_PEER)) { -#if defined(CONVERGED_TDLS_ENABLE) + if (set & BIT(NL80211_STA_FLAG_TDLS_PEER)) status = wlan_cfg80211_tdls_add_peer(hdd_ctx->hdd_pdev, dev, mac); -#else - status = - wlan_hdd_tdls_add_station(wiphy, dev, mac, 0, NULL); -#endif - } } #endif EXIT(); diff --git a/core/hdd/src/wlan_hdd_cfg80211.h b/core/hdd/src/wlan_hdd_cfg80211.h index 9e5af48476a0..7d5c11e77d48 100644 --- a/core/hdd/src/wlan_hdd_cfg80211.h +++ b/core/hdd/src/wlan_hdd_cfg80211.h @@ -36,9 +36,7 @@ #include #include -#ifdef CONVERGED_TDLS_ENABLE #include -#endif struct hdd_context; @@ -494,62 +492,6 @@ uint8_t hdd_get_sap_operating_band(struct hdd_context *hdd_ctx); */ int wlan_hdd_try_disconnect(struct hdd_adapter *adapter); -#ifndef CONVERGED_TDLS_ENABLE -static inline void -hdd_notify_sta_connect(uint8_t session_id, - bool tdls_chan_swit_prohibited, - bool tdls_prohibited, - struct wlan_objmgr_vdev *vdev) -{ -} - -static inline -void hdd_notify_sta_disconnect(uint8_t session_id, - bool lfr_roam, - struct wlan_objmgr_vdev *vdev) -{ - -} - -static inline -int wlan_cfg80211_tdls_configure_mode(struct wlan_objmgr_vdev *vdev, - uint32_t trigger_mode) -{ - return 0; -} - -static inline -void hdd_notify_teardown_tdls_links(struct wlan_objmgr_vdev *vdev) -{ - -} - -static inline -void ucfg_tdls_update_rx_pkt_cnt(struct wlan_objmgr_vdev *vdev, - struct qdf_mac_addr *mac_addr) -{ - -} - -static inline -void ucfg_tdls_update_tx_pkt_cnt(struct wlan_objmgr_vdev *vdev, - struct qdf_mac_addr *mac_addr) -{ - -} - -static inline -int wlan_cfg80211_tdls_mgmt(struct wlan_objmgr_pdev *pdev, - struct net_device *dev, const uint8_t *peer, - uint8_t action_code, uint8_t dialog_token, - uint16_t status_code, uint32_t peer_capability, - const uint8_t *buf, size_t len) -{ - return 0; -} - -#endif - /** * hdd_update_cca_info_cb() - stores congestion value in station context * @context : HDD context diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c index 564494194ca9..01ae31481a68 100644 --- a/core/hdd/src/wlan_hdd_main.c +++ b/core/hdd/src/wlan_hdd_main.c @@ -12022,7 +12022,6 @@ static int hdd_update_scan_config(struct hdd_context *hdd_ctx) return 0; } -#ifdef CONVERGED_TDLS_ENABLE static int hdd_update_tdls_config(struct hdd_context *hdd_ctx) { struct wlan_objmgr_psoc *psoc = hdd_ctx->hdd_psoc; @@ -12089,15 +12088,6 @@ static int hdd_update_tdls_config(struct hdd_context *hdd_ctx) return 0; } -#else -static int hdd_update_tdls_config(struct hdd_context *hdd_ctx) -{ - hdd_ctx->tdls_umac_comp_active = false; - /* disable napier specific tdls data path */ - hdd_ctx->tdls_nap_active = false; - return 0; -} -#endif int hdd_update_components_config(struct hdd_context *hdd_ctx) { diff --git a/core/hdd/src/wlan_hdd_object_manager.c b/core/hdd/src/wlan_hdd_object_manager.c index 9e976b6e3568..4b690a9eeb49 100644 --- a/core/hdd/src/wlan_hdd_object_manager.c +++ b/core/hdd/src/wlan_hdd_object_manager.c @@ -56,9 +56,7 @@ static void hdd_init_vdev_os_priv(struct hdd_adapter *adapter, { /* Initialize the vdev OS private structure*/ os_priv->wdev = adapter->dev->ieee80211_ptr; -#ifdef CONVERGED_TDLS_ENABLE wlan_cfg80211_tdls_priv_init(os_priv); -#endif } static void hdd_init_psoc_qdf_ctx(struct wlan_objmgr_psoc *psoc) @@ -222,9 +220,8 @@ int hdd_objmgr_destroy_vdev(struct hdd_adapter *adapter) osif_priv = wlan_vdev_get_ospriv(vdev); wlan_vdev_reset_ospriv(vdev); -#ifdef CONVERGED_TDLS_ENABLE wlan_cfg80211_tdls_priv_deinit(osif_priv); -#endif + qdf_mem_free(osif_priv); if (hdd_objmgr_remove_peer_object(vdev, diff --git a/core/hdd/src/wlan_hdd_p2p.c b/core/hdd/src/wlan_hdd_p2p.c index aeb64d08a7e6..40a59c927e3c 100644 --- a/core/hdd/src/wlan_hdd_p2p.c +++ b/core/hdd/src/wlan_hdd_p2p.c @@ -2775,26 +2775,6 @@ void __hdd_indicate_mgmt_frame(struct hdd_adapter *pAdapter, hdd_send_action_cnf(pAdapter, true); } } -#ifdef FEATURE_WLAN_TDLS - else if (pbFrames - [WLAN_HDD_PUBLIC_ACTION_FRAME_OFFSET + 1] == - WLAN_HDD_PUBLIC_ACTION_TDLS_DISC_RESP) { - u8 *mac = &pbFrames - [WLAN_HDD_80211_PEER_ADDR_OFFSET]; - - hdd_debug("[TDLS] TDLS Discovery Response," - MAC_ADDRESS_STR " RSSI[%d] <--- OTA", - MAC_ADDR_ARRAY(mac), rxRssi); - - wlan_hdd_tdls_set_rssi(pAdapter, mac, rxRssi); - wlan_hdd_tdls_recv_discovery_resp(pAdapter, - mac); - cds_tdls_tx_rx_mgmt_event(SIR_MAC_ACTION_TDLS, - SIR_MAC_ACTION_RX, SIR_MAC_MGMT_ACTION, - WLAN_HDD_PUBLIC_ACTION_TDLS_DISC_RESP, - &pbFrames[WLAN_HDD_80211_PEER_ADDR_OFFSET]); - } -#endif } if (pbFrames[WLAN_HDD_PUBLIC_ACTION_FRAME_OFFSET] == diff --git a/core/hdd/src/wlan_hdd_tdls.c b/core/hdd/src/wlan_hdd_tdls.c index cd5b85cbdd4d..f77eb20d1e99 100644 --- a/core/hdd/src/wlan_hdd_tdls.c +++ b/core/hdd/src/wlan_hdd_tdls.c @@ -775,42 +775,6 @@ hddTdlsPeer_t *wlan_hdd_tdls_get_peer(struct hdd_adapter *pAdapter, return peer; } -/** - * wlan_hdd_tdls_set_cap() - set TDLS capability type - * @pAdapter: HDD adapter - * @mac: peer mac address - * @cap: TDLS capability type - * - * Return: 0 if successful or negative errno otherwise - */ -int wlan_hdd_tdls_set_cap(struct hdd_adapter *pAdapter, const uint8_t *mac, - enum tdls_cap_type cap) -{ - hddTdlsPeer_t *curr_peer; - struct hdd_context *hdd_ctx; - int status = 0; - - hdd_ctx = WLAN_HDD_GET_CTX(pAdapter); - if (0 != (wlan_hdd_validate_context(hdd_ctx))) { - status = -EINVAL; - goto ret_status; - } - - mutex_lock(&hdd_ctx->tdls_lock); - curr_peer = wlan_hdd_tdls_get_peer(pAdapter, mac); - if (curr_peer == NULL) { - hdd_err("curr_peer is NULL"); - status = -EINVAL; - goto rel_lock; - } - - curr_peer->tdls_support = cap; -rel_lock: - mutex_unlock(&hdd_ctx->tdls_lock); -ret_status: - return status; -} - /** * wlan_hdd_tdls_set_peer_link_status() - set TDLS peer link status * @curr_peer: peer @@ -870,381 +834,6 @@ void wlan_hdd_tdls_set_peer_link_status(hddTdlsPeer_t *curr_peer, } } -/** - * wlan_hdd_tdls_set_link_status() - set TDLS peer link status - * @pAdapter: HDD adapter - * @mac: mac address of TDLS peer - * @linkStatus: status - * @reason: reason - * - * Return: Void - */ -void wlan_hdd_tdls_set_link_status(struct hdd_adapter *pAdapter, - const uint8_t *mac, - enum tdls_link_status linkStatus, - enum tdls_link_reason reason) -{ - uint32_t state = 0; - int32_t res = 0; - hddTdlsPeer_t *curr_peer; - struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(pAdapter); - - if (wlan_hdd_validate_context(hdd_ctx)) - return; - - curr_peer = wlan_hdd_tdls_find_peer(pAdapter, mac); - if (curr_peer == NULL) { - QDF_TRACE(QDF_MODULE_ID_HDD, QDF_TRACE_LEVEL_ERROR, - FL("curr_peer is NULL")); - return; - } - - curr_peer->link_status = linkStatus; - - /* If TDLS link status is already passed the discovery state - * then clear discovery attempt count - */ - if (linkStatus >= eTDLS_LINK_DISCOVERED) - curr_peer->discovery_attempt = 0; - - if (curr_peer->isForcedPeer && curr_peer->state_change_notification) { - uint32_t opclass; - uint32_t channel; - struct hdd_adapter *adapter = curr_peer->pHddTdlsCtx->pAdapter; - - curr_peer->reason = reason; - - wlan_hdd_tdls_determine_channel_opclass(hdd_ctx, adapter, - curr_peer, &channel, &opclass); - - wlan_hdd_tdls_get_wifi_hal_state(curr_peer, &state, &res); - (curr_peer->state_change_notification)(mac, opclass, channel, - state, res, adapter); - } -} - -/** - * wlan_hdd_tdls_recv_discovery_resp() - handling of tdls discovery response - * @pAdapter: HDD adapter - * @mac: mac address of peer from which the response was received - * - * Return: 0 for success or negative errno otherwise - */ -int wlan_hdd_tdls_recv_discovery_resp(struct hdd_adapter *pAdapter, - const uint8_t *mac) -{ - hddTdlsPeer_t *curr_peer; - tdlsCtx_t *pHddTdlsCtx; - struct hdd_context *hdd_ctx; - int status = 0; - - ENTER(); - - hdd_ctx = WLAN_HDD_GET_CTX(pAdapter); - - if (0 != (wlan_hdd_validate_context(hdd_ctx))) { - status = -EINVAL; - goto ret_status; - } - - mutex_lock(&hdd_ctx->tdls_lock); - - pHddTdlsCtx = WLAN_HDD_GET_TDLS_CTX_PTR(pAdapter); - if (NULL == pHddTdlsCtx) { - hdd_err("pHddTdlsCtx is NULL"); - status = -EINVAL; - goto rel_lock; - } - - curr_peer = wlan_hdd_tdls_get_peer(pAdapter, mac); - if (NULL == curr_peer) { - hdd_err("curr_peer is NULL"); - status = -EINVAL; - goto rel_lock; - } - - if (pHddTdlsCtx->discovery_sent_cnt) - pHddTdlsCtx->discovery_sent_cnt--; - - wlan_hdd_tdls_check_power_save_prohibited(pAdapter); - - if (0 == pHddTdlsCtx->discovery_sent_cnt) - qdf_mc_timer_stop(&pHddTdlsCtx->peerDiscoveryTimeoutTimer); - - hdd_debug("Discovery(%u) Response from " MAC_ADDRESS_STR - " link_status %d", pHddTdlsCtx->discovery_sent_cnt, - MAC_ADDR_ARRAY(curr_peer->peerMac), curr_peer->link_status); - - if (eTDLS_LINK_DISCOVERING == curr_peer->link_status) { - /* Since we are here, it means Throughput threshold is - * already met. Make sure RSSI threshold is also met - * before setting up TDLS link. - */ - if ((int32_t) curr_peer->rssi > - (int32_t) pHddTdlsCtx->threshold_config. - rssi_trigger_threshold) { - wlan_hdd_tdls_set_peer_link_status(curr_peer, - eTDLS_LINK_DISCOVERED, - eTDLS_LINK_SUCCESS); - hdd_debug("Rssi Threshold met: " MAC_ADDRESS_STR - " rssi = %d threshold= %d", - MAC_ADDR_ARRAY(curr_peer->peerMac), - curr_peer->rssi, - pHddTdlsCtx->threshold_config.rssi_trigger_threshold); - - cfg80211_tdls_oper_request(pAdapter->dev, - curr_peer->peerMac, - NL80211_TDLS_SETUP, false, - GFP_KERNEL); - } else { - hdd_debug("Rssi Threshold not met: " MAC_ADDRESS_STR - " rssi = %d threshold = %d ", - MAC_ADDR_ARRAY(curr_peer->peerMac), - curr_peer->rssi, - pHddTdlsCtx->threshold_config.rssi_trigger_threshold); - - wlan_hdd_tdls_set_peer_link_status(curr_peer, - eTDLS_LINK_IDLE, - eTDLS_LINK_UNSPECIFIED); - - /* if RSSI threshold is not met then allow - * further discovery attempts by decrementing - * count for the last attempt - */ - if (curr_peer->discovery_attempt) - curr_peer->discovery_attempt--; - } - } - - curr_peer->tdls_support = eTDLS_CAP_SUPPORTED; -rel_lock: - mutex_unlock(&hdd_ctx->tdls_lock); -ret_status: - EXIT(); - return status; -} - -/** - * wlan_hdd_tdls_set_peer_caps() - set TDLS peer capability - * @pAdapter: HDD adapter - * @mac: MAC address of the TDLS peer - * @StaParams: CSR Station Parameter - * @isBufSta: is peer buffer station - * @isOffChannelSupported: Is off channel supported - * @is_qos_wmm_sta: Is QoS-WMM supported - * - * Return: 0 for success or negative errno otherwise - */ -int wlan_hdd_tdls_set_peer_caps(struct hdd_adapter *pAdapter, - const uint8_t *mac, - tCsrStaParams *StaParams, - bool isBufSta, bool isOffChannelSupported, - bool is_qos_wmm_sta) -{ - hddTdlsPeer_t *curr_peer; - struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(pAdapter); - int status = 0; - - if (0 != (wlan_hdd_validate_context(hdd_ctx))) { - status = -EINVAL; - goto ret_status; - } - - mutex_lock(&hdd_ctx->tdls_lock); - curr_peer = wlan_hdd_tdls_get_peer(pAdapter, mac); - if (curr_peer == NULL) { - hdd_err("curr_peer is NULL"); - status = -EINVAL; - goto rel_lock; - } - - curr_peer->uapsdQueues = StaParams->uapsd_queues; - curr_peer->maxSp = StaParams->max_sp; - curr_peer->isBufSta = isBufSta; - curr_peer->isOffChannelSupported = isOffChannelSupported; - - qdf_mem_copy(curr_peer->supported_channels, - StaParams->supported_channels, - StaParams->supported_channels_len); - - curr_peer->supported_channels_len = StaParams->supported_channels_len; - - qdf_mem_copy(curr_peer->supported_oper_classes, - StaParams->supported_oper_classes, - StaParams->supported_oper_classes_len); - - curr_peer->supported_oper_classes_len = - StaParams->supported_oper_classes_len; - curr_peer->qos = is_qos_wmm_sta; -rel_lock: - mutex_unlock(&hdd_ctx->tdls_lock); -ret_status: - return status; -} - -/** - * wlan_hdd_tdls_get_link_establish_params() - get TDLS link establish - * parameter - * @pAdapter: HDD adapter - * @mac: mac address - * @tdlsLinkEstablishParams: output parameter to store the result - * - * Return: 0 for success or negative errno otherwise - */ -int wlan_hdd_tdls_get_link_establish_params(struct hdd_adapter *pAdapter, - const u8 *mac, - tCsrTdlsLinkEstablishParams * - tdlsLinkEstablishParams) -{ - hddTdlsPeer_t *curr_peer; - struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(pAdapter); - int status = 0; - - if (0 != (wlan_hdd_validate_context(hdd_ctx))) { - status = -EINVAL; - goto ret_status; - } - - mutex_lock(&hdd_ctx->tdls_lock); - curr_peer = wlan_hdd_tdls_get_peer(pAdapter, mac); - if (curr_peer == NULL) { - hdd_err("curr_peer is NULL"); - status = -EINVAL; - goto rel_lock; - } - - tdlsLinkEstablishParams->isResponder = curr_peer->is_responder; - tdlsLinkEstablishParams->uapsdQueues = curr_peer->uapsdQueues; - tdlsLinkEstablishParams->maxSp = curr_peer->maxSp; - tdlsLinkEstablishParams->isBufSta = curr_peer->isBufSta; - tdlsLinkEstablishParams->isOffChannelSupported = - curr_peer->isOffChannelSupported; - - qdf_mem_copy(tdlsLinkEstablishParams->supportedChannels, - curr_peer->supported_channels, - curr_peer->supported_channels_len); - - tdlsLinkEstablishParams->supportedChannelsLen = - curr_peer->supported_channels_len; - - qdf_mem_copy(tdlsLinkEstablishParams->supportedOperClasses, - curr_peer->supported_oper_classes, - curr_peer->supported_oper_classes_len); - - tdlsLinkEstablishParams->supportedOperClassesLen = - curr_peer->supported_oper_classes_len; - tdlsLinkEstablishParams->qos = curr_peer->qos; -rel_lock: - mutex_unlock(&hdd_ctx->tdls_lock); -ret_status: - return status; -} - -/** - * wlan_hdd_tdls_set_rssi() - Set TDLS RSSI on peer given by mac - * @pAdapter: HDD adapter - * @mac: MAC address of Peer - * @rxRssi: rssi value - * - * Set RSSI on TDSL peer - * - * Return: 0 for success or -EINVAL otherwise - */ -int wlan_hdd_tdls_set_rssi(struct hdd_adapter *pAdapter, const uint8_t *mac, - int8_t rxRssi) -{ - hddTdlsPeer_t *curr_peer; - struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(pAdapter); - - if (0 != (wlan_hdd_validate_context(hdd_ctx))) - return -EINVAL; - - mutex_lock(&hdd_ctx->tdls_lock); - curr_peer = wlan_hdd_tdls_find_peer(pAdapter, mac); - if (curr_peer == NULL) { - mutex_unlock(&hdd_ctx->tdls_lock); - hdd_err("curr_peer is NULL"); - return -EINVAL; - } - - curr_peer->rssi = rxRssi; - mutex_unlock(&hdd_ctx->tdls_lock); - - return 0; -} - -/** - * wlan_hdd_tdls_set_responder() - Set/clear TDLS peer's responder role - * @pAdapter: HDD adapter - * @mac: MAC address of Peer - * @responder: flag that indicates if the TDLS peer should be responder or not - * - * Return: 0 for success or -EINVAL otherwise - */ -int wlan_hdd_tdls_set_responder(struct hdd_adapter *pAdapter, - const uint8_t *mac, - uint8_t responder) -{ - hddTdlsPeer_t *curr_peer; - struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(pAdapter); - int status = 0; - - if (0 != (wlan_hdd_validate_context(hdd_ctx))) { - status = -EINVAL; - goto ret_status; - } - mutex_lock(&hdd_ctx->tdls_lock); - curr_peer = wlan_hdd_tdls_get_peer(pAdapter, mac); - if (curr_peer == NULL) { - hdd_err("curr_peer is NULL"); - status = -EINVAL; - goto rel_lock; - } - - curr_peer->is_responder = responder; - -rel_lock: - mutex_unlock(&hdd_ctx->tdls_lock); -ret_status: - return status; -} - -/** - * wlan_hdd_tdls_set_signature() - Set TDLS peer's signature - * @pAdapter: HDD adapter - * @mac: MAC address of TDLS Peer - * @uSignature: signature value - * - * Return: 0 for success or -EINVAL otherwise - */ -int wlan_hdd_tdls_set_signature(struct hdd_adapter *pAdapter, - const uint8_t *mac, - uint8_t uSignature) -{ - hddTdlsPeer_t *curr_peer; - struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(pAdapter); - int status = 0; - - if (0 != (wlan_hdd_validate_context(hdd_ctx))) { - status = -EINVAL; - goto ret_status; - } - - mutex_lock(&hdd_ctx->tdls_lock); - curr_peer = wlan_hdd_tdls_get_peer(pAdapter, mac); - if (curr_peer == NULL) { - hdd_err("curr_peer is NULL"); - status = -EINVAL; - goto rel_lock; - } - - curr_peer->signature = uSignature; -rel_lock: - mutex_unlock(&hdd_ctx->tdls_lock); -ret_status: - return status; -} - /** * wlan_hdd_tdls_extract_sa() - Extract source address from socket buffer * @skb: socket buffer @@ -1559,41 +1148,6 @@ int wlan_hdd_tdls_set_params(struct net_device *dev, return 0; } -/** - * wlan_hdd_tdls_set_sta_id() - set station ID on a tdls peer - * @pAdapter: HDD adapter - * @mac: MAC address of a tdls peer - * @staId: station ID - * - * Return: 0 if success; negative errno otherwise - */ -int wlan_hdd_tdls_set_sta_id(struct hdd_adapter *pAdapter, const uint8_t *mac, - uint8_t staId) -{ - hddTdlsPeer_t *curr_peer; - struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(pAdapter); - int status = 0; - - if (0 != (wlan_hdd_validate_context(hdd_ctx))) { - status = -EINVAL; - goto ret_status; - } - - mutex_lock(&hdd_ctx->tdls_lock); - curr_peer = wlan_hdd_tdls_get_peer(pAdapter, mac); - if (curr_peer == NULL) { - hdd_err("curr_peer is NULL"); - status = -EINVAL; - goto rel_lock; - } - - curr_peer->staId = staId; -rel_lock: - mutex_unlock(&hdd_ctx->tdls_lock); -ret_status: - return status; -} - /** * wlan_hdd_tdls_set_extctrl_param() - set external control parameter on a peer * @pAdapter: HDD adapter @@ -1767,57 +1321,6 @@ hddTdlsPeer_t *wlan_hdd_tdls_find_all_peer(struct hdd_context *hdd_ctx, return curr_peer; } -/** - * wlan_hdd_tdls_reset_peer() - reset TDLS peer identified by MAC address - * @pAdapter: HDD adapter - * @mac: MAC address of the peer - * - * Return: 0 for success; negative errno otherwise - */ -int wlan_hdd_tdls_reset_peer(struct hdd_adapter *pAdapter, const uint8_t *mac) -{ - struct hdd_context *hdd_ctx; - hddTdlsPeer_t *curr_peer; - int status = 0; - - hdd_ctx = WLAN_HDD_GET_CTX(pAdapter); - - if (0 != (wlan_hdd_validate_context(hdd_ctx))) { - status = -EINVAL; - goto ret_status; - } - - curr_peer = wlan_hdd_tdls_get_peer(pAdapter, mac); - if (curr_peer == NULL) { - hdd_err("curr_peer is NULL"); - status = -EINVAL; - goto ret_status; - } - - /* - * Reset preferred offchannel and opclass for offchannel as - * per INI configuration only if peer is not forced one. For - * forced peer, offchannel and opclass is set in HAL API at the - * time of enabling TDLS for that specific peer and so do not overwrite - * those set by user space. - */ - if (false == curr_peer->isForcedPeer) { - curr_peer->pref_off_chan_num = - hdd_ctx->config->fTDLSPrefOffChanNum; - curr_peer->op_class_for_pref_off_chan = - wlan_hdd_find_opclass(WLAN_HDD_GET_HAL_CTX(pAdapter), - curr_peer->pref_off_chan_num, - hdd_ctx->config->fTDLSPrefOffChanBandwidth); - } - - wlan_hdd_tdls_set_peer_link_status(curr_peer, - eTDLS_LINK_IDLE, - eTDLS_LINK_UNSPECIFIED); - curr_peer->staId = OL_TXRX_INVALID_TDLS_PEER_ID; -ret_status: - return status; -} - /** * wlan_hdd_tdls_connected_peers() - Find the number of connected TDLS peers * @pAdapter: HDD adapter @@ -1922,22 +1425,6 @@ int wlan_hdd_tdls_get_all_peers(struct hdd_adapter *pAdapter, return init_len - buflen; } -/** - * wlan_hdd_tdls_mgmt_completion_callback() - callback for TDLS management - * TX completion - * @pAdapter: HDD adapter - * @statusCode: management TX completion status - * - * Return: Void - */ -void wlan_hdd_tdls_mgmt_completion_callback(struct hdd_adapter *pAdapter, - uint32_t statusCode) -{ - pAdapter->mgmtTxCompletionStatus = statusCode; - hdd_debug("Mgmt TX Completion %d", statusCode); - complete(&pAdapter->tdls_mgmt_comp); -} - /** * wlan_hdd_tdls_increment_peer_count() - increment connected TDLS peer counter * @pAdapter: HDD adapter @@ -2831,8 +2318,8 @@ static int __wlan_hdd_cfg80211_exttdls_disable(struct wiphy *wiphy, if (hdd_ctx->config->fTDLSExternalControl == false) return -ENOTSUPP; - if (hdd_nla_parse(tb, QCA_WLAN_VENDOR_ATTR_TDLS_DISABLE_MAX, data, - data_len, wlan_hdd_tdls_config_disable_policy)) { + if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_TDLS_DISABLE_MAX, + data, data_len, wlan_hdd_tdls_config_disable_policy)) { hdd_err("Invalid ATTR"); return -EINVAL; } @@ -2871,214 +2358,6 @@ int wlan_hdd_cfg80211_exttdls_disable(struct wiphy *wiphy, return ret; } -/** - * wlan_hdd_tdls_add_station() - add or change a TDLS peer station - * @wiphy: wiphy - * @dev: net device - * @mac: MAC address of the TDLS peer - * @update: if non-0, modify the peer with StaParams; if 0, add new peer - * @StaParams: station parameters for the TDLS to change - * - * Return: 0 if success; negative errno otherwise - */ -int wlan_hdd_tdls_add_station(struct wiphy *wiphy, - struct net_device *dev, const uint8_t *mac, - bool update, tCsrStaParams *StaParams) -{ - struct hdd_adapter *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); - struct hdd_context *hdd_ctx = wiphy_priv(wiphy); - QDF_STATUS status; - hddTdlsPeer_t *pTdlsPeer; - enum tdls_link_status link_status; - uint16_t numCurrTdlsPeers; - unsigned long rc; - int ret; - int rate_idx; - - ENTER(); - - ret = wlan_hdd_validate_context(hdd_ctx); - if (ret) - return ret; - - if ((eTDLS_SUPPORT_NOT_ENABLED == hdd_ctx->tdls_mode) || - (eTDLS_SUPPORT_DISABLED == hdd_ctx->tdls_mode)) { - hdd_debug("TDLS disabled" MAC_ADDRESS_STR "Request declined.", - MAC_ADDR_ARRAY(mac)); - return -ENOTSUPP; - } - - mutex_lock(&hdd_ctx->tdls_lock); - pTdlsPeer = wlan_hdd_tdls_get_peer(pAdapter, mac); - - if (NULL == pTdlsPeer) { - mutex_unlock(&hdd_ctx->tdls_lock); - hdd_err(MAC_ADDRESS_STR " update %d not exist. return invalid", - MAC_ADDR_ARRAY(mac), update); - ret = -EINVAL; - goto ret_status; - } - - link_status = pTdlsPeer->link_status; - /* in add station, we accept existing valid staId if there is */ - if ((0 == update) && - ((pTdlsPeer->link_status >= eTDLS_LINK_CONNECTING) || - (TDLS_STA_INDEX_VALID(pTdlsPeer->staId)))) { - hdd_debug(MAC_ADDRESS_STR " status %d.staId %d.add sta ignored", - MAC_ADDR_ARRAY(mac), pTdlsPeer->link_status, - pTdlsPeer->staId); - ret = 0; - goto rel_lock; - } - /* in change station, we accept only when staId is valid */ - if ((1 == update) && - ((pTdlsPeer->link_status > eTDLS_LINK_CONNECTING) || - (!TDLS_STA_INDEX_VALID(pTdlsPeer->staId)))) { - hdd_err(MAC_ADDRESS_STR " link status %d. staId %d. change station %s.", - MAC_ADDR_ARRAY(mac), pTdlsPeer->link_status, - pTdlsPeer->staId, - (TDLS_STA_INDEX_VALID(pTdlsPeer->staId)) ? "ignored" : - "declined"); - ret = (TDLS_STA_INDEX_VALID(pTdlsPeer->staId)) ? 0 : -EPERM; - goto rel_lock; - } - - /* when others are on-going, we want to change link_status to idle */ - if (NULL != wlan_hdd_tdls_is_progress(hdd_ctx, mac, true)) { - mutex_unlock(&hdd_ctx->tdls_lock); - hdd_debug(MAC_ADDRESS_STR " TDLS setup ongoing.req declined.", - MAC_ADDR_ARRAY(mac)); - ret = -EPERM; - goto error; - } - - /* first to check if we reached to maximum supported TDLS peer. - * TODO: for now, return -EPERM looks working fine, - * but need to check if any other errno fit into this category. - */ - numCurrTdlsPeers = wlan_hdd_tdls_connected_peers(pAdapter); - if (hdd_ctx->max_num_tdls_sta <= numCurrTdlsPeers) { - QDF_TRACE(QDF_MODULE_ID_HDD, QDF_TRACE_LEVEL_ERROR, - "%s: " MAC_ADDRESS_STR - " TDLS Max peer already connected. Request declined." - " Num of peers (%d), Max allowed (%d).", - __func__, MAC_ADDR_ARRAY(mac), numCurrTdlsPeers, - hdd_ctx->max_num_tdls_sta); - mutex_unlock(&hdd_ctx->tdls_lock); - ret = -EPERM; - goto error; - } else { - hddTdlsPeer_t *pTdlsPeer; - - pTdlsPeer = wlan_hdd_tdls_find_peer(pAdapter, mac); - if (pTdlsPeer) { - link_status = pTdlsPeer->link_status; - if (TDLS_IS_CONNECTED(pTdlsPeer)) { - mutex_unlock(&hdd_ctx->tdls_lock); - QDF_TRACE(QDF_MODULE_ID_HDD, - QDF_TRACE_LEVEL_ERROR, - "%s: " MAC_ADDRESS_STR - " already connected. " - "Request declined.", - __func__, MAC_ADDR_ARRAY(mac)); - ret = -EPERM; - goto ret_status; - } - } - } - if (0 == update) - wlan_hdd_tdls_set_link_status(pAdapter, - mac, - eTDLS_LINK_CONNECTING, - eTDLS_LINK_SUCCESS); - - /* debug code */ - if (NULL != StaParams) { - hdd_debug("TDLS Peer Parameters."); - if (StaParams->htcap_present) { - hdd_debug("ht_capa->cap_info: %0x", - StaParams->HTCap.capInfo); - hdd_debug("ht_capa->extended_capabilities: %0x", - StaParams->HTCap.extendedHtCapInfo); - } - hdd_debug("params->capability: %0x", StaParams->capability); - hdd_debug("params->ext_capab_len: %0x", - StaParams->extn_capability[0]); - if (StaParams->vhtcap_present) { - hdd_debug("rxMcsMap %x rxHigh %x txMcsMap %x txHigh %x", - StaParams->VHTCap.suppMcs.rxMcsMap, - StaParams->VHTCap.suppMcs.rxHighest, - StaParams->VHTCap.suppMcs.txMcsMap, - StaParams->VHTCap.suppMcs.txHighest); - } - hdd_debug("Supported rates:"); - for (rate_idx = 0; - rate_idx < sizeof(StaParams->supported_rates); - rate_idx++) - hdd_debug("rate_idx [%d]: supported_rates %x ", - rate_idx, - StaParams->supported_rates[rate_idx]); - } /* end debug code */ - else if ((1 == update) && (NULL == StaParams)) { - mutex_unlock(&hdd_ctx->tdls_lock); - hdd_err("update is true, but staParams is NULL. Error!"); - ret = -EPERM; - goto ret_status; - } - - INIT_COMPLETION(pAdapter->tdls_add_station_comp); - - /* Update the number of stream for each peer */ - if ((NULL != StaParams) && (StaParams->htcap_present)) { - hddTdlsPeer_t *tdls_peer; - - tdls_peer = wlan_hdd_tdls_find_peer(pAdapter, mac); - if (NULL != tdls_peer) - tdls_peer->spatial_streams = - StaParams->HTCap.suppMcsSet[1]; - } - mutex_unlock(&hdd_ctx->tdls_lock); - - if (!update) { - status = sme_add_tdls_peer_sta(WLAN_HDD_GET_HAL_CTX(pAdapter), - pAdapter->sessionId, mac); - } else { - status = sme_change_tdls_peer_sta(WLAN_HDD_GET_HAL_CTX(pAdapter), - pAdapter->sessionId, mac, - StaParams); - } - - rc = wait_for_completion_timeout(&pAdapter->tdls_add_station_comp, - msecs_to_jiffies - (WAIT_TIME_TDLS_ADD_STA)); - - if (!rc) { - hdd_err("timeout waiting for tdls add station indication %ld peer link status %u", - rc, link_status); - ret = -EPERM; - goto error; - } - - if (QDF_STATUS_SUCCESS != pAdapter->tdlsAddStaStatus) { - QDF_TRACE(QDF_MODULE_ID_HDD, QDF_TRACE_LEVEL_ERROR, - "%s: Add Station is unsuccessful", __func__); - ret = -EPERM; - goto error; - } - - goto ret_status; - -error: - wlan_hdd_tdls_set_link_status(pAdapter, - mac, - eTDLS_LINK_IDLE, eTDLS_LINK_UNSPECIFIED); - goto ret_status; -rel_lock: - mutex_unlock(&hdd_ctx->tdls_lock); -ret_status: - return ret; -} - #if TDLS_MGMT_VERSION2 /** * __wlan_hdd_cfg80211_tdls_mgmt() - handle management actions on a given peer @@ -3141,17 +2420,8 @@ static int __wlan_hdd_cfg80211_tdls_mgmt(struct wiphy *wiphy, #endif #endif { - struct hdd_adapter *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); struct hdd_context *hdd_ctx = wiphy_priv(wiphy); - struct hdd_station_ctx *hdd_sta_ctx; - tdlsCtx_t *hdd_tdls_ctx; - u8 peerMac[QDF_MAC_ADDR_SIZE]; - QDF_STATUS status; - int max_sta_failed = 0; - int responder; - unsigned long rc; - uint16_t numCurrTdlsPeers; #if (LINUX_VERSION_CODE < KERNEL_VERSION(3, 15, 0)) #if !(TDLS_MGMT_VERSION2) u32 peer_capability; @@ -3177,14 +2447,6 @@ static int __wlan_hdd_cfg80211_tdls_mgmt(struct wiphy *wiphy, if (wlan_hdd_validate_context(hdd_ctx)) return -EINVAL; - if (eTDLS_SUPPORT_NOT_ENABLED == hdd_ctx->tdls_mode) { - hdd_debug("TDLS disabled" MAC_ADDRESS_STR " action %d declined", - MAC_ADDR_ARRAY(peer), action_code); - return -ENOTSUPP; - } - - hdd_sta_ctx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); - if (hdd_ctx->tdls_umac_comp_active) return wlan_cfg80211_tdls_mgmt(hdd_ctx->hdd_pdev, dev, peer, @@ -3192,284 +2454,7 @@ static int __wlan_hdd_cfg80211_tdls_mgmt(struct wiphy *wiphy, status_code, peer_capability, buf, len); - /* - * STA or P2P client should be connected and authenticated before - * sending any TDLS frames - */ - if ((eConnectionState_Associated != - hdd_sta_ctx->conn_info.connState) || - (false == hdd_sta_ctx->conn_info.uIsAuthenticated)) { - hdd_err("STA is not connected or not authenticated. connState %u, uIsAuthenticated %u", - hdd_sta_ctx->conn_info.connState, - hdd_sta_ctx->conn_info.uIsAuthenticated); - return -EAGAIN; - } - - /* other than teardown frame, mgmt frames are not sent if disabled */ - if (SIR_MAC_TDLS_TEARDOWN != action_code) { - if (!cds_check_is_tdls_allowed(pAdapter->device_mode)) { - hdd_err("TDLS not allowed, reject TDLS MGMT, action_code=%d", - action_code); - return -EPERM; - } - /* if tdls_mode is disabled, then decline the peer's request */ - if (eTDLS_SUPPORT_DISABLED == hdd_ctx->tdls_mode) { - hdd_debug(MAC_ADDRESS_STR "TDLS disabled. %d declined.", - MAC_ADDR_ARRAY(peer), action_code); - return -ENOTSUPP; - } - if (hdd_ctx->tdls_nss_switch_in_progress) { - hdd_err("TDLS antenna switch in progress, action %d declined for " - MAC_ADDRESS_STR, action_code, MAC_ADDR_ARRAY(peer)); - return -EAGAIN; - } - } - - if (WLAN_IS_TDLS_SETUP_ACTION(action_code)) { - mutex_lock(&hdd_ctx->tdls_lock); - if (NULL != wlan_hdd_tdls_is_progress(hdd_ctx, peer, true)) { - mutex_unlock(&hdd_ctx->tdls_lock); - QDF_TRACE(QDF_MODULE_ID_HDD, QDF_TRACE_LEVEL_ERROR, - "%s: " MAC_ADDRESS_STR - " TDLS setup is ongoing. action %d declined.", - __func__, MAC_ADDR_ARRAY(peer), action_code); - return -EPERM; - } - mutex_unlock(&hdd_ctx->tdls_lock); - } - /* - * Discard TDLS Discovery request and setup confirm if violates - * ACM rules - */ - if ((SIR_MAC_TDLS_DIS_REQ == action_code || - SIR_MAC_TDLS_SETUP_CNF == action_code) && - (hdd_wmm_is_active(pAdapter)) && - !(pAdapter->hddWmmStatus.wmmAcStatus[OL_TX_WMM_AC_VI].wmmAcAccessAllowed)) { - QDF_TRACE(QDF_MODULE_ID_HDD, QDF_TRACE_LEVEL_WARN, - "%s: Admission control is set to VI, action %d is not allowed.", - __func__, action_code); - return -EPERM; - } - - if (SIR_MAC_TDLS_SETUP_REQ == action_code || - SIR_MAC_TDLS_SETUP_RSP == action_code) { - numCurrTdlsPeers = wlan_hdd_tdls_connected_peers(pAdapter); - if (hdd_ctx->max_num_tdls_sta <= numCurrTdlsPeers) { - /* supplicant still sends tdls_mgmt(SETUP_REQ) - * even after we return error code at - * 'add_station()'. Hence we have this check - * again in addition to add_station(). Anyway, - * there is no harm to double-check. - */ - if (SIR_MAC_TDLS_SETUP_REQ == action_code) { - QDF_TRACE(QDF_MODULE_ID_HDD, - QDF_TRACE_LEVEL_ERROR, - "%s: " MAC_ADDRESS_STR - " TDLS Max peer already connected. action (%d) declined. Num of peers (%d), Max allowed (%d).", - __func__, MAC_ADDR_ARRAY(peer), - action_code, numCurrTdlsPeers, - hdd_ctx->max_num_tdls_sta); - return -EINVAL; - } - /* maximum reached. tweak to send - * error code to peer and return error - * code to supplicant - */ - status_code = eSIR_MAC_UNSPEC_FAILURE_STATUS; - QDF_TRACE(QDF_MODULE_ID_HDD, - QDF_TRACE_LEVEL_ERROR, - "%s: " MAC_ADDRESS_STR - " TDLS Max peer already connected, send response status (%d). Num of peers (%d), Max allowed (%d).", - __func__, MAC_ADDR_ARRAY(peer), - status_code, numCurrTdlsPeers, - hdd_ctx->max_num_tdls_sta); - max_sta_failed = -EPERM; - /* fall through to send setup resp - * with failure status code - */ - } else { - hddTdlsPeer_t *pTdlsPeer; - - mutex_lock(&hdd_ctx->tdls_lock); - pTdlsPeer = - wlan_hdd_tdls_find_peer(pAdapter, peer); - if (pTdlsPeer) { - if (TDLS_IS_CONNECTED(pTdlsPeer)) { - mutex_unlock(&hdd_ctx->tdls_lock); - QDF_TRACE(QDF_MODULE_ID_HDD, - QDF_TRACE_LEVEL_ERROR, - "%s:" MAC_ADDRESS_STR - " already connected." - " action %d declined.", - __func__, - MAC_ADDR_ARRAY(peer), - action_code); - return -EPERM; - } - } - mutex_unlock(&hdd_ctx->tdls_lock); - } - } - qdf_mem_copy(peerMac, peer, 6); - - hdd_debug("tdls" MAC_ADDRESS_STR "action %d,token %d,status %d,len %zu", - MAC_ADDR_ARRAY(peer), action_code, dialog_token, - status_code, len); - - /*Except teardown responder will not be used so just make 0 */ - responder = 0; - if (SIR_MAC_TDLS_TEARDOWN == action_code) { - hddTdlsPeer_t *pTdlsPeer; - - mutex_lock(&hdd_ctx->tdls_lock); - pTdlsPeer = wlan_hdd_tdls_find_peer(pAdapter, peerMac); - if (!pTdlsPeer) { - mutex_unlock(&hdd_ctx->tdls_lock); - QDF_TRACE(QDF_MODULE_ID_HDD, QDF_TRACE_LEVEL_ERROR, - "%s: " MAC_ADDRESS_STR " peer doesn't exist", - __func__, MAC_ADDR_ARRAY(peer)); - return -EPERM; - } - - if (TDLS_IS_CONNECTED(pTdlsPeer)) - responder = pTdlsPeer->is_responder; - else { - QDF_TRACE(QDF_MODULE_ID_HDD, QDF_TRACE_LEVEL_ERROR, - "%s: " MAC_ADDRESS_STR - " peer doesn't exist or not connected %d " - "dialog_token %d status %d, len = %zu", - __func__, MAC_ADDR_ARRAY(peer), - pTdlsPeer->link_status, - dialog_token, status_code, len); - mutex_unlock(&hdd_ctx->tdls_lock); - return -EPERM; - } - mutex_unlock(&hdd_ctx->tdls_lock); - } - - /* For explicit trigger of DIS_REQ come out of BMPS for - * successfully receiving DIS_RSP from peer. - */ - if ((SIR_MAC_TDLS_SETUP_RSP == action_code) || - (SIR_MAC_TDLS_SETUP_CNF == action_code) || - (SIR_MAC_TDLS_DIS_RSP == action_code) || - (SIR_MAC_TDLS_DIS_REQ == action_code)) { - /* Fw will take care if PS offload is enabled. */ - if (SIR_MAC_TDLS_DIS_REQ != action_code) - wlan_hdd_tdls_set_cap(pAdapter, peerMac, - eTDLS_CAP_SUPPORTED); - } - - /* make sure doesn't call send_mgmt() while it is pending */ - if (TDLS_CTX_MAGIC == pAdapter->mgmtTxCompletionStatus) { - QDF_TRACE(QDF_MODULE_ID_HDD, QDF_TRACE_LEVEL_ERROR, - "%s: " MAC_ADDRESS_STR - " action %d couldn't sent, as one is pending. return EBUSY", - __func__, MAC_ADDR_ARRAY(peer), action_code); - return -EBUSY; - } - - pAdapter->mgmtTxCompletionStatus = TDLS_CTX_MAGIC; - INIT_COMPLETION(pAdapter->tdls_mgmt_comp); - - status = sme_send_tdls_mgmt_frame(WLAN_HDD_GET_HAL_CTX(pAdapter), - pAdapter->sessionId, peerMac, - action_code, dialog_token, - status_code, peer_capability, - (uint8_t *) buf, len, - !responder); - - if (QDF_STATUS_SUCCESS != status) { - QDF_TRACE(QDF_MODULE_ID_HDD, QDF_TRACE_LEVEL_ERROR, - "%s: sme_send_tdls_mgmt_frame failed!", __func__); - pAdapter->mgmtTxCompletionStatus = false; - return -EINVAL; - } - - if (SIR_MAC_TDLS_TEARDOWN == action_code && - hdd_ctx->tdls_nss_switch_in_progress) { - mutex_lock(&hdd_ctx->tdls_lock); - if (hdd_ctx->tdls_teardown_peers_cnt != 0) - hdd_ctx->tdls_teardown_peers_cnt--; - if (hdd_ctx->tdls_teardown_peers_cnt == 0) { - if (hdd_ctx->tdls_nss_transition_mode == - TDLS_NSS_TRANSITION_1x1_to_2x2) { - /* TDLS NSS switch is fully completed, so - * reset the flags. - */ - hdd_debug("TDLS NSS switch is fully completed"); - hdd_ctx->tdls_nss_switch_in_progress = false; - hdd_ctx->tdls_nss_teardown_complete = false; - } else { - /* TDLS NSS switch is not yet completed, but - * tdls teardown is completed for all the - * peers. - */ - hdd_debug("TDLS teardown is completed and NSS switch still in progress"); - hdd_ctx->tdls_nss_teardown_complete = true; - } - } - mutex_unlock(&hdd_ctx->tdls_lock); - } - hdd_debug("Wait for tdls_mgmt_comp. Timeout %u ms", - WAIT_TIME_TDLS_MGMT); - - rc = wait_for_completion_timeout(&pAdapter->tdls_mgmt_comp, - msecs_to_jiffies(WAIT_TIME_TDLS_MGMT)); - - if ((0 == rc) || (true != pAdapter->mgmtTxCompletionStatus)) { - hdd_err("%s rc %ld mgmtTxCompletionStatus %u", - !rc ? "Mgmt Tx Completion timed out" : "Mgmt Tx Completion failed", - rc, pAdapter->mgmtTxCompletionStatus); - - if (cds_is_driver_recovering() || - cds_is_driver_in_bad_state()) { - hdd_err("Recovery in Progress. State: 0x%x Ignore!!!", - cds_get_driver_state()); - return -EAGAIN; - } - - if (cds_is_driver_unloading()) { - hdd_err("Unload in progress. State: 0x%x Ignore!!!", - cds_get_driver_state()); - return -EAGAIN; - } - - mutex_lock(&hdd_ctx->tdls_lock); - hdd_tdls_ctx = WLAN_HDD_GET_TDLS_CTX_PTR(pAdapter); - if (hdd_tdls_ctx) { - if (rc <= 0 && - (((qdf_get_monotonic_boottime() - - hdd_tdls_ctx->last_flush_ts) > - TDLS_ENABLE_CDS_FLUSH_INTERVAL) - || !(hdd_tdls_ctx->last_flush_ts))) { - hdd_tdls_ctx->last_flush_ts = - qdf_get_monotonic_boottime(); - mutex_unlock(&hdd_ctx->tdls_lock); - cds_flush_logs(WLAN_LOG_TYPE_FATAL, - WLAN_LOG_INDICATOR_HOST_DRIVER, - WLAN_LOG_REASON_HDD_TIME_OUT, - true, false); - } else - mutex_unlock(&hdd_ctx->tdls_lock); - } else - mutex_unlock(&hdd_ctx->tdls_lock); - - pAdapter->mgmtTxCompletionStatus = false; - return -EINVAL; - } - hdd_debug("Mgmt Tx Completion status %ld TxCompletion %u", - rc, pAdapter->mgmtTxCompletionStatus); - - if (max_sta_failed) - return max_sta_failed; - - if (SIR_MAC_TDLS_SETUP_RSP == action_code) - return wlan_hdd_tdls_set_responder(pAdapter, peerMac, false); - else if (SIR_MAC_TDLS_SETUP_CNF == action_code) - return wlan_hdd_tdls_set_responder(pAdapter, peerMac, true); - - return 0; + return -EINVAL; } /** @@ -3757,7 +2742,6 @@ ret_status: return status; } -#if defined(CONVERGED_TDLS_ENABLE) /** * __wlan_hdd_cfg80211_tdls_oper() - helper function to handle cfg80211 operation * on an TDLS peer @@ -3803,484 +2787,16 @@ static int __wlan_hdd_cfg80211_tdls_oper(struct wiphy *wiphy, if (0 != status) return status; - status = wlan_cfg80211_tdls_oper(hdd_ctx->hdd_pdev, dev, peer, oper); - - EXIT(); - return status; -} -#else -/** - * __wlan_hdd_cfg80211_tdls_oper() - helper function to handle cfg80211 - * operation on an TDLS peer - * @wiphy: wiphy - * @dev: net device - * @peer: MAC address of the TDLS peer - * @oper: cfg80211 TDLS operation - * - * Return: 0 on success; negative errno otherwise - */ -static int __wlan_hdd_cfg80211_tdls_oper(struct wiphy *wiphy, - struct net_device *dev, - const uint8_t *peer, - enum nl80211_tdls_operation oper) -{ - struct hdd_adapter *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); - struct hdd_context *hdd_ctx = wiphy_priv(wiphy); - int status; - tSmeTdlsPeerStateParams smeTdlsPeerStateParams; - QDF_STATUS qdf_ret_status = QDF_STATUS_E_FAILURE; - hddTdlsPeer_t *pTdlsPeer; - enum tdls_link_status peer_status = eTDLS_LINK_IDLE; - uint16_t peer_staid; - uint8_t peer_offchannelsupp; - - ENTER(); - - if (QDF_GLOBAL_FTM_MODE == hdd_get_conparam()) { - hdd_err("Command not allowed in FTM mode"); - return -EINVAL; - } - - if (wlan_hdd_validate_session_id(pAdapter->sessionId)) { - hdd_err("invalid session id: %d", pAdapter->sessionId); - return -EINVAL; - } - - MTRACE(qdf_trace(QDF_MODULE_ID_HDD, - TRACE_CODE_HDD_CFG80211_TDLS_OPER, - pAdapter->sessionId, oper)); - if (NULL == peer) { - QDF_TRACE(QDF_MODULE_ID_HDD, QDF_TRACE_LEVEL_ERROR, - "%s: Invalid arguments", __func__); - return -EINVAL; - } - - status = wlan_hdd_validate_context(hdd_ctx); - - if (0 != status) + if (hdd_ctx->tdls_umac_comp_active) { + status = wlan_cfg80211_tdls_oper(hdd_ctx->hdd_pdev, + dev, peer, oper); + EXIT(); return status; - - /* QCA 2.0 Discrete ANDs feature capability in HDD config with that - * received from target, so HDD config gives combined intersected result - */ - if (false == hdd_ctx->config->fEnableTDLSSupport) { - QDF_TRACE(QDF_MODULE_ID_HDD, QDF_TRACE_LEVEL_ERROR, - "TDLS Disabled in INI OR not enabled in FW. " - "Cannot process TDLS commands"); - return -ENOTSUPP; - } - - switch (oper) { - case NL80211_TDLS_ENABLE_LINK: - { - QDF_STATUS status; - unsigned long rc; - tCsrTdlsLinkEstablishParams tdlsLinkEstablishParams = { {0}, 0, - 0, 0, 0, 0, 0, {0}, 0, {0} }; - - mutex_lock(&hdd_ctx->tdls_lock); - pTdlsPeer = - wlan_hdd_tdls_find_peer(pAdapter, peer); - - if (NULL == pTdlsPeer) { - mutex_unlock(&hdd_ctx->tdls_lock); - QDF_TRACE(QDF_MODULE_ID_HDD, - QDF_TRACE_LEVEL_ERROR, - "%s: peer matching " MAC_ADDRESS_STR - " not found, ignore NL80211_TDLS_ENABLE_LINK", - __func__, MAC_ADDR_ARRAY(peer)); - return -EINVAL; - } - - QDF_TRACE(QDF_MODULE_ID_HDD, QDF_TRACE_LEVEL_ERROR, - "%s: NL80211_TDLS_ENABLE_LINK for peer " - MAC_ADDRESS_STR " link_status: %d", - __func__, MAC_ADDR_ARRAY(peer), - pTdlsPeer->link_status); - - if (!TDLS_STA_INDEX_VALID(pTdlsPeer->staId)) { - QDF_TRACE(QDF_MODULE_ID_HDD, - QDF_TRACE_LEVEL_ERROR, - "%s: invalid sta index %u for " - MAC_ADDRESS_STR - " TDLS_ENABLE_LINK failed", __func__, - pTdlsPeer->staId, - MAC_ADDR_ARRAY(peer)); - mutex_unlock(&hdd_ctx->tdls_lock); - return -EINVAL; - } - peer_status = pTdlsPeer->link_status; - peer_offchannelsupp = pTdlsPeer->isOffChannelSupported; - mutex_unlock(&hdd_ctx->tdls_lock); - - wlan_hdd_tdls_set_cap(pAdapter, peer, eTDLS_CAP_SUPPORTED); - - qdf_mem_set(&tdlsLinkEstablishParams, - sizeof(tdlsLinkEstablishParams), 0); - - if (eTDLS_LINK_CONNECTED != peer_status) { - if (IS_ADVANCE_TDLS_ENABLE) { - - hdd_debug("Advance TDLS is enabled"); - if (0 != - wlan_hdd_tdls_get_link_establish_params - (pAdapter, peer, - &tdlsLinkEstablishParams)) { - return -EINVAL; - } - INIT_COMPLETION(pAdapter-> - tdls_link_establish_req_comp); - - sme_send_tdls_link_establish_params - (WLAN_HDD_GET_HAL_CTX(pAdapter), - pAdapter->sessionId, peer, - &tdlsLinkEstablishParams); - /* Send TDLS peer UAPSD capabilities to the - * firmware and register with the TL on after - * the response for this operation is received - */ - rc = wait_for_completion_timeout - (&pAdapter-> - tdls_link_establish_req_comp, - msecs_to_jiffies - (WAIT_TIME_TDLS_LINK_ESTABLISH_REQ)); - if (!rc) { - QDF_TRACE(QDF_MODULE_ID_HDD, - QDF_TRACE_LEVEL_ERROR, - "%s: Link Establish Request timed out", - __func__); - return -EINVAL; - } - } - - mutex_lock(&hdd_ctx->tdls_lock); - pTdlsPeer = - wlan_hdd_tdls_find_peer(pAdapter, peer); - - if (NULL == pTdlsPeer) { - mutex_unlock(&hdd_ctx->tdls_lock); - QDF_TRACE(QDF_MODULE_ID_HDD, - QDF_TRACE_LEVEL_ERROR, - "%s: peer matching " MAC_ADDRESS_STR - " (oper %d) peer got freed in other" - "context. ignored", - __func__, MAC_ADDR_ARRAY(peer), - (int)oper); - return -EINVAL; - } - - wlan_hdd_tdls_set_peer_link_status(pTdlsPeer, - eTDLS_LINK_CONNECTED, - eTDLS_LINK_SUCCESS); - peer_staid = pTdlsPeer->staId; - - hdd_debug("%s: tdlsLinkEstablishParams of peer " - MAC_ADDRESS_STR "uapsdQueues: %d" - " qos: %d maxSp: %d isBufSta: %d" - " isOffChannelSupported: %d" - " isResponder: %d peerstaId: %d", - __func__, - MAC_ADDR_ARRAY( - tdlsLinkEstablishParams.peerMac), - tdlsLinkEstablishParams.uapsdQueues, - tdlsLinkEstablishParams.qos, - tdlsLinkEstablishParams.maxSp, - tdlsLinkEstablishParams.isBufSta, - tdlsLinkEstablishParams.isOffChannelSupported, - tdlsLinkEstablishParams.isResponder, - pTdlsPeer->staId); - /* start TDLS client registration with TL */ - status = - hdd_roam_register_tdlssta( - pAdapter, peer, - pTdlsPeer->staId, - pTdlsPeer->signature, - pTdlsPeer->qos); - if (QDF_STATUS_SUCCESS == status) { - uint8_t i; - - qdf_mem_zero(&smeTdlsPeerStateParams, - sizeof - (tSmeTdlsPeerStateParams)); - - smeTdlsPeerStateParams.vdevId = - pAdapter->sessionId; - qdf_mem_copy(&smeTdlsPeerStateParams. - peerMacAddr, - &pTdlsPeer->peerMac, - sizeof(tSirMacAddr)); - smeTdlsPeerStateParams.peerState = - eSME_TDLS_PEER_STATE_CONNECTED; - smeTdlsPeerStateParams.peerCap. - isPeerResponder = - pTdlsPeer->is_responder; - smeTdlsPeerStateParams.peerCap. - peerUapsdQueue = - pTdlsPeer->uapsdQueues; - smeTdlsPeerStateParams.peerCap. - peerMaxSp = pTdlsPeer->maxSp; - smeTdlsPeerStateParams.peerCap. - peerBuffStaSupport = - pTdlsPeer->isBufSta; - smeTdlsPeerStateParams.peerCap. - peerOffChanSupport = - pTdlsPeer->isOffChannelSupported; - smeTdlsPeerStateParams.peerCap. - peerCurrOperClass = 0; - smeTdlsPeerStateParams.peerCap. - selfCurrOperClass = 0; - smeTdlsPeerStateParams.peerCap. - peerChanLen = - pTdlsPeer->supported_channels_len; - smeTdlsPeerStateParams.peerCap. - prefOffChanNum = - pTdlsPeer->pref_off_chan_num; - smeTdlsPeerStateParams.peerCap. - prefOffChanBandwidth = - hdd_ctx->config-> - fTDLSPrefOffChanBandwidth; - smeTdlsPeerStateParams.peerCap. - opClassForPrefOffChan = - pTdlsPeer-> - op_class_for_pref_off_chan; - - if (wlan_reg_is_dfs_ch(hdd_ctx->hdd_pdev, - smeTdlsPeerStateParams. - peerCap.prefOffChanNum)) { - hdd_err("Resetting TDLS off-channel from %d to %d", - smeTdlsPeerStateParams.peerCap. - prefOffChanNum, - CFG_TDLS_PREFERRED_OFF_CHANNEL_NUM_DEFAULT); - smeTdlsPeerStateParams.peerCap.prefOffChanNum = - CFG_TDLS_PREFERRED_OFF_CHANNEL_NUM_DEFAULT; - } - - QDF_TRACE(QDF_MODULE_ID_HDD, - QDF_TRACE_LEVEL_INFO, - "%s: Peer " MAC_ADDRESS_STR - "vdevId: %d, peerState: %d, isPeerResponder: %d, uapsdQueues: 0x%x, maxSp: 0x%x, peerBuffStaSupport: %d, peerOffChanSupport: %d, peerCurrOperClass: %d, selfCurrOperClass: %d, peerChanLen: %d, peerOperClassLen: %d, prefOffChanNum: %d, prefOffChanBandwidth: %d, op_class_for_pref_off_chan: %d", - __func__, - MAC_ADDR_ARRAY(peer), - smeTdlsPeerStateParams.vdevId, - smeTdlsPeerStateParams. - peerState, - smeTdlsPeerStateParams. - peerCap.isPeerResponder, - smeTdlsPeerStateParams. - peerCap.peerUapsdQueue, - smeTdlsPeerStateParams. - peerCap.peerMaxSp, - smeTdlsPeerStateParams. - peerCap.peerBuffStaSupport, - smeTdlsPeerStateParams. - peerCap.peerOffChanSupport, - smeTdlsPeerStateParams. - peerCap.peerCurrOperClass, - smeTdlsPeerStateParams. - peerCap.selfCurrOperClass, - smeTdlsPeerStateParams. - peerCap.peerChanLen, - smeTdlsPeerStateParams. - peerCap.peerOperClassLen, - smeTdlsPeerStateParams. - peerCap.prefOffChanNum, - smeTdlsPeerStateParams. - peerCap.prefOffChanBandwidth, - pTdlsPeer-> - op_class_for_pref_off_chan); - - for (i = 0; - i < - pTdlsPeer->supported_channels_len; - i++) { - smeTdlsPeerStateParams.peerCap. - peerChan[i] = - pTdlsPeer-> - supported_channels[i]; - } - smeTdlsPeerStateParams.peerCap. - peerOperClassLen = - pTdlsPeer-> - supported_oper_classes_len; - for (i = 0; - i < - pTdlsPeer-> - supported_oper_classes_len; i++) { - smeTdlsPeerStateParams.peerCap. - peerOperClass[i] = - pTdlsPeer-> - supported_oper_classes[i]; - } - mutex_unlock(&hdd_ctx->tdls_lock); - - qdf_ret_status = - sme_update_tdls_peer_state(hdd_ctx-> - hHal, - &smeTdlsPeerStateParams); - if (QDF_STATUS_SUCCESS != - qdf_ret_status) { - QDF_TRACE(QDF_MODULE_ID_HDD, - QDF_TRACE_LEVEL_ERROR, - "%s: sme_update_tdls_peer_state failed for " - MAC_ADDRESS_STR, - __func__, - MAC_ADDR_ARRAY(peer)); - return -EPERM; - } - wlan_hdd_tdls_increment_peer_count - (pAdapter); - } else - mutex_unlock(&hdd_ctx->tdls_lock); - - /* Update TL about the UAPSD masks, - * to route the packets to firmware - */ - if ((true == - hdd_ctx->config->fEnableTDLSBufferSta) - || hdd_ctx->config->fTDLSUapsdMask) { - int ac; - uint8_t ucAc[4] = { SME_AC_VO, - SME_AC_VI, - SME_AC_BK, - SME_AC_BE}; - uint8_t tlTid[4] = { 7, 5, 2, 3 }; - - hdd_debug("Update TL about UAPSD masks"); - for (ac = 0; ac < 4; ac++) { - status = sme_enable_uapsd_for_ac( - peer_staid, ucAc[ac], - tlTid[ac], tlTid[ac], 0, 0, - SME_QOS_WMM_TS_DIR_BOTH, 1, - pAdapter->sessionId, - hdd_ctx->config->DelayedTriggerFrmInt); - } - } - } - hdd_wlan_tdls_enable_link_event(peer, - peer_offchannelsupp, - 0, 0); - } - break; - case NL80211_TDLS_DISABLE_LINK: - { - mutex_lock(&hdd_ctx->tdls_lock); - pTdlsPeer = - wlan_hdd_tdls_find_peer(pAdapter, peer); - - if (NULL == pTdlsPeer) { - mutex_unlock(&hdd_ctx->tdls_lock); - QDF_TRACE(QDF_MODULE_ID_HDD, - QDF_TRACE_LEVEL_ERROR, - "%s: peer matching " MAC_ADDRESS_STR - " not found, ignore NL80211_TDLS_DISABLE_LINK", - __func__, MAC_ADDR_ARRAY(peer)); - return -EINVAL; - } - - QDF_TRACE(QDF_MODULE_ID_HDD, QDF_TRACE_LEVEL_ERROR, - "%s: NL80211_TDLS_DISABLE_LINK for peer " - MAC_ADDRESS_STR " link_status: %d", - __func__, MAC_ADDR_ARRAY(peer), - pTdlsPeer->link_status); - peer_staid = pTdlsPeer->staId; - mutex_unlock(&hdd_ctx->tdls_lock); - - if (TDLS_STA_INDEX_VALID(peer_staid)) { - unsigned long rc; - - INIT_COMPLETION(pAdapter-> - tdls_del_station_comp); - - sme_delete_tdls_peer_sta(WLAN_HDD_GET_HAL_CTX - (pAdapter), - pAdapter->sessionId, - peer); - - rc = wait_for_completion_timeout(&pAdapter-> - tdls_del_station_comp, - msecs_to_jiffies - (WAIT_TIME_TDLS_DEL_STA)); - if (!rc) { - QDF_TRACE(QDF_MODULE_ID_HDD, - QDF_TRACE_LEVEL_ERROR, - "%s: Del station timed out", - __func__); - return -EPERM; - } - - mutex_lock(&hdd_ctx->tdls_lock); - pTdlsPeer = - wlan_hdd_tdls_find_peer(pAdapter, peer); - if (NULL == pTdlsPeer) { - mutex_unlock(&hdd_ctx->tdls_lock); - QDF_TRACE(QDF_MODULE_ID_HDD, - QDF_TRACE_LEVEL_ERROR, - "%s: peer matching " MAC_ADDRESS_STR - " (oper %d) peer got freed in other" - " context. ignored", - __func__, MAC_ADDR_ARRAY(peer), - (int)oper); - return -EINVAL; - } - - wlan_hdd_tdls_set_peer_link_status(pTdlsPeer, - eTDLS_LINK_IDLE, - (pTdlsPeer->link_status == - eTDLS_LINK_TEARING) ? - eTDLS_LINK_UNSPECIFIED : - eTDLS_LINK_DROPPED_BY_REMOTE); - mutex_unlock(&hdd_ctx->tdls_lock); - } else { - QDF_TRACE(QDF_MODULE_ID_HDD, - QDF_TRACE_LEVEL_ERROR, - "%s: TDLS Peer Station doesn't exist.", - __func__); - } - } - break; - case NL80211_TDLS_TEARDOWN: - { - status = - wlan_hdd_tdls_extctrl_deconfig_peer(pAdapter, peer); - - if (0 != status) { - QDF_TRACE(QDF_MODULE_ID_HDD, - QDF_TRACE_LEVEL_ERROR, - "%s: Error in TDLS Teardown", - __func__); - return status; - } - } - break; - case NL80211_TDLS_SETUP: - { - status = wlan_hdd_tdls_extctrl_config_peer(pAdapter, - peer, NULL, - hdd_ctx->config->fTDLSPrefOffChanNum, 0, 0, 0); - if (0 != status) { - QDF_TRACE(QDF_MODULE_ID_HDD, - QDF_TRACE_LEVEL_ERROR, - "%s: Error in TDLS Setup", __func__); - return status; - } - } - break; - case NL80211_TDLS_DISCOVERY_REQ: - /* We don't support in-driver setup/teardown/discovery */ - QDF_TRACE(QDF_MODULE_ID_HDD, QDF_TRACE_LEVEL_WARN, - "%s: We don't support in-driver setup/teardown/discovery", - __func__); - return -ENOTSUPP; - default: - QDF_TRACE(QDF_MODULE_ID_HDD, QDF_TRACE_LEVEL_ERROR, - "%s: unsupported event %d", __func__, oper); - return -ENOTSUPP; } EXIT(); - return 0; + return -EINVAL; } -#endif /** * wlan_hdd_cfg80211_tdls_oper() - handle cfg80211 operation on an TDLS peer diff --git a/core/mac/inc/sir_api.h b/core/mac/inc/sir_api.h index 7ee408711e43..f70febb1bef9 100644 --- a/core/mac/inc/sir_api.h +++ b/core/mac/inc/sir_api.h @@ -457,9 +457,7 @@ typedef struct sSirSmeRsp { uint8_t sessionId; /* To support BT-AMP */ uint16_t transactionId; /* To support BT-AMP */ tSirResultCodes statusCode; -#ifdef CONVERGED_TDLS_ENABLE struct wlan_objmgr_psoc *psoc; -#endif } tSirSmeRsp, *tpSirSmeRsp; /* / Definition for indicating all modules ready on STA */ @@ -3505,9 +3503,7 @@ typedef struct sSirTdlsAddStaRsp { uint8_t ucastSig; uint8_t bcastSig; eTdlsAddOper tdlsAddOper; -#ifdef CONVERGED_TDLS_ENABLE struct wlan_objmgr_psoc *psoc; -#endif } tSirTdlsAddStaRsp; /* TDLS Request struct SME-->PE */ @@ -3559,9 +3555,7 @@ typedef struct sSirTdlsDelStaRsp { tSirResultCodes statusCode; struct qdf_mac_addr peermac; uint16_t staId; -#ifdef CONVERGED_TDLS_ENABLE struct wlan_objmgr_psoc *psoc; -#endif } tSirTdlsDelStaRsp, *tpSirTdlsDelStaRsp; /* TDLS Delete Indication struct PE-->SME */ typedef struct sSirTdlsDelStaInd { @@ -3582,9 +3576,7 @@ typedef struct sSirMgmtTxCompletionInd { uint16_t length; uint8_t sessionId; /* Session ID */ uint32_t txCompleteStatus; -#ifdef CONVERGED_TDLS_ENABLE struct wlan_objmgr_psoc *psoc; -#endif } tSirMgmtTxCompletionInd, *tpSirMgmtTxCompletionInd; typedef struct sSirTdlsEventnotify { diff --git a/core/mac/src/pe/lim/lim_process_action_frame.c b/core/mac/src/pe/lim/lim_process_action_frame.c index 17613718d0c2..b593aa5d3b49 100644 --- a/core/mac/src/pe/lim/lim_process_action_frame.c +++ b/core/mac/src/pe/lim/lim_process_action_frame.c @@ -2105,25 +2105,7 @@ void lim_process_action_frame(tpAniSirGlobal mac_ctx, WMA_GET_RX_RSSI_NORMALIZED( rx_pkt_info)); break; -#ifdef FEATURE_WLAN_TDLS -#ifndef CONVERGED_TDLS_ENABLE - case SIR_MAC_TDLS_DIS_RSP: - mac_hdr = NULL; - frame_len = 0; - rssi = 0; - mac_hdr = WMA_GET_RX_MAC_HEADER(rx_pkt_info); - frame_len = WMA_GET_RX_PAYLOAD_LEN(rx_pkt_info); - rssi = WMA_GET_RX_RSSI_NORMALIZED(rx_pkt_info); - pe_debug("Public Action TDLS Discovery RSP"); - lim_send_sme_mgmt_frame_ind(mac_ctx, - mac_hdr->fc.subType, (uint8_t *) mac_hdr, - frame_len + sizeof(tSirMacMgmtHdr), - session->smeSessionId, - WMA_GET_RX_CH(rx_pkt_info), session, rssi); - break; -#endif -#endif case SIR_MAC_ACTION_EXT_CHANNEL_SWITCH_ID: lim_process_ext_channel_switch_action_frame(mac_ctx, rx_pkt_info, session); diff --git a/core/mac/src/pe/lim/lim_process_message_queue.c b/core/mac/src/pe/lim/lim_process_message_queue.c index 7c4c7be3853b..4f0573cea1d3 100644 --- a/core/mac/src/pe/lim/lim_process_message_queue.c +++ b/core/mac/src/pe/lim/lim_process_message_queue.c @@ -1269,7 +1269,6 @@ static void lim_process_messages(tpAniSirGlobal mac_ctx, #ifdef FEATURE_WLAN_TDLS tSirTdlsInd *tdls_ind = NULL; tpDphHashNode sta_ds = NULL; - tTdlsLinkEstablishParams *tdls_link_params = NULL; #endif tSirMbMsgP2p *p2p_msg = NULL; tSirSetActiveModeSetBncFilterReq *bcn_filter_req = NULL; @@ -1779,29 +1778,6 @@ static void lim_process_messages(tpAniSirGlobal mac_ctx, qdf_mem_free((void *)(msg->bodyptr)); msg->bodyptr = NULL; break; -#ifdef FEATURE_WLAN_TDLS - case WMA_SET_TDLS_LINK_ESTABLISH_REQ_RSP: - tdls_link_params = (tTdlsLinkEstablishParams *) msg->bodyptr; - session_entry = pe_find_session_by_sta_id(mac_ctx, - tdls_link_params->staIdx, &session_id); - if (session_entry == NULL) { - pe_err("session %u does not exist", session_id); - /* Still send the eWNI_SME_TDLS_LINK_ESTABLISH_RSP - * message to SME with session id as zero and status - * as FAILURE so, that message queued in SME queue - * can be freed to prevent the SME cmd buffer leak - */ - lim_send_sme_tdls_link_establish_req_rsp(mac_ctx, 0, - NULL, NULL, eSIR_FAILURE); - } else { - lim_send_sme_tdls_link_establish_req_rsp(mac_ctx, - session_entry->smeSessionId, NULL, NULL, - tdls_link_params->status); - } - qdf_mem_free((void *)(msg->bodyptr)); - msg->bodyptr = NULL; - break; -#endif case WMA_RX_CHN_STATUS_EVENT: lim_process_rx_channel_status_event(mac_ctx, msg->bodyptr); 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 11249d38f5f5..1613fd644784 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 @@ -5059,9 +5059,6 @@ bool lim_process_sme_req_messages(tpAniSirGlobal pMac, case eWNI_SME_TDLS_DEL_STA_REQ: lim_process_sme_tdls_del_sta_req(pMac, pMsgBuf); break; - case eWNI_SME_TDLS_LINK_ESTABLISH_REQ: - lim_process_sme_tdls_link_establish_req(pMac, pMsgBuf); - break; #endif case eWNI_SME_RESET_AP_CAPS_CHANGED: __lim_process_sme_reset_ap_caps_change(pMac, pMsgBuf); diff --git a/core/mac/src/pe/lim/lim_process_tdls.c b/core/mac/src/pe/lim/lim_process_tdls.c index a2524d5a6abb..f59bb631be6a 100644 --- a/core/mac/src/pe/lim/lim_process_tdls.c +++ b/core/mac/src/pe/lim/lim_process_tdls.c @@ -79,10 +79,7 @@ #include "cds_regdomain.h" #include "cds_utils.h" #include "wlan_reg_services_api.h" - -#ifdef CONVERGED_TDLS_ENABLE #include "wlan_tdls_tgt_api.h" -#endif /* define NO_PAD_TDLS_MIN_8023_SIZE to NOT padding: See CR#447630 There was IOT issue with cisco 1252 open mode, where it pads @@ -2677,18 +2674,11 @@ static QDF_STATUS lim_send_sme_tdls_add_sta_rsp(tpAniSirGlobal pMac, addStaRsp->length = sizeof(tSirTdlsAddStaRsp); addStaRsp->messageType = eWNI_SME_TDLS_ADD_STA_RSP; -#ifdef CONVERGED_TDLS_ENABLE addStaRsp->psoc = pMac->psoc; mmhMsg.bodyptr = addStaRsp; mmhMsg.callback = tgt_tdls_add_peer_rsp; return scheduler_post_msg(QDF_MODULE_ID_TARGET_IF, &mmhMsg); -#else - mmhMsg.bodyptr = addStaRsp; - mmhMsg.bodyval = 0; - lim_sys_process_mmh_msg_api(pMac, &mmhMsg, ePROT); -#endif - return QDF_STATUS_SUCCESS; } /* @@ -2737,7 +2727,6 @@ add_sta_error: return status; } -#ifdef CONVERGED_TDLS_ENABLE /** * lim_send_tdls_comp_mgmt_rsp() - Send Response to upper layers * @mac_ctx: Pointer to Global MAC structure @@ -2786,7 +2775,6 @@ lim_send_tdls_comp_mgmt_rsp(tpAniSirGlobal mac_ctx, uint16_t msg_type, scheduler_post_msg(QDF_MODULE_ID_TARGET_IF, &msg); } -#endif /** * lim_process_sme_tdls_mgmt_send_req() - send out tdls management frames @@ -2908,51 +2896,13 @@ tSirRetStatus lim_process_sme_tdls_mgmt_send_req(tpAniSirGlobal mac_ctx, } lim_tdls_send_mgmt_error: -#ifdef CONVERGED_TDLS_ENABLE lim_send_tdls_comp_mgmt_rsp(mac_ctx, eWNI_SME_TDLS_SEND_MGMT_RSP, result_code, send_req->sessionId, send_req->transactionId); -#else - lim_send_sme_rsp(mac_ctx, eWNI_SME_TDLS_SEND_MGMT_RSP, - result_code, send_req->sessionId, - send_req->transactionId); -#endif return eSIR_SUCCESS; } -/* - * Send Response to Link Establish Request to SME - */ -void lim_send_sme_tdls_link_establish_req_rsp(tpAniSirGlobal pMac, - uint8_t sessionId, - struct qdf_mac_addr *peermac, - tDphHashNode *pStaDs, uint8_t status) -{ - struct scheduler_msg mmhMsg = { 0 }; - - tSirTdlsLinkEstablishReqRsp *pTdlsLinkEstablishReqRsp = NULL; - - pTdlsLinkEstablishReqRsp = - qdf_mem_malloc(sizeof(tSirTdlsLinkEstablishReqRsp)); - if (NULL == pTdlsLinkEstablishReqRsp) { - pe_err("Failed to allocate memory"); - return; - } - pe_debug("Send Resp to TDL Link Establish Req to SME"); - pTdlsLinkEstablishReqRsp->statusCode = status; - if (peermac) - qdf_copy_macaddr(&pTdlsLinkEstablishReqRsp->peermac, peermac); - - pTdlsLinkEstablishReqRsp->sessionId = sessionId; - mmhMsg.type = eWNI_SME_TDLS_LINK_ESTABLISH_RSP; - mmhMsg.bodyptr = pTdlsLinkEstablishReqRsp; - mmhMsg.bodyval = 0; - lim_sys_process_mmh_msg_api(pMac, &mmhMsg, ePROT); - return; - -} - /* * Once link is teardown, send Del Peer Ind to SME */ @@ -2982,19 +2932,10 @@ static QDF_STATUS lim_send_sme_tdls_del_sta_rsp(tpAniSirGlobal pMac, pDelSta->length = sizeof(tSirTdlsDelStaRsp); pDelSta->messageType = eWNI_SME_TDLS_DEL_STA_RSP; -#ifdef CONVERGED_TDLS_ENABLE pDelSta->psoc = pMac->psoc; mmhMsg.bodyptr = pDelSta; mmhMsg.callback = tgt_tdls_del_peer_rsp; return scheduler_post_msg(QDF_MODULE_ID_TARGET_IF, &mmhMsg); -#else - mmhMsg.bodyptr = pDelSta; - - mmhMsg.bodyval = 0; -#endif - lim_sys_process_mmh_msg_api(pMac, &mmhMsg, ePROT); - return QDF_STATUS_SUCCESS; - } /* @@ -3122,163 +3063,6 @@ lim_tdls_del_sta_error: return eSIR_SUCCESS; } -/* Intersects the two input arrays and outputs an array */ -/* For now the array length of uint8_t suffices */ -static void lim_tdls_get_intersection(uint8_t *input_array1, - uint8_t input1_length, - uint8_t *input_array2, - uint8_t input2_length, - uint8_t *output_array, - uint8_t *output_length) -{ - uint8_t i, j, k = 0, flag = 0; - for (i = 0; i < input1_length; i++) { - flag = 0; - for (j = 0; j < input2_length; j++) { - if (input_array1[i] == input_array2[j]) { - flag = 1; - break; - } - } - if (flag == 1) { - output_array[k] = input_array1[i]; - k++; - } - } - *output_length = k; -} - -/** - * lim_process_sme_tdls_link_establish_req() - process tdls link establishment - * request - * - * @mac_ctx - global MAC context - * @msg_buf - message buffer from SME - * - * Process Link Establishment Request from SME - * - * Return: eSIR_SUCCESS on success, failure code otherwise. - */ -tSirRetStatus lim_process_sme_tdls_link_establish_req(tpAniSirGlobal mac_ctx, - uint32_t *msg_buf) -{ - /* get all discovery request parameters */ - tSirTdlsLinkEstablishReq *tdls_req = - (tSirTdlsLinkEstablishReq *) msg_buf; - tpPESession session_entry; - uint8_t session_id; - tpTdlsLinkEstablishParams tdls_req_params; - struct scheduler_msg msg = {0}; - uint16_t peer_idx = 0; - tpDphHashNode stads = NULL; - uint32_t self_num_chan = WNI_CFG_VALID_CHANNEL_LIST_LEN; - uint8_t self_supp_chan[WNI_CFG_VALID_CHANNEL_LIST_LEN]; - - pe_debug("Process TDLS Link Establishment Request from SME"); - - session_entry = pe_find_session_by_bssid(mac_ctx, tdls_req->bssid.bytes, - &session_id); - if (NULL == session_entry) { - pe_err("PE Session does not exist for sme session_id: %d", - tdls_req->sessionId); - lim_send_sme_tdls_link_establish_req_rsp(mac_ctx, - tdls_req->sessionId, &tdls_req->peermac, NULL, - eSIR_FAILURE); - return eSIR_FAILURE; - } - - /* check if we are in proper state to work as TDLS client */ - if (!LIM_IS_STA_ROLE(session_entry)) { - pe_err("TDLS Link Establish Request received in wrong system Role: %d", - GET_LIM_SYSTEM_ROLE(session_entry)); - goto lim_tdls_link_establish_error; - } - - /* - * if we are still good, go ahead and check if we are in proper state to - * do TDLS discovery req/rsp/....frames. - */ - if ((session_entry->limSmeState != eLIM_SME_ASSOCIATED_STATE) && - (session_entry->limSmeState != eLIM_SME_LINK_EST_STATE)) { - pe_err("TDLS Link Establish Request received in invalid LIMsme state: %d", - session_entry->limSmeState); - goto lim_tdls_link_establish_error; - } - - stads = dph_lookup_hash_entry(mac_ctx, tdls_req->peermac.bytes, - &peer_idx, - &session_entry->dph.dphHashTable); - if (NULL == stads) { - pe_err("stads is NULL"); - goto lim_tdls_link_establish_error; - } - tdls_req_params = qdf_mem_malloc(sizeof(tTdlsLinkEstablishParams)); - if (NULL == tdls_req_params) { - pe_err("Unable to allocate memory TDLS Link Establish Request"); - return eSIR_MEM_ALLOC_FAILED; - } - - tdls_req_params->staIdx = stads->staIndex; - tdls_req_params->isResponder = tdls_req->isResponder; - tdls_req_params->uapsdQueues = tdls_req->uapsdQueues; - tdls_req_params->maxSp = tdls_req->maxSp; - tdls_req_params->isBufsta = tdls_req->isBufSta; - tdls_req_params->isOffChannelSupported = - tdls_req->isOffChannelSupported; - - if (0 == tdls_req->supportedChannelsLen) - goto send_tdls_establish_request; - - if (wlan_cfg_get_str(mac_ctx, WNI_CFG_VALID_CHANNEL_LIST, - self_supp_chan, - &self_num_chan) != eSIR_SUCCESS) { - /** - * Could not get Valid channel list from CFG. - * Log error. - */ - pe_warn("could not retrieve Valid channel list"); - } - - if (self_num_chan > WNI_CFG_VALID_CHANNEL_LIST_LEN) { - pe_warn("Channel List more than Valid Channel list"); - self_num_chan = WNI_CFG_VALID_CHANNEL_LIST_LEN; - } - - if (tdls_req->supportedChannelsLen > SIR_MAC_MAX_SUPP_CHANNELS) { - pe_warn("Channel List is more than the supported Channel list"); - tdls_req->supportedChannelsLen = SIR_MAC_MAX_SUPP_CHANNELS; - } - - lim_tdls_get_intersection(self_supp_chan, self_num_chan, - tdls_req->supportedChannels, tdls_req->supportedChannelsLen, - tdls_req_params->validChannels, - &tdls_req_params->validChannelsLen); - -send_tdls_establish_request: - qdf_mem_copy(tdls_req_params->validOperClasses, - tdls_req->supportedOperClasses, - tdls_req->supportedOperClassesLen); - tdls_req_params->validOperClassesLen = - tdls_req->supportedOperClassesLen; - - msg.type = WMA_SET_TDLS_LINK_ESTABLISH_REQ; - msg.reserved = 0; - msg.bodyptr = tdls_req_params; - msg.bodyval = 0; - if (eSIR_SUCCESS != wma_post_ctrl_msg(mac_ctx, &msg)) { - pe_err("halPostMsgApi failed"); - goto lim_tdls_link_establish_error; - } - return eSIR_SUCCESS; - -lim_tdls_link_establish_error: - lim_send_sme_tdls_link_establish_req_rsp(mac_ctx, - session_entry->smeSessionId, &tdls_req->peermac, NULL, - eSIR_FAILURE); - - return eSIR_SUCCESS; -} - /** * lim_check_aid_and_delete_peer() - Funtion to check aid and delete peer * @p_mac: pointer to mac context @@ -3341,53 +3125,6 @@ skip: } } -#ifndef CONVERGED_TDLS_ENABLE -/** - * lim_delete_tdls_peers() - delete tdls peers - * - * @mac_ctx - global MAC context - * @session_entry - PE session entry - * - * Delete all the TDLS peer connected before leaving the BSS - * - * Return: eSIR_SUCCESS on success, error code otherwise - */ -tSirRetStatus lim_delete_tdls_peers(tpAniSirGlobal mac_ctx, - tpPESession session_entry) -{ - cds_msg_t msg; - struct sir_tdls_notify_set_state_disable *tdls_state_disable; - - pe_debug("Enter"); - - if (NULL == session_entry) { - pe_err("NULL session_entry"); - return eSIR_FAILURE; - } - - lim_check_aid_and_delete_peer(mac_ctx, session_entry); - if (lim_is_roam_synch_in_progress(session_entry)) - return eSIR_SUCCESS; - - if (mac_ctx->lim.sme_msg_callback) { - tdls_state_disable = qdf_mem_malloc( - sizeof(*tdls_state_disable)); - if (NULL == tdls_state_disable) { - pe_err("memory allocation failed"); - return eSIR_FAILURE; - } - tdls_state_disable->session_id = session_entry->smeSessionId; - msg.type = eWNI_SME_TDLS_NOTIFY_SET_STATE_DISABLE; - msg.bodyptr = tdls_state_disable; - msg.bodyval = 0; - mac_ctx->lim.sme_msg_callback(mac_ctx, &msg); - } - - lim_send_sme_tdls_delete_all_peer_ind(mac_ctx, session_entry); - pe_debug("Exit"); - return eSIR_SUCCESS; -} -#else /** * lim_delete_tdls_peers() - delete tdls peers * @@ -3419,7 +3156,6 @@ tSirRetStatus lim_delete_tdls_peers(tpAniSirGlobal mac_ctx, pe_debug("Exit"); return eSIR_SUCCESS; } -#endif /** * lim_process_sme_del_all_tdls_peers(): process delete tdls peers 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 7f8da9548cbd..1a18b2935be8 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 @@ -62,9 +62,7 @@ #include "wlan_reg_services_api.h" #include "wlan_utility.h" -#ifdef CONVERGED_TDLS_ENABLE #include "wlan_tdls_tgt_api.h" -#endif #include "lim_process_fils.h" static void lim_handle_join_rsp_status(tpAniSirGlobal mac_ctx, @@ -1215,86 +1213,20 @@ void lim_send_sme_tdls_del_sta_ind(tpAniSirGlobal pMac, tpDphHashNode pStaDs, tpPESession psessionEntry, uint16_t reasonCode) { - struct scheduler_msg mmhMsg = {0}; - tSirTdlsDelStaInd *pSirTdlsDelStaInd; + struct tdls_event_info info; - pSirTdlsDelStaInd = qdf_mem_malloc(sizeof(tSirTdlsDelStaInd)); - if (NULL == pSirTdlsDelStaInd) { - pe_err("AllocateMemory failed for eWNI_SME_TDLS_DEL_STA_IND"); - return; - } pe_debug("Delete TDLS Peer "MAC_ADDRESS_STR "with reason code: %d", MAC_ADDR_ARRAY(pStaDs->staAddr), reasonCode); - /* messageType */ - pSirTdlsDelStaInd->messageType = eWNI_SME_TDLS_DEL_STA_IND; - pSirTdlsDelStaInd->length = sizeof(tSirTdlsDelStaInd); + info.vdev_id = psessionEntry->smeSessionId; + qdf_mem_copy(info.peermac.bytes, pStaDs->staAddr, QDF_MAC_ADDR_SIZE); + info.message_type = TDLS_PEER_DISCONNECTED; + info.peer_reason = TDLS_DISCONNECTED_PEER_DELETE; - /* sessionId */ - pSirTdlsDelStaInd->sessionId = psessionEntry->smeSessionId; + tgt_tdls_event_handler(pMac->psoc, &info); - /* peerMacAddr */ - qdf_mem_copy(pSirTdlsDelStaInd->peermac.bytes, pStaDs->staAddr, - QDF_MAC_ADDR_SIZE); - - /* staId */ - lim_copy_u16((uint8_t *) (&pSirTdlsDelStaInd->staId), - (uint16_t) pStaDs->staIndex); - - /* reasonCode */ - lim_copy_u16((uint8_t *) (&pSirTdlsDelStaInd->reasonCode), reasonCode); - - mmhMsg.type = eWNI_SME_TDLS_DEL_STA_IND; - mmhMsg.bodyptr = pSirTdlsDelStaInd; - mmhMsg.bodyval = 0; - - lim_sys_process_mmh_msg_api(pMac, &mmhMsg, ePROT); return; } /*** end lim_send_sme_tdls_del_sta_ind() ***/ -/** - * lim_send_sme_tdls_delete_all_peer_ind() - * - ***FUNCTION: - * This function is called to send the eWNI_SME_TDLS_DEL_ALL_PEER_IND - * message to SME. - * - ***LOGIC: - * - ***ASSUMPTIONS: - * - ***NOTE: - * NA - * - * @param pMac - Pointer to global MAC structure - * @param psessionEntry - Pointer to the session entry - * @return None - */ -void -lim_send_sme_tdls_delete_all_peer_ind(tpAniSirGlobal pMac, tpPESession psessionEntry) -{ - struct scheduler_msg mmhMsg = {0}; - tSirTdlsDelAllPeerInd *pSirTdlsDelAllPeerInd; - - pSirTdlsDelAllPeerInd = qdf_mem_malloc(sizeof(tSirTdlsDelAllPeerInd)); - if (NULL == pSirTdlsDelAllPeerInd) { - pe_err("AllocateMemory failed for eWNI_SME_TDLS_DEL_ALL_PEER_IND"); - return; - } - /* messageType */ - pSirTdlsDelAllPeerInd->messageType = eWNI_SME_TDLS_DEL_ALL_PEER_IND; - pSirTdlsDelAllPeerInd->length = sizeof(tSirTdlsDelAllPeerInd); - - /* sessionId */ - pSirTdlsDelAllPeerInd->sessionId = psessionEntry->smeSessionId; - - mmhMsg.type = eWNI_SME_TDLS_DEL_ALL_PEER_IND; - mmhMsg.bodyptr = pSirTdlsDelAllPeerInd; - mmhMsg.bodyval = 0; - - lim_sys_process_mmh_msg_api(pMac, &mmhMsg, ePROT); - return; -} /*** end lim_send_sme_tdls_delete_all_peer_ind() ***/ - /** * lim_send_sme_mgmt_tx_completion() * @@ -1342,15 +1274,10 @@ lim_send_sme_mgmt_tx_completion(tpAniSirGlobal pMac, mmhMsg.bodyptr = pSirMgmtTxCompletionInd; mmhMsg.bodyval = 0; -#ifdef CONVERGED_TDLS_ENABLE pSirMgmtTxCompletionInd->psoc = pMac->psoc; mmhMsg.callback = tgt_tdls_send_mgmt_tx_completion; scheduler_post_msg(QDF_MODULE_ID_TARGET_IF, &mmhMsg); return; -#else - lim_sys_process_mmh_msg_api(pMac, &mmhMsg, ePROT); - return; -#endif } /*** end lim_send_sme_tdls_delete_all_peer_ind() ***/ void lim_send_sme_tdls_event_notify(tpAniSirGlobal pMac, uint16_t msgType, diff --git a/core/mac/src/pe/lim/lim_send_sme_rsp_messages.h b/core/mac/src/pe/lim/lim_send_sme_rsp_messages.h index 6714f5a44340..c20c90366eac 100644 --- a/core/mac/src/pe/lim/lim_send_sme_rsp_messages.h +++ b/core/mac/src/pe/lim/lim_send_sme_rsp_messages.h @@ -102,9 +102,6 @@ void lim_send_sme_ibss_peer_ind(tpAniSirGlobal pMac, tSirMacAddr peerMacAddr, void lim_send_sme_max_assoc_exceeded_ntf(tpAniSirGlobal pMac, tSirMacAddr peerMacAddr, uint8_t smesessionId); #ifdef FEATURE_WLAN_TDLS -void lim_send_sme_tdls_link_establish_req_rsp(tpAniSirGlobal pMac, uint8_t sessionId, - struct qdf_mac_addr *peermac, - tDphHashNode *pStaDs, uint8_t status); void lim_send_sme_tdls_event_notify(tpAniSirGlobal pMac, uint16_t msgType, void *events); #endif diff --git a/core/mac/src/pe/lim/lim_types.h b/core/mac/src/pe/lim/lim_types.h index 52ec01217d33..45d6e50c0904 100644 --- a/core/mac/src/pe/lim/lim_types.h +++ b/core/mac/src/pe/lim/lim_types.h @@ -554,12 +554,8 @@ tSirRetStatus lim_process_sme_tdls_mgmt_send_req(tpAniSirGlobal pMac, uint32_t *pMsgBuf); tSirRetStatus lim_process_sme_tdls_add_sta_req(tpAniSirGlobal pMac, uint32_t *pMsgBuf); -tSirRetStatus lim_process_sme_tdls_link_establish_req(tpAniSirGlobal pMac, - uint32_t *pMsgBuf); tSirRetStatus lim_process_sme_tdls_del_sta_req(tpAniSirGlobal pMac, uint32_t *pMsgBuf); -void lim_send_sme_tdls_delete_all_peer_ind(tpAniSirGlobal pMac, - tpPESession psessionEntry); void lim_send_sme_mgmt_tx_completion( tpAniSirGlobal pMac, uint32_t sme_session_id, diff --git a/core/sme/inc/sme_api.h b/core/sme/inc/sme_api.h index 9e6830365ced..fd4b1a42a738 100644 --- a/core/sme/inc/sme_api.h +++ b/core/sme/inc/sme_api.h @@ -679,23 +679,6 @@ QDF_STATUS sme_update_roam_scan_offload_enabled(tHalHandle hHal, bool nRoamScanOffloadEnabled); bool sme_is_feature_supported_by_fw(enum cap_bitmap feature); #ifdef FEATURE_WLAN_TDLS -QDF_STATUS sme_send_tdls_link_establish_params(tHalHandle hHal, - uint8_t sessionId, - const tSirMacAddr peerMac, - tCsrTdlsLinkEstablishParams * - tdlsLinkEstablishParams); -QDF_STATUS sme_send_tdls_mgmt_frame(tHalHandle hHal, uint8_t sessionId, - const tSirMacAddr peerMac, uint8_t frame_type, - uint8_t dialog, uint16_t status, - uint32_t peerCapability, uint8_t *buf, - uint8_t len, uint8_t responder); -QDF_STATUS sme_change_tdls_peer_sta(tHalHandle hHal, uint8_t sessionId, - const tSirMacAddr peerMac, - tCsrStaParams *pstaParams); -QDF_STATUS sme_add_tdls_peer_sta(tHalHandle hHal, uint8_t sessionId, - const tSirMacAddr peerMac); -QDF_STATUS sme_delete_tdls_peer_sta(tHalHandle hHal, uint8_t sessionId, - const tSirMacAddr peerMac); void sme_set_tdls_power_save_prohibited(tHalHandle hHal, uint32_t sessionId, bool val); QDF_STATUS sme_send_tdls_chan_switch_req( @@ -1531,8 +1514,6 @@ QDF_STATUS sme_fast_reassoc(tHalHandle hal, tCsrRoamProfile *profile, QDF_STATUS sme_congestion_register_callback(tHalHandle hal, void (*congestion_cb)(void *, uint32_t congestion, uint32_t vdev_id)); -QDF_STATUS sme_delete_all_tdls_peers(tHalHandle hal, uint8_t session_id); - /** * sme_rso_cmd_status_cb() - Set RSO cmd status callback * @hal: HAL Handle diff --git a/core/sme/inc/sme_inside.h b/core/sme/inc/sme_inside.h index 36eaef9a6b27..5480918db680 100644 --- a/core/sme/inc/sme_inside.h +++ b/core/sme/inc/sme_inside.h @@ -245,20 +245,6 @@ QDF_STATUS csr_process_del_sta_session_rsp(tpAniSirGlobal pMac, uint8_t *pMsg); bool csr_roamGetConcurrencyConnectStatusForBmps(tpAniSirGlobal pMac); #ifdef FEATURE_WLAN_TDLS -QDF_STATUS csr_tdls_send_mgmt_req(tHalHandle hHal, uint8_t sessionId, - tCsrTdlsSendMgmt * tdlsSendMgmt); -QDF_STATUS csr_tdls_send_link_establish_params(tHalHandle hHal, - uint8_t sessionId, const tSirMacAddr peerMac, - tCsrTdlsLinkEstablishParams *tdlsLinkEstablishParams); -QDF_STATUS csr_tdls_add_peer_sta(tHalHandle hHal, uint8_t sessionId, - const tSirMacAddr peerMac); -QDF_STATUS csr_tdls_change_peer_sta(tHalHandle hHal, uint8_t sessionId, - const tSirMacAddr peerMac, - tCsrStaParams *pstaParams); -QDF_STATUS csr_tdls_del_peer_sta(tHalHandle hHal, uint8_t sessionId, - const tSirMacAddr peerMac); -QDF_STATUS csr_tdls_process_cmd(tpAniSirGlobal pMac, tSmeCmd *pCommand); -QDF_STATUS csr_tdls_process_link_establish(tpAniSirGlobal pMac, tSmeCmd *cmd); QDF_STATUS tdls_msg_processor(tpAniSirGlobal pMac, uint16_t msg_type, void *pMsgBuf); #endif /* FEATURE_WLAN_TDLS */ diff --git a/core/sme/src/common/sme_api.c b/core/sme/src/common/sme_api.c index 9546721a6e9c..b73c69b4fc5e 100644 --- a/core/sme/src/common/sme_api.c +++ b/core/sme/src/common/sme_api.c @@ -553,14 +553,6 @@ QDF_STATUS sme_ser_handle_active_cmd(struct wlan_serialization_command *cmd) status = QDF_STATUS_E_FAILURE; #endif break; -#ifdef FEATURE_WLAN_TDLS - case eSmeCommandTdlsSendMgmt: - case eSmeCommandTdlsAddPeer: - case eSmeCommandTdlsDelPeer: - case eSmeCommandTdlsLinkEstablish: - status = csr_tdls_process_cmd(mac_ctx, sme_cmd); - break; -#endif case e_sme_command_set_hw_mode: csr_process_set_hw_mode(mac_ctx, sme_cmd); break; @@ -9017,181 +9009,12 @@ bool sme_is_feature_supported_by_fw(enum cap_bitmap feature) } #ifdef FEATURE_WLAN_TDLS +/* --------------------------------------------------------------------------- + \fn sme_set_tdls_power_save_prohibited + \API to set/reset the is_tdls_power_save_prohibited. -/* - * sme_send_tdls_link_establish_params() - - * API to send TDLS Peer Link Establishment Parameters. - * - * peerMac - peer's Mac Adress. - * tdlsLinkEstablishParams - TDLS Peer Link Establishment Parameters - * Return QDF_STATUS_SUCCES - */ -QDF_STATUS sme_send_tdls_link_establish_params(tHalHandle hHal, - uint8_t sessionId, - const tSirMacAddr peerMac, - tCsrTdlsLinkEstablishParams * - tdlsLinkEstablishParams) -{ - QDF_STATUS status = QDF_STATUS_SUCCESS; - tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - - MTRACE(qdf_trace(QDF_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_TDLS_LINK_ESTABLISH_PARAM, - sessionId, - tdlsLinkEstablishParams->isOffChannelSupported)); - status = sme_acquire_global_lock(&pMac->sme); - - if (QDF_IS_STATUS_SUCCESS(status)) { - status = csr_tdls_send_link_establish_params(hHal, sessionId, - peerMac, tdlsLinkEstablishParams); - sme_release_global_lock(&pMac->sme); - } - return status; -} - -/* - * sme_send_tdls_mgmt_frame() - - * API to send TDLS management frames. - * - * peerMac - peer's Mac Adress. - * frame_type - Type of TDLS mgmt frame to be sent. - * dialog - dialog token used in the frame. - * status - status to be incuded in the frame. - * peerCapability - peer cpabilities - * buf - additional IEs to be included - * len - lenght of additional Ies - * responder - Tdls request type - * Return QDF_STATUS_SUCCES - */ -QDF_STATUS sme_send_tdls_mgmt_frame(tHalHandle hHal, uint8_t sessionId, - const tSirMacAddr peerMac, - uint8_t frame_type, - uint8_t dialog, uint16_t statusCode, - uint32_t peerCapability, uint8_t *buf, - uint8_t len, uint8_t responder) -{ - QDF_STATUS status = QDF_STATUS_SUCCESS; - tCsrTdlsSendMgmt sendTdlsReq = { {0} }; - tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - - MTRACE(qdf_trace(QDF_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_TDLS_SEND_MGMT_FRAME, - sessionId, statusCode)); - status = sme_acquire_global_lock(&pMac->sme); - if (QDF_IS_STATUS_SUCCESS(status)) { - qdf_mem_copy(sendTdlsReq.peerMac, peerMac, sizeof(tSirMacAddr)); - sendTdlsReq.frameType = frame_type; - sendTdlsReq.buf = buf; - sendTdlsReq.len = len; - sendTdlsReq.dialog = dialog; - sendTdlsReq.statusCode = statusCode; - sendTdlsReq.responder = responder; - sendTdlsReq.peerCapability = peerCapability; - - status = csr_tdls_send_mgmt_req(hHal, sessionId, &sendTdlsReq); - - sme_release_global_lock(&pMac->sme); - } - - return status; - -} - -/* - * sme_change_tdls_peer_sta() - - * API to Update TDLS peer sta parameters. - * - * peerMac - peer's Mac Adress. - * staParams - Peer Station Parameters - * Return QDF_STATUS_SUCCES - */ -QDF_STATUS sme_change_tdls_peer_sta(tHalHandle hHal, uint8_t sessionId, - const tSirMacAddr peerMac, - tCsrStaParams *pstaParams) -{ - QDF_STATUS status = QDF_STATUS_SUCCESS; - tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - - if (NULL == pstaParams) { - QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_ERROR, - "%s :pstaParams is NULL", __func__); - return QDF_STATUS_E_FAILURE; - } - MTRACE(qdf_trace(QDF_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_TDLS_CHANGE_PEER_STA, - sessionId, pstaParams->capability)); - status = sme_acquire_global_lock(&pMac->sme); - if (QDF_IS_STATUS_SUCCESS(status)) { - status = csr_tdls_change_peer_sta(hHal, sessionId, peerMac, - pstaParams); - - sme_release_global_lock(&pMac->sme); - } - - return status; - -} - -/* - * sme_add_tdls_peer_sta() - - * API to Add TDLS peer sta entry. - * - * peerMac - peer's Mac Adress. - * Return QDF_STATUS_SUCCES - */ -QDF_STATUS sme_add_tdls_peer_sta(tHalHandle hHal, uint8_t sessionId, - const tSirMacAddr peerMac) -{ - QDF_STATUS status = QDF_STATUS_SUCCESS; - tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - - MTRACE(qdf_trace(QDF_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_TDLS_ADD_PEER_STA, - sessionId, 0)); - status = sme_acquire_global_lock(&pMac->sme); - if (QDF_IS_STATUS_SUCCESS(status)) { - status = csr_tdls_add_peer_sta(hHal, sessionId, peerMac); - - sme_release_global_lock(&pMac->sme); - } - - return status; - -} - -/* - * sme_delete_tdls_peer_sta() - - * API to Delete TDLS peer sta entry. - * - * peerMac - peer's Mac Adress. - * Return QDF_STATUS_SUCCES - */ -QDF_STATUS sme_delete_tdls_peer_sta(tHalHandle hHal, uint8_t sessionId, - const tSirMacAddr peerMac) -{ - QDF_STATUS status = QDF_STATUS_SUCCESS; - tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - - MTRACE(qdf_trace(QDF_MODULE_ID_SME, - TRACE_CODE_SME_RX_HDD_TDLS_DEL_PEER_STA, - sessionId, 0)); - status = sme_acquire_global_lock(&pMac->sme); - if (QDF_IS_STATUS_SUCCESS(status)) { - status = csr_tdls_del_peer_sta(hHal, sessionId, peerMac); - - sme_release_global_lock(&pMac->sme); - } - - return status; - -} - -/* - * sme_set_tdls_power_save_prohibited() - - * API to set/reset the is_tdls_power_save_prohibited. - * - * Return void - */ + \- return void + -------------------------------------------------------------------------*/ void sme_set_tdls_power_save_prohibited(tHalHandle hHal, uint32_t sessionId, bool val) { @@ -16152,46 +15975,6 @@ QDF_STATUS sme_fast_reassoc(tHalHandle hal, tCsrRoamProfile *profile, return status; } -/** - * sme_delete_all_tdls_peers(): send request to delete tdls peers - * @hal: handler for HAL - * @session_id: session id - * - * This function sends request to lim to delete tdls peers - * - * Return: QDF_STATUS - */ -QDF_STATUS sme_delete_all_tdls_peers(tHalHandle hal, uint8_t session_id) -{ - struct sir_del_all_tdls_peers *msg; - QDF_STATUS status = QDF_STATUS_SUCCESS; - tpAniSirGlobal p_mac = PMAC_STRUCT(hal); - struct csr_roam_session *session = CSR_GET_SESSION(p_mac, session_id); - - msg = qdf_mem_malloc(sizeof(*msg)); - if (NULL == msg) { - sme_err("memory alloc failed"); - return QDF_STATUS_E_FAILURE; - } - - qdf_mem_zero(msg, sizeof(*msg)); - - msg->msg_type = eWNI_SME_DEL_ALL_TDLS_PEERS; - msg->msg_len = (uint16_t) sizeof(*msg); - - qdf_mem_copy(msg->bssid.bytes, session->connectedProfile.bssid.bytes, - sizeof(struct qdf_mac_addr)); - - status = umac_send_mb_message_to_mac(msg); - - if (status != QDF_STATUS_SUCCESS) { - sme_err("cds_send_mb_message_to_mac Failed"); - status = QDF_STATUS_E_FAILURE; - } - - return status; -} - /* ARP DEBUG STATS */ /** diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c index 3704ed137e65..538fd813ecc0 100644 --- a/core/sme/src/csr/csr_api_roam.c +++ b/core/sme/src/csr/csr_api_roam.c @@ -58,6 +58,7 @@ #include #include "wlan_objmgr_psoc_obj.h" #include +#include #define MAX_PWR_FCC_CHAN_12 8 #define MAX_PWR_FCC_CHAN_13 2 @@ -20531,9 +20532,8 @@ static QDF_STATUS csr_process_roam_sync_callback(tpAniSirGlobal mac_ctx, csr_scan_save_roam_offload_ap_to_scan_cache(mac_ctx, roam_synch_data, bss_desc); roam_info->sessionId = session_id; - csr_roam_call_callback(mac_ctx, roam_synch_data->roamedVdevId, - roam_info, 0, eCSR_ROAM_TDLS_STATUS_UPDATE, - eCSR_ROAM_RESULT_DELETE_ALL_TDLS_PEER_IND); + tgt_tdls_peers_deleted_notification(mac_ctx->psoc, session_id); + qdf_mem_copy(&roam_info->bssid.bytes, &bss_desc->bssId, sizeof(struct qdf_mac_addr)); csr_roam_save_connected_infomation(mac_ctx, session_id, diff --git a/core/sme/src/csr/csr_tdls_process.c b/core/sme/src/csr/csr_tdls_process.c index bcf728c213e7..d5af7acd0035 100644 --- a/core/sme/src/csr/csr_tdls_process.c +++ b/core/sme/src/csr/csr_tdls_process.c @@ -42,627 +42,6 @@ #include "host_diag_core_event.h" #include "csr_internal.h" -/* - * common routine to remove TDLS cmd from SME command list.. - * commands are removed after getting reponse from PE. - */ -static QDF_STATUS csr_tdls_remove_sme_cmd(tpAniSirGlobal pMac, - eSmeCommandType cmdType, uint8_t session_id) -{ - QDF_STATUS status = QDF_STATUS_E_FAILURE; - tListElem *pEntry; - tSmeCmd *pCommand; - - pEntry = csr_nonscan_active_ll_peek_head(pMac, LL_ACCESS_LOCK); - if (pEntry) { - pCommand = GET_BASE_ADDR(pEntry, tSmeCmd, Link); - if (cmdType == pCommand->command) { - if (csr_nonscan_active_ll_remove_entry(pMac, - pEntry, LL_ACCESS_LOCK)) { - qdf_mem_zero(&pCommand->u.tdlsCmd, - sizeof(tTdlsCmd)); - csr_release_command(pMac, pCommand); - status = QDF_STATUS_SUCCESS; - } - } - } - return status; -} - -/** - * csr_tdls_send_mgmt_req() - to send a TDLS frame to PE through SME - * @hHal: HAL context - * @sessionId: SME session id - * @tdlsSendMgmt: tdls mgmt pointer - * - * TDLS request API, called from HDD to send a TDLS frame in SME/CSR and - * send message to PE to trigger TDLS discovery procedure. - */ -QDF_STATUS csr_tdls_send_mgmt_req(tHalHandle hHal, uint8_t sessionId, - tCsrTdlsSendMgmt *tdlsSendMgmt) -{ - tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - tSmeCmd *tdlsSendMgmtCmd; - tTdlsSendMgmtCmdInfo *tdlsSendMgmtCmdInfo; - QDF_STATUS status = QDF_STATUS_E_FAILURE; - - /* If connected and in Infra. Only then allow this */ - if (!CSR_IS_SESSION_VALID(pMac, sessionId) || - !csr_is_conn_state_connected_infra(pMac, sessionId) || - (NULL == tdlsSendMgmt)) - return status; - tdlsSendMgmtCmd = csr_get_command_buffer(pMac); - if (!tdlsSendMgmtCmd) - return status; - tdlsSendMgmtCmdInfo = &tdlsSendMgmtCmd->u.tdlsCmd.u.tdlsSendMgmtCmdInfo; - tdlsSendMgmtCmd->sessionId = sessionId; - tdlsSendMgmtCmdInfo->frameType = tdlsSendMgmt->frameType; - tdlsSendMgmtCmdInfo->dialog = tdlsSendMgmt->dialog; - tdlsSendMgmtCmdInfo->statusCode = tdlsSendMgmt->statusCode; - tdlsSendMgmtCmdInfo->responder = tdlsSendMgmt->responder; - tdlsSendMgmtCmdInfo->peerCapability = tdlsSendMgmt->peerCapability; - qdf_mem_copy(tdlsSendMgmtCmdInfo->peerMac, tdlsSendMgmt->peerMac, - sizeof(tSirMacAddr)); - - if ((0 != tdlsSendMgmt->len) && (NULL != tdlsSendMgmt->buf)) { - tdlsSendMgmtCmdInfo->buf = qdf_mem_malloc(tdlsSendMgmt->len); - if (NULL == tdlsSendMgmtCmdInfo->buf) { - status = QDF_STATUS_E_NOMEM; - sme_err("Alloc Failed"); - return status; - } - qdf_mem_copy(tdlsSendMgmtCmdInfo->buf, tdlsSendMgmt->buf, - tdlsSendMgmt->len); - tdlsSendMgmtCmdInfo->len = tdlsSendMgmt->len; - } else { - tdlsSendMgmtCmdInfo->buf = NULL; - tdlsSendMgmtCmdInfo->len = 0; - } - - tdlsSendMgmtCmd->command = eSmeCommandTdlsSendMgmt; - tdlsSendMgmtCmd->u.tdlsCmd.size = sizeof(tTdlsSendMgmtCmdInfo); - csr_queue_sme_command(pMac, tdlsSendMgmtCmd, false); - status = QDF_STATUS_SUCCESS; - - return status; -} - -/* - * TDLS request API, called from HDD to add a TDLS peer - */ -QDF_STATUS csr_tdls_change_peer_sta(tHalHandle hHal, uint8_t sessionId, - const tSirMacAddr peerMac, - tCsrStaParams *pstaParams) -{ - tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - tSmeCmd *tdlsAddStaCmd; - QDF_STATUS status = QDF_STATUS_E_FAILURE; - - /* If connected and in Infra. Only then allow this */ - if (CSR_IS_SESSION_VALID(pMac, sessionId) && - csr_is_conn_state_connected_infra(pMac, sessionId) && - (NULL != peerMac) && (NULL != pstaParams)) { - - tdlsAddStaCmd = csr_get_command_buffer(pMac); - - if (tdlsAddStaCmd) { - tTdlsAddStaCmdInfo *tdlsAddStaCmdInfo = - &tdlsAddStaCmd->u.tdlsCmd.u.tdlsAddStaCmdInfo; - - tdlsAddStaCmdInfo->tdlsAddOper = TDLS_OPER_UPDATE; - - tdlsAddStaCmd->sessionId = sessionId; - - qdf_mem_copy(tdlsAddStaCmdInfo->peermac.bytes, - peerMac, QDF_MAC_ADDR_SIZE); - tdlsAddStaCmdInfo->capability = pstaParams->capability; - tdlsAddStaCmdInfo->uapsdQueues = - pstaParams->uapsd_queues; - tdlsAddStaCmdInfo->maxSp = pstaParams->max_sp; - qdf_mem_copy(tdlsAddStaCmdInfo->extnCapability, - pstaParams->extn_capability, - sizeof(pstaParams->extn_capability)); - - tdlsAddStaCmdInfo->htcap_present = - pstaParams->htcap_present; - if (pstaParams->htcap_present) - qdf_mem_copy(&tdlsAddStaCmdInfo->HTCap, - &pstaParams->HTCap, - sizeof(pstaParams->HTCap)); - else - qdf_mem_set(&tdlsAddStaCmdInfo->HTCap, - sizeof(pstaParams->HTCap), 0); - - tdlsAddStaCmdInfo->vhtcap_present = - pstaParams->vhtcap_present; - if (pstaParams->vhtcap_present) - qdf_mem_copy(&tdlsAddStaCmdInfo->VHTCap, - &pstaParams->VHTCap, - sizeof(pstaParams->VHTCap)); - else - qdf_mem_set(&tdlsAddStaCmdInfo->VHTCap, - sizeof(pstaParams->VHTCap), 0); - - tdlsAddStaCmdInfo->supportedRatesLen = - pstaParams->supported_rates_len; - - if (0 != pstaParams->supported_rates_len) - qdf_mem_copy(&tdlsAddStaCmdInfo->supportedRates, - pstaParams->supported_rates, - pstaParams->supported_rates_len); - - tdlsAddStaCmd->command = eSmeCommandTdlsAddPeer; - tdlsAddStaCmd->u.tdlsCmd.size = - sizeof(tTdlsAddStaCmdInfo); - csr_queue_sme_command(pMac, tdlsAddStaCmd, false); - status = QDF_STATUS_SUCCESS; - } - } - - return status; -} - -/* - * TDLS request API, called from HDD to Send Link Establishment Parameters - */ -QDF_STATUS csr_tdls_send_link_establish_params(tHalHandle hHal, - uint8_t sessionId, - const tSirMacAddr peerMac, - tCsrTdlsLinkEstablishParams * - tdlsLinkEstablishParams) -{ - tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - tSmeCmd *tdlsLinkEstablishCmd; - QDF_STATUS status = QDF_STATUS_E_FAILURE; - /* If connected and in Infra. Only then allow this */ - if (CSR_IS_SESSION_VALID(pMac, sessionId) && - csr_is_conn_state_connected_infra(pMac, sessionId) && - (NULL != peerMac)) { - tdlsLinkEstablishCmd = csr_get_command_buffer(pMac); - - if (tdlsLinkEstablishCmd) { - tTdlsLinkEstablishCmdInfo *tdlsLinkEstablishCmdInfo = - &tdlsLinkEstablishCmd->u.tdlsCmd.u. - tdlsLinkEstablishCmdInfo; - - tdlsLinkEstablishCmd->sessionId = sessionId; - - qdf_mem_copy(tdlsLinkEstablishCmdInfo->peermac.bytes, - peerMac, QDF_MAC_ADDR_SIZE); - tdlsLinkEstablishCmdInfo->isBufSta = - tdlsLinkEstablishParams->isBufSta; - tdlsLinkEstablishCmdInfo->isResponder = - tdlsLinkEstablishParams->isResponder; - tdlsLinkEstablishCmdInfo->maxSp = - tdlsLinkEstablishParams->maxSp; - tdlsLinkEstablishCmdInfo->uapsdQueues = - tdlsLinkEstablishParams->uapsdQueues; - tdlsLinkEstablishCmdInfo->isOffChannelSupported = - tdlsLinkEstablishParams->isOffChannelSupported; - qdf_mem_copy(tdlsLinkEstablishCmdInfo-> - supportedChannels, - tdlsLinkEstablishParams->supportedChannels, - tdlsLinkEstablishParams-> - supportedChannelsLen); - tdlsLinkEstablishCmdInfo->supportedChannelsLen = - tdlsLinkEstablishParams->supportedChannelsLen; - qdf_mem_copy(tdlsLinkEstablishCmdInfo-> - supportedOperClasses, - tdlsLinkEstablishParams-> - supportedOperClasses, - tdlsLinkEstablishParams-> - supportedOperClassesLen); - tdlsLinkEstablishCmdInfo->supportedOperClassesLen = - tdlsLinkEstablishParams->supportedOperClassesLen; - tdlsLinkEstablishCmdInfo->isResponder = - tdlsLinkEstablishParams->isResponder; - tdlsLinkEstablishCmdInfo->maxSp = - tdlsLinkEstablishParams->maxSp; - tdlsLinkEstablishCmdInfo->uapsdQueues = - tdlsLinkEstablishParams->uapsdQueues; - tdlsLinkEstablishCmd->command = - eSmeCommandTdlsLinkEstablish; - tdlsLinkEstablishCmd->u.tdlsCmd.size = - sizeof(tTdlsLinkEstablishCmdInfo); - csr_queue_sme_command(pMac, tdlsLinkEstablishCmd, - false); - status = QDF_STATUS_SUCCESS; - } - } - - return status; -} - -/* - * TDLS request API, called from HDD to add a TDLS peer - */ -QDF_STATUS csr_tdls_add_peer_sta(tHalHandle hHal, uint8_t sessionId, - const tSirMacAddr peerMac) -{ - tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - tSmeCmd *tdlsAddStaCmd; - QDF_STATUS status = QDF_STATUS_E_FAILURE; - - /* If connected and in Infra. Only then allow this */ - if (CSR_IS_SESSION_VALID(pMac, sessionId) && - csr_is_conn_state_connected_infra(pMac, sessionId) && - (NULL != peerMac)) { - tdlsAddStaCmd = csr_get_command_buffer(pMac); - - if (tdlsAddStaCmd) { - tTdlsAddStaCmdInfo *tdlsAddStaCmdInfo = - &tdlsAddStaCmd->u.tdlsCmd.u.tdlsAddStaCmdInfo; - - tdlsAddStaCmd->sessionId = sessionId; - tdlsAddStaCmdInfo->tdlsAddOper = TDLS_OPER_ADD; - - qdf_mem_copy(tdlsAddStaCmdInfo->peermac.bytes, - peerMac, QDF_MAC_ADDR_SIZE); - - tdlsAddStaCmd->command = eSmeCommandTdlsAddPeer; - tdlsAddStaCmd->u.tdlsCmd.size = - sizeof(tTdlsAddStaCmdInfo); - csr_queue_sme_command(pMac, tdlsAddStaCmd, false); - status = QDF_STATUS_SUCCESS; - } - } - - return status; -} - -/* - * TDLS request API, called from HDD to delete a TDLS peer - */ -QDF_STATUS csr_tdls_del_peer_sta(tHalHandle hHal, uint8_t sessionId, - const tSirMacAddr peerMac) -{ - tpAniSirGlobal pMac = PMAC_STRUCT(hHal); - tSmeCmd *tdlsDelStaCmd; - QDF_STATUS status = QDF_STATUS_E_FAILURE; - - /* If connected and in Infra. Only then allow this */ - if (CSR_IS_SESSION_VALID(pMac, sessionId) && - csr_is_conn_state_connected_infra(pMac, sessionId) && - (NULL != peerMac)) { - tdlsDelStaCmd = csr_get_command_buffer(pMac); - - if (tdlsDelStaCmd) { - tTdlsDelStaCmdInfo *tdlsDelStaCmdInfo = - &tdlsDelStaCmd->u.tdlsCmd.u.tdlsDelStaCmdInfo; - - tdlsDelStaCmd->sessionId = sessionId; - - qdf_mem_copy(tdlsDelStaCmdInfo->peermac.bytes, - peerMac, QDF_MAC_ADDR_SIZE); - - tdlsDelStaCmd->command = eSmeCommandTdlsDelPeer; - tdlsDelStaCmd->u.tdlsCmd.size = - sizeof(tTdlsDelStaCmdInfo); - csr_queue_sme_command(pMac, tdlsDelStaCmd, false); - status = QDF_STATUS_SUCCESS; - } - } - - return status; -} - -/* - * TDLS messages sent to PE . - */ -static QDF_STATUS tdls_send_message(tpAniSirGlobal pMac, uint16_t msg_type, - void *msg_data, uint32_t msg_size) -{ - - tSirMbMsg *pMsg = (tSirMbMsg *) msg_data; - - pMsg->type = msg_type; - pMsg->msgLen = (uint16_t) (msg_size); - QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_DEBUG, - ("sending msg = %d"), pMsg->type); - if (umac_send_mb_message_to_mac(pMsg) != QDF_STATUS_SUCCESS) { - sme_err("Cannot send message"); - return QDF_STATUS_E_FAILURE; - } - - return QDF_STATUS_SUCCESS; -} - -static QDF_STATUS csr_tdls_process_send_mgmt(tpAniSirGlobal pMac, tSmeCmd *cmd) -{ - tTdlsSendMgmtCmdInfo *tdlsSendMgmtCmdInfo = - &cmd->u.tdlsCmd.u.tdlsSendMgmtCmdInfo; - tSirTdlsSendMgmtReq *tdlsSendMgmtReq = NULL; - struct csr_roam_session *pSession = CSR_GET_SESSION(pMac, - cmd->sessionId); - QDF_STATUS status = QDF_STATUS_E_FAILURE; - - if (NULL == pSession) { - sme_err("pSession is NULL"); - return QDF_STATUS_E_FAILURE; - } - if (NULL == pSession->pConnectBssDesc) { - sme_err("BSS Description is not present"); - return QDF_STATUS_E_FAILURE; - } - - tdlsSendMgmtReq = - qdf_mem_malloc(sizeof(tSirTdlsSendMgmtReq) + - tdlsSendMgmtCmdInfo->len); - if (NULL == tdlsSendMgmtReq) - status = QDF_STATUS_E_NOMEM; - else - status = QDF_STATUS_SUCCESS; - - if (!QDF_IS_STATUS_SUCCESS(status)) { - sme_err("alloc failed"); - return status; - } - tdlsSendMgmtReq->sessionId = cmd->sessionId; - /* Using dialog as transactionId. This can be used to match - * response with request - */ - tdlsSendMgmtReq->transactionId = tdlsSendMgmtCmdInfo->dialog; - tdlsSendMgmtReq->reqType = tdlsSendMgmtCmdInfo->frameType; - tdlsSendMgmtReq->dialog = tdlsSendMgmtCmdInfo->dialog; - tdlsSendMgmtReq->statusCode = tdlsSendMgmtCmdInfo->statusCode; - tdlsSendMgmtReq->responder = tdlsSendMgmtCmdInfo->responder; - tdlsSendMgmtReq->peerCapability = tdlsSendMgmtCmdInfo->peerCapability; - - qdf_mem_copy(tdlsSendMgmtReq->bssid.bytes, - pSession->pConnectBssDesc->bssId, QDF_MAC_ADDR_SIZE); - - qdf_mem_copy(tdlsSendMgmtReq->peer_mac.bytes, - tdlsSendMgmtCmdInfo->peerMac, QDF_MAC_ADDR_SIZE); - - if (tdlsSendMgmtCmdInfo->len && tdlsSendMgmtCmdInfo->buf) { - qdf_mem_copy(tdlsSendMgmtReq->addIe, tdlsSendMgmtCmdInfo->buf, - tdlsSendMgmtCmdInfo->len); - - } - /* Send the request to PE. */ - sme_debug("sending TDLS Mgmt Frame req to PE"); - status = tdls_send_message(pMac, eWNI_SME_TDLS_SEND_MGMT_REQ, - (void *)tdlsSendMgmtReq, - sizeof(tSirTdlsSendMgmtReq) + - tdlsSendMgmtCmdInfo->len); - if (!QDF_IS_STATUS_SUCCESS(status)) - sme_err("Failed to send request to MAC"); - - if (tdlsSendMgmtCmdInfo->len && tdlsSendMgmtCmdInfo->buf) { - /* Done with the buf. Free it. */ - qdf_mem_free(tdlsSendMgmtCmdInfo->buf); - tdlsSendMgmtCmdInfo->buf = NULL; - tdlsSendMgmtCmdInfo->len = 0; - } - - return status; -} - -static QDF_STATUS csr_tdls_process_add_sta(tpAniSirGlobal pMac, tSmeCmd *cmd) -{ - tTdlsAddStaCmdInfo *tdlsAddStaCmdInfo = - &cmd->u.tdlsCmd.u.tdlsAddStaCmdInfo; - tSirTdlsAddStaReq *tdlsAddStaReq = NULL; - struct csr_roam_session *pSession = CSR_GET_SESSION(pMac, - cmd->sessionId); - QDF_STATUS status = QDF_STATUS_E_FAILURE; - - if (NULL == pSession) { - sme_err("pSession is NULL"); - return QDF_STATUS_E_FAILURE; - } - - if (NULL == pSession->pConnectBssDesc) { - sme_err("BSS description is not present"); - return QDF_STATUS_E_FAILURE; - } - - tdlsAddStaReq = qdf_mem_malloc(sizeof(tSirTdlsAddStaReq)); - if (NULL == tdlsAddStaReq) - status = QDF_STATUS_E_NOMEM; - else - status = QDF_STATUS_SUCCESS; - - if (!QDF_IS_STATUS_SUCCESS(status)) { - sme_err("alloc failed"); - return status; - } - tdlsAddStaReq->sessionId = cmd->sessionId; - tdlsAddStaReq->tdlsAddOper = tdlsAddStaCmdInfo->tdlsAddOper; - /* Using dialog as transactionId. This can be used to match - * response with request - */ - tdlsAddStaReq->transactionId = 0; - - qdf_mem_copy(tdlsAddStaReq->bssid.bytes, - pSession->pConnectBssDesc->bssId, QDF_MAC_ADDR_SIZE); - - qdf_copy_macaddr(&tdlsAddStaReq->peermac, - &tdlsAddStaCmdInfo->peermac); - - tdlsAddStaReq->capability = tdlsAddStaCmdInfo->capability; - tdlsAddStaReq->uapsd_queues = tdlsAddStaCmdInfo->uapsdQueues; - tdlsAddStaReq->max_sp = tdlsAddStaCmdInfo->maxSp; - - qdf_mem_copy(tdlsAddStaReq->extn_capability, - tdlsAddStaCmdInfo->extnCapability, SIR_MAC_MAX_EXTN_CAP); - tdlsAddStaReq->htcap_present = tdlsAddStaCmdInfo->htcap_present; - qdf_mem_copy(&tdlsAddStaReq->htCap, - &tdlsAddStaCmdInfo->HTCap, - sizeof(tdlsAddStaCmdInfo->HTCap)); - tdlsAddStaReq->vhtcap_present = tdlsAddStaCmdInfo->vhtcap_present; - qdf_mem_copy(&tdlsAddStaReq->vhtCap, - &tdlsAddStaCmdInfo->VHTCap, - sizeof(tdlsAddStaCmdInfo->VHTCap)); - tdlsAddStaReq->supported_rates_length = - tdlsAddStaCmdInfo->supportedRatesLen; - qdf_mem_copy(&tdlsAddStaReq->supported_rates, - tdlsAddStaCmdInfo->supportedRates, - tdlsAddStaCmdInfo->supportedRatesLen); - - sme_debug("sending TDLS Add Sta req to PE"); - status = tdls_send_message(pMac, eWNI_SME_TDLS_ADD_STA_REQ, - (void *)tdlsAddStaReq, - sizeof(tSirTdlsAddStaReq)); - if (!QDF_IS_STATUS_SUCCESS(status)) - sme_err("Failed to send request to MAC"); - - return status; -} - -static QDF_STATUS csr_tdls_process_del_sta(tpAniSirGlobal pMac, - tSmeCmd *cmd) -{ - tTdlsDelStaCmdInfo *tdlsDelStaCmdInfo = - &cmd->u.tdlsCmd.u.tdlsDelStaCmdInfo; - tSirTdlsDelStaReq *tdlsDelStaReq = NULL; - struct csr_roam_session *pSession = CSR_GET_SESSION(pMac, - cmd->sessionId); - QDF_STATUS status = QDF_STATUS_E_FAILURE; - - if (NULL == pSession) { - sme_err("pSession is NULL"); - return QDF_STATUS_E_FAILURE; - } - - if (NULL == pSession->pConnectBssDesc) { - sme_err("BSS description is not present"); - return QDF_STATUS_E_FAILURE; - } - - tdlsDelStaReq = qdf_mem_malloc(sizeof(tSirTdlsDelStaReq)); - if (NULL == tdlsDelStaReq) - status = QDF_STATUS_E_NOMEM; - else - status = QDF_STATUS_SUCCESS; - - if (!QDF_IS_STATUS_SUCCESS(status)) { - sme_err("alloc failed"); - return status; - } - tdlsDelStaReq->sessionId = cmd->sessionId; - /* Using dialog as transactionId. This can be used to match - * response with request - */ - tdlsDelStaReq->transactionId = 0; - - qdf_mem_copy(tdlsDelStaReq->bssid.bytes, - pSession->pConnectBssDesc->bssId, QDF_MAC_ADDR_SIZE); - - qdf_copy_macaddr(&tdlsDelStaReq->peermac, - &tdlsDelStaCmdInfo->peermac); - - sme_debug("sending TDLS Del Sta " MAC_ADDRESS_STR " req to PE", - MAC_ADDR_ARRAY(tdlsDelStaCmdInfo->peermac.bytes)); - status = tdls_send_message(pMac, eWNI_SME_TDLS_DEL_STA_REQ, - (void *)tdlsDelStaReq, - sizeof(tSirTdlsDelStaReq)); - if (!QDF_IS_STATUS_SUCCESS(status)) - sme_err("Failed to send request to MAC"); - - return status; -} - -/* - * commands received from CSR - */ -QDF_STATUS csr_tdls_process_cmd(tpAniSirGlobal pMac, tSmeCmd *cmd) -{ - eSmeCommandType cmdType = cmd->command; - bool status = true; - - switch (cmdType) { - case eSmeCommandTdlsSendMgmt: - { - status = csr_tdls_process_send_mgmt(pMac, cmd); - if (QDF_IS_STATUS_SUCCESS(status)) - status = false; - } - break; - case eSmeCommandTdlsAddPeer: - { - status = csr_tdls_process_add_sta(pMac, cmd); - if (QDF_IS_STATUS_SUCCESS(status)) - status = false; - } - break; - case eSmeCommandTdlsDelPeer: - { - status = csr_tdls_process_del_sta(pMac, cmd); - if (QDF_IS_STATUS_SUCCESS(status)) - status = false; - } - break; - case eSmeCommandTdlsLinkEstablish: - { - status = csr_tdls_process_link_establish(pMac, cmd); - if (QDF_IS_STATUS_SUCCESS(status)) - status = false; - } - break; - default: - /* TODO: Add defualt handling */ - break; - } - return status; -} - -QDF_STATUS csr_tdls_process_link_establish(tpAniSirGlobal pMac, tSmeCmd *cmd) -{ - tTdlsLinkEstablishCmdInfo *tdlsLinkEstablishCmdInfo = - &cmd->u.tdlsCmd.u.tdlsLinkEstablishCmdInfo; - tSirTdlsLinkEstablishReq *tdlsLinkEstablishReq = NULL; - QDF_STATUS status = QDF_STATUS_E_FAILURE; - struct csr_roam_session *pSession = CSR_GET_SESSION(pMac, - cmd->sessionId); - - if (NULL == pSession) { - sme_err("pSession is NULL"); - return QDF_STATUS_E_FAILURE; - } - - tdlsLinkEstablishReq = qdf_mem_malloc(sizeof(tSirTdlsLinkEstablishReq)); - - if (tdlsLinkEstablishReq == NULL) { - sme_err("alloc failed"); - return QDF_STATUS_E_NOMEM; - } - tdlsLinkEstablishReq->sessionId = cmd->sessionId; - /* Using dialog as transactionId. This can be used to match - * response with request - */ - tdlsLinkEstablishReq->transactionId = 0; - qdf_copy_macaddr(&tdlsLinkEstablishReq->peermac, - &tdlsLinkEstablishCmdInfo->peermac); - qdf_mem_copy(tdlsLinkEstablishReq->bssid.bytes, - pSession->pConnectBssDesc->bssId, QDF_MAC_ADDR_SIZE); - qdf_mem_copy(tdlsLinkEstablishReq->supportedChannels, - tdlsLinkEstablishCmdInfo->supportedChannels, - tdlsLinkEstablishCmdInfo->supportedChannelsLen); - tdlsLinkEstablishReq->supportedChannelsLen = - tdlsLinkEstablishCmdInfo->supportedChannelsLen; - qdf_mem_copy(tdlsLinkEstablishReq->supportedOperClasses, - tdlsLinkEstablishCmdInfo->supportedOperClasses, - tdlsLinkEstablishCmdInfo->supportedOperClassesLen); - tdlsLinkEstablishReq->supportedOperClassesLen = - tdlsLinkEstablishCmdInfo->supportedOperClassesLen; - tdlsLinkEstablishReq->isBufSta = tdlsLinkEstablishCmdInfo->isBufSta; - tdlsLinkEstablishReq->isResponder = - tdlsLinkEstablishCmdInfo->isResponder; - tdlsLinkEstablishReq->uapsdQueues = - tdlsLinkEstablishCmdInfo->uapsdQueues; - tdlsLinkEstablishReq->maxSp = tdlsLinkEstablishCmdInfo->maxSp; - - sme_debug("sending TDLS Link Establish Request to PE"); - status = tdls_send_message(pMac, eWNI_SME_TDLS_LINK_ESTABLISH_REQ, - (void *)tdlsLinkEstablishReq, - sizeof(tSirTdlsLinkEstablishReq)); - if (!QDF_IS_STATUS_SUCCESS(status)) - sme_err("Failed to send request to MAC"); - - return status; -} - /* * TDLS Message processor, will be called after TDLS message recieved from * PE @@ -671,17 +50,6 @@ QDF_STATUS tdls_msg_processor(tpAniSirGlobal pMac, uint16_t msgType, void *pMsgBuf) { tCsrRoamInfo *roamInfo; - eCsrRoamResult roamResult; - tSirSmeRsp *sme_rsp = pMsgBuf; - tSirTdlsAddStaRsp *addStaRsp = (tSirTdlsAddStaRsp *) pMsgBuf; - tSirTdlsDelStaRsp *delStaRsp = (tSirTdlsDelStaRsp *) pMsgBuf; - tpSirTdlsDelStaInd pSirTdlsDelStaInd = (tpSirTdlsDelStaInd) pMsgBuf; - tpSirTdlsDelAllPeerInd pSirTdlsDelAllPeerInd = - (tpSirTdlsDelAllPeerInd) pMsgBuf; - tpSirMgmtTxCompletionInd tdls_tx_comp_ind = - (tpSirMgmtTxCompletionInd) pMsgBuf; - tSirTdlsLinkEstablishReqRsp *linkEstablishReqRsp = - (tSirTdlsLinkEstablishReqRsp *) pMsgBuf; tSirTdlsEventnotify *tevent = (tSirTdlsEventnotify *) pMsgBuf; roamInfo = qdf_mem_malloc(sizeof(*roamInfo)); @@ -690,107 +58,6 @@ QDF_STATUS tdls_msg_processor(tpAniSirGlobal pMac, uint16_t msgType, return QDF_STATUS_E_FAILURE; } switch (msgType) { - case eWNI_SME_TDLS_SEND_MGMT_RSP: - { - tSirSmeRsp *msg = (tSirSmeRsp *) pMsgBuf; - tCsrRoamInfo roam_info = {0}; - - /* remove pending eSmeCommandTdlsDiscovery command */ - QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_DEBUG, - FL("sme_rsp->sessionId[%d] eSmeCommandTdlsSendMgmt"), - sme_rsp->sessionId); - csr_tdls_remove_sme_cmd(pMac, eSmeCommandTdlsSendMgmt, - sme_rsp->sessionId); - - if (eSIR_SME_SUCCESS != msg->statusCode) { - /* Tx failed, so there wont be any ack confirmation*/ - /* Indicate ack failure to upper layer */ - roamInfo->reasonCode = 0; - csr_roam_call_callback(pMac, msg->sessionId, - &roam_info, 0, - eCSR_ROAM_RESULT_MGMT_TX_COMPLETE_IND, - 0); - } - break; - } - case eWNI_SME_TDLS_ADD_STA_RSP: - qdf_copy_macaddr(&roamInfo->peerMac, &addStaRsp->peermac); - roamInfo->staId = addStaRsp->staId; - roamInfo->ucastSig = addStaRsp->ucastSig; - roamInfo->bcastSig = addStaRsp->bcastSig; - roamInfo->statusCode = addStaRsp->statusCode; - /* - * register peer with TL, we have to go through HDD as - * this is the only way to register any STA with TL. - */ - if (addStaRsp->tdlsAddOper == TDLS_OPER_ADD) - roamResult = eCSR_ROAM_RESULT_ADD_TDLS_PEER; - else /* addStaRsp->tdlsAddOper must be TDLS_OPER_UPDATE */ - roamResult = eCSR_ROAM_RESULT_UPDATE_TDLS_PEER; - csr_roam_call_callback(pMac, addStaRsp->sessionId, - roamInfo, 0, eCSR_ROAM_TDLS_STATUS_UPDATE, - roamResult); - - /* remove pending eSmeCommandTdlsDiscovery command */ - csr_tdls_remove_sme_cmd(pMac, eSmeCommandTdlsAddPeer, - addStaRsp->sessionId); - break; - case eWNI_SME_TDLS_DEL_STA_RSP: - qdf_copy_macaddr(&roamInfo->peerMac, &delStaRsp->peermac); - roamInfo->staId = delStaRsp->staId; - roamInfo->statusCode = delStaRsp->statusCode; - /* - * register peer with TL, we have to go through HDD as - * this is the only way to register any STA with TL. - */ - csr_roam_call_callback(pMac, delStaRsp->sessionId, - roamInfo, 0, - eCSR_ROAM_TDLS_STATUS_UPDATE, - eCSR_ROAM_RESULT_DELETE_TDLS_PEER); - - csr_tdls_remove_sme_cmd(pMac, eSmeCommandTdlsDelPeer, - delStaRsp->sessionId); - break; - case eWNI_SME_TDLS_DEL_STA_IND: - qdf_copy_macaddr(&roamInfo->peerMac, - &pSirTdlsDelStaInd->peermac); - roamInfo->staId = pSirTdlsDelStaInd->staId; - roamInfo->reasonCode = pSirTdlsDelStaInd->reasonCode; - - /* Sending the TEARDOWN indication to HDD. */ - csr_roam_call_callback(pMac, - pSirTdlsDelStaInd->sessionId, roamInfo, - 0, eCSR_ROAM_TDLS_STATUS_UPDATE, - eCSR_ROAM_RESULT_TEARDOWN_TDLS_PEER_IND); - break; - case eWNI_SME_TDLS_DEL_ALL_PEER_IND: - /* Sending the TEARDOWN indication to HDD. */ - csr_roam_call_callback(pMac, - pSirTdlsDelAllPeerInd->sessionId, - roamInfo, 0, - eCSR_ROAM_TDLS_STATUS_UPDATE, - eCSR_ROAM_RESULT_DELETE_ALL_TDLS_PEER_IND); - break; - case eWNI_SME_MGMT_FRM_TX_COMPLETION_IND: - roamInfo->reasonCode = - tdls_tx_comp_ind->txCompleteStatus; - - csr_roam_call_callback(pMac, - tdls_tx_comp_ind->sessionId, - roamInfo, 0, - eCSR_ROAM_RESULT_MGMT_TX_COMPLETE_IND, - 0); - break; - case eWNI_SME_TDLS_LINK_ESTABLISH_RSP: - csr_roam_call_callback(pMac, - linkEstablishReqRsp->sessionId, - roamInfo, 0, - eCSR_ROAM_TDLS_STATUS_UPDATE, - eCSR_ROAM_RESULT_LINK_ESTABLISH_REQ_RSP); - /* remove pending eSmeCommandTdlsLinkEstablish command */ - csr_tdls_remove_sme_cmd(pMac, eSmeCommandTdlsLinkEstablish, - linkEstablishReqRsp->sessionId); - break; case eWNI_SME_TDLS_SHOULD_DISCOVER: qdf_copy_macaddr(&roamInfo->peerMac, &tevent->peermac); roamInfo->reasonCode = tevent->peer_reason; diff --git a/core/wma/src/wma_main.c b/core/wma/src/wma_main.c index 34e5309ed3ed..431179ea02a6 100644 --- a/core/wma/src/wma_main.c +++ b/core/wma/src/wma_main.c @@ -2695,13 +2695,6 @@ QDF_STATUS wma_open(struct wlan_objmgr_psoc *psoc, wma_handle->ptrn_match_enable_all_vdev = (cds_cfg->wow_enable & 0x02) ? true : false; -#if defined(FEATURE_WLAN_TDLS) && !defined(CONVERGED_TDLS_ENABLE) - wmi_unified_register_event_handler(wma_handle->wmi_handle, - WMI_TDLS_PEER_EVENTID, - wma_tdls_event_handler, - WMA_RX_SERIALIZER_CTX); -#endif /* FEATURE_WLAN_TDLS */ - /* register for install key completion event */ wmi_unified_register_event_handler(wma_handle->wmi_handle, WMI_VDEV_INSTALL_KEY_COMPLETE_EVENTID,