[disk,libdisk] Split more non-library out of library
authorShao Miller <Shao.Miller@yrdsb.edu.on.ca>
Mon, 10 Jan 2011 06:11:48 +0000 (01:11 -0500)
committerShao Miller <Shao.Miller@yrdsb.edu.on.ca>
Mon, 10 Jan 2011 06:11:48 +0000 (01:11 -0500)
Although perhaps a bit confusing, driver.h declares
non-library code from both bus.c and disk.c, while
bus.h and disk.h declare libbus and libdisk code.

src/aoe/driver.c
src/include/disk.h
src/include/driver.h
src/winvblock/disk.c
src/winvblock/filedisk/filedisk.c
src/winvblock/libdisk/dev_ctl.c
src/winvblock/libdisk/libdisk.c
src/winvblock/libdisk/pnp.c
src/winvblock/ramdisk/ramdisk.c

index b23d45c..8701160 100644 (file)
@@ -1804,7 +1804,7 @@ static AOE_SP_DISK AoeDiskCreatePdo_(void) {
     aoe_disk = pdo->DeviceExtension;
     RtlZeroMemory(aoe_disk, sizeof *aoe_disk);
     /* Populate non-zero device defaults. */
-    WvDiskInit(aoe_disk->disk);
+    WvlDiskInit(aoe_disk->disk);
     WvDevInit(aoe_disk->Dev);
     aoe_disk->Dev->Ops.Free = AoeDiskFree_;
     aoe_disk->Dev->ext = aoe_disk->disk;
@@ -1872,7 +1872,7 @@ static NTSTATUS AoeIrpPower_(
         return WvlIrpComplete(irp, 0, STATUS_NO_SUCH_DEVICE);
       }
     /* Use the disk routine. */
-    return WvDiskIrpPower(aoe_disk->Dev, irp);
+    return WvlDiskPower(dev_obj, irp, aoe_disk->disk);
   }
 
 /* Handle an IRP_MJ_CREATE or IRP_MJ_CLOSE IRP. */
@@ -1910,7 +1910,7 @@ static NTSTATUS AoeIrpSysCtl_(
     if (aoe_disk->Dev->State == WvDevStateDeleted)
       return WvlIrpComplete(irp, 0, STATUS_NO_SUCH_DEVICE);
     /* Use the disk routine. */
-    return WvDiskIrpSysCtl(aoe_disk->Dev, irp);
+    return WvlDiskSysCtl(dev_obj, irp, aoe_disk->disk);
   }
 
 /* Handle an IRP_MJ_DEVICE_CONTROL IRP. */
index 5ebcff1..49eb991 100644 (file)
@@ -18,8 +18,8 @@
  * You should have received a copy of the GNU General Public License
  * along with WinVBlock.  If not, see <http://www.gnu.org/licenses/>.
  */
-#ifndef WV_M_DISK_H_
-#  define WV_M_DISK_H_
+#ifndef WVL_M_DISK_H_
+#  define WVL_M_DISK_H_
 
 /**
  * @file
@@ -48,9 +48,6 @@ typedef enum WVL_DISK_STATE {
 typedef char WVL_A_DISK_BOOT_SECT[512];
 typedef WVL_A_DISK_BOOT_SECT * WVL_AP_DISK_BOOT_SECT;
 
-extern BOOLEAN WvDiskIsRemovable[WvlDiskMediaTypes];
-extern PWCHAR WvDiskCompatIds[WvlDiskMediaTypes];
-
 typedef enum WVL_DISK_IO_MODE {
     WvlDiskIoModeRead,
     WvlDiskIoModeWrite,
@@ -83,7 +80,7 @@ typedef NTSTATUS STDCALL WVL_F_DISK_PNP(
 typedef WVL_F_DISK_PNP * WVL_FP_DISK_PNP;
 
 /**
- * I/O Request.
+ * Disk I/O routine.
  *
  * @v disk              Points to the disk's structure.
  * @v mode              Read/write mode.
@@ -91,6 +88,7 @@ typedef WVL_F_DISK_PNP * WVL_FP_DISK_PNP;
  * @v sector_count      Number of sectors to work with.
  * @v buffer            Buffer to read/write sectors to/from.
  * @v irp               Interrupt request packet for this request.
+ * @ret NTSTATUS        The status of the operation.
  */
 typedef NTSTATUS STDCALL WVL_F_DISK_IO(
     IN WV_SP_DISK_T,
@@ -101,24 +99,17 @@ typedef NTSTATUS STDCALL WVL_F_DISK_IO(
     IN PIRP
   );
 typedef WVL_F_DISK_IO * WVL_FP_DISK_IO;
+extern WVL_M_LIB WVL_F_DISK_IO WvlDiskIo;
 
 /**
  * Maximum transfer length response routine.
  *
- * @v disk_ptr        The disk being queried.
+ * @v disk            The disk being queried.
  * @ret UINT32        The maximum transfer length.
  */
 typedef UINT32 WV_F_DISK_MAX_XFER_LEN(IN WV_SP_DISK_T);
 typedef WV_F_DISK_MAX_XFER_LEN * WV_FP_DISK_MAX_XFER_LEN;
-
-/**
- * Disk initialization routine.
- *
- * @v disk_ptr        The disk device being initialized.
- * @ret BOOLEAN       FALSE if initialization failed, otherwise TRUE
- */
-typedef BOOLEAN STDCALL WV_F_DISK_INIT(IN WV_SP_DISK_T);
-typedef WV_F_DISK_INIT * WV_FP_DISK_INIT;
+extern WVL_M_LIB WV_F_DISK_MAX_XFER_LEN WvlDiskMaxXferLen;
 
 /**
  * Disk close routine.
@@ -199,41 +190,42 @@ typedef struct WVL_DISK_MBR WVL_S_DISK_MBR, * WVL_SP_DISK_MBR;
 #  pragma pack()
 #endif
 
-extern WVL_M_LIB WVL_F_DISK_IO WvlDiskIo;
-extern WV_F_DISK_MAX_XFER_LEN disk__max_xfer_len;
-
-/**
- * Attempt to guess a disk's geometry.
- *
- * @v boot_sect_ptr     The MBR or VBR with possible geometry clues.
- * @v disk_ptr          The disk to set the geometry for.
- */
-extern WVL_M_LIB VOID disk__guess_geometry(
-    IN WVL_AP_DISK_BOOT_SECT,
-    IN OUT WV_SP_DISK_T disk_ptr
+/** IRP-related. */
+extern WVL_M_LIB NTSTATUS STDCALL WvlDiskPower(
+    IN PDEVICE_OBJECT,
+    IN PIRP,
+    IN WV_SP_DISK_T
   );
-
-extern WVL_M_LIB NTSTATUS STDCALL WvlDiskCreatePdo(
-    IN PDRIVER_OBJECT,
-    IN SIZE_T,
-    IN WVL_E_DISK_MEDIA_TYPE,
-    OUT PDEVICE_OBJECT *
+extern WVL_M_LIB NTSTATUS STDCALL WvlDiskSysCtl(
+    IN PDEVICE_OBJECT,
+    IN PIRP,
+    IN WV_SP_DISK_T
   );
-extern WVL_M_LIB VOID STDCALL WvDiskInit(IN WV_SP_DISK_T);
-
-/* IRP-related. */
-extern WVL_M_LIB WV_F_DEV_DISPATCH WvDiskIrpPower;
-extern WVL_M_LIB WV_F_DEV_DISPATCH WvDiskIrpSysCtl;
-/* IRP_MJ_DEVICE_CONTROL dispatcher from disk/dev_ctl.c */
+/* IRP_MJ_DEVICE_CONTROL dispatcher from libdisk/dev_ctl.c */
 extern WVL_M_LIB NTSTATUS STDCALL WvlDiskDevCtl(
     IN WV_SP_DISK_T,
     IN PIRP,
     IN ULONG POINTER_ALIGNMENT
   );
-/* IRP_MJ_SCSI dispatcher from disk/scsi.c */
+/* IRP_MJ_SCSI dispatcher from libdisk/scsi.c */
 extern WVL_M_LIB WVL_F_DISK_SCSI WvlDiskScsi;
-/* IRP_MJ_PNP dispatcher from disk/pnp.c */
+/* IRP_MJ_PNP dispatcher from libdisk/pnp.c */
 extern WVL_M_LIB WVL_F_DISK_PNP WvlDiskPnp;
 
+/** General. */
+extern WVL_M_LIB NTSTATUS STDCALL WvlDiskCreatePdo(
+    IN PDRIVER_OBJECT,
+    IN SIZE_T,
+    IN WVL_E_DISK_MEDIA_TYPE,
+    OUT PDEVICE_OBJECT *
+  );
+extern WVL_M_LIB VOID WvlDiskGuessGeometry(
+    IN WVL_AP_DISK_BOOT_SECT,
+    IN OUT WV_SP_DISK_T
+  );
+extern WVL_M_LIB VOID STDCALL WvlDiskInit(IN OUT WV_SP_DISK_T);
+/* Objects. */
+extern WVL_M_LIB BOOLEAN WvlDiskIsRemovable[WvlDiskMediaTypes];
+extern WVL_M_LIB PWCHAR WvlDiskCompatIds[WvlDiskMediaTypes];
 
-#endif  /* WV_M_DISK_H_ */
+#endif  /* WVL_M_DISK_H_ */
index 9cacd27..5c4b707 100644 (file)
@@ -46,13 +46,18 @@ typedef struct WV_DEV_EXT {
     struct WV_DEV_T * device;
   } WV_S_DEV_EXT, * WV_SP_DEV_EXT;
 
-extern BOOLEAN STDCALL WvBusAddDev(IN WV_SP_DEV_T);
+/* Haven't found a better place for this, yet. */
 extern NTSTATUS STDCALL WvDriverGetDevCapabilities(
     IN PDEVICE_OBJECT,
     IN PDEVICE_CAPABILITIES
   );
 
+/* From bus.c */
+extern WVL_M_LIB PDEVICE_OBJECT WvBusFdo(void);
+extern BOOLEAN STDCALL WvBusAddDev(IN WV_SP_DEV_T);
 /* From disk.c */
+extern NTSTATUS STDCALL WvDiskPower(IN struct WV_DEV_T *, IN PIRP);
+extern NTSTATUS STDCALL WvDiskSysCtl(IN struct WV_DEV_T *, IN PIRP);
 extern NTSTATUS STDCALL WvDiskDevCtl(
     IN struct WV_DEV_T *,
     IN PIRP,
@@ -66,9 +71,6 @@ extern NTSTATUS STDCALL WvDiskPnpQueryDevText(
     IN struct WV_DISK_T *
   );
 
-/* From bus.c */
-extern WVL_M_LIB PDEVICE_OBJECT WvBusFdo(void);
-
 /**
  * Miscellaneous: Grouped memory allocation functions.
  */
index 8e2116d..1ab4efb 100644 (file)
 #include "winvblock.h"
 #include "wv_stdlib.h"
 #include "irp.h"
+#include "driver.h"
 #include "bus.h"
 #include "device.h"
 #include "disk.h"
 #include "debug.h"
 
+/** Private declarations. */
+static WV_F_DEV_FREE WvDiskDevFree_;
+
+/* Device IRP major function dispatch table. */
+static WV_S_DEV_IRP_MJ WvDiskIrpMj_ = {
+    WvDiskPower,
+    WvDiskSysCtl,
+    WvDiskDevCtl,
+    WvDiskScsi,
+    WvDiskPnp,
+  };
+
+/** Exports. */
+NTSTATUS STDCALL WvDiskPower(IN WV_SP_DEV_T dev, IN PIRP irp) {
+    WV_SP_DISK_T disk = disk__get_ptr(dev);
+
+    return WvlDiskPower(dev->Self, irp, disk);
+  }
+
+NTSTATUS STDCALL WvDiskSysCtl(IN WV_SP_DEV_T dev, IN PIRP irp) {
+    WV_SP_DISK_T disk = disk__get_ptr(dev);
+
+    return WvlDiskSysCtl(dev->Self, irp, disk);
+  }
+
 NTSTATUS STDCALL WvDiskDevCtl(
     IN WV_SP_DEV_T dev,
     IN PIRP irp,
@@ -125,3 +151,16 @@ NTSTATUS STDCALL WvDiskPnpQueryDevText(
 
     return WvlIrpComplete(irp, irp->IoStatus.Information, status);
   }
+
+/** Private. */
+
+/**
+ * Default disk deletion operation.
+ *
+ * @v dev               Points to the disk device to delete.
+ */
+static VOID STDCALL WvDiskDevFree_(IN WV_SP_DEV_T dev) {
+    WV_SP_DISK_T disk = disk__get_ptr(dev);
+
+    wv_free(disk);
+  }
index 7d95ef9..3e1c9e4 100644 (file)
@@ -100,7 +100,7 @@ static NTSTATUS STDCALL WvFilediskIo_(
           );
       }
     if (!start_sector)
-      disk__guess_geometry((WVL_AP_DISK_BOOT_SECT) buffer, disk_ptr);
+      WvlDiskGuessGeometry((WVL_AP_DISK_BOOT_SECT) buffer, disk_ptr);
     irp->IoStatus.Information = sector_count * disk_ptr->SectorSize;
     irp->IoStatus.Status = status;
     IoCompleteRequest(irp, IO_NO_INCREMENT);
@@ -144,12 +144,12 @@ static NTSTATUS STDCALL WvFilediskPnpQueryId_(
         case BusQueryHardwareIDs:
           swprintf(
               *buf + swprintf(*buf, hw_ids[disk->Media]) + 1,
-              WvDiskCompatIds[disk->Media]
+              WvlDiskCompatIds[disk->Media]
             );
           break;
 
         case BusQueryCompatibleIDs:
-          swprintf(*buf, WvDiskCompatIds[disk->Media]);
+          swprintf(*buf, WvlDiskCompatIds[disk->Media]);
 
         default:
           DBG("Unknown query type %d for %p!\n", query_type, filedisk);
@@ -333,8 +333,8 @@ WV_SP_FILEDISK_T STDCALL WvFilediskCreatePdo(
     IN WVL_E_DISK_MEDIA_TYPE MediaType
   ) {
     static WV_S_DEV_IRP_MJ irp_mj = {
-        WvDiskIrpPower,
-        WvDiskIrpSysCtl,
+        WvDiskPower,
+        WvDiskSysCtl,
         WvDiskDevCtl,
         WvDiskScsi,
         WvDiskPnp,
@@ -359,7 +359,7 @@ WV_SP_FILEDISK_T STDCALL WvFilediskCreatePdo(
 
     filedisk = pdo->DeviceExtension;
     RtlZeroMemory(filedisk, sizeof *filedisk);
-    WvDiskInit(filedisk->disk);
+    WvlDiskInit(filedisk->disk);
     WvDevInit(filedisk->Dev);
     filedisk->Dev->Ops.Free = WvFilediskFree_;
     filedisk->Dev->Ops.Close = WvFilediskClose_;
index 032e283..054e84b 100644 (file)
@@ -67,7 +67,7 @@ static NTSTATUS STDCALL WvlDiskDevCtlStorageQueryProp_(
         storage_adapter_desc.Version = sizeof (STORAGE_ADAPTER_DESCRIPTOR);
         storage_adapter_desc.Size = sizeof (STORAGE_ADAPTER_DESCRIPTOR);
         storage_adapter_desc.MaximumTransferLength =
-          disk__max_xfer_len(disk);
+          WvlDiskMaxXferLen(disk);
         #if 0
         storage_adapter_desc.MaximumTransferLength = SECTORSIZE * POOLSIZE;
         #endif
@@ -100,7 +100,7 @@ static NTSTATUS STDCALL WvlDiskDevCtlStorageQueryProp_(
         storage_dev_desc.Size = sizeof (STORAGE_DEVICE_DESCRIPTOR);
         storage_dev_desc.DeviceType = DIRECT_ACCESS_DEVICE;
         storage_dev_desc.DeviceTypeModifier = 0;
-        storage_dev_desc.RemovableMedia = WvDiskIsRemovable[disk->Media];
+        storage_dev_desc.RemovableMedia = WvlDiskIsRemovable[disk->Media];
         storage_dev_desc.CommandQueueing = FALSE;
         storage_dev_desc.VendorIdOffset = 0;
         storage_dev_desc.ProductIdOffset = 0;
index f91cd31..e9eb036 100644 (file)
@@ -44,62 +44,37 @@ static long long __divdi3(long long u, long long v) {
 #endif
 
 /** Exports. */
-BOOLEAN WvDiskIsRemovable[WvlDiskMediaTypes] = { TRUE, FALSE, TRUE };
-PWCHAR WvDiskCompatIds[WvlDiskMediaTypes] = {
+WVL_M_LIB BOOLEAN WvlDiskIsRemovable[WvlDiskMediaTypes] = {TRUE, FALSE, TRUE};
+WVL_M_LIB PWCHAR WvlDiskCompatIds[WvlDiskMediaTypes] = {
     L"GenSFloppy",
     L"GenDisk",
     L"GenCdRom"
   };
 
-/** Private. */
-static WV_F_DEV_FREE WvDiskDevFree_;
-static WV_F_DISK_CLOSE WvDiskDefaultClose_;
-
-/* Device IRP major function dispatch table. */
-static WV_S_DEV_IRP_MJ WvDiskIrpMj_ = {
-    WvDiskIrpPower,
-    WvDiskIrpSysCtl,
-    WvDiskDevCtl,
-    WvDiskScsi,
-    WvDiskPnp,
-  };
-
-WVL_M_LIB UCHAR STDCALL WvlDiskUnitNum(IN WV_SP_DISK_T disk) {
-    return disk->disk_ops.UnitNum ? disk->disk_ops.UnitNum(disk) : 0;
-  }
-
-static UINT32 WvDiskDefaultMaxXferLen_(IN WV_SP_DISK_T disk) {
-    return 1024 * 1024;
-  }
-
-/* Initialize a disk. */
-static BOOLEAN STDCALL WvDiskDevInit_(IN WV_SP_DEV_T dev) {
-    return TRUE;
-  }
-
-static VOID STDCALL WvDiskDevClose_(IN WV_SP_DEV_T dev) {
-    WV_SP_DISK_T disk = disk__get_ptr(dev);
-
-    /* Use the disk operation, if there is one. */
-    if (disk->disk_ops.Close)
-      disk->disk_ops.Close(disk);
-    return;
-  }
-
-static VOID STDCALL WvDiskDefaultClose_(IN WV_SP_DISK_T disk) {
-    return;
+/* Fetch a disk's unit number.  Defaults to 0. */
+WVL_M_LIB UCHAR STDCALL WvlDiskUnitNum(IN WV_SP_DISK_T Disk) {
+    return Disk->disk_ops.UnitNum ? Disk->disk_ops.UnitNum(Disk) : 0;
   }
 
-WVL_M_LIB NTSTATUS STDCALL WvDiskIrpPower(IN WV_SP_DEV_T dev, IN PIRP irp) {
-    PoStartNextPowerIrp(irp);
-    return WvlIrpComplete(irp, 0, STATUS_NOT_SUPPORTED);
+/* Handle an IRP_MJ_POWER IRP. */
+WVL_M_LIB NTSTATUS STDCALL WvlDiskPower(
+    IN PDEVICE_OBJECT DevObj,
+    IN PIRP Irp,
+    IN WV_SP_DISK_T Disk
+  ) {
+    PoStartNextPowerIrp(Irp);
+    return WvlIrpComplete(Irp, 0, STATUS_NOT_SUPPORTED);
   }
 
-WVL_M_LIB NTSTATUS STDCALL WvDiskIrpSysCtl(IN WV_SP_DEV_T dev, IN PIRP irp) {
-    return WvlIrpComplete(irp, 0, irp->IoStatus.Status);
+/* Handle an IRP_MJ_SYSTEM_CONTROL IRP. */
+WVL_M_LIB NTSTATUS STDCALL WvlDiskSysCtl(
+    IN PDEVICE_OBJECT DevObj,
+    IN PIRP Irp,
+    IN WV_SP_DISK_T Disk
+  ) {
+    return WvlIrpComplete(Irp, 0, Irp->IoStatus.Status);
   }
 
-
 /**
  * Create a disk PDO.
  *
@@ -115,8 +90,11 @@ WVL_M_LIB NTSTATUS STDCALL WvlDiskCreatePdo(
     OUT PDEVICE_OBJECT * Pdo
   ) {
     /* Floppy, hard disk, optical disc specifics. */
-    static const DEVICE_TYPE disk_types[WvlDiskMediaTypes] =
-      { FILE_DEVICE_DISK, FILE_DEVICE_DISK, FILE_DEVICE_CD_ROM };
+    static const DEVICE_TYPE disk_types[WvlDiskMediaTypes] = {
+        FILE_DEVICE_DISK,
+        FILE_DEVICE_DISK,
+        FILE_DEVICE_CD_ROM
+      };
     static const UINT32 characteristics[WvlDiskMediaTypes] = {
         FILE_REMOVABLE_MEDIA | FILE_FLOPPY_DISKETTE,
         0,
@@ -178,60 +156,15 @@ WVL_M_LIB NTSTATUS STDCALL WvlDiskCreatePdo(
     return status;
   }
 
-/**
- * Create a disk PDO filled with the given disk parameters.
- *
- * @v dev_ptr           Populate PDO dev. ext. space from these details.
- * @ret dev_obj_ptr     Points to the new PDO, or is NULL upon failure.
- *
- * Returns a Physical Device Object pointer on success, NULL for failure.
- */
-static PDEVICE_OBJECT STDCALL WvDiskCreatePdo_(IN WV_SP_DEV_T dev_ptr) {
-    /* Used for pointing to disk details. */
-    WV_SP_DISK_T disk_ptr;
-    /* Status of the last operation. */
-    NTSTATUS status;
-    /* The new node's physical device object (PDO). */
-    PDEVICE_OBJECT dev_obj_ptr;
-  
-    DBG("Creating PDO for dev %p...\n", dev_ptr);
-
-    /* Point to the disk details provided. */
-    disk_ptr = disk__get_ptr(dev_ptr);
-
-    /* Create the disk PDO. */
-    status = WvlDiskCreatePdo(
-        disk_ptr->DriverObj,
-        sizeof (WV_S_DEV_EXT),
-        disk_ptr->Media,
-        &dev_obj_ptr
-      );
-    if (!NT_SUCCESS(status)) {
-        WvlError("WvlDiskCreatePdo", status);
-        return NULL;
-      }
-
-    /* Set associations for the PDO, device, disk. */
-    WvDevForDevObj(dev_obj_ptr, dev_ptr);
-    dev_ptr->Self = dev_obj_ptr;
-
-    /* Some device parameters. */
-    dev_obj_ptr->Flags |= DO_DIRECT_IO;         /* FIXME? */
-    dev_obj_ptr->Flags |= DO_POWER_INRUSH;      /* FIXME? */
-
-    DBG("Done.\n");
-    return dev_obj_ptr;
-  }
-
 /*
- * WV_S_DISK_FAT_EXTRA and WV_S_DISK_FAT_SUPER taken from
+ * WVL_S_DISK_FAT_EXTRA and WVL_S_DISK_FAT_SUPER taken from
  * syslinux/memdisk/setup.c by H. Peter Anvin.  Licensed under the terms
  * of the GNU General Public License version 2 or later.
  */
 #ifdef _MSC_VER
 #  pragma pack(1)
 #endif
-struct WV_DISK_FAT_EXTRA {
+struct WVL_DISK_FAT_EXTRA_ {
     UCHAR bs_drvnum;
     UCHAR bs_resv1;
     UCHAR bs_bootsig;
@@ -239,9 +172,10 @@ struct WV_DISK_FAT_EXTRA {
     char bs_vollab[11];
     char bs_filsystype[8];
   } __attribute__((packed));
-typedef struct WV_DISK_FAT_EXTRA WV_S_DISK_FAT_EXTRA, * WV_SP_DISK_FAT_EXTRA;
+typedef struct WVL_DISK_FAT_EXTRA_
+  WVL_S_DISK_FAT_EXTRA_, * WVL_SP_DISK_FAT_EXTRA_;
 
-struct WV_DISK_FAT_SUPER {
+struct WVL_DISK_FAT_SUPER_ {
     UCHAR bs_jmpboot[3];
     char bs_oemname[8];
     UINT16 bpb_bytspersec;
@@ -257,7 +191,7 @@ struct WV_DISK_FAT_SUPER {
     UINT32 bpb_hiddsec;
     UINT32 bpb_totsec32;
     union {
-        struct { WV_S_DISK_FAT_EXTRA extra; } fat16;
+        struct { WVL_S_DISK_FAT_EXTRA_ extra; } fat16;
         struct {
             UINT32 bpb_fatsz32;
             UINT16 bpb_extflags;
@@ -267,11 +201,12 @@ struct WV_DISK_FAT_SUPER {
             UINT16 bpb_bkbootsec;
             char bpb_reserved[12];
             /* Clever, eh?  Same fields, different offset... */
-            WV_S_DISK_FAT_EXTRA extra;
+            WVL_S_DISK_FAT_EXTRA_ extra;
           } fat32 __attribute__((packed));
       } x;
   } __attribute__((__packed__));
-typedef struct WV_DISK_FAT_SUPER WV_S_DISK_FAT_SUPER, * WV_SP_DISK_FAT_SUPER;
+typedef struct WVL_DISK_FAT_SUPER_
+  WVL_S_DISK_FAT_SUPER_, * WVL_SP_DISK_FAT_SUPER_;
 #ifdef _MSC_VER
 #  pragma pack()
 #endif
@@ -279,17 +214,17 @@ typedef struct WV_DISK_FAT_SUPER WV_S_DISK_FAT_SUPER, * WV_SP_DISK_FAT_SUPER;
 /**
  * Attempt to guess a disk's geometry.
  *
- * @v boot_sect_ptr     The MBR or VBR with possible geometry clues.
- * @v disk_ptr          The disk to set the geometry for.
+ * @v BootSect          The MBR or VBR with possible geometry clues.
+ * @v Disk              The disk to set the geometry for.
  */
-WVL_M_LIB VOID disk__guess_geometry(
-    IN WVL_AP_DISK_BOOT_SECT boot_sect_ptr,
-    IN OUT WV_SP_DISK_T disk_ptr
+WVL_M_LIB VOID WvlDiskGuessGeometry(
+    IN WVL_AP_DISK_BOOT_SECT BootSect,
+    IN OUT WV_SP_DISK_T Disk
   ) {
     UINT16 heads = 0, sects_per_track = 0, cylinders;
     WVL_SP_DISK_MBR as_mbr;
 
-    if ((boot_sect_ptr == NULL) || (disk_ptr == NULL))
+    if ((BootSect == NULL) || (Disk == NULL))
       return;
 
     /*
@@ -303,8 +238,8 @@ WVL_M_LIB VOID disk__guess_geometry(
          * enough like one, use geometry from that.  This takes care of
          * megafloppy images and unpartitioned hard disks. 
          */
-        WV_SP_DISK_FAT_EXTRA extra = NULL;
-        WV_SP_DISK_FAT_SUPER fs = (WV_SP_DISK_FAT_SUPER) boot_sect_ptr;
+        WVL_SP_DISK_FAT_EXTRA_ extra = NULL;
+        WVL_SP_DISK_FAT_SUPER_ fs = (WVL_SP_DISK_FAT_SUPER_) BootSect;
   
         if (
             (fs->bpb_media == 0xf0 || fs->bpb_media >= 0xf8) &&
@@ -333,7 +268,7 @@ WVL_M_LIB VOID disk__guess_geometry(
      * If we couldn't parse a FAT superblock, try checking MBR params.
      * Logic derived from syslinux/memdisk/setup.c by H. Peter Anvin.
      */
-    as_mbr = (WVL_SP_DISK_MBR) boot_sect_ptr;
+    as_mbr = (WVL_SP_DISK_MBR) BootSect;
     if (
         (heads == 0 ) &&
         (sects_per_track == 0) &&
@@ -372,65 +307,50 @@ WVL_M_LIB VOID disk__guess_geometry(
     if (!sects_per_track)
       sects_per_track = 63;
     /* Set params that are not already filled. */
-    if (!disk_ptr->Heads)
-      disk_ptr->Heads = heads;
-    if (!disk_ptr->Sectors)
-      disk_ptr->Sectors = sects_per_track;
-    if (!disk_ptr->Cylinders)
-      disk_ptr->Cylinders = disk_ptr->LBADiskSize / (heads * sects_per_track);
+    if (!Disk->Heads)
+      Disk->Heads = heads;
+    if (!Disk->Sectors)
+      Disk->Sectors = sects_per_track;
+    if (!Disk->Cylinders)
+      Disk->Cylinders = Disk->LBADiskSize / (heads * sects_per_track);
   }
 
 /**
  * Initialize disk defaults.
  *
- * @v disk              The disk to initialize.
+ * @v Disk              The disk to initialize.
  */
-WVL_M_LIB VOID STDCALL WvDiskInit(IN WV_SP_DISK_T disk) {
-    RtlZeroMemory(disk, sizeof *disk);
-    /* Populate non-zero device defaults. */
-    disk->disk_ops.MaxXferLen = WvDiskDefaultMaxXferLen_;
-    disk->disk_ops.Close = WvDiskDefaultClose_;
-
+WVL_M_LIB VOID STDCALL WvlDiskInit(IN OUT WV_SP_DISK_T Disk) {
+    RtlZeroMemory(Disk, sizeof *Disk);
     return;
   }
 
-/**
- * Default disk deletion operation.
- *
- * @v dev               Points to the disk device to delete.
- */
-static VOID STDCALL WvDiskDevFree_(IN WV_SP_DEV_T dev) {
-    WV_SP_DISK_T disk = disk__get_ptr(dev);
-
-    wv_free(disk);
-  }
-
-/* See header for details. */
+/* See WVL_F_DISK_IO in the header for details. */
 WVL_M_LIB NTSTATUS STDCALL WvlDiskIo(
-    IN WV_SP_DISK_T disk,
-    IN WVL_E_DISK_IO_MODE mode,
-    IN LONGLONG start_sector,
-    IN UINT32 sector_count,
-    IN PUCHAR buffer,
-    IN PIRP irp
+    IN WV_SP_DISK_T Disk,
+    IN WVL_E_DISK_IO_MODE Mode,
+    IN LONGLONG StartSector,
+    IN UINT32 SectorCount,
+    IN PUCHAR Buffer,
+    IN PIRP Irp
   ) {
-    if (disk->disk_ops.Io) {
-        return disk->disk_ops.Io(
-            disk,
-            mode,
-            start_sector,
-            sector_count,
-            buffer,
-            irp
+    if (Disk->disk_ops.Io) {
+        return Disk->disk_ops.Io(
+            Disk,
+            Mode,
+            StartSector,
+            SectorCount,
+            Buffer,
+            Irp
           );
       }
-    return WvlIrpComplete(irp, 0, STATUS_DRIVER_INTERNAL_ERROR);
+    return WvlIrpComplete(Irp, 0, STATUS_DRIVER_INTERNAL_ERROR);
   }
 
-/* See header for details. */
-UINT32 disk__max_xfer_len(IN WV_SP_DISK_T disk) {
+/* See WVL_F_DISK_MAX_XFER_LEN in the header for details. */
+WVL_M_LIB UINT32 WvlDiskMaxXferLen(IN WV_SP_DISK_T Disk) {
     /* Use the disk operation, if there is one. */
-    if (disk->disk_ops.MaxXferLen)
-      return disk->disk_ops.MaxXferLen(disk);
-    return WvDiskDefaultMaxXferLen_(disk);
+    if (Disk->disk_ops.MaxXferLen)
+      return Disk->disk_ops.MaxXferLen(Disk);
+    return 1024 * 1024;
   }
index 6fe5096..c958e1e 100644 (file)
@@ -177,7 +177,7 @@ static NTSTATUS STDCALL WvlDiskPnpQueryCapabilities_(
     DeviceCapabilities->D3Latency = 0;
     DeviceCapabilities->EjectSupported = FALSE;
     DeviceCapabilities->HardwareDisabled = FALSE;
-    DeviceCapabilities->Removable = WvDiskIsRemovable[disk->Media];
+    DeviceCapabilities->Removable = WvlDiskIsRemovable[disk->Media];
     DeviceCapabilities->SurpriseRemovalOK = FALSE;
     DeviceCapabilities->UniqueID = FALSE;
     DeviceCapabilities->SilentInstall = FALSE;
index 91a9380..d58d384 100644 (file)
@@ -138,12 +138,12 @@ static NTSTATUS STDCALL WvRamdiskPnpQueryId_(
         case BusQueryHardwareIDs:
           swprintf(
               *buf + swprintf(*buf, hw_ids[disk->Media]) + 1,
-              WvDiskCompatIds[disk->Media]
+              WvlDiskCompatIds[disk->Media]
             );
           break;
 
         case BusQueryCompatibleIDs:
-          swprintf(*buf, WvDiskCompatIds[disk->Media]);
+          swprintf(*buf, WvlDiskCompatIds[disk->Media]);
           break;
 
         default:
@@ -187,8 +187,8 @@ WV_SP_RAMDISK_T STDCALL WvRamdiskCreatePdo(
     IN WVL_E_DISK_MEDIA_TYPE MediaType
   ) {
     static WV_S_DEV_IRP_MJ irp_mj = {
-        WvDiskIrpPower,
-        WvDiskIrpSysCtl,
+        WvDiskPower,
+        WvDiskSysCtl,
         WvDiskDevCtl,
         WvDiskScsi,
         WvDiskPnp,
@@ -213,7 +213,7 @@ WV_SP_RAMDISK_T STDCALL WvRamdiskCreatePdo(
 
     ramdisk = pdo->DeviceExtension;
     RtlZeroMemory(ramdisk, sizeof *ramdisk);
-    WvDiskInit(ramdisk->disk);
+    WvlDiskInit(ramdisk->disk);
     WvDevInit(ramdisk->Dev);
     ramdisk->Dev->Ops.Free = WvRamdiskFree_;
     ramdisk->Dev->ext = ramdisk->disk;