qcacmn: Use different Rx ring mask for ML and non-ML peers

Add framework to use different RX hash values and ring masks
for ML and non-ML peers

Change-Id: I098cb50b8873eb137ce096011d01a5c21aaf854f
CRs-Fixed: 3269916
This commit is contained in:
Chaithanya Garrepalli
2022-08-22 11:38:57 +05:30
committed by Madan Koyyalamudi
parent 383edf35d0
commit adbb77002a
8 changed files with 190 additions and 150 deletions

View File

@@ -418,12 +418,14 @@ enum cdp_peer_type {
* @is_first_link: set true for first MLO link peer * @is_first_link: set true for first MLO link peer
* @is_primary_link: set true for MLO primary link peer * @is_primary_link: set true for MLO primary link peer
* @primary_umac_id: primary umac_id * @primary_umac_id: primary umac_id
* @num_links: number of links in MLO
*/ */
struct cdp_peer_setup_info { struct cdp_peer_setup_info {
uint8_t *mld_peer_mac; uint8_t *mld_peer_mac;
uint8_t is_first_link:1, uint8_t is_first_link:1,
is_primary_link:1; is_primary_link:1;
uint8_t primary_umac_id; uint8_t primary_umac_id;
uint8_t num_links;
}; };
/** /**

View File

@@ -1866,6 +1866,89 @@ dp_initialize_arch_ops_be_mlo(struct dp_arch_ops *arch_ops)
} }
#endif /* WLAN_FEATURE_11BE_MLO */ #endif /* WLAN_FEATURE_11BE_MLO */
#if defined(WLAN_FEATURE_11BE_MLO) && defined(WLAN_MLO_MULTI_CHIP)
#define DP_LMAC_PEER_ID_MSB_LEGACY 2
#define DP_LMAC_PEER_ID_MSB_MLO 3
static void dp_peer_get_reo_hash_be(struct dp_vdev *vdev,
struct cdp_peer_setup_info *setup_info,
enum cdp_host_reo_dest_ring *reo_dest,
bool *hash_based,
uint8_t *lmac_peer_id_msb)
{
struct dp_soc *soc = vdev->pdev->soc;
struct dp_soc_be *be_soc = dp_get_be_soc_from_dp_soc(soc);
if (!be_soc->mlo_enabled)
return dp_vdev_get_default_reo_hash(vdev, reo_dest,
hash_based);
*hash_based = wlan_cfg_is_rx_hash_enabled(soc->wlan_cfg_ctx);
*reo_dest = vdev->pdev->reo_dest;
/* Not a ML link peer use non-mlo */
if (!setup_info) {
*lmac_peer_id_msb = DP_LMAC_PEER_ID_MSB_LEGACY;
return;
}
/* For STA ML VAP we do not have num links info at this point
* use MLO case always
*/
if (vdev->opmode == wlan_op_mode_sta) {
*lmac_peer_id_msb = DP_LMAC_PEER_ID_MSB_MLO;
return;
}
/* For AP ML VAP consider the peer as ML only it associates with
* multiple links
*/
if (setup_info->num_links == 1) {
*lmac_peer_id_msb = DP_LMAC_PEER_ID_MSB_LEGACY;
return;
}
*lmac_peer_id_msb = DP_LMAC_PEER_ID_MSB_MLO;
}
static bool dp_reo_remap_config_be(struct dp_soc *soc,
uint32_t *remap0,
uint32_t *remap1,
uint32_t *remap2)
{
struct dp_soc_be *be_soc = dp_get_be_soc_from_dp_soc(soc);
uint32_t reo_config = wlan_cfg_get_reo_rings_mapping(soc->wlan_cfg_ctx);
uint32_t reo_mlo_config =
wlan_cfg_mlo_rx_ring_map_get(soc->wlan_cfg_ctx);
if (!be_soc->mlo_enabled)
return dp_reo_remap_config(soc, remap0, remap1, remap2);
*remap0 = hal_reo_ix_remap_value_get_be(soc->hal_soc, reo_mlo_config);
*remap1 = hal_reo_ix_remap_value_get_be(soc->hal_soc, reo_config);
*remap2 = hal_reo_ix_remap_value_get_be(soc->hal_soc, reo_mlo_config);
return true;
}
#else
static void dp_peer_get_reo_hash_be(struct dp_vdev *vdev,
struct cdp_peer_setup_info *setup_info,
enum cdp_host_reo_dest_ring *reo_dest,
bool *hash_based,
uint8_t *lmac_peer_id_msb)
{
dp_vdev_get_default_reo_hash(vdev, reo_dest, hash_based);
}
static bool dp_reo_remap_config_be(struct dp_soc *soc,
uint32_t *remap0,
uint32_t *remap1,
uint32_t *remap2)
{
return dp_reo_remap_config(soc, remap0, remap1, remap2);
}
#endif
void dp_initialize_arch_ops_be(struct dp_arch_ops *arch_ops) void dp_initialize_arch_ops_be(struct dp_arch_ops *arch_ops)
{ {
#ifndef QCA_HOST_MODE_WIFI_DISABLED #ifndef QCA_HOST_MODE_WIFI_DISABLED
@@ -1924,4 +2007,6 @@ void dp_initialize_arch_ops_be(struct dp_arch_ops *arch_ops)
dp_init_near_full_arch_ops_be(arch_ops); dp_init_near_full_arch_ops_be(arch_ops);
arch_ops->get_rx_hash_key = dp_get_rx_hash_key_be; arch_ops->get_rx_hash_key = dp_get_rx_hash_key_be;
arch_ops->print_mlo_ast_stats = dp_print_mlo_ast_stats_be; arch_ops->print_mlo_ast_stats = dp_print_mlo_ast_stats_be;
arch_ops->peer_get_reo_hash = dp_peer_get_reo_hash_be;
arch_ops->reo_remap_config = dp_reo_remap_config_be;
} }

View File

@@ -6594,6 +6594,7 @@ dp_soc_attach_target_wifi3(struct cdp_soc_t *cdp_soc)
{ {
struct dp_soc *soc = (struct dp_soc *)cdp_soc; struct dp_soc *soc = (struct dp_soc *)cdp_soc;
QDF_STATUS status = QDF_STATUS_SUCCESS; QDF_STATUS status = QDF_STATUS_SUCCESS;
struct hal_reo_params reo_params;
htt_soc_attach_target(soc->htt_handle); htt_soc_attach_target(soc->htt_handle);
@@ -6649,6 +6650,39 @@ dp_soc_attach_target_wifi3(struct cdp_soc_t *cdp_soc)
/* initialize work queue for stats processing */ /* initialize work queue for stats processing */
qdf_create_work(0, &soc->htt_stats.work, htt_t2h_stats_handler, soc); qdf_create_work(0, &soc->htt_stats.work, htt_t2h_stats_handler, soc);
wlan_cfg_soc_update_tgt_params(soc->wlan_cfg_ctx,
soc->ctrl_psoc);
/* Setup HW REO */
qdf_mem_zero(&reo_params, sizeof(reo_params));
if (wlan_cfg_is_rx_hash_enabled(soc->wlan_cfg_ctx)) {
/*
* Reo ring remap is not required if both radios
* are offloaded to NSS
*/
if (soc->arch_ops.reo_remap_config(soc, &reo_params.remap0,
&reo_params.remap1,
&reo_params.remap2))
reo_params.rx_hash_enabled = true;
else
reo_params.rx_hash_enabled = false;
}
/*
* set the fragment destination ring
*/
dp_reo_frag_dst_set(soc, &reo_params.frag_dst_ring);
if (wlan_cfg_get_dp_soc_nss_cfg(soc->wlan_cfg_ctx))
reo_params.alt_dst_ind_0 = REO_REMAP_RELEASE;
hal_reo_setup(soc->hal_soc, &reo_params, 1);
hal_reo_set_err_dst_remap(soc->hal_soc);
soc->features.pn_in_reo_dest = hal_reo_enable_pn_in_dest(soc->hal_soc);
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;
} }
@@ -8039,8 +8073,10 @@ static inline bool dp_is_vdev_subtype_p2p(struct dp_vdev *vdev)
* Return: None * Return: None
*/ */
static void dp_peer_setup_get_reo_hash(struct dp_vdev *vdev, static void dp_peer_setup_get_reo_hash(struct dp_vdev *vdev,
struct cdp_peer_setup_info *setup_info,
enum cdp_host_reo_dest_ring *reo_dest, enum cdp_host_reo_dest_ring *reo_dest,
bool *hash_based) bool *hash_based,
uint8_t *lmac_peer_id_msb)
{ {
struct dp_soc *soc; struct dp_soc *soc;
struct dp_pdev *pdev; struct dp_pdev *pdev;
@@ -8088,10 +8124,15 @@ static void dp_peer_setup_get_reo_hash(struct dp_vdev *vdev,
* Return: None * Return: None
*/ */
static void dp_peer_setup_get_reo_hash(struct dp_vdev *vdev, static void dp_peer_setup_get_reo_hash(struct dp_vdev *vdev,
struct cdp_peer_setup_info *setup_info,
enum cdp_host_reo_dest_ring *reo_dest, enum cdp_host_reo_dest_ring *reo_dest,
bool *hash_based) bool *hash_based,
uint8_t *lmac_peer_id_msb)
{ {
dp_vdev_get_default_reo_hash(vdev, reo_dest, hash_based); struct dp_soc *soc = vdev->pdev->soc;
soc->arch_ops.peer_get_reo_hash(vdev, setup_info, reo_dest, hash_based,
lmac_peer_id_msb);
} }
#endif /* IPA_OFFLOAD */ #endif /* IPA_OFFLOAD */
@@ -8134,7 +8175,9 @@ dp_peer_setup_wifi3(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
/* save vdev related member in case vdev freed */ /* save vdev related member in case vdev freed */
vdev_opmode = vdev->opmode; vdev_opmode = vdev->opmode;
pdev = vdev->pdev; pdev = vdev->pdev;
dp_peer_setup_get_reo_hash(vdev, &reo_dest, &hash_based); dp_peer_setup_get_reo_hash(vdev, setup_info,
&reo_dest, &hash_based,
&lmac_peer_id_msb);
dp_info("pdev: %d vdev :%d opmode:%u hash-based-steering:%d default-reo_dest:%u", dp_info("pdev: %d vdev :%d opmode:%u hash-based-steering:%d default-reo_dest:%u",
pdev->pdev_id, vdev->vdev_id, pdev->pdev_id, vdev->vdev_id,
@@ -14879,7 +14922,6 @@ void *dp_soc_init(struct dp_soc *soc, HTC_HANDLE htc_handle,
{ {
struct htt_soc *htt_soc = (struct htt_soc *)soc->htt_handle; struct htt_soc *htt_soc = (struct htt_soc *)soc->htt_handle;
bool is_monitor_mode = false; bool is_monitor_mode = false;
struct hal_reo_params reo_params;
uint8_t i; uint8_t i;
int num_dp_msi; int num_dp_msi;
struct dp_mon_ops *mon_ops; struct dp_mon_ops *mon_ops;
@@ -15004,23 +15046,6 @@ void *dp_soc_init(struct dp_soc *soc, HTC_HANDLE htc_handle,
if (soc->disable_mac1_intr) if (soc->disable_mac1_intr)
dp_soc_disable_unused_mac_intr_mask(soc, 0x1); dp_soc_disable_unused_mac_intr_mask(soc, 0x1);
/* Setup HW REO */
qdf_mem_zero(&reo_params, sizeof(reo_params));
if (wlan_cfg_is_rx_hash_enabled(soc->wlan_cfg_ctx)) {
/*
* Reo ring remap is not required if both radios
* 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;
else
reo_params.rx_hash_enabled = false;
}
/* setup the global rx defrag waitlist */ /* setup the global rx defrag waitlist */
TAILQ_INIT(&soc->rx.defrag.waitlist); TAILQ_INIT(&soc->rx.defrag.waitlist);
soc->rx.defrag.timeout_ms = soc->rx.defrag.timeout_ms =
@@ -15030,20 +15055,6 @@ void *dp_soc_init(struct dp_soc *soc, HTC_HANDLE htc_handle,
wlan_cfg_get_defrag_timeout_check(soc->wlan_cfg_ctx); wlan_cfg_get_defrag_timeout_check(soc->wlan_cfg_ctx);
qdf_spinlock_create(&soc->rx.defrag.defrag_lock); qdf_spinlock_create(&soc->rx.defrag.defrag_lock);
/*
* set the fragment destination ring
*/
dp_reo_frag_dst_set(soc, &reo_params.frag_dst_ring);
if (wlan_cfg_get_dp_soc_nss_cfg(soc->wlan_cfg_ctx))
reo_params.alt_dst_ind_0 = REO_REMAP_RELEASE;
hal_reo_setup(soc->hal_soc, &reo_params, 1);
hal_reo_set_err_dst_remap(soc->hal_soc);
soc->features.pn_in_reo_dest = hal_reo_enable_pn_in_dest(soc->hal_soc);
mon_ops = dp_mon_ops_get(soc); mon_ops = dp_mon_ops_get(soc);
if (mon_ops && mon_ops->mon_soc_init) if (mon_ops && mon_ops->mon_soc_init)
mon_ops->mon_soc_init(soc); mon_ops->mon_soc_init(soc);

View File

@@ -1830,6 +1830,13 @@ struct dp_arch_ops {
void (*txrx_peer_map_detach)(struct dp_soc *soc); void (*txrx_peer_map_detach)(struct dp_soc *soc);
QDF_STATUS (*dp_rxdma_ring_sel_cfg)(struct dp_soc *soc); QDF_STATUS (*dp_rxdma_ring_sel_cfg)(struct dp_soc *soc);
void (*soc_cfg_attach)(struct dp_soc *soc); void (*soc_cfg_attach)(struct dp_soc *soc);
void (*peer_get_reo_hash)(struct dp_vdev *vdev,
struct cdp_peer_setup_info *setup_info,
enum cdp_host_reo_dest_ring *reo_dest,
bool *hash_based,
uint8_t *lmac_peer_id_msb);
bool (*reo_remap_config)(struct dp_soc *soc, uint32_t *remap0,
uint32_t *remap1, uint32_t *remap2);
/* TX RX Arch Ops */ /* TX RX Arch Ops */
QDF_STATUS (*tx_hw_enqueue)(struct dp_soc *soc, struct dp_vdev *vdev, QDF_STATUS (*tx_hw_enqueue)(struct dp_soc *soc, struct dp_vdev *vdev,

View File

@@ -558,6 +558,23 @@ static void dp_get_rx_hash_key_li(struct dp_soc *soc,
dp_get_rx_hash_key_bytes(lro_hash); dp_get_rx_hash_key_bytes(lro_hash);
} }
static void dp_peer_get_reo_hash_li(struct dp_vdev *vdev,
struct cdp_peer_setup_info *setup_info,
enum cdp_host_reo_dest_ring *reo_dest,
bool *hash_based,
uint8_t *lmac_peer_id_msb)
{
dp_vdev_get_default_reo_hash(vdev, reo_dest, hash_based);
}
static bool dp_reo_remap_config_li(struct dp_soc *soc,
uint32_t *remap0,
uint32_t *remap1,
uint32_t *remap2)
{
return dp_reo_remap_config(soc, remap0, remap1, remap2);
}
void dp_initialize_arch_ops_li(struct dp_arch_ops *arch_ops) void dp_initialize_arch_ops_li(struct dp_arch_ops *arch_ops)
{ {
#ifndef QCA_HOST_MODE_WIFI_DISABLED #ifndef QCA_HOST_MODE_WIFI_DISABLED
@@ -609,6 +626,8 @@ void dp_initialize_arch_ops_li(struct dp_arch_ops *arch_ops)
arch_ops->dp_peer_rx_reorder_queue_setup = arch_ops->dp_peer_rx_reorder_queue_setup =
dp_peer_rx_reorder_queue_setup_li; dp_peer_rx_reorder_queue_setup_li;
arch_ops->dp_find_peer_by_destmac = dp_find_peer_by_destmac_li; arch_ops->dp_find_peer_by_destmac = dp_find_peer_by_destmac_li;
arch_ops->peer_get_reo_hash = dp_peer_get_reo_hash_li;
arch_ops->reo_remap_config = dp_reo_remap_config_li;
} }
#ifdef QCA_DP_TX_HW_SW_NBUF_DESC_PREFETCH #ifdef QCA_DP_TX_HW_SW_NBUF_DESC_PREFETCH

View File

@@ -450,7 +450,7 @@
#define WLAN_CFG_PPE_RELEASE_RING_SIZE_MAX 1024 #define WLAN_CFG_PPE_RELEASE_RING_SIZE_MAX 1024
#if defined(WLAN_FEATURE_11BE_MLO) && defined(WLAN_MLO_MULTI_CHIP) #if defined(WLAN_FEATURE_11BE_MLO) && defined(WLAN_MLO_MULTI_CHIP)
#define WLAN_CFG_MLO_RX_RING_MAP 0xF #define WLAN_CFG_MLO_RX_RING_MAP 0x7
#define WLAN_CFG_MLO_RX_RING_MAP_MIN 0x0 #define WLAN_CFG_MLO_RX_RING_MAP_MIN 0x0
#define WLAN_CFG_MLO_RX_RING_MAP_MAX 0xFF #define WLAN_CFG_MLO_RX_RING_MAP_MAX 0xFF
#endif #endif
@@ -1614,57 +1614,16 @@
* *
* </ini> * </ini>
*/ */
#define CFG_DP_MLO_CHIP0_RX_RING_MAP \ #define CFG_DP_MLO_RX_RING_MAP \
CFG_INI_UINT("dp_chip0_rx_ring_map", \ CFG_INI_UINT("dp_mlo_reo_rings_map", \
WLAN_CFG_MLO_RX_RING_MAP_MIN, \ WLAN_CFG_MLO_RX_RING_MAP_MIN, \
WLAN_CFG_MLO_RX_RING_MAP_MAX, \ WLAN_CFG_MLO_RX_RING_MAP_MAX, \
WLAN_CFG_MLO_RX_RING_MAP, \ WLAN_CFG_MLO_RX_RING_MAP, \
CFG_VALUE_OR_DEFAULT, "DP Rx ring map chip0") CFG_VALUE_OR_DEFAULT, "DP MLO Rx ring map")
/*
* <ini>
* dp_chip1_rx_ring_map - Set Rx ring map for CHIP 1
* @Min: 0x0
* @Max: 0xFF
* @Default: 0xF
*
* This ini sets Rx ring map for CHIP 1
*
* Usage: Internal
*
* </ini>
*/
#define CFG_DP_MLO_CHIP1_RX_RING_MAP \
CFG_INI_UINT("dp_chip1_rx_ring_map", \
WLAN_CFG_MLO_RX_RING_MAP_MIN, \
WLAN_CFG_MLO_RX_RING_MAP_MAX, \
WLAN_CFG_MLO_RX_RING_MAP, \
CFG_VALUE_OR_DEFAULT, "DP Rx ring map chip1")
/*
* <ini>
* dp_chip2_rx_ring_map - Set Rx ring map for CHIP 2
* @Min: 0x0
* @Max: 0xFF
* @Default: 0xF
*
* This ini sets Rx ring map for CHIP 2
*
* Usage: Internal
*
* </ini>
*/
#define CFG_DP_MLO_CHIP2_RX_RING_MAP \
CFG_INI_UINT("dp_chip2_rx_ring_map", \
WLAN_CFG_MLO_RX_RING_MAP_MIN, \
WLAN_CFG_MLO_RX_RING_MAP_MAX, \
WLAN_CFG_MLO_RX_RING_MAP, \
CFG_VALUE_OR_DEFAULT, "DP Rx ring map chip2")
#define CFG_DP_MLO_CONFIG \ #define CFG_DP_MLO_CONFIG \
CFG(CFG_DP_MLO_CHIP0_RX_RING_MAP) \ CFG(CFG_DP_MLO_RX_RING_MAP)
CFG(CFG_DP_MLO_CHIP1_RX_RING_MAP) \
CFG(CFG_DP_MLO_CHIP2_RX_RING_MAP)
#else #else
#define CFG_DP_MLO_CONFIG #define CFG_DP_MLO_CONFIG
#endif #endif

View File

@@ -2546,25 +2546,8 @@ wlan_multi_soc_mlo_cfg_attach(struct cdp_ctrl_objmgr_psoc *psoc,
uint8_t rx_ring_map; uint8_t rx_ring_map;
rx_ring_map = rx_ring_map =
cfg_get(psoc, CFG_DP_MLO_CHIP0_RX_RING_MAP); cfg_get(psoc, CFG_DP_MLO_RX_RING_MAP);
wlan_cfg_ctx->mlo_chip_rx_ring_map[0] = rx_ring_map; wlan_cfg_ctx->mlo_chip_rx_ring_map = rx_ring_map;
wlan_cfg_ctx->mlo_chip_default_rx_ring_id[0] =
wlan_cfg_get_lsb_set_pos(rx_ring_map);
wlan_cfg_ctx->lmac_peer_id_msb[0] = 1;
rx_ring_map =
cfg_get(psoc, CFG_DP_MLO_CHIP1_RX_RING_MAP);
wlan_cfg_ctx->mlo_chip_rx_ring_map[1] = rx_ring_map;
wlan_cfg_ctx->mlo_chip_default_rx_ring_id[1] =
wlan_cfg_get_lsb_set_pos(rx_ring_map);
wlan_cfg_ctx->lmac_peer_id_msb[1] = 2;
rx_ring_map =
cfg_get(psoc, CFG_DP_MLO_CHIP2_RX_RING_MAP);
wlan_cfg_ctx->mlo_chip_rx_ring_map[2] = rx_ring_map;
wlan_cfg_ctx->mlo_chip_default_rx_ring_id[2] =
wlan_cfg_get_lsb_set_pos(rx_ring_map);
wlan_cfg_ctx->lmac_peer_id_msb[2] = 3;
} }
#else #else
static inline void static inline void
@@ -2637,6 +2620,14 @@ static void wlan_soc_tx_capt_cfg_attach(struct cdp_ctrl_objmgr_psoc *psoc,
} }
#endif #endif
void
wlan_cfg_soc_update_tgt_params(struct wlan_cfg_dp_soc_ctxt *wlan_cfg_ctx,
struct cdp_ctrl_objmgr_psoc *psoc)
{
wlan_cfg_ctx->reo_rings_mapping = cfg_get(psoc,
CFG_DP_REO_RINGS_MAP);
}
/** /**
* wlan_cfg_soc_attach() - Allocate and prepare SoC configuration * wlan_cfg_soc_attach() - Allocate and prepare SoC configuration
* @psoc - Object manager psoc * @psoc - Object manager psoc
@@ -3983,24 +3974,9 @@ wlan_cfg_set_rx_rel_ring_id(struct wlan_cfg_dp_soc_ctxt *cfg,
#if defined(WLAN_FEATURE_11BE_MLO) && defined(WLAN_MLO_MULTI_CHIP) #if defined(WLAN_FEATURE_11BE_MLO) && defined(WLAN_MLO_MULTI_CHIP)
uint8_t uint8_t
wlan_cfg_mlo_rx_ring_map_get_by_chip_id(struct wlan_cfg_dp_soc_ctxt *cfg, wlan_cfg_mlo_rx_ring_map_get(struct wlan_cfg_dp_soc_ctxt *cfg)
uint8_t chip_id)
{ {
return cfg->mlo_chip_rx_ring_map[chip_id]; return cfg->mlo_chip_rx_ring_map;
}
uint8_t
wlan_cfg_mlo_default_rx_ring_get_by_chip_id(struct wlan_cfg_dp_soc_ctxt *cfg,
uint8_t chip_id)
{
return cfg->mlo_chip_default_rx_ring_id[chip_id];
}
uint8_t
wlan_cfg_mlo_lmac_peer_id_msb_get_by_chip_id(struct wlan_cfg_dp_soc_ctxt *cfg,
uint8_t chip_id)
{
return cfg->lmac_peer_id_msb[chip_id];
} }
#endif #endif

View File

@@ -260,8 +260,6 @@ struct wlan_srng_cfg {
* @tx_rings_grp_bitmap: bitmap of group intr contexts which have * @tx_rings_grp_bitmap: bitmap of group intr contexts which have
* non-zero tx ring mask * non-zero tx ring mask
* @mlo_chip_rx_ring_map: map of chip_id to rx ring map * @mlo_chip_rx_ring_map: map of chip_id to rx ring map
* @mlo_chip_default_rx_ring_id: default rx_ring of chip when hash is not found
* @lmac_peer_id_msb: value used for hash based routing
* @vdev_stats_hw_offload_config: HW vdev stats config * @vdev_stats_hw_offload_config: HW vdev stats config
* @vdev_stats_hw_offload_timer: HW vdev stats timer duration * @vdev_stats_hw_offload_timer: HW vdev stats timer duration
* @txmon_hw_support: TxMON HW support * @txmon_hw_support: TxMON HW support
@@ -424,9 +422,7 @@ struct wlan_cfg_dp_soc_ctxt {
uint8_t rx_rel_wbm2sw_ring_id; uint8_t rx_rel_wbm2sw_ring_id;
uint32_t tx_rings_grp_bitmap; uint32_t tx_rings_grp_bitmap;
#if defined(WLAN_FEATURE_11BE_MLO) && defined(WLAN_MLO_MULTI_CHIP) #if defined(WLAN_FEATURE_11BE_MLO) && defined(WLAN_MLO_MULTI_CHIP)
uint8_t mlo_chip_rx_ring_map[WLAN_MAX_MLO_CHIPS]; uint8_t mlo_chip_rx_ring_map;
uint8_t mlo_chip_default_rx_ring_id[WLAN_MAX_MLO_CHIPS];
uint8_t lmac_peer_id_msb[WLAN_MAX_MLO_CHIPS];
#endif #endif
#ifdef QCA_VDEV_STATS_HW_OFFLOAD_SUPPORT #ifdef QCA_VDEV_STATS_HW_OFFLOAD_SUPPORT
bool vdev_stats_hw_offload_config; bool vdev_stats_hw_offload_config;
@@ -2099,38 +2095,13 @@ wlan_cfg_get_sawf_config(struct wlan_cfg_dp_soc_ctxt *cfg);
#if defined(WLAN_FEATURE_11BE_MLO) && defined(WLAN_MLO_MULTI_CHIP) #if defined(WLAN_FEATURE_11BE_MLO) && defined(WLAN_MLO_MULTI_CHIP)
/** /**
* wlan_cfg_mlo_rx_ring_map_get_by_chip_id() - get rx ring map * wlan_cfg_mlo_rx_ring_map_get() - get rx ring map
* @cfg: soc configuration context * @cfg: soc configuration context
* @chip_id: mlo_chip_id
* *
* Return: rx_ring_map * Return: rx_ring_map
*/ */
uint8_t uint8_t
wlan_cfg_mlo_rx_ring_map_get_by_chip_id(struct wlan_cfg_dp_soc_ctxt *cfg, wlan_cfg_mlo_rx_ring_map_get(struct wlan_cfg_dp_soc_ctxt *cfg);
uint8_t chip_id);
/**
* wlan_cfg_mlo_default_rx_ring_get_by_chip_id() - get default RX ring
* @cfg: soc configuration context
* @chip_id: mlo_chip_id
*
* Return: default rx ring
*/
uint8_t
wlan_cfg_mlo_default_rx_ring_get_by_chip_id(struct wlan_cfg_dp_soc_ctxt *cfg,
uint8_t chip_id);
/**
* wlan_cfg_mlo_lmac_peer_id_msb_get_by_chip_id() - get chip's lmac_peer_id_msb
* @cfg: soc configuration context
* @chip_id: mlo_chip_id
*
* Return: lmac_peer_id_msb
*/
uint8_t
wlan_cfg_mlo_lmac_peer_id_msb_get_by_chip_id(struct wlan_cfg_dp_soc_ctxt *cfg,
uint8_t chip_id);
#endif #endif
/* /*
@@ -2194,4 +2165,14 @@ wlan_cfg_get_tx_capt_max_mem(struct wlan_cfg_dp_soc_ctxt *cfg)
*/ */
uint8_t wlan_cfg_get_napi_scale_factor(struct wlan_cfg_dp_soc_ctxt *cfg); uint8_t wlan_cfg_get_napi_scale_factor(struct wlan_cfg_dp_soc_ctxt *cfg);
/**
* wlan_cfg_soc_update_tgt_params() - Update band specific params
* @wlan_cfg_ctx - SOC cfg context
* @ctrl_obj - PSOC object
*
* Return: void
*/
void
wlan_cfg_soc_update_tgt_params(struct wlan_cfg_dp_soc_ctxt *wlan_cfg_ctx,
struct cdp_ctrl_objmgr_psoc *ctrl_obj);
#endif /*__WLAN_CFG_H*/ #endif /*__WLAN_CFG_H*/