summaryrefslogtreecommitdiff
path: root/drivers/net/wireless/realtek/rtw88/rtw8822c.h
blob: e2b383d633cd23765ce121dd87a0826e12183728 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
/* Copyright(c) 2018-2019  Realtek Corporation
 */

#ifndef __RTW8822C_H__
#define __RTW8822C_H__

#include <asm/byteorder.h>

struct rtw8822cu_efuse {
	u8 res0[0x30];			/* 0x120 */
	u8 vid[2];			/* 0x150 */
	u8 pid[2];
	u8 res1[3];
	u8 mac_addr[ETH_ALEN];		/* 0x157 */
	u8 res2[0x3d];
};

struct rtw8822cs_efuse {
	u8 res0[0x4a];			/* 0x120 */
	u8 mac_addr[ETH_ALEN];		/* 0x16a */
} __packed;

struct rtw8822ce_efuse {
	u8 mac_addr[ETH_ALEN];		/* 0x120 */
	u8 vender_id[2];
	u8 device_id[2];
	u8 sub_vender_id[2];
	u8 sub_device_id[2];
	u8 pmc[2];
	u8 exp_device_cap[2];
	u8 msi_cap;
	u8 ltr_cap;			/* 0x133 */
	u8 exp_link_control[2];
	u8 link_cap[4];
	u8 link_control[2];
	u8 serial_number[8];
	u8 res0:2;			/* 0x144 */
	u8 ltr_en:1;
	u8 res1:2;
	u8 obff:2;
	u8 res2:3;
	u8 obff_cap:2;
	u8 res3:4;
	u8 class_code[3];
	u8 res4;
	u8 pci_pm_L1_2_supp:1;
	u8 pci_pm_L1_1_supp:1;
	u8 aspm_pm_L1_2_supp:1;
	u8 aspm_pm_L1_1_supp:1;
	u8 L1_pm_substates_supp:1;
	u8 res5:3;
	u8 port_common_mode_restore_time;
	u8 port_t_power_on_scale:2;
	u8 res6:1;
	u8 port_t_power_on_value:5;
	u8 res7;
};

struct rtw8822c_efuse {
	__le16 rtl_id;
	u8 res0[4];
	u8 usb_mode;
	u8 res1[0x09];

	/* power index for four RF paths */
	struct rtw_txpwr_idx txpwr_idx_table[4];

	u8 channel_plan;		/* 0xb8 */
	u8 xtal_k;
	u8 res2;
	u8 iqk_lck;
	u8 res3[5];			/* 0xbc */
	u8 rf_board_option;
	u8 rf_feature_option;
	u8 rf_bt_setting;
	u8 eeprom_version;
	u8 eeprom_customer_id;
	u8 tx_bb_swing_setting_2g;
	u8 tx_bb_swing_setting_5g;
	u8 tx_pwr_calibrate_rate;
	u8 rf_antenna_option;		/* 0xc9 */
	u8 rfe_option;
	u8 country_code[2];
	u8 res4[3];
	u8 path_a_thermal;		/* 0xd0 */
	u8 path_b_thermal;
	u8 res5[2];
	u8 rx_gain_gap_2g_ofdm;
	u8 res6;
	u8 rx_gain_gap_2g_cck;
	u8 res7;
	u8 rx_gain_gap_5gl;
	u8 res8;
	u8 rx_gain_gap_5gm;
	u8 res9;
	u8 rx_gain_gap_5gh;
	u8 res10;
	u8 res11[0x42];
	union {
		struct rtw8822ce_efuse e;
		struct rtw8822cu_efuse u;
		struct rtw8822cs_efuse s;
	};
};

enum rtw8822c_dpk_agc_phase {
	RTW_DPK_GAIN_CHECK,
	RTW_DPK_GAIN_LARGE,
	RTW_DPK_GAIN_LESS,
	RTW_DPK_GL_LARGE,
	RTW_DPK_GL_LESS,
	RTW_DPK_LOSS_CHECK,
	RTW_DPK_AGC_OUT,
};

enum rtw8822c_dpk_one_shot_action {
	RTW_DPK_CAL_PWR,
	RTW_DPK_GAIN_LOSS,
	RTW_DPK_DO_DPK,
	RTW_DPK_DPK_ON,
	RTW_DPK_DAGC,
	RTW_DPK_ACTION_MAX
};

void rtw8822c_parse_tbl_dpk(struct rtw_dev *rtwdev,
			    const struct rtw_table *tbl);

extern const struct rtw_chip_info rtw8822c_hw_spec;

#define RTW_DECL_TABLE_DPK(name)			\
const struct rtw_table name ## _tbl = {			\
	.data = name,					\
	.size = ARRAY_SIZE(name),			\
	.parse = rtw8822c_parse_tbl_dpk,		\
}

#define DACK_PATH_8822C		2
#define DACK_REG_8822C		16
#define DACK_RF_8822C		1
#define DACK_SN_8822C		100

/* phy status page0 */
#define GET_PHY_STAT_P0_PWDB_A(phy_stat)                                       \
	le32_get_bits(*((__le32 *)(phy_stat) + 0x00), GENMASK(15, 8))
#define GET_PHY_STAT_P0_PWDB_B(phy_stat)                                       \
	le32_get_bits(*((__le32 *)(phy_stat) + 0x04), GENMASK(7, 0))
#define GET_PHY_STAT_P0_GAIN_A(phy_stat)                                       \
	le32_get_bits(*((__le32 *)(phy_stat) + 0x00), GENMASK(21, 16))
#define GET_PHY_STAT_P0_CHANNEL(phy_stat)				       \
	le32_get_bits(*((__le32 *)(phy_stat) + 0x01), GENMASK(23, 16))
#define GET_PHY_STAT_P0_GAIN_B(phy_stat)                                       \
	le32_get_bits(*((__le32 *)(phy_stat) + 0x04), GENMASK(29, 24))

/* phy status page1 */
#define GET_PHY_STAT_P1_PWDB_A(phy_stat)                                       \
	le32_get_bits(*((__le32 *)(phy_stat) + 0x00), GENMASK(15, 8))
#define GET_PHY_STAT_P1_PWDB_B(phy_stat)                                       \
	le32_get_bits(*((__le32 *)(phy_stat) + 0x00), GENMASK(23, 16))
#define GET_PHY_STAT_P1_L_RXSC(phy_stat)                                       \
	le32_get_bits(*((__le32 *)(phy_stat) + 0x01), GENMASK(11, 8))
#define GET_PHY_STAT_P1_HT_RXSC(phy_stat)                                      \
	le32_get_bits(*((__le32 *)(phy_stat) + 0x01), GENMASK(15, 12))
#define GET_PHY_STAT_P1_CHANNEL(phy_stat)				       \
	le32_get_bits(*((__le32 *)(phy_stat) + 0x01), GENMASK(23, 16))
#define GET_PHY_STAT_P1_RXEVM_A(phy_stat)                                      \
	le32_get_bits(*((__le32 *)(phy_stat) + 0x04), GENMASK(7, 0))
#define GET_PHY_STAT_P1_RXEVM_B(phy_stat)                                      \
	le32_get_bits(*((__le32 *)(phy_stat) + 0x04), GENMASK(15, 8))
#define GET_PHY_STAT_P1_CFO_TAIL_A(phy_stat)                                 \
	le32_get_bits(*((__le32 *)(phy_stat) + 0x05), GENMASK(7, 0))
#define GET_PHY_STAT_P1_CFO_TAIL_B(phy_stat)                                 \
	le32_get_bits(*((__le32 *)(phy_stat) + 0x05), GENMASK(15, 8))
#define GET_PHY_STAT_P1_RXSNR_A(phy_stat)                                      \
	le32_get_bits(*((__le32 *)(phy_stat) + 0x06), GENMASK(7, 0))
#define GET_PHY_STAT_P1_RXSNR_B(phy_stat)                                      \
	le32_get_bits(*((__le32 *)(phy_stat) + 0x06), GENMASK(15, 8))

#define RTW8822C_EDCCA_MAX	0x7f
#define REG_ANAPARLDO_POW_MAC	0x0029
#define BIT_LDOE25_PON		BIT(0)
#define XCAP_MASK		GENMASK(6, 0)
#define CFO_TRK_ENABLE_TH	20
#define CFO_TRK_STOP_TH		10
#define CFO_TRK_ADJ_TH		10

#define REG_TXDFIR0		0x808
#define REG_DFIRBW		0x810
#define REG_ANTMAP0		0x820
#define BIT_ANT_PATH		GENMASK(1, 0)
#define REG_ANTMAP		0x824
#define REG_EDCCA_DECISION	0x844
#define BIT_EDCCA_OPTION	GENMASK(30, 29)
#define REG_DYMPRITH		0x86c
#define REG_DYMENTH0		0x870
#define REG_DYMENTH		0x874
#define REG_SBD			0x88c
#define BITS_SUBTUNE		GENMASK(15, 12)
#define REG_DYMTHMIN		0x8a4

#define REG_TXBWCTL		0x9b0
#define REG_TXCLK		0x9b4

#define REG_SCOTRK		0xc30
#define REG_MRCM		0xc38
#define REG_AGCSWSH		0xc44
#define REG_ANTWTPD		0xc54
#define REG_PT_CHSMO		0xcbc
#define BIT_PT_OPT		BIT(21)

#define REG_ORITXCODE		0x1800
#define BIT_PATH_EN		BIT(31)
#define REG_3WIRE		0x180c
#define BIT_DIS_SHARERX_TXGAT	BIT(27)
#define BIT_3WIRE_TX_EN		BIT(0)
#define BIT_3WIRE_RX_EN		BIT(1)
#define BIT_3WIRE_EN		GENMASK(1, 0)
#define BIT_3WIRE_PI_ON		BIT(28)
#define REG_ANAPAR_A		0x1830
#define BIT_ANAPAR_UPDATE	BIT(29)
#define REG_RFTXEN_GCK_A	0x1864
#define BIT_RFTXEN_GCK_FORCE_ON	BIT(31)
#define REG_DIS_SHARE_RX_A	0x186c
#define BIT_TX_SCALE_0DB	BIT(7)
#define REG_RXAGCCTL0		0x18ac
#define BITS_RXAGC_CCK		GENMASK(15, 12)
#define BITS_RXAGC_OFDM		GENMASK(8, 4)
#define REG_DCKA_I_0		0x18bc
#define REG_DCKA_I_1		0x18c0
#define REG_DCKA_Q_0		0x18d8
#define REG_DCKA_Q_1		0x18dc

#define REG_CCKSB		0x1a00
#define BIT_BBMODE		GENMASK(2, 1)
#define REG_RXCCKSEL		0x1a04
#define REG_BGCTRL		0x1a14
#define BITS_RX_IQ_WEIGHT	(BIT(8) | BIT(9))
#define REG_TXF0		0x1a20
#define REG_TXF1		0x1a24
#define REG_TXF2		0x1a28
#define REG_CCANRX		0x1a2c
#define BIT_CCK_FA_RST		(BIT(14) | BIT(15))
#define BIT_OFDM_FA_RST		(BIT(12) | BIT(13))
#define REG_CCK_FACNT		0x1a5c
#define REG_CCKTXONLY		0x1a80
#define BIT_BB_CCK_CHECK_EN	BIT(18)
#define REG_TXF3		0x1a98
#define REG_TXF4		0x1a9c
#define REG_TXF5		0x1aa0
#define REG_TXF6		0x1aac
#define REG_TXF7		0x1ab0
#define REG_CCK_SOURCE		0x1abc
#define BIT_NBI_EN		BIT(30)

#define REG_NCTL0		0x1b00
#define BIT_SEL_PATH		GENMASK(2, 1)
#define BIT_SUBPAGE		GENMASK(3, 0)
#define REG_DPD_CTL0_S0		0x1b04
#define BIT_GS_PWSF		GENMASK(27, 0)
#define REG_DPD_CTL1_S0		0x1b08
#define BIT_DPD_EN		BIT(31)
#define BIT_PS_EN		BIT(7)
#define REG_IQKSTAT		0x1b10
#define REG_IQK_CTL1		0x1b20
#define BIT_TX_CFIR		GENMASK(31, 30)
#define BIT_CFIR_EN		GENMASK(26, 24)
#define BIT_BYPASS_DPD		BIT(25)

#define REG_TX_TONE_IDX		0x1b2c
#define REG_DPD_LUT0		0x1b44
#define BIT_GLOSS_DB		GENMASK(14, 12)
#define REG_DPD_CTL0_S1		0x1b5c
#define REG_DPD_CTL1_S1		0x1b60
#define REG_DPD_AGC		0x1b67
#define REG_TABLE_SEL		0x1b98
#define BIT_I_GAIN		GENMASK(19, 16)
#define BIT_GAIN_RST		BIT(15)
#define BIT_Q_GAIN_SEL		GENMASK(14, 12)
#define BIT_Q_GAIN		GENMASK(11, 0)
#define REG_TX_GAIN_SET		0x1b9c
#define BIT_GAPK_RPT_IDX	GENMASK(11, 8)
#define REG_DPD_CTL0		0x1bb4
#define REG_SINGLE_TONE_SW	0x1bb8
#define BIT_IRQ_TEST_MODE	BIT(20)
#define REG_R_CONFIG		0x1bcc
#define BIT_INNER_LB		BIT(21)
#define BIT_IQ_SWITCH		GENMASK(5, 0)
#define BIT_2G_SWING		0x2d
#define BIT_5G_SWING		0x36
#define REG_RXSRAM_CTL		0x1bd4
#define BIT_RPT_EN		BIT(21)
#define BIT_RPT_SEL		GENMASK(20, 16)
#define BIT_DPD_CLK		GENMASK(7, 4)
#define REG_DPD_CTL11		0x1be4
#define REG_DPD_CTL12		0x1be8
#define REG_DPD_CTL15		0x1bf4
#define REG_DPD_CTL16		0x1bf8
#define REG_STAT_RPT		0x1bfc
#define BIT_RPT_DGAIN		GENMASK(27, 16)
#define BIT_GAPK_RPT0		GENMASK(3, 0)
#define BIT_GAPK_RPT1		GENMASK(7, 4)
#define BIT_GAPK_RPT2		GENMASK(11, 8)
#define BIT_GAPK_RPT3		GENMASK(15, 12)
#define BIT_GAPK_RPT4		GENMASK(19, 16)
#define BIT_GAPK_RPT5		GENMASK(23, 20)
#define BIT_GAPK_RPT6		GENMASK(27, 24)
#define BIT_GAPK_RPT7		GENMASK(31, 28)

#define REG_TXANT		0x1c28
#define REG_IQK_CTRL		0x1c38
#define REG_ENCCK		0x1c3c
#define BIT_CCK_BLK_EN		BIT(1)
#define BIT_CCK_OFDM_BLK_EN	(BIT(0) | BIT(1))
#define REG_CCAMSK		0x1c80
#define REG_RSTB		0x1c90
#define BIT_RSTB_3WIRE		BIT(8)
#define REG_CH_DELAY_EXTR2	0x1cd0
#define BIT_TST_IQK2SET_SRC	BIT(31)
#define BIT_EN_IOQ_IQK_DPK	BIT(30)
#define BIT_IQK_DPK_RESET_SRC	BIT(29)
#define BIT_IQK_DPK_CLOCK_SRC	BIT(28)

#define REG_RX_BREAK		0x1d2c
#define BIT_COM_RX_GCK_EN	BIT(31)
#define REG_RXFNCTL		0x1d30
#define REG_CCA_OFF		0x1d58
#define BIT_CCA_ON_BY_PW	GENMASK(11, 3)
#define REG_RXIGI		0x1d70

#define REG_ENFN		0x1e24
#define BIT_IQK_DPK_EN		BIT(17)
#define REG_TXANTSEG		0x1e28
#define BIT_ANTSEG		GENMASK(3, 0)
#define REG_TXLGMAP		0x1e2c
#define REG_CCKPATH		0x1e5c
#define REG_TX_FIFO		0x1e70
#define BIT_STOP_TX		GENMASK(3, 0)
#define REG_CNT_CTRL		0x1eb4
#define BIT_ALL_CNT_RST		BIT(25)

#define REG_OFDM_FACNT		0x2d00
#define REG_OFDM_FACNT1		0x2d04
#define REG_OFDM_FACNT2		0x2d08
#define REG_OFDM_FACNT3		0x2d0c
#define REG_OFDM_FACNT4		0x2d10
#define REG_OFDM_FACNT5		0x2d20
#define REG_RPT_CIP		0x2d9c
#define BIT_RPT_CIP_STATUS	GENMASK(7, 0)
#define REG_OFDM_TXCNT		0x2de0

#define REG_ORITXCODE2		0x4100
#define REG_3WIRE2		0x410c
#define REG_ANAPAR_B		0x4130
#define REG_RFTXEN_GCK_B	0x4164
#define REG_DIS_SHARE_RX_B	0x416c
#define BIT_EXT_TIA_BW		BIT(1)
#define REG_RXAGCCTL		0x41ac
#define REG_DCKB_I_0		0x41bc
#define REG_DCKB_I_1		0x41c0
#define REG_DCKB_Q_0		0x41d8
#define REG_DCKB_Q_1		0x41dc

#define RF_MODE_TRXAGC		0x00
#define BIT_RF_MODE		GENMASK(19, 16)
#define BIT_RXAGC		GENMASK(9, 5)
#define BIT_TXAGC		GENMASK(4, 0)
#define RF_RXAGC_OFFSET		0x19
#define RF_BW_TRXBB		0x1a
#define BIT_TX_CCK_IND		BIT(16)
#define BIT_BW_TXBB		GENMASK(14, 12)
#define BIT_BW_RXBB		GENMASK(11, 10)
#define BIT_DBG_CCK_CCA		BIT(1)
#define RF_TX_GAIN_OFFSET	0x55
#define BIT_BB_GAIN		GENMASK(18, 14)
#define BIT_RF_GAIN		GENMASK(4, 2)
#define RF_TX_GAIN		0x56
#define BIT_GAIN_TXBB		GENMASK(4, 0)
#define RF_IDAC			0x58
#define BIT_TX_MODE		GENMASK(19, 8)
#define RF_TX_RESULT		0x5f
#define BIT_GAIN_TX_PAD_H	GENMASK(11, 8)
#define BIT_GAIN_TX_PAD_L	GENMASK(7, 4)
#define RF_PA			0x60
#define RF_PABIAS_2G_MASK	GENMASK(15, 12)
#define RF_PABIAS_5G_MASK	GENMASK(19, 16)
#define RF_TXA_LB_SW		0x63
#define BIT_TXA_LB_ATT		GENMASK(15, 14)
#define BIT_LB_SW		GENMASK(13, 12)
#define BIT_LB_ATT		GENMASK(4, 2)
#define RF_RXG_GAIN		0x87
#define BIT_RXG_GAIN		BIT(18)
#define RF_RXA_MIX_GAIN		0x8a
#define BIT_RXA_MIX_GAIN	GENMASK(4, 3)
#define RF_EXT_TIA_BW		0x8f
#define BIT_PW_EXT_TIA		BIT(1)
#define RF_DIS_BYPASS_TXBB	0x9e
#define BIT_TXBB		BIT(10)
#define BIT_TIA_BYPASS		BIT(5)
#define RF_DEBUG		0xde
#define BIT_DE_PWR_TRIM		BIT(19)
#define BIT_DE_TX_GAIN		BIT(16)
#define BIT_DE_TRXBW		BIT(2)

#define PPG_THERMAL_B		0x1b0
#define RF_THEMAL_MASK		GENMASK(19, 16)
#define PPG_2GH_TXAB		0x1d2
#define PPG_2G_A_MASK		GENMASK(3, 0)
#define PPG_2G_B_MASK		GENMASK(7, 4)
#define PPG_2GL_TXAB		0x1d4
#define PPG_PABIAS_2GB		0x1d5
#define PPG_PABIAS_2GA		0x1d6
#define PPG_PABIAS_MASK		GENMASK(3, 0)
#define PPG_PABIAS_5GB		0x1d7
#define PPG_PABIAS_5GA		0x1d8
#define PPG_5G_MASK		GENMASK(4, 0)
#define PPG_5GH1_TXB		0x1db
#define PPG_5GH1_TXA		0x1dc
#define PPG_5GM2_TXB		0x1df
#define PPG_5GM2_TXA		0x1e0
#define PPG_5GM1_TXB		0x1e3
#define PPG_5GM1_TXA		0x1e4
#define PPG_5GL2_TXB		0x1e7
#define PPG_5GL2_TXA		0x1e8
#define PPG_5GL1_TXB		0x1eb
#define PPG_5GL1_TXA		0x1ec
#define PPG_2GM_TXAB		0x1ee
#define PPG_THERMAL_A		0x1ef
#endif