/* SPDX-License-Identifier: ISC */
/* Copyright (C) 2023 MediaTek Inc. */

#ifndef __MT7925_MCU_H
#define __MT7925_MCU_H

#include "../mt76_connac_mcu.h"

/* ext event table */
enum {
	MCU_EXT_EVENT_RATE_REPORT = 0x87,
};

struct mt7925_mcu_eeprom_info {
	__le32 addr;
	__le32 valid;
	u8 data[MT7925_EEPROM_BLOCK_SIZE];
} __packed;

#define MT_RA_RATE_NSS			GENMASK(8, 6)
#define MT_RA_RATE_MCS			GENMASK(3, 0)
#define MT_RA_RATE_TX_MODE		GENMASK(12, 9)
#define MT_RA_RATE_DCM_EN		BIT(4)
#define MT_RA_RATE_BW			GENMASK(14, 13)

struct mt7925_mcu_rxd {
	__le32 rxd[8];

	__le16 len;
	__le16 pkt_type_id;

	u8 eid;
	u8 seq;
	u8 option;
	u8 __rsv;

	u8 ext_eid;
	u8 __rsv1[2];
	u8 s2d_index;

	u8 tlv[];
};

struct mt7925_mcu_uni_event {
	u8 cid;
	u8 pad[3];
	__le32 status; /* 0: success, others: fail */
} __packed;

enum {
	MT_EBF = BIT(0),	/* explicit beamforming */
	MT_IBF = BIT(1)		/* implicit beamforming */
};

struct mt7925_mcu_reg_event {
	__le32 reg;
	__le32 val;
} __packed;

struct mt7925_mcu_ant_id_config {
	u8 ant_id[4];
} __packed;

struct mt7925_txpwr_req {
	u8 _rsv[4];
	__le16 tag;
	__le16 len;

	u8 format_id;
	u8 catg;
	u8 band_idx;
	u8 _rsv1;
} __packed;

struct mt7925_txpwr_event {
	u8 rsv[4];
	__le16 tag;
	__le16 len;

	u8 catg;
	u8 band_idx;
	u8 ch_band;
	u8 format; /* 0:Legacy, 1:HE */

	/* Rate power info */
	struct mt7925_txpwr txpwr;

	s8 pwr_max;
	s8 pwr_min;
	u8 rsv1;
} __packed;

enum {
	TM_SWITCH_MODE,
	TM_SET_AT_CMD,
	TM_QUERY_AT_CMD,
};

enum {
	MT7925_TM_NORMAL,
	MT7925_TM_TESTMODE,
	MT7925_TM_ICAP,
	MT7925_TM_ICAP_OVERLAP,
	MT7925_TM_WIFISPECTRUM,
};

struct mt7925_rftest_cmd {
	u8 action;
	u8 rsv[3];
	__le32 param0;
	__le32 param1;
} __packed;

struct mt7925_rftest_evt {
	__le32 param0;
	__le32 param1;
} __packed;

enum {
	UNI_CHANNEL_SWITCH,
	UNI_CHANNEL_RX_PATH,
};

enum {
	UNI_CHIP_CONFIG_CHIP_CFG = 0x2,
	UNI_CHIP_CONFIG_NIC_CAPA = 0x3,
};

enum {
	UNI_BAND_CONFIG_RADIO_ENABLE,
	UNI_BAND_CONFIG_RTS_THRESHOLD = 0x08,
	UNI_BAND_CONFIG_SET_MAC80211_RX_FILTER = 0x0C,
};

enum {
	UNI_WSYS_CONFIG_FW_LOG_CTRL,
	UNI_WSYS_CONFIG_FW_DBG_CTRL,
};

enum {
	UNI_EFUSE_ACCESS = 1,
	UNI_EFUSE_BUFFER_MODE,
	UNI_EFUSE_FREE_BLOCK,
	UNI_EFUSE_BUFFER_RD,
};

enum {
	UNI_CMD_ACCESS_REG_BASIC = 0x0,
	UNI_CMD_ACCESS_RF_REG_BASIC,
};

enum {
	UNI_MBMC_SETTING,
};

enum {
	UNI_EVENT_SCAN_DONE_BASIC = 0,
	UNI_EVENT_SCAN_DONE_CHNLINFO = 2,
	UNI_EVENT_SCAN_DONE_NLO = 3,
};

enum connac3_mcu_cipher_type {
	CONNAC3_CIPHER_NONE = 0,
	CONNAC3_CIPHER_WEP40 = 1,
	CONNAC3_CIPHER_TKIP = 2,
	CONNAC3_CIPHER_AES_CCMP = 4,
	CONNAC3_CIPHER_WEP104 = 5,
	CONNAC3_CIPHER_BIP_CMAC_128 = 6,
	CONNAC3_CIPHER_WEP128 = 7,
	CONNAC3_CIPHER_WAPI = 8,
	CONNAC3_CIPHER_CCMP_256 = 10,
	CONNAC3_CIPHER_GCMP = 11,
	CONNAC3_CIPHER_GCMP_256 = 12,
};

struct mt7925_mcu_scan_chinfo_event {
	u8 nr_chan;
	u8 alpha2[3];
} __packed;

enum {
	UNI_SCAN_REQ = 1,
	UNI_SCAN_CANCEL = 2,
	UNI_SCAN_SCHED_REQ = 3,
	UNI_SCAN_SCHED_ENABLE = 4,
	UNI_SCAN_SSID = 10,
	UNI_SCAN_BSSID,
	UNI_SCAN_CHANNEL,
	UNI_SCAN_IE,
	UNI_SCAN_MISC,
	UNI_SCAN_SSID_MATCH_SETS,
};

enum {
	UNI_SNIFFER_ENABLE,
	UNI_SNIFFER_CONFIG,
};

struct scan_hdr_tlv {
	/* fixed field */
	u8 seq_num;
	u8 bss_idx;
	u8 pad[2];
	/* tlv */
	u8 data[];
} __packed;

struct scan_req_tlv {
	__le16 tag;
	__le16 len;

	u8 scan_type; /* 0: PASSIVE SCAN
		       * 1: ACTIVE SCAN
		       */
	u8 probe_req_num; /* Number of probe request for each SSID */
	u8 scan_func; /* BIT(0) Enable random MAC scan
		       * BIT(1) Disable DBDC scan type 1~3.
		       * BIT(2) Use DBDC scan type 3 (dedicated one RF to scan).
		       */
	u8 src_mask;
	__le16 channel_min_dwell_time;
	__le16 channel_dwell_time; /* channel Dwell interval */
	__le16 timeout_value;
	__le16 probe_delay_time;
	__le32 func_mask_ext;
};

struct scan_ssid_tlv {
	__le16 tag;
	__le16 len;

	u8 ssid_type; /* BIT(0) wildcard SSID
		       * BIT(1) P2P wildcard SSID
		       * BIT(2) specified SSID + wildcard SSID
		       * BIT(2) + ssid_type_ext BIT(0) specified SSID only
		       */
	u8 ssids_num;
	u8 pad[2];
	struct mt76_connac_mcu_scan_ssid ssids[4];
};

struct scan_bssid_tlv {
	__le16 tag;
	__le16 len;

	u8 bssid[ETH_ALEN];
	u8 match_ch;
	u8 match_ssid_ind;
	u8 rcpi;
	u8 pad[3];
};

struct scan_chan_info_tlv {
	__le16 tag;
	__le16 len;

	u8 channel_type; /* 0: Full channels
			  * 1: Only 2.4GHz channels
			  * 2: Only 5GHz channels
			  * 3: P2P social channel only (channel #1, #6 and #11)
			  * 4: Specified channels
			  * Others: Reserved
			  */
	u8 channels_num; /* valid when channel_type is 4 */
	u8 pad[2];
	struct mt76_connac_mcu_scan_channel channels[64];
};

struct scan_ie_tlv {
	__le16 tag;
	__le16 len;

	__le16 ies_len;
	u8 band;
	u8 pad;
	u8 ies[MT76_CONNAC_SCAN_IE_LEN];
};

struct scan_misc_tlv {
	__le16 tag;
	__le16 len;

	u8 random_mac[ETH_ALEN];
	u8 rsv[2];
};

struct scan_sched_req {
	__le16 tag;
	__le16 len;

	u8 version;
	u8 stop_on_match;
	u8 intervals_num;
	u8 scan_func;
	__le16 intervals[MT76_CONNAC_MAX_NUM_SCHED_SCAN_INTERVAL];
};

struct scan_sched_ssid_match_sets {
	__le16 tag;
	__le16 len;

	u8 match_num;
	u8 rsv[3];

	struct mt76_connac_mcu_scan_match match[MT76_CONNAC_MAX_SCAN_MATCH];
};

struct scan_sched_enable {
	__le16 tag;
	__le16 len;

	u8 active;
	u8 rsv[3];
};

struct mbmc_set_req {
	u8 pad[4];
	u8 data[];
} __packed;

struct mbmc_conf_tlv {
	__le16 tag;
	__le16 len;

	u8 mbmc_en;
	u8 band;
	u8 pad[2];
} __packed;

struct edca {
	__le16 tag;
	__le16 len;

	u8 queue;
	u8 set;
	u8 cw_min;
	u8 cw_max;
	__le16 txop;
	u8 aifs;
	u8 __rsv;
};

struct bss_req_hdr {
	u8 bss_idx;
	u8 __rsv[3];
} __packed;

struct bss_rate_tlv {
	__le16 tag;
	__le16 len;
	u8 __rsv1[2];
	__le16 basic_rate;
	__le16 bc_trans;
	__le16 mc_trans;
	u8 short_preamble;
	u8 bc_fixed_rate;
	u8 mc_fixed_rate;
	u8 __rsv2;
} __packed;

struct bss_mld_tlv {
	__le16 tag;
	__le16 len;
	u8 group_mld_id;
	u8 own_mld_id;
	u8 mac_addr[ETH_ALEN];
	u8 remap_idx;
	u8 link_id;
	u8 __rsv[2];
} __packed;

struct sta_rec_ba_uni {
	__le16 tag;
	__le16 len;
	u8 tid;
	u8 ba_type;
	u8 amsdu;
	u8 ba_en;
	__le16 ssn;
	__le16 winsize;
	u8 ba_rdd_rro;
	u8 __rsv[3];
} __packed;

struct sta_rec_eht {
	__le16 tag;
	__le16 len;
	u8 tid_bitmap;
	u8 _rsv;
	__le16 mac_cap;
	__le64 phy_cap;
	__le64 phy_cap_ext;
	u8 mcs_map_bw20[4];
	u8 mcs_map_bw80[3];
	u8 mcs_map_bw160[3];
	u8 mcs_map_bw320[3];
	u8 _rsv2[3];
} __packed;

struct sta_rec_sec_uni {
	__le16 tag;
	__le16 len;
	u8 add;
	u8 tx_key;
	u8 key_type;
	u8 is_authenticator;
	u8 peer_addr[6];
	u8 bss_idx;
	u8 cipher_id;
	u8 key_id;
	u8 key_len;
	u8 wlan_idx;
	u8 mgmt_prot;
	u8 key[32];
	u8 key_rsc[16];
} __packed;

struct sta_rec_hdr_trans {
	__le16 tag;
	__le16 len;
	u8 from_ds;
	u8 to_ds;
	u8 dis_rx_hdr_tran;
	u8 rsv;
} __packed;

struct sta_rec_mld {
	__le16 tag;
	__le16 len;
	u8 mac_addr[ETH_ALEN];
	__le16 primary_id;
	__le16 secondary_id;
	__le16 wlan_id;
	u8 link_num;
	u8 rsv[3];
	struct {
		__le16 wlan_id;
		u8 bss_idx;
		u8 rsv;
	} __packed link[2];
} __packed;

struct bss_ifs_time_tlv {
	__le16 tag;
	__le16 len;
	u8 slot_valid;
	u8 sifs_valid;
	u8 rifs_valid;
	u8 eifs_valid;
	__le16 slot_time;
	__le16 sifs_time;
	__le16 rifs_time;
	__le16 eifs_time;
	u8 eifs_cck_valid;
	u8 rsv;
	__le16 eifs_cck_time;
} __packed;

#define MT7925_STA_UPDATE_MAX_SIZE	(sizeof(struct sta_req_hdr) +		\
					 sizeof(struct sta_rec_basic) +		\
					 sizeof(struct sta_rec_bf) +		\
					 sizeof(struct sta_rec_ht) +		\
					 sizeof(struct sta_rec_he_v2) +		\
					 sizeof(struct sta_rec_ba_uni) +	\
					 sizeof(struct sta_rec_vht) +		\
					 sizeof(struct sta_rec_uapsd) +		\
					 sizeof(struct sta_rec_amsdu) +		\
					 sizeof(struct sta_rec_bfee) +		\
					 sizeof(struct sta_rec_phy) +		\
					 sizeof(struct sta_rec_ra) +		\
					 sizeof(struct sta_rec_sec_uni) +   \
					 sizeof(struct sta_rec_ra_fixed) +	\
					 sizeof(struct sta_rec_he_6g_capa) +	\
					 sizeof(struct sta_rec_eht) +		\
					 sizeof(struct sta_rec_hdr_trans) +	\
					 sizeof(struct sta_rec_mld) +		\
					 sizeof(struct tlv))

#define MT7925_BSS_UPDATE_MAX_SIZE	(sizeof(struct bss_req_hdr) +		\
					 sizeof(struct mt76_connac_bss_basic_tlv) +	\
					 sizeof(struct mt76_connac_bss_qos_tlv) +	\
					 sizeof(struct bss_rate_tlv) +			\
					 sizeof(struct bss_mld_tlv) +			\
					 sizeof(struct bss_info_uni_he) +		\
					 sizeof(struct bss_info_uni_bss_color) +	\
					 sizeof(struct bss_ifs_time_tlv) +		\
					 sizeof(struct tlv))

#define MT_CONNAC3_SKU_POWER_LIMIT      449
struct mt7925_sku_tlv {
	u8 channel;
	s8 pwr_limit[MT_CONNAC3_SKU_POWER_LIMIT];
} __packed;

struct mt7925_tx_power_limit_tlv {
	u8 rsv[4];

	__le16 tag;
	__le16 len;

	/* DW0 - common info*/
	u8 ver;
	u8 pad0;
	__le16 rsv1;
	/* DW1 - cmd hint */
	u8 n_chan; /* # channel */
	u8 band; /* 2.4GHz - 5GHz - 6GHz */
	u8 last_msg;
	u8 limit_type;
	/* DW3 */
	u8 alpha2[4]; /* regulatory_request.alpha2 */
	u8 pad2[32];

	u8 data[];
} __packed;

struct mt7925_arpns_tlv {
	__le16 tag;
	__le16 len;

	u8 enable;
	u8 ips_num;
	u8 rsv[2];
} __packed;

struct mt7925_wow_pattern_tlv {
	__le16 tag;
	__le16 len;
	u8 bss_idx;
	u8 index; /* pattern index */
	u8 enable; /* 0: disable
		    * 1: enable
		    */
	u8 data_len; /* pattern length */
	u8 offset;
	u8 mask[MT76_CONNAC_WOW_MASK_MAX_LEN];
	u8 pattern[MT76_CONNAC_WOW_PATTEN_MAX_LEN];
	u8 rsv[4];
} __packed;

static inline enum connac3_mcu_cipher_type
mt7925_mcu_get_cipher(int cipher)
{
	switch (cipher) {
	case WLAN_CIPHER_SUITE_WEP40:
		return CONNAC3_CIPHER_WEP40;
	case WLAN_CIPHER_SUITE_WEP104:
		return CONNAC3_CIPHER_WEP104;
	case WLAN_CIPHER_SUITE_TKIP:
		return CONNAC3_CIPHER_TKIP;
	case WLAN_CIPHER_SUITE_AES_CMAC:
		return CONNAC3_CIPHER_BIP_CMAC_128;
	case WLAN_CIPHER_SUITE_CCMP:
		return CONNAC3_CIPHER_AES_CCMP;
	case WLAN_CIPHER_SUITE_CCMP_256:
		return CONNAC3_CIPHER_CCMP_256;
	case WLAN_CIPHER_SUITE_GCMP:
		return CONNAC3_CIPHER_GCMP;
	case WLAN_CIPHER_SUITE_GCMP_256:
		return CONNAC3_CIPHER_GCMP_256;
	case WLAN_CIPHER_SUITE_SMS4:
		return CONNAC3_CIPHER_WAPI;
	default:
		return CONNAC3_CIPHER_NONE;
	}
}

int mt7925_mcu_set_dbdc(struct mt76_phy *phy);
int mt7925_mcu_hw_scan(struct mt76_phy *phy, struct ieee80211_vif *vif,
		       struct ieee80211_scan_request *scan_req);
int mt7925_mcu_cancel_hw_scan(struct mt76_phy *phy,
			      struct ieee80211_vif *vif);
int mt7925_mcu_sched_scan_req(struct mt76_phy *phy,
			      struct ieee80211_vif *vif,
			      struct cfg80211_sched_scan_request *sreq);
int mt7925_mcu_sched_scan_enable(struct mt76_phy *phy,
				 struct ieee80211_vif *vif,
				 bool enable);
int mt7925_mcu_add_bss_info(struct mt792x_phy *phy,
			    struct ieee80211_chanctx_conf *ctx,
			    struct ieee80211_vif *vif,
			    struct ieee80211_sta *sta,
			    int enable);
int mt7925_mcu_set_timing(struct mt792x_phy *phy,
			  struct ieee80211_vif *vif);
int mt7925_mcu_set_deep_sleep(struct mt792x_dev *dev, bool enable);
int mt7925_mcu_set_channel_domain(struct mt76_phy *phy);
int mt7925_mcu_set_radio_en(struct mt792x_phy *phy, bool enable);
int mt7925_mcu_set_chctx(struct mt76_phy *phy, struct mt76_vif *mvif,
			 struct ieee80211_chanctx_conf *ctx);
int mt7925_mcu_set_rate_txpower(struct mt76_phy *phy);
int mt7925_mcu_update_arp_filter(struct mt76_dev *dev,
				 struct mt76_vif *vif,
				 struct ieee80211_bss_conf *info);
#endif
