void VISIBLE16
handle_18()
{
+ debug_serial_setup();
debug_enter(NULL, DEBUG_HDL_18);
u16 seq = GET_EBDA(ipl.sequence) + 1;
do_boot(seq);
void VISIBLE16
handle_19()
{
+ debug_serial_setup();
debug_enter(NULL, DEBUG_HDL_19);
do_boot(0);
}
#define DEBUG_PORT 0x03f8
#define DEBUG_TIMEOUT 100000
+void
+debug_serial_setup()
+{
+ if (!CONFIG_DEBUG_SERIAL)
+ return;
+ // setup for serial logging: 8N1
+ u8 oldparam, newparam = 0x03;
+ oldparam = inb(DEBUG_PORT+3);
+ outb(newparam, DEBUG_PORT+3);
+ // Disable irqs
+ u8 oldier, newier = 0;
+ oldier = inb(DEBUG_PORT+1);
+ outb(newier, DEBUG_PORT+1);
+
+ if (oldparam != newparam || oldier != newier)
+ dprintf(1, "Changing serial settings was %x/%x now %x/%x\n"
+ , oldparam, oldier, newparam, newier);
+}
+
static void
debug_serial(char c)
{
br.cs = seg;
br.ip = offset;
call16(&br);
+
+ debug_serial_setup();
}
// Find and run any "option roms" found in the given address range.
if (*(u16*)rom != 0xaa55)
continue;
u32 len = rom[2] * 512;
- if (checksum(rom, len) != 0)
+ u8 sum = checksum(rom, len);
+ if (sum != 0) {
+ dprintf(1, "Found option rom with bad checksum:"
+ " loc=%p len=%d sum=%x\n"
+ , rom, len, sum);
continue;
+ }
p = (u8*)(((u32)p + len) / 2048 * 2048);
dprintf(1, "Running option rom at %p\n", rom+3);
callrom(FARPTR_TO_SEG(rom), FARPTR_TO_OFFSET(rom + 3));
init_dma();
check_restart_status();
+ debug_serial_setup();
dprintf(1, "Start bios\n");
// Setup for .bss and .data sections
#endif
// output.c
+void debug_serial_setup();
void BX_PANIC(const char *fmt, ...)
__attribute__ ((format (printf, 1, 2)))
__attribute__ ((noreturn));