drivers/firmware/efi/arm-runtime.c
Source file repositories/reference/linux-study-clean/drivers/firmware/efi/arm-runtime.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/firmware/efi/arm-runtime.c- Extension
.c- Size
- 3878 bytes
- Lines
- 179
- Domain
- Driver Families
- Bucket
- drivers/firmware
- 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
linux/dmi.hlinux/efi.hlinux/io.hlinux/memblock.hlinux/mm_types.hlinux/pgalloc.hlinux/pgtable.hlinux/preempt.hlinux/rbtree.hlinux/rwsem.hlinux/sched.hlinux/slab.hlinux/spinlock.hasm/cacheflush.hasm/efi.hasm/mmu.hasm/ptdump.h
Detected Declarations
function Copyrightfunction ptdump_initfunction efi_virtmap_initfunction for_each_efi_memory_descfunction arm_enable_runtime_servicesfunction for_each_efi_memory_descfunction efi_virtmap_loadfunction efi_virtmap_unloadfunction arm_dmi_initmodule init ptdump_initmodule init arm_dmi_init
Annotated Snippet
device_initcall(ptdump_init);
#endif
static bool __init efi_virtmap_init(void)
{
efi_memory_desc_t *md;
efi_mm.pgd = pgd_alloc(&efi_mm);
mm_init_cpumask(&efi_mm);
init_new_context(NULL, &efi_mm);
for_each_efi_memory_desc(md) {
phys_addr_t phys = md->phys_addr;
int ret;
if (!(md->attribute & EFI_MEMORY_RUNTIME))
continue;
if (md->virt_addr == U64_MAX)
return false;
ret = efi_create_mapping(&efi_mm, md);
if (ret) {
pr_warn(" EFI remap %pa: failed to create mapping (%d)\n",
&phys, ret);
return false;
}
}
if (efi_memattr_apply_permissions(&efi_mm, efi_set_mapping_permissions))
return false;
return true;
}
/*
* Enable the UEFI Runtime Services if all prerequisites are in place, i.e.,
* non-early mapping of the UEFI system table and virtual mappings for all
* EFI_MEMORY_RUNTIME regions.
*/
static int __init arm_enable_runtime_services(void)
{
u64 mapsize;
if (!efi_enabled(EFI_BOOT)) {
pr_info("EFI services will not be available.\n");
return 0;
}
efi_memmap_unmap();
mapsize = efi.memmap.desc_size * efi.memmap.nr_map;
if (efi_memmap_init_late(efi.memmap.phys_map, mapsize)) {
pr_err("Failed to remap EFI memory map\n");
return 0;
}
if (efi_soft_reserve_enabled()) {
efi_memory_desc_t *md;
for_each_efi_memory_desc(md) {
u64 md_size = md->num_pages << EFI_PAGE_SHIFT;
struct resource *res;
if (!(md->attribute & EFI_MEMORY_SP))
continue;
res = kzalloc_obj(*res);
if (WARN_ON(!res))
break;
res->start = md->phys_addr;
res->end = md->phys_addr + md_size - 1;
res->name = "Soft Reserved";
res->flags = IORESOURCE_MEM;
res->desc = IORES_DESC_SOFT_RESERVED;
insert_resource(&iomem_resource, res);
}
}
if (efi_runtime_disabled()) {
pr_info("EFI runtime services will be disabled.\n");
return 0;
}
if (efi_enabled(EFI_RUNTIME_SERVICES)) {
pr_info("EFI runtime services access via paravirt.\n");
return 0;
Annotation
- Immediate include surface: `linux/dmi.h`, `linux/efi.h`, `linux/io.h`, `linux/memblock.h`, `linux/mm_types.h`, `linux/pgalloc.h`, `linux/pgtable.h`, `linux/preempt.h`.
- Detected declarations: `function Copyright`, `function ptdump_init`, `function efi_virtmap_init`, `function for_each_efi_memory_desc`, `function arm_enable_runtime_services`, `function for_each_efi_memory_desc`, `function efi_virtmap_load`, `function efi_virtmap_unload`, `function arm_dmi_init`, `module init ptdump_init`.
- Atlas domain: Driver Families / drivers/firmware.
- 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.