198686cd2SShayne Chen /* SPDX-License-Identifier: ISC */
298686cd2SShayne Chen /*
398686cd2SShayne Chen  * Copyright (C) 2022 MediaTek Inc.
498686cd2SShayne Chen  */
598686cd2SShayne Chen 
698686cd2SShayne Chen #ifndef __MT7996_MCU_H
798686cd2SShayne Chen #define __MT7996_MCU_H
898686cd2SShayne Chen 
998686cd2SShayne Chen #include "../mt76_connac_mcu.h"
1098686cd2SShayne Chen 
1198686cd2SShayne Chen struct mt7996_mcu_rxd {
1298686cd2SShayne Chen 	__le32 rxd[8];
1398686cd2SShayne Chen 
1498686cd2SShayne Chen 	__le16 len;
1598686cd2SShayne Chen 	__le16 pkt_type_id;
1698686cd2SShayne Chen 
1798686cd2SShayne Chen 	u8 eid;
1898686cd2SShayne Chen 	u8 seq;
1998686cd2SShayne Chen 	u8 option;
2098686cd2SShayne Chen 	u8 __rsv;
2198686cd2SShayne Chen 
2298686cd2SShayne Chen 	u8 ext_eid;
2398686cd2SShayne Chen 	u8 __rsv1[2];
2498686cd2SShayne Chen 	u8 s2d_index;
2598686cd2SShayne Chen };
2698686cd2SShayne Chen 
2798686cd2SShayne Chen struct mt7996_mcu_uni_event {
2898686cd2SShayne Chen 	u8 cid;
2998686cd2SShayne Chen 	u8 __rsv[3];
3098686cd2SShayne Chen 	__le32 status; /* 0: success, others: fail */
3198686cd2SShayne Chen } __packed;
3298686cd2SShayne Chen 
3398686cd2SShayne Chen struct mt7996_mcu_csa_notify {
3498686cd2SShayne Chen 	struct mt7996_mcu_rxd rxd;
3598686cd2SShayne Chen 
3698686cd2SShayne Chen 	u8 omac_idx;
3798686cd2SShayne Chen 	u8 csa_count;
3898686cd2SShayne Chen 	u8 band_idx;
3998686cd2SShayne Chen 	u8 rsv;
4098686cd2SShayne Chen } __packed;
4198686cd2SShayne Chen 
4298686cd2SShayne Chen struct mt7996_mcu_rdd_report {
4398686cd2SShayne Chen 	struct mt7996_mcu_rxd rxd;
4498686cd2SShayne Chen 
4598686cd2SShayne Chen 	u8 __rsv1[4];
4698686cd2SShayne Chen 
4798686cd2SShayne Chen 	__le16 tag;
4898686cd2SShayne Chen 	__le16 len;
4998686cd2SShayne Chen 
5098686cd2SShayne Chen 	u8 band_idx;
5198686cd2SShayne Chen 	u8 long_detected;
5298686cd2SShayne Chen 	u8 constant_prf_detected;
5398686cd2SShayne Chen 	u8 staggered_prf_detected;
5498686cd2SShayne Chen 	u8 radar_type_idx;
5598686cd2SShayne Chen 	u8 periodic_pulse_num;
5698686cd2SShayne Chen 	u8 long_pulse_num;
5798686cd2SShayne Chen 	u8 hw_pulse_num;
5898686cd2SShayne Chen 
5998686cd2SShayne Chen 	u8 out_lpn;
6098686cd2SShayne Chen 	u8 out_spn;
6198686cd2SShayne Chen 	u8 out_crpn;
6298686cd2SShayne Chen 	u8 out_crpw;
6398686cd2SShayne Chen 	u8 out_crbn;
6498686cd2SShayne Chen 	u8 out_stgpn;
6598686cd2SShayne Chen 	u8 out_stgpw;
6698686cd2SShayne Chen 
6798686cd2SShayne Chen 	u8 __rsv2;
6898686cd2SShayne Chen 
6998686cd2SShayne Chen 	__le32 out_pri_const;
7098686cd2SShayne Chen 	__le32 out_pri_stg[3];
7198686cd2SShayne Chen 	__le32 out_pri_stg_dmin;
7298686cd2SShayne Chen 
7398686cd2SShayne Chen 	struct {
7498686cd2SShayne Chen 		__le32 start;
7598686cd2SShayne Chen 		__le16 pulse_width;
7698686cd2SShayne Chen 		__le16 pulse_power;
7798686cd2SShayne Chen 		u8 mdrdy_flag;
7898686cd2SShayne Chen 		u8 rsv[3];
7998686cd2SShayne Chen 	} long_pulse[32];
8098686cd2SShayne Chen 
8198686cd2SShayne Chen 	struct {
8298686cd2SShayne Chen 		__le32 start;
8398686cd2SShayne Chen 		__le16 pulse_width;
8498686cd2SShayne Chen 		__le16 pulse_power;
8598686cd2SShayne Chen 		u8 mdrdy_flag;
8698686cd2SShayne Chen 		u8 rsv[3];
8798686cd2SShayne Chen 	} periodic_pulse[32];
8898686cd2SShayne Chen 
8998686cd2SShayne Chen 	struct {
9098686cd2SShayne Chen 		__le32 start;
9198686cd2SShayne Chen 		__le16 pulse_width;
9298686cd2SShayne Chen 		__le16 pulse_power;
9398686cd2SShayne Chen 		u8 sc_pass;
9498686cd2SShayne Chen 		u8 sw_reset;
9598686cd2SShayne Chen 		u8 mdrdy_flag;
9698686cd2SShayne Chen 		u8 tx_active;
9798686cd2SShayne Chen 	} hw_pulse[32];
9898686cd2SShayne Chen } __packed;
9998686cd2SShayne Chen 
10098686cd2SShayne Chen struct mt7996_mcu_background_chain_ctrl {
10198686cd2SShayne Chen 	u8 _rsv[4];
10298686cd2SShayne Chen 
10398686cd2SShayne Chen 	__le16 tag;
10498686cd2SShayne Chen 	__le16 len;
10598686cd2SShayne Chen 
10698686cd2SShayne Chen 	u8 chan;		/* primary channel */
10798686cd2SShayne Chen 	u8 central_chan;	/* central channel */
10898686cd2SShayne Chen 	u8 bw;
10998686cd2SShayne Chen 	u8 tx_stream;
11098686cd2SShayne Chen 	u8 rx_stream;
11198686cd2SShayne Chen 
11298686cd2SShayne Chen 	u8 monitor_chan;	/* monitor channel */
11398686cd2SShayne Chen 	u8 monitor_central_chan;/* monitor central channel */
11498686cd2SShayne Chen 	u8 monitor_bw;
11598686cd2SShayne Chen 	u8 monitor_tx_stream;
11698686cd2SShayne Chen 	u8 monitor_rx_stream;
11798686cd2SShayne Chen 
11898686cd2SShayne Chen 	u8 scan_mode;		/* 0: ScanStop
11998686cd2SShayne Chen 				 * 1: ScanStart
12098686cd2SShayne Chen 				 * 2: ScanRunning
12198686cd2SShayne Chen 				 */
12298686cd2SShayne Chen 	u8 band_idx;		/* DBDC */
12398686cd2SShayne Chen 	u8 monitor_scan_type;
12498686cd2SShayne Chen 	u8 band;		/* 0: 2.4GHz, 1: 5GHz */
12598686cd2SShayne Chen 	u8 rsv[2];
12698686cd2SShayne Chen } __packed;
12798686cd2SShayne Chen 
12898686cd2SShayne Chen struct mt7996_mcu_eeprom {
12998686cd2SShayne Chen 	u8 _rsv[4];
13098686cd2SShayne Chen 
13198686cd2SShayne Chen 	__le16 tag;
13298686cd2SShayne Chen 	__le16 len;
13398686cd2SShayne Chen 	u8 buffer_mode;
13498686cd2SShayne Chen 	u8 format;
13598686cd2SShayne Chen 	__le16 buf_len;
13698686cd2SShayne Chen } __packed;
13798686cd2SShayne Chen 
13898686cd2SShayne Chen struct mt7996_mcu_phy_rx_info {
13998686cd2SShayne Chen 	u8 category;
14098686cd2SShayne Chen 	u8 rate;
14198686cd2SShayne Chen 	u8 mode;
14298686cd2SShayne Chen 	u8 nsts;
14398686cd2SShayne Chen 	u8 gi;
14498686cd2SShayne Chen 	u8 coding;
14598686cd2SShayne Chen 	u8 stbc;
14698686cd2SShayne Chen 	u8 bw;
14798686cd2SShayne Chen };
14898686cd2SShayne Chen 
14998686cd2SShayne Chen struct mt7996_mcu_mib {
15098686cd2SShayne Chen 	__le16 tag;
15198686cd2SShayne Chen 	__le16 len;
15298686cd2SShayne Chen 	__le32 offs;
15398686cd2SShayne Chen 	__le64 data;
15498686cd2SShayne Chen } __packed;
15598686cd2SShayne Chen 
15698686cd2SShayne Chen enum mt7996_chan_mib_offs {
15798686cd2SShayne Chen 	UNI_MIB_OBSS_AIRTIME = 26,
15898686cd2SShayne Chen 	UNI_MIB_NON_WIFI_TIME = 27,
15998686cd2SShayne Chen 	UNI_MIB_TX_TIME = 28,
16098686cd2SShayne Chen 	UNI_MIB_RX_TIME = 29
16198686cd2SShayne Chen };
16298686cd2SShayne Chen 
16398686cd2SShayne Chen struct edca {
16498686cd2SShayne Chen 	__le16 tag;
16598686cd2SShayne Chen 	__le16 len;
16698686cd2SShayne Chen 
16798686cd2SShayne Chen 	u8 queue;
16898686cd2SShayne Chen 	u8 set;
16998686cd2SShayne Chen 	u8 cw_min;
17098686cd2SShayne Chen 	u8 cw_max;
17198686cd2SShayne Chen 	__le16 txop;
17298686cd2SShayne Chen 	u8 aifs;
17398686cd2SShayne Chen 	u8 __rsv;
17498686cd2SShayne Chen };
17598686cd2SShayne Chen 
17698686cd2SShayne Chen #define MCU_PQ_ID(p, q)			(((p) << 15) | ((q) << 10))
17798686cd2SShayne Chen #define MCU_PKT_ID			0xa0
17898686cd2SShayne Chen 
17998686cd2SShayne Chen enum {
18098686cd2SShayne Chen 	MCU_FW_LOG_WM,
18198686cd2SShayne Chen 	MCU_FW_LOG_WA,
18298686cd2SShayne Chen 	MCU_FW_LOG_TO_HOST,
18398686cd2SShayne Chen 	MCU_FW_LOG_RELAY = 16
18498686cd2SShayne Chen };
18598686cd2SShayne Chen 
18698686cd2SShayne Chen enum {
18798686cd2SShayne Chen 	MCU_TWT_AGRT_ADD,
18898686cd2SShayne Chen 	MCU_TWT_AGRT_MODIFY,
18998686cd2SShayne Chen 	MCU_TWT_AGRT_DELETE,
19098686cd2SShayne Chen 	MCU_TWT_AGRT_TEARDOWN,
19198686cd2SShayne Chen 	MCU_TWT_AGRT_GET_TSF,
19298686cd2SShayne Chen };
19398686cd2SShayne Chen 
19498686cd2SShayne Chen enum {
19598686cd2SShayne Chen 	MCU_WA_PARAM_CMD_QUERY,
19698686cd2SShayne Chen 	MCU_WA_PARAM_CMD_SET,
19798686cd2SShayne Chen 	MCU_WA_PARAM_CMD_CAPABILITY,
19898686cd2SShayne Chen 	MCU_WA_PARAM_CMD_DEBUG,
19998686cd2SShayne Chen };
20098686cd2SShayne Chen 
20198686cd2SShayne Chen enum {
20298686cd2SShayne Chen 	MCU_WA_PARAM_PDMA_RX = 0x04,
20398686cd2SShayne Chen 	MCU_WA_PARAM_CPU_UTIL = 0x0b,
20498686cd2SShayne Chen 	MCU_WA_PARAM_RED = 0x0e,
20598686cd2SShayne Chen 	MCU_WA_PARAM_HW_PATH_HIF_VER = 0x2f,
20698686cd2SShayne Chen };
20798686cd2SShayne Chen 
20898686cd2SShayne Chen enum mcu_mmps_mode {
20998686cd2SShayne Chen 	MCU_MMPS_STATIC,
21098686cd2SShayne Chen 	MCU_MMPS_DYNAMIC,
21198686cd2SShayne Chen 	MCU_MMPS_RSV,
21298686cd2SShayne Chen 	MCU_MMPS_DISABLE,
21398686cd2SShayne Chen };
21498686cd2SShayne Chen 
21598686cd2SShayne Chen struct bss_rate_tlv {
21698686cd2SShayne Chen 	__le16 tag;
21798686cd2SShayne Chen 	__le16 len;
21898686cd2SShayne Chen 	u8 __rsv1[4];
21998686cd2SShayne Chen 	__le16 bc_trans;
22098686cd2SShayne Chen 	__le16 mc_trans;
22198686cd2SShayne Chen 	u8 short_preamble;
22298686cd2SShayne Chen 	u8 bc_fixed_rate;
22398686cd2SShayne Chen 	u8 mc_fixed_rate;
224*041f75b3SSujuan Chen 	u8 __rsv2[9];
22598686cd2SShayne Chen } __packed;
22698686cd2SShayne Chen 
22798686cd2SShayne Chen struct bss_ra_tlv {
22898686cd2SShayne Chen 	__le16 tag;
22998686cd2SShayne Chen 	__le16 len;
23098686cd2SShayne Chen 	u8 short_preamble;
23198686cd2SShayne Chen 	u8 force_sgi;
23298686cd2SShayne Chen 	u8 force_gf;
23398686cd2SShayne Chen 	u8 ht_mode;
23498686cd2SShayne Chen 	u8 se_off;
23598686cd2SShayne Chen 	u8 antenna_idx;
23698686cd2SShayne Chen 	__le16 max_phyrate;
23798686cd2SShayne Chen 	u8 force_tx_streams;
23898686cd2SShayne Chen 	u8 __rsv[3];
23998686cd2SShayne Chen } __packed;
24098686cd2SShayne Chen 
24198686cd2SShayne Chen struct bss_rlm_tlv {
24298686cd2SShayne Chen 	__le16 tag;
24398686cd2SShayne Chen 	__le16 len;
24498686cd2SShayne Chen 	u8 control_channel;
24598686cd2SShayne Chen 	u8 center_chan;
24698686cd2SShayne Chen 	u8 center_chan2;
24798686cd2SShayne Chen 	u8 bw;
24898686cd2SShayne Chen 	u8 tx_streams;
24998686cd2SShayne Chen 	u8 rx_streams;
25098686cd2SShayne Chen 	u8 ht_op_info;
25198686cd2SShayne Chen 	u8 sco;
25298686cd2SShayne Chen 	u8 band;
25398686cd2SShayne Chen 	u8 __rsv[3];
25498686cd2SShayne Chen } __packed;
25598686cd2SShayne Chen 
25698686cd2SShayne Chen struct bss_color_tlv {
25798686cd2SShayne Chen 	__le16 tag;
25898686cd2SShayne Chen 	__le16 len;
25998686cd2SShayne Chen 	u8 enable;
26098686cd2SShayne Chen 	u8 color;
26198686cd2SShayne Chen 	u8 rsv[2];
26298686cd2SShayne Chen } __packed;
26398686cd2SShayne Chen 
26498686cd2SShayne Chen struct bss_inband_discovery_tlv {
26598686cd2SShayne Chen 	__le16 tag;
26698686cd2SShayne Chen 	__le16 len;
26798686cd2SShayne Chen 	u8 tx_type;
26898686cd2SShayne Chen 	u8 tx_mode;
26998686cd2SShayne Chen 	u8 tx_interval;
27098686cd2SShayne Chen 	u8 enable;
27198686cd2SShayne Chen 	__le16 wcid;
27298686cd2SShayne Chen 	__le16 prob_rsp_len;
27398686cd2SShayne Chen } __packed;
27498686cd2SShayne Chen 
27598686cd2SShayne Chen struct bss_bcn_content_tlv {
27698686cd2SShayne Chen 	__le16 tag;
27798686cd2SShayne Chen 	__le16 len;
27898686cd2SShayne Chen 	__le16 tim_ie_pos;
27998686cd2SShayne Chen 	__le16 csa_ie_pos;
28098686cd2SShayne Chen 	__le16 bcc_ie_pos;
28198686cd2SShayne Chen 	u8 enable;
28298686cd2SShayne Chen 	u8 type;
28398686cd2SShayne Chen 	__le16 pkt_len;
28498686cd2SShayne Chen } __packed;
28598686cd2SShayne Chen 
28698686cd2SShayne Chen struct bss_bcn_cntdwn_tlv {
28798686cd2SShayne Chen 	__le16 tag;
28898686cd2SShayne Chen 	__le16 len;
28998686cd2SShayne Chen 	u8 cnt;
29098686cd2SShayne Chen 	u8 rsv[3];
29198686cd2SShayne Chen } __packed;
29298686cd2SShayne Chen 
29398686cd2SShayne Chen struct bss_bcn_mbss_tlv {
29498686cd2SShayne Chen 	__le16 tag;
29598686cd2SShayne Chen 	__le16 len;
29698686cd2SShayne Chen 	__le32 bitmap;
29798686cd2SShayne Chen #define MAX_BEACON_NUM	32
29898686cd2SShayne Chen 	__le16 offset[MAX_BEACON_NUM];
29998686cd2SShayne Chen } __packed __aligned(4);
30098686cd2SShayne Chen 
30198686cd2SShayne Chen struct bss_txcmd_tlv {
30298686cd2SShayne Chen 	__le16 tag;
30398686cd2SShayne Chen 	__le16 len;
30498686cd2SShayne Chen 	u8 txcmd_mode;
30598686cd2SShayne Chen 	u8 __rsv[3];
30698686cd2SShayne Chen } __packed;
30798686cd2SShayne Chen 
30898686cd2SShayne Chen struct bss_sec_tlv {
30998686cd2SShayne Chen 	__le16 tag;
31098686cd2SShayne Chen 	__le16 len;
31198686cd2SShayne Chen 	u8 __rsv1[2];
31298686cd2SShayne Chen 	u8 cipher;
31398686cd2SShayne Chen 	u8 __rsv2[1];
31498686cd2SShayne Chen } __packed;
31598686cd2SShayne Chen 
31683a10ae2SPeter Chiu struct bss_ifs_time_tlv {
31783a10ae2SPeter Chiu 	__le16 tag;
31883a10ae2SPeter Chiu 	__le16 len;
31983a10ae2SPeter Chiu 	u8 slot_valid;
32083a10ae2SPeter Chiu 	u8 sifs_valid;
32183a10ae2SPeter Chiu 	u8 rifs_valid;
32283a10ae2SPeter Chiu 	u8 eifs_valid;
32383a10ae2SPeter Chiu 	__le16 slot_time;
32483a10ae2SPeter Chiu 	__le16 sifs_time;
32583a10ae2SPeter Chiu 	__le16 rifs_time;
32683a10ae2SPeter Chiu 	__le16 eifs_time;
32783a10ae2SPeter Chiu 	u8 eifs_cck_valid;
32883a10ae2SPeter Chiu 	u8 rsv;
32983a10ae2SPeter Chiu 	__le16 eifs_cck_time;
33083a10ae2SPeter Chiu } __packed;
33183a10ae2SPeter Chiu 
33298686cd2SShayne Chen struct bss_power_save {
33398686cd2SShayne Chen 	__le16 tag;
33498686cd2SShayne Chen 	__le16 len;
33598686cd2SShayne Chen 	u8 profile;
33698686cd2SShayne Chen 	u8 _rsv[3];
33798686cd2SShayne Chen } __packed;
33898686cd2SShayne Chen 
33998686cd2SShayne Chen struct bss_mld_tlv {
34098686cd2SShayne Chen 	__le16 tag;
34198686cd2SShayne Chen 	__le16 len;
34298686cd2SShayne Chen 	u8 group_mld_id;
34398686cd2SShayne Chen 	u8 own_mld_id;
34498686cd2SShayne Chen 	u8 mac_addr[ETH_ALEN];
34598686cd2SShayne Chen 	u8 remap_idx;
34698686cd2SShayne Chen 	u8 __rsv[3];
34798686cd2SShayne Chen } __packed;
34898686cd2SShayne Chen 
34998686cd2SShayne Chen struct sta_rec_ba_uni {
35098686cd2SShayne Chen 	__le16 tag;
35198686cd2SShayne Chen 	__le16 len;
35298686cd2SShayne Chen 	u8 tid;
35398686cd2SShayne Chen 	u8 ba_type;
35498686cd2SShayne Chen 	u8 amsdu;
35598686cd2SShayne Chen 	u8 ba_en;
35698686cd2SShayne Chen 	__le16 ssn;
35798686cd2SShayne Chen 	__le16 winsize;
35898686cd2SShayne Chen 	u8 ba_rdd_rro;
35998686cd2SShayne Chen 	u8 __rsv[3];
36098686cd2SShayne Chen } __packed;
36198686cd2SShayne Chen 
36292aa2da9SShayne Chen struct sta_rec_eht {
36392aa2da9SShayne Chen 	__le16 tag;
36492aa2da9SShayne Chen 	__le16 len;
36592aa2da9SShayne Chen 	u8 tid_bitmap;
36692aa2da9SShayne Chen 	u8 _rsv;
36792aa2da9SShayne Chen 	__le16 mac_cap;
36892aa2da9SShayne Chen 	__le64 phy_cap;
36992aa2da9SShayne Chen 	__le64 phy_cap_ext;
37092aa2da9SShayne Chen 	u8 mcs_map_bw20[4];
37192aa2da9SShayne Chen 	u8 mcs_map_bw80[3];
37292aa2da9SShayne Chen 	u8 mcs_map_bw160[3];
37392aa2da9SShayne Chen 	u8 mcs_map_bw320[3];
37492aa2da9SShayne Chen 	u8 _rsv2[3];
37592aa2da9SShayne Chen } __packed;
37692aa2da9SShayne Chen 
37798686cd2SShayne Chen struct sec_key_uni {
37898686cd2SShayne Chen 	__le16 wlan_idx;
37998686cd2SShayne Chen 	u8 mgmt_prot;
38098686cd2SShayne Chen 	u8 cipher_id;
38198686cd2SShayne Chen 	u8 cipher_len;
38298686cd2SShayne Chen 	u8 key_id;
38398686cd2SShayne Chen 	u8 key_len;
38498686cd2SShayne Chen 	u8 need_resp;
38598686cd2SShayne Chen 	u8 key[32];
38698686cd2SShayne Chen } __packed;
38798686cd2SShayne Chen 
38898686cd2SShayne Chen struct sta_rec_sec_uni {
38998686cd2SShayne Chen 	__le16 tag;
39098686cd2SShayne Chen 	__le16 len;
39198686cd2SShayne Chen 	u8 add;
39298686cd2SShayne Chen 	u8 n_cipher;
39398686cd2SShayne Chen 	u8 rsv[2];
39498686cd2SShayne Chen 
39598686cd2SShayne Chen 	struct sec_key_uni key[2];
39698686cd2SShayne Chen } __packed;
39798686cd2SShayne Chen 
39898686cd2SShayne Chen struct sta_rec_hdrt {
39998686cd2SShayne Chen 	__le16 tag;
40098686cd2SShayne Chen 	__le16 len;
40198686cd2SShayne Chen 	u8 hdrt_mode;
40298686cd2SShayne Chen 	u8 rsv[3];
40398686cd2SShayne Chen } __packed;
40498686cd2SShayne Chen 
40598686cd2SShayne Chen struct sta_rec_hdr_trans {
40698686cd2SShayne Chen 	__le16 tag;
40798686cd2SShayne Chen 	__le16 len;
40898686cd2SShayne Chen 	u8 from_ds;
40998686cd2SShayne Chen 	u8 to_ds;
41098686cd2SShayne Chen 	u8 dis_rx_hdr_tran;
41127db47abSRyder Lee 	u8 mesh;
41298686cd2SShayne Chen } __packed;
41398686cd2SShayne Chen 
41498686cd2SShayne Chen struct hdr_trans_en {
41598686cd2SShayne Chen 	__le16 tag;
41698686cd2SShayne Chen 	__le16 len;
41798686cd2SShayne Chen 	u8 enable;
41898686cd2SShayne Chen 	u8 check_bssid;
41998686cd2SShayne Chen 	u8 mode;
42098686cd2SShayne Chen 	u8 __rsv;
42198686cd2SShayne Chen } __packed;
42298686cd2SShayne Chen 
42398686cd2SShayne Chen struct hdr_trans_vlan {
42498686cd2SShayne Chen 	__le16 tag;
42598686cd2SShayne Chen 	__le16 len;
42698686cd2SShayne Chen 	u8 insert_vlan;
42798686cd2SShayne Chen 	u8 remove_vlan;
42898686cd2SShayne Chen 	u8 tid;
42998686cd2SShayne Chen 	u8 __rsv;
43098686cd2SShayne Chen } __packed;
43198686cd2SShayne Chen 
43298686cd2SShayne Chen struct hdr_trans_blacklist {
43398686cd2SShayne Chen 	__le16 tag;
43498686cd2SShayne Chen 	__le16 len;
43598686cd2SShayne Chen 	u8 idx;
43698686cd2SShayne Chen 	u8 enable;
43798686cd2SShayne Chen 	__le16 type;
43898686cd2SShayne Chen } __packed;
43998686cd2SShayne Chen 
44098686cd2SShayne Chen struct uni_header {
44198686cd2SShayne Chen 	u8 __rsv[4];
44298686cd2SShayne Chen } __packed;
44398686cd2SShayne Chen 
44498686cd2SShayne Chen struct vow_rx_airtime {
44598686cd2SShayne Chen 	__le16 tag;
44698686cd2SShayne Chen 	__le16 len;
44798686cd2SShayne Chen 
44898686cd2SShayne Chen 	u8 enable;
44998686cd2SShayne Chen 	u8 band;
45098686cd2SShayne Chen 	u8 __rsv[2];
45198686cd2SShayne Chen } __packed;
45298686cd2SShayne Chen 
45398686cd2SShayne Chen struct bf_sounding_on {
45498686cd2SShayne Chen 	__le16 tag;
45598686cd2SShayne Chen 	__le16 len;
45698686cd2SShayne Chen 
45798686cd2SShayne Chen 	u8 snd_mode;
45898686cd2SShayne Chen 	u8 sta_num;
45998686cd2SShayne Chen 	u8 __rsv[2];
46098686cd2SShayne Chen 	__le16 wlan_id[4];
46198686cd2SShayne Chen 	__le32 snd_period;
46298686cd2SShayne Chen } __packed;
46398686cd2SShayne Chen 
46498686cd2SShayne Chen struct bf_hw_en_status_update {
46598686cd2SShayne Chen 	__le16 tag;
46698686cd2SShayne Chen 	__le16 len;
46798686cd2SShayne Chen 
46898686cd2SShayne Chen 	bool ebf;
46998686cd2SShayne Chen 	bool ibf;
47098686cd2SShayne Chen 	u8 __rsv[2];
47198686cd2SShayne Chen } __packed;
47298686cd2SShayne Chen 
47398686cd2SShayne Chen struct bf_mod_en_ctrl {
47498686cd2SShayne Chen 	__le16 tag;
47598686cd2SShayne Chen 	__le16 len;
47698686cd2SShayne Chen 
47798686cd2SShayne Chen 	u8 bf_num;
47898686cd2SShayne Chen 	u8 bf_bitmap;
47998686cd2SShayne Chen 	u8 bf_sel[8];
48098686cd2SShayne Chen 	u8 __rsv[2];
48198686cd2SShayne Chen } __packed;
48298686cd2SShayne Chen 
48398686cd2SShayne Chen union bf_tag_tlv {
48498686cd2SShayne Chen 	struct bf_sounding_on bf_snd;
48598686cd2SShayne Chen 	struct bf_hw_en_status_update bf_hw_en;
48698686cd2SShayne Chen 	struct bf_mod_en_ctrl bf_mod_en;
48798686cd2SShayne Chen };
48898686cd2SShayne Chen 
48998686cd2SShayne Chen struct ra_rate {
49098686cd2SShayne Chen 	__le16 wlan_idx;
49198686cd2SShayne Chen 	u8 mode;
49298686cd2SShayne Chen 	u8 stbc;
49398686cd2SShayne Chen 	__le16 gi;
49498686cd2SShayne Chen 	u8 bw;
49598686cd2SShayne Chen 	u8 ldpc;
49698686cd2SShayne Chen 	u8 mcs;
49798686cd2SShayne Chen 	u8 nss;
49898686cd2SShayne Chen 	__le16 ltf;
49998686cd2SShayne Chen 	u8 spe;
50098686cd2SShayne Chen 	u8 preamble;
50198686cd2SShayne Chen 	u8 __rsv[2];
50298686cd2SShayne Chen } __packed;
50398686cd2SShayne Chen 
50498686cd2SShayne Chen struct ra_fixed_rate {
50598686cd2SShayne Chen 	__le16 tag;
50698686cd2SShayne Chen 	__le16 len;
50798686cd2SShayne Chen 
50898686cd2SShayne Chen 	__le16 version;
50998686cd2SShayne Chen 	struct ra_rate rate;
51098686cd2SShayne Chen } __packed;
51198686cd2SShayne Chen 
51298686cd2SShayne Chen enum {
51398686cd2SShayne Chen 	UNI_RA_FIXED_RATE = 0xf,
51498686cd2SShayne Chen };
51598686cd2SShayne Chen 
51698686cd2SShayne Chen #define MT7996_HDR_TRANS_MAX_SIZE	(sizeof(struct hdr_trans_en) +	 \
51798686cd2SShayne Chen 					 sizeof(struct hdr_trans_vlan) + \
51898686cd2SShayne Chen 					 sizeof(struct hdr_trans_blacklist))
51998686cd2SShayne Chen 
52098686cd2SShayne Chen enum {
52198686cd2SShayne Chen 	UNI_HDR_TRANS_EN,
52298686cd2SShayne Chen 	UNI_HDR_TRANS_VLAN,
52398686cd2SShayne Chen 	UNI_HDR_TRANS_BLACKLIST,
52498686cd2SShayne Chen };
52598686cd2SShayne Chen 
52698686cd2SShayne Chen enum {
52798686cd2SShayne Chen 	RATE_PARAM_FIXED = 3,
52898686cd2SShayne Chen 	RATE_PARAM_MMPS_UPDATE = 5,
52998686cd2SShayne Chen 	RATE_PARAM_FIXED_HE_LTF = 7,
53098686cd2SShayne Chen 	RATE_PARAM_FIXED_MCS,
53198686cd2SShayne Chen 	RATE_PARAM_FIXED_GI = 11,
53298686cd2SShayne Chen 	RATE_PARAM_AUTO = 20,
53398686cd2SShayne Chen };
53498686cd2SShayne Chen 
53598686cd2SShayne Chen enum {
53698686cd2SShayne Chen 	BF_SOUNDING_ON = 1,
53798686cd2SShayne Chen 	BF_HW_EN_UPDATE = 17,
53898686cd2SShayne Chen 	BF_MOD_EN_CTRL = 20,
53998686cd2SShayne Chen };
54098686cd2SShayne Chen 
54198686cd2SShayne Chen enum {
54298686cd2SShayne Chen 	CMD_BAND_NONE,
54398686cd2SShayne Chen 	CMD_BAND_24G,
54498686cd2SShayne Chen 	CMD_BAND_5G,
54598686cd2SShayne Chen 	CMD_BAND_6G,
54698686cd2SShayne Chen };
54798686cd2SShayne Chen 
54898686cd2SShayne Chen struct bss_req_hdr {
54998686cd2SShayne Chen 	u8 bss_idx;
55098686cd2SShayne Chen 	u8 __rsv[3];
55198686cd2SShayne Chen } __packed;
55298686cd2SShayne Chen 
55398686cd2SShayne Chen enum {
55498686cd2SShayne Chen 	UNI_CHANNEL_SWITCH,
55598686cd2SShayne Chen 	UNI_CHANNEL_RX_PATH,
55698686cd2SShayne Chen };
55798686cd2SShayne Chen 
55898686cd2SShayne Chen #define MT7996_BSS_UPDATE_MAX_SIZE	(sizeof(struct bss_req_hdr) +		\
55998686cd2SShayne Chen 					 sizeof(struct mt76_connac_bss_basic_tlv) +	\
56098686cd2SShayne Chen 					 sizeof(struct bss_rlm_tlv) +		\
56198686cd2SShayne Chen 					 sizeof(struct bss_ra_tlv) +		\
56298686cd2SShayne Chen 					 sizeof(struct bss_info_uni_he) +	\
56398686cd2SShayne Chen 					 sizeof(struct bss_rate_tlv) +		\
56498686cd2SShayne Chen 					 sizeof(struct bss_txcmd_tlv) +		\
56598686cd2SShayne Chen 					 sizeof(struct bss_power_save) +	\
56698686cd2SShayne Chen 					 sizeof(struct bss_sec_tlv) +		\
56783a10ae2SPeter Chiu 					 sizeof(struct bss_ifs_time_tlv) +	\
56898686cd2SShayne Chen 					 sizeof(struct bss_mld_tlv))
56998686cd2SShayne Chen 
57098686cd2SShayne Chen #define MT7996_STA_UPDATE_MAX_SIZE	(sizeof(struct sta_req_hdr) +		\
57198686cd2SShayne Chen 					 sizeof(struct sta_rec_basic) +		\
57298686cd2SShayne Chen 					 sizeof(struct sta_rec_bf) +		\
57398686cd2SShayne Chen 					 sizeof(struct sta_rec_ht) +		\
57498686cd2SShayne Chen 					 sizeof(struct sta_rec_he_v2) +		\
57598686cd2SShayne Chen 					 sizeof(struct sta_rec_ba_uni) +	\
57698686cd2SShayne Chen 					 sizeof(struct sta_rec_vht) +		\
57798686cd2SShayne Chen 					 sizeof(struct sta_rec_uapsd) + 	\
57898686cd2SShayne Chen 					 sizeof(struct sta_rec_amsdu) +		\
57998686cd2SShayne Chen 					 sizeof(struct sta_rec_bfee) +		\
58098686cd2SShayne Chen 					 sizeof(struct sta_rec_phy) +		\
58198686cd2SShayne Chen 					 sizeof(struct sta_rec_ra) +		\
58298686cd2SShayne Chen 					 sizeof(struct sta_rec_sec) +		\
58398686cd2SShayne Chen 					 sizeof(struct sta_rec_ra_fixed) +	\
58498686cd2SShayne Chen 					 sizeof(struct sta_rec_he_6g_capa) +	\
58592aa2da9SShayne Chen 					 sizeof(struct sta_rec_eht) +		\
58698686cd2SShayne Chen 					 sizeof(struct sta_rec_hdrt) +		\
58798686cd2SShayne Chen 					 sizeof(struct sta_rec_hdr_trans) +	\
58898686cd2SShayne Chen 					 sizeof(struct tlv))
58998686cd2SShayne Chen 
590671985baSMeiChia Chiu #define MT7996_MAX_BEACON_SIZE		1342
59198686cd2SShayne Chen #define MT7996_BEACON_UPDATE_SIZE	(sizeof(struct bss_req_hdr) +		\
59298686cd2SShayne Chen 					 sizeof(struct bss_bcn_content_tlv) +	\
593671985baSMeiChia Chiu 					 MT_TXD_SIZE +				\
59498686cd2SShayne Chen 					 sizeof(struct bss_bcn_cntdwn_tlv) +	\
59598686cd2SShayne Chen 					 sizeof(struct bss_bcn_mbss_tlv))
596671985baSMeiChia Chiu #define MT7996_MAX_BSS_OFFLOAD_SIZE	(MT7996_MAX_BEACON_SIZE +		\
597671985baSMeiChia Chiu 					 MT7996_BEACON_UPDATE_SIZE)
59898686cd2SShayne Chen 
59998686cd2SShayne Chen enum {
60098686cd2SShayne Chen 	UNI_BAND_CONFIG_RADIO_ENABLE,
60198686cd2SShayne Chen 	UNI_BAND_CONFIG_RTS_THRESHOLD = 0x08,
60298686cd2SShayne Chen };
60398686cd2SShayne Chen 
60498686cd2SShayne Chen enum {
60598686cd2SShayne Chen 	UNI_WSYS_CONFIG_FW_LOG_CTRL,
60698686cd2SShayne Chen 	UNI_WSYS_CONFIG_FW_DBG_CTRL,
60798686cd2SShayne Chen };
60898686cd2SShayne Chen 
60998686cd2SShayne Chen enum {
61098686cd2SShayne Chen 	UNI_RDD_CTRL_PARM,
61198686cd2SShayne Chen 	UNI_RDD_CTRL_SET_TH = 0x3,
61298686cd2SShayne Chen };
61398686cd2SShayne Chen 
61498686cd2SShayne Chen enum {
61598686cd2SShayne Chen 	UNI_EFUSE_ACCESS = 1,
61698686cd2SShayne Chen 	UNI_EFUSE_BUFFER_MODE,
61798686cd2SShayne Chen 	UNI_EFUSE_FREE_BLOCK,
61898686cd2SShayne Chen 	UNI_EFUSE_BUFFER_RD,
61998686cd2SShayne Chen };
62098686cd2SShayne Chen 
62198686cd2SShayne Chen enum {
62298686cd2SShayne Chen 	UNI_VOW_DRR_CTRL,
62398686cd2SShayne Chen 	UNI_VOW_RX_AT_AIRTIME_EN = 0x0b,
62498686cd2SShayne Chen 	UNI_VOW_RX_AT_AIRTIME_CLR_EN = 0x0e,
62598686cd2SShayne Chen };
62698686cd2SShayne Chen 
62798686cd2SShayne Chen enum {
62898686cd2SShayne Chen 	UNI_CMD_MIB_DATA,
62998686cd2SShayne Chen };
63098686cd2SShayne Chen 
63198686cd2SShayne Chen enum {
63298686cd2SShayne Chen 	UNI_POWER_OFF,
63398686cd2SShayne Chen };
63498686cd2SShayne Chen 
63598686cd2SShayne Chen enum {
63698686cd2SShayne Chen 	UNI_CMD_TWT_ARGT_UPDATE = 0x0,
63798686cd2SShayne Chen 	UNI_CMD_TWT_MGMT_OFFLOAD,
63898686cd2SShayne Chen };
63998686cd2SShayne Chen 
64098686cd2SShayne Chen enum {
64198686cd2SShayne Chen 	UNI_RRO_DEL_ENTRY = 0x1,
64298686cd2SShayne Chen 	UNI_RRO_SET_PLATFORM_TYPE,
64398686cd2SShayne Chen 	UNI_RRO_GET_BA_SESSION_TABLE,
64498686cd2SShayne Chen 	UNI_RRO_SET_BYPASS_MODE,
64598686cd2SShayne Chen 	UNI_RRO_SET_TXFREE_PATH,
64698686cd2SShayne Chen };
64798686cd2SShayne Chen 
64898686cd2SShayne Chen enum{
64998686cd2SShayne Chen 	UNI_CMD_SR_ENABLE = 0x1,
650cf6dc2dbSRyder Lee 	UNI_CMD_SR_ENABLE_SD,
651cf6dc2dbSRyder Lee 	UNI_CMD_SR_ENABLE_MODE,
652cf6dc2dbSRyder Lee 	UNI_CMD_SR_ENABLE_DPD = 0x12,
653cf6dc2dbSRyder Lee 	UNI_CMD_SR_ENABLE_TX,
654cf6dc2dbSRyder Lee 	UNI_CMD_SR_SET_SRG_BITMAP = 0x80,
655cf6dc2dbSRyder Lee 	UNI_CMD_SR_SET_PARAM = 0xc1,
656cf6dc2dbSRyder Lee 	UNI_CMD_SR_SET_SIGA = 0xd0,
65798686cd2SShayne Chen };
65898686cd2SShayne Chen 
65998686cd2SShayne Chen enum {
66098686cd2SShayne Chen 	UNI_CMD_ACCESS_REG_BASIC = 0x0,
66198686cd2SShayne Chen 	UNI_CMD_ACCESS_RF_REG_BASIC,
66298686cd2SShayne Chen };
66398686cd2SShayne Chen 
66498686cd2SShayne Chen enum {
665672662f0SRyder Lee 	UNI_CMD_SER_QUERY,
66698686cd2SShayne Chen 	/* recovery */
667672662f0SRyder Lee 	UNI_CMD_SER_SET_RECOVER_L1,
668672662f0SRyder Lee 	UNI_CMD_SER_SET_RECOVER_L2,
669672662f0SRyder Lee 	UNI_CMD_SER_SET_RECOVER_L3_RX_ABORT,
670672662f0SRyder Lee 	UNI_CMD_SER_SET_RECOVER_L3_TX_ABORT,
671672662f0SRyder Lee 	UNI_CMD_SER_SET_RECOVER_L3_TX_DISABLE,
672672662f0SRyder Lee 	UNI_CMD_SER_SET_RECOVER_L3_BF,
673672662f0SRyder Lee 	UNI_CMD_SER_SET_RECOVER_L4_MDP,
674672662f0SRyder Lee 	UNI_CMD_SER_SET_RECOVER_FULL,
675672662f0SRyder Lee 	UNI_CMD_SER_SET_SYSTEM_ASSERT,
67698686cd2SShayne Chen 	/* action */
677672662f0SRyder Lee 	UNI_CMD_SER_ENABLE = 1,
678672662f0SRyder Lee 	UNI_CMD_SER_SET,
679672662f0SRyder Lee 	UNI_CMD_SER_TRIGGER
68098686cd2SShayne Chen };
68198686cd2SShayne Chen 
68298686cd2SShayne Chen enum {
68398686cd2SShayne Chen 	MT7996_SEC_MODE_PLAIN,
68498686cd2SShayne Chen 	MT7996_SEC_MODE_AES,
68598686cd2SShayne Chen 	MT7996_SEC_MODE_SCRAMBLE,
68698686cd2SShayne Chen 	MT7996_SEC_MODE_MAX,
68798686cd2SShayne Chen };
68898686cd2SShayne Chen 
68998686cd2SShayne Chen #define MT7996_PATCH_SEC		GENMASK(31, 24)
69098686cd2SShayne Chen #define MT7996_PATCH_SCRAMBLE_KEY	GENMASK(15, 8)
69198686cd2SShayne Chen #define MT7996_PATCH_AES_KEY		GENMASK(7, 0)
69298686cd2SShayne Chen 
69398686cd2SShayne Chen #define MT7996_SEC_ENCRYPT		BIT(0)
69498686cd2SShayne Chen #define MT7996_SEC_KEY_IDX		GENMASK(2, 1)
69598686cd2SShayne Chen #define MT7996_SEC_IV			BIT(3)
69698686cd2SShayne Chen 
69798686cd2SShayne Chen #endif
698