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