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