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 IrpStub(PDEVICE_OBJECT DeviceObject
, PIRP Irp
)
18 if (((PCOMMON_DEVICE_EXTENSION
)DeviceObject
->DeviceExtension
)->IsFdo
)
20 DPRINT1("ehci: FDO stub for major function 0x%lx\n",
21 IoGetCurrentIrpStackLocation(Irp
)->MajorFunction
);
22 return ForwardIrpAndForget(DeviceObject
, Irp
);
25 /* We are lower driver, So complete */
26 DPRINT1("ehci: PDO stub for major function 0x%lx\n",
27 IoGetCurrentIrpStackLocation(Irp
)->MajorFunction
);
29 Status
= Irp
->IoStatus
.Status
;
30 IoCompleteRequest(Irp
, IO_NO_INCREMENT
);
35 DispatchDeviceControl(PDEVICE_OBJECT DeviceObject
, PIRP Irp
)
37 DPRINT("DispatchDeviceControl\n");
38 Irp
->IoStatus
.Information
= 0;
39 Irp
->IoStatus
.Status
= STATUS_UNSUCCESSFUL
;
41 IoCompleteRequest(Irp
, IO_NO_INCREMENT
);
42 return STATUS_UNSUCCESSFUL
;
46 DispatchInternalDeviceControl(PDEVICE_OBJECT DeviceObject
, PIRP Irp
)
48 DPRINT("DispatchInternalDeviceControl\n");
49 if (((PCOMMON_DEVICE_EXTENSION
)DeviceObject
->DeviceExtension
)->IsFdo
)
50 return IrpStub(DeviceObject
, Irp
);
52 return PdoDispatchInternalDeviceControl(DeviceObject
, Irp
);
56 UsbEhciCleanup(PDEVICE_OBJECT DeviceObject
, PIRP Irp
)
58 DPRINT1("UsbEhciCleanup\n");
59 Irp
->IoStatus
.Information
= 0;
60 Irp
->IoStatus
.Status
= STATUS_SUCCESS
;
62 IoCompleteRequest(Irp
, IO_NO_INCREMENT
);
63 return STATUS_SUCCESS
;
67 UsbEhciCreate(PDEVICE_OBJECT DeviceObject
, PIRP Irp
)
69 DPRINT1("UsbEhciCreate\n");
70 Irp
->IoStatus
.Information
= 0;
71 Irp
->IoStatus
.Status
= STATUS_SUCCESS
;
73 IoCompleteRequest(Irp
, IO_NO_INCREMENT
);
74 return STATUS_SUCCESS
;
78 UsbEhciClose(PDEVICE_OBJECT DeviceObject
, PIRP Irp
)
81 Irp
->IoStatus
.Information
= 0;
82 Irp
->IoStatus
.Status
= STATUS_SUCCESS
;
84 IoCompleteRequest(Irp
, IO_NO_INCREMENT
);
85 return STATUS_SUCCESS
;
89 DriverUnload(PDRIVER_OBJECT DriverObject
)
91 DPRINT1("Unloading Driver\n");
96 DispatchPnp(PDEVICE_OBJECT DeviceObject
, PIRP Irp
)
98 if (((PCOMMON_DEVICE_EXTENSION
)DeviceObject
->DeviceExtension
)->IsFdo
)
99 return FdoDispatchPnp(DeviceObject
, Irp
);
101 return PdoDispatchPnp(DeviceObject
, Irp
);
105 DriverEntry(PDRIVER_OBJECT DriverObject
, PUNICODE_STRING RegistryPath
)
107 DPRINT1("Driver Entry %wZ!\n", RegistryPath
);
109 DriverObject
->DriverExtension
->AddDevice
= AddDevice
;
111 DriverObject
->MajorFunction
[IRP_MJ_CREATE
] = UsbEhciCreate
;
112 DriverObject
->MajorFunction
[IRP_MJ_CLOSE
] = UsbEhciClose
;
113 DriverObject
->MajorFunction
[IRP_MJ_CLEANUP
] = UsbEhciCleanup
;
114 DriverObject
->MajorFunction
[IRP_MJ_DEVICE_CONTROL
] = DispatchDeviceControl
;
115 DriverObject
->MajorFunction
[IRP_MJ_INTERNAL_DEVICE_CONTROL
] = DispatchInternalDeviceControl
;
116 DriverObject
->MajorFunction
[IRP_MJ_PNP
] = DispatchPnp
;
118 DriverObject
->DriverUnload
= DriverUnload
;
119 DPRINT1("Driver entry done\n");
121 return STATUS_SUCCESS
;