1 /** @file 2 Driver entry for KbcReset driver. 3 4 Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.<BR> 5 This program and the accompanying materials 6 are licensed and made available under the terms and conditions of the BSD License 7 which accompanies this distribution. The full text of the license may be found at 8 http://opensource.org/licenses/bsd-license.php 9 10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 12 **/ 13 14 #include <PiDxe.h> 15 16 #include <Library/DebugLib.h> 17 #include <Library/UefiBootServicesTableLib.h> 18 #include <Library/ResetSystemLib.h> 19 20 #include <Protocol/Reset.h> 21 22 // 23 // The handle onto which the Reset Architectural Protocol is installed 24 // 25 EFI_HANDLE mResetHandle = NULL; 26 27 /** 28 Reset the system. 29 30 @param ResetType warm or cold 31 @param ResetStatus possible cause of reset 32 @param DataSize Size of ResetData in bytes 33 @param ResetData Optional Unicode string 34 35 **/ 36 VOID 37 EFIAPI 38 KbcResetSystem ( 39 IN EFI_RESET_TYPE ResetType, 40 IN EFI_STATUS ResetStatus, 41 IN UINTN DataSize, 42 IN VOID *ResetData OPTIONAL 43 ) 44 { 45 switch (ResetType) { 46 case EfiResetWarm: 47 ResetWarm (); 48 break; 49 case EfiResetCold: 50 ResetCold (); 51 break; 52 case EfiResetShutdown: 53 ResetShutdown (); 54 break; 55 default: 56 return; 57 } 58 59 // 60 // Given we should have reset getting here would be bad 61 // 62 ASSERT (FALSE); 63 } 64 65 /** 66 Initialize the state information for the Reset Architectural Protocol. 67 68 @param ImageHandle Handle of the loaded driver 69 @param SystemTable Pointer to the System Table 70 71 @retval EFI_SUCCESS Thread can be successfully created 72 @retval EFI_OUT_OF_RESOURCES Cannot allocate protocol data structure 73 @retval EFI_DEVICE_ERROR Cannot create the timer service 74 75 **/ 76 EFI_STATUS 77 EFIAPI 78 InitializeReset ( 79 IN EFI_HANDLE ImageHandle, 80 IN EFI_SYSTEM_TABLE *SystemTable 81 ) 82 { 83 EFI_STATUS Status; 84 85 // 86 // Make sure the Reset Architectural Protocol is not already installed in the system 87 // 88 ASSERT_PROTOCOL_ALREADY_INSTALLED (NULL, &gEfiResetArchProtocolGuid); 89 90 // 91 // Hook the runtime service table 92 // 93 SystemTable->RuntimeServices->ResetSystem = KbcResetSystem; 94 95 // 96 // Now install the Reset RT AP on a new handle 97 // 98 Status = gBS->InstallMultipleProtocolInterfaces ( 99 &mResetHandle, 100 &gEfiResetArchProtocolGuid, NULL, 101 NULL 102 ); 103 ASSERT_EFI_ERROR (Status); 104 105 return Status; 106 } 107