#------------------------------------------------------------------------------ # # Copyright (c) 2014, 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.S # # Abstract: # # Find and call SecStartup # #------------------------------------------------------------------------------ ASM_GLOBAL ASM_PFX(CallPeiCoreEntryPoint) ASM_PFX(CallPeiCoreEntryPoint): # # Obtain the hob list pointer # movl 0x4(%esp), %eax # # Obtain the stack information # ECX: start of range # EDX: end of range # movl 0x8(%esp), %ecx movl 0xC(%esp), %edx # # Platform init # pushal pushl %edx pushl %ecx pushl %eax call ASM_PFX(PlatformInit) popl %eax popl %eax popl %eax popal # # Set stack top pointer # movl %edx, %esp # # Push the hob list pointer # pushl %eax # # Save the value # ECX: start of range # EDX: end of range # movl %esp, %ebp pushl %ecx pushl %edx # # Push processor count to stack first, then BIST status (AP then BSP) # movl $1, %eax cpuid shr $16, %ebx andl $0x000000FF, %ebx cmp $1, %bl jae PushProcessorCount # # Some processors report 0 logical processors. Effectively 0 = 1. # So we fix up the processor count # inc %ebx PushProcessorCount: pushl %ebx # # We need to implement a long-term solution for BIST capture. For now, we just copy BSP BIST # for all processor threads # xorl %ecx, %ecx movb %bl, %cl PushBist: movd %mm0, %eax pushl %eax loop PushBist # Save Time-Stamp Counter movd %mm5, %eax pushl %eax movd %mm6, %eax pushl %eax # # Pass entry point of the PEI core # movl $0xFFFFFFE0, %edi pushl %ds:(%edi) # # Pass BFV into the PEI Core # movl $0xFFFFFFFC, %edi pushl %ds:(%edi) # # Pass stack size into the PEI Core # movl -4(%ebp), %ecx movl -8(%ebp), %edx pushl %ecx # RamBase subl %ecx, %edx pushl %edx # RamSize # # Pass Control into the PEI Core # call ASM_PFX(SecStartup)