mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-08 12:58:12 -04:00
Merge tag 'LA.UM.9.14.r1-21600-LAHAINA.QSSI14.0' of https://git.codelinaro.org/clo/la/platform/vendor/qcom-opensource/wlan/qca-wifi-host-cmn into android13-5.4-lahaina
"LA.UM.9.14.r1-21600-LAHAINA.QSSI14.0" * tag 'LA.UM.9.14.r1-21600-LAHAINA.QSSI14.0' of https://git.codelinaro.org/clo/la/platform/vendor/qcom-opensource/wlan/qca-wifi-host-cmn: qcacmn: Add new INI to separate scan policy for rest of world users qcacmn: Fix OOB in util_gen_new_ie qcacmn: Fix out-of-bounds of src_freq qcacmn: Fix 6 GHz bss HE capable beamformee score qcacmn: Send driver disconnect internal reason code to user space Change-Id: Ie83ace9a22b421c8e2866173c8334e92cbba87cc
This commit is contained in:
commit
723a2cf1ee
7 changed files with 96 additions and 7 deletions
|
|
@ -1,5 +1,6 @@
|
|||
/*
|
||||
* Copyright (c) 2016-2020 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022-2023 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
|
||||
|
|
@ -140,6 +141,8 @@
|
|||
* MBSSID TX VDEV status index
|
||||
* @QCA_NL80211_VENDOR_SUBCMD_CONFIG_TWT_INDEX: TWT config index
|
||||
* @QCA_NL80211_VENDOR_SUBCMD_PEER_CFR_CAPTURE_CFG_INDEX: CFR data event index
|
||||
* @QCA_NL80211_VENDOR_SUBCMD_DRIVER_DISCONNECT_REASON_INDEX:
|
||||
* Driver disconnect reason index
|
||||
*/
|
||||
|
||||
enum qca_nl80211_vendor_subcmds_index {
|
||||
|
|
@ -232,6 +235,7 @@ enum qca_nl80211_vendor_subcmds_index {
|
|||
QCA_NL80211_VENDOR_SUBCMD_UPDATE_SSID_INDEX,
|
||||
QCA_NL80211_VENDOR_SUBCMD_WIFI_FW_STATS_INDEX,
|
||||
QCA_NL80211_VENDOR_SUBCMD_MBSSID_TX_VDEV_STATUS_INDEX,
|
||||
QCA_NL80211_VENDOR_SUBCMD_DRIVER_DISCONNECT_REASON_INDEX,
|
||||
#ifdef WLAN_SUPPORT_TWT
|
||||
QCA_NL80211_VENDOR_SUBCMD_CONFIG_TWT_INDEX,
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
* Copyright (c) 2017-2020 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2022-2023 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
|
||||
|
|
@ -1400,11 +1400,16 @@ struct wlan_ie_vhtop {
|
|||
uint16_t vhtop_basic_mcs_set;
|
||||
} qdf_packed;
|
||||
|
||||
#define WLAN_HE_PHYCAP_SU_BFER_OFFSET 3
|
||||
#define WLAN_HE_PHYCAP_SU_BFER_IDX 7
|
||||
#define WLAN_HE_PHYCAP_SU_BFER_BITS 1
|
||||
|
||||
#define WLAN_HE_PHYCAP_160_SUPPORT BIT(2)
|
||||
#define WLAN_HE_PHYCAP_80_80_SUPPORT BIT(3)
|
||||
#define WLAN_HE_MACCAP_LEN 6
|
||||
#define WLAN_HE_PHYCAP_LEN 11
|
||||
#define WLAN_HE_MAX_MCS_MAPS 3
|
||||
|
||||
/**
|
||||
* struct wlan_ie_hecaps - HT capabilities
|
||||
* @elem_id: HE caps IE
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
/*
|
||||
* Copyright (c) 2017-2021, The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022-2023 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 above
|
||||
|
|
@ -1416,6 +1417,7 @@ static int cm_calculate_bss_score(struct wlan_objmgr_psoc *psoc,
|
|||
bool same_bucket = false;
|
||||
bool ap_su_beam_former = false;
|
||||
struct wlan_ie_vhtcaps *vht_cap;
|
||||
struct wlan_ie_hecaps *he_cap;
|
||||
struct scoring_cfg *score_config;
|
||||
struct weight_cfg *weight_config;
|
||||
uint32_t sta_nss;
|
||||
|
|
@ -1504,8 +1506,17 @@ static int cm_calculate_bss_score(struct wlan_objmgr_psoc *psoc,
|
|||
score_config->rssi_score.bad_rssi_bucket_size);
|
||||
|
||||
vht_cap = (struct wlan_ie_vhtcaps *)util_scan_entry_vhtcap(entry);
|
||||
if (vht_cap && vht_cap->su_beam_former)
|
||||
he_cap = (struct wlan_ie_hecaps *)util_scan_entry_hecap(entry);
|
||||
|
||||
if (vht_cap && vht_cap->su_beam_former) {
|
||||
ap_su_beam_former = true;
|
||||
|
||||
} else if (he_cap && QDF_GET_BITS(*(he_cap->he_phy_cap.phy_cap_bytes +
|
||||
WLAN_HE_PHYCAP_SU_BFER_OFFSET), WLAN_HE_PHYCAP_SU_BFER_IDX,
|
||||
WLAN_HE_PHYCAP_SU_BFER_BITS)) {
|
||||
ap_su_beam_former = true;
|
||||
}
|
||||
|
||||
if (phy_config->beamformee_cap && is_vht &&
|
||||
ap_su_beam_former &&
|
||||
(entry->rssi_raw > rssi_pref_5g_rssi_thresh) && !same_bucket)
|
||||
|
|
@ -1897,6 +1908,30 @@ bool wlan_cm_get_check_6ghz_security(struct wlan_objmgr_psoc *psoc)
|
|||
return mlme_psoc_obj->psoc_cfg.score_config.check_6ghz_security;
|
||||
}
|
||||
|
||||
void wlan_cm_set_standard_6ghz_conn_policy(struct wlan_objmgr_psoc *psoc,
|
||||
bool value)
|
||||
{
|
||||
struct psoc_mlme_obj *mlme_psoc_obj;
|
||||
|
||||
mlme_psoc_obj = wlan_psoc_mlme_get_cmpt_obj(psoc);
|
||||
if (!mlme_psoc_obj)
|
||||
return;
|
||||
|
||||
mlme_debug("6ghz standard connection policy val %x", value);
|
||||
mlme_psoc_obj->psoc_cfg.score_config.standard_6ghz_conn_policy = value;
|
||||
}
|
||||
|
||||
bool wlan_cm_get_standard_6ghz_conn_policy(struct wlan_objmgr_psoc *psoc)
|
||||
{
|
||||
struct psoc_mlme_obj *mlme_psoc_obj;
|
||||
|
||||
mlme_psoc_obj = wlan_psoc_mlme_get_cmpt_obj(psoc);
|
||||
if (!mlme_psoc_obj)
|
||||
return false;
|
||||
|
||||
return mlme_psoc_obj->psoc_cfg.score_config.standard_6ghz_conn_policy;
|
||||
}
|
||||
|
||||
void wlan_cm_set_6ghz_key_mgmt_mask(struct wlan_objmgr_psoc *psoc,
|
||||
uint32_t value)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
/*
|
||||
* Copyright (c) 2017-2020, The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2023 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 above
|
||||
|
|
@ -129,6 +130,7 @@ struct per_slot_score {
|
|||
* @check_assoc_disallowed: Should assoc be disallowed if MBO OCE IE indicate so
|
||||
* @vendor_roam_score_algorithm: Preferred ETP vendor roam score algorithm
|
||||
* @check_6ghz_security: check security for 6Ghz candidate
|
||||
* @standard_6ghz_conn_policy: check for 6 GHz standard connection policy
|
||||
* @key_mgmt_mask_6ghz: user configurable mask for 6ghz AKM
|
||||
*/
|
||||
struct scoring_cfg {
|
||||
|
|
@ -143,6 +145,7 @@ struct scoring_cfg {
|
|||
bool check_assoc_disallowed;
|
||||
bool vendor_roam_score_algorithm;
|
||||
uint8_t check_6ghz_security;
|
||||
uint8_t standard_6ghz_conn_policy:1;
|
||||
uint32_t key_mgmt_mask_6ghz;
|
||||
};
|
||||
|
||||
|
|
@ -291,6 +294,18 @@ void wlan_cm_set_6ghz_key_mgmt_mask(struct wlan_objmgr_psoc *psoc,
|
|||
*/
|
||||
uint32_t wlan_cm_get_6ghz_key_mgmt_mask(struct wlan_objmgr_psoc *psoc);
|
||||
|
||||
void wlan_cm_set_standard_6ghz_conn_policy(struct wlan_objmgr_psoc *psoc,
|
||||
bool value);
|
||||
|
||||
/**
|
||||
* wlan_cm_get_standard_6ghz_conn_policy() - Get 6Ghz standard connection
|
||||
* policy
|
||||
* @psoc: pointer to psoc object
|
||||
*
|
||||
* Return: value
|
||||
*/
|
||||
bool wlan_cm_get_standard_6ghz_conn_policy(struct wlan_objmgr_psoc *psoc);
|
||||
|
||||
#else
|
||||
static inline bool
|
||||
wlan_cm_6ghz_allowed_for_akm(struct wlan_objmgr_psoc *psoc,
|
||||
|
|
@ -314,6 +329,18 @@ bool wlan_cm_get_check_6ghz_security(struct wlan_objmgr_psoc *psoc)
|
|||
return false;
|
||||
}
|
||||
|
||||
static inline
|
||||
void wlan_cm_set_standard_6ghz_conn_policy(struct wlan_objmgr_psoc *psoc,
|
||||
uint32_t value)
|
||||
{
|
||||
}
|
||||
|
||||
static inline
|
||||
bool wlan_cm_get_standard_6ghz_conn_policy(struct wlan_objmgr_psoc *psoc)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline
|
||||
void wlan_cm_set_6ghz_key_mgmt_mask(struct wlan_objmgr_psoc *psoc,
|
||||
uint32_t value) {}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
* Copyright (c) 2017-2020 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2022-2023 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
|
||||
|
|
@ -1166,7 +1166,8 @@ QDF_STATUS __scm_handle_bcn_probe(struct scan_bcn_probe_event *bcn)
|
|||
* enabled. wlan_cm_get_check_6ghz_security API returns true if
|
||||
* neither Safe mode nor RF test mode are enabled.
|
||||
*/
|
||||
if (!scm_is_bss_allowed_for_country(psoc, scan_entry) &&
|
||||
if (!wlan_cm_get_standard_6ghz_conn_policy(psoc) &&
|
||||
!scm_is_bss_allowed_for_country(psoc, scan_entry) &&
|
||||
wlan_cm_get_check_6ghz_security(psoc)) {
|
||||
scm_info_rl(
|
||||
"Drop frame from "QDF_MAC_ADDR_FMT
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
* Copyright (c) 2017-2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2021-2023 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
|
||||
|
|
@ -2135,7 +2135,7 @@ static uint32_t util_gen_new_ie(uint8_t *ie, uint32_t ielen,
|
|||
*/
|
||||
tmp_new = sub_copy;
|
||||
while (((tmp_new + tmp_new[1] + MIN_IE_LEN) - sub_copy) <=
|
||||
subie_len) {
|
||||
(subie_len - 1)) {
|
||||
if (!(tmp_new[0] == WLAN_ELEMID_NONTX_BSSID_CAP ||
|
||||
tmp_new[0] == WLAN_ELEMID_SSID ||
|
||||
tmp_new[0] == WLAN_ELEMID_MULTI_BSSID_IDX ||
|
||||
|
|
@ -2149,7 +2149,7 @@ static uint32_t util_gen_new_ie(uint8_t *ie, uint32_t ielen,
|
|||
}
|
||||
}
|
||||
if (((tmp_new + tmp_new[1] + MIN_IE_LEN) - sub_copy) >=
|
||||
subie_len)
|
||||
(subie_len - 1))
|
||||
break;
|
||||
tmp_new += tmp_new[1] + MIN_IE_LEN;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14279,6 +14279,15 @@ extract_roam_scan_stats_tlv(wmi_unified_t wmi_handle, void *evt_buf,
|
|||
dst->num_chan = MAX_ROAM_SCAN_CHAN;
|
||||
|
||||
src_chan = ¶m_buf->roam_scan_chan_info[chan_idx];
|
||||
|
||||
if ((dst->num_chan + chan_idx) >
|
||||
param_buf->num_roam_scan_chan_info) {
|
||||
wmi_err("Invalid TLV. num_chan %d chan_idx %d num_roam_scan_chan_info %d",
|
||||
dst->num_chan, chan_idx,
|
||||
param_buf->num_roam_scan_chan_info);
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
for (i = 0; i < dst->num_chan; i++) {
|
||||
dst->chan_freq[i] = src_chan->channel;
|
||||
src_chan++;
|
||||
|
|
@ -14387,6 +14396,14 @@ extract_roam_11kv_stats_tlv(wmi_unified_t wmi_handle, void *evt_buf,
|
|||
if (dst->num_freq > MAX_ROAM_SCAN_CHAN)
|
||||
dst->num_freq = MAX_ROAM_SCAN_CHAN;
|
||||
|
||||
if ((dst->num_freq + rpt_idx) >
|
||||
param_buf->num_roam_neighbor_report_chan_info) {
|
||||
wmi_err("Invalid TLV. num_freq %d rpt_idx %d num_roam_neighbor_report_chan_info %d",
|
||||
dst->num_freq, rpt_idx,
|
||||
param_buf->num_roam_scan_chan_info);
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
for (i = 0; i < dst->num_freq; i++) {
|
||||
dst->freq[i] = src_freq->channel;
|
||||
src_freq++;
|
||||
|
|
|
|||
Loading…
Reference in a new issue