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-19600.01-LAHAINA.QSSI12.0' of https://git.codelinaro.org/clo/la/platform/vendor/qcom-opensource/wlan/qca-wifi-host-cmn into android12-5.4-lahaina
"LA.UM.9.14.r1-19600.01-LAHAINA.QSSI12.0" * tag 'LA.UM.9.14.r1-19600.01-LAHAINA.QSSI12.0' of https://git.codelinaro.org/clo/la/platform/vendor/qcom-opensource/wlan/qca-wifi-host-cmn: qcacmn: Change the log level from info to info_high qcacmn: Change ce desc history from dynamic to static qcacmn: Add QCA vendor attribute to enable/disable FT over DS qcacmn: Vendor command to config concurrent STA connection policies qcacmn: Return if pld_is_pci_ep_awake is not supported qcacmn: Add API to get min_dwell_time_6g configured ini qcacmn: skip MBSSID processing if it's not supported qcacmn: Use a max of 5 WBM2SW rings for whunt failure qcacmn: Add an ini control to disable Dynamic GRO feature qcacmn: Set default value for REO dest ctrl register qcacmn: Allow FW to pno scan 6G chan based on RNR flag only qcacmn: Get per channel pno scan config service capability qcacmn: Allow FW to scan 6G chan based on RNR flag only qcacmn: Check cookie and avoid to read out of bound Change-Id: I8a98a4af4ac78114395cc110871713b72bce274b
This commit is contained in:
commit
4f5eee1c62
39 changed files with 618 additions and 126 deletions
|
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
* Copyright (c) 2011-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
|
||||
|
|
@ -2333,6 +2333,7 @@ struct cdp_monitor_filter {
|
|||
* @cfg_dp_tso_enable: get TSO enable config
|
||||
* @cfg_dp_lro_enable: get LRO enable config
|
||||
* @cfg_dp_gro_enable: get GRP enable config
|
||||
* @cfg_dp_force_gro_enable: get Force GRP enable config
|
||||
* @cfg_dp_tx_flow_start_queue_offset: get DP TX flow start queue offset
|
||||
* @cfg_dp_tx_flow_stop_queue_threshold: get DP TX flow stop queue threshold
|
||||
* @cfg_dp_ipa_uc_tx_buf_size: get IPA TX buf size config
|
||||
|
|
@ -2355,6 +2356,7 @@ enum cdp_dp_cfg {
|
|||
cfg_dp_tso_enable,
|
||||
cfg_dp_lro_enable,
|
||||
cfg_dp_gro_enable,
|
||||
cfg_dp_force_gro_enable,
|
||||
cfg_dp_tx_flow_start_queue_offset,
|
||||
cfg_dp_tx_flow_stop_queue_threshold,
|
||||
cfg_dp_ipa_uc_tx_buf_size,
|
||||
|
|
|
|||
|
|
@ -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 above
|
||||
|
|
@ -701,7 +702,7 @@ int dp_ipa_ring_resource_setup(struct dp_soc *soc,
|
|||
* Set DEST_RING_MAPPING_4 to SW2 as default value for
|
||||
* DESTINATION_RING_CTRL_IX_0.
|
||||
*/
|
||||
ix0 = HAL_REO_REMAP_IX0(REO_REMAP_TCL, 0) |
|
||||
ix0 = HAL_REO_REMAP_IX0(REO_REMAP_SW1, 0) |
|
||||
HAL_REO_REMAP_IX0(REO_REMAP_SW1, 1) |
|
||||
HAL_REO_REMAP_IX0(REO_REMAP_SW2, 2) |
|
||||
HAL_REO_REMAP_IX0(REO_REMAP_SW3, 3) |
|
||||
|
|
@ -988,7 +989,7 @@ QDF_STATUS dp_ipa_enable_autonomy(struct cdp_soc_t *soc_hdl, uint8_t pdev_id)
|
|||
return QDF_STATUS_E_AGAIN;
|
||||
|
||||
/* Call HAL API to remap REO rings to REO2IPA ring */
|
||||
ix0 = HAL_REO_REMAP_IX0(REO_REMAP_TCL, 0) |
|
||||
ix0 = HAL_REO_REMAP_IX0(REO_REMAP_SW1, 0) |
|
||||
HAL_REO_REMAP_IX0(REO_REMAP_SW4, 1) |
|
||||
HAL_REO_REMAP_IX0(REO_REMAP_SW1, 2) |
|
||||
HAL_REO_REMAP_IX0(REO_REMAP_SW4, 3) |
|
||||
|
|
@ -1025,6 +1026,7 @@ QDF_STATUS dp_ipa_disable_autonomy(struct cdp_soc_t *soc_hdl, uint8_t pdev_id)
|
|||
struct dp_pdev *pdev =
|
||||
dp_get_pdev_from_soc_pdev_id_wifi3(soc, pdev_id);
|
||||
uint32_t ix0;
|
||||
uint32_t ix1;
|
||||
uint32_t ix2;
|
||||
uint32_t ix3;
|
||||
|
||||
|
|
@ -1040,7 +1042,7 @@ QDF_STATUS dp_ipa_disable_autonomy(struct cdp_soc_t *soc_hdl, uint8_t pdev_id)
|
|||
return QDF_STATUS_E_AGAIN;
|
||||
|
||||
/* Call HAL API to remap REO rings to REO2IPA ring */
|
||||
ix0 = HAL_REO_REMAP_IX0(REO_REMAP_TCL, 0) |
|
||||
ix0 = HAL_REO_REMAP_IX0(REO_REMAP_SW1, 0) |
|
||||
HAL_REO_REMAP_IX0(REO_REMAP_SW1, 1) |
|
||||
HAL_REO_REMAP_IX0(REO_REMAP_SW2, 2) |
|
||||
HAL_REO_REMAP_IX0(REO_REMAP_SW3, 3) |
|
||||
|
|
@ -1050,7 +1052,7 @@ QDF_STATUS dp_ipa_disable_autonomy(struct cdp_soc_t *soc_hdl, uint8_t pdev_id)
|
|||
HAL_REO_REMAP_IX0(REO_REMAP_FW, 7);
|
||||
|
||||
if (wlan_cfg_is_rx_hash_enabled(soc->wlan_cfg_ctx)) {
|
||||
dp_reo_remap_config(soc, &ix2, &ix3);
|
||||
dp_reo_remap_config(soc, &ix1, &ix2, &ix3);
|
||||
|
||||
hal_reo_read_write_ctrl_ix(soc->hal_soc, false, &ix0, NULL,
|
||||
&ix2, &ix3);
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
/*
|
||||
* Copyright (c) 2017-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
|
||||
|
|
@ -255,7 +256,7 @@ QDF_STATUS dp_ipa_handle_rx_buf_smmu_mapping(struct dp_soc *soc,
|
|||
uint32_t size,
|
||||
bool create);
|
||||
|
||||
bool dp_reo_remap_config(struct dp_soc *soc, uint32_t *remap1,
|
||||
bool dp_reo_remap_config(struct dp_soc *soc,uint32_t *remap0, uint32_t *remap1,
|
||||
uint32_t *remap2);
|
||||
bool dp_ipa_is_mdm_platform(void);
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
/*
|
||||
* Copyright (c) 2016-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
|
||||
|
|
@ -3398,12 +3399,14 @@ static void dp_soc_reset_intr_mask(struct dp_soc *soc)
|
|||
* @remap2: output parameter indicates reo remap 2 register value
|
||||
* Return: bool type, true if remap is configured else false.
|
||||
*/
|
||||
bool dp_reo_remap_config(struct dp_soc *soc, uint32_t *remap1, uint32_t *remap2)
|
||||
bool dp_reo_remap_config(struct dp_soc *soc, uint32_t *remap0,
|
||||
uint32_t *remap1, uint32_t *remap2)
|
||||
{
|
||||
uint32_t ring[4] = {REO_REMAP_SW1, REO_REMAP_SW2,
|
||||
REO_REMAP_SW3};
|
||||
hal_compute_reo_remap_ix2_ix3(soc->hal_soc, ring,
|
||||
3, remap1, remap2);
|
||||
hal_compute_reo_remap_ix0(soc->hal_soc, remap0);
|
||||
dp_debug("remap1 %x remap2 %x", *remap1, *remap2);
|
||||
|
||||
return true;
|
||||
|
|
@ -3529,7 +3532,7 @@ static uint8_t dp_reo_ring_selection(uint32_t value, uint32_t *ring)
|
|||
return num;
|
||||
}
|
||||
|
||||
static bool dp_reo_remap_config(struct dp_soc *soc,
|
||||
static bool dp_reo_remap_config(struct dp_soc *soc, uint32_t *remap0,
|
||||
uint32_t *remap1,
|
||||
uint32_t *remap2)
|
||||
{
|
||||
|
|
@ -3547,6 +3550,7 @@ static bool dp_reo_remap_config(struct dp_soc *soc,
|
|||
num = dp_reo_ring_selection(value, ring);
|
||||
hal_compute_reo_remap_ix2_ix3(soc->hal_soc, ring,
|
||||
num, remap1, remap2);
|
||||
hal_compute_reo_remap_ix0(soc->hal_soc, remap0);
|
||||
|
||||
break;
|
||||
case dp_nss_cfg_first_radio:
|
||||
|
|
@ -11089,6 +11093,9 @@ static uint32_t dp_get_cfg(struct cdp_soc_t *soc, enum cdp_dp_cfg cfg)
|
|||
case cfg_dp_gro_enable:
|
||||
value = dpsoc->wlan_cfg_ctx->gro_enabled;
|
||||
break;
|
||||
case cfg_dp_force_gro_enable:
|
||||
value = dpsoc->wlan_cfg_ctx->force_gro_enabled;
|
||||
break;
|
||||
case cfg_dp_tx_flow_start_queue_offset:
|
||||
value = dpsoc->wlan_cfg_ctx->tx_flow_start_queue_offset;
|
||||
break;
|
||||
|
|
@ -12537,6 +12544,7 @@ void *dp_soc_init(struct dp_soc *soc, HTC_HANDLE htc_handle,
|
|||
* are offloaded to NSS
|
||||
*/
|
||||
if (dp_reo_remap_config(soc,
|
||||
&reo_params.remap0,
|
||||
&reo_params.remap1,
|
||||
&reo_params.remap2))
|
||||
reo_params.rx_hash_enabled = true;
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
/*
|
||||
* Copyright (c) 2016-2021 The Linux Foundation. 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
|
||||
|
|
@ -3529,9 +3530,7 @@ int dp_addba_requestprocess_wifi3(struct cdp_soc_t *cdp_soc,
|
|||
|
||||
buffersize = rx_tid->rx_ba_win_size_override;
|
||||
} else {
|
||||
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_INFO,
|
||||
"%s restore BA win %d based on addba req",
|
||||
__func__, buffersize);
|
||||
dp_info("restore BA win %d based on addba req", buffersize);
|
||||
}
|
||||
|
||||
dp_check_ba_buffersize(peer, tid, buffersize);
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
/*
|
||||
* Copyright (c) 2017-2020 The Linux Foundation. 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
|
||||
|
|
@ -4916,6 +4917,8 @@ void dp_print_soc_cfg_params(struct dp_soc *soc)
|
|||
soc_cfg_ctx->sg_enabled);
|
||||
DP_PRINT_STATS("Gro enabled: %u ",
|
||||
soc_cfg_ctx->gro_enabled);
|
||||
DP_PRINT_STATS("Force Gro enabled: %u ",
|
||||
soc_cfg_ctx->force_gro_enabled);
|
||||
DP_PRINT_STATS("rawmode enabled: %u ",
|
||||
soc_cfg_ctx->rawmode_enabled);
|
||||
DP_PRINT_STATS("peer flow ctrl enabled: %u ",
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
/*
|
||||
* Copyright (c) 2016-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
|
||||
|
|
@ -2417,6 +2418,15 @@ void hal_compute_reo_remap_ix2_ix3(hal_soc_handle_t hal_soc_hdl,
|
|||
num_rings, remap1, remap2);
|
||||
}
|
||||
|
||||
static inline
|
||||
void hal_compute_reo_remap_ix0(hal_soc_handle_t hal_soc_hdl, uint32_t *remap0)
|
||||
{
|
||||
struct hal_soc *hal_soc = (struct hal_soc *)hal_soc_hdl;
|
||||
|
||||
if (hal_soc->ops->hal_compute_reo_remap_ix0)
|
||||
hal_soc->ops->hal_compute_reo_remap_ix0(remap0);
|
||||
}
|
||||
|
||||
/**
|
||||
* hal_setup_link_idle_list - Setup scattered idle list using the
|
||||
* buffer list provided
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -1700,6 +1701,17 @@ static void hal_reo_setup_generic(struct hal_soc *soc,
|
|||
* 7: NOT_USED.
|
||||
*/
|
||||
if (reo_params->rx_hash_enabled) {
|
||||
if (reo_params->remap0)
|
||||
HAL_REG_WRITE(soc,
|
||||
HWIO_REO_R0_DESTINATION_RING_CTRL_IX_0_ADDR(
|
||||
SEQ_WCSS_UMAC_REO_REG_OFFSET),
|
||||
reo_params->remap0);
|
||||
|
||||
hal_debug("HWIO_REO_R0_DESTINATION_RING_CTRL_IX_0_ADDR 0x%x",
|
||||
HAL_REG_READ(soc,
|
||||
HWIO_REO_R0_DESTINATION_RING_CTRL_IX_0_ADDR(
|
||||
SEQ_WCSS_UMAC_REO_REG_OFFSET)));
|
||||
|
||||
HAL_REG_WRITE(soc,
|
||||
HWIO_REO_R0_DESTINATION_RING_CTRL_IX_2_ADDR(
|
||||
SEQ_WCSS_UMAC_REO_REG_OFFSET),
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
/*
|
||||
* Copyright (c) 2016-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
|
||||
|
|
@ -508,6 +509,8 @@ struct shadow_reg_config {
|
|||
struct hal_reo_params {
|
||||
/** rx hash steering enabled or disabled */
|
||||
bool rx_hash_enabled;
|
||||
/** reo remap 0 register */
|
||||
uint32_t remap0;
|
||||
/** reo remap 1 register */
|
||||
uint32_t remap1;
|
||||
/** reo remap 2 register */
|
||||
|
|
@ -675,6 +678,7 @@ struct hal_hw_txrx_ops {
|
|||
uint32_t num_rings,
|
||||
uint32_t *remap1,
|
||||
uint32_t *remap2);
|
||||
void (*hal_compute_reo_remap_ix0)(uint32_t *remap0);
|
||||
uint32_t (*hal_rx_flow_setup_cmem_fse)(
|
||||
struct hal_soc *soc, uint32_t cmem_ba,
|
||||
uint32_t table_offset, uint8_t *rx_flow);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -1771,6 +1772,7 @@ struct hal_hw_txrx_ops qca5018_hal_hw_txrx_ops = {
|
|||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -1152,6 +1153,7 @@ struct hal_hw_txrx_ops qca6290_hal_hw_txrx_ops = {
|
|||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -1090,6 +1091,19 @@ void hal_compute_reo_remap_ix2_ix3_6390(uint32_t *ring, uint32_t num_rings,
|
|||
}
|
||||
}
|
||||
|
||||
static
|
||||
void hal_compute_reo_remap_ix0_6390(uint32_t *remap0)
|
||||
{
|
||||
*remap0 = HAL_REO_REMAP_IX0(REO_REMAP_SW1, 0) |
|
||||
HAL_REO_REMAP_IX0(REO_REMAP_SW1, 1) |
|
||||
HAL_REO_REMAP_IX0(REO_REMAP_SW2, 2) |
|
||||
HAL_REO_REMAP_IX0(REO_REMAP_SW3, 3) |
|
||||
HAL_REO_REMAP_IX0(REO_REMAP_SW2, 4) |
|
||||
HAL_REO_REMAP_IX0(REO_REMAP_RELEASE, 5) |
|
||||
HAL_REO_REMAP_IX0(REO_REMAP_FW, 6) |
|
||||
HAL_REO_REMAP_IX0(REO_REMAP_FW, 7);
|
||||
}
|
||||
|
||||
struct hal_hw_txrx_ops qca6390_hal_hw_txrx_ops = {
|
||||
/* init and setup */
|
||||
hal_srng_dst_hw_init_generic,
|
||||
|
|
@ -1202,6 +1216,7 @@ struct hal_hw_txrx_ops qca6390_hal_hw_txrx_ops = {
|
|||
hal_rx_mpdu_end_offset_get_generic,
|
||||
NULL,
|
||||
hal_compute_reo_remap_ix2_ix3_6390,
|
||||
hal_compute_reo_remap_ix0_6390,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
/*
|
||||
* Copyright (c) 2019-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
|
||||
|
|
@ -1666,6 +1667,19 @@ void hal_compute_reo_remap_ix2_ix3_6490(uint32_t *ring, uint32_t num_rings,
|
|||
}
|
||||
}
|
||||
|
||||
static
|
||||
void hal_compute_reo_remap_ix0_6490(uint32_t *remap0)
|
||||
{
|
||||
*remap0 = HAL_REO_REMAP_IX0(REO_REMAP_SW1, 0) |
|
||||
HAL_REO_REMAP_IX0(REO_REMAP_SW1, 1) |
|
||||
HAL_REO_REMAP_IX0(REO_REMAP_SW2, 2) |
|
||||
HAL_REO_REMAP_IX0(REO_REMAP_SW3, 3) |
|
||||
HAL_REO_REMAP_IX0(REO_REMAP_SW2, 4) |
|
||||
HAL_REO_REMAP_IX0(REO_REMAP_RELEASE, 5) |
|
||||
HAL_REO_REMAP_IX0(REO_REMAP_FW, 6) |
|
||||
HAL_REO_REMAP_IX0(REO_REMAP_FW, 7);
|
||||
}
|
||||
|
||||
struct hal_hw_txrx_ops qca6490_hal_hw_txrx_ops = {
|
||||
/* init and setup */
|
||||
hal_srng_dst_hw_init_generic,
|
||||
|
|
@ -1784,6 +1798,7 @@ struct hal_hw_txrx_ops qca6490_hal_hw_txrx_ops = {
|
|||
hal_rx_mpdu_end_offset_get_generic,
|
||||
hal_rx_flow_setup_fse_6490,
|
||||
hal_compute_reo_remap_ix2_ix3_6490,
|
||||
hal_compute_reo_remap_ix0_6490,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
/*
|
||||
* Copyright (c) 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
|
||||
|
|
@ -1824,6 +1825,19 @@ void hal_compute_reo_remap_ix2_ix3_6750(uint32_t *ring, uint32_t num_rings,
|
|||
}
|
||||
}
|
||||
|
||||
static
|
||||
void hal_compute_reo_remap_ix0_6750(uint32_t *remap0)
|
||||
{
|
||||
*remap0 = HAL_REO_REMAP_IX0(REO_REMAP_SW1, 0) |
|
||||
HAL_REO_REMAP_IX0(REO_REMAP_SW1, 1) |
|
||||
HAL_REO_REMAP_IX0(REO_REMAP_SW2, 2) |
|
||||
HAL_REO_REMAP_IX0(REO_REMAP_SW3, 3) |
|
||||
HAL_REO_REMAP_IX0(REO_REMAP_SW2, 4) |
|
||||
HAL_REO_REMAP_IX0(REO_REMAP_RELEASE, 5) |
|
||||
HAL_REO_REMAP_IX0(REO_REMAP_FW, 6) |
|
||||
HAL_REO_REMAP_IX0(REO_REMAP_FW, 7);
|
||||
}
|
||||
|
||||
struct hal_hw_txrx_ops qca6750_hal_hw_txrx_ops = {
|
||||
/* init and setup */
|
||||
hal_srng_dst_hw_init_generic,
|
||||
|
|
@ -1942,6 +1956,7 @@ struct hal_hw_txrx_ops qca6750_hal_hw_txrx_ops = {
|
|||
hal_rx_mpdu_end_offset_get_generic,
|
||||
hal_rx_flow_setup_fse_6750,
|
||||
hal_compute_reo_remap_ix2_ix3_6750,
|
||||
hal_compute_reo_remap_ix0_6750,
|
||||
|
||||
/* CMEM FSE */
|
||||
hal_rx_flow_setup_cmem_fse_6750,
|
||||
|
|
@ -2227,7 +2242,11 @@ struct hal_hw_srng_config hw_srng_table_6750[] = {
|
|||
},
|
||||
{ /* WBM2SW_RELEASE */
|
||||
.start_ring_id = HAL_SRNG_WBM2SW0_RELEASE,
|
||||
#ifdef CONFIG_PLD_IPCIE_FW_SIM
|
||||
.max_rings = 5,
|
||||
#else
|
||||
.max_rings = 4,
|
||||
#endif
|
||||
.entry_size = sizeof(struct wbm_release_ring) >> 2,
|
||||
.lmac_ring = FALSE,
|
||||
.ring_dir = HAL_SRNG_DST_RING,
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -1328,6 +1329,7 @@ struct hal_hw_txrx_ops qca8074_hal_hw_txrx_ops = {
|
|||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -1331,6 +1332,7 @@ struct hal_hw_txrx_ops qca8074v2_hal_hw_txrx_ops = {
|
|||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
/*
|
||||
* Copyright (c) 2016-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
|
||||
|
|
@ -1862,6 +1863,7 @@ struct hal_hw_txrx_ops qcn9000_hal_hw_txrx_ops = {
|
|||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
/*
|
||||
* Copyright (c) 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
|
||||
|
|
@ -1778,6 +1779,7 @@ struct hal_hw_txrx_ops qcn9100_hal_hw_txrx_ops = {
|
|||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -1657,36 +1657,6 @@ ssize_t hif_ce_en_desc_hist(struct hif_softc *scn,
|
|||
const char *buf, size_t size);
|
||||
ssize_t hif_disp_ce_enable_desc_data_hist(struct hif_softc *scn, char *buf);
|
||||
ssize_t hif_dump_desc_event(struct hif_softc *scn, char *buf);
|
||||
/**
|
||||
* hif_ce_debug_history_prealloc_init() - alloc ce debug history memory
|
||||
*
|
||||
* alloc ce debug history memory with driver init, so such memory can
|
||||
* be existed even after stop module.
|
||||
* on ini value.
|
||||
*
|
||||
* Return: QDF_STATUS_SUCCESS for success, other for fail.
|
||||
*/
|
||||
QDF_STATUS hif_ce_debug_history_prealloc_init(void);
|
||||
/**
|
||||
* hif_ce_debug_history_prealloc_deinit() - free ce debug history memory
|
||||
*
|
||||
* free ce debug history memory when driver deinit.
|
||||
*
|
||||
* Return: QDF_STATUS_SUCCESS for success, other for fail.
|
||||
*/
|
||||
QDF_STATUS hif_ce_debug_history_prealloc_deinit(void);
|
||||
#else
|
||||
static inline
|
||||
QDF_STATUS hif_ce_debug_history_prealloc_init(void)
|
||||
{
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
static inline
|
||||
QDF_STATUS hif_ce_debug_history_prealloc_deinit(void)
|
||||
{
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
#endif/*#if defined(HIF_CONFIG_SLUB_DEBUG_ON)||defined(HIF_CE_DEBUG_DATA_BUF)*/
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -1453,71 +1453,41 @@ void free_mem_ce_debug_hist_data(struct hif_softc *scn, uint32_t ce_id)
|
|||
|
||||
#ifndef HIF_CE_DEBUG_DATA_DYNAMIC_BUF
|
||||
#if defined(HIF_CONFIG_SLUB_DEBUG_ON) || defined(HIF_CE_DEBUG_DATA_BUF)
|
||||
struct hif_ce_desc_event *hif_ce_desc_history[CE_COUNT_MAX];
|
||||
|
||||
/* define this variable for crashscope parse */
|
||||
/* define below variables for crashscope parse */
|
||||
struct hif_ce_desc_event *hif_ce_desc_history[CE_COUNT_MAX];
|
||||
uint32_t hif_ce_history_max = HIF_CE_HISTORY_MAX;
|
||||
|
||||
/**
|
||||
* hif_ce_debug_only_enable_ce2_ce3() - if only enable ce2/ce3 debug
|
||||
* This is different config for perf/debug buid version.
|
||||
* for debug build, it will enable ce history for all ce, but for
|
||||
* perf build(if CONFIG_SLUB_DEBUG_ON is N), it only enable for
|
||||
* ce2(wmi event) & ce3(wmi cmd) history.
|
||||
*
|
||||
* Return: true if only enable ce2/ce3 debug, otherwise false.
|
||||
*/
|
||||
#if defined(CONFIG_SLUB_DEBUG_ON)
|
||||
static inline bool hif_ce_debug_only_enable_ce2_ce3(void)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
#define CE_DESC_HISTORY_BUFF_CNT CE_COUNT_MAX
|
||||
#define IS_CE_DEBUG_ONLY_FOR_CE2_CE3 FALSE
|
||||
#else
|
||||
static inline bool hif_ce_debug_only_enable_ce2_ce3(void)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
#define CE_DESC_HISTORY_BUFF_CNT 2
|
||||
#define IS_CE_DEBUG_ONLY_FOR_CE2_CE3 TRUE
|
||||
#endif
|
||||
struct hif_ce_desc_event
|
||||
hif_ce_desc_history_buff[CE_DESC_HISTORY_BUFF_CNT][HIF_CE_HISTORY_MAX];
|
||||
|
||||
QDF_STATUS hif_ce_debug_history_prealloc_deinit(void)
|
||||
static struct hif_ce_desc_event *
|
||||
hif_ce_debug_history_buf_get(unsigned int ce_id)
|
||||
{
|
||||
int ce_id;
|
||||
|
||||
for (ce_id = 0; ce_id < CE_COUNT_MAX; ce_id++) {
|
||||
if (hif_ce_desc_history[ce_id]) {
|
||||
qdf_mem_free(hif_ce_desc_history[ce_id]);
|
||||
hif_ce_desc_history[ce_id] = NULL;
|
||||
}
|
||||
}
|
||||
hif_debug("ce debug memory freed");
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
QDF_STATUS hif_ce_debug_history_prealloc_init(void)
|
||||
{
|
||||
int ce_id;
|
||||
|
||||
hif_debug("alloc ce debug memory, only_ce2/ce3 %d",
|
||||
hif_ce_debug_only_enable_ce2_ce3());
|
||||
for (ce_id = 0; ce_id < CE_COUNT_MAX; ce_id++) {
|
||||
if (hif_ce_debug_only_enable_ce2_ce3() &&
|
||||
ce_id != CE_ID_2 &&
|
||||
ce_id != CE_ID_3) {
|
||||
hif_ce_desc_history[ce_id] = NULL;
|
||||
continue;
|
||||
}
|
||||
|
||||
hif_debug("get ce debug buffer ce_id %u, only_ce2/ce3=%d",
|
||||
ce_id, IS_CE_DEBUG_ONLY_FOR_CE2_CE3);
|
||||
if (IS_CE_DEBUG_ONLY_FOR_CE2_CE3 &&
|
||||
(ce_id == CE_ID_2 || ce_id == CE_ID_3)) {
|
||||
hif_ce_desc_history[ce_id] =
|
||||
qdf_mem_malloc(HIF_CE_HISTORY_MAX *
|
||||
sizeof(struct hif_ce_desc_event));
|
||||
if (!hif_ce_desc_history[ce_id]) {
|
||||
hif_ce_debug_history_prealloc_deinit();
|
||||
return QDF_STATUS_E_NOMEM;
|
||||
}
|
||||
hif_ce_desc_history_buff[ce_id - CE_ID_2];
|
||||
} else {
|
||||
hif_ce_desc_history[ce_id] =
|
||||
hif_ce_desc_history_buff[ce_id];
|
||||
}
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
return hif_ce_desc_history[ce_id];
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -1534,7 +1504,8 @@ alloc_mem_ce_debug_history(struct hif_softc *scn, unsigned int ce_id,
|
|||
struct ce_desc_hist *ce_hist = &scn->hif_ce_desc_hist;
|
||||
QDF_STATUS status = QDF_STATUS_SUCCESS;
|
||||
|
||||
if (hif_ce_debug_only_enable_ce2_ce3() &&
|
||||
/* For perf build, return directly for non ce2/ce3 */
|
||||
if (IS_CE_DEBUG_ONLY_FOR_CE2_CE3 &&
|
||||
ce_id != CE_ID_2 &&
|
||||
ce_id != CE_ID_3) {
|
||||
ce_hist->enable[ce_id] = false;
|
||||
|
|
@ -1542,11 +1513,7 @@ alloc_mem_ce_debug_history(struct hif_softc *scn, unsigned int ce_id,
|
|||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
if (!hif_ce_desc_history[ce_id]) {
|
||||
hif_err("prealloc memory failed");
|
||||
return QDF_STATUS_E_NOMEM;
|
||||
}
|
||||
ce_hist->hist_ev[ce_id] = hif_ce_desc_history[ce_id];
|
||||
ce_hist->hist_ev[ce_id] = hif_ce_debug_history_buf_get(ce_id);
|
||||
ce_hist->enable[ce_id] = true;
|
||||
|
||||
if (src_nentries) {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
/*
|
||||
* Copyright (c) 2015-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
|
||||
* above copyright notice and this permission notice appear in all
|
||||
|
|
@ -1056,6 +1057,9 @@ QDF_STATUS hif_try_prevent_ep_vote_access(struct hif_opaque_softc *hif_ctx)
|
|||
qdf_sleep(10);
|
||||
}
|
||||
|
||||
if (pld_is_pci_ep_awake(scn->qdf_dev->dev) == -ENOTSUPP)
|
||||
return QDF_STATUS_SUCCESS;
|
||||
|
||||
while (pld_is_pci_ep_awake(scn->qdf_dev->dev)) {
|
||||
if (++wait_cnt > HIF_EP_WAKE_RESET_WAIT_CNT) {
|
||||
hif_err("Release EP vote is not proceed by Fw");
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -4753,6 +4754,33 @@ enum qca_wlan_vendor_attr_config {
|
|||
* will update the RX NSS based on QCA_WLAN_VENDOR_ATTR_CONFIG_RX_NSS.
|
||||
*/
|
||||
QCA_WLAN_VENDOR_ATTR_CONFIG_RX_NSS = 78,
|
||||
|
||||
/*
|
||||
* 8-bit unsigned value. This attribute, when set, indicates whether the
|
||||
* specified interface is the primary STA interface when there are more
|
||||
* than one STA interfaces concurrently active.
|
||||
*
|
||||
* This configuration helps the firmware/hardware to support certain
|
||||
* features (e.g., roaming) on this primary interface, if the same
|
||||
* cannot be supported on the concurrent STA interfaces simultaneously.
|
||||
*
|
||||
* This configuration is only applicable for a single STA interface on
|
||||
* a device and gives the priority for it only over other concurrent STA
|
||||
* interfaces.
|
||||
*
|
||||
* If the device is a multi wiphy/soc, this configuration applies to a
|
||||
* single STA interface across the wiphys.
|
||||
*
|
||||
* 1-Enable (is the primary STA), 0-Disable (is not the primary STA)
|
||||
*/
|
||||
QCA_WLAN_VENDOR_ATTR_CONFIG_CONCURRENT_STA_PRIMARY = 79,
|
||||
|
||||
/*
|
||||
* 8-bit unsigned value. This attribute can be used to configure the
|
||||
* driver to enable/disable FT-over-DS feature. Possible values for
|
||||
* this attribute are 1-Enable and 0-Disable.
|
||||
*/
|
||||
QCA_WLAN_VENDOR_ATTR_CONFIG_FT_OVER_DS = 80,
|
||||
/* keep last */
|
||||
QCA_WLAN_VENDOR_ATTR_CONFIG_AFTER_LAST,
|
||||
QCA_WLAN_VENDOR_ATTR_CONFIG_MAX =
|
||||
|
|
@ -10891,6 +10919,58 @@ enum qca_wlan_vendor_oci_override_frame_type {
|
|||
QCA_WLAN_VENDOR_OCI_OVERRIDE_FRAME_FILS_REASSOC_REQ = 4,
|
||||
};
|
||||
|
||||
/**
|
||||
* enum qca_wlan_concurrent_sta_policy_config - Concurrent STA policies
|
||||
*
|
||||
* @QCA_WLAN_CONCURRENT_STA_POLICY_PREFER_PRIMARY: Preference to the primary
|
||||
* STA interface has to be given while selecting the connection policies
|
||||
* (e.g., BSSID, band, TX/RX chains, etc.) for the subsequent STA interface.
|
||||
* An interface is set as primary through the attribute
|
||||
* QCA_WLAN_VENDOR_ATTR_CONFIG_CONCURRENT_STA_PRIMARY. This policy is not
|
||||
* applicable if the primary interface has not been set earlier.
|
||||
*
|
||||
* The intention is not to downgrade the primary STA performance, such as:
|
||||
* - Do not reduce the number of TX/RX chains of primary connection.
|
||||
* - Do not optimize DBS vs. MCC/SCC, if DBS ends up reducing the number of
|
||||
* chains.
|
||||
* - If using MCC, should set the MCC duty cycle of the primary connection to
|
||||
* be higher than the secondary connection.
|
||||
*
|
||||
* @QCA_WLAN_CONCURRENT_STA_POLICY_UNBIASED: The connection policies for the
|
||||
* subsequent STA connection shall be chosen to balance with the existing
|
||||
* concurrent STA's performance.
|
||||
* Such as
|
||||
* - Can choose MCC or DBS mode depending on the MCC efficiency and hardware
|
||||
* capability.
|
||||
* - If using MCC, set the MCC duty cycle of the primary connection to be equal
|
||||
* to the secondary.
|
||||
* - Prefer BSSID candidates which will help provide the best "overall"
|
||||
* performance for all the STA connections.
|
||||
*/
|
||||
enum qca_wlan_concurrent_sta_policy_config {
|
||||
QCA_WLAN_CONCURRENT_STA_POLICY_PREFER_PRIMARY = 0,
|
||||
QCA_WLAN_CONCURRENT_STA_POLICY_UNBIASED = 1,
|
||||
};
|
||||
|
||||
/**
|
||||
* enum qca_wlan_vendor_attr_concurrent_sta_policy - Defines attributes
|
||||
* used by QCA_NL80211_VENDOR_SUBCMD_CONCURRENT_MULTI_STA_POLICY vendor command.
|
||||
*
|
||||
* @QCA_WLAN_VENDOR_ATTR_CONCURRENT_STA_POLICY_CONFIG:
|
||||
* u8 attribute. Configures the concurrent STA policy configuration.
|
||||
* Possible values are defined in enum qca_wlan_concurrent_sta_policy_config.
|
||||
*/
|
||||
enum qca_wlan_vendor_attr_concurrent_sta_policy {
|
||||
QCA_WLAN_VENDOR_ATTR_CONCURRENT_STA_POLICY_INVALID = 0,
|
||||
QCA_WLAN_VENDOR_ATTR_CONCURRENT_STA_POLICY_CONFIG = 1,
|
||||
|
||||
/* keep last */
|
||||
QCA_WLAN_VENDOR_ATTR_CONCURRENT_STA_POLICY_AFTER_LAST,
|
||||
QCA_WLAN_VENDOR_ATTR_CONCURRENT_STA_POLICY_MAX =
|
||||
QCA_WLAN_VENDOR_ATTR_CONCURRENT_STA_POLICY_AFTER_LAST - 1,
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* enum qca_sta_connect_fail_reason_codes - Defines values carried
|
||||
* by QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_CONNECT_FAIL_REASON_CODE vendor
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -51,6 +52,27 @@ const struct nla_policy cfg80211_scan_policy[
|
|||
[QCA_WLAN_VENDOR_ATTR_SCAN_COOKIE] = {.type = NLA_U64},
|
||||
};
|
||||
|
||||
/**
|
||||
* wlan_cfg80211_is_colocated_6ghz_scan_supported() - Check whether colocated
|
||||
* 6ghz scan flag present in scan request or not
|
||||
* @scan_flag: Flags bitmap coming from kernel
|
||||
*
|
||||
* Return: True if colocated 6ghz scan flag present in scan req
|
||||
*/
|
||||
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 10, 0))
|
||||
static bool
|
||||
wlan_cfg80211_is_colocated_6ghz_scan_supported(uint32_t scan_flag)
|
||||
{
|
||||
return !!(scan_flag & NL80211_SCAN_FLAG_COLOCATED_6GHZ);
|
||||
}
|
||||
#else
|
||||
static inline bool
|
||||
wlan_cfg80211_is_colocated_6ghz_scan_supported(uint32_t scan_flag)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(CFG80211_SCAN_RANDOM_MAC_ADDR) || \
|
||||
(LINUX_VERSION_CODE >= KERNEL_VERSION(4, 4, 0))
|
||||
/**
|
||||
|
|
@ -429,6 +451,9 @@ int wlan_cfg80211_sched_scan_start(struct wlan_objmgr_vdev *vdev,
|
|||
|
||||
req->networks_cnt = request->n_match_sets;
|
||||
req->vdev_id = wlan_vdev_get_id(vdev);
|
||||
req->vdev = vdev;
|
||||
req->scan_policy_colocated_6ghz =
|
||||
wlan_cfg80211_is_colocated_6ghz_scan_supported(request->flags);
|
||||
|
||||
if ((!req->networks_cnt) ||
|
||||
(req->networks_cnt > SCAN_PNO_MAX_SUPP_NETWORKS)) {
|
||||
|
|
@ -523,9 +548,15 @@ int wlan_cfg80211_sched_scan_start(struct wlan_objmgr_vdev *vdev,
|
|||
req->networks_list[i].bc_new_type = 0; /*eBCAST_UNKNOWN */
|
||||
|
||||
/*Copying list of valid channel into request */
|
||||
qdf_mem_copy(req->networks_list[i].channels, valid_ch,
|
||||
num_chan * sizeof(uint32_t));
|
||||
req->networks_list[i].channel_cnt = num_chan;
|
||||
for (j = 0; j < num_chan; j++)
|
||||
req->networks_list[i].pno_chan_list.chan[j].freq =
|
||||
valid_ch[j];
|
||||
req->networks_list[i].pno_chan_list.num_chan = num_chan;
|
||||
|
||||
if (ucfg_is_6ghz_pno_scan_optimization_supported(psoc))
|
||||
ucfg_scan_pno_add_all_valid_6g_channels(vdev, req,
|
||||
&num_chan);
|
||||
|
||||
req->networks_list[i].rssi_thresh =
|
||||
request->match_sets[i].rssi_thold;
|
||||
}
|
||||
|
|
@ -1322,6 +1353,8 @@ static void wlan_cfg80211_update_scan_policy_type_flags(
|
|||
scan_req->scan_policy_low_span = true;
|
||||
if (req->flags & NL80211_SCAN_FLAG_LOW_POWER)
|
||||
scan_req->scan_policy_low_power = true;
|
||||
if (wlan_cfg80211_is_colocated_6ghz_scan_supported(req->flags))
|
||||
scan_req->scan_policy_colocated_6ghz = true;
|
||||
}
|
||||
#else
|
||||
static inline void wlan_cfg80211_update_scan_policy_type_flags(
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -1023,6 +1024,11 @@ static QDF_STATUS target_if_dbr_replenish_ring(struct wlan_objmgr_pdev *pdev,
|
|||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
if (cookie >= mod_param->dbr_ring_cfg->num_ptr) {
|
||||
direct_buf_rx_err("invalid cookie %d", cookie);
|
||||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
|
||||
dbr_psoc_obj = wlan_objmgr_psoc_get_comp_private_obj(psoc,
|
||||
WLAN_TARGET_IF_COMP_DIRECT_BUF_RX);
|
||||
|
||||
|
|
@ -1504,6 +1510,11 @@ static void *target_if_dbr_vaddr_lookup(
|
|||
|
||||
dbr_buf_pool = mod_param->dbr_buf_pool;
|
||||
|
||||
if (cookie >= mod_param->dbr_ring_cfg->num_ptr) {
|
||||
direct_buf_rx_err("invalid cookie %d", cookie);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (dbr_buf_pool[cookie].paddr == paddr) {
|
||||
return dbr_buf_pool[cookie].vaddr +
|
||||
dbr_buf_pool[cookie].offset;
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
/*
|
||||
* Copyright (c) 2018-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
|
||||
|
|
@ -173,6 +174,11 @@ static int init_deinit_service_ready_event_handler(ol_scn_t scn_handle,
|
|||
wlan_psoc_nif_fw_ext_cap_set(psoc,
|
||||
WLAN_SOC_CEXT_SCAN_PER_CH_CONFIG);
|
||||
|
||||
if (wmi_service_enabled(wmi_handle,
|
||||
wmi_service_pno_scan_conf_per_ch_support))
|
||||
wlan_psoc_nif_fw_ext_cap_set(psoc,
|
||||
WLAN_SOC_PNO_SCAN_CONFIG_PER_CHANNEL);
|
||||
|
||||
if (wmi_service_enabled(wmi_handle, wmi_service_csa_beacon_template))
|
||||
wlan_psoc_nif_fw_ext_cap_set(psoc,
|
||||
WLAN_SOC_CEXT_CSA_TX_OFFLOAD);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -149,6 +150,9 @@
|
|||
/* ext event supported by fw */
|
||||
#define WLAN_SOC_EXT_EVENT_SUPPORTED 0x04000000
|
||||
|
||||
/* check 31st bit for per channel pno scan config flags support */
|
||||
#define WLAN_SOC_PNO_SCAN_CONFIG_PER_CHANNEL 0x40000000
|
||||
|
||||
/* feature_flags */
|
||||
/* CONF: ATH FF enabled */
|
||||
#define WLAN_SOC_F_FF 0x00000001
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -244,6 +245,105 @@ scm_is_scan_type_exempted_from_optimization(struct scan_start_request *req)
|
|||
return (req->scan_req.scan_type == SCAN_TYPE_RRM);
|
||||
}
|
||||
|
||||
/**
|
||||
* scm_add_all_valid_6g_channels() - Add all valid 6g channels to scan request
|
||||
* @vdev: vdev on which scan request is issued
|
||||
* @chan_list: channel list from userspace
|
||||
* @num_scan_ch: Total number of scan channels
|
||||
* @is_colocated_6ghz_scan_enabled: colocated 6ghz scan flag enabled in scan req
|
||||
*
|
||||
* If colocated 6ghz scan flag present in host scan request or at least one 6G
|
||||
* channel is present in the host scan request, then this API
|
||||
* fills all remaining (other than channel(s) resent in host scan req) valid
|
||||
* 6 GHz channel(s) to scan requests channel list and set the flag
|
||||
* FLAG_SCAN_ONLY_IF_RNR_FOUND for each of those added channels.
|
||||
* By this driver allows Firmware to scan 6G channels based on RNR IEs only.
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
void scm_add_all_valid_6g_channels(struct wlan_objmgr_pdev *pdev,
|
||||
struct chan_list *chan_list,
|
||||
uint8_t *num_scan_ch,
|
||||
bool is_colocated_6ghz_scan_enabled)
|
||||
{
|
||||
uint8_t i, j;
|
||||
enum channel_enum freq_idx;
|
||||
struct regulatory_channel *cur_chan_list;
|
||||
bool is_6g_ch_present = false, found;
|
||||
QDF_STATUS status;
|
||||
uint8_t temp_num_chan = 0;
|
||||
|
||||
for (i = 0; i < chan_list->num_chan; i++) {
|
||||
if (wlan_reg_is_6ghz_chan_freq(chan_list->chan[i].freq)) {
|
||||
scm_debug("At least one 6G chan present in scan req:%d",
|
||||
chan_list->chan[i].freq);
|
||||
is_6g_ch_present = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!is_6g_ch_present && !is_colocated_6ghz_scan_enabled) {
|
||||
|
||||
scm_debug("Neither 6G chan present nor flag set in scan req");
|
||||
return;
|
||||
}
|
||||
|
||||
cur_chan_list = qdf_mem_malloc(NUM_CHANNELS *
|
||||
sizeof(struct regulatory_channel));
|
||||
if (!cur_chan_list)
|
||||
return;
|
||||
|
||||
status = wlan_reg_get_current_chan_list(pdev, cur_chan_list);
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
qdf_mem_free(cur_chan_list);
|
||||
scm_debug("Failed to get cur_chan list");
|
||||
return;
|
||||
}
|
||||
|
||||
freq_idx =
|
||||
wlan_reg_get_chan_enum_for_freq(wlan_reg_min_6ghz_chan_freq());
|
||||
if (freq_idx == INVALID_CHANNEL)
|
||||
return;
|
||||
|
||||
scm_debug("freq_idx:%d", freq_idx);
|
||||
temp_num_chan = chan_list->num_chan;
|
||||
for (i = freq_idx; i < NUM_CHANNELS; i++) {
|
||||
found = false;
|
||||
for (j = 0; j < temp_num_chan; j++) {
|
||||
if (cur_chan_list[i].center_freq ==
|
||||
chan_list->chan[j].freq) {
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!found && cur_chan_list[i].state != CHANNEL_STATE_DISABLE &&
|
||||
cur_chan_list[i].state != CHANNEL_STATE_INVALID) {
|
||||
chan_list->chan[chan_list->num_chan].freq =
|
||||
cur_chan_list[i].center_freq;
|
||||
chan_list->chan[chan_list->num_chan].flags =
|
||||
FLAG_SCAN_ONLY_IF_RNR_FOUND;
|
||||
chan_list->num_chan++;
|
||||
}
|
||||
}
|
||||
|
||||
scm_debug("prev num_chan:%d, current num_chan:%d", temp_num_chan,
|
||||
chan_list->num_chan);
|
||||
*num_scan_ch = chan_list->num_chan;
|
||||
qdf_mem_free(cur_chan_list);
|
||||
}
|
||||
|
||||
static void scm_scan_add_all_valid_6g_channels(struct wlan_objmgr_pdev *pdev,
|
||||
struct scan_start_request *req,
|
||||
uint8_t *num_scan_ch)
|
||||
{
|
||||
bool is_colocated_6ghz_scan_enabled =
|
||||
req->scan_req.scan_policy_colocated_6ghz;
|
||||
|
||||
scm_add_all_valid_6g_channels(pdev, &req->scan_req.chan_list,
|
||||
num_scan_ch,
|
||||
is_colocated_6ghz_scan_enabled);
|
||||
}
|
||||
|
||||
static void
|
||||
scm_copy_valid_channels(struct wlan_objmgr_psoc *psoc,
|
||||
enum scan_mode_6ghz scan_mode,
|
||||
|
|
@ -418,6 +518,16 @@ scm_update_6ghz_channel_list(struct scan_start_request *req,
|
|||
scm_set_rnr_flag_non_psc_6g_ch(&chan_list->chan[0],
|
||||
num_scan_ch);
|
||||
break;
|
||||
case SCAN_MODE_6G_ALL_CHANNEL:
|
||||
/*
|
||||
* When the ini is set to SCAN_MODE_6G_ALL_CHANNEL,
|
||||
* Host fills all remaining (other than channel(s) present in
|
||||
* host scan req) valid 6 GHz channel(s) to scan requests and
|
||||
* set the flag FLAG_SCAN_ONLY_IF_RNR_FOUND for each remaining
|
||||
* channels.
|
||||
*/
|
||||
scm_scan_add_all_valid_6g_channels(pdev, req, &num_scan_ch);
|
||||
break;
|
||||
default:
|
||||
/*
|
||||
* Don't set the RNR flag for SCAN_MODE_6G_NO_CHANNEL/
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
/*
|
||||
* Copyright (c) 2017-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
|
||||
|
|
@ -70,6 +71,27 @@ scm_update_6ghz_channel_list(struct scan_start_request *req,
|
|||
*/
|
||||
bool
|
||||
scm_is_6ghz_scan_optimization_supported(struct wlan_objmgr_psoc *psoc);
|
||||
|
||||
/**
|
||||
* scm_add_all_valid_6g_channels() - Add all valid 6g channels to scan request
|
||||
* @vdev: vdev on which scan request is issued
|
||||
* @req: Scan start request
|
||||
* @num_scan_ch: Total number of scan channels
|
||||
*
|
||||
* If colocated 6ghz scan flag present in host scan request or at least one 6G
|
||||
* channel is present in the host scan request, then this API
|
||||
* fills all remaining (other than channel(s) resent in host scan req) valid
|
||||
* 6 GHz channel(s) to scan requests channel list and set the flag
|
||||
* FLAG_SCAN_ONLY_IF_RNR_FOUND for each of those added channels.
|
||||
* By this driver allows Firmware to scan 6G channels based on RNR IEs only.
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
void scm_add_all_valid_6g_channels(struct wlan_objmgr_pdev *pdev,
|
||||
struct chan_list *chan_list,
|
||||
uint8_t *num_scan_ch,
|
||||
bool is_colocated_6ghz);
|
||||
|
||||
#else
|
||||
static inline void
|
||||
scm_update_6ghz_channel_list(struct scan_start_request *req,
|
||||
|
|
@ -82,6 +104,13 @@ scm_is_6ghz_scan_optimization_supported(struct wlan_objmgr_psoc *psoc)
|
|||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline void scm_add_all_valid_6g_channels(struct wlan_objmgr_pdev *pdev,
|
||||
struct chan_list *chan_list,
|
||||
uint8_t *num_scan_ch,
|
||||
bool is_colocated_6ghz)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
/*
|
||||
* Copyright (c) 2017-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
|
||||
|
|
@ -89,6 +90,22 @@ QDF_STATUS wlan_scan_cfg_set_passive_6g_dwelltime(struct wlan_objmgr_psoc *psoc,
|
|||
*/
|
||||
QDF_STATUS wlan_scan_cfg_get_passive_6g_dwelltime(struct wlan_objmgr_psoc *psoc,
|
||||
uint32_t *dwell_time);
|
||||
|
||||
/**
|
||||
* wlan_scan_cfg_get_min_dwelltime_6g() - API to get minimum 6g dwelltime
|
||||
* @psoc: pointer to psoc object
|
||||
* @min_dwell_time_6ghz: minimum dwelltime 6g
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
void wlan_scan_cfg_get_min_dwelltime_6g(struct wlan_objmgr_psoc *psoc,
|
||||
uint32_t *min_dwell_time_6ghz);
|
||||
#else
|
||||
static inline
|
||||
void wlan_scan_cfg_get_min_dwelltime_6g(struct wlan_objmgr_psoc *psoc,
|
||||
uint32_t *min_dwell_time_6ghz)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
/*
|
||||
* Copyright (c) 2017-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
|
||||
|
|
@ -1023,7 +1024,8 @@ struct scan_req_params {
|
|||
struct {
|
||||
uint32_t scan_policy_high_accuracy:1,
|
||||
scan_policy_low_span:1,
|
||||
scan_policy_low_power:1;
|
||||
scan_policy_low_power:1,
|
||||
scan_policy_colocated_6ghz:1;
|
||||
};
|
||||
uint32_t scan_policy_type;
|
||||
};
|
||||
|
|
@ -1284,18 +1286,17 @@ enum ssid_bc_type {
|
|||
* @ssid: ssid
|
||||
* @authentication: authentication type
|
||||
* @encryption: encryption type
|
||||
* @bcastNetwType: broadcast nw type
|
||||
* @ucChannelCount: uc channel count
|
||||
* @aChannels: pno channel
|
||||
* @rssiThreshold: rssi threshold
|
||||
* @bc_new_type: broadcast nw type
|
||||
* @pno_chan_list: pno channel list info
|
||||
* @rssi_thresh: rssi threshold
|
||||
*/
|
||||
struct pno_nw_type {
|
||||
struct wlan_ssid ssid;
|
||||
uint32_t authentication;
|
||||
uint32_t encryption;
|
||||
uint32_t bc_new_type;
|
||||
uint8_t channel_cnt;
|
||||
uint32_t channels[SCAN_PNO_MAX_NETW_CHANNELS_EX];
|
||||
struct chan_list pno_chan_list;
|
||||
|
||||
int32_t rssi_thresh;
|
||||
};
|
||||
|
||||
|
|
@ -1329,6 +1330,7 @@ struct nlo_mawc_params {
|
|||
|
||||
/**
|
||||
* struct pno_scan_req_params - PNO Scan request structure
|
||||
* @vdev: vdev object
|
||||
* @networks_cnt: Number of networks
|
||||
* @do_passive_scan: Flag to request passive scan to fw
|
||||
* @vdev_id: vdev id
|
||||
|
|
@ -1359,8 +1361,10 @@ struct nlo_mawc_params {
|
|||
* slow_scan_period=1800, scan_backoff_multiplier=2 }
|
||||
* Result: 120s x2, 240s x2, 480s x2, 960s x2, 1800s xN
|
||||
* @mawc_params: Configuration parameters for NLO MAWC.
|
||||
* @scan_policy_colocated_6ghz: colocated_6ghz flag is set in pno scan req
|
||||
*/
|
||||
struct pno_scan_req_params {
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
uint32_t networks_cnt;
|
||||
bool do_passive_scan;
|
||||
uint32_t vdev_id;
|
||||
|
|
@ -1383,6 +1387,7 @@ struct pno_scan_req_params {
|
|||
int8_t relative_rssi;
|
||||
struct cpno_band_rssi_pref band_rssi_pref;
|
||||
struct nlo_mawc_params mawc_params;
|
||||
bool scan_policy_colocated_6ghz;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -98,7 +99,30 @@ ucfg_scan_get_scan_id(struct wlan_objmgr_psoc *psoc);
|
|||
* Return: 0 for success or error code.
|
||||
*/
|
||||
QDF_STATUS ucfg_scan_pno_start(struct wlan_objmgr_vdev *vdev,
|
||||
struct pno_scan_req_params *req);
|
||||
struct pno_scan_req_params *req);
|
||||
|
||||
/**
|
||||
* ucfg_scan_pno_add_all_valid_6g_channels() - This API to update all valid 6g
|
||||
* channels to pno scan request
|
||||
* @vdev: vdev pointer
|
||||
* @req: pno req params
|
||||
* @num_scan_ch: total number of channels present in pno scan request
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
void ucfg_scan_pno_add_all_valid_6g_channels(struct wlan_objmgr_vdev *vdev,
|
||||
struct pno_scan_req_params *req,
|
||||
uint8_t *num_scan_ch);
|
||||
|
||||
/**
|
||||
* ucfg_is_6ghz_pno_scan_optimization_supported() - Public API to check
|
||||
* 6ghz pno scan optimization supported in fw
|
||||
* @psoc: psoc object
|
||||
*
|
||||
* Return: 0 for success.
|
||||
*/
|
||||
bool
|
||||
ucfg_is_6ghz_pno_scan_optimization_supported(struct wlan_objmgr_psoc *psoc);
|
||||
|
||||
/**
|
||||
* ucfg_scan_pno_stop() - Public API to stop PNO
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
/*
|
||||
* Copyright (c) 2017-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
|
||||
|
|
@ -147,6 +148,17 @@ QDF_STATUS wlan_scan_cfg_set_passive_6g_dwelltime(struct wlan_objmgr_psoc *psoc,
|
|||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
void wlan_scan_cfg_get_min_dwelltime_6g(struct wlan_objmgr_psoc *psoc,
|
||||
uint32_t *min_dwell_time_6ghz)
|
||||
{
|
||||
struct wlan_scan_obj *scan_obj;
|
||||
|
||||
scan_obj = wlan_psoc_get_scan_obj(psoc);
|
||||
if (!scan_obj)
|
||||
return;
|
||||
*min_dwell_time_6ghz = scan_obj->scan_def.min_dwell_time_6g;
|
||||
}
|
||||
#endif
|
||||
|
||||
void wlan_scan_cfg_get_conc_active_dwelltime(struct wlan_objmgr_psoc *psoc,
|
||||
|
|
|
|||
|
|
@ -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 above
|
||||
|
|
@ -152,6 +153,12 @@ QDF_STATUS ucfg_scan_deinit(void)
|
|||
}
|
||||
|
||||
#ifdef FEATURE_WLAN_SCAN_PNO
|
||||
bool
|
||||
ucfg_is_6ghz_pno_scan_optimization_supported(struct wlan_objmgr_psoc *psoc)
|
||||
{
|
||||
return wlan_psoc_nif_fw_ext_cap_get(psoc,
|
||||
WLAN_SOC_PNO_SCAN_CONFIG_PER_CHANNEL);
|
||||
}
|
||||
|
||||
QDF_STATUS ucfg_scan_pno_start(struct wlan_objmgr_vdev *vdev,
|
||||
struct pno_scan_req_params *req)
|
||||
|
|
@ -178,6 +185,22 @@ QDF_STATUS ucfg_scan_pno_start(struct wlan_objmgr_vdev *vdev,
|
|||
return status;
|
||||
}
|
||||
|
||||
void ucfg_scan_pno_add_all_valid_6g_channels(struct wlan_objmgr_vdev *vdev,
|
||||
struct pno_scan_req_params *req,
|
||||
uint8_t *num_scan_ch)
|
||||
{
|
||||
struct wlan_objmgr_pdev *pdev;
|
||||
struct chan_list *pno_chan_list = &req->networks_list[0].pno_chan_list;
|
||||
bool is_colocated_6ghz = req->scan_policy_colocated_6ghz;
|
||||
|
||||
pdev = wlan_vdev_get_pdev(vdev);
|
||||
if (!pdev)
|
||||
return;
|
||||
|
||||
scm_add_all_valid_6g_channels(pdev, pno_chan_list, num_scan_ch,
|
||||
is_colocated_6ghz);
|
||||
}
|
||||
|
||||
QDF_STATUS ucfg_scan_pno_stop(struct wlan_objmgr_vdev *vdev)
|
||||
{
|
||||
struct scan_vdev_obj *scan_vdev_obj;
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -2597,9 +2597,9 @@ util_scan_parse_beacon_frame(struct wlan_objmgr_pdev *pdev,
|
|||
{
|
||||
struct wlan_bcn_frame *bcn;
|
||||
struct wlan_frame_hdr *hdr;
|
||||
uint8_t *mbssid_ie = NULL;
|
||||
uint8_t *mbssid_ie = NULL, *extcap_ie;
|
||||
uint32_t ie_len = 0;
|
||||
QDF_STATUS status;
|
||||
QDF_STATUS status = QDF_STATUS_E_FAILURE;
|
||||
struct scan_mbssid_info mbssid_info = { 0 };
|
||||
|
||||
hdr = (struct wlan_frame_hdr *)frame;
|
||||
|
|
@ -2609,12 +2609,24 @@ util_scan_parse_beacon_frame(struct wlan_objmgr_pdev *pdev,
|
|||
sizeof(struct wlan_frame_hdr) -
|
||||
offsetof(struct wlan_bcn_frame, ie));
|
||||
|
||||
mbssid_ie = util_scan_find_ie(WLAN_ELEMID_MULTIPLE_BSSID,
|
||||
extcap_ie = util_scan_find_ie(WLAN_ELEMID_XCAPS,
|
||||
(uint8_t *)&bcn->ie, ie_len);
|
||||
if (mbssid_ie) {
|
||||
qdf_mem_copy(&mbssid_info.trans_bssid,
|
||||
hdr->i_addr3, QDF_MAC_ADDR_SIZE);
|
||||
mbssid_info.profile_count = 1 << mbssid_ie[2];
|
||||
/* Process MBSSID when Multiple BSSID (Bit 22) is set in Ext Caps */
|
||||
if (extcap_ie &&
|
||||
extcap_ie[1] >= 3 && extcap_ie[1] <= WLAN_EXTCAP_IE_MAX_LEN &&
|
||||
(extcap_ie[4] & 0x40)) {
|
||||
mbssid_ie = util_scan_find_ie(WLAN_ELEMID_MULTIPLE_BSSID,
|
||||
(uint8_t *)&bcn->ie, ie_len);
|
||||
if (mbssid_ie) {
|
||||
if (mbssid_ie[1] <= 0) {
|
||||
scm_debug("MBSSID IE length is wrong %d",
|
||||
mbssid_ie[1]);
|
||||
return status;
|
||||
}
|
||||
qdf_mem_copy(&mbssid_info.trans_bssid,
|
||||
hdr->i_addr3, QDF_MAC_ADDR_SIZE);
|
||||
mbssid_info.profile_count = 1 << mbssid_ie[2];
|
||||
}
|
||||
}
|
||||
|
||||
status = util_scan_gen_scan_entry(pdev, frame, frame_len,
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
/*
|
||||
* Copyright (c) 2018-2021 The Linux Foundation. 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
|
||||
|
|
@ -614,9 +615,34 @@
|
|||
CFG_INI_BOOL("dp_sg_support", false, \
|
||||
"DP SG Enable")
|
||||
|
||||
#define WLAN_CFG_GRO_ENABLE_MIN 0
|
||||
#define WLAN_CFG_GRO_ENABLE_MAX 3
|
||||
#define WLAN_CFG_GRO_ENABLE_DEFAULT 0
|
||||
#define DP_GRO_ENABLE_BIT_SET BIT(0)
|
||||
#define DP_FORCE_USE_GRO_BIT_SET BIT(1)
|
||||
/*
|
||||
* <ini>
|
||||
* CFG_DP_GRO - Enable the GRO feature standalonely
|
||||
* @Min: 0
|
||||
* @Max: 3
|
||||
* @Default: 0
|
||||
*
|
||||
* This ini entry is used to enable/disable GRO feature standalonely.
|
||||
* Value 0: Disable GRO feature
|
||||
* Value 1: Enable Dynamic GRO feature, TC rule can control GRO
|
||||
* behavior of STA mode
|
||||
* Value 3: Enable GRO feature forcibly
|
||||
*
|
||||
* Usage: External
|
||||
*
|
||||
* </ini>
|
||||
*/
|
||||
#define CFG_DP_GRO \
|
||||
CFG_INI_BOOL("GROEnable", false, \
|
||||
"DP GRO Enable")
|
||||
CFG_INI_UINT("GROEnable", \
|
||||
WLAN_CFG_GRO_ENABLE_MIN, \
|
||||
WLAN_CFG_GRO_ENABLE_MAX, \
|
||||
WLAN_CFG_GRO_ENABLE_DEFAULT, \
|
||||
CFG_VALUE_OR_DEFAULT, "DP GRO Enable")
|
||||
|
||||
#define CFG_DP_OL_TX_CSUM \
|
||||
CFG_INI_BOOL("dp_offload_tx_csum_support", false, \
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
/*
|
||||
* Copyright (c) 2016-2021 The Linux Foundation. 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
|
||||
|
|
@ -502,6 +503,7 @@ wlan_cfg_soc_attach(struct cdp_ctrl_objmgr_psoc *psoc)
|
|||
{
|
||||
struct wlan_cfg_dp_soc_ctxt *wlan_cfg_ctx =
|
||||
qdf_mem_malloc(sizeof(struct wlan_cfg_dp_soc_ctxt));
|
||||
uint32_t gro_bit_set;
|
||||
|
||||
if (!wlan_cfg_ctx)
|
||||
return NULL;
|
||||
|
|
@ -560,7 +562,12 @@ wlan_cfg_soc_attach(struct cdp_ctrl_objmgr_psoc *psoc)
|
|||
wlan_cfg_ctx->tso_enabled = cfg_get(psoc, CFG_DP_TSO);
|
||||
wlan_cfg_ctx->lro_enabled = cfg_get(psoc, CFG_DP_LRO);
|
||||
wlan_cfg_ctx->sg_enabled = cfg_get(psoc, CFG_DP_SG);
|
||||
wlan_cfg_ctx->gro_enabled = cfg_get(psoc, CFG_DP_GRO);
|
||||
gro_bit_set = cfg_get(psoc, CFG_DP_GRO);
|
||||
if (gro_bit_set & DP_GRO_ENABLE_BIT_SET) {
|
||||
wlan_cfg_ctx->gro_enabled = true;
|
||||
if (gro_bit_set & DP_FORCE_USE_GRO_BIT_SET)
|
||||
wlan_cfg_ctx->force_gro_enabled = true;
|
||||
}
|
||||
wlan_cfg_ctx->ol_tx_csum_enabled = cfg_get(psoc, CFG_DP_OL_TX_CSUM);
|
||||
wlan_cfg_ctx->ol_rx_csum_enabled = cfg_get(psoc, CFG_DP_OL_RX_CSUM);
|
||||
wlan_cfg_ctx->rawmode_enabled = cfg_get(psoc, CFG_DP_RAWMODE);
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
/*
|
||||
* Copyright (c) 2013-2021 The Linux Foundation. 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
|
||||
|
|
@ -134,6 +135,7 @@ struct wlan_srng_cfg {
|
|||
* @lro_enabled: enable/disable LRO feature
|
||||
* @sg_enabled: enable disable scatter gather feature
|
||||
* @gro_enabled: enable disable GRO feature
|
||||
* @force_gro_enabled: force enable GRO feature
|
||||
* @ipa_enabled: Flag indicating if IPA is enabled
|
||||
* @ol_tx_csum_enabled: Flag indicating if TX csum is enabled
|
||||
* @ol_rx_csum_enabled: Flag indicating if Rx csum is enabled
|
||||
|
|
@ -244,6 +246,7 @@ struct wlan_cfg_dp_soc_ctxt {
|
|||
bool lro_enabled;
|
||||
bool sg_enabled;
|
||||
bool gro_enabled;
|
||||
bool force_gro_enabled;
|
||||
bool ipa_enabled;
|
||||
bool ol_tx_csum_enabled;
|
||||
bool ol_rx_csum_enabled;
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
/*
|
||||
* Copyright (c) 2016-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
|
||||
|
|
@ -5271,6 +5272,7 @@ typedef enum {
|
|||
#ifdef THERMAL_STATS_SUPPORT
|
||||
wmi_service_thermal_stats_temp_range_supported,
|
||||
#endif
|
||||
wmi_service_pno_scan_conf_per_ch_support,
|
||||
wmi_services_max,
|
||||
} wmi_conv_service_ids;
|
||||
#define WMI_SERVICE_UNAVAILABLE 0xFFFF
|
||||
|
|
|
|||
|
|
@ -4880,6 +4880,40 @@ static QDF_STATUS send_nlo_mawc_cmd_tlv(wmi_unified_t wmi_handle,
|
|||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
* wmi_dump_pno_scan_freq_list() - dump frequency list associated with pno
|
||||
* scan
|
||||
* @scan_freq_list: frequency list for pno scan
|
||||
*
|
||||
* Return: void
|
||||
*/
|
||||
static void wmi_dump_pno_scan_freq_list(struct chan_list *scan_freq_list)
|
||||
{
|
||||
uint32_t i;
|
||||
uint8_t info[WMI_MAX_CHAN_INFO_LOG];
|
||||
uint32_t len = 0;
|
||||
struct chan_info *chan_info;
|
||||
int ret;
|
||||
|
||||
wmi_debug("[PNO_SCAN] Total freq %d", scan_freq_list->num_chan);
|
||||
for (i = 0; i < scan_freq_list->num_chan; i++) {
|
||||
chan_info = &scan_freq_list->chan[i];
|
||||
ret = qdf_scnprintf(info + len, sizeof(info) - len,
|
||||
" %d[%d]", chan_info->freq,
|
||||
chan_info->flags);
|
||||
if (ret <= 0)
|
||||
break;
|
||||
len += ret;
|
||||
if (len >= (sizeof(info) - 20)) {
|
||||
wmi_nofl_debug("Freq[flag]:%s",
|
||||
info);
|
||||
len = 0;
|
||||
}
|
||||
}
|
||||
if (len)
|
||||
wmi_nofl_debug("Freq[flag]:%s", info);
|
||||
}
|
||||
|
||||
/**
|
||||
* send_pno_start_cmd_tlv() - PNO start request
|
||||
* @wmi_handle: wmi handle
|
||||
|
|
@ -4895,6 +4929,7 @@ static QDF_STATUS send_pno_start_cmd_tlv(wmi_unified_t wmi_handle,
|
|||
nlo_configured_parameters *nlo_list;
|
||||
uint32_t *channel_list;
|
||||
int32_t len;
|
||||
qdf_freq_t freq;
|
||||
wmi_buf_t buf;
|
||||
uint8_t *buf_ptr;
|
||||
uint8_t i;
|
||||
|
|
@ -4914,7 +4949,7 @@ static QDF_STATUS send_pno_start_cmd_tlv(wmi_unified_t wmi_handle,
|
|||
WMI_TLV_HDR_SIZE + WMI_TLV_HDR_SIZE + WMI_TLV_HDR_SIZE +
|
||||
WMI_TLV_HDR_SIZE + WMI_TLV_HDR_SIZE;
|
||||
|
||||
len += sizeof(uint32_t) * pno->networks_list[0].channel_cnt;
|
||||
len += sizeof(uint32_t) * pno->networks_list[0].pno_chan_list.num_chan;
|
||||
len += sizeof(nlo_configured_parameters) *
|
||||
QDF_MIN(pno->networks_cnt, WMI_NLO_MAX_SSIDS);
|
||||
len += sizeof(nlo_channel_prediction_cfg);
|
||||
|
|
@ -5001,20 +5036,28 @@ static QDF_STATUS send_pno_start_cmd_tlv(wmi_unified_t wmi_handle,
|
|||
buf_ptr += cmd->no_of_ssids * sizeof(nlo_configured_parameters);
|
||||
|
||||
/* Copy channel info */
|
||||
cmd->num_of_channels = pno->networks_list[0].channel_cnt;
|
||||
cmd->num_of_channels = pno->networks_list[0].pno_chan_list.num_chan;
|
||||
WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_UINT32,
|
||||
(cmd->num_of_channels * sizeof(uint32_t)));
|
||||
buf_ptr += WMI_TLV_HDR_SIZE;
|
||||
|
||||
channel_list = (uint32_t *) buf_ptr;
|
||||
for (i = 0; i < cmd->num_of_channels; i++) {
|
||||
channel_list[i] = pno->networks_list[0].channels[i];
|
||||
TARGET_SET_FREQ_IN_CHAN_LIST_TLV(channel_list[i],
|
||||
pno->networks_list[0].pno_chan_list.chan[i].freq);
|
||||
|
||||
if (channel_list[i] < WMI_NLO_FREQ_THRESH)
|
||||
channel_list[i] =
|
||||
wlan_chan_to_freq(pno->
|
||||
networks_list[0].channels[i]);
|
||||
if (channel_list[i] < WMI_NLO_FREQ_THRESH) {
|
||||
freq = pno->networks_list[0].pno_chan_list.chan[i].freq;
|
||||
TARGET_SET_FREQ_IN_CHAN_LIST_TLV(channel_list[i],
|
||||
wlan_chan_to_freq(freq));
|
||||
}
|
||||
|
||||
TARGET_SET_FLAGS_IN_CHAN_LIST_TLV(channel_list[i],
|
||||
pno->networks_list[0].pno_chan_list.chan[i].flags);
|
||||
}
|
||||
|
||||
wmi_dump_pno_scan_freq_list(&pno->networks_list[0].pno_chan_list);
|
||||
|
||||
buf_ptr += cmd->num_of_channels * sizeof(uint32_t);
|
||||
WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC,
|
||||
sizeof(nlo_channel_prediction_cfg));
|
||||
|
|
@ -15907,6 +15950,8 @@ static void populate_tlv_service(uint32_t *wmi_service)
|
|||
wmi_service[wmi_service_thermal_stats_temp_range_supported] =
|
||||
WMI_SERVICE_THERMAL_THROT_STATS_TEMP_RANGE_SUPPORT;
|
||||
#endif
|
||||
wmi_service[wmi_service_pno_scan_conf_per_ch_support] =
|
||||
WMI_SERVICE_PNO_SCAN_CONFIG_PER_CHANNEL;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Reference in a new issue