Path: blob/main/sys/contrib/dev/mediatek/mt76/mt7925/mcu.h
107715 views
/* SPDX-License-Identifier: BSD-3-Clause-Clear */1/* Copyright (C) 2023 MediaTek Inc. */23#ifndef __MT7925_MCU_H4#define __MT7925_MCU_H56#include "../mt76_connac_mcu.h"78/* ext event table */9enum {10MCU_EXT_EVENT_RATE_REPORT = 0x87,11};1213struct mt7925_mcu_eeprom_info {14__le32 addr;15__le32 valid;16u8 data[MT7925_EEPROM_BLOCK_SIZE];17} __packed;1819#define MT_RA_RATE_NSS GENMASK(8, 6)20#define MT_RA_RATE_MCS GENMASK(3, 0)21#define MT_RA_RATE_TX_MODE GENMASK(12, 9)22#define MT_RA_RATE_DCM_EN BIT(4)23#define MT_RA_RATE_BW GENMASK(14, 13)2425struct mt7925_mcu_rxd {26__le32 rxd[8];2728__le16 len;29__le16 pkt_type_id;3031u8 eid;32u8 seq;33u8 option;34u8 __rsv;3536u8 ext_eid;37u8 __rsv1[2];38u8 s2d_index;3940u8 tlv[];41};4243struct mt7925_mcu_uni_event {44u8 cid;45u8 pad[3];46__le32 status; /* 0: success, others: fail */47} __packed;4849enum {50MT_EBF = BIT(0), /* explicit beamforming */51MT_IBF = BIT(1) /* implicit beamforming */52};5354struct mt7925_mcu_reg_event {55__le32 reg;56__le32 val;57} __packed;5859struct mt7925_mcu_ant_id_config {60u8 ant_id[4];61} __packed;6263struct mt7925_txpwr_req {64u8 _rsv[4];65__le16 tag;66__le16 len;6768u8 format_id;69u8 catg;70u8 band_idx;71u8 _rsv1;72} __packed;7374struct mt7925_txpwr_event {75u8 rsv[4];76__le16 tag;77__le16 len;7879u8 catg;80u8 band_idx;81u8 ch_band;82u8 format; /* 0:Legacy, 1:HE */8384/* Rate power info */85struct mt7925_txpwr txpwr;8687s8 pwr_max;88s8 pwr_min;89u8 rsv1;90} __packed;9192enum {93TM_SWITCH_MODE,94TM_SET_AT_CMD,95TM_QUERY_AT_CMD,96};9798enum {99MT7925_TM_NORMAL,100MT7925_TM_TESTMODE,101MT7925_TM_ICAP,102MT7925_TM_ICAP_OVERLAP,103MT7925_TM_WIFISPECTRUM,104};105106struct mt7925_rftest_evt {107__le32 param0;108__le32 param1;109} __packed;110111enum {112UNI_CHANNEL_SWITCH,113UNI_CHANNEL_RX_PATH,114};115116enum {117UNI_CHIP_CONFIG_CHIP_CFG = 0x2,118UNI_CHIP_CONFIG_NIC_CAPA = 0x3,119};120121enum {122UNI_BAND_CONFIG_RADIO_ENABLE,123UNI_BAND_CONFIG_RTS_THRESHOLD = 0x08,124UNI_BAND_CONFIG_SET_MAC80211_RX_FILTER = 0x0C,125};126127enum {128UNI_WSYS_CONFIG_FW_LOG_CTRL,129UNI_WSYS_CONFIG_FW_DBG_CTRL,130};131132enum {133UNI_EFUSE_ACCESS = 1,134UNI_EFUSE_BUFFER_MODE,135UNI_EFUSE_FREE_BLOCK,136UNI_EFUSE_BUFFER_RD,137};138139enum {140UNI_CMD_ACCESS_REG_BASIC = 0x0,141UNI_CMD_ACCESS_RF_REG_BASIC,142};143144enum {145UNI_MBMC_SETTING,146};147148enum {149UNI_EVENT_SCAN_DONE_BASIC = 0,150UNI_EVENT_SCAN_DONE_CHNLINFO = 2,151UNI_EVENT_SCAN_DONE_NLO = 3,152};153154enum {155UNI_CMD_RSSI_MONITOR_SET = 0,156};157158enum {159UNI_EVENT_RSSI_MONITOR_INFO = 0,160};161162enum connac3_mcu_cipher_type {163CONNAC3_CIPHER_NONE = 0,164CONNAC3_CIPHER_WEP40 = 1,165CONNAC3_CIPHER_TKIP = 2,166CONNAC3_CIPHER_AES_CCMP = 4,167CONNAC3_CIPHER_WEP104 = 5,168CONNAC3_CIPHER_BIP_CMAC_128 = 6,169CONNAC3_CIPHER_WEP128 = 7,170CONNAC3_CIPHER_WAPI = 8,171CONNAC3_CIPHER_CCMP_256 = 10,172CONNAC3_CIPHER_GCMP = 11,173CONNAC3_CIPHER_GCMP_256 = 12,174};175176struct mt7925_mcu_scan_chinfo_event {177u8 nr_chan;178u8 alpha2[3];179} __packed;180181enum {182UNI_SCAN_REQ = 1,183UNI_SCAN_CANCEL = 2,184UNI_SCAN_SCHED_REQ = 3,185UNI_SCAN_SCHED_ENABLE = 4,186UNI_SCAN_SSID = 10,187UNI_SCAN_BSSID,188UNI_SCAN_CHANNEL,189UNI_SCAN_IE,190UNI_SCAN_MISC,191UNI_SCAN_SSID_MATCH_SETS,192};193194enum {195UNI_SNIFFER_ENABLE,196UNI_SNIFFER_CONFIG,197};198199#define MT7925_RNR_SCAN_MAX_BSSIDS 10200struct scan_hdr_tlv {201/* fixed field */202u8 seq_num;203u8 bss_idx;204u8 pad[2];205/* tlv */206u8 data[];207} __packed;208209struct scan_req_tlv {210__le16 tag;211__le16 len;212213u8 scan_type; /* 0: PASSIVE SCAN214* 1: ACTIVE SCAN215*/216u8 probe_req_num; /* Number of probe request for each SSID */217u8 scan_func; /* BIT(0) Enable random MAC scan218* BIT(1) Disable DBDC scan type 1~3.219* BIT(2) Use DBDC scan type 3 (dedicated one RF to scan).220*/221u8 src_mask;222__le16 channel_min_dwell_time;223__le16 channel_dwell_time; /* channel Dwell interval */224__le16 timeout_value;225__le16 probe_delay_time;226__le32 func_mask_ext;227} __packed;228229struct scan_ssid_tlv {230__le16 tag;231__le16 len;232233u8 ssid_type; /* BIT(0) wildcard SSID234* BIT(1) P2P wildcard SSID235* BIT(2) specified SSID + wildcard SSID236* BIT(2) + ssid_type_ext BIT(0) specified SSID only237*/238u8 ssids_num;239u8 is_short_ssid;240u8 pad;241struct mt76_connac_mcu_scan_ssid ssids[MT7925_RNR_SCAN_MAX_BSSIDS];242} __packed;243244struct scan_bssid_tlv {245__le16 tag;246__le16 len;247248u8 bssid[ETH_ALEN];249u8 match_ch;250u8 match_ssid_ind;251u8 rcpi;252u8 match_short_ssid_ind;253u8 pad[2];254} __packed;255256struct scan_chan_info_tlv {257__le16 tag;258__le16 len;259260u8 channel_type; /* 0: Full channels261* 1: Only 2.4GHz channels262* 2: Only 5GHz channels263* 3: P2P social channel only (channel #1, #6 and #11)264* 4: Specified channels265* Others: Reserved266*/267u8 channels_num; /* valid when channel_type is 4 */268u8 pad[2];269struct mt76_connac_mcu_scan_channel channels[64];270} __packed;271272struct scan_ie_tlv {273__le16 tag;274__le16 len;275276__le16 ies_len;277u8 band;278u8 pad;279u8 ies[];280};281282struct scan_misc_tlv {283__le16 tag;284__le16 len;285286u8 random_mac[ETH_ALEN];287u8 rsv[2];288};289290struct scan_sched_req {291__le16 tag;292__le16 len;293294u8 version;295u8 stop_on_match;296u8 intervals_num;297u8 scan_func;298__le16 intervals[MT76_CONNAC_MAX_NUM_SCHED_SCAN_INTERVAL];299};300301struct scan_sched_ssid_match_sets {302__le16 tag;303__le16 len;304305u8 match_num;306u8 rsv[3];307308struct mt76_connac_mcu_scan_match match[MT76_CONNAC_MAX_SCAN_MATCH];309};310311struct scan_sched_enable {312__le16 tag;313__le16 len;314315u8 active;316u8 rsv[3];317};318319struct mbmc_set_req {320u8 pad[4];321u8 data[];322} __packed;323324struct mbmc_conf_tlv {325__le16 tag;326__le16 len;327328u8 mbmc_en;329u8 band;330u8 pad[2];331} __packed;332333struct edca {334__le16 tag;335__le16 len;336337u8 queue;338u8 set;339u8 cw_min;340u8 cw_max;341__le16 txop;342u8 aifs;343u8 __rsv;344};345346struct bss_req_hdr {347u8 bss_idx;348u8 __rsv[3];349} __packed;350351struct bss_rate_tlv {352__le16 tag;353__le16 len;354u8 __rsv1[2];355__le16 basic_rate;356__le16 bc_trans;357__le16 mc_trans;358u8 short_preamble;359u8 bc_fixed_rate;360u8 mc_fixed_rate;361u8 __rsv2;362} __packed;363364struct bss_mld_tlv {365__le16 tag;366__le16 len;367u8 group_mld_id;368u8 own_mld_id;369u8 mac_addr[ETH_ALEN];370u8 remap_idx;371u8 link_id;372u8 eml_enable;373u8 max_link_num;374u8 hybrid_mode;375u8 __rsv[3];376} __packed;377378struct bss_eht_tlv {379__le16 tag;380__le16 len;381u8 is_eht_op_present;382u8 is_eth_dscb_present;383u8 eht_ctrl;384u8 eht_ccfs0;385u8 eht_ccfs1;386u8 pad1;387__le16 eht_dis_sub_chan_bitmap;388u8 pad2[4];389} __packed;390391struct sta_rec_ba_uni {392__le16 tag;393__le16 len;394u8 tid;395u8 ba_type;396u8 amsdu;397u8 ba_en;398__le16 ssn;399__le16 winsize;400u8 ba_rdd_rro;401u8 __rsv[3];402} __packed;403404struct sta_rec_eht {405__le16 tag;406__le16 len;407u8 tid_bitmap;408u8 _rsv;409__le16 mac_cap;410__le64 phy_cap;411__le64 phy_cap_ext;412u8 mcs_map_bw20[4];413u8 mcs_map_bw80[3];414u8 mcs_map_bw160[3];415u8 mcs_map_bw320[3];416u8 _rsv2[3];417} __packed;418419struct sta_rec_sec_uni {420__le16 tag;421__le16 len;422u8 add;423u8 tx_key;424u8 key_type;425u8 is_authenticator;426u8 peer_addr[6];427u8 bss_idx;428u8 cipher_id;429u8 key_id;430u8 key_len;431u8 wlan_idx;432u8 mgmt_prot;433u8 key[32];434u8 key_rsc[16];435} __packed;436437struct sta_rec_hdr_trans {438__le16 tag;439__le16 len;440u8 from_ds;441u8 to_ds;442u8 dis_rx_hdr_tran;443u8 rsv;444} __packed;445446struct sta_rec_mld {447__le16 tag;448__le16 len;449u8 mac_addr[ETH_ALEN];450__le16 primary_id;451__le16 secondary_id;452__le16 wlan_id;453u8 link_num;454u8 rsv[3];455struct {456__le16 wlan_id;457u8 bss_idx;458u8 rsv;459} __packed link[2];460} __packed;461462struct sta_rec_eht_mld {463__le16 tag;464__le16 len;465u8 nsep;466u8 mld_type;467u8 __rsv1[1];468u8 str_cap[3];469u8 eml_cap[3];470u8 __rsv2[3];471} __packed;472473struct bss_ifs_time_tlv {474__le16 tag;475__le16 len;476u8 slot_valid;477u8 sifs_valid;478u8 rifs_valid;479u8 eifs_valid;480__le16 slot_time;481__le16 sifs_time;482__le16 rifs_time;483__le16 eifs_time;484u8 eifs_cck_valid;485u8 rsv;486__le16 eifs_cck_time;487} __packed;488489struct bss_rlm_tlv {490__le16 tag;491__le16 len;492u8 control_channel;493u8 center_chan;494u8 center_chan2;495u8 bw;496u8 tx_streams;497u8 rx_streams;498u8 ht_op_info;499u8 sco;500u8 band;501u8 pad[3];502} __packed;503504#define MT7925_STA_UPDATE_MAX_SIZE (sizeof(struct sta_req_hdr) + \505sizeof(struct sta_rec_basic) + \506sizeof(struct sta_rec_bf) + \507sizeof(struct sta_rec_ht) + \508sizeof(struct sta_rec_he_v2) + \509sizeof(struct sta_rec_ba_uni) + \510sizeof(struct sta_rec_vht) + \511sizeof(struct sta_rec_uapsd) + \512sizeof(struct sta_rec_amsdu) + \513sizeof(struct sta_rec_bfee) + \514sizeof(struct sta_rec_phy) + \515sizeof(struct sta_rec_ra) + \516sizeof(struct sta_rec_sec_uni) + \517sizeof(struct sta_rec_ra_fixed) + \518sizeof(struct sta_rec_he_6g_capa) + \519sizeof(struct sta_rec_eht) + \520sizeof(struct sta_rec_hdr_trans) + \521sizeof(struct sta_rec_mld) + \522sizeof(struct tlv) * 2 + \523sizeof(struct sta_rec_remove))524525#define MT7925_BSS_UPDATE_MAX_SIZE (sizeof(struct bss_req_hdr) + \526sizeof(struct mt76_connac_bss_basic_tlv) + \527sizeof(struct mt76_connac_bss_qos_tlv) + \528sizeof(struct bss_rate_tlv) + \529sizeof(struct bss_mld_tlv) + \530sizeof(struct bss_info_uni_he) + \531sizeof(struct bss_info_uni_bss_color) + \532sizeof(struct bss_ifs_time_tlv) + \533sizeof(struct bss_rlm_tlv) + \534sizeof(struct tlv))535536#define MT_CONNAC3_SKU_POWER_LIMIT 449537struct mt7925_sku_tlv {538u8 channel;539s8 pwr_limit[MT_CONNAC3_SKU_POWER_LIMIT];540} __packed;541542struct mt7925_tx_power_limit_tlv {543u8 rsv[4];544545__le16 tag;546__le16 len;547548/* DW0 - common info*/549u8 ver;550u8 pad0;551__le16 rsv1;552/* DW1 - cmd hint */553u8 n_chan; /* # channel */554u8 band; /* 2.4GHz - 5GHz - 6GHz */555u8 last_msg;556u8 limit_type;557/* DW3 */558u8 alpha2[4]; /* regulatory_request.alpha2 */559u8 pad2[32];560561u8 data[];562} __packed;563564struct mt7925_arpns_tlv {565__le16 tag;566__le16 len;567568u8 enable;569u8 ips_num;570u8 rsv[2];571} __packed;572573struct mt7925_wow_pattern_tlv {574__le16 tag;575__le16 len;576u8 bss_idx;577u8 index; /* pattern index */578u8 enable; /* 0: disable579* 1: enable580*/581u8 data_len; /* pattern length */582u8 offset;583u8 mask[MT76_CONNAC_WOW_MASK_MAX_LEN];584u8 pattern[MT76_CONNAC_WOW_PATTEN_MAX_LEN];585u8 rsv[4];586};587588struct roc_acquire_tlv {589__le16 tag;590__le16 len;591u8 bss_idx;592u8 tokenid;593u8 control_channel;594u8 sco;595u8 band;596u8 bw;597u8 center_chan;598u8 center_chan2;599u8 bw_from_ap;600u8 center_chan_from_ap;601u8 center_chan2_from_ap;602u8 reqtype;603__le32 maxinterval;604u8 dbdcband;605u8 rsv[3];606} __packed;607608enum ENUM_CMD_TEST_CTRL_ACT {609CMD_TEST_CTRL_ACT_SWITCH_MODE = 0,610CMD_TEST_CTRL_ACT_SET_AT = 1,611CMD_TEST_CTRL_ACT_GET_AT = 2,612CMD_TEST_CTRL_ACT_SET_AT_ENG = 3,613CMD_TEST_CTRL_ACT_GET_AT_ENG = 4,614CMD_TEST_CTRL_ACT_NUM615};616617enum ENUM_CMD_TEST_CTRL_ACT_SWITCH_MODE_OP {618CMD_TEST_CTRL_ACT_SWITCH_MODE_NORMAL = 0,619CMD_TEST_CTRL_ACT_SWITCH_MODE_RF_TEST = 1,620CMD_TEST_CTRL_ACT_SWITCH_MODE_ICAP = 2,621CMD_TEST_CTRL_ACT_SWITCH_MODE_NUM622};623624union testmode_data {625__le32 op_mode;626__le32 channel_freq;627u8 rf_at_info[84];628};629630union testmode_evt {631__le32 op_mode;632__le32 channel_freq;633u8 rf_at_info[1024];634};635636struct uni_cmd_testmode_ctrl {637u16 tag;638u16 length;639u8 action;640u8 reserved[3];641union testmode_data data;642} __packed;643644struct mt7925_rftest_cmd {645u8 padding[4];646struct uni_cmd_testmode_ctrl ctrl;647} __packed;648649static inline enum connac3_mcu_cipher_type650mt7925_mcu_get_cipher(int cipher)651{652switch (cipher) {653case WLAN_CIPHER_SUITE_WEP40:654return CONNAC3_CIPHER_WEP40;655case WLAN_CIPHER_SUITE_WEP104:656return CONNAC3_CIPHER_WEP104;657case WLAN_CIPHER_SUITE_TKIP:658return CONNAC3_CIPHER_TKIP;659case WLAN_CIPHER_SUITE_AES_CMAC:660return CONNAC3_CIPHER_BIP_CMAC_128;661case WLAN_CIPHER_SUITE_CCMP:662return CONNAC3_CIPHER_AES_CCMP;663case WLAN_CIPHER_SUITE_CCMP_256:664return CONNAC3_CIPHER_CCMP_256;665case WLAN_CIPHER_SUITE_GCMP:666return CONNAC3_CIPHER_GCMP;667case WLAN_CIPHER_SUITE_GCMP_256:668return CONNAC3_CIPHER_GCMP_256;669case WLAN_CIPHER_SUITE_SMS4:670return CONNAC3_CIPHER_WAPI;671default:672return CONNAC3_CIPHER_NONE;673}674}675676int mt7925_mcu_set_dbdc(struct mt76_phy *phy, bool enable);677int mt7925_mcu_hw_scan(struct mt76_phy *phy, struct ieee80211_vif *vif,678struct ieee80211_scan_request *scan_req);679int mt7925_mcu_cancel_hw_scan(struct mt76_phy *phy,680struct ieee80211_vif *vif);681int mt7925_mcu_sched_scan_req(struct mt76_phy *phy,682struct ieee80211_vif *vif,683struct cfg80211_sched_scan_request *sreq,684struct ieee80211_scan_ies *ies);685int mt7925_mcu_sched_scan_enable(struct mt76_phy *phy,686struct ieee80211_vif *vif,687bool enable);688void mt7925_mcu_del_dev(struct mt76_dev *mdev,689struct ieee80211_vif *vif);690int mt7925_mcu_add_bss_info(struct mt792x_phy *phy,691struct ieee80211_chanctx_conf *ctx,692struct ieee80211_bss_conf *link_conf,693struct ieee80211_link_sta *link_sta,694int enable);695int mt7925_mcu_set_timing(struct mt792x_phy *phy,696struct ieee80211_bss_conf *link_conf);697int mt7925_mcu_set_deep_sleep(struct mt792x_dev *dev, bool enable);698int mt7925_mcu_set_thermal_protect(struct mt792x_dev *dev);699int mt7925_mcu_set_channel_domain(struct mt76_phy *phy);700int mt7925_mcu_set_radio_en(struct mt792x_phy *phy, bool enable);701int mt7925_mcu_set_chctx(struct mt76_phy *phy, struct mt76_vif_link *mvif,702struct ieee80211_bss_conf *link_conf,703struct ieee80211_chanctx_conf *ctx);704int mt7925_mcu_set_eht_pp(struct mt76_phy *phy, struct mt76_vif_link *mvif,705struct ieee80211_bss_conf *link_conf,706struct ieee80211_chanctx_conf *ctx);707int mt7925_mcu_set_rate_txpower(struct mt76_phy *phy);708int mt7925_mcu_update_arp_filter(struct mt76_dev *dev,709struct ieee80211_bss_conf *link_conf);710int711mt7925_mcu_uni_bss_bcnft(struct mt792x_dev *dev,712struct ieee80211_bss_conf *link_conf, bool enable);713#endif714715716