svn commit: r256143 - in user/ed/newcons/sys: kern sys
Aleksandr Rybalko
ray at FreeBSD.org
Tue Oct 8 12:01:18 UTC 2013
Author: ray
Date: Tue Oct 8 12:01:17 2013
New Revision: 256143
URL: http://svnweb.freebsd.org/changeset/base/256143
Log:
o Rename methods according to "consdev style".
o Add cngrab/cnungrab methods.
o Allow later console attach with termcn_cnregister().
Sponsored by: The FreeBSD Foundation
Modified:
user/ed/newcons/sys/kern/subr_terminal.c
user/ed/newcons/sys/sys/terminal.h
Modified: user/ed/newcons/sys/kern/subr_terminal.c
==============================================================================
--- user/ed/newcons/sys/kern/subr_terminal.c Tue Oct 8 11:51:20 2013 (r256142)
+++ user/ed/newcons/sys/kern/subr_terminal.c Tue Oct 8 12:01:17 2013 (r256143)
@@ -140,7 +140,6 @@ terminal_init(struct terminal *tm)
mtx_init(&tm->tm_mtx, "trmlck", NULL, MTX_SPIN);
teken_init(&tm->tm_emulator, &terminal_drawmethods, tm);
teken_set_defattr(&tm->tm_emulator, &default_message);
-
}
struct terminal *
@@ -403,42 +402,90 @@ termtty_ioctl(struct tty *tp, u_long cmd
* Binding with the kernel and debug console.
*/
-static cn_probe_t termcn_probe;
-static cn_init_t termcn_init;
-static cn_term_t termcn_term;
-static cn_getc_t termcn_getc;
-static cn_putc_t termcn_putc;
-
-const struct consdev_ops termcn_ops = {
- .cn_probe = termcn_probe,
- .cn_init = termcn_init,
- .cn_term = termcn_term,
- .cn_getc = termcn_getc,
- .cn_putc = termcn_putc,
+static cn_probe_t termcn_cnprobe;
+static cn_init_t termcn_cninit;
+static cn_term_t termcn_cnterm;
+static cn_getc_t termcn_cngetc;
+static cn_putc_t termcn_cnputc;
+static cn_grab_t termcn_cngrab;
+static cn_ungrab_t termcn_cnungrab;
+
+const struct consdev_ops termcn_cnops = {
+ .cn_probe = termcn_cnprobe,
+ .cn_init = termcn_cninit,
+ .cn_term = termcn_cnterm,
+ .cn_getc = termcn_cngetc,
+ .cn_putc = termcn_cnputc,
+ .cn_grab = termcn_cngrab,
+ .cn_ungrab = termcn_cnungrab,
};
+void
+termcn_cnregister(struct terminal *tm)
+{
+ struct consdev *cp;
+
+ cp = tm->consdev;
+ if (cp == NULL) {
+ cp = malloc(sizeof(struct consdev), M_TERMINAL,
+ M_WAITOK|M_ZERO);
+ cp->cn_ops = &termcn_cnops;
+ cp->cn_arg = tm;
+ cp->cn_pri = CN_INTERNAL;
+ sprintf(cp->cn_name, "ttyv0");
+
+ tm->tm_flags = TF_CONS;
+ tm->consdev = cp;
+
+ terminal_init(tm);
+ }
+
+ /* Attach terminal as console. */
+ cnadd(cp);
+}
+
static void
-termcn_probe(struct consdev *cp)
+termcn_cngrab(struct consdev *cp)
+{
+
+}
+
+static void
+termcn_cnungrab(struct consdev *cp)
+{
+
+}
+
+static void
+termcn_cnprobe(struct consdev *cp)
{
struct terminal *tm = cp->cn_arg;
+ if (tm == NULL) {
+ cp->cn_pri = CN_DEAD;
+ return;
+ }
+
+ tm->consdev = cp;
terminal_init(tm);
tm->tm_class->tc_cnprobe(tm, cp);
}
static void
-termcn_init(struct consdev *cp)
+termcn_cninit(struct consdev *cp)
{
+
}
static void
-termcn_term(struct consdev *cp)
+termcn_cnterm(struct consdev *cp)
{
+
}
static int
-termcn_getc(struct consdev *cp)
+termcn_cngetc(struct consdev *cp)
{
struct terminal *tm = cp->cn_arg;
@@ -446,7 +493,7 @@ termcn_getc(struct consdev *cp)
}
static void
-termcn_putc(struct consdev *cp, int c)
+termcn_cnputc(struct consdev *cp, int c)
{
struct terminal *tm = cp->cn_arg;
teken_attr_t backup;
Modified: user/ed/newcons/sys/sys/terminal.h
==============================================================================
--- user/ed/newcons/sys/sys/terminal.h Tue Oct 8 11:51:20 2013 (r256142)
+++ user/ed/newcons/sys/sys/terminal.h Tue Oct 8 12:01:17 2013 (r256143)
@@ -128,6 +128,7 @@ struct terminal {
#define TF_MUTE 0x1 /* Drop incoming data. */
#define TF_BELL 0x2 /* Bell needs to be sent. */
#define TF_CONS 0x4 /* Console device (needs spinlock). */
+ struct consdev *consdev;
};
#ifdef _KERNEL
@@ -140,8 +141,10 @@ void terminal_input_char(struct terminal
void terminal_input_raw(struct terminal *tm, char c);
void terminal_input_special(struct terminal *tm, unsigned int k);
+void termcn_cnregister(struct terminal *tm);
+
/* Kernel console helper interface. */
-extern const struct consdev_ops termcn_ops;
+extern const struct consdev_ops termcn_cnops;
#define TERMINAL_DECLARE_EARLY(name, class, softc) \
static struct terminal name = { \
@@ -149,7 +152,7 @@ extern const struct consdev_ops termcn_o
.tm_softc = softc, \
.tm_flags = TF_CONS, \
}; \
- CONSOLE_DEVICE(name ## _consdev, termcn_ops, &name)
+ CONSOLE_DEVICE(name ## _consdev, termcn_cnops, &name)
#endif /* _KERNEL */
More information about the svn-src-user
mailing list