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