diff options
Diffstat (limited to 'include/xen')
| -rw-r--r-- | include/xen/events.h | 1 | ||||
| -rw-r--r-- | include/xen/interface/io/netif.h | 8 | ||||
| -rw-r--r-- | include/xen/interface/platform.h | 18 | ||||
| -rw-r--r-- | include/xen/interface/xen.h | 37 | ||||
| -rw-r--r-- | include/xen/interface/xenpmu.h | 94 | ||||
| -rw-r--r-- | include/xen/page.h | 8 | ||||
| -rw-r--r-- | include/xen/xen-ops.h | 10 | 
7 files changed, 150 insertions, 26 deletions
diff --git a/include/xen/events.h b/include/xen/events.h index 7d95fdf9cf3e..88da2abaf535 100644 --- a/include/xen/events.h +++ b/include/xen/events.h @@ -92,7 +92,6 @@ void xen_hvm_callback_vector(void);  #ifdef CONFIG_TRACING  #define trace_xen_hvm_callback_vector xen_hvm_callback_vector  #endif -extern int xen_have_vector_callback;  int xen_set_callback_via(uint64_t via);  void xen_evtchn_do_upcall(struct pt_regs *regs);  void xen_hvm_evtchn_do_upcall(void); diff --git a/include/xen/interface/io/netif.h b/include/xen/interface/io/netif.h index 70054cc0708d..252ffd4801ef 100644 --- a/include/xen/interface/io/netif.h +++ b/include/xen/interface/io/netif.h @@ -156,7 +156,9 @@ struct xen_netif_tx_request {  /* Types of xen_netif_extra_info descriptors. */  #define XEN_NETIF_EXTRA_TYPE_NONE	(0)  /* Never used - invalid */  #define XEN_NETIF_EXTRA_TYPE_GSO	(1)  /* u.gso */ -#define XEN_NETIF_EXTRA_TYPE_MAX	(2) +#define XEN_NETIF_EXTRA_TYPE_MCAST_ADD	(2)  /* u.mcast */ +#define XEN_NETIF_EXTRA_TYPE_MCAST_DEL	(3)  /* u.mcast */ +#define XEN_NETIF_EXTRA_TYPE_MAX	(4)  /* xen_netif_extra_info flags. */  #define _XEN_NETIF_EXTRA_FLAG_MORE	(0) @@ -201,6 +203,10 @@ struct xen_netif_extra_info {  			uint16_t features; /* XEN_NETIF_GSO_FEAT_* */  		} gso; +		struct { +			uint8_t addr[6]; /* Address to add/remove. */ +		} mcast; +  		uint16_t pad[3];  	} u;  }; diff --git a/include/xen/interface/platform.h b/include/xen/interface/platform.h index 5cc49ea8d840..8e035871360e 100644 --- a/include/xen/interface/platform.h +++ b/include/xen/interface/platform.h @@ -474,6 +474,23 @@ struct xenpf_core_parking {  };  DEFINE_GUEST_HANDLE_STRUCT(xenpf_core_parking); +#define XENPF_get_symbol      63 +struct xenpf_symdata { +	/* IN/OUT variables */ +	uint32_t	namelen; /* size of 'name' buffer */ + +	/* IN/OUT variables */ +	uint32_t	symnum; /* IN:  Symbol to read                       */ +				/* OUT: Next available symbol. If same as IN */ +				/* then  we reached the end                  */ + +	/* OUT variables */ +	GUEST_HANDLE(char) name; +	uint64_t	address; +	char            type; +}; +DEFINE_GUEST_HANDLE_STRUCT(xenpf_symdata); +  struct xen_platform_op {  	uint32_t cmd;  	uint32_t interface_version; /* XENPF_INTERFACE_VERSION */ @@ -495,6 +512,7 @@ struct xen_platform_op {  		struct xenpf_cpu_hotadd        cpu_add;  		struct xenpf_mem_hotadd        mem_add;  		struct xenpf_core_parking      core_parking; +		struct xenpf_symdata           symdata;  		uint8_t                        pad[128];  	} u;  }; diff --git a/include/xen/interface/xen.h b/include/xen/interface/xen.h index a48378958062..167071c290b3 100644 --- a/include/xen/interface/xen.h +++ b/include/xen/interface/xen.h @@ -80,6 +80,7 @@  #define __HYPERVISOR_kexec_op             37  #define __HYPERVISOR_tmem_op              38  #define __HYPERVISOR_xc_reserved_op       39 /* reserved for XenClient */ +#define __HYPERVISOR_xenpmu_op            40  /* Architecture-specific hypercall definitions. */  #define __HYPERVISOR_arch_0               48 @@ -112,6 +113,7 @@  #define VIRQ_MEM_EVENT  10 /* G. (DOM0) A memory event has occured           */  #define VIRQ_XC_RESERVED 11 /* G. Reserved for XenClient                     */  #define VIRQ_ENOMEM     12 /* G. (DOM0) Low on heap memory       */ +#define VIRQ_XENPMU     13  /* PMC interrupt                                 */  /* Architecture-specific VIRQ definitions. */  #define VIRQ_ARCH_0    16 @@ -585,26 +587,29 @@ struct shared_info {  };  /* - * Start-of-day memory layout for the initial domain (DOM0): + * Start-of-day memory layout + *   *  1. The domain is started within contiguous virtual-memory region.   *  2. The contiguous region begins and ends on an aligned 4MB boundary. - *  3. The region start corresponds to the load address of the OS image. - *     If the load address is not 4MB aligned then the address is rounded down. - *  4. This the order of bootstrap elements in the initial virtual region: + *  3. This the order of bootstrap elements in the initial virtual region:   *      a. relocated kernel image   *      b. initial ram disk              [mod_start, mod_len] + *         (may be omitted)   *      c. list of allocated page frames [mfn_list, nr_pages] + *         (unless relocated due to XEN_ELFNOTE_INIT_P2M)   *      d. start_info_t structure        [register ESI (x86)] - *      e. bootstrap page tables         [pt_base, CR3 (x86)] - *      f. bootstrap stack               [register ESP (x86)] - *  5. Bootstrap elements are packed together, but each is 4kB-aligned. - *  6. The initial ram disk may be omitted. - *  7. The list of page frames forms a contiguous 'pseudo-physical' memory + *         in case of dom0 this page contains the console info, too + *      e. unless dom0: xenstore ring page + *      f. unless dom0: console ring page + *      g. bootstrap page tables         [pt_base, CR3 (x86)] + *      h. bootstrap stack               [register ESP (x86)] + *  4. Bootstrap elements are packed together, but each is 4kB-aligned. + *  5. The list of page frames forms a contiguous 'pseudo-physical' memory   *     layout for the domain. In particular, the bootstrap virtual-memory   *     region is a 1:1 mapping to the first section of the pseudo-physical map. - *  8. All bootstrap elements are mapped read-writable for the guest OS. The + *  6. All bootstrap elements are mapped read-writable for the guest OS. The   *     only exception is the bootstrap page table, which is mapped read-only. - *  9. There is guaranteed to be at least 512kB padding after the final + *  7. There is guaranteed to be at least 512kB padding after the final   *     bootstrap element. If necessary, the bootstrap virtual region is   *     extended by an extra 4MB to ensure this.   */ @@ -641,10 +646,12 @@ struct start_info {  };  /* These flags are passed in the 'flags' field of start_info_t. */ -#define SIF_PRIVILEGED    (1<<0)  /* Is the domain privileged? */ -#define SIF_INITDOMAIN    (1<<1)  /* Is this the initial control domain? */ -#define SIF_MULTIBOOT_MOD (1<<2)  /* Is mod_start a multiboot module? */ -#define SIF_MOD_START_PFN (1<<3)  /* Is mod_start a PFN? */ +#define SIF_PRIVILEGED      (1<<0)  /* Is the domain privileged? */ +#define SIF_INITDOMAIN      (1<<1)  /* Is this the initial control domain? */ +#define SIF_MULTIBOOT_MOD   (1<<2)  /* Is mod_start a multiboot module? */ +#define SIF_MOD_START_PFN   (1<<3)  /* Is mod_start a PFN? */ +#define SIF_VIRT_P2M_4TOOLS (1<<4)  /* Do Xen tools understand a virt. mapped */ +				    /* P->M making the 3 level tree obsolete? */  #define SIF_PM_MASK       (0xFF<<8) /* reserve 1 byte for xen-pm options */  /* diff --git a/include/xen/interface/xenpmu.h b/include/xen/interface/xenpmu.h new file mode 100644 index 000000000000..139efc91bceb --- /dev/null +++ b/include/xen/interface/xenpmu.h @@ -0,0 +1,94 @@ +#ifndef __XEN_PUBLIC_XENPMU_H__ +#define __XEN_PUBLIC_XENPMU_H__ + +#include "xen.h" + +#define XENPMU_VER_MAJ    0 +#define XENPMU_VER_MIN    1 + +/* + * ` enum neg_errnoval + * ` HYPERVISOR_xenpmu_op(enum xenpmu_op cmd, struct xenpmu_params *args); + * + * @cmd  == XENPMU_* (PMU operation) + * @args == struct xenpmu_params + */ +/* ` enum xenpmu_op { */ +#define XENPMU_mode_get        0 /* Also used for getting PMU version */ +#define XENPMU_mode_set        1 +#define XENPMU_feature_get     2 +#define XENPMU_feature_set     3 +#define XENPMU_init            4 +#define XENPMU_finish          5 +#define XENPMU_lvtpc_set       6 +#define XENPMU_flush           7 + +/* ` } */ + +/* Parameters structure for HYPERVISOR_xenpmu_op call */ +struct xen_pmu_params { +	/* IN/OUT parameters */ +	struct { +		uint32_t maj; +		uint32_t min; +	} version; +	uint64_t val; + +	/* IN parameters */ +	uint32_t vcpu; +	uint32_t pad; +}; + +/* PMU modes: + * - XENPMU_MODE_OFF:   No PMU virtualization + * - XENPMU_MODE_SELF:  Guests can profile themselves + * - XENPMU_MODE_HV:    Guests can profile themselves, dom0 profiles + *                      itself and Xen + * - XENPMU_MODE_ALL:   Only dom0 has access to VPMU and it profiles + *                      everyone: itself, the hypervisor and the guests. + */ +#define XENPMU_MODE_OFF           0 +#define XENPMU_MODE_SELF          (1<<0) +#define XENPMU_MODE_HV            (1<<1) +#define XENPMU_MODE_ALL           (1<<2) + +/* + * PMU features: + * - XENPMU_FEATURE_INTEL_BTS: Intel BTS support (ignored on AMD) + */ +#define XENPMU_FEATURE_INTEL_BTS  1 + +/* + * Shared PMU data between hypervisor and PV(H) domains. + * + * The hypervisor fills out this structure during PMU interrupt and sends an + * interrupt to appropriate VCPU. + * Architecture-independent fields of xen_pmu_data are WO for the hypervisor + * and RO for the guest but some fields in xen_pmu_arch can be writable + * by both the hypervisor and the guest (see arch-$arch/pmu.h). + */ +struct xen_pmu_data { +	/* Interrupted VCPU */ +	uint32_t vcpu_id; + +	/* +	 * Physical processor on which the interrupt occurred. On non-privileged +	 * guests set to vcpu_id; +	 */ +	uint32_t pcpu_id; + +	/* +	 * Domain that was interrupted. On non-privileged guests set to +	 * DOMID_SELF. +	 * On privileged guests can be DOMID_SELF, DOMID_XEN, or, when in +	 * XENPMU_MODE_ALL mode, domain ID of another domain. +	 */ +	domid_t  domain_id; + +	uint8_t pad[6]; + +	/* Architecture-specific information */ +	struct xen_pmu_arch pmu; +}; + +#endif /* __XEN_PUBLIC_XENPMU_H__ */ diff --git a/include/xen/page.h b/include/xen/page.h index c5ed20bb3fe9..1daae485e336 100644 --- a/include/xen/page.h +++ b/include/xen/page.h @@ -3,14 +3,14 @@  #include <asm/xen/page.h> -static inline unsigned long page_to_mfn(struct page *page) +static inline unsigned long xen_page_to_gfn(struct page *page)  { -	return pfn_to_mfn(page_to_pfn(page)); +	return pfn_to_gfn(page_to_pfn(page));  }  struct xen_memory_region { -	phys_addr_t start; -	phys_addr_t size; +	unsigned long start_pfn; +	unsigned long n_pfns;  };  #define XEN_EXTRA_MEM_MAX_REGIONS 128 /* == E820MAX */ diff --git a/include/xen/xen-ops.h b/include/xen/xen-ops.h index 0ce4f32017ea..e4e214a5abd5 100644 --- a/include/xen/xen-ops.h +++ b/include/xen/xen-ops.h @@ -30,7 +30,7 @@ void xen_destroy_contiguous_region(phys_addr_t pstart, unsigned int order);  struct vm_area_struct;  /* - * xen_remap_domain_mfn_array() - map an array of foreign frames + * xen_remap_domain_gfn_array() - map an array of foreign frames   * @vma:     VMA to map the pages into   * @addr:    Address at which to map the pages   * @gfn:     Array of GFNs to map @@ -46,14 +46,14 @@ struct vm_area_struct;   * Returns the number of successfully mapped frames, or a -ve error   * code.   */ -int xen_remap_domain_mfn_array(struct vm_area_struct *vma, +int xen_remap_domain_gfn_array(struct vm_area_struct *vma,  			       unsigned long addr,  			       xen_pfn_t *gfn, int nr,  			       int *err_ptr, pgprot_t prot,  			       unsigned domid,  			       struct page **pages); -/* xen_remap_domain_mfn_range() - map a range of foreign frames +/* xen_remap_domain_gfn_range() - map a range of foreign frames   * @vma:     VMA to map the pages into   * @addr:    Address at which to map the pages   * @gfn:     First GFN to map. @@ -65,12 +65,12 @@ int xen_remap_domain_mfn_array(struct vm_area_struct *vma,   * Returns the number of successfully mapped frames, or a -ve error   * code.   */ -int xen_remap_domain_mfn_range(struct vm_area_struct *vma, +int xen_remap_domain_gfn_range(struct vm_area_struct *vma,  			       unsigned long addr,  			       xen_pfn_t gfn, int nr,  			       pgprot_t prot, unsigned domid,  			       struct page **pages); -int xen_unmap_domain_mfn_range(struct vm_area_struct *vma, +int xen_unmap_domain_gfn_range(struct vm_area_struct *vma,  			       int numpgs, struct page **pages);  int xen_xlate_remap_gfn_array(struct vm_area_struct *vma,  			      unsigned long addr,  |