xref: /linux/drivers/net/wireless/mediatek/mt76/mt7925/mcu.h (revision 147324292979fdd0e612199f898db7162ae083c6)
1c948b5daSDeren Wu /* SPDX-License-Identifier: ISC */
2c948b5daSDeren Wu /* Copyright (C) 2023 MediaTek Inc. */
3c948b5daSDeren Wu 
4c948b5daSDeren Wu #ifndef __MT7925_MCU_H
5c948b5daSDeren Wu #define __MT7925_MCU_H
6c948b5daSDeren Wu 
7c948b5daSDeren Wu #include "../mt76_connac_mcu.h"
8c948b5daSDeren Wu 
9c948b5daSDeren Wu /* ext event table */
10c948b5daSDeren Wu enum {
11c948b5daSDeren Wu 	MCU_EXT_EVENT_RATE_REPORT = 0x87,
12c948b5daSDeren Wu };
13c948b5daSDeren Wu 
14c948b5daSDeren Wu struct mt7925_mcu_eeprom_info {
15c948b5daSDeren Wu 	__le32 addr;
16c948b5daSDeren Wu 	__le32 valid;
17c948b5daSDeren Wu 	u8 data[MT7925_EEPROM_BLOCK_SIZE];
18c948b5daSDeren Wu } __packed;
19c948b5daSDeren Wu 
20c948b5daSDeren Wu #define MT_RA_RATE_NSS			GENMASK(8, 6)
21c948b5daSDeren Wu #define MT_RA_RATE_MCS			GENMASK(3, 0)
22c948b5daSDeren Wu #define MT_RA_RATE_TX_MODE		GENMASK(12, 9)
23c948b5daSDeren Wu #define MT_RA_RATE_DCM_EN		BIT(4)
24c948b5daSDeren Wu #define MT_RA_RATE_BW			GENMASK(14, 13)
25c948b5daSDeren Wu 
26c948b5daSDeren Wu struct mt7925_mcu_rxd {
27c948b5daSDeren Wu 	__le32 rxd[8];
28c948b5daSDeren Wu 
29c948b5daSDeren Wu 	__le16 len;
30c948b5daSDeren Wu 	__le16 pkt_type_id;
31c948b5daSDeren Wu 
32c948b5daSDeren Wu 	u8 eid;
33c948b5daSDeren Wu 	u8 seq;
34c948b5daSDeren Wu 	u8 option;
35c948b5daSDeren Wu 	u8 __rsv;
36c948b5daSDeren Wu 
37c948b5daSDeren Wu 	u8 ext_eid;
38c948b5daSDeren Wu 	u8 __rsv1[2];
39c948b5daSDeren Wu 	u8 s2d_index;
40c948b5daSDeren Wu 
41c948b5daSDeren Wu 	u8 tlv[];
42c948b5daSDeren Wu };
43c948b5daSDeren Wu 
44c948b5daSDeren Wu struct mt7925_mcu_uni_event {
45c948b5daSDeren Wu 	u8 cid;
46c948b5daSDeren Wu 	u8 pad[3];
47c948b5daSDeren Wu 	__le32 status; /* 0: success, others: fail */
48c948b5daSDeren Wu } __packed;
49c948b5daSDeren Wu 
50c948b5daSDeren Wu enum {
51c948b5daSDeren Wu 	MT_EBF = BIT(0),	/* explicit beamforming */
52c948b5daSDeren Wu 	MT_IBF = BIT(1)		/* implicit beamforming */
53c948b5daSDeren Wu };
54c948b5daSDeren Wu 
55c948b5daSDeren Wu struct mt7925_mcu_reg_event {
56c948b5daSDeren Wu 	__le32 reg;
57c948b5daSDeren Wu 	__le32 val;
58c948b5daSDeren Wu } __packed;
59c948b5daSDeren Wu 
60c948b5daSDeren Wu struct mt7925_mcu_ant_id_config {
61c948b5daSDeren Wu 	u8 ant_id[4];
62c948b5daSDeren Wu } __packed;
63c948b5daSDeren Wu 
64c948b5daSDeren Wu struct mt7925_txpwr_req {
65c948b5daSDeren Wu 	u8 _rsv[4];
66c948b5daSDeren Wu 	__le16 tag;
67c948b5daSDeren Wu 	__le16 len;
68c948b5daSDeren Wu 
69c948b5daSDeren Wu 	u8 format_id;
70c948b5daSDeren Wu 	u8 catg;
71c948b5daSDeren Wu 	u8 band_idx;
72c948b5daSDeren Wu 	u8 _rsv1;
73c948b5daSDeren Wu } __packed;
74c948b5daSDeren Wu 
75c948b5daSDeren Wu struct mt7925_txpwr_event {
76c948b5daSDeren Wu 	u8 rsv[4];
77c948b5daSDeren Wu 	__le16 tag;
78c948b5daSDeren Wu 	__le16 len;
79c948b5daSDeren Wu 
80c948b5daSDeren Wu 	u8 catg;
81c948b5daSDeren Wu 	u8 band_idx;
82c948b5daSDeren Wu 	u8 ch_band;
83c948b5daSDeren Wu 	u8 format; /* 0:Legacy, 1:HE */
84c948b5daSDeren Wu 
85c948b5daSDeren Wu 	/* Rate power info */
86c948b5daSDeren Wu 	struct mt7925_txpwr txpwr;
87c948b5daSDeren Wu 
88c948b5daSDeren Wu 	s8 pwr_max;
89c948b5daSDeren Wu 	s8 pwr_min;
90c948b5daSDeren Wu 	u8 rsv1;
91c948b5daSDeren Wu } __packed;
92c948b5daSDeren Wu 
93c948b5daSDeren Wu enum {
94c948b5daSDeren Wu 	TM_SWITCH_MODE,
95c948b5daSDeren Wu 	TM_SET_AT_CMD,
96c948b5daSDeren Wu 	TM_QUERY_AT_CMD,
97c948b5daSDeren Wu };
98c948b5daSDeren Wu 
99c948b5daSDeren Wu enum {
100c948b5daSDeren Wu 	MT7925_TM_NORMAL,
101c948b5daSDeren Wu 	MT7925_TM_TESTMODE,
102c948b5daSDeren Wu 	MT7925_TM_ICAP,
103c948b5daSDeren Wu 	MT7925_TM_ICAP_OVERLAP,
104c948b5daSDeren Wu 	MT7925_TM_WIFISPECTRUM,
105c948b5daSDeren Wu };
106c948b5daSDeren Wu 
107c948b5daSDeren Wu struct mt7925_rftest_cmd {
108c948b5daSDeren Wu 	u8 action;
109c948b5daSDeren Wu 	u8 rsv[3];
110c948b5daSDeren Wu 	__le32 param0;
111c948b5daSDeren Wu 	__le32 param1;
112c948b5daSDeren Wu } __packed;
113c948b5daSDeren Wu 
114c948b5daSDeren Wu struct mt7925_rftest_evt {
115c948b5daSDeren Wu 	__le32 param0;
116c948b5daSDeren Wu 	__le32 param1;
117c948b5daSDeren Wu } __packed;
118c948b5daSDeren Wu 
119c948b5daSDeren Wu enum {
120c948b5daSDeren Wu 	UNI_CHANNEL_SWITCH,
121c948b5daSDeren Wu 	UNI_CHANNEL_RX_PATH,
122c948b5daSDeren Wu };
123c948b5daSDeren Wu 
124c948b5daSDeren Wu enum {
125c948b5daSDeren Wu 	UNI_CHIP_CONFIG_CHIP_CFG = 0x2,
126c948b5daSDeren Wu 	UNI_CHIP_CONFIG_NIC_CAPA = 0x3,
127c948b5daSDeren Wu };
128c948b5daSDeren Wu 
129c948b5daSDeren Wu enum {
130c948b5daSDeren Wu 	UNI_BAND_CONFIG_RADIO_ENABLE,
131c948b5daSDeren Wu 	UNI_BAND_CONFIG_RTS_THRESHOLD = 0x08,
132c948b5daSDeren Wu 	UNI_BAND_CONFIG_SET_MAC80211_RX_FILTER = 0x0C,
133c948b5daSDeren Wu };
134c948b5daSDeren Wu 
135c948b5daSDeren Wu enum {
136c948b5daSDeren Wu 	UNI_WSYS_CONFIG_FW_LOG_CTRL,
137c948b5daSDeren Wu 	UNI_WSYS_CONFIG_FW_DBG_CTRL,
138c948b5daSDeren Wu };
139c948b5daSDeren Wu 
140c948b5daSDeren Wu enum {
141c948b5daSDeren Wu 	UNI_EFUSE_ACCESS = 1,
142c948b5daSDeren Wu 	UNI_EFUSE_BUFFER_MODE,
143c948b5daSDeren Wu 	UNI_EFUSE_FREE_BLOCK,
144c948b5daSDeren Wu 	UNI_EFUSE_BUFFER_RD,
145c948b5daSDeren Wu };
146c948b5daSDeren Wu 
147c948b5daSDeren Wu enum {
148c948b5daSDeren Wu 	UNI_CMD_ACCESS_REG_BASIC = 0x0,
149c948b5daSDeren Wu 	UNI_CMD_ACCESS_RF_REG_BASIC,
150c948b5daSDeren Wu };
151c948b5daSDeren Wu 
152c948b5daSDeren Wu enum {
153c948b5daSDeren Wu 	UNI_MBMC_SETTING,
154c948b5daSDeren Wu };
155c948b5daSDeren Wu 
156c948b5daSDeren Wu enum {
157c948b5daSDeren Wu 	UNI_EVENT_SCAN_DONE_BASIC = 0,
158c948b5daSDeren Wu 	UNI_EVENT_SCAN_DONE_CHNLINFO = 2,
159c948b5daSDeren Wu 	UNI_EVENT_SCAN_DONE_NLO = 3,
160c948b5daSDeren Wu };
161c948b5daSDeren Wu 
16247916693SMing Yen Hsieh enum connac3_mcu_cipher_type {
16347916693SMing Yen Hsieh 	CONNAC3_CIPHER_NONE = 0,
16447916693SMing Yen Hsieh 	CONNAC3_CIPHER_WEP40 = 1,
16547916693SMing Yen Hsieh 	CONNAC3_CIPHER_TKIP = 2,
16647916693SMing Yen Hsieh 	CONNAC3_CIPHER_AES_CCMP = 4,
16747916693SMing Yen Hsieh 	CONNAC3_CIPHER_WEP104 = 5,
16847916693SMing Yen Hsieh 	CONNAC3_CIPHER_BIP_CMAC_128 = 6,
16947916693SMing Yen Hsieh 	CONNAC3_CIPHER_WEP128 = 7,
17047916693SMing Yen Hsieh 	CONNAC3_CIPHER_WAPI = 8,
17147916693SMing Yen Hsieh 	CONNAC3_CIPHER_CCMP_256 = 10,
17247916693SMing Yen Hsieh 	CONNAC3_CIPHER_GCMP = 11,
17347916693SMing Yen Hsieh 	CONNAC3_CIPHER_GCMP_256 = 12,
17447916693SMing Yen Hsieh };
17547916693SMing Yen Hsieh 
176c948b5daSDeren Wu struct mt7925_mcu_scan_chinfo_event {
177c948b5daSDeren Wu 	u8 nr_chan;
178c948b5daSDeren Wu 	u8 alpha2[3];
179c948b5daSDeren Wu } __packed;
180c948b5daSDeren Wu 
181c948b5daSDeren Wu enum {
182c948b5daSDeren Wu 	UNI_SCAN_REQ = 1,
183c948b5daSDeren Wu 	UNI_SCAN_CANCEL = 2,
184c948b5daSDeren Wu 	UNI_SCAN_SCHED_REQ = 3,
185c948b5daSDeren Wu 	UNI_SCAN_SCHED_ENABLE = 4,
186c948b5daSDeren Wu 	UNI_SCAN_SSID = 10,
187c948b5daSDeren Wu 	UNI_SCAN_BSSID,
188c948b5daSDeren Wu 	UNI_SCAN_CHANNEL,
189c948b5daSDeren Wu 	UNI_SCAN_IE,
190c948b5daSDeren Wu 	UNI_SCAN_MISC,
191c948b5daSDeren Wu 	UNI_SCAN_SSID_MATCH_SETS,
192c948b5daSDeren Wu };
193c948b5daSDeren Wu 
194c948b5daSDeren Wu enum {
195c948b5daSDeren Wu 	UNI_SNIFFER_ENABLE,
196c948b5daSDeren Wu 	UNI_SNIFFER_CONFIG,
197c948b5daSDeren Wu };
198c948b5daSDeren Wu 
199c948b5daSDeren Wu struct scan_hdr_tlv {
200c948b5daSDeren Wu 	/* fixed field */
201c948b5daSDeren Wu 	u8 seq_num;
202c948b5daSDeren Wu 	u8 bss_idx;
203c948b5daSDeren Wu 	u8 pad[2];
204c948b5daSDeren Wu 	/* tlv */
205c948b5daSDeren Wu 	u8 data[];
206c948b5daSDeren Wu } __packed;
207c948b5daSDeren Wu 
208c948b5daSDeren Wu struct scan_req_tlv {
209c948b5daSDeren Wu 	__le16 tag;
210c948b5daSDeren Wu 	__le16 len;
211c948b5daSDeren Wu 
212c948b5daSDeren Wu 	u8 scan_type; /* 0: PASSIVE SCAN
213c948b5daSDeren Wu 		       * 1: ACTIVE SCAN
214c948b5daSDeren Wu 		       */
215c948b5daSDeren Wu 	u8 probe_req_num; /* Number of probe request for each SSID */
216c948b5daSDeren Wu 	u8 scan_func; /* BIT(0) Enable random MAC scan
217c948b5daSDeren Wu 		       * BIT(1) Disable DBDC scan type 1~3.
218c948b5daSDeren Wu 		       * BIT(2) Use DBDC scan type 3 (dedicated one RF to scan).
219c948b5daSDeren Wu 		       */
220c948b5daSDeren Wu 	u8 src_mask;
221c948b5daSDeren Wu 	__le16 channel_min_dwell_time;
222c948b5daSDeren Wu 	__le16 channel_dwell_time; /* channel Dwell interval */
223c948b5daSDeren Wu 	__le16 timeout_value;
224c948b5daSDeren Wu 	__le16 probe_delay_time;
2251f01276bSMing Yen Hsieh 	__le32 func_mask_ext;
226c948b5daSDeren Wu };
227c948b5daSDeren Wu 
228c948b5daSDeren Wu struct scan_ssid_tlv {
229c948b5daSDeren Wu 	__le16 tag;
230c948b5daSDeren Wu 	__le16 len;
231c948b5daSDeren Wu 
232c948b5daSDeren Wu 	u8 ssid_type; /* BIT(0) wildcard SSID
233c948b5daSDeren Wu 		       * BIT(1) P2P wildcard SSID
234c948b5daSDeren Wu 		       * BIT(2) specified SSID + wildcard SSID
235c948b5daSDeren Wu 		       * BIT(2) + ssid_type_ext BIT(0) specified SSID only
236c948b5daSDeren Wu 		       */
237c948b5daSDeren Wu 	u8 ssids_num;
238c948b5daSDeren Wu 	u8 pad[2];
239c948b5daSDeren Wu 	struct mt76_connac_mcu_scan_ssid ssids[4];
240c948b5daSDeren Wu };
241c948b5daSDeren Wu 
242c948b5daSDeren Wu struct scan_bssid_tlv {
243c948b5daSDeren Wu 	__le16 tag;
244c948b5daSDeren Wu 	__le16 len;
245c948b5daSDeren Wu 
246c948b5daSDeren Wu 	u8 bssid[ETH_ALEN];
247c948b5daSDeren Wu 	u8 match_ch;
248c948b5daSDeren Wu 	u8 match_ssid_ind;
249c948b5daSDeren Wu 	u8 rcpi;
250c948b5daSDeren Wu 	u8 pad[3];
251c948b5daSDeren Wu };
252c948b5daSDeren Wu 
253c948b5daSDeren Wu struct scan_chan_info_tlv {
254c948b5daSDeren Wu 	__le16 tag;
255c948b5daSDeren Wu 	__le16 len;
256c948b5daSDeren Wu 
257c948b5daSDeren Wu 	u8 channel_type; /* 0: Full channels
258c948b5daSDeren Wu 			  * 1: Only 2.4GHz channels
259c948b5daSDeren Wu 			  * 2: Only 5GHz channels
260c948b5daSDeren Wu 			  * 3: P2P social channel only (channel #1, #6 and #11)
261c948b5daSDeren Wu 			  * 4: Specified channels
262c948b5daSDeren Wu 			  * Others: Reserved
263c948b5daSDeren Wu 			  */
264c948b5daSDeren Wu 	u8 channels_num; /* valid when channel_type is 4 */
265c948b5daSDeren Wu 	u8 pad[2];
266c948b5daSDeren Wu 	struct mt76_connac_mcu_scan_channel channels[64];
267c948b5daSDeren Wu };
268c948b5daSDeren Wu 
269c948b5daSDeren Wu struct scan_ie_tlv {
270c948b5daSDeren Wu 	__le16 tag;
271c948b5daSDeren Wu 	__le16 len;
272c948b5daSDeren Wu 
273c948b5daSDeren Wu 	__le16 ies_len;
274c948b5daSDeren Wu 	u8 band;
275c948b5daSDeren Wu 	u8 pad;
276c948b5daSDeren Wu 	u8 ies[MT76_CONNAC_SCAN_IE_LEN];
277c948b5daSDeren Wu };
278c948b5daSDeren Wu 
279c948b5daSDeren Wu struct scan_misc_tlv {
280c948b5daSDeren Wu 	__le16 tag;
281c948b5daSDeren Wu 	__le16 len;
282c948b5daSDeren Wu 
283c948b5daSDeren Wu 	u8 random_mac[ETH_ALEN];
284c948b5daSDeren Wu 	u8 rsv[2];
285c948b5daSDeren Wu };
286c948b5daSDeren Wu 
287c948b5daSDeren Wu struct scan_sched_req {
288c948b5daSDeren Wu 	__le16 tag;
289c948b5daSDeren Wu 	__le16 len;
290c948b5daSDeren Wu 
291c948b5daSDeren Wu 	u8 version;
292c948b5daSDeren Wu 	u8 stop_on_match;
293c948b5daSDeren Wu 	u8 intervals_num;
294c948b5daSDeren Wu 	u8 scan_func;
295c948b5daSDeren Wu 	__le16 intervals[MT76_CONNAC_MAX_NUM_SCHED_SCAN_INTERVAL];
296c948b5daSDeren Wu };
297c948b5daSDeren Wu 
298c948b5daSDeren Wu struct scan_sched_ssid_match_sets {
299c948b5daSDeren Wu 	__le16 tag;
300c948b5daSDeren Wu 	__le16 len;
301c948b5daSDeren Wu 
302c948b5daSDeren Wu 	u8 match_num;
303c948b5daSDeren Wu 	u8 rsv[3];
304c948b5daSDeren Wu 
305c948b5daSDeren Wu 	struct mt76_connac_mcu_scan_match match[MT76_CONNAC_MAX_SCAN_MATCH];
306c948b5daSDeren Wu };
307c948b5daSDeren Wu 
308c948b5daSDeren Wu struct scan_sched_enable {
309c948b5daSDeren Wu 	__le16 tag;
310c948b5daSDeren Wu 	__le16 len;
311c948b5daSDeren Wu 
312c948b5daSDeren Wu 	u8 active;
313c948b5daSDeren Wu 	u8 rsv[3];
314c948b5daSDeren Wu };
315c948b5daSDeren Wu 
316c948b5daSDeren Wu struct mbmc_set_req {
317c948b5daSDeren Wu 	u8 pad[4];
318c948b5daSDeren Wu 	u8 data[];
319c948b5daSDeren Wu } __packed;
320c948b5daSDeren Wu 
321c948b5daSDeren Wu struct mbmc_conf_tlv {
322c948b5daSDeren Wu 	__le16 tag;
323c948b5daSDeren Wu 	__le16 len;
324c948b5daSDeren Wu 
325c948b5daSDeren Wu 	u8 mbmc_en;
326c948b5daSDeren Wu 	u8 band;
327c948b5daSDeren Wu 	u8 pad[2];
328c948b5daSDeren Wu } __packed;
329c948b5daSDeren Wu 
330c948b5daSDeren Wu struct edca {
331c948b5daSDeren Wu 	__le16 tag;
332c948b5daSDeren Wu 	__le16 len;
333c948b5daSDeren Wu 
334c948b5daSDeren Wu 	u8 queue;
335c948b5daSDeren Wu 	u8 set;
336c948b5daSDeren Wu 	u8 cw_min;
337c948b5daSDeren Wu 	u8 cw_max;
338c948b5daSDeren Wu 	__le16 txop;
339c948b5daSDeren Wu 	u8 aifs;
340c948b5daSDeren Wu 	u8 __rsv;
341c948b5daSDeren Wu };
342c948b5daSDeren Wu 
343c948b5daSDeren Wu struct bss_req_hdr {
344c948b5daSDeren Wu 	u8 bss_idx;
345c948b5daSDeren Wu 	u8 __rsv[3];
346c948b5daSDeren Wu } __packed;
347c948b5daSDeren Wu 
348c948b5daSDeren Wu struct bss_rate_tlv {
349c948b5daSDeren Wu 	__le16 tag;
350c948b5daSDeren Wu 	__le16 len;
351243cecc8Srong.yan 	u8 __rsv1[2];
352243cecc8Srong.yan 	__le16 basic_rate;
353c948b5daSDeren Wu 	__le16 bc_trans;
354c948b5daSDeren Wu 	__le16 mc_trans;
355c948b5daSDeren Wu 	u8 short_preamble;
356c948b5daSDeren Wu 	u8 bc_fixed_rate;
357c948b5daSDeren Wu 	u8 mc_fixed_rate;
358c948b5daSDeren Wu 	u8 __rsv2;
359c948b5daSDeren Wu } __packed;
360c948b5daSDeren Wu 
361c948b5daSDeren Wu struct bss_mld_tlv {
362c948b5daSDeren Wu 	__le16 tag;
363c948b5daSDeren Wu 	__le16 len;
364c948b5daSDeren Wu 	u8 group_mld_id;
365c948b5daSDeren Wu 	u8 own_mld_id;
366c948b5daSDeren Wu 	u8 mac_addr[ETH_ALEN];
367c948b5daSDeren Wu 	u8 remap_idx;
368c948b5daSDeren Wu 	u8 link_id;
369c948b5daSDeren Wu 	u8 __rsv[2];
370c948b5daSDeren Wu } __packed;
371c948b5daSDeren Wu 
372c948b5daSDeren Wu struct sta_rec_ba_uni {
373c948b5daSDeren Wu 	__le16 tag;
374c948b5daSDeren Wu 	__le16 len;
375c948b5daSDeren Wu 	u8 tid;
376c948b5daSDeren Wu 	u8 ba_type;
377c948b5daSDeren Wu 	u8 amsdu;
378c948b5daSDeren Wu 	u8 ba_en;
379c948b5daSDeren Wu 	__le16 ssn;
380c948b5daSDeren Wu 	__le16 winsize;
381c948b5daSDeren Wu 	u8 ba_rdd_rro;
382c948b5daSDeren Wu 	u8 __rsv[3];
383c948b5daSDeren Wu } __packed;
384c948b5daSDeren Wu 
385c948b5daSDeren Wu struct sta_rec_eht {
386c948b5daSDeren Wu 	__le16 tag;
387c948b5daSDeren Wu 	__le16 len;
388c948b5daSDeren Wu 	u8 tid_bitmap;
389c948b5daSDeren Wu 	u8 _rsv;
390c948b5daSDeren Wu 	__le16 mac_cap;
391c948b5daSDeren Wu 	__le64 phy_cap;
392c948b5daSDeren Wu 	__le64 phy_cap_ext;
393c948b5daSDeren Wu 	u8 mcs_map_bw20[4];
394c948b5daSDeren Wu 	u8 mcs_map_bw80[3];
395c948b5daSDeren Wu 	u8 mcs_map_bw160[3];
396c948b5daSDeren Wu 	u8 mcs_map_bw320[3];
397c948b5daSDeren Wu 	u8 _rsv2[3];
398c948b5daSDeren Wu } __packed;
399c948b5daSDeren Wu 
400c948b5daSDeren Wu struct sta_rec_sec_uni {
401c948b5daSDeren Wu 	__le16 tag;
402c948b5daSDeren Wu 	__le16 len;
403c948b5daSDeren Wu 	u8 add;
40447916693SMing Yen Hsieh 	u8 tx_key;
40547916693SMing Yen Hsieh 	u8 key_type;
40647916693SMing Yen Hsieh 	u8 is_authenticator;
40747916693SMing Yen Hsieh 	u8 peer_addr[6];
40847916693SMing Yen Hsieh 	u8 bss_idx;
40947916693SMing Yen Hsieh 	u8 cipher_id;
41047916693SMing Yen Hsieh 	u8 key_id;
41147916693SMing Yen Hsieh 	u8 key_len;
41247916693SMing Yen Hsieh 	u8 wlan_idx;
41347916693SMing Yen Hsieh 	u8 mgmt_prot;
41447916693SMing Yen Hsieh 	u8 key[32];
41547916693SMing Yen Hsieh 	u8 key_rsc[16];
416c948b5daSDeren Wu } __packed;
417c948b5daSDeren Wu 
418c948b5daSDeren Wu struct sta_rec_hdr_trans {
419c948b5daSDeren Wu 	__le16 tag;
420c948b5daSDeren Wu 	__le16 len;
421c948b5daSDeren Wu 	u8 from_ds;
422c948b5daSDeren Wu 	u8 to_ds;
423c948b5daSDeren Wu 	u8 dis_rx_hdr_tran;
424c948b5daSDeren Wu 	u8 rsv;
425c948b5daSDeren Wu } __packed;
426c948b5daSDeren Wu 
427c948b5daSDeren Wu struct sta_rec_mld {
428c948b5daSDeren Wu 	__le16 tag;
429c948b5daSDeren Wu 	__le16 len;
430c948b5daSDeren Wu 	u8 mac_addr[ETH_ALEN];
431c948b5daSDeren Wu 	__le16 primary_id;
432c948b5daSDeren Wu 	__le16 secondary_id;
433c948b5daSDeren Wu 	__le16 wlan_id;
434c948b5daSDeren Wu 	u8 link_num;
435c948b5daSDeren Wu 	u8 rsv[3];
436c948b5daSDeren Wu 	struct {
437c948b5daSDeren Wu 		__le16 wlan_id;
438c948b5daSDeren Wu 		u8 bss_idx;
439c948b5daSDeren Wu 		u8 rsv;
440c948b5daSDeren Wu 	} __packed link[2];
441c948b5daSDeren Wu } __packed;
442c948b5daSDeren Wu 
4438536ef0aSMing Yen Hsieh struct bss_ifs_time_tlv {
4448536ef0aSMing Yen Hsieh 	__le16 tag;
4458536ef0aSMing Yen Hsieh 	__le16 len;
4468536ef0aSMing Yen Hsieh 	u8 slot_valid;
4478536ef0aSMing Yen Hsieh 	u8 sifs_valid;
4488536ef0aSMing Yen Hsieh 	u8 rifs_valid;
4498536ef0aSMing Yen Hsieh 	u8 eifs_valid;
4508536ef0aSMing Yen Hsieh 	__le16 slot_time;
4518536ef0aSMing Yen Hsieh 	__le16 sifs_time;
4528536ef0aSMing Yen Hsieh 	__le16 rifs_time;
4538536ef0aSMing Yen Hsieh 	__le16 eifs_time;
4548536ef0aSMing Yen Hsieh 	u8 eifs_cck_valid;
4558536ef0aSMing Yen Hsieh 	u8 rsv;
4568536ef0aSMing Yen Hsieh 	__le16 eifs_cck_time;
4578536ef0aSMing Yen Hsieh } __packed;
4588536ef0aSMing Yen Hsieh 
459ca64503aSSean Wang struct bss_rlm_tlv {
460ca64503aSSean Wang 	__le16 tag;
461ca64503aSSean Wang 	__le16 len;
462ca64503aSSean Wang 	u8 control_channel;
463ca64503aSSean Wang 	u8 center_chan;
464ca64503aSSean Wang 	u8 center_chan2;
465ca64503aSSean Wang 	u8 bw;
466ca64503aSSean Wang 	u8 tx_streams;
467ca64503aSSean Wang 	u8 rx_streams;
468ca64503aSSean Wang 	u8 ht_op_info;
469ca64503aSSean Wang 	u8 sco;
470ca64503aSSean Wang 	u8 band;
471ca64503aSSean Wang 	u8 pad[3];
472ca64503aSSean Wang } __packed;
473ca64503aSSean Wang 
474c948b5daSDeren Wu #define MT7925_STA_UPDATE_MAX_SIZE	(sizeof(struct sta_req_hdr) +		\
475c948b5daSDeren Wu 					 sizeof(struct sta_rec_basic) +		\
476c948b5daSDeren Wu 					 sizeof(struct sta_rec_bf) +		\
477c948b5daSDeren Wu 					 sizeof(struct sta_rec_ht) +		\
478c948b5daSDeren Wu 					 sizeof(struct sta_rec_he_v2) +		\
479c948b5daSDeren Wu 					 sizeof(struct sta_rec_ba_uni) +	\
480c948b5daSDeren Wu 					 sizeof(struct sta_rec_vht) +		\
481c948b5daSDeren Wu 					 sizeof(struct sta_rec_uapsd) +		\
482c948b5daSDeren Wu 					 sizeof(struct sta_rec_amsdu) +		\
483c948b5daSDeren Wu 					 sizeof(struct sta_rec_bfee) +		\
484c948b5daSDeren Wu 					 sizeof(struct sta_rec_phy) +		\
485c948b5daSDeren Wu 					 sizeof(struct sta_rec_ra) +		\
48647916693SMing Yen Hsieh 					 sizeof(struct sta_rec_sec_uni) +   \
487c948b5daSDeren Wu 					 sizeof(struct sta_rec_ra_fixed) +	\
488c948b5daSDeren Wu 					 sizeof(struct sta_rec_he_6g_capa) +	\
489c948b5daSDeren Wu 					 sizeof(struct sta_rec_eht) +		\
490c948b5daSDeren Wu 					 sizeof(struct sta_rec_hdr_trans) +	\
491c948b5daSDeren Wu 					 sizeof(struct sta_rec_mld) +		\
492c948b5daSDeren Wu 					 sizeof(struct tlv))
493c948b5daSDeren Wu 
494c948b5daSDeren Wu #define MT7925_BSS_UPDATE_MAX_SIZE	(sizeof(struct bss_req_hdr) +		\
495c948b5daSDeren Wu 					 sizeof(struct mt76_connac_bss_basic_tlv) +	\
496c948b5daSDeren Wu 					 sizeof(struct mt76_connac_bss_qos_tlv) +	\
497c948b5daSDeren Wu 					 sizeof(struct bss_rate_tlv) +			\
498c948b5daSDeren Wu 					 sizeof(struct bss_mld_tlv) +			\
499c948b5daSDeren Wu 					 sizeof(struct bss_info_uni_he) +		\
500c948b5daSDeren Wu 					 sizeof(struct bss_info_uni_bss_color) +	\
5018536ef0aSMing Yen Hsieh 					 sizeof(struct bss_ifs_time_tlv) +		\
502ca64503aSSean Wang 					 sizeof(struct bss_rlm_tlv) +		\
503c948b5daSDeren Wu 					 sizeof(struct tlv))
504c948b5daSDeren Wu 
505c948b5daSDeren Wu #define MT_CONNAC3_SKU_POWER_LIMIT      449
506c948b5daSDeren Wu struct mt7925_sku_tlv {
507c948b5daSDeren Wu 	u8 channel;
508c948b5daSDeren Wu 	s8 pwr_limit[MT_CONNAC3_SKU_POWER_LIMIT];
509c948b5daSDeren Wu } __packed;
510c948b5daSDeren Wu 
511c948b5daSDeren Wu struct mt7925_tx_power_limit_tlv {
512c948b5daSDeren Wu 	u8 rsv[4];
513c948b5daSDeren Wu 
514c948b5daSDeren Wu 	__le16 tag;
515c948b5daSDeren Wu 	__le16 len;
516c948b5daSDeren Wu 
517c948b5daSDeren Wu 	/* DW0 - common info*/
518c948b5daSDeren Wu 	u8 ver;
519c948b5daSDeren Wu 	u8 pad0;
520c948b5daSDeren Wu 	__le16 rsv1;
521c948b5daSDeren Wu 	/* DW1 - cmd hint */
522c948b5daSDeren Wu 	u8 n_chan; /* # channel */
523c948b5daSDeren Wu 	u8 band; /* 2.4GHz - 5GHz - 6GHz */
524c948b5daSDeren Wu 	u8 last_msg;
525c948b5daSDeren Wu 	u8 limit_type;
526c948b5daSDeren Wu 	/* DW3 */
527c948b5daSDeren Wu 	u8 alpha2[4]; /* regulatory_request.alpha2 */
528c948b5daSDeren Wu 	u8 pad2[32];
529c948b5daSDeren Wu 
530c948b5daSDeren Wu 	u8 data[];
531c948b5daSDeren Wu } __packed;
532c948b5daSDeren Wu 
533c948b5daSDeren Wu struct mt7925_arpns_tlv {
534c948b5daSDeren Wu 	__le16 tag;
535c948b5daSDeren Wu 	__le16 len;
536c948b5daSDeren Wu 
537c948b5daSDeren Wu 	u8 enable;
538c948b5daSDeren Wu 	u8 ips_num;
539c948b5daSDeren Wu 	u8 rsv[2];
540c948b5daSDeren Wu } __packed;
541c948b5daSDeren Wu 
542c948b5daSDeren Wu struct mt7925_wow_pattern_tlv {
543c948b5daSDeren Wu 	__le16 tag;
544c948b5daSDeren Wu 	__le16 len;
545c948b5daSDeren Wu 	u8 bss_idx;
546c948b5daSDeren Wu 	u8 index; /* pattern index */
547c948b5daSDeren Wu 	u8 enable; /* 0: disable
548c948b5daSDeren Wu 		    * 1: enable
549c948b5daSDeren Wu 		    */
550c948b5daSDeren Wu 	u8 data_len; /* pattern length */
551c948b5daSDeren Wu 	u8 offset;
552c948b5daSDeren Wu 	u8 mask[MT76_CONNAC_WOW_MASK_MAX_LEN];
553c948b5daSDeren Wu 	u8 pattern[MT76_CONNAC_WOW_PATTEN_MAX_LEN];
554fa46bd62SMing Yen Hsieh 	u8 rsv[7];
555c948b5daSDeren Wu } __packed;
556c948b5daSDeren Wu 
55769acd6d9SSean Wang struct roc_acquire_tlv {
55869acd6d9SSean Wang 	__le16 tag;
55969acd6d9SSean Wang 	__le16 len;
56069acd6d9SSean Wang 	u8 bss_idx;
56169acd6d9SSean Wang 	u8 tokenid;
56269acd6d9SSean Wang 	u8 control_channel;
56369acd6d9SSean Wang 	u8 sco;
56469acd6d9SSean Wang 	u8 band;
56569acd6d9SSean Wang 	u8 bw;
56669acd6d9SSean Wang 	u8 center_chan;
56769acd6d9SSean Wang 	u8 center_chan2;
56869acd6d9SSean Wang 	u8 bw_from_ap;
56969acd6d9SSean Wang 	u8 center_chan_from_ap;
57069acd6d9SSean Wang 	u8 center_chan2_from_ap;
57169acd6d9SSean Wang 	u8 reqtype;
57269acd6d9SSean Wang 	__le32 maxinterval;
57369acd6d9SSean Wang 	u8 dbdcband;
57469acd6d9SSean Wang 	u8 rsv[3];
57569acd6d9SSean Wang } __packed;
57669acd6d9SSean Wang 
57747916693SMing Yen Hsieh static inline enum connac3_mcu_cipher_type
57847916693SMing Yen Hsieh mt7925_mcu_get_cipher(int cipher)
57947916693SMing Yen Hsieh {
58047916693SMing Yen Hsieh 	switch (cipher) {
58147916693SMing Yen Hsieh 	case WLAN_CIPHER_SUITE_WEP40:
58247916693SMing Yen Hsieh 		return CONNAC3_CIPHER_WEP40;
58347916693SMing Yen Hsieh 	case WLAN_CIPHER_SUITE_WEP104:
58447916693SMing Yen Hsieh 		return CONNAC3_CIPHER_WEP104;
58547916693SMing Yen Hsieh 	case WLAN_CIPHER_SUITE_TKIP:
58647916693SMing Yen Hsieh 		return CONNAC3_CIPHER_TKIP;
58747916693SMing Yen Hsieh 	case WLAN_CIPHER_SUITE_AES_CMAC:
58847916693SMing Yen Hsieh 		return CONNAC3_CIPHER_BIP_CMAC_128;
58947916693SMing Yen Hsieh 	case WLAN_CIPHER_SUITE_CCMP:
59047916693SMing Yen Hsieh 		return CONNAC3_CIPHER_AES_CCMP;
59147916693SMing Yen Hsieh 	case WLAN_CIPHER_SUITE_CCMP_256:
59247916693SMing Yen Hsieh 		return CONNAC3_CIPHER_CCMP_256;
59347916693SMing Yen Hsieh 	case WLAN_CIPHER_SUITE_GCMP:
59447916693SMing Yen Hsieh 		return CONNAC3_CIPHER_GCMP;
59547916693SMing Yen Hsieh 	case WLAN_CIPHER_SUITE_GCMP_256:
59647916693SMing Yen Hsieh 		return CONNAC3_CIPHER_GCMP_256;
59747916693SMing Yen Hsieh 	case WLAN_CIPHER_SUITE_SMS4:
59847916693SMing Yen Hsieh 		return CONNAC3_CIPHER_WAPI;
59947916693SMing Yen Hsieh 	default:
60047916693SMing Yen Hsieh 		return CONNAC3_CIPHER_NONE;
60147916693SMing Yen Hsieh 	}
60247916693SMing Yen Hsieh }
60347916693SMing Yen Hsieh 
604c948b5daSDeren Wu int mt7925_mcu_set_dbdc(struct mt76_phy *phy);
605c948b5daSDeren Wu int mt7925_mcu_hw_scan(struct mt76_phy *phy, struct ieee80211_vif *vif,
606c948b5daSDeren Wu 		       struct ieee80211_scan_request *scan_req);
607c948b5daSDeren Wu int mt7925_mcu_cancel_hw_scan(struct mt76_phy *phy,
608c948b5daSDeren Wu 			      struct ieee80211_vif *vif);
609c948b5daSDeren Wu int mt7925_mcu_sched_scan_req(struct mt76_phy *phy,
610c948b5daSDeren Wu 			      struct ieee80211_vif *vif,
611c948b5daSDeren Wu 			      struct cfg80211_sched_scan_request *sreq);
612c948b5daSDeren Wu int mt7925_mcu_sched_scan_enable(struct mt76_phy *phy,
613c948b5daSDeren Wu 				 struct ieee80211_vif *vif,
614c948b5daSDeren Wu 				 bool enable);
615c948b5daSDeren Wu int mt7925_mcu_add_bss_info(struct mt792x_phy *phy,
616c948b5daSDeren Wu 			    struct ieee80211_chanctx_conf *ctx,
617fa5f4446SSean Wang 			    struct ieee80211_bss_conf *link_conf,
618064a5955SSean Wang 			    struct ieee80211_link_sta *link_sta,
619c948b5daSDeren Wu 			    int enable);
6208536ef0aSMing Yen Hsieh int mt7925_mcu_set_timing(struct mt792x_phy *phy,
621b8b04b66SSean Wang 			  struct ieee80211_bss_conf *link_conf);
622c948b5daSDeren Wu int mt7925_mcu_set_deep_sleep(struct mt792x_dev *dev, bool enable);
623c948b5daSDeren Wu int mt7925_mcu_set_channel_domain(struct mt76_phy *phy);
624c948b5daSDeren Wu int mt7925_mcu_set_radio_en(struct mt792x_phy *phy, bool enable);
625c948b5daSDeren Wu int mt7925_mcu_set_chctx(struct mt76_phy *phy, struct mt76_vif *mvif,
626c948b5daSDeren Wu 			 struct ieee80211_chanctx_conf *ctx);
627c948b5daSDeren Wu int mt7925_mcu_set_rate_txpower(struct mt76_phy *phy);
628c948b5daSDeren Wu int mt7925_mcu_update_arp_filter(struct mt76_dev *dev,
62914732429SSean Wang 				 struct ieee80211_bss_conf *link_conf);
630c948b5daSDeren Wu #endif
631