blob: d0c9a52c8c288cfd725684e0fcd9bd7100866206 (
plain)
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
|
/*
* fixmap.h: compile-time virtual memory allocation
*/
#ifndef __ASM_FIXMAP_H
#define __ASM_FIXMAP_H
#include <xen/acpi.h>
#include <xen/pmap.h>
/* Fixmap slots */
#define FIXMAP_CONSOLE 0 /* The primary UART */
#define FIXMAP_MISC 1 /* Ephemeral mappings of hardware */
#define FIXMAP_ACPI_BEGIN 2 /* Start mappings of ACPI tables */
#define FIXMAP_ACPI_END (FIXMAP_ACPI_BEGIN + NUM_FIXMAP_ACPI_PAGES - 1) /* End mappings of ACPI tables */
#define FIXMAP_PMAP_BEGIN (FIXMAP_ACPI_END + 1) /* Start of PMAP */
#define FIXMAP_PMAP_END (FIXMAP_PMAP_BEGIN + NUM_FIX_PMAP - 1) /* End of PMAP */
#define FIXMAP_LAST FIXMAP_PMAP_END
#define FIXADDR_START FIXMAP_ADDR(0)
#define FIXADDR_TOP FIXMAP_ADDR(FIXMAP_LAST)
#ifndef __ASSEMBLY__
/*
* Direct access to xen_fixmap[] should only happen when {set,
* clear}_fixmap() is unusable (e.g. where we would end up to
* recursively call the helpers).
*/
extern lpae_t xen_fixmap[XEN_PT_LPAE_ENTRIES];
/* Map a page in a fixmap entry */
extern void set_fixmap(unsigned int map, mfn_t mfn, unsigned int attributes);
/* Remove a mapping from a fixmap entry */
extern void clear_fixmap(unsigned int map);
#define fix_to_virt(slot) ((void *)FIXMAP_ADDR(slot))
static inline unsigned int virt_to_fix(vaddr_t vaddr)
{
BUG_ON(vaddr >= FIXADDR_TOP || vaddr < FIXADDR_START);
return ((vaddr - FIXADDR_START) >> PAGE_SHIFT);
}
#endif /* __ASSEMBLY__ */
#endif /* __ASM_FIXMAP_H */
|