[driver,irp] Move driver__complete_irp as WvlIrpComplete
authorShao Miller <Shao.Miller@yrdsb.edu.on.ca>
Sun, 2 Jan 2011 11:15:41 +0000 (06:15 -0500)
committerShao Miller <Shao.Miller@yrdsb.edu.on.ca>
Sun, 2 Jan 2011 11:16:26 +0000 (06:16 -0500)
This means the bus library can drop its driver.h #include,
though many .c source files must now #include irp.h.

src/aoe/bus.c
src/aoe/driver.c
src/include/driver.h
src/include/irp.h
src/winvblock/bus/bus.c
src/winvblock/bus/pnp.c
src/winvblock/device.c
src/winvblock/disk/disk.c
src/winvblock/disk/pnp.c
src/winvblock/driver.c
src/winvblock/irp.c

index 82bbdbf..4bc1acc 100644 (file)
@@ -29,6 +29,7 @@
 #include "portable.h"
 #include "winvblock.h"
 #include "wv_stdlib.h"
+#include "irp.h"
 #include "driver.h"
 #include "bus.h"
 #include "device.h"
@@ -76,7 +77,7 @@ static NTSTATUS STDCALL AoeBusDevCtlDetach_(IN PIRP irp) {
         status = WvlBusEnqueueIrp(&AoeBusMain, irp);
         if (status != STATUS_PENDING)
           /* Problem. */
-          return driver__complete_irp(irp, 0, status);
+          return WvlIrpComplete(irp, 0, status);
         /* Ok. */
         return status;
       }
@@ -108,8 +109,8 @@ static NTSTATUS STDCALL AoeBusDevCtlDetach_(IN PIRP irp) {
           }
       }
     if (!walker)
-      return driver__complete_irp(irp, 0, STATUS_INVALID_PARAMETER);
-    return driver__complete_irp(irp, 0, STATUS_SUCCESS);
+      return WvlIrpComplete(irp, 0, STATUS_INVALID_PARAMETER);
+    return WvlIrpComplete(irp, 0, STATUS_SUCCESS);
   }
 
 NTSTATUS STDCALL AoeBusDevCtl(
@@ -131,7 +132,7 @@ NTSTATUS STDCALL AoeBusDevCtl(
 
         default:
           DBG("Unsupported IOCTL\n");
-          return driver__complete_irp(irp, 0, STATUS_NOT_SUPPORTED);
+          return WvlIrpComplete(irp, 0, STATUS_NOT_SUPPORTED);
       }
   }
 
@@ -240,7 +241,7 @@ static NTSTATUS STDCALL AoeBusPnpQueryDevText_(
     wv_free(str);
     alloc_str:
 
-    return driver__complete_irp(irp, irp->IoStatus.Information, status);
+    return WvlIrpComplete(irp, irp->IoStatus.Information, status);
   }
 
 NTSTATUS STDCALL AoeBusAttachFdo(
index 06e64be..5d804f1 100644 (file)
@@ -33,6 +33,7 @@
 #include "winvblock.h"
 #include "wv_stdlib.h"
 #include "wv_string.h"
+#include "irp.h"
 #include "driver.h"
 #include "bus.h"
 #include "device.h"
@@ -1285,10 +1286,11 @@ NTSTATUS STDCALL aoe__reply(
      */
     if ( InterlockedDecrement ( &tag->request_ptr->TagCount ) == 0 )
       {
-        tag->request_ptr->Irp->IoStatus.Information =
-          tag->request_ptr->SectorCount * disk_ptr->SectorSize;
-        tag->request_ptr->Irp->IoStatus.Status = STATUS_SUCCESS;
-        WvDriverCompletePendingIrp(tag->request_ptr->Irp);
+        WvlIrpComplete(
+            tag->request_ptr->Irp,
+            tag->request_ptr->SectorCount * disk_ptr->SectorSize,
+            STATUS_SUCCESS
+          );
         wv_free(tag->request_ptr);
       }
     break;
@@ -1660,7 +1662,7 @@ NTSTATUS STDCALL AoeBusDevCtlScan(IN PIRP irp) {
     targets = wv_malloc(sizeof *targets + (count * sizeof targets->Target[0]));
     if (targets == NULL) {
         DBG("wv_malloc targets\n");
-        return driver__complete_irp(
+        return WvlIrpComplete(
             irp,
             0,
             STATUS_INSUFFICIENT_RESOURCES
@@ -1693,7 +1695,7 @@ NTSTATUS STDCALL AoeBusDevCtlScan(IN PIRP irp) {
     wv_free(targets);
 
     KeReleaseSpinLock(&AoeTargetListLock_, irql);
-    return driver__complete_irp(irp, irp->IoStatus.Information, STATUS_SUCCESS);
+    return WvlIrpComplete(irp, irp->IoStatus.Information, STATUS_SUCCESS);
   }
 
 NTSTATUS STDCALL AoeBusDevCtlShow(IN PIRP irp) {
@@ -1710,7 +1712,7 @@ NTSTATUS STDCALL AoeBusDevCtlShow(IN PIRP irp) {
         status = WvlBusEnqueueIrp(&AoeBusMain, irp);
         if (status != STATUS_PENDING)
           /* Problem. */
-          return driver__complete_irp(irp, 0, status);
+          return WvlIrpComplete(irp, 0, status);
         /* Ok. */
         return status;
       }
@@ -1723,7 +1725,7 @@ NTSTATUS STDCALL AoeBusDevCtlShow(IN PIRP irp) {
     disks = wv_malloc(size);
     if (disks == NULL) {
         DBG("wv_malloc disks\n");
-        return driver__complete_irp(
+        return WvlIrpComplete(
             irp,
             0,
             STATUS_INSUFFICIENT_RESOURCES
@@ -1766,7 +1768,7 @@ NTSTATUS STDCALL AoeBusDevCtlShow(IN PIRP irp) {
         )
       );
     wv_free(disks);
-    return driver__complete_irp(irp, irp->IoStatus.Information, STATUS_SUCCESS);
+    return WvlIrpComplete(irp, irp->IoStatus.Information, STATUS_SUCCESS);
   }
 
 NTSTATUS STDCALL AoeBusDevCtlMount(IN PIRP irp) {
@@ -1788,7 +1790,7 @@ NTSTATUS STDCALL AoeBusDevCtlMount(IN PIRP irp) {
     aoe_disk = AoeDiskCreate_();
     if (aoe_disk == NULL) {
         DBG("Could not create AoE disk!\n");
-        return driver__complete_irp(
+        return WvlIrpComplete(
             irp,
             0,
             STATUS_INSUFFICIENT_RESOURCES
@@ -1804,7 +1806,7 @@ NTSTATUS STDCALL AoeBusDevCtlMount(IN PIRP irp) {
     aoe_disk->disk->Media = WvDiskMediaTypeHard;
     AoeBusAddDev(aoe_disk->disk->Dev);
 
-    return driver__complete_irp(irp, 0, STATUS_SUCCESS);
+    return WvlIrpComplete(irp, 0, STATUS_SUCCESS);
   }
 
 /**
@@ -1885,7 +1887,7 @@ static NTSTATUS STDCALL AoeDriverIrpNotSupported_(
     IN PDEVICE_OBJECT dev_obj,
     IN PIRP irp
   ) {
-    return driver__complete_irp(irp, 0, STATUS_NOT_SUPPORTED);
+    return WvlIrpComplete(irp, 0, STATUS_NOT_SUPPORTED);
   }
 
 /* Handle a power IRP. */
@@ -1907,13 +1909,13 @@ static NTSTATUS AoeDriverIrpPower_(
     if (!dev || dev->State == WvDevStateDeleted) {
         /* Even if it doesn't, a power IRP is important! */
         PoStartNextPowerIrp(irp);
-        return driver__complete_irp(irp, 0, STATUS_NO_SUCH_DEVICE);
+        return WvlIrpComplete(irp, 0, STATUS_NO_SUCH_DEVICE);
       }
     /* Call the particular device's power handler. */
     if (dev->IrpMj && dev->IrpMj->Power)
       return dev->IrpMj->Power(dev, irp);
     /* Otherwise, we don't support the IRP. */
-    return driver__complete_irp(irp, 0, STATUS_NOT_SUPPORTED);
+    return WvlIrpComplete(irp, 0, STATUS_NOT_SUPPORTED);
   }
 
 /* Handle an IRP_MJ_CREATE or IRP_MJ_CLOSE IRP. */
@@ -1928,14 +1930,14 @@ static NTSTATUS AoeDriverIrpCreateClose_(
     #endif
     /* Check for a bus IRP. */
     if (dev_obj == AoeBusMain.Fdo)
-      return driver__complete_irp(irp, 0, STATUS_SUCCESS);
+      return WvlIrpComplete(irp, 0, STATUS_SUCCESS);
     /* WvDevFromDevObj() checks for a NULL dev_obj */
     dev = WvDevFromDevObj(dev_obj);
     /* Check that the device exists. */
     if (!dev || dev->State == WvDevStateDeleted)
-      return driver__complete_irp(irp, 0, STATUS_NO_SUCH_DEVICE);
+      return WvlIrpComplete(irp, 0, STATUS_NO_SUCH_DEVICE);
     /* Always succeed with nothing to do. */
-    return driver__complete_irp(irp, 0, STATUS_SUCCESS);
+    return WvlIrpComplete(irp, 0, STATUS_SUCCESS);
   }
 
 /* Handle an IRP_MJ_SYSTEM_CONTROL IRP. */
@@ -1955,12 +1957,12 @@ static NTSTATUS AoeDriverIrpSysCtl_(
     dev = WvDevFromDevObj(dev_obj);
     /* Check that the device exists. */
     if (!dev || dev->State == WvDevStateDeleted)
-      return driver__complete_irp(irp, 0, STATUS_NO_SUCH_DEVICE);
+      return WvlIrpComplete(irp, 0, STATUS_NO_SUCH_DEVICE);
     /* Call the particular device's power handler. */
     if (dev->IrpMj && dev->IrpMj->SysCtl)
       return dev->IrpMj->SysCtl(dev, irp);
     /* Otherwise, we don't support the IRP. */
-    return driver__complete_irp(irp, 0, STATUS_NOT_SUPPORTED);
+    return WvlIrpComplete(irp, 0, STATUS_NOT_SUPPORTED);
   }
 
 /* Handle an IRP_MJ_DEVICE_CONTROL IRP. */
@@ -1985,7 +1987,7 @@ static NTSTATUS AoeDriverIrpDevCtl_(
     dev = WvDevFromDevObj(dev_obj);
     /* Check that the device exists. */
     if (!dev || dev->State == WvDevStateDeleted)
-      return driver__complete_irp(irp, 0, STATUS_NO_SUCH_DEVICE);
+      return WvlIrpComplete(irp, 0, STATUS_NO_SUCH_DEVICE);
     /* Call the particular device's power handler. */
     if (dev->IrpMj && dev->IrpMj->DevCtl) {
         return dev->IrpMj->DevCtl(
@@ -1995,7 +1997,7 @@ static NTSTATUS AoeDriverIrpDevCtl_(
           );
       }
     /* Otherwise, we don't support the IRP. */
-    return driver__complete_irp(irp, 0, STATUS_NOT_SUPPORTED);
+    return WvlIrpComplete(irp, 0, STATUS_NOT_SUPPORTED);
   }
 
 /* Handle an IRP_MJ_SCSI IRP. */
@@ -2011,13 +2013,13 @@ static NTSTATUS AoeDriverIrpScsi_(
     #endif
     /* Check for a bus IRP. */
     if (dev_obj == AoeBusMain.Fdo)
-      return driver__complete_irp(irp, 0, STATUS_NOT_SUPPORTED);
+      return WvlIrpComplete(irp, 0, STATUS_NOT_SUPPORTED);
     /* WvDevFromDevObj() checks for a NULL dev_obj */
     dev = WvDevFromDevObj(dev_obj);
     io_stack_loc = IoGetCurrentIrpStackLocation(irp);
     /* Check that the device exists. */
     if (!dev || dev->State == WvDevStateDeleted)
-      return driver__complete_irp(irp, 0, STATUS_NO_SUCH_DEVICE);
+      return WvlIrpComplete(irp, 0, STATUS_NO_SUCH_DEVICE);
     /* Call the particular device's power handler. */
     if (dev->IrpMj && dev->IrpMj->Scsi) {
         return dev->IrpMj->Scsi(
@@ -2027,7 +2029,7 @@ static NTSTATUS AoeDriverIrpScsi_(
           );
       }
     /* Otherwise, we don't support the IRP. */
-    return driver__complete_irp(irp, 0, STATUS_NOT_SUPPORTED);
+    return WvlIrpComplete(irp, 0, STATUS_NOT_SUPPORTED);
   }
 
 /* Handle an IRP_MJ_PNP IRP. */
@@ -2048,7 +2050,7 @@ static NTSTATUS AoeDriverIrpPnp_(
     dev = WvDevFromDevObj(dev_obj);
     /* Check that the device exists. */
     if (!dev || dev->State == WvDevStateDeleted)
-      return driver__complete_irp(irp, 0, STATUS_NO_SUCH_DEVICE);
+      return WvlIrpComplete(irp, 0, STATUS_NO_SUCH_DEVICE);
     /* Call the particular device's power handler. */
     if (dev->IrpMj && dev->IrpMj->Pnp) {
         return dev->IrpMj->Pnp(
@@ -2058,5 +2060,5 @@ static NTSTATUS AoeDriverIrpPnp_(
           );
       }
     /* Otherwise, we don't support the IRP. */
-    return driver__complete_irp(irp, 0, STATUS_NOT_SUPPORTED);
+    return WvlIrpComplete(irp, 0, STATUS_NOT_SUPPORTED);
   }
index a0630cf..365660a 100644 (file)
@@ -38,7 +38,6 @@
 #define POOLSIZE 2048
 
 extern PDRIVER_OBJECT WvDriverObj;
-extern WVL_M_LIB VOID STDCALL WvDriverCompletePendingIrp(IN PIRP);
 /* Note the exception to the function naming convention. */
 extern NTSTATUS STDCALL DriverEntry(
     IN PDRIVER_OBJECT,
@@ -126,11 +125,6 @@ static const WV_S_DRIVER_DUMMY_IDS DummyIds = {       \
     DummyIds ## String_                               \
   }
 
-extern WVL_M_LIB NTSTATUS STDCALL driver__complete_irp(
-    IN PIRP,
-    IN ULONG_PTR,
-    IN NTSTATUS
-  );
 extern WVL_M_LIB BOOLEAN STDCALL WvDriverBusAddDev(
     IN WV_SP_DEV_T
   );
index b499807..b934110 100644 (file)
  * IRP specifics.
  */
 
-
+extern WVL_M_LIB NTSTATUS STDCALL WvlIrpComplete(
+    IN PIRP,
+    IN ULONG_PTR,
+    IN NTSTATUS
+  );
 
 #endif /* WV_M_IRP_H_ */
index 11627c4..214de4d 100644 (file)
@@ -30,7 +30,7 @@
 #include "portable.h"
 #include "winvblock.h"
 #include "wv_stdlib.h"
-#include "driver.h"
+#include "irp.h"
 #include "bus.h"
 #include "debug.h"
 
@@ -73,7 +73,7 @@ WVL_M_LIB NTSTATUS STDCALL WvlBusSysCtl(
         IoSkipCurrentIrpStackLocation(Irp);
         return IoCallDriver(lower, Irp);
       }
-    return driver__complete_irp(Irp, 0, STATUS_SUCCESS);
+    return WvlIrpComplete(Irp, 0, STATUS_SUCCESS);
   }
 
 /* Handle a power IRP. */
@@ -88,7 +88,7 @@ WVL_M_LIB NTSTATUS STDCALL WvlBusPower(
         IoSkipCurrentIrpStackLocation(Irp);
         return PoCallDriver(lower, Irp);
       }
-    return driver__complete_irp(Irp, 0, STATUS_SUCCESS);
+    return WvlIrpComplete(Irp, 0, STATUS_SUCCESS);
   }
 
 /**
index 5bfcf7f..090ebde 100644 (file)
@@ -32,7 +32,7 @@
 #include "portable.h"
 #include "winvblock.h"
 #include "wv_stdlib.h"
-#include "driver.h"
+#include "irp.h"
 #include "bus.h"
 #include "debug.h"
 #include "probe.h"
@@ -52,7 +52,7 @@ static NTSTATUS STDCALL WvlBusPnpStartDev(IN WVL_SP_BUS_T bus, IN PIRP irp) {
     PDEVICE_OBJECT lower = bus->LowerDeviceObject;
 
     if (!lower)
-      return driver__complete_irp(irp, 0, STATUS_SUCCESS);
+      return WvlIrpComplete(irp, 0, STATUS_SUCCESS);
     KeInitializeEvent(&event, NotificationEvent, FALSE);
     IoCopyCurrentIrpStackLocationToNext(irp);
     IoSetCompletionRoutine(
@@ -72,7 +72,7 @@ static NTSTATUS STDCALL WvlBusPnpStartDev(IN WVL_SP_BUS_T bus, IN PIRP irp) {
         bus->OldState = bus->State;
         bus->State = WvlBusStateStarted;
       }
-    return driver__complete_irp(
+    return WvlIrpComplete(
         irp,
         irp->IoStatus.Information,
         STATUS_SUCCESS
@@ -90,7 +90,7 @@ static NTSTATUS STDCALL WvlBusPnpRemoveDev(IN WVL_SP_BUS_T bus, IN PIRP irp) {
         status = WvlBusEnqueueIrp(bus, irp);
         if (status != STATUS_PENDING)
           /* Problem. */
-          return driver__complete_irp(irp, 0, status);
+          return WvlIrpComplete(irp, 0, status);
         /* Ok. */
         return status;
       }
@@ -146,7 +146,7 @@ static NTSTATUS STDCALL WvlBusPnpQueryDevRelations(
         status = WvlBusEnqueueIrp(bus, irp);
         if (status != STATUS_PENDING)
           /* Problem. */
-          return driver__complete_irp(irp, 0, status);
+          return WvlIrpComplete(irp, 0, status);
         /* Ok. */
         return status;
       }
@@ -159,7 +159,7 @@ static NTSTATUS STDCALL WvlBusPnpQueryDevRelations(
             IoSkipCurrentIrpStackLocation(irp);
             return IoCallDriver(lower, irp);
           }
-        return driver__complete_irp(
+        return WvlIrpComplete(
             irp,
             irp->IoStatus.Information,
             irp->IoStatus.Status
@@ -176,7 +176,7 @@ static NTSTATUS STDCALL WvlBusPnpQueryDevRelations(
             IoSkipCurrentIrpStackLocation(irp);
             return IoCallDriver(lower, irp);
           }
-        return driver__complete_irp(irp, 0, STATUS_SUCCESS);
+        return WvlIrpComplete(irp, 0, STATUS_SUCCESS);
       }
     dev_relations->Count = bus->BusPrivate_.NodeCount;
 
@@ -198,7 +198,7 @@ static NTSTATUS STDCALL WvlBusPnpQueryDevRelations(
         IoSkipCurrentIrpStackLocation(irp);
         return IoCallDriver(lower, irp);
       }
-    return driver__complete_irp(irp, irp->IoStatus.Information, status);
+    return WvlIrpComplete(irp, irp->IoStatus.Information, status);
   }
 
 static NTSTATUS STDCALL WvlBusPnpQueryCapabilities(
@@ -215,7 +215,7 @@ static NTSTATUS STDCALL WvlBusPnpQueryCapabilities(
     if (DeviceCapabilities->Version != 1 ||
         DeviceCapabilities->Size < sizeof (DEVICE_CAPABILITIES)
       )
-      return driver__complete_irp(irp, 0, STATUS_UNSUCCESSFUL);
+      return WvlIrpComplete(irp, 0, STATUS_UNSUCCESSFUL);
     /* Let the lower DEVICE_OBJECT handle the IRP. */
     lower = bus->LowerDeviceObject;
     IoSkipCurrentIrpStackLocation(irp);
@@ -336,7 +336,7 @@ static NTSTATUS STDCALL WvlBusPnpSimple(
         IoSkipCurrentIrpStackLocation(irp);
         return IoCallDriver(lower, irp);
       }
-    return driver__complete_irp(irp, irp->IoStatus.Information, status);
+    return WvlIrpComplete(irp, irp->IoStatus.Information, status);
   }
 
 /* Bus PnP dispatch routine. */
index 3cfc679..79cf056 100644 (file)
@@ -30,6 +30,7 @@
 #include "portable.h"
 #include "winvblock.h"
 #include "wv_stdlib.h"
+#include "irp.h"
 #include "driver.h"
 #include "bus.h"
 #include "device.h"
@@ -163,7 +164,7 @@ NTSTATUS STDCALL WvDevPnpQueryId(IN WV_SP_DEV_T dev, IN PIRP irp) {
     wv_free(str);
     alloc_str:
 
-    return driver__complete_irp(irp, irp->IoStatus.Information, status);
+    return WvlIrpComplete(irp, irp->IoStatus.Information, status);
   }
 
 /**
index 15707a4..196eca5 100644 (file)
@@ -30,6 +30,7 @@
 #include "portable.h"
 #include "winvblock.h"
 #include "wv_stdlib.h"
+#include "irp.h"
 #include "driver.h"
 #include "bus.h"
 #include "device.h"
@@ -104,11 +105,11 @@ static VOID STDCALL WvDiskDefaultClose_(IN WV_SP_DISK_T disk_ptr) {
 
 static NTSTATUS STDCALL disk__power_(IN WV_SP_DEV_T dev, IN PIRP irp) {
     PoStartNextPowerIrp(irp);
-    return driver__complete_irp(irp, 0, STATUS_NOT_SUPPORTED);
+    return WvlIrpComplete(irp, 0, STATUS_NOT_SUPPORTED);
   }
 
 static NTSTATUS STDCALL disk__sys_ctl_(IN WV_SP_DEV_T dev, IN PIRP irp) {
-    return driver__complete_irp(irp, 0, irp->IoStatus.Status);
+    return WvlIrpComplete(irp, 0, irp->IoStatus.Status);
   }
 
 /**
index 43fcb3e..5586562 100644 (file)
@@ -32,6 +32,7 @@
 #include "portable.h"
 #include "winvblock.h"
 #include "wv_stdlib.h"
+#include "irp.h"
 #include "driver.h"
 #include "bus.h"
 #include "device.h"
@@ -114,7 +115,7 @@ static NTSTATUS STDCALL disk_pnp__query_dev_text_(
     wv_free(str);
     alloc_str:
 
-    return driver__complete_irp(irp, irp->IoStatus.Information, status);
+    return WvlIrpComplete(irp, irp->IoStatus.Information, status);
   }
 
 static NTSTATUS STDCALL disk_pnp__query_dev_relations_(
index 38904da..ae7d8c0 100644 (file)
@@ -33,6 +33,7 @@
 #include "winvblock.h"
 #include "wv_stdlib.h"
 #include "wv_string.h"
+#include "irp.h"
 #include "driver.h"
 #include "bus.h"
 #include "device.h"
@@ -390,28 +391,6 @@ static NTSTATUS STDCALL driver__dispatch_not_supported_(
     return irp->IoStatus.Status;
   }
 
-/**
- * Common IRP completion routine.
- *
- * @v irp               Points to the IRP to complete.
- * @v info              Number of bytes returned for the IRP, or 0.
- * @v status            Status for the IRP to complete.
- * @ret NTSTATUS        Returns the status value, as passed.
- */
-WVL_M_LIB NTSTATUS STDCALL driver__complete_irp(
-    IN PIRP irp,
-    IN ULONG_PTR info,
-    IN NTSTATUS status
-  ) {
-    irp->IoStatus.Information = info;
-    irp->IoStatus.Status = status;
-    IoCompleteRequest(irp, IO_NO_INCREMENT);
-    #ifdef DEBUGIRPS
-    Debug_IrpEnd(irp, status);
-    #endif
-    return status;
-  }
-
 /* Handle a power IRP. */
 static NTSTATUS driver__dispatch_power_(
     IN PDEVICE_OBJECT dev_obj,
@@ -427,13 +406,13 @@ static NTSTATUS driver__dispatch_power_(
     if (!dev || dev->State == WvDevStateDeleted) {
         /* Even if it doesn't, a power IRP is important! */
         PoStartNextPowerIrp(irp);
-        return driver__complete_irp(irp, 0, STATUS_NO_SUCH_DEVICE);
+        return WvlIrpComplete(irp, 0, STATUS_NO_SUCH_DEVICE);
       }
     /* Call the particular device's power handler. */
     if (dev->IrpMj && dev->IrpMj->Power)
       return dev->IrpMj->Power(dev, irp);
     /* Otherwise, we don't support the IRP. */
-    return driver__complete_irp(irp, 0, STATUS_NOT_SUPPORTED);
+    return WvlIrpComplete(irp, 0, STATUS_NOT_SUPPORTED);
   }
 
 /* Handle an IRP_MJ_CREATE or IRP_MJ_CLOSE IRP. */
@@ -449,9 +428,9 @@ static NTSTATUS driver__dispatch_create_close_(
     #endif
     /* Check that the device exists. */
     if (!dev || dev->State == WvDevStateDeleted)
-      return driver__complete_irp(irp, 0, STATUS_NO_SUCH_DEVICE);
+      return WvlIrpComplete(irp, 0, STATUS_NO_SUCH_DEVICE);
     /* Always succeed with nothing to do. */
-    return driver__complete_irp(irp, 0, STATUS_SUCCESS);
+    return WvlIrpComplete(irp, 0, STATUS_SUCCESS);
   }
 
 /* Handle an IRP_MJ_SYSTEM_CONTROL IRP. */
@@ -467,12 +446,12 @@ static NTSTATUS driver__dispatch_sys_ctl_(
     #endif
     /* Check that the device exists. */
     if (!dev || dev->State == WvDevStateDeleted)
-      return driver__complete_irp(irp, 0, STATUS_NO_SUCH_DEVICE);
+      return WvlIrpComplete(irp, 0, STATUS_NO_SUCH_DEVICE);
     /* Call the particular device's power handler. */
     if (dev->IrpMj && dev->IrpMj->SysCtl)
       return dev->IrpMj->SysCtl(dev, irp);
     /* Otherwise, we don't support the IRP. */
-    return driver__complete_irp(irp, 0, STATUS_NOT_SUPPORTED);
+    return WvlIrpComplete(irp, 0, STATUS_NOT_SUPPORTED);
   }
 
 /* Handle an IRP_MJ_DEVICE_CONTROL IRP. */
@@ -489,7 +468,7 @@ static NTSTATUS driver__dispatch_dev_ctl_(
     #endif
     /* Check that the device exists. */
     if (!dev || dev->State == WvDevStateDeleted)
-      return driver__complete_irp(irp, 0, STATUS_NO_SUCH_DEVICE);
+      return WvlIrpComplete(irp, 0, STATUS_NO_SUCH_DEVICE);
     /* Call the particular device's power handler. */
     if (dev->IrpMj && dev->IrpMj->DevCtl) {
         return dev->IrpMj->DevCtl(
@@ -499,7 +478,7 @@ static NTSTATUS driver__dispatch_dev_ctl_(
           );
       }
     /* Otherwise, we don't support the IRP. */
-    return driver__complete_irp(irp, 0, STATUS_NOT_SUPPORTED);
+    return WvlIrpComplete(irp, 0, STATUS_NOT_SUPPORTED);
   }
 
 /* Handle an IRP_MJ_SCSI IRP. */
@@ -516,7 +495,7 @@ static NTSTATUS driver__dispatch_scsi_(
     #endif
     /* Check that the device exists. */
     if (!dev || dev->State == WvDevStateDeleted)
-      return driver__complete_irp(irp, 0, STATUS_NO_SUCH_DEVICE);
+      return WvlIrpComplete(irp, 0, STATUS_NO_SUCH_DEVICE);
     /* Call the particular device's power handler. */
     if (dev->IrpMj && dev->IrpMj->Scsi) {
         return dev->IrpMj->Scsi(
@@ -526,7 +505,7 @@ static NTSTATUS driver__dispatch_scsi_(
           );
       }
     /* Otherwise, we don't support the IRP. */
-    return driver__complete_irp(irp, 0, STATUS_NOT_SUPPORTED);
+    return WvlIrpComplete(irp, 0, STATUS_NOT_SUPPORTED);
   }
 
 /* Handle an IRP_MJ_PNP IRP. */
@@ -544,7 +523,7 @@ static NTSTATUS driver__dispatch_pnp_(
     #endif
     /* Check that the device exists. */
     if (!dev || dev->State == WvDevStateDeleted)
-      return driver__complete_irp(irp, 0, STATUS_NO_SUCH_DEVICE);
+      return WvlIrpComplete(irp, 0, STATUS_NO_SUCH_DEVICE);
     /* Call the particular device's power handler. */
     if (dev->IrpMj && dev->IrpMj->Pnp) {
         status = dev->IrpMj->Pnp(
@@ -559,7 +538,7 @@ static NTSTATUS driver__dispatch_pnp_(
         return status;
       }
     /* Otherwise, we don't support the IRP. */
-    return driver__complete_irp(irp, 0, STATUS_NOT_SUPPORTED);
+    return WvlIrpComplete(irp, 0, STATUS_NOT_SUPPORTED);
   }
 
 static VOID STDCALL driver__unload_(IN PDRIVER_OBJECT DriverObject) {
@@ -585,13 +564,6 @@ static VOID STDCALL driver__unload_(IN PDRIVER_OBJECT DriverObject) {
     DBG("Done\n");
   }
 
-WVL_M_LIB VOID STDCALL WvDriverCompletePendingIrp(IN PIRP Irp) {
-    #ifdef DEBUGIRPS
-    Debug_IrpEnd(Irp, Irp->IoStatus.Status);
-    #endif
-    IoCompleteRequest(Irp, IO_NO_INCREMENT);
-  }
-
 /* Pass an IRP_MJ_SYSTEM_CONTROL IRP to the bus. */
 static NTSTATUS STDCALL WvDriverBusSysCtl_(IN WV_SP_DEV_T dev, IN PIRP irp) {
     return WvlBusSysCtl(&WvDriverBus_, irp);
@@ -665,7 +637,7 @@ static NTSTATUS STDCALL WvDriverBusDevCtlDetach_(
         status = WvlBusEnqueueIrp(&WvDriverBus_, irp);
         if (status != STATUS_PENDING)
           /* Problem. */
-          return driver__complete_irp(irp, 0, status);
+          return WvlIrpComplete(irp, 0, status);
         /* Ok. */
         return status;
       }
@@ -697,8 +669,8 @@ static NTSTATUS STDCALL WvDriverBusDevCtlDetach_(
           }
       }
     if (!walker)
-      return driver__complete_irp(irp, 0, STATUS_INVALID_PARAMETER);
-    return driver__complete_irp(irp, 0, STATUS_SUCCESS);
+      return WvlIrpComplete(irp, 0, STATUS_INVALID_PARAMETER);
+    return WvlIrpComplete(irp, 0, STATUS_SUCCESS);
   }
 
 NTSTATUS STDCALL WvDriverBusDevCtl_(
@@ -846,7 +818,7 @@ static NTSTATUS STDCALL WvDriverBusPnpQueryDevText_(
     wv_free(str);
     alloc_str:
 
-    return driver__complete_irp(irp, irp->IoStatus.Information, status);
+    return WvlIrpComplete(irp, irp->IoStatus.Information, status);
   }
 
 /**
@@ -863,7 +835,7 @@ static NTSTATUS STDCALL WvDriverDummyPnp_(
     IN UCHAR code
   ) {
     if (code != IRP_MN_QUERY_ID)
-      return driver__complete_irp(irp, 0, STATUS_NOT_SUPPORTED);
+      return WvlIrpComplete(irp, 0, STATUS_NOT_SUPPORTED);
 
     /* The WV_S_DEV_T extension points to the dummy IDs. */
     return WvDriverDummyIds(irp, dev->ext);
@@ -1060,7 +1032,7 @@ WVL_M_LIB NTSTATUS STDCALL WvDriverDummyIds(
           break;
 
         default:
-          return driver__complete_irp(Irp, 0, STATUS_NOT_SUPPORTED);
+          return WvlIrpComplete(Irp, 0, STATUS_NOT_SUPPORTED);
       }
 
     /* Allocate the return buffer. */
@@ -1081,7 +1053,7 @@ WVL_M_LIB NTSTATUS STDCALL WvDriverDummyIds(
     /* irp->IoStatus.Information not freed. */
     alloc_info:
 
-    return driver__complete_irp(Irp, Irp->IoStatus.Information, status);
+    return WvlIrpComplete(Irp, Irp->IoStatus.Information, status);
   }
 
 /** Library functions that don't depend on the WinVBlock bus. */
index 7bb521b..f85aeae 100644 (file)
 #include "winvblock.h"
 #include "debug.h"
 
+/**
+ * Common IRP completion routine.
+ *
+ * @v Irp               Points to the IRP to complete.
+ * @v Info              Number of bytes returned for the IRP, or 0.
+ * @v Status            Status for the IRP to complete.
+ * @ret NTSTATUS        Returns the status value, as passed.
+ */
+WVL_M_LIB NTSTATUS STDCALL WvlIrpComplete(
+    IN PIRP Irp,
+    IN ULONG_PTR Info,
+    IN NTSTATUS Status
+  ) {
+    Irp->IoStatus.Information = Info;
+    Irp->IoStatus.Status = Status;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+    #ifdef DEBUGIRPS
+    Debug_IrpEnd(Irp, Status);
+    #endif
+    return Status;
+  }