10 #include <drivers/usbport/usbmport.h>
13 extern USBPORT_REGISTRATION_PACKET RegPacket
;
15 #define OHCI_HCD_ED_FLAG_CONTROL 0x00000001
16 #define OHCI_HCD_ED_FLAG_RESET_ON_HALT 0x00000008
17 #define OHCI_HCD_ED_FLAG_NOT_ACCESSED 0x00000010
19 #define OHCI_HCD_TD_FLAG_ALLOCATED 0x00000001
20 #define OHCI_HCD_TD_FLAG_PROCESSED 0x00000002
21 #define OHCI_HCD_TD_FLAG_CONTROL_STATUS 0x00000004
22 #define OHCI_HCD_TD_FLAG_DONE 0x00000008
23 #define OHCI_HCD_TD_FLAG_NOT_ACCESSED 0x00000010
25 #define OHCI_MAX_ISO_TRANSFER_SIZE 0x10000
26 #define OHCI_MAX_CONTROL_TRANSFER_SIZE 0x10000
27 #define OHCI_MAX_BULK_TRANSFER_SIZE 0x40000
28 #define OHCI_MAX_INTERRUPT_TRANSFER_SIZE 0x1000
30 #define OHCI_MAX_ISO_TD_COUNT 64
31 #define OHCI_MAX_CONTROL_TD_COUNT 38
32 #define OHCI_MAX_BULK_TD_COUNT 68
33 #define OHCI_MAX_INTERRUPT_TD_COUNT 4
35 #define OHCI_NON_DATA_CONTROL_TDS 2
37 #define OHCI_TRANSFER_FLAGS_SHORT_TRANSFER_OK 1
39 typedef struct _OHCI_TRANSFER
*POHCI_TRANSFER
;
41 typedef union _OHCI_HW_TRANSFER_DESCRIPTOR
{
43 OHCI_TRANSFER_DESCRIPTOR gTD
; // must be aligned to a 16-byte boundary
44 USB_DEFAULT_PIPE_SETUP_PACKET SetupPacket
;
48 OHCI_ISO_TRANSFER_DESCRIPTOR iTD
; // must be aligned to a 32-byte boundary
50 } OHCI_HW_TRANSFER_DESCRIPTOR
, *POHCI_HW_TRANSFER_DESCRIPTOR
;
52 C_ASSERT(sizeof(OHCI_HW_TRANSFER_DESCRIPTOR
) == 32);
54 typedef struct _OHCI_HCD_TD
{
56 OHCI_HW_TRANSFER_DESCRIPTOR HwTD
; // must be aligned to a 32-byte boundary
58 ULONG PhysicalAddress
;
65 } OHCI_HCD_TD
, *POHCI_HCD_TD
;
67 C_ASSERT(sizeof(OHCI_HCD_TD
) == 64);
69 typedef struct _OHCI_HCD_ED
{
71 OHCI_ENDPOINT_DESCRIPTOR HwED
; // must be aligned to a 16-byte boundary
73 ULONG PhysicalAddress
;
77 } OHCI_HCD_ED
, *POHCI_HCD_ED
;
79 C_ASSERT(sizeof(OHCI_HCD_ED
) == 64);
81 #define OHCI_STATIC_ED_TYPE_INTERRUPT 0
82 #define OHCI_STATIC_ED_TYPE_CONTROL 1
83 #define OHCI_STATIC_ED_TYPE_BULK 2
85 typedef struct _OHCI_STATIC_ED
{
87 POHCI_ENDPOINT_DESCRIPTOR HwED
;
88 ULONG PhysicalAddress
;
95 } OHCI_STATIC_ED
, *POHCI_STATIC_ED
;
97 typedef struct _OHCI_HC_RESOURCES
{
98 OHCI_HCCA HcHCCA
; // (256 byte align)
99 OHCI_ENDPOINT_DESCRIPTOR InterrruptHeadED
[63]; // (16 byte align)
100 OHCI_ENDPOINT_DESCRIPTOR ControlHeadED
; // (16 byte align)
101 OHCI_ENDPOINT_DESCRIPTOR BulkHeadED
; // (16 byte align)
102 } OHCI_HC_RESOURCES
, *POHCI_HC_RESOURCES
;
104 /* OHCI Endpoint follows USBPORT Endpoint */
105 typedef struct _OHCI_ENDPOINT
{
107 USBPORT_ENDPOINT_PROPERTIES EndpointProperties
;
108 POHCI_STATIC_ED HeadED
;
109 POHCI_HCD_TD FirstTD
;
111 ULONG MaxTransferDescriptors
;
112 POHCI_HCD_TD HcdHeadP
;
113 POHCI_HCD_TD HcdTailP
;
115 } OHCI_ENDPOINT
, *POHCI_ENDPOINT
;
117 /* OHCI Transfer follows USBPORT Transfer */
118 typedef struct _OHCI_TRANSFER
{
121 PUSBPORT_TRANSFER_PARAMETERS TransferParameters
;
124 USBD_STATUS USBDStatus
;
125 POHCI_ENDPOINT OhciEndpoint
;
127 POHCI_HCD_TD ControlStatusTD
;
128 } OHCI_TRANSFER
, *POHCI_TRANSFER
;
130 /* OHCI Extension follows USBPORT Extension */
131 typedef struct _OHCI_EXTENSION
{
133 POHCI_OPERATIONAL_REGISTERS OperationalRegs
;
134 OHCI_REG_FRAME_INTERVAL FrameInterval
;
137 POHCI_HC_RESOURCES HcResourcesVA
;
138 POHCI_HC_RESOURCES HcResourcesPA
;
139 OHCI_STATIC_ED IntStaticED
[63];
140 OHCI_STATIC_ED ControlStaticED
;
141 OHCI_STATIC_ED BulkStaticED
;
142 } OHCI_EXTENSION
, *POHCI_EXTENSION
;
147 OHCI_RH_GetRootHubData(
148 IN PVOID ohciExtension
,
149 IN PVOID rootHubData
);
154 IN PVOID ohciExtension
,
159 OHCI_RH_GetPortStatus(
160 IN PVOID ohciExtension
,
162 IN PUSB_PORT_STATUS_AND_CHANGE PortStatus
);
166 OHCI_RH_GetHubStatus(
167 IN PVOID ohciExtension
,
168 IN PUSB_HUB_STATUS_AND_CHANGE HubStatus
);
172 OHCI_RH_SetFeaturePortReset(
173 IN PVOID ohciExtension
,
178 OHCI_RH_SetFeaturePortPower(
179 IN PVOID ohciExtension
,
184 OHCI_RH_SetFeaturePortEnable(
185 IN PVOID ohciExtension
,
190 OHCI_RH_SetFeaturePortSuspend(
191 IN PVOID ohciExtension
,
196 OHCI_RH_ClearFeaturePortEnable(
197 IN PVOID ohciExtension
,
202 OHCI_RH_ClearFeaturePortPower(
203 IN PVOID ohciExtension
,
208 OHCI_RH_ClearFeaturePortSuspend(
209 IN PVOID ohciExtension
,
214 OHCI_RH_ClearFeaturePortEnableChange(
215 IN PVOID ohciExtension
,
220 OHCI_RH_ClearFeaturePortConnectChange(
221 IN PVOID ohciExtension
,
226 OHCI_RH_ClearFeaturePortResetChange(
227 IN PVOID ohciExtension
,
232 OHCI_RH_ClearFeaturePortSuspendChange(
233 IN PVOID ohciExtension
,
238 OHCI_RH_ClearFeaturePortOvercurrentChange(
239 IN PVOID ohciExtension
,
245 IN PVOID ohciExtension
);
250 IN PVOID ohciExtension
);
252 OHCI_REG_RH_DESCRIPTORA
254 OHCI_ReadRhDescriptorA(
255 IN POHCI_EXTENSION OhciExtension
);
257 #endif /* USBOHCI_H__ */