1e57b7901SRyder Lee /* SPDX-License-Identifier: ISC */
2e57b7901SRyder Lee /* Copyright (C) 2020 MediaTek Inc. */
3e57b7901SRyder Lee 
4e57b7901SRyder Lee #ifndef __MT7915_MCU_H
5e57b7901SRyder Lee #define __MT7915_MCU_H
6e57b7901SRyder Lee 
75562d5f6SLorenzo Bianconi #include "../mt76_connac_mcu.h"
85562d5f6SLorenzo Bianconi 
9aadf0953SShayne Chen enum {
10aadf0953SShayne Chen 	MCU_ATE_SET_TRX = 0x1,
11ed3c9072SShayne Chen 	MCU_ATE_SET_FREQ_OFFSET = 0xa,
12c2d3b192SShayne Chen 	MCU_ATE_SET_SLOT_TIME = 0x13,
138efe387cSShayne Chen 	MCU_ATE_CLEAN_TXQUEUE = 0x1c,
14aadf0953SShayne Chen };
15aadf0953SShayne Chen 
1634b877d9SRyder Lee struct mt7915_mcu_thermal_ctrl {
1734b877d9SRyder Lee 	u8 ctrl_id;
1834b877d9SRyder Lee 	u8 band_idx;
1934b877d9SRyder Lee 	union {
2034b877d9SRyder Lee 		struct {
2134b877d9SRyder Lee 			u8 protect_type; /* 1: duty admit, 2: radio off */
2234b877d9SRyder Lee 			u8 trigger_type; /* 0: low, 1: high */
2334b877d9SRyder Lee 		} __packed type;
2434b877d9SRyder Lee 		struct {
2534b877d9SRyder Lee 			u8 duty_level;	/* level 0~3 */
2634b877d9SRyder Lee 			u8 duty_cycle;
2734b877d9SRyder Lee 		} __packed duty;
2834b877d9SRyder Lee 	};
2934b877d9SRyder Lee } __packed;
3034b877d9SRyder Lee 
3134b877d9SRyder Lee struct mt7915_mcu_thermal_notify {
32fc6ee71aSLorenzo Bianconi 	struct mt76_connac2_mcu_rxd rxd;
3334b877d9SRyder Lee 
3434b877d9SRyder Lee 	struct mt7915_mcu_thermal_ctrl ctrl;
3534b877d9SRyder Lee 	__le32 temperature;
3634b877d9SRyder Lee 	u8 rsv[8];
3734b877d9SRyder Lee } __packed;
3834b877d9SRyder Lee 
39b6d20ce4SRyder Lee struct mt7915_mcu_csa_notify {
40fc6ee71aSLorenzo Bianconi 	struct mt76_connac2_mcu_rxd rxd;
41b6d20ce4SRyder Lee 
42b6d20ce4SRyder Lee 	u8 omac_idx;
43b6d20ce4SRyder Lee 	u8 csa_count;
44b6d20ce4SRyder Lee 	u8 band_idx;
45b6d20ce4SRyder Lee 	u8 rsv;
46b6d20ce4SRyder Lee } __packed;
47b6d20ce4SRyder Lee 
4832406ca4SRyder Lee struct mt7915_mcu_bcc_notify {
49fc6ee71aSLorenzo Bianconi 	struct mt76_connac2_mcu_rxd rxd;
5032406ca4SRyder Lee 
5132406ca4SRyder Lee 	u8 band_idx;
5232406ca4SRyder Lee 	u8 omac_idx;
5332406ca4SRyder Lee 	u8 cca_count;
5432406ca4SRyder Lee 	u8 rsv;
5532406ca4SRyder Lee } __packed;
5632406ca4SRyder Lee 
57e57b7901SRyder Lee struct mt7915_mcu_rdd_report {
58fc6ee71aSLorenzo Bianconi 	struct mt76_connac2_mcu_rxd rxd;
59e57b7901SRyder Lee 
60b6d20ce4SRyder Lee 	u8 band_idx;
61e57b7901SRyder Lee 	u8 long_detected;
62e57b7901SRyder Lee 	u8 constant_prf_detected;
63e57b7901SRyder Lee 	u8 staggered_prf_detected;
64e57b7901SRyder Lee 	u8 radar_type_idx;
65e57b7901SRyder Lee 	u8 periodic_pulse_num;
66e57b7901SRyder Lee 	u8 long_pulse_num;
67e57b7901SRyder Lee 	u8 hw_pulse_num;
68e57b7901SRyder Lee 
69e57b7901SRyder Lee 	u8 out_lpn;
70e57b7901SRyder Lee 	u8 out_spn;
71e57b7901SRyder Lee 	u8 out_crpn;
72e57b7901SRyder Lee 	u8 out_crpw;
73e57b7901SRyder Lee 	u8 out_crbn;
74e57b7901SRyder Lee 	u8 out_stgpn;
75e57b7901SRyder Lee 	u8 out_stgpw;
76e57b7901SRyder Lee 
77e57b7901SRyder Lee 	u8 rsv;
78e57b7901SRyder Lee 
79e57b7901SRyder Lee 	__le32 out_pri_const;
80e57b7901SRyder Lee 	__le32 out_pri_stg[3];
81e57b7901SRyder Lee 
82e57b7901SRyder Lee 	struct {
83e57b7901SRyder Lee 		__le32 start;
84e57b7901SRyder Lee 		__le16 pulse_width;
85e57b7901SRyder Lee 		__le16 pulse_power;
86e57b7901SRyder Lee 		u8 mdrdy_flag;
87e57b7901SRyder Lee 		u8 rsv[3];
88e57b7901SRyder Lee 	} long_pulse[32];
89e57b7901SRyder Lee 
90e57b7901SRyder Lee 	struct {
91e57b7901SRyder Lee 		__le32 start;
92e57b7901SRyder Lee 		__le16 pulse_width;
93e57b7901SRyder Lee 		__le16 pulse_power;
94e57b7901SRyder Lee 		u8 mdrdy_flag;
95e57b7901SRyder Lee 		u8 rsv[3];
96e57b7901SRyder Lee 	} periodic_pulse[32];
97e57b7901SRyder Lee 
98e57b7901SRyder Lee 	struct {
99e57b7901SRyder Lee 		__le32 start;
100e57b7901SRyder Lee 		__le16 pulse_width;
101e57b7901SRyder Lee 		__le16 pulse_power;
102e57b7901SRyder Lee 		u8 sc_pass;
103e57b7901SRyder Lee 		u8 sw_reset;
104e57b7901SRyder Lee 		u8 mdrdy_flag;
105e57b7901SRyder Lee 		u8 tx_active;
106e57b7901SRyder Lee 	} hw_pulse[32];
107e57b7901SRyder Lee } __packed;
108e57b7901SRyder Lee 
10939cdf080SLorenzo Bianconi struct mt7915_mcu_background_chain_ctrl {
11039cdf080SLorenzo Bianconi 	u8 chan;		/* primary channel */
11139cdf080SLorenzo Bianconi 	u8 central_chan;	/* central channel */
11239cdf080SLorenzo Bianconi 	u8 bw;
11339cdf080SLorenzo Bianconi 	u8 tx_stream;
11439cdf080SLorenzo Bianconi 	u8 rx_stream;
11539cdf080SLorenzo Bianconi 
11639cdf080SLorenzo Bianconi 	u8 monitor_chan;	/* monitor channel */
11739cdf080SLorenzo Bianconi 	u8 monitor_central_chan;/* monitor central channel */
11839cdf080SLorenzo Bianconi 	u8 monitor_bw;
11939cdf080SLorenzo Bianconi 	u8 monitor_tx_stream;
12039cdf080SLorenzo Bianconi 	u8 monitor_rx_stream;
12139cdf080SLorenzo Bianconi 
12239cdf080SLorenzo Bianconi 	u8 scan_mode;		/* 0: ScanStop
12339cdf080SLorenzo Bianconi 				 * 1: ScanStart
12439cdf080SLorenzo Bianconi 				 * 2: ScanRunning
12539cdf080SLorenzo Bianconi 				 */
12639cdf080SLorenzo Bianconi 	u8 band_idx;		/* DBDC */
12739cdf080SLorenzo Bianconi 	u8 monitor_scan_type;
12839cdf080SLorenzo Bianconi 	u8 band;		/* 0: 2.4GHz, 1: 5GHz */
12939cdf080SLorenzo Bianconi 	u8 rsv[2];
13039cdf080SLorenzo Bianconi } __packed;
13139cdf080SLorenzo Bianconi 
1323dc00ecfSRyder Lee struct mt7915_mcu_sr_ctrl {
1333dc00ecfSRyder Lee 	u8 action;
1343dc00ecfSRyder Lee 	u8 argnum;
1353dc00ecfSRyder Lee 	u8 band_idx;
1363dc00ecfSRyder Lee 	u8 status;
1373dc00ecfSRyder Lee 	u8 drop_ta_idx;
1383dc00ecfSRyder Lee 	u8 sta_idx;	/* 256 sta */
1393dc00ecfSRyder Lee 	u8 rsv[2];
1403dc00ecfSRyder Lee 	__le32 val;
1413dc00ecfSRyder Lee } __packed;
1423dc00ecfSRyder Lee 
14326f18380SShayne Chen struct mt7915_mcu_eeprom {
14426f18380SShayne Chen 	u8 buffer_mode;
14526f18380SShayne Chen 	u8 format;
14626f18380SShayne Chen 	__le16 len;
14726f18380SShayne Chen } __packed;
14826f18380SShayne Chen 
149e57b7901SRyder Lee struct mt7915_mcu_eeprom_info {
150e57b7901SRyder Lee 	__le32 addr;
151e57b7901SRyder Lee 	__le32 valid;
152e57b7901SRyder Lee 	u8 data[16];
153e57b7901SRyder Lee } __packed;
154e57b7901SRyder Lee 
15511553d88SFelix Fietkau struct mt7915_mcu_phy_rx_info {
15611553d88SFelix Fietkau 	u8 category;
15711553d88SFelix Fietkau 	u8 rate;
15811553d88SFelix Fietkau 	u8 mode;
15911553d88SFelix Fietkau 	u8 nsts;
16011553d88SFelix Fietkau 	u8 gi;
16111553d88SFelix Fietkau 	u8 coding;
16211553d88SFelix Fietkau 	u8 stbc;
16311553d88SFelix Fietkau 	u8 bw;
16411553d88SFelix Fietkau };
16511553d88SFelix Fietkau 
16665430028SRyder Lee struct mt7915_mcu_mib {
16765430028SRyder Lee 	__le32 band;
16865430028SRyder Lee 	__le32 offs;
16965430028SRyder Lee 	__le64 data;
17065430028SRyder Lee } __packed;
17165430028SRyder Lee 
17265430028SRyder Lee enum mt7915_chan_mib_offs {
173417a4534SBo Jiao 	/* mt7915 */
17465430028SRyder Lee 	MIB_TX_TIME = 81,
17565430028SRyder Lee 	MIB_RX_TIME,
176417a4534SBo Jiao 	MIB_OBSS_AIRTIME = 86,
177b0bfa005SRyder Lee 	MIB_NON_WIFI_TIME,
178b0bfa005SRyder Lee 	MIB_TXOP_INIT_COUNT,
179b0bfa005SRyder Lee 
180417a4534SBo Jiao 	/* mt7916 */
181417a4534SBo Jiao 	MIB_TX_TIME_V2 = 6,
182417a4534SBo Jiao 	MIB_RX_TIME_V2 = 8,
183b0bfa005SRyder Lee 	MIB_OBSS_AIRTIME_V2 = 490,
184b0bfa005SRyder Lee 	MIB_NON_WIFI_TIME_V2
18565430028SRyder Lee };
18665430028SRyder Lee 
1877ff903bcSShayne Chen struct edca {
1887ff903bcSShayne Chen 	u8 queue;
1897ff903bcSShayne Chen 	u8 set;
1907ff903bcSShayne Chen 	u8 aifs;
1917ff903bcSShayne Chen 	u8 cw_min;
1927ff903bcSShayne Chen 	__le16 cw_max;
1937ff903bcSShayne Chen 	__le16 txop;
1947ff903bcSShayne Chen };
1957ff903bcSShayne Chen 
1967ff903bcSShayne Chen struct mt7915_mcu_tx {
1977ff903bcSShayne Chen 	u8 total;
1987ff903bcSShayne Chen 	u8 action;
1997ff903bcSShayne Chen 	u8 valid;
2007ff903bcSShayne Chen 	u8 mode;
2017ff903bcSShayne Chen 
2027ff903bcSShayne Chen 	struct edca edca[IEEE80211_NUM_ACS];
2037ff903bcSShayne Chen } __packed;
2047ff903bcSShayne Chen 
2051966a507SMeiChia Chiu struct mt7915_mcu_muru_stats {
2061966a507SMeiChia Chiu 	__le32 event_id;
2071966a507SMeiChia Chiu 	struct {
2081966a507SMeiChia Chiu 		__le32 cck_cnt;
2091966a507SMeiChia Chiu 		__le32 ofdm_cnt;
2101966a507SMeiChia Chiu 		__le32 htmix_cnt;
2111966a507SMeiChia Chiu 		__le32 htgf_cnt;
2121966a507SMeiChia Chiu 		__le32 vht_su_cnt;
2131966a507SMeiChia Chiu 		__le32 vht_2mu_cnt;
2141966a507SMeiChia Chiu 		__le32 vht_3mu_cnt;
2151966a507SMeiChia Chiu 		__le32 vht_4mu_cnt;
2161966a507SMeiChia Chiu 		__le32 he_su_cnt;
2171966a507SMeiChia Chiu 		__le32 he_ext_su_cnt;
2181966a507SMeiChia Chiu 		__le32 he_2ru_cnt;
2191966a507SMeiChia Chiu 		__le32 he_2mu_cnt;
2201966a507SMeiChia Chiu 		__le32 he_3ru_cnt;
2211966a507SMeiChia Chiu 		__le32 he_3mu_cnt;
2221966a507SMeiChia Chiu 		__le32 he_4ru_cnt;
2231966a507SMeiChia Chiu 		__le32 he_4mu_cnt;
2241966a507SMeiChia Chiu 		__le32 he_5to8ru_cnt;
2251966a507SMeiChia Chiu 		__le32 he_9to16ru_cnt;
2261966a507SMeiChia Chiu 		__le32 he_gtr16ru_cnt;
2271966a507SMeiChia Chiu 	} dl;
2281966a507SMeiChia Chiu 
2291966a507SMeiChia Chiu 	struct {
2301966a507SMeiChia Chiu 		__le32 hetrig_su_cnt;
2311966a507SMeiChia Chiu 		__le32 hetrig_2ru_cnt;
2321966a507SMeiChia Chiu 		__le32 hetrig_3ru_cnt;
2331966a507SMeiChia Chiu 		__le32 hetrig_4ru_cnt;
2341966a507SMeiChia Chiu 		__le32 hetrig_5to8ru_cnt;
2351966a507SMeiChia Chiu 		__le32 hetrig_9to16ru_cnt;
2361966a507SMeiChia Chiu 		__le32 hetrig_gtr16ru_cnt;
2371966a507SMeiChia Chiu 		__le32 hetrig_2mu_cnt;
2381966a507SMeiChia Chiu 		__le32 hetrig_3mu_cnt;
2391966a507SMeiChia Chiu 		__le32 hetrig_4mu_cnt;
2401966a507SMeiChia Chiu 	} ul;
2411966a507SMeiChia Chiu };
2421966a507SMeiChia Chiu 
2437ff903bcSShayne Chen #define WMM_AIFS_SET		BIT(0)
2447ff903bcSShayne Chen #define WMM_CW_MIN_SET		BIT(1)
2457ff903bcSShayne Chen #define WMM_CW_MAX_SET		BIT(2)
2467ff903bcSShayne Chen #define WMM_TXOP_SET		BIT(3)
2477ff903bcSShayne Chen #define WMM_PARAM_SET		GENMASK(3, 0)
2487ff903bcSShayne Chen 
249e57b7901SRyder Lee enum {
2509b121acdSShayne Chen 	MCU_FW_LOG_WM,
2519b121acdSShayne Chen 	MCU_FW_LOG_WA,
2529b121acdSShayne Chen 	MCU_FW_LOG_TO_HOST,
2539b121acdSShayne Chen };
254c203dd62SFelix Fietkau 
255f1fd2caeSFelix Fietkau enum {
256179090a5SLorenzo Bianconi 	MCU_TWT_AGRT_ADD,
257179090a5SLorenzo Bianconi 	MCU_TWT_AGRT_MODIFY,
258179090a5SLorenzo Bianconi 	MCU_TWT_AGRT_DELETE,
259179090a5SLorenzo Bianconi 	MCU_TWT_AGRT_TEARDOWN,
260179090a5SLorenzo Bianconi 	MCU_TWT_AGRT_GET_TSF,
261179090a5SLorenzo Bianconi };
262179090a5SLorenzo Bianconi 
263179090a5SLorenzo Bianconi enum {
264f1fd2caeSFelix Fietkau 	MCU_WA_PARAM_CMD_QUERY,
265f1fd2caeSFelix Fietkau 	MCU_WA_PARAM_CMD_SET,
266f1fd2caeSFelix Fietkau 	MCU_WA_PARAM_CMD_CAPABILITY,
267f1fd2caeSFelix Fietkau 	MCU_WA_PARAM_CMD_DEBUG,
268f1fd2caeSFelix Fietkau };
269f1fd2caeSFelix Fietkau 
270f1fd2caeSFelix Fietkau enum {
27190f5daeaSShayne Chen 	MCU_WA_PARAM_PDMA_RX = 0x04,
27290f5daeaSShayne Chen 	MCU_WA_PARAM_CPU_UTIL = 0x0b,
273f1fd2caeSFelix Fietkau 	MCU_WA_PARAM_RED = 0x0e,
274f1fd2caeSFelix Fietkau };
275f1fd2caeSFelix Fietkau 
2768f058354SRyder Lee enum mcu_mmps_mode {
2778f058354SRyder Lee 	MCU_MMPS_STATIC,
2788f058354SRyder Lee 	MCU_MMPS_DYNAMIC,
2798f058354SRyder Lee 	MCU_MMPS_RSV,
2808f058354SRyder Lee 	MCU_MMPS_DISABLE,
2818f058354SRyder Lee };
2828f058354SRyder Lee 
283e57b7901SRyder Lee struct bss_info_bmc_rate {
284e57b7901SRyder Lee 	__le16 tag;
285e57b7901SRyder Lee 	__le16 len;
286e57b7901SRyder Lee 	__le16 bc_trans;
287e57b7901SRyder Lee 	__le16 mc_trans;
288e57b7901SRyder Lee 	u8 short_preamble;
289e57b7901SRyder Lee 	u8 rsv[7];
290e57b7901SRyder Lee } __packed;
291e57b7901SRyder Lee 
292e57b7901SRyder Lee struct bss_info_ra {
293e57b7901SRyder Lee 	__le16 tag;
294e57b7901SRyder Lee 	__le16 len;
295e57b7901SRyder Lee 	u8 op_mode;
296e57b7901SRyder Lee 	u8 adhoc_en;
297e57b7901SRyder Lee 	u8 short_preamble;
298e57b7901SRyder Lee 	u8 tx_streams;
299e57b7901SRyder Lee 	u8 rx_streams;
300e57b7901SRyder Lee 	u8 algo;
301e57b7901SRyder Lee 	u8 force_sgi;
302e57b7901SRyder Lee 	u8 force_gf;
303e57b7901SRyder Lee 	u8 ht_mode;
304e57b7901SRyder Lee 	u8 has_20_sta;		/* Check if any sta support GF. */
305e57b7901SRyder Lee 	u8 bss_width_trigger_events;
306e57b7901SRyder Lee 	u8 vht_nss_cap;
307e57b7901SRyder Lee 	u8 vht_bw_signal;	/* not use */
308e57b7901SRyder Lee 	u8 vht_force_sgi;	/* not use */
309e57b7901SRyder Lee 	u8 se_off;
310e57b7901SRyder Lee 	u8 antenna_idx;
311e57b7901SRyder Lee 	u8 train_up_rule;
312e57b7901SRyder Lee 	u8 rsv[3];
313e57b7901SRyder Lee 	unsigned short train_up_high_thres;
314e57b7901SRyder Lee 	short train_up_rule_rssi;
315e57b7901SRyder Lee 	unsigned short low_traffic_thres;
316e57b7901SRyder Lee 	__le16 max_phyrate;
317e57b7901SRyder Lee 	__le32 phy_cap;
318e57b7901SRyder Lee 	__le32 interval;
319e57b7901SRyder Lee 	__le32 fast_interval;
320e57b7901SRyder Lee } __packed;
321e57b7901SRyder Lee 
322b443e55fSRyder Lee struct bss_info_hw_amsdu {
323b443e55fSRyder Lee 	__le16 tag;
324b443e55fSRyder Lee 	__le16 len;
325b443e55fSRyder Lee 	__le32 cmp_bitmap_0;
326b443e55fSRyder Lee 	__le32 cmp_bitmap_1;
327b443e55fSRyder Lee 	__le16 trig_thres;
328b443e55fSRyder Lee 	u8 enable;
329b443e55fSRyder Lee 	u8 rsv;
330b443e55fSRyder Lee } __packed;
331b443e55fSRyder Lee 
332b4b9f0a3SLorenzo Bianconi struct bss_info_color {
333b4b9f0a3SLorenzo Bianconi 	__le16 tag;
334b4b9f0a3SLorenzo Bianconi 	__le16 len;
335b4b9f0a3SLorenzo Bianconi 	u8 disable;
336b4b9f0a3SLorenzo Bianconi 	u8 color;
337b4b9f0a3SLorenzo Bianconi 	u8 rsv[2];
338b4b9f0a3SLorenzo Bianconi } __packed;
339b4b9f0a3SLorenzo Bianconi 
3406094f86fSRyder Lee struct bss_info_he {
3416094f86fSRyder Lee 	__le16 tag;
3426094f86fSRyder Lee 	__le16 len;
3436094f86fSRyder Lee 	u8 he_pe_duration;
3446094f86fSRyder Lee 	u8 vht_op_info_present;
3456094f86fSRyder Lee 	__le16 he_rts_thres;
3466094f86fSRyder Lee 	__le16 max_nss_mcs[CMD_HE_MCS_BW_NUM];
3476094f86fSRyder Lee 	u8 rsv[6];
3486094f86fSRyder Lee } __packed;
3496094f86fSRyder Lee 
350e57b7901SRyder Lee struct bss_info_bcn {
351e57b7901SRyder Lee 	__le16 tag;
352e57b7901SRyder Lee 	__le16 len;
353e57b7901SRyder Lee 	u8 ver;
354e57b7901SRyder Lee 	u8 enable;
355e57b7901SRyder Lee 	__le16 sub_ntlv;
356e57b7901SRyder Lee } __packed __aligned(4);
357e57b7901SRyder Lee 
358b4b9f0a3SLorenzo Bianconi struct bss_info_bcn_cntdwn {
359e57b7901SRyder Lee 	__le16 tag;
360e57b7901SRyder Lee 	__le16 len;
361e57b7901SRyder Lee 	u8 cnt;
362e57b7901SRyder Lee 	u8 rsv[3];
363e57b7901SRyder Lee } __packed __aligned(4);
364e57b7901SRyder Lee 
365e57b7901SRyder Lee struct bss_info_bcn_mbss {
366e57b7901SRyder Lee #define MAX_BEACON_NUM	32
367e57b7901SRyder Lee 	__le16 tag;
368e57b7901SRyder Lee 	__le16 len;
369e57b7901SRyder Lee 	__le32 bitmap;
370e57b7901SRyder Lee 	__le16 offset[MAX_BEACON_NUM];
371e57b7901SRyder Lee 	u8 rsv[8];
372e57b7901SRyder Lee } __packed __aligned(4);
373e57b7901SRyder Lee 
374e57b7901SRyder Lee struct bss_info_bcn_cont {
375e57b7901SRyder Lee 	__le16 tag;
376e57b7901SRyder Lee 	__le16 len;
377e57b7901SRyder Lee 	__le16 tim_ofs;
378e57b7901SRyder Lee 	__le16 csa_ofs;
379e57b7901SRyder Lee 	__le16 bcc_ofs;
380e57b7901SRyder Lee 	__le16 pkt_len;
381e57b7901SRyder Lee } __packed __aligned(4);
382e57b7901SRyder Lee 
383869f0646SMeiChia Chiu struct bss_info_inband_discovery {
384869f0646SMeiChia Chiu 	__le16 tag;
385869f0646SMeiChia Chiu 	__le16 len;
386869f0646SMeiChia Chiu 	u8 tx_type;
387869f0646SMeiChia Chiu 	u8 tx_mode;
388869f0646SMeiChia Chiu 	u8 tx_interval;
389869f0646SMeiChia Chiu 	u8 enable;
390869f0646SMeiChia Chiu 	__le16 rsv;
391869f0646SMeiChia Chiu 	__le16 prob_rsp_len;
392869f0646SMeiChia Chiu } __packed __aligned(4);
393869f0646SMeiChia Chiu 
394e57b7901SRyder Lee enum {
395e57b7901SRyder Lee 	BSS_INFO_BCN_CSA,
396e57b7901SRyder Lee 	BSS_INFO_BCN_BCC,
397e57b7901SRyder Lee 	BSS_INFO_BCN_MBSSID,
398e57b7901SRyder Lee 	BSS_INFO_BCN_CONTENT,
399869f0646SMeiChia Chiu 	BSS_INFO_BCN_DISCOV,
400e57b7901SRyder Lee 	BSS_INFO_BCN_MAX
401e57b7901SRyder Lee };
402e57b7901SRyder Lee 
403e57b7901SRyder Lee enum {
40470fd1333SRyder Lee 	RATE_PARAM_FIXED = 3,
4058f058354SRyder Lee 	RATE_PARAM_MMPS_UPDATE = 5,
40670fd1333SRyder Lee 	RATE_PARAM_FIXED_HE_LTF = 7,
40770fd1333SRyder Lee 	RATE_PARAM_FIXED_MCS,
40870fd1333SRyder Lee 	RATE_PARAM_FIXED_GI = 11,
40970fd1333SRyder Lee 	RATE_PARAM_AUTO = 20,
4107a9a957bSShayne Chen 	RATE_PARAM_SPE_UPDATE = 22,
41170fd1333SRyder Lee };
41270fd1333SRyder Lee 
4139fac3c81SRyder Lee #define RATE_CFG_MCS			GENMASK(3, 0)
4149fac3c81SRyder Lee #define RATE_CFG_NSS			GENMASK(7, 4)
4159fac3c81SRyder Lee #define RATE_CFG_GI			GENMASK(11, 8)
4169fac3c81SRyder Lee #define RATE_CFG_BW			GENMASK(15, 12)
4179fac3c81SRyder Lee #define RATE_CFG_STBC			GENMASK(19, 16)
4189fac3c81SRyder Lee #define RATE_CFG_LDPC			GENMASK(23, 20)
4199fac3c81SRyder Lee #define RATE_CFG_PHY_TYPE		GENMASK(27, 24)
4204d242332SRyder Lee #define RATE_CFG_HE_LTF			GENMASK(31, 28)
4219fac3c81SRyder Lee 
42289029a85SRyder Lee enum {
423*66b181b8SRyder Lee 	TX_POWER_LIMIT_ENABLE,
424*66b181b8SRyder Lee 	TX_POWER_LIMIT_TABLE = 0x4,
425*66b181b8SRyder Lee 	TX_POWER_LIMIT_INFO = 0x7,
426*66b181b8SRyder Lee 	TX_POWER_LIMIT_FRAME = 0x11,
427*66b181b8SRyder Lee 	TX_POWER_LIMIT_FRAME_MIN = 0x12,
428*66b181b8SRyder Lee };
429*66b181b8SRyder Lee 
430*66b181b8SRyder Lee enum {
4313dc00ecfSRyder Lee 	SPR_ENABLE = 0x1,
4323dc00ecfSRyder Lee 	SPR_ENABLE_SD = 0x3,
4333dc00ecfSRyder Lee 	SPR_ENABLE_MODE = 0x5,
4343dc00ecfSRyder Lee 	SPR_ENABLE_DPD = 0x23,
4353dc00ecfSRyder Lee 	SPR_ENABLE_TX = 0x25,
4363dc00ecfSRyder Lee 	SPR_SET_SRG_BITMAP = 0x80,
4373dc00ecfSRyder Lee 	SPR_SET_PARAM = 0xc2,
4383dc00ecfSRyder Lee 	SPR_SET_SIGA = 0xdc,
4393dc00ecfSRyder Lee };
4403dc00ecfSRyder Lee 
4413dc00ecfSRyder Lee enum {
44234b877d9SRyder Lee 	THERMAL_PROTECT_PARAMETER_CTRL,
44334b877d9SRyder Lee 	THERMAL_PROTECT_BASIC_INFO,
44434b877d9SRyder Lee 	THERMAL_PROTECT_ENABLE,
44534b877d9SRyder Lee 	THERMAL_PROTECT_DISABLE,
44634b877d9SRyder Lee 	THERMAL_PROTECT_DUTY_CONFIG,
44734b877d9SRyder Lee 	THERMAL_PROTECT_MECH_INFO,
44834b877d9SRyder Lee 	THERMAL_PROTECT_DUTY_INFO,
44934b877d9SRyder Lee 	THERMAL_PROTECT_STATE_ACT,
45034b877d9SRyder Lee };
45134b877d9SRyder Lee 
45234b877d9SRyder Lee enum {
453fd843822SRyder Lee 	MT_BF_SOUNDING_ON = 1,
454fd843822SRyder Lee 	MT_BF_TYPE_UPDATE = 20,
455fd843822SRyder Lee 	MT_BF_MODULE_UPDATE = 25
456fd843822SRyder Lee };
457fd843822SRyder Lee 
458e5a9f383SShayne Chen enum {
459e5a9f383SShayne Chen 	MURU_SET_ARB_OP_MODE = 14,
460e5a9f383SShayne Chen 	MURU_SET_PLATFORM_TYPE = 25,
461e5a9f383SShayne Chen };
462e5a9f383SShayne Chen 
463e5a9f383SShayne Chen enum {
464e5a9f383SShayne Chen 	MURU_PLATFORM_TYPE_PERF_LEVEL_1 = 1,
465e5a9f383SShayne Chen 	MURU_PLATFORM_TYPE_PERF_LEVEL_2,
466e5a9f383SShayne Chen };
467e5a9f383SShayne Chen 
4681966a507SMeiChia Chiu /* tx cmd tx statistics */
4691966a507SMeiChia Chiu enum {
4701966a507SMeiChia Chiu 	MURU_SET_TXC_TX_STATS_EN = 150,
4711966a507SMeiChia Chiu 	MURU_GET_TXC_TX_STATS = 151,
4721966a507SMeiChia Chiu };
4731966a507SMeiChia Chiu 
474bdd2ca78SRyder Lee enum {
475bdd2ca78SRyder Lee 	SER_QUERY,
476bdd2ca78SRyder Lee 	/* recovery */
477bdd2ca78SRyder Lee 	SER_SET_RECOVER_L1,
478bdd2ca78SRyder Lee 	SER_SET_RECOVER_L2,
479bdd2ca78SRyder Lee 	SER_SET_RECOVER_L3_RX_ABORT,
480bdd2ca78SRyder Lee 	SER_SET_RECOVER_L3_TX_ABORT,
481bdd2ca78SRyder Lee 	SER_SET_RECOVER_L3_TX_DISABLE,
482bdd2ca78SRyder Lee 	SER_SET_RECOVER_L3_BF,
483b662b71aSRyder Lee 	SER_SET_RECOVER_FULL,
484b662b71aSRyder Lee 	SER_SET_SYSTEM_ASSERT,
485bdd2ca78SRyder Lee 	/* action */
486bdd2ca78SRyder Lee 	SER_ENABLE = 2,
487bdd2ca78SRyder Lee 	SER_RECOVER
488bdd2ca78SRyder Lee };
489bdd2ca78SRyder Lee 
49018fced20SMeiChia Chiu #define MT7915_MAX_BEACON_SIZE		512
49118fced20SMeiChia Chiu #define MT7915_MAX_INBAND_FRAME_SIZE	256
49218fced20SMeiChia Chiu #define MT7915_MAX_BSS_OFFLOAD_SIZE	(MT7915_MAX_BEACON_SIZE +	  \
49318fced20SMeiChia Chiu 					 MT7915_MAX_INBAND_FRAME_SIZE +	  \
49418fced20SMeiChia Chiu 					 MT7915_BEACON_UPDATE_SIZE)
49518fced20SMeiChia Chiu 
4963e68af62SRyder Lee #define MT7915_BSS_UPDATE_MAX_SIZE	(sizeof(struct sta_req_hdr) +	\
4973e68af62SRyder Lee 					 sizeof(struct bss_info_omac) +	\
4983e68af62SRyder Lee 					 sizeof(struct bss_info_basic) +\
4993e68af62SRyder Lee 					 sizeof(struct bss_info_rf_ch) +\
5003e68af62SRyder Lee 					 sizeof(struct bss_info_ra) +	\
501b443e55fSRyder Lee 					 sizeof(struct bss_info_hw_amsdu) +\
5023e68af62SRyder Lee 					 sizeof(struct bss_info_he) +	\
5033e68af62SRyder Lee 					 sizeof(struct bss_info_bmc_rate) +\
504802145e2SRyder Lee 					 sizeof(struct bss_info_ext_bss))
5053e68af62SRyder Lee 
506e57b7901SRyder Lee #define MT7915_BEACON_UPDATE_SIZE	(sizeof(struct sta_req_hdr) +	\
507b4b9f0a3SLorenzo Bianconi 					 sizeof(struct bss_info_bcn_cntdwn) + \
508e57b7901SRyder Lee 					 sizeof(struct bss_info_bcn_mbss) + \
509869f0646SMeiChia Chiu 					 sizeof(struct bss_info_bcn_cont) + \
510869f0646SMeiChia Chiu 					 sizeof(struct bss_info_inband_discovery))
511e57b7901SRyder Lee 
512e57b7901SRyder Lee #endif
513