| /*++ | |
| Copyright (c) 2006 - 2007, 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 | |
| --*/ | |
| #include <RuntimeLibInternal.h> | |
| VOID | |
| EFIAPI | |
| 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 | |
| EFIAPI | |
| 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 | |
| EFIAPI | |
| 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 | |
| EFIAPI | |
| 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 | |
| EFIAPI | |
| 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 | |
| EFIAPI | |
| 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 | |
| EFIAPI | |
| 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 | |
| EFIAPI | |
| 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 | |
| EFIAPI | |
| 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 | |
| EFIAPI | |
| 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 | |
| EFIAPI | |
| 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 | |
| EFIAPI | |
| EfiUpdateCapsule ( | |
| IN UEFI_CAPSULE_HEADER **CapsuleHeaderArray, | |
| IN UINTN CapsuleCount, | |
| IN EFI_PHYSICAL_ADDRESS ScatterGatherList OPTIONAL | |
| ) | |
| { | |
| return mRT->UpdateCapsule ( | |
| CapsuleHeaderArray, | |
| CapsuleCount, | |
| ScatterGatherList | |
| ); | |
| } | |
| EFI_STATUS | |
| EFIAPI | |
| EfiQueryCapsuleCapabilities ( | |
| IN UEFI_CAPSULE_HEADER **CapsuleHeaderArray, | |
| IN UINTN CapsuleCount, | |
| OUT UINT64 *MaximumCapsuleSize, | |
| OUT EFI_RESET_TYPE *ResetType | |
| ) | |
| { | |
| return mRT->QueryCapsuleCapabilities ( | |
| CapsuleHeaderArray, | |
| CapsuleCount, | |
| MaximumCapsuleSize, | |
| ResetType | |
| ); | |
| } | |
| EFI_STATUS | |
| EFIAPI | |
| EfiQueryVariableInfo ( | |
| IN UINT32 Attributes, | |
| OUT UINT64 *MaximumVariableStorageSize, | |
| OUT UINT64 *RemainingVariableStorageSize, | |
| OUT UINT64 *MaximumVariableSize | |
| ) | |
| { | |
| return mRT->QueryVariableInfo ( | |
| Attributes, | |
| MaximumVariableStorageSize, | |
| RemainingVariableStorageSize, | |
| MaximumVariableSize | |
| ); | |
| } |