libertas: cleanup host.h and hostcmd.h
[safe/jmp/linux-2.6] / drivers / net / wireless / libertas / dev.h
index d6c340a..191ea33 100644 (file)
@@ -1,22 +1,20 @@
 /**
   * This file contains definitions and data structures specific
   * to Marvell 802.11 NIC. It contains the Device Information
-  * structure wlan_adapter.
+  * structure struct lbs_private..
   */
-#ifndef _WLAN_DEV_H_
-#define _WLAN_DEV_H_
+#ifndef _LBS_DEV_H_
+#define _LBS_DEV_H_
 
 #include <linux/netdevice.h>
 #include <linux/wireless.h>
 #include <linux/ethtool.h>
 #include <linux/debugfs.h>
-#include <net/ieee80211.h>
 
 #include "defs.h"
-#include "scan.h"
-#include "thread.h"
+#include "host.h"
 
-extern struct ethtool_ops libertas_ethtool_ops;
+extern const struct ethtool_ops lbs_ethtool_ops;
 
 #define        MAX_BSSID_PER_CHANNEL           16
 
@@ -54,11 +52,12 @@ struct region_channel {
        struct chan_freq_power *CFP;
 };
 
-struct wlan_802_11_security {
+struct lbs_802_11_security {
        u8 WPAenabled;
        u8 WPA2enabled;
        u8 wep_enabled;
        u8 auth_mode;
+       u32 key_mgmt;
 };
 
 /** Current Basic Service Set State Structure */
@@ -73,24 +72,22 @@ struct current_bss_params {
        u8 band;
        /** channel */
        u8 channel;
-       /** number of rates supported */
-       int numofrates;
-       /** supported rates*/
-       u8 datarates[WLAN_SUPPORTED_RATES];
+       /** zero-terminated array of supported data rates */
+       u8 rates[MAX_RATES + 1];
 };
 
 /** sleep_params */
 struct sleep_params {
-       u16 sp_error;
-       u16 sp_offset;
-       u16 sp_stabletime;
-       u8 sp_calcontrol;
-       u8 sp_extsleepclk;
-       u16 sp_reserved;
+       uint16_t sp_error;
+       uint16_t sp_offset;
+       uint16_t sp_stabletime;
+       uint8_t  sp_calcontrol;
+       uint8_t  sp_extsleepclk;
+       uint16_t sp_reserved;
 };
 
 /* Mesh statistics */
-struct wlan_mesh_stats {
+struct lbs_mesh_stats {
        u32     fwd_bcast_cnt;          /* Fwd: Broadcast counter */
        u32     fwd_unicast_cnt;        /* Fwd: Unicast counter */
        u32     fwd_drop_ttl;           /* Fwd: TTL zero */
@@ -102,22 +99,23 @@ struct wlan_mesh_stats {
 };
 
 /** Private structure for the MV device */
-struct _wlan_private {
-       int open;
+struct lbs_private {
+       struct wireless_dev *wdev;
        int mesh_open;
+       int mesh_fw_ver;
        int infra_open;
+       int mesh_autostart_enabled;
 
        char name[DEV_NAME_LEN];
 
        void *card;
-       wlan_adapter *adapter;
        struct net_device *dev;
 
-       struct net_device_stats stats;
-       struct net_device *mesh_dev ; /* Virtual device */
+       struct net_device *mesh_dev; /* Virtual device */
+       struct net_device *rtap_net_dev;
 
        struct iw_statistics wstats;
-       struct wlan_mesh_stats mstats;
+       struct lbs_mesh_stats mstats;
        struct dentry *debugfs_dir;
        struct dentry *debugfs_debug;
        struct dentry *debugfs_files[6];
@@ -132,93 +130,69 @@ struct _wlan_private {
        u32 bbp_offset;
        u32 rf_offset;
 
-       /** Upload length */
-       u32 upld_len;
-       /* Upload buffer */
-       u8 upld_buf[WLAN_UPLD_SIZE];
+       /** Deep sleep flag */
+       int is_deep_sleep;
+       /** Auto deep sleep enabled flag */
+       int is_auto_deep_sleep_enabled;
+       /** Device wakeup required flag */
+       int wakeup_dev_required;
+       /** Auto deep sleep flag*/
+       int is_activity_detected;
+       /** Auto deep sleep timeout (in miliseconds) */
+       int auto_deep_sleep_timeout;
+
+       /** Deep sleep wait queue */
+       wait_queue_head_t       ds_awake_q;
+
        /* 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;
 
-       const struct firmware *firmware;
-       struct device *hotplug_device;
-
        /** thread to service interrupts */
-       struct wlan_thread mainthread;
+       struct task_struct *main_thread;
+       wait_queue_head_t waitq;
+       struct workqueue_struct *work_thread;
+
+       struct work_struct mcast_work;
 
+       /** Scanning */
+       struct delayed_work scan_work;
        struct delayed_work assoc_work;
-       struct workqueue_struct *assoc_thread;
+       struct work_struct sync_channel;
+       /* remember which channel was scanned last, != 0 if currently scanning */
+       int scan_channel;
+       u8 scan_ssid[IW_ESSID_MAX_SIZE + 1];
+       u8 scan_ssid_len;
 
        /** Hardware access */
-       int (*hw_register_dev) (wlan_private * priv);
-       int (*hw_unregister_dev) (wlan_private *);
-       int (*hw_prog_firmware) (wlan_private *);
-       int (*hw_host_to_card) (wlan_private * priv, u8 type, u8 * payload, u16 nb);
-       int (*hw_get_int_status) (wlan_private * priv, u8 *);
-       int (*hw_read_event_cause) (wlan_private *);
-};
-
-/** 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 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;
-
-       /* BSS to associate with for infrastructure of Ad-Hoc join */
-       struct bss_descriptor bss;
-};
-
-/** Wlan adapter data structure*/
-struct _wlan_adapter {
+       int (*hw_host_to_card) (struct lbs_private *priv, u8 type, u8 *payload, u16 nb);
+       void (*reset_card) (struct lbs_private *priv);
+       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);
+
+       /* Wake On LAN */
+       uint32_t wol_criteria;
+       uint8_t wol_gpio;
+       uint8_t wol_gap;
+
+       /** Wlan adapter data structure*/
        /** STATUS variables */
-       u8 fwreleasenumber[4];
+       u32 fwrelease;
        u32 fwcapinfo;
-       /* protected with big lock */
 
        struct mutex lock;
 
-       u8 tmptxbuf[WLAN_UPLD_SIZE];
+       /* TX packet ready to be sent... */
+       int tx_pending_len;             /* -1 while building packet */
+
+       u8 tx_pending_buf[LBS_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 */
@@ -231,50 +205,48 @@ struct _wlan_adapter {
        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 */
+       /* 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];
 
        /** 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;
+       struct timer_list auto_deepsleep_timer;
+       int nr_retries;
+       int cmd_timed_out;
 
        /** current ssid/bssid related parameters*/
        struct current_bss_params curbssparams;
 
+       uint16_t mesh_tlv;
+       u8 mesh_ssid[IW_ESSID_MAX_SIZE + 1];
+       u8 mesh_ssid_len;
+
        /* IW_MODE_* */
        u8 mode;
 
-       u8 prev_ssid[IW_ESSID_MAX_SIZE + 1];
-       u8 prev_ssid_len;
-       u8 prev_bssid[ETH_ALEN];
-
        /* Scan results list */
        struct list_head network_list;
        struct list_head network_free_list;
        struct bss_descriptor *networks;
 
-       u8 scantype;
-       u32 scanmode;
-
-       u16 beaconperiod;
+       u16 beacon_period;
+       u8 beacon_enable;
        u8 adhoccreate;
 
        /** capability Info used in Association, start, join */
-       struct ieeetypes_capinfo capinfo;
+       u16 capability;
 
        /** MAC address information */
        u8 current_addr[ETH_ALEN];
@@ -284,73 +256,56 @@ struct _wlan_adapter {
        /** 802.11 statistics */
 //     struct cmd_DS_802_11_GET_STAT wlan802_11Stat;
 
-       u16 enablehwauto;
-       u16 ratebitmap;
-       /** control G rates */
-       u8 adhoc_grate_enabled;
+       uint16_t enablehwauto;
+       uint16_t ratebitmap;
 
-       u32 txantenna;
-       u32 rxantenna;
-
-       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;
+       u16 mac_control;
        u32 connect_status;
+       u32 mesh_connect_status;
        u16 regioncode;
-       u16 regiontableindex;
-       u16 txpowerlevel;
+       s16 txpower_cur;
+       s16 txpower_min;
+       s16 txpower_max;
 
        /** 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 * pending_assoc_req;
        struct assoc_request * in_progress_assoc_req;
 
        /** Encryption parameter */
-       struct wlan_802_11_security secinfo;
+       struct lbs_802_11_security secinfo;
 
        /** WEP keys */
-       struct WLAN_802_11_KEY wep_keys[4];
+       struct enc_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 enc_key wpa_mcast_key;
+       struct enc_key wpa_unicast_key;
+
+/*
+ * In theory, the IE is limited to the IE length, 255,
+ * but in practice 64 bytes are enough.
+ */
+#define MAX_WPA_IE_LEN 64
 
        /** 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];
@@ -358,18 +313,11 @@ struct _wlan_adapter {
        u8 rawNF[DEFAULT_DATA_AVG_FACTOR];
        u16 nextSNRNF;
        u16 numSNRNF;
-       u16 rxpd_rate;
 
-       u8 radioon;
-       u32 preamble;
+       u8 radio_on;
 
-       /** Multi bands Parameter*/
-       u8 libertas_supported_rates[G_SUPPORTED_RATES];
-
-       /** Blue Tooth Co-existence Arbitration */
-
-       /** sleep_params */
-       struct sleep_params sp;
+       /** data rate stuff */
+       u8 cur_rate;
 
        /** RF calibration data */
 
@@ -380,28 +328,101 @@ struct _wlan_adapter {
        struct region_channel universal_channel[MAX_REGION_CHANNEL_NUM];
 
        /** 11D and Domain Regulatory Data */
-       struct wlan_802_11d_domain_reg domainreg;
+       struct lbs_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 lbs_offset_value offsetvalue;
 
-       struct cmd_ds_802_11_get_log logmsg;
-       u16 scanprobes;
+       u32 monitormode;
+       u8 fw_ready;
+};
 
-       u32 pkttxctrl;
+extern struct cmd_confirm_sleep confirm_sleep;
 
-       u16 txrate;
-       u32 linkmode;
-       u32 radiomode;
-       u32 debugmode;
-       u8 fw_ready;
+/**
+ *  @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;
+       __le16 atimwindow;
+
+       /* IW_MODE_AUTO, IW_MODE_ADHOC, IW_MODE_INFRA */
+       u8 mode;
+
+       /* zero-terminated array of supported data rates */
+       u8 rates[MAX_RATES + 1];
 
-       u8 last_scanned_channel;
+       unsigned long last_scanned;
+
+       union ieee_phy_param_set phy;
+       union ieee_ss_param_set ss;
+
+       struct ieee_ie_country_info_full_set 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;
+};
+
+/** 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] __attribute__ ((aligned (2)));
+
+       /** 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;
 };
 
-#endif                         /* _WLAN_DEV_H_ */
+#endif