diff -r 1e3977e029fd -r 19c77906a845 xen/arch/x86/apic.c --- a/xen/arch/x86/apic.c Mon May 8 18:21:41 2006 +++ b/xen/arch/x86/apic.c Wed May 10 14:30:39 2006 @@ -637,6 +637,9 @@ if (nmi_watchdog != NMI_NONE) nmi_watchdog = NMI_LOCAL_APIC; + iocap_reserve(IOCAP_IO_MEMORY, paddr_to_pfn(mp_lapic_addr), + paddr_to_pfn(mp_lapic_addr)); + printk("Found and enabled local APIC!\n"); apic_pm_activate(); diff -r 1e3977e029fd -r 19c77906a845 xen/arch/x86/i8259.c --- a/xen/arch/x86/i8259.c Mon May 8 18:21:41 2006 +++ b/xen/arch/x86/i8259.c Wed May 10 14:30:39 2006 @@ -355,6 +355,11 @@ { int i; + /* Master Interrupt Controller (PIC). */ + BUG_ON(iocap_reserve(IOCAP_IO_IOPORT, 0x20, 0x21)); + /* Slave Interrupt Controller (PIC). */ + BUG_ON(iocap_reserve(IOCAP_IO_IOPORT, 0xA0, 0xA1)); + init_bsp_APIC(); init_8259A(0); diff -r 1e3977e029fd -r 19c77906a845 xen/arch/x86/mpparse.c --- a/xen/arch/x86/mpparse.c Mon May 8 18:21:41 2006 +++ b/xen/arch/x86/mpparse.c Wed May 10 14:30:39 2006 @@ -835,6 +835,9 @@ { mp_lapic_addr = (unsigned long) address; + iocap_reserve(IOCAP_IO_MEMORY, + paddr_to_pfn(mp_lapic_addr), paddr_to_pfn(mp_lapic_addr)); + set_fixmap_nocache(FIX_APIC_BASE, mp_lapic_addr); if (boot_cpu_physical_apicid == -1U) @@ -950,6 +953,10 @@ mp_ioapic_routing[idx].gsi_base = gsi_base; mp_ioapic_routing[idx].gsi_end = gsi_base + io_apic_get_redir_entries(idx); + + if (iocap_reserve(IOCAP_IO_MEMORY, + paddr_to_pfn(address), paddr_to_pfn(address))) + BUG(); printk("IOAPIC[%d]: apic_id %d, version %d, address 0x%x, " "GSI %d-%d\n", idx, mp_ioapics[idx].mpc_apicid, diff -r 1e3977e029fd -r 19c77906a845 xen/arch/x86/time.c --- a/xen/arch/x86/time.c Mon May 8 18:21:41 2006 +++ b/xen/arch/x86/time.c Wed May 10 14:30:39 2006 @@ -314,6 +314,11 @@ static void init_pit(void) { + /* Interval Timer (PIT). */ + iocap_reserve(IOCAP_IO_IOPORT, 0x40, 0x43); + /* PIT Channel 2 / PC Speaker Control. */ + iocap_reserve(IOCAP_IO_IOPORT, 0x61, 0x61); + read_platform_count = read_pit_count; pit_overflow(); @@ -370,6 +375,9 @@ return 0; set_fixmap_nocache(FIX_HPET_BASE, hpet_address); + + iocap_reserve(IOCAP_IO_MEMORY, paddr_to_pfn(hpet_address), + paddr_to_pfn(hpet_address+HPET_MMAP_SIZE)); hpet_id = hpet_read32(HPET_ID); if ( hpet_id == 0 ) diff -r 1e3977e029fd -r 19c77906a845 xen/drivers/char/ns16550.c --- a/xen/drivers/char/ns16550.c Mon May 8 18:21:41 2006 +++ b/xen/drivers/char/ns16550.c Wed May 10 14:30:39 2006 @@ -222,6 +222,11 @@ if ( uart->irq < 0 ) return; + if ( iocap_reserve( ( uart->io_base >= 0x10000 ) ? + IOCAP_IO_MEMORY : IOCAP_IO_IOPORT, + uart->io_base, uart->io_base + 7) ) + BUG(); + serial_async_transmit(port); if ( uart->irq == 0 ) @@ -249,17 +254,6 @@ } } -#ifdef CONFIG_X86 -static void ns16550_endboot(struct serial_port *port) -{ - struct ns16550 *uart = port->uart; - if ( ioports_deny_access(dom0, uart->io_base, uart->io_base + 7) != 0 ) - BUG(); -} -#else -#define ns16550_endboot NULL -#endif - static int ns16550_irq(struct serial_port *port) { struct ns16550 *uart = port->uart; @@ -269,7 +263,6 @@ static struct uart_driver ns16550_driver = { .init_preirq = ns16550_init_preirq, .init_postirq = ns16550_init_postirq, - .endboot = ns16550_endboot, .tx_empty = ns16550_tx_empty, .putc = ns16550_putc, .getc = ns16550_getc,