PERFORCE change 154971 for review
Weongyo Jeong
weongyo at FreeBSD.org
Thu Dec 18 18:28:19 PST 2008
http://perforce.freebsd.org/chv.cgi?CH=154971
Change 154971 by weongyo at 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)
More information about the p4-projects
mailing list