We now support the ARM Versatile/PB platform, which means qemu-system-arm -M versatil...
[reactos.git] / reactos / include / reactos / arc / arc.h
1 #ifndef _ARC_
2 #define _ARC_
3
4 typedef ULONG ARC_STATUS;
5
6 typedef enum _ARC_CODES
7 {
8 ESUCCESS,
9 E2BIG,
10 EACCES,
11 EAGAIN,
12 EBADF,
13 EBUSY,
14 EFAULT,
15 EINVAL,
16 EIO,
17 EISDIR,
18 EMFILE,
19 EMLINK,
20 ENAMETOOLONG,
21 ENODEV,
22 ENOENT,
23 ENOEXEC,
24 ENOMEM,
25 ENOSPC,
26 ENOTDIR,
27 ENOTTY,
28 ENXIO,
29 EROFS,
30 EMAXIMUM
31 } ARC_CODES;
32
33 typedef enum _IDENTIFIER_FLAG
34 {
35 Failed = 0x01,
36 ReadOnly = 0x02,
37 Removable = 0x04,
38 ConsoleIn = 0x08,
39 ConsoleOut = 0x10,
40 Input = 0x20,
41 Output = 0x40
42 } IDENTIFIER_FLAG;
43
44 typedef enum _CONFIGURATION_CLASS
45 {
46 SystemClass,
47 ProcessorClass,
48 CacheClass,
49 AdapterClass,
50 ControllerClass,
51 PeripheralClass,
52 MemoryClass,
53 MaximumClass
54 } CONFIGURATION_CLASS;
55
56 typedef enum _TYPE_OF_MEMORY
57 {
58 LoaderExceptionBlock,
59 LoaderSystemBlock,
60 LoaderFree,
61 LoaderBad,
62 LoaderLoadedProgram,
63 LoaderFirmwareTemporary,
64 LoaderFirmwarePermanent,
65 LoaderOsloaderHeap,
66 LoaderOsloaderStack,
67 LoaderSystemCode,
68 LoaderHalCode,
69 LoaderBootDriver,
70 LoaderConsoleInDriver,
71 LoaderConsoleOutDriver,
72 LoaderStartupDpcStack,
73 LoaderStartupKernelStack,
74 LoaderStartupPanicStack,
75 LoaderStartupPcrPage,
76 LoaderStartupPdrPage,
77 LoaderRegistryData,
78 LoaderMemoryData,
79 LoaderNlsData,
80 LoaderSpecialMemory,
81 LoaderBBTMemory,
82 LoaderReserve,
83 LoaderXIPRom,
84 LoaderHALCachedMemory,
85 LoaderLargePageFiller,
86 LoaderErrorLogMemory,
87 LoaderMaximum
88 } TYPE_OF_MEMORY;
89
90 typedef enum _MEMORY_TYPE
91 {
92 MemoryExceptionBlock,
93 MemorySystemBlock,
94 MemoryFree,
95 MemoryBad,
96 MemoryLoadedProgram,
97 MemoryFirmwareTemporary,
98 MemoryFirmwarePermanent,
99 MemoryFreeContiguous,
100 MemorySpecialMemory,
101 MemoryMaximum
102 } MEMORY_TYPE;
103
104 typedef struct _MEMORY_DESCRIPTOR
105 {
106 MEMORY_TYPE MemoryType;
107 ULONG BasePage;
108 ULONG PageCount;
109 } MEMORY_DESCRIPTOR, *PMEMORY_DESCRIPTOR;
110
111 typedef struct _MEMORY_ALLOCATION_DESCRIPTOR
112 {
113 LIST_ENTRY ListEntry;
114 TYPE_OF_MEMORY MemoryType;
115 ULONG BasePage;
116 ULONG PageCount;
117 } MEMORY_ALLOCATION_DESCRIPTOR, *PMEMORY_ALLOCATION_DESCRIPTOR;
118
119 typedef struct _BOOT_DRIVER_LIST_ENTRY
120 {
121 LIST_ENTRY ListEntry;
122 UNICODE_STRING FilePath;
123 UNICODE_STRING RegistryPath;
124 struct _LDR_DATA_TABLE_ENTRY *DataTableEntry;
125 } BOOT_DRIVER_LIST_ENTRY, *PBOOT_DRIVER_LIST_ENTRY;
126
127 typedef struct _ARC_DISK_SIGNATURE
128 {
129 LIST_ENTRY ListEntry;
130 ULONG Signature;
131 PCHAR ArcName;
132 ULONG CheckSum;
133 BOOLEAN ValidPartitionTable;
134 BOOLEAN xInt13;
135 BOOLEAN IsGpt;
136 BOOLEAN Reserved;
137 CHAR GptSignature[16];
138 } ARC_DISK_SIGNATURE, *PARC_DISK_SIGNATURE;
139
140 typedef struct _CONFIGURATION_COMPONENT
141 {
142 CONFIGURATION_CLASS Class;
143 CONFIGURATION_TYPE Type;
144 IDENTIFIER_FLAG Flags;
145 USHORT Version;
146 USHORT Revision;
147 ULONG Key;
148 ULONG AffinityMask;
149 ULONG ConfigurationDataLength;
150 ULONG IdentifierLength;
151 LPSTR Identifier;
152 } CONFIGURATION_COMPONENT, *PCONFIGURATION_COMPONENT;
153
154 typedef struct _CONFIGURATION_COMPONENT_DATA
155 {
156 struct _CONFIGURATION_COMPONENT_DATA *Parent;
157 struct _CONFIGURATION_COMPONENT_DATA *Child;
158 struct _CONFIGURATION_COMPONENT_DATA *Sibling;
159 CONFIGURATION_COMPONENT ComponentEntry;
160 PVOID ConfigurationData;
161 } CONFIGURATION_COMPONENT_DATA, *PCONFIGURATION_COMPONENT_DATA;
162
163 typedef struct _ARC_DISK_INFORMATION
164 {
165 LIST_ENTRY DiskSignatureListHead;
166 } ARC_DISK_INFORMATION, *PARC_DISK_INFORMATION;
167
168 typedef struct _MONITOR_CONFIGURATION_DATA
169 {
170 USHORT Version;
171 USHORT Revision;
172 USHORT HorizontalResolution;
173 USHORT HorizontalDisplayTime;
174 USHORT HorizontalBackPorch;
175 USHORT HorizontalFrontPorch;
176 USHORT HorizontalSync;
177 USHORT VerticalResolution;
178 USHORT VerticalBackPorch;
179 USHORT VerticalFrontPorch;
180 USHORT VerticalSync;
181 USHORT HorizontalScreenSize;
182 USHORT VerticalScreenSize;
183 } MONITOR_CONFIGURATION_DATA, *PMONITOR_CONFIGURATION_DATA;
184
185 typedef struct _FLOPPY_CONFIGURATION_DATA
186 {
187 USHORT Version;
188 USHORT Revision;
189 CHAR Size[8];
190 ULONG MaxDensity;
191 ULONG MountDensity;
192 } FLOPPY_CONFIGURATION_DATA, *PFLOPPY_CONFIGURATION_DATA;
193
194 //
195 // SMBIOS Table Header (FIXME: maybe move to smbios.h?)
196 //
197 typedef struct _SMBIOS_TABLE_HEADER
198 {
199 CHAR Signature[4];
200 UCHAR Checksum;
201 UCHAR Length;
202 UCHAR MajorVersion;
203 UCHAR MinorVersion;
204 USHORT MaximumStructureSize;
205 UCHAR EntryPointRevision;
206 UCHAR Reserved[5];
207 CHAR Signature2[5];
208 UCHAR IntermediateChecksum;
209 USHORT StructureTableLength;
210 ULONG StructureTableAddress;
211 USHORT NumberStructures;
212 UCHAR Revision;
213 } SMBIOS_TABLE_HEADER, *PSMBIOS_TABLE_HEADER;
214
215 //
216 // NLS Data Block
217 //
218 typedef struct _NLS_DATA_BLOCK
219 {
220 PVOID AnsiCodePageData;
221 PVOID OemCodePageData;
222 PVOID UnicodeCodePageData;
223 } NLS_DATA_BLOCK, *PNLS_DATA_BLOCK;
224
225 //
226 // ACPI Docking State
227 //
228 typedef struct _PROFILE_ACPI_DOCKING_STATE
229 {
230 USHORT DockingState;
231 USHORT SerialLength;
232 WCHAR SerialNumber[1];
233 } PROFILE_ACPI_DOCKING_STATE, *PPROFILE_ACPI_DOCKING_STATE;
234
235 //
236 // Subsystem Specific Loader Blocks
237 //
238 typedef struct _PROFILE_PARAMETER_BLOCK
239 {
240 USHORT Status;
241 USHORT Reserved;
242 USHORT DockingState;
243 USHORT Capabilities;
244 ULONG DockID;
245 ULONG SerialNumber;
246 } PROFILE_PARAMETER_BLOCK, *PPROFILE_PARAMETER_BLOCK;
247
248 typedef struct _HEADLESS_LOADER_BLOCK
249 {
250 UCHAR UsedBiosSettings;
251 UCHAR DataBits;
252 UCHAR StopBits;
253 UCHAR Parity;
254 ULONG BaudRate;
255 ULONG PortNumber;
256 PUCHAR PortAddress;
257 USHORT PciDeviceId;
258 USHORT PciVendorId;
259 UCHAR PciBusNumber;
260 UCHAR PciSlotNumber;
261 UCHAR PciFunctionNumber;
262 ULONG PciFlags;
263 GUID SystemGUID;
264 UCHAR IsMMIODevice;
265 UCHAR TerminalType;
266 } HEADLESS_LOADER_BLOCK, *PHEADLESS_LOADER_BLOCK;
267
268 typedef struct _NETWORK_LOADER_BLOCK
269 {
270 PCHAR DHCPServerACK;
271 ULONG DHCPServerACKLength;
272 PCHAR BootServerReplyPacket;
273 ULONG BootServerReplyPacketLength;
274 } NETWORK_LOADER_BLOCK, *PNETWORK_LOADER_BLOCK;
275
276 typedef struct _LOADER_PERFORMANCE_DATA
277 {
278 ULONGLONG StartTime;
279 ULONGLONG EndTime;
280 } LOADER_PERFORMANCE_DATA, *PLOADER_PERFORMANCE_DATA;
281
282 //
283 // Extended Loader Parameter Block
284 //
285 typedef struct _LOADER_PARAMETER_EXTENSION
286 {
287 ULONG Size;
288 PROFILE_PARAMETER_BLOCK Profile;
289 ULONG MajorVersion;
290 ULONG MinorVersion;
291 PVOID EmInfFileImage;
292 ULONG EmInfFileSize;
293 PVOID TriageDumpBlock;
294 //
295 // NT 5.1
296 //
297 ULONG LoaderPagesSpanned;
298 PHEADLESS_LOADER_BLOCK HeadlessLoaderBlock;
299 PSMBIOS_TABLE_HEADER SMBiosEPSHeader;
300 PVOID DrvDBImage;
301 ULONG DrvDBSize;
302 PNETWORK_LOADER_BLOCK NetworkLoaderBlock;
303 //
304 // NT 5.2+
305 //
306 PCHAR HalpIRQLToTPR;
307 PCHAR HalpVectorToIRQL;
308 LIST_ENTRY FirmwareDescriptorListHead;
309 PVOID AcpiTable;
310 ULONG AcpiTableSize;
311 //
312 // NT 5.2 SP1+
313 //
314 ULONG BootViaWinload:1;
315 ULONG BootViaEFI:1;
316 ULONG Reserved:30;
317 LOADER_PERFORMANCE_DATA LoaderPerformanceData;
318 LIST_ENTRY BootApplicationPersistentData;
319 PVOID WmdTestResult;
320 GUID BootIdentifier;
321 //
322 // NT 6
323 //
324 ULONG ResumePages;
325 PVOID DumpHeader;
326 } LOADER_PARAMETER_EXTENSION, *PLOADER_PARAMETER_EXTENSION;
327
328 //
329 // Architecture specific Loader Parameter Blocks
330 //
331 typedef struct _IA64_LOADER_BLOCK
332 {
333 ULONG PlaceHolder;
334 } IA64_LOADER_BLOCK, *PIA64_LOADER_BLOCK;
335
336 typedef struct _ALPHA_LOADER_BLOCK
337 {
338 ULONG PlaceHolder;
339 } ALPHA_LOADER_BLOCK, *PALPHA_LOADER_BLOCK;
340
341 typedef struct _I386_LOADER_BLOCK
342 {
343 PVOID CommonDataArea;
344 ULONG MachineType;
345 ULONG VirtualBias;
346 } I386_LOADER_BLOCK, *PI386_LOADER_BLOCK;
347
348 typedef struct _PPC_LOADER_BLOCK
349 {
350 PVOID BootInfo;
351 ULONG MachineType;
352 } PPC_LOADER_BLOCK, *PPPC_LOADER_BLOCK;
353
354 typedef struct _ARM_LOADER_BLOCK
355 {
356 #ifdef _ARM_
357 ULONG InterruptStack;
358 ULONG FirstLevelDcacheSize;
359 ULONG FirstLevelDcacheFillSize;
360 ULONG FirstLevelIcacheSize;
361 ULONG FirstLevelIcacheFillSize;
362 ULONG GpBase;
363 ULONG PanicStack;
364 ULONG PcrPage;
365 ULONG PdrPage;
366 ULONG SecondLevelDcacheSize;
367 ULONG SecondLevelDcacheFillSize;
368 ULONG SecondLevelIcacheSize;
369 ULONG SecondLevelIcacheFillSize;
370 ULONG PcrPage2;
371 #else
372 ULONG PlaceHolder;
373 #endif
374 } ARM_LOADER_BLOCK, *PARM_LOADER_BLOCK;
375
376 //
377 // Firmware information block (NT6+)
378 //
379
380 typedef struct _VIRTUAL_EFI_RUNTIME_SERVICES
381 {
382 ULONG_PTR GetTime;
383 ULONG_PTR SetTime;
384 ULONG_PTR GetWakeupTime;
385 ULONG_PTR SetWakeupTime;
386 ULONG_PTR SetVirtualAddressMap;
387 ULONG_PTR ConvertPointer;
388 ULONG_PTR GetVariable;
389 ULONG_PTR GetNextVariableName;
390 ULONG_PTR SetVariable;
391 ULONG_PTR GetNextHighMonotonicCount;
392 ULONG_PTR ResetSystem;
393 ULONG_PTR UpdateCapsule;
394 ULONG_PTR QueryCapsuleCapabilities;
395 ULONG_PTR QueryVariableInfo;
396 } VIRTUAL_EFI_RUNTIME_SERVICES, *PVIRTUAL_EFI_RUNTIME_SERVICES;
397
398 typedef struct _EFI_FIRMWARE_INFORMATION
399 {
400 ULONG FirmwareVersion;
401 PVIRTUAL_EFI_RUNTIME_SERVICES VirtualEfiRuntimeServices;
402 ULONG SetVirtualAddressMapStatus;
403 ULONG MissedMappingsCount;
404 } EFI_FIRMWARE_INFORMATION, *PEFI_FIRMWARE_INFORMATION;
405
406 typedef struct _PCAT_FIRMWARE_INFORMATION
407 {
408 ULONG PlaceHolder;
409 } PCAT_FIRMWARE_INFORMATION, *PPCAT_FIRMWARE_INFORMATION;
410
411 typedef struct _FIRMWARE_INFORMATION_LOADER_BLOCK
412 {
413 ULONG FirmwareTypeEfi:1;
414 ULONG Reserved:31;
415 union {
416 EFI_FIRMWARE_INFORMATION EfiInformation;
417 PCAT_FIRMWARE_INFORMATION PcatInformation;
418 } u;
419 } FIRMWARE_INFORMATION_LOADER_BLOCK, *PFIRMWARE_INFORMATION_LOADER_BLOCK;
420
421 //
422 // Loader Parameter Block
423 //
424 typedef struct _LOADER_PARAMETER_BLOCK
425 {
426 LIST_ENTRY LoadOrderListHead;
427 LIST_ENTRY MemoryDescriptorListHead;
428 LIST_ENTRY BootDriverListHead;
429 ULONG_PTR KernelStack;
430 ULONG_PTR Prcb;
431 ULONG_PTR Process;
432 ULONG_PTR Thread;
433 ULONG RegistryLength;
434 PVOID RegistryBase;
435 PCONFIGURATION_COMPONENT_DATA ConfigurationRoot;
436 LPSTR ArcBootDeviceName;
437 LPSTR ArcHalDeviceName;
438 LPSTR NtBootPathName;
439 LPSTR NtHalPathName;
440 LPSTR LoadOptions;
441 PNLS_DATA_BLOCK NlsData;
442 PARC_DISK_INFORMATION ArcDiskInformation;
443 PVOID OemFontFile;
444 struct _SETUP_LOADER_BLOCK *SetupLdrBlock;
445 PLOADER_PARAMETER_EXTENSION Extension;
446 union
447 {
448 I386_LOADER_BLOCK I386;
449 ALPHA_LOADER_BLOCK Alpha;
450 IA64_LOADER_BLOCK Ia64;
451 PPC_LOADER_BLOCK PowerPC;
452 ARM_LOADER_BLOCK Arm;
453 } u;
454 FIRMWARE_INFORMATION_LOADER_BLOCK FirmwareInformation;
455 } LOADER_PARAMETER_BLOCK, *PLOADER_PARAMETER_BLOCK;
456
457 #endif