2008-04-02 21:53:55 +04:00
# ifndef INCLUDE_XEN_OPS_H
# define INCLUDE_XEN_OPS_H
# include <linux/percpu.h>
2014-02-26 14:30:30 +04:00
# include <linux/notifier.h>
2014-06-30 21:53:02 +04:00
# include <linux/efi.h>
2012-10-16 20:19:15 +04:00
# include <asm/xen/interface.h>
2015-11-05 18:15:07 +03:00
# include <xen/interface/vcpu.h>
2008-04-02 21:53:55 +04:00
DECLARE_PER_CPU ( struct vcpu_info * , xen_vcpu ) ;
2016-07-29 12:06:48 +03:00
DECLARE_PER_CPU ( uint32_t , xen_vcpu_id ) ;
static inline uint32_t xen_vcpu_nr ( int cpu )
2016-06-30 18:56:37 +03:00
{
return per_cpu ( xen_vcpu_id , cpu ) ;
}
2017-06-03 03:05:59 +03:00
# define XEN_VCPU_ID_INVALID U32_MAX
2011-02-17 14:04:20 +03:00
void xen_arch_pre_suspend ( void ) ;
void xen_arch_post_suspend ( int suspend_cancelled ) ;
2008-05-27 02:31:27 +04:00
2008-07-09 02:06:32 +04:00
void xen_timer_resume ( void ) ;
void xen_arch_resume ( void ) ;
2015-04-29 01:46:20 +03:00
void xen_arch_suspend ( void ) ;
2008-07-09 02:06:32 +04:00
2017-04-24 20:58:37 +03:00
void xen_reboot ( int reason ) ;
2014-02-26 14:30:30 +04:00
void xen_resume_notifier_register ( struct notifier_block * nb ) ;
void xen_resume_notifier_unregister ( struct notifier_block * nb ) ;
2015-11-05 18:15:07 +03:00
bool xen_vcpu_stolen ( int vcpu ) ;
void xen_setup_runstate_info ( int cpu ) ;
2016-05-20 10:26:48 +03:00
void xen_time_setup_guest ( void ) ;
2015-11-05 18:15:07 +03:00
void xen_get_runstate_snapshot ( struct vcpu_runstate_info * res ) ;
2016-07-26 15:15:11 +03:00
u64 xen_steal_clock ( int cpu ) ;
2015-11-05 18:15:07 +03:00
2010-05-14 15:45:07 +04:00
int xen_setup_shutdown_event ( void ) ;
2009-02-09 23:05:46 +03:00
extern unsigned long * xen_contiguous_bitmap ;
2017-03-14 20:35:54 +03:00
# ifdef CONFIG_XEN_PV
2013-10-10 17:41:10 +04:00
int xen_create_contiguous_region ( phys_addr_t pstart , unsigned int order ,
2013-10-09 20:56:32 +04:00
unsigned int address_bits ,
dma_addr_t * dma_handle ) ;
2009-02-09 23:05:46 +03:00
2013-10-10 17:41:10 +04:00
void xen_destroy_contiguous_region ( phys_addr_t pstart , unsigned int order ) ;
2017-03-14 20:35:54 +03:00
# else
static inline int xen_create_contiguous_region ( phys_addr_t pstart ,
unsigned int order ,
unsigned int address_bits ,
dma_addr_t * dma_handle )
{
return 0 ;
}
static inline void xen_destroy_contiguous_region ( phys_addr_t pstart ,
unsigned int order ) { }
# endif
2009-02-09 23:05:46 +03:00
2012-03-28 21:30:02 +04:00
struct vm_area_struct ;
2015-03-11 17:49:57 +03:00
/*
2015-08-07 19:34:41 +03:00
* xen_remap_domain_gfn_array ( ) - map an array of foreign frames
2015-03-11 17:49:57 +03:00
* @ 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 .
*/
2015-08-07 19:34:41 +03:00
int xen_remap_domain_gfn_array ( struct vm_area_struct * vma ,
2015-03-11 17:49:57 +03:00
unsigned long addr ,
xen_pfn_t * gfn , int nr ,
int * err_ptr , pgprot_t prot ,
unsigned domid ,
struct page * * pages ) ;
2015-08-07 19:34:41 +03:00
/* xen_remap_domain_gfn_range() - map a range of foreign frames
2015-03-11 17:49:57 +03:00
* @ 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 .
*/
2015-08-07 19:34:41 +03:00
int xen_remap_domain_gfn_range ( struct vm_area_struct * vma ,
2009-05-21 13:09:46 +04:00
unsigned long addr ,
2015-03-11 17:49:57 +03:00
xen_pfn_t gfn , int nr ,
2012-10-18 00:37:49 +04:00
pgprot_t prot , unsigned domid ,
struct page * * pages ) ;
2015-08-07 19:34:41 +03:00
int xen_unmap_domain_gfn_range ( struct vm_area_struct * vma ,
2012-10-18 00:37:49 +04:00
int numpgs , struct page * * pages ) ;
2015-03-11 17:49:57 +03:00
int xen_xlate_remap_gfn_array ( struct vm_area_struct * vma ,
2015-03-11 17:49:56 +03:00
unsigned long addr ,
2015-03-11 17:49:57 +03:00
xen_pfn_t * gfn , int nr ,
int * err_ptr , pgprot_t prot ,
2015-03-11 17:49:56 +03:00
unsigned domid ,
struct page * * pages ) ;
int xen_xlate_unmap_gfn_range ( struct vm_area_struct * vma ,
int nr , struct page * * pages ) ;
2016-04-07 15:03:19 +03:00
int xen_xlate_map_ballooned_pages ( xen_pfn_t * * pfns , void * * vaddr ,
unsigned long nr_grant_frames ) ;
2009-05-21 13:09:46 +04:00
2012-11-27 20:39:40 +04:00
bool xen_running_on_version_or_later ( unsigned int major , unsigned int minor ) ;
2014-06-30 21:53:02 +04:00
2016-04-07 15:03:31 +03:00
efi_status_t xen_efi_get_time ( efi_time_t * tm , efi_time_cap_t * tc ) ;
efi_status_t xen_efi_set_time ( efi_time_t * tm ) ;
efi_status_t xen_efi_get_wakeup_time ( efi_bool_t * enabled , efi_bool_t * pending ,
efi_time_t * tm ) ;
efi_status_t xen_efi_set_wakeup_time ( efi_bool_t enabled , efi_time_t * tm ) ;
efi_status_t xen_efi_get_variable ( efi_char16_t * name , efi_guid_t * vendor ,
u32 * attr , unsigned long * data_size ,
void * data ) ;
efi_status_t xen_efi_get_next_variable ( unsigned long * name_size ,
efi_char16_t * name , efi_guid_t * vendor ) ;
efi_status_t xen_efi_set_variable ( efi_char16_t * name , efi_guid_t * vendor ,
u32 attr , unsigned long data_size ,
void * data ) ;
efi_status_t xen_efi_query_variable_info ( u32 attr , u64 * storage_space ,
u64 * remaining_space ,
u64 * max_variable_size ) ;
efi_status_t xen_efi_get_next_high_mono_count ( u32 * count ) ;
efi_status_t xen_efi_update_capsule ( efi_capsule_header_t * * capsules ,
unsigned long count , unsigned long sg_list ) ;
efi_status_t xen_efi_query_capsule_caps ( efi_capsule_header_t * * capsules ,
unsigned long count , u64 * max_size ,
int * reset_type ) ;
2017-04-24 20:58:39 +03:00
void xen_efi_reset_system ( int reset_type , efi_status_t status ,
unsigned long data_size , efi_char16_t * data ) ;
2014-06-30 21:53:02 +04:00
2015-02-19 18:23:17 +03: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 21:53:55 +04:00
# endif /* INCLUDE_XEN_OPS_H */