[edk2-devel] [PATCH v3 06/35] OvmfPkg/XenResetVector: Add new entry point for Xen PVH

Andrew Cooper andrew.cooper3 at citrix.com
Mon Jul 15 11:50:29 UTC 2019


On 15/07/2019 12:46, Roger Pau Monné wrote:
>> diff --git a/OvmfPkg/XenResetVector/Ia32/XenPVHMain.asm b/OvmfPkg/XenResetVector/Ia32/XenPVHMain.asm
>> new file mode 100644
>> index 0000000000..2a17fed52f
>> --- /dev/null
>> +++ b/OvmfPkg/XenResetVector/Ia32/XenPVHMain.asm
>> @@ -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
> Since PVH already starts in flat 32bit mode, I'm not sure I see the
> point of this routine, since it seems to be used exclusively to switch
> from 16 to 32b flat mode. The comment mentions skipping that part, but
> I'm not sure I see how that's achieved.

Its some OVMF local magic.  This means "jmp
end_of_TransitionFromReal16To32BitFlat", which is the correct place to
go, but the code really is misleading to read.

~Andrew

-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#43716): https://edk2.groups.io/g/devel/message/43716
Mute This Topic: https://groups.io/mt/32308570/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-




More information about the edk2-devel-archive mailing list