|
@@ -1264,22 +1264,63 @@ static void __hdd_wmm_do_implicit_qos(struct work_struct *work)
|
|
|
((WLAN_HDD_GET_CTX(adapter))->config->
|
|
|
UapsdMask & SME_QOS_UAPSD_BK) ? 1 : 0;
|
|
|
}
|
|
|
- qosInfo.ts_info.direction =
|
|
|
- (WLAN_HDD_GET_CTX(adapter))->config->InfraDirAcBk;
|
|
|
+
|
|
|
+ status = ucfg_mlme_get_wmm_dir_ac_bk(hdd_ctx->psoc, &dir_ac);
|
|
|
+ if (!QDF_IS_STATUS_SUCCESS(status)) {
|
|
|
+ hdd_err("Get infra_dir_ac_bk failed");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ qosInfo.ts_info.direction = dir_ac;
|
|
|
+
|
|
|
qosInfo.ts_info.tid = 255;
|
|
|
- qosInfo.mean_data_rate =
|
|
|
- (WLAN_HDD_GET_CTX(adapter))->config->
|
|
|
- InfraMeanDataRateAcBk;
|
|
|
- qosInfo.min_phy_rate =
|
|
|
- (WLAN_HDD_GET_CTX(adapter))->config->InfraMinPhyRateAcBk;
|
|
|
- qosInfo.min_service_interval =
|
|
|
- (WLAN_HDD_GET_CTX(adapter))->config->InfraUapsdBkSrvIntv;
|
|
|
- qosInfo.nominal_msdu_size =
|
|
|
- (WLAN_HDD_GET_CTX(adapter))->config->InfraNomMsduSizeAcBk;
|
|
|
- qosInfo.surplus_bw_allowance =
|
|
|
- (WLAN_HDD_GET_CTX(adapter))->config->InfraSbaAcBk;
|
|
|
- qosInfo.suspension_interval =
|
|
|
- (WLAN_HDD_GET_CTX(adapter))->config->InfraUapsdBkSuspIntv;
|
|
|
+ status = ucfg_mlme_get_wmm_uapsd_bk_srv_intv(hdd_ctx->psoc,
|
|
|
+ &uapsd_value);
|
|
|
+ if (!QDF_IS_STATUS_SUCCESS(status)) {
|
|
|
+ hdd_err("Get uapsd_bk_srv_intv failed");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ qosInfo.min_service_interval = uapsd_value;
|
|
|
+
|
|
|
+ status = ucfg_mlme_get_wmm_uapsd_bk_sus_intv(hdd_ctx->psoc,
|
|
|
+ &uapsd_value);
|
|
|
+ if (!QDF_IS_STATUS_SUCCESS(status)) {
|
|
|
+ hdd_err("Get uapsd_bk_sus_intv failed");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ qosInfo.suspension_interval = uapsd_value;
|
|
|
+
|
|
|
+ status = ucfg_mlme_get_wmm_mean_data_rate_ac_bk(hdd_ctx->psoc,
|
|
|
+ &rate_ac);
|
|
|
+ if (!QDF_IS_STATUS_SUCCESS(status)) {
|
|
|
+ hdd_err("Get mean_data_rate_ac_bk failed");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ qosInfo.mean_data_rate = rate_ac;
|
|
|
+
|
|
|
+ status = ucfg_mlme_get_wmm_min_phy_rate_ac_bk(hdd_ctx->psoc,
|
|
|
+ &rate_ac);
|
|
|
+ if (!QDF_IS_STATUS_SUCCESS(status)) {
|
|
|
+ hdd_err("Get min_phy_rate_ac_bk failed");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ qosInfo.min_phy_rate = rate_ac;
|
|
|
+
|
|
|
+ status =
|
|
|
+ ucfg_mlme_get_wmm_nom_msdu_size_ac_bk(hdd_ctx->psoc,
|
|
|
+ &nom_msdu_size_ac);
|
|
|
+ if (!QDF_IS_STATUS_SUCCESS(status)) {
|
|
|
+ hdd_err("Get nom_msdu_size_ac_bk failed");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ qosInfo.nominal_msdu_size = nom_msdu_size_ac;
|
|
|
+
|
|
|
+ status = ucfg_mlme_get_wmm_sba_ac_bk(hdd_ctx->psoc, &sba_ac);
|
|
|
+ if (!QDF_IS_STATUS_SUCCESS(status)) {
|
|
|
+ hdd_err("Get sba_ac_bk failed");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ qosInfo.surplus_bw_allowance = sba_ac;
|
|
|
+
|
|
|
break;
|
|
|
}
|
|
|
#ifdef FEATURE_WLAN_ESE
|
|
@@ -2028,15 +2069,26 @@ QDF_STATUS hdd_wmm_assoc(struct hdd_adapter *adapter,
|
|
|
}
|
|
|
|
|
|
if (uapsdMask & HDD_AC_BK) {
|
|
|
- status =
|
|
|
- sme_enable_uapsd_for_ac((WLAN_HDD_GET_STATION_CTX_PTR
|
|
|
- (adapter))->conn_info.staId[0],
|
|
|
- SME_AC_BK, 2, 2,
|
|
|
- hdd_ctx->config->InfraUapsdBkSrvIntv,
|
|
|
- hdd_ctx->config->InfraUapsdBkSuspIntv,
|
|
|
- SME_QOS_WMM_TS_DIR_BOTH, 1,
|
|
|
- adapter->session_id,
|
|
|
- hdd_ctx->config->DelayedTriggerFrmInt);
|
|
|
+ status = ucfg_mlme_get_wmm_uapsd_bk_srv_intv(hdd_ctx->psoc,
|
|
|
+ &srv_value);
|
|
|
+ if (!QDF_IS_STATUS_SUCCESS(status)) {
|
|
|
+ hdd_err("Get uapsd_bk_srv_intv failed");
|
|
|
+ return QDF_STATUS_SUCCESS;
|
|
|
+ }
|
|
|
+ status = ucfg_mlme_get_wmm_uapsd_bk_sus_intv(hdd_ctx->psoc,
|
|
|
+ &sus_value);
|
|
|
+ if (!QDF_IS_STATUS_SUCCESS(status)) {
|
|
|
+ hdd_err("Get uapsd_bk_sus_intv failed");
|
|
|
+ return QDF_STATUS_SUCCESS;
|
|
|
+ }
|
|
|
+
|
|
|
+ status = sme_enable_uapsd_for_ac(
|
|
|
+ (WLAN_HDD_GET_STATION_CTX_PTR(
|
|
|
+ adapter))->conn_info.staId[0],
|
|
|
+ SME_AC_BK, 2, 2, srv_value, sus_value,
|
|
|
+ SME_QOS_WMM_TS_DIR_BOTH, 1,
|
|
|
+ adapter->session_id,
|
|
|
+ hdd_ctx->config->DelayedTriggerFrmInt);
|
|
|
|
|
|
QDF_ASSERT(QDF_IS_STATUS_SUCCESS(status));
|
|
|
}
|
|
@@ -2217,10 +2269,14 @@ QDF_STATUS hdd_wmm_get_uapsd_mask(struct hdd_adapter *adapter,
|
|
|
uapsdMask &= ~HDD_AC_VI;
|
|
|
}
|
|
|
|
|
|
- if ((WLAN_HDD_GET_CTX(adapter))->config->
|
|
|
- InfraUapsdBkSrvIntv == 0) {
|
|
|
- uapsdMask &= ~HDD_AC_BK;
|
|
|
+ status = ucfg_mlme_get_wmm_uapsd_bk_srv_intv(hdd_ctx->psoc,
|
|
|
+ &uapsd_value);
|
|
|
+ if (!QDF_IS_STATUS_SUCCESS(status)) {
|
|
|
+ hdd_err("Get uapsd_bk_srv_intv failed");
|
|
|
+ return QDF_STATUS_E_FAILURE;
|
|
|
}
|
|
|
+ if (uapsd_value == 0)
|
|
|
+ uapsdMask &= ~HDD_AC_BK;
|
|
|
|
|
|
status = ucfg_mlme_get_wmm_uapsd_be_srv_intv(hdd_ctx->psoc,
|
|
|
&uapsd_value);
|