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
Этот коммит содержится в:
Chaithanya Garrepalli
2022-08-22 11:38:57 +05:30
коммит произвёл Madan Koyyalamudi
родитель 383edf35d0
Коммит adbb77002a
8 изменённых файлов: 190 добавлений и 150 удалений

Просмотреть файл

@@ -450,7 +450,7 @@
#define WLAN_CFG_PPE_RELEASE_RING_SIZE_MAX 1024
#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_MAX 0xFF
#endif
@@ -1614,57 +1614,16 @@
*
* </ini>
*/
#define CFG_DP_MLO_CHIP0_RX_RING_MAP \
CFG_INI_UINT("dp_chip0_rx_ring_map", \
#define CFG_DP_MLO_RX_RING_MAP \
CFG_INI_UINT("dp_mlo_reo_rings_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 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 \
CFG(CFG_DP_MLO_CHIP0_RX_RING_MAP) \
CFG(CFG_DP_MLO_CHIP1_RX_RING_MAP) \
CFG(CFG_DP_MLO_CHIP2_RX_RING_MAP)
CFG(CFG_DP_MLO_RX_RING_MAP)
#else
#define CFG_DP_MLO_CONFIG
#endif

Просмотреть файл

@@ -2546,25 +2546,8 @@ wlan_multi_soc_mlo_cfg_attach(struct cdp_ctrl_objmgr_psoc *psoc,
uint8_t rx_ring_map;
rx_ring_map =
cfg_get(psoc, CFG_DP_MLO_CHIP0_RX_RING_MAP);
wlan_cfg_ctx->mlo_chip_rx_ring_map[0] = 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;
cfg_get(psoc, CFG_DP_MLO_RX_RING_MAP);
wlan_cfg_ctx->mlo_chip_rx_ring_map = rx_ring_map;
}
#else
static inline void
@@ -2637,6 +2620,14 @@ static void wlan_soc_tx_capt_cfg_attach(struct cdp_ctrl_objmgr_psoc *psoc,
}
#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
* @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)
uint8_t
wlan_cfg_mlo_rx_ring_map_get_by_chip_id(struct wlan_cfg_dp_soc_ctxt *cfg,
uint8_t chip_id)
wlan_cfg_mlo_rx_ring_map_get(struct wlan_cfg_dp_soc_ctxt *cfg)
{
return cfg->mlo_chip_rx_ring_map[chip_id];
}
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];
return cfg->mlo_chip_rx_ring_map;
}
#endif

Просмотреть файл

@@ -260,8 +260,6 @@ struct wlan_srng_cfg {
* @tx_rings_grp_bitmap: bitmap of group intr contexts which have
* non-zero tx ring mask
* @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_timer: HW vdev stats timer duration
* @txmon_hw_support: TxMON HW support
@@ -424,9 +422,7 @@ struct wlan_cfg_dp_soc_ctxt {
uint8_t rx_rel_wbm2sw_ring_id;
uint32_t tx_rings_grp_bitmap;
#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_default_rx_ring_id[WLAN_MAX_MLO_CHIPS];
uint8_t lmac_peer_id_msb[WLAN_MAX_MLO_CHIPS];
uint8_t mlo_chip_rx_ring_map;
#endif
#ifdef QCA_VDEV_STATS_HW_OFFLOAD_SUPPORT
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)
/**
* 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
* @chip_id: mlo_chip_id
*
* Return: rx_ring_map
*/
uint8_t
wlan_cfg_mlo_rx_ring_map_get_by_chip_id(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);
wlan_cfg_mlo_rx_ring_map_get(struct wlan_cfg_dp_soc_ctxt *cfg);
#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);
/**
* 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*/