diff options
-rw-r--r-- | drivers/net/wireless/iwlwifi/Makefile | 2 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn-hcmd-check.c | 108 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn.c | 75 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-commands.h | 2 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-dev.h | 5 |
5 files changed, 112 insertions, 80 deletions
diff --git a/drivers/net/wireless/iwlwifi/Makefile b/drivers/net/wireless/iwlwifi/Makefile index 8b45b30e6d5c..0be9e6b66aa0 100644 --- a/drivers/net/wireless/iwlwifi/Makefile +++ b/drivers/net/wireless/iwlwifi/Makefile | |||
@@ -8,7 +8,7 @@ iwlcore-$(CONFIG_IWLWIFI_RFKILL) += iwl-rfkill.o | |||
8 | iwlcore-$(CONFIG_IWLAGN_SPECTRUM_MEASUREMENT) += iwl-spectrum.o | 8 | iwlcore-$(CONFIG_IWLAGN_SPECTRUM_MEASUREMENT) += iwl-spectrum.o |
9 | 9 | ||
10 | obj-$(CONFIG_IWLAGN) += iwlagn.o | 10 | obj-$(CONFIG_IWLAGN) += iwlagn.o |
11 | iwlagn-objs := iwl-agn.o iwl-agn-rs.o | 11 | iwlagn-objs := iwl-agn.o iwl-agn-rs.o iwl-agn-hcmd-check.o |
12 | 12 | ||
13 | iwlagn-$(CONFIG_IWL4965) += iwl-4965.o | 13 | iwlagn-$(CONFIG_IWL4965) += iwl-4965.o |
14 | iwlagn-$(CONFIG_IWL5000) += iwl-5000.o | 14 | iwlagn-$(CONFIG_IWL5000) += iwl-5000.o |
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-hcmd-check.c b/drivers/net/wireless/iwlwifi/iwl-agn-hcmd-check.c new file mode 100644 index 000000000000..c50494a74f67 --- /dev/null +++ b/drivers/net/wireless/iwlwifi/iwl-agn-hcmd-check.c | |||
@@ -0,0 +1,108 @@ | |||
1 | /****************************************************************************** | ||
2 | * | ||
3 | * GPL LICENSE SUMMARY | ||
4 | * | ||
5 | * Copyright(c) 2008 Intel Corporation. All rights reserved. | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of version 2 of the GNU General Public License as | ||
9 | * published by the Free Software Foundation. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, but | ||
12 | * WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
14 | * General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License | ||
17 | * along with this program; if not, write to the Free Software | ||
18 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, | ||
19 | * USA | ||
20 | * | ||
21 | * The full GNU General Public License is included in this distribution | ||
22 | * in the file called LICENSE.GPL. | ||
23 | * | ||
24 | * Contact Information: | ||
25 | * Tomas Winkler <tomas.winkler@intel.com> | ||
26 | * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 | ||
27 | *****************************************************************************/ | ||
28 | |||
29 | #include <linux/kernel.h> | ||
30 | #include <net/mac80211.h> | ||
31 | #include "iwl-dev.h" | ||
32 | #include "iwl-debug.h" | ||
33 | #include "iwl-commands.h" | ||
34 | |||
35 | |||
36 | /** | ||
37 | * iwl_check_rxon_cmd - validate RXON structure is valid | ||
38 | * | ||
39 | * NOTE: This is really only useful during development and can eventually | ||
40 | * be #ifdef'd out once the driver is stable and folks aren't actively | ||
41 | * making changes | ||
42 | */ | ||
43 | int iwl_agn_check_rxon_cmd(struct iwl_rxon_cmd *rxon) | ||
44 | { | ||
45 | int error = 0; | ||
46 | int counter = 1; | ||
47 | |||
48 | if (rxon->flags & RXON_FLG_BAND_24G_MSK) { | ||
49 | error |= le32_to_cpu(rxon->flags & | ||
50 | (RXON_FLG_TGJ_NARROW_BAND_MSK | | ||
51 | RXON_FLG_RADAR_DETECT_MSK)); | ||
52 | if (error) | ||
53 | IWL_WARNING("check 24G fields %d | %d\n", | ||
54 | counter++, error); | ||
55 | } else { | ||
56 | error |= (rxon->flags & RXON_FLG_SHORT_SLOT_MSK) ? | ||
57 | 0 : le32_to_cpu(RXON_FLG_SHORT_SLOT_MSK); | ||
58 | if (error) | ||
59 | IWL_WARNING("check 52 fields %d | %d\n", | ||
60 | counter++, error); | ||
61 | error |= le32_to_cpu(rxon->flags & RXON_FLG_CCK_MSK); | ||
62 | if (error) | ||
63 | IWL_WARNING("check 52 CCK %d | %d\n", | ||
64 | counter++, error); | ||
65 | } | ||
66 | error |= (rxon->node_addr[0] | rxon->bssid_addr[0]) & 0x1; | ||
67 | if (error) | ||
68 | IWL_WARNING("check mac addr %d | %d\n", counter++, error); | ||
69 | |||
70 | /* make sure basic rates 6Mbps and 1Mbps are supported */ | ||
71 | error |= (((rxon->ofdm_basic_rates & IWL_RATE_6M_MASK) == 0) && | ||
72 | ((rxon->cck_basic_rates & IWL_RATE_1M_MASK) == 0)); | ||
73 | if (error) | ||
74 | IWL_WARNING("check basic rate %d | %d\n", counter++, error); | ||
75 | |||
76 | error |= (le16_to_cpu(rxon->assoc_id) > 2007); | ||
77 | if (error) | ||
78 | IWL_WARNING("check assoc id %d | %d\n", counter++, error); | ||
79 | |||
80 | error |= ((rxon->flags & (RXON_FLG_CCK_MSK | RXON_FLG_SHORT_SLOT_MSK)) | ||
81 | == (RXON_FLG_CCK_MSK | RXON_FLG_SHORT_SLOT_MSK)); | ||
82 | if (error) | ||
83 | IWL_WARNING("check CCK and short slot %d | %d\n", | ||
84 | counter++, error); | ||
85 | |||
86 | error |= ((rxon->flags & (RXON_FLG_CCK_MSK | RXON_FLG_AUTO_DETECT_MSK)) | ||
87 | == (RXON_FLG_CCK_MSK | RXON_FLG_AUTO_DETECT_MSK)); | ||
88 | if (error) | ||
89 | IWL_WARNING("check CCK & auto detect %d | %d\n", | ||
90 | counter++, error); | ||
91 | |||
92 | error |= ((rxon->flags & (RXON_FLG_AUTO_DETECT_MSK | | ||
93 | RXON_FLG_TGG_PROTECT_MSK)) == RXON_FLG_TGG_PROTECT_MSK); | ||
94 | if (error) | ||
95 | IWL_WARNING("check TGG and auto detect %d | %d\n", | ||
96 | counter++, error); | ||
97 | |||
98 | if (error) | ||
99 | IWL_WARNING("Tuning to channel %d\n", | ||
100 | le16_to_cpu(rxon->channel)); | ||
101 | |||
102 | if (error) { | ||
103 | IWL_ERROR("Not a valid iwl4965_rxon_assoc_cmd field values\n"); | ||
104 | return -1; | ||
105 | } | ||
106 | return 0; | ||
107 | } | ||
108 | |||
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c index 70149241e176..4311a56afbb3 100644 --- a/drivers/net/wireless/iwlwifi/iwl-agn.c +++ b/drivers/net/wireless/iwlwifi/iwl-agn.c | |||
@@ -108,79 +108,6 @@ static void iwl_set_rxon_hwcrypto(struct iwl_priv *priv, int hw_decrypt) | |||
108 | } | 108 | } |
109 | 109 | ||
110 | /** | 110 | /** |
111 | * iwl_check_rxon_cmd - validate RXON structure is valid | ||
112 | * | ||
113 | * NOTE: This is really only useful during development and can eventually | ||
114 | * be #ifdef'd out once the driver is stable and folks aren't actively | ||
115 | * making changes | ||
116 | */ | ||
117 | static int iwl_check_rxon_cmd(struct iwl_rxon_cmd *rxon) | ||
118 | { | ||
119 | int error = 0; | ||
120 | int counter = 1; | ||
121 | |||
122 | if (rxon->flags & RXON_FLG_BAND_24G_MSK) { | ||
123 | error |= le32_to_cpu(rxon->flags & | ||
124 | (RXON_FLG_TGJ_NARROW_BAND_MSK | | ||
125 | RXON_FLG_RADAR_DETECT_MSK)); | ||
126 | if (error) | ||
127 | IWL_WARNING("check 24G fields %d | %d\n", | ||
128 | counter++, error); | ||
129 | } else { | ||
130 | error |= (rxon->flags & RXON_FLG_SHORT_SLOT_MSK) ? | ||
131 | 0 : le32_to_cpu(RXON_FLG_SHORT_SLOT_MSK); | ||
132 | if (error) | ||
133 | IWL_WARNING("check 52 fields %d | %d\n", | ||
134 | counter++, error); | ||
135 | error |= le32_to_cpu(rxon->flags & RXON_FLG_CCK_MSK); | ||
136 | if (error) | ||
137 | IWL_WARNING("check 52 CCK %d | %d\n", | ||
138 | counter++, error); | ||
139 | } | ||
140 | error |= (rxon->node_addr[0] | rxon->bssid_addr[0]) & 0x1; | ||
141 | if (error) | ||
142 | IWL_WARNING("check mac addr %d | %d\n", counter++, error); | ||
143 | |||
144 | /* make sure basic rates 6Mbps and 1Mbps are supported */ | ||
145 | error |= (((rxon->ofdm_basic_rates & IWL_RATE_6M_MASK) == 0) && | ||
146 | ((rxon->cck_basic_rates & IWL_RATE_1M_MASK) == 0)); | ||
147 | if (error) | ||
148 | IWL_WARNING("check basic rate %d | %d\n", counter++, error); | ||
149 | |||
150 | error |= (le16_to_cpu(rxon->assoc_id) > 2007); | ||
151 | if (error) | ||
152 | IWL_WARNING("check assoc id %d | %d\n", counter++, error); | ||
153 | |||
154 | error |= ((rxon->flags & (RXON_FLG_CCK_MSK | RXON_FLG_SHORT_SLOT_MSK)) | ||
155 | == (RXON_FLG_CCK_MSK | RXON_FLG_SHORT_SLOT_MSK)); | ||
156 | if (error) | ||
157 | IWL_WARNING("check CCK and short slot %d | %d\n", | ||
158 | counter++, error); | ||
159 | |||
160 | error |= ((rxon->flags & (RXON_FLG_CCK_MSK | RXON_FLG_AUTO_DETECT_MSK)) | ||
161 | == (RXON_FLG_CCK_MSK | RXON_FLG_AUTO_DETECT_MSK)); | ||
162 | if (error) | ||
163 | IWL_WARNING("check CCK & auto detect %d | %d\n", | ||
164 | counter++, error); | ||
165 | |||
166 | error |= ((rxon->flags & (RXON_FLG_AUTO_DETECT_MSK | | ||
167 | RXON_FLG_TGG_PROTECT_MSK)) == RXON_FLG_TGG_PROTECT_MSK); | ||
168 | if (error) | ||
169 | IWL_WARNING("check TGG and auto detect %d | %d\n", | ||
170 | counter++, error); | ||
171 | |||
172 | if (error) | ||
173 | IWL_WARNING("Tuning to channel %d\n", | ||
174 | le16_to_cpu(rxon->channel)); | ||
175 | |||
176 | if (error) { | ||
177 | IWL_ERROR("Not a valid iwl_rxon_assoc_cmd field values\n"); | ||
178 | return -1; | ||
179 | } | ||
180 | return 0; | ||
181 | } | ||
182 | |||
183 | /** | ||
184 | * iwl_full_rxon_required - check if full RXON (vs RXON_ASSOC) cmd is needed | 111 | * iwl_full_rxon_required - check if full RXON (vs RXON_ASSOC) cmd is needed |
185 | * @priv: staging_rxon is compared to active_rxon | 112 | * @priv: staging_rxon is compared to active_rxon |
186 | * | 113 | * |
@@ -252,7 +179,7 @@ static int iwl_commit_rxon(struct iwl_priv *priv) | |||
252 | * 5000, but will not damage 4965 */ | 179 | * 5000, but will not damage 4965 */ |
253 | priv->staging_rxon.flags |= RXON_FLG_SELF_CTS_EN; | 180 | priv->staging_rxon.flags |= RXON_FLG_SELF_CTS_EN; |
254 | 181 | ||
255 | ret = iwl_check_rxon_cmd(&priv->staging_rxon); | 182 | ret = iwl_agn_check_rxon_cmd(&priv->staging_rxon); |
256 | if (ret) { | 183 | if (ret) { |
257 | IWL_ERROR("Invalid RXON configuration. Not committing.\n"); | 184 | IWL_ERROR("Invalid RXON configuration. Not committing.\n"); |
258 | return -EINVAL; | 185 | return -EINVAL; |
diff --git a/drivers/net/wireless/iwlwifi/iwl-commands.h b/drivers/net/wireless/iwlwifi/iwl-commands.h index 0591aec89dd0..9c786db6f90b 100644 --- a/drivers/net/wireless/iwlwifi/iwl-commands.h +++ b/drivers/net/wireless/iwlwifi/iwl-commands.h | |||
@@ -3064,4 +3064,6 @@ struct iwl_rx_packet { | |||
3064 | 3064 | ||
3065 | #define IWL_RX_FRAME_SIZE (4 + sizeof(struct iwl4965_rx_frame)) | 3065 | #define IWL_RX_FRAME_SIZE (4 + sizeof(struct iwl4965_rx_frame)) |
3066 | 3066 | ||
3067 | int iwl_agn_check_rxon_cmd(struct iwl_rxon_cmd *rxon); | ||
3068 | |||
3067 | #endif /* __iwl_commands_h__ */ | 3069 | #endif /* __iwl_commands_h__ */ |
diff --git a/drivers/net/wireless/iwlwifi/iwl-dev.h b/drivers/net/wireless/iwlwifi/iwl-dev.h index b2ce29c372bd..846b8b01fa73 100644 --- a/drivers/net/wireless/iwlwifi/iwl-dev.h +++ b/drivers/net/wireless/iwlwifi/iwl-dev.h | |||
@@ -1086,9 +1086,4 @@ static inline int is_channel_ibss(const struct iwl_channel_info *ch) | |||
1086 | return ((ch->flags & EEPROM_CHANNEL_IBSS)) ? 1 : 0; | 1086 | return ((ch->flags & EEPROM_CHANNEL_IBSS)) ? 1 : 0; |
1087 | } | 1087 | } |
1088 | 1088 | ||
1089 | extern const struct iwl_channel_info *iwl_get_channel_info( | ||
1090 | const struct iwl_priv *priv, enum ieee80211_band band, u16 channel); | ||
1091 | |||
1092 | /* Requires full declaration of iwl_priv before including */ | ||
1093 | |||
1094 | #endif /* __iwl_dev_h__ */ | 1089 | #endif /* __iwl_dev_h__ */ |