diff options
-rw-r--r-- | EdkModulePkg/Core/DxeIplPeim/DxeIpl.h | 54 | ||||
-rw-r--r-- | EdkModulePkg/Core/DxeIplPeim/DxeLoad.c | 11 | ||||
-rw-r--r-- | EdkModulePkg/Core/DxeIplPeim/Ia32/DxeLoadFunc.c | 51 | ||||
-rw-r--r-- | EdkModulePkg/Core/DxeIplPeim/Ipf/DxeLoadFunc.c | 61 | ||||
-rw-r--r-- | EdkModulePkg/Core/Pei/Dispatcher/Dispatcher.c | 9 | ||||
-rw-r--r-- | EdkModulePkg/Core/Pei/Dispatcher/Stack.c | 50 | ||||
-rw-r--r-- | EdkModulePkg/Core/Pei/Ipf/Stack.c | 58 | ||||
-rw-r--r-- | EdkModulePkg/Core/Pei/PeiMain.h | 118 | ||||
-rw-r--r-- | EdkModulePkg/Core/Pei/PeiMain.msa | 8 | ||||
-rw-r--r-- | MdePkg/Library/BaseLib/BaseLib.msa | 1 | ||||
-rw-r--r-- | MdePkg/Library/BaseLib/Ipf/Non-existing.c | 53 |
11 files changed, 385 insertions, 89 deletions
diff --git a/EdkModulePkg/Core/DxeIplPeim/DxeIpl.h b/EdkModulePkg/Core/DxeIplPeim/DxeIpl.h index 5e35042861..9e626a7dc7 100644 --- a/EdkModulePkg/Core/DxeIplPeim/DxeIpl.h +++ b/EdkModulePkg/Core/DxeIplPeim/DxeIpl.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:
@@ -25,15 +25,37 @@ Abstract: extern BOOLEAN gInMemory;
+/**
+ 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
SwitchIplStacks (
- VOID *EntryPoint,
- UINTN Parameter1,
- UINTN Parameter2,
- VOID *NewStack,
- VOID *NewBsp
- )
-;
+ IN SWITCH_STACK_ENTRY_POINT EntryPoint,
+ IN VOID *Context1, OPTIONAL
+ IN VOID *Context2, OPTIONAL
+ IN VOID *NewStack,
+ IN VOID *NewBsp
+ );
EFI_STATUS
PeiFindFile (
@@ -133,7 +155,7 @@ CreateIdentityMappingPageTables ( VOID
ActivateLongMode (
- IN EFI_PHYSICAL_ADDRESS PageTables,
+ IN EFI_PHYSICAL_ADDRESS PageTables,
IN EFI_PHYSICAL_ADDRESS HobStart,
IN EFI_PHYSICAL_ADDRESS Stack,
IN EFI_PHYSICAL_ADDRESS CodeEntryPoint1,
diff --git a/EdkModulePkg/Core/DxeIplPeim/DxeLoad.c b/EdkModulePkg/Core/DxeIplPeim/DxeLoad.c index 4492376462..c53a7316c9 100644 --- a/EdkModulePkg/Core/DxeIplPeim/DxeLoad.c +++ b/EdkModulePkg/Core/DxeIplPeim/DxeLoad.c @@ -130,7 +130,7 @@ Returns: NULL
);
- if (EFI_ERROR (Status) && (BootMode != BOOT_ON_S3_RESUME)) {
+ if (EFI_ERROR (Status) && (BootMode != BOOT_ON_S3_RESUME)) {
//
// The DxeIpl has not yet been shadowed
//
@@ -396,11 +396,12 @@ Returns: );
DEBUG ((EFI_D_INFO, "DXE Core Entry\n"));
- SwitchStack (
+ SwitchIplStacks (
(SWITCH_STACK_ENTRY_POINT)(UINTN)DxeCoreEntryPoint,
HobList.Raw,
- (VOID *) (UINTN) BspStore,
- TopOfStack
+ NULL,
+ TopOfStack,
+ (VOID *) (UINTN) BspStore
);
//
@@ -757,7 +758,7 @@ Returns: EFI_FIRMWARE_VOLUME_HEADER *FvHeader;
EFI_COMPRESSION_SECTION *CompressionSection;
EFI_FFS_FILE_HEADER *FfsFileHeader;
-
+
FfsFileHeader = *RealFfsFileHeader;
Status = PeiServicesFfsFindSectionData (
diff --git a/EdkModulePkg/Core/DxeIplPeim/Ia32/DxeLoadFunc.c b/EdkModulePkg/Core/DxeIplPeim/Ia32/DxeLoadFunc.c index 4d1015bbd8..0aa323ec2f 100644 --- a/EdkModulePkg/Core/DxeIplPeim/Ia32/DxeLoadFunc.c +++ b/EdkModulePkg/Core/DxeIplPeim/Ia32/DxeLoadFunc.c @@ -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:
@@ -49,3 +49,38 @@ Returns: *BspStore = 0;
return EFI_SUCCESS;
}
+
+/**
+ 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
+SwitchIplStacks (
+ 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/DxeIplPeim/Ipf/DxeLoadFunc.c b/EdkModulePkg/Core/DxeIplPeim/Ipf/DxeLoadFunc.c index bcf59f970a..cdc418f6f3 100644 --- a/EdkModulePkg/Core/DxeIplPeim/Ipf/DxeLoadFunc.c +++ b/EdkModulePkg/Core/DxeIplPeim/Ipf/DxeLoadFunc.c @@ -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:
@@ -48,8 +48,8 @@ Returns: {
EFI_STATUS Status;
- Status = EFI_SUCCESS;
-
+ Status = EFI_SUCCESS;
+
ASSERT (NULL != BspStore);
//
@@ -68,3 +68,44 @@ Returns: return EFI_SUCCESS;
}
+
+/**
+ 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
+SwitchIplStacks (
+ 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/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"/>
diff --git a/MdePkg/Library/BaseLib/BaseLib.msa b/MdePkg/Library/BaseLib/BaseLib.msa index 403c6e3b8c..8924f4dbf5 100644 --- a/MdePkg/Library/BaseLib/BaseLib.msa +++ b/MdePkg/Library/BaseLib/BaseLib.msa @@ -410,6 +410,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. <Filename SupArchList="IPF">Ipf/CpuPause.s</Filename>
<Filename SupArchList="IPF">Ipf/CpuFlushTlb.s</Filename>
<Filename SupArchList="IPF">Ipf/GetInterruptState.s</Filename>
+ <Filename SupArchList="IPF">Ipf/Non-existing.c</Filename>
<Filename SupArchList="EBC">Math64.c</Filename>
<Filename SupArchList="EBC">Unaligned.c</Filename>
<Filename SupArchList="EBC">Ebc/SwitchStack.c</Filename>
diff --git a/MdePkg/Library/BaseLib/Ipf/Non-existing.c b/MdePkg/Library/BaseLib/Ipf/Non-existing.c new file mode 100644 index 0000000000..bbb5bdf943 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ipf/Non-existing.c @@ -0,0 +1,53 @@ +/** @file
+ Non-existing BaseLib functions on Ipf
+
+ 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: Non-existing.c
+
+**/
+
+#include "../BaseLibInternals.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.
+
+**/
+VOID
+EFIAPI
+InternalSwitchStack (
+ IN SWITCH_STACK_ENTRY_POINT EntryPoint,
+ IN VOID *Context1, OPTIONAL
+ IN VOID *Context2, OPTIONAL
+ IN VOID *NewStack
+ )
+{
+ //
+ // This version of this function does not actually change the stack pointer
+ // This is to support compilation of CPU types that do not support assemblers
+ // such as EBC
+ //
+ ASSERT (FALSE);
+}
|