• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#------------------------------------------------------------------------------
2#
3# Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
4# This program and the accompanying materials
5# are licensed and made available under the terms and conditions of the BSD License
6# which accompanies this distribution.  The full text of the license may be found at
7# http://opensource.org/licenses/bsd-license.php.
8#
9# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
11#
12# Module Name:
13#
14#  PeiCoreEntry.S
15#
16# Abstract:
17#
18#   Find and call SecStartup
19#
20#------------------------------------------------------------------------------
21
22ASM_GLOBAL ASM_PFX(CallPeiCoreEntryPoint)
23ASM_PFX(CallPeiCoreEntryPoint):
24  #
25  # Obtain the hob list pointer
26  #
27  movl    0x4(%esp), %eax
28  #
29  # Obtain the stack information
30  #   ECX: start of range
31  #   EDX: end of range
32  #
33  movl    0x8(%esp), %ecx
34  movl    0xC(%esp), %edx
35
36  #
37  # Platform init
38  #
39  pushal
40  pushl %edx
41  pushl %ecx
42  pushl %eax
43  call  ASM_PFX(PlatformInit)
44  popl  %eax
45  popl  %eax
46  popl  %eax
47  popal
48
49  #
50  # Set stack top pointer
51  #
52  movl    %edx, %esp
53
54  #
55  # Push the hob list pointer
56  #
57  pushl   %eax
58
59  #
60  # Save the value
61  #   ECX: start of range
62  #   EDX: end of range
63  #
64  movl    %esp, %ebp
65  pushl   %ecx
66  pushl   %edx
67
68  #
69  # Push processor count to stack first, then BIST status (AP then BSP)
70  #
71  movl    $1, %eax
72  cpuid
73  shr     $16, %ebx
74  andl    $0x000000FF, %ebx
75  cmp     $1, %bl
76  jae     PushProcessorCount
77
78  #
79  # Some processors report 0 logical processors.  Effectively 0 = 1.
80  # So we fix up the processor count
81  #
82  inc     %ebx
83
84PushProcessorCount:
85  pushl   %ebx
86
87  #
88  # We need to implement a long-term solution for BIST capture.  For now, we just copy BSP BIST
89  # for all processor threads
90  #
91  xorl    %ecx, %ecx
92  movb    %bl, %cl
93PushBist:
94  movd    %mm0, %eax
95  pushl   %eax
96  loop    PushBist
97
98  # Save Time-Stamp Counter
99  movd  %mm5, %eax
100  pushl %eax
101
102  movd  %mm6, %eax
103  pushl %eax
104
105  #
106  # Pass entry point of the PEI core
107  #
108  movl    $0xFFFFFFE0, %edi
109  pushl   %ds:(%edi)
110
111  #
112  # Pass BFV into the PEI Core
113  #
114  movl    $0xFFFFFFFC, %edi
115  pushl   %ds:(%edi)
116
117  #
118  # Pass stack size into the PEI Core
119  #
120  movl    -4(%ebp), %ecx
121  movl    -8(%ebp), %edx
122  pushl   %ecx       # RamBase
123
124  subl    %ecx, %edx
125  pushl   %edx       # RamSize
126
127  #
128  # Pass Control into the PEI Core
129  #
130  call ASM_PFX(SecStartup)
131