|
@@ -183,7 +183,7 @@ static int dom0_write_console(uint32_t vtermno, const char *str, int len)
|
|
|
{
|
|
|
int rc = HYPERVISOR_console_io(CONSOLEIO_write, len, (char *)str);
|
|
|
if (rc < 0)
|
|
|
- return 0;
|
|
|
+ return rc;
|
|
|
|
|
|
return len;
|
|
|
}
|
|
@@ -641,7 +641,22 @@ struct console xenboot_console = {
|
|
|
|
|
|
void xen_raw_console_write(const char *str)
|
|
|
{
|
|
|
- dom0_write_console(0, str, strlen(str));
|
|
|
+ ssize_t len = strlen(str);
|
|
|
+ int rc = 0;
|
|
|
+
|
|
|
+ if (xen_domain()) {
|
|
|
+ rc = dom0_write_console(0, str, len);
|
|
|
+#ifdef CONFIG_X86
|
|
|
+ if (rc == -ENOSYS && xen_hvm_domain())
|
|
|
+ goto outb_print;
|
|
|
+
|
|
|
+ } else if (xen_cpuid_base()) {
|
|
|
+ int i;
|
|
|
+outb_print:
|
|
|
+ for (i = 0; i < len; i++)
|
|
|
+ outb(str[i], 0xe9);
|
|
|
+#endif
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
void xen_raw_printk(const char *fmt, ...)
|