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 17 extern 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*/ 30 struct 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*/ 42 struct 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 55 struct 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 */ 64 struct 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 */ 80 struct 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 */ 90 struct 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 */ 102 struct lbs_private { 103 int mesh_open; 104 int infra_open; 105 int mesh_autostart_enabled; 106 107 char name[DEV_NAME_LEN]; 108 109 void *card; 110 struct net_device *dev; 111 112 struct net_device_stats stats; 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 char ps_supported; 264 u8 needtowakeup; 265 266 struct assoc_request * pending_assoc_req; 267 struct assoc_request * in_progress_assoc_req; 268 269 /** Encryption parameter */ 270 struct lbs_802_11_security secinfo; 271 272 /** WEP keys */ 273 struct enc_key wep_keys[4]; 274 u16 wep_tx_keyidx; 275 276 /** WPA keys */ 277 struct enc_key wpa_mcast_key; 278 struct enc_key wpa_unicast_key; 279 280 /* 281 * In theory, the IE is limited to the IE length, 255, 282 * but in practice 64 bytes are enough. 283 */ 284 #define MAX_WPA_IE_LEN 64 285 286 /** WPA Information Elements*/ 287 u8 wpa_ie[MAX_WPA_IE_LEN]; 288 u8 wpa_ie_len; 289 290 /** Requested Signal Strength*/ 291 u16 SNR[MAX_TYPE_B][MAX_TYPE_AVG]; 292 u16 NF[MAX_TYPE_B][MAX_TYPE_AVG]; 293 u8 RSSI[MAX_TYPE_B][MAX_TYPE_AVG]; 294 u8 rawSNR[DEFAULT_DATA_AVG_FACTOR]; 295 u8 rawNF[DEFAULT_DATA_AVG_FACTOR]; 296 u16 nextSNRNF; 297 u16 numSNRNF; 298 299 u8 radio_on; 300 301 /** data rate stuff */ 302 u8 cur_rate; 303 304 /** RF calibration data */ 305 306 #define MAX_REGION_CHANNEL_NUM 2 307 /** region channel data */ 308 struct region_channel region_channel[MAX_REGION_CHANNEL_NUM]; 309 310 struct region_channel universal_channel[MAX_REGION_CHANNEL_NUM]; 311 312 /** 11D and Domain Regulatory Data */ 313 struct lbs_802_11d_domain_reg domainreg; 314 struct parsed_region_chan_11d parsed_region_chan; 315 316 /** FSM variable for 11d support */ 317 u32 enable11d; 318 319 /** MISCELLANEOUS */ 320 struct lbs_offset_value offsetvalue; 321 322 u32 monitormode; 323 u8 fw_ready; 324 }; 325 326 extern struct cmd_confirm_sleep confirm_sleep; 327 328 /** 329 * @brief Structure used to store information for each beacon/probe response 330 */ 331 struct bss_descriptor { 332 u8 bssid[ETH_ALEN]; 333 334 u8 ssid[IW_ESSID_MAX_SIZE + 1]; 335 u8 ssid_len; 336 337 u16 capability; 338 u32 rssi; 339 u32 channel; 340 u16 beaconperiod; 341 u32 atimwindow; 342 343 /* IW_MODE_AUTO, IW_MODE_ADHOC, IW_MODE_INFRA */ 344 u8 mode; 345 346 /* zero-terminated array of supported data rates */ 347 u8 rates[MAX_RATES + 1]; 348 349 unsigned long last_scanned; 350 351 union ieeetypes_phyparamset phyparamset; 352 union IEEEtypes_ssparamset ssparamset; 353 354 struct ieeetypes_countryinfofullset countryinfo; 355 356 u8 wpa_ie[MAX_WPA_IE_LEN]; 357 size_t wpa_ie_len; 358 u8 rsn_ie[MAX_WPA_IE_LEN]; 359 size_t rsn_ie_len; 360 361 u8 mesh; 362 363 struct list_head list; 364 }; 365 366 /** Association request 367 * 368 * Encapsulates all the options that describe a specific assocation request 369 * or configuration of the wireless card's radio, mode, and security settings. 370 */ 371 struct assoc_request { 372 #define ASSOC_FLAG_SSID 1 373 #define ASSOC_FLAG_CHANNEL 2 374 #define ASSOC_FLAG_BAND 3 375 #define ASSOC_FLAG_MODE 4 376 #define ASSOC_FLAG_BSSID 5 377 #define ASSOC_FLAG_WEP_KEYS 6 378 #define ASSOC_FLAG_WEP_TX_KEYIDX 7 379 #define ASSOC_FLAG_WPA_MCAST_KEY 8 380 #define ASSOC_FLAG_WPA_UCAST_KEY 9 381 #define ASSOC_FLAG_SECINFO 10 382 #define ASSOC_FLAG_WPA_IE 11 383 unsigned long flags; 384 385 u8 ssid[IW_ESSID_MAX_SIZE + 1]; 386 u8 ssid_len; 387 u8 channel; 388 u8 band; 389 u8 mode; 390 u8 bssid[ETH_ALEN] __attribute__ ((aligned (2))); 391 392 /** WEP keys */ 393 struct enc_key wep_keys[4]; 394 u16 wep_tx_keyidx; 395 396 /** WPA keys */ 397 struct enc_key wpa_mcast_key; 398 struct enc_key wpa_unicast_key; 399 400 struct lbs_802_11_security secinfo; 401 402 /** WPA Information Elements*/ 403 u8 wpa_ie[MAX_WPA_IE_LEN]; 404 u8 wpa_ie_len; 405 406 /* BSS to associate with for infrastructure of Ad-Hoc join */ 407 struct bss_descriptor bss; 408 }; 409 410 #endif 411