00001 #ifndef _ARC_
00002 #define _ARC_
00003
00004 typedef ULONG ARC_STATUS;
00005
00006 typedef enum _ARC_CODES
00007 {
00008 ESUCCESS,
00009 E2BIG,
00010 EACCES,
00011 EAGAIN,
00012 EBADF,
00013 EBUSY,
00014 EFAULT,
00015 EINVAL,
00016 EIO,
00017 EISDIR,
00018 EMFILE,
00019 EMLINK,
00020 ENAMETOOLONG,
00021 ENODEV,
00022 ENOENT,
00023 ENOEXEC,
00024 ENOMEM,
00025 ENOSPC,
00026 ENOTDIR,
00027 ENOTTY,
00028 ENXIO,
00029 EROFS,
00030 EMAXIMUM
00031 } ARC_CODES;
00032
00033 typedef enum _SEEKMODE
00034 {
00035 SeekAbsolute,
00036 SeekRelative,
00037 } SEEKMODE;
00038
00039 typedef enum _OPENMODE
00040 {
00041 OpenReadOnly,
00042 OpenWriteOnly,
00043 OpenReadWrite,
00044 CreateWriteOnly,
00045 CreateReadOnly,
00046 SupersedeWriteOnly,
00047 SupersedeReadOnly,
00048 SupersedeReadWrite,
00049 OpenDirectory,
00050 CreateDirectory,
00051 } OPENMODE;
00052
00053 typedef enum _IDENTIFIER_FLAG
00054 {
00055 Failed = 0x01,
00056 ReadOnly = 0x02,
00057 Removable = 0x04,
00058 ConsoleIn = 0x08,
00059 ConsoleOut = 0x10,
00060 Input = 0x20,
00061 Output = 0x40
00062 } IDENTIFIER_FLAG;
00063
00064 typedef enum _CONFIGURATION_CLASS
00065 {
00066 SystemClass,
00067 ProcessorClass,
00068 CacheClass,
00069 AdapterClass,
00070 ControllerClass,
00071 PeripheralClass,
00072 MemoryClass,
00073 MaximumClass
00074 } CONFIGURATION_CLASS;
00075
00076 typedef enum _TYPE_OF_MEMORY
00077 {
00078 LoaderExceptionBlock,
00079 LoaderSystemBlock,
00080 LoaderFree,
00081 LoaderBad,
00082 LoaderLoadedProgram,
00083 LoaderFirmwareTemporary,
00084 LoaderFirmwarePermanent,
00085 LoaderOsloaderHeap,
00086 LoaderOsloaderStack,
00087 LoaderSystemCode,
00088 LoaderHalCode,
00089 LoaderBootDriver,
00090 LoaderConsoleInDriver,
00091 LoaderConsoleOutDriver,
00092 LoaderStartupDpcStack,
00093 LoaderStartupKernelStack,
00094 LoaderStartupPanicStack,
00095 LoaderStartupPcrPage,
00096 LoaderStartupPdrPage,
00097 LoaderRegistryData,
00098 LoaderMemoryData,
00099 LoaderNlsData,
00100 LoaderSpecialMemory,
00101 LoaderBBTMemory,
00102 LoaderReserve,
00103 LoaderXIPRom,
00104 LoaderHALCachedMemory,
00105 LoaderLargePageFiller,
00106 LoaderErrorLogMemory,
00107 LoaderMaximum
00108 } TYPE_OF_MEMORY;
00109
00110 typedef enum _MEMORY_TYPE
00111 {
00112 MemoryExceptionBlock,
00113 MemorySystemBlock,
00114 MemoryFree,
00115 MemoryBad,
00116 MemoryLoadedProgram,
00117 MemoryFirmwareTemporary,
00118 MemoryFirmwarePermanent,
00119 MemoryFreeContiguous,
00120 MemorySpecialMemory,
00121 MemoryMaximum
00122 } MEMORY_TYPE;
00123
00124 typedef struct _TIMEINFO
00125 {
00126 USHORT Year;
00127 USHORT Month;
00128 USHORT Day;
00129 USHORT Hour;
00130 USHORT Minute;
00131 USHORT Second;
00132 } TIMEINFO;
00133
00134 typedef struct _MEMORY_DESCRIPTOR
00135 {
00136 MEMORY_TYPE MemoryType;
00137 PFN_NUMBER BasePage;
00138 PFN_NUMBER PageCount;
00139 } MEMORY_DESCRIPTOR, *PMEMORY_DESCRIPTOR;
00140
00141 typedef struct _MEMORY_ALLOCATION_DESCRIPTOR
00142 {
00143 LIST_ENTRY ListEntry;
00144 TYPE_OF_MEMORY MemoryType;
00145 PFN_NUMBER BasePage;
00146 PFN_NUMBER PageCount;
00147 } MEMORY_ALLOCATION_DESCRIPTOR, *PMEMORY_ALLOCATION_DESCRIPTOR;
00148
00149 typedef struct _BOOT_DRIVER_LIST_ENTRY
00150 {
00151 LIST_ENTRY Link;
00152 UNICODE_STRING FilePath;
00153 UNICODE_STRING RegistryPath;
00154 struct _LDR_DATA_TABLE_ENTRY *LdrEntry;
00155 } BOOT_DRIVER_LIST_ENTRY, *PBOOT_DRIVER_LIST_ENTRY;
00156
00157 typedef struct _ARC_DISK_SIGNATURE
00158 {
00159 LIST_ENTRY ListEntry;
00160 ULONG Signature;
00161 PCHAR ArcName;
00162 ULONG CheckSum;
00163 BOOLEAN ValidPartitionTable;
00164 BOOLEAN xInt13;
00165 BOOLEAN IsGpt;
00166 BOOLEAN Reserved;
00167 CHAR GptSignature[16];
00168 } ARC_DISK_SIGNATURE, *PARC_DISK_SIGNATURE;
00169
00170 typedef struct _CONFIGURATION_COMPONENT
00171 {
00172 CONFIGURATION_CLASS Class;
00173 CONFIGURATION_TYPE Type;
00174 IDENTIFIER_FLAG Flags;
00175 USHORT Version;
00176 USHORT Revision;
00177 ULONG Key;
00178 ULONG AffinityMask;
00179 ULONG ConfigurationDataLength;
00180 ULONG IdentifierLength;
00181 LPSTR Identifier;
00182 } CONFIGURATION_COMPONENT, *PCONFIGURATION_COMPONENT;
00183
00184 typedef struct _CONFIGURATION_COMPONENT_DATA
00185 {
00186 struct _CONFIGURATION_COMPONENT_DATA *Parent;
00187 struct _CONFIGURATION_COMPONENT_DATA *Child;
00188 struct _CONFIGURATION_COMPONENT_DATA *Sibling;
00189 CONFIGURATION_COMPONENT ComponentEntry;
00190 PVOID ConfigurationData;
00191 } CONFIGURATION_COMPONENT_DATA, *PCONFIGURATION_COMPONENT_DATA;
00192
00193 typedef struct _ARC_DISK_INFORMATION
00194 {
00195 LIST_ENTRY DiskSignatureListHead;
00196 } ARC_DISK_INFORMATION, *PARC_DISK_INFORMATION;
00197
00198 typedef struct _MONITOR_CONFIGURATION_DATA
00199 {
00200 USHORT Version;
00201 USHORT Revision;
00202 USHORT HorizontalResolution;
00203 USHORT HorizontalDisplayTime;
00204 USHORT HorizontalBackPorch;
00205 USHORT HorizontalFrontPorch;
00206 USHORT HorizontalSync;
00207 USHORT VerticalResolution;
00208 USHORT VerticalBackPorch;
00209 USHORT VerticalFrontPorch;
00210 USHORT VerticalSync;
00211 USHORT HorizontalScreenSize;
00212 USHORT VerticalScreenSize;
00213 } MONITOR_CONFIGURATION_DATA, *PMONITOR_CONFIGURATION_DATA;
00214
00215 typedef struct _FLOPPY_CONFIGURATION_DATA
00216 {
00217 USHORT Version;
00218 USHORT Revision;
00219 CHAR Size[8];
00220 ULONG MaxDensity;
00221 ULONG MountDensity;
00222 } FLOPPY_CONFIGURATION_DATA, *PFLOPPY_CONFIGURATION_DATA;
00223
00224
00225
00226
00227 typedef struct _SMBIOS_TABLE_HEADER
00228 {
00229 CHAR Signature[4];
00230 UCHAR Checksum;
00231 UCHAR Length;
00232 UCHAR MajorVersion;
00233 UCHAR MinorVersion;
00234 USHORT MaximumStructureSize;
00235 UCHAR EntryPointRevision;
00236 UCHAR Reserved[5];
00237 CHAR Signature2[5];
00238 UCHAR IntermediateChecksum;
00239 USHORT StructureTableLength;
00240 ULONG StructureTableAddress;
00241 USHORT NumberStructures;
00242 UCHAR Revision;
00243 } SMBIOS_TABLE_HEADER, *PSMBIOS_TABLE_HEADER;
00244
00245
00246
00247
00248 typedef struct _NLS_DATA_BLOCK
00249 {
00250 PVOID AnsiCodePageData;
00251 PVOID OemCodePageData;
00252 PVOID UnicodeCodePageData;
00253 } NLS_DATA_BLOCK, *PNLS_DATA_BLOCK;
00254
00255
00256
00257
00258 typedef struct _PROFILE_ACPI_DOCKING_STATE
00259 {
00260 USHORT DockingState;
00261 USHORT SerialLength;
00262 WCHAR SerialNumber[1];
00263 } PROFILE_ACPI_DOCKING_STATE, *PPROFILE_ACPI_DOCKING_STATE;
00264
00265
00266
00267
00268 typedef struct _PROFILE_PARAMETER_BLOCK
00269 {
00270 USHORT Status;
00271 USHORT Reserved;
00272 USHORT DockingState;
00273 USHORT Capabilities;
00274 ULONG DockID;
00275 ULONG SerialNumber;
00276 } PROFILE_PARAMETER_BLOCK, *PPROFILE_PARAMETER_BLOCK;
00277
00278 typedef struct _HEADLESS_LOADER_BLOCK
00279 {
00280 UCHAR UsedBiosSettings;
00281 UCHAR DataBits;
00282 UCHAR StopBits;
00283 UCHAR Parity;
00284 ULONG BaudRate;
00285 ULONG PortNumber;
00286 PUCHAR PortAddress;
00287 USHORT PciDeviceId;
00288 USHORT PciVendorId;
00289 UCHAR PciBusNumber;
00290 UCHAR PciSlotNumber;
00291 UCHAR PciFunctionNumber;
00292 ULONG PciFlags;
00293 GUID SystemGUID;
00294 UCHAR IsMMIODevice;
00295 UCHAR TerminalType;
00296 } HEADLESS_LOADER_BLOCK, *PHEADLESS_LOADER_BLOCK;
00297
00298 typedef struct _NETWORK_LOADER_BLOCK
00299 {
00300 PCHAR DHCPServerACK;
00301 ULONG DHCPServerACKLength;
00302 PCHAR BootServerReplyPacket;
00303 ULONG BootServerReplyPacketLength;
00304 } NETWORK_LOADER_BLOCK, *PNETWORK_LOADER_BLOCK;
00305
00306 typedef struct _LOADER_PERFORMANCE_DATA
00307 {
00308 ULONGLONG StartTime;
00309 ULONGLONG EndTime;
00310 } LOADER_PERFORMANCE_DATA, *PLOADER_PERFORMANCE_DATA;
00311
00312
00313
00314
00315 typedef struct _LOADER_PARAMETER_EXTENSION
00316 {
00317 ULONG Size;
00318 PROFILE_PARAMETER_BLOCK Profile;
00319 ULONG MajorVersion;
00320 ULONG MinorVersion;
00321 PVOID EmInfFileImage;
00322 ULONG EmInfFileSize;
00323 PVOID TriageDumpBlock;
00324
00325
00326
00327 ULONG LoaderPagesSpanned;
00328 PHEADLESS_LOADER_BLOCK HeadlessLoaderBlock;
00329 PSMBIOS_TABLE_HEADER SMBiosEPSHeader;
00330 PVOID DrvDBImage;
00331 ULONG DrvDBSize;
00332 PNETWORK_LOADER_BLOCK NetworkLoaderBlock;
00333
00334
00335
00336 PCHAR HalpIRQLToTPR;
00337 PCHAR HalpVectorToIRQL;
00338 LIST_ENTRY FirmwareDescriptorListHead;
00339 PVOID AcpiTable;
00340 ULONG AcpiTableSize;
00341
00342
00343
00344 ULONG BootViaWinload:1;
00345 ULONG BootViaEFI:1;
00346 ULONG Reserved:30;
00347 LOADER_PERFORMANCE_DATA LoaderPerformanceData;
00348 LIST_ENTRY BootApplicationPersistentData;
00349 PVOID WmdTestResult;
00350 GUID BootIdentifier;
00351
00352
00353
00354 ULONG ResumePages;
00355 PVOID DumpHeader;
00356 } LOADER_PARAMETER_EXTENSION, *PLOADER_PARAMETER_EXTENSION;
00357
00358
00359
00360
00361 typedef struct _IA64_LOADER_BLOCK
00362 {
00363 ULONG PlaceHolder;
00364 } IA64_LOADER_BLOCK, *PIA64_LOADER_BLOCK;
00365
00366 typedef struct _ALPHA_LOADER_BLOCK
00367 {
00368 ULONG PlaceHolder;
00369 } ALPHA_LOADER_BLOCK, *PALPHA_LOADER_BLOCK;
00370
00371 typedef struct _I386_LOADER_BLOCK
00372 {
00373 PVOID CommonDataArea;
00374 ULONG MachineType;
00375 ULONG VirtualBias;
00376 } I386_LOADER_BLOCK, *PI386_LOADER_BLOCK;
00377
00378 typedef struct _PPC_LOADER_BLOCK
00379 {
00380 PVOID BootInfo;
00381 ULONG MachineType;
00382 } PPC_LOADER_BLOCK, *PPPC_LOADER_BLOCK;
00383
00384 typedef struct _ARM_LOADER_BLOCK
00385 {
00386 #ifdef _ARM_
00387 ULONG InterruptStack;
00388 ULONG FirstLevelDcacheSize;
00389 ULONG FirstLevelDcacheFillSize;
00390 ULONG FirstLevelIcacheSize;
00391 ULONG FirstLevelIcacheFillSize;
00392 ULONG GpBase;
00393 ULONG PanicStack;
00394 ULONG PcrPage;
00395 ULONG PdrPage;
00396 ULONG SecondLevelDcacheSize;
00397 ULONG SecondLevelDcacheFillSize;
00398 ULONG SecondLevelIcacheSize;
00399 ULONG SecondLevelIcacheFillSize;
00400 ULONG PcrPage2;
00401 #else
00402 ULONG PlaceHolder;
00403 #endif
00404 } ARM_LOADER_BLOCK, *PARM_LOADER_BLOCK;
00405
00406
00407
00408
00409
00410 typedef struct _VIRTUAL_EFI_RUNTIME_SERVICES
00411 {
00412 ULONG_PTR GetTime;
00413 ULONG_PTR SetTime;
00414 ULONG_PTR GetWakeupTime;
00415 ULONG_PTR SetWakeupTime;
00416 ULONG_PTR SetVirtualAddressMap;
00417 ULONG_PTR ConvertPointer;
00418 ULONG_PTR GetVariable;
00419 ULONG_PTR GetNextVariableName;
00420 ULONG_PTR SetVariable;
00421 ULONG_PTR GetNextHighMonotonicCount;
00422 ULONG_PTR ResetSystem;
00423 ULONG_PTR UpdateCapsule;
00424 ULONG_PTR QueryCapsuleCapabilities;
00425 ULONG_PTR QueryVariableInfo;
00426 } VIRTUAL_EFI_RUNTIME_SERVICES, *PVIRTUAL_EFI_RUNTIME_SERVICES;
00427
00428 typedef struct _EFI_FIRMWARE_INFORMATION
00429 {
00430 ULONG FirmwareVersion;
00431 PVIRTUAL_EFI_RUNTIME_SERVICES VirtualEfiRuntimeServices;
00432 ULONG SetVirtualAddressMapStatus;
00433 ULONG MissedMappingsCount;
00434 } EFI_FIRMWARE_INFORMATION, *PEFI_FIRMWARE_INFORMATION;
00435
00436 typedef struct _PCAT_FIRMWARE_INFORMATION
00437 {
00438 ULONG PlaceHolder;
00439 } PCAT_FIRMWARE_INFORMATION, *PPCAT_FIRMWARE_INFORMATION;
00440
00441 typedef struct _FIRMWARE_INFORMATION_LOADER_BLOCK
00442 {
00443 ULONG FirmwareTypeEfi:1;
00444 ULONG Reserved:31;
00445 union
00446 {
00447 EFI_FIRMWARE_INFORMATION EfiInformation;
00448 PCAT_FIRMWARE_INFORMATION PcatInformation;
00449 } u;
00450 } FIRMWARE_INFORMATION_LOADER_BLOCK, *PFIRMWARE_INFORMATION_LOADER_BLOCK;
00451
00452
00453
00454
00455 typedef struct _LOADER_PARAMETER_BLOCK
00456 {
00457 LIST_ENTRY LoadOrderListHead;
00458 LIST_ENTRY MemoryDescriptorListHead;
00459 LIST_ENTRY BootDriverListHead;
00460 ULONG_PTR KernelStack;
00461 ULONG_PTR Prcb;
00462 ULONG_PTR Process;
00463 ULONG_PTR Thread;
00464 ULONG RegistryLength;
00465 PVOID RegistryBase;
00466 PCONFIGURATION_COMPONENT_DATA ConfigurationRoot;
00467 LPSTR ArcBootDeviceName;
00468 LPSTR ArcHalDeviceName;
00469 LPSTR NtBootPathName;
00470 LPSTR NtHalPathName;
00471 LPSTR LoadOptions;
00472 PNLS_DATA_BLOCK NlsData;
00473 PARC_DISK_INFORMATION ArcDiskInformation;
00474 PVOID OemFontFile;
00475 struct _SETUP_LOADER_BLOCK *SetupLdrBlock;
00476 PLOADER_PARAMETER_EXTENSION Extension;
00477 union
00478 {
00479 I386_LOADER_BLOCK I386;
00480 ALPHA_LOADER_BLOCK Alpha;
00481 IA64_LOADER_BLOCK IA64;
00482 PPC_LOADER_BLOCK PowerPC;
00483 ARM_LOADER_BLOCK Arm;
00484 } u;
00485 FIRMWARE_INFORMATION_LOADER_BLOCK FirmwareInformation;
00486 } LOADER_PARAMETER_BLOCK, *PLOADER_PARAMETER_BLOCK;
00487
00488 typedef int CONFIGTYPE;
00489 typedef struct tagFILEINFORMATION
00490 {
00491 LARGE_INTEGER StartingAddress;
00492 LARGE_INTEGER EndingAddress;
00493 LARGE_INTEGER CurrentAddress;
00494 CONFIGTYPE Type;
00495 ULONG FileNameLength;
00496 UCHAR Attributes;
00497 CHAR Filename[32];
00498 } FILEINFORMATION;
00499
00500 typedef LONG (*ARC_CLOSE)(ULONG FileId);
00501 typedef LONG (*ARC_GET_FILE_INFORMATION)(ULONG FileId, FILEINFORMATION* Information);
00502 typedef LONG (*ARC_OPEN)(CHAR* Path, OPENMODE OpenMode, ULONG* FileId);
00503 typedef LONG (*ARC_READ)(ULONG FileId, VOID* Buffer, ULONG N, ULONG* Count);
00504 typedef LONG (*ARC_SEEK)(ULONG FileId, LARGE_INTEGER* Position, SEEKMODE SeekMode);
00505 #endif