[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] Paravirt framebuffer use xvc as console [4/5]



> 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.
> 
> (Should be identical to this patch from last time)
Does this have anything to do with the virtual framebuffer work, or
does it stand alone?

> diff -r 2b360c6b44fa -r c859588adc5e 
> linux-2.6-xen-sparse/drivers/xen/console/console.c
> --- a/linux-2.6-xen-sparse/drivers/xen/console/console.c      Sat Sep 02 
> 15:23:32 2006 -0400
> +++ b/linux-2.6-xen-sparse/drivers/xen/console/console.c      Sat Sep 02 
> 15:31:29 2006 -0400
> @@ -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:
There's some code duplication here.

>               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;
Not convinced we want to change the default until a little while after
the rest of the patch gets merged.

>               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;

Steven.

Attachment: signature.asc
Description: Digital signature

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.