xref: /freebsd/sys/contrib/dev/mediatek/mt76/mt7921/mcu.h (revision 8ba4d145d351db26e07695b8e90697398c5dfec2)
16c92544dSBjoern A. Zeeb /* SPDX-License-Identifier: ISC */
26c92544dSBjoern A. Zeeb /* Copyright (C) 2020 MediaTek Inc. */
36c92544dSBjoern A. Zeeb 
46c92544dSBjoern A. Zeeb #ifndef __MT7921_MCU_H
56c92544dSBjoern A. Zeeb #define __MT7921_MCU_H
66c92544dSBjoern A. Zeeb 
76c92544dSBjoern A. Zeeb #include "../mt76_connac_mcu.h"
86c92544dSBjoern A. Zeeb 
96c92544dSBjoern A. Zeeb struct mt7921_mcu_tx_done_event {
106c92544dSBjoern A. Zeeb 	u8 pid;
116c92544dSBjoern A. Zeeb 	u8 status;
126c92544dSBjoern A. Zeeb 	__le16 seq;
136c92544dSBjoern A. Zeeb 
146c92544dSBjoern A. Zeeb 	u8 wlan_idx;
156c92544dSBjoern A. Zeeb 	u8 tx_cnt;
166c92544dSBjoern A. Zeeb 	__le16 tx_rate;
176c92544dSBjoern A. Zeeb 
186c92544dSBjoern A. Zeeb 	u8 flag;
196c92544dSBjoern A. Zeeb 	u8 tid;
206c92544dSBjoern A. Zeeb 	u8 rsp_rate;
216c92544dSBjoern A. Zeeb 	u8 mcs;
226c92544dSBjoern A. Zeeb 
236c92544dSBjoern A. Zeeb 	u8 bw;
246c92544dSBjoern A. Zeeb 	u8 tx_pwr;
256c92544dSBjoern A. Zeeb 	u8 reason;
266c92544dSBjoern A. Zeeb 	u8 rsv0[1];
276c92544dSBjoern A. Zeeb 
286c92544dSBjoern A. Zeeb 	__le32 delay;
296c92544dSBjoern A. Zeeb 	__le32 timestamp;
306c92544dSBjoern A. Zeeb 	__le32 applied_flag;
316c92544dSBjoern A. Zeeb 	u8 txs[28];
326c92544dSBjoern A. Zeeb 
336c92544dSBjoern A. Zeeb 	u8 rsv1[32];
346c92544dSBjoern A. Zeeb } __packed;
356c92544dSBjoern A. Zeeb 
366c92544dSBjoern A. Zeeb /* ext event table */
376c92544dSBjoern A. Zeeb enum {
386c92544dSBjoern A. Zeeb 	MCU_EXT_EVENT_RATE_REPORT = 0x87,
396c92544dSBjoern A. Zeeb };
406c92544dSBjoern A. Zeeb 
416c92544dSBjoern A. Zeeb struct mt7921_mcu_eeprom_info {
426c92544dSBjoern A. Zeeb 	__le32 addr;
436c92544dSBjoern A. Zeeb 	__le32 valid;
446c92544dSBjoern A. Zeeb 	u8 data[MT7921_EEPROM_BLOCK_SIZE];
456c92544dSBjoern A. Zeeb } __packed;
466c92544dSBjoern A. Zeeb 
476c92544dSBjoern A. Zeeb #define MT_RA_RATE_NSS			GENMASK(8, 6)
486c92544dSBjoern A. Zeeb #define MT_RA_RATE_MCS			GENMASK(3, 0)
496c92544dSBjoern A. Zeeb #define MT_RA_RATE_TX_MODE		GENMASK(12, 9)
506c92544dSBjoern A. Zeeb #define MT_RA_RATE_DCM_EN		BIT(4)
516c92544dSBjoern A. Zeeb #define MT_RA_RATE_BW			GENMASK(14, 13)
526c92544dSBjoern A. Zeeb 
536c92544dSBjoern A. Zeeb enum {
546c92544dSBjoern A. Zeeb 	MT_EBF = BIT(0),	/* explicit beamforming */
556c92544dSBjoern A. Zeeb 	MT_IBF = BIT(1)		/* implicit beamforming */
566c92544dSBjoern A. Zeeb };
576c92544dSBjoern A. Zeeb 
586c92544dSBjoern A. Zeeb struct mt7921_mcu_ant_id_config {
596c92544dSBjoern A. Zeeb 	u8 ant_id[4];
606c92544dSBjoern A. Zeeb } __packed;
616c92544dSBjoern A. Zeeb 
626c92544dSBjoern A. Zeeb struct mt7921_txpwr_req {
636c92544dSBjoern A. Zeeb 	u8 ver;
646c92544dSBjoern A. Zeeb 	u8 action;
656c92544dSBjoern A. Zeeb 	__le16 len;
666c92544dSBjoern A. Zeeb 	u8 dbdc_idx;
676c92544dSBjoern A. Zeeb 	u8 rsv[3];
686c92544dSBjoern A. Zeeb } __packed;
696c92544dSBjoern A. Zeeb 
706c92544dSBjoern A. Zeeb struct mt7921_txpwr_event {
716c92544dSBjoern A. Zeeb 	u8 ver;
726c92544dSBjoern A. Zeeb 	u8 action;
736c92544dSBjoern A. Zeeb 	__le16 len;
746c92544dSBjoern A. Zeeb 	struct mt7921_txpwr txpwr;
756c92544dSBjoern A. Zeeb } __packed;
766c92544dSBjoern A. Zeeb 
77*8ba4d145SBjoern A. Zeeb struct mt7921_wf_rf_pin_ctrl_event {
78*8ba4d145SBjoern A. Zeeb 	u8 result;
79*8ba4d145SBjoern A. Zeeb 	u8 value;
80*8ba4d145SBjoern A. Zeeb } __packed;
81*8ba4d145SBjoern A. Zeeb 
826c92544dSBjoern A. Zeeb enum {
836c92544dSBjoern A. Zeeb 	TM_SWITCH_MODE,
846c92544dSBjoern A. Zeeb 	TM_SET_AT_CMD,
856c92544dSBjoern A. Zeeb 	TM_QUERY_AT_CMD,
866c92544dSBjoern A. Zeeb };
876c92544dSBjoern A. Zeeb 
886c92544dSBjoern A. Zeeb enum {
896c92544dSBjoern A. Zeeb 	MT7921_TM_NORMAL,
906c92544dSBjoern A. Zeeb 	MT7921_TM_TESTMODE,
916c92544dSBjoern A. Zeeb 	MT7921_TM_ICAP,
926c92544dSBjoern A. Zeeb 	MT7921_TM_ICAP_OVERLAP,
936c92544dSBjoern A. Zeeb 	MT7921_TM_WIFISPECTRUM,
946c92544dSBjoern A. Zeeb };
956c92544dSBjoern A. Zeeb 
966c92544dSBjoern A. Zeeb struct mt7921_rftest_cmd {
976c92544dSBjoern A. Zeeb 	u8 action;
986c92544dSBjoern A. Zeeb 	u8 rsv[3];
996c92544dSBjoern A. Zeeb 	__le32 param0;
1006c92544dSBjoern A. Zeeb 	__le32 param1;
1016c92544dSBjoern A. Zeeb } __packed;
1026c92544dSBjoern A. Zeeb 
1036c92544dSBjoern A. Zeeb struct mt7921_rftest_evt {
1046c92544dSBjoern A. Zeeb 	__le32 param0;
1056c92544dSBjoern A. Zeeb 	__le32 param1;
1066c92544dSBjoern A. Zeeb } __packed;
107*8ba4d145SBjoern A. Zeeb 
108*8ba4d145SBjoern A. Zeeb struct mt7921_clc_info_tlv {
109*8ba4d145SBjoern A. Zeeb 	__le16 tag;
110*8ba4d145SBjoern A. Zeeb 	__le16 len;
111*8ba4d145SBjoern A. Zeeb 
112*8ba4d145SBjoern A. Zeeb 	u8 chan_conf; /* BIT(0) : Enable UNII-4
113*8ba4d145SBjoern A. Zeeb 		       * BIT(1) : Enable UNII-5
114*8ba4d145SBjoern A. Zeeb 		       * BIT(2) : Enable UNII-6
115*8ba4d145SBjoern A. Zeeb 		       * BIT(3) : Enable UNII-7
116*8ba4d145SBjoern A. Zeeb 		       * BIT(4) : Enable UNII-8
117*8ba4d145SBjoern A. Zeeb 		       */
118*8ba4d145SBjoern A. Zeeb 	u8 rsv[63];
119*8ba4d145SBjoern A. Zeeb } __packed;
1206c92544dSBjoern A. Zeeb #endif
121