diff options
Diffstat (limited to 'include/xen')
| -rw-r--r-- | include/xen/interface/hvm/params.h | 40 | ||||
| -rw-r--r-- | include/xen/interface/memory.h | 1 | ||||
| -rw-r--r-- | include/xen/interface/vcpu.h | 24 | ||||
| -rw-r--r-- | include/xen/interface/xen.h | 17 | ||||
| -rw-r--r-- | include/xen/xen-ops.h | 40 | 
5 files changed, 98 insertions, 24 deletions
| diff --git a/include/xen/interface/hvm/params.h b/include/xen/interface/hvm/params.h index a6c79911e729..4d61fc58d99d 100644 --- a/include/xen/interface/hvm/params.h +++ b/include/xen/interface/hvm/params.h @@ -27,16 +27,44 @@   * Parameter space for HVMOP_{set,get}_param.   */ +#define HVM_PARAM_CALLBACK_IRQ 0  /*   * How should CPU0 event-channel notifications be delivered? - * val[63:56] == 0: val[55:0] is a delivery GSI (Global System Interrupt). - * val[63:56] == 1: val[55:0] is a delivery PCI INTx line, as follows: - *                  Domain = val[47:32], Bus  = val[31:16], - *                  DevFn  = val[15: 8], IntX = val[ 1: 0] - * val[63:56] == 2: val[7:0] is a vector number. + *   * If val == 0 then CPU0 event-channel notifications are not delivered. + * If val != 0, val[63:56] encodes the type, as follows:   */ -#define HVM_PARAM_CALLBACK_IRQ 0 + +#define HVM_PARAM_CALLBACK_TYPE_GSI      0 +/* + * val[55:0] is a delivery GSI.  GSI 0 cannot be used, as it aliases val == 0, + * and disables all notifications. + */ + +#define HVM_PARAM_CALLBACK_TYPE_PCI_INTX 1 +/* + * val[55:0] is a delivery PCI INTx line: + * Domain = val[47:32], Bus = val[31:16] DevFn = val[15:8], IntX = val[1:0] + */ + +#if defined(__i386__) || defined(__x86_64__) +#define HVM_PARAM_CALLBACK_TYPE_VECTOR   2 +/* + * val[7:0] is a vector number.  Check for XENFEAT_hvm_callback_vector to know + * if this delivery method is available. + */ +#elif defined(__arm__) || defined(__aarch64__) +#define HVM_PARAM_CALLBACK_TYPE_PPI      2 +/* + * val[55:16] needs to be zero. + * val[15:8] is interrupt flag of the PPI used by event-channel: + *  bit 8: the PPI is edge(1) or level(0) triggered + *  bit 9: the PPI is active low(1) or high(0) + * val[7:0] is a PPI number used by event-channel. + * This is only used by ARM/ARM64 and masking/eoi the interrupt associated to + * the notification is handled by the interrupt controller. + */ +#endif  #define HVM_PARAM_STORE_PFN    1  #define HVM_PARAM_STORE_EVTCHN 2 diff --git a/include/xen/interface/memory.h b/include/xen/interface/memory.h index 2ecfe4f700d9..9aa8988cb340 100644 --- a/include/xen/interface/memory.h +++ b/include/xen/interface/memory.h @@ -160,6 +160,7 @@ DEFINE_GUEST_HANDLE_STRUCT(xen_machphys_mapping_t);  #define XENMAPSPACE_gmfn_foreign 4 /* GMFN from another dom,  				    * XENMEM_add_to_physmap_range only.  				    */ +#define XENMAPSPACE_dev_mmio     5 /* device mmio region */  /*   * Sets the GPFN at which a particular page appears in the specified guest's diff --git a/include/xen/interface/vcpu.h b/include/xen/interface/vcpu.h index b05288ce3991..98188c87f5c1 100644 --- a/include/xen/interface/vcpu.h +++ b/include/xen/interface/vcpu.h @@ -75,15 +75,21 @@   */  #define VCPUOP_get_runstate_info	 4  struct vcpu_runstate_info { -		/* VCPU's current state (RUNSTATE_*). */ -		int		 state; -		/* When was current state entered (system time, ns)? */ -		uint64_t state_entry_time; -		/* -		 * Time spent in each RUNSTATE_* (ns). The sum of these times is -		 * guaranteed not to drift from system time. -		 */ -		uint64_t time[4]; +	/* VCPU's current state (RUNSTATE_*). */ +	int		 state; +	/* When was current state entered (system time, ns)? */ +	uint64_t state_entry_time; +	/* +	 * Update indicator set in state_entry_time: +	 * When activated via VMASST_TYPE_runstate_update_flag, set during +	 * updates in guest memory mapped copy of vcpu_runstate_info. +	 */ +#define XEN_RUNSTATE_UPDATE	(1ULL << 63) +	/* +	 * Time spent in each RUNSTATE_* (ns). The sum of these times is +	 * guaranteed not to drift from system time. +	 */ +	uint64_t time[4];  };  DEFINE_GUEST_HANDLE_STRUCT(vcpu_runstate_info); diff --git a/include/xen/interface/xen.h b/include/xen/interface/xen.h index d1331121c0bd..1b0d189cd3d3 100644 --- a/include/xen/interface/xen.h +++ b/include/xen/interface/xen.h @@ -413,7 +413,22 @@ DEFINE_GUEST_HANDLE_STRUCT(mmuext_op);  /* x86/PAE guests: support PDPTs above 4GB. */  #define VMASST_TYPE_pae_extended_cr3     3 -#define MAX_VMASST_TYPE 3 +/* + * x86 guests: Sane behaviour for virtual iopl + *  - virtual iopl updated from do_iret() hypercalls. + *  - virtual iopl reported in bounce frames. + *  - guest kernels assumed to be level 0 for the purpose of iopl checks. + */ +#define VMASST_TYPE_architectural_iopl   4 + +/* + * All guests: activate update indicator in vcpu_runstate_info + * Enable setting the XEN_RUNSTATE_UPDATE flag in guest memory mapped + * vcpu_runstate_info during updates of the runstate information. + */ +#define VMASST_TYPE_runstate_update_flag 5 + +#define MAX_VMASST_TYPE 5  #ifndef __ASSEMBLY__ diff --git a/include/xen/xen-ops.h b/include/xen/xen-ops.h index 86abe07b20ec..9a37c541822f 100644 --- a/include/xen/xen-ops.h +++ b/include/xen/xen-ops.h @@ -9,6 +9,12 @@  DECLARE_PER_CPU(struct vcpu_info *, xen_vcpu); +DECLARE_PER_CPU(int, xen_vcpu_id); +static inline int xen_vcpu_nr(int cpu) +{ +	return per_cpu(xen_vcpu_id, cpu); +} +  void xen_arch_pre_suspend(void);  void xen_arch_post_suspend(int suspend_cancelled); @@ -21,7 +27,9 @@ void xen_resume_notifier_unregister(struct notifier_block *nb);  bool xen_vcpu_stolen(int vcpu);  void xen_setup_runstate_info(int cpu); +void xen_time_setup_guest(void);  void xen_get_runstate_snapshot(struct vcpu_runstate_info *res); +u64 xen_steal_clock(int cpu);  int xen_setup_shutdown_event(void); @@ -85,17 +93,33 @@ int xen_xlate_remap_gfn_array(struct vm_area_struct *vma,  			      struct page **pages);  int xen_xlate_unmap_gfn_range(struct vm_area_struct *vma,  			      int nr, struct page **pages); +int xen_xlate_map_ballooned_pages(xen_pfn_t **pfns, void **vaddr, +				  unsigned long nr_grant_frames);  bool xen_running_on_version_or_later(unsigned int major, unsigned int minor); -#ifdef CONFIG_XEN_EFI -extern efi_system_table_t *xen_efi_probe(void); -#else -static inline efi_system_table_t __init *xen_efi_probe(void) -{ -	return NULL; -} -#endif +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);  #ifdef CONFIG_PREEMPT |