# HG changeset patch
# User kaf24@xxxxxxxxxxxxxxxxxxxx
# Node ID f41c33671a43627efaf3f563a2e66b06a1731531
# Parent 0cae0c6436f5fa49ab42f72ea90373cc5884d93a
This patch adds a new boot parameter, dom0_ioports_disable, which
accepts a comma seperated list of hex ioports and/or ioport ranges
(eg. dom0_ioports_disable=02f8-02ff,03f8-03ff), and applies them to dom0.
Signed-off-by: Jody Belka <knew (at) pimb (dot) org>
diff -r 0cae0c6436f5 -r f41c33671a43 xen/arch/x86/domain_build.c
--- a/xen/arch/x86/domain_build.c Sat Nov 5 10:30:01 2005
+++ b/xen/arch/x86/domain_build.c Sun Nov 6 15:39:02 2005
@@ -56,6 +56,9 @@
static unsigned int opt_dom0_translate = 0;
boolean_param("dom0_translate", opt_dom0_translate);
+static char opt_dom0_ioports_disable[200] = "";
+string_param("dom0_ioports_disable", opt_dom0_ioports_disable);
+
#if defined(__i386__)
/* No ring-3 access in initial leaf page tables. */
#define L1_PROT (_PAGE_PRESENT|_PAGE_RW|_PAGE_ACCESSED)
@@ -89,6 +92,43 @@
if ( order-- == 0 )
break;
return page;
+}
+
+static void process_dom0_ioports_disable()
+{
+ unsigned long io_from, io_to, io_nr;
+ char *t, *u, *s = opt_dom0_ioports_disable;
+
+ if ( *s == '\0' )
+ return;
+
+ while ( (t = strsep(&s, ",")) != NULL )
+ {
+ io_from = simple_strtoul(t, &u, 16);
+ if ( u == t )
+ {
+ parse_error:
+ printk("Invalid ioport range <%s> "
+ "in dom0_ioports_disable, skipping\n", t);
+ continue;
+ }
+
+ if ( *u == '\0' )
+ io_to = io_from;
+ else if ( *u == '-' )
+ io_to = simple_strtoul(u + 1, &u, 16);
+ else
+ goto parse_error;
+
+ if ( (*u != '\0') || (io_to < io_from) || (io_to >= 65536) )
+ goto parse_error;
+
+ printk("Disabling dom0 access to ioport range %04lx-%04lx\n",
+ io_from, io_to);
+
+ io_nr = io_to - io_from + 1;
+ physdev_modify_ioport_access_range(dom0, 0, io_from, io_nr);
+ }
}
int construct_dom0(struct domain *d,
@@ -716,6 +756,8 @@
physdev_modify_ioport_access_range(dom0, 0, 0x40, 4);
/* PIT Channel 2 / PC Speaker Control. */
physdev_modify_ioport_access_range(dom0, 0, 0x61, 1);
+ /* Command-line passed i/o ranges */
+ process_dom0_ioports_disable();
return 0;
}
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|