1*6c92544dSBjoern A. Zeeb /* SPDX-License-Identifier: ISC */ 2*6c92544dSBjoern A. Zeeb /* Copyright (C) 2019 MediaTek Inc. */ 3*6c92544dSBjoern A. Zeeb 4*6c92544dSBjoern A. Zeeb #ifndef __MT7615_MCU_H 5*6c92544dSBjoern A. Zeeb #define __MT7615_MCU_H 6*6c92544dSBjoern A. Zeeb 7*6c92544dSBjoern A. Zeeb #include "../mt76_connac_mcu.h" 8*6c92544dSBjoern A. Zeeb 9*6c92544dSBjoern A. Zeeb struct mt7615_mcu_txd { 10*6c92544dSBjoern A. Zeeb __le32 txd[8]; 11*6c92544dSBjoern A. Zeeb 12*6c92544dSBjoern A. Zeeb __le16 len; 13*6c92544dSBjoern A. Zeeb __le16 pq_id; 14*6c92544dSBjoern A. Zeeb 15*6c92544dSBjoern A. Zeeb u8 cid; 16*6c92544dSBjoern A. Zeeb u8 pkt_type; 17*6c92544dSBjoern A. Zeeb u8 set_query; /* FW don't care */ 18*6c92544dSBjoern A. Zeeb u8 seq; 19*6c92544dSBjoern A. Zeeb 20*6c92544dSBjoern A. Zeeb u8 uc_d2b0_rev; 21*6c92544dSBjoern A. Zeeb u8 ext_cid; 22*6c92544dSBjoern A. Zeeb u8 s2d_index; 23*6c92544dSBjoern A. Zeeb u8 ext_cid_ack; 24*6c92544dSBjoern A. Zeeb 25*6c92544dSBjoern A. Zeeb u32 reserved[5]; 26*6c92544dSBjoern A. Zeeb } __packed __aligned(4); 27*6c92544dSBjoern A. Zeeb 28*6c92544dSBjoern A. Zeeb /** 29*6c92544dSBjoern A. Zeeb * struct mt7615_uni_txd - mcu command descriptor for firmware v3 30*6c92544dSBjoern A. Zeeb * @txd: hardware descriptor 31*6c92544dSBjoern A. Zeeb * @len: total length not including txd 32*6c92544dSBjoern A. Zeeb * @cid: command identifier 33*6c92544dSBjoern A. Zeeb * @pkt_type: must be 0xa0 (cmd packet by long format) 34*6c92544dSBjoern A. Zeeb * @frag_n: fragment number 35*6c92544dSBjoern A. Zeeb * @seq: sequence number 36*6c92544dSBjoern A. Zeeb * @checksum: 0 mean there is no checksum 37*6c92544dSBjoern A. Zeeb * @s2d_index: index for command source and destination 38*6c92544dSBjoern A. Zeeb * Definition | value | note 39*6c92544dSBjoern A. Zeeb * CMD_S2D_IDX_H2N | 0x00 | command from HOST to WM 40*6c92544dSBjoern A. Zeeb * CMD_S2D_IDX_C2N | 0x01 | command from WA to WM 41*6c92544dSBjoern A. Zeeb * CMD_S2D_IDX_H2C | 0x02 | command from HOST to WA 42*6c92544dSBjoern A. Zeeb * CMD_S2D_IDX_H2N_AND_H2C | 0x03 | command from HOST to WA and WM 43*6c92544dSBjoern A. Zeeb * 44*6c92544dSBjoern A. Zeeb * @option: command option 45*6c92544dSBjoern A. Zeeb * BIT[0]: UNI_CMD_OPT_BIT_ACK 46*6c92544dSBjoern A. Zeeb * set to 1 to request a fw reply 47*6c92544dSBjoern A. Zeeb * if UNI_CMD_OPT_BIT_0_ACK is set and UNI_CMD_OPT_BIT_2_SET_QUERY 48*6c92544dSBjoern A. Zeeb * is set, mcu firmware will send response event EID = 0x01 49*6c92544dSBjoern A. Zeeb * (UNI_EVENT_ID_CMD_RESULT) to the host. 50*6c92544dSBjoern A. Zeeb * BIT[1]: UNI_CMD_OPT_BIT_UNI_CMD 51*6c92544dSBjoern A. Zeeb * 0: original command 52*6c92544dSBjoern A. Zeeb * 1: unified command 53*6c92544dSBjoern A. Zeeb * BIT[2]: UNI_CMD_OPT_BIT_SET_QUERY 54*6c92544dSBjoern A. Zeeb * 0: QUERY command 55*6c92544dSBjoern A. Zeeb * 1: SET command 56*6c92544dSBjoern A. Zeeb */ 57*6c92544dSBjoern A. Zeeb struct mt7615_uni_txd { 58*6c92544dSBjoern A. Zeeb __le32 txd[8]; 59*6c92544dSBjoern A. Zeeb 60*6c92544dSBjoern A. Zeeb /* DW1 */ 61*6c92544dSBjoern A. Zeeb __le16 len; 62*6c92544dSBjoern A. Zeeb __le16 cid; 63*6c92544dSBjoern A. Zeeb 64*6c92544dSBjoern A. Zeeb /* DW2 */ 65*6c92544dSBjoern A. Zeeb u8 reserved; 66*6c92544dSBjoern A. Zeeb u8 pkt_type; 67*6c92544dSBjoern A. Zeeb u8 frag_n; 68*6c92544dSBjoern A. Zeeb u8 seq; 69*6c92544dSBjoern A. Zeeb 70*6c92544dSBjoern A. Zeeb /* DW3 */ 71*6c92544dSBjoern A. Zeeb __le16 checksum; 72*6c92544dSBjoern A. Zeeb u8 s2d_index; 73*6c92544dSBjoern A. Zeeb u8 option; 74*6c92544dSBjoern A. Zeeb 75*6c92544dSBjoern A. Zeeb /* DW4 */ 76*6c92544dSBjoern A. Zeeb u8 reserved2[4]; 77*6c92544dSBjoern A. Zeeb } __packed __aligned(4); 78*6c92544dSBjoern A. Zeeb 79*6c92544dSBjoern A. Zeeb enum { 80*6c92544dSBjoern A. Zeeb MT_SKU_CCK_1_2 = 0, 81*6c92544dSBjoern A. Zeeb MT_SKU_CCK_55_11, 82*6c92544dSBjoern A. Zeeb MT_SKU_OFDM_6_9, 83*6c92544dSBjoern A. Zeeb MT_SKU_OFDM_12_18, 84*6c92544dSBjoern A. Zeeb MT_SKU_OFDM_24_36, 85*6c92544dSBjoern A. Zeeb MT_SKU_OFDM_48, 86*6c92544dSBjoern A. Zeeb MT_SKU_OFDM_54, 87*6c92544dSBjoern A. Zeeb MT_SKU_HT20_0_8, 88*6c92544dSBjoern A. Zeeb MT_SKU_HT20_32, 89*6c92544dSBjoern A. Zeeb MT_SKU_HT20_1_2_9_10, 90*6c92544dSBjoern A. Zeeb MT_SKU_HT20_3_4_11_12, 91*6c92544dSBjoern A. Zeeb MT_SKU_HT20_5_13, 92*6c92544dSBjoern A. Zeeb MT_SKU_HT20_6_14, 93*6c92544dSBjoern A. Zeeb MT_SKU_HT20_7_15, 94*6c92544dSBjoern A. Zeeb MT_SKU_HT40_0_8, 95*6c92544dSBjoern A. Zeeb MT_SKU_HT40_32, 96*6c92544dSBjoern A. Zeeb MT_SKU_HT40_1_2_9_10, 97*6c92544dSBjoern A. Zeeb MT_SKU_HT40_3_4_11_12, 98*6c92544dSBjoern A. Zeeb MT_SKU_HT40_5_13, 99*6c92544dSBjoern A. Zeeb MT_SKU_HT40_6_14, 100*6c92544dSBjoern A. Zeeb MT_SKU_HT40_7_15, 101*6c92544dSBjoern A. Zeeb MT_SKU_VHT20_0, 102*6c92544dSBjoern A. Zeeb MT_SKU_VHT20_1_2, 103*6c92544dSBjoern A. Zeeb MT_SKU_VHT20_3_4, 104*6c92544dSBjoern A. Zeeb MT_SKU_VHT20_5_6, 105*6c92544dSBjoern A. Zeeb MT_SKU_VHT20_7, 106*6c92544dSBjoern A. Zeeb MT_SKU_VHT20_8, 107*6c92544dSBjoern A. Zeeb MT_SKU_VHT20_9, 108*6c92544dSBjoern A. Zeeb MT_SKU_VHT40_0, 109*6c92544dSBjoern A. Zeeb MT_SKU_VHT40_1_2, 110*6c92544dSBjoern A. Zeeb MT_SKU_VHT40_3_4, 111*6c92544dSBjoern A. Zeeb MT_SKU_VHT40_5_6, 112*6c92544dSBjoern A. Zeeb MT_SKU_VHT40_7, 113*6c92544dSBjoern A. Zeeb MT_SKU_VHT40_8, 114*6c92544dSBjoern A. Zeeb MT_SKU_VHT40_9, 115*6c92544dSBjoern A. Zeeb MT_SKU_VHT80_0, 116*6c92544dSBjoern A. Zeeb MT_SKU_VHT80_1_2, 117*6c92544dSBjoern A. Zeeb MT_SKU_VHT80_3_4, 118*6c92544dSBjoern A. Zeeb MT_SKU_VHT80_5_6, 119*6c92544dSBjoern A. Zeeb MT_SKU_VHT80_7, 120*6c92544dSBjoern A. Zeeb MT_SKU_VHT80_8, 121*6c92544dSBjoern A. Zeeb MT_SKU_VHT80_9, 122*6c92544dSBjoern A. Zeeb MT_SKU_VHT160_0, 123*6c92544dSBjoern A. Zeeb MT_SKU_VHT160_1_2, 124*6c92544dSBjoern A. Zeeb MT_SKU_VHT160_3_4, 125*6c92544dSBjoern A. Zeeb MT_SKU_VHT160_5_6, 126*6c92544dSBjoern A. Zeeb MT_SKU_VHT160_7, 127*6c92544dSBjoern A. Zeeb MT_SKU_VHT160_8, 128*6c92544dSBjoern A. Zeeb MT_SKU_VHT160_9, 129*6c92544dSBjoern A. Zeeb MT_SKU_1SS_DELTA, 130*6c92544dSBjoern A. Zeeb MT_SKU_2SS_DELTA, 131*6c92544dSBjoern A. Zeeb MT_SKU_3SS_DELTA, 132*6c92544dSBjoern A. Zeeb MT_SKU_4SS_DELTA, 133*6c92544dSBjoern A. Zeeb }; 134*6c92544dSBjoern A. Zeeb 135*6c92544dSBjoern A. Zeeb struct mt7615_mcu_rxd { 136*6c92544dSBjoern A. Zeeb __le32 rxd[4]; 137*6c92544dSBjoern A. Zeeb 138*6c92544dSBjoern A. Zeeb __le16 len; 139*6c92544dSBjoern A. Zeeb __le16 pkt_type_id; 140*6c92544dSBjoern A. Zeeb 141*6c92544dSBjoern A. Zeeb u8 eid; 142*6c92544dSBjoern A. Zeeb u8 seq; 143*6c92544dSBjoern A. Zeeb __le16 __rsv; 144*6c92544dSBjoern A. Zeeb 145*6c92544dSBjoern A. Zeeb u8 ext_eid; 146*6c92544dSBjoern A. Zeeb u8 __rsv1[2]; 147*6c92544dSBjoern A. Zeeb u8 s2d_index; 148*6c92544dSBjoern A. Zeeb }; 149*6c92544dSBjoern A. Zeeb 150*6c92544dSBjoern A. Zeeb struct mt7615_mcu_csa_notify { 151*6c92544dSBjoern A. Zeeb struct mt7615_mcu_rxd rxd; 152*6c92544dSBjoern A. Zeeb 153*6c92544dSBjoern A. Zeeb u8 omac_idx; 154*6c92544dSBjoern A. Zeeb u8 csa_count; 155*6c92544dSBjoern A. Zeeb u8 rsv[2]; 156*6c92544dSBjoern A. Zeeb } __packed; 157*6c92544dSBjoern A. Zeeb 158*6c92544dSBjoern A. Zeeb struct mt7615_mcu_rdd_report { 159*6c92544dSBjoern A. Zeeb struct mt7615_mcu_rxd rxd; 160*6c92544dSBjoern A. Zeeb 161*6c92544dSBjoern A. Zeeb u8 band_idx; 162*6c92544dSBjoern A. Zeeb u8 long_detected; 163*6c92544dSBjoern A. Zeeb u8 constant_prf_detected; 164*6c92544dSBjoern A. Zeeb u8 staggered_prf_detected; 165*6c92544dSBjoern A. Zeeb u8 radar_type_idx; 166*6c92544dSBjoern A. Zeeb u8 periodic_pulse_num; 167*6c92544dSBjoern A. Zeeb u8 long_pulse_num; 168*6c92544dSBjoern A. Zeeb u8 hw_pulse_num; 169*6c92544dSBjoern A. Zeeb 170*6c92544dSBjoern A. Zeeb u8 out_lpn; 171*6c92544dSBjoern A. Zeeb u8 out_spn; 172*6c92544dSBjoern A. Zeeb u8 out_crpn; 173*6c92544dSBjoern A. Zeeb u8 out_crpw; 174*6c92544dSBjoern A. Zeeb u8 out_crbn; 175*6c92544dSBjoern A. Zeeb u8 out_stgpn; 176*6c92544dSBjoern A. Zeeb u8 out_stgpw; 177*6c92544dSBjoern A. Zeeb 178*6c92544dSBjoern A. Zeeb u8 _rsv[2]; 179*6c92544dSBjoern A. Zeeb 180*6c92544dSBjoern A. Zeeb __le32 out_pri_const; 181*6c92544dSBjoern A. Zeeb __le32 out_pri_stg[3]; 182*6c92544dSBjoern A. Zeeb 183*6c92544dSBjoern A. Zeeb struct { 184*6c92544dSBjoern A. Zeeb __le32 start; 185*6c92544dSBjoern A. Zeeb __le16 pulse_width; 186*6c92544dSBjoern A. Zeeb __le16 pulse_power; 187*6c92544dSBjoern A. Zeeb } long_pulse[32]; 188*6c92544dSBjoern A. Zeeb 189*6c92544dSBjoern A. Zeeb struct { 190*6c92544dSBjoern A. Zeeb __le32 start; 191*6c92544dSBjoern A. Zeeb __le16 pulse_width; 192*6c92544dSBjoern A. Zeeb __le16 pulse_power; 193*6c92544dSBjoern A. Zeeb } periodic_pulse[32]; 194*6c92544dSBjoern A. Zeeb 195*6c92544dSBjoern A. Zeeb struct { 196*6c92544dSBjoern A. Zeeb __le32 start; 197*6c92544dSBjoern A. Zeeb __le16 pulse_width; 198*6c92544dSBjoern A. Zeeb __le16 pulse_power; 199*6c92544dSBjoern A. Zeeb u8 sc_pass; 200*6c92544dSBjoern A. Zeeb u8 sw_reset; 201*6c92544dSBjoern A. Zeeb } hw_pulse[32]; 202*6c92544dSBjoern A. Zeeb }; 203*6c92544dSBjoern A. Zeeb 204*6c92544dSBjoern A. Zeeb enum { 205*6c92544dSBjoern A. Zeeb MCU_ATE_SET_FREQ_OFFSET = 0xa, 206*6c92544dSBjoern A. Zeeb MCU_ATE_SET_TX_POWER_CONTROL = 0x15, 207*6c92544dSBjoern A. Zeeb }; 208*6c92544dSBjoern A. Zeeb 209*6c92544dSBjoern A. Zeeb struct mt7615_roc_tlv { 210*6c92544dSBjoern A. Zeeb u8 bss_idx; 211*6c92544dSBjoern A. Zeeb u8 token; 212*6c92544dSBjoern A. Zeeb u8 active; 213*6c92544dSBjoern A. Zeeb u8 primary_chan; 214*6c92544dSBjoern A. Zeeb u8 sco; 215*6c92544dSBjoern A. Zeeb u8 band; 216*6c92544dSBjoern A. Zeeb u8 width; /* To support 80/160MHz bandwidth */ 217*6c92544dSBjoern A. Zeeb u8 freq_seg1; /* To support 80/160MHz bandwidth */ 218*6c92544dSBjoern A. Zeeb u8 freq_seg2; /* To support 80/160MHz bandwidth */ 219*6c92544dSBjoern A. Zeeb u8 req_type; 220*6c92544dSBjoern A. Zeeb u8 dbdc_band; 221*6c92544dSBjoern A. Zeeb u8 rsv0; 222*6c92544dSBjoern A. Zeeb __le32 max_interval; /* ms */ 223*6c92544dSBjoern A. Zeeb u8 rsv1[8]; 224*6c92544dSBjoern A. Zeeb } __packed; 225*6c92544dSBjoern A. Zeeb 226*6c92544dSBjoern A. Zeeb enum { 227*6c92544dSBjoern A. Zeeb FW_STATE_PWR_ON = 1, 228*6c92544dSBjoern A. Zeeb FW_STATE_N9_RDY = 2, 229*6c92544dSBjoern A. Zeeb }; 230*6c92544dSBjoern A. Zeeb 231*6c92544dSBjoern A. Zeeb enum { 232*6c92544dSBjoern A. Zeeb DBDC_TYPE_WMM, 233*6c92544dSBjoern A. Zeeb DBDC_TYPE_MGMT, 234*6c92544dSBjoern A. Zeeb DBDC_TYPE_BSS, 235*6c92544dSBjoern A. Zeeb DBDC_TYPE_MBSS, 236*6c92544dSBjoern A. Zeeb DBDC_TYPE_REPEATER, 237*6c92544dSBjoern A. Zeeb DBDC_TYPE_MU, 238*6c92544dSBjoern A. Zeeb DBDC_TYPE_BF, 239*6c92544dSBjoern A. Zeeb DBDC_TYPE_PTA, 240*6c92544dSBjoern A. Zeeb __DBDC_TYPE_MAX, 241*6c92544dSBjoern A. Zeeb }; 242*6c92544dSBjoern A. Zeeb 243*6c92544dSBjoern A. Zeeb #endif 244