diff --git a/dp/inc/cdp_txrx_cmn_struct.h b/dp/inc/cdp_txrx_cmn_struct.h index ec41fe66ac67..79ff8c127977 100644 --- a/dp/inc/cdp_txrx_cmn_struct.h +++ b/dp/inc/cdp_txrx_cmn_struct.h @@ -516,6 +516,7 @@ struct cdp_soc_t { * @CDP_ENABLE_WDS: wds sta * @CDP_ENABLE_PROXYSTA: proxy sta * @CDP_UPDATE_TDLS_FLAGS: tdls link flags + * @CDP_ENABLE_AP_BRIDGE: set ap_bridging enable/disable */ enum cdp_vdev_param_type { CDP_ENABLE_NAWDS, @@ -524,6 +525,7 @@ enum cdp_vdev_param_type { CDP_ENABLE_PROXYSTA, CDP_UPDATE_TDLS_FLAGS, CDP_CFG_WDS_AGING_TIMER, + CDP_ENABLE_AP_BRIDGE, }; #define TXRX_FW_STATS_TXSTATS 1 diff --git a/dp/wifi3.0/dp_main.c b/dp/wifi3.0/dp_main.c index 32266a6a06b2..d6f5f5e9c0e8 100644 --- a/dp/wifi3.0/dp_main.c +++ b/dp/wifi3.0/dp_main.c @@ -4548,7 +4548,6 @@ static void dp_set_vdev_param(struct cdp_vdev *vdev_handle, enum cdp_vdev_param_type param, uint32_t val) { struct dp_vdev *vdev = (struct dp_vdev *)vdev_handle; - switch (param) { case CDP_ENABLE_WDS: vdev->wds_enabled = val; @@ -4573,6 +4572,12 @@ static void dp_set_vdev_param(struct cdp_vdev *vdev_handle, vdev->wds_aging_timer_val = val; break; + case CDP_ENABLE_AP_BRIDGE: + if (wlan_op_mode_sta != vdev->opmode) + vdev->ap_bridge_enabled = val; + else + vdev->ap_bridge_enabled = false; + break; default: break; } diff --git a/dp/wifi3.0/dp_rx.c b/dp/wifi3.0/dp_rx.c index 14112975fbbc..19a6e3826efa 100644 --- a/dp/wifi3.0/dp_rx.c +++ b/dp/wifi3.0/dp_rx.c @@ -42,6 +42,20 @@ static inline void dp_rx_desc_prep(struct dp_rx_desc *rx_desc, qdf_nbuf_t nbuf) } #endif +#ifdef CONFIG_WIN +static inline bool dp_rx_check_ap_bridge(struct dp_vdev *vdev) +{ + return vdev->ap_bridge_enabled; +} +#else +static inline bool dp_rx_check_ap_bridge(struct dp_vdev *vdev) +{ + if (vdev->opmode != wlan_op_mode_sta) + return true; + else + return false; +} +#endif /* * dp_rx_buffers_replenish() - replenish rxdma ring with rx nbufs * called during dp rx initialization @@ -1313,8 +1327,8 @@ done: nbuf); /* Intrabss-fwd */ - if ((vdev->opmode != wlan_op_mode_sta) && - !vdev->nawds_enabled) + if (dp_rx_check_ap_bridge(vdev) && + !vdev->nawds_enabled) if (dp_rx_intrabss_fwd(soc, peer, rx_tlv_hdr, diff --git a/dp/wifi3.0/dp_types.h b/dp/wifi3.0/dp_types.h index 39edbb196ecc..ec252170b056 100644 --- a/dp/wifi3.0/dp_types.h +++ b/dp/wifi3.0/dp_types.h @@ -1164,6 +1164,9 @@ struct dp_vdev { #ifdef QCA_LL_TX_FLOW_CONTROL_V2 struct dp_tx_desc_pool_s *pool; #endif + /* AP BRIDGE enabled */ + uint32_t ap_bridge_enabled; + };