]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/net/wireless/orinoco.h
stallion: Use krefs
[linux-2.6-omap-h63xx.git] / drivers / net / wireless / orinoco.h
index f93752ffb07cbf5bd5c3fa4a4fbf359a6b5e4643..981570bd3b9d660b6c403840a09a1b98d4eb67c7 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,17 +31,40 @@ 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,
        FIRMWARE_TYPE_SYMBOL
 } fwtype_t;
 
-typedef struct {
+struct bss_element {
        union hermes_scan_info bss;
        unsigned long last_scanned;
        struct list_head list;
-} bss_element;
+};
+
+struct xbss_element {
+       struct agere_ext_scan_info bss;
+       unsigned long last_scanned;
+       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 */
@@ -53,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;
@@ -86,6 +115,8 @@ struct orinoco_private {
        unsigned int has_sensitivity:1;
        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;
@@ -93,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];
@@ -117,10 +148,22 @@ struct orinoco_private {
        /* Scanning support */
        struct list_head bss_list;
        struct list_head bss_free_list;
-       bss_element *bss_data;
+       void *bss_xbss_data;
 
        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