]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/qemu-xen.git/commitdiff
xen: Use libxendevicemodel for emulated IRQ handling
authorIan Campbell <ian.campbell@citrix.com>
Fri, 29 Jan 2016 12:32:08 +0000 (12:32 +0000)
committerIan Campbell <ian.campbell@citrix.com>
Thu, 11 Feb 2016 16:16:43 +0000 (16:16 +0000)
Create the necessary shim layer for older versions of Xen, as usual
using the new library API as the basis.

Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
configure
include/hw/xen/xen_common.h
xen-hvm.c

index 21c276a3ea715fd38c5c515437997d26a7b6cb0a..3c272cfef931d18860be59d4a4778285169ab10d 100755 (executable)
--- a/configure
+++ b/configure
@@ -2183,6 +2183,7 @@ int main(void) {
 
   dm = xendevicemodel_open(NULL, 0, 0, NULL);
   xendevicemodel_shutdown(dm);
+  xendevicemodel_set_pci_intx_level(dm, 0, 0, 0, 0, 0);
   return 0;
 }
 EOF
index 803afd3bf20790ce7f225a88ea1d08d31afd9bc5..d8ddf858748fb8d5504513c10a2c7b4a8c3e088e 100644 (file)
@@ -121,6 +121,13 @@ typedef xc_interface xendevicemodel_handle;
 #define xendevicemodel_s3_awaken(h) \
     xc_set_hvm_param(h, xen_domid, HVM_PARAM_ACPI_S_STATE, 0);
 
+#define xendevicemodel_set_pci_intx_level(h, d, b, dv, i, a) \
+    xc_hvm_set_pci_intx_level(h, xen_domid, b, d, dv, i, a)
+#define xendevicemodel_route_pci_intx_to_isa_irq(h, ix, ii) \
+    xc_hvm_set_pci_link_route(h, xen_domid, ix, ii)
+#define xendevicemodel_set_isa_irq_level(h, i, a) \
+    xc_hvm_set_isa_irq_level(h, xen_domid, i, a)
+
 #endif
 
 /* Xen before 4.6 */
index 28514ccf552f4232360911ecc7304708bc2957ac..c090c5e75ea17d60a167483a9b228988067c6625 100644 (file)
--- a/xen-hvm.c
+++ b/xen-hvm.c
@@ -126,8 +126,9 @@ int xen_pci_slot_get_pirq(PCIDevice *pci_dev, int irq_num)
 
 void xen_piix3_set_irq(void *opaque, int irq_num, int level)
 {
-    xc_hvm_set_pci_intx_level(xen_xc, xen_domid, 0, 0, irq_num >> 2,
-                              irq_num & 3, level);
+    xendevicemodel_set_pci_intx_level(xen_dm, 0, 0,
+                                      irq_num >> 2, irq_num & 3,
+                                      !!level);
 }
 
 void xen_piix_pci_write_config_client(uint32_t address, uint32_t val, int len)
@@ -142,7 +143,8 @@ void xen_piix_pci_write_config_client(uint32_t address, uint32_t val, int len)
         }
         v &= 0xf;
         if (((address + i) >= 0x60) && ((address + i) <= 0x63)) {
-            xc_hvm_set_pci_link_route(xen_xc, xen_domid, address + i - 0x60, v);
+            xendevicemodel_route_pci_intx_to_isa_irq(xen_dm,
+                                                     address + i - 0x60, v);
         }
     }
 }
@@ -169,7 +171,7 @@ static void xen_suspend_notifier(Notifier *n, void *data)
 
 static void xen_set_irq(void *opaque, int irq, int level)
 {
-    xc_hvm_set_isa_irq_level(xen_xc, xen_domid, irq, level);
+    xendevicemodel_set_isa_irq_level(xen_dm, irq, level);
 }
 
 qemu_irq *xen_interrupt_controller_init(void)