xref: /reactos/boot/freeldr/freeldr/ntldr/winldr.h (revision 8a978a17)
1 /*
2  * PROJECT:     FreeLoader
3  * LICENSE:     GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
4  * PURPOSE:     Windows-compatible NT OS Loader.
5  * COPYRIGHT:   Copyright 2006-2019 Aleksey Bragin <aleksey@reactos.org>
6  */
7 
8 #pragma once
9 
10 #include <arc/setupblk.h>
11 
12 /* Entry-point to kernel */
13 typedef VOID (NTAPI *KERNEL_ENTRY_POINT) (PLOADER_PARAMETER_BLOCK LoaderBlock);
14 
15 /* Descriptors */
16 #define NUM_GDT 128     // Must be 128
17 #define NUM_IDT 0x100   // Only 16 are used though. Must be 0x100
18 
19 #if 0
20 
21 #include <pshpack1.h>
22 typedef struct  /* Root System Descriptor Pointer */
23 {
24     CHAR             signature [8];          /* contains "RSD PTR " */
25     UCHAR            checksum;               /* to make sum of struct == 0 */
26     CHAR             oem_id [6];             /* OEM identification */
27     UCHAR            revision;               /* Must be 0 for 1.0, 2 for 2.0 */
28     ULONG            rsdt_physical_address;  /* 32-bit physical address of RSDT */
29     ULONG            length;                 /* XSDT Length in bytes including hdr */
30     ULONGLONG        xsdt_physical_address;  /* 64-bit physical address of XSDT */
31     UCHAR            extended_checksum;      /* Checksum of entire table */
32     CHAR             reserved [3];           /* reserved field must be 0 */
33 } RSDP_DESCRIPTOR, *PRSDP_DESCRIPTOR;
34 #include <poppack.h>
35 
36 typedef struct _ARC_DISK_SIGNATURE_EX
37 {
38     ARC_DISK_SIGNATURE DiskSignature;
39     CHAR ArcName[MAX_PATH];
40 } ARC_DISK_SIGNATURE_EX, *PARC_DISK_SIGNATURE_EX;
41 
42 #endif
43 
44 #define MAX_OPTIONS_LENGTH 255
45 
46 typedef struct _LOADER_SYSTEM_BLOCK
47 {
48     LOADER_PARAMETER_BLOCK LoaderBlock;
49     LOADER_PARAMETER_EXTENSION Extension;
50     SETUP_LOADER_BLOCK SetupBlock;
51 #ifdef _M_IX86
52     HEADLESS_LOADER_BLOCK HeadlessLoaderBlock;
53 #endif
54     NLS_DATA_BLOCK NlsDataBlock;
55     CHAR LoadOptions[MAX_OPTIONS_LENGTH+1];
56     CHAR ArcBootDeviceName[MAX_PATH+1];
57     // CHAR ArcHalDeviceName[MAX_PATH];
58     CHAR NtBootPathName[MAX_PATH+1];
59     CHAR NtHalPathName[MAX_PATH+1];
60     ARC_DISK_INFORMATION ArcDiskInformation;
61 } LOADER_SYSTEM_BLOCK, *PLOADER_SYSTEM_BLOCK;
62 
63 extern PLOADER_SYSTEM_BLOCK WinLdrSystemBlock;
64 
65 
66 // conversion.c
67 #if 0
68 PVOID VaToPa(PVOID Va);
69 PVOID PaToVa(PVOID Pa);
70 VOID List_PaToVa(_In_ LIST_ENTRY *ListEntry);
71 #endif
72 VOID ConvertConfigToVA(PCONFIGURATION_COMPONENT_DATA Start);
73 
74 
75 // winldr.c
76 PVOID WinLdrLoadModule(PCSTR ModuleName, PULONG Size,
77                        TYPE_OF_MEMORY MemoryType);
78 
79 // wlmemory.c
80 BOOLEAN
81 WinLdrSetupMemoryLayout(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock);
82 
83 // wlregistry.c
84 BOOLEAN
85 WinLdrInitSystemHive(
86     IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock,
87     IN PCSTR SystemRoot,
88     IN BOOLEAN Setup);
89 
90 BOOLEAN WinLdrScanSystemHive(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock,
91                              IN PCSTR SystemRoot);
92 
93 // winldr.c
94 VOID
95 WinLdrInitializePhase1(PLOADER_PARAMETER_BLOCK LoaderBlock,
96                        PCSTR Options,
97                        PCSTR SystemPath,
98                        PCSTR BootPath,
99                        USHORT VersionToBoot);
100 BOOLEAN
101 WinLdrLoadNLSData(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock,
102                   IN PCSTR DirectoryPath,
103                   IN PCSTR AnsiFileName,
104                   IN PCSTR OemFileName,
105                   IN PCSTR LanguageFileName);
106 BOOLEAN
107 WinLdrAddDriverToList(LIST_ENTRY *BootDriverListHead,
108                       PWSTR RegistryPath,
109                       PWSTR ImagePath,
110                       PWSTR ServiceName);
111 
112 VOID
113 WinLdrpDumpMemoryDescriptors(PLOADER_PARAMETER_BLOCK LoaderBlock);
114 
115 VOID
116 WinLdrpDumpBootDriver(PLOADER_PARAMETER_BLOCK LoaderBlock);
117 
118 VOID
119 WinLdrpDumpArcDisks(PLOADER_PARAMETER_BLOCK LoaderBlock);
120 
121 ARC_STATUS
122 LoadAndBootWindowsCommon(
123     USHORT OperatingSystemVersion,
124     PLOADER_PARAMETER_BLOCK LoaderBlock,
125     PCSTR BootOptions,
126     PCSTR BootPath,
127     BOOLEAN Setup);
128 
129 VOID
130 WinLdrSetupMachineDependent(PLOADER_PARAMETER_BLOCK LoaderBlock);
131 
132 VOID
133 WinLdrSetProcessorContext(VOID);
134 
135 // arch/xxx/winldr.c
136 BOOLEAN
137 MempSetupPaging(IN PFN_NUMBER StartPage,
138                 IN PFN_NUMBER NumberOfPages,
139                 IN BOOLEAN KernelMapping);
140 
141 VOID
142 MempUnmapPage(PFN_NUMBER Page);
143 
144 VOID
145 MempDump(VOID);
146