162306a36Sopenharmony_ci/* SPDX-License-Identifier: ISC */
262306a36Sopenharmony_ci/* Copyright (C) 2020 MediaTek Inc. */
362306a36Sopenharmony_ci
462306a36Sopenharmony_ci#ifndef __MT7921_H
562306a36Sopenharmony_ci#define __MT7921_H
662306a36Sopenharmony_ci
762306a36Sopenharmony_ci#include "../mt792x.h"
862306a36Sopenharmony_ci#include "regs.h"
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ci#define MT7921_TX_RING_SIZE		2048
1162306a36Sopenharmony_ci#define MT7921_TX_MCU_RING_SIZE		256
1262306a36Sopenharmony_ci#define MT7921_TX_FWDL_RING_SIZE	128
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_ci#define MT7921_RX_RING_SIZE		1536
1562306a36Sopenharmony_ci#define MT7921_RX_MCU_RING_SIZE		512
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_ci#define MT7921_EEPROM_SIZE		3584
1862306a36Sopenharmony_ci#define MT7921_TOKEN_SIZE		8192
1962306a36Sopenharmony_ci
2062306a36Sopenharmony_ci#define MT7921_EEPROM_BLOCK_SIZE	16
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_ci#define MT7921_SKU_RATE_NUM		161
2362306a36Sopenharmony_ci#define MT7921_SKU_MAX_DELTA_IDX	MT7921_SKU_RATE_NUM
2462306a36Sopenharmony_ci#define MT7921_SKU_TABLE_SIZE		(MT7921_SKU_RATE_NUM + 1)
2562306a36Sopenharmony_ci
2662306a36Sopenharmony_ci#define MT7921_SDIO_HDR_TX_BYTES	GENMASK(15, 0)
2762306a36Sopenharmony_ci#define MT7921_SDIO_HDR_PKT_TYPE	GENMASK(17, 16)
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_ci#define MCU_UNI_EVENT_ROC  0x27
3062306a36Sopenharmony_ci
3162306a36Sopenharmony_cienum {
3262306a36Sopenharmony_ci	UNI_ROC_ACQUIRE,
3362306a36Sopenharmony_ci	UNI_ROC_ABORT,
3462306a36Sopenharmony_ci	UNI_ROC_NUM
3562306a36Sopenharmony_ci};
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_cienum mt7921_roc_req {
3862306a36Sopenharmony_ci	MT7921_ROC_REQ_JOIN,
3962306a36Sopenharmony_ci	MT7921_ROC_REQ_ROC,
4062306a36Sopenharmony_ci	MT7921_ROC_REQ_NUM
4162306a36Sopenharmony_ci};
4262306a36Sopenharmony_ci
4362306a36Sopenharmony_cienum {
4462306a36Sopenharmony_ci	UNI_EVENT_ROC_GRANT = 0,
4562306a36Sopenharmony_ci	UNI_EVENT_ROC_TAG_NUM
4662306a36Sopenharmony_ci};
4762306a36Sopenharmony_ci
4862306a36Sopenharmony_cistruct mt7921_realease_info {
4962306a36Sopenharmony_ci	__le16 len;
5062306a36Sopenharmony_ci	u8 pad_len;
5162306a36Sopenharmony_ci	u8 tag;
5262306a36Sopenharmony_ci} __packed;
5362306a36Sopenharmony_ci
5462306a36Sopenharmony_cistruct mt7921_fw_features {
5562306a36Sopenharmony_ci	u8 segment;
5662306a36Sopenharmony_ci	u8 data;
5762306a36Sopenharmony_ci	u8 rsv[14];
5862306a36Sopenharmony_ci} __packed;
5962306a36Sopenharmony_ci
6062306a36Sopenharmony_cistruct mt7921_roc_grant_tlv {
6162306a36Sopenharmony_ci	__le16 tag;
6262306a36Sopenharmony_ci	__le16 len;
6362306a36Sopenharmony_ci	u8 bss_idx;
6462306a36Sopenharmony_ci	u8 tokenid;
6562306a36Sopenharmony_ci	u8 status;
6662306a36Sopenharmony_ci	u8 primarychannel;
6762306a36Sopenharmony_ci	u8 rfsco;
6862306a36Sopenharmony_ci	u8 rfband;
6962306a36Sopenharmony_ci	u8 channelwidth;
7062306a36Sopenharmony_ci	u8 centerfreqseg1;
7162306a36Sopenharmony_ci	u8 centerfreqseg2;
7262306a36Sopenharmony_ci	u8 reqtype;
7362306a36Sopenharmony_ci	u8 dbdcband;
7462306a36Sopenharmony_ci	u8 rsv[1];
7562306a36Sopenharmony_ci	__le32 max_interval;
7662306a36Sopenharmony_ci} __packed;
7762306a36Sopenharmony_ci
7862306a36Sopenharmony_cienum mt7921_sdio_pkt_type {
7962306a36Sopenharmony_ci	MT7921_SDIO_TXD,
8062306a36Sopenharmony_ci	MT7921_SDIO_DATA,
8162306a36Sopenharmony_ci	MT7921_SDIO_CMD,
8262306a36Sopenharmony_ci	MT7921_SDIO_FWDL,
8362306a36Sopenharmony_ci};
8462306a36Sopenharmony_ci
8562306a36Sopenharmony_cistruct mt7921_sdio_intr {
8662306a36Sopenharmony_ci	u32 isr;
8762306a36Sopenharmony_ci	struct {
8862306a36Sopenharmony_ci		u32 wtqcr[16];
8962306a36Sopenharmony_ci	} tx;
9062306a36Sopenharmony_ci	struct {
9162306a36Sopenharmony_ci		u16 num[2];
9262306a36Sopenharmony_ci		u16 len0[16];
9362306a36Sopenharmony_ci		u16 len1[128];
9462306a36Sopenharmony_ci	} rx;
9562306a36Sopenharmony_ci	u32 rec_mb[2];
9662306a36Sopenharmony_ci} __packed;
9762306a36Sopenharmony_ci
9862306a36Sopenharmony_ci#define to_rssi(field, rxv)		((FIELD_GET(field, rxv) - 220) / 2)
9962306a36Sopenharmony_ci#define to_rcpi(rssi)			(2 * (rssi) + 220)
10062306a36Sopenharmony_ci
10162306a36Sopenharmony_cienum mt7921_txq_id {
10262306a36Sopenharmony_ci	MT7921_TXQ_BAND0,
10362306a36Sopenharmony_ci	MT7921_TXQ_BAND1,
10462306a36Sopenharmony_ci	MT7921_TXQ_FWDL = 16,
10562306a36Sopenharmony_ci	MT7921_TXQ_MCU_WM,
10662306a36Sopenharmony_ci};
10762306a36Sopenharmony_ci
10862306a36Sopenharmony_cienum mt7921_rxq_id {
10962306a36Sopenharmony_ci	MT7921_RXQ_BAND0 = 0,
11062306a36Sopenharmony_ci	MT7921_RXQ_BAND1,
11162306a36Sopenharmony_ci	MT7921_RXQ_MCU_WM = 0,
11262306a36Sopenharmony_ci};
11362306a36Sopenharmony_ci
11462306a36Sopenharmony_cienum {
11562306a36Sopenharmony_ci	MT7921_CLC_POWER,
11662306a36Sopenharmony_ci	MT7921_CLC_CHAN,
11762306a36Sopenharmony_ci	MT7921_CLC_MAX_NUM,
11862306a36Sopenharmony_ci};
11962306a36Sopenharmony_ci
12062306a36Sopenharmony_cistruct mt7921_clc_rule {
12162306a36Sopenharmony_ci	u8 alpha2[2];
12262306a36Sopenharmony_ci	u8 type[2];
12362306a36Sopenharmony_ci	__le16 len;
12462306a36Sopenharmony_ci	u8 data[];
12562306a36Sopenharmony_ci} __packed;
12662306a36Sopenharmony_ci
12762306a36Sopenharmony_cistruct mt7921_clc {
12862306a36Sopenharmony_ci	__le32 len;
12962306a36Sopenharmony_ci	u8 idx;
13062306a36Sopenharmony_ci	u8 ver;
13162306a36Sopenharmony_ci	u8 nr_country;
13262306a36Sopenharmony_ci	u8 type;
13362306a36Sopenharmony_ci	u8 rsv[8];
13462306a36Sopenharmony_ci	u8 data[];
13562306a36Sopenharmony_ci} __packed;
13662306a36Sopenharmony_ci
13762306a36Sopenharmony_cienum mt7921_eeprom_field {
13862306a36Sopenharmony_ci	MT_EE_CHIP_ID =		0x000,
13962306a36Sopenharmony_ci	MT_EE_VERSION =		0x002,
14062306a36Sopenharmony_ci	MT_EE_MAC_ADDR =	0x004,
14162306a36Sopenharmony_ci	MT_EE_WIFI_CONF =	0x07c,
14262306a36Sopenharmony_ci	MT_EE_HW_TYPE =		0x55b,
14362306a36Sopenharmony_ci	__MT_EE_MAX =		0x9ff
14462306a36Sopenharmony_ci};
14562306a36Sopenharmony_ci
14662306a36Sopenharmony_ci#define MT_EE_HW_TYPE_ENCAP			BIT(0)
14762306a36Sopenharmony_ci
14862306a36Sopenharmony_cienum {
14962306a36Sopenharmony_ci	TXPWR_USER,
15062306a36Sopenharmony_ci	TXPWR_EEPROM,
15162306a36Sopenharmony_ci	TXPWR_MAC,
15262306a36Sopenharmony_ci	TXPWR_MAX_NUM,
15362306a36Sopenharmony_ci};
15462306a36Sopenharmony_ci
15562306a36Sopenharmony_cistruct mt7921_txpwr {
15662306a36Sopenharmony_ci	u8 ch;
15762306a36Sopenharmony_ci	u8 rsv[3];
15862306a36Sopenharmony_ci	struct {
15962306a36Sopenharmony_ci		u8 ch;
16062306a36Sopenharmony_ci		u8 cck[4];
16162306a36Sopenharmony_ci		u8 ofdm[8];
16262306a36Sopenharmony_ci		u8 ht20[8];
16362306a36Sopenharmony_ci		u8 ht40[9];
16462306a36Sopenharmony_ci		u8 vht20[12];
16562306a36Sopenharmony_ci		u8 vht40[12];
16662306a36Sopenharmony_ci		u8 vht80[12];
16762306a36Sopenharmony_ci		u8 vht160[12];
16862306a36Sopenharmony_ci		u8 he26[12];
16962306a36Sopenharmony_ci		u8 he52[12];
17062306a36Sopenharmony_ci		u8 he106[12];
17162306a36Sopenharmony_ci		u8 he242[12];
17262306a36Sopenharmony_ci		u8 he484[12];
17362306a36Sopenharmony_ci		u8 he996[12];
17462306a36Sopenharmony_ci		u8 he996x2[12];
17562306a36Sopenharmony_ci	} data[TXPWR_MAX_NUM];
17662306a36Sopenharmony_ci};
17762306a36Sopenharmony_ci
17862306a36Sopenharmony_ciextern const struct ieee80211_ops mt7921_ops;
17962306a36Sopenharmony_ci
18062306a36Sopenharmony_ciu32 mt7921_reg_map(struct mt792x_dev *dev, u32 addr);
18162306a36Sopenharmony_ci
18262306a36Sopenharmony_ciint __mt7921_start(struct mt792x_phy *phy);
18362306a36Sopenharmony_ciint mt7921_register_device(struct mt792x_dev *dev);
18462306a36Sopenharmony_civoid mt7921_unregister_device(struct mt792x_dev *dev);
18562306a36Sopenharmony_ciint mt7921_run_firmware(struct mt792x_dev *dev);
18662306a36Sopenharmony_ciint mt7921_mcu_set_bss_pm(struct mt792x_dev *dev, struct ieee80211_vif *vif,
18762306a36Sopenharmony_ci			  bool enable);
18862306a36Sopenharmony_ciint mt7921_mcu_sta_update(struct mt792x_dev *dev, struct ieee80211_sta *sta,
18962306a36Sopenharmony_ci			  struct ieee80211_vif *vif, bool enable,
19062306a36Sopenharmony_ci			  enum mt76_sta_info_state state);
19162306a36Sopenharmony_ciint mt7921_mcu_set_chan_info(struct mt792x_phy *phy, int cmd);
19262306a36Sopenharmony_ciint mt7921_mcu_set_tx(struct mt792x_dev *dev, struct ieee80211_vif *vif);
19362306a36Sopenharmony_ciint mt7921_mcu_set_eeprom(struct mt792x_dev *dev);
19462306a36Sopenharmony_ciint mt7921_mcu_get_rx_rate(struct mt792x_phy *phy, struct ieee80211_vif *vif,
19562306a36Sopenharmony_ci			   struct ieee80211_sta *sta, struct rate_info *rate);
19662306a36Sopenharmony_ciint mt7921_mcu_fw_log_2_host(struct mt792x_dev *dev, u8 ctrl);
19762306a36Sopenharmony_civoid mt7921_mcu_rx_event(struct mt792x_dev *dev, struct sk_buff *skb);
19862306a36Sopenharmony_ciint mt7921_mcu_set_rxfilter(struct mt792x_dev *dev, u32 fif,
19962306a36Sopenharmony_ci			    u8 bit_op, u32 bit_map);
20062306a36Sopenharmony_ci
20162306a36Sopenharmony_cistatic inline u32
20262306a36Sopenharmony_cimt7921_reg_map_l1(struct mt792x_dev *dev, u32 addr)
20362306a36Sopenharmony_ci{
20462306a36Sopenharmony_ci	u32 offset = FIELD_GET(MT_HIF_REMAP_L1_OFFSET, addr);
20562306a36Sopenharmony_ci	u32 base = FIELD_GET(MT_HIF_REMAP_L1_BASE, addr);
20662306a36Sopenharmony_ci
20762306a36Sopenharmony_ci	mt76_rmw_field(dev, MT_HIF_REMAP_L1, MT_HIF_REMAP_L1_MASK, base);
20862306a36Sopenharmony_ci	/* use read to push write */
20962306a36Sopenharmony_ci	mt76_rr(dev, MT_HIF_REMAP_L1);
21062306a36Sopenharmony_ci
21162306a36Sopenharmony_ci	return MT_HIF_REMAP_BASE_L1 + offset;
21262306a36Sopenharmony_ci}
21362306a36Sopenharmony_ci
21462306a36Sopenharmony_cistatic inline u32
21562306a36Sopenharmony_cimt7921_l1_rr(struct mt792x_dev *dev, u32 addr)
21662306a36Sopenharmony_ci{
21762306a36Sopenharmony_ci	return mt76_rr(dev, mt7921_reg_map_l1(dev, addr));
21862306a36Sopenharmony_ci}
21962306a36Sopenharmony_ci
22062306a36Sopenharmony_cistatic inline void
22162306a36Sopenharmony_cimt7921_l1_wr(struct mt792x_dev *dev, u32 addr, u32 val)
22262306a36Sopenharmony_ci{
22362306a36Sopenharmony_ci	mt76_wr(dev, mt7921_reg_map_l1(dev, addr), val);
22462306a36Sopenharmony_ci}
22562306a36Sopenharmony_ci
22662306a36Sopenharmony_cistatic inline u32
22762306a36Sopenharmony_cimt7921_l1_rmw(struct mt792x_dev *dev, u32 addr, u32 mask, u32 val)
22862306a36Sopenharmony_ci{
22962306a36Sopenharmony_ci	val |= mt7921_l1_rr(dev, addr) & ~mask;
23062306a36Sopenharmony_ci	mt7921_l1_wr(dev, addr, val);
23162306a36Sopenharmony_ci
23262306a36Sopenharmony_ci	return val;
23362306a36Sopenharmony_ci}
23462306a36Sopenharmony_ci
23562306a36Sopenharmony_ci#define mt7921_l1_set(dev, addr, val)	mt7921_l1_rmw(dev, addr, 0, val)
23662306a36Sopenharmony_ci#define mt7921_l1_clear(dev, addr, val)	mt7921_l1_rmw(dev, addr, val, 0)
23762306a36Sopenharmony_ci
23862306a36Sopenharmony_cistatic inline void
23962306a36Sopenharmony_cimt7921_skb_add_usb_sdio_hdr(struct mt792x_dev *dev, struct sk_buff *skb,
24062306a36Sopenharmony_ci			    int type)
24162306a36Sopenharmony_ci{
24262306a36Sopenharmony_ci	u32 hdr, len;
24362306a36Sopenharmony_ci
24462306a36Sopenharmony_ci	len = mt76_is_usb(&dev->mt76) ? skb->len : skb->len + sizeof(hdr);
24562306a36Sopenharmony_ci	hdr = FIELD_PREP(MT7921_SDIO_HDR_TX_BYTES, len) |
24662306a36Sopenharmony_ci	      FIELD_PREP(MT7921_SDIO_HDR_PKT_TYPE, type);
24762306a36Sopenharmony_ci
24862306a36Sopenharmony_ci	put_unaligned_le32(hdr, skb_push(skb, sizeof(hdr)));
24962306a36Sopenharmony_ci}
25062306a36Sopenharmony_ci
25162306a36Sopenharmony_civoid mt7921_stop(struct ieee80211_hw *hw);
25262306a36Sopenharmony_ciint mt7921_mac_init(struct mt792x_dev *dev);
25362306a36Sopenharmony_cibool mt7921_mac_wtbl_update(struct mt792x_dev *dev, int idx, u32 mask);
25462306a36Sopenharmony_ciint mt7921_mac_sta_add(struct mt76_dev *mdev, struct ieee80211_vif *vif,
25562306a36Sopenharmony_ci		       struct ieee80211_sta *sta);
25662306a36Sopenharmony_civoid mt7921_mac_sta_assoc(struct mt76_dev *mdev, struct ieee80211_vif *vif,
25762306a36Sopenharmony_ci			  struct ieee80211_sta *sta);
25862306a36Sopenharmony_civoid mt7921_mac_sta_remove(struct mt76_dev *mdev, struct ieee80211_vif *vif,
25962306a36Sopenharmony_ci			   struct ieee80211_sta *sta);
26062306a36Sopenharmony_civoid mt7921_mac_reset_work(struct work_struct *work);
26162306a36Sopenharmony_ciint mt7921e_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,
26262306a36Sopenharmony_ci			   enum mt76_txq_id qid, struct mt76_wcid *wcid,
26362306a36Sopenharmony_ci			   struct ieee80211_sta *sta,
26462306a36Sopenharmony_ci			   struct mt76_tx_info *tx_info);
26562306a36Sopenharmony_ci
26662306a36Sopenharmony_cibool mt7921_rx_check(struct mt76_dev *mdev, void *data, int len);
26762306a36Sopenharmony_civoid mt7921_queue_rx_skb(struct mt76_dev *mdev, enum mt76_rxq_id q,
26862306a36Sopenharmony_ci			 struct sk_buff *skb, u32 *info);
26962306a36Sopenharmony_civoid mt7921_stats_work(struct work_struct *work);
27062306a36Sopenharmony_civoid mt7921_set_stream_he_caps(struct mt792x_phy *phy);
27162306a36Sopenharmony_ciint mt7921_init_debugfs(struct mt792x_dev *dev);
27262306a36Sopenharmony_ci
27362306a36Sopenharmony_ciint mt7921_mcu_set_beacon_filter(struct mt792x_dev *dev,
27462306a36Sopenharmony_ci				 struct ieee80211_vif *vif,
27562306a36Sopenharmony_ci				 bool enable);
27662306a36Sopenharmony_ciint mt7921_mcu_uni_tx_ba(struct mt792x_dev *dev,
27762306a36Sopenharmony_ci			 struct ieee80211_ampdu_params *params,
27862306a36Sopenharmony_ci			 bool enable);
27962306a36Sopenharmony_ciint mt7921_mcu_uni_rx_ba(struct mt792x_dev *dev,
28062306a36Sopenharmony_ci			 struct ieee80211_ampdu_params *params,
28162306a36Sopenharmony_ci			 bool enable);
28262306a36Sopenharmony_civoid mt7921_scan_work(struct work_struct *work);
28362306a36Sopenharmony_civoid mt7921_roc_work(struct work_struct *work);
28462306a36Sopenharmony_ciint mt7921_mcu_uni_bss_ps(struct mt792x_dev *dev, struct ieee80211_vif *vif);
28562306a36Sopenharmony_civoid mt7921_coredump_work(struct work_struct *work);
28662306a36Sopenharmony_ciint mt7921_get_txpwr_info(struct mt792x_dev *dev, struct mt7921_txpwr *txpwr);
28762306a36Sopenharmony_ciint mt7921_testmode_cmd(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
28862306a36Sopenharmony_ci			void *data, int len);
28962306a36Sopenharmony_ciint mt7921_testmode_dump(struct ieee80211_hw *hw, struct sk_buff *msg,
29062306a36Sopenharmony_ci			 struct netlink_callback *cb, void *data, int len);
29162306a36Sopenharmony_ciint mt7921_mcu_parse_response(struct mt76_dev *mdev, int cmd,
29262306a36Sopenharmony_ci			      struct sk_buff *skb, int seq);
29362306a36Sopenharmony_ci
29462306a36Sopenharmony_ciint mt7921e_driver_own(struct mt792x_dev *dev);
29562306a36Sopenharmony_ciint mt7921e_mac_reset(struct mt792x_dev *dev);
29662306a36Sopenharmony_ciint mt7921e_mcu_init(struct mt792x_dev *dev);
29762306a36Sopenharmony_ciint mt7921s_wfsys_reset(struct mt792x_dev *dev);
29862306a36Sopenharmony_ciint mt7921s_mac_reset(struct mt792x_dev *dev);
29962306a36Sopenharmony_ciint mt7921s_init_reset(struct mt792x_dev *dev);
30062306a36Sopenharmony_ci
30162306a36Sopenharmony_ciint mt7921s_mcu_init(struct mt792x_dev *dev);
30262306a36Sopenharmony_ciint mt7921s_mcu_drv_pmctrl(struct mt792x_dev *dev);
30362306a36Sopenharmony_ciint mt7921s_mcu_fw_pmctrl(struct mt792x_dev *dev);
30462306a36Sopenharmony_civoid mt7921_mac_add_txs(struct mt792x_dev *dev, void *data);
30562306a36Sopenharmony_civoid mt7921_set_runtime_pm(struct mt792x_dev *dev);
30662306a36Sopenharmony_civoid mt7921_mcu_set_suspend_iter(void *priv, u8 *mac,
30762306a36Sopenharmony_ci				 struct ieee80211_vif *vif);
30862306a36Sopenharmony_civoid mt7921_set_ipv6_ns_work(struct work_struct *work);
30962306a36Sopenharmony_ci
31062306a36Sopenharmony_ciint mt7921_mcu_set_sniffer(struct mt792x_dev *dev, struct ieee80211_vif *vif,
31162306a36Sopenharmony_ci			   bool enable);
31262306a36Sopenharmony_ciint mt7921_mcu_config_sniffer(struct mt792x_vif *vif,
31362306a36Sopenharmony_ci			      struct ieee80211_chanctx_conf *ctx);
31462306a36Sopenharmony_ciint mt7921_mcu_get_temperature(struct mt792x_phy *phy);
31562306a36Sopenharmony_ci
31662306a36Sopenharmony_ciint mt7921_usb_sdio_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,
31762306a36Sopenharmony_ci				   enum mt76_txq_id qid, struct mt76_wcid *wcid,
31862306a36Sopenharmony_ci				   struct ieee80211_sta *sta,
31962306a36Sopenharmony_ci				   struct mt76_tx_info *tx_info);
32062306a36Sopenharmony_civoid mt7921_usb_sdio_tx_complete_skb(struct mt76_dev *mdev,
32162306a36Sopenharmony_ci				     struct mt76_queue_entry *e);
32262306a36Sopenharmony_cibool mt7921_usb_sdio_tx_status_data(struct mt76_dev *mdev, u8 *update);
32362306a36Sopenharmony_ci
32462306a36Sopenharmony_ci/* usb */
32562306a36Sopenharmony_ciint mt7921_mcu_uni_add_beacon_offload(struct mt792x_dev *dev,
32662306a36Sopenharmony_ci				      struct ieee80211_hw *hw,
32762306a36Sopenharmony_ci				      struct ieee80211_vif *vif,
32862306a36Sopenharmony_ci				      bool enable);
32962306a36Sopenharmony_ciint mt7921_set_tx_sar_pwr(struct ieee80211_hw *hw,
33062306a36Sopenharmony_ci			  const struct cfg80211_sar_specs *sar);
33162306a36Sopenharmony_ci
33262306a36Sopenharmony_ciint mt7921_mcu_set_clc(struct mt792x_dev *dev, u8 *alpha2,
33362306a36Sopenharmony_ci		       enum environment_cap env_cap);
33462306a36Sopenharmony_ciint mt7921_mcu_set_roc(struct mt792x_phy *phy, struct mt792x_vif *vif,
33562306a36Sopenharmony_ci		       struct ieee80211_channel *chan, int duration,
33662306a36Sopenharmony_ci		       enum mt7921_roc_req type, u8 token_id);
33762306a36Sopenharmony_ciint mt7921_mcu_abort_roc(struct mt792x_phy *phy, struct mt792x_vif *vif,
33862306a36Sopenharmony_ci			 u8 token_id);
33962306a36Sopenharmony_ci#endif
340