summaryrefslogtreecommitdiff
path: root/EdkModulePkg/Core/Pei
diff options
context:
space:
mode:
authorbxing <bxing@6f19259b-4bc3-4df7-8a09-765794883524>2006-08-21 02:53:29 +0000
committerbxing <bxing@6f19259b-4bc3-4df7-8a09-765794883524>2006-08-21 02:53:29 +0000
commiteeb1cd5af35f45308aa2ff153feed9f768a6ef77 (patch)
tree38762217bf257f1320a51e80276c8c26d3b3c2a3 /EdkModulePkg/Core/Pei
parentce3b85747a9cdfdb9ec939e6de1740973abe4395 (diff)
downloadedk2-platforms-eeb1cd5af35f45308aa2ff153feed9f768a6ef77.tar.xz
1. Added Non-existing.c in BaseLib to assert no invocations of SwitchStack() on IPF.
2. Added SwitchIplStacks() function to DxeIplPeim to encapsulate arch details on stack switching. 3. Added PeiSwitchStacks() function to PeiMain to encapsulate arch details on stack switching. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@1328 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'EdkModulePkg/Core/Pei')
-rw-r--r--EdkModulePkg/Core/Pei/Dispatcher/Dispatcher.c9
-rw-r--r--EdkModulePkg/Core/Pei/Dispatcher/Stack.c50
-rw-r--r--EdkModulePkg/Core/Pei/Ipf/Stack.c58
-rw-r--r--EdkModulePkg/Core/Pei/PeiMain.h118
-rw-r--r--EdkModulePkg/Core/Pei/PeiMain.msa8
5 files changed, 193 insertions, 50 deletions
diff --git a/EdkModulePkg/Core/Pei/Dispatcher/Dispatcher.c b/EdkModulePkg/Core/Pei/Dispatcher/Dispatcher.c
index 6d32368fb7..b0de859073 100644
--- a/EdkModulePkg/Core/Pei/Dispatcher/Dispatcher.c
+++ b/EdkModulePkg/Core/Pei/Dispatcher/Dispatcher.c
@@ -208,12 +208,13 @@ Returns:
//in order to provide buffer protection against possible illegal stack
//access that might corrupt the stack.
//
- SwitchStack (
+ PeiSwitchStacks (
(SWITCH_STACK_ENTRY_POINT)(UINTN)TempPtr.Raw,
PeiStartupDescriptor,
(VOID*)PrivateDataInMem,
- (VOID*)((UINTN)PrivateData->StackBase + (UINTN)PrivateData->StackSize)
- );
+ (VOID*)((UINTN)PrivateData->StackBase + (UINTN)PrivateData->StackSize),
+ (VOID*)(UINTN)PrivateData->StackBase
+ );
}
}
}
@@ -345,7 +346,7 @@ Returns:
DebugFoundPeimPoint++;
DebugNotDispatchedBitmap >>= 1;
}
-
+
DEBUG_CODE_END ();
return EFI_NOT_FOUND;
diff --git a/EdkModulePkg/Core/Pei/Dispatcher/Stack.c b/EdkModulePkg/Core/Pei/Dispatcher/Stack.c
new file mode 100644
index 0000000000..057537eef0
--- /dev/null
+++ b/EdkModulePkg/Core/Pei/Dispatcher/Stack.c
@@ -0,0 +1,50 @@
+/** @file
+ PeiSwitchStacks() function for PEI dispatcher.
+
+ Copyright (c) 2006, Intel Corporation<BR>
+ 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: String.c
+
+**/
+
+/**
+ Transfers control to a function starting with a new stack.
+
+ Transfers control to the function specified by EntryPoint using the new stack
+ specified by NewStack and passing in the parameters specified by Context1 and
+ Context2. Context1 and Context2 are optional and may be NULL. The function
+ EntryPoint must never return.
+
+ If EntryPoint is NULL, then ASSERT().
+ If NewStack is NULL, then ASSERT().
+
+ @param EntryPoint A pointer to function to call with the new stack.
+ @param Context1 A pointer to the context to pass into the EntryPoint
+ function.
+ @param Context2 A pointer to the context to pass into the EntryPoint
+ function.
+ @param NewStack A pointer to the new stack to use for the EntryPoint
+ function.
+ @param NewBsp A pointer to the new BSP for the EntryPoint on IPF. It's
+ Reserved on other architectures.
+
+**/
+VOID
+EFIAPI
+PeiSwitchStacks (
+ IN SWITCH_STACK_ENTRY_POINT EntryPoint,
+ IN VOID *Context1, OPTIONAL
+ IN VOID *Context2, OPTIONAL
+ IN VOID *NewStack,
+ IN VOID *NewBsp
+ )
+{
+ SwitchStack (EntryPoint, Context1, Context2, NewStack);
+}
diff --git a/EdkModulePkg/Core/Pei/Ipf/Stack.c b/EdkModulePkg/Core/Pei/Ipf/Stack.c
new file mode 100644
index 0000000000..57d04a27e5
--- /dev/null
+++ b/EdkModulePkg/Core/Pei/Ipf/Stack.c
@@ -0,0 +1,58 @@
+/** @file
+ PeiSwitchStacks() function for PEI dispatcher.
+
+ Copyright (c) 2006, Intel Corporation<BR>
+ 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: String.c
+
+**/
+
+#include <PeiMain.h>
+
+/**
+ Transfers control to a function starting with a new stack.
+
+ Transfers control to the function specified by EntryPoint using the new stack
+ specified by NewStack and passing in the parameters specified by Context1 and
+ Context2. Context1 and Context2 are optional and may be NULL. The function
+ EntryPoint must never return.
+
+ If EntryPoint is NULL, then ASSERT().
+ If NewStack is NULL, then ASSERT().
+
+ @param EntryPoint A pointer to function to call with the new stack.
+ @param Context1 A pointer to the context to pass into the EntryPoint
+ function.
+ @param Context2 A pointer to the context to pass into the EntryPoint
+ function.
+ @param NewStack A pointer to the new stack to use for the EntryPoint
+ function.
+ @param NewBsp A pointer to the new BSP for the EntryPoint on IPF. It's
+ Reserved on other architectures.
+
+**/
+VOID
+EFIAPI
+PeiSwitchStacks (
+ IN SWITCH_STACK_ENTRY_POINT EntryPoint,
+ IN VOID *Context1, OPTIONAL
+ IN VOID *Context2, OPTIONAL
+ IN VOID *NewStack,
+ IN VOID *NewBsp
+ )
+{
+ AsmSwitchStackAndBackingStore (
+ EntryPoint,
+ Context1,
+ Context2,
+ NewStack,
+ NewBsp
+ );
+}
diff --git a/EdkModulePkg/Core/Pei/PeiMain.h b/EdkModulePkg/Core/Pei/PeiMain.h
index 95555138e2..dc7185899b 100644
--- a/EdkModulePkg/Core/Pei/PeiMain.h
+++ b/EdkModulePkg/Core/Pei/PeiMain.h
@@ -1,13 +1,13 @@
/*++
-Copyright (c) 2006, 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.
+Copyright (c) 2006, 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:
@@ -138,7 +138,7 @@ PeiCore (
Routine Description:
- Main entry point to Pei Core. After switching stack in the PEI core,
+ Main entry point to Pei Core. After switching stack in the PEI core,
it will restart with the old core data.
Arguments:
@@ -180,10 +180,10 @@ Arguments:
PeiServices - Calling context.
- DependencyExpression - Pointer to a dependency expression. The Grammar adheres to
+ DependencyExpression - Pointer to a dependency expression. The Grammar adheres to
the BNF described above and is stored in postfix notation.
- Runnable - is True if the driver can be scheduled and False if the driver
- cannot be scheduled. This is the value that the schedulers
+ Runnable - is True if the driver can be scheduled and False if the driver
+ cannot be scheduled. This is the value that the schedulers
should use for deciding the state of the driver.
Returns:
@@ -222,7 +222,7 @@ Returns:
EFI_SUCCESS - Successfully dispatched PEIM.
EFI_NOT_FOUND - The dispatch failed.
-
+
--*/
;
@@ -273,7 +273,7 @@ Arguments:
FwVolHeader - Pointer to the FV header of the volume to search.
This parameter must point to a valid FFS volume.
-
+
PeimFileHeader - Pointer to the current file from which to begin searching.
This pointer will be updated upon return to reflect the file found.
@@ -375,9 +375,9 @@ Routine Description:
Arguments:
CoreData - The PEI core Private Data
-
+
Returns:
-
+
--*/
;
@@ -432,7 +432,7 @@ Arguments:
NewHandOffHob - The new handoff HOB list.
Returns:
-
+
--*/
;
@@ -518,7 +518,7 @@ Arguments:
Returns:
- Status - EFI_SUCCESS if the PPI is in the database
+ Status - EFI_SUCCESS if the PPI is in the database
EFI_NOT_FOUND if the PPI is not in the database
--*/
;
@@ -610,12 +610,12 @@ PeiGetBootMode (
Routine Description:
- This service enables PEIMs to ascertain the present value of the boot mode.
+ This service enables PEIMs to ascertain the present value of the boot mode.
Arguments:
PeiServices - The PEI core services table.
- BootMode - A pointer to contain the value of the boot mode.
+ BootMode - A pointer to contain the value of the boot mode.
Returns:
@@ -635,7 +635,7 @@ PeiSetBootMode (
Routine Description:
- This service enables PEIMs to update the boot mode variable.
+ This service enables PEIMs to update the boot mode variable.
Arguments:
@@ -744,7 +744,7 @@ Returns:
EFI_SUCCESS - Get the pointer of HOB List
EFI_NOT_AVAILABLE_YET - the HOB List is not yet published
EFI_INVALID_PARAMETER - HobList is NULL (in debug mode)
-
+
--*/
;
@@ -775,7 +775,7 @@ Returns:
- EFI_INVALID_PARAMETER if Hob is NULL
- EFI_NOT_AVAILABLE_YET if HobList is still not available.
- EFI_OUT_OF_RESOURCES if there is no more memory to grow the Hoblist.
-
+
--*/
;
@@ -825,16 +825,16 @@ Routine Description:
Arguments:
PeiServices - Pointer to the PEI Core Services Table.
-
+
SearchType - Filter to find only files of this type.
Type EFI_FV_FILETYPE_ALL causes no filtering to be done.
-
+
FwVolHeader - Pointer to the FV header of the volume to search.
This parameter must point to a valid FFS volume.
-
+
FileHeader - Pointer to the current file from which to begin searching.
This pointer will be updated upon return to reflect the file found.
-
+
Returns:
EFI_NOT_FOUND - No files matching the search criteria were found
EFI_SUCCESS
@@ -895,9 +895,9 @@ Arguments:
Returns:
Pointer to the Firmware Volume instance requested
-
+
EFI_INVALID_PARAMETER - FwVolHeader is NULL
-
+
EFI_SUCCESS - Firmware volume instance successfully found.
--*/
@@ -955,7 +955,7 @@ Arguments:
Returns:
Status - EFI_SUCCESS
-
+
--*/
;
@@ -971,7 +971,7 @@ PeiAllocatePages (
Routine Description:
- Memory allocation service on permanent memory,
+ Memory allocation service on permanent memory,
not usable prior to the memory installation.
Arguments:
@@ -1004,7 +1004,7 @@ PeiAllocatePool (
Routine Description:
- Memory allocation service on the CAR.
+ Memory allocation service on the CAR.
Arguments:
@@ -1019,7 +1019,7 @@ Returns:
Status - EFI_SUCCESS The allocation was successful
EFI_OUT_OF_RESOURCES There is not enough heap to satisfy the requirement
to allocate the requested size.
-
+
--*/
;
@@ -1038,15 +1038,15 @@ Routine Description:
Arguments:
PeiServices - Calling context.
-
+
PeimFileHeader - Peim file's header.
-
+
EntryPoint - Entry point of that Peim file.
Returns:
Status code.
-
+
--*/
;
@@ -1070,15 +1070,15 @@ Routine Description:
Arguments:
PeiServices - The PEI core services table.
-
+
CodeType - Type of Status Code.
-
+
Value - Value to output for Status Code.
-
+
Instance - Instance Number of this status code.
-
+
CallerId - ID of the caller of this status code.
-
+
Data - Optional data associated with this status code.
Returns:
@@ -1109,10 +1109,42 @@ Returns:
Status - EFI_NOT_AVAILABLE_YET. PPI not available yet.
- EFI_DEVICE_ERROR. Did not reset system.
-
- Otherwise, resets the system.
+
+ Otherwise, resets the system.
--*/
;
+/**
+ Transfers control to a function starting with a new stack.
+
+ Transfers control to the function specified by EntryPoint using the new stack
+ specified by NewStack and passing in the parameters specified by Context1 and
+ Context2. Context1 and Context2 are optional and may be NULL. The function
+ EntryPoint must never return.
+
+ If EntryPoint is NULL, then ASSERT().
+ If NewStack is NULL, then ASSERT().
+
+ @param EntryPoint A pointer to function to call with the new stack.
+ @param Context1 A pointer to the context to pass into the EntryPoint
+ function.
+ @param Context2 A pointer to the context to pass into the EntryPoint
+ function.
+ @param NewStack A pointer to the new stack to use for the EntryPoint
+ function.
+ @param NewBsp A pointer to the new BSP for the EntryPoint on IPF. It's
+ Reserved on other architectures.
+
+**/
+VOID
+EFIAPI
+PeiSwitchStacks (
+ IN SWITCH_STACK_ENTRY_POINT EntryPoint,
+ IN VOID *Context1, OPTIONAL
+ IN VOID *Context2, OPTIONAL
+ IN VOID *NewStack,
+ IN VOID *NewBsp
+ );
+
#endif
diff --git a/EdkModulePkg/Core/Pei/PeiMain.msa b/EdkModulePkg/Core/Pei/PeiMain.msa
index 549820ef87..99d96ad714 100644
--- a/EdkModulePkg/Core/Pei/PeiMain.msa
+++ b/EdkModulePkg/Core/Pei/PeiMain.msa
@@ -71,9 +71,11 @@
<Filename>Reset/Reset.c</Filename>
<Filename>Security/Security.c</Filename>
<Filename>StatusCode/StatusCode.c</Filename>
- <Filename SupArchList="IPF">ipf/SwitchToCacheMode.c</Filename>
- <Filename SupArchList="IPF">ipf/IpfCpuCore.i</Filename>
- <Filename SupArchList="IPF">ipf/IpfCpuCore.s</Filename>
+ <Filename SupArchList="IPF">Ipf/SwitchToCacheMode.c</Filename>
+ <Filename SupArchList="IPF">Ipf/IpfCpuCore.i</Filename>
+ <Filename SupArchList="IPF">Ipf/IpfCpuCore.s</Filename>
+ <Filename SupArchList="IPF">Ipf/Stack.c</Filename>
+ <Filename SupArchList="IA32 X64 EBC">Dispatcher/Stack.c</Filename>
</SourceFiles>
<PackageDependencies>
<Package PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/>