5c94c3a64a00cc2ffb2c65f702e0bb4baae7256a
[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 struct _BL_FILE_ENTRY;
269 typedef
270 NTSTATUS
271 (*PBL_FILE_OPEN) (
272 _In_ struct _BL_FILE_ENTRY* ParentFileEntry,
273 _In_ PWCHAR FileName,
274 _In_ ULONG OpenFlags,
275 _Out_ struct _BL_FILE_ENTRY** FileEntry
276 );
277
278 typedef
279 NTSTATUS
280 (*PBL_FILE_CLOSE) (
281 _In_ struct _BL_FILE_ENTRY* FileEntry
282 );
283
284 typedef
285 NTSTATUS
286 (*PBL_FILE_READ) (
287 VOID
288 );
289
290 typedef
291 NTSTATUS
292 (*PBL_FILE_WRITE) (
293 VOID
294 );
295
296 typedef
297 NTSTATUS
298 (*PBL_FILE_GET_NEXT) (
299 VOID
300 );
301
302 typedef
303 NTSTATUS
304 (*PBL_FILE_GET_INFO) (
305 VOID
306 );
307
308 typedef
309 NTSTATUS
310 (*PBL_FILE_SET_INFO) (
311 VOID
312 );
313
314 typedef
315 NTSTATUS
316 (*PBL_FS_INIT_CALLBACK) (
317 VOID
318 );
319
320 typedef
321 NTSTATUS
322 (*PBL_FS_DESTROY_CALLBACK) (
323 VOID
324 );
325
326 typedef
327 NTSTATUS
328 (*PBL_FS_MOUNT_CALLBACK) (
329 _In_ ULONG DeviceId,
330 _In_ ULONG Unknown,
331 _Out_ struct _BL_FILE_ENTRY** FileEntry
332 );
333
334 typedef
335 NTSTATUS
336 (*PBL_FS_PURGE_CALLBACK) (
337 VOID
338 );
339
340 typedef
341 NTSTATUS
342 (*PBL_FILE_DESTROY_CALLBACK) (
343 _In_ PVOID Entry
344 );
345
346 struct _BL_TEXT_CONSOLE;
347 struct _BL_DISPLAY_STATE;
348 typedef
349 NTSTATUS
350 (*PCONSOLE_DESTRUCT) (
351 _In_ struct _BL_TEXT_CONSOLE* Console
352 );
353
354 typedef
355 NTSTATUS
356 (*PCONSOLE_REINITIALIZE) (
357 _In_ struct _BL_TEXT_CONSOLE* Console
358 );
359
360 typedef
361 NTSTATUS
362 (*PCONSOLE_GET_TEXT_STATE) (
363 _In_ struct _BL_TEXT_CONSOLE* Console,
364 _Out_ struct _BL_DISPLAY_STATE* TextState
365 );
366
367 typedef
368 NTSTATUS
369 (*PCONSOLE_SET_TEXT_STATE) (
370 _In_ struct _BL_TEXT_CONSOLE* Console,
371 _In_ ULONG Flags,
372 _In_ struct _BL_DISPLAY_STATE* TextState
373 );
374
375 typedef
376 NTSTATUS
377 (*PCONSOLE_GET_TEXT_RESOLUTION) (
378 _In_ struct _BL_TEXT_CONSOLE* Console,
379 _Out_ PULONG TextResolution
380 );
381
382 typedef
383 NTSTATUS
384 (*PCONSOLE_SET_TEXT_RESOLUTION) (
385 _In_ struct _BL_TEXT_CONSOLE* Console,
386 _In_ ULONG NewTextResolution,
387 _Out_ PULONG OldTextResolution
388 );
389
390 typedef
391 NTSTATUS
392 (*PCONSOLE_CLEAR_TEXT) (
393 _In_ struct _BL_TEXT_CONSOLE* Console,
394 _In_ ULONG Attribute
395 );
396
397 typedef
398 NTSTATUS
399 (*PCONSOLE_WRITE_TEXT) (
400 _In_ struct _BL_TEXT_CONSOLE* Console,
401 _In_ PCHAR Text,
402 _In_ ULONG Attribute
403 );
404
405 typedef
406 BOOLEAN
407 (*PBL_TBL_LOOKUP_ROUTINE) (
408 _In_ PVOID Entry,
409 _In_ PVOID Argument1,
410 _In_ PVOID Argument2,
411 _In_ PVOID Argument3,
412 _In_ PVOID Argument4
413 );
414
415 typedef
416 NTSTATUS
417 (*PBL_TBL_MAP_ROUTINE) (
418 _In_ PVOID Entry,
419 _In_ ULONG EntryIndex
420 );
421
422 typedef
423 NTSTATUS
424 (*PBL_TBL_SET_ROUTINE) (
425 _In_ PVOID Entry
426 );
427
428 typedef
429 NTSTATUS
430 (*PBL_IO_DESTROY_ROUTINE) (
431 VOID
432 );
433
434 struct _BL_HASH_ENTRY;
435 typedef
436 BOOLEAN
437 (*PBL_HASH_TABLE_COMPARE_FUNCTION) (
438 _In_ struct _BL_HASH_ENTRY* Entry1,
439 _In_ struct _BL_HASH_ENTRY* Entry2
440 );
441
442 typedef
443 ULONG
444 (*PBL_HASH_TABLE_HASH_FUNCTION) (
445 _In_ struct _BL_HASH_ENTRY* Entry,
446 _In_ ULONG TableSize
447 );
448
449 struct _BL_DEVICE_ENTRY;
450 struct _BL_DEVICE_DESCRIPTOR;
451 struct _BL_DEVICE_INFORMATION;
452
453 typedef
454 NTSTATUS
455 (*PBL_DEVICE_ENUMERATE_DEVICE_CLASS) (
456 VOID
457 );
458
459 typedef
460 NTSTATUS
461 (*PBL_DEVICE_OPEN) (
462 _In_ struct _BL_DEVICE_DESCRIPTOR* Device,
463 _In_ struct _BL_DEVICE_ENTRY* DeviceEntry
464 );
465
466 typedef
467 NTSTATUS
468 (*PBL_DEVICE_CLOSE) (
469 _In_ struct _BL_DEVICE_ENTRY* DeviceEntry
470 );
471
472 typedef
473 NTSTATUS
474 (*PBL_DEVICE_READ) (
475 VOID
476 );
477
478 typedef
479 NTSTATUS
480 (*PBL_DEVICE_WRITE) (
481 VOID
482 );
483
484 typedef
485 NTSTATUS
486 (*PBL_DEVICE_GET_INFORMATION) (
487 _In_ struct _BL_DEVICE_ENTRY* DeviceEntry,
488 _Out_ struct _BL_DEVICE_INFORMATION* DeviceInformation
489 );
490
491 typedef
492 NTSTATUS
493 (*PBL_DEVICE_SET_INFORMATION) (
494 VOID
495 );
496
497 typedef
498 NTSTATUS
499 (*PBL_DEVICE_RESET) (
500 VOID
501 );
502
503 typedef
504 NTSTATUS
505 (*PBL_DEVICE_FLUSH) (
506 VOID
507 );
508
509 typedef
510 NTSTATUS
511 (*PBL_DEVICE_CREATE) (
512 VOID
513 );
514
515
516 /* DATA STRUCTURES ***********************************************************/
517
518 typedef struct _BL_LIBRARY_PARAMETERS
519 {
520 ULONG LibraryFlags;
521 ULONG TranslationType;
522 ULONG MinimumAllocationCount;
523 ULONG MinimumHeapSize;
524 ULONG HeapAllocationAttributes;
525 PWCHAR ApplicationBaseDirectory;
526 ULONG DescriptorCount;
527 PWCHAR FontBaseDirectory;
528 } BL_LIBRARY_PARAMETERS, *PBL_LIBRARY_PARAMETERS;
529
530 /* This should eventually go into a more public header */
531 typedef struct _BOOT_APPLICATION_PARAMETER_BLOCK
532 {
533 /* This header tells the library what image we're dealing with */
534 ULONG Signature[2];
535 ULONG Version;
536 ULONG Size;
537 ULONG ImageType;
538 ULONG MemoryTranslationType;
539
540 /* Where is the image located */
541 ULONGLONG ImageBase;
542 ULONG ImageSize;
543
544 /* Offset to BL_MEMORY_DATA */
545 ULONG MemoryDataOffset;
546
547 /* Offset to BL_APPLICATION_ENTRY */
548 ULONG AppEntryOffset;
549
550 /* Offset to BL_DEVICE_DESCRPIPTOR */
551 ULONG BootDeviceOffset;
552
553 /* Offset to BL_FIRMWARE_PARAMETERS */
554 ULONG FirmwareParametersOffset;
555
556 /* Offset to BL_RETURN_ARGUMENTS */
557 ULONG ReturnArgumentsOffset;
558 } BOOT_APPLICATION_PARAMETER_BLOCK, *PBOOT_APPLICATION_PARAMETER_BLOCK;
559
560 typedef struct _BL_MEMORY_DATA
561 {
562 ULONG Version;
563 ULONG MdListOffset;
564 ULONG DescriptorCount;
565 ULONG DescriptorSize;
566 ULONG DescriptorOffset;
567 } BL_MEMORY_DATA, *PBL_MEMORY_DATA;
568
569 typedef struct _BL_FIRMWARE_DESCRIPTOR
570 {
571 ULONG Version;
572 ULONG Unknown;
573 EFI_HANDLE ImageHandle;
574 EFI_SYSTEM_TABLE *SystemTable;
575 } BL_FIRMWARE_DESCRIPTOR, *PBL_FIRMWARE_DESCRIPTOR;
576
577 typedef struct _BL_RETURN_ARGUMENTS
578 {
579 ULONG Version;
580 NTSTATUS Status;
581 ULONG ReturnArgumentData[5];
582 } BL_RETURN_ARGUMENTS, *PBL_RETURN_ARGUMENTS;
583
584 typedef struct _BL_MEMORY_DESCRIPTOR
585 {
586 LIST_ENTRY ListEntry;
587 union
588 {
589 struct
590 {
591 ULONGLONG BasePage;
592 ULONGLONG VirtualPage;
593 };
594 struct
595 {
596 ULONGLONG BaseAddress;
597 ULONGLONG VirtualAddress;
598 };
599 };
600 ULONGLONG PageCount;
601 ULONG Flags;
602 BL_MEMORY_TYPE Type;
603 } BL_MEMORY_DESCRIPTOR, *PBL_MEMORY_DESCRIPTOR;
604
605 typedef struct _BL_BCD_OPTION
606 {
607 ULONG Type;
608 ULONG DataOffset;
609 ULONG DataSize;
610 ULONG ListOffset;
611 ULONG NextEntryOffset;
612 ULONG Empty;
613 } BL_BCD_OPTION, *PBL_BCD_OPTION;
614
615 typedef struct _BL_APPLICATION_ENTRY
616 {
617 CHAR Signature[8];
618 ULONG Flags;
619 GUID Guid;
620 ULONG Unknown[4];
621 BL_BCD_OPTION BcdData;
622 } BL_APPLICATION_ENTRY, *PBL_APPLICATION_ENTRY;
623
624 typedef struct _BL_LOADED_APPLICATION_ENTRY
625 {
626 ULONG Flags;
627 GUID Guid;
628 PBL_BCD_OPTION BcdData;
629 } BL_LOADED_APPLICATION_ENTRY, *PBL_LOADED_APPLICATION_ENTRY;
630
631 typedef struct _BL_HARDDISK_DEVICE
632 {
633 ULONG PartitionType;
634 union
635 {
636 struct
637 {
638 ULONG PartitionSignature;
639 } Mbr;
640
641 struct
642 {
643 GUID PartitionSignature;
644 } Gpt;
645
646 struct
647 {
648 ULONG DiskNumber;
649 } Raw;
650 };
651 } BL_HARDDISK_DEVICE;
652
653 typedef struct _BL_LOCAL_DEVICE
654 {
655 ULONG Type;
656 union
657 {
658 struct
659 {
660 ULONG DriveNumber;
661 } FloppyDisk;
662
663 BL_HARDDISK_DEVICE HardDisk;
664
665 struct
666 {
667 PHYSICAL_ADDRESS ImageBase;
668 LARGE_INTEGER ImageSize;
669 ULONG ImageOffset;
670 } RamDisk;
671 };
672 } BL_LOCAL_DEVICE;
673
674 typedef struct _BL_DEVICE_DESCRIPTOR
675 {
676 ULONG Size;
677 ULONG Flags;
678 DEVICE_TYPE DeviceType;
679 ULONG Unknown;
680 union
681 {
682 BL_LOCAL_DEVICE Local;
683
684 struct
685 {
686 ULONG Unknown;
687 } Remote;
688
689 struct
690 {
691 union
692 {
693 ULONG PartitionNumber;
694 } Mbr;
695
696 union
697 {
698 GUID PartitionGuid;
699 } Gpt;
700
701 BL_LOCAL_DEVICE Disk;
702 } Partition;
703 };
704 } BL_DEVICE_DESCRIPTOR, *PBL_DEVICE_DESCRIPTOR;
705
706 typedef struct _BL_FILE_PATH_DESCRIPTOR
707 {
708 ULONG Version;
709 ULONG Length;
710 ULONG PathType;
711 UCHAR Path[ANYSIZE_ARRAY];
712 } BL_FILE_PATH_DESCRIPTOR, *PBL_FILE_PATH_DESCRIPTOR;
713
714 typedef struct _BL_WINDOWS_LOAD_OPTIONS
715 {
716 CHAR Signature[8];
717 ULONG Version;
718 ULONG Length;
719 ULONG OsPathOffset;
720 WCHAR LoadOptions[ANYSIZE_ARRAY];
721 } BL_WINDOWS_LOAD_OPTIONS, *PBL_WINDOWS_LOAD_OPTIONS;
722
723 typedef struct _BL_ARCH_CONTEXT
724 {
725 BL_ARCH_MODE Mode;
726 BL_TRANSLATION_TYPE TranslationType;
727 ULONG ContextFlags;
728 } BL_ARCH_CONTEXT, *PBL_ARCH_CONTEXT;
729
730 typedef struct _BL_MEMORY_DESCRIPTOR_LIST
731 {
732 LIST_ENTRY ListHead;
733 PLIST_ENTRY First;
734 PLIST_ENTRY This;
735 ULONG Type;
736 } BL_MEMORY_DESCRIPTOR_LIST, *PBL_MEMORY_DESCRIPTOR_LIST;
737
738 typedef struct _BL_ADDRESS_RANGE
739 {
740 ULONGLONG Minimum;
741 ULONGLONG Maximum;
742 } BL_ADDRESS_RANGE, *PBL_ADDRESS_RANGE;
743
744 typedef struct _BL_FILE_CALLBACKS
745 {
746 PBL_FILE_OPEN Open;
747 PBL_FILE_CLOSE Close;
748 PBL_FILE_READ Read;
749 PBL_FILE_WRITE Write;
750 PBL_FILE_GET_NEXT GetNext;
751 PBL_FILE_GET_INFO GetInfo;
752 PBL_FILE_SET_INFO SetInfo;
753 } BL_FILE_CALLBACKS, *PBL_FILE_CALLBACKS;
754
755 typedef struct _BL_FILE_ENTRY
756 {
757 ULONG ReferenceCount;
758 ULONG FileId;
759 ULONG DeviceId;
760 ULONG Flags;
761 PWCHAR FilePath;
762 ULONG Unknown;
763 ULONG Unknown1;
764 ULONG Unknown2;
765 BL_FILE_CALLBACKS Callbacks;
766 PBL_FILE_DESTROY_CALLBACK DestroyCallback;
767 } BL_FILE_ENTRY, *PBL_FILE_ENTRY;
768
769 typedef struct _BL_FILE_SYSTEM_ENTRY
770 {
771 LIST_ENTRY ListEntry;
772 PBL_FS_INIT_CALLBACK InitCallback;
773 PBL_FS_DESTROY_CALLBACK DestroyCallback;
774 PBL_FS_MOUNT_CALLBACK MountCallback;
775 PBL_FS_PURGE_CALLBACK PurgeCallback;
776 } BL_FILE_SYSTEM_ENTRY, *PBL_FILE_SYSTEM_ENTRY;
777
778 typedef struct _BL_FILE_SYSTEM_REGISTRATION_TABLE
779 {
780 PBL_FS_INIT_CALLBACK Init;
781 PBL_FS_DESTROY_CALLBACK Destroy;
782 PBL_FS_MOUNT_CALLBACK Mount;
783 PBL_FS_PURGE_CALLBACK Purge;
784 } BL_FILE_SYSTEM_REGISTRATION_TABLE;
785
786 typedef struct _BL_DISPLAY_STATE
787 {
788 ULONG BgColor;
789 ULONG FgColor;
790 ULONG XPos;
791 ULONG YPos;
792 ULONG CursorVisible;
793 } BL_DISPLAY_STATE, *PBL_DISPLAY_STATE;
794
795 typedef struct _BL_DISPLAY_MODE
796 {
797 ULONG HRes;
798 ULONG VRes;
799 ULONG HRes2;
800 } BL_DISPLAY_MODE, *PBL_DISPLAY_MODE;
801
802 typedef struct _BL_TEXT_CONSOLE_VTABLE
803 {
804 PCONSOLE_DESTRUCT Destruct;
805 PCONSOLE_REINITIALIZE Reinitialize;
806 PCONSOLE_GET_TEXT_STATE GetTextState;
807 PCONSOLE_SET_TEXT_STATE SetTextState;
808 PCONSOLE_GET_TEXT_RESOLUTION GetTextResolution;
809 PCONSOLE_SET_TEXT_RESOLUTION SetTextResolution;
810 PCONSOLE_CLEAR_TEXT ClearText;
811 PCONSOLE_WRITE_TEXT WriteText;
812 } BL_TEXT_CONSOLE_VTABLE, *PBL_TEXT_CONSOLE_VTABLE;
813
814 typedef struct _BL_GRAPHICS_CONSOLE_VTABLE
815 {
816 BL_TEXT_CONSOLE_VTABLE Text;
817 /// more for graphics ///
818 } BL_GRAPHICS_CONSOLE_VTABLE, *PBL_GRAPHICS_CONSOLE_VTABLE;
819
820 typedef struct _BL_TEXT_CONSOLE
821 {
822 PBL_TEXT_CONSOLE_VTABLE Callbacks;
823 BL_DISPLAY_STATE State;
824 BL_DISPLAY_MODE DisplayMode;
825 BOOLEAN Active;
826 EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL* Protocol;
827 ULONG Mode;
828 EFI_SIMPLE_TEXT_OUTPUT_MODE OldMode;
829 } BL_TEXT_CONSOLE, *PBL_TEXT_CONSOLE;
830
831 typedef enum _BL_GRAPHICS_CONSOLE_TYPE
832 {
833 BlGopConsole,
834 BlUgaConsole
835 } BL_GRAPHICS_CONSOLE_TYPE;
836
837 typedef struct _BL_GRAPHICS_CONSOLE
838 {
839 BL_TEXT_CONSOLE TextConsole;
840 BL_DISPLAY_MODE DisplayMode;
841 ULONG PixelDepth;
842 ULONG FgColor;
843 ULONG BgColor;
844 BL_DISPLAY_MODE OldDisplayMode;
845 ULONG OldPixelDepth;
846 EFI_HANDLE Handle;
847 BL_GRAPHICS_CONSOLE_TYPE Type;
848 EFI_GRAPHICS_OUTPUT_PROTOCOL* Protocol;
849 PVOID FrameBuffer;
850 ULONG FrameBufferSize;
851 ULONG PixelsPerScanLine;
852 ULONG Mode;
853 ULONG OldMode;
854 } BL_GRAPHICS_CONSOLE, *PBL_GRAPHICS_CONSOLE;
855
856 typedef struct _BL_REMOTE_CONSOLE
857 {
858 BL_TEXT_CONSOLE TextConsole;
859 } BL_REMOTE_CONSOLE, *PBL_REMOTE_CONSOLE;
860
861 typedef struct _BL_HASH_TABLE
862 {
863 PLIST_ENTRY HashLinks;
864 ULONG Size;
865 PBL_HASH_TABLE_COMPARE_FUNCTION CompareFunction;
866 PBL_HASH_TABLE_HASH_FUNCTION HashFunction;
867 } BL_HASH_TABLE, *PBL_HASH_TABLE;
868
869 typedef struct _BL_HASH_ENTRY
870 {
871 ULONG Size;
872 ULONG Flags;
873 PVOID Value;
874 } BL_HASH_ENTRY, *PBL_HASH_ENTRY;
875
876 typedef struct _BL_HASH_VALUE
877 {
878 ULONG DataSize;
879 PVOID Data;
880 } BL_HASH_VALUE, *PBL_HASH_VALUE;
881
882 typedef struct _BL_HASH_NODE
883 {
884 LIST_ENTRY ListEntry;
885 BL_HASH_ENTRY Entry;
886 BL_HASH_VALUE Value;
887 } BL_HASH_NODE, *PBL_HASH_NODE;
888
889 typedef struct _BL_BLOCK_DEVICE_INFORMATION
890 {
891 BL_LOCAL_DEVICE_TYPE Type;
892 ULONG DeviceFlags;
893 ULONG Unknown;
894 BL_PARTITION_TYPE PartitionType;
895 ULONG BlockSize;
896 ULONG Alignment;
897 struct
898 {
899 union
900 {
901 struct
902 {
903 ULONG Signature;
904 } Mbr;
905 struct
906 {
907 GUID Signature;
908 } Gpt;
909 };
910 } Disk;
911 } BL_BLOCK_DEVICE_INFORMATION, *PBL_BLOCK_DEVICE_INFORMATION;
912
913 typedef struct _BL_DEVICE_INFORMATION
914 {
915 BL_DEVICE_TYPE DeviceType;
916 union
917 {
918 BL_BLOCK_DEVICE_INFORMATION BlockDeviceInfo;
919 };
920 } BL_DEVICE_INFORMATION, *PBL_DEVICE_INFORMATION;
921
922 typedef struct _BL_BLOCK_DEVICE
923 {
924 BL_BLOCK_DEVICE_INFORMATION;
925 ULONGLONG LastBlock;
926 EFI_BLOCK_IO* Protocol;
927 EFI_HANDLE Handle;
928 } BL_BLOCK_DEVICE, *PBL_BLOCK_DEVICE;
929
930 typedef struct _BL_PROTOCOL_HANDLE
931 {
932 EFI_HANDLE Handle;
933 PVOID Interface;
934 } BL_PROTOCOL_HANDLE, *PBL_PROTOCOL_HANDLE;
935
936 typedef struct _BL_DEVICE_CALLBACKS
937 {
938 PBL_DEVICE_ENUMERATE_DEVICE_CLASS EnumerateDeviceClass;
939 PBL_DEVICE_OPEN Open;
940 PBL_DEVICE_CLOSE Close;
941 PBL_DEVICE_READ Read;
942 PBL_DEVICE_WRITE Write;
943 PBL_DEVICE_GET_INFORMATION GetInformation;
944 PBL_DEVICE_SET_INFORMATION SetInformation;
945 PBL_DEVICE_RESET Reset;
946 PBL_DEVICE_FLUSH Flush;
947 PBL_DEVICE_CREATE Create;
948 } BL_DEVICE_CALLBACKS, *PBL_DEVICE_CALLBACKS;
949
950 typedef struct _BL_DEVICE_ENTRY
951 {
952 ULONG DeviceId;
953 ULONG Flags;
954 ULONG Unknown;
955 ULONG ReferenceCount;
956 BL_DEVICE_CALLBACKS Callbacks;
957 PVOID DeviceSpecificData;
958 PBL_DEVICE_DESCRIPTOR DeviceDescriptor;
959 } BL_DEVICE_ENTRY, *PBL_DEVICE_ENTRY;
960
961 /* INLINE ROUTINES ***********************************************************/
962
963 FORCEINLINE
964 VOID
965 BlSetupDefaultParameters (
966 _Out_ PBL_LIBRARY_PARAMETERS LibraryParameters
967 )
968 {
969 BL_LIBRARY_PARAMETERS DefaultParameters =
970 {
971 0x20,
972 BlVirtual,
973 1024,
974 2 * 1024 * 1024,
975 0,
976 NULL,
977 0,
978 NULL
979 };
980
981 /* Copy the defaults */
982 RtlCopyMemory(LibraryParameters, &DefaultParameters, sizeof(*LibraryParameters));
983 }
984
985 FORCEINLINE
986 VOID
987 MmMdInitializeListHead (
988 _In_ PBL_MEMORY_DESCRIPTOR_LIST List
989 )
990 {
991 /* Initialize the list */
992 InitializeListHead(&List->ListHead);
993 List->First = &List->ListHead;
994 List->This = NULL;
995 }
996
997 /* INITIALIZATION ROUTINES ***************************************************/
998
999 NTSTATUS
1000 BlInitializeLibrary(
1001 _In_ PBOOT_APPLICATION_PARAMETER_BLOCK BootAppParameters,
1002 _In_ PBL_LIBRARY_PARAMETERS LibraryParameters
1003 );
1004
1005 NTSTATUS
1006 BlpArchInitialize (
1007 _In_ ULONG Phase
1008 );
1009
1010 NTSTATUS
1011 BlpFwInitialize (
1012 _In_ ULONG Phase,
1013 _In_ PBL_FIRMWARE_DESCRIPTOR FirmwareParameters
1014 );
1015
1016 NTSTATUS
1017 BlpMmInitialize (
1018 _In_ PBL_MEMORY_DATA MemoryData,
1019 _In_ BL_TRANSLATION_TYPE TranslationType,
1020 _In_ PBL_LIBRARY_PARAMETERS LibraryParameters
1021 );
1022
1023 NTSTATUS
1024 MmBaInitialize (
1025 VOID
1026 );
1027
1028 NTSTATUS
1029 MmPaInitialize (
1030 _In_ PBL_MEMORY_DATA MemoryData,
1031 _In_ ULONG MinimumPages
1032 );
1033
1034 NTSTATUS
1035 MmArchInitialize (
1036 _In_ ULONG Phase,
1037 _In_ PBL_MEMORY_DATA MemoryData,
1038 _In_ BL_TRANSLATION_TYPE TranslationType,
1039 _In_ BL_TRANSLATION_TYPE LibraryTranslationType
1040 );
1041
1042 NTSTATUS
1043 MmHaInitialize (
1044 _In_ ULONG HeapSize,
1045 _In_ ULONG HeapAttributes
1046 );
1047
1048 VOID
1049 MmMdInitialize (
1050 _In_ ULONG Phase,
1051 _In_ PBL_LIBRARY_PARAMETERS LibraryParameters
1052 );
1053
1054 NTSTATUS
1055 BlpDeviceInitialize (
1056 VOID
1057 );
1058
1059 NTSTATUS
1060 BlpIoInitialize (
1061 VOID
1062 );
1063
1064 NTSTATUS
1065 BlpFileInitialize (
1066 VOID
1067 );
1068
1069 NTSTATUS
1070 BlpDisplayInitialize (
1071 _In_ ULONG Flags
1072 );
1073
1074 VOID
1075 BlDestroyLibrary (
1076 VOID
1077 );
1078
1079 NTSTATUS
1080 BcInitialize (
1081 VOID
1082 );
1083
1084 /* FIRMWARE ROUTINES *********************************************************/
1085
1086 VOID
1087 EfiPrintf (
1088 _In_ PWCHAR Format,
1089 ...
1090 );
1091
1092 NTSTATUS
1093 EfiAllocatePages (
1094 _In_ ULONG Type,
1095 _In_ ULONG Pages,
1096 _Inout_ EFI_PHYSICAL_ADDRESS* Memory
1097 );
1098
1099 NTSTATUS
1100 EfiStall (
1101 _In_ ULONG StallTime
1102 );
1103
1104 NTSTATUS
1105 EfiConOutQueryMode (
1106 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE *TextInterface,
1107 _In_ ULONG Mode,
1108 _In_ UINTN* Columns,
1109 _In_ UINTN* Rows
1110 );
1111
1112 NTSTATUS
1113 EfiConOutSetMode (
1114 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE *TextInterface,
1115 _In_ ULONG Mode
1116 );
1117
1118 VOID
1119 EfiConOutReadCurrentMode (
1120 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE *TextInterface,
1121 _Out_ EFI_SIMPLE_TEXT_OUTPUT_MODE* Mode
1122 );
1123
1124 NTSTATUS
1125 EfiConOutSetAttribute (
1126 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE *TextInterface,
1127 _In_ ULONG Attribute
1128 );
1129
1130 NTSTATUS
1131 EfiConOutSetCursorPosition (
1132 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE *TextInterface,
1133 _In_ ULONG Column,
1134 _In_ ULONG Row
1135 );
1136
1137 NTSTATUS
1138 EfiConOutEnableCursor (
1139 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE *TextInterface,
1140 _In_ BOOLEAN Visible
1141 );
1142
1143 NTSTATUS
1144 EfiLocateHandleBuffer (
1145 _In_ EFI_LOCATE_SEARCH_TYPE SearchType,
1146 _In_ EFI_GUID *Protocol,
1147 _Inout_ PULONG HandleCount,
1148 _Inout_ EFI_HANDLE** Buffer
1149 );
1150
1151 NTSTATUS
1152 EfiOpenProtocol (
1153 _In_ EFI_HANDLE Handle,
1154 _In_ EFI_GUID *Protocol,
1155 _Out_ PVOID* Interface
1156 );
1157
1158 NTSTATUS
1159 EfiCloseProtocol (
1160 _In_ EFI_HANDLE Handle,
1161 _In_ EFI_GUID *Protocol
1162 );
1163
1164 NTSTATUS
1165 EfiGopGetCurrentMode (
1166 _In_ EFI_GRAPHICS_OUTPUT_PROTOCOL *GopInterface,
1167 _Out_ UINTN* Mode,
1168 _Out_ EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *Information
1169 );
1170
1171 NTSTATUS
1172 EfiGopSetMode (
1173 _In_ EFI_GRAPHICS_OUTPUT_PROTOCOL *GopInterface,
1174 _In_ ULONG Mode
1175 );
1176
1177 VOID
1178 EfiGopGetFrameBuffer (
1179 _In_ EFI_GRAPHICS_OUTPUT_PROTOCOL *GopInterface,
1180 _Out_ PHYSICAL_ADDRESS* FrameBuffer,
1181 _Out_ UINTN *FrameBufferSize
1182 );
1183
1184 VOID
1185 EfiResetSystem (
1186 _In_ EFI_RESET_TYPE ResetType
1187 );
1188
1189 EFI_DEVICE_PATH*
1190 EfiGetLeafNode (
1191 _In_ EFI_DEVICE_PATH *DevicePath
1192 );
1193
1194 EFI_DEVICE_PATH *
1195 EfiIsDevicePathParent (
1196 _In_ EFI_DEVICE_PATH *DevicePath1,
1197 _In_ EFI_DEVICE_PATH *DevicePath2
1198 );
1199
1200 /* PLATFORM TIMER ROUTINES ***************************************************/
1201
1202 NTSTATUS
1203 BlpTimeCalibratePerformanceCounter (
1204 VOID
1205 );
1206
1207 /* FILESYSTEM ROUTINES *******************************************************/
1208
1209 NTSTATUS
1210 FatInitialize (
1211 VOID
1212 );
1213
1214 NTSTATUS
1215 FatMount (
1216 _In_ ULONG DeviceId,
1217 _In_ ULONG Unknown,
1218 _Out_ PBL_FILE_ENTRY* FileEntry
1219 );
1220
1221 /* UTILITY ROUTINES **********************************************************/
1222
1223 EFI_STATUS
1224 EfiGetEfiStatusCode(
1225 _In_ NTSTATUS Status
1226 );
1227
1228 NTSTATUS
1229 EfiGetNtStatusCode (
1230 _In_ EFI_STATUS EfiStatus
1231 );
1232
1233 NTSTATUS
1234 BlUtlInitialize (
1235 VOID
1236 );
1237
1238 VOID
1239 BlFwReboot (
1240 VOID
1241 );
1242
1243 PGUID
1244 BlGetApplicationIdentifier (
1245 VOID
1246 );
1247
1248 /* TABLE ROUTINES ************************************************************/
1249
1250 NTSTATUS
1251 BlTblMap (
1252 _In_ PVOID *Table,
1253 _In_ ULONG Count,
1254 _In_ PBL_TBL_MAP_ROUTINE MapCallback
1255 );
1256
1257 PVOID
1258 BlTblFindEntry (
1259 _In_ PVOID *Table,
1260 _In_ ULONG Count,
1261 _Out_ PULONG EntryIndex,
1262 _In_ PBL_TBL_LOOKUP_ROUTINE Callback,
1263 _In_ PVOID Argument1,
1264 _In_ PVOID Argument2,
1265 _In_ PVOID Argument3,
1266 _In_ PVOID Argument4
1267 );
1268
1269 NTSTATUS
1270 BlTblSetEntry (
1271 _Inout_ PVOID** Table,
1272 _Inout_ PULONG Count,
1273 _In_ PVOID Entry,
1274 _Out_ PULONG EntryIndex,
1275 _In_ PBL_TBL_SET_ROUTINE Callback
1276 );
1277
1278 NTSTATUS
1279 TblDoNotPurgeEntry (
1280 _In_ PVOID Entry
1281 );
1282
1283 /* HASH TABLE ROUTINES *******************************************************/
1284
1285 NTSTATUS
1286 BlHtStore (
1287 _In_ ULONG TableId,
1288 _In_ PBL_HASH_ENTRY Entry,
1289 _In_ PVOID Data,
1290 _In_ ULONG DataSize
1291 );
1292
1293 NTSTATUS
1294 BlHtLookup (
1295 _In_ ULONG TableId,
1296 _In_ PBL_HASH_ENTRY Entry,
1297 _Out_ PBL_HASH_VALUE *Value
1298 );
1299
1300 NTSTATUS
1301 BlHtCreate (
1302 _In_ ULONG Size,
1303 _In_ PBL_HASH_TABLE_HASH_FUNCTION HashFunction,
1304 _In_ PBL_HASH_TABLE_COMPARE_FUNCTION CompareFunction,
1305 _Out_ PULONG Id
1306 );
1307
1308 /* BCD ROUTINES **************************************************************/
1309
1310 ULONG
1311 BlGetBootOptionSize (
1312 _In_ PBL_BCD_OPTION BcdOption
1313 );
1314
1315 NTSTATUS
1316 BlGetBootOptionString (
1317 _In_ PBL_BCD_OPTION List,
1318 _In_ ULONG Type,
1319 _Out_ PWCHAR* Value
1320 );
1321
1322 NTSTATUS
1323 BlGetBootOptionInteger (
1324 _In_ PBL_BCD_OPTION List,
1325 _In_ ULONG Type,
1326 _Out_ PULONGLONG Value
1327 );
1328
1329 NTSTATUS
1330 BlGetBootOptionBoolean (
1331 _In_ PBL_BCD_OPTION List,
1332 _In_ ULONG Type,
1333 _Out_ PBOOLEAN Value
1334 );
1335
1336 /* CONTEXT ROUTINES **********************************************************/
1337
1338 VOID
1339 BlpArchSwitchContext (
1340 _In_ BL_ARCH_MODE NewMode
1341 );
1342
1343 /* MEMORY DESCRIPTOR ROUTINES ************************************************/
1344
1345 VOID
1346 MmMdFreeList(
1347 _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList
1348 );
1349
1350 PBL_MEMORY_DESCRIPTOR
1351 MmMdInitByteGranularDescriptor (
1352 _In_ ULONG Flags,
1353 _In_ BL_MEMORY_TYPE Type,
1354 _In_ ULONGLONG BasePage,
1355 _In_ ULONGLONG VirtualPage,
1356 _In_ ULONGLONG PageCount
1357 );
1358
1359 VOID
1360 MmMdFreeGlobalDescriptors (
1361 VOID
1362 );
1363
1364 NTSTATUS
1365 MmMdAddDescriptorToList (
1366 _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList,
1367 _In_ PBL_MEMORY_DESCRIPTOR MemoryDescriptor,
1368 _In_ ULONG Flags
1369 );
1370
1371 VOID
1372 MmMdRemoveDescriptorFromList (
1373 _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList,
1374 _In_ PBL_MEMORY_DESCRIPTOR Entry
1375 );
1376
1377 BOOLEAN
1378 MmMdFindSatisfyingRegion (
1379 _In_ PBL_MEMORY_DESCRIPTOR Descriptor,
1380 _Out_ PBL_MEMORY_DESCRIPTOR NewDescriptor,
1381 _In_ ULONGLONG Pages,
1382 _In_ PBL_ADDRESS_RANGE BaseRange,
1383 _In_ PBL_ADDRESS_RANGE VirtualRange,
1384 _In_ BOOLEAN TopDown,
1385 _In_ BL_MEMORY_TYPE MemoryType,
1386 _In_ ULONG Flags,
1387 _In_ ULONG Alignment
1388 );
1389
1390 NTSTATUS
1391 MmMdRemoveRegionFromMdlEx (
1392 __in PBL_MEMORY_DESCRIPTOR_LIST MdList,
1393 __in ULONG Flags,
1394 __in ULONGLONG BasePage,
1395 __in ULONGLONG PageCount,
1396 __in PBL_MEMORY_DESCRIPTOR_LIST NewMdList
1397 );
1398
1399 NTSTATUS
1400 MmMdFreeDescriptor (
1401 _In_ PBL_MEMORY_DESCRIPTOR MemoryDescriptor
1402 );
1403
1404 /* PAGE ALLOCATOR ROUTINES ***************************************************/
1405
1406 NTSTATUS
1407 MmPapAllocatePagesInRange (
1408 _Inout_ PVOID* PhysicalAddress,
1409 _In_ BL_MEMORY_TYPE MemoryType,
1410 _In_ ULONGLONG Pages,
1411 _In_ ULONG Attributes,
1412 _In_ ULONG Alignment,
1413 _In_opt_ PBL_ADDRESS_RANGE Range,
1414 _In_ ULONG Type
1415 );
1416
1417 NTSTATUS
1418 MmFwGetMemoryMap (
1419 _Out_ PBL_MEMORY_DESCRIPTOR_LIST MemoryMap,
1420 _In_ ULONG Flags
1421 );
1422
1423 /* VIRTUAL MEMORY ROUTINES ***************************************************/
1424
1425 NTSTATUS
1426 BlMmMapPhysicalAddressEx (
1427 _In_ PVOID* VirtualAddress,
1428 _In_ ULONG Attributes,
1429 _In_ ULONGLONG Size,
1430 _In_ PHYSICAL_ADDRESS PhysicalAddress
1431 );
1432
1433 /* BLOCK ALLOCATOR ROUTINES **************************************************/
1434
1435 NTSTATUS
1436 BlpMmCreateBlockAllocator (
1437 VOID
1438 );
1439
1440 /* HEAP ALLOCATOR ROUTINES ***************************************************/
1441
1442 PVOID
1443 BlMmAllocateHeap (
1444 _In_ ULONG Size
1445 );
1446
1447 NTSTATUS
1448 BlMmFreeHeap (
1449 _In_ PVOID Buffer
1450 );
1451
1452 /* DISPLAY ROUTINES **********************************************************/
1453
1454 VOID
1455 BlDisplayGetTextCellResolution (
1456 _Out_ PULONG TextWidth,
1457 _Out_ PULONG TextHeight
1458 );
1459
1460 /* I/O ROUTINES **************************************************************/
1461
1462 NTSTATUS
1463 BlpIoRegisterDestroyRoutine (
1464 _In_ PBL_IO_DESTROY_ROUTINE DestroyRoutine
1465 );
1466
1467 NTSTATUS
1468 BlDeviceClose (
1469 _In_ ULONG DeviceId
1470 );
1471
1472 NTSTATUS
1473 BlpDeviceOpen (
1474 _In_ PBL_DEVICE_DESCRIPTOR Device,
1475 _In_ ULONG Flags,
1476 _In_ ULONG Unknown,
1477 _Out_ PULONG DeviceId
1478 );
1479
1480 NTSTATUS
1481 BlDeviceGetInformation (
1482 _In_ ULONG DeviceId,
1483 _Out_ PBL_DEVICE_INFORMATION DeviceInformation
1484 );
1485
1486 /* FILE I/O ROUTINES *********************************************************/
1487
1488 NTSTATUS
1489 BlFileClose (
1490 _In_ ULONG FileId
1491 );
1492
1493 NTSTATUS
1494 BlFileOpen (
1495 _In_ ULONG DeviceId,
1496 _In_ PWCHAR FileName,
1497 _In_ ULONG OpenFlags,
1498 _Out_ PULONG FileId
1499 );
1500
1501 /* TEXT CONSOLE ROUTINES *****************************************************/
1502
1503 NTSTATUS
1504 ConsoleTextLocalDestruct (
1505 _In_ struct _BL_TEXT_CONSOLE* Console
1506 );
1507
1508 NTSTATUS
1509 ConsoleTextLocalReinitialize (
1510 _In_ struct _BL_TEXT_CONSOLE* Console
1511 );
1512
1513 NTSTATUS
1514 ConsoleTextBaseGetTextState (
1515 _In_ struct _BL_TEXT_CONSOLE* Console,
1516 _Out_ PBL_DISPLAY_STATE TextState
1517 );
1518
1519 NTSTATUS
1520 ConsoleTextLocalSetTextState (
1521 _In_ struct _BL_TEXT_CONSOLE* Console,
1522 _In_ ULONG Flags,
1523 _In_ PBL_DISPLAY_STATE TextState
1524 );
1525
1526 NTSTATUS
1527 ConsoleTextBaseGetTextResolution (
1528 _In_ struct _BL_TEXT_CONSOLE* Console,
1529 _Out_ PULONG TextResolution
1530 );
1531
1532 NTSTATUS
1533 ConsoleTextLocalSetTextResolution (
1534 _In_ struct _BL_TEXT_CONSOLE* Console,
1535 _In_ ULONG NewTextResolution,
1536 _Out_ PULONG OldTextResolution
1537 );
1538
1539 NTSTATUS
1540 ConsoleTextLocalClearText (
1541 _In_ struct _BL_TEXT_CONSOLE* Console,
1542 _In_ ULONG Attribute
1543 );
1544
1545 NTSTATUS
1546 ConsoleTextLocalWriteText (
1547 _In_ struct _BL_TEXT_CONSOLE* Console,
1548 _In_ PCHAR Text,
1549 _In_ ULONG Attribute
1550 );
1551
1552 NTSTATUS
1553 ConsoleTextLocalConstruct (
1554 _In_ PBL_TEXT_CONSOLE TextConsole,
1555 _In_ BOOLEAN Activate
1556 );
1557
1558 BOOLEAN
1559 ConsolepFindResolution (
1560 _In_ PBL_DISPLAY_MODE Mode,
1561 _In_ PBL_DISPLAY_MODE List,
1562 _In_ ULONG MaxIndex
1563 );
1564
1565 VOID
1566 ConsoleFirmwareTextClose (
1567 _In_ PBL_TEXT_CONSOLE TextConsole
1568 );
1569
1570 NTSTATUS
1571 ConsoleFirmwareTextOpen (
1572 _In_ PBL_TEXT_CONSOLE TextConsole
1573 );
1574
1575 NTSTATUS
1576 ConsoleFirmwareTextSetState (
1577 _In_ PBL_TEXT_CONSOLE TextConsole,
1578 _In_ UCHAR Mask,
1579 _In_ PBL_DISPLAY_STATE State
1580 );
1581
1582 NTSTATUS
1583 ConsoleGraphicalConstruct (
1584 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
1585 );
1586
1587 NTSTATUS
1588 ConsoleCreateRemoteConsole (
1589 _In_ PBL_TEXT_CONSOLE* TextConsole
1590 );
1591
1592 NTSTATUS
1593 ConsoleEfiGraphicalOpenProtocol (
1594 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole,
1595 _In_ BL_GRAPHICS_CONSOLE_TYPE Type
1596 );
1597
1598 VOID
1599 ConsoleFirmwareGraphicalClose (
1600 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
1601 );
1602
1603 NTSTATUS
1604 ConsoleFirmwareGraphicalEnable (
1605 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
1606 );
1607
1608 NTSTATUS
1609 ConsoleEfiUgaOpen (
1610 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
1611 );
1612
1613 VOID
1614 ConsoleEfiUgaClose (
1615 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
1616 );
1617
1618 VOID
1619 ConsoleEfiGopClose (
1620 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
1621 );
1622
1623 NTSTATUS
1624 ConsoleEfiGopOpen (
1625 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
1626 );
1627
1628 NTSTATUS
1629 ConsoleEfiGopEnable (
1630 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
1631 );
1632
1633 NTSTATUS
1634 ConsoleEfiUgaSetResolution (
1635 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole,
1636 _In_ PBL_DISPLAY_MODE DisplayMode,
1637 _In_ ULONG DisplayModeCount
1638 );
1639
1640 extern ULONG MmDescriptorCallTreeCount;
1641 extern ULONG BlpApplicationFlags;
1642 extern BL_LIBRARY_PARAMETERS BlpLibraryParameters;
1643 extern BL_TRANSLATION_TYPE MmTranslationType;
1644 extern PBL_ARCH_CONTEXT CurrentExecutionContext;
1645 extern PBL_DEVICE_DESCRIPTOR BlpBootDevice;
1646 extern BL_LOADED_APPLICATION_ENTRY BlpApplicationEntry;
1647 extern SIMPLE_TEXT_OUTPUT_INTERFACE *EfiConOut;
1648 extern EFI_GUID EfiGraphicsOutputProtocol;
1649 extern EFI_GUID EfiUgaDrawProtocol;
1650 extern EFI_GUID EfiLoadedImageProtocol;
1651 extern EFI_GUID EfiDevicePathProtocol;
1652 extern EFI_GUID EfiBlockIoProtocol;
1653 extern EFI_GUID EfiSimpleTextInputExProtocol;
1654 extern ULONG ConsoleGraphicalResolutionListFlags;
1655 extern BL_DISPLAY_MODE ConsoleGraphicalResolutionList[];
1656 extern BL_DISPLAY_MODE ConsoleTextResolutionList[];
1657 extern ULONG ConsoleGraphicalResolutionListSize;
1658 extern PVOID DspRemoteInputConsole;
1659 #endif