Author: sir_richard
Date: Mon Jun 7 23:36:31 2010
New Revision: 47684
URL: http://svn.reactos.org/svn/reactos?rev=47684&view=rev
Log:
[HAL]: Use Bus Handler support for HalFindBusAddressTranslation. Implement HalpContextToBusHandler to support this. Seems to work fine with bootvid (only user).
All the HAL's bus functions now use Bus Handlers on Legacy systems. There are still big issues with PCI cards.
eVb: PCI-x should work now.
More PCI-related HAL patches may follow later.
Modified:
trunk/reactos/hal/halx86/generic/legacy/bus/bushndlr.c
trunk/reactos/hal/halx86/generic/legacy/bussupp.c
trunk/reactos/hal/halx86/include/bus.h
Modified: trunk/reactos/hal/halx86/generic/legacy/bus/bushndlr.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/hal/halx86/generic/legacy/…
==============================================================================
--- trunk/reactos/hal/halx86/generic/legacy/bus/bushndlr.c [iso-8859-1] (original)
+++ trunk/reactos/hal/halx86/generic/legacy/bus/bushndlr.c [iso-8859-1] Mon Jun 7 23:36:31 2010
@@ -199,6 +199,41 @@
{
/* Lookup the configuration in the configuration table and add a reference */
return HalpLookupHandler(HalpConfigTable, ConfigType, BusNumber, TRUE);
+}
+
+PBUS_HANDLER
+NTAPI
+HalpContextToBusHandler(IN ULONG_PTR ContextValue)
+{
+ PLIST_ENTRY NextEntry;
+ PHAL_BUS_HANDLER BusHandler, ThisHandler;
+
+ /* Start lookup */
+ NextEntry = HalpAllBusHandlers.Flink;
+ ThisHandler = CONTAINING_RECORD(NextEntry, HAL_BUS_HANDLER, AllHandlers);
+ if (ContextValue)
+ {
+ /* If the list is empty, quit */
+ if (IsListEmpty(&HalpAllBusHandlers)) return NULL;
+
+ /* Otherwise, scan the list */
+ BusHandler = CONTAINING_RECORD(ContextValue, HAL_BUS_HANDLER, Handler);
+ do
+ {
+ /* Check if we've reached the right one */
+ ThisHandler = CONTAINING_RECORD(NextEntry, HAL_BUS_HANDLER, AllHandlers);
+ if (ThisHandler == BusHandler) break;
+
+ /* Try the next one */
+ NextEntry = NextEntry->Flink;
+ } while (NextEntry != &HalpAllBusHandlers);
+ }
+
+ /* If we looped back to the end, we didn't find anything */
+ if (NextEntry == &HalpAllBusHandlers) return NULL;
+
+ /* Otherwise return the handler */
+ return &ThisHandler->Handler;
}
#ifndef _MINIHAL_
@@ -408,13 +443,7 @@
#endif
HalPciAssignSlotResources = HalpAssignSlotResources;
HalPciTranslateBusAddress = HaliTranslateBusAddress; /* PCI Driver can override */
- /* FIXME: Fix later */
-#if 0
if (!HalFindBusAddressTranslation) HalFindBusAddressTranslation = HaliFindBusAddressTranslation;
-#else
- /* These should be written by the PCI driver later, but we give defaults */
- HalFindBusAddressTranslation = HalpFindBusAddressTranslation;
-#endif
}
/* EOF */
Modified: trunk/reactos/hal/halx86/generic/legacy/bussupp.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/hal/halx86/generic/legacy/…
==============================================================================
--- trunk/reactos/hal/halx86/generic/legacy/bussupp.c [iso-8859-1] (original)
+++ trunk/reactos/hal/halx86/generic/legacy/bussupp.c [iso-8859-1] Mon Jun 7 23:36:31 2010
@@ -1152,50 +1152,75 @@
BOOLEAN
NTAPI
-HalpTranslateBusAddress(IN INTERFACE_TYPE InterfaceType,
- IN ULONG BusNumber,
- IN PHYSICAL_ADDRESS BusAddress,
- IN OUT PULONG AddressSpace,
- OUT PPHYSICAL_ADDRESS TranslatedAddress)
-{
- /* Translation is easy */
- TranslatedAddress->QuadPart = BusAddress.QuadPart;
- return TRUE;
-}
-
-ULONG
-NTAPI
-HalpGetSystemInterruptVector_Acpi(IN ULONG BusNumber,
- IN ULONG BusInterruptLevel,
- IN ULONG BusInterruptVector,
- OUT PKIRQL Irql,
- OUT PKAFFINITY Affinity)
-{
- ULONG Vector = IRQ2VECTOR(BusInterruptLevel);
- *Irql = (KIRQL)VECTOR2IRQL(Vector);
- *Affinity = 0xFFFFFFFF;
- return Vector;
-}
-
-BOOLEAN
-NTAPI
-HalpFindBusAddressTranslation(IN PHYSICAL_ADDRESS BusAddress,
+HaliFindBusAddressTranslation(IN PHYSICAL_ADDRESS BusAddress,
IN OUT PULONG AddressSpace,
OUT PPHYSICAL_ADDRESS TranslatedAddress,
IN OUT PULONG_PTR Context,
IN BOOLEAN NextBus)
{
+ PHAL_BUS_HANDLER BusHandler;
+ PBUS_HANDLER Handler;
+ PLIST_ENTRY NextEntry;
+ ULONG ContextValue;
+
/* Make sure we have a context */
if (!Context) return FALSE;
-
- /* If we have data in the context, then this shouldn't be a new lookup */
- if ((*Context) && (NextBus == TRUE)) return FALSE;
-
- /* Return bus data */
- TranslatedAddress->QuadPart = BusAddress.QuadPart;
-
- /* Set context value and return success */
- *Context = 1;
+ ASSERT((*Context) || (NextBus == TRUE));
+
+ /* Read the context */
+ ContextValue = *Context;
+
+ /* Find the bus handler */
+ Handler = HalpContextToBusHandler(ContextValue);
+ if (!Handler) return FALSE;
+
+ /* Check if this is an ongoing lookup */
+ if (NextBus)
+ {
+ /* Get the HAL bus handler */
+ BusHandler = CONTAINING_RECORD(Handler, HAL_BUS_HANDLER, Handler);
+ NextEntry = &BusHandler->AllHandlers;
+
+ /* Get the next one if we were already with one */
+ if (ContextValue) NextEntry = NextEntry->Flink;
+
+ /* Start scanning */
+ while (TRUE)
+ {
+ /* Check if this is the last one */
+ if (NextEntry == &HalpAllBusHandlers)
+ {
+ /* Quit */
+ *Context = 1;
+ return FALSE;
+ }
+
+ /* Call this translator */
+ BusHandler = CONTAINING_RECORD(NextEntry, HAL_BUS_HANDLER, AllHandlers);
+ if (HalTranslateBusAddress(BusHandler->Handler.InterfaceType,
+ BusHandler->Handler.BusNumber,
+ BusAddress,
+ AddressSpace,
+ TranslatedAddress)) break;
+
+ /* Try the next one */
+ NextEntry = NextEntry->Flink;
+ }
+
+ /* If we made it, we're done */
+ *Context = (ULONG_PTR)Handler;
+ return TRUE;
+ }
+
+ /* Try the first one through */
+ if (!HalTranslateBusAddress(Handler->InterfaceType,
+ Handler->BusNumber,
+ BusAddress,
+ AddressSpace,
+ TranslatedAddress)) return FALSE;
+
+ /* Remember for next time */
+ *Context = (ULONG_PTR)Handler;
return TRUE;
}
Modified: trunk/reactos/hal/halx86/include/bus.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/hal/halx86/include/bus.h?r…
==============================================================================
--- trunk/reactos/hal/halx86/include/bus.h [iso-8859-1] (original)
+++ trunk/reactos/hal/halx86/include/bus.h [iso-8859-1] Mon Jun 7 23:36:31 2010
@@ -376,16 +376,6 @@
OUT PPHYSICAL_ADDRESS TranslatedAddress
);
-BOOLEAN
-NTAPI
-HaliTranslateBusAddress(
- IN INTERFACE_TYPE InterfaceType,
- IN ULONG BusNumber,
- IN PHYSICAL_ADDRESS BusAddress,
- IN OUT PULONG AddressSpace,
- OUT PPHYSICAL_ADDRESS TranslatedAddress
-);
-
NTSTATUS
NTAPI
HalpAssignSlotResources(
@@ -417,6 +407,26 @@
/* LEGACY */
+BOOLEAN
+NTAPI
+HaliTranslateBusAddress(
+ IN INTERFACE_TYPE InterfaceType,
+ IN ULONG BusNumber,
+ IN PHYSICAL_ADDRESS BusAddress,
+ IN OUT PULONG AddressSpace,
+ OUT PPHYSICAL_ADDRESS TranslatedAddress
+);
+
+BOOLEAN
+NTAPI
+HaliFindBusAddressTranslation(
+ IN PHYSICAL_ADDRESS BusAddress,
+ IN OUT PULONG AddressSpace,
+ OUT PPHYSICAL_ADDRESS TranslatedAddress,
+ IN OUT PULONG_PTR Context,
+ IN BOOLEAN NextBus
+);
+
NTSTATUS
NTAPI
HalpAdjustPCIResourceList(IN PBUS_HANDLER BusHandler,
@@ -460,6 +470,12 @@
);
PBUS_HANDLER
+NTAPI
+HalpContextToBusHandler(
+ IN ULONG_PTR ContextValue
+);
+
+PBUS_HANDLER
FASTCALL
HaliReferenceHandlerForConfigSpace(
IN BUS_DATA_TYPE ConfigType,
@@ -534,5 +550,6 @@
extern BOOLEAN HalpPCIConfigInitialized;
extern BUS_HANDLER HalpFakePciBusHandler;
extern ULONG HalpMinPciBus, HalpMaxPciBus;
+extern LIST_ENTRY HalpAllBusHandlers;
/* EOF */
Author: akhaldi
Date: Mon Jun 7 23:19:24 2010
New Revision: 47682
URL: http://svn.reactos.org/svn/reactos?rev=47682&view=rev
Log:
[PSDK]
- Update/improve some usb related headers' headers.
Modified:
branches/header-work/include/psdk/usb.h
branches/header-work/include/psdk/usb100.h
branches/header-work/include/psdk/usb200.h
branches/header-work/include/psdk/usbcamdi.h
branches/header-work/include/psdk/usbdi.h
branches/header-work/include/psdk/usbioctl.h
branches/header-work/include/psdk/usbiodef.h
branches/header-work/include/psdk/usbrpmif.h
branches/header-work/include/psdk/usbuser.h
Modified: branches/header-work/include/psdk/usb.h
URL: http://svn.reactos.org/svn/reactos/branches/header-work/include/psdk/usb.h?…
==============================================================================
--- branches/header-work/include/psdk/usb.h [iso-8859-1] (original)
+++ branches/header-work/include/psdk/usb.h [iso-8859-1] Mon Jun 7 23:19:24 2010
@@ -1,6 +1,26 @@
+/*
+ * usb.h
+ *
+ * This file is part of the ReactOS PSDK package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns(a)users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
#pragma once
-/* Helper macro to enable gcc's extension. */
+/* Helper macro to enable gcc's extension. */
#ifndef __GNU_EXTENSION
#ifdef __GNUC__
#define __GNU_EXTENSION __extension__
Modified: branches/header-work/include/psdk/usb100.h
URL: http://svn.reactos.org/svn/reactos/branches/header-work/include/psdk/usb100…
==============================================================================
--- branches/header-work/include/psdk/usb100.h [iso-8859-1] (original)
+++ branches/header-work/include/psdk/usb100.h [iso-8859-1] Mon Jun 7 23:19:24 2010
@@ -3,7 +3,7 @@
*
* USB 1.0 support
*
- * This file is part of the w32api package.
+ * This file is part of the ReactOS PSDK package.
*
* Contributors:
* Created by Casper S. Hornstrup <chorns(a)users.sourceforge.net>
Modified: branches/header-work/include/psdk/usb200.h
URL: http://svn.reactos.org/svn/reactos/branches/header-work/include/psdk/usb200…
==============================================================================
--- branches/header-work/include/psdk/usb200.h [iso-8859-1] (original)
+++ branches/header-work/include/psdk/usb200.h [iso-8859-1] Mon Jun 7 23:19:24 2010
@@ -1,6 +1,26 @@
+/*
+ * usb200.h
+ *
+ * This file is part of the ReactOS PSDK package.
+ *
+ * Contributors:
+ * Magnus Olsen.
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
#pragma once
-/* Helper macro to enable gcc's extension. */
+/* Helper macro to enable gcc's extension. */
#ifndef __GNU_EXTENSION
#ifdef __GNUC__
#define __GNU_EXTENSION __extension__
Modified: branches/header-work/include/psdk/usbcamdi.h
URL: http://svn.reactos.org/svn/reactos/branches/header-work/include/psdk/usbcam…
==============================================================================
--- branches/header-work/include/psdk/usbcamdi.h [iso-8859-1] (original)
+++ branches/header-work/include/psdk/usbcamdi.h [iso-8859-1] Mon Jun 7 23:19:24 2010
@@ -3,7 +3,7 @@
*
* USB Camera driver interface.
*
- * This file is part of the w32api package.
+ * This file is part of the ReactOS PSDK package.
*
* Contributors:
* Created by Casper S. Hornstrup <chorns(a)users.sourceforge.net>
Modified: branches/header-work/include/psdk/usbdi.h
URL: http://svn.reactos.org/svn/reactos/branches/header-work/include/psdk/usbdi.…
==============================================================================
--- branches/header-work/include/psdk/usbdi.h [iso-8859-1] (original)
+++ branches/header-work/include/psdk/usbdi.h [iso-8859-1] Mon Jun 7 23:19:24 2010
@@ -5,7 +5,7 @@
*
* FIXME : Obsolete header.. Use usb.h instead.
*
- * This file is part of the w32api package.
+ * This file is part of the ReactOS PSDK package.
*
* Contributors:
* Created by Casper S. Hornstrup <chorns(a)users.sourceforge.net>
Modified: branches/header-work/include/psdk/usbioctl.h
URL: http://svn.reactos.org/svn/reactos/branches/header-work/include/psdk/usbioc…
==============================================================================
--- branches/header-work/include/psdk/usbioctl.h [iso-8859-1] (original)
+++ branches/header-work/include/psdk/usbioctl.h [iso-8859-1] Mon Jun 7 23:19:24 2010
@@ -3,7 +3,7 @@
*
* USB IOCTL interface.
*
- * This file is part of the w32api package.
+ * This file is part of the ReactOS PSDK package.
*
* Contributors:
* Created by Casper S. Hornstrup <chorns(a)users.sourceforge.net>
Modified: branches/header-work/include/psdk/usbiodef.h
URL: http://svn.reactos.org/svn/reactos/branches/header-work/include/psdk/usbiod…
==============================================================================
--- branches/header-work/include/psdk/usbiodef.h [iso-8859-1] (original)
+++ branches/header-work/include/psdk/usbiodef.h [iso-8859-1] Mon Jun 7 23:19:24 2010
@@ -1,3 +1,23 @@
+/*
+ * usbiodef.h
+ *
+ * This file is part of the ReactOS PSDK package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns(a)users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
#pragma once
#define USB_SUBMIT_URB 0
Modified: branches/header-work/include/psdk/usbrpmif.h
URL: http://svn.reactos.org/svn/reactos/branches/header-work/include/psdk/usbrpm…
==============================================================================
--- branches/header-work/include/psdk/usbrpmif.h [iso-8859-1] (original)
+++ branches/header-work/include/psdk/usbrpmif.h [iso-8859-1] Mon Jun 7 23:19:24 2010
@@ -1,3 +1,23 @@
+/*
+ * usbrpmif.h
+ *
+ * This file is part of the ReactOS PSDK package.
+ *
+ * Contributors:
+ * Created by Amine Khaldi <amine.khaldi(a)reactos.org>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
#pragma once
#include "windef.h"
Modified: branches/header-work/include/psdk/usbuser.h
URL: http://svn.reactos.org/svn/reactos/branches/header-work/include/psdk/usbuse…
==============================================================================
--- branches/header-work/include/psdk/usbuser.h [iso-8859-1] (original)
+++ branches/header-work/include/psdk/usbuser.h [iso-8859-1] Mon Jun 7 23:19:24 2010
@@ -3,7 +3,7 @@
*
* USB user mode IOCTL interface
*
- * This file is part of the w32api package.
+ * This file is part of the ReactOS PSDK package.
*
* Contributors:
* Created by Casper S. Hornstrup <chorns(a)users.sourceforge.net>
Author: sir_richard
Date: Mon Jun 7 23:01:53 2010
New Revision: 47679
URL: http://svn.reactos.org/svn/reactos?rev=47679&view=rev
Log:
[HAL]: Implement HalTranslateBusAddress using Bus Handler support. The old HAL would just return whatever the caller gave (no translation was done). For example, with the new HAL, this now results in the translation of 0xCF800 in I/O space to fail (not sure which driver requests this), because this is not a valid I/O address on PC/AT systems (highest is 0xFFFF).
This change also allows for the PCI driver to override the translation mechanism (which will piggy-back to the system bus translator) with its own. Please test.
Modified:
trunk/reactos/hal/halx86/generic/legacy/bus/bushndlr.c
trunk/reactos/hal/halx86/generic/legacy/bussupp.c
trunk/reactos/hal/halx86/include/bus.h
Modified: trunk/reactos/hal/halx86/generic/legacy/bus/bushndlr.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/hal/halx86/generic/legacy/…
==============================================================================
--- trunk/reactos/hal/halx86/generic/legacy/bus/bushndlr.c [iso-8859-1] (original)
+++ trunk/reactos/hal/halx86/generic/legacy/bus/bushndlr.c [iso-8859-1] Mon Jun 7 23:01:53 2010
@@ -407,13 +407,12 @@
HalDereferenceBusHandler = HaliDereferenceBusHandler;
#endif
HalPciAssignSlotResources = HalpAssignSlotResources;
+ HalPciTranslateBusAddress = HaliTranslateBusAddress; /* PCI Driver can override */
/* FIXME: Fix later */
#if 0
- HalPciTranslateBusAddress = HaliTranslateBusAddress;
if (!HalFindBusAddressTranslation) HalFindBusAddressTranslation = HaliFindBusAddressTranslation;
#else
/* These should be written by the PCI driver later, but we give defaults */
- HalPciTranslateBusAddress = HalpTranslateBusAddress;
HalFindBusAddressTranslation = HalpFindBusAddressTranslation;
#endif
}
Modified: trunk/reactos/hal/halx86/generic/legacy/bussupp.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/hal/halx86/generic/legacy/…
==============================================================================
--- trunk/reactos/hal/halx86/generic/legacy/bussupp.c [iso-8859-1] (original)
+++ trunk/reactos/hal/halx86/generic/legacy/bussupp.c [iso-8859-1] Mon Jun 7 23:01:53 2010
@@ -1196,6 +1196,37 @@
return TRUE;
}
+BOOLEAN
+NTAPI
+HaliTranslateBusAddress(IN INTERFACE_TYPE InterfaceType,
+ IN ULONG BusNumber,
+ IN PHYSICAL_ADDRESS BusAddress,
+ IN OUT PULONG AddressSpace,
+ OUT PPHYSICAL_ADDRESS TranslatedAddress)
+{
+ PBUS_HANDLER Handler;
+ BOOLEAN Status;
+
+ /* Find the handler */
+ Handler = HalReferenceHandlerForBus(InterfaceType, BusNumber);
+ if (!(Handler) || !(Handler->TranslateBusAddress))
+ {
+ DPRINT1("No translator!\n");
+ return FALSE;
+ }
+
+ /* Do the assignment */
+ Status = Handler->TranslateBusAddress(Handler,
+ Handler,
+ BusAddress,
+ AddressSpace,
+ TranslatedAddress);
+
+ /* Dereference the handler and return */
+ HalDereferenceBusHandler(Handler);
+ return Status;
+}
+
/* PUBLIC FUNCTIONS **********************************************************/
/*
@@ -1423,9 +1454,12 @@
}
else
{
- /* Translation is easy */
- TranslatedAddress->QuadPart = BusAddress.QuadPart;
- return TRUE;
+ /* Call the bus handler */
+ return HaliTranslateBusAddress(InterfaceType,
+ BusNumber,
+ BusAddress,
+ AddressSpace,
+ TranslatedAddress);
}
}
Modified: trunk/reactos/hal/halx86/include/bus.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/hal/halx86/include/bus.h?r…
==============================================================================
--- trunk/reactos/hal/halx86/include/bus.h [iso-8859-1] (original)
+++ trunk/reactos/hal/halx86/include/bus.h [iso-8859-1] Mon Jun 7 23:01:53 2010
@@ -368,7 +368,7 @@
BOOLEAN
NTAPI
-HalpTranslateBusAddress(
+HaliTranslateBusAddress(
IN INTERFACE_TYPE InterfaceType,
IN ULONG BusNumber,
IN PHYSICAL_ADDRESS BusAddress,