* Fake up a boot descriptor table */
| 347 | * Fake up a boot descriptor table |
| 348 | */ |
| 349 | vm_offset_t |
| 350 | fake_preload_metadata(struct arm_boot_params *abp __unused, void *dtb_ptr, |
| 351 | size_t dtb_size) |
| 352 | { |
| 353 | vm_offset_t lastaddr; |
| 354 | int i = 0; |
| 355 | static uint32_t fake_preload[35]; |
| 356 | |
| 357 | lastaddr = (vm_offset_t)&end; |
| 358 | |
| 359 | fake_preload[i++] = MODINFO_NAME; |
| 360 | fake_preload[i++] = strlen("kernel") + 1; |
| 361 | strcpy((char*)&fake_preload[i++], "kernel"); |
| 362 | i += 1; |
| 363 | fake_preload[i++] = MODINFO_TYPE; |
| 364 | fake_preload[i++] = strlen("elf kernel") + 1; |
| 365 | strcpy((char*)&fake_preload[i++], "elf kernel"); |
| 366 | i += 2; |
| 367 | fake_preload[i++] = MODINFO_ADDR; |
| 368 | fake_preload[i++] = sizeof(vm_offset_t); |
| 369 | fake_preload[i++] = KERNVIRTADDR; |
| 370 | fake_preload[i++] = MODINFO_SIZE; |
| 371 | fake_preload[i++] = sizeof(uint32_t); |
| 372 | fake_preload[i++] = (uint32_t)&end - KERNVIRTADDR; |
| 373 | if (dtb_ptr != NULL) { |
| 374 | /* Copy DTB to KVA space and insert it into module chain. */ |
| 375 | lastaddr = roundup(lastaddr, sizeof(int)); |
| 376 | fake_preload[i++] = MODINFO_METADATA | MODINFOMD_DTBP; |
| 377 | fake_preload[i++] = sizeof(uint32_t); |
| 378 | fake_preload[i++] = (uint32_t)lastaddr; |
| 379 | memmove((void *)lastaddr, dtb_ptr, dtb_size); |
| 380 | lastaddr += dtb_size; |
| 381 | lastaddr = roundup(lastaddr, sizeof(int)); |
| 382 | } |
| 383 | fake_preload[i++] = 0; |
| 384 | fake_preload[i] = 0; |
| 385 | preload_metadata = (void *)fake_preload; |
| 386 | |
| 387 | init_static_kenv(NULL, 0); |
| 388 | |
| 389 | return (lastaddr); |
| 390 | } |
| 391 | |
| 392 | #ifdef EFI |
| 393 | void |
no test coverage detected