Move STARTUP_CODE and ENABLE_EXECUTE_DISABLE_CODE definitions from ApStartup.c to CpuMp.h.
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Jeff Fan <[email protected]> CC: Michael Kinney <[email protected]> CC: Laszlo Ersek <[email protected]> --- UefiCpuPkg/CpuDxe/ApStartup.c | 99 ------------------------------------------- UefiCpuPkg/CpuDxe/CpuMp.h | 99 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 99 insertions(+), 99 deletions(-) diff --git a/UefiCpuPkg/CpuDxe/ApStartup.c b/UefiCpuPkg/CpuDxe/ApStartup.c index 78fb26f..77476ae 100644 --- a/UefiCpuPkg/CpuDxe/ApStartup.c +++ b/UefiCpuPkg/CpuDxe/ApStartup.c @@ -16,29 +16,6 @@ #include "CpuGdt.h" #include "CpuMp.h" -#pragma pack(1) - -typedef struct { - UINT8 MoveIa32EferMsrToEcx[5]; - UINT8 ReadIa32EferMsr[2]; - UINT8 SetExecuteDisableBitEnableBit[4]; - UINT8 WriteIa32EferMsr[2]; - -#if defined (MDE_CPU_IA32) - UINT8 MovEaxCr3; - UINT32 Cr3Value; - UINT8 MovCr3Eax[3]; - - UINT8 MoveCr4ToEax[3]; - UINT8 SetCr4Bit5[4]; - UINT8 MoveEaxToCr4[3]; - - UINT8 MoveCr0ToEax[3]; - UINT8 SetCr0PagingBit[4]; - UINT8 MoveEaxToCr0[3]; -#endif -} ENABLE_EXECUTE_DISABLE_CODE; - ENABLE_EXECUTE_DISABLE_CODE mEnableExecuteDisableCodeTemplate = { { 0xB9, 0x80, 0x00, 0x00, 0xC0 }, // mov ecx, 0xc0000080 { 0x0F, 0x32 }, // rdmsr @@ -59,82 +36,6 @@ ENABLE_EXECUTE_DISABLE_CODE mEnableExecuteDisableCodeTemplate = { #endif }; -typedef struct { - UINT8 JmpToCli[2]; - - UINT16 GdtLimit; - UINT32 GdtBase; - - UINT8 Cli; - - UINT8 MovAxRealSegment; UINT16 RealSegment; - UINT8 MovDsAx[2]; - - UINT8 MovBxGdtr[3]; - UINT8 LoadGdt[5]; - - UINT8 MovEaxCr0[2]; - UINT32 MovEaxCr0Value; - UINT8 MovCr0Eax[3]; - - UINT8 FarJmp32Flat[2]; UINT32 FlatJmpOffset; UINT16 FlatJmpSelector; - - // - // Now in IA32 - // - UINT8 MovEaxCr4; - UINT32 MovEaxCr4Value; - UINT8 MovCr4Eax[3]; - - UINT8 MoveDataSelectorIntoAx[2]; UINT16 FlatDataSelector; - UINT8 MoveFlatDataSelectorFromAxToDs[2]; - UINT8 MoveFlatDataSelectorFromAxToEs[2]; - UINT8 MoveFlatDataSelectorFromAxToFs[2]; - UINT8 MoveFlatDataSelectorFromAxToGs[2]; - UINT8 MoveFlatDataSelectorFromAxToSs[2]; - - // - // Code placeholder to enable PAE Execute Disable for IA32 - // and enable Execute Disable Bit for X64 - // - ENABLE_EXECUTE_DISABLE_CODE EnableExecuteDisable; - -#if defined (MDE_CPU_X64) - // - // Transition to X64 - // - UINT8 MovEaxCr3; - UINT32 Cr3Value; - UINT8 MovCr3Eax[3]; - - UINT8 MoveCr4ToEax[3]; - UINT8 SetCr4Bit5[4]; - UINT8 MoveEaxToCr4[3]; - - UINT8 MoveLongModeEnableMsrToEcx[5]; - UINT8 ReadLmeMsr[2]; - UINT8 SetLongModeEnableBit[4]; - UINT8 WriteLmeMsr[2]; - - UINT8 MoveCr0ToEax[3]; - UINT8 SetCr0PagingBit[4]; - UINT8 MoveEaxToCr0[3]; - //UINT8 DeadLoop[2]; - - UINT8 FarJmp32LongMode; UINT32 LongJmpOffset; UINT16 LongJmpSelector; -#endif // defined (MDE_CPU_X64) - -#if defined (MDE_CPU_X64) - UINT8 MovEaxOrRaxCpuDxeEntry[2]; UINTN CpuDxeEntryValue; -#else - UINT8 MovEaxOrRaxCpuDxeEntry; UINTN CpuDxeEntryValue; -#endif - UINT8 JmpToCpuDxeEntry[2]; - -} STARTUP_CODE; - -#pragma pack() - /** This .asm code used for translating processor from 16 bit real mode into 64 bit long mode. which help to create the mStartupCodeTemplate value. diff --git a/UefiCpuPkg/CpuDxe/CpuMp.h b/UefiCpuPkg/CpuDxe/CpuMp.h index 503f3ae..feca3be 100644 --- a/UefiCpuPkg/CpuDxe/CpuMp.h +++ b/UefiCpuPkg/CpuDxe/CpuMp.h @@ -22,6 +22,105 @@ #include <Library/HobLib.h> #include <Library/ReportStatusCodeLib.h> +#pragma pack(1) + +typedef struct { + UINT8 MoveIa32EferMsrToEcx[5]; + UINT8 ReadIa32EferMsr[2]; + UINT8 SetExecuteDisableBitEnableBit[4]; + UINT8 WriteIa32EferMsr[2]; + +#if defined (MDE_CPU_IA32) + UINT8 MovEaxCr3; + UINT32 Cr3Value; + UINT8 MovCr3Eax[3]; + + UINT8 MoveCr4ToEax[3]; + UINT8 SetCr4Bit5[4]; + UINT8 MoveEaxToCr4[3]; + + UINT8 MoveCr0ToEax[3]; + UINT8 SetCr0PagingBit[4]; + UINT8 MoveEaxToCr0[3]; +#endif +} ENABLE_EXECUTE_DISABLE_CODE; + +typedef struct { + UINT8 JmpToCli[2]; + + UINT16 GdtLimit; + UINT32 GdtBase; + + UINT8 Cli; + + UINT8 MovAxRealSegment; UINT16 RealSegment; + UINT8 MovDsAx[2]; + + UINT8 MovBxGdtr[3]; + UINT8 LoadGdt[5]; + + UINT8 MovEaxCr0[2]; + UINT32 MovEaxCr0Value; + UINT8 MovCr0Eax[3]; + + UINT8 FarJmp32Flat[2]; UINT32 FlatJmpOffset; UINT16 FlatJmpSelector; + + // + // Now in IA32 + // + UINT8 MovEaxCr4; + UINT32 MovEaxCr4Value; + UINT8 MovCr4Eax[3]; + + UINT8 MoveDataSelectorIntoAx[2]; UINT16 FlatDataSelector; + UINT8 MoveFlatDataSelectorFromAxToDs[2]; + UINT8 MoveFlatDataSelectorFromAxToEs[2]; + UINT8 MoveFlatDataSelectorFromAxToFs[2]; + UINT8 MoveFlatDataSelectorFromAxToGs[2]; + UINT8 MoveFlatDataSelectorFromAxToSs[2]; + + // + // Code placeholder to enable PAE Execute Disable for IA32 + // and enable Execute Disable Bit for X64 + // + ENABLE_EXECUTE_DISABLE_CODE EnableExecuteDisable; + +#if defined (MDE_CPU_X64) + // + // Transition to X64 + // + UINT8 MovEaxCr3; + UINT32 Cr3Value; + UINT8 MovCr3Eax[3]; + + UINT8 MoveCr4ToEax[3]; + UINT8 SetCr4Bit5[4]; + UINT8 MoveEaxToCr4[3]; + + UINT8 MoveLongModeEnableMsrToEcx[5]; + UINT8 ReadLmeMsr[2]; + UINT8 SetLongModeEnableBit[4]; + UINT8 WriteLmeMsr[2]; + + UINT8 MoveCr0ToEax[3]; + UINT8 SetCr0PagingBit[4]; + UINT8 MoveEaxToCr0[3]; + //UINT8 DeadLoop[2]; + + UINT8 FarJmp32LongMode; UINT32 LongJmpOffset; UINT16 LongJmpSelector; +#endif // defined (MDE_CPU_X64) + +#if defined (MDE_CPU_X64) + UINT8 MovEaxOrRaxCpuDxeEntry[2]; UINTN CpuDxeEntryValue; +#else + UINT8 MovEaxOrRaxCpuDxeEntry; UINTN CpuDxeEntryValue; +#endif + UINT8 JmpToCpuDxeEntry[2]; + +} STARTUP_CODE; + +#pragma pack() + /** Initialize Multi-processor support. -- 1.9.5.msysgit.0 _______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

