dev.h 8.8 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_private..
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

#include "defs.h"
16
#include "hostcmd.h"
17

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
};

/** sleep_params */
struct sleep_params {
81 82 83 84 85 86
	uint16_t sp_error;
	uint16_t sp_offset;
	uint16_t sp_stabletime;
	uint8_t  sp_calcontrol;
	uint8_t  sp_extsleepclk;
	uint16_t sp_reserved;
87 88 89
};

/* 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
	int mesh_open;
	int infra_open;
105
	int mesh_autostart_enabled;
106

107 108 109 110
	char name[DEV_NAME_LEN];

	void *card;
	struct net_device *dev;
111 112

	struct net_device_stats stats;
113 114
	struct net_device *mesh_dev; /* Virtual device */
	struct net_device *rtap_net_dev;
115 116

	struct iw_statistics wstats;
117
	struct lbs_mesh_stats mstats;
118 119 120 121 122 123 124 125 126 127 128 129 130 131
	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;

132 133 134 135 136 137
	/* 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;

138
	/** thread to service interrupts */
139 140
	struct task_struct *main_thread;
	wait_queue_head_t waitq;
141
	struct workqueue_struct *work_thread;
142

143 144
	struct work_struct mcast_work;

145
	/** Scanning */
146
	struct delayed_work scan_work;
147
	struct delayed_work assoc_work;
148
	struct work_struct sync_channel;
149 150
	/* remember which channel was scanned last, != 0 if currently scanning */
	int scan_channel;
151 152
	u8 scan_ssid[IW_ESSID_MAX_SIZE + 1];
	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 159 160 161 162
	/* Wake On LAN */
	uint32_t wol_criteria;
	uint8_t wol_gpio;
	uint8_t wol_gap;

163
	/** Wlan adapter data structure*/
164
	/** STATUS variables */
165
	u32 fwrelease;
166 167 168 169
	u32 fwcapinfo;

	struct mutex lock;

170 171 172 173
	/* TX packet ready to be sent... */
	int tx_pending_len;		/* -1 while building packet */

	u8 tx_pending_buf[LBS_UPLD_SIZE];
174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190
	/* protected by hard_start_xmit serialization */

	/** command-related variables */
	u16 seqnum;

	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;

191 192 193 194 195 196 197 198 199 200
	/* Command responses sent from the hardware to the driver */
	u8 resp_idx;
	u8 resp_buf[2][LBS_UPLD_SIZE];
	u32 resp_len[2];

	/* Events sent from hardware to driver */
	struct kfifo *event_fifo;

	/* nickname */
	u8 nodename[16];
201 202 203 204 205 206

	/** spin locks */
	spinlock_t driver_lock;

	/** Timers */
	struct timer_list command_timer;
207 208
	int nr_retries;
	int cmd_timed_out;
209 210 211

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

	uint16_t mesh_tlv;
214 215
	u8 mesh_ssid[IW_ESSID_MAX_SIZE + 1];
	u8 mesh_ssid_len;
216

217 218
	/* IW_MODE_* */
	u8 mode;
219

220 221 222 223
	/* Scan results list */
	struct list_head network_list;
	struct list_head network_free_list;
	struct bss_descriptor *networks;
224

225 226
	u16 beacon_period;
	u8 beacon_enable;
227 228 229
	u8 adhoccreate;

	/** capability Info used in Association, start, join */
230
	u16 capability;
231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251

	/** 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;

	/** NIC Operation characteristics */
252
	u16 mac_control;
253
	u32 connect_status;
254
	u32 mesh_connect_status;
255 256 257 258 259 260 261 262 263
	u16 regioncode;
	u16 txpowerlevel;

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

	u16 psmode;		/* Wlan802_11PowermodeCAM=disable
				   Wlan802_11PowermodeMAX_PSP=enable */
	u32 psstate;
264
	char ps_supported;
265 266
	u8 needtowakeup;

267 268
	struct assoc_request * pending_assoc_req;
	struct assoc_request * in_progress_assoc_req;
269 270

	/** Encryption parameter */
271
	struct lbs_802_11_security secinfo;
272 273

	/** WEP keys */
274
	struct enc_key wep_keys[4];
275 276 277
	u16 wep_tx_keyidx;

	/** WPA keys */
278 279
	struct enc_key wpa_mcast_key;
	struct enc_key wpa_unicast_key;
280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296

	/** 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;

297 298 299
	/** data rate stuff */
	u8 cur_rate;
	u8 auto_rate;
300 301 302 303 304 305 306 307 308 309

	/** 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 */
310
	struct lbs_802_11d_domain_reg domainreg;
311 312 313 314 315 316
	struct parsed_region_chan_11d parsed_region_chan;

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

	/**	MISCELLANEOUS */
317
	struct lbs_offset_value offsetvalue;
318

319
	u32 monitormode;
320 321 322
	u8 fw_ready;
};

323 324
extern struct cmd_confirm_sleep confirm_sleep;

325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362
/**
 *  @brief Structure used to store information for each beacon/probe response
 */
struct bss_descriptor {
	u8 bssid[ETH_ALEN];

	u8 ssid[IW_ESSID_MAX_SIZE + 1];
	u8 ssid_len;

	u16 capability;
	u32 rssi;
	u32 channel;
	u16 beaconperiod;
	u32 atimwindow;

	/* IW_MODE_AUTO, IW_MODE_ADHOC, IW_MODE_INFRA */
	u8 mode;

	/* zero-terminated array of supported data rates */
	u8 rates[MAX_RATES + 1];

	unsigned long last_scanned;

	union ieeetypes_phyparamset phyparamset;
	union IEEEtypes_ssparamset ssparamset;

	struct ieeetypes_countryinfofullset countryinfo;

	u8 wpa_ie[MAX_WPA_IE_LEN];
	size_t wpa_ie_len;
	u8 rsn_ie[MAX_WPA_IE_LEN];
	size_t rsn_ie_len;

	u8 mesh;

	struct list_head list;
};

363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386
/** 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
#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
	unsigned long flags;

	u8 ssid[IW_ESSID_MAX_SIZE + 1];
	u8 ssid_len;
	u8 channel;
	u8 band;
	u8 mode;
387
	u8 bssid[ETH_ALEN] __attribute__ ((aligned (2)));
388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406

	/** WEP keys */
	struct enc_key wep_keys[4];
	u16 wep_tx_keyidx;

	/** WPA keys */
	struct enc_key wpa_mcast_key;
	struct enc_key wpa_unicast_key;

	struct lbs_802_11_security secinfo;

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

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

407
#endif