|
@@ -455,6 +455,46 @@ static struct ieee80211_supported_band wlan_hdd_band_5_ghz = {
|
|
|
.vht_cap.vht_supported = 1,
|
|
|
};
|
|
|
|
|
|
+enum hdd_hw_rate_cck {
|
|
|
+ HDD_HW_RATE_CCK_LP_11M = 0,
|
|
|
+ HDD_HW_RATE_CCK_LP_5_5M,
|
|
|
+ HDD_HW_RATE_CCK_LP_2M,
|
|
|
+ HDD_HW_RATE_CCK_LP_1M,
|
|
|
+ HDD_HW_RATE_CCK_SP_11M,
|
|
|
+ HDD_HW_RATE_CCK_SP_5_5M,
|
|
|
+ HDD_HW_RATE_CCK_SP_2M,
|
|
|
+};
|
|
|
+
|
|
|
+enum hdd_hw_rate_ofdm {
|
|
|
+ HDD_HW_RATE_OFDM_48M = 0,
|
|
|
+ HDD_HW_RATE_OFDM_24M,
|
|
|
+ HDD_HW_RATE_OFDM_12M,
|
|
|
+ HDD_HW_RATE_OFDM_6M,
|
|
|
+ HDD_HW_RATE_OFDM_54M,
|
|
|
+ HDD_HW_RATE_OFDM_36M,
|
|
|
+ HDD_HW_RATE_OFDM_18M,
|
|
|
+ HDD_HW_RATE_OFDM_9M,
|
|
|
+};
|
|
|
+
|
|
|
+static struct ieee80211_rate hdd_legacy_rates[] = {
|
|
|
+ { .bitrate = 10,
|
|
|
+ .hw_value = HDD_HW_RATE_CCK_LP_1M },
|
|
|
+ { .bitrate = 20,
|
|
|
+ .hw_value = HDD_HW_RATE_CCK_LP_2M },
|
|
|
+ { .bitrate = 55,
|
|
|
+ .hw_value = HDD_HW_RATE_CCK_LP_5_5M },
|
|
|
+ { .bitrate = 110,
|
|
|
+ .hw_value = HDD_HW_RATE_CCK_LP_11M },
|
|
|
+ { .bitrate = 60, .hw_value = HDD_HW_RATE_OFDM_6M },
|
|
|
+ { .bitrate = 90, .hw_value = HDD_HW_RATE_OFDM_9M },
|
|
|
+ { .bitrate = 120, .hw_value = HDD_HW_RATE_OFDM_12M },
|
|
|
+ { .bitrate = 180, .hw_value = HDD_HW_RATE_OFDM_18M },
|
|
|
+ { .bitrate = 240, .hw_value = HDD_HW_RATE_OFDM_24M },
|
|
|
+ { .bitrate = 360, .hw_value = HDD_HW_RATE_OFDM_36M },
|
|
|
+ { .bitrate = 480, .hw_value = HDD_HW_RATE_OFDM_48M },
|
|
|
+ { .bitrate = 540, .hw_value = HDD_HW_RATE_OFDM_54M },
|
|
|
+};
|
|
|
+
|
|
|
#if defined(CONFIG_BAND_6GHZ) && (defined(CFG80211_6GHZ_BAND_SUPPORTED) || \
|
|
|
(KERNEL_VERSION(5, 4, 0) <= LINUX_VERSION_CODE))
|
|
|
|
|
@@ -27966,7 +28006,7 @@ static int __wlan_hdd_cfg80211_set_bitrate_mask(struct wiphy *wiphy,
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
- if (!hweight32(mask->control[band].legacy)) {
|
|
|
+ if (!qdf_get_hweight32(mask->control[band].legacy)) {
|
|
|
hdd_err("Legacy bit rate setting not supported for band %u",
|
|
|
band);
|
|
|
errno = -EINVAL;
|
|
@@ -28001,6 +28041,21 @@ static int __wlan_hdd_cfg80211_set_bitrate_mask(struct wiphy *wiphy,
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ if (qdf_get_hweight32(mask->control[band].legacy) == 1) {
|
|
|
+ rate_index = (ffs(mask->control[band].legacy) - 1);
|
|
|
+ nss = 0;
|
|
|
+ if (band == NL80211_BAND_5GHZ)
|
|
|
+ rate_index += 4;
|
|
|
+ if (rate_index >= 0 && rate_index < 4)
|
|
|
+ bit_rate = hdd_assemble_rate_code(
|
|
|
+ WMI_RATE_PREAMBLE_CCK, nss,
|
|
|
+ hdd_legacy_rates[rate_index].hw_value);
|
|
|
+ else if (rate_index >= 4 && rate_index < 12)
|
|
|
+ bit_rate = hdd_assemble_rate_code(
|
|
|
+ WMI_RATE_PREAMBLE_OFDM, nss,
|
|
|
+ hdd_legacy_rates[rate_index].hw_value);
|
|
|
+ }
|
|
|
+
|
|
|
hdd_get_he_bitrate_params_for_band(band, mask, &nss,
|
|
|
&rate_index, &bit_rate);
|
|
|
|