2014-01-23 19:54:00 +01:00
|
|
|
---
|
|
|
|
tools/qemu-xen-traditional-dir-remote/hw/xen_platform.c | 46 ++++++++++++++++
|
|
|
|
1 file changed, 46 insertions(+)
|
|
|
|
|
2015-11-11 18:04:52 +01:00
|
|
|
Index: xen-4.5.0-testing/tools/qemu-xen-traditional-dir-remote/xen-hooks.mak
|
|
|
|
===================================================================
|
|
|
|
--- xen-4.5.0-testing.orig/tools/qemu-xen-traditional-dir-remote/xen-hooks.mak
|
|
|
|
+++ xen-4.5.0-testing/tools/qemu-xen-traditional-dir-remote/xen-hooks.mak
|
|
|
|
@@ -1,3 +1,4 @@
|
|
|
|
+CPPFLAGS+= -I$(XEN_ROOT)/tools/libxc
|
|
|
|
CPPFLAGS+= -I$(XEN_ROOT)/tools/libxc/include
|
|
|
|
CPPFLAGS+= -I$(XEN_ROOT)/tools/xenstore/include
|
|
|
|
CPPFLAGS+= -I$(XEN_ROOT)/tools/include
|
2014-01-23 19:54:00 +01:00
|
|
|
Index: xen-4.4.0-testing/tools/qemu-xen-traditional-dir-remote/hw/xen_platform.c
|
2014-01-02 20:09:07 +01:00
|
|
|
===================================================================
|
2014-01-23 19:54:00 +01:00
|
|
|
--- xen-4.4.0-testing.orig/tools/qemu-xen-traditional-dir-remote/hw/xen_platform.c
|
|
|
|
+++ xen-4.4.0-testing/tools/qemu-xen-traditional-dir-remote/hw/xen_platform.c
|
2014-01-02 20:09:07 +01:00
|
|
|
@@ -30,6 +30,8 @@
|
|
|
|
#include "qemu-xen.h"
|
|
|
|
#include "net.h"
|
|
|
|
#include "xen_platform.h"
|
|
|
|
+#include "sysemu.h"
|
|
|
|
+#include <xc_private.h>
|
|
|
|
|
|
|
|
#include <assert.h>
|
|
|
|
#include <xenguest.h>
|
2014-01-23 19:54:00 +01:00
|
|
|
@@ -335,8 +337,52 @@ static void xen_platform_ioport_writeb(v
|
2014-01-02 20:09:07 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
+static uint32_t ioport_base;
|
|
|
|
+
|
2014-01-23 19:54:00 +01:00
|
|
|
+static void suse_platform_ioport_write(void *opaque, uint32_t addr, uint32_t val)
|
2014-01-02 20:09:07 +01:00
|
|
|
+{
|
|
|
|
+ DECLARE_DOMCTL;
|
|
|
|
+ int rc;
|
|
|
|
+
|
|
|
|
+ if (val == 0)
|
|
|
|
+ qemu_invalidate_map_cache();
|
|
|
|
+
|
|
|
|
+ switch (addr - ioport_base) {
|
|
|
|
+ case 0:
|
2014-01-23 19:54:00 +01:00
|
|
|
+ /* FIXME Unknown who makes use of this code! */
|
2014-01-02 20:09:07 +01:00
|
|
|
+ fprintf(logfile, "Init hypercall page %x, addr %x.\n", val, addr);
|
|
|
|
+ domctl.domain = (domid_t)domid;
|
|
|
|
+ domctl.u.hypercall_init.gmfn = val;
|
|
|
|
+ domctl.cmd = XEN_DOMCTL_hypercall_init;
|
|
|
|
+ rc = xc_domctl(xc_handle, &domctl);
|
|
|
|
+ fprintf(logfile, "result -> %d.\n", rc);
|
|
|
|
+ break;
|
|
|
|
+ case 4:
|
2014-01-23 19:54:00 +01:00
|
|
|
+ /* xen-kmp used this since xen-3.0.4, instead the official protocol from xen-3.3+
|
|
|
|
+ * pre vmdp 1.7 made use of 4 and 8 depending on how vmdp was configured.
|
|
|
|
+ * If vmdp was to control both disk and LAN it would use 4.
|
|
|
|
+ * If it controlled just disk or just LAN, it would use 8 below. */
|
2014-01-02 20:09:07 +01:00
|
|
|
+ fprintf(logfile, "Disconnect IDE hard disk...\n");
|
|
|
|
+ ide_unplug_harddisks();
|
|
|
|
+ fprintf(logfile, "Disconnect netifs...\n");
|
|
|
|
+ pci_unplug_netifs();
|
|
|
|
+ fprintf(logfile, "Shutdown taps...\n");
|
|
|
|
+ net_tap_shutdown_all();
|
|
|
|
+ fprintf(logfile, "Done.\n");
|
|
|
|
+ break;
|
|
|
|
+ default:
|
2014-01-23 19:54:00 +01:00
|
|
|
+ fprintf(logfile, "Write %x to bad port %x (base %x) on evtchn device.\n",
|
|
|
|
+ val, addr, ioport_base);
|
2014-01-02 20:09:07 +01:00
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
static void platform_ioport_map(PCIDevice *pci_dev, int region_num, uint32_t addr, uint32_t size, int type)
|
|
|
|
{
|
|
|
|
+ ioport_base = addr;
|
|
|
|
+
|
2014-01-23 19:54:00 +01:00
|
|
|
+ register_ioport_write(addr, 16, 4, suse_platform_ioport_write, NULL);
|
|
|
|
+
|
2014-01-02 20:09:07 +01:00
|
|
|
PCIXenPlatformState *d = (PCIXenPlatformState *)pci_dev;
|
|
|
|
register_ioport_write(addr, size, 1, xen_platform_ioport_writeb, d);
|
|
|
|
register_ioport_read(addr, size, 1, xen_platform_ioport_readb, d);
|