root/drivers/net/wireless/ralink/rt2x00/rt2x00lib.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. rt2x00_get_rate
  2. rt2x00_get_rate_mcs
  3. rt2x00lib_load_firmware
  4. rt2x00lib_free_firmware
  5. rt2x00debug_register
  6. rt2x00debug_deregister
  7. rt2x00debug_update_crypto
  8. rt2x00crypto_key_to_cipher
  9. rt2x00crypto_create_tx_descriptor
  10. rt2x00crypto_tx_overhead
  11. rt2x00crypto_tx_copy_iv
  12. rt2x00crypto_tx_remove_iv
  13. rt2x00crypto_tx_insert_iv
  14. rt2x00crypto_rx_insert_iv
  15. rt2x00rfkill_register
  16. rt2x00rfkill_unregister
  17. rt2x00leds_led_quality
  18. rt2x00led_led_activity
  19. rt2x00leds_led_assoc
  20. rt2x00leds_led_radio
  21. rt2x00leds_register
  22. rt2x00leds_unregister
  23. rt2x00leds_suspend
  24. rt2x00leds_resume

   1 /* SPDX-License-Identifier: GPL-2.0-or-later */
   2 /*
   3         Copyright (C) 2004 - 2009 Ivo van Doorn <IvDoorn@gmail.com>
   4         Copyright (C) 2004 - 2009 Gertjan van Wingerde <gwingerde@gmail.com>
   5         <http://rt2x00.serialmonkey.com>
   6 
   7  */
   8 
   9 /*
  10         Module: rt2x00lib
  11         Abstract: Data structures and definitions for the rt2x00lib module.
  12  */
  13 
  14 #ifndef RT2X00LIB_H
  15 #define RT2X00LIB_H
  16 
  17 /*
  18  * Interval defines
  19  */
  20 #define WATCHDOG_INTERVAL       round_jiffies_relative(HZ)
  21 #define LINK_TUNE_SECONDS       1
  22 #define LINK_TUNE_INTERVAL      round_jiffies_relative(LINK_TUNE_SECONDS * HZ)
  23 #define AGC_SECONDS             4
  24 #define VCO_SECONDS             10
  25 
  26 /*
  27  * rt2x00_rate: Per rate device information
  28  */
  29 struct rt2x00_rate {
  30         unsigned short flags;
  31 #define DEV_RATE_CCK                    0x0001
  32 #define DEV_RATE_OFDM                   0x0002
  33 #define DEV_RATE_SHORT_PREAMBLE         0x0004
  34 
  35         unsigned short bitrate; /* In 100kbit/s */
  36         unsigned short ratemask;
  37 
  38         unsigned short plcp;
  39         unsigned short mcs;
  40 };
  41 
  42 extern const struct rt2x00_rate rt2x00_supported_rates[12];
  43 
  44 static inline const struct rt2x00_rate *rt2x00_get_rate(const u16 hw_value)
  45 {
  46         return &rt2x00_supported_rates[hw_value & 0xff];
  47 }
  48 
  49 #define RATE_MCS(__mode, __mcs) \
  50         ((((__mode) & 0x00ff) << 8) | ((__mcs) & 0x00ff))
  51 
  52 static inline int rt2x00_get_rate_mcs(const u16 mcs_value)
  53 {
  54         return (mcs_value & 0x00ff);
  55 }
  56 
  57 /*
  58  * Radio control handlers.
  59  */
  60 int rt2x00lib_enable_radio(struct rt2x00_dev *rt2x00dev);
  61 void rt2x00lib_disable_radio(struct rt2x00_dev *rt2x00dev);
  62 
  63 /*
  64  * Initialization handlers.
  65  */
  66 int rt2x00lib_start(struct rt2x00_dev *rt2x00dev);
  67 void rt2x00lib_stop(struct rt2x00_dev *rt2x00dev);
  68 
  69 /*
  70  * Configuration handlers.
  71  */
  72 void rt2x00lib_config_intf(struct rt2x00_dev *rt2x00dev,
  73                            struct rt2x00_intf *intf,
  74                            enum nl80211_iftype type,
  75                            const u8 *mac, const u8 *bssid);
  76 void rt2x00lib_config_erp(struct rt2x00_dev *rt2x00dev,
  77                           struct rt2x00_intf *intf,
  78                           struct ieee80211_bss_conf *conf,
  79                           u32 changed);
  80 void rt2x00lib_config_antenna(struct rt2x00_dev *rt2x00dev,
  81                               struct antenna_setup ant);
  82 void rt2x00lib_config(struct rt2x00_dev *rt2x00dev,
  83                       struct ieee80211_conf *conf,
  84                       const unsigned int changed_flags);
  85 
  86 /**
  87  * DOC: Queue handlers
  88  */
  89 
  90 /**
  91  * rt2x00queue_alloc_rxskb - allocate a skb for RX purposes.
  92  * @entry: The entry for which the skb will be applicable.
  93  */
  94 struct sk_buff *rt2x00queue_alloc_rxskb(struct queue_entry *entry, gfp_t gfp);
  95 
  96 /**
  97  * rt2x00queue_free_skb - free a skb
  98  * @entry: The entry for which the skb will be applicable.
  99  */
 100 void rt2x00queue_free_skb(struct queue_entry *entry);
 101 
 102 /**
 103  * rt2x00queue_align_frame - Align 802.11 frame to 4-byte boundary
 104  * @skb: The skb to align
 105  *
 106  * Align the start of the 802.11 frame to a 4-byte boundary, this could
 107  * mean the payload is not aligned properly though.
 108  */
 109 void rt2x00queue_align_frame(struct sk_buff *skb);
 110 
 111 /**
 112  * rt2x00queue_insert_l2pad - Align 802.11 header & payload to 4-byte boundary
 113  * @skb: The skb to align
 114  * @header_length: Length of 802.11 header
 115  *
 116  * Apply L2 padding to align both header and payload to 4-byte boundary
 117  */
 118 void rt2x00queue_insert_l2pad(struct sk_buff *skb, unsigned int header_length);
 119 
 120 /**
 121  * rt2x00queue_insert_l2pad - Remove L2 padding from 802.11 frame
 122  * @skb: The skb to align
 123  * @header_length: Length of 802.11 header
 124  *
 125  * Remove L2 padding used to align both header and payload to 4-byte boundary,
 126  * by removing the L2 padding the header will no longer be 4-byte aligned.
 127  */
 128 void rt2x00queue_remove_l2pad(struct sk_buff *skb, unsigned int header_length);
 129 
 130 /**
 131  * rt2x00queue_write_tx_frame - Write TX frame to hardware
 132  * @queue: Queue over which the frame should be send
 133  * @skb: The skb to send
 134  * @local: frame is not from mac80211
 135  */
 136 int rt2x00queue_write_tx_frame(struct data_queue *queue, struct sk_buff *skb,
 137                                struct ieee80211_sta *sta, bool local);
 138 
 139 /**
 140  * rt2x00queue_update_beacon - Send new beacon from mac80211
 141  *      to hardware. Handles locking by itself (mutex).
 142  * @rt2x00dev: Pointer to &struct rt2x00_dev.
 143  * @vif: Interface for which the beacon should be updated.
 144  */
 145 int rt2x00queue_update_beacon(struct rt2x00_dev *rt2x00dev,
 146                               struct ieee80211_vif *vif);
 147 
 148 /**
 149  * rt2x00queue_update_beacon_locked - Send new beacon from mac80211
 150  *      to hardware. Caller needs to ensure locking.
 151  * @rt2x00dev: Pointer to &struct rt2x00_dev.
 152  * @vif: Interface for which the beacon should be updated.
 153  */
 154 int rt2x00queue_update_beacon_locked(struct rt2x00_dev *rt2x00dev,
 155                                      struct ieee80211_vif *vif);
 156 
 157 /**
 158  * rt2x00queue_clear_beacon - Clear beacon in hardware
 159  * @rt2x00dev: Pointer to &struct rt2x00_dev.
 160  * @vif: Interface for which the beacon should be updated.
 161  */
 162 int rt2x00queue_clear_beacon(struct rt2x00_dev *rt2x00dev,
 163                              struct ieee80211_vif *vif);
 164 
 165 /**
 166  * rt2x00queue_index_inc - Index incrementation function
 167  * @entry: Queue entry (&struct queue_entry) to perform the action on.
 168  * @index: Index type (&enum queue_index) to perform the action on.
 169  *
 170  * This function will increase the requested index on the entry's queue,
 171  * it will grab the appropriate locks and handle queue overflow events by
 172  * resetting the index to the start of the queue.
 173  */
 174 void rt2x00queue_index_inc(struct queue_entry *entry, enum queue_index index);
 175 
 176 /**
 177  * rt2x00queue_init_queues - Initialize all data queues
 178  * @rt2x00dev: Pointer to &struct rt2x00_dev.
 179  *
 180  * This function will loop through all available queues to clear all
 181  * index numbers and set the queue entry to the correct initialization
 182  * state.
 183  */
 184 void rt2x00queue_init_queues(struct rt2x00_dev *rt2x00dev);
 185 
 186 int rt2x00queue_initialize(struct rt2x00_dev *rt2x00dev);
 187 void rt2x00queue_uninitialize(struct rt2x00_dev *rt2x00dev);
 188 int rt2x00queue_allocate(struct rt2x00_dev *rt2x00dev);
 189 void rt2x00queue_free(struct rt2x00_dev *rt2x00dev);
 190 
 191 /**
 192  * rt2x00link_update_stats - Update link statistics from RX frame
 193  * @rt2x00dev: Pointer to &struct rt2x00_dev.
 194  * @skb: Received frame
 195  * @rxdesc: Received frame descriptor
 196  *
 197  * Update link statistics based on the information from the
 198  * received frame descriptor.
 199  */
 200 void rt2x00link_update_stats(struct rt2x00_dev *rt2x00dev,
 201                              struct sk_buff *skb,
 202                              struct rxdone_entry_desc *rxdesc);
 203 
 204 /**
 205  * rt2x00link_start_tuner - Start periodic link tuner work
 206  * @rt2x00dev: Pointer to &struct rt2x00_dev.
 207  *
 208  * This start the link tuner periodic work, this work will
 209  * be executed periodically until &rt2x00link_stop_tuner has
 210  * been called.
 211  */
 212 void rt2x00link_start_tuner(struct rt2x00_dev *rt2x00dev);
 213 
 214 /**
 215  * rt2x00link_stop_tuner - Stop periodic link tuner work
 216  * @rt2x00dev: Pointer to &struct rt2x00_dev.
 217  *
 218  * After this function completed the link tuner will not
 219  * be running until &rt2x00link_start_tuner is called.
 220  */
 221 void rt2x00link_stop_tuner(struct rt2x00_dev *rt2x00dev);
 222 
 223 /**
 224  * rt2x00link_reset_tuner - Reset periodic link tuner work
 225  * @rt2x00dev: Pointer to &struct rt2x00_dev.
 226  * @antenna: Should the antenna tuning also be reset
 227  *
 228  * The VGC limit configured in the hardware will be reset to 0
 229  * which forces the driver to rediscover the correct value for
 230  * the current association. This is needed when configuration
 231  * options have changed which could drastically change the
 232  * SNR level or link quality (i.e. changing the antenna setting).
 233  *
 234  * Resetting the link tuner will also cause the periodic work counter
 235  * to be reset. Any driver which has a fixed limit on the number
 236  * of rounds the link tuner is supposed to work will accept the
 237  * tuner actions again if this limit was previously reached.
 238  *
 239  * If @antenna is set to true a the software antenna diversity
 240  * tuning will also be reset.
 241  */
 242 void rt2x00link_reset_tuner(struct rt2x00_dev *rt2x00dev, bool antenna);
 243 
 244 /**
 245  * rt2x00link_start_watchdog - Start periodic watchdog monitoring
 246  * @rt2x00dev: Pointer to &struct rt2x00_dev.
 247  *
 248  * This start the watchdog periodic work, this work will
 249  *be executed periodically until &rt2x00link_stop_watchdog has
 250  * been called.
 251  */
 252 void rt2x00link_start_watchdog(struct rt2x00_dev *rt2x00dev);
 253 
 254 /**
 255  * rt2x00link_stop_watchdog - Stop periodic watchdog monitoring
 256  * @rt2x00dev: Pointer to &struct rt2x00_dev.
 257  *
 258  * After this function completed the watchdog monitoring will not
 259  * be running until &rt2x00link_start_watchdog is called.
 260  */
 261 void rt2x00link_stop_watchdog(struct rt2x00_dev *rt2x00dev);
 262 
 263 /**
 264  * rt2x00link_register - Initialize link tuning & watchdog functionality
 265  * @rt2x00dev: Pointer to &struct rt2x00_dev.
 266  *
 267  * Initialize work structure and all link tuning and watchdog related
 268  * parameters. This will not start the periodic work itself.
 269  */
 270 void rt2x00link_register(struct rt2x00_dev *rt2x00dev);
 271 
 272 /*
 273  * Firmware handlers.
 274  */
 275 #ifdef CONFIG_RT2X00_LIB_FIRMWARE
 276 int rt2x00lib_load_firmware(struct rt2x00_dev *rt2x00dev);
 277 void rt2x00lib_free_firmware(struct rt2x00_dev *rt2x00dev);
 278 #else
 279 static inline int rt2x00lib_load_firmware(struct rt2x00_dev *rt2x00dev)
 280 {
 281         return 0;
 282 }
 283 static inline void rt2x00lib_free_firmware(struct rt2x00_dev *rt2x00dev)
 284 {
 285 }
 286 #endif /* CONFIG_RT2X00_LIB_FIRMWARE */
 287 
 288 /*
 289  * Debugfs handlers.
 290  */
 291 #ifdef CONFIG_RT2X00_LIB_DEBUGFS
 292 void rt2x00debug_register(struct rt2x00_dev *rt2x00dev);
 293 void rt2x00debug_deregister(struct rt2x00_dev *rt2x00dev);
 294 void rt2x00debug_update_crypto(struct rt2x00_dev *rt2x00dev,
 295                                struct rxdone_entry_desc *rxdesc);
 296 #else
 297 static inline void rt2x00debug_register(struct rt2x00_dev *rt2x00dev)
 298 {
 299 }
 300 
 301 static inline void rt2x00debug_deregister(struct rt2x00_dev *rt2x00dev)
 302 {
 303 }
 304 
 305 static inline void rt2x00debug_update_crypto(struct rt2x00_dev *rt2x00dev,
 306                                              struct rxdone_entry_desc *rxdesc)
 307 {
 308 }
 309 #endif /* CONFIG_RT2X00_LIB_DEBUGFS */
 310 
 311 /*
 312  * Crypto handlers.
 313  */
 314 #ifdef CONFIG_RT2X00_LIB_CRYPTO
 315 enum cipher rt2x00crypto_key_to_cipher(struct ieee80211_key_conf *key);
 316 void rt2x00crypto_create_tx_descriptor(struct rt2x00_dev *rt2x00dev,
 317                                        struct sk_buff *skb,
 318                                        struct txentry_desc *txdesc);
 319 unsigned int rt2x00crypto_tx_overhead(struct rt2x00_dev *rt2x00dev,
 320                                       struct sk_buff *skb);
 321 void rt2x00crypto_tx_copy_iv(struct sk_buff *skb,
 322                              struct txentry_desc *txdesc);
 323 void rt2x00crypto_tx_remove_iv(struct sk_buff *skb,
 324                                struct txentry_desc *txdesc);
 325 void rt2x00crypto_tx_insert_iv(struct sk_buff *skb, unsigned int header_length);
 326 void rt2x00crypto_rx_insert_iv(struct sk_buff *skb,
 327                                unsigned int header_length,
 328                                struct rxdone_entry_desc *rxdesc);
 329 #else
 330 static inline enum cipher rt2x00crypto_key_to_cipher(struct ieee80211_key_conf *key)
 331 {
 332         return CIPHER_NONE;
 333 }
 334 
 335 static inline void rt2x00crypto_create_tx_descriptor(struct rt2x00_dev *rt2x00dev,
 336                                                      struct sk_buff *skb,
 337                                                      struct txentry_desc *txdesc)
 338 {
 339 }
 340 
 341 static inline unsigned int rt2x00crypto_tx_overhead(struct rt2x00_dev *rt2x00dev,
 342                                                     struct sk_buff *skb)
 343 {
 344         return 0;
 345 }
 346 
 347 static inline void rt2x00crypto_tx_copy_iv(struct sk_buff *skb,
 348                                            struct txentry_desc *txdesc)
 349 {
 350 }
 351 
 352 static inline void rt2x00crypto_tx_remove_iv(struct sk_buff *skb,
 353                                              struct txentry_desc *txdesc)
 354 {
 355 }
 356 
 357 static inline void rt2x00crypto_tx_insert_iv(struct sk_buff *skb,
 358                                              unsigned int header_length)
 359 {
 360 }
 361 
 362 static inline void rt2x00crypto_rx_insert_iv(struct sk_buff *skb,
 363                                              unsigned int header_length,
 364                                              struct rxdone_entry_desc *rxdesc)
 365 {
 366 }
 367 #endif /* CONFIG_RT2X00_LIB_CRYPTO */
 368 
 369 /*
 370  * RFkill handlers.
 371  */
 372 static inline void rt2x00rfkill_register(struct rt2x00_dev *rt2x00dev)
 373 {
 374         if (test_bit(CAPABILITY_HW_BUTTON, &rt2x00dev->cap_flags))
 375                 wiphy_rfkill_start_polling(rt2x00dev->hw->wiphy);
 376 }
 377 
 378 static inline void rt2x00rfkill_unregister(struct rt2x00_dev *rt2x00dev)
 379 {
 380         if (test_bit(CAPABILITY_HW_BUTTON, &rt2x00dev->cap_flags))
 381                 wiphy_rfkill_stop_polling(rt2x00dev->hw->wiphy);
 382 }
 383 
 384 /*
 385  * LED handlers
 386  */
 387 #ifdef CONFIG_RT2X00_LIB_LEDS
 388 void rt2x00leds_led_quality(struct rt2x00_dev *rt2x00dev, int rssi);
 389 void rt2x00led_led_activity(struct rt2x00_dev *rt2x00dev, bool enabled);
 390 void rt2x00leds_led_assoc(struct rt2x00_dev *rt2x00dev, bool enabled);
 391 void rt2x00leds_led_radio(struct rt2x00_dev *rt2x00dev, bool enabled);
 392 void rt2x00leds_register(struct rt2x00_dev *rt2x00dev);
 393 void rt2x00leds_unregister(struct rt2x00_dev *rt2x00dev);
 394 void rt2x00leds_suspend(struct rt2x00_dev *rt2x00dev);
 395 void rt2x00leds_resume(struct rt2x00_dev *rt2x00dev);
 396 #else
 397 static inline void rt2x00leds_led_quality(struct rt2x00_dev *rt2x00dev,
 398                                           int rssi)
 399 {
 400 }
 401 
 402 static inline void rt2x00led_led_activity(struct rt2x00_dev *rt2x00dev,
 403                                           bool enabled)
 404 {
 405 }
 406 
 407 static inline void rt2x00leds_led_assoc(struct rt2x00_dev *rt2x00dev,
 408                                         bool enabled)
 409 {
 410 }
 411 
 412 static inline void rt2x00leds_led_radio(struct rt2x00_dev *rt2x00dev,
 413                                         bool enabled)
 414 {
 415 }
 416 
 417 static inline void rt2x00leds_register(struct rt2x00_dev *rt2x00dev)
 418 {
 419 }
 420 
 421 static inline void rt2x00leds_unregister(struct rt2x00_dev *rt2x00dev)
 422 {
 423 }
 424 
 425 static inline void rt2x00leds_suspend(struct rt2x00_dev *rt2x00dev)
 426 {
 427 }
 428 
 429 static inline void rt2x00leds_resume(struct rt2x00_dev *rt2x00dev)
 430 {
 431 }
 432 #endif /* CONFIG_RT2X00_LIB_LEDS */
 433 
 434 #endif /* RT2X00LIB_H */

/* [<][>][^][v][top][bottom][index][help] */