From cc500cbf5c35f21e3f3820be910f9d9ee561a95b Mon Sep 17 00:00:00 2001 From: Sir Richard Date: Mon, 7 Jun 2010 20:10:53 +0000 Subject: [PATCH] [HAL]: First use of bus handler support: HalGetBusDataByOffset now uses bus handlers. Please report any problems. svn path=/trunk/; revision=47670 --- .../hal/halx86/generic/legacy/bus/bushndlr.c | 2 +- reactos/hal/halx86/generic/legacy/bussupp.c | 54 +++++++------------ reactos/hal/halx86/include/bus.h | 7 +++ 3 files changed, 26 insertions(+), 37 deletions(-) diff --git a/reactos/hal/halx86/generic/legacy/bus/bushndlr.c b/reactos/hal/halx86/generic/legacy/bus/bushndlr.c index 7cb3a205cea..a3a23903055 100644 --- a/reactos/hal/halx86/generic/legacy/bus/bushndlr.c +++ b/reactos/hal/halx86/generic/legacy/bus/bushndlr.c @@ -262,7 +262,7 @@ HaliRegisterBusHandler(IN INTERFACE_TYPE InterfaceType, ConfigBusNumberArray = HalpAllocateArray(BusNumber); /* Only proceed if all allocations succeeded */ - if (InterfaceArray && InterfaceBusNumberArray && ConfigArray && ConfigBusNumberArray) + if ((InterfaceArray) && (InterfaceBusNumberArray) && (ConfigArray) && (ConfigBusNumberArray)) { /* Find the parent handler if any */ ParentHandler = HaliReferenceHandlerForBus(ParentBusType, ParentBusNumber); diff --git a/reactos/hal/halx86/generic/legacy/bussupp.c b/reactos/hal/halx86/generic/legacy/bussupp.c index 9350a36029e..0f52c973b5b 100644 --- a/reactos/hal/halx86/generic/legacy/bussupp.c +++ b/reactos/hal/halx86/generic/legacy/bussupp.c @@ -82,7 +82,6 @@ HalpRegisterInternalBusHandlers(VOID) InterfaceTypeUndefined, 0, 0); - DPRINT1("Registering Internal Bus: %p\n", Bus); if (Bus) { /* Set it up */ @@ -97,7 +96,6 @@ HalpRegisterInternalBusHandlers(VOID) InterfaceTypeUndefined, 0, 0); - DPRINT1("Registering CMOS Bus: %p\n", Bus); if (Bus) { /* Set it up */ @@ -112,7 +110,6 @@ HalpRegisterInternalBusHandlers(VOID) InterfaceTypeUndefined, 0, 0); - DPRINT1("Registering CMOS Bus: %p\n", Bus); if (Bus) { /* Set it up */ @@ -127,7 +124,6 @@ HalpRegisterInternalBusHandlers(VOID) Internal, 0, 0); - DPRINT1("Registering ISA Bus: %p\n", Bus); if (Bus) { /* Set it up */ @@ -1286,38 +1282,24 @@ HalGetBusDataByOffset(IN BUS_DATA_TYPE BusDataType, IN ULONG Offset, IN ULONG Length) { - BUS_HANDLER BusHandler; - - /* Look as the bus type */ - if (BusDataType == Cmos) - { - /* Call CMOS Function */ - return HalpGetCmosData(0, SlotNumber, Buffer, Length); - } - else if (BusDataType == EisaConfiguration) - { - /* FIXME: TODO */ - ASSERT(FALSE); - } - else if ((BusDataType == PCIConfiguration) && - (HalpPCIConfigInitialized) && - ((BusNumber >= HalpMinPciBus) && (BusNumber <= HalpMaxPciBus))) - { - /* Setup fake PCI Bus handler */ - RtlCopyMemory(&BusHandler, &HalpFakePciBusHandler, sizeof(BUS_HANDLER)); - BusHandler.BusNumber = BusNumber; - - /* Call PCI function */ - return HalpGetPCIData(&BusHandler, - &BusHandler, - *(PPCI_SLOT_NUMBER)&SlotNumber, - Buffer, - Offset, - Length); - } - - /* Invalid bus */ - return 0; + PBUS_HANDLER Handler; + ULONG Status; + + /* Find the handler */ + Handler = HaliReferenceHandlerForConfigSpace(BusDataType, BusNumber); + if (!Handler) return 0; + + /* Do the assignment */ + Status = Handler->GetBusData(Handler, + Handler, + SlotNumber, + Buffer, + Offset, + Length); + + /* Dereference the handler and return */ + HalDereferenceBusHandler(Handler); + return Status; } /* diff --git a/reactos/hal/halx86/include/bus.h b/reactos/hal/halx86/include/bus.h index 38cf406bf13..b0ffded5425 100644 --- a/reactos/hal/halx86/include/bus.h +++ b/reactos/hal/halx86/include/bus.h @@ -449,6 +449,13 @@ HalpInitBusHandler( VOID ); +PBUS_HANDLER +FASTCALL +HaliReferenceHandlerForConfigSpace( + IN BUS_DATA_TYPE ConfigType, + IN ULONG BusNumber +); + ULONG NTAPI HalpNoBusData( -- 2.17.1