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