string "Name of the command line arguments file"
default "$(UK_NAME).cmdl"
+config KVM_BOOT_EFI_STUB_INITRD_FNAME
+ string "Name of the initial RAM disk file"
+ default "$(UK_NAME).initrd"
+
endif
choice
bi->cmdline_len = len;
}
+static void uk_efi_setup_bootinfo_initrd(struct ukplat_bootinfo *bi)
+{
+ struct ukplat_memregion_desc mrd = {0};
+ struct uk_efi_ld_img_hndl *uk_img_hndl;
+ char *initrd;
+ __sz len;
+ int rc;
+
+ if (sizeof(CONFIG_KVM_BOOT_EFI_STUB_INITRD_FNAME) <= 1)
+ return;
+
+ uk_img_hndl = uk_efi_get_uk_img_hndl();
+
+ uk_efi_read_file(uk_img_hndl->device_handle,
+ UK_EFI_ABS_FNAME(CONFIG_KVM_BOOT_EFI_STUB_INITRD_FNAME),
+ (char **)&initrd, &len);
+
+ mrd.pbase = (__paddr_t)initrd;
+ mrd.vbase = (__vaddr_t)initrd;
+ mrd.len = PAGE_ALIGN_UP(len);
+ mrd.type = UKPLAT_MEMRT_INITRD;
+ mrd.flags = UKPLAT_MEMRF_READ | UKPLAT_MEMRF_MAP;
+ rc = ukplat_memregion_list_insert(&bi->mrds, &mrd);
+ if (unlikely(rc < 0))
+ uk_efi_crash("Failed to insert initrd mrd\n");
+}
+
static void uk_efi_setup_bootinfo(void)
{
const char bl[] = "EFI_STUB";
memcpy(bi->bootloader, bl, sizeof(bl));
memcpy(bi->bootprotocol, bp, sizeof(bp));
uk_efi_setup_bootinfo_cmdl(bi);
+ uk_efi_setup_bootinfo_initrd(bi);
uk_efi_setup_bootinfo_mrds(bi);
bi->efi_st = (__u64)uk_efi_st;