Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 19 Dec 2008 02:28:17 GMT
From:      Weongyo Jeong <weongyo@FreeBSD.org>
To:        Perforce Change Reviews <perforce@FreeBSD.org>
Subject:   PERFORCE change 154971 for review
Message-ID:  <200812190228.mBJ2SH6l013204@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=154971

Change 154971 by weongyo@weongyo_ws on 2008/12/19 02:28:10

	add basic IRP_MJ_POWER and IRP_MJ_PNP routines but it's not ready to
	use.

Affected files ...

.. //depot/projects/ndisusb/sys/compat/ndis/subr_usbd.c#28 edit

Differences ...

==== //depot/projects/ndisusb/sys/compat/ndis/subr_usbd.c#28 (text+ko) ====

@@ -89,6 +89,8 @@
 			    usbd_status);
 static int32_t		 usbd_iodispatch(device_object *, irp *);
 static int32_t		 usbd_ioinvalid(device_object *, irp *);
+static int32_t		 usbd_pnp(device_object *, irp *);
+static int32_t		 usbd_power(device_object *, irp *);
 static void		 usbd_irpcancel(device_object *, irp *);
 static void		 usbd_irpcancel_cb(void *);
 static void		 usbd_irpcancel_iin(device_object *, irp *);
@@ -123,6 +125,8 @@
  */
 static funcptr usbd_iodispatch_wrap;
 static funcptr usbd_ioinvalid_wrap;
+static funcptr usbd_pnp_wrap;
+static funcptr usbd_power_wrap;
 static funcptr usbd_irpcancel_wrap;
 static funcptr usbd_irpcancel_iin_wrap;
 static funcptr usbd_xfertask_wrap;
@@ -145,6 +149,10 @@
 	    (funcptr *)&usbd_ioinvalid_wrap, 2, WINDRV_WRAP_STDCALL);
 	windrv_wrap((funcptr)usbd_iodispatch,
 	    (funcptr *)&usbd_iodispatch_wrap, 2, WINDRV_WRAP_STDCALL);
+	windrv_wrap((funcptr)usbd_pnp,
+	    (funcptr *)&usbd_pnp_wrap, 2, WINDRV_WRAP_STDCALL);
+	windrv_wrap((funcptr)usbd_power,
+	    (funcptr *)&usbd_power_wrap, 2, WINDRV_WRAP_STDCALL);
 	windrv_wrap((funcptr)usbd_irpcancel,
 	    (funcptr *)&usbd_irpcancel_wrap, 2, WINDRV_WRAP_STDCALL);
 	windrv_wrap((funcptr)usbd_irpcancel_iin,
@@ -163,6 +171,12 @@
 
 	usbd_driver.dro_dispatch[IRP_MJ_INTERNAL_DEVICE_CONTROL] =
 	    (driver_dispatch)usbd_iodispatch_wrap;
+	usbd_driver.dro_dispatch[IRP_MJ_DEVICE_CONTROL] =
+	    (driver_dispatch)usbd_iodispatch_wrap;
+	usbd_driver.dro_dispatch[IRP_MJ_POWER] =
+	    (driver_dispatch)usbd_power_wrap;
+	usbd_driver.dro_dispatch[IRP_MJ_PNP] =
+	    (driver_dispatch)usbd_pnp_wrap;
 
 	return(0);
 }
@@ -180,6 +194,8 @@
 
 	windrv_unwrap(usbd_ioinvalid_wrap);
 	windrv_unwrap(usbd_iodispatch_wrap);
+	windrv_unwrap(usbd_pnp_wrap);
+	windrv_unwrap(usbd_power_wrap);
 	windrv_unwrap(usbd_irpcancel_wrap);
 	windrv_unwrap(usbd_irpcancel_iin_wrap);
 	windrv_unwrap(usbd_xfertask_wrap);
@@ -241,6 +257,46 @@
         return (STATUS_FAILURE);
 }
 
+static int32_t
+usbd_pnp(dobj, ip)
+	device_object		*dobj;
+	irp			*ip;
+{
+	device_t dev = dobj->do_devext;
+	struct io_stack_location *irp_sl;
+
+        irp_sl = IoGetCurrentIrpStackLocation(ip);
+        device_printf(dev, "%s: unsupported I/O dispatch %d:%d\n",
+	    __func__, irp_sl->isl_major, irp_sl->isl_minor);
+
+        ip->irp_iostat.isb_status = STATUS_FAILURE;
+        ip->irp_iostat.isb_info = 0;
+
+        IoCompleteRequest(ip, IO_NO_INCREMENT);
+
+        return (STATUS_FAILURE);
+}
+
+static int32_t
+usbd_power(dobj, ip)
+	device_object		*dobj;
+	irp			*ip;
+{
+	device_t dev = dobj->do_devext;
+	struct io_stack_location *irp_sl;
+
+        irp_sl = IoGetCurrentIrpStackLocation(ip);
+        device_printf(dev, "%s: unsupported I/O dispatch %d:%d\n",
+	    __func__, irp_sl->isl_major, irp_sl->isl_minor);
+
+        ip->irp_iostat.isb_status = STATUS_FAILURE;
+        ip->irp_iostat.isb_info = 0;
+
+        IoCompleteRequest(ip, IO_NO_INCREMENT);
+
+        return (STATUS_FAILURE);
+}
+
 /* Convert USBD_STATUS to NTSTATUS  */
 static int32_t
 usbd_urb2nt(status)



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200812190228.mBJ2SH6l013204>