diff options
Diffstat (limited to 'drivers/video/xen-fbfront.c')
-rw-r--r-- | drivers/video/xen-fbfront.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/drivers/video/xen-fbfront.c b/drivers/video/xen-fbfront.c index 619a6f8d65a2..4e10876e62fc 100644 --- a/drivers/video/xen-fbfront.c +++ b/drivers/video/xen-fbfront.c | |||
@@ -18,6 +18,7 @@ | |||
18 | * frame buffer. | 18 | * frame buffer. |
19 | */ | 19 | */ |
20 | 20 | ||
21 | #include <linux/console.h> | ||
21 | #include <linux/kernel.h> | 22 | #include <linux/kernel.h> |
22 | #include <linux/errno.h> | 23 | #include <linux/errno.h> |
23 | #include <linux/fb.h> | 24 | #include <linux/fb.h> |
@@ -48,6 +49,7 @@ struct xenfb_info { | |||
48 | 49 | ||
49 | static u32 xenfb_mem_len = XENFB_WIDTH * XENFB_HEIGHT * XENFB_DEPTH / 8; | 50 | static u32 xenfb_mem_len = XENFB_WIDTH * XENFB_HEIGHT * XENFB_DEPTH / 8; |
50 | 51 | ||
52 | static void xenfb_make_preferred_console(void); | ||
51 | static int xenfb_remove(struct xenbus_device *); | 53 | static int xenfb_remove(struct xenbus_device *); |
52 | static void xenfb_init_shared_page(struct xenfb_info *); | 54 | static void xenfb_init_shared_page(struct xenfb_info *); |
53 | static int xenfb_connect_backend(struct xenbus_device *, struct xenfb_info *); | 55 | static int xenfb_connect_backend(struct xenbus_device *, struct xenfb_info *); |
@@ -348,6 +350,7 @@ static int __devinit xenfb_probe(struct xenbus_device *dev, | |||
348 | if (ret < 0) | 350 | if (ret < 0) |
349 | goto error; | 351 | goto error; |
350 | 352 | ||
353 | xenfb_make_preferred_console(); | ||
351 | return 0; | 354 | return 0; |
352 | 355 | ||
353 | error_nomem: | 356 | error_nomem: |
@@ -358,6 +361,28 @@ static int __devinit xenfb_probe(struct xenbus_device *dev, | |||
358 | return ret; | 361 | return ret; |
359 | } | 362 | } |
360 | 363 | ||
364 | static __devinit void | ||
365 | xenfb_make_preferred_console(void) | ||
366 | { | ||
367 | struct console *c; | ||
368 | |||
369 | if (console_set_on_cmdline) | ||
370 | return; | ||
371 | |||
372 | acquire_console_sem(); | ||
373 | for (c = console_drivers; c; c = c->next) { | ||
374 | if (!strcmp(c->name, "tty") && c->index == 0) | ||
375 | break; | ||
376 | } | ||
377 | release_console_sem(); | ||
378 | if (c) { | ||
379 | unregister_console(c); | ||
380 | c->flags |= CON_CONSDEV; | ||
381 | c->flags &= ~CON_PRINTBUFFER; /* don't print again */ | ||
382 | register_console(c); | ||
383 | } | ||
384 | } | ||
385 | |||
361 | static int xenfb_resume(struct xenbus_device *dev) | 386 | static int xenfb_resume(struct xenbus_device *dev) |
362 | { | 387 | { |
363 | struct xenfb_info *info = dev->dev.driver_data; | 388 | struct xenfb_info *info = dev->dev.driver_data; |