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:

committed by
Madan Koyyalamudi

parent
383edf35d0
commit
adbb77002a
@@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
@@ -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);
|
||||||
|
@@ -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,
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
|
||||||
|
@@ -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*/
|
||||||
|
Reference in New Issue
Block a user