]> git.proxmox.com Git - mirror_edk2.git/blame_incremental - MdePkg/Include/Uefi/UefiSpec.h
Renamed to follow Coding Style
[mirror_edk2.git] / MdePkg / Include / Uefi / UefiSpec.h
... / ...
Content-type: text/html ]> git.proxmox.com Git - mirror_edk2.git/blame_incremental - MdePkg/Include/Uefi/UefiSpec.h


500 - Internal Server Error

Malformed UTF-8 character (fatal) at (eval 6) line 1, <$fd> line 707.
CommitLineData
1/** @file\r
2 Include file that supports UEFI.\r
3\r
4 This include file must only contain things defined in the UEFI 2.1 specification.\r
5 If a code construct is defined in the UEFI 2.1 specification it must be included\r
6 by this include file.\r
7\r
8 Copyright (c) 2006 - 2008, Intel Corporation\r
9 All rights reserved. This program and the accompanying materials\r
10 are licensed and made available under the terms and conditions of the BSD License\r
11 which accompanies this distribution. The full text of the license may be found at\r
12 http://opensource.org/licenses/bsd-license.php\r
13\r
14 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
15 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
16\r
17**/\r
18\r
19#ifndef __UEFI_SPEC_H__\r
20#define __UEFI_SPEC_H__\r
21\r
22#include <Uefi/UefiMultiPhase.h>\r
23\r
24#include <Protocol/DevicePath.h>\r
25#include <Protocol/SimpleTextIn.h>\r
26#include <Protocol/SimpleTextOut.h>\r
27\r
28///\r
29/// Enumeration of EFI memory allocation types.\r
30///\r
31typedef enum {\r
32 ///\r
33 /// Allocate any available range of pages that satisfies the request\r
34 ///\r
35 AllocateAnyPages,\r
36 ///\r
37 /// Allocate any available range of pages whose uppermost address is less than \r
38 /// or equal to a specified maximum address\r
39 ///\r
40 AllocateMaxAddress,\r
41 ///\r
42 /// Allocate pages at a specified address\r
43 ///\r
44 AllocateAddress,\r
45 ///\r
46 /// Maximum enumeration value that may be used for bounds checking\r
47 ///\r
48 MaxAllocateType\r
49} EFI_ALLOCATE_TYPE;\r
50\r
51//\r
52// Bit definitions for EFI_TIME.Daylight\r
53//\r
54#define EFI_TIME_ADJUST_DAYLIGHT 0x01\r
55#define EFI_TIME_IN_DAYLIGHT 0x02\r
56\r
57///\r
58/// Value definition for EFI_TIME.TimeZone\r
59///\r
60#define EFI_UNSPECIFIED_TIMEZONE 0x07FF\r
61\r
62//\r
63// Memory cacheability attributes\r
64//\r
65#define EFI_MEMORY_UC 0x0000000000000001ULL\r
66#define EFI_MEMORY_WC 0x0000000000000002ULL\r
67#define EFI_MEMORY_WT 0x0000000000000004ULL\r
68#define EFI_MEMORY_WB 0x0000000000000008ULL\r
69#define EFI_MEMORY_UCE 0x0000000000000010ULL\r
70//\r
71// Physical memory protection attributes\r
72//\r
73#define EFI_MEMORY_WP 0x0000000000001000ULL\r
74#define EFI_MEMORY_RP 0x0000000000002000ULL\r
75#define EFI_MEMORY_XP 0x0000000000004000ULL\r
76//\r
77// Runtime memory attribute\r
78//\r
79#define EFI_MEMORY_RUNTIME 0x8000000000000000ULL\r
80\r
81///\r
82/// Memory descriptor version number\r
83///\r
84#define EFI_MEMORY_DESCRIPTOR_VERSION 1\r
85\r
86///\r
87/// Definition of an EFI memory descriptor\r
88///\r
89typedef struct {\r
90 ///\r
91 /// Type of the memory region. See EFI_MEMORY_TYPE\r
92 ///\r
93 UINT32 Type;\r
94 ///\r
95 /// Physical address of the first byte of the memory region. Must aligned \r
96 /// on a 4 KB boundary.\r
97 ///\r
98 EFI_PHYSICAL_ADDRESS PhysicalStart;\r
99 ///\r
100 /// Virtual address of the first byte of the memory region. Must aligned \r
101 /// on a 4 KB boundary.\r
102 ///\r
103 EFI_VIRTUAL_ADDRESS VirtualStart;\r
104 ///\r
105 /// Number of 4KB pages in the memory region.\r
106 ///\r
107 UINT64 NumberOfPages;\r
108 ///\r
109 /// Attributes of the memory region that describe the bit mask of capabilities\r
110 /// for that memory region, and not necessarily the current settings for that \r
111 /// memory region.\r
112 ///\r
113 UINT64 Attribute;\r
114} EFI_MEMORY_DESCRIPTOR;\r
115\r
116/**\r
117 Allocates memory pages from the system.\r
118\r
119 @param Type The type of allocation to perform.\r
120 @param MemoryType The type of memory to allocate.\r
121 @param Pages The number of contiguous 4 KB pages to allocate.\r
122 @param Memory Pointer to a physical address. On input, the way in which the address is\r
123 used depends on the value of Type.\r
124\r
125 @retval EFI_SUCCESS The requested pages were allocated.\r
126 @retval EFI_INVALID_PARAMETER 1) Type is not AllocateAnyPages or\r
127 AllocateMaxAddress or AllocateAddress.\r
128 2) MemoryType is in the range\r
129 EfiMaxMemoryType..0x7FFFFFFF.\r
130 @retval EFI_OUT_OF_RESOURCES The pages could not be allocated.\r
131 @retval EFI_NOT_FOUND The requested pages could not be found.\r
132\r
133**/\r
134typedef\r
135EFI_STATUS\r
136(EFIAPI *EFI_ALLOCATE_PAGES)(\r
137 IN EFI_ALLOCATE_TYPE Type,\r
138 IN EFI_MEMORY_TYPE MemoryType,\r
139 IN UINTN Pages,\r
140 IN OUT EFI_PHYSICAL_ADDRESS *Memory\r
141 );\r
142\r
143/**\r
144 Frees memory pages.\r
145\r
146 @param Memory The base physical address of the pages to be freed.\r
147 @param Pages The number of contiguous 4 KB pages to free.\r
148\r
149 @retval EFI_SUCCESS The requested pages were freed.\r
150 @retval EFI_INVALID_PARAMETER Memory is not a page-aligned address or Pages is invalid.\r
151 @retval EFI_NOT_FOUND The requested memory pages were not allocated with\r
152 AllocatePages().\r
153\r
154**/\r
155typedef\r
156EFI_STATUS\r
157(EFIAPI *EFI_FREE_PAGES)(\r
158 IN EFI_PHYSICAL_ADDRESS Memory,\r
159 IN UINTN Pages\r
160 );\r
161\r
162/**\r
163 Returns the current memory map.\r
164\r
165 @param MemoryMapSize A pointer to the size, in bytes, of the MemoryMap buffer.\r
166 On input, this is the size of the buffer allocated by the caller.\r
167 On output, it is the size of the buffer returned by the firmware if\r
168 the buffer was large enough, or the size of the buffer needed to contain\r
169 the map if the buffer was too small.\r
170 @param MemoryMap A pointer to the buffer in which firmware places the current memory\r
171 map.\r
172 @param MapKey A pointer to the location in which firmware returns the key for the\r
173 current memory map.\r
174 @param DescriptorSize A pointer to the location in which firmware returns the size, in bytes, of\r
175 an individual EFI_MEMORY_DESCRIPTOR.\r
176 @param DescriptorVersion A pointer to the location in which firmware returns the version number\r
177 associated with the EFI_MEMORY_DESCRIPTOR.\r
178\r
179 @retval EFI_SUCCESS The memory map was returned in the MemoryMap buffer.\r
180 @retval EFI_BUFFER_TOO_SMALL The MemoryMap buffer was too small. The current buffer size\r
181 needed to hold the memory map is returned in MemoryMapSize.\r
182 @retval EFI_INVALID_PARAMETER 1) MemoryMapSize is NULL.\r
183 2) The MemoryMap buffer is not too small and MemoryMap is\r
184 NULL.\r
185\r
186**/\r
187typedef\r
188EFI_STATUS\r
189(EFIAPI *EFI_GET_MEMORY_MAP)(\r
190 IN OUT UINTN *MemoryMapSize,\r
191 IN OUT EFI_MEMORY_DESCRIPTOR *MemoryMap,\r
192 OUT UINTN *MapKey,\r
193 OUT UINTN *DescriptorSize,\r
194 OUT UINT32 *DescriptorVersion\r
195 );\r
196\r
197/**\r
198 Allocates pool memory.\r
199\r
200 @param PoolType The type of pool to allocate.\r
201 @param Size The number of bytes to allocate from the pool.\r
202 @param Buffer A pointer to a pointer to the allocated buffer if the call succeeds;\r
203 undefined otherwise.\r
204\r
205 @retval EFI_SUCCESS The requested number of bytes was allocated.\r
206 @retval EFI_OUT_OF_RESOURCES The pool requested could not be allocated.\r
207 @retval EFI_INVALID_PARAMETER PoolType was invalid.\r
208\r
209**/\r
210typedef\r
211EFI_STATUS\r
212(EFIAPI *EFI_ALLOCATE_POOL)(\r
213 IN EFI_MEMORY_TYPE PoolType,\r
214 IN UINTN Size,\r
215 OUT VOID **Buffer\r
216 );\r
217\r
218/**\r
219 Returns pool memory to the system.\r
220\r
221 @param Buffer Pointer to the buffer to free.\r
222\r
223 @retval EFI_SUCCESS The memory was returned to the system.\r
224 @retval EFI_INVALID_PARAMETER Buffer was invalid.\r
225\r
226**/\r
227typedef\r
228EFI_STATUS\r
229(EFIAPI *EFI_FREE_POOL)(\r
230 IN VOID *Buffer\r
231 );\r
232\r
233/**\r
234 Changes the runtime addressing mode of EFI firmware from physical to virtual.\r
235\r
236 @param MemoryMapSize The size in bytes of VirtualMap.\r
237 @param DescriptorSize The size in bytes of an entry in the VirtualMap.\r
238 @param DescriptorVersion The version of the structure entries in VirtualMap.\r
239 @param VirtualMap An array of memory descriptors which contain new virtual\r
240 address mapping information for all runtime ranges.\r
241\r
242 @retval EFI_SUCCESS The virtual address map has been applied.\r
243 @retval EFI_UNSUPPORTED EFI firmware is not at runtime, or the EFI firmware is already in\r
244 virtual address mapped mode.\r
245 @retval EFI_INVALID_PARAMETER DescriptorSize or DescriptorVersion is invalid.\r
246 @retval EFI_NO_MAPPING A virtual address was not supplied for a range in the memory\r
247 map that requires a mapping.\r
248 @retval EFI_NOT_FOUND A virtual address was supplied for an address that is not found\r
249 in the memory map.\r
250\r
251**/\r
252typedef\r
253EFI_STATUS\r
254(EFIAPI *EFI_SET_VIRTUAL_ADDRESS_MAP)(\r
255 IN UINTN MemoryMapSize,\r
256 IN UINTN DescriptorSize,\r
257 IN UINT32 DescriptorVersion,\r
258 IN EFI_MEMORY_DESCRIPTOR *VirtualMap\r
259 );\r
260\r
261/**\r
262 Connects one or more drivers to a controller.\r
263\r
264 @param ControllerHandle The handle of the controller to which driver(s) are to be connected.\r
265 @param DriverImageHandle A pointer to an ordered list handles that support the\r
266 EFI_DRIVER_BINDING_PROTOCOL.\r
267 @param RemainingDevicePath A pointer to the device path that specifies a child of the\r
268 controller specified by ControllerHandle.\r
269 @param Recursive If TRUE, then ConnectController() is called recursively\r
270 until the entire tree of controllers below the controller specified\r
271 by ControllerHandle have been created. If FALSE, then\r
272 the tree of controllers is only expanded one level.\r
273\r
274 @retval EFI_SUCCESS 1) One or more drivers were connected to ControllerHandle.\r
275 2) No drivers were connected to ControllerHandle, but\r
276 RemainingDevicePath is not NULL, and it is an End Device\r
277 Path Node.\r
278 @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.\r
279 @retval EFI_NOT_FOUND 1) There are no EFI_DRIVER_BINDING_PROTOCOL instances\r
280 present in the system.\r
281 2) No drivers were connected to ControllerHandle.\r
282\r
283**/\r
284typedef\r
285EFI_STATUS\r
286(EFIAPI *EFI_CONNECT_CONTROLLER)(\r
287 IN EFI_HANDLE ControllerHandle,\r
288 IN EFI_HANDLE *DriverImageHandle, OPTIONAL\r
289 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath, OPTIONAL\r
290 IN BOOLEAN Recursive\r
291 );\r
292\r
293/**\r
294 Disconnects one or more drivers from a controller.\r
295\r
296 @param ControllerHandle The handle of the controller from which driver(s) are to be disconnected.\r
297 @param DriverImageHandle The driver to disconnect from ControllerHandle.\r
298 If DriverImageHandle is NULL, then all the drivers currently managing\r
299 ControllerHandle are disconnected from ControllerHandle.\r
300 @param ChildHandle The handle of the child to destroy.\r
301 If ChildHandle is NULL, then all the children of ControllerHandle are\r
302 destroyed before the drivers are disconnected from ControllerHandle.\r
303\r
304 @retval EFI_SUCCESS 1) One or more drivers were disconnected from the controller.\r
305 2) On entry, no drivers are managing ControllerHandle.\r
306 3) DriverImageHandle is not NULL, and on entry\r
307 DriverImageHandle is not managing ControllerHandle.\r
308 @retval EFI_INVALID_PARAMETER 1) ControllerHandle is not a valid EFI_HANDLE.\r
309 2) DriverImageHandle is not NULL, and it is not a valid EFI_HANDLE.\r
310 3) ChildHandle is not NULL, and it is not a valid EFI_HANDLE.\r
311 4) DriverImageHandle does not support the EFI_DRIVER_BINDING_PROTOCOL.\r
312 @retval EFI_OUT_OF_RESOURCES There are not enough resources available to disconnect any drivers from\r
313 ControllerHandle.\r
314 @retval EFI_DEVICE_ERROR The controller could not be disconnected because of a device error.\r
315\r
316**/\r
317typedef\r
318EFI_STATUS\r
319(EFIAPI *EFI_DISCONNECT_CONTROLLER)(\r
320 IN EFI_HANDLE ControllerHandle,\r
321 IN EFI_HANDLE DriverImageHandle, OPTIONAL\r
322 IN EFI_HANDLE ChildHandle OPTIONAL\r
323 );\r
324\r
325\r
326\r
327//\r
328// ConvertPointer DebugDisposition type.\r
329//\r
330#define EFI_OPTIONAL_PTR 0x00000001\r
331#define EFI_OPTIONAL_POINTER EFI_OPTIONAL_PTR\r
332\r
333/**\r
334 Determines the new virtual address that is to be used on subsequent memory accesses.\r
335\r
336 @param DebugDisposition Supplies type information for the pointer being converted.\r
337 @param Address A pointer to a pointer that is to be fixed to be the value needed\r
338 for the new virtual address mappings being applied.\r
339\r
340 @retval EFI_SUCCESS The pointer pointed to by Address was modified.\r
341 @retval EFI_INVALID_PARAMETER 1) Address is NULL.\r
342 2) *Address is NULL and DebugDisposition does\r
343 not have the EFI_OPTIONAL_PTR bit set.\r
344 @retval EFI_NOT_FOUND The pointer pointed to by Address was not found to be part\r
345 of the current memory map. This is normally fatal.\r
346\r
347**/\r
348typedef\r
349EFI_STATUS\r
350(EFIAPI *EFI_CONVERT_POINTER)(\r
351 IN UINTN DebugDisposition,\r
352 IN OUT VOID **Address\r
353 );\r
354\r
355\r
356//\r
357// These types can be ORed together as needed - for example,\r
358// EVT_TIMER might be Ored with EVT_NOTIFY_WAIT or\r
359// EVT_NOTIFY_SIGNAL.\r
360//\r
361#define EVT_TIMER 0x80000000\r
362#define EVT_RUNTIME 0x40000000\r
363#define EVT_NOTIFY_WAIT 0x00000100\r
364#define EVT_NOTIFY_SIGNAL 0x00000200\r
365\r
366#define EVT_SIGNAL_EXIT_BOOT_SERVICES 0x00000201\r
367#define EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE 0x60000202\r
368\r
369//\r
370// The event's NotifyContext pointer points to a runtime memory\r
371// address.\r
372// The event is deprecated in UEFI2.0 and later specifications.\r
373//\r
374#define EVT_RUNTIME_CONTEXT 0x20000000\r
375\r
376\r
377/**\r
378 Invoke a notification event\r
379\r
380 @param Event Event whose notification function is being invoked.\r
381 @param Context Pointer to the notification function's context,\r
382 which is implementation-dependent.\r
383\r
384**/\r
385typedef\r
386VOID\r
387(EFIAPI *EFI_EVENT_NOTIFY)(\r
388 IN EFI_EVENT Event,\r
389 IN VOID *Context\r
390 );\r
391\r
392/**\r
393 Creates an event.\r
394\r
395 @param Type The type of event to create and its mode and attributes.\r
396 @param NotifyTpl The task priority level of event notifications, if needed.\r
397 @param NotifyFunction Pointer to the event's notification function, if any.\r
398 @param NotifyContext Pointer to the notification function's context; corresponds to parameter\r
399 Context in the notification function.\r
400 @param Event Pointer to the newly created event if the call succeeds; undefined\r
401 otherwise.\r
402\r
403 @retval EFI_SUCCESS The event structure was created.\r
404 @retval EFI_INVALID_PARAMETER One or more parameters are invalid.\r
405 @retval EFI_OUT_OF_RESOURCES The event could not be allocated.\r
406\r
407**/\r
408typedef\r
409EFI_STATUS\r
410(EFIAPI *EFI_CREATE_EVENT)(\r
411 IN UINT32 Type,\r
412 IN EFI_TPL NotifyTpl,\r
413 IN EFI_EVENT_NOTIFY NotifyFunction,\r
414 IN VOID *NotifyContext,\r
415 OUT EFI_EVENT *Event\r
416 );\r
417\r
418/**\r
419 Creates an event in a group.\r
420\r
421 @param Type The type of event to create and its mode and attributes.\r
422 @param NotifyTpl The task priority level of event notifications,if needed.\r
423 @param NotifyFunction Pointer to the event's notification function, if any.\r
424 @param NotifyContext Pointer to the notification function's context; corresponds to parameter\r
425 Context in the notification function.\r
426 @param EventGroup Pointer to the unique identifier of the group to which this event belongs.\r
427 If this is NULL, then the function behaves as if the parameters were passed\r
428 to CreateEvent.\r
429 @param Event Pointer to the newly created event if the call succeeds; undefined\r
430 otherwise.\r
431\r
432 @retval EFI_SUCCESS The event structure was created.\r
433 @retval EFI_INVALID_PARAMETER One or more parameters are invalid.\r
434 @retval EFI_OUT_OF_RESOURCES The event could not be allocated.\r
435\r
436**/\r
437typedef\r
438EFI_STATUS\r
439(EFIAPI *EFI_CREATE_EVENT_EX)(\r
440 IN UINT32 Type,\r
441 IN EFI_TPL NotifyTpl,\r
442 IN EFI_EVENT_NOTIFY NotifyFunction OPTIONAL,\r
443 IN CONST VOID *NotifyContext OPTIONAL,\r
444 IN CONST EFI_GUID *EventGroup OPTIONAL,\r
445 OUT EFI_EVENT *Event\r
446 );\r
447\r
448///\r
449/// Timer delay types\r
450///\r
451typedef enum {\r
452 ///\r
453 /// An event's timer settings is to be cancelled and not trigger time is to be set\r
454 ///\r
455 TimerCancel,\r
456 ///\r
457 /// An event is to be signalled periodically at a specified interval from the current time.\r
458 ///\r
459 TimerPeriodic,\r
460 ///\r
461 /// An event is to be signalled once at a specified interval from the current time.\r
462 ///\r
463 TimerRelative\r
464} EFI_TIMER_DELAY;\r
465\r
466/**\r
467 Sets the type of timer and the trigger time for a timer event.\r
468\r
469 @param Event The timer event that is to be signaled at the specified time.\r
470 @param Type The type of time that is specified in TriggerTime.\r
471 @param TriggerTime The number of 100ns units until the timer expires.\r
472 A TriggerTime of 0 is legal.\r
473 If Type is TimerRelative and TriggerTime is 0, then the timer\r
474 event will be signaled on the next timer tick.\r
475 If Type is TimerPeriodic and TriggerTime is 0, then the timer\r
476 event will be signaled on every timer tick.\r
477\r
478 @retval EFI_SUCCESS The event has been set to be signaled at the requested time.\r
479 @retval EFI_INVALID_PARAMETER Event or Type is not valid.\r
480\r
481**/\r
482typedef\r
483EFI_STATUS\r
484(EFIAPI *EFI_SET_TIMER)(\r
485 IN EFI_EVENT Event,\r
486 IN EFI_TIMER_DELAY Type,\r
487 IN UINT64 TriggerTime\r
488 );\r
489\r
490/**\r
491 Signals an event.\r
492\r
493 @param Event The event to signal.\r
494\r
495 @retval EFI_SUCCESS The event has been signaled.\r
496\r
497**/\r
498typedef\r
499EFI_STATUS\r
500(EFIAPI *EFI_SIGNAL_EVENT)(\r
501 IN EFI_EVENT Event\r
502 );\r
503\r
504/**\r
505 Stops execution until an event is signaled.\r
506\r
507 @param NumberOfEvents The number of events in the Event array.\r
508 @param Event An array of EFI_EVENT.\r
509 @param Index Pointer to the index of the event which satisfied the wait condition.\r
510\r
511 @retval EFI_SUCCESS The event indicated by Index was signaled.\r
512 @retval EFI_INVALID_PARAMETER 1) NumberOfEvents is 0.\r
513 2) The event indicated by Index is of type\r
514 EVT_NOTIFY_SIGNAL.\r
515 @retval EFI_UNSUPPORTED The current TPL is not TPL_APPLICATION.\r
516\r
517**/\r
518typedef\r
519EFI_STATUS\r
520(EFIAPI *EFI_WAIT_FOR_EVENT)(\r
521 IN UINTN NumberOfEvents,\r
522 IN EFI_EVENT *Event,\r
523 OUT UINTN *Index\r
524 );\r
525\r
526/**\r
527 Closes an event.\r
528\r
529 @param Event The event to close.\r
530\r
531 @retval EFI_SUCCESS The event has been closed.\r
532\r
533**/\r
534typedef\r
535EFI_STATUS\r
536(EFIAPI *EFI_CLOSE_EVENT)(\r
537 IN EFI_EVENT Event\r
538 );\r
539\r
540/**\r
541 Checks whether an event is in the signaled state.\r
542\r
543 @param Event The event to check.\r
544\r
545 @retval EFI_SUCCESS The event is in the signaled state.\r
546 @retval EFI_NOT_READY The event is not in the signaled state.\r
547 @retval EFI_INVALID_PARAMETER Event is of type EVT_NOTIFY_SIGNAL.\r
548\r
549**/\r
550typedef\r
551EFI_STATUS\r
552(EFIAPI *EFI_CHECK_EVENT)(\r
553 IN EFI_EVENT Event\r
554 );\r
555\r
556\r
557//\r
558// Task priority level\r
559//\r
560#define TPL_APPLICATION 4\r
561#define TPL_CALLBACK 8\r
562#define TPL_NOTIFY 16\r
563#define TPL_HIGH_LEVEL 31\r
564\r
565\r
566/**\r
567 Raises a task's priority level and returns its previous level.\r
568\r
569 @param NewTpl The new task priority level.\r
570\r
571 @return Previous task priority level\r
572\r
573**/\r
574typedef\r
575EFI_TPL\r
576(EFIAPI *EFI_RAISE_TPL)(\r
577 IN EFI_TPL NewTpl\r
578 );\r
579\r
580/**\r
581 Restores a task's priority level to its previous value.\r
582\r
583 @param OldTpl The previous task priority level to restore.\r
584\r
585**/\r
586typedef\r
587VOID\r
588(EFIAPI *EFI_RESTORE_TPL)(\r
589 IN EFI_TPL OldTpl\r
590 );\r
591\r
592/**\r
593 Returns the value of a variable.\r
594\r
595 @param VariableName A Null-terminated Unicode string that is the name of the\r
596 vendor's variable.\r
597 @param VendorGuid A unique identifier for the vendor.\r
598 @param Attributes If not NULL, a pointer to the memory location to return the\r
599 attributes bitmask for the variable.\r
600 @param DataSize On input, the size in bytes of the return Data buffer.\r
601 On output the size of data returned in Data.\r
602 @param Data The buffer to return the contents of the variable.\r
603\r
604 @retval EFI_SUCCESS The function completed successfully.\r
605 @retval EFI_NOT_FOUND The variable was not found.\r
606 @retval EFI_BUFFER_TOO_SMALL The DataSize is too small for the result.\r
607 @retval EFI_INVALID_PARAMETER VariableName is NULL.\r
608 @retval EFI_INVALID_PARAMETER VendorGuid is NULL.\r
609 @retval EFI_INVALID_PARAMETER DataSize is NULL.\r
610 @retval EFI_INVALID_PARAMETER The DataSize is not too small and Data is NULL.\r
611 @retval EFI_DEVICE_ERROR The variable could not be retrieved due to a hardware error.\r
612 @retval EFI_SECURITY_VIOLATION The variable could not be retrieved due to an authentication failure.\r
613\r
614**/\r
615typedef\r
616EFI_STATUS\r
617(EFIAPI *EFI_GET_VARIABLE)(\r
618 IN CHAR16 *VariableName,\r
619 IN EFI_GUID *VendorGuid,\r
620 OUT UINT32 *Attributes, OPTIONAL\r
621 IN OUT UINTN *DataSize,\r
622 OUT VOID *Data\r
623 );\r
624\r
625/**\r
626 Enumerates the current variable names.\r
627\r
628 @param VariableNameSize The size of the VariableName buffer.\r
629 @param VariableName On input, supplies the last VariableName that was returned\r
630 by GetNextVariableName(). On output, returns the Nullterminated\r
631 Unicode string of the current variable.\r
632 @param VendorGuid On input, supplies the last VendorGuid that was returned by\r
633 GetNextVariableName(). On output, returns the\r
634 VendorGuid of the current variable.\r
635\r
636 @retval EFI_SUCCESS The function completed successfully.\r
637 @retval EFI_NOT_FOUND The next variable was not found.\r
638 @retval EFI_BUFFER_TOO_SMALL The VariableNameSize is too small for the result.\r
639 @retval EFI_INVALID_PARAMETER VariableNameSize is NULL.\r
640 @retval EFI_INVALID_PARAMETER VariableName is NULL.\r
641 @retval EFI_INVALID_PARAMETER VendorGuid is NULL.\r
642 @retval EFI_DEVICE_ERROR The variable could not be retrieved due to a hardware error.\r
643\r
644**/\r
645typedef\r
646EFI_STATUS\r
647(EFIAPI *EFI_GET_NEXT_VARIABLE_NAME)(\r
648 IN OUT UINTN *VariableNameSize,\r
649 IN OUT CHAR16 *VariableName,\r
650 IN OUT EFI_GUID *VendorGuid\r
651 );\r
652\r
653/**\r
654 Sets the value of a variable.\r
655\r
656 @param VariableName A Null-terminated Unicode string that is the name of the\r
657 vendor's variable.\r
658 @param VendorGuid A unique identifier for the vendor.\r
659 @param Attributes Attributes bitmask to set for the variable.\r
660 @param DataSize The size in bytes of the Data buffer.\r
661 @param Data The contents for the variable.\r
662\r
663 @retval EFI_SUCCESS The firmware has successfully stored the variable and its data as\r
664 defined by the Attributes.\r
665 @retval EFI_INVALID_PARAMETER An invalid combination of attribute bits was supplied, or the\r
666 DataSize exceeds the maximum allowed.\r
667 @retval EFI_INVALID_PARAMETER VariableName is an empty Unicode string.\r
668 @retval EFI_OUT_OF_RESOURCES Not enough storage is available to hold the variable and its data.\r
669 @retval EFI_DEVICE_ERROR The variable could not be retrieved due to a hardware error.\r
670 @retval EFI_WRITE_PROTECTED The variable in question is read-only.\r
671 @retval EFI_WRITE_PROTECTED The variable in question cannot be deleted.\r
672 @retval EFI_SECURITY_VIOLATION The variable could not be retrieved due to an authentication failure.\r
673 @retval EFI_NOT_FOUND The variable trying to be updated or deleted was not found.\r
674\r
675**/\r
676typedef\r
677EFI_STATUS\r
678(EFIAPI *EFI_SET_VARIABLE)(\r
679 IN CHAR16 *VariableName,\r
680 IN EFI_GUID *VendorGuid,\r
681 IN UINT32 Attributes,\r
682 IN UINTN DataSize,\r
683 IN VOID *Data\r
684 );\r
685\r
686\r
687///\r
688/// This provides the capabilities of the\r
689/// real time clock device as exposed through the EFI interfaces.\r
690///\r
691typedef struct {\r
692 ///\r
693 /// Provides the reporting resolution of the real-time clock device in\r
694 /// counts per second. For a normal PC-AT CMOS RTC device, this\r
695 /// value would be 1 Hz, or 1, to indicate that the device only reports\r
696 /// the time to the resolution of 1 second.\r
697 ///\r
698 UINT32 Resolution;\r
699 ///\r
700 /// Provides the timekeeping accuracy of the real-time clock in an\r
701 /// error rate of 1E-6 parts per million. For a clock with an accuracy\r
702 /// of 50 parts per million, the value in this field would be\r
703 /// 50,000,000.\r
704 ///\r
705 UINT32 Accuracy;\r
706 ///\r
707