dev.h 8.2 KB
Newer Older
1 2 3
/**
  * This file contains definitions and data structures specific
  * to Marvell 802.11 NIC. It contains the Device Information
4
  * structure struct lbs_adapter.
5
  */
6 7
#ifndef _LBS_DEV_H_
#define _LBS_DEV_H_
8 9 10 11 12

#include <linux/netdevice.h>
#include <linux/wireless.h>
#include <linux/ethtool.h>
#include <linux/debugfs.h>
13
#include <net/ieee80211.h>
14 15 16 17

#include "defs.h"
#include "scan.h"

18
extern struct ethtool_ops lbs_ethtool_ops;
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55

#define	MAX_BSSID_PER_CHANNEL		16

#define NR_TX_QUEUE			3

/* For the extended Scan */
#define MAX_EXTENDED_SCAN_BSSID_LIST    MAX_BSSID_PER_CHANNEL * \
						MRVDRV_MAX_CHANNEL_SIZE + 1

#define	MAX_REGION_CHANNEL_NUM	2

/** Chan-freq-TxPower mapping table*/
struct chan_freq_power {
	/** channel Number		*/
	u16 channel;
	/** frequency of this channel	*/
	u32 freq;
	/** Max allowed Tx power level	*/
	u16 maxtxpower;
	/** TRUE:channel unsupported;  FLASE:supported*/
	u8 unsupported;
};

/** region-band mapping table*/
struct region_channel {
	/** TRUE if this entry is valid		     */
	u8 valid;
	/** region code for US, Japan ...	     */
	u8 region;
	/** band B/G/A, used for BAND_CONFIG cmd	     */
	u8 band;
	/** Actual No. of elements in the array below */
	u8 nrcfp;
	/** chan-freq-txpower mapping table*/
	struct chan_freq_power *CFP;
};

56
struct lbs_802_11_security {
57 58
	u8 WPAenabled;
	u8 WPA2enabled;
59
	u8 wep_enabled;
60
	u8 auth_mode;
61 62 63 64 65 66 67
};

/** Current Basic Service Set State Structure */
struct current_bss_params {
	/** bssid */
	u8 bssid[ETH_ALEN];
	/** ssid */
68 69
	u8 ssid[IW_ESSID_MAX_SIZE + 1];
	u8 ssid_len;
70 71 72 73 74

	/** band */
	u8 band;
	/** channel */
	u8 channel;
75 76
	/** zero-terminated array of supported data rates */
	u8 rates[MAX_RATES + 1];
77 78 79 80 81 82 83 84 85 86 87 88 89
};

/** sleep_params */
struct sleep_params {
	u16 sp_error;
	u16 sp_offset;
	u16 sp_stabletime;
	u8 sp_calcontrol;
	u8 sp_extsleepclk;
	u16 sp_reserved;
};

/* Mesh statistics */
90
struct lbs_mesh_stats {
91 92 93 94 95 96 97
	u32	fwd_bcast_cnt;		/* Fwd: Broadcast counter */
	u32	fwd_unicast_cnt;	/* Fwd: Unicast counter */
	u32	fwd_drop_ttl;		/* Fwd: TTL zero */
	u32	fwd_drop_rbt;		/* Fwd: Recently Broadcasted */
	u32	fwd_drop_noroute; 	/* Fwd: No route to Destination */
	u32	fwd_drop_nobuf;		/* Fwd: Run out of internal buffers */
	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 104 105
	int open;
	int mesh_open;
	int infra_open;
106
	int mesh_autostart_enabled;
107
	__le16 boot2_version;
108

109 110 111
	char name[DEV_NAME_LEN];

	void *card;
112
	struct lbs_adapter *adapter;
113
	struct net_device *dev;
114 115

	struct net_device_stats stats;
116 117 118
	struct net_device *mesh_dev; /* Virtual device */
	struct net_device *rtap_net_dev;
	struct ieee80211_device *ieee;
119 120

	struct iw_statistics wstats;
121
	struct lbs_mesh_stats mstats;
122 123 124 125 126 127 128 129 130 131 132 133 134 135
	struct dentry *debugfs_dir;
	struct dentry *debugfs_debug;
	struct dentry *debugfs_files[6];

	struct dentry *events_dir;
	struct dentry *debugfs_events_files[6];

	struct dentry *regs_dir;
	struct dentry *debugfs_regs_files[6];

	u32 mac_offset;
	u32 bbp_offset;
	u32 rf_offset;

136 137 138
	/** Upload length */
	u32 upld_len;
	/* Upload buffer */
139
	u8 upld_buf[LBS_UPLD_SIZE];
140 141 142 143 144 145
	/* Download sent:
	   bit0 1/0=data_sent/data_tx_done,
	   bit1 1/0=cmd_sent/cmd_tx_done,
	   all other bits reserved 0 */
	u8 dnld_sent;

146 147 148
	struct device *hotplug_device;

	/** thread to service interrupts */
149 150
	struct task_struct *main_thread;
	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 159 160
	int (*hw_host_to_card) (struct lbs_private *priv, u8 type, u8 *payload, u16 nb);
	int (*hw_get_int_status) (struct lbs_private *priv, u8 *);
	int (*hw_read_event_cause) (struct lbs_private *);
161 162 163 164 165 166 167 168 169 170
};

/** Association request
 *
 * Encapsulates all the options that describe a specific assocation request
 * or configuration of the wireless card's radio, mode, and security settings.
 */
struct assoc_request {
#define ASSOC_FLAG_SSID			1
#define ASSOC_FLAG_CHANNEL		2
171 172 173 174 175 176 177 178 179
#define ASSOC_FLAG_BAND			3
#define ASSOC_FLAG_MODE			4
#define ASSOC_FLAG_BSSID		5
#define ASSOC_FLAG_WEP_KEYS		6
#define ASSOC_FLAG_WEP_TX_KEYIDX	7
#define ASSOC_FLAG_WPA_MCAST_KEY	8
#define ASSOC_FLAG_WPA_UCAST_KEY	9
#define ASSOC_FLAG_SECINFO		10
#define ASSOC_FLAG_WPA_IE		11
180 181
	unsigned long flags;

182 183
	u8 ssid[IW_ESSID_MAX_SIZE + 1];
	u8 ssid_len;
184
	u8 channel;
185
	u8 band;
186
	u8 mode;
187 188 189
	u8 bssid[ETH_ALEN];

	/** WEP keys */
190
	struct enc_key wep_keys[4];
191 192 193
	u16 wep_tx_keyidx;

	/** WPA keys */
194 195
	struct enc_key wpa_mcast_key;
	struct enc_key wpa_unicast_key;
196

197
	struct lbs_802_11_security secinfo;
198 199 200 201

	/** WPA Information Elements*/
	u8 wpa_ie[MAX_WPA_IE_LEN];
	u8 wpa_ie_len;
202 203 204

	/* BSS to associate with for infrastructure of Ad-Hoc join */
	struct bss_descriptor bss;
205 206 207
};

/** Wlan adapter data structure*/
208
struct lbs_adapter {
209
	/** STATUS variables */
210
	u8 fwreleasenumber[4];
211 212 213 214 215
	u32 fwcapinfo;
	/* protected with big lock */

	struct mutex lock;

216
	u8 tmptxbuf[LBS_UPLD_SIZE];
217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257
	/* protected by hard_start_xmit serialization */

	/** command-related variables */
	u16 seqnum;
	/* protected by big lock */

	struct cmd_ctrl_node *cmd_array;
	/** Current command */
	struct cmd_ctrl_node *cur_cmd;
	int cur_cmd_retcode;
	/** command Queues */
	/** Free command buffers */
	struct list_head cmdfreeq;
	/** Pending command buffers */
	struct list_head cmdpendingq;

	wait_queue_head_t cmd_pending;
	u8 nr_cmd_pending;
	/* command related variables protected by adapter->driver_lock */

	/** Async and Sync Event variables */
	u32 intcounter;
	u32 eventcause;
	u8 nodename[16];	/* nickname */

	/** spin locks */
	spinlock_t driver_lock;

	/** Timers */
	struct timer_list command_timer;

	/* TX queue used in PS mode */
	spinlock_t txqueue_lock;
	struct sk_buff *tx_queue_ps[NR_TX_QUEUE];
	unsigned int tx_queue_idx;

	u8 hisregcpy;

	/** current ssid/bssid related parameters*/
	struct current_bss_params curbssparams;

258 259
	/* IW_MODE_* */
	u8 mode;
260

261 262 263 264
	/* Scan results list */
	struct list_head network_list;
	struct list_head network_free_list;
	struct bss_descriptor *networks;
265

266 267
	u16 beacon_period;
	u8 beacon_enable;
268 269 270
	u8 adhoccreate;

	/** capability Info used in Association, start, join */
271
	u16 capability;
272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295

	/** MAC address information */
	u8 current_addr[ETH_ALEN];
	u8 multicastlist[MRVDRV_MAX_MULTICAST_LIST_SIZE][ETH_ALEN];
	u32 nr_of_multicastmacaddr;

	/** 802.11 statistics */
//	struct cmd_DS_802_11_GET_STAT wlan802_11Stat;

	u16 enablehwauto;
	u16 ratebitmap;

	u32 fragthsd;
	u32 rtsthsd;

	u8 txretrycount;

	/** Tx-related variables (for single packet tx) */
	struct sk_buff *currenttxskb;
	u16 TxLockFlag;

	/** NIC Operation characteristics */
	u16 currentpacketfilter;
	u32 connect_status;
296
	u32 mesh_connect_status;
297 298 299 300 301 302 303 304 305 306 307
	u16 regioncode;
	u16 txpowerlevel;

	/** POWER MANAGEMENT AND PnP SUPPORT */
	u8 surpriseremoved;

	u16 psmode;		/* Wlan802_11PowermodeCAM=disable
				   Wlan802_11PowermodeMAX_PSP=enable */
	u32 psstate;
	u8 needtowakeup;

308
	struct PS_CMD_ConfirmSleep lbs_ps_confirm_sleep;
309

310 311
	struct assoc_request * pending_assoc_req;
	struct assoc_request * in_progress_assoc_req;
312 313

	/** Encryption parameter */
314
	struct lbs_802_11_security secinfo;
315 316

	/** WEP keys */
317
	struct enc_key wep_keys[4];
318 319 320
	u16 wep_tx_keyidx;

	/** WPA keys */
321 322
	struct enc_key wpa_mcast_key;
	struct enc_key wpa_unicast_key;
323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339

	/** WPA Information Elements*/
	u8 wpa_ie[MAX_WPA_IE_LEN];
	u8 wpa_ie_len;

	/** Requested Signal Strength*/
	u16 SNR[MAX_TYPE_B][MAX_TYPE_AVG];
	u16 NF[MAX_TYPE_B][MAX_TYPE_AVG];
	u8 RSSI[MAX_TYPE_B][MAX_TYPE_AVG];
	u8 rawSNR[DEFAULT_DATA_AVG_FACTOR];
	u8 rawNF[DEFAULT_DATA_AVG_FACTOR];
	u16 nextSNRNF;
	u16 numSNRNF;

	u8 radioon;
	u32 preamble;

340 341 342
	/** data rate stuff */
	u8 cur_rate;
	u8 auto_rate;
343 344 345 346 347 348 349 350 351 352 353 354 355

	/** sleep_params */
	struct sleep_params sp;

	/** RF calibration data */

#define	MAX_REGION_CHANNEL_NUM	2
	/** region channel data */
	struct region_channel region_channel[MAX_REGION_CHANNEL_NUM];

	struct region_channel universal_channel[MAX_REGION_CHANNEL_NUM];

	/** 11D and Domain Regulatory Data */
356
	struct lbs_802_11d_domain_reg domainreg;
357 358 359 360 361 362 363
	struct parsed_region_chan_11d parsed_region_chan;

	/** FSM variable for 11d support */
	u32 enable11d;

	/**	MISCELLANEOUS */
	u8 *prdeeprom;
364
	struct lbs_offset_value offsetvalue;
365 366 367

	struct cmd_ds_802_11_get_log logmsg;

368
	u32 monitormode;
369
	u8 fw_ready;
370 371

	u8 last_scanned_channel;
372 373
};

374
#endif