summaryrefslogtreecommitdiff
path: root/ArmPlatformPkg/ArmJunoPkg/Library/ResetSystemLib/ResetSystemLib.c
diff options
context:
space:
mode:
Diffstat (limited to 'ArmPlatformPkg/ArmJunoPkg/Library/ResetSystemLib/ResetSystemLib.c')
-rwxr-xr-xArmPlatformPkg/ArmJunoPkg/Library/ResetSystemLib/ResetSystemLib.c87
1 files changed, 87 insertions, 0 deletions
diff --git a/ArmPlatformPkg/ArmJunoPkg/Library/ResetSystemLib/ResetSystemLib.c b/ArmPlatformPkg/ArmJunoPkg/Library/ResetSystemLib/ResetSystemLib.c
new file mode 100755
index 000000000..2297318b2
--- /dev/null
+++ b/ArmPlatformPkg/ArmJunoPkg/Library/ResetSystemLib/ResetSystemLib.c
@@ -0,0 +1,87 @@
+/** @file
+*
+* Copyright (c) 2013-2014, ARM Limited. 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.
+*
+**/
+
+#include <PiDxe.h>
+
+#include <Library/DebugLib.h>
+#include <Library/EfiResetSystemLib.h>
+#include <Library/ArmSmcLib.h>
+#include <ArmJunoSmc.h>
+
+/**
+ Resets the entire platform.
+
+ @param ResetType The type of reset to perform.
+ @param ResetStatus The status code for the reset.
+ @param DataSize The size, in bytes, of WatchdogData.
+ @param ResetData For a ResetType of EfiResetCold, EfiResetWarm, or
+ EfiResetShutdown the data buffer starts with a Null-terminated
+ Unicode string, optionally followed by additional binary data.
+
+**/
+EFI_STATUS
+EFIAPI
+LibResetSystem (
+ IN EFI_RESET_TYPE ResetType,
+ IN EFI_STATUS ResetStatus,
+ IN UINTN DataSize,
+ IN CHAR16 *ResetData OPTIONAL
+ )
+{
+ UINTN Rx;
+ UINTN SystemState;
+
+ switch (ResetType) {
+ case EfiResetWarm:
+ case EfiResetCold:
+ // Map a warm reset into a cold reset
+ Rx = ARM_JUNO_ARM_FAST_SMC_SET_SYSTEM_POWER_STATE;
+ SystemState = ARM_JUNO_ARM_FAST_SMC_SYSTEM_POWER_STATE_REBOOT;
+ break;
+ case EfiResetShutdown:
+ Rx = ARM_JUNO_ARM_FAST_SMC_SET_SYSTEM_POWER_STATE;
+ SystemState = ARM_JUNO_ARM_FAST_SMC_SYSTEM_POWER_STATE_SHUTDOWN;
+ break;
+ default:
+ Rx = 0;
+ ASSERT(FALSE);
+ }
+
+ if (Rx != 0) {
+ ArmCallSmcArg1 (&Rx, &SystemState);
+ // We should never be here
+ while(1);
+ }
+
+ return EFI_UNSUPPORTED;
+}
+
+/**
+ Initialize any infrastructure required for LibResetSystem () to function.
+
+ @param ImageHandle The firmware allocated handle for the EFI image.
+ @param SystemTable A pointer to the EFI System Table.
+
+ @retval EFI_SUCCESS The constructor always returns EFI_SUCCESS.
+
+**/
+EFI_STATUS
+EFIAPI
+LibInitializeResetSystem (
+ IN EFI_HANDLE ImageHandle,
+ IN EFI_SYSTEM_TABLE *SystemTable
+ )
+{
+ return EFI_SUCCESS;
+}