2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS kernel
5 * PURPOSE: Hardware Abstraction Layer DLL
6 * PROGRAMMER: Casper S. Hornstrup (chorns@users.sourceforge.net)
8 * 01-08-2001 CSH Created
11 /* INCLUDES ******************************************************************/
17 #include <ndk/halfuncs.h>
18 #include <ndk/iofuncs.h>
19 #include <ndk/kdfuncs.h>
24 #undef ExAcquireFastMutex
25 #undef ExReleaseFastMutex
26 #undef ExTryToAcquireFastMutex
28 /* DATA **********************************************************************/
30 PUCHAR KdComPortInUse
;
32 /* FUNCTIONS *****************************************************************/
37 PDRIVER_OBJECT DriverObject
,
38 PUNICODE_STRING RegistryPath
)
42 return STATUS_SUCCESS
;
50 HalStopProfileInterrupt(IN KPROFILE_SOURCE ProfileSource
)
61 HalStartProfileInterrupt(IN KPROFILE_SOURCE ProfileSource
)
72 HalSetProfileInterval(IN ULONG_PTR Interval
)
82 PFAST_MUTEX FastMutex
)
91 PFAST_MUTEX FastMutex
)
98 ExTryToAcquireFastMutex(
99 PFAST_MUTEX FastMutex
)
109 HalAcquireDisplayOwnership(
110 PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters
)
118 HalAdjustResourceList(
119 PCM_RESOURCE_LIST Resources
)
123 return STATUS_SUCCESS
;
129 HalAllProcessorsStarted(VOID
)
139 HalAllocateAdapterChannel(
140 PADAPTER_OBJECT AdapterObject
,
141 PWAIT_CONTEXT_BLOCK WaitContextBlock
,
142 ULONG NumberOfMapRegisters
,
143 PDRIVER_CONTROL ExecutionRoutine
)
147 return STATUS_SUCCESS
;
153 HalAllocateCommonBuffer(
154 PADAPTER_OBJECT AdapterObject
,
156 PPHYSICAL_ADDRESS LogicalAddress
,
157 BOOLEAN CacheEnabled
)
167 HalAllocateCrashDumpRegisters(
168 PADAPTER_OBJECT AdapterObject
,
169 PULONG NumberOfMapRegisters
)
177 HalBugCheckSystem (PVOID ErrorRecord
)
185 HalAssignSlotResources(
186 PUNICODE_STRING RegistryPath
,
187 PUNICODE_STRING DriverClassName
,
188 PDRIVER_OBJECT DriverObject
,
189 PDEVICE_OBJECT DeviceObject
,
190 INTERFACE_TYPE BusType
,
193 PCM_RESOURCE_LIST
*AllocatedResources
)
203 HalBeginSystemInterrupt (KIRQL Irql
,
215 HalCalibratePerformanceCounter(
216 volatile LONG
*Count
,
225 HalDisableSystemInterrupt(ULONG Vector
,
243 HalEnableSystemInterrupt(
246 KINTERRUPT_MODE InterruptMode
)
256 HalEndSystemInterrupt(
266 HalFlushCommonBuffer(
282 PADAPTER_OBJECT AdapterObject
,
284 PHYSICAL_ADDRESS LogicalAddress
,
285 PVOID VirtualAddress
,
286 BOOLEAN CacheEnabled
)
295 PDEVICE_DESCRIPTION DeviceDescription
,
296 PULONG NumberOfMapRegisters
)
300 return (PADAPTER_OBJECT
)NULL
;
307 BUS_DATA_TYPE BusDataType
,
321 HalGetBusDataByOffset(
322 BUS_DATA_TYPE BusDataType
,
337 HalGetEnvironmentVariable(
350 HalGetInterruptVector(
351 INTERFACE_TYPE InterfaceType
,
353 ULONG BusInterruptLevel
,
354 ULONG BusInterruptVector
,
377 PLOADER_PARAMETER_BLOCK LoaderBlock
)
387 HalInitializeProcessor(ULONG ProcessorNumber
,
388 PLOADER_PARAMETER_BLOCK LoaderBlock
)
407 HalProcessorIdle(VOID
)
415 HalQueryDisplayOwnership(VOID
)
425 HalQueryDisplayParameters(
426 OUT PULONG DispSizeX
,
427 OUT PULONG DispSizeY
,
428 OUT PULONG CursorPosX
,
429 OUT PULONG CursorPosY
)
437 HalQueryRealTimeClock(
448 PADAPTER_OBJECT AdapterObject
)
458 HalReleaseDisplayOwnership(VOID
)
465 HalReportResourceUsage(VOID
)
482 HalRequestSoftwareInterrupt(
489 HalClearSoftwareInterrupt(
499 FIRMWARE_REENTRY Action
)
508 BUS_DATA_TYPE BusDataType
,
522 HalSetBusDataByOffset(
523 BUS_DATA_TYPE BusDataType
,
538 HalSetDisplayParameters(
548 HalSetEnvironmentVariable(
582 HalStartNextProcessor(IN PLOADER_PARAMETER_BLOCK LoaderBlock
,
583 IN PKPROCESSOR_STATE ProcessorState
)
593 HalSystemVectorDispatchEntry(IN ULONG Vector
,
594 OUT PKINTERRUPT_ROUTINE
**FlatDispatch
,
595 OUT PKINTERRUPT_ROUTINE
*NoConnection
)
604 HalTranslateBusAddress(
605 INTERFACE_TYPE InterfaceType
,
607 PHYSICAL_ADDRESS BusAddress
,
609 PPHYSICAL_ADDRESS TranslatedAddress
)
619 HalpAssignDriveLetters(IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
620 IN PSTRING NtDeviceName
,
621 OUT PUCHAR NtSystemPath
,
622 OUT PSTRING NtSystemPathString
)
624 /* Call the kernel */
625 IoAssignDriveLetters(LoaderBlock
,
633 HalpReadPartitionTable(IN PDEVICE_OBJECT DeviceObject
,
635 IN BOOLEAN ReturnRecognizedPartitions
,
636 IN OUT PDRIVE_LAYOUT_INFORMATION
*PartitionBuffer
)
638 /* Call the kernel */
639 return IoReadPartitionTable(DeviceObject
,
641 ReturnRecognizedPartitions
,
647 HalpWritePartitionTable(IN PDEVICE_OBJECT DeviceObject
,
649 IN ULONG SectorsPerTrack
,
650 IN ULONG NumberOfHeads
,
651 IN PDRIVE_LAYOUT_INFORMATION PartitionBuffer
)
653 /* Call the kernel */
654 return IoWritePartitionTable(DeviceObject
,
663 HalpSetPartitionInformation(IN PDEVICE_OBJECT DeviceObject
,
665 IN ULONG PartitionNumber
,
666 IN ULONG PartitionType
)
668 /* Call the kernel */
669 return IoSetPartitionInformation(DeviceObject
,
678 IoFlushAdapterBuffers(
679 PADAPTER_OBJECT AdapterObject
,
681 PVOID MapRegisterBase
,
684 BOOLEAN WriteToDevice
)
694 IoFreeAdapterChannel(
695 PADAPTER_OBJECT AdapterObject
)
704 PADAPTER_OBJECT AdapterObject
,
705 PVOID MapRegisterBase
,
706 ULONG NumberOfMapRegisters
)
715 PADAPTER_OBJECT AdapterObject
,
717 PVOID MapRegisterBase
,
720 BOOLEAN WriteToDevice
)
722 PHYSICAL_ADDRESS Address
;
726 Address
.QuadPart
= 0;
732 #undef KeAcquireSpinLock
736 PKSPIN_LOCK SpinLock
,
745 KeAcquireSpinLockRaiseToSynch(
746 PKSPIN_LOCK SpinLock
)
756 KeAcquireInStackQueuedSpinLock(
757 IN PKSPIN_LOCK SpinLock
,
758 IN PKLOCK_QUEUE_HANDLE LockHandle
766 KeAcquireInStackQueuedSpinLockRaiseToSynch(
767 IN PKSPIN_LOCK SpinLock
,
768 IN PKLOCK_QUEUE_HANDLE LockHandle
776 KeReleaseInStackQueuedSpinLock(
777 IN PKLOCK_QUEUE_HANDLE LockHandle
786 KeFlushWriteBuffer(VOID
)
792 #undef KeGetCurrentIrql
795 KeGetCurrentIrql(VOID
)
815 KeQueryPerformanceCounter(
816 PLARGE_INTEGER PerformanceFreq
)
841 KeRaiseIrqlToDpcLevel(VOID
)
851 KeRaiseIrqlToSynchLevel(VOID
)
860 #undef KeReleaseSpinLock
864 PKSPIN_LOCK SpinLock
,
873 KeStallExecutionProcessor(
882 KeTryToAcquireQueuedSpinLock(
883 KSPIN_LOCK_QUEUE_NUMBER LockNumber
,
894 KeTryToAcquireQueuedSpinLockRaiseToSynch(
895 KSPIN_LOCK_QUEUE_NUMBER LockNumber
,
903 #if !defined(_M_AMD64)
907 PKSPIN_LOCK SpinLock
)
938 PKSPIN_LOCK SpinLock
,
945 #if !defined(_M_AMD64)
948 READ_PORT_BUFFER_UCHAR(
959 READ_PORT_BUFFER_ULONG(
970 READ_PORT_BUFFER_USHORT(
1014 WRITE_PORT_BUFFER_UCHAR(
1025 WRITE_PORT_BUFFER_USHORT(
1036 WRITE_PORT_BUFFER_ULONG(
1075 KeAcquireQueuedSpinLock(IN PKLOCK_QUEUE_HANDLE LockHandle
)
1083 KeAcquireQueuedSpinLockRaiseToSynch(IN PKLOCK_QUEUE_HANDLE LockHandle
)
1091 KeReleaseQueuedSpinLock(IN PKLOCK_QUEUE_HANDLE LockHandle
,
1098 HalSweepDcache(VOID
)
1104 HalSweepIcache(VOID
)
1110 HalGetInterruptSource(VOID
)
1119 x86BiosAllocateBuffer (
1125 return STATUS_UNSUCCESSFUL
;;
1132 ULONG InterruptNumber
,
1133 X86_BIOS_REGISTERS
*Registers
)
1146 return STATUS_UNSUCCESSFUL
;;
1157 return STATUS_UNSUCCESSFUL
;;
1162 x86BiosWriteMemory (
1169 return STATUS_UNSUCCESSFUL
;;