;------------------------------------------------------------------------------ ; ; Copyright (c) 2016, Intel Corporation. All rights reserved.
; This program and the accompanying materials ; are licensed and made available under the terms and conditions of the BSD License ; which accompanies this distribution. The full text of the license may be found at ; http://opensource.org/licenses/bsd-license.php. ; ; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, ; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. ; ; Module Name: ; ; PeiCoreEntry.nasm ; ; Abstract: ; ; Find and call SecStartup ; ;------------------------------------------------------------------------------ SECTION .text extern ASM_PFX(SecStartup) extern ASM_PFX(PlatformInit) global ASM_PFX(CallPeiCoreEntryPoint) ASM_PFX(CallPeiCoreEntryPoint): ; ; 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+0xC] ; ; Platform init ; pushad push edx push ecx push eax call ASM_PFX(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, 0xFF 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, 0xFFFFFFE0 push DWORD [edi] ; ; Pass BFV into the PEI Core ; mov edi, 0xFFFFFFFC push DWORD [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 ASM_PFX(SecStartup)