2007-02-10 12:25:27 -02:00
/**
* This file contains definitions and data structures specific
* to Marvell 802.11 NIC . It contains the Device Information
2007-12-08 20:04:36 +00:00
* structure struct lbs_private . .
2007-02-10 12:25:27 -02:00
*/
2007-11-15 18:05:47 -05:00
# ifndef _LBS_DEV_H_
# define _LBS_DEV_H_
2007-02-10 12:25:27 -02:00
# include <linux/netdevice.h>
# include <linux/wireless.h>
# include <linux/ethtool.h>
# include <linux/debugfs.h>
# include "defs.h"
2008-04-02 16:27:42 +02:00
# include "hostcmd.h"
2007-02-10 12:25:27 -02:00
2009-09-02 01:03:33 -07:00
extern const struct ethtool_ops lbs_ethtool_ops ;
2007-02-10 12:25:27 -02: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-15 18:05:47 -05:00
struct lbs_802_11_security {
2007-02-10 12:25:27 -02:00
u8 WPAenabled ;
u8 WPA2enabled ;
2007-05-10 22:57:23 -04:00
u8 wep_enabled ;
2007-05-10 22:56:42 -04:00
u8 auth_mode ;
2008-09-16 18:08:39 -07:00
u32 key_mgmt ;
2007-02-10 12:25:27 -02:00
} ;
/** Current Basic Service Set State Structure */
struct current_bss_params {
/** bssid */
u8 bssid [ ETH_ALEN ] ;
/** ssid */
2007-05-28 23:54:55 -04:00
u8 ssid [ IW_ESSID_MAX_SIZE + 1 ] ;
u8 ssid_len ;
2007-02-10 12:25:27 -02:00
/** band */
u8 band ;
/** channel */
u8 channel ;
2007-08-02 11:40:45 -04:00
/** zero-terminated array of supported data rates */
u8 rates [ MAX_RATES + 1 ] ;
2007-02-10 12:25:27 -02:00
} ;
/** sleep_params */
struct sleep_params {
2007-12-17 23:48:31 -05:00
uint16_t sp_error ;
uint16_t sp_offset ;
uint16_t sp_stabletime ;
uint8_t sp_calcontrol ;
uint8_t sp_extsleepclk ;
uint16_t sp_reserved ;
2007-02-10 12:25:27 -02:00
} ;
/* Mesh statistics */
2007-11-15 18:05:47 -05:00
struct lbs_mesh_stats {
2007-02-10 12:25:27 -02: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 12:12:06 -04:00
u32 tx_failed_cnt ; /* Tx: Failed transmissions */
2007-02-10 12:25:27 -02:00
} ;
/** Private structure for the MV device */
2007-11-23 15:43:44 +01:00
struct lbs_private {
2007-02-10 12:25:27 -02:00
int mesh_open ;
2009-03-25 09:51:16 -07:00
int mesh_fw_ver ;
2007-02-10 12:25:27 -02:00
int infra_open ;
2007-08-02 13:16:02 -04:00
int mesh_autostart_enabled ;
2007-02-10 12:25:27 -02:00
2007-05-25 13:05:16 -04:00
char name [ DEV_NAME_LEN ] ;
void * card ;
struct net_device * dev ;
2007-02-10 12:25:27 -02:00
2007-08-02 13:16:55 -04:00
struct net_device * mesh_dev ; /* Virtual device */
struct net_device * rtap_net_dev ;
2007-02-10 12:25:27 -02:00
struct iw_statistics wstats ;
2007-11-15 18:05:47 -05:00
struct lbs_mesh_stats mstats ;
2007-02-10 12:25:27 -02: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 13: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 12:25:27 -02:00
/** thread to service interrupts */
2007-08-02 11:32:25 -04:00
struct task_struct * main_thread ;
wait_queue_head_t waitq ;
2007-08-02 13:19:04 -04:00
struct workqueue_struct * work_thread ;
2007-02-10 12:25:27 -02:00
2008-05-20 13:32:45 +01:00
struct work_struct mcast_work ;
2008-01-28 17:28:05 +01:00
/** Scanning */
2007-08-02 13:19:04 -04:00
struct delayed_work scan_work ;
2007-02-10 12:25:27 -02:00
struct delayed_work assoc_work ;
2007-05-30 12:14:34 -04:00
struct work_struct sync_channel ;
2008-01-28 17:28:05 +01:00
/* remember which channel was scanned last, != 0 if currently scanning */
int scan_channel ;
2008-03-05 07:05:32 +01:00
u8 scan_ssid [ IW_ESSID_MAX_SIZE + 1 ] ;
u8 scan_ssid_len ;
2007-05-25 12:17:06 -04:00
/** Hardware access */
2007-11-23 15:43:44 +01:00
int ( * hw_host_to_card ) ( struct lbs_private * priv , u8 type , u8 * payload , u16 nb ) ;
2008-05-20 16:43:31 +01:00
void ( * reset_card ) ( struct lbs_private * priv ) ;
2007-02-10 12:25:27 -02:00
2007-12-12 20:06:06 -05:00
/* Wake On LAN */
uint32_t wol_criteria ;
uint8_t wol_gpio ;
uint8_t wol_gap ;
2007-12-08 20:04:36 +00:00
/** Wlan adapter data structure*/
2007-02-10 12:25:27 -02:00
/** STATUS variables */
2008-01-16 15:55:22 +01:00
u32 fwrelease ;
2007-02-10 12:25:27 -02:00
u32 fwcapinfo ;
struct mutex lock ;
2007-12-09 23:54:27 -05: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 12:25:27 -02:00
/* 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 ;
2008-04-01 14:50:43 +02:00
/* 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 ] ;
2007-02-10 12:25:27 -02:00
/** spin locks */
spinlock_t driver_lock ;
/** Timers */
struct timer_list command_timer ;
2007-12-15 19:33:43 -05:00
int nr_retries ;
int cmd_timed_out ;
2007-02-10 12:25:27 -02:00
/** current ssid/bssid related parameters*/
struct current_bss_params curbssparams ;
2007-12-12 23:29:13 -05:00
uint16_t mesh_tlv ;
2007-12-11 18:56:42 -05:00
u8 mesh_ssid [ IW_ESSID_MAX_SIZE + 1 ] ;
u8 mesh_ssid_len ;
2007-02-10 12:25:27 -02:00
2007-05-10 22:58:02 -04:00
/* IW_MODE_* */
u8 mode ;
2007-02-10 12:25:27 -02:00
2007-05-25 16: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 12:25:27 -02:00
2007-11-20 17:44:28 -05:00
u16 beacon_period ;
u8 beacon_enable ;
2007-02-10 12:25:27 -02:00
u8 adhoccreate ;
/** capability Info used in Association, start, join */
2007-08-02 10:43:44 -04:00
u16 capability ;
2007-02-10 12:25:27 -02: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;
2008-05-24 10:59:49 +01:00
uint16_t enablehwauto ;
uint16_t ratebitmap ;
2007-02-10 12:25:27 -02:00
u8 txretrycount ;
/** Tx-related variables (for single packet tx) */
struct sk_buff * currenttxskb ;
/** NIC Operation characteristics */
2008-03-12 16:06:43 +01:00
u16 mac_control ;
2007-02-10 12:25:27 -02:00
u32 connect_status ;
2007-11-20 17:44:14 -05:00
u32 mesh_connect_status ;
2007-02-10 12:25:27 -02:00
u16 regioncode ;
2008-08-19 15:15:35 -04:00
s16 txpower_cur ;
s16 txpower_min ;
s16 txpower_max ;
2007-02-10 12:25:27 -02:00
/** POWER MANAGEMENT AND PnP SUPPORT */
u8 surpriseremoved ;
u16 psmode ; /* Wlan802_11PowermodeCAM=disable
Wlan802_11PowermodeMAX_PSP = enable */
u32 psstate ;
u8 needtowakeup ;
2007-05-25 17:09:41 -04:00
struct assoc_request * pending_assoc_req ;
struct assoc_request * in_progress_assoc_req ;
2007-02-10 12:25:27 -02:00
/** Encryption parameter */
2007-11-15 18:05:47 -05:00
struct lbs_802_11_security secinfo ;
2007-02-10 12:25:27 -02:00
/** WEP keys */
2007-08-02 10:45:55 -04:00
struct enc_key wep_keys [ 4 ] ;
2007-02-10 12:25:27 -02:00
u16 wep_tx_keyidx ;
/** WPA keys */
2007-08-02 10:45:55 -04:00
struct enc_key wpa_mcast_key ;
struct enc_key wpa_unicast_key ;
2007-02-10 12:25:27 -02:00
2008-10-30 22:09:54 +01:00
/*
* In theory , the IE is limited to the IE length , 255 ,
* but in practice 64 bytes are enough .
*/
# define MAX_WPA_IE_LEN 64
2007-02-10 12:25:27 -02: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 ;
2008-08-21 17:51:07 -04:00
u8 radio_on ;
2007-02-10 12:25:27 -02:00
2007-08-02 11:40:45 -04:00
/** data rate stuff */
u8 cur_rate ;
2007-02-10 12:25:27 -02:00
/** 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-15 18:05:47 -05:00
struct lbs_802_11d_domain_reg domainreg ;
2007-02-10 12:25:27 -02:00
struct parsed_region_chan_11d parsed_region_chan ;
/** FSM variable for 11d support */
u32 enable11d ;
/** MISCELLANEOUS */
2007-11-15 18:05:47 -05:00
struct lbs_offset_value offsetvalue ;
2007-02-10 12:25:27 -02:00
2007-08-02 13:16:55 -04:00
u32 monitormode ;
2007-02-10 12:25:27 -02:00
u8 fw_ready ;
} ;
2008-03-26 13:22:11 +01:00
extern struct cmd_confirm_sleep confirm_sleep ;
2008-04-02 16:27:42 +02:00
/**
* @ 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 ;
2009-05-22 20:01:21 -04:00
__le16 atimwindow ;
2008-04-02 16:27:42 +02:00
/* 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 ;
2009-05-22 20:01:21 -04:00
union ieee_phy_param_set phy ;
union ieee_ss_param_set ss ;
2008-04-02 16:27:42 +02:00
2009-05-22 20:03:09 -04:00
struct ieee_ie_country_info_full_set countryinfo ;
2008-04-02 16:27:42 +02:00
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 ;
} ;
2007-12-08 20:04:36 +00: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 ;
2008-01-25 14:15:00 +01:00
u8 bssid [ ETH_ALEN ] __attribute__ ( ( aligned ( 2 ) ) ) ;
2007-12-08 20:04:36 +00:00
/** 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-15 18:05:47 -05:00
# endif