OvmfPkg/XenResetVector: Add new entry point for Xen PVH
Add a new entry point for Xen PVH that enter directly in 32bits.
Information on the expected state of the machine when this entry point
is used can be found at:
https://xenbits.xenproject.org/docs/unstable/misc/pvh.html
Also, compare to the original file [1], the two `nop' of the "resetVector"
entry point are removed. There were introduced by 8332983e2e
("UefiCpuPkg: Replace the un-necessary WBINVD instruction at the reset
vector with two NOPs in VTF0.", 2011-08-04), but don't seems to be
useful. This is the entry point used by HVM guest (hvmloader).
[1] UefiCpuPkg/ResetVector/Vtf0/Ia16/ResetVectorVtf0.asm
Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=1689
Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
Acked-by: Laszlo Ersek <lersek@redhat.com>
Message-Id: <20190813113119.14804-7-anthony.perard@citrix.com>
This commit is contained in:
committed by
Laszlo Ersek
parent
1e9d6b0f98
commit
a8c791c15b
49
OvmfPkg/XenResetVector/Ia32/XenPVHMain.asm
Normal file
49
OvmfPkg/XenResetVector/Ia32/XenPVHMain.asm
Normal file
@@ -0,0 +1,49 @@
|
||||
;------------------------------------------------------------------------------
|
||||
; @file
|
||||
; An entry point use by Xen when a guest is started in PVH mode.
|
||||
;
|
||||
; Copyright (c) 2019, Citrix Systems, Inc.
|
||||
;
|
||||
; SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
;
|
||||
;------------------------------------------------------------------------------
|
||||
|
||||
BITS 32
|
||||
|
||||
xenPVHMain:
|
||||
;
|
||||
; 'BP' to indicate boot-strap processor
|
||||
;
|
||||
mov di, 'BP'
|
||||
|
||||
;
|
||||
; ESP will be used as initial value of the EAX register
|
||||
; in Main.asm
|
||||
;
|
||||
xor esp, esp
|
||||
|
||||
mov ebx, ADDR_OF(gdtr)
|
||||
lgdt [ebx]
|
||||
|
||||
mov eax, SEC_DEFAULT_CR0
|
||||
mov cr0, eax
|
||||
|
||||
jmp LINEAR_CODE_SEL:ADDR_OF(.jmpToNewCodeSeg)
|
||||
.jmpToNewCodeSeg:
|
||||
|
||||
mov eax, SEC_DEFAULT_CR4
|
||||
mov cr4, eax
|
||||
|
||||
mov ax, LINEAR_SEL
|
||||
mov ds, ax
|
||||
mov es, ax
|
||||
mov fs, ax
|
||||
mov gs, ax
|
||||
mov ss, ax
|
||||
|
||||
;
|
||||
; Jump to the main routine of the pre-SEC code
|
||||
; skiping the 16-bit part of the routine and
|
||||
; into the 32-bit flat mode part
|
||||
;
|
||||
OneTimeCallRet TransitionFromReal16To32BitFlat
|
Reference in New Issue
Block a user