Merge tag 'LA.UM.9.14.r1-21000-LAHAINA.QSSI13.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-21000-LAHAINA.QSSI13.0"

* tag 'LA.UM.9.14.r1-21000-LAHAINA.QSSI13.0' of https://git.codelinaro.org/clo/la/platform/vendor/qcom-opensource/wlan/qca-wifi-host-cmn:
  qcacmn: Change log level to debug for hif_runtime_lock_init/deinit
  qcacmn: Update pmk for roamed AP to pmk cache table
  qcacmn: Add support for NAN enable rsp in non-dbs platform
  qcacmn: Add a tid check for RX to avoid of OOB access
  qcacmn: Add support to send FILS DISC TX enable/disable to FW
  qcacmn: QCA vendor attribute to configure ER SU PPDU type
  qcacmn: Reduce log level from error to debug in wlan_vdev_get_bss_peer_mac
  qcacmn: Consider all power types to prepare client channel list

Change-Id: I0d91ace1e5b9ef5bdf604d4cfdb5ae17e2e277b9
This commit is contained in:
Michael Bestas 2022-12-17 02:51:16 +02:00
commit 4dc979e992
No known key found for this signature in database
GPG key ID: CC95044519BE6669
11 changed files with 214 additions and 22 deletions

View file

@ -2808,8 +2808,15 @@ done:
}
/* Get TID from struct cb->tid_val, save to tid */
if (qdf_nbuf_is_rx_chfrag_start(nbuf))
if (qdf_nbuf_is_rx_chfrag_start(nbuf)) {
tid = qdf_nbuf_get_tid_val(nbuf);
if (tid >= CDP_MAX_DATA_TIDS) {
DP_STATS_INC(soc, rx.err.rx_invalid_tid_err, 1);
qdf_nbuf_free(nbuf);
nbuf = next;
continue;
}
}
if (qdf_unlikely(!peer)) {
peer = dp_peer_get_ref_by_id(soc, peer_id,

View file

@ -6661,6 +6661,8 @@ dp_print_soc_rx_stats(struct dp_soc *soc)
soc->stats.rx.rxdma2rel_route_drop);
DP_PRINT_STATS("Reo2rel route drop:%d",
soc->stats.rx.reo2rel_route_drop);
DP_PRINT_STATS("Rx invalid TID count:%d",
soc->stats.rx.err.rx_invalid_tid_err);
}
#ifdef FEATURE_TSO_STATS

View file

@ -1072,6 +1072,8 @@ struct dp_soc_stats {
uint32_t peer_unauth_rx_pkt_drop;
/* MSDU len err count */
uint32_t msdu_len_err;
/* Rx invalid tid count */
uint32_t rx_invalid_tid_err;
} err;
/* packet count per core - per ring */

View file

@ -1596,7 +1596,7 @@ int hif_runtime_lock_init(qdf_runtime_lock_t *lock, const char *name)
{
struct hif_pm_runtime_lock *context;
hif_info("Initializing Runtime PM wakelock %s", name);
hif_debug("Initializing Runtime PM wakelock %s", name);
context = qdf_mem_malloc(sizeof(*context));
if (!context)
@ -1626,7 +1626,7 @@ void hif_runtime_lock_deinit(struct hif_opaque_softc *hif_ctx,
return;
}
hif_info("Deinitializing Runtime PM wakelock %s", context->name);
hif_debug("Deinitializing Runtime PM wakelock %s", context->name);
/*
* Ensure to delete the context list entry and reduce the usage count

View file

@ -8471,6 +8471,14 @@ enum qca_wlan_vendor_attr_wifi_test_config {
*/
QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_6GHZ_SECURITY_TEST_MODE = 51,
/* 8-bit unsigned value to configure the driver to transmit data with
* ER SU PPDU type.
*
* 0 - Default behavior, 1 - Enable ER SU PPDU type TX.
* This attribute is used for testing purposes.
*/
QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_ER_SU_PPDU_TYPE = 52,
/* keep last */
QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_AFTER_LAST,
QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_MAX =

View file

@ -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
@ -1068,7 +1069,7 @@ wlan_crypto_selective_clear_sae_single_pmk_entries(
struct wlan_objmgr_vdev *vdev, struct qdf_mac_addr *conn_bssid);
/**
* wlan_crypto_set_sae_single_pmk_bss_cap - Set the peer SAE sinlge pmk
* wlan_crypto_set_sae_single_pmk_bss_cap - Set the peer SAE single pmk
* feature supported status
* @vdev: Vdev
* @bssid: BSSID for which the flag is to be set
@ -1078,6 +1079,16 @@ wlan_crypto_selective_clear_sae_single_pmk_entries(
void wlan_crypto_set_sae_single_pmk_bss_cap(struct wlan_objmgr_vdev *vdev,
struct qdf_mac_addr *bssid,
bool single_pmk_capable_bss);
/**
* wlan_crypto_set_sae_single_pmk_info - Set the peer SAE single pmk info
* @vdev: Vdev
* @roam_sync_pmksa: pmk info for roamed AP
*/
void
wlan_crypto_set_sae_single_pmk_info(struct wlan_objmgr_vdev *vdev,
struct wlan_crypto_pmksa *roam_sync_pmksa);
#else
static inline void
wlan_crypto_selective_clear_sae_single_pmk_entries(
@ -1091,6 +1102,12 @@ void wlan_crypto_set_sae_single_pmk_bss_cap(struct wlan_objmgr_vdev *vdev,
bool single_pmk_capable_bss)
{
}
static inline void
wlan_crypto_set_sae_single_pmk_info(struct wlan_objmgr_vdev *vdev,
struct wlan_crypto_pmksa *roam_sync_pmksa)
{
}
#endif
#ifdef WLAN_FEATURE_FILS_SK

View file

@ -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
@ -4675,6 +4676,42 @@ void wlan_crypto_set_sae_single_pmk_bss_cap(struct wlan_objmgr_vdev *vdev,
single_pmk_capable_bss;
}
}
void
wlan_crypto_set_sae_single_pmk_info(struct wlan_objmgr_vdev *vdev,
struct wlan_crypto_pmksa *roam_sync_pmksa)
{
struct wlan_crypto_params *crypto_params;
struct wlan_crypto_comp_priv *crypto_priv;
int i;
crypto_priv = (struct wlan_crypto_comp_priv *)
wlan_get_vdev_crypto_obj(vdev);
if (!crypto_priv) {
crypto_err("crypto_priv NULL");
return;
}
crypto_params = &crypto_priv->crypto_params;
for (i = 0; i < WLAN_CRYPTO_MAX_PMKID; i++) {
if (!crypto_params->pmksa[i])
continue;
if (qdf_is_macaddr_equal(&roam_sync_pmksa->bssid,
&crypto_params->pmksa[i]->bssid) &&
roam_sync_pmksa->single_pmk_supported &&
roam_sync_pmksa->pmk_len) {
crypto_params->pmksa[i]->single_pmk_supported =
roam_sync_pmksa->single_pmk_supported;
crypto_params->pmksa[i]->pmk_len =
roam_sync_pmksa->pmk_len;
qdf_mem_copy(crypto_params->pmksa[i]->pmk,
roam_sync_pmksa->pmk,
roam_sync_pmksa->pmk_len);
}
}
}
#endif
void wlan_crypto_reset_vdev_params(struct wlan_objmgr_vdev *vdev)

View file

@ -1,5 +1,6 @@
/*
* Copyright (c) 2016-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 above
@ -1415,7 +1416,7 @@ QDF_STATUS wlan_vdev_get_bss_peer_mac(struct wlan_objmgr_vdev *vdev,
peer = wlan_objmgr_vdev_try_get_bsspeer(vdev, WLAN_MLME_OBJMGR_ID);
if (!peer) {
obj_mgr_err("not able to find bss peer for vdev %d",
obj_mgr_debug("not able to find bss peer for vdev %d",
wlan_vdev_get_id(vdev));
return QDF_STATUS_E_INVAL;
}

View file

@ -1,5 +1,6 @@
/*
* Copyright (c) 2014-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
@ -1019,12 +1020,118 @@ reg_modify_disable_chan_list_for_unii1_and_unii2a(
#ifdef CONFIG_BAND_6GHZ
#ifdef CONFIG_REG_CLIENT
#ifdef CONFIG_AFC_SUPPORT
/**
* reg_append_mas_chan_list_for_6g_sp() - Append SP channels to the master
* channel list
* @pdev_priv_obj: Pointer to pdev private object
*
* This function appends SP channels to the master channel list
*
* Return: void.
*/
static void
reg_append_mas_chan_list_for_6g_sp(struct wlan_regulatory_pdev_priv_obj
*pdev_priv_obj)
{
struct regulatory_channel *master_chan_list_6g_client_sp;
master_chan_list_6g_client_sp = pdev_priv_obj->afc_chan_list;
qdf_mem_copy(&pdev_priv_obj->mas_chan_list[MIN_6GHZ_CHANNEL],
master_chan_list_6g_client_sp,
NUM_6GHZ_CHANNELS *
sizeof(struct regulatory_channel));
}
#else
static inline void
reg_append_mas_chan_list_for_6g_sp(struct wlan_regulatory_pdev_priv_obj
*pdev_priv_obj)
{
}
#endif
/**
* reg_append_mas_chan_list_for_6g_lpi() - Append LPI channels to the master
* channel list
* @pdev_priv_obj: Pointer to pdev private object
*
* This function appends LPI channels to the master channel list
*
* Return: void.
*/
static void
reg_append_mas_chan_list_for_6g_lpi(struct wlan_regulatory_pdev_priv_obj
*pdev_priv_obj)
{
struct regulatory_channel *master_chan_list_6g_client_lpi;
uint8_t i, j;
if (!pdev_priv_obj->reg_rules.num_of_6g_ap_reg_rules[REG_INDOOR_AP]) {
reg_debug("No LPI reg rules");
return;
}
master_chan_list_6g_client_lpi =
pdev_priv_obj->mas_chan_list_6g_client[REG_INDOOR_AP]
[pdev_priv_obj->reg_cur_6g_client_mobility_type];
for (i = MIN_6GHZ_CHANNEL, j = 0;
i <= MAX_6GHZ_CHANNEL && j < NUM_6GHZ_CHANNELS; i++, j++) {
if ((pdev_priv_obj->mas_chan_list[i].state ==
CHANNEL_STATE_DISABLE) ||
(pdev_priv_obj->mas_chan_list[i].chan_flags &
REGULATORY_CHAN_DISABLED)) {
qdf_mem_copy(&pdev_priv_obj->mas_chan_list[i],
&master_chan_list_6g_client_lpi[j],
sizeof(struct regulatory_channel));
}
}
}
/**
* reg_append_mas_chan_list_for_6g_VLP() - Append VLP channels to the master
* channel list
* @pdev_priv_obj: Pointer to pdev private object
*
* This function appends VLP channels to the master channel list
*
* Return: void.
*/
static void
reg_append_mas_chan_list_for_6g_vlp(struct wlan_regulatory_pdev_priv_obj
*pdev_priv_obj)
{
struct regulatory_channel *master_chan_list_6g_client_vlp;
uint8_t i, j;
if (!pdev_priv_obj->reg_rules.num_of_6g_ap_reg_rules[REG_VERY_LOW_POWER_AP]) {
reg_debug("No VLP reg rules");
return;
}
master_chan_list_6g_client_vlp =
pdev_priv_obj->mas_chan_list_6g_client[REG_VERY_LOW_POWER_AP]
[pdev_priv_obj->reg_cur_6g_client_mobility_type];
for (i = MIN_6GHZ_CHANNEL, j = 0;
i <= MAX_6GHZ_CHANNEL && j < NUM_6GHZ_CHANNELS; i++, j++) {
if ((pdev_priv_obj->mas_chan_list[i].state ==
CHANNEL_STATE_DISABLE) ||
(pdev_priv_obj->mas_chan_list[i].chan_flags &
REGULATORY_CHAN_DISABLED)) {
qdf_mem_copy(&pdev_priv_obj->mas_chan_list[i],
&master_chan_list_6g_client_vlp[j],
sizeof(struct regulatory_channel));
}
}
}
static void
reg_append_mas_chan_list_for_6g(struct wlan_regulatory_pdev_priv_obj
*pdev_priv_obj)
{
struct regulatory_channel *master_chan_list_6g_client;
if (pdev_priv_obj->reg_cur_6g_ap_pwr_type >= REG_CURRENT_MAX_AP_TYPE ||
pdev_priv_obj->reg_cur_6g_client_mobility_type >=
REG_MAX_CLIENT_TYPE) {
@ -1032,14 +1139,20 @@ reg_append_mas_chan_list_for_6g(struct wlan_regulatory_pdev_priv_obj
return;
}
master_chan_list_6g_client =
pdev_priv_obj->mas_chan_list_6g_client[REG_INDOOR_AP]
[pdev_priv_obj->reg_cur_6g_client_mobility_type];
/* Client should be able to scan all types of APs, so prepare the
* client list which has all the enabled channels, first priority is
* given to AFC power type and then second priority is decided based on
* gindoor_channel_support ini value
*/
reg_append_mas_chan_list_for_6g_sp(pdev_priv_obj);
qdf_mem_copy(&pdev_priv_obj->mas_chan_list[MIN_6GHZ_CHANNEL],
master_chan_list_6g_client,
NUM_6GHZ_CHANNELS *
sizeof(struct regulatory_channel));
if (pdev_priv_obj->indoor_chan_enabled) {
reg_append_mas_chan_list_for_6g_lpi(pdev_priv_obj);
reg_append_mas_chan_list_for_6g_vlp(pdev_priv_obj);
} else {
reg_append_mas_chan_list_for_6g_vlp(pdev_priv_obj);
reg_append_mas_chan_list_for_6g_lpi(pdev_priv_obj);
}
}
static void

View file

@ -2655,12 +2655,14 @@ struct set_fwtest_params {
* @WFA_CONFIG_CSA: configure the driver to ignore CSA
* @WFA_CONFIG_OCV: configure OCI
* @WFA_CONFIG_SA_QUERY: configure driver/firmware to ignore SAquery timeout
* @WFA_FILS_DISCV_FRAMES: FD frames TX enable disable config
*/
enum wfa_test_cmds {
WFA_CONFIG_RXNE,
WFA_CONFIG_CSA,
WFA_CONFIG_OCV,
WFA_CONFIG_SA_QUERY,
WFA_FILS_DISCV_FRAMES,
};
/**

View file

@ -75,18 +75,21 @@ extract_nan_event_rsp_tlv(wmi_unified_t wmi_handle, void *evt_buf,
}
nan_msg_hdr = (nan_msg_header_t *)event->data;
if (!wmi_service_enabled(wmi_handle, wmi_service_nan_dbs_support) &&
!wmi_service_enabled(wmi_handle, wmi_service_nan_disable_support)) {
evt_params->evt_type = nan_event_id_generic_rsp;
return QDF_STATUS_SUCCESS;
}
switch (nan_msg_hdr->msg_id) {
case NAN_MSG_ID_ENABLE_RSP:
nan_evt_info = event->event_info;
if (!nan_evt_info) {
wmi_err("Fail: NAN enable rsp event info Null");
return QDF_STATUS_E_INVAL;
if (!wmi_service_enabled(wmi_handle,
wmi_service_nan_dbs_support) &&
!wmi_service_enabled(wmi_handle,
wmi_service_nan_disable_support
)) {
evt_params->evt_type = nan_event_id_generic_rsp;
break;
} else {
wmi_err("Fail: NAN enable rsp event info Null");
return QDF_STATUS_E_INVAL;
}
}
evt_params->evt_type = nan_event_id_enable_rsp;
evt_params->mac_id = nan_evt_info->mac_id;