xref: /OK3568_Linux_fs/kernel/drivers/net/wireless/realtek/rtlwifi/rtl8192se/fw.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun /* Copyright(c) 2009-2012  Realtek Corporation.*/
3*4882a593Smuzhiyun 
4*4882a593Smuzhiyun #ifndef __REALTEK_FIRMWARE92S_H__
5*4882a593Smuzhiyun #define __REALTEK_FIRMWARE92S_H__
6*4882a593Smuzhiyun 
7*4882a593Smuzhiyun #define RTL8190_MAX_FIRMWARE_CODE_SIZE		64000
8*4882a593Smuzhiyun #define RTL8190_MAX_RAW_FIRMWARE_CODE_SIZE	90000
9*4882a593Smuzhiyun #define RTL8190_CPU_START_OFFSET		0x80
10*4882a593Smuzhiyun /* Firmware Local buffer size. 64k */
11*4882a593Smuzhiyun #define	MAX_FIRMWARE_CODE_SIZE			0xFF00
12*4882a593Smuzhiyun 
13*4882a593Smuzhiyun #define	RT_8192S_FIRMWARE_HDR_SIZE		80
14*4882a593Smuzhiyun #define RT_8192S_FIRMWARE_HDR_EXCLUDE_PRI_SIZE	32
15*4882a593Smuzhiyun 
16*4882a593Smuzhiyun /* support till 64 bit bus width OS */
17*4882a593Smuzhiyun #define MAX_DEV_ADDR_SIZE			8
18*4882a593Smuzhiyun #define MAX_FIRMWARE_INFORMATION_SIZE		32
19*4882a593Smuzhiyun #define MAX_802_11_HEADER_LENGTH		(40 + \
20*4882a593Smuzhiyun 						MAX_FIRMWARE_INFORMATION_SIZE)
21*4882a593Smuzhiyun #define ENCRYPTION_MAX_OVERHEAD			128
22*4882a593Smuzhiyun #define MAX_FRAGMENT_COUNT			8
23*4882a593Smuzhiyun #define MAX_TRANSMIT_BUFFER_SIZE		(1600 + \
24*4882a593Smuzhiyun 						(MAX_802_11_HEADER_LENGTH + \
25*4882a593Smuzhiyun 						ENCRYPTION_MAX_OVERHEAD) *\
26*4882a593Smuzhiyun 						MAX_FRAGMENT_COUNT)
27*4882a593Smuzhiyun 
28*4882a593Smuzhiyun #define H2C_TX_CMD_HDR_LEN			8
29*4882a593Smuzhiyun 
30*4882a593Smuzhiyun /* The following DM control code are for Reg0x364, */
31*4882a593Smuzhiyun #define	FW_DIG_ENABLE_CTL			BIT(0)
32*4882a593Smuzhiyun #define	FW_HIGH_PWR_ENABLE_CTL			BIT(1)
33*4882a593Smuzhiyun #define	FW_SS_CTL				BIT(2)
34*4882a593Smuzhiyun #define	FW_RA_INIT_CTL				BIT(3)
35*4882a593Smuzhiyun #define	FW_RA_BG_CTL				BIT(4)
36*4882a593Smuzhiyun #define	FW_RA_N_CTL				BIT(5)
37*4882a593Smuzhiyun #define	FW_PWR_TRK_CTL				BIT(6)
38*4882a593Smuzhiyun #define	FW_IQK_CTL				BIT(7)
39*4882a593Smuzhiyun #define	FW_FA_CTL				BIT(8)
40*4882a593Smuzhiyun #define	FW_DRIVER_CTRL_DM_CTL			BIT(9)
41*4882a593Smuzhiyun #define	FW_PAPE_CTL_BY_SW_HW			BIT(10)
42*4882a593Smuzhiyun #define	FW_DISABLE_ALL_DM			0
43*4882a593Smuzhiyun #define	FW_PWR_TRK_PARAM_CLR			0x0000ffff
44*4882a593Smuzhiyun #define	FW_RA_PARAM_CLR				0xffff0000
45*4882a593Smuzhiyun 
46*4882a593Smuzhiyun enum desc_packet_type {
47*4882a593Smuzhiyun 	DESC_PACKET_TYPE_INIT = 0,
48*4882a593Smuzhiyun 	DESC_PACKET_TYPE_NORMAL = 1,
49*4882a593Smuzhiyun };
50*4882a593Smuzhiyun 
51*4882a593Smuzhiyun /* 8-bytes alignment required */
52*4882a593Smuzhiyun struct fw_priv {
53*4882a593Smuzhiyun 	/* --- long word 0 ---- */
54*4882a593Smuzhiyun 	/* 0x12: CE product, 0x92: IT product */
55*4882a593Smuzhiyun 	u8 signature_0;
56*4882a593Smuzhiyun 	/* 0x87: CE product, 0x81: IT product */
57*4882a593Smuzhiyun 	u8 signature_1;
58*4882a593Smuzhiyun 	/* 0x81: PCI-AP, 01:PCIe, 02: 92S-U,
59*4882a593Smuzhiyun 	 * 0x82: USB-AP, 0x12: 72S-U, 03:SDIO */
60*4882a593Smuzhiyun 	u8 hci_sel;
61*4882a593Smuzhiyun 	/* the same value as reigster value  */
62*4882a593Smuzhiyun 	u8 chip_version;
63*4882a593Smuzhiyun 	/* customer  ID low byte */
64*4882a593Smuzhiyun 	u8 customer_id_0;
65*4882a593Smuzhiyun 	/* customer  ID high byte */
66*4882a593Smuzhiyun 	u8 customer_id_1;
67*4882a593Smuzhiyun 	/* 0x11:  1T1R, 0x12: 1T2R,
68*4882a593Smuzhiyun 	 * 0x92: 1T2R turbo, 0x22: 2T2R */
69*4882a593Smuzhiyun 	u8 rf_config;
70*4882a593Smuzhiyun 	/* 4: 4EP, 6: 6EP, 11: 11EP */
71*4882a593Smuzhiyun 	u8 usb_ep_num;
72*4882a593Smuzhiyun 
73*4882a593Smuzhiyun 	/* --- long word 1 ---- */
74*4882a593Smuzhiyun 	/* regulatory class bit map 0 */
75*4882a593Smuzhiyun 	u8 regulatory_class_0;
76*4882a593Smuzhiyun 	/* regulatory class bit map 1 */
77*4882a593Smuzhiyun 	u8 regulatory_class_1;
78*4882a593Smuzhiyun 	/* regulatory class bit map 2 */
79*4882a593Smuzhiyun 	u8 regulatory_class_2;
80*4882a593Smuzhiyun 	/* regulatory class bit map 3 */
81*4882a593Smuzhiyun 	u8 regulatory_class_3;
82*4882a593Smuzhiyun 	/* 0:SWSI, 1:HWSI, 2:HWPI */
83*4882a593Smuzhiyun 	u8 rfintfs;
84*4882a593Smuzhiyun 	u8 def_nettype;
85*4882a593Smuzhiyun 	u8 rsvd010;
86*4882a593Smuzhiyun 	u8 rsvd011;
87*4882a593Smuzhiyun 
88*4882a593Smuzhiyun 	/* --- long word 2 ---- */
89*4882a593Smuzhiyun 	/* 0x00: normal, 0x03: MACLBK, 0x01: PHYLBK */
90*4882a593Smuzhiyun 	u8 lbk_mode;
91*4882a593Smuzhiyun 	/* 1: for MP use, 0: for normal
92*4882a593Smuzhiyun 	 * driver (to be discussed) */
93*4882a593Smuzhiyun 	u8 mp_mode;
94*4882a593Smuzhiyun 	u8 rsvd020;
95*4882a593Smuzhiyun 	u8 rsvd021;
96*4882a593Smuzhiyun 	u8 rsvd022;
97*4882a593Smuzhiyun 	u8 rsvd023;
98*4882a593Smuzhiyun 	u8 rsvd024;
99*4882a593Smuzhiyun 	u8 rsvd025;
100*4882a593Smuzhiyun 
101*4882a593Smuzhiyun 	/* --- long word 3 ---- */
102*4882a593Smuzhiyun 	/* QoS enable */
103*4882a593Smuzhiyun 	u8 qos_en;
104*4882a593Smuzhiyun 	/* 40MHz BW enable */
105*4882a593Smuzhiyun 	/* 4181 convert AMSDU to AMPDU, 0: disable */
106*4882a593Smuzhiyun 	u8 bw_40mhz_en;
107*4882a593Smuzhiyun 	u8 amsdu2ampdu_en;
108*4882a593Smuzhiyun 	/* 11n AMPDU enable */
109*4882a593Smuzhiyun 	u8 ampdu_en;
110*4882a593Smuzhiyun 	/* FW offloads, 0: driver handles */
111*4882a593Smuzhiyun 	u8 rate_control_offload;
112*4882a593Smuzhiyun 	/* FW offloads, 0: driver handles */
113*4882a593Smuzhiyun 	u8 aggregation_offload;
114*4882a593Smuzhiyun 	u8 rsvd030;
115*4882a593Smuzhiyun 	u8 rsvd031;
116*4882a593Smuzhiyun 
117*4882a593Smuzhiyun 	/* --- long word 4 ---- */
118*4882a593Smuzhiyun 	/* 1. FW offloads, 0: driver handles */
119*4882a593Smuzhiyun 	u8 beacon_offload;
120*4882a593Smuzhiyun 	/* 2. FW offloads, 0: driver handles */
121*4882a593Smuzhiyun 	u8 mlme_offload;
122*4882a593Smuzhiyun 	/* 3. FW offloads, 0: driver handles */
123*4882a593Smuzhiyun 	u8 hwpc_offload;
124*4882a593Smuzhiyun 	/* 4. FW offloads, 0: driver handles */
125*4882a593Smuzhiyun 	u8 tcp_checksum_offload;
126*4882a593Smuzhiyun 	/* 5. FW offloads, 0: driver handles */
127*4882a593Smuzhiyun 	u8 tcp_offload;
128*4882a593Smuzhiyun 	/* 6. FW offloads, 0: driver handles */
129*4882a593Smuzhiyun 	u8 ps_control_offload;
130*4882a593Smuzhiyun 	/* 7. FW offloads, 0: driver handles */
131*4882a593Smuzhiyun 	u8 wwlan_offload;
132*4882a593Smuzhiyun 	u8 rsvd040;
133*4882a593Smuzhiyun 
134*4882a593Smuzhiyun 	/* --- long word 5 ---- */
135*4882a593Smuzhiyun 	/* tcp tx packet length low byte */
136*4882a593Smuzhiyun 	u8 tcp_tx_frame_len_L;
137*4882a593Smuzhiyun 	/* tcp tx packet length high byte */
138*4882a593Smuzhiyun 	u8 tcp_tx_frame_len_H;
139*4882a593Smuzhiyun 	/* tcp rx packet length low byte */
140*4882a593Smuzhiyun 	u8 tcp_rx_frame_len_L;
141*4882a593Smuzhiyun 	/* tcp rx packet length high byte */
142*4882a593Smuzhiyun 	u8 tcp_rx_frame_len_H;
143*4882a593Smuzhiyun 	u8 rsvd050;
144*4882a593Smuzhiyun 	u8 rsvd051;
145*4882a593Smuzhiyun 	u8 rsvd052;
146*4882a593Smuzhiyun 	u8 rsvd053;
147*4882a593Smuzhiyun };
148*4882a593Smuzhiyun 
149*4882a593Smuzhiyun /* 8-byte alinment required */
150*4882a593Smuzhiyun struct fw_hdr {
151*4882a593Smuzhiyun 
152*4882a593Smuzhiyun 	/* --- LONG WORD 0 ---- */
153*4882a593Smuzhiyun 	u16 signature;
154*4882a593Smuzhiyun 	/* 0x8000 ~ 0x8FFF for FPGA version,
155*4882a593Smuzhiyun 	 * 0x0000 ~ 0x7FFF for ASIC version, */
156*4882a593Smuzhiyun 	u16 version;
157*4882a593Smuzhiyun 	/* define the size of boot loader */
158*4882a593Smuzhiyun 	u32 dmem_size;
159*4882a593Smuzhiyun 
160*4882a593Smuzhiyun 
161*4882a593Smuzhiyun 	/* --- LONG WORD 1 ---- */
162*4882a593Smuzhiyun 	/* define the size of FW in IMEM */
163*4882a593Smuzhiyun 	u32 img_imem_size;
164*4882a593Smuzhiyun 	/* define the size of FW in SRAM */
165*4882a593Smuzhiyun 	u32 img_sram_size;
166*4882a593Smuzhiyun 
167*4882a593Smuzhiyun 	/* --- LONG WORD 2 ---- */
168*4882a593Smuzhiyun 	/* define the size of DMEM variable */
169*4882a593Smuzhiyun 	u32 fw_priv_size;
170*4882a593Smuzhiyun 	u32 rsvd0;
171*4882a593Smuzhiyun 
172*4882a593Smuzhiyun 	/* --- LONG WORD 3 ---- */
173*4882a593Smuzhiyun 	u32 rsvd1;
174*4882a593Smuzhiyun 	u32 rsvd2;
175*4882a593Smuzhiyun 
176*4882a593Smuzhiyun 	struct fw_priv fwpriv;
177*4882a593Smuzhiyun 
178*4882a593Smuzhiyun } ;
179*4882a593Smuzhiyun 
180*4882a593Smuzhiyun enum fw_status {
181*4882a593Smuzhiyun 	FW_STATUS_INIT = 0,
182*4882a593Smuzhiyun 	FW_STATUS_LOAD_IMEM = 1,
183*4882a593Smuzhiyun 	FW_STATUS_LOAD_EMEM = 2,
184*4882a593Smuzhiyun 	FW_STATUS_LOAD_DMEM = 3,
185*4882a593Smuzhiyun 	FW_STATUS_READY = 4,
186*4882a593Smuzhiyun };
187*4882a593Smuzhiyun 
188*4882a593Smuzhiyun struct rt_firmware {
189*4882a593Smuzhiyun 	struct fw_hdr *pfwheader;
190*4882a593Smuzhiyun 	enum fw_status fwstatus;
191*4882a593Smuzhiyun 	u16 firmwareversion;
192*4882a593Smuzhiyun 	u8 fw_imem[RTL8190_MAX_FIRMWARE_CODE_SIZE];
193*4882a593Smuzhiyun 	u8 fw_emem[RTL8190_MAX_FIRMWARE_CODE_SIZE];
194*4882a593Smuzhiyun 	u32 fw_imem_len;
195*4882a593Smuzhiyun 	u32 fw_emem_len;
196*4882a593Smuzhiyun 	u8 sz_fw_tmpbuffer[RTL8190_MAX_RAW_FIRMWARE_CODE_SIZE];
197*4882a593Smuzhiyun 	u32 sz_fw_tmpbufferlen;
198*4882a593Smuzhiyun 	u16 cmdpacket_fragthresold;
199*4882a593Smuzhiyun };
200*4882a593Smuzhiyun 
201*4882a593Smuzhiyun struct h2c_set_pwrmode_parm {
202*4882a593Smuzhiyun 	u8 mode;
203*4882a593Smuzhiyun 	u8 flag_low_traffic_en;
204*4882a593Smuzhiyun 	u8 flag_lpnav_en;
205*4882a593Smuzhiyun 	u8 flag_rf_low_snr_en;
206*4882a593Smuzhiyun 	/* 1: dps, 0: 32k */
207*4882a593Smuzhiyun 	u8 flag_dps_en;
208*4882a593Smuzhiyun 	u8 bcn_rx_en;
209*4882a593Smuzhiyun 	u8 bcn_pass_cnt;
210*4882a593Smuzhiyun 	/* beacon TO (ms). ¡§=0¡¨ no limit. */
211*4882a593Smuzhiyun 	u8 bcn_to;
212*4882a593Smuzhiyun 	u16	bcn_itv;
213*4882a593Smuzhiyun 	/* only for VOIP mode. */
214*4882a593Smuzhiyun 	u8 app_itv;
215*4882a593Smuzhiyun 	u8 awake_bcn_itvl;
216*4882a593Smuzhiyun 	u8 smart_ps;
217*4882a593Smuzhiyun 	/* unit: 100 ms */
218*4882a593Smuzhiyun 	u8 bcn_pass_period;
219*4882a593Smuzhiyun };
220*4882a593Smuzhiyun 
221*4882a593Smuzhiyun struct h2c_joinbss_rpt_parm {
222*4882a593Smuzhiyun 	u8 opmode;
223*4882a593Smuzhiyun 	u8 ps_qos_info;
224*4882a593Smuzhiyun 	u8 bssid[6];
225*4882a593Smuzhiyun 	u16 bcnitv;
226*4882a593Smuzhiyun 	u16 aid;
227*4882a593Smuzhiyun } ;
228*4882a593Smuzhiyun 
229*4882a593Smuzhiyun struct h2c_wpa_ptk {
230*4882a593Smuzhiyun 	/* EAPOL-Key Key Confirmation Key (KCK) */
231*4882a593Smuzhiyun 	u8 kck[16];
232*4882a593Smuzhiyun 	/* EAPOL-Key Key Encryption Key (KEK) */
233*4882a593Smuzhiyun 	u8 kek[16];
234*4882a593Smuzhiyun 	/* Temporal Key 1 (TK1) */
235*4882a593Smuzhiyun 	u8 tk1[16];
236*4882a593Smuzhiyun 	union {
237*4882a593Smuzhiyun 		/* Temporal Key 2 (TK2) */
238*4882a593Smuzhiyun 		u8 tk2[16];
239*4882a593Smuzhiyun 		struct {
240*4882a593Smuzhiyun 			u8 tx_mic_key[8];
241*4882a593Smuzhiyun 			u8 rx_mic_key[8];
242*4882a593Smuzhiyun 		} athu;
243*4882a593Smuzhiyun 	} u;
244*4882a593Smuzhiyun };
245*4882a593Smuzhiyun 
246*4882a593Smuzhiyun struct h2c_wpa_two_way_parm {
247*4882a593Smuzhiyun 	/* algorithm TKIP or AES */
248*4882a593Smuzhiyun 	u8 pairwise_en_alg;
249*4882a593Smuzhiyun 	u8 group_en_alg;
250*4882a593Smuzhiyun 	struct h2c_wpa_ptk wpa_ptk_value;
251*4882a593Smuzhiyun } ;
252*4882a593Smuzhiyun 
253*4882a593Smuzhiyun enum h2c_cmd {
254*4882a593Smuzhiyun 	FW_H2C_SETPWRMODE = 0,
255*4882a593Smuzhiyun 	FW_H2C_JOINBSSRPT = 1,
256*4882a593Smuzhiyun 	FW_H2C_WOWLAN_UPDATE_GTK = 2,
257*4882a593Smuzhiyun 	FW_H2C_WOWLAN_UPDATE_IV = 3,
258*4882a593Smuzhiyun 	FW_H2C_WOWLAN_OFFLOAD = 4,
259*4882a593Smuzhiyun };
260*4882a593Smuzhiyun 
261*4882a593Smuzhiyun enum fw_h2c_cmd {
262*4882a593Smuzhiyun 	H2C_READ_MACREG_CMD,				/*0*/
263*4882a593Smuzhiyun 	H2C_WRITE_MACREG_CMD,
264*4882a593Smuzhiyun 	H2C_READBB_CMD,
265*4882a593Smuzhiyun 	H2C_WRITEBB_CMD,
266*4882a593Smuzhiyun 	H2C_READRF_CMD,
267*4882a593Smuzhiyun 	H2C_WRITERF_CMD,				/*5*/
268*4882a593Smuzhiyun 	H2C_READ_EEPROM_CMD,
269*4882a593Smuzhiyun 	H2C_WRITE_EEPROM_CMD,
270*4882a593Smuzhiyun 	H2C_READ_EFUSE_CMD,
271*4882a593Smuzhiyun 	H2C_WRITE_EFUSE_CMD,
272*4882a593Smuzhiyun 	H2C_READ_CAM_CMD,				/*10*/
273*4882a593Smuzhiyun 	H2C_WRITE_CAM_CMD,
274*4882a593Smuzhiyun 	H2C_SETBCNITV_CMD,
275*4882a593Smuzhiyun 	H2C_SETMBIDCFG_CMD,
276*4882a593Smuzhiyun 	H2C_JOINBSS_CMD,
277*4882a593Smuzhiyun 	H2C_DISCONNECT_CMD,				/*15*/
278*4882a593Smuzhiyun 	H2C_CREATEBSS_CMD,
279*4882a593Smuzhiyun 	H2C_SETOPMODE_CMD,
280*4882a593Smuzhiyun 	H2C_SITESURVEY_CMD,
281*4882a593Smuzhiyun 	H2C_SETAUTH_CMD,
282*4882a593Smuzhiyun 	H2C_SETKEY_CMD,					/*20*/
283*4882a593Smuzhiyun 	H2C_SETSTAKEY_CMD,
284*4882a593Smuzhiyun 	H2C_SETASSOCSTA_CMD,
285*4882a593Smuzhiyun 	H2C_DELASSOCSTA_CMD,
286*4882a593Smuzhiyun 	H2C_SETSTAPWRSTATE_CMD,
287*4882a593Smuzhiyun 	H2C_SETBASICRATE_CMD,				/*25*/
288*4882a593Smuzhiyun 	H2C_GETBASICRATE_CMD,
289*4882a593Smuzhiyun 	H2C_SETDATARATE_CMD,
290*4882a593Smuzhiyun 	H2C_GETDATARATE_CMD,
291*4882a593Smuzhiyun 	H2C_SETPHYINFO_CMD,
292*4882a593Smuzhiyun 	H2C_GETPHYINFO_CMD,				/*30*/
293*4882a593Smuzhiyun 	H2C_SETPHY_CMD,
294*4882a593Smuzhiyun 	H2C_GETPHY_CMD,
295*4882a593Smuzhiyun 	H2C_READRSSI_CMD,
296*4882a593Smuzhiyun 	H2C_READGAIN_CMD,
297*4882a593Smuzhiyun 	H2C_SETATIM_CMD,				/*35*/
298*4882a593Smuzhiyun 	H2C_SETPWRMODE_CMD,
299*4882a593Smuzhiyun 	H2C_JOINBSSRPT_CMD,
300*4882a593Smuzhiyun 	H2C_SETRATABLE_CMD,
301*4882a593Smuzhiyun 	H2C_GETRATABLE_CMD,
302*4882a593Smuzhiyun 	H2C_GETCCXREPORT_CMD,				/*40*/
303*4882a593Smuzhiyun 	H2C_GETDTMREPORT_CMD,
304*4882a593Smuzhiyun 	H2C_GETTXRATESTATICS_CMD,
305*4882a593Smuzhiyun 	H2C_SETUSBSUSPEND_CMD,
306*4882a593Smuzhiyun 	H2C_SETH2CLBK_CMD,
307*4882a593Smuzhiyun 	H2C_TMP1,					/*45*/
308*4882a593Smuzhiyun 	H2C_WOWLAN_UPDATE_GTK_CMD,
309*4882a593Smuzhiyun 	H2C_WOWLAN_FW_OFFLOAD,
310*4882a593Smuzhiyun 	H2C_TMP2,
311*4882a593Smuzhiyun 	H2C_TMP3,
312*4882a593Smuzhiyun 	H2C_WOWLAN_UPDATE_IV_CMD,			/*50*/
313*4882a593Smuzhiyun 	H2C_TMP4,
314*4882a593Smuzhiyun };
315*4882a593Smuzhiyun 
316*4882a593Smuzhiyun /* The following macros are used for FW
317*4882a593Smuzhiyun  * CMD map and parameter updated. */
318*4882a593Smuzhiyun #define FW_CMD_IO_CLR(rtlpriv, _bit)				\
319*4882a593Smuzhiyun 	do {							\
320*4882a593Smuzhiyun 		udelay(1000);					\
321*4882a593Smuzhiyun 		rtlpriv->rtlhal.fwcmd_iomap &= (~_bit);		\
322*4882a593Smuzhiyun 	} while (0)
323*4882a593Smuzhiyun 
324*4882a593Smuzhiyun #define FW_CMD_IO_UPDATE(rtlpriv, _val)				\
325*4882a593Smuzhiyun 	rtlpriv->rtlhal.fwcmd_iomap = _val;
326*4882a593Smuzhiyun 
327*4882a593Smuzhiyun #define FW_CMD_IO_SET(rtlpriv, _val)				\
328*4882a593Smuzhiyun 	do {							\
329*4882a593Smuzhiyun 		rtl_write_word(rtlpriv, LBUS_MON_ADDR, (u16)_val);	\
330*4882a593Smuzhiyun 		FW_CMD_IO_UPDATE(rtlpriv, _val);		\
331*4882a593Smuzhiyun 	} while (0)
332*4882a593Smuzhiyun 
333*4882a593Smuzhiyun #define FW_CMD_PARA_SET(rtlpriv, _val)				\
334*4882a593Smuzhiyun 	do {							\
335*4882a593Smuzhiyun 		rtl_write_dword(rtlpriv, LBUS_ADDR_MASK, _val);	\
336*4882a593Smuzhiyun 		rtlpriv->rtlhal.fwcmd_ioparam = _val;		\
337*4882a593Smuzhiyun 	} while (0)
338*4882a593Smuzhiyun 
339*4882a593Smuzhiyun #define FW_CMD_IO_QUERY(rtlpriv)				\
340*4882a593Smuzhiyun 	(u16)(rtlpriv->rtlhal.fwcmd_iomap)
341*4882a593Smuzhiyun #define FW_CMD_IO_PARA_QUERY(rtlpriv)				\
342*4882a593Smuzhiyun 	((u32)(rtlpriv->rtlhal.fwcmd_ioparam))
343*4882a593Smuzhiyun 
344*4882a593Smuzhiyun int rtl92s_download_fw(struct ieee80211_hw *hw);
345*4882a593Smuzhiyun void rtl92s_set_fw_pwrmode_cmd(struct ieee80211_hw *hw, u8 mode);
346*4882a593Smuzhiyun void rtl92s_set_fw_joinbss_report_cmd(struct ieee80211_hw *hw,
347*4882a593Smuzhiyun 				      u8 mstatus, u8 ps_qosinfo);
348*4882a593Smuzhiyun 
349*4882a593Smuzhiyun #endif
350*4882a593Smuzhiyun 
351