2007-02-10 17:25:27 +03:00
/**
* This file contains definitions and data structures specific
* to Marvell 802.11 NIC . It contains the Device Information
2007-12-08 23:04:36 +03:00
* structure struct lbs_private . .
2007-02-10 17:25:27 +03:00
*/
2007-11-16 02:05:47 +03:00
# ifndef _LBS_DEV_H_
# define _LBS_DEV_H_
2007-02-10 17:25:27 +03:00
# include <linux/netdevice.h>
# include <linux/wireless.h>
# include <linux/ethtool.h>
# include <linux/debugfs.h>
# include "defs.h"
# include "scan.h"
2007-11-16 02:05:47 +03:00
extern struct ethtool_ops lbs_ethtool_ops ;
2007-02-10 17:25:27 +03:00
# 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 ;
} ;
2007-11-16 02:05:47 +03:00
struct lbs_802_11_security {
2007-02-10 17:25:27 +03:00
u8 WPAenabled ;
u8 WPA2enabled ;
2007-05-11 06:57:23 +04:00
u8 wep_enabled ;
2007-05-11 06:56:42 +04:00
u8 auth_mode ;
2007-02-10 17:25:27 +03:00
} ;
/** Current Basic Service Set State Structure */
struct current_bss_params {
/** bssid */
u8 bssid [ ETH_ALEN ] ;
/** ssid */
2007-05-29 07:54:55 +04:00
u8 ssid [ IW_ESSID_MAX_SIZE + 1 ] ;
u8 ssid_len ;
2007-02-10 17:25:27 +03:00
/** band */
u8 band ;
/** channel */
u8 channel ;
2007-08-02 19:40:45 +04:00
/** zero-terminated array of supported data rates */
u8 rates [ MAX_RATES + 1 ] ;
2007-02-10 17:25:27 +03:00
} ;
/** 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 */
2007-11-16 02:05:47 +03:00
struct lbs_mesh_stats {
2007-02-10 17:25:27 +03:00
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 */
2007-05-25 20:12:06 +04:00
u32 tx_failed_cnt ; /* Tx: Failed transmissions */
2007-02-10 17:25:27 +03:00
} ;
/** Private structure for the MV device */
2007-11-23 17:43:44 +03:00
struct lbs_private {
2007-02-10 17:25:27 +03:00
int mesh_open ;
int infra_open ;
2007-08-02 21:16:02 +04:00
int mesh_autostart_enabled ;
2007-08-02 21:19:24 +04:00
__le16 boot2_version ;
2007-02-10 17:25:27 +03:00
2007-05-25 21:05:16 +04:00
char name [ DEV_NAME_LEN ] ;
void * card ;
struct net_device * dev ;
2007-02-10 17:25:27 +03:00
struct net_device_stats stats ;
2007-08-02 21:16:55 +04:00
struct net_device * mesh_dev ; /* Virtual device */
struct net_device * rtap_net_dev ;
2007-02-10 17:25:27 +03:00
struct iw_statistics wstats ;
2007-11-16 02:05:47 +03:00
struct lbs_mesh_stats mstats ;
2007-02-10 17:25:27 +03:00
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 ;
2007-05-25 21:05:16 +04:00
/** Upload length */
u32 upld_len ;
/* Upload buffer */
2007-11-16 02:05:47 +03:00
u8 upld_buf [ LBS_UPLD_SIZE ] ;
2007-05-25 21:05:16 +04:00
/* 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 ;
2007-02-10 17:25:27 +03:00
/** thread to service interrupts */
2007-08-02 19:32:25 +04:00
struct task_struct * main_thread ;
wait_queue_head_t waitq ;
2007-08-02 21:19:04 +04:00
struct workqueue_struct * work_thread ;
2007-02-10 17:25:27 +03:00
2007-08-02 21:19:04 +04:00
struct delayed_work scan_work ;
2007-02-10 17:25:27 +03:00
struct delayed_work assoc_work ;
2007-05-30 20:14:34 +04:00
struct work_struct sync_channel ;
2007-05-25 20:17:06 +04:00
/** Hardware access */
2007-11-23 17:43:44 +03:00
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 * ) ;
2007-02-10 17:25:27 +03:00
2007-12-13 04:06:06 +03:00
/* Wake On LAN */
uint32_t wol_criteria ;
uint8_t wol_gpio ;
uint8_t wol_gap ;
2007-12-08 23:04:36 +03:00
/* was struct lbs_adapter from here... */
2007-02-10 17:25:27 +03:00
2007-12-08 23:04:36 +03:00
/** Wlan adapter data structure*/
2007-02-10 17:25:27 +03:00
/** STATUS variables */
2007-05-26 07:40:21 +04:00
u8 fwreleasenumber [ 4 ] ;
2007-02-10 17:25:27 +03:00
u32 fwcapinfo ;
/* protected with big lock */
struct mutex lock ;
2007-12-10 07:54:27 +03:00
/* TX packet ready to be sent... */
int tx_pending_len ; /* -1 while building packet */
u8 tx_pending_buf [ LBS_UPLD_SIZE ] ;
2007-02-10 17:25:27 +03:00
/* 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 ;
2007-12-08 23:04:36 +03:00
/* command related variables protected by priv->driver_lock */
2007-02-10 17:25:27 +03:00
/** 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 ;
2007-12-16 03:33:43 +03:00
int nr_retries ;
int cmd_timed_out ;
2007-02-10 17:25:27 +03:00
u8 hisregcpy ;
/** current ssid/bssid related parameters*/
struct current_bss_params curbssparams ;
2007-12-13 07:29:13 +03:00
uint16_t mesh_tlv ;
2007-12-12 02:56:42 +03:00
u8 mesh_ssid [ IW_ESSID_MAX_SIZE + 1 ] ;
u8 mesh_ssid_len ;
2007-02-10 17:25:27 +03:00
2007-05-11 06:58:02 +04:00
/* IW_MODE_* */
u8 mode ;
2007-02-10 17:25:27 +03:00
2007-05-26 00:15:56 +04:00
/* Scan results list */
struct list_head network_list ;
struct list_head network_free_list ;
struct bss_descriptor * networks ;
2007-02-10 17:25:27 +03:00
2007-11-21 01:44:28 +03:00
u16 beacon_period ;
u8 beacon_enable ;
2007-02-10 17:25:27 +03:00
u8 adhoccreate ;
/** capability Info used in Association, start, join */
2007-08-02 18:43:44 +04:00
u16 capability ;
2007-02-10 17:25:27 +03:00
/** 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 */
u16 currentpacketfilter ;
u32 connect_status ;
2007-11-21 01:44:14 +03:00
u32 mesh_connect_status ;
2007-02-10 17:25:27 +03:00
u16 regioncode ;
u16 txpowerlevel ;
/** POWER MANAGEMENT AND PnP SUPPORT */
u8 surpriseremoved ;
u16 psmode ; /* Wlan802_11PowermodeCAM=disable
Wlan802_11PowermodeMAX_PSP = enable */
u32 psstate ;
2007-12-17 22:41:13 +03:00
char ps_supported ;
2007-02-10 17:25:27 +03:00
u8 needtowakeup ;
2007-11-16 02:05:47 +03:00
struct PS_CMD_ConfirmSleep lbs_ps_confirm_sleep ;
2007-12-17 21:26:42 +03:00
struct cmd_header lbs_ps_confirm_wake ;
2007-02-10 17:25:27 +03:00
2007-05-26 01:09:41 +04:00
struct assoc_request * pending_assoc_req ;
struct assoc_request * in_progress_assoc_req ;
2007-02-10 17:25:27 +03:00
/** Encryption parameter */
2007-11-16 02:05:47 +03:00
struct lbs_802_11_security secinfo ;
2007-02-10 17:25:27 +03:00
/** WEP keys */
2007-08-02 18:45:55 +04:00
struct enc_key wep_keys [ 4 ] ;
2007-02-10 17:25:27 +03:00
u16 wep_tx_keyidx ;
/** WPA keys */
2007-08-02 18:45:55 +04:00
struct enc_key wpa_mcast_key ;
struct enc_key wpa_unicast_key ;
2007-02-10 17:25:27 +03:00
/** 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 ;
2007-08-02 19:40:45 +04:00
/** data rate stuff */
u8 cur_rate ;
u8 auto_rate ;
2007-02-10 17:25:27 +03:00
/** 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 */
2007-11-16 02:05:47 +03:00
struct lbs_802_11d_domain_reg domainreg ;
2007-02-10 17:25:27 +03:00
struct parsed_region_chan_11d parsed_region_chan ;
/** FSM variable for 11d support */
u32 enable11d ;
/** MISCELLANEOUS */
u8 * prdeeprom ;
2007-11-16 02:05:47 +03:00
struct lbs_offset_value offsetvalue ;
2007-02-10 17:25:27 +03:00
struct cmd_ds_802_11_get_log logmsg ;
2007-08-02 21:16:55 +04:00
u32 monitormode ;
2007-12-07 18:52:10 +03:00
int last_scanned_channel ;
2007-02-10 17:25:27 +03:00
u8 fw_ready ;
} ;
2007-12-08 23:04:36 +03:00
/** 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 ;
u8 bssid [ ETH_ALEN ] ;
/** 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 ;
} ;
2007-11-16 02:05:47 +03:00
# endif