| /* SPDX-License-Identifier: ISC */ |
| /* Copyright (C) 2020 MediaTek Inc. */ |
| |
| #ifndef __MT7921_MCU_H |
| #define __MT7921_MCU_H |
| |
| #include "../mt76_connac_mcu.h" |
| |
| struct mt7921_mcu_txd { |
| __le32 txd[8]; |
| |
| __le16 len; |
| __le16 pq_id; |
| |
| u8 cid; |
| u8 pkt_type; |
| u8 set_query; /* FW don't care */ |
| u8 seq; |
| |
| u8 uc_d2b0_rev; |
| u8 ext_cid; |
| u8 s2d_index; |
| u8 ext_cid_ack; |
| |
| u32 reserved[5]; |
| } __packed __aligned(4); |
| |
| /** |
| * struct mt7921_uni_txd - mcu command descriptor for firmware v3 |
| * @txd: hardware descriptor |
| * @len: total length not including txd |
| * @cid: command identifier |
| * @pkt_type: must be 0xa0 (cmd packet by long format) |
| * @frag_n: fragment number |
| * @seq: sequence number |
| * @checksum: 0 mean there is no checksum |
| * @s2d_index: index for command source and destination |
| * Definition | value | note |
| * CMD_S2D_IDX_H2N | 0x00 | command from HOST to WM |
| * CMD_S2D_IDX_C2N | 0x01 | command from WA to WM |
| * CMD_S2D_IDX_H2C | 0x02 | command from HOST to WA |
| * CMD_S2D_IDX_H2N_AND_H2C | 0x03 | command from HOST to WA and WM |
| * |
| * @option: command option |
| * BIT[0]: UNI_CMD_OPT_BIT_ACK |
| * set to 1 to request a fw reply |
| * if UNI_CMD_OPT_BIT_0_ACK is set and UNI_CMD_OPT_BIT_2_SET_QUERY |
| * is set, mcu firmware will send response event EID = 0x01 |
| * (UNI_EVENT_ID_CMD_RESULT) to the host. |
| * BIT[1]: UNI_CMD_OPT_BIT_UNI_CMD |
| * 0: original command |
| * 1: unified command |
| * BIT[2]: UNI_CMD_OPT_BIT_SET_QUERY |
| * 0: QUERY command |
| * 1: SET command |
| */ |
| struct mt7921_uni_txd { |
| __le32 txd[8]; |
| |
| /* DW1 */ |
| __le16 len; |
| __le16 cid; |
| |
| /* DW2 */ |
| u8 reserved; |
| u8 pkt_type; |
| u8 frag_n; |
| u8 seq; |
| |
| /* DW3 */ |
| __le16 checksum; |
| u8 s2d_index; |
| u8 option; |
| |
| /* DW4 */ |
| u8 reserved2[4]; |
| } __packed __aligned(4); |
| |
| struct mt7921_mcu_tx_done_event { |
| u8 pid; |
| u8 status; |
| __le16 seq; |
| |
| u8 wlan_idx; |
| u8 tx_cnt; |
| __le16 tx_rate; |
| |
| u8 flag; |
| u8 tid; |
| u8 rsp_rate; |
| u8 mcs; |
| |
| u8 bw; |
| u8 tx_pwr; |
| u8 reason; |
| u8 rsv0[1]; |
| |
| __le32 delay; |
| __le32 timestamp; |
| __le32 applied_flag; |
| u8 txs[28]; |
| |
| u8 rsv1[32]; |
| } __packed; |
| |
| /* ext event table */ |
| enum { |
| MCU_EXT_EVENT_RATE_REPORT = 0x87, |
| }; |
| |
| struct mt7921_mcu_rxd { |
| __le32 rxd[6]; |
| |
| __le16 len; |
| __le16 pkt_type_id; |
| |
| u8 eid; |
| u8 seq; |
| __le16 __rsv; |
| |
| u8 ext_eid; |
| u8 __rsv1[2]; |
| u8 s2d_index; |
| }; |
| |
| struct mt7921_mcu_eeprom_info { |
| __le32 addr; |
| __le32 valid; |
| u8 data[16]; |
| } __packed; |
| |
| #define MT_RA_RATE_NSS GENMASK(8, 6) |
| #define MT_RA_RATE_MCS GENMASK(3, 0) |
| #define MT_RA_RATE_TX_MODE GENMASK(12, 9) |
| #define MT_RA_RATE_DCM_EN BIT(4) |
| #define MT_RA_RATE_BW GENMASK(14, 13) |
| |
| #define MCU_PQ_ID(p, q) (((p) << 15) | ((q) << 10)) |
| #define MCU_PKT_ID 0xa0 |
| |
| struct mt7921_mcu_uni_event { |
| u8 cid; |
| u8 pad[3]; |
| __le32 status; /* 0: success, others: fail */ |
| } __packed; |
| |
| enum { |
| MT_EBF = BIT(0), /* explicit beamforming */ |
| MT_IBF = BIT(1) /* implicit beamforming */ |
| }; |
| |
| struct mt7921_mcu_reg_event { |
| __le32 reg; |
| __le32 val; |
| } __packed; |
| |
| struct mt7921_mcu_ant_id_config { |
| u8 ant_id[4]; |
| } __packed; |
| |
| struct mt7921_txpwr_req { |
| u8 ver; |
| u8 action; |
| __le16 len; |
| u8 dbdc_idx; |
| u8 rsv[3]; |
| } __packed; |
| |
| struct mt7921_txpwr_event { |
| u8 ver; |
| u8 action; |
| __le16 len; |
| struct mt7921_txpwr txpwr; |
| } __packed; |
| |
| enum { |
| TM_SWITCH_MODE, |
| TM_SET_AT_CMD, |
| TM_QUERY_AT_CMD, |
| }; |
| |
| enum { |
| MT7921_TM_NORMAL, |
| MT7921_TM_TESTMODE, |
| MT7921_TM_ICAP, |
| MT7921_TM_ICAP_OVERLAP, |
| MT7921_TM_WIFISPECTRUM, |
| }; |
| |
| struct mt7921_rftest_cmd { |
| u8 action; |
| u8 rsv[3]; |
| __le32 param0; |
| __le32 param1; |
| } __packed; |
| |
| struct mt7921_rftest_evt { |
| __le32 param0; |
| __le32 param1; |
| } __packed; |
| #endif |