xref: /freebsd/sys/dev/rtwn/rtl8723b/r23b_rom_image.h (revision 551b7c5e12bfea623a47edf97ad5689732a1233f)
1*551b7c5eSAhmad Khalifa /*
2*551b7c5eSAhmad Khalifa  * Copyright (c) 2026 Ahmad Khalifa <vexeduxr@FreeBSD.org>
3*551b7c5eSAhmad Khalifa  *
4*551b7c5eSAhmad Khalifa  * SPDX-License-Identifier: BSD-2-Clause
5*551b7c5eSAhmad Khalifa  */
6*551b7c5eSAhmad Khalifa 
7*551b7c5eSAhmad Khalifa #ifndef R23B_ROM_IMAGE_H
8*551b7c5eSAhmad Khalifa #define R23B_ROM_IMAGE_H
9*551b7c5eSAhmad Khalifa 
10*551b7c5eSAhmad Khalifa #include <dev/rtwn/rtl8723b/r23b_rom_defs.h>
11*551b7c5eSAhmad Khalifa 
12*551b7c5eSAhmad Khalifa #define R23B_DEF_TX_PWR_2G	0x2d
13*551b7c5eSAhmad Khalifa #define R23B_DEF_TX_HT20_DIFF	0x02
14*551b7c5eSAhmad Khalifa #define R23B_DEF_TX_OFDM_DIFF	0x04
15*551b7c5eSAhmad Khalifa #define R23B_DEF_TX_DIFF	0xfe
16*551b7c5eSAhmad Khalifa 
17*551b7c5eSAhmad Khalifa struct r23b_tx_pwr_2g {
18*551b7c5eSAhmad Khalifa 	uint8_t		cck[R23B_GROUP_2G];
19*551b7c5eSAhmad Khalifa 	uint8_t		ht40[R23B_GROUP_2G - 1];
20*551b7c5eSAhmad Khalifa } __packed;
21*551b7c5eSAhmad Khalifa 
22*551b7c5eSAhmad Khalifa struct r23b_tx_pwr_diff123_2g {
23*551b7c5eSAhmad Khalifa 	uint8_t	ht40_ht20;
24*551b7c5eSAhmad Khalifa 	uint8_t	ofdm_cck;
25*551b7c5eSAhmad Khalifa } __packed;
26*551b7c5eSAhmad Khalifa 
27*551b7c5eSAhmad Khalifa struct r23b_tx_pwr_diff_2g {
28*551b7c5eSAhmad Khalifa 	uint8_t		ht20_ofdm;
29*551b7c5eSAhmad Khalifa 	struct r23b_tx_pwr_diff123_2g diff123[R23B_MAX_TX_COUNT - 1];
30*551b7c5eSAhmad Khalifa } __packed;
31*551b7c5eSAhmad Khalifa 
32*551b7c5eSAhmad Khalifa struct r23b_tx_pwr {
33*551b7c5eSAhmad Khalifa 	struct r23b_tx_pwr_2g		pwr_2g;
34*551b7c5eSAhmad Khalifa 	struct r23b_tx_pwr_diff_2g	pwr_diff_2g;
35*551b7c5eSAhmad Khalifa 	uint8_t				reserved[24];
36*551b7c5eSAhmad Khalifa } __packed;
37*551b7c5eSAhmad Khalifa 
38*551b7c5eSAhmad Khalifa struct r23b_rom {
39*551b7c5eSAhmad Khalifa 	uint16_t		id;
40*551b7c5eSAhmad Khalifa 	uint8_t			reserved1[14];
41*551b7c5eSAhmad Khalifa 	struct r23b_tx_pwr 	tx_pwr[R23B_MAX_RF_PATH];
42*551b7c5eSAhmad Khalifa 	uint8_t			channel_plan;
43*551b7c5eSAhmad Khalifa 	uint8_t			crystal_cap;
44*551b7c5eSAhmad Khalifa #define R23B_ROM_CRYSTALCAP_DEF		0x20
45*551b7c5eSAhmad Khalifa 
46*551b7c5eSAhmad Khalifa 	uint8_t			thermal_meter;
47*551b7c5eSAhmad Khalifa #define R23B_ROM_THERMALMETER_DEF	0x18
48*551b7c5eSAhmad Khalifa 
49*551b7c5eSAhmad Khalifa 	uint8_t			iqk_lck;
50*551b7c5eSAhmad Khalifa 	uint8_t			pa_type;
51*551b7c5eSAhmad Khalifa 	uint8_t			lna_type_2g;
52*551b7c5eSAhmad Khalifa 	uint8_t			reserved2;
53*551b7c5eSAhmad Khalifa 	uint8_t			lna_type_5g;
54*551b7c5eSAhmad Khalifa 	uint8_t			reserved3;
55*551b7c5eSAhmad Khalifa 	uint8_t			rf_board_opt;
56*551b7c5eSAhmad Khalifa 	uint8_t			rf_feature_opt;
57*551b7c5eSAhmad Khalifa 	uint8_t			rf_bt_opt;
58*551b7c5eSAhmad Khalifa 	uint8_t			version;
59*551b7c5eSAhmad Khalifa 	uint8_t			customer_id;
60*551b7c5eSAhmad Khalifa 	uint8_t			tx_bswing_2g;
61*551b7c5eSAhmad Khalifa 	uint8_t			reserved4;
62*551b7c5eSAhmad Khalifa 	uint8_t			tx_pwr_calib_rate;
63*551b7c5eSAhmad Khalifa 	uint8_t			rf_antenna_opt;
64*551b7c5eSAhmad Khalifa 	uint8_t			rfe_opt;
65*551b7c5eSAhmad Khalifa 	uint8_t			country_code;
66*551b7c5eSAhmad Khalifa 
67*551b7c5eSAhmad Khalifa 	struct {
68*551b7c5eSAhmad Khalifa 		uint8_t reserved1[52];
69*551b7c5eSAhmad Khalifa 		uint16_t vid;
70*551b7c5eSAhmad Khalifa 		uint16_t pid;
71*551b7c5eSAhmad Khalifa 		uint8_t reserved2[3];
72*551b7c5eSAhmad Khalifa 		uint8_t macaddr[IEEE80211_ADDR_LEN];
73*551b7c5eSAhmad Khalifa 		uint8_t reserved3[243];
74*551b7c5eSAhmad Khalifa 	} __packed usb;
75*551b7c5eSAhmad Khalifa } __packed;
76*551b7c5eSAhmad Khalifa 
77*551b7c5eSAhmad Khalifa _Static_assert(sizeof(struct r23b_rom) == R23B_EFUSE_MAP_LEN,
78*551b7c5eSAhmad Khalifa     "R23B_EFUSE_MAP_LEN must be equal to sizeof(struct r23b_rom)!");
79*551b7c5eSAhmad Khalifa 
80*551b7c5eSAhmad Khalifa #endif /* R23B_ROM_IMAGE_H */
81