/*++ BUILD Version: 0011 // Increment this if a change has global effects Copyright (c) 1991 Microsoft Corporation Module Name: hal.h Abstract: This header file defines the Hardware Architecture Layer (HAL) interfaces that are exported by a system vendor to the NT system. Author: David N. Cutler (davec) 25-Apr-1991 Revision History: --*/ #ifndef _HAL_ #define _HAL_ VOID HalInitSystemPhase0( VOID ); VOID HalInitSystemPhase0Quick( VOID ); VOID HalInitSystemPhase1( VOID ); VOID HalPulseHardwareMonitorPin( VOID ); // // Non maskable interrupt routine. // VOID HalHandleNMI( VOID ); // // Profiling functions. // NTHALAPI ULONG_PTR HalSetProfileInterval( IN ULONG Interval ); NTHALAPI VOID HalStartProfileInterrupt( ULONG unused ); NTHALAPI VOID HalStopProfileInterrupt( ULONG unused ); // // Timer and interrupt functions. // NTHALAPI BOOLEAN HalQueryRealTimeClock( OUT PTIME_FIELDS TimeFields ); NTHALAPI BOOLEAN HalSetRealTimeClock( IN PTIME_FIELDS TimeFields ); NTHALAPI VOID FASTCALL HalRequestSoftwareInterrupt( KIRQL RequestIrql ); // // CMOS validity functions. // BOOLEAN HalIsCmosValid( VOID ); VOID HalMarkCmosValid( VOID ); // // Firmware interface functions. // DECLSPEC_NORETURN NTHALAPI VOID HalReturnToFirmware( IN FIRMWARE_REENTRY Routine ); // // Shutdown notification support. // typedef VOID (*PHAL_SHUTDOWN_NOTIFICATION)( IN struct _HAL_SHUTDOWN_REGISTRATION *ShutdownRegistration ); typedef struct _HAL_SHUTDOWN_REGISTRATION { PHAL_SHUTDOWN_NOTIFICATION NotificationRoutine; LONG Priority; LIST_ENTRY ListEntry; } HAL_SHUTDOWN_REGISTRATION, *PHAL_SHUTDOWN_REGISTRATION; NTHALAPI VOID HalRegisterShutdownNotification( IN PHAL_SHUTDOWN_REGISTRATION ShutdownRegistration, IN BOOLEAN Register ); NTHALAPI BOOLEAN HalIsResetOrShutdownPending( VOID ); VOID HalMustCompletePacketsFinished( VOID ); NTHALAPI VOID HalInitiateShutdown( VOID ); // // System interrupts functions. // NTHALAPI VOID HalDisableSystemInterrupt( IN ULONG BusInterruptLevel ); NTHALAPI VOID HalEnableSystemInterrupt( IN ULONG BusInterruptLevel, IN KINTERRUPT_MODE InterruptMode ); // begin_ntddk // // I/O driver configuration functions. // NTHALAPI VOID HalReadWritePCISpace( IN ULONG BusNumber, IN ULONG SlotNumber, IN ULONG RegisterNumber, IN PVOID Buffer, IN ULONG Length, IN BOOLEAN WritePCISpace ); #define HalReadPCISpace(BusNumber, SlotNumber, RegisterNumber, Buffer, Length) \ HalReadWritePCISpace(BusNumber, SlotNumber, RegisterNumber, Buffer, Length, FALSE) #define HalWritePCISpace(BusNumber, SlotNumber, RegisterNumber, Buffer, Length) \ HalReadWritePCISpace(BusNumber, SlotNumber, RegisterNumber, Buffer, Length, TRUE) NTHALAPI ULONG HalGetInterruptVector( IN ULONG BusInterruptLevel, OUT PKIRQL Irql ); #include typedef struct _PCI_DEVICE_ADDRESS { UCHAR Type; //CmResourceType UCHAR Valid; UCHAR Reserved[2]; union { struct { PVOID TranslatedAddress; ULONG Length; } Port; struct { PVOID TranslatedAddress; ULONG Length; } Memory; } u; } PCI_DEVICE_ADDRESS, *PPCI_DEVICE_ADDRESS; typedef struct _PCI_DEVICE_DESCRIPTOR { ULONG Bus; ULONG Slot; USHORT VendorID; USHORT DeviceID; UCHAR BaseClass; UCHAR SubClass; UCHAR ProgIf; UCHAR Reserved[1]; struct { PCI_DEVICE_ADDRESS Address[1]; struct { ULONG Vector; ULONG Affinity; KIRQL Irql; // KIRQL is uchar! } Interrupt; } ResourceData; } PCI_DEVICE_DESCRIPTOR, *PPCI_DEVICE_DESCRIPTOR; #include // end_ntddk // // The following function prototypes are for HAL routines with a prefix of Ke. // // begin_ntddk begin_wdm // // Performance counter function. // NTHALAPI LARGE_INTEGER KeQueryPerformanceCounter( VOID ); NTHALAPI LARGE_INTEGER KeQueryPerformanceFrequency( VOID ); // // Stall processor execution function. // NTHALAPI VOID KeStallExecutionProcessor( IN ULONG MicroSeconds ); // end_wdm DECLSPEC_NORETURN NTHALAPI VOID HalHaltSystem( VOID ); // end_ntddk // // SMBus functions. // NTHALAPI NTSTATUS HalReadSMBusValue( IN UCHAR SlaveAddress, IN UCHAR CommandCode, IN BOOLEAN ReadWordValue, OUT ULONG *DataValue ); #define HalReadSMBusByte(SlaveAddress, CommandCode, DataValue) \ HalReadSMBusValue(SlaveAddress, CommandCode, FALSE, DataValue) #define HalReadSMBusWord(SlaveAddress, CommandCode, DataValue) \ HalReadSMBusValue(SlaveAddress, CommandCode, TRUE, DataValue) NTHALAPI NTSTATUS HalWriteSMBusValue( IN UCHAR SlaveAddress, IN UCHAR CommandCode, IN BOOLEAN WriteWordValue, IN ULONG DataValue ); #define HalWriteSMBusByte(SlaveAddress, CommandCode, DataValue) \ HalWriteSMBusValue(SlaveAddress, CommandCode, FALSE, DataValue) #define HalWriteSMBusWord(SlaveAddress, CommandCode, DataValue) \ HalWriteSMBusValue(SlaveAddress, CommandCode, TRUE, DataValue) VOID HalWriteSMCLEDStates( IN ULONG LEDStates ); NTHALAPI NTSTATUS HalWriteSMCScratchRegister( IN ULONG ScratchRegister ); // // Super I/O controller functions. // BOOLEAN HalInitializeSuperIo( VOID ); // // DVD tray functions. // NTHALAPI NTSTATUS HalReadSMCTrayState( OUT PULONG TrayState, OUT PULONG TrayStateChangeCount OPTIONAL ); BOOLEAN HalEnableTrayEjectRequiresReboot( IN BOOLEAN EnterNonSecureMode ); NTHALAPI VOID HalEnableSecureTrayEject( VOID ); // // AV pack functions. // VOID HalBlockIfNoAVPack( VOID ); #if !defined(_NTSYSTEM_) extern PULONG HalDiskCachePartitionCount; extern PSTRING HalDiskModelNumber; extern PSTRING HalDiskSerialNumber; extern PULONG HalBootSMCVideoMode; #else extern ULONG HalDiskCachePartitionCount; extern STRING HalDiskModelNumber; extern STRING HalDiskSerialNumber; extern ULONG HalBootSMCVideoMode; #endif #endif // _HAL_