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