130519460SAditya Srivastava /* 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 64*a72ebbbcSMartin Fuzzey #define RSI_MAX_BANDS 2 65b8bd3a43SPrameela Rani Garnepudi #define RSI_MAX_VIFS 3 66dad0d04fSFariya Fatima #define NUM_EDCA_QUEUES 4 67dad0d04fSFariya Fatima #define IEEE80211_ADDR_LEN 6 68dad0d04fSFariya Fatima #define FRAME_DESC_SZ 16 69dad0d04fSFariya Fatima #define MIN_802_11_HDR_LEN 24 7080a88ecfSKarun Eagalapati #define RSI_DEF_KEEPALIVE 90 71f3ac4e73SKarun Eagalapati #define RSI_WOW_KEEPALIVE 5 72f3ac4e73SKarun Eagalapati #define RSI_BCN_MISS_THRESHOLD 24 73dad0d04fSFariya Fatima 74dad0d04fSFariya Fatima #define DATA_QUEUE_WATER_MARK 400 75dad0d04fSFariya Fatima #define MIN_DATA_QUEUE_WATER_MARK 300 76dad0d04fSFariya Fatima #define MULTICAST_WATER_MARK 200 77dad0d04fSFariya Fatima #define MAC_80211_HDR_FRAME_CONTROL 0 78dad0d04fSFariya Fatima #define WME_NUM_AC 4 79d26a9559SPrameela Rani Garnepudi #define NUM_SOFT_QUEUES 6 806abdf2c1SPrameela Rani Garnepudi #define MAX_HW_QUEUES 12 81dad0d04fSFariya Fatima #define INVALID_QUEUE 0xff 82dad0d04fSFariya Fatima #define MAX_CONTINUOUS_VO_PKTS 8 83dad0d04fSFariya Fatima #define MAX_CONTINUOUS_VI_PKTS 4 84dad0d04fSFariya Fatima 856abdf2c1SPrameela Rani Garnepudi /* Hardware queue info */ 866abdf2c1SPrameela Rani Garnepudi #define BROADCAST_HW_Q 9 876abdf2c1SPrameela Rani Garnepudi #define MGMT_HW_Q 10 886abdf2c1SPrameela Rani Garnepudi #define BEACON_HW_Q 11 896abdf2c1SPrameela Rani Garnepudi 90dad0d04fSFariya Fatima #define IEEE80211_MGMT_FRAME 0x00 91dad0d04fSFariya Fatima #define IEEE80211_CTL_FRAME 0x04 92dad0d04fSFariya Fatima 9303c34c0dSPrameela Rani Garnepudi #define RSI_MAX_ASSOC_STAS 32 94dad0d04fSFariya Fatima #define IEEE80211_QOS_TID 0x0f 95dad0d04fSFariya Fatima #define IEEE80211_NONQOS_TID 16 96dad0d04fSFariya Fatima 97dad0d04fSFariya Fatima #define MAX_DEBUGFS_ENTRIES 4 98dad0d04fSFariya Fatima 99dad0d04fSFariya Fatima #define TID_TO_WME_AC(_tid) ( \ 100dad0d04fSFariya Fatima ((_tid) == 0 || (_tid) == 3) ? BE_Q : \ 101dad0d04fSFariya Fatima ((_tid) < 3) ? BK_Q : \ 102dad0d04fSFariya Fatima ((_tid) < 6) ? VI_Q : \ 103dad0d04fSFariya Fatima VO_Q) 104dad0d04fSFariya Fatima 105dad0d04fSFariya Fatima #define WME_AC(_q) ( \ 106dad0d04fSFariya Fatima ((_q) == BK_Q) ? IEEE80211_AC_BK : \ 107dad0d04fSFariya Fatima ((_q) == BE_Q) ? IEEE80211_AC_BE : \ 108dad0d04fSFariya Fatima ((_q) == VI_Q) ? IEEE80211_AC_VI : \ 109dad0d04fSFariya Fatima IEEE80211_AC_VO) 110dad0d04fSFariya Fatima 111f3ac4e73SKarun Eagalapati /* WoWLAN flags */ 112f3ac4e73SKarun Eagalapati #define RSI_WOW_ENABLED BIT(0) 113f3ac4e73SKarun Eagalapati #define RSI_WOW_NO_CONNECTION BIT(1) 114f3ac4e73SKarun Eagalapati 11550117605SPrameela Rani Garnepudi #define RSI_MAX_RX_PKTS 64 116b78e91bcSPrameela Rani Garnepudi 11754fdb318SSiva Rebbagondla enum rsi_dev_model { 11854fdb318SSiva Rebbagondla RSI_DEV_9113 = 0, 11954fdb318SSiva Rebbagondla RSI_DEV_9116 12054fdb318SSiva Rebbagondla }; 12154fdb318SSiva Rebbagondla 122dad0d04fSFariya Fatima struct version_info { 123dad0d04fSFariya Fatima u16 major; 124dad0d04fSFariya Fatima u16 minor; 125192524a4SPavani Muthyala u8 release_num; 126192524a4SPavani Muthyala u8 patch_num; 127192524a4SPavani Muthyala union { 128192524a4SPavani Muthyala struct { 129192524a4SPavani Muthyala u8 fw_ver[8]; 130192524a4SPavani Muthyala } info; 131192524a4SPavani Muthyala } ver; 132dad0d04fSFariya Fatima } __packed; 133dad0d04fSFariya Fatima 134dad0d04fSFariya Fatima struct skb_info { 135dad0d04fSFariya Fatima s8 rssi; 136dad0d04fSFariya Fatima u32 flags; 137dad0d04fSFariya Fatima u16 channel; 138dad0d04fSFariya Fatima s8 tid; 139dad0d04fSFariya Fatima s8 sta_id; 1406507de6dSPrameela Rani Garnepudi u8 internal_hdr_size; 1414671c209SPrameela Rani Garnepudi struct ieee80211_vif *vif; 1424671c209SPrameela Rani Garnepudi u8 vap_id; 143a23cb5f9SMartin Fuzzey bool have_key; 144dad0d04fSFariya Fatima }; 145dad0d04fSFariya Fatima 146dad0d04fSFariya Fatima enum edca_queue { 147dad0d04fSFariya Fatima BK_Q, 148dad0d04fSFariya Fatima BE_Q, 149dad0d04fSFariya Fatima VI_Q, 150dad0d04fSFariya Fatima VO_Q, 151d26a9559SPrameela Rani Garnepudi MGMT_SOFT_Q, 152d26a9559SPrameela Rani Garnepudi MGMT_BEACON_Q 153dad0d04fSFariya Fatima }; 154dad0d04fSFariya Fatima 155dad0d04fSFariya Fatima struct security_info { 156dad0d04fSFariya Fatima u32 ptk_cipher; 157dad0d04fSFariya Fatima u32 gtk_cipher; 158dad0d04fSFariya Fatima }; 159dad0d04fSFariya Fatima 160dad0d04fSFariya Fatima struct wmm_qinfo { 161dad0d04fSFariya Fatima s32 weight; 162dad0d04fSFariya Fatima s32 wme_params; 163dad0d04fSFariya Fatima s32 pkt_contended; 164360accb0SJahnavi Meher s32 txop; 165dad0d04fSFariya Fatima }; 166dad0d04fSFariya Fatima 167dad0d04fSFariya Fatima struct transmit_q_stats { 168d26a9559SPrameela Rani Garnepudi u32 total_tx_pkt_send[NUM_EDCA_QUEUES + 2]; 169d26a9559SPrameela Rani Garnepudi u32 total_tx_pkt_freed[NUM_EDCA_QUEUES + 2]; 170dad0d04fSFariya Fatima }; 171dad0d04fSFariya Fatima 1727fdcb8e1SPrameela Rani Garnepudi #define MAX_BGSCAN_CHANNELS_DUAL_BAND 38 1737fdcb8e1SPrameela Rani Garnepudi #define MAX_BGSCAN_PROBE_REQ_LEN 0x64 1747fdcb8e1SPrameela Rani Garnepudi #define RSI_DEF_BGSCAN_THRLD 0x0 1757fdcb8e1SPrameela Rani Garnepudi #define RSI_DEF_ROAM_THRLD 0xa 1767fdcb8e1SPrameela Rani Garnepudi #define RSI_BGSCAN_PERIODICITY 0x1e 1777fdcb8e1SPrameela Rani Garnepudi #define RSI_ACTIVE_SCAN_TIME 0x14 1787fdcb8e1SPrameela Rani Garnepudi #define RSI_PASSIVE_SCAN_TIME 0x46 1797fdcb8e1SPrameela Rani Garnepudi #define RSI_CHANNEL_SCAN_TIME 20 1807fdcb8e1SPrameela Rani Garnepudi struct rsi_bgscan_params { 1817fdcb8e1SPrameela Rani Garnepudi u16 bgscan_threshold; 1827fdcb8e1SPrameela Rani Garnepudi u16 roam_threshold; 1837fdcb8e1SPrameela Rani Garnepudi u16 bgscan_periodicity; 1847fdcb8e1SPrameela Rani Garnepudi u8 num_bgscan_channels; 1857fdcb8e1SPrameela Rani Garnepudi u8 two_probe; 1867fdcb8e1SPrameela Rani Garnepudi u16 active_scan_duration; 1877fdcb8e1SPrameela Rani Garnepudi u16 passive_scan_duration; 1887fdcb8e1SPrameela Rani Garnepudi }; 1897fdcb8e1SPrameela Rani Garnepudi 190dad0d04fSFariya Fatima struct vif_priv { 191dad0d04fSFariya Fatima bool is_ht; 192dad0d04fSFariya Fatima bool sgi; 193dad0d04fSFariya Fatima u16 seq_start; 194b8bd3a43SPrameela Rani Garnepudi int vap_id; 195dad0d04fSFariya Fatima }; 196dad0d04fSFariya Fatima 197dad0d04fSFariya Fatima struct rsi_event { 198dad0d04fSFariya Fatima atomic_t event_condition; 199dad0d04fSFariya Fatima wait_queue_head_t event_queue; 200dad0d04fSFariya Fatima }; 201dad0d04fSFariya Fatima 202dad0d04fSFariya Fatima struct rsi_thread { 203dad0d04fSFariya Fatima void (*thread_function)(void *); 204dad0d04fSFariya Fatima struct completion completion; 205dad0d04fSFariya Fatima struct task_struct *task; 206dad0d04fSFariya Fatima struct rsi_event event; 207dad0d04fSFariya Fatima atomic_t thread_done; 208dad0d04fSFariya Fatima }; 209dad0d04fSFariya Fatima 210686a2541SJahnavi Meher struct cqm_info { 211686a2541SJahnavi Meher s8 last_cqm_event_rssi; 212686a2541SJahnavi Meher int rssi_thold; 213686a2541SJahnavi Meher u32 rssi_hyst; 214686a2541SJahnavi Meher }; 215686a2541SJahnavi Meher 216d7203a83SPrameela Rani Garnepudi enum rsi_dfs_regions { 217d7203a83SPrameela Rani Garnepudi RSI_REGION_FCC = 0, 218d7203a83SPrameela Rani Garnepudi RSI_REGION_ETSI, 219d7203a83SPrameela Rani Garnepudi RSI_REGION_TELEC, 220d7203a83SPrameela Rani Garnepudi RSI_REGION_WORLD 221d7203a83SPrameela Rani Garnepudi }; 222d7203a83SPrameela Rani Garnepudi 2231533f976SSiva Rebbagondla struct rsi_9116_features { 2241533f976SSiva Rebbagondla u8 pll_mode; 2251533f976SSiva Rebbagondla u8 rf_type; 2261533f976SSiva Rebbagondla u8 wireless_mode; 2271533f976SSiva Rebbagondla u8 afe_type; 2281533f976SSiva Rebbagondla u8 enable_ppe; 2291533f976SSiva Rebbagondla u8 dpd; 2301533f976SSiva Rebbagondla u32 sifs_tx_enable; 2311533f976SSiva Rebbagondla u32 ps_options; 2321533f976SSiva Rebbagondla }; 2331533f976SSiva Rebbagondla 234*a72ebbbcSMartin Fuzzey struct rsi_rate_config { 235*a72ebbbcSMartin Fuzzey u32 configured_mask; /* configured by mac80211 bits 0-11=legacy 12+ mcs */ 236*a72ebbbcSMartin Fuzzey u16 fixed_hw_rate; 237*a72ebbbcSMartin Fuzzey bool fixed_enabled; 238*a72ebbbcSMartin Fuzzey }; 239*a72ebbbcSMartin Fuzzey 240dad0d04fSFariya Fatima struct rsi_common { 241dad0d04fSFariya Fatima struct rsi_hw *priv; 242dad0d04fSFariya Fatima struct vif_priv vif_info[RSI_MAX_VIFS]; 243dad0d04fSFariya Fatima 2442108df3cSPrameela Rani Garnepudi void *coex_cb; 245dad0d04fSFariya Fatima bool mgmt_q_block; 246192524a4SPavani Muthyala struct version_info lmac_ver; 247dad0d04fSFariya Fatima 248dad0d04fSFariya Fatima struct rsi_thread tx_thread; 249d26a9559SPrameela Rani Garnepudi struct sk_buff_head tx_queue[NUM_EDCA_QUEUES + 2]; 250b6c8d06cSKarun Eagalapati struct completion wlan_init_completion; 251dad0d04fSFariya Fatima /* Mutex declaration */ 252dad0d04fSFariya Fatima struct mutex mutex; 253cb164535SKarun Eagalapati /* Mutex used for tx thread */ 254cb164535SKarun Eagalapati struct mutex tx_lock; 2556c409cadSKarun Eagalapati /* Mutex used for rx thread */ 2566c409cadSKarun Eagalapati struct mutex rx_lock; 257dad0d04fSFariya Fatima u8 endpoint; 258dad0d04fSFariya Fatima 259dad0d04fSFariya Fatima /* Channel/band related */ 260dad0d04fSFariya Fatima u8 band; 26109cfb41fSPrameela Rani Garnepudi u8 num_supp_bands; 262dad0d04fSFariya Fatima u8 channel_width; 263dad0d04fSFariya Fatima 264dad0d04fSFariya Fatima u16 rts_threshold; 265*a72ebbbcSMartin Fuzzey u32 bitrate_mask[RSI_MAX_BANDS]; 266*a72ebbbcSMartin Fuzzey struct rsi_rate_config rate_config[RSI_MAX_BANDS]; 267dad0d04fSFariya Fatima 268dad0d04fSFariya Fatima u8 rf_reset; 269dad0d04fSFariya Fatima struct transmit_q_stats tx_stats; 270dad0d04fSFariya Fatima struct security_info secinfo; 271dad0d04fSFariya Fatima struct wmm_qinfo tx_qinfo[NUM_EDCA_QUEUES]; 272dad0d04fSFariya Fatima struct ieee80211_tx_queue_params edca_params[NUM_EDCA_QUEUES]; 273dad0d04fSFariya Fatima u8 mac_addr[IEEE80211_ADDR_LEN]; 274dad0d04fSFariya Fatima 275dad0d04fSFariya Fatima /* state related */ 276dad0d04fSFariya Fatima u32 fsm_state; 277dad0d04fSFariya Fatima bool init_done; 278dad0d04fSFariya Fatima u8 bb_rf_prog_count; 279dad0d04fSFariya Fatima bool iface_down; 280dad0d04fSFariya Fatima 281dad0d04fSFariya Fatima /* Generic */ 282dad0d04fSFariya Fatima u8 channel; 283dad0d04fSFariya Fatima u8 *rx_data_pkt; 284dad0d04fSFariya Fatima u8 mac_id; 285dad0d04fSFariya Fatima u8 radio_id; 286dad0d04fSFariya Fatima u16 rate_pwr[20]; 287dad0d04fSFariya Fatima 288dad0d04fSFariya Fatima /* WMM algo related */ 289dad0d04fSFariya Fatima u8 selected_qnum; 290dad0d04fSFariya Fatima u32 pkt_cnt; 291dad0d04fSFariya Fatima u8 min_weight; 292360accb0SJahnavi Meher 293686a2541SJahnavi Meher /* bgscan related */ 294686a2541SJahnavi Meher struct cqm_info cqm_info; 295686a2541SJahnavi Meher 296360accb0SJahnavi Meher bool hw_data_qs_blocked; 2979920322cSPrameela Rani Garnepudi u8 driver_mode; 298b78e91bcSPrameela Rani Garnepudi u8 coex_mode; 2999920322cSPrameela Rani Garnepudi u16 oper_mode; 3009920322cSPrameela Rani Garnepudi u8 lp_ps_handshake_mode; 3019920322cSPrameela Rani Garnepudi u8 ulp_ps_handshake_mode; 302db07971dSKarun Eagalapati u8 uapsd_bitmap; 3039920322cSPrameela Rani Garnepudi u8 rf_power_val; 3049920322cSPrameela Rani Garnepudi u8 wlan_rf_power_mode; 3059920322cSPrameela Rani Garnepudi u8 obm_ant_sel_val; 3068b36de8cSPrameela Rani Garnepudi int tx_power; 3074edbcd1aSPrameela Rani Garnepudi u8 ant_in_use; 3082108df3cSPrameela Rani Garnepudi /* Mutex used for writing packet to bus */ 3092108df3cSPrameela Rani Garnepudi struct mutex tx_bus_mutex; 310b6c8d06cSKarun Eagalapati bool hibernate_resume; 311b6c8d06cSKarun Eagalapati bool reinit_hw; 312f3ac4e73SKarun Eagalapati u8 wow_flags; 313de1d1813SPrameela Rani Garnepudi u16 beacon_interval; 314de1d1813SPrameela Rani Garnepudi u8 dtim_cnt; 3156da1e00aSPrameela Rani Garnepudi 3166da1e00aSPrameela Rani Garnepudi /* AP mode parameters */ 317d26a9559SPrameela Rani Garnepudi u8 beacon_enabled; 318d26a9559SPrameela Rani Garnepudi u16 beacon_cnt; 31903c34c0dSPrameela Rani Garnepudi struct rsi_sta stations[RSI_MAX_ASSOC_STAS + 1]; 32003c34c0dSPrameela Rani Garnepudi int num_stations; 3216da1e00aSPrameela Rani Garnepudi int max_stations; 32238ef6235SPrameela Rani Garnepudi struct ieee80211_key_conf *key; 323b8bd3a43SPrameela Rani Garnepudi 324b8bd3a43SPrameela Rani Garnepudi /* Wi-Fi direct mode related */ 325b8bd3a43SPrameela Rani Garnepudi bool p2p_enabled; 326df771911SPrameela Rani Garnepudi struct timer_list roc_timer; 327df771911SPrameela Rani Garnepudi struct ieee80211_vif *roc_vif; 328716b840cSSiva Rebbagondla 3294fd6c476SPrameela Rani Garnepudi bool eapol4_confirm; 330d63343e5SMartin Fuzzey bool bt_defer_attach; 331716b840cSSiva Rebbagondla void *bt_adapter; 3327fdcb8e1SPrameela Rani Garnepudi 3337fdcb8e1SPrameela Rani Garnepudi struct cfg80211_scan_request *hwscan; 3347fdcb8e1SPrameela Rani Garnepudi struct rsi_bgscan_params bgscan; 3351533f976SSiva Rebbagondla struct rsi_9116_features w9116_features; 3367fdcb8e1SPrameela Rani Garnepudi u8 bgscan_en; 33773f9b257SSiva Rebbagondla u8 mac_ops_resumed; 338dad0d04fSFariya Fatima }; 339dad0d04fSFariya Fatima 34009cfb41fSPrameela Rani Garnepudi struct eepromrw_info { 34109cfb41fSPrameela Rani Garnepudi u32 offset; 34209cfb41fSPrameela Rani Garnepudi u32 length; 34309cfb41fSPrameela Rani Garnepudi u8 write; 34409cfb41fSPrameela Rani Garnepudi u16 eeprom_erase; 34509cfb41fSPrameela Rani Garnepudi u8 data[480]; 34609cfb41fSPrameela Rani Garnepudi }; 34709cfb41fSPrameela Rani Garnepudi 34809cfb41fSPrameela Rani Garnepudi struct eeprom_read { 34909cfb41fSPrameela Rani Garnepudi u16 length; 35009cfb41fSPrameela Rani Garnepudi u16 off_set; 35109cfb41fSPrameela Rani Garnepudi }; 35209cfb41fSPrameela Rani Garnepudi 353dad0d04fSFariya Fatima struct rsi_hw { 354dad0d04fSFariya Fatima struct rsi_common *priv; 35554fdb318SSiva Rebbagondla enum rsi_dev_model device_model; 356dad0d04fSFariya Fatima struct ieee80211_hw *hw; 357dad0d04fSFariya Fatima struct ieee80211_vif *vifs[RSI_MAX_VIFS]; 358dad0d04fSFariya Fatima struct ieee80211_tx_queue_params edca_params[NUM_EDCA_QUEUES]; 35957fbcce3SJohannes Berg struct ieee80211_supported_band sbands[NUM_NL80211_BANDS]; 360dad0d04fSFariya Fatima 361dad0d04fSFariya Fatima struct device *device; 362dad0d04fSFariya Fatima u8 sc_nvifs; 363dad0d04fSFariya Fatima 3644c10d56aSPrameela Rani Garnepudi enum rsi_host_intf rsi_host_intf; 365b78e91bcSPrameela Rani Garnepudi u16 block_size; 366ce86893fSKarun Eagalapati enum ps_state ps_state; 367ce86893fSKarun Eagalapati struct rsi_ps_info ps_info; 368ce86893fSKarun Eagalapati spinlock_t ps_lock; /*To protect power save config*/ 3699920322cSPrameela Rani Garnepudi u32 usb_buffer_status_reg; 370dad0d04fSFariya Fatima #ifdef CONFIG_RSI_DEBUGFS 371dad0d04fSFariya Fatima struct rsi_debugfs *dfsentry; 372dad0d04fSFariya Fatima u8 num_debugfs_entries; 373dad0d04fSFariya Fatima #endif 374b78e91bcSPrameela Rani Garnepudi char *fw_file_name; 375b78e91bcSPrameela Rani Garnepudi struct timer_list bl_cmd_timer; 376b78e91bcSPrameela Rani Garnepudi bool blcmd_timer_expired; 377b78e91bcSPrameela Rani Garnepudi u32 flash_capacity; 37809cfb41fSPrameela Rani Garnepudi struct eepromrw_info eeprom; 379ebf084eaSKarun Eagalapati u32 interrupt_status; 38061d10842SPrameela Rani Garnepudi u8 dfs_region; 381d7203a83SPrameela Rani Garnepudi char country[2]; 382dad0d04fSFariya Fatima void *rsi_dev; 383a2ce952cSPrameela Rani Garnepudi struct rsi_host_intf_ops *host_intf_ops; 384dad0d04fSFariya Fatima int (*check_hw_queue_status)(struct rsi_hw *adapter, u8 q_num); 385dad0d04fSFariya Fatima int (*determine_event_timeout)(struct rsi_hw *adapter); 386dad0d04fSFariya Fatima }; 387a2ce952cSPrameela Rani Garnepudi 388192524a4SPavani Muthyala void rsi_print_version(struct rsi_common *common); 389192524a4SPavani Muthyala 390a2ce952cSPrameela Rani Garnepudi struct rsi_host_intf_ops { 391a2ce952cSPrameela Rani Garnepudi int (*read_pkt)(struct rsi_hw *adapter, u8 *pkt, u32 len); 392a2ce952cSPrameela Rani Garnepudi int (*write_pkt)(struct rsi_hw *adapter, u8 *pkt, u32 len); 393b78e91bcSPrameela Rani Garnepudi int (*master_access_msword)(struct rsi_hw *adapter, u16 ms_word); 394a2ce952cSPrameela Rani Garnepudi int (*read_reg_multiple)(struct rsi_hw *adapter, u32 addr, 395a2ce952cSPrameela Rani Garnepudi u8 *data, u16 count); 396a2ce952cSPrameela Rani Garnepudi int (*write_reg_multiple)(struct rsi_hw *adapter, u32 addr, 397a2ce952cSPrameela Rani Garnepudi u8 *data, u16 count); 398b97e9b94SPrameela Rani Garnepudi int (*master_reg_read)(struct rsi_hw *adapter, u32 addr, 399b97e9b94SPrameela Rani Garnepudi u32 *read_buf, u16 size); 400b97e9b94SPrameela Rani Garnepudi int (*master_reg_write)(struct rsi_hw *adapter, 401b97e9b94SPrameela Rani Garnepudi unsigned long addr, unsigned long data, 402b97e9b94SPrameela Rani Garnepudi u16 size); 403b97e9b94SPrameela Rani Garnepudi int (*load_data_master_write)(struct rsi_hw *adapter, u32 addr, 404b97e9b94SPrameela Rani Garnepudi u32 instructions_size, u16 block_size, 405b97e9b94SPrameela Rani Garnepudi u8 *fw); 406b6c8d06cSKarun Eagalapati int (*reinit_device)(struct rsi_hw *adapter); 407e5a1ecc9SSiva Rebbagondla int (*ta_reset)(struct rsi_hw *adapter); 408a2ce952cSPrameela Rani Garnepudi }; 4092108df3cSPrameela Rani Garnepudi 4102108df3cSPrameela Rani Garnepudi enum rsi_host_intf rsi_get_host_intf(void *priv); 411716b840cSSiva Rebbagondla void rsi_set_bt_context(void *priv, void *bt_context); 412d63343e5SMartin Fuzzey void rsi_attach_bt(struct rsi_common *common); 4132108df3cSPrameela Rani Garnepudi 414dad0d04fSFariya Fatima #endif 415