Subversion Repositories HelenOS

Compare Revisions

Ignore whitespace Rev 1831 → Rev 1832

/trunk/kernel/arch/xen32/src/drivers/xconsole.c
39,19 → 39,9
#include <console/chardev.h>
#include <console/console.h>
#include <arch/hypercall.h>
#include <mm/frame.h>
 
#define MASK_INDEX(index, ring) ((index) & (sizeof(ring) - 1))
 
typedef struct {
char in[1024];
char out[2048];
uint32_t in_cons;
uint32_t in_prod;
uint32_t out_cons;
uint32_t out_prod;
} xencons_t;
 
static bool asynchronous = false;
static void xen_putchar(chardev_t *d, const char ch);
 
71,22 → 61,21
void xen_putchar(chardev_t *d, const char ch)
{
if (asynchronous) {
xencons_t *console = (xencons_t *) PA2KA(MA2PA(PFN2ADDR(start_info.console_mfn)));
uint32_t cons = console->out_cons;
uint32_t prod = console->out_prod;
uint32_t cons = console_page.out_cons;
uint32_t prod = console_page.out_prod;
memory_barrier();
if ((prod - cons) > sizeof(console->out))
if ((prod - cons) > sizeof(console_page.out))
return;
if (ch == '\n')
console->out[MASK_INDEX(prod++, console->out)] = '\r';
console->out[MASK_INDEX(prod++, console->out)] = ch;
console_page.out[MASK_INDEX(prod++, console_page.out)] = '\r';
console_page.out[MASK_INDEX(prod++, console_page.out)] = ch;
write_barrier();
console->out_prod = prod;
console_page.out_prod = prod;
xen_notify_remote(start_info.console_evtchn);
} else