mwifiex: use separate wait condition for each command node
[pandora-kernel.git] / drivers / net / wireless / mwifiex / main.h
index e6b6c0c..7db20db 100644 (file)
@@ -37,6 +37,7 @@
 #include "ioctl.h"
 #include "util.h"
 #include "fw.h"
+#include "pcie.h"
 
 extern const char driver_version[];
 
@@ -45,15 +46,6 @@ enum {
        MWIFIEX_SYNC_CMD
 };
 
-#define DRV_MODE_STA       0x1
-
-struct mwifiex_drv_mode {
-       u16 drv_mode;
-       u16 intf_num;
-       struct mwifiex_bss_attr *bss_attr;
-};
-
-
 #define MWIFIEX_MAX_AP                         64
 
 #define MWIFIEX_DEFAULT_WATCHDOG_TIMEOUT       (5 * HZ)
@@ -116,6 +108,8 @@ struct mwifiex_drv_mode {
 
 #define MAX_FREQUENCY_BAND_BG   2484
 
+#define MWIFIEX_EVENT_HEADER_LEN           4
+
 struct mwifiex_dbg {
        u32 num_cmd_host_to_card_failure;
        u32 num_cmd_sleep_cfm_host_to_card_failure;
@@ -165,6 +159,11 @@ enum MWIFIEX_PS_STATE {
        PS_STATE_SLEEP
 };
 
+enum mwifiex_iface_type {
+       MWIFIEX_SDIO,
+       MWIFIEX_PCIE,
+};
+
 struct mwifiex_add_ba_param {
        u32 tx_win_size;
        u32 rx_win_size;
@@ -182,7 +181,6 @@ struct mwifiex_ra_list_tbl {
        struct sk_buff_head skb_head;
        u8 ra[ETH_ALEN];
        u32 total_pkts_size;
-       u32 total_pkts;
        u32 is_11n_enabled;
 };
 
@@ -522,33 +520,38 @@ struct cmd_ctrl_node {
        void *data_buf;
        u32 wait_q_enabled;
        struct sk_buff *skb;
+       u8 *condition;
+       u8 cmd_wait_q_woken;
 };
 
 struct mwifiex_if_ops {
        int (*init_if) (struct mwifiex_adapter *);
        void (*cleanup_if) (struct mwifiex_adapter *);
-       int (*check_fw_status) (struct mwifiex_adapter *, u32, int *);
+       int (*check_fw_status) (struct mwifiex_adapter *, u32);
        int (*prog_fw) (struct mwifiex_adapter *, struct mwifiex_fw_image *);
        int (*register_dev) (struct mwifiex_adapter *);
        void (*unregister_dev) (struct mwifiex_adapter *);
        int (*enable_int) (struct mwifiex_adapter *);
        int (*process_int_status) (struct mwifiex_adapter *);
-       int (*host_to_card) (struct mwifiex_adapter *, u8,
-                            u8 *payload, u32 pkt_len,
+       int (*host_to_card) (struct mwifiex_adapter *, u8, struct sk_buff *,
                             struct mwifiex_tx_param *);
        int (*wakeup) (struct mwifiex_adapter *);
        int (*wakeup_complete) (struct mwifiex_adapter *);
 
+       /* Interface specific functions */
        void (*update_mp_end_port) (struct mwifiex_adapter *, u16);
        void (*cleanup_mpa_buf) (struct mwifiex_adapter *);
+       int (*cmdrsp_complete) (struct mwifiex_adapter *, struct sk_buff *);
+       int (*event_complete) (struct mwifiex_adapter *, struct sk_buff *);
 };
 
 struct mwifiex_adapter {
+       u8 iface_type;
        struct mwifiex_private *priv[MWIFIEX_MAX_BSS_NUM];
        u8 priv_num;
-       struct mwifiex_drv_mode *drv_mode;
        const struct firmware *firmware;
        char fw_name[32];
+       int winner;
        struct device *dev;
        bool surprise_removed;
        u32 fw_release_number;
@@ -650,6 +653,8 @@ struct mwifiex_adapter {
        u32 arp_filter_size;
        u16 cmd_wait_q_required;
        struct mwifiex_wait_queue cmd_wait_q;
+       u8 scan_wait_q_woken;
+       struct cmd_ctrl_node *cmd_queued;
 };
 
 int mwifiex_init_lock_list(struct mwifiex_adapter *adapter);
@@ -669,7 +674,8 @@ int mwifiex_recv_packet(struct mwifiex_adapter *, struct sk_buff *skb);
 
 int mwifiex_process_event(struct mwifiex_adapter *adapter);
 
-int mwifiex_complete_cmd(struct mwifiex_adapter *adapter);
+int mwifiex_complete_cmd(struct mwifiex_adapter *adapter,
+                        struct cmd_ctrl_node *cmd_node);
 
 int mwifiex_send_cmd_async(struct mwifiex_private *priv, uint16_t cmd_no,
                           u16 cmd_action, u32 cmd_oid, void *data_buf);
@@ -792,6 +798,8 @@ int mwifiex_cmd_get_hw_spec(struct mwifiex_private *priv,
 int mwifiex_ret_get_hw_spec(struct mwifiex_private *priv,
                            struct host_cmd_ds_command *resp);
 int is_command_pending(struct mwifiex_adapter *adapter);
+void mwifiex_init_priv_params(struct mwifiex_private *priv,
+                                               struct net_device *dev);
 
 /*
  * This function checks if the queuing is RA based or not.
@@ -881,7 +889,7 @@ struct mwifiex_private *mwifiex_bss_index_to_priv(struct mwifiex_adapter
                                                *adapter, u8 bss_index);
 int mwifiex_init_shutdown_fw(struct mwifiex_private *priv,
                             u32 func_init_shutdown);
-int mwifiex_add_card(void *, struct semaphore *, struct mwifiex_if_ops *);
+int mwifiex_add_card(void *, struct semaphore *, struct mwifiex_if_ops *, u8);
 int mwifiex_remove_card(struct mwifiex_adapter *, struct semaphore *);
 
 void mwifiex_get_version(struct mwifiex_adapter *adapter, char *version,
@@ -958,7 +966,7 @@ int mwifiex_get_bss_info(struct mwifiex_private *,
 int mwifiex_fill_new_bss_desc(struct mwifiex_private *priv,
                              u8 *bssid, s32 rssi, u8 *ie_buf,
                              size_t ie_len, u16 beacon_period,
-                             u16 cap_info_bitmap,
+                             u16 cap_info_bitmap, u8 band,
                              struct mwifiex_bssdescriptor *bss_desc);
 int mwifiex_update_bss_desc_with_ie(struct mwifiex_adapter *adapter,
                                struct mwifiex_bssdescriptor *bss_entry,
@@ -966,6 +974,12 @@ int mwifiex_update_bss_desc_with_ie(struct mwifiex_adapter *adapter,
 int mwifiex_check_network_compatibility(struct mwifiex_private *priv,
                                        struct mwifiex_bssdescriptor *bss_desc);
 
+struct net_device *mwifiex_add_virtual_intf(struct wiphy *wiphy,
+                                       char *name, enum nl80211_iftype type,
+                                       u32 *flags, struct vif_params *params);
+int mwifiex_del_virtual_intf(struct wiphy *wiphy, struct net_device *dev);
+
+
 #ifdef CONFIG_DEBUG_FS
 void mwifiex_debugfs_init(void);
 void mwifiex_debugfs_remove(void);