drivers/edac/igen6_edac.c
Source file repositories/reference/linux-study-clean/drivers/edac/igen6_edac.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/edac/igen6_edac.c- Extension
.c- Size
- 52746 bytes
- Lines
- 1955
- Domain
- Driver Families
- Bucket
- drivers/edac
- Inferred role
- Driver Families: operation-table or driver-model contract
- Status
- pattern 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.
- Defines an operation table; this is where Linux turns generic core objects into subsystem-specific behavior.
- 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
linux/module.hlinux/init.hlinux/pci.hlinux/slab.hlinux/irq_work.hlinux/llist.hlinux/genalloc.hlinux/edac.hlinux/bits.hlinux/bitfield.hlinux/io.hasm/mach_traps.hasm/nmi.hasm/mce.hedac_mc.hedac_module.h
Detected Declarations
struct igen6_imcstruct decoded_addrstruct ecclog_nodefunction get_mchbarfunction ehl_ibecc_availablefunction ehl_err_addr_to_sys_addrfunction ehl_err_addr_to_imc_addrfunction icl_ibecc_availablefunction tgl_ibecc_availablefunction mtl_p_ibecc_availablefunction generic_ibecc_availablefunction mem_addr_to_sys_addrfunction mem_slice_hashfunction tgl_err_addr_to_mem_addrfunction tgl_err_addr_to_sys_addrfunction tgl_err_addr_to_imc_addrfunction adl_err_addr_to_sys_addrfunction adl_err_addr_to_imc_addrfunction rpl_p_err_addrfunction ptl_h_get_mem_typefunction ptl_h_get_dev_typefunction ptl_h_get_chan_sizefunction ptl_h_get_dimm_sizefunction ptl_h_set_chan_paramsfunction ptl_h_set_dimm_paramsfunction get_mem_typefunction large_dimmfunction get_dev_typefunction get_dimm_sizefunction set_chan_paramsfunction set_dimm_paramsfunction decode_chan_idxfunction decode_channel_addrfunction decode_addrfunction igen6_decodefunction igen6_output_errorfunction ecclog_gen_pool_addfunction ecclog_read_and_clearfunction errsts_clearfunction errcmd_enable_error_reportingfunction ecclog_handlerfunction ecclog_work_cbfunction llist_for_each_entry_safefunction ecclog_irq_work_cbfunction ecclog_nmi_handlerfunction ecclog_mce_handlerfunction igen6_check_eccfunction igen6_get_dimm_config
Annotated Snippet
static struct pci_driver igen6_driver = {
.name = EDAC_MOD_STR,
.probe = igen6_probe,
.remove = igen6_remove,
.id_table = igen6_pci_tbl,
};
static int __init igen6_init(void)
{
const char *owner;
int rc;
edac_dbg(2, "\n");
if (ghes_get_devices())
return -EBUSY;
owner = edac_get_owner();
if (owner && strncmp(owner, EDAC_MOD_STR, sizeof(EDAC_MOD_STR)))
return -EBUSY;
rc = pci_register_driver(&igen6_driver);
if (rc)
return rc;
igen6_printk(KERN_INFO, "%s\n", IGEN6_REVISION);
return 0;
}
static void __exit igen6_exit(void)
{
edac_dbg(2, "\n");
pci_unregister_driver(&igen6_driver);
}
module_init(igen6_init);
module_exit(igen6_exit);
MODULE_LICENSE("GPL v2");
MODULE_AUTHOR("Qiuxu Zhuo");
MODULE_DESCRIPTION("MC Driver for Intel client SoC using In-Band ECC");
Annotation
- Immediate include surface: `linux/module.h`, `linux/init.h`, `linux/pci.h`, `linux/slab.h`, `linux/irq_work.h`, `linux/llist.h`, `linux/genalloc.h`, `linux/edac.h`.
- Detected declarations: `struct igen6_imc`, `struct decoded_addr`, `struct ecclog_node`, `function get_mchbar`, `function ehl_ibecc_available`, `function ehl_err_addr_to_sys_addr`, `function ehl_err_addr_to_imc_addr`, `function icl_ibecc_available`, `function tgl_ibecc_available`, `function mtl_p_ibecc_available`.
- Atlas domain: Driver Families / drivers/edac.
- Implementation status: pattern 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.