From d8602a450542b09f9ce6e58a39ddc933c945c65e Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Sun, 9 Jul 2000 00:00:00 +0000 Subject: [PATCH] Plan 9 from Bell Labs 2000-07-09 --- port/devns16552.c | 172 ++++++++++++++++++++++++---------------------- 1 file changed, 89 insertions(+), 83 deletions(-) diff --git a/port/devns16552.c b/port/devns16552.c index cd0b5ea44dbf38cbac81da0262c394162f29f94c..1878a90bc36a624dd20a775dadcd77c81cf6f2b7 100644 --- a/port/devns16552.c +++ b/port/devns16552.c @@ -896,8 +896,8 @@ uartstatus(Chan*, Uart *p, void *buf, long n, long offset) istat = p->sticky[Iena]; fstat = p->sticky[Format]; snprint(str, sizeof str, - "b%d c%d d%d e%d l%d m%d p%c r%d s%d\n" - "dev(%d) type(%d) framing(%d) overruns(%d)%s%s%s%s%s\n", + "b%d c%d d%d e%d l%d m%d p%c r%d s%d i%d\n" + "dev(%d) type(%d) framing(%d) overruns(%d)%s%s%s%s\n", p->baud, p->hup_dcd, @@ -908,12 +908,12 @@ uartstatus(Chan*, Uart *p, void *buf, long n, long offset) (fstat & Pena) ? ((fstat & Peven) ? 'e' : 'o') : 'n', (tstat & Rts) != 0, (fstat & Stop2) ? 2 : 1, + p->fifoon, p->dev, p->type, p->frame, p->overrun, - p->fifoon ? " fifo" : "", (mstat & Cts) ? " cts" : "", (mstat & Dsr) ? " dsr" : "", (mstat & Dcd) ? " dcd" : "", @@ -952,93 +952,99 @@ static void ns16552ctl(Uart *p, char *cmd) { int i, n; + char *f[32]; + int nf; /* let output drain for a while */ for(i = 0; i < 16 && qlen(p->oq); i++) tsleep(&p->r, (int(*)(void*))qlen, p->oq, 125); - if(strncmp(cmd, "break", 5) == 0){ - ns16552break(p, 0); - return; - } + nf = getfields(cmd, f, nelem(f), 1, " \t\n"); + for(i = 0; i < nf; i++){ - n = atoi(cmd+1); - switch(*cmd){ - case 'B': - case 'b': - ns16552setbaud(p, n); - break; - case 'C': - case 'c': - ns16552dcdhup(p, n); - break; - case 'D': - case 'd': - ns16552dtr(p, n); - break; - case 'E': - case 'e': - ns16552dsrhup(p, n); - break; - case 'f': - case 'F': - qflush(p->oq); - break; - case 'H': - case 'h': - qhangup(p->iq, 0); - qhangup(p->oq, 0); - break; - case 'i': - case 'I': - lock(&p->flock); - ns16552fifo(p, n); - unlock(&p->flock); - break; - case 'L': - case 'l': - ns16552bits(p, n); - break; - case 'm': - case 'M': - ns16552mflow(p, n); - break; - case 'n': - case 'N': - qnoblock(p->oq, n); - break; - case 'P': - case 'p': - ns16552parity(p, *(cmd+1)); - break; - case 'K': - case 'k': - ns16552break(p, n); - break; - case 'R': - case 'r': - ns16552rts(p, n); - break; - case 'Q': - case 'q': - qsetlimit(p->iq, n); - qsetlimit(p->oq, n); - break; - case 'T': - case 't': - ns16552dcdts(p, n); - break; - case 'W': - case 'w': - /* obsolete */ - break; - case 'X': - case 'x': - ilock(&p->tlock); - p->xonoff = n; - iunlock(&p->tlock); - break; + if(strncmp(f[i], "break", 5) == 0){ + ns16552break(p, 0); + continue; + } + + n = atoi(f[i]+1); + switch(*f[i]){ + case 'B': + case 'b': + ns16552setbaud(p, n); + break; + case 'C': + case 'c': + ns16552dcdhup(p, n); + break; + case 'D': + case 'd': + ns16552dtr(p, n); + break; + case 'E': + case 'e': + ns16552dsrhup(p, n); + break; + case 'f': + case 'F': + qflush(p->oq); + break; + case 'H': + case 'h': + qhangup(p->iq, 0); + qhangup(p->oq, 0); + break; + case 'i': + case 'I': + lock(&p->flock); + ns16552fifo(p, n); + unlock(&p->flock); + break; + case 'L': + case 'l': + ns16552bits(p, n); + break; + case 'm': + case 'M': + ns16552mflow(p, n); + break; + case 'n': + case 'N': + qnoblock(p->oq, n); + break; + case 'P': + case 'p': + ns16552parity(p, *(cmd+1)); + break; + case 'K': + case 'k': + ns16552break(p, n); + break; + case 'R': + case 'r': + ns16552rts(p, n); + break; + case 'Q': + case 'q': + qsetlimit(p->iq, n); + qsetlimit(p->oq, n); + break; + case 'T': + case 't': + ns16552dcdts(p, n); + break; + case 'W': + case 'w': + /* obsolete */ + break; + case 'X': + case 'x': + ilock(&p->tlock); + p->xonoff = n; + iunlock(&p->tlock); + break; + } } }