[bus] Remove Dev member from WV_S_BUS_T
authorShao Miller <Shao.Miller@yrdsb.edu.on.ca>
Wed, 29 Dec 2010 19:06:12 +0000 (14:06 -0500)
committerShao Miller <Shao.Miller@yrdsb.edu.on.ca>
Wed, 29 Dec 2010 19:06:12 +0000 (14:06 -0500)
If a driver wishes to implement a bus without using
the WV_S_DEV_T structure, they can now do so.

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

index 9fb262f..96f3b0b 100644 (file)
@@ -52,6 +52,7 @@ void AoeBusFree(void);
 
 /* Globals. */
 WV_S_BUS_T AoeBusMain = {0};
+static WV_S_DEV_T AoeBusMainDev_ = {0};
 static UNICODE_STRING AoeBusName_ = {
     sizeof AOE_M_BUS_NAME_,
     sizeof AOE_M_BUS_NAME_,
@@ -80,8 +81,8 @@ static NTSTATUS STDCALL AoeBusDevCtlDispatch_(
 
         case IOCTL_AOE_UMOUNT:
           /* Pretend it's an IOCTL_FILE_DETACH. */
-          return AoeBusMain.Dev.IrpMj->DevCtl(
-              dev,
+          return AoeBusMainDev_.IrpMj->DevCtl(
+              &AoeBusMainDev_,
               irp,
               IOCTL_FILE_DETACH
             );
@@ -102,10 +103,11 @@ winvblock__bool AoeBusCreate(void) {
 
     /* Initialize the AoE bus. */
     WvBusInit(&AoeBusMain);
+    WvDevInit(&AoeBusMainDev_);
     /* When the PDO is created, we need to handle PnP ID queries. */
-    AoeBusMain.Dev.Ops.PnpId = AoeBusPnpId_;
+    AoeBusMainDev_.Ops.PnpId = AoeBusPnpId_;
     /* Add it as a sub-bus to WinVBlock. */
-    if (!WvDriverBusAddDev(&AoeBusMain.Dev)) {
+    if (!WvDriverBusAddDev(&AoeBusMainDev_)) {
         DBG("Couldn't add AoE bus to WinVBlock bus!\n");
         goto err_add_child;
       }
@@ -124,7 +126,7 @@ winvblock__bool AoeBusCreate(void) {
     IoDeleteSymbolicLink(&AoeBusDosname_);
     err_dos_symlink:
 
-    IoDeleteDevice(AoeBusMain.Dev.Self);
+    IoDeleteDevice(AoeBusMain.Fdo);
     err_add_child:
 
     return FALSE;
@@ -133,8 +135,8 @@ winvblock__bool AoeBusCreate(void) {
 /* Destroy the AoE bus. */
 void AoeBusFree(void) {
     IoDeleteSymbolicLink(&AoeBusDosname_);
-    IoDeleteDevice(AoeBusMain.Dev.Self);
-    WvBusRemoveNode(AoeBusMain.Dev.BusNode);
+    IoDeleteDevice(AoeBusMain.Fdo);
+    WvBusRemoveNode(AoeBusMainDev_.BusNode);
     return;
   }
 
index cf3d050..6aa4819 100644 (file)
@@ -62,7 +62,6 @@ typedef enum WV_BUS_STATE {
 
 /* The bus type. */
 typedef struct WV_BUS_T {
-    WV_S_DEV_T Dev;
     PDEVICE_OBJECT LowerDeviceObject;
     PDEVICE_OBJECT PhysicalDeviceObject;
     PDEVICE_OBJECT Fdo;
index 42d90c0..0bd0a72 100644 (file)
@@ -98,15 +98,12 @@ winvblock__lib_func NTSTATUS STDCALL WvBusPower(
 winvblock__lib_func void WvBusInit(WV_SP_BUS_T Bus) {
     RtlZeroMemory(Bus, sizeof *Bus);
     /* Populate non-zero bus device defaults. */
-    WvDevInit(&Bus->Dev);
     Bus->Thread = WvBusDefaultThread_;
     InitializeListHead(&Bus->BusPrivate_.Nodes);
     KeInitializeSpinLock(&Bus->BusPrivate_.WorkItemsLock);
     InitializeListHead(&Bus->BusPrivate_.WorkItems);
     KeInitializeEvent(&Bus->ThreadSignal, SynchronizationEvent, FALSE);
     KeInitializeEvent(&Bus->ThreadStopped, SynchronizationEvent, FALSE);
-    Bus->Dev.ext = Bus;
-    Bus->Dev.IsBus = TRUE;
   }
 
 /**
index 3b30c13..85d1951 100644 (file)
@@ -67,6 +67,7 @@ static UNICODE_STRING WvDriverBusDosname_ = {
   };
 /* The main bus. */
 static WV_S_BUS_T WvDriverBus_ = {0};
+static WV_S_DEV_T WvDriverBusDev_ = {0};
 /* Contains TXTSETUP.SIF/BOOT.INI-style OsLoadOptions parameters. */
 static LPWSTR WvDriverOsLoadOpts_ = NULL;
 
@@ -166,6 +167,7 @@ static NTSTATUS STDCALL driver__attach_fdo_(
       }
     /* Initialize the bus. */
     WvBusInit(&WvDriverBus_);
+    WvDevInit(&WvDriverBusDev_);
     /* Create the bus FDO. */
     status = IoCreateDevice(
         DriverObject,
@@ -190,10 +192,10 @@ static NTSTATUS STDCALL driver__attach_fdo_(
         goto err_dos_symlink;
       }
     /* Set associations for the bus, device, FDO, PDO. */
-    WvDevForDevObj(fdo, &WvDriverBus_.Dev);
-    WvDriverBus_.Dev.Self = WvDriverBus_.Fdo = fdo;
-    WvDriverBus_.Dev.IsBus = TRUE;
-    WvDriverBus_.Dev.IrpMj = &irp_mj;
+    WvDevForDevObj(fdo, &WvDriverBusDev_);
+    WvDriverBusDev_.Self = WvDriverBus_.Fdo = fdo;
+    WvDriverBusDev_.IsBus = TRUE;
+    WvDriverBusDev_.IrpMj = &irp_mj;
     WvDriverBus_.QueryDevText = WvDriverBusPnpQueryDevText_;
     WvDriverBus_.PhysicalDeviceObject = PhysicalDeviceObject;
     fdo->Flags |= DO_DIRECT_IO;         /* FIXME? */
@@ -622,7 +624,7 @@ winvblock__lib_func winvblock__bool STDCALL WvDriverBusAddDev(
       }
     WvBusInitNode(Dev->BusNode, dev_obj);
     /* Associate the parent bus. */
-    Dev->Parent = WvDriverBus_.Dev.Self;
+    Dev->Parent = WvDriverBus_.Fdo;
     /*
      * Initialize the device.  For disks, this routine is responsible for
      * determining the disk's geometry appropriately for AoE/RAM/file disks.
@@ -796,7 +798,7 @@ static NTSTATUS STDCALL WvDriverBusPnpQueryDevText_(
 
         case DeviceTextLocationInformation:
           str_len = WvDevPnpId(
-              &WvDriverBus_.Dev,
+              &WvDriverBusDev_,
               BusQueryInstanceID,
               str
             );