2010-09-01 02:01:16 +04:00
# ifndef _XEN_PAGE_H
# define _XEN_PAGE_H
2015-05-04 17:47:16 +03:00
# include <asm/page.h>
/* The hypercall interface supports only 4KB page */
# define XEN_PAGE_SHIFT 12
# define XEN_PAGE_SIZE (_AC(1, UL) << XEN_PAGE_SHIFT)
# define XEN_PAGE_MASK (~(XEN_PAGE_SIZE-1))
# define xen_offset_in_page(p) ((unsigned long)(p) & ~XEN_PAGE_MASK)
/*
* We assume that PAGE_SIZE is a multiple of XEN_PAGE_SIZE
* XXX : Add a BUILD_BUG_ON ?
*/
# define xen_pfn_to_page(xen_pfn) \
( ( pfn_to_page ( ( ( unsigned long ) ( xen_pfn ) < < XEN_PAGE_SHIFT ) > > PAGE_SHIFT ) ) )
# define page_to_xen_pfn(page) \
( ( ( page_to_pfn ( page ) ) < < PAGE_SHIFT ) > > XEN_PAGE_SHIFT )
# define XEN_PFN_PER_PAGE (PAGE_SIZE / XEN_PAGE_SIZE)
# define XEN_PFN_DOWN(x) ((x) >> XEN_PAGE_SHIFT)
# define XEN_PFN_UP(x) (((x) + XEN_PAGE_SIZE-1) >> XEN_PAGE_SHIFT)
# define XEN_PFN_PHYS(x) ((phys_addr_t)(x) << XEN_PAGE_SHIFT)
2008-04-02 21:53:58 +04:00
# include <asm/xen/page.h>
2010-09-01 02:01:16 +04:00
2015-05-04 17:47:16 +03:00
/* Return the GFN associated to the first 4KB of the page */
2015-08-07 19:34:37 +03:00
static inline unsigned long xen_page_to_gfn ( struct page * page )
2015-01-13 20:16:42 +03:00
{
2015-05-04 17:47:16 +03:00
return pfn_to_gfn ( page_to_xen_pfn ( page ) ) ;
2015-01-13 20:16:42 +03:00
}
2011-09-28 20:46:34 +04:00
struct xen_memory_region {
2015-09-04 15:05:51 +03:00
unsigned long start_pfn ;
unsigned long n_pfns ;
2011-09-28 20:46:34 +04:00
} ;
# define XEN_EXTRA_MEM_MAX_REGIONS 128 /* == E820MAX */
extern __initdata
struct xen_memory_region xen_extra_mem [ XEN_EXTRA_MEM_MAX_REGIONS ] ;
2010-09-01 02:01:16 +04:00
2011-09-28 20:46:32 +04:00
extern unsigned long xen_released_pages ;
2010-09-01 02:01:16 +04:00
# endif /* _XEN_PAGE_H */