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