1e57b7901SRyder Lee /* SPDX-License-Identifier: ISC */
2e57b7901SRyder Lee /* Copyright (C) 2020 MediaTek Inc. */
3e57b7901SRyder Lee 
4e57b7901SRyder Lee #ifndef __MT7915_EEPROM_H
5e57b7901SRyder Lee #define __MT7915_EEPROM_H
6e57b7901SRyder Lee 
7e57b7901SRyder Lee #include "mt7915.h"
8e57b7901SRyder Lee 
9e57b7901SRyder Lee struct cal_data {
10e57b7901SRyder Lee 	u8 count;
11e57b7901SRyder Lee 	u16 offset[60];
12e57b7901SRyder Lee };
13e57b7901SRyder Lee 
14e57b7901SRyder Lee enum mt7915_eeprom_field {
15e57b7901SRyder Lee 	MT_EE_CHIP_ID =		0x000,
16e57b7901SRyder Lee 	MT_EE_VERSION =		0x002,
17e57b7901SRyder Lee 	MT_EE_MAC_ADDR =	0x004,
184c430774SLorenzo Bianconi 	MT_EE_MAC_ADDR2 =	0x00a,
19e57b7901SRyder Lee 	MT_EE_DDIE_FT_VERSION =	0x050,
20e57b7901SRyder Lee 	MT_EE_WIFI_CONF =	0x190,
21e57b7901SRyder Lee 	MT_EE_TX0_POWER_2G =	0x2fc,
22e57b7901SRyder Lee 	MT_EE_TX0_POWER_5G =	0x34b,
23e57b7901SRyder Lee 	MT_EE_ADIE_FT_VERSION =	0x9a0,
24e57b7901SRyder Lee 
25e57b7901SRyder Lee 	__MT_EE_MAX =		0xe00
26e57b7901SRyder Lee };
27e57b7901SRyder Lee 
28f7fc2bbeSFelix Fietkau #define MT_EE_WIFI_CONF0_TX_PATH		GENMASK(2, 0)
29f7fc2bbeSFelix Fietkau #define MT_EE_WIFI_CONF0_BAND_SEL		GENMASK(7, 6)
30f7fc2bbeSFelix Fietkau #define MT_EE_WIFI_CONF1_BAND_SEL		GENMASK(7, 6)
31f7fc2bbeSFelix Fietkau #define MT_EE_WIFI_CONF3_TX_PATH_B0		GENMASK(1, 0)
32f7fc2bbeSFelix Fietkau #define MT_EE_WIFI_CONF3_TX_PATH_B1		GENMASK(5, 4)
33f7fc2bbeSFelix Fietkau #define MT_EE_WIFI_CONF7_TSSI0_2G		BIT(0)
34f7fc2bbeSFelix Fietkau #define MT_EE_WIFI_CONF7_TSSI0_5G		BIT(2)
35f7fc2bbeSFelix Fietkau #define MT_EE_WIFI_CONF7_TSSI1_5G		BIT(4)
36e57b7901SRyder Lee 
37e57b7901SRyder Lee enum mt7915_eeprom_band {
38*45a8b67aSFelix Fietkau 	MT_EE_BAND_SEL_DEFAULT,
39*45a8b67aSFelix Fietkau 	MT_EE_BAND_SEL_5GHZ,
40*45a8b67aSFelix Fietkau 	MT_EE_BAND_SEL_2GHZ,
41*45a8b67aSFelix Fietkau 	MT_EE_BAND_SEL_DUAL,
42e57b7901SRyder Lee };
43e57b7901SRyder Lee 
44f1d96236SRyder Lee #define SKU_DELTA_VAL		GENMASK(5, 0)
45f1d96236SRyder Lee #define SKU_DELTA_ADD		BIT(6)
46f1d96236SRyder Lee #define SKU_DELTA_EN		BIT(7)
47f1d96236SRyder Lee 
48f1d96236SRyder Lee enum mt7915_sku_delta_group {
49f1d96236SRyder Lee 	SKU_CCK_GROUP0,
50f1d96236SRyder Lee 	SKU_CCK_GROUP1,
51f1d96236SRyder Lee 
52f1d96236SRyder Lee 	SKU_OFDM_GROUP0 = 0,
53f1d96236SRyder Lee 	SKU_OFDM_GROUP1,
54f1d96236SRyder Lee 	SKU_OFDM_GROUP2,
55f1d96236SRyder Lee 	SKU_OFDM_GROUP3,
56f1d96236SRyder Lee 	SKU_OFDM_GROUP4,
57f1d96236SRyder Lee 
58f1d96236SRyder Lee 	SKU_MCS_GROUP0 = 0,
59f1d96236SRyder Lee 	SKU_MCS_GROUP1,
60f1d96236SRyder Lee 	SKU_MCS_GROUP2,
61f1d96236SRyder Lee 	SKU_MCS_GROUP3,
62f1d96236SRyder Lee 	SKU_MCS_GROUP4,
63f1d96236SRyder Lee 	SKU_MCS_GROUP5,
64f1d96236SRyder Lee 	SKU_MCS_GROUP6,
65f1d96236SRyder Lee 	SKU_MCS_GROUP7,
66f1d96236SRyder Lee 	SKU_MCS_GROUP8,
67f1d96236SRyder Lee 	SKU_MCS_GROUP9,
68f1d96236SRyder Lee };
69f1d96236SRyder Lee 
70f1d96236SRyder Lee enum mt7915_sku_rate_group {
71f1d96236SRyder Lee 	SKU_CCK,
72f1d96236SRyder Lee 	SKU_OFDM,
73f1d96236SRyder Lee 	SKU_HT_BW20,
74f1d96236SRyder Lee 	SKU_HT_BW40,
75f1d96236SRyder Lee 	SKU_VHT_BW20,
76f1d96236SRyder Lee 	SKU_VHT_BW40,
77f1d96236SRyder Lee 	SKU_VHT_BW80,
78f1d96236SRyder Lee 	SKU_VHT_BW160,
79f1d96236SRyder Lee 	SKU_HE_RU26,
80f1d96236SRyder Lee 	SKU_HE_RU52,
81f1d96236SRyder Lee 	SKU_HE_RU106,
82f1d96236SRyder Lee 	SKU_HE_RU242,
83f1d96236SRyder Lee 	SKU_HE_RU484,
84f1d96236SRyder Lee 	SKU_HE_RU996,
85f1d96236SRyder Lee 	SKU_HE_RU2x996,
86f1d96236SRyder Lee 	MAX_SKU_RATE_GROUP_NUM,
87f1d96236SRyder Lee };
88f1d96236SRyder Lee 
89e57b7901SRyder Lee struct sku_group {
90e57b7901SRyder Lee 	u8 len;
91e57b7901SRyder Lee 	u16 offset[2];
92e57b7901SRyder Lee 	const u8 *delta_map;
93e57b7901SRyder Lee };
94e57b7901SRyder Lee 
95e57b7901SRyder Lee static inline int
96e57b7901SRyder Lee mt7915_get_channel_group(int channel)
97e57b7901SRyder Lee {
98e57b7901SRyder Lee 	if (channel >= 184 && channel <= 196)
99e57b7901SRyder Lee 		return 0;
100e57b7901SRyder Lee 	if (channel <= 48)
101e57b7901SRyder Lee 		return 1;
102e57b7901SRyder Lee 	if (channel <= 64)
103e57b7901SRyder Lee 		return 2;
104e57b7901SRyder Lee 	if (channel <= 96)
105e57b7901SRyder Lee 		return 3;
106e57b7901SRyder Lee 	if (channel <= 112)
107e57b7901SRyder Lee 		return 4;
108e57b7901SRyder Lee 	if (channel <= 128)
109e57b7901SRyder Lee 		return 5;
110e57b7901SRyder Lee 	if (channel <= 144)
111e57b7901SRyder Lee 		return 6;
112e57b7901SRyder Lee 	return 7;
113e57b7901SRyder Lee }
114e57b7901SRyder Lee 
115e57b7901SRyder Lee static inline bool
116e57b7901SRyder Lee mt7915_tssi_enabled(struct mt7915_dev *dev, enum nl80211_band band)
117e57b7901SRyder Lee {
118e57b7901SRyder Lee 	u8 *eep = dev->mt76.eeprom.data;
119e57b7901SRyder Lee 
120e57b7901SRyder Lee 	/* TODO: DBDC */
121e57b7901SRyder Lee 	if (band == NL80211_BAND_5GHZ)
122f7fc2bbeSFelix Fietkau 		return eep[MT_EE_WIFI_CONF + 7] & MT_EE_WIFI_CONF7_TSSI0_5G;
123e57b7901SRyder Lee 	else
124f7fc2bbeSFelix Fietkau 		return eep[MT_EE_WIFI_CONF + 7] & MT_EE_WIFI_CONF7_TSSI0_2G;
125e57b7901SRyder Lee }
126e57b7901SRyder Lee 
127f1d96236SRyder Lee extern const struct sku_group mt7915_sku_groups[];
128f1d96236SRyder Lee 
129e57b7901SRyder Lee #endif
130