Path: blob/main/sys/contrib/dev/mediatek/mt76/mt7925/mt7925.h
48526 views
/* SPDX-License-Identifier: ISC */1/* Copyright (C) 2023 MediaTek Inc. */23#ifndef __MT7925_H4#define __MT7925_H56#include "../mt792x.h"7#include "regs.h"89#define MT7925_BEACON_RATES_TBL 251011#define MT7925_TX_RING_SIZE 204812#define MT7925_TX_MCU_RING_SIZE 25613#define MT7925_TX_FWDL_RING_SIZE 1281415#define MT7925_RX_RING_SIZE 153616#define MT7925_RX_MCU_RING_SIZE 5121718#define MT7925_EEPROM_SIZE 358419#define MT7925_TOKEN_SIZE 81922021#define MT7925_EEPROM_BLOCK_SIZE 162223#define MT7925_SKU_RATE_NUM 16124#define MT7925_SKU_MAX_DELTA_IDX MT7925_SKU_RATE_NUM25#define MT7925_SKU_TABLE_SIZE (MT7925_SKU_RATE_NUM + 1)2627#define MCU_UNI_EVENT_ROC 0x272829#define HIF_TRAFFIC_IDLE 0x23031enum {32UNI_EVENT_HIF_CTRL_BASIC = 0,33UNI_EVENT_HIF_CTRL_TAG_NUM34};3536struct mt7925_mcu_hif_ctrl_basic_tlv {37__le16 tag;38__le16 len;39u8 cid;40u8 pad[3];41u32 status;42u8 hif_type;43u8 hif_tx_traffic_status;44u8 hif_rx_traffic_status;45u8 hifsuspend;46u8 rsv[4];47} __packed;4849enum {50UNI_ROC_ACQUIRE,51UNI_ROC_ABORT,52UNI_ROC_SUB_LINK = 3,53UNI_ROC_NUM54};5556enum mt7925_roc_req {57MT7925_ROC_REQ_JOIN,58MT7925_ROC_REQ_ROC,59MT7925_ROC_REQ_SUB_LINK,60MT7925_ROC_REQ_MLSR_AG = 10,61MT7925_ROC_REQ_MLSR_AA,62MT7925_ROC_REQ_NUM63};6465enum {66UNI_EVENT_ROC_GRANT = 0,67UNI_EVENT_ROC_GRANT_SUB_LINK = 4,68UNI_EVENT_ROC_TAG_NUM69};7071struct mt7925_roc_grant_tlv {72__le16 tag;73__le16 len;74u8 bss_idx;75u8 tokenid;76u8 status;77u8 primarychannel;78u8 rfsco;79u8 rfband;80u8 channelwidth;81u8 centerfreqseg1;82u8 centerfreqseg2;83u8 reqtype;84u8 dbdcband;85u8 rsv[1];86__le32 max_interval;87} __packed;8889struct mt7925_beacon_loss_tlv {90__le16 tag;91__le16 len;92u8 reason;93u8 nr_btolink;94u8 pad[2];95} __packed;9697struct mt7925_uni_beacon_loss_event {98struct {99u8 bss_idx;100u8 pad[3];101} __packed hdr;102struct mt7925_beacon_loss_tlv beacon_loss;103} __packed;104105#define to_rssi(field, rxv) ((FIELD_GET(field, rxv) - 220) / 2)106#define to_rcpi(rssi) (2 * (rssi) + 220)107108enum mt7925_txq_id {109MT7925_TXQ_BAND0,110MT7925_TXQ_BAND1,111MT7925_TXQ_MCU_WM = 15,112MT7925_TXQ_FWDL,113};114115enum mt7925_rxq_id {116MT7925_RXQ_BAND0 = 2,117MT7925_RXQ_BAND1,118MT7925_RXQ_MCU_WM = 0,119MT7925_RXQ_MCU_WM2, /* for tx done */120};121122enum {123MODE_OPEN = 0,124MODE_SHARED = 1,125MODE_WPA = 3,126MODE_WPA_PSK = 4,127MODE_WPA_NONE = 5,128MODE_WPA2 = 6,129MODE_WPA2_PSK = 7,130MODE_WPA3_SAE = 11,131};132133enum {134MT7925_CLC_POWER,135MT7925_CLC_CHAN,136MT7925_CLC_MAX_NUM,137};138139struct mt7925_clc_rule_v2 {140u32 flag;141u8 alpha2[2];142u8 rsv[10];143} __packed;144145struct mt7925_clc_rule {146u8 alpha2[2];147u8 type[2];148u8 seg_idx;149u8 flag; /* UNII4~8 ctrl flag */150u8 rsv[2];151} __packed;152153struct mt7925_clc_segment {154u8 idx;155u8 rsv1[3];156u32 offset;157u32 len;158u8 rsv2[4];159} __packed;160161struct mt7925_clc_type0 {162u8 nr_country;163u8 type;164u8 nr_seg;165u8 rsv[7];166} __packed;167168struct mt7925_clc_type2 {169u8 type;170u8 rsv[9];171} __packed;172173struct mt7925_clc {174__le32 len;175u8 idx;176u8 ver;177union {178struct mt7925_clc_type0 t0;179struct mt7925_clc_type2 t2;180};181u8 data[];182} __packed;183184enum mt7925_eeprom_field {185MT_EE_CHIP_ID = 0x000,186MT_EE_VERSION = 0x002,187MT_EE_MAC_ADDR = 0x004,188MT_EE_HW_TYPE = 0xa71,189__MT_EE_MAX = 0x9ff190};191192#define MT_EE_HW_TYPE_ENCAP GENMASK(1, 0)193194enum {195TXPWR_USER,196TXPWR_EEPROM,197TXPWR_MAC,198TXPWR_MAX_NUM,199};200201struct mt7925_txpwr {202s8 cck[4][2];203s8 ofdm[8][2];204s8 ht20[8][2];205s8 ht40[9][2];206s8 vht20[12][2];207s8 vht40[12][2];208s8 vht80[12][2];209s8 vht160[12][2];210s8 he26[12][2];211s8 he52[12][2];212s8 he106[12][2];213s8 he242[12][2];214s8 he484[12][2];215s8 he996[12][2];216s8 he996x2[12][2];217s8 eht26[16][2];218s8 eht52[16][2];219s8 eht106[16][2];220s8 eht242[16][2];221s8 eht484[16][2];222s8 eht996[16][2];223s8 eht996x2[16][2];224s8 eht996x4[16][2];225s8 eht26_52[16][2];226s8 eht26_106[16][2];227s8 eht484_242[16][2];228s8 eht996_484[16][2];229s8 eht996_484_242[16][2];230s8 eht996x2_484[16][2];231s8 eht996x3[16][2];232s8 eht996x3_484[16][2];233};234235extern const struct ieee80211_ops mt7925_ops;236237int __mt7925_start(struct mt792x_phy *phy);238int mt7925_register_device(struct mt792x_dev *dev);239void mt7925_unregister_device(struct mt792x_dev *dev);240int mt7925_run_firmware(struct mt792x_dev *dev);241int mt7925_mcu_set_bss_pm(struct mt792x_dev *dev,242struct ieee80211_bss_conf *link_conf,243bool enable);244int mt7925_mcu_sta_update(struct mt792x_dev *dev,245struct ieee80211_link_sta *link_sta,246struct ieee80211_vif *vif, bool enable,247enum mt76_sta_info_state state);248int mt7925_mcu_set_chan_info(struct mt792x_phy *phy, u16 tag);249int mt7925_mcu_set_tx(struct mt792x_dev *dev, struct ieee80211_bss_conf *bss_conf);250int mt7925_mcu_set_eeprom(struct mt792x_dev *dev);251int mt7925_mcu_get_rx_rate(struct mt792x_phy *phy, struct ieee80211_vif *vif,252struct ieee80211_sta *sta, struct rate_info *rate);253int mt7925_mcu_fw_log_2_host(struct mt792x_dev *dev, u8 ctrl);254void mt7925_mcu_rx_event(struct mt792x_dev *dev, struct sk_buff *skb);255int mt7925_mcu_chip_config(struct mt792x_dev *dev, const char *cmd);256int mt7925_mcu_set_rxfilter(struct mt792x_dev *dev, u32 fif,257u8 bit_op, u32 bit_map);258259void mt7925_regd_be_ctrl(struct mt792x_dev *dev, u8 *alpha2);260void mt7925_regd_update(struct mt792x_dev *dev);261int mt7925_mac_init(struct mt792x_dev *dev);262int mt7925_mac_sta_add(struct mt76_dev *mdev, struct ieee80211_vif *vif,263struct ieee80211_sta *sta);264bool mt7925_mac_wtbl_update(struct mt792x_dev *dev, int idx, u32 mask);265int mt7925_mac_sta_event(struct mt76_dev *mdev, struct ieee80211_vif *vif,266struct ieee80211_sta *sta, enum mt76_sta_event ev);267void mt7925_mac_sta_remove(struct mt76_dev *mdev, struct ieee80211_vif *vif,268struct ieee80211_sta *sta);269void mt7925_mac_reset_work(struct work_struct *work);270int mt7925e_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,271enum mt76_txq_id qid, struct mt76_wcid *wcid,272struct ieee80211_sta *sta,273struct mt76_tx_info *tx_info);274275void mt7925_tx_token_put(struct mt792x_dev *dev);276bool mt7925_rx_check(struct mt76_dev *mdev, void *data, int len);277void mt7925_queue_rx_skb(struct mt76_dev *mdev, enum mt76_rxq_id q,278struct sk_buff *skb, u32 *info);279void mt7925_stats_work(struct work_struct *work);280void mt7925_set_stream_he_eht_caps(struct mt792x_phy *phy);281int mt7925_init_mlo_caps(struct mt792x_phy *phy);282int mt7925_init_debugfs(struct mt792x_dev *dev);283284int mt7925_mcu_set_beacon_filter(struct mt792x_dev *dev,285struct ieee80211_vif *vif,286bool enable);287int mt7925_mcu_uni_tx_ba(struct mt792x_dev *dev,288struct ieee80211_ampdu_params *params,289bool enable);290int mt7925_mcu_uni_rx_ba(struct mt792x_dev *dev,291struct ieee80211_ampdu_params *params,292bool enable);293void mt7925_mlo_pm_work(struct work_struct *work);294void mt7925_scan_work(struct work_struct *work);295void mt7925_roc_work(struct work_struct *work);296int mt7925_mcu_uni_bss_ps(struct mt792x_dev *dev,297struct ieee80211_bss_conf *link_conf);298void mt7925_coredump_work(struct work_struct *work);299int mt7925_get_txpwr_info(struct mt792x_dev *dev, u8 band_idx,300struct mt7925_txpwr *txpwr);301void mt7925_mac_set_fixed_rate_table(struct mt792x_dev *dev,302u8 tbl_idx, u16 rate_idx);303void mt7925_mac_write_txwi(struct mt76_dev *dev, __le32 *txwi,304struct sk_buff *skb, struct mt76_wcid *wcid,305struct ieee80211_key_conf *key, int pid,306enum mt76_txq_id qid, u32 changed);307void mt7925_txwi_free(struct mt792x_dev *dev, struct mt76_txwi_cache *t,308struct ieee80211_sta *sta, struct mt76_wcid *wcid,309struct list_head *free_list);310int mt7925_mcu_parse_response(struct mt76_dev *mdev, int cmd,311struct sk_buff *skb, int seq);312313int mt7925e_mac_reset(struct mt792x_dev *dev);314int mt7925e_mcu_init(struct mt792x_dev *dev);315void mt7925_mac_add_txs(struct mt792x_dev *dev, void *data);316void mt7925_set_runtime_pm(struct mt792x_dev *dev);317void mt7925_mcu_set_suspend_iter(void *priv, u8 *mac,318struct ieee80211_vif *vif);319void mt7925_connac_mcu_set_suspend_iter(void *priv, u8 *mac,320struct ieee80211_vif *vif);321void mt7925_set_ipv6_ns_work(struct work_struct *work);322323int mt7925_mcu_set_sniffer(struct mt792x_dev *dev, struct ieee80211_vif *vif,324bool enable);325int mt7925_mcu_config_sniffer(struct mt792x_vif *vif,326struct ieee80211_chanctx_conf *ctx);327int mt7925_mcu_get_temperature(struct mt792x_phy *phy);328329int mt7925_usb_sdio_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,330enum mt76_txq_id qid, struct mt76_wcid *wcid,331struct ieee80211_sta *sta,332struct mt76_tx_info *tx_info);333void mt7925_usb_sdio_tx_complete_skb(struct mt76_dev *mdev,334struct mt76_queue_entry *e);335bool mt7925_usb_sdio_tx_status_data(struct mt76_dev *mdev, u8 *update);336337int mt7925_mcu_uni_add_beacon_offload(struct mt792x_dev *dev,338struct ieee80211_hw *hw,339struct ieee80211_vif *vif,340bool enable);341int mt7925_set_tx_sar_pwr(struct ieee80211_hw *hw,342const struct cfg80211_sar_specs *sar);343344int mt7925_mcu_regval(struct mt792x_dev *dev, u32 regidx, u32 *val, bool set);345int mt7925_mcu_set_clc(struct mt792x_dev *dev, u8 *alpha2,346enum environment_cap env_cap);347int mt7925_mcu_set_mlo_roc(struct mt792x_bss_conf *mconf, u16 sel_links,348int duration, u8 token_id);349int mt7925_mcu_set_roc(struct mt792x_phy *phy, struct mt792x_bss_conf *mconf,350struct ieee80211_channel *chan, int duration,351enum mt7925_roc_req type, u8 token_id);352int mt7925_mcu_abort_roc(struct mt792x_phy *phy, struct mt792x_bss_conf *mconf,353u8 token_id);354void mt7925_roc_abort_sync(struct mt792x_dev *dev);355int mt7925_mcu_fill_message(struct mt76_dev *mdev, struct sk_buff *skb,356int cmd, int *wait_seq);357int mt7925_mcu_add_key(struct mt76_dev *dev, struct ieee80211_vif *vif,358struct mt76_connac_sta_key_conf *sta_key_conf,359struct ieee80211_key_conf *key, int mcu_cmd,360struct mt76_wcid *wcid, enum set_key_cmd cmd,361struct mt792x_sta *msta);362int mt7925_mcu_set_rts_thresh(struct mt792x_phy *phy, u32 val);363int mt7925_mcu_wtbl_update_hdr_trans(struct mt792x_dev *dev,364struct ieee80211_vif *vif,365struct ieee80211_sta *sta,366int link_id);367int mt7925_mcu_wf_rf_pin_ctrl(struct mt792x_phy *phy);368369int mt7925_testmode_cmd(struct ieee80211_hw *hw, struct ieee80211_vif *vif,370void *data, int len);371int mt7925_testmode_dump(struct ieee80211_hw *hw, struct sk_buff *msg,372struct netlink_callback *cb, void *data, int len);373374#endif375376377