ReactOS  0.4.13-dev-99-g7e18b6d
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 */
18 DRIVER_ADD_DEVICE USBCCGP_AddDevice;
19 
21 NTAPI
25 {
28  PFDO_DEVICE_EXTENSION FDODeviceExtension;
29 
30  /* Lets create the device */
32  sizeof(FDO_DEVICE_EXTENSION),
33  NULL,
36  FALSE,
37  &DeviceObject);
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");
64  return STATUS_DEVICE_REMOVED;
65  }
66 
67  /* Set device flags */
69 
70  /* Device is initialized */
72 
73  /* Device initialized */
74  return Status;
75 }
76 
78 NTAPI
81  PIRP Irp)
82 {
83  PCOMMON_DEVICE_EXTENSION DeviceExtension;
84  PFDO_DEVICE_EXTENSION FDODeviceExtension;
85 
86  /* Get common device extension */
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;
106  return STATUS_NOT_SUPPORTED;
107  }
108 }
109 
110 NTSTATUS
111 NTAPI
114  PIRP Irp)
115 {
116  PCOMMON_DEVICE_EXTENSION DeviceExtension;
117  PIO_STACK_LOCATION IoStack;
118 
119  /* Get common device extension */
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 */
134  return FDO_Dispatch(DeviceObject, Irp);
135  }
136  else
137  {
138  /* Handle request for PDO */
139  return PDO_Dispatch(DeviceObject, Irp);
140  }
141 }
142 
143 VOID
144 NTAPI
146 {
147  DPRINT("[USBCCGP] Unload\n");
148 }
149 
150 NTSTATUS
151 NTAPI
155 {
156 
157  /* Initialize driver object */
158  DPRINT("[USBCCGP] DriverEntry\n");
168 
169  /* FIMXE query GenericCompositeUSBDeviceString */
170 
171  return STATUS_SUCCESS;
172 }
#define DO_DEVICE_INITIALIZING
Definition: env_spec_w32.h:399
#define DO_POWER_PAGABLE
#define STATUS_DEVICE_REMOVED
Definition: ntstatus.h:795
NTSTATUS NTAPI USBCCGP_Dispatch(PDEVICE_OBJECT DeviceObject, PIRP Irp)
Definition: usbccgp.c:112
#define TRUE
Definition: types.h:120
#define IRP_MJ_CREATE
Definition: rdpdr.c:44
_In_ PIRP Irp
Definition: csq.h:116
#define IRP_MJ_PNP
Definition: cdrw_usr.h:52
VOID NTAPI USBCCGP_Unload(PDRIVER_OBJECT DriverObject)
Definition: usbccgp.c:145
#define FILE_DEVICE_USB
Definition: usbiodef.h:71
LONG NTSTATUS
Definition: precomp.h:26
struct _FDO_DEVICE_EXTENSION * PFDO_DEVICE_EXTENSION
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
Definition: IoEaTest.cpp:117
NTSTATUS NTAPI USBCCGP_CreateClose(PDEVICE_OBJECT DeviceObject, PIRP Irp)
Definition: usbccgp.c:79
PDEVICE_OBJECT NTAPI IoAttachDeviceToDeviceStack(IN PDEVICE_OBJECT SourceDevice, IN PDEVICE_OBJECT TargetDevice)
Definition: device.c:966
PDRIVER_EXTENSION DriverExtension
Definition: iotypes.h:2173
FORCEINLINE VOID KeInitializeSpinLock(_Out_ PKSPIN_LOCK SpinLock)
Definition: kefuncs.h:251
PVOID DeviceExtension
Definition: env_spec_w32.h:418
smooth NULL
Definition: ftsmooth.c:416
static PDRIVER_OBJECT DriverObject
Definition: template.c:42
#define IoCompleteRequest
Definition: irp.c:1240
void DPRINT(...)
Definition: polytest.cpp:61
#define FILE_AUTOGENERATED_DEVICE_NAME
Definition: iotypes.h:138
NTSTATUS NTAPI DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath)
Definition: usbccgp.c:152
if(!(yy_init))
Definition: macro.lex.yy.c:714
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
#define DO_BUFFERED_IO
Definition: env_spec_w32.h:394
NTSTATUS FDO_Dispatch(PDEVICE_OBJECT DeviceObject, PIRP Irp)
Definition: fdo.c:615
struct _COMMON_DEVICE_EXTENSION * PCOMMON_DEVICE_EXTENSION
#define IRP_MJ_INTERNAL_DEVICE_CONTROL
#define IRP_MJ_POWER
#define IRP_MJ_CLOSE
Definition: rdpdr.c:45
PDRIVER_UNLOAD DriverUnload
Definition: iotypes.h:2179
NTSTATUS PDO_Dispatch(PDEVICE_OBJECT DeviceObject, PIRP Irp)
Definition: pdo.c:1075
COMMON_DEVICE_EXTENSION Common
Definition: pci.h:80
#define IRP_MJ_SYSTEM_CONTROL
Status
Definition: gdiplustypes.h:24
IN PDEVICE_OBJECT DeviceObject
Definition: fatprocs.h:1560
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(_In_ PIRP Irp)
Definition: iofuncs.h:2745
VOID NTAPI IoDeleteDevice(IN PDEVICE_OBJECT DeviceObject)
Definition: device.c:1250
PDRIVER_ADD_DEVICE AddDevice
Definition: iotypes.h:2111
#define InitializeListHead(ListHead)
Definition: env_spec_w32.h:944
NTSTATUS NTAPI IoCallDriver(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
Definition: irp.c:1218
#define IoSkipCurrentIrpStackLocation(Irp)
Definition: ntifs_ex.h:421
#define DPRINT1
Definition: precomp.h:8
PDRIVER_DISPATCH MajorFunction[IRP_MJ_MAXIMUM_FUNCTION+1]
Definition: iotypes.h:2180
#define STATUS_NOT_SUPPORTED
Definition: ntstatus.h:409
#define IO_NO_INCREMENT
Definition: iotypes.h:565
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
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:261
_In_ PUNICODE_STRING RegistryPath
Definition: wmip.h:27
DRIVER_ADD_DEVICE USBCCGP_AddDevice
Definition: usbccgp.c:18
return STATUS_SUCCESS
Definition: btrfs.c:2725
#define IRP_MJ_DEVICE_CONTROL
Definition: rdpdr.c:52