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_MGMT_H__ 18dad0d04fSFariya Fatima #define __RSI_MGMT_H__ 19dad0d04fSFariya Fatima 20dad0d04fSFariya Fatima #include <linux/sort.h> 21dad0d04fSFariya Fatima #include "rsi_boot_params.h" 22dad0d04fSFariya Fatima #include "rsi_main.h" 23dad0d04fSFariya Fatima 24dad0d04fSFariya Fatima #define MAX_MGMT_PKT_SIZE 512 25dad0d04fSFariya Fatima #define RSI_NEEDED_HEADROOM 80 26dad0d04fSFariya Fatima #define RSI_RCV_BUFFER_LEN 2000 27dad0d04fSFariya Fatima 28dad0d04fSFariya Fatima #define RSI_11B_MODE 0 29dad0d04fSFariya Fatima #define RSI_11G_MODE BIT(7) 30dad0d04fSFariya Fatima #define RETRY_COUNT 8 31dad0d04fSFariya Fatima #define RETRY_LONG 4 32dad0d04fSFariya Fatima #define RETRY_SHORT 7 33dad0d04fSFariya Fatima #define WMM_SHORT_SLOT_TIME 9 34dad0d04fSFariya Fatima #define SIFS_DURATION 16 35dad0d04fSFariya Fatima 36dad0d04fSFariya Fatima #define KEY_TYPE_CLEAR 0 37dad0d04fSFariya Fatima #define RSI_PAIRWISE_KEY 1 38dad0d04fSFariya Fatima #define RSI_GROUP_KEY 2 39dad0d04fSFariya Fatima 40dad0d04fSFariya Fatima /* EPPROM_READ_ADDRESS */ 41dad0d04fSFariya Fatima #define WLAN_MAC_EEPROM_ADDR 40 42dad0d04fSFariya Fatima #define WLAN_MAC_MAGIC_WORD_LEN 0x01 43dad0d04fSFariya Fatima #define WLAN_HOST_MODE_LEN 0x04 44dad0d04fSFariya Fatima #define WLAN_FW_VERSION_LEN 0x08 45dad0d04fSFariya Fatima #define MAGIC_WORD 0x5A 4609cfb41fSPrameela Rani Garnepudi #define WLAN_EEPROM_RFTYPE_ADDR 424 47dad0d04fSFariya Fatima 48dad0d04fSFariya Fatima /* Receive Frame Types */ 49dad0d04fSFariya Fatima #define TA_CONFIRM_TYPE 0x01 50dad0d04fSFariya Fatima #define RX_DOT11_MGMT 0x02 51dad0d04fSFariya Fatima #define TX_STATUS_IND 0x04 52dad0d04fSFariya Fatima #define PROBEREQ_CONFIRM 2 53dad0d04fSFariya Fatima #define CARD_READY_IND 0x00 54dad0d04fSFariya Fatima 55dad0d04fSFariya Fatima #define RSI_DELETE_PEER 0x0 56dad0d04fSFariya Fatima #define RSI_ADD_PEER 0x1 57dad0d04fSFariya Fatima #define START_AMPDU_AGGR 0x1 58dad0d04fSFariya Fatima #define STOP_AMPDU_AGGR 0x0 59dad0d04fSFariya Fatima #define INTERNAL_MGMT_PKT 0x99 60dad0d04fSFariya Fatima 61dad0d04fSFariya Fatima #define PUT_BBP_RESET 0 62dad0d04fSFariya Fatima #define BBP_REG_WRITE 0 63dad0d04fSFariya Fatima #define RF_RESET_ENABLE BIT(3) 64dad0d04fSFariya Fatima #define RATE_INFO_ENABLE BIT(0) 65dad0d04fSFariya Fatima #define RSI_BROADCAST_PKT BIT(9) 666507de6dSPrameela Rani Garnepudi #define RSI_DESC_REQUIRE_CFM_TO_HOST BIT(2) 670eb42586SPavani Muthyala #define RSI_ADD_DELTA_TSF_VAP_ID BIT(3) 680eb42586SPavani Muthyala #define RSI_FETCH_RETRY_CNT_FRM_HST BIT(4) 69af193097SPavani Muthyala #define RSI_QOS_ENABLE BIT(12) 700eb42586SPavani Muthyala #define RSI_REKEY_PURPOSE BIT(13) 71af193097SPavani Muthyala #define RSI_ENCRYPT_PKT BIT(15) 72dad0d04fSFariya Fatima 736abdf2c1SPrameela Rani Garnepudi #define RSI_CMDDESC_40MHZ BIT(4) 746abdf2c1SPrameela Rani Garnepudi #define RSI_CMDDESC_UPPER_20_ENABLE BIT(5) 756abdf2c1SPrameela Rani Garnepudi #define RSI_CMDDESC_LOWER_20_ENABLE BIT(6) 766abdf2c1SPrameela Rani Garnepudi #define RSI_CMDDESC_FULL_40_ENABLE (BIT(5) | BIT(6)) 77dad0d04fSFariya Fatima #define UPPER_20_ENABLE (0x2 << 12) 78dad0d04fSFariya Fatima #define LOWER_20_ENABLE (0x4 << 12) 79dad0d04fSFariya Fatima #define FULL40M_ENABLE 0x6 80dad0d04fSFariya Fatima 81dad0d04fSFariya Fatima #define RSI_LMAC_CLOCK_80MHZ 0x1 82dad0d04fSFariya Fatima #define RSI_ENABLE_40MHZ (0x1 << 3) 832bfa6969SJahnavi Meher #define ENABLE_SHORTGI_RATE BIT(9) 84dad0d04fSFariya Fatima 85dad0d04fSFariya Fatima #define RX_BA_INDICATION 1 86dad0d04fSFariya Fatima #define RSI_TBL_SZ 40 87dad0d04fSFariya Fatima #define MAX_RETRIES 8 8848d11dc3SJahnavi Meher #define RSI_IFTYPE_STATION 0 89dad0d04fSFariya Fatima 90dad0d04fSFariya Fatima #define STD_RATE_MCS7 0x07 91dad0d04fSFariya Fatima #define STD_RATE_MCS6 0x06 92dad0d04fSFariya Fatima #define STD_RATE_MCS5 0x05 93dad0d04fSFariya Fatima #define STD_RATE_MCS4 0x04 94dad0d04fSFariya Fatima #define STD_RATE_MCS3 0x03 95dad0d04fSFariya Fatima #define STD_RATE_MCS2 0x02 96dad0d04fSFariya Fatima #define STD_RATE_MCS1 0x01 97dad0d04fSFariya Fatima #define STD_RATE_MCS0 0x00 98dad0d04fSFariya Fatima #define STD_RATE_54 0x6c 99dad0d04fSFariya Fatima #define STD_RATE_48 0x60 100dad0d04fSFariya Fatima #define STD_RATE_36 0x48 101dad0d04fSFariya Fatima #define STD_RATE_24 0x30 102dad0d04fSFariya Fatima #define STD_RATE_18 0x24 103dad0d04fSFariya Fatima #define STD_RATE_12 0x18 104dad0d04fSFariya Fatima #define STD_RATE_11 0x16 105dad0d04fSFariya Fatima #define STD_RATE_09 0x12 106dad0d04fSFariya Fatima #define STD_RATE_06 0x0C 107dad0d04fSFariya Fatima #define STD_RATE_5_5 0x0B 108dad0d04fSFariya Fatima #define STD_RATE_02 0x04 109dad0d04fSFariya Fatima #define STD_RATE_01 0x02 110dad0d04fSFariya Fatima 111dad0d04fSFariya Fatima #define RSI_RF_TYPE 1 112dad0d04fSFariya Fatima #define RSI_RATE_00 0x00 113dad0d04fSFariya Fatima #define RSI_RATE_1 0x0 114dad0d04fSFariya Fatima #define RSI_RATE_2 0x2 115dad0d04fSFariya Fatima #define RSI_RATE_5_5 0x4 116dad0d04fSFariya Fatima #define RSI_RATE_11 0x6 117dad0d04fSFariya Fatima #define RSI_RATE_6 0x8b 118dad0d04fSFariya Fatima #define RSI_RATE_9 0x8f 119dad0d04fSFariya Fatima #define RSI_RATE_12 0x8a 120dad0d04fSFariya Fatima #define RSI_RATE_18 0x8e 121dad0d04fSFariya Fatima #define RSI_RATE_24 0x89 122dad0d04fSFariya Fatima #define RSI_RATE_36 0x8d 123dad0d04fSFariya Fatima #define RSI_RATE_48 0x88 124dad0d04fSFariya Fatima #define RSI_RATE_54 0x8c 125dad0d04fSFariya Fatima #define RSI_RATE_MCS0 0x100 126dad0d04fSFariya Fatima #define RSI_RATE_MCS1 0x101 127dad0d04fSFariya Fatima #define RSI_RATE_MCS2 0x102 128dad0d04fSFariya Fatima #define RSI_RATE_MCS3 0x103 129dad0d04fSFariya Fatima #define RSI_RATE_MCS4 0x104 130dad0d04fSFariya Fatima #define RSI_RATE_MCS5 0x105 131dad0d04fSFariya Fatima #define RSI_RATE_MCS6 0x106 132dad0d04fSFariya Fatima #define RSI_RATE_MCS7 0x107 133dad0d04fSFariya Fatima #define RSI_RATE_MCS7_SG 0x307 134af193097SPavani Muthyala #define RSI_RATE_AUTO 0xffff 135dad0d04fSFariya Fatima 136dad0d04fSFariya Fatima #define BW_20MHZ 0 137dad0d04fSFariya Fatima #define BW_40MHZ 1 138dad0d04fSFariya Fatima 139f870a340SJahnavi Meher #define EP_2GHZ_20MHZ 0 140f870a340SJahnavi Meher #define EP_2GHZ_40MHZ 1 141f870a340SJahnavi Meher #define EP_5GHZ_20MHZ 2 142f870a340SJahnavi Meher #define EP_5GHZ_40MHZ 3 143f870a340SJahnavi Meher 1444550faacSJahnavi Meher #define SIFS_TX_11N_VALUE 580 1454550faacSJahnavi Meher #define SIFS_TX_11B_VALUE 346 1464550faacSJahnavi Meher #define SHORT_SLOT_VALUE 360 1474550faacSJahnavi Meher #define LONG_SLOT_VALUE 640 1484550faacSJahnavi Meher #define OFDM_ACK_TOUT_VALUE 2720 1494550faacSJahnavi Meher #define CCK_ACK_TOUT_VALUE 9440 1504550faacSJahnavi Meher #define LONG_PREAMBLE 0x0000 1514550faacSJahnavi Meher #define SHORT_PREAMBLE 0x0001 1524550faacSJahnavi Meher 153dad0d04fSFariya Fatima #define RSI_SUPP_FILTERS (FIF_ALLMULTI | FIF_PROBE_REQ |\ 154dad0d04fSFariya Fatima FIF_BCN_PRBRESP_PROMISC) 155e6d64284SPrameela Rani Garnepudi 1564edbcd1aSPrameela Rani Garnepudi #define ANTENNA_SEL_INT 0x02 /* RF_OUT_2 / Integerated */ 1574edbcd1aSPrameela Rani Garnepudi #define ANTENNA_SEL_UFL 0x03 /* RF_OUT_1 / U.FL */ 1584edbcd1aSPrameela Rani Garnepudi 159e6d64284SPrameela Rani Garnepudi /* Rx filter word definitions */ 160e6d64284SPrameela Rani Garnepudi #define PROMISCOUS_MODE BIT(0) 161e6d64284SPrameela Rani Garnepudi #define ALLOW_DATA_ASSOC_PEER BIT(1) 162e6d64284SPrameela Rani Garnepudi #define ALLOW_MGMT_ASSOC_PEER BIT(2) 163e6d64284SPrameela Rani Garnepudi #define ALLOW_CTRL_ASSOC_PEER BIT(3) 164e6d64284SPrameela Rani Garnepudi #define DISALLOW_BEACONS BIT(4) 165e6d64284SPrameela Rani Garnepudi #define ALLOW_CONN_PEER_MGMT_WHILE_BUF_FULL BIT(5) 166e6d64284SPrameela Rani Garnepudi #define DISALLOW_BROADCAST_DATA BIT(6) 167e6d64284SPrameela Rani Garnepudi 16859e006dcSPrameela Rani Garnepudi #define RSI_MPDU_DENSITY 0x8 16959e006dcSPrameela Rani Garnepudi 170dad0d04fSFariya Fatima enum opmode { 171dad0d04fSFariya Fatima STA_OPMODE = 1, 172dad0d04fSFariya Fatima AP_OPMODE = 2 173dad0d04fSFariya Fatima }; 174dad0d04fSFariya Fatima 17577364aaeSPrameela Rani Garnepudi enum vap_status { 17677364aaeSPrameela Rani Garnepudi VAP_ADD = 1, 17777364aaeSPrameela Rani Garnepudi VAP_DELETE = 2, 17877364aaeSPrameela Rani Garnepudi VAP_UPDATE = 3 17977364aaeSPrameela Rani Garnepudi }; 18077364aaeSPrameela Rani Garnepudi 181dad0d04fSFariya Fatima extern struct ieee80211_rate rsi_rates[12]; 182dad0d04fSFariya Fatima extern const u16 rsi_mcsrates[8]; 183dad0d04fSFariya Fatima 184dad0d04fSFariya Fatima enum sta_notify_events { 185dad0d04fSFariya Fatima STA_CONNECTED = 0, 186dad0d04fSFariya Fatima STA_DISCONNECTED, 187dad0d04fSFariya Fatima STA_TX_ADDBA_DONE, 188dad0d04fSFariya Fatima STA_TX_DELBA, 189dad0d04fSFariya Fatima STA_RX_ADDBA_DONE, 190dad0d04fSFariya Fatima STA_RX_DELBA 191dad0d04fSFariya Fatima }; 192dad0d04fSFariya Fatima 193dad0d04fSFariya Fatima /* Send Frames Types */ 194dad0d04fSFariya Fatima enum cmd_frame_type { 195dad0d04fSFariya Fatima TX_DOT11_MGMT, 196dad0d04fSFariya Fatima RESET_MAC_REQ, 197dad0d04fSFariya Fatima RADIO_CAPABILITIES, 198dad0d04fSFariya Fatima BB_PROG_VALUES_REQUEST, 199dad0d04fSFariya Fatima RF_PROG_VALUES_REQUEST, 200dad0d04fSFariya Fatima WAKEUP_SLEEP_REQUEST, 201dad0d04fSFariya Fatima SCAN_REQUEST, 202dad0d04fSFariya Fatima TSF_UPDATE, 203dad0d04fSFariya Fatima PEER_NOTIFY, 204686a2541SJahnavi Meher BLOCK_HW_QUEUE, 205dad0d04fSFariya Fatima SET_KEY_REQ, 206dad0d04fSFariya Fatima AUTO_RATE_IND, 207dad0d04fSFariya Fatima BOOTUP_PARAMS_REQUEST, 208dad0d04fSFariya Fatima VAP_CAPABILITIES, 20909cfb41fSPrameela Rani Garnepudi EEPROM_READ, 210dad0d04fSFariya Fatima EEPROM_WRITE, 211dad0d04fSFariya Fatima GPIO_PIN_CONFIG , 212dad0d04fSFariya Fatima SET_RX_FILTER, 213dad0d04fSFariya Fatima AMPDU_IND, 214dad0d04fSFariya Fatima STATS_REQUEST_FRAME, 215dad0d04fSFariya Fatima BB_BUF_PROG_VALUES_REQ, 216dad0d04fSFariya Fatima BBP_PROG_IN_TA, 217dad0d04fSFariya Fatima BG_SCAN_PARAMS, 218dad0d04fSFariya Fatima BG_SCAN_PROBE_REQ, 219dad0d04fSFariya Fatima CW_MODE_REQ, 2208b36de8cSPrameela Rani Garnepudi PER_CMD_PKT, 2214edbcd1aSPrameela Rani Garnepudi ANT_SEL_FRAME = 0x20, 2229920322cSPrameela Rani Garnepudi COMMON_DEV_CONFIG = 0x28, 2238b36de8cSPrameela Rani Garnepudi RADIO_PARAMS_UPDATE = 0x29 224dad0d04fSFariya Fatima }; 225dad0d04fSFariya Fatima 226dad0d04fSFariya Fatima struct rsi_mac_frame { 227dad0d04fSFariya Fatima __le16 desc_word[8]; 228dad0d04fSFariya Fatima } __packed; 229dad0d04fSFariya Fatima 2306c8ab76dSPrameela Rani Garnepudi #define PWR_SAVE_WAKEUP_IND BIT(0) 2316c8ab76dSPrameela Rani Garnepudi #define TCP_CHECK_SUM_OFFLOAD BIT(1) 2326c8ab76dSPrameela Rani Garnepudi #define CONFIRM_REQUIRED_TO_HOST BIT(2) 2336c8ab76dSPrameela Rani Garnepudi #define ADD_DELTA_TSF BIT(3) 2346c8ab76dSPrameela Rani Garnepudi #define FETCH_RETRY_CNT_FROM_HOST_DESC BIT(4) 2356c8ab76dSPrameela Rani Garnepudi #define EOSP_INDICATION BIT(5) 2366c8ab76dSPrameela Rani Garnepudi #define REQUIRE_TSF_SYNC_CONFIRM BIT(6) 2376c8ab76dSPrameela Rani Garnepudi #define ENCAP_MGMT_PKT BIT(7) 2389a629fafSPrameela Rani Garnepudi #define DESC_IMMEDIATE_WAKEUP BIT(15) 2396c8ab76dSPrameela Rani Garnepudi 2406c8ab76dSPrameela Rani Garnepudi struct rsi_cmd_desc_dword0 { 2416c8ab76dSPrameela Rani Garnepudi __le16 len_qno; 2426c8ab76dSPrameela Rani Garnepudi u8 frame_type; 2436c8ab76dSPrameela Rani Garnepudi u8 misc_flags; 2446c8ab76dSPrameela Rani Garnepudi }; 2456c8ab76dSPrameela Rani Garnepudi 2466c8ab76dSPrameela Rani Garnepudi struct rsi_cmd_desc_dword1 { 2476c8ab76dSPrameela Rani Garnepudi u8 xtend_desc_size; 2486c8ab76dSPrameela Rani Garnepudi u8 reserved1; 2496c8ab76dSPrameela Rani Garnepudi __le16 reserved2; 2506c8ab76dSPrameela Rani Garnepudi }; 2516c8ab76dSPrameela Rani Garnepudi 2526c8ab76dSPrameela Rani Garnepudi struct rsi_cmd_desc_dword2 { 2536c8ab76dSPrameela Rani Garnepudi __le32 pkt_info; /* Packet specific data */ 2546c8ab76dSPrameela Rani Garnepudi }; 2556c8ab76dSPrameela Rani Garnepudi 2566c8ab76dSPrameela Rani Garnepudi struct rsi_cmd_desc_dword3 { 2576c8ab76dSPrameela Rani Garnepudi __le16 token; 2586c8ab76dSPrameela Rani Garnepudi u8 qid_tid; 2596c8ab76dSPrameela Rani Garnepudi u8 sta_id; 2606c8ab76dSPrameela Rani Garnepudi }; 2616c8ab76dSPrameela Rani Garnepudi 2626c8ab76dSPrameela Rani Garnepudi struct rsi_cmd_desc { 2636c8ab76dSPrameela Rani Garnepudi struct rsi_cmd_desc_dword0 desc_dword0; 2646c8ab76dSPrameela Rani Garnepudi struct rsi_cmd_desc_dword1 desc_dword1; 2656c8ab76dSPrameela Rani Garnepudi struct rsi_cmd_desc_dword2 desc_dword2; 2666c8ab76dSPrameela Rani Garnepudi struct rsi_cmd_desc_dword3 desc_dword3; 2676c8ab76dSPrameela Rani Garnepudi }; 2686c8ab76dSPrameela Rani Garnepudi 269dad0d04fSFariya Fatima struct rsi_boot_params { 270dad0d04fSFariya Fatima __le16 desc_word[8]; 271dad0d04fSFariya Fatima struct bootup_params bootup_params; 272dad0d04fSFariya Fatima } __packed; 273dad0d04fSFariya Fatima 274dad0d04fSFariya Fatima struct rsi_peer_notify { 27559e006dcSPrameela Rani Garnepudi struct rsi_cmd_desc desc; 276dad0d04fSFariya Fatima u8 mac_addr[6]; 277dad0d04fSFariya Fatima __le16 command; 278dad0d04fSFariya Fatima __le16 mpdu_density; 279dad0d04fSFariya Fatima __le16 reserved; 280dad0d04fSFariya Fatima __le32 sta_flags; 281dad0d04fSFariya Fatima } __packed; 282dad0d04fSFariya Fatima 2833a9828c9SPrameela Rani Garnepudi /* Aggregation params flags */ 2843a9828c9SPrameela Rani Garnepudi #define RSI_AGGR_PARAMS_TID_MASK 0xf 2853a9828c9SPrameela Rani Garnepudi #define RSI_AGGR_PARAMS_START BIT(4) 2863a9828c9SPrameela Rani Garnepudi #define RSI_AGGR_PARAMS_RX_AGGR BIT(5) 2873a9828c9SPrameela Rani Garnepudi struct rsi_aggr_params { 2883a9828c9SPrameela Rani Garnepudi struct rsi_cmd_desc_dword0 desc_dword0; 2893a9828c9SPrameela Rani Garnepudi struct rsi_cmd_desc_dword0 desc_dword1; 2903a9828c9SPrameela Rani Garnepudi __le16 seq_start; 2913a9828c9SPrameela Rani Garnepudi __le16 baw_size; 2923a9828c9SPrameela Rani Garnepudi __le16 token; 2933a9828c9SPrameela Rani Garnepudi u8 aggr_params; 2943a9828c9SPrameela Rani Garnepudi u8 peer_id; 2953a9828c9SPrameela Rani Garnepudi } __packed; 2963a9828c9SPrameela Rani Garnepudi 297dad0d04fSFariya Fatima struct rsi_vap_caps { 298dad0d04fSFariya Fatima __le16 desc_word[8]; 299dad0d04fSFariya Fatima u8 mac_addr[6]; 300dad0d04fSFariya Fatima __le16 keep_alive_period; 301dad0d04fSFariya Fatima u8 bssid[6]; 302dad0d04fSFariya Fatima __le16 reserved; 303dad0d04fSFariya Fatima __le32 flags; 304dad0d04fSFariya Fatima __le16 frag_threshold; 305dad0d04fSFariya Fatima __le16 rts_threshold; 306dad0d04fSFariya Fatima __le32 default_mgmt_rate; 307dad0d04fSFariya Fatima __le32 default_ctrl_rate; 308dad0d04fSFariya Fatima __le32 default_data_rate; 309dad0d04fSFariya Fatima __le16 beacon_interval; 310dad0d04fSFariya Fatima __le16 dtim_period; 311dad0d04fSFariya Fatima } __packed; 312dad0d04fSFariya Fatima 313dad0d04fSFariya Fatima struct rsi_set_key { 314dad0d04fSFariya Fatima __le16 desc_word[8]; 315dad0d04fSFariya Fatima u8 key[4][32]; 316dad0d04fSFariya Fatima u8 tx_mic_key[8]; 317dad0d04fSFariya Fatima u8 rx_mic_key[8]; 318dad0d04fSFariya Fatima } __packed; 319dad0d04fSFariya Fatima 320dad0d04fSFariya Fatima struct rsi_auto_rate { 321dad0d04fSFariya Fatima __le16 desc_word[8]; 322dad0d04fSFariya Fatima __le16 failure_limit; 323dad0d04fSFariya Fatima __le16 initial_boundary; 324dad0d04fSFariya Fatima __le16 max_threshold_limt; 325dad0d04fSFariya Fatima __le16 num_supported_rates; 326dad0d04fSFariya Fatima __le16 aarf_rssi; 327dad0d04fSFariya Fatima __le16 moderate_rate_inx; 328dad0d04fSFariya Fatima __le16 collision_tolerance; 329dad0d04fSFariya Fatima __le16 supported_rates[40]; 330dad0d04fSFariya Fatima } __packed; 331dad0d04fSFariya Fatima 332dad0d04fSFariya Fatima struct qos_params { 333dad0d04fSFariya Fatima __le16 cont_win_min_q; 334dad0d04fSFariya Fatima __le16 cont_win_max_q; 335dad0d04fSFariya Fatima __le16 aifsn_val_q; 336dad0d04fSFariya Fatima __le16 txop_q; 337dad0d04fSFariya Fatima } __packed; 338dad0d04fSFariya Fatima 339dad0d04fSFariya Fatima struct rsi_radio_caps { 3406abdf2c1SPrameela Rani Garnepudi struct rsi_cmd_desc_dword0 desc_dword0; 3416abdf2c1SPrameela Rani Garnepudi struct rsi_cmd_desc_dword0 desc_dword1; 3426abdf2c1SPrameela Rani Garnepudi u8 channel_num; 3436abdf2c1SPrameela Rani Garnepudi u8 rf_model; 3446abdf2c1SPrameela Rani Garnepudi __le16 ppe_ack_rate; 3456abdf2c1SPrameela Rani Garnepudi __le16 mode_11j; 3466abdf2c1SPrameela Rani Garnepudi u8 radio_cfg_info; 3476abdf2c1SPrameela Rani Garnepudi u8 radio_info; 348dad0d04fSFariya Fatima struct qos_params qos_params[MAX_HW_QUEUES]; 349dad0d04fSFariya Fatima u8 num_11n_rates; 350dad0d04fSFariya Fatima u8 num_11ac_rates; 351dad0d04fSFariya Fatima __le16 gcpd_per_rate[20]; 3524550faacSJahnavi Meher __le16 sifs_tx_11n; 3534550faacSJahnavi Meher __le16 sifs_tx_11b; 3544550faacSJahnavi Meher __le16 slot_rx_11n; 3554550faacSJahnavi Meher __le16 ofdm_ack_tout; 3564550faacSJahnavi Meher __le16 cck_ack_tout; 3574550faacSJahnavi Meher __le16 preamble_type; 358dad0d04fSFariya Fatima } __packed; 359dad0d04fSFariya Fatima 3609920322cSPrameela Rani Garnepudi /* ULP GPIO flags */ 3619920322cSPrameela Rani Garnepudi #define RSI_GPIO_MOTION_SENSOR_ULP_WAKEUP BIT(0) 3629920322cSPrameela Rani Garnepudi #define RSI_GPIO_SLEEP_IND_FROM_DEVICE BIT(1) 3639920322cSPrameela Rani Garnepudi #define RSI_GPIO_2_ULP BIT(2) 3649920322cSPrameela Rani Garnepudi #define RSI_GPIO_PUSH_BUTTON_ULP_WAKEUP BIT(3) 3659920322cSPrameela Rani Garnepudi 3669920322cSPrameela Rani Garnepudi /* SOC GPIO flags */ 3679920322cSPrameela Rani Garnepudi #define RSI_GPIO_0_PSPI_CSN_0 BIT(0) 3689920322cSPrameela Rani Garnepudi #define RSI_GPIO_1_PSPI_CSN_1 BIT(1) 3699920322cSPrameela Rani Garnepudi #define RSI_GPIO_2_HOST_WAKEUP_INTR BIT(2) 3709920322cSPrameela Rani Garnepudi #define RSI_GPIO_3_PSPI_DATA_0 BIT(3) 3719920322cSPrameela Rani Garnepudi #define RSI_GPIO_4_PSPI_DATA_1 BIT(4) 3729920322cSPrameela Rani Garnepudi #define RSI_GPIO_5_PSPI_DATA_2 BIT(5) 3739920322cSPrameela Rani Garnepudi #define RSI_GPIO_6_PSPI_DATA_3 BIT(6) 3749920322cSPrameela Rani Garnepudi #define RSI_GPIO_7_I2C_SCL BIT(7) 3759920322cSPrameela Rani Garnepudi #define RSI_GPIO_8_I2C_SDA BIT(8) 3769920322cSPrameela Rani Garnepudi #define RSI_GPIO_9_UART1_RX BIT(9) 3779920322cSPrameela Rani Garnepudi #define RSI_GPIO_10_UART1_TX BIT(10) 3789920322cSPrameela Rani Garnepudi #define RSI_GPIO_11_UART1_RTS_I2S_CLK BIT(11) 3799920322cSPrameela Rani Garnepudi #define RSI_GPIO_12_UART1_CTS_I2S_WS BIT(12) 3809920322cSPrameela Rani Garnepudi #define RSI_GPIO_13_DBG_UART_RX_I2S_DIN BIT(13) 3819920322cSPrameela Rani Garnepudi #define RSI_GPIO_14_DBG_UART_RX_I2S_DOUT BIT(14) 3829920322cSPrameela Rani Garnepudi #define RSI_GPIO_15_LP_WAKEUP_BOOT_BYPASS BIT(15) 3839920322cSPrameela Rani Garnepudi #define RSI_GPIO_16_LED_0 BIT(16) 3849920322cSPrameela Rani Garnepudi #define RSI_GPIO_17_BTCOEX_WLAN_ACT_EXT_ANT_SEL BIT(17) 3859920322cSPrameela Rani Garnepudi #define RSI_GPIO_18_BTCOEX_BT_PRIO_EXT_ANT_SEL BIT(18) 3869920322cSPrameela Rani Garnepudi #define RSI_GPIO_19_BTCOEX_BT_ACT_EXT_ON_OFF BIT(19) 3879920322cSPrameela Rani Garnepudi #define RSI_GPIO_20_RF_RESET BIT(20) 3889920322cSPrameela Rani Garnepudi #define RSI_GPIO_21_SLEEP_IND_FROM_DEVICE BIT(21) 3899920322cSPrameela Rani Garnepudi 3909920322cSPrameela Rani Garnepudi #define RSI_UNUSED_SOC_GPIO_BITMAP (RSI_GPIO_9_UART1_RX | \ 3919920322cSPrameela Rani Garnepudi RSI_GPIO_10_UART1_TX | \ 3929920322cSPrameela Rani Garnepudi RSI_GPIO_11_UART1_RTS_I2S_CLK | \ 3939920322cSPrameela Rani Garnepudi RSI_GPIO_12_UART1_CTS_I2S_WS | \ 3949920322cSPrameela Rani Garnepudi RSI_GPIO_13_DBG_UART_RX_I2S_DIN | \ 3959920322cSPrameela Rani Garnepudi RSI_GPIO_14_DBG_UART_RX_I2S_DOUT | \ 3969920322cSPrameela Rani Garnepudi RSI_GPIO_15_LP_WAKEUP_BOOT_BYPASS | \ 3979920322cSPrameela Rani Garnepudi RSI_GPIO_17_BTCOEX_WLAN_ACT_EXT_ANT_SEL | \ 3989920322cSPrameela Rani Garnepudi RSI_GPIO_18_BTCOEX_BT_PRIO_EXT_ANT_SEL | \ 3999920322cSPrameela Rani Garnepudi RSI_GPIO_19_BTCOEX_BT_ACT_EXT_ON_OFF | \ 4009920322cSPrameela Rani Garnepudi RSI_GPIO_21_SLEEP_IND_FROM_DEVICE) 4019920322cSPrameela Rani Garnepudi 4029920322cSPrameela Rani Garnepudi #define RSI_UNUSED_ULP_GPIO_BITMAP (RSI_GPIO_MOTION_SENSOR_ULP_WAKEUP | \ 4039920322cSPrameela Rani Garnepudi RSI_GPIO_SLEEP_IND_FROM_DEVICE | \ 4049920322cSPrameela Rani Garnepudi RSI_GPIO_2_ULP | \ 4059920322cSPrameela Rani Garnepudi RSI_GPIO_PUSH_BUTTON_ULP_WAKEUP); 4069920322cSPrameela Rani Garnepudi struct rsi_config_vals { 4079920322cSPrameela Rani Garnepudi __le16 len_qno; 4089920322cSPrameela Rani Garnepudi u8 pkt_type; 4099920322cSPrameela Rani Garnepudi u8 misc_flags; 4109920322cSPrameela Rani Garnepudi __le16 reserved1[6]; 4119920322cSPrameela Rani Garnepudi u8 lp_ps_handshake; 4129920322cSPrameela Rani Garnepudi u8 ulp_ps_handshake; 4139920322cSPrameela Rani Garnepudi u8 sleep_config_params; /* 0 for no handshake, 4149920322cSPrameela Rani Garnepudi * 1 for GPIO based handshake, 4159920322cSPrameela Rani Garnepudi * 2 packet handshake 4169920322cSPrameela Rani Garnepudi */ 4179920322cSPrameela Rani Garnepudi u8 unused_ulp_gpio; 4189920322cSPrameela Rani Garnepudi __le32 unused_soc_gpio_bitmap; 4199920322cSPrameela Rani Garnepudi u8 ext_pa_or_bt_coex_en; 4209920322cSPrameela Rani Garnepudi u8 opermode; 4219920322cSPrameela Rani Garnepudi u8 wlan_rf_pwr_mode; 4229920322cSPrameela Rani Garnepudi u8 bt_rf_pwr_mode; 4239920322cSPrameela Rani Garnepudi u8 zigbee_rf_pwr_mode; 4249920322cSPrameela Rani Garnepudi u8 driver_mode; 4259920322cSPrameela Rani Garnepudi u8 region_code; 4269920322cSPrameela Rani Garnepudi u8 antenna_sel_val; 4279920322cSPrameela Rani Garnepudi u8 reserved2[16]; 4289920322cSPrameela Rani Garnepudi } __packed; 4299920322cSPrameela Rani Garnepudi 43009cfb41fSPrameela Rani Garnepudi /* Packet info flags */ 43109cfb41fSPrameela Rani Garnepudi #define RSI_EEPROM_HDR_SIZE_OFFSET 8 43209cfb41fSPrameela Rani Garnepudi #define RSI_EEPROM_HDR_SIZE_MASK 0x300 43309cfb41fSPrameela Rani Garnepudi #define RSI_EEPROM_LEN_OFFSET 20 43409cfb41fSPrameela Rani Garnepudi #define RSI_EEPROM_LEN_MASK 0xFFF00000 43509cfb41fSPrameela Rani Garnepudi 43609cfb41fSPrameela Rani Garnepudi struct rsi_eeprom_read_frame { 43709cfb41fSPrameela Rani Garnepudi __le16 len_qno; 43809cfb41fSPrameela Rani Garnepudi u8 pkt_type; 43909cfb41fSPrameela Rani Garnepudi u8 misc_flags; 44009cfb41fSPrameela Rani Garnepudi __le32 pkt_info; 44109cfb41fSPrameela Rani Garnepudi __le32 eeprom_offset; 44209cfb41fSPrameela Rani Garnepudi __le16 delay_ms; 44309cfb41fSPrameela Rani Garnepudi __le16 reserved3; 44409cfb41fSPrameela Rani Garnepudi } __packed; 44509cfb41fSPrameela Rani Garnepudi 446dad0d04fSFariya Fatima static inline u32 rsi_get_queueno(u8 *addr, u16 offset) 447dad0d04fSFariya Fatima { 448dad0d04fSFariya Fatima return (le16_to_cpu(*(__le16 *)&addr[offset]) & 0x7000) >> 12; 449dad0d04fSFariya Fatima } 450dad0d04fSFariya Fatima 451dad0d04fSFariya Fatima static inline u32 rsi_get_length(u8 *addr, u16 offset) 452dad0d04fSFariya Fatima { 453dad0d04fSFariya Fatima return (le16_to_cpu(*(__le16 *)&addr[offset])) & 0x0fff; 454dad0d04fSFariya Fatima } 455dad0d04fSFariya Fatima 456dad0d04fSFariya Fatima static inline u8 rsi_get_extended_desc(u8 *addr, u16 offset) 457dad0d04fSFariya Fatima { 458dad0d04fSFariya Fatima return le16_to_cpu(*((__le16 *)&addr[offset + 4])) & 0x00ff; 459dad0d04fSFariya Fatima } 460dad0d04fSFariya Fatima 461dad0d04fSFariya Fatima static inline u8 rsi_get_rssi(u8 *addr) 462dad0d04fSFariya Fatima { 463dad0d04fSFariya Fatima return *(u8 *)(addr + FRAME_DESC_SZ); 464dad0d04fSFariya Fatima } 465dad0d04fSFariya Fatima 466dad0d04fSFariya Fatima static inline u8 rsi_get_channel(u8 *addr) 467dad0d04fSFariya Fatima { 468dad0d04fSFariya Fatima return *(char *)(addr + 15); 469dad0d04fSFariya Fatima } 470dad0d04fSFariya Fatima 4719920322cSPrameela Rani Garnepudi static inline void rsi_set_len_qno(__le16 *addr, u16 len, u8 qno) 4729920322cSPrameela Rani Garnepudi { 4739920322cSPrameela Rani Garnepudi *addr = cpu_to_le16(len | ((qno & 7) << 12)); 4749920322cSPrameela Rani Garnepudi } 4759920322cSPrameela Rani Garnepudi 476dad0d04fSFariya Fatima int rsi_mgmt_pkt_recv(struct rsi_common *common, u8 *msg); 47777364aaeSPrameela Rani Garnepudi int rsi_set_vap_capabilities(struct rsi_common *common, enum opmode mode, 47877364aaeSPrameela Rani Garnepudi u8 vap_status); 479dad0d04fSFariya Fatima int rsi_send_aggregation_params_frame(struct rsi_common *common, u16 tid, 480dad0d04fSFariya Fatima u16 ssn, u8 buf_size, u8 event); 481dad0d04fSFariya Fatima int rsi_hal_load_key(struct rsi_common *common, u8 *data, u16 key_len, 482dad0d04fSFariya Fatima u8 key_type, u8 key_id, u32 cipher); 48361d10842SPrameela Rani Garnepudi int rsi_set_channel(struct rsi_common *common, 48461d10842SPrameela Rani Garnepudi struct ieee80211_channel *channel); 485686a2541SJahnavi Meher int rsi_send_block_unblock_frame(struct rsi_common *common, bool event); 486dad0d04fSFariya Fatima void rsi_inform_bss_status(struct rsi_common *common, u8 status, 487dad0d04fSFariya Fatima const u8 *bssid, u8 qos_enable, u16 aid); 488dad0d04fSFariya Fatima void rsi_indicate_pkt_to_os(struct rsi_common *common, struct sk_buff *skb); 489dad0d04fSFariya Fatima int rsi_mac80211_attach(struct rsi_common *common); 490dad0d04fSFariya Fatima void rsi_indicate_tx_status(struct rsi_hw *common, struct sk_buff *skb, 491dad0d04fSFariya Fatima int status); 492dad0d04fSFariya Fatima bool rsi_is_cipher_wep(struct rsi_common *common); 493dad0d04fSFariya Fatima void rsi_core_qos_processor(struct rsi_common *common); 494dad0d04fSFariya Fatima void rsi_core_xmit(struct rsi_common *common, struct sk_buff *skb); 495dad0d04fSFariya Fatima int rsi_send_mgmt_pkt(struct rsi_common *common, struct sk_buff *skb); 496dad0d04fSFariya Fatima int rsi_send_data_pkt(struct rsi_common *common, struct sk_buff *skb); 49785af5bf8SJahnavi Meher int rsi_band_check(struct rsi_common *common); 498e6d64284SPrameela Rani Garnepudi int rsi_send_rx_filter_frame(struct rsi_common *common, u16 rx_filter_word); 4998b36de8cSPrameela Rani Garnepudi int rsi_send_radio_params_update(struct rsi_common *common); 5004edbcd1aSPrameela Rani Garnepudi int rsi_set_antenna(struct rsi_common *common, u8 antenna); 501dad0d04fSFariya Fatima #endif 502