diff options
author | Holger Schurig <hs4233@mail.mn-solutions.de> | 2009-10-22 09:30:48 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2009-10-27 16:48:36 -0400 |
commit | 2d46502dce3c79c3c15ac537cb271911f58d12d1 (patch) | |
tree | 7bf08660d6316121e2b08fad286fdbf75e14128d /drivers/net/wireless/libertas/scan.c | |
parent | 243e84e91ed810f7dca5ba1c2d1a611811948566 (diff) |
libertas: move scan/assoc related stuff
Another cfg80211-preparation patch: removes some code/definitions from
main.c and dev.h and put's it into assoc.c/.h, scan.c/.h.
No function change.
Signed-off-by: Holger Schurig <hs4233@mail.mn-solutions.de>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/libertas/scan.c')
-rw-r--r-- | drivers/net/wireless/libertas/scan.c | 184 |
1 files changed, 184 insertions, 0 deletions
diff --git a/drivers/net/wireless/libertas/scan.c b/drivers/net/wireless/libertas/scan.c index 2700f4b455e3..8273bcd216be 100644 --- a/drivers/net/wireless/libertas/scan.c +++ b/drivers/net/wireless/libertas/scan.c | |||
@@ -15,6 +15,7 @@ | |||
15 | #include "decl.h" | 15 | #include "decl.h" |
16 | #include "dev.h" | 16 | #include "dev.h" |
17 | #include "scan.h" | 17 | #include "scan.h" |
18 | #include "assoc.h" | ||
18 | #include "cmd.h" | 19 | #include "cmd.h" |
19 | 20 | ||
20 | //! Approximate amount of data needed to pass a scan result back to iwlist | 21 | //! Approximate amount of data needed to pass a scan result back to iwlist |
@@ -121,6 +122,189 @@ static inline int is_same_network(struct bss_descriptor *src, | |||
121 | 122 | ||
122 | 123 | ||
123 | 124 | ||
125 | /*********************************************************************/ | ||
126 | /* */ | ||
127 | /* Region channel support */ | ||
128 | /* */ | ||
129 | /*********************************************************************/ | ||
130 | |||
131 | #define LBS_TX_PWR_DEFAULT 20 /*100mW */ | ||
132 | #define LBS_TX_PWR_US_DEFAULT 20 /*100mW */ | ||
133 | #define LBS_TX_PWR_JP_DEFAULT 16 /*50mW */ | ||
134 | #define LBS_TX_PWR_FR_DEFAULT 20 /*100mW */ | ||
135 | #define LBS_TX_PWR_EMEA_DEFAULT 20 /*100mW */ | ||
136 | |||
137 | /* Format { channel, frequency (MHz), maxtxpower } */ | ||
138 | /* band: 'B/G', region: USA FCC/Canada IC */ | ||
139 | static struct chan_freq_power channel_freq_power_US_BG[] = { | ||
140 | {1, 2412, LBS_TX_PWR_US_DEFAULT}, | ||
141 | {2, 2417, LBS_TX_PWR_US_DEFAULT}, | ||
142 | {3, 2422, LBS_TX_PWR_US_DEFAULT}, | ||
143 | {4, 2427, LBS_TX_PWR_US_DEFAULT}, | ||
144 | {5, 2432, LBS_TX_PWR_US_DEFAULT}, | ||
145 | {6, 2437, LBS_TX_PWR_US_DEFAULT}, | ||
146 | {7, 2442, LBS_TX_PWR_US_DEFAULT}, | ||
147 | {8, 2447, LBS_TX_PWR_US_DEFAULT}, | ||
148 | {9, 2452, LBS_TX_PWR_US_DEFAULT}, | ||
149 | {10, 2457, LBS_TX_PWR_US_DEFAULT}, | ||
150 | {11, 2462, LBS_TX_PWR_US_DEFAULT} | ||
151 | }; | ||
152 | |||
153 | /* band: 'B/G', region: Europe ETSI */ | ||
154 | static struct chan_freq_power channel_freq_power_EU_BG[] = { | ||
155 | {1, 2412, LBS_TX_PWR_EMEA_DEFAULT}, | ||
156 | {2, 2417, LBS_TX_PWR_EMEA_DEFAULT}, | ||
157 | {3, 2422, LBS_TX_PWR_EMEA_DEFAULT}, | ||
158 | {4, 2427, LBS_TX_PWR_EMEA_DEFAULT}, | ||
159 | {5, 2432, LBS_TX_PWR_EMEA_DEFAULT}, | ||
160 | {6, 2437, LBS_TX_PWR_EMEA_DEFAULT}, | ||
161 | {7, 2442, LBS_TX_PWR_EMEA_DEFAULT}, | ||
162 | {8, 2447, LBS_TX_PWR_EMEA_DEFAULT}, | ||
163 | {9, 2452, LBS_TX_PWR_EMEA_DEFAULT}, | ||
164 | {10, 2457, LBS_TX_PWR_EMEA_DEFAULT}, | ||
165 | {11, 2462, LBS_TX_PWR_EMEA_DEFAULT}, | ||
166 | {12, 2467, LBS_TX_PWR_EMEA_DEFAULT}, | ||
167 | {13, 2472, LBS_TX_PWR_EMEA_DEFAULT} | ||
168 | }; | ||
169 | |||
170 | /* band: 'B/G', region: Spain */ | ||
171 | static struct chan_freq_power channel_freq_power_SPN_BG[] = { | ||
172 | {10, 2457, LBS_TX_PWR_DEFAULT}, | ||
173 | {11, 2462, LBS_TX_PWR_DEFAULT} | ||
174 | }; | ||
175 | |||
176 | /* band: 'B/G', region: France */ | ||
177 | static struct chan_freq_power channel_freq_power_FR_BG[] = { | ||
178 | {10, 2457, LBS_TX_PWR_FR_DEFAULT}, | ||
179 | {11, 2462, LBS_TX_PWR_FR_DEFAULT}, | ||
180 | {12, 2467, LBS_TX_PWR_FR_DEFAULT}, | ||
181 | {13, 2472, LBS_TX_PWR_FR_DEFAULT} | ||
182 | }; | ||
183 | |||
184 | /* band: 'B/G', region: Japan */ | ||
185 | static struct chan_freq_power channel_freq_power_JPN_BG[] = { | ||
186 | {1, 2412, LBS_TX_PWR_JP_DEFAULT}, | ||
187 | {2, 2417, LBS_TX_PWR_JP_DEFAULT}, | ||
188 | {3, 2422, LBS_TX_PWR_JP_DEFAULT}, | ||
189 | {4, 2427, LBS_TX_PWR_JP_DEFAULT}, | ||
190 | {5, 2432, LBS_TX_PWR_JP_DEFAULT}, | ||
191 | {6, 2437, LBS_TX_PWR_JP_DEFAULT}, | ||
192 | {7, 2442, LBS_TX_PWR_JP_DEFAULT}, | ||
193 | {8, 2447, LBS_TX_PWR_JP_DEFAULT}, | ||
194 | {9, 2452, LBS_TX_PWR_JP_DEFAULT}, | ||
195 | {10, 2457, LBS_TX_PWR_JP_DEFAULT}, | ||
196 | {11, 2462, LBS_TX_PWR_JP_DEFAULT}, | ||
197 | {12, 2467, LBS_TX_PWR_JP_DEFAULT}, | ||
198 | {13, 2472, LBS_TX_PWR_JP_DEFAULT}, | ||
199 | {14, 2484, LBS_TX_PWR_JP_DEFAULT} | ||
200 | }; | ||
201 | |||
202 | /** | ||
203 | * the structure for channel, frequency and power | ||
204 | */ | ||
205 | struct region_cfp_table { | ||
206 | u8 region; | ||
207 | struct chan_freq_power *cfp_BG; | ||
208 | int cfp_no_BG; | ||
209 | }; | ||
210 | |||
211 | /** | ||
212 | * the structure for the mapping between region and CFP | ||
213 | */ | ||
214 | static struct region_cfp_table region_cfp_table[] = { | ||
215 | {0x10, /*US FCC */ | ||
216 | channel_freq_power_US_BG, | ||
217 | ARRAY_SIZE(channel_freq_power_US_BG), | ||
218 | } | ||
219 | , | ||
220 | {0x20, /*CANADA IC */ | ||
221 | channel_freq_power_US_BG, | ||
222 | ARRAY_SIZE(channel_freq_power_US_BG), | ||
223 | } | ||
224 | , | ||
225 | {0x30, /*EU*/ channel_freq_power_EU_BG, | ||
226 | ARRAY_SIZE(channel_freq_power_EU_BG), | ||
227 | } | ||
228 | , | ||
229 | {0x31, /*SPAIN*/ channel_freq_power_SPN_BG, | ||
230 | ARRAY_SIZE(channel_freq_power_SPN_BG), | ||
231 | } | ||
232 | , | ||
233 | {0x32, /*FRANCE*/ channel_freq_power_FR_BG, | ||
234 | ARRAY_SIZE(channel_freq_power_FR_BG), | ||
235 | } | ||
236 | , | ||
237 | {0x40, /*JAPAN*/ channel_freq_power_JPN_BG, | ||
238 | ARRAY_SIZE(channel_freq_power_JPN_BG), | ||
239 | } | ||
240 | , | ||
241 | /*Add new region here */ | ||
242 | }; | ||
243 | |||
244 | /** | ||
245 | * @brief This function finds the CFP in | ||
246 | * region_cfp_table based on region and band parameter. | ||
247 | * | ||
248 | * @param region The region code | ||
249 | * @param band The band | ||
250 | * @param cfp_no A pointer to CFP number | ||
251 | * @return A pointer to CFP | ||
252 | */ | ||
253 | static struct chan_freq_power *lbs_get_region_cfp_table(u8 region, int *cfp_no) | ||
254 | { | ||
255 | int i, end; | ||
256 | |||
257 | lbs_deb_enter(LBS_DEB_MAIN); | ||
258 | |||
259 | end = ARRAY_SIZE(region_cfp_table); | ||
260 | |||
261 | for (i = 0; i < end ; i++) { | ||
262 | lbs_deb_main("region_cfp_table[i].region=%d\n", | ||
263 | region_cfp_table[i].region); | ||
264 | if (region_cfp_table[i].region == region) { | ||
265 | *cfp_no = region_cfp_table[i].cfp_no_BG; | ||
266 | lbs_deb_leave(LBS_DEB_MAIN); | ||
267 | return region_cfp_table[i].cfp_BG; | ||
268 | } | ||
269 | } | ||
270 | |||
271 | lbs_deb_leave_args(LBS_DEB_MAIN, "ret NULL"); | ||
272 | return NULL; | ||
273 | } | ||
274 | |||
275 | int lbs_set_regiontable(struct lbs_private *priv, u8 region, u8 band) | ||
276 | { | ||
277 | int ret = 0; | ||
278 | int i = 0; | ||
279 | |||
280 | struct chan_freq_power *cfp; | ||
281 | int cfp_no; | ||
282 | |||
283 | lbs_deb_enter(LBS_DEB_MAIN); | ||
284 | |||
285 | memset(priv->region_channel, 0, sizeof(priv->region_channel)); | ||
286 | |||
287 | cfp = lbs_get_region_cfp_table(region, &cfp_no); | ||
288 | if (cfp != NULL) { | ||
289 | priv->region_channel[i].nrcfp = cfp_no; | ||
290 | priv->region_channel[i].CFP = cfp; | ||
291 | } else { | ||
292 | lbs_deb_main("wrong region code %#x in band B/G\n", | ||
293 | region); | ||
294 | ret = -1; | ||
295 | goto out; | ||
296 | } | ||
297 | priv->region_channel[i].valid = 1; | ||
298 | priv->region_channel[i].region = region; | ||
299 | priv->region_channel[i].band = band; | ||
300 | i++; | ||
301 | out: | ||
302 | lbs_deb_leave_args(LBS_DEB_MAIN, "ret %d", ret); | ||
303 | return ret; | ||
304 | } | ||
305 | |||
306 | |||
307 | |||
124 | 308 | ||
125 | /*********************************************************************/ | 309 | /*********************************************************************/ |
126 | /* */ | 310 | /* */ |