static void core_region_nop(MemoryListener *listener,
diff --git a/ioport.c b/ioport.c
index 78a3b89..073ed75 100644
--- a/ioport.c
+++ b/ioport.c
@@ -28,6 +28,7 @@
#include "ioport.h"
#include "trace.h"
#include "memory.h"
+#include "hw/xen.h"
/***********************************************************/
/* IO Port */
@@ -155,6 +156,11 @@ int register_ioport_read(pio_addr_t start, int length, int
size,
i);
ioport_opaque[i] = opaque;
}
+
+ if (xen_enabled()) {
+ xen_map_iorange(start, length, 0);
+ }
+
return 0;
}
@@ -175,7 +181,13 @@ int register_ioport_write(pio_addr_t start, int length,
int size,
i);
ioport_opaque[i] = opaque;
}
+
+ if (xen_enabled()) {
+ xen_map_iorange(start, length, 0);
+ }
+
return 0;
+
}
static uint32_t ioport_readb_thunk(void *opaque, uint32_t addr)
@@ -260,6 +272,11 @@ void isa_unassign_ioport(pio_addr_t start, int length)
ioport_destructor_table[start](ioport_opaque[start]);
ioport_destructor_table[start] = NULL;
}
+
+ if (xen_enabled()) {
+ xen_unmap_iorange(start, length, 0);
+ }
+
for(i = start; i< start + length; i++) {
ioport_read_table[0][i] = NULL;
ioport_read_table[1][i] = NULL;