# HG changeset patch
# User kfraser@xxxxxxxxxxxxxxxxxxxxx
# Node ID 8832712b0b3740daf9c2d5993fcc1d640ff1564e
# Parent 15e80a946a6a7b8f865416e0c9c707d3ce413e3d
[LINUX] console: Add option to use /dev/xvc0, major=204, minor=191.
The major/minor has now been allocated to us by lanana.org.
This is based on previous patches from:
Jeremy Katz <katzj@xxxxxxxxxx>
Amos Waterland <apw@xxxxxxxxxx>
Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx>
---
linux-2.6-xen-sparse/drivers/xen/console/console.c | 68 +++++++++++++--------
1 files changed, 43 insertions(+), 25 deletions(-)
diff -r 15e80a946a6a -r 8832712b0b37
linux-2.6-xen-sparse/drivers/xen/console/console.c
--- a/linux-2.6-xen-sparse/drivers/xen/console/console.c Wed Nov 29
11:07:51 2006 +0000
+++ b/linux-2.6-xen-sparse/drivers/xen/console/console.c Wed Nov 29
11:37:59 2006 +0000
@@ -64,13 +64,20 @@
* '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_SERIAL]: Console attached to '/dev/xvc0'.
* [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;
+
+/* /dev/xvc0 device number allocated by lanana.org. */
+#define XEN_XVC_MAJOR 204
+#define XEN_XVC_MINOR 191
#ifdef CONFIG_MAGIC_SYSRQ
static unsigned long sysrq_requested;
@@ -82,27 +89,23 @@ static int __init xencons_setup(char *st
char *q;
int n;
- if (!strncmp(str, "ttyS", 4))
+ if (!strncmp(str, "ttyS", 4)) {
xc_mode = XC_SERIAL;
- else if (!strncmp(str, "tty", 3))
+ str += 4;
+ } else if (!strncmp(str, "tty", 3)) {
xc_mode = XC_TTY;
- else if (!strncmp(str, "off", 3))
+ str += 3;
+ } else if (!strncmp(str, "xvc", 3)) {
+ xc_mode = XC_XVC;
+ str += 3;
+ } else if (!strncmp(str, "off", 3)) {
xc_mode = XC_OFF;
-
- switch (xc_mode) {
- case XC_SERIAL:
- n = simple_strtol(str+4, &q, 10);
- if (q > (str + 4))
- xc_num = n;
- break;
- case XC_TTY:
- n = simple_strtol(str+3, &q, 10);
- if (q > (str + 3))
- xc_num = n;
- break;
- default:
- break;
- }
+ str += 3;
+ }
+
+ n = simple_strtol(str, &q, 10);
+ if (q != str)
+ xc_num = n;
return 1;
}
@@ -201,6 +204,12 @@ static int __init xen_console_init(void)
}
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)
@@ -305,7 +314,7 @@ void dom0_init_screen_info(const struct
/******************** 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_TTY) && \
((_tty)->index != (xc_num - 1)))
static struct termios *xencons_termios[MAX_NR_CONSOLES];
@@ -628,8 +637,8 @@ static int __init xencons_init(void)
return rc;
}
- xencons_driver = alloc_tty_driver((xc_mode == XC_SERIAL) ?
- 1 : MAX_NR_CONSOLES);
+ xencons_driver = alloc_tty_driver((xc_mode == XC_TTY) ?
+ MAX_NR_CONSOLES : 1);
if (xencons_driver == NULL)
return -ENOMEM;
@@ -644,14 +653,23 @@ static int __init xencons_init(void)
DRV(xencons_driver)->termios = xencons_termios;
DRV(xencons_driver)->termios_locked = xencons_termios_locked;
- if (xc_mode == XC_SERIAL) {
+ switch (xc_mode) {
+ case XC_XVC:
+ DRV(xencons_driver)->name = "xvc";
+ DRV(xencons_driver)->major = XEN_XVC_MAJOR;
+ DRV(xencons_driver)->minor_start = XEN_XVC_MINOR;
+ DRV(xencons_driver)->name_base = xc_num;
+ break;
+ case XC_SERIAL:
DRV(xencons_driver)->name = "ttyS";
DRV(xencons_driver)->minor_start = 64 + xc_num;
- DRV(xencons_driver)->name_base = 0 + xc_num;
- } else {
+ DRV(xencons_driver)->name_base = xc_num;
+ break;
+ default:
DRV(xencons_driver)->name = "tty";
DRV(xencons_driver)->minor_start = 1;
DRV(xencons_driver)->name_base = 1;
+ break;
}
tty_set_operations(xencons_driver, &xencons_ops);
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|