aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac80211/ieee80211_ioctl.c
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 /net/mac80211/ieee80211_ioctl.c
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>
Diffstat (limited to 'net/mac80211/ieee80211_ioctl.c')
-rw-r--r--net/mac80211/ieee80211_ioctl.c63
1 files changed, 54 insertions, 9 deletions
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: