# HG changeset patch # User Alex Williamson # Date 1181684903 21600 # Node ID a62cfa35d3b504d5ee1acd4a409a6fb3ee45a6bd # Parent bab3dd910801edf8763d55e0c8133bc08d1cbcfd [IA64] Add HYPERVISOR_add_io_space And call it to register new I/O spaces with Xen Signed-off-by: Alex Williamson diff -r bab3dd910801 -r a62cfa35d3b5 arch/ia64/pci/pci.c --- a/linux-2.6-xen-sparse/arch/ia64/pci/pci.c Tue Jun 12 15:43:27 2007 -0600 +++ b/linux-2.6-xen-sparse/arch/ia64/pci/pci.c Tue Jun 12 15:48:23 2007 -0600 @@ -164,6 +164,11 @@ new_space (u64 phys_base, int sparse) i = num_io_spaces++; io_space[i].mmio_base = mmio_base; io_space[i].sparse = sparse; + +#ifdef CONFIG_XEN + if (is_initial_xendomain()) + HYPERVISOR_add_io_space(phys_base, sparse, i); +#endif return i; } diff -r bab3dd910801 -r a62cfa35d3b5 include/asm-ia64/hypercall.h --- a/linux-2.6-xen-sparse/include/asm-ia64/hypercall.h Tue Jun 12 15:43:27 2007 -0600 +++ b/linux-2.6-xen-sparse/include/asm-ia64/hypercall.h Tue Jun 12 15:48:23 2007 -0600 @@ -387,6 +387,15 @@ xencomm_arch_hypercall_perfmon_op(un { return _hypercall4(int, ia64_dom0vp_op, IA64_DOM0VP_perfmon, cmd, arg, count); +} + +static inline int +HYPERVISOR_add_io_space(unsigned long phys_base, + unsigned long sparse, + unsigned long space_number) +{ + return _hypercall4(int, ia64_dom0vp_op, IA64_DOM0VP_add_io_space, + phys_base, sparse, space_number); } // for balloon driver diff -r bab3dd910801 -r a62cfa35d3b5 include/xen/interface/arch-ia64.h --- a/xen/include/public/arch-ia64.h Tue Jun 12 15:43:27 2007 -0600 +++ b/xen/include/public/arch-ia64.h Tue Jun 12 15:48:23 2007 -0600 @@ -531,6 +531,9 @@ DEFINE_XEN_GUEST_HANDLE(vcpu_guest_conte /* get fpswa revision */ #define IA64_DOM0VP_fpswa_revision 10 +/* Add an I/O port space range */ +#define IA64_DOM0VP_add_io_space 11 + // flags for page assignement to pseudo physical address space #define _ASSIGN_readonly 0 #define ASSIGN_readonly (1UL << _ASSIGN_readonly)