]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
xen: Add PVH boot entry code
authorJuergen Gross <jgross@suse.com>
Fri, 7 Dec 2018 12:11:38 +0000 (13:11 +0100)
committerDaniel Kiper <daniel.kiper@oracle.com>
Wed, 12 Dec 2018 11:03:27 +0000 (12:03 +0100)
Add the code for the Xen PVH mode boot entry.

Signed-off-by: Juergen Gross <jgross@suse.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
Tested-by: Hans van Kranenburg <hans@knorrie.org>
grub-core/kern/i386/xen/startup_pvh.S

index 69b8fdccab4a8e5a0b91353ccf8b32569aade149..363c318583929be0aae501ba018f573a5d3d0709 100644 (file)
 
 #include <config.h>
 #include <grub/symbol.h>
+#include <grub/machine/memory.h>
 
        .file   "startup_pvh.S"
        .text
+       .globl  start, _start
+       .code32
 
+start:
+_start:
+       cld
+       lgdt    gdtdesc
+       ljmp    $GRUB_MEMORY_MACHINE_PROT_MODE_CSEG, $1f
+1:
+       movl    $GRUB_MEMORY_MACHINE_PROT_MODE_DSEG, %eax
+       mov     %eax, %ds
+       mov     %eax, %es
+       mov     %eax, %fs
+       mov     %eax, %gs
+       mov     %eax, %ss
+       leal    LOCAL(stack_end), %esp
+
+       /* Save address of start info structure. */
+       mov     %ebx, pvh_start_info
+       call    EXT_C(grub_main)
+       /* Doesn't return. */
+
+       .p2align        3
+gdt:
+       .word   0, 0
+       .byte   0, 0, 0, 0
+
+       /* -- code segment --
+        * base = 0x00000000, limit = 0xFFFFF (4 KiB Granularity), present
+        * type = 32bit code execute/read, DPL = 0
+        */
+       .word   0xFFFF, 0
+       .byte   0, 0x9A, 0xCF, 0
+
+       /* -- data segment --
+        * base = 0x00000000, limit 0xFFFFF (4 KiB Granularity), present
+        * type = 32 bit data read/write, DPL = 0
+        */
+       .word   0xFFFF, 0
+       .byte   0, 0x92, 0xCF, 0
+
+       .p2align        3
+/* this is the GDT descriptor */
+gdtdesc:
+       .word   0x17            /* limit */
+       .long   gdt             /* addr */
+
+       .p2align        2
 /* Saved pointer to start info structure. */
        .globl  pvh_start_info
 pvh_start_info:
        .long   0
+
+       .bss
+       .space  GRUB_MEMORY_MACHINE_PROT_STACK_SIZE
+LOCAL(stack_end):