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 wlan_adapter.
   5  */
   6#ifndef _WLAN_DEV_H_
   7#define _WLAN_DEV_H_
   8
   9#include <linux/netdevice.h>
  10#include <linux/wireless.h>
  11#include <linux/ethtool.h>
  12#include <linux/debugfs.h>
  13#include <net/ieee80211.h>
  14
  15#include "defs.h"
  16#include "scan.h"
  17
  18extern struct ethtool_ops libertas_ethtool_ops;
  19
  20#define MAX_BSSID_PER_CHANNEL           16
  21
  22#define NR_TX_QUEUE                     3
  23
  24/* For the extended Scan */
  25#define MAX_EXTENDED_SCAN_BSSID_LIST    MAX_BSSID_PER_CHANNEL * \
  26                                                MRVDRV_MAX_CHANNEL_SIZE + 1
  27
  28#define MAX_REGION_CHANNEL_NUM  2
  29
  30/** Chan-freq-TxPower mapping table*/
  31struct chan_freq_power {
  32        /** channel Number              */
  33        u16 channel;
  34        /** frequency of this channel   */
  35        u32 freq;
  36        /** Max allowed Tx power level  */
  37        u16 maxtxpower;
  38        /** TRUE:channel unsupported;  FLASE:supported*/
  39        u8 unsupported;
  40};
  41
  42/** region-band mapping table*/
  43struct region_channel {
  44        /** TRUE if this entry is valid              */
  45        u8 valid;
  46        /** region code for US, Japan ...            */
  47        u8 region;
  48        /** band B/G/A, used for BAND_CONFIG cmd             */
  49        u8 band;
  50        /** Actual No. of elements in the array below */
  51        u8 nrcfp;
  52        /** chan-freq-txpower mapping table*/
  53        struct chan_freq_power *CFP;
  54};
  55
  56struct wlan_802_11_security {
  57        u8 WPAenabled;
  58        u8 WPA2enabled;
  59        u8 wep_enabled;
  60        u8 auth_mode;
  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        u16 sp_error;
  82        u16 sp_offset;
  83        u16 sp_stabletime;
  84        u8 sp_calcontrol;
  85        u8 sp_extsleepclk;
  86        u16 sp_reserved;
  87};
  88
  89/* Mesh statistics */
  90struct wlan_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 _wlan_private {
 103        int open;
 104        int mesh_open;
 105        int infra_open;
 106        int mesh_autostart_enabled;
 107        __le16 boot2_version;
 108
 109        char name[DEV_NAME_LEN];
 110
 111        void *card;
 112        wlan_adapter *adapter;
 113        struct net_device *dev;
 114
 115        struct net_device_stats stats;
 116        struct net_device *mesh_dev; /* Virtual device */
 117        struct net_device *rtap_net_dev;
 118        struct ieee80211_device *ieee;
 119
 120        struct iw_statistics wstats;
 121        struct wlan_mesh_stats mstats;
 122        struct dentry *debugfs_dir;
 123        struct dentry *debugfs_debug;
 124        struct dentry *debugfs_files[6];
 125
 126        struct dentry *events_dir;
 127        struct dentry *debugfs_events_files[6];
 128
 129        struct dentry *regs_dir;
 130        struct dentry *debugfs_regs_files[6];
 131
 132        u32 mac_offset;
 133        u32 bbp_offset;
 134        u32 rf_offset;
 135
 136        /** Upload length */
 137        u32 upld_len;
 138        /* Upload buffer */
 139        u8 upld_buf[WLAN_UPLD_SIZE];
 140        /* Download sent:
 141           bit0 1/0=data_sent/data_tx_done,
 142           bit1 1/0=cmd_sent/cmd_tx_done,
 143           all other bits reserved 0 */
 144        u8 dnld_sent;
 145
 146        struct device *hotplug_device;
 147
 148        /** thread to service interrupts */
 149        struct task_struct *main_thread;
 150        wait_queue_head_t waitq;
 151        struct workqueue_struct *work_thread;
 152
 153        struct delayed_work scan_work;
 154        struct delayed_work assoc_work;
 155        struct work_struct sync_channel;
 156
 157        /** Hardware access */
 158        int (*hw_host_to_card) (wlan_private * priv, u8 type, u8 * payload, u16 nb);
 159        int (*hw_get_int_status) (wlan_private * priv, u8 *);
 160        int (*hw_read_event_cause) (wlan_private *);
 161};
 162
 163/** Association request
 164 *
 165 * Encapsulates all the options that describe a specific assocation request
 166 * or configuration of the wireless card's radio, mode, and security settings.
 167 */
 168struct assoc_request {
 169#define ASSOC_FLAG_SSID                 1
 170#define ASSOC_FLAG_CHANNEL              2
 171#define ASSOC_FLAG_BAND                 3
 172#define ASSOC_FLAG_MODE                 4
 173#define ASSOC_FLAG_BSSID                5
 174#define ASSOC_FLAG_WEP_KEYS             6
 175#define ASSOC_FLAG_WEP_TX_KEYIDX        7
 176#define ASSOC_FLAG_WPA_MCAST_KEY        8
 177#define ASSOC_FLAG_WPA_UCAST_KEY        9
 178#define ASSOC_FLAG_SECINFO              10
 179#define ASSOC_FLAG_WPA_IE               11
 180        unsigned long flags;
 181
 182        u8 ssid[IW_ESSID_MAX_SIZE + 1];
 183        u8 ssid_len;
 184        u8 channel;
 185        u8 band;
 186        u8 mode;
 187        u8 bssid[ETH_ALEN];
 188
 189        /** WEP keys */
 190        struct enc_key wep_keys[4];
 191        u16 wep_tx_keyidx;
 192
 193        /** WPA keys */
 194        struct enc_key wpa_mcast_key;
 195        struct enc_key wpa_unicast_key;
 196
 197        struct wlan_802_11_security secinfo;
 198
 199        /** WPA Information Elements*/
 200        u8 wpa_ie[MAX_WPA_IE_LEN];
 201        u8 wpa_ie_len;
 202
 203        /* BSS to associate with for infrastructure of Ad-Hoc join */
 204        struct bss_descriptor bss;
 205};
 206
 207/** Wlan adapter data structure*/
 208struct _wlan_adapter {
 209        /** STATUS variables */
 210        u8 fwreleasenumber[4];
 211        u32 fwcapinfo;
 212        /* protected with big lock */
 213
 214        struct mutex lock;
 215
 216        u8 tmptxbuf[WLAN_UPLD_SIZE];
 217        /* protected by hard_start_xmit serialization */
 218
 219        /** command-related variables */
 220        u16 seqnum;
 221        /* protected by big lock */
 222
 223        struct cmd_ctrl_node *cmd_array;
 224        /** Current command */
 225        struct cmd_ctrl_node *cur_cmd;
 226        int cur_cmd_retcode;
 227        /** command Queues */
 228        /** Free command buffers */
 229        struct list_head cmdfreeq;
 230        /** Pending command buffers */
 231        struct list_head cmdpendingq;
 232
 233        wait_queue_head_t cmd_pending;
 234        u8 nr_cmd_pending;
 235        /* command related variables protected by adapter->driver_lock */
 236
 237        /** Async and Sync Event variables */
 238        u32 intcounter;
 239        u32 eventcause;
 240        u8 nodename[16];        /* nickname */
 241
 242        /** spin locks */
 243        spinlock_t driver_lock;
 244
 245        /** Timers */
 246        struct timer_list command_timer;
 247
 248        /* TX queue used in PS mode */
 249        spinlock_t txqueue_lock;
 250        struct sk_buff *tx_queue_ps[NR_TX_QUEUE];
 251        unsigned int tx_queue_idx;
 252
 253        u8 hisregcpy;
 254
 255        /** current ssid/bssid related parameters*/
 256        struct current_bss_params curbssparams;
 257
 258        /* IW_MODE_* */
 259        u8 mode;
 260
 261        /* Scan results list */
 262        struct list_head network_list;
 263        struct list_head network_free_list;
 264        struct bss_descriptor *networks;
 265
 266        u8 adhoccreate;
 267
 268        /** capability Info used in Association, start, join */
 269        u16 capability;
 270
 271        /** MAC address information */
 272        u8 current_addr[ETH_ALEN];
 273        u8 multicastlist[MRVDRV_MAX_MULTICAST_LIST_SIZE][ETH_ALEN];
 274        u32 nr_of_multicastmacaddr;
 275
 276        /** 802.11 statistics */
 277//      struct cmd_DS_802_11_GET_STAT wlan802_11Stat;
 278
 279        u16 enablehwauto;
 280        u16 ratebitmap;
 281
 282        u32 fragthsd;
 283        u32 rtsthsd;
 284
 285        u8 txretrycount;
 286
 287        /** Tx-related variables (for single packet tx) */
 288        struct sk_buff *currenttxskb;
 289        u16 TxLockFlag;
 290
 291        /** NIC Operation characteristics */
 292        u16 currentpacketfilter;
 293        u32 connect_status;
 294        u16 regioncode;
 295        u16 txpowerlevel;
 296
 297        /** POWER MANAGEMENT AND PnP SUPPORT */
 298        u8 surpriseremoved;
 299
 300        u16 psmode;             /* Wlan802_11PowermodeCAM=disable
 301                                   Wlan802_11PowermodeMAX_PSP=enable */
 302        u32 psstate;
 303        u8 needtowakeup;
 304
 305        struct PS_CMD_ConfirmSleep libertas_ps_confirm_sleep;
 306
 307        struct assoc_request * pending_assoc_req;
 308        struct assoc_request * in_progress_assoc_req;
 309
 310        /** Encryption parameter */
 311        struct wlan_802_11_security secinfo;
 312
 313        /** WEP keys */
 314        struct enc_key wep_keys[4];
 315        u16 wep_tx_keyidx;
 316
 317        /** WPA keys */
 318        struct enc_key wpa_mcast_key;
 319        struct enc_key wpa_unicast_key;
 320
 321        /** WPA Information Elements*/
 322        u8 wpa_ie[MAX_WPA_IE_LEN];
 323        u8 wpa_ie_len;
 324
 325        /** Requested Signal Strength*/
 326        u16 SNR[MAX_TYPE_B][MAX_TYPE_AVG];
 327        u16 NF[MAX_TYPE_B][MAX_TYPE_AVG];
 328        u8 RSSI[MAX_TYPE_B][MAX_TYPE_AVG];
 329        u8 rawSNR[DEFAULT_DATA_AVG_FACTOR];
 330        u8 rawNF[DEFAULT_DATA_AVG_FACTOR];
 331        u16 nextSNRNF;
 332        u16 numSNRNF;
 333
 334        u8 radioon;
 335        u32 preamble;
 336
 337        /** data rate stuff */
 338        u8 cur_rate;
 339        u8 auto_rate;
 340
 341        /** sleep_params */
 342        struct sleep_params sp;
 343
 344        /** RF calibration data */
 345
 346#define MAX_REGION_CHANNEL_NUM  2
 347        /** region channel data */
 348        struct region_channel region_channel[MAX_REGION_CHANNEL_NUM];
 349
 350        struct region_channel universal_channel[MAX_REGION_CHANNEL_NUM];
 351
 352        /** 11D and Domain Regulatory Data */
 353        struct wlan_802_11d_domain_reg domainreg;
 354        struct parsed_region_chan_11d parsed_region_chan;
 355
 356        /** FSM variable for 11d support */
 357        u32 enable11d;
 358
 359        /**     MISCELLANEOUS */
 360        u8 *prdeeprom;
 361        struct wlan_offset_value offsetvalue;
 362
 363        struct cmd_ds_802_11_get_log logmsg;
 364
 365        u32 monitormode;
 366        u8 fw_ready;
 367
 368        u8 last_scanned_channel;
 369};
 370
 371#endif                          /* _WLAN_DEV_H_ */
 372