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