/trunk/kernel/arch/ia32xen/src/ia32xen.c |
---|
71,8 → 71,6 |
void arch_pre_main(void) |
{ |
xen_vm_assist(VMASST_CMD_ENABLE, VMASST_TYPE_WRITABLE_PAGETABLES); |
pte_t pte; |
memsetb((uintptr_t) &pte, sizeof(pte), 0); |
79,14 → 77,18 |
pte.present = 1; |
pte.writeable = 1; |
pte.frame_address = ADDR2PFN((uintptr_t) start_info.shared_info); |
xen_update_va_mapping(&shared_info, pte, UVMF_INVLPG); |
ASSERT(xen_update_va_mapping(&shared_info, pte, UVMF_INVLPG) == 0); |
if (!(start_info.flags & SIF_INITDOMAIN)) { |
/* Map console frame */ |
pte.present = 1; |
pte.writeable = 1; |
pte.frame_address = start_info.console_mfn; |
xen_update_va_mapping(&console_page, pte, UVMF_INVLPG); |
pte.frame_address = start_info.console.domU.mfn; |
ASSERT(xen_update_va_mapping(&console_page, pte, UVMF_INVLPG) == 0); |
} else |
start_info.console.domU.evtchn = 0; |
xen_set_callbacks(XEN_CS, xen_callback, XEN_CS, xen_failsafe_callback); |
ASSERT(xen_set_callbacks(XEN_CS, xen_callback, XEN_CS, xen_failsafe_callback) == 0); |
/* Create identity mapping */ |
107,8 → 109,9 |
memsetb(tva, PAGE_SIZE, 0); |
pte_t *tptl3 = (pte_t *) PA2KA(GET_PTL1_ADDRESS(start_info.ptl0, PTL0_INDEX(tva))); |
SET_FRAME_FLAGS(tptl3, PTL3_INDEX(tva), PAGE_PRESENT); |
SET_FRAME_ADDRESS(tptl3, PTL3_INDEX(tva), 0); |
SET_PTL1_ADDRESS(start_info.ptl0, PTL0_INDEX(va), tpa); |
SET_FRAME_ADDRESS(tptl3, PTL3_INDEX(tva), tpa); |
last_ptl0 = PTL0_INDEX(va); |
meminfo.reserved++; |
/trunk/kernel/arch/ia32xen/src/boot/boot.S |
---|
48,7 → 48,7 |
ELFNOTE(Xen, XEN_ELFNOTE_PADDR_OFFSET, .long, 0) |
ELFNOTE(Xen, XEN_ELFNOTE_ENTRY, .long, kernel_image_start) |
ELFNOTE(Xen, XEN_ELFNOTE_HYPERCALL_PAGE, .long, hypercall_page) |
ELFNOTE(Xen, XEN_ELFNOTE_FEATURES, .asciz, "writable_page_tables|writable_descriptor_tables|auto_translated_physmap|supervisor_mode_kernel") |
ELFNOTE(Xen, XEN_ELFNOTE_FEATURES, .asciz, "auto_translated_physmap|supervisor_mode_kernel") |
ELFNOTE(Xen, XEN_ELFNOTE_PAE_MODE, .asciz, "no") |
ELFNOTE(Xen, XEN_ELFNOTE_LOADER, .asciz, "generic") |
/trunk/kernel/arch/ia32xen/src/drivers/xconsole.c |
---|
42,7 → 42,6 |
#define MASK_INDEX(index, ring) ((index) & (sizeof(ring) - 1)) |
static bool asynchronous = false; |
static void xen_putchar(chardev_t *d, const char ch); |
chardev_t xen_console; |
54,13 → 53,11 |
{ |
chardev_initialize("xen_out", &xen_console, &xen_ops); |
stdout = &xen_console; |
if (!(start_info.flags & SIF_INITDOMAIN)) |
asynchronous = true; |
} |
void xen_putchar(chardev_t *d, const char ch) |
{ |
if (asynchronous) { |
if (start_info.console.domU.evtchn != 0) { |
uint32_t cons = console_page.out_cons; |
uint32_t prod = console_page.out_prod; |
77,7 → 74,7 |
console_page.out_prod = prod; |
xen_notify_remote(start_info.console_evtchn); |
xen_notify_remote(start_info.console.domU.evtchn); |
} else |
xen_console_io(CONSOLE_IO_WRITE, 1, &ch); |
} |