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"));