drivers/net/wireless/realtek/rtw89/efuse.c
Source file repositories/reference/linux-study-clean/drivers/net/wireless/realtek/rtw89/efuse.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/net/wireless/realtek/rtw89/efuse.c- Extension
.c- Size
- 13234 bytes
- Lines
- 522
- Domain
- Driver Families
- Bucket
- drivers/net
- Inferred role
- Driver Families: exported/initcall integration point
- Status
- integration implementation candidate
Why This File Exists
Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Exports symbols or registers init work; inspect boot/module ordering and who consumes the exported contract.
- Allocates kernel memory; connect allocation flags and lifetime to context constraints.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
debug.hefuse.hmac.hreg.h
Detected Declarations
enum rtw89_efuse_bankenum rtw89_efuse_mss_dev_typefunction rtw89_switch_efuse_bankfunction rtw89_enable_otp_burst_modefunction rtw89_enable_efuse_pwr_cut_ddvfunction rtw89_disable_efuse_pwr_cut_ddvfunction rtw89_dump_physical_efuse_map_ddvfunction rtw89_cnv_efuse_state_axfunction rtw89_dump_physical_efuse_map_davfunction __rtw89_dump_physical_efuse_mapfunction rtw89_dump_physical_efuse_mapfunction rtw89_dump_logical_efuse_mapfunction rtw89_parse_efuse_map_axfunction rtw89_parse_phycap_map_axfunction rtw89_read_efuse_verfunction get_mss_dev_type_idxfunction rtw89_efuse_recognize_mss_info_v1function rtw89_efuse_recognize_mss_index_v0function rtw89_efuse_read_fw_secure_axexport rtw89_read_efuse_ver
Annotated Snippet
if (ret) {
rtw89_warn(rtwdev, "failed to read dav efuse\n");
return ret;
}
ret = rtw89_mac_read_xtal_si(rtwdev, XTAL_SI_READ_VAL, &val8);
if (ret)
return ret;
*map++ = val8;
}
return 0;
}
static int __rtw89_dump_physical_efuse_map(struct rtw89_dev *rtwdev, u8 *map,
u32 dump_addr, u32 dump_size, bool dav)
{
int ret;
if (!map || dump_size == 0)
return 0;
rtw89_switch_efuse_bank(rtwdev, RTW89_EFUSE_BANK_WIFI);
if (dav) {
ret = rtw89_dump_physical_efuse_map_dav(rtwdev, map, dump_addr, dump_size);
if (ret)
return ret;
} else {
ret = rtw89_dump_physical_efuse_map_ddv(rtwdev, map, dump_addr, dump_size);
if (ret)
return ret;
}
return 0;
}
static int rtw89_dump_physical_efuse_map(struct rtw89_dev *rtwdev, u8 *map,
u32 dump_addr, u32 dump_size, bool dav)
{
int retry;
int ret;
for (retry = 0; retry < 5; retry++) {
ret = __rtw89_dump_physical_efuse_map(rtwdev, map, dump_addr,
dump_size, dav);
if (!ret)
return 0;
rtw89_warn(rtwdev, "efuse dump (dav=%d) failed, retrying (%d)\n",
dav, retry);
}
return ret;
}
#define invalid_efuse_header(hdr1, hdr2) \
((hdr1) == 0xff || (hdr2) == 0xff)
#define invalid_efuse_content(word_en, i) \
(((word_en) & BIT(i)) != 0x0)
#define get_efuse_blk_idx(hdr1, hdr2) \
((((hdr2) & 0xf0) >> 4) | (((hdr1) & 0x0f) << 4))
#define block_idx_to_logical_idx(blk_idx, i) \
(((blk_idx) << 3) + ((i) << 1))
static int rtw89_dump_logical_efuse_map(struct rtw89_dev *rtwdev, u8 *phy_map,
u8 *log_map)
{
u32 physical_size = rtwdev->chip->physical_efuse_size;
u32 logical_size = rtwdev->chip->logical_efuse_size;
u8 sec_ctrl_size = rtwdev->chip->sec_ctrl_efuse_size;
u32 phy_idx = sec_ctrl_size;
u32 log_idx;
u8 hdr1, hdr2;
u8 blk_idx;
u8 word_en;
int i;
if (!phy_map)
return 0;
while (phy_idx < physical_size - sec_ctrl_size) {
hdr1 = phy_map[phy_idx];
hdr2 = phy_map[phy_idx + 1];
if (invalid_efuse_header(hdr1, hdr2))
break;
blk_idx = get_efuse_blk_idx(hdr1, hdr2);
word_en = hdr2 & 0xf;
phy_idx += 2;
Annotation
- Immediate include surface: `debug.h`, `efuse.h`, `mac.h`, `reg.h`.
- Detected declarations: `enum rtw89_efuse_bank`, `enum rtw89_efuse_mss_dev_type`, `function rtw89_switch_efuse_bank`, `function rtw89_enable_otp_burst_mode`, `function rtw89_enable_efuse_pwr_cut_ddv`, `function rtw89_disable_efuse_pwr_cut_ddv`, `function rtw89_dump_physical_efuse_map_ddv`, `function rtw89_cnv_efuse_state_ax`, `function rtw89_dump_physical_efuse_map_dav`, `function __rtw89_dump_physical_efuse_map`.
- Atlas domain: Driver Families / drivers/net.
- Implementation status: integration implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.