BaseSiScheduleResetLib.c 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. /** @file
  2. Reset scheduling library services
  3. Copyright (c) 2019 Intel Corporation. All rights reserved. <BR>
  4. SPDX-License-Identifier: BSD-2-Clause-Patent
  5. **/
  6. #include <Library/DebugLib.h>
  7. #include <Library/ResetSystemLib.h>
  8. #include <Uefi/UefiBaseType.h>
  9. #include <Uefi.h>
  10. #include <Pi/PiMultiPhase.h>
  11. #include <Library/HobLib.h>
  12. #include <Private/Library/SiScheduleResetLib.h>
  13. #include <Private/SiScheduleResetHob.h>
  14. /**
  15. This function returns SiScheduleResetHob for library use
  16. **/
  17. SI_SCHEDULE_RESET_HOB *
  18. SiScheduleGetResetData (
  19. VOID
  20. );
  21. /**
  22. This function performs reset based on SiScheduleResetHob
  23. @retval BOOLEAN The function returns FALSE if no reset is required
  24. **/
  25. BOOLEAN
  26. SiScheduleResetPerformReset (
  27. VOID
  28. )
  29. {
  30. UINTN DataSize;
  31. SI_SCHEDULE_RESET_HOB *SiScheduleResetHob;
  32. if (!SiScheduleResetIsRequired ()) {
  33. return FALSE;
  34. }
  35. SiScheduleResetHob = SiScheduleGetResetData ();
  36. if (SiScheduleResetHob == NULL) {
  37. return TRUE;
  38. }
  39. DEBUG ((DEBUG_INFO, "SiScheduleResetPerformReset : Reset Type = 0x%x\n", SiScheduleResetHob->ResetType));
  40. switch (SiScheduleResetHob->ResetType) {
  41. case EfiResetWarm:
  42. ResetWarm ();
  43. break;
  44. case EfiResetCold:
  45. ResetCold ();
  46. break;
  47. case EfiResetShutdown:
  48. ResetShutdown ();
  49. break;
  50. case EfiResetPlatformSpecific:
  51. DataSize = sizeof (PCH_RESET_DATA);
  52. ResetPlatformSpecific (DataSize, &SiScheduleResetHob->ResetData);
  53. break;
  54. }
  55. // Code should never reach here
  56. ASSERT (FALSE);
  57. return TRUE;
  58. }