set svn:eol-style to native
[reactos.git] / reactos / drivers / usb / usbport / usbport.h
1 /*
2 * Declarations for undocumented usbport.sys calls
3 *
4 * Written by Filip Navara <xnavara@volny.cz>
5 * Updates by Mark Tempel
6 */
7
8 #ifndef _USBPORT_H
9 #define _USBPORT_H
10
11 #define USB_CONTROLLER_INTERFACE_TAG 0x001E1E10
12
13 /**** B E G I N M S I N T E R N A L P R O T O C O L ****/
14 typedef DWORD (*POPEN_ENDPOINT)(
15 DWORD Unknown1,
16 DWORD Unknown2,
17 DWORD Unknown3
18 );
19
20 typedef NTSTATUS (*PPOKE_ENDPOINT)(
21 DWORD Unknown1,
22 DWORD Unknown2,
23 DWORD Unknown3
24 );
25
26 typedef DWORD (*PQUERY_ENDPOINT_REQUIREMENTS)(
27 DWORD Unknown1,
28 DWORD Unknown2,
29 DWORD Unknown3
30 );
31
32 typedef VOID (*PCLOSE_ENDPOINT)(
33 DWORD Unknown1,
34 DWORD Unknown2
35 );
36
37
38
39 typedef struct {
40 DWORD Unknown1; /* 2 (UHCI), 3 (EHCI) */
41 DWORD Unknown2; /* 2C3 (UHCI), 95 (EHCI) */
42 DWORD Unknown3; /* 2EE0 (UHCI), 61A80 (EHCI) */
43 DWORD Unknown4; /* - */
44 DWORD Unknown5; /* 164 (UHCI), 178 (EHCI) */
45 DWORD Unknown6; /* 8C (UHCI), A0 (EHCI) */
46 DWORD Unknown7; /* 1C (UHCI), 30 (EHCI) */ /* Offset: 118 */
47 DWORD Unknown8; /* - */
48 DWORD Unknown9; /* - */
49 DWORD Unknown10; /* 2280 (UHCI), 2C800 (EHCI) */ /* Offset: 124 */
50 POPEN_ENDPOINT OpenEndpoint;
51 PPOKE_ENDPOINT PokeEndpoint;
52 PQUERY_ENDPOINT_REQUIREMENTS QueryEndpointRequirements;
53 PCLOSE_ENDPOINT CloseEndpoint;
54 PVOID StartController; /* P00010A1C (2) */ /* Offset: 138 */
55 PVOID StopController; /* P00010952 */ /* Offset: 13C */
56 PVOID SuspendController; /* P00011584 */ /* Offset: 140 */
57 PVOID ResumeController; /* P0001164C */ /* Offset: 144 */
58 PVOID InterruptService; /* P00013C72 */ /* Offset: 148 */
59 PVOID InterruptDpc; /* P00013D8E */ /* Offset: 14C */
60 PVOID SubmitTransfer; /* P00011010 */ /* Offset: 150 */
61 PVOID IsochTransfer; /* P000136E8 */ /* Offset: 154 */
62 PVOID AbortTransfer; /* P00011092 */ /* Offset: 158 */
63 PVOID GetEndpointState; /* P00010F48 */ /* Offset: 15C */
64 PVOID SetEndpointState; /* P00010EFA */ /* Offset: 160 */
65 PVOID PollEndpoint; /* P00010D32 */ /* Offset: 164 */
66 PVOID CheckController; /* P00011794 */ /* Offset: 168 */
67 PVOID Get32BitFrameNumber; /* P00010F86 */ /* Offset: 16C */
68 PVOID InterruptNextSOF; /* P00013F56 */ /* Offset: 170 */
69 PVOID EnableInterrupts; /* P00013ED0 */ /* Offset: 174 */
70 PVOID DisableInterrupts; /* P00013E18 */ /* Offset: 178 */
71 PVOID PollController; /* P00010FF2 */ /* Offset: 17C */
72 PVOID SetEndpointDataToggle; /* P000110E6 */ /* Offset: 180 */
73 PVOID GetEndpointStatus; /* P00010ECE */ /* Offset: 184 */
74 PVOID SetEndpointStatus; /* P00010E52 */ /* Offset: 188 */
75 DWORD Unknown36; /* - */
76 PVOID RHGetRootHubData; /* P00011AC6 */ /* Offset: 190 */
77 PVOID RHGetStatus; /* P00011B1A */ /* Offset: 194 */
78 PVOID RHGetPortStatus; /* P00011BBA */ /* Offset: 198 */
79 PVOID RHGetHubStatus; /* P00011B28 */ /* Offset: 19C */
80 PVOID RHSetFeaturePortReset; /* P00011F84 */ /* Offset: 1A0 */
81 PVOID RHSetFeaturePortPower; /* P00011BB4 */ /* Offset: 1A4 */
82 PVOID RHSetFeaturePortEnable; /* P00011BA2 */ /* Offset: 1A8 */
83 PVOID RHSetFeaturePortSuspend; /* P00011FF8 */ /* Offset: 1AC */
84 PVOID RHClearFeaturePortEnable; /* P00011B90 */ /* Offset: 1B0 */
85 PVOID RHClearFeaturePortPower; /* P00011BB4 */ /* Offset: 1B4 */
86 PVOID RHClearFeaturePortSuspend; /* P0001210E */ /* Offset: 1B8 */
87 PVOID RHClearFeaturePortEnableChange; /* P00012236 */ /* Offset: 1BC */
88 PVOID RHClearFeaturePortConnectChange; /* P000121DE */ /* Offset: 1C0 */
89 PVOID RHClearFeaturePortResetChange; /* P00012284 */ /* Offset: 1C4 */
90 PVOID RHClearFeaturePortSuspendChange; /* P0001229C */ /* Offset: 1C8 */
91 PVOID RHClearFeaturePortOvercurrentChange; /* P000122B4 */ /* Offset: 1CC */
92 PVOID RHDisableIrq; /* P00013F52 */ /* Offset: 1D0 */
93 PVOID RHDisableIrq2; /* P00013F52 */ /* Offset: 1D4 */
94 PVOID StartSendOnePacket; /* P00011144 */ /* Offset: 1D8 */
95 PVOID EndSendOnePacket; /* P000119B6 */ /* Offset: 1DC */
96 PVOID PassThru; /* P000110E0 */ /* Offset: 1E0 */
97 DWORD Unknown58[17]; /* - */
98 PVOID FlushInterrupts; /* P00013EA0 */ /* Offset: 228 */
99 /* ... */
100 } USB_CONTROLLER_INTERFACE, *PUSB_CONTROLLER_INTERFACE;
101 /**** E N D M S I N T E R N A L P R O T O C O L ****/
102
103 /*
104 * With this call USB miniport driver registers itself with usbport.sys
105 *
106 * Unknown1 - Could be 0x64 or 0xC8. (0x9A also ?)
107 * Unknown2 - Pointer to structure which contains function entry points
108 */
109 NTSTATUS STDCALL
110 USBPORT_RegisterUSBPortDriver(PDRIVER_OBJECT DriverObject, DWORD Unknown1,
111 PUSB_CONTROLLER_INTERFACE Interface);
112
113 /*
114 * This function always returns 0x10000001 in Windows XP SP1
115 */
116 NTSTATUS STDCALL
117 USBPORT_GetHciMn(VOID);
118
119 /*
120 * This method is provided for miniports to use to allocate their USB_CONTROLLER_INTERFACEs.
121 */
122 NTSTATUS STDCALL
123 USBPORT_AllocateUsbControllerInterface(OUT PUSB_CONTROLLER_INTERFACE *pControllerInterface);
124
125 /*
126 * We can't have an allocate without a free.
127 */
128 NTSTATUS STDCALL
129 USBPORT_FreeUsbControllerInterface(IN PUSB_CONTROLLER_INTERFACE ControllerInterface);
130 #endif /* _USBPORT_H */