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_evt {
108c948b5daSDeren Wu __le32 param0;
109c948b5daSDeren Wu __le32 param1;
110c948b5daSDeren Wu } __packed;
111c948b5daSDeren Wu
112c948b5daSDeren Wu enum {
113c948b5daSDeren Wu UNI_CHANNEL_SWITCH,
114c948b5daSDeren Wu UNI_CHANNEL_RX_PATH,
115c948b5daSDeren Wu };
116c948b5daSDeren Wu
117c948b5daSDeren Wu enum {
118c948b5daSDeren Wu UNI_CHIP_CONFIG_CHIP_CFG = 0x2,
119c948b5daSDeren Wu UNI_CHIP_CONFIG_NIC_CAPA = 0x3,
120c948b5daSDeren Wu };
121c948b5daSDeren Wu
122c948b5daSDeren Wu enum {
123c948b5daSDeren Wu UNI_BAND_CONFIG_RADIO_ENABLE,
124c948b5daSDeren Wu UNI_BAND_CONFIG_RTS_THRESHOLD = 0x08,
125c948b5daSDeren Wu UNI_BAND_CONFIG_SET_MAC80211_RX_FILTER = 0x0C,
126c948b5daSDeren Wu };
127c948b5daSDeren Wu
128c948b5daSDeren Wu enum {
129c948b5daSDeren Wu UNI_WSYS_CONFIG_FW_LOG_CTRL,
130c948b5daSDeren Wu UNI_WSYS_CONFIG_FW_DBG_CTRL,
131c948b5daSDeren Wu };
132c948b5daSDeren Wu
133c948b5daSDeren Wu enum {
134c948b5daSDeren Wu UNI_EFUSE_ACCESS = 1,
135c948b5daSDeren Wu UNI_EFUSE_BUFFER_MODE,
136c948b5daSDeren Wu UNI_EFUSE_FREE_BLOCK,
137c948b5daSDeren Wu UNI_EFUSE_BUFFER_RD,
138c948b5daSDeren Wu };
139c948b5daSDeren Wu
140c948b5daSDeren Wu enum {
141c948b5daSDeren Wu UNI_CMD_ACCESS_REG_BASIC = 0x0,
142c948b5daSDeren Wu UNI_CMD_ACCESS_RF_REG_BASIC,
143c948b5daSDeren Wu };
144c948b5daSDeren Wu
145c948b5daSDeren Wu enum {
146c948b5daSDeren Wu UNI_MBMC_SETTING,
147c948b5daSDeren Wu };
148c948b5daSDeren Wu
149c948b5daSDeren Wu enum {
150c948b5daSDeren Wu UNI_EVENT_SCAN_DONE_BASIC = 0,
151c948b5daSDeren Wu UNI_EVENT_SCAN_DONE_CHNLINFO = 2,
152c948b5daSDeren Wu UNI_EVENT_SCAN_DONE_NLO = 3,
153c948b5daSDeren Wu };
154c948b5daSDeren Wu
15547916693SMing Yen Hsieh enum connac3_mcu_cipher_type {
15647916693SMing Yen Hsieh CONNAC3_CIPHER_NONE = 0,
15747916693SMing Yen Hsieh CONNAC3_CIPHER_WEP40 = 1,
15847916693SMing Yen Hsieh CONNAC3_CIPHER_TKIP = 2,
15947916693SMing Yen Hsieh CONNAC3_CIPHER_AES_CCMP = 4,
16047916693SMing Yen Hsieh CONNAC3_CIPHER_WEP104 = 5,
16147916693SMing Yen Hsieh CONNAC3_CIPHER_BIP_CMAC_128 = 6,
16247916693SMing Yen Hsieh CONNAC3_CIPHER_WEP128 = 7,
16347916693SMing Yen Hsieh CONNAC3_CIPHER_WAPI = 8,
16447916693SMing Yen Hsieh CONNAC3_CIPHER_CCMP_256 = 10,
16547916693SMing Yen Hsieh CONNAC3_CIPHER_GCMP = 11,
16647916693SMing Yen Hsieh CONNAC3_CIPHER_GCMP_256 = 12,
16747916693SMing Yen Hsieh };
16847916693SMing Yen Hsieh
169c948b5daSDeren Wu struct mt7925_mcu_scan_chinfo_event {
170c948b5daSDeren Wu u8 nr_chan;
171c948b5daSDeren Wu u8 alpha2[3];
172c948b5daSDeren Wu } __packed;
173c948b5daSDeren Wu
174c948b5daSDeren Wu enum {
175c948b5daSDeren Wu UNI_SCAN_REQ = 1,
176c948b5daSDeren Wu UNI_SCAN_CANCEL = 2,
177c948b5daSDeren Wu UNI_SCAN_SCHED_REQ = 3,
178c948b5daSDeren Wu UNI_SCAN_SCHED_ENABLE = 4,
179c948b5daSDeren Wu UNI_SCAN_SSID = 10,
180c948b5daSDeren Wu UNI_SCAN_BSSID,
181c948b5daSDeren Wu UNI_SCAN_CHANNEL,
182c948b5daSDeren Wu UNI_SCAN_IE,
183c948b5daSDeren Wu UNI_SCAN_MISC,
184c948b5daSDeren Wu UNI_SCAN_SSID_MATCH_SETS,
185c948b5daSDeren Wu };
186c948b5daSDeren Wu
187c948b5daSDeren Wu enum {
188c948b5daSDeren Wu UNI_SNIFFER_ENABLE,
189c948b5daSDeren Wu UNI_SNIFFER_CONFIG,
190c948b5daSDeren Wu };
191c948b5daSDeren Wu
1928284815cSMing Yen Hsieh #define MT7925_RNR_SCAN_MAX_BSSIDS 10
193c948b5daSDeren Wu struct scan_hdr_tlv {
194c948b5daSDeren Wu /* fixed field */
195c948b5daSDeren Wu u8 seq_num;
196c948b5daSDeren Wu u8 bss_idx;
197c948b5daSDeren Wu u8 pad[2];
198c948b5daSDeren Wu /* tlv */
199c948b5daSDeren Wu u8 data[];
200c948b5daSDeren Wu } __packed;
201c948b5daSDeren Wu
202c948b5daSDeren Wu struct scan_req_tlv {
203c948b5daSDeren Wu __le16 tag;
204c948b5daSDeren Wu __le16 len;
205c948b5daSDeren Wu
206c948b5daSDeren Wu u8 scan_type; /* 0: PASSIVE SCAN
207c948b5daSDeren Wu * 1: ACTIVE SCAN
208c948b5daSDeren Wu */
209c948b5daSDeren Wu u8 probe_req_num; /* Number of probe request for each SSID */
210c948b5daSDeren Wu u8 scan_func; /* BIT(0) Enable random MAC scan
211c948b5daSDeren Wu * BIT(1) Disable DBDC scan type 1~3.
212c948b5daSDeren Wu * BIT(2) Use DBDC scan type 3 (dedicated one RF to scan).
213c948b5daSDeren Wu */
214c948b5daSDeren Wu u8 src_mask;
215c948b5daSDeren Wu __le16 channel_min_dwell_time;
216c948b5daSDeren Wu __le16 channel_dwell_time; /* channel Dwell interval */
217c948b5daSDeren Wu __le16 timeout_value;
218c948b5daSDeren Wu __le16 probe_delay_time;
2191f01276bSMing Yen Hsieh __le32 func_mask_ext;
2208284815cSMing Yen Hsieh } __packed;
221c948b5daSDeren Wu
222c948b5daSDeren Wu struct scan_ssid_tlv {
223c948b5daSDeren Wu __le16 tag;
224c948b5daSDeren Wu __le16 len;
225c948b5daSDeren Wu
226c948b5daSDeren Wu u8 ssid_type; /* BIT(0) wildcard SSID
227c948b5daSDeren Wu * BIT(1) P2P wildcard SSID
228c948b5daSDeren Wu * BIT(2) specified SSID + wildcard SSID
229c948b5daSDeren Wu * BIT(2) + ssid_type_ext BIT(0) specified SSID only
230c948b5daSDeren Wu */
231c948b5daSDeren Wu u8 ssids_num;
2328284815cSMing Yen Hsieh u8 is_short_ssid;
2338284815cSMing Yen Hsieh u8 pad;
2348284815cSMing Yen Hsieh struct mt76_connac_mcu_scan_ssid ssids[MT7925_RNR_SCAN_MAX_BSSIDS];
2358284815cSMing Yen Hsieh } __packed;
236c948b5daSDeren Wu
237c948b5daSDeren Wu struct scan_bssid_tlv {
238c948b5daSDeren Wu __le16 tag;
239c948b5daSDeren Wu __le16 len;
240c948b5daSDeren Wu
241c948b5daSDeren Wu u8 bssid[ETH_ALEN];
242c948b5daSDeren Wu u8 match_ch;
243c948b5daSDeren Wu u8 match_ssid_ind;
244c948b5daSDeren Wu u8 rcpi;
2458284815cSMing Yen Hsieh u8 match_short_ssid_ind;
2468284815cSMing Yen Hsieh u8 pad[2];
2478284815cSMing Yen Hsieh } __packed;
248c948b5daSDeren Wu
249c948b5daSDeren Wu struct scan_chan_info_tlv {
250c948b5daSDeren Wu __le16 tag;
251c948b5daSDeren Wu __le16 len;
252c948b5daSDeren Wu
253c948b5daSDeren Wu u8 channel_type; /* 0: Full channels
254c948b5daSDeren Wu * 1: Only 2.4GHz channels
255c948b5daSDeren Wu * 2: Only 5GHz channels
256c948b5daSDeren Wu * 3: P2P social channel only (channel #1, #6 and #11)
257c948b5daSDeren Wu * 4: Specified channels
258c948b5daSDeren Wu * Others: Reserved
259c948b5daSDeren Wu */
260c948b5daSDeren Wu u8 channels_num; /* valid when channel_type is 4 */
261c948b5daSDeren Wu u8 pad[2];
262c948b5daSDeren Wu struct mt76_connac_mcu_scan_channel channels[64];
2638284815cSMing Yen Hsieh } __packed;
264c948b5daSDeren Wu
265c948b5daSDeren Wu struct scan_ie_tlv {
266c948b5daSDeren Wu __le16 tag;
267c948b5daSDeren Wu __le16 len;
268c948b5daSDeren Wu
269c948b5daSDeren Wu __le16 ies_len;
270c948b5daSDeren Wu u8 band;
271c948b5daSDeren Wu u8 pad;
272c948b5daSDeren Wu u8 ies[];
273c948b5daSDeren Wu };
274c948b5daSDeren Wu
275c948b5daSDeren Wu struct scan_misc_tlv {
276c948b5daSDeren Wu __le16 tag;
277c948b5daSDeren Wu __le16 len;
278c948b5daSDeren Wu
279c948b5daSDeren Wu u8 random_mac[ETH_ALEN];
280c948b5daSDeren Wu u8 rsv[2];
281c948b5daSDeren Wu };
282c948b5daSDeren Wu
283c948b5daSDeren Wu struct scan_sched_req {
284c948b5daSDeren Wu __le16 tag;
285c948b5daSDeren Wu __le16 len;
286c948b5daSDeren Wu
287c948b5daSDeren Wu u8 version;
288c948b5daSDeren Wu u8 stop_on_match;
289c948b5daSDeren Wu u8 intervals_num;
290c948b5daSDeren Wu u8 scan_func;
291c948b5daSDeren Wu __le16 intervals[MT76_CONNAC_MAX_NUM_SCHED_SCAN_INTERVAL];
292c948b5daSDeren Wu };
293c948b5daSDeren Wu
294c948b5daSDeren Wu struct scan_sched_ssid_match_sets {
295c948b5daSDeren Wu __le16 tag;
296c948b5daSDeren Wu __le16 len;
297c948b5daSDeren Wu
298c948b5daSDeren Wu u8 match_num;
299c948b5daSDeren Wu u8 rsv[3];
300c948b5daSDeren Wu
301c948b5daSDeren Wu struct mt76_connac_mcu_scan_match match[MT76_CONNAC_MAX_SCAN_MATCH];
302c948b5daSDeren Wu };
303c948b5daSDeren Wu
304c948b5daSDeren Wu struct scan_sched_enable {
305c948b5daSDeren Wu __le16 tag;
306c948b5daSDeren Wu __le16 len;
307c948b5daSDeren Wu
308c948b5daSDeren Wu u8 active;
309c948b5daSDeren Wu u8 rsv[3];
310c948b5daSDeren Wu };
311c948b5daSDeren Wu
312c948b5daSDeren Wu struct mbmc_set_req {
313c948b5daSDeren Wu u8 pad[4];
314c948b5daSDeren Wu u8 data[];
315c948b5daSDeren Wu } __packed;
316c948b5daSDeren Wu
317c948b5daSDeren Wu struct mbmc_conf_tlv {
318c948b5daSDeren Wu __le16 tag;
319c948b5daSDeren Wu __le16 len;
320c948b5daSDeren Wu
321c948b5daSDeren Wu u8 mbmc_en;
322c948b5daSDeren Wu u8 band;
323c948b5daSDeren Wu u8 pad[2];
324c948b5daSDeren Wu } __packed;
325c948b5daSDeren Wu
326c948b5daSDeren Wu struct edca {
327c948b5daSDeren Wu __le16 tag;
328c948b5daSDeren Wu __le16 len;
329c948b5daSDeren Wu
330c948b5daSDeren Wu u8 queue;
331c948b5daSDeren Wu u8 set;
332c948b5daSDeren Wu u8 cw_min;
333c948b5daSDeren Wu u8 cw_max;
334c948b5daSDeren Wu __le16 txop;
335c948b5daSDeren Wu u8 aifs;
336c948b5daSDeren Wu u8 __rsv;
337c948b5daSDeren Wu };
338c948b5daSDeren Wu
339c948b5daSDeren Wu struct bss_req_hdr {
340c948b5daSDeren Wu u8 bss_idx;
341c948b5daSDeren Wu u8 __rsv[3];
342c948b5daSDeren Wu } __packed;
343c948b5daSDeren Wu
344c948b5daSDeren Wu struct bss_rate_tlv {
345c948b5daSDeren Wu __le16 tag;
346c948b5daSDeren Wu __le16 len;
347243cecc8Srong.yan u8 __rsv1[2];
348243cecc8Srong.yan __le16 basic_rate;
349c948b5daSDeren Wu __le16 bc_trans;
350c948b5daSDeren Wu __le16 mc_trans;
351c948b5daSDeren Wu u8 short_preamble;
352c948b5daSDeren Wu u8 bc_fixed_rate;
353c948b5daSDeren Wu u8 mc_fixed_rate;
354c948b5daSDeren Wu u8 __rsv2;
355c948b5daSDeren Wu } __packed;
356c948b5daSDeren Wu
357c948b5daSDeren Wu struct bss_mld_tlv {
358c948b5daSDeren Wu __le16 tag;
359c948b5daSDeren Wu __le16 len;
360c948b5daSDeren Wu u8 group_mld_id;
361c948b5daSDeren Wu u8 own_mld_id;
362c948b5daSDeren Wu u8 mac_addr[ETH_ALEN];
363c948b5daSDeren Wu u8 remap_idx;
364c948b5daSDeren Wu u8 link_id;
365f8a80a4eSSean Wang u8 eml_enable;
366f8a80a4eSSean Wang u8 max_link_num;
367f8a80a4eSSean Wang u8 hybrid_mode;
368f8a80a4eSSean Wang u8 __rsv[3];
369c948b5daSDeren Wu } __packed;
370c948b5daSDeren Wu
371cadebdadSAllan Wang struct bss_eht_tlv {
372cadebdadSAllan Wang __le16 tag;
373cadebdadSAllan Wang __le16 len;
374cadebdadSAllan Wang u8 is_eht_op_present;
375cadebdadSAllan Wang u8 is_eth_dscb_present;
376cadebdadSAllan Wang u8 eht_ctrl;
377cadebdadSAllan Wang u8 eht_ccfs0;
378cadebdadSAllan Wang u8 eht_ccfs1;
379cadebdadSAllan Wang u8 pad1;
380cadebdadSAllan Wang __le16 eht_dis_sub_chan_bitmap;
381cadebdadSAllan Wang u8 pad2[4];
382cadebdadSAllan Wang } __packed;
383cadebdadSAllan Wang
384c948b5daSDeren Wu struct sta_rec_ba_uni {
385c948b5daSDeren Wu __le16 tag;
386c948b5daSDeren Wu __le16 len;
387c948b5daSDeren Wu u8 tid;
388c948b5daSDeren Wu u8 ba_type;
389c948b5daSDeren Wu u8 amsdu;
390c948b5daSDeren Wu u8 ba_en;
391c948b5daSDeren Wu __le16 ssn;
392c948b5daSDeren Wu __le16 winsize;
393c948b5daSDeren Wu u8 ba_rdd_rro;
394c948b5daSDeren Wu u8 __rsv[3];
395c948b5daSDeren Wu } __packed;
396c948b5daSDeren Wu
397c948b5daSDeren Wu struct sta_rec_eht {
398c948b5daSDeren Wu __le16 tag;
399c948b5daSDeren Wu __le16 len;
400c948b5daSDeren Wu u8 tid_bitmap;
401c948b5daSDeren Wu u8 _rsv;
402c948b5daSDeren Wu __le16 mac_cap;
403c948b5daSDeren Wu __le64 phy_cap;
404c948b5daSDeren Wu __le64 phy_cap_ext;
405c948b5daSDeren Wu u8 mcs_map_bw20[4];
406c948b5daSDeren Wu u8 mcs_map_bw80[3];
407c948b5daSDeren Wu u8 mcs_map_bw160[3];
408c948b5daSDeren Wu u8 mcs_map_bw320[3];
409c948b5daSDeren Wu u8 _rsv2[3];
410c948b5daSDeren Wu } __packed;
411c948b5daSDeren Wu
412c948b5daSDeren Wu struct sta_rec_sec_uni {
413c948b5daSDeren Wu __le16 tag;
414c948b5daSDeren Wu __le16 len;
415c948b5daSDeren Wu u8 add;
41647916693SMing Yen Hsieh u8 tx_key;
41747916693SMing Yen Hsieh u8 key_type;
41847916693SMing Yen Hsieh u8 is_authenticator;
41947916693SMing Yen Hsieh u8 peer_addr[6];
42047916693SMing Yen Hsieh u8 bss_idx;
42147916693SMing Yen Hsieh u8 cipher_id;
42247916693SMing Yen Hsieh u8 key_id;
42347916693SMing Yen Hsieh u8 key_len;
42447916693SMing Yen Hsieh u8 wlan_idx;
42547916693SMing Yen Hsieh u8 mgmt_prot;
42647916693SMing Yen Hsieh u8 key[32];
42747916693SMing Yen Hsieh u8 key_rsc[16];
428c948b5daSDeren Wu } __packed;
429c948b5daSDeren Wu
430c948b5daSDeren Wu struct sta_rec_hdr_trans {
431c948b5daSDeren Wu __le16 tag;
432c948b5daSDeren Wu __le16 len;
433c948b5daSDeren Wu u8 from_ds;
434c948b5daSDeren Wu u8 to_ds;
435c948b5daSDeren Wu u8 dis_rx_hdr_tran;
436c948b5daSDeren Wu u8 rsv;
437c948b5daSDeren Wu } __packed;
438c948b5daSDeren Wu
439c948b5daSDeren Wu struct sta_rec_mld {
440c948b5daSDeren Wu __le16 tag;
441c948b5daSDeren Wu __le16 len;
442c948b5daSDeren Wu u8 mac_addr[ETH_ALEN];
443c948b5daSDeren Wu __le16 primary_id;
444c948b5daSDeren Wu __le16 secondary_id;
445c948b5daSDeren Wu __le16 wlan_id;
446c948b5daSDeren Wu u8 link_num;
447c948b5daSDeren Wu u8 rsv[3];
448c948b5daSDeren Wu struct {
449c948b5daSDeren Wu __le16 wlan_id;
450c948b5daSDeren Wu u8 bss_idx;
451c948b5daSDeren Wu u8 rsv;
452c948b5daSDeren Wu } __packed link[2];
453c948b5daSDeren Wu } __packed;
454c948b5daSDeren Wu
4556db8639bSSean Wang struct sta_rec_eht_mld {
4566db8639bSSean Wang __le16 tag;
4576db8639bSSean Wang __le16 len;
4586db8639bSSean Wang u8 nsep;
4596db8639bSSean Wang u8 mld_type;
4606db8639bSSean Wang u8 __rsv1[1];
4616db8639bSSean Wang u8 str_cap[3];
4626db8639bSSean Wang u8 eml_cap[3];
4636db8639bSSean Wang u8 __rsv2[3];
4646db8639bSSean Wang } __packed;
4656db8639bSSean Wang
4668536ef0aSMing Yen Hsieh struct bss_ifs_time_tlv {
4678536ef0aSMing Yen Hsieh __le16 tag;
4688536ef0aSMing Yen Hsieh __le16 len;
4698536ef0aSMing Yen Hsieh u8 slot_valid;
4708536ef0aSMing Yen Hsieh u8 sifs_valid;
4718536ef0aSMing Yen Hsieh u8 rifs_valid;
4728536ef0aSMing Yen Hsieh u8 eifs_valid;
4738536ef0aSMing Yen Hsieh __le16 slot_time;
4748536ef0aSMing Yen Hsieh __le16 sifs_time;
4758536ef0aSMing Yen Hsieh __le16 rifs_time;
4768536ef0aSMing Yen Hsieh __le16 eifs_time;
4778536ef0aSMing Yen Hsieh u8 eifs_cck_valid;
4788536ef0aSMing Yen Hsieh u8 rsv;
4798536ef0aSMing Yen Hsieh __le16 eifs_cck_time;
4808536ef0aSMing Yen Hsieh } __packed;
4818536ef0aSMing Yen Hsieh
482ca64503aSSean Wang struct bss_rlm_tlv {
483ca64503aSSean Wang __le16 tag;
484ca64503aSSean Wang __le16 len;
485ca64503aSSean Wang u8 control_channel;
486ca64503aSSean Wang u8 center_chan;
487ca64503aSSean Wang u8 center_chan2;
488ca64503aSSean Wang u8 bw;
489ca64503aSSean Wang u8 tx_streams;
490ca64503aSSean Wang u8 rx_streams;
491ca64503aSSean Wang u8 ht_op_info;
492ca64503aSSean Wang u8 sco;
493ca64503aSSean Wang u8 band;
494ca64503aSSean Wang u8 pad[3];
495ca64503aSSean Wang } __packed;
496ca64503aSSean Wang
497c948b5daSDeren Wu #define MT7925_STA_UPDATE_MAX_SIZE (sizeof(struct sta_req_hdr) + \
498c948b5daSDeren Wu sizeof(struct sta_rec_basic) + \
499c948b5daSDeren Wu sizeof(struct sta_rec_bf) + \
500c948b5daSDeren Wu sizeof(struct sta_rec_ht) + \
501c948b5daSDeren Wu sizeof(struct sta_rec_he_v2) + \
502c948b5daSDeren Wu sizeof(struct sta_rec_ba_uni) + \
503c948b5daSDeren Wu sizeof(struct sta_rec_vht) + \
504c948b5daSDeren Wu sizeof(struct sta_rec_uapsd) + \
505c948b5daSDeren Wu sizeof(struct sta_rec_amsdu) + \
506c948b5daSDeren Wu sizeof(struct sta_rec_bfee) + \
507c948b5daSDeren Wu sizeof(struct sta_rec_phy) + \
508c948b5daSDeren Wu sizeof(struct sta_rec_ra) + \
50947916693SMing Yen Hsieh sizeof(struct sta_rec_sec_uni) + \
510c948b5daSDeren Wu sizeof(struct sta_rec_ra_fixed) + \
511c948b5daSDeren Wu sizeof(struct sta_rec_he_6g_capa) + \
512c948b5daSDeren Wu sizeof(struct sta_rec_eht) + \
513c948b5daSDeren Wu sizeof(struct sta_rec_hdr_trans) + \
514c948b5daSDeren Wu sizeof(struct sta_rec_mld) + \
515a5942a39SSean Wang sizeof(struct tlv) * 2 + \
516a5942a39SSean Wang sizeof(struct sta_rec_remove))
517c948b5daSDeren Wu
518c948b5daSDeren Wu #define MT7925_BSS_UPDATE_MAX_SIZE (sizeof(struct bss_req_hdr) + \
519c948b5daSDeren Wu sizeof(struct mt76_connac_bss_basic_tlv) + \
520c948b5daSDeren Wu sizeof(struct mt76_connac_bss_qos_tlv) + \
521c948b5daSDeren Wu sizeof(struct bss_rate_tlv) + \
522c948b5daSDeren Wu sizeof(struct bss_mld_tlv) + \
523c948b5daSDeren Wu sizeof(struct bss_info_uni_he) + \
524c948b5daSDeren Wu sizeof(struct bss_info_uni_bss_color) + \
5258536ef0aSMing Yen Hsieh sizeof(struct bss_ifs_time_tlv) + \
526ca64503aSSean Wang sizeof(struct bss_rlm_tlv) + \
527c948b5daSDeren Wu sizeof(struct tlv))
528c948b5daSDeren Wu
529c948b5daSDeren Wu #define MT_CONNAC3_SKU_POWER_LIMIT 449
530c948b5daSDeren Wu struct mt7925_sku_tlv {
531c948b5daSDeren Wu u8 channel;
532c948b5daSDeren Wu s8 pwr_limit[MT_CONNAC3_SKU_POWER_LIMIT];
533c948b5daSDeren Wu } __packed;
534c948b5daSDeren Wu
535c948b5daSDeren Wu struct mt7925_tx_power_limit_tlv {
536c948b5daSDeren Wu u8 rsv[4];
537c948b5daSDeren Wu
538c948b5daSDeren Wu __le16 tag;
539c948b5daSDeren Wu __le16 len;
540c948b5daSDeren Wu
541c948b5daSDeren Wu /* DW0 - common info*/
542c948b5daSDeren Wu u8 ver;
543c948b5daSDeren Wu u8 pad0;
544c948b5daSDeren Wu __le16 rsv1;
545c948b5daSDeren Wu /* DW1 - cmd hint */
546c948b5daSDeren Wu u8 n_chan; /* # channel */
547c948b5daSDeren Wu u8 band; /* 2.4GHz - 5GHz - 6GHz */
548c948b5daSDeren Wu u8 last_msg;
549c948b5daSDeren Wu u8 limit_type;
550c948b5daSDeren Wu /* DW3 */
551c948b5daSDeren Wu u8 alpha2[4]; /* regulatory_request.alpha2 */
552c948b5daSDeren Wu u8 pad2[32];
553c948b5daSDeren Wu
554c948b5daSDeren Wu u8 data[];
555c948b5daSDeren Wu } __packed;
556c948b5daSDeren Wu
557c948b5daSDeren Wu struct mt7925_arpns_tlv {
558c948b5daSDeren Wu __le16 tag;
559c948b5daSDeren Wu __le16 len;
560c948b5daSDeren Wu
561c948b5daSDeren Wu u8 enable;
562c948b5daSDeren Wu u8 ips_num;
563c948b5daSDeren Wu u8 rsv[2];
564c948b5daSDeren Wu } __packed;
565c948b5daSDeren Wu
566c948b5daSDeren Wu struct mt7925_wow_pattern_tlv {
567c948b5daSDeren Wu __le16 tag;
568c948b5daSDeren Wu __le16 len;
569c948b5daSDeren Wu u8 bss_idx;
570c948b5daSDeren Wu u8 index; /* pattern index */
571c948b5daSDeren Wu u8 enable; /* 0: disable
572c948b5daSDeren Wu * 1: enable
573c948b5daSDeren Wu */
574c948b5daSDeren Wu u8 data_len; /* pattern length */
575c948b5daSDeren Wu u8 offset;
576c948b5daSDeren Wu u8 mask[MT76_CONNAC_WOW_MASK_MAX_LEN];
577c948b5daSDeren Wu u8 pattern[MT76_CONNAC_WOW_PATTEN_MAX_LEN];
5788ae45b1fSMing Yen Hsieh u8 rsv[4];
5798ae45b1fSMing Yen Hsieh };
580c948b5daSDeren Wu
58169acd6d9SSean Wang struct roc_acquire_tlv {
58269acd6d9SSean Wang __le16 tag;
58369acd6d9SSean Wang __le16 len;
58469acd6d9SSean Wang u8 bss_idx;
58569acd6d9SSean Wang u8 tokenid;
58669acd6d9SSean Wang u8 control_channel;
58769acd6d9SSean Wang u8 sco;
58869acd6d9SSean Wang u8 band;
58969acd6d9SSean Wang u8 bw;
59069acd6d9SSean Wang u8 center_chan;
59169acd6d9SSean Wang u8 center_chan2;
59269acd6d9SSean Wang u8 bw_from_ap;
59369acd6d9SSean Wang u8 center_chan_from_ap;
59469acd6d9SSean Wang u8 center_chan2_from_ap;
59569acd6d9SSean Wang u8 reqtype;
59669acd6d9SSean Wang __le32 maxinterval;
59769acd6d9SSean Wang u8 dbdcband;
59869acd6d9SSean Wang u8 rsv[3];
59969acd6d9SSean Wang } __packed;
60069acd6d9SSean Wang
601*ba7fe3b0SMichael Lo enum ENUM_CMD_TEST_CTRL_ACT {
602*ba7fe3b0SMichael Lo CMD_TEST_CTRL_ACT_SWITCH_MODE = 0,
603*ba7fe3b0SMichael Lo CMD_TEST_CTRL_ACT_SET_AT = 1,
604*ba7fe3b0SMichael Lo CMD_TEST_CTRL_ACT_GET_AT = 2,
605*ba7fe3b0SMichael Lo CMD_TEST_CTRL_ACT_SET_AT_ENG = 3,
606*ba7fe3b0SMichael Lo CMD_TEST_CTRL_ACT_GET_AT_ENG = 4,
607*ba7fe3b0SMichael Lo CMD_TEST_CTRL_ACT_NUM
608*ba7fe3b0SMichael Lo };
609*ba7fe3b0SMichael Lo
610*ba7fe3b0SMichael Lo enum ENUM_CMD_TEST_CTRL_ACT_SWITCH_MODE_OP {
611*ba7fe3b0SMichael Lo CMD_TEST_CTRL_ACT_SWITCH_MODE_NORMAL = 0,
612*ba7fe3b0SMichael Lo CMD_TEST_CTRL_ACT_SWITCH_MODE_RF_TEST = 1,
613*ba7fe3b0SMichael Lo CMD_TEST_CTRL_ACT_SWITCH_MODE_ICAP = 2,
614*ba7fe3b0SMichael Lo CMD_TEST_CTRL_ACT_SWITCH_MODE_NUM
615*ba7fe3b0SMichael Lo };
616*ba7fe3b0SMichael Lo
617*ba7fe3b0SMichael Lo union testmode_data {
618*ba7fe3b0SMichael Lo __le32 op_mode;
619*ba7fe3b0SMichael Lo __le32 channel_freq;
620*ba7fe3b0SMichael Lo u8 rf_at_info[84];
621*ba7fe3b0SMichael Lo };
622*ba7fe3b0SMichael Lo
623*ba7fe3b0SMichael Lo union testmode_evt {
624*ba7fe3b0SMichael Lo __le32 op_mode;
625*ba7fe3b0SMichael Lo __le32 channel_freq;
626*ba7fe3b0SMichael Lo u8 rf_at_info[1024];
627*ba7fe3b0SMichael Lo };
628*ba7fe3b0SMichael Lo
629*ba7fe3b0SMichael Lo struct uni_cmd_testmode_ctrl {
630*ba7fe3b0SMichael Lo u16 tag;
631*ba7fe3b0SMichael Lo u16 length;
632*ba7fe3b0SMichael Lo u8 action;
633*ba7fe3b0SMichael Lo u8 reserved[3];
634*ba7fe3b0SMichael Lo union testmode_data data;
635*ba7fe3b0SMichael Lo } __packed;
636*ba7fe3b0SMichael Lo
637*ba7fe3b0SMichael Lo struct mt7925_rftest_cmd {
638*ba7fe3b0SMichael Lo u8 padding[4];
639*ba7fe3b0SMichael Lo struct uni_cmd_testmode_ctrl ctrl;
640*ba7fe3b0SMichael Lo } __packed;
641*ba7fe3b0SMichael Lo
64247916693SMing Yen Hsieh static inline enum connac3_mcu_cipher_type
mt7925_mcu_get_cipher(int cipher)64347916693SMing Yen Hsieh mt7925_mcu_get_cipher(int cipher)
64447916693SMing Yen Hsieh {
64547916693SMing Yen Hsieh switch (cipher) {
64647916693SMing Yen Hsieh case WLAN_CIPHER_SUITE_WEP40:
64747916693SMing Yen Hsieh return CONNAC3_CIPHER_WEP40;
64847916693SMing Yen Hsieh case WLAN_CIPHER_SUITE_WEP104:
64947916693SMing Yen Hsieh return CONNAC3_CIPHER_WEP104;
65047916693SMing Yen Hsieh case WLAN_CIPHER_SUITE_TKIP:
65147916693SMing Yen Hsieh return CONNAC3_CIPHER_TKIP;
65247916693SMing Yen Hsieh case WLAN_CIPHER_SUITE_AES_CMAC:
65347916693SMing Yen Hsieh return CONNAC3_CIPHER_BIP_CMAC_128;
65447916693SMing Yen Hsieh case WLAN_CIPHER_SUITE_CCMP:
65547916693SMing Yen Hsieh return CONNAC3_CIPHER_AES_CCMP;
65647916693SMing Yen Hsieh case WLAN_CIPHER_SUITE_CCMP_256:
65747916693SMing Yen Hsieh return CONNAC3_CIPHER_CCMP_256;
65847916693SMing Yen Hsieh case WLAN_CIPHER_SUITE_GCMP:
65947916693SMing Yen Hsieh return CONNAC3_CIPHER_GCMP;
66047916693SMing Yen Hsieh case WLAN_CIPHER_SUITE_GCMP_256:
66147916693SMing Yen Hsieh return CONNAC3_CIPHER_GCMP_256;
66247916693SMing Yen Hsieh case WLAN_CIPHER_SUITE_SMS4:
66347916693SMing Yen Hsieh return CONNAC3_CIPHER_WAPI;
66447916693SMing Yen Hsieh default:
66547916693SMing Yen Hsieh return CONNAC3_CIPHER_NONE;
66647916693SMing Yen Hsieh }
66747916693SMing Yen Hsieh }
66847916693SMing Yen Hsieh
66981616105SMing Yen Hsieh int mt7925_mcu_set_dbdc(struct mt76_phy *phy, bool enable);
670c948b5daSDeren Wu int mt7925_mcu_hw_scan(struct mt76_phy *phy, struct ieee80211_vif *vif,
671c948b5daSDeren Wu struct ieee80211_scan_request *scan_req);
672c948b5daSDeren Wu int mt7925_mcu_cancel_hw_scan(struct mt76_phy *phy,
673c948b5daSDeren Wu struct ieee80211_vif *vif);
674c948b5daSDeren Wu int mt7925_mcu_sched_scan_req(struct mt76_phy *phy,
675c948b5daSDeren Wu struct ieee80211_vif *vif,
676c948b5daSDeren Wu struct cfg80211_sched_scan_request *sreq,
677c948b5daSDeren Wu struct ieee80211_scan_ies *ies);
678c948b5daSDeren Wu int mt7925_mcu_sched_scan_enable(struct mt76_phy *phy,
679c948b5daSDeren Wu struct ieee80211_vif *vif,
6800ebb60daSMing Yen Hsieh bool enable);
6810ebb60daSMing Yen Hsieh void mt7925_mcu_del_dev(struct mt76_dev *mdev,
682c948b5daSDeren Wu struct ieee80211_vif *vif);
683c948b5daSDeren Wu int mt7925_mcu_add_bss_info(struct mt792x_phy *phy,
684fa5f4446SSean Wang struct ieee80211_chanctx_conf *ctx,
685064a5955SSean Wang struct ieee80211_bss_conf *link_conf,
686c948b5daSDeren Wu struct ieee80211_link_sta *link_sta,
6878536ef0aSMing Yen Hsieh int enable);
688b8b04b66SSean Wang int mt7925_mcu_set_timing(struct mt792x_phy *phy,
689c948b5daSDeren Wu struct ieee80211_bss_conf *link_conf);
6901d81e893SLeon Yen int mt7925_mcu_set_deep_sleep(struct mt792x_dev *dev, bool enable);
691c948b5daSDeren Wu int mt7925_mcu_set_thermal_protect(struct mt792x_dev *dev);
692c948b5daSDeren Wu int mt7925_mcu_set_channel_domain(struct mt76_phy *phy);
693bf18f717SFelix Fietkau int mt7925_mcu_set_radio_en(struct mt792x_phy *phy, bool enable);
694621e9e22SSean Wang int mt7925_mcu_set_chctx(struct mt76_phy *phy, struct mt76_vif_link *mvif,
695c948b5daSDeren Wu struct ieee80211_bss_conf *link_conf,
696cadebdadSAllan Wang struct ieee80211_chanctx_conf *ctx);
697cadebdadSAllan Wang int mt7925_mcu_set_eht_pp(struct mt76_phy *phy, struct mt76_vif_link *mvif,
698cadebdadSAllan Wang struct ieee80211_bss_conf *link_conf,
699c948b5daSDeren Wu struct ieee80211_chanctx_conf *ctx);
700c948b5daSDeren Wu int mt7925_mcu_set_rate_txpower(struct mt76_phy *phy);
70114732429SSean Wang int mt7925_mcu_update_arp_filter(struct mt76_dev *dev,
7028dafab9cSMing Yen Hsieh struct ieee80211_bss_conf *link_conf);
7038dafab9cSMing Yen Hsieh int
7048dafab9cSMing Yen Hsieh mt7925_mcu_uni_bss_bcnft(struct mt792x_dev *dev,
705c948b5daSDeren Wu struct ieee80211_bss_conf *link_conf, bool enable);
706 #endif
707