diff options
author | Adrian Chadd <adrian@FreeBSD.org> | 2024-12-15 22:58:13 +0000 |
---|---|---|
committer | Adrian Chadd <adrian@FreeBSD.org> | 2024-12-31 19:13:26 +0000 |
commit | 06b7335701fac54d752445e7d2b2c15c301f90dc (patch) | |
tree | 662af181b61cc9359d7d57657c2754d81100d231 | |
parent | 307f9c351588fcfe5a170c61754a5b1394b7dc0a (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.h | 45 |
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 */ |