Home | History | Annotate | Download | only in KbcResetDxe
      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