1 #ifndef INCLUDE_XEN_OPS_H
2 #define INCLUDE_XEN_OPS_H
4 #include <linux/percpu.h>
5 #include <linux/notifier.h>
7 #include <asm/xen/interface.h>
8 #include <xen/interface/vcpu.h>
10 DECLARE_PER_CPU(struct vcpu_info
*, xen_vcpu
);
12 DECLARE_PER_CPU(uint32_t, xen_vcpu_id
);
13 static inline uint32_t xen_vcpu_nr(int cpu
)
15 return per_cpu(xen_vcpu_id
, cpu
);
18 #define XEN_VCPU_ID_INVALID U32_MAX
20 void xen_arch_pre_suspend(void);
21 void xen_arch_post_suspend(int suspend_cancelled
);
23 void xen_timer_resume(void);
24 void xen_arch_resume(void);
25 void xen_arch_suspend(void);
27 void xen_reboot(int reason
);
29 void xen_resume_notifier_register(struct notifier_block
*nb
);
30 void xen_resume_notifier_unregister(struct notifier_block
*nb
);
32 bool xen_vcpu_stolen(int vcpu
);
33 void xen_setup_runstate_info(int cpu
);
34 void xen_time_setup_guest(void);
35 void xen_get_runstate_snapshot(struct vcpu_runstate_info
*res
);
36 u64
xen_steal_clock(int cpu
);
38 int xen_setup_shutdown_event(void);
40 extern unsigned long *xen_contiguous_bitmap
;
43 int xen_create_contiguous_region(phys_addr_t pstart
, unsigned int order
,
44 unsigned int address_bits
,
45 dma_addr_t
*dma_handle
);
47 void xen_destroy_contiguous_region(phys_addr_t pstart
, unsigned int order
);
49 static inline int xen_create_contiguous_region(phys_addr_t pstart
,
51 unsigned int address_bits
,
52 dma_addr_t
*dma_handle
)
57 static inline void xen_destroy_contiguous_region(phys_addr_t pstart
,
58 unsigned int order
) { }
61 struct vm_area_struct
;
64 * xen_remap_domain_gfn_array() - map an array of foreign frames
65 * @vma: VMA to map the pages into
66 * @addr: Address at which to map the pages
67 * @gfn: Array of GFNs to map
68 * @nr: Number entries in the GFN array
69 * @err_ptr: Returns per-GFN error status.
70 * @prot: page protection mask
71 * @domid: Domain owning the pages
72 * @pages: Array of pages if this domain has an auto-translated physmap
74 * @gfn and @err_ptr may point to the same buffer, the GFNs will be
75 * overwritten by the error codes after they are mapped.
77 * Returns the number of successfully mapped frames, or a -ve error
80 int xen_remap_domain_gfn_array(struct vm_area_struct
*vma
,
82 xen_pfn_t
*gfn
, int nr
,
83 int *err_ptr
, pgprot_t prot
,
87 /* xen_remap_domain_gfn_range() - map a range of foreign frames
88 * @vma: VMA to map the pages into
89 * @addr: Address at which to map the pages
90 * @gfn: First GFN to map.
91 * @nr: Number frames to map
92 * @prot: page protection mask
93 * @domid: Domain owning the pages
94 * @pages: Array of pages if this domain has an auto-translated physmap
96 * Returns the number of successfully mapped frames, or a -ve error
99 int xen_remap_domain_gfn_range(struct vm_area_struct
*vma
,
101 xen_pfn_t gfn
, int nr
,
102 pgprot_t prot
, unsigned domid
,
103 struct page
**pages
);
104 int xen_unmap_domain_gfn_range(struct vm_area_struct
*vma
,
105 int numpgs
, struct page
**pages
);
106 int xen_xlate_remap_gfn_array(struct vm_area_struct
*vma
,
108 xen_pfn_t
*gfn
, int nr
,
109 int *err_ptr
, pgprot_t prot
,
111 struct page
**pages
);
112 int xen_xlate_unmap_gfn_range(struct vm_area_struct
*vma
,
113 int nr
, struct page
**pages
);
114 int xen_xlate_map_ballooned_pages(xen_pfn_t
**pfns
, void **vaddr
,
115 unsigned long nr_grant_frames
);
117 bool xen_running_on_version_or_later(unsigned int major
, unsigned int minor
);
119 efi_status_t
xen_efi_get_time(efi_time_t
*tm
, efi_time_cap_t
*tc
);
120 efi_status_t
xen_efi_set_time(efi_time_t
*tm
);
121 efi_status_t
xen_efi_get_wakeup_time(efi_bool_t
*enabled
, efi_bool_t
*pending
,
123 efi_status_t
xen_efi_set_wakeup_time(efi_bool_t enabled
, efi_time_t
*tm
);
124 efi_status_t
xen_efi_get_variable(efi_char16_t
*name
, efi_guid_t
*vendor
,
125 u32
*attr
, unsigned long *data_size
,
127 efi_status_t
xen_efi_get_next_variable(unsigned long *name_size
,
128 efi_char16_t
*name
, efi_guid_t
*vendor
);
129 efi_status_t
xen_efi_set_variable(efi_char16_t
*name
, efi_guid_t
*vendor
,
130 u32 attr
, unsigned long data_size
,
132 efi_status_t
xen_efi_query_variable_info(u32 attr
, u64
*storage_space
,
133 u64
*remaining_space
,
134 u64
*max_variable_size
);
135 efi_status_t
xen_efi_get_next_high_mono_count(u32
*count
);
136 efi_status_t
xen_efi_update_capsule(efi_capsule_header_t
**capsules
,
137 unsigned long count
, unsigned long sg_list
);
138 efi_status_t
xen_efi_query_capsule_caps(efi_capsule_header_t
**capsules
,
139 unsigned long count
, u64
*max_size
,
141 void xen_efi_reset_system(int reset_type
, efi_status_t status
,
142 unsigned long data_size
, efi_char16_t
*data
);
145 #ifdef CONFIG_PREEMPT
147 static inline void xen_preemptible_hcall_begin(void)
151 static inline void xen_preemptible_hcall_end(void)
157 DECLARE_PER_CPU(bool, xen_in_preemptible_hcall
);
159 static inline void xen_preemptible_hcall_begin(void)
161 __this_cpu_write(xen_in_preemptible_hcall
, true);
164 static inline void xen_preemptible_hcall_end(void)
166 __this_cpu_write(xen_in_preemptible_hcall
, false);
169 #endif /* CONFIG_PREEMPT */
171 #endif /* INCLUDE_XEN_OPS_H */