1dad0d04fSFariya Fatima /** 2dad0d04fSFariya Fatima * Copyright (c) 2014 Redpine Signals Inc. 3dad0d04fSFariya Fatima * 4dad0d04fSFariya Fatima * Permission to use, copy, modify, and/or distribute this software for any 5dad0d04fSFariya Fatima * purpose with or without fee is hereby granted, provided that the above 6dad0d04fSFariya Fatima * copyright notice and this permission notice appear in all copies. 7dad0d04fSFariya Fatima * 8dad0d04fSFariya Fatima * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 9dad0d04fSFariya Fatima * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 10dad0d04fSFariya Fatima * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 11dad0d04fSFariya Fatima * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 12dad0d04fSFariya Fatima * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 13dad0d04fSFariya Fatima * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 14dad0d04fSFariya Fatima * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 15dad0d04fSFariya Fatima */ 16dad0d04fSFariya Fatima 17dad0d04fSFariya Fatima #ifndef __RSI_MAIN_H__ 18dad0d04fSFariya Fatima #define __RSI_MAIN_H__ 19dad0d04fSFariya Fatima 20dad0d04fSFariya Fatima #include <linux/string.h> 21dad0d04fSFariya Fatima #include <linux/skbuff.h> 22dad0d04fSFariya Fatima #include <net/mac80211.h> 234c10d56aSPrameela Rani Garnepudi #include <net/rsi_91x.h> 24dad0d04fSFariya Fatima 256da1e00aSPrameela Rani Garnepudi struct rsi_sta { 266da1e00aSPrameela Rani Garnepudi struct ieee80211_sta *sta; 276da1e00aSPrameela Rani Garnepudi s16 sta_id; 286da1e00aSPrameela Rani Garnepudi u16 seq_start[IEEE80211_NUM_TIDS]; 296da1e00aSPrameela Rani Garnepudi bool start_tx_aggr[IEEE80211_NUM_TIDS]; 306da1e00aSPrameela Rani Garnepudi }; 316da1e00aSPrameela Rani Garnepudi 32ce86893fSKarun Eagalapati struct rsi_hw; 33ce86893fSKarun Eagalapati 34ce86893fSKarun Eagalapati #include "rsi_ps.h" 35ce86893fSKarun Eagalapati 36dad0d04fSFariya Fatima #define ERR_ZONE BIT(0) /* For Error Msgs */ 37dad0d04fSFariya Fatima #define INFO_ZONE BIT(1) /* For General Status Msgs */ 38dad0d04fSFariya Fatima #define INIT_ZONE BIT(2) /* For Driver Init Seq Msgs */ 39dad0d04fSFariya Fatima #define MGMT_TX_ZONE BIT(3) /* For TX Mgmt Path Msgs */ 40dad0d04fSFariya Fatima #define MGMT_RX_ZONE BIT(4) /* For RX Mgmt Path Msgs */ 41dad0d04fSFariya Fatima #define DATA_TX_ZONE BIT(5) /* For TX Data Path Msgs */ 42dad0d04fSFariya Fatima #define DATA_RX_ZONE BIT(6) /* For RX Data Path Msgs */ 43dad0d04fSFariya Fatima #define FSM_ZONE BIT(7) /* For State Machine Msgs */ 44dad0d04fSFariya Fatima #define ISR_ZONE BIT(8) /* For Interrupt Msgs */ 45dad0d04fSFariya Fatima 464833c953SAmitkumar Karwar enum RSI_FSM_STATES { 47015e3674SPrameela Rani Garnepudi FSM_FW_NOT_LOADED, 484833c953SAmitkumar Karwar FSM_CARD_NOT_READY, 499920322cSPrameela Rani Garnepudi FSM_COMMON_DEV_PARAMS_SENT, 504833c953SAmitkumar Karwar FSM_BOOT_PARAMS_SENT, 514833c953SAmitkumar Karwar FSM_EEPROM_READ_MAC_ADDR, 5209cfb41fSPrameela Rani Garnepudi FSM_EEPROM_READ_RF_TYPE, 534833c953SAmitkumar Karwar FSM_RESET_MAC_SENT, 544833c953SAmitkumar Karwar FSM_RADIO_CAPS_SENT, 554833c953SAmitkumar Karwar FSM_BB_RF_PROG_SENT, 56e0d0ae8aSAmitkumar Karwar FSM_MAC_INIT_DONE, 57e0d0ae8aSAmitkumar Karwar 58e0d0ae8aSAmitkumar Karwar NUM_FSM_STATES 594833c953SAmitkumar Karwar }; 60dad0d04fSFariya Fatima 61dad0d04fSFariya Fatima extern u32 rsi_zone_enabled; 625fe1b76aSJoe Perches extern __printf(2, 3) void rsi_dbg(u32 zone, const char *fmt, ...); 63dad0d04fSFariya Fatima 64b8bd3a43SPrameela Rani Garnepudi #define RSI_MAX_VIFS 3 65dad0d04fSFariya Fatima #define NUM_EDCA_QUEUES 4 66dad0d04fSFariya Fatima #define IEEE80211_ADDR_LEN 6 67dad0d04fSFariya Fatima #define FRAME_DESC_SZ 16 68dad0d04fSFariya Fatima #define MIN_802_11_HDR_LEN 24 6980a88ecfSKarun Eagalapati #define RSI_DEF_KEEPALIVE 90 70f3ac4e73SKarun Eagalapati #define RSI_WOW_KEEPALIVE 5 71f3ac4e73SKarun Eagalapati #define RSI_BCN_MISS_THRESHOLD 24 72dad0d04fSFariya Fatima 73dad0d04fSFariya Fatima #define DATA_QUEUE_WATER_MARK 400 74dad0d04fSFariya Fatima #define MIN_DATA_QUEUE_WATER_MARK 300 75dad0d04fSFariya Fatima #define MULTICAST_WATER_MARK 200 76dad0d04fSFariya Fatima #define MAC_80211_HDR_FRAME_CONTROL 0 77dad0d04fSFariya Fatima #define WME_NUM_AC 4 78d26a9559SPrameela Rani Garnepudi #define NUM_SOFT_QUEUES 6 796abdf2c1SPrameela Rani Garnepudi #define MAX_HW_QUEUES 12 80dad0d04fSFariya Fatima #define INVALID_QUEUE 0xff 81dad0d04fSFariya Fatima #define MAX_CONTINUOUS_VO_PKTS 8 82dad0d04fSFariya Fatima #define MAX_CONTINUOUS_VI_PKTS 4 83dad0d04fSFariya Fatima 846abdf2c1SPrameela Rani Garnepudi /* Hardware queue info */ 856abdf2c1SPrameela Rani Garnepudi #define BROADCAST_HW_Q 9 866abdf2c1SPrameela Rani Garnepudi #define MGMT_HW_Q 10 876abdf2c1SPrameela Rani Garnepudi #define BEACON_HW_Q 11 886abdf2c1SPrameela Rani Garnepudi 89dad0d04fSFariya Fatima #define IEEE80211_MGMT_FRAME 0x00 90dad0d04fSFariya Fatima #define IEEE80211_CTL_FRAME 0x04 91dad0d04fSFariya Fatima 9203c34c0dSPrameela Rani Garnepudi #define RSI_MAX_ASSOC_STAS 32 93dad0d04fSFariya Fatima #define IEEE80211_QOS_TID 0x0f 94dad0d04fSFariya Fatima #define IEEE80211_NONQOS_TID 16 95dad0d04fSFariya Fatima 96dad0d04fSFariya Fatima #define MAX_DEBUGFS_ENTRIES 4 97dad0d04fSFariya Fatima 98dad0d04fSFariya Fatima #define TID_TO_WME_AC(_tid) ( \ 99dad0d04fSFariya Fatima ((_tid) == 0 || (_tid) == 3) ? BE_Q : \ 100dad0d04fSFariya Fatima ((_tid) < 3) ? BK_Q : \ 101dad0d04fSFariya Fatima ((_tid) < 6) ? VI_Q : \ 102dad0d04fSFariya Fatima VO_Q) 103dad0d04fSFariya Fatima 104dad0d04fSFariya Fatima #define WME_AC(_q) ( \ 105dad0d04fSFariya Fatima ((_q) == BK_Q) ? IEEE80211_AC_BK : \ 106dad0d04fSFariya Fatima ((_q) == BE_Q) ? IEEE80211_AC_BE : \ 107dad0d04fSFariya Fatima ((_q) == VI_Q) ? IEEE80211_AC_VI : \ 108dad0d04fSFariya Fatima IEEE80211_AC_VO) 109dad0d04fSFariya Fatima 110f3ac4e73SKarun Eagalapati /* WoWLAN flags */ 111f3ac4e73SKarun Eagalapati #define RSI_WOW_ENABLED BIT(0) 112f3ac4e73SKarun Eagalapati #define RSI_WOW_NO_CONNECTION BIT(1) 113f3ac4e73SKarun Eagalapati 11450117605SPrameela Rani Garnepudi #define RSI_MAX_RX_PKTS 64 115b78e91bcSPrameela Rani Garnepudi 11654fdb318SSiva Rebbagondla enum rsi_dev_model { 11754fdb318SSiva Rebbagondla RSI_DEV_9113 = 0, 11854fdb318SSiva Rebbagondla RSI_DEV_9116 11954fdb318SSiva Rebbagondla }; 12054fdb318SSiva Rebbagondla 121dad0d04fSFariya Fatima struct version_info { 122dad0d04fSFariya Fatima u16 major; 123dad0d04fSFariya Fatima u16 minor; 124192524a4SPavani Muthyala u8 release_num; 125192524a4SPavani Muthyala u8 patch_num; 126192524a4SPavani Muthyala union { 127192524a4SPavani Muthyala struct { 128192524a4SPavani Muthyala u8 fw_ver[8]; 129192524a4SPavani Muthyala } info; 130192524a4SPavani Muthyala } ver; 131dad0d04fSFariya Fatima } __packed; 132dad0d04fSFariya Fatima 133dad0d04fSFariya Fatima struct skb_info { 134dad0d04fSFariya Fatima s8 rssi; 135dad0d04fSFariya Fatima u32 flags; 136dad0d04fSFariya Fatima u16 channel; 137dad0d04fSFariya Fatima s8 tid; 138dad0d04fSFariya Fatima s8 sta_id; 1396507de6dSPrameela Rani Garnepudi u8 internal_hdr_size; 1404671c209SPrameela Rani Garnepudi struct ieee80211_vif *vif; 1414671c209SPrameela Rani Garnepudi u8 vap_id; 142dad0d04fSFariya Fatima }; 143dad0d04fSFariya Fatima 144dad0d04fSFariya Fatima enum edca_queue { 145dad0d04fSFariya Fatima BK_Q, 146dad0d04fSFariya Fatima BE_Q, 147dad0d04fSFariya Fatima VI_Q, 148dad0d04fSFariya Fatima VO_Q, 149d26a9559SPrameela Rani Garnepudi MGMT_SOFT_Q, 150d26a9559SPrameela Rani Garnepudi MGMT_BEACON_Q 151dad0d04fSFariya Fatima }; 152dad0d04fSFariya Fatima 153dad0d04fSFariya Fatima struct security_info { 154dad0d04fSFariya Fatima bool security_enable; 155dad0d04fSFariya Fatima u32 ptk_cipher; 156dad0d04fSFariya Fatima u32 gtk_cipher; 157dad0d04fSFariya Fatima }; 158dad0d04fSFariya Fatima 159dad0d04fSFariya Fatima struct wmm_qinfo { 160dad0d04fSFariya Fatima s32 weight; 161dad0d04fSFariya Fatima s32 wme_params; 162dad0d04fSFariya Fatima s32 pkt_contended; 163360accb0SJahnavi Meher s32 txop; 164dad0d04fSFariya Fatima }; 165dad0d04fSFariya Fatima 166dad0d04fSFariya Fatima struct transmit_q_stats { 167d26a9559SPrameela Rani Garnepudi u32 total_tx_pkt_send[NUM_EDCA_QUEUES + 2]; 168d26a9559SPrameela Rani Garnepudi u32 total_tx_pkt_freed[NUM_EDCA_QUEUES + 2]; 169dad0d04fSFariya Fatima }; 170dad0d04fSFariya Fatima 1717fdcb8e1SPrameela Rani Garnepudi #define MAX_BGSCAN_CHANNELS_DUAL_BAND 38 1727fdcb8e1SPrameela Rani Garnepudi #define MAX_BGSCAN_PROBE_REQ_LEN 0x64 1737fdcb8e1SPrameela Rani Garnepudi #define RSI_DEF_BGSCAN_THRLD 0x0 1747fdcb8e1SPrameela Rani Garnepudi #define RSI_DEF_ROAM_THRLD 0xa 1757fdcb8e1SPrameela Rani Garnepudi #define RSI_BGSCAN_PERIODICITY 0x1e 1767fdcb8e1SPrameela Rani Garnepudi #define RSI_ACTIVE_SCAN_TIME 0x14 1777fdcb8e1SPrameela Rani Garnepudi #define RSI_PASSIVE_SCAN_TIME 0x46 1787fdcb8e1SPrameela Rani Garnepudi #define RSI_CHANNEL_SCAN_TIME 20 1797fdcb8e1SPrameela Rani Garnepudi struct rsi_bgscan_params { 1807fdcb8e1SPrameela Rani Garnepudi u16 bgscan_threshold; 1817fdcb8e1SPrameela Rani Garnepudi u16 roam_threshold; 1827fdcb8e1SPrameela Rani Garnepudi u16 bgscan_periodicity; 1837fdcb8e1SPrameela Rani Garnepudi u8 num_bgscan_channels; 1847fdcb8e1SPrameela Rani Garnepudi u8 two_probe; 1857fdcb8e1SPrameela Rani Garnepudi u16 active_scan_duration; 1867fdcb8e1SPrameela Rani Garnepudi u16 passive_scan_duration; 1877fdcb8e1SPrameela Rani Garnepudi }; 1887fdcb8e1SPrameela Rani Garnepudi 189dad0d04fSFariya Fatima struct vif_priv { 190dad0d04fSFariya Fatima bool is_ht; 191dad0d04fSFariya Fatima bool sgi; 192dad0d04fSFariya Fatima u16 seq_start; 193b8bd3a43SPrameela Rani Garnepudi int vap_id; 194dad0d04fSFariya Fatima }; 195dad0d04fSFariya Fatima 196dad0d04fSFariya Fatima struct rsi_event { 197dad0d04fSFariya Fatima atomic_t event_condition; 198dad0d04fSFariya Fatima wait_queue_head_t event_queue; 199dad0d04fSFariya Fatima }; 200dad0d04fSFariya Fatima 201dad0d04fSFariya Fatima struct rsi_thread { 202dad0d04fSFariya Fatima void (*thread_function)(void *); 203dad0d04fSFariya Fatima struct completion completion; 204dad0d04fSFariya Fatima struct task_struct *task; 205dad0d04fSFariya Fatima struct rsi_event event; 206dad0d04fSFariya Fatima atomic_t thread_done; 207dad0d04fSFariya Fatima }; 208dad0d04fSFariya Fatima 209686a2541SJahnavi Meher struct cqm_info { 210686a2541SJahnavi Meher s8 last_cqm_event_rssi; 211686a2541SJahnavi Meher int rssi_thold; 212686a2541SJahnavi Meher u32 rssi_hyst; 213686a2541SJahnavi Meher }; 214686a2541SJahnavi Meher 215d7203a83SPrameela Rani Garnepudi enum rsi_dfs_regions { 216d7203a83SPrameela Rani Garnepudi RSI_REGION_FCC = 0, 217d7203a83SPrameela Rani Garnepudi RSI_REGION_ETSI, 218d7203a83SPrameela Rani Garnepudi RSI_REGION_TELEC, 219d7203a83SPrameela Rani Garnepudi RSI_REGION_WORLD 220d7203a83SPrameela Rani Garnepudi }; 221d7203a83SPrameela Rani Garnepudi 222*1533f976SSiva Rebbagondla struct rsi_9116_features { 223*1533f976SSiva Rebbagondla u8 pll_mode; 224*1533f976SSiva Rebbagondla u8 rf_type; 225*1533f976SSiva Rebbagondla u8 wireless_mode; 226*1533f976SSiva Rebbagondla u8 afe_type; 227*1533f976SSiva Rebbagondla u8 enable_ppe; 228*1533f976SSiva Rebbagondla u8 dpd; 229*1533f976SSiva Rebbagondla u32 sifs_tx_enable; 230*1533f976SSiva Rebbagondla u32 ps_options; 231*1533f976SSiva Rebbagondla }; 232*1533f976SSiva Rebbagondla 233dad0d04fSFariya Fatima struct rsi_common { 234dad0d04fSFariya Fatima struct rsi_hw *priv; 235dad0d04fSFariya Fatima struct vif_priv vif_info[RSI_MAX_VIFS]; 236dad0d04fSFariya Fatima 2372108df3cSPrameela Rani Garnepudi void *coex_cb; 238dad0d04fSFariya Fatima bool mgmt_q_block; 239192524a4SPavani Muthyala struct version_info lmac_ver; 240dad0d04fSFariya Fatima 241dad0d04fSFariya Fatima struct rsi_thread tx_thread; 242d26a9559SPrameela Rani Garnepudi struct sk_buff_head tx_queue[NUM_EDCA_QUEUES + 2]; 243b6c8d06cSKarun Eagalapati struct completion wlan_init_completion; 244dad0d04fSFariya Fatima /* Mutex declaration */ 245dad0d04fSFariya Fatima struct mutex mutex; 246cb164535SKarun Eagalapati /* Mutex used for tx thread */ 247cb164535SKarun Eagalapati struct mutex tx_lock; 2486c409cadSKarun Eagalapati /* Mutex used for rx thread */ 2496c409cadSKarun Eagalapati struct mutex rx_lock; 250dad0d04fSFariya Fatima u8 endpoint; 251dad0d04fSFariya Fatima 252dad0d04fSFariya Fatima /* Channel/band related */ 253dad0d04fSFariya Fatima u8 band; 25409cfb41fSPrameela Rani Garnepudi u8 num_supp_bands; 255dad0d04fSFariya Fatima u8 channel_width; 256dad0d04fSFariya Fatima 257dad0d04fSFariya Fatima u16 rts_threshold; 258dad0d04fSFariya Fatima u16 bitrate_mask[2]; 259dad0d04fSFariya Fatima u32 fixedrate_mask[2]; 260dad0d04fSFariya Fatima 261dad0d04fSFariya Fatima u8 rf_reset; 262dad0d04fSFariya Fatima struct transmit_q_stats tx_stats; 263dad0d04fSFariya Fatima struct security_info secinfo; 264dad0d04fSFariya Fatima struct wmm_qinfo tx_qinfo[NUM_EDCA_QUEUES]; 265dad0d04fSFariya Fatima struct ieee80211_tx_queue_params edca_params[NUM_EDCA_QUEUES]; 266dad0d04fSFariya Fatima u8 mac_addr[IEEE80211_ADDR_LEN]; 267dad0d04fSFariya Fatima 268dad0d04fSFariya Fatima /* state related */ 269dad0d04fSFariya Fatima u32 fsm_state; 270dad0d04fSFariya Fatima bool init_done; 271dad0d04fSFariya Fatima u8 bb_rf_prog_count; 272dad0d04fSFariya Fatima bool iface_down; 273dad0d04fSFariya Fatima 274dad0d04fSFariya Fatima /* Generic */ 275dad0d04fSFariya Fatima u8 channel; 276dad0d04fSFariya Fatima u8 *rx_data_pkt; 277dad0d04fSFariya Fatima u8 mac_id; 278dad0d04fSFariya Fatima u8 radio_id; 279dad0d04fSFariya Fatima u16 rate_pwr[20]; 280dad0d04fSFariya Fatima u16 min_rate; 281dad0d04fSFariya Fatima 282dad0d04fSFariya Fatima /* WMM algo related */ 283dad0d04fSFariya Fatima u8 selected_qnum; 284dad0d04fSFariya Fatima u32 pkt_cnt; 285dad0d04fSFariya Fatima u8 min_weight; 286360accb0SJahnavi Meher 287686a2541SJahnavi Meher /* bgscan related */ 288686a2541SJahnavi Meher struct cqm_info cqm_info; 289686a2541SJahnavi Meher 290360accb0SJahnavi Meher bool hw_data_qs_blocked; 2919920322cSPrameela Rani Garnepudi u8 driver_mode; 292b78e91bcSPrameela Rani Garnepudi u8 coex_mode; 2939920322cSPrameela Rani Garnepudi u16 oper_mode; 2949920322cSPrameela Rani Garnepudi u8 lp_ps_handshake_mode; 2959920322cSPrameela Rani Garnepudi u8 ulp_ps_handshake_mode; 296db07971dSKarun Eagalapati u8 uapsd_bitmap; 2979920322cSPrameela Rani Garnepudi u8 rf_power_val; 2989920322cSPrameela Rani Garnepudi u8 wlan_rf_power_mode; 2999920322cSPrameela Rani Garnepudi u8 obm_ant_sel_val; 3008b36de8cSPrameela Rani Garnepudi int tx_power; 3014edbcd1aSPrameela Rani Garnepudi u8 ant_in_use; 3022108df3cSPrameela Rani Garnepudi /* Mutex used for writing packet to bus */ 3032108df3cSPrameela Rani Garnepudi struct mutex tx_bus_mutex; 304b6c8d06cSKarun Eagalapati bool hibernate_resume; 305b6c8d06cSKarun Eagalapati bool reinit_hw; 306f3ac4e73SKarun Eagalapati u8 wow_flags; 307de1d1813SPrameela Rani Garnepudi u16 beacon_interval; 308de1d1813SPrameela Rani Garnepudi u8 dtim_cnt; 3096da1e00aSPrameela Rani Garnepudi 3106da1e00aSPrameela Rani Garnepudi /* AP mode parameters */ 311d26a9559SPrameela Rani Garnepudi u8 beacon_enabled; 312d26a9559SPrameela Rani Garnepudi u16 beacon_cnt; 31303c34c0dSPrameela Rani Garnepudi struct rsi_sta stations[RSI_MAX_ASSOC_STAS + 1]; 31403c34c0dSPrameela Rani Garnepudi int num_stations; 3156da1e00aSPrameela Rani Garnepudi int max_stations; 31638ef6235SPrameela Rani Garnepudi struct ieee80211_key_conf *key; 317b8bd3a43SPrameela Rani Garnepudi 318b8bd3a43SPrameela Rani Garnepudi /* Wi-Fi direct mode related */ 319b8bd3a43SPrameela Rani Garnepudi bool p2p_enabled; 320df771911SPrameela Rani Garnepudi struct timer_list roc_timer; 321df771911SPrameela Rani Garnepudi struct ieee80211_vif *roc_vif; 322716b840cSSiva Rebbagondla 3234fd6c476SPrameela Rani Garnepudi bool eapol4_confirm; 324716b840cSSiva Rebbagondla void *bt_adapter; 3257fdcb8e1SPrameela Rani Garnepudi 3267fdcb8e1SPrameela Rani Garnepudi struct cfg80211_scan_request *hwscan; 3277fdcb8e1SPrameela Rani Garnepudi struct rsi_bgscan_params bgscan; 328*1533f976SSiva Rebbagondla struct rsi_9116_features w9116_features; 3297fdcb8e1SPrameela Rani Garnepudi u8 bgscan_en; 33073f9b257SSiva Rebbagondla u8 mac_ops_resumed; 331dad0d04fSFariya Fatima }; 332dad0d04fSFariya Fatima 33309cfb41fSPrameela Rani Garnepudi struct eepromrw_info { 33409cfb41fSPrameela Rani Garnepudi u32 offset; 33509cfb41fSPrameela Rani Garnepudi u32 length; 33609cfb41fSPrameela Rani Garnepudi u8 write; 33709cfb41fSPrameela Rani Garnepudi u16 eeprom_erase; 33809cfb41fSPrameela Rani Garnepudi u8 data[480]; 33909cfb41fSPrameela Rani Garnepudi }; 34009cfb41fSPrameela Rani Garnepudi 34109cfb41fSPrameela Rani Garnepudi struct eeprom_read { 34209cfb41fSPrameela Rani Garnepudi u16 length; 34309cfb41fSPrameela Rani Garnepudi u16 off_set; 34409cfb41fSPrameela Rani Garnepudi }; 34509cfb41fSPrameela Rani Garnepudi 346dad0d04fSFariya Fatima struct rsi_hw { 347dad0d04fSFariya Fatima struct rsi_common *priv; 34854fdb318SSiva Rebbagondla enum rsi_dev_model device_model; 349dad0d04fSFariya Fatima struct ieee80211_hw *hw; 350dad0d04fSFariya Fatima struct ieee80211_vif *vifs[RSI_MAX_VIFS]; 351dad0d04fSFariya Fatima struct ieee80211_tx_queue_params edca_params[NUM_EDCA_QUEUES]; 35257fbcce3SJohannes Berg struct ieee80211_supported_band sbands[NUM_NL80211_BANDS]; 353dad0d04fSFariya Fatima 354dad0d04fSFariya Fatima struct device *device; 355dad0d04fSFariya Fatima u8 sc_nvifs; 356dad0d04fSFariya Fatima 3574c10d56aSPrameela Rani Garnepudi enum rsi_host_intf rsi_host_intf; 358b78e91bcSPrameela Rani Garnepudi u16 block_size; 359ce86893fSKarun Eagalapati enum ps_state ps_state; 360ce86893fSKarun Eagalapati struct rsi_ps_info ps_info; 361ce86893fSKarun Eagalapati spinlock_t ps_lock; /*To protect power save config*/ 3629920322cSPrameela Rani Garnepudi u32 usb_buffer_status_reg; 363dad0d04fSFariya Fatima #ifdef CONFIG_RSI_DEBUGFS 364dad0d04fSFariya Fatima struct rsi_debugfs *dfsentry; 365dad0d04fSFariya Fatima u8 num_debugfs_entries; 366dad0d04fSFariya Fatima #endif 367b78e91bcSPrameela Rani Garnepudi char *fw_file_name; 368b78e91bcSPrameela Rani Garnepudi struct timer_list bl_cmd_timer; 369b78e91bcSPrameela Rani Garnepudi bool blcmd_timer_expired; 370b78e91bcSPrameela Rani Garnepudi u32 flash_capacity; 37109cfb41fSPrameela Rani Garnepudi struct eepromrw_info eeprom; 372ebf084eaSKarun Eagalapati u32 interrupt_status; 37361d10842SPrameela Rani Garnepudi u8 dfs_region; 374d7203a83SPrameela Rani Garnepudi char country[2]; 375dad0d04fSFariya Fatima void *rsi_dev; 376a2ce952cSPrameela Rani Garnepudi struct rsi_host_intf_ops *host_intf_ops; 377dad0d04fSFariya Fatima int (*check_hw_queue_status)(struct rsi_hw *adapter, u8 q_num); 378dad0d04fSFariya Fatima int (*determine_event_timeout)(struct rsi_hw *adapter); 379dad0d04fSFariya Fatima }; 380a2ce952cSPrameela Rani Garnepudi 381192524a4SPavani Muthyala void rsi_print_version(struct rsi_common *common); 382192524a4SPavani Muthyala 383a2ce952cSPrameela Rani Garnepudi struct rsi_host_intf_ops { 384a2ce952cSPrameela Rani Garnepudi int (*read_pkt)(struct rsi_hw *adapter, u8 *pkt, u32 len); 385a2ce952cSPrameela Rani Garnepudi int (*write_pkt)(struct rsi_hw *adapter, u8 *pkt, u32 len); 386b78e91bcSPrameela Rani Garnepudi int (*master_access_msword)(struct rsi_hw *adapter, u16 ms_word); 387a2ce952cSPrameela Rani Garnepudi int (*read_reg_multiple)(struct rsi_hw *adapter, u32 addr, 388a2ce952cSPrameela Rani Garnepudi u8 *data, u16 count); 389a2ce952cSPrameela Rani Garnepudi int (*write_reg_multiple)(struct rsi_hw *adapter, u32 addr, 390a2ce952cSPrameela Rani Garnepudi u8 *data, u16 count); 391b97e9b94SPrameela Rani Garnepudi int (*master_reg_read)(struct rsi_hw *adapter, u32 addr, 392b97e9b94SPrameela Rani Garnepudi u32 *read_buf, u16 size); 393b97e9b94SPrameela Rani Garnepudi int (*master_reg_write)(struct rsi_hw *adapter, 394b97e9b94SPrameela Rani Garnepudi unsigned long addr, unsigned long data, 395b97e9b94SPrameela Rani Garnepudi u16 size); 396b97e9b94SPrameela Rani Garnepudi int (*load_data_master_write)(struct rsi_hw *adapter, u32 addr, 397b97e9b94SPrameela Rani Garnepudi u32 instructions_size, u16 block_size, 398b97e9b94SPrameela Rani Garnepudi u8 *fw); 399b6c8d06cSKarun Eagalapati int (*reinit_device)(struct rsi_hw *adapter); 400e5a1ecc9SSiva Rebbagondla int (*ta_reset)(struct rsi_hw *adapter); 401a2ce952cSPrameela Rani Garnepudi }; 4022108df3cSPrameela Rani Garnepudi 4032108df3cSPrameela Rani Garnepudi enum rsi_host_intf rsi_get_host_intf(void *priv); 404716b840cSSiva Rebbagondla void rsi_set_bt_context(void *priv, void *bt_context); 4052108df3cSPrameela Rani Garnepudi 406dad0d04fSFariya Fatima #endif 407