123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- ;------------------------------------------------------------------------------
- ;
- ; Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
- ; SPDX-License-Identifier: BSD-2-Clause-Patent
- ;
- ; Module Name:
- ;
- ; SecEntry.asm
- ;
- ; Abstract:
- ;
- ; This is the code that goes from real-mode to protected mode.
- ; It consumes the reset vector, calls two basic APIs from FSP binary.
- ;
- ;------------------------------------------------------------------------------
- .686p
- .xmm
- .model flat, c
- .code
- EXTRN SecStartup:NEAR
- EXTRN PlatformInit:NEAR
- CallPeiCoreEntryPoint PROC PUBLIC
- ;
- ; Obtain the hob list pointer
- ;
- mov eax, [esp+4]
- ;
- ; Obtain the stack information
- ; ECX: start of range
- ; EDX: end of range
- ;
- mov ecx, [esp+8]
- mov edx, [esp+0Ch]
- ;
- ; Platform init
- ;
- pushad
- push edx
- push ecx
- push eax
- call PlatformInit
- pop eax
- pop eax
- pop eax
- popad
- ;
- ; Set stack top pointer
- ;
- mov esp, edx
- ;
- ; Push the hob list pointer
- ;
- push eax
- ;
- ; Save the value
- ; ECX: start of range
- ; EDX: end of range
- ;
- mov ebp, esp
- push ecx
- push edx
- ;
- ; Push processor count to stack first, then BIST status (AP then BSP)
- ;
- mov eax, 1
- cpuid
- shr ebx, 16
- and ebx, 0000000FFh
- cmp bl, 1
- jae PushProcessorCount
- ;
- ; Some processors report 0 logical processors. Effectively 0 = 1.
- ; So we fix up the processor count
- ;
- inc ebx
- PushProcessorCount:
- push ebx
- ;
- ; We need to implement a long-term solution for BIST capture. For now, we just copy BSP BIST
- ; for all processor threads
- ;
- xor ecx, ecx
- mov cl, bl
- PushBist:
- movd eax, mm0
- push eax
- loop PushBist
- ; Save Time-Stamp Counter
- movd eax, mm5
- push eax
- movd eax, mm6
- push eax
- ;
- ; Pass entry point of the PEI core
- ;
- mov edi, 0FFFFFFE0h
- push DWORD PTR ds:[edi]
- ;
- ; Pass BFV into the PEI Core
- ;
- mov edi, 0FFFFFFFCh
- push DWORD PTR ds:[edi]
- ;
- ; Pass stack size into the PEI Core
- ;
- mov ecx, [ebp - 4]
- mov edx, [ebp - 8]
- push ecx ; RamBase
- sub edx, ecx
- push edx ; RamSize
- ;
- ; Pass Control into the PEI Core
- ;
- call SecStartup
- CallPeiCoreEntryPoint ENDP
- END
|