]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Library/UefiRuntimeLib/RuntimeService.c
Import the UefiRuntimeLib in MdePkg.
[mirror_edk2.git] / MdePkg / Library / UefiRuntimeLib / RuntimeService.c
diff --git a/MdePkg/Library/UefiRuntimeLib/RuntimeService.c b/MdePkg/Library/UefiRuntimeLib/RuntimeService.c
new file mode 100644 (file)
index 0000000..d5a9388
--- /dev/null
@@ -0,0 +1,457 @@
+/*++\r
+\r
+Copyright (c) 2006 - 2007, Intel Corporation\r
+All rights reserved. This program and the accompanying materials\r
+are licensed and made available under the terms and conditions of the BSD License\r
+which accompanies this distribution.  The full text of the license may be found at\r
+http://opensource.org/licenses/bsd-license.php\r
+\r
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+Module Name:\r
+\r
+    RuntimeService.c\r
+\r
+--*/\r
+\r
+#include <PiDxe.h>\r
+#include <\r
+\r
+#include <RuntimeLibInternal.h>\r
+\r
+VOID\r
+EFIAPI\r
+EfiResetSystem (\r
+  IN EFI_RESET_TYPE               ResetType,\r
+  IN EFI_STATUS                   ResetStatus,\r
+  IN UINTN                        DataSize,\r
+  IN CHAR16                       *ResetData\r
+  )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+  Resets the entire platform.\r
+\r
+Arguments:\r
+\r
+  ResetType   - The type of reset to perform.\r
+  ResetStatus - The status code for the reset.\r
+  DataSize    - The size, in bytes, of ResetData.\r
+  ResetData   - A data buffer that includes a Null-terminated Unicode string, optionally\r
+                followed by additional binary data.\r
+\r
+Returns:\r
+\r
+  None\r
+\r
+--*/\r
+{\r
+  mRT->ResetSystem (ResetType, ResetStatus, DataSize, ResetData);\r
+}\r
+\r
+//\r
+// The following functions hide the mRT local global from the call to\r
+// runtime service in the EFI system table.\r
+//\r
+EFI_STATUS\r
+EFIAPI\r
+EfiGetTime (\r
+  OUT EFI_TIME                    *Time,\r
+  OUT EFI_TIME_CAPABILITIES       *Capabilities\r
+  )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+  Returns the current time and date information, and the time-keeping\r
+  capabilities of the hardware platform.\r
+\r
+Arguments:\r
+\r
+  Time          - A pointer to storage to receive a snapshot of the current time.\r
+  Capabilities  - An optional pointer to a buffer to receive the real time clock device's\r
+                  capabilities.\r
+\r
+Returns:\r
+\r
+  Status code\r
+\r
+--*/\r
+{\r
+  return mRT->GetTime (Time, Capabilities);\r
+}\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+EfiSetTime (\r
+  IN EFI_TIME                   *Time\r
+  )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+  Sets the current local time and date information.\r
+\r
+Arguments:\r
+\r
+  Time  - A pointer to the current time.\r
+\r
+Returns:\r
+\r
+  Status code\r
+\r
+--*/\r
+{\r
+  return mRT->SetTime (Time);\r
+}\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+EfiGetWakeupTime (\r
+  OUT BOOLEAN                     *Enabled,\r
+  OUT BOOLEAN                     *Pending,\r
+  OUT EFI_TIME                    *Time\r
+  )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+  Returns the current wakeup alarm clock setting.\r
+\r
+Arguments:\r
+\r
+  Enabled - Indicates if the alarm is currently enabled or disabled.\r
+  Pending - Indicates if the alarm signal is pending and requires acknowledgement.\r
+  Time    - The current alarm setting.\r
+\r
+Returns:\r
+\r
+  Status code\r
+\r
+--*/\r
+{\r
+  return mRT->GetWakeupTime (Enabled, Pending, Time);\r
+}\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+EfiSetWakeupTime (\r
+  IN BOOLEAN                      Enable,\r
+  IN EFI_TIME                     *Time\r
+  )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+  Sets the system wakeup alarm clock time.\r
+\r
+Arguments:\r
+\r
+  Enable  - Enable or disable the wakeup alarm.\r
+  Time    - If Enable is TRUE, the time to set the wakeup alarm for.\r
+            If Enable is FALSE, then this parameter is optional, and may be NULL.\r
+\r
+Returns:\r
+\r
+  Status code\r
+\r
+--*/\r
+{\r
+  return mRT->SetWakeupTime (Enable, Time);\r
+}\r
+\r
+\r
+\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+EfiGetVariable (\r
+  IN CHAR16                       *VariableName,\r
+  IN EFI_GUID                     * VendorGuid,\r
+  OUT UINT32                      *Attributes OPTIONAL,\r
+  IN OUT UINTN                    *DataSize,\r
+  OUT VOID                        *Data\r
+  )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+  Returns the value of a variable.\r
+\r
+Arguments:\r
+\r
+  VariableName  - A Null-terminated Unicode string that is the name of the\r
+                  vendor's variable.\r
+  VendorGuid    - A unique identifier for the vendor.\r
+  Attributes    - If not NULL, a pointer to the memory location to return the\r
+                  attributes bitmask for the variable.\r
+  DataSize      - On input, the size in bytes of the return Data buffer.\r
+                  On output the size of data returned in Data.\r
+  Data          - The buffer to return the contents of the variable.\r
+\r
+Returns:\r
+\r
+  Status code\r
+\r
+--*/\r
+{\r
+  return mRT->GetVariable (VariableName, VendorGuid, Attributes, DataSize, Data);\r
+}\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+EfiGetNextVariableName (\r
+  IN OUT UINTN                    *VariableNameSize,\r
+  IN OUT CHAR16                   *VariableName,\r
+  IN OUT EFI_GUID                 *VendorGuid\r
+  )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+  Enumerates the current variable names.\r
+\r
+Arguments:\r
+\r
+  VariableNameSize  - The size of the VariableName buffer.\r
+  VariableName      - On input, supplies the last VariableName that was returned\r
+                      by GetNextVariableName().\r
+                      On output, returns the Nullterminated Unicode string of the\r
+                      current variable.\r
+  VendorGuid        - On input, supplies the last VendorGuid that was returned by\r
+                      GetNextVariableName().\r
+                      On output, returns the VendorGuid of the current variable.\r
+\r
+Returns:\r
+\r
+  Status code\r
+\r
+--*/\r
+{\r
+  return mRT->GetNextVariableName (VariableNameSize, VariableName, VendorGuid);\r
+}\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+EfiSetVariable (\r
+  IN CHAR16                       *VariableName,\r
+  IN EFI_GUID                     *VendorGuid,\r
+  IN UINT32                       Attributes,\r
+  IN UINTN                        DataSize,\r
+  IN VOID                         *Data\r
+  )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+  Sets the value of a variable.\r
+\r
+Arguments:\r
+\r
+  VariableName  - A Null-terminated Unicode string that is the name of the\r
+                  vendor's variable.\r
+  VendorGuid    - A unique identifier for the vendor.\r
+  Attributes    - Attributes bitmask to set for the variable.\r
+  DataSize      - The size in bytes of the Data buffer.\r
+  Data          - The contents for the variable.\r
+\r
+Returns:\r
+\r
+  Status code\r
+\r
+--*/\r
+{\r
+  return mRT->SetVariable (VariableName, VendorGuid, Attributes, DataSize, Data);\r
+}\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+EfiGetNextHighMonotonicCount (\r
+  OUT UINT32                      *HighCount\r
+  )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+  Returns the next high 32 bits of the platform's monotonic counter.\r
+\r
+Arguments:\r
+\r
+  HighCount - Pointer to returned value.\r
+\r
+Returns:\r
+\r
+  Status code\r
+\r
+--*/\r
+{\r
+  return mRT->GetNextHighMonotonicCount (HighCount);\r
+}\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+EfiConvertPointer (\r
+  IN UINTN                  DebugDisposition,\r
+  IN OUT VOID               **Address\r
+  )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+  Determines the new virtual address that is to be used on subsequent memory accesses.\r
+\r
+Arguments:\r
+\r
+  DebugDisposition  - Supplies type information for the pointer being converted.\r
+  Address           - A pointer to a pointer that is to be fixed to be the value needed\r
+                      for the new virtual address mappings being applied.\r
+\r
+Returns:\r
+\r
+  Status code\r
+\r
+--*/\r
+{\r
+  return mRT->ConvertPointer (DebugDisposition, Address);\r
+}\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+EfiConvertList (\r
+  IN UINTN                DebugDisposition,\r
+  IN OUT LIST_ENTRY       *ListHead\r
+  )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+  Conver the standard Lib double linked list to a virtual mapping.\r
+\r
+Arguments:\r
+\r
+  DebugDisposition - Argument to EfiConvertPointer (EFI 1.0 API)\r
+\r
+  ListHead         - Head of linked list to convert\r
+\r
+Returns:\r
+\r
+  EFI_SUCCESS\r
+\r
+--*/\r
+{\r
+  LIST_ENTRY  *Link;\r
+  LIST_ENTRY  *NextLink;\r
+\r
+  //\r
+  // Convert all the ForwardLink & BackLink pointers in the list\r
+  //\r
+  Link = ListHead;\r
+  do {\r
+    NextLink = Link->ForwardLink;\r
+\r
+    EfiConvertPointer (\r
+      Link->ForwardLink == ListHead ? DebugDisposition : 0,\r
+      (VOID **) &Link->ForwardLink\r
+      );\r
+\r
+    EfiConvertPointer (\r
+      Link->BackLink == ListHead ? DebugDisposition : 0,\r
+      (VOID **) &Link->BackLink\r
+      );\r
+\r
+    Link = NextLink;\r
+  } while (Link != ListHead);\r
+  return EFI_SUCCESS;\r
+}\r
+\r
+\r
+/**\r
+  Change the runtime addressing mode of EFI firmware from physical to virtual.\r
+\r
+  @param  MemoryMapSize         The size in bytes of VirtualMap.\r
+  @param  DescriptorSize        The size in bytes of an entry in the VirtualMap.\r
+  @param  DescriptorVersion     The version of the structure entries in VirtualMap.\r
+  @param  VirtualMap            An array of memory descriptors which contain new virtual\r
+                                address mapping information for all runtime ranges. Type\r
+                                EFI_MEMORY_DESCRIPTOR is defined in the\r
+                                GetMemoryMap() function description.\r
+\r
+  @retval EFI_SUCCESS           The virtual address map has been applied.\r
+  @retval EFI_UNSUPPORTED       EFI firmware is not at runtime, or the EFI firmware is already in\r
+                                virtual address mapped mode.\r
+  @retval EFI_INVALID_PARAMETER DescriptorSize or DescriptorVersion is\r
+                                invalid.\r
+  @retval EFI_NO_MAPPING        A virtual address was not supplied for a range in the memory\r
+                                map that requires a mapping.\r
+  @retval EFI_NOT_FOUND         A virtual address was supplied for an address that is not found\r
+                                in the memory map.\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+EfiSetVirtualAddressMap (\r
+  IN UINTN                          MemoryMapSize,\r
+  IN UINTN                          DescriptorSize,\r
+  IN UINT32                         DescriptorVersion,\r
+  IN CONST EFI_MEMORY_DESCRIPTOR    *VirtualMap\r
+  )\r
+{\r
+  return mRT->SetVirtualAddressMap (\r
+                MemoryMapSize,\r
+                DescriptorSize,\r
+                DescriptorVersion,\r
+                (EFI_MEMORY_DESCRIPTOR *) VirtualMap\r
+                );\r
+}\r
+\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+EfiUpdateCapsule (\r
+  IN UEFI_CAPSULE_HEADER       **CapsuleHeaderArray,\r
+  IN UINTN                                 CapsuleCount,\r
+  IN EFI_PHYSICAL_ADDRESS      ScatterGatherList       OPTIONAL\r
+  )\r
+{\r
+  return mRT->UpdateCapsule (\r
+                CapsuleHeaderArray,\r
+                CapsuleCount,\r
+                ScatterGatherList\r
+                );\r
+}\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+EfiQueryCapsuleCapabilities (\r
+  IN UEFI_CAPSULE_HEADER       **CapsuleHeaderArray,\r
+  IN UINTN                                 CapsuleCount,\r
+  OUT  UINT64                      *MaximumCapsuleSize,\r
+  OUT EFI_RESET_TYPE           *ResetType\r
+  )\r
+{\r
+  return mRT->QueryCapsuleCapabilities (\r
+          CapsuleHeaderArray,\r
+          CapsuleCount,\r
+          MaximumCapsuleSize,\r
+          ResetType\r
+          );\r
+}\r
+\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+EfiQueryVariableInfo (\r
+  IN UINT32                      Attributes,\r
+  OUT UINT64                   *MaximumVariableStorageSize,\r
+  OUT   UINT64                 *RemainingVariableStorageSize,\r
+  OUT UINT64                   *MaximumVariableSize\r
+  )\r
+{\r
+  return mRT->QueryVariableInfo (\r
+          Attributes,\r
+          MaximumVariableStorageSize,\r
+          RemainingVariableStorageSize,\r
+          MaximumVariableSize\r
+          );\r
+}\r