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