1 /* SPDX-License-Identifier: GPL-2.0-only */
2
3 #ifndef __XEN_FDT_DOMAIN_BUILD_H__
4 #define __XEN_FDT_DOMAIN_BUILD_H__
5
6 #include <xen/bootinfo.h>
7 #include <xen/device_tree.h>
8 #include <xen/fdt-kernel.h>
9 #include <xen/mm.h>
10 #include <xen/types.h>
11
12 struct domain;
13 struct page_info;
14 struct membanks;
15
16 typedef bool (*alloc_domheap_mem_cb)(struct domain *d, struct page_info *pg,
17 unsigned int order, void *extra);
18 bool allocate_domheap_memory(struct domain *d, paddr_t tot_size,
19 alloc_domheap_mem_cb cb, void *extra);
20
21 bool allocate_bank_memory(struct kernel_info *kinfo, gfn_t sgfn,
22 paddr_t tot_size);
23 void allocate_memory(struct domain *d, struct kernel_info *kinfo);
24 int construct_domain(struct domain *d, struct kernel_info *kinfo);
25 int construct_hwdom(struct kernel_info *kinfo,
26 const struct dt_device_node *node);
27 int make_chosen_node(const struct kernel_info *kinfo);
28 int make_cpus_node(const struct domain *d, void *fdt);
29 int make_hypervisor_node(struct domain *d, const struct kernel_info *kinfo,
30 int addrcells, int sizecells);
31 int make_memory_node(const struct kernel_info *kinfo, int addrcells,
32 int sizecells, const struct membanks *mem);
33 int make_timer_node(const struct kernel_info *kinfo);
34
get_allocation_size(paddr_t size)35 static inline int get_allocation_size(paddr_t size)
36 {
37 /*
38 * get_order_from_bytes returns the order greater than or equal to
39 * the given size, but we need less than or equal. Adding one to
40 * the size pushes an evenly aligned size into the next order, so
41 * we can then unconditionally subtract 1 from the order which is
42 * returned.
43 */
44 return get_order_from_bytes(size + 1) - 1;
45 }
46
47 typedef unsigned long (*copy_to_guest_phys_cb)(struct domain *d,
48 paddr_t gpa,
49 void *buf,
50 unsigned int len);
51
52 void initrd_load(struct kernel_info *kinfo,
53 copy_to_guest_phys_cb cb);
54
55 void dtb_load(struct kernel_info *kinfo,
56 copy_to_guest_phys_cb cb);
57
58 int find_unallocated_memory(const struct kernel_info *kinfo,
59 const struct membanks *mem_banks[],
60 unsigned int nr_mem_banks,
61 struct membanks *free_regions,
62 int (*cb)(unsigned long s_gfn,
63 unsigned long e_gfn,
64 void *data));
65
66 #endif /* __XEN_FDT_DOMAIN_BUILD_H__ */
67
68 /*
69 * Local variables:
70 * mode: C
71 * c-file-style: "BSD"
72 * c-basic-offset: 4
73 * indent-tabs-mode: nil
74 * End:
75 */
76