mwifiex: add SDIO rx single port aggregation
[deliverable/linux.git] / drivers / net / wireless / mwifiex / main.h
index f0a6af179af03ba2ba2497c6a296f5f450b18463..842fa0beb18841c4dbfee76f27a57b6b6b0c6072 100644 (file)
@@ -35,6 +35,7 @@
 #include <linux/ctype.h>
 #include <linux/of.h>
 #include <linux/idr.h>
+#include <linux/inetdevice.h>
 
 #include "decl.h"
 #include "ioctl.h"
@@ -58,6 +59,8 @@ enum {
 
 #define MWIFIEX_MAX_AP                         64
 
+#define MWIFIEX_MAX_PKTS_TXQ                   16
+
 #define MWIFIEX_DEFAULT_WATCHDOG_TIMEOUT       (5 * HZ)
 
 #define MWIFIEX_TIMER_10S                      10000
@@ -118,6 +121,7 @@ enum {
 
 #define MWIFIEX_TYPE_CMD                               1
 #define MWIFIEX_TYPE_DATA                              0
+#define MWIFIEX_TYPE_AGGR_DATA                         10
 #define MWIFIEX_TYPE_EVENT                             3
 
 #define MAX_BITMAP_RATES_SIZE                  18
@@ -140,6 +144,9 @@ enum {
 
 #define MWIFIEX_DRV_INFO_SIZE_MAX 0x40000
 
+/* Address alignment */
+#define MWIFIEX_ALIGN_ADDR(p, a) (((long)(p) + (a) - 1) & ~((a) - 1))
+
 struct mwifiex_dbg {
        u32 num_cmd_host_to_card_failure;
        u32 num_cmd_sleep_cfm_host_to_card_failure;
@@ -207,6 +214,12 @@ struct mwifiex_tx_aggr {
        u8 amsdu;
 };
 
+enum mwifiex_ba_status {
+       BA_SETUP_NONE = 0,
+       BA_SETUP_INPROGRESS,
+       BA_SETUP_COMPLETE
+};
+
 struct mwifiex_ra_list_tbl {
        struct list_head list;
        struct sk_buff_head skb_head;
@@ -215,6 +228,8 @@ struct mwifiex_ra_list_tbl {
        u16 max_amsdu;
        u16 ba_pkt_count;
        u8 ba_packet_thr;
+       enum mwifiex_ba_status ba_status;
+       u8 amsdu_in_ampdu;
        u16 total_pkt_count;
        bool tdls_link;
 };
@@ -598,11 +613,6 @@ struct mwifiex_private {
        struct mwifiex_11h_intf_state state_11h;
 };
 
-enum mwifiex_ba_status {
-       BA_SETUP_NONE = 0,
-       BA_SETUP_INPROGRESS,
-       BA_SETUP_COMPLETE
-};
 
 struct mwifiex_tx_ba_stream_tbl {
        struct list_head list;
@@ -735,6 +745,7 @@ struct mwifiex_if_ops {
        int (*clean_pcie_ring) (struct mwifiex_adapter *adapter);
        void (*iface_work)(struct work_struct *work);
        void (*submit_rem_rx_urbs)(struct mwifiex_adapter *adapter);
+       void (*deaggr_pkt)(struct mwifiex_adapter *, struct sk_buff *);
 };
 
 struct mwifiex_adapter {
@@ -768,14 +779,18 @@ struct mwifiex_adapter {
        bool rx_processing;
        bool delay_main_work;
        bool rx_locked;
+       bool main_locked;
        struct mwifiex_bss_prio_tbl bss_prio_tbl[MWIFIEX_MAX_BSS_NUM];
        /* spin lock for init/shutdown */
        spinlock_t mwifiex_lock;
        /* spin lock for main process */
        spinlock_t main_proc_lock;
        u32 mwifiex_processing;
+       u8 more_task_flag;
        u16 tx_buf_size;
        u16 curr_tx_buf_size;
+       bool sdio_rx_aggr_enable;
+       u16 sdio_rx_block_size;
        u32 ioport;
        enum MWIFIEX_HARDWARE_STATUS hw_status;
        u16 number_of_antenna;
@@ -810,6 +825,8 @@ struct mwifiex_adapter {
        spinlock_t scan_pending_q_lock;
        /* spin lock for RX processing routine */
        spinlock_t rx_proc_lock;
+       struct sk_buff_head tx_data_q;
+       atomic_t tx_queued;
        u32 scan_processing;
        u16 region_code;
        struct mwifiex_802_11d_domain_reg domain_reg;
@@ -896,6 +913,8 @@ struct mwifiex_adapter {
        bool auto_tdls;
 };
 
+void mwifiex_process_tx_queue(struct mwifiex_adapter *adapter);
+
 int mwifiex_init_lock_list(struct mwifiex_adapter *adapter);
 
 void mwifiex_set_trans_start(struct net_device *dev);
@@ -1417,6 +1436,8 @@ u8 mwifiex_adjust_data_rate(struct mwifiex_private *priv,
                            u8 rx_rate, u8 ht_info);
 
 void mwifiex_dump_drv_info(struct mwifiex_adapter *adapter);
+void *mwifiex_alloc_dma_align_buf(int rx_len, gfp_t flags);
+void mwifiex_queue_main_work(struct mwifiex_adapter *adapter);
 
 #ifdef CONFIG_DEBUG_FS
 void mwifiex_debugfs_init(void);
This page took 0.049541 seconds and 5 git commands to generate.