35 #ifndef __LPC_EHCI_H__
36 #define __LPC_EHCI_H__
38 #ifndef __LPC_EHCI_C__ // TODO INCLUDE FROM EHCI.C
39 #error "EHCI.h is private header and can only be included by EHCI.c, try to include HCD.h instead"
42 #ifdef __TEST__ // suppress static/inline for Testing purpose
50 #define HCD_MAX_QHD HCD_MAX_ENDPOINT
51 #define HCD_MAX_QTD (HCD_MAX_ENDPOINT + 3)
52 #define HCD_MAX_HS_ITD 4
53 #define HCD_MAX_SITD 16
55 #define FRAMELIST_SIZE_BITS 5
56 #define FRAME_LIST_SIZE (1024 >> FRAMELIST_SIZE_BITS)
61 #define INT_THRESHOLD_CTRL 0x00080000UL
62 #define ASYNC_SCHEDULE_PARK_MODE_ENABLE NO
63 #define ASYNC_SCHEDULE_PARK_MODE_COUNT 0
72 #define INT_SOF_RECEIVED_ENABLE NO
75 #define INT_FRAME_ROLL_OVER_ENABLE NO
85 #define PORT_WAKE_OVER_CURRENT NO
86 #define PORT_WAKE_ON_DISCONNECT NO
87 #define PORT_WAKE_ON_CONNECT NO
88 #define PORT_INDICATOR NO
98 #define USBMODE_DeviceController (2)
99 #define USBMODE_HostController (3)
100 #define USBMODE_VBusPowerSelect_High (1 << 5)
103 #define EHC_USBCMD_RunStop 0x00000001UL
104 #define EHC_USBCMD_HostReset 0x00000002UL
105 #define EHC_USBCMD_FrameListSize 0x0000000CUL
106 #define EHC_USBCMD_PeriodScheduleEnable 0x00000010UL
107 #define EHC_USBCMD_AsynScheduleEnable 0x00000020UL
108 #define EHC_USBCMD_IntAsyncAdvanceDoorbell 0x00000040UL
109 #define EHC_USBCMD_LightReset 0x00000080UL
110 #define EHC_USBCMD_AsyncScheduleParkCount 0x00000300UL
111 #define EHC_USBCMD_AsyncScheduleParkEnable 0x00000800UL
112 #define EHC_USBCMD_FrameListSizeBit2 0x00008000UL
113 #define EHC_USBCMD_InterruptThresholdControl 0x00FF0000UL
116 #define EHC_USBSTS_UsbInt 0x00000001UL
117 #define EHC_USBSTS_UsbErrorInt 0x00000002UL
118 #define EHC_USBSTS_PortChangeDetect 0x00000004UL
119 #define EHC_USBSTS_FrameListRollover 0x00000008UL
120 #define EHC_USBSTS_HostSystemError 0x00000010UL
121 #define EHC_USBSTS_IntAsyncAdvance 0x00000020UL
122 #define EHC_USBSTS_SofRecieveInt 0x00000080UL
123 #define EHC_USBSTS_HCHalted 0x00001000UL
124 #define EHC_USBSTS_Reclamation 0x00002000UL
125 #define EHC_USBSTS_PeriodScheduleStatus 0x00004000UL
126 #define EHC_USBSTS_AsyncScheduleStatus 0x00008000UL
127 #define EHC_USBSTS_UsbAsyncInt 0x00040000UL
128 #define EHC_USBSTS_UsbPeriodInt 0x00080000UL
131 #define EHC_USBINTR_UsbIntEnable 0x00000001UL
132 #define EHC_USBINTR_UsbErroIntEnable 0x00000002UL
133 #define EHC_USBINTR_PortChangeIntEnable 0x00000004UL
134 #define EHC_USBINTR_FrameListRolloverEnable 0x00000008UL
135 #define EHC_USBINTR_HostSystemErrorEnable 0x00000010UL
136 #define EHC_USBINTR_IntAsyncAdvanceEnable 0x00000020UL
137 #define EHC_USBINTR_SofRecieveEnable 0x00000080UL
138 #define EHC_USBINTR_UsbAsyncEnable 0x00040000UL
139 #define EHC_USBINTR_UsbPeriodEnable 0x00080000UL
140 #define EHC_USBINTR_ALL 0x000C00BFUL
143 #define EHC_FRINDEX_MASK 0x000003FFUL
144 #define EHC_UFRAME_MASK 0x00000007UL
145 #define EHC_MFRAME_MASK 0x00001FF8UL
148 #define EHC_PORTSC_CurrentConnectStatus 0x00000001UL
149 #define EHC_PORTSC_ConnectStatusChange 0x00000002UL
150 #define EHC_PORTSC_PortEnable 0x00000004UL
151 #define EHC_PORTSC_PortEnableChange 0x00000008UL
152 #define EHC_PORTSC_OvercurrentActive 0x00000010UL
153 #define EHC_PORTSC_OvercurrentChange 0x00000020UL
154 #define EHC_PORTSC_ForcePortResume 0x00000040UL
155 #define EHC_PORTSC_PortSuspend 0x00000080UL
156 #define EHC_PORTSC_PortReset 0x00000100UL
157 #define EHC_PORTSC_LineStatus 0x00000C00UL
158 #define EHC_PORTSC_PortPowerControl 0x00001000UL
159 #define EHC_PORTSC_PortOwner 0x00002000UL
160 #define EHC_PORTSC_PortIndicatorControl 0x0000C000UL
161 #define EHC_PORTSC_PortTestControl 0x000F0000UL
162 #define EHC_PORTSC_WakeonConnectEnable 0x00100000UL
163 #define EHC_PORTSC_WakeonDisconnectEnable 0x00200000UL
164 #define EHC_PORTSC_WakeonOvercurrentEnable 0x00400000UL
165 #define EHC_PORTSC_PhyClockDisable 0x00800000UL
166 #define EHC_PORTSC_PortForceFullspeedConnect 0x01000000UL
167 #define EHC_PORTSC_PortSpeed 0x0C000000UL
170 #define QTD_MAX_XFER_LENGTH 0x5000
171 #define FRAMELIST_ALIGNMENT 4096
173 #define SPLIT_MAX_LEN_UFRAME 188
181 typedef union un_EHCD_Link {
190 typedef struct st_EHCD_QTD {
365 typedef struct st_EHCI_HOST_DATA {
381 typedef struct st_PipeHandle {
395 #define EHCI_FRAME_LIST(HostID) ((HostID) ? PeriodFrameList1 : PeriodFrameList0 )
420 #if !defined(__ICCARM__)
442 static INLINE PHCD_QTD
HcdQTD(uint8_t HostID, uint8_t idx);
453 static void FreeQhd(uint8_t HostID, uint8_t QhdIdx);
461 uint16_t MaxPacketSize,
464 uint8_t HSHubDevAddr,
465 uint8_t HSHubPortNum,
472 static void FreeQtd(PHCD_QTD pQtd);