update for HEAD-2003091401
[reactos.git] / drivers / net / ndis / ndis / hardware.c
index 8fcbb80..b27ce77 100644 (file)
@@ -4,12 +4,18 @@
  * FILE:        ndis/hardware.c
  * PURPOSE:     Hardware related routines
  * PROGRAMMERS: Casper S. Hornstrup (chorns@users.sourceforge.net)
+ *              Vizzini (vizzini@plasmic.com)
  * REVISIONS:
  *   CSH 01/08-2000 Created
+ *   8/25/2003 Vizzini - NDIS4/5 and PnP additions
  */
 #include <ndissys.h>
+#include <miniport.h>
 
 
+/*
+ * @implemented
+ */
 ULONG
 EXPORT
 NdisImmediateReadPciSlotInformation(
@@ -19,12 +25,18 @@ NdisImmediateReadPciSlotInformation(
     IN  PVOID       Buffer,
     IN  ULONG       Length)
 {
-    UNIMPLEMENTED
-
-    return 0;
+  return HalGetBusDataByOffset (PCIConfiguration,
+                               0, /* FIXME */
+                               SlotNumber,
+                               Buffer,
+                               Offset,
+                               Length);
 }
 
 
+/*
+ * @implemented
+ */
 ULONG 
 EXPORT
 NdisImmediateWritePciSlotInformation(
@@ -34,25 +46,58 @@ NdisImmediateWritePciSlotInformation(
     IN  PVOID       Buffer,
     IN  ULONG       Length)
 {
-    UNIMPLEMENTED
-
-       return 0;
+  return HalSetBusDataByOffset (PCIConfiguration,
+                               0, /* FIXME */
+                               SlotNumber,
+                               Buffer,
+                               Offset,
+                               Length);
 }
 
 
+/*
+ * @implemented
+ */
 NDIS_STATUS
 EXPORT
 NdisMPciAssignResources(
     IN  NDIS_HANDLE             MiniportHandle,
     IN  ULONG                   SlotNumber,
     OUT PNDIS_RESOURCE_LIST     *AssignedResources)
+/*
+ * NOTES:
+ *     - I think this is fundamentally broken
+ */
 {
-    UNIMPLEMENTED
-
-       return NDIS_STATUS_FAILURE;
+  PCM_RESOURCE_LIST ResourceList;
+  NTSTATUS Status;
+  PLOGICAL_ADAPTER Adapter = (PLOGICAL_ADAPTER)MiniportHandle;
+
+  ResourceList = NULL;
+  Status = HalAssignSlotResources (Adapter->Miniport->RegistryPath,
+                                  0,
+                                  Adapter->Miniport->DriverObject,
+                                  0,
+                                  PCIBus,
+                                  Adapter->BusNumber,
+                                  SlotNumber,
+                                  &ResourceList);
+  if (!NT_SUCCESS (Status))
+    {
+      *AssignedResources = NULL;
+      return NDIS_STATUS_FAILURE;
+    }
+
+  *AssignedResources =
+    (PNDIS_RESOURCE_LIST)&ResourceList->List[0].PartialResourceList;
+
+  return NDIS_STATUS_SUCCESS;
 }
 
 
+/*
+ * @unimplemented
+ */
 VOID
 EXPORT
 NdisMQueryAdapterResources(
@@ -65,18 +110,27 @@ NdisMQueryAdapterResources(
 }
 
 
+/*
+ * @implemented
+ */
 NDIS_STATUS
 EXPORT
 NdisQueryMapRegisterCount(
     IN  NDIS_INTERFACE_TYPE BusType,
     OUT PUINT               MapRegisterCount)
+/*
+ * On X86 (and all other current hardware), map registers aren't real hardware,
+ * and there is no real limit to the number that can be allocated.
+ * As such, we do what microsoft does on the x86 hals and return as follows
+ */
 {
-    UNIMPLEMENTED
-
-       return NDIS_STATUS_FAILURE;
+       return NDIS_STATUS_NOT_SUPPORTED;
 }
 
 
+/*
+ * @unimplemented
+ */
 VOID
 EXPORT
 NdisReadEisaSlotInformation(
@@ -89,6 +143,9 @@ NdisReadEisaSlotInformation(
 }
 
 
+/*
+ * @unimplemented
+ */
 VOID
 EXPORT
 NdisReadEisaSlotInformationEx(
@@ -102,6 +159,9 @@ NdisReadEisaSlotInformationEx(
 }
 
 
+/*
+ * @implemented
+ */
 ULONG
 EXPORT
 NdisReadPciSlotInformation(
@@ -111,12 +171,18 @@ NdisReadPciSlotInformation(
     IN  PVOID       Buffer,
     IN  ULONG       Length)
 {
-    UNIMPLEMENTED
-
-       return 0;
+  return HalGetBusDataByOffset (PCIConfiguration,
+                               0, /* FIXME */
+                               SlotNumber,
+                               Buffer,
+                               Offset,
+                               Length);
 }
 
 
+/*
+ * @implemented
+ */
 ULONG
 EXPORT
 NdisWritePciSlotInformation(
@@ -126,9 +192,12 @@ NdisWritePciSlotInformation(
     IN  PVOID       Buffer,
     IN  ULONG       Length)
 {
-    UNIMPLEMENTED
-
-       return 0;
+  return HalSetBusDataByOffset (PCIConfiguration,
+                               0, /* FIXME */
+                               SlotNumber,
+                               Buffer,
+                               Offset,
+                               Length);
 }
 
 /* EOF */