[USBCCGP]
[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 NTSTATUS
88 NTAPI
89 USBCCGP_GetStringDescriptor(
90 IN PDEVICE_OBJECT DeviceObject,
91 IN ULONG DescriptorLength,
92 IN UCHAR DescriptorIndex,
93 IN LANGID LanguageId,
94 OUT PVOID *OutDescriptor);
95
96 ULONG
97 CountInterfaceDescriptors(
98 IN PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor);
99
100 NTSTATUS
101 AllocateInterfaceDescriptorsArray(
102 IN PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor,
103 OUT PUSB_INTERFACE_DESCRIPTOR **OutArray);
104
105 /* misc.c */
106
107 NTSTATUS
108 NTAPI
109 USBCCGP_SyncForwardIrp(
110 PDEVICE_OBJECT DeviceObject,
111 PIRP Irp);
112
113 NTSTATUS
114 USBCCGP_SyncUrbRequest(
115 IN PDEVICE_OBJECT DeviceObject,
116 OUT PURB UrbRequest);
117
118 PVOID
119 AllocateItem(
120 IN POOL_TYPE PoolType,
121 IN ULONG ItemSize);
122
123 VOID
124 FreeItem(
125 IN PVOID Item);
126
127 VOID
128 DumpFunctionDescriptor(
129 IN PUSBC_FUNCTION_DESCRIPTOR FunctionDescriptor,
130 IN ULONG FunctionDescriptorCount);
131
132 /* fdo.c */
133
134 NTSTATUS
135 FDO_Dispatch(
136 PDEVICE_OBJECT DeviceObject,
137 PIRP Irp);
138
139 /* pdo.c */
140
141 NTSTATUS
142 PDO_Dispatch(
143 PDEVICE_OBJECT DeviceObject,
144 PIRP Irp);
145
146 /* function.c */
147
148 NTSTATUS
149 USBCCGP_QueryInterface(
150 IN PDEVICE_OBJECT DeviceObject,
151 OUT PUSBC_DEVICE_CONFIGURATION_INTERFACE_V1 BusInterface);
152
153 NTSTATUS
154 USBCCGP_EnumerateFunctions(
155 IN PDEVICE_OBJECT DeviceObject);
156
157 #endif