diff --git a/sys/kern/subr_clist.c b/sys/kern/subr_clist.c index 5b53efa73ccc..57225dbc5ea1 100644 --- a/sys/kern/subr_clist.c +++ b/sys/kern/subr_clist.c @@ -42,6 +42,8 @@ __FBSDID("$FreeBSD$"); static void clist_init(void *); SYSINIT(clist, SI_SUB_CLIST, SI_ORDER_FIRST, clist_init, NULL); +static MALLOC_DEFINE(M_CLIST, "clist", "clist queue blocks"); + static struct cblock *cfreelist = 0; int cfreecount = 0; static int cslushcount; @@ -133,11 +135,11 @@ cblock_alloc_cblocks(number) struct cblock *cbp; for (i = 0; i < number; ++i) { - cbp = malloc(sizeof *cbp, M_TTYS, M_NOWAIT); + cbp = malloc(sizeof *cbp, M_CLIST, M_NOWAIT); if (cbp == NULL) { printf( "cblock_alloc_cblocks: M_NOWAIT malloc failed, trying M_WAITOK\n"); - cbp = malloc(sizeof *cbp, M_TTYS, M_WAITOK); + cbp = malloc(sizeof *cbp, M_CLIST, M_WAITOK); } /* * Freed cblocks have zero quotes and garbage elsewhere. @@ -192,7 +194,7 @@ cblock_free_cblocks(number) int i; for (i = 0; i < number; ++i) - free(cblock_alloc(), M_TTYS); + free(cblock_alloc(), M_CLIST); ctotcount -= number; } diff --git a/sys/kern/tty.c b/sys/kern/tty.c index 97fc0ccd15f8..c5947ff41e74 100644 --- a/sys/kern/tty.c +++ b/sys/kern/tty.c @@ -78,6 +78,7 @@ __FBSDID("$FreeBSD$"); #include #include +#include #include #include #include diff --git a/sys/kern/tty_cons.c b/sys/kern/tty_cons.c index 99f6f5195276..ff57d820e8c7 100644 --- a/sys/kern/tty_cons.c +++ b/sys/kern/tty_cons.c @@ -66,6 +66,8 @@ __FBSDID("$FreeBSD$"); #include #include +static MALLOC_DEFINE(M_TTYCONS, "tty console", "tty console handling"); + static d_open_t cnopen; static d_close_t cnclose; static d_read_t cnread; @@ -673,7 +675,7 @@ constty_set(struct tty *tp) KASSERT(tp != NULL, ("constty_set: NULL tp")); if (consbuf == NULL) { size = consmsgbuf_size; - consbuf = malloc(size, M_TTYS, M_WAITOK); + consbuf = malloc(size, M_TTYCONS, M_WAITOK); msgbuf_init(&consmsgbuf, consbuf, size); callout_init(&conscallout, 0); } @@ -695,7 +697,7 @@ constty_clear(void) callout_stop(&conscallout); while ((c = msgbuf_getchar(&consmsgbuf)) != -1) cnputc(c); - free(consbuf, M_TTYS); + free(consbuf, M_TTYCONS); consbuf = NULL; } diff --git a/sys/kern/tty_subr.c b/sys/kern/tty_subr.c index 5b53efa73ccc..57225dbc5ea1 100644 --- a/sys/kern/tty_subr.c +++ b/sys/kern/tty_subr.c @@ -42,6 +42,8 @@ __FBSDID("$FreeBSD$"); static void clist_init(void *); SYSINIT(clist, SI_SUB_CLIST, SI_ORDER_FIRST, clist_init, NULL); +static MALLOC_DEFINE(M_CLIST, "clist", "clist queue blocks"); + static struct cblock *cfreelist = 0; int cfreecount = 0; static int cslushcount; @@ -133,11 +135,11 @@ cblock_alloc_cblocks(number) struct cblock *cbp; for (i = 0; i < number; ++i) { - cbp = malloc(sizeof *cbp, M_TTYS, M_NOWAIT); + cbp = malloc(sizeof *cbp, M_CLIST, M_NOWAIT); if (cbp == NULL) { printf( "cblock_alloc_cblocks: M_NOWAIT malloc failed, trying M_WAITOK\n"); - cbp = malloc(sizeof *cbp, M_TTYS, M_WAITOK); + cbp = malloc(sizeof *cbp, M_CLIST, M_WAITOK); } /* * Freed cblocks have zero quotes and garbage elsewhere. @@ -192,7 +194,7 @@ cblock_free_cblocks(number) int i; for (i = 0; i < number; ++i) - free(cblock_alloc(), M_TTYS); + free(cblock_alloc(), M_CLIST); ctotcount -= number; } diff --git a/sys/sys/clist.h b/sys/sys/clist.h index 5edc145a976d..517c78253138 100644 --- a/sys/sys/clist.h +++ b/sys/sys/clist.h @@ -33,6 +33,19 @@ #ifndef _SYS_CLIST_H_ #define _SYS_CLIST_H_ +/* + * Clists are character lists, which is a variable length linked list + * of cblocks, with a count of the number of characters in the list. + */ +struct clist { + int c_cc; /* Number of characters in the clist. */ + int c_cbcount; /* Number of cblocks. */ + int c_cbmax; /* Max # cblocks allowed for this clist. */ + int c_cbreserved; /* # cblocks reserved for this clist. */ + char *c_cf; /* Pointer to the first cblock. */ + char *c_cl; /* Pointer to the last cblock. */ +}; + struct cblock { struct cblock *c_next; /* next cblock in queue */ unsigned char c_quote[CBQSIZE]; /* quoted characters */ @@ -40,8 +53,18 @@ struct cblock { }; #ifdef _KERNEL -extern struct cblock *cfree; extern int cfreecount; + +int b_to_q(char *cp, int cc, struct clist *q); +void catq(struct clist *from, struct clist *to); +void clist_alloc_cblocks(struct clist *q, int ccmax, int ccres); +void clist_free_cblocks(struct clist *q); +int getc(struct clist *q); +void ndflush(struct clist *q, int cc); +char *nextc(struct clist *q, char *cp, int *c); +int putc(int c, struct clist *q); +int q_to_b(struct clist *q, char *cp, int cc); +int unputc(struct clist *q); #endif #endif diff --git a/sys/sys/cons.h b/sys/sys/cons.h index a3229c3f5c81..14fc9614e4f7 100644 --- a/sys/sys/cons.h +++ b/sys/sys/cons.h @@ -39,6 +39,8 @@ #define _MACHINE_CONS_H_ struct consdev; +struct tty; + typedef void cn_probe_t(struct consdev *); typedef void cn_init_t(struct consdev *); typedef void cn_term_t(struct consdev *); @@ -80,6 +82,9 @@ struct consdev { #ifdef _KERNEL +extern struct msgbuf consmsgbuf; /* Message buffer for constty. */ +extern struct tty *constty; /* Temporary virtual console. */ + #define CONS_DRIVER(name, probe, init, term, getc, checkc, putc, dbctl) \ static struct consdev name##_consdev = { \ probe, init, term, getc, checkc, putc \ @@ -108,6 +113,8 @@ int cngetc(void); void cnputc(int); void cnputs(char *); int cnunavailable(void); +void constty_set(struct tty *tp); +void constty_clear(void); #endif /* _KERNEL */ diff --git a/sys/sys/tty.h b/sys/sys/tty.h index ad74f90bfe18..e887a2a14e6d 100644 --- a/sys/sys/tty.h +++ b/sys/sys/tty.h @@ -46,25 +46,13 @@ #ifndef _SYS_TTY_H_ #define _SYS_TTY_H_ +#include #include #include #include #include #include -/* - * Clists are character lists, which is a variable length linked list - * of cblocks, with a count of the number of characters in the list. - */ -struct clist { - int c_cc; /* Number of characters in the clist. */ - int c_cbcount; /* Number of cblocks. */ - int c_cbmax; /* Max # cblocks allowed for this clist. */ - int c_cbreserved; /* # cblocks reserved for this clist. */ - char *c_cf; /* Pointer to the first cblock. */ - char *c_cl; /* Pointer to the last cblock. */ -}; - struct tty; struct pps_state; struct cdev; @@ -313,25 +301,12 @@ MALLOC_DECLARE(M_TTYS); #define ISINIT(dev) (minor(dev) & MINOR_INIT) #define ISLOCK(dev) (minor(dev) & MINOR_LOCK) -extern struct msgbuf consmsgbuf; /* Message buffer for constty. */ -extern struct tty *constty; /* Temporary virtual console. */ extern long tk_cancc; extern long tk_nin; extern long tk_nout; extern long tk_rawcc; -int b_to_q(char *cp, int cc, struct clist *q); -void catq(struct clist *from, struct clist *to); -void clist_alloc_cblocks(struct clist *q, int ccmax, int ccres); -void clist_free_cblocks(struct clist *q); -void constty_set(struct tty *tp); -void constty_clear(void); -int getc(struct clist *q); -void ndflush(struct clist *q, int cc); -char *nextc(struct clist *q, char *cp, int *c); void nottystop(struct tty *tp, int rw); -int putc(int c, struct clist *q); -int q_to_b(struct clist *q, char *cp, int cc); void termioschars(struct termios *t); int tputchar(int c, struct tty *tp); int ttcompat(struct tty *tp, u_long com, caddr_t data, int flag); @@ -367,7 +342,6 @@ int ttyref(struct tty *tp); int ttyrel(struct tty *tp); int ttysleep(struct tty *tp, void *chan, int pri, char *wmesg, int timo); int ttywait(struct tty *tp); -int unputc(struct clist *q); static __inline int tt_open(struct tty *t, struct cdev *c)