Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs...
[pandora-kernel.git] / drivers / net / wireless / orinoco.h
index f510994..981570b 100644 (file)
@@ -9,6 +9,7 @@
 
 #define DRIVER_VERSION "0.15"
 
+#include <linux/interrupt.h>
 #include <linux/netdevice.h>
 #include <linux/wireless.h>
 #include <net/iw_handler.h>
@@ -30,6 +31,15 @@ struct orinoco_key {
        char data[ORINOCO_MAX_KEY_SIZE];
 } __attribute__ ((packed));
 
+#define TKIP_KEYLEN    16
+#define MIC_KEYLEN     8
+
+struct orinoco_tkip_key {
+       u8 tkip[TKIP_KEYLEN];
+       u8 tx_mic[MIC_KEYLEN];
+       u8 rx_mic[MIC_KEYLEN];
+};
+
 typedef enum {
        FIRMWARE_TYPE_AGERE,
        FIRMWARE_TYPE_INTERSIL,
@@ -48,6 +58,14 @@ struct xbss_element {
        struct list_head list;
 };
 
+struct hermes_rx_descriptor;
+
+struct orinoco_rx_data {
+       struct hermes_rx_descriptor *desc;
+       struct sk_buff *skb;
+       struct list_head list;
+};
+
 struct orinoco_private {
        void *card;     /* Pointer to card dependent structure */
        struct device *dev;
@@ -59,6 +77,11 @@ struct orinoco_private {
        int hw_unavailable;
        struct work_struct reset_work;
 
+       /* Interrupt tasklets */
+       struct tasklet_struct rx_tasklet;
+       struct list_head rx_list;
+       struct orinoco_rx_data *rx_data;
+
        /* driver state */
        int open;
        u16 last_linkstatus;
@@ -93,6 +116,7 @@ struct orinoco_private {
        unsigned int has_hostscan:1;
        unsigned int has_alt_txcntl:1;
        unsigned int has_ext_scan:1;
+       unsigned int has_wpa:1;
        unsigned int do_fw_download:1;
        unsigned int broken_disableport:1;
        unsigned int broken_monitor:1;
@@ -100,7 +124,7 @@ struct orinoco_private {
        /* Configuration paramaters */
        u32 iw_mode;
        int prefer_port3;
-       u16 wep_on, wep_restrict, tx_key;
+       u16 encode_alg, wep_restrict, tx_key;
        struct orinoco_key keys[ORINOCO_MAX_KEYS];
        int bitratemode;
        char nick[IW_ESSID_MAX_SIZE+1];
@@ -128,6 +152,18 @@ struct orinoco_private {
 
        int     scan_inprogress;        /* Scan pending... */
        u32     scan_mode;              /* Type of scan done */
+
+       /* WPA support */
+       u8 *wpa_ie;
+       int wpa_ie_len;
+
+       struct orinoco_tkip_key tkip_key[ORINOCO_MAX_KEYS];
+       struct crypto_hash *rx_tfm_mic;
+       struct crypto_hash *tx_tfm_mic;
+
+       unsigned int wpa_enabled:1;
+       unsigned int tkip_cm_active:1;
+       unsigned int key_mgmt:3;
 };
 
 #ifdef ORINOCO_DEBUG