| /* SPDX-License-Identifier: ISC */ |
| /* Copyright (C) 2019 MediaTek Inc. */ |
| |
| #ifndef __MT7615_MCU_H |
| #define __MT7615_MCU_H |
| |
| #include "../mt76_connac_mcu.h" |
| |
| struct mt7615_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 mt7615_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 mt7615_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); |
| |
| /* event table */ |
| enum { |
| MCU_EVENT_TARGET_ADDRESS_LEN = 0x01, |
| MCU_EVENT_FW_START = 0x01, |
| MCU_EVENT_GENERIC = 0x01, |
| MCU_EVENT_ACCESS_REG = 0x02, |
| MCU_EVENT_MT_PATCH_SEM = 0x04, |
| MCU_EVENT_REG_ACCESS = 0x05, |
| MCU_EVENT_SCAN_DONE = 0x0d, |
| MCU_EVENT_ROC = 0x10, |
| MCU_EVENT_BSS_ABSENCE = 0x11, |
| MCU_EVENT_BSS_BEACON_LOSS = 0x13, |
| MCU_EVENT_CH_PRIVILEGE = 0x18, |
| MCU_EVENT_SCHED_SCAN_DONE = 0x23, |
| MCU_EVENT_EXT = 0xed, |
| MCU_EVENT_RESTART_DL = 0xef, |
| MCU_EVENT_COREDUMP = 0xf0, |
| }; |
| |
| /* ext event table */ |
| enum { |
| MCU_EXT_EVENT_PS_SYNC = 0x5, |
| MCU_EXT_EVENT_FW_LOG_2_HOST = 0x13, |
| MCU_EXT_EVENT_THERMAL_PROTECT = 0x22, |
| MCU_EXT_EVENT_ASSERT_DUMP = 0x23, |
| MCU_EXT_EVENT_RDD_REPORT = 0x3a, |
| MCU_EXT_EVENT_CSA_NOTIFY = 0x4f, |
| }; |
| |
| enum { |
| MT_SKU_CCK_1_2 = 0, |
| MT_SKU_CCK_55_11, |
| MT_SKU_OFDM_6_9, |
| MT_SKU_OFDM_12_18, |
| MT_SKU_OFDM_24_36, |
| MT_SKU_OFDM_48, |
| MT_SKU_OFDM_54, |
| MT_SKU_HT20_0_8, |
| MT_SKU_HT20_32, |
| MT_SKU_HT20_1_2_9_10, |
| MT_SKU_HT20_3_4_11_12, |
| MT_SKU_HT20_5_13, |
| MT_SKU_HT20_6_14, |
| MT_SKU_HT20_7_15, |
| MT_SKU_HT40_0_8, |
| MT_SKU_HT40_32, |
| MT_SKU_HT40_1_2_9_10, |
| MT_SKU_HT40_3_4_11_12, |
| MT_SKU_HT40_5_13, |
| MT_SKU_HT40_6_14, |
| MT_SKU_HT40_7_15, |
| MT_SKU_VHT20_0, |
| MT_SKU_VHT20_1_2, |
| MT_SKU_VHT20_3_4, |
| MT_SKU_VHT20_5_6, |
| MT_SKU_VHT20_7, |
| MT_SKU_VHT20_8, |
| MT_SKU_VHT20_9, |
| MT_SKU_VHT40_0, |
| MT_SKU_VHT40_1_2, |
| MT_SKU_VHT40_3_4, |
| MT_SKU_VHT40_5_6, |
| MT_SKU_VHT40_7, |
| MT_SKU_VHT40_8, |
| MT_SKU_VHT40_9, |
| MT_SKU_VHT80_0, |
| MT_SKU_VHT80_1_2, |
| MT_SKU_VHT80_3_4, |
| MT_SKU_VHT80_5_6, |
| MT_SKU_VHT80_7, |
| MT_SKU_VHT80_8, |
| MT_SKU_VHT80_9, |
| MT_SKU_VHT160_0, |
| MT_SKU_VHT160_1_2, |
| MT_SKU_VHT160_3_4, |
| MT_SKU_VHT160_5_6, |
| MT_SKU_VHT160_7, |
| MT_SKU_VHT160_8, |
| MT_SKU_VHT160_9, |
| MT_SKU_1SS_DELTA, |
| MT_SKU_2SS_DELTA, |
| MT_SKU_3SS_DELTA, |
| MT_SKU_4SS_DELTA, |
| }; |
| |
| struct mt7615_mcu_rxd { |
| __le32 rxd[4]; |
| |
| __le16 len; |
| __le16 pkt_type_id; |
| |
| u8 eid; |
| u8 seq; |
| __le16 __rsv; |
| |
| u8 ext_eid; |
| u8 __rsv1[2]; |
| u8 s2d_index; |
| }; |
| |
| struct mt7615_mcu_csa_notify { |
| struct mt7615_mcu_rxd rxd; |
| |
| u8 omac_idx; |
| u8 csa_count; |
| u8 rsv[2]; |
| } __packed; |
| |
| struct mt7615_mcu_rdd_report { |
| struct mt7615_mcu_rxd rxd; |
| |
| u8 band_idx; |
| u8 long_detected; |
| u8 constant_prf_detected; |
| u8 staggered_prf_detected; |
| u8 radar_type_idx; |
| u8 periodic_pulse_num; |
| u8 long_pulse_num; |
| u8 hw_pulse_num; |
| |
| u8 out_lpn; |
| u8 out_spn; |
| u8 out_crpn; |
| u8 out_crpw; |
| u8 out_crbn; |
| u8 out_stgpn; |
| u8 out_stgpw; |
| |
| u8 _rsv[2]; |
| |
| __le32 out_pri_const; |
| __le32 out_pri_stg[3]; |
| |
| struct { |
| __le32 start; |
| __le16 pulse_width; |
| __le16 pulse_power; |
| } long_pulse[32]; |
| |
| struct { |
| __le32 start; |
| __le16 pulse_width; |
| __le16 pulse_power; |
| } periodic_pulse[32]; |
| |
| struct { |
| __le32 start; |
| __le16 pulse_width; |
| __le16 pulse_power; |
| u8 sc_pass; |
| u8 sw_reset; |
| } hw_pulse[32]; |
| }; |
| |
| #define MCU_PQ_ID(p, q) (((p) << 15) | ((q) << 10)) |
| #define MCU_PKT_ID 0xa0 |
| |
| enum { |
| MCU_Q_QUERY, |
| MCU_Q_SET, |
| MCU_Q_RESERVED, |
| MCU_Q_NA |
| }; |
| |
| enum { |
| MCU_S2D_H2N, |
| MCU_S2D_C2N, |
| MCU_S2D_H2C, |
| MCU_S2D_H2CN |
| }; |
| |
| enum { |
| MCU_ATE_SET_FREQ_OFFSET = 0xa, |
| MCU_ATE_SET_TX_POWER_CONTROL = 0x15, |
| }; |
| |
| struct mt7615_mcu_uni_event { |
| u8 cid; |
| u8 pad[3]; |
| __le32 status; /* 0: success, others: fail */ |
| } __packed; |
| |
| struct mt7615_mcu_reg_event { |
| __le32 reg; |
| __le32 val; |
| } __packed; |
| |
| struct mt7615_roc_tlv { |
| u8 bss_idx; |
| u8 token; |
| u8 active; |
| u8 primary_chan; |
| u8 sco; |
| u8 band; |
| u8 width; /* To support 80/160MHz bandwidth */ |
| u8 freq_seg1; /* To support 80/160MHz bandwidth */ |
| u8 freq_seg2; /* To support 80/160MHz bandwidth */ |
| u8 req_type; |
| u8 dbdc_band; |
| u8 rsv0; |
| __le32 max_interval; /* ms */ |
| u8 rsv1[8]; |
| } __packed; |
| |
| enum { |
| PATCH_NOT_DL_SEM_FAIL = 0x0, |
| PATCH_IS_DL = 0x1, |
| PATCH_NOT_DL_SEM_SUCCESS = 0x2, |
| PATCH_REL_SEM_SUCCESS = 0x3 |
| }; |
| |
| enum { |
| FW_STATE_INITIAL = 0, |
| FW_STATE_FW_DOWNLOAD = 1, |
| FW_STATE_NORMAL_OPERATION = 2, |
| FW_STATE_NORMAL_TRX = 3, |
| FW_STATE_CR4_RDY = 7 |
| }; |
| |
| enum { |
| FW_STATE_PWR_ON = 1, |
| FW_STATE_N9_RDY = 2, |
| }; |
| |
| enum { |
| DBDC_TYPE_WMM, |
| DBDC_TYPE_MGMT, |
| DBDC_TYPE_BSS, |
| DBDC_TYPE_MBSS, |
| DBDC_TYPE_REPEATER, |
| DBDC_TYPE_MU, |
| DBDC_TYPE_BF, |
| DBDC_TYPE_PTA, |
| __DBDC_TYPE_MAX, |
| }; |
| |
| struct bss_info_omac { |
| __le16 tag; |
| __le16 len; |
| u8 hw_bss_idx; |
| u8 omac_idx; |
| u8 band_idx; |
| u8 rsv0; |
| __le32 conn_type; |
| u32 rsv1; |
| } __packed; |
| |
| struct bss_info_basic { |
| __le16 tag; |
| __le16 len; |
| __le32 network_type; |
| u8 active; |
| u8 rsv0; |
| __le16 bcn_interval; |
| u8 bssid[ETH_ALEN]; |
| u8 wmm_idx; |
| u8 dtim_period; |
| u8 bmc_tx_wlan_idx; |
| u8 cipher; /* not used */ |
| u8 phymode; /* not used */ |
| u8 rsv1[5]; |
| } __packed; |
| |
| struct bss_info_rf_ch { |
| __le16 tag; |
| __le16 len; |
| u8 pri_ch; |
| u8 central_ch0; |
| u8 central_ch1; |
| u8 bw; |
| } __packed; |
| |
| struct bss_info_ext_bss { |
| __le16 tag; |
| __le16 len; |
| __le32 mbss_tsf_offset; /* in unit of us */ |
| u8 rsv[8]; |
| } __packed; |
| |
| enum { |
| BSS_INFO_OMAC, |
| BSS_INFO_BASIC, |
| BSS_INFO_RF_CH, /* optional, for BT/LTE coex */ |
| BSS_INFO_PM, /* sta only */ |
| BSS_INFO_UAPSD, /* sta only */ |
| BSS_INFO_ROAM_DETECTION, /* obsoleted */ |
| BSS_INFO_LQ_RM, /* obsoleted */ |
| BSS_INFO_EXT_BSS, |
| BSS_INFO_BMC_INFO, /* for bmc rate control in CR4 */ |
| BSS_INFO_SYNC_MODE, /* obsoleted */ |
| BSS_INFO_RA, |
| BSS_INFO_MAX_NUM |
| }; |
| |
| enum { |
| CH_SWITCH_NORMAL = 0, |
| CH_SWITCH_SCAN = 3, |
| CH_SWITCH_MCC = 4, |
| CH_SWITCH_DFS = 5, |
| CH_SWITCH_BACKGROUND_SCAN_START = 6, |
| CH_SWITCH_BACKGROUND_SCAN_RUNNING = 7, |
| CH_SWITCH_BACKGROUND_SCAN_STOP = 8, |
| CH_SWITCH_SCAN_BYPASS_DPD = 9 |
| }; |
| |
| #endif |