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 void xen_arch_pre_suspend(void); 19 void xen_arch_post_suspend(int suspend_cancelled); 20 21 void xen_timer_resume(void); 22 void xen_arch_resume(void); 23 void xen_arch_suspend(void); 24 25 void xen_reboot(int reason); 26 27 void xen_resume_notifier_register(struct notifier_block *nb); 28 void xen_resume_notifier_unregister(struct notifier_block *nb); 29 30 bool xen_vcpu_stolen(int vcpu); 31 void xen_setup_runstate_info(int cpu); 32 void xen_time_setup_guest(void); 33 void xen_get_runstate_snapshot(struct vcpu_runstate_info *res); 34 u64 xen_steal_clock(int cpu); 35 36 int xen_setup_shutdown_event(void); 37 38 extern unsigned long *xen_contiguous_bitmap; 39 40 #ifdef CONFIG_XEN_PV 41 int xen_create_contiguous_region(phys_addr_t pstart, unsigned int order, 42 unsigned int address_bits, 43 dma_addr_t *dma_handle); 44 45 void xen_destroy_contiguous_region(phys_addr_t pstart, unsigned int order); 46 #else 47 static inline int xen_create_contiguous_region(phys_addr_t pstart, 48 unsigned int order, 49 unsigned int address_bits, 50 dma_addr_t *dma_handle) 51 { 52 return 0; 53 } 54 55 static inline void xen_destroy_contiguous_region(phys_addr_t pstart, 56 unsigned int order) { } 57 #endif 58 59 struct vm_area_struct; 60 61 /* 62 * xen_remap_domain_gfn_array() - map an array of foreign frames 63 * @vma: VMA to map the pages into 64 * @addr: Address at which to map the pages 65 * @gfn: Array of GFNs to map 66 * @nr: Number entries in the GFN array 67 * @err_ptr: Returns per-GFN error status. 68 * @prot: page protection mask 69 * @domid: Domain owning the pages 70 * @pages: Array of pages if this domain has an auto-translated physmap 71 * 72 * @gfn and @err_ptr may point to the same buffer, the GFNs will be 73 * overwritten by the error codes after they are mapped. 74 * 75 * Returns the number of successfully mapped frames, or a -ve error 76 * code. 77 */ 78 int xen_remap_domain_gfn_array(struct vm_area_struct *vma, 79 unsigned long addr, 80 xen_pfn_t *gfn, int nr, 81 int *err_ptr, pgprot_t prot, 82 unsigned domid, 83 struct page **pages); 84 85 /* xen_remap_domain_gfn_range() - map a range of foreign frames 86 * @vma: VMA to map the pages into 87 * @addr: Address at which to map the pages 88 * @gfn: First GFN to map. 89 * @nr: Number frames to map 90 * @prot: page protection mask 91 * @domid: Domain owning the pages 92 * @pages: Array of pages if this domain has an auto-translated physmap 93 * 94 * Returns the number of successfully mapped frames, or a -ve error 95 * code. 96 */ 97 int xen_remap_domain_gfn_range(struct vm_area_struct *vma, 98 unsigned long addr, 99 xen_pfn_t gfn, int nr, 100 pgprot_t prot, unsigned domid, 101 struct page **pages); 102 int xen_unmap_domain_gfn_range(struct vm_area_struct *vma, 103 int numpgs, struct page **pages); 104 int xen_xlate_remap_gfn_array(struct vm_area_struct *vma, 105 unsigned long addr, 106 xen_pfn_t *gfn, int nr, 107 int *err_ptr, pgprot_t prot, 108 unsigned domid, 109 struct page **pages); 110 int xen_xlate_unmap_gfn_range(struct vm_area_struct *vma, 111 int nr, struct page **pages); 112 int xen_xlate_map_ballooned_pages(xen_pfn_t **pfns, void **vaddr, 113 unsigned long nr_grant_frames); 114 115 bool xen_running_on_version_or_later(unsigned int major, unsigned int minor); 116 117 efi_status_t xen_efi_get_time(efi_time_t *tm, efi_time_cap_t *tc); 118 efi_status_t xen_efi_set_time(efi_time_t *tm); 119 efi_status_t xen_efi_get_wakeup_time(efi_bool_t *enabled, efi_bool_t *pending, 120 efi_time_t *tm); 121 efi_status_t xen_efi_set_wakeup_time(efi_bool_t enabled, efi_time_t *tm); 122 efi_status_t xen_efi_get_variable(efi_char16_t *name, efi_guid_t *vendor, 123 u32 *attr, unsigned long *data_size, 124 void *data); 125 efi_status_t xen_efi_get_next_variable(unsigned long *name_size, 126 efi_char16_t *name, efi_guid_t *vendor); 127 efi_status_t xen_efi_set_variable(efi_char16_t *name, efi_guid_t *vendor, 128 u32 attr, unsigned long data_size, 129 void *data); 130 efi_status_t xen_efi_query_variable_info(u32 attr, u64 *storage_space, 131 u64 *remaining_space, 132 u64 *max_variable_size); 133 efi_status_t xen_efi_get_next_high_mono_count(u32 *count); 134 efi_status_t xen_efi_update_capsule(efi_capsule_header_t **capsules, 135 unsigned long count, unsigned long sg_list); 136 efi_status_t xen_efi_query_capsule_caps(efi_capsule_header_t **capsules, 137 unsigned long count, u64 *max_size, 138 int *reset_type); 139 void xen_efi_reset_system(int reset_type, efi_status_t status, 140 unsigned long data_size, efi_char16_t *data); 141 142 143 #ifdef CONFIG_PREEMPT 144 145 static inline void xen_preemptible_hcall_begin(void) 146 { 147 } 148 149 static inline void xen_preemptible_hcall_end(void) 150 { 151 } 152 153 #else 154 155 DECLARE_PER_CPU(bool, xen_in_preemptible_hcall); 156 157 static inline void xen_preemptible_hcall_begin(void) 158 { 159 __this_cpu_write(xen_in_preemptible_hcall, true); 160 } 161 162 static inline void xen_preemptible_hcall_end(void) 163 { 164 __this_cpu_write(xen_in_preemptible_hcall, false); 165 } 166 167 #endif /* CONFIG_PREEMPT */ 168 169 #endif /* INCLUDE_XEN_OPS_H */ 170