[aoe] Add disks to the AoE bus
authorShao Miller <Shao.Miller@yrdsb.edu.on.ca>
Sun, 2 Jan 2011 03:27:57 +0000 (22:27 -0500)
committerShao Miller <Shao.Miller@yrdsb.edu.on.ca>
Sun, 2 Jan 2011 03:27:57 +0000 (22:27 -0500)
Instead of the WinVBlock bus.

src/aoe/bus.c
src/aoe/driver.c

index fc7ae45..c89d049 100644 (file)
@@ -344,3 +344,43 @@ winvblock__bool AoeBusCreate(IN PDRIVER_OBJECT driver_obj) {
     DBG("Exit with failure\n");
     return FALSE;
   }
+
+/**
+ * Add a child node to the AoE bus.
+ *
+ * @v Dev               Points to the child device to add.
+ * @ret                 TRUE for success, FALSE for failure.
+ */
+winvblock__bool STDCALL AoeBusAddDev(
+    IN OUT WV_SP_DEV_T Dev
+  ) {
+    /* The new node's device object. */
+    PDEVICE_OBJECT dev_obj;
+
+    DBG("Entry\n");
+    if (!AoeBusMain.Fdo || !Dev) {
+        DBG("No bus or no device!\n");
+        return FALSE;
+      }
+    /* Create the child device. */
+    dev_obj = WvDevCreatePdo(Dev);
+    if (!dev_obj) {
+        DBG("PDO creation failed!\n");
+        return FALSE;
+      }
+    WvBusInitNode(&Dev->BusNode, dev_obj);
+    /* Associate the parent bus. */
+    Dev->Parent = AoeBusMain.Fdo;
+    /*
+     * Initialize the device.  For disks, this routine is responsible for
+     * determining the disk's geometry appropriately for AoE disks.
+     */
+    Dev->Ops.Init(Dev);
+    dev_obj->Flags &= ~DO_DEVICE_INITIALIZING;
+    /* Add the new PDO device to the bus' list of children. */
+    WvBusAddNode(&AoeBusMain, &Dev->BusNode);
+    Dev->DevNum = WvBusGetNodeNum(&Dev->BusNode);
+
+    DBG("Exit\n");
+    return TRUE;
+  }
index 60fdb27..8c48f91 100644 (file)
@@ -61,6 +61,7 @@ extern NTSTATUS STDCALL AoeBusAttachFdo(
     IN PDEVICE_OBJECT
   );
 extern const WV_S_DRIVER_DUMMY_IDS * AoeBusDummyIds;
+extern winvblock__bool STDCALL AoeBusAddDev(IN OUT WV_SP_DEV_T);
 /* From aoe/registry.c */
 extern winvblock__bool STDCALL AoeRegSetup(OUT PNTSTATUS);
 
@@ -1630,7 +1631,7 @@ static void AoeProcessAbft_(void) {
     aoe_disk->Timeout = 200000;          /* 20 ms. */
     aoe_disk->disk->Dev->Boot = TRUE;
     aoe_disk->disk->Media = WvDiskMediaTypeHard;
-    WvDriverBusAddDev(aoe_disk->disk->Dev);
+    AoeBusAddDev(aoe_disk->disk->Dev);
     return;
 
     out_no_abft:
@@ -1803,7 +1804,7 @@ NTSTATUS STDCALL AoeBusDevCtlMount(IN PIRP irp) {
     aoe_disk->Timeout = 200000;             /* 20 ms. */
     aoe_disk->disk->Dev->Boot = FALSE;
     aoe_disk->disk->Media = WvDiskMediaTypeHard;
-    WvDriverBusAddDev(aoe_disk->disk->Dev);
+    AoeBusAddDev(aoe_disk->disk->Dev);
 
     return driver__complete_irp(irp, 0, STATUS_SUCCESS);
   }