- Implement NdisReadEisaSlotInformation
authorCameron Gutman <aicommander@gmail.com>
Fri, 22 May 2009 00:42:51 +0000 (00:42 +0000)
committerCameron Gutman <aicommander@gmail.com>
Fri, 22 May 2009 00:42:51 +0000 (00:42 +0000)
svn path=/trunk/; revision=41037

reactos/drivers/network/ndis/ndis/40stubs.c
reactos/drivers/network/ndis/ndis/hardware.c

index e722b07..cfc7edd 100644 (file)
@@ -336,22 +336,6 @@ NdisImmediateWriteSharedMemory(
 }
 
 
-\f
-/*
- * @unimplemented
- */
-VOID
-EXPORT
-NdisReadEisaSlotInformation(
-    OUT PNDIS_STATUS                    Status,
-    IN  NDIS_HANDLE                     WrapperConfigurationContext,
-    OUT PUINT                           SlotNumber,
-    OUT PNDIS_EISA_FUNCTION_INFORMATION EisaData)
-{
-    UNIMPLEMENTED
-}
-
-
 /*
  * @unimplemented
  */
index cd7a2a2..40a4b42 100644 (file)
@@ -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 */