aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrian Chadd <adrian@FreeBSD.org>2024-12-15 22:58:13 +0000
committerAdrian Chadd <adrian@FreeBSD.org>2024-12-31 19:13:26 +0000
commit06b7335701fac54d752445e7d2b2c15c301f90dc (patch)
tree662af181b61cc9359d7d57657c2754d81100d231
parent307f9c351588fcfe5a170c61754a5b1394b7dc0a (diff)
rtwn: add rtwn_ctl_vhtrate(), some cleanups
* remove the hard-coded ridx values in rate2ridx(), use the RIDX defines for CCK/OFDM rates * Add a placeholder rtwn_ctl_vhtrate() which returns the dot11rate control rate to use for the given VHT rate index. Since net80211 currently doesn't have any VHT PHY tables, there's no mapping for us to leverage so just return OFDM 12M for now. * Use the new macro to convert rate index to MCS rate * Add a printf() in rate2ridx if it's passed a HT/VHT rate. Differential Revision: https://reviews.freebsd.org/D48098 Reviewed by: bz
-rw-r--r--sys/dev/rtwn/if_rtwn_ridx.h45
1 files changed, 30 insertions, 15 deletions
diff --git a/sys/dev/rtwn/if_rtwn_ridx.h b/sys/dev/rtwn/if_rtwn_ridx.h
index 6193f9ee2cad..0a1ea35303f1 100644
--- a/sys/dev/rtwn/if_rtwn_ridx.h
+++ b/sys/dev/rtwn/if_rtwn_ridx.h
@@ -82,20 +82,22 @@ rate2ridx(uint8_t rate)
}
switch (rate) {
/* 11g */
- case 12: return 4;
- case 18: return 5;
- case 24: return 6;
- case 36: return 7;
- case 48: return 8;
- case 72: return 9;
- case 96: return 10;
- case 108: return 11;
+ case 12: return (RTWN_RIDX_OFDM6);
+ case 18: return (RTWN_RIDX_OFDM9);
+ case 24: return (RTWN_RIDX_OFDM12);
+ case 36: return (RTWN_RIDX_OFDM18);
+ case 48: return (RTWN_RIDX_OFDM24);
+ case 72: return (RTWN_RIDX_OFDM36);
+ case 96: return (RTWN_RIDX_OFDM48);
+ case 108: return (RTWN_RIDX_OFDM54);
/* 11b */
- case 2: return 0;
- case 4: return 1;
- case 11: return 2;
- case 22: return 3;
- default: return RTWN_RIDX_UNKNOWN;
+ case 2: return (RTWN_RIDX_CCK1);
+ case 4: return (RTWN_RIDX_CCK2);
+ case 11: return (RTWN_RIDX_CCK55);
+ case 22: return (RTWN_RIDX_CCK11);
+ default:
+ printf("%s: called; unknown rate (%d)\n", __func__, rate);
+ return (RTWN_RIDX_UNKNOWN);
}
}
@@ -108,10 +110,23 @@ rtwn_ctl_mcsrate(const struct ieee80211_rate_table *rt, uint8_t ridx)
/* Check if we are using MCS rate. */
KASSERT(RTWN_RATE_IS_HT(ridx), ("bad mcs rate index %d", ridx));
- rate = (ridx - RTWN_RIDX_HT_MCS(0)) | IEEE80211_RATE_MCS;
+ rate = RTWN_RIDX_TO_MCS(ridx) | IEEE80211_RATE_MCS;
cix = rt->info[rt->rateCodeToIndex[rate]].ctlRateIndex;
KASSERT(cix != (uint8_t)-1, ("rate %d (%d) has no info", rate, ridx));
- return rt->info[cix].dot11Rate;
+ return (rt->info[cix].dot11Rate);
+}
+
+/* VHT version of rtwn_ctl_mcsrate */
+/* XXX TODO: also should move this to net80211 */
+static __inline__ uint8_t
+rtwn_ctl_vhtrate(const struct ieee80211_rate_table *rt, uint8_t ridx)
+{
+
+ /* Check if we are using VHT MCS rate. */
+ KASSERT(RTWN_RATE_IS_VHT(ridx), ("bad mcs rate index %d", ridx));
+
+ /* TODO: there's no VHT tables, so for now just stick to OFDM12 */
+ return (24);
}
#endif /* IF_RTWN_RIDX_H */