@@ -238,6 +238,13 @@ static void qemu_console_write(const char *buf, size_t len)
: "d" (0x12));
}
+static void com1_write(const char *buf, size_t len)
+{
+ asm volatile("rep; outsb"
+ : "+S" (buf), "+c" (len)
+ : "d" (0x3f8));
+}
+
static void xen_console_write(const char *buf, size_t len)
{
hypercall_console_write(buf, len);
@@ -246,7 +253,14 @@ static void xen_console_write(const char *buf, size_t len)
void arch_setup(void)
{
if ( IS_DEFINED(CONFIG_HVM) && !pvh_start_info )
+ {
register_console_callback(qemu_console_write);
+ }
+
+ if ( IS_DEFINED(CONFIG_HVM) )
+ {
+ register_console_callback(com1_write);
+ }
register_console_callback(xen_console_write);
@@ -13,8 +13,9 @@
* - Xen hypervisor console
* - PV console
* - Qemu debug console
+ * - COM1 serial console
*/
-static cons_output_cb output_fns[3];
+static cons_output_cb output_fns[4];
static unsigned int nr_cons_cb;
/* Guest PV console details. */