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