2
#include <arch_limits.h>
3
#include <xen/arch-x86_32.h>
5
/* For simplicity, we keep all of this into just one data page */
12
* The following data is initialized from C code
15
/* Pte of this page */
16
.globl _boot_page_entry
23
/* mmuext_op structure */
24
/* Set new page directory */
27
.long MMUEXT_NEW_BASEPTR
29
/* MFN of target page table directory */
37
/* Unpin old page directory */
39
.long MMUEXT_UNPIN_TABLE
41
/* MFN of old page table directory */
49
/* Target stack address, also target virtual address of this page */
58
/* Target start info */
59
.globl _boot_start_info
63
/* Target start address */
69
* Boot target OS, does not return
73
/* Project ourselves at the target place. */
74
movl _boot_target, %ebx
75
movl %ebx, %ebp /* also keep it in ebp for relative addressing */
76
movl _boot_page_entry_lo, %ecx
77
movl _boot_page_entry_hi, %edx
78
movl $2, %esi /* UVMF_INVLPG */
79
movl $__HYPERVISOR_update_va_mapping, %eax
87
movl $(0f - _boot_page), %eax
88
movl _boot_target, %ebx
93
/* Load target page table and unpin old page table. */
94
/* We shouldn't have any problem since in the new page table our page is
95
mapped at the same place. */
96
leal (_boot_mmuext-_boot_page)(%ebp), %ebx
99
movl $0x7FF0, %esi /* DOMID_SELF */
100
movl $__HYPERVISOR_mmuext_op, %eax
107
/* Initialize registers. */
108
lss (_boot_stack-_boot_page)(%ebp), %esp
109
movl (_boot_start_info-_boot_page)(%ebp), %esi
112
jmpl *(_boot_start-_boot_page)(%ebp)