162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci/* Copyright(c) 2009-2012  Realtek Corporation.*/
362306a36Sopenharmony_ci
462306a36Sopenharmony_ci#ifndef __REALTEK_FIRMWARE92S_H__
562306a36Sopenharmony_ci#define __REALTEK_FIRMWARE92S_H__
662306a36Sopenharmony_ci
762306a36Sopenharmony_ci#define RTL8190_MAX_FIRMWARE_CODE_SIZE		64000
862306a36Sopenharmony_ci#define RTL8190_MAX_RAW_FIRMWARE_CODE_SIZE	90000
962306a36Sopenharmony_ci#define RTL8190_CPU_START_OFFSET		0x80
1062306a36Sopenharmony_ci/* Firmware Local buffer size. 64k */
1162306a36Sopenharmony_ci#define	MAX_FIRMWARE_CODE_SIZE			0xFF00
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ci#define	RT_8192S_FIRMWARE_HDR_SIZE		80
1462306a36Sopenharmony_ci#define RT_8192S_FIRMWARE_HDR_EXCLUDE_PRI_SIZE	32
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_ci/* support till 64 bit bus width OS */
1762306a36Sopenharmony_ci#define MAX_DEV_ADDR_SIZE			8
1862306a36Sopenharmony_ci#define MAX_FIRMWARE_INFORMATION_SIZE		32
1962306a36Sopenharmony_ci#define MAX_802_11_HEADER_LENGTH		(40 + \
2062306a36Sopenharmony_ci						MAX_FIRMWARE_INFORMATION_SIZE)
2162306a36Sopenharmony_ci#define ENCRYPTION_MAX_OVERHEAD			128
2262306a36Sopenharmony_ci#define MAX_FRAGMENT_COUNT			8
2362306a36Sopenharmony_ci#define MAX_TRANSMIT_BUFFER_SIZE		(1600 + \
2462306a36Sopenharmony_ci						(MAX_802_11_HEADER_LENGTH + \
2562306a36Sopenharmony_ci						ENCRYPTION_MAX_OVERHEAD) *\
2662306a36Sopenharmony_ci						MAX_FRAGMENT_COUNT)
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ci#define H2C_TX_CMD_HDR_LEN			8
2962306a36Sopenharmony_ci
3062306a36Sopenharmony_ci/* The following DM control code are for Reg0x364, */
3162306a36Sopenharmony_ci#define	FW_DIG_ENABLE_CTL			BIT(0)
3262306a36Sopenharmony_ci#define	FW_HIGH_PWR_ENABLE_CTL			BIT(1)
3362306a36Sopenharmony_ci#define	FW_SS_CTL				BIT(2)
3462306a36Sopenharmony_ci#define	FW_RA_INIT_CTL				BIT(3)
3562306a36Sopenharmony_ci#define	FW_RA_BG_CTL				BIT(4)
3662306a36Sopenharmony_ci#define	FW_RA_N_CTL				BIT(5)
3762306a36Sopenharmony_ci#define	FW_PWR_TRK_CTL				BIT(6)
3862306a36Sopenharmony_ci#define	FW_IQK_CTL				BIT(7)
3962306a36Sopenharmony_ci#define	FW_FA_CTL				BIT(8)
4062306a36Sopenharmony_ci#define	FW_DRIVER_CTRL_DM_CTL			BIT(9)
4162306a36Sopenharmony_ci#define	FW_PAPE_CTL_BY_SW_HW			BIT(10)
4262306a36Sopenharmony_ci#define	FW_DISABLE_ALL_DM			0
4362306a36Sopenharmony_ci#define	FW_PWR_TRK_PARAM_CLR			0x0000ffff
4462306a36Sopenharmony_ci#define	FW_RA_PARAM_CLR				0xffff0000
4562306a36Sopenharmony_ci
4662306a36Sopenharmony_cienum desc_packet_type {
4762306a36Sopenharmony_ci	DESC_PACKET_TYPE_INIT = 0,
4862306a36Sopenharmony_ci	DESC_PACKET_TYPE_NORMAL = 1,
4962306a36Sopenharmony_ci};
5062306a36Sopenharmony_ci
5162306a36Sopenharmony_ci/* 8-bytes alignment required */
5262306a36Sopenharmony_cistruct fw_priv {
5362306a36Sopenharmony_ci	/* --- long word 0 ---- */
5462306a36Sopenharmony_ci	/* 0x12: CE product, 0x92: IT product */
5562306a36Sopenharmony_ci	u8 signature_0;
5662306a36Sopenharmony_ci	/* 0x87: CE product, 0x81: IT product */
5762306a36Sopenharmony_ci	u8 signature_1;
5862306a36Sopenharmony_ci	/* 0x81: PCI-AP, 01:PCIe, 02: 92S-U,
5962306a36Sopenharmony_ci	 * 0x82: USB-AP, 0x12: 72S-U, 03:SDIO */
6062306a36Sopenharmony_ci	u8 hci_sel;
6162306a36Sopenharmony_ci	/* the same value as reigster value  */
6262306a36Sopenharmony_ci	u8 chip_version;
6362306a36Sopenharmony_ci	/* customer  ID low byte */
6462306a36Sopenharmony_ci	u8 customer_id_0;
6562306a36Sopenharmony_ci	/* customer  ID high byte */
6662306a36Sopenharmony_ci	u8 customer_id_1;
6762306a36Sopenharmony_ci	/* 0x11:  1T1R, 0x12: 1T2R,
6862306a36Sopenharmony_ci	 * 0x92: 1T2R turbo, 0x22: 2T2R */
6962306a36Sopenharmony_ci	u8 rf_config;
7062306a36Sopenharmony_ci	/* 4: 4EP, 6: 6EP, 11: 11EP */
7162306a36Sopenharmony_ci	u8 usb_ep_num;
7262306a36Sopenharmony_ci
7362306a36Sopenharmony_ci	/* --- long word 1 ---- */
7462306a36Sopenharmony_ci	/* regulatory class bit map 0 */
7562306a36Sopenharmony_ci	u8 regulatory_class_0;
7662306a36Sopenharmony_ci	/* regulatory class bit map 1 */
7762306a36Sopenharmony_ci	u8 regulatory_class_1;
7862306a36Sopenharmony_ci	/* regulatory class bit map 2 */
7962306a36Sopenharmony_ci	u8 regulatory_class_2;
8062306a36Sopenharmony_ci	/* regulatory class bit map 3 */
8162306a36Sopenharmony_ci	u8 regulatory_class_3;
8262306a36Sopenharmony_ci	/* 0:SWSI, 1:HWSI, 2:HWPI */
8362306a36Sopenharmony_ci	u8 rfintfs;
8462306a36Sopenharmony_ci	u8 def_nettype;
8562306a36Sopenharmony_ci	u8 rsvd010;
8662306a36Sopenharmony_ci	u8 rsvd011;
8762306a36Sopenharmony_ci
8862306a36Sopenharmony_ci	/* --- long word 2 ---- */
8962306a36Sopenharmony_ci	/* 0x00: normal, 0x03: MACLBK, 0x01: PHYLBK */
9062306a36Sopenharmony_ci	u8 lbk_mode;
9162306a36Sopenharmony_ci	/* 1: for MP use, 0: for normal
9262306a36Sopenharmony_ci	 * driver (to be discussed) */
9362306a36Sopenharmony_ci	u8 mp_mode;
9462306a36Sopenharmony_ci	u8 rsvd020;
9562306a36Sopenharmony_ci	u8 rsvd021;
9662306a36Sopenharmony_ci	u8 rsvd022;
9762306a36Sopenharmony_ci	u8 rsvd023;
9862306a36Sopenharmony_ci	u8 rsvd024;
9962306a36Sopenharmony_ci	u8 rsvd025;
10062306a36Sopenharmony_ci
10162306a36Sopenharmony_ci	/* --- long word 3 ---- */
10262306a36Sopenharmony_ci	/* QoS enable */
10362306a36Sopenharmony_ci	u8 qos_en;
10462306a36Sopenharmony_ci	/* 40MHz BW enable */
10562306a36Sopenharmony_ci	/* 4181 convert AMSDU to AMPDU, 0: disable */
10662306a36Sopenharmony_ci	u8 bw_40mhz_en;
10762306a36Sopenharmony_ci	u8 amsdu2ampdu_en;
10862306a36Sopenharmony_ci	/* 11n AMPDU enable */
10962306a36Sopenharmony_ci	u8 ampdu_en;
11062306a36Sopenharmony_ci	/* FW offloads, 0: driver handles */
11162306a36Sopenharmony_ci	u8 rate_control_offload;
11262306a36Sopenharmony_ci	/* FW offloads, 0: driver handles */
11362306a36Sopenharmony_ci	u8 aggregation_offload;
11462306a36Sopenharmony_ci	u8 rsvd030;
11562306a36Sopenharmony_ci	u8 rsvd031;
11662306a36Sopenharmony_ci
11762306a36Sopenharmony_ci	/* --- long word 4 ---- */
11862306a36Sopenharmony_ci	/* 1. FW offloads, 0: driver handles */
11962306a36Sopenharmony_ci	u8 beacon_offload;
12062306a36Sopenharmony_ci	/* 2. FW offloads, 0: driver handles */
12162306a36Sopenharmony_ci	u8 mlme_offload;
12262306a36Sopenharmony_ci	/* 3. FW offloads, 0: driver handles */
12362306a36Sopenharmony_ci	u8 hwpc_offload;
12462306a36Sopenharmony_ci	/* 4. FW offloads, 0: driver handles */
12562306a36Sopenharmony_ci	u8 tcp_checksum_offload;
12662306a36Sopenharmony_ci	/* 5. FW offloads, 0: driver handles */
12762306a36Sopenharmony_ci	u8 tcp_offload;
12862306a36Sopenharmony_ci	/* 6. FW offloads, 0: driver handles */
12962306a36Sopenharmony_ci	u8 ps_control_offload;
13062306a36Sopenharmony_ci	/* 7. FW offloads, 0: driver handles */
13162306a36Sopenharmony_ci	u8 wwlan_offload;
13262306a36Sopenharmony_ci	u8 rsvd040;
13362306a36Sopenharmony_ci
13462306a36Sopenharmony_ci	/* --- long word 5 ---- */
13562306a36Sopenharmony_ci	/* tcp tx packet length low byte */
13662306a36Sopenharmony_ci	u8 tcp_tx_frame_len_L;
13762306a36Sopenharmony_ci	/* tcp tx packet length high byte */
13862306a36Sopenharmony_ci	u8 tcp_tx_frame_len_H;
13962306a36Sopenharmony_ci	/* tcp rx packet length low byte */
14062306a36Sopenharmony_ci	u8 tcp_rx_frame_len_L;
14162306a36Sopenharmony_ci	/* tcp rx packet length high byte */
14262306a36Sopenharmony_ci	u8 tcp_rx_frame_len_H;
14362306a36Sopenharmony_ci	u8 rsvd050;
14462306a36Sopenharmony_ci	u8 rsvd051;
14562306a36Sopenharmony_ci	u8 rsvd052;
14662306a36Sopenharmony_ci	u8 rsvd053;
14762306a36Sopenharmony_ci};
14862306a36Sopenharmony_ci
14962306a36Sopenharmony_ci/* 8-byte alinment required */
15062306a36Sopenharmony_cistruct fw_hdr {
15162306a36Sopenharmony_ci
15262306a36Sopenharmony_ci	/* --- LONG WORD 0 ---- */
15362306a36Sopenharmony_ci	u16 signature;
15462306a36Sopenharmony_ci	/* 0x8000 ~ 0x8FFF for FPGA version,
15562306a36Sopenharmony_ci	 * 0x0000 ~ 0x7FFF for ASIC version, */
15662306a36Sopenharmony_ci	u16 version;
15762306a36Sopenharmony_ci	/* define the size of boot loader */
15862306a36Sopenharmony_ci	u32 dmem_size;
15962306a36Sopenharmony_ci
16062306a36Sopenharmony_ci
16162306a36Sopenharmony_ci	/* --- LONG WORD 1 ---- */
16262306a36Sopenharmony_ci	/* define the size of FW in IMEM */
16362306a36Sopenharmony_ci	u32 img_imem_size;
16462306a36Sopenharmony_ci	/* define the size of FW in SRAM */
16562306a36Sopenharmony_ci	u32 img_sram_size;
16662306a36Sopenharmony_ci
16762306a36Sopenharmony_ci	/* --- LONG WORD 2 ---- */
16862306a36Sopenharmony_ci	/* define the size of DMEM variable */
16962306a36Sopenharmony_ci	u32 fw_priv_size;
17062306a36Sopenharmony_ci	u32 rsvd0;
17162306a36Sopenharmony_ci
17262306a36Sopenharmony_ci	/* --- LONG WORD 3 ---- */
17362306a36Sopenharmony_ci	u32 rsvd1;
17462306a36Sopenharmony_ci	u32 rsvd2;
17562306a36Sopenharmony_ci
17662306a36Sopenharmony_ci	struct fw_priv fwpriv;
17762306a36Sopenharmony_ci
17862306a36Sopenharmony_ci} ;
17962306a36Sopenharmony_ci
18062306a36Sopenharmony_cienum fw_status {
18162306a36Sopenharmony_ci	FW_STATUS_INIT = 0,
18262306a36Sopenharmony_ci	FW_STATUS_LOAD_IMEM = 1,
18362306a36Sopenharmony_ci	FW_STATUS_LOAD_EMEM = 2,
18462306a36Sopenharmony_ci	FW_STATUS_LOAD_DMEM = 3,
18562306a36Sopenharmony_ci	FW_STATUS_READY = 4,
18662306a36Sopenharmony_ci};
18762306a36Sopenharmony_ci
18862306a36Sopenharmony_cistruct rt_firmware {
18962306a36Sopenharmony_ci	struct fw_hdr *pfwheader;
19062306a36Sopenharmony_ci	enum fw_status fwstatus;
19162306a36Sopenharmony_ci	u16 firmwareversion;
19262306a36Sopenharmony_ci	u8 fw_imem[RTL8190_MAX_FIRMWARE_CODE_SIZE];
19362306a36Sopenharmony_ci	u8 fw_emem[RTL8190_MAX_FIRMWARE_CODE_SIZE];
19462306a36Sopenharmony_ci	u32 fw_imem_len;
19562306a36Sopenharmony_ci	u32 fw_emem_len;
19662306a36Sopenharmony_ci	u8 sz_fw_tmpbuffer[RTL8190_MAX_RAW_FIRMWARE_CODE_SIZE];
19762306a36Sopenharmony_ci	u32 sz_fw_tmpbufferlen;
19862306a36Sopenharmony_ci	u16 cmdpacket_fragthresold;
19962306a36Sopenharmony_ci};
20062306a36Sopenharmony_ci
20162306a36Sopenharmony_cistruct h2c_set_pwrmode_parm {
20262306a36Sopenharmony_ci	u8 mode;
20362306a36Sopenharmony_ci	u8 flag_low_traffic_en;
20462306a36Sopenharmony_ci	u8 flag_lpnav_en;
20562306a36Sopenharmony_ci	u8 flag_rf_low_snr_en;
20662306a36Sopenharmony_ci	/* 1: dps, 0: 32k */
20762306a36Sopenharmony_ci	u8 flag_dps_en;
20862306a36Sopenharmony_ci	u8 bcn_rx_en;
20962306a36Sopenharmony_ci	u8 bcn_pass_cnt;
21062306a36Sopenharmony_ci	/* beacon TO (ms). ¡§=0¡¨ no limit. */
21162306a36Sopenharmony_ci	u8 bcn_to;
21262306a36Sopenharmony_ci	u16	bcn_itv;
21362306a36Sopenharmony_ci	/* only for VOIP mode. */
21462306a36Sopenharmony_ci	u8 app_itv;
21562306a36Sopenharmony_ci	u8 awake_bcn_itvl;
21662306a36Sopenharmony_ci	u8 smart_ps;
21762306a36Sopenharmony_ci	/* unit: 100 ms */
21862306a36Sopenharmony_ci	u8 bcn_pass_period;
21962306a36Sopenharmony_ci};
22062306a36Sopenharmony_ci
22162306a36Sopenharmony_cistruct h2c_joinbss_rpt_parm {
22262306a36Sopenharmony_ci	u8 opmode;
22362306a36Sopenharmony_ci	u8 ps_qos_info;
22462306a36Sopenharmony_ci	u8 bssid[6];
22562306a36Sopenharmony_ci	u16 bcnitv;
22662306a36Sopenharmony_ci	u16 aid;
22762306a36Sopenharmony_ci} ;
22862306a36Sopenharmony_ci
22962306a36Sopenharmony_cistruct h2c_wpa_ptk {
23062306a36Sopenharmony_ci	/* EAPOL-Key Key Confirmation Key (KCK) */
23162306a36Sopenharmony_ci	u8 kck[16];
23262306a36Sopenharmony_ci	/* EAPOL-Key Key Encryption Key (KEK) */
23362306a36Sopenharmony_ci	u8 kek[16];
23462306a36Sopenharmony_ci	/* Temporal Key 1 (TK1) */
23562306a36Sopenharmony_ci	u8 tk1[16];
23662306a36Sopenharmony_ci	union {
23762306a36Sopenharmony_ci		/* Temporal Key 2 (TK2) */
23862306a36Sopenharmony_ci		u8 tk2[16];
23962306a36Sopenharmony_ci		struct {
24062306a36Sopenharmony_ci			u8 tx_mic_key[8];
24162306a36Sopenharmony_ci			u8 rx_mic_key[8];
24262306a36Sopenharmony_ci		} athu;
24362306a36Sopenharmony_ci	} u;
24462306a36Sopenharmony_ci};
24562306a36Sopenharmony_ci
24662306a36Sopenharmony_cistruct h2c_wpa_two_way_parm {
24762306a36Sopenharmony_ci	/* algorithm TKIP or AES */
24862306a36Sopenharmony_ci	u8 pairwise_en_alg;
24962306a36Sopenharmony_ci	u8 group_en_alg;
25062306a36Sopenharmony_ci	struct h2c_wpa_ptk wpa_ptk_value;
25162306a36Sopenharmony_ci} ;
25262306a36Sopenharmony_ci
25362306a36Sopenharmony_cienum h2c_cmd {
25462306a36Sopenharmony_ci	FW_H2C_SETPWRMODE = 0,
25562306a36Sopenharmony_ci	FW_H2C_JOINBSSRPT = 1,
25662306a36Sopenharmony_ci	FW_H2C_WOWLAN_UPDATE_GTK = 2,
25762306a36Sopenharmony_ci	FW_H2C_WOWLAN_UPDATE_IV = 3,
25862306a36Sopenharmony_ci	FW_H2C_WOWLAN_OFFLOAD = 4,
25962306a36Sopenharmony_ci};
26062306a36Sopenharmony_ci
26162306a36Sopenharmony_cienum fw_h2c_cmd {
26262306a36Sopenharmony_ci	H2C_READ_MACREG_CMD,				/*0*/
26362306a36Sopenharmony_ci	H2C_WRITE_MACREG_CMD,
26462306a36Sopenharmony_ci	H2C_READBB_CMD,
26562306a36Sopenharmony_ci	H2C_WRITEBB_CMD,
26662306a36Sopenharmony_ci	H2C_READRF_CMD,
26762306a36Sopenharmony_ci	H2C_WRITERF_CMD,				/*5*/
26862306a36Sopenharmony_ci	H2C_READ_EEPROM_CMD,
26962306a36Sopenharmony_ci	H2C_WRITE_EEPROM_CMD,
27062306a36Sopenharmony_ci	H2C_READ_EFUSE_CMD,
27162306a36Sopenharmony_ci	H2C_WRITE_EFUSE_CMD,
27262306a36Sopenharmony_ci	H2C_READ_CAM_CMD,				/*10*/
27362306a36Sopenharmony_ci	H2C_WRITE_CAM_CMD,
27462306a36Sopenharmony_ci	H2C_SETBCNITV_CMD,
27562306a36Sopenharmony_ci	H2C_SETMBIDCFG_CMD,
27662306a36Sopenharmony_ci	H2C_JOINBSS_CMD,
27762306a36Sopenharmony_ci	H2C_DISCONNECT_CMD,				/*15*/
27862306a36Sopenharmony_ci	H2C_CREATEBSS_CMD,
27962306a36Sopenharmony_ci	H2C_SETOPMODE_CMD,
28062306a36Sopenharmony_ci	H2C_SITESURVEY_CMD,
28162306a36Sopenharmony_ci	H2C_SETAUTH_CMD,
28262306a36Sopenharmony_ci	H2C_SETKEY_CMD,					/*20*/
28362306a36Sopenharmony_ci	H2C_SETSTAKEY_CMD,
28462306a36Sopenharmony_ci	H2C_SETASSOCSTA_CMD,
28562306a36Sopenharmony_ci	H2C_DELASSOCSTA_CMD,
28662306a36Sopenharmony_ci	H2C_SETSTAPWRSTATE_CMD,
28762306a36Sopenharmony_ci	H2C_SETBASICRATE_CMD,				/*25*/
28862306a36Sopenharmony_ci	H2C_GETBASICRATE_CMD,
28962306a36Sopenharmony_ci	H2C_SETDATARATE_CMD,
29062306a36Sopenharmony_ci	H2C_GETDATARATE_CMD,
29162306a36Sopenharmony_ci	H2C_SETPHYINFO_CMD,
29262306a36Sopenharmony_ci	H2C_GETPHYINFO_CMD,				/*30*/
29362306a36Sopenharmony_ci	H2C_SETPHY_CMD,
29462306a36Sopenharmony_ci	H2C_GETPHY_CMD,
29562306a36Sopenharmony_ci	H2C_READRSSI_CMD,
29662306a36Sopenharmony_ci	H2C_READGAIN_CMD,
29762306a36Sopenharmony_ci	H2C_SETATIM_CMD,				/*35*/
29862306a36Sopenharmony_ci	H2C_SETPWRMODE_CMD,
29962306a36Sopenharmony_ci	H2C_JOINBSSRPT_CMD,
30062306a36Sopenharmony_ci	H2C_SETRATABLE_CMD,
30162306a36Sopenharmony_ci	H2C_GETRATABLE_CMD,
30262306a36Sopenharmony_ci	H2C_GETCCXREPORT_CMD,				/*40*/
30362306a36Sopenharmony_ci	H2C_GETDTMREPORT_CMD,
30462306a36Sopenharmony_ci	H2C_GETTXRATESTATICS_CMD,
30562306a36Sopenharmony_ci	H2C_SETUSBSUSPEND_CMD,
30662306a36Sopenharmony_ci	H2C_SETH2CLBK_CMD,
30762306a36Sopenharmony_ci	H2C_TMP1,					/*45*/
30862306a36Sopenharmony_ci	H2C_WOWLAN_UPDATE_GTK_CMD,
30962306a36Sopenharmony_ci	H2C_WOWLAN_FW_OFFLOAD,
31062306a36Sopenharmony_ci	H2C_TMP2,
31162306a36Sopenharmony_ci	H2C_TMP3,
31262306a36Sopenharmony_ci	H2C_WOWLAN_UPDATE_IV_CMD,			/*50*/
31362306a36Sopenharmony_ci	H2C_TMP4,
31462306a36Sopenharmony_ci};
31562306a36Sopenharmony_ci
31662306a36Sopenharmony_ci/* The following macros are used for FW
31762306a36Sopenharmony_ci * CMD map and parameter updated. */
31862306a36Sopenharmony_ci#define FW_CMD_IO_CLR(rtlpriv, _bit)				\
31962306a36Sopenharmony_ci	do {							\
32062306a36Sopenharmony_ci		udelay(1000);					\
32162306a36Sopenharmony_ci		rtlpriv->rtlhal.fwcmd_iomap &= (~_bit);		\
32262306a36Sopenharmony_ci	} while (0)
32362306a36Sopenharmony_ci
32462306a36Sopenharmony_ci#define FW_CMD_IO_UPDATE(rtlpriv, _val)				\
32562306a36Sopenharmony_ci	rtlpriv->rtlhal.fwcmd_iomap = _val;
32662306a36Sopenharmony_ci
32762306a36Sopenharmony_ci#define FW_CMD_IO_SET(rtlpriv, _val)				\
32862306a36Sopenharmony_ci	do {							\
32962306a36Sopenharmony_ci		rtl_write_word(rtlpriv, LBUS_MON_ADDR, (u16)_val);	\
33062306a36Sopenharmony_ci		FW_CMD_IO_UPDATE(rtlpriv, _val);		\
33162306a36Sopenharmony_ci	} while (0)
33262306a36Sopenharmony_ci
33362306a36Sopenharmony_ci#define FW_CMD_PARA_SET(rtlpriv, _val)				\
33462306a36Sopenharmony_ci	do {							\
33562306a36Sopenharmony_ci		rtl_write_dword(rtlpriv, LBUS_ADDR_MASK, _val);	\
33662306a36Sopenharmony_ci		rtlpriv->rtlhal.fwcmd_ioparam = _val;		\
33762306a36Sopenharmony_ci	} while (0)
33862306a36Sopenharmony_ci
33962306a36Sopenharmony_ci#define FW_CMD_IO_QUERY(rtlpriv)				\
34062306a36Sopenharmony_ci	(u16)(rtlpriv->rtlhal.fwcmd_iomap)
34162306a36Sopenharmony_ci#define FW_CMD_IO_PARA_QUERY(rtlpriv)				\
34262306a36Sopenharmony_ci	((u32)(rtlpriv->rtlhal.fwcmd_ioparam))
34362306a36Sopenharmony_ci
34462306a36Sopenharmony_ciint rtl92s_download_fw(struct ieee80211_hw *hw);
34562306a36Sopenharmony_civoid rtl92s_set_fw_pwrmode_cmd(struct ieee80211_hw *hw, u8 mode);
34662306a36Sopenharmony_civoid rtl92s_set_fw_joinbss_report_cmd(struct ieee80211_hw *hw,
34762306a36Sopenharmony_ci				      u8 mstatus, u8 ps_qosinfo);
34862306a36Sopenharmony_ci
34962306a36Sopenharmony_ci#endif
35062306a36Sopenharmony_ci
351