-/** @file\r
- Driver entry for KbcReset driver.\r
-\r
-Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.<BR>\r
-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
-\r
-#include <PiDxe.h>\r
-\r
-#include <Library/DebugLib.h>\r
-#include <Library/UefiBootServicesTableLib.h>\r
-#include <Library/ResetSystemLib.h>\r
-\r
-#include <Protocol/Reset.h>\r
-\r
-//\r
-// The handle onto which the Reset Architectural Protocol is installed\r
-//\r
-EFI_HANDLE mResetHandle = NULL;\r
-\r
-/**\r
- Reset the system.\r
-\r
- @param ResetType warm or cold\r
- @param ResetStatus possible cause of reset\r
- @param DataSize Size of ResetData in bytes\r
- @param ResetData Optional Unicode string\r
-\r
-**/\r
-VOID\r
-EFIAPI\r
-KbcResetSystem (\r
- IN EFI_RESET_TYPE ResetType,\r
- IN EFI_STATUS ResetStatus,\r
- IN UINTN DataSize,\r
- IN VOID *ResetData OPTIONAL\r
- )\r
-{\r
- switch (ResetType) {\r
- case EfiResetWarm:\r
- ResetWarm ();\r
- break;\r
- case EfiResetCold:\r
- ResetCold ();\r
- break;\r
- case EfiResetShutdown:\r
- ResetShutdown ();\r
- break;\r
- default:\r
- return;\r
- }\r
-\r
- //\r
- // Given we should have reset getting here would be bad\r
- //\r
- ASSERT (FALSE);\r
-}\r
-\r
-/**\r
- Initialize the state information for the Reset Architectural Protocol.\r
-\r
- @param ImageHandle Handle of the loaded driver \r
- @param SystemTable Pointer to the System Table\r
-\r
- @retval EFI_SUCCESS Thread can be successfully created\r
- @retval EFI_OUT_OF_RESOURCES Cannot allocate protocol data structure\r
- @retval EFI_DEVICE_ERROR Cannot create the timer service\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-InitializeReset (\r
- IN EFI_HANDLE ImageHandle,\r
- IN EFI_SYSTEM_TABLE *SystemTable\r
- )\r
-{\r
- EFI_STATUS Status;\r
-\r
- //\r
- // Make sure the Reset Architectural Protocol is not already installed in the system\r
- //\r
- ASSERT_PROTOCOL_ALREADY_INSTALLED (NULL, &gEfiResetArchProtocolGuid);\r
-\r
- //\r
- // Hook the runtime service table\r
- //\r
- SystemTable->RuntimeServices->ResetSystem = KbcResetSystem;\r
-\r
- //\r
- // Now install the Reset RT AP on a new handle\r
- //\r
- Status = gBS->InstallMultipleProtocolInterfaces (\r
- &mResetHandle,\r
- &gEfiResetArchProtocolGuid, NULL,\r
- NULL\r
- );\r
- ASSERT_EFI_ERROR (Status);\r
-\r
- return Status;\r
-}\r