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