[BOOTMGR]: Cleanup, less magic, one bug fix.
[reactos.git] / reactos / boot / environ / include / bl.h
1 /*
2 * COPYRIGHT: See COPYING.ARM in the top level directory
3 * PROJECT: ReactOS UEFI Boot Library
4 * FILE: boot/environ/include/bl.h
5 * PURPOSE: Main Boot Library Header
6 * PROGRAMMER: Alex Ionescu (alex.ionescu@reactos.org)
7 */
8
9 #ifndef _BL_H
10 #define _BL_H
11
12 /* INCLUDES ******************************************************************/
13
14 /* C Headers */
15 #include <stdlib.h>
16 #include <stdio.h>
17 #include <wchar.h>
18
19 /* NT Base Headers */
20 #include <ntifs.h>
21
22 /* NDK Headers */
23 #include <ntndk.h>
24
25 /* NT SafeInt Header */
26 #include <ntintsafe.h>
27
28 /* PE Headers */
29 #include <ntimage.h>
30
31 /* ACPI Headers */
32 #include <drivers/acpi/acpi.h>
33
34 /* UEFI Headers */
35 #include <Uefi.h>
36 #include <DevicePath.h>
37 #include <LoadedImage.h>
38 #include <GraphicsOutput.h>
39 #include <UgaDraw.h>
40 #include <BlockIo.h>
41 #include <Acpi.h>
42 #include <GlobalVariable.h>
43
44 /* Registry Headers */
45 #define __FREELDR_H
46 #include <cmlib.h>
47
48 /* DEFINES *******************************************************************/
49
50 DEFINE_GUID(BadMemoryGuid, 0x54B8275B, 0xD431, 0x473F, 0xAC, 0xFB, 0xE5, 0x36, 0xA0, 0x84, 0x94, 0xA3);
51
52 #define BL_APPLICATION_FLAG_CONVERTED_FROM_EFI 0x01
53
54 #define BL_APP_ENTRY_SIGNATURE "BTAPENT"
55
56 #define BOOT_APPLICATION_SIGNATURE_1 'TOOB'
57 #define BOOT_APPLICATION_SIGNATURE_2 ' PPA'
58
59 #define BOOT_MEMORY_TRANSLATION_TYPE_PHYSICAL 0
60 #define BOOT_MEMORY_TRANSLATION_TYPE_VIRTUAL 1
61
62 #define BOOT_APPLICATION_VERSION 2
63 #define BL_MEMORY_DATA_VERSION 1
64 #define BL_RETURN_ARGUMENTS_VERSION 1
65 #define BL_FIRMWARE_DESCRIPTOR_VERSION 2
66
67 #define BL_RETURN_ARGUMENTS_NO_PAE_FLAG 0x40
68
69 #define BL_APPLICATION_ENTRY_FLAG_NO_GUID 0x01
70 #define BL_APPLICATION_ENTRY_BCD_OPTIONS_INTERNAL 0x02
71 #define BL_APPLICATION_ENTRY_WINLOAD 0x04
72 #define BL_APPLICATION_ENTRY_STARTUP 0x08
73 #define BL_APPLICATION_ENTRY_REBOOT_ON_ERROR 0x20
74 #define BL_APPLICATION_ENTRY_NTLDR 0x40
75 #define BL_APPLICATION_ENTRY_BCD_OPTIONS_EXTERNAL 0x80
76 #define BL_APPLICATION_ENTRY_WINRESUME 0x100
77 #define BL_APPLICATION_ENTRY_SETUPLDR 0x200
78 #define BL_APPLICATION_ENTRY_BOOTSECTOR 0x400
79 #define BL_APPLICATION_ENTRY_BOOTMGR 0x1000
80 #define BL_APPLICATION_ENTRY_DISPLAY_ORDER 0x800000
81 #define BL_APPLICATION_ENTRY_FIXED_SEQUENCE 0x20000000
82 #define BL_APPLICATION_ENTRY_RECOVERY 0x40000000
83
84 #define BL_CONTEXT_PAGING_ON 1
85 #define BL_CONTEXT_INTERRUPTS_ON 2
86
87 #define BL_MM_FLAG_USE_FIRMWARE_FOR_MEMORY_MAP_BUFFERS 0x01
88 #define BL_MM_FLAG_REQUEST_COALESCING 0x02
89
90 #define BL_MM_ADD_DESCRIPTOR_COALESCE_FLAG 0x01
91 #define BL_MM_ADD_DESCRIPTOR_TRUNCATE_FLAG 0x02
92 #define BL_MM_ADD_DESCRIPTOR_NEVER_COALESCE_FLAG 0x10
93 #define BL_MM_ADD_DESCRIPTOR_NEVER_TRUNCATE_FLAG 0x20
94 #define BL_MM_ADD_DESCRIPTOR_UPDATE_LIST_POINTER_FLAG 0x2000
95
96 #define BL_MM_REQUEST_DEFAULT_TYPE 1
97 #define BL_MM_REQUEST_TOP_DOWN_TYPE 2
98
99 #define BL_MM_REMOVE_VIRTUAL_REGION_FLAG 0x80000000
100
101 #define BL_LIBRARY_FLAG_NO_DISPLAY 0x01
102 #define BL_LIBRARY_FLAG_REINITIALIZE 0x02
103 #define BL_LIBRARY_FLAG_REINITIALIZE_ALL 0x04
104 #define BL_LIBRARY_FLAG_ZERO_HEAP_ALLOCATIONS_ON_FREE 0x10
105 #define BL_LIBRARY_FLAG_INITIALIZATION_COMPLETED 0x20
106 #define BL_LIBRARY_FLAG_NO_GRAPHICS_CONSOLE 0x800
107
108 #define BL_DISPLAY_GRAPHICS_FORCED_VIDEO_MODE_FLAG 0x01
109 #define BL_DISPLAY_GRAPHICS_FORCED_HIGH_RES_MODE_FLAG 0x02
110
111 #define BL_HT_VALUE_IS_INLINE 0x01
112
113 #define BL_FS_REGISTER_AT_HEAD_FLAG 1
114
115 #define BL_BLOCK_DEVICE_REMOVABLE_FLAG 0x01
116 #define BL_BLOCK_DEVICE_PRESENT_FLAG 0x02
117 #define BL_BLOCK_DEVICE_VIRTUAL_FLAG 0x04
118
119 #define BL_MEMORY_CLASS_SHIFT 28
120
121 #define BL_FILE_READ_ACCESS 0x01
122 #define BL_FILE_WRITE_ACCESS 0x02
123 #define BL_DIRECTORY_ACCESS 0x04
124 #define BL_UNKNOWN_ACCESS 0x10
125
126 #define BL_DEVICE_READ_ACCESS 0x01
127 #define BL_DEVICE_WRITE_ACCESS 0x02
128
129 #define BL_DEVICE_ENTRY_OPENED 0x01
130 #define BL_DEVICE_ENTRY_READ_ACCESS 0x02
131 #define BL_DEVICE_ENTRY_WRITE_ACCESS 0x04
132
133 #define BL_FILE_ENTRY_OPENED 0x01
134 #define BL_FILE_ENTRY_READ_ACCESS 0x02
135 #define BL_FILE_ENTRY_WRITE_ACCESS 0x04
136 #define BL_FILE_ENTRY_UNKNOWN_ACCESS 0x10
137
138 #define BL_IMG_VALID_FILE 0x01
139 #define BL_IMG_MEMORY_FILE 0x02
140 #define BL_IMG_REMOTE_FILE 0x04
141
142 #define BL_LOAD_IMG_VIRTUAL_BUFFER 0x01
143 #define BL_LOAD_IMG_EXISTING_BUFFER 0x04
144 #define BL_LOAD_IMG_UNKNOWN_BUFFER_FLAG 0x08
145 #define BL_LOAD_IMG_COMPUTE_SIGNATURE 0x10
146 #define BL_LOAD_IMG_COMPUTE_HASH 0x40000
147
148 /* ENUMERATIONS **************************************************************/
149
150 typedef enum _BL_COLOR
151 {
152 Black,
153 Blue,
154 Green,
155 Cyan,
156 Red,
157 Magenta,
158 Brown,
159 LtGray,
160 Gray,
161 LtBlue,
162 LtGreen,
163 LtCyan,
164 LtRed,
165 LtMagenta,
166 Yellow,
167 White
168 } BL_COLOR, *PBL_COLOR;
169
170 typedef enum _BL_MENU_POLICY
171 {
172 MenuPolicyLegacy = 0,
173 MenuPolicyStandard = 1
174 } BL_MENU_POLICY;
175
176 typedef enum _BL_MEMORY_DESCRIPTOR_TYPE
177 {
178 BlMdPhysical,
179 BlMdVirtual,
180 } BL_MEMORY_DESCRIPTOR_TYPE;
181
182 typedef enum _BL_TRANSLATION_TYPE
183 {
184 BlNone,
185 BlVirtual,
186 BlPae,
187 BlMax
188 } BL_TRANSLATION_TYPE;
189
190 typedef enum _BL_ARCH_MODE
191 {
192 BlProtectedMode,
193 BlRealMode
194 } BL_ARCH_MODE;
195
196 //
197 // Boot Device Types
198 //
199 typedef enum _BL_DEVICE_TYPE
200 {
201 DiskDevice = 0,
202 LegacyPartitionDevice = 2,
203 SerialDevice = 3,
204 UdpDevice = 4,
205 BootDevice = 5,
206 PartitionDevice = 6,
207 LocateDevice = 8,
208 } BL_DEVICE_TYPE;
209
210 //
211 // Local Device Types
212 //
213 typedef enum _BL_LOCAL_DEVICE_TYPE
214 {
215 LocalDevice = 0,
216 FloppyDevice = 1,
217 CdRomDevice = 2,
218 RamDiskDevice = 3,
219 FileDevice = 5,
220 VirtualDiskDevice = 6
221 } BL_LOCAL_DEVICE_TYPE;
222
223 //
224 // Partition types
225 //
226 typedef enum _BL_PARTITION_TYPE
227 {
228 GptPartition,
229 MbrPartition,
230 RawPartition,
231 } BL_PARTITION_TYPE;
232
233 //
234 // File Path Types
235 //
236 typedef enum _BL_PATH_TYPE
237 {
238 InternalPath = 3,
239 EfiPath = 4
240 } BL_PATH_TYPE;
241
242 //
243 // Classes of Memory
244 //
245 typedef enum _BL_MEMORY_CLASS
246 {
247 BlLoaderClass = 0xD,
248 BlApplicationClass,
249 BlSystemClass
250 } BL_MEMORY_CLASS;
251
252 //
253 // Types of Memory
254 //
255 typedef enum _BL_MEMORY_TYPE
256 {
257 //
258 // Loader Memory
259 //
260 BlLoaderMemory = 0xD0000002,
261 BlLoaderDeviceMemory = 0xD0000004,
262 BlLoaderHeap = 0xD0000005,
263 BlLoaderPageDirectory = 0xD0000006,
264 BlLoaderReferencePage = 0xD0000007,
265 BlLoaderRamDisk = 0xD0000008,
266 BlLoaderData = 0xD000000A,
267 BlLoaderRegistry = 0xD000000B,
268 BlLoaderBlockMemory = 0xD000000C,
269 BlLoaderSelfMap = 0xD000000F,
270
271 //
272 // Application Memory
273 //
274 BlApplicationReserved = 0xE0000001,
275 BlApplicationData = 0xE0000004,
276
277 //
278 // System Memory
279 //
280 BlConventionalMemory = 0xF0000001,
281 BlUnusableMemory = 0xF0000002,
282 BlReservedMemory = 0xF0000003,
283 BlEfiBootMemory = 0xF0000004,
284 BlEfiRuntimeMemory = 0xF0000006,
285 BlAcpiReclaimMemory = 0xF0000008,
286 BlAcpiNvsMemory = 0xF0000009,
287 BlDeviceIoMemory = 0xF000000A,
288 BlDevicePortMemory = 0xF000000B,
289 BlPalMemory = 0xF000000C,
290 } BL_MEMORY_TYPE;
291
292 typedef enum _BL_MEMORY_ATTR
293 {
294 //
295 // Memory Caching Attributes
296 //
297 BlMemoryUncached = 0x00000001,
298 BlMemoryWriteCombined = 0x00000002,
299 BlMemoryWriteThrough = 0x00000004,
300 BlMemoryWriteBack = 0x00000008,
301 BlMemoryUncachedExported = 0x00000010,
302 BlMemoryValidCacheAttributes = BlMemoryUncached | BlMemoryWriteCombined | BlMemoryWriteThrough | BlMemoryWriteBack | BlMemoryUncachedExported,
303 BlMemoryValidCacheAttributeMask = 0x000000FF,
304
305 //
306 // Memory Protection Attributes
307 //
308 BlMemoryWriteProtected = 0x00000100,
309 BlMemoryReadProtected = 0x00000200,
310 BlMemoryExecuteProtected = 0x00000400,
311 BlMemoryValidProtectionAttributes = BlMemoryWriteProtected | BlMemoryReadProtected | BlMemoryExecuteProtected,
312 BlMemoryValidProtectionAttributeMask = 0x0000FF00,
313
314 //
315 // Memory Allocation Attributes
316 //
317 BlMemoryUnknown = 0x00010000,
318 BlMemoryNonFixed = 0x00020000,
319 BlMemoryFixed = 0x00040000,
320 BlMemoryReserved = 0x00080000,
321 BlMemoryValidAllocationAttributes = BlMemoryNonFixed | BlMemoryFixed | BlMemoryReserved | BlMemoryUnknown,
322 BlMemoryValidAllocationAttributeMask = 0x00FF0000,
323
324 //
325 // Memory Type Attributes
326 //
327 BlMemoryRuntime = 0x01000000,
328 BlMemoryCoalesced = 0x02000000,
329 BlMemoryUpdate = 0x04000000,
330 BlMemoryNonFirmware = 0x08000000,
331 BlMemorySpecial = 0x20000000,
332 BlMemoryFirmware = 0x80000000,
333 BlMemoryValidTypeAttributes = BlMemoryRuntime | BlMemoryCoalesced | BlMemoryUpdate | BlMemoryNonFirmware | BlMemorySpecial | BlMemoryFirmware,
334 BlMemoryValidTypeAttributeMask = 0xFF000000,
335 } BL_MEMORY_ATTR;
336
337 /* CALLBACKS *****************************************************************/
338
339 struct _BL_FILE_ENTRY;
340 struct _BL_FILE_INFORMATION;
341 typedef
342 NTSTATUS
343 (*PBL_FILE_OPEN) (
344 _In_ struct _BL_FILE_ENTRY* Directory,
345 _In_ PWCHAR FileName,
346 _In_ ULONG Flags,
347 _Out_ struct _BL_FILE_ENTRY** FileEntry
348 );
349
350 typedef
351 NTSTATUS
352 (*PBL_FILE_CLOSE) (
353 _In_ struct _BL_FILE_ENTRY* FileEntry
354 );
355
356 typedef
357 NTSTATUS
358 (*PBL_FILE_READ) (
359 _In_ struct _BL_FILE_ENTRY* FileEntry,
360 _In_ PVOID Buffer,
361 _In_ ULONG Size,
362 _Out_opt_ PULONG BytesRead
363 );
364
365 typedef
366 NTSTATUS
367 (*PBL_FILE_WRITE) (
368 VOID
369 );
370
371 typedef
372 NTSTATUS
373 (*PBL_FILE_GET_NEXT) (
374 VOID
375 );
376
377 typedef
378 NTSTATUS
379 (*PBL_FILE_GET_INFO) (
380 _In_ struct _BL_FILE_ENTRY* FileEntry,
381 _Out_ struct _BL_FILE_INFORMATION* FileInfo
382 );
383
384 typedef
385 NTSTATUS
386 (*PBL_FILE_SET_INFO) (
387 _In_ struct _BL_FILE_ENTRY* FileEntry,
388 _In_ struct _BL_FILE_INFORMATION* FileInfo
389 );
390
391 typedef
392 NTSTATUS
393 (*PBL_FS_INIT_CALLBACK) (
394 VOID
395 );
396
397 typedef
398 NTSTATUS
399 (*PBL_FS_DESTROY_CALLBACK) (
400 VOID
401 );
402
403 typedef
404 NTSTATUS
405 (*PBL_FS_MOUNT_CALLBACK) (
406 _In_ ULONG DeviceId,
407 _In_ ULONG Unknown,
408 _Out_ struct _BL_FILE_ENTRY** FileEntry
409 );
410
411 typedef
412 NTSTATUS
413 (*PBL_FS_PURGE_CALLBACK) (
414 VOID
415 );
416
417 typedef
418 NTSTATUS
419 (*PBL_FILE_DESTROY_CALLBACK) (
420 _In_ PVOID Entry
421 );
422
423 struct _BL_TEXT_CONSOLE;
424 struct _BL_DISPLAY_STATE;
425 struct _BL_DISPLAY_MODE;
426 struct _BL_INPUT_CONSOLE;
427 struct _BL_REMOTE_CONSOLE;
428 struct _BL_GRAPHICS_CONSOLE;
429 typedef
430 VOID
431 (*PCONSOLE_DESTRUCT) (
432 _In_ struct _BL_TEXT_CONSOLE* Console
433 );
434
435 typedef
436 NTSTATUS
437 (*PCONSOLE_REINITIALIZE) (
438 _In_ struct _BL_TEXT_CONSOLE* Console
439 );
440
441 typedef
442 NTSTATUS
443 (*PCONSOLE_GET_TEXT_STATE) (
444 _In_ struct _BL_TEXT_CONSOLE* Console,
445 _Out_ struct _BL_DISPLAY_STATE* TextState
446 );
447
448 typedef
449 NTSTATUS
450 (*PCONSOLE_SET_TEXT_STATE) (
451 _In_ struct _BL_TEXT_CONSOLE* Console,
452 _In_ ULONG Flags,
453 _In_ struct _BL_DISPLAY_STATE* TextState
454 );
455
456 typedef
457 NTSTATUS
458 (*PCONSOLE_GET_TEXT_RESOLUTION) (
459 _In_ struct _BL_TEXT_CONSOLE* Console,
460 _Out_ PULONG TextResolution
461 );
462
463 typedef
464 NTSTATUS
465 (*PCONSOLE_SET_TEXT_RESOLUTION) (
466 _In_ struct _BL_TEXT_CONSOLE* Console,
467 _In_ ULONG NewTextResolution,
468 _Out_ PULONG OldTextResolution
469 );
470
471 typedef
472 NTSTATUS
473 (*PCONSOLE_CLEAR_TEXT) (
474 _In_ struct _BL_TEXT_CONSOLE* Console,
475 _In_ BOOLEAN LineOnly
476 );
477
478 typedef
479 BOOLEAN
480 (*PCONSOLE_IS_ENABLED) (
481 _In_ struct _BL_GRAPHICS_CONSOLE* Console
482 );
483
484 typedef
485 NTSTATUS
486 (*PCONSOLE_GET_GRAPHICAL_RESOLUTION) (
487 _In_ struct _BL_GRAPHICS_CONSOLE* Console,
488 _Out_ struct _BL_DISPLAY_MODE* DisplayMode
489 );
490
491 typedef
492 NTSTATUS
493 (*PCONSOLE_SET_GRAPHICAL_RESOLUTION) (
494 _In_ struct _BL_GRAPHICS_CONSOLE* Console,
495 _In_ struct _BL_DISPLAY_MODE DisplayMode
496 );
497
498 typedef
499 NTSTATUS
500 (*PCONSOLE_ENABLE) (
501 _In_ struct _BL_GRAPHICS_CONSOLE* Console,
502 _In_ BOOLEAN Enable
503 );
504
505 typedef
506 NTSTATUS
507 (*PCONSOLE_WRITE_TEXT) (
508 _In_ struct _BL_TEXT_CONSOLE* Console,
509 _In_ PCHAR Text,
510 _In_ ULONG Attribute
511 );
512
513 typedef
514 BOOLEAN
515 (*PBL_TBL_LOOKUP_ROUTINE) (
516 _In_ PVOID Entry,
517 _In_ PVOID Argument1,
518 _In_ PVOID Argument2,
519 _In_ PVOID Argument3,
520 _In_ PVOID Argument4
521 );
522
523 typedef
524 NTSTATUS
525 (*PBL_TBL_MAP_ROUTINE) (
526 _In_ PVOID Entry,
527 _In_ ULONG EntryIndex
528 );
529
530 typedef
531 NTSTATUS
532 (*PBL_TBL_SET_ROUTINE) (
533 _In_ PVOID Entry
534 );
535
536 typedef
537 NTSTATUS
538 (*PBL_IO_DESTROY_ROUTINE) (
539 VOID
540 );
541
542 struct _BL_HASH_ENTRY;
543 typedef
544 BOOLEAN
545 (*PBL_HASH_TABLE_COMPARE_FUNCTION) (
546 _In_ struct _BL_HASH_ENTRY* Entry1,
547 _In_ struct _BL_HASH_ENTRY* Entry2
548 );
549
550 typedef
551 ULONG
552 (*PBL_HASH_TABLE_HASH_FUNCTION) (
553 _In_ struct _BL_HASH_ENTRY* Entry,
554 _In_ ULONG TableSize
555 );
556
557 struct _BL_DEVICE_ENTRY;
558 struct _BL_DEVICE_DESCRIPTOR;
559 struct _BL_DEVICE_INFORMATION;
560
561 typedef
562 NTSTATUS
563 (*PBL_DEVICE_ENUMERATE_DEVICE_CLASS) (
564 VOID
565 );
566
567 typedef
568 NTSTATUS
569 (*PBL_DEVICE_OPEN) (
570 _In_ struct _BL_DEVICE_DESCRIPTOR* Device,
571 _In_ struct _BL_DEVICE_ENTRY* DeviceEntry
572 );
573
574 typedef
575 NTSTATUS
576 (*PBL_DEVICE_CLOSE) (
577 _In_ struct _BL_DEVICE_ENTRY* DeviceEntry
578 );
579
580 typedef
581 NTSTATUS
582 (*PBL_DEVICE_READ) (
583 _In_ struct _BL_DEVICE_ENTRY* DeviceEntry,
584 _In_ PVOID Buffer,
585 _In_ ULONG Size,
586 _Out_ PULONG BytesRead
587 );
588
589 typedef
590 NTSTATUS
591 (*PBL_DEVICE_WRITE) (
592 VOID
593 );
594
595 typedef
596 NTSTATUS
597 (*PBL_DEVICE_GET_INFORMATION) (
598 _In_ struct _BL_DEVICE_ENTRY* DeviceEntry,
599 _Out_ struct _BL_DEVICE_INFORMATION* DeviceInformation
600 );
601
602 typedef
603 NTSTATUS
604 (*PBL_DEVICE_SET_INFORMATION) (
605 _In_ struct _BL_DEVICE_ENTRY* DeviceEntry,
606 _In_ struct _BL_DEVICE_INFORMATION* DeviceInformation
607 );
608
609 typedef
610 NTSTATUS
611 (*PBL_DEVICE_RESET) (
612 VOID
613 );
614
615 typedef
616 NTSTATUS
617 (*PBL_DEVICE_FLUSH) (
618 VOID
619 );
620
621 typedef
622 NTSTATUS
623 (*PBL_DEVICE_CREATE) (
624 VOID
625 );
626
627
628 /* DATA STRUCTURES ***********************************************************/
629
630 typedef struct _BL_LIBRARY_PARAMETERS
631 {
632 ULONG LibraryFlags;
633 ULONG TranslationType;
634 ULONG MinimumAllocationCount;
635 ULONG MinimumHeapSize;
636 ULONG HeapAllocationAttributes;
637 PWCHAR ApplicationBaseDirectory;
638 ULONG DescriptorCount;
639 PWCHAR FontBaseDirectory;
640 } BL_LIBRARY_PARAMETERS, *PBL_LIBRARY_PARAMETERS;
641
642 /* This should eventually go into a more public header */
643 typedef struct _BOOT_APPLICATION_PARAMETER_BLOCK
644 {
645 /* This header tells the library what image we're dealing with */
646 ULONG Signature[2];
647 ULONG Version;
648 ULONG Size;
649 ULONG ImageType;
650 ULONG MemoryTranslationType;
651
652 /* Where is the image located */
653 ULONGLONG ImageBase;
654 ULONG ImageSize;
655
656 /* Offset to BL_MEMORY_DATA */
657 ULONG MemoryDataOffset;
658
659 /* Offset to BL_APPLICATION_ENTRY */
660 ULONG AppEntryOffset;
661
662 /* Offset to BL_DEVICE_DESCRPIPTOR */
663 ULONG BootDeviceOffset;
664
665 /* Offset to BL_FIRMWARE_PARAMETERS */
666 ULONG FirmwareParametersOffset;
667
668 /* Offset to BL_RETURN_ARGUMENTS */
669 ULONG ReturnArgumentsOffset;
670 } BOOT_APPLICATION_PARAMETER_BLOCK, *PBOOT_APPLICATION_PARAMETER_BLOCK;
671
672 typedef struct _BL_MEMORY_DATA
673 {
674 ULONG Version;
675 ULONG MdListOffset;
676 ULONG DescriptorCount;
677 ULONG DescriptorSize;
678 ULONG DescriptorOffset;
679 } BL_MEMORY_DATA, *PBL_MEMORY_DATA;
680
681 typedef struct _BL_FIRMWARE_DESCRIPTOR
682 {
683 ULONG Version;
684 ULONG Unknown;
685 EFI_HANDLE ImageHandle;
686 EFI_SYSTEM_TABLE *SystemTable;
687 } BL_FIRMWARE_DESCRIPTOR, *PBL_FIRMWARE_DESCRIPTOR;
688
689 typedef struct _BL_RETURN_ARGUMENTS
690 {
691 ULONG Version;
692 NTSTATUS Status;
693 ULONG Flags;
694 ULONGLONG DataSize;
695 ULONGLONG DataPage;
696 } BL_RETURN_ARGUMENTS, *PBL_RETURN_ARGUMENTS;
697
698 typedef struct _BL_MEMORY_DESCRIPTOR
699 {
700 LIST_ENTRY ListEntry;
701 union
702 {
703 struct
704 {
705 ULONGLONG BasePage;
706 ULONGLONG VirtualPage;
707 };
708 struct
709 {
710 ULONGLONG BaseAddress;
711 ULONGLONG VirtualAddress;
712 };
713 };
714 ULONGLONG PageCount;
715 ULONG Flags;
716 BL_MEMORY_TYPE Type;
717 } BL_MEMORY_DESCRIPTOR, *PBL_MEMORY_DESCRIPTOR;
718
719 typedef struct _BL_BCD_OPTION
720 {
721 ULONG Type;
722 ULONG DataOffset;
723 ULONG DataSize;
724 ULONG ListOffset;
725 ULONG NextEntryOffset;
726 ULONG Empty;
727 } BL_BCD_OPTION, *PBL_BCD_OPTION;
728
729 typedef struct _BL_APPLICATION_ENTRY
730 {
731 CHAR Signature[8];
732 ULONG Flags;
733 GUID Guid;
734 ULONG Unknown[4];
735 BL_BCD_OPTION BcdData;
736 } BL_APPLICATION_ENTRY, *PBL_APPLICATION_ENTRY;
737
738 typedef struct _BL_LOADED_APPLICATION_ENTRY
739 {
740 ULONG Flags;
741 GUID Guid;
742 PBL_BCD_OPTION BcdData;
743 } BL_LOADED_APPLICATION_ENTRY, *PBL_LOADED_APPLICATION_ENTRY;
744
745 typedef struct _BL_MENU_STATUS
746 {
747 union
748 {
749 struct
750 {
751 ULONG AnyKey : 1;
752 ULONG AdvancedOptions : 1;
753 ULONG BootOptions : 1;
754 ULONG OemKey : 1;
755 ULONG Exit : 1;
756 ULONG Reserved : 27;
757 };
758 ULONG AsULong;
759 };
760 ULONG BootIndex;
761 WCHAR KeyValue;
762 } BL_MENU_STATUS, *PL_MENU_STATUS;
763
764 typedef enum _BL_BOOT_ERROR_STATUS
765 {
766 Reboot = 1,
767 Recover = 2,
768 RecoverOem = 3,
769 OsSelection = 4,
770 NextOs = 5,
771 TryAgain = 6,
772 AdvancedOptions = 7,
773 BootOptions = 8
774 } BL_BOOT_ERROR_STATUS;
775
776 typedef struct _BL_HARDDISK_DEVICE
777 {
778 ULONG PartitionType;
779 union
780 {
781 struct
782 {
783 ULONG PartitionSignature;
784 } Mbr;
785
786 struct
787 {
788 GUID PartitionSignature;
789 } Gpt;
790
791 struct
792 {
793 ULONG DiskNumber;
794 } Raw;
795 };
796 } BL_HARDDISK_DEVICE;
797
798 typedef struct _BL_LOCAL_DEVICE
799 {
800 ULONG Type;
801 union
802 {
803 struct
804 {
805 ULONG DriveNumber;
806 } FloppyDisk;
807
808 BL_HARDDISK_DEVICE HardDisk;
809
810 struct
811 {
812 PHYSICAL_ADDRESS ImageBase;
813 LARGE_INTEGER ImageSize;
814 ULONG ImageOffset;
815 } RamDisk;
816
817 ULONG File; // unknown for now
818 };
819 } BL_LOCAL_DEVICE, *PBL_LOCAL_DEVICE;
820
821 typedef struct _BL_DEVICE_DESCRIPTOR
822 {
823 DEVICE_TYPE DeviceType;
824 ULONG Flags;
825 ULONG Size;
826 ULONG Unknown;
827 union
828 {
829 BL_LOCAL_DEVICE Local;
830
831 struct
832 {
833 ULONG Unknown;
834 } Remote;
835
836 struct
837 {
838 union
839 {
840 ULONG PartitionNumber;
841 } Mbr;
842
843 union
844 {
845 GUID PartitionGuid;
846 } Gpt;
847
848 BL_LOCAL_DEVICE Disk;
849 } Partition;
850 };
851 } BL_DEVICE_DESCRIPTOR, *PBL_DEVICE_DESCRIPTOR;
852
853 typedef struct _BL_FILE_PATH_DESCRIPTOR
854 {
855 ULONG Version;
856 ULONG Length;
857 ULONG PathType;
858 UCHAR Path[ANYSIZE_ARRAY];
859 } BL_FILE_PATH_DESCRIPTOR, *PBL_FILE_PATH_DESCRIPTOR;
860
861 typedef struct _BL_WINDOWS_LOAD_OPTIONS
862 {
863 CHAR Signature[8];
864 ULONG Version;
865 ULONG Length;
866 ULONG OsPathOffset;
867 WCHAR LoadOptions[ANYSIZE_ARRAY];
868 } BL_WINDOWS_LOAD_OPTIONS, *PBL_WINDOWS_LOAD_OPTIONS;
869
870 typedef struct _BL_ARCH_CONTEXT
871 {
872 BL_ARCH_MODE Mode;
873 BL_TRANSLATION_TYPE TranslationType;
874 ULONG ContextFlags;
875 } BL_ARCH_CONTEXT, *PBL_ARCH_CONTEXT;
876
877 typedef struct _BL_MEMORY_DESCRIPTOR_LIST
878 {
879 LIST_ENTRY ListHead;
880 PLIST_ENTRY First;
881 PLIST_ENTRY This;
882 ULONG Type;
883 } BL_MEMORY_DESCRIPTOR_LIST, *PBL_MEMORY_DESCRIPTOR_LIST;
884
885 typedef struct _BL_ADDRESS_RANGE
886 {
887 ULONGLONG Minimum;
888 ULONGLONG Maximum;
889 } BL_ADDRESS_RANGE, *PBL_ADDRESS_RANGE;
890
891 typedef struct _BL_FILE_INFORMATION
892 {
893 ULONGLONG Size;
894 ULONGLONG Offset;
895 PWCHAR FsName;
896 ULONG Flags;
897 } BL_FILE_INFORMATION, *PBL_FILE_INFORMATION;
898
899 typedef struct _BL_FILE_CALLBACKS
900 {
901 PBL_FILE_OPEN Open;
902 PBL_FILE_CLOSE Close;
903 PBL_FILE_READ Read;
904 PBL_FILE_WRITE Write;
905 PBL_FILE_GET_NEXT GetNext;
906 PBL_FILE_GET_INFO GetInfo;
907 PBL_FILE_SET_INFO SetInfo;
908 } BL_FILE_CALLBACKS, *PBL_FILE_CALLBACKS;
909
910 typedef struct _BL_FILE_ENTRY
911 {
912 PWCHAR FilePath;
913 ULONG DeviceId;
914 ULONG FileId;
915 ULONG Flags;
916 ULONG ReferenceCount;
917 ULONG Unknown;
918 ULONGLONG TotalBytesRead;
919 ULONGLONG Unknown2;
920 BL_FILE_CALLBACKS Callbacks;
921 PVOID FsSpecificData;
922 } BL_FILE_ENTRY, *PBL_FILE_ENTRY;
923
924 typedef struct _BL_FILE_SYSTEM_ENTRY
925 {
926 LIST_ENTRY ListEntry;
927 PBL_FS_INIT_CALLBACK InitCallback;
928 PBL_FS_DESTROY_CALLBACK DestroyCallback;
929 PBL_FS_MOUNT_CALLBACK MountCallback;
930 PBL_FS_PURGE_CALLBACK PurgeCallback;
931 } BL_FILE_SYSTEM_ENTRY, *PBL_FILE_SYSTEM_ENTRY;
932
933 typedef struct _BL_FILE_SYSTEM_REGISTRATION_TABLE
934 {
935 PBL_FS_INIT_CALLBACK Init;
936 PBL_FS_DESTROY_CALLBACK Destroy;
937 PBL_FS_MOUNT_CALLBACK Mount;
938 PBL_FS_PURGE_CALLBACK Purge;
939 } BL_FILE_SYSTEM_REGISTRATION_TABLE;
940
941 typedef struct _BL_DISPLAY_STATE
942 {
943 ULONG BgColor;
944 ULONG FgColor;
945 ULONG XPos;
946 ULONG YPos;
947 ULONG CursorVisible;
948 } BL_DISPLAY_STATE, *PBL_DISPLAY_STATE;
949
950 typedef struct _BL_DISPLAY_MODE
951 {
952 ULONG HRes;
953 ULONG VRes;
954 ULONG HRes2;
955 } BL_DISPLAY_MODE, *PBL_DISPLAY_MODE;
956
957 typedef struct _BL_TEXT_CONSOLE_VTABLE
958 {
959 PCONSOLE_DESTRUCT Destruct;
960 PCONSOLE_REINITIALIZE Reinitialize;
961 PCONSOLE_GET_TEXT_STATE GetTextState;
962 PCONSOLE_SET_TEXT_STATE SetTextState;
963 PCONSOLE_GET_TEXT_RESOLUTION GetTextResolution;
964 PCONSOLE_SET_TEXT_RESOLUTION SetTextResolution;
965 PCONSOLE_CLEAR_TEXT ClearText;
966 PCONSOLE_WRITE_TEXT WriteText;
967 } BL_TEXT_CONSOLE_VTABLE, *PBL_TEXT_CONSOLE_VTABLE;
968
969 typedef struct _BL_GRAPHICS_CONSOLE_VTABLE
970 {
971 BL_TEXT_CONSOLE_VTABLE Text;
972 PCONSOLE_IS_ENABLED IsEnabled;
973 PCONSOLE_ENABLE Enable;
974 PVOID GetConsoleResolution;
975 PCONSOLE_GET_GRAPHICAL_RESOLUTION GetGraphicalResolution;
976 PCONSOLE_GET_GRAPHICAL_RESOLUTION GetOriginalResolution;
977 PCONSOLE_SET_GRAPHICAL_RESOLUTION SetOriginalResolution;
978 /// more for graphics ///
979 } BL_GRAPHICS_CONSOLE_VTABLE, *PBL_GRAPHICS_CONSOLE_VTABLE;
980
981 typedef struct _BL_TEXT_CONSOLE
982 {
983 PBL_TEXT_CONSOLE_VTABLE Callbacks;
984 BL_DISPLAY_STATE State;
985 BL_DISPLAY_MODE DisplayMode;
986 BOOLEAN Active;
987 EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL* Protocol;
988 ULONG Mode;
989 EFI_SIMPLE_TEXT_OUTPUT_MODE OldMode;
990 } BL_TEXT_CONSOLE, *PBL_TEXT_CONSOLE;
991
992 typedef struct _BL_INPUT_CONSOLE_VTABLE
993 {
994 PCONSOLE_DESTRUCT Destruct;
995 PCONSOLE_REINITIALIZE Reinitialize;
996 //PCONSOLE_IS_KEY_PENDING IsKeyPending;
997 //PCONSOLE_READ_INPUT ReadInput;
998 //PCONSOLE_ERASE_BUFFER EraseBuffer;
999 //PCONSOLE_FILL_BUFFER FillBuffer;
1000 } BL_INPUT_CONSOLE_VTABLE, *PBL_INPUT_CONSOLE_VTABLE;
1001
1002 typedef struct _BL_INPUT_CONSOLE
1003 {
1004 PBL_INPUT_CONSOLE_VTABLE Callbacks;
1005 PULONG Buffer;
1006 PULONG DataStart;
1007 PULONG DataEnd;
1008 PULONG EndBuffer;
1009 } BL_INPUT_CONSOLE, *PBL_INPUT_CONSOLE;
1010
1011 typedef enum _BL_GRAPHICS_CONSOLE_TYPE
1012 {
1013 BlGopConsole,
1014 BlUgaConsole
1015 } BL_GRAPHICS_CONSOLE_TYPE;
1016
1017 typedef struct _BL_GRAPHICS_CONSOLE
1018 {
1019 BL_TEXT_CONSOLE TextConsole;
1020 BL_DISPLAY_MODE DisplayMode;
1021 ULONG PixelDepth;
1022 ULONG FgColor;
1023 ULONG BgColor;
1024 BL_DISPLAY_MODE OldDisplayMode;
1025 ULONG OldPixelDepth;
1026 EFI_HANDLE Handle;
1027 BL_GRAPHICS_CONSOLE_TYPE Type;
1028 EFI_GRAPHICS_OUTPUT_PROTOCOL* Protocol;
1029 PVOID FrameBuffer;
1030 ULONG FrameBufferSize;
1031 ULONG PixelsPerScanLine;
1032 ULONG Mode;
1033 ULONG OldMode;
1034 } BL_GRAPHICS_CONSOLE, *PBL_GRAPHICS_CONSOLE;
1035
1036 typedef struct _BL_REMOTE_CONSOLE
1037 {
1038 BL_TEXT_CONSOLE TextConsole;
1039 } BL_REMOTE_CONSOLE, *PBL_REMOTE_CONSOLE;
1040
1041 typedef struct _BL_HASH_TABLE
1042 {
1043 PLIST_ENTRY HashLinks;
1044 ULONG Size;
1045 PBL_HASH_TABLE_COMPARE_FUNCTION CompareFunction;
1046 PBL_HASH_TABLE_HASH_FUNCTION HashFunction;
1047 } BL_HASH_TABLE, *PBL_HASH_TABLE;
1048
1049 typedef struct _BL_HASH_ENTRY
1050 {
1051 ULONG Size;
1052 ULONG Flags;
1053 PVOID Value;
1054 } BL_HASH_ENTRY, *PBL_HASH_ENTRY;
1055
1056 typedef struct _BL_HASH_VALUE
1057 {
1058 ULONG DataSize;
1059 PVOID Data;
1060 } BL_HASH_VALUE, *PBL_HASH_VALUE;
1061
1062 typedef struct _BL_HASH_NODE
1063 {
1064 LIST_ENTRY ListEntry;
1065 BL_HASH_ENTRY Entry;
1066 BL_HASH_VALUE Value;
1067 } BL_HASH_NODE, *PBL_HASH_NODE;
1068
1069 typedef struct _BL_BLOCK_DEVICE_INFORMATION
1070 {
1071 BL_LOCAL_DEVICE_TYPE Type;
1072 ULONG DeviceFlags;
1073 ULONG Unknown;
1074 BL_PARTITION_TYPE PartitionType;
1075 ULONG BlockSize;
1076 ULONG Alignment;
1077 ULONGLONG LastBlock;
1078 ULONGLONG Offset;
1079 ULONG Block;
1080 struct
1081 {
1082 union
1083 {
1084 struct
1085 {
1086 ULONG Signature;
1087 } Mbr;
1088 struct
1089 {
1090 GUID Signature;
1091 } Gpt;
1092 };
1093 } Disk;
1094 } BL_BLOCK_DEVICE_INFORMATION, *PBL_BLOCK_DEVICE_INFORMATION;
1095
1096 typedef struct _BL_DEVICE_INFORMATION
1097 {
1098 BL_DEVICE_TYPE DeviceType;
1099 union
1100 {
1101 BL_BLOCK_DEVICE_INFORMATION BlockDeviceInfo;
1102 };
1103 } BL_DEVICE_INFORMATION, *PBL_DEVICE_INFORMATION;
1104
1105 typedef struct _BL_BLOCK_DEVICE
1106 {
1107 BL_BLOCK_DEVICE_INFORMATION;
1108 ULONGLONG StartOffset;
1109 EFI_BLOCK_IO* Protocol;
1110 EFI_HANDLE Handle;
1111 } BL_BLOCK_DEVICE, *PBL_BLOCK_DEVICE;
1112
1113 typedef struct _BL_PROTOCOL_HANDLE
1114 {
1115 EFI_HANDLE Handle;
1116 PVOID Interface;
1117 } BL_PROTOCOL_HANDLE, *PBL_PROTOCOL_HANDLE;
1118
1119 typedef struct _BL_DEVICE_CALLBACKS
1120 {
1121 PBL_DEVICE_ENUMERATE_DEVICE_CLASS EnumerateDeviceClass;
1122 PBL_DEVICE_OPEN Open;
1123 PBL_DEVICE_CLOSE Close;
1124 PBL_DEVICE_READ Read;
1125 PBL_DEVICE_WRITE Write;
1126 PBL_DEVICE_GET_INFORMATION GetInformation;
1127 PBL_DEVICE_SET_INFORMATION SetInformation;
1128 PBL_DEVICE_RESET Reset;
1129 PBL_DEVICE_FLUSH Flush;
1130 PBL_DEVICE_CREATE Create;
1131 } BL_DEVICE_CALLBACKS, *PBL_DEVICE_CALLBACKS;
1132
1133 typedef struct _BL_DEVICE_ENTRY
1134 {
1135 ULONG DeviceId;
1136 ULONG Flags;
1137 ULONG Unknown;
1138 ULONG ReferenceCount;
1139 BL_DEVICE_CALLBACKS Callbacks;
1140 PVOID DeviceSpecificData;
1141 PBL_DEVICE_DESCRIPTOR DeviceDescriptor;
1142 } BL_DEVICE_ENTRY, *PBL_DEVICE_ENTRY;
1143
1144 typedef struct _BL_IMG_FILE
1145 {
1146 UCHAR Flags;
1147 union
1148 {
1149 PVOID BaseAddress;
1150 ULONG FileId;
1151 };
1152 ULONG FileSize;
1153 PWCHAR FileName;
1154 } BL_IMG_FILE, *PBL_IMG_FILE;
1155
1156 typedef struct _BL_IMAGE_APPLICATION_ENTRY
1157 {
1158 PBL_APPLICATION_ENTRY AppEntry;
1159 PVOID ImageBase;
1160 ULONG ImageSize;
1161 } BL_IMAGE_APPLICATION_ENTRY, *PBL_IMAGE_APPLICATION_ENTRY;
1162
1163 typedef struct _BL_DEFERRED_FONT_FILE
1164 {
1165 LIST_ENTRY ListEntry;
1166 ULONG Flags;
1167 PBL_DEVICE_DESCRIPTOR Device;
1168 PWCHAR FontPath;
1169 } BL_DEFERRED_FONT_FILE, *PBL_DEFERRED_FONT_FILE;
1170
1171 #pragma pack(push)
1172 #pragma pack(1)
1173 typedef struct _BMP_HEADER
1174 {
1175 USHORT Signature;
1176 ULONG Size;
1177 USHORT Reserved[2];
1178 ULONG Offset;
1179 } BMP_HEADER, *PBMP_HEADER;
1180
1181 typedef struct _DIB_HEADER
1182 {
1183 ULONG Size;
1184 ULONG Width;
1185 ULONG Height;
1186 USHORT Planes;
1187 USHORT BitCount;
1188 ULONG Compression;
1189 ULONG SizeImage;
1190 ULONG XPelsPerMeter;
1191 ULONG YPelsPerMEter;
1192 ULONG ClrUsed;
1193 ULONG ClrImportant;
1194 } DIB_HEADER, *PDIB_HEADER;
1195
1196 typedef struct _BITMAP
1197 {
1198 BMP_HEADER BmpHeader;
1199 DIB_HEADER DibHeader;
1200 } BITMAP, *PBITMAP;
1201 #pragma pack(pop)
1202
1203 typedef struct _COORD
1204 {
1205 ULONG X;
1206 ULONG Y;
1207 } COORD, *PCOORD;
1208
1209 typedef struct _BL_PD_DATA_BLOB
1210 {
1211 PVOID Data;
1212 ULONG DataSize;
1213 ULONG BlobSize;
1214 } BL_PD_DATA_BLOB, *PBL_PD_DATA_BLOB;
1215
1216 /* INLINE ROUTINES ***********************************************************/
1217
1218 FORCEINLINE
1219 VOID
1220 BlSetupDefaultParameters (
1221 _Out_ PBL_LIBRARY_PARAMETERS LibraryParameters
1222 )
1223 {
1224 BL_LIBRARY_PARAMETERS DefaultParameters =
1225 {
1226 0x20,
1227 BlVirtual,
1228 1024,
1229 2 * 1024 * 1024,
1230 0,
1231 NULL,
1232 0,
1233 NULL
1234 };
1235
1236 /* Copy the defaults */
1237 RtlCopyMemory(LibraryParameters, &DefaultParameters, sizeof(*LibraryParameters));
1238 }
1239
1240 FORCEINLINE
1241 VOID
1242 MmMdInitializeListHead (
1243 _In_ PBL_MEMORY_DESCRIPTOR_LIST List
1244 )
1245 {
1246 /* Initialize the list */
1247 InitializeListHead(&List->ListHead);
1248 List->First = &List->ListHead;
1249 List->This = NULL;
1250 }
1251
1252 /* INITIALIZATION ROUTINES ***************************************************/
1253
1254 NTSTATUS
1255 BlInitializeLibrary(
1256 _In_ PBOOT_APPLICATION_PARAMETER_BLOCK BootAppParameters,
1257 _In_ PBL_LIBRARY_PARAMETERS LibraryParameters
1258 );
1259
1260 NTSTATUS
1261 BlpArchInitialize (
1262 _In_ ULONG Phase
1263 );
1264
1265 NTSTATUS
1266 BlpFwInitialize (
1267 _In_ ULONG Phase,
1268 _In_ PBL_FIRMWARE_DESCRIPTOR FirmwareParameters
1269 );
1270
1271 NTSTATUS
1272 BlpMmInitialize (
1273 _In_ PBL_MEMORY_DATA MemoryData,
1274 _In_ BL_TRANSLATION_TYPE TranslationType,
1275 _In_ PBL_LIBRARY_PARAMETERS LibraryParameters
1276 );
1277
1278 NTSTATUS
1279 MmBaInitialize (
1280 VOID
1281 );
1282
1283 NTSTATUS
1284 MmPaInitialize (
1285 _In_ PBL_MEMORY_DATA MemoryData,
1286 _In_ ULONG MinimumPages
1287 );
1288
1289 NTSTATUS
1290 MmArchInitialize (
1291 _In_ ULONG Phase,
1292 _In_ PBL_MEMORY_DATA MemoryData,
1293 _In_ BL_TRANSLATION_TYPE TranslationType,
1294 _In_ BL_TRANSLATION_TYPE LibraryTranslationType
1295 );
1296
1297 NTSTATUS
1298 MmHaInitialize (
1299 _In_ ULONG HeapSize,
1300 _In_ ULONG HeapAttributes
1301 );
1302
1303 VOID
1304 MmMdInitialize (
1305 _In_ ULONG Phase,
1306 _In_ PBL_LIBRARY_PARAMETERS LibraryParameters
1307 );
1308
1309 NTSTATUS
1310 BlpDeviceInitialize (
1311 VOID
1312 );
1313
1314 NTSTATUS
1315 BlpIoInitialize (
1316 VOID
1317 );
1318
1319 NTSTATUS
1320 BlpFileInitialize (
1321 VOID
1322 );
1323
1324 NTSTATUS
1325 BlpDisplayInitialize (
1326 _In_ ULONG Flags
1327 );
1328
1329 VOID
1330 BlDestroyLibrary (
1331 VOID
1332 );
1333
1334 NTSTATUS
1335 BcInitialize (
1336 VOID
1337 );
1338
1339 /* FIRMWARE ROUTINES *********************************************************/
1340
1341 VOID
1342 EfiPrintf (
1343 _In_ PWCHAR Format,
1344 ...
1345 );
1346
1347 NTSTATUS
1348 BlFwEnumerateDevice (
1349 _In_ PBL_DEVICE_DESCRIPTOR Device
1350 );
1351
1352 NTSTATUS
1353 EfiAllocatePages (
1354 _In_ ULONG Type,
1355 _In_ ULONG Pages,
1356 _Inout_ EFI_PHYSICAL_ADDRESS* Memory
1357 );
1358
1359 NTSTATUS
1360 EfiStall (
1361 _In_ ULONG StallTime
1362 );
1363
1364 NTSTATUS
1365 EfiConInExReset (
1366 VOID
1367 );
1368
1369 NTSTATUS
1370 EfiConInReset (
1371 VOID
1372 );
1373
1374 NTSTATUS
1375 EfiConOutOutputString (
1376 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE *TextInterface,
1377 _In_ PWCHAR String
1378 );
1379
1380 NTSTATUS
1381 EfiConOutQueryMode (
1382 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE *TextInterface,
1383 _In_ ULONG Mode,
1384 _In_ UINTN* Columns,
1385 _In_ UINTN* Rows
1386 );
1387
1388 NTSTATUS
1389 EfiConOutSetMode (
1390 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE *TextInterface,
1391 _In_ ULONG Mode
1392 );
1393
1394 VOID
1395 EfiConOutReadCurrentMode (
1396 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE *TextInterface,
1397 _Out_ EFI_SIMPLE_TEXT_OUTPUT_MODE* Mode
1398 );
1399
1400 NTSTATUS
1401 EfiConOutSetAttribute (
1402 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE *TextInterface,
1403 _In_ ULONG Attribute
1404 );
1405
1406 NTSTATUS
1407 EfiConOutSetCursorPosition (
1408 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE *TextInterface,
1409 _In_ ULONG Column,
1410 _In_ ULONG Row
1411 );
1412
1413 NTSTATUS
1414 EfiConOutEnableCursor (
1415 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE *TextInterface,
1416 _In_ BOOLEAN Visible
1417 );
1418
1419 NTSTATUS
1420 EfiLocateHandleBuffer (
1421 _In_ EFI_LOCATE_SEARCH_TYPE SearchType,
1422 _In_ EFI_GUID *Protocol,
1423 _Inout_ PULONG HandleCount,
1424 _Inout_ EFI_HANDLE** Buffer
1425 );
1426
1427 NTSTATUS
1428 EfiOpenProtocol (
1429 _In_ EFI_HANDLE Handle,
1430 _In_ EFI_GUID *Protocol,
1431 _Out_ PVOID* Interface
1432 );
1433
1434 NTSTATUS
1435 EfiCloseProtocol (
1436 _In_ EFI_HANDLE Handle,
1437 _In_ EFI_GUID *Protocol
1438 );
1439
1440 NTSTATUS
1441 EfiGopGetCurrentMode (
1442 _In_ EFI_GRAPHICS_OUTPUT_PROTOCOL *GopInterface,
1443 _Out_ UINTN* Mode,
1444 _Out_ EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *Information
1445 );
1446
1447 NTSTATUS
1448 EfiGopSetMode (
1449 _In_ EFI_GRAPHICS_OUTPUT_PROTOCOL *GopInterface,
1450 _In_ ULONG Mode
1451 );
1452
1453 VOID
1454 EfiGopGetFrameBuffer (
1455 _In_ EFI_GRAPHICS_OUTPUT_PROTOCOL *GopInterface,
1456 _Out_ PHYSICAL_ADDRESS* FrameBuffer,
1457 _Out_ UINTN *FrameBufferSize
1458 );
1459
1460 VOID
1461 EfiResetSystem (
1462 _In_ EFI_RESET_TYPE ResetType
1463 );
1464
1465 EFI_DEVICE_PATH*
1466 EfiGetLeafNode (
1467 _In_ EFI_DEVICE_PATH *DevicePath
1468 );
1469
1470 EFI_DEVICE_PATH *
1471 EfiIsDevicePathParent (
1472 _In_ EFI_DEVICE_PATH *DevicePath1,
1473 _In_ EFI_DEVICE_PATH *DevicePath2
1474 );
1475
1476 NTSTATUS
1477 EfipGetRsdt (
1478 _Out_ PPHYSICAL_ADDRESS FoundRsdt
1479 );
1480
1481 /* PLATFORM TIMER ROUTINES ***************************************************/
1482
1483 NTSTATUS
1484 BlpTimeCalibratePerformanceCounter (
1485 VOID
1486 );
1487
1488 ULONGLONG
1489 BlTimeQueryPerformanceCounter (
1490 _Out_opt_ PLARGE_INTEGER Frequency
1491 );
1492
1493 /* RESOURCE LOCALE INTERNATIONALIZATION ROUTINES *****************************/
1494
1495 NTSTATUS
1496 BlpDisplayRegisterLocale (
1497 _In_ PWCHAR Locale
1498 );
1499
1500 /* FONT ROUTINES *************************************************************/
1501
1502 VOID
1503 BfiFreeDeferredFontFile (
1504 _In_ PBL_DEFERRED_FONT_FILE DeferredFontFile
1505 );
1506
1507 NTSTATUS
1508 BfLoadFontFile (
1509 _In_ PBL_DEVICE_DESCRIPTOR Device,
1510 _In_ PWCHAR FontPath
1511 );
1512
1513 NTSTATUS
1514 BfLoadDeferredFontFiles (
1515 VOID
1516 );
1517
1518 NTSTATUS
1519 BfClearScreen (
1520 _In_ PBL_GRAPHICS_CONSOLE Console
1521 );
1522
1523 NTSTATUS
1524 BfClearToEndOfLine (
1525 _In_ PBL_GRAPHICS_CONSOLE Console
1526 );
1527
1528 /* FILESYSTEM ROUTINES *******************************************************/
1529
1530 NTSTATUS
1531 FatInitialize (
1532 VOID
1533 );
1534
1535 NTSTATUS
1536 FatMount (
1537 _In_ ULONG DeviceId,
1538 _In_ ULONG Unknown,
1539 _Out_ PBL_FILE_ENTRY* FileEntry
1540 );
1541
1542 NTSTATUS
1543 EtfsInitialize (
1544 VOID
1545 );
1546
1547 NTSTATUS
1548 EtfsMount (
1549 _In_ ULONG DeviceId,
1550 _In_ ULONG Unknown,
1551 _Out_ PBL_FILE_ENTRY* FileEntry
1552 );
1553
1554 /* DEBUG ROUTINES ************************************************************/
1555
1556
1557 BOOLEAN
1558 BlBdDebuggerEnabled (
1559 VOID
1560 );
1561
1562 NTSTATUS
1563 BlBdPullRemoteFile (
1564 _In_ PWCHAR FilePath,
1565 _Out_ PVOID BaseAddress,
1566 _Out_ PULONGLONG FileSize
1567 );
1568
1569 VOID
1570 BlStatusPrint (
1571 _In_ PCWCH Format,
1572 ...
1573 );
1574
1575 VOID
1576 BlStatusError (
1577 _In_ ULONG ErrorCode,
1578 _In_ ULONG Parameter1,
1579 _In_ ULONG_PTR Parameter2,
1580 _In_ ULONG_PTR Parameter3,
1581 _In_ ULONG_PTR Parameter4
1582 );
1583
1584 /* UTILITY ROUTINES **********************************************************/
1585
1586 VOID
1587 BlUtlUpdateProgress (
1588 _In_ ULONG Percentage,
1589 _Out_opt_ PBOOLEAN Completed
1590 );
1591
1592 NTSTATUS
1593 BlUtlGetAcpiTable (
1594 _Out_ PVOID* TableAddress,
1595 _In_ ULONG Signature
1596 );
1597
1598 NTSTATUS
1599 BlUtlInitialize (
1600 VOID
1601 );
1602
1603 NTSTATUS
1604 BlUtlRegisterProgressRoutine (
1605 VOID
1606 );
1607
1608 NTSTATUS
1609 BlGetApplicationBaseAndSize (
1610 _Out_ PVOID* ImageBase,
1611 _Out_ PULONG ImageSize
1612 );
1613
1614 VOID
1615 BlDestroyBootEntry (
1616 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry
1617 );
1618
1619 NTSTATUS
1620 BlPdQueryData (
1621 _In_ const GUID* DataGuid,
1622 _In_ PVOID Unknown,
1623 _Inout_ PBL_PD_DATA_BLOB DataBlob
1624 );
1625
1626 /* FIRMWARE UTILITY ROUTINES *************************************************/
1627
1628 EFI_STATUS
1629 EfiGetEfiStatusCode(
1630 _In_ NTSTATUS Status
1631 );
1632
1633 NTSTATUS
1634 EfiGetNtStatusCode (
1635 _In_ EFI_STATUS EfiStatus
1636 );
1637
1638 VOID
1639 BlFwReboot (
1640 VOID
1641 );
1642
1643 PGUID
1644 BlGetApplicationIdentifier (
1645 VOID
1646 );
1647
1648 NTSTATUS
1649 BlpSecureBootEFIIsEnabled (
1650 VOID
1651 );
1652
1653 NTSTATUS
1654 BlSecureBootIsEnabled (
1655 _Out_ PBOOLEAN SecureBootEnabled
1656 );
1657
1658 NTSTATUS
1659 BlSecureBootCheckForFactoryReset (
1660 VOID
1661 );
1662
1663 /* RESOURCE ROUTINES *********************************************************/
1664
1665 PWCHAR
1666 BlResourceFindMessage (
1667 _In_ ULONG MsgId
1668 );
1669
1670 PWCHAR
1671 BlResourceFindHtml (
1672 VOID
1673 );
1674
1675 NTSTATUS
1676 BlpResourceInitialize (
1677 VOID
1678 );
1679
1680 /* TABLE ROUTINES ************************************************************/
1681
1682 NTSTATUS
1683 BlTblMap (
1684 _In_ PVOID *Table,
1685 _In_ ULONG Count,
1686 _In_ PBL_TBL_MAP_ROUTINE MapCallback
1687 );
1688
1689 PVOID
1690 BlTblFindEntry (
1691 _In_ PVOID *Table,
1692 _In_ ULONG Count,
1693 _Out_ PULONG EntryIndex,
1694 _In_ PBL_TBL_LOOKUP_ROUTINE Callback,
1695 _In_ PVOID Argument1,
1696 _In_ PVOID Argument2,
1697 _In_ PVOID Argument3,
1698 _In_ PVOID Argument4
1699 );
1700
1701 NTSTATUS
1702 BlTblSetEntry (
1703 _Inout_ PVOID** Table,
1704 _Inout_ PULONG Count,
1705 _In_ PVOID Entry,
1706 _Out_ PULONG EntryIndex,
1707 _In_ PBL_TBL_SET_ROUTINE Callback
1708 );
1709
1710 NTSTATUS
1711 TblDoNotPurgeEntry (
1712 _In_ PVOID Entry
1713 );
1714
1715 /* HASH TABLE ROUTINES *******************************************************/
1716
1717 NTSTATUS
1718 BlHtStore (
1719 _In_ ULONG TableId,
1720 _In_ PBL_HASH_ENTRY Entry,
1721 _In_ PVOID Data,
1722 _In_ ULONG DataSize
1723 );
1724
1725 NTSTATUS
1726 BlHtLookup (
1727 _In_ ULONG TableId,
1728 _In_ PBL_HASH_ENTRY Entry,
1729 _Out_ PBL_HASH_VALUE *Value
1730 );
1731
1732 NTSTATUS
1733 BlHtCreate (
1734 _In_ ULONG Size,
1735 _In_ PBL_HASH_TABLE_HASH_FUNCTION HashFunction,
1736 _In_ PBL_HASH_TABLE_COMPARE_FUNCTION CompareFunction,
1737 _Out_ PULONG Id
1738 );
1739
1740 /* BCD OPTION ROUTINES *******************************************************/
1741
1742 PBL_BCD_OPTION
1743 MiscGetBootOption (
1744 _In_ PBL_BCD_OPTION List,
1745 _In_ ULONG Type
1746 );
1747
1748 ULONG
1749 BlGetBootOptionListSize (
1750 _In_ PBL_BCD_OPTION BcdOption
1751 );
1752
1753 ULONG
1754 BlGetBootOptionSize (
1755 _In_ PBL_BCD_OPTION BcdOption
1756 );
1757
1758 NTSTATUS
1759 BlGetBootOptionString (
1760 _In_ PBL_BCD_OPTION List,
1761 _In_ ULONG Type,
1762 _Out_ PWCHAR* Value
1763 );
1764
1765 NTSTATUS
1766 BlGetBootOptionInteger (
1767 _In_ PBL_BCD_OPTION List,
1768 _In_ ULONG Type,
1769 _Out_ PULONGLONG Value
1770 );
1771
1772 NTSTATUS
1773 BlGetBootOptionBoolean (
1774 _In_ PBL_BCD_OPTION List,
1775 _In_ ULONG Type,
1776 _Out_ PBOOLEAN Value
1777 );
1778
1779 NTSTATUS
1780 BlpGetBootOptionIntegerList (
1781 _In_ PBL_BCD_OPTION List,
1782 _In_ ULONG Type,
1783 _Out_ PULONGLONG* Value,
1784 _Out_ PULONGLONG Count,
1785 _In_ BOOLEAN NoCopy
1786 );
1787
1788 NTSTATUS
1789 BlGetBootOptionDevice (
1790 _In_ PBL_BCD_OPTION List,
1791 _In_ ULONG Type,
1792 _Out_ PBL_DEVICE_DESCRIPTOR* Value,
1793 _In_opt_ PBL_BCD_OPTION* ExtraOptions
1794 );
1795
1796 NTSTATUS
1797 BlGetBootOptionGuid (
1798 _In_ PBL_BCD_OPTION List,
1799 _In_ ULONG Type,
1800 _Out_ PGUID Value
1801 );
1802
1803 NTSTATUS
1804 BlGetBootOptionGuidList (
1805 _In_ PBL_BCD_OPTION List,
1806 _In_ ULONG Type,
1807 _Out_ PGUID *Value,
1808 _In_ PULONG Count
1809 );
1810
1811 NTSTATUS
1812 BlCopyBootOptions (
1813 _In_ PBL_BCD_OPTION OptionList,
1814 _Out_ PBL_BCD_OPTION *CopiedOptions
1815 );
1816
1817 NTSTATUS
1818 BlAppendBootOptionBoolean (
1819 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry,
1820 _In_ ULONG OptionId
1821 );
1822
1823 NTSTATUS
1824 BlAppendBootOptionInteger (
1825 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry,
1826 _In_ ULONG OptionId,
1827 _In_ ULONGLONG Value
1828 );
1829
1830 NTSTATUS
1831 BlAppendBootOptionString (
1832 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry,
1833 _In_ PWCHAR OptionString
1834 );
1835
1836 NTSTATUS
1837 BlAppendBootOptions (
1838 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry,
1839 _In_ PBL_BCD_OPTION Options
1840 );
1841
1842 VOID
1843 BlRemoveBootOption (
1844 _In_ PBL_BCD_OPTION List,
1845 _In_ ULONG Type
1846 );
1847
1848 NTSTATUS
1849 BlReplaceBootOptions (
1850 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry,
1851 _In_ PBL_BCD_OPTION NewOptions
1852 );
1853
1854 /* BOOT REGISTRY ROUTINES ****************************************************/
1855
1856 VOID
1857 BiCloseKey (
1858 _In_ HANDLE KeyHandle
1859 );
1860
1861 NTSTATUS
1862 BiOpenKey(
1863 _In_ HANDLE ParentHandle,
1864 _In_ PWCHAR KeyName,
1865 _Out_ PHANDLE Handle
1866 );
1867
1868 NTSTATUS
1869 BiLoadHive (
1870 _In_ PBL_FILE_PATH_DESCRIPTOR FilePath,
1871 _Out_ PHANDLE HiveHandle
1872 );
1873
1874 NTSTATUS
1875 BiGetRegistryValue (
1876 _In_ HANDLE KeyHandle,
1877 _In_ PWCHAR ValueName,
1878 _In_ ULONG Type,
1879 _Out_ PVOID* Buffer,
1880 _Out_ PULONG ValueLength
1881 );
1882
1883 NTSTATUS
1884 BiEnumerateSubKeys (
1885 _In_ HANDLE KeyHandle,
1886 _Out_ PWCHAR** SubKeyList,
1887 _Out_ PULONG SubKeyCount
1888 );
1889
1890 NTSTATUS
1891 BiDeleteKey (
1892 _In_ HANDLE KeyHandle
1893 );
1894
1895 VOID
1896 BiDereferenceHive (
1897 _In_ HANDLE KeyHandle
1898 );
1899
1900 /* CONTEXT ROUTINES **********************************************************/
1901
1902 VOID
1903 BlpArchSwitchContext (
1904 _In_ BL_ARCH_MODE NewMode
1905 );
1906
1907 /* MEMORY DESCRIPTOR ROUTINES ************************************************/
1908
1909 VOID
1910 MmMdFreeList(
1911 _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList
1912 );
1913
1914 PBL_MEMORY_DESCRIPTOR
1915 MmMdInitByteGranularDescriptor (
1916 _In_ ULONG Flags,
1917 _In_ BL_MEMORY_TYPE Type,
1918 _In_ ULONGLONG BasePage,
1919 _In_ ULONGLONG VirtualPage,
1920 _In_ ULONGLONG PageCount
1921 );
1922
1923 VOID
1924 MmMdFreeGlobalDescriptors (
1925 VOID
1926 );
1927
1928 NTSTATUS
1929 MmMdAddDescriptorToList (
1930 _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList,
1931 _In_ PBL_MEMORY_DESCRIPTOR MemoryDescriptor,
1932 _In_ ULONG Flags
1933 );
1934
1935 VOID
1936 MmMdRemoveDescriptorFromList (
1937 _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList,
1938 _In_ PBL_MEMORY_DESCRIPTOR Entry
1939 );
1940
1941 BOOLEAN
1942 MmMdFindSatisfyingRegion (
1943 _In_ PBL_MEMORY_DESCRIPTOR Descriptor,
1944 _Out_ PBL_MEMORY_DESCRIPTOR NewDescriptor,
1945 _In_ ULONGLONG Pages,
1946 _In_ PBL_ADDRESS_RANGE BaseRange,
1947 _In_ PBL_ADDRESS_RANGE VirtualRange,
1948 _In_ BOOLEAN TopDown,
1949 _In_ BL_MEMORY_TYPE MemoryType,
1950 _In_ ULONG Flags,
1951 _In_ ULONG Alignment
1952 );
1953
1954 NTSTATUS
1955 MmMdRemoveRegionFromMdlEx (
1956 __in PBL_MEMORY_DESCRIPTOR_LIST MdList,
1957 __in ULONG Flags,
1958 __in ULONGLONG BasePage,
1959 __in ULONGLONG PageCount,
1960 __in PBL_MEMORY_DESCRIPTOR_LIST NewMdList
1961 );
1962
1963 NTSTATUS
1964 MmMdFreeDescriptor (
1965 _In_ PBL_MEMORY_DESCRIPTOR MemoryDescriptor
1966 );
1967
1968 /* PAGE ALLOCATOR ROUTINES ***************************************************/
1969
1970 NTSTATUS
1971 BlMmAllocatePhysicalPages(
1972 _Inout_ PPHYSICAL_ADDRESS Address,
1973 _In_ BL_MEMORY_TYPE MemoryType,
1974 _In_ ULONGLONG PageCount,
1975 _In_ ULONG Attributes,
1976 _In_ ULONG Alignment
1977 );
1978
1979 NTSTATUS
1980 MmPapAllocatePhysicalPagesInRange (
1981 _Inout_ PPHYSICAL_ADDRESS BaseAddress,
1982 _In_ BL_MEMORY_TYPE MemoryType,
1983 _In_ ULONGLONG Pages,
1984 _In_ ULONG Attributes,
1985 _In_ ULONG Alignment,
1986 _In_ PBL_MEMORY_DESCRIPTOR_LIST NewList,
1987 _In_opt_ PBL_ADDRESS_RANGE Range,
1988 _In_ ULONG RangeType
1989 );
1990
1991 NTSTATUS
1992 BlMmFreePhysicalPages (
1993 _In_ PHYSICAL_ADDRESS Address
1994 );
1995
1996 NTSTATUS
1997 MmPapAllocatePagesInRange (
1998 _Inout_ PVOID* PhysicalAddress,
1999 _In_ BL_MEMORY_TYPE MemoryType,
2000 _In_ ULONGLONG Pages,
2001 _In_ ULONG Attributes,
2002 _In_ ULONG Alignment,
2003 _In_opt_ PBL_ADDRESS_RANGE Range,
2004 _In_ ULONG Type
2005 );
2006
2007 NTSTATUS
2008 MmFwGetMemoryMap (
2009 _Out_ PBL_MEMORY_DESCRIPTOR_LIST MemoryMap,
2010 _In_ ULONG Flags
2011 );
2012
2013 NTSTATUS
2014 BlpMmInitializeConstraints (
2015 VOID
2016 );
2017
2018 NTSTATUS
2019 BlMmRemoveBadMemory (
2020 VOID
2021 );
2022
2023 /* VIRTUAL MEMORY ROUTINES ***************************************************/
2024
2025 NTSTATUS
2026 BlMmMapPhysicalAddressEx (
2027 _In_ PVOID* VirtualAddress,
2028 _In_ ULONG Attributes,
2029 _In_ ULONGLONG Size,
2030 _In_ PHYSICAL_ADDRESS PhysicalAddress
2031 );
2032
2033 NTSTATUS
2034 BlMmUnmapVirtualAddressEx (
2035 _In_ PVOID VirtualAddress,
2036 _In_ ULONGLONG Size
2037 );
2038
2039 /* BLOCK ALLOCATOR ROUTINES **************************************************/
2040
2041 NTSTATUS
2042 BlpMmCreateBlockAllocator (
2043 VOID
2044 );
2045
2046 /* HEAP ALLOCATOR ROUTINES ***************************************************/
2047
2048 PVOID
2049 BlMmAllocateHeap (
2050 _In_ ULONG Size
2051 );
2052
2053 NTSTATUS
2054 BlMmFreeHeap (
2055 _In_ PVOID Buffer
2056 );
2057
2058 /* DISPLAY ROUTINES **********************************************************/
2059
2060 VOID
2061 BlDisplayGetTextCellResolution (
2062 _Out_ PULONG TextWidth,
2063 _Out_ PULONG TextHeight
2064 );
2065
2066 NTSTATUS
2067 BlDisplaySetScreenResolution (
2068 VOID
2069 );
2070
2071 NTSTATUS
2072 BlDisplayGetScreenResolution (
2073 _Out_ PULONG HRes,
2074 _Out_ PULONG Vres
2075 );
2076
2077 VOID
2078 BlDisplayInvalidateOemBitmap (
2079 VOID
2080 );
2081
2082 PBITMAP
2083 BlDisplayGetOemBitmap (
2084 _Out_ PCOORD Offset,
2085 _Out_opt_ PULONG Flags
2086 );
2087
2088 BOOLEAN
2089 BlDisplayValidOemBitmap (
2090 VOID
2091 );
2092
2093 NTSTATUS
2094 BlDisplayClearScreen (
2095 VOID
2096 );
2097
2098 NTSTATUS
2099 BlDisplaySetCursorType (
2100 _In_ ULONG Type
2101 );
2102
2103 /* I/O ROUTINES **************************************************************/
2104
2105 NTSTATUS
2106 BlpIoRegisterDestroyRoutine (
2107 _In_ PBL_IO_DESTROY_ROUTINE DestroyRoutine
2108 );
2109
2110 NTSTATUS
2111 BlDeviceClose (
2112 _In_ ULONG DeviceId
2113 );
2114
2115 NTSTATUS
2116 BlpDeviceOpen (
2117 _In_ PBL_DEVICE_DESCRIPTOR Device,
2118 _In_ ULONG Flags,
2119 _In_ ULONG Unknown,
2120 _Out_ PULONG DeviceId
2121 );
2122
2123 NTSTATUS
2124 BlDeviceGetInformation (
2125 _In_ ULONG DeviceId,
2126 _Out_ PBL_DEVICE_INFORMATION DeviceInformation
2127 );
2128
2129 NTSTATUS
2130 BlDeviceSetInformation (
2131 _In_ ULONG DeviceId,
2132 _In_ PBL_DEVICE_INFORMATION DeviceInformation
2133 );
2134
2135 NTSTATUS
2136 BlDeviceReadAtOffset (
2137 _In_ ULONG DeviceId,
2138 _In_ ULONG Size,
2139 _In_ ULONGLONG Offset,
2140 _In_ PVOID Buffer,
2141 _Out_ PULONG BytesRead
2142 );
2143
2144 /* IMAGE ROUTINES ************************************************************/
2145
2146 NTSTATUS
2147 BlImgLoadImageWithProgress2 (
2148 _In_ ULONG DeviceId,
2149 _In_ BL_MEMORY_TYPE MemoryType,
2150 _In_ PWCHAR FileName,
2151 _Inout_ PVOID* MappedBase,
2152 _Inout_ PULONG MappedSize,
2153 _In_ ULONG ImageFlags,
2154 _In_ BOOLEAN ShowProgress,
2155 _Out_opt_ PUCHAR* HashBuffer,
2156 _Out_opt_ PULONG HashSize
2157 );
2158
2159 PIMAGE_SECTION_HEADER
2160 BlImgFindSection (
2161 _In_ PVOID ImageBase,
2162 _In_ ULONG ImageSize
2163 );
2164
2165 NTSTATUS
2166 BlImgLoadBootApplication (
2167 _In_ PBL_LOADED_APPLICATION_ENTRY BootEntry,
2168 _Out_ PULONG AppHandle
2169 );
2170
2171 NTSTATUS
2172 BlImgStartBootApplication (
2173 _In_ ULONG AppHandle,
2174 _Inout_ PBL_RETURN_ARGUMENTS ReturnArguments
2175 );
2176
2177 NTSTATUS
2178 BlImgUnloadBootApplication (
2179 _In_ ULONG AppHandle
2180 );
2181
2182 VOID
2183 BlImgQueryCodeIntegrityBootOptions (
2184 _In_ PBL_LOADED_APPLICATION_ENTRY ApplicationEntry,
2185 _Out_ PBOOLEAN IntegrityChecksDisabled,
2186 _Out_ PBOOLEAN TestSigning
2187 );
2188
2189 /* FILE I/O ROUTINES *********************************************************/
2190
2191 NTSTATUS
2192 BlFileClose (
2193 _In_ ULONG FileId
2194 );
2195
2196 NTSTATUS
2197 BlFileReadAtOffsetEx (
2198 _In_ ULONG FileId,
2199 _In_ ULONG Size,
2200 _In_ ULONGLONG ByteOffset,
2201 _In_ PVOID Buffer,
2202 _Out_ PULONG BytesReturned,
2203 _In_ ULONG Flags
2204 );
2205
2206 NTSTATUS
2207 BlFileGetInformation (
2208 _In_ ULONG FileId,
2209 _In_ PBL_FILE_INFORMATION FileInfo
2210 );
2211
2212 NTSTATUS
2213 BlFileOpen (
2214 _In_ ULONG DeviceId,
2215 _In_ PWCHAR FileName,
2216 _In_ ULONG Flags,
2217 _Out_ PULONG FileId
2218 );
2219
2220 /* BLOCK I/O ROUTINES *******************************************************/
2221
2222 NTSTATUS
2223 BlockIoEfiCompareDevice (
2224 _In_ PBL_DEVICE_DESCRIPTOR Device,
2225 _In_ EFI_HANDLE Handle
2226 );
2227
2228 /* INPUT CONSOLE ROUTINES ****************************************************/
2229
2230 VOID
2231 ConsoleInputLocalDestruct (
2232 _In_ struct _BL_INPUT_CONSOLE* Console
2233 );
2234
2235 NTSTATUS
2236 ConsoleInputBaseReinitialize (
2237 _In_ struct _BL_INPUT_CONSOLE* Console
2238 );
2239
2240 NTSTATUS
2241 ConsoleCreateLocalInputCnsole (
2242 VOID
2243 );
2244
2245 /* TEXT CONSOLE ROUTINES *****************************************************/
2246
2247 VOID
2248 ConsoleGraphicalDestruct (
2249 _In_ struct _BL_GRAPHICS_CONSOLE* Console
2250 );
2251
2252 NTSTATUS
2253 ConsoleGraphicalClearText (
2254 _In_ PBL_GRAPHICS_CONSOLE Console,
2255 _In_ BOOLEAN LineOnly
2256 );
2257
2258 NTSTATUS
2259 ConsoleGraphicalClearPixels (
2260 _In_ PBL_GRAPHICS_CONSOLE Console,
2261 _In_ ULONG Color
2262 );
2263
2264 NTSTATUS
2265 ConsoleGraphicalReinitialize (
2266 _In_ struct _BL_GRAPHICS_CONSOLE* Console
2267 );
2268
2269 NTSTATUS
2270 ConsoleGraphicalSetTextState (
2271 _In_ PBL_GRAPHICS_CONSOLE Console,
2272 _In_ ULONG Mask,
2273 _In_ PBL_DISPLAY_STATE TextState
2274 );
2275
2276 BOOLEAN
2277 ConsoleGraphicalIsEnabled (
2278 _In_ struct _BL_GRAPHICS_CONSOLE* Console
2279 );
2280
2281 NTSTATUS
2282 ConsoleGraphicalGetGraphicalResolution (
2283 _In_ struct _BL_GRAPHICS_CONSOLE* Console,
2284 _In_ PBL_DISPLAY_MODE DisplayMode
2285 );
2286
2287 NTSTATUS
2288 ConsoleGraphicalGetOriginalResolution (
2289 _In_ struct _BL_GRAPHICS_CONSOLE* Console,
2290 _In_ PBL_DISPLAY_MODE DisplayMode
2291 );
2292
2293 NTSTATUS
2294 ConsoleGraphicalEnable (
2295 _In_ struct _BL_GRAPHICS_CONSOLE* Console,
2296 _In_ BOOLEAN Enable
2297 );
2298
2299 VOID
2300 ConsoleTextLocalDestruct (
2301 _In_ struct _BL_TEXT_CONSOLE* Console
2302 );
2303
2304 NTSTATUS
2305 ConsoleTextLocalReinitialize (
2306 _In_ struct _BL_TEXT_CONSOLE* Console
2307 );
2308
2309 NTSTATUS
2310 ConsoleTextBaseGetTextState (
2311 _In_ struct _BL_TEXT_CONSOLE* Console,
2312 _Out_ PBL_DISPLAY_STATE TextState
2313 );
2314
2315 NTSTATUS
2316 ConsoleTextLocalSetTextState (
2317 _In_ struct _BL_TEXT_CONSOLE* Console,
2318 _In_ ULONG Flags,
2319 _In_ PBL_DISPLAY_STATE TextState
2320 );
2321
2322 NTSTATUS
2323 ConsoleTextBaseGetTextResolution (
2324 _In_ struct _BL_TEXT_CONSOLE* Console,
2325 _Out_ PULONG TextResolution
2326 );
2327
2328 NTSTATUS
2329 ConsoleTextLocalSetTextResolution (
2330 _In_ struct _BL_TEXT_CONSOLE* Console,
2331 _In_ ULONG NewTextResolution,
2332 _Out_ PULONG OldTextResolution
2333 );
2334
2335 NTSTATUS
2336 ConsoleTextLocalClearText (
2337 _In_ struct _BL_TEXT_CONSOLE* Console,
2338 _In_ BOOLEAN LineOnly
2339 );
2340
2341 NTSTATUS
2342 ConsoleTextLocalWriteText (
2343 _In_ struct _BL_TEXT_CONSOLE* Console,
2344 _In_ PCHAR Text,
2345 _In_ ULONG Attribute
2346 );
2347
2348 NTSTATUS
2349 ConsoleTextLocalConstruct (
2350 _In_ PBL_TEXT_CONSOLE TextConsole,
2351 _In_ BOOLEAN Activate
2352 );
2353
2354 BOOLEAN
2355 ConsolepFindResolution (
2356 _In_ PBL_DISPLAY_MODE Mode,
2357 _In_ PBL_DISPLAY_MODE List,
2358 _In_ ULONG MaxIndex
2359 );
2360
2361 NTSTATUS
2362 ConsoleFirmwareTextClear (
2363 _In_ PBL_TEXT_CONSOLE Console,
2364 _In_ BOOLEAN LineOnly
2365 );
2366
2367 VOID
2368 ConsoleFirmwareTextClose (
2369 _In_ PBL_TEXT_CONSOLE TextConsole
2370 );
2371
2372 NTSTATUS
2373 ConsoleFirmwareTextOpen (
2374 _In_ PBL_TEXT_CONSOLE TextConsole
2375 );
2376
2377 NTSTATUS
2378 ConsoleFirmwareTextSetState (
2379 _In_ PBL_TEXT_CONSOLE TextConsole,
2380 _In_ UCHAR Mask,
2381 _In_ PBL_DISPLAY_STATE State
2382 );
2383
2384 NTSTATUS
2385 ConsoleGraphicalConstruct (
2386 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2387 );
2388
2389 NTSTATUS
2390 ConsoleCreateRemoteConsole (
2391 _In_ PBL_TEXT_CONSOLE* TextConsole
2392 );
2393
2394 NTSTATUS
2395 ConsoleEfiGraphicalOpenProtocol (
2396 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole,
2397 _In_ BL_GRAPHICS_CONSOLE_TYPE Type
2398 );
2399
2400 VOID
2401 ConsoleFirmwareGraphicalClose (
2402 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2403 );
2404
2405 VOID
2406 ConsoleFirmwareGraphicalDisable (
2407 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2408 );
2409
2410 NTSTATUS
2411 ConsoleFirmwareGraphicalClear (
2412 _In_ PBL_GRAPHICS_CONSOLE Console,
2413 _In_ ULONG Color
2414 );
2415
2416 NTSTATUS
2417 ConsoleFirmwareGraphicalEnable (
2418 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2419 );
2420
2421 NTSTATUS
2422 ConsoleEfiUgaOpen (
2423 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2424 );
2425
2426 VOID
2427 ConsoleEfiUgaClose (
2428 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2429 );
2430
2431 VOID
2432 ConsoleEfiGopClose (
2433 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2434 );
2435
2436 NTSTATUS
2437 ConsoleEfiGopOpen (
2438 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2439 );
2440
2441 NTSTATUS
2442 ConsoleEfiGopEnable (
2443 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2444 );
2445
2446 NTSTATUS
2447 ConsoleEfiUgaSetResolution (
2448 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole,
2449 _In_ PBL_DISPLAY_MODE DisplayMode,
2450 _In_ ULONG DisplayModeCount
2451 );
2452
2453 NTSTATUS
2454 ConsoleCreateLocalInputConsole (
2455 VOID
2456 );
2457
2458 NTSTATUS
2459 ConsoleInputLocalEraseBuffer (
2460 _In_ PBL_INPUT_CONSOLE Console,
2461 _In_opt_ PULONG ValueToFill
2462 );
2463
2464 VOID
2465 ConsolepClearBuffer (
2466 _In_ PUCHAR FrameBuffer,
2467 _In_ ULONG Width,
2468 _In_ PUCHAR FillColor,
2469 _In_ ULONG Height,
2470 _In_ ULONG ScanlineWidth,
2471 _In_ ULONG PixelDepth
2472 );
2473
2474 NTSTATUS
2475 ConsolepConvertColorToPixel (
2476 _In_ BL_COLOR Color,
2477 _Out_ PUCHAR Pixel
2478 );
2479
2480 extern ULONG MmDescriptorCallTreeCount;
2481 extern ULONG BlpApplicationFlags;
2482 extern BL_LIBRARY_PARAMETERS BlpLibraryParameters;
2483 extern BL_TRANSLATION_TYPE MmTranslationType;
2484 extern PBL_ARCH_CONTEXT CurrentExecutionContext;
2485 extern PBL_DEVICE_DESCRIPTOR BlpBootDevice;
2486 extern BL_LOADED_APPLICATION_ENTRY BlpApplicationEntry;
2487 extern EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *EfiConOut;
2488 extern EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *EfiConInEx;
2489 extern EFI_GUID EfiGraphicsOutputProtocol;
2490 extern EFI_GUID EfiUgaDrawProtocol;
2491 extern EFI_GUID EfiLoadedImageProtocol;
2492 extern EFI_GUID EfiDevicePathProtocol;
2493 extern EFI_GUID EfiBlockIoProtocol;
2494 extern EFI_GUID EfiSimpleTextInputExProtocol;
2495 extern EFI_GUID EfiRootAcpiTableGuid;
2496 extern EFI_GUID EfiRootAcpiTable10Guid;
2497 extern EFI_GUID EfiGlobalVariable;
2498 extern ULONG ConsoleGraphicalResolutionListFlags;
2499 extern BL_DISPLAY_MODE ConsoleGraphicalResolutionList[];
2500 extern BL_DISPLAY_MODE ConsoleTextResolutionList[];
2501 extern ULONG ConsoleGraphicalResolutionListSize;
2502 extern PVOID DspRemoteInputConsole;
2503 extern PVOID DspLocalInputConsole;
2504 extern WCHAR BlScratchBuffer[8192];
2505 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlUnmappedAllocated;
2506 extern ULONGLONG BlpTimePerformanceFrequency;
2507 extern LIST_ENTRY RegisteredFileSystems;
2508
2509 #endif