blob: 064d33e33738a68a8625049e5f6d237d7d2c879c [file] [log] [blame]
developerb11a5392022-03-31 00:34:47 +08001/* SPDX-License-Identifier: ISC */
2/* Copyright (C) 2020 MediaTek Inc. */
3
4#ifndef __MT7915_MCU_H
5#define __MT7915_MCU_H
6
7#include "../mt76_connac_mcu.h"
8
9struct mt7915_mcu_txd {
10 __le32 txd[8];
11
12 __le16 len;
13 __le16 pq_id;
14
15 u8 cid;
16 u8 pkt_type;
17 u8 set_query; /* FW don't care */
18 u8 seq;
19
20 u8 uc_d2b0_rev;
21 u8 ext_cid;
22 u8 s2d_index;
23 u8 ext_cid_ack;
24
25 u32 reserved[5];
26} __packed __aligned(4);
27
28enum {
29 MCU_ATE_SET_TRX = 0x1,
30 MCU_ATE_SET_FREQ_OFFSET = 0xa,
31 MCU_ATE_SET_SLOT_TIME = 0x13,
32 MCU_ATE_CLEAN_TXQUEUE = 0x1c,
33};
34
35struct mt7915_mcu_rxd {
36 __le32 rxd[6];
37
38 __le16 len;
39 __le16 pkt_type_id;
40
41 u8 eid;
42 u8 seq;
43 __le16 __rsv;
44
45 u8 ext_eid;
46 u8 __rsv1[2];
47 u8 s2d_index;
48};
49
50struct mt7915_mcu_thermal_ctrl {
51 u8 ctrl_id;
52 u8 band_idx;
53 union {
54 struct {
55 u8 protect_type; /* 1: duty admit, 2: radio off */
56 u8 trigger_type; /* 0: low, 1: high */
57 } __packed type;
58 struct {
59 u8 duty_level; /* level 0~3 */
60 u8 duty_cycle;
61 } __packed duty;
62 };
63} __packed;
64
65struct mt7915_mcu_thermal_notify {
66 struct mt7915_mcu_rxd rxd;
67
68 struct mt7915_mcu_thermal_ctrl ctrl;
69 __le32 temperature;
70 u8 rsv[8];
71} __packed;
72
73struct mt7915_mcu_csa_notify {
74 struct mt7915_mcu_rxd rxd;
75
76 u8 omac_idx;
77 u8 csa_count;
78 u8 band_idx;
79 u8 rsv;
80} __packed;
81
82struct mt7915_mcu_bcc_notify {
83 struct mt7915_mcu_rxd rxd;
84
85 u8 band_idx;
86 u8 omac_idx;
87 u8 cca_count;
88 u8 rsv;
89} __packed;
90
91struct mt7915_mcu_rdd_report {
92 struct mt7915_mcu_rxd rxd;
93
94 u8 band_idx;
95 u8 long_detected;
96 u8 constant_prf_detected;
97 u8 staggered_prf_detected;
98 u8 radar_type_idx;
99 u8 periodic_pulse_num;
100 u8 long_pulse_num;
101 u8 hw_pulse_num;
102
103 u8 out_lpn;
104 u8 out_spn;
105 u8 out_crpn;
106 u8 out_crpw;
107 u8 out_crbn;
108 u8 out_stgpn;
109 u8 out_stgpw;
110
111 u8 rsv;
112
113 __le32 out_pri_const;
114 __le32 out_pri_stg[3];
115
116 struct {
117 __le32 start;
118 __le16 pulse_width;
119 __le16 pulse_power;
120 u8 mdrdy_flag;
121 u8 rsv[3];
122 } long_pulse[32];
123
124 struct {
125 __le32 start;
126 __le16 pulse_width;
127 __le16 pulse_power;
128 u8 mdrdy_flag;
129 u8 rsv[3];
130 } periodic_pulse[32];
131
132 struct {
133 __le32 start;
134 __le16 pulse_width;
135 __le16 pulse_power;
136 u8 sc_pass;
137 u8 sw_reset;
138 u8 mdrdy_flag;
139 u8 tx_active;
140 } hw_pulse[32];
141} __packed;
142
143struct mt7915_mcu_background_chain_ctrl {
144 u8 chan; /* primary channel */
145 u8 central_chan; /* central channel */
146 u8 bw;
147 u8 tx_stream;
148 u8 rx_stream;
149
150 u8 monitor_chan; /* monitor channel */
151 u8 monitor_central_chan;/* monitor central channel */
152 u8 monitor_bw;
153 u8 monitor_tx_stream;
154 u8 monitor_rx_stream;
155
156 u8 scan_mode; /* 0: ScanStop
157 * 1: ScanStart
158 * 2: ScanRunning
159 */
160 u8 band_idx; /* DBDC */
161 u8 monitor_scan_type;
162 u8 band; /* 0: 2.4GHz, 1: 5GHz */
163 u8 rsv[2];
164} __packed;
165
166struct mt7915_mcu_eeprom {
167 u8 buffer_mode;
168 u8 format;
169 __le16 len;
170} __packed;
171
172struct mt7915_mcu_eeprom_info {
173 __le32 addr;
174 __le32 valid;
175 u8 data[16];
176} __packed;
177
178struct mt7915_mcu_phy_rx_info {
179 u8 category;
180 u8 rate;
181 u8 mode;
182 u8 nsts;
183 u8 gi;
184 u8 coding;
185 u8 stbc;
186 u8 bw;
187};
188
189struct mt7915_mcu_mib {
190 __le32 band;
191 __le32 offs;
192 __le64 data;
193} __packed;
194
195enum mt7915_chan_mib_offs {
196 /* mt7915 */
197 MIB_BUSY_TIME = 14,
198 MIB_TX_TIME = 81,
199 MIB_RX_TIME,
200 MIB_OBSS_AIRTIME = 86,
201 /* mt7916 */
202 MIB_BUSY_TIME_V2 = 0,
203 MIB_TX_TIME_V2 = 6,
204 MIB_RX_TIME_V2 = 8,
205 MIB_OBSS_AIRTIME_V2 = 490
206};
207
208struct edca {
209 u8 queue;
210 u8 set;
211 u8 aifs;
212 u8 cw_min;
213 __le16 cw_max;
214 __le16 txop;
215};
216
217struct mt7915_mcu_tx {
218 u8 total;
219 u8 action;
220 u8 valid;
221 u8 mode;
222
223 struct edca edca[IEEE80211_NUM_ACS];
224} __packed;
225
226struct mt7915_mcu_muru_stats {
227 __le32 event_id;
228 struct {
229 __le32 cck_cnt;
230 __le32 ofdm_cnt;
231 __le32 htmix_cnt;
232 __le32 htgf_cnt;
233 __le32 vht_su_cnt;
234 __le32 vht_2mu_cnt;
235 __le32 vht_3mu_cnt;
236 __le32 vht_4mu_cnt;
237 __le32 he_su_cnt;
238 __le32 he_ext_su_cnt;
239 __le32 he_2ru_cnt;
240 __le32 he_2mu_cnt;
241 __le32 he_3ru_cnt;
242 __le32 he_3mu_cnt;
243 __le32 he_4ru_cnt;
244 __le32 he_4mu_cnt;
245 __le32 he_5to8ru_cnt;
246 __le32 he_9to16ru_cnt;
247 __le32 he_gtr16ru_cnt;
248 } dl;
249
250 struct {
251 __le32 hetrig_su_cnt;
252 __le32 hetrig_2ru_cnt;
253 __le32 hetrig_3ru_cnt;
254 __le32 hetrig_4ru_cnt;
255 __le32 hetrig_5to8ru_cnt;
256 __le32 hetrig_9to16ru_cnt;
257 __le32 hetrig_gtr16ru_cnt;
258 __le32 hetrig_2mu_cnt;
259 __le32 hetrig_3mu_cnt;
260 __le32 hetrig_4mu_cnt;
261 } ul;
262};
263
264#define WMM_AIFS_SET BIT(0)
265#define WMM_CW_MIN_SET BIT(1)
266#define WMM_CW_MAX_SET BIT(2)
267#define WMM_TXOP_SET BIT(3)
268#define WMM_PARAM_SET GENMASK(3, 0)
269
270#define MCU_PQ_ID(p, q) (((p) << 15) | ((q) << 10))
271#define MCU_PKT_ID 0xa0
272
273enum {
274 MCU_FW_LOG_WM,
275 MCU_FW_LOG_WA,
276 MCU_FW_LOG_TO_HOST,
277};
278
279enum {
280 MCU_TWT_AGRT_ADD,
281 MCU_TWT_AGRT_MODIFY,
282 MCU_TWT_AGRT_DELETE,
283 MCU_TWT_AGRT_TEARDOWN,
284 MCU_TWT_AGRT_GET_TSF,
285};
286
287enum {
288 MCU_WA_PARAM_CMD_QUERY,
289 MCU_WA_PARAM_CMD_SET,
290 MCU_WA_PARAM_CMD_CAPABILITY,
291 MCU_WA_PARAM_CMD_DEBUG,
292};
293
294enum {
295 MCU_WA_PARAM_PDMA_RX = 0x04,
296 MCU_WA_PARAM_CPU_UTIL = 0x0b,
297 MCU_WA_PARAM_RED = 0x0e,
298};
299
300enum mcu_mmps_mode {
301 MCU_MMPS_STATIC,
302 MCU_MMPS_DYNAMIC,
303 MCU_MMPS_RSV,
304 MCU_MMPS_DISABLE,
305};
306
developerb11a5392022-03-31 00:34:47 +0800307struct bss_info_bmc_rate {
308 __le16 tag;
309 __le16 len;
310 __le16 bc_trans;
311 __le16 mc_trans;
312 u8 short_preamble;
313 u8 rsv[7];
314} __packed;
315
316struct bss_info_ra {
317 __le16 tag;
318 __le16 len;
319 u8 op_mode;
320 u8 adhoc_en;
321 u8 short_preamble;
322 u8 tx_streams;
323 u8 rx_streams;
324 u8 algo;
325 u8 force_sgi;
326 u8 force_gf;
327 u8 ht_mode;
328 u8 has_20_sta; /* Check if any sta support GF. */
329 u8 bss_width_trigger_events;
330 u8 vht_nss_cap;
331 u8 vht_bw_signal; /* not use */
332 u8 vht_force_sgi; /* not use */
333 u8 se_off;
334 u8 antenna_idx;
335 u8 train_up_rule;
336 u8 rsv[3];
337 unsigned short train_up_high_thres;
338 short train_up_rule_rssi;
339 unsigned short low_traffic_thres;
340 __le16 max_phyrate;
341 __le32 phy_cap;
342 __le32 interval;
343 __le32 fast_interval;
344} __packed;
345
346struct bss_info_hw_amsdu {
347 __le16 tag;
348 __le16 len;
349 __le32 cmp_bitmap_0;
350 __le32 cmp_bitmap_1;
351 __le16 trig_thres;
352 u8 enable;
353 u8 rsv;
354} __packed;
355
356struct bss_info_color {
357 __le16 tag;
358 __le16 len;
359 u8 disable;
360 u8 color;
361 u8 rsv[2];
362} __packed;
363
364struct bss_info_he {
365 __le16 tag;
366 __le16 len;
367 u8 he_pe_duration;
368 u8 vht_op_info_present;
369 __le16 he_rts_thres;
370 __le16 max_nss_mcs[CMD_HE_MCS_BW_NUM];
371 u8 rsv[6];
372} __packed;
373
374struct bss_info_bcn {
375 __le16 tag;
376 __le16 len;
377 u8 ver;
378 u8 enable;
379 __le16 sub_ntlv;
380} __packed __aligned(4);
381
382struct bss_info_bcn_cntdwn {
383 __le16 tag;
384 __le16 len;
385 u8 cnt;
386 u8 rsv[3];
387} __packed __aligned(4);
388
389struct bss_info_bcn_mbss {
390#define MAX_BEACON_NUM 32
391 __le16 tag;
392 __le16 len;
393 __le32 bitmap;
394 __le16 offset[MAX_BEACON_NUM];
395 u8 rsv[8];
396} __packed __aligned(4);
397
398struct bss_info_bcn_cont {
399 __le16 tag;
400 __le16 len;
401 __le16 tim_ofs;
402 __le16 csa_ofs;
403 __le16 bcc_ofs;
404 __le16 pkt_len;
405} __packed __aligned(4);
406
407enum {
408 BSS_INFO_BCN_CSA,
409 BSS_INFO_BCN_BCC,
410 BSS_INFO_BCN_MBSSID,
411 BSS_INFO_BCN_CONTENT,
412 BSS_INFO_BCN_MAX
413};
414
415enum {
416 RATE_PARAM_FIXED = 3,
417 RATE_PARAM_MMPS_UPDATE = 5,
418 RATE_PARAM_FIXED_HE_LTF = 7,
419 RATE_PARAM_FIXED_MCS,
420 RATE_PARAM_FIXED_GI = 11,
421 RATE_PARAM_AUTO = 20,
422};
423
424#define RATE_CFG_MCS GENMASK(3, 0)
425#define RATE_CFG_NSS GENMASK(7, 4)
426#define RATE_CFG_GI GENMASK(11, 8)
427#define RATE_CFG_BW GENMASK(15, 12)
428#define RATE_CFG_STBC GENMASK(19, 16)
429#define RATE_CFG_LDPC GENMASK(23, 20)
430#define RATE_CFG_PHY_TYPE GENMASK(27, 24)
431#define RATE_CFG_HE_LTF GENMASK(31, 28)
432
433enum {
434 THERMAL_PROTECT_PARAMETER_CTRL,
435 THERMAL_PROTECT_BASIC_INFO,
436 THERMAL_PROTECT_ENABLE,
437 THERMAL_PROTECT_DISABLE,
438 THERMAL_PROTECT_DUTY_CONFIG,
439 THERMAL_PROTECT_MECH_INFO,
440 THERMAL_PROTECT_DUTY_INFO,
441 THERMAL_PROTECT_STATE_ACT,
442};
443
444enum {
445 MT_BF_SOUNDING_ON = 1,
446 MT_BF_TYPE_UPDATE = 20,
447 MT_BF_MODULE_UPDATE = 25
448};
449
450enum {
451 MURU_SET_ARB_OP_MODE = 14,
452 MURU_SET_PLATFORM_TYPE = 25,
453};
454
455enum {
456 MURU_PLATFORM_TYPE_PERF_LEVEL_1 = 1,
457 MURU_PLATFORM_TYPE_PERF_LEVEL_2,
458};
459
460/* tx cmd tx statistics */
461enum {
462 MURU_SET_TXC_TX_STATS_EN = 150,
463 MURU_GET_TXC_TX_STATS = 151,
464};
465
466#define MT7915_BSS_UPDATE_MAX_SIZE (sizeof(struct sta_req_hdr) + \
467 sizeof(struct bss_info_omac) + \
468 sizeof(struct bss_info_basic) +\
469 sizeof(struct bss_info_rf_ch) +\
470 sizeof(struct bss_info_ra) + \
471 sizeof(struct bss_info_hw_amsdu) +\
472 sizeof(struct bss_info_he) + \
473 sizeof(struct bss_info_bmc_rate) +\
474 sizeof(struct bss_info_ext_bss))
475
476#define MT7915_BEACON_UPDATE_SIZE (sizeof(struct sta_req_hdr) + \
477 sizeof(struct bss_info_bcn_cntdwn) + \
478 sizeof(struct bss_info_bcn_mbss) + \
479 sizeof(struct bss_info_bcn_cont))
480
481#endif