--- fiasco/snapshot/kernel/fiasco/src/kern/kernel_uart.cpp 2008-07-30 13:19:01.000000000 +0200 +++ fiasco/snapshot/kernel/fiasco/src/kern/kernel_uart.cpp 2013-06-10 14:21:54.183996620 +0200 @@ -72,6 +72,12 @@ if ( (s = strstr(cmdline, " -comport ")) ||(s = strstr(cmdline, " -comport="))) p = strtoul(s + 10, 0, 0); + else + { + unsigned short bda_comports = (*((unsigned short *)0x410) >> 9) & 0x7; + if (bda_comports) + p = *((unsigned short *)0x400); + } if ((s = strstr(cmdline, " -comirq="))) i = strtoul(s + 9, 0, 0); --- fiasco/snapshot/l4/pkg/bootstrap/server/src/startup.cc 2008-07-30 13:19:01.000000000 +0200 --- fiasco/snapshot/l4/pkg/bootstrap/server/src/startup.cc 2014-04-07 11:09:34.483037907 +0200 @@ -709,11 +709,21 @@ if (mbi->flags & L4UTIL_MB_CMDLINE) { const char *s; - int comport = 1; + int comport = -1; if ((s = check_arg(L4_CHAR_PTR(mbi->cmdline), "-comport"))) comport = strtoul(s + 9, 0, 0); + if (comport == -1) { + /* try to read Bios Data Area (BDA) to get comport information */ + unsigned short comport_count = (*((unsigned short *)0x410) >> 9) & 0x7; + if (comport_count) + comport = *((unsigned short *)0x400); + else + /* give up and try default values */ + comport = 1; + } + if (check_arg(L4_CHAR_PTR(mbi->cmdline), "-serial")) com_cons_init(comport); }