diff options
Diffstat (limited to 'include/xen/page.h')
-rw-r--r-- | include/xen/page.h | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/include/xen/page.h b/include/xen/page.h index 1daae485e336..96294ac93755 100644 --- a/include/xen/page.h +++ b/include/xen/page.h | |||
@@ -1,11 +1,36 @@ | |||
1 | #ifndef _XEN_PAGE_H | 1 | #ifndef _XEN_PAGE_H |
2 | #define _XEN_PAGE_H | 2 | #define _XEN_PAGE_H |
3 | 3 | ||
4 | #include <asm/page.h> | ||
5 | |||
6 | /* The hypercall interface supports only 4KB page */ | ||
7 | #define XEN_PAGE_SHIFT 12 | ||
8 | #define XEN_PAGE_SIZE (_AC(1, UL) << XEN_PAGE_SHIFT) | ||
9 | #define XEN_PAGE_MASK (~(XEN_PAGE_SIZE-1)) | ||
10 | #define xen_offset_in_page(p) ((unsigned long)(p) & ~XEN_PAGE_MASK) | ||
11 | |||
12 | /* | ||
13 | * We assume that PAGE_SIZE is a multiple of XEN_PAGE_SIZE | ||
14 | * XXX: Add a BUILD_BUG_ON? | ||
15 | */ | ||
16 | |||
17 | #define xen_pfn_to_page(xen_pfn) \ | ||
18 | ((pfn_to_page(((unsigned long)(xen_pfn) << XEN_PAGE_SHIFT) >> PAGE_SHIFT))) | ||
19 | #define page_to_xen_pfn(page) \ | ||
20 | (((page_to_pfn(page)) << PAGE_SHIFT) >> XEN_PAGE_SHIFT) | ||
21 | |||
22 | #define XEN_PFN_PER_PAGE (PAGE_SIZE / XEN_PAGE_SIZE) | ||
23 | |||
24 | #define XEN_PFN_DOWN(x) ((x) >> XEN_PAGE_SHIFT) | ||
25 | #define XEN_PFN_UP(x) (((x) + XEN_PAGE_SIZE-1) >> XEN_PAGE_SHIFT) | ||
26 | #define XEN_PFN_PHYS(x) ((phys_addr_t)(x) << XEN_PAGE_SHIFT) | ||
27 | |||
4 | #include <asm/xen/page.h> | 28 | #include <asm/xen/page.h> |
5 | 29 | ||
30 | /* Return the GFN associated to the first 4KB of the page */ | ||
6 | static inline unsigned long xen_page_to_gfn(struct page *page) | 31 | static inline unsigned long xen_page_to_gfn(struct page *page) |
7 | { | 32 | { |
8 | return pfn_to_gfn(page_to_pfn(page)); | 33 | return pfn_to_gfn(page_to_xen_pfn(page)); |
9 | } | 34 | } |
10 | 35 | ||
11 | struct xen_memory_region { | 36 | struct xen_memory_region { |