1 /* SPDX-License-Identifier: ISC */
2 /* Copyright (C) 2019 MediaTek Inc. */
7 struct mt7615_mcu_txd
{
15 u8 set_query
; /* FW don't care */
24 } __packed
__aligned(4);
26 struct mt7615_mcu_rxd
{
41 #define MCU_PQ_ID(p, q) (((p) << 15) | ((q) << 10))
42 #define MCU_PKT_ID 0xa0
59 MCU_CMD_TARGET_ADDRESS_LEN_REQ
= 0x01,
60 MCU_CMD_FW_START_REQ
= 0x02,
61 MCU_CMD_INIT_ACCESS_REG
= 0x3,
62 MCU_CMD_PATCH_START_REQ
= 0x05,
63 MCU_CMD_PATCH_FINISH_REQ
= 0x07,
64 MCU_CMD_PATCH_SEM_CONTROL
= 0x10,
65 MCU_CMD_EXT_CID
= 0xED,
66 MCU_CMD_FW_SCATTER
= 0xEE,
67 MCU_CMD_RESTART_DL_REQ
= 0xEF,
71 MCU_EXT_CMD_PM_STATE_CTRL
= 0x07,
72 MCU_EXT_CMD_CHANNEL_SWITCH
= 0x08,
73 MCU_EXT_CMD_EFUSE_BUFFER_MODE
= 0x21,
74 MCU_EXT_CMD_STA_REC_UPDATE
= 0x25,
75 MCU_EXT_CMD_BSS_INFO_UPDATE
= 0x26,
76 MCU_EXT_CMD_EDCA_UPDATE
= 0x27,
77 MCU_EXT_CMD_DEV_INFO_UPDATE
= 0x2A,
78 MCU_EXT_CMD_WTBL_UPDATE
= 0x32,
79 MCU_EXT_CMD_PROTECT_CTRL
= 0x3e,
80 MCU_EXT_CMD_MAC_INIT_CTRL
= 0x46,
81 MCU_EXT_CMD_BCN_OFFLOAD
= 0x49,
82 MCU_EXT_CMD_SET_RX_PATH
= 0x4e,
86 PATCH_SEM_RELEASE
= 0x0,
91 PATCH_NOT_DL_SEM_FAIL
= 0x0,
93 PATCH_NOT_DL_SEM_SUCCESS
= 0x2,
94 PATCH_REL_SEM_SUCCESS
= 0x3
99 FW_STATE_FW_DOWNLOAD
= 1,
100 FW_STATE_NORMAL_OPERATION
= 2,
101 FW_STATE_NORMAL_TRX
= 3,
105 #define STA_TYPE_STA BIT(0)
106 #define STA_TYPE_AP BIT(1)
107 #define STA_TYPE_ADHOC BIT(2)
108 #define STA_TYPE_TDLS BIT(3)
109 #define STA_TYPE_WDS BIT(4)
110 #define STA_TYPE_BC BIT(5)
112 #define NETWORK_INFRA BIT(16)
113 #define NETWORK_P2P BIT(17)
114 #define NETWORK_IBSS BIT(18)
115 #define NETWORK_MESH BIT(19)
116 #define NETWORK_BOW BIT(20)
117 #define NETWORK_WDS BIT(21)
119 #define CONNECTION_INFRA_STA (STA_TYPE_STA | NETWORK_INFRA)
120 #define CONNECTION_INFRA_AP (STA_TYPE_AP | NETWORK_INFRA)
121 #define CONNECTION_P2P_GC (STA_TYPE_STA | NETWORK_P2P)
122 #define CONNECTION_P2P_GO (STA_TYPE_AP | NETWORK_P2P)
123 #define CONNECTION_MESH_STA (STA_TYPE_STA | NETWORK_MESH)
124 #define CONNECTION_MESH_AP (STA_TYPE_AP | NETWORK_MESH)
125 #define CONNECTION_IBSS_ADHOC (STA_TYPE_ADHOC | NETWORK_IBSS)
126 #define CONNECTION_TDLS (STA_TYPE_STA | NETWORK_INFRA | STA_TYPE_TDLS)
127 #define CONNECTION_WDS (STA_TYPE_WDS | NETWORK_WDS)
128 #define CONNECTION_INFRA_BC (STA_TYPE_BC | NETWORK_INFRA)
130 #define CONN_STATE_DISCONNECT 0
131 #define CONN_STATE_CONNECT 1
132 #define CONN_STATE_PORT_SECURE 2
136 u8 omac_addr
[ETH_ALEN
];
152 u8 bmc_tx_wlan_idx
; /* for bmc tx (sta mode use uc entry) */
162 struct bss_info_tag_handler
{
165 void (*handler
)(struct mt7615_dev
*dev
,
166 struct bss_info
*bss_info
, struct sk_buff
*skb
);
169 struct bss_info_omac
{
180 struct bss_info_basic
{
191 u8 cipher
; /* not used */
192 u8 phymode
; /* not used */
196 struct bss_info_rf_ch
{
205 struct bss_info_ext_bss
{
208 __le32 mbss_tsf_offset
; /* in unit of us */
215 BSS_INFO_RF_CH
, /* optional, for BT/LTE coex */
216 BSS_INFO_PM
, /* sta only */
217 BSS_INFO_UAPSD
, /* sta only */
218 BSS_INFO_ROAM_DETECTION
, /* obsoleted */
219 BSS_INFO_LQ_RM
, /* obsoleted */
221 BSS_INFO_BMC_INFO
, /* for bmc rate control in CR4 */
222 BSS_INFO_SYNC_MODE
, /* obsoleted */
228 WTBL_RESET_AND_SET
= 1,
234 struct wtbl_generic
{
237 u8 peer_addr
[ETH_ALEN
];
286 struct wtbl_hdr_trans
{
295 enum mt7615_cipher_type
{
299 MT_CIPHER_TKIP_NO_MIC
,
302 MT_CIPHER_BIP_CMAC_128
,
305 MT_CIPHER_CCMP_256
= 10,
310 struct wtbl_sec_key
{
313 u8 add
; /* 0: add, 1: remove */
325 MT_BA_TYPE_ORIGINATOR
,
330 RST_BA_MAC_TID_MATCH
,
342 /* originator only */
348 u8 peer_addr
[ETH_ALEN
];
399 #define MT7615_WTBL_UPDATE_MAX_SIZE (sizeof(struct wtbl_generic) + \
400 sizeof(struct wtbl_rx) + \
401 sizeof(struct wtbl_ht) + \
402 sizeof(struct wtbl_vht) + \
403 sizeof(struct wtbl_tx_ps) + \
404 sizeof(struct wtbl_hdr_trans) + \
405 sizeof(struct wtbl_sec_key) + \
406 sizeof(struct wtbl_ba) + \
407 sizeof(struct wtbl_bf) + \
408 sizeof(struct wtbl_smps) + \
409 sizeof(struct wtbl_pn) + \
410 sizeof(struct wtbl_spe))
417 WTBL_PEER_PS
, /* not used */
422 WTBL_RDG
, /* obsoleted */
423 WTBL_PROTECT
, /* not used */
424 WTBL_CLEAR
, /* not used */
427 WTBL_RAW_DATA
, /* debug only */
433 struct sta_rec_basic
{
440 u8 peer_addr
[ETH_ALEN
];
441 #define EXTRA_INFO_VER BIT(0)
442 #define EXTRA_INFO_NEW BIT(1)
457 __le16 vht_rx_mcs_map
;
458 __le16 vht_tx_mcs_map
;
472 #define MT7615_STA_REC_UPDATE_MAX_SIZE (sizeof(struct sta_rec_basic) + \
473 sizeof(struct sta_rec_ht) + \
474 sizeof(struct sta_rec_vht))
482 STA_REC_AMSDU
, /* for CR4 */
484 STA_REC_RED
, /* not used */
485 STA_REC_TX_PROC
, /* for hdr trans and CSO in CR4 */
503 CH_SWITCH_NORMAL
= 0,
507 CH_SWITCH_BACKGROUND_SCAN_START
= 6,
508 CH_SWITCH_BACKGROUND_SCAN_RUNNING
= 7,
509 CH_SWITCH_BACKGROUND_SCAN_STOP
= 8,
510 CH_SWITCH_SCAN_BYPASS_DPD
= 9
513 static inline struct sk_buff
*
514 mt7615_mcu_msg_alloc(const void *data
, int len
)
516 return mt76_mcu_msg_alloc(data
, sizeof(struct mt7615_mcu_txd
),