1 /* SPDX-License-Identifier: GPL-2.0-only */
2
3 #ifndef XEN_STATIC_SHMEM_H
4 #define XEN_STATIC_SHMEM_H
5
6 #include <xen/fdt-kernel.h>
7 #include <xen/types.h>
8
9 #ifdef CONFIG_STATIC_SHM
10
11 /* Worst case /memory node reg element: (addrcells + sizecells) */
12 #define DT_MEM_NODE_REG_RANGE_SIZE ((NR_MEM_BANKS + NR_SHMEM_BANKS) * 4)
13
14 int make_resv_memory_node(const struct kernel_info *kinfo, int addrcells,
15 int sizecells);
16
17 int process_shm(struct domain *d, struct kernel_info *kinfo,
18 const struct dt_device_node *node);
19
20 int process_shm_node(const void *fdt, int node, uint32_t address_cells,
21 uint32_t size_cells);
22
23 void early_print_info_shmem(void);
24
25 void init_sharedmem_pages(void);
26
27 int remove_shm_from_rangeset(const struct kernel_info *kinfo,
28 struct rangeset *rangeset);
29
30 int make_shm_resv_memory_node(const struct kernel_info *kinfo, int addrcells,
31 int sizecells);
32
33 void shm_mem_node_fill_reg_range(const struct kernel_info *kinfo, __be32 *reg,
34 int *nr_cells, int addrcells, int sizecells);
35
36 static inline struct membanks *
kernel_info_get_shm_mem(struct kernel_info * kinfo)37 kernel_info_get_shm_mem(struct kernel_info *kinfo)
38 {
39 return container_of(&kinfo->shm_mem.common, struct membanks, common);
40 }
41
42 static inline const struct membanks *
kernel_info_get_shm_mem_const(const struct kernel_info * kinfo)43 kernel_info_get_shm_mem_const(const struct kernel_info *kinfo)
44 {
45 return container_of(&kinfo->shm_mem.common, const struct membanks, common);
46 }
47
48 #else /* !CONFIG_STATIC_SHM */
49
50 /* Worst case /memory node reg element: (addrcells + sizecells) */
51 #define DT_MEM_NODE_REG_RANGE_SIZE (NR_MEM_BANKS * 4)
52
make_resv_memory_node(const struct kernel_info * kinfo,int addrcells,int sizecells)53 static inline int make_resv_memory_node(const struct kernel_info *kinfo,
54 int addrcells, int sizecells)
55 {
56 return 0;
57 }
58
process_shm(struct domain * d,struct kernel_info * kinfo,const struct dt_device_node * node)59 static inline int process_shm(struct domain *d, struct kernel_info *kinfo,
60 const struct dt_device_node *node)
61 {
62 return 0;
63 }
64
init_sharedmem_pages(void)65 static inline void init_sharedmem_pages(void) {};
66
remove_shm_from_rangeset(const struct kernel_info * kinfo,struct rangeset * rangeset)67 static inline int remove_shm_from_rangeset(const struct kernel_info *kinfo,
68 struct rangeset *rangeset)
69 {
70 return 0;
71 }
72
make_shm_resv_memory_node(const struct kernel_info * kinfo,int addrcells,int sizecells)73 static inline int make_shm_resv_memory_node(const struct kernel_info *kinfo,
74 int addrcells, int sizecells)
75 {
76 return 0;
77 }
78
shm_mem_node_fill_reg_range(const struct kernel_info * kinfo,__be32 * reg,int * nr_cells,int addrcells,int sizecells)79 static inline void shm_mem_node_fill_reg_range(const struct kernel_info *kinfo,
80 __be32 *reg, int *nr_cells,
81 int addrcells, int sizecells) {};
82
83 #endif /* CONFIG_STATIC_SHM */
84
85 #endif /* XEN_STATIC_SHMEM_H */
86
87 /*
88 * Local variables:
89 * mode: C
90 * c-file-style: "BSD"
91 * c-basic-offset: 4
92 * indent-tabs-mode: nil
93 * End:
94 */
95