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..
9 #include <linux/netdevice.h>
10 #include <linux/wireless.h>
11 #include <linux/ethtool.h>
12 #include <linux/debugfs.h>
17 extern const struct ethtool_ops lbs_ethtool_ops;
19 #define MAX_BSSID_PER_CHANNEL 16
23 /* For the extended Scan */
24 #define MAX_EXTENDED_SCAN_BSSID_LIST MAX_BSSID_PER_CHANNEL * \
25 MRVDRV_MAX_CHANNEL_SIZE + 1
27 #define MAX_REGION_CHANNEL_NUM 2
29 /** Chan-freq-TxPower mapping table*/
30 struct chan_freq_power {
33 /** frequency of this channel */
35 /** Max allowed Tx power level */
37 /** TRUE:channel unsupported; FLASE:supported*/
41 /** region-band mapping table*/
42 struct region_channel {
43 /** TRUE if this entry is valid */
45 /** region code for US, Japan ... */
47 /** band B/G/A, used for BAND_CONFIG cmd */
49 /** Actual No. of elements in the array below */
51 /** chan-freq-txpower mapping table*/
52 struct chan_freq_power *CFP;
55 struct lbs_802_11_security {
63 /** Current Basic Service Set State Structure */
64 struct current_bss_params {
68 u8 ssid[IW_ESSID_MAX_SIZE + 1];
75 /** zero-terminated array of supported data rates */
76 u8 rates[MAX_RATES + 1];
83 uint16_t sp_stabletime;
84 uint8_t sp_calcontrol;
85 uint8_t sp_extsleepclk;
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 */
101 /** Private structure for the MV device */
103 struct wireless_dev *wdev;
107 int mesh_autostart_enabled;
109 char name[DEV_NAME_LEN];
112 struct net_device *dev;
114 struct net_device *mesh_dev; /* Virtual device */
115 struct net_device *rtap_net_dev;
117 struct iw_statistics wstats;
118 struct lbs_mesh_stats mstats;
119 struct dentry *debugfs_dir;
120 struct dentry *debugfs_debug;
121 struct dentry *debugfs_files[6];
123 struct dentry *events_dir;
124 struct dentry *debugfs_events_files[6];
126 struct dentry *regs_dir;
127 struct dentry *debugfs_regs_files[6];
133 /** Deep sleep flag */
135 /** Auto deep sleep enabled flag */
136 int is_auto_deep_sleep_enabled;
137 /** Device wakeup required flag */
138 int wakeup_dev_required;
139 /** Auto deep sleep flag*/
140 int is_activity_detected;
141 /** Auto deep sleep timeout (in miliseconds) */
142 int auto_deep_sleep_timeout;
144 /** Deep sleep wait queue */
145 wait_queue_head_t ds_awake_q;
148 bit0 1/0=data_sent/data_tx_done,
149 bit1 1/0=cmd_sent/cmd_tx_done,
150 all other bits reserved 0 */
153 /** thread to service interrupts */
154 struct task_struct *main_thread;
155 wait_queue_head_t waitq;
156 struct workqueue_struct *work_thread;
158 struct work_struct mcast_work;
161 struct delayed_work scan_work;
162 struct delayed_work assoc_work;
163 struct work_struct sync_channel;
164 /* remember which channel was scanned last, != 0 if currently scanning */
166 u8 scan_ssid[IW_ESSID_MAX_SIZE + 1];
169 /** Hardware access */
170 int (*hw_host_to_card) (struct lbs_private *priv, u8 type, u8 *payload, u16 nb);
171 void (*reset_card) (struct lbs_private *priv);
172 int (*enter_deep_sleep) (struct lbs_private *priv);
173 int (*exit_deep_sleep) (struct lbs_private *priv);
174 int (*reset_deep_sleep_wakeup) (struct lbs_private *priv);
177 uint32_t wol_criteria;
181 /** Wlan adapter data structure*/
182 /** STATUS variables */
188 /* TX packet ready to be sent... */
189 int tx_pending_len; /* -1 while building packet */
191 u8 tx_pending_buf[LBS_UPLD_SIZE];
192 /* protected by hard_start_xmit serialization */
194 /** command-related variables */
197 struct cmd_ctrl_node *cmd_array;
198 /** Current command */
199 struct cmd_ctrl_node *cur_cmd;
201 /** command Queues */
202 /** Free command buffers */
203 struct list_head cmdfreeq;
204 /** Pending command buffers */
205 struct list_head cmdpendingq;
207 wait_queue_head_t cmd_pending;
209 /* Command responses sent from the hardware to the driver */
211 u8 resp_buf[2][LBS_UPLD_SIZE];
214 /* Events sent from hardware to driver */
215 struct kfifo *event_fifo;
221 spinlock_t driver_lock;
224 struct timer_list command_timer;
225 struct timer_list auto_deepsleep_timer;
229 /** current ssid/bssid related parameters*/
230 struct current_bss_params curbssparams;
233 u8 mesh_ssid[IW_ESSID_MAX_SIZE + 1];
239 /* Scan results list */
240 struct list_head network_list;
241 struct list_head network_free_list;
242 struct bss_descriptor *networks;
248 /** capability Info used in Association, start, join */
251 /** MAC address information */
252 u8 current_addr[ETH_ALEN];
253 u8 multicastlist[MRVDRV_MAX_MULTICAST_LIST_SIZE][ETH_ALEN];
254 u32 nr_of_multicastmacaddr;
256 /** 802.11 statistics */
257 // struct cmd_DS_802_11_GET_STAT wlan802_11Stat;
259 uint16_t enablehwauto;
264 /** Tx-related variables (for single packet tx) */
265 struct sk_buff *currenttxskb;
267 /** NIC Operation characteristics */
270 u32 mesh_connect_status;
276 /** POWER MANAGEMENT AND PnP SUPPORT */
279 u16 psmode; /* Wlan802_11PowermodeCAM=disable
280 Wlan802_11PowermodeMAX_PSP=enable */
284 struct assoc_request * pending_assoc_req;
285 struct assoc_request * in_progress_assoc_req;
287 /** Encryption parameter */
288 struct lbs_802_11_security secinfo;
291 struct enc_key wep_keys[4];
295 struct enc_key wpa_mcast_key;
296 struct enc_key wpa_unicast_key;
299 * In theory, the IE is limited to the IE length, 255,
300 * but in practice 64 bytes are enough.
302 #define MAX_WPA_IE_LEN 64
304 /** WPA Information Elements*/
305 u8 wpa_ie[MAX_WPA_IE_LEN];
308 /** Requested Signal Strength*/
309 u16 SNR[MAX_TYPE_B][MAX_TYPE_AVG];
310 u16 NF[MAX_TYPE_B][MAX_TYPE_AVG];
311 u8 RSSI[MAX_TYPE_B][MAX_TYPE_AVG];
312 u8 rawSNR[DEFAULT_DATA_AVG_FACTOR];
313 u8 rawNF[DEFAULT_DATA_AVG_FACTOR];
319 /** data rate stuff */
322 /** RF calibration data */
324 #define MAX_REGION_CHANNEL_NUM 2
325 /** region channel data */
326 struct region_channel region_channel[MAX_REGION_CHANNEL_NUM];
328 struct region_channel universal_channel[MAX_REGION_CHANNEL_NUM];
330 /** 11D and Domain Regulatory Data */
331 struct lbs_802_11d_domain_reg domainreg;
332 struct parsed_region_chan_11d parsed_region_chan;
334 /** FSM variable for 11d support */
338 struct lbs_offset_value offsetvalue;
344 extern struct cmd_confirm_sleep confirm_sleep;
347 * @brief Structure used to store information for each beacon/probe response
349 struct bss_descriptor {
352 u8 ssid[IW_ESSID_MAX_SIZE + 1];
361 /* IW_MODE_AUTO, IW_MODE_ADHOC, IW_MODE_INFRA */
364 /* zero-terminated array of supported data rates */
365 u8 rates[MAX_RATES + 1];
367 unsigned long last_scanned;
369 union ieee_phy_param_set phy;
370 union ieee_ss_param_set ss;
372 struct ieee_ie_country_info_full_set countryinfo;
374 u8 wpa_ie[MAX_WPA_IE_LEN];
376 u8 rsn_ie[MAX_WPA_IE_LEN];
381 struct list_head list;
384 /** Association request
386 * Encapsulates all the options that describe a specific assocation request
387 * or configuration of the wireless card's radio, mode, and security settings.
389 struct assoc_request {
390 #define ASSOC_FLAG_SSID 1
391 #define ASSOC_FLAG_CHANNEL 2
392 #define ASSOC_FLAG_BAND 3
393 #define ASSOC_FLAG_MODE 4
394 #define ASSOC_FLAG_BSSID 5
395 #define ASSOC_FLAG_WEP_KEYS 6
396 #define ASSOC_FLAG_WEP_TX_KEYIDX 7
397 #define ASSOC_FLAG_WPA_MCAST_KEY 8
398 #define ASSOC_FLAG_WPA_UCAST_KEY 9
399 #define ASSOC_FLAG_SECINFO 10
400 #define ASSOC_FLAG_WPA_IE 11
403 u8 ssid[IW_ESSID_MAX_SIZE + 1];
408 u8 bssid[ETH_ALEN] __attribute__ ((aligned (2)));
411 struct enc_key wep_keys[4];
415 struct enc_key wpa_mcast_key;
416 struct enc_key wpa_unicast_key;
418 struct lbs_802_11_security secinfo;
420 /** WPA Information Elements*/
421 u8 wpa_ie[MAX_WPA_IE_LEN];
424 /* BSS to associate with for infrastructure of Ad-Hoc join */
425 struct bss_descriptor bss;