1c948b5daSDeren Wu /* SPDX-License-Identifier: ISC */ 2c948b5daSDeren Wu /* Copyright (C) 2023 MediaTek Inc. */ 3c948b5daSDeren Wu 4c948b5daSDeren Wu #ifndef __MT7925_MCU_H 5c948b5daSDeren Wu #define __MT7925_MCU_H 6c948b5daSDeren Wu 7c948b5daSDeren Wu #include "../mt76_connac_mcu.h" 8c948b5daSDeren Wu 9c948b5daSDeren Wu /* ext event table */ 10c948b5daSDeren Wu enum { 11c948b5daSDeren Wu MCU_EXT_EVENT_RATE_REPORT = 0x87, 12c948b5daSDeren Wu }; 13c948b5daSDeren Wu 14c948b5daSDeren Wu struct mt7925_mcu_eeprom_info { 15c948b5daSDeren Wu __le32 addr; 16c948b5daSDeren Wu __le32 valid; 17c948b5daSDeren Wu u8 data[MT7925_EEPROM_BLOCK_SIZE]; 18c948b5daSDeren Wu } __packed; 19c948b5daSDeren Wu 20c948b5daSDeren Wu #define MT_RA_RATE_NSS GENMASK(8, 6) 21c948b5daSDeren Wu #define MT_RA_RATE_MCS GENMASK(3, 0) 22c948b5daSDeren Wu #define MT_RA_RATE_TX_MODE GENMASK(12, 9) 23c948b5daSDeren Wu #define MT_RA_RATE_DCM_EN BIT(4) 24c948b5daSDeren Wu #define MT_RA_RATE_BW GENMASK(14, 13) 25c948b5daSDeren Wu 26c948b5daSDeren Wu struct mt7925_mcu_rxd { 27c948b5daSDeren Wu __le32 rxd[8]; 28c948b5daSDeren Wu 29c948b5daSDeren Wu __le16 len; 30c948b5daSDeren Wu __le16 pkt_type_id; 31c948b5daSDeren Wu 32c948b5daSDeren Wu u8 eid; 33c948b5daSDeren Wu u8 seq; 34c948b5daSDeren Wu u8 option; 35c948b5daSDeren Wu u8 __rsv; 36c948b5daSDeren Wu 37c948b5daSDeren Wu u8 ext_eid; 38c948b5daSDeren Wu u8 __rsv1[2]; 39c948b5daSDeren Wu u8 s2d_index; 40c948b5daSDeren Wu 41c948b5daSDeren Wu u8 tlv[]; 42c948b5daSDeren Wu }; 43c948b5daSDeren Wu 44c948b5daSDeren Wu struct mt7925_mcu_uni_event { 45c948b5daSDeren Wu u8 cid; 46c948b5daSDeren Wu u8 pad[3]; 47c948b5daSDeren Wu __le32 status; /* 0: success, others: fail */ 48c948b5daSDeren Wu } __packed; 49c948b5daSDeren Wu 50c948b5daSDeren Wu enum { 51c948b5daSDeren Wu MT_EBF = BIT(0), /* explicit beamforming */ 52c948b5daSDeren Wu MT_IBF = BIT(1) /* implicit beamforming */ 53c948b5daSDeren Wu }; 54c948b5daSDeren Wu 55c948b5daSDeren Wu struct mt7925_mcu_reg_event { 56c948b5daSDeren Wu __le32 reg; 57c948b5daSDeren Wu __le32 val; 58c948b5daSDeren Wu } __packed; 59c948b5daSDeren Wu 60c948b5daSDeren Wu struct mt7925_mcu_ant_id_config { 61c948b5daSDeren Wu u8 ant_id[4]; 62c948b5daSDeren Wu } __packed; 63c948b5daSDeren Wu 64c948b5daSDeren Wu struct mt7925_txpwr_req { 65c948b5daSDeren Wu u8 _rsv[4]; 66c948b5daSDeren Wu __le16 tag; 67c948b5daSDeren Wu __le16 len; 68c948b5daSDeren Wu 69c948b5daSDeren Wu u8 format_id; 70c948b5daSDeren Wu u8 catg; 71c948b5daSDeren Wu u8 band_idx; 72c948b5daSDeren Wu u8 _rsv1; 73c948b5daSDeren Wu } __packed; 74c948b5daSDeren Wu 75c948b5daSDeren Wu struct mt7925_txpwr_event { 76c948b5daSDeren Wu u8 rsv[4]; 77c948b5daSDeren Wu __le16 tag; 78c948b5daSDeren Wu __le16 len; 79c948b5daSDeren Wu 80c948b5daSDeren Wu u8 catg; 81c948b5daSDeren Wu u8 band_idx; 82c948b5daSDeren Wu u8 ch_band; 83c948b5daSDeren Wu u8 format; /* 0:Legacy, 1:HE */ 84c948b5daSDeren Wu 85c948b5daSDeren Wu /* Rate power info */ 86c948b5daSDeren Wu struct mt7925_txpwr txpwr; 87c948b5daSDeren Wu 88c948b5daSDeren Wu s8 pwr_max; 89c948b5daSDeren Wu s8 pwr_min; 90c948b5daSDeren Wu u8 rsv1; 91c948b5daSDeren Wu } __packed; 92c948b5daSDeren Wu 93c948b5daSDeren Wu enum { 94c948b5daSDeren Wu TM_SWITCH_MODE, 95c948b5daSDeren Wu TM_SET_AT_CMD, 96c948b5daSDeren Wu TM_QUERY_AT_CMD, 97c948b5daSDeren Wu }; 98c948b5daSDeren Wu 99c948b5daSDeren Wu enum { 100c948b5daSDeren Wu MT7925_TM_NORMAL, 101c948b5daSDeren Wu MT7925_TM_TESTMODE, 102c948b5daSDeren Wu MT7925_TM_ICAP, 103c948b5daSDeren Wu MT7925_TM_ICAP_OVERLAP, 104c948b5daSDeren Wu MT7925_TM_WIFISPECTRUM, 105c948b5daSDeren Wu }; 106c948b5daSDeren Wu 107c948b5daSDeren Wu struct mt7925_rftest_cmd { 108c948b5daSDeren Wu u8 action; 109c948b5daSDeren Wu u8 rsv[3]; 110c948b5daSDeren Wu __le32 param0; 111c948b5daSDeren Wu __le32 param1; 112c948b5daSDeren Wu } __packed; 113c948b5daSDeren Wu 114c948b5daSDeren Wu struct mt7925_rftest_evt { 115c948b5daSDeren Wu __le32 param0; 116c948b5daSDeren Wu __le32 param1; 117c948b5daSDeren Wu } __packed; 118c948b5daSDeren Wu 119c948b5daSDeren Wu enum { 120c948b5daSDeren Wu UNI_CHANNEL_SWITCH, 121c948b5daSDeren Wu UNI_CHANNEL_RX_PATH, 122c948b5daSDeren Wu }; 123c948b5daSDeren Wu 124c948b5daSDeren Wu enum { 125c948b5daSDeren Wu UNI_CHIP_CONFIG_CHIP_CFG = 0x2, 126c948b5daSDeren Wu UNI_CHIP_CONFIG_NIC_CAPA = 0x3, 127c948b5daSDeren Wu }; 128c948b5daSDeren Wu 129c948b5daSDeren Wu enum { 130c948b5daSDeren Wu UNI_BAND_CONFIG_RADIO_ENABLE, 131c948b5daSDeren Wu UNI_BAND_CONFIG_RTS_THRESHOLD = 0x08, 132c948b5daSDeren Wu UNI_BAND_CONFIG_SET_MAC80211_RX_FILTER = 0x0C, 133c948b5daSDeren Wu }; 134c948b5daSDeren Wu 135c948b5daSDeren Wu enum { 136c948b5daSDeren Wu UNI_WSYS_CONFIG_FW_LOG_CTRL, 137c948b5daSDeren Wu UNI_WSYS_CONFIG_FW_DBG_CTRL, 138c948b5daSDeren Wu }; 139c948b5daSDeren Wu 140c948b5daSDeren Wu enum { 141c948b5daSDeren Wu UNI_EFUSE_ACCESS = 1, 142c948b5daSDeren Wu UNI_EFUSE_BUFFER_MODE, 143c948b5daSDeren Wu UNI_EFUSE_FREE_BLOCK, 144c948b5daSDeren Wu UNI_EFUSE_BUFFER_RD, 145c948b5daSDeren Wu }; 146c948b5daSDeren Wu 147c948b5daSDeren Wu enum { 148c948b5daSDeren Wu UNI_CMD_ACCESS_REG_BASIC = 0x0, 149c948b5daSDeren Wu UNI_CMD_ACCESS_RF_REG_BASIC, 150c948b5daSDeren Wu }; 151c948b5daSDeren Wu 152c948b5daSDeren Wu enum { 153c948b5daSDeren Wu UNI_MBMC_SETTING, 154c948b5daSDeren Wu }; 155c948b5daSDeren Wu 156c948b5daSDeren Wu enum { 157c948b5daSDeren Wu UNI_EVENT_SCAN_DONE_BASIC = 0, 158c948b5daSDeren Wu UNI_EVENT_SCAN_DONE_CHNLINFO = 2, 159c948b5daSDeren Wu UNI_EVENT_SCAN_DONE_NLO = 3, 160c948b5daSDeren Wu }; 161c948b5daSDeren Wu 16247916693SMing Yen Hsieh enum connac3_mcu_cipher_type { 16347916693SMing Yen Hsieh CONNAC3_CIPHER_NONE = 0, 16447916693SMing Yen Hsieh CONNAC3_CIPHER_WEP40 = 1, 16547916693SMing Yen Hsieh CONNAC3_CIPHER_TKIP = 2, 16647916693SMing Yen Hsieh CONNAC3_CIPHER_AES_CCMP = 4, 16747916693SMing Yen Hsieh CONNAC3_CIPHER_WEP104 = 5, 16847916693SMing Yen Hsieh CONNAC3_CIPHER_BIP_CMAC_128 = 6, 16947916693SMing Yen Hsieh CONNAC3_CIPHER_WEP128 = 7, 17047916693SMing Yen Hsieh CONNAC3_CIPHER_WAPI = 8, 17147916693SMing Yen Hsieh CONNAC3_CIPHER_CCMP_256 = 10, 17247916693SMing Yen Hsieh CONNAC3_CIPHER_GCMP = 11, 17347916693SMing Yen Hsieh CONNAC3_CIPHER_GCMP_256 = 12, 17447916693SMing Yen Hsieh }; 17547916693SMing Yen Hsieh 176c948b5daSDeren Wu struct mt7925_mcu_scan_chinfo_event { 177c948b5daSDeren Wu u8 nr_chan; 178c948b5daSDeren Wu u8 alpha2[3]; 179c948b5daSDeren Wu } __packed; 180c948b5daSDeren Wu 181c948b5daSDeren Wu enum { 182c948b5daSDeren Wu UNI_SCAN_REQ = 1, 183c948b5daSDeren Wu UNI_SCAN_CANCEL = 2, 184c948b5daSDeren Wu UNI_SCAN_SCHED_REQ = 3, 185c948b5daSDeren Wu UNI_SCAN_SCHED_ENABLE = 4, 186c948b5daSDeren Wu UNI_SCAN_SSID = 10, 187c948b5daSDeren Wu UNI_SCAN_BSSID, 188c948b5daSDeren Wu UNI_SCAN_CHANNEL, 189c948b5daSDeren Wu UNI_SCAN_IE, 190c948b5daSDeren Wu UNI_SCAN_MISC, 191c948b5daSDeren Wu UNI_SCAN_SSID_MATCH_SETS, 192c948b5daSDeren Wu }; 193c948b5daSDeren Wu 194c948b5daSDeren Wu enum { 195c948b5daSDeren Wu UNI_SNIFFER_ENABLE, 196c948b5daSDeren Wu UNI_SNIFFER_CONFIG, 197c948b5daSDeren Wu }; 198c948b5daSDeren Wu 199c948b5daSDeren Wu struct scan_hdr_tlv { 200c948b5daSDeren Wu /* fixed field */ 201c948b5daSDeren Wu u8 seq_num; 202c948b5daSDeren Wu u8 bss_idx; 203c948b5daSDeren Wu u8 pad[2]; 204c948b5daSDeren Wu /* tlv */ 205c948b5daSDeren Wu u8 data[]; 206c948b5daSDeren Wu } __packed; 207c948b5daSDeren Wu 208c948b5daSDeren Wu struct scan_req_tlv { 209c948b5daSDeren Wu __le16 tag; 210c948b5daSDeren Wu __le16 len; 211c948b5daSDeren Wu 212c948b5daSDeren Wu u8 scan_type; /* 0: PASSIVE SCAN 213c948b5daSDeren Wu * 1: ACTIVE SCAN 214c948b5daSDeren Wu */ 215c948b5daSDeren Wu u8 probe_req_num; /* Number of probe request for each SSID */ 216c948b5daSDeren Wu u8 scan_func; /* BIT(0) Enable random MAC scan 217c948b5daSDeren Wu * BIT(1) Disable DBDC scan type 1~3. 218c948b5daSDeren Wu * BIT(2) Use DBDC scan type 3 (dedicated one RF to scan). 219c948b5daSDeren Wu */ 220c948b5daSDeren Wu u8 src_mask; 221c948b5daSDeren Wu __le16 channel_min_dwell_time; 222c948b5daSDeren Wu __le16 channel_dwell_time; /* channel Dwell interval */ 223c948b5daSDeren Wu __le16 timeout_value; 224c948b5daSDeren Wu __le16 probe_delay_time; 2251f01276bSMing Yen Hsieh __le32 func_mask_ext; 226c948b5daSDeren Wu }; 227c948b5daSDeren Wu 228c948b5daSDeren Wu struct scan_ssid_tlv { 229c948b5daSDeren Wu __le16 tag; 230c948b5daSDeren Wu __le16 len; 231c948b5daSDeren Wu 232c948b5daSDeren Wu u8 ssid_type; /* BIT(0) wildcard SSID 233c948b5daSDeren Wu * BIT(1) P2P wildcard SSID 234c948b5daSDeren Wu * BIT(2) specified SSID + wildcard SSID 235c948b5daSDeren Wu * BIT(2) + ssid_type_ext BIT(0) specified SSID only 236c948b5daSDeren Wu */ 237c948b5daSDeren Wu u8 ssids_num; 238c948b5daSDeren Wu u8 pad[2]; 239c948b5daSDeren Wu struct mt76_connac_mcu_scan_ssid ssids[4]; 240c948b5daSDeren Wu }; 241c948b5daSDeren Wu 242c948b5daSDeren Wu struct scan_bssid_tlv { 243c948b5daSDeren Wu __le16 tag; 244c948b5daSDeren Wu __le16 len; 245c948b5daSDeren Wu 246c948b5daSDeren Wu u8 bssid[ETH_ALEN]; 247c948b5daSDeren Wu u8 match_ch; 248c948b5daSDeren Wu u8 match_ssid_ind; 249c948b5daSDeren Wu u8 rcpi; 250c948b5daSDeren Wu u8 pad[3]; 251c948b5daSDeren Wu }; 252c948b5daSDeren Wu 253c948b5daSDeren Wu struct scan_chan_info_tlv { 254c948b5daSDeren Wu __le16 tag; 255c948b5daSDeren Wu __le16 len; 256c948b5daSDeren Wu 257c948b5daSDeren Wu u8 channel_type; /* 0: Full channels 258c948b5daSDeren Wu * 1: Only 2.4GHz channels 259c948b5daSDeren Wu * 2: Only 5GHz channels 260c948b5daSDeren Wu * 3: P2P social channel only (channel #1, #6 and #11) 261c948b5daSDeren Wu * 4: Specified channels 262c948b5daSDeren Wu * Others: Reserved 263c948b5daSDeren Wu */ 264c948b5daSDeren Wu u8 channels_num; /* valid when channel_type is 4 */ 265c948b5daSDeren Wu u8 pad[2]; 266c948b5daSDeren Wu struct mt76_connac_mcu_scan_channel channels[64]; 267c948b5daSDeren Wu }; 268c948b5daSDeren Wu 269c948b5daSDeren Wu struct scan_ie_tlv { 270c948b5daSDeren Wu __le16 tag; 271c948b5daSDeren Wu __le16 len; 272c948b5daSDeren Wu 273c948b5daSDeren Wu __le16 ies_len; 274c948b5daSDeren Wu u8 band; 275c948b5daSDeren Wu u8 pad; 276c948b5daSDeren Wu u8 ies[MT76_CONNAC_SCAN_IE_LEN]; 277c948b5daSDeren Wu }; 278c948b5daSDeren Wu 279c948b5daSDeren Wu struct scan_misc_tlv { 280c948b5daSDeren Wu __le16 tag; 281c948b5daSDeren Wu __le16 len; 282c948b5daSDeren Wu 283c948b5daSDeren Wu u8 random_mac[ETH_ALEN]; 284c948b5daSDeren Wu u8 rsv[2]; 285c948b5daSDeren Wu }; 286c948b5daSDeren Wu 287c948b5daSDeren Wu struct scan_sched_req { 288c948b5daSDeren Wu __le16 tag; 289c948b5daSDeren Wu __le16 len; 290c948b5daSDeren Wu 291c948b5daSDeren Wu u8 version; 292c948b5daSDeren Wu u8 stop_on_match; 293c948b5daSDeren Wu u8 intervals_num; 294c948b5daSDeren Wu u8 scan_func; 295c948b5daSDeren Wu __le16 intervals[MT76_CONNAC_MAX_NUM_SCHED_SCAN_INTERVAL]; 296c948b5daSDeren Wu }; 297c948b5daSDeren Wu 298c948b5daSDeren Wu struct scan_sched_ssid_match_sets { 299c948b5daSDeren Wu __le16 tag; 300c948b5daSDeren Wu __le16 len; 301c948b5daSDeren Wu 302c948b5daSDeren Wu u8 match_num; 303c948b5daSDeren Wu u8 rsv[3]; 304c948b5daSDeren Wu 305c948b5daSDeren Wu struct mt76_connac_mcu_scan_match match[MT76_CONNAC_MAX_SCAN_MATCH]; 306c948b5daSDeren Wu }; 307c948b5daSDeren Wu 308c948b5daSDeren Wu struct scan_sched_enable { 309c948b5daSDeren Wu __le16 tag; 310c948b5daSDeren Wu __le16 len; 311c948b5daSDeren Wu 312c948b5daSDeren Wu u8 active; 313c948b5daSDeren Wu u8 rsv[3]; 314c948b5daSDeren Wu }; 315c948b5daSDeren Wu 316c948b5daSDeren Wu struct mbmc_set_req { 317c948b5daSDeren Wu u8 pad[4]; 318c948b5daSDeren Wu u8 data[]; 319c948b5daSDeren Wu } __packed; 320c948b5daSDeren Wu 321c948b5daSDeren Wu struct mbmc_conf_tlv { 322c948b5daSDeren Wu __le16 tag; 323c948b5daSDeren Wu __le16 len; 324c948b5daSDeren Wu 325c948b5daSDeren Wu u8 mbmc_en; 326c948b5daSDeren Wu u8 band; 327c948b5daSDeren Wu u8 pad[2]; 328c948b5daSDeren Wu } __packed; 329c948b5daSDeren Wu 330c948b5daSDeren Wu struct edca { 331c948b5daSDeren Wu __le16 tag; 332c948b5daSDeren Wu __le16 len; 333c948b5daSDeren Wu 334c948b5daSDeren Wu u8 queue; 335c948b5daSDeren Wu u8 set; 336c948b5daSDeren Wu u8 cw_min; 337c948b5daSDeren Wu u8 cw_max; 338c948b5daSDeren Wu __le16 txop; 339c948b5daSDeren Wu u8 aifs; 340c948b5daSDeren Wu u8 __rsv; 341c948b5daSDeren Wu }; 342c948b5daSDeren Wu 343c948b5daSDeren Wu struct bss_req_hdr { 344c948b5daSDeren Wu u8 bss_idx; 345c948b5daSDeren Wu u8 __rsv[3]; 346c948b5daSDeren Wu } __packed; 347c948b5daSDeren Wu 348c948b5daSDeren Wu struct bss_rate_tlv { 349c948b5daSDeren Wu __le16 tag; 350c948b5daSDeren Wu __le16 len; 351243cecc8Srong.yan u8 __rsv1[2]; 352243cecc8Srong.yan __le16 basic_rate; 353c948b5daSDeren Wu __le16 bc_trans; 354c948b5daSDeren Wu __le16 mc_trans; 355c948b5daSDeren Wu u8 short_preamble; 356c948b5daSDeren Wu u8 bc_fixed_rate; 357c948b5daSDeren Wu u8 mc_fixed_rate; 358c948b5daSDeren Wu u8 __rsv2; 359c948b5daSDeren Wu } __packed; 360c948b5daSDeren Wu 361c948b5daSDeren Wu struct bss_mld_tlv { 362c948b5daSDeren Wu __le16 tag; 363c948b5daSDeren Wu __le16 len; 364c948b5daSDeren Wu u8 group_mld_id; 365c948b5daSDeren Wu u8 own_mld_id; 366c948b5daSDeren Wu u8 mac_addr[ETH_ALEN]; 367c948b5daSDeren Wu u8 remap_idx; 368c948b5daSDeren Wu u8 link_id; 369c948b5daSDeren Wu u8 __rsv[2]; 370c948b5daSDeren Wu } __packed; 371c948b5daSDeren Wu 372c948b5daSDeren Wu struct sta_rec_ba_uni { 373c948b5daSDeren Wu __le16 tag; 374c948b5daSDeren Wu __le16 len; 375c948b5daSDeren Wu u8 tid; 376c948b5daSDeren Wu u8 ba_type; 377c948b5daSDeren Wu u8 amsdu; 378c948b5daSDeren Wu u8 ba_en; 379c948b5daSDeren Wu __le16 ssn; 380c948b5daSDeren Wu __le16 winsize; 381c948b5daSDeren Wu u8 ba_rdd_rro; 382c948b5daSDeren Wu u8 __rsv[3]; 383c948b5daSDeren Wu } __packed; 384c948b5daSDeren Wu 385c948b5daSDeren Wu struct sta_rec_eht { 386c948b5daSDeren Wu __le16 tag; 387c948b5daSDeren Wu __le16 len; 388c948b5daSDeren Wu u8 tid_bitmap; 389c948b5daSDeren Wu u8 _rsv; 390c948b5daSDeren Wu __le16 mac_cap; 391c948b5daSDeren Wu __le64 phy_cap; 392c948b5daSDeren Wu __le64 phy_cap_ext; 393c948b5daSDeren Wu u8 mcs_map_bw20[4]; 394c948b5daSDeren Wu u8 mcs_map_bw80[3]; 395c948b5daSDeren Wu u8 mcs_map_bw160[3]; 396c948b5daSDeren Wu u8 mcs_map_bw320[3]; 397c948b5daSDeren Wu u8 _rsv2[3]; 398c948b5daSDeren Wu } __packed; 399c948b5daSDeren Wu 400c948b5daSDeren Wu struct sta_rec_sec_uni { 401c948b5daSDeren Wu __le16 tag; 402c948b5daSDeren Wu __le16 len; 403c948b5daSDeren Wu u8 add; 40447916693SMing Yen Hsieh u8 tx_key; 40547916693SMing Yen Hsieh u8 key_type; 40647916693SMing Yen Hsieh u8 is_authenticator; 40747916693SMing Yen Hsieh u8 peer_addr[6]; 40847916693SMing Yen Hsieh u8 bss_idx; 40947916693SMing Yen Hsieh u8 cipher_id; 41047916693SMing Yen Hsieh u8 key_id; 41147916693SMing Yen Hsieh u8 key_len; 41247916693SMing Yen Hsieh u8 wlan_idx; 41347916693SMing Yen Hsieh u8 mgmt_prot; 41447916693SMing Yen Hsieh u8 key[32]; 41547916693SMing Yen Hsieh u8 key_rsc[16]; 416c948b5daSDeren Wu } __packed; 417c948b5daSDeren Wu 418c948b5daSDeren Wu struct sta_rec_hdr_trans { 419c948b5daSDeren Wu __le16 tag; 420c948b5daSDeren Wu __le16 len; 421c948b5daSDeren Wu u8 from_ds; 422c948b5daSDeren Wu u8 to_ds; 423c948b5daSDeren Wu u8 dis_rx_hdr_tran; 424c948b5daSDeren Wu u8 rsv; 425c948b5daSDeren Wu } __packed; 426c948b5daSDeren Wu 427c948b5daSDeren Wu struct sta_rec_mld { 428c948b5daSDeren Wu __le16 tag; 429c948b5daSDeren Wu __le16 len; 430c948b5daSDeren Wu u8 mac_addr[ETH_ALEN]; 431c948b5daSDeren Wu __le16 primary_id; 432c948b5daSDeren Wu __le16 secondary_id; 433c948b5daSDeren Wu __le16 wlan_id; 434c948b5daSDeren Wu u8 link_num; 435c948b5daSDeren Wu u8 rsv[3]; 436c948b5daSDeren Wu struct { 437c948b5daSDeren Wu __le16 wlan_id; 438c948b5daSDeren Wu u8 bss_idx; 439c948b5daSDeren Wu u8 rsv; 440c948b5daSDeren Wu } __packed link[2]; 441c948b5daSDeren Wu } __packed; 442c948b5daSDeren Wu 4438536ef0aSMing Yen Hsieh struct bss_ifs_time_tlv { 4448536ef0aSMing Yen Hsieh __le16 tag; 4458536ef0aSMing Yen Hsieh __le16 len; 4468536ef0aSMing Yen Hsieh u8 slot_valid; 4478536ef0aSMing Yen Hsieh u8 sifs_valid; 4488536ef0aSMing Yen Hsieh u8 rifs_valid; 4498536ef0aSMing Yen Hsieh u8 eifs_valid; 4508536ef0aSMing Yen Hsieh __le16 slot_time; 4518536ef0aSMing Yen Hsieh __le16 sifs_time; 4528536ef0aSMing Yen Hsieh __le16 rifs_time; 4538536ef0aSMing Yen Hsieh __le16 eifs_time; 4548536ef0aSMing Yen Hsieh u8 eifs_cck_valid; 4558536ef0aSMing Yen Hsieh u8 rsv; 4568536ef0aSMing Yen Hsieh __le16 eifs_cck_time; 4578536ef0aSMing Yen Hsieh } __packed; 4588536ef0aSMing Yen Hsieh 459ca64503aSSean Wang struct bss_rlm_tlv { 460ca64503aSSean Wang __le16 tag; 461ca64503aSSean Wang __le16 len; 462ca64503aSSean Wang u8 control_channel; 463ca64503aSSean Wang u8 center_chan; 464ca64503aSSean Wang u8 center_chan2; 465ca64503aSSean Wang u8 bw; 466ca64503aSSean Wang u8 tx_streams; 467ca64503aSSean Wang u8 rx_streams; 468ca64503aSSean Wang u8 ht_op_info; 469ca64503aSSean Wang u8 sco; 470ca64503aSSean Wang u8 band; 471ca64503aSSean Wang u8 pad[3]; 472ca64503aSSean Wang } __packed; 473ca64503aSSean Wang 474c948b5daSDeren Wu #define MT7925_STA_UPDATE_MAX_SIZE (sizeof(struct sta_req_hdr) + \ 475c948b5daSDeren Wu sizeof(struct sta_rec_basic) + \ 476c948b5daSDeren Wu sizeof(struct sta_rec_bf) + \ 477c948b5daSDeren Wu sizeof(struct sta_rec_ht) + \ 478c948b5daSDeren Wu sizeof(struct sta_rec_he_v2) + \ 479c948b5daSDeren Wu sizeof(struct sta_rec_ba_uni) + \ 480c948b5daSDeren Wu sizeof(struct sta_rec_vht) + \ 481c948b5daSDeren Wu sizeof(struct sta_rec_uapsd) + \ 482c948b5daSDeren Wu sizeof(struct sta_rec_amsdu) + \ 483c948b5daSDeren Wu sizeof(struct sta_rec_bfee) + \ 484c948b5daSDeren Wu sizeof(struct sta_rec_phy) + \ 485c948b5daSDeren Wu sizeof(struct sta_rec_ra) + \ 48647916693SMing Yen Hsieh sizeof(struct sta_rec_sec_uni) + \ 487c948b5daSDeren Wu sizeof(struct sta_rec_ra_fixed) + \ 488c948b5daSDeren Wu sizeof(struct sta_rec_he_6g_capa) + \ 489c948b5daSDeren Wu sizeof(struct sta_rec_eht) + \ 490c948b5daSDeren Wu sizeof(struct sta_rec_hdr_trans) + \ 491c948b5daSDeren Wu sizeof(struct sta_rec_mld) + \ 492c948b5daSDeren Wu sizeof(struct tlv)) 493c948b5daSDeren Wu 494c948b5daSDeren Wu #define MT7925_BSS_UPDATE_MAX_SIZE (sizeof(struct bss_req_hdr) + \ 495c948b5daSDeren Wu sizeof(struct mt76_connac_bss_basic_tlv) + \ 496c948b5daSDeren Wu sizeof(struct mt76_connac_bss_qos_tlv) + \ 497c948b5daSDeren Wu sizeof(struct bss_rate_tlv) + \ 498c948b5daSDeren Wu sizeof(struct bss_mld_tlv) + \ 499c948b5daSDeren Wu sizeof(struct bss_info_uni_he) + \ 500c948b5daSDeren Wu sizeof(struct bss_info_uni_bss_color) + \ 5018536ef0aSMing Yen Hsieh sizeof(struct bss_ifs_time_tlv) + \ 502ca64503aSSean Wang sizeof(struct bss_rlm_tlv) + \ 503c948b5daSDeren Wu sizeof(struct tlv)) 504c948b5daSDeren Wu 505c948b5daSDeren Wu #define MT_CONNAC3_SKU_POWER_LIMIT 449 506c948b5daSDeren Wu struct mt7925_sku_tlv { 507c948b5daSDeren Wu u8 channel; 508c948b5daSDeren Wu s8 pwr_limit[MT_CONNAC3_SKU_POWER_LIMIT]; 509c948b5daSDeren Wu } __packed; 510c948b5daSDeren Wu 511c948b5daSDeren Wu struct mt7925_tx_power_limit_tlv { 512c948b5daSDeren Wu u8 rsv[4]; 513c948b5daSDeren Wu 514c948b5daSDeren Wu __le16 tag; 515c948b5daSDeren Wu __le16 len; 516c948b5daSDeren Wu 517c948b5daSDeren Wu /* DW0 - common info*/ 518c948b5daSDeren Wu u8 ver; 519c948b5daSDeren Wu u8 pad0; 520c948b5daSDeren Wu __le16 rsv1; 521c948b5daSDeren Wu /* DW1 - cmd hint */ 522c948b5daSDeren Wu u8 n_chan; /* # channel */ 523c948b5daSDeren Wu u8 band; /* 2.4GHz - 5GHz - 6GHz */ 524c948b5daSDeren Wu u8 last_msg; 525c948b5daSDeren Wu u8 limit_type; 526c948b5daSDeren Wu /* DW3 */ 527c948b5daSDeren Wu u8 alpha2[4]; /* regulatory_request.alpha2 */ 528c948b5daSDeren Wu u8 pad2[32]; 529c948b5daSDeren Wu 530c948b5daSDeren Wu u8 data[]; 531c948b5daSDeren Wu } __packed; 532c948b5daSDeren Wu 533c948b5daSDeren Wu struct mt7925_arpns_tlv { 534c948b5daSDeren Wu __le16 tag; 535c948b5daSDeren Wu __le16 len; 536c948b5daSDeren Wu 537c948b5daSDeren Wu u8 enable; 538c948b5daSDeren Wu u8 ips_num; 539c948b5daSDeren Wu u8 rsv[2]; 540c948b5daSDeren Wu } __packed; 541c948b5daSDeren Wu 542c948b5daSDeren Wu struct mt7925_wow_pattern_tlv { 543c948b5daSDeren Wu __le16 tag; 544c948b5daSDeren Wu __le16 len; 545c948b5daSDeren Wu u8 bss_idx; 546c948b5daSDeren Wu u8 index; /* pattern index */ 547c948b5daSDeren Wu u8 enable; /* 0: disable 548c948b5daSDeren Wu * 1: enable 549c948b5daSDeren Wu */ 550c948b5daSDeren Wu u8 data_len; /* pattern length */ 551c948b5daSDeren Wu u8 offset; 552c948b5daSDeren Wu u8 mask[MT76_CONNAC_WOW_MASK_MAX_LEN]; 553c948b5daSDeren Wu u8 pattern[MT76_CONNAC_WOW_PATTEN_MAX_LEN]; 554fa46bd62SMing Yen Hsieh u8 rsv[7]; 555c948b5daSDeren Wu } __packed; 556c948b5daSDeren Wu 55747916693SMing Yen Hsieh static inline enum connac3_mcu_cipher_type 55847916693SMing Yen Hsieh mt7925_mcu_get_cipher(int cipher) 55947916693SMing Yen Hsieh { 56047916693SMing Yen Hsieh switch (cipher) { 56147916693SMing Yen Hsieh case WLAN_CIPHER_SUITE_WEP40: 56247916693SMing Yen Hsieh return CONNAC3_CIPHER_WEP40; 56347916693SMing Yen Hsieh case WLAN_CIPHER_SUITE_WEP104: 56447916693SMing Yen Hsieh return CONNAC3_CIPHER_WEP104; 56547916693SMing Yen Hsieh case WLAN_CIPHER_SUITE_TKIP: 56647916693SMing Yen Hsieh return CONNAC3_CIPHER_TKIP; 56747916693SMing Yen Hsieh case WLAN_CIPHER_SUITE_AES_CMAC: 56847916693SMing Yen Hsieh return CONNAC3_CIPHER_BIP_CMAC_128; 56947916693SMing Yen Hsieh case WLAN_CIPHER_SUITE_CCMP: 57047916693SMing Yen Hsieh return CONNAC3_CIPHER_AES_CCMP; 57147916693SMing Yen Hsieh case WLAN_CIPHER_SUITE_CCMP_256: 57247916693SMing Yen Hsieh return CONNAC3_CIPHER_CCMP_256; 57347916693SMing Yen Hsieh case WLAN_CIPHER_SUITE_GCMP: 57447916693SMing Yen Hsieh return CONNAC3_CIPHER_GCMP; 57547916693SMing Yen Hsieh case WLAN_CIPHER_SUITE_GCMP_256: 57647916693SMing Yen Hsieh return CONNAC3_CIPHER_GCMP_256; 57747916693SMing Yen Hsieh case WLAN_CIPHER_SUITE_SMS4: 57847916693SMing Yen Hsieh return CONNAC3_CIPHER_WAPI; 57947916693SMing Yen Hsieh default: 58047916693SMing Yen Hsieh return CONNAC3_CIPHER_NONE; 58147916693SMing Yen Hsieh } 58247916693SMing Yen Hsieh } 58347916693SMing Yen Hsieh 584c948b5daSDeren Wu int mt7925_mcu_set_dbdc(struct mt76_phy *phy); 585c948b5daSDeren Wu int mt7925_mcu_hw_scan(struct mt76_phy *phy, struct ieee80211_vif *vif, 586c948b5daSDeren Wu struct ieee80211_scan_request *scan_req); 587c948b5daSDeren Wu int mt7925_mcu_cancel_hw_scan(struct mt76_phy *phy, 588c948b5daSDeren Wu struct ieee80211_vif *vif); 589c948b5daSDeren Wu int mt7925_mcu_sched_scan_req(struct mt76_phy *phy, 590c948b5daSDeren Wu struct ieee80211_vif *vif, 591c948b5daSDeren Wu struct cfg80211_sched_scan_request *sreq); 592c948b5daSDeren Wu int mt7925_mcu_sched_scan_enable(struct mt76_phy *phy, 593c948b5daSDeren Wu struct ieee80211_vif *vif, 594c948b5daSDeren Wu bool enable); 595c948b5daSDeren Wu int mt7925_mcu_add_bss_info(struct mt792x_phy *phy, 596c948b5daSDeren Wu struct ieee80211_chanctx_conf *ctx, 597fa5f4446SSean Wang struct ieee80211_bss_conf *link_conf, 598c948b5daSDeren Wu struct ieee80211_sta *sta, 599c948b5daSDeren Wu int enable); 6008536ef0aSMing Yen Hsieh int mt7925_mcu_set_timing(struct mt792x_phy *phy, 601b8b04b66SSean Wang struct ieee80211_bss_conf *link_conf); 602c948b5daSDeren Wu int mt7925_mcu_set_deep_sleep(struct mt792x_dev *dev, bool enable); 603c948b5daSDeren Wu int mt7925_mcu_set_channel_domain(struct mt76_phy *phy); 604c948b5daSDeren Wu int mt7925_mcu_set_radio_en(struct mt792x_phy *phy, bool enable); 605c948b5daSDeren Wu int mt7925_mcu_set_chctx(struct mt76_phy *phy, struct mt76_vif *mvif, 606c948b5daSDeren Wu struct ieee80211_chanctx_conf *ctx); 607c948b5daSDeren Wu int mt7925_mcu_set_rate_txpower(struct mt76_phy *phy); 608c948b5daSDeren Wu int mt7925_mcu_update_arp_filter(struct mt76_dev *dev, 60943626f0eSDeren Wu struct mt76_vif *vif); 610c948b5daSDeren Wu #endif 611