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