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#include "thread.h" 18 19extern struct ethtool_ops libertas_ethtool_ops; 20 21#define MAX_BSSID_PER_CHANNEL 16 22 23#define NR_TX_QUEUE 3 24 25/* For the extended Scan */ 26#define MAX_EXTENDED_SCAN_BSSID_LIST MAX_BSSID_PER_CHANNEL * \ 27 MRVDRV_MAX_CHANNEL_SIZE + 1 28 29#define MAX_REGION_CHANNEL_NUM 2 30 31/** Chan-freq-TxPower mapping table*/ 32struct chan_freq_power { 33 /** channel Number */ 34 u16 channel; 35 /** frequency of this channel */ 36 u32 freq; 37 /** Max allowed Tx power level */ 38 u16 maxtxpower; 39 /** TRUE:channel unsupported; FLASE:supported*/ 40 u8 unsupported; 41}; 42 43/** region-band mapping table*/ 44struct region_channel { 45 /** TRUE if this entry is valid */ 46 u8 valid; 47 /** region code for US, Japan ... */ 48 u8 region; 49 /** band B/G/A, used for BAND_CONFIG cmd */ 50 u8 band; 51 /** Actual No. of elements in the array below */ 52 u8 nrcfp; 53 /** chan-freq-txpower mapping table*/ 54 struct chan_freq_power *CFP; 55}; 56 57struct wlan_802_11_security { 58 u8 WPAenabled; 59 u8 WPA2enabled; 60 u8 wep_enabled; 61 u8 auth_mode; 62}; 63 64/** Current Basic Service Set State Structure */ 65struct current_bss_params { 66 /** bssid */ 67 u8 bssid[ETH_ALEN]; 68 /** ssid */ 69 u8 ssid[IW_ESSID_MAX_SIZE + 1]; 70 u8 ssid_len; 71 72 /** band */ 73 u8 band; 74 /** channel */ 75 u8 channel; 76 /** number of rates supported */ 77 int numofrates; 78 /** supported rates*/ 79 u8 datarates[WLAN_SUPPORTED_RATES]; 80}; 81 82/** sleep_params */ 83struct sleep_params { 84 u16 sp_error; 85 u16 sp_offset; 86 u16 sp_stabletime; 87 u8 sp_calcontrol; 88 u8 sp_extsleepclk; 89 u16 sp_reserved; 90}; 91 92/* Mesh statistics */ 93struct wlan_mesh_stats { 94 u32 fwd_bcast_cnt; /* Fwd: Broadcast counter */ 95 u32 fwd_unicast_cnt; /* Fwd: Unicast counter */ 96 u32 fwd_drop_ttl; /* Fwd: TTL zero */ 97 u32 fwd_drop_rbt; /* Fwd: Recently Broadcasted */ 98 u32 fwd_drop_noroute; /* Fwd: No route to Destination */ 99 u32 fwd_drop_nobuf; /* Fwd: Run out of internal buffers */ 100 u32 drop_blind; /* Rx: Dropped by blinding table */ 101 u32 tx_failed_cnt; /* Tx: Failed transmissions */ 102}; 103 104/** Private structure for the MV device */ 105struct _wlan_private { 106 int open; 107 int mesh_open; 108 int infra_open; 109 110 char name[DEV_NAME_LEN]; 111 112 void *card; 113 wlan_adapter *adapter; 114 struct net_device *dev; 115 116 struct net_device_stats stats; 117 struct net_device *mesh_dev ; /* Virtual device */ 118 119 struct iw_statistics wstats; 120 struct wlan_mesh_stats mstats; 121 struct dentry *debugfs_dir; 122 struct dentry *debugfs_debug; 123 struct dentry *debugfs_files[6]; 124 125 struct dentry *events_dir; 126 struct dentry *debugfs_events_files[6]; 127 128 struct dentry *regs_dir; 129 struct dentry *debugfs_regs_files[6]; 130 131 u32 mac_offset; 132 u32 bbp_offset; 133 u32 rf_offset; 134 135 /** Upload length */ 136 u32 upld_len; 137 /* Upload buffer */ 138 u8 upld_buf[WLAN_UPLD_SIZE]; 139 /* Download sent: 140 bit0 1/0=data_sent/data_tx_done, 141 bit1 1/0=cmd_sent/cmd_tx_done, 142 all other bits reserved 0 */ 143 u8 dnld_sent; 144 145 const struct firmware *firmware; 146 struct device *hotplug_device; 147 148 /** thread to service interrupts */ 149 struct wlan_thread mainthread; 150 151 struct delayed_work assoc_work; 152 struct workqueue_struct *assoc_thread; 153 struct work_struct sync_channel; 154 155 /** Hardware access */ 156 int (*hw_register_dev) (wlan_private * priv); 157 int (*hw_unregister_dev) (wlan_private *); 158 int (*hw_prog_firmware) (wlan_private *); 159 int (*hw_host_to_card) (wlan_private * priv, u8 type, u8 * payload, u16 nb); 160 int (*hw_get_int_status) (wlan_private * priv, u8 *); 161 int (*hw_read_event_cause) (wlan_private *); 162}; 163 164/** Association request 165 * 166 * Encapsulates all the options that describe a specific assocation request 167 * or configuration of the wireless card's radio, mode, and security settings. 168 */ 169struct assoc_request { 170#define ASSOC_FLAG_SSID 1 171#define ASSOC_FLAG_CHANNEL 2 172#define ASSOC_FLAG_BAND 3 173#define ASSOC_FLAG_MODE 4 174#define ASSOC_FLAG_BSSID 5 175#define ASSOC_FLAG_WEP_KEYS 6 176#define ASSOC_FLAG_WEP_TX_KEYIDX 7 177#define ASSOC_FLAG_WPA_MCAST_KEY 8 178#define ASSOC_FLAG_WPA_UCAST_KEY 9 179#define ASSOC_FLAG_SECINFO 10 180#define ASSOC_FLAG_WPA_IE 11 181 unsigned long flags; 182 183 u8 ssid[IW_ESSID_MAX_SIZE + 1]; 184 u8 ssid_len; 185 u8 channel; 186 u8 band; 187 u8 mode; 188 u8 bssid[ETH_ALEN]; 189 190 /** WEP keys */ 191 struct WLAN_802_11_KEY wep_keys[4]; 192 u16 wep_tx_keyidx; 193 194 /** WPA keys */ 195 struct WLAN_802_11_KEY wpa_mcast_key; 196 struct WLAN_802_11_KEY wpa_unicast_key; 197 198 struct wlan_802_11_security secinfo; 199 200 /** WPA Information Elements*/ 201 u8 wpa_ie[MAX_WPA_IE_LEN]; 202 u8 wpa_ie_len; 203 204 /* BSS to associate with for infrastructure of Ad-Hoc join */ 205 struct bss_descriptor bss; 206}; 207 208/** Wlan adapter data structure*/ 209struct _wlan_adapter { 210 /** STATUS variables */ 211 u8 fwreleasenumber[4]; 212 u32 fwcapinfo; 213 /* protected with big lock */ 214 215 struct mutex lock; 216 217 u8 tmptxbuf[WLAN_UPLD_SIZE]; 218 /* protected by hard_start_xmit serialization */ 219 220 /** command-related variables */ 221 u16 seqnum; 222 /* protected by big lock */ 223 224 struct cmd_ctrl_node *cmd_array; 225 /** Current command */ 226 struct cmd_ctrl_node *cur_cmd; 227 int cur_cmd_retcode; 228 /** command Queues */ 229 /** Free command buffers */ 230 struct list_head cmdfreeq; 231 /** Pending command buffers */ 232 struct list_head cmdpendingq; 233 234 wait_queue_head_t cmd_pending; 235 u8 nr_cmd_pending; 236 /* command related variables protected by adapter->driver_lock */ 237 238 /** Async and Sync Event variables */ 239 u32 intcounter; 240 u32 eventcause; 241 u8 nodename[16]; /* nickname */ 242 243 /** spin locks */ 244 spinlock_t driver_lock; 245 246 /** Timers */ 247 struct timer_list command_timer; 248 249 /* TX queue used in PS mode */ 250 spinlock_t txqueue_lock; 251 struct sk_buff *tx_queue_ps[NR_TX_QUEUE]; 252 unsigned int tx_queue_idx; 253 254 u8 hisregcpy; 255 256 /** current ssid/bssid related parameters*/ 257 struct current_bss_params curbssparams; 258 259 /* IW_MODE_* */ 260 u8 mode; 261 262 u8 prev_ssid[IW_ESSID_MAX_SIZE + 1]; 263 u8 prev_ssid_len; 264 u8 prev_bssid[ETH_ALEN]; 265 266 /* Scan results list */ 267 struct list_head network_list; 268 struct list_head network_free_list; 269 struct bss_descriptor *networks; 270 271 u8 scantype; 272 u32 scanmode; 273 274 u16 beaconperiod; 275 u8 adhoccreate; 276 277 /** capability Info used in Association, start, join */ 278 struct ieeetypes_capinfo capinfo; 279 280 /** MAC address information */ 281 u8 current_addr[ETH_ALEN]; 282 u8 multicastlist[MRVDRV_MAX_MULTICAST_LIST_SIZE][ETH_ALEN]; 283 u32 nr_of_multicastmacaddr; 284 285 /** 802.11 statistics */ 286// struct cmd_DS_802_11_GET_STAT wlan802_11Stat; 287 288 u16 enablehwauto; 289 u16 ratebitmap; 290 /** control G rates */ 291 u8 adhoc_grate_enabled; 292 293 u32 txantenna; 294 u32 rxantenna; 295 296 u32 fragthsd; 297 u32 rtsthsd; 298 299 u32 datarate; 300 u8 is_datarate_auto; 301 302 u16 listeninterval; 303 u16 prescan; 304 u8 txretrycount; 305 306 /** Tx-related variables (for single packet tx) */ 307 struct sk_buff *currenttxskb; 308 u16 TxLockFlag; 309 310 /** NIC Operation characteristics */ 311 u16 currentpacketfilter; 312 u32 connect_status; 313 u16 regioncode; 314 u16 regiontableindex; 315 u16 txpowerlevel; 316 317 /** POWER MANAGEMENT AND PnP SUPPORT */ 318 u8 surpriseremoved; 319 u16 atimwindow; 320 321 u16 psmode; /* Wlan802_11PowermodeCAM=disable 322 Wlan802_11PowermodeMAX_PSP=enable */ 323 u16 multipledtim; 324 u32 psstate; 325 u8 needtowakeup; 326 327 struct PS_CMD_ConfirmSleep libertas_ps_confirm_sleep; 328 u16 locallisteninterval; 329 u16 nullpktinterval; 330 331 struct assoc_request * pending_assoc_req; 332 struct assoc_request * in_progress_assoc_req; 333 334 /** Encryption parameter */ 335 struct wlan_802_11_security secinfo; 336 337 /** WEP keys */ 338 struct WLAN_802_11_KEY wep_keys[4]; 339 u16 wep_tx_keyidx; 340 341 /** WPA keys */ 342 struct WLAN_802_11_KEY wpa_mcast_key; 343 struct WLAN_802_11_KEY wpa_unicast_key; 344 345 /** WPA Information Elements*/ 346 u8 wpa_ie[MAX_WPA_IE_LEN]; 347 u8 wpa_ie_len; 348 349 u16 rxantennamode; 350 u16 txantennamode; 351 352 /** Requested Signal Strength*/ 353 u16 bcn_avg_factor; 354 u16 data_avg_factor; 355 u16 SNR[MAX_TYPE_B][MAX_TYPE_AVG]; 356 u16 NF[MAX_TYPE_B][MAX_TYPE_AVG]; 357 u8 RSSI[MAX_TYPE_B][MAX_TYPE_AVG]; 358 u8 rawSNR[DEFAULT_DATA_AVG_FACTOR]; 359 u8 rawNF[DEFAULT_DATA_AVG_FACTOR]; 360 u16 nextSNRNF; 361 u16 numSNRNF; 362 u16 rxpd_rate; 363 364 u8 radioon; 365 u32 preamble; 366 367 /** Multi bands Parameter*/ 368 u8 libertas_supported_rates[G_SUPPORTED_RATES]; 369 370 /** Blue Tooth Co-existence Arbitration */ 371 372 /** sleep_params */ 373 struct sleep_params sp; 374 375 /** RF calibration data */ 376 377#define MAX_REGION_CHANNEL_NUM 2 378 /** region channel data */ 379 struct region_channel region_channel[MAX_REGION_CHANNEL_NUM]; 380 381 struct region_channel universal_channel[MAX_REGION_CHANNEL_NUM]; 382 383 /** 11D and Domain Regulatory Data */ 384 struct wlan_802_11d_domain_reg domainreg; 385 struct parsed_region_chan_11d parsed_region_chan; 386 387 /** FSM variable for 11d support */ 388 u32 enable11d; 389 390 /** MISCELLANEOUS */ 391 u8 *prdeeprom; 392 struct wlan_offset_value offsetvalue; 393 394 struct cmd_ds_802_11_get_log logmsg; 395 u16 scanprobes; 396 397 u32 pkttxctrl; 398 399 u16 txrate; 400 u32 linkmode; 401 u32 radiomode; 402 u32 debugmode; 403 u8 fw_ready; 404 405 u8 last_scanned_channel; 406}; 407 408#endif /* _WLAN_DEV_H_ */ 409