aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/char/hvc_xen.c26
-rw-r--r--include/xen/hvc-console.h3
2 files changed, 29 insertions, 0 deletions
diff --git a/drivers/char/hvc_xen.c b/drivers/char/hvc_xen.c
index dd68f8541c2..e97d9d16832 100644
--- a/drivers/char/hvc_xen.c
+++ b/drivers/char/hvc_xen.c
@@ -157,3 +157,29 @@ struct console xenboot_console = {
157 .write = xenboot_write_console, 157 .write = xenboot_write_console,
158 .flags = CON_PRINTBUFFER | CON_BOOT, 158 .flags = CON_PRINTBUFFER | CON_BOOT,
159}; 159};
160
161void xen_raw_console_write(const char *str)
162{
163 int len = strlen(str);
164
165 while(len > 0) {
166 int rc = HYPERVISOR_console_io(CONSOLEIO_write, len, (char *)str);
167 if (rc <= 0)
168 break;
169
170 str += rc;
171 len -= rc;
172 }
173}
174
175void xen_raw_printk(const char *fmt, ...)
176{
177 static char buf[512];
178 va_list ap;
179
180 va_start(ap, fmt);
181 vsnprintf(buf, sizeof(buf), fmt, ap);
182 va_end(ap);
183
184 xen_raw_console_write(buf);
185}
diff --git a/include/xen/hvc-console.h b/include/xen/hvc-console.h
index 21c0ecfd786..efc3237ab99 100644
--- a/include/xen/hvc-console.h
+++ b/include/xen/hvc-console.h
@@ -3,4 +3,7 @@
3 3
4extern struct console xenboot_console; 4extern struct console xenboot_console;
5 5
6void xen_raw_console_write(const char *str);
7void xen_raw_printk(const char *fmt, ...);
8
6#endif /* XEN_HVC_CONSOLE_H */ 9#endif /* XEN_HVC_CONSOLE_H */