From 2060daf3b0f7ad91c73cec00516659f248841983 Mon Sep 17 00:00:00 2001 From: mischief Date: Tue, 24 Jun 2014 19:37:03 -0700 Subject: [PATCH] xen: fix early console --- sys/src/9/xen/fns.h | 1 + sys/src/9/xen/main.c | 3 ++- sys/src/9/xen/uartxen.c | 26 +++++++------------------- 3 files changed, 10 insertions(+), 20 deletions(-) diff --git a/sys/src/9/xen/fns.h b/sys/src/9/xen/fns.h index b6d0fc7a1..8072cb7bd 100644 --- a/sys/src/9/xen/fns.h +++ b/sys/src/9/xen/fns.h @@ -59,6 +59,7 @@ void insl(int, void*, int); int intrdisable(int, void (*)(Ureg *, void *), void*, int, char*); void intrenable(int, void (*)(Ureg*, void*), void*, int, char*); int ioalloc(int, int, int, char*); +void ioinit(void); int isaconfig(char*, int, ISAConf*); void kbdenable(void); #define kmapinval() diff --git a/sys/src/9/xen/main.c b/sys/src/9/xen/main.c index 966b39997..03f22d18b 100644 --- a/sys/src/9/xen/main.c +++ b/sys/src/9/xen/main.c @@ -73,8 +73,9 @@ main(void) { mach0init(); options(); - quotefmtinstall(); + ioinit(); xenconsinit(); + quotefmtinstall(); //consdebug = rdb; print("\nPlan 9 (%s)\n", xenstart->magic); diff --git a/sys/src/9/xen/uartxen.c b/sys/src/9/xen/uartxen.c index 31e9b8ef3..8a6a7d7de 100644 --- a/sys/src/9/xen/uartxen.c +++ b/sys/src/9/xen/uartxen.c @@ -90,7 +90,7 @@ interrupt(Ureg*, void *arg) coherence(); while (cons != con->in_prod) { c = con->in[MASK_XENCONS_IDX(cons++, con->in)]; - uartrecv(uart, c & 0xFF); + uartrecv(uart, c); } coherence(); con->in_cons = cons; @@ -232,22 +232,13 @@ xenputc(Uart*, int c) struct xencons_interface *con = xencons.intf; unsigned long prod; - c &= 0xFF; - ilock(&xencons.txlock); - /* - while(con->out_cons == con->out_prod) - HYPERVISOR_yield(); - */ - if(con->out_cons == con->out_prod){ - iunlock(&xencons.txlock); - return; - } - prod = con->out_prod; - - if((con->out[MASK_XENCONS_IDX(prod++, con->out)] = c) == '\n') - con->out[MASK_XENCONS_IDX(prod++, con->out)] = '\r'; + if((prod - con->out_cons) < sizeof(con->out)){ + if (c == '\n') + con->out[MASK_XENCONS_IDX(prod++, con->out)] = '\r'; + con->out[MASK_XENCONS_IDX(prod++, con->out)] = c; + } coherence(); con->out_prod = prod; @@ -303,6 +294,7 @@ xenconsinit(void) xencons.evtchn = xenstart->console_evtchn; consuart = &xenuart; + consuart->console = 1; } void @@ -326,9 +318,5 @@ kbdenable(void) consuart = uart; uart->console = 1; - - uartputs("CONSOLE1\n", 9); - - //*(char*)0 = 0; }