linux/drivers/net/wireless/libertas/dev.h
<<
>>
Prefs
   1/**
   2  * This file contains definitions and data structures specific
   3  * to Marvell 802.11 NIC. It contains the Device Information
   4  * structure struct lbs_private..
   5  */
   6#ifndef _LBS_DEV_H_
   7#define _LBS_DEV_H_
   8
   9#include <linux/netdevice.h>
  10#include <linux/wireless.h>
  11#include <linux/ethtool.h>
  12#include <linux/debugfs.h>
  13
  14#include "defs.h"
  15#include "hostcmd.h"
  16
  17extern const struct ethtool_ops lbs_ethtool_ops;
  18
  19#define MAX_BSSID_PER_CHANNEL           16
  20
  21#define NR_TX_QUEUE                     3
  22
  23/* For the extended Scan */
  24#define MAX_EXTENDED_SCAN_BSSID_LIST    MAX_BSSID_PER_CHANNEL * \
  25                                                MRVDRV_MAX_CHANNEL_SIZE + 1
  26
  27#define MAX_REGION_CHANNEL_NUM  2
  28
  29/** Chan-freq-TxPower mapping table*/
  30struct chan_freq_power {
  31        /** channel Number              */
  32        u16 channel;
  33        /** frequency of this channel   */
  34        u32 freq;
  35        /** Max allowed Tx power level  */
  36        u16 maxtxpower;
  37        /** TRUE:channel unsupported;  FLASE:supported*/
  38        u8 unsupported;
  39};
  40
  41/** region-band mapping table*/
  42struct region_channel {
  43        /** TRUE if this entry is valid              */
  44        u8 valid;
  45        /** region code for US, Japan ...            */
  46        u8 region;
  47        /** band B/G/A, used for BAND_CONFIG cmd             */
  48        u8 band;
  49        /** Actual No. of elements in the array below */
  50        u8 nrcfp;
  51        /** chan-freq-txpower mapping table*/
  52        struct chan_freq_power *CFP;
  53};
  54
  55struct lbs_802_11_security {
  56        u8 WPAenabled;
  57        u8 WPA2enabled;
  58        u8 wep_enabled;
  59        u8 auth_mode;
  60        u32 key_mgmt;
  61};
  62
  63/** Current Basic Service Set State Structure */
  64struct current_bss_params {
  65        /** bssid */
  66        u8 bssid[ETH_ALEN];
  67        /** ssid */
  68        u8 ssid[IW_ESSID_MAX_SIZE + 1];
  69        u8 ssid_len;
  70
  71        /** band */
  72        u8 band;
  73        /** channel */
  74        u8 channel;
  75        /** zero-terminated array of supported data rates */
  76        u8 rates[MAX_RATES + 1];
  77};
  78
  79/** sleep_params */
  80struct sleep_params {
  81        uint16_t sp_error;
  82        uint16_t sp_offset;
  83        uint16_t sp_stabletime;
  84        uint8_t  sp_calcontrol;
  85        uint8_t  sp_extsleepclk;
  86        uint16_t sp_reserved;
  87};
  88
  89/* Mesh statistics */
  90struct lbs_mesh_stats {
  91        u32     fwd_bcast_cnt;          /* Fwd: Broadcast counter */
  92        u32     fwd_unicast_cnt;        /* Fwd: Unicast counter */
  93        u32     fwd_drop_ttl;           /* Fwd: TTL zero */
  94        u32     fwd_drop_rbt;           /* Fwd: Recently Broadcasted */
  95        u32     fwd_drop_noroute;       /* Fwd: No route to Destination */
  96        u32     fwd_drop_nobuf;         /* Fwd: Run out of internal buffers */
  97        u32     drop_blind;             /* Rx:  Dropped by blinding table */
  98        u32     tx_failed_cnt;          /* Tx:  Failed transmissions */
  99};
 100
 101/** Private structure for the MV device */
 102struct lbs_private {
 103        int mesh_open;
 104        int mesh_fw_ver;
 105        int infra_open;
 106        int mesh_autostart_enabled;
 107
 108        char name[DEV_NAME_LEN];
 109
 110        void *card;
 111        struct net_device *dev;
 112
 113        struct net_device *mesh_dev; /* Virtual device */
 114        struct net_device *rtap_net_dev;
 115
 116        struct iw_statistics wstats;
 117        struct lbs_mesh_stats mstats;
 118        struct dentry *debugfs_dir;
 119        struct dentry *debugfs_debug;
 120        struct dentry *debugfs_files[6];
 121
 122        struct dentry *events_dir;
 123        struct dentry *debugfs_events_files[6];
 124
 125        struct dentry *regs_dir;
 126        struct dentry *debugfs_regs_files[6];
 127
 128        u32 mac_offset;
 129        u32 bbp_offset;
 130        u32 rf_offset;
 131
 132        /* Download sent:
 133           bit0 1/0=data_sent/data_tx_done,
 134           bit1 1/0=cmd_sent/cmd_tx_done,
 135           all other bits reserved 0 */
 136        u8 dnld_sent;
 137
 138        /** thread to service interrupts */
 139        struct task_struct *main_thread;
 140        wait_queue_head_t waitq;
 141        struct workqueue_struct *work_thread;
 142
 143        struct work_struct mcast_work;
 144
 145        /** Scanning */
 146        struct delayed_work scan_work;
 147        struct delayed_work assoc_work;
 148        struct work_struct sync_channel;
 149        /* remember which channel was scanned last, != 0 if currently scanning */
 150        int scan_channel;
 151        u8 scan_ssid[IW_ESSID_MAX_SIZE + 1];
 152        u8 scan_ssid_len;
 153
 154        /** Hardware access */
 155        int (*hw_host_to_card) (struct lbs_private *priv, u8 type, u8 *payload, u16 nb);
 156        void (*reset_card) (struct lbs_private *priv);
 157
 158        /* Wake On LAN */
 159        uint32_t wol_criteria;
 160        uint8_t wol_gpio;
 161        uint8_t wol_gap;
 162
 163        /** Wlan adapter data structure*/
 164        /** STATUS variables */
 165        u32 fwrelease;
 166        u32 fwcapinfo;
 167
 168        struct mutex lock;
 169
 170        /* TX packet ready to be sent... */
 171        int tx_pending_len;             /* -1 while building packet */
 172
 173        u8 tx_pending_buf[LBS_UPLD_SIZE];
 174        /* protected by hard_start_xmit serialization */
 175
 176        /** command-related variables */
 177        u16 seqnum;
 178
 179        struct cmd_ctrl_node *cmd_array;
 180        /** Current command */
 181        struct cmd_ctrl_node *cur_cmd;
 182        int cur_cmd_retcode;
 183        /** command Queues */
 184        /** Free command buffers */
 185        struct list_head cmdfreeq;
 186        /** Pending command buffers */
 187        struct list_head cmdpendingq;
 188
 189        wait_queue_head_t cmd_pending;
 190
 191        /* Command responses sent from the hardware to the driver */
 192        u8 resp_idx;
 193        u8 resp_buf[2][LBS_UPLD_SIZE];
 194        u32 resp_len[2];
 195
 196        /* Events sent from hardware to driver */
 197        struct kfifo *event_fifo;
 198
 199        /* nickname */
 200        u8 nodename[16];
 201
 202        /** spin locks */
 203        spinlock_t driver_lock;
 204
 205        /** Timers */
 206        struct timer_list command_timer;
 207        int nr_retries;
 208        int cmd_timed_out;
 209
 210        /** current ssid/bssid related parameters*/
 211        struct current_bss_params curbssparams;
 212
 213        uint16_t mesh_tlv;
 214        u8 mesh_ssid[IW_ESSID_MAX_SIZE + 1];
 215        u8 mesh_ssid_len;
 216
 217        /* IW_MODE_* */
 218        u8 mode;
 219
 220        /* Scan results list */
 221        struct list_head network_list;
 222        struct list_head network_free_list;
 223        struct bss_descriptor *networks;
 224
 225        u16 beacon_period;
 226        u8 beacon_enable;
 227        u8 adhoccreate;
 228
 229        /** capability Info used in Association, start, join */
 230        u16 capability;
 231
 232        /** MAC address information */
 233        u8 current_addr[ETH_ALEN];
 234        u8 multicastlist[MRVDRV_MAX_MULTICAST_LIST_SIZE][ETH_ALEN];
 235        u32 nr_of_multicastmacaddr;
 236
 237        /** 802.11 statistics */
 238//      struct cmd_DS_802_11_GET_STAT wlan802_11Stat;
 239
 240        uint16_t enablehwauto;
 241        uint16_t ratebitmap;
 242
 243        u8 txretrycount;
 244
 245        /** Tx-related variables (for single packet tx) */
 246        struct sk_buff *currenttxskb;
 247
 248        /** NIC Operation characteristics */
 249        u16 mac_control;
 250        u32 connect_status;
 251        u32 mesh_connect_status;
 252        u16 regioncode;
 253        s16 txpower_cur;
 254        s16 txpower_min;
 255        s16 txpower_max;
 256
 257        /** POWER MANAGEMENT AND PnP SUPPORT */
 258        u8 surpriseremoved;
 259
 260        u16 psmode;             /* Wlan802_11PowermodeCAM=disable
 261                                   Wlan802_11PowermodeMAX_PSP=enable */
 262        u32 psstate;
 263        u8 needtowakeup;
 264
 265        struct assoc_request * pending_assoc_req;
 266        struct assoc_request * in_progress_assoc_req;
 267
 268        /** Encryption parameter */
 269        struct lbs_802_11_security secinfo;
 270
 271        /** WEP keys */
 272        struct enc_key wep_keys[4];
 273        u16 wep_tx_keyidx;
 274
 275        /** WPA keys */
 276        struct enc_key wpa_mcast_key;
 277        struct enc_key wpa_unicast_key;
 278
 279/*
 280 * In theory, the IE is limited to the IE length, 255,
 281 * but in practice 64 bytes are enough.
 282 */
 283#define MAX_WPA_IE_LEN 64
 284
 285        /** WPA Information Elements*/
 286        u8 wpa_ie[MAX_WPA_IE_LEN];
 287        u8 wpa_ie_len;
 288
 289        /** Requested Signal Strength*/
 290        u16 SNR[MAX_TYPE_B][MAX_TYPE_AVG];
 291        u16 NF[MAX_TYPE_B][MAX_TYPE_AVG];
 292        u8 RSSI[MAX_TYPE_B][MAX_TYPE_AVG];
 293        u8 rawSNR[DEFAULT_DATA_AVG_FACTOR];
 294        u8 rawNF[DEFAULT_DATA_AVG_FACTOR];
 295        u16 nextSNRNF;
 296        u16 numSNRNF;
 297
 298        u8 radio_on;
 299
 300        /** data rate stuff */
 301        u8 cur_rate;
 302
 303        /** RF calibration data */
 304
 305#define MAX_REGION_CHANNEL_NUM  2
 306        /** region channel data */
 307        struct region_channel region_channel[MAX_REGION_CHANNEL_NUM];
 308
 309        struct region_channel universal_channel[MAX_REGION_CHANNEL_NUM];
 310
 311        /** 11D and Domain Regulatory Data */
 312        struct lbs_802_11d_domain_reg domainreg;
 313        struct parsed_region_chan_11d parsed_region_chan;
 314
 315        /** FSM variable for 11d support */
 316        u32 enable11d;
 317
 318        /**     MISCELLANEOUS */
 319        struct lbs_offset_value offsetvalue;
 320
 321        u32 monitormode;
 322        u8 fw_ready;
 323};
 324
 325extern struct cmd_confirm_sleep confirm_sleep;
 326
 327/**
 328 *  @brief Structure used to store information for each beacon/probe response
 329 */
 330struct bss_descriptor {
 331        u8 bssid[ETH_ALEN];
 332
 333        u8 ssid[IW_ESSID_MAX_SIZE + 1];
 334        u8 ssid_len;
 335
 336        u16 capability;
 337        u32 rssi;
 338        u32 channel;
 339        u16 beaconperiod;
 340        __le16 atimwindow;
 341
 342        /* IW_MODE_AUTO, IW_MODE_ADHOC, IW_MODE_INFRA */
 343        u8 mode;
 344
 345        /* zero-terminated array of supported data rates */
 346        u8 rates[MAX_RATES + 1];
 347
 348        unsigned long last_scanned;
 349
 350        union ieee_phy_param_set phy;
 351        union ieee_ss_param_set ss;
 352
 353        struct ieee_ie_country_info_full_set countryinfo;
 354
 355        u8 wpa_ie[MAX_WPA_IE_LEN];
 356        size_t wpa_ie_len;
 357        u8 rsn_ie[MAX_WPA_IE_LEN];
 358        size_t rsn_ie_len;
 359
 360        u8 mesh;
 361
 362        struct list_head list;
 363};
 364
 365/** Association request
 366 *
 367 * Encapsulates all the options that describe a specific assocation request
 368 * or configuration of the wireless card's radio, mode, and security settings.
 369 */
 370struct assoc_request {
 371#define ASSOC_FLAG_SSID                 1
 372#define ASSOC_FLAG_CHANNEL              2
 373#define ASSOC_FLAG_BAND                 3
 374#define ASSOC_FLAG_MODE                 4
 375#define ASSOC_FLAG_BSSID                5
 376#define ASSOC_FLAG_WEP_KEYS             6
 377#define ASSOC_FLAG_WEP_TX_KEYIDX        7
 378#define ASSOC_FLAG_WPA_MCAST_KEY        8
 379#define ASSOC_FLAG_WPA_UCAST_KEY        9
 380#define ASSOC_FLAG_SECINFO              10
 381#define ASSOC_FLAG_WPA_IE               11
 382        unsigned long flags;
 383
 384        u8 ssid[IW_ESSID_MAX_SIZE + 1];
 385        u8 ssid_len;
 386        u8 channel;
 387        u8 band;
 388        u8 mode;
 389        u8 bssid[ETH_ALEN] __attribute__ ((aligned (2)));
 390
 391        /** WEP keys */
 392        struct enc_key wep_keys[4];
 393        u16 wep_tx_keyidx;
 394
 395        /** WPA keys */
 396        struct enc_key wpa_mcast_key;
 397        struct enc_key wpa_unicast_key;
 398
 399        struct lbs_802_11_security secinfo;
 400
 401        /** WPA Information Elements*/
 402        u8 wpa_ie[MAX_WPA_IE_LEN];
 403        u8 wpa_ie_len;
 404
 405        /* BSS to associate with for infrastructure of Ad-Hoc join */
 406        struct bss_descriptor bss;
 407};
 408
 409#endif
 410