diff --git a/dp/wifi3.0/dp_peer.c b/dp/wifi3.0/dp_peer.c index c18bf6c60b..a2bd201691 100644 --- a/dp/wifi3.0/dp_peer.c +++ b/dp/wifi3.0/dp_peer.c @@ -3283,7 +3283,8 @@ int dp_addba_requestprocess_wifi3(struct cdp_soc_t *cdp_soc, { QDF_STATUS status = QDF_STATUS_SUCCESS; struct dp_rx_tid *rx_tid = NULL; - struct dp_peer *peer = dp_peer_find_hash_find((struct dp_soc *)cdp_soc, + struct dp_soc *soc = (struct dp_soc *)cdp_soc; + struct dp_peer *peer = dp_peer_find_hash_find(soc, peer_mac, 0, vdev_id, DP_MOD_ID_CDP); @@ -3311,6 +3312,12 @@ int dp_addba_requestprocess_wifi3(struct cdp_soc_t *cdp_soc, goto fail; } + if (wlan_cfg_is_dp_force_rx_64_ba(soc->wlan_cfg_ctx)) { + QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_INFO, + "force use BA64 scheme"); + buffersize = qdf_min((uint16_t)64, buffersize); + } + if (rx_tid->rx_ba_win_size_override == DP_RX_BA_SESSION_DISABLE) { QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_INFO, "%s disable BA session", diff --git a/wlan_cfg/cfg_dp.h b/wlan_cfg/cfg_dp.h index ce502b7a6c..c57c95cbc6 100644 --- a/wlan_cfg/cfg_dp.h +++ b/wlan_cfg/cfg_dp.h @@ -1084,6 +1084,24 @@ false, \ "enable rx frame pending check in WoW mode") +/* + * + * gForceRX64BA - enable force 64 blockack mode for RX + * @Min: 0 + * @Max: 1 + * @Default: 0 + * + * This ini is used to control DP Software to use 64 blockack + * for RX direction forcibly + * + * Usage: Internal + * + * + */ +#define CFG_FORCE_RX_64_BA \ + CFG_INI_BOOL("gForceRX64BA", \ + false, "Enable/Disable force 64 blockack in RX side") + #define CFG_DP \ CFG(CFG_DP_HTT_PACKET_TYPE) \ CFG(CFG_DP_INT_BATCH_THRESHOLD_OTHER) \ @@ -1176,5 +1194,6 @@ CFG(CFG_DP_RX_RADIO_0_DEFAULT_REO) \ CFG(CFG_DP_RX_RADIO_1_DEFAULT_REO) \ CFG(CFG_DP_RX_RADIO_2_DEFAULT_REO) \ - CFG(CFG_DP_WOW_CHECK_RX_PENDING) + CFG(CFG_DP_WOW_CHECK_RX_PENDING) \ + CFG(CFG_FORCE_RX_64_BA) #endif /* _CFG_DP_H_ */ diff --git a/wlan_cfg/wlan_cfg.c b/wlan_cfg/wlan_cfg.c index 0431b7b8e5..306b90cbee 100644 --- a/wlan_cfg/wlan_cfg.c +++ b/wlan_cfg/wlan_cfg.c @@ -591,6 +591,8 @@ wlan_cfg_soc_attach(struct cdp_ctrl_objmgr_psoc *psoc) CFG_DP_RXDMA_ERR_DST_RING); wlan_cfg_ctx->enable_data_stall_detection = cfg_get(psoc, CFG_DP_ENABLE_DATA_STALL_DETECTION); + wlan_cfg_ctx->enable_force_rx_64_ba = + cfg_get(psoc, CFG_FORCE_RX_64_BA); wlan_cfg_ctx->tx_flow_start_queue_offset = cfg_get(psoc, CFG_DP_TX_FLOW_START_QUEUE_OFFSET); wlan_cfg_ctx->tx_flow_stop_queue_threshold = @@ -1515,3 +1517,8 @@ void wlan_cfg_set_rxdma1_enable(struct wlan_cfg_dp_soc_ctxt *cfg) cfg->rxdma1_enable = true; } #endif + +bool wlan_cfg_is_dp_force_rx_64_ba(struct wlan_cfg_dp_soc_ctxt *cfg) +{ + return cfg->enable_force_rx_64_ba; +} diff --git a/wlan_cfg/wlan_cfg.h b/wlan_cfg/wlan_cfg.h index 4ee7c87cd4..84cac9d61d 100644 --- a/wlan_cfg/wlan_cfg.h +++ b/wlan_cfg/wlan_cfg.h @@ -157,6 +157,7 @@ struct wlan_srng_cfg { * @rxdma_err_dst_ring: rxdma error detination ring size * @raw_mode_war: enable/disable raw mode war * @enable_data_stall_detection: flag to enable data stall detection + * @enable_force_rx_64_ba: flag to enable force 64 blockack in RX * @disable_intra_bss_fwd: flag to disable intra bss forwarding * @rxdma1_enable: flag to indicate if rxdma1 is enabled * @tx_desc_limit_0: tx_desc limit for 5G H @@ -269,6 +270,7 @@ struct wlan_cfg_dp_soc_ctxt { uint32_t per_pkt_trace; bool raw_mode_war; bool enable_data_stall_detection; + bool enable_force_rx_64_ba; bool disable_intra_bss_fwd; bool rxdma1_enable; int max_ast_idx; @@ -1497,6 +1499,13 @@ 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); +/** + * wlan_cfg_is_dp_force_rx_64_ba() - Get force use 64 BA flag + * @cfg: config context + * + * Return: force use 64 BA flag + */ +bool wlan_cfg_is_dp_force_rx_64_ba(struct wlan_cfg_dp_soc_ctxt *cfg); #endif /**