13eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang/*++
23eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
33e99020dbf0a159e34b84e7ae9125f2e368d5390lgaoCopyright (c) 2004 - 2010, Intel Corporation. All rights reserved.<BR>
42c7e5c2febd407ed1849c06da50734dd6f751956hhtianThis program and the accompanying materials
53eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangare licensed and made available under the terms and conditions of the BSD License
63eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangwhich accompanies this distribution.  The full text of the license may be found at
73eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwanghttp://opensource.org/licenses/bsd-license.php
83eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
93eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangTHE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
103eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangWITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
113eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
123eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
133eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangModule Name:
143eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
153eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  RuntimeService.c
163eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
173eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangAbstract:
183eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
193eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Runtime Lib
203eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
213eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang--*/
223eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
2381c56b8d1a6b6c51d6ec68eea2cb3a7055ba8611qwang#include "../RuntimeLibInternal.h"
243eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
253eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangVOID
263eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangEFIAPI
273eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangEfiResetSystem (
283eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN EFI_RESET_TYPE               ResetType,
293eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN EFI_STATUS                   ResetStatus,
303eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN UINTN                        DataSize,
313eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN CHAR16                       *ResetData
323eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  )
333eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang/*++
343eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
353eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangRoutine Description:
363eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
373eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Resets the entire platform.
383eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
393eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangArguments:
403eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
413eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  ResetType   - The type of reset to perform.
423eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  ResetStatus - The status code for the reset.
433eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  DataSize    - The size, in bytes, of ResetData.
443eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  ResetData   - A data buffer that includes a Null-terminated Unicode string, optionally
453eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                followed by additional binary data.
463eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
473eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangReturns:
483eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
493eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  None
503eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
513eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang--*/
523eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang{
53c7f33ca42470dc87bc41a8583f427883123d67a1qwang  EFI_GUID Guid;
54c7f33ca42470dc87bc41a8583f427883123d67a1qwang
55c7f33ca42470dc87bc41a8583f427883123d67a1qwang  *((UINT64 *) &Guid) = EFI_EXTENDED_SAL_RESET_SERVICES_PROTOCOL_GUID_LO;
56c7f33ca42470dc87bc41a8583f427883123d67a1qwang  *(((UINT64 *)&Guid) + 1) = EFI_EXTENDED_SAL_RESET_SERVICES_PROTOCOL_GUID_HI;
573eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
583eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  EfiCallEsalService (
593eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    &Guid,
603eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    ResetSystem,
613eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    (UINT64) ResetType,
623eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    (UINT64) ResetStatus,
633eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    (UINT64) DataSize,
643eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    (UINT64) ResetData,
653eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    0,
663eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    0,
673eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    0
683eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    );
693eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang}
703eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
713eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
723eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
733e99020dbf0a159e34b84e7ae9125f2e368d5390lgao// The following functions hide the mRTEdkDxeRuntimeDriverLib local global from the call to
743eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// runtime service in the EFI system table.
753eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
763eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangEFI_STATUS
773eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangEFIAPI
783eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangEfiGetTime (
793eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  OUT EFI_TIME                    *Time,
803eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  OUT EFI_TIME_CAPABILITIES       *Capabilities
813eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  )
823eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang/*++
833eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
843eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangRoutine Description:
853eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
863eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Returns the current time and date information, and the time-keeping
873eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  capabilities of the hardware platform.
883eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
893eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangArguments:
903eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
913eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Time          - A pointer to storage to receive a snapshot of the current time.
923eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Capabilities  - An optional pointer to a buffer to receive the real time clock device's
933eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                  capabilities.
943eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
953eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangReturns:
963eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
973eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Status code
983eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
993eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang--*/
1003eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang{
1013eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  SAL_RETURN_REGS ReturnReg;
102c7f33ca42470dc87bc41a8583f427883123d67a1qwang  EFI_GUID        Guid;
103c7f33ca42470dc87bc41a8583f427883123d67a1qwang
104c7f33ca42470dc87bc41a8583f427883123d67a1qwang  *((UINT64 *) &Guid) = EFI_EXTENDED_SAL_RTC_SERVICES_PROTOCOL_GUID_LO;
105c7f33ca42470dc87bc41a8583f427883123d67a1qwang  *(((UINT64 *)&Guid) + 1) = EFI_EXTENDED_SAL_RTC_SERVICES_PROTOCOL_GUID_HI;
1063eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1073eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  ReturnReg = EfiCallEsalService (&Guid, GetTime, (UINT64) Time, (UINT64) Capabilities, 0, 0, 0, 0, 0);
1083eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  return ReturnReg.Status;
1093eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang}
1103eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1113eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangEFI_STATUS
1123eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangEFIAPI
1133eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangEfiSetTime (
1143eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN EFI_TIME                   *Time
1153eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  )
1163eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang/*++
1173eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1183eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangRoutine Description:
1193eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1203eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Sets the current local time and date information.
1213eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1223eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangArguments:
1233eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1243eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Time  - A pointer to the current time.
1253eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1263eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangReturns:
1273eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1283eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Status code
1293eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1303eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang--*/
1313eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang{
1323eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  SAL_RETURN_REGS ReturnReg;
133c7f33ca42470dc87bc41a8583f427883123d67a1qwang  EFI_GUID        Guid;
134c7f33ca42470dc87bc41a8583f427883123d67a1qwang
135c7f33ca42470dc87bc41a8583f427883123d67a1qwang  *((UINT64 *) &Guid) = EFI_EXTENDED_SAL_RTC_SERVICES_PROTOCOL_GUID_LO;
136c7f33ca42470dc87bc41a8583f427883123d67a1qwang  *(((UINT64 *)&Guid) + 1) = EFI_EXTENDED_SAL_RTC_SERVICES_PROTOCOL_GUID_HI;
1373eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1383eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  ReturnReg = EfiCallEsalService (&Guid, SetTime, (UINT64) Time, 0, 0, 0, 0, 0, 0);
1393eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  return ReturnReg.Status;
1403eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang}
1413eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1423eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangEFI_STATUS
1433eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangEFIAPI
1443eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangEfiGetWakeupTime (
1453eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  OUT BOOLEAN                     *Enabled,
1463eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  OUT BOOLEAN                     *Pending,
1473eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  OUT EFI_TIME                    *Time
1483eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  )
1493eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang/*++
1503eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1513eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangRoutine Description:
1523eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1533eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Returns the current wakeup alarm clock setting.
1543eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1553eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangArguments:
1563eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1573eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Enabled - Indicates if the alarm is currently enabled or disabled.
1583eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Pending - Indicates if the alarm signal is pending and requires acknowledgement.
1593eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Time    - The current alarm setting.
1603eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1613eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangReturns:
1623eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1633eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Status code
1643eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1653eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang--*/
1663eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang{
1673eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  SAL_RETURN_REGS ReturnReg;
168c7f33ca42470dc87bc41a8583f427883123d67a1qwang  EFI_GUID        Guid;
169c7f33ca42470dc87bc41a8583f427883123d67a1qwang
170c7f33ca42470dc87bc41a8583f427883123d67a1qwang  *((UINT64 *) &Guid) = EFI_EXTENDED_SAL_RTC_SERVICES_PROTOCOL_GUID_LO;
171c7f33ca42470dc87bc41a8583f427883123d67a1qwang  *(((UINT64 *)&Guid) + 1) = EFI_EXTENDED_SAL_RTC_SERVICES_PROTOCOL_GUID_HI;
1723eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1733eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  ReturnReg = EfiCallEsalService (&Guid, GetWakeupTime, (UINT64) Enabled, (UINT64) Pending, (UINT64) Time, 0, 0, 0, 0);
1743eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  return ReturnReg.Status;
1753eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang}
1763eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1773eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangEFI_STATUS
1783eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangEFIAPI
1793eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangEfiSetWakeupTime (
1803eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN BOOLEAN                      Enable,
1813eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN EFI_TIME                     *Time
1823eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  )
1833eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang/*++
1843eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1853eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangRoutine Description:
1863eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1873eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Sets the system wakeup alarm clock time.
1883eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1893eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangArguments:
1903eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1913eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Enable  - Enable or disable the wakeup alarm.
1923eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Time    - If Enable is TRUE, the time to set the wakeup alarm for.
1933eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang            If Enable is FALSE, then this parameter is optional, and may be NULL.
1943eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1953eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangReturns:
1963eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1973eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Status code
1983eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1993eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang--*/
2003eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang{
2013eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  SAL_RETURN_REGS ReturnReg;
202c7f33ca42470dc87bc41a8583f427883123d67a1qwang  EFI_GUID        Guid;
203c7f33ca42470dc87bc41a8583f427883123d67a1qwang
204c7f33ca42470dc87bc41a8583f427883123d67a1qwang  *((UINT64 *) &Guid) = EFI_EXTENDED_SAL_RTC_SERVICES_PROTOCOL_GUID_LO;
205c7f33ca42470dc87bc41a8583f427883123d67a1qwang  *(((UINT64 *)&Guid) + 1) = EFI_EXTENDED_SAL_RTC_SERVICES_PROTOCOL_GUID_HI;
2063eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
2073eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  ReturnReg = EfiCallEsalService (&Guid, SetWakeupTime, (UINT64) Enable, (UINT64) Time, 0, 0, 0, 0, 0);
2083eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  return ReturnReg.Status;
2093eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang}
2103eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
2113eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangEFI_STATUS
2123eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangEFIAPI
2133eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangEfiGetVariable (
2143eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN CHAR16                       *VariableName,
2153eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN EFI_GUID                     * VendorGuid,
2163eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  OUT UINT32                      *Attributes OPTIONAL,
2173eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN OUT UINTN                    *DataSize,
2183eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  OUT VOID                        *Data
2193eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  )
2203eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang/*++
2213eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
2223eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangRoutine Description:
2233eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
2243eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Returns the value of a variable.
2253eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
2263eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangArguments:
2273eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
2283eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  VariableName  - A Null-terminated Unicode string that is the name of the
2293eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                  vendor's variable.
2303eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  VendorGuid    - A unique identifier for the vendor.
2313eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Attributes    - If not NULL, a pointer to the memory location to return the
2323eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                  attributes bitmask for the variable.
2333eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  DataSize      - On input, the size in bytes of the return Data buffer.
2343eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                  On output the size of data returned in Data.
2353eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Data          - The buffer to return the contents of the variable.
2363eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
2373eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangReturns:
2383eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
2393eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Status code
2403eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
2413eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang--*/
2423eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang{
2433eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  SAL_RETURN_REGS ReturnReg;
244c7f33ca42470dc87bc41a8583f427883123d67a1qwang  EFI_GUID        Guid;
245c7f33ca42470dc87bc41a8583f427883123d67a1qwang
246c7f33ca42470dc87bc41a8583f427883123d67a1qwang  *((UINT64 *) &Guid) = EFI_EXTENDED_SAL_VARIABLE_SERVICES_PROTOCOL_GUID_LO;
247c7f33ca42470dc87bc41a8583f427883123d67a1qwang  *(((UINT64 *)&Guid) + 1) = EFI_EXTENDED_SAL_VARIABLE_SERVICES_PROTOCOL_GUID_HI;
2483eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
2493eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  ReturnReg = EfiCallEsalService (
2503eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                &Guid,
2513eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                EsalGetVariable,
2523eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                (UINT64) VariableName,
2533eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                (UINT64) VendorGuid,
2543eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                (UINT64) Attributes,
2553eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                (UINT64) DataSize,
2563eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                (UINT64) Data,
2573eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                0,
2583eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                0
2593eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                );
2603eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  return (EFI_STATUS) ReturnReg.Status;
2613eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang}
2623eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
2633eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangEFI_STATUS
2643eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangEFIAPI
2653eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangEfiGetNextVariableName (
2663eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN OUT UINTN                    *VariableNameSize,
2673eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN OUT CHAR16                   *VariableName,
2683eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN OUT EFI_GUID                 *VendorGuid
2693eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  )
2703eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang/*++
2713eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
2723eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangRoutine Description:
2733eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
2743eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Enumerates the current variable names.
2753eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
2763eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangArguments:
2773eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
2783eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  VariableNameSize  - The size of the VariableName buffer.
2793eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  VariableName      - On input, supplies the last VariableName that was returned
2803eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                      by GetNextVariableName().
2813eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                      On output, returns the Nullterminated Unicode string of the
2823eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                      current variable.
2833eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  VendorGuid        - On input, supplies the last VendorGuid that was returned by
2843eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                      GetNextVariableName().
2853eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                      On output, returns the VendorGuid of the current variable.
2863eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
2873eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangReturns:
2883eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
2893eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Status code
2903eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
2913eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang--*/
2923eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang{
2933eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  SAL_RETURN_REGS ReturnReg;
294c7f33ca42470dc87bc41a8583f427883123d67a1qwang  EFI_GUID        Guid;
295c7f33ca42470dc87bc41a8583f427883123d67a1qwang
296c7f33ca42470dc87bc41a8583f427883123d67a1qwang  *((UINT64 *) &Guid) = EFI_EXTENDED_SAL_VARIABLE_SERVICES_PROTOCOL_GUID_LO;
297c7f33ca42470dc87bc41a8583f427883123d67a1qwang  *(((UINT64 *)&Guid) + 1) = EFI_EXTENDED_SAL_VARIABLE_SERVICES_PROTOCOL_GUID_HI;
2983eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
2993eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  ReturnReg = EfiCallEsalService (
3003eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                &Guid,
3013eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                EsalGetNextVariableName,
3023eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                (UINT64) VariableNameSize,
3033eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                (UINT64) VariableName,
3043eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                (UINT64) VendorGuid,
3053eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                0,
3063eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                0,
3073eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                0,
3083eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                0
3093eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                );
3103eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  return (EFI_STATUS) ReturnReg.Status;
3113eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang}
3123eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
3133eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangEFI_STATUS
3143eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangEFIAPI
3153eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangEfiSetVariable (
3163eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN CHAR16                       *VariableName,
3173eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN EFI_GUID                     *VendorGuid,
3183eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN UINT32                       Attributes,
3193eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN UINTN                        DataSize,
3203eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN VOID                         *Data
3213eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  )
3223eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang/*++
3233eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
3243eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangRoutine Description:
3253eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
3263eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Sets the value of a variable.
3273eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
3283eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangArguments:
3293eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
3303eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  VariableName  - A Null-terminated Unicode string that is the name of the
3313eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                  vendor's variable.
3323eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  VendorGuid    - A unique identifier for the vendor.
3333eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Attributes    - Attributes bitmask to set for the variable.
3343eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  DataSize      - The size in bytes of the Data buffer.
3353eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Data          - The contents for the variable.
3363eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
3373eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangReturns:
3383eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
3393eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Status code
3403eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
3413eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang--*/
3423eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang{
3433eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  SAL_RETURN_REGS ReturnReg;
344c7f33ca42470dc87bc41a8583f427883123d67a1qwang  EFI_GUID        Guid;
345c7f33ca42470dc87bc41a8583f427883123d67a1qwang
346c7f33ca42470dc87bc41a8583f427883123d67a1qwang  *((UINT64 *) &Guid) = EFI_EXTENDED_SAL_VARIABLE_SERVICES_PROTOCOL_GUID_LO;
347c7f33ca42470dc87bc41a8583f427883123d67a1qwang  *(((UINT64 *)&Guid) + 1) = EFI_EXTENDED_SAL_VARIABLE_SERVICES_PROTOCOL_GUID_HI;
3483eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
3493eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  ReturnReg = EfiCallEsalService (
3503eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                &Guid,
3513eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                EsalSetVariable,
3523eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                (UINT64) VariableName,
3533eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                (UINT64) VendorGuid,
3543eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                (UINT64) Attributes,
3553eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                (UINT64) DataSize,
3563eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                (UINT64) Data,
3573eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                0,
3583eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                0
3593eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                );
3603eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  return (EFI_STATUS) ReturnReg.Status;
3613eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang}
3623eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
3633eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangEFI_STATUS
3643eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangEFIAPI
3653eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangEfiGetNextHighMonotonicCount (
3663eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  OUT UINT32                      *HighCount
3673eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  )
3683eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang/*++
3693eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
3703eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangRoutine Description:
3713eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
3723eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Returns the next high 32 bits of the platform's monotonic counter.
3733eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
3743eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangArguments:
3753eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
3763eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  HighCount - Pointer to returned value.
3773eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
3783eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangReturns:
3793eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
3803eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Status code
3813eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
3823eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang--*/
3833eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang{
3843eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  SAL_RETURN_REGS ReturnReg;
385c7f33ca42470dc87bc41a8583f427883123d67a1qwang  EFI_GUID        Guid;
386c7f33ca42470dc87bc41a8583f427883123d67a1qwang
387c7f33ca42470dc87bc41a8583f427883123d67a1qwang  *((UINT64 *) &Guid) = EFI_EXTENDED_SAL_MTC_SERVICES_PROTOCOL_GUID_LO;
388c7f33ca42470dc87bc41a8583f427883123d67a1qwang  *(((UINT64 *)&Guid) + 1) = EFI_EXTENDED_SAL_MTC_SERVICES_PROTOCOL_GUID_HI;
3893eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
3903eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  ReturnReg = EfiCallEsalService (&Guid, GetNextHighMonotonicCount, (UINT64) HighCount, 0, 0, 0, 0, 0, 0);
3913eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  return (EFI_STATUS) ReturnReg.Status;
3923eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang}
3933eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
3943eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangEFI_STATUS
3953eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangEFIAPI
3963eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangEfiConvertPointer (
3973eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN UINTN                  DebugDisposition,
3983eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN OUT VOID               **Address
3993eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  )
4003eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang/*++
4013eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
4023eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangRoutine Description:
4033eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
4043eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Determines the new virtual address that is to be used on subsequent memory accesses.
4053eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
4063eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangArguments:
4073eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
4083eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  DebugDisposition  - Supplies type information for the pointer being converted.
4093eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Address           - A pointer to a pointer that is to be fixed to be the value needed
4103eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                      for the new virtual address mappings being applied.
4113eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
4123eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangReturns:
4133eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
4143eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Status code
4153eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
4163eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang--*/
4173eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang{
4183e99020dbf0a159e34b84e7ae9125f2e368d5390lgao  return mRTEdkDxeRuntimeDriverLib->ConvertPointer (DebugDisposition, Address);
4193eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang}
4203eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
4213eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangEFI_STATUS
4223eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangEFIAPI
4233eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangEfiConvertList (
4243eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN UINTN                DebugDisposition,
4253eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN OUT LIST_ENTRY       *ListHead
4263eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  )
4273eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang/*++
4283eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
4293eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangRoutine Description:
4303eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
4313eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Conver the standard Lib double linked list to a virtual mapping.
4323eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
4333eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangArguments:
4343eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
4353eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  DebugDisposition - Argument to EfiConvertPointer (EFI 1.0 API)
4363eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
4373eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  ListHead         - Head of linked list to convert
4383eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
4393eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangReturns:
4403eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
4413eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  EFI_SUCCESS
4423eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
4433eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang--*/
4443eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang{
4453eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  LIST_ENTRY  *Link;
4463eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  LIST_ENTRY  *NextLink;
4473eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
4483eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  //
4493eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  // Convert all the ForwardLink & BackLink pointers in the list
4503eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  //
4513eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Link = ListHead;
4523eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  do {
4533eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    NextLink = Link->ForwardLink;
4543eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
4553eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    EfiConvertPointer (
4563eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang      Link->ForwardLink == ListHead ? DebugDisposition : 0,
4573eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang      (VOID **) &Link->ForwardLink
4583eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang      );
4593eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
4603eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    EfiConvertPointer (
4613eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang      Link->BackLink == ListHead ? DebugDisposition : 0,
4623eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang      (VOID **) &Link->BackLink
4633eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang      );
4643eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
4653eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    Link = NextLink;
4663eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  } while (Link != ListHead);
4673eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  return EFI_SUCCESS;
4683eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang}
4693eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
4703eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
4713eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang/**
4723eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Change the runtime addressing mode of EFI firmware from physical to virtual.
4733eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
4743eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  @param  MemoryMapSize         The size in bytes of VirtualMap.
4753eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  @param  DescriptorSize        The size in bytes of an entry in the VirtualMap.
4763eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  @param  DescriptorVersion     The version of the structure entries in VirtualMap.
4773eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  @param  VirtualMap            An array of memory descriptors which contain new virtual
4783eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                                address mapping information for all runtime ranges. Type
4793eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                                EFI_MEMORY_DESCRIPTOR is defined in the
4803eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                                GetMemoryMap() function description.
4813eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
4823eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  @retval EFI_SUCCESS           The virtual address map has been applied.
4833eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  @retval EFI_UNSUPPORTED       EFI firmware is not at runtime, or the EFI firmware is already in
4843eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                                virtual address mapped mode.
4853eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  @retval EFI_INVALID_PARAMETER DescriptorSize or DescriptorVersion is
4863eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                                invalid.
4873eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  @retval EFI_NO_MAPPING        A virtual address was not supplied for a range in the memory
4883eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                                map that requires a mapping.
4893eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  @retval EFI_NOT_FOUND         A virtual address was supplied for an address that is not found
4903eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                                in the memory map.
4913eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang**/
4923eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangEFI_STATUS
4933eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangEFIAPI
4943eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangEfiSetVirtualAddressMap (
4953eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN UINTN                          MemoryMapSize,
4963eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN UINTN                          DescriptorSize,
4973eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN UINT32                         DescriptorVersion,
4983eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN CONST EFI_MEMORY_DESCRIPTOR    *VirtualMap
4993eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  )
5003eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang{
5013eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  SAL_RETURN_REGS ReturnReg;
502c7f33ca42470dc87bc41a8583f427883123d67a1qwang  EFI_GUID        Guid;
503c7f33ca42470dc87bc41a8583f427883123d67a1qwang
504c7f33ca42470dc87bc41a8583f427883123d67a1qwang  *((UINT64 *) &Guid) = EFI_EXTENDED_SAL_VIRTUAL_SERVICES_PROTOCOL_GUID_LO;
505c7f33ca42470dc87bc41a8583f427883123d67a1qwang  *(((UINT64 *)&Guid) + 1) = EFI_EXTENDED_SAL_VIRTUAL_SERVICES_PROTOCOL_GUID_HI;
5063eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
5073eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  ReturnReg = EfiCallEsalService (
5083eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                &Guid,
5093eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                SetVirtualAddress,
5103eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                (UINT64) MemoryMapSize,
5113eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                (UINT64) DescriptorSize,
5123eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                (UINT64) DescriptorVersion,
5133eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                (UINT64) VirtualMap,
5143eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                0,
5153eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                0,
5163eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                0
5173eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                );
5183eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
5193eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  return ReturnReg.Status;
5203eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang}
5213eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
5223eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
5233eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangEFI_STATUS
5243eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangEFIAPI
5253eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangEfiUpdateCapsule (
5263eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN UEFI_CAPSULE_HEADER  **CapsuleHeaderArray,
5273eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN UINTN                CapsuleCount,
5283eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN EFI_PHYSICAL_ADDRESS ScatterGatherList OPTIONAL
5293eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  )
5303eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang{
5313eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  return EFI_UNSUPPORTED;
5323eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang}
5333eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
5343eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangEFI_STATUS
5353eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangEFIAPI
5363eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangEfiQueryCapsuleCapabilities (
5373eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN UEFI_CAPSULE_HEADER  **CapsuleHeaderArray,
5383eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN UINTN                CapsuleCount,
5393eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  OUT UINT64              *MaximumCapsuleSize,
5403eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  OUT EFI_RESET_TYPE    *ResetType
5413eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  )
5423eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang{
5433eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  return EFI_UNSUPPORTED;
5443eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang}
5453eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
5463eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
5473eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangEFI_STATUS
5483eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangEFIAPI
5493eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangEfiQueryVariableInfo (
5503eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN UINT32       Attributes,
5513eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  OUT UINT64      *MaximumVariableStorageSize,
5523eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  OUT  UINT64     *RemainingVariableStorageSize,
5533eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  OUT UINT64      *MaximumVariableSize
5543eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  )
5553eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang{
5563eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  return EFI_UNSUPPORTED;
5573eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang}
558