BaseSiScheduleResetLibFsp.c 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  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 <Uefi/UefiBaseType.h>
  8. #include <Uefi.h>
  9. #include <Pi/PiMultiPhase.h>
  10. #include <Pi/PiPeiCis.h>
  11. #include <Library/PeiServicesTablePointerLib.h>
  12. #include <Library/HobLib.h>
  13. #include <Private/Library/SiScheduleResetLib.h>
  14. #include <Private/SiScheduleResetHob.h>
  15. /**
  16. This function returns SiScheduleResetHob for library use
  17. **/
  18. SI_SCHEDULE_RESET_HOB *
  19. SiScheduleGetResetData (
  20. VOID
  21. );
  22. /**
  23. This function performs reset based on SiScheduleResetHob
  24. @retval BOOLEAN The function returns FALSE if no reset is required
  25. **/
  26. BOOLEAN
  27. SiScheduleResetPerformReset (
  28. VOID
  29. )
  30. {
  31. UINTN DataSize;
  32. SI_SCHEDULE_RESET_HOB *SiScheduleResetHob;
  33. if (!SiScheduleResetIsRequired ()) {
  34. return FALSE;
  35. }
  36. SiScheduleResetHob = SiScheduleGetResetData ();
  37. if (SiScheduleResetHob == NULL) {
  38. return TRUE;
  39. }
  40. DEBUG ((DEBUG_INFO, "SiScheduleResetPerformReset : Reset Type = 0x%x\n", SiScheduleResetHob->ResetType));
  41. if (SiScheduleResetHob->ResetType == EfiResetPlatformSpecific) {
  42. DataSize = sizeof (PCH_RESET_DATA);
  43. (*GetPeiServicesTablePointer ())->ResetSystem2 (SiScheduleResetHob->ResetType, EFI_SUCCESS, DataSize, &SiScheduleResetHob->ResetData);
  44. } else {
  45. (*GetPeiServicesTablePointer ())->ResetSystem2 (SiScheduleResetHob->ResetType, EFI_SUCCESS, 0, NULL);
  46. }
  47. //
  48. // Code should never reach here
  49. //
  50. ASSERT (FALSE);
  51. return TRUE;
  52. }