mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-09 05:39:54 -04:00
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:
commit
4dc979e992
11 changed files with 214 additions and 22 deletions
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 =
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in a new issue