diff --git a/ipa/core/inc/wlan_ipa_main.h b/ipa/core/inc/wlan_ipa_main.h index fe62d5f774..465b3dbce8 100644 --- a/ipa/core/inc/wlan_ipa_main.h +++ b/ipa/core/inc/wlan_ipa_main.h @@ -159,6 +159,13 @@ bool ipa_config_is_enabled(void); */ bool ipa_config_is_uc_enabled(void); +/** + * ipa_config_is_vlan_enabled() - Is IPA vlan config enabled? + * + * Return: true if IPA clan support is enabled in IPA config + */ +bool ipa_config_is_vlan_enabled(void); + /** * ipa_obj_setup() - IPA obj initialization and setup * @ipa_ctx: IPA obj context diff --git a/ipa/core/src/wlan_ipa_main.c b/ipa/core/src/wlan_ipa_main.c index eaa2357803..b8a93acaf5 100644 --- a/ipa/core/src/wlan_ipa_main.c +++ b/ipa/core/src/wlan_ipa_main.c @@ -96,6 +96,14 @@ bool ipa_config_is_uc_enabled(void) return g_ipa_config ? wlan_ipa_uc_is_enabled(g_ipa_config) : 0; } +bool ipa_config_is_vlan_enabled(void) +{ + if (!ipa_config_is_enabled()) + return false; + + return g_ipa_config ? g_ipa_config->ipa_vlan_support : 0; +} + QDF_STATUS ipa_obj_setup(struct wlan_ipa_priv *ipa_ctx) { return wlan_ipa_setup(ipa_ctx, g_ipa_config); @@ -847,6 +855,8 @@ void ipa_component_config_update(struct wlan_objmgr_psoc *psoc) cfg_get(psoc, CFG_DP_IPA_ENABLE_FORCE_VOTING); g_ipa_config->ipa_wds = cfg_get(psoc, CFG_DP_IPA_WDS_STATUS); + g_ipa_config->ipa_vlan_support = + cfg_get(psoc, CFG_DP_IPA_ENABLE_VLAN_SUPPORT); } void ipa_component_config_free(void) diff --git a/ipa/dispatcher/inc/cfg_ipa.h b/ipa/dispatcher/inc/cfg_ipa.h index 91f1dcbcf0..4d03344d4d 100644 --- a/ipa/dispatcher/inc/cfg_ipa.h +++ b/ipa/dispatcher/inc/cfg_ipa.h @@ -218,6 +218,25 @@ CFG_INI_BOOL("gIPAWds", \ false, "Ctrl to enable WDS for EasyMesh") +/* + * + * gIPAVlanEnable - IPA vlan support enable + * @Default: false + * + * This ini specifies to enable IPA vlan support + * + * Related: N/A + * + * Supported Feature: IPA + * + * Usage: Internal + * + * + */ +#define CFG_DP_IPA_ENABLE_VLAN_SUPPORT \ + CFG_INI_BOOL("gIPAVlanEnable", \ + false, "Ctrl to enable vlan support with IPA Offload") + #define CFG_IPA \ CFG(CFG_DP_IPA_OFFLOAD_CONFIG) \ CFG(CFG_DP_IPA_DESC_SIZE) \ @@ -226,5 +245,6 @@ CFG(CFG_DP_IPA_LOW_BANDWIDTH_MBPS) \ CFG(CFG_DP_IPA_ENABLE_FORCE_VOTING) \ CFG(CFG_DP_IPA_UC_TX_BUF_COUNT) \ - CFG(CFG_DP_IPA_WDS_STATUS) + CFG(CFG_DP_IPA_WDS_STATUS) \ + CFG(CFG_DP_IPA_ENABLE_VLAN_SUPPORT) #endif /* _CFG_IPA_H_ */ diff --git a/ipa/dispatcher/inc/wlan_ipa_obj_mgmt_api.h b/ipa/dispatcher/inc/wlan_ipa_obj_mgmt_api.h index d33147bad4..d0df6f73a7 100644 --- a/ipa/dispatcher/inc/wlan_ipa_obj_mgmt_api.h +++ b/ipa/dispatcher/inc/wlan_ipa_obj_mgmt_api.h @@ -79,6 +79,13 @@ static inline bool wlan_ipa_config_is_enabled(void) */ qdf_ipa_wdi_hdl_t wlan_ipa_get_hdl(void *soc, uint8_t pdev_id); +/** + * wlan_ipa_is_vlan enabled() - get IPA vlan support enable status + * + * Return: true - ipa vlan support is enabled + * false - ipa vlan support is not enabled + */ +bool wlan_ipa_is_vlan_enabled(void); #else static inline QDF_STATUS ipa_init(void) @@ -105,6 +112,11 @@ static inline bool wlan_ipa_config_is_enabled(void) { return false; } + +static inline bool wlan_ipa_is_vlan_enabled(void) +{ + return false; +} #endif /* IPA_OFFLOAD */ #endif /* _WLAN_IPA_OBJ_MGMT_H_ */ diff --git a/ipa/dispatcher/inc/wlan_ipa_public_struct.h b/ipa/dispatcher/inc/wlan_ipa_public_struct.h index d479031531..84028fccf0 100644 --- a/ipa/dispatcher/inc/wlan_ipa_public_struct.h +++ b/ipa/dispatcher/inc/wlan_ipa_public_struct.h @@ -41,6 +41,7 @@ * @ipa_bw_low: IPA bandwidth low threshold * @ipa_force_voting: support force bw voting * @ipa_wds: WDS support for IPA + * @ipa_vlan_support: support got vlan with IPA */ struct wlan_ipa_config { uint32_t ipa_config; @@ -54,6 +55,7 @@ struct wlan_ipa_config { uint32_t ipa_bw_low; bool ipa_force_voting; bool ipa_wds; + bool ipa_vlan_support; }; /** diff --git a/ipa/dispatcher/inc/wlan_ipa_ucfg_api.h b/ipa/dispatcher/inc/wlan_ipa_ucfg_api.h index d6af61ba48..5dbe9a3bfa 100644 --- a/ipa/dispatcher/inc/wlan_ipa_ucfg_api.h +++ b/ipa/dispatcher/inc/wlan_ipa_ucfg_api.h @@ -87,6 +87,14 @@ bool ucfg_ipa_is_enabled(void); */ bool ucfg_ipa_uc_is_enabled(void); +/** + * ucfg_ipa_is_vlan enabled() - get IPA vlan support enable status + * + * Return: true - ipa vlan support is enabled + * false - ipa vlan support is not enabled + */ +bool ucfg_ipa_is_vlan_enabled(void); + /** * ucfg_ipa_set_dp_handle() - register DP handle * @psoc: psoc handle @@ -495,6 +503,11 @@ static inline bool ucfg_ipa_uc_is_enabled(void) return false; } +static inline bool ucfg_ipa_is_vlan_enabled(void) +{ + return false; +} + static inline QDF_STATUS ucfg_ipa_set_dp_handle(struct wlan_objmgr_psoc *psoc, void *dp_soc) diff --git a/ipa/dispatcher/src/wlan_ipa_obj_mgmt_api.c b/ipa/dispatcher/src/wlan_ipa_obj_mgmt_api.c index e5f1804697..3c64d21799 100644 --- a/ipa/dispatcher/src/wlan_ipa_obj_mgmt_api.c +++ b/ipa/dispatcher/src/wlan_ipa_obj_mgmt_api.c @@ -363,3 +363,10 @@ qdf_ipa_wdi_hdl_t wlan_ipa_get_hdl(void *soc, uint8_t pdev_id) } qdf_export_symbol(wlan_ipa_get_hdl); + +bool wlan_ipa_is_vlan_enabled(void) +{ + return ipa_config_is_vlan_enabled(); +} + +qdf_export_symbol(wlan_ipa_is_vlan_enabled); diff --git a/ipa/dispatcher/src/wlan_ipa_ucfg_api.c b/ipa/dispatcher/src/wlan_ipa_ucfg_api.c index e7dcf44d4f..b768527faa 100644 --- a/ipa/dispatcher/src/wlan_ipa_ucfg_api.c +++ b/ipa/dispatcher/src/wlan_ipa_ucfg_api.c @@ -67,6 +67,13 @@ bool ucfg_ipa_uc_is_enabled(void) qdf_export_symbol(ucfg_ipa_uc_is_enabled); +bool ucfg_ipa_is_vlan_enabled(void) +{ + return ipa_config_is_vlan_enabled(); +} + +qdf_export_symbol(ucfg_ipa_is_vlan_enabled); + void ucfg_ipa_set_pdev_id(struct wlan_objmgr_psoc *psoc, uint8_t pdev_id) {