1 /* SPDX-License-Identifier: ISC */
2 /* Copyright (C) 2020 MediaTek Inc. */
7 struct mt7915_mcu_txd
{
15 u8 set_query
; /* FW don't care */
24 } __packed
__aligned(4);
28 MCU_EVENT_TARGET_ADDRESS_LEN
= 0x01,
29 MCU_EVENT_FW_START
= 0x01,
30 MCU_EVENT_GENERIC
= 0x01,
31 MCU_EVENT_ACCESS_REG
= 0x02,
32 MCU_EVENT_MT_PATCH_SEM
= 0x04,
33 MCU_EVENT_CH_PRIVILEGE
= 0x18,
35 MCU_EVENT_RESTART_DL
= 0xef,
40 MCU_EXT_EVENT_PS_SYNC
= 0x5,
41 MCU_EXT_EVENT_FW_LOG_2_HOST
= 0x13,
42 MCU_EXT_EVENT_THERMAL_PROTECT
= 0x22,
43 MCU_EXT_EVENT_ASSERT_DUMP
= 0x23,
44 MCU_EXT_EVENT_RDD_REPORT
= 0x3a,
45 MCU_EXT_EVENT_CSA_NOTIFY
= 0x4f,
46 MCU_EXT_EVENT_RATE_REPORT
= 0x87,
50 MCU_ATE_SET_TRX
= 0x1,
51 MCU_ATE_SET_FREQ_OFFSET
= 0xa,
52 MCU_ATE_SET_SLOT_TIME
= 0x13,
53 MCU_ATE_CLEAN_TXQUEUE
= 0x1c,
56 struct mt7915_mcu_rxd
{
71 struct mt7915_mcu_rdd_report
{
72 struct mt7915_mcu_rxd rxd
;
76 u8 constant_prf_detected
;
77 u8 staggered_prf_detected
;
79 u8 periodic_pulse_num
;
94 __le32 out_pri_stg
[3];
110 } periodic_pulse
[32];
123 struct mt7915_mcu_eeprom
{
129 struct mt7915_mcu_eeprom_info
{
135 struct mt7915_mcu_ra_info
{
136 struct mt7915_mcu_rxd rxd
;
145 __le32 min_rate
; /* for dynamic sounding */
146 __le32 max_rate
; /* for dynamic sounding */
147 __le32 init_rate_down_rate
;
150 __le16 init_rate_down_total
;
151 __le16 init_rate_down_succ
;
166 u8 prob_down_pending
;
170 struct mt7915_mcu_phy_rx_info
{
181 #define MT_RA_RATE_NSS GENMASK(8, 6)
182 #define MT_RA_RATE_MCS GENMASK(3, 0)
183 #define MT_RA_RATE_TX_MODE GENMASK(12, 9)
184 #define MT_RA_RATE_DCM_EN BIT(4)
185 #define MT_RA_RATE_BW GENMASK(14, 13)
196 struct mt7915_mcu_tx
{
202 struct edca edca
[IEEE80211_NUM_ACS
];
205 #define WMM_AIFS_SET BIT(0)
206 #define WMM_CW_MIN_SET BIT(1)
207 #define WMM_CW_MAX_SET BIT(2)
208 #define WMM_TXOP_SET BIT(3)
209 #define WMM_PARAM_SET GENMASK(3, 0)
211 #define MCU_PQ_ID(p, q) (((p) << 15) | ((q) << 10))
212 #define MCU_PKT_ID 0xa0
229 #define __MCU_CMD_FIELD_ID GENMASK(7, 0)
230 #define __MCU_CMD_FIELD_EXT_ID GENMASK(15, 8)
231 #define __MCU_CMD_FIELD_QUERY BIT(16)
232 #define __MCU_CMD_FIELD_WA BIT(17)
235 MCU_CMD_TARGET_ADDRESS_LEN_REQ
= 0x01,
236 MCU_CMD_FW_START_REQ
= 0x02,
237 MCU_CMD_INIT_ACCESS_REG
= 0x3,
238 MCU_CMD_NIC_POWER_CTRL
= 0x4,
239 MCU_CMD_PATCH_START_REQ
= 0x05,
240 MCU_CMD_PATCH_FINISH_REQ
= 0x07,
241 MCU_CMD_PATCH_SEM_CONTROL
= 0x10,
242 MCU_CMD_WA_PARAM
= 0xC4,
243 MCU_CMD_EXT_CID
= 0xED,
244 MCU_CMD_FW_SCATTER
= 0xEE,
245 MCU_CMD_RESTART_DL_REQ
= 0xEF,
249 MCU_EXT_CMD_EFUSE_ACCESS
= 0x01,
250 MCU_EXT_CMD_RF_TEST
= 0x04,
251 MCU_EXT_CMD_PM_STATE_CTRL
= 0x07,
252 MCU_EXT_CMD_CHANNEL_SWITCH
= 0x08,
253 MCU_EXT_CMD_FW_LOG_2_HOST
= 0x13,
254 MCU_EXT_CMD_TXBF_ACTION
= 0x1e,
255 MCU_EXT_CMD_EFUSE_BUFFER_MODE
= 0x21,
256 MCU_EXT_CMD_STA_REC_UPDATE
= 0x25,
257 MCU_EXT_CMD_BSS_INFO_UPDATE
= 0x26,
258 MCU_EXT_CMD_EDCA_UPDATE
= 0x27,
259 MCU_EXT_CMD_DEV_INFO_UPDATE
= 0x2A,
260 MCU_EXT_CMD_THERMAL_CTRL
= 0x2c,
261 MCU_EXT_CMD_WTBL_UPDATE
= 0x32,
262 MCU_EXT_CMD_SET_DRR_CTRL
= 0x36,
263 MCU_EXT_CMD_SET_RDD_CTRL
= 0x3a,
264 MCU_EXT_CMD_ATE_CTRL
= 0x3d,
265 MCU_EXT_CMD_PROTECT_CTRL
= 0x3e,
266 MCU_EXT_CMD_MAC_INIT_CTRL
= 0x46,
267 MCU_EXT_CMD_RX_HDR_TRANS
= 0x47,
268 MCU_EXT_CMD_MUAR_UPDATE
= 0x48,
269 MCU_EXT_CMD_SET_RX_PATH
= 0x4e,
270 MCU_EXT_CMD_TX_POWER_FEATURE_CTRL
= 0x58,
271 MCU_EXT_CMD_MWDS_SUPPORT
= 0x80,
272 MCU_EXT_CMD_SET_SER_TRIGGER
= 0x81,
273 MCU_EXT_CMD_SCS_CTRL
= 0x82,
274 MCU_EXT_CMD_RATE_CTRL
= 0x87,
275 MCU_EXT_CMD_FW_DBG_CTRL
= 0x95,
276 MCU_EXT_CMD_SET_RDD_TH
= 0x9d,
277 MCU_EXT_CMD_SET_SPR
= 0xa8,
278 MCU_EXT_CMD_PHY_STAT_INFO
= 0xad,
282 MCU_WA_PARAM_CMD_QUERY
,
283 MCU_WA_PARAM_CMD_SET
,
284 MCU_WA_PARAM_CMD_CAPABILITY
,
285 MCU_WA_PARAM_CMD_DEBUG
,
289 MCU_WA_PARAM_RED
= 0x0e,
292 #define MCU_CMD(_t) FIELD_PREP(__MCU_CMD_FIELD_ID, MCU_CMD_##_t)
293 #define MCU_EXT_CMD(_t) (MCU_CMD(EXT_CID) | \
294 FIELD_PREP(__MCU_CMD_FIELD_EXT_ID, \
296 #define MCU_EXT_QUERY(_t) (MCU_EXT_CMD(_t) | __MCU_CMD_FIELD_QUERY)
298 #define MCU_WA_CMD(_t) (MCU_CMD(_t) | __MCU_CMD_FIELD_WA)
299 #define MCU_WA_EXT_CMD(_t) (MCU_EXT_CMD(_t) | __MCU_CMD_FIELD_WA)
300 #define MCU_WA_PARAM_CMD(_t) (MCU_WA_CMD(WA_PARAM) | \
301 FIELD_PREP(__MCU_CMD_FIELD_EXT_ID, \
302 MCU_WA_PARAM_CMD_##_t))
310 PATCH_NOT_DL_SEM_FAIL
,
312 PATCH_NOT_DL_SEM_SUCCESS
,
313 PATCH_REL_SEM_SUCCESS
318 FW_STATE_FW_DOWNLOAD
,
319 FW_STATE_NORMAL_OPERATION
,
321 FW_STATE_WACPU_RDY
= 7
336 MCU_PHY_STATE_TX_RATE
,
337 MCU_PHY_STATE_RX_RATE
,
339 MCU_PHY_STATE_CONTENTION_RX_RATE
,
340 MCU_PHY_STATE_OFDMLQ_CNINFO
,
343 #define STA_TYPE_STA BIT(0)
344 #define STA_TYPE_AP BIT(1)
345 #define STA_TYPE_ADHOC BIT(2)
346 #define STA_TYPE_WDS BIT(4)
347 #define STA_TYPE_BC BIT(5)
349 #define NETWORK_INFRA BIT(16)
350 #define NETWORK_P2P BIT(17)
351 #define NETWORK_IBSS BIT(18)
352 #define NETWORK_WDS BIT(21)
354 #define CONNECTION_INFRA_STA (STA_TYPE_STA | NETWORK_INFRA)
355 #define CONNECTION_INFRA_AP (STA_TYPE_AP | NETWORK_INFRA)
356 #define CONNECTION_P2P_GC (STA_TYPE_STA | NETWORK_P2P)
357 #define CONNECTION_P2P_GO (STA_TYPE_AP | NETWORK_P2P)
358 #define CONNECTION_IBSS_ADHOC (STA_TYPE_ADHOC | NETWORK_IBSS)
359 #define CONNECTION_WDS (STA_TYPE_WDS | NETWORK_WDS)
360 #define CONNECTION_INFRA_BC (STA_TYPE_BC | NETWORK_INFRA)
362 #define CONN_STATE_DISCONNECT 0
363 #define CONN_STATE_CONNECT 1
364 #define CONN_STATE_PORT_SECURE 2
373 SCS_SET_MANUAL_PD_TH
,
378 SCS_GET_GLO_ADDR_EVENT
,
382 CMD_CBW_20MHZ
= IEEE80211_STA_RX_BW_20
,
383 CMD_CBW_40MHZ
= IEEE80211_STA_RX_BW_40
,
384 CMD_CBW_80MHZ
= IEEE80211_STA_RX_BW_80
,
385 CMD_CBW_160MHZ
= IEEE80211_STA_RX_BW_160
,
401 struct bss_info_omac
{
412 struct bss_info_basic
{
425 u8 max_bssid
; /* max BSSID. range: 1 ~ 8, 0: MBSSID disabled */
426 u8 non_tx_bssid
;/* non-transmitted BSSID, 0: transmitted BSSID */
427 u8 bmc_wcid_hi
; /* high Byte and version */
431 struct bss_info_rf_ch
{
438 u8 he_ru26_block
; /* 1: don't send HETB in RU26, 0: allow */
439 u8 he_all_disable
; /* 1: disallow all HETB, 0: allow */
443 struct bss_info_ext_bss
{
446 __le32 mbss_tsf_offset
; /* in unit of us */
450 struct bss_info_bmc_rate
{
471 u8 has_20_sta
; /* Check if any sta support GF. */
472 u8 bss_width_trigger_events
;
474 u8 vht_bw_signal
; /* not use */
475 u8 vht_force_sgi
; /* not use */
480 unsigned short train_up_high_thres
;
481 short train_up_rule_rssi
;
482 unsigned short low_traffic_thres
;
486 __le32 fast_interval
;
489 struct bss_info_hw_amsdu
{
503 u8 vht_op_info_present
;
505 __le16 max_nss_mcs
[CMD_HE_MCS_BW_NUM
];
509 struct bss_info_bcn
{
515 } __packed
__aligned(4);
517 struct bss_info_bcn_csa
{
522 } __packed
__aligned(4);
524 struct bss_info_bcn_bcc
{
529 } __packed
__aligned(4);
531 struct bss_info_bcn_mbss
{
532 #define MAX_BEACON_NUM 32
536 __le16 offset
[MAX_BEACON_NUM
];
538 } __packed
__aligned(4);
540 struct bss_info_bcn_cont
{
547 } __packed
__aligned(4);
553 BSS_INFO_BCN_CONTENT
,
560 BSS_INFO_RF_CH
, /* optional, for BT/LTE coex */
561 BSS_INFO_PM
, /* sta only */
562 BSS_INFO_UAPSD
, /* sta only */
563 BSS_INFO_ROAM_DETECT
, /* obsoleted */
564 BSS_INFO_LQ_RM
, /* obsoleted */
566 BSS_INFO_BMC_RATE
, /* for bmc rate control in CR4 */
567 BSS_INFO_SYNC_MODE
, /* obsoleted */
572 BSS_INFO_PROTECT_INFO
,
579 WTBL_RESET_AND_SET
= 1,
585 struct wtbl_req_hdr
{
593 struct wtbl_generic
{
596 u8 peer_addr
[ETH_ALEN
];
638 struct wtbl_hdr_trans
{
649 MT_BA_TYPE_ORIGINATOR
,
654 RST_BA_MAC_TID_MATCH
,
666 /* originator only */
672 u8 peer_addr
[ETH_ALEN
];
692 WTBL_PEER_PS
, /* not used */
697 WTBL_RDG
, /* obsoleted */
698 WTBL_PROTECT
, /* not used */
699 WTBL_CLEAR
, /* not used */
702 WTBL_RAW_DATA
, /* debug only */
708 struct sta_ntlv_hdr
{
723 struct sta_rec_basic
{
730 u8 peer_addr
[ETH_ALEN
];
745 __le16 vht_rx_mcs_map
;
746 __le16 vht_tx_mcs_map
;
751 struct sta_rec_uapsd
{
758 __le16 listen_interval
;
762 struct sta_rec_muru
{
776 bool he_20m_in_40m_2g
;
780 bool rx_su_comp_sigb
;
781 bool rx_su_non_comp_sigb
;
796 bool partial_bw_dl_mimo
;
802 bool partial_ul_mimo
;
826 __le16 max_nss_mcs
[CMD_HE_MCS_BW_NUM
];
842 struct sta_rec_amsdu
{
866 struct sec_key key
[2];
904 __le16 supp_vht_mcs
[4];
907 u8 op_vht_chan_width
;
909 u8 op_vht_rx_nss_type
;
916 struct sta_rec_ra_fixed
{
922 u8 op_vht_chan_width
;
924 u8 op_vht_rx_nss_type
;
934 #define RATE_PARAM_FIXED 3
935 #define RATE_PARAM_AUTO 20
936 #define RATE_CFG_MCS GENMASK(3, 0)
937 #define RATE_CFG_NSS GENMASK(7, 4)
938 #define RATE_CFG_GI GENMASK(11, 8)
939 #define RATE_CFG_BW GENMASK(15, 12)
940 #define RATE_CFG_STBC GENMASK(19, 16)
941 #define RATE_CFG_LDPC GENMASK(23, 20)
942 #define RATE_CFG_PHY_TYPE GENMASK(27, 24)
948 __le16 pfmu
; /* 0xffff: no access right for PFMU */
949 bool su_mu
; /* 0: SU, 1: MU */
950 u8 bf_cap
; /* 0: iBF, 1: eBF */
951 u8 sounding_phy
; /* 0: legacy, 1: OFDM, 2: HT, 4: VHT */
955 u8 tx_mode
; /* 0: legacy, 1: OFDM, 2: HT, 4: VHT ... */
958 u8 bw
; /* 0: 20M, 1: 40M, 2: 80M, 3: 160M */
964 u8 col
: 6, row_msb
: 2;
969 u8 auto_sounding
; /* b7: low traffic indicator
970 * b6: Stop sounding for this entry
971 * b5 ~ b0: postpone sounding
993 struct sta_rec_bfee
{
996 bool fb_identity_matrix
; /* 1: feedback identity matrix */
997 bool ignore_feedback
; /* 1: ignore */
1004 STA_REC_RA_CMM_INFO
,
1009 STA_REC_RED
, /* not used */
1010 STA_REC_TX_PROC
, /* for hdr trans and CSO in CR4 */
1026 enum mt7915_cipher_type
{
1037 MT_CIPHER_BIP_CMAC_128
,
1041 CH_SWITCH_NORMAL
= 0,
1045 CH_SWITCH_BACKGROUND_SCAN_START
= 6,
1046 CH_SWITCH_BACKGROUND_SCAN_RUNNING
= 7,
1047 CH_SWITCH_BACKGROUND_SCAN_STOP
= 8,
1048 CH_SWITCH_SCAN_BYPASS_DPD
= 9
1052 THERMAL_SENSOR_TEMP_QUERY
,
1053 THERMAL_SENSOR_MANUAL_CTRL
,
1054 THERMAL_SENSOR_INFO_QUERY
,
1055 THERMAL_SENSOR_TASK_CTRL
,
1059 MT_EBF
= BIT(0), /* explicit beamforming */
1060 MT_IBF
= BIT(1) /* implicit beamforming */
1063 #define MT7915_WTBL_UPDATE_MAX_SIZE (sizeof(struct wtbl_req_hdr) + \
1064 sizeof(struct wtbl_generic) + \
1065 sizeof(struct wtbl_rx) + \
1066 sizeof(struct wtbl_ht) + \
1067 sizeof(struct wtbl_vht) + \
1068 sizeof(struct wtbl_hdr_trans) +\
1069 sizeof(struct wtbl_ba) + \
1070 sizeof(struct wtbl_smps))
1072 #define MT7915_STA_UPDATE_MAX_SIZE (sizeof(struct sta_req_hdr) + \
1073 sizeof(struct sta_rec_basic) + \
1074 sizeof(struct sta_rec_ht) + \
1075 sizeof(struct sta_rec_he) + \
1076 sizeof(struct sta_rec_ba) + \
1077 sizeof(struct sta_rec_vht) + \
1078 sizeof(struct sta_rec_uapsd) + \
1079 sizeof(struct sta_rec_amsdu) + \
1080 sizeof(struct tlv) + \
1081 MT7915_WTBL_UPDATE_MAX_SIZE)
1083 #define MT7915_WTBL_UPDATE_BA_SIZE (sizeof(struct wtbl_req_hdr) + \
1084 sizeof(struct wtbl_ba))
1086 #define MT7915_BSS_UPDATE_MAX_SIZE (sizeof(struct sta_req_hdr) + \
1087 sizeof(struct bss_info_omac) + \
1088 sizeof(struct bss_info_basic) +\
1089 sizeof(struct bss_info_rf_ch) +\
1090 sizeof(struct bss_info_ra) + \
1091 sizeof(struct bss_info_hw_amsdu) +\
1092 sizeof(struct bss_info_he) + \
1093 sizeof(struct bss_info_bmc_rate) +\
1094 sizeof(struct bss_info_ext_bss))
1096 #define MT7915_BEACON_UPDATE_SIZE (sizeof(struct sta_req_hdr) + \
1097 sizeof(struct bss_info_bcn_csa) + \
1098 sizeof(struct bss_info_bcn_bcc) + \
1099 sizeof(struct bss_info_bcn_mbss) + \
1100 sizeof(struct bss_info_bcn_cont))
1102 #define PHY_MODE_A BIT(0)
1103 #define PHY_MODE_B BIT(1)
1104 #define PHY_MODE_G BIT(2)
1105 #define PHY_MODE_GN BIT(3)
1106 #define PHY_MODE_AN BIT(4)
1107 #define PHY_MODE_AC BIT(5)
1108 #define PHY_MODE_AX_24G BIT(6)
1109 #define PHY_MODE_AX_5G BIT(7)
1110 #define PHY_MODE_AX_6G BIT(8)
1112 #define MODE_CCK BIT(0)
1113 #define MODE_OFDM BIT(1)
1114 #define MODE_HT BIT(2)
1115 #define MODE_VHT BIT(3)
1116 #define MODE_HE BIT(4)
1118 #define STA_CAP_WMM BIT(0)
1119 #define STA_CAP_SGI_20 BIT(4)
1120 #define STA_CAP_SGI_40 BIT(5)
1121 #define STA_CAP_TX_STBC BIT(6)
1122 #define STA_CAP_RX_STBC BIT(7)
1123 #define STA_CAP_VHT_SGI_80 BIT(16)
1124 #define STA_CAP_VHT_SGI_160 BIT(17)
1125 #define STA_CAP_VHT_TX_STBC BIT(18)
1126 #define STA_CAP_VHT_RX_STBC BIT(19)
1127 #define STA_CAP_VHT_LDPC BIT(23)
1128 #define STA_CAP_LDPC BIT(24)
1129 #define STA_CAP_HT BIT(26)
1130 #define STA_CAP_VHT BIT(27)
1131 #define STA_CAP_HE BIT(28)
1134 #define STA_REC_HE_CAP_HTC BIT(0)
1135 #define STA_REC_HE_CAP_BQR BIT(1)
1136 #define STA_REC_HE_CAP_BSR BIT(2)
1137 #define STA_REC_HE_CAP_OM BIT(3)
1138 #define STA_REC_HE_CAP_AMSDU_IN_AMPDU BIT(4)
1140 #define STA_REC_HE_CAP_DUAL_BAND BIT(5)
1141 #define STA_REC_HE_CAP_LDPC BIT(6)
1142 #define STA_REC_HE_CAP_TRIG_CQI_FK BIT(7)
1143 #define STA_REC_HE_CAP_PARTIAL_BW_EXT_RANGE BIT(8)
1145 #define STA_REC_HE_CAP_LE_EQ_80M_TX_STBC BIT(9)
1146 #define STA_REC_HE_CAP_LE_EQ_80M_RX_STBC BIT(10)
1147 #define STA_REC_HE_CAP_GT_80M_TX_STBC BIT(11)
1148 #define STA_REC_HE_CAP_GT_80M_RX_STBC BIT(12)
1150 #define STA_REC_HE_CAP_SU_PPDU_1LTF_8US_GI BIT(13)
1151 #define STA_REC_HE_CAP_SU_MU_PPDU_4LTF_8US_GI BIT(14)
1152 #define STA_REC_HE_CAP_ER_SU_PPDU_1LTF_8US_GI BIT(15)
1153 #define STA_REC_HE_CAP_ER_SU_PPDU_4LTF_8US_GI BIT(16)
1154 #define STA_REC_HE_CAP_NDP_4LTF_3DOT2MS_GI BIT(17)
1156 #define STA_REC_HE_CAP_BW20_RU242_SUPPORT BIT(18)
1157 #define STA_REC_HE_CAP_TX_1024QAM_UNDER_RU242 BIT(19)
1158 #define STA_REC_HE_CAP_RX_1024QAM_UNDER_RU242 BIT(20)