]> git.proxmox.com Git - mirror_edk2.git/blame_incremental - MdeModulePkg/Core/Pei/Reset/Reset.c
MdeModulePkg: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / MdeModulePkg / Core / Pei / Reset / Reset.c
... / ...
CommitLineData
1/** @file\r
2 Pei Core Reset System Support\r
3\r
4Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>\r
5SPDX-License-Identifier: BSD-2-Clause-Patent\r
6\r
7**/\r
8\r
9#include "PeiMain.h"\r
10\r
11/**\r
12\r
13 Core version of the Reset System\r
14\r
15\r
16 @param PeiServices An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation.\r
17\r
18 @retval EFI_NOT_AVAILABLE_YET PPI not available yet.\r
19 @retval EFI_DEVICE_ERROR Did not reset system.\r
20 Otherwise, resets the system.\r
21\r
22**/\r
23EFI_STATUS\r
24EFIAPI\r
25PeiResetSystem (\r
26 IN CONST EFI_PEI_SERVICES **PeiServices\r
27 )\r
28{\r
29 EFI_STATUS Status;\r
30 EFI_PEI_RESET_PPI *ResetPpi;\r
31\r
32 //\r
33 // Attempt to use newer ResetSystem2(). If this returns, then ResetSystem2()\r
34 // is not available.\r
35 //\r
36 PeiResetSystem2 (EfiResetCold, EFI_SUCCESS, 0, NULL);\r
37\r
38 //\r
39 // Look for PEI Reset System PPI\r
40 //\r
41 Status = PeiServicesLocatePpi (\r
42 &gEfiPeiResetPpiGuid,\r
43 0,\r
44 NULL,\r
45 (VOID **)&ResetPpi\r
46 );\r
47 if (!EFI_ERROR (Status)) {\r
48 return ResetPpi->ResetSystem (PeiServices);\r
49 }\r
50\r
51 //\r
52 // Report Status Code that Reset PPI is not available.\r
53 //\r
54 REPORT_STATUS_CODE (\r
55 EFI_ERROR_CODE | EFI_ERROR_MINOR,\r
56 (EFI_SOFTWARE_PEI_CORE | EFI_SW_PS_EC_RESET_NOT_AVAILABLE)\r
57 );\r
58\r
59 //\r
60 // No reset PPIs are available yet.\r
61 //\r
62 return EFI_NOT_AVAILABLE_YET;\r
63}\r
64\r
65/**\r
66 Resets the entire platform.\r
67\r
68 @param[in] ResetType The type of reset to perform.\r
69 @param[in] ResetStatus The status code for the reset.\r
70 @param[in] DataSize The size, in bytes, of ResetData.\r
71 @param[in] ResetData For a ResetType of EfiResetCold, EfiResetWarm, or EfiResetShutdown\r
72 the data buffer starts with a Null-terminated string, optionally\r
73 followed by additional binary data. The string is a description\r
74 that the caller may use to further indicate the reason for the\r
75 system reset. ResetData is only valid if ResetStatus is something\r
76 other than EFI_SUCCESS unless the ResetType is EfiResetPlatformSpecific\r
77 where a minimum amount of ResetData is always required.\r
78\r
79**/\r
80VOID\r
81EFIAPI\r
82PeiResetSystem2 (\r
83 IN EFI_RESET_TYPE ResetType,\r
84 IN EFI_STATUS ResetStatus,\r
85 IN UINTN DataSize,\r
86 IN VOID *ResetData OPTIONAL\r
87 )\r
88{\r
89 EFI_STATUS Status;\r
90 EFI_PEI_RESET2_PPI *Reset2Ppi;\r
91\r
92 //\r
93 // Look for PEI Reset System 2 PPI\r
94 //\r
95 Status = PeiServicesLocatePpi (\r
96 &gEfiPeiReset2PpiGuid,\r
97 0,\r
98 NULL,\r
99 (VOID **)&Reset2Ppi\r
100 );\r
101 if (!EFI_ERROR (Status)) {\r
102 Reset2Ppi->ResetSystem (ResetType, ResetStatus, DataSize, ResetData);\r
103 return;\r
104 }\r
105\r
106 //\r
107 // Report Status Code that Reset2 PPI is not available.\r
108 //\r
109 REPORT_STATUS_CODE (\r
110 EFI_ERROR_CODE | EFI_ERROR_MINOR,\r
111 (EFI_SOFTWARE_PEI_CORE | EFI_SW_PS_EC_RESET_NOT_AVAILABLE)\r
112 );\r
113}\r