Changeset 7c5a8dd in mainline for kernel/arch/xen32/src/drivers/xconsole.c
- Timestamp:
- 2006-08-01T23:34:02Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- adf7f9c
- Parents:
- 5b23a82
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/xen32/src/drivers/xconsole.c
r5b23a82 r7c5a8dd 40 40 #include <console/console.h> 41 41 #include <arch/hypercall.h> 42 #include <mm/frame.h> 42 43 44 #define MASK_INDEX(index, ring) ((index) & (sizeof(ring) - 1)) 45 46 typedef struct { 47 char in[1024]; 48 char out[2048]; 49 uint32_t in_cons; 50 uint32_t in_prod; 51 uint32_t out_cons; 52 uint32_t out_prod; 53 } xencons_t; 54 55 static bool asynchronous = false; 43 56 static void xen_putchar(chardev_t *d, const char ch); 44 57 … … 52 65 chardev_initialize("xen_out", &xen_console, &xen_ops); 53 66 stdout = &xen_console; 67 if (!(start_info.flags & SIF_INITDOMAIN)) 68 asynchronous = true; 54 69 } 55 70 56 71 void xen_putchar(chardev_t *d, const char ch) 57 72 { 58 xen_console_io(CONSOLE_IO_WRITE, 1, &ch); 73 if (asynchronous) { 74 xencons_t *console = (xencons_t *) PA2KA(MA2PA(PFN2ADDR(start_info.console_mfn))); 75 uint32_t cons = console->out_cons; 76 uint32_t prod = console->out_prod; 77 78 memory_barrier(); 79 80 if ((prod - cons) > sizeof(console->out)) 81 return; 82 83 if (ch == '\n') 84 console->out[MASK_INDEX(prod++, console->out)] = '\r'; 85 console->out[MASK_INDEX(prod++, console->out)] = ch; 86 87 write_barrier(); 88 89 console->out_prod = prod; 90 91 xen_notify_remote(start_info.console_evtchn); 92 } else 93 xen_console_io(CONSOLE_IO_WRITE, 1, &ch); 59 94 } 60 95
Note:
See TracChangeset
for help on using the changeset viewer.