ref: a2f9eb0ff874d4dfde1a74203958c10b9d22527e
parent: fbaae55eac31b09b698f879cd86612d9d58b3331
author: aiju <devnull@localhost>
date: Sat Jun 17 19:30:23 EDT 2017
vmx(1): don't zero all memory, don't abandon uart on eof, sleep before transmitting uart data
--- a/sys/src/cmd/vmx/io.c
+++ b/sys/src/cmd/vmx/io.c
@@ -1020,9 +1020,11 @@
UART *u;
char buf[128], *p;
int rc;
+ int eofctr;
threadsetname("uart rx");u = uv;
+ eofctr = 0;
for(;;){rc = read(u->infd, buf, sizeof(buf));
if(rc < 0){@@ -1030,9 +1032,12 @@
threadexits("read: %r");}
if(rc == 0){- vmerror("read(uartrx): eof");- threadexits("read: eof");- }
+ if(++eofctr == 100){ /* keep trying but give up eventually */+ vmerror("read(uartrx): eof");+ threadexits("read: eof");+ }
+ continue;
+ }else eofctr = 0;
for(p = buf; p < buf + rc; p++){send(u->inch, p);
sendnotif((void(*)(void*))uartkick, u);
@@ -1052,6 +1057,8 @@
p = buf;
recv(u->outch, p);
p++;
+ sendnotif((void(*)(void*))uartkick, u);
+ sleep(1);
while(sendnotif((void(*)(void*))uartkick, u), p < buf+sizeof(buf) && nbrecv(u->outch, p) > 0)
p++;
if(write(u->outfd, buf, p - buf) < p - buf)
@@ -1216,7 +1223,7 @@
0x084, 0x084, nopio, nil, /* dma -- used by openbsd for delay by dummy read */
0x100, 0x110, nopio, nil, /* elnk3 */
0x240, 0x25f, nopio, nil, /* ne2000 */
- 0x279, 0x279, nopio, nil, /* isa pnp */
+ 0x278, 0x27a, nopio, nil, /* LPT1 / ISA PNP */
0x280, 0x29f, nopio, nil, /* ne2000 */
0x2e8, 0x2ef, nopio, nil, /* COM4 */
0x300, 0x31f, nopio, nil, /* ne2000 */
--- a/sys/src/cmd/vmx/vmx.c
+++ b/sys/src/cmd/vmx/vmx.c
@@ -304,7 +304,7 @@
gmem = segattach(0, sn, nil, sz);
if(gmem == (void*)-1) sysfatal("segattach: %r");}
- memset(gmem, 0, sz);
+ memset(gmem, 0, sz > 1>>24 ? 1>>24 : sz);
p = gmem;
for(r = mmap; r != nil; r = r->next){if(r->segname == nil) continue;
--
⑨