[bus] Add WvBusGetNodeNum function
authorShao Miller <Shao.Miller@yrdsb.edu.on.ca>
Thu, 30 Dec 2010 02:32:30 +0000 (21:32 -0500)
committerShao Miller <Shao.Miller@yrdsb.edu.on.ca>
Thu, 30 Dec 2010 02:32:30 +0000 (21:32 -0500)
A bus node (WV_S_BUS_NODE) should be treated as an opaque
type that only the bus library knows how to manipulate,
but we still need to work with a node's unit number.

src/include/bus.h
src/winvblock/bus/bus.c
src/winvblock/driver.c

index 6aa4819..bb142f2 100644 (file)
@@ -123,5 +123,8 @@ extern winvblock__lib_func NTSTATUS STDCALL WvBusPnp(
     IN PIRP,
     IN UCHAR
   );
+extern winvblock__lib_func winvblock__uint32 STDCALL WvBusGetNodeNum(
+    IN WV_SP_BUS_NODE
+  );
 
 #endif  /* WV_M_BUS_H_ */
index 0bd0a72..012fd6f 100644 (file)
@@ -545,3 +545,15 @@ winvblock__lib_func NTSTATUS STDCALL WvBusEnqueueIrp(
     KeSetEvent(&Bus->ThreadSignal, 0, FALSE);
     return STATUS_PENDING;
   }
+
+/**
+ * Get the unit number for a child node on a bus.
+ *
+ * @v node              The node whose unit number we request.
+ * @ret UINT32          The unit number for the node.
+ */
+winvblock__lib_func winvblock__uint32 STDCALL WvBusGetNodeNum(
+    IN WV_SP_BUS_NODE Node
+  ) {
+    return Node->BusPrivate_.Num;
+  }
index 85d1951..c183d32 100644 (file)
@@ -633,6 +633,7 @@ winvblock__lib_func winvblock__bool STDCALL WvDriverBusAddDev(
     dev_obj->Flags &= ~DO_DEVICE_INITIALIZING;
     /* Add the new PDO device to the bus' list of children. */
     WvBusAddNode(&WvDriverBus_, Dev->BusNode);
+    Dev->DevNum = WvBusGetNodeNum(Dev->BusNode);
 
     DBG("Exit\n");
     return TRUE;