#include "u.h" #include "../port/lib.h" #include "mem.h" #include "dat.h" #include "fns.h" #include "../port/error.h" #include "xen.h" int okprint = 0; void dp(char *fmt, ...) { int n; va_list arg; char buf[PRINTSIZE]; va_start(arg, fmt); n = vseprint(buf, buf+sizeof(buf), fmt, arg) - buf; va_end(arg); HYPERVISOR_console_io(0, n, buf); } void xencons_rx_msg(ctrl_msg_t *msg, unsigned long l) { void echo(char *, int); int i; for(i = 0; i < msg->length; i++) if (msg->msg[i] == '\r') msg->msg[i] = '\n'; //dp("xencons_rx_msg: msg %p len %d l 0x%ulx\n", msg, msg->length, l); USED(l); echo((char *)msg->msg, msg->length); msg->length = 0; ctrl_if_send_response(msg); } extern int okprint; void uartputs(char *s, int n) { int sz; ctrl_msg_t msg; sz = n; // dp("uartputs\n"); // return; if (! okprint){ // HYPERVISOR_console_io(0, 2, "N\n"); return; } //dp("flush: %d bytes\n", n); while (sz > 0) { int amt;; if ( sz > sizeof(msg.msg) ) amt = sizeof(msg.msg); else amt = sz; msg.type = CMSG_CONSOLE; msg.subtype = CMSG_CONSOLE_DATA; msg.length = amt; memmove(msg.msg, s, amt); ctrl_if_send_message_block(&msg, 0, 0, 0); // HYPERVISOR_console_io(0, 2, "C\n"); s += amt; sz -= amt; } // dp("uartputs done\n"); }