Subversion Repositories HelenOS

Rev

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
 */