1 /* 2 * This file contains definitions and data structures specific 3 * to Marvell 802.11 NIC. It contains the Device Information 4 * structure struct lbs_private.. 5 */ 6 #ifndef _LBS_DEV_H_ 7 #define _LBS_DEV_H_ 8 9 #include "defs.h" 10 #include "host.h" 11 12 #include <linux/kfifo.h> 13 14 /* sleep_params */ 15 struct sleep_params { 16 uint16_t sp_error; 17 uint16_t sp_offset; 18 uint16_t sp_stabletime; 19 uint8_t sp_calcontrol; 20 uint8_t sp_extsleepclk; 21 uint16_t sp_reserved; 22 }; 23 24 /* Mesh statistics */ 25 struct lbs_mesh_stats { 26 u32 fwd_bcast_cnt; /* Fwd: Broadcast counter */ 27 u32 fwd_unicast_cnt; /* Fwd: Unicast counter */ 28 u32 fwd_drop_ttl; /* Fwd: TTL zero */ 29 u32 fwd_drop_rbt; /* Fwd: Recently Broadcasted */ 30 u32 fwd_drop_noroute; /* Fwd: No route to Destination */ 31 u32 fwd_drop_nobuf; /* Fwd: Run out of internal buffers */ 32 u32 drop_blind; /* Rx: Dropped by blinding table */ 33 u32 tx_failed_cnt; /* Tx: Failed transmissions */ 34 }; 35 36 /* Private structure for the MV device */ 37 struct lbs_private { 38 39 /* Basic networking */ 40 struct net_device *dev; 41 u32 connect_status; 42 struct work_struct mcast_work; 43 u32 nr_of_multicastmacaddr; 44 u8 multicastlist[MRVDRV_MAX_MULTICAST_LIST_SIZE][ETH_ALEN]; 45 46 /* CFG80211 */ 47 struct wireless_dev *wdev; 48 bool wiphy_registered; 49 struct cfg80211_scan_request *scan_req; 50 u8 assoc_bss[ETH_ALEN]; 51 u8 disassoc_reason; 52 53 /* Mesh */ 54 struct net_device *mesh_dev; /* Virtual device */ 55 #ifdef CONFIG_LIBERTAS_MESH 56 struct lbs_mesh_stats mstats; 57 uint16_t mesh_tlv; 58 u8 mesh_ssid[IEEE80211_MAX_SSID_LEN + 1]; 59 u8 mesh_ssid_len; 60 #endif 61 62 /* Debugfs */ 63 struct dentry *debugfs_dir; 64 struct dentry *debugfs_debug; 65 struct dentry *debugfs_files[6]; 66 struct dentry *events_dir; 67 struct dentry *debugfs_events_files[6]; 68 struct dentry *regs_dir; 69 struct dentry *debugfs_regs_files[6]; 70 71 /* Hardware debugging */ 72 u32 mac_offset; 73 u32 bbp_offset; 74 u32 rf_offset; 75 76 /* Power management */ 77 u16 psmode; 78 u32 psstate; 79 u8 needtowakeup; 80 81 /* Deep sleep */ 82 int is_deep_sleep; 83 int deep_sleep_required; 84 int is_auto_deep_sleep_enabled; 85 int wakeup_dev_required; 86 int is_activity_detected; 87 int auto_deep_sleep_timeout; /* in ms */ 88 wait_queue_head_t ds_awake_q; 89 struct timer_list auto_deepsleep_timer; 90 91 /* Host sleep*/ 92 int is_host_sleep_configured; 93 int is_host_sleep_activated; 94 wait_queue_head_t host_sleep_q; 95 96 /* Hardware access */ 97 void *card; 98 bool iface_running; 99 u8 fw_ready; 100 u8 surpriseremoved; 101 u8 setup_fw_on_resume; 102 int (*hw_host_to_card) (struct lbs_private *priv, u8 type, u8 *payload, u16 nb); 103 void (*reset_card) (struct lbs_private *priv); 104 int (*power_save) (struct lbs_private *priv); 105 int (*power_restore) (struct lbs_private *priv); 106 int (*enter_deep_sleep) (struct lbs_private *priv); 107 int (*exit_deep_sleep) (struct lbs_private *priv); 108 int (*reset_deep_sleep_wakeup) (struct lbs_private *priv); 109 110 /* Adapter info (from EEPROM) */ 111 u32 fwrelease; 112 u32 fwcapinfo; 113 u16 regioncode; 114 u8 current_addr[ETH_ALEN]; 115 u8 copied_hwaddr; 116 117 /* Command download */ 118 u8 dnld_sent; 119 /* bit0 1/0=data_sent/data_tx_done, 120 bit1 1/0=cmd_sent/cmd_tx_done, 121 all other bits reserved 0 */ 122 u16 seqnum; 123 struct cmd_ctrl_node *cmd_array; 124 struct cmd_ctrl_node *cur_cmd; 125 struct list_head cmdfreeq; /* free command buffers */ 126 struct list_head cmdpendingq; /* pending command buffers */ 127 struct timer_list command_timer; 128 int cmd_timed_out; 129 130 /* Command responses sent from the hardware to the driver */ 131 u8 resp_idx; 132 u8 resp_buf[2][LBS_UPLD_SIZE]; 133 u32 resp_len[2]; 134 135 /* Events sent from hardware to driver */ 136 struct kfifo event_fifo; 137 138 /* thread to service interrupts */ 139 struct task_struct *main_thread; 140 wait_queue_head_t waitq; 141 struct workqueue_struct *work_thread; 142 143 /* Encryption stuff */ 144 u8 authtype_auto; 145 u8 wep_tx_key; 146 u8 wep_key[4][WLAN_KEY_LEN_WEP104]; 147 u8 wep_key_len[4]; 148 149 /* Wake On LAN */ 150 uint32_t wol_criteria; 151 uint8_t wol_gpio; 152 uint8_t wol_gap; 153 bool ehs_remove_supported; 154 155 /* Transmitting */ 156 int tx_pending_len; /* -1 while building packet */ 157 u8 tx_pending_buf[LBS_UPLD_SIZE]; 158 /* protected by hard_start_xmit serialization */ 159 u8 txretrycount; 160 struct sk_buff *currenttxskb; 161 struct timer_list tx_lockup_timer; 162 163 /* Locks */ 164 struct mutex lock; 165 spinlock_t driver_lock; 166 167 /* NIC/link operation characteristics */ 168 u16 mac_control; 169 u8 radio_on; 170 u8 cur_rate; 171 u8 channel; 172 s16 txpower_cur; 173 s16 txpower_min; 174 s16 txpower_max; 175 176 /* Scanning */ 177 struct delayed_work scan_work; 178 int scan_channel; 179 /* Queue of things waiting for scan completion */ 180 wait_queue_head_t scan_q; 181 /* Whether the scan was initiated internally and not by cfg80211 */ 182 bool internal_scan; 183 }; 184 185 extern struct cmd_confirm_sleep confirm_sleep; 186 187 /* Check if there is an interface active. */ lbs_iface_active(struct lbs_private * priv)188static inline int lbs_iface_active(struct lbs_private *priv) 189 { 190 int r; 191 192 r = netif_running(priv->dev); 193 if (priv->mesh_dev) 194 r |= netif_running(priv->mesh_dev); 195 196 return r; 197 } 198 199 #endif 200