|
@@ -1200,22 +1200,61 @@ static void __hdd_wmm_do_implicit_qos(struct work_struct *work)
|
|
|
((WLAN_HDD_GET_CTX(adapter))->config->
|
|
|
UapsdMask & SME_QOS_UAPSD_BE) ? 1 : 0;
|
|
|
}
|
|
|
- qosInfo.ts_info.direction =
|
|
|
- (WLAN_HDD_GET_CTX(adapter))->config->InfraDirAcBe;
|
|
|
+ status = ucfg_mlme_get_wmm_dir_ac_be(hdd_ctx->psoc, &dir_ac);
|
|
|
+ if (!QDF_IS_STATUS_SUCCESS(status)) {
|
|
|
+ hdd_err("Get infra_dir_ac_be failed");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ qosInfo.ts_info.direction = dir_ac;
|
|
|
+
|
|
|
qosInfo.ts_info.tid = 255;
|
|
|
- qosInfo.mean_data_rate =
|
|
|
- (WLAN_HDD_GET_CTX(adapter))->config->
|
|
|
- InfraMeanDataRateAcBe;
|
|
|
- qosInfo.min_phy_rate =
|
|
|
- (WLAN_HDD_GET_CTX(adapter))->config->InfraMinPhyRateAcBe;
|
|
|
- qosInfo.min_service_interval =
|
|
|
- (WLAN_HDD_GET_CTX(adapter))->config->InfraUapsdBeSrvIntv;
|
|
|
- qosInfo.nominal_msdu_size =
|
|
|
- (WLAN_HDD_GET_CTX(adapter))->config->InfraNomMsduSizeAcBe;
|
|
|
- qosInfo.surplus_bw_allowance =
|
|
|
- (WLAN_HDD_GET_CTX(adapter))->config->InfraSbaAcBe;
|
|
|
- qosInfo.suspension_interval =
|
|
|
- (WLAN_HDD_GET_CTX(adapter))->config->InfraUapsdBeSuspIntv;
|
|
|
+ status = ucfg_mlme_get_wmm_uapsd_be_srv_intv(hdd_ctx->psoc,
|
|
|
+ &uapsd_value);
|
|
|
+ if (!QDF_IS_STATUS_SUCCESS(status)) {
|
|
|
+ hdd_err("Get uapsd_vi_srv_intv failed");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ qosInfo.min_service_interval = uapsd_value;
|
|
|
+
|
|
|
+ status = ucfg_mlme_get_wmm_uapsd_be_sus_intv(hdd_ctx->psoc,
|
|
|
+ &uapsd_value);
|
|
|
+ if (!QDF_IS_STATUS_SUCCESS(status)) {
|
|
|
+ hdd_err("Get uapsd_vi_sus_intv failed");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ qosInfo.suspension_interval = uapsd_value;
|
|
|
+
|
|
|
+ status = ucfg_mlme_get_wmm_mean_data_rate_ac_be(hdd_ctx->psoc,
|
|
|
+ &rate_ac);
|
|
|
+ if (!QDF_IS_STATUS_SUCCESS(status)) {
|
|
|
+ hdd_err("Get mean_data_rate_ac_be failed");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ qosInfo.mean_data_rate = rate_ac;
|
|
|
+
|
|
|
+ status = ucfg_mlme_get_wmm_min_phy_rate_ac_be(hdd_ctx->psoc,
|
|
|
+ &rate_ac);
|
|
|
+ if (!QDF_IS_STATUS_SUCCESS(status)) {
|
|
|
+ hdd_err("Get min_phy_rate_ac_be failed");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ qosInfo.min_phy_rate = rate_ac;
|
|
|
+
|
|
|
+ status = ucfg_mlme_get_wmm_nom_msdu_size_ac_be(hdd_ctx->psoc,
|
|
|
+ &nom_msdu_size_ac);
|
|
|
+ if (!QDF_IS_STATUS_SUCCESS(status)) {
|
|
|
+ hdd_err("Get nom_msdu_size_ac_be failed");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ qosInfo.nominal_msdu_size = nom_msdu_size_ac;
|
|
|
+
|
|
|
+ status = ucfg_mlme_get_wmm_sba_ac_be(hdd_ctx->psoc, &sba_ac);
|
|
|
+ if (!QDF_IS_STATUS_SUCCESS(status)) {
|
|
|
+ hdd_err("Get sba_ac_be failed");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ qosInfo.surplus_bw_allowance = sba_ac;
|
|
|
+
|
|
|
break;
|
|
|
case SME_AC_BK:
|
|
|
qosInfo.ts_info.up = SME_QOS_WMM_UP_BK;
|
|
@@ -2003,15 +2042,26 @@ QDF_STATUS hdd_wmm_assoc(struct hdd_adapter *adapter,
|
|
|
}
|
|
|
|
|
|
if (uapsdMask & HDD_AC_BE) {
|
|
|
- status =
|
|
|
- sme_enable_uapsd_for_ac((WLAN_HDD_GET_STATION_CTX_PTR
|
|
|
- (adapter))->conn_info.staId[0],
|
|
|
- SME_AC_BE, 3, 3,
|
|
|
- hdd_ctx->config->InfraUapsdBeSrvIntv,
|
|
|
- hdd_ctx->config->InfraUapsdBeSuspIntv,
|
|
|
- SME_QOS_WMM_TS_DIR_BOTH, 1,
|
|
|
- adapter->session_id,
|
|
|
- hdd_ctx->config->DelayedTriggerFrmInt);
|
|
|
+ status = ucfg_mlme_get_wmm_uapsd_be_srv_intv(hdd_ctx->psoc,
|
|
|
+ &srv_value);
|
|
|
+ if (!QDF_IS_STATUS_SUCCESS(status)) {
|
|
|
+ hdd_err("Get uapsd_be_srv_intv failed");
|
|
|
+ return QDF_STATUS_SUCCESS;
|
|
|
+ }
|
|
|
+ status = ucfg_mlme_get_wmm_uapsd_be_sus_intv(hdd_ctx->psoc,
|
|
|
+ &sus_value);
|
|
|
+ if (!QDF_IS_STATUS_SUCCESS(status)) {
|
|
|
+ hdd_err("Get uapsd_be_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_BE, 3, 3, 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));
|
|
|
}
|
|
@@ -2172,8 +2222,13 @@ QDF_STATUS hdd_wmm_get_uapsd_mask(struct hdd_adapter *adapter,
|
|
|
uapsdMask &= ~HDD_AC_BK;
|
|
|
}
|
|
|
|
|
|
- if ((WLAN_HDD_GET_CTX(adapter))->config->
|
|
|
- InfraUapsdBeSrvIntv == 0) {
|
|
|
+ status = ucfg_mlme_get_wmm_uapsd_be_srv_intv(hdd_ctx->psoc,
|
|
|
+ &uapsd_value);
|
|
|
+ if (!QDF_IS_STATUS_SUCCESS(status)) {
|
|
|
+ hdd_err("Get uapsd_be_srv_intv failed");
|
|
|
+ return QDF_STATUS_E_FAILURE;
|
|
|
+ }
|
|
|
+ if (uapsd_value == 0) {
|
|
|
uapsdMask &= ~HDD_AC_BE;
|
|
|
}
|
|
|
}
|