[driver,disk] Move some disk code into disk.c
authorShao Miller <Shao.Miller@yrdsb.edu.on.ca>
Mon, 10 Jan 2011 02:57:23 +0000 (21:57 -0500)
committerShao Miller <Shao.Miller@yrdsb.edu.on.ca>
Mon, 10 Jan 2011 02:57:23 +0000 (21:57 -0500)
A new source file for WinVBlock driver disk code.

WinVBlock.dev
src/include/driver.h
src/winvblock/disk.c [new file with mode: 0644]
src/winvblock/driver.c
src/winvblock/makedriver.bat

index 45f672e..7916bc5 100644 (file)
@@ -1,7 +1,7 @@
 [Project]\r
 FileName=WinVBlock.dev\r
 Name=WinVBlock\r
-UnitCount=69\r
+UnitCount=70\r
 PchHead=-1\r
 PchSource=-1\r
 Ver=3\r
@@ -771,3 +771,13 @@ Priority=1000
 OverrideBuildCmd=0\r
 BuildCmd=\r
 \r
+[Unit70]\r
+FileName=src\winvblock\disk.c\r
+CompileCpp=1\r
+Folder=WinVBlock\r
+Compile=1\r
+Link=1\r
+Priority=1000\r
+OverrideBuildCmd=0\r
+BuildCmd=\r
+\r
index fc52e68..9cacd27 100644 (file)
@@ -51,6 +51,8 @@ extern NTSTATUS STDCALL WvDriverGetDevCapabilities(
     IN PDEVICE_OBJECT,
     IN PDEVICE_CAPABILITIES
   );
+
+/* From disk.c */
 extern NTSTATUS STDCALL WvDiskDevCtl(
     IN struct WV_DEV_T *,
     IN PIRP,
@@ -63,6 +65,7 @@ extern NTSTATUS STDCALL WvDiskPnpQueryDevText(
     IN PIRP,
     IN struct WV_DISK_T *
   );
+
 /* From bus.c */
 extern WVL_M_LIB PDEVICE_OBJECT WvBusFdo(void);
 
diff --git a/src/winvblock/disk.c b/src/winvblock/disk.c
new file mode 100644 (file)
index 0000000..8e2116d
--- /dev/null
@@ -0,0 +1,127 @@
+/**
+ * Copyright (C) 2009-2011, Shao Miller <shao.miller@yrdsb.edu.on.ca>.
+ * Copyright 2006-2008, V.
+ * For WinAoE contact information, see http://winaoe.org/
+ *
+ * This file is part of WinVBlock, 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/>.
+ */
+
+/**
+ * @file
+ *
+ * WinVBlock driver disk specifics.
+ */
+
+#include <stdio.h>
+#include <ntddk.h>
+
+#include "portable.h"
+#include "winvblock.h"
+#include "wv_stdlib.h"
+#include "irp.h"
+#include "bus.h"
+#include "device.h"
+#include "disk.h"
+#include "debug.h"
+
+NTSTATUS STDCALL WvDiskDevCtl(
+    IN WV_SP_DEV_T dev,
+    IN PIRP irp,
+    IN ULONG POINTER_ALIGNMENT code
+  ) {
+    WV_SP_DISK_T disk = disk__get_ptr(dev);
+
+    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);
+  }
+
+NTSTATUS STDCALL WvDiskPnp(
+    IN WV_SP_DEV_T dev,
+    IN PIRP irp,
+    IN UCHAR code
+  ) {
+    NTSTATUS status;
+    WV_SP_DISK_T disk = disk__get_ptr(dev);
+
+    status = WvlDiskPnp(dev->Self, irp, disk);
+    /* Note any state change. */
+    dev->OldState = disk->OldState;
+    dev->State = disk->State;
+    return status;
+  }
+
+NTSTATUS STDCALL WvDiskPnpQueryDevText(
+    IN PDEVICE_OBJECT dev_obj,
+    IN PIRP irp,
+    IN WV_SP_DISK_T disk
+  ) {
+    IN WV_SP_DEV_T dev = WvDevFromDevObj(dev_obj);
+    WCHAR (*str)[512];
+    PIO_STACK_LOCATION io_stack_loc = IoGetCurrentIrpStackLocation(irp);
+    NTSTATUS status;
+    UINT32 str_len;
+
+    /* Allocate a string buffer. */
+    str = wv_mallocz(sizeof *str);
+    if (str == NULL) {
+        DBG("wv_malloc IRP_MN_QUERY_DEVICE_TEXT\n");
+        status = STATUS_INSUFFICIENT_RESOURCES;
+        goto alloc_str;
+      }
+    /* Determine the query type. */
+    switch (io_stack_loc->Parameters.QueryDeviceText.DeviceTextType) {
+        case DeviceTextDescription:
+          str_len = swprintf(*str, WVL_M_WLIT L" Disk") + 1;
+          irp->IoStatus.Information =
+            (ULONG_PTR) wv_palloc(str_len * sizeof *str);
+          if (irp->IoStatus.Information == 0) {
+              DBG("wv_palloc DeviceTextDescription\n");
+              status = STATUS_INSUFFICIENT_RESOURCES;
+              goto alloc_info;
+            }
+          RtlCopyMemory(
+              (PWCHAR) irp->IoStatus.Information,
+              str,
+              str_len * sizeof *str
+            );
+          status = STATUS_SUCCESS;
+          goto alloc_info;
+
+        case DeviceTextLocationInformation:
+          if (disk->disk_ops.PnpQueryId) {
+              io_stack_loc->MinorFunction = IRP_MN_QUERY_ID;
+              io_stack_loc->Parameters.QueryId.IdType = BusQueryInstanceID;
+              return disk->disk_ops.PnpQueryId(dev_obj, irp, disk);
+            }
+          /* Else, fall through... */
+
+        default:
+          irp->IoStatus.Information = 0;
+          status = STATUS_NOT_SUPPORTED;
+      }
+    /* irp->IoStatus.Information not freed. */
+    alloc_info:
+
+    wv_free(str);
+    alloc_str:
+
+    return WvlIrpComplete(irp, irp->IoStatus.Information, status);
+  }
index 9207339..b38bcfc 100644 (file)
@@ -25,7 +25,6 @@
  * Driver specifics.
  */
 
-#include <stdio.h>
 #include <ntddk.h>
 #include <scsi.h>
 
@@ -440,95 +439,6 @@ NTSTATUS STDCALL WvDriverGetDevCapabilities(
     return status;
   }
 
-NTSTATUS STDCALL WvDiskDevCtl(
-    IN WV_SP_DEV_T dev,
-    IN PIRP irp,
-    IN ULONG POINTER_ALIGNMENT code
-  ) {
-    WV_SP_DISK_T disk = disk__get_ptr(dev);
-
-    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);
-  }
-
-NTSTATUS STDCALL WvDiskPnp(
-    IN WV_SP_DEV_T dev,
-    IN PIRP irp,
-    IN UCHAR code
-  ) {
-    NTSTATUS status;
-    WV_SP_DISK_T disk = disk__get_ptr(dev);
-
-    status = WvlDiskPnp(dev->Self, irp, disk);
-    /* Note any state change. */
-    dev->OldState = disk->OldState;
-    dev->State = disk->State;
-    return status;
-  }
-
-NTSTATUS STDCALL WvDiskPnpQueryDevText(
-    IN PDEVICE_OBJECT dev_obj,
-    IN PIRP irp,
-    IN WV_SP_DISK_T disk
-  ) {
-    IN WV_SP_DEV_T dev = WvDevFromDevObj(dev_obj);
-    WCHAR (*str)[512];
-    PIO_STACK_LOCATION io_stack_loc = IoGetCurrentIrpStackLocation(irp);
-    NTSTATUS status;
-    UINT32 str_len;
-
-    /* Allocate a string buffer. */
-    str = wv_mallocz(sizeof *str);
-    if (str == NULL) {
-        DBG("wv_malloc IRP_MN_QUERY_DEVICE_TEXT\n");
-        status = STATUS_INSUFFICIENT_RESOURCES;
-        goto alloc_str;
-      }
-    /* Determine the query type. */
-    switch (io_stack_loc->Parameters.QueryDeviceText.DeviceTextType) {
-        case DeviceTextDescription:
-          str_len = swprintf(*str, WVL_M_WLIT L" Disk") + 1;
-          irp->IoStatus.Information =
-            (ULONG_PTR) wv_palloc(str_len * sizeof *str);
-          if (irp->IoStatus.Information == 0) {
-              DBG("wv_palloc DeviceTextDescription\n");
-              status = STATUS_INSUFFICIENT_RESOURCES;
-              goto alloc_info;
-            }
-          RtlCopyMemory(
-              (PWCHAR) irp->IoStatus.Information,
-              str,
-              str_len * sizeof *str
-            );
-          status = STATUS_SUCCESS;
-          goto alloc_info;
-
-        case DeviceTextLocationInformation:
-          if (disk->disk_ops.PnpQueryId) {
-              io_stack_loc->MinorFunction = IRP_MN_QUERY_ID;
-              io_stack_loc->Parameters.QueryId.IdType = BusQueryInstanceID;
-              return disk->disk_ops.PnpQueryId(dev_obj, irp, disk);
-            }
-          /* Else, fall through... */
-
-        default:
-          irp->IoStatus.Information = 0;
-          status = STATUS_NOT_SUPPORTED;
-      }
-    /* irp->IoStatus.Information not freed. */
-    alloc_info:
-
-    wv_free(str);
-    alloc_str:
-
-    return WvlIrpComplete(irp, irp->IoStatus.Information, status);
-  }
-
 /**
  * Miscellaneous: Grouped memory allocation functions.
  */
index 221cbf1..8046000 100644 (file)
@@ -10,7 +10,7 @@ for /d %%a in (%lib%) do (
   popd\r
   )\r
 \r
-set c=debug.c driver.c probe.c registry.c winvblock.rc device.c wv_stdlib.c wv_string.c irp.c dummy.c bus.c\r
+set c=debug.c driver.c probe.c registry.c winvblock.rc device.c wv_stdlib.c wv_string.c irp.c dummy.c bus.c disk.c\r
 \r
 set name=WVBlk%bits%\r
 \r