* adding network config for olpc * adding libertas * config issue * quiet mode for...
[openwrt/staging/florian.git] / package / libertas / src / dev.h
diff --git a/package/libertas/src/dev.h b/package/libertas/src/dev.h
new file mode 100644 (file)
index 0000000..86b45a4
--- /dev/null
@@ -0,0 +1,365 @@
+/**
+  * This file contains definitions and data structures specific
+  * to Marvell 802.11 NIC. It contains the Device Information
+  * structure struct lbs_private..
+  */
+#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 "defs.h"
+#include "scan.h"
+
+extern struct ethtool_ops lbs_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 lbs_802_11_security {
+       u8 WPAenabled;
+       u8 WPA2enabled;
+       u8 wep_enabled;
+       u8 auth_mode;
+};
+
+/** Current Basic Service Set State Structure */
+struct current_bss_params {
+       /** bssid */
+       u8 bssid[ETH_ALEN];
+       /** ssid */
+       u8 ssid[IW_ESSID_MAX_SIZE + 1];
+       u8 ssid_len;
+
+       /** band */
+       u8 band;
+       /** channel */
+       u8 channel;
+       /** 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;
+};
+
+/* Mesh statistics */
+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 */
+       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 */
+       u32     tx_failed_cnt;          /* Tx:  Failed transmissions */
+};
+
+/** Private structure for the MV device */
+struct lbs_private {
+       int mesh_open;
+       int infra_open;
+       int mesh_autostart_enabled;
+       __le16 boot2_version;
+
+       char name[DEV_NAME_LEN];
+
+       void *card;
+       struct net_device *dev;
+
+       struct net_device_stats stats;
+       struct net_device *mesh_dev; /* Virtual device */
+       struct net_device *rtap_net_dev;
+
+       struct iw_statistics wstats;
+       struct lbs_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;
+
+       /** Upload length */
+       u32 upld_len;
+       /* Upload buffer */
+       u8 upld_buf[LBS_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;
+
+       /** thread to service interrupts */
+       struct task_struct *main_thread;
+       wait_queue_head_t waitq;
+       struct workqueue_struct *work_thread;
+
+       struct delayed_work scan_work;
+       struct delayed_work assoc_work;
+       struct work_struct sync_channel;
+
+       /** Hardware access */
+       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 *);
+
+       /* was struct lbs_adapter from here... */
+
+       /** Wlan adapter data structure*/
+       /** STATUS variables */
+       u8 fwreleasenumber[4];
+       u32 fwcapinfo;
+       /* protected with big lock */
+
+       struct mutex lock;
+
+       /* 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 */
+       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;
+       /* command related variables protected by priv->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;
+
+       u8 hisregcpy;
+
+       /** current ssid/bssid related parameters*/
+       struct current_bss_params curbssparams;
+       u8 mesh_ssid[IW_ESSID_MAX_SIZE + 1];
+       u8 mesh_ssid_len;
+
+       /* IW_MODE_* */
+       u8 mode;
+
+       /* Scan results list */
+       struct list_head network_list;
+       struct list_head network_free_list;
+       struct bss_descriptor *networks;
+
+       u16 beacon_period;
+       u8 beacon_enable;
+       u8 adhoccreate;
+
+       /** capability Info used in Association, start, join */
+       u16 capability;
+
+       /** 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;
+       u32 mesh_connect_status;
+       u16 regioncode;
+       u16 txpowerlevel;
+
+       /** POWER MANAGEMENT AND PnP SUPPORT */
+       u8 surpriseremoved;
+
+       u16 psmode;             /* Wlan802_11PowermodeCAM=disable
+                                  Wlan802_11PowermodeMAX_PSP=enable */
+       u32 psstate;
+       u8 needtowakeup;
+
+       struct PS_CMD_ConfirmSleep lbs_ps_confirm_sleep;
+
+       struct assoc_request * pending_assoc_req;
+       struct assoc_request * in_progress_assoc_req;
+
+       /** Encryption parameter */
+       struct lbs_802_11_security secinfo;
+
+       /** 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;
+
+       /** 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;
+
+       /** data rate stuff */
+       u8 cur_rate;
+       u8 auto_rate;
+
+       /** 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 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 lbs_offset_value offsetvalue;
+
+       struct cmd_ds_802_11_get_log logmsg;
+
+       u32 monitormode;
+       int last_scanned_channel;
+       u8 fw_ready;
+};
+
+/** 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;
+};
+
+#endif