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
+ 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
+ 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 + +/** + 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 @@ Reset/Reset.c Security/Security.c StatusCode/StatusCode.c - ipf/SwitchToCacheMode.c - ipf/IpfCpuCore.i - ipf/IpfCpuCore.s + Ipf/SwitchToCacheMode.c + Ipf/IpfCpuCore.i + Ipf/IpfCpuCore.s + Ipf/Stack.c + Dispatcher/Stack.c 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. Ipf/CpuPause.s Ipf/CpuFlushTlb.s Ipf/GetInterruptState.s + Ipf/Non-existing.c Math64.c Unaligned.c Ebc/SwitchStack.c 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); +}