[USB]
[reactos.git] / reactos / drivers / usb / usbccgp / usbccgp.h
1 #ifndef USBEHCI_H__
2 #define USBEHCI_H__
3
4 #include <ntddk.h>
5 #define NDEBUG
6 #include <debug.h>
7 #include <initguid.h>
8 #include <hubbusif.h>
9 #include <usbbusif.h>
10 #include <usbioctl.h>
11 #include <usbdlib.h>
12
13 //
14 // FIXME:
15 // #include <usbprotocoldefs.h>
16 //
17 #include <usb.h>
18 #include <stdio.h>
19 #include <wdmguid.h>
20
21 typedef struct
22 {
23 BOOLEAN IsFDO; // is device a FDO or PDO
24 }COMMON_DEVICE_EXTENSION, *PCOMMON_DEVICE_EXTENSION;
25
26 typedef struct
27 {
28 COMMON_DEVICE_EXTENSION Common; // shared with PDO
29 PDRIVER_OBJECT DriverObject; // driver object
30 PDEVICE_OBJECT PhysicalDeviceObject; // physical device object
31 PDEVICE_OBJECT NextDeviceObject; // lower device object
32 PUSB_DEVICE_DESCRIPTOR DeviceDescriptor; // usb device descriptor
33 PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor; // usb configuration descriptor
34 DEVICE_CAPABILITIES Capabilities; // device capabilities
35 PUSBD_INTERFACE_LIST_ENTRY InterfaceList; // interface list
36 ULONG InterfaceListCount; // interface list count
37 USBD_CONFIGURATION_HANDLE ConfigurationHandle; // configuration handle
38 USBC_DEVICE_CONFIGURATION_INTERFACE_V1 BusInterface; // bus custom enumeration interface
39 PUSBC_FUNCTION_DESCRIPTOR FunctionDescriptor; // usb function descriptor
40 ULONG FunctionDescriptorCount; // number of function descriptor
41 PDEVICE_OBJECT * ChildPDO; // child pdos
42 LIST_ENTRY ResetPortListHead; // reset port list head
43 LIST_ENTRY CyclePortListHead; // cycle port list head
44 UCHAR ResetPortActive; // reset port active
45 UCHAR CyclePortActive; // cycle port active
46 KSPIN_LOCK Lock; // reset / cycle port list lock
47 }FDO_DEVICE_EXTENSION, *PFDO_DEVICE_EXTENSION;
48
49 #define USBCCPG_TAG 'cbsu'
50
51 typedef struct
52 {
53 COMMON_DEVICE_EXTENSION Common; // shared with FDO
54 PUSBC_FUNCTION_DESCRIPTOR FunctionDescriptor; // function descriptor
55 PDEVICE_OBJECT NextDeviceObject; // next device object
56 DEVICE_CAPABILITIES Capabilities; // device capabilities
57 ULONG FunctionIndex; // function index
58 USB_DEVICE_DESCRIPTOR DeviceDescriptor; // usb device descriptor
59 PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor; // usb configuration descriptor
60 USBD_CONFIGURATION_HANDLE ConfigurationHandle; // configuration handle
61 PUSBD_INTERFACE_LIST_ENTRY InterfaceList; // interface list
62 ULONG InterfaceListCount; // interface list count
63 PFDO_DEVICE_EXTENSION FDODeviceExtension; // pointer to fdo's pdo list
64 }PDO_DEVICE_EXTENSION, *PPDO_DEVICE_EXTENSION;
65
66 /* descriptor.c */
67
68 NTSTATUS
69 USBCCGP_GetDescriptors(
70 IN PDEVICE_OBJECT DeviceObject);
71
72 NTSTATUS
73 USBCCGP_SelectConfiguration(
74 IN PDEVICE_OBJECT DeviceObject,
75 IN PFDO_DEVICE_EXTENSION DeviceExtension);
76
77 NTSTATUS
78 NTAPI
79 USBCCGP_GetDescriptor(
80 IN PDEVICE_OBJECT DeviceObject,
81 IN UCHAR DescriptorType,
82 IN ULONG DescriptorLength,
83 IN UCHAR DescriptorIndex,
84 IN LANGID LanguageId,
85 OUT PVOID *OutDescriptor);
86
87 ULONG
88 CountInterfaceDescriptors(
89 IN PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor);
90
91 NTSTATUS
92 AllocateInterfaceDescriptorsArray(
93 IN PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor,
94 OUT PUSB_INTERFACE_DESCRIPTOR **OutArray);
95
96 /* misc.c */
97
98 NTSTATUS
99 NTAPI
100 USBCCGP_SyncForwardIrp(
101 PDEVICE_OBJECT DeviceObject,
102 PIRP Irp);
103
104 NTSTATUS
105 USBCCGP_SyncUrbRequest(
106 IN PDEVICE_OBJECT DeviceObject,
107 OUT PURB UrbRequest);
108
109 PVOID
110 AllocateItem(
111 IN POOL_TYPE PoolType,
112 IN ULONG ItemSize);
113
114 VOID
115 FreeItem(
116 IN PVOID Item);
117
118 VOID
119 DumpFunctionDescriptor(
120 IN PUSBC_FUNCTION_DESCRIPTOR FunctionDescriptor,
121 IN ULONG FunctionDescriptorCount);
122
123 /* fdo.c */
124
125 NTSTATUS
126 FDO_Dispatch(
127 PDEVICE_OBJECT DeviceObject,
128 PIRP Irp);
129
130 /* pdo.c */
131
132 NTSTATUS
133 PDO_Dispatch(
134 PDEVICE_OBJECT DeviceObject,
135 PIRP Irp);
136
137 /* function.c */
138
139 NTSTATUS
140 USBCCGP_QueryInterface(
141 IN PDEVICE_OBJECT DeviceObject,
142 OUT PUSBC_DEVICE_CONFIGURATION_INTERFACE_V1 BusInterface);
143
144 NTSTATUS
145 USBCCGP_EnumerateFunctions(
146 IN PDEVICE_OBJECT DeviceObject);
147
148 #endif