The realmode test is still printing to the old debug port at 0xf1. Use the serial port instead. Signed-off-by: Paolo Bonzini <pbonzini@xxxxxxxxxx> --- x86/realmode.c | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 64 insertions(+), 2 deletions(-) diff --git a/x86/realmode.c b/x86/realmode.c index 71c8a7d..981be08 100644 --- a/x86/realmode.c +++ b/x86/realmode.c @@ -1,3 +1,7 @@ +#ifndef USE_SERIAL +#define USE_SERIAL +#endif + asm(".code16gcc"); typedef unsigned char u8; @@ -22,16 +26,74 @@ static int strlen(const char *str) return n; } +static void outb(u8 data, u16 port) +{ + asm volatile("out %0, %1" : : "a"(data), "d"(port)); +} + +#ifdef USE_SERIAL +static int serial_iobase = 0x3f8; +static int serial_inited = 0; + +static u8 inb(u16 port) +{ + u8 data; + asm volatile("in %1, %0" : "=a"(data) : "d"(port)); + return data; +} + +static void serial_outb(char ch) +{ + u8 lsr; + + do { + lsr = inb(serial_iobase + 0x05); + } while (!(lsr & 0x20)); + + outb(ch, serial_iobase + 0x00); +} + +static void serial_init(void) +{ + u8 lcr; + + /* set DLAB */ + lcr = inb(serial_iobase + 0x03); + lcr |= 0x80; + outb(lcr, serial_iobase + 0x03); + + /* set baud rate to 115200 */ + outb(0x01, serial_iobase + 0x00); + outb(0x00, serial_iobase + 0x01); + + /* clear DLAB */ + lcr = inb(serial_iobase + 0x03); + lcr &= ~0x80; + outb(lcr, serial_iobase + 0x03); +} +#endif + static void print_serial(const char *buf) { unsigned long len = strlen(buf); - +#ifdef USE_SERIAL + unsigned long i; + if (!serial_inited) { + serial_init(); + serial_inited = 1; + } + + for (i = 0; i < len; i++) { + serial_outb(buf[i]); + } +#else asm volatile ("addr32/rep/outsb" : "+S"(buf), "+c"(len) : "d"(0xf1)); +#endif } static void exit(int code) { - asm volatile("out %0, %1" : : "a"(code), "d"((short)0xf4)); + outb(code, 0xf4); } struct regs { -- 1.8.1.4 -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html