From 1d7714cac87bed3e5e5a67a0975977d1d398a963 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Sun, 3 May 2009 02:48:02 +0000 Subject: [PATCH] - Translate the raw address before attempting to map it svn path=/trunk/; revision=40776 --- reactos/drivers/network/ndis/ndis/io.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/reactos/drivers/network/ndis/ndis/io.c b/reactos/drivers/network/ndis/ndis/io.c index 15eadce6bd2..da465539f72 100644 --- a/reactos/drivers/network/ndis/ndis/io.c +++ b/reactos/drivers/network/ndis/ndis/io.c @@ -613,18 +613,25 @@ NdisMMapIoSpace( * 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"));