diff --git a/reactos/hal/hal.rbuild b/reactos/hal/hal.rbuild index 588040a58a0..5c3e70b2d93 100644 --- a/reactos/hal/hal.rbuild +++ b/reactos/hal/hal.rbuild @@ -27,7 +27,6 @@ - diff --git a/reactos/hal/hal/hal_amd64.def b/reactos/hal/hal/hal_amd64.def index 1d8fa785c0e..644d6c21288 100644 --- a/reactos/hal/hal/hal_amd64.def +++ b/reactos/hal/hal/hal_amd64.def @@ -14,9 +14,9 @@ HalAssignSlotResources HalCalibratePerformanceCounter HalClearSoftwareInterrupt ;HalConvertDeviceIdtToIrql -;HalDisableInterrupt +HalDisableInterrupt HalDisplayString -;HalEnableInterrupt +HalEnableInterrupt ;HalEnumerateEnvironmentVariablesEx ;HalEnumerateProcessors HalFlushCommonBuffer @@ -52,7 +52,7 @@ HalRequestIpi HalRequestSoftwareInterrupt HalReturnToFirmware ;HalSendNMI -;HalSendSoftwareInterrupt +HalSendSoftwareInterrupt HalSetBusData HalSetBusDataByOffset HalSetDisplayParameters diff --git a/reactos/hal/halamd64/generic/generic.rbuild b/reactos/hal/halamd64/generic/generic.rbuild index 2b69e20d3b6..7c22ec5013e 100644 --- a/reactos/hal/halamd64/generic/generic.rbuild +++ b/reactos/hal/halamd64/generic/generic.rbuild @@ -9,6 +9,7 @@ halinit.c irq.S misc.c + mps.S systimer.S ../include/hal.h diff --git a/reactos/hal/halamd64/generic/hal.c b/reactos/hal/halamd64/generic/hal.c deleted file mode 100644 index c16b82b7cca..00000000000 --- a/reactos/hal/halamd64/generic/hal.c +++ /dev/null @@ -1,781 +0,0 @@ -/* - * PROJECT: ReactOS HAL - * LICENSE: BSD - See COPYING.ARM in the top level directory - * FILE: hal/halarm/generic/hal.c - * PURPOSE: Hardware Abstraction Layer - * PROGRAMMERS: ReactOS Portable Systems Group - */ - -/* INCLUDES *******************************************************************/ - -#include -#define NDEBUG -#include -#include - -#define READ_REGISTER_ULONG(r) (*(volatile ULONG * const)(r)) -#define WRITE_REGISTER_ULONG(r, v) (*(volatile ULONG *)(r) = (v)) - -/* DATA **********************************************************************/ - -ULONG HalpCurrentTimeIncrement, HalpNextTimeIncrement, HalpNextIntervalCount; -ULONG _KdComPortInUse = 0; - -/* FUNCTIONS *****************************************************************/ - -NTSTATUS -NTAPI -DriverEntry( - PDRIVER_OBJECT DriverObject, - PUNICODE_STRING RegistryPath) -{ - UNIMPLEMENTED; - - return STATUS_SUCCESS; -} - -/* -* @unimplemented -*/ -VOID -NTAPI -HalStopProfileInterrupt(IN KPROFILE_SOURCE ProfileSource) -{ - KEBUGCHECK(0); - return; -} - -/* -* @unimplemented -*/ -VOID -NTAPI -HalStartProfileInterrupt(IN KPROFILE_SOURCE ProfileSource) -{ - KEBUGCHECK(0); - return; -} - -/* -* @unimplemented -*/ -ULONG_PTR -NTAPI -HalSetProfileInterval(IN ULONG_PTR Interval) -{ - KEBUGCHECK(0); - return Interval; -} - -NTSTATUS -NTAPI -HalAdjustResourceList( - PCM_RESOURCE_LIST Resources) -{ - UNIMPLEMENTED; - - return STATUS_SUCCESS; -} - - -/* - * @implemented - */ -BOOLEAN -NTAPI -HalAllProcessorsStarted(VOID) -{ - /* Do nothing */ - return TRUE; -} - - -NTSTATUS -NTAPI -HalAllocateAdapterChannel( - PADAPTER_OBJECT AdapterObject, - PWAIT_CONTEXT_BLOCK WaitContextBlock, - ULONG NumberOfMapRegisters, - PDRIVER_CONTROL ExecutionRoutine) -{ - UNIMPLEMENTED; - - return STATUS_SUCCESS; -} - - -PVOID -NTAPI -HalAllocateCommonBuffer( - PADAPTER_OBJECT AdapterObject, - ULONG Length, - PPHYSICAL_ADDRESS LogicalAddress, - BOOLEAN CacheEnabled) -{ - UNIMPLEMENTED; - - return NULL; -} - - -PVOID -NTAPI -HalAllocateCrashDumpRegisters( - PADAPTER_OBJECT AdapterObject, - PULONG NumberOfMapRegisters) -{ - UNIMPLEMENTED; - return NULL; -} - - -NTSTATUS -NTAPI -HalAssignSlotResources( - PUNICODE_STRING RegistryPath, - PUNICODE_STRING DriverClassName, - PDRIVER_OBJECT DriverObject, - PDEVICE_OBJECT DeviceObject, - INTERFACE_TYPE BusType, - ULONG BusNumber, - ULONG SlotNumber, - PCM_RESOURCE_LIST *AllocatedResources) -{ - UNIMPLEMENTED; - - return TRUE; -} - - -BOOLEAN -NTAPI -HalBeginSystemInterrupt (KIRQL Irql, - ULONG Vector, - PKIRQL OldIrql) -{ - UNIMPLEMENTED; - - return TRUE; -} - - -VOID -NTAPI -HalCalibratePerformanceCounter( - volatile LONG *Count, - ULONGLONG NewCount) -{ - UNIMPLEMENTED; -} - - -BOOLEAN -NTAPI -HalDisableSystemInterrupt( - ULONG Vector, - KIRQL Irql) -{ - UNIMPLEMENTED; - - return TRUE; -} - -VOID -NTAPI -HalAcquireDisplayOwnership(IN PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters) -{ - // - // Stub since Windows XP implemented Inbv - // - return; -} - -VOID -NTAPI -HalDisplayString(IN PCH String) -{ - // - // Call the Inbv driver - // - InbvDisplayString(String); -} - -VOID -NTAPI -HalQueryDisplayParameters(OUT PULONG DispSizeX, - OUT PULONG DispSizeY, - OUT PULONG CursorPosX, - OUT PULONG CursorPosY) -{ - // - // Stub since Windows XP implemented Inbv - // - return; -} - -VOID -NTAPI -HalSetDisplayParameters(IN ULONG CursorPosX, - IN ULONG CursorPosY) -{ - // - // Stub since Windows XP implemented Inbv - // - return; -} - -BOOLEAN -NTAPI -HalEnableSystemInterrupt( - ULONG Vector, - KIRQL Irql, - KINTERRUPT_MODE InterruptMode) -{ - UNIMPLEMENTED; - - return TRUE; -} - - -VOID -NTAPI -HalEndSystemInterrupt( - KIRQL Irql, - ULONG Unknown2) -{ - UNIMPLEMENTED; -} - - -BOOLEAN -NTAPI -HalFlushCommonBuffer( - ULONG Unknown1, - ULONG Unknown2, - ULONG Unknown3, - ULONG Unknown4, - ULONG Unknown5) -{ - UNIMPLEMENTED; - - return TRUE; -} - - -VOID -NTAPI -HalFreeCommonBuffer( - PADAPTER_OBJECT AdapterObject, - ULONG Length, - PHYSICAL_ADDRESS LogicalAddress, - PVOID VirtualAddress, - BOOLEAN CacheEnabled) -{ - UNIMPLEMENTED; -} - - -PADAPTER_OBJECT -NTAPI -HalGetAdapter( - PDEVICE_DESCRIPTION DeviceDescription, - PULONG NumberOfMapRegisters) -{ - UNIMPLEMENTED; - - return (PADAPTER_OBJECT)NULL; -} - - -ULONG -NTAPI -HalGetBusData( - BUS_DATA_TYPE BusDataType, - ULONG BusNumber, - ULONG SlotNumber, - PVOID Buffer, - ULONG Length) -{ - UNIMPLEMENTED; - - return 0; -} - - -ULONG -NTAPI -HalGetBusDataByOffset( - BUS_DATA_TYPE BusDataType, - ULONG BusNumber, - ULONG SlotNumber, - PVOID Buffer, - ULONG Offset, - ULONG Length) -{ - UNIMPLEMENTED; - - return 0; -} - - -ARC_STATUS -NTAPI -HalGetEnvironmentVariable( - PCH Name, - USHORT ValueLength, - PCH Value) -{ - UNIMPLEMENTED; - - return ENOENT; -} - - -ULONG -NTAPI -HalGetInterruptVector( - INTERFACE_TYPE InterfaceType, - ULONG BusNumber, - ULONG BusInterruptLevel, - ULONG BusInterruptVector, - PKIRQL Irql, - PKAFFINITY Affinity) -{ - UNIMPLEMENTED; - - return 0; -} - - -VOID -NTAPI -HalHandleNMI( - PVOID NmiData) -{ - UNIMPLEMENTED; -} - -VOID -NTAPI -HalpGetParameters(IN PLOADER_PARAMETER_BLOCK LoaderBlock) -{ - PCHAR CommandLine; - - /* Make sure we have a loader block and command line */ - if ((LoaderBlock) && (LoaderBlock->LoadOptions)) - { - /* Read the command line */ - CommandLine = LoaderBlock->LoadOptions; - - /* Check for initial breakpoint */ - if (strstr(CommandLine, "BREAK")) DbgBreakPoint(); - } -} - -ULONG -HalGetInterruptSource(VOID) -{ - KEBUGCHECK(0); - return 0; -} - -VOID -HalpClockInterrupt(VOID) -{ - KEBUGCHECK(0); - return; -} - -VOID -HalpStallInterrupt(VOID) -{ - KEBUGCHECK(0); - return; -} - -VOID -HalpInitializeInterrupts(VOID) -{ - KEBUGCHECK(0); - return; -} - -/* - * @implemented - */ -BOOLEAN -NTAPI -HalInitSystem(IN ULONG BootPhase, - IN PLOADER_PARAMETER_BLOCK LoaderBlock) -{ - KEBUGCHECK(0); - return; -} - - -VOID -NTAPI -HalInitializeProcessor(IN ULONG ProcessorNumber, - IN PLOADER_PARAMETER_BLOCK LoaderBlock) -{ - // - // Nothing to do - // - return; -} - - -BOOLEAN -NTAPI -HalMakeBeep( - ULONG Frequency) -{ - UNIMPLEMENTED; - - return TRUE; -} - - -VOID -NTAPI -HalProcessorIdle(VOID) -{ - UNIMPLEMENTED; -} - - -#define RTC_DATA (PVOID)0xE00E8000 - -BOOLEAN -NTAPI -HalQueryRealTimeClock(IN PTIME_FIELDS Time) -{ - KEBUGCHECK(0); - return TRUE; -} - -ULONG -NTAPI -HalReadDmaCounter( - PADAPTER_OBJECT AdapterObject) -{ - UNIMPLEMENTED; - - return 0; -} - - -VOID -NTAPI -HalReportResourceUsage(VOID) -{ - UNIMPLEMENTED; -} - - -VOID -NTAPI -HalRequestIpi( - KAFFINITY TargetSet) -{ - UNIMPLEMENTED; -} - - -VOID -FASTCALL -HalRequestSoftwareInterrupt(IN KIRQL Request) -{ - KEBUGCHECK(0); - return; -} - -VOID -FASTCALL -HalClearSoftwareInterrupt(IN KIRQL Request) -{ - KEBUGCHECK(0); - return; -} - -VOID -NTAPI -HalReturnToFirmware( - FIRMWARE_REENTRY Action) -{ - UNIMPLEMENTED; -} - - -ULONG -NTAPI -HalSetBusData( - BUS_DATA_TYPE BusDataType, - ULONG BusNumber, - ULONG SlotNumber, - PVOID Buffer, - ULONG Length) -{ - UNIMPLEMENTED; - - return 0; -} - - -ULONG -NTAPI -HalSetBusDataByOffset( - BUS_DATA_TYPE BusDataType, - ULONG BusNumber, - ULONG SlotNumber, - PVOID Buffer, - ULONG Offset, - ULONG Length) -{ - UNIMPLEMENTED; - - return 0; -} - - -ARC_STATUS -NTAPI -HalSetEnvironmentVariable( - PCH Name, - PCH Value) -{ - UNIMPLEMENTED; - - return ESUCCESS; -} - - -BOOLEAN -NTAPI -HalSetRealTimeClock( - PTIME_FIELDS Time) -{ - UNIMPLEMENTED; - - return TRUE; -} - - -ULONG -NTAPI -HalSetTimeIncrement( - ULONG Increment) -{ - UNIMPLEMENTED; - - return Increment; -} - - -BOOLEAN -NTAPI -HalStartNextProcessor(IN PLOADER_PARAMETER_BLOCK LoaderBlock, - IN PKPROCESSOR_STATE ProcessorState) -{ - UNIMPLEMENTED; - - return TRUE; -} - - -ULONG -FASTCALL -HalSystemVectorDispatchEntry( - ULONG Unknown1, - ULONG Unknown2, - ULONG Unknown3) -{ - UNIMPLEMENTED; - - return 0; -} - - -BOOLEAN -NTAPI -HalTranslateBusAddress( - INTERFACE_TYPE InterfaceType, - ULONG BusNumber, - PHYSICAL_ADDRESS BusAddress, - PULONG AddressSpace, - PPHYSICAL_ADDRESS TranslatedAddress) -{ - UNIMPLEMENTED; - - return TRUE; -} - - -VOID -NTAPI -HalpAssignDriveLetters(IN struct _LOADER_PARAMETER_BLOCK *LoaderBlock, - IN PSTRING NtDeviceName, - OUT PUCHAR NtSystemPath, - OUT PSTRING NtSystemPathString) -{ - /* Call the kernel */ - IoAssignDriveLetters(LoaderBlock, - NtDeviceName, - NtSystemPath, - NtSystemPathString); -} - -NTSTATUS -NTAPI -HalpReadPartitionTable(IN PDEVICE_OBJECT DeviceObject, - IN ULONG SectorSize, - IN BOOLEAN ReturnRecognizedPartitions, - IN OUT PDRIVE_LAYOUT_INFORMATION *PartitionBuffer) -{ - /* Call the kernel */ - return IoReadPartitionTable(DeviceObject, - SectorSize, - ReturnRecognizedPartitions, - PartitionBuffer); -} - -NTSTATUS -NTAPI -HalpWritePartitionTable(IN PDEVICE_OBJECT DeviceObject, - IN ULONG SectorSize, - IN ULONG SectorsPerTrack, - IN ULONG NumberOfHeads, - IN PDRIVE_LAYOUT_INFORMATION PartitionBuffer) -{ - /* Call the kernel */ - return IoWritePartitionTable(DeviceObject, - SectorSize, - SectorsPerTrack, - NumberOfHeads, - PartitionBuffer); -} - -NTSTATUS -NTAPI -HalpSetPartitionInformation(IN PDEVICE_OBJECT DeviceObject, - IN ULONG SectorSize, - IN ULONG PartitionNumber, - IN ULONG PartitionType) -{ - /* Call the kernel */ - return IoSetPartitionInformation(DeviceObject, - SectorSize, - PartitionNumber, - PartitionType); -} - - -BOOLEAN -NTAPI -IoFlushAdapterBuffers( - PADAPTER_OBJECT AdapterObject, - PMDL Mdl, - PVOID MapRegisterBase, - PVOID CurrentVa, - ULONG Length, - BOOLEAN WriteToDevice) -{ - UNIMPLEMENTED; - - return TRUE; -} - - -VOID -NTAPI -IoFreeAdapterChannel( - PADAPTER_OBJECT AdapterObject) -{ - UNIMPLEMENTED; -} - - -VOID -NTAPI -IoFreeMapRegisters( - PADAPTER_OBJECT AdapterObject, - PVOID MapRegisterBase, - ULONG NumberOfMapRegisters) -{ - UNIMPLEMENTED; -} - - -PHYSICAL_ADDRESS -NTAPI -IoMapTransfer( - PADAPTER_OBJECT AdapterObject, - PMDL Mdl, - PVOID MapRegisterBase, - PVOID CurrentVa, - PULONG Length, - BOOLEAN WriteToDevice) -{ - PHYSICAL_ADDRESS Address; - - UNIMPLEMENTED; - - Address.QuadPart = 0; - - return Address; -} - -VOID -NTAPI -KeFlushWriteBuffer(VOID) -{ - UNIMPLEMENTED; -} - -LARGE_INTEGER -NTAPI -KeQueryPerformanceCounter( - PLARGE_INTEGER PerformanceFreq) -{ - LARGE_INTEGER Value; - - UNIMPLEMENTED; - - Value.QuadPart = 0; - - return Value; -} - -VOID -NTAPI -KeStallExecutionProcessor(IN ULONG Microseconds) -{ - UNIMPLEMENTED; - return; -} - -BOOLEAN HalpProcessorIdentified; -BOOLEAN HalpTestCleanSupported; - -VOID -HalpIdentifyProcessor(VOID) -{ - UNIMPLEMENTED; - return; -} - -VOID -HalSweepDcache(VOID) -{ - UNIMPLEMENTED; - return; -} - -VOID -HalSweepIcache(VOID) -{ - UNIMPLEMENTED; - return; -} - -/* EOF */ diff --git a/reactos/hal/halamd64/generic/irq.S b/reactos/hal/halamd64/generic/irq.S index dc1f6d44b5b..060b5b65940 100644 --- a/reactos/hal/halamd64/generic/irq.S +++ b/reactos/hal/halamd64/generic/irq.S @@ -34,13 +34,44 @@ .globl _HalpInitPICs .func _HalpInitPICs _HalpInitPICs: -UNIMPLEMENTED "HalpInitPICs" - + UNIMPLEMENTED "HalpInitPICs" .endfunc +.global _HalEnableInterrupt +.func _HalEnableInterrupt +_HalEnableInterrupt: + UNIMPLEMENTED "HalEnableInterrupt" +.endfunc + +.global _HalDisableInterrupt +.func _HalDisableInterrupt +_HalDisableInterrupt: + UNIMPLEMENTED "HalDisableInterrupt" +.endfunc + +.global _HalRequestSoftwareInterrupt +.func _HalRequestSoftwareInterrupt +_HalRequestSoftwareInterrupt: + UNIMPLEMENTED "HalRequestSoftwareInterrupt" +.endfunc + +.global _HalSendSoftwareInterrupt +.func _HalSendSoftwareInterrupt +_HalSendSoftwareInterrupt: + UNIMPLEMENTED "HalSendSoftwareInterrupt" +.endfunc + +.global _HalEndSystemInterrupt +.func _HalEndSystemInterrupt +_HalEndSystemInterrupt: + UNIMPLEMENTED "HalEndSystemInterrupt" +.endfunc + + .globl _HalClearSoftwareInterrupt .func _HalClearSoftwareInterrupt _HalClearSoftwareInterrupt: + UNIMPLEMENTED "HalClearSoftwareInterrupt" /* Get IRR mask */ mov eax, 1 @@ -52,42 +83,9 @@ _HalClearSoftwareInterrupt: ret .endfunc -.globl _HalRequestSoftwareInterrupt -.func _HalRequestSoftwareInterrupt -_HalRequestSoftwareInterrupt: -UNIMPLEMENTED "HalRequestSoftwareInterrupt" -.endfunc - .globl _HalBeginSystemInterrupt .func _HalBeginSystemInterrupt _HalBeginSystemInterrupt: -UNIMPLEMENTED "HalBeginSystemInterrupt" -.endfunc - -.globl _HalpApcInterrupt -.func _HalpApcInterrupt -//TRAP_FIXUPS hapc_a, hapc_t, DoFixupV86, DoFixupAbios -_HalpApcInterrupt: -UNIMPLEMENTED "HalpApcInterrupt" -.endfunc - -.globl _HalpApcInterrupt2ndEntry -.func _HalpApcInterrupt2ndEntry -_HalpApcInterrupt2ndEntry: -UNIMPLEMENTED "HalpApcInterrupt2ndEntry" -.endfunc - -.globl _HalpDispatchInterrupt -.func _HalpDispatchInterrupt -//TRAP_FIXUPS hdpc_a, hdpc_t, DoFixupV86, DoFixupAbios -_HalpDispatchInterrupt: -UNIMPLEMENTED "HalpDispatchInterrupt" -.endfunc - - -.globl _HalpDispatchInterrupt2ndEntry -.func _HalpDispatchInterrupt2ndEntry -_HalpDispatchInterrupt2ndEntry: -UNIMPLEMENTED "HalpDispatchInterrupt2ndEntry" + UNIMPLEMENTED "HalBeginSystemInterrupt" .endfunc diff --git a/reactos/hal/halamd64/generic/mps.S b/reactos/hal/halamd64/generic/mps.S new file mode 100644 index 00000000000..219d651498c --- /dev/null +++ b/reactos/hal/halamd64/generic/mps.S @@ -0,0 +1,95 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS kernel + * FILE: ntoskrnl/hal/amd64/generic/mps.S + * PURPOSE: Intel MultiProcessor specification support + * PROGRAMMER: Casper S. Hornstrup (chorns@users.sourceforge.net) + */ + +/* INCLUDES ******************************************************************/ + +#include + +/* FUNCTIONS *****************************************************************/ + +#define BEFORE \ + cld; \ + pushq %rax; \ + pushq %rbx; \ + pushq %rcx; \ + pushq %rdx; \ + pushq %rsi; \ + pushq %rdi; \ + pushq %fs; \ + pushq %gs; \ + +#define AFTER \ + popq %gs; \ + popq %fs; \ + popq %rdi; \ + popq %rsi; \ + popq %rdx; \ + popq %rcx; \ + popq %rbx; \ + popq %rax; \ + +#ifdef CONFIG_SMP +.global _MpsIpiInterrupt +_MpsIpiInterrupt: + /* Save registers */ + BEFORE + + /* Call the C handler */ + call _MpsIpiHandler + + /* Return to the caller */ + AFTER + iret +#endif + +.globl _MpsErrorInterrupt +_MpsErrorInterrupt: + /* Save registers */ + BEFORE + + /* Call the C handler */ + call _MpsErrorHandler + + /* Return to the caller */ + AFTER + iret + + +.globl _MpsSpuriousInterrupt +_MpsSpuriousInterrupt: + /* Save registers */ + BEFORE + + /* Call the C handler */ + call _MpsSpuriousHandler + + /* Return to the caller */ + AFTER + iret + +.global _MpsTimerInterrupt +_MpsTimerInterrupt: + /* Save registers */ + BEFORE + + movl $0xef,%ebx + movl $0xceafbeef,%eax + pushq %rax + pushq %rsp + pushq %rbx + call _MpsTimerHandler + popq %rax + popq %rax + popq %rax + + /* Return to the caller */ + AFTER + iret + + +/* EOF */ diff --git a/reactos/hal/halamd64/up/halup.rbuild b/reactos/hal/halamd64/up/halup.rbuild index fdbc06fabd8..08f72745185 100644 --- a/reactos/hal/halamd64/up/halup.rbuild +++ b/reactos/hal/halamd64/up/halup.rbuild @@ -8,7 +8,6 @@ hal_generic_amd64 - hal_generic_pc hal_generic ntoskrnl halinit_up.c diff --git a/reactos/hal/halx86/hal_generic_amd64.rbuild b/reactos/hal/halx86/hal_generic_amd64.rbuild index c3d5e5b121d..c343b64e268 100644 --- a/reactos/hal/halx86/hal_generic_amd64.rbuild +++ b/reactos/hal/halx86/hal_generic_amd64.rbuild @@ -13,13 +13,14 @@ dma.c drive.c display.c + pci.c profil.c reboot.c sysinfo.c timer.c - + apic.c hal.h