From e90168e57ec0f4fc7c469720d824dbb79ead5719 Mon Sep 17 00:00:00 2001 From: Stefan Ginsberg Date: Fri, 30 Oct 2009 22:07:26 +0000 Subject: [PATCH] - Restructure HAL bus routines a bit. - Fix some incorrect HAL types and add some that were missing. svn path=/trunk/; revision=43855 --- reactos/hal/halx86/generic/bus/bushndlr.c | 7 ++ .../halx86/generic/{bus.c => bus/halbus.c} | 2 +- reactos/hal/halx86/generic/bus/isabus.c | 7 ++ .../halx86/generic/{pci.c => bus/pcibus.c} | 15 ++-- reactos/hal/halx86/generic/bus/sysbus.c | 7 ++ reactos/hal/halx86/hal_generic.rbuild | 7 +- reactos/hal/halx86/hal_generic_amd64.rbuild | 7 +- reactos/hal/halx86/hal_generic_pc.rbuild | 4 +- reactos/hal/halx86/halxbox.rbuild | 4 +- reactos/include/ndk/haltypes.h | 83 ++++++++++++++----- 10 files changed, 111 insertions(+), 32 deletions(-) create mode 100644 reactos/hal/halx86/generic/bus/bushndlr.c rename reactos/hal/halx86/generic/{bus.c => bus/halbus.c} (99%) create mode 100644 reactos/hal/halx86/generic/bus/isabus.c rename reactos/hal/halx86/generic/{pci.c => bus/pcibus.c} (98%) create mode 100644 reactos/hal/halx86/generic/bus/sysbus.c diff --git a/reactos/hal/halx86/generic/bus/bushndlr.c b/reactos/hal/halx86/generic/bus/bushndlr.c new file mode 100644 index 00000000000..1df180e9052 --- /dev/null +++ b/reactos/hal/halx86/generic/bus/bushndlr.c @@ -0,0 +1,7 @@ +/* + * PROJECT: ReactOS HAL + * LICENSE: GPL - See COPYING in the top level directory + * FILE: hal/halx86/generic/bus/bushndlr.c + * PURPOSE: + * PROGRAMMERS: Stefan Ginsberg (stefan.ginsberg@reactos.org) + */ diff --git a/reactos/hal/halx86/generic/bus.c b/reactos/hal/halx86/generic/bus/halbus.c similarity index 99% rename from reactos/hal/halx86/generic/bus.c rename to reactos/hal/halx86/generic/bus/halbus.c index 9b708a296a5..392c69f7c1f 100644 --- a/reactos/hal/halx86/generic/bus.c +++ b/reactos/hal/halx86/generic/bus/halbus.c @@ -1,7 +1,7 @@ /* * PROJECT: ReactOS HAL * LICENSE: GPL - See COPYING in the top level directory - * FILE: hal/halx86/generic/bus.c + * FILE: hal/halx86/generic/bus/halbus.c * PURPOSE: Bus Support Routines * PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org) */ diff --git a/reactos/hal/halx86/generic/bus/isabus.c b/reactos/hal/halx86/generic/bus/isabus.c new file mode 100644 index 00000000000..7e9631f6536 --- /dev/null +++ b/reactos/hal/halx86/generic/bus/isabus.c @@ -0,0 +1,7 @@ +/* + * PROJECT: ReactOS HAL + * LICENSE: GPL - See COPYING in the top level directory + * FILE: hal/halx86/generic/bus/isabus.c + * PURPOSE: + * PROGRAMMERS: Stefan Ginsberg (stefan.ginsberg@reactos.org) + */ diff --git a/reactos/hal/halx86/generic/pci.c b/reactos/hal/halx86/generic/bus/pcibus.c similarity index 98% rename from reactos/hal/halx86/generic/pci.c rename to reactos/hal/halx86/generic/bus/pcibus.c index 413b8735f46..387f83784eb 100644 --- a/reactos/hal/halx86/generic/pci.c +++ b/reactos/hal/halx86/generic/bus/pcibus.c @@ -1,7 +1,7 @@ /* * PROJECT: ReactOS HAL * LICENSE: GPL - See COPYING in the top level directory - * FILE: hal/halx86/generic/pci.c + * FILE: hal/halx86/generic/bus/pcibus.c * PURPOSE: PCI Bus Support (Configuration Space, Resource Allocation) * PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org) */ @@ -98,9 +98,10 @@ BUS_HANDLER HalpFakePciBusHandler = NULL, &HalpFakePciBusData, 0, + NULL, {0, 0, 0, 0}, - HalpGetPCIData, - HalpSetPCIData, + (PGETSETBUSDATA)HalpGetPCIData, + (PGETSETBUSDATA)HalpSetPCIData, NULL, HalpAssignPCISlotResources, NULL, @@ -338,7 +339,7 @@ NTAPI HalpGetPCIData(IN PBUS_HANDLER BusHandler, IN PBUS_HANDLER RootHandler, IN PCI_SLOT_NUMBER Slot, - IN PUCHAR Buffer, + IN PVOID Buffer, IN ULONG Offset, IN ULONG Length) { @@ -404,7 +405,7 @@ HalpGetPCIData(IN PBUS_HANDLER BusHandler, /* Update buffer and offset, decrement total length */ Offset += Len; - Buffer += Len; + Buffer = (PVOID)((ULONG_PTR)Buffer + Len); Length -= Len; } @@ -429,7 +430,7 @@ NTAPI HalpSetPCIData(IN PBUS_HANDLER BusHandler, IN PBUS_HANDLER RootHandler, IN PCI_SLOT_NUMBER Slot, - IN PUCHAR Buffer, + IN PVOID Buffer, IN ULONG Offset, IN ULONG Length) { @@ -483,7 +484,7 @@ HalpSetPCIData(IN PBUS_HANDLER BusHandler, /* Update buffer and offset, decrement total length */ Offset += Len; - Buffer += Len; + Buffer = (PVOID)((ULONG_PTR)Buffer + Len); Length -= Len; } diff --git a/reactos/hal/halx86/generic/bus/sysbus.c b/reactos/hal/halx86/generic/bus/sysbus.c new file mode 100644 index 00000000000..d011cb568c5 --- /dev/null +++ b/reactos/hal/halx86/generic/bus/sysbus.c @@ -0,0 +1,7 @@ +/* + * PROJECT: ReactOS HAL + * LICENSE: GPL - See COPYING in the top level directory + * FILE: hal/halx86/generic/bus/sysbus.c + * PURPOSE: + * PROGRAMMERS: Stefan Ginsberg (stefan.ginsberg@reactos.org) + */ diff --git a/reactos/hal/halx86/hal_generic.rbuild b/reactos/hal/halx86/hal_generic.rbuild index ce262427734..30b2602daa1 100644 --- a/reactos/hal/halx86/hal_generic.rbuild +++ b/reactos/hal/halx86/hal_generic.rbuild @@ -6,9 +6,14 @@ include + + bushndlr.c + isabus.c + halbus.c + sysbus.c + beep.c bios.c - bus.c cmos.c dma.c drive.c diff --git a/reactos/hal/halx86/hal_generic_amd64.rbuild b/reactos/hal/halx86/hal_generic_amd64.rbuild index 1eb9ffe526b..ac8e7c878b9 100644 --- a/reactos/hal/halx86/hal_generic_amd64.rbuild +++ b/reactos/hal/halx86/hal_generic_amd64.rbuild @@ -6,8 +6,13 @@ include + + bushndlr.c + isabus.c + halbus.c + sysbus.c + beep.c - bus.c cmos.c dma.c drive.c diff --git a/reactos/hal/halx86/hal_generic_pc.rbuild b/reactos/hal/halx86/hal_generic_pc.rbuild index 576aa285bb8..5aac0c95c71 100644 --- a/reactos/hal/halx86/hal_generic_pc.rbuild +++ b/reactos/hal/halx86/hal_generic_pc.rbuild @@ -6,7 +6,9 @@ include - pci.c + + pcibus.c + diff --git a/reactos/hal/halx86/halxbox.rbuild b/reactos/hal/halx86/halxbox.rbuild index c842c318445..2b5f0dee2a8 100644 --- a/reactos/hal/halx86/halxbox.rbuild +++ b/reactos/hal/halx86/halxbox.rbuild @@ -11,7 +11,9 @@ hal_generic_up ntoskrnl - pci.c + + pcibus.c + halinit_xbox.c diff --git a/reactos/include/ndk/haltypes.h b/reactos/include/ndk/haltypes.h index b1ba9d329c8..4687378a263 100644 --- a/reactos/include/ndk/haltypes.h +++ b/reactos/include/ndk/haltypes.h @@ -44,7 +44,7 @@ typedef enum _FIRMWARE_REENTRY // typedef PBUS_HANDLER -(NTAPI *pHalHandlerForConfigSpace)( +(FASTCALL *pHalHandlerForConfigSpace)( IN BUS_DATA_TYPE ConfigSpace, IN ULONG BusNumber ); @@ -101,15 +101,15 @@ BOOLEAN // typedef NTSTATUS -(NTAPI *pAdjustResourceList)( +(NTAPI *PADJUSTRESOURCELIST)( IN PBUS_HANDLER BusHandler, - IN ULONG BusNumber, - IN OUT PCM_RESOURCE_LIST Resources + IN PBUS_HANDLER RootHandler, + IN OUT PIO_RESOURCE_REQUIREMENTS_LIST *Resources ); typedef NTSTATUS -(NTAPI *pAssignSlotResources)( +(NTAPI *PASSIGNSLOTRESOURCES)( IN PBUS_HANDLER BusHandler, IN PBUS_HANDLER RootHandler, IN PUNICODE_STRING RegistryPath, @@ -122,20 +122,20 @@ NTSTATUS typedef ULONG -(NTAPI *pGetSetBusData)( +(NTAPI *PGETSETBUSDATA)( IN PBUS_HANDLER BusHandler, IN PBUS_HANDLER RootHandler, - IN PCI_SLOT_NUMBER SlotNumber, - OUT PUCHAR Buffer, + IN ULONG SlotNumber, + OUT PVOID Buffer, IN ULONG Offset, IN ULONG Length ); typedef ULONG -(NTAPI *pGetInterruptVector)( +(NTAPI *PGETINTERRUPTVECTOR)( IN PBUS_HANDLER BusHandler, - IN ULONG BusNumber, + IN PBUS_HANDLER RootHandler, IN ULONG BusInterruptLevel, IN ULONG BusInterruptVector, OUT PKIRQL Irql, @@ -143,10 +143,10 @@ ULONG ); typedef -ULONG -(NTAPI *pTranslateBusAddress)( +BOOLEAN +(NTAPI *PTRANSLATEBUSADDRESS)( IN PBUS_HANDLER BusHandler, - IN ULONG BusNumber, + IN PBUS_HANDLER RootHandler, IN PHYSICAL_ADDRESS BusAddress, IN OUT PULONG AddressSpace, OUT PPHYSICAL_ADDRESS TranslatedAddress @@ -186,9 +186,38 @@ typedef struct _HAL_PRIVATE_DISPATCH #endif } HAL_PRIVATE_DISPATCH, *PHAL_PRIVATE_DISPATCH; +// +// HAL Supported Range +// +#define HAL_SUPPORTED_RANGE_VERSION 1 +typedef struct _SUPPORTED_RANGE +{ + struct _SUPPORTED_RANGE *Next; + ULONG SystemAddressSpace; + LONGLONG SystemBase; + LONGLONG Base; + LONGLONG Limit; +} SUPPORTED_RANGE, *PSUPPORTED_RANGE; + +typedef struct _SUPPORTED_RANGES +{ + USHORT Version; + BOOLEAN Sorted; + UCHAR Reserved; + ULONG NoIO; + SUPPORTED_RANGE IO; + ULONG NoMemory; + SUPPORTED_RANGE Memory; + ULONG NoPrefetchMemory; + SUPPORTED_RANGE PrefetchMemory; + ULONG NoDma; + SUPPORTED_RANGE Dma; +} SUPPORTED_RANGES, *PSUPPORTED_RANGES; + // // HAL Bus Handler // +#define HAL_BUS_HANDLER_VERSION 1 typedef struct _BUS_HANDLER { ULONG Version; @@ -199,16 +228,30 @@ typedef struct _BUS_HANDLER struct _BUS_HANDLER *ParentHandler; PVOID BusData; ULONG DeviceControlExtensionSize; - //PSUPPORTED_RANGES BusAddresses; + PSUPPORTED_RANGES BusAddresses; ULONG Reserved[4]; - pGetSetBusData GetBusData; - pGetSetBusData SetBusData; - pAdjustResourceList AdjustResourceList; - pAssignSlotResources AssignSlotResources; - pGetInterruptVector GetInterruptVector; - pTranslateBusAddress TranslateBusAddress; + PGETSETBUSDATA GetBusData; + PGETSETBUSDATA SetBusData; + PADJUSTRESOURCELIST AdjustResourceList; + PASSIGNSLOTRESOURCES AssignSlotResources; + PGETINTERRUPTVECTOR GetInterruptVector; + PTRANSLATEBUSADDRESS TranslateBusAddress; + PVOID Spare1; + PVOID Spare2; + PVOID Spare3; + PVOID Spare4; + PVOID Spare5; + PVOID Spare6; + PVOID Spare7; + PVOID Spare8; } BUS_HANDLER; +// +// HAL Chip Hacks +// +#define HAL_PCI_CHIP_HACK_DISABLE_HIBERNATE 0x02 +#define HAL_PCI_CHIP_HACK_USB_SMI_DISABLE 0x08 + // // Kernel Exports //