2008-04-02 10:53:55 -07:00
# ifndef INCLUDE_XEN_OPS_H
# define INCLUDE_XEN_OPS_H
# include <linux/percpu.h>
2014-02-26 11:30:30 +01:00
# include <linux/notifier.h>
2014-06-30 19:53:02 +02:00
# include <linux/efi.h>
2012-10-16 17:19:15 +01:00
# include <asm/xen/interface.h>
2008-04-02 10:53:55 -07:00
DECLARE_PER_CPU ( struct vcpu_info * , xen_vcpu ) ;
2011-02-17 11:04:20 +00:00
void xen_arch_pre_suspend ( void ) ;
void xen_arch_post_suspend ( int suspend_cancelled ) ;
2008-05-26 23:31:27 +01:00
2008-07-08 15:06:32 -07:00
void xen_timer_resume ( void ) ;
void xen_arch_resume ( void ) ;
2015-04-28 18:46:20 -04:00
void xen_arch_suspend ( void ) ;
2008-07-08 15:06:32 -07:00
2014-02-26 11:30:30 +01:00
void xen_resume_notifier_register ( struct notifier_block * nb ) ;
void xen_resume_notifier_unregister ( struct notifier_block * nb ) ;
2010-05-14 12:45:07 +01:00
int xen_setup_shutdown_event ( void ) ;
2009-02-09 12:05:46 -08:00
extern unsigned long * xen_contiguous_bitmap ;
2013-10-10 13:41:10 +00:00
int xen_create_contiguous_region ( phys_addr_t pstart , unsigned int order ,
2013-10-09 16:56:32 +00:00
unsigned int address_bits ,
dma_addr_t * dma_handle ) ;
2009-02-09 12:05:46 -08:00
2013-10-10 13:41:10 +00:00
void xen_destroy_contiguous_region ( phys_addr_t pstart , unsigned int order ) ;
2009-02-09 12:05:46 -08:00
2012-03-28 18:30:02 +01:00
struct vm_area_struct ;
2015-03-11 14:49:57 +00:00
/*
* xen_remap_domain_mfn_array ( ) - map an array of foreign frames
* @ vma : VMA to map the pages into
* @ addr : Address at which to map the pages
* @ gfn : Array of GFNs to map
* @ nr : Number entries in the GFN array
* @ err_ptr : Returns per - GFN error status .
* @ prot : page protection mask
* @ domid : Domain owning the pages
* @ pages : Array of pages if this domain has an auto - translated physmap
*
* @ gfn and @ err_ptr may point to the same buffer , the GFNs will be
* overwritten by the error codes after they are mapped .
*
* Returns the number of successfully mapped frames , or a - ve error
* code .
*/
int xen_remap_domain_mfn_array ( struct vm_area_struct * vma ,
unsigned long addr ,
xen_pfn_t * gfn , int nr ,
int * err_ptr , pgprot_t prot ,
unsigned domid ,
struct page * * pages ) ;
/* xen_remap_domain_mfn_range() - map a range of foreign frames
* @ vma : VMA to map the pages into
* @ addr : Address at which to map the pages
* @ gfn : First GFN to map .
* @ nr : Number frames to map
* @ prot : page protection mask
* @ domid : Domain owning the pages
* @ pages : Array of pages if this domain has an auto - translated physmap
*
* Returns the number of successfully mapped frames , or a - ve error
* code .
*/
2009-05-21 10:09:46 +01:00
int xen_remap_domain_mfn_range ( struct vm_area_struct * vma ,
unsigned long addr ,
2015-03-11 14:49:57 +00:00
xen_pfn_t gfn , int nr ,
2012-10-17 13:37:49 -07:00
pgprot_t prot , unsigned domid ,
struct page * * pages ) ;
int xen_unmap_domain_mfn_range ( struct vm_area_struct * vma ,
int numpgs , struct page * * pages ) ;
2015-03-11 14:49:57 +00:00
int xen_xlate_remap_gfn_array ( struct vm_area_struct * vma ,
2015-03-11 14:49:56 +00:00
unsigned long addr ,
2015-03-11 14:49:57 +00:00
xen_pfn_t * gfn , int nr ,
int * err_ptr , pgprot_t prot ,
2015-03-11 14:49:56 +00:00
unsigned domid ,
struct page * * pages ) ;
int xen_xlate_unmap_gfn_range ( struct vm_area_struct * vma ,
int nr , struct page * * pages ) ;
2009-05-21 10:09:46 +01:00
2012-11-27 11:39:40 -05:00
bool xen_running_on_version_or_later ( unsigned int major , unsigned int minor ) ;
2014-06-30 19:53:02 +02:00
# ifdef CONFIG_XEN_EFI
extern efi_system_table_t * xen_efi_probe ( void ) ;
# else
2014-07-12 23:09:47 +02:00
static inline efi_system_table_t __init * xen_efi_probe ( void )
2014-06-30 19:53:02 +02:00
{
return NULL ;
}
# endif
2015-02-19 15:23:17 +00:00
# ifdef CONFIG_PREEMPT
static inline void xen_preemptible_hcall_begin ( void )
{
}
static inline void xen_preemptible_hcall_end ( void )
{
}
# else
DECLARE_PER_CPU ( bool , xen_in_preemptible_hcall ) ;
static inline void xen_preemptible_hcall_begin ( void )
{
__this_cpu_write ( xen_in_preemptible_hcall , true ) ;
}
static inline void xen_preemptible_hcall_end ( void )
{
__this_cpu_write ( xen_in_preemptible_hcall , false ) ;
}
# endif /* CONFIG_PREEMPT */
2008-04-02 10:53:55 -07:00
# endif /* INCLUDE_XEN_OPS_H */