ReactOS 0.4.15-dev-7842-g558ab78
usbccgp.c
Go to the documentation of this file.
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/usbccgp/usbccgp.c
5 * PURPOSE: USB device driver.
6 * PROGRAMMERS:
7 * Michael Martin (michael.martin@reactos.org)
8 * Johannes Anderwald (johannes.anderwald@reactos.org)
9 * Cameron Gutman
10 */
11
12#include "usbccgp.h"
13
14#define NDEBUG
15#include <debug.h>
16
17/* Driver verifier */
18DRIVER_ADD_DEVICE USBCCGP_AddDevice;
19
25{
28 PFDO_DEVICE_EXTENSION FDODeviceExtension;
29
30 /* Lets create the device */
33 NULL,
36 FALSE,
38 if (!NT_SUCCESS(Status))
39 {
40 /* Failed to create device */
41 DPRINT1("USBCCGP_AddDevice failed to create device with %x\n", Status);
42 return Status;
43 }
44
45 /* Get device extension */
46 FDODeviceExtension = (PFDO_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
47
48 /* Init device extension */
49 RtlZeroMemory(FDODeviceExtension, sizeof(FDO_DEVICE_EXTENSION));
50 FDODeviceExtension->Common.IsFDO = TRUE;
51 FDODeviceExtension->DriverObject = DriverObject;
52 FDODeviceExtension->PhysicalDeviceObject = PhysicalDeviceObject;
53 InitializeListHead(&FDODeviceExtension->ResetPortListHead);
54 InitializeListHead(&FDODeviceExtension->CyclePortListHead);
55 KeInitializeSpinLock(&FDODeviceExtension->Lock);
56
57 FDODeviceExtension->NextDeviceObject = IoAttachDeviceToDeviceStack(DeviceObject,
59 if (!FDODeviceExtension->NextDeviceObject)
60 {
61 /* Failed to attach */
62 DPRINT1("USBCCGP_AddDevice failed to attach device\n");
65 }
66
67 /* Set device flags */
69
70 /* Device is initialized */
71 DeviceObject->Flags &= ~DO_DEVICE_INITIALIZING;
72
73 /* Device initialized */
74 return Status;
75}
76
81 PIRP Irp)
82{
83 PCOMMON_DEVICE_EXTENSION DeviceExtension;
84 PFDO_DEVICE_EXTENSION FDODeviceExtension;
85
86 /* Get common device extension */
87 DeviceExtension = (PCOMMON_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
88
89 /* Is it a fdo */
90 if (DeviceExtension->IsFDO)
91 {
92 /* Forward and forget */
94
95 /* Get fdo */
96 FDODeviceExtension = (PFDO_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
97
98 /* Call lower driver */
99 return IoCallDriver(FDODeviceExtension->NextDeviceObject, Irp);
100 }
101 else
102 {
103 /* Pdo not supported */
104 Irp->IoStatus.Status = STATUS_NOT_SUPPORTED;
107 }
108}
109
111NTAPI
114 PIRP Irp)
115{
116 PCOMMON_DEVICE_EXTENSION DeviceExtension;
117 PIO_STACK_LOCATION IoStack;
118
119 /* Get common device extension */
120 DeviceExtension = (PCOMMON_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
121
122 /* Get current stack location */
124
125 if (IoStack->MajorFunction == IRP_MJ_CREATE || IoStack->MajorFunction == IRP_MJ_CLOSE)
126 {
127 /* Dispatch to default handler */
129 }
130
131 if (DeviceExtension->IsFDO)
132 {
133 /* Handle request for FDO */
135 }
136 else
137 {
138 /* Handle request for PDO */
140 }
141}
142
143VOID
144NTAPI
146{
147 DPRINT("[USBCCGP] Unload\n");
148}
149
151NTAPI
155{
156
157 /* Initialize driver object */
158 DPRINT("[USBCCGP] DriverEntry\n");
159 DriverObject->DriverExtension->AddDevice = USBCCGP_AddDevice;
165 DriverObject->MajorFunction[IRP_MJ_PNP] = USBCCGP_Dispatch;
167 DriverObject->DriverUnload = USBCCGP_Unload;
168
169 /* FIMXE query GenericCompositeUSBDeviceString */
170
171 return STATUS_SUCCESS;
172}
LONG NTSTATUS
Definition: precomp.h:26
#define DPRINT1
Definition: precomp.h:8
PDEVICE_OBJECT PhysicalDeviceObject
Definition: btrfs_drv.h:1157
#define IRP_MJ_PNP
Definition: cdrw_usr.h:52
_In_ PIRP Irp
Definition: csq.h:116
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
DRIVER_INITIALIZE DriverEntry
Definition: condrv.c:21
struct _FDO_DEVICE_EXTENSION * PFDO_DEVICE_EXTENSION
struct _COMMON_DEVICE_EXTENSION * PCOMMON_DEVICE_EXTENSION
#define DO_BUFFERED_IO
Definition: env_spec_w32.h:394
#define InitializeListHead(ListHead)
Definition: env_spec_w32.h:944
#define KeInitializeSpinLock(sl)
Definition: env_spec_w32.h:604
Status
Definition: gdiplustypes.h:25
if(dx< 0)
Definition: linetemp.h:194
#define FILE_AUTOGENERATED_DEVICE_NAME
Definition: iotypes.h:138
#define IoSkipCurrentIrpStackLocation(Irp)
Definition: ntifs_ex.h:421
PDEVICE_OBJECT NTAPI IoAttachDeviceToDeviceStack(IN PDEVICE_OBJECT SourceDevice, IN PDEVICE_OBJECT TargetDevice)
Definition: device.c:966
NTSTATUS NTAPI IoCreateDevice(IN PDRIVER_OBJECT DriverObject, IN ULONG DeviceExtensionSize, IN PUNICODE_STRING DeviceName, IN DEVICE_TYPE DeviceType, IN ULONG DeviceCharacteristics, IN BOOLEAN Exclusive, OUT PDEVICE_OBJECT *DeviceObject)
Definition: device.c:1031
VOID NTAPI IoDeleteDevice(IN PDEVICE_OBJECT DeviceObject)
Definition: device.c:1251
#define IoCompleteRequest
Definition: irp.c:1240
#define IoCallDriver
Definition: irp.c:1225
#define STATUS_NOT_SUPPORTED
Definition: ntstatus.h:423
#define STATUS_DEVICE_REMOVED
Definition: ntstatus.h:809
#define IRP_MJ_CLOSE
Definition: rdpdr.c:45
#define IRP_MJ_DEVICE_CONTROL
Definition: rdpdr.c:52
#define IRP_MJ_CREATE
Definition: rdpdr.c:44
#define STATUS_SUCCESS
Definition: shellext.h:65
#define DPRINT
Definition: sndvol32.h:71
COMMON_DEVICE_EXTENSION Common
Definition: pci.h:84
PDRIVER_OBJECT DriverObject
Definition: pciidex.h:88
#define NTAPI
Definition: typedefs.h:36
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:262
NTSTATUS FDO_Dispatch(PDEVICE_OBJECT DeviceObject, PIRP Irp)
Definition: fdo.c:633
NTSTATUS PDO_Dispatch(PDEVICE_OBJECT DeviceObject, PIRP Irp)
Definition: pdo.c:1125
VOID NTAPI USBCCGP_Unload(PDRIVER_OBJECT DriverObject)
Definition: usbccgp.c:145
DRIVER_ADD_DEVICE USBCCGP_AddDevice
Definition: usbccgp.c:18
NTSTATUS NTAPI USBCCGP_CreateClose(PDEVICE_OBJECT DeviceObject, PIRP Irp)
Definition: usbccgp.c:79
NTSTATUS NTAPI USBCCGP_Dispatch(PDEVICE_OBJECT DeviceObject, PIRP Irp)
Definition: usbccgp.c:112
#define FILE_DEVICE_USB
Definition: usbiodef.h:71
_In_ PDEVICE_OBJECT DeviceObject
Definition: wdfdevice.h:2055
_Must_inspect_result_ _In_ PDRIVER_OBJECT _In_ PCUNICODE_STRING RegistryPath
Definition: wdfdriver.h:215
_Must_inspect_result_ _In_ PDRIVER_OBJECT DriverObject
Definition: wdfdriver.h:213
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(_In_ PIRP Irp)
Definition: iofuncs.h:2793
#define IO_NO_INCREMENT
Definition: iotypes.h:598
#define DO_POWER_PAGABLE
#define IRP_MJ_SYSTEM_CONTROL
#define IRP_MJ_INTERNAL_DEVICE_CONTROL
#define IRP_MJ_POWER