if (!CONFIG_QEMU_HARDWARE)
return;
+ // Setup QEMU debug output port
+ qemu_debug_preinit();
+
// check northbridge @ 00:00.0
u16 v = pci_config_readw(0, PCI_VENDOR_ID);
if (v == 0x0000 || v == 0xffff)
// QEMU_CFG_DMA ID bit
#define QEMU_CFG_VERSION_DMA 2
+// QEMU debugcon read value
+#define QEMU_DEBUGCON_READBACK 0xe9
+
int qemu_cfg_enabled(void);
int qemu_cfg_dma_enabled(void);
void qemu_preinit(void);
u16 DebugOutputPort VARFSEG = 0x402;
+void
+qemu_debug_preinit(void)
+{
+ /* Check if the QEMU debug output port is active */
+ if (CONFIG_DEBUG_IO &&
+ inb(GET_GLOBAL(DebugOutputPort)) != QEMU_DEBUGCON_READBACK)
+ DebugOutputPort = 0;
+}
+
// Write a character to the special debugging port.
void
qemu_debug_putc(char c)
{
- if (CONFIG_DEBUG_IO && runningOnQEMU())
+ if (!CONFIG_DEBUG_IO || !runningOnQEMU())
+ return;
+ u16 port = GET_GLOBAL(DebugOutputPort);
+ if (port)
// Send character to debug port.
- outb(c, GET_GLOBAL(DebugOutputPort));
+ outb(c, port);
}
void serial_debug_putc(char c);
void serial_debug_flush(void);
extern u16 DebugOutputPort;
+void qemu_debug_preinit(void);
void qemu_debug_putc(char c);
#endif // serialio.h