|
@@ -18,6 +18,7 @@
|
|
|
* frame buffer.
|
|
|
*/
|
|
|
|
|
|
+#include <linux/console.h>
|
|
|
#include <linux/kernel.h>
|
|
|
#include <linux/errno.h>
|
|
|
#include <linux/fb.h>
|
|
@@ -48,6 +49,7 @@ struct xenfb_info {
|
|
|
|
|
|
static u32 xenfb_mem_len = XENFB_WIDTH * XENFB_HEIGHT * XENFB_DEPTH / 8;
|
|
|
|
|
|
+static void xenfb_make_preferred_console(void);
|
|
|
static int xenfb_remove(struct xenbus_device *);
|
|
|
static void xenfb_init_shared_page(struct xenfb_info *);
|
|
|
static int xenfb_connect_backend(struct xenbus_device *, struct xenfb_info *);
|
|
@@ -348,6 +350,7 @@ static int __devinit xenfb_probe(struct xenbus_device *dev,
|
|
|
if (ret < 0)
|
|
|
goto error;
|
|
|
|
|
|
+ xenfb_make_preferred_console();
|
|
|
return 0;
|
|
|
|
|
|
error_nomem:
|
|
@@ -358,6 +361,28 @@ static int __devinit xenfb_probe(struct xenbus_device *dev,
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
+static __devinit void
|
|
|
+xenfb_make_preferred_console(void)
|
|
|
+{
|
|
|
+ struct console *c;
|
|
|
+
|
|
|
+ if (console_set_on_cmdline)
|
|
|
+ return;
|
|
|
+
|
|
|
+ acquire_console_sem();
|
|
|
+ for (c = console_drivers; c; c = c->next) {
|
|
|
+ if (!strcmp(c->name, "tty") && c->index == 0)
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ release_console_sem();
|
|
|
+ if (c) {
|
|
|
+ unregister_console(c);
|
|
|
+ c->flags |= CON_CONSDEV;
|
|
|
+ c->flags &= ~CON_PRINTBUFFER; /* don't print again */
|
|
|
+ register_console(c);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
static int xenfb_resume(struct xenbus_device *dev)
|
|
|
{
|
|
|
struct xenfb_info *info = dev->dev.driver_data;
|