diff --git a/dp/wifi3.0/dp_main.c b/dp/wifi3.0/dp_main.c index f7111da6e7..5096cde093 100644 --- a/dp/wifi3.0/dp_main.c +++ b/dp/wifi3.0/dp_main.c @@ -13400,6 +13400,33 @@ static void dp_soc_cfg_attach(struct dp_soc *soc) } } +static inline void dp_pdev_set_default_reo(struct dp_pdev *pdev) +{ + struct dp_soc *soc = pdev->soc; + + switch (pdev->pdev_id) { + case 0: + pdev->reo_dest = + wlan_cfg_radio0_default_reo_get(soc->wlan_cfg_ctx); + break; + + case 1: + pdev->reo_dest = + wlan_cfg_radio1_default_reo_get(soc->wlan_cfg_ctx); + break; + + case 2: + pdev->reo_dest = + wlan_cfg_radio2_default_reo_get(soc->wlan_cfg_ctx); + break; + + default: + QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR, + "Invalid pdev_id %d for reo selection", pdev->pdev_id); + break; + } +} + static inline QDF_STATUS dp_pdev_init(struct cdp_soc_t *txrx_soc, HTC_HANDLE htc_handle, qdf_device_t qdf_osdev, @@ -13519,7 +13546,7 @@ static inline QDF_STATUS dp_pdev_init(struct cdp_soc_t *txrx_soc, dp_pcp_tid_map_setup(pdev); /* set the reo destination during initialization */ - pdev->reo_dest = pdev->pdev_id + 1; + dp_pdev_set_default_reo(pdev); /* * initialize ppdu tlv list diff --git a/wlan_cfg/cfg_dp.h b/wlan_cfg/cfg_dp.h index 16613c3ff6..ec1c0d23b0 100644 --- a/wlan_cfg/cfg_dp.h +++ b/wlan_cfg/cfg_dp.h @@ -367,6 +367,13 @@ #define WLAN_CFG_NUM_REO_RINGS_MAP_MIN 0x1 #define WLAN_CFG_NUM_REO_RINGS_MAP_MAX 0xF +#define WLAN_CFG_RADIO_0_DEFAULT_REO 0x1 +#define WLAN_CFG_RADIO_1_DEFAULT_REO 0x2 +#define WLAN_CFG_RADIO_2_DEFAULT_REO 0x3 + +#define WLAN_CFG_RADIO_DEFAULT_REO_MIN 0x1 +#define WLAN_CFG_RADIO_DEFAULT_REO_MAX 0x4 + /* DP INI Declerations */ #define CFG_DP_HTT_PACKET_TYPE \ CFG_INI_UINT("dp_htt_packet_type", \ @@ -946,6 +953,27 @@ WLAN_CFG_NUM_REO_RINGS_MAP, \ CFG_VALUE_OR_DEFAULT, "REO Destination Rings Mapping") +#define CFG_DP_RX_RADIO_0_DEFAULT_REO \ + CFG_INI_UINT("dp_rx_radio0_default_reo", \ + WLAN_CFG_RADIO_DEFAULT_REO_MIN, \ + WLAN_CFG_RADIO_DEFAULT_REO_MAX, \ + WLAN_CFG_RADIO_0_DEFAULT_REO, \ + CFG_VALUE_OR_DEFAULT, "Radio0 to REO destination default mapping") + +#define CFG_DP_RX_RADIO_1_DEFAULT_REO \ + CFG_INI_UINT("dp_rx_radio1_default_reo", \ + WLAN_CFG_RADIO_DEFAULT_REO_MIN, \ + WLAN_CFG_RADIO_DEFAULT_REO_MAX, \ + WLAN_CFG_RADIO_1_DEFAULT_REO, \ + CFG_VALUE_OR_DEFAULT, "Radio1 to REO destination default mapping") + +#define CFG_DP_RX_RADIO_2_DEFAULT_REO \ + CFG_INI_UINT("dp_rx_radio2_default_reo", \ + WLAN_CFG_RADIO_DEFAULT_REO_MIN, \ + WLAN_CFG_RADIO_DEFAULT_REO_MAX, \ + WLAN_CFG_RADIO_2_DEFAULT_REO, \ + CFG_VALUE_OR_DEFAULT, "Radio2 to REO destination default mapping") + #define CFG_DP_PEER_EXT_STATS \ CFG_INI_BOOL("peer_ext_stats", \ false, "Peer extended stats") @@ -1086,5 +1114,8 @@ CFG(CFG_DP_POLL_MODE_ENABLE) \ CFG(CFG_DP_SWLM_ENABLE) \ CFG(CFG_DP_TX_PER_PKT_VDEV_ID_CHECK) \ - CFG(CFG_DP_RX_FST_IN_CMEM) + CFG(CFG_DP_RX_FST_IN_CMEM) \ + CFG(CFG_DP_RX_RADIO_0_DEFAULT_REO) \ + CFG(CFG_DP_RX_RADIO_1_DEFAULT_REO) \ + CFG(CFG_DP_RX_RADIO_2_DEFAULT_REO) #endif /* _CFG_DP_H_ */ diff --git a/wlan_cfg/wlan_cfg.c b/wlan_cfg/wlan_cfg.c index 557bba0f26..ed2da3a113 100644 --- a/wlan_cfg/wlan_cfg.c +++ b/wlan_cfg/wlan_cfg.c @@ -624,6 +624,12 @@ wlan_cfg_soc_attach(struct cdp_ctrl_objmgr_psoc *psoc) wlan_cfg_ctx->fst_in_cmem = cfg_get(psoc, CFG_DP_RX_FST_IN_CMEM); wlan_cfg_ctx->tx_per_pkt_vdev_id_check = cfg_get(psoc, CFG_DP_TX_PER_PKT_VDEV_ID_CHECK); + wlan_cfg_ctx->radio0_rx_default_reo = + cfg_get(psoc, CFG_DP_RX_RADIO_0_DEFAULT_REO); + wlan_cfg_ctx->radio1_rx_default_reo = + cfg_get(psoc, CFG_DP_RX_RADIO_1_DEFAULT_REO); + wlan_cfg_ctx->radio2_rx_default_reo = + cfg_get(psoc, CFG_DP_RX_RADIO_2_DEFAULT_REO); return wlan_cfg_ctx; } @@ -1459,3 +1465,17 @@ bool wlan_cfg_is_swlm_enabled(struct wlan_cfg_dp_soc_ctxt *cfg) return false; } #endif +uint8_t wlan_cfg_radio0_default_reo_get(struct wlan_cfg_dp_soc_ctxt *cfg) +{ + return cfg->radio0_rx_default_reo; +} + +uint8_t wlan_cfg_radio1_default_reo_get(struct wlan_cfg_dp_soc_ctxt *cfg) +{ + return cfg->radio1_rx_default_reo; +} + +uint8_t wlan_cfg_radio2_default_reo_get(struct wlan_cfg_dp_soc_ctxt *cfg) +{ + return cfg->radio2_rx_default_reo; +} diff --git a/wlan_cfg/wlan_cfg.h b/wlan_cfg/wlan_cfg.h index d23ac91426..f369f4e550 100644 --- a/wlan_cfg/wlan_cfg.h +++ b/wlan_cfg/wlan_cfg.h @@ -303,6 +303,9 @@ struct wlan_cfg_dp_soc_ctxt { uint8_t is_swlm_enabled; bool fst_in_cmem; bool tx_per_pkt_vdev_id_check; + uint8_t radio0_rx_default_reo; + uint8_t radio1_rx_default_reo; + uint8_t radio2_rx_default_reo; }; /** @@ -1475,3 +1478,27 @@ bool wlan_cfg_is_fst_in_cmem_enabled(struct wlan_cfg_dp_soc_ctxt *cfg); bool wlan_cfg_is_swlm_enabled(struct wlan_cfg_dp_soc_ctxt *cfg); #endif + +/** + * wlan_cfg_radio0_default_reo_get - Get Radio0 default REO + * @cfg: soc configuration context + * + * Return: . + */ +uint8_t wlan_cfg_radio0_default_reo_get(struct wlan_cfg_dp_soc_ctxt *cfg); + +/** + * wlan_cfg_radio1_default_reo_get - Get Radio1 default REO + * @cfg: soc configuration context + * + * Return: . + */ +uint8_t wlan_cfg_radio1_default_reo_get(struct wlan_cfg_dp_soc_ctxt *cfg); + +/** + * wlan_cfg_radio2_default_reo_get() - Get Radio2 default REO + * @cfg: soc configuration context + * + * Return: . + */ +uint8_t wlan_cfg_radio2_default_reo_get(struct wlan_cfg_dp_soc_ctxt *cfg);