MCPcopy Create free account
hub / github.com/cloud-hypervisor/cloud-hypervisor / load_uefi

Function load_uefi

arch/src/riscv64/uefi.rs:30–50  ·  view source on GitHub ↗
(
    guest_mem: &M,
    guest_addr: GuestAddress,
    uefi_image: &mut F,
)

Source from the content-addressed store, hash-verified

28type Result<T> = result::Result<T, Error>;
29
30pub fn load_uefi<F, M: GuestMemory>(
31 guest_mem: &M,
32 guest_addr: GuestAddress,
33 uefi_image: &mut F,
34) -> Result<()>
35where
36 F: Read + Seek + AsFd,
37{
38 let uefi_size = uefi_image
39 .seek(SeekFrom::End(0))
40 .map_err(|_| Error::SeekUefiEnd)? as usize;
41
42 // edk2 image on virtual platform is smaller than 3M
43 if uefi_size > 0x300000 {
44 return Err(Error::UefiTooBig);
45 }
46 uefi_image.rewind().map_err(|_| Error::SeekUefiStart)?;
47 guest_mem
48 .read_exact_volatile_from(guest_addr, &mut uefi_image.as_fd(), uefi_size)
49 .map_err(|_| Error::ReadUefiImage)
50}

Callers 1

load_firmwareMethod · 0.50

Calls 2

seekMethod · 0.45
as_fdMethod · 0.45

Tested by

no test coverage detected