1fb9987d0SSujith /* 2fb9987d0SSujith * Copyright (c) 2010 Atheros Communications Inc. 3fb9987d0SSujith * 4fb9987d0SSujith * Permission to use, copy, modify, and/or distribute this software for any 5fb9987d0SSujith * purpose with or without fee is hereby granted, provided that the above 6fb9987d0SSujith * copyright notice and this permission notice appear in all copies. 7fb9987d0SSujith * 8fb9987d0SSujith * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 9fb9987d0SSujith * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 10fb9987d0SSujith * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 11fb9987d0SSujith * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 12fb9987d0SSujith * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 13fb9987d0SSujith * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 14fb9987d0SSujith * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 15fb9987d0SSujith */ 16fb9987d0SSujith 17fb9987d0SSujith #ifndef HTC_H 18fb9987d0SSujith #define HTC_H 19fb9987d0SSujith 20fb9987d0SSujith #include <linux/module.h> 21fb9987d0SSujith #include <linux/usb.h> 22fb9987d0SSujith #include <linux/firmware.h> 23fb9987d0SSujith #include <linux/skbuff.h> 24fb9987d0SSujith #include <linux/netdevice.h> 25fb9987d0SSujith #include <linux/leds.h> 26fb9987d0SSujith #include <net/mac80211.h> 27fb9987d0SSujith 28fb9987d0SSujith #include "common.h" 29fb9987d0SSujith #include "htc_hst.h" 30fb9987d0SSujith #include "hif_usb.h" 31fb9987d0SSujith #include "wmi.h" 32fb9987d0SSujith 33fb9987d0SSujith #define ATH_STA_SHORT_CALINTERVAL 1000 /* 1 second */ 34fb9987d0SSujith #define ATH_ANI_POLLINTERVAL 100 /* 100 ms */ 35fb9987d0SSujith #define ATH_LONG_CALINTERVAL 30000 /* 30 seconds */ 36fb9987d0SSujith #define ATH_RESTART_CALINTERVAL 1200000 /* 20 minutes */ 37fb9987d0SSujith 38fb9987d0SSujith #define ATH_DEFAULT_BMISS_LIMIT 10 39fb9987d0SSujith #define IEEE80211_MS_TO_TU(x) (((x) * 1000) / 1024) 40fb9987d0SSujith #define TSF_TO_TU(_h, _l) \ 41fb9987d0SSujith ((((u32)(_h)) << 22) | (((u32)(_l)) >> 10)) 42fb9987d0SSujith 43fb9987d0SSujith extern struct ieee80211_ops ath9k_htc_ops; 44e1572c5eSSujith extern int htc_modparam_nohwcrypt; 45fb9987d0SSujith 46fb9987d0SSujith enum htc_phymode { 47fb9987d0SSujith HTC_MODE_AUTO = 0, 48fb9987d0SSujith HTC_MODE_11A = 1, 49fb9987d0SSujith HTC_MODE_11B = 2, 50fb9987d0SSujith HTC_MODE_11G = 3, 51fb9987d0SSujith HTC_MODE_FH = 4, 52fb9987d0SSujith HTC_MODE_TURBO_A = 5, 53fb9987d0SSujith HTC_MODE_TURBO_G = 6, 54fb9987d0SSujith HTC_MODE_11NA = 7, 55fb9987d0SSujith HTC_MODE_11NG = 8 56fb9987d0SSujith }; 57fb9987d0SSujith 58fb9987d0SSujith enum htc_opmode { 59fb9987d0SSujith HTC_M_STA = 1, 60fb9987d0SSujith HTC_M_IBSS = 0, 61fb9987d0SSujith HTC_M_AHDEMO = 3, 62fb9987d0SSujith HTC_M_HOSTAP = 6, 63fb9987d0SSujith HTC_M_MONITOR = 8, 64fb9987d0SSujith HTC_M_WDS = 2 65fb9987d0SSujith }; 66fb9987d0SSujith 67fb9987d0SSujith #define ATH9K_HTC_HDRSPACE sizeof(struct htc_frame_hdr) 68fb9987d0SSujith #define ATH9K_HTC_AMPDU 1 69fb9987d0SSujith #define ATH9K_HTC_NORMAL 2 70fb9987d0SSujith 71fb9987d0SSujith #define ATH9K_HTC_TX_CTSONLY 0x1 72fb9987d0SSujith #define ATH9K_HTC_TX_RTSCTS 0x2 73fb9987d0SSujith #define ATH9K_HTC_TX_USE_MIN_RATE 0x100 74fb9987d0SSujith 75fb9987d0SSujith struct tx_frame_hdr { 76fb9987d0SSujith u8 data_type; 77fb9987d0SSujith u8 node_idx; 78fb9987d0SSujith u8 vif_idx; 79fb9987d0SSujith u8 tidno; 80fb9987d0SSujith u32 flags; /* ATH9K_HTC_TX_* */ 81fb9987d0SSujith u8 key_type; 82fb9987d0SSujith u8 keyix; 83fb9987d0SSujith u8 reserved[26]; 84fb9987d0SSujith } __packed; 85fb9987d0SSujith 86fb9987d0SSujith struct tx_mgmt_hdr { 87fb9987d0SSujith u8 node_idx; 88fb9987d0SSujith u8 vif_idx; 89fb9987d0SSujith u8 tidno; 90fb9987d0SSujith u8 flags; 91fb9987d0SSujith u8 key_type; 92fb9987d0SSujith u8 keyix; 93fb9987d0SSujith u16 reserved; 94fb9987d0SSujith } __packed; 95fb9987d0SSujith 96fb9987d0SSujith struct tx_beacon_header { 97fb9987d0SSujith u8 len_changed; 98fb9987d0SSujith u8 vif_index; 99fb9987d0SSujith u16 rev; 100fb9987d0SSujith } __packed; 101fb9987d0SSujith 102fb9987d0SSujith struct ath9k_htc_target_hw { 103fb9987d0SSujith u32 flags; 104fb9987d0SSujith u32 flags_ext; 105fb9987d0SSujith u32 ampdu_limit; 106fb9987d0SSujith u8 ampdu_subframes; 107fb9987d0SSujith u8 tx_chainmask; 108fb9987d0SSujith u8 tx_chainmask_legacy; 109fb9987d0SSujith u8 rtscts_ratecode; 110fb9987d0SSujith u8 protmode; 111fb9987d0SSujith } __packed; 112fb9987d0SSujith 113fb9987d0SSujith struct ath9k_htc_cap_target { 114fb9987d0SSujith u32 flags; 115fb9987d0SSujith u32 flags_ext; 116fb9987d0SSujith u32 ampdu_limit; 117fb9987d0SSujith u8 ampdu_subframes; 118fb9987d0SSujith u8 tx_chainmask; 119fb9987d0SSujith u8 tx_chainmask_legacy; 120fb9987d0SSujith u8 rtscts_ratecode; 121fb9987d0SSujith u8 protmode; 122fb9987d0SSujith } __packed; 123fb9987d0SSujith 124fb9987d0SSujith struct ath9k_htc_target_vif { 125fb9987d0SSujith u8 index; 126fb9987d0SSujith u8 des_bssid[ETH_ALEN]; 1277f1f5a00SSujith __be32 opmode; 128fb9987d0SSujith u8 myaddr[ETH_ALEN]; 129fb9987d0SSujith u8 bssid[ETH_ALEN]; 130fb9987d0SSujith u32 flags; 131fb9987d0SSujith u32 flags_ext; 132fb9987d0SSujith u16 ps_sta; 1337f1f5a00SSujith __be16 rtsthreshold; 134fb9987d0SSujith u8 ath_cap; 135fb9987d0SSujith u8 node; 136fb9987d0SSujith s8 mcast_rate; 137fb9987d0SSujith } __packed; 138fb9987d0SSujith 139fb9987d0SSujith #define ATH_HTC_STA_AUTH 0x0001 140fb9987d0SSujith #define ATH_HTC_STA_QOS 0x0002 141fb9987d0SSujith #define ATH_HTC_STA_ERP 0x0004 142fb9987d0SSujith #define ATH_HTC_STA_HT 0x0008 143fb9987d0SSujith 144fb9987d0SSujith /* FIXME: UAPSD variables */ 145fb9987d0SSujith struct ath9k_htc_target_sta { 146fb9987d0SSujith u16 associd; 147fb9987d0SSujith u16 txpower; 148fb9987d0SSujith u32 ucastkey; 149fb9987d0SSujith u8 macaddr[ETH_ALEN]; 150fb9987d0SSujith u8 bssid[ETH_ALEN]; 151fb9987d0SSujith u8 sta_index; 152fb9987d0SSujith u8 vif_index; 153fb9987d0SSujith u8 vif_sta; 1547f1f5a00SSujith __be16 flags; /* ATH_HTC_STA_* */ 155fb9987d0SSujith u16 htcap; 156fb9987d0SSujith u8 valid; 157fb9987d0SSujith u16 capinfo; 158fb9987d0SSujith struct ath9k_htc_target_hw *hw; 159fb9987d0SSujith struct ath9k_htc_target_vif *vif; 160fb9987d0SSujith u16 txseqmgmt; 161fb9987d0SSujith u8 is_vif_sta; 162fb9987d0SSujith u16 maxampdu; 163fb9987d0SSujith u16 iv16; 164fb9987d0SSujith u32 iv32; 165fb9987d0SSujith } __packed; 166fb9987d0SSujith 167fb9987d0SSujith struct ath9k_htc_target_aggr { 168fb9987d0SSujith u8 sta_index; 169fb9987d0SSujith u8 tidno; 170fb9987d0SSujith u8 aggr_enable; 171fb9987d0SSujith u8 padding; 172fb9987d0SSujith } __packed; 173fb9987d0SSujith 174fb9987d0SSujith #define ATH_HTC_RATE_MAX 30 175fb9987d0SSujith 176fb9987d0SSujith #define WLAN_RC_DS_FLAG 0x01 177fb9987d0SSujith #define WLAN_RC_40_FLAG 0x02 178fb9987d0SSujith #define WLAN_RC_SGI_FLAG 0x04 179fb9987d0SSujith #define WLAN_RC_HT_FLAG 0x08 180fb9987d0SSujith 181fb9987d0SSujith struct ath9k_htc_rateset { 182fb9987d0SSujith u8 rs_nrates; 183fb9987d0SSujith u8 rs_rates[ATH_HTC_RATE_MAX]; 184fb9987d0SSujith }; 185fb9987d0SSujith 186fb9987d0SSujith struct ath9k_htc_rate { 187fb9987d0SSujith struct ath9k_htc_rateset legacy_rates; 188fb9987d0SSujith struct ath9k_htc_rateset ht_rates; 189fb9987d0SSujith } __packed; 190fb9987d0SSujith 191fb9987d0SSujith struct ath9k_htc_target_rate { 192fb9987d0SSujith u8 sta_index; 193fb9987d0SSujith u8 isnew; 1947f1f5a00SSujith __be32 capflags; 195fb9987d0SSujith struct ath9k_htc_rate rates; 196fb9987d0SSujith }; 197fb9987d0SSujith 198fb9987d0SSujith struct ath9k_htc_target_stats { 1997f1f5a00SSujith __be32 tx_shortretry; 2007f1f5a00SSujith __be32 tx_longretry; 2017f1f5a00SSujith __be32 tx_xretries; 2027f1f5a00SSujith __be32 ht_txunaggr_xretry; 2037f1f5a00SSujith __be32 ht_tx_xretries; 204fb9987d0SSujith } __packed; 205fb9987d0SSujith 206fb9987d0SSujith struct ath9k_htc_vif { 207fb9987d0SSujith u8 index; 208fb9987d0SSujith }; 209fb9987d0SSujith 210fb9987d0SSujith #define ATH9K_HTC_MAX_STA 8 211fb9987d0SSujith #define ATH9K_HTC_MAX_TID 8 212fb9987d0SSujith 213fb9987d0SSujith enum tid_aggr_state { 214fb9987d0SSujith AGGR_STOP = 0, 215fb9987d0SSujith AGGR_PROGRESS, 216fb9987d0SSujith AGGR_START, 217fb9987d0SSujith AGGR_OPERATIONAL 218fb9987d0SSujith }; 219fb9987d0SSujith 220fb9987d0SSujith struct ath9k_htc_sta { 221fb9987d0SSujith u8 index; 222fb9987d0SSujith enum tid_aggr_state tid_state[ATH9K_HTC_MAX_TID]; 223fb9987d0SSujith }; 224fb9987d0SSujith 225fb9987d0SSujith struct ath9k_htc_aggr_work { 226fb9987d0SSujith u16 tid; 227fb9987d0SSujith u8 sta_addr[ETH_ALEN]; 228fb9987d0SSujith struct ieee80211_hw *hw; 229fb9987d0SSujith struct ieee80211_vif *vif; 230fb9987d0SSujith enum ieee80211_ampdu_mlme_action action; 231fb9987d0SSujith struct mutex mutex; 232fb9987d0SSujith }; 233fb9987d0SSujith 234fb9987d0SSujith #define ATH9K_HTC_RXBUF 256 235fb9987d0SSujith #define HTC_RX_FRAME_HEADER_SIZE 40 236fb9987d0SSujith 237fb9987d0SSujith struct ath9k_htc_rxbuf { 238fb9987d0SSujith bool in_process; 239fb9987d0SSujith struct sk_buff *skb; 240fb9987d0SSujith struct ath_htc_rx_status rxstatus; 241fb9987d0SSujith struct list_head list; 242fb9987d0SSujith }; 243fb9987d0SSujith 244fb9987d0SSujith struct ath9k_htc_rx { 245fb9987d0SSujith int last_rssi; /* FIXME: per-STA */ 246fb9987d0SSujith struct list_head rxbuf; 247fb9987d0SSujith spinlock_t rxbuflock; 248fb9987d0SSujith }; 249fb9987d0SSujith 250fb9987d0SSujith struct ath9k_htc_tx_ctl { 251fb9987d0SSujith u8 type; /* ATH9K_HTC_* */ 252fb9987d0SSujith }; 253fb9987d0SSujith 254fb9987d0SSujith #ifdef CONFIG_ATH9K_HTC_DEBUGFS 255fb9987d0SSujith 256fb9987d0SSujith #define TX_STAT_INC(c) (hif_dev->htc_handle->drv_priv->debug.tx_stats.c++) 257fb9987d0SSujith #define RX_STAT_INC(c) (hif_dev->htc_handle->drv_priv->debug.rx_stats.c++) 258fb9987d0SSujith 259fb9987d0SSujith struct ath_tx_stats { 260fb9987d0SSujith u32 buf_queued; 261fb9987d0SSujith u32 buf_completed; 262fb9987d0SSujith u32 skb_queued; 263fb9987d0SSujith u32 skb_completed; 264eac8e385SSujith u32 skb_dropped; 265fb9987d0SSujith }; 266fb9987d0SSujith 267fb9987d0SSujith struct ath_rx_stats { 268fb9987d0SSujith u32 skb_allocated; 269fb9987d0SSujith u32 skb_completed; 270fb9987d0SSujith u32 skb_dropped; 271fb9987d0SSujith }; 272fb9987d0SSujith 273fb9987d0SSujith struct ath9k_debug { 274fb9987d0SSujith struct dentry *debugfs_phy; 275fb9987d0SSujith struct dentry *debugfs_tgt_stats; 276fb9987d0SSujith struct dentry *debugfs_xmit; 277fb9987d0SSujith struct dentry *debugfs_recv; 278fb9987d0SSujith struct ath_tx_stats tx_stats; 279fb9987d0SSujith struct ath_rx_stats rx_stats; 280fb9987d0SSujith u32 txrate; 281fb9987d0SSujith }; 282fb9987d0SSujith 283fb9987d0SSujith #else 284fb9987d0SSujith 285fb9987d0SSujith #define TX_STAT_INC(c) do { } while (0) 286fb9987d0SSujith #define RX_STAT_INC(c) do { } while (0) 287fb9987d0SSujith 288fb9987d0SSujith #endif /* CONFIG_ATH9K_HTC_DEBUGFS */ 289fb9987d0SSujith 290fb9987d0SSujith #define ATH_LED_PIN_DEF 1 291fb9987d0SSujith #define ATH_LED_PIN_9287 8 292fb9987d0SSujith #define ATH_LED_PIN_9271 15 293fb9987d0SSujith #define ATH_LED_ON_DURATION_IDLE 350 /* in msecs */ 294fb9987d0SSujith #define ATH_LED_OFF_DURATION_IDLE 250 /* in msecs */ 295fb9987d0SSujith 296fb9987d0SSujith enum ath_led_type { 297fb9987d0SSujith ATH_LED_RADIO, 298fb9987d0SSujith ATH_LED_ASSOC, 299fb9987d0SSujith ATH_LED_TX, 300fb9987d0SSujith ATH_LED_RX 301fb9987d0SSujith }; 302fb9987d0SSujith 303fb9987d0SSujith struct ath_led { 304fb9987d0SSujith struct ath9k_htc_priv *priv; 305fb9987d0SSujith struct led_classdev led_cdev; 306fb9987d0SSujith enum ath_led_type led_type; 307fb9987d0SSujith struct delayed_work brightness_work; 308fb9987d0SSujith char name[32]; 309fb9987d0SSujith bool registered; 310fb9987d0SSujith int brightness; 311fb9987d0SSujith }; 312fb9987d0SSujith 3131c3652a5SVivek Natarajan struct htc_beacon_config { 3141c3652a5SVivek Natarajan u16 beacon_interval; 3151c3652a5SVivek Natarajan u16 listen_interval; 3161c3652a5SVivek Natarajan u16 dtim_period; 3171c3652a5SVivek Natarajan u16 bmiss_timeout; 3181c3652a5SVivek Natarajan u8 dtim_count; 3191c3652a5SVivek Natarajan }; 3201c3652a5SVivek Natarajan 321fb9987d0SSujith #define OP_INVALID BIT(0) 322fb9987d0SSujith #define OP_SCANNING BIT(1) 323fb9987d0SSujith #define OP_FULL_RESET BIT(2) 324fb9987d0SSujith #define OP_LED_ASSOCIATED BIT(3) 325fb9987d0SSujith #define OP_LED_ON BIT(4) 326fb9987d0SSujith #define OP_PREAMBLE_SHORT BIT(5) 327fb9987d0SSujith #define OP_PROTECT_ENABLE BIT(6) 328fb9987d0SSujith #define OP_TXAGGR BIT(7) 329fb9987d0SSujith #define OP_ASSOCIATED BIT(8) 330fb9987d0SSujith #define OP_ENABLE_BEACON BIT(9) 331fb9987d0SSujith #define OP_LED_DEINIT BIT(10) 332fb9987d0SSujith 333fb9987d0SSujith struct ath9k_htc_priv { 334fb9987d0SSujith struct device *dev; 335fb9987d0SSujith struct ieee80211_hw *hw; 336fb9987d0SSujith struct ath_hw *ah; 337fb9987d0SSujith struct htc_target *htc; 338fb9987d0SSujith struct wmi *wmi; 339fb9987d0SSujith 340fb9987d0SSujith enum htc_endpoint_id wmi_cmd_ep; 341fb9987d0SSujith enum htc_endpoint_id beacon_ep; 342fb9987d0SSujith enum htc_endpoint_id cab_ep; 343fb9987d0SSujith enum htc_endpoint_id uapsd_ep; 344fb9987d0SSujith enum htc_endpoint_id mgmt_ep; 345fb9987d0SSujith enum htc_endpoint_id data_be_ep; 346fb9987d0SSujith enum htc_endpoint_id data_bk_ep; 347fb9987d0SSujith enum htc_endpoint_id data_vi_ep; 348fb9987d0SSujith enum htc_endpoint_id data_vo_ep; 349fb9987d0SSujith 350fb9987d0SSujith u16 op_flags; 351fb9987d0SSujith u16 curtxpow; 352fb9987d0SSujith u16 txpowlimit; 353fb9987d0SSujith u16 nvifs; 354fb9987d0SSujith u16 nstations; 355fb9987d0SSujith u16 seq_no; 356fb9987d0SSujith u32 bmiss_cnt; 357fb9987d0SSujith 358fb9987d0SSujith struct sk_buff *beacon; 359fb9987d0SSujith spinlock_t beacon_lock; 360fb9987d0SSujith 3617757dfedSSujith bool tx_queues_stop; 3627757dfedSSujith spinlock_t tx_lock; 3637757dfedSSujith 364fb9987d0SSujith struct ieee80211_vif *vif; 3651c3652a5SVivek Natarajan struct htc_beacon_config cur_beacon_conf; 366fb9987d0SSujith unsigned int rxfilter; 367fb9987d0SSujith struct tasklet_struct wmi_tasklet; 368fb9987d0SSujith struct tasklet_struct rx_tasklet; 369fb9987d0SSujith struct ieee80211_supported_band sbands[IEEE80211_NUM_BANDS]; 370fb9987d0SSujith struct ath9k_htc_rx rx; 371fb9987d0SSujith struct tasklet_struct tx_tasklet; 372fb9987d0SSujith struct sk_buff_head tx_queue; 373fb9987d0SSujith struct ath9k_htc_aggr_work aggr_work; 374fb9987d0SSujith struct delayed_work ath9k_aggr_work; 375fb9987d0SSujith struct delayed_work ath9k_ani_work; 376bde748a4SVivek Natarajan struct work_struct ps_work; 377bde748a4SVivek Natarajan 378bde748a4SVivek Natarajan struct mutex htc_pm_lock; 379bde748a4SVivek Natarajan unsigned long ps_usecount; 380bde748a4SVivek Natarajan bool ps_enabled; 381fb9987d0SSujith 382fb9987d0SSujith struct ath_led radio_led; 383fb9987d0SSujith struct ath_led assoc_led; 384fb9987d0SSujith struct ath_led tx_led; 385fb9987d0SSujith struct ath_led rx_led; 386fb9987d0SSujith struct delayed_work ath9k_led_blink_work; 387fb9987d0SSujith int led_on_duration; 388fb9987d0SSujith int led_off_duration; 389fb9987d0SSujith int led_on_cnt; 390fb9987d0SSujith int led_off_cnt; 391fb9987d0SSujith int hwq_map[ATH9K_WME_AC_VO+1]; 392fb9987d0SSujith 393fb9987d0SSujith #ifdef CONFIG_ATH9K_HTC_DEBUGFS 394fb9987d0SSujith struct ath9k_debug debug; 395fb9987d0SSujith #endif 396fb9987d0SSujith struct ath9k_htc_target_rate tgt_rate; 397fb9987d0SSujith 398fb9987d0SSujith struct mutex mutex; 399fb9987d0SSujith }; 400fb9987d0SSujith 401fb9987d0SSujith static inline void ath_read_cachesize(struct ath_common *common, int *csz) 402fb9987d0SSujith { 403fb9987d0SSujith common->bus_ops->read_cachesize(common, csz); 404fb9987d0SSujith } 405fb9987d0SSujith 406fb9987d0SSujith void ath9k_htc_beacon_config(struct ath9k_htc_priv *priv, 4071c3652a5SVivek Natarajan struct ieee80211_vif *vif); 408fb9987d0SSujith void ath9k_htc_swba(struct ath9k_htc_priv *priv, u8 beacon_pending); 409fb9987d0SSujith void ath9k_htc_beacon_update(struct ath9k_htc_priv *priv, 410fb9987d0SSujith struct ieee80211_vif *vif); 411fb9987d0SSujith 412fb9987d0SSujith void ath9k_htc_rxep(void *priv, struct sk_buff *skb, 413fb9987d0SSujith enum htc_endpoint_id ep_id); 414fb9987d0SSujith void ath9k_htc_txep(void *priv, struct sk_buff *skb, enum htc_endpoint_id ep_id, 415fb9987d0SSujith bool txok); 416fb9987d0SSujith 417fb9987d0SSujith void ath9k_htc_station_work(struct work_struct *work); 418fb9987d0SSujith void ath9k_htc_aggr_work(struct work_struct *work); 419fb9987d0SSujith void ath9k_ani_work(struct work_struct *work);; 420fb9987d0SSujith 421fb9987d0SSujith int ath9k_tx_init(struct ath9k_htc_priv *priv); 422fb9987d0SSujith void ath9k_tx_tasklet(unsigned long data); 423fb9987d0SSujith int ath9k_htc_tx_start(struct ath9k_htc_priv *priv, struct sk_buff *skb); 424fb9987d0SSujith void ath9k_tx_cleanup(struct ath9k_htc_priv *priv); 425fb9987d0SSujith bool ath9k_htc_txq_setup(struct ath9k_htc_priv *priv, 426fb9987d0SSujith enum ath9k_tx_queue_subtype qtype); 427fb9987d0SSujith int get_hw_qnum(u16 queue, int *hwq_map); 428e1572c5eSSujith int ath_htc_txq_update(struct ath9k_htc_priv *priv, int qnum, 429fb9987d0SSujith struct ath9k_tx_queue_info *qinfo); 430fb9987d0SSujith 431fb9987d0SSujith int ath9k_rx_init(struct ath9k_htc_priv *priv); 432fb9987d0SSujith void ath9k_rx_cleanup(struct ath9k_htc_priv *priv); 433fb9987d0SSujith void ath9k_host_rx_init(struct ath9k_htc_priv *priv); 434fb9987d0SSujith void ath9k_rx_tasklet(unsigned long data); 4350995d110SSujith u32 ath9k_htc_calcrxfilter(struct ath9k_htc_priv *priv); 436fb9987d0SSujith 437bde748a4SVivek Natarajan void ath9k_htc_ps_wakeup(struct ath9k_htc_priv *priv); 438bde748a4SVivek Natarajan void ath9k_htc_ps_restore(struct ath9k_htc_priv *priv); 439bde748a4SVivek Natarajan void ath9k_ps_work(struct work_struct *work); 440bde748a4SVivek Natarajan 441fb9987d0SSujith void ath9k_start_rfkill_poll(struct ath9k_htc_priv *priv); 442fb9987d0SSujith void ath9k_init_leds(struct ath9k_htc_priv *priv); 443fb9987d0SSujith void ath9k_deinit_leds(struct ath9k_htc_priv *priv); 444fb9987d0SSujith 445fb9987d0SSujith int ath9k_htc_probe_device(struct htc_target *htc_handle, struct device *dev, 446fb9987d0SSujith u16 devid); 447fb9987d0SSujith void ath9k_htc_disconnect_device(struct htc_target *htc_handle, bool hotunplug); 448fb9987d0SSujith #ifdef CONFIG_PM 449fb9987d0SSujith int ath9k_htc_resume(struct htc_target *htc_handle); 450fb9987d0SSujith #endif 451fb9987d0SSujith #ifdef CONFIG_ATH9K_HTC_DEBUGFS 452e1572c5eSSujith int ath9k_htc_debug_create_root(void); 453e1572c5eSSujith void ath9k_htc_debug_remove_root(void); 454e1572c5eSSujith int ath9k_htc_init_debug(struct ath_hw *ah); 455e1572c5eSSujith void ath9k_htc_exit_debug(struct ath_hw *ah); 456fb9987d0SSujith #else 457e1572c5eSSujith static inline int ath9k_htc_debug_create_root(void) { return 0; }; 458e1572c5eSSujith static inline void ath9k_htc_debug_remove_root(void) {}; 459e1572c5eSSujith static inline int ath9k_htc_init_debug(struct ath_hw *ah) { return 0; }; 460e1572c5eSSujith static inline void ath9k_htc_exit_debug(struct ath_hw *ah) {}; 461fb9987d0SSujith #endif /* CONFIG_ATH9K_HTC_DEBUGFS */ 462fb9987d0SSujith 463fb9987d0SSujith #endif /* HTC_H */ 464