Rev 2071 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 2071 | Rev 3844 | ||
---|---|---|---|
Line 53... | Line 53... | ||
53 | { |
53 | { |
54 | chardev_initialize("xen_out", &xen_console, &xen_ops); |
54 | chardev_initialize("xen_out", &xen_console, &xen_ops); |
55 | stdout = &xen_console; |
55 | stdout = &xen_console; |
56 | } |
56 | } |
57 | 57 | ||
58 | void xen_putchar(chardev_t *d, const char ch) |
58 | void xen_putchar(chardev_t *d, const char ch, bool silent) |
59 | { |
59 | { |
- | 60 | if (!silent) { |
|
60 | if (start_info.console.domU.evtchn != 0) { |
61 | if (start_info.console.domU.evtchn != 0) { |
61 | uint32_t cons = console_page.out_cons; |
62 | uint32_t cons = console_page.out_cons; |
62 | uint32_t prod = console_page.out_prod; |
63 | uint32_t prod = console_page.out_prod; |
63 | 64 | ||
64 | memory_barrier(); |
65 | memory_barrier(); |
65 | 66 | ||
66 | if ((prod - cons) > sizeof(console_page.out)) |
67 | if ((prod - cons) > sizeof(console_page.out)) |
67 | return; |
68 | return; |
68 | 69 | ||
69 | if (ch == '\n') |
70 | if (ch == '\n') |
70 | console_page.out[MASK_INDEX(prod++, console_page.out)] = '\r'; |
71 | console_page.out[MASK_INDEX(prod++, console_page.out)] = '\r'; |
71 | console_page.out[MASK_INDEX(prod++, console_page.out)] = ch; |
72 | console_page.out[MASK_INDEX(prod++, console_page.out)] = ch; |
72 | 73 | ||
73 | write_barrier(); |
74 | write_barrier(); |
74 | 75 | ||
75 | console_page.out_prod = prod; |
76 | console_page.out_prod = prod; |
76 | 77 | ||
77 | xen_notify_remote(start_info.console.domU.evtchn); |
78 | xen_notify_remote(start_info.console.domU.evtchn); |
78 | } else |
79 | } else |
79 | xen_console_io(CONSOLE_IO_WRITE, 1, &ch); |
80 | xen_console_io(CONSOLE_IO_WRITE, 1, &ch); |
- | 81 | } |
|
80 | } |
82 | } |
81 | 83 | ||
82 | /** @} |
84 | /** @} |
83 | */ |
85 | */ |