aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohannes Berg <johannes@sipsolutions.net>2007-09-14 11:10:25 -0400
committerDavid S. Miller <davem@sunset.davemloft.net>2007-10-10 19:49:27 -0400
commitb708e610622cff07f4374a2b4410884f964b8489 (patch)
tree77aee49d680178df819437a35ba23cce9ad14e18
parentd4e46a3d9869563c6210b01bb651c40cbe65da80 (diff)
[MAC80211]: remove turbo modes
This patch removes all mention of the atheros turbo modes that can't possibly work properly anyway since in some places we don't check for them when we should. I have no idea what the iwlwifi drivers were doing with these but it can't possibly have been correct. Cc: Zhu Yi <yi.zhu@intel.com> Signed-off-by: Johannes Berg <johannes@sipsolutions.net> Acked-by: Michael Wu <flamingice@sourmilk.net> Signed-off-by: John W. Linville <linville@tuxdriver.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-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 */