1 #ifndef INCLUDE_XEN_OPS_H 2 #define INCLUDE_XEN_OPS_H 3 4 #include <linux/percpu.h> 5 #include <linux/notifier.h> 6 #include <linux/efi.h> 7 #include <asm/xen/interface.h> 8 #include <xen/interface/vcpu.h> 9 10 DECLARE_PER_CPU(struct vcpu_info *, xen_vcpu); 11 12 DECLARE_PER_CPU(uint32_t, xen_vcpu_id); 13 static inline uint32_t xen_vcpu_nr(int cpu) 14 { 15 return per_cpu(xen_vcpu_id, cpu); 16 } 17 18 #define XEN_VCPU_ID_INVALID U32_MAX 19 20 void xen_arch_pre_suspend(void); 21 void xen_arch_post_suspend(int suspend_cancelled); 22 23 void xen_timer_resume(void); 24 void xen_arch_resume(void); 25 void xen_arch_suspend(void); 26 27 void xen_reboot(int reason); 28 29 void xen_resume_notifier_register(struct notifier_block *nb); 30 void xen_resume_notifier_unregister(struct notifier_block *nb); 31 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); 37 38 int xen_setup_shutdown_event(void); 39 40 extern unsigned long *xen_contiguous_bitmap; 41 42 #ifdef CONFIG_XEN_PV 43 int xen_create_contiguous_region(phys_addr_t pstart, unsigned int order, 44 unsigned int address_bits, 45 dma_addr_t *dma_handle); 46 47 void xen_destroy_contiguous_region(phys_addr_t pstart, unsigned int order); 48 #else 49 static inline int xen_create_contiguous_region(phys_addr_t pstart, 50 unsigned int order, 51 unsigned int address_bits, 52 dma_addr_t *dma_handle) 53 { 54 return 0; 55 } 56 57 static inline void xen_destroy_contiguous_region(phys_addr_t pstart, 58 unsigned int order) { } 59 #endif 60 61 struct vm_area_struct; 62 63 /* 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 73 * 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. 76 * 77 * Returns the number of successfully mapped frames, or a -ve error 78 * code. 79 */ 80 int xen_remap_domain_gfn_array(struct vm_area_struct *vma, 81 unsigned long addr, 82 xen_pfn_t *gfn, int nr, 83 int *err_ptr, pgprot_t prot, 84 unsigned domid, 85 struct page **pages); 86 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 95 * 96 * Returns the number of successfully mapped frames, or a -ve error 97 * code. 98 */ 99 int xen_remap_domain_gfn_range(struct vm_area_struct *vma, 100 unsigned long addr, 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, 107 unsigned long addr, 108 xen_pfn_t *gfn, int nr, 109 int *err_ptr, pgprot_t prot, 110 unsigned domid, 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); 116 117 bool xen_running_on_version_or_later(unsigned int major, unsigned int minor); 118 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, 122 efi_time_t *tm); 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, 126 void *data); 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, 131 void *data); 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, 140 int *reset_type); 141 void xen_efi_reset_system(int reset_type, efi_status_t status, 142 unsigned long data_size, efi_char16_t *data); 143 144 145 #ifdef CONFIG_PREEMPT 146 147 static inline void xen_preemptible_hcall_begin(void) 148 { 149 } 150 151 static inline void xen_preemptible_hcall_end(void) 152 { 153 } 154 155 #else 156 157 DECLARE_PER_CPU(bool, xen_in_preemptible_hcall); 158 159 static inline void xen_preemptible_hcall_begin(void) 160 { 161 __this_cpu_write(xen_in_preemptible_hcall, true); 162 } 163 164 static inline void xen_preemptible_hcall_end(void) 165 { 166 __this_cpu_write(xen_in_preemptible_hcall, false); 167 } 168 169 #endif /* CONFIG_PREEMPT */ 170 171 #endif /* INCLUDE_XEN_OPS_H */ 172