Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
rt2x00lib.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2004 - 2009 Ivo van Doorn <[email protected]>
3  Copyright (C) 2004 - 2009 Gertjan van Wingerde <[email protected]>
4  <http://rt2x00.serialmonkey.com>
5 
6  This program is free software; you can redistribute it and/or modify
7  it under the terms of the GNU General Public License as published by
8  the Free Software Foundation; either version 2 of the License, or
9  (at your option) any later version.
10 
11  This program is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  GNU 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
18  Free Software Foundation, Inc.,
19  59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
20  */
21 
22 /*
23  Module: rt2x00lib
24  Abstract: Data structures and definitions for the rt2x00lib module.
25  */
26 
27 #ifndef RT2X00LIB_H
28 #define RT2X00LIB_H
29 
30 /*
31  * Interval defines
32  */
33 #define WATCHDOG_INTERVAL round_jiffies_relative(HZ)
34 #define LINK_TUNE_INTERVAL round_jiffies_relative(HZ)
35 #define AGC_INTERVAL round_jiffies_relative(4 * HZ)
36 #define VCO_INTERVAL round_jiffies_relative(10 * HZ) /* 10 sec */
37 
38 /*
39  * rt2x00_rate: Per rate device information
40  */
41 struct rt2x00_rate {
42  unsigned short flags;
43 #define DEV_RATE_CCK 0x0001
44 #define DEV_RATE_OFDM 0x0002
45 #define DEV_RATE_SHORT_PREAMBLE 0x0004
46 
47  unsigned short bitrate; /* In 100kbit/s */
48  unsigned short ratemask;
49 
50  unsigned short plcp;
51  unsigned short mcs;
52 };
53 
54 extern const struct rt2x00_rate rt2x00_supported_rates[12];
55 
56 static inline const struct rt2x00_rate *rt2x00_get_rate(const u16 hw_value)
57 {
58  return &rt2x00_supported_rates[hw_value & 0xff];
59 }
60 
61 #define RATE_MCS(__mode, __mcs) \
62  ((((__mode) & 0x00ff) << 8) | ((__mcs) & 0x00ff))
63 
64 static inline int rt2x00_get_rate_mcs(const u16 mcs_value)
65 {
66  return (mcs_value & 0x00ff);
67 }
68 
69 /*
70  * Radio control handlers.
71  */
72 int rt2x00lib_enable_radio(struct rt2x00_dev *rt2x00dev);
73 void rt2x00lib_disable_radio(struct rt2x00_dev *rt2x00dev);
74 
75 /*
76  * Initialization handlers.
77  */
78 int rt2x00lib_start(struct rt2x00_dev *rt2x00dev);
79 void rt2x00lib_stop(struct rt2x00_dev *rt2x00dev);
80 
81 /*
82  * Configuration handlers.
83  */
84 void rt2x00lib_config_intf(struct rt2x00_dev *rt2x00dev,
85  struct rt2x00_intf *intf,
86  enum nl80211_iftype type,
87  const u8 *mac, const u8 *bssid);
88 void rt2x00lib_config_erp(struct rt2x00_dev *rt2x00dev,
89  struct rt2x00_intf *intf,
90  struct ieee80211_bss_conf *conf,
91  u32 changed);
92 void rt2x00lib_config_antenna(struct rt2x00_dev *rt2x00dev,
93  struct antenna_setup ant);
94 void rt2x00lib_config(struct rt2x00_dev *rt2x00dev,
95  struct ieee80211_conf *conf,
96  const unsigned int changed_flags);
97 
106 struct sk_buff *rt2x00queue_alloc_rxskb(struct queue_entry *entry, gfp_t gfp);
107 
112 void rt2x00queue_free_skb(struct queue_entry *entry);
113 
121 void rt2x00queue_align_frame(struct sk_buff *skb);
122 
130 void rt2x00queue_insert_l2pad(struct sk_buff *skb, unsigned int header_length);
131 
140 void rt2x00queue_remove_l2pad(struct sk_buff *skb, unsigned int header_length);
141 
149  bool local);
150 
157 int rt2x00queue_update_beacon(struct rt2x00_dev *rt2x00dev,
158  struct ieee80211_vif *vif);
159 
166 int rt2x00queue_update_beacon_locked(struct rt2x00_dev *rt2x00dev,
167  struct ieee80211_vif *vif);
168 
174 int rt2x00queue_clear_beacon(struct rt2x00_dev *rt2x00dev,
175  struct ieee80211_vif *vif);
176 
186 void rt2x00queue_index_inc(struct queue_entry *entry, enum queue_index index);
187 
196 void rt2x00queue_init_queues(struct rt2x00_dev *rt2x00dev);
197 
198 int rt2x00queue_initialize(struct rt2x00_dev *rt2x00dev);
199 void rt2x00queue_uninitialize(struct rt2x00_dev *rt2x00dev);
200 int rt2x00queue_allocate(struct rt2x00_dev *rt2x00dev);
201 void rt2x00queue_free(struct rt2x00_dev *rt2x00dev);
202 
212 void rt2x00link_update_stats(struct rt2x00_dev *rt2x00dev,
213  struct sk_buff *skb,
214  struct rxdone_entry_desc *rxdesc);
215 
224 void rt2x00link_start_tuner(struct rt2x00_dev *rt2x00dev);
225 
233 void rt2x00link_stop_tuner(struct rt2x00_dev *rt2x00dev);
234 
254 void rt2x00link_reset_tuner(struct rt2x00_dev *rt2x00dev, bool antenna);
255 
264 void rt2x00link_start_watchdog(struct rt2x00_dev *rt2x00dev);
265 
273 void rt2x00link_stop_watchdog(struct rt2x00_dev *rt2x00dev);
274 
279 void rt2x00link_start_agc(struct rt2x00_dev *rt2x00dev);
280 
285 void rt2x00link_start_vcocal(struct rt2x00_dev *rt2x00dev);
286 
291 void rt2x00link_stop_agc(struct rt2x00_dev *rt2x00dev);
292 
297 void rt2x00link_stop_vcocal(struct rt2x00_dev *rt2x00dev);
298 
306 void rt2x00link_register(struct rt2x00_dev *rt2x00dev);
307 
308 /*
309  * Firmware handlers.
310  */
311 #ifdef CONFIG_RT2X00_LIB_FIRMWARE
312 int rt2x00lib_load_firmware(struct rt2x00_dev *rt2x00dev);
313 void rt2x00lib_free_firmware(struct rt2x00_dev *rt2x00dev);
314 #else
315 static inline int rt2x00lib_load_firmware(struct rt2x00_dev *rt2x00dev)
316 {
317  return 0;
318 }
319 static inline void rt2x00lib_free_firmware(struct rt2x00_dev *rt2x00dev)
320 {
321 }
322 #endif /* CONFIG_RT2X00_LIB_FIRMWARE */
323 
324 /*
325  * Debugfs handlers.
326  */
327 #ifdef CONFIG_RT2X00_LIB_DEBUGFS
328 void rt2x00debug_register(struct rt2x00_dev *rt2x00dev);
329 void rt2x00debug_deregister(struct rt2x00_dev *rt2x00dev);
330 void rt2x00debug_update_crypto(struct rt2x00_dev *rt2x00dev,
331  struct rxdone_entry_desc *rxdesc);
332 #else
333 static inline void rt2x00debug_register(struct rt2x00_dev *rt2x00dev)
334 {
335 }
336 
337 static inline void rt2x00debug_deregister(struct rt2x00_dev *rt2x00dev)
338 {
339 }
340 
341 static inline void rt2x00debug_update_crypto(struct rt2x00_dev *rt2x00dev,
342  struct rxdone_entry_desc *rxdesc)
343 {
344 }
345 #endif /* CONFIG_RT2X00_LIB_DEBUGFS */
346 
347 /*
348  * Crypto handlers.
349  */
350 #ifdef CONFIG_RT2X00_LIB_CRYPTO
352 void rt2x00crypto_create_tx_descriptor(struct rt2x00_dev *rt2x00dev,
353  struct sk_buff *skb,
354  struct txentry_desc *txdesc);
355 unsigned int rt2x00crypto_tx_overhead(struct rt2x00_dev *rt2x00dev,
356  struct sk_buff *skb);
357 void rt2x00crypto_tx_copy_iv(struct sk_buff *skb,
358  struct txentry_desc *txdesc);
360  struct txentry_desc *txdesc);
361 void rt2x00crypto_tx_insert_iv(struct sk_buff *skb, unsigned int header_length);
363  unsigned int header_length,
364  struct rxdone_entry_desc *rxdesc);
365 #else
366 static inline enum cipher rt2x00crypto_key_to_cipher(struct ieee80211_key_conf *key)
367 {
368  return CIPHER_NONE;
369 }
370 
371 static inline void rt2x00crypto_create_tx_descriptor(struct rt2x00_dev *rt2x00dev,
372  struct sk_buff *skb,
373  struct txentry_desc *txdesc)
374 {
375 }
376 
377 static inline unsigned int rt2x00crypto_tx_overhead(struct rt2x00_dev *rt2x00dev,
378  struct sk_buff *skb)
379 {
380  return 0;
381 }
382 
383 static inline void rt2x00crypto_tx_copy_iv(struct sk_buff *skb,
384  struct txentry_desc *txdesc)
385 {
386 }
387 
388 static inline void rt2x00crypto_tx_remove_iv(struct sk_buff *skb,
389  struct txentry_desc *txdesc)
390 {
391 }
392 
393 static inline void rt2x00crypto_tx_insert_iv(struct sk_buff *skb,
394  unsigned int header_length)
395 {
396 }
397 
398 static inline void rt2x00crypto_rx_insert_iv(struct sk_buff *skb,
399  unsigned int header_length,
400  struct rxdone_entry_desc *rxdesc)
401 {
402 }
403 #endif /* CONFIG_RT2X00_LIB_CRYPTO */
404 
405 /*
406  * RFkill handlers.
407  */
408 static inline void rt2x00rfkill_register(struct rt2x00_dev *rt2x00dev)
409 {
410  if (test_bit(CAPABILITY_HW_BUTTON, &rt2x00dev->cap_flags))
411  wiphy_rfkill_start_polling(rt2x00dev->hw->wiphy);
412 }
413 
414 static inline void rt2x00rfkill_unregister(struct rt2x00_dev *rt2x00dev)
415 {
416  if (test_bit(CAPABILITY_HW_BUTTON, &rt2x00dev->cap_flags))
417  wiphy_rfkill_stop_polling(rt2x00dev->hw->wiphy);
418 }
419 
420 /*
421  * LED handlers
422  */
423 #ifdef CONFIG_RT2X00_LIB_LEDS
424 void rt2x00leds_led_quality(struct rt2x00_dev *rt2x00dev, int rssi);
425 void rt2x00led_led_activity(struct rt2x00_dev *rt2x00dev, bool enabled);
426 void rt2x00leds_led_assoc(struct rt2x00_dev *rt2x00dev, bool enabled);
427 void rt2x00leds_led_radio(struct rt2x00_dev *rt2x00dev, bool enabled);
428 void rt2x00leds_register(struct rt2x00_dev *rt2x00dev);
429 void rt2x00leds_unregister(struct rt2x00_dev *rt2x00dev);
430 void rt2x00leds_suspend(struct rt2x00_dev *rt2x00dev);
431 void rt2x00leds_resume(struct rt2x00_dev *rt2x00dev);
432 #else
433 static inline void rt2x00leds_led_quality(struct rt2x00_dev *rt2x00dev,
434  int rssi)
435 {
436 }
437 
438 static inline void rt2x00led_led_activity(struct rt2x00_dev *rt2x00dev,
439  bool enabled)
440 {
441 }
442 
443 static inline void rt2x00leds_led_assoc(struct rt2x00_dev *rt2x00dev,
444  bool enabled)
445 {
446 }
447 
448 static inline void rt2x00leds_led_radio(struct rt2x00_dev *rt2x00dev,
449  bool enabled)
450 {
451 }
452 
453 static inline void rt2x00leds_register(struct rt2x00_dev *rt2x00dev)
454 {
455 }
456 
457 static inline void rt2x00leds_unregister(struct rt2x00_dev *rt2x00dev)
458 {
459 }
460 
461 static inline void rt2x00leds_suspend(struct rt2x00_dev *rt2x00dev)
462 {
463 }
464 
465 static inline void rt2x00leds_resume(struct rt2x00_dev *rt2x00dev)
466 {
467 }
468 #endif /* CONFIG_RT2X00_LIB_LEDS */
469 
470 #endif /* RT2X00LIB_H */