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 _______________________________________________ Xen-devel mailing list Xen-devel@lists.xenproject.org https://lists.xenproject.org/mailman/listinfo/xen-devel