qcacmn: Fetch fw support for fixed channel SAP in coex cases

Currently, firmware sends WMI_WLAN_FREQ_AVOID_EVENTID with set
of frequency ranges to be avoided when it finds LTE operating
around those frequencies. Host driver marks these frequencies
as unsafe and doesn't operate in SAP/P2P-GO mode.

There is a new requirement where SAP can be allowed to operate
in unsafe channels when below conditions are met,
1. Firmware advertises the capability fix_channel_priority in
   WMI_COEX_FIX_CHANNEL_CAPABILITIES through ext2 event.
2. SAP is started in a fixed channel.

Fetch the capability fix_channel_priority sent by firmware and
cache it in wlan_psoc_host_service_ext2_param to support
this feature. Add APIs to cache value received from firmware in
psoc_info->info.service_ext2_param.sap_coex_fixed_chan_support
and to fetch the same.

Change-Id: I8ceb501240bc86d6b004446f9927f4402c487203
CRs-Fixed: 3381399
Tento commit je obsažen v:
Srinivas Dasari
2023-01-05 15:42:26 +05:30
odevzdal Madan Koyyalamudi
rodič bcbe6a3d15
revize 8380ebaf9b
10 změnil soubory, kde provedl 143 přidání a 4 odebrání

Zobrazit soubor

@@ -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
@@ -454,6 +454,8 @@ struct wlan_psoc_host_service_ext_param {
* @max_users_dl_mumimo: Max number of users per-PPDU for Downlink MU-MIMO
* @max_users_ul_mumimo: Max number of users per-PPDU for Uplink MU-MIMO
* @twt_ack_support_cap: TWT ack capability support
* @sap_coex_fixed_chan_support: Indicates if fw supports coex SAP in
* fixed chan config
* @target_cap_flags: Rx peer metadata version number used by target
* @ul_mumimo_tx_2g: UL MUMIMO Tx support for 2GHz
* @ul_mumimo_tx_5g: UL MUMIMO Tx support for 5GHz
@@ -478,6 +480,7 @@ struct wlan_psoc_host_service_ext2_param {
uint16_t max_users_dl_mumimo;
uint16_t max_users_ul_mumimo;
uint32_t twt_ack_support_cap:1;
uint32_t sap_coex_fixed_chan_support:1;
uint32_t target_cap_flags;
uint8_t ul_mumimo_tx_2g:1,
ul_mumimo_tx_5g:1,

Zobrazit soubor

@@ -1,5 +1,6 @@
/*
* Copyright (c) 2017-2021 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
@@ -346,6 +347,20 @@ int init_deinit_populate_dbs_or_sbs_cap_ext2(struct wlan_objmgr_psoc *psoc,
uint8_t *event,
struct tgt_info *info);
/**
* init_deinit_populate_sap_coex_capability() - SAP coex capability
* @psoc: PSOC object
* @handle: WMI handle pointer
* @event: event buffer received from FW
*
* API to populate SAP coex capabilities which currently indicates whether SAP
* is allowed on a coex channel when it's started with fixed chan config
*
* Return: zero on successful capability fetching or failure
*/
int init_deinit_populate_sap_coex_capability(struct wlan_objmgr_psoc *psoc,
wmi_unified_t handle,
uint8_t *event);
/**
* init_deinit_validate_160_80p80_fw_caps() - validate 160 80p80 fw caps
* @psoc: PSOC object

Zobrazit soubor

@@ -1,6 +1,6 @@
/*
* Copyright (c) 2018-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
@@ -518,6 +518,11 @@ static int init_deinit_service_ext2_ready_event_handler(ol_scn_t scn_handle,
if (err_code)
target_if_debug("failed to populate dbs_or_sbs cap ext2");
err_code = init_deinit_populate_sap_coex_capability(psoc, wmi_handle,
event);
if (err_code)
target_if_debug("failed to populate sap_coex_capability ext2");
legacy_callback = target_if_get_psoc_legacy_service_ready_cb();
if (legacy_callback)
if (legacy_callback(wmi_service_ready_ext2_event_id,

Zobrazit soubor

@@ -1,6 +1,6 @@
/*
* Copyright (c) 2017-2021 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
@@ -583,6 +583,29 @@ exit:
return qdf_status_to_os_return(status);
}
int init_deinit_populate_sap_coex_capability(struct wlan_objmgr_psoc *psoc,
wmi_unified_t handle,
uint8_t *event)
{
struct wmi_host_coex_fix_chan_cap sap_coex_fixed_chan_cap;
struct target_psoc_info *psoc_info;
QDF_STATUS status;
qdf_mem_zero(&sap_coex_fixed_chan_cap,
sizeof(struct wmi_host_coex_fix_chan_cap));
status = wmi_extract_sap_coex_cap_service_ready_ext2(handle, event,
&sap_coex_fixed_chan_cap);
if (QDF_IS_STATUS_ERROR(status)) {
target_if_err("Extraction of sap_coex_chan_pref cap failed");
goto exit;
}
psoc_info = wlan_psoc_get_tgt_if_handle(psoc);
target_psoc_set_sap_coex_fixed_chan_cap(psoc_info,
!!sap_coex_fixed_chan_cap.fix_chan_priority);
exit:
return qdf_status_to_os_return(status);
}
QDF_STATUS init_deinit_dbr_ring_cap_free(
struct target_psoc_info *tgt_psoc_info)