xref: /freebsd/sys/contrib/dev/mediatek/mt76/mt7925/mcu.h (revision 8ba4d145d351db26e07695b8e90697398c5dfec2)
1*8ba4d145SBjoern A. Zeeb /* SPDX-License-Identifier: ISC */
2*8ba4d145SBjoern A. Zeeb /* Copyright (C) 2023 MediaTek Inc. */
3*8ba4d145SBjoern A. Zeeb 
4*8ba4d145SBjoern A. Zeeb #ifndef __MT7925_MCU_H
5*8ba4d145SBjoern A. Zeeb #define __MT7925_MCU_H
6*8ba4d145SBjoern A. Zeeb 
7*8ba4d145SBjoern A. Zeeb #include "../mt76_connac_mcu.h"
8*8ba4d145SBjoern A. Zeeb 
9*8ba4d145SBjoern A. Zeeb /* ext event table */
10*8ba4d145SBjoern A. Zeeb enum {
11*8ba4d145SBjoern A. Zeeb 	MCU_EXT_EVENT_RATE_REPORT = 0x87,
12*8ba4d145SBjoern A. Zeeb };
13*8ba4d145SBjoern A. Zeeb 
14*8ba4d145SBjoern A. Zeeb struct mt7925_mcu_eeprom_info {
15*8ba4d145SBjoern A. Zeeb 	__le32 addr;
16*8ba4d145SBjoern A. Zeeb 	__le32 valid;
17*8ba4d145SBjoern A. Zeeb 	u8 data[MT7925_EEPROM_BLOCK_SIZE];
18*8ba4d145SBjoern A. Zeeb } __packed;
19*8ba4d145SBjoern A. Zeeb 
20*8ba4d145SBjoern A. Zeeb #define MT_RA_RATE_NSS			GENMASK(8, 6)
21*8ba4d145SBjoern A. Zeeb #define MT_RA_RATE_MCS			GENMASK(3, 0)
22*8ba4d145SBjoern A. Zeeb #define MT_RA_RATE_TX_MODE		GENMASK(12, 9)
23*8ba4d145SBjoern A. Zeeb #define MT_RA_RATE_DCM_EN		BIT(4)
24*8ba4d145SBjoern A. Zeeb #define MT_RA_RATE_BW			GENMASK(14, 13)
25*8ba4d145SBjoern A. Zeeb 
26*8ba4d145SBjoern A. Zeeb struct mt7925_mcu_rxd {
27*8ba4d145SBjoern A. Zeeb 	__le32 rxd[8];
28*8ba4d145SBjoern A. Zeeb 
29*8ba4d145SBjoern A. Zeeb 	__le16 len;
30*8ba4d145SBjoern A. Zeeb 	__le16 pkt_type_id;
31*8ba4d145SBjoern A. Zeeb 
32*8ba4d145SBjoern A. Zeeb 	u8 eid;
33*8ba4d145SBjoern A. Zeeb 	u8 seq;
34*8ba4d145SBjoern A. Zeeb 	u8 option;
35*8ba4d145SBjoern A. Zeeb 	u8 __rsv;
36*8ba4d145SBjoern A. Zeeb 
37*8ba4d145SBjoern A. Zeeb 	u8 ext_eid;
38*8ba4d145SBjoern A. Zeeb 	u8 __rsv1[2];
39*8ba4d145SBjoern A. Zeeb 	u8 s2d_index;
40*8ba4d145SBjoern A. Zeeb 
41*8ba4d145SBjoern A. Zeeb 	u8 tlv[];
42*8ba4d145SBjoern A. Zeeb };
43*8ba4d145SBjoern A. Zeeb 
44*8ba4d145SBjoern A. Zeeb struct mt7925_mcu_uni_event {
45*8ba4d145SBjoern A. Zeeb 	u8 cid;
46*8ba4d145SBjoern A. Zeeb 	u8 pad[3];
47*8ba4d145SBjoern A. Zeeb 	__le32 status; /* 0: success, others: fail */
48*8ba4d145SBjoern A. Zeeb } __packed;
49*8ba4d145SBjoern A. Zeeb 
50*8ba4d145SBjoern A. Zeeb enum {
51*8ba4d145SBjoern A. Zeeb 	MT_EBF = BIT(0),	/* explicit beamforming */
52*8ba4d145SBjoern A. Zeeb 	MT_IBF = BIT(1)		/* implicit beamforming */
53*8ba4d145SBjoern A. Zeeb };
54*8ba4d145SBjoern A. Zeeb 
55*8ba4d145SBjoern A. Zeeb struct mt7925_mcu_reg_event {
56*8ba4d145SBjoern A. Zeeb 	__le32 reg;
57*8ba4d145SBjoern A. Zeeb 	__le32 val;
58*8ba4d145SBjoern A. Zeeb } __packed;
59*8ba4d145SBjoern A. Zeeb 
60*8ba4d145SBjoern A. Zeeb struct mt7925_mcu_ant_id_config {
61*8ba4d145SBjoern A. Zeeb 	u8 ant_id[4];
62*8ba4d145SBjoern A. Zeeb } __packed;
63*8ba4d145SBjoern A. Zeeb 
64*8ba4d145SBjoern A. Zeeb struct mt7925_txpwr_req {
65*8ba4d145SBjoern A. Zeeb 	u8 _rsv[4];
66*8ba4d145SBjoern A. Zeeb 	__le16 tag;
67*8ba4d145SBjoern A. Zeeb 	__le16 len;
68*8ba4d145SBjoern A. Zeeb 
69*8ba4d145SBjoern A. Zeeb 	u8 format_id;
70*8ba4d145SBjoern A. Zeeb 	u8 catg;
71*8ba4d145SBjoern A. Zeeb 	u8 band_idx;
72*8ba4d145SBjoern A. Zeeb 	u8 _rsv1;
73*8ba4d145SBjoern A. Zeeb } __packed;
74*8ba4d145SBjoern A. Zeeb 
75*8ba4d145SBjoern A. Zeeb struct mt7925_txpwr_event {
76*8ba4d145SBjoern A. Zeeb 	u8 rsv[4];
77*8ba4d145SBjoern A. Zeeb 	__le16 tag;
78*8ba4d145SBjoern A. Zeeb 	__le16 len;
79*8ba4d145SBjoern A. Zeeb 
80*8ba4d145SBjoern A. Zeeb 	u8 catg;
81*8ba4d145SBjoern A. Zeeb 	u8 band_idx;
82*8ba4d145SBjoern A. Zeeb 	u8 ch_band;
83*8ba4d145SBjoern A. Zeeb 	u8 format; /* 0:Legacy, 1:HE */
84*8ba4d145SBjoern A. Zeeb 
85*8ba4d145SBjoern A. Zeeb 	/* Rate power info */
86*8ba4d145SBjoern A. Zeeb 	struct mt7925_txpwr txpwr;
87*8ba4d145SBjoern A. Zeeb 
88*8ba4d145SBjoern A. Zeeb 	s8 pwr_max;
89*8ba4d145SBjoern A. Zeeb 	s8 pwr_min;
90*8ba4d145SBjoern A. Zeeb 	u8 rsv1;
91*8ba4d145SBjoern A. Zeeb } __packed;
92*8ba4d145SBjoern A. Zeeb 
93*8ba4d145SBjoern A. Zeeb enum {
94*8ba4d145SBjoern A. Zeeb 	TM_SWITCH_MODE,
95*8ba4d145SBjoern A. Zeeb 	TM_SET_AT_CMD,
96*8ba4d145SBjoern A. Zeeb 	TM_QUERY_AT_CMD,
97*8ba4d145SBjoern A. Zeeb };
98*8ba4d145SBjoern A. Zeeb 
99*8ba4d145SBjoern A. Zeeb enum {
100*8ba4d145SBjoern A. Zeeb 	MT7925_TM_NORMAL,
101*8ba4d145SBjoern A. Zeeb 	MT7925_TM_TESTMODE,
102*8ba4d145SBjoern A. Zeeb 	MT7925_TM_ICAP,
103*8ba4d145SBjoern A. Zeeb 	MT7925_TM_ICAP_OVERLAP,
104*8ba4d145SBjoern A. Zeeb 	MT7925_TM_WIFISPECTRUM,
105*8ba4d145SBjoern A. Zeeb };
106*8ba4d145SBjoern A. Zeeb 
107*8ba4d145SBjoern A. Zeeb struct mt7925_rftest_cmd {
108*8ba4d145SBjoern A. Zeeb 	u8 action;
109*8ba4d145SBjoern A. Zeeb 	u8 rsv[3];
110*8ba4d145SBjoern A. Zeeb 	__le32 param0;
111*8ba4d145SBjoern A. Zeeb 	__le32 param1;
112*8ba4d145SBjoern A. Zeeb } __packed;
113*8ba4d145SBjoern A. Zeeb 
114*8ba4d145SBjoern A. Zeeb struct mt7925_rftest_evt {
115*8ba4d145SBjoern A. Zeeb 	__le32 param0;
116*8ba4d145SBjoern A. Zeeb 	__le32 param1;
117*8ba4d145SBjoern A. Zeeb } __packed;
118*8ba4d145SBjoern A. Zeeb 
119*8ba4d145SBjoern A. Zeeb enum {
120*8ba4d145SBjoern A. Zeeb 	UNI_CHANNEL_SWITCH,
121*8ba4d145SBjoern A. Zeeb 	UNI_CHANNEL_RX_PATH,
122*8ba4d145SBjoern A. Zeeb };
123*8ba4d145SBjoern A. Zeeb 
124*8ba4d145SBjoern A. Zeeb enum {
125*8ba4d145SBjoern A. Zeeb 	UNI_CHIP_CONFIG_CHIP_CFG = 0x2,
126*8ba4d145SBjoern A. Zeeb 	UNI_CHIP_CONFIG_NIC_CAPA = 0x3,
127*8ba4d145SBjoern A. Zeeb };
128*8ba4d145SBjoern A. Zeeb 
129*8ba4d145SBjoern A. Zeeb enum {
130*8ba4d145SBjoern A. Zeeb 	UNI_BAND_CONFIG_RADIO_ENABLE,
131*8ba4d145SBjoern A. Zeeb 	UNI_BAND_CONFIG_RTS_THRESHOLD = 0x08,
132*8ba4d145SBjoern A. Zeeb 	UNI_BAND_CONFIG_SET_MAC80211_RX_FILTER = 0x0C,
133*8ba4d145SBjoern A. Zeeb };
134*8ba4d145SBjoern A. Zeeb 
135*8ba4d145SBjoern A. Zeeb enum {
136*8ba4d145SBjoern A. Zeeb 	UNI_WSYS_CONFIG_FW_LOG_CTRL,
137*8ba4d145SBjoern A. Zeeb 	UNI_WSYS_CONFIG_FW_DBG_CTRL,
138*8ba4d145SBjoern A. Zeeb };
139*8ba4d145SBjoern A. Zeeb 
140*8ba4d145SBjoern A. Zeeb enum {
141*8ba4d145SBjoern A. Zeeb 	UNI_EFUSE_ACCESS = 1,
142*8ba4d145SBjoern A. Zeeb 	UNI_EFUSE_BUFFER_MODE,
143*8ba4d145SBjoern A. Zeeb 	UNI_EFUSE_FREE_BLOCK,
144*8ba4d145SBjoern A. Zeeb 	UNI_EFUSE_BUFFER_RD,
145*8ba4d145SBjoern A. Zeeb };
146*8ba4d145SBjoern A. Zeeb 
147*8ba4d145SBjoern A. Zeeb enum {
148*8ba4d145SBjoern A. Zeeb 	UNI_CMD_ACCESS_REG_BASIC = 0x0,
149*8ba4d145SBjoern A. Zeeb 	UNI_CMD_ACCESS_RF_REG_BASIC,
150*8ba4d145SBjoern A. Zeeb };
151*8ba4d145SBjoern A. Zeeb 
152*8ba4d145SBjoern A. Zeeb enum {
153*8ba4d145SBjoern A. Zeeb 	UNI_MBMC_SETTING,
154*8ba4d145SBjoern A. Zeeb };
155*8ba4d145SBjoern A. Zeeb 
156*8ba4d145SBjoern A. Zeeb enum {
157*8ba4d145SBjoern A. Zeeb 	UNI_EVENT_SCAN_DONE_BASIC = 0,
158*8ba4d145SBjoern A. Zeeb 	UNI_EVENT_SCAN_DONE_CHNLINFO = 2,
159*8ba4d145SBjoern A. Zeeb 	UNI_EVENT_SCAN_DONE_NLO = 3,
160*8ba4d145SBjoern A. Zeeb };
161*8ba4d145SBjoern A. Zeeb 
162*8ba4d145SBjoern A. Zeeb enum connac3_mcu_cipher_type {
163*8ba4d145SBjoern A. Zeeb 	CONNAC3_CIPHER_NONE = 0,
164*8ba4d145SBjoern A. Zeeb 	CONNAC3_CIPHER_WEP40 = 1,
165*8ba4d145SBjoern A. Zeeb 	CONNAC3_CIPHER_TKIP = 2,
166*8ba4d145SBjoern A. Zeeb 	CONNAC3_CIPHER_AES_CCMP = 4,
167*8ba4d145SBjoern A. Zeeb 	CONNAC3_CIPHER_WEP104 = 5,
168*8ba4d145SBjoern A. Zeeb 	CONNAC3_CIPHER_BIP_CMAC_128 = 6,
169*8ba4d145SBjoern A. Zeeb 	CONNAC3_CIPHER_WEP128 = 7,
170*8ba4d145SBjoern A. Zeeb 	CONNAC3_CIPHER_WAPI = 8,
171*8ba4d145SBjoern A. Zeeb 	CONNAC3_CIPHER_CCMP_256 = 10,
172*8ba4d145SBjoern A. Zeeb 	CONNAC3_CIPHER_GCMP = 11,
173*8ba4d145SBjoern A. Zeeb 	CONNAC3_CIPHER_GCMP_256 = 12,
174*8ba4d145SBjoern A. Zeeb };
175*8ba4d145SBjoern A. Zeeb 
176*8ba4d145SBjoern A. Zeeb struct mt7925_mcu_scan_chinfo_event {
177*8ba4d145SBjoern A. Zeeb 	u8 nr_chan;
178*8ba4d145SBjoern A. Zeeb 	u8 alpha2[3];
179*8ba4d145SBjoern A. Zeeb } __packed;
180*8ba4d145SBjoern A. Zeeb 
181*8ba4d145SBjoern A. Zeeb enum {
182*8ba4d145SBjoern A. Zeeb 	UNI_SCAN_REQ = 1,
183*8ba4d145SBjoern A. Zeeb 	UNI_SCAN_CANCEL = 2,
184*8ba4d145SBjoern A. Zeeb 	UNI_SCAN_SCHED_REQ = 3,
185*8ba4d145SBjoern A. Zeeb 	UNI_SCAN_SCHED_ENABLE = 4,
186*8ba4d145SBjoern A. Zeeb 	UNI_SCAN_SSID = 10,
187*8ba4d145SBjoern A. Zeeb 	UNI_SCAN_BSSID,
188*8ba4d145SBjoern A. Zeeb 	UNI_SCAN_CHANNEL,
189*8ba4d145SBjoern A. Zeeb 	UNI_SCAN_IE,
190*8ba4d145SBjoern A. Zeeb 	UNI_SCAN_MISC,
191*8ba4d145SBjoern A. Zeeb 	UNI_SCAN_SSID_MATCH_SETS,
192*8ba4d145SBjoern A. Zeeb };
193*8ba4d145SBjoern A. Zeeb 
194*8ba4d145SBjoern A. Zeeb enum {
195*8ba4d145SBjoern A. Zeeb 	UNI_SNIFFER_ENABLE,
196*8ba4d145SBjoern A. Zeeb 	UNI_SNIFFER_CONFIG,
197*8ba4d145SBjoern A. Zeeb };
198*8ba4d145SBjoern A. Zeeb 
199*8ba4d145SBjoern A. Zeeb struct scan_hdr_tlv {
200*8ba4d145SBjoern A. Zeeb 	/* fixed field */
201*8ba4d145SBjoern A. Zeeb 	u8 seq_num;
202*8ba4d145SBjoern A. Zeeb 	u8 bss_idx;
203*8ba4d145SBjoern A. Zeeb 	u8 pad[2];
204*8ba4d145SBjoern A. Zeeb 	/* tlv */
205*8ba4d145SBjoern A. Zeeb 	u8 data[];
206*8ba4d145SBjoern A. Zeeb } __packed;
207*8ba4d145SBjoern A. Zeeb 
208*8ba4d145SBjoern A. Zeeb struct scan_req_tlv {
209*8ba4d145SBjoern A. Zeeb 	__le16 tag;
210*8ba4d145SBjoern A. Zeeb 	__le16 len;
211*8ba4d145SBjoern A. Zeeb 
212*8ba4d145SBjoern A. Zeeb 	u8 scan_type; /* 0: PASSIVE SCAN
213*8ba4d145SBjoern A. Zeeb 		       * 1: ACTIVE SCAN
214*8ba4d145SBjoern A. Zeeb 		       */
215*8ba4d145SBjoern A. Zeeb 	u8 probe_req_num; /* Number of probe request for each SSID */
216*8ba4d145SBjoern A. Zeeb 	u8 scan_func; /* BIT(0) Enable random MAC scan
217*8ba4d145SBjoern A. Zeeb 		       * BIT(1) Disable DBDC scan type 1~3.
218*8ba4d145SBjoern A. Zeeb 		       * BIT(2) Use DBDC scan type 3 (dedicated one RF to scan).
219*8ba4d145SBjoern A. Zeeb 		       */
220*8ba4d145SBjoern A. Zeeb 	u8 src_mask;
221*8ba4d145SBjoern A. Zeeb 	__le16 channel_min_dwell_time;
222*8ba4d145SBjoern A. Zeeb 	__le16 channel_dwell_time; /* channel Dwell interval */
223*8ba4d145SBjoern A. Zeeb 	__le16 timeout_value;
224*8ba4d145SBjoern A. Zeeb 	__le16 probe_delay_time;
225*8ba4d145SBjoern A. Zeeb 	__le32 func_mask_ext;
226*8ba4d145SBjoern A. Zeeb };
227*8ba4d145SBjoern A. Zeeb 
228*8ba4d145SBjoern A. Zeeb struct scan_ssid_tlv {
229*8ba4d145SBjoern A. Zeeb 	__le16 tag;
230*8ba4d145SBjoern A. Zeeb 	__le16 len;
231*8ba4d145SBjoern A. Zeeb 
232*8ba4d145SBjoern A. Zeeb 	u8 ssid_type; /* BIT(0) wildcard SSID
233*8ba4d145SBjoern A. Zeeb 		       * BIT(1) P2P wildcard SSID
234*8ba4d145SBjoern A. Zeeb 		       * BIT(2) specified SSID + wildcard SSID
235*8ba4d145SBjoern A. Zeeb 		       * BIT(2) + ssid_type_ext BIT(0) specified SSID only
236*8ba4d145SBjoern A. Zeeb 		       */
237*8ba4d145SBjoern A. Zeeb 	u8 ssids_num;
238*8ba4d145SBjoern A. Zeeb 	u8 pad[2];
239*8ba4d145SBjoern A. Zeeb 	struct mt76_connac_mcu_scan_ssid ssids[4];
240*8ba4d145SBjoern A. Zeeb };
241*8ba4d145SBjoern A. Zeeb 
242*8ba4d145SBjoern A. Zeeb struct scan_bssid_tlv {
243*8ba4d145SBjoern A. Zeeb 	__le16 tag;
244*8ba4d145SBjoern A. Zeeb 	__le16 len;
245*8ba4d145SBjoern A. Zeeb 
246*8ba4d145SBjoern A. Zeeb 	u8 bssid[ETH_ALEN];
247*8ba4d145SBjoern A. Zeeb 	u8 match_ch;
248*8ba4d145SBjoern A. Zeeb 	u8 match_ssid_ind;
249*8ba4d145SBjoern A. Zeeb 	u8 rcpi;
250*8ba4d145SBjoern A. Zeeb 	u8 pad[3];
251*8ba4d145SBjoern A. Zeeb };
252*8ba4d145SBjoern A. Zeeb 
253*8ba4d145SBjoern A. Zeeb struct scan_chan_info_tlv {
254*8ba4d145SBjoern A. Zeeb 	__le16 tag;
255*8ba4d145SBjoern A. Zeeb 	__le16 len;
256*8ba4d145SBjoern A. Zeeb 
257*8ba4d145SBjoern A. Zeeb 	u8 channel_type; /* 0: Full channels
258*8ba4d145SBjoern A. Zeeb 			  * 1: Only 2.4GHz channels
259*8ba4d145SBjoern A. Zeeb 			  * 2: Only 5GHz channels
260*8ba4d145SBjoern A. Zeeb 			  * 3: P2P social channel only (channel #1, #6 and #11)
261*8ba4d145SBjoern A. Zeeb 			  * 4: Specified channels
262*8ba4d145SBjoern A. Zeeb 			  * Others: Reserved
263*8ba4d145SBjoern A. Zeeb 			  */
264*8ba4d145SBjoern A. Zeeb 	u8 channels_num; /* valid when channel_type is 4 */
265*8ba4d145SBjoern A. Zeeb 	u8 pad[2];
266*8ba4d145SBjoern A. Zeeb 	struct mt76_connac_mcu_scan_channel channels[64];
267*8ba4d145SBjoern A. Zeeb };
268*8ba4d145SBjoern A. Zeeb 
269*8ba4d145SBjoern A. Zeeb struct scan_ie_tlv {
270*8ba4d145SBjoern A. Zeeb 	__le16 tag;
271*8ba4d145SBjoern A. Zeeb 	__le16 len;
272*8ba4d145SBjoern A. Zeeb 
273*8ba4d145SBjoern A. Zeeb 	__le16 ies_len;
274*8ba4d145SBjoern A. Zeeb 	u8 band;
275*8ba4d145SBjoern A. Zeeb 	u8 pad;
276*8ba4d145SBjoern A. Zeeb 	u8 ies[MT76_CONNAC_SCAN_IE_LEN];
277*8ba4d145SBjoern A. Zeeb };
278*8ba4d145SBjoern A. Zeeb 
279*8ba4d145SBjoern A. Zeeb struct scan_misc_tlv {
280*8ba4d145SBjoern A. Zeeb 	__le16 tag;
281*8ba4d145SBjoern A. Zeeb 	__le16 len;
282*8ba4d145SBjoern A. Zeeb 
283*8ba4d145SBjoern A. Zeeb 	u8 random_mac[ETH_ALEN];
284*8ba4d145SBjoern A. Zeeb 	u8 rsv[2];
285*8ba4d145SBjoern A. Zeeb };
286*8ba4d145SBjoern A. Zeeb 
287*8ba4d145SBjoern A. Zeeb struct scan_sched_req {
288*8ba4d145SBjoern A. Zeeb 	__le16 tag;
289*8ba4d145SBjoern A. Zeeb 	__le16 len;
290*8ba4d145SBjoern A. Zeeb 
291*8ba4d145SBjoern A. Zeeb 	u8 version;
292*8ba4d145SBjoern A. Zeeb 	u8 stop_on_match;
293*8ba4d145SBjoern A. Zeeb 	u8 intervals_num;
294*8ba4d145SBjoern A. Zeeb 	u8 scan_func;
295*8ba4d145SBjoern A. Zeeb 	__le16 intervals[MT76_CONNAC_MAX_NUM_SCHED_SCAN_INTERVAL];
296*8ba4d145SBjoern A. Zeeb };
297*8ba4d145SBjoern A. Zeeb 
298*8ba4d145SBjoern A. Zeeb struct scan_sched_ssid_match_sets {
299*8ba4d145SBjoern A. Zeeb 	__le16 tag;
300*8ba4d145SBjoern A. Zeeb 	__le16 len;
301*8ba4d145SBjoern A. Zeeb 
302*8ba4d145SBjoern A. Zeeb 	u8 match_num;
303*8ba4d145SBjoern A. Zeeb 	u8 rsv[3];
304*8ba4d145SBjoern A. Zeeb 
305*8ba4d145SBjoern A. Zeeb 	struct mt76_connac_mcu_scan_match match[MT76_CONNAC_MAX_SCAN_MATCH];
306*8ba4d145SBjoern A. Zeeb };
307*8ba4d145SBjoern A. Zeeb 
308*8ba4d145SBjoern A. Zeeb struct scan_sched_enable {
309*8ba4d145SBjoern A. Zeeb 	__le16 tag;
310*8ba4d145SBjoern A. Zeeb 	__le16 len;
311*8ba4d145SBjoern A. Zeeb 
312*8ba4d145SBjoern A. Zeeb 	u8 active;
313*8ba4d145SBjoern A. Zeeb 	u8 rsv[3];
314*8ba4d145SBjoern A. Zeeb };
315*8ba4d145SBjoern A. Zeeb 
316*8ba4d145SBjoern A. Zeeb struct mbmc_set_req {
317*8ba4d145SBjoern A. Zeeb 	u8 pad[4];
318*8ba4d145SBjoern A. Zeeb 	u8 data[];
319*8ba4d145SBjoern A. Zeeb } __packed;
320*8ba4d145SBjoern A. Zeeb 
321*8ba4d145SBjoern A. Zeeb struct mbmc_conf_tlv {
322*8ba4d145SBjoern A. Zeeb 	__le16 tag;
323*8ba4d145SBjoern A. Zeeb 	__le16 len;
324*8ba4d145SBjoern A. Zeeb 
325*8ba4d145SBjoern A. Zeeb 	u8 mbmc_en;
326*8ba4d145SBjoern A. Zeeb 	u8 band;
327*8ba4d145SBjoern A. Zeeb 	u8 pad[2];
328*8ba4d145SBjoern A. Zeeb } __packed;
329*8ba4d145SBjoern A. Zeeb 
330*8ba4d145SBjoern A. Zeeb struct edca {
331*8ba4d145SBjoern A. Zeeb 	__le16 tag;
332*8ba4d145SBjoern A. Zeeb 	__le16 len;
333*8ba4d145SBjoern A. Zeeb 
334*8ba4d145SBjoern A. Zeeb 	u8 queue;
335*8ba4d145SBjoern A. Zeeb 	u8 set;
336*8ba4d145SBjoern A. Zeeb 	u8 cw_min;
337*8ba4d145SBjoern A. Zeeb 	u8 cw_max;
338*8ba4d145SBjoern A. Zeeb 	__le16 txop;
339*8ba4d145SBjoern A. Zeeb 	u8 aifs;
340*8ba4d145SBjoern A. Zeeb 	u8 __rsv;
341*8ba4d145SBjoern A. Zeeb };
342*8ba4d145SBjoern A. Zeeb 
343*8ba4d145SBjoern A. Zeeb struct bss_req_hdr {
344*8ba4d145SBjoern A. Zeeb 	u8 bss_idx;
345*8ba4d145SBjoern A. Zeeb 	u8 __rsv[3];
346*8ba4d145SBjoern A. Zeeb } __packed;
347*8ba4d145SBjoern A. Zeeb 
348*8ba4d145SBjoern A. Zeeb struct bss_rate_tlv {
349*8ba4d145SBjoern A. Zeeb 	__le16 tag;
350*8ba4d145SBjoern A. Zeeb 	__le16 len;
351*8ba4d145SBjoern A. Zeeb 	u8 __rsv1[2];
352*8ba4d145SBjoern A. Zeeb 	__le16 basic_rate;
353*8ba4d145SBjoern A. Zeeb 	__le16 bc_trans;
354*8ba4d145SBjoern A. Zeeb 	__le16 mc_trans;
355*8ba4d145SBjoern A. Zeeb 	u8 short_preamble;
356*8ba4d145SBjoern A. Zeeb 	u8 bc_fixed_rate;
357*8ba4d145SBjoern A. Zeeb 	u8 mc_fixed_rate;
358*8ba4d145SBjoern A. Zeeb 	u8 __rsv2;
359*8ba4d145SBjoern A. Zeeb } __packed;
360*8ba4d145SBjoern A. Zeeb 
361*8ba4d145SBjoern A. Zeeb struct bss_mld_tlv {
362*8ba4d145SBjoern A. Zeeb 	__le16 tag;
363*8ba4d145SBjoern A. Zeeb 	__le16 len;
364*8ba4d145SBjoern A. Zeeb 	u8 group_mld_id;
365*8ba4d145SBjoern A. Zeeb 	u8 own_mld_id;
366*8ba4d145SBjoern A. Zeeb 	u8 mac_addr[ETH_ALEN];
367*8ba4d145SBjoern A. Zeeb 	u8 remap_idx;
368*8ba4d145SBjoern A. Zeeb 	u8 link_id;
369*8ba4d145SBjoern A. Zeeb 	u8 eml_enable;
370*8ba4d145SBjoern A. Zeeb 	u8 max_link_num;
371*8ba4d145SBjoern A. Zeeb 	u8 hybrid_mode;
372*8ba4d145SBjoern A. Zeeb 	u8 __rsv[3];
373*8ba4d145SBjoern A. Zeeb } __packed;
374*8ba4d145SBjoern A. Zeeb 
375*8ba4d145SBjoern A. Zeeb struct sta_rec_ba_uni {
376*8ba4d145SBjoern A. Zeeb 	__le16 tag;
377*8ba4d145SBjoern A. Zeeb 	__le16 len;
378*8ba4d145SBjoern A. Zeeb 	u8 tid;
379*8ba4d145SBjoern A. Zeeb 	u8 ba_type;
380*8ba4d145SBjoern A. Zeeb 	u8 amsdu;
381*8ba4d145SBjoern A. Zeeb 	u8 ba_en;
382*8ba4d145SBjoern A. Zeeb 	__le16 ssn;
383*8ba4d145SBjoern A. Zeeb 	__le16 winsize;
384*8ba4d145SBjoern A. Zeeb 	u8 ba_rdd_rro;
385*8ba4d145SBjoern A. Zeeb 	u8 __rsv[3];
386*8ba4d145SBjoern A. Zeeb } __packed;
387*8ba4d145SBjoern A. Zeeb 
388*8ba4d145SBjoern A. Zeeb struct sta_rec_eht {
389*8ba4d145SBjoern A. Zeeb 	__le16 tag;
390*8ba4d145SBjoern A. Zeeb 	__le16 len;
391*8ba4d145SBjoern A. Zeeb 	u8 tid_bitmap;
392*8ba4d145SBjoern A. Zeeb 	u8 _rsv;
393*8ba4d145SBjoern A. Zeeb 	__le16 mac_cap;
394*8ba4d145SBjoern A. Zeeb 	__le64 phy_cap;
395*8ba4d145SBjoern A. Zeeb 	__le64 phy_cap_ext;
396*8ba4d145SBjoern A. Zeeb 	u8 mcs_map_bw20[4];
397*8ba4d145SBjoern A. Zeeb 	u8 mcs_map_bw80[3];
398*8ba4d145SBjoern A. Zeeb 	u8 mcs_map_bw160[3];
399*8ba4d145SBjoern A. Zeeb 	u8 mcs_map_bw320[3];
400*8ba4d145SBjoern A. Zeeb 	u8 _rsv2[3];
401*8ba4d145SBjoern A. Zeeb } __packed;
402*8ba4d145SBjoern A. Zeeb 
403*8ba4d145SBjoern A. Zeeb struct sta_rec_sec_uni {
404*8ba4d145SBjoern A. Zeeb 	__le16 tag;
405*8ba4d145SBjoern A. Zeeb 	__le16 len;
406*8ba4d145SBjoern A. Zeeb 	u8 add;
407*8ba4d145SBjoern A. Zeeb 	u8 tx_key;
408*8ba4d145SBjoern A. Zeeb 	u8 key_type;
409*8ba4d145SBjoern A. Zeeb 	u8 is_authenticator;
410*8ba4d145SBjoern A. Zeeb 	u8 peer_addr[6];
411*8ba4d145SBjoern A. Zeeb 	u8 bss_idx;
412*8ba4d145SBjoern A. Zeeb 	u8 cipher_id;
413*8ba4d145SBjoern A. Zeeb 	u8 key_id;
414*8ba4d145SBjoern A. Zeeb 	u8 key_len;
415*8ba4d145SBjoern A. Zeeb 	u8 wlan_idx;
416*8ba4d145SBjoern A. Zeeb 	u8 mgmt_prot;
417*8ba4d145SBjoern A. Zeeb 	u8 key[32];
418*8ba4d145SBjoern A. Zeeb 	u8 key_rsc[16];
419*8ba4d145SBjoern A. Zeeb } __packed;
420*8ba4d145SBjoern A. Zeeb 
421*8ba4d145SBjoern A. Zeeb struct sta_rec_hdr_trans {
422*8ba4d145SBjoern A. Zeeb 	__le16 tag;
423*8ba4d145SBjoern A. Zeeb 	__le16 len;
424*8ba4d145SBjoern A. Zeeb 	u8 from_ds;
425*8ba4d145SBjoern A. Zeeb 	u8 to_ds;
426*8ba4d145SBjoern A. Zeeb 	u8 dis_rx_hdr_tran;
427*8ba4d145SBjoern A. Zeeb 	u8 rsv;
428*8ba4d145SBjoern A. Zeeb } __packed;
429*8ba4d145SBjoern A. Zeeb 
430*8ba4d145SBjoern A. Zeeb struct sta_rec_mld {
431*8ba4d145SBjoern A. Zeeb 	__le16 tag;
432*8ba4d145SBjoern A. Zeeb 	__le16 len;
433*8ba4d145SBjoern A. Zeeb 	u8 mac_addr[ETH_ALEN];
434*8ba4d145SBjoern A. Zeeb 	__le16 primary_id;
435*8ba4d145SBjoern A. Zeeb 	__le16 secondary_id;
436*8ba4d145SBjoern A. Zeeb 	__le16 wlan_id;
437*8ba4d145SBjoern A. Zeeb 	u8 link_num;
438*8ba4d145SBjoern A. Zeeb 	u8 rsv[3];
439*8ba4d145SBjoern A. Zeeb 	struct {
440*8ba4d145SBjoern A. Zeeb 		__le16 wlan_id;
441*8ba4d145SBjoern A. Zeeb 		u8 bss_idx;
442*8ba4d145SBjoern A. Zeeb 		u8 rsv;
443*8ba4d145SBjoern A. Zeeb 	} __packed link[2];
444*8ba4d145SBjoern A. Zeeb } __packed;
445*8ba4d145SBjoern A. Zeeb 
446*8ba4d145SBjoern A. Zeeb struct sta_rec_eht_mld {
447*8ba4d145SBjoern A. Zeeb 	__le16 tag;
448*8ba4d145SBjoern A. Zeeb 	__le16 len;
449*8ba4d145SBjoern A. Zeeb 	u8 nsep;
450*8ba4d145SBjoern A. Zeeb 	u8 mld_type;
451*8ba4d145SBjoern A. Zeeb 	u8 __rsv1[1];
452*8ba4d145SBjoern A. Zeeb 	u8 str_cap[3];
453*8ba4d145SBjoern A. Zeeb 	u8 eml_cap[3];
454*8ba4d145SBjoern A. Zeeb 	u8 __rsv2[3];
455*8ba4d145SBjoern A. Zeeb } __packed;
456*8ba4d145SBjoern A. Zeeb 
457*8ba4d145SBjoern A. Zeeb struct bss_ifs_time_tlv {
458*8ba4d145SBjoern A. Zeeb 	__le16 tag;
459*8ba4d145SBjoern A. Zeeb 	__le16 len;
460*8ba4d145SBjoern A. Zeeb 	u8 slot_valid;
461*8ba4d145SBjoern A. Zeeb 	u8 sifs_valid;
462*8ba4d145SBjoern A. Zeeb 	u8 rifs_valid;
463*8ba4d145SBjoern A. Zeeb 	u8 eifs_valid;
464*8ba4d145SBjoern A. Zeeb 	__le16 slot_time;
465*8ba4d145SBjoern A. Zeeb 	__le16 sifs_time;
466*8ba4d145SBjoern A. Zeeb 	__le16 rifs_time;
467*8ba4d145SBjoern A. Zeeb 	__le16 eifs_time;
468*8ba4d145SBjoern A. Zeeb 	u8 eifs_cck_valid;
469*8ba4d145SBjoern A. Zeeb 	u8 rsv;
470*8ba4d145SBjoern A. Zeeb 	__le16 eifs_cck_time;
471*8ba4d145SBjoern A. Zeeb } __packed;
472*8ba4d145SBjoern A. Zeeb 
473*8ba4d145SBjoern A. Zeeb struct bss_rlm_tlv {
474*8ba4d145SBjoern A. Zeeb 	__le16 tag;
475*8ba4d145SBjoern A. Zeeb 	__le16 len;
476*8ba4d145SBjoern A. Zeeb 	u8 control_channel;
477*8ba4d145SBjoern A. Zeeb 	u8 center_chan;
478*8ba4d145SBjoern A. Zeeb 	u8 center_chan2;
479*8ba4d145SBjoern A. Zeeb 	u8 bw;
480*8ba4d145SBjoern A. Zeeb 	u8 tx_streams;
481*8ba4d145SBjoern A. Zeeb 	u8 rx_streams;
482*8ba4d145SBjoern A. Zeeb 	u8 ht_op_info;
483*8ba4d145SBjoern A. Zeeb 	u8 sco;
484*8ba4d145SBjoern A. Zeeb 	u8 band;
485*8ba4d145SBjoern A. Zeeb 	u8 pad[3];
486*8ba4d145SBjoern A. Zeeb } __packed;
487*8ba4d145SBjoern A. Zeeb 
488*8ba4d145SBjoern A. Zeeb #define MT7925_STA_UPDATE_MAX_SIZE	(sizeof(struct sta_req_hdr) +		\
489*8ba4d145SBjoern A. Zeeb 					 sizeof(struct sta_rec_basic) +		\
490*8ba4d145SBjoern A. Zeeb 					 sizeof(struct sta_rec_bf) +		\
491*8ba4d145SBjoern A. Zeeb 					 sizeof(struct sta_rec_ht) +		\
492*8ba4d145SBjoern A. Zeeb 					 sizeof(struct sta_rec_he_v2) +		\
493*8ba4d145SBjoern A. Zeeb 					 sizeof(struct sta_rec_ba_uni) +	\
494*8ba4d145SBjoern A. Zeeb 					 sizeof(struct sta_rec_vht) +		\
495*8ba4d145SBjoern A. Zeeb 					 sizeof(struct sta_rec_uapsd) +		\
496*8ba4d145SBjoern A. Zeeb 					 sizeof(struct sta_rec_amsdu) +		\
497*8ba4d145SBjoern A. Zeeb 					 sizeof(struct sta_rec_bfee) +		\
498*8ba4d145SBjoern A. Zeeb 					 sizeof(struct sta_rec_phy) +		\
499*8ba4d145SBjoern A. Zeeb 					 sizeof(struct sta_rec_ra) +		\
500*8ba4d145SBjoern A. Zeeb 					 sizeof(struct sta_rec_sec_uni) +   \
501*8ba4d145SBjoern A. Zeeb 					 sizeof(struct sta_rec_ra_fixed) +	\
502*8ba4d145SBjoern A. Zeeb 					 sizeof(struct sta_rec_he_6g_capa) +	\
503*8ba4d145SBjoern A. Zeeb 					 sizeof(struct sta_rec_eht) +		\
504*8ba4d145SBjoern A. Zeeb 					 sizeof(struct sta_rec_hdr_trans) +	\
505*8ba4d145SBjoern A. Zeeb 					 sizeof(struct sta_rec_mld) +		\
506*8ba4d145SBjoern A. Zeeb 					 sizeof(struct tlv) * 2 +		\
507*8ba4d145SBjoern A. Zeeb 					 sizeof(struct sta_rec_remove))
508*8ba4d145SBjoern A. Zeeb 
509*8ba4d145SBjoern A. Zeeb #define MT7925_BSS_UPDATE_MAX_SIZE	(sizeof(struct bss_req_hdr) +		\
510*8ba4d145SBjoern A. Zeeb 					 sizeof(struct mt76_connac_bss_basic_tlv) +	\
511*8ba4d145SBjoern A. Zeeb 					 sizeof(struct mt76_connac_bss_qos_tlv) +	\
512*8ba4d145SBjoern A. Zeeb 					 sizeof(struct bss_rate_tlv) +			\
513*8ba4d145SBjoern A. Zeeb 					 sizeof(struct bss_mld_tlv) +			\
514*8ba4d145SBjoern A. Zeeb 					 sizeof(struct bss_info_uni_he) +		\
515*8ba4d145SBjoern A. Zeeb 					 sizeof(struct bss_info_uni_bss_color) +	\
516*8ba4d145SBjoern A. Zeeb 					 sizeof(struct bss_ifs_time_tlv) +		\
517*8ba4d145SBjoern A. Zeeb 					 sizeof(struct bss_rlm_tlv) +		\
518*8ba4d145SBjoern A. Zeeb 					 sizeof(struct tlv))
519*8ba4d145SBjoern A. Zeeb 
520*8ba4d145SBjoern A. Zeeb #define MT_CONNAC3_SKU_POWER_LIMIT      449
521*8ba4d145SBjoern A. Zeeb struct mt7925_sku_tlv {
522*8ba4d145SBjoern A. Zeeb 	u8 channel;
523*8ba4d145SBjoern A. Zeeb 	s8 pwr_limit[MT_CONNAC3_SKU_POWER_LIMIT];
524*8ba4d145SBjoern A. Zeeb } __packed;
525*8ba4d145SBjoern A. Zeeb 
526*8ba4d145SBjoern A. Zeeb struct mt7925_tx_power_limit_tlv {
527*8ba4d145SBjoern A. Zeeb 	u8 rsv[4];
528*8ba4d145SBjoern A. Zeeb 
529*8ba4d145SBjoern A. Zeeb 	__le16 tag;
530*8ba4d145SBjoern A. Zeeb 	__le16 len;
531*8ba4d145SBjoern A. Zeeb 
532*8ba4d145SBjoern A. Zeeb 	/* DW0 - common info*/
533*8ba4d145SBjoern A. Zeeb 	u8 ver;
534*8ba4d145SBjoern A. Zeeb 	u8 pad0;
535*8ba4d145SBjoern A. Zeeb 	__le16 rsv1;
536*8ba4d145SBjoern A. Zeeb 	/* DW1 - cmd hint */
537*8ba4d145SBjoern A. Zeeb 	u8 n_chan; /* # channel */
538*8ba4d145SBjoern A. Zeeb 	u8 band; /* 2.4GHz - 5GHz - 6GHz */
539*8ba4d145SBjoern A. Zeeb 	u8 last_msg;
540*8ba4d145SBjoern A. Zeeb 	u8 limit_type;
541*8ba4d145SBjoern A. Zeeb 	/* DW3 */
542*8ba4d145SBjoern A. Zeeb 	u8 alpha2[4]; /* regulatory_request.alpha2 */
543*8ba4d145SBjoern A. Zeeb 	u8 pad2[32];
544*8ba4d145SBjoern A. Zeeb 
545*8ba4d145SBjoern A. Zeeb 	u8 data[];
546*8ba4d145SBjoern A. Zeeb } __packed;
547*8ba4d145SBjoern A. Zeeb 
548*8ba4d145SBjoern A. Zeeb struct mt7925_arpns_tlv {
549*8ba4d145SBjoern A. Zeeb 	__le16 tag;
550*8ba4d145SBjoern A. Zeeb 	__le16 len;
551*8ba4d145SBjoern A. Zeeb 
552*8ba4d145SBjoern A. Zeeb 	u8 enable;
553*8ba4d145SBjoern A. Zeeb 	u8 ips_num;
554*8ba4d145SBjoern A. Zeeb 	u8 rsv[2];
555*8ba4d145SBjoern A. Zeeb } __packed;
556*8ba4d145SBjoern A. Zeeb 
557*8ba4d145SBjoern A. Zeeb struct mt7925_wow_pattern_tlv {
558*8ba4d145SBjoern A. Zeeb 	__le16 tag;
559*8ba4d145SBjoern A. Zeeb 	__le16 len;
560*8ba4d145SBjoern A. Zeeb 	u8 bss_idx;
561*8ba4d145SBjoern A. Zeeb 	u8 index; /* pattern index */
562*8ba4d145SBjoern A. Zeeb 	u8 enable; /* 0: disable
563*8ba4d145SBjoern A. Zeeb 		    * 1: enable
564*8ba4d145SBjoern A. Zeeb 		    */
565*8ba4d145SBjoern A. Zeeb 	u8 data_len; /* pattern length */
566*8ba4d145SBjoern A. Zeeb 	u8 offset;
567*8ba4d145SBjoern A. Zeeb 	u8 mask[MT76_CONNAC_WOW_MASK_MAX_LEN];
568*8ba4d145SBjoern A. Zeeb 	u8 pattern[MT76_CONNAC_WOW_PATTEN_MAX_LEN];
569*8ba4d145SBjoern A. Zeeb 	u8 rsv[7];
570*8ba4d145SBjoern A. Zeeb } __packed;
571*8ba4d145SBjoern A. Zeeb 
572*8ba4d145SBjoern A. Zeeb struct roc_acquire_tlv {
573*8ba4d145SBjoern A. Zeeb 	__le16 tag;
574*8ba4d145SBjoern A. Zeeb 	__le16 len;
575*8ba4d145SBjoern A. Zeeb 	u8 bss_idx;
576*8ba4d145SBjoern A. Zeeb 	u8 tokenid;
577*8ba4d145SBjoern A. Zeeb 	u8 control_channel;
578*8ba4d145SBjoern A. Zeeb 	u8 sco;
579*8ba4d145SBjoern A. Zeeb 	u8 band;
580*8ba4d145SBjoern A. Zeeb 	u8 bw;
581*8ba4d145SBjoern A. Zeeb 	u8 center_chan;
582*8ba4d145SBjoern A. Zeeb 	u8 center_chan2;
583*8ba4d145SBjoern A. Zeeb 	u8 bw_from_ap;
584*8ba4d145SBjoern A. Zeeb 	u8 center_chan_from_ap;
585*8ba4d145SBjoern A. Zeeb 	u8 center_chan2_from_ap;
586*8ba4d145SBjoern A. Zeeb 	u8 reqtype;
587*8ba4d145SBjoern A. Zeeb 	__le32 maxinterval;
588*8ba4d145SBjoern A. Zeeb 	u8 dbdcband;
589*8ba4d145SBjoern A. Zeeb 	u8 rsv[3];
590*8ba4d145SBjoern A. Zeeb } __packed;
591*8ba4d145SBjoern A. Zeeb 
592*8ba4d145SBjoern A. Zeeb static inline enum connac3_mcu_cipher_type
mt7925_mcu_get_cipher(int cipher)593*8ba4d145SBjoern A. Zeeb mt7925_mcu_get_cipher(int cipher)
594*8ba4d145SBjoern A. Zeeb {
595*8ba4d145SBjoern A. Zeeb 	switch (cipher) {
596*8ba4d145SBjoern A. Zeeb 	case WLAN_CIPHER_SUITE_WEP40:
597*8ba4d145SBjoern A. Zeeb 		return CONNAC3_CIPHER_WEP40;
598*8ba4d145SBjoern A. Zeeb 	case WLAN_CIPHER_SUITE_WEP104:
599*8ba4d145SBjoern A. Zeeb 		return CONNAC3_CIPHER_WEP104;
600*8ba4d145SBjoern A. Zeeb 	case WLAN_CIPHER_SUITE_TKIP:
601*8ba4d145SBjoern A. Zeeb 		return CONNAC3_CIPHER_TKIP;
602*8ba4d145SBjoern A. Zeeb 	case WLAN_CIPHER_SUITE_AES_CMAC:
603*8ba4d145SBjoern A. Zeeb 		return CONNAC3_CIPHER_BIP_CMAC_128;
604*8ba4d145SBjoern A. Zeeb 	case WLAN_CIPHER_SUITE_CCMP:
605*8ba4d145SBjoern A. Zeeb 		return CONNAC3_CIPHER_AES_CCMP;
606*8ba4d145SBjoern A. Zeeb 	case WLAN_CIPHER_SUITE_CCMP_256:
607*8ba4d145SBjoern A. Zeeb 		return CONNAC3_CIPHER_CCMP_256;
608*8ba4d145SBjoern A. Zeeb 	case WLAN_CIPHER_SUITE_GCMP:
609*8ba4d145SBjoern A. Zeeb 		return CONNAC3_CIPHER_GCMP;
610*8ba4d145SBjoern A. Zeeb 	case WLAN_CIPHER_SUITE_GCMP_256:
611*8ba4d145SBjoern A. Zeeb 		return CONNAC3_CIPHER_GCMP_256;
612*8ba4d145SBjoern A. Zeeb 	case WLAN_CIPHER_SUITE_SMS4:
613*8ba4d145SBjoern A. Zeeb 		return CONNAC3_CIPHER_WAPI;
614*8ba4d145SBjoern A. Zeeb 	default:
615*8ba4d145SBjoern A. Zeeb 		return CONNAC3_CIPHER_NONE;
616*8ba4d145SBjoern A. Zeeb 	}
617*8ba4d145SBjoern A. Zeeb }
618*8ba4d145SBjoern A. Zeeb 
619*8ba4d145SBjoern A. Zeeb int mt7925_mcu_set_dbdc(struct mt76_phy *phy, bool enable);
620*8ba4d145SBjoern A. Zeeb int mt7925_mcu_hw_scan(struct mt76_phy *phy, struct ieee80211_vif *vif,
621*8ba4d145SBjoern A. Zeeb 		       struct ieee80211_scan_request *scan_req);
622*8ba4d145SBjoern A. Zeeb int mt7925_mcu_cancel_hw_scan(struct mt76_phy *phy,
623*8ba4d145SBjoern A. Zeeb 			      struct ieee80211_vif *vif);
624*8ba4d145SBjoern A. Zeeb int mt7925_mcu_sched_scan_req(struct mt76_phy *phy,
625*8ba4d145SBjoern A. Zeeb 			      struct ieee80211_vif *vif,
626*8ba4d145SBjoern A. Zeeb 			      struct cfg80211_sched_scan_request *sreq);
627*8ba4d145SBjoern A. Zeeb int mt7925_mcu_sched_scan_enable(struct mt76_phy *phy,
628*8ba4d145SBjoern A. Zeeb 				 struct ieee80211_vif *vif,
629*8ba4d145SBjoern A. Zeeb 				 bool enable);
630*8ba4d145SBjoern A. Zeeb int mt7925_mcu_add_bss_info(struct mt792x_phy *phy,
631*8ba4d145SBjoern A. Zeeb 			    struct ieee80211_chanctx_conf *ctx,
632*8ba4d145SBjoern A. Zeeb 			    struct ieee80211_bss_conf *link_conf,
633*8ba4d145SBjoern A. Zeeb 			    struct ieee80211_link_sta *link_sta,
634*8ba4d145SBjoern A. Zeeb 			    int enable);
635*8ba4d145SBjoern A. Zeeb int mt7925_mcu_set_timing(struct mt792x_phy *phy,
636*8ba4d145SBjoern A. Zeeb 			  struct ieee80211_bss_conf *link_conf);
637*8ba4d145SBjoern A. Zeeb int mt7925_mcu_set_deep_sleep(struct mt792x_dev *dev, bool enable);
638*8ba4d145SBjoern A. Zeeb int mt7925_mcu_set_channel_domain(struct mt76_phy *phy);
639*8ba4d145SBjoern A. Zeeb int mt7925_mcu_set_radio_en(struct mt792x_phy *phy, bool enable);
640*8ba4d145SBjoern A. Zeeb int mt7925_mcu_set_chctx(struct mt76_phy *phy, struct mt76_vif_link *mvif,
641*8ba4d145SBjoern A. Zeeb 			 struct ieee80211_bss_conf *link_conf,
642*8ba4d145SBjoern A. Zeeb 			 struct ieee80211_chanctx_conf *ctx);
643*8ba4d145SBjoern A. Zeeb int mt7925_mcu_set_rate_txpower(struct mt76_phy *phy);
644*8ba4d145SBjoern A. Zeeb int mt7925_mcu_update_arp_filter(struct mt76_dev *dev,
645*8ba4d145SBjoern A. Zeeb 				 struct ieee80211_bss_conf *link_conf);
646*8ba4d145SBjoern A. Zeeb int
647*8ba4d145SBjoern A. Zeeb mt7925_mcu_uni_bss_bcnft(struct mt792x_dev *dev,
648*8ba4d145SBjoern A. Zeeb 			 struct ieee80211_bss_conf *link_conf, bool enable);
649*8ba4d145SBjoern A. Zeeb #endif
650