2 * COPYRIGHT: See COPYING.ARM in the top level directory
3 * PROJECT: ReactOS UEFI Boot Library
4 * FILE: boot/environ/lib/misc/util.c
5 * PURPOSE: Boot Library Utility Functions
6 * PROGRAMMER: Alex Ionescu (alex.ionescu@reactos.org)
9 /* INCLUDES ******************************************************************/
13 /* DATA VARIABLES ************************************************************/
19 PVOID UtlMcDisplayMessageRoutine
;
20 PVOID UtlMcUpdateMessageRoutine
;
22 PVOID UtlProgressRoutine
;
23 PVOID UtlProgressContext
;
24 PVOID UtlProgressInfoRoutine
;
25 ULONG UtlProgressGranularity
;
26 ULONG UtlCurrentPercentComplete
;
27 ULONG UtlNextUpdatePercentage
;
28 BOOLEAN UtlProgressNeedsInfoUpdate
;
29 PVOID UtlProgressInfo
;
31 /* FUNCTIONS *****************************************************************/
34 * @name EfiGetEfiStatusCode
36 * The EfiGetEfiStatusCode routine converts an NT Status to an EFI status.
39 * NT Status code to be converted.
41 * @remark Only certain, specific NT status codes are converted to EFI codes.
43 * @return The corresponding EFI Status code, EFI_NO_MAPPING otherwise.
53 case STATUS_NOT_SUPPORTED
:
54 return EFI_UNSUPPORTED
;
55 case STATUS_DISK_FULL
:
56 return EFI_VOLUME_FULL
;
57 case STATUS_INSUFFICIENT_RESOURCES
:
58 return EFI_OUT_OF_RESOURCES
;
59 case STATUS_MEDIA_WRITE_PROTECTED
:
60 return EFI_WRITE_PROTECTED
;
61 case STATUS_DEVICE_NOT_READY
:
62 return EFI_NOT_STARTED
;
63 case STATUS_DEVICE_ALREADY_ATTACHED
:
64 return EFI_ALREADY_STARTED
;
65 case STATUS_MEDIA_CHANGED
:
66 return EFI_MEDIA_CHANGED
;
67 case STATUS_INVALID_PARAMETER
:
68 return EFI_INVALID_PARAMETER
;
69 case STATUS_ACCESS_DENIED
:
70 return EFI_ACCESS_DENIED
;
71 case STATUS_BUFFER_TOO_SMALL
:
72 return EFI_BUFFER_TOO_SMALL
;
73 case STATUS_DISK_CORRUPT_ERROR
:
74 return EFI_VOLUME_CORRUPTED
;
75 case STATUS_REQUEST_ABORTED
:
79 case STATUS_IO_DEVICE_ERROR
:
80 return EFI_DEVICE_ERROR
;
81 case STATUS_INVALID_BUFFER_SIZE
:
82 return EFI_BAD_BUFFER_SIZE
;
83 case STATUS_NOT_FOUND
:
85 case STATUS_DRIVER_UNABLE_TO_LOAD
:
86 return EFI_LOAD_ERROR
;
88 return EFI_NO_MAPPING
;
94 return EFI_NO_MAPPING
;
99 * @name EfiGetNtStatusCode
101 * The EfiGetNtStatusCode routine converts an EFI Status to an NT status.
104 * EFI Status code to be converted.
106 * @remark Only certain, specific EFI status codes are converted to NT codes.
108 * @return The corresponding NT Status code, STATUS_UNSUCCESSFUL otherwise.
113 _In_ EFI_STATUS EfiStatus
120 return STATUS_NOT_FOUND
;
122 return STATUS_NO_MEDIA
;
123 case EFI_MEDIA_CHANGED
:
124 return STATUS_MEDIA_CHANGED
;
125 case EFI_ACCESS_DENIED
:
126 case EFI_SECURITY_VIOLATION
:
127 return STATUS_ACCESS_DENIED
;
129 case EFI_NO_RESPONSE
:
130 return STATUS_TIMEOUT
;
132 return STATUS_NO_MATCH
;
133 case EFI_NOT_STARTED
:
134 return STATUS_DEVICE_NOT_READY
;
135 case EFI_ALREADY_STARTED
:
136 return STATUS_DEVICE_ALREADY_ATTACHED
;
138 return STATUS_REQUEST_ABORTED
;
139 case EFI_VOLUME_FULL
:
140 return STATUS_DISK_FULL
;
141 case EFI_DEVICE_ERROR
:
142 return STATUS_IO_DEVICE_ERROR
;
143 case EFI_WRITE_PROTECTED
:
144 return STATUS_MEDIA_WRITE_PROTECTED
;
145 /* @FIXME: ReactOS Headers don't yet have this */
146 //case EFI_OUT_OF_RESOURCES:
147 //return STATUS_INSUFFICIENT_NVRAM_RESOURCES;
148 case EFI_VOLUME_CORRUPTED
:
149 return STATUS_DISK_CORRUPT_ERROR
;
150 case EFI_BUFFER_TOO_SMALL
:
151 return STATUS_BUFFER_TOO_SMALL
;
153 return STATUS_SUCCESS
;
155 return STATUS_DRIVER_UNABLE_TO_LOAD
;
156 case EFI_INVALID_PARAMETER
:
157 return STATUS_INVALID_PARAMETER
;
158 case EFI_UNSUPPORTED
:
159 return STATUS_NOT_SUPPORTED
;
160 case EFI_BAD_BUFFER_SIZE
:
161 return STATUS_INVALID_BUFFER_SIZE
;
163 return STATUS_UNSUCCESSFUL
;
176 UtlMcDisplayMessageRoutine
= 0;
177 UtlMcUpdateMessageRoutine
= 0;
179 UtlProgressRoutine
= 0;
180 UtlProgressContext
= 0;
181 UtlProgressInfoRoutine
= 0;
182 UtlProgressGranularity
= 0;
183 UtlCurrentPercentComplete
= 0;
184 UtlNextUpdatePercentage
= 0;
185 UtlProgressNeedsInfoUpdate
= 0;
188 return STATUS_SUCCESS
;
196 #ifdef BL_KD_SUPPORTED
197 /* Stop the boot debugger*/
201 /* Reset the machine */
202 EfiResetSystem(EfiResetCold
);