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