diff --git a/components/mlme/core/src/wlan_mlme_main.c b/components/mlme/core/src/wlan_mlme_main.c index 3af2f88ad195..929a936c5d14 100644 --- a/components/mlme/core/src/wlan_mlme_main.c +++ b/components/mlme/core/src/wlan_mlme_main.c @@ -667,6 +667,8 @@ mlme_init_qos_edca_params(struct wlan_objmgr_psoc *psoc, edca_params->enable_edca_params = cfg_get(psoc, CFG_EDCA_ENABLE_PARAM); + edca_params->enable_wmm_txop = + cfg_get(psoc, CFG_ENABLE_WMM_TXOP); edca_params->edca_ac_vo.vo_cwmin = cfg_get(psoc, CFG_EDCA_VO_CWMIN); edca_params->edca_ac_vo.vo_cwmax = diff --git a/components/mlme/dispatcher/inc/cfg_mlme_edca_params.h b/components/mlme/dispatcher/inc/cfg_mlme_edca_params.h index b9d0801d509f..14ab0046367c 100644 --- a/components/mlme/dispatcher/inc/cfg_mlme_edca_params.h +++ b/components/mlme/dispatcher/inc/cfg_mlme_edca_params.h @@ -1,5 +1,6 @@ /* * Copyright (c) 2011-2019 The Linux Foundation. All rights reserved. + * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved. * * Permission to use, copy, modify, and/or distribute this software for * any purpose with or without fee is hereby granted, provided that the @@ -481,6 +482,28 @@ 0, \ "Enable edca parameter") +/* + * + * enable_wmm_txop - Enable WMM based txop feature + * @Min: 0 + * @Max: 1 + * @Default: 1 + * + * This ini is used to enable/disable the WMM based txop feature in FW + * + * Related: None + * + * Supported Feature: STA + * + * Usage: Internal + * + * + */ +#define CFG_ENABLE_WMM_TXOP CFG_INI_BOOL( \ + "enable_wmm_txop", \ + 1, \ + "Enable WMM TXOP") + /* * * gEdcaVoCwmin - Set Cwmin value for QCA_WLAN_AC_VO @@ -838,6 +861,7 @@ CFG(CFG_EDCA_BK_AIFS) \ CFG(CFG_EDCA_BE_CWMIN) \ CFG(CFG_EDCA_BE_CWMAX) \ + CFG(CFG_ENABLE_WMM_TXOP) \ CFG(CFG_EDCA_BE_AIFS) #endif /* __CFG_MLME_EDCA__PARAM_H */ diff --git a/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h b/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h index 48d648184f6b..328d3edf40f4 100644 --- a/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h +++ b/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h @@ -376,6 +376,7 @@ struct wlan_mlme_edca_params { struct mlme_cfg_str etsi_acvo_b; bool enable_edca_params; + bool enable_wmm_txop; struct mlme_edca_ac_vo edca_ac_vo; struct mlme_edca_ac_vi edca_ac_vi; struct mlme_edca_ac_bk edca_ac_bk; diff --git a/components/nan/core/src/nan_main.c b/components/nan/core/src/nan_main.c index 26bfcce48b7d..738cd08a1a07 100644 --- a/components/nan/core/src/nan_main.c +++ b/components/nan/core/src/nan_main.c @@ -885,7 +885,15 @@ fail: psoc_nan_obj->nan_social_ch_2g_freq = 0; psoc_nan_obj->nan_social_ch_5g_freq = 0; nan_set_discovery_state(psoc, NAN_DISC_DISABLED); - policy_mgr_check_n_start_opportunistic_timer(psoc); + if (ucfg_is_nan_dbs_supported(psoc)) + policy_mgr_check_n_start_opportunistic_timer(psoc); + + /* + * If FW respond with NAN enable failure, then TDLS should be enable + * again if there is TDLS connection exist earlier. + * decrement the active TDLS session. + */ + ucfg_tdls_notify_connect_failure(psoc); done: nan_conc_callback = psoc_nan_obj->cb_obj.nan_concurrency_update; @@ -1113,7 +1121,6 @@ bool nan_is_enable_allowed(struct wlan_objmgr_psoc *psoc, uint32_t nan_ch_freq) } return (NAN_DISC_DISABLED == nan_get_discovery_state(psoc) && - ucfg_is_nan_conc_control_supported(psoc) && policy_mgr_allow_concurrency(psoc, PM_NAN_DISC_MODE, nan_ch_freq, HW_MODE_20_MHZ)); } diff --git a/components/nan/dispatcher/src/nan_ucfg_api.c b/components/nan/dispatcher/src/nan_ucfg_api.c index 7b23364a52a8..f32734f19919 100644 --- a/components/nan/dispatcher/src/nan_ucfg_api.c +++ b/components/nan/dispatcher/src/nan_ucfg_api.c @@ -1,6 +1,6 @@ /* * Copyright (c) 2017-2021 The Linux Foundation. All rights reserved. - * Copyright (c) 2021 Qualcomm Innovation Center, Inc. All rights reserved. + * Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved. * * Permission to use, copy, modify, and/or distribute this software for * any purpose with or without fee is hereby granted, provided that the @@ -35,6 +35,7 @@ #include "cfg_nan.h" #include "wlan_mlme_api.h" #include "cfg_nan_api.h" +#include "wlan_tdls_ucfg_api.h" struct wlan_objmgr_psoc; struct wlan_objmgr_vdev; @@ -876,8 +877,16 @@ post_msg: if (req_type == NAN_ENABLE_REQ) { nan_set_discovery_state(psoc, NAN_DISC_DISABLED); - policy_mgr_check_n_start_opportunistic_timer( - psoc); + if (ucfg_is_nan_dbs_supported(psoc)) + policy_mgr_check_n_start_opportunistic_timer(psoc); + + /* + * If FW respond with NAN enable failure, then + * TDLS should be enable again if there is TDLS + * connection exist earlier. + * decrement the active TDLS session. + */ + ucfg_tdls_notify_connect_failure(psoc); } else if (req_type == NAN_DISABLE_REQ) { nan_disable_cleanup(psoc); } diff --git a/components/p2p/core/src/wlan_p2p_off_chan_tx.c b/components/p2p/core/src/wlan_p2p_off_chan_tx.c index 38fb76a21546..1478df85dce7 100644 --- a/components/p2p/core/src/wlan_p2p_off_chan_tx.c +++ b/components/p2p/core/src/wlan_p2p_off_chan_tx.c @@ -1,5 +1,6 @@ /* * Copyright (c) 2017-2021 The Linux Foundation. All rights reserved. + * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved. * * Permission to use, copy, modify, and/or distribute this software for * any purpose with or without fee is hereby granted, provided that the @@ -1545,38 +1546,6 @@ static QDF_STATUS p2p_disable_tx_timer(struct tx_action_context *tx_ctx) return status; } -/** - * is_rmf_mgmt_action_frame() - check RMF action frame by category - * @action_category: action frame actegory - * - * This function check the frame is robust mgmt action frame or not - * - * Return: true - if category is robust mgmt type - */ -static bool is_rmf_mgmt_action_frame(uint8_t action_category) -{ - switch (action_category) { - case ACTION_CATEGORY_SPECTRUM_MGMT: - case ACTION_CATEGORY_QOS: - case ACTION_CATEGORY_DLS: - case ACTION_CATEGORY_BACK: - case ACTION_CATEGORY_RRM: - case ACTION_FAST_BSS_TRNST: - case ACTION_CATEGORY_SA_QUERY: - case ACTION_CATEGORY_PROTECTED_DUAL_OF_PUBLIC_ACTION: - case ACTION_CATEGORY_WNM: - case ACTION_CATEGORY_MESH_ACTION: - case ACTION_CATEGORY_MULTIHOP_ACTION: - case ACTION_CATEGORY_DMG: - case ACTION_CATEGORY_FST: - case ACTION_CATEGORY_VENDOR_SPECIFIC_PROTECTED: - return true; - default: - break; - } - return false; -} - /** * p2p_populate_rmf_field() - populate unicast rmf frame * @tx_ctx: tx_action_context @@ -1620,7 +1589,7 @@ static QDF_STATUS p2p_populate_rmf_field(struct tx_action_context *tx_ctx, * to get the actual action category we need to ignore the MSB. */ action_category = action_hdr->action_category & 0x7f; - if (!is_rmf_mgmt_action_frame(action_category)) { + if (!wlan_mgmt_is_rmf_mgmt_action_frame(action_category)) { p2p_debug("non rmf act frame 0x%x category %x", tx_ctx->frame_info.sub_type, action_hdr->action_category); diff --git a/components/pmo/dispatcher/inc/wlan_pmo_wow_public_struct.h b/components/pmo/dispatcher/inc/wlan_pmo_wow_public_struct.h index 88b23b07ac3f..a38e36c8e84b 100644 --- a/components/pmo/dispatcher/inc/wlan_pmo_wow_public_struct.h +++ b/components/pmo/dispatcher/inc/wlan_pmo_wow_public_struct.h @@ -1,5 +1,6 @@ /* * Copyright (c) 2017-2021 The Linux Foundation. All rights reserved. + * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved. * * Permission to use, copy, modify, and/or distribute this software for * any purpose with or without fee is hereby granted, provided that the @@ -65,6 +66,7 @@ #define PMO_MAC_ACTION_FST 18 #define PMO_MAC_ACTION_RVS 19 #define PMO_MAC_ACTION_VHT 21 +#define PMO_VENDOR_PROTECTED 126 #define PMO_MAC_ACTION_MAX 256 /* @@ -96,6 +98,7 @@ * PMO_ACTION_FST 18 1 * PMO_ACTION_RVS 19 1 * PMO_ACTION_VHT 21 1 + * PMO_VENDOR_PROTECTED 126 1 * ----------------------------+------+-------+ */ #define SYSTEM_SUSPEND_ALLOWED_ACTION_FRAMES_BITMAP0 \ @@ -112,7 +115,9 @@ #define ALLOWED_ACTION_FRAMES_BITMAP1 0x0 #define ALLOWED_ACTION_FRAMES_BITMAP2 0x0 -#define ALLOWED_ACTION_FRAMES_BITMAP3 0x0 +#define ALLOWED_ACTION_FRAMES_BITMAP3 \ + (1 << (PMO_VENDOR_PROTECTED % 32)) + #define ALLOWED_ACTION_FRAMES_BITMAP4 0x0 #define ALLOWED_ACTION_FRAMES_BITMAP5 0x0 #define ALLOWED_ACTION_FRAMES_BITMAP6 0x0 diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c index 2a1b2efd5349..1ee2bb2b65d9 100644 --- a/core/hdd/src/wlan_hdd_main.c +++ b/core/hdd/src/wlan_hdd_main.c @@ -10552,6 +10552,13 @@ void hdd_send_mscs_action_frame(struct hdd_context *hdd_ctx, uint64_t mscs_vo_pkt_delta; unsigned long tx_vo_pkts; + /* + * To disable MSCS feature in driver set mscs_pkt_threshold = 0 + * in ini file. + */ + if (!hdd_ctx->config->mscs_pkt_threshold) + return; + tx_vo_pkts = adapter->hdd_stats.tx_rx_stats.tx_classified_ac[SME_AC_VO]; if (!adapter->mscs_counter) diff --git a/core/mac/inc/qwlan_version.h b/core/mac/inc/qwlan_version.h index 4e28b018aad0..3ddd2df15999 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -32,9 +32,9 @@ #define QWLAN_VERSION_MAJOR 2 #define QWLAN_VERSION_MINOR 0 #define QWLAN_VERSION_PATCH 8 -#define QWLAN_VERSION_EXTRA "J" +#define QWLAN_VERSION_EXTRA "R" #define QWLAN_VERSION_BUILD 31 -#define QWLAN_VERSIONSTR "2.0.8.31J" +#define QWLAN_VERSIONSTR "2.0.8.31R" #endif /* QWLAN_VERSION_H */ diff --git a/core/mac/inc/sir_mac_prot_def.h b/core/mac/inc/sir_mac_prot_def.h index a3f9e9f778ff..f124b5fb4be4 100644 --- a/core/mac/inc/sir_mac_prot_def.h +++ b/core/mac/inc/sir_mac_prot_def.h @@ -1,5 +1,6 @@ /* * Copyright (c) 2011-2020 The Linux Foundation. All rights reserved. + * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved. * * Permission to use, copy, modify, and/or distribute this software for * any purpose with or without fee is hereby granted, provided that the @@ -134,6 +135,7 @@ /* block acknowledgment action frame types */ #define SIR_MAC_ACTION_VENDOR_SPECIFIC 9 #define SIR_MAC_ACTION_VENDOR_SPECIFIC_CATEGORY 0x7F +#define SIR_MAC_PROT_ACTION_VENDOR_SPECIFIC_CATEGORY 0x7E #define SIR_MAC_ACTION_P2P_SUBTYPE_PRESENCE_RSP 2 /* Public Action for 20/40 BSS Coexistence */ diff --git a/core/mac/src/pe/lim/lim_ft.c b/core/mac/src/pe/lim/lim_ft.c index a66585ca24a2..0017167ac437 100644 --- a/core/mac/src/pe/lim/lim_ft.c +++ b/core/mac/src/pe/lim/lim_ft.c @@ -1,5 +1,6 @@ /* * Copyright (c) 2012-2021 The Linux Foundation. All rights reserved. + * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved. * * Permission to use, copy, modify, and/or distribute this software for * any purpose with or without fee is hereby granted, provided that the @@ -735,10 +736,8 @@ void lim_fill_ft_session(struct mac_context *mac, #ifdef WLAN_FEATURE_11W ft_session->limRmfEnabled = pe_session->limRmfEnabled; #endif - if ((ft_session->limRFBand == REG_BAND_2G) && - (ft_session->htSupportedChannelWidthSet == - eHT_CHANNEL_WIDTH_40MHZ)) - lim_init_obss_params(mac, ft_session); + /* Load default OBSS parameters to session entry */ + lim_init_obss_params(mac, ft_session); ft_session->enableHtSmps = pe_session->enableHtSmps; ft_session->htSmpsvalue = pe_session->htSmpsvalue; 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 1a683db31d7d..09e65cfb444b 100644 --- a/core/mac/src/pe/lim/lim_process_action_frame.c +++ b/core/mac/src/pe/lim/lim_process_action_frame.c @@ -1606,7 +1606,6 @@ void lim_process_action_frame(struct mac_context *mac_ctx, int8_t rssi; uint32_t frame_len = WMA_GET_RX_PAYLOAD_LEN(rx_pkt_info); tpSirMacVendorSpecificFrameHdr vendor_specific; - uint8_t oui[] = { 0x00, 0x00, 0xf0 }; uint8_t dpp_oui[] = { 0x50, 0x6F, 0x9A, 0x1A }; tpSirMacVendorSpecificPublicActionFrameHdr pub_action; @@ -1617,8 +1616,8 @@ void lim_process_action_frame(struct mac_context *mac_ctx, } #ifdef WLAN_FEATURE_11W - if (lim_is_robust_mgmt_action_frame(action_hdr->category) && - lim_drop_unprotected_action_frame(mac_ctx, session, + if (wlan_mgmt_is_rmf_mgmt_action_frame(action_hdr->category) && + lim_drop_unprotected_action_frame(mac_ctx, session, mac_hdr_11w, action_hdr->category)) return; #endif @@ -1818,6 +1817,7 @@ void lim_process_action_frame(struct mac_context *mac_ctx, break; case SIR_MAC_ACTION_VENDOR_SPECIFIC_CATEGORY: + case SIR_MAC_PROT_ACTION_VENDOR_SPECIFIC_CATEGORY: vendor_specific = (tpSirMacVendorSpecificFrameHdr) action_hdr; mac_hdr = NULL; @@ -1829,12 +1829,9 @@ void lim_process_action_frame(struct mac_context *mac_ctx, return; } - /* Check if it is a vendor specific action frame. */ - if (LIM_IS_STA_ROLE(session) && - (!qdf_mem_cmp(session->self_mac_addr, - &mac_hdr->da[0], sizeof(tSirMacAddr))) - && IS_WES_MODE_ENABLED(mac_ctx) - && !qdf_mem_cmp(vendor_specific->Oui, oui, 3)) { + /* Forward all vendor specific action frames. */ + if (!qdf_mem_cmp(session->self_mac_addr, + &mac_hdr->da[0], sizeof(tSirMacAddr))) { pe_debug("Rcvd Vendor specific frame OUI: %x %x %x", vendor_specific->Oui[0], vendor_specific->Oui[1], @@ -1854,16 +1851,8 @@ void lim_process_action_frame(struct mac_context *mac_ctx, WMA_GET_RX_RSSI_NORMALIZED( rx_pkt_info), RXMGMT_FLAG_NONE); } else { - pe_debug("Dropping the vendor specific action frame" - "beacause of (WES Mode not enabled " - "(WESMODE: %d) or OUI mismatch " - "(%02x %02x %02x) or not received with" - "SelfSta address) system role: %d", - IS_WES_MODE_ENABLED(mac_ctx), - vendor_specific->Oui[0], - vendor_specific->Oui[1], - vendor_specific->Oui[2], - GET_LIM_SYSTEM_ROLE(session)); + pe_debug("Dropping the vendor specific action frame SelfSta address system role: %d", + GET_LIM_SYSTEM_ROLE(session)); } break; case ACTION_CATEGORY_PUBLIC: @@ -1896,11 +1885,15 @@ void lim_process_action_frame(struct mac_context *mac_ctx, /* send the frame to supplicant */ /* fallthrough */ case SIR_MAC_ACTION_VENDOR_SPECIFIC_CATEGORY: + case SIR_MAC_PROT_ACTION_VENDOR_SPECIFIC_CATEGORY: case SIR_MAC_ACTION_2040_BSS_COEXISTENCE: case SIR_MAC_ACTION_GAS_INITIAL_REQUEST: case SIR_MAC_ACTION_GAS_INITIAL_RESPONSE: case SIR_MAC_ACTION_GAS_COMEBACK_REQUEST: case SIR_MAC_ACTION_GAS_COMEBACK_RESPONSE: + default: + pe_debug("Public action frame: %d", + action_hdr->actionID); /* * Forward to the SME to HDD to wpa_supplicant * type is ACTION @@ -1914,10 +1907,6 @@ void lim_process_action_frame(struct mac_context *mac_ctx, WMA_GET_RX_RSSI_NORMALIZED( rx_pkt_info), RXMGMT_FLAG_NONE); break; - default: - pe_debug("Unhandled public action frame: %d", - action_hdr->actionID); - break; } break; diff --git a/core/mac/src/pe/lim/lim_timer_utils.c b/core/mac/src/pe/lim/lim_timer_utils.c index a43ba3293280..2e3892e5293c 100644 --- a/core/mac/src/pe/lim/lim_timer_utils.c +++ b/core/mac/src/pe/lim/lim_timer_utils.c @@ -751,11 +751,16 @@ lim_deactivate_and_change_per_sta_id_timer(struct mac_context *mac, uint32_t tim switch (timerId) { case eLIM_CNF_WAIT_TIMER: - if (tx_timer_deactivate - (&mac->lim.lim_timers.gpLimCnfWaitTimer[staId]) - != TX_SUCCESS) { + if (staId >= (mac->lim.maxStation + 1)) { + pe_err("Invalid staId = %d ", staId); + return; + } + + if (tx_timer_deactivate(&mac->lim.lim_timers.gpLimCnfWaitTimer[staId]) + != TX_SUCCESS) { pe_err("unable to deactivate CNF wait timer"); } + /* Change timer to reactivate it in future */ val = mac->mlme_cfg->sta.wait_cnf_timeout; val = SYS_MS_TO_TICKS(val); diff --git a/core/mac/src/pe/lim/lim_utils.c b/core/mac/src/pe/lim/lim_utils.c index d456c3f29f4c..6e85825a8c3f 100644 --- a/core/mac/src/pe/lim/lim_utils.c +++ b/core/mac/src/pe/lim/lim_utils.c @@ -6652,46 +6652,6 @@ void lim_update_obss_scanparams(struct pe_session *session, return; } -/** - * lim_is_robust_mgmt_action_frame() - Check if action category is - * robust action frame - * @action_category: Action frame category. - * - * This function is used to check if given action category is robust - * action frame. - * - * Return: bool - */ -bool lim_is_robust_mgmt_action_frame(uint8_t action_category) -{ - switch (action_category) { - /* - * NOTE: This function doesn't take care of the DMG - * (Directional Multi-Gigatbit) BSS case as 8011ad - * support is not yet added. In future, if the support - * is required then this function need few more arguments - * and little change in logic. - */ - case ACTION_CATEGORY_SPECTRUM_MGMT: - case ACTION_CATEGORY_QOS: - case ACTION_CATEGORY_DLS: - case ACTION_CATEGORY_BACK: - case ACTION_CATEGORY_RRM: - case ACTION_FAST_BSS_TRNST: - case ACTION_CATEGORY_SA_QUERY: - case ACTION_CATEGORY_PROTECTED_DUAL_OF_PUBLIC_ACTION: - case ACTION_CATEGORY_WNM: - case ACTION_CATEGORY_MESH_ACTION: - case ACTION_CATEGORY_MULTIHOP_ACTION: - case ACTION_CATEGORY_FST: - return true; - default: - pe_debug("non-PMF action category: %d", action_category); - break; - } - return false; -} - /** * lim_compute_ext_cap_ie_length - compute the length of ext cap ie * based on the bits set diff --git a/core/mac/src/pe/lim/lim_utils.h b/core/mac/src/pe/lim/lim_utils.h index 6126ac888c27..6b2e0103741b 100644 --- a/core/mac/src/pe/lim/lim_utils.h +++ b/core/mac/src/pe/lim/lim_utils.h @@ -1081,7 +1081,6 @@ static inline void lim_deactivate_and_change_timer_host_roam( {} #endif -bool lim_is_robust_mgmt_action_frame(uint8_t action_category); uint8_t lim_compute_ext_cap_ie_length(tDot11fIEExtCap *ext_cap); void lim_update_caps_info_for_bss(struct mac_context *mac_ctx, diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c index 2d5aaeb43567..854b6c35a72e 100644 --- a/core/sme/src/csr/csr_api_roam.c +++ b/core/sme/src/csr/csr_api_roam.c @@ -21017,17 +21017,21 @@ static bool csr_is_sae_single_pmk_vsie_ap(struct bss_description *bss_des) * @mac_ctx: mac context * @session: Session * @vdev_id: session id + * @psk_pmk: pmk of roamed AP + * @pmk_len: pmk length * * Return: True if same pmk IE is present */ static void csr_check_and_set_sae_single_pmk_cap(struct mac_context *mac_ctx, struct csr_roam_session *session, - uint8_t vdev_id) + uint8_t vdev_id, uint8_t *psk_pmk, + uint8_t pmk_len) { struct wlan_objmgr_vdev *vdev; struct mlme_pmk_info *pmk_info; tPmkidCacheInfo *pmkid_cache; + struct wlan_crypto_pmksa *roam_sync_pmksa; int32_t keymgmt; bool val, lookup_success; @@ -21052,9 +21056,28 @@ csr_check_and_set_sae_single_pmk_cap(struct mac_context *mac_ctx, if (!val) goto end; - wlan_crypto_set_sae_single_pmk_bss_cap(vdev, - (struct qdf_mac_addr *)session->pConnectBssDesc->bssId, - true); + roam_sync_pmksa = qdf_mem_malloc(sizeof(*roam_sync_pmksa)); + if (roam_sync_pmksa) { + qdf_copy_macaddr(&roam_sync_pmksa->bssid, + (struct qdf_mac_addr *) + &session->pConnectBssDesc->bssId); + roam_sync_pmksa->single_pmk_supported = true; + roam_sync_pmksa->pmk_len = pmk_len; + qdf_mem_copy(roam_sync_pmksa->pmk, psk_pmk, + roam_sync_pmksa->pmk_len); + sme_debug("SPMK received for " QDF_MAC_ADDR_FMT + "pmk_len:%d", QDF_MAC_ADDR_REF( + roam_sync_pmksa->bssid.bytes), + roam_sync_pmksa->pmk_len); + /* update single pmk info for roamed ap to pmk table */ + wlan_crypto_set_sae_single_pmk_info(vdev, + roam_sync_pmksa); + + qdf_mem_zero(roam_sync_pmksa, sizeof(*roam_sync_pmksa)); + qdf_mem_free(roam_sync_pmksa); + } else { + goto end; + } pmkid_cache = qdf_mem_malloc(sizeof(*pmkid_cache)); if (!pmkid_cache) @@ -21107,7 +21130,8 @@ end: static inline void csr_check_and_set_sae_single_pmk_cap(struct mac_context *mac_ctx, struct csr_roam_session *session, - uint8_t vdev_id) + uint8_t vdev_id, uint8_t *psk_pmk, + uint8_t pmk_len) { } #endif @@ -21330,8 +21354,12 @@ csr_process_roam_sync_callback(struct mac_context *mac_ctx, mac_ctx->psoc); mac_ctx->sme.set_connection_info_cb(false); - csr_check_and_set_sae_single_pmk_cap(mac_ctx, session, - session_id); + if (roam_synch_data->pmk_len) + csr_check_and_set_sae_single_pmk_cap( + mac_ctx, session, + session_id, + roam_synch_data->pmk, + roam_synch_data->pmk_len); if (ucfg_pkt_capture_get_pktcap_mode(mac_ctx->psoc)) ucfg_pkt_capture_record_channel(vdev); diff --git a/core/wma/src/wma_dev_if.c b/core/wma/src/wma_dev_if.c index 68da62cca50f..507fd43a2967 100644 --- a/core/wma/src/wma_dev_if.c +++ b/core/wma/src/wma_dev_if.c @@ -2538,6 +2538,16 @@ QDF_STATUS wma_post_vdev_create_setup(struct wlan_objmgr_vdev *vdev) status); } + wma_debug("Setting WMI_VDEV_PARAM_WMM_TXOP_ENABLE: %d", + mac->mlme_cfg->edca_params.enable_wmm_txop); + + status = wma_vdev_set_param(wma_handle->wmi_handle, vdev_id, + WMI_VDEV_PARAM_WMM_TXOP_ENABLE, + mac->mlme_cfg->edca_params.enable_wmm_txop); + + if (QDF_IS_STATUS_ERROR(status)) + wma_err("failed to set WMM TXOP (status = %d)", status); + wma_debug("Setting WMI_VDEV_PARAM_DISCONNECT_TH: %d", mac->mlme_cfg->gen.dropped_pkt_disconnect_thresh); status = wma_vdev_set_param( diff --git a/core/wma/src/wma_scan_roam.c b/core/wma/src/wma_scan_roam.c index 63cc777ef924..19dc459dbe44 100644 --- a/core/wma/src/wma_scan_roam.c +++ b/core/wma/src/wma_scan_roam.c @@ -4723,6 +4723,8 @@ int wma_roam_event_callback(WMA_HANDLE handle, uint8_t *event_buf, QDF_MAC_ADDR_REF(bssid.bytes)); wma_handle_hw_mode_transition(wma_handle, param_buf); wma_roam_ho_fail_handler(wma_handle, wmi_event->vdev_id, bssid); + wma_handle->interfaces[wmi_event->vdev_id].roaming_in_progress + = false; lim_sae_auth_cleanup_retry(wma_handle->mac_context, wmi_event->vdev_id); break; diff --git a/os_if/nan/src/os_if_nan.c b/os_if/nan/src/os_if_nan.c index a703a6730218..9a5996463cbd 100644 --- a/os_if/nan/src/os_if_nan.c +++ b/os_if/nan/src/os_if_nan.c @@ -37,6 +37,7 @@ #include "wlan_utility.h" #include "wlan_osif_request_manager.h" #include "wlan_mlme_ucfg_api.h" +#include "wlan_tdls_ucfg_api.h" #define NAN_CMD_MAX_SIZE 2048 @@ -2624,15 +2625,15 @@ int os_if_process_nan_req(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id, } /* - * If target does not support NAN DBS, send request with type GENERIC. - * These will be treated as passthrough by the driver. This is to make - * sure that HW mode is not set to DBS by NAN Enable request. NAN state - * machine will remain unaffected in this case. + * If target does not support NAN DBS, stop the opportunistic timer. + * Opportunistic timer gets triggered as soon as a DBS use case is + * completed and hw_mode would be set to SMM when the timer(5 seconds) + * expires. + * This is to make sure that HW mode is not set to DBS by NAN Enable + * request. NAN state machine will remain unaffected in this case. */ - if (!NAN_CONCURRENCY_SUPPORTED(psoc)) { + if (!NAN_CONCURRENCY_SUPPORTED(psoc)) policy_mgr_check_and_stop_opportunistic_timer(psoc, vdev_id); - return os_if_nan_generic_req(psoc, tb); - } /* * Send all requests other than Enable/Disable as type GENERIC.