aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/net/mac80211.h7
-rw-r--r--net/mac80211/debugfs.c2
-rw-r--r--net/mac80211/ieee80211.c6
-rw-r--r--net/mac80211/ieee80211_common.h2
-rw-r--r--net/mac80211/ieee80211_ioctl.c63
-rw-r--r--net/mac80211/ieee80211_sta.c19
-rw-r--r--net/mac80211/regdomain.c6
-rw-r--r--net/mac80211/rx.c2
-rw-r--r--net/mac80211/tx.c2
-rw-r--r--net/mac80211/util.c11
10 files changed, 59 insertions, 61 deletions
diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index ec8c7393956b..fcb7e3f9c669 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -73,14 +73,13 @@ struct ieee80211_channel {
73#define IEEE80211_RATE_SUPPORTED 0x00000010 73#define IEEE80211_RATE_SUPPORTED 0x00000010
74#define IEEE80211_RATE_OFDM 0x00000020 74#define IEEE80211_RATE_OFDM 0x00000020
75#define IEEE80211_RATE_CCK 0x00000040 75#define IEEE80211_RATE_CCK 0x00000040
76#define IEEE80211_RATE_TURBO 0x00000080
77#define IEEE80211_RATE_MANDATORY 0x00000100 76#define IEEE80211_RATE_MANDATORY 0x00000100
78 77
79#define IEEE80211_RATE_CCK_2 (IEEE80211_RATE_CCK | IEEE80211_RATE_PREAMBLE2) 78#define IEEE80211_RATE_CCK_2 (IEEE80211_RATE_CCK | IEEE80211_RATE_PREAMBLE2)
80#define IEEE80211_RATE_MODULATION(f) \ 79#define IEEE80211_RATE_MODULATION(f) \
81 (f & (IEEE80211_RATE_CCK | IEEE80211_RATE_OFDM)) 80 (f & (IEEE80211_RATE_CCK | IEEE80211_RATE_OFDM))
82 81
83/* Low-level driver should set PREAMBLE2, OFDM, CCK, and TURBO flags. 82/* Low-level driver should set PREAMBLE2, OFDM and CCK flags.
84 * BASIC, SUPPORTED, ERP, and MANDATORY flags are set in 80211.o based on the 83 * BASIC, SUPPORTED, ERP, and MANDATORY flags are set in 80211.o based on the
85 * configuration. */ 84 * configuration. */
86struct ieee80211_rate { 85struct ieee80211_rate {
@@ -101,12 +100,10 @@ struct ieee80211_rate {
101 100
102/* 802.11g is backwards-compatible with 802.11b, so a wlan card can 101/* 802.11g is backwards-compatible with 802.11b, so a wlan card can
103 * actually be both in 11b and 11g modes at the same time. */ 102 * actually be both in 11b and 11g modes at the same time. */
104enum { 103enum ieee80211_phymode {
105 MODE_IEEE80211A, /* IEEE 802.11a */ 104 MODE_IEEE80211A, /* IEEE 802.11a */
106 MODE_IEEE80211B, /* IEEE 802.11b only */ 105 MODE_IEEE80211B, /* IEEE 802.11b only */
107 MODE_ATHEROS_TURBO, /* Atheros Turbo mode (2x.11a at 5 GHz) */
108 MODE_IEEE80211G, /* IEEE 802.11g (and 802.11b compatibility) */ 106 MODE_IEEE80211G, /* IEEE 802.11g (and 802.11b compatibility) */
109 MODE_ATHEROS_TURBOG, /* Atheros Turbo mode (2x.11g at 2.4 GHz) */
110 107
111 /* keep last */ 108 /* keep last */
112 NUM_IEEE80211_MODES 109 NUM_IEEE80211_MODES
diff --git a/net/mac80211/debugfs.c b/net/mac80211/debugfs.c
index dc5ed1a8bf62..12db9adc0361 100644
--- a/net/mac80211/debugfs.c
+++ b/net/mac80211/debugfs.c
@@ -28,8 +28,6 @@ static const char *ieee80211_mode_str(int mode)
28 return "IEEE 802.11b"; 28 return "IEEE 802.11b";
29 case MODE_IEEE80211G: 29 case MODE_IEEE80211G:
30 return "IEEE 802.11g"; 30 return "IEEE 802.11g";
31 case MODE_ATHEROS_TURBO:
32 return "Atheros Turbo (5 GHz)";
33 default: 31 default:
34 return "UNKNOWN"; 32 return "UNKNOWN";
35 } 33 }
diff --git a/net/mac80211/ieee80211.c b/net/mac80211/ieee80211.c
index 506cfa06b184..0e8a70f408e2 100644
--- a/net/mac80211/ieee80211.c
+++ b/net/mac80211/ieee80211.c
@@ -118,10 +118,6 @@ ieee80211_fill_frame_info(struct ieee80211_local *local,
118 case MODE_IEEE80211G: 118 case MODE_IEEE80211G:
119 fi->phytype = htonl(ieee80211_phytype_pbcc_dot11_g); 119 fi->phytype = htonl(ieee80211_phytype_pbcc_dot11_g);
120 break; 120 break;
121 case MODE_ATHEROS_TURBO:
122 fi->phytype =
123 htonl(ieee80211_phytype_dsss_dot11_turbo);
124 break;
125 default: 121 default:
126 fi->phytype = htonl(0xAAAAAAAA); 122 fi->phytype = htonl(0xAAAAAAAA);
127 break; 123 break;
@@ -1225,7 +1221,7 @@ struct ieee80211_hw *ieee80211_alloc_hw(size_t priv_data_len,
1225 local->long_retry_limit = 4; 1221 local->long_retry_limit = 4;
1226 local->hw.conf.radio_enabled = 1; 1222 local->hw.conf.radio_enabled = 1;
1227 1223
1228 local->enabled_modes = (unsigned int) -1; 1224 local->enabled_modes = ~0;
1229 1225
1230 INIT_LIST_HEAD(&local->modes_list); 1226 INIT_LIST_HEAD(&local->modes_list);
1231 1227
diff --git a/net/mac80211/ieee80211_common.h b/net/mac80211/ieee80211_common.h
index d0bbd00b4617..5b5fb7bcfd72 100644
--- a/net/mac80211/ieee80211_common.h
+++ b/net/mac80211/ieee80211_common.h
@@ -73,8 +73,6 @@ enum ieee80211_phytype {
73 ieee80211_phytype_ofdm_dot11_g = 6, 73 ieee80211_phytype_ofdm_dot11_g = 6,
74 ieee80211_phytype_pbcc_dot11_g = 7, 74 ieee80211_phytype_pbcc_dot11_g = 7,
75 ieee80211_phytype_ofdm_dot11_a = 8, 75 ieee80211_phytype_ofdm_dot11_a = 8,
76 ieee80211_phytype_dsss_dot11_turbog = 255,
77 ieee80211_phytype_dsss_dot11_turbo = 256,
78}; 76};
79 77
80enum ieee80211_ssi_type { 78enum ieee80211_ssi_type {
diff --git a/net/mac80211/ieee80211_ioctl.c b/net/mac80211/ieee80211_ioctl.c
index 10ec05624a67..e1c4502b26bf 100644
--- a/net/mac80211/ieee80211_ioctl.c
+++ b/net/mac80211/ieee80211_ioctl.c
@@ -26,6 +26,41 @@
26#include "wpa.h" 26#include "wpa.h"
27#include "aes_ccm.h" 27#include "aes_ccm.h"
28 28
29
30/*
31 * Wow. This ioctl interface is such crap, it's tied
32 * to internal definitions. I hope it dies soon.
33 */
34static int mode_to_hostapd_mode(enum ieee80211_phymode mode)
35{
36 switch (mode) {
37 case MODE_IEEE80211A:
38 return 0;
39 case MODE_IEEE80211B:
40 return 1;
41 case MODE_IEEE80211G:
42 return 3;
43 case NUM_IEEE80211_MODES:
44 WARN_ON(1);
45 break;
46 }
47 WARN_ON(1);
48 return -1;
49}
50
51static enum ieee80211_phymode hostapd_mode_to_mode(int hostapd_mode)
52{
53 switch (hostapd_mode) {
54 case 0:
55 return MODE_IEEE80211A;
56 case 1:
57 return MODE_IEEE80211B;
58 case 3:
59 return MODE_IEEE80211G;
60 }
61 return NUM_IEEE80211_MODES;
62}
63
29static int ieee80211_set_encryption(struct net_device *dev, u8 *sta_addr, 64static int ieee80211_set_encryption(struct net_device *dev, u8 *sta_addr,
30 int idx, int alg, int set_tx_key, 65 int idx, int alg, int set_tx_key,
31 const u8 *_key, size_t key_len) 66 const u8 *_key, size_t key_len)
@@ -141,9 +176,6 @@ static int ieee80211_ioctl_giwname(struct net_device *dev,
141 case MODE_IEEE80211G: 176 case MODE_IEEE80211G:
142 strcpy(name, "IEEE 802.11g"); 177 strcpy(name, "IEEE 802.11g");
143 break; 178 break;
144 case MODE_ATHEROS_TURBO:
145 strcpy(name, "5GHz Turbo");
146 break;
147 default: 179 default:
148 strcpy(name, "IEEE 802.11"); 180 strcpy(name, "IEEE 802.11");
149 break; 181 break;
@@ -594,9 +626,6 @@ static int ieee80211_ioctl_siwrate(struct net_device *dev,
594 struct ieee80211_rate *rates = &mode->rates[i]; 626 struct ieee80211_rate *rates = &mode->rates[i];
595 int this_rate = rates->rate; 627 int this_rate = rates->rate;
596 628
597 if (mode->mode == MODE_ATHEROS_TURBO ||
598 mode->mode == MODE_ATHEROS_TURBOG)
599 this_rate *= 2;
600 if (target_rate == this_rate) { 629 if (target_rate == this_rate) {
601 sdata->bss->max_ratectrl_rateidx = i; 630 sdata->bss->max_ratectrl_rateidx = i;
602 if (rate->fixed) 631 if (rate->fixed)
@@ -786,6 +815,7 @@ static int ieee80211_ioctl_prism2_param(struct net_device *dev,
786 int param = *i; 815 int param = *i;
787 int value = *(i + 1); 816 int value = *(i + 1);
788 int ret = 0; 817 int ret = 0;
818 int mode;
789 819
790 if (!capable(CAP_NET_ADMIN)) 820 if (!capable(CAP_NET_ADMIN))
791 return -EPERM; 821 return -EPERM;
@@ -840,7 +870,7 @@ static int ieee80211_ioctl_prism2_param(struct net_device *dev,
840 break; 870 break;
841 871
842 case PRISM2_PARAM_NEXT_MODE: 872 case PRISM2_PARAM_NEXT_MODE:
843 local->next_mode = value; 873 local->next_mode = hostapd_mode_to_mode(value);
844 break; 874 break;
845 875
846 case PRISM2_PARAM_KEY_TX_RX_THRESHOLD: 876 case PRISM2_PARAM_KEY_TX_RX_THRESHOLD:
@@ -868,7 +898,15 @@ static int ieee80211_ioctl_prism2_param(struct net_device *dev,
868 break; 898 break;
869 899
870 case PRISM2_PARAM_HW_MODES: 900 case PRISM2_PARAM_HW_MODES:
871 local->enabled_modes = value; 901 mode = 1;
902 local->enabled_modes = 0;
903 while (value) {
904 if (value & 1)
905 local->enabled_modes |=
906 hostapd_mode_to_mode(mode);
907 mode <<= 1;
908 value >>= 1;
909 }
872 break; 910 break;
873 911
874 case PRISM2_PARAM_CREATE_IBSS: 912 case PRISM2_PARAM_CREATE_IBSS:
@@ -909,6 +947,7 @@ static int ieee80211_ioctl_get_prism2_param(struct net_device *dev,
909 struct ieee80211_sub_if_data *sdata; 947 struct ieee80211_sub_if_data *sdata;
910 int *param = (int *) extra; 948 int *param = (int *) extra;
911 int ret = 0; 949 int ret = 0;
950 int mode;
912 951
913 sdata = IEEE80211_DEV_TO_SUB_IF(dev); 952 sdata = IEEE80211_DEV_TO_SUB_IF(dev);
914 953
@@ -946,7 +985,13 @@ static int ieee80211_ioctl_get_prism2_param(struct net_device *dev,
946 break; 985 break;
947 986
948 case PRISM2_PARAM_HW_MODES: 987 case PRISM2_PARAM_HW_MODES:
949 *param = local->enabled_modes; 988 mode = 0;
989 *param = 0;
990 while (mode < NUM_IEEE80211_MODES) {
991 if (local->enabled_modes & (1<<mode))
992 *param |= mode_to_hostapd_mode(1<<mode);
993 mode++;
994 }
950 break; 995 break;
951 996
952 case PRISM2_PARAM_CREATE_IBSS: 997 case PRISM2_PARAM_CREATE_IBSS:
diff --git a/net/mac80211/ieee80211_sta.c b/net/mac80211/ieee80211_sta.c
index 1b4ebe81191c..8fdbd38e02c4 100644
--- a/net/mac80211/ieee80211_sta.c
+++ b/net/mac80211/ieee80211_sta.c
@@ -618,8 +618,6 @@ static void ieee80211_send_assoc(struct net_device *dev,
618 *pos++ = len; 618 *pos++ = len;
619 for (i = 0; i < len; i++) { 619 for (i = 0; i < len; i++) {
620 int rate = mode->rates[i].rate; 620 int rate = mode->rates[i].rate;
621 if (mode->mode == MODE_ATHEROS_TURBO)
622 rate /= 2;
623 *pos++ = (u8) (rate / 5); 621 *pos++ = (u8) (rate / 5);
624 } 622 }
625 623
@@ -629,8 +627,6 @@ static void ieee80211_send_assoc(struct net_device *dev,
629 *pos++ = mode->num_rates - len; 627 *pos++ = mode->num_rates - len;
630 for (i = len; i < mode->num_rates; i++) { 628 for (i = len; i < mode->num_rates; i++) {
631 int rate = mode->rates[i].rate; 629 int rate = mode->rates[i].rate;
632 if (mode->mode == MODE_ATHEROS_TURBO)
633 rate /= 2;
634 *pos++ = (u8) (rate / 5); 630 *pos++ = (u8) (rate / 5);
635 } 631 }
636 } 632 }
@@ -889,10 +885,7 @@ static void ieee80211_send_probe_req(struct net_device *dev, u8 *dst,
889 pos = skb_put(skb, 1); 885 pos = skb_put(skb, 1);
890 supp_rates[1]++; 886 supp_rates[1]++;
891 } 887 }
892 if (mode->mode == MODE_ATHEROS_TURBO) 888 *pos = rate->rate / 5;
893 *pos = rate->rate / 10;
894 else
895 *pos = rate->rate / 5;
896 } 889 }
897 890
898 ieee80211_sta_tx(dev, skb, 0); 891 ieee80211_sta_tx(dev, skb, 0);
@@ -1285,16 +1278,12 @@ static void ieee80211_rx_mgmt_assoc_resp(struct net_device *dev,
1285 mode = local->oper_hw_mode; 1278 mode = local->oper_hw_mode;
1286 for (i = 0; i < elems.supp_rates_len; i++) { 1279 for (i = 0; i < elems.supp_rates_len; i++) {
1287 int rate = (elems.supp_rates[i] & 0x7f) * 5; 1280 int rate = (elems.supp_rates[i] & 0x7f) * 5;
1288 if (mode->mode == MODE_ATHEROS_TURBO)
1289 rate *= 2;
1290 for (j = 0; j < mode->num_rates; j++) 1281 for (j = 0; j < mode->num_rates; j++)
1291 if (mode->rates[j].rate == rate) 1282 if (mode->rates[j].rate == rate)
1292 rates |= BIT(j); 1283 rates |= BIT(j);
1293 } 1284 }
1294 for (i = 0; i < elems.ext_supp_rates_len; i++) { 1285 for (i = 0; i < elems.ext_supp_rates_len; i++) {
1295 int rate = (elems.ext_supp_rates[i] & 0x7f) * 5; 1286 int rate = (elems.ext_supp_rates[i] & 0x7f) * 5;
1296 if (mode->mode == MODE_ATHEROS_TURBO)
1297 rate *= 2;
1298 for (j = 0; j < mode->num_rates; j++) 1287 for (j = 0; j < mode->num_rates; j++)
1299 if (mode->rates[j].rate == rate) 1288 if (mode->rates[j].rate == rate)
1300 rates |= BIT(j); 1289 rates |= BIT(j);
@@ -1514,8 +1503,6 @@ static void ieee80211_rx_bss_info(struct net_device *dev,
1514 rate = elems.ext_supp_rates 1503 rate = elems.ext_supp_rates
1515 [i - elems.supp_rates_len]; 1504 [i - elems.supp_rates_len];
1516 own_rate = 5 * (rate & 0x7f); 1505 own_rate = 5 * (rate & 0x7f);
1517 if (mode->mode == MODE_ATHEROS_TURBO)
1518 own_rate *= 2;
1519 for (j = 0; j < num_rates; j++) 1506 for (j = 0; j < num_rates; j++)
1520 if (rates[j].rate == own_rate) 1507 if (rates[j].rate == own_rate)
1521 supp_rates |= BIT(j); 1508 supp_rates |= BIT(j);
@@ -2344,8 +2331,6 @@ static int ieee80211_sta_join_ibss(struct net_device *dev,
2344 mode = local->oper_hw_mode; 2331 mode = local->oper_hw_mode;
2345 for (i = 0; i < bss->supp_rates_len; i++) { 2332 for (i = 0; i < bss->supp_rates_len; i++) {
2346 int bitrate = (bss->supp_rates[i] & 0x7f) * 5; 2333 int bitrate = (bss->supp_rates[i] & 0x7f) * 5;
2347 if (mode->mode == MODE_ATHEROS_TURBO)
2348 bitrate *= 2;
2349 for (j = 0; j < mode->num_rates; j++) 2334 for (j = 0; j < mode->num_rates; j++)
2350 if (mode->rates[j].rate == bitrate) 2335 if (mode->rates[j].rate == bitrate)
2351 rates |= BIT(j); 2336 rates |= BIT(j);
@@ -2418,8 +2403,6 @@ static int ieee80211_sta_create_ibss(struct net_device *dev,
2418 pos = bss->supp_rates; 2403 pos = bss->supp_rates;
2419 for (i = 0; i < mode->num_rates; i++) { 2404 for (i = 0; i < mode->num_rates; i++) {
2420 int rate = mode->rates[i].rate; 2405 int rate = mode->rates[i].rate;
2421 if (mode->mode == MODE_ATHEROS_TURBO)
2422 rate /= 2;
2423 *pos++ = (u8) (rate / 5); 2406 *pos++ = (u8) (rate / 5);
2424 } 2407 }
2425 2408
diff --git a/net/mac80211/regdomain.c b/net/mac80211/regdomain.c
index b697a2afbb4b..f42678fa62d1 100644
--- a/net/mac80211/regdomain.c
+++ b/net/mac80211/regdomain.c
@@ -82,12 +82,6 @@ static void ieee80211_unmask_channel(int mode, struct ieee80211_channel *chan)
82 82
83 chan->flag = 0; 83 chan->flag = 0;
84 84
85 if (ieee80211_regdom == 64 &&
86 (mode == MODE_ATHEROS_TURBO || mode == MODE_ATHEROS_TURBOG)) {
87 /* Do not allow Turbo modes in Japan. */
88 return;
89 }
90
91 for (i = 0; channel_range[i].start_freq; i++) { 85 for (i = 0; channel_range[i].start_freq; i++) {
92 const struct ieee80211_channel_range *r = &channel_range[i]; 86 const struct ieee80211_channel_range *r = &channel_range[i];
93 if (r->start_freq <= chan->freq && r->end_freq >= chan->freq) { 87 if (r->start_freq <= chan->freq && r->end_freq >= chan->freq) {
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
index 91b7886bf797..8c6e29089216 100644
--- a/net/mac80211/rx.c
+++ b/net/mac80211/rx.c
@@ -94,8 +94,6 @@ ieee80211_rx_h_load_stats(struct ieee80211_txrx_data *rx)
94 * 1 usec = 1/8 * (1080 / 10) = 13.5 */ 94 * 1 usec = 1/8 * (1080 / 10) = 13.5 */
95 95
96 if (mode->mode == MODE_IEEE80211A || 96 if (mode->mode == MODE_IEEE80211A ||
97 mode->mode == MODE_ATHEROS_TURBO ||
98 mode->mode == MODE_ATHEROS_TURBOG ||
99 (mode->mode == MODE_IEEE80211G && 97 (mode->mode == MODE_IEEE80211G &&
100 rate->flags & IEEE80211_RATE_ERP)) 98 rate->flags & IEEE80211_RATE_ERP))
101 hdrtime = CHAN_UTIL_HDR_SHORT; 99 hdrtime = CHAN_UTIL_HDR_SHORT;
diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
index b29dc70b2f01..08d221674bc0 100644
--- a/net/mac80211/tx.c
+++ b/net/mac80211/tx.c
@@ -747,8 +747,6 @@ ieee80211_tx_h_load_stats(struct ieee80211_txrx_data *tx)
747 * 1 usec = 1/8 * (1080 / 10) = 13.5 */ 747 * 1 usec = 1/8 * (1080 / 10) = 13.5 */
748 748
749 if (mode->mode == MODE_IEEE80211A || 749 if (mode->mode == MODE_IEEE80211A ||
750 mode->mode == MODE_ATHEROS_TURBO ||
751 mode->mode == MODE_ATHEROS_TURBOG ||
752 (mode->mode == MODE_IEEE80211G && 750 (mode->mode == MODE_IEEE80211G &&
753 tx->u.tx.rate->flags & IEEE80211_RATE_ERP)) 751 tx->u.tx.rate->flags & IEEE80211_RATE_ERP))
754 hdrtime = CHAN_UTIL_HDR_SHORT; 752 hdrtime = CHAN_UTIL_HDR_SHORT;
diff --git a/net/mac80211/util.c b/net/mac80211/util.c
index c970996ba6f9..29c0a0e1f52c 100644
--- a/net/mac80211/util.c
+++ b/net/mac80211/util.c
@@ -93,11 +93,6 @@ void ieee80211_prepare_rates(struct ieee80211_local *local,
93 if (rate->rate == 10 || rate->rate == 20) 93 if (rate->rate == 10 || rate->rate == 20)
94 rate->flags |= IEEE80211_RATE_BASIC; 94 rate->flags |= IEEE80211_RATE_BASIC;
95 break; 95 break;
96 case MODE_ATHEROS_TURBO:
97 if (rate->rate == 120 || rate->rate == 240 ||
98 rate->rate == 480)
99 rate->flags |= IEEE80211_RATE_BASIC;
100 break;
101 case MODE_IEEE80211G: 96 case MODE_IEEE80211G:
102 if (rate->rate == 10 || rate->rate == 20 || 97 if (rate->rate == 10 || rate->rate == 20 ||
103 rate->rate == 55 || rate->rate == 110) 98 rate->rate == 55 || rate->rate == 110)
@@ -116,8 +111,6 @@ void ieee80211_prepare_rates(struct ieee80211_local *local,
116 if (rate->rate == 10) 111 if (rate->rate == 10)
117 rate->flags |= IEEE80211_RATE_MANDATORY; 112 rate->flags |= IEEE80211_RATE_MANDATORY;
118 break; 113 break;
119 case MODE_ATHEROS_TURBO:
120 break;
121 case MODE_IEEE80211G: 114 case MODE_IEEE80211G:
122 if (rate->rate == 10 || rate->rate == 20 || 115 if (rate->rate == 10 || rate->rate == 20 ||
123 rate->rate == 55 || rate->rate == 110 || 116 rate->rate == 55 || rate->rate == 110 ||
@@ -273,8 +266,7 @@ int ieee80211_frame_duration(struct ieee80211_local *local, size_t len,
273 * DIV_ROUND_UP() operations. 266 * DIV_ROUND_UP() operations.
274 */ 267 */
275 268
276 if (local->hw.conf.phymode == MODE_IEEE80211A || erp || 269 if (local->hw.conf.phymode == MODE_IEEE80211A || erp) {
277 local->hw.conf.phymode == MODE_ATHEROS_TURBO) {
278 /* 270 /*
279 * OFDM: 271 * OFDM:
280 * 272 *
@@ -288,7 +280,6 @@ int ieee80211_frame_duration(struct ieee80211_local *local, size_t len,
288 * 802.11g - 19.8.4: aSIFSTime = 10 usec + 280 * 802.11g - 19.8.4: aSIFSTime = 10 usec +
289 * signal ext = 6 usec 281 * signal ext = 6 usec
290 */ 282 */
291 /* FIX: Atheros Turbo may have different (shorter) duration? */
292 dur = 16; /* SIFS + signal ext */ 283 dur = 16; /* SIFS + signal ext */
293 dur += 16; /* 17.3.2.3: T_PREAMBLE = 16 usec */ 284 dur += 16; /* 17.3.2.3: T_PREAMBLE = 16 usec */
294 dur += 4; /* 17.3.2.3: T_SIGNAL = 4 usec */ 285 dur += 4; /* 17.3.2.3: T_SIGNAL = 4 usec */