/*++ BUILD Version: 0010 // Increment this if a change has global effects Copyright (c) 1991 Microsoft Corporation Module Name: arc.h Abstract: This header file defines the ARC system firmware interface and the NT structures that are dependent on ARC types. Author: David N. Cutler (davec) 18-May-1991 */ #ifndef _ARC_ #define _ARC_ #include "profiles.h" // Define console input and console output file ids. #define ARC_CONSOLE_INPUT 0 #define ARC_CONSOLE_OUTPUT 1 // Define ARC_STATUS type. typedef ULONG ARC_STATUS; // Define the firmware entry point numbers. typedef enum _FIRMWARE_ENTRY { LoadRoutine, InvokeRoutine, ExecuteRoutine, HaltRoutine, PowerDownRoutine, RestartRoutine, RebootRoutine, InteractiveModeRoutine, Reserved1, GetPeerRoutine, GetChildRoutine, GetParentRoutine, GetDataRoutine, AddChildRoutine, DeleteComponentRoutine, GetComponentRoutine, SaveConfigurationRoutine, GetSystemIdRoutine, MemoryRoutine, Reserved2, GetTimeRoutine, GetRelativeTimeRoutine, GetDirectoryEntryRoutine, OpenRoutine, CloseRoutine, ReadRoutine, ReadStatusRoutine, WriteRoutine, SeekRoutine, MountRoutine, GetEnvironmentRoutine, SetEnvironmentRoutine, GetFileInformationRoutine, SetFileInformationRoutine, FlushAllCachesRoutine, TestUnicodeCharacterRoutine, GetDisplayStatusRoutine, MaximumRoutine } FIRMWARE_ENTRY; // Define software loading and execution routine types. typedef ARC_STATUS (*PARC_EXECUTE_ROUTINE) ( IN CHAR * FIRMWARE_PTR ImagePath, IN ULONG Argc, IN CHAR * FIRMWARE_PTR * FIRMWARE_PTR Argv, IN CHAR * FIRMWARE_PTR * FIRMWARE_PTR Envp ); typedef ARC_STATUS (*PARC_INVOKE_ROUTINE) ( IN ULONG EntryAddress, IN ULONG StackAddress, IN ULONG Argc, IN CHAR * FIRMWARE_PTR * FIRMWARE_PTR Argv, IN CHAR * FIRMWARE_PTR * FIRMWARE_PTR Envp ); typedef ARC_STATUS (*PARC_LOAD_ROUTINE) ( IN CHAR * FIRMWARE_PTR ImagePath, IN ULONG TopAddress, OUT ULONG * FIRMWARE_PTR EntryAddress, OUT ULONG * FIRMWARE_PTR LowAddress ); // Define firmware software loading and execution prototypes. ARC_STATUS FwExecute( IN CHAR * FIRMWARE_PTR ImagePath, IN ULONG Argc, IN CHAR * FIRMWARE_PTR * FIRMWARE_PTR Argv, IN CHAR * FIRMWARE_PTR * FIRMWARE_PTR Envp ); ARC_STATUS FwInvoke( IN ULONG EntryAddress, IN ULONG StackAddress, IN ULONG Argc, IN CHAR * FIRMWARE_PTR * FIRMWARE_PTR Argv, IN CHAR * FIRMWARE_PTR * FIRMWARE_PTR Envp ); ARC_STATUS FwLoad( IN CHAR * FIRMWARE_PTR ImagePath, IN ULONG TopAddress, OUT ULONG * FIRMWARE_PTR EntryAddress, OUT ULONG * FIRMWARE_PTR LowAddress ); // Define program termination routine types. typedef VOID(*PARC_HALT_ROUTINE) (VOID); typedef VOID(*PARC_POWERDOWN_ROUTINE) (VOID); typedef VOID(*PARC_RESTART_ROUTINE) (VOID); typedef VOID(*PARC_REBOOT_ROUTINE) (VOID); typedef VOID(*PARC_INTERACTIVE_MODE_ROUTINE) (VOID); // Define firmware program termination prototypes. VOID FwHalt(VOID); VOID FwPowerDown(VOID); VOID FwRestart(VOID); VOID FwReboot(VOID); VOID FwEnterInteractiveMode(VOID); // begin_ntddk // Define configuration routine types. // Configuration information. // end_ntddk typedef enum _CONFIGURATION_CLASS { SystemClass, ProcessorClass, CacheClass, AdapterClass, ControllerClass, PeripheralClass, MemoryClass, MaximumClass } CONFIGURATION_CLASS, *PCONFIGURATION_CLASS; // begin_ntddk typedef enum _CONFIGURATION_TYPE { ArcSystem, CentralProcessor, FloatingPointProcessor, PrimaryIcache, PrimaryDcache, SecondaryIcache, SecondaryDcache, SecondaryCache, EisaAdapter, TcAdapter, ScsiAdapter, DtiAdapter, MultiFunctionAdapter, DiskController, TapeController, CdromController, WormController, SerialController, NetworkController, DisplayController, ParallelController, PointerController, KeyboardController, AudioController, OtherController, DiskPeripheral, FloppyDiskPeripheral, TapePeripheral, ModemPeripheral, MonitorPeripheral, PrinterPeripheral, PointerPeripheral, KeyboardPeripheral, TerminalPeripheral, OtherPeripheral, LinePeripheral, NetworkPeripheral, SystemMemory, DockingInformation, RealModeIrqRoutingTable, MaximumType } CONFIGURATION_TYPE, *PCONFIGURATION_TYPE; // end_ntddk typedef struct _CONFIGURATION_COMPONENT { CONFIGURATION_CLASS Class; CONFIGURATION_TYPE Type; DEVICE_FLAGS Flags; USHORT Version; USHORT Revision; ULONG Key; ULONG AffinityMask; ULONG ConfigurationDataLength; ULONG IdentifierLength; CHAR * FIRMWARE_PTR Identifier; } CONFIGURATION_COMPONENT, *FIRMWARE_PTR PCONFIGURATION_COMPONENT; typedef PCONFIGURATION_COMPONENT(*PARC_GET_CHILD_ROUTINE) (IN PCONFIGURATION_COMPONENT Component OPTIONAL); typedef PCONFIGURATION_COMPONENT(*PARC_GET_PARENT_ROUTINE) (IN PCONFIGURATION_COMPONENT Component); typedef PCONFIGURATION_COMPONENT(*PARC_GET_PEER_ROUTINE) (IN PCONFIGURATION_COMPONENT Component); typedef PCONFIGURATION_COMPONENT(*PARC_ADD_CHILD_ROUTINE) (IN PCONFIGURATION_COMPONENT Component, IN PCONFIGURATION_COMPONENT NewComponent, IN VOID * FIRMWARE_PTR ConfigurationData ); typedef ARC_STATUS(*PARC_DELETE_COMPONENT_ROUTINE) (IN PCONFIGURATION_COMPONENT Component); typedef PCONFIGURATION_COMPONENT(*PARC_GET_COMPONENT_ROUTINE) (IN CHAR * FIRMWARE_PTR Path); typedef ARC_STATUS (*PARC_GET_DATA_ROUTINE) (OUT VOID * FIRMWARE_PTR ConfigurationData, IN PCONFIGURATION_COMPONENT Component); typedef ARC_STATUS (*PARC_SAVE_CONFIGURATION_ROUTINE) (VOID); // Define firmware configuration prototypes. PCONFIGURATION_COMPONENT FwGetChild(IN PCONFIGURATION_COMPONENT Component OPTIONAL); PCONFIGURATION_COMPONENT FwGetParent(IN PCONFIGURATION_COMPONENT Component); PCONFIGURATION_COMPONENT FwGetPeer(IN PCONFIGURATION_COMPONENT Component); PCONFIGURATION_COMPONENT FwAddChild(IN PCONFIGURATION_COMPONENT Component, IN PCONFIGURATION_COMPONENT NewComponent, IN VOID * FIRMWARE_PTR ConfigurationData OPTIONAL); ARC_STATUS FwDeleteComponent(IN PCONFIGURATION_COMPONENT Component); PCONFIGURATION_COMPONENT FwGetComponent(IN CHAR * FIRMWARE_PTR Path); ARC_STATUS FwGetConfigurationData(OUT VOID * FIRMWARE_PTR ConfigurationData, IN PCONFIGURATION_COMPONENT Component); ARC_STATUS FwSaveConfiguration(VOID); // System information. typedef struct _SYSTEM_ID { CHAR VendorId[8]; CHAR ProductId[8]; } SYSTEM_ID, *FIRMWARE_PTR PSYSTEM_ID; typedef PSYSTEM_ID (*PARC_GET_SYSTEM_ID_ROUTINE) (VOID); // Define system identifier query routine type. PSYSTEM_ID FwGetSystemId(VOID); // Memory information. typedef enum _MEMORY_TYPE { MemoryExceptionBlock, MemorySystemBlock, MemoryFree, MemoryBad, MemoryLoadedProgram, MemoryFirmwareTemporary, MemoryFirmwarePermanent, MemoryFreeContiguous, MemorySpecialMemory, MemoryMaximum } MEMORY_TYPE; typedef struct _MEMORY_DESCRIPTOR { MEMORY_TYPE MemoryType; ULONG BasePage; ULONG PageCount; } MEMORY_DESCRIPTOR, *FIRMWARE_PTR PMEMORY_DESCRIPTOR; #if defined(_IA64_) // Cache Attribute. #define WTU 0x1 #define WTO 0x2 #define WBO 0x4 #define WBU 0x8 #define WCU 0x10 #define UCU 0x20 #define UCUE 0x40 #define UCO 0x80 typedef enum _MEMORY_USAGE_TYPE { RegularMemory, MemoryMappedIo, ProcessorIoBlock, BootServicesCode, BootServicesData, RuntimeServicesCode, RuntimeServicesData, FirmwareSpace, DisplayMemory, CacheAttributeMaximum } MEMORY_USAGE_TYPE; typedef struct _CACHE_ATTRIBUTE_DESCRIPTOR { LIST_ENTRY ListEntry; MEMORY_USAGE_TYPE MemoryUsage; ULONG CacheAttribute; ULONG BasePage; ULONG PageCount; } CACHE_ATTRIBUTE_DESCRIPTOR, *PCACHE_ATTRIBUTE_DESCRIPTOR; CACHE_ATTRIBUTE_DESCRIPTOR CacheDescriptorList[10]; #endif // defined(_IA64_) typedef PMEMORY_DESCRIPTOR (*PARC_MEMORY_ROUTINE) (IN PMEMORY_DESCRIPTOR MemoryDescriptor OPTIONAL); // Define memory query routine type. PMEMORY_DESCRIPTOR FwGetMemoryDescriptor(IN PMEMORY_DESCRIPTOR MemoryDescriptor OPTIONAL); // Query time functions. typedef PTIME_FIELDS (*PARC_GET_TIME_ROUTINE) (VOID); typedef ULONG (*PARC_GET_RELATIVE_TIME_ROUTINE) (VOID); // Define query time routine types. PTIME_FIELDS FwGetTime(VOID); ULONG FwGetRelativeTime(VOID); // Define I/O routine types. #define ArcReadOnlyFile 1 #define ArcHiddenFile 2 #define ArcSystemFile 4 #define ArcArchiveFile 8 #define ArcDirectoryFile 16 #define ArcDeleteFile 32 typedef enum _OPEN_MODE { ArcOpenReadOnly, ArcOpenWriteOnly, ArcOpenReadWrite, ArcCreateWriteOnly, ArcCreateReadWrite, ArcSupersedeWriteOnly, ArcSupersedeReadWrite, ArcOpenDirectory, ArcCreateDirectory, ArcOpenMaximumMode } OPEN_MODE; typedef struct _FILE_INFORMATION { LARGE_INTEGER StartingAddress; LARGE_INTEGER EndingAddress; LARGE_INTEGER CurrentPosition; CONFIGURATION_TYPE Type; ULONG FileNameLength; UCHAR Attributes; CHAR FileName[32]; } FILE_INFORMATION, *FIRMWARE_PTR PFILE_INFORMATION; typedef enum _SEEK_MODE { SeekAbsolute, SeekRelative, SeekMaximum } SEEK_MODE; typedef enum _MOUNT_OPERATION { MountLoadMedia, MountUnloadMedia, MountMaximum } MOUNT_OPERATION; typedef struct _DIRECTORY_ENTRY { ULONG FileNameLength; UCHAR FileAttribute; CHAR FileName[32]; } DIRECTORY_ENTRY, *FIRMWARE_PTR PDIRECTORY_ENTRY; typedef ARC_STATUS (*PARC_CLOSE_ROUTINE) (IN ULONG FileId); typedef ARC_STATUS (*PARC_MOUNT_ROUTINE) (IN CHAR * FIRMWARE_PTR MountPath, IN MOUNT_OPERATION Operation); typedef ARC_STATUS (*PARC_OPEN_ROUTINE) (IN CHAR * FIRMWARE_PTR OpenPath, IN OPEN_MODE OpenMode, OUT ULONG * FIRMWARE_PTR FileId); typedef ARC_STATUS (*PARC_READ_ROUTINE) (IN ULONG FileId, OUT VOID * FIRMWARE_PTR Buffer, IN ULONG Length, OUT ULONG * FIRMWARE_PTR Count); typedef ARC_STATUS (*PARC_READ_STATUS_ROUTINE) (IN ULONG FileId); typedef ARC_STATUS (*PARC_SEEK_ROUTINE) (IN ULONG FileId, IN LARGE_INTEGER * FIRMWARE_PTR Offset, IN SEEK_MODE SeekMode); typedef ARC_STATUS (*PARC_WRITE_ROUTINE) (IN ULONG FileId, IN VOID * FIRMWARE_PTR Buffer, IN ULONG Length, OUT ULONG * FIRMWARE_PTR Count); typedef ARC_STATUS (*PARC_GET_FILE_INFO_ROUTINE) (IN ULONG FileId, OUT PFILE_INFORMATION FileInformation); typedef ARC_STATUS (*PARC_SET_FILE_INFO_ROUTINE) (IN ULONG FileId, IN ULONG AttributeFlags, IN ULONG AttributeMask); typedef ARC_STATUS (*PARC_GET_DIRECTORY_ENTRY_ROUTINE) (IN ULONG FileId, OUT PDIRECTORY_ENTRY Buffer, IN ULONG Length, OUT ULONG * FIRMWARE_PTR Count); // Define firmware I/O prototypes. ARC_STATUS FwClose(IN ULONG FileId); ARC_STATUS FwMount(IN CHAR * FIRMWARE_PTR MountPath, IN MOUNT_OPERATION Operation); ARC_STATUS FwOpen(IN CHAR * FIRMWARE_PTR OpenPath, IN OPEN_MODE OpenMode, OUT ULONG * FIRMWARE_PTR FileId); ARC_STATUS FwRead(IN ULONG FileId, OUT VOID * FIRMWARE_PTR Buffer, IN ULONG Length, OUT ULONG * FIRMWARE_PTR Count); ARC_STATUS FwGetReadStatus(IN ULONG FileId); ARC_STATUS FwSeek(IN ULONG FileId, IN LARGE_INTEGER * FIRMWARE_PTR Offset, IN SEEK_MODE SeekMode); ARC_STATUS FwWrite(IN ULONG FileId, IN VOID * FIRMWARE_PTR Buffer, IN ULONG Length, OUT ULONG * FIRMWARE_PTR Count); ARC_STATUS FwGetFileInformation(IN ULONG FileId, OUT PFILE_INFORMATION FileInformation); ARC_STATUS FwSetFileInformation(IN ULONG FileId, IN ULONG AttributeFlags, IN ULONG AttributeMask); ARC_STATUS FwGetDirectoryEntry(IN ULONG FileId, OUT PDIRECTORY_ENTRY Buffer, IN ULONG Length, OUT ULONG * FIRMWARE_PTR Count); // Define environment routine types. typedef CHAR * FIRMWARE_PTR (*PARC_GET_ENVIRONMENT_ROUTINE) (IN CHAR * FIRMWARE_PTR Variable); typedef ARC_STATUS (*PARC_SET_ENVIRONMENT_ROUTINE) (IN CHAR * FIRMWARE_PTR Variable, IN CHAR * FIRMWARE_PTR Value); // Define firmware environment prototypes. CHAR * FIRMWARE_PTR FwGetEnvironmentVariable(IN CHAR * FIRMWARE_PTR Variable); ARC_STATUS FwSetEnvironmentVariable(IN CHAR * FIRMWARE_PTR Variable, IN CHAR * FIRMWARE_PTR Value); // Define inline functions to acquire and release the firmware lock // and the stub function prototypes necessary to interface with the // 32-bit firmware on 64-bit systems. // These routines are required for the 64-bit system until (if) 64-bit // firmware is ever supplied. #if defined(_AXP64_) && defined(_NTHAL_) extern KSPIN_LOCK HalpFirmwareLock; CHAR * FIRMWARE_PTR HalpArcGetEnvironmentVariable(IN PCHAR Variable); ARC_STATUS HalpArcSetEnvironmentVariable(IN PCHAR Variable, IN PCHAR Value); KIRQL FwAcquireFirmwareLock(VOID); VOID FwReleaseFirmwareLock(IN KIRQL OldIrql); #endif // _AXP64_ && defined(_NTHAL_) // Define cache flush routine types typedef VOID (*PARC_FLUSH_ALL_CACHES_ROUTINE) (VOID); // Define firmware cache flush prototypes. VOID FwFlushAllCaches(VOID); // Define TestUnicodeCharacter and GetDisplayStatus routines. typedef struct _ARC_DISPLAY_STATUS { USHORT CursorXPosition; USHORT CursorYPosition; USHORT CursorMaxXPosition; USHORT CursorMaxYPosition; UCHAR ForegroundColor; UCHAR BackgroundColor; BOOLEAN HighIntensity; BOOLEAN Underscored; BOOLEAN ReverseVideo; } ARC_DISPLAY_STATUS, *FIRMWARE_PTR PARC_DISPLAY_STATUS; typedef ARC_STATUS (*PARC_TEST_UNICODE_CHARACTER_ROUTINE) (IN ULONG FileId, IN WCHAR UnicodeCharacter); typedef PARC_DISPLAY_STATUS (*PARC_GET_DISPLAY_STATUS_ROUTINE) (IN ULONG FileId); ARC_STATUS FwTestUnicodeCharacter(IN ULONG FileId, IN WCHAR UnicodeCharacter); PARC_DISPLAY_STATUS FwGetDisplayStatus(IN ULONG FileId); // Define low memory data structures. // Define debug block structure. typedef struct _DEBUG_BLOCK { ULONG Signature; ULONG Length; } DEBUG_BLOCK, *FIRMWARE_PTR PDEBUG_BLOCK; // Define restart block structure. #define ARC_RESTART_BLOCK_SIGNATURE 0x42545352 typedef struct _BOOT_STATUS { ULONG BootStarted : 1; ULONG BootFinished : 1; ULONG RestartStarted : 1; ULONG RestartFinished : 1; ULONG PowerFailStarted : 1; ULONG PowerFailFinished : 1; ULONG ProcessorReady : 1; ULONG ProcessorRunning : 1; ULONG ProcessorStart : 1; } BOOT_STATUS, *FIRMWARE_PTR PBOOT_STATUS; typedef struct _ALPHA_RESTART_STATE { #if defined(_ALPHA_) || defined(_AXP64_) // Control information ULONG HaltReason; VOID * FIRMWARE_PTR LogoutFrame; ULONGLONG PalBase; // Integer Save State ULONGLONG IntV0; ULONGLONG IntT0; ULONGLONG IntT1; ULONGLONG IntT2; ULONGLONG IntT3; ULONGLONG IntT4; ULONGLONG IntT5; ULONGLONG IntT6; ULONGLONG IntT7; ULONGLONG IntS0; ULONGLONG IntS1; ULONGLONG IntS2; ULONGLONG IntS3; ULONGLONG IntS4; ULONGLONG IntS5; ULONGLONG IntFp; ULONGLONG IntA0; ULONGLONG IntA1; ULONGLONG IntA2; ULONGLONG IntA3; ULONGLONG IntA4; ULONGLONG IntA5; ULONGLONG IntT8; ULONGLONG IntT9; ULONGLONG IntT10; ULONGLONG IntT11; ULONGLONG IntRa; ULONGLONG IntT12; ULONGLONG IntAT; ULONGLONG IntGp; ULONGLONG IntSp; ULONGLONG IntZero; // Floating Point Save State ULONGLONG Fpcr; ULONGLONG FltF0; ULONGLONG FltF1; ULONGLONG FltF2; ULONGLONG FltF3; ULONGLONG FltF4; ULONGLONG FltF5; ULONGLONG FltF6; ULONGLONG FltF7; ULONGLONG FltF8; ULONGLONG FltF9; ULONGLONG FltF10; ULONGLONG FltF11; ULONGLONG FltF12; ULONGLONG FltF13; ULONGLONG FltF14; ULONGLONG FltF15; ULONGLONG FltF16; ULONGLONG FltF17; ULONGLONG FltF18; ULONGLONG FltF19; ULONGLONG FltF20; ULONGLONG FltF21; ULONGLONG FltF22; ULONGLONG FltF23; ULONGLONG FltF24; ULONGLONG FltF25; ULONGLONG FltF26; ULONGLONG FltF27; ULONGLONG FltF28; ULONGLONG FltF29; ULONGLONG FltF30; ULONGLONG FltF31; // Architected Internal Processor State. ULONG Asn; VOID * FIRMWARE_PTR GeneralEntry; VOID * FIRMWARE_PTR Iksp; VOID * FIRMWARE_PTR InterruptEntry; VOID * FIRMWARE_PTR Kgp; ULONG Mces; VOID * FIRMWARE_PTR MemMgmtEntry; VOID * FIRMWARE_PTR PanicEntry; VOID * FIRMWARE_PTR Pcr; VOID * FIRMWARE_PTR Pdr; ULONG Psr; VOID * FIRMWARE_PTR ReiRestartAddress; ULONG Sirr; VOID * FIRMWARE_PTR SyscallEntry; VOID * FIRMWARE_PTR Teb; VOID * FIRMWARE_PTR Thread; // Processor Implementation-dependent State. ULONGLONG PerProcessorState[175]; // allocate 2K maximum restart block #else ULONG PlaceHolder; #endif } ALPHA_RESTART_STATE, *FIRMWARE_PTR PALPHA_RESTART_STATE; typedef struct _I386_RESTART_STATE { #if defined(_X86_) // Put state structure here. ULONG PlaceHolder; #else ULONG PlaceHolder; #endif } I386_RESTART_STATE, *PI386_RESTART_STATE; #if defined(_IA64_) #include "pshpck16.h" #endif typedef struct _IA64_RESTART_STATE { #if defined(_IA64_) // @@BEGIN_DDKSPLIT // This structure is copied from CONTEXT structure in sdk/ntia64.h. // The flags values within this flag control the contents of // a CONTEXT record. // If the context record is used as an input parameter, then // for each portion of the context record controlled by a flag // whose value is set, it is assumed that that portion of the // context record contains valid context. If the context record // is being used to modify a thread's context, then only that // portion of the threads context will be modified. // If the context record is used as an IN OUT parameter to capture // the context of a thread, then only those portions of the thread's // context corresponding to set flags will be returned. // The context record is never used as an OUT only parameter. ULONG ContextFlags; ULONG Fill1[3]; // for alignment of following on 16-byte boundary // This section is specified/returned if the ContextFlags word contains // the flag CONTEXT_DEBUG. // N.B. CONTEXT_DEBUG is *not* part of CONTEXT_FULL. ULONGLONG DbI0; // Instruction debug registers ULONGLONG DbI1; ULONGLONG DbI2; ULONGLONG DbI3; ULONGLONG DbI4; ULONGLONG DbI5; ULONGLONG DbI6; ULONGLONG DbI7; ULONGLONG DbD0; // Data debug registers ULONGLONG DbD1; ULONGLONG DbD2; ULONGLONG DbD3; ULONGLONG DbD4; ULONGLONG DbD5; ULONGLONG DbD6; ULONGLONG DbD7; // This section is specified/returned if the ContextFlags word contains // the flag CONTEXT_LOWER_FLOATING_POINT. FLOAT128 FltS0; // Lower saved (preserved) FLOAT128 FltS1; FLOAT128 FltS2; FLOAT128 FltS3; FLOAT128 FltS4; FLOAT128 FltS5; FLOAT128 FltT0; // Lower temporary (scratch) FLOAT128 FltT1; FLOAT128 FltT2; FLOAT128 FltT3; FLOAT128 FltT4; FLOAT128 FltT5; FLOAT128 FltT6; FLOAT128 FltT7; // This section is specified/returned if the ContextFlags word contains // the flag CONTEXT_HIGHER_FLOATING_POINT. FLOAT128 FltS6; // Higher saved (preserved) floats FLOAT128 FltS7; FLOAT128 FltS8; FLOAT128 FltS9; FLOAT128 FltS10; FLOAT128 FltS11; FLOAT128 FltS12; FLOAT128 FltS13; FLOAT128 FltS14; FLOAT128 FltS15; FLOAT128 FltS16; FLOAT128 FltS17; FLOAT128 FltS18; FLOAT128 FltS19; FLOAT128 FltS20; FLOAT128 FltS21; FLOAT128 FltF32; FLOAT128 FltF33; FLOAT128 FltF34; FLOAT128 FltF35; FLOAT128 FltF36; FLOAT128 FltF37; FLOAT128 FltF38; FLOAT128 FltF39; FLOAT128 FltF40; FLOAT128 FltF41; FLOAT128 FltF42; FLOAT128 FltF43; FLOAT128 FltF44; FLOAT128 FltF45; FLOAT128 FltF46; FLOAT128 FltF47; FLOAT128 FltF48; FLOAT128 FltF49; FLOAT128 FltF50; FLOAT128 FltF51; FLOAT128 FltF52; FLOAT128 FltF53; FLOAT128 FltF54; FLOAT128 FltF55; FLOAT128 FltF56; FLOAT128 FltF57; FLOAT128 FltF58; FLOAT128 FltF59; FLOAT128 FltF60; FLOAT128 FltF61; FLOAT128 FltF62; FLOAT128 FltF63; FLOAT128 FltF64; FLOAT128 FltF65; FLOAT128 FltF66; FLOAT128 FltF67; FLOAT128 FltF68; FLOAT128 FltF69; FLOAT128 FltF70; FLOAT128 FltF71; FLOAT128 FltF72; FLOAT128 FltF73; FLOAT128 FltF74; FLOAT128 FltF75; FLOAT128 FltF76; FLOAT128 FltF77; FLOAT128 FltF78; FLOAT128 FltF79; FLOAT128 FltF80; FLOAT128 FltF81; FLOAT128 FltF82; FLOAT128 FltF83; FLOAT128 FltF84; FLOAT128 FltF85; FLOAT128 FltF86; FLOAT128 FltF87; FLOAT128 FltF88; FLOAT128 FltF89; FLOAT128 FltF90; FLOAT128 FltF91; FLOAT128 FltF92; FLOAT128 FltF93; FLOAT128 FltF94; FLOAT128 FltF95; FLOAT128 FltF96; FLOAT128 FltF97; FLOAT128 FltF98; FLOAT128 FltF99; FLOAT128 FltF100; FLOAT128 FltF101; FLOAT128 FltF102; FLOAT128 FltF103; FLOAT128 FltF104; FLOAT128 FltF105; FLOAT128 FltF106; FLOAT128 FltF107; FLOAT128 FltF108; FLOAT128 FltF109; FLOAT128 FltF110; FLOAT128 FltF111; FLOAT128 FltF112; FLOAT128 FltF113; FLOAT128 FltF114; FLOAT128 FltF115; FLOAT128 FltF116; FLOAT128 FltF117; FLOAT128 FltF118; FLOAT128 FltF119; FLOAT128 FltF120; FLOAT128 FltF121; FLOAT128 FltF122; FLOAT128 FltF123; FLOAT128 FltF124; FLOAT128 FltF125; FLOAT128 FltF126; FLOAT128 FltF127; // This section is specified/returned if the ContextFlags word contains // the flag CONTEXT_LOWER_FLOATING_POINT | CONTEXT_HIGHER_FLOATING_POINT. // **** TBD **** in some cases it may more efficient to return with // CONTEXT_CONTROL ULONGLONG StFPSR; // FP status // This section is specified/returned if the ContextFlags word contains // the flag CONTEXT_INTEGER. // N.B. The registers gp, sp, rp are part of the control context ULONGLONG IntGp; // global pointer (r1) ULONGLONG IntT0; ULONGLONG IntT1; ULONGLONG IntS0; ULONGLONG IntS1; ULONGLONG IntS2; ULONGLONG IntS3; ULONGLONG IntV0; // return value (r8) ULONGLONG IntAp; // argument pointer (r9) ULONGLONG IntT2; ULONGLONG IntT3; ULONGLONG IntSp; // stack pointer (r12) ULONGLONG IntT4; ULONGLONG IntT5; ULONGLONG IntT6; ULONGLONG IntT7; ULONGLONG IntT8; ULONGLONG IntT9; ULONGLONG IntT10; ULONGLONG IntT11; ULONGLONG IntT12; ULONGLONG IntT13; ULONGLONG IntT14; ULONGLONG IntT15; ULONGLONG IntT16; ULONGLONG IntT17; ULONGLONG IntT18; ULONGLONG IntT19; ULONGLONG IntT20; ULONGLONG IntT21; ULONGLONG IntT22; ULONGLONG IntNats; // Nat bits for general registers // r1-r31 in bit positions 1 to 31. ULONGLONG Preds; // Predicates ULONGLONG BrS0l; // Branch registers ULONGLONG BrS0h; ULONGLONG BrS1l; ULONGLONG BrS1h; ULONGLONG BrS2l; ULONGLONG BrS2h; ULONGLONG BrS3l; ULONGLONG BrS3h; ULONGLONG BrS4l; ULONGLONG BrS4h; ULONGLONG BrT0l; ULONGLONG BrT0h; ULONGLONG BrT1l; ULONGLONG BrT1h; ULONGLONG BrRpl; // return pointer ULONGLONG BrRph; ULONGLONG BrT2l; ULONGLONG BrT2h; ULONGLONG BrT3l; ULONGLONG BrT3h; ULONGLONG BrT4l; ULONGLONG BrT4h; ULONGLONG BrT5l; ULONGLONG BrT5h; ULONGLONG BrT6l; ULONGLONG BrT6h; ULONGLONG BrT7l; ULONGLONG BrT7h; ULONGLONG BrT8l; ULONGLONG BrT8h; ULONGLONG BrT9l; ULONGLONG BrT9h; // This section is specified/returned if the ContextFlags word contains // the flag CONTEXT_CONTROL. // Other application registers ULONGLONG ApSunatcr; // User Nat collection register (preserved) ULONGLONG ApSlc; // Loop counter register (preserved) ULONGLONG ApTccv; // CMPXCHG value register (volatile) ULONGLONG ApDCR; // Register stack info ULONGLONG RsPFS; ULONGLONG RsBSP; ULONGLONG RsBSPStore; ULONGLONG RsRSC; ULONGLONG RsRNAT; // Trap Status Information ULONGLONG StIPSR; // Interrupt Processor Status ULONGLONG StIIP; // Interrupt IP ULONGLONG StIFS; // Interrupt Frame Marker ULONGLONG Fill; // padding for 16-byte alignment on stack, if needed // @@END_DDKSPLIT #else ULONG PlaceHolder; #endif // defined(_IA64_) } IA64_RESTART_STATE, *PIA64_RESTART_STATE; typedef struct _RESTART_BLOCK { ULONG Signature; ULONG Length; USHORT Version; USHORT Revision; struct _RESTART_BLOCK * FIRMWARE_PTR NextRestartBlock; VOID * FIRMWARE_PTR RestartAddress; ULONG BootMasterId; ULONG ProcessorId; volatile BOOT_STATUS BootStatus; ULONG CheckSum; ULONG SaveAreaLength; union { ULONG SaveArea[1]; ALPHA_RESTART_STATE Alpha; I386_RESTART_STATE I386; IA64_RESTART_STATE Ia64; } u; } RESTART_BLOCK, *FIRMWARE_PTR PRESTART_BLOCK; #if defined(_IA64_) #include "poppack.h" #endif // Define system parameter block structure. typedef struct _SYSTEM_PARAMETER_BLOCK { ULONG Signature; ULONG Length; USHORT Version; USHORT Revision; PRESTART_BLOCK RestartBlock; PDEBUG_BLOCK DebugBlock; VOID * FIRMWARE_PTR GenerateExceptionVector; VOID * FIRMWARE_PTR TlbMissExceptionVector; ULONG FirmwareVectorLength; VOID * FIRMWARE_PTR * FIRMWARE_PTR FirmwareVector; ULONG VendorVectorLength; VOID * FIRMWARE_PTR * FIRMWARE_PTR VendorVector; ULONG AdapterCount; ULONG Adapter0Type; ULONG Adapter0Length; VOID * FIRMWARE_PTR * FIRMWARE_PTR Adapter0Vector; } SYSTEM_PARAMETER_BLOCK, *FIRMWARE_PTR PSYSTEM_PARAMETER_BLOCK; // Define macros that call firmware routines indirectly through the firmware // vector and provide type checking of argument values. #if defined(_ALPHA_) || defined(_AXP64_) #define SYSTEM_BLOCK ((SYSTEM_PARAMETER_BLOCK *)(KSEG0_BASE | 0x6FE000)) #elif defined(_IA64_) extern SYSTEM_PARAMETER_BLOCK GlobalSystemBlock; #define SYSTEM_BLOCK (&GlobalSystemBlock) #elif defined(_X86_) #if defined(ARCI386) #define SYSTEM_BLOCK ((PSYSTEM_PARAMETER_BLOCK)(0x1000)) #else extern SYSTEM_PARAMETER_BLOCK GlobalSystemBlock; #define SYSTEM_BLOCK (&GlobalSystemBlock) #endif #endif // Define software loading and execution functions. #define ArcExecute(ImagePath, Argc, Argv, Envp) \ ((PARC_EXECUTE_ROUTINE)(SYSTEM_BLOCK->FirmwareVector[ExecuteRoutine])) \ ((ImagePath), (Argc), (Argv), (Envp)) #define ArcInvoke(EntryAddress, StackAddress, Argc, Argv, Envp) \ ((PARC_INVOKE_ROUTINE)(SYSTEM_BLOCK->FirmwareVector[InvokeRoutine])) \ ((EntryAddress), (StackAddress), (Argc), (Argv), (Envp)) #define ArcLoad(ImagePath, TopAddress, EntryAddress, LowAddress) \ ((PARC_LOAD_ROUTINE)(SYSTEM_BLOCK->FirmwareVector[LoadRoutine])) \ ((ImagePath), (TopAddress), (EntryAddress), (LowAddress)) // Define program termination functions. #define ArcHalt() ((PARC_HALT_ROUTINE)(SYSTEM_BLOCK->FirmwareVector[HaltRoutine]))() #define ArcPowerDown() ((PARC_POWERDOWN_ROUTINE)(SYSTEM_BLOCK->FirmwareVector[PowerDownRoutine]))() #define ArcRestart() ((PARC_RESTART_ROUTINE)(SYSTEM_BLOCK->FirmwareVector[RestartRoutine]))() #define ArcReboot() ((PARC_REBOOT_ROUTINE)(SYSTEM_BLOCK->FirmwareVector[RebootRoutine]))() #define ArcEnterInteractiveMode() ((PARC_INTERACTIVE_MODE_ROUTINE)(SYSTEM_BLOCK->FirmwareVector[InteractiveModeRoutine]))() // Define configuration functions. #define ArcGetChild(Component) \ ((PARC_GET_CHILD_ROUTINE)(SYSTEM_BLOCK->FirmwareVector[GetChildRoutine])) \ ((Component)) #define ArcGetParent(Component) \ ((PARC_GET_PARENT_ROUTINE)(SYSTEM_BLOCK->FirmwareVector[GetParentRoutine])) \ ((Component)) #define ArcGetPeer(Component) \ ((PARC_GET_PEER_ROUTINE)(SYSTEM_BLOCK->FirmwareVector[GetPeerRoutine])) \ ((Component)) #define ArcAddChild(Component, NewComponent, ConfigurationData) \ ((PARC_ADD_CHILD_ROUTINE)(SYSTEM_BLOCK->FirmwareVector[AddChildRoutine])) \ ((Component), (NewComponent), (ConfigurationData)) #define ArcDeleteComponent(Component) \ ((PARC_DELETE_COMPONENT_ROUTINE)(SYSTEM_BLOCK->FirmwareVector[DeleteComponentRoutine])) \ ((Component)) #define ArcGetComponent(Path) \ ((PARC_GET_COMPONENT_ROUTINE)(SYSTEM_BLOCK->FirmwareVector[GetComponentRoutine])) \ ((Path)) #define ArcGetConfigurationData(ConfigurationData, Component) \ ((PARC_GET_DATA_ROUTINE)(SYSTEM_BLOCK->FirmwareVector[GetDataRoutine])) \ ((ConfigurationData), (Component)) #define ArcSaveConfiguration() \ ((PARC_SAVE_CONFIGURATION_ROUTINE)(SYSTEM_BLOCK->FirmwareVector[SaveConfigurationRoutine]))() #define ArcGetSystemId() \ ((PARC_GET_SYSTEM_ID_ROUTINE)(SYSTEM_BLOCK->FirmwareVector[GetSystemIdRoutine]))() #define ArcGetMemoryDescriptor(MemoryDescriptor) \ ((PARC_MEMORY_ROUTINE)(SYSTEM_BLOCK->FirmwareVector[MemoryRoutine])) \ ((MemoryDescriptor)) #define ArcGetTime() \ ((PARC_GET_TIME_ROUTINE)(SYSTEM_BLOCK->FirmwareVector[GetTimeRoutine]))() #define ArcGetRelativeTime() \ ((PARC_GET_RELATIVE_TIME_ROUTINE)(SYSTEM_BLOCK->FirmwareVector[GetRelativeTimeRoutine]))() // Define I/O functions. #define ArcClose(FileId) \ ((PARC_CLOSE_ROUTINE)(SYSTEM_BLOCK->FirmwareVector[CloseRoutine])) \ ((FileId)) #define ArcGetReadStatus(FileId) \ ((PARC_READ_STATUS_ROUTINE)(SYSTEM_BLOCK->FirmwareVector[ReadStatusRoutine])) \ ((FileId)) #define ArcMount(MountPath, Operation) \ ((PARC_MOUNT_ROUTINE)(SYSTEM_BLOCK->FirmwareVector[MountRoutine])) \ ((MountPath), (Operation)) #define ArcOpen(OpenPath, OpenMode, FileId) \ ((PARC_OPEN_ROUTINE)(SYSTEM_BLOCK->FirmwareVector[OpenRoutine])) \ ((OpenPath), (OpenMode), (FileId)) #define ArcRead(FileId, Buffer, Length, Count) \ ((PARC_READ_ROUTINE)(SYSTEM_BLOCK->FirmwareVector[ReadRoutine])) \ ((FileId), (Buffer), (Length), (Count)) #define ArcSeek(FileId, Offset, SeekMode) \ ((PARC_SEEK_ROUTINE)(SYSTEM_BLOCK->FirmwareVector[SeekRoutine])) \ ((FileId), (Offset), (SeekMode)) #define ArcWrite(FileId, Buffer, Length, Count) \ ((PARC_WRITE_ROUTINE)(SYSTEM_BLOCK->FirmwareVector[WriteRoutine])) \ ((FileId), (Buffer), (Length), (Count)) #define ArcGetFileInformation(FileId, FileInformation) \ ((PARC_GET_FILE_INFO_ROUTINE)(SYSTEM_BLOCK->FirmwareVector[GetFileInformationRoutine])) \ ((FileId), (FileInformation)) #define ArcSetFileInformation(FileId, AttributeFlags, AttributeMask) \ ((PARC_SET_FILE_INFO_ROUTINE)(SYSTEM_BLOCK->FirmwareVector[SetFileInformationRoutine])) \ ((FileId), (AttributeFlags), (AttributeMask)) #define ArcGetDirectoryEntry(FileId, Buffer, Length, Count) \ ((PARC_GET_DIRECTORY_ENTRY_ROUTINE)(SYSTEM_BLOCK->FirmwareVector[GetDirectoryEntryRoutine])) \ ((FileId), (Buffer), (Length), (Count)) // Define environment functions. #if defined(_AXP64_) && defined(_NTHAL_) __inline CHAR * FIRMWARE_PTR ArcGetEnvironmentVariable( IN PCHAR Variable ) { CHAR * FIRMWARE_PTR FwPtr; KIRQL OldIrql = FwAcquireFirmwareLock(); FwPtr = HalpArcGetEnvironmentVariable(Variable); FwReleaseFirmwareLock(OldIrql); return FwPtr; } #else #define ArcGetEnvironmentVariable(Variable) \ ((PARC_GET_ENVIRONMENT_ROUTINE)(SYSTEM_BLOCK->FirmwareVector[GetEnvironmentRoutine])) \ ((Variable)) #endif // _AXP64_ && defined(_NTHAL_) #if defined(_AXP64_) && defined(_NTHAL_) __inline ARC_STATUS ArcSetEnvironmentVariable( IN PCHAR Variable, IN PCHAR Value ) { ARC_STATUS ArcStatus; KIRQL OldIrql = FwAcquireFirmwareLock(); ArcStatus = HalpArcSetEnvironmentVariable(Variable, Value); FwReleaseFirmwareLock(OldIrql); return ArcStatus; } #else #define ArcSetEnvironmentVariable(Variable, Value) \ ((PARC_SET_ENVIRONMENT_ROUTINE)(SYSTEM_BLOCK->FirmwareVector[SetEnvironmentRoutine])) \ ((Variable), (Value)) #endif // _AXP64_ && defined(_NTHAL_) // Define cache flush functions. #define ArcFlushAllCaches() \ ((PARC_FLUSH_ALL_CACHES_ROUTINE)(SYSTEM_BLOCK->FirmwareVector[FlushAllCachesRoutine]))() // Define TestUnicodeCharacter and GetDisplayStatus functions. #define ArcTestUnicodeCharacter(FileId, UnicodeCharacter) \ ((PARC_TEST_UNICODE_CHARACTER_ROUTINE)(SYSTEM_BLOCK->FirmwareVector[TestUnicodeCharacterRoutine])) \ ((FileId), (UnicodeCharacter)) #define ArcGetDisplayStatus(FileId) \ ((PARC_GET_DISPLAY_STATUS_ROUTINE)(SYSTEM_BLOCK->FirmwareVector[GetDisplayStatusRoutine])) \ ((FileId)) // Define configuration data structure used in all systems. typedef struct _CONFIGURATION_COMPONENT_DATA { struct _CONFIGURATION_COMPONENT_DATA *Parent; struct _CONFIGURATION_COMPONENT_DATA *Child; struct _CONFIGURATION_COMPONENT_DATA *Sibling; CONFIGURATION_COMPONENT ComponentEntry; PVOID ConfigurationData; } CONFIGURATION_COMPONENT_DATA, *PCONFIGURATION_COMPONENT_DATA; // Define generic display configuration data structure. typedef struct _MONITOR_CONFIGURATION_DATA { USHORT Version; USHORT Revision; USHORT HorizontalResolution; USHORT HorizontalDisplayTime; USHORT HorizontalBackPorch; USHORT HorizontalFrontPorch; USHORT HorizontalSync; USHORT VerticalResolution; USHORT VerticalBackPorch; USHORT VerticalFrontPorch; USHORT VerticalSync; USHORT HorizontalScreenSize; USHORT VerticalScreenSize; } MONITOR_CONFIGURATION_DATA, *PMONITOR_CONFIGURATION_DATA; // Define generic floppy configuration data structure. typedef struct _FLOPPY_CONFIGURATION_DATA { USHORT Version; USHORT Revision; CHAR Size[8]; ULONG MaxDensity; ULONG MountDensity; } FLOPPY_CONFIGURATION_DATA, *PFLOPPY_CONFIGURATION_DATA; // Define memory allocation structures used in all systems. typedef enum _TYPE_OF_MEMORY { LoaderExceptionBlock = MemoryExceptionBlock, // 0 LoaderSystemBlock = MemorySystemBlock, // 1 LoaderFree = MemoryFree, // 2 LoaderBad = MemoryBad, // 3 LoaderLoadedProgram = MemoryLoadedProgram, // 4 LoaderFirmwareTemporary = MemoryFirmwareTemporary, // 5 LoaderFirmwarePermanent = MemoryFirmwarePermanent, // 6 LoaderOsloaderHeap, // 7 LoaderOsloaderStack, // 8 LoaderSystemCode, // 9 LoaderHalCode, // a LoaderBootDriver, // b LoaderConsoleInDriver, // c LoaderConsoleOutDriver, // d LoaderStartupDpcStack, // e LoaderStartupKernelStack, // f LoaderStartupPanicStack, // 10 LoaderStartupPcrPage, // 11 LoaderStartupPdrPage, // 12 LoaderRegistryData, // 13 LoaderMemoryData, // 14 LoaderNlsData, // 15 LoaderSpecialMemory, // 16 LoaderBBTMemory, // 17 LoaderMaximum // 18 } TYPE_OF_MEMORY; typedef struct _MEMORY_ALLOCATION_DESCRIPTOR { LIST_ENTRY ListEntry; TYPE_OF_MEMORY MemoryType; ULONG BasePage; ULONG PageCount; } MEMORY_ALLOCATION_DESCRIPTOR, *PMEMORY_ALLOCATION_DESCRIPTOR; // Define loader parameter block structure. typedef struct _NLS_DATA_BLOCK { PVOID AnsiCodePageData; PVOID OemCodePageData; PVOID UnicodeCaseTableData; } NLS_DATA_BLOCK, *PNLS_DATA_BLOCK; typedef struct _ARC_DISK_SIGNATURE { LIST_ENTRY ListEntry; ULONG Signature; PCHAR ArcName; ULONG CheckSum; BOOLEAN ValidPartitionTable; BOOLEAN xInt13; } ARC_DISK_SIGNATURE, *PARC_DISK_SIGNATURE; typedef struct _ARC_DISK_INFORMATION { LIST_ENTRY DiskSignatures; } ARC_DISK_INFORMATION, *PARC_DISK_INFORMATION; typedef struct _I386_LOADER_BLOCK { #if defined(_X86_) PVOID CommonDataArea; ULONG MachineType; // Temporary only ULONG VirtualBias; #else ULONG PlaceHolder; #endif } I386_LOADER_BLOCK, *PI386_LOADER_BLOCK; typedef struct _ALPHA_LOADER_BLOCK { #if defined(_ALPHA_) || defined(_AXP64_) ULONG_PTR DpcStack; ULONG FirstLevelDcacheSize; ULONG FirstLevelDcacheFillSize; ULONG FirstLevelIcacheSize; ULONG FirstLevelIcacheFillSize; ULONG_PTR GpBase; ULONG_PTR PanicStack; ULONG PcrPage; ULONG PdrPage; ULONG SecondLevelDcacheSize; ULONG SecondLevelDcacheFillSize; ULONG SecondLevelIcacheSize; ULONG SecondLevelIcacheFillSize; ULONG PhysicalAddressBits; ULONG MaximumAddressSpaceNumber; UCHAR SystemSerialNumber[16]; UCHAR SystemType[8]; ULONG SystemVariant; ULONG SystemRevision; ULONG ProcessorType; ULONG ProcessorRevision; ULONG CycleClockPeriod; ULONG PageSize; PVOID RestartBlock; ULONGLONG FirmwareRestartAddress; ULONG FirmwareRevisionId; PVOID PalBaseAddress; UCHAR FirmwareVersion[16]; UCHAR FirmwareBuildTimeStamp[20]; #else ULONG PlaceHolder; #endif } ALPHA_LOADER_BLOCK, *PALPHA_LOADER_BLOCK; #if defined(_IA64_) typedef struct _TR_INFO { ULONG Index; ULONG PageSize; ULONGLONG VirtualAddress; ULONGLONG PhysicalAddress; } TR_INFO, *PTR_INFO; #endif typedef struct _IA64_LOADER_BLOCK { #if defined(_IA64_) ULONG_PTR SalSystemTable; ULONG_PTR MPSConfigTable; ULONG_PTR AcpiRsdt; ULONG_PTR KernelPhysicalBase; ULONG_PTR KernelVirtualBase; ULONG_PTR InterruptStack; ULONG_PTR PanicStack; ULONG_PTR PcrPage; ULONG_PTR PdrPage; ULONG_PTR PcrPage2; ULONG MachineType; TR_INFO ItrInfo[8]; TR_INFO DtrInfo[8]; ULONG_PTR EfiSystemTable; ULONG_PTR PalProcVirtual; #else ULONG PlaceHolder; #endif } IA64_LOADER_BLOCK, *PIA64_LOADER_BLOCK; typedef struct _LOADER_PARAMETER_EXTENSION { ULONG Size; // set to sizeof (struct _LOADER_PARAMETER_EXTENSION) PROFILE_PARAMETER_BLOCK Profile; ULONG MajorVersion; ULONG MinorVersion; PVOID InfFileImage; // Inf used to identify "broken" machines. ULONG InfFileSize; // Pointer to the triage block, if present. PVOID TriageDumpBlock; } LOADER_PARAMETER_EXTENSION, *PLOADER_PARAMETER_EXTENSION; struct _SETUP_LOADER_BLOCK; typedef struct _LOADER_PARAMETER_BLOCK { LIST_ENTRY LoadOrderListHead; LIST_ENTRY MemoryDescriptorListHead; LIST_ENTRY BootDriverListHead; ULONG_PTR KernelStack; ULONG_PTR Prcb; ULONG_PTR Process; ULONG_PTR Thread; ULONG RegistryLength; PVOID RegistryBase; PCONFIGURATION_COMPONENT_DATA ConfigurationRoot; PCHAR ArcBootDeviceName; PCHAR ArcHalDeviceName; PCHAR NtBootPathName; PCHAR NtHalPathName; PCHAR LoadOptions; PNLS_DATA_BLOCK NlsData; PARC_DISK_INFORMATION ArcDiskInformation; PVOID OemFontFile; struct _SETUP_LOADER_BLOCK *SetupLoaderBlock; PLOADER_PARAMETER_EXTENSION Extension; union { I386_LOADER_BLOCK I386; ALPHA_LOADER_BLOCK Alpha; IA64_LOADER_BLOCK Ia64; } u; } LOADER_PARAMETER_BLOCK, *PLOADER_PARAMETER_BLOCK; #endif // _ARC_