[disk/scsi] Independence from WV_S_DEV_T
authorShao Miller <Shao.Miller@yrdsb.edu.on.ca>
Sun, 9 Jan 2011 14:15:35 +0000 (09:15 -0500)
committerShao Miller <Shao.Miller@yrdsb.edu.on.ca>
Sun, 9 Jan 2011 14:15:35 +0000 (09:15 -0500)
For the sake of librarization.

src/aoe/driver.c
src/include/disk.h
src/include/driver.h
src/winvblock/disk/disk.c
src/winvblock/disk/scsi.c
src/winvblock/driver.c
src/winvblock/filedisk/filedisk.c
src/winvblock/ramdisk/ramdisk.c

index b76d455..60e4937 100644 (file)
@@ -1892,22 +1892,20 @@ static NTSTATUS AoeIrpScsi_(
     IN PIRP irp
   ) {
     AOE_SP_DISK_ aoe_disk;
-    PIO_STACK_LOCATION io_stack_loc;
 
     WVL_M_DEBUG_IRP_START(dev_obj, irp);
     /* Check for a bus IRP. */
     if (dev_obj == AoeBusMain.Fdo)
       return WvlIrpComplete(irp, 0, STATUS_NOT_SUPPORTED);
-    io_stack_loc = IoGetCurrentIrpStackLocation(irp);
     aoe_disk = dev_obj->DeviceExtension;
     /* Check that the device exists. */
     if (aoe_disk->disk->Dev->State == WvDevStateDeleted)
       return WvlIrpComplete(irp, 0, STATUS_NO_SUCH_DEVICE);
     /* Use the disk routine. */
-    return disk_scsi__dispatch(
-        aoe_disk->disk->Dev,
+    return WvlDiskScsi(
+        dev_obj,
         irp,
-        io_stack_loc->Parameters.Scsi.Srb->Function
+        aoe_disk->disk
       );
   }
 
index 8c5a45b..7d2f5c1 100644 (file)
@@ -49,6 +49,13 @@ typedef enum WVL_DISK_IO_MODE {
 /* Forward declaration. */
 typedef struct WV_DISK_T WV_S_DISK_T, * WV_SP_DISK_T;
 
+typedef NTSTATUS STDCALL WVL_F_DISK_SCSI(
+    IN PDEVICE_OBJECT dev_obj,
+    IN PIRP irp,
+    IN WV_SP_DISK_T disk
+  );
+typedef WVL_F_DISK_SCSI * WVL_FP_DISK_SCSI;
+
 /**
  * I/O Request.
  *
@@ -197,7 +204,7 @@ extern WVL_M_LIB NTSTATUS STDCALL WvlDiskDevCtl(
     IN ULONG POINTER_ALIGNMENT
   );
 /* IRP_MJ_SCSI dispatcher from disk/scsi.c */
-extern WVL_M_LIB WV_F_DEV_SCSI disk_scsi__dispatch;
+extern WVL_M_LIB WVL_F_DISK_SCSI WvlDiskScsi;
 /* IRP_MJ_PNP dispatcher from disk/pnp.c */
 extern WVL_M_LIB WV_F_DEV_PNP disk_pnp__dispatch;
 
index 8d8a5b6..96f8232 100644 (file)
@@ -56,6 +56,7 @@ extern NTSTATUS STDCALL WvDiskDevCtl(
     IN PIRP,
     IN ULONG POINTER_ALIGNMENT
   );
+extern NTSTATUS STDCALL WvDiskScsi(IN struct WV_DEV_T *, IN PIRP, IN UCHAR);
 /* From bus.c */
 extern WVL_M_LIB PDEVICE_OBJECT WvBusFdo(void);
 
index 986251e..869e84a 100644 (file)
@@ -61,7 +61,7 @@ static WV_S_DEV_IRP_MJ WvDiskIrpMj_ = {
     WvDiskIrpPower,
     WvDiskIrpSysCtl,
     WvDiskDevCtl,
-    disk_scsi__dispatch,
+    WvDiskScsi,
     disk_pnp__dispatch,
   };
 
index 8331d67..87b3d94 100644 (file)
@@ -376,23 +376,29 @@ static NTSTATUS STDCALL WvlDiskScsiReadToc_(
     return STATUS_SUCCESS;
   }
 
-WVL_M_LIB NTSTATUS STDCALL disk_scsi__dispatch(
-    IN WV_SP_DEV_T dev,
+/**
+ * Handle a disk SCSI IRP.
+ *
+ * @v dev_obj           The device object to process the IRP with.
+ * @v irp               The IRP to process.
+ * @v disk              The disk to process the IRP with.
+ * @ret NTSTATUS        The status of the operation.
+ */
+WVL_M_LIB NTSTATUS STDCALL WvlDiskScsi(
+    IN PDEVICE_OBJECT dev_obj,
     IN PIRP irp,
-    IN UCHAR code
+    IN WV_SP_DISK_T disk
   ) {
-    WV_SP_DISK_T disk = disk__get_ptr(dev);
     PIO_STACK_LOCATION io_stack_loc = IoGetCurrentIrpStackLocation(irp);
     PSCSI_REQUEST_BLOCK srb = io_stack_loc->Parameters.Scsi.Srb;
+    PCDB cdb = (PCDB) srb->Cdb;
     NTSTATUS status = STATUS_SUCCESS;
-    PCDB cdb;
+    UCHAR code = srb->Function;
     BOOLEAN completion = FALSE;
 
     srb->SrbStatus = SRB_STATUS_INVALID_REQUEST;
     srb->ScsiStatus = SCSISTAT_GOOD;
 
-    cdb = (PCDB) srb->Cdb;
-
     irp->IoStatus.Information = 0;
     if (srb->Lun != 0) {
         DBG("Invalid Lun!!\n");
@@ -487,11 +493,11 @@ WVL_M_LIB NTSTATUS STDCALL disk_scsi__dispatch(
           break;
 
         case SRB_FUNCTION_CLAIM_DEVICE:
-          srb->DataBuffer = dev->Self;
+          srb->DataBuffer = dev_obj;
           break;
 
         case SRB_FUNCTION_RELEASE_DEVICE:
-          ObDereferenceObject(dev->Self);
+          ObDereferenceObject(dev_obj);
           break;
 
         case SRB_FUNCTION_SHUTDOWN:
index 2127582..743cc96 100644 (file)
@@ -450,6 +450,12 @@ NTSTATUS STDCALL WvDiskDevCtl(
     return WvlDiskDevCtl(disk, irp, code);
   }
 
+NTSTATUS STDCALL WvDiskScsi(IN WV_SP_DEV_T dev, IN PIRP irp, IN UCHAR c) {
+    WV_SP_DISK_T disk = disk__get_ptr(dev);
+
+    return WvlDiskScsi(dev->Self, irp, disk);
+  }
+
 /**
  * Miscellaneous: Grouped memory allocation functions.
  */
index 9f074fc..dc0ab22 100644 (file)
@@ -309,7 +309,7 @@ WV_SP_FILEDISK_T STDCALL WvFilediskCreatePdo(
         WvDiskIrpPower,
         WvDiskIrpSysCtl,
         WvDiskDevCtl,
-        disk_scsi__dispatch,
+        WvDiskScsi,
         disk_pnp__dispatch,
       };
     NTSTATUS status;
index 3e2407b..20ba230 100644 (file)
@@ -168,7 +168,7 @@ WV_SP_RAMDISK_T STDCALL WvRamdiskCreatePdo(
         WvDiskIrpPower,
         WvDiskIrpSysCtl,
         WvDiskDevCtl,
-        disk_scsi__dispatch,
+        WvDiskScsi,
         disk_pnp__dispatch,
       };
     NTSTATUS status;