MCPcopy Create free account
hub / github.com/F-Stack/f-stack / native_parse_memmap

Function native_parse_memmap

freebsd/amd64/amd64/machdep.c:1176–1206  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1174 "System firmware boot method");
1175
1176static void
1177native_parse_memmap(caddr_t kmdp, vm_paddr_t *physmap, int *physmap_idx)
1178{
1179 struct bios_smap *smap;
1180 struct efi_map_header *efihdr;
1181 u_int32_t size;
1182
1183 /*
1184 * Memory map from INT 15:E820.
1185 *
1186 * subr_module.c says:
1187 * "Consumer may safely assume that size value precedes data."
1188 * ie: an int32_t immediately precedes smap.
1189 */
1190
1191 efihdr = (struct efi_map_header *)preload_search_info(kmdp,
1192 MODINFO_METADATA | MODINFOMD_EFI_MAP);
1193 smap = (struct bios_smap *)preload_search_info(kmdp,
1194 MODINFO_METADATA | MODINFOMD_SMAP);
1195 if (efihdr == NULL && smap == NULL)
1196 panic("No BIOS smap or EFI map info from loader!");
1197
1198 if (efihdr != NULL) {
1199 add_efi_map_entries(efihdr, physmap, physmap_idx);
1200 strlcpy(bootmethod, "UEFI", sizeof(bootmethod));
1201 } else {
1202 size = *((u_int32_t *)smap - 1);
1203 bios_add_smap_entries(smap, size, physmap, physmap_idx);
1204 strlcpy(bootmethod, "BIOS", sizeof(bootmethod));
1205 }
1206}
1207
1208#define PAGES_PER_GB (1024 * 1024 * 1024 / PAGE_SIZE)
1209

Callers

nothing calls this directly

Calls 5

preload_search_infoFunction · 0.85
bios_add_smap_entriesFunction · 0.85
add_efi_map_entriesFunction · 0.70
panicFunction · 0.50
strlcpyFunction · 0.50

Tested by

no test coverage detected