X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=IntelFspPkg%2FFspSecCore%2FIa32%2FFspApiEntry.asm;h=7c6e60f0d14f332eea203bedc144a9c2480e229c;hp=6c330833e047e19204a819cdc9e2fac25d55b68b;hb=95c95ac0efb10fe4b608a3388d928eb947c15085;hpb=4701d96534f2228b6f4aa925606566d2c2bb55be diff --git a/IntelFspPkg/FspSecCore/Ia32/FspApiEntry.asm b/IntelFspPkg/FspSecCore/Ia32/FspApiEntry.asm index 6c330833e0..7c6e60f0d1 100644 --- a/IntelFspPkg/FspSecCore/Ia32/FspApiEntry.asm +++ b/IntelFspPkg/FspSecCore/Ia32/FspApiEntry.asm @@ -41,9 +41,8 @@ EXTERN GetFspBaseAddress:PROC EXTERN GetBootFirmwareVolumeOffset:PROC EXTERN Pei2LoaderSwitchStack:PROC EXTERN FspSelfCheck(FspSelfCheckDflt):PROC -EXTERN PlatformBasicInit(PlatformBasicInitDflt):PROC EXTERN LoadUcode(LoadUcodeDflt):PROC -EXTERN SecPlatformInit:PROC +EXTERN SecPlatformInit(SecPlatformInitDflt):PROC EXTERN SecCarInit:PROC ; @@ -101,7 +100,7 @@ exit: FspSelfCheckDflt ENDP ;------------------------------------------------------------------------------ -PlatformBasicInitDflt PROC NEAR PUBLIC +SecPlatformInitDflt PROC NEAR PUBLIC ; Inputs: ; eax -> Return address ; Outputs: @@ -116,7 +115,7 @@ PlatformBasicInitDflt PROC NEAR PUBLIC xor eax, eax exit: jmp ebp -PlatformBasicInitDflt ENDP +SecPlatformInitDflt ENDP ;------------------------------------------------------------------------------ LoadUcodeDflt PROC NEAR PUBLIC @@ -304,7 +303,6 @@ exit: LoadUcodeDflt ENDP EstablishStackFsp PROC NEAR PRIVATE - ; Following is the code copied from BYTFSP, need to figure out what it is doing.. ; ; Save parameter pointer in edx ; @@ -336,9 +334,9 @@ InvalidMicrocodeRegion: ; push DATA_LEN_OF_PER0 ; Size of the data region push 30524550h ; Signature of the data region 'PER0' - movd eax, xmm4 - push eax - movd eax, xmm5 + LOAD_EDX + push edx + LOAD_EAX push eax rdtsc push edx @@ -387,9 +385,17 @@ TempRamInitApi PROC NEAR PUBLIC ; Save timestamp into XMM4 & XMM5 ; rdtsc - movd xmm4, edx - movd xmm5, eax - + SAVE_EAX + SAVE_EDX + + ; + ; Check Parameter + ; + mov eax, dword ptr [esp + 4] + cmp eax, 0 + mov eax, 80000002h + jz NemInitExit + ; ; CPUID/DeviceID check ; @@ -400,16 +406,22 @@ TempRamInitApi PROC NEAR PUBLIC jnz NemInitExit CALL_MMX SecPlatformInit - - ; Call Sec CAR Init - CALL_MMX SecCarInit + cmp eax, 0 + jnz NemInitExit - ; @todo: ESP has been modified, we need to restore here. - LOAD_REGS - SAVE_REGS ; Load microcode + LOAD_ESP CALL_MMX LoadUcode + cmp eax, 0 + jnz NemInitExit + + ; Call Sec CAR Init + LOAD_ESP + CALL_MMX SecCarInit + cmp eax, 0 + jnz NemInitExit + LOAD_ESP CALL_MMX EstablishStackFsp NemInitExit: