|
@@ -664,6 +664,167 @@ static u8 _rtl_get_highest_n_rate(struct ieee80211_hw *hw)
|
|
return hw_rate;
|
|
return hw_rate;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+/* mac80211's rate_idx is like this:
|
|
|
|
+ *
|
|
|
|
+ * 2.4G band:rx_status->band == IEEE80211_BAND_2GHZ
|
|
|
|
+ *
|
|
|
|
+ * B/G rate:
|
|
|
|
+ * (rx_status->flag & RX_FLAG_HT) = 0,
|
|
|
|
+ * DESC92_RATE1M-->DESC92_RATE54M ==> idx is 0-->11,
|
|
|
|
+ *
|
|
|
|
+ * N rate:
|
|
|
|
+ * (rx_status->flag & RX_FLAG_HT) = 1,
|
|
|
|
+ * DESC92_RATEMCS0-->DESC92_RATEMCS15 ==> idx is 0-->15
|
|
|
|
+ *
|
|
|
|
+ * 5G band:rx_status->band == IEEE80211_BAND_5GHZ
|
|
|
|
+ * A rate:
|
|
|
|
+ * (rx_status->flag & RX_FLAG_HT) = 0,
|
|
|
|
+ * DESC92_RATE6M-->DESC92_RATE54M ==> idx is 0-->7,
|
|
|
|
+ *
|
|
|
|
+ * N rate:
|
|
|
|
+ * (rx_status->flag & RX_FLAG_HT) = 1,
|
|
|
|
+ * DESC92_RATEMCS0-->DESC92_RATEMCS15 ==> idx is 0-->15
|
|
|
|
+ */
|
|
|
|
+int rtlwifi_rate_mapping(struct ieee80211_hw *hw,
|
|
|
|
+ bool isht, u8 desc_rate, bool first_ampdu)
|
|
|
|
+{
|
|
|
|
+ int rate_idx;
|
|
|
|
+
|
|
|
|
+ if (false == isht) {
|
|
|
|
+ if (IEEE80211_BAND_2GHZ == hw->conf.channel->band) {
|
|
|
|
+ switch (desc_rate) {
|
|
|
|
+ case DESC92_RATE1M:
|
|
|
|
+ rate_idx = 0;
|
|
|
|
+ break;
|
|
|
|
+ case DESC92_RATE2M:
|
|
|
|
+ rate_idx = 1;
|
|
|
|
+ break;
|
|
|
|
+ case DESC92_RATE5_5M:
|
|
|
|
+ rate_idx = 2;
|
|
|
|
+ break;
|
|
|
|
+ case DESC92_RATE11M:
|
|
|
|
+ rate_idx = 3;
|
|
|
|
+ break;
|
|
|
|
+ case DESC92_RATE6M:
|
|
|
|
+ rate_idx = 4;
|
|
|
|
+ break;
|
|
|
|
+ case DESC92_RATE9M:
|
|
|
|
+ rate_idx = 5;
|
|
|
|
+ break;
|
|
|
|
+ case DESC92_RATE12M:
|
|
|
|
+ rate_idx = 6;
|
|
|
|
+ break;
|
|
|
|
+ case DESC92_RATE18M:
|
|
|
|
+ rate_idx = 7;
|
|
|
|
+ break;
|
|
|
|
+ case DESC92_RATE24M:
|
|
|
|
+ rate_idx = 8;
|
|
|
|
+ break;
|
|
|
|
+ case DESC92_RATE36M:
|
|
|
|
+ rate_idx = 9;
|
|
|
|
+ break;
|
|
|
|
+ case DESC92_RATE48M:
|
|
|
|
+ rate_idx = 10;
|
|
|
|
+ break;
|
|
|
|
+ case DESC92_RATE54M:
|
|
|
|
+ rate_idx = 11;
|
|
|
|
+ break;
|
|
|
|
+ default:
|
|
|
|
+ rate_idx = 0;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ switch (desc_rate) {
|
|
|
|
+ case DESC92_RATE6M:
|
|
|
|
+ rate_idx = 0;
|
|
|
|
+ break;
|
|
|
|
+ case DESC92_RATE9M:
|
|
|
|
+ rate_idx = 1;
|
|
|
|
+ break;
|
|
|
|
+ case DESC92_RATE12M:
|
|
|
|
+ rate_idx = 2;
|
|
|
|
+ break;
|
|
|
|
+ case DESC92_RATE18M:
|
|
|
|
+ rate_idx = 3;
|
|
|
|
+ break;
|
|
|
|
+ case DESC92_RATE24M:
|
|
|
|
+ rate_idx = 4;
|
|
|
|
+ break;
|
|
|
|
+ case DESC92_RATE36M:
|
|
|
|
+ rate_idx = 5;
|
|
|
|
+ break;
|
|
|
|
+ case DESC92_RATE48M:
|
|
|
|
+ rate_idx = 6;
|
|
|
|
+ break;
|
|
|
|
+ case DESC92_RATE54M:
|
|
|
|
+ rate_idx = 7;
|
|
|
|
+ break;
|
|
|
|
+ default:
|
|
|
|
+ rate_idx = 0;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ } else {
|
|
|
|
+
|
|
|
|
+ switch (desc_rate) {
|
|
|
|
+ case DESC92_RATEMCS0:
|
|
|
|
+ rate_idx = 0;
|
|
|
|
+ break;
|
|
|
|
+ case DESC92_RATEMCS1:
|
|
|
|
+ rate_idx = 1;
|
|
|
|
+ break;
|
|
|
|
+ case DESC92_RATEMCS2:
|
|
|
|
+ rate_idx = 2;
|
|
|
|
+ break;
|
|
|
|
+ case DESC92_RATEMCS3:
|
|
|
|
+ rate_idx = 3;
|
|
|
|
+ break;
|
|
|
|
+ case DESC92_RATEMCS4:
|
|
|
|
+ rate_idx = 4;
|
|
|
|
+ break;
|
|
|
|
+ case DESC92_RATEMCS5:
|
|
|
|
+ rate_idx = 5;
|
|
|
|
+ break;
|
|
|
|
+ case DESC92_RATEMCS6:
|
|
|
|
+ rate_idx = 6;
|
|
|
|
+ break;
|
|
|
|
+ case DESC92_RATEMCS7:
|
|
|
|
+ rate_idx = 7;
|
|
|
|
+ break;
|
|
|
|
+ case DESC92_RATEMCS8:
|
|
|
|
+ rate_idx = 8;
|
|
|
|
+ break;
|
|
|
|
+ case DESC92_RATEMCS9:
|
|
|
|
+ rate_idx = 9;
|
|
|
|
+ break;
|
|
|
|
+ case DESC92_RATEMCS10:
|
|
|
|
+ rate_idx = 10;
|
|
|
|
+ break;
|
|
|
|
+ case DESC92_RATEMCS11:
|
|
|
|
+ rate_idx = 11;
|
|
|
|
+ break;
|
|
|
|
+ case DESC92_RATEMCS12:
|
|
|
|
+ rate_idx = 12;
|
|
|
|
+ break;
|
|
|
|
+ case DESC92_RATEMCS13:
|
|
|
|
+ rate_idx = 13;
|
|
|
|
+ break;
|
|
|
|
+ case DESC92_RATEMCS14:
|
|
|
|
+ rate_idx = 14;
|
|
|
|
+ break;
|
|
|
|
+ case DESC92_RATEMCS15:
|
|
|
|
+ rate_idx = 15;
|
|
|
|
+ break;
|
|
|
|
+ default:
|
|
|
|
+ rate_idx = 0;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return rate_idx;
|
|
|
|
+}
|
|
|
|
+EXPORT_SYMBOL(rtlwifi_rate_mapping);
|
|
|
|
+
|
|
void rtl_get_tcb_desc(struct ieee80211_hw *hw,
|
|
void rtl_get_tcb_desc(struct ieee80211_hw *hw,
|
|
struct ieee80211_tx_info *info,
|
|
struct ieee80211_tx_info *info,
|
|
struct ieee80211_sta *sta,
|
|
struct ieee80211_sta *sta,
|