diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2023-11-12 20:47:23 +0000 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2023-11-12 20:47:23 +0000 |
commit | 5cecf46e8716d5f2424f162a8caca52677c17ee1 (patch) | |
tree | 1d5079ec323b7bbb0702086735feb84f50d83c60 | |
parent | 34821e8b4c4b9ca6fba20f0366fc17894a0c330e (diff) |
devuart: handle software flow control (XON/XOFF) in devuart alone
No need for Physuart.kick() to check Uart.blocked state,
already handled by devuart().
-rw-r--r-- | sys/src/9/arm64/uartqemu.c | 2 | ||||
-rw-r--r-- | sys/src/9/bcm/uartmini.c | 4 | ||||
-rw-r--r-- | sys/src/9/bcm/uartpl011.c | 2 | ||||
-rw-r--r-- | sys/src/9/cycv/uartcycv.c | 4 | ||||
-rw-r--r-- | sys/src/9/imx8/uartimx.c | 2 | ||||
-rw-r--r-- | sys/src/9/kw/uartkw.c | 3 | ||||
-rw-r--r-- | sys/src/9/mt7688/uarti8250.c | 8 | ||||
-rw-r--r-- | sys/src/9/mtx/uarti8250.c | 2 | ||||
-rw-r--r-- | sys/src/9/omap/uarti8250.c | 3 | ||||
-rw-r--r-- | sys/src/9/pc/uartaxp.c | 2 | ||||
-rw-r--r-- | sys/src/9/pc/uarti8250.c | 2 | ||||
-rw-r--r-- | sys/src/9/port/devuart.c | 6 | ||||
-rw-r--r-- | sys/src/9/ppc/uartsaturn.c | 3 | ||||
-rw-r--r-- | sys/src/9/ppc/uartsmc.c | 3 | ||||
-rw-r--r-- | sys/src/9/teg2/uarti8250.c | 3 | ||||
-rw-r--r-- | sys/src/9/zynq/uartzynq.c | 4 |
16 files changed, 11 insertions, 42 deletions
diff --git a/sys/src/9/arm64/uartqemu.c b/sys/src/9/arm64/uartqemu.c index 482ab5e14..4c3df5c7a 100644 --- a/sys/src/9/arm64/uartqemu.c +++ b/sys/src/9/arm64/uartqemu.c @@ -173,8 +173,6 @@ kick(Uart *uart) { u32int *reg = (u32int*)uart->regs; - if(uart->blocked) - return; coherence(); while((reg[FR] & TXFF) == 0){ if(uart->op >= uart->oe && uartstageoutput(uart) == 0) diff --git a/sys/src/9/bcm/uartmini.c b/sys/src/9/bcm/uartmini.c index c5ac1eadf..62083ffef 100644 --- a/sys/src/9/bcm/uartmini.c +++ b/sys/src/9/bcm/uartmini.c @@ -121,10 +121,8 @@ kick(Uart *uart) { u32int *ap; - ap = (u32int*)uart->regs; - if(uart->blocked) - return; coherence(); + ap = (u32int*)uart->regs; while(ap[MuLsr] & TxRdy){ if(uart->op >= uart->oe && uartstageoutput(uart) == 0) break; diff --git a/sys/src/9/bcm/uartpl011.c b/sys/src/9/bcm/uartpl011.c index cf0a37281..fbdcd074f 100644 --- a/sys/src/9/bcm/uartpl011.c +++ b/sys/src/9/bcm/uartpl011.c @@ -173,8 +173,6 @@ kick(Uart *uart) { u32int *reg = (u32int*)uart->regs; - if(uart->blocked) - return; coherence(); while((reg[FR] & TXFF) == 0){ if(uart->op >= uart->oe && uartstageoutput(uart) == 0) diff --git a/sys/src/9/cycv/uartcycv.c b/sys/src/9/cycv/uartcycv.c index dd3c80f14..760897e7f 100644 --- a/sys/src/9/cycv/uartcycv.c +++ b/sys/src/9/cycv/uartcycv.c @@ -70,8 +70,6 @@ vuartkick(Uart *uart) Ctlr *ct; int i; - if(uart->blocked) - return; ct = uart->regs; if((ct->r[LSR] & LSR_THRE) == 0) return; @@ -102,7 +100,7 @@ vuartintr(Ureg *, void *arg) } break; case 2: - vuartkick(uart); + uartkick(uart); break; default: return; diff --git a/sys/src/9/imx8/uartimx.c b/sys/src/9/imx8/uartimx.c index 4f91b26c0..247d3ac82 100644 --- a/sys/src/9/imx8/uartimx.c +++ b/sys/src/9/imx8/uartimx.c @@ -167,8 +167,6 @@ kick(Uart *u) u32int *regs = (u32int*)u->regs; while(u->op < u->oe || uartstageoutput(u)){ - if(u->blocked) - break; if((regs[USR1] & SR1_TRDY) == 0){ regs[UCR1] |= CR1_TRDYEN; return; diff --git a/sys/src/9/kw/uartkw.c b/sys/src/9/kw/uartkw.c index 21db8ba7c..e25e00201 100644 --- a/sys/src/9/kw/uartkw.c +++ b/sys/src/9/kw/uartkw.c @@ -195,9 +195,6 @@ kw_kick(Uart* uart) UartReg *regs = ctlr->regs; int i; - if(uart->cts == 0 || uart->blocked) - return; - for(i = 0; i < 16; i++) { if((regs->lsr & LSRthre) == 0 || uart->op >= uart->oe && uartstageoutput(uart) == 0) diff --git a/sys/src/9/mt7688/uarti8250.c b/sys/src/9/mt7688/uarti8250.c index 14c2cdbb4..092385e6d 100644 --- a/sys/src/9/mt7688/uarti8250.c +++ b/sys/src/9/mt7688/uarti8250.c @@ -9,11 +9,6 @@ #include "fns.h" #include "io.h" -enum { - Pollstuckoutput = 1, -}; - - enum { /* registers */ Rbr = 0, /* Receiver Buffer (RO) */ Thr = 0, /* Transmitter Holding (WO) */ @@ -444,9 +439,6 @@ i8250kick(Uart* uart) int i; Ctlr *ctlr; - if(/* uart->cts == 0 || */ uart->blocked) - return; - /* nothing more to send? then disable xmit intr */ ctlr = uart->regs; if (uart->op >= uart->oe && qlen(uart->oq) == 0 && diff --git a/sys/src/9/mtx/uarti8250.c b/sys/src/9/mtx/uarti8250.c index ce68e6868..c651e948e 100644 --- a/sys/src/9/mtx/uarti8250.c +++ b/sys/src/9/mtx/uarti8250.c @@ -419,7 +419,7 @@ i8250kick(Uart* uart) int i; Ctlr *ctlr; - if(uart->cts == 0 || uart->blocked) + if(uart->cts == 0) return; /* diff --git a/sys/src/9/omap/uarti8250.c b/sys/src/9/omap/uarti8250.c index 7c80f3e39..f6d8d6aeb 100644 --- a/sys/src/9/omap/uarti8250.c +++ b/sys/src/9/omap/uarti8250.c @@ -467,9 +467,6 @@ i8250kick(Uart* uart) int i; Ctlr *ctlr; - if(/* uart->cts == 0 || */ uart->blocked) - return; - /* nothing more to send? then disable xmit intr */ ctlr = uart->regs; if (uart->op >= uart->oe && qlen(uart->oq) == 0 && diff --git a/sys/src/9/pc/uartaxp.c b/sys/src/9/pc/uartaxp.c index 48a26b3f6..d55867971 100644 --- a/sys/src/9/pc/uartaxp.c +++ b/sys/src/9/pc/uartaxp.c @@ -545,7 +545,7 @@ axpkick(Uart* uart) Ccb *ccb; uchar *ep, *mem, *rp, *wp, *bp; - if(uart->cts == 0 || uart->blocked) + if(uart->cts == 0) return; cc = uart->regs; diff --git a/sys/src/9/pc/uarti8250.c b/sys/src/9/pc/uarti8250.c index de5156d2c..1e7887fd6 100644 --- a/sys/src/9/pc/uarti8250.c +++ b/sys/src/9/pc/uarti8250.c @@ -438,7 +438,7 @@ i8250kick(Uart* uart) int i; Ctlr *ctlr; - if(uart->cts == 0 || uart->blocked) + if(uart->cts == 0) return; /* diff --git a/sys/src/9/port/devuart.c b/sys/src/9/port/devuart.c index 1d37b6c59..4ee0e3aa5 100644 --- a/sys/src/9/port/devuart.c +++ b/sys/src/9/port/devuart.c @@ -70,6 +70,7 @@ uartenable(Uart *p) /* assume we can send */ p->cts = 1; + p->blocked = 0; p->ctsbackoff = 0; if(p->bits == 0) @@ -655,6 +656,9 @@ uartstageoutput(Uart *p) { int n; + if(!p->enabled || p->blocked) + return 0; + n = qconsume(p->oq, p->ostage, Stagesize); if(n <= 0) return 0; @@ -779,7 +783,7 @@ uartclock(void) if(p->ctsbackoff){ ilock(&p->tlock); if(p->ctsbackoff){ - if(--(p->ctsbackoff) == 0) + if(--(p->ctsbackoff) == 0 && !p->blocked) (*p->phys->kick)(p); } iunlock(&p->tlock); diff --git a/sys/src/9/ppc/uartsaturn.c b/sys/src/9/ppc/uartsaturn.c index 51f91f94c..ee29ce79f 100644 --- a/sys/src/9/ppc/uartsaturn.c +++ b/sys/src/9/ppc/uartsaturn.c @@ -278,9 +278,6 @@ sukick(Uart *uart) Saturnuart *su; int i; - if(uart->blocked) - return; - su = ((UartData*)uart->regs)->su; if((su->iir & Iir_txempty) == 0) return; diff --git a/sys/src/9/ppc/uartsmc.c b/sys/src/9/ppc/uartsmc.c index fe48f53fe..3b49b017e 100644 --- a/sys/src/9/ppc/uartsmc.c +++ b/sys/src/9/ppc/uartsmc.c @@ -393,9 +393,6 @@ smckick(Uart *uart) UartData *ud; int i; - if(uart->blocked) - return; - ud = uart->regs; txb = ud->txb; diff --git a/sys/src/9/teg2/uarti8250.c b/sys/src/9/teg2/uarti8250.c index 6e5fd319d..effac7444 100644 --- a/sys/src/9/teg2/uarti8250.c +++ b/sys/src/9/teg2/uarti8250.c @@ -438,9 +438,6 @@ i8250kick(Uart* uart) int i; Ctlr *ctlr; - if(/* uart->cts == 0 || */ uart->blocked) - return; - /* nothing more to send? then disable xmit intr */ ctlr = uart->regs; if (uart->op >= uart->oe && qlen(uart->oq) == 0 && diff --git a/sys/src/9/zynq/uartzynq.c b/sys/src/9/zynq/uartzynq.c index 8f1d8d10a..2f980df88 100644 --- a/sys/src/9/zynq/uartzynq.c +++ b/sys/src/9/zynq/uartzynq.c @@ -69,8 +69,6 @@ zuartkick(Uart *uart) Ctlr *ct; int i; - if(uart->blocked) - return; ct = uart->regs; for(i = 0; i < 128; i++){ if((ct->r[CHANSTAT] & TXFULL) != 0) @@ -99,7 +97,7 @@ zuartintr(Ureg *, void *arg) uartrecv(uart, c); } if((fl & TXEMPTY) != 0) - zuartkick(uart); + uartkick(uart); } static void |