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

#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 18 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 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 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 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 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 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400

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

extern struct ethtool_ops libertas_ethtool_ops;

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

struct wlan_802_11_security {
	u8 WPAenabled;
	u8 WPA2enabled;
	enum WLAN_802_11_WEP_STATUS WEPstatus;
	enum WLAN_802_11_AUTHENTICATION_MODE authmode;
};

/** Current Basic Service Set State Structure */
struct current_bss_params {
	struct bss_descriptor bssdescriptor;
	/** bssid */
	u8 bssid[ETH_ALEN];
	/** ssid */
	struct WLAN_802_11_SSID ssid;

	/** band */
	u8 band;
	/** channel */
	u8 channel;
	/** number of rates supported */
	int numofrates;
	/** supported rates*/
	u8 datarates[WLAN_SUPPORTED_RATES];
};

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

/** Data structure for the Marvell WLAN device */
typedef struct _wlan_dev {
	/** device name */
	char name[DEV_NAME_LEN];
	/** card pointer */
	void *card;
	/** IO port */
	u32 ioport;
	/** Upload received */
	u32 upld_rcv;
	/** Upload type */
	u32 upld_typ;
	/** Upload length */
	u32 upld_len;
	/** netdev pointer */
	struct net_device *netdev;
	/* Upload buffer */
	u8 upld_buf[WLAN_UPLD_SIZE];
	/* 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;
} wlan_dev_t, *pwlan_dev_t;

/* Mesh statistics */
struct wlan_mesh_stats {
	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 */
};

/** Private structure for the MV device */
struct _wlan_private {
	int open;
	int mesh_open;
	int infra_open;

	wlan_adapter *adapter;
	wlan_dev_t wlan_dev;

	struct net_device_stats stats;
	struct net_device *mesh_dev ; /* Virtual device */

	struct iw_statistics wstats;
	struct wlan_mesh_stats mstats;
	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;

	const struct firmware *firmware;
	struct device *hotplug_device;

	/** thread to service interrupts */
	struct wlan_thread mainthread;

	struct delayed_work assoc_work;
	struct workqueue_struct *assoc_thread;
};

/** 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_MODE			3
#define ASSOC_FLAG_BSSID		4
#define ASSOC_FLAG_WEP_KEYS		5
#define ASSOC_FLAG_WEP_TX_KEYIDX	6
#define ASSOC_FLAG_WPA_MCAST_KEY	7
#define ASSOC_FLAG_WPA_UCAST_KEY	8
#define ASSOC_FLAG_SECINFO		9
#define ASSOC_FLAG_WPA_IE		10
	unsigned long flags;

	struct WLAN_802_11_SSID ssid;
	u8 channel;
	enum WLAN_802_11_NETWORK_INFRASTRUCTURE mode;
	u8 bssid[ETH_ALEN];

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

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

	struct wlan_802_11_security secinfo;

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

/** Wlan adapter data structure*/
struct _wlan_adapter {
	/** STATUS variables */
	u32 fwreleasenumber;
	u32 fwcapinfo;
	/* protected with big lock */

	struct mutex lock;

	u8 tmptxbuf[WLAN_UPLD_SIZE];
	/* 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;

	enum WLAN_802_11_NETWORK_INFRASTRUCTURE inframode;

	struct bss_descriptor *pattemptedbssdesc;

	struct WLAN_802_11_SSID previousssid;
	u8 previousbssid[ETH_ALEN];

	struct bss_descriptor *scantable;
	u32 numinscantable;

	u8 scantype;
	u32 scanmode;

	u16 beaconperiod;
	u8 adhoccreate;

	/** capability Info used in Association, start, join */
	struct ieeetypes_capinfo capinfo;

	/** 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;
	/** control G rates */
	u8 adhoc_grate_enabled;

	u32 txantenna;
	u32 rxantenna;

	u8 adhocchannel;
	u32 fragthsd;
	u32 rtsthsd;

	u32 datarate;
	u8 is_datarate_auto;

	u16 listeninterval;
	u16 prescan;
	u8 txretrycount;

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

	/** NIC Operation characteristics */
	u16 currentpacketfilter;
	u32 connect_status;
	u16 regioncode;
	u16 regiontableindex;
	u16 txpowerlevel;

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

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

	struct PS_CMD_ConfirmSleep libertas_ps_confirm_sleep;
	u16 locallisteninterval;
	u16 nullpktinterval;

	struct assoc_request * assoc_req;

	/** Encryption parameter */
	struct wlan_802_11_security secinfo;

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

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

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

	u16 rxantennamode;
	u16 txantennamode;

	/** Requested Signal Strength*/
	u16 bcn_avg_factor;
	u16 data_avg_factor;
	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;
	u16 rxpd_rate;

	u8 radioon;
	u32 preamble;

	/** Multi bands Parameter*/
	u8 libertas_supported_rates[G_SUPPORTED_RATES];

	/** Blue Tooth Co-existence Arbitration */

	/** 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 */
	struct wlan_802_11d_domain_reg domainreg;
	struct parsed_region_chan_11d parsed_region_chan;

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

	/**	MISCELLANEOUS */
	u8 *prdeeprom;
	struct wlan_offset_value offsetvalue;

	struct cmd_ds_802_11_get_log logmsg;
	u16 scanprobes;

	u32 pkttxctrl;

	u16 txrate;
	u32 linkmode;
	u32 radiomode;
	u32 debugmode;
	u8 fw_ready;
};

#endif				/* _WLAN_DEV_H_ */