summaryrefslogtreecommitdiffstats
path: root/sys/net80211
diff options
context:
space:
mode:
authorbschmidt <bschmidt@FreeBSD.org>2011-03-10 18:17:24 +0000
committerbschmidt <bschmidt@FreeBSD.org>2011-03-10 18:17:24 +0000
commit3d57f75785c9737faa3e0b963cbfa402669af15f (patch)
tree95e2c376df7f31f54613f9cafcd2831c48637b1d /sys/net80211
parentad5db5c41748a914a8a4a241c9d8e52755343e37 (diff)
downloadFreeBSD-src-3d57f75785c9737faa3e0b963cbfa402669af15f.zip
FreeBSD-src-3d57f75785c9737faa3e0b963cbfa402669af15f.tar.gz
Complete the MCS rate table based on the final 802.11n std. While here
adjust the IEEE80211_HTRATE_MAXSIZE constant, only MCS0 - 76 are valid the other bits in the mcsset IE (77 - 127) are either reserved or used for TX parameters.
Diffstat (limited to 'sys/net80211')
-rw-r--r--sys/net80211/_ieee80211.h2
-rw-r--r--sys/net80211/ieee80211.c61
-rw-r--r--sys/net80211/ieee80211_ht.c96
-rw-r--r--sys/net80211/ieee80211_ht.h2
4 files changed, 141 insertions, 20 deletions
diff --git a/sys/net80211/_ieee80211.h b/sys/net80211/_ieee80211.h
index c488c00..d700358 100644
--- a/sys/net80211/_ieee80211.h
+++ b/sys/net80211/_ieee80211.h
@@ -335,7 +335,7 @@ struct ieee80211_rateset {
* the structure such that it can be used interchangeably
* with an ieee80211_rateset (modulo structure size).
*/
-#define IEEE80211_HTRATE_MAXSIZE 127
+#define IEEE80211_HTRATE_MAXSIZE 77
struct ieee80211_htrateset {
uint8_t rs_nrates;
diff --git a/sys/net80211/ieee80211.c b/sys/net80211/ieee80211.c
index 409cf1d..306a4b5 100644
--- a/sys/net80211/ieee80211.c
+++ b/sys/net80211/ieee80211.c
@@ -1513,6 +1513,67 @@ ieee80211_rate2media(struct ieee80211com *ic, int rate, enum ieee80211_phymode m
{ 13, IFM_IEEE80211_MCS },
{ 14, IFM_IEEE80211_MCS },
{ 15, IFM_IEEE80211_MCS },
+ { 16, IFM_IEEE80211_MCS },
+ { 17, IFM_IEEE80211_MCS },
+ { 18, IFM_IEEE80211_MCS },
+ { 19, IFM_IEEE80211_MCS },
+ { 20, IFM_IEEE80211_MCS },
+ { 21, IFM_IEEE80211_MCS },
+ { 22, IFM_IEEE80211_MCS },
+ { 23, IFM_IEEE80211_MCS },
+ { 24, IFM_IEEE80211_MCS },
+ { 25, IFM_IEEE80211_MCS },
+ { 26, IFM_IEEE80211_MCS },
+ { 27, IFM_IEEE80211_MCS },
+ { 28, IFM_IEEE80211_MCS },
+ { 29, IFM_IEEE80211_MCS },
+ { 30, IFM_IEEE80211_MCS },
+ { 31, IFM_IEEE80211_MCS },
+ { 32, IFM_IEEE80211_MCS },
+ { 33, IFM_IEEE80211_MCS },
+ { 34, IFM_IEEE80211_MCS },
+ { 35, IFM_IEEE80211_MCS },
+ { 36, IFM_IEEE80211_MCS },
+ { 37, IFM_IEEE80211_MCS },
+ { 38, IFM_IEEE80211_MCS },
+ { 39, IFM_IEEE80211_MCS },
+ { 40, IFM_IEEE80211_MCS },
+ { 41, IFM_IEEE80211_MCS },
+ { 42, IFM_IEEE80211_MCS },
+ { 43, IFM_IEEE80211_MCS },
+ { 44, IFM_IEEE80211_MCS },
+ { 45, IFM_IEEE80211_MCS },
+ { 46, IFM_IEEE80211_MCS },
+ { 47, IFM_IEEE80211_MCS },
+ { 48, IFM_IEEE80211_MCS },
+ { 49, IFM_IEEE80211_MCS },
+ { 50, IFM_IEEE80211_MCS },
+ { 51, IFM_IEEE80211_MCS },
+ { 52, IFM_IEEE80211_MCS },
+ { 53, IFM_IEEE80211_MCS },
+ { 54, IFM_IEEE80211_MCS },
+ { 55, IFM_IEEE80211_MCS },
+ { 56, IFM_IEEE80211_MCS },
+ { 57, IFM_IEEE80211_MCS },
+ { 58, IFM_IEEE80211_MCS },
+ { 59, IFM_IEEE80211_MCS },
+ { 60, IFM_IEEE80211_MCS },
+ { 61, IFM_IEEE80211_MCS },
+ { 62, IFM_IEEE80211_MCS },
+ { 63, IFM_IEEE80211_MCS },
+ { 64, IFM_IEEE80211_MCS },
+ { 65, IFM_IEEE80211_MCS },
+ { 66, IFM_IEEE80211_MCS },
+ { 67, IFM_IEEE80211_MCS },
+ { 68, IFM_IEEE80211_MCS },
+ { 69, IFM_IEEE80211_MCS },
+ { 70, IFM_IEEE80211_MCS },
+ { 71, IFM_IEEE80211_MCS },
+ { 72, IFM_IEEE80211_MCS },
+ { 73, IFM_IEEE80211_MCS },
+ { 74, IFM_IEEE80211_MCS },
+ { 75, IFM_IEEE80211_MCS },
+ { 76, IFM_IEEE80211_MCS },
};
int m;
diff --git a/sys/net80211/ieee80211_ht.c b/sys/net80211/ieee80211_ht.c
index 2d44816..55be801 100644
--- a/sys/net80211/ieee80211_ht.c
+++ b/sys/net80211/ieee80211_ht.c
@@ -54,24 +54,84 @@ __FBSDID("$FreeBSD$");
#define MS(_v, _f) (((_v) & _f) >> _f##_S)
#define SM(_v, _f) (((_v) << _f##_S) & _f)
-const struct ieee80211_mcs_rates ieee80211_htrates[16] = {
- /* 20Mhz SGI 40Mhz SGI */
- { 13, 14, 27, 30 }, /* MCS 0 */
- { 26, 29, 54, 60 }, /* MCS 1 */
- { 39, 43, 81, 90 }, /* MCS 2 */
- { 52, 58, 108, 120 }, /* MCS 3 */
- { 78, 87, 162, 180 }, /* MCS 4 */
- { 104, 116, 216, 240 }, /* MCS 5 */
- { 117, 130, 243, 270 }, /* MCS 6 */
- { 130, 144, 270, 300 }, /* MCS 7 */
- { 26, 29, 54, 60 }, /* MCS 8 */
- { 52, 58, 108, 120 }, /* MCS 9 */
- { 78, 87, 162, 180 }, /* MCS 10 */
- { 104, 116, 216, 240 }, /* MCS 11 */
- { 156, 173, 324, 360 }, /* MCS 12 */
- { 208, 231, 432, 480 }, /* MCS 13 */
- { 234, 260, 486, 540 }, /* MCS 14 */
- { 260, 289, 540, 600 } /* MCS 15 */
+const struct ieee80211_mcs_rates ieee80211_htrates[IEEE80211_HTRATE_MAXSIZE] = {
+ { 13, 14, 27, 30 }, /* MCS 0 */
+ { 26, 29, 54, 60 }, /* MCS 1 */
+ { 39, 43, 81, 90 }, /* MCS 2 */
+ { 52, 58, 108, 120 }, /* MCS 3 */
+ { 78, 87, 162, 180 }, /* MCS 4 */
+ { 104, 116, 216, 240 }, /* MCS 5 */
+ { 117, 130, 243, 270 }, /* MCS 6 */
+ { 130, 144, 270, 300 }, /* MCS 7 */
+ { 26, 29, 54, 60 }, /* MCS 8 */
+ { 52, 58, 108, 120 }, /* MCS 9 */
+ { 78, 87, 162, 180 }, /* MCS 10 */
+ { 104, 116, 216, 240 }, /* MCS 11 */
+ { 156, 173, 324, 360 }, /* MCS 12 */
+ { 208, 231, 432, 480 }, /* MCS 13 */
+ { 234, 260, 486, 540 }, /* MCS 14 */
+ { 260, 289, 540, 600 }, /* MCS 15 */
+ { 39, 43, 81, 90 }, /* MCS 16 */
+ { 78, 87, 162, 180 }, /* MCS 17 */
+ { 117, 130, 243, 270 }, /* MCS 18 */
+ { 156, 173, 324, 360 }, /* MCS 19 */
+ { 234, 260, 486, 540 }, /* MCS 20 */
+ { 312, 347, 648, 720 }, /* MCS 21 */
+ { 351, 390, 729, 810 }, /* MCS 22 */
+ { 390, 433, 810, 900 }, /* MCS 23 */
+ { 52, 58, 108, 120 }, /* MCS 24 */
+ { 104, 116, 216, 240 }, /* MCS 25 */
+ { 156, 173, 324, 360 }, /* MCS 26 */
+ { 208, 231, 432, 480 }, /* MCS 27 */
+ { 312, 347, 648, 720 }, /* MCS 28 */
+ { 416, 462, 864, 960 }, /* MCS 29 */
+ { 468, 520, 972, 1080 }, /* MCS 30 */
+ { 520, 578, 1080, 1200 }, /* MCS 31 */
+ { 0, 0, 12, 13 }, /* MCS 32 */
+ { 78, 87, 162, 180 }, /* MCS 33 */
+ { 104, 116, 216, 240 }, /* MCS 34 */
+ { 130, 144, 270, 300 }, /* MCS 35 */
+ { 117, 130, 243, 270 }, /* MCS 36 */
+ { 156, 173, 324, 360 }, /* MCS 37 */
+ { 195, 217, 405, 450 }, /* MCS 38 */
+ { 104, 116, 216, 240 }, /* MCS 39 */
+ { 130, 144, 270, 300 }, /* MCS 40 */
+ { 130, 144, 270, 300 }, /* MCS 41 */
+ { 156, 173, 324, 360 }, /* MCS 42 */
+ { 182, 202, 378, 420 }, /* MCS 43 */
+ { 182, 202, 378, 420 }, /* MCS 44 */
+ { 208, 231, 432, 480 }, /* MCS 45 */
+ { 156, 173, 324, 360 }, /* MCS 46 */
+ { 195, 217, 405, 450 }, /* MCS 47 */
+ { 195, 217, 405, 450 }, /* MCS 48 */
+ { 234, 260, 486, 540 }, /* MCS 49 */
+ { 273, 303, 567, 630 }, /* MCS 50 */
+ { 273, 303, 567, 630 }, /* MCS 51 */
+ { 312, 347, 648, 720 }, /* MCS 52 */
+ { 130, 144, 270, 300 }, /* MCS 53 */
+ { 156, 173, 324, 360 }, /* MCS 54 */
+ { 182, 202, 378, 420 }, /* MCS 55 */
+ { 156, 173, 324, 360 }, /* MCS 56 */
+ { 182, 202, 378, 420 }, /* MCS 57 */
+ { 208, 231, 432, 480 }, /* MCS 58 */
+ { 234, 260, 486, 540 }, /* MCS 59 */
+ { 208, 231, 432, 480 }, /* MCS 60 */
+ { 234, 260, 486, 540 }, /* MCS 61 */
+ { 260, 289, 540, 600 }, /* MCS 62 */
+ { 260, 289, 540, 600 }, /* MCS 63 */
+ { 286, 318, 594, 660 }, /* MCS 64 */
+ { 195, 217, 405, 450 }, /* MCS 65 */
+ { 234, 260, 486, 540 }, /* MCS 66 */
+ { 273, 303, 567, 630 }, /* MCS 67 */
+ { 234, 260, 486, 540 }, /* MCS 68 */
+ { 273, 303, 567, 630 }, /* MCS 69 */
+ { 312, 347, 648, 720 }, /* MCS 70 */
+ { 351, 390, 729, 810 }, /* MCS 71 */
+ { 312, 347, 648, 720 }, /* MCS 72 */
+ { 351, 390, 729, 810 }, /* MCS 73 */
+ { 390, 433, 810, 900 }, /* MCS 74 */
+ { 390, 433, 810, 900 }, /* MCS 75 */
+ { 429, 477, 891, 990 }, /* MCS 76 */
};
static const struct ieee80211_htrateset ieee80211_rateset_11n =
diff --git a/sys/net80211/ieee80211_ht.h b/sys/net80211/ieee80211_ht.h
index 9cdc1ea..249ddd2 100644
--- a/sys/net80211/ieee80211_ht.h
+++ b/sys/net80211/ieee80211_ht.h
@@ -159,7 +159,7 @@ struct ieee80211_mcs_rates {
uint16_t ht40_rate_800ns;
uint16_t ht40_rate_400ns;
};
-extern const struct ieee80211_mcs_rates ieee80211_htrates[16];
+extern const struct ieee80211_mcs_rates ieee80211_htrates[];
const struct ieee80211_htrateset *ieee80211_get_suphtrates(
struct ieee80211com *, const struct ieee80211_channel *);
OpenPOWER on IntegriCloud