diff --git a/reactos/drivers/network/ndis/ndis/40stubs.c b/reactos/drivers/network/ndis/ndis/40stubs.c index e722b07e495..cfc7edd312b 100644 --- a/reactos/drivers/network/ndis/ndis/40stubs.c +++ b/reactos/drivers/network/ndis/ndis/40stubs.c @@ -336,22 +336,6 @@ NdisImmediateWriteSharedMemory( } - -/* - * @unimplemented - */ -VOID -EXPORT -NdisReadEisaSlotInformation( - OUT PNDIS_STATUS Status, - IN NDIS_HANDLE WrapperConfigurationContext, - OUT PUINT SlotNumber, - OUT PNDIS_EISA_FUNCTION_INFORMATION EisaData) -{ - UNIMPLEMENTED -} - - /* * @unimplemented */ diff --git a/reactos/drivers/network/ndis/ndis/hardware.c b/reactos/drivers/network/ndis/ndis/hardware.c index cd7a2a21be1..40a4b42b5a7 100644 --- a/reactos/drivers/network/ndis/ndis/hardware.c +++ b/reactos/drivers/network/ndis/ndis/hardware.c @@ -194,4 +194,48 @@ NdisWritePciSlotInformation( Buffer, Offset, Length); } + +/* + * @implemented + */ +VOID +EXPORT +NdisReadEisaSlotInformation( + OUT PNDIS_STATUS Status, + IN NDIS_HANDLE WrapperConfigurationContext, + OUT PUINT SlotNumber, + OUT PNDIS_EISA_FUNCTION_INFORMATION EisaData) +{ + PNDIS_WRAPPER_CONTEXT Wrapper = WrapperConfigurationContext; + ULONG Ret; + PVOID Buffer; + + /* We are called only at PASSIVE_LEVEL */ + Buffer = ExAllocatePool(PagedPool, sizeof(NDIS_EISA_FUNCTION_INFORMATION)); + if (!Buffer) { + *Status = NDIS_STATUS_RESOURCES; + return; + } + + Ret = HalGetBusData(EisaConfiguration, + Wrapper->BusNumber, + Wrapper->SlotNumber, + Buffer, + sizeof(NDIS_EISA_FUNCTION_INFORMATION)); + + if (Ret == 0 || Ret == 2) { + ExFreePool(Buffer); + *Status = NDIS_STATUS_FAILURE; + return; + } + + *SlotNumber = Wrapper->SlotNumber; + + RtlCopyMemory(EisaData, Buffer, sizeof(NDIS_EISA_FUNCTION_INFORMATION)); + + ExFreePool(Buffer); + + *Status = NDIS_STATUS_SUCCESS; +} + /* EOF */