1 /* 2 * Kernel image loading. 3 * 4 * Copyright (C) 2011 Citrix Systems, Inc. 5 */ 6 #ifndef __ARCH_ARM_KERNEL_H__ 7 #define __ARCH_ARM_KERNEL_H__ 8 9 #include <xen/libelf.h> 10 #include <xen/device_tree.h> 11 #include <asm/setup.h> 12 13 struct kernel_info { 14 #ifdef CONFIG_ARM_64 15 enum domain_type type; 16 #endif 17 18 void *fdt; /* flat device tree */ 19 paddr_t unassigned_mem; /* RAM not (yet) assigned to a bank */ 20 struct meminfo mem; 21 22 /* kernel entry point */ 23 paddr_t entry; 24 25 /* grant table region */ 26 paddr_t gnttab_start; 27 paddr_t gnttab_size; 28 29 /* boot blob load addresses */ 30 const struct bootmodule *kernel_bootmodule, *initrd_bootmodule; 31 paddr_t dtb_paddr; 32 paddr_t initrd_paddr; 33 34 /* loader to use for this kernel */ 35 void (*load)(struct kernel_info *info); 36 /* loader specific state */ 37 union { 38 struct { 39 paddr_t kernel_addr; 40 paddr_t len; 41 #ifdef CONFIG_ARM_64 42 paddr_t text_offset; /* 64-bit Image only */ 43 #endif 44 paddr_t start; /* 32-bit zImage only */ 45 } zimage; 46 47 struct { 48 struct elf_binary elf; 49 struct elf_dom_parms parms; 50 unsigned kernel_order; 51 void *kernel_img; 52 } elf; 53 }; 54 }; 55 56 /* 57 * Probe the kernel to detemine its type and select a loader. 58 * 59 * Sets in info: 60 * ->type 61 * ->load hook, and sets loader specific variables ->{zimage,elf} 62 */ 63 int kernel_probe(struct kernel_info *info); 64 65 /* 66 * Loads the kernel into guest RAM. 67 * 68 * Expects to be set in info when called: 69 * ->mem 70 * ->fdt 71 * 72 * Sets in info: 73 * ->entry 74 * ->dtb_paddr 75 * ->initrd_paddr 76 */ 77 void kernel_load(struct kernel_info *info); 78 79 #endif /* #ifdef __ARCH_ARM_KERNEL_H__ */ 80 81 /* 82 * Local variables: 83 * mode: C 84 * c-file-style: "BSD" 85 * c-basic-offset: 4 86 * indent-tabs-mode: nil 87 * End: 88 */ 89