This adds xencomm support for several PHYSDEVOP calls (manage_pci_add,
manage_pci_remove, map_pirq, and unmap_pirq) as well
as XEN_DOMCTL_assign_device.
Signed-off-by: Alex Williamson <alex.williamson@xxxxxx>
--
diff -r 2866e6af503e arch/ia64/xen/xcom_hcall.c
--- a/arch/ia64/xen/xcom_hcall.c Thu Jul 31 15:33:54 2008 +0100
+++ b/arch/ia64/xen/xcom_hcall.c Thu Aug 07 13:51:05 2008 -0600
@@ -143,6 +143,16 @@ xencomm_hypercall_physdev_op(int cmd, vo
break;
case PHYSDEVOP_irq_status_query:
argsize = sizeof(physdev_irq_status_query_t);
+ break;
+ case PHYSDEVOP_manage_pci_add:
+ case PHYSDEVOP_manage_pci_remove:
+ argsize = sizeof(physdev_manage_pci_t);
+ break;
+ case PHYSDEVOP_map_pirq:
+ argsize = sizeof(physdev_map_pirq_t);
+ break;
+ case PHYSDEVOP_unmap_pirq:
+ argsize = sizeof(physdev_unmap_pirq_t);
break;
default:
diff -r 2866e6af503e arch/ia64/xen/xcom_privcmd.c
--- a/arch/ia64/xen/xcom_privcmd.c Thu Jul 31 15:33:54 2008 +0100
+++ b/arch/ia64/xen/xcom_privcmd.c Thu Aug 07 13:51:05 2008 -0600
@@ -327,6 +327,7 @@ xencomm_privcmd_domctl(privcmd_hypercall
case XEN_DOMCTL_settimeoffset:
case XEN_DOMCTL_sendtrigger:
case XEN_DOMCTL_set_opt_feature:
+ case XEN_DOMCTL_assign_device:
break;
case XEN_DOMCTL_pin_mem_cacheattr:
return -ENOSYS;
@@ -828,6 +829,36 @@ xencomm_privcmd_ia64_debug_op(privcmd_hy
return ret;
}
+static int
+xencomm_privcmd_ia64_physdev_op(privcmd_hypercall_t *hypercall)
+{
+ int cmd = hypercall->arg[0];
+ struct xencomm_handle *desc;
+ unsigned int argsize;
+ int ret;
+
+ switch (cmd) {
+ case PHYSDEVOP_map_pirq:
+ argsize = sizeof(physdev_map_pirq_t);
+ break;
+ case PHYSDEVOP_unmap_pirq:
+ argsize = sizeof(physdev_unmap_pirq_t);
+ break;
+ default:
+ printk("%s: unknown PHYSDEVOP %d\n", __func__, cmd);
+ return -EINVAL;
+ }
+
+ desc = xencomm_map((void *)hypercall->arg[1], argsize);
+ if ((void *)hypercall->arg[1] != NULL && argsize > 0 && desc == NULL)
+ return -ENOMEM;
+
+ ret = xencomm_arch_hypercall_physdev_op(cmd, desc);
+
+ xencomm_free(desc);
+ return ret;
+}
+
int
privcmd_hypercall(privcmd_hypercall_t *hypercall)
{
@@ -854,6 +885,8 @@ privcmd_hypercall(privcmd_hypercall_t *h
return xencomm_privcmd_ia64_dom0vp_op(hypercall);
case __HYPERVISOR_ia64_debug_op:
return xencomm_privcmd_ia64_debug_op(hypercall);
+ case __HYPERVISOR_physdev_op:
+ return xencomm_privcmd_ia64_physdev_op(hypercall);
default:
printk("%s: unknown hcall (%ld)\n", __func__, hypercall->op);
return -ENOSYS;
_______________________________________________
Xen-ia64-devel mailing list
Xen-ia64-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-ia64-devel
|