093867a37d20cdf037bda8eea6a7983a8863658b
[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 /* UEFI Headers */
26 #include <Uefi.h>
27 #include <DevicePath.h>
28 #include <LoadedImage.h>
29 #include <GraphicsOutput.h>
30 #include <UgaDraw.h>
31 #include <BlockIo.h>
32
33 /* DEFINES *******************************************************************/
34
35 #define BL_APPLICATION_FLAG_CONVERTED_FROM_EFI 0x01
36
37 #define BL_APP_ENTRY_SIGNATURE "BTAPENT"
38
39 #define BOOT_APPLICATION_SIGNATURE_1 'TOOB'
40 #define BOOT_APPLICATION_SIGNATURE_2 ' PPA'
41
42 #define BOOT_MEMORY_TRANSLATION_TYPE_PHYSICAL 0
43 #define BOOT_MEMORY_TRANSLATION_TYPE_VIRTUAL 1
44
45 #define BOOT_APPLICATION_VERSION 2
46 #define BL_MEMORY_DATA_VERSION 1
47 #define BL_RETURN_ARGUMENTS_VERSION 1
48 #define BL_FIRMWARE_DESCRIPTOR_VERSION 2
49
50 #define BL_APPLICATION_ENTRY_FLAG_NO_GUID 0x01
51 #define BL_APPLICATION_ENTRY_REBOOT_ON_ERROR 0x20
52
53 #define BL_CONTEXT_PAGING_ON 1
54 #define BL_CONTEXT_INTERRUPTS_ON 2
55
56 #define BL_MM_FLAG_USE_FIRMWARE_FOR_MEMORY_MAP_BUFFERS 0x01
57 #define BL_MM_FLAG_REQUEST_COALESCING 0x02
58
59 #define BL_MM_ADD_DESCRIPTOR_COALESCE_FLAG 0x01
60 #define BL_MM_ADD_DESCRIPTOR_TRUNCATE_FLAG 0x02
61 #define BL_MM_ADD_DESCRIPTOR_NEVER_COALESCE_FLAG 0x10
62 #define BL_MM_ADD_DESCRIPTOR_NEVER_TRUNCATE_FLAG 0x20
63 #define BL_MM_ADD_DESCRIPTOR_UPDATE_LIST_POINTER_FLAG 0x2000
64
65 #define BL_MM_REQUEST_DEFAULT_TYPE 1
66 #define BL_MM_REQUEST_TOP_DOWN_TYPE 2
67
68 #define BL_MM_REMOVE_VIRTUAL_REGION_FLAG 0x80000000
69
70 #define BL_LIBRARY_FLAG_NO_DISPLAY 0x01
71 #define BL_LIBRARY_FLAG_REINITIALIZE 0x02
72 #define BL_LIBRARY_FLAG_REINITIALIZE_ALL 0x04
73 #define BL_LIBRARY_FLAG_ZERO_HEAP_ALLOCATIONS_ON_FREE 0x10
74 #define BL_LIBRARY_FLAG_INITIALIZATION_COMPLETED 0x20
75 #define BL_LIBRARY_FLAG_NO_GRAPHICS_CONSOLE 0x800
76
77 #define BL_DISPLAY_GRAPHICS_FORCED_VIDEO_MODE_FLAG 0x01
78 #define BL_DISPLAY_GRAPHICS_FORCED_HIGH_RES_MODE_FLAG 0x02
79
80 #define BL_HT_VALUE_IS_INLINE 0x01
81
82 #define BL_FS_REGISTER_AT_HEAD_FLAG 1
83
84 #define BL_BLOCK_DEVICE_REMOVABLE_FLAG 0x01
85
86 #define BL_MEMORY_CLASS_SHIFT 28
87
88 /* ENUMERATIONS **************************************************************/
89
90 typedef enum _BL_COLOR
91 {
92 Black,
93 Blue,
94 Green,
95 Cyan,
96 Red,
97 Magenta,
98 Brown,
99 LtGray,
100 Gray,
101 LtBlue,
102 LtGreen,
103 LtCyan,
104 LtRed,
105 LtMagenta,
106 Yellow,
107 White
108 } BL_COLOR, *PBL_COLOR;
109
110 typedef enum _BL_MEMORY_DESCRIPTOR_TYPE
111 {
112 BlMdPhysical,
113 BlMdVirtual,
114 } BL_MEMORY_DESCRIPTOR_TYPE;
115
116 typedef enum _BL_TRANSLATION_TYPE
117 {
118 BlNone,
119 BlVirtual,
120 BlPae,
121 BlMax
122 } BL_TRANSLATION_TYPE;
123
124 typedef enum _BL_ARCH_MODE
125 {
126 BlProtectedMode,
127 BlRealMode
128 } BL_ARCH_MODE;
129
130 //
131 // Boot Device Types
132 //
133 typedef enum _BL_DEVICE_TYPE
134 {
135 DiskDevice = 0,
136 LegacyPartitionDevice = 2,
137 SerialDevice = 3,
138 UdpDevice = 4,
139 BootDevice = 5,
140 PartitionDevice = 6,
141 LocateDevice = 8,
142 } BL_DEVICE_TYPE;
143
144 //
145 // Local Device Types
146 //
147 typedef enum _BL_LOCAL_DEVICE_TYPE
148 {
149 LocalDevice = 0,
150 FloppyDevice = 1,
151 CdRomDevice = 2,
152 RamDiskDevice = 3,
153 FileDevice = 5,
154 VirtualDiskDevice = 6
155 } BL_LOCAL_DEVICE_TYPE;
156
157 //
158 // Partition types
159 //
160 typedef enum _BL_PARTITION_TYPE
161 {
162 GptPartition,
163 MbrPartition,
164 RawPartition,
165 } BL_PARTITION_TYPE;
166
167 //
168 // File Path Types
169 //
170 typedef enum _BL_PATH_TYPE
171 {
172 EfiPath = 4
173 } BL_PATH_TYPE;
174
175 //
176 // Classes of Memory
177 //
178 typedef enum _BL_MEMORY_CLASS
179 {
180 BlLoaderClass = 0xD,
181 BlApplicationClass,
182 BlSystemClass
183 } BL_MEMORY_CLASS;
184
185 //
186 // Types of Memory
187 //
188 typedef enum _BL_MEMORY_TYPE
189 {
190 //
191 // Loader Memory
192 //
193 BlLoaderMemory = 0xD0000002,
194 BlLoaderDeviceMemory = 0xD0000004,
195 BlLoaderHeap = 0xD0000005,
196 BlLoaderPageDirectory = 0xD0000006,
197 BlLoaderReferencePage = 0xD0000007,
198 BlLoaderRamDisk = 0xD0000008,
199 BlLoaderData = 0xD000000A,
200 BlLoaderBlockMemory = 0xD000000C,
201 BlLoaderSelfMap = 0xD000000F,
202
203 //
204 // Application Memory
205 //
206 BlApplicationData = 0xE0000004,
207
208 //
209 // System Memory
210 //
211 BlConventionalMemory = 0xF0000001,
212 BlUnusableMemory = 0xF0000002,
213 BlReservedMemory = 0xF0000003,
214 BlEfiBootMemory = 0xF0000004,
215 BlEfiRuntimeMemory = 0xF0000006,
216 BlAcpiReclaimMemory = 0xF0000008,
217 BlAcpiNvsMemory = 0xF0000009,
218 BlDeviceIoMemory = 0xF000000A,
219 BlDevicePortMemory = 0xF000000B,
220 BlPalMemory = 0xF000000C,
221 } BL_MEMORY_TYPE;
222
223 typedef enum _BL_MEMORY_ATTR
224 {
225 //
226 // Memory Caching Attributes
227 //
228 BlMemoryUncached = 0x00000001,
229 BlMemoryWriteCombined = 0x00000002,
230 BlMemoryWriteThrough = 0x00000004,
231 BlMemoryWriteBack = 0x00000008,
232 BlMemoryUncachedExported = 0x00000010,
233 BlMemoryValidCacheAttributes = BlMemoryUncached | BlMemoryWriteCombined | BlMemoryWriteThrough | BlMemoryWriteBack | BlMemoryUncachedExported,
234 BlMemoryValidCacheAttributeMask = 0x000000FF,
235
236 //
237 // Memory Protection Attributes
238 //
239 BlMemoryWriteProtected = 0x00000100,
240 BlMemoryReadProtected = 0x00000200,
241 BlMemoryExecuteProtected = 0x00000400,
242 BlMemoryValidProtectionAttributes = BlMemoryWriteProtected | BlMemoryReadProtected | BlMemoryExecuteProtected,
243 BlMemoryValidProtectionAttributeMask = 0x0000FF00,
244
245 //
246 // Memory Allocation Attributes
247 //
248 BlMemoryNonFixed = 0x00020000,
249 BlMemoryFixed = 0x00040000,
250 BlMemoryValidAllocationAttributes = BlMemoryNonFixed | BlMemoryFixed,
251 BlMemoryValidAllocationAttributeMask = 0x00FF0000,
252
253 //
254 // Memory Type Attributes
255 //
256 BlMemoryRuntime = 0x01000000,
257 BlMemoryCoalesced = 0x02000000,
258 BlMemoryUpdate = 0x04000000,
259 BlMemoryNonFirmware = 0x08000000,
260 BlMemorySpecial = 0x20000000,
261 BlMemoryFirmware = 0x80000000,
262 BlMemoryValidTypeAttributes = BlMemoryRuntime | BlMemoryCoalesced | BlMemoryUpdate | BlMemoryNonFirmware | BlMemorySpecial | BlMemoryFirmware,
263 BlMemoryValidTypeAttributeMask = 0xFF000000,
264 } BL_MEMORY_ATTR;
265
266 /* CALLBACKS *****************************************************************/
267
268 typedef
269 NTSTATUS
270 (*PBL_FS_INIT_CALLBACK) (
271 VOID
272 );
273
274 typedef
275 NTSTATUS
276 (*PBL_FS_DESTROY_CALLBACK) (
277 VOID
278 );
279
280 typedef
281 NTSTATUS
282 (*PBL_FS_MOUNT_CALLBACK) (
283 VOID
284 );
285
286 typedef
287 NTSTATUS
288 (*PBL_FS_PURGE_CALLBACK) (
289 VOID
290 );
291
292 typedef
293 NTSTATUS
294 (*PBL_FILE_DESTROY_CALLBACK) (
295 _In_ PVOID Entry
296 );
297
298 struct _BL_TEXT_CONSOLE;
299 struct _BL_DISPLAY_STATE;
300 typedef
301 NTSTATUS
302 (*PCONSOLE_DESTRUCT) (
303 _In_ struct _BL_TEXT_CONSOLE* Console
304 );
305
306 typedef
307 NTSTATUS
308 (*PCONSOLE_REINITIALIZE) (
309 _In_ struct _BL_TEXT_CONSOLE* Console
310 );
311
312 typedef
313 NTSTATUS
314 (*PCONSOLE_GET_TEXT_STATE) (
315 _In_ struct _BL_TEXT_CONSOLE* Console,
316 _Out_ struct _BL_DISPLAY_STATE* TextState
317 );
318
319 typedef
320 NTSTATUS
321 (*PCONSOLE_SET_TEXT_STATE) (
322 _In_ struct _BL_TEXT_CONSOLE* Console,
323 _In_ ULONG Flags,
324 _In_ struct _BL_DISPLAY_STATE* TextState
325 );
326
327 typedef
328 NTSTATUS
329 (*PCONSOLE_GET_TEXT_RESOLUTION) (
330 _In_ struct _BL_TEXT_CONSOLE* Console,
331 _Out_ PULONG TextResolution
332 );
333
334 typedef
335 NTSTATUS
336 (*PCONSOLE_SET_TEXT_RESOLUTION) (
337 _In_ struct _BL_TEXT_CONSOLE* Console,
338 _In_ ULONG NewTextResolution,
339 _Out_ PULONG OldTextResolution
340 );
341
342 typedef
343 NTSTATUS
344 (*PCONSOLE_CLEAR_TEXT) (
345 _In_ struct _BL_TEXT_CONSOLE* Console,
346 _In_ ULONG Attribute
347 );
348
349 typedef
350 NTSTATUS
351 (*PCONSOLE_WRITE_TEXT) (
352 _In_ struct _BL_TEXT_CONSOLE* Console,
353 _In_ PCHAR Text,
354 _In_ ULONG Attribute
355 );
356
357 typedef
358 BOOLEAN
359 (*PBL_TBL_LOOKUP_ROUTINE) (
360 _In_ PVOID Entry,
361 _In_ PVOID Argument1,
362 _In_ PVOID Argument2,
363 _In_ PVOID Argument3,
364 _In_ PVOID Argument4
365 );
366
367 typedef
368 NTSTATUS
369 (*PBL_TBL_MAP_ROUTINE) (
370 _In_ PVOID Entry,
371 _In_ ULONG EntryIndex
372 );
373
374 typedef
375 NTSTATUS
376 (*PBL_TBL_SET_ROUTINE) (
377 _In_ PVOID Entry
378 );
379
380 typedef
381 NTSTATUS
382 (*PBL_IO_DESTROY_ROUTINE) (
383 VOID
384 );
385
386 struct _BL_HASH_ENTRY;
387 typedef
388 BOOLEAN
389 (*PBL_HASH_TABLE_COMPARE_FUNCTION) (
390 _In_ struct _BL_HASH_ENTRY* Entry1,
391 _In_ struct _BL_HASH_ENTRY* Entry2
392 );
393
394 typedef
395 ULONG
396 (*PBL_HASH_TABLE_HASH_FUNCTION) (
397 _In_ struct _BL_HASH_ENTRY* Entry,
398 _In_ ULONG TableSize
399 );
400
401 /* DATA STRUCTURES ***********************************************************/
402
403 typedef struct _BL_LIBRARY_PARAMETERS
404 {
405 ULONG LibraryFlags;
406 ULONG TranslationType;
407 ULONG MinimumAllocationCount;
408 ULONG MinimumHeapSize;
409 ULONG HeapAllocationAttributes;
410 PWCHAR ApplicationBaseDirectory;
411 ULONG DescriptorCount;
412 PWCHAR FontBaseDirectory;
413 } BL_LIBRARY_PARAMETERS, *PBL_LIBRARY_PARAMETERS;
414
415 /* This should eventually go into a more public header */
416 typedef struct _BOOT_APPLICATION_PARAMETER_BLOCK
417 {
418 /* This header tells the library what image we're dealing with */
419 ULONG Signature[2];
420 ULONG Version;
421 ULONG Size;
422 ULONG ImageType;
423 ULONG MemoryTranslationType;
424
425 /* Where is the image located */
426 ULONGLONG ImageBase;
427 ULONG ImageSize;
428
429 /* Offset to BL_MEMORY_DATA */
430 ULONG MemoryDataOffset;
431
432 /* Offset to BL_APPLICATION_ENTRY */
433 ULONG AppEntryOffset;
434
435 /* Offset to BL_DEVICE_DESCRPIPTOR */
436 ULONG BootDeviceOffset;
437
438 /* Offset to BL_FIRMWARE_PARAMETERS */
439 ULONG FirmwareParametersOffset;
440
441 /* Offset to BL_RETURN_ARGUMENTS */
442 ULONG ReturnArgumentsOffset;
443 } BOOT_APPLICATION_PARAMETER_BLOCK, *PBOOT_APPLICATION_PARAMETER_BLOCK;
444
445 typedef struct _BL_MEMORY_DATA
446 {
447 ULONG Version;
448 ULONG MdListOffset;
449 ULONG DescriptorCount;
450 ULONG DescriptorSize;
451 ULONG DescriptorOffset;
452 } BL_MEMORY_DATA, *PBL_MEMORY_DATA;
453
454 typedef struct _BL_FIRMWARE_DESCRIPTOR
455 {
456 ULONG Version;
457 ULONG Unknown;
458 EFI_HANDLE ImageHandle;
459 EFI_SYSTEM_TABLE *SystemTable;
460 } BL_FIRMWARE_DESCRIPTOR, *PBL_FIRMWARE_DESCRIPTOR;
461
462 typedef struct _BL_RETURN_ARGUMENTS
463 {
464 ULONG Version;
465 NTSTATUS Status;
466 ULONG ReturnArgumentData[5];
467 } BL_RETURN_ARGUMENTS, *PBL_RETURN_ARGUMENTS;
468
469 typedef struct _BL_MEMORY_DESCRIPTOR
470 {
471 LIST_ENTRY ListEntry;
472 union
473 {
474 struct
475 {
476 ULONGLONG BasePage;
477 ULONGLONG VirtualPage;
478 };
479 struct
480 {
481 ULONGLONG BaseAddress;
482 ULONGLONG VirtualAddress;
483 };
484 };
485 ULONGLONG PageCount;
486 ULONG Flags;
487 BL_MEMORY_TYPE Type;
488 } BL_MEMORY_DESCRIPTOR, *PBL_MEMORY_DESCRIPTOR;
489
490 typedef struct _BL_BCD_OPTION
491 {
492 ULONG Type;
493 ULONG DataOffset;
494 ULONG DataSize;
495 ULONG ListOffset;
496 ULONG NextEntryOffset;
497 ULONG Empty;
498 } BL_BCD_OPTION, *PBL_BCD_OPTION;
499
500 typedef struct _BL_APPLICATION_ENTRY
501 {
502 CHAR Signature[8];
503 ULONG Flags;
504 GUID Guid;
505 ULONG Unknown[4];
506 BL_BCD_OPTION BcdData;
507 } BL_APPLICATION_ENTRY, *PBL_APPLICATION_ENTRY;
508
509 typedef struct _BL_HARDDISK_DEVICE
510 {
511 ULONG PartitionType;
512 union
513 {
514 struct
515 {
516 ULONG PartitionSignature;
517 } Mbr;
518
519 struct
520 {
521 GUID PartitionSignature;
522 } Gpt;
523
524 struct
525 {
526 ULONG DiskNumber;
527 } Raw;
528 };
529 } BL_HARDDISK_DEVICE;
530
531 typedef struct _BL_LOCAL_DEVICE
532 {
533 ULONG Type;
534 union
535 {
536 struct
537 {
538 ULONG DriveNumber;
539 } FloppyDisk;
540
541 BL_HARDDISK_DEVICE HardDisk;
542
543 struct
544 {
545 PHYSICAL_ADDRESS ImageBase;
546 LARGE_INTEGER ImageSize;
547 ULONG ImageOffset;
548 } RamDisk;
549 };
550 } BL_LOCAL_DEVICE;
551
552 typedef struct _BL_DEVICE_DESCRIPTOR
553 {
554 ULONG Size;
555 ULONG Flags;
556 DEVICE_TYPE DeviceType;
557 ULONG Unknown;
558 union
559 {
560 BL_LOCAL_DEVICE Local;
561
562 struct
563 {
564 ULONG Unknown;
565 } Remote;
566
567 struct
568 {
569 union
570 {
571 ULONG PartitionNumber;
572 } Mbr;
573
574 union
575 {
576 GUID PartitionGuid;
577 } Gpt;
578
579 BL_LOCAL_DEVICE Disk;
580 } Partition;
581 };
582 } BL_DEVICE_DESCRIPTOR, *PBL_DEVICE_DESCRIPTOR;
583
584 typedef struct _BL_FILE_PATH_DESCRIPTOR
585 {
586 ULONG Version;
587 ULONG Length;
588 ULONG PathType;
589 UCHAR Path[ANYSIZE_ARRAY];
590 } BL_FILE_PATH_DESCRIPTOR, *PBL_FILE_PATH_DESCRIPTOR;
591
592 typedef struct _BL_WINDOWS_LOAD_OPTIONS
593 {
594 CHAR Signature[8];
595 ULONG Version;
596 ULONG Length;
597 ULONG OsPathOffset;
598 WCHAR LoadOptions[ANYSIZE_ARRAY];
599 } BL_WINDOWS_LOAD_OPTIONS, *PBL_WINDOWS_LOAD_OPTIONS;
600
601 typedef struct _BL_ARCH_CONTEXT
602 {
603 BL_ARCH_MODE Mode;
604 BL_TRANSLATION_TYPE TranslationType;
605 ULONG ContextFlags;
606 } BL_ARCH_CONTEXT, *PBL_ARCH_CONTEXT;
607
608 typedef struct _BL_MEMORY_DESCRIPTOR_LIST
609 {
610 LIST_ENTRY ListHead;
611 PLIST_ENTRY First;
612 PLIST_ENTRY This;
613 ULONG Type;
614 } BL_MEMORY_DESCRIPTOR_LIST, *PBL_MEMORY_DESCRIPTOR_LIST;
615
616 typedef struct _BL_ADDRESS_RANGE
617 {
618 ULONGLONG Minimum;
619 ULONGLONG Maximum;
620 } BL_ADDRESS_RANGE, *PBL_ADDRESS_RANGE;
621
622 typedef struct _BL_FILE_ENTRY
623 {
624 ULONG DeviceIndex;
625 PBL_FILE_DESTROY_CALLBACK DestroyCallback;
626 } BL_FILE_ENTRY, *PBL_FILE_ENTRY;
627
628 typedef struct _BL_FILE_SYSTEM_ENTRY
629 {
630 LIST_ENTRY ListEntry;
631 PBL_FS_INIT_CALLBACK InitCallback;
632 PBL_FS_DESTROY_CALLBACK DestroyCallback;
633 PBL_FS_MOUNT_CALLBACK MountCallback;
634 PBL_FS_PURGE_CALLBACK PurgeCallback;
635 } BL_FILE_SYSTEM_ENTRY, *PBL_FILE_SYSTEM_ENTRY;
636
637 typedef struct _BL_FILE_SYSTEM_REGISTRATION_TABLE
638 {
639 PBL_FS_INIT_CALLBACK Init;
640 PBL_FS_DESTROY_CALLBACK Destroy;
641 PBL_FS_MOUNT_CALLBACK Mount;
642 PBL_FS_PURGE_CALLBACK Purge;
643 } BL_FILE_SYSTEM_REGISTRATION_TABLE;
644
645 typedef struct _BL_DISPLAY_STATE
646 {
647 ULONG BgColor;
648 ULONG FgColor;
649 ULONG XPos;
650 ULONG YPos;
651 ULONG CursorVisible;
652 } BL_DISPLAY_STATE, *PBL_DISPLAY_STATE;
653
654 typedef struct _BL_DISPLAY_MODE
655 {
656 ULONG HRes;
657 ULONG VRes;
658 ULONG HRes2;
659 } BL_DISPLAY_MODE, *PBL_DISPLAY_MODE;
660
661 typedef struct _BL_TEXT_CONSOLE_VTABLE
662 {
663 PCONSOLE_DESTRUCT Destruct;
664 PCONSOLE_REINITIALIZE Reinitialize;
665 PCONSOLE_GET_TEXT_STATE GetTextState;
666 PCONSOLE_SET_TEXT_STATE SetTextState;
667 PCONSOLE_GET_TEXT_RESOLUTION GetTextResolution;
668 PCONSOLE_SET_TEXT_RESOLUTION SetTextResolution;
669 PCONSOLE_CLEAR_TEXT ClearText;
670 PCONSOLE_WRITE_TEXT WriteText;
671 } BL_TEXT_CONSOLE_VTABLE, *PBL_TEXT_CONSOLE_VTABLE;
672
673 typedef struct _BL_GRAPHICS_CONSOLE_VTABLE
674 {
675 BL_TEXT_CONSOLE_VTABLE Text;
676 /// more for graphics ///
677 } BL_GRAPHICS_CONSOLE_VTABLE, *PBL_GRAPHICS_CONSOLE_VTABLE;
678
679 typedef struct _BL_TEXT_CONSOLE
680 {
681 PBL_TEXT_CONSOLE_VTABLE Callbacks;
682 BL_DISPLAY_STATE State;
683 BL_DISPLAY_MODE DisplayMode;
684 BOOLEAN Active;
685 EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL* Protocol;
686 ULONG Mode;
687 EFI_SIMPLE_TEXT_OUTPUT_MODE OldMode;
688 } BL_TEXT_CONSOLE, *PBL_TEXT_CONSOLE;
689
690 typedef enum _BL_GRAPHICS_CONSOLE_TYPE
691 {
692 BlGopConsole,
693 BlUgaConsole
694 } BL_GRAPHICS_CONSOLE_TYPE;
695
696 typedef struct _BL_GRAPHICS_CONSOLE
697 {
698 BL_TEXT_CONSOLE TextConsole;
699 BL_DISPLAY_MODE DisplayMode;
700 ULONG PixelDepth;
701 ULONG FgColor;
702 ULONG BgColor;
703 BL_DISPLAY_MODE OldDisplayMode;
704 ULONG OldPixelDepth;
705 EFI_HANDLE Handle;
706 BL_GRAPHICS_CONSOLE_TYPE Type;
707 EFI_GRAPHICS_OUTPUT_PROTOCOL* Protocol;
708 PVOID FrameBuffer;
709 ULONG FrameBufferSize;
710 ULONG PixelsPerScanLine;
711 ULONG Mode;
712 ULONG OldMode;
713 } BL_GRAPHICS_CONSOLE, *PBL_GRAPHICS_CONSOLE;
714
715 typedef struct _BL_REMOTE_CONSOLE
716 {
717 BL_TEXT_CONSOLE TextConsole;
718 } BL_REMOTE_CONSOLE, *PBL_REMOTE_CONSOLE;
719
720 typedef struct _BL_HASH_TABLE
721 {
722 PLIST_ENTRY HashLinks;
723 ULONG Size;
724 PBL_HASH_TABLE_COMPARE_FUNCTION CompareFunction;
725 PBL_HASH_TABLE_HASH_FUNCTION HashFunction;
726 } BL_HASH_TABLE, *PBL_HASH_TABLE;
727
728 typedef struct _BL_HASH_ENTRY
729 {
730 ULONG Size;
731 ULONG Flags;
732 PVOID Value;
733 } BL_HASH_ENTRY, *PBL_HASH_ENTRY;
734
735 typedef struct _BL_HASH_VALUE
736 {
737 ULONG DataSize;
738 PVOID Data;
739 } BL_HASH_VALUE, *PBL_HASH_VALUE;
740
741 typedef struct _BL_HASH_NODE
742 {
743 LIST_ENTRY ListEntry;
744 BL_HASH_ENTRY Entry;
745 BL_HASH_VALUE Value;
746 } BL_HASH_NODE, *PBL_HASH_NODE;
747
748 typedef struct _BL_BLOCK_DEVICE
749 {
750 BL_LOCAL_DEVICE_TYPE Type;
751 ULONG DeviceFlags;
752 ULONG Unknown;
753 BL_PARTITION_TYPE PartitionType;
754 ULONG BlockSize;
755 ULONG Alignment;
756 struct
757 {
758 union
759 {
760 struct
761 {
762 ULONG Signature;
763 } Mbr;
764 struct
765 {
766 GUID Signature;
767 } Gpt;
768 };
769 } Disk;
770 ULONGLONG LastBlock;
771 EFI_BLOCK_IO* Protocol;
772 EFI_HANDLE Handle;
773 } BL_BLOCK_DEVICE, *PBL_BLOCK_DEVICE;
774
775 typedef struct _BL_PROTOCOL_HANDLE
776 {
777 EFI_HANDLE Handle;
778 PVOID Interface;
779 } BL_PROTOCOL_HANDLE, *PBL_PROTOCOL_HANDLE;
780
781 /* INLINE ROUTINES ***********************************************************/
782
783 FORCEINLINE
784 VOID
785 BlSetupDefaultParameters (
786 _Out_ PBL_LIBRARY_PARAMETERS LibraryParameters
787 )
788 {
789 BL_LIBRARY_PARAMETERS DefaultParameters =
790 {
791 0x20,
792 BlVirtual,
793 1024,
794 2 * 1024 * 1024,
795 0,
796 NULL,
797 0,
798 NULL
799 };
800
801 /* Copy the defaults */
802 RtlCopyMemory(LibraryParameters, &DefaultParameters, sizeof(*LibraryParameters));
803 }
804
805 FORCEINLINE
806 VOID
807 MmMdInitializeListHead (
808 _In_ PBL_MEMORY_DESCRIPTOR_LIST List
809 )
810 {
811 /* Initialize the list */
812 InitializeListHead(&List->ListHead);
813 List->First = &List->ListHead;
814 List->This = NULL;
815 }
816
817 /* INITIALIZATION ROUTINES ***************************************************/
818
819 NTSTATUS
820 BlInitializeLibrary(
821 _In_ PBOOT_APPLICATION_PARAMETER_BLOCK BootAppParameters,
822 _In_ PBL_LIBRARY_PARAMETERS LibraryParameters
823 );
824
825 NTSTATUS
826 BlpArchInitialize (
827 _In_ ULONG Phase
828 );
829
830 NTSTATUS
831 BlpFwInitialize (
832 _In_ ULONG Phase,
833 _In_ PBL_FIRMWARE_DESCRIPTOR FirmwareParameters
834 );
835
836 NTSTATUS
837 BlpMmInitialize (
838 _In_ PBL_MEMORY_DATA MemoryData,
839 _In_ BL_TRANSLATION_TYPE TranslationType,
840 _In_ PBL_LIBRARY_PARAMETERS LibraryParameters
841 );
842
843 NTSTATUS
844 MmBaInitialize (
845 VOID
846 );
847
848 NTSTATUS
849 MmPaInitialize (
850 _In_ PBL_MEMORY_DATA MemoryData,
851 _In_ ULONG MinimumPages
852 );
853
854 NTSTATUS
855 MmArchInitialize (
856 _In_ ULONG Phase,
857 _In_ PBL_MEMORY_DATA MemoryData,
858 _In_ BL_TRANSLATION_TYPE TranslationType,
859 _In_ BL_TRANSLATION_TYPE LibraryTranslationType
860 );
861
862 NTSTATUS
863 MmHaInitialize (
864 _In_ ULONG HeapSize,
865 _In_ ULONG HeapAttributes
866 );
867
868 VOID
869 MmMdInitialize (
870 _In_ ULONG Phase,
871 _In_ PBL_LIBRARY_PARAMETERS LibraryParameters
872 );
873
874 NTSTATUS
875 BlpDeviceInitialize (
876 VOID
877 );
878
879 NTSTATUS
880 BlpIoInitialize (
881 VOID
882 );
883
884 NTSTATUS
885 BlpFileInitialize (
886 VOID
887 );
888
889 NTSTATUS
890 FatInitialize (
891 VOID
892 );
893
894 NTSTATUS
895 BlpDisplayInitialize (
896 _In_ ULONG Flags
897 );
898
899 VOID
900 BlDestroyLibrary (
901 VOID
902 );
903
904 NTSTATUS
905 BcInitialize (
906 VOID
907 );
908
909 /* FIRMWARE ROUTINES *********************************************************/
910
911 VOID
912 EfiPrintf (
913 _In_ PWCHAR Format,
914 ...
915 );
916
917 NTSTATUS
918 EfiAllocatePages (
919 _In_ ULONG Type,
920 _In_ ULONG Pages,
921 _Inout_ EFI_PHYSICAL_ADDRESS* Memory
922 );
923
924 NTSTATUS
925 EfiStall (
926 _In_ ULONG StallTime
927 );
928
929 NTSTATUS
930 EfiConOutQueryMode (
931 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE *TextInterface,
932 _In_ ULONG Mode,
933 _In_ UINTN* Columns,
934 _In_ UINTN* Rows
935 );
936
937 NTSTATUS
938 EfiConOutSetMode (
939 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE *TextInterface,
940 _In_ ULONG Mode
941 );
942
943 VOID
944 EfiConOutReadCurrentMode (
945 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE *TextInterface,
946 _Out_ EFI_SIMPLE_TEXT_OUTPUT_MODE* Mode
947 );
948
949 NTSTATUS
950 EfiConOutSetAttribute (
951 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE *TextInterface,
952 _In_ ULONG Attribute
953 );
954
955 NTSTATUS
956 EfiConOutSetCursorPosition (
957 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE *TextInterface,
958 _In_ ULONG Column,
959 _In_ ULONG Row
960 );
961
962 NTSTATUS
963 EfiConOutEnableCursor (
964 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE *TextInterface,
965 _In_ BOOLEAN Visible
966 );
967
968 NTSTATUS
969 EfiLocateHandleBuffer (
970 _In_ EFI_LOCATE_SEARCH_TYPE SearchType,
971 _In_ EFI_GUID *Protocol,
972 _Inout_ PULONG HandleCount,
973 _Inout_ EFI_HANDLE** Buffer
974 );
975
976 NTSTATUS
977 EfiOpenProtocol (
978 _In_ EFI_HANDLE Handle,
979 _In_ EFI_GUID *Protocol,
980 _Out_ PVOID* Interface
981 );
982
983 NTSTATUS
984 EfiCloseProtocol (
985 _In_ EFI_HANDLE Handle,
986 _In_ EFI_GUID *Protocol
987 );
988
989 NTSTATUS
990 EfiGopGetCurrentMode (
991 _In_ EFI_GRAPHICS_OUTPUT_PROTOCOL *GopInterface,
992 _Out_ UINTN* Mode,
993 _Out_ EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *Information
994 );
995
996 NTSTATUS
997 EfiGopSetMode (
998 _In_ EFI_GRAPHICS_OUTPUT_PROTOCOL *GopInterface,
999 _In_ ULONG Mode
1000 );
1001
1002 VOID
1003 EfiGopGetFrameBuffer (
1004 _In_ EFI_GRAPHICS_OUTPUT_PROTOCOL *GopInterface,
1005 _Out_ PHYSICAL_ADDRESS* FrameBuffer,
1006 _Out_ UINTN *FrameBufferSize
1007 );
1008
1009 VOID
1010 EfiResetSystem (
1011 _In_ EFI_RESET_TYPE ResetType
1012 );
1013
1014 EFI_DEVICE_PATH*
1015 EfiGetLeafNode (
1016 _In_ EFI_DEVICE_PATH *DevicePath
1017 );
1018
1019 EFI_DEVICE_PATH *
1020 EfiIsDevicePathParent (
1021 _In_ EFI_DEVICE_PATH *DevicePath1,
1022 _In_ EFI_DEVICE_PATH *DevicePath2
1023 );
1024
1025 /* PLATFORM TIMER ROUTINES ***************************************************/
1026
1027 NTSTATUS
1028 BlpTimeCalibratePerformanceCounter (
1029 VOID
1030 );
1031
1032 /* UTILITY ROUTINES **********************************************************/
1033
1034 EFI_STATUS
1035 EfiGetEfiStatusCode(
1036 _In_ NTSTATUS Status
1037 );
1038
1039 NTSTATUS
1040 EfiGetNtStatusCode (
1041 _In_ EFI_STATUS EfiStatus
1042 );
1043
1044 NTSTATUS
1045 BlUtlInitialize (
1046 VOID
1047 );
1048
1049 VOID
1050 BlFwReboot (
1051 VOID
1052 );
1053
1054 PGUID
1055 BlGetApplicationIdentifier (
1056 VOID
1057 );
1058
1059 /* TABLE ROUTINES ************************************************************/
1060
1061 NTSTATUS
1062 BlTblMap (
1063 _In_ PVOID *Table,
1064 _In_ ULONG Count,
1065 _In_ PBL_TBL_MAP_ROUTINE MapCallback
1066 );
1067
1068 PVOID
1069 BlTblFindEntry (
1070 _In_ PVOID *Table,
1071 _In_ ULONG Count,
1072 _Out_ PULONG EntryIndex,
1073 _In_ PBL_TBL_LOOKUP_ROUTINE Callback,
1074 _In_ PVOID Argument1,
1075 _In_ PVOID Argument2,
1076 _In_ PVOID Argument3,
1077 _In_ PVOID Argument4
1078 );
1079
1080 NTSTATUS
1081 BlTblSetEntry (
1082 _Inout_ PVOID** Table,
1083 _Inout_ PULONG Count,
1084 _In_ PVOID Entry,
1085 _Out_ PULONG EntryIndex,
1086 _In_ PBL_TBL_SET_ROUTINE Callback
1087 );
1088
1089 NTSTATUS
1090 TblDoNotPurgeEntry (
1091 _In_ PVOID Entry
1092 );
1093
1094 /* HASH TABLE ROUTINES *******************************************************/
1095
1096 NTSTATUS
1097 BlHtStore (
1098 _In_ ULONG TableId,
1099 _In_ PBL_HASH_ENTRY Entry,
1100 _In_ PVOID Data,
1101 _In_ ULONG DataSize
1102 );
1103
1104 NTSTATUS
1105 BlHtLookup (
1106 _In_ ULONG TableId,
1107 _In_ PBL_HASH_ENTRY Entry,
1108 _Out_ PBL_HASH_VALUE *Value
1109 );
1110
1111 NTSTATUS
1112 BlHtCreate (
1113 _In_ ULONG Size,
1114 _In_ PBL_HASH_TABLE_HASH_FUNCTION HashFunction,
1115 _In_ PBL_HASH_TABLE_COMPARE_FUNCTION CompareFunction,
1116 _Out_ PULONG Id
1117 );
1118
1119 /* BCD ROUTINES **************************************************************/
1120
1121 ULONG
1122 BlGetBootOptionSize (
1123 _In_ PBL_BCD_OPTION BcdOption
1124 );
1125
1126 /* CONTEXT ROUTINES **********************************************************/
1127
1128 VOID
1129 BlpArchSwitchContext (
1130 _In_ BL_ARCH_MODE NewMode
1131 );
1132
1133 /* MEMORY DESCRIPTOR ROUTINES ************************************************/
1134
1135 VOID
1136 MmMdFreeList(
1137 _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList
1138 );
1139
1140 PBL_MEMORY_DESCRIPTOR
1141 MmMdInitByteGranularDescriptor (
1142 _In_ ULONG Flags,
1143 _In_ BL_MEMORY_TYPE Type,
1144 _In_ ULONGLONG BasePage,
1145 _In_ ULONGLONG VirtualPage,
1146 _In_ ULONGLONG PageCount
1147 );
1148
1149 VOID
1150 MmMdFreeGlobalDescriptors (
1151 VOID
1152 );
1153
1154 NTSTATUS
1155 MmMdAddDescriptorToList (
1156 _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList,
1157 _In_ PBL_MEMORY_DESCRIPTOR MemoryDescriptor,
1158 _In_ ULONG Flags
1159 );
1160
1161 VOID
1162 MmMdRemoveDescriptorFromList (
1163 _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList,
1164 _In_ PBL_MEMORY_DESCRIPTOR Entry
1165 );
1166
1167 BOOLEAN
1168 MmMdFindSatisfyingRegion (
1169 _In_ PBL_MEMORY_DESCRIPTOR Descriptor,
1170 _Out_ PBL_MEMORY_DESCRIPTOR NewDescriptor,
1171 _In_ ULONGLONG Pages,
1172 _In_ PBL_ADDRESS_RANGE BaseRange,
1173 _In_ PBL_ADDRESS_RANGE VirtualRange,
1174 _In_ BOOLEAN TopDown,
1175 _In_ BL_MEMORY_TYPE MemoryType,
1176 _In_ ULONG Flags,
1177 _In_ ULONG Alignment
1178 );
1179
1180 NTSTATUS
1181 MmMdRemoveRegionFromMdlEx (
1182 __in PBL_MEMORY_DESCRIPTOR_LIST MdList,
1183 __in ULONG Flags,
1184 __in ULONGLONG BasePage,
1185 __in ULONGLONG PageCount,
1186 __in PBL_MEMORY_DESCRIPTOR_LIST NewMdList
1187 );
1188
1189 NTSTATUS
1190 MmMdFreeDescriptor (
1191 _In_ PBL_MEMORY_DESCRIPTOR MemoryDescriptor
1192 );
1193
1194 /* PAGE ALLOCATOR ROUTINES ***************************************************/
1195
1196 NTSTATUS
1197 MmPapAllocatePagesInRange (
1198 _Inout_ PVOID* PhysicalAddress,
1199 _In_ BL_MEMORY_TYPE MemoryType,
1200 _In_ ULONGLONG Pages,
1201 _In_ ULONG Attributes,
1202 _In_ ULONG Alignment,
1203 _In_opt_ PBL_ADDRESS_RANGE Range,
1204 _In_ ULONG Type
1205 );
1206
1207 NTSTATUS
1208 MmFwGetMemoryMap (
1209 _Out_ PBL_MEMORY_DESCRIPTOR_LIST MemoryMap,
1210 _In_ ULONG Flags
1211 );
1212
1213 /* VIRTUAL MEMORY ROUTINES ***************************************************/
1214
1215 NTSTATUS
1216 BlMmMapPhysicalAddressEx (
1217 _In_ PVOID* VirtualAddress,
1218 _In_ ULONG Attributes,
1219 _In_ ULONGLONG Size,
1220 _In_ PHYSICAL_ADDRESS PhysicalAddress
1221 );
1222
1223 /* BLOCK ALLOCATOR ROUTINES **************************************************/
1224
1225 NTSTATUS
1226 BlpMmCreateBlockAllocator (
1227 VOID
1228 );
1229
1230 /* HEAP ALLOCATOR ROUTINES ***************************************************/
1231
1232 PVOID
1233 BlMmAllocateHeap (
1234 _In_ ULONG Size
1235 );
1236
1237 NTSTATUS
1238 BlMmFreeHeap (
1239 _In_ PVOID Buffer
1240 );
1241
1242 /* DISPLAY ROUTINES **********************************************************/
1243
1244 VOID
1245 BlDisplayGetTextCellResolution (
1246 _Out_ PULONG TextWidth,
1247 _Out_ PULONG TextHeight
1248 );
1249
1250 /* I/O ROUTINES **************************************************************/
1251
1252 NTSTATUS
1253 BlpIoRegisterDestroyRoutine (
1254 _In_ PBL_IO_DESTROY_ROUTINE DestroyRoutine
1255 );
1256
1257 NTSTATUS
1258 BlDeviceClose (
1259 _In_ ULONG DeviceId
1260 );
1261
1262 NTSTATUS
1263 BlpDeviceOpen (
1264 _In_ PBL_DEVICE_DESCRIPTOR Device,
1265 _In_ ULONG Flags,
1266 _In_ ULONG Unknown,
1267 _Out_ PULONG DeviceId
1268 );
1269
1270 /* TEXT CONSOLE ROUTINES *****************************************************/
1271
1272 NTSTATUS
1273 ConsoleTextLocalDestruct (
1274 _In_ struct _BL_TEXT_CONSOLE* Console
1275 );
1276
1277 NTSTATUS
1278 ConsoleTextLocalReinitialize (
1279 _In_ struct _BL_TEXT_CONSOLE* Console
1280 );
1281
1282 NTSTATUS
1283 ConsoleTextBaseGetTextState (
1284 _In_ struct _BL_TEXT_CONSOLE* Console,
1285 _Out_ PBL_DISPLAY_STATE TextState
1286 );
1287
1288 NTSTATUS
1289 ConsoleTextLocalSetTextState (
1290 _In_ struct _BL_TEXT_CONSOLE* Console,
1291 _In_ ULONG Flags,
1292 _In_ PBL_DISPLAY_STATE TextState
1293 );
1294
1295 NTSTATUS
1296 ConsoleTextBaseGetTextResolution (
1297 _In_ struct _BL_TEXT_CONSOLE* Console,
1298 _Out_ PULONG TextResolution
1299 );
1300
1301 NTSTATUS
1302 ConsoleTextLocalSetTextResolution (
1303 _In_ struct _BL_TEXT_CONSOLE* Console,
1304 _In_ ULONG NewTextResolution,
1305 _Out_ PULONG OldTextResolution
1306 );
1307
1308 NTSTATUS
1309 ConsoleTextLocalClearText (
1310 _In_ struct _BL_TEXT_CONSOLE* Console,
1311 _In_ ULONG Attribute
1312 );
1313
1314 NTSTATUS
1315 ConsoleTextLocalWriteText (
1316 _In_ struct _BL_TEXT_CONSOLE* Console,
1317 _In_ PCHAR Text,
1318 _In_ ULONG Attribute
1319 );
1320
1321 NTSTATUS
1322 ConsoleTextLocalConstruct (
1323 _In_ PBL_TEXT_CONSOLE TextConsole,
1324 _In_ BOOLEAN Activate
1325 );
1326
1327 BOOLEAN
1328 ConsolepFindResolution (
1329 _In_ PBL_DISPLAY_MODE Mode,
1330 _In_ PBL_DISPLAY_MODE List,
1331 _In_ ULONG MaxIndex
1332 );
1333
1334 VOID
1335 ConsoleFirmwareTextClose (
1336 _In_ PBL_TEXT_CONSOLE TextConsole
1337 );
1338
1339 NTSTATUS
1340 ConsoleFirmwareTextOpen (
1341 _In_ PBL_TEXT_CONSOLE TextConsole
1342 );
1343
1344 NTSTATUS
1345 ConsoleFirmwareTextSetState (
1346 _In_ PBL_TEXT_CONSOLE TextConsole,
1347 _In_ UCHAR Mask,
1348 _In_ PBL_DISPLAY_STATE State
1349 );
1350
1351 NTSTATUS
1352 ConsoleGraphicalConstruct (
1353 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
1354 );
1355
1356 NTSTATUS
1357 ConsoleCreateRemoteConsole (
1358 _In_ PBL_TEXT_CONSOLE* TextConsole
1359 );
1360
1361 NTSTATUS
1362 ConsoleEfiGraphicalOpenProtocol (
1363 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole,
1364 _In_ BL_GRAPHICS_CONSOLE_TYPE Type
1365 );
1366
1367 VOID
1368 ConsoleFirmwareGraphicalClose (
1369 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
1370 );
1371
1372 NTSTATUS
1373 ConsoleFirmwareGraphicalEnable (
1374 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
1375 );
1376
1377 NTSTATUS
1378 ConsoleEfiUgaOpen (
1379 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
1380 );
1381
1382 VOID
1383 ConsoleEfiUgaClose (
1384 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
1385 );
1386
1387 VOID
1388 ConsoleEfiGopClose (
1389 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
1390 );
1391
1392 NTSTATUS
1393 ConsoleEfiGopOpen (
1394 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
1395 );
1396
1397 NTSTATUS
1398 ConsoleEfiGopEnable (
1399 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
1400 );
1401
1402 NTSTATUS
1403 ConsoleEfiUgaSetResolution (
1404 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole,
1405 _In_ PBL_DISPLAY_MODE DisplayMode,
1406 _In_ ULONG DisplayModeCount
1407 );
1408
1409 extern ULONG MmDescriptorCallTreeCount;
1410 extern ULONG BlpApplicationFlags;
1411 extern BL_LIBRARY_PARAMETERS BlpLibraryParameters;
1412 extern BL_TRANSLATION_TYPE MmTranslationType;
1413 extern PBL_ARCH_CONTEXT CurrentExecutionContext;
1414 extern PBL_DEVICE_DESCRIPTOR BlpBootDevice;
1415 extern BL_APPLICATION_ENTRY BlpApplicationEntry;
1416 extern SIMPLE_TEXT_OUTPUT_INTERFACE *EfiConOut;
1417 extern EFI_GUID EfiGraphicsOutputProtocol;
1418 extern EFI_GUID EfiUgaDrawProtocol;
1419 extern EFI_GUID EfiLoadedImageProtocol;
1420 extern EFI_GUID EfiDevicePathProtocol;
1421 extern EFI_GUID EfiBlockIoProtocol;
1422 extern EFI_GUID EfiSimpleTextInputExProtocol;
1423 extern ULONG ConsoleGraphicalResolutionListFlags;
1424 extern BL_DISPLAY_MODE ConsoleGraphicalResolutionList[];
1425 extern BL_DISPLAY_MODE ConsoleTextResolutionList[];
1426 extern ULONG ConsoleGraphicalResolutionListSize;
1427 extern PVOID DspRemoteInputConsole;
1428 #endif