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 114b78e91bcSPrameela Rani Garnepudi #define RSI_DEV_9113 1 11550117605SPrameela Rani Garnepudi #define RSI_MAX_RX_PKTS 64 116b78e91bcSPrameela Rani Garnepudi 117dad0d04fSFariya Fatima struct version_info { 118dad0d04fSFariya Fatima u16 major; 119dad0d04fSFariya Fatima u16 minor; 120192524a4SPavani Muthyala u8 release_num; 121192524a4SPavani Muthyala u8 patch_num; 122192524a4SPavani Muthyala union { 123192524a4SPavani Muthyala struct { 124192524a4SPavani Muthyala u8 fw_ver[8]; 125192524a4SPavani Muthyala } info; 126192524a4SPavani Muthyala } ver; 127dad0d04fSFariya Fatima } __packed; 128dad0d04fSFariya Fatima 129dad0d04fSFariya Fatima struct skb_info { 130dad0d04fSFariya Fatima s8 rssi; 131dad0d04fSFariya Fatima u32 flags; 132dad0d04fSFariya Fatima u16 channel; 133dad0d04fSFariya Fatima s8 tid; 134dad0d04fSFariya Fatima s8 sta_id; 1356507de6dSPrameela Rani Garnepudi u8 internal_hdr_size; 1364671c209SPrameela Rani Garnepudi struct ieee80211_vif *vif; 1374671c209SPrameela Rani Garnepudi u8 vap_id; 138dad0d04fSFariya Fatima }; 139dad0d04fSFariya Fatima 140dad0d04fSFariya Fatima enum edca_queue { 141dad0d04fSFariya Fatima BK_Q, 142dad0d04fSFariya Fatima BE_Q, 143dad0d04fSFariya Fatima VI_Q, 144dad0d04fSFariya Fatima VO_Q, 145d26a9559SPrameela Rani Garnepudi MGMT_SOFT_Q, 146d26a9559SPrameela Rani Garnepudi MGMT_BEACON_Q 147dad0d04fSFariya Fatima }; 148dad0d04fSFariya Fatima 149dad0d04fSFariya Fatima struct security_info { 150dad0d04fSFariya Fatima bool security_enable; 151dad0d04fSFariya Fatima u32 ptk_cipher; 152dad0d04fSFariya Fatima u32 gtk_cipher; 153dad0d04fSFariya Fatima }; 154dad0d04fSFariya Fatima 155dad0d04fSFariya Fatima struct wmm_qinfo { 156dad0d04fSFariya Fatima s32 weight; 157dad0d04fSFariya Fatima s32 wme_params; 158dad0d04fSFariya Fatima s32 pkt_contended; 159360accb0SJahnavi Meher s32 txop; 160dad0d04fSFariya Fatima }; 161dad0d04fSFariya Fatima 162dad0d04fSFariya Fatima struct transmit_q_stats { 163d26a9559SPrameela Rani Garnepudi u32 total_tx_pkt_send[NUM_EDCA_QUEUES + 2]; 164d26a9559SPrameela Rani Garnepudi u32 total_tx_pkt_freed[NUM_EDCA_QUEUES + 2]; 165dad0d04fSFariya Fatima }; 166dad0d04fSFariya Fatima 167dad0d04fSFariya Fatima struct vif_priv { 168dad0d04fSFariya Fatima bool is_ht; 169dad0d04fSFariya Fatima bool sgi; 170dad0d04fSFariya Fatima u16 seq_start; 171b8bd3a43SPrameela Rani Garnepudi int vap_id; 172dad0d04fSFariya Fatima }; 173dad0d04fSFariya Fatima 174dad0d04fSFariya Fatima struct rsi_event { 175dad0d04fSFariya Fatima atomic_t event_condition; 176dad0d04fSFariya Fatima wait_queue_head_t event_queue; 177dad0d04fSFariya Fatima }; 178dad0d04fSFariya Fatima 179dad0d04fSFariya Fatima struct rsi_thread { 180dad0d04fSFariya Fatima void (*thread_function)(void *); 181dad0d04fSFariya Fatima struct completion completion; 182dad0d04fSFariya Fatima struct task_struct *task; 183dad0d04fSFariya Fatima struct rsi_event event; 184dad0d04fSFariya Fatima atomic_t thread_done; 185dad0d04fSFariya Fatima }; 186dad0d04fSFariya Fatima 187686a2541SJahnavi Meher struct cqm_info { 188686a2541SJahnavi Meher s8 last_cqm_event_rssi; 189686a2541SJahnavi Meher int rssi_thold; 190686a2541SJahnavi Meher u32 rssi_hyst; 191686a2541SJahnavi Meher }; 192686a2541SJahnavi Meher 193d7203a83SPrameela Rani Garnepudi enum rsi_dfs_regions { 194d7203a83SPrameela Rani Garnepudi RSI_REGION_FCC = 0, 195d7203a83SPrameela Rani Garnepudi RSI_REGION_ETSI, 196d7203a83SPrameela Rani Garnepudi RSI_REGION_TELEC, 197d7203a83SPrameela Rani Garnepudi RSI_REGION_WORLD 198d7203a83SPrameela Rani Garnepudi }; 199d7203a83SPrameela Rani Garnepudi 200dad0d04fSFariya Fatima struct rsi_common { 201dad0d04fSFariya Fatima struct rsi_hw *priv; 202dad0d04fSFariya Fatima struct vif_priv vif_info[RSI_MAX_VIFS]; 203dad0d04fSFariya Fatima 2042108df3cSPrameela Rani Garnepudi void *coex_cb; 205dad0d04fSFariya Fatima bool mgmt_q_block; 206192524a4SPavani Muthyala struct version_info lmac_ver; 207dad0d04fSFariya Fatima 208dad0d04fSFariya Fatima struct rsi_thread tx_thread; 209d26a9559SPrameela Rani Garnepudi struct sk_buff_head tx_queue[NUM_EDCA_QUEUES + 2]; 210b6c8d06cSKarun Eagalapati struct completion wlan_init_completion; 211dad0d04fSFariya Fatima /* Mutex declaration */ 212dad0d04fSFariya Fatima struct mutex mutex; 213cb164535SKarun Eagalapati /* Mutex used for tx thread */ 214cb164535SKarun Eagalapati struct mutex tx_lock; 2156c409cadSKarun Eagalapati /* Mutex used for rx thread */ 2166c409cadSKarun Eagalapati struct mutex rx_lock; 217dad0d04fSFariya Fatima u8 endpoint; 218dad0d04fSFariya Fatima 219dad0d04fSFariya Fatima /* Channel/band related */ 220dad0d04fSFariya Fatima u8 band; 22109cfb41fSPrameela Rani Garnepudi u8 num_supp_bands; 222dad0d04fSFariya Fatima u8 channel_width; 223dad0d04fSFariya Fatima 224dad0d04fSFariya Fatima u16 rts_threshold; 225dad0d04fSFariya Fatima u16 bitrate_mask[2]; 226dad0d04fSFariya Fatima u32 fixedrate_mask[2]; 227dad0d04fSFariya Fatima 228dad0d04fSFariya Fatima u8 rf_reset; 229dad0d04fSFariya Fatima struct transmit_q_stats tx_stats; 230dad0d04fSFariya Fatima struct security_info secinfo; 231dad0d04fSFariya Fatima struct wmm_qinfo tx_qinfo[NUM_EDCA_QUEUES]; 232dad0d04fSFariya Fatima struct ieee80211_tx_queue_params edca_params[NUM_EDCA_QUEUES]; 233dad0d04fSFariya Fatima u8 mac_addr[IEEE80211_ADDR_LEN]; 234dad0d04fSFariya Fatima 235dad0d04fSFariya Fatima /* state related */ 236dad0d04fSFariya Fatima u32 fsm_state; 237dad0d04fSFariya Fatima bool init_done; 238dad0d04fSFariya Fatima u8 bb_rf_prog_count; 239dad0d04fSFariya Fatima bool iface_down; 240dad0d04fSFariya Fatima 241dad0d04fSFariya Fatima /* Generic */ 242dad0d04fSFariya Fatima u8 channel; 243dad0d04fSFariya Fatima u8 *rx_data_pkt; 244dad0d04fSFariya Fatima u8 mac_id; 245dad0d04fSFariya Fatima u8 radio_id; 246dad0d04fSFariya Fatima u16 rate_pwr[20]; 247dad0d04fSFariya Fatima u16 min_rate; 248dad0d04fSFariya Fatima 249dad0d04fSFariya Fatima /* WMM algo related */ 250dad0d04fSFariya Fatima u8 selected_qnum; 251dad0d04fSFariya Fatima u32 pkt_cnt; 252dad0d04fSFariya Fatima u8 min_weight; 253360accb0SJahnavi Meher 254686a2541SJahnavi Meher /* bgscan related */ 255686a2541SJahnavi Meher struct cqm_info cqm_info; 256686a2541SJahnavi Meher 257360accb0SJahnavi Meher bool hw_data_qs_blocked; 2589920322cSPrameela Rani Garnepudi u8 driver_mode; 259b78e91bcSPrameela Rani Garnepudi u8 coex_mode; 2609920322cSPrameela Rani Garnepudi u16 oper_mode; 2619920322cSPrameela Rani Garnepudi u8 lp_ps_handshake_mode; 2629920322cSPrameela Rani Garnepudi u8 ulp_ps_handshake_mode; 263db07971dSKarun Eagalapati u8 uapsd_bitmap; 2649920322cSPrameela Rani Garnepudi u8 rf_power_val; 2659920322cSPrameela Rani Garnepudi u8 wlan_rf_power_mode; 2669920322cSPrameela Rani Garnepudi u8 obm_ant_sel_val; 2678b36de8cSPrameela Rani Garnepudi int tx_power; 2684edbcd1aSPrameela Rani Garnepudi u8 ant_in_use; 2692108df3cSPrameela Rani Garnepudi /* Mutex used for writing packet to bus */ 2702108df3cSPrameela Rani Garnepudi struct mutex tx_bus_mutex; 271b6c8d06cSKarun Eagalapati bool hibernate_resume; 272b6c8d06cSKarun Eagalapati bool reinit_hw; 273f3ac4e73SKarun Eagalapati u8 wow_flags; 274de1d1813SPrameela Rani Garnepudi u16 beacon_interval; 275de1d1813SPrameela Rani Garnepudi u8 dtim_cnt; 2766da1e00aSPrameela Rani Garnepudi 2776da1e00aSPrameela Rani Garnepudi /* AP mode parameters */ 278d26a9559SPrameela Rani Garnepudi u8 beacon_enabled; 279d26a9559SPrameela Rani Garnepudi u16 beacon_cnt; 28003c34c0dSPrameela Rani Garnepudi struct rsi_sta stations[RSI_MAX_ASSOC_STAS + 1]; 28103c34c0dSPrameela Rani Garnepudi int num_stations; 2826da1e00aSPrameela Rani Garnepudi int max_stations; 28338ef6235SPrameela Rani Garnepudi struct ieee80211_key_conf *key; 284b8bd3a43SPrameela Rani Garnepudi 285b8bd3a43SPrameela Rani Garnepudi /* Wi-Fi direct mode related */ 286b8bd3a43SPrameela Rani Garnepudi bool p2p_enabled; 287df771911SPrameela Rani Garnepudi struct timer_list roc_timer; 288df771911SPrameela Rani Garnepudi struct ieee80211_vif *roc_vif; 289716b840cSSiva Rebbagondla 2904fd6c476SPrameela Rani Garnepudi bool eapol4_confirm; 291716b840cSSiva Rebbagondla void *bt_adapter; 292dad0d04fSFariya Fatima }; 293dad0d04fSFariya Fatima 29409cfb41fSPrameela Rani Garnepudi struct eepromrw_info { 29509cfb41fSPrameela Rani Garnepudi u32 offset; 29609cfb41fSPrameela Rani Garnepudi u32 length; 29709cfb41fSPrameela Rani Garnepudi u8 write; 29809cfb41fSPrameela Rani Garnepudi u16 eeprom_erase; 29909cfb41fSPrameela Rani Garnepudi u8 data[480]; 30009cfb41fSPrameela Rani Garnepudi }; 30109cfb41fSPrameela Rani Garnepudi 30209cfb41fSPrameela Rani Garnepudi struct eeprom_read { 30309cfb41fSPrameela Rani Garnepudi u16 length; 30409cfb41fSPrameela Rani Garnepudi u16 off_set; 30509cfb41fSPrameela Rani Garnepudi }; 30609cfb41fSPrameela Rani Garnepudi 307dad0d04fSFariya Fatima struct rsi_hw { 308dad0d04fSFariya Fatima struct rsi_common *priv; 309b78e91bcSPrameela Rani Garnepudi u8 device_model; 310dad0d04fSFariya Fatima struct ieee80211_hw *hw; 311dad0d04fSFariya Fatima struct ieee80211_vif *vifs[RSI_MAX_VIFS]; 312dad0d04fSFariya Fatima struct ieee80211_tx_queue_params edca_params[NUM_EDCA_QUEUES]; 31357fbcce3SJohannes Berg struct ieee80211_supported_band sbands[NUM_NL80211_BANDS]; 314dad0d04fSFariya Fatima 315dad0d04fSFariya Fatima struct device *device; 316dad0d04fSFariya Fatima u8 sc_nvifs; 317dad0d04fSFariya Fatima 3184c10d56aSPrameela Rani Garnepudi enum rsi_host_intf rsi_host_intf; 319b78e91bcSPrameela Rani Garnepudi u16 block_size; 320ce86893fSKarun Eagalapati enum ps_state ps_state; 321ce86893fSKarun Eagalapati struct rsi_ps_info ps_info; 322ce86893fSKarun Eagalapati spinlock_t ps_lock; /*To protect power save config*/ 3239920322cSPrameela Rani Garnepudi u32 usb_buffer_status_reg; 324dad0d04fSFariya Fatima #ifdef CONFIG_RSI_DEBUGFS 325dad0d04fSFariya Fatima struct rsi_debugfs *dfsentry; 326dad0d04fSFariya Fatima u8 num_debugfs_entries; 327dad0d04fSFariya Fatima #endif 328b78e91bcSPrameela Rani Garnepudi char *fw_file_name; 329b78e91bcSPrameela Rani Garnepudi struct timer_list bl_cmd_timer; 330b78e91bcSPrameela Rani Garnepudi bool blcmd_timer_expired; 331b78e91bcSPrameela Rani Garnepudi u32 flash_capacity; 33209cfb41fSPrameela Rani Garnepudi struct eepromrw_info eeprom; 333ebf084eaSKarun Eagalapati u32 interrupt_status; 33461d10842SPrameela Rani Garnepudi u8 dfs_region; 335d7203a83SPrameela Rani Garnepudi char country[2]; 336dad0d04fSFariya Fatima void *rsi_dev; 337a2ce952cSPrameela Rani Garnepudi struct rsi_host_intf_ops *host_intf_ops; 338dad0d04fSFariya Fatima int (*check_hw_queue_status)(struct rsi_hw *adapter, u8 q_num); 339dad0d04fSFariya Fatima int (*determine_event_timeout)(struct rsi_hw *adapter); 340dad0d04fSFariya Fatima }; 341a2ce952cSPrameela Rani Garnepudi 342192524a4SPavani Muthyala void rsi_print_version(struct rsi_common *common); 343192524a4SPavani Muthyala 344a2ce952cSPrameela Rani Garnepudi struct rsi_host_intf_ops { 345a2ce952cSPrameela Rani Garnepudi int (*read_pkt)(struct rsi_hw *adapter, u8 *pkt, u32 len); 346a2ce952cSPrameela Rani Garnepudi int (*write_pkt)(struct rsi_hw *adapter, u8 *pkt, u32 len); 347b78e91bcSPrameela Rani Garnepudi int (*master_access_msword)(struct rsi_hw *adapter, u16 ms_word); 348a2ce952cSPrameela Rani Garnepudi int (*read_reg_multiple)(struct rsi_hw *adapter, u32 addr, 349a2ce952cSPrameela Rani Garnepudi u8 *data, u16 count); 350a2ce952cSPrameela Rani Garnepudi int (*write_reg_multiple)(struct rsi_hw *adapter, u32 addr, 351a2ce952cSPrameela Rani Garnepudi u8 *data, u16 count); 352b97e9b94SPrameela Rani Garnepudi int (*master_reg_read)(struct rsi_hw *adapter, u32 addr, 353b97e9b94SPrameela Rani Garnepudi u32 *read_buf, u16 size); 354b97e9b94SPrameela Rani Garnepudi int (*master_reg_write)(struct rsi_hw *adapter, 355b97e9b94SPrameela Rani Garnepudi unsigned long addr, unsigned long data, 356b97e9b94SPrameela Rani Garnepudi u16 size); 357b97e9b94SPrameela Rani Garnepudi int (*load_data_master_write)(struct rsi_hw *adapter, u32 addr, 358b97e9b94SPrameela Rani Garnepudi u32 instructions_size, u16 block_size, 359b97e9b94SPrameela Rani Garnepudi u8 *fw); 360b6c8d06cSKarun Eagalapati int (*reinit_device)(struct rsi_hw *adapter); 361a2ce952cSPrameela Rani Garnepudi }; 3622108df3cSPrameela Rani Garnepudi 3632108df3cSPrameela Rani Garnepudi enum rsi_host_intf rsi_get_host_intf(void *priv); 364716b840cSSiva Rebbagondla void rsi_set_bt_context(void *priv, void *bt_context); 3652108df3cSPrameela Rani Garnepudi 366dad0d04fSFariya Fatima #endif 367