summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authored <ed@FreeBSD.org>2008-05-23 16:06:35 +0000
committered <ed@FreeBSD.org>2008-05-23 16:06:35 +0000
commitbdc5be605fed4eb12994b4b1324963a5527e8bd8 (patch)
tree45dcbc030933869fb3a8e3fe224f3cbe1488ad22 /sys
parent82e712d5edb03f4ce70cf2a4e76084b692dc32cd (diff)
downloadFreeBSD-src-bdc5be605fed4eb12994b4b1324963a5527e8bd8.zip
FreeBSD-src-bdc5be605fed4eb12994b4b1324963a5527e8bd8.tar.gz
Move TTY unrelated bits out of <sys/tty.h>.
For some reason, the <sys/tty.h> header file also contains routines of the clists and console that are used inside the TTY layer. Because the clists are not only used by the TTY layer (example: various input drivers), we'd better move the entire clist programming interface into <sys/clist.h>. Also remove a declaration of nonexistent variable. The <sys/tty.h> header also contains various definitions for the console code (tty_cons.c). Also move these to <sys/cons.h>, because they are not implemented inside the TTY layer. While there, create separate malloc pools for the clist and console code. Approved by: philip (mentor)
Diffstat (limited to 'sys')
-rw-r--r--sys/kern/subr_clist.c8
-rw-r--r--sys/kern/tty.c1
-rw-r--r--sys/kern/tty_cons.c6
-rw-r--r--sys/kern/tty_subr.c8
-rw-r--r--sys/sys/clist.h25
-rw-r--r--sys/sys/cons.h7
-rw-r--r--sys/sys/tty.h28
7 files changed, 47 insertions, 36 deletions
diff --git a/sys/kern/subr_clist.c b/sys/kern/subr_clist.c
index 5b53efa..57225db 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 97fc0cc..c5947ff 100644
--- a/sys/kern/tty.c
+++ b/sys/kern/tty.c
@@ -78,6 +78,7 @@ __FBSDID("$FreeBSD$");
#include <sys/param.h>
#include <sys/systm.h>
+#include <sys/cons.h>
#include <sys/filio.h>
#include <sys/lock.h>
#include <sys/mutex.h>
diff --git a/sys/kern/tty_cons.c b/sys/kern/tty_cons.c
index 99f6f51..ff57d82 100644
--- a/sys/kern/tty_cons.c
+++ b/sys/kern/tty_cons.c
@@ -66,6 +66,8 @@ __FBSDID("$FreeBSD$");
#include <machine/cpu.h>
#include <machine/clock.h>
+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 5b53efa..57225db 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 5edc145..517c782 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 a3229c3..14fc961 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 ad74f90..e887a2a 100644
--- a/sys/sys/tty.h
+++ b/sys/sys/tty.h
@@ -46,25 +46,13 @@
#ifndef _SYS_TTY_H_
#define _SYS_TTY_H_
+#include <sys/clist.h>
#include <sys/termios.h>
#include <sys/queue.h>
#include <sys/selinfo.h>
#include <sys/_lock.h>
#include <sys/_mutex.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 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)
OpenPOWER on IntegriCloud