diff --git a/mlme/core/src/wlan_mlme_main.c b/mlme/core/src/wlan_mlme_main.c index 4ddc666ad1..e47ed5d664 100644 --- a/mlme/core/src/wlan_mlme_main.c +++ b/mlme/core/src/wlan_mlme_main.c @@ -1263,6 +1263,22 @@ static void mlme_init_wmm_in_cfg(struct wlan_objmgr_psoc *psoc, cfg_get(psoc, CFG_QOS_WMM_UAPSD_VO_SRV_INTV); wmm_params->ac_vo.uapsd_vo_sus_intv = cfg_get(psoc, CFG_QOS_WMM_UAPSD_VO_SUS_INTV); + + wmm_params->ac_vi.dir_ac_vi = + cfg_get(psoc, CFG_QOS_WMM_DIR_AC_VI); + wmm_params->ac_vi.nom_msdu_size_ac_vi = + cfg_get(psoc, CFG_QOS_WMM_NOM_MSDU_SIZE_AC_VI); + wmm_params->ac_vi.mean_data_rate_ac_vi = + cfg_get(psoc, CFG_QOS_WMM_MEAN_DATA_RATE_AC_VI); + wmm_params->ac_vi.min_phy_rate_ac_vi = + cfg_get(psoc, CFG_QOS_WMM_MIN_PHY_RATE_AC_VI); + wmm_params->ac_vi.sba_ac_vi = + cfg_get(psoc, CFG_QOS_WMM_SBA_AC_VI); + wmm_params->ac_vi.uapsd_vi_srv_intv = + cfg_get(psoc, CFG_QOS_WMM_UAPSD_VI_SRV_INTV); + wmm_params->ac_vi.uapsd_vi_sus_intv = + cfg_get(psoc, CFG_QOS_WMM_UAPSD_VI_SUS_INTV); + } static void mlme_init_wps_params_cfg(struct wlan_objmgr_psoc *psoc, diff --git a/mlme/dispatcher/inc/cfg_mlme_fe_wmm.h b/mlme/dispatcher/inc/cfg_mlme_fe_wmm.h index 60dcadda34..9ff49a9f36 100644 --- a/mlme/dispatcher/inc/cfg_mlme_fe_wmm.h +++ b/mlme/dispatcher/inc/cfg_mlme_fe_wmm.h @@ -179,6 +179,131 @@ 0x2001, \ CFG_VALUE_OR_DEFAULT, \ "surplus bandwidth allowance for VO") +/* + * + * InfraDirAcVi - Set TSPEC direction for VI + * @Min: 0 + * @Max: 3 + * @Default: 3 + * + * This ini is used to set TSPEC direction for VI + * + * Related: None. + * + * Supported Feature: WMM + * + * Usage: Internal/External + * + * + */ +#define CFG_QOS_WMM_DIR_AC_VI CFG_INI_UINT( \ + "InfraDirAcVi", \ + 0, \ + 3, \ + 3, \ + CFG_VALUE_OR_DEFAULT, \ + "TSPEC direction for VI") + +/* + * + * InfraNomMsduSizeAcVi - Set normal MSDU size for VI + * @Min: 0x0 + * @Max: 0xFFFF + * @Default: 0x85DC + * + * This ini is used to set normal MSDU size for VI + * + * Related: None. + * + * Supported Feature: WMM + * + * Usage: Internal/External + * + * + */ +#define CFG_QOS_WMM_NOM_MSDU_SIZE_AC_VI CFG_INI_UINT( \ + "InfraNomMsduSizeAcVi", \ + 0x0, \ + 0xFFFF, \ + 0x85DC, \ + CFG_VALUE_OR_DEFAULT, \ + "MSDU size for VI") + +/* + * + * InfraMeanDataRateAcVi - Set mean data rate for VI + * @Min: 0x0 + * @Max: 0xFFFFFFFF + * @Default: 0x57E40 + * + * This ini is used to set mean data rate for VI + * + * Related: None. + * + * Supported Feature: WMM + * + * Usage: Internal/External + * + * + */ +#define CFG_QOS_WMM_MEAN_DATA_RATE_AC_VI CFG_INI_UINT( \ + "InfraMeanDataRateAcVi", \ + 0x0, \ + 0xFFFFFFFF, \ + 0x57E40, \ + CFG_VALUE_OR_DEFAULT, \ + "data rate for VI") + +/* + * + * iInfraMinPhyRateAcVi - Set min PHY rate for VI + * @Min: 0x0 + * @Max: 0xFFFFFFFF + * @Default: 0x5B8D80 + * + * This ini is used to set min PHY rate for VI + * + * Related: None. + * + * Supported Feature: WMM + * + * Usage: Internal/External + * + * + */ +#define CFG_QOS_WMM_MIN_PHY_RATE_AC_VI CFG_INI_UINT( \ + "InfraMinPhyRateAcVi", \ + 0x0, \ + 0xFFFFFFFF, \ + 0x5B8D80, \ + CFG_VALUE_OR_DEFAULT, \ + "min PHY rate for VI") + +/* + * + * InfraSbaAcVi - Set surplus bandwidth allowance for VI + * @Min: 0x2001 + * @Max: 0xFFFF + * @Default: 0x2001 + * + * This ini is used to set surplus bandwidth allowance for VI + * + * Related: None. + * + * Supported Feature: WMM + * + * Usage: Internal/External + * + * + */ + +#define CFG_QOS_WMM_SBA_AC_VI CFG_INI_UINT( \ + "InfraSbaAcVi", \ + 0x2001, \ + 0xFFFF, \ + 0x2001, \ + CFG_VALUE_OR_DEFAULT, \ + "surplus bandwidth allowance for VI") /* * @@ -230,6 +355,57 @@ CFG_VALUE_OR_DEFAULT, \ "Infra uapsd vo sus intv") +/* + * + * InfraUapsdViSrvIntv - Set Uapsd service interval for video + * @Min: 0 + * @Max: 4294967295UL + * @Default: 300 + * + * This ini is used to set Uapsd service interval for video. + * + * Related: None. + * + * Supported Feature: WMM + * + * Usage: Internal/External + * + * + */ + +#define CFG_QOS_WMM_UAPSD_VI_SRV_INTV CFG_INI_UINT( \ + "InfraUapsdViSrvIntv", \ + 0, \ + 4294967295UL, \ + 300, \ + CFG_VALUE_OR_DEFAULT, \ + "Infra uapsd vi srv intv") + +/* + * + * InfraUapsdViSuspIntv - Set Uapsd suspension interval for video + * @Min: 0 + * @Max: 4294967295UL + * @Default: 2000 + * + * This ini is used to set Uapsd suspension interval for video + * + * Related: None. + * + * Supported Feature: WMM + * + * Usage: Internal/External + * + * + */ +#define CFG_QOS_WMM_UAPSD_VI_SUS_INTV CFG_INI_UINT( \ + "InfraUapsdViSuspIntv", \ + 0, \ + 4294967295UL, \ + 2000, \ + CFG_VALUE_OR_DEFAULT, \ + "Infra uapsd vi sus intv") + #define CFG_WMM_PARAMS_ALL \ CFG(CFG_QOS_ENABLED) \ CFG(CFG_WME_ENABLED) \ @@ -242,6 +418,13 @@ CFG(CFG_QOS_WMM_MIN_PHY_RATE_AC_VO) \ CFG(CFG_QOS_WMM_SBA_AC_VO) \ CFG(CFG_QOS_WMM_UAPSD_VO_SRV_INTV) \ - CFG(CFG_QOS_WMM_UAPSD_VO_SUS_INTV) + CFG(CFG_QOS_WMM_UAPSD_VO_SUS_INTV) \ + CFG(CFG_QOS_WMM_DIR_AC_VI) \ + CFG(CFG_QOS_WMM_NOM_MSDU_SIZE_AC_VI) \ + CFG(CFG_QOS_WMM_MEAN_DATA_RATE_AC_VI) \ + CFG(CFG_QOS_WMM_MIN_PHY_RATE_AC_VI) \ + CFG(CFG_QOS_WMM_SBA_AC_VI) \ + CFG(CFG_QOS_WMM_UAPSD_VI_SRV_INTV) \ + CFG(CFG_QOS_WMM_UAPSD_VI_SUS_INTV) #endif /* __CFG_MLME_FE_WMM_H */ diff --git a/mlme/dispatcher/inc/wlan_mlme_api.h b/mlme/dispatcher/inc/wlan_mlme_api.h index 2fde35dc62..dd923010b2 100644 --- a/mlme/dispatcher/inc/wlan_mlme_api.h +++ b/mlme/dispatcher/inc/wlan_mlme_api.h @@ -638,6 +638,89 @@ QDF_STATUS wlan_mlme_get_fils_enabled_info(struct wlan_objmgr_psoc *psoc, QDF_STATUS wlan_mlme_set_fils_enabled_info(struct wlan_objmgr_psoc *psoc, bool value); +/** + * wlan_mlme_get_wmm_dir_ac_vi() - Get TSPEC direction + * for VI + * @psoc: pointer to psoc object + * @value: Value that needs to be set from the caller + * + * Return: QDF Status + */ +QDF_STATUS +wlan_mlme_get_wmm_dir_ac_vi(struct wlan_objmgr_psoc *psoc, + uint8_t *value); + +/** + * wlan_mlme_get_wmm_nom_msdu_size_ac_vi() - Get normal + * MSDU size for VI + * @psoc: pointer to psoc object + * @value: Value that needs to be set from the caller + * + * Return: QDF Status + */ +QDF_STATUS +wlan_mlme_get_wmm_nom_msdu_size_ac_vi(struct wlan_objmgr_psoc *psoc, + uint16_t *value); + +/** + * wlan_mlme_get_wmm_mean_data_rate_ac_vi() - mean data + * rate for VI + * @psoc: pointer to psoc object + * @value: Value that needs to be set from the caller + * + * Return: QDF Status + */ +QDF_STATUS +wlan_mlme_get_wmm_mean_data_rate_ac_vi(struct wlan_objmgr_psoc *psoc, + uint32_t *value); + +/** + * wlan_mlme_get_wmm_min_phy_rate_ac_vi() - min PHY + * rate for VI + * @psoc: pointer to psoc object + * @value: Value that needs to be set from the caller + * + * Return: QDF Status + */ +QDF_STATUS +wlan_mlme_get_wmm_min_phy_rate_ac_vi(struct wlan_objmgr_psoc *psoc, + uint32_t *value); + +/** + * wlan_mlme_get_wmm_sba_ac_vi() - surplus bandwidth + * allowance for VI + * @psoc: pointer to psoc object + * @value: Value that needs to be set from the caller + * + * Return: QDF Status + */ +QDF_STATUS +wlan_mlme_get_wmm_sba_ac_vi(struct wlan_objmgr_psoc *psoc, uint16_t *value); + +/** + * wlan_mlme_get_wmm_uapsd_vi_srv_intv() - Get Uapsd service + * interval for video + * @psoc: pointer to psoc object + * @value: pointer to the value which will be filled for the caller + * + * Return: QDF Status + */ +QDF_STATUS +wlan_mlme_get_wmm_uapsd_vi_srv_intv(struct wlan_objmgr_psoc *psoc, + uint32_t *value); + +/** + * wlan_mlme_get_wmm_uapsd_vi_sus_intv() - Get Uapsd suspension + * interval for video + * @psoc: pointer to psoc object + * @value: pointer to the value which will be filled for the caller + * + * Return: QDF Status + */ +QDF_STATUS +wlan_mlme_get_wmm_uapsd_vi_sus_intv(struct wlan_objmgr_psoc *psoc, + uint32_t *value); + /** * wlan_mlme_get_wmm_dir_ac_vo() - Get TSPEC direction * for VO @@ -726,6 +809,7 @@ wlan_mlme_get_wmm_uapsd_vo_srv_intv(struct wlan_objmgr_psoc *psoc, QDF_STATUS wlan_mlme_get_wmm_uapsd_vo_sus_intv(struct wlan_objmgr_psoc *psoc, uint32_t *value); + /** * wlan_mlme_cfg_get_vht_max_mpdu_len() - gets vht max mpdu length from cfg item * @psoc: psoc context diff --git a/mlme/dispatcher/inc/wlan_mlme_public_struct.h b/mlme/dispatcher/inc/wlan_mlme_public_struct.h index e943477814..36594e4ac1 100644 --- a/mlme/dispatcher/inc/wlan_mlme_public_struct.h +++ b/mlme/dispatcher/inc/wlan_mlme_public_struct.h @@ -1018,6 +1018,27 @@ struct wlan_mlme_wmm_ac_vo { uint32_t uapsd_vo_sus_intv; }; +/** + * struct wlan_mlme_wmm_ac_vi - Default TSPEC parameters + * for AC_VI + * @dir_ac_vi: TSPEC direction for VI + * @nom_msdu_size_ac_vi: normal MSDU size for VI + * @mean_data_rate_ac_vi: mean data rate for VI + * @min_phy_rate_ac_vi: min PHY rate for VI + * @sba_ac_vi: surplus bandwidth allowance for VI + * @uapsd_vo_srv_intv: Uapsd service interval for VI + * @uapsd_vo_sus_intv: Uapsd suspension interval for VI + */ +struct wlan_mlme_wmm_ac_vi { + uint8_t dir_ac_vi; + uint16_t nom_msdu_size_ac_vi; + uint32_t mean_data_rate_ac_vi; + uint32_t min_phy_rate_ac_vi; + uint16_t sba_ac_vi; + uint32_t uapsd_vi_srv_intv; + uint32_t uapsd_vi_sus_intv; +}; + /** * struct wlan_mlme_wmm_params - WMM CFG Items * @qos_enabled: AP is enabled with 11E @@ -1025,6 +1046,7 @@ struct wlan_mlme_wmm_ac_vo { * @max_sp_length: Maximum SP Length * @wsm_enabled: AP is enabled with WSM * @ac_vo: Default TSPEC parameters for AC_VO + * @ac_vi: Default TSPEC parameters for AC_VI */ struct wlan_mlme_wmm_params { bool qos_enabled; @@ -1033,6 +1055,7 @@ struct wlan_mlme_wmm_params { bool wsm_enabled; uint32_t edca_profile; struct wlan_mlme_wmm_ac_vo ac_vo; + struct wlan_mlme_wmm_ac_vi ac_vi; }; /** diff --git a/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h b/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h index 11d54d2045..13f27d729a 100644 --- a/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h +++ b/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h @@ -1697,4 +1697,122 @@ ucfg_mlme_set_supported_mcs_set(struct wlan_objmgr_psoc *psoc, uint8_t *buf, QDF_STATUS ucfg_mlme_get_current_mcs_set(struct wlan_objmgr_psoc *psoc, uint8_t *buf, qdf_size_t *len); +/** + * ucfg_mlme_get_wmm_dir_ac_vi() - Get TSPEC direction + * for VI + * @psoc: pointer to psoc object + * @value: Value that needs to be set from the caller + * + * Inline UCFG API to be used by HDD/OSIF callers + * + * Return: QDF Status + */ +static inline QDF_STATUS +ucfg_mlme_get_wmm_dir_ac_vi(struct wlan_objmgr_psoc *psoc, + uint8_t *value) +{ + return wlan_mlme_get_wmm_dir_ac_vi(psoc, value); +} + +/** + * ucfg_mlme_get_wmm_nom_msdu_size_ac_vi() - Get normal + * MSDU size for VI + * @psoc: pointer to psoc object + * @value: Value that needs to be set from the caller + * + * Inline UCFG API to be used by HDD/OSIF callers + * + * Return: QDF Status + */ +static inline QDF_STATUS +ucfg_mlme_get_wmm_nom_msdu_size_ac_vi(struct wlan_objmgr_psoc *psoc, + uint16_t *value) +{ + return wlan_mlme_get_wmm_nom_msdu_size_ac_vi(psoc, value); +} + +/** + * ucfg_mlme_get_wmm_mean_data_rate_ac_vi() - mean data + * rate for VI + * @psoc: pointer to psoc object + * @value: Value that needs to be set from the caller + * + * Inline UCFG API to be used by HDD/OSIF callers + * + * Return: QDF Status + */ +static inline QDF_STATUS +ucfg_mlme_get_wmm_mean_data_rate_ac_vi(struct wlan_objmgr_psoc *psoc, + uint32_t *value) +{ + return wlan_mlme_get_wmm_mean_data_rate_ac_vi(psoc, value); +} + +/** + * ucfg_mlme_get_wmm_min_phy_rate_ac_vi() - min PHY + * rate for VI + * @psoc: pointer to psoc object + * @value: Value that needs to be set from the caller + * + * Inline UCFG API to be used by HDD/OSIF callers + * + * Return: QDF Status + */ +static inline QDF_STATUS +ucfg_mlme_get_wmm_min_phy_rate_ac_vi(struct wlan_objmgr_psoc *psoc, + uint32_t *value) +{ + return wlan_mlme_get_wmm_min_phy_rate_ac_vi(psoc, value); +} + +/** + * ucfg_mlme_get_wmm_sba_ac_vi() - surplus bandwidth + * allowance for VI + * @psoc: pointer to psoc object + * @value: Value that needs to be set from the caller + * + * Inline UCFG API to be used by HDD/OSIF callers + * + * Return: QDF Status + */ +static inline QDF_STATUS +ucfg_mlme_get_wmm_sba_ac_vi(struct wlan_objmgr_psoc *psoc, uint16_t *value) +{ + return wlan_mlme_get_wmm_sba_ac_vi(psoc, value); +} + +/** + * ucfg_mlme_get_wmm_uapsd_vi_srv_intv() - Get Uapsd service + * interval for video + * @psoc: pointer to psoc object + * @value: pointer to the value which will be filled for the caller + * + * Inline UCFG API to be used by HDD/OSIF callers + * + * Return: QDF Status + */ +static inline QDF_STATUS +ucfg_mlme_get_wmm_uapsd_vi_srv_intv(struct wlan_objmgr_psoc *psoc, + uint32_t *value) +{ + return wlan_mlme_get_wmm_uapsd_vi_srv_intv(psoc, value); +} + +/** + * ucfg_mlme_get_wmm_uapsd_vi_sus_intv() - Get Uapsd suspension + * interval for video + * @psoc: pointer to psoc object + * @value: Value that needs to be set from the caller + * + * Inline UCFG API to be used by HDD/OSIF callers + * + * Return: QDF Status + */ +static inline QDF_STATUS +ucfg_mlme_get_wmm_uapsd_vi_sus_intv(struct wlan_objmgr_psoc *psoc, + uint32_t *value) +{ + return wlan_mlme_get_wmm_uapsd_vi_sus_intv(psoc, value); +} + #endif /* _WLAN_MLME_UCFG_API_H_ */ diff --git a/mlme/dispatcher/src/wlan_mlme_api.c b/mlme/dispatcher/src/wlan_mlme_api.c index cb483082c4..aef56c3d8b 100644 --- a/mlme/dispatcher/src/wlan_mlme_api.c +++ b/mlme/dispatcher/src/wlan_mlme_api.c @@ -678,6 +678,122 @@ QDF_STATUS wlan_mlme_get_wmm_uapsd_vo_sus_intv(struct wlan_objmgr_psoc *psoc, return QDF_STATUS_SUCCESS; } +QDF_STATUS wlan_mlme_get_wmm_dir_ac_vi(struct wlan_objmgr_psoc *psoc, + uint8_t *value) +{ + struct wlan_mlme_psoc_obj *mlme_obj; + + mlme_obj = mlme_get_psoc_obj(psoc); + if (!mlme_obj) { + mlme_err("Failed to get MLME Obj"); + return QDF_STATUS_E_FAILURE; + } + + *value = mlme_obj->cfg.wmm_params.ac_vi.dir_ac_vi; + + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS wlan_mlme_get_wmm_nom_msdu_size_ac_vi(struct wlan_objmgr_psoc *psoc, + uint16_t *value) +{ + struct wlan_mlme_psoc_obj *mlme_obj; + + mlme_obj = mlme_get_psoc_obj(psoc); + if (!mlme_obj) { + mlme_err("Failed to get MLME Obj"); + return QDF_STATUS_E_FAILURE; + } + + *value = + mlme_obj->cfg.wmm_params.ac_vi.nom_msdu_size_ac_vi; + + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS +wlan_mlme_get_wmm_mean_data_rate_ac_vi(struct wlan_objmgr_psoc *psoc, + uint32_t *value) +{ + struct wlan_mlme_psoc_obj *mlme_obj; + + mlme_obj = mlme_get_psoc_obj(psoc); + if (!mlme_obj) { + mlme_err("Failed to get MLME Obj"); + return QDF_STATUS_E_FAILURE; + } + + *value = mlme_obj->cfg.wmm_params.ac_vi.mean_data_rate_ac_vi; + + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS +wlan_mlme_get_wmm_min_phy_rate_ac_vi(struct wlan_objmgr_psoc *psoc, + uint32_t *value) +{ + struct wlan_mlme_psoc_obj *mlme_obj; + + mlme_obj = mlme_get_psoc_obj(psoc); + if (!mlme_obj) { + mlme_err("Failed to get MLME Obj"); + return QDF_STATUS_E_FAILURE; + } + + *value = mlme_obj->cfg.wmm_params.ac_vi.min_phy_rate_ac_vi; + + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS wlan_mlme_get_wmm_sba_ac_vi(struct wlan_objmgr_psoc *psoc, + uint16_t *value) +{ + struct wlan_mlme_psoc_obj *mlme_obj; + + mlme_obj = mlme_get_psoc_obj(psoc); + if (!mlme_obj) { + mlme_err("Failed to get MLME Obj"); + return QDF_STATUS_E_FAILURE; + } + + *value = mlme_obj->cfg.wmm_params.ac_vi.sba_ac_vi; + + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS +wlan_mlme_get_wmm_uapsd_vi_srv_intv(struct wlan_objmgr_psoc *psoc, + uint32_t *value) +{ + struct wlan_mlme_psoc_obj *mlme_obj; + + mlme_obj = mlme_get_psoc_obj(psoc); + if (!mlme_obj) { + mlme_err("Failed to get MLME Obj"); + return QDF_STATUS_E_FAILURE; + } + + *value = mlme_obj->cfg.wmm_params.ac_vi.uapsd_vi_srv_intv; + + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS wlan_mlme_get_wmm_uapsd_vi_sus_intv(struct wlan_objmgr_psoc *psoc, + uint32_t *value) +{ + struct wlan_mlme_psoc_obj *mlme_obj; + + mlme_obj = mlme_get_psoc_obj(psoc); + if (!mlme_obj) { + mlme_err("Failed to get MLME Obj"); + return QDF_STATUS_E_FAILURE; + } + + *value = mlme_obj->cfg.wmm_params.ac_vi.uapsd_vi_sus_intv; + + return QDF_STATUS_SUCCESS; +} + QDF_STATUS wlan_mlme_set_sap_listen_interval(struct wlan_objmgr_psoc *psoc, int value) {