Reintegrate header branch
[reactos.git] / reactos / drivers / usb / usbehci / usbehci.c
1 /*
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.
6 * PROGRAMMERS:
7 * Michael Martin
8 */
9
10 /* DEFINES *******************************************************************/
11 #include "usbehci.h"
12 #define NDEBUG
13
14 /* INCLUDES *******************************************************************/
15 #include <debug.h>
16
17
18 static NTSTATUS NTAPI
19 IrpStub(PDEVICE_OBJECT DeviceObject, PIRP Irp)
20 {
21 NTSTATUS Status;
22
23 if (((PCOMMON_DEVICE_EXTENSION)DeviceObject->DeviceExtension)->IsFdo)
24 {
25 DPRINT1("ehci: FDO stub for major function 0x%lx\n",
26 IoGetCurrentIrpStackLocation(Irp)->MajorFunction);
27 return ForwardIrpAndForget(DeviceObject, Irp);
28 }
29
30 /* We are lower driver, So complete */
31 DPRINT1("ehci: PDO stub for major function 0x%lx\n",
32 IoGetCurrentIrpStackLocation(Irp)->MajorFunction);
33
34 Status = Irp->IoStatus.Status;
35 IoCompleteRequest(Irp, IO_NO_INCREMENT);
36 return Status;
37 }
38
39 NTSTATUS NTAPI
40 DispatchDeviceControl(PDEVICE_OBJECT DeviceObject, PIRP Irp)
41 {
42 DPRINT("DispatchDeviceControl\n");
43 Irp->IoStatus.Information = 0;
44 Irp->IoStatus.Status = STATUS_UNSUCCESSFUL;
45
46 IoCompleteRequest(Irp, IO_NO_INCREMENT);
47 return STATUS_UNSUCCESSFUL;
48 }
49
50 NTSTATUS NTAPI
51 DispatchInternalDeviceControl(PDEVICE_OBJECT DeviceObject, PIRP Irp)
52 {
53 DPRINT("DispatchInternalDeviceControl\n");
54 if (((PCOMMON_DEVICE_EXTENSION)DeviceObject->DeviceExtension)->IsFdo)
55 return IrpStub(DeviceObject, Irp);
56 else
57 return PdoDispatchInternalDeviceControl(DeviceObject, Irp);
58 }
59
60 NTSTATUS NTAPI
61 UsbEhciCleanup(PDEVICE_OBJECT DeviceObject, PIRP Irp)
62 {
63 DPRINT1("UsbEhciCleanup\n");
64 Irp->IoStatus.Information = 0;
65 Irp->IoStatus.Status = STATUS_SUCCESS;
66
67 IoCompleteRequest(Irp, IO_NO_INCREMENT);
68 return STATUS_SUCCESS;
69 }
70
71 NTSTATUS NTAPI
72 UsbEhciCreate(PDEVICE_OBJECT DeviceObject, PIRP Irp)
73 {
74 DPRINT1("UsbEhciCreate\n");
75 Irp->IoStatus.Information = 0;
76 Irp->IoStatus.Status = STATUS_SUCCESS;
77
78 IoCompleteRequest(Irp, IO_NO_INCREMENT);
79 return STATUS_SUCCESS;
80 }
81
82 NTSTATUS NTAPI
83 UsbEhciClose(PDEVICE_OBJECT DeviceObject, PIRP Irp)
84 {
85 DPRINT1("Close\n");
86 Irp->IoStatus.Information = 0;
87 Irp->IoStatus.Status = STATUS_SUCCESS;
88
89 IoCompleteRequest(Irp, IO_NO_INCREMENT);
90 return STATUS_SUCCESS;
91 }
92
93 VOID NTAPI
94 DriverUnload(PDRIVER_OBJECT DriverObject)
95 {
96 DPRINT1("Unloading Driver\n");
97 /* FIXME: Clean up */
98 }
99
100 NTSTATUS NTAPI
101 DispatchPnp(PDEVICE_OBJECT DeviceObject, PIRP Irp)
102 {
103 if (((PCOMMON_DEVICE_EXTENSION)DeviceObject->DeviceExtension)->IsFdo)
104 return FdoDispatchPnp(DeviceObject, Irp);
105 else
106 return PdoDispatchPnp(DeviceObject, Irp);
107 }
108
109 NTSTATUS NTAPI
110 DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath)
111 {
112 DPRINT1("Driver Entry %wZ!\n", RegistryPath);
113
114 DriverObject->DriverExtension->AddDevice = AddDevice;
115
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;
122
123 DriverObject->DriverUnload = DriverUnload;
124 DPRINT1("Driver entry done\n");
125
126 return STATUS_SUCCESS;
127 }
128