[ros-diffs] [cgutman] 40776: - Translate the raw address before attempting to map it

cgutman at svn.reactos.org cgutman at svn.reactos.org
Sun May 3 04:48:03 CEST 2009


Author: cgutman
Date: Sun May  3 06:48:02 2009
New Revision: 40776

URL: http://svn.reactos.org/svn/reactos?rev=40776&view=rev
Log:
 - Translate the raw address before attempting to map it

Modified:
    trunk/reactos/drivers/network/ndis/ndis/io.c

Modified: trunk/reactos/drivers/network/ndis/ndis/io.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/network/ndis/ndis/io.c?rev=40776&r1=40775&r2=40776&view=diff
==============================================================================
--- trunk/reactos/drivers/network/ndis/ndis/io.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/network/ndis/ndis/io.c [iso-8859-1] Sun May  3 06:48:02 2009
@@ -613,18 +613,25 @@
  *     NDIS_STATUS_FAILURE: a general failure has occured
  * NOTES:
  *     - Must be called at IRQL = PASSIVE_LEVEL
- * BUGS:
- *     - Only supports things that MmMapIoSpace internally supports - what
- *       about considering bus type, etc?
- *     - doesn't track resources allocated...
- */
-{
+ */
+{
+  PLOGICAL_ADAPTER Adapter = MiniportAdapterHandle;
+  ULONG AddressSpace = 0; /* Memory Space */
+  NDIS_PHYSICAL_ADDRESS TranslatedAddress;
+
   PAGED_CODE();
   ASSERT(VirtualAddress && MiniportAdapterHandle);
 
   NDIS_DbgPrint(MAX_TRACE, ("Called\n"));
 
-  *VirtualAddress = MmMapIoSpace(PhysicalAddress, Length, MmNonCached);
+  if(!HalTranslateBusAddress(Adapter->NdisMiniportBlock.BusType, Adapter->NdisMiniportBlock.BusNumber,
+                             PhysicalAddress, &AddressSpace, &TranslatedAddress))
+  {
+      NDIS_DbgPrint(MIN_TRACE, ("Unable to translate address\n"));
+      return NDIS_STATUS_RESOURCES;
+  }
+
+  *VirtualAddress = MmMapIoSpace(TranslatedAddress, Length, MmNonCached);
 
   if(!*VirtualAddress) {
     NDIS_DbgPrint(MIN_TRACE, ("MmMapIoSpace failed\n"));



More information about the Ros-diffs mailing list