Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/sys/contrib/dev/mediatek/mt76/mt7915/eeprom.h
48525 views
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_MAC_ADDR2 = 0x00a,
19
MT_EE_DDIE_FT_VERSION = 0x050,
20
MT_EE_DO_PRE_CAL = 0x062,
21
MT_EE_WIFI_CONF = 0x190,
22
MT_EE_DO_PRE_CAL_V2 = 0x19a,
23
MT_EE_RATE_DELTA_2G = 0x252,
24
MT_EE_RATE_DELTA_5G = 0x29d,
25
MT_EE_TX0_POWER_2G = 0x2fc,
26
MT_EE_TX0_POWER_5G = 0x34b,
27
MT_EE_RATE_DELTA_2G_V2 = 0x7d3,
28
MT_EE_RATE_DELTA_5G_V2 = 0x81e,
29
MT_EE_RATE_DELTA_6G_V2 = 0x884, /* 6g fields only appear in eeprom v2 */
30
MT_EE_TX0_POWER_2G_V2 = 0x441,
31
MT_EE_TX0_POWER_5G_V2 = 0x445,
32
MT_EE_TX0_POWER_6G_V2 = 0x465,
33
MT_EE_ADIE_FT_VERSION = 0x9a0,
34
35
__MT_EE_MAX = 0xe00,
36
__MT_EE_MAX_V2 = 0x1000,
37
/* 0xe10 ~ 0x5780 used to save group cal data */
38
MT_EE_PRECAL = 0xe10,
39
MT_EE_PRECAL_V2 = 0x1010
40
};
41
42
#define MT_EE_WIFI_CAL_GROUP BIT(0)
43
#define MT_EE_WIFI_CAL_DPD_2G BIT(2)
44
#define MT_EE_WIFI_CAL_DPD_5G BIT(1)
45
#define MT_EE_WIFI_CAL_DPD_6G BIT(3)
46
#define MT_EE_WIFI_CAL_DPD GENMASK(3, 1)
47
#define MT_EE_CAL_UNIT 1024
48
#define MT_EE_CAL_GROUP_SIZE_7915 (49 * MT_EE_CAL_UNIT + 16)
49
#define MT_EE_CAL_GROUP_SIZE_7916 (54 * MT_EE_CAL_UNIT + 16)
50
#define MT_EE_CAL_GROUP_SIZE_7975 (54 * MT_EE_CAL_UNIT + 16)
51
#define MT_EE_CAL_GROUP_SIZE_7976 (94 * MT_EE_CAL_UNIT + 16)
52
#define MT_EE_CAL_GROUP_SIZE_7916_6G (94 * MT_EE_CAL_UNIT + 16)
53
#define MT_EE_CAL_DPD_SIZE_V1 (54 * MT_EE_CAL_UNIT)
54
#define MT_EE_CAL_DPD_SIZE_V2 (300 * MT_EE_CAL_UNIT)
55
#define MT_EE_CAL_DPD_SIZE_V2_7981 (102 * MT_EE_CAL_UNIT) /* no 6g dpd data */
56
57
#define MT_EE_WIFI_CONF0_TX_PATH GENMASK(2, 0)
58
#define MT_EE_WIFI_CONF0_RX_PATH GENMASK(5, 3)
59
#define MT_EE_WIFI_CONF0_BAND_SEL GENMASK(7, 6)
60
#define MT_EE_WIFI_CONF1_BAND_SEL GENMASK(7, 6)
61
#define MT_EE_WIFI_CONF_STREAM_NUM GENMASK(7, 5)
62
#define MT_EE_WIFI_CONF3_TX_PATH_B0 GENMASK(1, 0)
63
#define MT_EE_WIFI_CONF3_TX_PATH_B1 GENMASK(5, 4)
64
#define MT_EE_WIFI_CONF7_TSSI0_2G BIT(0)
65
#define MT_EE_WIFI_CONF7_TSSI0_5G BIT(2)
66
#define MT_EE_WIFI_CONF7_TSSI1_5G BIT(4)
67
68
#define MT_EE_RATE_DELTA_MASK GENMASK(5, 0)
69
#define MT_EE_RATE_DELTA_SIGN BIT(6)
70
#define MT_EE_RATE_DELTA_EN BIT(7)
71
72
enum mt7915_adie_sku {
73
MT7976_ONE_ADIE_DBDC = 0x7,
74
MT7975_ONE_ADIE = 0x8,
75
MT7976_ONE_ADIE = 0xa,
76
MT7975_DUAL_ADIE = 0xd,
77
MT7976_DUAL_ADIE = 0xf,
78
};
79
80
enum mt7915_eeprom_band {
81
MT_EE_BAND_SEL_DEFAULT,
82
MT_EE_BAND_SEL_5GHZ,
83
MT_EE_BAND_SEL_2GHZ,
84
MT_EE_BAND_SEL_DUAL,
85
};
86
87
enum {
88
MT_EE_V2_BAND_SEL_2GHZ,
89
MT_EE_V2_BAND_SEL_5GHZ,
90
MT_EE_V2_BAND_SEL_6GHZ,
91
MT_EE_V2_BAND_SEL_5GHZ_6GHZ,
92
};
93
94
enum mt7915_sku_rate_group {
95
SKU_CCK,
96
SKU_OFDM,
97
SKU_HT_BW20,
98
SKU_HT_BW40,
99
SKU_VHT_BW20,
100
SKU_VHT_BW40,
101
SKU_VHT_BW80,
102
SKU_VHT_BW160,
103
SKU_HE_RU26,
104
SKU_HE_RU52,
105
SKU_HE_RU106,
106
SKU_HE_RU242,
107
SKU_HE_RU484,
108
SKU_HE_RU996,
109
SKU_HE_RU2x996,
110
MAX_SKU_RATE_GROUP_NUM,
111
};
112
113
static inline int
114
mt7915_get_channel_group_5g(int channel, bool is_7976)
115
{
116
if (is_7976) {
117
if (channel <= 64)
118
return 0;
119
if (channel <= 96)
120
return 1;
121
if (channel <= 128)
122
return 2;
123
if (channel <= 144)
124
return 3;
125
return 4;
126
}
127
128
if (channel >= 184 && channel <= 196)
129
return 0;
130
if (channel <= 48)
131
return 1;
132
if (channel <= 64)
133
return 2;
134
if (channel <= 96)
135
return 3;
136
if (channel <= 112)
137
return 4;
138
if (channel <= 128)
139
return 5;
140
if (channel <= 144)
141
return 6;
142
return 7;
143
}
144
145
static inline int
146
mt7915_get_channel_group_6g(int channel)
147
{
148
if (channel <= 29)
149
return 0;
150
151
return DIV_ROUND_UP(channel - 29, 32);
152
}
153
154
static inline bool
155
mt7915_tssi_enabled(struct mt7915_dev *dev, enum nl80211_band band)
156
{
157
u8 *eep = dev->mt76.eeprom.data;
158
u8 offs = is_mt7981(&dev->mt76) ? 8 : 7;
159
u8 val = eep[MT_EE_WIFI_CONF + offs];
160
161
if (band == NL80211_BAND_2GHZ)
162
return val & MT_EE_WIFI_CONF7_TSSI0_2G;
163
164
if (dev->dbdc_support)
165
return val & MT_EE_WIFI_CONF7_TSSI1_5G;
166
else
167
return val & MT_EE_WIFI_CONF7_TSSI0_5G;
168
}
169
170
static inline u32
171
mt7915_get_cal_group_size(struct mt7915_dev *dev)
172
{
173
u8 *eep = dev->mt76.eeprom.data;
174
u32 val;
175
176
if (is_mt7915(&dev->mt76)) {
177
return MT_EE_CAL_GROUP_SIZE_7915;
178
} else if (is_mt7916(&dev->mt76)) {
179
val = eep[MT_EE_WIFI_CONF + 1];
180
val = FIELD_GET(MT_EE_WIFI_CONF0_BAND_SEL, val);
181
return (val == MT_EE_V2_BAND_SEL_6GHZ) ? MT_EE_CAL_GROUP_SIZE_7916_6G :
182
MT_EE_CAL_GROUP_SIZE_7916;
183
} else if (mt7915_check_adie(dev, false)) {
184
return MT_EE_CAL_GROUP_SIZE_7976;
185
} else {
186
return MT_EE_CAL_GROUP_SIZE_7975;
187
}
188
}
189
190
static inline u32
191
mt7915_get_cal_dpd_size(struct mt7915_dev *dev)
192
{
193
if (is_mt7915(&dev->mt76))
194
return MT_EE_CAL_DPD_SIZE_V1;
195
else if (is_mt7981(&dev->mt76))
196
return MT_EE_CAL_DPD_SIZE_V2_7981;
197
else
198
return MT_EE_CAL_DPD_SIZE_V2;
199
}
200
201
extern const u8 mt7915_sku_group_len[MAX_SKU_RATE_GROUP_NUM];
202
203
#endif
204
205