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
2009-10-22 17:30:48 +04:00
# include "scan.h"
# include "assoc.h"
2007-02-10 17:25:27 +03:00
/** sleep_params */
struct sleep_params {
2007-12-18 07:48:31 +03: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 17:25:27 +03:00
} ;
/* 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 {
2009-10-22 17:30:49 +04:00
/* Basic networking */
struct net_device * dev ;
u32 connect_status ;
int infra_open ;
struct work_struct mcast_work ;
u32 nr_of_multicastmacaddr ;
u8 multicastlist [ MRVDRV_MAX_MULTICAST_LIST_SIZE ] [ ETH_ALEN ] ;
/* CFG80211 */
2009-10-06 18:31:54 +04:00
struct wireless_dev * wdev ;
2009-10-22 17:30:49 +04:00
/* Mesh */
struct net_device * mesh_dev ; /* Virtual device */
u32 mesh_connect_status ;
struct lbs_mesh_stats mstats ;
2007-02-10 17:25:27 +03:00
int mesh_open ;
2009-03-25 19:51:16 +03:00
int mesh_fw_ver ;
2007-08-02 21:16:02 +04:00
int mesh_autostart_enabled ;
2009-10-22 17:30:49 +04:00
uint16_t mesh_tlv ;
u8 mesh_ssid [ IEEE80211_MAX_SSID_LEN + 1 ] ;
u8 mesh_ssid_len ;
struct work_struct sync_channel ;
2007-02-10 17:25:27 +03:00
2009-10-22 17:30:49 +04:00
/* Monitor mode */
2007-08-02 21:16:55 +04:00
struct net_device * rtap_net_dev ;
2009-10-22 17:30:49 +04:00
u32 monitormode ;
2007-02-10 17:25:27 +03:00
2009-10-22 17:30:49 +04:00
/* Debugfs */
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 ] ;
2009-10-22 17:30:49 +04:00
/* Hardware debugging */
2007-02-10 17:25:27 +03:00
u32 mac_offset ;
u32 bbp_offset ;
u32 rf_offset ;
2009-10-22 17:30:49 +04:00
struct lbs_offset_value offsetvalue ;
/* Power management */
u16 psmode ;
u32 psstate ;
u8 needtowakeup ;
2007-02-10 17:25:27 +03:00
2009-10-22 17:30:49 +04:00
/* Deep sleep */
2009-10-01 07:04:38 +04:00
int is_deep_sleep ;
int is_auto_deep_sleep_enabled ;
int wakeup_dev_required ;
int is_activity_detected ;
2009-10-22 17:30:49 +04:00
int auto_deep_sleep_timeout ; /* in ms */
wait_queue_head_t ds_awake_q ;
struct timer_list auto_deepsleep_timer ;
2007-05-25 20:17:06 +04:00
2009-10-22 17:30:49 +04:00
/* Hardware access */
void * card ;
u8 fw_ready ;
u8 surpriseremoved ;
2007-11-23 17:43:44 +03:00
int ( * hw_host_to_card ) ( struct lbs_private * priv , u8 type , u8 * payload , u16 nb ) ;
2008-05-20 19:43:31 +04:00
void ( * reset_card ) ( struct lbs_private * priv ) ;
2009-10-01 07:04:38 +04:00
int ( * enter_deep_sleep ) ( struct lbs_private * priv ) ;
int ( * exit_deep_sleep ) ( struct lbs_private * priv ) ;
int ( * reset_deep_sleep_wakeup ) ( struct lbs_private * priv ) ;
2007-02-10 17:25:27 +03:00
2009-10-22 17:30:49 +04:00
/* Adapter info (from EEPROM) */
2008-01-16 17:55:22 +03:00
u32 fwrelease ;
2007-02-10 17:25:27 +03:00
u32 fwcapinfo ;
2009-10-22 17:30:49 +04:00
u16 regioncode ;
u8 current_addr [ ETH_ALEN ] ;
2007-02-10 17:25:27 +03:00
2009-10-22 17:30:49 +04:00
/* Command download */
u8 dnld_sent ;
/* bit0 1/0=data_sent/data_tx_done,
bit1 1 / 0 = cmd_sent / cmd_tx_done ,
all other bits reserved 0 */
2007-02-10 17:25:27 +03:00
u16 seqnum ;
struct cmd_ctrl_node * cmd_array ;
struct cmd_ctrl_node * cur_cmd ;
2009-10-22 17:30:49 +04:00
struct list_head cmdfreeq ; /* free command buffers */
struct list_head cmdpendingq ; /* pending command buffers */
2007-02-10 17:25:27 +03:00
wait_queue_head_t cmd_pending ;
2009-10-22 17:30:49 +04:00
struct timer_list command_timer ;
int nr_retries ;
int cmd_timed_out ;
2007-02-10 17:25:27 +03:00
2008-04-01 16:50:43 +04:00
/* Command responses sent from the hardware to the driver */
2009-10-22 17:30:49 +04:00
int cur_cmd_retcode ;
2008-04-01 16:50:43 +04:00
u8 resp_idx ;
u8 resp_buf [ 2 ] [ LBS_UPLD_SIZE ] ;
u32 resp_len [ 2 ] ;
/* Events sent from hardware to driver */
struct kfifo * event_fifo ;
2009-10-22 17:30:49 +04:00
/** thread to service interrupts */
struct task_struct * main_thread ;
wait_queue_head_t waitq ;
struct workqueue_struct * work_thread ;
2007-02-10 17:25:27 +03:00
2009-10-22 17:30:49 +04:00
/** Encryption stuff */
struct lbs_802_11_security secinfo ;
struct enc_key wpa_mcast_key ;
struct enc_key wpa_unicast_key ;
u8 wpa_ie [ MAX_WPA_IE_LEN ] ;
u8 wpa_ie_len ;
u16 wep_tx_keyidx ;
struct enc_key wep_keys [ 4 ] ;
2007-02-10 17:25:27 +03:00
2009-10-22 17:30:49 +04:00
/* Wake On LAN */
uint32_t wol_criteria ;
uint8_t wol_gpio ;
uint8_t wol_gap ;
2007-02-10 17:25:27 +03:00
2009-10-22 17:30:49 +04:00
/* Transmitting */
int tx_pending_len ; /* -1 while building packet */
u8 tx_pending_buf [ LBS_UPLD_SIZE ] ;
/* protected by hard_start_xmit serialization */
2007-02-10 17:25:27 +03:00
u8 txretrycount ;
struct sk_buff * currenttxskb ;
2009-10-22 17:30:49 +04:00
/* Locks */
struct mutex lock ;
spinlock_t driver_lock ;
/* NIC/link operation characteristics */
2008-03-12 18:06:43 +03:00
u16 mac_control ;
2009-10-22 17:30:49 +04:00
u8 radio_on ;
2009-10-22 17:30:50 +04:00
u8 channel ;
2008-08-19 23:15:35 +04:00
s16 txpower_cur ;
s16 txpower_min ;
s16 txpower_max ;
2007-02-10 17:25:27 +03:00
2009-10-22 17:30:49 +04:00
/** Scanning */
struct delayed_work scan_work ;
int scan_channel ;
/* remember which channel was scanned last, != 0 if currently scanning */
u8 scan_ssid [ IEEE80211_MAX_SSID_LEN + 1 ] ;
u8 scan_ssid_len ;
2007-02-10 17:25:27 +03:00
2009-10-22 17:30:49 +04:00
/* Associating */
struct delayed_work assoc_work ;
struct current_bss_params curbssparams ;
u8 mode ;
struct list_head network_list ;
struct list_head network_free_list ;
struct bss_descriptor * networks ;
2007-05-26 01:09:41 +04:00
struct assoc_request * pending_assoc_req ;
struct assoc_request * in_progress_assoc_req ;
2009-10-22 17:30:49 +04:00
u16 capability ;
uint16_t enablehwauto ;
uint16_t ratebitmap ;
2007-02-10 17:25:27 +03:00
2009-10-22 17:30:49 +04:00
/* ADHOC */
u16 beacon_period ;
u8 beacon_enable ;
u8 adhoccreate ;
2007-02-10 17:25:27 +03:00
2009-10-22 17:30:49 +04:00
/* WEXT */
char name [ DEV_NAME_LEN ] ;
u8 nodename [ 16 ] ;
struct iw_statistics wstats ;
u8 cur_rate ;
# define MAX_REGION_CHANNEL_NUM 2
struct region_channel region_channel [ MAX_REGION_CHANNEL_NUM ] ;
2007-02-10 17:25:27 +03:00
/** 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-03-26 15:22:11 +03:00
extern struct cmd_confirm_sleep confirm_sleep ;
2007-11-16 02:05:47 +03:00
# endif