2 * PROJECT: ReactOS Universal Serial Bus Bulk Enhanced Host Controller Interface
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: drivers/usb/usbehci/usbehci.c
5 * PURPOSE: USB EHCI device driver.
10 /* DEFINES *******************************************************************/
14 /* INCLUDES *******************************************************************/
19 IrpStub(PDEVICE_OBJECT DeviceObject
, PIRP Irp
)
23 if (((PCOMMON_DEVICE_EXTENSION
)DeviceObject
->DeviceExtension
)->IsFdo
)
25 DPRINT1("ehci: FDO stub for major function 0x%lx\n",
26 IoGetCurrentIrpStackLocation(Irp
)->MajorFunction
);
27 return ForwardIrpAndForget(DeviceObject
, Irp
);
30 /* We are lower driver, So complete */
31 DPRINT1("ehci: PDO stub for major function 0x%lx\n",
32 IoGetCurrentIrpStackLocation(Irp
)->MajorFunction
);
34 Status
= Irp
->IoStatus
.Status
;
35 IoCompleteRequest(Irp
, IO_NO_INCREMENT
);
40 DispatchDeviceControl(PDEVICE_OBJECT DeviceObject
, PIRP Irp
)
42 DPRINT("DispatchDeviceControl\n");
43 Irp
->IoStatus
.Information
= 0;
44 Irp
->IoStatus
.Status
= STATUS_UNSUCCESSFUL
;
46 IoCompleteRequest(Irp
, IO_NO_INCREMENT
);
47 return STATUS_UNSUCCESSFUL
;
51 DispatchInternalDeviceControl(PDEVICE_OBJECT DeviceObject
, PIRP Irp
)
53 DPRINT("DispatchInternalDeviceControl\n");
54 if (((PCOMMON_DEVICE_EXTENSION
)DeviceObject
->DeviceExtension
)->IsFdo
)
55 return IrpStub(DeviceObject
, Irp
);
57 return PdoDispatchInternalDeviceControl(DeviceObject
, Irp
);
61 UsbEhciCleanup(PDEVICE_OBJECT DeviceObject
, PIRP Irp
)
63 DPRINT1("UsbEhciCleanup\n");
64 Irp
->IoStatus
.Information
= 0;
65 Irp
->IoStatus
.Status
= STATUS_SUCCESS
;
67 IoCompleteRequest(Irp
, IO_NO_INCREMENT
);
68 return STATUS_SUCCESS
;
72 UsbEhciCreate(PDEVICE_OBJECT DeviceObject
, PIRP Irp
)
74 DPRINT1("UsbEhciCreate\n");
75 Irp
->IoStatus
.Information
= 0;
76 Irp
->IoStatus
.Status
= STATUS_SUCCESS
;
78 IoCompleteRequest(Irp
, IO_NO_INCREMENT
);
79 return STATUS_SUCCESS
;
83 UsbEhciClose(PDEVICE_OBJECT DeviceObject
, PIRP Irp
)
86 Irp
->IoStatus
.Information
= 0;
87 Irp
->IoStatus
.Status
= STATUS_SUCCESS
;
89 IoCompleteRequest(Irp
, IO_NO_INCREMENT
);
90 return STATUS_SUCCESS
;
94 DriverUnload(PDRIVER_OBJECT DriverObject
)
96 DPRINT1("Unloading Driver\n");
101 DispatchPnp(PDEVICE_OBJECT DeviceObject
, PIRP Irp
)
103 if (((PCOMMON_DEVICE_EXTENSION
)DeviceObject
->DeviceExtension
)->IsFdo
)
104 return FdoDispatchPnp(DeviceObject
, Irp
);
106 return PdoDispatchPnp(DeviceObject
, Irp
);
110 DriverEntry(PDRIVER_OBJECT DriverObject
, PUNICODE_STRING RegistryPath
)
112 DPRINT1("Driver Entry %wZ!\n", RegistryPath
);
114 DriverObject
->DriverExtension
->AddDevice
= AddDevice
;
116 DriverObject
->MajorFunction
[IRP_MJ_CREATE
] = UsbEhciCreate
;
117 DriverObject
->MajorFunction
[IRP_MJ_CLOSE
] = UsbEhciClose
;
118 DriverObject
->MajorFunction
[IRP_MJ_CLEANUP
] = UsbEhciCleanup
;
119 DriverObject
->MajorFunction
[IRP_MJ_DEVICE_CONTROL
] = DispatchDeviceControl
;
120 DriverObject
->MajorFunction
[IRP_MJ_INTERNAL_DEVICE_CONTROL
] = DispatchInternalDeviceControl
;
121 DriverObject
->MajorFunction
[IRP_MJ_PNP
] = DispatchPnp
;
123 DriverObject
->DriverUnload
= DriverUnload
;
124 DPRINT1("Driver entry done\n");
126 return STATUS_SUCCESS
;