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
@@ -6594,6 +6594,7 @@ dp_soc_attach_target_wifi3(struct cdp_soc_t *cdp_soc)
|
||||
{
|
||||
struct dp_soc *soc = (struct dp_soc *)cdp_soc;
|
||||
QDF_STATUS status = QDF_STATUS_SUCCESS;
|
||||
struct hal_reo_params reo_params;
|
||||
|
||||
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 */
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -8039,8 +8073,10 @@ static inline bool dp_is_vdev_subtype_p2p(struct dp_vdev *vdev)
|
||||
* Return: None
|
||||
*/
|
||||
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,
|
||||
bool *hash_based)
|
||||
bool *hash_based,
|
||||
uint8_t *lmac_peer_id_msb)
|
||||
{
|
||||
struct dp_soc *soc;
|
||||
struct dp_pdev *pdev;
|
||||
@@ -8088,10 +8124,15 @@ static void dp_peer_setup_get_reo_hash(struct dp_vdev *vdev,
|
||||
* Return: None
|
||||
*/
|
||||
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,
|
||||
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 */
|
||||
|
||||
@@ -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 */
|
||||
vdev_opmode = vdev->opmode;
|
||||
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",
|
||||
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;
|
||||
bool is_monitor_mode = false;
|
||||
struct hal_reo_params reo_params;
|
||||
uint8_t i;
|
||||
int num_dp_msi;
|
||||
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)
|
||||
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 */
|
||||
TAILQ_INIT(&soc->rx.defrag.waitlist);
|
||||
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);
|
||||
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);
|
||||
if (mon_ops && mon_ops->mon_soc_init)
|
||||
mon_ops->mon_soc_init(soc);
|
||||
|
Reference in New Issue
Block a user