[irp,aoe] Remove mini IRP handling scheme
authorShao Miller <Shao.Miller@yrdsb.edu.on.ca>
Mon, 13 Dec 2010 23:37:40 +0000 (18:37 -0500)
committerShao Miller <Shao.Miller@yrdsb.edu.on.ca>
Mon, 13 Dec 2010 23:37:40 +0000 (18:37 -0500)
Goodbye, mini IRP handling scheme.

Since AoE still had remnants but doesn't yet work as a
sub-bus anyway, some fair changes were made to the AoE
module, such as renaming functions and changing the
IRP_MJ_DEVICE_CONTROL; aoe_bus__dev_ctl_dispatch_().

27 files changed:
WinVBlock.dev
src/aoe/bus.c
src/aoe/driver.c
src/aoe/protocol.c
src/include/aoe_bus.h [deleted file]
src/include/device.h
src/include/driver.h
src/include/irp.h [deleted file]
src/winvblock/bus/bus.c
src/winvblock/bus/dev_ctl.c
src/winvblock/bus/pnp.c
src/winvblock/debug.c
src/winvblock/device.c
src/winvblock/disk/dev_ctl.c
src/winvblock/disk/disk.c
src/winvblock/disk/pnp.c
src/winvblock/disk/scsi.c
src/winvblock/driver.c
src/winvblock/filedisk/filedisk.c
src/winvblock/filedisk/grub4dos.c
src/winvblock/irp.c [deleted file]
src/winvblock/makedriver.bat
src/winvblock/probe.c
src/winvblock/ramdisk/grub4dos.c
src/winvblock/ramdisk/memdisk.c
src/winvblock/ramdisk/ramdisk.c
src/winvblock/registry.c

index 36cd41e..0c41a38 100644 (file)
@@ -1,7 +1,7 @@
 [Project]\r
 FileName=WinVBlock.dev\r
 Name=WinVBlock\r
-UnitCount=64\r
+UnitCount=61\r
 PchHead=-1\r
 PchSource=-1\r
 Ver=3\r
@@ -84,7 +84,7 @@ CompilerSet=1
 CompilerType=1\r
 \r
 [Unit21]\r
-FileName=src\winvblock\disk\pnp.c\r
+FileName=src\winvblock\disk\scsi.c\r
 CompileCpp=1\r
 Folder=WinVBlock/Disk\r
 Compile=1\r
@@ -94,7 +94,7 @@ OverrideBuildCmd=0
 BuildCmd=\r
 \r
 [Unit23]\r
-FileName=src\winvblock\ramdisk\grub4dos.c\r
+FileName=src\winvblock\ramdisk\memdisk.c\r
 CompileCpp=1\r
 Folder=WinVBlock/RAMDisk\r
 Compile=1\r
@@ -104,9 +104,9 @@ OverrideBuildCmd=0
 BuildCmd=\r
 \r
 [Unit22]\r
-FileName=src\winvblock\disk\scsi.c\r
+FileName=src\winvblock\ramdisk\grub4dos.c\r
 CompileCpp=1\r
-Folder=WinVBlock/Disk\r
+Folder=WinVBlock/RAMDisk\r
 Compile=1\r
 Link=1\r
 Priority=1000\r
@@ -114,7 +114,7 @@ OverrideBuildCmd=0
 BuildCmd=\r
 \r
 [Unit24]\r
-FileName=src\winvblock\ramdisk\memdisk.c\r
+FileName=src\winvblock\ramdisk\ramdisk.c\r
 Folder=WinVBlock/RAMDisk\r
 Compile=1\r
 Link=1\r
@@ -124,16 +124,6 @@ BuildCmd=
 CompileCpp=1\r
 \r
 [Unit25]\r
-FileName=src\winvblock\ramdisk\ramdisk.c\r
-CompileCpp=1\r
-Folder=WinVBlock/RAMDisk\r
-Compile=1\r
-Link=1\r
-Priority=1000\r
-OverrideBuildCmd=0\r
-BuildCmd=\r
-\r
-[Unit26]\r
 FileName=src\winvblock\winvblock.rc\r
 CompileCpp=1\r
 Folder=WinVBlock\r
@@ -143,7 +133,7 @@ Priority=1000
 OverrideBuildCmd=0\r
 BuildCmd=\r
 \r
-[Unit27]\r
+[Unit26]\r
 FileName=src\include\aoe.h\r
 CompileCpp=1\r
 Folder=Include\r
@@ -153,7 +143,7 @@ Priority=1000
 OverrideBuildCmd=0\r
 BuildCmd=\r
 \r
-[Unit28]\r
+[Unit27]\r
 FileName=src\include\bus.h\r
 CompileCpp=1\r
 Folder=Include\r
@@ -163,8 +153,8 @@ Priority=1000
 OverrideBuildCmd=0\r
 BuildCmd=\r
 \r
-[Unit30]\r
-FileName=src\include\disk.h\r
+[Unit28]\r
+FileName=src\include\debug.h\r
 CompileCpp=1\r
 Folder=Include\r
 Compile=1\r
@@ -173,8 +163,8 @@ Priority=1000
 OverrideBuildCmd=0\r
 BuildCmd=\r
 \r
-[Unit34]\r
-FileName=src\include\httpdisk.h\r
+[Unit30]\r
+FileName=src\include\driver.h\r
 CompileCpp=1\r
 Folder=Include\r
 Compile=1\r
@@ -184,7 +174,7 @@ OverrideBuildCmd=0
 BuildCmd=\r
 \r
 [Unit35]\r
-FileName=src\include\irp.h\r
+FileName=src\include\memdisk.h\r
 CompileCpp=1\r
 Folder=Include\r
 Compile=1\r
@@ -194,7 +184,7 @@ OverrideBuildCmd=0
 BuildCmd=\r
 \r
 [Unit36]\r
-FileName=src\include\mdi.h\r
+FileName=src\include\mount.h\r
 CompileCpp=1\r
 Folder=Include\r
 Compile=1\r
@@ -204,7 +194,7 @@ OverrideBuildCmd=0
 BuildCmd=\r
 \r
 [Unit19]\r
-FileName=src\winvblock\disk\dev_ctl.c\r
+FileName=src\winvblock\disk\disk.c\r
 CompileCpp=1\r
 Folder=WinVBlock/Disk\r
 Compile=1\r
@@ -214,7 +204,7 @@ OverrideBuildCmd=0
 BuildCmd=\r
 \r
 [Unit37]\r
-FileName=src\include\memdisk.h\r
+FileName=src\include\portable.h\r
 CompileCpp=1\r
 Folder=Include\r
 Compile=1\r
@@ -224,7 +214,7 @@ OverrideBuildCmd=0
 BuildCmd=\r
 \r
 [Unit38]\r
-FileName=src\include\mount.h\r
+FileName=src\include\probe.h\r
 CompileCpp=1\r
 Folder=Include\r
 Compile=1\r
@@ -234,7 +224,7 @@ OverrideBuildCmd=0
 BuildCmd=\r
 \r
 [Unit39]\r
-FileName=src\include\portable.h\r
+FileName=src\include\protocol.h\r
 CompileCpp=1\r
 Folder=Include\r
 Compile=1\r
@@ -244,7 +234,7 @@ OverrideBuildCmd=0
 BuildCmd=\r
 \r
 [Unit40]\r
-FileName=src\include\probe.h\r
+FileName=src\include\ramdisk.h\r
 CompileCpp=1\r
 Folder=Include\r
 Compile=1\r
@@ -254,7 +244,7 @@ OverrideBuildCmd=0
 BuildCmd=\r
 \r
 [Unit41]\r
-FileName=src\include\protocol.h\r
+FileName=src\include\registry.h\r
 CompileCpp=1\r
 Folder=Include\r
 Compile=1\r
@@ -264,7 +254,7 @@ OverrideBuildCmd=0
 BuildCmd=\r
 \r
 [Unit42]\r
-FileName=src\include\ramdisk.h\r
+FileName=src\include\resource.h\r
 CompileCpp=1\r
 Folder=Include\r
 Compile=1\r
@@ -274,7 +264,7 @@ OverrideBuildCmd=0
 BuildCmd=\r
 \r
 [Unit43]\r
-FileName=src\include\registry.h\r
+FileName=src\include\winvblock.h\r
 Folder=Include\r
 Compile=1\r
 Link=1\r
@@ -284,9 +274,9 @@ BuildCmd=
 CompileCpp=1\r
 \r
 [Unit44]\r
-FileName=src\include\resource.h\r
+FileName=src\util\mount.c\r
 CompileCpp=1\r
-Folder=Include\r
+Folder=Util\r
 Compile=1\r
 Link=1\r
 Priority=1000\r
@@ -294,19 +284,19 @@ OverrideBuildCmd=0
 BuildCmd=\r
 \r
 [Unit45]\r
-FileName=src\include\winvblock.h\r
+FileName=src\aoe\aoe.rc\r
 CompileCpp=1\r
-Folder=Include\r
+Folder=AoE\r
 Compile=1\r
-Link=1\r
+Link=0\r
 Priority=1000\r
 OverrideBuildCmd=0\r
 BuildCmd=\r
 \r
 [Unit46]\r
-FileName=src\util\mount.c\r
+FileName=src\include\device.h\r
 CompileCpp=1\r
-Folder=Util\r
+Folder=Include\r
 Compile=1\r
 Link=1\r
 Priority=1000\r
@@ -314,19 +304,19 @@ OverrideBuildCmd=0
 BuildCmd=\r
 \r
 [Unit47]\r
-FileName=src\aoe\aoe.rc\r
-Folder=AoE\r
+FileName=src\winvblock\device.c\r
+Folder=WinVBlock\r
 Compile=1\r
-Link=0\r
+Link=1\r
 Priority=1000\r
 OverrideBuildCmd=0\r
 BuildCmd=\r
 CompileCpp=1\r
 \r
 [Unit48]\r
-FileName=src\include\device.h\r
+FileName=src\winvblock\filedisk\filedisk.c\r
 CompileCpp=1\r
-Folder=Include\r
+Folder=WinVBlock/FileDisk\r
 Compile=1\r
 Link=1\r
 Priority=1000\r
@@ -334,9 +324,9 @@ OverrideBuildCmd=0
 BuildCmd=\r
 \r
 [Unit49]\r
-FileName=src\winvblock\device.c\r
+FileName=src\winvblock\filedisk\grub4dos.c\r
 CompileCpp=1\r
-Folder=WinVBlock\r
+Folder=WinVBlock/FileDisk\r
 Compile=1\r
 Link=1\r
 Priority=1000\r
@@ -344,9 +334,9 @@ OverrideBuildCmd=0
 BuildCmd=\r
 \r
 [Unit50]\r
-FileName=src\winvblock\filedisk\filedisk.c\r
+FileName=src\include\byte.h\r
 CompileCpp=1\r
-Folder=WinVBlock/FileDisk\r
+Folder=Include\r
 Compile=1\r
 Link=1\r
 Priority=1000\r
@@ -354,8 +344,8 @@ OverrideBuildCmd=0
 BuildCmd=\r
 \r
 [Unit51]\r
-FileName=src\winvblock\filedisk\grub4dos.c\r
-Folder=WinVBlock/FileDisk\r
+FileName=src\include\msvhd.h\r
+Folder=Include\r
 Compile=1\r
 Link=1\r
 Priority=1000\r
@@ -364,11 +354,11 @@ BuildCmd=
 CompileCpp=1\r
 \r
 [Unit52]\r
-FileName=src\include\byte.h\r
+FileName=src\util\winvblock.rc\r
 CompileCpp=1\r
-Folder=Include\r
+Folder=Util\r
 Compile=1\r
-Link=1\r
+Link=0\r
 Priority=1000\r
 OverrideBuildCmd=0\r
 BuildCmd=\r
@@ -492,7 +482,7 @@ OverrideBuildCmd=0
 BuildCmd=\r
 \r
 [Unit14]\r
-FileName=src\winvblock\probe.c\r
+FileName=src\winvblock\registry.c\r
 CompileCpp=1\r
 Folder=WinVBlock\r
 Compile=1\r
@@ -502,9 +492,9 @@ OverrideBuildCmd=0
 BuildCmd=\r
 \r
 [Unit15]\r
-FileName=src\winvblock\registry.c\r
+FileName=src\winvblock\bus\bus.c\r
 CompileCpp=1\r
-Folder=WinVBlock\r
+Folder=WinVBlock/Bus\r
 Compile=1\r
 Link=1\r
 Priority=1000\r
@@ -512,7 +502,7 @@ OverrideBuildCmd=0
 BuildCmd=\r
 \r
 [Unit16]\r
-FileName=src\winvblock\bus\bus.c\r
+FileName=src\winvblock\bus\dev_ctl.c\r
 CompileCpp=1\r
 Folder=WinVBlock/Bus\r
 Compile=1\r
@@ -522,7 +512,7 @@ OverrideBuildCmd=0
 BuildCmd=\r
 \r
 [Unit17]\r
-FileName=src\winvblock\bus\dev_ctl.c\r
+FileName=src\winvblock\bus\pnp.c\r
 CompileCpp=1\r
 Folder=WinVBlock/Bus\r
 Compile=1\r
@@ -532,9 +522,9 @@ OverrideBuildCmd=0
 BuildCmd=\r
 \r
 [Unit18]\r
-FileName=src\winvblock\bus\pnp.c\r
+FileName=src\winvblock\disk\dev_ctl.c\r
 CompileCpp=1\r
-Folder=WinVBlock/Bus\r
+Folder=WinVBlock/Disk\r
 Compile=1\r
 Link=1\r
 Priority=1000\r
@@ -542,7 +532,7 @@ OverrideBuildCmd=0
 BuildCmd=\r
 \r
 [Unit20]\r
-FileName=src\winvblock\disk\disk.c\r
+FileName=src\winvblock\disk\pnp.c\r
 CompileCpp=1\r
 Folder=WinVBlock/Disk\r
 Compile=1\r
@@ -552,7 +542,7 @@ OverrideBuildCmd=0
 BuildCmd=\r
 \r
 [Unit53]\r
-FileName=src\include\msvhd.h\r
+FileName=src\include\wv_stdlib.h\r
 Folder=Include\r
 Compile=1\r
 Link=1\r
@@ -562,17 +552,17 @@ BuildCmd=
 CompileCpp=1\r
 \r
 [Unit54]\r
-FileName=src\util\winvblock.rc\r
+FileName=src\winvblock\wv_stdlib.c\r
 CompileCpp=1\r
-Folder=Util\r
+Folder=WinVBlock\r
 Compile=1\r
-Link=0\r
+Link=1\r
 Priority=1000\r
 OverrideBuildCmd=0\r
 BuildCmd=\r
 \r
 [Unit55]\r
-FileName=src\include\wv_stdlib.h\r
+FileName=src\include\wv_stddef.h\r
 CompileCpp=1\r
 Folder=Include\r
 Compile=1\r
@@ -581,20 +571,10 @@ Priority=1000
 OverrideBuildCmd=0\r
 BuildCmd=\r
 \r
-[Unit13]\r
-FileName=src\winvblock\irp.c\r
-CompileCpp=1\r
-Folder=WinVBlock\r
-Compile=1\r
-Link=1\r
-Priority=1000\r
-OverrideBuildCmd=0\r
-BuildCmd=\r
-\r
 [Unit56]\r
-FileName=src\winvblock\wv_stdlib.c\r
+FileName=src\aoe\wv_stdlib.c\r
 CompileCpp=1\r
-Folder=WinVBlock\r
+Folder=AoE\r
 Compile=1\r
 Link=1\r
 Priority=1000\r
@@ -602,7 +582,7 @@ OverrideBuildCmd=0
 BuildCmd=\r
 \r
 [Unit57]\r
-FileName=src\include\wv_stddef.h\r
+FileName=src\include\wv_string.h\r
 CompileCpp=1\r
 Folder=Include\r
 Compile=1\r
@@ -612,9 +592,9 @@ OverrideBuildCmd=0
 BuildCmd=\r
 \r
 [Unit58]\r
-FileName=src\aoe\wv_stdlib.c\r
+FileName=src\winvblock\wv_string.c\r
 CompileCpp=1\r
-Folder=AoE\r
+Folder=WinVBlock\r
 Compile=1\r
 Link=1\r
 Priority=1000\r
@@ -622,7 +602,7 @@ OverrideBuildCmd=0
 BuildCmd=\r
 \r
 [Unit59]\r
-FileName=src\include\wv_string.h\r
+FileName=src\include\wv_stdbool.h\r
 Folder=Include\r
 Compile=1\r
 Link=1\r
@@ -632,9 +612,9 @@ BuildCmd=
 CompileCpp=1\r
 \r
 [Unit61]\r
-FileName=src\include\wv_stdbool.h\r
+FileName=src\aoe\bus.c\r
 CompileCpp=1\r
-Folder=Include\r
+Folder=AoE\r
 Compile=1\r
 Link=1\r
 Priority=1000\r
@@ -642,16 +622,6 @@ OverrideBuildCmd=0
 BuildCmd=\r
 \r
 [Unit60]\r
-FileName=src\winvblock\wv_string.c\r
-CompileCpp=1\r
-Folder=WinVBlock\r
-Compile=1\r
-Link=1\r
-Priority=1000\r
-OverrideBuildCmd=0\r
-BuildCmd=\r
-\r
-[Unit62]\r
 FileName=src\aoe\wv_string.c\r
 CompileCpp=1\r
 Folder=AoE\r
@@ -732,7 +702,7 @@ OverrideBuildCmd=0
 BuildCmd=\r
 \r
 [Unit32]\r
-FileName=src\include\filedisk.h\r
+FileName=src\include\grub4dos.h\r
 CompileCpp=1\r
 Folder=Include\r
 Compile=1\r
@@ -742,7 +712,7 @@ OverrideBuildCmd=0
 BuildCmd=\r
 \r
 [Unit33]\r
-FileName=src\include\grub4dos.h\r
+FileName=src\include\httpdisk.h\r
 CompileCpp=1\r
 Folder=Include\r
 Compile=1\r
@@ -752,7 +722,7 @@ OverrideBuildCmd=0
 BuildCmd=\r
 \r
 [Unit29]\r
-FileName=src\include\debug.h\r
+FileName=src\include\disk.h\r
 CompileCpp=1\r
 Folder=Include\r
 Compile=1\r
@@ -762,7 +732,27 @@ OverrideBuildCmd=0
 BuildCmd=\r
 \r
 [Unit31]\r
-FileName=src\include\driver.h\r
+FileName=src\include\filedisk.h\r
+CompileCpp=1\r
+Folder=Include\r
+Compile=1\r
+Link=1\r
+Priority=1000\r
+OverrideBuildCmd=0\r
+BuildCmd=\r
+\r
+[Unit13]\r
+FileName=src\winvblock\probe.c\r
+CompileCpp=1\r
+Folder=WinVBlock\r
+Compile=1\r
+Link=1\r
+Priority=1000\r
+OverrideBuildCmd=0\r
+BuildCmd=\r
+\r
+[Unit34]\r
+FileName=src\include\mdi.h\r
 CompileCpp=1\r
 Folder=Include\r
 Compile=1\r
index 9c3f59b..cb1a2d5 100644 (file)
@@ -28,7 +28,6 @@
 
 #include "winvblock.h"
 #include "portable.h"
-#include "irp.h"
 #include "driver.h"
 #include "device.h"
 #include "bus.h"
 #include "debug.h"
 
 /* TODO: Remove this pull from aoe/driver.c */
-extern irp__handler scan;
-extern irp__handler show;
-extern irp__handler mount;
+extern device__dispatch_func aoe__scan;
+extern device__dispatch_func aoe__show;
+extern device__dispatch_func aoe__mount;
 
 /* Forward declarations. */
-static NTSTATUS STDCALL aoe_bus__dev_ctl_(
-    IN PDEVICE_OBJECT,
-    IN PIRP,
-    IN PIO_STACK_LOCATION,
-    IN struct device__type *,
-    OUT winvblock__bool_ptr
-  );
+static device__dev_ctl_func aoe_bus__dev_ctl_dispatch_;
 static device__pnp_id_func aoe_bus__pnp_id_;
+winvblock__bool aoe_bus__create(void);
+void aoe_bus__free(void);
 
 /* Globals. */
 struct bus__type * aoe_bus = NULL;
-static irp__handling aoe_bus__handling_table_[] = {
-    /*
-     * Major, minor, any major?, any minor?, handler
-     * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-     * Note that the fall-through case must come FIRST!
-     * Why? It sets completion to true, so others won't be called.
-     */
-    { IRP_MJ_DEVICE_CONTROL, 0, FALSE, TRUE, aoe_bus__dev_ctl_ },
-  };
-
-
-static NTSTATUS STDCALL aoe_bus__dev_ctl_(
-    IN PDEVICE_OBJECT dev_obj,
-    IN PIRP irp,
-    IN PIO_STACK_LOCATION io_stack_loc,
+
+static NTSTATUS STDCALL aoe_bus__dev_ctl_dispatch_(
     IN struct device__type * dev,
-    OUT winvblock__bool_ptr completion
+    IN PIRP irp,
+    IN ULONG POINTER_ALIGNMENT code
   ) {
-    NTSTATUS status = STATUS_NOT_SUPPORTED;
-
-    switch(io_stack_loc->Parameters.DeviceIoControl.IoControlCode) {
+    switch(code) {
         case IOCTL_AOE_SCAN:
-          status = scan(dev_obj, irp, io_stack_loc, dev, completion);
-          break;
+          return aoe__scan(dev, irp);
 
         case IOCTL_AOE_SHOW:
-          status = show(dev_obj, irp, io_stack_loc, dev, completion);
-          break;
+          return aoe__show(dev, irp);
 
         case IOCTL_AOE_MOUNT:
-          status = mount(dev_obj, irp, io_stack_loc, dev, completion);
-          break;
+          return aoe__mount(dev, irp);
 
         case IOCTL_AOE_UMOUNT:
-          io_stack_loc->Parameters.DeviceIoControl.IoControlCode =
-            IOCTL_FILE_DETACH;
-          break;
+          /* Pretend it's an IOCTL_FILE_DETACH. */
+          return device__get(bus__get(dev)->LowerDeviceObject)->irp_mj->dev_ctl(
+              dev,
+              irp,
+              IOCTL_FILE_DETACH
+            );
+
+        default:
+          DBG("Unsupported IOCTL\n");
+          return driver__complete_irp(irp, 0, STATUS_NOT_SUPPORTED);
       }
-    if (*completion)
-      IoCompleteRequest(irp, IO_NO_INCREMENT);
-    return status;
   }
 
 /**
@@ -153,10 +135,6 @@ void aoe_bus__free(void) {
     IoDeleteSymbolicLink(&aoe_bus->dos_dev_name);
     IoDeleteSymbolicLink(&aoe_bus->dev_name);
     IoDeleteDevice(aoe_bus->device->Self);
-    irp__unreg_table(
-        &aoe_bus->device->irp_handler_chain,
-        aoe_bus__handling_table_
-      );
     #if 0
     bus__remove_child(driver__bus(), aoe_bus->device);
     #endif
index 2d6ea88..e053230 100644 (file)
 #include "wv_stdlib.h"
 #include "wv_string.h"
 #include "portable.h"
-#include "irp.h"
 #include "driver.h"
 #include "device.h"
 #include "disk.h"
 #include "mount.h"
 #include "bus.h"
 #include "aoe.h"
-#include "aoe_bus.h"
 #include "registry.h"
 #include "protocol.h"
 #include "debug.h"
@@ -52,10 +50,14 @@ extern NTSTATUS STDCALL ZwWaitForSingleObject(
     IN PLARGE_INTEGER Timeout OPTIONAL
   );
 
+/* From aoe/bus.c */
+extern struct bus__type * aoe_bus;
+extern winvblock__bool aoe_bus__create(void);
+extern void aoe_bus__free(void);
+
 /* Forward declarations. */
 struct aoe__disk_type_;
 static void STDCALL aoe__thread_(IN void *);
-irp__handler aoe__bus_dev_ctl_dispatch;
 static void aoe__process_abft_(void);
 static void STDCALL aoe__unload_(IN PDRIVER_OBJECT);
 static struct aoe__disk_type_ * aoe__create_disk_(void);
@@ -205,12 +207,6 @@ static winvblock__bool aoe__started_ = FALSE;
 static LIST_ENTRY aoe__disk_list_;
 static KSPIN_LOCK aoe__disk_list_lock_;
 
-static irp__handling handling_table[] =
-  {
-    /* Major, minor, any major?, any minor?, handler. */
-    { IRP_MJ_DEVICE_CONTROL, 0, FALSE, TRUE, aoe__bus_dev_ctl_dispatch }
-  };
-
 /* Yield a pointer to the AoE disk. */
 static struct aoe__disk_type_ * aoe__get_(struct device__type * dev_ptr)
   {
@@ -908,18 +904,7 @@ static void STDCALL aoe__unload_(IN PDRIVER_OBJECT DriverObject) {
 
     /* Release the global spin-lock. */
     KeReleaseSpinLock(&aoe__spinlock_, Irql);
-    {
-      struct bus__type * bus_ptr = driver__bus();
-
-      if (!bus_ptr) {
-          DBG("Unable to un-register IOCTLs!\n");
-        } else {
-          irp__unreg_table(
-              &bus_ptr->device->irp_handler_chain,
-              handling_table
-            );
-        }
-    }
+    aoe_bus__free();
     aoe__started_ = FALSE;
     DBG("Exit\n");
   }
@@ -2106,17 +2091,15 @@ static void aoe__process_abft_(void) {
     return;
   }
 
-NTSTATUS STDCALL scan(
-    IN PDEVICE_OBJECT dev_obj,
-    IN PIRP irp,
-    IN PIO_STACK_LOCATION io_stack_loc,
+NTSTATUS STDCALL aoe__scan(
     IN struct device__type * dev,
-    OUT winvblock__bool_ptr completion
+    IN PIRP irp
   ) {
     KIRQL irql;
     winvblock__uint32 count;
     struct aoe__target_list_ * target_walker;
     aoe__mount_targets_ptr targets;
+    PIO_STACK_LOCATION io_stack_loc = IoGetCurrentIrpStackLocation(irp);
 
     DBG("Got IOCTL_AOE_SCAN...\n");
     KeAcquireSpinLock(&aoe__target_list_spinlock_, &irql);
@@ -2129,10 +2112,13 @@ NTSTATUS STDCALL scan(
       }
 
     targets = wv_malloc(sizeof *targets + (count * sizeof targets->Target[0]));
-    if ( targets == NULL ) {
+    if (targets == NULL) {
         DBG("wv_malloc targets\n");
-        irp->IoStatus.Information = 0;
-        return STATUS_INSUFFICIENT_RESOURCES;
+        return driver__complete_irp(
+            irp,
+            0,
+            STATUS_INSUFFICIENT_RESOURCES
+          );
       }
     irp->IoStatus.Information =
       sizeof (aoe__mount_targets) + (count * sizeof (aoe__mount_target));
@@ -2161,21 +2147,18 @@ NTSTATUS STDCALL scan(
     wv_free(targets);
 
     KeReleaseSpinLock(&aoe__target_list_spinlock_, irql);
-    *completion = TRUE;
-    return STATUS_SUCCESS;
+    return driver__complete_irp(irp, irp->IoStatus.Information, STATUS_SUCCESS);
   }
 
-NTSTATUS STDCALL show(
-    IN PDEVICE_OBJECT dev_obj,
-    IN PIRP irp,
-    IN PIO_STACK_LOCATION io_stack_loc,
+NTSTATUS STDCALL aoe__show(
     IN struct device__type * dev,
-    OUT winvblock__bool_ptr completion
+    IN PIRP irp
   ) {
     winvblock__uint32 count;
     struct device__type * dev_walker;
     struct bus__type * bus;
     aoe__mount_disks_ptr disks;
+    PIO_STACK_LOCATION io_stack_loc = IoGetCurrentIrpStackLocation(irp);
 
     DBG("Got IOCTL_AOE_SHOW...\n");
 
@@ -2190,11 +2173,14 @@ NTSTATUS STDCALL show(
     disks = wv_malloc(sizeof *disks + (count * sizeof disks->Disk[0]));
     if (disks == NULL) {
         DBG("wv_malloc disks\n");
-        irp->IoStatus.Information = 0;
-        return STATUS_INSUFFICIENT_RESOURCES;
+        return driver__complete_irp(
+            irp,
+            0,
+            STATUS_INSUFFICIENT_RESOURCES
+          );
       }
     irp->IoStatus.Information =
-      sizeof (aoe__mount_disks) + (count * sizeof (aoe__mount_disk ));
+      sizeof (aoe__mount_disks) + (count * sizeof (aoe__mount_disk));
     disks->Count = count;
 
     count = 0;
@@ -2230,16 +2216,12 @@ NTSTATUS STDCALL show(
         )
       );
     wv_free(disks);
-    *completion = TRUE;
-    return STATUS_SUCCESS;
+    return driver__complete_irp(irp, irp->IoStatus.Information, STATUS_SUCCESS);
   }
 
-NTSTATUS STDCALL mount(
-    IN PDEVICE_OBJECT dev_obj,
-    IN PIRP irp,
-    IN PIO_STACK_LOCATION io_stack_loc,
+NTSTATUS STDCALL aoe__mount(
     IN struct device__type * dev,
-    OUT winvblock__bool_ptr completion
+    IN PIRP irp
   ) {
     winvblock__uint8_ptr buffer = irp->AssociatedIrp.SystemBuffer;
     struct aoe__disk_type_ * aoe_disk;
@@ -2259,9 +2241,11 @@ NTSTATUS STDCALL mount(
     aoe_disk = aoe__create_disk_();
     if (aoe_disk == NULL) {
         DBG("Could not create AoE disk!\n");
-        irp->IoStatus.Information = 0;
-        *completion = TRUE;
-        return STATUS_INSUFFICIENT_RESOURCES;
+        return driver__complete_irp(
+            irp,
+            0,
+            STATUS_INSUFFICIENT_RESOURCES
+          );
       }
     RtlCopyMemory(aoe_disk->ClientMac, buffer, 6);
     RtlFillMemory(aoe_disk->ServerMac, 6, 0xff);
@@ -2272,41 +2256,8 @@ NTSTATUS STDCALL mount(
     aoe_disk->disk->BootDrive = FALSE;
     aoe_disk->disk->media = disk__media_hard;
     bus__add_child(driver__bus(), aoe_disk->disk->device);
-    irp->IoStatus.Information = 0;
-    *completion = TRUE;
-    return STATUS_SUCCESS;
-  }
-
-NTSTATUS STDCALL aoe__bus_dev_ctl_dispatch(
-    IN PDEVICE_OBJECT dev_obj,
-    IN PIRP irp,
-    IN PIO_STACK_LOCATION io_stack_loc,
-    IN struct device__type * dev,
-    OUT winvblock__bool_ptr completion
-  ) {
-    NTSTATUS status = STATUS_NOT_SUPPORTED;
-
-    switch (io_stack_loc->Parameters.DeviceIoControl.IoControlCode) {
-        case IOCTL_AOE_SCAN:
-          status = scan(dev_obj, irp, io_stack_loc, dev, completion);
-          break;
-
-        case IOCTL_AOE_SHOW:
-          status = show(dev_obj, irp, io_stack_loc, dev, completion);
-          break;
 
-        case IOCTL_AOE_MOUNT:
-          status = mount(dev_obj, irp, io_stack_loc, dev, completion);
-          break;
-
-        case IOCTL_AOE_UMOUNT:
-          io_stack_loc->Parameters.DeviceIoControl.IoControlCode =
-            IOCTL_FILE_DETACH;
-          break;
-      }
-    if (*completion)
-      IoCompleteRequest(irp, IO_NO_INCREMENT);
-    return status;
+    return driver__complete_irp(irp, 0, STATUS_SUCCESS);
   }
 
 /**
index a3c6d07..024f337 100644 (file)
@@ -1,5 +1,5 @@
 /**
- * Copyright (C) 2009, Shao Miller <shao.miller@yrdsb.edu.on.ca>.
+ * Copyright (C) 2009-2010, Shao Miller <shao.miller@yrdsb.edu.on.ca>.
  * Copyright 2006-2008, V.
  * For WinAoE contact information, see http://winaoe.org/
  *
@@ -22,8 +22,7 @@
 /**
  * @file
  *
- * Protocol specifics
- *
+ * Protocol specifics.
  */
 
 #include <ntddk.h>
@@ -34,7 +33,6 @@
 #include "wv_stdlib.h"
 #include "wv_string.h"
 #include "portable.h"
-#include "irp.h"
 #include "driver.h"
 #include "device.h"
 #include "disk.h"
diff --git a/src/include/aoe_bus.h b/src/include/aoe_bus.h
deleted file mode 100644 (file)
index 1afd37f..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * Copyright (C) 2010, Shao Miller <shao.miller@yrdsb.edu.on.ca>.
- *
- * This file is part of WinVBlock, originally derived from WinAoE.
- *
- * WinVBlock is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * WinVBlock is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with WinVBlock.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _AOE_BUS_H
-#  define _AOE_BUS_H
-
-/**
- * @file
- *
- * AoE bus specifics.
- */
-
-extern struct bus__type * aoe_bus;
-extern winvblock__bool aoe_bus__create(void);
-extern void aoe_bus__free(void);
-
-#endif  /* _AOE_BUS_H */
index 845b5dd..758e961 100644 (file)
@@ -195,8 +195,6 @@ struct device__type {
     enum device__state state;
     /* Previous state of the device. */
     enum device__state old_state;
-    /* Deprecated: The mini IRP handler chain. */
-    irp__handler_chain irp_handler_chain;
     /* The next device in the parent bus' devices.  TODO: Don't do this. */
     struct device__type * next_sibling_ptr;
     /* The device operations. */
index 9a8e657..25dc8fb 100644 (file)
@@ -62,7 +62,6 @@ typedef NTSTATUS STDCALL driver__dispatch_func(
     IN PIRP
   );
 
-extern winvblock__lib_func irp__handler driver__not_supported;
 extern winvblock__lib_func NTSTATUS STDCALL driver__complete_irp(
     IN PIRP,
     IN ULONG_PTR,
diff --git a/src/include/irp.h b/src/include/irp.h
deleted file mode 100644 (file)
index e743b70..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-/**
- * Copyright (C) 2009-2010, Shao Miller <shao.miller@yrdsb.edu.on.ca>.
- *
- * This file is part of WinVBlock, derived from WinAoE.
- * For WinAoE contact information, see http://winaoe.org/
- *
- * WinVBlock is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * WinVBlock is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with WinVBlock.  If not, see <http://www.gnu.org/licenses/>.
- */
-#ifndef _irp_h
-#  define _irp_h
-
-/**
- * @file
- *
- * Handling IRPs.
- */
-
-/* An unfortunate forward declaration.  Definition resolved in device.h */
-struct device__type;
-
-/* We have lots of these, so offer a typedef for declarations. */
-typedef NTSTATUS STDCALL irp__handler(
-    IN PDEVICE_OBJECT,
-    IN PIRP,
-    IN PIO_STACK_LOCATION,
-    IN struct device__type *,
-    OUT winvblock__bool_ptr
-  );
-
-winvblock__def_struct ( irp__handling )
-{
-  winvblock__uint8 irp_major_func;
-  winvblock__uint8 irp_minor_func;
-  winvblock__bool any_major;
-  winvblock__bool any_minor;
-  irp__handler * handler;
-};
-
-winvblock__def_type ( winvblock__any_ptr, irp__handler_chain );
-
-/**
- * Register an IRP handling table with a chain (with table size)
- *
- * @v chain_ptr Pointer to IRP handler chain to attach a table to
- * @v table     Table to add
- * @v size      Size of the table to add, in bytes
- * @ret         FALSE for failure, TRUE for success
- */
-extern winvblock__lib_func winvblock__bool irp__reg_table_s (
-  IN OUT irp__handler_chain_ptr chain_ptr,
-  IN irp__handling_ptr table,
-  IN size_t size
- );
-
-/**
- * Register an IRP handling table with a chain
- *
- * @v chain_ptr Pointer to IRP handler chain to attach a table to
- * @v table     Table to add
- * @ret         FALSE for failure, TRUE for success
- */
-#  define irp__reg_table( chain_ptr, table ) \
-  irp__reg_table_s ( chain_ptr, table, sizeof ( table ) )
-
-/**
- * Un-register an IRP handling table from a chain
- *
- * @v chain_ptr Pointer to IRP handler chain to remove table from
- * @v table     Table to remove
- * @ret         FALSE for failure, TRUE for success
- */
-winvblock__lib_func winvblock__bool irp__unreg_table (
-  IN OUT irp__handler_chain_ptr chain_ptr,
-  IN irp__handling_ptr table
- );
-
-extern irp__handler irp__process;
-extern winvblock__lib_func NTSTATUS STDCALL (irp__process_with_table)(
-    IN PDEVICE_OBJECT,
-    IN PIRP,
-    const irp__handling *,
-    size_t,
-    winvblock__bool *
-  );
-
-#endif                         /* _irp_h */
index 8507c76..a5dda3f 100644 (file)
@@ -30,7 +30,6 @@
 #include "winvblock.h"
 #include "wv_stdlib.h"
 #include "portable.h"
-#include "irp.h"
 #include "driver.h"
 #include "device.h"
 #include "bus.h"
index fd749ef..0b67760 100644 (file)
@@ -29,7 +29,6 @@
 
 #include "winvblock.h"
 #include "portable.h"
-#include "irp.h"
 #include "driver.h"
 #include "device.h"
 #include "disk.h"
index 357296e..da974a1 100644 (file)
@@ -30,7 +30,6 @@
 #include "winvblock.h"
 #include "wv_stdlib.h"
 #include "portable.h"
-#include "irp.h"
 #include "driver.h"
 #include "device.h"
 #include "disk.h"
index 31fef02..82fc9cb 100644 (file)
@@ -22,8 +22,7 @@
 /**
  * @file
  *
- * Debugging specifics
- *
+ * Debugging specifics.
  */
 
 #include <ntddk.h>
@@ -37,7 +36,6 @@
 #include "winvblock.h"
 #include "wv_stdlib.h"
 #include "portable.h"
-#include "irp.h"
 #include "driver.h"
 #include "device.h"
 #include "disk.h"
index c852ec6..64a7cc8 100644 (file)
@@ -30,7 +30,6 @@
 #include "winvblock.h"
 #include "wv_stdlib.h"
 #include "portable.h"
-#include "irp.h"
 #include "driver.h"
 #include "device.h"
 #include "debug.h"
index 7ae8cd4..608cb63 100644 (file)
@@ -36,7 +36,6 @@
 
 #include "winvblock.h"
 #include "portable.h"
-#include "irp.h"
 #include "driver.h"
 #include "device.h"
 #include "disk.h"
index 365c847..c5a28b4 100644 (file)
@@ -30,7 +30,6 @@
 #include "winvblock.h"
 #include "wv_stdlib.h"
 #include "portable.h"
-#include "irp.h"
 #include "driver.h"
 #include "device.h"
 #include "disk.h"
index 323503f..f006fe4 100644 (file)
@@ -32,7 +32,6 @@
 #include "winvblock.h"
 #include "wv_stdlib.h"
 #include "portable.h"
-#include "irp.h"
 #include "driver.h"
 #include "device.h"
 #include "disk.h"
index 11b9a3a..12a2d94 100644 (file)
@@ -32,7 +32,6 @@
 
 #include "winvblock.h"
 #include "portable.h"
-#include "irp.h"
 #include "driver.h"
 #include "device.h"
 #include "disk.h"
index 588d09b..36c1089 100644 (file)
@@ -33,7 +33,6 @@
 #include "wv_stdlib.h"
 #include "wv_string.h"
 #include "portable.h"
-#include "irp.h"
 #include "driver.h"
 #include "device.h"
 #include "disk.h"
@@ -63,7 +62,6 @@ static driver__dispatch_func driver__dispatch_sys_ctl_;
 static driver__dispatch_func driver__dispatch_dev_ctl_;
 static driver__dispatch_func driver__dispatch_scsi_;
 static driver__dispatch_func driver__dispatch_pnp_;
-static driver__dispatch_func driver__dispatch_;
 static void STDCALL driver__unload_(IN PDRIVER_OBJECT);
 
 static LPWSTR STDCALL get_opt(IN LPWSTR opt_name) {
@@ -356,22 +354,6 @@ static NTSTATUS STDCALL driver__dispatch_not_supported_(
     return irp->IoStatus.Status;
   }
 
-/* IRP is not understood. */
-extern winvblock__lib_func NTSTATUS STDCALL driver__not_supported(
-    IN PDEVICE_OBJECT dev_obj,
-    IN PIRP irp,
-    IN PIO_STACK_LOCATION stack,
-    IN struct device__type * dev_ptr,
-    OUT winvblock__bool_ptr completion_ptr
-  ) {
-    NTSTATUS status = STATUS_NOT_SUPPORTED;
-
-    irp->IoStatus.Status = status;
-    IoCompleteRequest(irp, IO_NO_INCREMENT);
-    *completion_ptr = TRUE;
-    return status;
-  }
-
 /**
  * Common IRP completion routine.
  *
@@ -538,50 +520,6 @@ static NTSTATUS driver__dispatch_pnp_(
     return driver__complete_irp(irp, 0, STATUS_NOT_SUPPORTED);
   }
 
-static NTSTATUS STDCALL driver__dispatch_(
-    IN PDEVICE_OBJECT DeviceObject,
-    IN PIRP Irp
-  ) {
-    NTSTATUS status;
-    struct device__type * dev_ptr;
-
-    #ifdef DEBUGIRPS
-    Debug_IrpStart(DeviceObject, Irp);
-    #endif
-    dev_ptr = device__get(DeviceObject);
-
-    /* Check for a deleted device. */
-    if (dev_ptr->state == device__state_deleted) {
-        Irp->IoStatus.Information = 0;
-        Irp->IoStatus.Status = STATUS_NO_SUCH_DEVICE;
-        IoCompleteRequest(Irp, IO_NO_INCREMENT);
-        #ifdef DEBUGIRPS
-        Debug_IrpEnd ( Irp, STATUS_NO_SUCH_DEVICE );
-        #endif
-        return STATUS_NO_SUCH_DEVICE;
-      }
-
-    /* Enqueue the IRP for threaded devices, or process immediately. */
-    if (dev_ptr->thread) {
-        IoMarkIrpPending(Irp);
-        ExInterlockedInsertTailList(
-            &dev_ptr->irp_list,
-            /* Where IRPs can be linked. */
-            &Irp->Tail.Overlay.ListEntry,
-            &dev_ptr->irp_list_lock
-          );
-        KeSetEvent(&dev_ptr->thread_wakeup, 0, FALSE);
-        status = STATUS_PENDING;
-      } else {
-        if (dev_ptr->dispatch)
-          status = dev_ptr->dispatch(DeviceObject, Irp);
-          else
-          return driver__complete_irp(Irp, 0, STATUS_NOT_SUPPORTED);
-      }
-
-    return status;
-  }
-
 static void STDCALL driver__unload_(IN PDRIVER_OBJECT DriverObject) {
     UNICODE_STRING DosDeviceName;
 
index ea35528..e6532d7 100644 (file)
@@ -31,7 +31,6 @@
 #include "winvblock.h"
 #include "wv_stdlib.h"
 #include "portable.h"
-#include "irp.h"
 #include "driver.h"
 #include "device.h"
 #include "disk.h"
index 8a9cc35..25ea42a 100644 (file)
@@ -20,8 +20,7 @@
 /**
  * @file
  *
- * GRUB4DOS file-backed disk specifics
- *
+ * GRUB4DOS file-backed disk specifics.
  */
 
 #include <ntddk.h>
@@ -32,7 +31,6 @@
 #include "wv_stdlib.h"
 #include "wv_string.h"
 #include "portable.h"
-#include "irp.h"
 #include "driver.h"
 #include "device.h"
 #include "disk.h"
diff --git a/src/winvblock/irp.c b/src/winvblock/irp.c
deleted file mode 100644 (file)
index 5fbd768..0000000
+++ /dev/null
@@ -1,287 +0,0 @@
-/**
- * Copyright (C) 2010, Shao Miller <shao.miller@yrdsb.edu.on.ca>.
- *
- * This file is part of WinVBlock, derived from WinAoE.
- * For WinAoE contact information, see http://winaoe.org/
- *
- * WinVBlock is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * WinVBlock is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with WinVBlock.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-/**
- * @file
- *
- * Handling IRPs.
- */
-
-#include <ntddk.h>
-#include <stdlib.h>
-
-#include "winvblock.h"
-#include "wv_stdlib.h"
-#include "portable.h"
-#include "irp.h"
-#include "driver.h"
-#include "device.h"
-#include "debug.h"
-
-/* Forward declarations. */
-static device__thread_func (irp_thread);
-
-/*
- * An internal type.  A device extension will have a
- * pointer to this structure, but its type will be a void pointer
- */
-winvblock__def_struct ( handler_chain )
-{
-  /*
-   * Points to an array of irp__handlings 
-   */
-  irp__handling *table;
-  /*
-   * Total table size, in bytes 
-   */
-  size_t size;
-  /*
-   * Points to the next table in the chain or NULL
-   */
-  handler_chain_ptr next;
-};
-
-/**
- * Register an IRP handling table with a chain (with table size)
- *
- * @v chain_ptr Pointer to IRP handler chain to attach a table to
- * @v table     Table to add
- * @v size      Size of the table to add, in bytes
- * @ret         FALSE for failure, TRUE for success
- */
-winvblock__lib_func winvblock__bool
-irp__reg_table_s (
-  IN OUT irp__handler_chain_ptr chain_ptr,
-  IN irp__handling_ptr table,
-  IN size_t size
- )
-{
-  /*
-   * The type used by a device extension is opaque
-   */
-  handler_chain_ptr *link = ( handler_chain_ptr * ) chain_ptr,
-    new_link;
-
-  if ( link == NULL )
-    /*
-     * Nothing to attach to
-     */
-    return FALSE;
-  /*
-   * Allocate and attach a new link in the chain.
-   * Maybe we should use a spin-lock for this
-   */
-  new_link = wv_malloc(sizeof *new_link);
-  if ( new_link == NULL )
-    {
-      /*
-       * Really too bad
-       */
-      DBG ( "Could not allocate IRP handler chain!\n" );
-
-      return FALSE;
-    }
-  new_link->table = table;
-  /*
-   * Could sanity-check the size to be a multiple of sizeof(irp__handling)
-   */
-  new_link->size = size;
-  new_link->next = *link;
-  *link = new_link;
-  return TRUE;
-}
-
-/**
- * Un-register an IRP handling table from a chain
- *
- * @v chain_ptr Pointer to IRP handler chain to remove table from
- * @v table     Table to remove
- * @ret         FALSE for failure, TRUE for success
- */
-winvblock__lib_func winvblock__bool
-irp__unreg_table (
-  IN OUT irp__handler_chain_ptr chain_ptr,
-  IN irp__handling_ptr table
- )
-{
-  winvblock__bool done = FALSE;
-  /*
-   * The type used by a device extension is opaque
-   */
-  handler_chain_ptr *link = ( handler_chain_ptr * ) chain_ptr;
-
-  if ( link == NULL )
-    /*
-     * No chain given
-     */
-    return FALSE;
-  /*
-   * Walk the chain, looking for the given table
-   */
-  while ( *link != NULL )
-    {
-      if ( link[0]->table == table )
-       {
-         /*
-          * Remove this link in the chain
-          */
-         handler_chain_ptr next = link[0]->next;
-    wv_free(*link);
-         *link = next;
-         return TRUE;
-       }
-      link = &link[0]->next;
-    }
-
-  DBG ( "Table not found\n" );
-  return FALSE;
-}
-
-/**
- * Walk a mini IRP handling table and process matches.
- *
- * @v dev               The device to process.
- * @v irp               The IRP to process.
- * @v table             The mini IRP handling table to use to process the IRP.
- * @v table_size        The size of the mini IRP handling table, in bytes.
- * @v completion        Points to a boolean which is TRUE at IRP completion.
- * @ret                 STATUS_NOT_SUPPORTED for an unhandled IRP.
- */
-winvblock__lib_func NTSTATUS STDCALL (irp__process_with_table)(
-    IN PDEVICE_OBJECT (dev),
-    IN PIRP (irp),
-    const irp__handling * (table),
-    size_t (table_size),
-    winvblock__bool * (completion)
-  ) {
-    int (index);
-    PIO_STACK_LOCATION (io_stack_loc);
-    winvblock__bool (handles_major), (handles_minor);
-    NTSTATUS (status) = STATUS_NOT_SUPPORTED;
-
-    /* We could assert this division. */
-    index = table_size / sizeof *table;
-
-    io_stack_loc = IoGetCurrentIrpStackLocation(irp);
-    /* For each entry in the stack, in last-is-first order. */
-    while (index--) {
-        handles_major = (
-            (table[index].irp_major_func == io_stack_loc->MajorFunction) ||
-            table[index].any_major
-          );
-        handles_minor = (
-            (table[index].irp_minor_func == io_stack_loc->MinorFunction) ||
-            table[index].any_minor
-          );
-        if (handles_major && handles_minor) {
-            status = table[index].handler(
-                dev,
-                irp,
-                io_stack_loc,
-                device__get(dev),
-                                   completion
-              );
-            /* Do not process the IRP any further down the stack. */
-                 if (*completion) break;
-          } /* if handles */
-      } /* while index */
-
-    return status;
-  }
-
-/**
- * Mini IRP handling strategy.
- *
- */
-NTSTATUS STDCALL irp__process(
-    IN PDEVICE_OBJECT DeviceObject,
-    IN PIRP Irp,
-    IN PIO_STACK_LOCATION Stack,
-    IN struct device__type * dev_ptr,
-    OUT winvblock__bool_ptr completion_ptr
-  )
-  {
-    NTSTATUS status = STATUS_NOT_SUPPORTED;
-    handler_chain_ptr link;
-  
-    link = ( handler_chain_ptr ) dev_ptr->irp_handler_chain;
-  
-    while ( link != NULL )
-      {
-        status = irp__process_with_table(
-            DeviceObject,
-            Irp,
-            link->table,
-            link->size,
-            completion_ptr
-          );
-        if ( *completion_ptr )
-          break;
-        link = link->next;
-      }
-    return status;
-  }
-
-static void STDCALL (irp_thread)(IN void * (context)) {
-    struct device__type * dev = context;
-    LARGE_INTEGER (timeout);
-    PLIST_ENTRY (walker);
-
-    /* Wake up at least every second. */
-    timeout.QuadPart = -10000000LL;
-
-    /* While the device is active... */
-    while (dev->thread) {
-        /* Wait for the signal or the timeout. */
-        KeWaitForSingleObject(
-            &dev->thread_wakeup,
-            Executive,
-            KernelMode,
-            FALSE,
-            &timeout
-          );
-        KeResetEvent(&dev->thread_wakeup);
-        /* Process each IRP in the queue. */
-        while (walker = ExInterlockedRemoveHeadList(
-            &dev->irp_list,
-                                         &dev->irp_list_lock
-          )) {
-            NTSTATUS (status);
-            PIRP (irp) = CONTAINING_RECORD(walker, IRP, Tail.Overlay.ListEntry);
-            winvblock__bool (completion) = FALSE;
-
-            /* Process the IRP. */
-            status = irp__process(
-                dev->Self,
-                irp,
-                IoGetCurrentIrpStackLocation(irp),
-                dev,
-                &completion
-              );
-            #ifdef DEBUGIRPS
-            if (status != STATUS_PENDING) Debug_IrpEnd(Irp, status);
-            #endif
-          } /* while walker */
-      } /* while active */
-    /* The device has finished. */
-    dev->ops.free(dev);
-
-    return;
-  }
index 2c46fd7..9b86f57 100644 (file)
@@ -10,7 +10,7 @@ for /d %%a in (%lib%) do (
   popd\r
   )\r
 \r
-set c=debug.c driver.c irp.c probe.c registry.c winvblock.rc device.c wv_stdlib.c wv_string.c\r
+set c=debug.c driver.c probe.c registry.c winvblock.rc device.c wv_stdlib.c wv_string.c\r
 \r
 set name=WVBlk%bits%\r
 \r
index 0f1e6da..ec929a0 100644 (file)
@@ -22,8 +22,7 @@
 /**
  * @file
  *
- * Boot-time disk probing specifics
- *
+ * Boot-time disk probing specifics.
  */
 
 #include <ntddk.h>
@@ -31,7 +30,6 @@
 #include "winvblock.h"
 #include "wv_string.h"
 #include "portable.h"
-#include "irp.h"
 #include "driver.h"
 #include "device.h"
 #include "disk.h"
index 6ace133..0c56c15 100644 (file)
@@ -20,8 +20,7 @@
 /**
  * @file
  *
- * GRUB4DOS RAM disk specifics
- *
+ * GRUB4DOS RAM disk specifics.
  */
 
 #include <stdio.h>
@@ -30,7 +29,6 @@
 #include "winvblock.h"
 #include "wv_string.h"
 #include "portable.h"
-#include "irp.h"
 #include "driver.h"
 #include "device.h"
 #include "disk.h"
index 21d8578..653e0bc 100644 (file)
@@ -20,8 +20,7 @@
 /**
  * @file
  *
- * MEMDISK specifics
- *
+ * MEMDISK specifics.
  */
 
 #include <stdio.h>
@@ -30,7 +29,6 @@
 #include "winvblock.h"
 #include "wv_string.h"
 #include "portable.h"
-#include "irp.h"
 #include "driver.h"
 #include "device.h"
 #include "disk.h"
index 4ccb728..d8e82b2 100644 (file)
@@ -29,7 +29,6 @@
 #include "winvblock.h"
 #include "wv_stdlib.h"
 #include "portable.h"
-#include "irp.h"
 #include "driver.h"
 #include "device.h"
 #include "disk.h"
index 31f4e09..2434e8f 100644 (file)
@@ -24,7 +24,7 @@
 /**
  * @file
  *
- * Registry specifics
+ * Registry specifics.
  */
 
 #include <ntddk.h>
@@ -33,7 +33,6 @@
 #include "wv_stdlib.h"
 #include "portable.h"
 #include "debug.h"
-#include "irp.h"
 #include "driver.h"
 #include "registry.h"