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