wl1271: Add structure for firmware configuration values
[linux-2.6.git] / drivers / net / wireless / wl12xx / wl1271.h
index 55818f9..64a3270 100644 (file)
@@ -32,6 +32,8 @@
 #include <linux/bitops.h>
 #include <net/mac80211.h>
 
+#include "wl1271_conf.h"
+
 #define DRIVER_NAME "wl1271"
 #define DRIVER_PREFIX DRIVER_NAME ": "
 
@@ -97,21 +99,35 @@ enum {
        } while (0)
 
 #define WL1271_DEFAULT_RX_CONFIG (CFG_UNI_FILTER_EN |  \
-                                 CFG_BSSID_FILTER_EN)
+                                 CFG_BSSID_FILTER_EN | \
+                                 CFG_MC_FILTER_EN)
 
 #define WL1271_DEFAULT_RX_FILTER (CFG_RX_RCTS_ACK | CFG_RX_PRSP_EN |  \
                                  CFG_RX_MGMT_EN | CFG_RX_DATA_EN |   \
                                  CFG_RX_CTL_EN | CFG_RX_BCN_EN |     \
                                  CFG_RX_AUTH_EN | CFG_RX_ASSOC_EN)
 
+#define WL1271_DEFAULT_BASIC_RATE_SET (ACX_RATE_MASK_ALL)
+
 #define WL1271_FW_NAME "wl1271-fw.bin"
 #define WL1271_NVS_NAME "wl1271-nvs.bin"
 
-#define WL1271_BUSY_WORD_LEN 8
+/*
+ * FIXME: for the wl1271, a busy word count of 1 here will result in a more
+ * optimal SPI interface. There is some SPI bug however, causing RXS time outs
+ * with this mode occasionally on boot, so lets have two for now.
+ */
+#define WL1271_BUSY_WORD_CNT 2
+#define WL1271_BUSY_WORD_LEN (WL1271_BUSY_WORD_CNT * sizeof(u32))
 
 #define WL1271_ELP_HW_STATE_ASLEEP 0
 #define WL1271_ELP_HW_STATE_IRQ    1
 
+#define WL1271_DEFAULT_BEACON_INT  100
+#define WL1271_DEFAULT_DTIM_PERIOD 1
+
+#define ACX_TX_DESCRIPTORS         32
+
 enum wl1271_state {
        WL1271_STATE_OFF,
        WL1271_STATE_ON,
@@ -134,6 +150,8 @@ struct wl1271_partition {
 struct wl1271_partition_set {
        struct wl1271_partition mem;
        struct wl1271_partition reg;
+       struct wl1271_partition mem2;
+       struct wl1271_partition mem3;
 };
 
 struct wl1271;
@@ -288,10 +306,7 @@ struct wl1271 {
        enum wl1271_state state;
        struct mutex mutex;
 
-       int physical_mem_addr;
-       int physical_reg_addr;
-       int virtual_mem_addr;
-       int virtual_reg_addr;
+       struct wl1271_partition_set part;
 
        struct wl1271_chip chip;
 
@@ -332,10 +347,17 @@ struct wl1271 {
        bool tx_queue_stopped;
 
        struct work_struct tx_work;
+
        struct work_struct filter_work;
+       struct wl1271_filter_params *filter_params;
 
        /* Pending TX frames */
-       struct sk_buff *tx_frames[16];
+       struct sk_buff *tx_frames[ACX_TX_DESCRIPTORS];
+
+       /* Security sequence number counters */
+       u8 tx_security_last_seq;
+       u16 tx_security_seq_16;
+       u32 tx_security_seq_32;
 
        /* FW Rx counter */
        u32 rx_counter;
@@ -358,6 +380,12 @@ struct wl1271 {
        /* Our association ID */
        u16 aid;
 
+       /* currently configured rate set */
+       u32 basic_rate_set;
+
+       /* The current band */
+       enum ieee80211_band band;
+
        /* Default key (for WEP) */
        u32 default_key;
 
@@ -368,6 +396,7 @@ struct wl1271 {
        bool elp;
 
        struct completion *elp_compl;
+       struct delayed_work elp_work;
 
        /* we can be in psm, but not in elp, we have to differentiate */
        bool psm;
@@ -383,11 +412,19 @@ struct wl1271 {
 
        u32 buffer_32;
        u32 buffer_cmd;
-       u8 buffer_busyword[WL1271_BUSY_WORD_LEN];
+       u32 buffer_busyword[WL1271_BUSY_WORD_CNT];
        struct wl1271_rx_descriptor *rx_descriptor;
 
        struct wl1271_fw_status *fw_status;
        struct wl1271_tx_hw_res_if *tx_res_if;
+
+       struct ieee80211_vif *vif;
+
+       /* Used for a workaround to send disconnect before rejoining */
+       bool joined;
+
+       /* Current chipset configuration */
+       struct conf_drv_settings conf;
 };
 
 int wl1271_plt_start(struct wl1271 *wl);