mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 10:11:27 +01:00
Remove non-ISO attributes from public headers.
Signed-off-by: Keir Fraser <keir@xensource.com>
This commit is contained in:
1 parent
14f7caf775
commit
e27fcf3739
19 files changed
+442
-558
No files matched your search
@@ -127,7 +127,7 @@
|
||||
* Must be consistent with the definition in arch_x86_64.h:
|
||||
* struct switch_to_user {
|
||||
* u64 rax, r11, rcx, flags, rip, cs, rflags, rsp, ss;
|
||||
* } PACKED;
|
||||
* };
|
||||
* #define VGCF_IN_SYSCALL (1<<8)
|
||||
*/
|
||||
.macro SWITCH_TO_USER flag
|
||||
|
||||
@@ -28,7 +28,7 @@ typedef struct
|
||||
pdb_op_rd_reg_t rd_reg;
|
||||
pdb_op_wr_reg_t wr_reg;
|
||||
} u;
|
||||
} PACKED pdb_request_t, *pdb_request_p;
|
||||
} pdb_request_t, *pdb_request_p;
|
||||
|
||||
|
||||
#define PDB_RESPONSE_OKAY 0
|
||||
@@ -38,7 +38,7 @@ typedef struct {
|
||||
u8 operation; /* copied from request */
|
||||
s16 status; /* PDB_RESPONSE_??? */
|
||||
u32 value;
|
||||
} PACKED pdb_response_t, *pdb_response_p;
|
||||
} pdb_response_t, *pdb_response_p;
|
||||
|
||||
|
||||
DEFINE_RING_TYPES(pdb, pdb_request_t, pdb_response_t);
|
||||
|
||||
@@ -75,7 +75,7 @@ typedef struct {
|
||||
xcs_interface_msg_t interface;
|
||||
|
||||
xcs_control_msg_t control; /* These are xcs data message types */
|
||||
} PACKED u;
|
||||
} u;
|
||||
} xcs_msg_t;
|
||||
|
||||
/* message validation macros. */
|
||||
|
||||
@@ -68,7 +68,9 @@ struct arch_domain
|
||||
|
||||
struct arch_vcpu
|
||||
{
|
||||
struct vcpu_guest_context guest_context;
|
||||
/* Needs 16-byte aligment for FXSAVE/FXRSTOR. */
|
||||
struct vcpu_guest_context guest_context
|
||||
__attribute__((__aligned__(16)));
|
||||
|
||||
unsigned long flags; /* TF_ */
|
||||
|
||||
|
||||
@@ -37,7 +37,7 @@ struct pfn_info
|
||||
u32 _domain; /* pickled format */
|
||||
/* Type reference count and various PGT_xxx flags and fields. */
|
||||
u32 type_info;
|
||||
} PACKED inuse;
|
||||
} inuse;
|
||||
|
||||
/* Page is on a free list: ((count_info & PGC_count_mask) == 0). */
|
||||
struct {
|
||||
@@ -45,11 +45,10 @@ struct pfn_info
|
||||
cpumask_t cpumask;
|
||||
/* Order-size of the free chunk this page is the head of. */
|
||||
u8 order;
|
||||
} PACKED free;
|
||||
} free;
|
||||
|
||||
} PACKED u;
|
||||
|
||||
} PACKED;
|
||||
} u;
|
||||
};
|
||||
|
||||
/* The following page types are MUTUALLY EXCLUSIVE. */
|
||||
#define PGT_none (0<<29) /* no special uses of this page */
|
||||
|
||||
@@ -7,13 +7,6 @@
|
||||
#ifndef __HYPERVISOR_IF_IA64_H__
|
||||
#define __HYPERVISOR_IF_IA64_H__
|
||||
|
||||
// "packed" generates awful code
|
||||
#define PACKED
|
||||
|
||||
/* Pointers are naturally 64 bits in this architecture; no padding needed. */
|
||||
#define _MEMORY_PADDING(_X)
|
||||
#define MEMORY_PADDING
|
||||
|
||||
/* Maximum number of virtual CPUs in multi-processor guests. */
|
||||
/* WARNING: before changing this, check that shared_info fits on a page */
|
||||
#define MAX_VIRT_CPUS 1
|
||||
@@ -48,11 +41,6 @@ typedef struct {
|
||||
|
||||
#define INVALID_MFN (~0UL)
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
} PACKED cpu_user_regs;
|
||||
|
||||
/*
|
||||
* NB. This may become a 64-bit count with no shift. If this happens then the
|
||||
* structure size will still be 8 bytes, so no other alignments will change.
|
||||
@@ -60,7 +48,7 @@ typedef struct
|
||||
typedef struct {
|
||||
unsigned int tsc_bits; /* 0: 32 bits read from the CPU's TSC. */
|
||||
unsigned int tsc_bitshift; /* 4: 'tsc_bits' uses N:N+31 of TSC. */
|
||||
} PACKED tsc_timestamp_t; /* 8 bytes */
|
||||
} tsc_timestamp_t; /* 8 bytes */
|
||||
|
||||
struct pt_fpreg {
|
||||
union {
|
||||
@@ -183,20 +171,20 @@ typedef struct {
|
||||
unsigned long pkrs[8]; // protection key registers
|
||||
unsigned long tmp[8]; // temp registers (e.g. for hyperprivops)
|
||||
int evtchn_vector;
|
||||
//} PACKED arch_vcpu_info_t;
|
||||
} arch_vcpu_info_t; // DON'T PACK
|
||||
} arch_vcpu_info_t;
|
||||
#define __ARCH_HAS_VCPU_INFO
|
||||
|
||||
typedef struct {
|
||||
int domain_controller_evtchn;
|
||||
unsigned int flags;
|
||||
//} PACKED arch_shared_info_t;
|
||||
//} arch_shared_info_t;
|
||||
} arch_shared_info_t; // DON'T PACK
|
||||
|
||||
typedef struct vcpu_guest_context {
|
||||
struct pt_regs regs;
|
||||
arch_vcpu_info_t vcpu;
|
||||
arch_shared_info_t shared;
|
||||
} PACKED vcpu_guest_context_t;
|
||||
} vcpu_guest_context_t;
|
||||
|
||||
#endif /* !__ASSEMBLY__ */
|
||||
|
||||
|
||||
@@ -9,21 +9,6 @@
|
||||
#ifndef __XEN_PUBLIC_ARCH_X86_32_H__
|
||||
#define __XEN_PUBLIC_ARCH_X86_32_H__
|
||||
|
||||
#ifndef PACKED
|
||||
/* GCC-specific way to pack structure definitions (no implicit padding). */
|
||||
#define PACKED __attribute__ ((packed))
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Pointers and other address fields inside interface structures are padded to
|
||||
* 64 bits. This means that field alignments aren't different between 32- and
|
||||
* 64-bit architectures.
|
||||
*/
|
||||
/* NB. Multi-level macro ensures __LINE__ is expanded before concatenation. */
|
||||
#define __MEMORY_PADDING(_X) u32 __pad_ ## _X
|
||||
#define _MEMORY_PADDING(_X) __MEMORY_PADDING(_X)
|
||||
#define MEMORY_PADDING _MEMORY_PADDING(__LINE__)
|
||||
|
||||
/*
|
||||
* SEGMENT DESCRIPTOR TABLES
|
||||
*/
|
||||
@@ -88,12 +73,12 @@ typedef unsigned long memory_t; /* Full-sized pointer/address/memory-size. */
|
||||
#define TI_GET_IF(_ti) ((_ti)->flags & 4)
|
||||
#define TI_SET_DPL(_ti,_dpl) ((_ti)->flags |= (_dpl))
|
||||
#define TI_SET_IF(_ti,_if) ((_ti)->flags |= ((!!(_if))<<2))
|
||||
typedef struct {
|
||||
u8 vector; /* 0: exception vector */
|
||||
u8 flags; /* 1: 0-3: privilege level; 4: clear event enable? */
|
||||
u16 cs; /* 2: code selector */
|
||||
memory_t address; /* 4: code address */
|
||||
} PACKED trap_info_t; /* 8 bytes */
|
||||
typedef struct trap_info {
|
||||
u8 vector; /* exception vector */
|
||||
u8 flags; /* 0-3: privilege level; 4: clear event enable? */
|
||||
u16 cs; /* code selector */
|
||||
memory_t address; /* code address */
|
||||
} trap_info_t;
|
||||
|
||||
typedef struct cpu_user_regs {
|
||||
u32 ebx;
|
||||
@@ -125,13 +110,13 @@ typedef u64 tsc_timestamp_t; /* RDTSC timestamp */
|
||||
* in by FXSAVE if the CPU has feature FXSR; otherwise FSAVE is used.
|
||||
*/
|
||||
typedef struct vcpu_guest_context {
|
||||
/* FPU registers come first so they can be aligned for FXSAVE/FXRSTOR. */
|
||||
struct { char x[512]; } fpu_ctxt; /* User-level FPU registers */
|
||||
#define VGCF_I387_VALID (1<<0)
|
||||
#define VGCF_VMX_GUEST (1<<1)
|
||||
#define VGCF_IN_KERNEL (1<<2)
|
||||
unsigned long flags; /* VGCF_* flags */
|
||||
cpu_user_regs_t user_regs; /* User-level CPU registers */
|
||||
struct { char x[512]; } fpu_ctxt /* User-level FPU registers */
|
||||
__attribute__((__aligned__(16))); /* (needs 16-byte alignment) */
|
||||
trap_info_t trap_ctxt[256]; /* Virtual IDT */
|
||||
unsigned long ldt_base, ldt_ents; /* LDT (linear address, # ents) */
|
||||
unsigned long gdt_frames[16], gdt_ents; /* GDT (machine frames, # ents) */
|
||||
@@ -145,14 +130,11 @@ typedef struct vcpu_guest_context {
|
||||
unsigned long vm_assist; /* VMASST_TYPE_* bitmap */
|
||||
} vcpu_guest_context_t;
|
||||
|
||||
typedef struct {
|
||||
typedef struct arch_shared_info {
|
||||
/* MFN of a table of MFNs that make up p2m table */
|
||||
u64 pfn_to_mfn_frame_list;
|
||||
} arch_shared_info_t;
|
||||
|
||||
typedef struct {
|
||||
} arch_vcpu_info_t;
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -9,15 +9,6 @@
|
||||
#ifndef __XEN_PUBLIC_ARCH_X86_64_H__
|
||||
#define __XEN_PUBLIC_ARCH_X86_64_H__
|
||||
|
||||
#ifndef PACKED
|
||||
/* GCC-specific way to pack structure definitions (no implicit padding). */
|
||||
#define PACKED __attribute__ ((packed))
|
||||
#endif
|
||||
|
||||
/* Pointers are naturally 64 bits in this architecture; no padding needed. */
|
||||
#define _MEMORY_PADDING(_X)
|
||||
#define MEMORY_PADDING
|
||||
|
||||
/*
|
||||
* SEGMENT DESCRIPTOR TABLES
|
||||
*/
|
||||
@@ -110,7 +101,7 @@ struct switch_to_user {
|
||||
/* Top of stack (%rsp at point of hypercall). */
|
||||
u64 rax, r11, rcx, flags, rip, cs, rflags, rsp, ss;
|
||||
/* Bottom of switch_to_user stack frame. */
|
||||
} PACKED;
|
||||
};
|
||||
|
||||
/* NB. Both the following are 64 bits each. */
|
||||
typedef unsigned long memory_t; /* Full-sized pointer/address/memory-size. */
|
||||
@@ -129,13 +120,12 @@ typedef unsigned long memory_t; /* Full-sized pointer/address/memory-size. */
|
||||
#define TI_GET_IF(_ti) ((_ti)->flags & 4)
|
||||
#define TI_SET_DPL(_ti,_dpl) ((_ti)->flags |= (_dpl))
|
||||
#define TI_SET_IF(_ti,_if) ((_ti)->flags |= ((!!(_if))<<2))
|
||||
typedef struct {
|
||||
u8 vector; /* 0: exception vector */
|
||||
u8 flags; /* 1: 0-3: privilege level; 4: clear event enable? */
|
||||
u16 cs; /* 2: code selector */
|
||||
u32 __pad; /* 4 */
|
||||
memory_t address; /* 8: code address */
|
||||
} PACKED trap_info_t; /* 16 bytes */
|
||||
typedef struct trap_info {
|
||||
u8 vector; /* exception vector */
|
||||
u8 flags; /* 0-3: privilege level; 4: clear event enable? */
|
||||
u16 cs; /* code selector */
|
||||
memory_t address; /* code address */
|
||||
} trap_info_t;
|
||||
|
||||
typedef struct cpu_user_regs {
|
||||
u64 r15;
|
||||
@@ -175,13 +165,13 @@ typedef u64 tsc_timestamp_t; /* RDTSC timestamp */
|
||||
* in by FXSAVE if the CPU has feature FXSR; otherwise FSAVE is used.
|
||||
*/
|
||||
typedef struct vcpu_guest_context {
|
||||
/* FPU registers come first so they can be aligned for FXSAVE/FXRSTOR. */
|
||||
struct { char x[512]; } fpu_ctxt; /* User-level FPU registers */
|
||||
#define VGCF_I387_VALID (1<<0)
|
||||
#define VGCF_VMX_GUEST (1<<1)
|
||||
#define VGCF_IN_KERNEL (1<<2)
|
||||
unsigned long flags; /* VGCF_* flags */
|
||||
cpu_user_regs_t user_regs; /* User-level CPU registers */
|
||||
struct { char x[512]; } fpu_ctxt /* User-level FPU registers */
|
||||
__attribute__((__aligned__(16))); /* (needs 16-byte alignment) */
|
||||
trap_info_t trap_ctxt[256]; /* Virtual IDT */
|
||||
unsigned long ldt_base, ldt_ents; /* LDT (linear address, # ents) */
|
||||
unsigned long gdt_frames[16], gdt_ents; /* GDT (machine frames, # ents) */
|
||||
@@ -198,14 +188,11 @@ typedef struct vcpu_guest_context {
|
||||
u64 gs_base_user;
|
||||
} vcpu_guest_context_t;
|
||||
|
||||
typedef struct {
|
||||
typedef struct arch_shared_info {
|
||||
/* MFN of a table of MFNs that make up p2m table */
|
||||
u64 pfn_to_mfn_frame_list;
|
||||
} arch_shared_info_t;
|
||||
|
||||
typedef struct {
|
||||
} arch_vcpu_info_t;
|
||||
|
||||
#endif /* !__ASSEMBLY__ */
|
||||
|
||||
#endif
|
||||
@@ -19,7 +19,7 @@
|
||||
* This makes sure that old versions of dom0 tools will stop working in a
|
||||
* well-defined way (rather than crashing the machine, for instance).
|
||||
*/
|
||||
#define DOM0_INTERFACE_VERSION 0xAAAA1008
|
||||
#define DOM0_INTERFACE_VERSION 0xAAAA1009
|
||||
|
||||
/************************************************************************/
|
||||
|
||||
|
||||
@@ -15,13 +15,12 @@
|
||||
* will be allocated, and the field filled in on return.
|
||||
*/
|
||||
#define EVTCHNOP_alloc_unbound 6
|
||||
typedef struct {
|
||||
typedef struct evtchn_alloc_unbound {
|
||||
/* IN parameters */
|
||||
domid_t dom; /* 0 */
|
||||
u16 __pad;
|
||||
domid_t dom;
|
||||
/* IN/OUT parameters */
|
||||
u32 port; /* 4 */
|
||||
} PACKED evtchn_alloc_unbound_t; /* 8 bytes */
|
||||
u32 port;
|
||||
} evtchn_alloc_unbound_t;
|
||||
|
||||
/*
|
||||
* EVTCHNOP_bind_interdomain: Construct an interdomain event channel between
|
||||
@@ -44,12 +43,12 @@ typedef struct {
|
||||
* be closed or unbound.
|
||||
*/
|
||||
#define EVTCHNOP_bind_interdomain 0
|
||||
typedef struct {
|
||||
typedef struct evtchn_bind_interdomain {
|
||||
/* IN parameters. */
|
||||
domid_t dom1, dom2; /* 0, 2 */
|
||||
domid_t dom1, dom2;
|
||||
/* IN/OUT parameters. */
|
||||
u32 port1, port2; /* 4, 8 */
|
||||
} PACKED evtchn_bind_interdomain_t; /* 12 bytes */
|
||||
u32 port1, port2;
|
||||
} evtchn_bind_interdomain_t;
|
||||
|
||||
/*
|
||||
* EVTCHNOP_bind_virq: Bind a local event channel to IRQ <irq> on calling vcpu.
|
||||
@@ -59,12 +58,12 @@ typedef struct {
|
||||
* may not be changed.
|
||||
*/
|
||||
#define EVTCHNOP_bind_virq 1
|
||||
typedef struct {
|
||||
typedef struct evtchn_bind_virq {
|
||||
/* IN parameters. */
|
||||
u32 virq; /* 0 */
|
||||
u32 virq;
|
||||
/* OUT parameters. */
|
||||
u32 port; /* 4 */
|
||||
} PACKED evtchn_bind_virq_t; /* 8 bytes */
|
||||
u32 port;
|
||||
} evtchn_bind_virq_t;
|
||||
|
||||
/*
|
||||
* EVTCHNOP_bind_pirq: Bind a local event channel to IRQ <irq>.
|
||||
@@ -73,14 +72,14 @@ typedef struct {
|
||||
* 2. Only a sufficiently-privileged domain may bind to a physical IRQ.
|
||||
*/
|
||||
#define EVTCHNOP_bind_pirq 2
|
||||
typedef struct {
|
||||
typedef struct evtchn_bind_pirq {
|
||||
/* IN parameters. */
|
||||
u32 pirq; /* 0 */
|
||||
u32 pirq;
|
||||
#define BIND_PIRQ__WILL_SHARE 1
|
||||
u32 flags; /* BIND_PIRQ__* */ /* 4 */
|
||||
u32 flags; /* BIND_PIRQ__* */
|
||||
/* OUT parameters. */
|
||||
u32 port; /* 8 */
|
||||
} PACKED evtchn_bind_pirq_t; /* 12 bytes */
|
||||
u32 port;
|
||||
} evtchn_bind_pirq_t;
|
||||
|
||||
/*
|
||||
* EVTCHNOP_bind_ipi: Bind a local event channel to receive events.
|
||||
@@ -89,12 +88,12 @@ typedef struct {
|
||||
* may not be changed.
|
||||
*/
|
||||
#define EVTCHNOP_bind_ipi 7
|
||||
typedef struct {
|
||||
typedef struct evtchn_bind_ipi {
|
||||
/* IN parameters. */
|
||||
u32 ipi_vcpu; /* 0 */
|
||||
u32 ipi_vcpu;
|
||||
/* OUT parameters. */
|
||||
u32 port; /* 4 */
|
||||
} PACKED evtchn_bind_ipi_t; /* 8 bytes */
|
||||
u32 port;
|
||||
} evtchn_bind_ipi_t;
|
||||
|
||||
/*
|
||||
* EVTCHNOP_close: Close the communication channel which has an endpoint at
|
||||
@@ -106,24 +105,23 @@ typedef struct {
|
||||
* for which <dom> is not DOMID_SELF.
|
||||
*/
|
||||
#define EVTCHNOP_close 3
|
||||
typedef struct {
|
||||
typedef struct evtchn_close {
|
||||
/* IN parameters. */
|
||||
domid_t dom; /* 0 */
|
||||
u16 __pad;
|
||||
u32 port; /* 4 */
|
||||
domid_t dom;
|
||||
u32 port;
|
||||
/* No OUT parameters. */
|
||||
} PACKED evtchn_close_t; /* 8 bytes */
|
||||
} evtchn_close_t;
|
||||
|
||||
/*
|
||||
* EVTCHNOP_send: Send an event to the remote end of the channel whose local
|
||||
* endpoint is <DOMID_SELF, local_port>.
|
||||
*/
|
||||
#define EVTCHNOP_send 4
|
||||
typedef struct {
|
||||
typedef struct evtchn_send {
|
||||
/* IN parameters. */
|
||||
u32 local_port; /* 0 */
|
||||
u32 local_port;
|
||||
/* No OUT parameters. */
|
||||
} PACKED evtchn_send_t; /* 4 bytes */
|
||||
} evtchn_send_t;
|
||||
|
||||
/*
|
||||
* EVTCHNOP_status: Get the current status of the communication channel which
|
||||
@@ -134,11 +132,10 @@ typedef struct {
|
||||
* channel for which <dom> is not DOMID_SELF.
|
||||
*/
|
||||
#define EVTCHNOP_status 5
|
||||
typedef struct {
|
||||
typedef struct evtchn_status {
|
||||
/* IN parameters */
|
||||
domid_t dom; /* 0 */
|
||||
u16 __pad;
|
||||
u32 port; /* 4 */
|
||||
domid_t dom;
|
||||
u32 port;
|
||||
/* OUT parameters */
|
||||
#define EVTCHNSTAT_closed 0 /* Channel is not in use. */
|
||||
#define EVTCHNSTAT_unbound 1 /* Channel is waiting interdom connection.*/
|
||||
@@ -146,26 +143,24 @@ typedef struct {
|
||||
#define EVTCHNSTAT_pirq 3 /* Channel is bound to a phys IRQ line. */
|
||||
#define EVTCHNSTAT_virq 4 /* Channel is bound to a virtual IRQ line */
|
||||
#define EVTCHNSTAT_ipi 5 /* Channel is bound to a virtual IPI line */
|
||||
u32 status; /* 8 */
|
||||
union { /* 12 */
|
||||
u32 status;
|
||||
union {
|
||||
struct {
|
||||
domid_t dom; /* 12 */
|
||||
} PACKED unbound; /* EVTCHNSTAT_unbound */
|
||||
domid_t dom;
|
||||
} unbound; /* EVTCHNSTAT_unbound */
|
||||
struct {
|
||||
domid_t dom; /* 12 */
|
||||
u16 __pad;
|
||||
u32 port; /* 16 */
|
||||
} PACKED interdomain; /* EVTCHNSTAT_interdomain */
|
||||
u32 pirq; /* EVTCHNSTAT_pirq */ /* 12 */
|
||||
u32 virq; /* EVTCHNSTAT_virq */ /* 12 */
|
||||
u32 ipi_vcpu; /* EVTCHNSTAT_ipi */ /* 12 */
|
||||
} PACKED u;
|
||||
} PACKED evtchn_status_t; /* 20 bytes */
|
||||
domid_t dom;
|
||||
u32 port;
|
||||
} interdomain; /* EVTCHNSTAT_interdomain */
|
||||
u32 pirq; /* EVTCHNSTAT_pirq */
|
||||
u32 virq; /* EVTCHNSTAT_virq */
|
||||
u32 ipi_vcpu; /* EVTCHNSTAT_ipi */
|
||||
} u;
|
||||
} evtchn_status_t;
|
||||
|
||||
typedef struct {
|
||||
u32 cmd; /* EVTCHNOP_* */ /* 0 */
|
||||
u32 __reserved; /* 4 */
|
||||
union { /* 8 */
|
||||
typedef struct evtchn_op {
|
||||
u32 cmd; /* EVTCHNOP_* */
|
||||
union {
|
||||
evtchn_alloc_unbound_t alloc_unbound;
|
||||
evtchn_bind_interdomain_t bind_interdomain;
|
||||
evtchn_bind_virq_t bind_virq;
|
||||
@@ -174,8 +169,7 @@ typedef struct {
|
||||
evtchn_close_t close;
|
||||
evtchn_send_t send;
|
||||
evtchn_status_t status;
|
||||
u8 __dummy[24];
|
||||
} PACKED u;
|
||||
} PACKED evtchn_op_t; /* 32 bytes */
|
||||
} u;
|
||||
} evtchn_op_t;
|
||||
|
||||
#endif /* __XEN_PUBLIC_EVENT_CHANNEL_H__ */
|
||||
@@ -71,17 +71,17 @@
|
||||
* [XEN]: This field is written by Xen and read by the sharing guest.
|
||||
* [GST]: This field is written by the guest and read by Xen.
|
||||
*/
|
||||
typedef struct {
|
||||
typedef struct grant_entry {
|
||||
/* GTF_xxx: various type and flag information. [XEN,GST] */
|
||||
u16 flags; /* 0 */
|
||||
u16 flags;
|
||||
/* The domain being granted foreign privileges. [GST] */
|
||||
domid_t domid; /* 2 */
|
||||
domid_t domid;
|
||||
/*
|
||||
* GTF_permit_access: Frame that @domid is allowed to map and access. [GST]
|
||||
* GTF_accept_transfer: Frame whose ownership transferred by @domid. [XEN]
|
||||
*/
|
||||
u32 frame; /* 4 */
|
||||
} PACKED grant_entry_t; /* 8 bytes */
|
||||
u32 frame;
|
||||
} grant_entry_t;
|
||||
|
||||
/*
|
||||
* Type of grant entry.
|
||||
@@ -148,18 +148,16 @@ typedef u16 grant_ref_t;
|
||||
* to be accounted to the correct grant reference!
|
||||
*/
|
||||
#define GNTTABOP_map_grant_ref 0
|
||||
typedef struct {
|
||||
typedef struct gnttab_map_grant_ref {
|
||||
/* IN parameters. */
|
||||
memory_t host_virt_addr; /* 0 */
|
||||
MEMORY_PADDING;
|
||||
domid_t dom; /* 8 */
|
||||
grant_ref_t ref; /* 10 */
|
||||
u16 flags; /* 12: GNTMAP_* */
|
||||
memory_t host_virt_addr;
|
||||
domid_t dom;
|
||||
grant_ref_t ref;
|
||||
u16 flags; /* GNTMAP_* */
|
||||
/* OUT parameters. */
|
||||
s16 handle; /* 14: +ve: handle; -ve: GNTST_* */
|
||||
memory_t dev_bus_addr; /* 16 */
|
||||
MEMORY_PADDING;
|
||||
} PACKED gnttab_map_grant_ref_t; /* 24 bytes */
|
||||
s16 handle; /* +ve: handle; -ve: GNTST_* */
|
||||
memory_t dev_bus_addr;
|
||||
} gnttab_map_grant_ref_t;
|
||||
|
||||
/*
|
||||
* GNTTABOP_unmap_grant_ref: Destroy one or more grant-reference mappings
|
||||
@@ -173,17 +171,14 @@ typedef struct {
|
||||
* mappings will remain in the device or host TLBs.
|
||||
*/
|
||||
#define GNTTABOP_unmap_grant_ref 1
|
||||
typedef struct {
|
||||
typedef struct gnttab_unmap_grant_ref {
|
||||
/* IN parameters. */
|
||||
memory_t host_virt_addr; /* 0 */
|
||||
MEMORY_PADDING;
|
||||
memory_t dev_bus_addr; /* 8 */
|
||||
MEMORY_PADDING;
|
||||
u16 handle; /* 16 */
|
||||
memory_t host_virt_addr;
|
||||
memory_t dev_bus_addr;
|
||||
u16 handle;
|
||||
/* OUT parameters. */
|
||||
s16 status; /* 18: GNTST_* */
|
||||
u32 __pad;
|
||||
} PACKED gnttab_unmap_grant_ref_t; /* 24 bytes */
|
||||
s16 status; /* GNTST_* */
|
||||
} gnttab_unmap_grant_ref_t;
|
||||
|
||||
#define GNTUNMAP_DEV_FROM_VIRT (~0U)
|
||||
|
||||
@@ -197,28 +192,26 @@ typedef struct {
|
||||
* 3. Xen may not support more than a single grant-table page per domain.
|
||||
*/
|
||||
#define GNTTABOP_setup_table 2
|
||||
typedef struct {
|
||||
typedef struct gnttab_setup_table {
|
||||
/* IN parameters. */
|
||||
domid_t dom; /* 0 */
|
||||
u16 nr_frames; /* 2 */
|
||||
u16 __pad;
|
||||
domid_t dom;
|
||||
u16 nr_frames;
|
||||
/* OUT parameters. */
|
||||
s16 status; /* 6: GNTST_* */
|
||||
unsigned long *frame_list; /* 8 */
|
||||
MEMORY_PADDING;
|
||||
} PACKED gnttab_setup_table_t; /* 16 bytes */
|
||||
s16 status; /* GNTST_* */
|
||||
unsigned long *frame_list;
|
||||
} gnttab_setup_table_t;
|
||||
|
||||
/*
|
||||
* GNTTABOP_dump_table: Dump the contents of the grant table to the
|
||||
* xen console. Debugging use only.
|
||||
*/
|
||||
#define GNTTABOP_dump_table 3
|
||||
typedef struct {
|
||||
typedef struct gnttab_dump_table {
|
||||
/* IN parameters. */
|
||||
domid_t dom; /* 0 */
|
||||
domid_t dom;
|
||||
/* OUT parameters. */
|
||||
s16 status; /* 2: GNTST_* */
|
||||
} PACKED gnttab_dump_table_t; /* 4 bytes */
|
||||
s16 status; /* GNTST_* */
|
||||
} gnttab_dump_table_t;
|
||||
|
||||
|
||||
/*
|
||||
@@ -265,16 +258,14 @@ typedef struct {
|
||||
"no spare translation slot in the I/O MMU", \
|
||||
"permission denied" \
|
||||
}
|
||||
|
||||
|
||||
typedef struct {
|
||||
union { /* 0 */
|
||||
|
||||
typedef struct gnttab_op {
|
||||
union {
|
||||
gnttab_map_grant_ref_t map_grant_ref;
|
||||
gnttab_unmap_grant_ref_t unmap_grant_ref;
|
||||
gnttab_setup_table_t setup_table;
|
||||
gnttab_dump_table_t dump_table;
|
||||
u8 __dummy[24];
|
||||
} PACKED u;
|
||||
} PACKED gnttab_op_t; /* 32 bytes */
|
||||
} u;
|
||||
} gnttab_op_t;
|
||||
|
||||
#endif /* __XEN_PUBLIC_GRANT_TABLE_H__ */
|
||||
@@ -28,12 +28,12 @@
|
||||
*/
|
||||
#define BLKIF_MAX_SEGMENTS_PER_REQUEST 11
|
||||
|
||||
typedef struct {
|
||||
u8 operation; /* 0: BLKIF_OP_??? */
|
||||
u8 nr_segments; /* 1: number of segments */
|
||||
blkif_vdev_t device; /* 2: only for read/write requests */
|
||||
unsigned long id; /* 4: private guest value, echoed in resp */
|
||||
blkif_sector_t sector_number; /* start sector idx on disk (r/w only) */
|
||||
typedef struct blkif_request {
|
||||
u8 operation; /* BLKIF_OP_??? */
|
||||
u8 nr_segments; /* number of segments */
|
||||
blkif_vdev_t device; /* only for read/write requests */
|
||||
unsigned long id; /* private guest value, echoed in resp */
|
||||
blkif_sector_t sector_number;/* start sector idx on disk (r/w only) */
|
||||
/* @f_a_s[2:0]=last_sect ; @f_a_s[5:3]=first_sect */
|
||||
#ifdef CONFIG_XEN_BLKDEV_GRANT
|
||||
/* @f_a_s[:16]= grant reference (16 bits) */
|
||||
@@ -43,7 +43,7 @@ typedef struct {
|
||||
/* @first_sect: first sector in frame to transfer (inclusive). */
|
||||
/* @last_sect: last sector in frame to transfer (inclusive). */
|
||||
unsigned long frame_and_sects[BLKIF_MAX_SEGMENTS_PER_REQUEST];
|
||||
} PACKED blkif_request_t;
|
||||
} blkif_request_t;
|
||||
|
||||
#define blkif_first_sect(_fas) (((_fas)>>3)&7)
|
||||
#define blkif_last_sect(_fas) ((_fas)&7)
|
||||
@@ -52,11 +52,11 @@ typedef struct {
|
||||
#define blkif_gref_from_fas(_fas) ((_fas)>>16)
|
||||
#endif
|
||||
|
||||
typedef struct {
|
||||
typedef struct blkif_response {
|
||||
unsigned long id; /* copied from request */
|
||||
u8 operation; /* copied from request */
|
||||
s16 status; /* BLKIF_RSP_??? */
|
||||
} PACKED blkif_response_t;
|
||||
} blkif_response_t;
|
||||
|
||||
#define BLKIF_RSP_ERROR -1 /* non-specific 'error' */
|
||||
#define BLKIF_RSP_OKAY 0 /* non-specific 'okay' */
|
||||
@@ -88,11 +88,10 @@ DEFINE_RING_TYPES(blkif, blkif_request_t, blkif_response_t);
|
||||
#define VDISK_READONLY 0x4
|
||||
|
||||
typedef struct vdisk {
|
||||
blkif_sector_t capacity; /* 0: Size in terms of 512-byte sectors. */
|
||||
blkif_vdev_t device; /* 8: Device number (opaque 16 bit value). */
|
||||
u16 info; /* 10: Device type and flags (VDISK_*). */
|
||||
u16 sector_size; /* 12: Minimum alignment for requests. */
|
||||
u16 _pad;
|
||||
} PACKED vdisk_t; /* 16 bytes */
|
||||
blkif_sector_t capacity; /* Size in terms of 512-byte sectors. */
|
||||
blkif_vdev_t device; /* Device number (opaque 16 bit value). */
|
||||
u16 info; /* Device type and flags (VDISK_*). */
|
||||
u16 sector_size; /* Minimum alignment for requests. */
|
||||
} vdisk_t; /* 16 bytes */
|
||||
|
||||
#endif /* __XEN_PUBLIC_IO_BLKIF_H__ */
|
||||
@@ -16,13 +16,13 @@
|
||||
* CONTROLLER MESSAGING INTERFACE.
|
||||
*/
|
||||
|
||||
typedef struct {
|
||||
typedef struct control_msg {
|
||||
u8 type; /* 0: echoed in response */
|
||||
u8 subtype; /* 1: echoed in response */
|
||||
u8 id; /* 2: echoed in response */
|
||||
u8 length; /* 3: number of bytes in 'msg' */
|
||||
u8 msg[60]; /* 4: type-specific message data */
|
||||
} PACKED control_msg_t; /* 64 bytes */
|
||||
} control_msg_t; /* 64 bytes */
|
||||
|
||||
/* These are used by the control message deferred ring. */
|
||||
#define CONTROL_RING_SIZE 8
|
||||
@@ -38,16 +38,16 @@ typedef u32 CONTROL_RING_IDX;
|
||||
#define CONTROL_RING_MEM 520
|
||||
DEFINE_RING_TYPES(ctrl, control_msg_t, control_msg_t);
|
||||
|
||||
typedef struct {
|
||||
typedef struct control_if {
|
||||
union {
|
||||
ctrl_sring_t tx_ring; /* 0: guest -> controller */
|
||||
ctrl_sring_t tx_ring; /* guest -> controller */
|
||||
char __x[CONTROL_RING_MEM];
|
||||
} PACKED;
|
||||
};
|
||||
union {
|
||||
ctrl_sring_t rx_ring; /* 520: controller -> guest */
|
||||
ctrl_sring_t rx_ring; /* controller -> guest */
|
||||
char __y[CONTROL_RING_MEM];
|
||||
} PACKED;
|
||||
} PACKED control_if_t; /* 1040 bytes */
|
||||
};
|
||||
} control_if_t;
|
||||
|
||||
/*
|
||||
* Top-level command types.
|
||||
@@ -103,12 +103,12 @@ typedef struct {
|
||||
#define BLKIF_INTERFACE_STATUS_DISCONNECTED 1 /* Exists but is disconnected. */
|
||||
#define BLKIF_INTERFACE_STATUS_CONNECTED 2 /* Exists and is connected. */
|
||||
#define BLKIF_INTERFACE_STATUS_CHANGED 3 /* A device has been added or removed. */
|
||||
typedef struct {
|
||||
u32 handle; /* 0 */
|
||||
u32 status; /* 4 */
|
||||
u16 evtchn; /* 8: (only if status == BLKIF_INTERFACE_STATUS_CONNECTED). */
|
||||
domid_t domid; /* 10: status != BLKIF_INTERFACE_STATUS_DESTROYED */
|
||||
} PACKED blkif_fe_interface_status_t; /* 12 bytes */
|
||||
typedef struct blkif_fe_interface_status {
|
||||
u32 handle;
|
||||
u32 status;
|
||||
u16 evtchn; /* (only if status == BLKIF_INTERFACE_STATUS_CONNECTED). */
|
||||
domid_t domid; /* status != BLKIF_INTERFACE_STATUS_DESTROYED */
|
||||
} blkif_fe_interface_status_t;
|
||||
|
||||
/*
|
||||
* CMSG_BLKIF_FE_DRIVER_STATUS:
|
||||
@@ -124,46 +124,44 @@ typedef struct {
|
||||
*/
|
||||
#define BLKIF_DRIVER_STATUS_DOWN 0
|
||||
#define BLKIF_DRIVER_STATUS_UP 1
|
||||
typedef struct {
|
||||
typedef struct blkif_fe_driver_status {
|
||||
/* IN */
|
||||
u32 status; /* 0: BLKIF_DRIVER_STATUS_??? */
|
||||
u32 status; /* BLKIF_DRIVER_STATUS_??? */
|
||||
/* OUT */
|
||||
/* Driver should query interfaces [0..max_handle]. */
|
||||
u32 max_handle; /* 4 */
|
||||
} PACKED blkif_fe_driver_status_t; /* 8 bytes */
|
||||
u32 max_handle;
|
||||
} blkif_fe_driver_status_t;
|
||||
|
||||
/*
|
||||
* CMSG_BLKIF_FE_INTERFACE_CONNECT:
|
||||
* If successful, the domain controller will acknowledge with a
|
||||
* STATUS_CONNECTED message.
|
||||
*/
|
||||
typedef struct {
|
||||
u32 handle; /* 0 */
|
||||
u32 __pad;
|
||||
memory_t shmem_frame; /* 8 */
|
||||
MEMORY_PADDING;
|
||||
} PACKED blkif_fe_interface_connect_t; /* 16 bytes */
|
||||
typedef struct blkif_fe_interface_connect {
|
||||
u32 handle;
|
||||
memory_t shmem_frame;
|
||||
} blkif_fe_interface_connect_t;
|
||||
|
||||
/*
|
||||
* CMSG_BLKIF_FE_INTERFACE_DISCONNECT:
|
||||
* If successful, the domain controller will acknowledge with a
|
||||
* STATUS_DISCONNECTED message.
|
||||
*/
|
||||
typedef struct {
|
||||
u32 handle; /* 0 */
|
||||
} PACKED blkif_fe_interface_disconnect_t; /* 4 bytes */
|
||||
typedef struct blkif_fe_interface_disconnect {
|
||||
u32 handle;
|
||||
} blkif_fe_interface_disconnect_t;
|
||||
|
||||
/*
|
||||
* CMSG_BLKIF_FE_INTERFACE_QUERY:
|
||||
*/
|
||||
typedef struct {
|
||||
typedef struct blkif_fe_interface_query {
|
||||
/* IN */
|
||||
u32 handle; /* 0 */
|
||||
u32 handle;
|
||||
/* OUT */
|
||||
u32 status; /* 4 */
|
||||
u16 evtchn; /* 8: (only if status == BLKIF_INTERFACE_STATUS_CONNECTED). */
|
||||
domid_t domid; /* 10: status != BLKIF_INTERFACE_STATUS_DESTROYED */
|
||||
} PACKED blkif_fe_interface_query_t; /* 12 bytes */
|
||||
u32 status;
|
||||
u16 evtchn; /* (only if status == BLKIF_INTERFACE_STATUS_CONNECTED). */
|
||||
domid_t domid; /* status != BLKIF_INTERFACE_STATUS_DESTROYED */
|
||||
} blkif_fe_interface_query_t;
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
@@ -218,14 +216,13 @@ typedef struct {
|
||||
* created. The controller will send a DOWN notification to the front-end
|
||||
* driver.
|
||||
*/
|
||||
typedef struct {
|
||||
typedef struct blkif_be_create {
|
||||
/* IN */
|
||||
domid_t domid; /* 0: Domain attached to new interface. */
|
||||
u16 __pad;
|
||||
u32 blkif_handle; /* 4: Domain-specific interface handle. */
|
||||
domid_t domid; /* Domain attached to new interface. */
|
||||
u32 blkif_handle; /* Domain-specific interface handle. */
|
||||
/* OUT */
|
||||
u32 status; /* 8 */
|
||||
} PACKED blkif_be_create_t; /* 12 bytes */
|
||||
u32 status;
|
||||
} blkif_be_create_t;
|
||||
|
||||
/*
|
||||
* CMSG_BLKIF_BE_DESTROY:
|
||||
@@ -233,14 +230,13 @@ typedef struct {
|
||||
* torn down. The controller will send a DESTROYED notification to the
|
||||
* front-end driver.
|
||||
*/
|
||||
typedef struct {
|
||||
typedef struct blkif_be_destroy {
|
||||
/* IN */
|
||||
domid_t domid; /* 0: Identify interface to be destroyed. */
|
||||
u16 __pad;
|
||||
u32 blkif_handle; /* 4: ...ditto... */
|
||||
domid_t domid; /* Identify interface to be destroyed. */
|
||||
u32 blkif_handle; /* ...ditto... */
|
||||
/* OUT */
|
||||
u32 status; /* 8 */
|
||||
} PACKED blkif_be_destroy_t; /* 12 bytes */
|
||||
u32 status;
|
||||
} blkif_be_destroy_t;
|
||||
|
||||
/*
|
||||
* CMSG_BLKIF_BE_CONNECT:
|
||||
@@ -248,17 +244,15 @@ typedef struct {
|
||||
* connected. The controller will send a CONNECTED notification to the
|
||||
* front-end driver.
|
||||
*/
|
||||
typedef struct {
|
||||
typedef struct blkif_be_connect {
|
||||
/* IN */
|
||||
domid_t domid; /* 0: Domain attached to new interface. */
|
||||
u16 __pad;
|
||||
u32 blkif_handle; /* 4: Domain-specific interface handle. */
|
||||
memory_t shmem_frame; /* 8: Page cont. shared comms window. */
|
||||
MEMORY_PADDING;
|
||||
u32 evtchn; /* 16: Event channel for notifications. */
|
||||
domid_t domid; /* Domain attached to new interface. */
|
||||
u32 blkif_handle; /* Domain-specific interface handle. */
|
||||
memory_t shmem_frame; /* Page cont. shared comms window. */
|
||||
u32 evtchn; /* Event channel for notifications. */
|
||||
/* OUT */
|
||||
u32 status; /* 20 */
|
||||
} PACKED blkif_be_connect_t; /* 24 bytes */
|
||||
u32 status;
|
||||
} blkif_be_connect_t;
|
||||
|
||||
/*
|
||||
* CMSG_BLKIF_BE_DISCONNECT:
|
||||
@@ -266,40 +260,36 @@ typedef struct {
|
||||
* disconnected. The controller will send a DOWN notification to the front-end
|
||||
* driver.
|
||||
*/
|
||||
typedef struct {
|
||||
typedef struct blkif_be_disconnect {
|
||||
/* IN */
|
||||
domid_t domid; /* 0: Domain attached to new interface. */
|
||||
u16 __pad;
|
||||
u32 blkif_handle; /* 4: Domain-specific interface handle. */
|
||||
domid_t domid; /* Domain attached to new interface. */
|
||||
u32 blkif_handle; /* Domain-specific interface handle. */
|
||||
/* OUT */
|
||||
u32 status; /* 8 */
|
||||
} PACKED blkif_be_disconnect_t; /* 12 bytes */
|
||||
u32 status;
|
||||
} blkif_be_disconnect_t;
|
||||
|
||||
/* CMSG_BLKIF_BE_VBD_CREATE */
|
||||
typedef struct {
|
||||
typedef struct blkif_be_vbd_create {
|
||||
/* IN */
|
||||
domid_t domid; /* 0: Identify blkdev interface. */
|
||||
u16 __pad;
|
||||
u32 blkif_handle; /* 4: ...ditto... */
|
||||
blkif_pdev_t pdevice; /* 8 */
|
||||
u32 dev_handle; /* 12: Extended device id field. */
|
||||
blkif_vdev_t vdevice; /* 16: Interface-specific id for this VBD. */
|
||||
u16 readonly; /* 18: Non-zero -> VBD isn't writable. */
|
||||
domid_t domid; /* Identify blkdev interface. */
|
||||
u32 blkif_handle; /* ...ditto... */
|
||||
blkif_pdev_t pdevice;
|
||||
u32 dev_handle; /* Extended device id field. */
|
||||
blkif_vdev_t vdevice; /* Interface-specific id for this VBD. */
|
||||
u16 readonly; /* Non-zero -> VBD isn't writable. */
|
||||
/* OUT */
|
||||
u32 status; /* 20 */
|
||||
} PACKED blkif_be_vbd_create_t; /* 24 bytes */
|
||||
u32 status;
|
||||
} blkif_be_vbd_create_t;
|
||||
|
||||
/* CMSG_BLKIF_BE_VBD_DESTROY */
|
||||
typedef struct {
|
||||
typedef struct blkif_be_vbd_destroy {
|
||||
/* IN */
|
||||
domid_t domid; /* 0: Identify blkdev interface. */
|
||||
u16 __pad0; /* 2 */
|
||||
u32 blkif_handle; /* 4: ...ditto... */
|
||||
blkif_vdev_t vdevice; /* 8: Interface-specific id of the VBD. */
|
||||
u16 __pad1; /* 10 */
|
||||
domid_t domid; /* Identify blkdev interface. */
|
||||
u32 blkif_handle; /* ...ditto... */
|
||||
blkif_vdev_t vdevice; /* Interface-specific id of the VBD. */
|
||||
/* OUT */
|
||||
u32 status; /* 12 */
|
||||
} PACKED blkif_be_vbd_destroy_t; /* 16 bytes */
|
||||
u32 status;
|
||||
} blkif_be_vbd_destroy_t;
|
||||
|
||||
/*
|
||||
* CMSG_BLKIF_BE_DRIVER_STATUS:
|
||||
@@ -307,9 +297,9 @@ typedef struct {
|
||||
* If the driver goes DOWN while interfaces are still UP, the controller
|
||||
* will automatically send DOWN notifications.
|
||||
*/
|
||||
typedef struct {
|
||||
u32 status; /* 0: BLKIF_DRIVER_STATUS_??? */
|
||||
} PACKED blkif_be_driver_status_t; /* 4 bytes */
|
||||
typedef struct blkif_be_driver_status {
|
||||
u32 status; /* BLKIF_DRIVER_STATUS_??? */
|
||||
} blkif_be_driver_status_t;
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
@@ -336,13 +326,13 @@ typedef struct {
|
||||
#define NETIF_INTERFACE_STATUS_DISCONNECTED 1 /* Exists but is disconnected. */
|
||||
#define NETIF_INTERFACE_STATUS_CONNECTED 2 /* Exists and is connected. */
|
||||
#define NETIF_INTERFACE_STATUS_CHANGED 3 /* A device has been added or removed. */
|
||||
typedef struct {
|
||||
u32 handle; /* 0 */
|
||||
u32 status; /* 4 */
|
||||
u16 evtchn; /* 8: status == NETIF_INTERFACE_STATUS_CONNECTED */
|
||||
u8 mac[6]; /* 10: status == NETIF_INTERFACE_STATUS_CONNECTED */
|
||||
domid_t domid; /* 16: status != NETIF_INTERFACE_STATUS_DESTROYED */
|
||||
} PACKED netif_fe_interface_status_t; /* 18 bytes */
|
||||
typedef struct netif_fe_interface_status {
|
||||
u32 handle;
|
||||
u32 status;
|
||||
u16 evtchn; /* status == NETIF_INTERFACE_STATUS_CONNECTED */
|
||||
u8 mac[6]; /* status == NETIF_INTERFACE_STATUS_CONNECTED */
|
||||
domid_t domid; /* status != NETIF_INTERFACE_STATUS_DESTROYED */
|
||||
} netif_fe_interface_status_t;
|
||||
|
||||
/*
|
||||
* CMSG_NETIF_FE_DRIVER_STATUS:
|
||||
@@ -358,49 +348,46 @@ typedef struct {
|
||||
*/
|
||||
#define NETIF_DRIVER_STATUS_DOWN 0
|
||||
#define NETIF_DRIVER_STATUS_UP 1
|
||||
typedef struct {
|
||||
typedef struct netif_fe_driver_status {
|
||||
/* IN */
|
||||
u32 status; /* 0: NETIF_DRIVER_STATUS_??? */
|
||||
u32 status; /* NETIF_DRIVER_STATUS_??? */
|
||||
/* OUT */
|
||||
/* Driver should query interfaces [0..max_handle]. */
|
||||
u32 max_handle; /* 4 */
|
||||
} PACKED netif_fe_driver_status_t; /* 8 bytes */
|
||||
u32 max_handle;
|
||||
} netif_fe_driver_status_t;
|
||||
|
||||
/*
|
||||
* CMSG_NETIF_FE_INTERFACE_CONNECT:
|
||||
* If successful, the domain controller will acknowledge with a
|
||||
* STATUS_CONNECTED message.
|
||||
*/
|
||||
typedef struct {
|
||||
u32 handle; /* 0 */
|
||||
u32 __pad; /* 4 */
|
||||
memory_t tx_shmem_frame; /* 8 */
|
||||
MEMORY_PADDING;
|
||||
memory_t rx_shmem_frame; /* 16 */
|
||||
MEMORY_PADDING;
|
||||
} PACKED netif_fe_interface_connect_t; /* 24 bytes */
|
||||
typedef struct netif_fe_interface_connect {
|
||||
u32 handle;
|
||||
memory_t tx_shmem_frame;
|
||||
memory_t rx_shmem_frame;
|
||||
} netif_fe_interface_connect_t;
|
||||
|
||||
/*
|
||||
* CMSG_NETIF_FE_INTERFACE_DISCONNECT:
|
||||
* If successful, the domain controller will acknowledge with a
|
||||
* STATUS_DISCONNECTED message.
|
||||
*/
|
||||
typedef struct {
|
||||
u32 handle; /* 0 */
|
||||
} PACKED netif_fe_interface_disconnect_t; /* 4 bytes */
|
||||
typedef struct netif_fe_interface_disconnect {
|
||||
u32 handle;
|
||||
} netif_fe_interface_disconnect_t;
|
||||
|
||||
/*
|
||||
* CMSG_NETIF_FE_INTERFACE_QUERY:
|
||||
*/
|
||||
typedef struct {
|
||||
typedef struct netif_fe_interface_query {
|
||||
/* IN */
|
||||
u32 handle; /* 0 */
|
||||
u32 handle;
|
||||
/* OUT */
|
||||
u32 status; /* 4 */
|
||||
u16 evtchn; /* 8: status == NETIF_INTERFACE_STATUS_CONNECTED */
|
||||
u8 mac[6]; /* 10: status == NETIF_INTERFACE_STATUS_CONNECTED */
|
||||
domid_t domid; /* 16: status != NETIF_INTERFACE_STATUS_DESTROYED */
|
||||
} PACKED netif_fe_interface_query_t; /* 18 bytes */
|
||||
u32 status;
|
||||
u16 evtchn; /* status == NETIF_INTERFACE_STATUS_CONNECTED */
|
||||
u8 mac[6]; /* status == NETIF_INTERFACE_STATUS_CONNECTED */
|
||||
domid_t domid; /* status != NETIF_INTERFACE_STATUS_DESTROYED */
|
||||
} netif_fe_interface_query_t;
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
@@ -448,18 +435,15 @@ typedef struct {
|
||||
* created. The controller will send a DOWN notification to the front-end
|
||||
* driver.
|
||||
*/
|
||||
typedef struct {
|
||||
typedef struct netif_be_create {
|
||||
/* IN */
|
||||
domid_t domid; /* 0: Domain attached to new interface. */
|
||||
u16 __pad0; /* 2 */
|
||||
u32 netif_handle; /* 4: Domain-specific interface handle. */
|
||||
u8 mac[6]; /* 8 */
|
||||
u16 __pad1; /* 14 */
|
||||
u8 be_mac[6]; /* 16 */
|
||||
u16 __pad2; /* 22 */
|
||||
domid_t domid; /* Domain attached to new interface. */
|
||||
u32 netif_handle; /* Domain-specific interface handle. */
|
||||
u8 mac[6];
|
||||
u8 be_mac[6];
|
||||
/* OUT */
|
||||
u32 status; /* 24 */
|
||||
} PACKED netif_be_create_t; /* 28 bytes */
|
||||
u32 status;
|
||||
} netif_be_create_t;
|
||||
|
||||
/*
|
||||
* CMSG_NETIF_BE_DESTROY:
|
||||
@@ -467,30 +451,28 @@ typedef struct {
|
||||
* torn down. The controller will send a DESTROYED notification to the
|
||||
* front-end driver.
|
||||
*/
|
||||
typedef struct {
|
||||
typedef struct netif_be_destroy {
|
||||
/* IN */
|
||||
domid_t domid; /* 0: Identify interface to be destroyed. */
|
||||
u16 __pad;
|
||||
u32 netif_handle; /* 4: ...ditto... */
|
||||
domid_t domid; /* Identify interface to be destroyed. */
|
||||
u32 netif_handle; /* ...ditto... */
|
||||
/* OUT */
|
||||
u32 status; /* 8 */
|
||||
} PACKED netif_be_destroy_t; /* 12 bytes */
|
||||
u32 status;
|
||||
} netif_be_destroy_t;
|
||||
|
||||
/*
|
||||
* CMSG_NETIF_BE_CREDITLIMIT:
|
||||
* Limit a virtual interface to "credit_bytes" bytes per "period_usec"
|
||||
* microseconds.
|
||||
*/
|
||||
typedef struct {
|
||||
typedef struct netif_be_creditlimit {
|
||||
/* IN */
|
||||
domid_t domid; /* 0: Domain attached to new interface. */
|
||||
u16 __pad0; /* 2 */
|
||||
u32 netif_handle; /* 4: Domain-specific interface handle. */
|
||||
u32 credit_bytes; /* 8: Vifs credit of bytes per period. */
|
||||
u32 period_usec; /* 12: Credit replenishment period. */
|
||||
domid_t domid; /* Domain attached to new interface. */
|
||||
u32 netif_handle; /* Domain-specific interface handle. */
|
||||
u32 credit_bytes; /* Vifs credit of bytes per period. */
|
||||
u32 period_usec; /* Credit replenishment period. */
|
||||
/* OUT */
|
||||
u32 status; /* 16 */
|
||||
} PACKED netif_be_creditlimit_t; /* 20 bytes */
|
||||
u32 status;
|
||||
} netif_be_creditlimit_t;
|
||||
|
||||
/*
|
||||
* CMSG_NETIF_BE_CONNECT:
|
||||
@@ -498,20 +480,16 @@ typedef struct {
|
||||
* connected. The controller will send a CONNECTED notification to the
|
||||
* front-end driver.
|
||||
*/
|
||||
typedef struct {
|
||||
typedef struct netif_be_connect {
|
||||
/* IN */
|
||||
domid_t domid; /* 0: Domain attached to new interface. */
|
||||
u16 __pad0; /* 2 */
|
||||
u32 netif_handle; /* 4: Domain-specific interface handle. */
|
||||
memory_t tx_shmem_frame; /* 8: Page cont. tx shared comms window. */
|
||||
MEMORY_PADDING;
|
||||
memory_t rx_shmem_frame; /* 16: Page cont. rx shared comms window. */
|
||||
MEMORY_PADDING;
|
||||
u16 evtchn; /* 24: Event channel for notifications. */
|
||||
u16 __pad1; /* 26 */
|
||||
domid_t domid; /* Domain attached to new interface. */
|
||||
u32 netif_handle; /* Domain-specific interface handle. */
|
||||
memory_t tx_shmem_frame; /* Page cont. tx shared comms window. */
|
||||
memory_t rx_shmem_frame; /* Page cont. rx shared comms window. */
|
||||
u16 evtchn; /* Event channel for notifications. */
|
||||
/* OUT */
|
||||
u32 status; /* 28 */
|
||||
} PACKED netif_be_connect_t; /* 32 bytes */
|
||||
u32 status;
|
||||
} netif_be_connect_t;
|
||||
|
||||
/*
|
||||
* CMSG_NETIF_BE_DISCONNECT:
|
||||
@@ -519,14 +497,13 @@ typedef struct {
|
||||
* disconnected. The controller will send a DOWN notification to the front-end
|
||||
* driver.
|
||||
*/
|
||||
typedef struct {
|
||||
typedef struct netif_be_disconnect {
|
||||
/* IN */
|
||||
domid_t domid; /* 0: Domain attached to new interface. */
|
||||
u16 __pad;
|
||||
u32 netif_handle; /* 4: Domain-specific interface handle. */
|
||||
domid_t domid; /* Domain attached to new interface. */
|
||||
u32 netif_handle; /* Domain-specific interface handle. */
|
||||
/* OUT */
|
||||
u32 status; /* 8 */
|
||||
} PACKED netif_be_disconnect_t; /* 12 bytes */
|
||||
u32 status;
|
||||
} netif_be_disconnect_t;
|
||||
|
||||
/*
|
||||
* CMSG_NETIF_BE_DRIVER_STATUS:
|
||||
@@ -534,9 +511,9 @@ typedef struct {
|
||||
* If the driver goes DOWN while interfaces are still UP, the domain
|
||||
* will automatically send DOWN notifications.
|
||||
*/
|
||||
typedef struct {
|
||||
u32 status; /* 0: NETIF_DRIVER_STATUS_??? */
|
||||
} PACKED netif_be_driver_status_t; /* 4 bytes */
|
||||
typedef struct netif_be_driver_status {
|
||||
u32 status; /* NETIF_DRIVER_STATUS_??? */
|
||||
} netif_be_driver_status_t;
|
||||
|
||||
|
||||
|
||||
@@ -561,13 +538,13 @@ typedef struct {
|
||||
#define USBIF_INTERFACE_STATUS_DESTROYED 0 /* Interface doesn't exist. */
|
||||
#define USBIF_INTERFACE_STATUS_DISCONNECTED 1 /* Exists but is disconnected. */
|
||||
#define USBIF_INTERFACE_STATUS_CONNECTED 2 /* Exists and is connected. */
|
||||
typedef struct {
|
||||
u32 status; /* 0 */
|
||||
u16 evtchn; /* 4: (only if status == BLKIF_INTERFACE_STATUS_CONNECTED). */
|
||||
domid_t domid; /* 6: status != BLKIF_INTERFACE_STATUS_DESTROYED */
|
||||
u32 bandwidth; /* 8 */
|
||||
u32 num_ports; /* 12 */
|
||||
} PACKED usbif_fe_interface_status_changed_t; /* 12 bytes */
|
||||
typedef struct usbif_fe_interface_status_changed {
|
||||
u32 status;
|
||||
u16 evtchn; /* (only if status == BLKIF_INTERFACE_STATUS_CONNECTED). */
|
||||
domid_t domid; /* status != BLKIF_INTERFACE_STATUS_DESTROYED */
|
||||
u32 bandwidth;
|
||||
u32 num_ports;
|
||||
} usbif_fe_interface_status_changed_t;
|
||||
|
||||
/*
|
||||
* CMSG_USBIF_FE_DRIVER_STATUS_CHANGED:
|
||||
@@ -583,28 +560,27 @@ typedef struct {
|
||||
*/
|
||||
#define USBIF_DRIVER_STATUS_DOWN 0
|
||||
#define USBIF_DRIVER_STATUS_UP 1
|
||||
typedef struct {
|
||||
typedef struct usbif_fe_driver_status_changed {
|
||||
/* IN */
|
||||
u32 status; /* 0: USBIF_DRIVER_STATUS_??? */
|
||||
} PACKED usbif_fe_driver_status_changed_t; /* 4 bytes */
|
||||
u32 status; /* USBIF_DRIVER_STATUS_??? */
|
||||
} usbif_fe_driver_status_changed_t;
|
||||
|
||||
/*
|
||||
* CMSG_USBIF_FE_INTERFACE_CONNECT:
|
||||
* If successful, the domain controller will acknowledge with a
|
||||
* STATUS_CONNECTED message.
|
||||
*/
|
||||
typedef struct {
|
||||
u32 __pad;
|
||||
memory_t shmem_frame; /* 8 */
|
||||
MEMORY_PADDING;
|
||||
} PACKED usbif_fe_interface_connect_t; /* 16 bytes */
|
||||
typedef struct usbif_fe_interface_connect {
|
||||
memory_t shmem_frame;
|
||||
} usbif_fe_interface_connect_t;
|
||||
|
||||
/*
|
||||
* CMSG_BLKIF_FE_INTERFACE_DISCONNECT:
|
||||
* If successful, the domain controller will acknowledge with a
|
||||
* STATUS_DISCONNECTED message.
|
||||
*/
|
||||
typedef struct {} PACKED usbif_fe_interface_disconnect_t; /* 4 bytes */
|
||||
typedef struct usbif_fe_interface_disconnect {
|
||||
} usbif_fe_interface_disconnect_t;
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
@@ -648,13 +624,12 @@ typedef struct {} PACKED usbif_fe_interface_disconnect_t; /* 4 bytes */
|
||||
* created. The controller will send a DOWN notification to the front-end
|
||||
* driver.
|
||||
*/
|
||||
typedef struct {
|
||||
typedef struct usbif_be_create {
|
||||
/* IN */
|
||||
domid_t domid; /* 0: Domain attached to new interface. */
|
||||
u16 __pad;
|
||||
domid_t domid; /* Domain attached to new interface. */
|
||||
/* OUT */
|
||||
u32 status; /* 8 */
|
||||
} PACKED usbif_be_create_t; /* 12 bytes */
|
||||
u32 status;
|
||||
} usbif_be_create_t;
|
||||
|
||||
/*
|
||||
* CMSG_USBIF_BE_DESTROY:
|
||||
@@ -662,13 +637,12 @@ typedef struct {
|
||||
* torn down. The controller will send a DESTROYED notification to the
|
||||
* front-end driver.
|
||||
*/
|
||||
typedef struct {
|
||||
typedef struct usbif_be_destroy {
|
||||
/* IN */
|
||||
domid_t domid; /* 0: Identify interface to be destroyed. */
|
||||
u16 __pad;
|
||||
domid_t domid; /* Identify interface to be destroyed. */
|
||||
/* OUT */
|
||||
u32 status; /* 8 */
|
||||
} PACKED usbif_be_destroy_t; /* 12 bytes */
|
||||
u32 status;
|
||||
} usbif_be_destroy_t;
|
||||
|
||||
/*
|
||||
* CMSG_USBIF_BE_CONNECT:
|
||||
@@ -676,19 +650,17 @@ typedef struct {
|
||||
* connected. The controller will send a CONNECTED notification to the
|
||||
* front-end driver.
|
||||
*/
|
||||
typedef struct {
|
||||
typedef struct usbif_be_connect {
|
||||
/* IN */
|
||||
domid_t domid; /* 0: Domain attached to new interface. */
|
||||
u16 __pad;
|
||||
memory_t shmem_frame; /* 8: Page cont. shared comms window. */
|
||||
MEMORY_PADDING;
|
||||
u32 evtchn; /* 16: Event channel for notifications. */
|
||||
u32 bandwidth; /* 20: Bandwidth allocated for isoch / int - us
|
||||
domid_t domid; /* Domain attached to new interface. */
|
||||
memory_t shmem_frame; /* Page cont. shared comms window. */
|
||||
u32 evtchn; /* Event channel for notifications. */
|
||||
u32 bandwidth; /* Bandwidth allocated for isoch / int - us
|
||||
* per 1ms frame (ie between 0 and 900 or 800
|
||||
* depending on USB version). */
|
||||
/* OUT */
|
||||
u32 status; /* 24 */
|
||||
} PACKED usbif_be_connect_t; /* 28 bytes */
|
||||
u32 status;
|
||||
} usbif_be_connect_t;
|
||||
|
||||
/*
|
||||
* CMSG_USBIF_BE_DISCONNECT:
|
||||
@@ -696,13 +668,12 @@ typedef struct {
|
||||
* disconnected. The controller will send a DOWN notification to the front-end
|
||||
* driver.
|
||||
*/
|
||||
typedef struct {
|
||||
typedef struct usbif_be_disconnect {
|
||||
/* IN */
|
||||
domid_t domid; /* 0: Domain attached to new interface. */
|
||||
u16 __pad;
|
||||
domid_t domid; /* Domain attached to new interface. */
|
||||
/* OUT */
|
||||
u32 status; /* 8 */
|
||||
} PACKED usbif_be_disconnect_t; /* 12 bytes */
|
||||
u32 status;
|
||||
} usbif_be_disconnect_t;
|
||||
|
||||
/*
|
||||
* CMSG_USBIF_BE_DRIVER_STATUS_CHANGED:
|
||||
@@ -710,9 +681,9 @@ typedef struct {
|
||||
* If the driver goes DOWN while interfaces are still UP, the controller
|
||||
* will automatically send DOWN notifications.
|
||||
*/
|
||||
typedef struct {
|
||||
u32 status; /* 0: USBIF_DRIVER_STATUS_??? */
|
||||
} PACKED usbif_be_driver_status_changed_t; /* 4 bytes */
|
||||
typedef struct usbif_be_driver_status_changed {
|
||||
u32 status; /* USBIF_DRIVER_STATUS_??? */
|
||||
} usbif_be_driver_status_changed_t;
|
||||
|
||||
#define USB_PATH_LEN 16
|
||||
|
||||
@@ -721,25 +692,23 @@ typedef struct {
|
||||
* Instruct the backend driver to claim any device plugged into the specified
|
||||
* host port and to allow the specified domain to control that port.
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
typedef struct usbif_be_claim_port {
|
||||
/* IN */
|
||||
domid_t domid; /* 0: which domain */
|
||||
u32 usbif_port; /* 6: port on the virtual root hub */
|
||||
u32 status; /* 10: status of operation */
|
||||
domid_t domid; /* which domain */
|
||||
u32 usbif_port; /* port on the virtual root hub */
|
||||
u32 status; /* status of operation */
|
||||
char path[USB_PATH_LEN]; /* Currently specified in the Linux style - may need to be
|
||||
* converted to some OS-independent format at some stage. */
|
||||
} PACKED usbif_be_claim_port_t;
|
||||
} usbif_be_claim_port_t;
|
||||
|
||||
/*
|
||||
* CMSG_USBIF_BE_RELEASE_PORT:
|
||||
* Instruct the backend driver to release any device plugged into the specified
|
||||
* host port.
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
typedef struct usbif_be_release_port {
|
||||
char path[USB_PATH_LEN];
|
||||
} PACKED usbif_be_release_port_t;
|
||||
} usbif_be_release_port_t;
|
||||
|
||||
/******************************************************************************
|
||||
* SHUTDOWN DEFINITIONS
|
||||
@@ -754,10 +723,9 @@ typedef struct
|
||||
/* SHUTDOWN_suspend. */
|
||||
#define CMSG_SHUTDOWN_SYSRQ 3
|
||||
|
||||
typedef struct {
|
||||
char key; /* 0: sysrq key */
|
||||
char __pad[3]; /* 1: */
|
||||
} PACKED shutdown_sysrq_t; /* 4 bytes */
|
||||
typedef struct shutdown_sysrq {
|
||||
char key; /* sysrq key */
|
||||
} shutdown_sysrq_t;
|
||||
|
||||
/******************************************************************************
|
||||
* VCPU HOTPLUG CONTROLS
|
||||
@@ -773,10 +741,10 @@ typedef struct {
|
||||
* CMSG_VCPU_HOTPLUG:
|
||||
* Indicate which vcpu's state should change
|
||||
*/
|
||||
typedef struct {
|
||||
u32 vcpu; /* 0: VCPU's whose state will change */
|
||||
u32 status; /* 4: Return code indicates success or failure. */
|
||||
} PACKED vcpu_hotplug_t;
|
||||
typedef struct vcpu_hotplug {
|
||||
u32 vcpu; /* VCPU's whose state will change */
|
||||
u32 status; /* Return code indicates success or failure. */
|
||||
} vcpu_hotplug_t;
|
||||
|
||||
/******************************************************************************
|
||||
* MEMORY CONTROLS
|
||||
@@ -788,12 +756,12 @@ typedef struct {
|
||||
* CMSG_MEM_REQUEST:
|
||||
* Request that the domain change its memory reservation.
|
||||
*/
|
||||
typedef struct {
|
||||
typedef struct mem_request {
|
||||
/* OUT */
|
||||
u32 target; /* 0: Target memory reservation in pages. */
|
||||
u32 target; /* Target memory reservation in pages. */
|
||||
/* IN */
|
||||
u32 status; /* 4: Return code indicates success or failure. */
|
||||
} PACKED mem_request_t; /* 8 bytes */
|
||||
u32 status; /* Return code indicates success or failure. */
|
||||
} mem_request_t;
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
@@ -801,12 +769,12 @@ typedef struct {
|
||||
*/
|
||||
|
||||
#define CMSG_DEBUG_CONNECTION_STATUS 0
|
||||
typedef struct {
|
||||
typedef struct pdb_Connection {
|
||||
#define PDB_CONNECTION_STATUS_UP 1
|
||||
#define PDB_CONNECTION_STATUS_DOWN 2
|
||||
u32 status;
|
||||
memory_t ring; /* status: UP */
|
||||
u32 evtchn; /* status: UP */
|
||||
} PACKED pdb_connection_t, *pdb_connection_p;
|
||||
} pdb_connection_t, *pdb_connection_p;
|
||||
|
||||
#endif /* __XEN_PUBLIC_IO_DOMAIN_CONTROLLER_H__ */
|
||||
@@ -9,31 +9,28 @@
|
||||
#ifndef __XEN_PUBLIC_IO_NETIF_H__
|
||||
#define __XEN_PUBLIC_IO_NETIF_H__
|
||||
|
||||
typedef struct {
|
||||
memory_t addr; /* 0: Machine address of packet. */
|
||||
MEMORY_PADDING;
|
||||
typedef struct netif_tx_request {
|
||||
memory_t addr; /* Machine address of packet. */
|
||||
u16 csum_blank:1; /* Proto csum field blank? */
|
||||
u16 id:15; /* 8: Echoed in response message. */
|
||||
u16 size; /* 10: Packet size in bytes. */
|
||||
} PACKED netif_tx_request_t; /* 12 bytes */
|
||||
u16 id:15; /* Echoed in response message. */
|
||||
u16 size; /* Packet size in bytes. */
|
||||
} netif_tx_request_t;
|
||||
|
||||
typedef struct netif_tx_response {
|
||||
u16 id;
|
||||
s8 status;
|
||||
} netif_tx_response_t;
|
||||
|
||||
typedef struct {
|
||||
u16 id; /* 0 */
|
||||
s8 status; /* 2 */
|
||||
u8 __pad; /* 3 */
|
||||
} PACKED netif_tx_response_t; /* 4 bytes */
|
||||
u16 id; /* Echoed in response message. */
|
||||
} netif_rx_request_t;
|
||||
|
||||
typedef struct {
|
||||
u16 id; /* 0: Echoed in response message. */
|
||||
} PACKED netif_rx_request_t; /* 2 bytes */
|
||||
|
||||
typedef struct {
|
||||
memory_t addr; /* 0: Machine address of packet. */
|
||||
MEMORY_PADDING;
|
||||
memory_t addr; /* Machine address of packet. */
|
||||
u16 csum_valid:1; /* Protocol checksum is validated? */
|
||||
u16 id:15; /* 8: */
|
||||
s16 status; /* 10: -ve: BLKIF_RSP_* ; +ve: Rx'ed pkt size. */
|
||||
} PACKED netif_rx_response_t; /* 12 bytes */
|
||||
u16 id:15;
|
||||
s16 status; /* -ve: BLKIF_RSP_* ; +ve: Rx'ed pkt size. */
|
||||
} netif_rx_response_t;
|
||||
|
||||
/*
|
||||
* We use a special capitalised type name because it is _essential_ that all
|
||||
@@ -53,7 +50,7 @@ typedef u32 NETIF_RING_IDX;
|
||||
#define NETIF_RX_RING_SIZE 256
|
||||
|
||||
/* This structure must fit in a memory page. */
|
||||
typedef struct {
|
||||
typedef struct netif_tx_interface {
|
||||
/*
|
||||
* Frontend places packets into ring at tx_req_prod.
|
||||
* Frontend receives event when tx_resp_prod passes tx_event.
|
||||
@@ -61,30 +58,30 @@ typedef struct {
|
||||
* may use it to determine if all queued packets have been seen by the
|
||||
* backend.
|
||||
*/
|
||||
NETIF_RING_IDX req_prod; /* 0 */
|
||||
NETIF_RING_IDX req_cons; /* 4 */
|
||||
NETIF_RING_IDX resp_prod; /* 8 */
|
||||
NETIF_RING_IDX event; /* 12 */
|
||||
union { /* 16 */
|
||||
NETIF_RING_IDX req_prod;
|
||||
NETIF_RING_IDX req_cons;
|
||||
NETIF_RING_IDX resp_prod;
|
||||
NETIF_RING_IDX event;
|
||||
union {
|
||||
netif_tx_request_t req;
|
||||
netif_tx_response_t resp;
|
||||
} PACKED ring[NETIF_TX_RING_SIZE];
|
||||
} PACKED netif_tx_interface_t;
|
||||
} ring[NETIF_TX_RING_SIZE];
|
||||
} netif_tx_interface_t;
|
||||
|
||||
/* This structure must fit in a memory page. */
|
||||
typedef struct {
|
||||
typedef struct netif_rx_interface {
|
||||
/*
|
||||
* Frontend places empty buffers into ring at rx_req_prod.
|
||||
* Frontend receives event when rx_resp_prod passes rx_event.
|
||||
*/
|
||||
NETIF_RING_IDX req_prod; /* 0 */
|
||||
NETIF_RING_IDX resp_prod; /* 4 */
|
||||
NETIF_RING_IDX event; /* 8 */
|
||||
union { /* 12 */
|
||||
NETIF_RING_IDX req_prod;
|
||||
NETIF_RING_IDX resp_prod;
|
||||
NETIF_RING_IDX event;
|
||||
union {
|
||||
netif_rx_request_t req;
|
||||
netif_rx_response_t resp;
|
||||
} PACKED ring[NETIF_RX_RING_SIZE];
|
||||
} PACKED netif_rx_interface_t;
|
||||
} ring[NETIF_RX_RING_SIZE];
|
||||
} netif_rx_interface_t;
|
||||
|
||||
/* Descriptor status values */
|
||||
#define NETIF_RSP_DROPPED -2
|
||||
|
||||
@@ -11,56 +11,51 @@
|
||||
#define PHYSDEVOP_APIC_WRITE 9
|
||||
#define PHYSDEVOP_ASSIGN_VECTOR 10
|
||||
|
||||
typedef struct {
|
||||
typedef struct physdevop_irq_status_query {
|
||||
/* IN */
|
||||
u32 irq; /* 0 */
|
||||
u32 irq;
|
||||
/* OUT */
|
||||
/* Need to call PHYSDEVOP_IRQ_UNMASK_NOTIFY when the IRQ has been serviced? */
|
||||
#define PHYSDEVOP_IRQ_NEEDS_UNMASK_NOTIFY (1<<0)
|
||||
u32 flags; /* 4 */
|
||||
} PACKED physdevop_irq_status_query_t; /* 8 bytes */
|
||||
u32 flags;
|
||||
} physdevop_irq_status_query_t;
|
||||
|
||||
typedef struct {
|
||||
typedef struct physdevop_set_iopl {
|
||||
/* IN */
|
||||
u32 iopl; /* 0 */
|
||||
} PACKED physdevop_set_iopl_t; /* 4 bytes */
|
||||
u32 iopl;
|
||||
} physdevop_set_iopl_t;
|
||||
|
||||
typedef struct {
|
||||
typedef struct physdevop_set_iobitmap {
|
||||
/* IN */
|
||||
memory_t bitmap; /* 0 */
|
||||
MEMORY_PADDING;
|
||||
u32 nr_ports; /* 8 */
|
||||
u32 __pad0; /* 12 */
|
||||
} PACKED physdevop_set_iobitmap_t; /* 16 bytes */
|
||||
memory_t bitmap;
|
||||
u32 nr_ports;
|
||||
} physdevop_set_iobitmap_t;
|
||||
|
||||
typedef struct {
|
||||
typedef struct physdevop_apic {
|
||||
/* IN */
|
||||
u32 apic; /* 0 */
|
||||
u32 apic;
|
||||
u32 offset;
|
||||
/* IN or OUT */
|
||||
u32 value;
|
||||
} PACKED physdevop_apic_t;
|
||||
} physdevop_apic_t;
|
||||
|
||||
typedef struct {
|
||||
typedef struct physdevop_irq {
|
||||
/* IN */
|
||||
u32 irq; /* 0 */
|
||||
u32 irq;
|
||||
/* OUT */
|
||||
u32 vector;
|
||||
} PACKED physdevop_irq_t;
|
||||
} physdevop_irq_t;
|
||||
|
||||
typedef struct _physdev_op_st
|
||||
{
|
||||
u32 cmd; /* 0 */
|
||||
u32 __pad; /* 4 */
|
||||
union { /* 8 */
|
||||
typedef struct physdev_op {
|
||||
u32 cmd;
|
||||
union {
|
||||
physdevop_irq_status_query_t irq_status_query;
|
||||
physdevop_set_iopl_t set_iopl;
|
||||
physdevop_set_iobitmap_t set_iobitmap;
|
||||
physdevop_apic_t apic_op;
|
||||
physdevop_irq_t irq_op;
|
||||
u8 __dummy[32];
|
||||
} PACKED u;
|
||||
} PACKED physdev_op_t; /* 40 bytes */
|
||||
} u;
|
||||
} physdev_op_t;
|
||||
|
||||
#endif /* __XEN_PUBLIC_PHYSDEV_H__ */
|
||||
|
||||
|
||||
@@ -16,7 +16,6 @@
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
#ifndef __XEN_PUBLIC_POLICY_OPS_H__
|
||||
#define __XEN_PUBLIC_POLICY_OPS_H__
|
||||
|
||||
@@ -28,47 +27,44 @@
|
||||
* This makes sure that old versions of policy tools will stop working in a
|
||||
* well-defined way (rather than crashing the machine, for instance).
|
||||
*/
|
||||
#define POLICY_INTERFACE_VERSION 0xAAAA0002
|
||||
#define POLICY_INTERFACE_VERSION 0xAAAA0003
|
||||
|
||||
/************************************************************************/
|
||||
|
||||
#define POLICY_SETPOLICY 4
|
||||
typedef struct {
|
||||
typedef struct policy_setpolicy {
|
||||
/* IN variables. */
|
||||
u16 policy_type;
|
||||
u16 padding1;
|
||||
/* OUT variables */
|
||||
void *pushcache;
|
||||
u16 pushcache_size;
|
||||
} PACKED policy_setpolicy_t;
|
||||
} policy_setpolicy_t;
|
||||
|
||||
|
||||
#define POLICY_GETPOLICY 5
|
||||
typedef struct {
|
||||
typedef struct policy_getpolicy {
|
||||
/* IN variables. */
|
||||
u16 policy_type;
|
||||
u16 padding1;
|
||||
/* OUT variables */
|
||||
void *pullcache;
|
||||
u16 pullcache_size;
|
||||
} PACKED policy_getpolicy_t;
|
||||
} policy_getpolicy_t;
|
||||
|
||||
#define POLICY_DUMPSTATS 6
|
||||
typedef struct {
|
||||
typedef struct policy_dumpstats {
|
||||
void *pullcache;
|
||||
u16 pullcache_size;
|
||||
} PACKED policy_dumpstats_t;
|
||||
} policy_dumpstats_t;
|
||||
|
||||
|
||||
typedef struct {
|
||||
u32 cmd; /* 0 */
|
||||
u32 interface_version; /* 4 */ /* POLICY_INTERFACE_VERSION */
|
||||
union { /* 8 */
|
||||
u32 dummy[14]; /* 72bytes */
|
||||
typedef struct policy_op {
|
||||
u32 cmd;
|
||||
u32 interface_version; /* POLICY_INTERFACE_VERSION */
|
||||
union {
|
||||
policy_setpolicy_t setpolicy;
|
||||
policy_getpolicy_t getpolicy;
|
||||
policy_dumpstats_t dumpstats;
|
||||
} PACKED u;
|
||||
} PACKED policy_op_t; /* 80 bytes */
|
||||
} u;
|
||||
} policy_op_t;
|
||||
|
||||
#endif /* __XEN_PUBLIC_POLICY_OPS_H__ */
|
||||
@@ -19,8 +19,7 @@
|
||||
* Generic scheduler control command - used to adjust system-wide scheduler
|
||||
* parameters
|
||||
*/
|
||||
struct sched_ctl_cmd
|
||||
{
|
||||
struct sched_ctl_cmd {
|
||||
u32 sched_id;
|
||||
u32 direction;
|
||||
union {
|
||||
@@ -30,33 +29,30 @@ struct sched_ctl_cmd
|
||||
} u;
|
||||
};
|
||||
|
||||
struct sched_adjdom_cmd
|
||||
{
|
||||
u32 sched_id; /* 0 */
|
||||
u32 direction; /* 4 */
|
||||
domid_t domain; /* 8 */
|
||||
u16 __pad0;
|
||||
u32 __pad1;
|
||||
union { /* 16 */
|
||||
struct sched_adjdom_cmd {
|
||||
u32 sched_id;
|
||||
u32 direction;
|
||||
domid_t domain;
|
||||
union {
|
||||
struct bvt_adjdom
|
||||
{
|
||||
u32 mcu_adv; /* 16: mcu advance: inverse of weight */
|
||||
u32 warpback; /* 20: warp? */
|
||||
s32 warpvalue; /* 24: warp value */
|
||||
long long warpl; /* 32: warp limit */
|
||||
long long warpu; /* 40: unwarp time requirement */
|
||||
} PACKED bvt;
|
||||
u32 mcu_adv; /* mcu advance: inverse of weight */
|
||||
u32 warpback; /* warp? */
|
||||
s32 warpvalue; /* warp value */
|
||||
long long warpl; /* warp limit */
|
||||
long long warpu; /* unwarp time requirement */
|
||||
} bvt;
|
||||
|
||||
struct sedf_adjdom
|
||||
{
|
||||
u64 period; /* 16 */
|
||||
u64 slice; /* 24 */
|
||||
u64 latency; /* 32 */
|
||||
u16 extratime; /* 36 */
|
||||
u16 weight; /* 38 */
|
||||
} PACKED sedf;
|
||||
u64 period;
|
||||
u64 slice;
|
||||
u64 latency;
|
||||
u16 extratime;
|
||||
u16 weight;
|
||||
} sedf;
|
||||
|
||||
} PACKED u;
|
||||
} PACKED; /* 40 bytes */
|
||||
} u;
|
||||
};
|
||||
|
||||
#endif /* __XEN_PUBLIC_SCHED_CTL_H__ */
|
||||
@@ -43,7 +43,7 @@ union vmcs_arbytes {
|
||||
g : 1,
|
||||
null_bit : 1,
|
||||
reserved2 : 15;
|
||||
} __attribute__((packed)) fields;
|
||||
} fields;
|
||||
unsigned int bytes;
|
||||
};
|
||||
|
||||
|
||||
+34
-44
@@ -295,8 +295,7 @@ typedef struct
|
||||
* Per-VCPU information goes here. This will be cleaned up more when Xen
|
||||
* actually supports multi-VCPU guests.
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
typedef struct vcpu_info {
|
||||
/*
|
||||
* 'evtchn_upcall_pending' is written non-zero by Xen to indicate
|
||||
* a pending notification for a particular VCPU. It is then cleared
|
||||
@@ -322,20 +321,20 @@ typedef struct
|
||||
* an upcall activation. The mask is cleared when the VCPU requests
|
||||
* to block: this avoids wakeup-waiting races.
|
||||
*/
|
||||
u8 evtchn_upcall_pending; /* 0 */
|
||||
u8 evtchn_upcall_mask; /* 1 */
|
||||
u8 pad0, pad1;
|
||||
u32 evtchn_pending_sel; /* 4 */
|
||||
arch_vcpu_info_t arch; /* 8 */
|
||||
} PACKED vcpu_info_t; /* 8 + arch */
|
||||
u8 evtchn_upcall_pending;
|
||||
u8 evtchn_upcall_mask;
|
||||
u32 evtchn_pending_sel;
|
||||
#ifdef __ARCH_HAS_VCPU_INFO
|
||||
arch_vcpu_info_t arch;
|
||||
#endif
|
||||
} vcpu_info_t;
|
||||
|
||||
/*
|
||||
* Xen/kernel shared data -- pointer provided in start_info.
|
||||
* NB. We expect that this struct is smaller than a page.
|
||||
*/
|
||||
typedef struct shared_info_st
|
||||
{
|
||||
vcpu_info_t vcpu_data[MAX_VIRT_CPUS]; /* 0 */
|
||||
typedef struct shared_info {
|
||||
vcpu_info_t vcpu_data[MAX_VIRT_CPUS];
|
||||
|
||||
u32 n_vcpu;
|
||||
|
||||
@@ -370,14 +369,14 @@ typedef struct shared_info_st
|
||||
* 32-bit selector to be set. Each bit in the selector covers a 32-bit
|
||||
* word in the PENDING bitfield array.
|
||||
*/
|
||||
u32 evtchn_pending[32]; /* 4 */
|
||||
u32 evtchn_mask[32]; /* 136 */
|
||||
u32 evtchn_pending[32];
|
||||
u32 evtchn_mask[32];
|
||||
|
||||
/*
|
||||
* Time: The following abstractions are exposed: System Time, Clock Time,
|
||||
* Domain Virtual Time. Domains can access Cycle counter time directly.
|
||||
*/
|
||||
u64 cpu_freq; /* 264: CPU frequency (Hz). */
|
||||
u64 cpu_freq; /* CPU frequency (Hz). */
|
||||
|
||||
/*
|
||||
* The following values are updated periodically (and not necessarily
|
||||
@@ -386,8 +385,8 @@ typedef struct shared_info_st
|
||||
* incremented immediately after. See the Xen-specific Linux code for an
|
||||
* example of how to read these values safely (arch/xen/kernel/time.c).
|
||||
*/
|
||||
u32 time_version1; /* 272 */
|
||||
u32 time_version2; /* 276 */
|
||||
u32 time_version1;
|
||||
u32 time_version2;
|
||||
tsc_timestamp_t tsc_timestamp; /* TSC at last update of time vals. */
|
||||
u64 system_time; /* Time, in nanosecs, since boot. */
|
||||
u32 wc_sec; /* Secs 00:00:00 UTC, Jan 1, 1970. */
|
||||
@@ -399,12 +398,12 @@ typedef struct shared_info_st
|
||||
* Allow a domain to specify a timeout value in system time and
|
||||
* domain virtual time.
|
||||
*/
|
||||
u64 wall_timeout; /* 312 */
|
||||
u64 domain_timeout; /* 320 */
|
||||
u64 wall_timeout;
|
||||
u64 domain_timeout;
|
||||
|
||||
arch_shared_info_t arch;
|
||||
|
||||
} PACKED shared_info_t;
|
||||
} shared_info_t;
|
||||
|
||||
/*
|
||||
* Start-of-day memory layout for the initial domain (DOM0):
|
||||
@@ -432,31 +431,22 @@ typedef struct shared_info_st
|
||||
*/
|
||||
|
||||
#define MAX_GUEST_CMDLINE 1024
|
||||
typedef struct {
|
||||
/* THE FOLLOWING ARE FILLED IN BOTH ON INITIAL BOOT AND ON RESUME. */
|
||||
memory_t nr_pages; /* 0: Total pages allocated to this domain. */
|
||||
_MEMORY_PADDING(A);
|
||||
memory_t shared_info; /* 8: MACHINE address of shared info struct. */
|
||||
_MEMORY_PADDING(B);
|
||||
u32 flags; /* 16: SIF_xxx flags. */
|
||||
u16 domain_controller_evtchn; /* 20 */
|
||||
u16 __pad;
|
||||
/* THE FOLLOWING ARE ONLY FILLED IN ON INITIAL BOOT (NOT RESUME). */
|
||||
memory_t pt_base; /* 24: VIRTUAL address of page directory. */
|
||||
_MEMORY_PADDING(C);
|
||||
memory_t nr_pt_frames; /* 32: Number of bootstrap p.t. frames. */
|
||||
_MEMORY_PADDING(D);
|
||||
memory_t mfn_list; /* 40: VIRTUAL address of page-frame list. */
|
||||
_MEMORY_PADDING(E);
|
||||
memory_t mod_start; /* 48: VIRTUAL address of pre-loaded module. */
|
||||
_MEMORY_PADDING(F);
|
||||
memory_t mod_len; /* 56: Size (bytes) of pre-loaded module. */
|
||||
_MEMORY_PADDING(G);
|
||||
s8 cmd_line[MAX_GUEST_CMDLINE]; /* 64 */
|
||||
memory_t store_page; /* 1088: VIRTUAL address of store page. */
|
||||
_MEMORY_PADDING(H);
|
||||
u16 store_evtchn; /* 1096: Event channel for store communication. */
|
||||
} PACKED start_info_t; /* 1098 bytes */
|
||||
typedef struct start_info {
|
||||
/* THE FOLLOWING ARE FILLED IN BOTH ON INITIAL BOOT AND ON RESUME. */
|
||||
memory_t nr_pages; /* Total pages allocated to this domain. */
|
||||
memory_t shared_info; /* MACHINE address of shared info struct. */
|
||||
u32 flags; /* SIF_xxx flags. */
|
||||
u16 domain_controller_evtchn;
|
||||
/* THE FOLLOWING ARE ONLY FILLED IN ON INITIAL BOOT (NOT RESUME). */
|
||||
memory_t pt_base; /* VIRTUAL address of page directory. */
|
||||
memory_t nr_pt_frames; /* Number of bootstrap p.t. frames. */
|
||||
memory_t mfn_list; /* VIRTUAL address of page-frame list. */
|
||||
memory_t mod_start; /* VIRTUAL address of pre-loaded module. */
|
||||
memory_t mod_len; /* Size (bytes) of pre-loaded module. */
|
||||
s8 cmd_line[MAX_GUEST_CMDLINE];
|
||||
memory_t store_page; /* VIRTUAL address of store page. */
|
||||
u16 store_evtchn; /* Event channel for store communication. */
|
||||
} start_info_t;
|
||||
|
||||
/* These flags are passed in the 'flags' field of start_info_t. */
|
||||
#define SIF_PRIVILEGED (1<<0) /* Is the domain privileged? */
|
||||
|
||||