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 
187e3296759SRyder Lee struct mt7915_mcu_txpower_sku {
188e3296759SRyder Lee 	u8 format_id;
189e3296759SRyder Lee 	u8 limit_type;
190e3296759SRyder Lee 	u8 band_idx;
191e3296759SRyder Lee 	s8 txpower_sku[MT7915_SKU_RATE_NUM];
192e3296759SRyder Lee } __packed;
193e3296759SRyder Lee 
1947ff903bcSShayne Chen struct edca {
1957ff903bcSShayne Chen 	u8 queue;
1967ff903bcSShayne Chen 	u8 set;
1977ff903bcSShayne Chen 	u8 aifs;
1987ff903bcSShayne Chen 	u8 cw_min;
1997ff903bcSShayne Chen 	__le16 cw_max;
2007ff903bcSShayne Chen 	__le16 txop;
2017ff903bcSShayne Chen };
2027ff903bcSShayne Chen 
2037ff903bcSShayne Chen struct mt7915_mcu_tx {
2047ff903bcSShayne Chen 	u8 total;
2057ff903bcSShayne Chen 	u8 action;
2067ff903bcSShayne Chen 	u8 valid;
2077ff903bcSShayne Chen 	u8 mode;
2087ff903bcSShayne Chen 
2097ff903bcSShayne Chen 	struct edca edca[IEEE80211_NUM_ACS];
2107ff903bcSShayne Chen } __packed;
2117ff903bcSShayne Chen 
2121966a507SMeiChia Chiu struct mt7915_mcu_muru_stats {
2131966a507SMeiChia Chiu 	__le32 event_id;
2141966a507SMeiChia Chiu 	struct {
2151966a507SMeiChia Chiu 		__le32 cck_cnt;
2161966a507SMeiChia Chiu 		__le32 ofdm_cnt;
2171966a507SMeiChia Chiu 		__le32 htmix_cnt;
2181966a507SMeiChia Chiu 		__le32 htgf_cnt;
2191966a507SMeiChia Chiu 		__le32 vht_su_cnt;
2201966a507SMeiChia Chiu 		__le32 vht_2mu_cnt;
2211966a507SMeiChia Chiu 		__le32 vht_3mu_cnt;
2221966a507SMeiChia Chiu 		__le32 vht_4mu_cnt;
2231966a507SMeiChia Chiu 		__le32 he_su_cnt;
2241966a507SMeiChia Chiu 		__le32 he_ext_su_cnt;
2251966a507SMeiChia Chiu 		__le32 he_2ru_cnt;
2261966a507SMeiChia Chiu 		__le32 he_2mu_cnt;
2271966a507SMeiChia Chiu 		__le32 he_3ru_cnt;
2281966a507SMeiChia Chiu 		__le32 he_3mu_cnt;
2291966a507SMeiChia Chiu 		__le32 he_4ru_cnt;
2301966a507SMeiChia Chiu 		__le32 he_4mu_cnt;
2311966a507SMeiChia Chiu 		__le32 he_5to8ru_cnt;
2321966a507SMeiChia Chiu 		__le32 he_9to16ru_cnt;
2331966a507SMeiChia Chiu 		__le32 he_gtr16ru_cnt;
2341966a507SMeiChia Chiu 	} dl;
2351966a507SMeiChia Chiu 
2361966a507SMeiChia Chiu 	struct {
2371966a507SMeiChia Chiu 		__le32 hetrig_su_cnt;
2381966a507SMeiChia Chiu 		__le32 hetrig_2ru_cnt;
2391966a507SMeiChia Chiu 		__le32 hetrig_3ru_cnt;
2401966a507SMeiChia Chiu 		__le32 hetrig_4ru_cnt;
2411966a507SMeiChia Chiu 		__le32 hetrig_5to8ru_cnt;
2421966a507SMeiChia Chiu 		__le32 hetrig_9to16ru_cnt;
2431966a507SMeiChia Chiu 		__le32 hetrig_gtr16ru_cnt;
2441966a507SMeiChia Chiu 		__le32 hetrig_2mu_cnt;
2451966a507SMeiChia Chiu 		__le32 hetrig_3mu_cnt;
2461966a507SMeiChia Chiu 		__le32 hetrig_4mu_cnt;
2471966a507SMeiChia Chiu 	} ul;
2481966a507SMeiChia Chiu };
2491966a507SMeiChia Chiu 
2507ff903bcSShayne Chen #define WMM_AIFS_SET		BIT(0)
2517ff903bcSShayne Chen #define WMM_CW_MIN_SET		BIT(1)
2527ff903bcSShayne Chen #define WMM_CW_MAX_SET		BIT(2)
2537ff903bcSShayne Chen #define WMM_TXOP_SET		BIT(3)
2547ff903bcSShayne Chen #define WMM_PARAM_SET		GENMASK(3, 0)
2557ff903bcSShayne Chen 
256e57b7901SRyder Lee enum {
2579b121acdSShayne Chen 	MCU_FW_LOG_WM,
2589b121acdSShayne Chen 	MCU_FW_LOG_WA,
2599b121acdSShayne Chen 	MCU_FW_LOG_TO_HOST,
2609b121acdSShayne Chen };
261c203dd62SFelix Fietkau 
262f1fd2caeSFelix Fietkau enum {
263179090a5SLorenzo Bianconi 	MCU_TWT_AGRT_ADD,
264179090a5SLorenzo Bianconi 	MCU_TWT_AGRT_MODIFY,
265179090a5SLorenzo Bianconi 	MCU_TWT_AGRT_DELETE,
266179090a5SLorenzo Bianconi 	MCU_TWT_AGRT_TEARDOWN,
267179090a5SLorenzo Bianconi 	MCU_TWT_AGRT_GET_TSF,
268179090a5SLorenzo Bianconi };
269179090a5SLorenzo Bianconi 
270179090a5SLorenzo Bianconi enum {
271f1fd2caeSFelix Fietkau 	MCU_WA_PARAM_CMD_QUERY,
272f1fd2caeSFelix Fietkau 	MCU_WA_PARAM_CMD_SET,
273f1fd2caeSFelix Fietkau 	MCU_WA_PARAM_CMD_CAPABILITY,
274f1fd2caeSFelix Fietkau 	MCU_WA_PARAM_CMD_DEBUG,
275f1fd2caeSFelix Fietkau };
276f1fd2caeSFelix Fietkau 
277f1fd2caeSFelix Fietkau enum {
27890f5daeaSShayne Chen 	MCU_WA_PARAM_PDMA_RX = 0x04,
27990f5daeaSShayne Chen 	MCU_WA_PARAM_CPU_UTIL = 0x0b,
280f1fd2caeSFelix Fietkau 	MCU_WA_PARAM_RED = 0x0e,
2817576a1c4SPeter Chiu 	MCU_WA_PARAM_RED_SETTING = 0x40,
282f1fd2caeSFelix Fietkau };
283f1fd2caeSFelix Fietkau 
2848f058354SRyder Lee enum mcu_mmps_mode {
2858f058354SRyder Lee 	MCU_MMPS_STATIC,
2868f058354SRyder Lee 	MCU_MMPS_DYNAMIC,
2878f058354SRyder Lee 	MCU_MMPS_RSV,
2888f058354SRyder Lee 	MCU_MMPS_DISABLE,
2898f058354SRyder Lee };
2908f058354SRyder Lee 
291e57b7901SRyder Lee struct bss_info_bmc_rate {
292e57b7901SRyder Lee 	__le16 tag;
293e57b7901SRyder Lee 	__le16 len;
294e57b7901SRyder Lee 	__le16 bc_trans;
295e57b7901SRyder Lee 	__le16 mc_trans;
296e57b7901SRyder Lee 	u8 short_preamble;
297e57b7901SRyder Lee 	u8 rsv[7];
298e57b7901SRyder Lee } __packed;
299e57b7901SRyder Lee 
300e57b7901SRyder Lee struct bss_info_ra {
301e57b7901SRyder Lee 	__le16 tag;
302e57b7901SRyder Lee 	__le16 len;
303e57b7901SRyder Lee 	u8 op_mode;
304e57b7901SRyder Lee 	u8 adhoc_en;
305e57b7901SRyder Lee 	u8 short_preamble;
306e57b7901SRyder Lee 	u8 tx_streams;
307e57b7901SRyder Lee 	u8 rx_streams;
308e57b7901SRyder Lee 	u8 algo;
309e57b7901SRyder Lee 	u8 force_sgi;
310e57b7901SRyder Lee 	u8 force_gf;
311e57b7901SRyder Lee 	u8 ht_mode;
312e57b7901SRyder Lee 	u8 has_20_sta;		/* Check if any sta support GF. */
313e57b7901SRyder Lee 	u8 bss_width_trigger_events;
314e57b7901SRyder Lee 	u8 vht_nss_cap;
315e57b7901SRyder Lee 	u8 vht_bw_signal;	/* not use */
316e57b7901SRyder Lee 	u8 vht_force_sgi;	/* not use */
317e57b7901SRyder Lee 	u8 se_off;
318e57b7901SRyder Lee 	u8 antenna_idx;
319e57b7901SRyder Lee 	u8 train_up_rule;
320e57b7901SRyder Lee 	u8 rsv[3];
321e57b7901SRyder Lee 	unsigned short train_up_high_thres;
322e57b7901SRyder Lee 	short train_up_rule_rssi;
323e57b7901SRyder Lee 	unsigned short low_traffic_thres;
324e57b7901SRyder Lee 	__le16 max_phyrate;
325e57b7901SRyder Lee 	__le32 phy_cap;
326e57b7901SRyder Lee 	__le32 interval;
327e57b7901SRyder Lee 	__le32 fast_interval;
328e57b7901SRyder Lee } __packed;
329e57b7901SRyder Lee 
330b443e55fSRyder Lee struct bss_info_hw_amsdu {
331b443e55fSRyder Lee 	__le16 tag;
332b443e55fSRyder Lee 	__le16 len;
333b443e55fSRyder Lee 	__le32 cmp_bitmap_0;
334b443e55fSRyder Lee 	__le32 cmp_bitmap_1;
335b443e55fSRyder Lee 	__le16 trig_thres;
336b443e55fSRyder Lee 	u8 enable;
337b443e55fSRyder Lee 	u8 rsv;
338b443e55fSRyder Lee } __packed;
339b443e55fSRyder Lee 
340b4b9f0a3SLorenzo Bianconi struct bss_info_color {
341b4b9f0a3SLorenzo Bianconi 	__le16 tag;
342b4b9f0a3SLorenzo Bianconi 	__le16 len;
343b4b9f0a3SLorenzo Bianconi 	u8 disable;
344b4b9f0a3SLorenzo Bianconi 	u8 color;
345b4b9f0a3SLorenzo Bianconi 	u8 rsv[2];
346b4b9f0a3SLorenzo Bianconi } __packed;
347b4b9f0a3SLorenzo Bianconi 
3486094f86fSRyder Lee struct bss_info_he {
3496094f86fSRyder Lee 	__le16 tag;
3506094f86fSRyder Lee 	__le16 len;
3516094f86fSRyder Lee 	u8 he_pe_duration;
3526094f86fSRyder Lee 	u8 vht_op_info_present;
3536094f86fSRyder Lee 	__le16 he_rts_thres;
3546094f86fSRyder Lee 	__le16 max_nss_mcs[CMD_HE_MCS_BW_NUM];
3556094f86fSRyder Lee 	u8 rsv[6];
3566094f86fSRyder Lee } __packed;
3576094f86fSRyder Lee 
358e57b7901SRyder Lee struct bss_info_bcn {
359e57b7901SRyder Lee 	__le16 tag;
360e57b7901SRyder Lee 	__le16 len;
361e57b7901SRyder Lee 	u8 ver;
362e57b7901SRyder Lee 	u8 enable;
363e57b7901SRyder Lee 	__le16 sub_ntlv;
364e57b7901SRyder Lee } __packed __aligned(4);
365e57b7901SRyder Lee 
366b4b9f0a3SLorenzo Bianconi struct bss_info_bcn_cntdwn {
367e57b7901SRyder Lee 	__le16 tag;
368e57b7901SRyder Lee 	__le16 len;
369e57b7901SRyder Lee 	u8 cnt;
370e57b7901SRyder Lee 	u8 rsv[3];
371e57b7901SRyder Lee } __packed __aligned(4);
372e57b7901SRyder Lee 
373e57b7901SRyder Lee struct bss_info_bcn_mbss {
374e57b7901SRyder Lee #define MAX_BEACON_NUM	32
375e57b7901SRyder Lee 	__le16 tag;
376e57b7901SRyder Lee 	__le16 len;
377e57b7901SRyder Lee 	__le32 bitmap;
378e57b7901SRyder Lee 	__le16 offset[MAX_BEACON_NUM];
379e57b7901SRyder Lee 	u8 rsv[8];
380e57b7901SRyder Lee } __packed __aligned(4);
381e57b7901SRyder Lee 
382e57b7901SRyder Lee struct bss_info_bcn_cont {
383e57b7901SRyder Lee 	__le16 tag;
384e57b7901SRyder Lee 	__le16 len;
385e57b7901SRyder Lee 	__le16 tim_ofs;
386e57b7901SRyder Lee 	__le16 csa_ofs;
387e57b7901SRyder Lee 	__le16 bcc_ofs;
388e57b7901SRyder Lee 	__le16 pkt_len;
389e57b7901SRyder Lee } __packed __aligned(4);
390e57b7901SRyder Lee 
391869f0646SMeiChia Chiu struct bss_info_inband_discovery {
392869f0646SMeiChia Chiu 	__le16 tag;
393869f0646SMeiChia Chiu 	__le16 len;
394869f0646SMeiChia Chiu 	u8 tx_type;
395869f0646SMeiChia Chiu 	u8 tx_mode;
396869f0646SMeiChia Chiu 	u8 tx_interval;
397869f0646SMeiChia Chiu 	u8 enable;
398869f0646SMeiChia Chiu 	__le16 rsv;
399869f0646SMeiChia Chiu 	__le16 prob_rsp_len;
400869f0646SMeiChia Chiu } __packed __aligned(4);
401869f0646SMeiChia Chiu 
402e57b7901SRyder Lee enum {
403e57b7901SRyder Lee 	BSS_INFO_BCN_CSA,
404e57b7901SRyder Lee 	BSS_INFO_BCN_BCC,
405e57b7901SRyder Lee 	BSS_INFO_BCN_MBSSID,
406e57b7901SRyder Lee 	BSS_INFO_BCN_CONTENT,
407869f0646SMeiChia Chiu 	BSS_INFO_BCN_DISCOV,
408e57b7901SRyder Lee 	BSS_INFO_BCN_MAX
409e57b7901SRyder Lee };
410e57b7901SRyder Lee 
411e57b7901SRyder Lee enum {
41270fd1333SRyder Lee 	RATE_PARAM_FIXED = 3,
4138f058354SRyder Lee 	RATE_PARAM_MMPS_UPDATE = 5,
41470fd1333SRyder Lee 	RATE_PARAM_FIXED_HE_LTF = 7,
41570fd1333SRyder Lee 	RATE_PARAM_FIXED_MCS,
41670fd1333SRyder Lee 	RATE_PARAM_FIXED_GI = 11,
41770fd1333SRyder Lee 	RATE_PARAM_AUTO = 20,
4187a9a957bSShayne Chen 	RATE_PARAM_SPE_UPDATE = 22,
41970fd1333SRyder Lee };
42070fd1333SRyder Lee 
4219fac3c81SRyder Lee #define RATE_CFG_MCS			GENMASK(3, 0)
4229fac3c81SRyder Lee #define RATE_CFG_NSS			GENMASK(7, 4)
4239fac3c81SRyder Lee #define RATE_CFG_GI			GENMASK(11, 8)
4249fac3c81SRyder Lee #define RATE_CFG_BW			GENMASK(15, 12)
4259fac3c81SRyder Lee #define RATE_CFG_STBC			GENMASK(19, 16)
4269fac3c81SRyder Lee #define RATE_CFG_LDPC			GENMASK(23, 20)
4279fac3c81SRyder Lee #define RATE_CFG_PHY_TYPE		GENMASK(27, 24)
4284d242332SRyder Lee #define RATE_CFG_HE_LTF			GENMASK(31, 28)
4299fac3c81SRyder Lee 
43089029a85SRyder Lee enum {
43166b181b8SRyder Lee 	TX_POWER_LIMIT_ENABLE,
43266b181b8SRyder Lee 	TX_POWER_LIMIT_TABLE = 0x4,
43366b181b8SRyder Lee 	TX_POWER_LIMIT_INFO = 0x7,
43466b181b8SRyder Lee 	TX_POWER_LIMIT_FRAME = 0x11,
43566b181b8SRyder Lee 	TX_POWER_LIMIT_FRAME_MIN = 0x12,
43666b181b8SRyder Lee };
43766b181b8SRyder Lee 
43866b181b8SRyder Lee enum {
4393dc00ecfSRyder Lee 	SPR_ENABLE = 0x1,
4403dc00ecfSRyder Lee 	SPR_ENABLE_SD = 0x3,
4413dc00ecfSRyder Lee 	SPR_ENABLE_MODE = 0x5,
4423dc00ecfSRyder Lee 	SPR_ENABLE_DPD = 0x23,
4433dc00ecfSRyder Lee 	SPR_ENABLE_TX = 0x25,
4443dc00ecfSRyder Lee 	SPR_SET_SRG_BITMAP = 0x80,
4453dc00ecfSRyder Lee 	SPR_SET_PARAM = 0xc2,
4463dc00ecfSRyder Lee 	SPR_SET_SIGA = 0xdc,
4473dc00ecfSRyder Lee };
4483dc00ecfSRyder Lee 
4493dc00ecfSRyder Lee enum {
45034b877d9SRyder Lee 	THERMAL_PROTECT_PARAMETER_CTRL,
45134b877d9SRyder Lee 	THERMAL_PROTECT_BASIC_INFO,
45234b877d9SRyder Lee 	THERMAL_PROTECT_ENABLE,
45334b877d9SRyder Lee 	THERMAL_PROTECT_DISABLE,
45434b877d9SRyder Lee 	THERMAL_PROTECT_DUTY_CONFIG,
45534b877d9SRyder Lee 	THERMAL_PROTECT_MECH_INFO,
45634b877d9SRyder Lee 	THERMAL_PROTECT_DUTY_INFO,
45734b877d9SRyder Lee 	THERMAL_PROTECT_STATE_ACT,
45834b877d9SRyder Lee };
45934b877d9SRyder Lee 
46034b877d9SRyder Lee enum {
461fd843822SRyder Lee 	MT_BF_SOUNDING_ON = 1,
462fd843822SRyder Lee 	MT_BF_TYPE_UPDATE = 20,
463fd843822SRyder Lee 	MT_BF_MODULE_UPDATE = 25
464fd843822SRyder Lee };
465fd843822SRyder Lee 
466e5a9f383SShayne Chen enum {
467e5a9f383SShayne Chen 	MURU_SET_ARB_OP_MODE = 14,
468e5a9f383SShayne Chen 	MURU_SET_PLATFORM_TYPE = 25,
469e5a9f383SShayne Chen };
470e5a9f383SShayne Chen 
471e5a9f383SShayne Chen enum {
472e5a9f383SShayne Chen 	MURU_PLATFORM_TYPE_PERF_LEVEL_1 = 1,
473e5a9f383SShayne Chen 	MURU_PLATFORM_TYPE_PERF_LEVEL_2,
474e5a9f383SShayne Chen };
475e5a9f383SShayne Chen 
4761966a507SMeiChia Chiu /* tx cmd tx statistics */
4771966a507SMeiChia Chiu enum {
4781966a507SMeiChia Chiu 	MURU_SET_TXC_TX_STATS_EN = 150,
4791966a507SMeiChia Chiu 	MURU_GET_TXC_TX_STATS = 151,
4801966a507SMeiChia Chiu };
4811966a507SMeiChia Chiu 
482bdd2ca78SRyder Lee enum {
483bdd2ca78SRyder Lee 	SER_QUERY,
484bdd2ca78SRyder Lee 	/* recovery */
485bdd2ca78SRyder Lee 	SER_SET_RECOVER_L1,
486bdd2ca78SRyder Lee 	SER_SET_RECOVER_L2,
487bdd2ca78SRyder Lee 	SER_SET_RECOVER_L3_RX_ABORT,
488bdd2ca78SRyder Lee 	SER_SET_RECOVER_L3_TX_ABORT,
489bdd2ca78SRyder Lee 	SER_SET_RECOVER_L3_TX_DISABLE,
490bdd2ca78SRyder Lee 	SER_SET_RECOVER_L3_BF,
491b662b71aSRyder Lee 	SER_SET_RECOVER_FULL,
492b662b71aSRyder Lee 	SER_SET_SYSTEM_ASSERT,
493bdd2ca78SRyder Lee 	/* action */
494bdd2ca78SRyder Lee 	SER_ENABLE = 2,
495bdd2ca78SRyder Lee 	SER_RECOVER
496bdd2ca78SRyder Lee };
497bdd2ca78SRyder Lee 
498*671985baSMeiChia Chiu #define MT7915_MAX_BEACON_SIZE		1308
499*671985baSMeiChia Chiu #define MT7915_BEACON_UPDATE_SIZE	(sizeof(struct sta_req_hdr) +	\
500*671985baSMeiChia Chiu 					 sizeof(struct bss_info_bcn) +	\
501*671985baSMeiChia Chiu 					 sizeof(struct bss_info_bcn_cntdwn) +	\
502*671985baSMeiChia Chiu 					 sizeof(struct bss_info_bcn_mbss) +	\
503*671985baSMeiChia Chiu 					 MT_TXD_SIZE +	\
504*671985baSMeiChia Chiu 					 sizeof(struct bss_info_bcn_cont))
50518fced20SMeiChia Chiu #define MT7915_MAX_BSS_OFFLOAD_SIZE	(MT7915_MAX_BEACON_SIZE +	\
50618fced20SMeiChia Chiu 					 MT7915_BEACON_UPDATE_SIZE)
50718fced20SMeiChia Chiu 
5083e68af62SRyder Lee #define MT7915_BSS_UPDATE_MAX_SIZE	(sizeof(struct sta_req_hdr) +	\
5093e68af62SRyder Lee 					 sizeof(struct bss_info_omac) +	\
5103e68af62SRyder Lee 					 sizeof(struct bss_info_basic) +\
5113e68af62SRyder Lee 					 sizeof(struct bss_info_rf_ch) +\
5123e68af62SRyder Lee 					 sizeof(struct bss_info_ra) +	\
513b443e55fSRyder Lee 					 sizeof(struct bss_info_hw_amsdu) +\
5143e68af62SRyder Lee 					 sizeof(struct bss_info_he) +	\
5153e68af62SRyder Lee 					 sizeof(struct bss_info_bmc_rate) +\
516802145e2SRyder Lee 					 sizeof(struct bss_info_ext_bss))
5173e68af62SRyder Lee 
51854dd1dc7SRyder Lee static inline s8
mt7915_get_power_bound(struct mt7915_phy * phy,s8 txpower)51954dd1dc7SRyder Lee mt7915_get_power_bound(struct mt7915_phy *phy, s8 txpower)
52054dd1dc7SRyder Lee {
52154dd1dc7SRyder Lee 	struct mt76_phy *mphy = phy->mt76;
52254dd1dc7SRyder Lee 	int n_chains = hweight8(mphy->antenna_mask);
52354dd1dc7SRyder Lee 
52454dd1dc7SRyder Lee 	txpower = mt76_get_sar_power(mphy, mphy->chandef.chan, txpower * 2);
52554dd1dc7SRyder Lee 	txpower -= mt76_tx_power_nss_delta(n_chains);
52654dd1dc7SRyder Lee 
52754dd1dc7SRyder Lee 	return txpower;
52854dd1dc7SRyder Lee }
52954dd1dc7SRyder Lee 
530e57b7901SRyder Lee #endif
531