[device] Introduce device__get function
authorShao Miller <Shao.Miller@yrdsb.edu.on.ca>
Wed, 8 Dec 2010 07:06:43 +0000 (02:06 -0500)
committerShao Miller <Shao.Miller@yrdsb.edu.on.ca>
Wed, 8 Dec 2010 07:06:43 +0000 (02:06 -0500)
Use this new device__get() to get a 'device' pointer from
a 'PDEVICE_OBJECT' instead of the old casting.  We still
need to change the casting used when _setting_ it, though.

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

index aee7cb1..cba164f 100644 (file)
@@ -190,4 +190,6 @@ struct _device__type
   winvblock__any_ptr ext;
 };
 
+extern winvblock__lib_func device__type_ptr device__get(PDEVICE_OBJECT);
+
 #endif                         /* _device_h */
index edb94ee..7a92c81 100644 (file)
@@ -350,7 +350,7 @@ static NTSTATUS STDCALL (bus_dispatch)(
         dev,
         irp,
         IoGetCurrentIrpStackLocation(irp),
-        ((driver__dev_ext_ptr) dev->DeviceExtension)->device,
+        device__get(dev),
         &completion
       );
     /* Fall through to the bus defaults, if needed. */
@@ -557,22 +557,16 @@ static void STDCALL free_bus(IN device__type_ptr dev_ptr)
   }
 
 /**
- * Get a pointer to the boot bus device
+ * Get a pointer to the boot bus device.
  *
- * @ret         A pointer to the boot bus, or NULL
+ * @ret         A pointer to the boot bus, or NULL.
  */
-winvblock__lib_func bus__type_ptr
-bus__boot (
-  void
- )
-{
-  driver__dev_ext_ptr dev_ext_ptr;
-
-  if ( !boot_bus_fdo )
-    {
-      DBG ( "No boot bus device!\n" );
-      return NULL;
-    }
-  dev_ext_ptr = ( driver__dev_ext_ptr ) boot_bus_fdo->DeviceExtension;
-  return bus__get_ptr ( dev_ext_ptr->device );
-}
+winvblock__lib_func bus__type_ptr bus__boot(void)
+  {
+    if ( !boot_bus_fdo )
+      {
+        DBG ( "No boot bus device!\n" );
+        return NULL;
+      }
+    return bus__get_ptr(device__get(boot_bus_fdo));
+  }
index 606cbc3..689c7eb 100644 (file)
@@ -229,8 +229,7 @@ Debug_DecodeIrp (
   IN PCHAR DebugMessage
  )
 {
-  device__type_ptr dev_ptr =
-    ( ( driver__dev_ext_ptr ) DeviceObject->DeviceExtension )->device;
+  device__type_ptr dev_ptr = device__get(DeviceObject);
   PIO_STACK_LOCATION Stack = IoGetCurrentIrpStackLocation ( Irp );
   PSCSI_REQUEST_BLOCK Srb;
   PCDB Cdb;
index 17cbaeb..f0f3303 100644 (file)
@@ -172,3 +172,15 @@ static void STDCALL free_dev(IN device__type_ptr dev_ptr)
   
     wv_free(dev_ptr);
   }
+
+/**
+ * Get a device from a DEVICE_OBJECT.
+ *
+ * @v dev_obj           Points to the DEVICE_OBJECT to get the device from.
+ * @ret                 Returns a pointer to the device on success, else NULL.
+ */
+winvblock__lib_func device__type_ptr device__get(PDEVICE_OBJECT dev_obj)
+  {
+    driver__dev_ext_ptr dev_ext = dev_obj->DeviceExtension;
+    return dev_ext->device;
+  }
index 5bd3839..51adce7 100644 (file)
@@ -266,7 +266,6 @@ NTSTATUS STDCALL disk_pnp__query_capabilities(
     Stack->Parameters.DeviceCapabilities.Capabilities;
   NTSTATUS status;
   disk__type_ptr disk_ptr;
-  driver__dev_ext_ptr bus_dev_ext_ptr;
   bus__type_ptr bus_ptr;
   DEVICE_CAPABILITIES ParentDeviceCapabilities;
 
@@ -277,8 +276,7 @@ NTSTATUS STDCALL disk_pnp__query_capabilities(
       goto ret_path;
     }
   disk_ptr = disk__get_ptr ( dev_ptr );
-  bus_dev_ext_ptr = ( driver__dev_ext_ptr ) dev_ptr->Parent->DeviceExtension;
-  bus_ptr = bus__get_ptr ( bus_dev_ext_ptr->device );
+  bus_ptr = bus__get_ptr(device__get(dev_ptr->Parent));
   status =
     Bus_GetDeviceCapabilities ( bus_ptr->LowerDeviceObject,
                                &ParentDeviceCapabilities );
index 063ae70..2b44e95 100644 (file)
@@ -245,7 +245,7 @@ static NTSTATUS STDCALL (driver_dispatch)(
 #ifdef DEBUGIRPS
   Debug_IrpStart ( DeviceObject, Irp );
 #endif
-  dev_ptr = ( ( driver__dev_ext_ptr ) DeviceObject->DeviceExtension )->device;
+  dev_ptr = device__get(DeviceObject);
 
   /*
    * We handle IRP_MJ_POWER as an exception 
@@ -302,7 +302,7 @@ winvblock__lib_func NTSTATUS STDCALL (driver__default_dispatch)(
         dev,
         irp,
         IoGetCurrentIrpStackLocation(irp),
-        ((driver__dev_ext_ptr) dev->DeviceExtension)->device,
+        device__get(dev),
         &completion
       );
     /* Fall through to some driver defaults, if needed. */