Paravirtual framebuffer use xvc for xenconsole [4/6]
PATCH 1/1 Paravirtual framebuffer use xvc for xenconsole [4/6]
This is the patch from Amos Waterland for the xenconsole to use /dev/xvc0 instead of taking over ttys. I've fixed a few places which needed to check for XVC mode in addition to serial mode. Also, until LANANA responds with an official minor, I've adjusted it to use char 250/187 (in the experimental range) as opposed to 204/187
Signed-off-by Jeremy Katz <[email protected]>
Jeremy
linux-2.6-xen-sparse/drivers/xen/console/console.c +31 -4
@@ -57,19 +57,27 @@#include <asm/hypervisor.h> #include <xen/evtchn.h> #include <xen/xencons.h> +#include <xen/xenbus.h> /* * Modes: * 'xencons=off' [XC_OFF]: Console is disabled. * 'xencons=tty' [XC_TTY]: Console attached to '/dev/tty[0-9]+'. * 'xencons=ttyS' [XC_SERIAL]: Console attached to '/dev/ttyS[0-9]+'. +* 'xencons=xvc' [XC_XVC]: Console attached to '/dev/xvc[0-9]+'. * [XC_DEFAULT]: DOM0 -> XC_SERIAL ; all others -> XC_TTY. * * NB. In mode XC_TTY, we create dummy consoles for tty2-63. This suppresses * warnings from standard distro startup scripts. */ -static enum {XC_OFF ,XC_DEFAULT ,XC_TTY ,XC_SERIAL } xc_mode =XC_DEFAULT ; +static enum {XC_OFF ,XC_DEFAULT ,XC_TTY ,XC_SERIAL ,XC_XVC } + xc_mode =XC_DEFAULT ;static int xc_num =-1 ; + +/* If we are in XC_XVC mode (a virtual console at /dev/xvcX), we need to +* comply with Lanana and use a minor under the low density serial major. +*/ +#define XEN_XVC_MINOR 187#ifdef CONFIG_MAGIC_SYSRQ static unsigned long sysrq_requested;
@@ -85,6 +93,8 @@ static int __init xencons_setup(char *st xc_mode =XC_SERIAL ; else if (!strncmp(str, "tty", 3)) xc_mode =XC_TTY ; + else if (!strncmp(str, "xvc", 3)) + xc_mode =XC_XVC ; else if (!strncmp(str, "off", 3)) xc_mode =XC_OFF ;
@@ -95,6 +105,11 @@ static int __init xencons_setup(char *st xc_num = n;break ;case XC_TTY : + n =simple_strtol (str+3 , &q,10 ); +if (q > (str +3 )) + xc_num = n; +break ; +case XC_XVC : n =simple_strtol (str+3 , &q,10 );if (q > (str +3 )) xc_num = n;
@@ -194,11 +209,17 @@ static int __init xen_console_init(void) kcons_info.write = kcons_write_dom0; }else {if (xc_mode ==XC_DEFAULT ) - xc_mode =XC_TTY ; + xc_mode =XC_XVC ; kcons_info.write = kcons_write; }switch (xc_mode) { +case XC_XVC : +strcpy (kcons_info.name,"xvc" ); +if (xc_num ==-1 ) + xc_num =0 ; +break ; +case XC_SERIAL :strcpy (kcons_info.name,"ttyS" );if (xc_num ==-1 )
@@ -265,7 +286,7 @@ void xencons_force_flush(void)/******************** User-space console driver (/dev/console) ************/ #define DRV (_d) (_d) -#define DUMMY_TTY (_tty) ((xc_mode != XC_SERIAL) && \ +#define DUMMY_TTY (_tty) ((xc_mode != XC_SERIAL) && (xc_mode != XC_XVC) && \ ((_tty)->index != (xc_num - 1)))static struct termios *xencons_termios[MAX_NR_CONSOLES ];
@@ -584,7 +605,8 @@ static int __init xencons_init(void)xencons_ring_init (); - xencons_driver =alloc_tty_driver ((xc_mode ==XC_SERIAL ) ? + xencons_driver =alloc_tty_driver (((xc_mode ==XC_SERIAL ) || + (xc_mode ==XC_XVC )) ?1 :MAX_NR_CONSOLES );if (xencons_driver ==NULL )return -ENOMEM ;
@@ -604,6 +626,11 @@ static int __init xencons_init(void)DRV (xencons_driver)->name ="ttyS" ;DRV (xencons_driver)->minor_start =64 + xc_num;DRV (xencons_driver)->name_base =0 + xc_num; + }else if (xc_mode ==XC_XVC ) { +DRV (xencons_driver)->name ="xvc" ; +DRV (xencons_driver)->major =250 ; +DRV (xencons_driver)->minor_start =XEN_XVC_MINOR ; +DRV (xencons_driver)->name_base = xc_num; }else {DRV (xencons_driver)->name ="tty" ;DRV (xencons_driver)->minor_start =1 ;
_______________________________________________
Xen-devel mailing list
[email protected]
http://lists.xensource.com/xen-devel