1/* 2 * Copyright 2019, Data61, CSIRO (ABN 41 687 119 230) 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7#pragma once 8 9/*** 10 * @module guest_image.h 11 * The guest image interface provides general utilites to load guest vm images (e.g. kernel, initrd, modules). 12 * This interface probably stops being relevant/useful after we start running a VM instance. 13 */ 14 15#include <sel4vm/guest_vm.h> 16#include <sel4vmmplatsupport/arch/guest_image_arch.h> 17 18typedef struct guest_kernel_image_arch guest_kernel_image_arch_t; 19 20/*** 21 * @struct guest_image 22 * General datastructure for managing a guest image 23 * @param {uintptr_t} load_paddr Base address (in guest physical) where the image was loaded 24 * @param {size_t} alignment Alignment we used when loading the image 25 * @param {size_t} size Size of guest image 26 */ 27typedef struct guest_image { 28 uintptr_t load_paddr; 29 size_t alignment; 30 size_t size; 31} guest_image_t; 32 33/*** 34 * @struct guest_kernel_image 35 * Stores information about the guest kernel image we are loading. 36 * @param {guest_image_t} kernel_image Datastructure referring to guest kernel image 37 * @param {guest_kernel_image_arch_t} kernel_image_arch Architecture specific information for loaded guest image 38 */ 39typedef struct guest_kernel_image { 40 guest_image_t kernel_image; 41 guest_kernel_image_arch_t kernel_image_arch; 42} guest_kernel_image_t; 43 44/*** 45 * @function vm_load_guest_kernel(vm, kernel_name, load_address, alignment, guest_kernel_image) 46 * Load guest kernel image 47 * @param {vm_t *} vm Handle to the VM 48 * @param {const char *} kernel_name Name of the kernel image 49 * @param {uintptr_t} load_address Address to load guest kernel image at 50 * @param {size_t} alignment Alignment for loading kernel image 51 * @param {guest_kernel_image_t *} guest_kernel_image Handle to information regarding the resulted loading of the guest kernel image 52 * @return 0 on success, otherwise -1 on error 53 */ 54int vm_load_guest_kernel(vm_t *vm, const char *kernel_name, uintptr_t load_address, size_t alignment, 55 guest_kernel_image_t *guest_kernel_image); 56 57/*** 58 * @function vm_load_guest_module(vm, module_name, load_address, alignment, guest_image) 59 * Load guest kernel module e.g. initrd 60 * @param {vm_t *} vm Handle to the VM 61 * @param {const char *} module_name Name of the module image 62 * @param {uintptr_t} load_address Address to load guest kernel image at 63 * @param {size_t} alignment Alignment for loading module image 64 * @param {guest_image_t *} guest_image Handle to information regarding the resulted loading of the guest module image 65 * @return 0 on success, otherwise -1 on error 66 */ 67int vm_load_guest_module(vm_t *vm, const char *module_name, uintptr_t load_address, size_t alignment, 68 guest_image_t *guest_image); 69