1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
|
/******************************************************************************
* config.h
*
* A Linux-style configuration list.
*/
#ifndef __ARM_CONFIG_H__
#define __ARM_CONFIG_H__
#if defined(CONFIG_ARM_64)
# define LONG_BYTEORDER 3
# define ELFSIZE 64
#else
# define LONG_BYTEORDER 2
# define ELFSIZE 32
#endif
#define BYTES_PER_LONG (1 << LONG_BYTEORDER)
#define BITS_PER_LONG (BYTES_PER_LONG << 3)
#define POINTER_ALIGN BYTES_PER_LONG
#define BITS_PER_LLONG 64
/* xen_ulong_t is always 64 bits */
#define BITS_PER_XEN_ULONG 64
#define CONFIG_PAGING_LEVELS 3
#define CONFIG_ARM 1
#define CONFIG_ARM_L1_CACHE_SHIFT 7 /* XXX */
#define CONFIG_SMP 1
#define CONFIG_IRQ_HAS_MULTIPLE_ACTION 1
#define CONFIG_PAGEALLOC_MAX_ORDER 18
#define CONFIG_DOMU_MAX_ORDER 9
#define CONFIG_HWDOM_MAX_ORDER 10
#define OPT_CONSOLE_STR "dtuart"
#ifdef CONFIG_ARM_64
#define MAX_VIRT_CPUS 128u
#else
#define MAX_VIRT_CPUS 8u
#endif
#define INVALID_VCPU_ID MAX_VIRT_CPUS
#define __LINUX_ARM_ARCH__ 7
#define CONFIG_AEABI
/* Linkage for ARM */
#ifdef __ASSEMBLY__
#define ALIGN .align 2
#define ENTRY(name) \
.globl name; \
ALIGN; \
name:
#define GLOBAL(name) \
.globl name; \
name:
#define END(name) \
.size name, .-name
#define ENDPROC(name) \
.type name, %function; \
END(name)
#endif
#include <xen/const.h>
#include <xen/page-size.h>
/*
* ARM32 layout:
* 0 - 2M Unmapped
* 2M - 4M Xen text, data, bss
* 4M - 6M Fixmap: special-purpose 4K mapping slots
* 6M - 10M Early boot mapping of FDT
* 10M - 12M Livepatch vmap (if compiled in)
*
* 32M - 128M Frametable: 32 bytes per page for 12GB of RAM
* 256M - 1G VMAP: ioremap and early_ioremap use this virtual address
* space
*
* 1G - 2G Xenheap: always-mapped memory
* 2G - 4G Domheap: on-demand-mapped
*
* ARM64 layout:
* 0x0000000000000000 - 0x000001ffffffffff (2TB, L0 slots [0..3])
*
* Reserved to identity map Xen
*
* 0x0000020000000000 - 0x0000027fffffffff (512GB, L0 slot [4])
* (Relative offsets)
* 0 - 2M Unmapped
* 2M - 4M Xen text, data, bss
* 4M - 6M Fixmap: special-purpose 4K mapping slots
* 6M - 10M Early boot mapping of FDT
* 10M - 12M Livepatch vmap (if compiled in)
*
* 1G - 2G VMAP: ioremap and early_ioremap
*
* 32G - 64G Frametable: 56 bytes per page for 2TB of RAM
*
* 0x0000028000000000 - 0x00007fffffffffff (125TB, L0 slots [5..255])
* Unused
*
* 0x0000800000000000 - 0x000084ffffffffff (5TB, L0 slots [256..265])
* 1:1 mapping of RAM
*
* 0x0000850000000000 - 0x0000ffffffffffff (123TB, L0 slots [266..511])
* Unused
*/
#ifdef CONFIG_ARM_32
#define XEN_VIRT_START _AT(vaddr_t, MB(2))
#else
#define SLOT0_ENTRY_BITS 39
#define SLOT0(slot) (_AT(vaddr_t,slot) << SLOT0_ENTRY_BITS)
#define SLOT0_ENTRY_SIZE SLOT0(1)
#define XEN_VIRT_START (SLOT0(4) + _AT(vaddr_t, MB(2)))
#endif
#define XEN_VIRT_SIZE _AT(vaddr_t, MB(2))
#define FIXMAP_VIRT_START (XEN_VIRT_START + XEN_VIRT_SIZE)
#define FIXMAP_VIRT_SIZE _AT(vaddr_t, MB(2))
#define FIXMAP_ADDR(n) (FIXMAP_VIRT_START + (n) * PAGE_SIZE)
#define BOOT_FDT_VIRT_START (FIXMAP_VIRT_START + FIXMAP_VIRT_SIZE)
#define BOOT_FDT_VIRT_SIZE _AT(vaddr_t, MB(4))
#ifdef CONFIG_LIVEPATCH
#define LIVEPATCH_VMAP_START (BOOT_FDT_VIRT_START + BOOT_FDT_VIRT_SIZE)
#define LIVEPATCH_VMAP_SIZE _AT(vaddr_t, MB(2))
#endif
#define HYPERVISOR_VIRT_START XEN_VIRT_START
#ifdef CONFIG_ARM_32
#define CONFIG_SEPARATE_XENHEAP 1
#define FRAMETABLE_VIRT_START _AT(vaddr_t, MB(32))
#define FRAMETABLE_SIZE MB(128-32)
#define FRAMETABLE_NR (FRAMETABLE_SIZE / sizeof(*frame_table))
#define VMAP_VIRT_START _AT(vaddr_t, MB(256))
#define VMAP_VIRT_SIZE _AT(vaddr_t, GB(1) - MB(256))
#define XENHEAP_VIRT_START _AT(vaddr_t, GB(1))
#define XENHEAP_VIRT_SIZE _AT(vaddr_t, GB(1))
#define DOMHEAP_VIRT_START _AT(vaddr_t, GB(2))
#define DOMHEAP_VIRT_SIZE _AT(vaddr_t, GB(2))
#define DOMHEAP_ENTRIES 1024 /* 1024 2MB mapping slots */
/* Number of domheap pagetable pages required at the second level (2MB mappings) */
#define DOMHEAP_SECOND_PAGES (DOMHEAP_VIRT_SIZE >> FIRST_SHIFT)
/*
* The temporary area is overlapping with the domheap area. This may
* be used to create an alias of the first slot containing Xen mappings
* when turning on/off the MMU.
*/
#define TEMPORARY_AREA_FIRST_SLOT (first_table_offset(DOMHEAP_VIRT_START))
/* Calculate the address in the temporary area */
#define TEMPORARY_AREA_ADDR(addr) \
(((addr) & ~XEN_PT_LEVEL_MASK(1)) | \
(TEMPORARY_AREA_FIRST_SLOT << XEN_PT_LEVEL_SHIFT(1)))
#define TEMPORARY_XEN_VIRT_START TEMPORARY_AREA_ADDR(XEN_VIRT_START)
#else /* ARM_64 */
#define IDENTITY_MAPPING_AREA_NR_L0 4
#define VMAP_VIRT_START (SLOT0(4) + GB(1))
#define VMAP_VIRT_SIZE GB(1)
#define FRAMETABLE_VIRT_START (SLOT0(4) + GB(32))
#define FRAMETABLE_SIZE GB(32)
#define FRAMETABLE_NR (FRAMETABLE_SIZE / sizeof(*frame_table))
#define DIRECTMAP_VIRT_START SLOT0(256)
#define DIRECTMAP_SIZE (SLOT0_ENTRY_SIZE * (266 - 256))
#define DIRECTMAP_VIRT_END (DIRECTMAP_VIRT_START + DIRECTMAP_SIZE - 1)
#define XENHEAP_VIRT_START directmap_virt_start
#define HYPERVISOR_VIRT_END DIRECTMAP_VIRT_END
#endif
#define NR_hypercalls 64
#define STACK_ORDER 3
#define STACK_SIZE (PAGE_SIZE << STACK_ORDER)
#ifndef __ASSEMBLY__
extern unsigned long xen_phys_start;
extern unsigned long xenheap_phys_end;
extern unsigned long frametable_virt_end;
#endif
#define watchdog_disable() ((void)0)
#define watchdog_enable() ((void)0)
#if defined(__ASSEMBLY__) && !defined(LINKER_SCRIPT)
#include <asm/asm_defns.h>
#include <asm/macros.h>
#endif
#endif /* __ARM_CONFIG_H__ */
/*
* Local variables:
* mode: C
* c-file-style: "BSD"
* c-basic-offset: 4
* indent-tabs-mode: nil
* End:
*/
|