diff --git a/dp/inc/cdp_txrx_cmn_struct.h b/dp/inc/cdp_txrx_cmn_struct.h index 70ea9dfff5..7acdef2068 100644 --- a/dp/inc/cdp_txrx_cmn_struct.h +++ b/dp/inc/cdp_txrx_cmn_struct.h @@ -1431,18 +1431,20 @@ enum cdp_pdev_bpr_param { CDP_BPR_ENABLE, }; -/* - * cdp_vdev_param_type: different types of parameters - * to set values in vdev +/** + * enum cdp_vdev_param_type - different types of parameters + * to set values in vdev * @CDP_ENABLE_NAWDS: set nawds enable/disable * @CDP_ENABLE_MCAST_EN: enable/disable multicast enhancement * @CDP_ENABLE_WDS: wds sta * @CDP_ENABLE_MEC: MEC enable flags * @CDP_ENABLE_PROXYSTA: proxy sta * @CDP_UPDATE_TDLS_FLAGS: tdls link flags + * @CDP_CFG_WDS_AGING_TIMER: modify/stop wds aging timer * @CDP_ENABLE_AP_BRIDGE: set ap_bridging enable/disable - * @CDP_ENABLE_CIPHER : set cipher type based on security + * @CDP_ENABLE_CIPHER: set cipher type based on security * @CDP_ENABLE_QWRAP_ISOLATION: qwrap isolation mode + * @CDP_UPDATE_MULTIPASS: enable/disable multipass * @CDP_TX_ENCAP_TYPE: tx encap type * @CDP_RX_DECAP_TYPE: rx decap type * @CDP_MESH_RX_FILTER: set mesh rx filter @@ -1456,9 +1458,12 @@ enum cdp_pdev_bpr_param { * @CDP_CFG_WDS_EXT: enable/disable wds ext feature * @CDP_ENABLE_PEER_AUTHORIZE: enable peer authorize flag * @CDP_ENABLE_PEER_TID_LATENCY: set peer tid latency enable flag - * @CDP_SET_VAP_MESH_TID : Set latency tid in vap + * @CDP_SET_VAP_MESH_TID: Set latency tid in vap + * @CDP_SKIP_BAR_UPDATE_AP: enable/disable bar * @CDP_UPDATE_DSCP_TO_TID_MAP: Set DSCP to TID map id - * @CDP_SET_MCAST_VDEV : Set primary mcast vdev + * @CDP_SET_MCAST_VDEV: Set primary mcast vdev + * @CDP_SET_MCAST_VDEV_HW_UPDATE: Not in use + * @CDP_DROP_3ADDR_MCAST: enable/disable drop 3addr multicast flag * @CDP_ENABLE_WRAP: qwrap ap * @CDP_ENABLE_TRAFFIC_END_INDICATION: enable/disable traffic end indication */ diff --git a/dp/wifi3.0/be/dp_be.c b/dp/wifi3.0/be/dp_be.c index 5bdccd4057..6b17bb9a4b 100644 --- a/dp/wifi3.0/be/dp_be.c +++ b/dp/wifi3.0/be/dp_be.c @@ -1949,6 +1949,16 @@ static void dp_bank_reconfig_be(struct dp_soc *soc, struct dp_vdev *vdev) #if defined(WLAN_FEATURE_11BE_MLO) && defined(WLAN_MLO_MULTI_CHIP) && \ defined(WLAN_MCAST_MLO) +static void dp_mlo_mcast_reset_pri_mcast(struct dp_vdev_be *be_vdev, + struct dp_vdev *ptnr_vdev, + void *arg) +{ + struct dp_vdev_be *be_ptnr_vdev = + dp_get_be_vdev_from_dp_vdev(ptnr_vdev); + + be_ptnr_vdev->mcast_primary = false; +} + static void dp_txrx_set_mlo_mcast_primary_vdev_param_be( struct dp_vdev_be *be_vdev, cdp_config_param_type val) @@ -1968,17 +1978,53 @@ static void dp_txrx_set_mlo_mcast_primary_vdev_param_be( dp_mcast_mlo_iter_ptnr_soc(be_soc, dp_tx_mcast_mlo_reinject_routing_set, (void *)&be_vdev->mcast_primary); + dp_mcast_mlo_iter_ptnr_vdev(be_soc, be_vdev, + dp_mlo_mcast_reset_pri_mcast, + (void *)&be_vdev->mcast_primary, + DP_MOD_ID_TX_MCAST); } else { hal_tx_vdev_mcast_ctrl_set(hal_soc, vdev_id, HAL_TX_MCAST_CTRL_DROP); } } + +/** + * dp_txrx_get_vdev_mcast_param_be() - Target specific ops for getting vdev + * params related to multicast + * @soc: DP soc handle + * @vdev: pointer to vdev structure + * @val: buffer address + * + * Return: QDF_STATUS + */ +static +QDF_STATUS dp_txrx_get_vdev_mcast_param_be(struct dp_soc *soc, + struct dp_vdev *vdev, + cdp_config_param_type *val) +{ + struct dp_vdev_be *be_vdev = dp_get_be_vdev_from_dp_vdev(vdev); + + if (be_vdev->mcast_primary) + val->cdp_vdev_param_mcast_vdev = true; + else + val->cdp_vdev_param_mcast_vdev = false; + + return QDF_STATUS_SUCCESS; +} #else static void dp_txrx_set_mlo_mcast_primary_vdev_param_be( struct dp_vdev_be *be_vdev, cdp_config_param_type val) { } + +static +QDF_STATUS dp_txrx_get_vdev_mcast_param_be(struct dp_soc *soc, + struct dp_vdev *vdev, + cdp_config_param_type *val) +{ + return QDF_STATUS_SUCCESS; +} #endif #ifdef DP_TX_IMPLICIT_RBM_MAPPING @@ -1998,6 +2044,16 @@ static void dp_tx_implicit_rbm_set_be(struct dp_soc *soc, } #endif +/** + * dp_txrx_set_vdev_param_be() - Target specific ops while setting vdev params + * @soc: DP soc handle + * @vdev: pointer to vdev structure + * @param: parameter type to get value + * @val: value + * + * Return: QDF_STATUS + */ +static QDF_STATUS dp_txrx_set_vdev_param_be(struct dp_soc *soc, struct dp_vdev *vdev, enum cdp_vdev_param_type param, @@ -2344,5 +2400,6 @@ void dp_initialize_arch_ops_be(struct dp_arch_ops *arch_ops) 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; + arch_ops->txrx_get_vdev_mcast_param = dp_txrx_get_vdev_mcast_param_be; dp_initialize_arch_ops_be_ipa(arch_ops); } diff --git a/dp/wifi3.0/be/dp_be.h b/dp/wifi3.0/be/dp_be.h index fdecd26add..5eedeff1c0 100644 --- a/dp/wifi3.0/be/dp_be.h +++ b/dp/wifi3.0/be/dp_be.h @@ -851,19 +851,4 @@ void dp_mlo_update_link_to_pdev_unmap(struct dp_soc *soc, struct dp_pdev *pdev) { } #endif - -/* - * dp_txrx_set_vdev_param_be: target specific ops while setting vdev params - * @soc : DP soc handle - * @vdev: pointer to vdev structure - * @param: parameter type to get value - * @val: value - * - * return: QDF_STATUS - */ -QDF_STATUS dp_txrx_set_vdev_param_be(struct dp_soc *soc, - struct dp_vdev *vdev, - enum cdp_vdev_param_type param, - cdp_config_param_type val); - #endif diff --git a/dp/wifi3.0/dp_main.c b/dp/wifi3.0/dp_main.c index 5a9491fcd8..9ed0eeb636 100644 --- a/dp/wifi3.0/dp_main.c +++ b/dp/wifi3.0/dp_main.c @@ -10797,14 +10797,14 @@ dp_calculate_delay_stats(struct cdp_soc_t *cdp_soc, uint8_t vdev_id, return QDF_STATUS_SUCCESS; } -/* - * dp_get_vdev_param: function to get parameters from vdev - * @cdp_soc : DP soc handle +/** + * dp_get_vdev_param() - function to get parameters from vdev + * @cdp_soc: DP soc handle * @vdev_id: id of DP vdev handle * @param: parameter type to get value * @val: buffer address * - * return: status + * Return: status */ static QDF_STATUS dp_get_vdev_param(struct cdp_soc_t *cdp_soc, uint8_t vdev_id, enum cdp_vdev_param_type param, @@ -10860,6 +10860,9 @@ static QDF_STATUS dp_get_vdev_param(struct cdp_soc_t *cdp_soc, uint8_t vdev_id, case CDP_DROP_3ADDR_MCAST: val->cdp_drop_3addr_mcast = vdev->drop_3addr_mcast; break; + case CDP_SET_MCAST_VDEV: + soc->arch_ops.txrx_get_vdev_mcast_param(soc, vdev, val); + break; default: dp_cdp_err("%pK: param value %d is wrong", soc, param); @@ -10871,14 +10874,14 @@ static QDF_STATUS dp_get_vdev_param(struct cdp_soc_t *cdp_soc, uint8_t vdev_id, return QDF_STATUS_SUCCESS; } -/* - * dp_set_vdev_param: function to set parameters in vdev - * @cdp_soc : DP soc handle +/** + * dp_set_vdev_param() - function to set parameters in vdev + * @cdp_soc: DP soc handle * @vdev_id: id of DP vdev handle * @param: parameter type to get value * @val: value * - * return: QDF_STATUS + * Return: QDF_STATUS */ static QDF_STATUS dp_set_vdev_param(struct cdp_soc_t *cdp_soc, uint8_t vdev_id, diff --git a/dp/wifi3.0/dp_types.h b/dp/wifi3.0/dp_types.h index 4d99e36436..8962c647bd 100644 --- a/dp/wifi3.0/dp_types.h +++ b/dp/wifi3.0/dp_types.h @@ -262,6 +262,7 @@ enum dp_mod_id { DP_MOD_ID_REINJECT, DP_MOD_ID_SCS, DP_MOD_ID_UMAC_RESET, + DP_MOD_ID_TX_MCAST, DP_MOD_ID_MAX, }; @@ -1838,6 +1839,8 @@ enum dp_context_type { * source from HAL desc for wbm release ring * @dp_service_near_full_srngs: Handler for servicing the near full IRQ * @txrx_set_vdev_param: target specific ops while setting vdev params + * @txrx_get_vdev_mcast_param: target specific ops for getting vdev + * params related to multicast * @dp_srng_test_and_update_nf_params: Check if the srng is in near full state * and set the near-full params. * @ipa_get_bank_id: Get TCL bank id used by IPA @@ -1945,6 +1948,10 @@ struct dp_arch_ops { enum cdp_vdev_param_type param, cdp_config_param_type val); + QDF_STATUS (*txrx_get_vdev_mcast_param)(struct dp_soc *soc, + struct dp_vdev *vdev, + cdp_config_param_type *val); + /* Misc Arch Ops */ qdf_size_t (*txrx_get_context_size)(enum dp_context_type); #ifdef WIFI_MONITOR_SUPPORT diff --git a/dp/wifi3.0/li/dp_li.c b/dp/wifi3.0/li/dp_li.c index e0871f33e4..4a920e01a7 100644 --- a/dp/wifi3.0/li/dp_li.c +++ b/dp/wifi3.0/li/dp_li.c @@ -583,6 +583,13 @@ static struct dp_soc *dp_rx_replensih_soc_get_li(struct dp_soc *soc, return soc; } +static QDF_STATUS dp_txrx_get_vdev_mcast_param_li(struct dp_soc *soc, + struct dp_vdev *vdev, + cdp_config_param_type *val) +{ + return QDF_STATUS_SUCCESS; +} + void dp_initialize_arch_ops_li(struct dp_arch_ops *arch_ops) { #ifndef QCA_HOST_MODE_WIFI_DISABLED @@ -643,6 +650,7 @@ void dp_initialize_arch_ops_li(struct dp_arch_ops *arch_ops) arch_ops->reo_remap_config = dp_reo_remap_config_li; arch_ops->dp_rx_replenish_soc_get = dp_rx_replensih_soc_get_li; arch_ops->get_reo_qdesc_addr = dp_rx_get_reo_qdesc_addr_li; + arch_ops->txrx_get_vdev_mcast_param = dp_txrx_get_vdev_mcast_param_li; } #ifdef QCA_DP_TX_HW_SW_NBUF_DESC_PREFETCH