From: yshang1 Date: Fri, 21 Jul 2006 03:42:54 +0000 (+0000) Subject: Change DxeRuntimeDriverLib name to UefiRuntimeLib. X-Git-Tag: edk2-stable201903~24810 X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=commitdiff_plain;h=3e48a1925b394c9cebbff706b063db90e858e293;ds=sidebyside Change DxeRuntimeDriverLib name to UefiRuntimeLib. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@1061 6f19259b-4bc3-4df7-8a09-765794883524 --- diff --git a/EdkModulePkg/Bus/Pci/Undi/RuntimeDxe/Undi.msa b/EdkModulePkg/Bus/Pci/Undi/RuntimeDxe/Undi.msa index fbe27e4123..c31ab0997c 100644 --- a/EdkModulePkg/Bus/Pci/Undi/RuntimeDxe/Undi.msa +++ b/EdkModulePkg/Bus/Pci/Undi/RuntimeDxe/Undi.msa @@ -43,7 +43,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.--> BaseLib - DxeRuntimeDriverLib + UefiRuntimeLib DebugLib diff --git a/EdkModulePkg/EdkModulePkg.spd b/EdkModulePkg/EdkModulePkg.spd index 6c7da5bd22..8c3197e60c 100644 --- a/EdkModulePkg/EdkModulePkg.spd +++ b/EdkModulePkg/EdkModulePkg.spd @@ -419,7 +419,7 @@ Library/EdkDxePeCoffLoaderFromHobLib/EdkDxePeCoffLoaderFromHobLib.msa Library/DxePerformanceLib/DxePerformanceLib.msa Library/EdkDxePrintLib/EdkDxePrintLib.msa - Library/EdkDxeRuntimeDriverLib/EdkDxeRuntimeDriverLib.msa + Library/EdkUefiRuntimeLib/EdkUefiRuntimeLib.msa Library/EdkDxeSalLib/EdkDxeSalLib.msa Library/EdkFvbServiceLib/EdkFvbServiceLib.msa Library/EdkGraphicsLib/EdkGraphicsLib.msa diff --git a/EdkModulePkg/Library/EdkDxeRuntimeDriverLib/Common/RuntimeLib.c b/EdkModulePkg/Library/EdkDxeRuntimeDriverLib/Common/RuntimeLib.c deleted file mode 100644 index adddf933e2..0000000000 --- a/EdkModulePkg/Library/EdkDxeRuntimeDriverLib/Common/RuntimeLib.c +++ /dev/null @@ -1,258 +0,0 @@ -/*++ - -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: - - RuntimeLib.c - -Abstract: - - Light weight lib to support Tiano drivers. - ---*/ - -#include - -// -// Driver Lib Module Globals -// -STATIC EFI_EVENT mRuntimeNotifyEvent; -STATIC EFI_EVENT mEfiVirtualNotifyEvent; -STATIC BOOLEAN mEfiGoneVirtual = FALSE; -STATIC BOOLEAN mEfiAtRuntime = FALSE; - -EFI_RUNTIME_SERVICES *mRT = NULL; - -VOID -EFIAPI -RuntimeDriverExitBootServices ( - IN EFI_EVENT Event, - IN VOID *Context - ) -/*++ - -Routine Description: - - Set AtRuntime flag as TRUE after ExitBootServices - -Arguments: - - Event - The Event that is being processed - - Context - Event Context - -Returns: - - None - ---*/ -{ - EFI_EVENT_NOTIFY ChildNotifyEventHandler; - UINTN Index; - - for (Index = 0; - _gDriverExitBootServicesEvent[Index] != NULL; - Index++) { - ChildNotifyEventHandler = _gDriverExitBootServicesEvent[Index]; - ChildNotifyEventHandler (Event, NULL); - } - - mEfiAtRuntime = TRUE; -} - -STATIC -VOID -EFIAPI -RuntimeLibVirtualNotifyEvent ( - IN EFI_EVENT Event, - IN VOID *Context - ) -/*++ - -Routine Description: - - Fixup internal data so that EFI can be call in virtual mode. - Call the passed in Child Notify event and convert any pointers in - lib to virtual mode. - -Arguments: - - Event - The Event that is being processed - - Context - Event Context - -Returns: - - None - ---*/ -{ - UINTN Index; - EFI_EVENT_NOTIFY ChildNotifyEventHandler; - - for (Index = 0; - _gDriverSetVirtualAddressMapEvent[Index] != NULL; - Index++) { - ChildNotifyEventHandler = _gDriverSetVirtualAddressMapEvent[Index]; - ChildNotifyEventHandler (Event, NULL); - } - - // - // Update global for Runtime Services Table and IO - // - EfiConvertInternalPointer ((VOID **) &mRT); - - // - // Clear out BootService globals - // - gBS = NULL; - gST = NULL; - mEfiGoneVirtual = TRUE; -} - -EFI_STATUS -RuntimeDriverLibConstruct ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable - ) -/*++ - -Routine Description: - - Intialize runtime Driver Lib if it has not yet been initialized. - -Arguments: - - ImageHandle - The firmware allocated handle for the EFI image. - - SystemTable - A pointer to the EFI System Table. - - GoVirtualChildEvent - Caller can register a virtual notification event. - -Returns: - - EFI_STATUS always returns EFI_SUCCESS except EFI_ALREADY_STARTED if already started. - ---*/ -{ - EFI_STATUS Status; - - mRT = SystemTable->RuntimeServices; - - // - // Register our ExitBootServices () notify function - // - Status = gBS->CreateEvent ( - EFI_EVENT_SIGNAL_EXIT_BOOT_SERVICES, - EFI_TPL_NOTIFY, - RuntimeDriverExitBootServices, - NULL, - &mRuntimeNotifyEvent - ); - - ASSERT_EFI_ERROR (Status); - - // - // Register SetVirtualAddressMap () notify function - // - Status = gBS->CreateEvent ( - EFI_EVENT_SIGNAL_VIRTUAL_ADDRESS_CHANGE, - EFI_TPL_NOTIFY, - RuntimeLibVirtualNotifyEvent, - NULL, - &mEfiVirtualNotifyEvent - ); - - ASSERT_EFI_ERROR (Status); - - return EFI_SUCCESS; -} - -EFI_STATUS -RuntimeDriverLibDeconstruct ( - VOID - ) -/*++ - -Routine Description: - - This routine will free some resources which have been allocated in - EfiInitializeRuntimeDriverLib(). If a runtime driver exits with an error, - it must call this routine to free the allocated resource before the exiting. - -Arguments: - - None - -Returns: - - EFI_SUCCESS - Shotdown the Runtime Driver Lib successfully - EFI_UNSUPPORTED - Runtime Driver lib was not initialized at all - ---*/ -{ - EFI_STATUS Status; - - // - // Close our ExitBootServices () notify function - // - Status = gBS->CloseEvent (mRuntimeNotifyEvent); - ASSERT_EFI_ERROR (Status); - - // - // Close SetVirtualAddressMap () notify function - // - Status = gBS->CloseEvent (mEfiVirtualNotifyEvent); - ASSERT_EFI_ERROR (Status); - - return EFI_SUCCESS; -} - -BOOLEAN -EfiAtRuntime ( - VOID - ) -/*++ - -Routine Description: - Return TRUE if ExitBootServices () has been called - -Arguments: - NONE - -Returns: - TRUE - If ExitBootServices () has been called - ---*/ -{ - return mEfiAtRuntime; -} - -BOOLEAN -EfiGoneVirtual ( - VOID - ) -/*++ - -Routine Description: - Return TRUE if SetVirtualAddressMap () has been called - -Arguments: - NONE - -Returns: - TRUE - If SetVirtualAddressMap () has been called - ---*/ -{ - return mEfiGoneVirtual; -} - diff --git a/EdkModulePkg/Library/EdkDxeRuntimeDriverLib/Common/RuntimeService.c b/EdkModulePkg/Library/EdkDxeRuntimeDriverLib/Common/RuntimeService.c deleted file mode 100644 index 971dcdbf89..0000000000 --- a/EdkModulePkg/Library/EdkDxeRuntimeDriverLib/Common/RuntimeService.c +++ /dev/null @@ -1,480 +0,0 @@ -/*++ - -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: - - RuntimeService.c - -Abstract: - - Light weight lib to support Tiano drivers. - ---*/ - -#include - -VOID -EfiResetSystem ( - IN EFI_RESET_TYPE ResetType, - IN EFI_STATUS ResetStatus, - IN UINTN DataSize, - IN CHAR16 *ResetData - ) -/*++ - -Routine Description: - - Resets the entire platform. - -Arguments: - - ResetType - The type of reset to perform. - ResetStatus - The status code for the reset. - DataSize - The size, in bytes, of ResetData. - ResetData - A data buffer that includes a Null-terminated Unicode string, optionally - followed by additional binary data. - -Returns: - - None - ---*/ -{ - mRT->ResetSystem (ResetType, ResetStatus, DataSize, ResetData); -} - -// -// The following functions hide the mRT local global from the call to -// runtime service in the EFI system table. -// -EFI_STATUS -EfiGetTime ( - OUT EFI_TIME *Time, - OUT EFI_TIME_CAPABILITIES *Capabilities - ) -/*++ - -Routine Description: - - Returns the current time and date information, and the time-keeping - capabilities of the hardware platform. - -Arguments: - - Time - A pointer to storage to receive a snapshot of the current time. - Capabilities - An optional pointer to a buffer to receive the real time clock device¡¯s - capabilities. - -Returns: - - Status code - ---*/ -{ - return mRT->GetTime (Time, Capabilities); -} - -EFI_STATUS -EfiSetTime ( - IN EFI_TIME *Time - ) -/*++ - -Routine Description: - - Sets the current local time and date information. - -Arguments: - - Time - A pointer to the current time. - -Returns: - - Status code - ---*/ -{ - return mRT->SetTime (Time); -} - -EFI_STATUS -EfiGetWakeupTime ( - OUT BOOLEAN *Enabled, - OUT BOOLEAN *Pending, - OUT EFI_TIME *Time - ) -/*++ - -Routine Description: - - Returns the current wakeup alarm clock setting. - -Arguments: - - Enabled - Indicates if the alarm is currently enabled or disabled. - Pending - Indicates if the alarm signal is pending and requires acknowledgement. - Time - The current alarm setting. - -Returns: - - Status code - ---*/ -{ - return mRT->GetWakeupTime (Enabled, Pending, Time); -} - -EFI_STATUS -EfiSetWakeupTime ( - IN BOOLEAN Enable, - IN EFI_TIME *Time - ) -/*++ - -Routine Description: - - Sets the system wakeup alarm clock time. - -Arguments: - - Enable - Enable or disable the wakeup alarm. - Time - If Enable is TRUE, the time to set the wakeup alarm for. - If Enable is FALSE, then this parameter is optional, and may be NULL. - -Returns: - - Status code - ---*/ -{ - return mRT->SetWakeupTime (Enable, Time); -} - - - - -EFI_STATUS -EfiGetVariable ( - IN CHAR16 *VariableName, - IN EFI_GUID * VendorGuid, - OUT UINT32 *Attributes OPTIONAL, - IN OUT UINTN *DataSize, - OUT VOID *Data - ) -/*++ - -Routine Description: - - Returns the value of a variable. - -Arguments: - - VariableName - A Null-terminated Unicode string that is the name of the - vendor¡¯s variable. - VendorGuid - A unique identifier for the vendor. - Attributes - If not NULL, a pointer to the memory location to return the - attributes bitmask for the variable. - DataSize - On input, the size in bytes of the return Data buffer. - On output the size of data returned in Data. - Data - The buffer to return the contents of the variable. - -Returns: - - Status code - ---*/ -{ - return mRT->GetVariable (VariableName, VendorGuid, Attributes, DataSize, Data); -} - -EFI_STATUS -EfiGetNextVariableName ( - IN OUT UINTN *VariableNameSize, - IN OUT CHAR16 *VariableName, - IN OUT EFI_GUID *VendorGuid - ) -/*++ - -Routine Description: - - Enumerates the current variable names. - -Arguments: - - VariableNameSize - The size of the VariableName buffer. - VariableName - On input, supplies the last VariableName that was returned - by GetNextVariableName(). - On output, returns the Nullterminated Unicode string of the - current variable. - VendorGuid - On input, supplies the last VendorGuid that was returned by - GetNextVariableName(). - On output, returns the VendorGuid of the current variable. - -Returns: - - Status code - ---*/ -{ - return mRT->GetNextVariableName (VariableNameSize, VariableName, VendorGuid); -} - -EFI_STATUS -EfiSetVariable ( - IN CHAR16 *VariableName, - IN EFI_GUID *VendorGuid, - IN UINT32 Attributes, - IN UINTN DataSize, - IN VOID *Data - ) -/*++ - -Routine Description: - - Sets the value of a variable. - -Arguments: - - VariableName - A Null-terminated Unicode string that is the name of the - vendor¡¯s variable. - VendorGuid - A unique identifier for the vendor. - Attributes - Attributes bitmask to set for the variable. - DataSize - The size in bytes of the Data buffer. - Data - The contents for the variable. - -Returns: - - Status code - ---*/ -{ - return mRT->SetVariable (VariableName, VendorGuid, Attributes, DataSize, Data); -} - -EFI_STATUS -EfiGetNextHighMonotonicCount ( - OUT UINT32 *HighCount - ) -/*++ - -Routine Description: - - Returns the next high 32 bits of the platform¡¯s monotonic counter. - -Arguments: - - HighCount - Pointer to returned value. - -Returns: - - Status code - ---*/ -{ - return mRT->GetNextHighMonotonicCount (HighCount); -} - -EFI_STATUS -EfiConvertPointer ( - IN UINTN DebugDisposition, - IN OUT VOID *Address - ) -/*++ - -Routine Description: - - Determines the new virtual address that is to be used on subsequent memory accesses. - -Arguments: - - DebugDisposition - Supplies type information for the pointer being converted. - Address - A pointer to a pointer that is to be fixed to be the value needed - for the new virtual address mappings being applied. - -Returns: - - Status code - ---*/ -{ - return mRT->ConvertPointer (DebugDisposition, Address); -} - -EFI_STATUS -EfiConvertInternalPointer ( - IN OUT VOID *Address - ) -/*++ - -Routine Description: - - Call EfiConvertPointer() to convert internal pointer. - -Arguments: - - Address - A pointer to a pointer that is to be fixed to be the value needed - for the new virtual address mappings being applied. - -Returns: - - Status code - ---*/ -{ - return EfiConvertPointer (0x0, Address); -} - -EFI_STATUS -EfiConvertList ( - IN UINTN DebugDisposition, - IN OUT LIST_ENTRY *ListHead - ) -/*++ - -Routine Description: - - Conver the standard Lib double linked list to a virtual mapping. - -Arguments: - - DebugDisposition - Argument to EfiConvertPointer (EFI 1.0 API) - - ListHead - Head of linked list to convert - -Returns: - - EFI_SUCCESS - ---*/ -{ - LIST_ENTRY *Link; - LIST_ENTRY *NextLink; - - // - // Convert all the ForwardLink & BackLink pointers in the list - // - Link = ListHead; - do { - NextLink = Link->ForwardLink; - - EfiConvertPointer ( - Link->ForwardLink == ListHead ? DebugDisposition : 0, - (VOID **) &Link->ForwardLink - ); - - EfiConvertPointer ( - Link->BackLink == ListHead ? DebugDisposition : 0, - (VOID **) &Link->BackLink - ); - - Link = NextLink; - } while (Link != ListHead); - return EFI_SUCCESS; -} - - -/** - Change the runtime addressing mode of EFI firmware from physical to virtual. - - @param MemoryMapSize The size in bytes of VirtualMap. - @param DescriptorSize The size in bytes of an entry in the VirtualMap. - @param DescriptorVersion The version of the structure entries in VirtualMap. - @param VirtualMap An array of memory descriptors which contain new virtual - address mapping information for all runtime ranges. Type - EFI_MEMORY_DESCRIPTOR is defined in the - GetMemoryMap() function description. - - @retval EFI_SUCCESS The virtual address map has been applied. - @retval EFI_UNSUPPORTED EFI firmware is not at runtime, or the EFI firmware is already in - virtual address mapped mode. - @retval EFI_INVALID_PARAMETER DescriptorSize or DescriptorVersion is - invalid. - @retval EFI_NO_MAPPING A virtual address was not supplied for a range in the memory - map that requires a mapping. - @retval EFI_NOT_FOUND A virtual address was supplied for an address that is not found - in the memory map. -**/ -EFI_STATUS -EFIAPI -EfiSetVirtualAddressMap ( - IN UINTN MemoryMapSize, - IN UINTN DescriptorSize, - IN UINT32 DescriptorVersion, - IN CONST EFI_MEMORY_DESCRIPTOR *VirtualMap - ) -{ - return mRT->SetVirtualAddressMap ( - MemoryMapSize, - DescriptorSize, - DescriptorVersion, - (EFI_MEMORY_DESCRIPTOR *) VirtualMap - ); -} - - -EFI_STATUS -EfiUpdateCapsule ( - IN UEFI_CAPSULE_HEADER **CapsuleHeaderArray, - IN UINTN CapsuleCount, - IN EFI_PHYSICAL_ADDRESS ScatterGatherList OPTIONAL - ) -{ -#if (EFI_SPECIFICATION_VERSION >= 0x00020000) - return mRT->UpdateCapsule ( - CapsuleHeaderArray, - CapsuleCount, - ScatterGatherList - ); -#else - return EFI_UNSUPPORTED; -#endif -} - -EFI_STATUS -EfiQueryCapsuleCapabilities ( - IN UEFI_CAPSULE_HEADER **CapsuleHeaderArray, - IN UINTN CapsuleCount, - OUT UINT64 *MaximumCapsuleSize, - OUT EFI_RESET_TYPE *ResetType - ) -{ -#if (EFI_SPECIFICATION_VERSION >= 0x00020000) - return mRT->QueryCapsuleCapabilities ( - CapsuleHeaderArray, - CapsuleCount, - MaximumCapsuleSize, - ResetType - ); -#else - return EFI_UNSUPPORTED; -#endif -} - - -EFI_STATUS -EfiQueryVariableInfo ( - IN UINT32 Attributes, - OUT UINT64 *MaximumVariableStorageSize, - OUT UINT64 *RemainingVariableStorageSize, - OUT UINT64 *MaximumVariableSize - ) -{ -#if (EFI_SPECIFICATION_VERSION >= 0x00020000) - return mRT->QueryVariableInfo ( - Attributes, - MaximumVariableStorageSize, - RemainingVariableStorageSize, - MaximumVariableSize - ); -#else - return EFI_UNSUPPORTED; -#endif -} diff --git a/EdkModulePkg/Library/EdkDxeRuntimeDriverLib/EdkDxeRuntimeDriverLib.msa b/EdkModulePkg/Library/EdkDxeRuntimeDriverLib/EdkDxeRuntimeDriverLib.msa deleted file mode 100644 index ca4792a6a4..0000000000 --- a/EdkModulePkg/Library/EdkDxeRuntimeDriverLib/EdkDxeRuntimeDriverLib.msa +++ /dev/null @@ -1,87 +0,0 @@ - - - - - EdkDxeRuntimeDriverLib - DXE_DRIVER - b1ee6c28-54aa-4d17-b705-3e28ccb27b2e - 1.0 - Runtime driver library - - Instance of runtime driver library, Hook VitualAddressChange and - BooterviceExit event and provide runtime service. - - 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. - FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052 - - - IA32 X64 IPF EBC - false - EdkDxeRuntimeDriverLib - - - - DxeRuntimeDriverLib - - - UefiLib - - - BaseLib - - - DebugLib - - - UefiBootServicesTableLib - - - EdkDxeSalLib - - - - RuntimeLibInternal.h - Common/RuntimeLib.c - Common/RuntimeService.c - Common/RuntimeLib.c - Common/RuntimeService.c - Ipf/RuntimeLib.c - Ipf/RuntimeService.c - - - - - - - - gEfiExtendedSalBootServiceProtocolGuid - - - - EFI_SPECIFICATION_VERSION 0x00020000 - EDK_RELEASE_VERSION 0x00020000 - - RuntimeDriverLibConstruct - RuntimeDriverLibDeconstruct - - - RuntimeDriverLibConstruct - RuntimeDriverLibDeconstruct - - - \ No newline at end of file diff --git a/EdkModulePkg/Library/EdkDxeRuntimeDriverLib/Ipf/RuntimeLib.c b/EdkModulePkg/Library/EdkDxeRuntimeDriverLib/Ipf/RuntimeLib.c deleted file mode 100644 index a4eeb33838..0000000000 --- a/EdkModulePkg/Library/EdkDxeRuntimeDriverLib/Ipf/RuntimeLib.c +++ /dev/null @@ -1,284 +0,0 @@ -/*++ - -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: - - RuntimeLib.c - -Abstract: - - Light weight lib to support Tiano drivers. - ---*/ - -#include -#include - -// -// Driver Lib Module Globals -// - -STATIC EFI_EVENT mRuntimeNotifyEvent; -STATIC EFI_EVENT mEfiVirtualNotifyEvent; - -STATIC EFI_PLABEL mPlabel; -STATIC EXTENDED_SAL_BOOT_SERVICE_PROTOCOL *mEsalBootService; - -EFI_RUNTIME_SERVICES *mRT = NULL; - -STATIC -VOID -EFIAPI -RuntimeDriverExitBootServices ( - IN EFI_EVENT Event, - IN VOID *Context - ) -/*++ - -Routine Description: - - Set AtRuntime flag as TRUE after ExitBootServices - -Arguments: - - Event - The Event that is being processed - - Context - Event Context - -Returns: - - None - ---*/ -{ - EFI_EVENT_NOTIFY ChildNotifyEventHandler; - UINTN Index; - - for (Index = 0; _gDriverExitBootServicesEvent[Index] != NULL; Index++) { - ChildNotifyEventHandler = _gDriverExitBootServicesEvent[Index]; - ChildNotifyEventHandler (Event, NULL); - } -} - -STATIC -VOID -EFIAPI -RuntimeLibVirtualNotifyEvent ( - IN EFI_EVENT Event, - IN VOID *Context - ) -/*++ - -Routine Description: - - Fixup internal data so that EFI can be call in virtual mode. - Call the passed in Child Notify event and convert any pointers in - lib to virtual mode. - -Arguments: - - Event - The Event that is being processed - - Context - Event Context - -Returns: - - None - ---*/ -{ - UINTN Index; - EFI_EVENT_NOTIFY ChildNotifyEventHandler; - - for (Index = 0; _gDriverSetVirtualAddressMapEvent[Index] != NULL; Index++) { - ChildNotifyEventHandler = _gDriverSetVirtualAddressMapEvent[Index]; - ChildNotifyEventHandler (Event, NULL); - } - - mRT->ConvertPointer (0x0, (VOID **) &mPlabel.EntryPoint); - mRT->ConvertPointer (EFI_IPF_GP_POINTER, (VOID **) &mPlabel.GP); - - SetEsalVirtualEntryPoint (mPlabel.EntryPoint, mPlabel.GP); - - // - // Clear out BootService globals - // - gBS = NULL; - gST = NULL; - mRT = NULL; -} - -EFI_STATUS -RuntimeDriverLibConstruct ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable - ) -/*++ - -Routine Description: - - Intialize runtime Driver Lib if it has not yet been initialized. - -Arguments: - - ImageHandle - The firmware allocated handle for the EFI image. - - SystemTable - A pointer to the EFI System Table. - - GoVirtualChildEvent - Caller can register a virtual notification event. - -Returns: - - EFI_STATUS always returns EFI_SUCCESS except EFI_ALREADY_STARTED if already started. - ---*/ -{ - EFI_PLABEL *Plabel; - EFI_STATUS Status; - - mRT = SystemTable->RuntimeServices; - - // - // The protocol contains a function pointer, which is an indirect procedure call. - // An indirect procedure call goes through a plabel, and pointer to a function is - // a pointer to a plabel. To implement indirect procedure calls that can work in - // both physical and virtual mode, two plabels are required (one physical and one - // virtual). So lets grap the physical PLABEL for the EsalEntryPoint and store it - // away. We cache it in a module global, so we can register the vitrual version. - // - Status = gBS->LocateProtocol (&gEfiExtendedSalBootServiceProtocolGuid, NULL, &mEsalBootService); - ASSERT_EFI_ERROR (Status); - - Plabel = (EFI_PLABEL *) (UINTN) mEsalBootService->ExtendedSalProc; - - mPlabel.EntryPoint = Plabel->EntryPoint; - mPlabel.GP = Plabel->GP; - - SetEsalPhysicalEntryPoint (mPlabel.EntryPoint, mPlabel.GP); - - // - // Register our ExitBootServices () notify function - // - - Status = gBS->CreateEvent ( - EFI_EVENT_SIGNAL_EXIT_BOOT_SERVICES, - EFI_TPL_NOTIFY, - RuntimeDriverExitBootServices, - NULL, - &mRuntimeNotifyEvent - ); - ASSERT_EFI_ERROR (Status); - - // - // Register SetVirtualAddressMap () notify function - // - - Status = gBS->CreateEvent ( - EFI_EVENT_SIGNAL_VIRTUAL_ADDRESS_CHANGE, - EFI_TPL_NOTIFY, - RuntimeLibVirtualNotifyEvent, - NULL, - mEfiVirtualNotifyEvent - ); - ASSERT_EFI_ERROR (Status); - - return EFI_SUCCESS; -} - -EFI_STATUS -RuntimeDriverLibDeconstruct ( - VOID - ) -/*++ - -Routine Description: - - This routine will free some resources which have been allocated in - EfiInitializeRuntimeDriverLib(). If a runtime driver exits with an error, - it must call this routine to free the allocated resource before the exiting. - -Arguments: - - None - -Returns: - - EFI_SUCCESS - Shotdown the Runtime Driver Lib successfully - EFI_UNSUPPORTED - Runtime Driver lib was not initialized at all - ---*/ -{ - EFI_STATUS Status; - - // - // Close our ExitBootServices () notify function - // - Status = gBS->CloseEvent (mRuntimeNotifyEvent); - ASSERT_EFI_ERROR (Status); - - // - // Close SetVirtualAddressMap () notify function - // - Status = gBS->CloseEvent (mEfiVirtualNotifyEvent); - ASSERT_EFI_ERROR (Status); - - return EFI_SUCCESS; -} - -BOOLEAN -EfiAtRuntime ( - VOID - ) -/*++ - -Routine Description: - Return TRUE if ExitBootService () has been called - -Arguments: - NONE - -Returns: - TRUE - If ExitBootService () has been called - ---*/ -{ - EFI_GUID Guid = EFI_EXTENDED_SAL_VIRTUAL_SERVICES_PROTOCOL_GUID; - SAL_RETURN_REGS ReturnReg; - - ReturnReg = EfiCallEsalService (&Guid, IsEfiRuntime, 0, 0, 0, 0, 0, 0, 0); - - return (BOOLEAN) (ReturnReg.r9 == 1); -} - -BOOLEAN -EfiGoneVirtual ( - VOID - ) -/*++ - -Routine Description: - Return TRUE if SetVirtualAddressMap () has been called - -Arguments: - NONE - -Returns: - TRUE - If SetVirtualAddressMap () has been called - ---*/ -{ - EFI_GUID Guid = EFI_EXTENDED_SAL_VIRTUAL_SERVICES_PROTOCOL_GUID; - SAL_RETURN_REGS ReturnReg; - - ReturnReg = EfiCallEsalService (&Guid, IsVirtual, 0, 0, 0, 0, 0, 0, 0); - - return (BOOLEAN) (ReturnReg.r9 == 1); -} diff --git a/EdkModulePkg/Library/EdkDxeRuntimeDriverLib/Ipf/RuntimeService.c b/EdkModulePkg/Library/EdkDxeRuntimeDriverLib/Ipf/RuntimeService.c deleted file mode 100644 index bc7a31841b..0000000000 --- a/EdkModulePkg/Library/EdkDxeRuntimeDriverLib/Ipf/RuntimeService.c +++ /dev/null @@ -1,516 +0,0 @@ -/*++ - -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: - - RuntimeService.c - -Abstract: - - Light weight lib to support Tiano drivers. - ---*/ - -#include - -VOID -EfiResetSystem ( - IN EFI_RESET_TYPE ResetType, - IN EFI_STATUS ResetStatus, - IN UINTN DataSize, - IN CHAR16 *ResetData - ) -/*++ - -Routine Description: - - Resets the entire platform. - -Arguments: - - ResetType - The type of reset to perform. - ResetStatus - The status code for the reset. - DataSize - The size, in bytes, of ResetData. - ResetData - A data buffer that includes a Null-terminated Unicode string, optionally - followed by additional binary data. - -Returns: - - None - ---*/ -{ - EFI_GUID Guid = EFI_EXTENDED_SAL_RESET_SERVICES_PROTOCOL_GUID; - - EfiCallEsalService ( - &Guid, - ResetSystem, - (UINT64) ResetType, - (UINT64) ResetStatus, - (UINT64) DataSize, - (UINT64) ResetData, - 0, - 0, - 0 - ); -} - - -// -// The following functions hide the mRT local global from the call to -// runtime service in the EFI system table. -// -EFI_STATUS -EfiGetTime ( - OUT EFI_TIME *Time, - OUT EFI_TIME_CAPABILITIES *Capabilities - ) -/*++ - -Routine Description: - - Returns the current time and date information, and the time-keeping - capabilities of the hardware platform. - -Arguments: - - Time - A pointer to storage to receive a snapshot of the current time. - Capabilities - An optional pointer to a buffer to receive the real time clock device¡¯s - capabilities. - -Returns: - - Status code - ---*/ -{ - SAL_RETURN_REGS ReturnReg; - EFI_GUID Guid = EFI_EXTENDED_SAL_RTC_SERVICES_PROTOCOL_GUID; - - ReturnReg = EfiCallEsalService (&Guid, GetTime, (UINT64) Time, (UINT64) Capabilities, 0, 0, 0, 0, 0); - return ReturnReg.Status; -} - -EFI_STATUS -EfiSetTime ( - IN EFI_TIME *Time - ) -/*++ - -Routine Description: - - Sets the current local time and date information. - -Arguments: - - Time - A pointer to the current time. - -Returns: - - Status code - ---*/ -{ - SAL_RETURN_REGS ReturnReg; - - EFI_GUID Guid = EFI_EXTENDED_SAL_RTC_SERVICES_PROTOCOL_GUID; - - ReturnReg = EfiCallEsalService (&Guid, SetTime, (UINT64) Time, 0, 0, 0, 0, 0, 0); - return ReturnReg.Status; -} - -EFI_STATUS -EfiGetWakeupTime ( - OUT BOOLEAN *Enabled, - OUT BOOLEAN *Pending, - OUT EFI_TIME *Time - ) -/*++ - -Routine Description: - - Returns the current wakeup alarm clock setting. - -Arguments: - - Enabled - Indicates if the alarm is currently enabled or disabled. - Pending - Indicates if the alarm signal is pending and requires acknowledgement. - Time - The current alarm setting. - -Returns: - - Status code - ---*/ -{ - SAL_RETURN_REGS ReturnReg; - - EFI_GUID Guid = EFI_EXTENDED_SAL_RTC_SERVICES_PROTOCOL_GUID; - - ReturnReg = EfiCallEsalService (&Guid, GetWakeupTime, (UINT64) Enabled, (UINT64) Pending, (UINT64) Time, 0, 0, 0, 0); - return ReturnReg.Status; -} - -EFI_STATUS -EfiSetWakeupTime ( - IN BOOLEAN Enable, - IN EFI_TIME *Time - ) -/*++ - -Routine Description: - - Sets the system wakeup alarm clock time. - -Arguments: - - Enable - Enable or disable the wakeup alarm. - Time - If Enable is TRUE, the time to set the wakeup alarm for. - If Enable is FALSE, then this parameter is optional, and may be NULL. - -Returns: - - Status code - ---*/ -{ - SAL_RETURN_REGS ReturnReg; - - EFI_GUID Guid = EFI_EXTENDED_SAL_RTC_SERVICES_PROTOCOL_GUID; - - ReturnReg = EfiCallEsalService (&Guid, SetWakeupTime, (UINT64) Enable, (UINT64) Time, 0, 0, 0, 0, 0); - return ReturnReg.Status; -} - -EFI_STATUS -EfiGetVariable ( - IN CHAR16 *VariableName, - IN EFI_GUID * VendorGuid, - OUT UINT32 *Attributes OPTIONAL, - IN OUT UINTN *DataSize, - OUT VOID *Data - ) -/*++ - -Routine Description: - - Returns the value of a variable. - -Arguments: - - VariableName - A Null-terminated Unicode string that is the name of the - vendor¡¯s variable. - VendorGuid - A unique identifier for the vendor. - Attributes - If not NULL, a pointer to the memory location to return the - attributes bitmask for the variable. - DataSize - On input, the size in bytes of the return Data buffer. - On output the size of data returned in Data. - Data - The buffer to return the contents of the variable. - -Returns: - - Status code - ---*/ -{ - SAL_RETURN_REGS ReturnReg; - EFI_GUID Guid = EFI_EXTENDED_SAL_VARIABLE_SERVICES_PROTOCOL_GUID; - - ReturnReg = EfiCallEsalService ( - &Guid, - EsalGetVariable, - (UINT64) VariableName, - (UINT64) VendorGuid, - (UINT64) Attributes, - (UINT64) DataSize, - (UINT64) Data, - 0, - 0 - ); - return (EFI_STATUS) ReturnReg.Status; -} - -EFI_STATUS -EfiGetNextVariableName ( - IN OUT UINTN *VariableNameSize, - IN OUT CHAR16 *VariableName, - IN OUT EFI_GUID *VendorGuid - ) -/*++ - -Routine Description: - - Enumerates the current variable names. - -Arguments: - - VariableNameSize - The size of the VariableName buffer. - VariableName - On input, supplies the last VariableName that was returned - by GetNextVariableName(). - On output, returns the Nullterminated Unicode string of the - current variable. - VendorGuid - On input, supplies the last VendorGuid that was returned by - GetNextVariableName(). - On output, returns the VendorGuid of the current variable. - -Returns: - - Status code - ---*/ -{ - SAL_RETURN_REGS ReturnReg; - EFI_GUID Guid = EFI_EXTENDED_SAL_VARIABLE_SERVICES_PROTOCOL_GUID; - - ReturnReg = EfiCallEsalService ( - &Guid, - EsalGetNextVariableName, - (UINT64) VariableNameSize, - (UINT64) VariableName, - (UINT64) VendorGuid, - 0, - 0, - 0, - 0 - ); - return (EFI_STATUS) ReturnReg.Status; -} - -EFI_STATUS -EfiSetVariable ( - IN CHAR16 *VariableName, - IN EFI_GUID *VendorGuid, - IN UINT32 Attributes, - IN UINTN DataSize, - IN VOID *Data - ) -/*++ - -Routine Description: - - Sets the value of a variable. - -Arguments: - - VariableName - A Null-terminated Unicode string that is the name of the - vendor¡¯s variable. - VendorGuid - A unique identifier for the vendor. - Attributes - Attributes bitmask to set for the variable. - DataSize - The size in bytes of the Data buffer. - Data - The contents for the variable. - -Returns: - - Status code - ---*/ -{ - SAL_RETURN_REGS ReturnReg; - EFI_GUID Guid = EFI_EXTENDED_SAL_VARIABLE_SERVICES_PROTOCOL_GUID; - - ReturnReg = EfiCallEsalService ( - &Guid, - EsalSetVariable, - (UINT64) VariableName, - (UINT64) VendorGuid, - (UINT64) Attributes, - (UINT64) DataSize, - (UINT64) Data, - 0, - 0 - ); - return (EFI_STATUS) ReturnReg.Status; -} - -EFI_STATUS -EfiGetNextHighMonotonicCount ( - OUT UINT32 *HighCount - ) -/*++ - -Routine Description: - - Returns the next high 32 bits of the platform¡¯s monotonic counter. - -Arguments: - - HighCount - Pointer to returned value. - -Returns: - - Status code - ---*/ -{ - SAL_RETURN_REGS ReturnReg; - - EFI_GUID Guid = EFI_EXTENDED_SAL_MTC_SERVICES_PROTOCOL_GUID; - - ReturnReg = EfiCallEsalService (&Guid, GetNextHighMonotonicCount, (UINT64) HighCount, 0, 0, 0, 0, 0, 0); - return (EFI_STATUS) ReturnReg.Status; -} - -EFI_STATUS -EfiConvertPointer ( - IN UINTN DebugDisposition, - IN OUT VOID *Address - ) -/*++ - -Routine Description: - - Determines the new virtual address that is to be used on subsequent memory accesses. - -Arguments: - - DebugDisposition - Supplies type information for the pointer being converted. - Address - A pointer to a pointer that is to be fixed to be the value needed - for the new virtual address mappings being applied. - -Returns: - - Status code - ---*/ -{ - return mRT->ConvertPointer (DebugDisposition, Address); -} - -EFI_STATUS -EfiConvertList ( - IN UINTN DebugDisposition, - IN OUT LIST_ENTRY *ListHead - ) -/*++ - -Routine Description: - - Conver the standard Lib double linked list to a virtual mapping. - -Arguments: - - DebugDisposition - Argument to EfiConvertPointer (EFI 1.0 API) - - ListHead - Head of linked list to convert - -Returns: - - EFI_SUCCESS - ---*/ -{ - LIST_ENTRY *Link; - LIST_ENTRY *NextLink; - - // - // Convert all the ForwardLink & BackLink pointers in the list - // - Link = ListHead; - do { - NextLink = Link->ForwardLink; - - EfiConvertPointer ( - Link->ForwardLink == ListHead ? DebugDisposition : 0, - (VOID **) &Link->ForwardLink - ); - - EfiConvertPointer ( - Link->BackLink == ListHead ? DebugDisposition : 0, - (VOID **) &Link->BackLink - ); - - Link = NextLink; - } while (Link != ListHead); - return EFI_SUCCESS; -} - - -/** - Change the runtime addressing mode of EFI firmware from physical to virtual. - - @param MemoryMapSize The size in bytes of VirtualMap. - @param DescriptorSize The size in bytes of an entry in the VirtualMap. - @param DescriptorVersion The version of the structure entries in VirtualMap. - @param VirtualMap An array of memory descriptors which contain new virtual - address mapping information for all runtime ranges. Type - EFI_MEMORY_DESCRIPTOR is defined in the - GetMemoryMap() function description. - - @retval EFI_SUCCESS The virtual address map has been applied. - @retval EFI_UNSUPPORTED EFI firmware is not at runtime, or the EFI firmware is already in - virtual address mapped mode. - @retval EFI_INVALID_PARAMETER DescriptorSize or DescriptorVersion is - invalid. - @retval EFI_NO_MAPPING A virtual address was not supplied for a range in the memory - map that requires a mapping. - @retval EFI_NOT_FOUND A virtual address was supplied for an address that is not found - in the memory map. -**/ -EFI_STATUS -EFIAPI -EfiSetVirtualAddressMap ( - IN UINTN MemoryMapSize, - IN UINTN DescriptorSize, - IN UINT32 DescriptorVersion, - IN CONST EFI_MEMORY_DESCRIPTOR *VirtualMap - ) -{ - SAL_RETURN_REGS ReturnReg; - EFI_GUID Guid = EFI_EXTENDED_SAL_VIRTUAL_SERVICES_PROTOCOL_GUID; - - ReturnReg = EfiCallEsalService ( - &Guid, - SetVirtualAddress, - (UINT64) MemoryMapSize, - (UINT64) DescriptorSize, - (UINT64) DescriptorVersion, - (UINT64) VirtualMap, - 0, - 0, - 0 - ); - - return ReturnReg.Status; -} - - -EFI_STATUS -EfiUpdateCapsule ( - IN UEFI_CAPSULE_HEADER **CapsuleHeaderArray, - IN UINTN CapsuleCount, - IN EFI_PHYSICAL_ADDRESS ScatterGatherList OPTIONAL - ) -{ - return EFI_UNSUPPORTED; -} - -EFI_STATUS -EfiQueryCapsuleCapabilities ( - IN UEFI_CAPSULE_HEADER **CapsuleHeaderArray, - IN UINTN CapsuleCount, - OUT UINT64 *MaximumCapsuleSize, - OUT EFI_RESET_TYPE *ResetType - ) -{ - return EFI_UNSUPPORTED; -} - - -EFI_STATUS -EfiQueryVariableInfo ( - IN UINT32 Attributes, - OUT UINT64 *MaximumVariableStorageSize, - OUT UINT64 *RemainingVariableStorageSize, - OUT UINT64 *MaximumVariableSize - ) -{ - return EFI_UNSUPPORTED; -} diff --git a/EdkModulePkg/Library/EdkDxeRuntimeDriverLib/RuntimeLibInternal.h b/EdkModulePkg/Library/EdkDxeRuntimeDriverLib/RuntimeLibInternal.h deleted file mode 100644 index 82494fd7a0..0000000000 --- a/EdkModulePkg/Library/EdkDxeRuntimeDriverLib/RuntimeLibInternal.h +++ /dev/null @@ -1,30 +0,0 @@ -/*++ - -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: - - RuntimeLibInternal.h - -Abstract: - ---*/ - -#ifndef __RUNTIMELIBINTERNAL_H__ -#define __RUNTIMELIBINTERNAL_H__ - -EFI_STATUS -EfiConvertInternalPointer ( - IN OUT VOID *Address - ); - -extern EFI_RUNTIME_SERVICES *mRT; - -#endif //__RUNTIMELIBINTERNAL_H__ diff --git a/EdkModulePkg/Library/EdkFvbServiceLib/EdkFvbServiceLib.msa b/EdkModulePkg/Library/EdkFvbServiceLib/EdkFvbServiceLib.msa index b154db1dfc..c13949be87 100644 --- a/EdkModulePkg/Library/EdkFvbServiceLib/EdkFvbServiceLib.msa +++ b/EdkModulePkg/Library/EdkFvbServiceLib/EdkFvbServiceLib.msa @@ -54,7 +54,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. BaseMemoryLib - DxeRuntimeDriverLib + UefiRuntimeLib UefiBootServicesTableLib diff --git a/EdkModulePkg/Library/EdkRuntimeStatusCodeLib/BsDataHubStatusCode/BsDataHubStatusCode.msa b/EdkModulePkg/Library/EdkRuntimeStatusCodeLib/BsDataHubStatusCode/BsDataHubStatusCode.msa index 5d3a78d284..af8f5f74af 100644 --- a/EdkModulePkg/Library/EdkRuntimeStatusCodeLib/BsDataHubStatusCode/BsDataHubStatusCode.msa +++ b/EdkModulePkg/Library/EdkRuntimeStatusCodeLib/BsDataHubStatusCode/BsDataHubStatusCode.msa @@ -48,7 +48,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. BaseMemoryLib - DxeRuntimeDriverLib + UefiRuntimeLib ReportStatusCodeLib diff --git a/EdkModulePkg/Library/EdkRuntimeStatusCodeLib/RtMemoryStatusCode/RtMemoryStatusCode.msa b/EdkModulePkg/Library/EdkRuntimeStatusCodeLib/RtMemoryStatusCode/RtMemoryStatusCode.msa index dd3519c8e6..1e03e7fa5e 100644 --- a/EdkModulePkg/Library/EdkRuntimeStatusCodeLib/RtMemoryStatusCode/RtMemoryStatusCode.msa +++ b/EdkModulePkg/Library/EdkRuntimeStatusCodeLib/RtMemoryStatusCode/RtMemoryStatusCode.msa @@ -45,7 +45,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. BaseLib - DxeRuntimeDriverLib + UefiRuntimeLib ReportStatusCodeLib diff --git a/EdkModulePkg/Library/EdkRuntimeStatusCodeLib/RtPlatformStatusCode/RtPlatformStatusCode.msa b/EdkModulePkg/Library/EdkRuntimeStatusCodeLib/RtPlatformStatusCode/RtPlatformStatusCode.msa index cf4899e56b..ac408a8ba7 100644 --- a/EdkModulePkg/Library/EdkRuntimeStatusCodeLib/RtPlatformStatusCode/RtPlatformStatusCode.msa +++ b/EdkModulePkg/Library/EdkRuntimeStatusCodeLib/RtPlatformStatusCode/RtPlatformStatusCode.msa @@ -45,7 +45,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. BaseLib - DxeRuntimeDriverLib + UefiRuntimeLib ReportStatusCodeLib diff --git a/EdkModulePkg/Library/EdkUefiRuntimeLib/Common/RuntimeLib.c b/EdkModulePkg/Library/EdkUefiRuntimeLib/Common/RuntimeLib.c new file mode 100644 index 0000000000..adddf933e2 --- /dev/null +++ b/EdkModulePkg/Library/EdkUefiRuntimeLib/Common/RuntimeLib.c @@ -0,0 +1,258 @@ +/*++ + +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: + + RuntimeLib.c + +Abstract: + + Light weight lib to support Tiano drivers. + +--*/ + +#include + +// +// Driver Lib Module Globals +// +STATIC EFI_EVENT mRuntimeNotifyEvent; +STATIC EFI_EVENT mEfiVirtualNotifyEvent; +STATIC BOOLEAN mEfiGoneVirtual = FALSE; +STATIC BOOLEAN mEfiAtRuntime = FALSE; + +EFI_RUNTIME_SERVICES *mRT = NULL; + +VOID +EFIAPI +RuntimeDriverExitBootServices ( + IN EFI_EVENT Event, + IN VOID *Context + ) +/*++ + +Routine Description: + + Set AtRuntime flag as TRUE after ExitBootServices + +Arguments: + + Event - The Event that is being processed + + Context - Event Context + +Returns: + + None + +--*/ +{ + EFI_EVENT_NOTIFY ChildNotifyEventHandler; + UINTN Index; + + for (Index = 0; + _gDriverExitBootServicesEvent[Index] != NULL; + Index++) { + ChildNotifyEventHandler = _gDriverExitBootServicesEvent[Index]; + ChildNotifyEventHandler (Event, NULL); + } + + mEfiAtRuntime = TRUE; +} + +STATIC +VOID +EFIAPI +RuntimeLibVirtualNotifyEvent ( + IN EFI_EVENT Event, + IN VOID *Context + ) +/*++ + +Routine Description: + + Fixup internal data so that EFI can be call in virtual mode. + Call the passed in Child Notify event and convert any pointers in + lib to virtual mode. + +Arguments: + + Event - The Event that is being processed + + Context - Event Context + +Returns: + + None + +--*/ +{ + UINTN Index; + EFI_EVENT_NOTIFY ChildNotifyEventHandler; + + for (Index = 0; + _gDriverSetVirtualAddressMapEvent[Index] != NULL; + Index++) { + ChildNotifyEventHandler = _gDriverSetVirtualAddressMapEvent[Index]; + ChildNotifyEventHandler (Event, NULL); + } + + // + // Update global for Runtime Services Table and IO + // + EfiConvertInternalPointer ((VOID **) &mRT); + + // + // Clear out BootService globals + // + gBS = NULL; + gST = NULL; + mEfiGoneVirtual = TRUE; +} + +EFI_STATUS +RuntimeDriverLibConstruct ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +/*++ + +Routine Description: + + Intialize runtime Driver Lib if it has not yet been initialized. + +Arguments: + + ImageHandle - The firmware allocated handle for the EFI image. + + SystemTable - A pointer to the EFI System Table. + + GoVirtualChildEvent - Caller can register a virtual notification event. + +Returns: + + EFI_STATUS always returns EFI_SUCCESS except EFI_ALREADY_STARTED if already started. + +--*/ +{ + EFI_STATUS Status; + + mRT = SystemTable->RuntimeServices; + + // + // Register our ExitBootServices () notify function + // + Status = gBS->CreateEvent ( + EFI_EVENT_SIGNAL_EXIT_BOOT_SERVICES, + EFI_TPL_NOTIFY, + RuntimeDriverExitBootServices, + NULL, + &mRuntimeNotifyEvent + ); + + ASSERT_EFI_ERROR (Status); + + // + // Register SetVirtualAddressMap () notify function + // + Status = gBS->CreateEvent ( + EFI_EVENT_SIGNAL_VIRTUAL_ADDRESS_CHANGE, + EFI_TPL_NOTIFY, + RuntimeLibVirtualNotifyEvent, + NULL, + &mEfiVirtualNotifyEvent + ); + + ASSERT_EFI_ERROR (Status); + + return EFI_SUCCESS; +} + +EFI_STATUS +RuntimeDriverLibDeconstruct ( + VOID + ) +/*++ + +Routine Description: + + This routine will free some resources which have been allocated in + EfiInitializeRuntimeDriverLib(). If a runtime driver exits with an error, + it must call this routine to free the allocated resource before the exiting. + +Arguments: + + None + +Returns: + + EFI_SUCCESS - Shotdown the Runtime Driver Lib successfully + EFI_UNSUPPORTED - Runtime Driver lib was not initialized at all + +--*/ +{ + EFI_STATUS Status; + + // + // Close our ExitBootServices () notify function + // + Status = gBS->CloseEvent (mRuntimeNotifyEvent); + ASSERT_EFI_ERROR (Status); + + // + // Close SetVirtualAddressMap () notify function + // + Status = gBS->CloseEvent (mEfiVirtualNotifyEvent); + ASSERT_EFI_ERROR (Status); + + return EFI_SUCCESS; +} + +BOOLEAN +EfiAtRuntime ( + VOID + ) +/*++ + +Routine Description: + Return TRUE if ExitBootServices () has been called + +Arguments: + NONE + +Returns: + TRUE - If ExitBootServices () has been called + +--*/ +{ + return mEfiAtRuntime; +} + +BOOLEAN +EfiGoneVirtual ( + VOID + ) +/*++ + +Routine Description: + Return TRUE if SetVirtualAddressMap () has been called + +Arguments: + NONE + +Returns: + TRUE - If SetVirtualAddressMap () has been called + +--*/ +{ + return mEfiGoneVirtual; +} + diff --git a/EdkModulePkg/Library/EdkUefiRuntimeLib/Common/RuntimeService.c b/EdkModulePkg/Library/EdkUefiRuntimeLib/Common/RuntimeService.c new file mode 100644 index 0000000000..971dcdbf89 --- /dev/null +++ b/EdkModulePkg/Library/EdkUefiRuntimeLib/Common/RuntimeService.c @@ -0,0 +1,480 @@ +/*++ + +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: + + RuntimeService.c + +Abstract: + + Light weight lib to support Tiano drivers. + +--*/ + +#include + +VOID +EfiResetSystem ( + IN EFI_RESET_TYPE ResetType, + IN EFI_STATUS ResetStatus, + IN UINTN DataSize, + IN CHAR16 *ResetData + ) +/*++ + +Routine Description: + + Resets the entire platform. + +Arguments: + + ResetType - The type of reset to perform. + ResetStatus - The status code for the reset. + DataSize - The size, in bytes, of ResetData. + ResetData - A data buffer that includes a Null-terminated Unicode string, optionally + followed by additional binary data. + +Returns: + + None + +--*/ +{ + mRT->ResetSystem (ResetType, ResetStatus, DataSize, ResetData); +} + +// +// The following functions hide the mRT local global from the call to +// runtime service in the EFI system table. +// +EFI_STATUS +EfiGetTime ( + OUT EFI_TIME *Time, + OUT EFI_TIME_CAPABILITIES *Capabilities + ) +/*++ + +Routine Description: + + Returns the current time and date information, and the time-keeping + capabilities of the hardware platform. + +Arguments: + + Time - A pointer to storage to receive a snapshot of the current time. + Capabilities - An optional pointer to a buffer to receive the real time clock device¡¯s + capabilities. + +Returns: + + Status code + +--*/ +{ + return mRT->GetTime (Time, Capabilities); +} + +EFI_STATUS +EfiSetTime ( + IN EFI_TIME *Time + ) +/*++ + +Routine Description: + + Sets the current local time and date information. + +Arguments: + + Time - A pointer to the current time. + +Returns: + + Status code + +--*/ +{ + return mRT->SetTime (Time); +} + +EFI_STATUS +EfiGetWakeupTime ( + OUT BOOLEAN *Enabled, + OUT BOOLEAN *Pending, + OUT EFI_TIME *Time + ) +/*++ + +Routine Description: + + Returns the current wakeup alarm clock setting. + +Arguments: + + Enabled - Indicates if the alarm is currently enabled or disabled. + Pending - Indicates if the alarm signal is pending and requires acknowledgement. + Time - The current alarm setting. + +Returns: + + Status code + +--*/ +{ + return mRT->GetWakeupTime (Enabled, Pending, Time); +} + +EFI_STATUS +EfiSetWakeupTime ( + IN BOOLEAN Enable, + IN EFI_TIME *Time + ) +/*++ + +Routine Description: + + Sets the system wakeup alarm clock time. + +Arguments: + + Enable - Enable or disable the wakeup alarm. + Time - If Enable is TRUE, the time to set the wakeup alarm for. + If Enable is FALSE, then this parameter is optional, and may be NULL. + +Returns: + + Status code + +--*/ +{ + return mRT->SetWakeupTime (Enable, Time); +} + + + + +EFI_STATUS +EfiGetVariable ( + IN CHAR16 *VariableName, + IN EFI_GUID * VendorGuid, + OUT UINT32 *Attributes OPTIONAL, + IN OUT UINTN *DataSize, + OUT VOID *Data + ) +/*++ + +Routine Description: + + Returns the value of a variable. + +Arguments: + + VariableName - A Null-terminated Unicode string that is the name of the + vendor¡¯s variable. + VendorGuid - A unique identifier for the vendor. + Attributes - If not NULL, a pointer to the memory location to return the + attributes bitmask for the variable. + DataSize - On input, the size in bytes of the return Data buffer. + On output the size of data returned in Data. + Data - The buffer to return the contents of the variable. + +Returns: + + Status code + +--*/ +{ + return mRT->GetVariable (VariableName, VendorGuid, Attributes, DataSize, Data); +} + +EFI_STATUS +EfiGetNextVariableName ( + IN OUT UINTN *VariableNameSize, + IN OUT CHAR16 *VariableName, + IN OUT EFI_GUID *VendorGuid + ) +/*++ + +Routine Description: + + Enumerates the current variable names. + +Arguments: + + VariableNameSize - The size of the VariableName buffer. + VariableName - On input, supplies the last VariableName that was returned + by GetNextVariableName(). + On output, returns the Nullterminated Unicode string of the + current variable. + VendorGuid - On input, supplies the last VendorGuid that was returned by + GetNextVariableName(). + On output, returns the VendorGuid of the current variable. + +Returns: + + Status code + +--*/ +{ + return mRT->GetNextVariableName (VariableNameSize, VariableName, VendorGuid); +} + +EFI_STATUS +EfiSetVariable ( + IN CHAR16 *VariableName, + IN EFI_GUID *VendorGuid, + IN UINT32 Attributes, + IN UINTN DataSize, + IN VOID *Data + ) +/*++ + +Routine Description: + + Sets the value of a variable. + +Arguments: + + VariableName - A Null-terminated Unicode string that is the name of the + vendor¡¯s variable. + VendorGuid - A unique identifier for the vendor. + Attributes - Attributes bitmask to set for the variable. + DataSize - The size in bytes of the Data buffer. + Data - The contents for the variable. + +Returns: + + Status code + +--*/ +{ + return mRT->SetVariable (VariableName, VendorGuid, Attributes, DataSize, Data); +} + +EFI_STATUS +EfiGetNextHighMonotonicCount ( + OUT UINT32 *HighCount + ) +/*++ + +Routine Description: + + Returns the next high 32 bits of the platform¡¯s monotonic counter. + +Arguments: + + HighCount - Pointer to returned value. + +Returns: + + Status code + +--*/ +{ + return mRT->GetNextHighMonotonicCount (HighCount); +} + +EFI_STATUS +EfiConvertPointer ( + IN UINTN DebugDisposition, + IN OUT VOID *Address + ) +/*++ + +Routine Description: + + Determines the new virtual address that is to be used on subsequent memory accesses. + +Arguments: + + DebugDisposition - Supplies type information for the pointer being converted. + Address - A pointer to a pointer that is to be fixed to be the value needed + for the new virtual address mappings being applied. + +Returns: + + Status code + +--*/ +{ + return mRT->ConvertPointer (DebugDisposition, Address); +} + +EFI_STATUS +EfiConvertInternalPointer ( + IN OUT VOID *Address + ) +/*++ + +Routine Description: + + Call EfiConvertPointer() to convert internal pointer. + +Arguments: + + Address - A pointer to a pointer that is to be fixed to be the value needed + for the new virtual address mappings being applied. + +Returns: + + Status code + +--*/ +{ + return EfiConvertPointer (0x0, Address); +} + +EFI_STATUS +EfiConvertList ( + IN UINTN DebugDisposition, + IN OUT LIST_ENTRY *ListHead + ) +/*++ + +Routine Description: + + Conver the standard Lib double linked list to a virtual mapping. + +Arguments: + + DebugDisposition - Argument to EfiConvertPointer (EFI 1.0 API) + + ListHead - Head of linked list to convert + +Returns: + + EFI_SUCCESS + +--*/ +{ + LIST_ENTRY *Link; + LIST_ENTRY *NextLink; + + // + // Convert all the ForwardLink & BackLink pointers in the list + // + Link = ListHead; + do { + NextLink = Link->ForwardLink; + + EfiConvertPointer ( + Link->ForwardLink == ListHead ? DebugDisposition : 0, + (VOID **) &Link->ForwardLink + ); + + EfiConvertPointer ( + Link->BackLink == ListHead ? DebugDisposition : 0, + (VOID **) &Link->BackLink + ); + + Link = NextLink; + } while (Link != ListHead); + return EFI_SUCCESS; +} + + +/** + Change the runtime addressing mode of EFI firmware from physical to virtual. + + @param MemoryMapSize The size in bytes of VirtualMap. + @param DescriptorSize The size in bytes of an entry in the VirtualMap. + @param DescriptorVersion The version of the structure entries in VirtualMap. + @param VirtualMap An array of memory descriptors which contain new virtual + address mapping information for all runtime ranges. Type + EFI_MEMORY_DESCRIPTOR is defined in the + GetMemoryMap() function description. + + @retval EFI_SUCCESS The virtual address map has been applied. + @retval EFI_UNSUPPORTED EFI firmware is not at runtime, or the EFI firmware is already in + virtual address mapped mode. + @retval EFI_INVALID_PARAMETER DescriptorSize or DescriptorVersion is + invalid. + @retval EFI_NO_MAPPING A virtual address was not supplied for a range in the memory + map that requires a mapping. + @retval EFI_NOT_FOUND A virtual address was supplied for an address that is not found + in the memory map. +**/ +EFI_STATUS +EFIAPI +EfiSetVirtualAddressMap ( + IN UINTN MemoryMapSize, + IN UINTN DescriptorSize, + IN UINT32 DescriptorVersion, + IN CONST EFI_MEMORY_DESCRIPTOR *VirtualMap + ) +{ + return mRT->SetVirtualAddressMap ( + MemoryMapSize, + DescriptorSize, + DescriptorVersion, + (EFI_MEMORY_DESCRIPTOR *) VirtualMap + ); +} + + +EFI_STATUS +EfiUpdateCapsule ( + IN UEFI_CAPSULE_HEADER **CapsuleHeaderArray, + IN UINTN CapsuleCount, + IN EFI_PHYSICAL_ADDRESS ScatterGatherList OPTIONAL + ) +{ +#if (EFI_SPECIFICATION_VERSION >= 0x00020000) + return mRT->UpdateCapsule ( + CapsuleHeaderArray, + CapsuleCount, + ScatterGatherList + ); +#else + return EFI_UNSUPPORTED; +#endif +} + +EFI_STATUS +EfiQueryCapsuleCapabilities ( + IN UEFI_CAPSULE_HEADER **CapsuleHeaderArray, + IN UINTN CapsuleCount, + OUT UINT64 *MaximumCapsuleSize, + OUT EFI_RESET_TYPE *ResetType + ) +{ +#if (EFI_SPECIFICATION_VERSION >= 0x00020000) + return mRT->QueryCapsuleCapabilities ( + CapsuleHeaderArray, + CapsuleCount, + MaximumCapsuleSize, + ResetType + ); +#else + return EFI_UNSUPPORTED; +#endif +} + + +EFI_STATUS +EfiQueryVariableInfo ( + IN UINT32 Attributes, + OUT UINT64 *MaximumVariableStorageSize, + OUT UINT64 *RemainingVariableStorageSize, + OUT UINT64 *MaximumVariableSize + ) +{ +#if (EFI_SPECIFICATION_VERSION >= 0x00020000) + return mRT->QueryVariableInfo ( + Attributes, + MaximumVariableStorageSize, + RemainingVariableStorageSize, + MaximumVariableSize + ); +#else + return EFI_UNSUPPORTED; +#endif +} diff --git a/EdkModulePkg/Library/EdkUefiRuntimeLib/EdkUefiRuntimeLib.msa b/EdkModulePkg/Library/EdkUefiRuntimeLib/EdkUefiRuntimeLib.msa new file mode 100644 index 0000000000..7a11c0e1a8 --- /dev/null +++ b/EdkModulePkg/Library/EdkUefiRuntimeLib/EdkUefiRuntimeLib.msa @@ -0,0 +1,87 @@ + + + + + EdkUefiRuntimeLib + DXE_DRIVER + b1ee6c28-54aa-4d17-b705-3e28ccb27b2e + 1.0 + Runtime driver library + + Instance of runtime driver library, Hook VitualAddressChange and + BooterviceExit event and provide runtime service. + + 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. + FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052 + + + IA32 X64 IPF EBC + false + EdkUefiRuntimeLib + + + + UefiRuntimeLib + + + UefiLib + + + BaseLib + + + DebugLib + + + UefiBootServicesTableLib + + + EdkDxeSalLib + + + + RuntimeLibInternal.h + Common/RuntimeLib.c + Common/RuntimeService.c + Common/RuntimeLib.c + Common/RuntimeService.c + Ipf/RuntimeLib.c + Ipf/RuntimeService.c + + + + + + + + gEfiExtendedSalBootServiceProtocolGuid + + + + EFI_SPECIFICATION_VERSION 0x00020000 + EDK_RELEASE_VERSION 0x00020000 + + RuntimeDriverLibConstruct + RuntimeDriverLibDeconstruct + + + RuntimeDriverLibConstruct + RuntimeDriverLibDeconstruct + + + \ No newline at end of file diff --git a/EdkModulePkg/Library/EdkUefiRuntimeLib/Ipf/RuntimeLib.c b/EdkModulePkg/Library/EdkUefiRuntimeLib/Ipf/RuntimeLib.c new file mode 100644 index 0000000000..a4eeb33838 --- /dev/null +++ b/EdkModulePkg/Library/EdkUefiRuntimeLib/Ipf/RuntimeLib.c @@ -0,0 +1,284 @@ +/*++ + +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: + + RuntimeLib.c + +Abstract: + + Light weight lib to support Tiano drivers. + +--*/ + +#include +#include + +// +// Driver Lib Module Globals +// + +STATIC EFI_EVENT mRuntimeNotifyEvent; +STATIC EFI_EVENT mEfiVirtualNotifyEvent; + +STATIC EFI_PLABEL mPlabel; +STATIC EXTENDED_SAL_BOOT_SERVICE_PROTOCOL *mEsalBootService; + +EFI_RUNTIME_SERVICES *mRT = NULL; + +STATIC +VOID +EFIAPI +RuntimeDriverExitBootServices ( + IN EFI_EVENT Event, + IN VOID *Context + ) +/*++ + +Routine Description: + + Set AtRuntime flag as TRUE after ExitBootServices + +Arguments: + + Event - The Event that is being processed + + Context - Event Context + +Returns: + + None + +--*/ +{ + EFI_EVENT_NOTIFY ChildNotifyEventHandler; + UINTN Index; + + for (Index = 0; _gDriverExitBootServicesEvent[Index] != NULL; Index++) { + ChildNotifyEventHandler = _gDriverExitBootServicesEvent[Index]; + ChildNotifyEventHandler (Event, NULL); + } +} + +STATIC +VOID +EFIAPI +RuntimeLibVirtualNotifyEvent ( + IN EFI_EVENT Event, + IN VOID *Context + ) +/*++ + +Routine Description: + + Fixup internal data so that EFI can be call in virtual mode. + Call the passed in Child Notify event and convert any pointers in + lib to virtual mode. + +Arguments: + + Event - The Event that is being processed + + Context - Event Context + +Returns: + + None + +--*/ +{ + UINTN Index; + EFI_EVENT_NOTIFY ChildNotifyEventHandler; + + for (Index = 0; _gDriverSetVirtualAddressMapEvent[Index] != NULL; Index++) { + ChildNotifyEventHandler = _gDriverSetVirtualAddressMapEvent[Index]; + ChildNotifyEventHandler (Event, NULL); + } + + mRT->ConvertPointer (0x0, (VOID **) &mPlabel.EntryPoint); + mRT->ConvertPointer (EFI_IPF_GP_POINTER, (VOID **) &mPlabel.GP); + + SetEsalVirtualEntryPoint (mPlabel.EntryPoint, mPlabel.GP); + + // + // Clear out BootService globals + // + gBS = NULL; + gST = NULL; + mRT = NULL; +} + +EFI_STATUS +RuntimeDriverLibConstruct ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +/*++ + +Routine Description: + + Intialize runtime Driver Lib if it has not yet been initialized. + +Arguments: + + ImageHandle - The firmware allocated handle for the EFI image. + + SystemTable - A pointer to the EFI System Table. + + GoVirtualChildEvent - Caller can register a virtual notification event. + +Returns: + + EFI_STATUS always returns EFI_SUCCESS except EFI_ALREADY_STARTED if already started. + +--*/ +{ + EFI_PLABEL *Plabel; + EFI_STATUS Status; + + mRT = SystemTable->RuntimeServices; + + // + // The protocol contains a function pointer, which is an indirect procedure call. + // An indirect procedure call goes through a plabel, and pointer to a function is + // a pointer to a plabel. To implement indirect procedure calls that can work in + // both physical and virtual mode, two plabels are required (one physical and one + // virtual). So lets grap the physical PLABEL for the EsalEntryPoint and store it + // away. We cache it in a module global, so we can register the vitrual version. + // + Status = gBS->LocateProtocol (&gEfiExtendedSalBootServiceProtocolGuid, NULL, &mEsalBootService); + ASSERT_EFI_ERROR (Status); + + Plabel = (EFI_PLABEL *) (UINTN) mEsalBootService->ExtendedSalProc; + + mPlabel.EntryPoint = Plabel->EntryPoint; + mPlabel.GP = Plabel->GP; + + SetEsalPhysicalEntryPoint (mPlabel.EntryPoint, mPlabel.GP); + + // + // Register our ExitBootServices () notify function + // + + Status = gBS->CreateEvent ( + EFI_EVENT_SIGNAL_EXIT_BOOT_SERVICES, + EFI_TPL_NOTIFY, + RuntimeDriverExitBootServices, + NULL, + &mRuntimeNotifyEvent + ); + ASSERT_EFI_ERROR (Status); + + // + // Register SetVirtualAddressMap () notify function + // + + Status = gBS->CreateEvent ( + EFI_EVENT_SIGNAL_VIRTUAL_ADDRESS_CHANGE, + EFI_TPL_NOTIFY, + RuntimeLibVirtualNotifyEvent, + NULL, + mEfiVirtualNotifyEvent + ); + ASSERT_EFI_ERROR (Status); + + return EFI_SUCCESS; +} + +EFI_STATUS +RuntimeDriverLibDeconstruct ( + VOID + ) +/*++ + +Routine Description: + + This routine will free some resources which have been allocated in + EfiInitializeRuntimeDriverLib(). If a runtime driver exits with an error, + it must call this routine to free the allocated resource before the exiting. + +Arguments: + + None + +Returns: + + EFI_SUCCESS - Shotdown the Runtime Driver Lib successfully + EFI_UNSUPPORTED - Runtime Driver lib was not initialized at all + +--*/ +{ + EFI_STATUS Status; + + // + // Close our ExitBootServices () notify function + // + Status = gBS->CloseEvent (mRuntimeNotifyEvent); + ASSERT_EFI_ERROR (Status); + + // + // Close SetVirtualAddressMap () notify function + // + Status = gBS->CloseEvent (mEfiVirtualNotifyEvent); + ASSERT_EFI_ERROR (Status); + + return EFI_SUCCESS; +} + +BOOLEAN +EfiAtRuntime ( + VOID + ) +/*++ + +Routine Description: + Return TRUE if ExitBootService () has been called + +Arguments: + NONE + +Returns: + TRUE - If ExitBootService () has been called + +--*/ +{ + EFI_GUID Guid = EFI_EXTENDED_SAL_VIRTUAL_SERVICES_PROTOCOL_GUID; + SAL_RETURN_REGS ReturnReg; + + ReturnReg = EfiCallEsalService (&Guid, IsEfiRuntime, 0, 0, 0, 0, 0, 0, 0); + + return (BOOLEAN) (ReturnReg.r9 == 1); +} + +BOOLEAN +EfiGoneVirtual ( + VOID + ) +/*++ + +Routine Description: + Return TRUE if SetVirtualAddressMap () has been called + +Arguments: + NONE + +Returns: + TRUE - If SetVirtualAddressMap () has been called + +--*/ +{ + EFI_GUID Guid = EFI_EXTENDED_SAL_VIRTUAL_SERVICES_PROTOCOL_GUID; + SAL_RETURN_REGS ReturnReg; + + ReturnReg = EfiCallEsalService (&Guid, IsVirtual, 0, 0, 0, 0, 0, 0, 0); + + return (BOOLEAN) (ReturnReg.r9 == 1); +} diff --git a/EdkModulePkg/Library/EdkUefiRuntimeLib/Ipf/RuntimeService.c b/EdkModulePkg/Library/EdkUefiRuntimeLib/Ipf/RuntimeService.c new file mode 100644 index 0000000000..bc7a31841b --- /dev/null +++ b/EdkModulePkg/Library/EdkUefiRuntimeLib/Ipf/RuntimeService.c @@ -0,0 +1,516 @@ +/*++ + +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: + + RuntimeService.c + +Abstract: + + Light weight lib to support Tiano drivers. + +--*/ + +#include + +VOID +EfiResetSystem ( + IN EFI_RESET_TYPE ResetType, + IN EFI_STATUS ResetStatus, + IN UINTN DataSize, + IN CHAR16 *ResetData + ) +/*++ + +Routine Description: + + Resets the entire platform. + +Arguments: + + ResetType - The type of reset to perform. + ResetStatus - The status code for the reset. + DataSize - The size, in bytes, of ResetData. + ResetData - A data buffer that includes a Null-terminated Unicode string, optionally + followed by additional binary data. + +Returns: + + None + +--*/ +{ + EFI_GUID Guid = EFI_EXTENDED_SAL_RESET_SERVICES_PROTOCOL_GUID; + + EfiCallEsalService ( + &Guid, + ResetSystem, + (UINT64) ResetType, + (UINT64) ResetStatus, + (UINT64) DataSize, + (UINT64) ResetData, + 0, + 0, + 0 + ); +} + + +// +// The following functions hide the mRT local global from the call to +// runtime service in the EFI system table. +// +EFI_STATUS +EfiGetTime ( + OUT EFI_TIME *Time, + OUT EFI_TIME_CAPABILITIES *Capabilities + ) +/*++ + +Routine Description: + + Returns the current time and date information, and the time-keeping + capabilities of the hardware platform. + +Arguments: + + Time - A pointer to storage to receive a snapshot of the current time. + Capabilities - An optional pointer to a buffer to receive the real time clock device¡¯s + capabilities. + +Returns: + + Status code + +--*/ +{ + SAL_RETURN_REGS ReturnReg; + EFI_GUID Guid = EFI_EXTENDED_SAL_RTC_SERVICES_PROTOCOL_GUID; + + ReturnReg = EfiCallEsalService (&Guid, GetTime, (UINT64) Time, (UINT64) Capabilities, 0, 0, 0, 0, 0); + return ReturnReg.Status; +} + +EFI_STATUS +EfiSetTime ( + IN EFI_TIME *Time + ) +/*++ + +Routine Description: + + Sets the current local time and date information. + +Arguments: + + Time - A pointer to the current time. + +Returns: + + Status code + +--*/ +{ + SAL_RETURN_REGS ReturnReg; + + EFI_GUID Guid = EFI_EXTENDED_SAL_RTC_SERVICES_PROTOCOL_GUID; + + ReturnReg = EfiCallEsalService (&Guid, SetTime, (UINT64) Time, 0, 0, 0, 0, 0, 0); + return ReturnReg.Status; +} + +EFI_STATUS +EfiGetWakeupTime ( + OUT BOOLEAN *Enabled, + OUT BOOLEAN *Pending, + OUT EFI_TIME *Time + ) +/*++ + +Routine Description: + + Returns the current wakeup alarm clock setting. + +Arguments: + + Enabled - Indicates if the alarm is currently enabled or disabled. + Pending - Indicates if the alarm signal is pending and requires acknowledgement. + Time - The current alarm setting. + +Returns: + + Status code + +--*/ +{ + SAL_RETURN_REGS ReturnReg; + + EFI_GUID Guid = EFI_EXTENDED_SAL_RTC_SERVICES_PROTOCOL_GUID; + + ReturnReg = EfiCallEsalService (&Guid, GetWakeupTime, (UINT64) Enabled, (UINT64) Pending, (UINT64) Time, 0, 0, 0, 0); + return ReturnReg.Status; +} + +EFI_STATUS +EfiSetWakeupTime ( + IN BOOLEAN Enable, + IN EFI_TIME *Time + ) +/*++ + +Routine Description: + + Sets the system wakeup alarm clock time. + +Arguments: + + Enable - Enable or disable the wakeup alarm. + Time - If Enable is TRUE, the time to set the wakeup alarm for. + If Enable is FALSE, then this parameter is optional, and may be NULL. + +Returns: + + Status code + +--*/ +{ + SAL_RETURN_REGS ReturnReg; + + EFI_GUID Guid = EFI_EXTENDED_SAL_RTC_SERVICES_PROTOCOL_GUID; + + ReturnReg = EfiCallEsalService (&Guid, SetWakeupTime, (UINT64) Enable, (UINT64) Time, 0, 0, 0, 0, 0); + return ReturnReg.Status; +} + +EFI_STATUS +EfiGetVariable ( + IN CHAR16 *VariableName, + IN EFI_GUID * VendorGuid, + OUT UINT32 *Attributes OPTIONAL, + IN OUT UINTN *DataSize, + OUT VOID *Data + ) +/*++ + +Routine Description: + + Returns the value of a variable. + +Arguments: + + VariableName - A Null-terminated Unicode string that is the name of the + vendor¡¯s variable. + VendorGuid - A unique identifier for the vendor. + Attributes - If not NULL, a pointer to the memory location to return the + attributes bitmask for the variable. + DataSize - On input, the size in bytes of the return Data buffer. + On output the size of data returned in Data. + Data - The buffer to return the contents of the variable. + +Returns: + + Status code + +--*/ +{ + SAL_RETURN_REGS ReturnReg; + EFI_GUID Guid = EFI_EXTENDED_SAL_VARIABLE_SERVICES_PROTOCOL_GUID; + + ReturnReg = EfiCallEsalService ( + &Guid, + EsalGetVariable, + (UINT64) VariableName, + (UINT64) VendorGuid, + (UINT64) Attributes, + (UINT64) DataSize, + (UINT64) Data, + 0, + 0 + ); + return (EFI_STATUS) ReturnReg.Status; +} + +EFI_STATUS +EfiGetNextVariableName ( + IN OUT UINTN *VariableNameSize, + IN OUT CHAR16 *VariableName, + IN OUT EFI_GUID *VendorGuid + ) +/*++ + +Routine Description: + + Enumerates the current variable names. + +Arguments: + + VariableNameSize - The size of the VariableName buffer. + VariableName - On input, supplies the last VariableName that was returned + by GetNextVariableName(). + On output, returns the Nullterminated Unicode string of the + current variable. + VendorGuid - On input, supplies the last VendorGuid that was returned by + GetNextVariableName(). + On output, returns the VendorGuid of the current variable. + +Returns: + + Status code + +--*/ +{ + SAL_RETURN_REGS ReturnReg; + EFI_GUID Guid = EFI_EXTENDED_SAL_VARIABLE_SERVICES_PROTOCOL_GUID; + + ReturnReg = EfiCallEsalService ( + &Guid, + EsalGetNextVariableName, + (UINT64) VariableNameSize, + (UINT64) VariableName, + (UINT64) VendorGuid, + 0, + 0, + 0, + 0 + ); + return (EFI_STATUS) ReturnReg.Status; +} + +EFI_STATUS +EfiSetVariable ( + IN CHAR16 *VariableName, + IN EFI_GUID *VendorGuid, + IN UINT32 Attributes, + IN UINTN DataSize, + IN VOID *Data + ) +/*++ + +Routine Description: + + Sets the value of a variable. + +Arguments: + + VariableName - A Null-terminated Unicode string that is the name of the + vendor¡¯s variable. + VendorGuid - A unique identifier for the vendor. + Attributes - Attributes bitmask to set for the variable. + DataSize - The size in bytes of the Data buffer. + Data - The contents for the variable. + +Returns: + + Status code + +--*/ +{ + SAL_RETURN_REGS ReturnReg; + EFI_GUID Guid = EFI_EXTENDED_SAL_VARIABLE_SERVICES_PROTOCOL_GUID; + + ReturnReg = EfiCallEsalService ( + &Guid, + EsalSetVariable, + (UINT64) VariableName, + (UINT64) VendorGuid, + (UINT64) Attributes, + (UINT64) DataSize, + (UINT64) Data, + 0, + 0 + ); + return (EFI_STATUS) ReturnReg.Status; +} + +EFI_STATUS +EfiGetNextHighMonotonicCount ( + OUT UINT32 *HighCount + ) +/*++ + +Routine Description: + + Returns the next high 32 bits of the platform¡¯s monotonic counter. + +Arguments: + + HighCount - Pointer to returned value. + +Returns: + + Status code + +--*/ +{ + SAL_RETURN_REGS ReturnReg; + + EFI_GUID Guid = EFI_EXTENDED_SAL_MTC_SERVICES_PROTOCOL_GUID; + + ReturnReg = EfiCallEsalService (&Guid, GetNextHighMonotonicCount, (UINT64) HighCount, 0, 0, 0, 0, 0, 0); + return (EFI_STATUS) ReturnReg.Status; +} + +EFI_STATUS +EfiConvertPointer ( + IN UINTN DebugDisposition, + IN OUT VOID *Address + ) +/*++ + +Routine Description: + + Determines the new virtual address that is to be used on subsequent memory accesses. + +Arguments: + + DebugDisposition - Supplies type information for the pointer being converted. + Address - A pointer to a pointer that is to be fixed to be the value needed + for the new virtual address mappings being applied. + +Returns: + + Status code + +--*/ +{ + return mRT->ConvertPointer (DebugDisposition, Address); +} + +EFI_STATUS +EfiConvertList ( + IN UINTN DebugDisposition, + IN OUT LIST_ENTRY *ListHead + ) +/*++ + +Routine Description: + + Conver the standard Lib double linked list to a virtual mapping. + +Arguments: + + DebugDisposition - Argument to EfiConvertPointer (EFI 1.0 API) + + ListHead - Head of linked list to convert + +Returns: + + EFI_SUCCESS + +--*/ +{ + LIST_ENTRY *Link; + LIST_ENTRY *NextLink; + + // + // Convert all the ForwardLink & BackLink pointers in the list + // + Link = ListHead; + do { + NextLink = Link->ForwardLink; + + EfiConvertPointer ( + Link->ForwardLink == ListHead ? DebugDisposition : 0, + (VOID **) &Link->ForwardLink + ); + + EfiConvertPointer ( + Link->BackLink == ListHead ? DebugDisposition : 0, + (VOID **) &Link->BackLink + ); + + Link = NextLink; + } while (Link != ListHead); + return EFI_SUCCESS; +} + + +/** + Change the runtime addressing mode of EFI firmware from physical to virtual. + + @param MemoryMapSize The size in bytes of VirtualMap. + @param DescriptorSize The size in bytes of an entry in the VirtualMap. + @param DescriptorVersion The version of the structure entries in VirtualMap. + @param VirtualMap An array of memory descriptors which contain new virtual + address mapping information for all runtime ranges. Type + EFI_MEMORY_DESCRIPTOR is defined in the + GetMemoryMap() function description. + + @retval EFI_SUCCESS The virtual address map has been applied. + @retval EFI_UNSUPPORTED EFI firmware is not at runtime, or the EFI firmware is already in + virtual address mapped mode. + @retval EFI_INVALID_PARAMETER DescriptorSize or DescriptorVersion is + invalid. + @retval EFI_NO_MAPPING A virtual address was not supplied for a range in the memory + map that requires a mapping. + @retval EFI_NOT_FOUND A virtual address was supplied for an address that is not found + in the memory map. +**/ +EFI_STATUS +EFIAPI +EfiSetVirtualAddressMap ( + IN UINTN MemoryMapSize, + IN UINTN DescriptorSize, + IN UINT32 DescriptorVersion, + IN CONST EFI_MEMORY_DESCRIPTOR *VirtualMap + ) +{ + SAL_RETURN_REGS ReturnReg; + EFI_GUID Guid = EFI_EXTENDED_SAL_VIRTUAL_SERVICES_PROTOCOL_GUID; + + ReturnReg = EfiCallEsalService ( + &Guid, + SetVirtualAddress, + (UINT64) MemoryMapSize, + (UINT64) DescriptorSize, + (UINT64) DescriptorVersion, + (UINT64) VirtualMap, + 0, + 0, + 0 + ); + + return ReturnReg.Status; +} + + +EFI_STATUS +EfiUpdateCapsule ( + IN UEFI_CAPSULE_HEADER **CapsuleHeaderArray, + IN UINTN CapsuleCount, + IN EFI_PHYSICAL_ADDRESS ScatterGatherList OPTIONAL + ) +{ + return EFI_UNSUPPORTED; +} + +EFI_STATUS +EfiQueryCapsuleCapabilities ( + IN UEFI_CAPSULE_HEADER **CapsuleHeaderArray, + IN UINTN CapsuleCount, + OUT UINT64 *MaximumCapsuleSize, + OUT EFI_RESET_TYPE *ResetType + ) +{ + return EFI_UNSUPPORTED; +} + + +EFI_STATUS +EfiQueryVariableInfo ( + IN UINT32 Attributes, + OUT UINT64 *MaximumVariableStorageSize, + OUT UINT64 *RemainingVariableStorageSize, + OUT UINT64 *MaximumVariableSize + ) +{ + return EFI_UNSUPPORTED; +} diff --git a/EdkModulePkg/Library/EdkUefiRuntimeLib/RuntimeLibInternal.h b/EdkModulePkg/Library/EdkUefiRuntimeLib/RuntimeLibInternal.h new file mode 100644 index 0000000000..82494fd7a0 --- /dev/null +++ b/EdkModulePkg/Library/EdkUefiRuntimeLib/RuntimeLibInternal.h @@ -0,0 +1,30 @@ +/*++ + +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: + + RuntimeLibInternal.h + +Abstract: + +--*/ + +#ifndef __RUNTIMELIBINTERNAL_H__ +#define __RUNTIMELIBINTERNAL_H__ + +EFI_STATUS +EfiConvertInternalPointer ( + IN OUT VOID *Address + ); + +extern EFI_RUNTIME_SERVICES *mRT; + +#endif //__RUNTIMELIBINTERNAL_H__ diff --git a/EdkModulePkg/Universal/Capsule/RuntimeDxe/CapsuleRuntime.msa b/EdkModulePkg/Universal/Capsule/RuntimeDxe/CapsuleRuntime.msa index 11a5e11278..c6ae23a26b 100644 --- a/EdkModulePkg/Universal/Capsule/RuntimeDxe/CapsuleRuntime.msa +++ b/EdkModulePkg/Universal/Capsule/RuntimeDxe/CapsuleRuntime.msa @@ -43,7 +43,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.--> DxeServicesTableLib - DxeRuntimeDriverLib + UefiRuntimeLib DebugLib diff --git a/EdkModulePkg/Universal/EmuVariable/RuntimeDxe/EmuVariable.msa b/EdkModulePkg/Universal/EmuVariable/RuntimeDxe/EmuVariable.msa index 851985983f..260b30dcaa 100644 --- a/EdkModulePkg/Universal/EmuVariable/RuntimeDxe/EmuVariable.msa +++ b/EdkModulePkg/Universal/EmuVariable/RuntimeDxe/EmuVariable.msa @@ -35,7 +35,7 @@ DebugLib - DxeRuntimeDriverLib + UefiRuntimeLib UefiDriverEntryPoint diff --git a/EdkModulePkg/Universal/MonotonicCounter/RuntimeDxe/MonotonicCounter.msa b/EdkModulePkg/Universal/MonotonicCounter/RuntimeDxe/MonotonicCounter.msa index 20c1179eec..1fad33cc61 100644 --- a/EdkModulePkg/Universal/MonotonicCounter/RuntimeDxe/MonotonicCounter.msa +++ b/EdkModulePkg/Universal/MonotonicCounter/RuntimeDxe/MonotonicCounter.msa @@ -40,7 +40,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.--> UefiDriverEntryPoint - DxeRuntimeDriverLib + UefiRuntimeLib DebugLib diff --git a/EdkModulePkg/Universal/Runtime/RuntimeDxe/Runtime.msa b/EdkModulePkg/Universal/Runtime/RuntimeDxe/Runtime.msa index 61a8e0d1fd..c1373e1ea4 100644 --- a/EdkModulePkg/Universal/Runtime/RuntimeDxe/Runtime.msa +++ b/EdkModulePkg/Universal/Runtime/RuntimeDxe/Runtime.msa @@ -34,7 +34,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.--> BaseLib - DxeRuntimeDriverLib + UefiRuntimeLib UefiDriverEntryPoint diff --git a/EdkModulePkg/Universal/StatusCode/RuntimeDxe/StatusCode.msa b/EdkModulePkg/Universal/StatusCode/RuntimeDxe/StatusCode.msa index d2ddf09a93..f8364b6f80 100644 --- a/EdkModulePkg/Universal/StatusCode/RuntimeDxe/StatusCode.msa +++ b/EdkModulePkg/Universal/StatusCode/RuntimeDxe/StatusCode.msa @@ -34,7 +34,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.--> BaseLib - DxeRuntimeDriverLib + UefiRuntimeLib UefiDriverEntryPoint diff --git a/EdkModulePkg/Universal/Variable/RuntimeDxe/Variable.msa b/EdkModulePkg/Universal/Variable/RuntimeDxe/Variable.msa index 65fade3430..c3f538abe6 100644 --- a/EdkModulePkg/Universal/Variable/RuntimeDxe/Variable.msa +++ b/EdkModulePkg/Universal/Variable/RuntimeDxe/Variable.msa @@ -43,7 +43,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.--> DxeServicesTableLib - DxeRuntimeDriverLib + UefiRuntimeLib DebugLib